From: Tom Hughes Date: Sun, 29 Apr 2018 18:37:50 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/pull/1809' X-Git-Tag: live~3584 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/8bd001f1282b7a33a71c0565504e160dbe567d5d?hp=e4c37036dbc39fe3d11b4e905497c7f0cea060a8 Merge remote-tracking branch 'upstream/pull/1809' --- diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 2c8d29eb8..cdac8fd67 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -35,7 +35,7 @@ Lint/AssignmentInCondition: - 'app/controllers/notes_controller.rb' - 'app/controllers/trace_controller.rb' - 'app/controllers/user_controller.rb' - - 'app/controllers/user_preference_controller.rb' + - 'app/controllers/user_preferences_controller.rb' - 'app/helpers/application_helper.rb' - 'app/helpers/browse_helper.rb' - 'app/models/client_application.rb' diff --git a/CONFIGURE.md b/CONFIGURE.md index 3cbe31cb9..0b8af0483 100644 --- a/CONFIGURE.md +++ b/CONFIGURE.md @@ -86,6 +86,8 @@ potlatch2_key: "8lFmZPsagHV4l3rkAHq0hWY5vV3Ctl3oEFY1aXth" Follow the same process for registering and configuring iD (`id_key`) and the website/Notes (`oauth_key`), or to save time, simply reuse the same consumer key for each. +**NOTE:** If you forget to set up OAuth, then you will get an error message similar to `uninitialized constant ActionView::CompiledTemplates::ID_KEY`. + ## Troubleshooting Rails has its own log. To inspect the log, do this: diff --git a/Gemfile b/Gemfile index 09c662e4a..7d59cceb1 100644 --- a/Gemfile +++ b/Gemfile @@ -105,6 +105,8 @@ gem "logstasher" # Gems useful for development group :development do gem "annotate" + gem "better_errors" + gem "binding_of_caller" gem "listen" gem "vendorer" end diff --git a/Gemfile.lock b/Gemfile.lock index e4448fddc..2869ebad2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -50,7 +50,13 @@ GEM ast (2.4.0) autoprefixer-rails (8.2.0) execjs + better_errors (2.4.0) + coderay (>= 1.0.0) + erubi (>= 1.0.0) + rack (>= 0.9.0) bigdecimal (1.1.0) + binding_of_caller (0.7.2) + debug_inspector (>= 0.0.1) builder (3.2.3) canonical-rails (0.2.2) rails (>= 4.1, < 5.2) @@ -63,6 +69,7 @@ GEM xpath (>= 2.0, < 4.0) climate_control (0.2.0) cliver (0.3.2) + coderay (1.1.2) coffee-rails (4.2.2) coffee-script (>= 2.2.0) railties (>= 4.0.0) @@ -83,6 +90,7 @@ GEM safe_yaml (~> 1.0.0) crass (1.0.3) dalli (2.7.6) + debug_inspector (0.0.2) docile (1.1.5) dynamic_form (1.1.4) erubi (1.7.1) @@ -357,7 +365,9 @@ DEPENDENCIES actionpack-page_caching annotate autoprefixer-rails + better_errors bigdecimal (~> 1.1.0) + binding_of_caller canonical-rails capybara (~> 2.13) coffee-rails (~> 4.2) diff --git a/app/assets/javascripts/edit/id.js.erb b/app/assets/javascripts/edit/id.js.erb index 983117183..a85fcef45 100644 --- a/app/assets/javascripts/edit/id.js.erb +++ b/app/assets/javascripts/edit/id.js.erb @@ -2,9 +2,9 @@ $(document).ready(function () { var id = $("#id-embed"); if (id.data("key")) { - var hashParams = OSM.params(location.hash.substring(1)), - mapParams = OSM.mapParams(), - params = {}; + var hashParams = OSM.params(location.hash.substring(1)); + var mapParams = OSM.mapParams(); + var params = {}; if (mapParams.object) { params.id = mapParams.object.type[0] + mapParams.object.id; @@ -20,8 +20,9 @@ $(document).ready(function () { if (hashParams.background) params.background = hashParams.background; if (hashParams.comment) params.comment = hashParams.comment; - if (hashParams.disable_features) params.disable_features = hashParams.disable_features; if (hashParams.hashtags) params.hashtags = hashParams.hashtags; + if (hashParams.source) params.source = hashParams.source; + if (hashParams.disable_features) params.disable_features = hashParams.disable_features; if (hashParams.offset) params.offset = hashParams.offset; if (hashParams.walkthrough) params.walkthrough = hashParams.walkthrough; diff --git a/app/assets/javascripts/index/directions.js b/app/assets/javascripts/index/directions.js index 2b3319f8f..8a80328cc 100644 --- a/app/assets/javascripts/index/directions.js +++ b/app/assets/javascripts/index/directions.js @@ -69,6 +69,7 @@ OSM.Directions = function (map) { endpoint.setValue = function(value, latlng) { endpoint.value = value; delete endpoint.latlng; + input.removeClass("error"); input.val(value); if (latlng) { diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index c354b5386..9951d29ae 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -175,7 +175,7 @@ class ApplicationController < ActionController::Base end def authorize(realm = "Web Password", errormessage = "Couldn't authenticate you") - # make the @user object from any auth sources we have + # make the current_user object from any auth sources we have setup_user_auth # handle authenticate pass/fail @@ -377,9 +377,9 @@ class ApplicationController < ActionController::Base end ## - # ensure that there is a "this_user" instance variable - def lookup_this_user - render_unknown_user params[:display_name] unless @this_user = User.active.find_by(:display_name => params[:display_name]) + # ensure that there is a "user" instance variable + def lookup_user + render_unknown_user params[:display_name] unless @user = User.active.find_by(:display_name => params[:display_name]) end ## diff --git a/app/controllers/browse_controller.rb b/app/controllers/browse_controller.rb index 41fa14aae..b4cb4594f 100644 --- a/app/controllers/browse_controller.rb +++ b/app/controllers/browse_controller.rb @@ -3,7 +3,7 @@ class BrowseController < ApplicationController before_action :authorize_web before_action :set_locale - before_action :except => [:query] { |c| c.check_database_readable(true) } + before_action(:except => [:query]) { |c| c.check_database_readable(true) } before_action :require_oauth around_action :web_timeout diff --git a/app/controllers/diary_entry_controller.rb b/app/controllers/diary_entry_controller.rb index 7f5f4fb3a..c0b974c5e 100644 --- a/app/controllers/diary_entry_controller.rb +++ b/app/controllers/diary_entry_controller.rb @@ -4,7 +4,7 @@ class DiaryEntryController < ApplicationController before_action :authorize_web before_action :set_locale before_action :require_user, :only => [:new, :edit, :comment, :hide, :hidecomment, :subscribe, :unsubscribe] - before_action :lookup_this_user, :only => [:view, :comments] + before_action :lookup_user, :only => [:view, :comments] before_action :check_database_readable before_action :check_database_writable, :only => [:new, :edit, :comment, :hide, :hidecomment, :subscribe, :unsubscribe] before_action :require_administrator, :only => [:hide, :hidecomment] @@ -101,11 +101,11 @@ class DiaryEntryController < ApplicationController def list if params[:display_name] - @this_user = User.active.find_by(:display_name => params[:display_name]) + @user = User.active.find_by(:display_name => params[:display_name]) - if @this_user - @title = t "diary_entry.list.user_title", :user => @this_user.display_name - @entries = @this_user.diary_entries + if @user + @title = t "diary_entry.list.user_title", :user => @user.display_name + @entries = @user.diary_entries else render_unknown_user params[:display_name] return @@ -157,7 +157,7 @@ class DiaryEntryController < ApplicationController @entries = user.diary_entries @title = I18n.t("diary_entry.feed.user.title", :user => user.display_name) @description = I18n.t("diary_entry.feed.user.description", :user => user.display_name) - @link = "#{SERVER_PROTOCOL}://#{SERVER_URL}/user/#{user.display_name}/diary" + @link = url_for :controller => "diary_entry", :action => "list", :display_name => user.display_name, :host => SERVER_URL, :protocol => SERVER_PROTOCOL else head :not_found return @@ -169,11 +169,11 @@ class DiaryEntryController < ApplicationController @entries = @entries.where(:language_code => params[:language]) @title = I18n.t("diary_entry.feed.language.title", :language_name => Language.find(params[:language]).english_name) @description = I18n.t("diary_entry.feed.language.description", :language_name => Language.find(params[:language]).english_name) - @link = "#{SERVER_PROTOCOL}://#{SERVER_URL}/diary/#{params[:language]}" + @link = url_for :controller => "diary_entry", :action => "list", :language => params[:language], :host => SERVER_URL, :protocol => SERVER_PROTOCOL else @title = I18n.t("diary_entry.feed.all.title") @description = I18n.t("diary_entry.feed.all.description") - @link = "#{SERVER_PROTOCOL}://#{SERVER_URL}/diary" + @link = url_for :controller => "diary_entry", :action => "list", :host => SERVER_URL, :protocol => SERVER_PROTOCOL end end @@ -181,7 +181,7 @@ class DiaryEntryController < ApplicationController end def view - @entry = @this_user.diary_entries.visible.where(:id => params[:id]).first + @entry = @user.diary_entries.visible.where(:id => params[:id]).first if @entry @title = t "diary_entry.view.title", :user => params[:display_name], :title => @entry.title else @@ -205,7 +205,7 @@ class DiaryEntryController < ApplicationController def comments @comment_pages, @comments = paginate(:diary_comments, :conditions => { - :user_id => @this_user, + :user_id => @user, :visible => true }, :order => "created_at DESC", diff --git a/app/controllers/message_controller.rb b/app/controllers/message_controller.rb index 3952b67ca..d167755d4 100644 --- a/app/controllers/message_controller.rb +++ b/app/controllers/message_controller.rb @@ -4,7 +4,7 @@ class MessageController < ApplicationController before_action :authorize_web before_action :set_locale before_action :require_user - before_action :lookup_this_user, :only => [:new] + before_action :lookup_user, :only => [:new] before_action :check_database_readable before_action :check_database_writable, :only => [:new, :reply, :mark] before_action :allow_thirdparty_images, :only => [:new, :read] @@ -19,7 +19,7 @@ class MessageController < ApplicationController flash[:error] = t "message.new.limit_exceeded" else @message = Message.new(message_params) - @message.recipient = @this_user + @message.recipient = @user @message.sender = current_user @message.sent_on = Time.now.getutc @@ -31,7 +31,7 @@ class MessageController < ApplicationController end end - @message ||= Message.new(message_params.merge(:recipient => @this_user)) + @message ||= Message.new(message_params.merge(:recipient => @user)) @title = t "message.new.title" end diff --git a/app/controllers/notes_controller.rb b/app/controllers/notes_controller.rb index a51d70f90..853072b7b 100644 --- a/app/controllers/notes_controller.rb +++ b/app/controllers/notes_controller.rb @@ -278,14 +278,14 @@ class NotesController < ApplicationController # Display a list of notes by a specified user def mine if params[:display_name] - if @this_user = User.active.find_by(:display_name => params[:display_name]) + if @user = User.active.find_by(:display_name => params[:display_name]) @params = params.permit(:display_name) - @title = t "note.mine.title", :user => @this_user.display_name - @heading = t "note.mine.heading", :user => @this_user.display_name - @description = t "note.mine.subheading", :user => render_to_string(:partial => "user", :object => @this_user) + @title = t "notes.mine.title", :user => @user.display_name + @heading = t "notes.mine.heading", :user => @user.display_name + @description = t "notes.mine.subheading", :user => render_to_string(:partial => "user", :object => @user) @page = (params[:page] || 1).to_i @page_size = 10 - @notes = @this_user.notes + @notes = @user.notes @notes = @notes.visible unless current_user && current_user.moderator? @notes = @notes.order("updated_at DESC, id").distinct.offset((@page - 1) * @page_size).limit(@page_size).preload(:comments => :author).to_a else diff --git a/app/controllers/oauth_controller.rb b/app/controllers/oauth_controller.rb index 84bbcf185..ae6d0983b 100644 --- a/app/controllers/oauth_controller.rb +++ b/app/controllers/oauth_controller.rb @@ -30,7 +30,7 @@ class OauthController < ApplicationController @token = current_user.oauth_tokens.find_by :token => params[:token] if @token @token.invalidate! - flash[:notice] = t("oauth.revoke.flash", :application => @token.client_application.name) + flash[:notice] = t(".flash", :application => @token.client_application.name) end redirect_to oauth_clients_url(:display_name => @token.user.display_name) end @@ -41,7 +41,7 @@ class OauthController < ApplicationController append_content_security_policy_directives(:form_action => %w[*]) if @token.invalidated? - @message = t "oauth.oauthorize_failure.invalid" + @message = t "oauth.authorize_failure.invalid" render :action => "authorize_failure" elsif request.post? if user_authorizes_token? @@ -69,7 +69,7 @@ class OauthController < ApplicationController end else @token.invalidate! - @message = t("oauth.oauthorize_failure.denied", :app_name => @token.client_application.name) + @message = t("oauth.authorize_failure.denied", :app_name => @token.client_application.name) render :action => "authorize_failure" end end diff --git a/app/controllers/redactions_controller.rb b/app/controllers/redactions_controller.rb index f15060d5b..b8ecce9e2 100644 --- a/app/controllers/redactions_controller.rb +++ b/app/controllers/redactions_controller.rb @@ -25,7 +25,7 @@ class RedactionsController < ApplicationController # note that the description format will default to 'markdown' if @redaction.save - flash[:notice] = t("redaction.create.flash") + flash[:notice] = t(".flash") redirect_to @redaction else render :action => "new" @@ -42,7 +42,7 @@ class RedactionsController < ApplicationController @redaction.description = params[:redaction][:description] if @redaction.save - flash[:notice] = t("redaction.update.flash") + flash[:notice] = t(".flash") redirect_to @redaction else render :action => "edit" @@ -54,14 +54,14 @@ class RedactionsController < ApplicationController @redaction.old_ways.empty? && @redaction.old_relations.empty? if @redaction.destroy - flash[:notice] = t("redaction.destroy.flash") + flash[:notice] = t(".flash") redirect_to :redactions else - flash[:error] = t("redaction.destroy.error") + flash[:error] = t(".error") redirect_to @redaction end else - flash[:error] = t("redaction.destroy.not_empty") + flash[:error] = t(".not_empty") redirect_to @redaction end end diff --git a/app/controllers/user_blocks_controller.rb b/app/controllers/user_blocks_controller.rb index c41501367..2b7bf3f58 100644 --- a/app/controllers/user_blocks_controller.rb +++ b/app/controllers/user_blocks_controller.rb @@ -5,7 +5,7 @@ class UserBlocksController < ApplicationController before_action :set_locale before_action :require_user, :only => [:new, :create, :edit, :update, :revoke] before_action :require_moderator, :only => [:new, :create, :edit, :update, :revoke] - before_action :lookup_this_user, :only => [:new, :create, :blocks_on, :blocks_by] + before_action :lookup_user, :only => [:new, :create, :blocks_on, :blocks_by] before_action :lookup_user_block, :only => [:show, :edit, :update, :revoke] before_action :require_valid_params, :only => [:create, :update] before_action :check_database_readable @@ -37,7 +37,7 @@ class UserBlocksController < ApplicationController def create if @valid_params @user_block = UserBlock.new( - :user => @this_user, + :user => @user, :creator => current_user, :reason => params[:user_block][:reason], :ends_at => Time.now.getutc + @block_period.hours, @@ -45,7 +45,7 @@ class UserBlocksController < ApplicationController ) if @user_block.save - flash[:notice] = t("user_block.create.flash", :name => @this_user.display_name) + flash[:notice] = t(".flash", :name => @user.display_name) redirect_to @user_block else render :action => "new" @@ -58,14 +58,14 @@ class UserBlocksController < ApplicationController def update if @valid_params if @user_block.creator != current_user - flash[:error] = t("user_block.update.only_creator_can_edit") + flash[:error] = t(".only_creator_can_edit") redirect_to :action => "edit" elsif @user_block.update( :ends_at => Time.now.getutc + @block_period.hours, :reason => params[:user_block][:reason], :needs_view => params[:user_block][:needs_view] ) - flash[:notice] = t("user_block.update.success") + flash[:notice] = t(".success") redirect_to(@user_block) else render :action => "edit" @@ -80,7 +80,7 @@ class UserBlocksController < ApplicationController def revoke if params[:confirm] if @user_block.revoke! current_user - flash[:notice] = t "user_block.revoke.flash" + flash[:notice] = t ".flash" redirect_to(@user_block) end end @@ -92,7 +92,7 @@ class UserBlocksController < ApplicationController @params = params.permit(:display_name) @user_blocks_pages, @user_blocks = paginate(:user_blocks, :include => [:user, :creator, :revoker], - :conditions => { :user_id => @this_user.id }, + :conditions => { :user_id => @user.id }, :order => "user_blocks.ends_at DESC", :per_page => 20) end @@ -103,7 +103,7 @@ class UserBlocksController < ApplicationController @params = params.permit(:display_name) @user_blocks_pages, @user_blocks = paginate(:user_blocks, :include => [:user, :creator, :revoker], - :conditions => { :creator_id => @this_user.id }, + :conditions => { :creator_id => @user.id }, :order => "user_blocks.ends_at DESC", :per_page => 20) end @@ -128,10 +128,10 @@ class UserBlocksController < ApplicationController @valid_params = false if !UserBlock::PERIODS.include?(@block_period) - flash[:error] = t("user_block.filter.block_period") + flash[:error] = t("user_blocks.filter.block_period") elsif @user_block && !@user_block.active? - flash[:error] = t("user_block.filter.block_expired") + flash[:error] = t("user_blocks.filter.block_expired") else @valid_params = true diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index 0c3ad0b05..54e2fa9c0 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -377,7 +377,7 @@ class UserController < ApplicationController end def api_read - if @this_user.visible? + if @user.visible? render :action => :api_read, :content_type => "text/xml" else head :gone @@ -385,7 +385,7 @@ class UserController < ApplicationController end def api_details - @this_user = current_user + @user = current_user render :action => :api_read, :content_type => "text/xml" end @@ -398,11 +398,11 @@ class UserController < ApplicationController end def view - @this_user = User.find_by(:display_name => params[:display_name]) + @user = User.find_by(:display_name => params[:display_name]) - if @this_user && - (@this_user.visible? || (current_user && current_user.administrator?)) - @title = @this_user.display_name + if @user && + (@user.visible? || (current_user && current_user.administrator?)) + @title = @user.display_name else render_unknown_user params[:display_name] end @@ -462,15 +462,15 @@ class UserController < ApplicationController ## # sets a user's status def set_status - @this_user.status = params[:status] - @this_user.save + @user.status = params[:status] + @user.save redirect_to :action => "view", :display_name => params[:display_name] end ## # delete a user, marking them as deleted and removing personal data def delete - @this_user.delete + @user.delete redirect_to :action => "view", :display_name => params[:display_name] end @@ -761,17 +761,17 @@ class UserController < ApplicationController end ## - # ensure that there is a "this_user" instance variable + # ensure that there is a "user" instance variable def lookup_user_by_id - @this_user = User.find(params[:id]) + @user = User.find(params[:id]) end ## - # ensure that there is a "this_user" instance variable + # ensure that there is a "user" instance variable def lookup_user_by_name - @this_user = User.find_by(:display_name => params[:display_name]) + @user = User.find_by(:display_name => params[:display_name]) rescue ActiveRecord::RecordNotFound - redirect_to :action => "view", :display_name => params[:display_name] unless @this_user + redirect_to :action => "view", :display_name => params[:display_name] unless @user end ## diff --git a/app/controllers/user_preference_controller.rb b/app/controllers/user_preferences_controller.rb similarity index 97% rename from app/controllers/user_preference_controller.rb rename to app/controllers/user_preferences_controller.rb index 16165513a..0aa2e8d52 100644 --- a/app/controllers/user_preference_controller.rb +++ b/app/controllers/user_preferences_controller.rb @@ -1,5 +1,5 @@ # Update and read user preferences, which are arbitrayr key/val pairs -class UserPreferenceController < ApplicationController +class UserPreferencesController < ApplicationController skip_before_action :verify_authenticity_token before_action :authorize before_action :require_allow_read_prefs, :only => [:read_one, :read] diff --git a/app/controllers/user_roles_controller.rb b/app/controllers/user_roles_controller.rb index 37d4da00e..732a2bb2c 100644 --- a/app/controllers/user_roles_controller.rb +++ b/app/controllers/user_roles_controller.rb @@ -3,25 +3,25 @@ class UserRolesController < ApplicationController before_action :authorize_web before_action :require_user - before_action :lookup_this_user + before_action :lookup_user before_action :require_administrator before_action :require_valid_role before_action :not_in_role, :only => [:grant] before_action :in_role, :only => [:revoke] def grant - @this_user.roles.create(:role => @role, :granter => current_user) - redirect_to user_path(@this_user) + @user.roles.create(:role => @role, :granter => current_user) + redirect_to user_path(@user) end def revoke # checks that administrator role is not revoked from current user - if current_user == @this_user && @role == "administrator" + if current_user == @user && @role == "administrator" flash[:error] = t("user_role.filter.not_revoke_admin_current_user") else - UserRole.where(:user_id => @this_user.id, :role => @role).delete_all + UserRole.where(:user_id => @user.id, :role => @role).delete_all end - redirect_to user_path(@this_user) + redirect_to user_path(@user) end private @@ -32,7 +32,7 @@ class UserRolesController < ApplicationController def require_administrator unless current_user.administrator? flash[:error] = t "user_role.filter.not_an_administrator" - redirect_to user_path(@this_user) + redirect_to user_path(@user) end end @@ -43,25 +43,25 @@ class UserRolesController < ApplicationController @role = params[:role] unless UserRole::ALL_ROLES.include?(@role) flash[:error] = t("user_role.filter.not_a_role", :role => @role) - redirect_to user_path(@this_user) + redirect_to user_path(@user) end end ## # checks that the user doesn't already have this role def not_in_role - if @this_user.has_role? @role + if @user.has_role? @role flash[:error] = t("user_role.filter.already_has_role", :role => @role) - redirect_to user_path(@this_user) + redirect_to user_path(@user) end end ## # checks that the user already has this role def in_role - unless @this_user.has_role? @role + unless @user.has_role? @role flash[:error] = t("user_role.filter.doesnt_have_role", :role => @role) - redirect_to user_path(@this_user) + redirect_to user_path(@user) end end end diff --git a/app/helpers/user_blocks_helper.rb b/app/helpers/user_blocks_helper.rb index 3c9c0a37e..668eeb0e5 100644 --- a/app/helpers/user_blocks_helper.rb +++ b/app/helpers/user_blocks_helper.rb @@ -7,19 +7,19 @@ module UserBlocksHelper # if the block hasn't expired yet show the date, if the user just needs to login show that if block.needs_view? if block.ends_at > Time.now.getutc - I18n.t("user_block.helper.time_future_and_until_login", :time => friendly_date(block.ends_at)).html_safe + I18n.t("user_blocks.helper.time_future_and_until_login", :time => friendly_date(block.ends_at)).html_safe else - I18n.t("user_block.helper.until_login") + I18n.t("user_blocks.helper.until_login") end else - I18n.t("user_block.helper.time_future", :time => friendly_date(block.ends_at)).html_safe + I18n.t("user_blocks.helper.time_future", :time => friendly_date(block.ends_at)).html_safe end else # the max of the last update time or the ends_at time is when this block finished # either because the user viewed the block (updated_at) or it expired or was # revoked (ends_at) last_time = [block.ends_at, block.updated_at].max - I18n.t("user_block.helper.time_past", :time => friendly_date(last_time)).html_safe + I18n.t("user_blocks.helper.time_past", :time => friendly_date(last_time)).html_safe end end end diff --git a/app/models/notifier.rb b/app/models/notifier.rb index 36564f614..4b61b202c 100644 --- a/app/models/notifier.rb +++ b/app/models/notifier.rb @@ -8,9 +8,7 @@ class Notifier < ActionMailer::Base def signup_confirm(user, token) with_recipient_locale user do - @url = url_for(:host => SERVER_URL, - :protocol => SERVER_PROTOCOL, - :controller => "user", :action => "confirm", + @url = url_for(:controller => "user", :action => "confirm", :display_name => user.display_name, :confirm_string => token.token) @@ -22,9 +20,7 @@ class Notifier < ActionMailer::Base def email_confirm(user, token) with_recipient_locale user do @address = user.new_email - @url = url_for(:host => SERVER_URL, - :protocol => SERVER_PROTOCOL, - :controller => "user", :action => "confirm_email", + @url = url_for(:controller => "user", :action => "confirm_email", :confirm_string => token.token) mail :to => user.new_email, @@ -34,9 +30,7 @@ class Notifier < ActionMailer::Base def lost_password(user, token) with_recipient_locale user do - @url = url_for(:host => SERVER_URL, - :protocol => SERVER_PROTOCOL, - :controller => "user", :action => "reset_password", + @url = url_for(:controller => "user", :action => "reset_password", :token => token.token) mail :to => user.email, @@ -75,13 +69,9 @@ class Notifier < ActionMailer::Base @from_user = message.sender.display_name @text = message.body @title = message.title - @readurl = url_for(:host => SERVER_URL, - :protocol => SERVER_PROTOCOL, - :controller => "message", :action => "read", + @readurl = url_for(:controller => "message", :action => "read", :message_id => message.id) - @replyurl = url_for(:host => SERVER_URL, - :protocol => SERVER_PROTOCOL, - :controller => "message", :action => "reply", + @replyurl = url_for(:controller => "message", :action => "reply", :message_id => message.id) @author = @from_user @@ -99,26 +89,21 @@ class Notifier < ActionMailer::Base @from_user = comment.user.display_name @text = comment.body @title = comment.diary_entry.title - @readurl = url_for(:host => SERVER_URL, - :protocol => SERVER_PROTOCOL, - :controller => "diary_entry", + @readurl = url_for(:controller => "diary_entry", :action => "view", :display_name => comment.diary_entry.user.display_name, :id => comment.diary_entry.id, :anchor => "comment#{comment.id}") - @commenturl = url_for(:host => SERVER_URL, - :protocol => SERVER_PROTOCOL, - :controller => "diary_entry", + @commenturl = url_for(:controller => "diary_entry", :action => "view", :display_name => comment.diary_entry.user.display_name, :id => comment.diary_entry.id, :anchor => "newcomment") - @replyurl = url_for(:host => SERVER_URL, - :protocol => SERVER_PROTOCOL, - :controller => "message", + @replyurl = url_for(:controller => "message", :action => "new", :display_name => comment.user.display_name, :title => "Re: #{comment.diary_entry.title}") + @author = @from_user attach_user_avatar(comment.user) @@ -132,13 +117,9 @@ class Notifier < ActionMailer::Base def friend_notification(friend) with_recipient_locale friend.befriendee do @friend = friend - @viewurl = url_for(:host => SERVER_URL, - :protocol => SERVER_PROTOCOL, - :controller => "user", :action => "view", + @viewurl = url_for(:controller => "user", :action => "view", :display_name => @friend.befriender.display_name) - @friendurl = url_for(:host => SERVER_URL, - :protocol => SERVER_PROTOCOL, - :controller => "user", :action => "make_friend", + @friendurl = url_for(:controller => "user", :action => "make_friend", :display_name => @friend.befriender.display_name) @author = @friend.befriender.display_name @@ -150,7 +131,7 @@ class Notifier < ActionMailer::Base def note_comment_notification(comment, recipient) with_recipient_locale recipient do - @noteurl = browse_note_url(comment.note, :host => SERVER_URL) + @noteurl = browse_note_url(comment.note) @place = Nominatim.describe_location(comment.note.lat, comment.note.lon, 14, I18n.locale) @comment = comment.body @owner = recipient == comment.note.author @@ -178,7 +159,7 @@ class Notifier < ActionMailer::Base def changeset_comment_notification(comment, recipient) with_recipient_locale recipient do @to_user = recipient.display_name - @changeset_url = changeset_url(comment.changeset, :host => SERVER_URL) + @changeset_url = changeset_url(comment.changeset) @comment = comment.body @owner = recipient == comment.changeset.user @commenter = comment.author.display_name @@ -202,7 +183,7 @@ class Notifier < ActionMailer::Base private def set_shared_template_vars - @root_url = root_url(:host => SERVER_URL) + @root_url = root_url end def attach_project_logo diff --git a/app/views/browse/_containing_relation.html.erb b/app/views/browse/_containing_relation.html.erb index de41d9247..1b26a89b6 100644 --- a/app/views/browse/_containing_relation.html.erb +++ b/app/views/browse/_containing_relation.html.erb @@ -1,8 +1,8 @@
  • <%= linked_name = link_to h(printable_name(containing_relation.relation)), :action => "relation", :id => containing_relation.relation.id.to_s if containing_relation.member_role.blank? - raw t 'browse.containing_relation.entry', :relation_name => linked_name + raw t '.entry', :relation_name => linked_name else - raw t 'browse.containing_relation.entry_role', :relation_name => linked_name, :relation_role => h(containing_relation.member_role) + raw t '.entry_role', :relation_name => linked_name, :relation_role => h(containing_relation.member_role) end -%>
  • \ No newline at end of file +%> diff --git a/app/views/browse/_relation.html.erb b/app/views/browse/_relation.html.erb index 235a7e91d..e187da6ca 100644 --- a/app/views/browse/_relation.html.erb +++ b/app/views/browse/_relation.html.erb @@ -16,7 +16,7 @@ <% end %> <% unless relation.relation_members.empty? %> -

    <%= t'browse.relation.members' %>

    +

    <%= t '.members' %>

    <% end %> diff --git a/app/views/browse/_relation_member.html.erb b/app/views/browse/_relation_member.html.erb index 87b7e301b..cedc6f5e9 100644 --- a/app/views/browse/_relation_member.html.erb +++ b/app/views/browse/_relation_member.html.erb @@ -1,12 +1,12 @@ <% member_class = link_class(relation_member.member_type.downcase, relation_member.member) linked_name = link_to printable_name(relation_member.member), { :action => relation_member.member_type.downcase, :id => relation_member.member_id.to_s }, :title => link_title(relation_member.member), :rel => link_follow(relation_member.member) - type_str = t'browse.relation_member.type.' + relation_member.member_type.downcase + type_str = t '.type.' + relation_member.member_type.downcase %>
  • <%= if relation_member.member_role.blank? - raw t'browse.relation_member.entry', :type => type_str, :name => linked_name + raw t '.entry', :type => type_str, :name => linked_name else - raw t'browse.relation_member.entry_role', :type => type_str, :name => linked_name, :role => h(relation_member.member_role) + raw t '.entry_role', :type => type_str, :name => linked_name, :role => h(relation_member.member_role) end %>
  • diff --git a/app/views/browse/_tag_details.html.erb b/app/views/browse/_tag_details.html.erb index 16e3b51b2..9c3fbbfc2 100644 --- a/app/views/browse/_tag_details.html.erb +++ b/app/views/browse/_tag_details.html.erb @@ -1,5 +1,5 @@ <% unless tag_details.empty? %> -

    <%= t 'browse.tag_details.tags' %>

    +

    <%= t '.tags' %>

    <%= render :partial => "tag", :collection => tag_details.sort %>
    diff --git a/app/views/browse/_way.html.erb b/app/views/browse/_way.html.erb index c2287a1cc..4f331b5e9 100644 --- a/app/views/browse/_way.html.erb +++ b/app/views/browse/_way.html.erb @@ -18,14 +18,14 @@ <% end %> <% unless way.way_nodes.empty? %> -

    <%= t'browse.way.nodes' %>

    +

    <%= t '.nodes' %>

    @@ -24,11 +24,11 @@ <% end %> <% if @entries.empty? %> -

    <%= t 'diary_entry.list.no_entries' %>

    +

    <%= t '.no_entries' %>

    <% else %> -

    <%= t 'diary_entry.list.recent_entries' %>

    +

    <%= t '.recent_entries' %>

    - <% if @this_user %> + <% if @user %> <%= render :partial => 'diary_entry', :collection => @entries %> <% else %> <%= render :partial => 'diary_list_entry', :collection => @entries %> @@ -36,17 +36,17 @@ <% end %> diff --git a/app/views/diary_entry/no_such_entry.html.erb b/app/views/diary_entry/no_such_entry.html.erb index ff9a811c7..4fb5ca49d 100644 --- a/app/views/diary_entry/no_such_entry.html.erb +++ b/app/views/diary_entry/no_such_entry.html.erb @@ -1,5 +1,5 @@ <% content_for :heading do %> -

    <%= t 'diary_entry.no_such_entry.heading', :id => h(params[:id]) %>

    +

    <%= t '.heading', :id => h(params[:id]) %>

    <% end %> -

    <%= t 'diary_entry.no_such_entry.body', :id => h(params[:id]) %>

    +

    <%= t '.body', :id => h(params[:id]) %>

    diff --git a/app/views/diary_entry/view.html.erb b/app/views/diary_entry/view.html.erb index 3c2264d3e..3e8fbe990 100644 --- a/app/views/diary_entry/view.html.erb +++ b/app/views/diary_entry/view.html.erb @@ -1,7 +1,7 @@ <% content_for :heading do %>
    <%= user_image @entry.user %> -

    <%= link_to t('diary_entry.view.user_title', :user => h(@entry.user.display_name)), :action => :list %>

    +

    <%= link_to t('.user_title', :user => h(@entry.user.display_name)), :action => :list %>

    <%= rss_link_to :action => :rss, :display_name => @entry.user.display_name %>

    <% end %> @@ -13,13 +13,13 @@ <%= render :partial => 'diary_comment', :collection => @entry.visible_comments %> <%= if_logged_in(:div) do %> -

    <%= t 'diary_entry.view.leave_a_comment' %>

    +

    <%= t '.leave_a_comment' %>

    <%= error_messages_for 'diary_comment' %> <%= form_for :diary_comment, :url => { :action => 'comment' } do |f| %> <%= richtext_area :diary_comment, :body, :cols => 80, :rows => 15 %> - <%= submit_tag t('diary_entry.view.save_button') %> + <%= submit_tag t('.save_button') %> <% end %> <% if current_user and @entry.subscribers.exists?(current_user.id) %>
    <%= link_to t('javascripts.changesets.show.unsubscribe'), diary_entry_unsubscribe_path(:display_name => @entry.user.display_name, :id => @entry.id), :method => :post, :class => :button %>
    @@ -29,7 +29,7 @@ <% end %> <%= if_not_logged_in(:div) do %> -

    <%= raw t("diary_entry.view.login_to_leave_a_comment", :login_link => link_to(t("diary_entry.view.login"), :controller => 'user', :action => 'login', :referer => request.fullpath)) %>

    +

    <%= raw t(".login_to_leave_a_comment", :login_link => link_to(t(".login"), :controller => 'user', :action => 'login', :referer => request.fullpath)) %>

    <% end %> <% content_for :auto_discovery_link_tag do -%> diff --git a/app/views/geocoder/results.html.erb b/app/views/geocoder/results.html.erb index d990b7f0e..052b8822e 100644 --- a/app/views/geocoder/results.html.erb +++ b/app/views/geocoder/results.html.erb @@ -1,5 +1,5 @@ <% if @results.empty? %> -

    <%= t 'geocoder.results.no_results' %>

    +

    <%= t '.no_results' %>

    <% else %>
      <% @results.each do |result| %> @@ -8,7 +8,7 @@
    <% if @more_params %>
    - <%= link_to t('geocoder.results.more_results'), url_for(@more_params), :class => "button load_more" %> + <%= link_to t('.more_results'), url_for(@more_params), :class => "button load_more" %> <%= image_tag "searching.gif", :class => "loader", :style => "display: none;" %>
    <% end %> diff --git a/app/views/geocoder/search.html.erb b/app/views/geocoder/search.html.erb index 21484d4c0..2d2a25c97 100644 --- a/app/views/geocoder/search.html.erb +++ b/app/views/geocoder/search.html.erb @@ -3,7 +3,7 @@ <%= t('site.sidebar.search_results') %> <% @sources.each do |source| %> -

    <%= raw(t "geocoder.search.title.#{source}") %>

    +

    <%= raw(t ".title.#{source}") %>

    "> <%= image_tag "searching.gif", :class => "loader" %>
    diff --git a/app/views/message/_message_summary.html.erb b/app/views/message/_message_summary.html.erb index 5e1f17ef4..43a6a4bbf 100644 --- a/app/views/message/_message_summary.html.erb +++ b/app/views/message/_message_summary.html.erb @@ -2,7 +2,7 @@ <%= link_to h(message_summary.sender.display_name), user_path(message_summary.sender) %> <%= link_to h(message_summary.title), :controller => 'message', :action => 'read', :message_id => message_summary.id %> <%= l message_summary.sent_on, :format => :friendly %> - <%= button_to t('message.message_summary.unread_button'), {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'unread'}, { :remote => true } %> - <%= button_to t('message.message_summary.read_button'), {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'read'}, { :remote => true } %> - <%= button_to t('message.message_summary.delete_button'), {:controller => 'message', :action => 'delete', :message_id => message_summary.id, :referer => request.fullpath}, { :remote => true } %> + <%= button_to t('.unread_button'), {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'unread'}, { :remote => true } %> + <%= button_to t('.read_button'), {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'read'}, { :remote => true } %> + <%= button_to t('.delete_button'), {:controller => 'message', :action => 'delete', :message_id => message_summary.id, :referer => request.fullpath}, { :remote => true } %> diff --git a/app/views/message/_sent_message_summary.html.erb b/app/views/message/_sent_message_summary.html.erb index 6b4637708..8b6201247 100644 --- a/app/views/message/_sent_message_summary.html.erb +++ b/app/views/message/_sent_message_summary.html.erb @@ -2,5 +2,5 @@ <%= link_to h(sent_message_summary.recipient.display_name), user_path(sent_message_summary.recipient) %> <%= link_to h(sent_message_summary.title), :controller => 'message', :action => 'read', :message_id => sent_message_summary.id %> <%= l sent_message_summary.sent_on, :format => :friendly %> - <%= button_to t('message.sent_message_summary.delete_button'), :controller => 'message', :action => 'delete', :message_id => sent_message_summary.id, :referer => request.fullpath %> + <%= button_to t('.delete_button'), :controller => 'message', :action => 'delete', :message_id => sent_message_summary.id, :referer => request.fullpath %> diff --git a/app/views/message/inbox.html.erb b/app/views/message/inbox.html.erb index f9fc31149..56ed53c6d 100644 --- a/app/views/message/inbox.html.erb +++ b/app/views/message/inbox.html.erb @@ -1,5 +1,5 @@ <% content_for :heading do %> -

    <%= t'message.inbox.my_inbox'%>/<%= link_to t('message.inbox.outbox'), outbox_path(current_user.display_name) %>

    +

    <%= t '.my_inbox'%>/<%= link_to t('.outbox'), outbox_path(current_user.display_name) %>

    <% end %>

    <%= render :partial => "message_count" %>

    @@ -8,9 +8,9 @@ - - - + + + @@ -20,5 +20,5 @@
    <%= t'message.inbox.from' %><%= t'message.inbox.subject' %><%= t'message.inbox.date' %><%= t '.from' %><%= t '.subject' %><%= t '.date' %>
    <% else %> -
    <%= raw(t'message.inbox.no_messages_yet', :people_mapping_nearby_link => link_to(t('message.inbox.people_mapping_nearby'), user_path(current_user))) %>
    +
    <%= raw(t '.no_messages_yet', :people_mapping_nearby_link => link_to(t('.people_mapping_nearby'), user_path(current_user))) %>
    <% end %> diff --git a/app/views/message/new.html.erb b/app/views/message/new.html.erb index 0b54adb1c..44e919aa9 100644 --- a/app/views/message/new.html.erb +++ b/app/views/message/new.html.erb @@ -1,5 +1,5 @@ <% content_for :heading do %> -

    <%= raw(t'message.new.send_message_to', :name => link_to(h(@message.recipient.display_name), user_path(@message.recipient))) %>

    +

    <%= raw(t '.send_message_to', :name => link_to(h(@message.recipient.display_name), user_path(@message.recipient))) %>

    <% end %> <%= error_messages_for 'message' %> @@ -7,16 +7,16 @@ <%= form_for :message, :html => { :class => 'standard-form' }, :url => { :action => "new", :display_name => @message.recipient.display_name } do |f| %>
    - + <%= f.text_field :title, :size => 60, :class => "richtext_title" %>
    - + <%= richtext_area :message, :body, :cols => 80, :rows => 20 %>
    - <%= submit_tag t('message.new.send_button') %> - <%= link_to t('message.new.back_to_inbox'), { :controller => 'message', :action => 'inbox', :display_name => current_user.display_name }, :class => 'deemphasize button' %> + <%= submit_tag t('.send_button') %> + <%= link_to t('.back_to_inbox'), { :controller => 'message', :action => 'inbox', :display_name => current_user.display_name }, :class => 'deemphasize button' %>
    <% end %> diff --git a/app/views/message/no_such_message.html.erb b/app/views/message/no_such_message.html.erb index 9bf6ddbea..fd3b9075b 100644 --- a/app/views/message/no_such_message.html.erb +++ b/app/views/message/no_such_message.html.erb @@ -1,5 +1,5 @@ <% content_for :heading do %> -

    <%= t'message.no_such_message.heading' %>

    +

    <%= t '.heading' %>

    <% end %> -

    <%= t'message.no_such_message.body' %>

    +

    <%= t '.body' %>

    diff --git a/app/views/message/outbox.html.erb b/app/views/message/outbox.html.erb index a3a0dbbdf..38639cd99 100644 --- a/app/views/message/outbox.html.erb +++ b/app/views/message/outbox.html.erb @@ -1,16 +1,16 @@ <% content_for :heading do %> -

    <%= raw(t'message.outbox.my_inbox', :inbox_link => link_to(t('message.outbox.inbox'), inbox_path(current_user.display_name))) %>/<%= t'message.outbox.outbox' %>

    +

    <%= raw(t '.my_inbox', :inbox_link => link_to(t('.inbox'), inbox_path(current_user.display_name))) %>/<%= t'.outbox' %>

    <% end %> -

    <%= t'message.outbox.messages', :count => current_user.sent_messages.size %>

    +

    <%= t '.messages', :count => current_user.sent_messages.size %>

    <% if current_user.sent_messages.size > 0 %> - - - + + + @@ -19,5 +19,5 @@
    <%= t'message.outbox.to' %><%= t'message.outbox.subject' %><%= t'message.outbox.date' %><%= t '.to' %><%= t '.subject' %><%= t '.date' %>
    <% else %> -
    <%= raw(t'message.outbox.no_sent_messages', :people_mapping_nearby_link => link_to(t('message.outbox.people_mapping_nearby'), user_path(current_user))) %>
    +
    <%= raw(t '.no_sent_messages', :people_mapping_nearby_link => link_to(t('.people_mapping_nearby'), user_path(current_user))) %>
    <% end %> diff --git a/app/views/message/read.html.erb b/app/views/message/read.html.erb index c23eabe95..668094d33 100644 --- a/app/views/message/read.html.erb +++ b/app/views/message/read.html.erb @@ -14,9 +14,9 @@
    <%= @message.body.to_html %>
    - <%= button_to t('message.read.reply_button'), {:controller => 'message', :action => 'reply', :message_id => @message.id}, :class => 'reply-button' %> - <%= button_to t('message.read.unread_button'), {:controller => 'message', :action => 'mark', :message_id => @message.id, :mark => 'unread'}, :class => 'mark-unread-button' %> - <%= button_to t('message.read.delete_button'), {:controller => 'message', :action => 'delete', :message_id => @message.id}, :class => 'delete-button' %> + <%= button_to t('.reply_button'), {:controller => 'message', :action => 'reply', :message_id => @message.id}, :class => 'reply-button' %> + <%= button_to t('.unread_button'), {:controller => 'message', :action => 'mark', :message_id => @message.id, :mark => 'unread'}, :class => 'mark-unread-button' %> + <%= button_to t('.delete_button'), {:controller => 'message', :action => 'delete', :message_id => @message.id}, :class => 'delete-button' %> <% else %> @@ -36,5 +36,5 @@ <% end %> - <%= link_to t('message.read.back'), {:controller => 'message', :action => 'outbox', :display_name => current_user.display_name }, :class => "button deemphasize" %> + <%= link_to t('.back'), {:controller => 'message', :action => 'outbox', :display_name => current_user.display_name }, :class => "button deemphasize" %>
    diff --git a/app/views/notes/_comment.html.erb b/app/views/notes/_comment.html.erb index c0d6e17d3..d9c17848b 100644 --- a/app/views/notes/_comment.html.erb +++ b/app/views/notes/_comment.html.erb @@ -1,8 +1,8 @@
    <% if comment.author.nil? -%> -
    <%= t "note.description.#{comment.event}_at_html", :when => friendly_date(comment.created_at) %>
    +
    <%= t ".#{comment.event}_at_html", :when => friendly_date(comment.created_at) %>
    <% else -%> -
    <%= t "note.description.#{comment.event}_at_by_html", :when => friendly_date(comment.created_at), :user => note_author(comment.author, :only_path => false) %>
    +
    <%= t ".#{comment.event}_at_by_html", :when => friendly_date(comment.created_at), :user => note_author(comment.author, :only_path => false) %>
    <% end -%>
    <%= comment.body %>
    diff --git a/app/views/notes/_entry.html.erb b/app/views/notes/_entry.html.erb index 6f0c8fb71..624ecd15d 100644 --- a/app/views/notes/_entry.html.erb +++ b/app/views/notes/_entry.html.erb @@ -1,4 +1,4 @@ -

    <%= t "note.entry.comment" %>

    +

    <%= t ".comment" %>

    <%= render :partial => "comment", :object => entry %> -

    <%= t "note.entry.full" %>

    +

    <%= t ".full" %>

    <%= render :partial => "description", :object => entry.note %> diff --git a/app/views/notes/_note.rss.builder b/app/views/notes/_note.rss.builder index 38c42f1ec..9c72b8a5d 100644 --- a/app/views/notes/_note.rss.builder +++ b/app/views/notes/_note.rss.builder @@ -2,11 +2,11 @@ xml.item do location = describe_location(note.lat, note.lon, 14, locale) if note.closed? - xml.title t("note.rss.closed", :place => location) + xml.title t("notes.rss.closed", :place => location) elsif note.comments.length > 1 - xml.title t("note.rss.commented", :place => location) + xml.title t("notes.rss.commented", :place => location) else - xml.title t("note.rss.opened", :place => location) + xml.title t("notes.rss.opened", :place => location) end xml.link browse_note_url(note) diff --git a/app/views/notes/feed.rss.builder b/app/views/notes/feed.rss.builder index 708192e5f..4a4fb3e1a 100644 --- a/app/views/notes/feed.rss.builder +++ b/app/views/notes/feed.rss.builder @@ -5,15 +5,15 @@ xml.rss("version" => "2.0", "xmlns:geo" => "http://www.w3.org/2003/01/geo/wgs84_pos#", "xmlns:georss" => "http://www.georss.org/georss") do xml.channel do - xml.title t("note.rss.title") - xml.description t("note.rss.description_area", :min_lat => @min_lat, :min_lon => @min_lon, :max_lat => @max_lat, :max_lon => @max_lon) + xml.title t("notes.rss.title") + xml.description t("notes.rss.description_area", :min_lat => @min_lat, :min_lon => @min_lon, :max_lat => @max_lat, :max_lon => @max_lon) xml.link url_for(:controller => "site", :action => "index", :only_path => false) @comments.each do |comment| location = describe_location(comment.note.lat, comment.note.lon, 14, locale) xml.item do - xml.title t("note.rss.#{comment.event}", :place => location) + xml.title t("notes.rss.#{comment.event}", :place => location) xml.link url_for(:controller => "browse", :action => "note", :id => comment.note.id, :anchor => "c#{comment.id}", :only_path => false) xml.guid url_for(:controller => "browse", :action => "note", :id => comment.note.id, :anchor => "c#{comment.id}", :only_path => false) diff --git a/app/views/notes/index.rss.builder b/app/views/notes/index.rss.builder index e912b9921..d28efa194 100644 --- a/app/views/notes/index.rss.builder +++ b/app/views/notes/index.rss.builder @@ -5,8 +5,8 @@ xml.rss("version" => "2.0", "xmlns:geo" => "http://www.w3.org/2003/01/geo/wgs84_pos#", "xmlns:georss" => "http://www.georss.org/georss") do xml.channel do - xml.title t("note.rss.title") - xml.description t("note.rss.description_area", :min_lat => @min_lat, :min_lon => @min_lon, :max_lat => @max_lat, :max_lon => @max_lon) + xml.title t("notes.rss.title") + xml.description t("notes.rss.description_area", :min_lat => @min_lat, :min_lon => @min_lon, :max_lat => @max_lat, :max_lon => @max_lon) xml.link url_for(:controller => "site", :action => "index", :only_path => false) xml << (render(:partial => "note", :collection => @notes) || "") diff --git a/app/views/notes/mine.html.erb b/app/views/notes/mine.html.erb index 666c7dc8f..13824419e 100644 --- a/app/views/notes/mine.html.erb +++ b/app/views/notes/mine.html.erb @@ -8,11 +8,11 @@ - - - - - + + + + + <% @notes.each do |note| -%> class="creator"<% end %>> @@ -25,9 +25,9 @@ - - - + + + <% end -%>
    <%= t'note.mine.id' %><%= t'note.mine.creator' %><%= t'note.mine.description' %><%= t'note.mine.created_at' %><%= t'note.mine.last_changed' %><%= t '.id' %><%= t '.creator' %><%= t '.description' %><%= t '.created_at' %><%= t '.last_changed' %>
    <%= link_to note.id.to_s, :controller => "browse", :action => "note", :id => note.id %> <%= note_author(note.author) %><%= note.comments.first.body.to_html %><%= t 'note.mine.ago_html', :when => friendly_date(note.created_at) %><%= t 'note.mine.ago_html', :when => friendly_date(note.updated_at) %><%= note.comments.first.body.to_html %><%= t '.ago_html', :when => friendly_date(note.created_at) %><%= t '.ago_html', :when => friendly_date(note.updated_at) %>
    diff --git a/app/views/notes/show.rss.builder b/app/views/notes/show.rss.builder index 62ccbe8a9..f40647900 100644 --- a/app/views/notes/show.rss.builder +++ b/app/views/notes/show.rss.builder @@ -4,8 +4,8 @@ xml.rss("version" => "2.0", "xmlns:geo" => "http://www.w3.org/2003/01/geo/wgs84_pos#", "xmlns:georss" => "http://www.georss.org/georss") do xml.channel do - xml.title t("note.rss.title") - xml.description t("note.rss.description_item", :id => @note.id) + xml.title t("notes.rss.title") + xml.description t("notes.rss.description_item", :id => @note.id) xml.link url_for(:controller => "site", :action => "index", :only_path => false) xml << render(:partial => "note", :object => @note) diff --git a/app/views/notifier/_message_body.html.erb b/app/views/notifier/_message_body.html.erb index b71c5f994..38f491799 100644 --- a/app/views/notifier/_message_body.html.erb +++ b/app/views/notifier/_message_body.html.erb @@ -10,7 +10,7 @@ height: 50, border: 0 ), - user_url(@author, :host => SERVER_URL), + user_url(@author), :target => "_blank" ) %> diff --git a/app/views/notifier/changeset_comment_notification.html.erb b/app/views/notifier/changeset_comment_notification.html.erb index 80f9d8aa1..04bafb0d4 100644 --- a/app/views/notifier/changeset_comment_notification.html.erb +++ b/app/views/notifier/changeset_comment_notification.html.erb @@ -1,16 +1,16 @@

    - <%= t 'notifier.changeset_comment_notification.hi', :to_user => @to_user %> + <%= t '.hi', :to_user => @to_user %>

    <% if @owner %> - <%= raw t "notifier.changeset_comment_notification.commented.your_changeset", :commenter => link_to_user(@commenter), :time => @time %> + <%= raw t ".commented.your_changeset", :commenter => link_to_user(@commenter), :time => @time %> <% else %> - <%= raw t "notifier.changeset_comment_notification.commented.commented_changeset", :commenter => link_to_user(@commenter), :time => @time, :changeset_author => @changeset_author %> + <%= raw t ".commented.commented_changeset", :commenter => link_to_user(@commenter), :time => @time, :changeset_author => @changeset_author %> <% end %> <% if @changeset_comment %> - <%= raw t "notifier.changeset_comment_notification.commented.partial_changeset_with_comment", :changeset_comment => content_tag("em", @changeset_comment) %> + <%= raw t ".commented.partial_changeset_with_comment", :changeset_comment => content_tag("em", @changeset_comment) %> <% else %> - <%= t "notifier.changeset_comment_notification.commented.partial_changeset_without_comment" %> + <%= t ".commented.partial_changeset_without_comment" %> <% end %>

    @@ -19,11 +19,11 @@ <% end %>

    - <%= raw t 'notifier.changeset_comment_notification.details', :url => link_to(@changeset_url, @changeset_url) %> + <%= raw t '.details', :url => link_to(@changeset_url, @changeset_url) %>

    <% content_for :footer do %>

    - <%= raw t 'notifier.changeset_comment_notification.unsubscribe', :url => link_to(@changeset_url, @changeset_url, :style => "color: #222") %> + <%= raw t '.unsubscribe', :url => link_to(@changeset_url, @changeset_url, :style => "color: #222") %>

    <% end %> diff --git a/app/views/notifier/changeset_comment_notification.text.erb b/app/views/notifier/changeset_comment_notification.text.erb index 9919f2103..ce9c0099a 100644 --- a/app/views/notifier/changeset_comment_notification.text.erb +++ b/app/views/notifier/changeset_comment_notification.text.erb @@ -1,20 +1,20 @@ -<%= t 'notifier.changeset_comment_notification.hi', :to_user => @to_user %> +<%= t '.hi', :to_user => @to_user %> <% if @owner %> -<%= t "notifier.changeset_comment_notification.commented.your_changeset", :commenter => @commenter, :time => @time %> +<%= t ".commented.your_changeset", :commenter => @commenter, :time => @time %> <% else %> -<%= t "notifier.changeset_comment_notification.commented.commented_changeset", :commenter => @commenter, :time => @time, :changeset_author => @changeset_author %> +<%= t ".commented.commented_changeset", :commenter => @commenter, :time => @time, :changeset_author => @changeset_author %> <% end %> <% if @changeset_comment %> -<%= t "notifier.changeset_comment_notification.commented.partial_changeset_with_comment", :changeset_comment => @changeset_comment %> +<%= t ".commented.partial_changeset_with_comment", :changeset_comment => @changeset_comment %> <% else %> -<%= t "notifier.changeset_comment_notification.commented.partial_changeset_without_comment" %> +<%= t ".commented.partial_changeset_without_comment" %> <% end %> == <%= @comment.to_text %> == -<%= t 'notifier.changeset_comment_notification.details', :url => @changeset_url %> +<%= t '.details', :url => @changeset_url %> -<%= t 'notifier.changeset_comment_notification.unsubscribe', :url => @changeset_url %> +<%= t '.unsubscribe', :url => @changeset_url %> diff --git a/app/views/notifier/diary_comment_notification.html.erb b/app/views/notifier/diary_comment_notification.html.erb index 73bfe9a33..163223b44 100644 --- a/app/views/notifier/diary_comment_notification.html.erb +++ b/app/views/notifier/diary_comment_notification.html.erb @@ -1,8 +1,8 @@

    - <%= t'notifier.diary_comment_notification.hi', :to_user => @to_user %> + <%= t '.hi', :to_user => @to_user %>

    - <%= raw t'notifier.diary_comment_notification.header', :from_user => link_to_user(@from_user), :subject => content_tag("em", @title) %> + <%= raw t '.header', :from_user => link_to_user(@from_user), :subject => content_tag("em", @title) %>

    <%= message_body do %> @@ -10,7 +10,7 @@ <% end %> <% content_for :footer do %> -

    <%= raw t'notifier.diary_comment_notification.footer', +

    <%= raw t '.footer', :readurl => link_to(@readurl, @readurl) + tag(:br), :commenturl => link_to(@commenturl, @commenturl) + tag(:br), :replyurl => link_to(@replyurl, @replyurl) diff --git a/app/views/notifier/diary_comment_notification.text.erb b/app/views/notifier/diary_comment_notification.text.erb index 7d112a42b..b86c303ae 100644 --- a/app/views/notifier/diary_comment_notification.text.erb +++ b/app/views/notifier/diary_comment_notification.text.erb @@ -1,9 +1,9 @@ -<%= t'notifier.diary_comment_notification.hi', :to_user => @to_user %> +<%= t '.hi', :to_user => @to_user %> -<%= t'notifier.diary_comment_notification.header', :from_user => @from_user, :subject => @title %> +<%= t '.header', :from_user => @from_user, :subject => @title %> == <%= raw @text.to_text %> == -<%= t'notifier.diary_comment_notification.footer', :readurl => @readurl, :commenturl => @commenturl, :replyurl => @replyurl %> +<%= t '.footer', :readurl => @readurl, :commenturl => @commenturl, :replyurl => @replyurl %> diff --git a/app/views/notifier/friend_notification.html.erb b/app/views/notifier/friend_notification.html.erb index cfea97195..f6774f2dc 100644 --- a/app/views/notifier/friend_notification.html.erb +++ b/app/views/notifier/friend_notification.html.erb @@ -1,9 +1,9 @@ -

    <%= t 'notifier.friend_notification.had_added_you', :user => @friend.befriender.display_name %>

    +

    <%= t '.had_added_you', :user => @friend.befriender.display_name %>

    <%= message_body do %> -

    <%= raw t 'notifier.friend_notification.see_their_profile', :userurl => link_to(@viewurl, @viewurl) %>

    +

    <%= raw t '.see_their_profile', :userurl => link_to(@viewurl, @viewurl) %>

    <% unless @friend.befriendee.is_friends_with?(@friend.befriender) -%> -

    <%= raw t 'notifier.friend_notification.befriend_them', :befriendurl => link_to(@friendurl, @friendurl) %>

    +

    <%= raw t '.befriend_them', :befriendurl => link_to(@friendurl, @friendurl) %>

    <% end -%> <% end %> diff --git a/app/views/notifier/friend_notification.text.erb b/app/views/notifier/friend_notification.text.erb index ae89a4136..e1db966ab 100644 --- a/app/views/notifier/friend_notification.text.erb +++ b/app/views/notifier/friend_notification.text.erb @@ -1,7 +1,7 @@ -<%= t 'notifier.friend_notification.had_added_you', :user => @friend.befriender.display_name %> +<%= t '.had_added_you', :user => @friend.befriender.display_name %> -<%= t 'notifier.friend_notification.see_their_profile', :userurl => @viewurl %> +<%= t '.see_their_profile', :userurl => @viewurl %> <% unless @friend.befriendee.is_friends_with?(@friend.befriender) -%> -<%= t 'notifier.friend_notification.befriend_them', :befriendurl => @friendurl %> +<%= t '.befriend_them', :befriendurl => @friendurl %> <% end -%> diff --git a/app/views/notifier/message_notification.html.erb b/app/views/notifier/message_notification.html.erb index 97a352a49..4e4b2ea9a 100644 --- a/app/views/notifier/message_notification.html.erb +++ b/app/views/notifier/message_notification.html.erb @@ -1,8 +1,8 @@

    - <%= t'notifier.message_notification.hi', :to_user => @to_user %> + <%= t '.hi', :to_user => @to_user %>

    - <%= raw t'notifier.message_notification.header', + <%= raw t '.header', :from_user => link_to_user(@from_user), :subject => content_tag("em", @title) %> @@ -14,7 +14,7 @@ <% content_for :footer do %>

    - <%= t'notifier.message_notification.footer_html', + <%= t '.footer_html', :readurl => link_to(@readurl, @readurl) + tag(:br), :replyurl => link_to(@replyurl, @replyurl) %> diff --git a/app/views/notifier/message_notification.text.erb b/app/views/notifier/message_notification.text.erb index c006941d9..b3a74bb88 100644 --- a/app/views/notifier/message_notification.text.erb +++ b/app/views/notifier/message_notification.text.erb @@ -1,9 +1,9 @@ -<%= raw t'notifier.message_notification.hi', :to_user => @to_user %> +<%= raw t '.hi', :to_user => @to_user %> -<%= raw t'notifier.message_notification.header', :from_user => @from_user, :subject => @title %> +<%= raw t '.header', :from_user => @from_user, :subject => @title %> == <%= raw @text.to_text %> == -<%= word_wrap(t'notifier.message_notification.footer_html', :readurl => @readurl, :replyurl => @replyurl) %> +<%= word_wrap(t '.footer_html', :readurl => @readurl, :replyurl => @replyurl) %> diff --git a/app/views/notifier/note_comment_notification.html.erb b/app/views/notifier/note_comment_notification.html.erb index 909bffaa6..835168583 100644 --- a/app/views/notifier/note_comment_notification.html.erb +++ b/app/views/notifier/note_comment_notification.html.erb @@ -1,9 +1,9 @@ -

    <%= t 'notifier.note_comment_notification.greeting' %>

    +

    <%= t '.greeting' %>

    <% if @owner %> -

    <%= raw t "notifier.note_comment_notification.#{@event}.your_note", :commenter => link_to_user(@commenter), :place => @place %>

    +

    <%= raw t ".#{@event}.your_note", :commenter => link_to_user(@commenter), :place => @place %>

    <% else %> -

    <%= raw t "notifier.note_comment_notification.#{@event}.commented_note", :commenter => link_to_user(@commenter), :place => @place %>

    +

    <%= raw t ".#{@event}.commented_note", :commenter => link_to_user(@commenter), :place => @place %>

    <% end %> <% unless @comment.empty? %> @@ -12,4 +12,4 @@ <% end %> <% end %> -

    <%= raw t 'notifier.note_comment_notification.details', :url => link_to(@noteurl, @noteurl) %>

    +

    <%= raw t '.details', :url => link_to(@noteurl, @noteurl) %>

    diff --git a/app/views/notifier/note_comment_notification.text.erb b/app/views/notifier/note_comment_notification.text.erb index 5924c8a9d..7014a5057 100644 --- a/app/views/notifier/note_comment_notification.text.erb +++ b/app/views/notifier/note_comment_notification.text.erb @@ -1,9 +1,9 @@ -<%= t 'notifier.note_comment_notification.greeting' %> +<%= t '.greeting' %> <% if @owner %> -<%= t "notifier.note_comment_notification.#{@event}.your_note", :commenter => @commenter, :place => @place %> +<%= t ".#{@event}.your_note", :commenter => @commenter, :place => @place %> <% else %> -<%= t "notifier.note_comment_notification.#{@event}.commented_note", :commenter => @commenter, :place => @place %> +<%= t ".#{@event}.commented_note", :commenter => @commenter, :place => @place %> <% end %> <% unless @comment.empty? %> @@ -12,4 +12,4 @@ == <% end %> -<%= t 'notifier.note_comment_notification.details', :url => @noteurl %> +<%= t '.details', :url => @noteurl %> diff --git a/app/views/notifier/signup_confirm.html.erb b/app/views/notifier/signup_confirm.html.erb index 814deee91..a0e0079fc 100644 --- a/app/views/notifier/signup_confirm.html.erb +++ b/app/views/notifier/signup_confirm.html.erb @@ -1,9 +1,9 @@ -

    <%= t("notifier.signup_confirm.greeting") %>

    +

    <%= t(".greeting") %>

    -

    <%= t("notifier.signup_confirm.created", :site_url => SERVER_URL) %>

    +

    <%= t(".created", :site_url => SERVER_URL) %>

    -

    <%= t("notifier.signup_confirm.confirm") %>

    +

    <%= t(".confirm") %>

    <%= link_to @url, @url %>

    -

    <%= t("notifier.signup_confirm.welcome") %>

    +

    <%= t(".welcome") %>

    diff --git a/app/views/notifier/signup_confirm.text.erb b/app/views/notifier/signup_confirm.text.erb index aee44782d..e17056468 100644 --- a/app/views/notifier/signup_confirm.text.erb +++ b/app/views/notifier/signup_confirm.text.erb @@ -1,9 +1,9 @@ -<%= fp(t("notifier.signup_confirm.greeting")) %> +<%= fp(t(".greeting")) %> -<%= fp(t("notifier.signup_confirm.created", :site_url => SERVER_URL)) %> +<%= fp(t(".created", :site_url => SERVER_URL)) %> -<%= fp(t("notifier.signup_confirm.confirm")) %> +<%= fp(t(".confirm")) %> <%= @url %> -<%= fp(t("notifier.signup_confirm.welcome")) %> +<%= fp(t(".welcome")) %> diff --git a/app/views/oauth/authorize.html.erb b/app/views/oauth/authorize.html.erb index 6c8bc3a9e..3108c551a 100644 --- a/app/views/oauth/authorize.html.erb +++ b/app/views/oauth/authorize.html.erb @@ -1,19 +1,19 @@ <% content_for :heading do %> -

    <%= t "oauth.oauthorize.title" %>

    +

    <%= t ".title" %>

    <% end %> -

    <%= raw t("oauth.oauthorize.request_access", :app_name => link_to(@token.client_application.name, @token.client_application.url), :user => link_to(current_user.display_name, :controller => :user, :action => :view, :display_name => current_user.display_name)) %>

    +

    <%= raw t(".request_access", :app_name => link_to(@token.client_application.name, @token.client_application.url), :user => link_to(current_user.display_name, :controller => :user, :action => :view, :display_name => current_user.display_name)) %>

    <%= form_tag authorize_url do %> <%= hidden_field_tag "oauth_token", @token.token %> <%- if params[:oauth_callback] -%> <%= hidden_field_tag "oauth_callback", params[:oauth_callback] %> <%- end -%> -

    <%= t 'oauth.oauthorize.allow_to' %>

    +

    <%= t '.allow_to' %>

      <% @token.client_application.permissions.each do |perm| %> -
    • <%= check_box_tag perm.to_s, "yes", @token.read_attribute(perm) %><%= t "oauth.oauthorize.#{perm}" %>
    • +
    • <%= check_box_tag perm.to_s, "yes", @token.read_attribute(perm) %><%= t ".#{perm}" %>
    • <% end %>
    -

    <%= submit_tag t("oauth.oauthorize.grant_access") %>

    +

    <%= submit_tag t(".grant_access") %>

    <% end %> diff --git a/app/views/oauth/authorize_failure.html.erb b/app/views/oauth/authorize_failure.html.erb index 4afba70e3..7142a71a0 100644 --- a/app/views/oauth/authorize_failure.html.erb +++ b/app/views/oauth/authorize_failure.html.erb @@ -1,5 +1,5 @@ <% content_for :heading do %> -

    <%= t "oauth.oauthorize_failure.title" %>

    +

    <%= t ".title" %>

    <% end %>

    <%= @message %>

    diff --git a/app/views/oauth/authorize_success.html.erb b/app/views/oauth/authorize_success.html.erb index c8f56af33..9c817372f 100644 --- a/app/views/oauth/authorize_success.html.erb +++ b/app/views/oauth/authorize_success.html.erb @@ -1,9 +1,9 @@ <% content_for :heading do %> -

    <%= t "oauth.oauthorize_success.title" %>

    +

    <%= t ".title" %>

    <% end %> -

    <%= raw t("oauth.oauthorize_success.allowed", :app_name => link_to(@token.client_application.name, @token.client_application.url)) %>

    +

    <%= raw t(".allowed", :app_name => link_to(@token.client_application.name, @token.client_application.url)) %>

    <% if @token.oob? and not @token.oauth10? %> -

    <%= t "oauth.oauthorize_success.verification", :code => @token.verifier %>

    +

    <%= t ".verification", :code => @token.verifier %>

    <% end %> diff --git a/app/views/oauth_clients/_form.html.erb b/app/views/oauth_clients/_form.html.erb index 96ab68ad7..bb0506671 100644 --- a/app/views/oauth_clients/_form.html.erb +++ b/app/views/oauth_clients/_form.html.erb @@ -1,29 +1,29 @@
    - + <%= f.text_field :name %>
    - + <%= f.text_field :url %>
    - + <%= f.text_field :callback_url %>
    - + <%= f.text_field :support_url %>
    -

    <%= t'oauth_clients.form.requests' %>

    +

    <%= t '.requests' %>

    <% ClientApplication.all_permissions.each do |perm| %>
    <%= f.check_box perm %> - +
    <% end %>
    -
    \ No newline at end of file + diff --git a/app/views/oauth_clients/edit.html.erb b/app/views/oauth_clients/edit.html.erb index 397849c44..2a5f99381 100644 --- a/app/views/oauth_clients/edit.html.erb +++ b/app/views/oauth_clients/edit.html.erb @@ -1,8 +1,8 @@ <% content_for :heading do %> -

    <%= t'oauth_clients.edit.title' %>

    +

    <%= t '.title' %>

    <% end %> <%= form_for @client_application, :url => oauth_client_path(@client_application.user.display_name, @client_application), :html => { :method => :put } do |f| %> <%= render :partial => "form", :locals => { :f => f } %> - <%= submit_tag t'oauth_clients.edit.submit' %> + <%= submit_tag t '.submit' %> <% end %> diff --git a/app/views/oauth_clients/index.html.erb b/app/views/oauth_clients/index.html.erb index f88d9316c..64a316718 100644 --- a/app/views/oauth_clients/index.html.erb +++ b/app/views/oauth_clients/index.html.erb @@ -1,13 +1,13 @@ <% content_for :heading do %> -

    <%= t'oauth_clients.index.title' %>

    +

    <%= t '.title' %>

    <% end %> <% unless @tokens.empty? %> -

    <%= t'oauth_clients.index.my_tokens' %>

    -

    <%= t'oauth_clients.index.list_tokens' %>

    +

    <%= t '.my_tokens' %>

    +

    <%= t '.list_tokens' %>

    - - + + <% @tokens.each do |token|%> <%= content_tag_for :tr, token do %> @@ -15,22 +15,22 @@ <% end %> <% end %>
    <%= t'oauth_clients.index.application' %><%= t'oauth_clients.index.issued_at' %> 
    <%= t '.application' %><%= t '.issued_at' %> 
    <%= link_to token.client_application.name, token.client_application.url %> <%= form_tag :controller => 'oauth', :action => 'revoke' do %> <%= hidden_field_tag 'token', token.token %> - <%= submit_tag t('oauth_clients.index.revoke') %> + <%= submit_tag t('.revoke') %> <% end %>
    <% end %> -

    <%= t'oauth_clients.index.my_apps' %>

    +

    <%= t '.my_apps' %>

    <% if @client_applications.empty? %> -

    <%= raw(t('oauth_clients.index.no_apps', :oauth => "OAuth")) %>

    +

    <%= raw(t('.no_apps', :oauth => "OAuth")) %>

    <% else %> -

    <%= t'oauth_clients.index.registered_apps' %>

    +

    <%= t '.registered_apps' %>

    <% @client_applications.each do |client|%> <%= div_for client do %> <%= link_to client.name, :action => :show, :id => client.id %> <% end %> <% end %> <% end %> -

    <%= link_to t('oauth_clients.index.register_new'), :action => :new %>

    +

    <%= link_to t('.register_new'), :action => :new %>

    diff --git a/app/views/oauth_clients/new.html.erb b/app/views/oauth_clients/new.html.erb index 7542d77b5..b5767e6ca 100644 --- a/app/views/oauth_clients/new.html.erb +++ b/app/views/oauth_clients/new.html.erb @@ -1,10 +1,10 @@ <% content_for :heading do %> -

    <%= t'oauth_clients.new.title' %>

    +

    <%= t '.title' %>

    <% end %>
    <%= form_for :client_application, :url => { :action => :create } do |f| %> <%= render :partial => "form", :locals => { :f => f } %> - <%= submit_tag t('oauth_clients.new.submit') %> + <%= submit_tag t('.submit') %> <% end %>
    diff --git a/app/views/oauth_clients/not_found.erb b/app/views/oauth_clients/not_found.erb index d5c6ca755..fda9ab06d 100644 --- a/app/views/oauth_clients/not_found.erb +++ b/app/views/oauth_clients/not_found.erb @@ -1 +1 @@ -

    <%= t('oauth_clients.not_found.sorry', :type => @type) %>

    +

    <%= t('.sorry', :type => @type) %>

    diff --git a/app/views/oauth_clients/show.html.erb b/app/views/oauth_clients/show.html.erb index a23ce082d..200fbc7be 100644 --- a/app/views/oauth_clients/show.html.erb +++ b/app/views/oauth_clients/show.html.erb @@ -1,33 +1,33 @@ <% content_for :heading do %> -

    <%= t('oauth_clients.show.title', :app_name => @client_application.name) %>

    +

    <%= t('.title', :app_name => @client_application.name) %>

    <% end %>

    - <%= t'oauth_clients.show.key' %> <%=@client_application.key %> + <%= t '.key' %> <%=@client_application.key %>

    - <%= t'oauth_clients.show.secret' %> <%=@client_application.secret %> + <%= t '.secret' %> <%=@client_application.secret %>

    - <%= t'oauth_clients.show.url' %> http<%='s' if request.ssl? %>://<%= request.host_with_port %><%=@client_application.oauth_server.request_token_path %> + <%= t '.url' %> http<%='s' if request.ssl? %>://<%= request.host_with_port %><%=@client_application.oauth_server.request_token_path %>

    - <%= t'oauth_clients.show.access_url' %> http<%='s' if request.ssl? %>://<%= request.host_with_port %><%=@client_application.oauth_server.access_token_path %> + <%= t '.access_url' %> http<%='s' if request.ssl? %>://<%= request.host_with_port %><%=@client_application.oauth_server.access_token_path %>

    - <%= t'oauth_clients.show.authorize_url' %> http<%='s' if request.ssl? %>://<%= request.host_with_port %><%=@client_application.oauth_server.authorize_path %> + <%= t '.authorize_url' %> http<%='s' if request.ssl? %>://<%= request.host_with_port %><%=@client_application.oauth_server.authorize_path %>

    -

    <%= t'oauth_clients.show.requests' %>

    +

    <%= t '.requests' %>

      <% @client_application.permissions.each do |perm| %>
    • <%= t('oauth_clients.form.' + perm.to_s) %>
    • <% end %>
    -

    <%= t'oauth_clients.show.support_notice' %>

    +

    <%= t '.support_notice' %>

    - <%= button_to t('oauth_clients.show.edit'), edit_oauth_client_path(@client_application.user.display_name, @client_application), :method => :get, :class=> "oauth-edit" %> - <%= button_to t('oauth_clients.show.delete'), oauth_client_path(@client_application.user.display_name, @client_application), :method => :delete, :data => { :confirm => t('oauth_clients.show.confirm') }, :class=> "oauth-delete deemphasize" %> + <%= button_to t('.edit'), edit_oauth_client_path(@client_application.user.display_name, @client_application), :method => :get, :class=> "oauth-edit" %> + <%= button_to t('.delete'), oauth_client_path(@client_application.user.display_name, @client_application), :method => :delete, :data => { :confirm => t('.confirm') }, :class=> "oauth-delete deemphasize" %>
    diff --git a/app/views/redactions/edit.html.erb b/app/views/redactions/edit.html.erb index 2dd63c9cb..fe85d0756 100644 --- a/app/views/redactions/edit.html.erb +++ b/app/views/redactions/edit.html.erb @@ -1,22 +1,21 @@ -<% @title = t 'redaction.edit.title' %> +<% @title = t '.title' %> <% content_for :heading do %> -

    <%= t 'redaction.edit.heading' %>

    +

    <%= t '.heading' %>

    <% end %> <%= form_for(@redaction) do |f| %> <%= f.error_messages %>

    - <%= f.label :title, t('redaction.edit.title') %>
    + <%= f.label :title, t('.title') %>
    <%= f.text_field :title %>

    - <%= f.label :description, t('redaction.edit.description') %>
    + <%= f.label :description, t('.description') %>
    <%= richtext_area :redaction, :description, :cols => 80, :rows => 20, :format => @redaction.description_format %>

    - <%= f.submit t('redaction.edit.submit') %> + <%= f.submit t('.submit') %>

    <% end %> - diff --git a/app/views/redactions/index.html.erb b/app/views/redactions/index.html.erb index a5a85c38d..b53e9b747 100644 --- a/app/views/redactions/index.html.erb +++ b/app/views/redactions/index.html.erb @@ -1,10 +1,10 @@ -<% @title = t('redaction.index.title') %> +<% @title = t('.title') %> <% content_for :heading do %> -

    <%= t('redaction.index.heading') %>

    +

    <%= t('.heading') %>

    <% end %> <% unless @redactions.empty? %> <%= render :partial => 'redactions' %> <% else %> -

    <%= t 'redaction.index.empty' %>

    +

    <%= t '.empty' %>

    <% end %> diff --git a/app/views/redactions/new.html.erb b/app/views/redactions/new.html.erb index 5004c0e1e..e6838073d 100644 --- a/app/views/redactions/new.html.erb +++ b/app/views/redactions/new.html.erb @@ -1,22 +1,20 @@ -<% @title = t 'redaction.new.title' %> +<% @title = t '.title' %> <% content_for :heading do %> -

    <%= t 'redaction.new.heading' %>

    +

    <%= t '.heading' %>

    <% end %> <%= form_for(@redaction) do |f| %> <%= f.error_messages %>

    - <%= f.label :title, t('redaction.new.title') %>
    + <%= f.label :title, t('.title') %>
    <%= f.text_field :title %>

    - <%= f.label :description, t('redaction.new.description') %>
    + <%= f.label :description, t('.description') %>
    <%= richtext_area :redaction, :description, :cols => 80, :rows => 20, :format => @redaction.description_format %>

    - <%= f.submit t('redaction.new.submit') %> + <%= f.submit t('.submit') %>

    <% end %> - - diff --git a/app/views/redactions/show.html.erb b/app/views/redactions/show.html.erb index 99f7cd1f1..8ec72f3ac 100644 --- a/app/views/redactions/show.html.erb +++ b/app/views/redactions/show.html.erb @@ -1,20 +1,20 @@ -<% @title = t('redaction.show.title') %> +<% @title = t('.title') %> <% content_for :heading do %> -

    <%= t('redaction.show.heading', :title => @redaction.title) %>

    +

    <%= t('.heading', :title => @redaction.title) %>

    <% end %>

    - <%= t 'redaction.show.user' %> + <%= t '.user' %> <%= link_to(@redaction.user.display_name, user_path(@redaction.user)) %>

    - <%= t 'redaction.show.description' %> + <%= t '.description' %> <%= @redaction.description.to_html %>

    <% if current_user and current_user.moderator? %>
    - <%= button_to t('redaction.show.edit'), edit_redaction_path(@redaction), :method => :get %> - <%= button_to t('redaction.show.destroy'), @redaction, :method => "delete", :remote => true, :data => { :confirm => t('redaction.show.confirm') } %> + <%= button_to t('.edit'), edit_redaction_path(@redaction), :method => :get %> + <%= button_to t('.destroy'), @redaction, :method => "delete", :remote => true, :data => { :confirm => t('.confirm') } %>
    <% end %> diff --git a/app/views/site/_markdown_help.html.erb b/app/views/site/_markdown_help.html.erb index 7c5639912..aeb3a1be5 100644 --- a/app/views/site/_markdown_help.html.erb +++ b/app/views/site/_markdown_help.html.erb @@ -1,26 +1,26 @@ -

    <%= t "site.markdown_help.title_html" %>

    +

    <%= t ".title_html" %>

    • -

      <%= t "site.markdown_help.headings" %>

      -

      # <%= t "site.markdown_help.heading" %>
      - ## <%= t "site.markdown_help.subheading" %>

      +

      <%= t ".headings" %>

      +

      # <%= t ".heading" %>
      + ## <%= t ".subheading" %>

    • -

      <%= t "site.markdown_help.unordered" %>

      -

      * <%= t "site.markdown_help.first" %>
      - * <%= t "site.markdown_help.second" %>

      +

      <%= t ".unordered" %>

      +

      * <%= t ".first" %>
      + * <%= t ".second" %>

    • -

      <%= t "site.markdown_help.ordered" %>

      -

      1. <%= t "site.markdown_help.first" %>
      - 2. <%= t "site.markdown_help.second" %>

      +

      <%= t ".ordered" %>

      +

      1. <%= t ".first" %>
      + 2. <%= t ".second" %>

    • -

      <%= t "site.markdown_help.link" %>

      - [<%= t "site.markdown_help.text" %>](<%= t "site.markdown_help.url" %>) +

      <%= t ".link" %>

      + [<%= t ".text" %>](<%= t ".url" %>)
    • -

      <%= t "site.markdown_help.image" %>

      - ![<%= t "site.markdown_help.alt" %>](<%= t "site.markdown_help.url" %>) +

      <%= t ".image" %>

      + ![<%= t ".alt" %>](<%= t ".url" %>)
    diff --git a/app/views/site/about.html.erb b/app/views/site/about.html.erb index 0c8075c6e..702a0243d 100644 --- a/app/views/site/about.html.erb +++ b/app/views/site/about.html.erb @@ -1,37 +1,37 @@
    - <%= t "about_page.copyright_html" %> + <%= t ".copyright_html" %>
    -

    <%= raw t "about_page.used_by", :name => "OpenStreetMap" %>

    +

    <%= raw t ".used_by", :name => "OpenStreetMap" %>

    -

    <%= t "about_page.lede_text" %>

    -

    <%= t "about_page.local_knowledge_title" %>

    -

    <%= t "about_page.local_knowledge_html" %>

    +

    <%= t ".lede_text" %>

    +

    <%= t ".local_knowledge_title" %>

    +

    <%= t ".local_knowledge_html" %>

    -

    <%= t "about_page.community_driven_title" %>

    -

    <%= t "about_page.community_driven_html", :diary_path => diary_path %>

    +

    <%= t ".community_driven_title" %>

    +

    <%= t ".community_driven_html", :diary_path => diary_path %>

    -

    <%= t "about_page.open_data_title" %>

    -

    <%= t "about_page.open_data_html", :copyright_path => copyright_path %>

    +

    <%= t ".open_data_title" %>

    +

    <%= t ".open_data_html", :copyright_path => copyright_path %>

    -

    <%= t "about_page.partners_title" %>

    +

    <%= t ".partners_title" %>

    <%= t 'layouts.partners_html', :ucl => link_to(t('layouts.partners_ucl'), "https://www.ucl.ac.uk"), :ic => link_to(t('layouts.partners_ic'), "https://www.imperial.ac.uk/"), diff --git a/app/views/site/copyright.html.erb b/app/views/site/copyright.html.erb index 887782be2..1b85d201c 100644 --- a/app/views/site/copyright.html.erb +++ b/app/views/site/copyright.html.erb @@ -2,15 +2,15 @@ <% if @locale == 'en' %> - <% if t('license_page.legal_babble', :locale => I18n.locale) != t('license_page.legal_babble', :locale => :en) %> -

    <%= t 'license_page.native.title' %>

    + <% if t('.legal_babble', :locale => I18n.locale) != t('.legal_babble', :locale => :en) %> +

    <%= t '.native.title' %>

    - <%= raw t 'license_page.native.text', - :native_link => link_to(t('license_page.native.native_link'), + <%= raw t '.native.text', + :native_link => link_to(t('.native.native_link'), :controller => 'site', :action => 'copyright', :copyright_locale => nil), - :mapping_link => link_to(t('license_page.native.mapping_link'), + :mapping_link => link_to(t('.native.mapping_link'), :controller => 'site', :action => 'index') %>

    @@ -18,11 +18,11 @@ <% end %> <% else %> - <% if t('license_page.legal_babble', :locale => @locale) != t('license_page.legal_babble', :locale => :en) %> -

    <%= t 'license_page.foreign.title' %>

    + <% if t('.legal_babble', :locale => @locale) != t('.legal_babble', :locale => :en) %> +

    <%= t '.foreign.title' %>

    - <%= raw t 'license_page.foreign.text', - :english_original_link => link_to(t('license_page.foreign.english_link'), + <%= raw t '.foreign.text', + :english_original_link => link_to(t('.foreign.english_link'), :controller => 'site', :action => 'copyright', :copyright_locale => 'en') %> @@ -31,46 +31,46 @@ <% end %> <% end %> -

    <%= t "license_page.legal_babble.title_html", :locale => @locale %>

    +

    <%= t ".legal_babble.title_html", :locale => @locale %>

    <% end %> -

    <%= t "license_page.legal_babble.intro_1_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.intro_2_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.intro_3_html", :locale => @locale %>

    +

    <%= t ".legal_babble.intro_1_html", :locale => @locale %>

    +

    <%= t ".legal_babble.intro_2_html", :locale => @locale %>

    +

    <%= t ".legal_babble.intro_3_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.credit_title_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.credit_1_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.credit_2_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.credit_3_html", :locale => @locale %>

    +

    <%= t ".legal_babble.credit_title_html", :locale => @locale %>

    +

    <%= t ".legal_babble.credit_1_html", :locale => @locale %>

    +

    <%= t ".legal_babble.credit_2_html", :locale => @locale %>

    +

    <%= t ".legal_babble.credit_3_html", :locale => @locale %>

    <%= image_tag("attribution_example.png", - :alt => t('license_page.legal_babble.attribution_example.alt'), + :alt => t('.legal_babble.attribution_example.alt'), :border => 0, - :title => t('license_page.legal_babble.attribution_example.title')) %> + :title => t('.legal_babble.attribution_example.title')) %> -

    <%= t "license_page.legal_babble.more_title_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.more_1_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.more_2_html", :locale => @locale %>

    +

    <%= t ".legal_babble.more_title_html", :locale => @locale %>

    +

    <%= t ".legal_babble.more_1_html", :locale => @locale %>

    +

    <%= t ".legal_babble.more_2_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.contributors_title_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.contributors_intro_html", :locale => @locale %>

    +

    <%= t ".legal_babble.contributors_title_html", :locale => @locale %>

    +

    <%= t ".legal_babble.contributors_intro_html", :locale => @locale %>

      -
    • <%= t "license_page.legal_babble.contributors_at_html", :locale => @locale %>
    • -
    • <%= t "license_page.legal_babble.contributors_ca_html", :locale => @locale %>
    • -
    • <%= t "license_page.legal_babble.contributors_fi_html", :locale => @locale %>
    • -
    • <%= t "license_page.legal_babble.contributors_fr_html", :locale => @locale %>
    • -
    • <%= t "license_page.legal_babble.contributors_nl_html", :locale => @locale %>
    • -
    • <%= t "license_page.legal_babble.contributors_nz_html", :locale => @locale %>
    • -
    • <%= t "license_page.legal_babble.contributors_si_html", :locale => @locale %>
    • -
    • <%= t "license_page.legal_babble.contributors_za_html", :locale => @locale %>
    • -
    • <%= t "license_page.legal_babble.contributors_gb_html", :locale => @locale %>
    • +
    • <%= t ".legal_babble.contributors_at_html", :locale => @locale %>
    • +
    • <%= t ".legal_babble.contributors_ca_html", :locale => @locale %>
    • +
    • <%= t ".legal_babble.contributors_fi_html", :locale => @locale %>
    • +
    • <%= t ".legal_babble.contributors_fr_html", :locale => @locale %>
    • +
    • <%= t ".legal_babble.contributors_nl_html", :locale => @locale %>
    • +
    • <%= t ".legal_babble.contributors_nz_html", :locale => @locale %>
    • +
    • <%= t ".legal_babble.contributors_si_html", :locale => @locale %>
    • +
    • <%= t ".legal_babble.contributors_za_html", :locale => @locale %>
    • +
    • <%= t ".legal_babble.contributors_gb_html", :locale => @locale %>
    -

    <%= t "license_page.legal_babble.contributors_footer_1_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.contributors_footer_2_html", :locale => @locale %>

    +

    <%= t ".legal_babble.contributors_footer_1_html", :locale => @locale %>

    +

    <%= t ".legal_babble.contributors_footer_2_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.infringement_title_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.infringement_1_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.infringement_2_html", :locale => @locale %>

    +

    <%= t ".legal_babble.infringement_title_html", :locale => @locale %>

    +

    <%= t ".legal_babble.infringement_1_html", :locale => @locale %>

    +

    <%= t ".legal_babble.infringement_2_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.trademarks_title_html", :locale => @locale %>

    -

    <%= t "license_page.legal_babble.trademarks_1_html", :locale => @locale %>

    +

    <%= t ".legal_babble.trademarks_title_html", :locale => @locale %>

    +

    <%= t ".legal_babble.trademarks_1_html", :locale => @locale %>

    diff --git a/app/views/site/edit.html.erb b/app/views/site/edit.html.erb index 81095140e..e84adf2d4 100644 --- a/app/views/site/edit.html.erb +++ b/app/views/site/edit.html.erb @@ -4,9 +4,9 @@ <% elsif STATUS == :database_readonly or STATUS == :api_readonly %>

    <%= t 'layouts.osm_read_only' %>

    <% elsif !current_user.data_public? %> -

    <%= t 'site.edit.not_public' %>

    -

    <%= raw t 'site.edit.not_public_description', :user_page => (link_to t('site.edit.user_page_link'), {:controller => 'user', :action => 'account', :display_name => current_user.display_name, :anchor => 'public'}) %>

    -

    <%= raw t 'site.edit.anon_edits', :link => link_to(t('site.edit.anon_edits_link_text'), t('site.edit.anon_edits_link')) %>

    +

    <%= t '.not_public' %>

    +

    <%= raw t '.not_public_description', :user_page => (link_to t('.user_page_link'), {:controller => 'user', :action => 'account', :display_name => current_user.display_name, :anchor => 'public'}) %>

    +

    <%= raw t 'site.edit.anon_edits', :link => link_to(t('.anon_edits_link_text'), t('.anon_edits_link')) %>

    <% else %> <%= render :partial => preferred_editor %> <% end %> diff --git a/app/views/site/export.html.erb b/app/views/site/export.html.erb index bf5376fb5..f11ad8d79 100644 --- a/app/views/site/export.html.erb +++ b/app/views/site/export.html.erb @@ -1,8 +1,8 @@ -<% set_title(t('export.title')) %> +<% set_title(t('.title')) %>

    - <%= t 'export.title' %> + <%= t '.title' %>

    <%= form_tag({:controller => "export", :action => "finish"}, :class => "export_form") do %> @@ -17,37 +17,37 @@

    <%= text_field_tag('minlat', nil, :size => 10, :class => "export_bound") %>
    - <%= t'export.start.manually_select' %> + <%= t '.manually_select' %>
    -

    <%= t'export.start.licence' %>

    -

    <%= raw t 'export.start.export_details' %>

    +

    <%= t '.licence' %>

    +

    <%= raw t '.export_details' %>

    - <%= t'export.start.too_large.body' %> + <%= t '.too_large.body' %>

    - <%= submit_tag t('export.start.export_button') %> + <%= submit_tag t('.export_button') %>
    -

    <%= t'export.start.too_large.advice' %>

    +

    <%= t '.too_large.advice' %>

    -
    -
    <%= t'export.start.too_large.overpass.title' %>
    -
    <%= t'export.start.too_large.overpass.description' %>
    - -
    <%= t'export.start.too_large.planet.title' %>
    -
    <%= t'export.start.too_large.planet.description' %>
    +
    +
    <%= t '.too_large.overpass.title' %>
    +
    <%= t '.too_large.overpass.description' %>
    -
    <%= t'export.start.too_large.geofabrik.title' %>
    -
    <%= t'export.start.too_large.geofabrik.description' %>
    +
    <%= t '.too_large.planet.title' %>
    +
    <%= t '.too_large.planet.description' %>
    -
    <%= t'export.start.too_large.other.title' %>
    -
    <%= t'export.start.too_large.other.description' %>
    +
    <%= t '.too_large.geofabrik.title' %>
    +
    <%= t '.too_large.geofabrik.description' %>
    + +
    <%= t '.too_large.other.title' %>
    +
    <%= t '.too_large.other.description' %>
    <% end %> diff --git a/app/views/site/fixthemap.html.erb b/app/views/site/fixthemap.html.erb index fc5fecc9a..571a9b25f 100644 --- a/app/views/site/fixthemap.html.erb +++ b/app/views/site/fixthemap.html.erb @@ -3,35 +3,35 @@ <% end %> <% content_for :heading do %> -

    <%= t "fixthemap.title" %>

    +

    <%= t ".title" %>

    <% end %>

    <%= t "layouts.intro_header" %>

    <%= t "layouts.intro_text" %>

    -

    <%= t "fixthemap.how_to_help.title" %>

    +

    <%= t ".how_to_help.title" %>

    -

    <%= t "fixthemap.how_to_help.join_the_community.title" %>

    - <%= t "fixthemap.how_to_help.join_the_community.explanation_html" %> +

    <%= t ".how_to_help.join_the_community.title" %>

    + <%= t ".how_to_help.join_the_community.explanation_html" %>
    -

    <%= t "welcome_page.add_a_note.title" %>

    -

    <%= t "welcome_page.add_a_note.paragraph_1_html" %>

    -

    <%= t "fixthemap.how_to_help.add_a_note.instructions_html", :map_url => root_path %>

    +

    <%= t "site.welcome.add_a_note.title" %>

    +

    <%= t "site.welcome.add_a_note.paragraph_1_html" %>

    +

    <%= t ".how_to_help.add_a_note.instructions_html", :map_url => root_path %>

    -

    <%= t "fixthemap.other_concerns.title" %>

    -

    <%= t "fixthemap.other_concerns.explanation_html" %>

    +

    <%= t ".other_concerns.title" %>

    +

    <%= t ".other_concerns.explanation_html" %>

    -

    <%= t "welcome_page.questions.title" %>

    +

    <%= t "site.welcome.questions.title" %>

    -

    <%= t "welcome_page.questions.paragraph_1_html", :help_url => help_path %>

    +

    <%= t "site.welcome.questions.paragraph_1_html", :help_url => help_path %>

    diff --git a/app/views/site/help.html.erb b/app/views/site/help.html.erb index dff2108ca..085ea63d5 100644 --- a/app/views/site/help.html.erb +++ b/app/views/site/help.html.erb @@ -1,18 +1,18 @@ <% content_for :heading do %> -

    <%= t "help_page.title" %>

    +

    <%= t ".title" %>

    <% end %> -

    <%= t "help_page.introduction" %>

    +

    <%= t ".introduction" %>

    <% ['welcome', 'beginners_guide', 'help', 'mailing_lists', 'forums', 'irc', 'switch2osm', 'wiki'].each do |site| %> <% unless site == 'welcome' && !current_user %>

    - - <%= t "help_page.#{site}.title" %> + + <%= t ".#{site}.title" %>

    -

    <%= t "help_page.#{site}.description" %>

    +

    <%= t ".#{site}.description" %>

    <% end %> <% end %> diff --git a/app/views/site/key.html.erb b/app/views/site/key.html.erb index 039c9a51c..91dfd1250 100644 --- a/app/views/site/key.html.erb +++ b/app/views/site/key.html.erb @@ -7,7 +7,7 @@ <%= image_tag "key/#{name}/#{entry['image']}" %> - <%= [*t("site.key.table.entry.#{entry['name']}")].to_sentence %> + <%= [*t(".table.entry.#{entry['name']}")].to_sentence %> <% end %> diff --git a/app/views/site/welcome.html.erb b/app/views/site/welcome.html.erb index 92220039a..dc6a519df 100644 --- a/app/views/site/welcome.html.erb +++ b/app/views/site/welcome.html.erb @@ -3,71 +3,71 @@ <% end %> <% content_for :heading do %> -

    <%= t "welcome_page.title" %>

    +

    <%= t ".title" %>

    <% end %> -

    <%= t "welcome_page.introduction_html" %>

    +

    <%= t ".introduction_html" %>

    -

    <%= t "welcome_page.whats_on_the_map.title" %>

    +

    <%= t ".whats_on_the_map.title" %>

    -

    <%= t "welcome_page.whats_on_the_map.on_html" %>

    +

    <%= t ".whats_on_the_map.on_html" %>

    -

    <%= t "welcome_page.whats_on_the_map.off_html" %>

    +

    <%= t ".whats_on_the_map.off_html" %>

    -

    <%= t "welcome_page.basic_terms.title" %>

    +

    <%= t ".basic_terms.title" %>

    -

    <%= t "welcome_page.basic_terms.paragraph_1_html" %>

    +

    <%= t ".basic_terms.paragraph_1_html" %>

    -

    <%= t "welcome_page.basic_terms.editor_html" %>

    +

    <%= t ".basic_terms.editor_html" %>

    -

    <%= t "welcome_page.basic_terms.node_html" %>

    +

    <%= t ".basic_terms.node_html" %>

    -

    <%= t "welcome_page.basic_terms.way_html" %>

    +

    <%= t ".basic_terms.way_html" %>

    -

    <%= t "welcome_page.basic_terms.tag_html" %>

    +

    <%= t ".basic_terms.tag_html" %>

    -

    <%= t "welcome_page.rules.title" %>

    +

    <%= t ".rules.title" %>

    -

    <%= t "welcome_page.rules.paragraph_1_html" %>

    +

    <%= t ".rules.paragraph_1_html" %>

    -

    <%= t "welcome_page.questions.title" %>

    +

    <%= t ".questions.title" %>

    -

    <%= t "welcome_page.questions.paragraph_1_html", :help_url => help_path %>

    +

    <%= t ".questions.paragraph_1_html", :help_url => help_path %>

    -

    <%= t "welcome_page.add_a_note.title" %>

    -

    <%= t "welcome_page.add_a_note.paragraph_1_html" %>

    -

    <%= t "welcome_page.add_a_note.paragraph_2_html", :map_url => root_path %>

    +

    <%= t ".add_a_note.title" %>

    +

    <%= t ".add_a_note.paragraph_1_html" %>

    +

    <%= t ".add_a_note.paragraph_2_html", :map_url => root_path %>

    diff --git a/app/views/trace/_description.html.erb b/app/views/trace/_description.html.erb index 9b81283b2..30abbaba6 100644 --- a/app/views/trace/_description.html.erb +++ b/app/views/trace/_description.html.erb @@ -1,6 +1,6 @@ <%= image_tag(url_for(:controller => :trace, :action => :icon, :id => description.id, :display_name => description.user.display_name)) %> <% if description.size -%> -<%= t "trace.description.description_with_count", :count => description.size, :user => description.user.display_name %> +<%= t ".description_with_count", :count => description.size, :user => description.user.display_name %> <% else -%> -<%= t "trace.description.description_without_count", :user => description.user.display_name %> +<%= t ".description_without_count", :user => description.user.display_name %> <% end -%> diff --git a/app/views/trace/_trace.html.erb b/app/views/trace/_trace.html.erb index ecadacc64..0847ddaf1 100644 --- a/app/views/trace/_trace.html.erb +++ b/app/views/trace/_trace.html.erb @@ -5,25 +5,25 @@ <% if trace.inserted %> <% else %> - <%= t'trace.trace.pending' %> + <%= t '.pending' %> <% end %> <% end %> <%= link_to trace.name, {:controller => 'trace', :action => 'view', :display_name => trace.user.display_name, :id => trace.id} %> ... <% if trace.inserted %> - (<%= t'trace.trace.count_points', :count => trace.size.to_s.gsub(/(\d)(?=(\d{3})+$)/,'\1,') %>) + (<%= t '.count_points', :count => trace.size.to_s.gsub(/(\d)(?=(\d{3})+$)/,'\1,') %>) <% end %> - ... <%= t'trace.trace.ago', :time_in_words_ago => time_ago_in_words(trace.timestamp) %> - <%= link_to_if trace.inserted?, t('trace.trace.map'), {:controller => 'site', :action => 'index', :mlat => trace.latitude, :mlon => trace.longitude, :anchor => "map=14/#{trace.latitude}/#{trace.longitude}"}, {:title => t('trace.trace.view_map')} %> / - <%= link_to t('trace.trace.edit'), {:controller => 'site', :action => 'edit', :gpx => trace.id }, {:title => t('trace.trace.edit_map')} %> - <%= t('trace.trace.' + trace.visibility) %> + ... <%= t '.ago', :time_in_words_ago => time_ago_in_words(trace.timestamp) %> + <%= link_to_if trace.inserted?, t('.map'), {:controller => 'site', :action => 'index', :mlat => trace.latitude, :mlon => trace.longitude, :anchor => "map=14/#{trace.latitude}/#{trace.longitude}"}, {:title => t('.view_map')} %> / + <%= link_to t('.edit'), {:controller => 'site', :action => 'edit', :gpx => trace.id }, {:title => t('.edit_map')} %> + <%= t('.' + trace.visibility) %>
    <%= trace.description %>
    - <%= t'trace.trace.by' %> <%=link_to h(trace.user.display_name), user_path(trace.user) %> + <%= t '.by' %> <%=link_to h(trace.user.display_name), user_path(trace.user) %> <% if !trace.tags.empty? %> - <%= t'trace.trace.in' %> + <%= t '.in' %> <%= raw(trace.tags.collect { |tag| link_to_tag tag.tag }.join(", ")) %> <% end %> diff --git a/app/views/trace/_trace_optionals.html.erb b/app/views/trace/_trace_optionals.html.erb index a20091c07..6f0c2130b 100644 --- a/app/views/trace/_trace_optionals.html.erb +++ b/app/views/trace/_trace_optionals.html.erb @@ -1,6 +1,6 @@ <% content_for :optionals do %>
    -

    <%= t'trace.trace_optionals.tags' %>

    +

    <%= t '.tags' %>

    <% if @all_tags %> <% @all_tags.each do |tag| %> <%= link_to_tag tag %>
    diff --git a/app/views/trace/_trace_paging_nav.html.erb b/app/views/trace/_trace_paging_nav.html.erb index 10a563fb4..4f4b83701 100644 --- a/app/views/trace/_trace_paging_nav.html.erb +++ b/app/views/trace/_trace_paging_nav.html.erb @@ -2,17 +2,17 @@ <% if @traces.size > 1 %> <% if @page > 1 %> -<%= link_to t('trace.trace_paging_nav.newer'), @params.merge({ :page => @page - 1 }) %> +<%= link_to t('.newer'), @params.merge({ :page => @page - 1 }) %> <% else %> -<%= t('trace.trace_paging_nav.newer') %> +<%= t('.newer') %> <% end %> -| <%= t('trace.trace_paging_nav.showing_page', :page => @page) %> | +| <%= t('.showing_page', :page => @page) %> | <% if @traces.size < @page_size %> -<%= t('trace.trace_paging_nav.older') %> +<%= t('.older') %> <% else %> -<%= link_to t('trace.trace_paging_nav.older'), @params.merge({ :page => @page + 1 }) %> +<%= link_to t('.older'), @params.merge({ :page => @page + 1 }) %> <% end %> <% end %>

    diff --git a/app/views/trace/create.html.erb b/app/views/trace/create.html.erb index 43d4eff37..0bc1bcde1 100644 --- a/app/views/trace/create.html.erb +++ b/app/views/trace/create.html.erb @@ -1,5 +1,5 @@ <% content_for :heading do %> -

    <%= t'trace.create.upload_trace' %>

    +

    <%= t '.upload_trace' %>

    <% end %> <%= error_messages_for 'trace' %> diff --git a/app/views/trace/edit.html.erb b/app/views/trace/edit.html.erb index b2254afdd..e890745ae 100644 --- a/app/views/trace/edit.html.erb +++ b/app/views/trace/edit.html.erb @@ -1,5 +1,5 @@ <% content_for :heading do %> -

    <%= t 'trace.edit.heading', :name => h(@trace.name) %>

    +

    <%= t '.heading', :name => h(@trace.name) %>

    <% end %> @@ -9,47 +9,47 @@
    - -

    <%= @trace.name %> (<%= link_to t('trace.edit.download'), trace_data_path(@trace) %>)

    + +

    <%= @trace.name %> (<%= link_to t('.download'), trace_data_path(@trace) %>)

    - +

    <%= l @trace.timestamp, :format => :friendly %>

    <% if @trace.inserted? %>
    - +

    <%= @trace.size.to_s.gsub(/(\d)(?=(\d{3})+$)/,'\1,') %>

    - +
    <%= @trace.latitude %>; <%= @trace.longitude %>
    - (<%=link_to t('trace.edit.map'), :controller => 'site', :action => 'index', :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %> / <%=link_to t('trace.edit.edit'), :controller => 'site', :action => 'edit', :gpx=> @trace.id, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %>) + (<%=link_to t('.map'), :controller => 'site', :action => 'index', :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %> / <%=link_to t('.edit'), :controller => 'site', :action => 'edit', :gpx=> @trace.id, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %>) <% end %>
    - +

    <%= link_to h(@trace.user.display_name), user_path(@trace.user) %>

    - + <%= f.text_field :description %>
    - - <%= f.text_field :tagstring %> (<%= t'trace.edit.tags_help' %>) + + <%= f.text_field :tagstring %> (<%= t '.tags_help' %>)
    - - <%= f.select :visibility, [[t('trace.visibility.private'),"private"],[t('trace.visibility.public'),"public"],[t('trace.visibility.trackable'),"trackable"],[t('trace.visibility.identifiable'),"identifiable"]] %> (<%= t'trace.edit.visibility_help' %>) + + <%= f.select :visibility, [[t('trace.visibility.private'),"private"], [t('trace.visibility.public'),"public"], [t('trace.visibility.trackable'),"trackable"], [t('trace.visibility.identifiable'),"identifiable"]] %> (<%= t '.visibility_help' %>)
    -<%= submit_tag t'trace.edit.save_button' %> +<%= submit_tag t '.save_button' %> <% end %> diff --git a/app/views/trace/georss.rss.builder b/app/views/trace/georss.rss.builder index 8470e85cb..984284174 100644 --- a/app/views/trace/georss.rss.builder +++ b/app/views/trace/georss.rss.builder @@ -5,8 +5,8 @@ xml.rss("version" => "2.0", "xmlns:geo" => "http://www.w3.org/2003/01/geo/wgs84_pos#", "xmlns:georss" => "http://www.georss.org/georss") do xml.channel do - xml.title t("trace.georss.title") - xml.description t("trace.georss.title") + xml.title t(".title") + xml.description t(".title") xml.link url_for(:controller => :trace, :action => :list, :only_path => false) xml.image do diff --git a/app/views/trace/list.html.erb b/app/views/trace/list.html.erb index 7dcfacb80..376fc5511 100644 --- a/app/views/trace/list.html.erb +++ b/app/views/trace/list.html.erb @@ -1,7 +1,7 @@ <% content_for :heading do %>

    <%= h(@title) %>

      -
    • <%= t('trace.list.description') %>
    • +
    • <%= t('.description') %>
    • <%= rss_link_to :action => 'georss', :display_name => @display_name, :tag => @tag %>
    • <%= link_to t('trace.trace_header.upload_trace'), :action => 'create' %>
    • <% if @tag %> @@ -39,7 +39,7 @@ <%= render :partial => 'trace_paging_nav' %> <% else %> -

      <%= t 'trace.list.empty_html', :upload_link => trace_create_path %>

      +

      <%= t '.empty_html', :upload_link => trace_create_path %>

      <% end %> <%= render :partial => 'trace_optionals' %> diff --git a/app/views/trace/offline.html.erb b/app/views/trace/offline.html.erb index ed6c1c58d..5959d0ec3 100644 --- a/app/views/trace/offline.html.erb +++ b/app/views/trace/offline.html.erb @@ -1,5 +1,5 @@ <% content_for :heading do %> -

      <%= t 'trace.offline.heading' %>

      +

      <%= t '.heading' %>

      <% end %> -

      <%= t 'trace.offline.message' %>

      +

      <%= t '.message' %>

      diff --git a/app/views/trace/view.html.erb b/app/views/trace/view.html.erb index df45f2f2d..2330edddf 100644 --- a/app/views/trace/view.html.erb +++ b/app/views/trace/view.html.erb @@ -1,54 +1,54 @@ <% content_for :heading do %> -

      <%= t 'trace.view.heading', :name => h(@trace.name) %>

      +

      <%= t '.heading', :name => h(@trace.name) %>

      <% end %> <% if STATUS != :gpx_offline %> <% if @trace.inserted %> <% else %> - <%= t'trace.view.pending' %> + <%= t '.pending' %> <% end %> <% end %> - - + + - + <% if @trace.inserted? %> - + - - + + <% end %> - + - + - + - - + +
      <%= t'trace.view.filename' %><%= @trace.name %> (<%= link_to t('trace.view.download'), trace_data_path(@trace) %>)<%= t '.filename' %><%= @trace.name %> (<%= link_to t('.download'), trace_data_path(@trace) %>)
      <%= t'trace.view.uploaded' %><%= t '.uploaded' %> <%= l @trace.timestamp, :format => :friendly %>
      <%= t'trace.view.points' %><%= t '.points' %> <%= @trace.size.to_s.gsub(/(\d)(?=(\d{3})+$)/,'\1,') %>
      <%= t'trace.view.start_coordinates' %>
      <%= @trace.latitude %>; <%= @trace.longitude %>
      (<%=link_to t('trace.view.map'), :controller => 'site', :action => 'index', :mlat => @trace.latitude, :mlon => @trace.longitude, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %> / <%=link_to t('trace.view.edit'), :controller => 'site', :action => 'edit', :gpx=> @trace.id, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %>)
      <%= t '.start_coordinates' %>
      <%= @trace.latitude %>; <%= @trace.longitude %>
      (<%=link_to t('.map'), :controller => 'site', :action => 'index', :mlat => @trace.latitude, :mlon => @trace.longitude, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %> / <%=link_to t('.edit'), :controller => 'site', :action => 'edit', :gpx=> @trace.id, :anchor => "map=14/#{@trace.latitude}/#{@trace.longitude}" %>)
      <%= t'trace.view.owner' %><%= t '.owner' %> <%= link_to h(@trace.user.display_name), user_path(@trace.user) %>
      <%= t'trace.view.description' %><%= t '.description' %> <%= h(@trace.description) %>
      <%= t'trace.view.tags' %><%= t '.tags' %> <% unless @trace.tags.empty? %> <%= raw(@trace.tags.collect { |tag| link_to tag.tag, { :controller => 'trace', :action => 'list', :tag => tag.tag, :id => nil } }.join(", ")) %> <% else %> - <%= t'trace.view.none' %> + <%= t '.none' %> <% end %>
      <%= t'trace.view.visibility' %><%= t"trace.visibility.#{@trace.visibility}" %><%= t '.visibility' %><%= t "trace.visibility.#{@trace.visibility}" %>
      @@ -57,8 +57,8 @@ <% if current_user && (current_user==@trace.user || current_user.administrator? || current_user.moderator?)%>
      <%= if_user(@trace.user) do %> - <%= button_to t('trace.view.edit_track'), trace_edit_path(@trace) %> + <%= button_to t('.edit_track'), trace_edit_path(@trace) %> <% end %> - <%= button_to t('trace.view.delete_track'), :controller => 'trace', :action => 'delete', :id => @trace.id %> + <%= button_to t('.delete_track'), { :controller => 'trace', :action => 'delete', :id => @trace.id }, :data => { :confirm => t('.confirm_delete') } %>
      <% end %> diff --git a/app/views/user/_auth_association.html.erb b/app/views/user/_auth_association.html.erb index abddf19d3..8932b7fef 100644 --- a/app/views/user/_auth_association.html.erb +++ b/app/views/user/_auth_association.html.erb @@ -1,3 +1,3 @@ -

      <%= t "user.auth_association.heading" %>

      -

      <%= t "user.auth_association.option_1" %>

      -

      <%= t "user.auth_association.option_2" %>

      +

      <%= t ".heading" %>

      +

      <%= t ".option_1" %>

      +

      <%= t ".option_2" %>

      diff --git a/app/views/user/_contact.html.erb b/app/views/user/_contact.html.erb index bb1dff0dc..2697d0302 100644 --- a/app/views/user/_contact.html.erb +++ b/app/views/user/_contact.html.erb @@ -11,8 +11,8 @@

      <%= link_to h(contact.display_name), user_path(contact) %> - <% if @this_user.home_lon and @this_user.home_lat and contact.home_lon and contact.home_lat %> - <% distance = @this_user.distance(contact) %> + <% if @user.home_lon and @user.home_lat and contact.home_lon and contact.home_lat %> + <% distance = @user.distance(contact) %> <% if distance < 1 %> (<%= t 'user.view.m away', :count => (distance * 1000).round %>) <% else %> diff --git a/app/views/user/_popup.html.erb b/app/views/user/_popup.html.erb index 80446b7a9..957664b3b 100644 --- a/app/views/user/_popup.html.erb +++ b/app/views/user/_popup.html.erb @@ -1,5 +1,5 @@

      <%= user_thumbnail popup %> -

      <%= t('user.popup.' + type) %>

      +

      <%= t('.' + type) %>

      <%= link_to popup.display_name, user_path(popup) %>

      diff --git a/app/views/user/account.html.erb b/app/views/user/account.html.erb index a493ade68..16fbc46ca 100644 --- a/app/views/user/account.html.erb +++ b/app/views/user/account.html.erb @@ -3,9 +3,9 @@ <% end %> <% content_for :heading do %> -

      <%= t 'user.account.my settings' %>

      +

      <%= t '.my settings' %>

        -
      • <%= link_to t('user.account.return to profile'), user_path(current_user) %>
      • +
      • <%= link_to t('.return to profile'), user_path(current_user) %>
      • <%= link_to t('user.view.oauth settings'), :controller => 'oauth_clients', :action => 'index' %>
      <% end %> @@ -21,15 +21,15 @@
      - + - <%= t 'user.account.email never displayed publicly' %> + <%= t '.email never displayed publicly' %>
      - + <%= f.email_field :new_email, :autocomplete => :off %> - <%= t 'user.account.email never displayed publicly' %> + <%= t '.email never displayed publicly' %>
      @@ -47,81 +47,81 @@
      - + <%= f.select :auth_provider, Auth::PROVIDERS %> <%= f.text_field :auth_uid %> - (<%= t 'user.account.openid.link text' %>) + (<%= t '.openid.link text' %>)
      - + <% if current_user.data_public? %> - <%= t 'user.account.public editing.enabled' %> - (<%= t 'user.account.public editing.enabled link text' %>) + <%= t '.public editing.enabled' %> + (<%= t '.public editing.enabled link text' %>) <% else %> - <%= t 'user.account.public editing.disabled' %> - (<%= t 'user.account.public editing.disabled link text' %>) + <%= t '.public editing.disabled' %> + (<%= t '.public editing.disabled link text' %>) <% end %>
      - + <% if current_user.terms_agreed? %> - <%= t 'user.account.contributor terms.agreed' %> - (<%= t 'user.account.contributor terms.link text' %>) + <%= t '.contributor terms.agreed' %> + (<%= t '.contributor terms.link text' %>) <% if current_user.consider_pd? %> - <%= t 'user.account.contributor terms.agreed_with_pd' %> + <%= t '.contributor terms.agreed_with_pd' %> <% end %> <% else %> - <%= t 'user.account.contributor terms.not yet agreed' %> - <%= link_to t('user.account.contributor terms.review link text'), :controller => 'user', :action => 'terms' %> + <%= t '.contributor terms.not yet agreed' %> + <%= link_to t('.contributor terms.review link text'), :controller => 'user', :action => 'terms' %> <% end %>
      - + <%= f.select :preferred_editor, [[t("editor.default", :name => t("editor.#{DEFAULT_EDITOR}.name")), 'default']] + Editors::ALL_EDITORS.collect { |e| [t("editor.#{e}.description"), e] } %>
      - + <%= richtext_area :user, :description, :object => current_user, :cols => 80, :rows => 20 %>
      - + <%= f.text_field :languages %>
      - + <%= user_image current_user %>
        <% if current_user.image.file? %>
      • <%= radio_button_tag "image_action", "keep", !current_user.image_use_gravatar %> - +
      • <% end %> <% if current_user.image.file? || current_user.image_use_gravatar? %>
      • <%= radio_button_tag "image_action", "delete" %> - +
      • <% end %> <% if current_user.image.file? %>
      • <%= radio_button_tag "image_action", "new" %> <%= f.file_field :image %>
      • @@ -129,8 +129,8 @@
      • <%= radio_button_tag "image_action", "new" %> <%= f.file_field :image %>
      • @@ -138,8 +138,8 @@
      • <%= radio_button_tag "image_action", "gravatar", current_user.image_use_gravatar %>
      @@ -148,15 +148,15 @@
      - +
      class="nohome"<%end%> > -

      <%= t 'user.account.no home location' %>

      +

      <%= t '.no home location' %>

      - + <%= f.text_field :home_lat, :id => "home_lat" %>
      - + <%= f.text_field :home_lon, :id => "home_lon" %>
      @@ -164,17 +164,17 @@
      checked="checked" <% end %> id="updatehome" /> - +
      <%= content_tag "div", "", :id => "map", :class => "content_map settings_map set_location" %>
      - <%= submit_tag t('user.account.save changes button') %> + <%= submit_tag t('.save changes button') %> <% end %> <% unless current_user.data_public? %> -

      <%= t 'user.account.public editing note.heading' %>

      -<%= raw t 'user.account.public editing note.text' %> - <%= button_to t('user.account.make edits public button'), :action => :go_public %> +

      <%= t '.public editing note.heading' %>

      +<%= raw t '.public editing note.text' %> + <%= button_to t('.make edits public button'), :action => :go_public %> <% end %> diff --git a/app/views/user/api_read.builder b/app/views/user/api_read.builder index fe5af4bcf..4ed8c9e94 100644 --- a/app/views/user/api_read.builder +++ b/app/views/user/api_read.builder @@ -1,46 +1,46 @@ xml.instruct! :xml, :version => "1.0" xml.osm("version" => API_VERSION, "generator" => GENERATOR) do - xml.tag! "user", :id => @this_user.id, - :display_name => @this_user.display_name, - :account_created => @this_user.creation_time.xmlschema do - xml.tag! "description", @this_user.description if @this_user.description - if current_user && current_user == @this_user - xml.tag! "contributor-terms", :agreed => @this_user.terms_agreed.present?, - :pd => @this_user.consider_pd + xml.tag! "user", :id => @user.id, + :display_name => @user.display_name, + :account_created => @user.creation_time.xmlschema do + xml.tag! "description", @user.description if @user.description + if current_user && current_user == @user + xml.tag! "contributor-terms", :agreed => @user.terms_agreed.present?, + :pd => @user.consider_pd else - xml.tag! "contributor-terms", :agreed => @this_user.terms_agreed.present? + xml.tag! "contributor-terms", :agreed => @user.terms_agreed.present? end - xml.tag! "img", :href => user_image_url(@this_user, :size => 256) if @this_user.image.file? || @this_user.image_use_gravatar + xml.tag! "img", :href => user_image_url(@user, :size => 256) if @user.image.file? || @user.image_use_gravatar xml.tag! "roles" do - @this_user.roles.each do |role| + @user.roles.each do |role| xml.tag! role.role end end - xml.tag! "changesets", :count => @this_user.changesets.size - xml.tag! "traces", :count => @this_user.traces.size + xml.tag! "changesets", :count => @user.changesets.size + xml.tag! "traces", :count => @user.traces.size xml.tag! "blocks" do - xml.tag! "received", :count => @this_user.blocks.size, - :active => @this_user.blocks.active.size - if @this_user.moderator? - xml.tag! "issued", :count => @this_user.blocks_created.size, - :active => @this_user.blocks_created.active.size + xml.tag! "received", :count => @user.blocks.size, + :active => @user.blocks.active.size + if @user.moderator? + xml.tag! "issued", :count => @user.blocks_created.size, + :active => @user.blocks_created.active.size end end - if current_user && current_user == @this_user - if @this_user.home_lat && @this_user.home_lon - xml.tag! "home", :lat => @this_user.home_lat, - :lon => @this_user.home_lon, - :zoom => @this_user.home_zoom + if current_user && current_user == @user + if @user.home_lat && @user.home_lon + xml.tag! "home", :lat => @user.home_lat, + :lon => @user.home_lon, + :zoom => @user.home_zoom end - if @this_user.languages + if @user.languages xml.tag! "languages" do - @this_user.languages.split(",") { |lang| xml.tag! "lang", lang } + @user.languages.split(",") { |lang| xml.tag! "lang", lang } end end xml.tag! "messages" do - xml.tag! "received", :count => @this_user.messages.size, - :unread => @this_user.new_messages.size - xml.tag! "sent", :count => @this_user.sent_messages.size + xml.tag! "received", :count => @user.messages.size, + :unread => @user.new_messages.size + xml.tag! "sent", :count => @user.sent_messages.size end end end diff --git a/app/views/user/confirm.html.erb b/app/views/user/confirm.html.erb index f52098289..7b8d78d3f 100644 --- a/app/views/user/confirm.html.erb +++ b/app/views/user/confirm.html.erb @@ -1,5 +1,5 @@ <% content_for :heading do %> -

      <%= t 'user.confirm.heading' %>

      +

      <%= t '.heading' %>

      <% end %> @@ -8,23 +8,23 @@ <%= javascript_include_tag "user" %> <% end %> - <% content_for(:content_class) { "user_confirm" } %> + <% content_for(:content_class) { "user_confirm" } %> -

      <%= t 'user.confirm.press confirm button' %>

      +

      <%= t '.press confirm button' %>

      <%= form_tag({}, { :id => "confirm" }) do %> - + <% end %> <% else %>

      - <%= t "user.confirm.introduction_1" %> + <%= t ".introduction_1" %> - <%= t "user.confirm.introduction_2" %> + <%= t ".introduction_2" %>

      -

      <%= t "user.confirm.reconfirm_html", +

      <%= t ".reconfirm_html", :reconfirm => url_for(:action => 'confirm_resend')%>

      <% end %> diff --git a/app/views/user/confirm_email.html.erb b/app/views/user/confirm_email.html.erb index 1791cfc73..ecf3e1d3c 100644 --- a/app/views/user/confirm_email.html.erb +++ b/app/views/user/confirm_email.html.erb @@ -2,15 +2,15 @@ <%= javascript_include_tag "user" %> <% end %> -<% content_for(:content_class) { "user_confirm" } %> +<% content_for(:content_class) { "user_confirm" } %> <% content_for :heading do %> -

      <%= t 'user.confirm_email.heading' %>

      +

      <%= t '.heading' %>

      <% end %> -

      <%= t 'user.confirm_email.press confirm button' %>

      +

      <%= t '.press confirm button' %>

      <%= form_tag({}, { :id => "confirm" }) do %> - + <% end %> diff --git a/app/views/user/index.html.erb b/app/views/user/index.html.erb deleted file mode 100644 index e69de29bb..000000000 diff --git a/app/views/user/list.html.erb b/app/views/user/list.html.erb index 903a51c5b..960cf1128 100644 --- a/app/views/user/list.html.erb +++ b/app/views/user/list.html.erb @@ -1,11 +1,11 @@ -<% @title = t('user.list.title') %> +<% @title = t('.title') %> <% content_for :head do %> <%= javascript_include_tag "user" %> <% end %> <% content_for :heading do %> -

      <%= t('user.list.heading') %>

      +

      <%= t('.heading') %>

      <% end %> <% unless @users.empty? %> @@ -16,7 +16,7 @@
      - <%= t 'user.list.showing', + <%= t '.showing', :page => @user_pages.current_page.number, :first_item => @user_pages.current_page.first_item, :last_item => @user_pages.current_page.last_item, @@ -35,10 +35,10 @@
      - <%= submit_tag t('user.list.confirm'), :name => "confirm" %> - <%= submit_tag t('user.list.hide'), :name => "hide" %> + <%= submit_tag t('.confirm'), :name => "confirm" %> + <%= submit_tag t('.hide'), :name => "hide" %>
      <% end %> <% else %> -

      <%= t "user.list.empty" %>

      +

      <%= t ".empty" %>

      <% end %> diff --git a/app/views/user/login.html.erb b/app/views/user/login.html.erb index 26bb80895..21705e358 100644 --- a/app/views/user/login.html.erb +++ b/app/views/user/login.html.erb @@ -3,49 +3,49 @@ <% end %> <% content_for :heading do %> -

      <%= t 'user.login.heading' %>

      +

      <%= t '.heading' %>

      <% end %>
      <%= form_tag({ :action => "login" }, { :id => "login_form" }) do %> <%= hidden_field_tag('referer', h(params[:referer])) %> -

      <%= t 'user.login.no account' %> <%= link_to t('user.login.register now'), :action => :new, :referer => params[:referer] %>

      +

      <%= t '.no account' %> <%= link_to t('.register now'), :action => :new, :referer => params[:referer] %>

      <%= text_field_tag "username", params[:username], :tabindex => 1 %>
      <%= password_field_tag "password", "", :tabindex => 2 %>
      - <%= link_to t('user.login.lost password link'), :controller => 'user', :action => 'lost_password' %> + <%= link_to t('.lost password link'), :controller => 'user', :action => 'lost_password' %>
      <%= check_box_tag "remember_me", "yes", params[:remember_me] == "yes", :tabindex => 3 %> - <%= submit_tag t('user.login.login_button'), :tabindex => 4 %> + <%= submit_tag t('.login_button'), :tabindex => 4 %>
      -

      <%= t 'user.login.with external' %>

      +

      <%= t '.with external' %>

        -
      • <%= link_to image_tag("openid.png", :alt => t("user.login.auth_providers.openid.title")), "#", :id => "openid_open_url", :title => t("user.login.auth_providers.openid.title") %>
      • +
      • <%= link_to image_tag("openid.png", :alt => t(".auth_providers.openid.title")), "#", :id => "openid_open_url", :title => t(".auth_providers.openid.title") %>
      • <% if defined?(GOOGLE_AUTH_ID) -%>
      • <%= auth_button "google", "google" %>
      • <% end -%> @@ -67,17 +67,17 @@
      - + <%= text_field_tag("openid_url", "", { :tabindex => 3, :class => "openid_url" }) %> (<%= t 'user.account.openid.link text' %>)
      <%= check_box_tag "remember_me_openid", "yes", false, :tabindex => 5 %> - +
      - <%= submit_tag t('user.login.login_button'), :tabindex => 6, :id => "login_openid_submit" %> + <%= submit_tag t('.login_button'), :tabindex => 6, :id => "login_openid_submit" %>
      diff --git a/app/views/user/logout.html.erb b/app/views/user/logout.html.erb index 2620cdaa6..f0faae9c4 100644 --- a/app/views/user/logout.html.erb +++ b/app/views/user/logout.html.erb @@ -1,9 +1,9 @@ <% content_for :heading do %> -

      <%= t 'user.logout.heading' %>

      +

      <%= t '.heading' %>

      <% end %> <%= form_tag :action => "logout" do %> <%= hidden_field_tag("referer", h(params[:referer])) %> <%= hidden_field_tag("session", session.id) %> - <%= submit_tag t('user.logout.logout_button') %> + <%= submit_tag t('.logout_button') %> <% end %> diff --git a/app/views/user/lost_password.html.erb b/app/views/user/lost_password.html.erb index 19147e0b0..6f50526d9 100644 --- a/app/views/user/lost_password.html.erb +++ b/app/views/user/lost_password.html.erb @@ -1,13 +1,13 @@ <% content_for :heading do %> -

      <%= t 'user.lost_password.heading' %>

      +

      <%= t '.heading' %>

      <% end %> -

      <%= t 'user.lost_password.help_text' %>

      +

      <%= t '.help_text' %>

      <%= form_tag :action => 'lost_password' do %>
      - + <%= text_field('user', 'email', { :tabindex => 1} ) %> - <%= submit_tag t('user.lost_password.new password button'), :tabindex => 2 %> + <%= submit_tag t('.new password button'), :tabindex => 2 %>
      <% end %> diff --git a/app/views/user/make_friend.html.erb b/app/views/user/make_friend.html.erb index 9adffadd7..c02de91f0 100644 --- a/app/views/user/make_friend.html.erb +++ b/app/views/user/make_friend.html.erb @@ -1,10 +1,10 @@ <% content_for :heading do %> -

      <%= t "user.make_friend.heading", :user => @new_friend.display_name %>

      +

      <%= t ".heading", :user => @new_friend.display_name %>

      <% end %> <%= form_tag do %> <% if params[:referer] -%> <%= hidden_field_tag("referer", params[:referer]) %> <% end -%> - <%= submit_tag t("user.make_friend.button") %> + <%= submit_tag t(".button") %> <% end %> diff --git a/app/views/user/new.html.erb b/app/views/user/new.html.erb index 5a207060e..7fd537d14 100644 --- a/app/views/user/new.html.erb +++ b/app/views/user/new.html.erb @@ -3,7 +3,7 @@ <% end %> <% content_for :heading do %> -

      <%= t 'user.new.title' %>

      +

      <%= t '.title' %>

      <% end %> @@ -14,55 +14,55 @@
      <%= f.email_field(:email, { :tabindex => 1 }) %> <%= f.error_message_on(:email) %>
      <%= f.email_field(:email_confirmation, { :tabindex => 2 }) %> <%= f.error_message_on(:email_confirmation) %>
      - <%= raw(t 'user.new.not displayed publicly') %> + <%= raw(t '.not displayed publicly') %>
      <%= f.text_field(:display_name, { :tabindex => 3 }) %> <%= f.error_message_on(:display_name) %>
      - <%= t 'user.new.display name description' %> + <%= t '.display name description' %>
      <%= f.select(:auth_provider, Auth::PROVIDERS, { :default => "", :tabindex => 4 }) %> <%= f.text_field(:auth_uid, { :tabindex => 5 }) %> <%= f.error_message_on(:auth_uid) %>
      - <%= t 'user.new.auth no password' %> + <%= t '.auth no password' %>
      <%= f.password_field(:pass_crypt, { :tabindex => 6 }) %> <%= f.error_message_on(:pass_crypt) %>
      <%= f.password_field(:pass_crypt_confirmation, { :tabindex => 7 }) %> <%= f.error_message_on(:pass_crypt_confirmation) %> @@ -70,13 +70,13 @@
      - <%= link_to raw(t("user.new.use external auth")), "#", :id => "auth_enable" %> + <%= link_to raw(t(".use external auth")), "#", :id => "auth_enable" %>
      - <%= submit_tag t('user.new.continue'), :tabindex => 8 %> + <%= submit_tag t('.continue'), :tabindex => 8 %> <% end %>
      -

      <%= t 'user.new.about.header' %>

      - <%= t 'user.new.about.html' %> +

      <%= t '.about.header' %>

      + <%= t '.about.html' %>
      diff --git a/app/views/user/no_such_user.html.erb b/app/views/user/no_such_user.html.erb index 062d18fb5..6cab0f54c 100644 --- a/app/views/user/no_such_user.html.erb +++ b/app/views/user/no_such_user.html.erb @@ -1,4 +1,4 @@ <% content_for :heading do %> -

      <%= t 'user.no_such_user.heading', :user => h(@not_found_user) %>

      +

      <%= t '.heading', :user => h(@not_found_user) %>

      <% end %> -

      <%= t 'user.no_such_user.body', :user => h(@not_found_user) %>

      +

      <%= t '.body', :user => h(@not_found_user) %>

      diff --git a/app/views/user/remove_friend.html.erb b/app/views/user/remove_friend.html.erb index 9e9a5e515..f87c78223 100644 --- a/app/views/user/remove_friend.html.erb +++ b/app/views/user/remove_friend.html.erb @@ -1,10 +1,10 @@ <% content_for :heading do %> -

      <%= t "user.remove_friend.heading", :user => @friend.display_name %>

      +

      <%= t ".heading", :user => @friend.display_name %>

      <% end %> <%= form_tag do %> <% if params[:referer] -%> <%= hidden_field_tag("referer", params[:referer]) %> <% end -%> - <%= submit_tag t("user.remove_friend.button") %> + <%= submit_tag t(".button") %> <% end %> diff --git a/app/views/user/reset_password.html.erb b/app/views/user/reset_password.html.erb index 895bd98b6..51983b94a 100644 --- a/app/views/user/reset_password.html.erb +++ b/app/views/user/reset_password.html.erb @@ -1,5 +1,5 @@ <% content_for :heading do %> -

      <%= t 'user.reset_password.heading', :user => current_user.display_name %>

      +

      <%= t '.heading', :user => current_user.display_name %>

      <% end %> <%= error_messages_for current_user %> @@ -8,13 +8,13 @@ <%= hidden_field_tag(:token, params[:token]) %>
      - + <%= password_field(:user, :pass_crypt, {:value => '', :tabindex => 4}) %>
      - + <%= password_field(:user, :pass_crypt_confirmation, {:value => '', :tabindex => 5}) %>
      - <%= submit_tag t('user.reset_password.reset'), :tabindex => 6 %> + <%= submit_tag t('.reset'), :tabindex => 6 %>
      <% end %> diff --git a/app/views/user/suspended.html.erb b/app/views/user/suspended.html.erb index 22d85e166..20547569d 100644 --- a/app/views/user/suspended.html.erb +++ b/app/views/user/suspended.html.erb @@ -1,7 +1,7 @@ -<% @title = t "user.suspended.title" %> +<% @title = t ".title" %> <% content_for :heading do %> -

      <%= t "user.suspended.heading" %>

      +

      <%= t ".heading" %>

      <% end %> -<%= raw t "user.suspended.body", :webmaster => link_to(t("user.suspended.webmaster"), "mailto:#{SUPPORT_EMAIL}") %> +<%= raw t ".body", :webmaster => link_to(t(".webmaster"), "mailto:#{SUPPORT_EMAIL}") %> diff --git a/app/views/user/terms.html.erb b/app/views/user/terms.html.erb index 13fad8840..a836c8590 100644 --- a/app/views/user/terms.html.erb +++ b/app/views/user/terms.html.erb @@ -3,7 +3,7 @@ <% end %> <% content_for :heading do %> -

      <%= t 'user.terms.heading' %>

      +

      <%= t '.heading' %>

      <% end %> @@ -11,14 +11,14 @@
      <% [['france', 'FR'], ['italy', 'IT'], ['rest_of_world', 'GB']].each do |name, legale| %>
      <% end %> @@ -31,21 +31,21 @@
      - (<%= link_to(t('user.terms.consider_pd_why'), t('user.terms.consider_pd_why_url'), :target => :new)%>) + (<%= link_to(t('.consider_pd_why'), t('.consider_pd_why_url'), :target => :new)%>) <%= hidden_field_tag('referer', h(params[:referer])) unless params[:referer].nil? %>
      -

      <%= t 'user.terms.read and accept' %>

      - <%= submit_tag(t('user.terms.agree'), :name => "agree", :id => "agree") %> - <%= submit_tag(t('user.terms.decline'), :name => "decline", :id => "decline") %> +

      <%= t '.read and accept' %>

      + <%= submit_tag(t('.agree'), :name => "agree", :id => "agree") %> + <%= submit_tag(t('.decline'), :name => "decline", :id => "decline") %>

      - <%= raw t 'user.terms.guidance', + <%= raw t '.guidance', :summary => 'https://www.osmfoundation.org/wiki/License/Contributor_Terms_Summary', :translations => 'https://www.osmfoundation.org/wiki/License/Contributor_Terms/Informal_Translations' %>

      diff --git a/app/views/user/view.html.erb b/app/views/user/view.html.erb index 119fe10a4..bc70545f5 100644 --- a/app/views/user/view.html.erb +++ b/app/views/user/view.html.erb @@ -1,43 +1,43 @@ <% content_for :heading do %>
      - <%= user_image @this_user %> + <%= user_image @user %>
      -

      <%= @this_user.display_name %><%= role_icons(@this_user) %>

      - <% if current_user and @this_user.id == current_user.id %> +

      <%= @user.display_name %><%= role_icons(@user) %>

      + <% if current_user and @user.id == current_user.id %>
      • - <%= link_to t('user.view.my edits'), :controller => 'changeset', :action => 'list', :display_name => current_user.display_name %> + <%= link_to t('.my edits'), :controller => 'changeset', :action => 'list', :display_name => current_user.display_name %> <%= number_with_delimiter(current_user.changesets.size) %>
      • - <%= link_to t('user.view.my notes'), :controller => 'notes', :action=> 'mine' %> + <%= link_to t('.my notes'), :controller => 'notes', :action=> 'mine' %>
      • - <%= link_to t('user.view.my traces'), :controller => 'trace', :action=>'mine' %> + <%= link_to t('.my traces'), :controller => 'trace', :action=>'mine' %> <%= number_with_delimiter(current_user.traces.size) %>
      • - <%= link_to t('user.view.my diary'), :controller => 'diary_entry', :action => 'list', :display_name => current_user.display_name %> + <%= link_to t('.my diary'), :controller => 'diary_entry', :action => 'list', :display_name => current_user.display_name %> <%= number_with_delimiter(current_user.diary_entries.size) %>
      • - <%= link_to t('user.view.my comments' ), :controller => 'diary_entry', :action => 'comments', :display_name => current_user.display_name %> + <%= link_to t('.my comments' ), :controller => 'diary_entry', :action => 'comments', :display_name => current_user.display_name %>
      • - <%= link_to t('user.view.my settings'), :controller => 'user', :action => 'account', :display_name => current_user.display_name %> + <%= link_to t('.my settings'), :controller => 'user', :action => 'account', :display_name => current_user.display_name %>
      • <% if current_user.blocks.exists? %>
      • - <%= link_to t('user.view.blocks on me'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => current_user.display_name %> + <%= link_to t('.blocks on me'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => current_user.display_name %> <%= number_with_delimiter(current_user.blocks.active.size) %>
      • <% end %> <% if current_user and current_user.moderator? and current_user.blocks_created.exists? %>
      • - <%= link_to t('user.view.blocks by me'), :controller => 'user_blocks', :action => 'blocks_by', :display_name => current_user.display_name %> + <%= link_to t('.blocks by me'), :controller => 'user_blocks', :action => 'blocks_by', :display_name => current_user.display_name %> <%= number_with_delimiter(current_user.blocks_created.active.size) %>
      • <% end %> @@ -49,56 +49,56 @@
        • - <%= link_to t('user.view.edits'), :controller => 'changeset', :action => 'list', :display_name => @this_user.display_name %> - <%= number_with_delimiter(@this_user.changesets.size) %> + <%= link_to t('.edits'), :controller => 'changeset', :action => 'list', :display_name => @user.display_name %> + <%= number_with_delimiter(@user.changesets.size) %>
        • - <%= link_to t('user.view.notes'), :controller => 'notes', :action=> 'mine' %> + <%= link_to t('.notes'), :controller => 'notes', :action=> 'mine' %>
        • - <%= link_to t('user.view.traces'), :controller => 'trace', :action => 'list', :display_name => @this_user.display_name %> - <%= number_with_delimiter(@this_user.traces.size) %> + <%= link_to t('.traces'), :controller => 'trace', :action => 'list', :display_name => @user.display_name %> + <%= number_with_delimiter(@user.traces.size) %>
        • - <%= link_to t('user.view.send message'), :controller => 'message', :action => 'new', :display_name => @this_user.display_name %> + <%= link_to t('.send message'), :controller => 'message', :action => 'new', :display_name => @user.display_name %>
        • - <%= link_to t('user.view.diary'), :controller => 'diary_entry', :action => 'list', :display_name => @this_user.display_name %> - <%= number_with_delimiter(@this_user.diary_entries.size) %> + <%= link_to t('.diary'), :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name %> + <%= number_with_delimiter(@user.diary_entries.size) %>
        • - <%= link_to t('user.view.comments'), :controller => 'diary_entry', :action => 'comments', :display_name => @this_user.display_name %> + <%= link_to t('.comments'), :controller => 'diary_entry', :action => 'comments', :display_name => @user.display_name %>
        • - <% if current_user and current_user.is_friends_with?(@this_user) %> - <%= link_to t('user.view.remove as friend'), remove_friend_path(:display_name => @this_user.display_name), :method => :post %> + <% if current_user and current_user.is_friends_with?(@user) %> + <%= link_to t('.remove as friend'), remove_friend_path(:display_name => @user.display_name), :method => :post %> <% elsif current_user %> - <%= link_to t('user.view.add as friend'), make_friend_path(:display_name => @this_user.display_name), :method => :post %> + <%= link_to t('.add as friend'), make_friend_path(:display_name => @user.display_name), :method => :post %> <% else %> - <%= link_to t('user.view.add as friend'), make_friend_path(:display_name => @this_user.display_name) %> + <%= link_to t('.add as friend'), make_friend_path(:display_name => @user.display_name) %> <% end %>
        • - <% if @this_user.blocks.exists? %> + <% if @user.blocks.exists? %>
        • - <%= link_to t('user.view.block_history'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => @this_user.display_name %> - <%= number_with_delimiter(@this_user.blocks.active.size) %> + <%= link_to t('.block_history'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => @user.display_name %> + <%= number_with_delimiter(@user.blocks.active.size) %>
        • <% end %> - <% if @this_user.moderator? and @this_user.blocks_created.exists? %> + <% if @user.moderator? and @user.blocks_created.exists? %>
        • - <%= link_to t('user.view.moderator_history'), :controller => 'user_blocks', :action => 'blocks_by', :display_name => @this_user.display_name %> - <%= number_with_delimiter(@this_user.blocks_created.active.size) %> + <%= link_to t('.moderator_history'), :controller => 'user_blocks', :action => 'blocks_by', :display_name => @user.display_name %> + <%= number_with_delimiter(@user.blocks_created.active.size) %>
        • <% end %> <% if current_user and current_user.moderator? %>
        • - <%= link_to t('user.view.create_block'), :controller => 'user_blocks', :action => 'new', :display_name => @this_user.display_name %> + <%= link_to t('.create_block'), :controller => 'user_blocks', :action => 'new', :display_name => @user.display_name %>
        • <% end %> @@ -109,30 +109,30 @@ <% if current_user and current_user.administrator? %>
            - <% if ["active", "confirmed"].include? @this_user.status %> + <% if ["active", "confirmed"].include? @user.status %>
          • - <%= link_to t('user.view.deactivate_user'), set_status_user_path(:status => 'pending', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> + <%= link_to t('.deactivate_user'), set_status_user_path(:status => 'pending', :display_name => @user.display_name), :data => { :confirm => t('.confirm') } %>
          • - <% elsif ["pending"].include? @this_user.status %> + <% elsif ["pending"].include? @user.status %>
          • - <%= link_to t('user.view.activate_user'), set_status_user_path(:status => 'active', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> + <%= link_to t('.activate_user'), set_status_user_path(:status => 'active', :display_name => @user.display_name), :data => { :confirm => t('.confirm') } %>
          • <% end %> - <% if ["active", "suspended"].include? @this_user.status %> + <% if ["active", "suspended"].include? @user.status %>
          • - <%= link_to t('user.view.confirm_user'), set_status_user_path(:status => 'confirmed', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> + <%= link_to t('.confirm_user'), set_status_user_path(:status => 'confirmed', :display_name => @user.display_name), :data => { :confirm => t('.confirm') } %>
          • <% end %>
          • - <% if ["pending", "active", "confirmed", "suspended"].include? @this_user.status %> - <%= link_to t('user.view.hide_user'), set_status_user_path(:status => 'deleted', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> + <% if ["pending", "active", "confirmed", "suspended"].include? @user.status %> + <%= link_to t('.hide_user'), set_status_user_path(:status => 'deleted', :display_name => @user.display_name), :data => { :confirm => t('.confirm') } %> <% else %> - <%= link_to t('user.view.unhide_user'), set_status_user_path(:status => 'active', :display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> + <%= link_to t('.unhide_user'), set_status_user_path(:status => 'active', :display_name => @user.display_name), :data => { :confirm => t('.confirm') } %>
          • <% end %>
          • - <%= link_to t('user.view.delete_user'), delete_user_path(:display_name => @this_user.display_name), :data => { :confirm => t('user.view.confirm') } %> + <%= link_to t('.delete_user'), delete_user_path(:display_name => @user.display_name), :data => { :confirm => t('.confirm') } %>
          @@ -140,41 +140,41 @@

          - <%= t 'user.view.mapper since' %> <%= l @this_user.creation_time.to_date, :format => :long %> - <% unless @this_user.terms_agreed %> + <%= t '.mapper since' %> <%= l @user.creation_time.to_date, :format => :long %> + <% unless @user.terms_agreed %> | - <%= t 'user.view.ct status' %> - <% if @this_user.terms_seen? -%> - <%= t 'user.view.ct declined' %> + <%= t '.ct status' %> + <% if @user.terms_seen? -%> + <%= t '.ct declined' %> <% else -%> - <%= t 'user.view.ct undecided' %> + <%= t '.ct undecided' %> <% end -%> <% end -%>

      -
      <%= @this_user.description.to_html %>
      +
      <%= @user.description.to_html %>
      <% if current_user and current_user.administrator? -%> <% end -%> <% end %> - <% if current_user and @this_user.id == current_user.id %> - <% if @this_user.home_lat.nil? or @this_user.home_lon.nil? %> + <% if current_user and @user.id == current_user.id %> + <% if @user.home_lat.nil? or @user.home_lon.nil? %>
      -

      <%= raw(t 'user.view.if set location', :settings_link => (link_to t('user.view.settings_link_text'), :controller => 'user', :action => 'account', :display_name => current_user.display_name)) %>

      +

      <%= raw(t '.if set location', :settings_link => (link_to t('.settings_link_text'), :controller => 'user', :action => 'account', :display_name => current_user.display_name)) %>

      <% else %> <% content_for :head do %> @@ -191,18 +191,18 @@ <%= content_tag "div", "", :id => "map", :class => "content_map", :data => {:user => user_data} %> <% end %> - <% friends = @this_user.friends.collect { |f| f.befriendee } %> - <% nearby = @this_user.nearby - friends %> + <% friends = @user.friends.collect { |f| f.befriendee } %> + <% nearby = @user.nearby - friends %>
      -

      <%= t 'user.view.my friends' %>

      +

      <%= t '.my friends' %>

      <% if friends.empty? %> - <%= t 'user.view.no friends' %> + <%= t '.no friends' %> <% else %>
        -
      • <%= link_to t('user.view.friends_changesets'), friend_changesets_path %>
      • -
      • <%= link_to t('user.view.friends_diaries'), friend_diaries_path %>
      • +
      • <%= link_to t('.friends_changesets'), friend_changesets_path %>
      • +
      • <%= link_to t('.friends_diaries'), friend_diaries_path %>
      <%= render :partial => "contact", :collection => friends, :locals => {:type => "friend"} %> @@ -211,14 +211,14 @@
      -

      <%= t 'user.view.nearby users' %>

      +

      <%= t '.nearby users' %>

      <% if nearby.empty? %> - <%= t 'user.view.no nearby users' %> + <%= t '.no nearby users' %> <% else %>
        -
      • <%= link_to t('user.view.nearby_changesets'), nearby_changesets_path %>
      • -
      • <%= link_to t('user.view.nearby_diaries'), nearby_diaries_path %>
      • +
      • <%= link_to t('.nearby_changesets'), nearby_changesets_path %>
      • +
      • <%= link_to t('.nearby_diaries'), nearby_diaries_path %>
      <%= render :partial => "contact", :collection => nearby, :locals => {:type => "nearby mapper"} %> diff --git a/app/views/user_blocks/_block.html.erb b/app/views/user_blocks/_block.html.erb index d91168f54..b8a753e04 100644 --- a/app/views/user_blocks/_block.html.erb +++ b/app/views/user_blocks/_block.html.erb @@ -11,14 +11,14 @@ <%=h block_status(block) %> <% if block.revoker_id.nil? %> - <%= t('user_block.partial.not_revoked') %> + <%= t('.not_revoked') %> <% else %> <%= link_to h(block.revoker.display_name), user_path(block.revoker) %> <% end %> - <%= link_to t('user_block.partial.show'), block %> - <% if current_user and current_user.id == block.creator_id and block.active? %><%= link_to t('user_block.partial.edit'), edit_user_block_path(block) %><% end %> + <%= link_to t('.show'), block %> + <% if current_user and current_user.id == block.creator_id and block.active? %><%= link_to t('.edit'), edit_user_block_path(block) %><% end %> <% if show_revoke_link %> - <% if block.active? %><%= link_to t('user_block.partial.revoke'), :controller => 'user_blocks', :action => 'revoke', :id => block.id %><% end %> + <% if block.active? %><%= link_to t('.revoke'), :controller => 'user_blocks', :action => 'revoke', :id => block.id %><% end %> <% end %> diff --git a/app/views/user_blocks/_blocks.html.erb b/app/views/user_blocks/_blocks.html.erb index e9dfc7185..01e54de21 100644 --- a/app/views/user_blocks/_blocks.html.erb +++ b/app/views/user_blocks/_blocks.html.erb @@ -1,14 +1,14 @@ <% if show_user_name %> - + <% end %> <% if show_creator_name %> - + <% end %> - - - + + + <% if show_revoke_link %> @@ -20,16 +20,16 @@
        <% if @user_blocks_pages.current_page.number > 1 -%> -
      • <%= link_to t('user_block.partial.previous'), @params.merge({ :page => @user_blocks_pages.current_page.number - 1 }) %>
      • +
      • <%= link_to t('.previous'), @params.merge({ :page => @user_blocks_pages.current_page.number - 1 }) %>
      • <% else -%> -
      • <%= t('user_block.partial.previous') %>
      • +
      • <%= t('.previous') %>
      • <% end -%> -
      • <%= t('user_block.partial.showing_page', :page => @user_blocks_pages.current_page.number) %>
      • +
      • <%= t('.showing_page', :page => @user_blocks_pages.current_page.number) %>
      • <% if @user_blocks_pages.current_page.number < @user_blocks_pages.page_count -%> -
      • <%= link_to t('user_block.partial.next'), @params.merge({ :page => @user_blocks_pages.current_page.number + 1 }) %>
      • +
      • <%= link_to t('.next'), @params.merge({ :page => @user_blocks_pages.current_page.number + 1 }) %>
      • <% else -%> -
      • <%= t('user_block.partial.next') %>
      • +
      • <%= t('.next') %>
      • <% end -%>
      diff --git a/app/views/user_blocks/blocks_by.html.erb b/app/views/user_blocks/blocks_by.html.erb index 02f6f17ce..69af9374a 100644 --- a/app/views/user_blocks/blocks_by.html.erb +++ b/app/views/user_blocks/blocks_by.html.erb @@ -1,10 +1,10 @@ -<% @title = t('user_block.blocks_by.title', :name => h(@this_user.display_name)) %> +<% @title = t('.title', :name => h(@user.display_name)) %> <% content_for :heading do %> -

      <%= raw(t('user_block.blocks_by.heading', :name => link_to(h(@this_user.display_name), user_path(@this_user)))) %>

      +

      <%= raw(t('.heading', :name => link_to(h(@user.display_name), user_path(@user)))) %>

      <% end %> <% unless @user_blocks.empty? %> <%= render :partial => 'blocks', :locals => { :show_revoke_link => (current_user and current_user.moderator?), :show_user_name => true, :show_creator_name => false } %> <% else %> -

      <%= t "user_block.blocks_by.empty", :name => h(@this_user.display_name) %>

      +

      <%= t ".empty", :name => h(@user.display_name) %>

      <% end %> diff --git a/app/views/user_blocks/blocks_on.html.erb b/app/views/user_blocks/blocks_on.html.erb index 18419986a..6e4fd3ca6 100644 --- a/app/views/user_blocks/blocks_on.html.erb +++ b/app/views/user_blocks/blocks_on.html.erb @@ -1,9 +1,9 @@ -<% @title = t('user_block.blocks_on.title', :name => h(@this_user.display_name)) %> +<% @title = t('.title', :name => h(@user.display_name)) %> <% content_for :heading do %> -

      <%= raw(t('user_block.blocks_on.heading', :name => link_to(h(@this_user.display_name), user_path(@this_user)))) %>

      +

      <%= raw(t('.heading', :name => link_to(h(@user.display_name), user_path(@user)))) %>

      <% end %> <% unless @user_blocks.empty? %> <%= render :partial => 'blocks', :locals => { :show_revoke_link => (current_user and current_user.moderator?), :show_user_name => false, :show_creator_name => true } %> <% else %> -

      <%= t "user_block.blocks_on.empty", :name => h(@this_user.display_name) %>

      +

      <%= t ".empty", :name => h(@user.display_name) %>

      <% end %> diff --git a/app/views/user_blocks/edit.html.erb b/app/views/user_blocks/edit.html.erb index 289f7a831..a3bb9c682 100644 --- a/app/views/user_blocks/edit.html.erb +++ b/app/views/user_blocks/edit.html.erb @@ -1,11 +1,11 @@ -<% @title = t 'user_block.edit.title', :name => h(@user_block.user.display_name) %> +<% @title = t '.title', :name => h(@user_block.user.display_name) %> <% content_for :heading do %> -

      <%= raw t('user_block.edit.title', +

      <%= raw t('.title', :name => link_to(h(@user_block.user.display_name), user_path(@user_block.user))) %>

        -
      • <%= link_to t('user_block.edit.show'), @user_block %>
      • -
      • <%= link_to t('user_block.edit.back'), user_blocks_path %>
      • +
      • <%= link_to t('.show'), @user_block %>
      • +
      • <%= link_to t('.back'), user_blocks_path %>
      <% end %> @@ -13,18 +13,18 @@ <%= f.error_messages %>

      - <%= f.label :reason, t('user_block.edit.reason', :name => h(@user_block.user.display_name)) %>
      + <%= f.label :reason, t('.reason', :name => h(@user_block.user.display_name)) %>
      <%= richtext_area :user_block, :reason, :cols => 80, :rows => 20, :format => @user_block.reason_format %>

      - <%= label_tag 'user_block_period', t('user_block.edit.period') %>
      - <%= select_tag('user_block_period', options_for_select(UserBlock::PERIODS.collect { |h| [t('user_block.period', :count => h), h.to_s] }, params[:user_block_period])) %> + <%= label_tag 'user_block_period', t('.period') %>
      + <%= select_tag('user_block_period', options_for_select(UserBlock::PERIODS.collect { |h| [t('user_blocks.period', :count => h), h.to_s] }, params[:user_block_period])) %>

      <%= f.check_box :needs_view %> - <%= f.label :needs_view, t('user_block.edit.needs_view') %> + <%= f.label :needs_view, t('.needs_view') %>

      - <%= f.submit t('user_block.edit.submit') %> + <%= f.submit t('.submit') %>

      <% end %> diff --git a/app/views/user_blocks/index.html.erb b/app/views/user_blocks/index.html.erb index ce7f12b91..adfc0dc28 100644 --- a/app/views/user_blocks/index.html.erb +++ b/app/views/user_blocks/index.html.erb @@ -1,10 +1,10 @@ -<% @title = t('user_block.index.title') %> +<% @title = t('.title') %> <% content_for :heading do %> -

      <%= t('user_block.index.heading') %>

      +

      <%= t('.heading') %>

      <% end %> <% unless @user_blocks.empty? %> <%= render :partial => 'blocks', :locals => { :show_revoke_link => (current_user and current_user.moderator?), :show_user_name => true, :show_creator_name => true } %> <% else %> -

      <%= t "user_block.index.empty" %>

      +

      <%= t ".empty" %>

      <% end %> diff --git a/app/views/user_blocks/new.html.erb b/app/views/user_blocks/new.html.erb index 4161f6af8..bd941babc 100644 --- a/app/views/user_blocks/new.html.erb +++ b/app/views/user_blocks/new.html.erb @@ -1,29 +1,29 @@ -<% @title = t 'user_block.new.title', :name => h(@this_user.display_name) %> +<% @title = t '.title', :name => h(@user.display_name) %> <% content_for :heading do %> -

      <%= raw t('user_block.new.heading', +

      <%= raw t('.heading', :name => link_to( - h(@this_user.display_name), - user_path(@this_user))) %>

      + h(@user.display_name), + user_path(@user))) %> <% end %> <%= form_for(@user_block) do |f| %> <%= f.error_messages %>

      - <%= f.label :reason, t('user_block.new.reason', :name => @this_user.display_name) %>
      + <%= f.label :reason, t('.reason', :name => @user.display_name) %>
      <%= richtext_area :user_block, :reason, :cols => 80, :rows => 20 %>

      - <%= label_tag 'user_block_period', t('user_block.new.period') %>
      - <%= select_tag('user_block_period', options_for_select(UserBlock::PERIODS.collect { |h| [t('user_block.period', :count => h), h.to_s] }, params[:user_block_period] )) %> + <%= label_tag 'user_block_period', t('.period') %>
      + <%= select_tag('user_block_period', options_for_select(UserBlock::PERIODS.collect { |h| [t('user_blocks.period', :count => h), h.to_s] }, params[:user_block_period] )) %>

      <%= f.check_box :needs_view %> - <%= f.label :needs_view, t('user_block.new.needs_view') %> + <%= f.label :needs_view, t('.needs_view') %>

      - <%= hidden_field_tag 'display_name', @this_user.display_name %> - <%= f.submit t('user_block.new.submit') %> + <%= hidden_field_tag 'display_name', @user.display_name %> + <%= f.submit t('.submit') %>

      <% end %> -<%= link_to t('user_block.new.back'), user_blocks_path %> +<%= link_to t('.back'), user_blocks_path %> diff --git a/app/views/user_blocks/not_found.html.erb b/app/views/user_blocks/not_found.html.erb index 3b5323d72..6aad7eef3 100644 --- a/app/views/user_blocks/not_found.html.erb +++ b/app/views/user_blocks/not_found.html.erb @@ -1,3 +1,3 @@ -

      <%= t'user_block.not_found.sorry', :id => params[:id] %>

      +

      <%= t'.sorry', :id => params[:id] %>

      -<%= link_to t('user_block.not_found.back'), user_blocks_path %> +<%= link_to t('.back'), user_blocks_path %> diff --git a/app/views/user_blocks/revoke.html.erb b/app/views/user_blocks/revoke.html.erb index f812ffff6..c7eee6703 100644 --- a/app/views/user_blocks/revoke.html.erb +++ b/app/views/user_blocks/revoke.html.erb @@ -1,9 +1,9 @@ -<% @title = t('user_block.revoke.title', +<% @title = t('.title', :block_on => h(@user_block.user.display_name), :block_by => h(@user_block.creator.display_name)) %> <% content_for :heading do %> -

      <%= raw t('user_block.revoke.heading', +

      <%= raw t('.heading', :block_on => link_to( h(@user_block.user.display_name), user_path(@user_block.user)), @@ -14,22 +14,22 @@ <% if @user_block.ends_at > Time.now %>

      - <%= t('user_block.revoke.time_future', :time => distance_of_time_in_words_to_now(@user_block.ends_at)) %> + <%= t('.time_future', :time => distance_of_time_in_words_to_now(@user_block.ends_at)) %>

      <%= form_for :revoke, :url => { :action => "revoke" } do |f| %> <%= f.error_messages %>

      <%= check_box_tag 'confirm', 'yes' %> - <%= label_tag 'confirm', t('user_block.revoke.confirm') %> + <%= label_tag 'confirm', t('.confirm') %>

      - <%= submit_tag t('user_block.revoke.revoke') %> + <%= submit_tag t('.revoke') %>

      <% end %> <% else %>

      - <%= t('user_block.revoke.past', :time => distance_of_time_in_words_to_now(@user_block.ends_at)) %> + <%= t('.past', :time => distance_of_time_in_words_to_now(@user_block.ends_at)) %>

      <% end %> diff --git a/app/views/user_blocks/show.html.erb b/app/views/user_blocks/show.html.erb index 51fbcaf49..4dc03f4e4 100644 --- a/app/views/user_blocks/show.html.erb +++ b/app/views/user_blocks/show.html.erb @@ -1,9 +1,9 @@ -<% @title = t('user_block.show.title', +<% @title = t('.title', :block_on => @user_block.user.display_name, :block_by => @user_block.creator.display_name) %> <% content_for :heading do %> -

      <%= raw t('user_block.show.heading', +

      <%= raw t('.heading', :block_on => link_to( h(@user_block.user.display_name), user_path(@user_block.user)), @@ -13,26 +13,26 @@
        <% if @user_block.ends_at > Time.now.getutc %> <% if current_user and current_user.id == @user_block.creator_id %> -
      • <%= link_to t('user_block.show.edit'), edit_user_block_path(@user_block) %>
      • +
      • <%= link_to t('.edit'), edit_user_block_path(@user_block) %>
      • <% end %> <% if current_user and current_user.moderator? %> -
      • <%= link_to(t('user_block.show.revoke'),{:controller => 'user_blocks', :action => 'revoke', :id => @user_block.id}) %>
      • +
      • <%= link_to(t('.revoke'),{:controller => 'user_blocks', :action => 'revoke', :id => @user_block.id}) %>
      • <% end %> <% end %> -
      • <%= link_to t('user_block.show.back'), user_blocks_path %>
      • +
      • <%= link_to t('.back'), user_blocks_path %>
      <% end %> <% if @user_block.revoker %>

      - <%= t'user_block.show.revoker' %> + <%= t'.revoker' %> <%= link_to h(@user_block.revoker.display_name), user_path(@user_block.revoker) %>

      <% end %> -

      <%= t'user_block.show.created' %>: <%= raw t'user_block.show.ago', :time => friendly_date(@user_block.created_at) %>

      +

      <%= t'.created' %>: <%= raw t'.ago', :time => friendly_date(@user_block.created_at) %>

      -

      <%= t'user_block.show.status' %>: <%= block_status(@user_block) %>

      +

      <%= t'.status' %>: <%= block_status(@user_block) %>

      -

      <%= t'user_block.show.reason' %>

      +

      <%= t'.reason' %>

      <%= @user_block.reason.to_html %>
      diff --git a/config/initializers/action_mailer.rb b/config/initializers/action_mailer.rb index 6b27bb686..54da28139 100644 --- a/config/initializers/action_mailer.rb +++ b/config/initializers/action_mailer.rb @@ -5,3 +5,9 @@ ActionMailer::Base.smtp_settings = { :domain => "localhost", :enable_starttls_auto => false } + +# Set the host and protocol for all ActionMailer URLs +ActionMailer::Base.default_url_options = { + :host => SERVER_URL, + :protocol => SERVER_PROTOCOL +} diff --git a/config/initializers/better_errors.rb b/config/initializers/better_errors.rb new file mode 100644 index 000000000..50f278c2d --- /dev/null +++ b/config/initializers/better_errors.rb @@ -0,0 +1,3 @@ +ENV.fetch("TRUSTED_IPS", "").split.each do |ip| + BetterErrors::Middleware.allow_ip! ip +end diff --git a/config/locales/af.yml b/config/locales/af.yml index b22687d8a..6b4ddbce6 100644 --- a/config/locales/af.yml +++ b/config/locales/af.yml @@ -315,38 +315,6 @@ af: ago: '%{ago} gelede' newer_comments: Jongste Kommentaar older_comments: Ouer Kommentaar - export: - title: Voer Uit - start: - area_to_export: Area om uit te voer - manually_select: Kies self 'n ander area - format_to_export: Formaat om uit te voer - osm_xml_data: OpenStreetMap XML-data - map_image: Kaartbeeld (wys standaardlaag) - embeddable_html: Versteekbare HTML-kode - licence: Lisensie - export_details: OpenStreetMap se data word ingevolge die - (ODbL) gelisensieer. - too_large: - advice: 'Ingeval die uitvoering hierbo misluk, oorweeg asseblief een van die - volgende bronne:' - body: Hierdie gebied is te groot om as OpenStreenMap XML Data uitgevoer te - word. Verdiep asseblief die kamerablik of kies 'n kleiner gebied. Wend andersins - een van die bronne hieronder aan om massadata af te laai. - planet: - title: Planeet OSM - options: Voorkeure - format: Formaat - scale: Skaal - max: maksimum - image_size: Beeldgrootte - zoom: Vergroot - add_marker: Plaas 'n merker op die kaart - latitude: 'Breedte:' - longitude: 'Lengte:' - output: Uitset - paste_html: Plak HTML om in die webblad te versteek - export_button: Uitvoer geocoder: search: title: @@ -881,56 +849,6 @@ af: text: Skenk aan die projek learn_more: Kom meer te wete more: Meer - license_page: - foreign: - title: Aangaande dié vertaling - native: - title: Aangaande dié blad - mapping_link: begin karteer - legal_babble: - title_html: Kopiereg en Lisensie - intro_2_html: |- - Dit staan u vry om ons data te kopieer, versprei, versend of aan te maps, mits u erkenning aan OpenStreetMap en die bydraers gee. Indien u ons data wysig of daarop voortbou, mag u dit slegs in terme van dieselfde lisensie versprei. Die volledige legal - code verduidelik u regte en verantwoordelikhede. - credit_title_html: Hoe om na OpenStreetMap te verwys - contributors_title_html: Ons bydraers - infringement_title_html: Kopieregoortreding - welcome_page: - title: Welkom! - basic_terms: - title: Grondliggende begrippe vir kartering - paragraph_1_html: OpenStreetMap bevat 'n gedeelte van ons eie vakbegrippe. Hier - is 'n paar wat handig te pas sal kom. - rules: - title: Reëls! - questions: - title: Enige vrae? - start_mapping: Begin Karteer - add_a_note: - title: Geen tyd om te redigeer? Voeg 'n opmerking by! - fixthemap: - how_to_help: - title: Hoe om te help - join_the_community: - title: Sluit by die gemeenskap aan - other_concerns: - title: Andere aangeleenthede - help_page: - welcome: - url: /welkom - mailing_lists: - title: Poslyste - forums: - title: Forums - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: Volgende - local_knowledge_title: Plaaslike Kennis - community_driven_title: Gemeenskapsgedrewe - legal_title: Wetlik - partners_title: Vennote notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} het ''n kommentaar oor ''n dagboekinskrywing @@ -1039,12 +957,80 @@ af: delete: deleted: Boodskap is verwyder site: + about: + next: Volgende + local_knowledge_title: Plaaslike Kennis + community_driven_title: Gemeenskapsgedrewe + legal_title: Wetlik + partners_title: Vennote + copyright: + foreign: + title: Aangaande dié vertaling + native: + title: Aangaande dié blad + mapping_link: begin karteer + legal_babble: + title_html: Kopiereg en Lisensie + intro_2_html: |- + Dit staan u vry om ons data te kopieer, versprei, versend of aan te maps, mits u erkenning aan OpenStreetMap en die bydraers gee. Indien u ons data wysig of daarop voortbou, mag u dit slegs in terme van dieselfde lisensie versprei. Die volledige legal + code verduidelik u regte en verantwoordelikhede. + credit_title_html: Hoe om na OpenStreetMap te verwys + contributors_title_html: Ons bydraers + infringement_title_html: Kopieregoortreding index: permalink: Perma-skakel shortlink: Kortskakel edit: user_page_link: gebruikersbladsy anon_edits_link_text: Lees waarom dit die geval is. + export: + title: Voer Uit + area_to_export: Area om uit te voer + manually_select: Kies self 'n ander area + format_to_export: Formaat om uit te voer + osm_xml_data: OpenStreetMap XML-data + map_image: Kaartbeeld (wys standaardlaag) + embeddable_html: Versteekbare HTML-kode + licence: Lisensie + export_details: OpenStreetMap se data word ingevolge die + (ODbL) gelisensieer. + too_large: + advice: 'Ingeval die uitvoering hierbo misluk, oorweeg asseblief een van die + volgende bronne:' + body: Hierdie gebied is te groot om as OpenStreenMap XML Data uitgevoer te + word. Verdiep asseblief die kamerablik of kies 'n kleiner gebied. Wend andersins + een van die bronne hieronder aan om massadata af te laai. + planet: + title: Planeet OSM + options: Voorkeure + format: Formaat + scale: Skaal + max: maksimum + image_size: Beeldgrootte + zoom: Vergroot + add_marker: Plaas 'n merker op die kaart + latitude: 'Breedte:' + longitude: 'Lengte:' + output: Uitset + paste_html: Plak HTML om in die webblad te versteek + export_button: Uitvoer + fixthemap: + how_to_help: + title: Hoe om te help + join_the_community: + title: Sluit by die gemeenskap aan + other_concerns: + title: Andere aangeleenthede + help: + welcome: + url: /welkom + mailing_lists: + title: Poslyste + forums: + title: Forums + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: search_results: Soekuitslae close: Sluit @@ -1054,7 +1040,7 @@ af: get_directions_title: Kry rigtingaanwysings tussen twee punte from: Vanaf to: Na - where_am_i: Waar bevind ek my? + where_am_i: Waar is ek tans? submit_text: Soek key: table: @@ -1139,6 +1125,19 @@ af: image: Beeld alt: Alternatiewe teks url: URL + welcome: + title: Welkom! + basic_terms: + title: Grondliggende begrippe vir kartering + paragraph_1_html: OpenStreetMap bevat 'n gedeelte van ons eie vakbegrippe. + Hier is 'n paar wat handig te pas sal kom. + rules: + title: Reëls! + questions: + title: Enige vrae? + start_mapping: Begin Karteer + add_a_note: + title: Geen tyd om te redigeer? Voeg 'n opmerking by! trace: create: upload_trace: Laai GPS-spore op @@ -1218,18 +1217,18 @@ af: make_public: made_public: Spoor is openbaar gemaak oauth: - oauthorize: + authorize: allow_read_prefs: lees u gebruikersvoorkeure. allow_write_prefs: verander jou gebruikersvoorkeure. allow_write_api: wysig die kaart. allow_write_gpx: laai GPS-spore op. allow_write_notes: wysig opmerkings. grant_access: Verleen toegang - oauthorize_success: + authorize_success: title: Magtigingsversoek toegestaan allowed: U het die program %{app_name} toegang tot u rekening verleen. verification: Die bevestigingskode is %{code} - oauthorize_failure: + authorize_failure: title: Magtigingsversoek het misluk denied: U het die program %{app_name} toegang tot u rekening geweier. invalid: Die magtigingsteken is ongeldig. @@ -1471,7 +1470,7 @@ af: title: Bevestig herroeping van rol heading: Bevestig herroeping van rol confirm: Bevestig - user_block: + user_blocks: not_found: sorry: Jammer, die gebruiker met ID %{id} kon nie gevind word nie. back: Terug na die register @@ -1504,19 +1503,6 @@ af: period: one: 1 uur other: '%{count} ure' - partial: - show: Wys - edit: Redigeer - revoke: Herroep! - confirm: Is u seker? - display_name: Versperde gebruiker - creator_name: Skepper - reason: Rede vir die versperring - status: Status - revoker_name: Herroep deur - not_revoked: (nie herroep nie) - next: Volgende » - previous: « Vorige helper: time_future: Tyd oor %{time} verstreke. until_login: Aktief totdat die gebruiker aanmeld. @@ -1544,6 +1530,19 @@ af: revoker: 'Herroep deur:' needs_view: Die gebruiker moet aanmeld alvorens hierdie versperring verwyder sal word. + block: + not_revoked: (nie herroep nie) + show: Wys + edit: Redigeer + revoke: Herroep! + blocks: + display_name: Versperde gebruiker + creator_name: Skepper + reason: Rede vir die versperring + status: Status + revoker_name: Herroep deur + next: Volgende » + previous: « Vorige javascripts: share: title: Deel @@ -1588,7 +1587,7 @@ af: add_note: Voeg 'n nota hier by show_address: Wys adres centre_map: Stel kaartmiddelpunt hier in - redaction: + redactions: edit: description: Beskrywing ... diff --git a/config/locales/aln.yml b/config/locales/aln.yml index 9d0a205bf..511efcb34 100644 --- a/config/locales/aln.yml +++ b/config/locales/aln.yml @@ -210,31 +210,6 @@ aln: all: title: hyra OpenStreetMap ditar description: Shënimet mat fundit të ditarit nga anëtarët e OpenStreetMap - export: - start: - area_to_export: Zona për Eksport - manually_select: Manualisht zgedhe ni zon te ndryshme - format_to_export: Formati për Eksport - osm_xml_data: OpenStreetMap XML të dhana - embeddable_html: HTML e trupzueshme - licence: Licensa - export_details: T'dhanat e OpenStreetMap jan te licensume nën Creative - Commons Attribution-ShareAlike 2.0 license. - too_large: - body: Kjo zonë është shum e madhe që të eksportohet si XML në OpenStreetMap. - Të lutna afroje ma ngat ose mere një zonë ma të vogel. - options: Opcionet - format: Formati - scale: Shkallë - max: maks - image_size: Madhsia e Imazhit - zoom: Zmadho - add_marker: Shto ni shenues en harte - latitude: 'Lat:' - longitude: 'Lon:' - output: Outputi - paste_html: Fute HTML për me ngjit në web sajt - export_button: Eksporto geocoder: search: title: @@ -631,86 +606,6 @@ aln: make_a_donation: title: OpenStreetMap Mbështetje me një donacion monetar text: Bëni një donacion - license_page: - foreign: - title: Rreth kti përkthimi - text: Në ni ngjarje të ni konflikti me faqen e përkthyme dhe %{english_original_link}, - faqja anglisht ka përparsi - english_link: origjinal anglisht - native: - title: Rreth ksaj faqeje - text: Ju jeni tu e kshyr versionin në gjuhën shqipe të faqes së autorit. Ju - muni me shku në %{native_link} të kësaj faqe, ose ju muni mos me lexu në lidhje - me të drejtën e autorit dhe %{mapping_link} - native_link: Gegë verzion - mapping_link: fillo hartografimin - legal_babble: - title_html: Copyright - intro_1_html: |- - OpenStreetMap is open data, licensed under the Open Data - Commons Open Database License (ODbL). - intro_2_html: |- - Ju jeni të lirë ta kopjoni, shpërndani, përcjell dhe përshtatur hartat tona - dhe të dhënat, për aq kohë sa ju e kreditit OpenStreetMap e saj - kontribuesve. Nëse ju ndryshoni ose me ndërtimin e hartave tona ose të dhëna, ju - mund të shpërndani rezultat vetëm në bazë të licencës të njëjtën. - ligjore - shpjegon të drejtat tuaja dhe të përgjegjësive. - credit_title_html: Si të kreditit OpenStreetMap - credit_1_html: |- - Nëse jeni duke përdorur harta imazhe OpenStreetMap, ne kërkojmë që - kreditit tuaj lexon të paktën "© OpenStreetMap - kontribuesit, CC BY-SA ". Nëse jeni duke përdorur të dhëna vetëm në hartë, - ne kerkojme "Organizimi i të dhënave © kontribuesit OpenStreetMap, - CC BY-SA ". - credit_2_html: |- - Ku të jetë e mundur, duhet të jetë OpenStreetMap hyperlinked në http://www.openstreetmap.org/ - dhe CC BY-SA për http://creativecommons.org/licenses/by-sa/2.0/ . Nëse - ju jeni duke përdorur një të mesme, ku lidhjet nuk janë të mundshme (p.sh. një - shtypura punë), ne ju sugjerojmë lexuesit tuaj të drejtpërdrejtë të - www.openstreetmap.org (ndoshta duke zgjeruar - 'OpenStreetMap' në këtë adresë të plotë) dhe të - www.creativecommons.org. - more_title_html: Gjetja më shumë - more_1_html: |- - Lexo më shumë lidhje me përdorimin e të dhënave tona në Ligjore - FAQ . - more_2_html: |- - OSM janë kontribuesit kujtoi kurrë për të shtuar të dhënat nga ndonjë - Burime copyright (p.sh. Google Maps apo të shtypura harta) pa - lejen shprehimisht nga mbajtësit të drejtën e autorit. - contributors_title_html: kontribuesit tona - contributors_intro_html: |- - licencë CC BY-SA jonë kërkon që ju të "japin origjinal - Author kredi të arsyeshme për të mesëm ose të thotë Ti je - shfrytëzuar ". Individuale mappers OSM nuk kërkojnë një - kreditit mbi dhe më lart që të "OpenStreetMap - kontribuesit ", por kur të dhënat nga një hartës kombëtare - agjenci ose burim kryesor ka qenë i përfshirë në - OpenStreetMap, ai mund të jetë e arsyeshme për kredi nga ana e tyre direkt - riprodhimin e kreditit e tyre apo duke i lidhur me të në këtë faqe. - contributors_ca_html: |- - Kanada : Përmban të dhëna nga - GeoBase ®, GeoGratis (© Departamenti i Natyrore - Burimet Kanada), CanVec (Departamenti i Natyrore © - Burimet Kanada), dhe StatCan (Divizioni Gjeografia, - Statistika Kanada). - contributors_nz_html: |- - Zelanda e Re : Përmban të dhëna me burim nga - Zelanda e Re Toka e informacionit. Crown Copyright rezervuara. - contributors_gb_html: |- - Mbretëria e Bashkuar : Përmban të pajisjeve - Anketa të dhënat © Crown copyright bazës së të dhënave dhe të drejtë - 2010. - contributors_footer_2_html: |2- - Përfshirja e të dhënave në OpenStreetMap nuk do të thotë që origjinal - dhënave miraton ofrues OpenStreetMap, ofron çdo garanci ose - pranon ndonjë përgjegjësi. notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} ka komentu në shënimin tond të ditarit' @@ -834,6 +729,86 @@ aln: delete: deleted: Mesazhi u fshi site: + copyright: + foreign: + title: Rreth kti përkthimi + text: Në ni ngjarje të ni konflikti me faqen e përkthyme dhe %{english_original_link}, + faqja anglisht ka përparsi + english_link: origjinal anglisht + native: + title: Rreth ksaj faqeje + text: Ju jeni tu e kshyr versionin në gjuhën shqipe të faqes së autorit. Ju + muni me shku në %{native_link} të kësaj faqe, ose ju muni mos me lexu në + lidhje me të drejtën e autorit dhe %{mapping_link} + native_link: Gegë verzion + mapping_link: fillo hartografimin + legal_babble: + title_html: Copyright + intro_1_html: |- + OpenStreetMap is open data, licensed under the Open Data + Commons Open Database License (ODbL). + intro_2_html: |- + Ju jeni të lirë ta kopjoni, shpërndani, përcjell dhe përshtatur hartat tona + dhe të dhënat, për aq kohë sa ju e kreditit OpenStreetMap e saj + kontribuesve. Nëse ju ndryshoni ose me ndërtimin e hartave tona ose të dhëna, ju + mund të shpërndani rezultat vetëm në bazë të licencës të njëjtën. + ligjore + shpjegon të drejtat tuaja dhe të përgjegjësive. + credit_title_html: Si të kreditit OpenStreetMap + credit_1_html: |- + Nëse jeni duke përdorur harta imazhe OpenStreetMap, ne kërkojmë që + kreditit tuaj lexon të paktën "© OpenStreetMap + kontribuesit, CC BY-SA ". Nëse jeni duke përdorur të dhëna vetëm në hartë, + ne kerkojme "Organizimi i të dhënave © kontribuesit OpenStreetMap, + CC BY-SA ". + credit_2_html: |- + Ku të jetë e mundur, duhet të jetë OpenStreetMap hyperlinked në http://www.openstreetmap.org/ + dhe CC BY-SA për http://creativecommons.org/licenses/by-sa/2.0/ . Nëse + ju jeni duke përdorur një të mesme, ku lidhjet nuk janë të mundshme (p.sh. një + shtypura punë), ne ju sugjerojmë lexuesit tuaj të drejtpërdrejtë të + www.openstreetmap.org (ndoshta duke zgjeruar + 'OpenStreetMap' në këtë adresë të plotë) dhe të + www.creativecommons.org. + more_title_html: Gjetja më shumë + more_1_html: |- + Lexo më shumë lidhje me përdorimin e të dhënave tona në Ligjore + FAQ . + more_2_html: |- + OSM janë kontribuesit kujtoi kurrë për të shtuar të dhënat nga ndonjë + Burime copyright (p.sh. Google Maps apo të shtypura harta) pa + lejen shprehimisht nga mbajtësit të drejtën e autorit. + contributors_title_html: kontribuesit tona + contributors_intro_html: |- + licencë CC BY-SA jonë kërkon që ju të "japin origjinal + Author kredi të arsyeshme për të mesëm ose të thotë Ti je + shfrytëzuar ". Individuale mappers OSM nuk kërkojnë një + kreditit mbi dhe më lart që të "OpenStreetMap + kontribuesit ", por kur të dhënat nga një hartës kombëtare + agjenci ose burim kryesor ka qenë i përfshirë në + OpenStreetMap, ai mund të jetë e arsyeshme për kredi nga ana e tyre direkt + riprodhimin e kreditit e tyre apo duke i lidhur me të në këtë faqe. + contributors_ca_html: |- + Kanada : Përmban të dhëna nga + GeoBase ®, GeoGratis (© Departamenti i Natyrore + Burimet Kanada), CanVec (Departamenti i Natyrore © + Burimet Kanada), dhe StatCan (Divizioni Gjeografia, + Statistika Kanada). + contributors_nz_html: |- + Zelanda e Re : Përmban të dhëna me burim nga + Zelanda e Re Toka e informacionit. Crown Copyright rezervuara. + contributors_gb_html: |- + Mbretëria e Bashkuar : Përmban të pajisjeve + Anketa të dhënat © Crown copyright bazës së të dhënave dhe të drejtë + 2010. + contributors_footer_2_html: |2- + Përfshirja e të dhënave në OpenStreetMap nuk do të thotë që origjinal + dhënave miraton ofrues OpenStreetMap, ofron çdo garanci ose + pranon ndonjë përgjegjësi. index: js_1: Ju jeni duke përdorur ndonjë shfletues që nuk e përkrah JavaScript, ose i keni çativizuar JavaScript. @@ -854,6 +829,30 @@ aln: në Potlatch, ju duhet të asnjërën mënyrë e tanishme ose me pikën e, në qoftë se redaktimi në mënyrë të jetojnë, ose klikoni ruani në qoftë se ju keni një buton të shpëtuar.) + export: + area_to_export: Zona për Eksport + manually_select: Manualisht zgedhe ni zon te ndryshme + format_to_export: Formati për Eksport + osm_xml_data: OpenStreetMap XML të dhana + embeddable_html: HTML e trupzueshme + licence: Licensa + export_details: T'dhanat e OpenStreetMap jan te licensume nën Creative + Commons Attribution-ShareAlike 2.0 license. + too_large: + body: Kjo zonë është shum e madhe që të eksportohet si XML në OpenStreetMap. + Të lutna afroje ma ngat ose mere një zonë ma të vogel. + options: Opcionet + format: Formati + scale: Shkallë + max: maks + image_size: Madhsia e Imazhit + zoom: Zmadho + add_marker: Shto ni shenues en harte + latitude: 'Lat:' + longitude: 'Lon:' + output: Outputi + paste_html: Fute HTML për me ngjit në web sajt + export_button: Eksporto sidebar: search_results: Rezultatet e Kërkimit close: Mshele @@ -1029,7 +1028,7 @@ aln: blocked: qasja juaj në API është bllokuar. Ju lutemi të log-in për ndërfaqe web për të mësuar më shumë. oauth: - oauthorize: + authorize: request_access: Aplikacioni %{app_name} po kërkon qasje në llogarinë tonde. Ju lutem kshyrne nëse doni që aplikacioni me i pas kto mundësi. Ju muni me zgjedh sa ma shumë ose sa ma pak që të doni. @@ -1339,7 +1338,7 @@ aln: confirm: Konfirmo fail: Nuk munet me zgjue folin `%{role}' prej perdoruesit `%{name}'. Ju lutem kontrolloje perdoruesin edhe rolin a jane te dyte valid. - user_block: + user_blocks: model: non_moderator_update: Duhet të jetë një moderator për të krijuar ose rinovuar një bllok. @@ -1404,17 +1403,6 @@ aln: period: one: 1 orë other: '%{count} orë' - partial: - show: Tregoj - edit: Redaktoj - revoke: Tërheq! - confirm: A jeni i sigurt? - display_name: Përdoruesi Blocked - creator_name: Krijuesi - reason: Arsyeja për bllok - status: Statusi - revoker_name: Revokuar nga ana - not_revoked: (Jo revokuar) helper: time_future: Përfundon në %{time}. until_login: Aktiv deri kur përdoruesi shkrimet in @@ -1441,6 +1429,17 @@ aln: back: Shiko të gjitha blloqet revoker: 'Revoker:' needs_view: Shfrytëzuesi duhet të hyj para se të fshihet ky bllok. + block: + not_revoked: (Jo revokuar) + show: Tregoj + edit: Redaktoj + revoke: Tërheq! + blocks: + display_name: Përdoruesi Blocked + creator_name: Krijuesi + reason: Arsyeja për bllok + status: Statusi + revoker_name: Revokuar nga ana javascripts: map: base: diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 9cda6b9ea..f8744febf 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -157,6 +157,8 @@ ar: title_comment: حزمة التغييرات %{id} - %{comment} join_discussion: ادخل للاشتراك في المناقشة discussion: مناقشة + still_open: ما زالت مجموعة التغييرات مفتوحة - سيتم فتح المناقشة بمجرد إغلاق + مجموعة التغييرات. node: title: 'عقدة: %{name}' history_title: 'تاريخ العقدة: %{name}' @@ -259,7 +261,7 @@ ar: list: title: حزم التغييرات title_user: حزم التغييرات بواسطة %{user} - title_friend: حزم التغييرات بواسطة أصدقائك + title_friend: مجموعات تغييرات بواسطة أصدقائي title_nearby: تغييرات مِن قِبَل مستخدمين قريبين empty: لم يُعثَر على أي حزم تغييرات. empty_area: لم يُعثَر على أي حزم تغييرات في هذه المنطقة. @@ -271,6 +273,9 @@ ar: timeout: sorry: عذراً، لقد إستمرت لائحة حزم التغييرات اللتي طلبتها وقتاً طويلاً للسحب. rss: + title_all: مناقشة مجموعة تغيير خريطة الشارع المفتوحة + title_particular: 'مناقشة #%{changeset_id} مجموعة تغيير خريطة الشارع المفتوحة' + comment: 'تعليق جديد على مجموعة التغيير #%{changeset_id} بواسطة %{author}' commented_at_html: تم التحديث قبل %{when} commented_at_by_html: تم التحديث قبل %{when} بواسطة %{user} full: كامل النقاش @@ -285,7 +290,7 @@ ar: user_title: يومية %{user} in_language_title: مدخلات اليومية باللغة %{language} new: مدخلة يومية جديدة - new_title: اكتب مدخلة يومية جديدة في يوميتك + new_title: تأليف إدخال جديد في مذكرات المستخدم الخاصة بي no_entries: لا يوجد مدخلات يومية recent_entries: إدخالات يوميات الحديثة older_entries: المدخلات الأقدم @@ -352,74 +357,33 @@ ar: ago: '%{ago} سابقاً' newer_comments: التعليقات الجديدة older_comments: التعليقات القديمة - export: - title: صدِّر - start: - area_to_export: المنطقة المطلوب تصديرها - manually_select: اختر يدويًا منطقة أخرى - format_to_export: الهيئة المطلوب تصديرها - osm_xml_data: معطيات خريطة الطريق المفتوح بنسق إكس أم أل - map_image: صورة الخريطة (عرض الطبقة الإفتراضية) - embeddable_html: HTML مضمن - licence: الرخصة - export_details: بيانات خريطة الشارع المفتوحة مرخصة تحت رخصة - قاعدة البيانات المفتوحة المشاعة . - too_large: - advice: 'إذا فشل التصدير أعلاه، فكّر من فضلك باستخدام أحد المصادر الموضَّحة - أدناه:' - body: 'هذه المنطقة كبيرة جدًا للتصدير على هيئة بيانات إكس إم إل لخريطة الشارع - المفتوحة. يرجى تكبير الخريطة أو استخدام منطقة أصغر أو استخدام أحد المصادر - التالية لتنزيل البيانات الضخمة:' - planet: - title: كوكب OSM - description: نسخ محدثة بشكل دوري من قاعدة بيانات خرائط الشوارع المفتوحة - OpenStreetMap - overpass: - title: تجاوز API - description: تحميل مربع الإحاطة من مرآة قاعدة بيانات خريطة الشارع المفتوحة - geofabrik: - title: تنزيلات موقع جيوفابريك - description: مقتطفات محدثة بانتظام من القارات والبلدان والمدن المختارة - metro: - title: مقتطفات لمترو الأنفاق - description: خلاصات لمدن العالم الكبرى والمناطق المحيطة بها - other: - title: مصادر أخرى - description: مصادر إضافية مدرجة في الويكي خريطة الشارع المفتوحة - options: خيارات - format: الهيئة - scale: القياس - max: الأقصى - image_size: حجم الصورة - zoom: تكبير - add_marker: أضف علامة على الخريطة - latitude: 'خط العرض:' - longitude: 'خط الطول:' - output: الخرج - paste_html: ألصق HTML لتضمينه في موقع ما - export_button: صدِّر geocoder: search: title: - latlon: نتائج داخليًا - ca_postcode: نتائج من Geocoder.CA - osm_nominatim: نتائج من OpenStreetMap - Nominatim + latlon: نتائج من الداخلية + ca_postcode: نتائج من Geocoder.CA + osm_nominatim: نتائج من Nominatim + خريطة الشارع المفتوحة geonames: نتائج من GeoNames - osm_nominatim_reverse: نتائج من OpenStreetMap - Nominatim + osm_nominatim_reverse: نتائج من Nominatim + خريطة الشارع المفتوحة geonames_reverse: نتائج من GeoNames search_osm_nominatim: prefix: aerialway: cable_car: عربة قطار هوائي + chair_lift: كرسي تلفريك gondola: تلفريك + pylon: نقطة تعليق station: محطة قطار هوائي aeroway: aerodrome: المطار + airstrip: مهبط طائرات apron: موقف طائرات gate: البوابة + hangar: حظيرة طائرات helipad: منصة مروحية + parking_position: موقف سيارات runway: مدرج إقلاع taxiway: مدرج المناورات terminal: صالة مطار @@ -478,6 +442,7 @@ ar: office: مكتب parking: موقف سيارات parking_entrance: مدخل مرآب + parking_space: مكان وقوف سيارات pharmacy: صيدلية place_of_worship: معبد police: شرطة @@ -519,6 +484,7 @@ ar: protected_area: منطقة محمية bridge: aqueduct: قنطرة + boardwalk: ممر suspension: جسر معلق swing: جسر متحرك viaduct: جسر @@ -538,9 +504,12 @@ ar: "yes": محل بيع الحرفيات emergency: ambulance_station: محطة إسعاف + assembly_point: ملتقى defibrillator: رجفان landing_site: موقع هبوط طوارئ phone: هاتف طوارئ + water_tank: خزان مياه الطوارئ + "yes": طوارئ highway: abandoned: طريق سريع مهجور bridleway: مسلك خيول @@ -557,6 +526,7 @@ ar: motorway: طريق سريع motorway_junction: تقاطع طرقات سريعة motorway_link: طريق سريع + passing_place: مكان عبور path: مسار pedestrian: طريق للمشاة platform: منصة @@ -971,115 +941,6 @@ ar: text: تبرع learn_more: التعرف على المزيد more: المزيد - license_page: - foreign: - title: حول هذه الترجمة - text: في حالة التعارض ما بين هذه الصفحة المترجمة و %{english_original_link}, - يجب أن تأخذ الصفحة الإنجليزية الأفضلية - english_link: النص الإنجليزي الأصلي - native: - title: حول هذه الصفحة - native_link: النسخة العربية - mapping_link: ابدأ التخطيط - legal_babble: - title_html: حقوق النشر والترخيص - intro_2_html: أنت حر في نسخ وتوزيع ونقل وتكييف بياناتنا، طالما كنت تأئتمن خريطة - الشارع المفتوحة والمساهمين فيها. إذا عدلت أو بنيت على البيانات المتوفرة لدينا، - فلا يحق لك توزيع النتيجة إلا تحت نفس الترخيص. - الكود القانوني الكامل يشرح حقوقك ومسؤولياتك. - credit_1_html: |- - نطلب منك استخدام الائتمان “© OpenStreetMap - contributors”. - credit_3_html: 'للحصول على الخريطة الإلكترونية للتصفح، يجب أن يظهر الائتمان - في زاوية من الخريطة، مثلا:' - attribution_example: - title: مثال الإسناد - more_title_html: معرفة المزيد - contributors_title_html: المساهمين - infringement_title_html: انتهاك حقوق الملكية - trademarks_title_html: علامات تجارية - welcome_page: - title: أهلاً بك. - whats_on_the_map: - title: ما على الخريطة - basic_terms: - title: شروط أساسية لرسم الخرائط - paragraph_1_html: خريطة الشارع المفتوحة لديها بعض اللغات الخاصة بها، وفيما يلي - بعض الكلمات الرئيسية التي سوف تأتي في متناول اليدين. - editor_html: محرر هو برنامج أو موقع يمكنك استخدامه لتعديل الخريطة. - node_html: A عقدة هي نقطة على الخريطة، مثل مطعم واحد أو شجرة - واحدة. - way_html: A طريق هو خط أو منطقة، مثل طريق أو تيار أو بحيرة - أو بناء. - tag_html: A وسم هو قليل من البيانات حول عقدة أو طريقة، مثل - اسم أحد المطاعم أو الحد الأقصى للسرعة على الطريق. - rules: - title: قواعد! - questions: - title: هل هناك أسئلة ؟ - start_mapping: ابدأ التخطيط - add_a_note: - title: لا وقت للتعديل؟ أضف ملاحظة! - paragraph_1_html: إذا كنت تريد إصلاح مجرد شيء صغير وليس لديك الوقت للتسجيل ومعرفة - كيفية التحرير، فإنه من السهل أن تضيف ملاحظة. - fixthemap: - title: الإبلاغ عن مشكلة / إصلاح الخريطة - how_to_help: - title: كيف نساعدك ؟ - join_the_community: - title: انضم لهذا المجتمع - explanation_html: إذا كنت قد لاحظت وجود مشكلة في بيانات الخرائط لدينا، على - سبيل المثال طريق مفقود أو عنوانك، فإن أفضل طريقة للمضي قدما هو الانضمام - إلى مجتمع خريطة الشارع المفتوحة وإضافة أو إصلاح البيانات بنفسك. - other_concerns: - title: اهتمامات أخرى - help_page: - title: الحصول على مساعدة - welcome: - url: أهلا بك. - title: مرحبا بك في خرائط الشوارع " المفتوحة المصدر" - description: ابدأ مع هذا الدليل السريع تغطية أساسيات خريطة الشارع المفتوحة. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Ar:Beginners%27_guide - title: دليل المبتدئين - description: دليل من المجتمع للمبتدئين. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: طرح سؤال أو البحث عن إجابات في موقع خريطة الشارع المفتوحة لطرح - الأسئلة والإجابة. - mailing_lists: - title: القوائم البريدية - description: طرح سؤال أو مناقشة المسائل المثيرة للاهتمام بشأن مجموعة واسعة من - القوائم البريدية الموضعية أو الإقليمية. - forums: - title: المنتديات - irc: - title: آي آر سي - description: دردشة تفاعلية بالعديد من اللغات المختلفة، وحول العديد من المواضيع. - switch2osm: - title: switch2osm - description: مساعدة للشركات والمؤسسات في التحول إلى خرائط خريطة الشارع المفتوحة - الموجودة وغيرها من الخدمات. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: التالي - copyright_html: ©OpenStreetMap
      contributors - lede_text: تم بناء خريطة الشارع المفتوحة من قبل مجتمع من مصممي الخرائط، وتساهم - وتحافظ على البيانات حول الطرق والممرات والمقاهي ومحطات السكك الحديدية، وأكثر - من ذلك بكثير، في جميع أنحاء العالم. - local_knowledge_title: المعرفة المحلية - community_driven_title: نابعة من المجتمع المحلي - open_data_title: البيانات المفتوحة - legal_title: قانوني - legal_html: |- - هذا الموقع والعديد من الخدمات الأخرى ذات الصلة يتم تشغيلها رسميا من قبل OpenStreetMapمؤسسة(OSMF) نيابة عن المجتمع. يخضع استخدام جميع خدمات تشغيل OSMF الينا - Acceptable Use Policies و Privacy Policy - - OpenStreetMap, الشعار المكبر و الخريطة هيregistered trademarks of the OSMF. - partners_title: الشركاء notifier: diary_comment_notification: subject: '[خريطة الشارع المفتوحة] %{user} علق على مدخلتك في اليومية' @@ -1249,6 +1110,49 @@ ar: delete: deleted: حُذفت الرسالة site: + about: + next: التالي + copyright_html: ©OpenStreetMap
      contributors + lede_text: تم بناء خريطة الشارع المفتوحة من قبل مجتمع من مصممي الخرائط، وتساهم + وتحافظ على البيانات حول الطرق والممرات والمقاهي ومحطات السكك الحديدية، وأكثر + من ذلك بكثير، في جميع أنحاء العالم. + local_knowledge_title: المعرفة المحلية + community_driven_title: نابعة من المجتمع المحلي + open_data_title: البيانات المفتوحة + legal_title: قانوني + legal_html: |- + هذا الموقع والعديد من الخدمات الأخرى ذات الصلة يتم تشغيلها رسميا من قبل OpenStreetMapمؤسسة(OSMF) نيابة عن المجتمع. يخضع استخدام جميع خدمات تشغيل OSMF الينا + Acceptable Use Policies و Privacy Policy + + OpenStreetMap, الشعار المكبر و الخريطة هيregistered trademarks of the OSMF. + partners_title: الشركاء + copyright: + foreign: + title: حول هذه الترجمة + text: في حالة التعارض ما بين هذه الصفحة المترجمة و %{english_original_link}, + يجب أن تأخذ الصفحة الإنجليزية الأفضلية + english_link: النص الإنجليزي الأصلي + native: + title: حول هذه الصفحة + native_link: النسخة العربية + mapping_link: ابدأ التخطيط + legal_babble: + title_html: حقوق النشر والترخيص + intro_2_html: أنت حر في نسخ وتوزيع ونقل وتكييف بياناتنا، طالما كنت تأئتمن + خريطة الشارع المفتوحة والمساهمين فيها. إذا عدلت أو بنيت على البيانات المتوفرة + لدينا، فلا يحق لك توزيع النتيجة إلا تحت نفس الترخيص. + الكود القانوني الكامل يشرح حقوقك ومسؤولياتك. + credit_1_html: |- + نطلب منك استخدام الائتمان “© OpenStreetMap + contributors”. + credit_3_html: 'للحصول على الخريطة الإلكترونية للتصفح، يجب أن يظهر الائتمان + في زاوية من الخريطة، مثلا:' + attribution_example: + title: مثال الإسناد + more_title_html: معرفة المزيد + contributors_title_html: المساهمين + infringement_title_html: انتهاك حقوق الملكية + trademarks_title_html: علامات تجارية index: js_1: أنت إما تستخدم متصفح لا يدعم جافا سكريبت، أو أنك عطلت استعمال جافا سكريبت. js_2: خريطة الشارع المفتوحة تستخدم جافا سكريبت لخريطتها المنزلقة. @@ -1279,6 +1183,93 @@ ar: id_not_configured: لم يتم تكوين المعرف no_iframe_support: متصفحك لا يدعم الإطارات المضمنة HTML، والتي هي ضرورية لهذه الميزة. + export: + title: صدِّر + area_to_export: المنطقة المطلوب تصديرها + manually_select: اختر يدويًا منطقة أخرى + format_to_export: الهيئة المطلوب تصديرها + osm_xml_data: معطيات خريطة الطريق المفتوح بنسق إكس أم أل + map_image: صورة الخريطة (عرض الطبقة الإفتراضية) + embeddable_html: HTML مضمن + licence: الرخصة + export_details: بيانات خريطة الشارع المفتوحة مرخصة تحت رخصة + قاعدة بيانات حرة. + too_large: + advice: 'إذا فشل التصدير أعلاه، فكّر من فضلك باستخدام أحد المصادر الموضَّحة + أدناه:' + body: 'هذه المنطقة كبيرة جدًا للتصدير على هيئة بيانات إكس إم إل لخريطة الشارع + المفتوحة. يرجى تكبير الخريطة أو استخدام منطقة أصغر أو استخدام أحد المصادر + التالية لتنزيل البيانات الضخمة:' + planet: + title: كوكب OSM + description: نسخ محدثة بشكل دوري من قاعدة بيانات خرائط الشوارع المفتوحة + OpenStreetMap + overpass: + title: تجاوز API + description: تحميل مربع الإحاطة من مرآة قاعدة بيانات خريطة الشارع المفتوحة + geofabrik: + title: تنزيلات موقع جيوفابريك + description: مقتطفات محدثة بانتظام من القارات والبلدان والمدن المختارة + metro: + title: مقتطفات لمترو الأنفاق + description: خلاصات لمدن العالم الكبرى والمناطق المحيطة بها + other: + title: مصادر أخرى + description: مصادر إضافية مدرجة في الويكي خريطة الشارع المفتوحة + options: خيارات + format: الهيئة + scale: القياس + max: الأقصى + image_size: حجم الصورة + zoom: تكبير + add_marker: أضف علامة على الخريطة + latitude: 'خط العرض:' + longitude: 'خط الطول:' + output: الخرج + paste_html: ألصق HTML لتضمينه في موقع ما + export_button: صدِّر + fixthemap: + title: الإبلاغ عن مشكلة / إصلاح الخريطة + how_to_help: + title: كيف نساعدك ؟ + join_the_community: + title: انضم لهذا المجتمع + explanation_html: إذا كنت قد لاحظت وجود مشكلة في بيانات الخرائط لدينا، على + سبيل المثال طريق مفقود أو عنوانك، فإن أفضل طريقة للمضي قدما هو الانضمام + إلى مجتمع خريطة الشارع المفتوحة وإضافة أو إصلاح البيانات بنفسك. + other_concerns: + title: اهتمامات أخرى + help: + title: الحصول على مساعدة + welcome: + url: أهلا بك. + title: مرحبا بك في خرائط الشوارع " المفتوحة المصدر" + description: ابدأ مع هذا الدليل السريع تغطية أساسيات خريطة الشارع المفتوحة. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Ar:Beginners%27_guide + title: دليل المبتدئين + description: دليل من المجتمع للمبتدئين. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: طرح سؤال أو البحث عن إجابات في موقع خريطة الشارع المفتوحة لطرح + الأسئلة والإجابة. + mailing_lists: + title: القوائم البريدية + description: طرح سؤال أو مناقشة المسائل المثيرة للاهتمام بشأن مجموعة واسعة + من القوائم البريدية الموضعية أو الإقليمية. + forums: + title: المنتديات + irc: + title: آي آر سي + description: دردشة تفاعلية بالعديد من اللغات المختلفة، وحول العديد من المواضيع. + switch2osm: + title: switch2osm + description: مساعدة للشركات والمؤسسات في التحول إلى خرائط خريطة الشارع المفتوحة + الموجودة وغيرها من الخدمات. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: search_results: نتائج البحث close: أغلق @@ -1378,6 +1369,31 @@ ar: image: الصورة alt: النص البديل url: الرابط + welcome: + title: أهلاً بك. + whats_on_the_map: + title: ما على الخريطة + basic_terms: + title: شروط أساسية لرسم الخرائط + paragraph_1_html: خريطة الشارع المفتوحة لديها بعض اللغات الخاصة بها، وفيما + يلي بعض الكلمات الرئيسية التي سوف تأتي في متناول اليدين. + editor_html: محرر هو برنامج أو موقع يمكنك استخدامه لتعديل + الخريطة. + node_html: A عقدة هي نقطة على الخريطة، مثل مطعم واحد أو شجرة + واحدة. + way_html: A طريق هو خط أو منطقة، مثل طريق أو تيار أو بحيرة + أو بناء. + tag_html: A وسم هو قليل من البيانات حول عقدة أو طريقة، مثل + اسم أحد المطاعم أو الحد الأقصى للسرعة على الطريق. + rules: + title: قواعد! + questions: + title: هل هناك أسئلة ؟ + start_mapping: ابدأ التخطيط + add_a_note: + title: لا وقت للتعديل؟ أضف ملاحظة! + paragraph_1_html: إذا كنت تريد إصلاح مجرد شيء صغير وليس لديك الوقت للتسجيل + ومعرفة كيفية التحرير، فإنه من السهل أن تضيف ملاحظة. trace: visibility: private: خصوصي (يظهر كمجهول الهوية ونقاط غير مرتبة) @@ -1491,7 +1507,7 @@ ar: need_to_see_terms: تم تعليق دخولك إلى API مؤقتا. الرجاء تسجيل الدخول في واجهة الويب لعرض شروط المساهمة. أنت لا تحتاج إلى موافق،ة لكن يجب عرضها. oauth: - oauthorize: + authorize: title: السماح بالوصول إلى حسابك request_access: التطبيق %{app_name} يطلب الوصول إلى حسابك %{user}. يرجى التحقق ما إذا كنت تريد أن يكون للتطبيق هذه القدرات. يمكن أن تختار ما تشاء. @@ -1504,9 +1520,9 @@ ar: allow_write_gpx: ارفع آثار جي بي أس. allow_write_notes: تعديل الملاحظات. grant_access: منح حق الوصول - oauthorize_success: + authorize_success: verification: رمز التحقق هو %{code}. - oauthorize_failure: + authorize_failure: title: فشل طلب الترخيص denied: لقد رفضت وصول التطبيق %{app_name} إلى حسابك. invalid: رمز المصادقة غير صالح. @@ -1915,7 +1931,7 @@ ar: confirm: أكّد fail: لا يمكن إبطال الدور '%{role}' من المستخدم '%{name}'. يرجى التحقق من أن المستخدم والدور كلاهما صحيحين. - user_block: + user_blocks: model: non_moderator_update: يجب أن تكون وسيط لإنشاء أو تحديث عرقلة. non_moderator_revoke: يجب أن تكون وسيط لإبطال عرقلة. @@ -1975,20 +1991,6 @@ ar: one: ساعة واحد two: ساعتين other: '%{count} ساعة' - partial: - show: اعرض - edit: تعديل - revoke: ابطل! - confirm: هل أنت متأكد؟ - display_name: مستخدم مُعرقل - creator_name: المنشئ - reason: السبب العرقلة - status: الحالة - revoker_name: مُبطل بواسطة - not_revoked: (لم تلغ) - showing_page: الصفحة %{page} - next: التالي » - previous: « السابق helper: time_future: ينتهي في %{time}. until_login: نشط حتى يقوم المستخدم بتسجيل الدخول. @@ -2017,8 +2019,22 @@ ar: back: اعرض كل العرقلات revoker: 'المبطل:' needs_view: المستخدم يحتاج لتسجيل الدخول قبل أن يتم مسح هذه العرقلة. - note: - description: + block: + not_revoked: (لم تلغ) + show: اعرض + edit: تعديل + revoke: ابطل! + blocks: + display_name: مستخدم مُعرقل + creator_name: المنشئ + reason: السبب العرقلة + status: الحالة + revoker_name: مُبطل بواسطة + showing_page: الصفحة %{page} + next: التالي » + previous: « السابق + notes: + comment: opened_at_html: تم الإنشاء قبل %{when} opened_at_by_html: تم الإنشاء قبل %{when} مِن قِبَل %{user} commented_at_html: تم التحديث قبل %{when} @@ -2163,7 +2179,7 @@ ar: context: add_note: أضف ملاحظةً هنا show_address: أظهر العنوان - redaction: + redactions: edit: description: الوصف submit: حفظ التنقيح diff --git a/config/locales/arz.yml b/config/locales/arz.yml index 31c9dd874..c54d556c4 100644 --- a/config/locales/arz.yml +++ b/config/locales/arz.yml @@ -185,28 +185,6 @@ arz: all: title: مدخلات اليوميه فى خريطه الشارع المفتوحة description: المدخلات الحديثه فى يوميه مستخدمى خريطه الشارع المفتوحة - export: - start: - area_to_export: المنطقه المطلوب تصديرها - manually_select: اختر يدويًا منطقه أخرى - format_to_export: الهيئه المطلوب تصديرها - osm_xml_data: معطيات خريطه الطريق المفتوح بنسق إكس أم أل - embeddable_html: HTML مضمن - licence: الرخصة - export_details: بيانات خريطه الشارع المفتوحه مرخصه تحت رخصه - المشاع الإبداعى، النسبه، نسخه 2.0. - options: خيارات - format: الهيئة - scale: القياس - max: الأقصى - image_size: حجم الصورة - zoom: تكبير - add_marker: أضف علامه على الخريطة - latitude: 'خط العرض:' - longitude: 'خط الطول:' - output: الخرج - paste_html: ألصق HTML لتضمينه فى موقع ما - export_button: صدِّر geocoder: search: title: @@ -696,6 +674,27 @@ arz: potlatch_unsaved_changes: لديك تغييرات غير محفوظه. (للحفظ فى Potlatch، يجب إلغاء الطريق أو النقطه الحاليين إن كان التعديل فى الوضع المباشر، أو انقر فوق حفظ إن كان لديك زر الحفظ.) + export: + area_to_export: المنطقه المطلوب تصديرها + manually_select: اختر يدويًا منطقه أخرى + format_to_export: الهيئه المطلوب تصديرها + osm_xml_data: معطيات خريطه الطريق المفتوح بنسق إكس أم أل + embeddable_html: HTML مضمن + licence: الرخصة + export_details: بيانات خريطه الشارع المفتوحه مرخصه تحت رخصه + المشاع الإبداعى، النسبه، نسخه 2.0. + options: خيارات + format: الهيئة + scale: القياس + max: الأقصى + image_size: حجم الصورة + zoom: تكبير + add_marker: أضف علامه على الخريطة + latitude: 'خط العرض:' + longitude: 'خط الطول:' + output: الخرج + paste_html: ألصق HTML لتضمينه فى موقع ما + export_button: صدِّر sidebar: search_results: نتائج البحث close: أغلق @@ -855,7 +854,7 @@ arz: blocked: لقد تم عرقله وصولك إلى الـ API. يرجى تسجيل الدخول من صفحه الموقع لمعرفه المزيد. oauth: - oauthorize: + authorize: request_access: التطبيق %{app_name} يطلب الوصول إلى حسابك. يرجى التحقق ما إذا كنت تريد أن يكون للتطبيق هذه القدرات. يمكن أن تختار ما تشاء. allow_to: 'اسمح للتطبيق بأن:' @@ -1100,7 +1099,7 @@ arz: confirm: أكّد fail: لا يمكن إبطال الدور '%{role}' من المستخدم '%{name}'. يرجى التحقق من أن المستخدم والدور كلاهما صحيحين. - user_block: + user_blocks: model: non_moderator_update: يجب أن تكون وسيط لإنشاء أو تحديث عرقله. non_moderator_revoke: يجب أن تكون وسيط لإبطال عرقله. @@ -1160,17 +1159,6 @@ arz: one: ساعه واحد two: ساعتين other: '%{count} ساعة' - partial: - show: اعرض - edit: عدّل - revoke: ابطل! - confirm: هل أنت متأكد؟ - display_name: مستخدم معرقل - creator_name: المنشئ - reason: السبب للعرقلة - status: الحالة - revoker_name: مُبطل بواسطة - not_revoked: (لم تلغ) helper: time_future: ينتهى فى %{time}. until_login: نشط حتى يقوم المستخدم بتسجيل الدخول. @@ -1197,6 +1185,17 @@ arz: back: اعرض كل العرقلات revoker: 'المبطل:' needs_view: المستخدم يحتاج لتسجيل الدخول قبل أن يتم مسح هذه العرقله. + block: + not_revoked: (لم تلغ) + show: اعرض + edit: عدّل + revoke: ابطل! + blocks: + display_name: مستخدم معرقل + creator_name: المنشئ + reason: السبب للعرقلة + status: الحالة + revoker_name: مُبطل بواسطة javascripts: map: base: diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 554a93e59..33c3140b1 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -235,7 +235,7 @@ ast: list: title: Conxuntos de cambeos title_user: Conxuntos de cambeos de %{user} - title_friend: Conxuntos de cambeos de los tos collacios + title_friend: Conxuntos de cambeos de los mios collacios title_nearby: Conxuntos de cambeos d'usuarios cercanos empty: Nun s'alcontró nengún conxuntu de cambeos. empty_area: Nun hai conxuntos de cambeos nesti área. @@ -265,7 +265,7 @@ ast: user_title: Diariu de %{user} in_language_title: Entraes del diariu en %{language} new: Nueva entrada del diariu - new_title: Escribir una entrada nueva nel to diariu d'usuariu + new_title: Escribir una entrada nueva nel mio diariu d'usuariu no_entries: Nun hai entraes nel diariu recent_entries: Entraes más nueves del diariu older_entries: Entraes anteriores @@ -330,54 +330,6 @@ ast: ago: hai %{ago} newer_comments: Comentarios más nuevos older_comments: Comentarios anteriores - export: - title: Esportar - start: - area_to_export: Área a esportar - manually_select: Seleiciona manualmente un área distinta - format_to_export: Formatu a esportar - osm_xml_data: Datos XML d'OpenStreetMap - map_image: Imaxe del mapa (amuesa la capa estándar) - embeddable_html: HTML pa embrivir - licence: Llicencia - export_details: Los datos d'OpenStreetMap tan llicenciaos baxo la llicencia - Open Data Commons Open Database (ODbL). - too_large: - advice: 'Si falla la esportación anterior, considera utilizar una de les fontes - de la llista siguiente:' - body: Esti área ye abondo grande pa esportase como Datos XML d'OpenStreetMap. - Acerca'l mapa o esbilla un área menor, o usa una de les fontes siguientes - pa descargar cantidaes grandes de datos. - planet: - title: Planeta OSM - description: Copies anovaes regularmente de la base de datos completa d'OpenStreetMap - overpass: - title: Overpass API - description: Descargar esti cuadru de llendes dende un espeyu de la base - de datos d'OpenStreetMap - geofabrik: - title: Descargues de Geofabrik - description: Estractos anovaos regularmente de continentes, paises, y una - esbilla de ciudaes - metro: - title: Estractos de Metro - description: Estractos de les principales ciudaes del mundu y les árees - d'alredor - other: - title: Otres fontes - description: Otres fontes más qu'apaecen na wiki d'OpenStreetMap - options: Opciones - format: Formatu - scale: Escala - max: máx - image_size: Tamañu d'imaxe - zoom: Zoom - add_marker: Amestar un marcador al mapa - latitude: 'Llat:' - longitude: 'Llon:' - output: Salida - paste_html: Pegar el HTML pa embrivir nun sitiu web - export_button: Esportar geocoder: search: title: @@ -1024,260 +976,6 @@ ast: text: Fai un donativu learn_more: Más información more: Más - license_page: - foreign: - title: Tocante a esta traducción - text: En casu d'haber un conflictu ente esta páxina traducida y %{english_original_link}, - la páxina n'inglés tendrá prioridá - english_link: l'orixinal n'inglés - native: - title: Tocante a esta páxina - text: Tas viendo la versión n'inglés de la páxina de copyright. Pues tornar - a la %{native_link} d'esta páxina o pues dexar de lleer sobro'l copyright - y %{mapping_link}. - native_link: versión n'asturianu - mapping_link: principiar col mapéu - legal_babble: - title_html: Drechos d'autor y llicencia - intro_1_html: |- - OpenStreetMap® son datos abiertos, baxo llicencia Open Data - Commons Open Database License (ODbL) de la Fundación OpenStreetMap (OSMF). - intro_2_html: Puedes copiar, distribuir, tresmitir y adautar los nuesos datos - de mou llibre, mentanto deas reconocimientu a OpenStreetMap y a los sos collaboradores. - Si camudes o crees conteníu sobre los nuesos datos, namái podrás distribuir - el resultáu baxo la mesma llicencia. El códigu - llegal completu t'esplica los tos drechos y obligaciones. - intro_3_html: La cartografía de los mosaicos del mapa y la nuesa documentación, - tán llicenciaos baxo la llicencia Creative - Commons Reconocimientu-CompartirIgual 2.0 (CC BY-SA). - credit_title_html: Cómo dar reconocimientu a OpenStreetMap - credit_1_html: Riquimos qu'uses el créditu “© Collaboradores d'OpenStreetMap”. - credit_2_html: |- - Tamién tienes de dexar claro que los datos tan disponibles baxo la llicencia Open Database License (ODbL), y si utilices los nuesos mosaicos de mapa, que la cartografía tien llicencia CC BY-SA. Puedes facelo enllazando a esta páxina de drechos d'autor. - Alternativamente, y como requisitu si distribues OSM en forma de datos, pues nomar y enllazar direutamente a les llicencies. En medios onde los enllaces nun seyan posibles (por exemplu, obres imprentaes), suxerímoste dirixir a los llectores a openstreetmap.org (espandiendo 'OpenStreetMap' a esta dirección completa, seique), a opendatacommons.org y, si ye'l casu, a creativecommons.org. - credit_3_html: |- - Nun mapa electrónicu navegable, los créditos tendríen d'apaecer na esquina del mapa. - Por casu: - attribution_example: - alt: Exemplu de cómo dar reconocimientu a OpenStreetMap nuna páxina web - title: Exemplu de reconocimientu - more_title_html: Pa saber más - more_1_html: |- - Llei más tocante a cómo utilizar los nuesos datos, y cómo danos créditu, na páxina de Llicencia de la OSMF. - more_2_html: |- - Anque OpenStreetMap son datos abiertos, nun podemos ufrir una API de mapes de baldre pa desendolcadores d'aplicaciones pa terceros. - Llei la nuesa Política d'usu de la API (n'inglés), - Política d'usu del mosaicu (n'inglés) - y Política d'usu de Nominatim (n'inglés tamién). - contributors_title_html: Los nuesos collaboradores - contributors_intro_html: 'Los nuesos collaboradores son miles de persones. Incluimos - tamién datos con llicencia abierta d''axencies cartográfiques nacionales y - d''otres fontes, ente elles:' - contributors_at_html: |- - Austria: Contien datos de - Stadt Wien (baxo - CC BY), - Land Vorarlberg y - Land Tirol (baxo CC BY AT con enmiendes). - contributors_ca_html: |- - Canadá: Contien datos de GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), y StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: |- - Finlandia: Contien datos de la base de datos topográfica de la National Land Survey de Finlandia - y otros conxuntos de datos, baxo la Llicencia NLSFI. - contributors_fr_html: 'Francia: Contien datos sacaos de Direction - Générale des Impôts.' - contributors_nl_html: |- - Paises Baxos: Contien datos © AND, 2007 - (www.and.com) - contributors_nz_html: 'Nueva Zelanda: Contien datos sacaos - de Land Information New Zealand. Crown Copyright reserved.' - contributors_si_html: |- - Eslovenia: Contien datos de la - Autoridá Topográfica y Cartográfica y del - Ministeriu d'Agricultura, Silvicultura y Alimentación - (información pública d'Eslovenia). - contributors_za_html: |- - Sudáfrica: Contien datos sacaos de - Chief Directorate: - National Geo-Spatial Information, State copyright reserved. - contributors_gb_html: 'Reinu Xuníu: Contien datos de Ordnance - Survey © Crown copyright and database right 2010-12.' - contributors_footer_1_html: |- - Pa más detalles d'estes, y otres fontes que s'usaron p'ayudar a - ameyorar OpenStreetMap, por favor, llei la Páxina - de los collaboradores na Wiki d'OpenStreetMap. - contributors_footer_2_html: La inclusión de datos n'OpenStreetMap nun significa - que'l fornidor de los datos orixinales sofite OpenStreetMap, ufra garantía - dala o aceute dalguna responsabilidá. - infringement_title_html: Incumplimientu de drechos d'autor - infringement_1_html: Recordamos a los collaboradores d'OSM qu'enxamás amiesten - datos que vengan d'una fonte con drechos d'autor acutaos (p. ex. de Google - Maps o mapes impresos) ensin el permisu esplícitu de los dueños de los drechos - d'autor. - infringement_2_html: Si crees que s'amestó de mou inapropiáu material con drechos - d'autor a la base de datos d'OpenStreetMap o a esti sitiu, consulta'l nuesu - procedimientu - de retirada de datos o pidilo direutamente nel nuesu formulariu - en llinia. - trademarks_title_html: Marques rexistraes - trademarks_1_html: OpenStreetMap, el logotipu de la lente y «State of the Map» - son marques rexistraes de la Fundación OpenStreetMap. Si tienes entrugues - tocante al usu de les marques, consulta la nuesa política - de marques rexistraes. - welcome_page: - title: ¡Afáyate! - introduction_html: |- - Afáyate n'OpenStreetMap, el mapa del mundu llibre y editable. Agora - qu'aniciasti sesión, yá puedes editar mapes. Esta ye una guía rápida - de les coses más importantes que necesites saber. - whats_on_the_map: - title: Qué hai nel Mapa - on_html: |- - OpenStreetMap ye un llugar pa cartografiar coses que seyan al mesmu tiempu reales y actuales - - incluye millones d'edificios, carreteres, y otros detalles de llugares. Puedes poner nel mapa - cualquier carauterística del mundu real que t'interese. - off_html: |- - Lo que nun incluye son datos suxetivos como calificaciones, carauterístiques históriques o hipotétiques, y datos de fontes con drechos d'autor. Si nun tienes - un permisu especial, nun copies de mapes en llinia o en papel. - basic_terms: - title: Términos básicos pa facer mapes - paragraph_1_html: OpenStreetMap tien cierta xíriga de so. Estes son delles pallabres - importantes que puen ser afayadices. - editor_html: Un editor ye un programa o sitiu web que pue usar - pa editar el mapa. - node_html: Un noyu ye un puntu del mapa, como un únicu restaurante - o un árbol. - way_html: Una vía ye una llinia o área, como una carretera, - regueru, llagu o edificiu. - tag_html: |- - Una etiqueta ye una parte de los datos d'un noyu o vía, como'l - d'un restaurante o la velocidá máxima d'una carretera. - rules: - title: ¡Regles! - paragraph_1_html: OpenStreetMap tien poques regles formales, pero esperamos - que tolos participantes collaboren y se comuniquen cola comunidá. Si tas considerando - cualquier actividá distinta de la edición manual, llei y sigui les instrucciones - sobro importaciones - y ediciones - automatizaes. - questions: - title: ¿Tien alguna entruga? - paragraph_1_html: |- - OpenStreetMap tien dellos recursos p'aprender sobro'l proyeutu, entrugar y contestar preguntes, y discutir y documentar en collaboración cuestiones de cartografía. - Algame ayuda equí. - start_mapping: Principiar col mapéu - add_a_note: - title: ¿Nun tien tiempu pa editar? ¡Amieste una nota! - paragraph_1_html: |- - Si namái quier iguar daqué pequeño y nun tien tiempu pa dase d'alta y deprender cómo editar, - ye fácil amestar una nota. - paragraph_2_html: |- - Namái entre nel mapa y calque nel iconu nota: - . Esto amestará un marcador al mapa, que pue mover - abasnando. Añada'l mensaxe, calque guardar, y otros mapeadores investigarán. - fixthemap: - title: Informar d'un problema / iguar el mapa - how_to_help: - title: Cómo ayudar - join_the_community: - title: Xunise a la comunidá - explanation_html: Si atopó un problema colos datos del nuesu mapa; por exemplu - una carretera que falta, o la so direición, lo meyor que pue facer ye xunise - a la comunidá d'OpenStreetMap y amestar o reparar los datos vusté mesmu. - add_a_note: - instructions_html: |- - Namái faiga clic en o nel mesmu iconu na vista del mapa. - Esto pondrá un marcador nel mapa, que puede mover - abasnando. Escriba'l so mensaxe, faiga clic en guardar, y otros mapeadores investigarán. - other_concerns: - title: Otres preocupaciones - explanation_html: |- - Si tienes dalguna preocupación tocante a cómo tan usándose los nuesos datos o tocante al conteníu, consulta la - páxina de drechos d'autor pa más información llegal, o comunícate col grupu de trabayu de la OSMF afayadizu. - help_page: - title: Algamar ayuda - introduction: OpenStreetMap tien dellos recursos p'aprender sobro'l proyeutu, - entrugar y contestar preguntes, y discutir y documentar en collaboración cuestiones - de cartografía. - welcome: - url: /welcome - title: Bienveníos a OSM - description: Principie con esta guía rápida que cubre lo básico d'OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Ast:Beginners%27_guide - title: Guía del principiante - description: Guía pa principiantes, mantenida pola comunidá. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Entrugar o buscar respuestes nel sitiu d'entrugues y respuestes - d'OSM. - mailing_lists: - title: Llistes de corréu - description: Fai una entruga o alderica sobro asuntos interesantes nun ampliu - abanicu de llistes de corréu temátiques o rexonales. - forums: - title: Foros - description: Entrugues y alderiques pa los que prefieren una interfaz pol estilu - d'un tablón d'anuncios. - irc: - title: IRC - description: Charra interactiva en munchos idiomes diferentes y sobro munchos - asuntos. - switch2osm: - title: Migrar a OSM - description: Ayuda pa les empreses y organizaciones que cambien a mapes y otros - servicios, basaos n'OpenStreetMap. - wiki: - url: https://wiki.openstreetmap.org/wiki/Ast:Main_Page - title: wiki.openstreetmap.org - description: Mirar na wiki la documentación d'OSM más a fondu. - about_page: - next: Siguiente - copyright_html: © Collaboradores
      d'OpenStreetMap - used_by: '%{name} proporciona datos de mapes a milenta sitios web, aplicaciones - pa móviles, y preseos de hardware' - lede_text: OpenStreetMap ta construíu por una comunidá de cartógrafos que contribuyen - y caltienen datos de carreteres, senderos, cafeteríes, estaciones de ferrocarril, - y muncho más, pel mundu enteru. - local_knowledge_title: Conocimientu llocal - local_knowledge_html: OpenStreetMap afala'l conocimientu llocal. Los collaboradores - usen imaxes aérees, preseos GPS, y mapes de campu de baxa teunoloxía pa comprobar - qu'OSM ye precisu y ta anováu. - community_driven_title: Dirixíu pola comunidá - community_driven_html: |- - La comunidá d'OpenStreetMap ye variada, apasionada, y medra caldía. - Ente los collaboradores hai cartógrafos entusiastes, profesionales de GIS, - inxenieros que xestionen los sirvidores d'OSM, voluntarios que - faen mapes de les zones afeutaes por desastres, y muncho más. - Pa saber más tocante a la comunidá, ver el - Blog d'OpenStreetMap, los diarios d'usuarios, los blogs de la comunidá, y la páxina web de la Fundación OSM. - open_data_title: Datos abiertos - open_data_html: |- - OpenStreetMap son datos abiertos: tienes la llibertá d'usalos pa cualquier - propósitu, siempre que-y deas créditu a OpenStreetMap y los sos collaboradores. - Si alteres o uses como base los datos de determinaes maneres, sólo puedes distribuir - el resultáu baxo la mesma llicencia. Ver la páxina de copyright y llicencia - pa más detalles. - legal_title: Llegal - legal_html: "Esti sitiu y munchos otros servicios rellacionaos xestiónalos formalmente - la \nFundación OpenStreetMap (OSMF) - \nnel nome de la comunidá. L'usu de tolos servicios alministraos pola OSMF tán - suxetos a les nueses polítiques - d'usu aceptable y la nuesa política - de privacidá\n
      \nComunícate - cola OSMF \nsi tienes entrugues relativos a les llicencies, drechos d'autor - u otru tema llegal.\n
      \nOpenStreetMap, el logo de la lente y «Estáu del mapa» - son marques - rexistraes de la OSMF." - partners_title: Asociaos notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} comentó n''una entrada del diariu' @@ -1460,6 +1158,152 @@ ast: delete: deleted: Mensaxe desaniciáu site: + about: + next: Siguiente + copyright_html: © Collaboradores
      d'OpenStreetMap + used_by: '%{name} proporciona datos de mapes a milenta sitios web, aplicaciones + pa móviles, y preseos de hardware' + lede_text: OpenStreetMap ta construíu por una comunidá de cartógrafos que contribuyen + y caltienen datos de carreteres, senderos, cafeteríes, estaciones de ferrocarril, + y muncho más, pel mundu enteru. + local_knowledge_title: Conocimientu llocal + local_knowledge_html: OpenStreetMap afala'l conocimientu llocal. Los collaboradores + usen imaxes aérees, preseos GPS, y mapes de campu de baxa teunoloxía pa comprobar + qu'OSM ye precisu y ta anováu. + community_driven_title: Dirixíu pola comunidá + community_driven_html: |- + La comunidá d'OpenStreetMap ye variada, apasionada, y medra caldía. + Ente los collaboradores hai cartógrafos entusiastes, profesionales de GIS, + inxenieros que xestionen los sirvidores d'OSM, voluntarios que + faen mapes de les zones afeutaes por desastres, y muncho más. + Pa saber más tocante a la comunidá, ver el + Blog d'OpenStreetMap, los diarios d'usuarios, los blogs de la comunidá, y la páxina web de la Fundación OSM. + open_data_title: Datos abiertos + open_data_html: |- + OpenStreetMap son datos abiertos: tienes la llibertá d'usalos pa cualquier + propósitu, siempre que-y deas créditu a OpenStreetMap y los sos collaboradores. + Si alteres o uses como base los datos de determinaes maneres, sólo puedes distribuir + el resultáu baxo la mesma llicencia. Ver la páxina de copyright y llicencia + pa más detalles. + legal_title: Llegal + legal_html: "Esti sitiu y munchos otros servicios rellacionaos xestiónalos formalmente + la \nFundación OpenStreetMap (OSMF) + \nnel nome de la comunidá. L'usu de tolos servicios alministraos pola OSMF + tán suxetos a les nueses polítiques + d'usu aceptable y la nuesa política + de privacidá\n
      \nComunícate + cola OSMF \nsi tienes entrugues relativos a les llicencies, drechos d'autor + u otru tema llegal.\n
      \nOpenStreetMap, el logo de la lente y «Estáu del + mapa» son marques + rexistraes de la OSMF." + partners_title: Asociaos + copyright: + foreign: + title: Tocante a esta traducción + text: En casu d'haber un conflictu ente esta páxina traducida y %{english_original_link}, + la páxina n'inglés tendrá prioridá + english_link: l'orixinal n'inglés + native: + title: Tocante a esta páxina + text: Tas viendo la versión n'inglés de la páxina de copyright. Pues tornar + a la %{native_link} d'esta páxina o pues dexar de lleer sobro'l copyright + y %{mapping_link}. + native_link: versión n'asturianu + mapping_link: principiar col mapéu + legal_babble: + title_html: Drechos d'autor y llicencia + intro_1_html: |- + OpenStreetMap® son datos abiertos, baxo llicencia Open Data + Commons Open Database License (ODbL) de la Fundación OpenStreetMap (OSMF). + intro_2_html: Puedes copiar, distribuir, tresmitir y adautar los nuesos datos + de mou llibre, mentanto deas reconocimientu a OpenStreetMap y a los sos + collaboradores. Si camudes o crees conteníu sobre los nuesos datos, namái + podrás distribuir el resultáu baxo la mesma llicencia. El códigu + llegal completu t'esplica los tos drechos y obligaciones. + intro_3_html: La cartografía de los mosaicos del mapa y la nuesa documentación, + tán llicenciaos baxo la llicencia Creative + Commons Reconocimientu-CompartirIgual 2.0 (CC BY-SA). + credit_title_html: Cómo dar reconocimientu a OpenStreetMap + credit_1_html: Riquimos qu'uses el créditu “© Collaboradores d'OpenStreetMap”. + credit_2_html: |- + Tamién tienes de dexar claro que los datos tan disponibles baxo la llicencia Open Database License (ODbL), y si utilices los nuesos mosaicos de mapa, que la cartografía tien llicencia CC BY-SA. Puedes facelo enllazando a esta páxina de drechos d'autor. + Alternativamente, y como requisitu si distribues OSM en forma de datos, pues nomar y enllazar direutamente a les llicencies. En medios onde los enllaces nun seyan posibles (por exemplu, obres imprentaes), suxerímoste dirixir a los llectores a openstreetmap.org (espandiendo 'OpenStreetMap' a esta dirección completa, seique), a opendatacommons.org y, si ye'l casu, a creativecommons.org. + credit_3_html: |- + Nun mapa electrónicu navegable, los créditos tendríen d'apaecer na esquina del mapa. + Por casu: + attribution_example: + alt: Exemplu de cómo dar reconocimientu a OpenStreetMap nuna páxina web + title: Exemplu de reconocimientu + more_title_html: Pa saber más + more_1_html: |- + Llei más tocante a cómo utilizar los nuesos datos, y cómo danos créditu, na páxina de Llicencia de la OSMF. + more_2_html: |- + Anque OpenStreetMap son datos abiertos, nun podemos ufrir una API de mapes de baldre pa desendolcadores d'aplicaciones pa terceros. + Llei la nuesa Política d'usu de la API (n'inglés), + Política d'usu del mosaicu (n'inglés) + y Política d'usu de Nominatim (n'inglés tamién). + contributors_title_html: Los nuesos collaboradores + contributors_intro_html: 'Los nuesos collaboradores son miles de persones. + Incluimos tamién datos con llicencia abierta d''axencies cartográfiques + nacionales y d''otres fontes, ente elles:' + contributors_at_html: |- + Austria: Contien datos de + Stadt Wien (baxo + CC BY), + Land Vorarlberg y + Land Tirol (baxo CC BY AT con enmiendes). + contributors_ca_html: |- + Canadá: Contien datos de GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), y StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: |- + Finlandia: Contien datos de la base de datos topográfica de la National Land Survey de Finlandia + y otros conxuntos de datos, baxo la Llicencia NLSFI. + contributors_fr_html: 'Francia: Contien datos sacaos de Direction + Générale des Impôts.' + contributors_nl_html: |- + Paises Baxos: Contien datos © AND, 2007 + (www.and.com) + contributors_nz_html: 'Nueva Zelanda: Contien datos sacaos + de Land Information New Zealand. Crown Copyright reserved.' + contributors_si_html: |- + Eslovenia: Contien datos de la + Autoridá Topográfica y Cartográfica y del + Ministeriu d'Agricultura, Silvicultura y Alimentación + (información pública d'Eslovenia). + contributors_za_html: |- + Sudáfrica: Contien datos sacaos de + Chief Directorate: + National Geo-Spatial Information, State copyright reserved. + contributors_gb_html: 'Reinu Xuníu: Contien datos de Ordnance + Survey © Crown copyright and database right 2010-12.' + contributors_footer_1_html: |- + Pa más detalles d'estes, y otres fontes que s'usaron p'ayudar a + ameyorar OpenStreetMap, por favor, llei la Páxina + de los collaboradores na Wiki d'OpenStreetMap. + contributors_footer_2_html: La inclusión de datos n'OpenStreetMap nun significa + que'l fornidor de los datos orixinales sofite OpenStreetMap, ufra garantía + dala o aceute dalguna responsabilidá. + infringement_title_html: Incumplimientu de drechos d'autor + infringement_1_html: Recordamos a los collaboradores d'OSM qu'enxamás amiesten + datos que vengan d'una fonte con drechos d'autor acutaos (p. ex. de Google + Maps o mapes impresos) ensin el permisu esplícitu de los dueños de los drechos + d'autor. + infringement_2_html: Si crees que s'amestó de mou inapropiáu material con + drechos d'autor a la base de datos d'OpenStreetMap o a esti sitiu, consulta'l + nuesu procedimientu + de retirada de datos o pidilo direutamente nel nuesu formulariu + en llinia. + trademarks_title_html: Marques rexistraes + trademarks_1_html: OpenStreetMap, el logotipu de la lente y «State of the + Map» son marques rexistraes de la Fundación OpenStreetMap. Si tienes entrugues + tocante al usu de les marques, consulta la nuesa política + de marques rexistraes. index: js_1: O tas usando un restolador ensin sofitu pa JavaScript, o tienes JavaScript desactiváu. @@ -1491,6 +1335,111 @@ ast: id_not_configured: iD nun ta configuráu no_iframe_support: El to navegador nun tien encontu pa los iframes HTML, que se necesiten pa esta carauterística. + export: + title: Esportar + area_to_export: Área a esportar + manually_select: Seleiciona manualmente un área distinta + format_to_export: Formatu a esportar + osm_xml_data: Datos XML d'OpenStreetMap + map_image: Imaxe del mapa (amuesa la capa estándar) + embeddable_html: HTML pa embrivir + licence: Llicencia + export_details: Los datos d'OpenStreetMap tan llicenciaos baxo la llicencia + Open Data Commons Open Database (ODbL). + too_large: + advice: 'Si falla la esportación anterior, considera utilizar una de les fontes + de la llista siguiente:' + body: Esti área ye abondo grande pa esportase como Datos XML d'OpenStreetMap. + Acerca'l mapa o esbilla un área menor, o usa una de les fontes siguientes + pa descargar cantidaes grandes de datos. + planet: + title: Planeta OSM + description: Copies anovaes regularmente de la base de datos completa d'OpenStreetMap + overpass: + title: Overpass API + description: Descargar esti cuadru de llendes dende un espeyu de la base + de datos d'OpenStreetMap + geofabrik: + title: Descargues de Geofabrik + description: Estractos anovaos regularmente de continentes, paises, y una + esbilla de ciudaes + metro: + title: Estractos de Metro + description: Estractos de les principales ciudaes del mundu y les árees + d'alredor + other: + title: Otres fontes + description: Otres fontes más qu'apaecen na wiki d'OpenStreetMap + options: Opciones + format: Formatu + scale: Escala + max: máx + image_size: Tamañu d'imaxe + zoom: Zoom + add_marker: Amestar un marcador al mapa + latitude: 'Llat:' + longitude: 'Llon:' + output: Salida + paste_html: Pegar el HTML pa embrivir nun sitiu web + export_button: Esportar + fixthemap: + title: Informar d'un problema / iguar el mapa + how_to_help: + title: Cómo ayudar + join_the_community: + title: Xunise a la comunidá + explanation_html: Si atopó un problema colos datos del nuesu mapa; por exemplu + una carretera que falta, o la so direición, lo meyor que pue facer ye + xunise a la comunidá d'OpenStreetMap y amestar o reparar los datos vusté + mesmu. + add_a_note: + instructions_html: |- + Namái faiga clic en o nel mesmu iconu na vista del mapa. + Esto pondrá un marcador nel mapa, que puede mover + abasnando. Escriba'l so mensaxe, faiga clic en guardar, y otros mapeadores investigarán. + other_concerns: + title: Otres preocupaciones + explanation_html: |- + Si tienes dalguna preocupación tocante a cómo tan usándose los nuesos datos o tocante al conteníu, consulta la + páxina de drechos d'autor pa más información llegal, o comunícate col grupu de trabayu de la OSMF afayadizu. + help: + title: Algamar ayuda + introduction: OpenStreetMap tien dellos recursos p'aprender sobro'l proyeutu, + entrugar y contestar preguntes, y discutir y documentar en collaboración cuestiones + de cartografía. + welcome: + url: /welcome + title: Bienveníos a OSM + description: Principie con esta guía rápida que cubre lo básico d'OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Ast:Beginners%27_guide + title: Guía del principiante + description: Guía pa principiantes, mantenida pola comunidá. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Entrugar o buscar respuestes nel sitiu d'entrugues y respuestes + d'OSM. + mailing_lists: + title: Llistes de corréu + description: Fai una entruga o alderica sobro asuntos interesantes nun ampliu + abanicu de llistes de corréu temátiques o rexonales. + forums: + title: Foros + description: Entrugues y alderiques pa los que prefieren una interfaz pol + estilu d'un tablón d'anuncios. + irc: + title: IRC + description: Charra interactiva en munchos idiomes diferentes y sobro munchos + asuntos. + switch2osm: + title: Migrar a OSM + description: Ayuda pa les empreses y organizaciones que cambien a mapes y + otros servicios, basaos n'OpenStreetMap. + wiki: + url: https://wiki.openstreetmap.org/wiki/Ast:Main_Page + title: wiki.openstreetmap.org + description: Mirar na wiki la documentación d'OSM más a fondu. sidebar: search_results: Resultaos de la gueta close: Zarrar @@ -1591,6 +1540,57 @@ ast: image: Imaxe alt: Testu alternativu url: URL + welcome: + title: ¡Afáyate! + introduction_html: |- + Afáyate n'OpenStreetMap, el mapa del mundu llibre y editable. Agora + qu'aniciasti sesión, yá puedes editar mapes. Esta ye una guía rápida + de les coses más importantes que necesites saber. + whats_on_the_map: + title: Qué hai nel Mapa + on_html: |- + OpenStreetMap ye un llugar pa cartografiar coses que seyan al mesmu tiempu reales y actuales - + incluye millones d'edificios, carreteres, y otros detalles de llugares. Puedes poner nel mapa + cualquier carauterística del mundu real que t'interese. + off_html: |- + Lo que nun incluye son datos suxetivos como calificaciones, carauterístiques históriques o hipotétiques, y datos de fontes con drechos d'autor. Si nun tienes + un permisu especial, nun copies de mapes en llinia o en papel. + basic_terms: + title: Términos básicos pa facer mapes + paragraph_1_html: OpenStreetMap tien cierta xíriga de so. Estes son delles + pallabres importantes que puen ser afayadices. + editor_html: Un editor ye un programa o sitiu web que pue + usar pa editar el mapa. + node_html: Un noyu ye un puntu del mapa, como un únicu restaurante + o un árbol. + way_html: Una vía ye una llinia o área, como una carretera, + regueru, llagu o edificiu. + tag_html: |- + Una etiqueta ye una parte de los datos d'un noyu o vía, como'l + d'un restaurante o la velocidá máxima d'una carretera. + rules: + title: ¡Regles! + paragraph_1_html: OpenStreetMap tien poques regles formales, pero esperamos + que tolos participantes collaboren y se comuniquen cola comunidá. Si tas + considerando cualquier actividá distinta de la edición manual, llei y sigui + les instrucciones sobro importaciones + y ediciones + automatizaes. + questions: + title: ¿Tien alguna entruga? + paragraph_1_html: |- + OpenStreetMap tien dellos recursos p'aprender sobro'l proyeutu, entrugar y contestar preguntes, y discutir y documentar en collaboración cuestiones de cartografía. + Algame ayuda equí. + start_mapping: Principiar col mapéu + add_a_note: + title: ¿Nun tien tiempu pa editar? ¡Amieste una nota! + paragraph_1_html: |- + Si namái quier iguar daqué pequeño y nun tien tiempu pa dase d'alta y deprender cómo editar, + ye fácil amestar una nota. + paragraph_2_html: |- + Namái entre nel mapa y calque nel iconu nota: + . Esto amestará un marcador al mapa, que pue mover + abasnando. Añada'l mensaxe, calque guardar, y otros mapeadores investigarán. trace: visibility: private: Priváu (compartíu sólo como anónimu, puntos ensin axeitar) @@ -1633,6 +1633,7 @@ ast: trace_header: upload_trace: Xubir una traza see_all_traces: Ver toles traces + see_my_traces: Ver les mios traces traces_waiting: '{PLURAL|one=Tien %{count} traza esperando pa xubir. Considere esperar a qu''esta termine enantes de xubir más, col envís de nun bloquiar la cola pa otros usuarios.|Tien %{count} traces esperando pa xubir. Considere @@ -1659,6 +1660,7 @@ ast: delete_track: Desaniciar esta traza trace_not_found: ¡Nun s'alcontró la traza! visibility: 'Visibilidá:' + confirm_delete: ¿Desaniciar esta traza? trace_paging_nav: showing_page: Páxina %{page} older: Traces más antigües @@ -1681,6 +1683,7 @@ ast: map: mapa list: public_traces: Traces GPS públiques + my_traces: Les mios traces GPS public_traces_from: Traces GPS públiques de %{user} description: Ver les xubes más nueves de traces GPS tagged_with: ' etiquetaes con %{tags}' @@ -1719,7 +1722,7 @@ ast: coneuta pela interfaz web pa ver los Términos de Collaboración. Nun fai falta aceutalos, pero debes conocelos. oauth: - oauthorize: + authorize: title: Autorizar l'accesu a la to cuenta request_access: L'aplicación %{app_name} ta solicitando accesu a la to cuenta, %{user}. Por favor, revisa si quies que l'aplicación tenga les capacidaes @@ -1733,11 +1736,11 @@ ast: allow_write_gpx: xubir traces GPS. allow_write_notes: camudar notes. grant_access: Permitir accesu - oauthorize_success: + authorize_success: title: Solicitú d'autorización permitida allowed: Permitió que l'aplicación %{app_name} tenga accesu a la so cuenta. verification: El códigu de comprobación ye %{code}. - oauthorize_failure: + authorize_failure: title: Falló la solicitú d'autorización denied: Refugó a l'aplicación %{app_name} l'accesu a la so cuenta. invalid: El pase d'autorización nun ye válidu. @@ -1977,6 +1980,7 @@ ast: if set location: Configura'l to allugamientu na páxina de %{settings_link} pa ver los usuarios cercanos. settings_link_text: preferencies + my friends: Los mios amigos no friends: Entá nun amestasti dengún amigu. km away: a %{count}km de distancia m away: a %{count}m de distancia @@ -2182,7 +2186,7 @@ ast: confirm: Confirmar fail: Nun pues quita-y el rol «%{role}» al usuariu «%{name}». Comprueba que tanto l'usuariu como'l rol son válidos. - user_block: + user_blocks: model: non_moderator_update: Has de ser moderador pa crear o anovar un bloquéu. non_moderator_revoke: Has de ser moderador pa desaniciar un bloquéu. @@ -2243,20 +2247,6 @@ ast: period: one: 1 hora other: '%{count} hores' - partial: - show: Amosar - edit: Editar - revoke: ¡Desaniciar! - confirm: ¿Tas seguru? - display_name: Usuariu bloquiáu - creator_name: Creador - reason: Motivu del bloquéu - status: Estáu - revoker_name: Desaniciáu por - not_revoked: (non desaniciáu) - showing_page: Páxina %{page} - next: Siguiente » - previous: « Anterior helper: time_future: Fina en %{time}. until_login: Activu fasta que'l usuariu anicie sesión. @@ -2287,8 +2277,22 @@ ast: back: Ver tolos bloqueos revoker: 'Desaniciador:' needs_view: L'usuariu tien de coneutase enantes de que se desanicie esti bloquéu. - note: - description: + block: + not_revoked: (non desaniciáu) + show: Amosar + edit: Editar + revoke: ¡Desaniciar! + blocks: + display_name: Usuariu bloquiáu + creator_name: Creador + reason: Motivu del bloquéu + status: Estáu + revoker_name: Desaniciáu por + showing_page: Páxina %{page} + next: Siguiente » + previous: « Anterior + notes: + comment: opened_at_html: Creada hai %{when} opened_at_by_html: Creada hai %{when} por %{user} commented_at_html: Anovada hai %{when} @@ -2417,7 +2421,7 @@ ast: distance: Distancia errors: no_route: Nun pudo alcontrase una ruta ente estos dos llugares. - no_place: Sentímoslo. Nun pudo alcontrase esi llugar. + no_place: Nun pudo alcontrase '%{place}'. instructions: continue_without_exit: Siguir en %{name} slight_right_without_exit: Llixeramente a la drecha haza %{name} @@ -2437,6 +2441,7 @@ ast: onramp_right_with_name_directions: Xira a la derecha nel enllaz pa %{name}, hacia %{directions} onramp_right_without_directions: Xira a la derecha pal enllaz + onramp_right: Xira a la derecha pal enllaz endofroad_right_without_exit: Al final de la carretera xira a la drecha haza %{name} merge_right_without_exit: Xúnite a la drecha haza %{name} @@ -2462,6 +2467,7 @@ ast: onramp_left_with_name_directions: Xira a la izquierda nel enllaz pa %{name}, hacia %{directions} onramp_left_without_directions: Xira a la izquierda nel enllaz + onramp_left: Xira a la izquierda pal enllaz endofroad_left_without_exit: Al final de la carretera xira a la izquierda haza %{name} merge_left_without_exit: Xúnite a la izquierda haza %{name} @@ -2499,7 +2505,7 @@ ast: show_address: Amosar la direición query_features: Consultar entidaes centre_map: Centrar el mapa equí - redaction: + redactions: edit: description: Descripción heading: Editar redaición diff --git a/config/locales/az.yml b/config/locales/az.yml index ff08ac7d0..cb5355cfd 100644 --- a/config/locales/az.yml +++ b/config/locales/az.yml @@ -241,27 +241,6 @@ az: ago: '%{ago} əvvəl' newer_comments: Yeni şərhlər older_comments: Köhnə Şərhlər - export: - start: - area_to_export: Ä°xrac üçün Ərazi - manually_select: Digər ərazini seçmək - format_to_export: Ä°xracın forması - osm_xml_data: OpenStreetMap XML formasında məlumatlar - map_image: Xəritənin Şəkili (standart qatı göstərir) - embeddable_html: Quraşdırılan HTML - licence: Lisenziya - options: Nizamlamalar - format: Format - scale: Miqyas - max: maks - image_size: Şəkil ölçüsü - zoom: Yaxınlaşdır - add_marker: Xəritəyə marker əlavə etmək - latitude: 'En:' - longitude: 'Uz:' - output: Nəticə - paste_html: Veb sayta quraşdırmaq üçün HTML kod - export_button: Ä°xrac etmək geocoder: search: title: @@ -738,40 +717,6 @@ az: make_a_donation: title: OpenStreetMap-i dəstəkləmək üçün maddi yardım et text: Maddi yardım et - license_page: - foreign: - title: Bu tərcümə haqqında - english_link: ingiliscə orijinalına - native: - title: Bu səhifə haqqında - native_link: azərbaycan versiyası - mapping_link: kartoqrafiyalaşdırmağa başla - legal_babble: - title_html: Müəllif hüquqları və Lisenziyalar - intro_1_html: |- - OpenStreetMap Open Data - Commons Open Database License (ODbL) lisenziyası üzrə istifadə olunan açıq məlumatlardan ibarətdir. - credit_title_html: OpenStreetMap-ə Necə istinad etmək olar - attribution_example: - alt: Nümunə üçün, veb-səhifədən OpenStreetMap-ə necə istinad vermək - title: Müəllifin göstərilməsinin nümunəsi - more_title_html: Daha ətraflı öyrən - contributors_title_html: Kimlər bizim layihəyə töhfə verir - contributors_ca_html: Kanada GeoBase ®, GeoGratis (© Kanadanın - Təbii Ehtiyatlar Departamenti), CanVec (© Kanadanın Təbii Ehtiyatlar Departamenti) - və StatCan (Kanadanın Statistika şöbəsinin, Coğrafiya bölməsi) tərəfindən - məlumatlar. - contributors_fr_html: 'Fransa: Baş Vergi Ä°darəsi tərəfindən - məlumatlar.' - contributors_nz_html: Yeni Zelandiya Yeni Zelandiyanın torpaq - resursları haqqında məlumatlardan. Crown Copyright reserved. - contributors_gb_html: Böyük Britaniya Krallığı Ordnance Survey - © Crown copyright tərəfindən məlumatlar. Verilənlər bazasına icazə 2010-12. - infringement_title_html: Müəllif hüquqlarının pozulması - help_page: - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Az:Beginners%27_guide notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} adlı istifadəçi sənin gündəliy yazına şərh @@ -865,10 +810,64 @@ az: delete: deleted: Mesaj silindi site: + copyright: + foreign: + title: Bu tərcümə haqqında + english_link: ingiliscə orijinalına + native: + title: Bu səhifə haqqında + native_link: azərbaycan versiyası + mapping_link: kartoqrafiyalaşdırmağa başla + legal_babble: + title_html: Müəllif hüquqları və Lisenziyalar + intro_1_html: |- + OpenStreetMap Open Data + Commons Open Database License (ODbL) lisenziyası üzrə istifadə olunan açıq məlumatlardan ibarətdir. + credit_title_html: OpenStreetMap-ə Necə istinad etmək olar + attribution_example: + alt: Nümunə üçün, veb-səhifədən OpenStreetMap-ə necə istinad vermək + title: Müəllifin göstərilməsinin nümunəsi + more_title_html: Daha ətraflı öyrən + contributors_title_html: Kimlər bizim layihəyə töhfə verir + contributors_ca_html: Kanada GeoBase ®, GeoGratis (© Kanadanın + Təbii Ehtiyatlar Departamenti), CanVec (© Kanadanın Təbii Ehtiyatlar Departamenti) + və StatCan (Kanadanın Statistika şöbəsinin, Coğrafiya bölməsi) tərəfindən + məlumatlar. + contributors_fr_html: 'Fransa: Baş Vergi Ä°darəsi tərəfindən + məlumatlar.' + contributors_nz_html: Yeni Zelandiya Yeni Zelandiyanın torpaq + resursları haqqında məlumatlardan. Crown Copyright reserved. + contributors_gb_html: Böyük Britaniya Krallığı Ordnance Survey + © Crown copyright tərəfindən məlumatlar. Verilənlər bazasına icazə 2010-12. + infringement_title_html: Müəllif hüquqlarının pozulması index: shortlink: Qısa keçid edit: user_page_link: istifadəçi səhifəsi + export: + area_to_export: Ä°xrac üçün Ərazi + manually_select: Digər ərazini seçmək + format_to_export: Ä°xracın forması + osm_xml_data: OpenStreetMap XML formasında məlumatlar + map_image: Xəritənin Şəkili (standart qatı göstərir) + embeddable_html: Quraşdırılan HTML + licence: Lisenziya + options: Nizamlamalar + format: Format + scale: Miqyas + max: maks + image_size: Şəkil ölçüsü + zoom: Yaxınlaşdır + add_marker: Xəritəyə marker əlavə etmək + latitude: 'En:' + longitude: 'Uz:' + output: Nəticə + paste_html: Veb sayta quraşdırmaq üçün HTML kod + export_button: Ä°xrac etmək + help: + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Az:Beginners%27_guide sidebar: search_results: Axtarış Nəticələri close: Bağla @@ -1072,7 +1071,7 @@ az: confirm: Təsdiq et revoke: confirm: Təsdiq et - user_block: + user_blocks: new: submit: Blok yarat back: Bütün blokları göstər @@ -1093,19 +1092,6 @@ az: edilib' revoke: Ləğv et! flash: Bu blok ləğv edilib. - partial: - show: Göstər - edit: Redaktə et - revoke: Ləğv et! - confirm: Əminsinizmi? - display_name: Bloklanmış Ä°stifadəçilər - creator_name: Yaradıcı - reason: Bloklanma səbəbi - status: Status - revoker_name: Tərəfindən ləgv edilib - not_revoked: (ləgv edilməyib) - next: Növbəti » - previous: « Əvvəlki helper: time_past: '%{time} əvvəl sona çatıb.' blocks_by: @@ -1116,6 +1102,19 @@ az: status: Status show: 'Göstər:' revoke: Ləğv et! + block: + not_revoked: (ləgv edilməyib) + show: Göstər + edit: Redaktə et + revoke: Ləğv et! + blocks: + display_name: Bloklanmış Ä°stifadəçilər + creator_name: Yaradıcı + reason: Bloklanma səbəbi + status: Status + revoker_name: Tərəfindən ləgv edilib + next: Növbəti » + previous: « Əvvəlki javascripts: map: base: @@ -1123,7 +1122,7 @@ az: transport_map: Nəqliyyat Xəritəsi site: edit_tooltip: Xəritəni redaktə et - redaction: + redactions: edit: description: Təsvir show: diff --git a/config/locales/ba.yml b/config/locales/ba.yml index a8e51a841..4d4c3c5ad 100644 --- a/config/locales/ba.yml +++ b/config/locales/ba.yml @@ -330,25 +330,6 @@ ba: ago: '%{ago}элек' newer_comments: Яңыраҡ фекерҙәр older_comments: Иҫкерәк фекерҙәр - export: - title: Сығарырға - start: - area_to_export: Сығарыу яланы - manually_select: Башҡа өлкәне ҡулдан һайларға - format_to_export: Сығарыу форматы - osm_xml_data: Биремдең OpenStreetMap XML форматы - map_image: Карта һүрәте (стандарт ҡатламды күрһәтә) - embeddable_html: Ҡуйылған HTML - licence: Лицензия - too_large: - planet: - title: OSM планетаһы - max: макс. - image_size: Һүрәт ҙурлығы - add_marker: Картаға билдә ҡуйыу - latitude: 'Киңлек:' - longitude: 'Оҙонлоҡ:' - paste_html: Сайтҡа индереп ҡуйыу өсөн HTML-код geocoder: search: title: @@ -670,6 +651,25 @@ ba: wood: Урман office: accountant: Бухгалтер + site: + export: + title: Сығарырға + area_to_export: Сығарыу яланы + manually_select: Башҡа өлкәне ҡулдан һайларға + format_to_export: Сығарыу форматы + osm_xml_data: Биремдең OpenStreetMap XML форматы + map_image: Карта һүрәте (стандарт ҡатламды күрһәтә) + embeddable_html: Ҡуйылған HTML + licence: Лицензия + too_large: + planet: + title: OSM планетаһы + max: макс. + image_size: Һүрәт ҙурлығы + add_marker: Картаға билдә ҡуйыу + latitude: 'Киңлек:' + longitude: 'Оҙонлоҡ:' + paste_html: Сайтҡа индереп ҡуйыу өсөн HTML-код javascripts: share: only_standard_layer: Бары стандарт ҡатлам ғына һүрәт кеүек экспортлана ала diff --git a/config/locales/be-Tarask.yml b/config/locales/be-Tarask.yml index a79905fa7..82e9136f6 100644 --- a/config/locales/be-Tarask.yml +++ b/config/locales/be-Tarask.yml @@ -175,7 +175,7 @@ be-Tarask: list: title: Наборы зьменаў title_user: Набор зьменаў %{user} - title_friend: Наборы зьменаў Вашых сяброў + title_friend: Наборы зьменаў маіх сяброў title_nearby: Наборы зьменаў для суседніх удзельнікаў timeout: sorry: Прабачце, сьпіс набораў зьменаў, які Вы запыталі, занадта вялікі для @@ -190,7 +190,7 @@ be-Tarask: user_title: Дзёньнік %{user} in_language_title: Дзёньнік запісаў у %{language} new: Новы запіс у дзёньніку - new_title: Стварыць новы запіс у Вашым дзёньніку + new_title: Стварыць новы запіс у маім дзёньніку удзельніка no_entries: У дзёньніку няма запісаў recent_entries: Апошнія запісы ў дзёньніку older_entries: Старэйшыя запісы @@ -251,35 +251,6 @@ be-Tarask: description: Апошнія запісы ў дзёньніку карыстальнікаў OpenStreetMap comments: post: Запіс - export: - start: - area_to_export: Абшар для экспарту - manually_select: Выбраць іншы абшар - format_to_export: Фармат экспарту - osm_xml_data: Зьвесткі OpenStreetMap у фармаце XML - map_image: Выява мапы (паказвае стандартны слой) - embeddable_html: HTML-код для ўстаўкі - licence: Ліцэнзія - export_details: Зьвесткі OpenStreetMap даступныя на ўмовах ліцэнзіі Open - Data Commons Open Database License (ODbL). - too_large: - body: 'Гэты абшар занадта вялікі для экспарту ў фармаце XML OpenStreetMap. - Калі ласка, зьменшыце маштаб, выберыце меншы абшар, ці паспрабуйце адну - з наступных крыніцаў для пакетнай запампоўкі зьвестак:' - planet: - title: Плянэта OSM - options: Устаноўкі - format: Фармат - scale: Маштаб - max: максымум - image_size: 'Памер выявы:' - zoom: Маштаб - add_marker: Дадаць маркер на мапу - latitude: 'Шырата:' - longitude: 'Даўгата:' - output: Вывад - paste_html: HTML-код для ўстаўкі ў вэб-сайт - export_button: Экспартаваць geocoder: search: title: @@ -713,76 +684,6 @@ be-Tarask: make_a_donation: title: Падтрымаць OpenStreetMap грашовым ахвяраваньнем text: Зрабіць ахвяраваньне - license_page: - foreign: - title: Пра гэты пераклад - text: У выпадку канфлікту паміж гэтай перакладзенай старонкай і %{english_original_link}, - старонка на ангельскай мове павінна мець перавагу - english_link: арыгінальная ангельская вэрсія - native: - title: Пра гэтую старонку - text: Вы праглядаеце ангельскую вэрсію старонкі аўтарскіх правоў. Вы можаце - вярнуцца да %{native_link} гэтай старонкі ці спыніць чытаньне пра аўтарскія - правы і %{mapping_link}. - native_link: беларускай вэрсіі - mapping_link: пачаць стварэньне мапы - legal_babble: - title_html: Аўтарскія правы і ліцэнзія - intro_1_html: |- - OpenStreetMap® — вольныя зьвесткі, ліцэнзаваныя паводле ліцэнзіі Адкрытых базаў зьвестак Адкрытых агульных зьвестак (ODbL) Фундацыяй OpenStreetMap Foundation (OSMF). - intro_2_html: Вы можаце капіяваць, распаўсюджваць, перадаваць і зьмяняць нашыя - зьвесткі да той пары, пакуль вы спасылаецеся на OpenStreetMap і яе ўдзельнікаў. - Калі вы зьмяняеце ці выкарыстоўваеце нашыя зьвесткі, вы можаце распаўсюджваць - вынікі толькі на ўмовах такой жа ліцэнзіі. Поўны тэкст - ліцэнзіі растлумачыць вам правы і адказнасьці. - credit_title_html: Як спасылацца на OpenStreetMap - credit_1_html: |- - Мы патрабуем, каб - Вы пазначалі “© удзельнікі OpenStreetMap”. - credit_2_html: Мусіце таксама яўна пазначыць, што зьвесткі даступныя паводле - ліцэнзіі Open Database, а калі карыстаецеся нашымі кавалкамі мапаў, што картаграфія - ліцэнзаваная паводле CC BY-SA. Гэта можна зрабіць, спаслаўшыся на гэтую - старонку правоў. Калі вы распаўсюджваеце OSM у фармаце зьвестак, вы мусіце - разьмяшчаць наўпроставую спасылку на ліцэнзіі. Калі вы выкарыстоўваеце носьбіты, - дзе выкарыстаньне спасылак немагчымае (напрыклад, друкаваныя працы), мы прапануем - накіроўваць вашых чытачоў на www.openstreetmap.org (магчымае выкарыстаньне - поўнага адрасу ‘OpenStreetMap’), на opendatacommons.org і, пры - неабходнасьці, на www.creativecommons.org. - more_title_html: Даведацца болей - more_1_html: Даведайцеся болей пра выкарыстаньне нашых зьвестак і пра спасыланьне - на нас на старонцы ліцэнзіі OSMF. - more_2_html: |- - Хоць OpenStreetMap ёсьць адкрытымі зьвесткамі, мы ня здольныя прадаставіць бяскоштны API мапаў для староньніх распрацоўнікаў. Глядзіце нашыя правілы карыстаньня API, правілы карыстаньня частак мапаў - і правілы карыстаньня Nominatim. - contributors_title_html: Нашыя ўдзельнікі - contributors_intro_html: 'Нашы аўтары — гэта тысячы асобаў. Мы таксама ўключаем - зьвесткі з вольнай ліцэнзіяй ад нацыянальных картаграфічных службаў і зь іншых - крыніц, сярод іх:' - contributors_at_html: |- - Аўстрыя: утрымлівае зьвесткі гораду Вены (на ўмовах - CC BY), а таксама земляў Форарльбэрг і - Тыроль (на ўмовах CC BY AT з дапаўненьнямі). - contributors_ca_html: |- - Канада: Утрымлівае зьвесткі - GeoBase®, GeoGratis (© Дэпартамэнта прыродных рэсурсаў - Канады), CanVec (© Дэпартамэнта прыродных рэсурсаў - Канады), і StatCan (Статыстычнага падразьдзяленьня Канады). - contributors_fr_html: |- - Францыя: Утрымлівае зьвесткі - Галоўнага падатковага ўпраўленьня. - contributors_nz_html: |- - Новая Зэляндыя: Утрымлівае зьвесткі пра - зямельныя рэсурсы Новай Зэляндыі. Crown Copyright reserved. - contributors_gb_html: |- - Вялікабрытанія: Утрымлівае зьвесткі Ordnance - Survey © Crown copyright and database right - 2010—2012. - contributors_footer_2_html: |- - Уключэньне зьвестак у OpenStreetMap не азначае, што пастаўшчыкі пачатковых зьвестак - якім-небудзь чынам падтрымліваюць OpenStreetMap, прадстаўляюць гарантыі, ці - прымаюць на сябе якую-небудзь адказнасьць. notifier: diary_comment_notification: subject: Карыстальнік [OpenStreetMap] %{user} пакінуў камэнтар у дзёньніку @@ -915,6 +816,78 @@ be-Tarask: delete: deleted: Паведамленьне выдаленае site: + copyright: + foreign: + title: Пра гэты пераклад + text: У выпадку канфлікту паміж гэтай перакладзенай старонкай і %{english_original_link}, + старонка на ангельскай мове павінна мець перавагу + english_link: арыгінальная ангельская вэрсія + native: + title: Пра гэтую старонку + text: Вы праглядаеце ангельскую вэрсію старонкі аўтарскіх правоў. Вы можаце + вярнуцца да %{native_link} гэтай старонкі ці спыніць чытаньне пра аўтарскія + правы і %{mapping_link}. + native_link: беларускай вэрсіі + mapping_link: пачаць стварэньне мапы + legal_babble: + title_html: Аўтарскія правы і ліцэнзія + intro_1_html: |- + OpenStreetMap® — вольныя зьвесткі, ліцэнзаваныя паводле ліцэнзіі Адкрытых базаў зьвестак Адкрытых агульных зьвестак (ODbL) Фундацыяй OpenStreetMap Foundation (OSMF). + intro_2_html: Вы можаце капіяваць, распаўсюджваць, перадаваць і зьмяняць нашыя + зьвесткі да той пары, пакуль вы спасылаецеся на OpenStreetMap і яе ўдзельнікаў. + Калі вы зьмяняеце ці выкарыстоўваеце нашыя зьвесткі, вы можаце распаўсюджваць + вынікі толькі на ўмовах такой жа ліцэнзіі. Поўны тэкст + ліцэнзіі растлумачыць вам правы і адказнасьці. + credit_title_html: Як спасылацца на OpenStreetMap + credit_1_html: |- + Мы патрабуем, каб + Вы пазначалі “© удзельнікі OpenStreetMap”. + credit_2_html: Мусіце таксама яўна пазначыць, што зьвесткі даступныя паводле + ліцэнзіі Open Database, а калі карыстаецеся нашымі кавалкамі мапаў, што + картаграфія ліцэнзаваная паводле CC BY-SA. Гэта можна зрабіць, спаслаўшыся + на гэтую старонку правоў. + Калі вы распаўсюджваеце OSM у фармаце зьвестак, вы мусіце разьмяшчаць наўпроставую + спасылку на ліцэнзіі. Калі вы выкарыстоўваеце носьбіты, дзе выкарыстаньне + спасылак немагчымае (напрыклад, друкаваныя працы), мы прапануем накіроўваць + вашых чытачоў на www.openstreetmap.org (магчымае выкарыстаньне поўнага адрасу + ‘OpenStreetMap’), на opendatacommons.org і, пры неабходнасьці, + на www.creativecommons.org. + more_title_html: Даведацца болей + more_1_html: Даведайцеся болей пра выкарыстаньне нашых зьвестак і пра спасыланьне + на нас на старонцы ліцэнзіі + OSMF. + more_2_html: |- + Хоць OpenStreetMap ёсьць адкрытымі зьвесткамі, мы ня здольныя прадаставіць бяскоштны API мапаў для староньніх распрацоўнікаў. Глядзіце нашыя правілы карыстаньня API, правілы карыстаньня частак мапаў + і правілы карыстаньня Nominatim. + contributors_title_html: Нашыя ўдзельнікі + contributors_intro_html: 'Нашы аўтары — гэта тысячы асобаў. Мы таксама ўключаем + зьвесткі з вольнай ліцэнзіяй ад нацыянальных картаграфічных службаў і зь + іншых крыніц, сярод іх:' + contributors_at_html: |- + Аўстрыя: утрымлівае зьвесткі гораду Вены (на ўмовах + CC BY), а таксама земляў Форарльбэрг і + Тыроль (на ўмовах CC BY AT з дапаўненьнямі). + contributors_ca_html: |- + Канада: Утрымлівае зьвесткі + GeoBase®, GeoGratis (© Дэпартамэнта прыродных рэсурсаў + Канады), CanVec (© Дэпартамэнта прыродных рэсурсаў + Канады), і StatCan (Статыстычнага падразьдзяленьня Канады). + contributors_fr_html: |- + Францыя: Утрымлівае зьвесткі + Галоўнага падатковага ўпраўленьня. + contributors_nz_html: |- + Новая Зэляндыя: Утрымлівае зьвесткі пра + зямельныя рэсурсы Новай Зэляндыі. Crown Copyright reserved. + contributors_gb_html: |- + Вялікабрытанія: Утрымлівае зьвесткі Ordnance + Survey © Crown copyright and database right + 2010—2012. + contributors_footer_2_html: |- + Уключэньне зьвестак у OpenStreetMap не азначае, што пастаўшчыкі пачатковых зьвестак + якім-небудзь чынам падтрымліваюць OpenStreetMap, прадстаўляюць гарантыі, ці + прымаюць на сябе якую-небудзь адказнасьць. index: js_1: Вы карыстаецеся браўзэрам, які не падтрымлівае ці мае забаронены JavaScript. js_2: OpenStreetMap выкарыстоўвае JavaScript для паказу мапы. @@ -942,6 +915,34 @@ be-Tarask: 2, Вам неабходна націснуць кнопку «захаваць».) no_iframe_support: Ваш браўзэр не падтрымлівае рамкі HTML, якія зьяўляюцца неабходнымі для гэтай магчымасьці. + export: + area_to_export: Абшар для экспарту + manually_select: Выбраць іншы абшар + format_to_export: Фармат экспарту + osm_xml_data: Зьвесткі OpenStreetMap у фармаце XML + map_image: Выява мапы (паказвае стандартны слой) + embeddable_html: HTML-код для ўстаўкі + licence: Ліцэнзія + export_details: Зьвесткі OpenStreetMap даступныя на ўмовах ліцэнзіі Open + Data Commons Open Database License (ODbL). + too_large: + body: 'Гэты абшар занадта вялікі для экспарту ў фармаце XML OpenStreetMap. + Калі ласка, зьменшыце маштаб, выберыце меншы абшар, ці паспрабуйце адну + з наступных крыніцаў для пакетнай запампоўкі зьвестак:' + planet: + title: Плянэта OSM + options: Устаноўкі + format: Фармат + scale: Маштаб + max: максымум + image_size: 'Памер выявы:' + zoom: Маштаб + add_marker: Дадаць маркер на мапу + latitude: 'Шырата:' + longitude: 'Даўгата:' + output: Вывад + paste_html: HTML-код для ўстаўкі ў вэб-сайт + export_button: Экспартаваць sidebar: search_results: Вынікі пошуку close: Закрыць @@ -1140,7 +1141,7 @@ be-Tarask: ў ўэб-інтэрфэйс, каб каб паглядзець умовы супрацоўніцтва. Вам не абавязкова пагаджацца зь імі, але неабходна зь імі азнаёміцца. oauth: - oauthorize: + authorize: request_access: Дастасаваньне %{app_name} патрабуе доступ да Вашага рахунку, %{user}. Калі ласка, праверце, ці Вы жадаеце, каб дастасаваньне мела наступныя магчымасьці. Вы можаце выбраць любую колькасьць. @@ -1311,9 +1312,9 @@ be-Tarask: body: Прабачце, няма ўдзельніка з іменем %{user}. Калі ласка, праверце дакладнасьць напісаньня, ці, магчыма, спасылка па якой Вы перайшлі, няслушная. view: - my diary: мой дзёньнік + my diary: Мой дзёньнік new diary entry: новы запіс у дзёньніку - my edits: мае рэдагаваньні + my edits: Мае рэдагаваньні my traces: Мае трэкі my settings: Мае налады oauth settings: налады OAuth @@ -1509,7 +1510,7 @@ be-Tarask: confirm: Пацьвердзіць fail: Не магчыма адмяніць ролю `%{role}' удзельніка `%{name}'. Калі ласка, праверце каб удзельнік і роля былі слушнымі. - user_block: + user_blocks: model: non_moderator_update: Трэба быць мадэратарам, каб стварыць ці адбавіць блякаваньне. non_moderator_revoke: Трэба быць мадэратарам, каб адклікаць блякяваньне. @@ -1576,17 +1577,6 @@ be-Tarask: one: '%{count} гадзіна' few: '%{count} гадзіны' other: '%{count} гадзінаў' - partial: - show: Паказаць - edit: Рэдагаваць - revoke: Адклікаць! - confirm: Вы ўпэўнены? - display_name: Заблякаваны ўдзельнік - creator_name: Стваральнік - reason: Прычына блякаваньня - status: Статус - revoker_name: Адкліканае - not_revoked: (не адкліканае) helper: time_future: Канчаецца ў %{time}. until_login: Актыўнае да моманту ўваходу ўдзельніка ў сыстэму. @@ -1614,6 +1604,17 @@ be-Tarask: revoker: 'Адклікаўшы:' needs_view: Удзельніку трэба ўвайсьці ў сыстэму, перад тым як гэтае блякаваньне будзе зьнятае. + block: + not_revoked: (не адкліканае) + show: Паказаць + edit: Рэдагаваць + revoke: Адклікаць! + blocks: + display_name: Заблякаваны ўдзельнік + creator_name: Стваральнік + reason: Прычына блякаваньня + status: Статус + revoker_name: Адкліканае javascripts: map: base: diff --git a/config/locales/be.yml b/config/locales/be.yml index 74e26393b..091793cec 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -2,6 +2,7 @@ # Exported from translatewiki.net # Export driver: phpyaml # Author: Alex73 +# Author: Artsiom91 # Author: Goshaproject # Author: Jim-by # Author: Macofe @@ -334,55 +335,6 @@ be: ago: '%{ago} таму' newer_comments: Навейшыя каментары older_comments: Старэйшыя каментары - export: - title: Экспарт - start: - area_to_export: Экспартаваць мясцовасць - manually_select: Выбраць іншую мясцовасць - format_to_export: Фармат для экспарту - osm_xml_data: OpenStreetMap XML - map_image: Выява карты (паказвае стандартны слой) - embeddable_html: HTML-код - licence: Ліцэнзія - export_details: Дадзеныя праекту OpenStreetMap распаўсюджваюцца па ліцэнзіі - Open Data Commons - Open Database License (ODbL). - too_large: - advice: 'Калі экспарт вышэй не атрымаўся, то разгледзьце магчымасць выкарыстання - адной з наступных крыніц:' - body: Гэтая вобласць занадта вялікая, каб быць экспартаваная як OpenStreetMap - XML-дадзеныя. Калі ласка, павялічце або абярыце меншую вобласць, альбо скарыстайцеся - адной з крыніц, пералічаных ніжэй, для загрузкі вялікага аб'ему дадзеных. - planet: - title: Планета OSM - description: Рэгулярна абнаўляемыя копіі поўнай базы дадзеных OpenStreetMap - overpass: - title: Overpass API - description: Спампаваць абмежаваную гэтым прастакутнікам вобласць з люстэрка - базы дадзеных OpenStreetMap - geofabrik: - title: Загрузкі Geofabrik - description: Рэгулярна абнаўляемыя выбаркі кантынентаў, краін і асобных - гарадоў - metro: - title: Выбаркі Metro - description: Выбаркі дадзеных для буйных гарадоў свету і прылеглых да іх - тэрыторый - other: - title: Іншыя крыніцы - description: Дадатковыя крыніцы, пералічаныя на Вікі OpenStreetMap - options: Настройкі - format: Фармат - scale: Маштаб - max: макс - image_size: Памер выявы - zoom: Павелічэнне - add_marker: Дадаць маркер на карту - latitude: 'Шыр:' - longitude: 'Даў:' - output: Вывад - paste_html: Уставіць HTML-код у вэб-сайт - export_button: Экспарт geocoder: search: title: @@ -954,258 +906,6 @@ be: text: Зрабіць ахвяраванне learn_more: Даведацца больш more: Больш падрабязна - license_page: - foreign: - title: Пра гэты пераклад - text: У выпадку супярэчнасці паміж гэтай перакладзенай старонкай і %{english_original_link}, - англійская старонка павінна мець прыярытэт - english_link: англійскім арыгіналам - native: - title: Пра гэтую старонку - text: Вы праглядаеце англійскую версію старонкі пра аўтарскія правы. Вы можаце - вярнуцца да %{native_link} гэтай старонкі ці спыніць чытанне пра аўтарскія - правы і %{mapping_link}. - native_link: беларуская версія - mapping_link: пачаць маляваць карту - legal_babble: - title_html: Аўтарскія правы і ліцэнзія - intro_1_html: |- - OpenStreetMap® - гэта адкрытыя дадзеныя, што распаўсюджваюцца па ліцэнзіі Open Data Commons Open Database License (ODbL) сіламі OpenStreetMap Foundation (OSMF). - intro_2_html: "Вы можаце капіяваць, распаўсюджваць, перадаваць і змяняць нашыя - \ дадзеныя да той пары пакуль Вы спасылаецеся на OpenStreetMap і яе ўдзельнікаў. - Калі Вы змяняеце ці выкарыстоўваеце нашыя дадзеныя, Вы можаце распаўсюджваць - вынікі толькі на ўмовах такой жа ліцэнзіі. Поўны \nтэкст - ліцэнзіі растлумачыць Вам правы і адказнасці." - intro_3_html: "Карты ў графічным выглядзе, а таксама дакументацыя распаўсюджваюцца - на ўмовах Ліцензіі - Creative \nCommons Attribution-ShareAlike 2.0 (CC-BY-SA)." - credit_title_html: Як спасылацца на OpenStreetMap - credit_1_html: |- - Мы патрабуем, каб выкарыстоўвалася спасылка “© OpenStreetMap - contributors”. - credit_2_html: Вы павінны таксама даваць дакладна разумець, што дадзеныя даступныя - на ўмовах Open Database License, а ў выпадку, калі вы карыстаецеся графічнымі - картамі з нашага сервера, на іх распаўсюджваюцца ўмовы CC-BY-SA. Вы можаце - зрабіць гэта падаўшы спасылкі на гэтую - старонку з тлумачэннем лiцэнзiйных патрабаванняў. Ці для выканання нашых - патрабаванняў пры распаўсюдзе дадзеных OSM вы можаце непасрэдна ўказваць назву - ліцэнзіі(й) і спасылкі на яе(іх) тэкст. Пры выкарыстанні носьбітамі, дзе выкарыстанне - гіпертэкставых спасылак немагчыма (напрыклад друкаваныя матэрыялы), мы прапануем - спасылацца непасрэдна на openstreetmap.org (або пашыраючы "OpenStreetMap" - да гэтага поўнага адраса), opendatacommons.org, а калі трэба, і на creativecommons.org. - credit_3_html: "Для электронных карт, згадка пра крыніцу дадзеных павінна знаходзіцца - ў куце карты. \nНапрыклад:" - attribution_example: - alt: Прыклад таго, як трэба спасылацца на OpenStreetMap на старонцы - title: Прыклад спасылкі - more_title_html: Даведацца больш - more_1_html: |- - Даведайцеся больш аб выкарыстанні нашых дадзеных і аб тым, як паказваць нас як крыніцу паходжання дадзеных на старонцы OSMF Licence і адказах на прававыя пытанні. - more_2_html: Хоць дадзеныя OpenStreetMap з'яўляецца адкрытымі дадзенымі, мы - не ў стане прадастаўляць бясплатны картаграфічны API для іншых распрацоўшчыкаў. - Азнаёмцеся з нашымі Правіламі - выкарыстання API, Правіламі - выкарыстання графічных карт і Правіламі - выкарыстання сэрвісу Nominatim. - contributors_title_html: Нашы ўдзельнікі - contributors_intro_html: 'Нашымі ўдзельнікамі з''яўляюцца тысячы людзей. Мы - таксама ўключаем дадзеныя ад нацыянальных картаграфічных агенцтваў, якія распаўсюджваюцца - на ўмовах адкрытых ліцэнзій, сярод іх:' - contributors_at_html: "Аўстрыя: Утрымлівае звесткі\nгорада - Вены на ўмовах\nCC - BY, зямлі - Форарльберг і \nзямлі Тыроль (на ўмовах CC - BY AT з дадаткамі)." - contributors_ca_html: |- - Канада: Утрымлівае звесткі - GeoBase®, GeoGratis (© Дэпартамента прыродных рэсурсаў - Канады), CanVec (© Дэпартамента прыродных рэсурсаў - Канады), і StatCan (Статыстычнага падраздзялення Канады). - contributors_fi_html: "Фінляндыя: змяшчае дадзеныя з тапаграфічнай - базы дадзеных Нацыянальнай зямельнай службы Фінляндыі і іншыя наборы дадзеных - на ўмовах ліцэнзіі \nNLSFI." - contributors_fr_html: |- - Францыя: Змяшчае дадзеныя атрыманыя ад - Direction Générale des Impôts. - contributors_nl_html: |- - Нідэрланды: Змяшчае дадзеныя © AND, 2007 - (www.and.com) - contributors_nz_html: |- - Новая Зеландыя: Утрымлівае звесткі пра - зямельныя рэсурсы Новай Зэляндыі. Crown Copyright reserved. - contributors_si_html: 'Славенія: змяшчае дадзеныя Геадэзічнай - управы і Міністэрства сельскай гаспадаркі, - лясной гаспадаркі і харчавання (публічная інфармацыя Славеніі).' - contributors_za_html: |- - Паўднёвая Афрыка: Змяшчае дадзеныя з - Chief Directorate: National Geo-Spatial Information, State copyright reserved. - contributors_gb_html: |- - Вялікабрытанія: Утрымлівае звесткі Ordnance - Survey © Crown copyright and database right - 2010-12. - contributors_footer_1_html: Дадатковую інфармацыю аб гэтых і іншых крыніцах, - якія былі выкарыстаныя для паляпшэння карты OpenStreetMap, можна атрымаць - на старонцы Удзельнікі - на Вікі OpenStreetMap. - contributors_footer_2_html: |- - Уключэнне дадзеных у OpenStreetMap не азначае, што пастаўшчыкі пачатковых дадзеных - якім-небудзь чынам падтрымліваюць OpenStreetMap, прадстаўляюць гарантыі, ці - прымаюць на сябе якую-небудзь адказнасць. - infringement_title_html: Парушэнне аўтарскіх правоў - infringement_1_html: Удзельнікі супольнасці OSM павінны заўсёды памятаць пра - тое, што забараняецца дадаваць дадзеныя з любых абароненых аўтарскім правам - крыніц (напрыклад, з Google Maps або з друкаваных карт) без дазволу праваўладальнікаў. - infringement_2_html: Калі вы лічыце, што абаронены аўтарскім правам матэрыял - быў недарэчна дададзены ў базу дадзеных OpenStreetMap або да гэтага сайту, - азнаёмціся з нашым парадкам - выдалення такіх дадзеных або скарыстайцеся непасрэдна нашай старонкай - для онлайн зваротаў. - trademarks_title_html: Таварныя знакі - trademarks_1_html: OpenStreetMap і лагатып з лупаю з'яўляюцца зарэгістраванымі - таварнымі знакамі фонду OpenStreetMap. Калі ў вас есць пытанні аб выкарыстанні - знакаў, калі ласка, адпраўце Вашыя пытанні рабочай - групе па ліцэнзіі. - welcome_page: - title: Вітаем! - introduction_html: Вітаем у OpenStreetMap, свабоднай і даступнай для рэдагавання - карце свету. Зараз, калі вы ўвайшлі, усё гатова для пачатку рэдагавання. Вось - кароткае кіраўніцтва па найважнейшым рэчам, якія вы павінны ведаць. - whats_on_the_map: - title: Што змяшчае карта - on_html: Карта OpenStreetMap змяшчае аб'екты, якія існуюць у цяперашні момант, - уключаючы мільёны дамоў, дарог і іншых элементаў мясцовасці. Вы можаце наносіць - на карту любыя аб'екты навакольнага свету, якія цікавяць вас. - off_html: Карта НЕ ўключае суб'ектыўныя дадзеныя накшталт ацэнак, гістарычных - або гіпатэтычных характарыстык і дадзеныя з крыніц, якія абаронены аўтарскім - правам. Калі вы не маеце спецыяльнага дазволу, не капіюйце з папяровых карт - або карт у Інтэрнэце. - basic_terms: - title: Невялікі слоўнік картографа - paragraph_1_html: OpenStreetMap мае свой ​​уласны жаргон. Вось некалькі ключавых - слоў, якія могуць быць карыснымі. - editor_html: Рэдактар - гэта праграма або вэб-сайт, які вы - можаце выкарыстоўваць для рэдагавання карты. - node_html: Пункт (node) - гэта пункт на карце, напрыклад, рэстаран - ці дрэва. - way_html: Лінія (way) - гэта лінія або многавугольнік, напрыклад, - дарогі, рэкі, азёры або будынкі. - tag_html: |- - Тэг (tag) - гэта элемент апісання пункта або лініі, напрыклад, - назва рэстарана або абмежаванне хуткасці на дарозе. - rules: - title: Правілы! - paragraph_1_html: У OpenStreetMap есьць некалькі фармальных правілаў, але мы - чакаем, што ўсе ўдзельнікі будуць супрацоўнічаць і мець зносіны з супольнасцю. - Калі вы плануеце нейкія дзеянні, па-за рэдагаваннем ўручную, калі ласка, прачытайце - і выконвайце рэкамендацыі па Імпарту - і Аўтаматызаваных - Праўках. - questions: - title: Ёсць пытанні? - paragraph_1_html: "OpenStreetMap мае розныя рэсурсы для атрымання інфармацыі - аб праекце, для задавання пытанняў і атрымання адказаў, для сумеснага абмеркавання - і стварэння дакументацыі па картаграфаванні. \nАтрымаеце - дапамогу тут." - start_mapping: Пачаць маляваць карту - add_a_note: - title: Няма часу на рэдагаванне? Дадайце заўвагу! - paragraph_1_html: Калі трэба ўнесці дробнае ўдакладненне, дзеля якога не варта - марнаваць час на рэгістрацыю і вывучэнне правілаў рэдагавання, раім проста - дадаць заўвагу на карту. - paragraph_2_html: "Перайдзіце на прагляд карты і пстрыкніце - значок заўвагі: \n. Гэта дазволіць дадаць маркер - на карту, які вы зможаце перацягнуць мышшу. Дадайце ваша паведамленне, націсніце - \"захаваць\", і іншыя ўдзельнікі ўбачаць яго і, у выпадку неабходнасці, будуць - унесены змены ў карту." - fixthemap: - title: Паведаміць аб праблеме / Выправіць карту - how_to_help: - title: Як дапамагчы - join_the_community: - title: Далучыцца да супольнасці - explanation_html: Калі вы заўважылі, недакладнасці ў нашых картаграфічных - дадзеных, напрыклад дарога не пазначана ці ваш адрас, лепшы спосаб гэта - выправіць - далучыцца да супольнасці OpenStreetMap і дадаць або выправіць - дадзеныя самастойна. - add_a_note: - instructions_html: "Проста націсніце або падобны - значок на карце. \nУ выніку на карце з'явіцца маркер, які вы зможаце перамяшчаць - шляхам перацягвання. Дадайце ваша паведамленне, націсніце кнопку Захаваць - і іншыя ўдзельнікі змогуць гэта убачыць." - other_concerns: - title: Іншыя перасцярогі - explanation_html: "Калі вы занепакоеныя тым, як нашы дадзеныя выкарыстоўваюцца - або іх зместам, звярніцеся да нашай \nстаронкі аўтарскіх - правоў для атрымання прававой інфармацыі, або звяжыцеся з адпаведнай \nрабочай групай OSMF." - help_page: - title: Атрыманне дапамогі - introduction: OpenStreetMap мае розныя рэсурсы для атрымання інфармацыі аб праекце, - для задавання пытанняў і атрымання адказаў, для сумеснага абмеркавання і стварэння - дакументацыі па картаграфаванні. - welcome: - url: /welcome - title: Вітаем у OSM - description: Пачніце з гэтага кароткага кіраўніцтва, што ахоплівае асновы OpenStreetMap. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: Дапаможнік для пачаткоўцаў - description: Супольнасць падтрымлівае дапаможнік для пачаткоўцаў. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Задаць пытанне або знайсці адказы на сайце пытанняў і адказаў OSM. - mailing_lists: - title: Рассылкі - description: Задайце пытанне ці далучыцеся да абмеркавання цікавых тэм на шырокім - коле тэматычных або рэгіянальных спісаў рассылкі. - forums: - title: Форумы - description: Пытанні і абмеркаванні для тых, хто аддае перавагу інтэрфейсу ў - стылі дошкі аб'яў. - irc: - title: IRC - description: Інтэрактыўны чат на розных мовах і на розныя тэмы. - switch2osm: - title: switch2osm - description: Дапамога кампаніям і арганізацыям у пераходзе на карты OpenStreetMap - і іншыя паслугі. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Паглядзець вікі з падрабязнай дакументацыяй па OSM - about_page: - next: Далей - copyright_html: ©OpenStreetMap
      contributors - used_by: '%{name} забяспечвае картаграфічнымі дадзенымі тысячы сайтаў, мабільных - праграм і прыстасаванняў' - lede_text: OpenStreetMap створаны супольнасцю картографаў, якія дадаюць і падтрымліваюць - дадзеныя аб дарогах, сцежках, кафэ, вакзалах і многіх іншых аб'ектах па ўсім - свеце. - local_knowledge_title: Веданне мясцовасці - local_knowledge_html: OpenStreetMap надае асаблівае значэнне веданню мясцовасці. - Удзельнікі выкарыстоўваюць аэрафотаздымкі, GPS-прылады і нізкатэхналагічныя - палявыя карты для праверкі таго, што дадзеныя OSM з'яўляюцца дакладнымі і актуальнымі. - community_driven_title: Развівіаецца супольнасцю - community_driven_html: |- - Супольнасць OpenStreetMap - разнастайная, зацятая і штодня расце. Сярод нашых удзельнікаў ёсць картографы энтузіясты і прафесіяналы, інжынеры якія падтрымліваюць серверы OSM, спецыялісты, якія з гуманістычных прычын, дапамагаюць у картаграфаванні раёнаў, пацярпелых ад стыхійнага бедства, і многія іншыя. - Каб даведацца больш пра супольнасць, паглядзіце дзённікі карыстальнікаў, - блогі супольнасці і сайт фонду OSM. - open_data_title: Адкрытыя дадзеныя - open_data_html: "OpenStreetMap - гэта адкрытыя дадзеныя: вы можаце свабодна - выкарыстоўваць іх для любых мэтаў да тых часоў, пакуль вы спасылаецеся на OpenStreetMap - і яго ўдзельнікаў. Пры змене дадзеных або выкарыстанні ў якасці асновы для - новых прадуктаў, вы можаце распаўсюджваць вынік толькі па той жа ліцэнзіі. Глядзіце - старонку аўтарскія правы і \nліцэнзія, каб атрымаць - падрабязную інфармацыю." - legal_title: Прававыя пытанні - legal_html: |- - Гэты сайт і многія іншыя звязаныя паслугі фармальна кіруюцца OpenStreetMap Foundation (OSMF) ад імя супольнасці. -
      - Калі ласка, звярніцеся да OSMF, калі ў вас есць ліцэнзійныя, аўтарскія ці іншыя прававыя пытанні і праблемы. - partners_title: Партнёры notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} пакінуў каментар у вашым дзённіку' @@ -1396,6 +1096,151 @@ be: delete: deleted: Паведамленне выдалена site: + about: + next: Далей + copyright_html: ©OpenStreetMap
      contributors + used_by: '%{name} забяспечвае картаграфічнымі дадзенымі тысячы сайтаў, мабільных + праграм і прыстасаванняў' + lede_text: OpenStreetMap створаны супольнасцю картографаў, якія дадаюць і падтрымліваюць + дадзеныя аб дарогах, сцежках, кафэ, вакзалах і многіх іншых аб'ектах па ўсім + свеце. + local_knowledge_title: Веданне мясцовасці + local_knowledge_html: OpenStreetMap надае асаблівае значэнне веданню мясцовасці. + Удзельнікі выкарыстоўваюць аэрафотаздымкі, GPS-прылады і нізкатэхналагічныя + палявыя карты для праверкі таго, што дадзеныя OSM з'яўляюцца дакладнымі і + актуальнымі. + community_driven_title: Развівіаецца супольнасцю + community_driven_html: |- + Супольнасць OpenStreetMap - разнастайная, зацятая і штодня расце. Сярод нашых удзельнікаў ёсць картографы энтузіясты і прафесіяналы, інжынеры якія падтрымліваюць серверы OSM, спецыялісты, якія з гуманістычных прычын, дапамагаюць у картаграфаванні раёнаў, пацярпелых ад стыхійнага бедства, і многія іншыя. + Каб даведацца больш пра супольнасць, паглядзіце дзённікі карыстальнікаў, + блогі супольнасці і сайт фонду OSM. + open_data_title: Адкрытыя дадзеныя + open_data_html: "OpenStreetMap - гэта адкрытыя дадзеныя: вы можаце свабодна + выкарыстоўваць іх для любых мэтаў да тых часоў, пакуль вы спасылаецеся на + OpenStreetMap і яго ўдзельнікаў. Пры змене дадзеных або выкарыстанні ў якасці + асновы для новых прадуктаў, вы можаце распаўсюджваць вынік толькі па той жа + ліцэнзіі. Глядзіце старонку аўтарскія правы і + \nліцэнзія, каб атрымаць падрабязную інфармацыю." + legal_title: Прававыя пытанні + legal_html: |- + Гэты сайт і многія іншыя звязаныя паслугі фармальна кіруюцца OpenStreetMap Foundation (OSMF) ад імя супольнасці. +
      + Калі ласка, звярніцеся да OSMF, калі ў вас есць ліцэнзійныя, аўтарскія ці іншыя прававыя пытанні і праблемы. + partners_title: Партнёры + copyright: + foreign: + title: Пра гэты пераклад + text: У выпадку супярэчнасці паміж гэтай перакладзенай старонкай і %{english_original_link}, + англійская старонка павінна мець прыярытэт + english_link: англійскім арыгіналам + native: + title: Пра гэтую старонку + text: Вы праглядаеце англійскую версію старонкі пра аўтарскія правы. Вы можаце + вярнуцца да %{native_link} гэтай старонкі ці спыніць чытанне пра аўтарскія + правы і %{mapping_link}. + native_link: беларуская версія + mapping_link: пачаць маляваць карту + legal_babble: + title_html: Аўтарскія правы і ліцэнзія + intro_1_html: |- + OpenStreetMap® - гэта адкрытыя дадзеныя, што распаўсюджваюцца па ліцэнзіі Open Data Commons Open Database License (ODbL) сіламі OpenStreetMap Foundation (OSMF). + intro_2_html: "Вы можаце капіяваць, распаўсюджваць, перадаваць і змяняць нашыя + \ дадзеныя да той пары пакуль Вы спасылаецеся на OpenStreetMap і яе ўдзельнікаў. + Калі Вы змяняеце ці выкарыстоўваеце нашыя дадзеныя, Вы можаце распаўсюджваць + вынікі толькі на ўмовах такой жа ліцэнзіі. Поўны \nтэкст + ліцэнзіі растлумачыць Вам правы і адказнасці." + intro_3_html: "Карты ў графічным выглядзе, а таксама дакументацыя распаўсюджваюцца + на ўмовах Ліцензіі + Creative \nCommons Attribution-ShareAlike 2.0 (CC-BY-SA)." + credit_title_html: Як спасылацца на OpenStreetMap + credit_1_html: |- + Мы патрабуем, каб выкарыстоўвалася спасылка “© OpenStreetMap + contributors”. + credit_2_html: Вы павінны таксама даваць дакладна разумець, што дадзеныя даступныя + на ўмовах Open Database License, а ў выпадку, калі вы карыстаецеся графічнымі + картамі з нашага сервера, на іх распаўсюджваюцца ўмовы CC-BY-SA. Вы можаце + зрабіць гэта падаўшы спасылкі на гэтую + старонку з тлумачэннем лiцэнзiйных патрабаванняў. Ці для выканання + нашых патрабаванняў пры распаўсюдзе дадзеных OSM вы можаце непасрэдна ўказваць + назву ліцэнзіі(й) і спасылкі на яе(іх) тэкст. Пры выкарыстанні носьбітамі, + дзе выкарыстанне гіпертэкставых спасылак немагчыма (напрыклад друкаваныя + матэрыялы), мы прапануем спасылацца непасрэдна на openstreetmap.org (або + пашыраючы "OpenStreetMap" да гэтага поўнага адраса), opendatacommons.org, + а калі трэба, і на creativecommons.org. + credit_3_html: "Для электронных карт, згадка пра крыніцу дадзеных павінна + знаходзіцца ў куце карты. \nНапрыклад:" + attribution_example: + alt: Прыклад таго, як трэба спасылацца на OpenStreetMap на старонцы + title: Прыклад спасылкі + more_title_html: Даведацца больш + more_1_html: |- + Даведайцеся больш аб выкарыстанні нашых дадзеных і аб тым, як паказваць нас як крыніцу паходжання дадзеных на старонцы OSMF Licence і адказах на прававыя пытанні. + more_2_html: Хоць дадзеныя OpenStreetMap з'яўляецца адкрытымі дадзенымі, мы + не ў стане прадастаўляць бясплатны картаграфічны API для іншых распрацоўшчыкаў. + Азнаёмцеся з нашымі Правіламі + выкарыстання API, Правіламі + выкарыстання графічных карт і Правіламі + выкарыстання сэрвісу Nominatim. + contributors_title_html: Нашы ўдзельнікі + contributors_intro_html: 'Нашымі ўдзельнікамі з''яўляюцца тысячы людзей. Мы + таксама ўключаем дадзеныя ад нацыянальных картаграфічных агенцтваў, якія + распаўсюджваюцца на ўмовах адкрытых ліцэнзій, сярод іх:' + contributors_at_html: "Аўстрыя: Утрымлівае звесткі\nгорада + Вены на ўмовах\nCC + BY, зямлі + Форарльберг і \nзямлі Тыроль (на ўмовах CC + BY AT з дадаткамі)." + contributors_ca_html: |- + Канада: Утрымлівае звесткі + GeoBase®, GeoGratis (© Дэпартамента прыродных рэсурсаў + Канады), CanVec (© Дэпартамента прыродных рэсурсаў + Канады), і StatCan (Статыстычнага падраздзялення Канады). + contributors_fi_html: "Фінляндыя: змяшчае дадзеныя з тапаграфічнай + базы дадзеных Нацыянальнай зямельнай службы Фінляндыі і іншыя наборы дадзеных + на ўмовах ліцэнзіі \nNLSFI." + contributors_fr_html: |- + Францыя: Змяшчае дадзеныя атрыманыя ад + Direction Générale des Impôts. + contributors_nl_html: |- + Нідэрланды: Змяшчае дадзеныя © AND, 2007 + (www.and.com) + contributors_nz_html: |- + Новая Зеландыя: Утрымлівае звесткі пра + зямельныя рэсурсы Новай Зэляндыі. Crown Copyright reserved. + contributors_si_html: 'Славенія: змяшчае дадзеныя Геадэзічнай + управы і Міністэрства сельскай + гаспадаркі, лясной гаспадаркі і харчавання (публічная інфармацыя Славеніі).' + contributors_za_html: |- + Паўднёвая Афрыка: Змяшчае дадзеныя з + Chief Directorate: National Geo-Spatial Information, State copyright reserved. + contributors_gb_html: |- + Вялікабрытанія: Утрымлівае звесткі Ordnance + Survey © Crown copyright and database right + 2010-12. + contributors_footer_1_html: Дадатковую інфармацыю аб гэтых і іншых крыніцах, + якія былі выкарыстаныя для паляпшэння карты OpenStreetMap, можна атрымаць + на старонцы Удзельнікі + на Вікі OpenStreetMap. + contributors_footer_2_html: |- + Уключэнне дадзеных у OpenStreetMap не азначае, што пастаўшчыкі пачатковых дадзеных + якім-небудзь чынам падтрымліваюць OpenStreetMap, прадстаўляюць гарантыі, ці + прымаюць на сябе якую-небудзь адказнасць. + infringement_title_html: Парушэнне аўтарскіх правоў + infringement_1_html: Удзельнікі супольнасці OSM павінны заўсёды памятаць пра + тое, што забараняецца дадаваць дадзеныя з любых абароненых аўтарскім правам + крыніц (напрыклад, з Google Maps або з друкаваных карт) без дазволу праваўладальнікаў. + infringement_2_html: Калі вы лічыце, што абаронены аўтарскім правам матэрыял + быў недарэчна дададзены ў базу дадзеных OpenStreetMap або да гэтага сайту, + азнаёмціся з нашым парадкам + выдалення такіх дадзеных або скарыстайцеся непасрэдна нашай старонкай + для онлайн зваротаў. + trademarks_title_html: Таварныя знакі + trademarks_1_html: OpenStreetMap і лагатып з лупаю з'яўляюцца зарэгістраванымі + таварнымі знакамі фонду OpenStreetMap. Калі ў вас есць пытанні аб выкарыстанні + знакаў, калі ласка, адпраўце Вашыя пытанні рабочай + групе па ліцэнзіі. index: js_1: Вы карыстаецеся вандроўнікам без падтрымкі JavaScript. js_2: OpenStreetMap выкарыстоўвае JavaScript для адлюстравання карты на сайце. @@ -1427,9 +1272,121 @@ be: id_not_configured: iD не быў настроены no_iframe_support: Ваш браўзэр не падтрымлівае HTML iframe, якія неабходныя для гэтай функцыі. + export: + title: Экспарт + area_to_export: Экспартаваць мясцовасць + manually_select: Выбраць іншую мясцовасць + format_to_export: Фармат для экспарту + osm_xml_data: OpenStreetMap XML + map_image: Выява карты (паказвае стандартны слой) + embeddable_html: HTML-код + licence: Ліцэнзія + export_details: Дадзеныя праекту OpenStreetMap распаўсюджваюцца па ліцэнзіі + Open Data Commons + Open Database License (ODbL). + too_large: + advice: 'Калі экспарт вышэй не атрымаўся, то разгледзьце магчымасць выкарыстання + адной з наступных крыніц:' + body: Гэтая вобласць занадта вялікая, каб быць экспартаваная як OpenStreetMap + XML-дадзеныя. Калі ласка, павялічце або абярыце меншую вобласць, альбо скарыстайцеся + адной з крыніц, пералічаных ніжэй, для загрузкі вялікага аб'ему дадзеных. + planet: + title: Планета OSM + description: Рэгулярна абнаўляемыя копіі поўнай базы дадзеных OpenStreetMap + overpass: + title: Overpass API + description: Спампаваць абмежаваную гэтым прастакутнікам вобласць з люстэрка + базы дадзеных OpenStreetMap + geofabrik: + title: Загрузкі Geofabrik + description: Рэгулярна абнаўляемыя выбаркі кантынентаў, краін і асобных + гарадоў + metro: + title: Выбаркі Metro + description: Выбаркі дадзеных для буйных гарадоў свету і прылеглых да іх + тэрыторый + other: + title: Іншыя крыніцы + description: Дадатковыя крыніцы, пералічаныя на Вікі OpenStreetMap + options: Настройкі + format: Фармат + scale: Маштаб + max: макс + image_size: Памер выявы + zoom: Павелічэнне + add_marker: Дадаць маркер на карту + latitude: 'Шыр:' + longitude: 'Даў:' + output: Вывад + paste_html: Уставіць HTML-код у вэб-сайт + export_button: Экспарт + fixthemap: + title: Паведаміць аб праблеме / Выправіць карту + how_to_help: + title: Як дапамагчы + join_the_community: + title: Далучыцца да супольнасці + explanation_html: Калі вы заўважылі, недакладнасці ў нашых картаграфічных + дадзеных, напрыклад дарога не пазначана ці ваш адрас, лепшы спосаб гэта + выправіць - далучыцца да супольнасці OpenStreetMap і дадаць або выправіць + дадзеныя самастойна. + add_a_note: + instructions_html: "Проста націсніце або падобны + значок на карце. \nУ выніку на карце з'явіцца маркер, які вы зможаце перамяшчаць + шляхам перацягвання. Дадайце ваша паведамленне, націсніце кнопку Захаваць + і іншыя ўдзельнікі змогуць гэта убачыць." + other_concerns: + title: Іншыя перасцярогі + explanation_html: "Калі вы занепакоеныя тым, як нашы дадзеныя выкарыстоўваюцца + або іх зместам, звярніцеся да нашай \nстаронкі аўтарскіх + правоў для атрымання прававой інфармацыі, або звяжыцеся з адпаведнай + \nрабочай групай + OSMF." + help: + title: Атрыманне дапамогі + introduction: OpenStreetMap мае розныя рэсурсы для атрымання інфармацыі аб праекце, + для задавання пытанняў і атрымання адказаў, для сумеснага абмеркавання і стварэння + дакументацыі па картаграфаванні. + welcome: + url: /welcome + title: Вітаем у OSM + description: Пачніце з гэтага кароткага кіраўніцтва, што ахоплівае асновы + OpenStreetMap. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: Дапаможнік для пачаткоўцаў + description: Супольнасць падтрымлівае дапаможнік для пачаткоўцаў. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Задаць пытанне або знайсці адказы на сайце пытанняў і адказаў + OSM. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Рассылкі + description: Задайце пытанне ці далучыцеся да абмеркавання цікавых тэм на + шырокім коле тэматычных або рэгіянальных спісаў рассылкі. + forums: + url: http://forum.openstreetmap.org/ + title: Форумы + description: Пытанні і абмеркаванні для тых, хто аддае перавагу інтэрфейсу + ў стылі дошкі аб'яў. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Інтэрактыўны чат на розных мовах і на розныя тэмы. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Дапамога кампаніям і арганізацыям у пераходзе на карты OpenStreetMap + і іншыя паслугі. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Паглядзець вікі з падрабязнай дакументацыяй па OSM sidebar: search_results: Вынікі пошуку - close: Зачыніць + close: Закрыць search: search: Пошук get_directions: Пракласці маршрут @@ -1525,6 +1482,59 @@ be: image: Выява alt: Альтэрнатыўны тэкст url: URL-адрас + welcome: + title: Вітаем! + introduction_html: Вітаем у OpenStreetMap, свабоднай і даступнай для рэдагавання + карце свету. Зараз, калі вы ўвайшлі, усё гатова для пачатку рэдагавання. Вось + кароткае кіраўніцтва па найважнейшым рэчам, якія вы павінны ведаць. + whats_on_the_map: + title: Што змяшчае карта + on_html: Карта OpenStreetMap змяшчае аб'екты, якія існуюць у цяперашні + момант, уключаючы мільёны дамоў, дарог і іншых элементаў мясцовасці. + Вы можаце наносіць на карту любыя аб'екты навакольнага свету, якія цікавяць + вас. + off_html: Карта НЕ ўключае суб'ектыўныя дадзеныя накшталт ацэнак, + гістарычных або гіпатэтычных характарыстык і дадзеныя з крыніц, якія абаронены + аўтарскім правам. Калі вы не маеце спецыяльнага дазволу, не капіюйце з папяровых + карт або карт у Інтэрнэце. + basic_terms: + title: Невялікі слоўнік картографа + paragraph_1_html: OpenStreetMap мае свой ​​уласны жаргон. Вось некалькі ключавых + слоў, якія могуць быць карыснымі. + editor_html: Рэдактар - гэта праграма або вэб-сайт, які вы + можаце выкарыстоўваць для рэдагавання карты. + node_html: Пункт (node) - гэта пункт на карце, напрыклад, + рэстаран ці дрэва. + way_html: Лінія (way) - гэта лінія або многавугольнік, напрыклад, + дарогі, рэкі, азёры або будынкі. + tag_html: |- + Тэг (tag) - гэта элемент апісання пункта або лініі, напрыклад, + назва рэстарана або абмежаванне хуткасці на дарозе. + rules: + title: Правілы! + paragraph_1_html: У OpenStreetMap есьць некалькі фармальных правілаў, але + мы чакаем, што ўсе ўдзельнікі будуць супрацоўнічаць і мець зносіны з супольнасцю. + Калі вы плануеце нейкія дзеянні, па-за рэдагаваннем ўручную, калі ласка, + прачытайце і выконвайце рэкамендацыі па Імпарту + і Аўтаматызаваных + Праўках. + questions: + title: Ёсць пытанні? + paragraph_1_html: "OpenStreetMap мае розныя рэсурсы для атрымання інфармацыі + аб праекце, для задавання пытанняў і атрымання адказаў, для сумеснага абмеркавання + і стварэння дакументацыі па картаграфаванні. \nАтрымаеце + дапамогу тут." + start_mapping: Пачаць маляваць карту + add_a_note: + title: Няма часу на рэдагаванне? Дадайце заўвагу! + paragraph_1_html: Калі трэба ўнесці дробнае ўдакладненне, дзеля якога не варта + марнаваць час на рэгістрацыю і вывучэнне правілаў рэдагавання, раім проста + дадаць заўвагу на карту. + paragraph_2_html: "Перайдзіце на прагляд карты і + пстрыкніце значок заўвагі: \n. Гэта дазволіць + дадаць маркер на карту, які вы зможаце перацягнуць мышшу. Дадайце ваша паведамленне, + націсніце \"захаваць\", і іншыя ўдзельнікі ўбачаць яго і, у выпадку неабходнасці, + будуць унесены змены ў карту." trace: visibility: private: Прыватны (ананімны з неспарадкаванымі кропкамі) @@ -1650,7 +1660,7 @@ be: ў вэб-інтэрфейс для прагляду ўмоў удзелу. Вы не абавязаны пагаджацца, але вам варта праглядзець іх. oauth: - oauthorize: + authorize: title: Прадастаўленне доступу да Вашага рахунка request_access: Дастасаванне %{app_name} патрабуе доступ да Вашага рахунка, %{user}. Калі ласка, праверце, ці хочаце Вы, каб дастасаванне мела наступныя @@ -1664,11 +1674,11 @@ be: allow_write_gpx: адаслаць GPS-сляды. allow_write_notes: змяняць заўвагі. grant_access: Прадастаўленне Доступу - oauthorize_success: + authorize_success: title: Запыт на аўтарызацыю дазволены allowed: Вы надалі дастасаванню %{app_name} доступ да вашага рахунка. verification: 'Праверачны код: %{code}.' - oauthorize_failure: + authorize_failure: title: Не ўдалося выканаць запыт аўтарызацыі denied: Вы скасавалі дастасаванню %{app_name} доступ да вашага рахунка. invalid: Токен аўтарызацыі не сапраўдны. @@ -2105,7 +2115,7 @@ be: confirm: Пацвердзіць fail: Немагчыма адмяніць ролю `%{role}' удзельніка `%{name}'. Калі ласка, праверце каб удзельнік і роля былі слушнымі. - user_block: + user_blocks: model: non_moderator_update: Трэба быць мадэратарам, каб стварыць ці зняць блакіроўку. non_moderator_revoke: Трэба быць мадэратарам, каб адклікаць блакіроўку. @@ -2170,20 +2180,6 @@ be: period: one: 1 гадзіна other: '%{count} гадзін' - partial: - show: Паказаць - edit: Рэдагаваць - revoke: Адазваць! - confirm: Вы ўпэўненыя? - display_name: Заблакаваны карыстальнік - creator_name: Стваральнік - reason: Прычына блакіроўкі - status: Статус - revoker_name: Адкліканы - not_revoked: (не адкліканы) - showing_page: Старонка %{page} - next: Далей » - previous: « Назад helper: time_future: Заканчваецца праз %{time}. until_login: Актыўная да моманту ўваходу ўдзельніка ў сістэму. @@ -2215,8 +2211,22 @@ be: revoker: 'Адклікаўшы:' needs_view: Удзельніку трэба ўвайсці ў сістэму, перад тым як гэтая блакіроўка будзе знята. - note: - description: + block: + not_revoked: (не адкліканы) + show: Паказаць + edit: Рэдагаваць + revoke: Адазваць! + blocks: + display_name: Заблакаваны карыстальнік + creator_name: Стваральнік + reason: Прычына блакіроўкі + status: Статус + revoker_name: Адкліканы + showing_page: Старонка %{page} + next: Далей » + previous: « Назад + notes: + comment: opened_at_html: Створана %{when} таму opened_at_by_html: Створана %{when} таму %{user} commented_at_html: Абноўлена %{when} таму @@ -2248,7 +2258,7 @@ be: last_changed: Апошнія змены ago_html: '%{when} таму' javascripts: - close: Зачыніць + close: Закрыць share: title: Падзяліцца cancel: Скасаваць @@ -2397,7 +2407,7 @@ be: show_address: Паказаць адрас query_features: Пошук аб’ектаў centre_map: Цэнтраваць карту - redaction: + redactions: edit: description: Апісанне heading: Праўка рэдакцыі diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 5ebf2d187..ce7e8c039 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -261,35 +261,6 @@ bg: ago: преди %{ago} newer_comments: По-нови коментари older_comments: По-стари коментари - export: - title: Изнасяне - start: - area_to_export: Зона за изнасяне - manually_select: Ръчно избиране на друга област - format_to_export: Формат за изнасяне - osm_xml_data: OpenStreetMap XML данни - embeddable_html: HTML-код за вграждане - licence: Лиценз - too_large: - advice: 'Ако изнасянето по-горе не сработи, моля, използвайте един от следните - източници:' - planet: - title: Planet OSM - overpass: - title: Overpass API - other: - title: Други източници - options: Настройки - format: Формат - scale: Мащаб - max: макс. - image_size: Размер на изображението - zoom: Мащабиране - add_marker: Добавяне на маркер на картата - latitude: 'Геогр. шир:' - longitude: 'Геогр. дълж:' - output: Изход - export_button: Изнасяне geocoder: search: title: @@ -740,62 +711,6 @@ bg: text: Направете дарение learn_more: Научете повече more: Още - license_page: - foreign: - title: За този превод - text: В случай на противоречие между тази преведена страница и %{english_original_link}, - страницата на английски ще е с приоритет - english_link: Оригиналът на английски - native: - title: За тази страница - mapping_link: картографиране - legal_babble: - title_html: Авторски права и лиценз - contributors_fr_html: |- - Франция: Съдържа данни от - Главната данъчна дирекция. - infringement_title_html: Нарушаване на авторските права - trademarks_title_html: Търговски марки - trademarks_1_html: OpenStreetMap и логото с лупата са регистрирани търговски - марки на фондация OpenStreetMap. Ако имате въпроси относно използването на - тези знаци, моля изпратете Вашите въпроси на работната - група по лиценза. - welcome_page: - title: Добре дошли! - rules: - title: Правилата! - questions: - title: Въпроси? - add_a_note: - title: Нямате време за редактиране? Добавете бележка! - fixthemap: - how_to_help: - title: Как да помогна - join_the_community: - title: Присъединете са към общността - help_page: - welcome: - title: Добре дошли в OSM - beginners_guide: - title: Наръчник за начинаещи - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - mailing_lists: - title: Пощенски списъци - forums: - title: Форуми - irc: - title: IRC - switch2osm: - title: switch2osm - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: Следващ - legal_title: Правни въпроси - partners_title: Партньори notifier: diary_comment_notification: hi: Здравейте %{to_user}, @@ -893,10 +808,86 @@ bg: delete: deleted: Съобщението беше изтрито site: + about: + next: Следващ + legal_title: Правни въпроси + partners_title: Партньори + copyright: + foreign: + title: За този превод + text: В случай на противоречие между тази преведена страница и %{english_original_link}, + страницата на английски ще е с приоритет + english_link: Оригиналът на английски + native: + title: За тази страница + mapping_link: картографиране + legal_babble: + title_html: Авторски права и лиценз + contributors_fr_html: |- + Франция: Съдържа данни от + Главната данъчна дирекция. + infringement_title_html: Нарушаване на авторските права + trademarks_title_html: Търговски марки + trademarks_1_html: OpenStreetMap и логото с лупата са регистрирани търговски + марки на фондация OpenStreetMap. Ако имате въпроси относно използването + на тези знаци, моля изпратете Вашите въпроси на работната + група по лиценза. index: permalink: Постоянна връзка shortlink: Къса връзка createnote: Добавяне на бележка + export: + title: Изнасяне + area_to_export: Зона за изнасяне + manually_select: Ръчно избиране на друга област + format_to_export: Формат за изнасяне + osm_xml_data: OpenStreetMap XML данни + embeddable_html: HTML-код за вграждане + licence: Лиценз + too_large: + advice: 'Ако изнасянето по-горе не сработи, моля, използвайте един от следните + източници:' + planet: + title: Planet OSM + overpass: + title: Overpass API + other: + title: Други източници + options: Настройки + format: Формат + scale: Мащаб + max: макс. + image_size: Размер на изображението + zoom: Мащабиране + add_marker: Добавяне на маркер на картата + latitude: 'Геогр. шир:' + longitude: 'Геогр. дълж:' + output: Изход + export_button: Изнасяне + fixthemap: + how_to_help: + title: Как да помогна + join_the_community: + title: Присъединете са към общността + help: + welcome: + title: Добре дошли в OSM + beginners_guide: + title: Наръчник за начинаещи + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + mailing_lists: + title: Пощенски списъци + forums: + title: Форуми + irc: + title: IRC + switch2osm: + title: switch2osm + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: search_results: Резултати от търсенето close: Затваряне @@ -984,6 +975,14 @@ bg: image: Изображение alt: Алтернативен текст url: Адрес + welcome: + title: Добре дошли! + rules: + title: Правилата! + questions: + title: Въпроси? + add_a_note: + title: Нямате време за редактиране? Добавете бележка! trace: edit: filename: 'Име на файл:' @@ -1043,7 +1042,7 @@ bg: description: description_without_count: GPX-файл от %{user} oauth: - oauthorize: + authorize: allow_write_api: промени картата. oauth_clients: new: @@ -1215,18 +1214,19 @@ bg: confirm: Потвърждаване revoke: confirm: Потвърждаване - user_block: - partial: + user_blocks: + show: + ago: преди %{time} + edit: Редактиране + block: edit: Редактиране + blocks: display_name: Блокиран потребител creator_name: Създател reason: Причина за блокиране status: Статут showing_page: Страница %{page} - show: - ago: преди %{time} - edit: Редактиране - note: + notes: rss: closed: закрита бележка (около %{place}) entry: diff --git a/config/locales/bn.yml b/config/locales/bn.yml index f6beac88e..9a7388b45 100644 --- a/config/locales/bn.yml +++ b/config/locales/bn.yml @@ -244,7 +244,7 @@ bn: list: title: পরিবর্তনসমূহ title_user: '%{user} দ্বারা পরিবর্তন ধার্য' - title_friend: আপনার বন্ধুদের পরিবর্তনসেট + title_friend: আমার বন্ধুদের দ্বারা পরিবর্তনসেট title_nearby: আপনার কাছকাছি ব্যবহারকারীর পরিবর্তনসেট empty: কোনো পরিবর্তনসেট পাওয়া যায়নি। empty_area: এই এলাকায় কোনো পরিবর্তনসেট নেই। @@ -340,43 +340,6 @@ bn: ago: '%{ago} আগে' newer_comments: নতুন মন্তব্য older_comments: পুরাতন মন্তব্য - export: - title: রপ্তানি - start: - area_to_export: রপ্তানির এলাকা - manually_select: ম্যানুয়ালি একটি ভিন্ন জায়গা নির্বাচন করুন - format_to_export: রপ্তানির বিন্যাস - osm_xml_data: ওপেনস্ট্রীটম্যাপ এক্সএমএল উপাত্ত - map_image: মানচিত্র ছবি (মান্য স্তর দেখাও) - embeddable_html: অভ্যন্তরীণ HTML - licence: লাইসেন্স - export_details: ওপেনস্ট্রীটম্যাপের সমস্ত উপাত্ত ওপেন - ডাটা কমন্স ওপেন ডাটাবেস লাইসেন্সের (ODbL) আওতায় প্রকাশিত। - too_large: - advice: 'যদি উপরের রপ্তানি ব্যর্থ হয়, দয়া করে নীচে তালিকাভুক্ত উৎসের কোন - একটি ব্যবহারের জন্য বিবেচনা করুন:' - planet: - title: ওএসএম জগৎ - description: সম্পূর্ণ ওপেনস্ট্রীটম্যাপ ডাটাবেসের নিয়মিত হালনাগাদের অনুলিপি - overpass: - title: ওভারপাস API - geofabrik: - title: জিওফ্যাব্রিক ডাউনলোড - other: - title: অন্যান্য উৎস - description: ওপেনস্ট্রীটম্যাপ উইকিতে তালিকাভুক্ত অতিরিক্ত সূত্র - options: বিকল্প - format: বিন্যাস - scale: স্কেল - max: সর্বোচ্চ - image_size: চিত্রের আকার - zoom: জুম - add_marker: মানচিত্রে একটি চিহ্নিতকারী যোগ করুন - latitude: 'অক্ষাংশ:' - longitude: 'দ্রাঘিমাংশ:' - output: আউটপুট - paste_html: তথ্যক্ষেত্রে HTML নিহিত করতে প্রতিলেপন করুন - export_button: রপ্তানি geocoder: search: title: @@ -873,81 +836,6 @@ bn: text: দান করুন learn_more: আরও পড়ুন more: আরও - license_page: - foreign: - title: এই অনুবাদ সম্পর্কে - english_link: মূল ইংরেজি - native: - title: এই পাতা সম্পর্কে - text: আপনি মেধাস্বত্ব পৃষ্ঠার ইংরেজি সংস্করণ দেখছেন। আপনি এই পৃষ্ঠার %{native_link}-এ - ফিরে যেতে পারেন অথবা আপনি মেধাস্বত্ব এবং %{mapping_link} সম্পর্কে পড়া বন্ধ - করতে পারেন। - native_link: THIS_LANGUAGE_NAME_HERE সংস্করণ - mapping_link: মানচিত্রকরণ শুরু করুন - legal_babble: - title_html: কপিরাইট ও লাইসেন্স - intro_1_html: |- - ওপেনস্ট্রীটম্যাপ® একটি মুক্ত উপাত্ত যা ওপেনস্ট্রীটম্যাপ ফাউন্ডেশন কর্তৃক (OSMF) মুক্ত উপাত্ত কমন্স মুক্ত তথ্যভিত লাইসেন্সের (ODbL) আওতায় লাইসেন্সকৃত। - attribution_example: - title: আরোপণ উদাহরণ - more_title_html: আরও খুঁজা হচ্ছে - more_1_html: |- - আমাদের উপাত্ত ব্যবহার, ও আমাদেরকে কৃতিত্ব প্রদানের পদ্ধতি সম্পর্কে জানতে OSMF লাইসেন্সের পাতা দেখুন। - contributors_title_html: আমাদের অবদানকারীগণ - infringement_title_html: কপিরাইট লঙ্ঘন - trademarks_title_html: ট্রেডমার্ক - welcome_page: - title: স্বাগতম! - whats_on_the_map: - title: মানচিত্রে কী আছে - basic_terms: - title: মানচিত্রকরণের জন্য মৌলিক শর্তাবলী - rules: - title: নিয়মাবলী! - questions: - title: কোনও প্রশ্ন? - start_mapping: মানচিত্রকরণ শুরু করুন - add_a_note: - title: সম্পাদনার সময় নেই? একটি টীকা যোগ করুন! - fixthemap: - title: সমস্যা জানান / মানচিত্র ঠিক করুন - how_to_help: - title: কিভাবে সাহায্য করবেন - join_the_community: - title: সম্প্রদায়ে যোগ দিন - other_concerns: - title: অন্যান্য উদ্বেগ - help_page: - title: সাহায্য পান - welcome: - url: /স্বাগতম - title: ওএসএম-এ স্বাগতম - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: আরম্ভকারী সহায়িকা - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - mailing_lists: - title: মেইলিং তালিকা - forums: - title: ফোরাম - irc: - title: আইআরসি - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: পরবর্তী - copyright_html: ©à¦“পেনস্ট্রীটম্যাপ
      অবদানকারী - local_knowledge_title: স্থানীয় অভিজ্ঞতা - community_driven_title: সম্প্রদায় চালক - open_data_title: মুক্ত তথ্য - legal_title: আইনগত - partners_title: অংশীদার notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} একটি দিনলিপির ভুক্তিতে মন্তব্য করেছেন' @@ -1045,6 +933,40 @@ bn: delete: deleted: বার্তা মোছা হয়েছে site: + about: + next: পরবর্তী + copyright_html: ©à¦“পেনস্ট্রীটম্যাপ
      অবদানকারী + local_knowledge_title: স্থানীয় অভিজ্ঞতা + community_driven_title: সম্প্রদায় চালক + open_data_title: মুক্ত তথ্য + legal_title: আইনগত + partners_title: অংশীদার + copyright: + foreign: + title: এই অনুবাদ সম্পর্কে + english_link: মূল ইংরেজি + native: + title: এই পাতা সম্পর্কে + text: আপনি মেধাস্বত্ব পৃষ্ঠার ইংরেজি সংস্করণ দেখছেন। আপনি এই পৃষ্ঠার %{native_link}-এ + ফিরে যেতে পারেন অথবা আপনি মেধাস্বত্ব এবং %{mapping_link} সম্পর্কে পড়া বন্ধ + করতে পারেন। + native_link: THIS_LANGUAGE_NAME_HERE সংস্করণ + mapping_link: মানচিত্রকরণ শুরু করুন + legal_babble: + title_html: কপিরাইট ও লাইসেন্স + intro_1_html: |- + ওপেনস্ট্রীটম্যাপ® একটি মুক্ত উপাত্ত যা ওপেনস্ট্রীটম্যাপ ফাউন্ডেশন কর্তৃক (OSMF) মুক্ত উপাত্ত কমন্স মুক্ত তথ্যভিত লাইসেন্সের (ODbL) আওতায় লাইসেন্সকৃত। + attribution_example: + title: আরোপণ উদাহরণ + more_title_html: আরও খুঁজা হচ্ছে + more_1_html: |- + আমাদের উপাত্ত ব্যবহার, ও আমাদেরকে কৃতিত্ব প্রদানের পদ্ধতি সম্পর্কে জানতে OSMF লাইসেন্সের পাতা দেখুন। + contributors_title_html: আমাদের অবদানকারীগণ + infringement_title_html: কপিরাইট লঙ্ঘন + trademarks_title_html: ট্রেডমার্ক index: js_1: আপনি এমন একটি ব্রাউজার ব্যবহার করছেন যা জাভাস্ক্রিপ্ট সমর্থন করে না অথবা আপনি জাভাস্ক্রিপ্ট অক্ষম করেছেন। @@ -1053,6 +975,70 @@ bn: createnote: একটি দ্রষ্টব্য যোগ করুন edit: user_page_link: ব্যবহারকারীর পাতা + export: + title: রপ্তানি + area_to_export: রপ্তানির এলাকা + manually_select: ম্যানুয়ালি একটি ভিন্ন জায়গা নির্বাচন করুন + format_to_export: রপ্তানির বিন্যাস + osm_xml_data: ওপেনস্ট্রীটম্যাপ এক্সএমএল উপাত্ত + map_image: মানচিত্র ছবি (মান্য স্তর দেখাও) + embeddable_html: অভ্যন্তরীণ HTML + licence: লাইসেন্স + export_details: ওপেনস্ট্রীটম্যাপের সমস্ত উপাত্ত ওপেন + ডাটা কমন্স ওপেন ডাটাবেস লাইসেন্সের (ODbL) আওতায় প্রকাশিত। + too_large: + advice: 'যদি উপরের রপ্তানি ব্যর্থ হয়, দয়া করে নীচে তালিকাভুক্ত উৎসের কোন + একটি ব্যবহারের জন্য বিবেচনা করুন:' + planet: + title: ওএসএম জগৎ + description: সম্পূর্ণ ওপেনস্ট্রীটম্যাপ ডাটাবেসের নিয়মিত হালনাগাদের অনুলিপি + overpass: + title: ওভারপাস API + geofabrik: + title: জিওফ্যাব্রিক ডাউনলোড + other: + title: অন্যান্য উৎস + description: ওপেনস্ট্রীটম্যাপ উইকিতে তালিকাভুক্ত অতিরিক্ত সূত্র + options: বিকল্প + format: বিন্যাস + scale: স্কেল + max: সর্বোচ্চ + image_size: চিত্রের আকার + zoom: জুম + add_marker: মানচিত্রে একটি চিহ্নিতকারী যোগ করুন + latitude: 'অক্ষাংশ:' + longitude: 'দ্রাঘিমাংশ:' + output: আউটপুট + paste_html: তথ্যক্ষেত্রে HTML নিহিত করতে প্রতিলেপন করুন + export_button: রপ্তানি + fixthemap: + title: সমস্যা জানান / মানচিত্র ঠিক করুন + how_to_help: + title: কিভাবে সাহায্য করবেন + join_the_community: + title: সম্প্রদায়ে যোগ দিন + other_concerns: + title: অন্যান্য উদ্বেগ + help: + title: সাহায্য পান + welcome: + url: /স্বাগতম + title: ওএসএম-এ স্বাগতম + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: আরম্ভকারী সহায়িকা + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + mailing_lists: + title: মেইলিং তালিকা + forums: + title: ফোরাম + irc: + title: আইআরসি + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: search_results: অনুসন্ধানের ফলাফল close: বন্ধ @@ -1116,6 +1102,19 @@ bn: link: লিঙ্ক image: চিত্র url: ইউআরএল + welcome: + title: স্বাগতম! + whats_on_the_map: + title: মানচিত্রে কী আছে + basic_terms: + title: মানচিত্রকরণের জন্য মৌলিক শর্তাবলী + rules: + title: নিয়মাবলী! + questions: + title: কোনও প্রশ্ন? + start_mapping: মানচিত্রকরণ শুরু করুন + add_a_note: + title: সম্পাদনার সময় নেই? একটি টীকা যোগ করুন! trace: create: upload_trace: জিপিএস অনুসরণ আপলোড @@ -1255,6 +1254,7 @@ bn: email address: 'ই-মেইল ঠিকানা:' description: বিবরণ settings_link_text: সেটিংস + my friends: আমার বন্ধুগণ block_history: সক্রিয় বাধাসমূহ moderator_history: প্রদত্ত বাধাগুলি comments: মন্তব্যসমূহ @@ -1315,13 +1315,7 @@ bn: confirm: নিশ্চিত করুন fail: '`%{name}'' ব্যবহারকারীর `%{role}'' দায়িত্বটি বাতিল অযোগ্য। দয়া করে দেখুন যে এই ব্যবহারকারী এবং দায়িত্বটি সঠিক কিনা।' - user_block: - partial: - edit: সম্পাদনা - confirm: আপনি কি নিশ্চিত? - display_name: বাধাপ্রাপ্ত ব্যবহারকারী - next: পরবর্তী » - previous: « পূর্ববর্তী + user_blocks: show: created: তৈরি হয়েছে ago: '%{time} আগে' @@ -1329,7 +1323,13 @@ bn: show: দেখাও edit: সম্পাদনা confirm: আপনি কি নিশ্চিত? - note: + block: + edit: সম্পাদনা + blocks: + display_name: বাধাপ্রাপ্ত ব্যবহারকারী + next: পরবর্তী » + previous: « পূর্ববর্তী + notes: entry: comment: মন্তব্য javascripts: @@ -1386,7 +1386,7 @@ bn: context: add_note: এখানে একটি টীকা যোগ করুন show_address: ঠিকানা দেখান - redaction: + redactions: edit: description: বিবরণ heading: সম্পাদনা সম্পাদন করুন diff --git a/config/locales/br.yml b/config/locales/br.yml index 11dab5919..d8209a05a 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -339,53 +339,6 @@ br: ago: '%{ago} zo' newer_comments: Evezhiadennoù nevesoo'h older_comments: Evezhiadennoù koshañ - export: - title: Ezporzhiañ - start: - area_to_export: Takad da ezporzhiañ - manually_select: Diuzañ un takad disheñvel gant an dorn - format_to_export: Furmad da ezporzhiañ - osm_xml_data: Roadennoù XML OpenStreetMap - map_image: Skeudenn gartenn (diskouez ur gwiskad boutin) - embeddable_html: HTML enkorfadus - licence: Aotre-implijout - export_details: Roadennoù OpenStreetMap zo dindan an aotre-implijout Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Ma c''hwit an ezporzhiadur amañ a-us, implijit unan eus an elfennoù - amañ dindan :' - body: 'Re vras eo an takad-mañ evit bezañ ezporzhiet evel roadennoù XML OpenStreetMap. - Zoumit, mar plij, pe diuzit un takad bihanoc''h pe immplijit unan eus an - tarzhioù-mañ evit pellgargañ roadennoù a-yoc''h :' - planet: - title: Planedenn OSM - description: Eilennoù hizivaet ingal eus diaz roadennoù klok OpenStreetMap - overpass: - title: API Treuzell - description: Pellgargañ ar voest engronnus-mañ diwar ur melezour eus diaz - roadennoù OpenStreetMap - geofabrik: - title: Pellgargañ Geofabrik - description: Eztennadennoù hizivaet ingal a genvandirioù, a broioù , hag - a gêrioù diuzet - metro: - title: Eztennadennoù Metro - description: Eztennadennoù evit brasañ kêrioù ar bed hag o ardemezioù - other: - title: Tarzhioù all - description: Mammennoù all a gaver o roll er wiki OpenStreetMap - options: Dibarzhioù - format: Furmad - scale: Skeuliad - max: d'ar muiañ - image_size: Ment ar skeudenn - zoom: Zoum - add_marker: Ouzhpennañ ur merker d'ar gartenn - latitude: 'Led. :' - longitude: 'Hed. :' - output: Er-maez - paste_html: Pegañ HTML evit bezañ enkorfet en ul lec'hienn web - export_button: Ezporzhiañ geocoder: search: title: @@ -1028,260 +981,6 @@ br: text: Ober un donezon learn_more: Gouzout hiroc'h more: Muioc'h - license_page: - foreign: - title: Diwar-benn an droidigezh-mañ - text: Ma vez digendalc'h etre ar bajenn troet-mañ hag %{english_original_link} - e teuio ar bajenn saoznek da gentañ - english_link: orin e Saozneg - native: - title: Diwar-benn ar bajenn-mañ - text: Emaoc'h o lenn stumm saoznek ar bajenn copyright. Gallout a rit distreiñ - da %{native_link} ar bajenn-mañ pe paouez da lenn ar bajenn-mañ ha %{mapping_link}. - native_link: Stumm brezhonek - mapping_link: kregiñ da gemer perzh - legal_babble: - title_html: Copyright hag aotre-implijout - intro_1_html: |- - OpenStreetMap ® zo dindan un aotre-implijout digor, href "htpps : //Open Data - Commons Open Database License (ODbL)gant OpenStreetMap Foundation (OSMF). - intro_2_html: "Dieub oc'h da eilañ, da skignañ, da gas ha da azasaat hor c'hartennoù - hag hor roadennoù, gant ma root kred da OpenStreetMap ha d'e genlabourerien. - Ma kemmit pe ma implijit hor c'hartennoù pe hor roadennoù e labourioù all,ne - c'hallit ket skignañ ar re-se dindan un aotre-implijout all. En \nlegal\ncode - e kavot munudoù ho kwirioù hag ho teverioù." - intro_3_html: "Emañ tammoù hor c'hartennoù hag hon teulioù dindan an aotre-implijout - Creative \nCommons - Attribution-ShareAlike 2.0 license (CC-BY-SA)." - credit_title_html: Penaos reiñ kred da OpenStreetMap - credit_1_html: Goulenn a reomp diganeoc'h lakaat en ho kred ar meneg “© - kenlabourerien OpenStreetMap”. - credit_2_html: |- - Pa vez posupl e tle OpenStreetMap bezañ ur gourliamm war-du http://www.openstreetmap.org/ - ha CC BY-SA war-du http://creativecommons.org/licenses/by-sa/2.0/. - Ma'z implijit ur skor ma ne c'haller ket krouiñ liammoù (da skouer : - un destenn moullet), ez aliomp ac'hanoc'h da gas ho lennerien da - www.openstreetmap.org (marteze en ur astenn - ‘OpenStreetMap’ ar chomlec'h klok) ha da - www.creativecommons.org. - credit_3_html: |- - Evit ur gartenn elektronek a c'haller merdeiñ enni e tlefe ar c'hred dont war wel e korn ar gartenn. - Da skouer : - attribution_example: - alt: Skouer eus penaos deverkañ OpenStreetMap war ur bajenn web - title: Skouer deverkadur - more_title_html: Titouroù ouzhpenn - more_1_html: Ma fell deoc'h kaout muioc'h a ditouroù diwar-benn adimplij hor - roadennoù, lennit Licence OSMF - Licence page hag ar gumuniezh reolennoù - evit implijout an API, \n Sellit ouzh hor reolennoù evit - implijout an teolennoù, ha\nreolennoù - evit implijout Nominatin" - contributors_title_html: Hor c'henlabourerien - contributors_intro_html: 'Miliadoù a hiniennoù a labour ganimp. Ebarzhiñ a reomp - ivez roadennoù digor eus ajañsoù kartennañ hag eus mamennoù all, hag en o - zouez :' - contributors_at_html: |- - Aostria : Ennañ roadennoù eus - Stadt Wien (dindan - CC BY. - CC BY), - Land Vorarlberg ha - Land Tirol (dindan CC-BY AT gant enkemmadoù). - contributors_ca_html: |- - Kanada : Ennañ roadennoù eus - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), ha StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: |- - Finland: Ennañ ez eus roadennoù eus diaz roadennoù Ensellerezh Broadel Tiriad hag holladoù roadennoù all, dindan an - aotre-implij NLSFI. - contributors_fr_html: 'Frañs : Ennañ roadennoù eus Renerezh - Hollek an Tailhoù.' - contributors_nl_html: |- - Netherlands : Contains © AND data, 2007 - (www.and.com) - contributors_nz_html: |- - Zeland-Nevez : Ennañ roadennoù eus - Land Information New Zealand. Crown Copyright reserved. - contributors_si_html: |- - Slovenia: zo enni roadennoù eus Aotrouniezh steuñvidigezh ha Kartografiezh hag eus Ministrerezh al Labour-douar, ar C'hoadeier hag ar Boued - (titouroù foran eus Slovenia) - contributors_za_html: |- - Afrika ar Su : Ennañ roadennoù eus - Chief Directorate: - National Geo-Spatial Information, State copyright reserved. - contributors_gb_html: |- - Rouantelezh-Unanet : Ennañ roadennoù eus Ordnance - Survey data © Crown copyright and database right 2010-12. - contributors_footer_1_html: |- - ↓Evit muioc'h a vunudoù diwar-benn ar re-se, hag ar mammennoù all a zo bet implijet da sikour da wellaat OpenStreetMap, sellit ouzh ar Bajenn Skoazellerien e Wiki OpenStreetMap. - contributors_footer_2_html: Enlakaat roadennoù e OpenStreetMap ne empleg ket - ez aprou ar bourchaserien orin a endalc'had OpenStreetMap, na ne bourchasont, - na ne waratomp pe na ne zegemeront ne vern pe atebegezh e vefe. - infringement_title_html: Terriñ ar gwir-eilañ - infringement_1_html: |- - Degas a reomp da soñj da genlabourerien OSM ne zleont morse lakaat roadennoù a zeu - eus mammennoù dindan wirioù (da sk. : Google Maps pe kartennoù moullet) hep aotre - ezpleg ar re zo ar gwirioù-aozer ganto. - infringement_2_html: ma kredit ez eus bet ouzhpennet danvez dindan aotre-implijout - e gaou da diaz roadennoù OpenStreetMat pe d'al lec'hienn-mañ, roit an dra-se - da c'houzout d'hon argerzh - dizober, mar plij, pe skrivit war-eeun war hor furmskrid - enlinenn. - trademarks_title_html: Merkoù - trademarks_1_html: Openstreet, al logo brasaer ha State of the Map zo merkoù - marilhet gant OpenStreetMap Foundation. M'ho pez goulennoù da sevel diwar-benn - implij ar merkoù-se, sellit ouzh Trademark - Policy, mar plij. - welcome_page: - title: Deuet-mat oc'h ! - introduction_html: Degemer mat en OpenStreetMap, ar gartenn digoust eus ar bed - hag a c'haller aozañ. Kevreet oc'h bremañ ha prest oc'h da gregiñ da gartennaouiñ. - Setu amañ un nebeud displegadennoù diwar-benn an traoù pouezusañ da c'houzout. - whats_on_the_map: - title: Petra zo war ar gartenn - on_html: |- - OpenStreetMap zo ul lec'h evit kartennaouiñ traoù gwirion hag a vremañ war un dro - - - Ennañ ez eus milionoù a savadurioù, a hentoù, hag a vunudoù all diwar-benn lec'hioù. Gallout a rit kartennaouiñ forzh peseurt tra eus ar bed gwirion hag a zedenn ac'hanoc'h. - off_html: Ar pezh na gaver ket avat eo ar roadennoù evit notennoù roet - gant an dud, elfennoù istorel pe martezeüs, hag ar roadennoù a zo dindan gwirioù - eilañ. Nemet hag un aotre ispisial ho pefe, na eilit ket kartennoù enlinenn - pe war baper. - basic_terms: - title: Geriaoueg diazez ar c'hartennaouiñ - paragraph_1_html: E luc'haj dezhañ e-unan en deus OpenStreetMap. Setu amañ un - nebeud gerioù-alc'hwez a c'hallo talvezout deoc'h. - editor_html: Un aozer zo ur programm pe ul lec'hienn web a - c'hallit implijout da aozañ ar gartenn. - node_html: Ur skoulm zo ur poent war ar gartenn, evel ur preti - pe ur wezenn. - way_html: Ur roud zo ul linenn pe ur gorread, evel un hent, - ur wazh-dour, pe ur savadur. - tag_html: Un dikedenn zo ur roadenn diwar-benn ur skoulm pe - un hent, evel anv ur preti pe an tizh bevennet war un hent. - rules: - title: Reolennoù ! - paragraph_1_html: OpenStreetMap en deus un nebeud reolennoù furmel, met gortoz - a reomp ma vo kemeret perzh gant an holl berzhidi ha ma vo darempredoù gant - ar gumuniezh. Ma vezit e-sell d'ober traoù all estreget ober cheñchamantoù - gant an dorn, lennit ha heuilhit ar sturiadoù, mar plij, e An - ezporzhiadurioù ha - Ar c'hemmoù emgefre>/a>. - questions: - title: Traoù da c'houlenn ? - paragraph_1_html: Ezhomm ho peus sikour evit kartennaouiñ, pe n'eo ket sklaer - penaos implijout ? Tapit respontoù d'ho koulennoù el lec'hienn - web sikour. - start_mapping: Kregiñ da gartennaouiñ - add_a_note: - title: N'ho peus ket amzer da aozañ ? Ouzhpennit un notenn ! - paragraph_1_html: Ma fell deoc'h ober ur reizhadennig hepken ha ma n'ho peus - ket amzer da gevreañ ha da zeskiñ penaos aozañ, ez eo aezet lakaat un notenn. - paragraph_2_html: |- - Kit d'ar gartenn ha klikit war an arlun notenn : - . Evel-se e vo ouzhpennet ur merker d'ar gartenn a c'halloc'h riklañ. Skrivit ho kemennadenn, ha neuze klikit war enrollañ, ha gallout a ray ar gartennaouerien klask gouzout hiroc'h. - fixthemap: - title: ' Diskouez ez eus ur gudenn / Reizhañ ar gartenn' - how_to_help: - title: Penaos sikour - join_the_community: - title: Mont er gumuniezh-mañ - explanation_html: M'ho peus merzet ez eus ur gudenn gant roadennoù hor c'hartennoù, - da skouer un hent diank pe ho chomlec'h, an doare d'ober gwellañ eo mont - d'ar gumuniezh OpenStreetMap hag ouzhpennañ pe dresañ ar roadennoù hoc'h-unan. - add_a_note: - instructions_html: |- - Klikit war pe war ar memes arlun war ar gartenn. - Evel-se e vo ouzhpennet ur merker d'ar gartenn, ha gallout a reoc'h riklañ anezhañ. Ouzhpennit ho kemennadenn, neuze klikit war enrollañ, ha studiet e vo gant ar gartennaouerien all. - other_concerns: - title: Prederioù all - explanation_html: Ma'z oc'h chalet gant an doare ma vez implijet hor roadennoù - pe gant an endalc'hadoù, sellit ouzh hor pajenn gwir-eilañ - evit muioc'h a ditouroù lezennel, pe kit e darempred gant ar strollad-labour - OSMF a zere. - help_page: - title: Tapout sikour - introduction: OpenStreetMap zo gantañ meur a zoare da c'houzout hiroc'h diwar-benn - ar raktres, d'ober goulennoù ha da respont da c'houlennoù, ha da gendivizout - ha da deuliaduriñ sujedoù ar c'hartennoù. - welcome: - url: /welcome - title: Deuet-mat oc'h en OSM - description: Krogit gant ar sturlevr-mañ evit deskiñ diazezoù OpenStreetMap - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/FR:Sturlevr an deraouidi - title: Sturlevr evit deraouidi - description: Sturlevr evit an deraouidi dalc'het gant ar gumuniezh - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Ober ur goulenn pe klask respontoù e lec'hienn goulennoù-respontoù - OSM - mailing_lists: - title: Roll skignañ - description: Sevel ur goulenn pe divizout diwar-benn goulennoù dedennus war - un niver bras a demoù pe diwar-benn rolloù skignañ rannvroel. - forums: - title: Foromoù - description: Goulennoù ha divizoù evit ar re a gav gwelloc'h un etrefas e stil - un daolenn skritellañ - irc: - title: IRC - description: Flap etreoberiat e meur a yezh disheñvel ha diwar-benn danvezioù - a bep seurt. - switch2osm: - title: switch2osm - description: Skoazell evit an embregerezhioù hag an aozadurioù trec'haoliñ e - OpenStreetMap, hervez ar c'hartennoù hag ar servijoù all. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Merdeañ er wiki evit gouzout traoù resis diwar-benn OSM. - about_page: - next: War-lerc'h - copyright_html: ©OpenStreetMap
      kenlabourerien - used_by: '%{name} a bourchas kartennoù da viliadoù a lec''hiennoù web, da arloadoù - hezoug ha da vekanikoù' - lede_text: Savet eo OpenStreetMap gant ur gumuniezh gartennerien a-youl vat a - genlabour hag a gempenn roadennoù diwar-benn hentoù, gwenodennoù, kafedioù, - tiez-gar, ha muioc'h c'hoazh, er bed a-bezh. - local_knowledge_title: Gouiziegezh lec'hel - local_knowledge_html: OpenStreetMap a laka ar pouez war an anaoudegezh eus an - dachenn. Implijout a ra ar genlabourerien skeudennoù tapet diwar nij, mekanikoù - GPS ha kartennoù klasel abalamour da wiriañ ez eo reizh ha hizivaet OSM. - community_driven_title: Renet gant ar gumuniezh - community_driven_html: |- - Liesseurt hag entanet eo kumuniezh OpenStreetMap. O kreskiñ emañ bemdez. E-mesk hor c'henlabourerien ez eus kartennourien entanet, tud a-vicher eus ar GIS, ijinourien hag a laka servijerien OSM da vont en-dro, denegourien hag a sav kartennoù eus an takadoù gwastet gant gwallreuzioù ha kalz re all. - Evit gouzout hiroc'h diwar-benn ar gumuniezh, sellit ouzh blogoù OpenStreetMap, deizlevrioù an implijerien,blogoù ar gumuniezh, hag lec'hienn web open data: gallout a rit implijout anezhañ - evit forzh pseeurt pal keit ha ma roit kred da OpenStreetMap ha d''ar re a labour - warnañ. Ma cheñchit ar roadennoù pe ma harpit warno e doareoù zo, e c''hallit - skignañ an disoc''h dindan ar memes aotre-implij hepken. Sellit ouzh Aotre-eilañ - ha pajenn an aotre-implij evit gouzout hiroc''h.' - legal_title: Lezennel - legal_html: "Al lec'hienn-mañ hag e-leizh a servijoù all kar zo korvoet ent furmel - gant an Diazezaddur OpenStreetMap - (OSMF) \nen anv ar gumuniezh.\nEvit implijout an holl servijoù kinniget gant - an OSMF e ranker doujañ d'hor \n - Politikerezh war an implijoù degemeret ha d'hor Politikerzh - prevezded.\n
      \nKit contacter - l'OSMF e darempred gant an OSMF, mar plij, m'ho peus goulennoù da sevel - diwar-benn an aotreoù-implijout, ar gwirioù oberour pe diwar-benn goulennoù - lezennel all.\n
      \nOpenStreetMap, al logo gant ar brasaer ha ''State of the - Map'' zomerkoù - marilhet OSMF." - partners_title: Kevelerien notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} en deus lezet un addispleg war hoc''h enmoned @@ -1482,6 +1181,156 @@ br: delete: deleted: Kemennadenn dilamet site: + about: + next: War-lerc'h + copyright_html: ©OpenStreetMap
      kenlabourerien + used_by: '%{name} a bourchas kartennoù da viliadoù a lec''hiennoù web, da arloadoù + hezoug ha da vekanikoù' + lede_text: Savet eo OpenStreetMap gant ur gumuniezh gartennerien a-youl vat + a genlabour hag a gempenn roadennoù diwar-benn hentoù, gwenodennoù, kafedioù, + tiez-gar, ha muioc'h c'hoazh, er bed a-bezh. + local_knowledge_title: Gouiziegezh lec'hel + local_knowledge_html: OpenStreetMap a laka ar pouez war an anaoudegezh eus an + dachenn. Implijout a ra ar genlabourerien skeudennoù tapet diwar nij, mekanikoù + GPS ha kartennoù klasel abalamour da wiriañ ez eo reizh ha hizivaet OSM. + community_driven_title: Renet gant ar gumuniezh + community_driven_html: |- + Liesseurt hag entanet eo kumuniezh OpenStreetMap. O kreskiñ emañ bemdez. E-mesk hor c'henlabourerien ez eus kartennourien entanet, tud a-vicher eus ar GIS, ijinourien hag a laka servijerien OSM da vont en-dro, denegourien hag a sav kartennoù eus an takadoù gwastet gant gwallreuzioù ha kalz re all. + Evit gouzout hiroc'h diwar-benn ar gumuniezh, sellit ouzh blogoù OpenStreetMap, deizlevrioù an implijerien,blogoù ar gumuniezh, hag lec'hienn web open data: gallout a rit implijout + anezhañ evit forzh pseeurt pal keit ha ma roit kred da OpenStreetMap ha d''ar + re a labour warnañ. Ma cheñchit ar roadennoù pe ma harpit warno e doareoù + zo, e c''hallit skignañ an disoc''h dindan ar memes aotre-implij hepken. Sellit + ouzh Aotre-eilañ ha pajenn an aotre-implij + evit gouzout hiroc''h.' + legal_title: Lezennel + legal_html: "Al lec'hienn-mañ hag e-leizh a servijoù all kar zo korvoet ent + furmel gant an Diazezaddur OpenStreetMap + (OSMF) \nen anv ar gumuniezh.\nEvit implijout an holl servijoù kinniget gant + an OSMF e ranker doujañ d'hor \n + Politikerezh war an implijoù degemeret ha d'hor Politikerzh + prevezded.\n
      \nKit contacter + l'OSMF e darempred gant an OSMF, mar plij, m'ho peus goulennoù da + sevel diwar-benn an aotreoù-implijout, ar gwirioù oberour pe diwar-benn goulennoù + lezennel all.\n
      \nOpenStreetMap, al logo gant ar brasaer ha ''State of + the Map'' zomerkoù + marilhet OSMF." + partners_title: Kevelerien + copyright: + foreign: + title: Diwar-benn an droidigezh-mañ + text: Ma vez digendalc'h etre ar bajenn troet-mañ hag %{english_original_link} + e teuio ar bajenn saoznek da gentañ + english_link: orin e Saozneg + native: + title: Diwar-benn ar bajenn-mañ + text: Emaoc'h o lenn stumm saoznek ar bajenn copyright. Gallout a rit distreiñ + da %{native_link} ar bajenn-mañ pe paouez da lenn ar bajenn-mañ ha %{mapping_link}. + native_link: Stumm brezhonek + mapping_link: kregiñ da gemer perzh + legal_babble: + title_html: Copyright hag aotre-implijout + intro_1_html: |- + OpenStreetMap ® zo dindan un aotre-implijout digor, href "htpps : //Open Data + Commons Open Database License (ODbL)gant OpenStreetMap Foundation (OSMF). + intro_2_html: "Dieub oc'h da eilañ, da skignañ, da gas ha da azasaat hor c'hartennoù + hag hor roadennoù, gant ma root kred da OpenStreetMap ha d'e genlabourerien. + Ma kemmit pe ma implijit hor c'hartennoù pe hor roadennoù e labourioù all,ne + c'hallit ket skignañ ar re-se dindan un aotre-implijout all. En \nlegal\ncode + e kavot munudoù ho kwirioù hag ho teverioù." + intro_3_html: "Emañ tammoù hor c'hartennoù hag hon teulioù dindan an aotre-implijout + Creative \nCommons + Attribution-ShareAlike 2.0 license (CC-BY-SA)." + credit_title_html: Penaos reiñ kred da OpenStreetMap + credit_1_html: Goulenn a reomp diganeoc'h lakaat en ho kred ar meneg “© + kenlabourerien OpenStreetMap”. + credit_2_html: |- + Pa vez posupl e tle OpenStreetMap bezañ ur gourliamm war-du http://www.openstreetmap.org/ + ha CC BY-SA war-du http://creativecommons.org/licenses/by-sa/2.0/. + Ma'z implijit ur skor ma ne c'haller ket krouiñ liammoù (da skouer : + un destenn moullet), ez aliomp ac'hanoc'h da gas ho lennerien da + www.openstreetmap.org (marteze en ur astenn + ‘OpenStreetMap’ ar chomlec'h klok) ha da + www.creativecommons.org. + credit_3_html: |- + Evit ur gartenn elektronek a c'haller merdeiñ enni e tlefe ar c'hred dont war wel e korn ar gartenn. + Da skouer : + attribution_example: + alt: Skouer eus penaos deverkañ OpenStreetMap war ur bajenn web + title: Skouer deverkadur + more_title_html: Titouroù ouzhpenn + more_1_html: Ma fell deoc'h kaout muioc'h a ditouroù diwar-benn adimplij hor + roadennoù, lennit Licence + OSMF Licence page hag ar gumuniezh reolennoù + evit implijout an API, \n Sellit ouzh hor reolennoù + evit implijout an teolennoù, ha\nreolennoù + evit implijout Nominatin" + contributors_title_html: Hor c'henlabourerien + contributors_intro_html: 'Miliadoù a hiniennoù a labour ganimp. Ebarzhiñ a + reomp ivez roadennoù digor eus ajañsoù kartennañ hag eus mamennoù all, hag + en o zouez :' + contributors_at_html: |- + Aostria : Ennañ roadennoù eus + Stadt Wien (dindan + CC BY. + CC BY), + Land Vorarlberg ha + Land Tirol (dindan CC-BY AT gant enkemmadoù). + contributors_ca_html: |- + Kanada : Ennañ roadennoù eus + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), ha StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: |- + Finland: Ennañ ez eus roadennoù eus diaz roadennoù Ensellerezh Broadel Tiriad hag holladoù roadennoù all, dindan an + aotre-implij NLSFI. + contributors_fr_html: 'Frañs : Ennañ roadennoù eus Renerezh + Hollek an Tailhoù.' + contributors_nl_html: |- + Netherlands : Contains © AND data, 2007 + (www.and.com) + contributors_nz_html: |- + Zeland-Nevez : Ennañ roadennoù eus + Land Information New Zealand. Crown Copyright reserved. + contributors_si_html: |- + Slovenia: zo enni roadennoù eus Aotrouniezh steuñvidigezh ha Kartografiezh hag eus Ministrerezh al Labour-douar, ar C'hoadeier hag ar Boued + (titouroù foran eus Slovenia) + contributors_za_html: |- + Afrika ar Su : Ennañ roadennoù eus + Chief Directorate: + National Geo-Spatial Information, State copyright reserved. + contributors_gb_html: |- + Rouantelezh-Unanet : Ennañ roadennoù eus Ordnance + Survey data © Crown copyright and database right 2010-12. + contributors_footer_1_html: |- + ↓Evit muioc'h a vunudoù diwar-benn ar re-se, hag ar mammennoù all a zo bet implijet da sikour da wellaat OpenStreetMap, sellit ouzh ar Bajenn Skoazellerien e Wiki OpenStreetMap. + contributors_footer_2_html: Enlakaat roadennoù e OpenStreetMap ne empleg ket + ez aprou ar bourchaserien orin a endalc'had OpenStreetMap, na ne bourchasont, + na ne waratomp pe na ne zegemeront ne vern pe atebegezh e vefe. + infringement_title_html: Terriñ ar gwir-eilañ + infringement_1_html: |- + Degas a reomp da soñj da genlabourerien OSM ne zleont morse lakaat roadennoù a zeu + eus mammennoù dindan wirioù (da sk. : Google Maps pe kartennoù moullet) hep aotre + ezpleg ar re zo ar gwirioù-aozer ganto. + infringement_2_html: ma kredit ez eus bet ouzhpennet danvez dindan aotre-implijout + e gaou da diaz roadennoù OpenStreetMat pe d'al lec'hienn-mañ, roit an dra-se + da c'houzout d'hon argerzh + dizober, mar plij, pe skrivit war-eeun war hor furmskrid + enlinenn. + trademarks_title_html: Merkoù + trademarks_1_html: Openstreet, al logo brasaer ha State of the Map zo merkoù + marilhet gant OpenStreetMap Foundation. M'ho pez goulennoù da sevel diwar-benn + implij ar merkoù-se, sellit ouzh Trademark + Policy, mar plij. index: js_1: Pe emaoc'h oc'h implijout ur merdeer ha ne skor ket JavaScript, pe hoc'h eus diweredekaet JavaScript. @@ -1515,6 +1364,109 @@ br: id_not_configured: N'eo ket bet kefluniet an ID no_iframe_support: N'eo ket ho merdeer evit ober gant iframmoù HTML, hag ezhomm zo eus ar re-se evit an arc'hweladur-mañ. + export: + title: Ezporzhiañ + area_to_export: Takad da ezporzhiañ + manually_select: Diuzañ un takad disheñvel gant an dorn + format_to_export: Furmad da ezporzhiañ + osm_xml_data: Roadennoù XML OpenStreetMap + map_image: Skeudenn gartenn (diskouez ur gwiskad boutin) + embeddable_html: HTML enkorfadus + licence: Aotre-implijout + export_details: Roadennoù OpenStreetMap zo dindan an aotre-implijout Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Ma c''hwit an ezporzhiadur amañ a-us, implijit unan eus an elfennoù + amañ dindan :' + body: 'Re vras eo an takad-mañ evit bezañ ezporzhiet evel roadennoù XML OpenStreetMap. + Zoumit, mar plij, pe diuzit un takad bihanoc''h pe immplijit unan eus an + tarzhioù-mañ evit pellgargañ roadennoù a-yoc''h :' + planet: + title: Planedenn OSM + description: Eilennoù hizivaet ingal eus diaz roadennoù klok OpenStreetMap + overpass: + title: API Treuzell + description: Pellgargañ ar voest engronnus-mañ diwar ur melezour eus diaz + roadennoù OpenStreetMap + geofabrik: + title: Pellgargañ Geofabrik + description: Eztennadennoù hizivaet ingal a genvandirioù, a broioù , hag + a gêrioù diuzet + metro: + title: Eztennadennoù Metro + description: Eztennadennoù evit brasañ kêrioù ar bed hag o ardemezioù + other: + title: Tarzhioù all + description: Mammennoù all a gaver o roll er wiki OpenStreetMap + options: Dibarzhioù + format: Furmad + scale: Skeuliad + max: d'ar muiañ + image_size: Ment ar skeudenn + zoom: Zoum + add_marker: Ouzhpennañ ur merker d'ar gartenn + latitude: 'Led. :' + longitude: 'Hed. :' + output: Er-maez + paste_html: Pegañ HTML evit bezañ enkorfet en ul lec'hienn web + export_button: Ezporzhiañ + fixthemap: + title: ' Diskouez ez eus ur gudenn / Reizhañ ar gartenn' + how_to_help: + title: Penaos sikour + join_the_community: + title: Mont er gumuniezh-mañ + explanation_html: M'ho peus merzet ez eus ur gudenn gant roadennoù hor c'hartennoù, + da skouer un hent diank pe ho chomlec'h, an doare d'ober gwellañ eo mont + d'ar gumuniezh OpenStreetMap hag ouzhpennañ pe dresañ ar roadennoù hoc'h-unan. + add_a_note: + instructions_html: |- + Klikit war pe war ar memes arlun war ar gartenn. + Evel-se e vo ouzhpennet ur merker d'ar gartenn, ha gallout a reoc'h riklañ anezhañ. Ouzhpennit ho kemennadenn, neuze klikit war enrollañ, ha studiet e vo gant ar gartennaouerien all. + other_concerns: + title: Prederioù all + explanation_html: Ma'z oc'h chalet gant an doare ma vez implijet hor roadennoù + pe gant an endalc'hadoù, sellit ouzh hor pajenn gwir-eilañ + evit muioc'h a ditouroù lezennel, pe kit e darempred gant ar strollad-labour + OSMF a zere. + help: + title: Tapout sikour + introduction: OpenStreetMap zo gantañ meur a zoare da c'houzout hiroc'h diwar-benn + ar raktres, d'ober goulennoù ha da respont da c'houlennoù, ha da gendivizout + ha da deuliaduriñ sujedoù ar c'hartennoù. + welcome: + url: /welcome + title: Deuet-mat oc'h en OSM + description: Krogit gant ar sturlevr-mañ evit deskiñ diazezoù OpenStreetMap + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/FR:Sturlevr an deraouidi + title: Sturlevr evit deraouidi + description: Sturlevr evit an deraouidi dalc'het gant ar gumuniezh + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Ober ur goulenn pe klask respontoù e lec'hienn goulennoù-respontoù + OSM + mailing_lists: + title: Roll skignañ + description: Sevel ur goulenn pe divizout diwar-benn goulennoù dedennus war + un niver bras a demoù pe diwar-benn rolloù skignañ rannvroel. + forums: + title: Foromoù + description: Goulennoù ha divizoù evit ar re a gav gwelloc'h un etrefas e + stil un daolenn skritellañ + irc: + title: IRC + description: Flap etreoberiat e meur a yezh disheñvel ha diwar-benn danvezioù + a bep seurt. + switch2osm: + title: switch2osm + description: Skoazell evit an embregerezhioù hag an aozadurioù trec'haoliñ + e OpenStreetMap, hervez ar c'hartennoù hag ar servijoù all. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Merdeañ er wiki evit gouzout traoù resis diwar-benn OSM. sidebar: search_results: Disoc'hoù enklask close: Serriñ @@ -1616,6 +1568,54 @@ br: image: Skeudenn alt: Testenn all url: URL + welcome: + title: Deuet-mat oc'h ! + introduction_html: Degemer mat en OpenStreetMap, ar gartenn digoust eus ar bed + hag a c'haller aozañ. Kevreet oc'h bremañ ha prest oc'h da gregiñ da gartennaouiñ. + Setu amañ un nebeud displegadennoù diwar-benn an traoù pouezusañ da c'houzout. + whats_on_the_map: + title: Petra zo war ar gartenn + on_html: |- + OpenStreetMap zo ul lec'h evit kartennaouiñ traoù gwirion hag a vremañ war un dro + - + Ennañ ez eus milionoù a savadurioù, a hentoù, hag a vunudoù all diwar-benn lec'hioù. Gallout a rit kartennaouiñ forzh peseurt tra eus ar bed gwirion hag a zedenn ac'hanoc'h. + off_html: Ar pezh na gaver ket avat eo ar roadennoù evit notennoù + roet gant an dud, elfennoù istorel pe martezeüs, hag ar roadennoù a zo dindan + gwirioù eilañ. Nemet hag un aotre ispisial ho pefe, na eilit ket kartennoù + enlinenn pe war baper. + basic_terms: + title: Geriaoueg diazez ar c'hartennaouiñ + paragraph_1_html: E luc'haj dezhañ e-unan en deus OpenStreetMap. Setu amañ + un nebeud gerioù-alc'hwez a c'hallo talvezout deoc'h. + editor_html: Un aozer zo ur programm pe ul lec'hienn web + a c'hallit implijout da aozañ ar gartenn. + node_html: Ur skoulm zo ur poent war ar gartenn, evel ur + preti pe ur wezenn. + way_html: Ur roud zo ul linenn pe ur gorread, evel un hent, + ur wazh-dour, pe ur savadur. + tag_html: Un dikedenn zo ur roadenn diwar-benn ur skoulm + pe un hent, evel anv ur preti pe an tizh bevennet war un hent. + rules: + title: Reolennoù ! + paragraph_1_html: OpenStreetMap en deus un nebeud reolennoù furmel, met gortoz + a reomp ma vo kemeret perzh gant an holl berzhidi ha ma vo darempredoù gant + ar gumuniezh. Ma vezit e-sell d'ober traoù all estreget ober cheñchamantoù + gant an dorn, lennit ha heuilhit ar sturiadoù, mar plij, e An + ezporzhiadurioù ha + Ar c'hemmoù emgefre>/a>. + questions: + title: Traoù da c'houlenn ? + paragraph_1_html: Ezhomm ho peus sikour evit kartennaouiñ, pe n'eo ket sklaer + penaos implijout ? Tapit respontoù d'ho koulennoù el lec'hienn + web sikour. + start_mapping: Kregiñ da gartennaouiñ + add_a_note: + title: N'ho peus ket amzer da aozañ ? Ouzhpennit un notenn ! + paragraph_1_html: Ma fell deoc'h ober ur reizhadennig hepken ha ma n'ho peus + ket amzer da gevreañ ha da zeskiñ penaos aozañ, ez eo aezet lakaat un notenn. + paragraph_2_html: |- + Kit d'ar gartenn ha klikit war an arlun notenn : + . Evel-se e vo ouzhpennet ur merker d'ar gartenn a c'halloc'h riklañ. Skrivit ho kemennadenn, ha neuze klikit war enrollañ, ha gallout a ray ar gartennaouerien klask gouzout hiroc'h. trace: visibility: private: Prevez (rannet ent dizanv hepken, poentoù hep urzh) @@ -1741,7 +1741,7 @@ br: d'an etrefas Web da sellet ouzh Termenoù an implijerien. Marteze ne viot ket a-du ganto met ret eo deoc'h bezañ lennet anezho. oauth: - oauthorize: + authorize: title: Aotren mont d'ho kont request_access: Emañ an arload %{app_name} o c'houlenn mont d'ho kont, %{user}. Gwiriit hag-eñ hoc'h eus c'hoant e vefe ar barregezhioù-mañ gant hoc'h arloadoù. @@ -1755,11 +1755,11 @@ br: allow_write_gpx: kas roudoù GPS. allow_write_notes: kemmañ notennoù grant_access: Grataat ar monet - oauthorize_success: + authorize_success: title: Reked aotre roet allowed: Aotreet ho peus an arload %{app_name} da vont d'ho kont. verification: Ar c'hod gwiriekaat zo %{code}. - oauthorize_failure: + authorize_failure: title: C'hwitet eo ar goulenn aotre denied: Miret ho peus ouzh an arload %{app_name} da vont d'ho kont. invalid: Ar jedouer aotren n'eo ket reizh. @@ -2207,7 +2207,7 @@ br: confirm: Kadarnaat fail: N'eus ket bet gallet lemel ar roll « %{role} » digant an implijer « %{name} ». Gwiriit hag-eñ eo reizh an implijer hag ar roll. - user_block: + user_blocks: model: non_moderator_update: Ret eo deoc'h bezañ habaskaer evit krouiñ pe hizivaat ur stankadur. @@ -2270,20 +2270,6 @@ br: period: one: 1 eurvezh other: '%{count} eurvezh' - partial: - show: Diskouez - edit: Aozañ - revoke: Disteuler ! - confirm: Ha sur oc'h ? - display_name: Implijer stanket - creator_name: Krouer - reason: Abeg evit stankañ - status: Statud - revoker_name: Torret gant - not_revoked: (n'eo ket torret) - showing_page: Page %{page} - next: ↓War-lerc'h » - previous: ↓« Kent helper: time_future: Echuiñ a ray a-benn %{time}. until_login: Oberiant betek ma kevre an implijer. @@ -2314,8 +2300,22 @@ br: back: Gwelet an holl stankadurioù revoker: 'Torrer :' needs_view: Ret eo d'an implijer kevreañ a-raok ma vefe diverket ar stankadur-mañ. - note: - description: + block: + not_revoked: (n'eo ket torret) + show: Diskouez + edit: Aozañ + revoke: Disteuler ! + blocks: + display_name: Implijer stanket + creator_name: Krouer + reason: Abeg evit stankañ + status: Statud + revoker_name: Torret gant + showing_page: Page %{page} + next: ↓War-lerc'h » + previous: ↓« Kent + notes: + comment: opened_at_html: Bet krouet %{when} zo opened_at_by_html: Bet krouet %{when} zo gant %{user} commented_at_html: Hizivaet %{when} zo @@ -2499,7 +2499,7 @@ br: show_address: Diskouez ar chomlec'h query_features: Perzhioù enklask centre_map: Kreizañ ar gartenn amañ - redaction: + redactions: edit: description: Deskrivadur heading: Aozañ ar skridaozadenn diff --git a/config/locales/bs.yml b/config/locales/bs.yml index b10c2e59f..549f55dc3 100644 --- a/config/locales/bs.yml +++ b/config/locales/bs.yml @@ -290,37 +290,6 @@ bs: ago: '%{ago} prije' newer_comments: Noviji komentari older_comments: Stariji komentari - export: - title: Izvezi - start: - area_to_export: Područje za izvoz - manually_select: Ručno izabrati drukčije područje - format_to_export: Format za izvoz - osm_xml_data: OpenStreetMap XML podaci - map_image: Slika karte (prikazuje standardni sloj) - embeddable_html: HTML kod sa mogućnošću za umetanje - licence: Dozvola - export_details: OpenStreetMap podaci je licenciran pod Open - Data Commons Open Database License dozvolom (ODbL). - too_large: - body: Ovo područje je preveliko da bi se izvezlo kao OpenStreetMap XML podaci. - Molimo povećajte (zoom) ili odaberite manje područje ili koristite jedan - od izvora navedenih ispod za masovno preuzimanje podataka. - other: - title: Drugi izvori - description: Dodatni izvori ponuđeni na OpenStreetMap wiki - options: Opcije - format: Format - scale: Skala - max: najviÅ¡e - image_size: Veličina slike - zoom: Uvećanje - add_marker: Dodati marker na kartu - latitude: 'Lat:' - longitude: 'Lon:' - output: Izlaz - paste_html: Zalijepiti HTML za umetanje na web stranicu - export_button: Izvoz geocoder: search: title: @@ -860,123 +829,6 @@ bs: title: Podržite Openstreetmap novčanom donacijom text: Donirajte learn_more: Saznaj viÅ¡e - license_page: - foreign: - title: O ovom prevodu - text: U slučaju konflikta između ove prevedene stranice i %{english_original_link}, - Engleska stranica ima prednost - english_link: Engleski original - native: - title: O ovoj stranici - text: Vi gledate englesku verziju stranice o autorskim pravima. Možete se vratiti - na %{native_link} ove stranice ili možete prestati čitati o autorskim pravima - i %{mapping_link}. - native_link: bosansko izdanje - mapping_link: počnite sa ucrtavanjem - legal_babble: - title_html: Autorska prava i dozvola - intro_1_html: |2- - OpenStreetMap su otvoreni podaci, licencirani pod Open Data - Commons Open Database License dozvolom (ODbL). - intro_2_html: Slobodni ste kopirati, distribuirati, prenositi i adaptirati naÅ¡e - podatke sve dok navodite OpenStreetMap i njegove doprinosioce kao izvor. Ako - izmijenite ili nadogradite naÅ¡e podatke, možete distribuirati rezultate samo - pod istom licencom. Puni pravni - tekst objaÅ¡njava VaÅ¡a prava i odgovornosti. - intro_3_html: |- - Kartografija u naÅ¡im dijelovima karte, i naÅ¡a dokumentacija, su licencirani pod Creative - Commons Attribution-ShareAlike 2.0 licencom (CC-BY-SA). - credit_title_html: Kako navesti zasluge OpenStreetMap projekta kao izvora - credit_1_html: |- - Tražimo da koristite navedete zasluge “© OpenStreetMap - contributors”. - credit_2_html: Gdje je moguće, OpenStreetMap treba biti kao hyperlink na http://www.openstreetmap.org/and - CC BY-SA to http://creativecommons.org/licenses/by-sa/2.0/. - Ako koristite medij gdje linkovi nisu mogući (npr. tiskane karte), predlažemo - da uputite vaÅ¡e čitatelje na www.openstreetmap.org (proÅ¡irenjem na ‘OpenStreetMap’ - za ovo punu adresu) i na www.creativecommons.org. - credit_3_html: 'Za pretraživu elektronsku kartu, navođenje zasluge se treba - pojaviti u uglu karte. Naprimjer:' - attribution_example: - alt: Primjer kako se navodi zasluga projekta OpenStreetMap na web stranici - title: Primjer navođenja zasluge - more_title_html: ViÅ¡e o - more_1_html: Čitajte viÅ¡e o koriÅ¡tenju naÅ¡ih podataka na Legal - FAQ. - more_2_html: |- - Iako su OpenStreetMap podaci otvoreni, mi ne možemo ponuditi besplatni API karte za druge developere (third party). - Vidjeti naÅ¡e Politika koriÅ¡tenja API, - Politika koriÅ¡tenja dijelova karte - i Politika koriÅ¡tenja usluge Nominatim. - contributors_title_html: NaÅ¡i korisnici - doprinosioci - contributors_intro_html: 'NaÅ¡i doprinosioci su hiljade osoba. Mi takođe uključujemo - podatke sa otvorenom dozvolom iz nacionalnih kartografskih agencija i drugih - izvora, među njima:' - contributors_at_html: |- - Austrija: Sadrži podatke sa Stadt Wien (under - CC BY), - Land Vorarlberg i - Land Tirol (under CC-BY AT sa amandmanima). - contributors_ca_html: 'Kanada: Sadrži podatke iz GeoBase®, - GeoGratis (© Department of Natural Resources Canada), CanVec (© - Department of Natural Resources Canada), i StatCan (Geography Division, Statistics - Canada).' - contributors_fr_html: 'Francuska: Sadrži podatke sa Direction - Générale des Impôts.' - contributors_nl_html: |- - Holandija: Sadrži © AND data, 2007 - (www.and.com) - contributors_nz_html: |- - Novi Zeland: Sadrži podatke izvorno iz - Land Information New Zealand. Crown Copyright reserved. - contributors_za_html: |- - Južna Afrika: Sadrži podatke sa Chief Directorate: - National Geo-Spatial Information, State copyright reserved. - contributors_gb_html: |- - Velika Britanija: Sadrži podatke Ordnance - Survey data © Crown copyright and database right - 2010. - contributors_footer_1_html: |- - Za dalje detalje o ovome, i drugim izvorima koji su koriÅ¡teni da bi poboljÅ¡ali OpenStreetMap, molimo pogledajte Stranica doprinosilaca na Wiki OpenStreetMap. - contributors_footer_2_html: ' UvrÅ¡tenje podataka u OpenStreetMap ne podrazumjeva - da se izvorni davatelj podataka podržava OpenStreetMap, pruža bilo kakvu garanciju, - ili prihvata bilo kakve obaveze.' - infringement_title_html: KrÅ¡enje autorskih prava - infringement_1_html: OSM doprinosioci se podsjećaju da nikada ne dodaju podatke - sa bilo kojeg izvora koji zadržava autorska prava (npr. Google Maps ili printane - karte) bez eksplicitne dozvole od strane autora. - infringement_2_html: Ako vjerujete da je zaÅ¡tićeni materijal bio dodan bazi - podataka OpenStreetMapa ili ovoj veb-stranici, molimo da pogledate naÅ¡u proceduru - skidanja ili uložite prigovor direktno na naÅ¡u stranicu. - welcome_page: - title: DobrodoÅ¡li! - whats_on_the_map: - on_html: OpenStreetMap je mjesto za mapiranje stvari koje su i stvarne i - trenutne - uključuje milione građevina, cesta, i ostalih detalja vezanih - za mjesta. Vi možete mapirati bilo koji stvarni oblik koji vas interesuje. - basic_terms: - title: Osnovni pojmovi za mapiranje - questions: - title: Pitanja? - fixthemap: - how_to_help: - title: Kako pomoći - join_the_community: - title: Pridružite se zajednici - help_page: - welcome: - url: /dobrodoÅ¡lica - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Bs:Beginners%27_guide - irc: - title: IRC - about_page: - next: Slijedeće - open_data_title: Open Data notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} je komentirao tvoj unos u dnevnik' @@ -1124,6 +976,101 @@ bs: delete: deleted: Poruka izbrisana site: + about: + next: Slijedeće + open_data_title: Open Data + copyright: + foreign: + title: O ovom prevodu + text: U slučaju konflikta između ove prevedene stranice i %{english_original_link}, + Engleska stranica ima prednost + english_link: Engleski original + native: + title: O ovoj stranici + text: Vi gledate englesku verziju stranice o autorskim pravima. Možete se + vratiti na %{native_link} ove stranice ili možete prestati čitati o autorskim + pravima i %{mapping_link}. + native_link: bosansko izdanje + mapping_link: počnite sa ucrtavanjem + legal_babble: + title_html: Autorska prava i dozvola + intro_1_html: |2- + OpenStreetMap su otvoreni podaci, licencirani pod Open Data + Commons Open Database License dozvolom (ODbL). + intro_2_html: Slobodni ste kopirati, distribuirati, prenositi i adaptirati + naÅ¡e podatke sve dok navodite OpenStreetMap i njegove doprinosioce kao izvor. + Ako izmijenite ili nadogradite naÅ¡e podatke, možete distribuirati rezultate + samo pod istom licencom. Puni pravni + tekst objaÅ¡njava VaÅ¡a prava i odgovornosti. + intro_3_html: |- + Kartografija u naÅ¡im dijelovima karte, i naÅ¡a dokumentacija, su licencirani pod Creative + Commons Attribution-ShareAlike 2.0 licencom (CC-BY-SA). + credit_title_html: Kako navesti zasluge OpenStreetMap projekta kao izvora + credit_1_html: |- + Tražimo da koristite navedete zasluge “© OpenStreetMap + contributors”. + credit_2_html: Gdje je moguće, OpenStreetMap treba biti kao hyperlink na http://www.openstreetmap.org/and + CC BY-SA to http://creativecommons.org/licenses/by-sa/2.0/. + Ako koristite medij gdje linkovi nisu mogući (npr. tiskane karte), predlažemo + da uputite vaÅ¡e čitatelje na www.openstreetmap.org (proÅ¡irenjem na ‘OpenStreetMap’ + za ovo punu adresu) i na www.creativecommons.org. + credit_3_html: 'Za pretraživu elektronsku kartu, navođenje zasluge se treba + pojaviti u uglu karte. Naprimjer:' + attribution_example: + alt: Primjer kako se navodi zasluga projekta OpenStreetMap na web stranici + title: Primjer navođenja zasluge + more_title_html: ViÅ¡e o + more_1_html: Čitajte viÅ¡e o koriÅ¡tenju naÅ¡ih podataka na Legal + FAQ. + more_2_html: |- + Iako su OpenStreetMap podaci otvoreni, mi ne možemo ponuditi besplatni API karte za druge developere (third party). + Vidjeti naÅ¡e Politika koriÅ¡tenja API, + Politika koriÅ¡tenja dijelova karte + i Politika koriÅ¡tenja usluge Nominatim. + contributors_title_html: NaÅ¡i korisnici - doprinosioci + contributors_intro_html: 'NaÅ¡i doprinosioci su hiljade osoba. Mi takođe uključujemo + podatke sa otvorenom dozvolom iz nacionalnih kartografskih agencija i drugih + izvora, među njima:' + contributors_at_html: |- + Austrija: Sadrži podatke sa Stadt Wien (under + CC BY), + Land Vorarlberg i + Land Tirol (under CC-BY AT sa amandmanima). + contributors_ca_html: 'Kanada: Sadrži podatke iz GeoBase®, + GeoGratis (© Department of Natural Resources Canada), CanVec (© + Department of Natural Resources Canada), i StatCan (Geography Division, + Statistics Canada).' + contributors_fr_html: 'Francuska: Sadrži podatke sa Direction + Générale des Impôts.' + contributors_nl_html: |- + Holandija: Sadrži © AND data, 2007 + (www.and.com) + contributors_nz_html: |- + Novi Zeland: Sadrži podatke izvorno iz + Land Information New Zealand. Crown Copyright reserved. + contributors_za_html: |- + Južna Afrika: Sadrži podatke sa Chief Directorate: + National Geo-Spatial Information, State copyright reserved. + contributors_gb_html: |- + Velika Britanija: Sadrži podatke Ordnance + Survey data © Crown copyright and database right + 2010. + contributors_footer_1_html: |- + Za dalje detalje o ovome, i drugim izvorima koji su koriÅ¡teni da bi poboljÅ¡ali OpenStreetMap, molimo pogledajte Stranica doprinosilaca na Wiki OpenStreetMap. + contributors_footer_2_html: ' UvrÅ¡tenje podataka u OpenStreetMap ne podrazumjeva + da se izvorni davatelj podataka podržava OpenStreetMap, pruža bilo kakvu + garanciju, ili prihvata bilo kakve obaveze.' + infringement_title_html: KrÅ¡enje autorskih prava + infringement_1_html: OSM doprinosioci se podsjećaju da nikada ne dodaju podatke + sa bilo kojeg izvora koji zadržava autorska prava (npr. Google Maps ili + printane karte) bez eksplicitne dozvole od strane autora. + infringement_2_html: Ako vjerujete da je zaÅ¡tićeni materijal bio dodan bazi + podataka OpenStreetMapa ili ovoj veb-stranici, molimo da pogledate naÅ¡u + proceduru + skidanja ili uložite prigovor direktno na naÅ¡u stranicu. index: js_1: Koristite internet preglednik koji ne podržava JavaScript, ili ste onemogućili JavaScript. @@ -1153,6 +1100,48 @@ bs: u Potlatch 2, trebali bi kliknuti Spremiti.) no_iframe_support: VaÅ¡ preglednik ne podržava HTML iframes, koji su potrebni za ovu značajku. + export: + title: Izvezi + area_to_export: Područje za izvoz + manually_select: Ručno izabrati drukčije područje + format_to_export: Format za izvoz + osm_xml_data: OpenStreetMap XML podaci + map_image: Slika karte (prikazuje standardni sloj) + embeddable_html: HTML kod sa mogućnošću za umetanje + licence: Dozvola + export_details: OpenStreetMap podaci je licenciran pod Open + Data Commons Open Database License dozvolom (ODbL). + too_large: + body: Ovo područje je preveliko da bi se izvezlo kao OpenStreetMap XML podaci. + Molimo povećajte (zoom) ili odaberite manje područje ili koristite jedan + od izvora navedenih ispod za masovno preuzimanje podataka. + other: + title: Drugi izvori + description: Dodatni izvori ponuđeni na OpenStreetMap wiki + options: Opcije + format: Format + scale: Skala + max: najviÅ¡e + image_size: Veličina slike + zoom: Uvećanje + add_marker: Dodati marker na kartu + latitude: 'Lat:' + longitude: 'Lon:' + output: Izlaz + paste_html: Zalijepiti HTML za umetanje na web stranicu + export_button: Izvoz + fixthemap: + how_to_help: + title: Kako pomoći + join_the_community: + title: Pridružite se zajednici + help: + welcome: + url: /dobrodoÅ¡lica + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Bs:Beginners%27_guide + irc: + title: IRC sidebar: search_results: Rezultati pretrage close: Zatvoriti @@ -1247,6 +1236,16 @@ bs: image: Slika alt: Alt tekst url: URL + welcome: + title: DobrodoÅ¡li! + whats_on_the_map: + on_html: OpenStreetMap je mjesto za mapiranje stvari koje su i stvarne + i trenutne - uključuje milione građevina, cesta, i ostalih detalja + vezanih za mjesta. Vi možete mapirati bilo koji stvarni oblik koji vas interesuje. + basic_terms: + title: Osnovni pojmovi za mapiranje + questions: + title: Pitanja? trace: visibility: private: Privatni (prikazuje se kao anoniman, neuređene tačke) @@ -1366,7 +1365,7 @@ bs: prijavite na web upravljačku ploču da pogledate Uslove za doprinosioce. Ne morate se složiti, ali ih morate pogledati. oauth: - oauthorize: + authorize: request_access: 'Aplikacija %{app_name} zahtjeva pristup VaÅ¡em korisničkom računu: %{user}. Provjerite želite li da aplikacija ima sljedeće mogućnosti. Možete odabrati koliko joj pristupa želite dopustiti.' @@ -1746,7 +1745,7 @@ bs: confirm: Potvrditi fail: Ne možemo opozvati ulogu `%{role}' korisniku `%{name}'. Molimo provjeriti ispravnost i korisnika i uloge. - user_block: + user_blocks: model: non_moderator_update: Morate biti moderator da napravite ili osvježite blokadu. non_moderator_revoke: Morate biti moderator da opozovete blokadu. @@ -1804,20 +1803,6 @@ bs: period: one: 1 sat other: '%{count} sata/i' - partial: - show: Pokazati - edit: Urediti - revoke: Opozvati! - confirm: Da li ste sigurni? - display_name: Blokirani korisnik - creator_name: Kreator - reason: Razlog za blokadu - status: Stanje - revoker_name: Opozvano od strane - not_revoked: (nije opozvano) - showing_page: Stranica %{page} - next: Sljedeća » - previous: « Prethodna helper: time_future: ZavrÅ¡ava u %{time}. until_login: Aktivno dok se korsnik ne prijavi. @@ -1846,8 +1831,22 @@ bs: back: Pogledati sve blokade revoker: 'Opozivalac:' needs_view: Korisnik se mora prijaviti prije nego se blokada očisti. - note: - description: + block: + not_revoked: (nije opozvano) + show: Pokazati + edit: Urediti + revoke: Opozvati! + blocks: + display_name: Blokirani korisnik + creator_name: Kreator + reason: Razlog za blokadu + status: Stanje + revoker_name: Opozvano od strane + showing_page: Stranica %{page} + next: Sljedeća » + previous: « Prethodna + notes: + comment: opened_at_html: Kreirano prije %{when} mine: id: Id @@ -1912,7 +1911,7 @@ bs: show_address: Prikaži adresu query_features: Informacije o objektima centre_map: Ovdje centriraj kartu - redaction: + redactions: edit: description: Opis heading: Urediti redakciju diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 1f022e845..cef8e70ef 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -358,56 +358,6 @@ ca: ago: fa %{ago} newer_comments: Comentaris recents older_comments: Comentaris antics - export: - title: Exportar - start: - area_to_export: Àrea a exportar - manually_select: Selecciona manualment una àrea diferent - format_to_export: Format d'exportació - osm_xml_data: OpenStreetMap XML Data - map_image: Imatge de mapa (mostra una capa estàndard) - embeddable_html: HTML que es pot incloure - licence: Llicència - export_details: Les dades d'OpenStreetMap són publicades sota el termes de la - llicència Creative - Commons Attribution-ShareAlike 2.0. - too_large: - advice: 'Si falla l''exportació anterior, si us plau, penseu a utilitzar una - de les fonts llistades a continuació:' - body: Aquesta zona és massa gran per ser exportada com a dades XML de OpenStreetMap. - Si us plau seleccioneu una àrea més petita o bé una de les següents fonts - per descarregar quantitats grans de dades. - planet: - title: Planeta OSM - description: Còpies actualitzades regularment de la base de dades d'OpenStreetMap - al complet - overpass: - title: API Overpass - description: Descarrega aquest requadre des d'una rèplica de la base de - dades d'OpenStreetMap - geofabrik: - title: Descàrregues de Geofabrik - description: Extractes actualitzats regularment de continents, països i - de les ciutats seleccionades - metro: - title: Extractes de Metro - description: Extractes per a les ciutats més grans del món i les seves àrees - metropolitanes - other: - title: Altres fonts - description: Fonts addicionals llistades al wiki d'OpenStreetMap - options: Opcions - format: Format - scale: Escala - max: màx - image_size: Mida de la imatge - zoom: Zoom - add_marker: Afegeix un marcador en el mapa - latitude: 'Lat:' - longitude: 'Lon:' - output: Sortida - paste_html: Enganxa HTML per incloure'l al lloc web - export_button: Exporta geocoder: search: title: @@ -992,264 +942,6 @@ ca: text: Feu una donació learn_more: Aprèn-ne més more: Més - license_page: - foreign: - title: Quant a la traducció - text: En cas de conflicte entre aquesta pàgina traduïda i %{english_original_link}, - la pàgina en anglès té prioritat - english_link: l'original en anglès - native: - title: Sobre aquesta pàgina - text: Esteu veient la versió anglesa de la pàgina de drets d'autor. Podeu tornar - a la %{native_link} d'aquesta pàgina o podeu deixar de llegir sobre el copyright - i anar a %{mapping_link}. - native_link: versió català - mapping_link: Comença a cartografiar - legal_babble: - title_html: Drets d'autor i llicència - intro_1_html: |- - Les dades obertes d'OpenStreetMap® estan publicades sota la llicència de base de dades oberta (ODbL) per la Fundació OpenStreetMap (OSMF). - intro_2_html: "Sou lliure de copiar, distribuir, comunicar públicament i fer-ne - obres \nderivades de les nostres dades, sempre que atribuïu els crèdits a - \nOpenStreetMap i els seus col·laboradors. Si modifiqueu o utilitzeu les\nnostres - dades fer fer obres derivades, només podreu distribuir l'obra \nresultant - amb la mateixa llicència. Aquest \ntext - legal\ncode sencer que explica detalladament els vostres drets i responsabbilitats." - intro_3_html: |- - La cartografia de les nostres tessel·les i la nostra documentació són ofertes - sota llicència Text de la llicència de Creative Commons Reconeixement-Compartir Igual 2.0(CC-BY-SA). - credit_title_html: Com a crèdit OpenStreetMap - credit_1_html: |- - Exigim que l'atribució de drets d'autor sigui “© Col·laboradors d'OpenStreetMap - ”. - credit_2_html: També heu de deixar clar que les dades són disponibles sota llicència - obereta, i si s'utilitzen les nostres tessel·les de mapes, que la cartografia - és llicenciada com CC-BY-SA. Podeu fer això enllaçant a aquest - pàgina de copyright. D'altra banda, i com a requisit obligatori si voleu - distribuir OSM en forma de dades en brut, podeu citar i enllaçar directament - a la llicència. En el cas d'utilitzar suports on els enllaços d'hipertext - no són possibles (per exemple, obres impreses), us suggerim d'adreçar els - lectors a openstreetmap.org (potser indicant l'adreça completa d'OpenStreetMap), - a opendatacommons.org i si s'escau, a creativecommons.org. - credit_3_html: |- - En el cas d'un mapa electrònic navegable, els crèdits han d'aparèixer a la cantonada del mapa. - Per exemple: - attribution_example: - alt: Exemple de com atribuir OpenStreetMap a una pàgina web - title: Exemple d'atribució - more_title_html: Saber-ne més - more_1_html: |- - Llegiu més informació sobre com utilitzar les nostres dades, i com donar-ne crèdit, a la pàgina de llicència OSMF i a les Preguntes - Freqüents sobre legalitat. - more_2_html: Encara que les dades d'OpenStreetMap són dades obertes, no podem - oferir una API gratuïta per als desenvolupadors de terceres parts. Vegeu la - política d'ús - de l'API, la política - d'ús de les tessel·les i la política - d'ús de Nominatim. - contributors_title_html: Els nostres col·laboradors - contributors_intro_html: 'Els nostres col·laboradors són milers de persones. - També incloem dades amb llicència oberta de les agències públiques de cartografia - i d''altres fonts, entre elles:' - contributors_at_html: |- - Àustria: conté dades de - Stadt Wien sota - CC BY. - contributors_ca_html: |- - Canadà: conté dades de - GeoBase ®, GeoGratis (© Departament de Natural - Recursos Canadà), CanVec (© Departament de Natural - Recursos Canadà) i StatCan (Divisió de Geografia, - Canadà de Estadístiques). - contributors_fi_html: 'Finlàndia: Conté dades de la base de - dades topogràfica del National Land Survey of Finland i d''altres bases de - dades, sota la llicència - NLSFI.' - contributors_fr_html: |- - França: conté dades d'origen de - Direcció Générale des Impôts. - contributors_nl_html: 'Països Baixos: Conté © dades d''Automotive - Navigation Data (AND), 2007 (www.and.com)' - contributors_nz_html: |- - Nova Zelanda: conté dades d'origen de - Informació Nova Zelanda de la terra. Corona de drets d'autor reservat. - contributors_si_html: 'Eslovènia: Conté dades de l''Autoritat - de Topografia i Cartografia i el Ministeri - d''Agricultura, Silvicultura i Alimentació (informació pública d''Eslovènia).' - contributors_za_html: |- - Sud-àfrica: conté dades del - Chief Directorate: - National Geo-Spatial Information, drets d'autor reservat per l'estat. - contributors_gb_html: |- - Regne Unit: conté dades del - Ordnance Survey © Drets d'autor de la Corona i de la base de dades - 2010-12. - contributors_footer_1_html: |- - Per a més detalls sobre aquesta i d'altres fonts que han estat utilitzades per millorar els mapes de l'OpenStreetMap, visiteu la pàgina dedicada als Col·laboradors del wiki d'OSM. - contributors_footer_2_html: |- - Inclusió de dades en OpenStreetMap no implica que l'original - el proveïdor de dades recolza OpenStreetMap, proporciona cap garantia, o - accepta qualsevol responsabilitat. - infringement_title_html: Violació dels drets d'autor - infringement_1_html: Recordem als col·laboradors de l'OSM que mai no s'han d'afegir - dades de cap font amb drets d'autor registrats (com Google Maps o mapes impresos - per exemple) sense tenir una autorització explícita dels titulars dels drets - d'autor. - infringement_2_html: Si penseu que hi ha material protegit per drets d'autor - que ha estat afegit a la base de dades d'OpenStreetMap o a aquest web, si - us plau aneu a la pàgina web dedicada al Procediment - per eliminar dades protegides pels drets d'autor o empleneu aquest formulari en línia.. - trademarks_title_html: Marques registrades - trademarks_1_html: OpenStreetMap, el logotip de la lupa i «State of the Map» - són marques registrades de la Fundació OpenStreetMap. Si teniu preguntes sobre - l’ús de les marques, consulteu la política - de marques registrades. - welcome_page: - title: Benvingut! - introduction_html: Us donem la benvinguda a l'OpenStreetMap, el mapa lliure i - editable del món. Ara que ja us heu registrat, ja ho teniu tot a punt per començar - a editar el mapa. Aquí hi ha una guia ràpida amb les coses més importants que - cal saber - whats_on_the_map: - title: Què hi ha al mapa - on_html: L'OpenStreetMap és un lloc per incloure al mapa coses que són reals - i normals- això inclou milions d'edificis, carreteres, i altres detalls - sobre llocs. Pots cartografiar totes les característiques del món real que - et semblin interessants. - off_html: El que no inclou són dades subjectives com ara puntuacions, - característiques històriques o hipotètiques i dades de fonts subjectes a copyright. - A no ser que posseeixis un permís especial no copiïs res de mapes de paper - o en línia. - basic_terms: - title: Condicions bàsiques per editar el mapa - paragraph_1_html: l'OpenStreetMap té algunes paraules del seu propi argot. Aquí - hi han unes quantes paraules clau que et poden venir bé. - editor_html: Un editor és un programa o pàgina web que pots - utilitzar per editar el mapa. - node_html: Un node és un punt al mapa, com ara un restaurant - o un arbre. - way_html: Una via és una línia o àrea, com ara una carretera, - sèquia, llac o edifici. - tag_html: Una etiqueta és un recull de dades sobre un node - o una via, com ara el nom d'un restaurant o la velocitat màxima d'una carretera. - rules: - title: Regles - paragraph_1_html: "OpenStreetMap té poques les regles formals, pel que esperem - que tots els participants col·laborin i es comuniquin amb la comunitat. Si - està considerant\naltres activitats que no sigui l'edició manual, si us plau, - llegiu i seguiu les directrius d' \nImportació - i \nEdició - Automàtica." - questions: - title: Alguna pregunta més? - paragraph_1_html: OpenStreetMap té multitud de recursos per conèixer aquest - projecte, per plantejar i respondre preguntes, i per participar en discussions - col·laboratives i documentar temes de cartografia. Visiteu - l'ajuda. - start_mapping: Comença a editar el mapa - add_a_note: - title: No tens temps per editar? Afegeix una nota! - paragraph_1_html: Si només voleu fer una petita modificació però no disposeu - del temps per registrar-vos i aprendre com editar, deixeu una nota al mapa. - paragraph_2_html: 'Només cal que us dirigiu almapa - i cliqueu l''icona de la nota: . Això afegirà - un marcador al mapa que podeu moure arrossegant-lo. Afegiu el vostre missatge, - cliqueu el botó de desat, i altres usuaris ho investigaran.' - fixthemap: - title: Informeu d'un problema / Corregiu el mapa - how_to_help: - title: Com contribuir - join_the_community: - title: Afegiu-vos a la comunitat - explanation_html: Si heu trobat un problema amb les nostres dades del mapa, - com per exemple l'omissió d'una carretera o bé de la vostra adreça, la millor - forma d'arreglar-ho és unint-se a la comunitat d'OpenStreetMap i afegir - o bé corregir les dades vós mateix. - add_a_note: - instructions_html: Feu clic a o a la mateixa icona - sobre el mapa. Això afegirà un marcador al mapa, que podeu desplaçar arrossegant-lo. - Afegiu el vostre missatge, deseu-lo i els altres usuaris ho investigaran. - other_concerns: - title: Altres aspectes - explanation_html: Si us preocupa la utilització de les nostres dades o bé el - contingut d'aquestes, consulteu la pàgina de drets d'autor - per a més informació, o bé contacteu el grup - de treball d'OSMF corresponent. - help_page: - title: Obtenir ajuda - introduction: OpenStreetMap té multitud de recursos per conèixer aquest projecte, - per plantejar i respondre preguntes, i per participar en discussions col·laboratives - i documentar temes de cartografia. - welcome: - url: /welcome - title: Benvinguts a l'OSM - description: Comença amb aquesta guia ràpida sobre els aspectes bàsics de l'OpenStreetMap. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Ca:Beginners%27_guide - title: Guia per a principiants - description: Guia per a principiants mantinguda per la comunitat. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Feu una pregunta o busqueu respostes a la pàgina de preguntes i - respostes d'OSM. - mailing_lists: - title: Llistes de correu - description: Pregunta o debat sobre qüestions interessants en relació a una - àmplia sèrie de llistes de correu tòpiques o regionals. - forums: - title: Fòrums - description: Preguntes i debats, per a aquells que prefereixen l'estil de la - interfície d'un tauler d'anuncis. - irc: - title: IRC - description: Xat interactiu en llengües diferents i sobre diferents temes. - switch2osm: - title: switch2osm - description: Ajuda per a empreses i organitzacions que canviïn als mapes i altres - serveis basats en OpenStreetMap. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Navegueu per la wiki per aprofundir en la documentació d'OSM. - about_page: - next: Següent - copyright_html: Col·laboradors de
      ©OpenStreetMap - used_by: '%{name} integra dades de mapes en milers de llocs web, aplicacions per - a mòbils i dispositius de maquinari' - lede_text: OpenStreetMap està construït per una comunitats de catògrafs que contibueixen - i mantenen dades sobre carreteres, senders, cafeteries, estacions de ferrocarril, - i molt més, per tot el món. - local_knowledge_title: Coneixement local - local_knowledge_html: OpenStreetMap potencia el coneixement local. Els contribuïdors - usen imatges aèries, dispositius GPS, i mapes de baixa tecnologia per tal de - verificar que OSM és precís i està actualitzat. - community_driven_title: Dirigit per la comunitat - community_driven_html: |- - La comunitat d'OpenStreetMap és diversa, apassionada, i creix cada dia. Entre els nostres contribuïdors hi ha cartògrafs entusiastes, professionals de GIS, enginyers que posen en funcionament els servidors d'OSM, voluntaris que cartografien les zones afectades per desastres, i molt més. - Si voleu conèixer més sobre la comunitat, vegeu els diaris d'usuari, els blogs de la comunitat, i la pàgina web de la Fundació OSM. - open_data_title: Dades obertes - open_data_html: 'OpenStreetMap són dades lliures: sou lliures d''usar-lo - per a qualsevol propòsit, sempre que doneu crèdit a OpenStreetMap i els seus - contribuïdors. Si modifiqueu o construïu sobre les dades en alguna manera concreta, - podeu distribuir el resultat només sota la mateixa llicència. Vegeu la pàgina - de copyright i llicència per a més detalls.' - legal_title: Avisos legals - legal_html: "Aquest lloc web i molts altres serveis relacionats són operats formalment - per la \nFundació OpenStreetMap (OSMF) - \ en nom de la comunitat. L'ús de tots els serveis operats per l'OSMF es troba - subjecte a les nostres \npolítiques - d'ús acceptable i a les nostres polítiques - de privadesa\n
      \nContacteu - amb l'OSMF \nsi teniu qüestions sobre llicències, drets d'autor o altres - aspectes legals." - partners_title: Socis notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} ha comentat en una entrada de diari' @@ -1441,6 +1133,158 @@ ca: delete: deleted: Missatge suprimit site: + about: + next: Següent + copyright_html: Col·laboradors de
      ©OpenStreetMap + used_by: '%{name} integra dades de mapes en milers de llocs web, aplicacions + per a mòbils i dispositius de maquinari' + lede_text: OpenStreetMap està construït per una comunitats de catògrafs que + contibueixen i mantenen dades sobre carreteres, senders, cafeteries, estacions + de ferrocarril, i molt més, per tot el món. + local_knowledge_title: Coneixement local + local_knowledge_html: OpenStreetMap potencia el coneixement local. Els contribuïdors + usen imatges aèries, dispositius GPS, i mapes de baixa tecnologia per tal + de verificar que OSM és precís i està actualitzat. + community_driven_title: Dirigit per la comunitat + community_driven_html: |- + La comunitat d'OpenStreetMap és diversa, apassionada, i creix cada dia. Entre els nostres contribuïdors hi ha cartògrafs entusiastes, professionals de GIS, enginyers que posen en funcionament els servidors d'OSM, voluntaris que cartografien les zones afectades per desastres, i molt més. + Si voleu conèixer més sobre la comunitat, vegeu els diaris d'usuari, els blogs de la comunitat, i la pàgina web de la Fundació OSM. + open_data_title: Dades obertes + open_data_html: 'OpenStreetMap són dades lliures: sou lliures d''usar-lo + per a qualsevol propòsit, sempre que doneu crèdit a OpenStreetMap i els seus + contribuïdors. Si modifiqueu o construïu sobre les dades en alguna manera + concreta, podeu distribuir el resultat només sota la mateixa llicència. Vegeu + la pàgina de copyright i llicència per a + més detalls.' + legal_title: Avisos legals + legal_html: "Aquest lloc web i molts altres serveis relacionats són operats + formalment per la \nFundació OpenStreetMap + (OSMF) en nom de la comunitat. L'ús de tots els serveis operats per l'OSMF + es troba subjecte a les nostres \npolítiques + d'ús acceptable i a les nostres polítiques + de privadesa\n
      \nContacteu + amb l'OSMF \nsi teniu qüestions sobre llicències, drets d'autor o altres + aspectes legals." + partners_title: Socis + copyright: + foreign: + title: Quant a la traducció + text: En cas de conflicte entre aquesta pàgina traduïda i %{english_original_link}, + la pàgina en anglès té prioritat + english_link: l'original en anglès + native: + title: Sobre aquesta pàgina + text: Esteu veient la versió anglesa de la pàgina de drets d'autor. Podeu + tornar a la %{native_link} d'aquesta pàgina o podeu deixar de llegir sobre + el copyright i anar a %{mapping_link}. + native_link: versió català + mapping_link: Comença a cartografiar + legal_babble: + title_html: Drets d'autor i llicència + intro_1_html: |- + Les dades obertes d'OpenStreetMap® estan publicades sota la llicència de base de dades oberta (ODbL) per la Fundació OpenStreetMap (OSMF). + intro_2_html: "Sou lliure de copiar, distribuir, comunicar públicament i fer-ne + obres \nderivades de les nostres dades, sempre que atribuïu els crèdits + a \nOpenStreetMap i els seus col·laboradors. Si modifiqueu o utilitzeu les\nnostres + dades fer fer obres derivades, només podreu distribuir l'obra \nresultant + amb la mateixa llicència. Aquest \ntext + legal\ncode sencer que explica detalladament els vostres drets i responsabbilitats." + intro_3_html: |- + La cartografia de les nostres tessel·les i la nostra documentació són ofertes + sota llicència Text de la llicència de Creative Commons Reconeixement-Compartir Igual 2.0(CC-BY-SA). + credit_title_html: Com a crèdit OpenStreetMap + credit_1_html: |- + Exigim que l'atribució de drets d'autor sigui “© Col·laboradors d'OpenStreetMap + ”. + credit_2_html: També heu de deixar clar que les dades són disponibles sota + llicència obereta, i si s'utilitzen les nostres tessel·les de mapes, que + la cartografia és llicenciada com CC-BY-SA. Podeu fer això enllaçant a aquest pàgina de copyright. + D'altra banda, i com a requisit obligatori si voleu distribuir OSM en forma + de dades en brut, podeu citar i enllaçar directament a la llicència. En + el cas d'utilitzar suports on els enllaços d'hipertext no són possibles + (per exemple, obres impreses), us suggerim d'adreçar els lectors a openstreetmap.org + (potser indicant l'adreça completa d'OpenStreetMap), a opendatacommons.org + i si s'escau, a creativecommons.org. + credit_3_html: |- + En el cas d'un mapa electrònic navegable, els crèdits han d'aparèixer a la cantonada del mapa. + Per exemple: + attribution_example: + alt: Exemple de com atribuir OpenStreetMap a una pàgina web + title: Exemple d'atribució + more_title_html: Saber-ne més + more_1_html: |- + Llegiu més informació sobre com utilitzar les nostres dades, i com donar-ne crèdit, a la pàgina de llicència OSMF i a les Preguntes + Freqüents sobre legalitat. + more_2_html: Encara que les dades d'OpenStreetMap són dades obertes, no podem + oferir una API gratuïta per als desenvolupadors de terceres parts. Vegeu + la política + d'ús de l'API, la política + d'ús de les tessel·les i la política + d'ús de Nominatim. + contributors_title_html: Els nostres col·laboradors + contributors_intro_html: 'Els nostres col·laboradors són milers de persones. + També incloem dades amb llicència oberta de les agències públiques de cartografia + i d''altres fonts, entre elles:' + contributors_at_html: |- + Àustria: conté dades de + Stadt Wien sota + CC BY. + contributors_ca_html: |- + Canadà: conté dades de + GeoBase ®, GeoGratis (© Departament de Natural + Recursos Canadà), CanVec (© Departament de Natural + Recursos Canadà) i StatCan (Divisió de Geografia, + Canadà de Estadístiques). + contributors_fi_html: 'Finlàndia: Conté dades de la base + de dades topogràfica del National Land Survey of Finland i d''altres bases + de dades, sota la llicència + NLSFI.' + contributors_fr_html: |- + França: conté dades d'origen de + Direcció Générale des Impôts. + contributors_nl_html: 'Països Baixos: Conté © dades + d''Automotive Navigation Data (AND), 2007 (www.and.com)' + contributors_nz_html: |- + Nova Zelanda: conté dades d'origen de + Informació Nova Zelanda de la terra. Corona de drets d'autor reservat. + contributors_si_html: 'Eslovènia: Conté dades de l''Autoritat + de Topografia i Cartografia i el Ministeri + d''Agricultura, Silvicultura i Alimentació (informació pública d''Eslovènia).' + contributors_za_html: |- + Sud-àfrica: conté dades del + Chief Directorate: + National Geo-Spatial Information, drets d'autor reservat per l'estat. + contributors_gb_html: |- + Regne Unit: conté dades del + Ordnance Survey © Drets d'autor de la Corona i de la base de dades + 2010-12. + contributors_footer_1_html: |- + Per a més detalls sobre aquesta i d'altres fonts que han estat utilitzades per millorar els mapes de l'OpenStreetMap, visiteu la pàgina dedicada als Col·laboradors del wiki d'OSM. + contributors_footer_2_html: |- + Inclusió de dades en OpenStreetMap no implica que l'original + el proveïdor de dades recolza OpenStreetMap, proporciona cap garantia, o + accepta qualsevol responsabilitat. + infringement_title_html: Violació dels drets d'autor + infringement_1_html: Recordem als col·laboradors de l'OSM que mai no s'han + d'afegir dades de cap font amb drets d'autor registrats (com Google Maps + o mapes impresos per exemple) sense tenir una autorització explícita dels + titulars dels drets d'autor. + infringement_2_html: Si penseu que hi ha material protegit per drets d'autor + que ha estat afegit a la base de dades d'OpenStreetMap o a aquest web, si + us plau aneu a la pàgina web dedicada al Procediment + per eliminar dades protegides pels drets d'autor o empleneu aquest formulari en línia.. + trademarks_title_html: Marques registrades + trademarks_1_html: OpenStreetMap, el logotip de la lupa i «State of the Map» + són marques registrades de la Fundació OpenStreetMap. Si teniu preguntes + sobre l’ús de les marques, consulteu la política + de marques registrades. index: js_1: Tampoc està utilitzant un navegador que no suporta JavaScript o té deshabilitat JavaScript. @@ -1474,6 +1318,113 @@ ca: id_not_configured: iD no s'ha configurat no_iframe_support: El navegador no suporta iframes HTML, que són necessàries per a aquesta funcionalitat. + export: + title: Exportar + area_to_export: Àrea a exportar + manually_select: Selecciona manualment una àrea diferent + format_to_export: Format d'exportació + osm_xml_data: OpenStreetMap XML Data + map_image: Imatge de mapa (mostra una capa estàndard) + embeddable_html: HTML que es pot incloure + licence: Llicència + export_details: Les dades d'OpenStreetMap són publicades sota el termes de la + llicència Creative + Commons Attribution-ShareAlike 2.0. + too_large: + advice: 'Si falla l''exportació anterior, si us plau, penseu a utilitzar una + de les fonts llistades a continuació:' + body: Aquesta zona és massa gran per ser exportada com a dades XML de OpenStreetMap. + Si us plau seleccioneu una àrea més petita o bé una de les següents fonts + per descarregar quantitats grans de dades. + planet: + title: Planeta OSM + description: Còpies actualitzades regularment de la base de dades d'OpenStreetMap + al complet + overpass: + title: API Overpass + description: Descarrega aquest requadre des d'una rèplica de la base de + dades d'OpenStreetMap + geofabrik: + title: Descàrregues de Geofabrik + description: Extractes actualitzats regularment de continents, països i + de les ciutats seleccionades + metro: + title: Extractes de Metro + description: Extractes per a les ciutats més grans del món i les seves àrees + metropolitanes + other: + title: Altres fonts + description: Fonts addicionals llistades al wiki d'OpenStreetMap + options: Opcions + format: Format + scale: Escala + max: màx + image_size: Mida de la imatge + zoom: Zoom + add_marker: Afegeix un marcador en el mapa + latitude: 'Lat:' + longitude: 'Lon:' + output: Sortida + paste_html: Enganxa HTML per incloure'l al lloc web + export_button: Exporta + fixthemap: + title: Informeu d'un problema / Corregiu el mapa + how_to_help: + title: Com contribuir + join_the_community: + title: Afegiu-vos a la comunitat + explanation_html: Si heu trobat un problema amb les nostres dades del mapa, + com per exemple l'omissió d'una carretera o bé de la vostra adreça, la + millor forma d'arreglar-ho és unint-se a la comunitat d'OpenStreetMap + i afegir o bé corregir les dades vós mateix. + add_a_note: + instructions_html: Feu clic a o a la mateixa icona + sobre el mapa. Això afegirà un marcador al mapa, que podeu desplaçar arrossegant-lo. + Afegiu el vostre missatge, deseu-lo i els altres usuaris ho investigaran. + other_concerns: + title: Altres aspectes + explanation_html: Si us preocupa la utilització de les nostres dades o bé + el contingut d'aquestes, consulteu la pàgina de drets + d'autor per a més informació, o bé contacteu el grup + de treball d'OSMF corresponent. + help: + title: Obtenir ajuda + introduction: OpenStreetMap té multitud de recursos per conèixer aquest projecte, + per plantejar i respondre preguntes, i per participar en discussions col·laboratives + i documentar temes de cartografia. + welcome: + url: /welcome + title: Benvinguts a l'OSM + description: Comença amb aquesta guia ràpida sobre els aspectes bàsics de + l'OpenStreetMap. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Ca:Beginners%27_guide + title: Guia per a principiants + description: Guia per a principiants mantinguda per la comunitat. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Feu una pregunta o busqueu respostes a la pàgina de preguntes + i respostes d'OSM. + mailing_lists: + title: Llistes de correu + description: Pregunta o debat sobre qüestions interessants en relació a una + àmplia sèrie de llistes de correu tòpiques o regionals. + forums: + title: Fòrums + description: Preguntes i debats, per a aquells que prefereixen l'estil de + la interfície d'un tauler d'anuncis. + irc: + title: IRC + description: Xat interactiu en llengües diferents i sobre diferents temes. + switch2osm: + title: switch2osm + description: Ajuda per a empreses i organitzacions que canviïn als mapes i + altres serveis basats en OpenStreetMap. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Navegueu per la wiki per aprofundir en la documentació d'OSM. sidebar: search_results: Resultats de la cerca close: Tanca @@ -1573,6 +1524,57 @@ ca: image: Imatge alt: Text alternatiu url: URL + welcome: + title: Benvingut! + introduction_html: Us donem la benvinguda a l'OpenStreetMap, el mapa lliure + i editable del món. Ara que ja us heu registrat, ja ho teniu tot a punt per + començar a editar el mapa. Aquí hi ha una guia ràpida amb les coses més importants + que cal saber + whats_on_the_map: + title: Què hi ha al mapa + on_html: L'OpenStreetMap és un lloc per incloure al mapa coses que són reals + i normals- això inclou milions d'edificis, carreteres, i altres detalls + sobre llocs. Pots cartografiar totes les característiques del món real que + et semblin interessants. + off_html: El que no inclou són dades subjectives com ara puntuacions, + característiques històriques o hipotètiques i dades de fonts subjectes a + copyright. A no ser que posseeixis un permís especial no copiïs res de mapes + de paper o en línia. + basic_terms: + title: Condicions bàsiques per editar el mapa + paragraph_1_html: l'OpenStreetMap té algunes paraules del seu propi argot. + Aquí hi han unes quantes paraules clau que et poden venir bé. + editor_html: Un editor és un programa o pàgina web que pots + utilitzar per editar el mapa. + node_html: Un node és un punt al mapa, com ara un restaurant + o un arbre. + way_html: Una via és una línia o àrea, com ara una carretera, + sèquia, llac o edifici. + tag_html: Una etiqueta és un recull de dades sobre un node + o una via, com ara el nom d'un restaurant o la velocitat màxima d'una carretera. + rules: + title: Regles + paragraph_1_html: "OpenStreetMap té poques les regles formals, pel que esperem + que tots els participants col·laborin i es comuniquin amb la comunitat. + Si està considerant\naltres activitats que no sigui l'edició manual, si + us plau, llegiu i seguiu les directrius d' \nImportació + i \nEdició + Automàtica." + questions: + title: Alguna pregunta més? + paragraph_1_html: OpenStreetMap té multitud de recursos per conèixer aquest + projecte, per plantejar i respondre preguntes, i per participar en discussions + col·laboratives i documentar temes de cartografia. Visiteu + l'ajuda. + start_mapping: Comença a editar el mapa + add_a_note: + title: No tens temps per editar? Afegeix una nota! + paragraph_1_html: Si només voleu fer una petita modificació però no disposeu + del temps per registrar-vos i aprendre com editar, deixeu una nota al mapa. + paragraph_2_html: 'Només cal que us dirigiu almapa + i cliqueu l''icona de la nota: . Això afegirà + un marcador al mapa que podeu moure arrossegant-lo. Afegiu el vostre missatge, + cliqueu el botó de desat, i altres usuaris ho investigaran.' trace: visibility: private: Privat (només compartit com anònim, el punts són desordenats) @@ -1700,7 +1702,7 @@ ca: a la interfície de web per veure els termes de col. laborador. Vostè no necessita estar d'acord, però cal veure-les. oauth: - oauthorize: + authorize: title: Autoritzar l'accés al vostre compte request_access: L'aplicació %{app_name} sol·licita accés al vostre compte, %{user}. Marqueu si voleu autoritzar l'aplicació amb les següents funcions. Podeu triar @@ -1714,11 +1716,11 @@ ca: allow_write_gpx: carregar traces GPS. allow_write_notes: modificar les notes. grant_access: Concedeix accés - oauthorize_success: + authorize_success: title: Sol·licitud d'autorització permesa allowed: Heu permès que l'aplicació %{app_name} accedeixi al vostre compte. verification: El codi de verificació és %{code}. - oauthorize_failure: + authorize_failure: title: Sol·licitud d'autorització errònia denied: Heu denegat que l'aplicació %{app_name} accedeixi al vostre compte. invalid: El testimoni d’autorització no és vàlid. @@ -2162,7 +2164,7 @@ ca: confirm: Confirma fail: No s'ha pogut revocar el paper "%{role}" des de l'usuari "%{name}". Si us plau, comproveu que l'usuari i el paper són vàlids. - user_block: + user_blocks: model: non_moderator_update: Ha de ser un moderador per crear o un bloc d'actualització. non_moderator_revoke: Ha de ser un moderador per crear o un bloc d'actualització. @@ -2225,20 +2227,6 @@ ca: period: one: 1 hora other: '%{count} hores' - partial: - show: Mostra - edit: Modifica - revoke: Revoca! - confirm: N'esteu segur? - display_name: S'ha blocat l'usuari - creator_name: Creador - reason: Motiu del blocatge - status: Estat - revoker_name: Revocat per - not_revoked: (no revocat) - showing_page: Pàgina %{page} - next: Endavant » - previous: « Enrere helper: time_future: Finalitza en %{time}. until_login: Activa fins que l'usuari es connecta. @@ -2267,8 +2255,22 @@ ca: back: Mostra tots els blocs revoker: 'Revoker:' needs_view: L'usuari ha d'iniciar una sessió abans que es netegi el bloc. - note: - description: + block: + not_revoked: (no revocat) + show: Mostra + edit: Modifica + revoke: Revoca! + blocks: + display_name: S'ha blocat l'usuari + creator_name: Creador + reason: Motiu del blocatge + status: Estat + revoker_name: Revocat per + showing_page: Pàgina %{page} + next: Endavant » + previous: « Enrere + notes: + comment: opened_at_html: Creat fa %{when} opened_at_by_html: Creat fa %{when} per %{user} commented_at_html: Actualitzat fa %{when} @@ -2395,7 +2397,7 @@ ca: distance: Distància errors: no_route: No s'ha pogut establir una ruta entre aquests dos punts. - no_place: No hem pogut trobar aquest lloc – Ens sap greu. + no_place: No hem pogut trobar «%{place}». instructions: continue_without_exit: Continuar a %{name} slight_right_without_exit: Gira lleugerament a la dreta a %{name} @@ -2449,7 +2451,7 @@ ca: show_address: Mostra l'adreça query_features: Consulta les funcionalitats centre_map: Centra el mapa aquí - redaction: + redactions: edit: description: Descripció heading: Modifica la redacció diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 6e3af4b9d..a7129ca68 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -24,8 +24,10 @@ # Author: Mormegil # Author: Mr. Richard Bolla # Author: Nemo bis +# Author: Patriccck # Author: Paxt # Author: Reaperman +# Author: Spotter # Author: StenSoft # Author: Tchoř # Author: Urbanecm @@ -268,7 +270,7 @@ cs: list: title: Sady změn title_user: Sady změn uživatele %{user} - title_friend: Sady změn vaÅ¡ich přátel + title_friend: Sady změn podle mých přátel title_nearby: Sady změn uživatelů poblíž empty: Nebyly nalezeny žádné sady změn. empty_area: Pro tuto oblast neexistují žádné sady změn. @@ -297,7 +299,7 @@ cs: user_title: Deníček uživatele %{user} in_language_title: Deníčkové záznamy v jazyce %{language} new: Nový záznam do deníčku - new_title: Vložit nový záznam do vaÅ¡eho uživatelského deníčku + new_title: Vložit nový záznam do mého uživatelského deníku no_entries: Žádné záznamy v deníčku recent_entries: Nedávné deníčkové záznamy older_entries: Starší záznamy @@ -364,52 +366,6 @@ cs: ago: před %{ago} newer_comments: Novější komentáře older_comments: Starší komentáře - export: - title: Export - start: - area_to_export: Oblast k exportu - manually_select: Ručně vybrat jinou oblast - format_to_export: Formát exportu - osm_xml_data: Data OpenStreetMap XML - map_image: Obrázek mapy (zobrazuje standardní vrstvu) - embeddable_html: Vkládatelné HTML - licence: Licence - export_details: Data OpenStreetMap jsou k dispozici pod licencí Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Pokud se tento export nezdaří, zvažte použití jednoho z následujících - zdrojů:' - body: 'Tato oblast je pro export do XML formátu OpenStreetMap příliÅ¡ velká. - Přejděte na větší měřítko, zvolte menší oblast, nebo použijte jeden z následujících - zdrojů pro stahování velkého množství dat:' - planet: - title: Planeta OSM - description: Pravidelně aktualizované kopie kompletní databáze OpenStreetMap - overpass: - title: Overpass API - description: Stažení této oblasti z databázového zrcadla OpenStreetMap - geofabrik: - title: Soubory Geofabrik - description: Pravidelně aktualizované extrakty kontinentů zemí a vybraných - měst - metro: - title: Extrakty Metro - description: Extrakty pro hlavní světová města a jejich okolí - other: - title: Další zdroje - description: Další zdroje uvedené na wiki OpenStreetMap - options: Možnosti - format: Formát - scale: Měřítko - max: max. - image_size: Velikost obrázku - zoom: Zoom - add_marker: Přidat do mapy značku - latitude: 'Šířka:' - longitude: 'Délka:' - output: Výstup - paste_html: Ke vložení na stránku použijte toto HTML - export_button: Export geocoder: search: title: @@ -1055,232 +1011,6 @@ cs: text: PoÅ¡lete příspěvek learn_more: Více informací more: Další - license_page: - foreign: - title: O tomto překladu - text: V případě rozporů mezi touto přeloženou verzí a %{english_original_link} - má přednost anglická stránka. - english_link: anglickým originálem - native: - title: O této stránce - text: Prohlížíte si anglickou verzi stránky o autorských právech. Můžete se - vrátit na %{native_link} této stránky nebo si přestat číst o autorských právech - a %{mapping_link}. - native_link: českou verzi - mapping_link: začít mapovat - legal_babble: - title_html: Autorská práva a licence - intro_1_html: OpenStreetMap® jsou svobodná - data, která za podmínek Open - Data Commons Open Database License (ODbL) nabízí nadace OpenStreetMap - Foundation (OSMF). - intro_2_html: Smíte kopírovat, distribuovat, sdělovat veřejnosti a upravovat - naÅ¡e data, pokud jako zdroj uvedete OpenStreetMap a jeho přispěvatele. Pokud - naÅ¡e data budete upravovat nebo je použijete ve svém díle, musíte výsledek - šířit pod stejnou licencí. VaÅ¡e práva a povinnosti jsou vysvětleny v plném - licenčním ujednání. - intro_3_html: Kartografická díla v naÅ¡ich mapových dlaždicích a naÅ¡e dokumentace - jsou k dispozici pod licencí Creative - Commons Uveďte autora-Zachovejte licenci 2.0 (CC-BY-SA). - credit_title_html: Jak uvádět OpenStreetMap - credit_1_html: Vyžadujeme uvádění autorství „© Přispěvatelé OpenStreetMap“. - credit_2_html: |- - Také musíte jasně uvést, že data jsou dostupná za podmínek Open Database License, a pokud používáte naÅ¡e mapové dlaždice, že jejich kartografický obsah je licencován pod CC-BY-SA. To můžete splnit odkázáním na tuto stránku. - - Nebo můžete (a pokud šíříte OSM jako data, tak musíte) uvést název licence a odkaz na ni přímo. Pokud používáte médium, které odkazy neumožňuje (např. v tiÅ¡těném díle), navrhujeme, abyste své čtenáře nasměrovali na openstreetmap.org (zřejmě rozšířením „OpenStreetMap“ do této plné adresy), na opendatacommons.org a, pokud se vás to týká, na creativecommons.org. - credit_3_html: |- - U interaktivní elektronické mapy by autorství mělo být uvedeno v rohu mapy. - Příklad: - attribution_example: - alt: Příklad, jak uvádět autorství OpenStreetMap na webové stránce - title: Příklad uvedení autorství - more_title_html: Další informace - more_1_html: O používání naÅ¡ich dat a způsobu uvádění autorství se můžete dočíst - více na licenční stránce OSMF. - more_2_html: |- - Přestože OpenStreetMap tvoří svobodná data, nemůžeme zdarma poskytovat třetím stranám mapové API. - Vizte naÅ¡e Pravidla použití API, Pravidla použití dlaždic a Pravidla použití Nominatimu. - contributors_title_html: NaÅ¡i přispěvatelé - contributors_intro_html: 'NaÅ¡imi přispěvateli jsou tisíce jednotlivců. Také - zahrnujeme svobodně licencovaná data z národních zeměměřických úřadů a dalších - zdrojů, mimo jiné:' - contributors_at_html: 'Rakousko: Obsahuje data od města - Vídně pod CC - BY), země - Vorarlbersko a země Tyrolsko (pod CC - BY AT s dodatky).' - contributors_ca_html: 'Kanada: Obsahuje data z GeoBase®, - GeoGratis (© Department of Natural Resources Canada), CanVec (© - Department of Natural Resources Canada) a StatCan (Geography Division, Statistics - Canada).' - contributors_fi_html: 'Finsko: Obsahuje data z topografické - databáze a dalších zdrojů finského národního zeměměřického úřadu (Maanmittauslaitos) - dostupná pod licencí - NLSFI.' - contributors_fr_html: 'Francie: Obsahuje data pocházející z - Direction Générale des Impôts.' - contributors_nl_html: 'Nizozemsko: Obsahuje © AND data, - 2007 (www.and.com)' - contributors_nz_html: 'Nový Zéland: Obsahuje data pocházející - z Land Information New Zealand. Crown Copyright reserved.' - contributors_si_html: 'Slovinsko: Obsahuje data Zeměměřického - a mapovacího úřadu a Ministerstva zemědělství, - lesnictví a potravin (veřejné informace o Slovinsku).' - contributors_za_html: |- - Jihoafrická republika: Obsahuje data pocházející z Chief Directorate: - National Geo-Spatial Information, State copyright reserved. - contributors_gb_html: 'Spojené království: Obsahuje data Ordnance - Survey © Crown copyright a právo k databázi 2010–12.' - contributors_footer_1_html: |- - Další podrobnosti o těchto a dalších zdrojích, které se používaly pro vylepÅ¡ení OpenStreetMap, najdete na stránce Contributors na wiki OpenStreetMap. - contributors_footer_2_html: Zahrnutí dat do OpenStreetMap neznamená, že původní - poskytovatel dat podporuje OpenStreetMap, nabízí jakoukoli záruku nebo přijímá - jakoukoli zodpovědnost. - infringement_title_html: PoruÅ¡ení autorských práv - infringement_1_html: Přispěvatelům OSM připomínáme, že by nikdy neměli přidávat - data ze zdrojů chráněných autorským právem (např. Google Maps či tiÅ¡těné mapy) - bez výslovného svolení držitelů práv. - infringement_2_html: Pokud si myslíte, že byl do databáze OpenStreetMap nebo - na tento server neoprávněně vložen autorskoprávně chráněný obsah, postupujte - podle naÅ¡eho postupu - pro odstranění nebo přímo podejte výzvu pomocí on-line - formuláře. - trademarks_title_html: Ochranné známky - trademarks_1_html: OpenStreetMap, jeho logo s lupou a State of the Map jsou - zapsané ochranné známky OpenStreetMap Foundation. Pokud máte dotazy ohledně - vaÅ¡eho používání těchto známek, zaÅ¡lete své dotazy pracovní - skupině pro licencování. - welcome_page: - title: Vítejte! - introduction_html: Vítejte v OpenStreetMap, svobodné a editovatelné mapě světa. - Teď, když jste se zaregistrovali, můžete začít mapovat. Tady je rychlý přehled - nejdůležitějších věcí, které budete potřebovat znát. - whats_on_the_map: - title: Co patří do mapy - on_html: OpenStreetMap je místem pro mapování věcí, které jsou zároveň skutečné - a aktuální – zahrnuje miliony budov, silnic a dalších podrobností o místech. - Můžete mapovat jakékoli skutečné objekty, které vás zajímají. - off_html: Co nezahrnuje jsou názory jako hodnocení, dřívější či hypotetické - objekty a data ze zdrojů chráněných autorským právem. Pokud nemáte speciální - svolení, nekopírujte z online nebo papírových map. - basic_terms: - title: Základní pojmy pro mapování - paragraph_1_html: OpenStreetMap používá trochu vlastního žargonu. Tady je několik - klíčových slov, která se vám budou hodit. - editor_html: Editor je program nebo webová stránka, pomocí - které editujete mapu. - node_html: Uzel je bod na mapě jako např. jedna restaurace - či strom. - way_html: Cesta je linie nebo plocha jako např. silnice, potok, - jezero nebo budova. - tag_html: Tag je troÅ¡ka dat o uzlu nebo cestě jako např. název - restaurace nebo maximální povolená rychlost na silnici. - rules: - title: Pravidla! - paragraph_1_html: OpenStreetMap má jen málo formálních pravidel, ale od vÅ¡ech - účastníků očekáváme, že budou spolupracovat a komunikovat s komunitou. Pokud - zvažujete jakoukoli jinou činnost než ruční editování, přečtěte si prosím - a dodržujte pokyny na stránkách Importy - a Automatizované - editace. - questions: - title: Nějaké dotazy? - paragraph_1_html: |- - OpenStreetMap nabízí několik zdrojů pro informace o projektu, otázky a odpovědi a kolaborativní diskuse a dokumentace mapových témat. - Zde můžete získat pomoc. - start_mapping: Začít mapovat - add_a_note: - title: Nemáte čas editovat? Přidejte poznámku! - paragraph_1_html: Pokud chcete jen opravit nějakou drobnost a nemáte čas se - registrovat a učit se editovat, můžete jednoduÅ¡e přidat poznámku. - paragraph_2_html: |- - Stačí jít na mapu a kliknout na ikonku poznámky: - . Tím do mapy přidáte značku, kterou můžete přetáhnout. - NapiÅ¡te svou zprávu, klikněte na Přidat a ostatní tvůrci mapy se na to podívají. - fixthemap: - title: Nahlásit problém / opravit mapu - how_to_help: - title: Jak pomoci - join_the_community: - title: Přidejte se ke komunitě - explanation_html: Pokud jste si vÅ¡imli nějakého nedostatku naÅ¡ich mapových - dat, např. chybějící silnice nebo vaÅ¡e adresa, nejlepším řeÅ¡ením je připojit - se ke komunitě OpenStreetMap a přidat nebo opravit data vlastnoručně. - add_a_note: - instructions_html: |- - Stačí kliknout na nebo na stejnou ikonku na zobrazené mapě. - Tím do mapy přidáte značku, kterou můžete přesunout tažením myší. Přidejte svou zprávu a klikněte na uložit a ostatní uživatelé se na to podívají. - other_concerns: - title: Jiné problémy - explanation_html: |- - Pokud máte pochyby o používání naÅ¡ich dat nebo jejich obsahu, na naší - stránce o autorských právech naleznete více právních informací, případně kontaktujte - přísluÅ¡nou pracovní skupinu OSMF. - help_page: - title: Nápověda - introduction: OpenStreetMap nabízí několik zdrojů pro informace o projektu, otázky - a odpovědi a kolaborativní diskuse a dokumentace mapových témat. - welcome: - url: /welcome - title: Vítejte v OSM - description: Začněte tímto rychlým průvodcem zahrnujícím základy OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Cs:Pr%C5%AFvodce_za%C4%8D%C3%A1te%C4%8Dn%C3%ADka - title: Průvodce začátečníka - description: Komunitou spravovaná příručka pro začátečníky. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Položte dotaz nebo vyhledejte odpovědi na stránce otázek a odpovědí - týkajících se OSM. - mailing_lists: - title: E-mailové konference - description: Položte dotaz nebo diskutujte o zajímavých věcech na některé ze - Å¡iroké nabídky tematických či regionálních e-mailových konferencí. - forums: - title: Diskusní fóra - description: Otázky a diskuse pro ty, kteří preferují rozhraní v nástěnkovém - stylu. - irc: - title: IRC - description: Interaktivní chat v mnoha jazycích a na mnoho témat. - switch2osm: - title: switch2osm - description: Pomoc společnostem a organizacím s přechodem na mapy a další služby - založené na OpenStreetMap. - wiki: - url: https://wiki.openstreetmap.org/wiki/Cs:Main_Page?uselang=cs - title: wiki.openstreetmap.org - description: Podrobnou dokumentaci OSM najdete na wiki. - about_page: - next: Další - copyright_html: ©přispěvatelé
      OpenStreetMap - used_by: Díky %{name} fungují mapová data na tisících webových stránek, mobilních - aplikací a hardwarových zařízení - lede_text: OpenStreetMap tvoří komunita uživatelů, kteří přidávají a udržují data - o silnicích, cestách, kavárnách, železničních stanicích a mnohém dalším po celém - světě. - local_knowledge_title: Místní znalost - local_knowledge_html: OpenStreetMap klade důraz na místní znalost. Přispěvatelé - využívají letecké snímky, GPS přístroje a klasické mapy, aby ověřili, že OSM - je přesné a aktuální. - community_driven_title: Řízeno komunitou - community_driven_html: |- - Komunita OpenStreetMap je různorodá, vášnivá a každý den se rozrůstá. Mezi našimi přispěvateli najdete amatérské kreslíře map, profesionály z oblasti GIS, techniky spravující servery OSM, humanitární pracovníky mapující oblasti zasažené neštěstím a mnohé další. - Pokud se chcete o komunitě dozvědět více, prohlédněte si blog OpenStreetMap, uživatelské deníčky, komunitní blogy a webovou stránku nadace OSM Foundation. - open_data_title: Otevřená data - open_data_html: 'OpenStreetMap tvoří otevřená data: smíte je užívat pro - libovolný účel, pokud uvádíte autorství OpenStreetMap a jeho přispěvatelů. Pokud - data měníte nebo rozšiřujete jistými způsoby, smíte výsledek šířit jen pod stejnou - licencí. Podrobnosti najdete na stránce Autorská - práva a licence.' - legal_title: Právní informace - legal_html: |- - Tento web a mnoho dalších souvisejících služeb za komunitu oficiálně provozuje OpenStreetMap Foundation (OSMF). Použití všech služeb provozovaných OSMF podléhá našim Pravidlům přijatelného užití a našim Pravidlům ochrany osobních údajů. -
      - Pokud máte problémy či dotazy týkající se licencování, autorských práv či jiných právních záležitostí, kontaktujte prosím OSMF. - partners_title: Partneři notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} okomentoval deníčkový záznam' @@ -1476,6 +1206,131 @@ cs: delete: deleted: Zpráva smazána site: + about: + next: Další + copyright_html: ©přispěvatelé
      OpenStreetMap + used_by: Díky %{name} fungují mapová data na tisících webových stránek, mobilních + aplikací a hardwarových zařízení + lede_text: OpenStreetMap tvoří komunita uživatelů, kteří přidávají a udržují + data o silnicích, cestách, kavárnách, železničních stanicích a mnohém dalším + po celém světě. + local_knowledge_title: Místní znalost + local_knowledge_html: OpenStreetMap klade důraz na místní znalost. Přispěvatelé + využívají letecké snímky, GPS přístroje a klasické mapy, aby ověřili, že OSM + je přesné a aktuální. + community_driven_title: Řízeno komunitou + community_driven_html: |- + Komunita OpenStreetMap je různorodá, vášnivá a každý den se rozrůstá. Mezi našimi přispěvateli najdete amatérské kreslíře map, profesionály z oblasti GIS, techniky spravující servery OSM, humanitární pracovníky mapující oblasti zasažené neštěstím a mnohé další. + Pokud se chcete o komunitě dozvědět více, prohlédněte si blog OpenStreetMap, uživatelské deníčky, komunitní blogy a webovou stránku nadace OSM Foundation. + open_data_title: Otevřená data + open_data_html: 'OpenStreetMap tvoří otevřená data: smíte je užívat pro + libovolný účel, pokud uvádíte autorství OpenStreetMap a jeho přispěvatelů. + Pokud data měníte nebo rozšiřujete jistými způsoby, smíte výsledek šířit jen + pod stejnou licencí. Podrobnosti najdete na stránce Autorská + práva a licence.' + legal_title: Právní informace + legal_html: |- + Tento web a mnoho dalších souvisejících služeb za komunitu oficiálně provozuje OpenStreetMap Foundation (OSMF). Použití všech služeb provozovaných OSMF podléhá našim Pravidlům přijatelného užití a našim Pravidlům ochrany osobních údajů. +
      + Pokud máte problémy či dotazy týkající se licencování, autorských práv či jiných právních záležitostí, kontaktujte prosím OSMF. + partners_title: Partneři + copyright: + foreign: + title: O tomto překladu + text: V případě rozporů mezi touto přeloženou verzí a %{english_original_link} + má přednost anglická stránka. + english_link: anglickým originálem + native: + title: O této stránce + text: Prohlížíte si anglickou verzi stránky o autorských právech. Můžete se + vrátit na %{native_link} této stránky nebo si přestat číst o autorských + právech a %{mapping_link}. + native_link: českou verzi + mapping_link: začít mapovat + legal_babble: + title_html: Autorská práva a licence + intro_1_html: OpenStreetMap® jsou + svobodná data, která za podmínek Open + Data Commons Open Database License (ODbL) nabízí nadace OpenStreetMap + Foundation (OSMF). + intro_2_html: Smíte kopírovat, distribuovat, sdělovat veřejnosti a upravovat + naÅ¡e data, pokud jako zdroj uvedete OpenStreetMap a jeho přispěvatele. Pokud + naÅ¡e data budete upravovat nebo je použijete ve svém díle, musíte výsledek + šířit pod stejnou licencí. VaÅ¡e práva a povinnosti jsou vysvětleny v plném + licenčním ujednání. + intro_3_html: Kartografická díla v naÅ¡ich mapových dlaždicích a naÅ¡e dokumentace + jsou k dispozici pod licencí Creative + Commons Uveďte autora-Zachovejte licenci 2.0 (CC-BY-SA). + credit_title_html: Jak uvádět OpenStreetMap + credit_1_html: Vyžadujeme uvádění autorství „© Přispěvatelé OpenStreetMap“. + credit_2_html: |- + Také musíte jasně uvést, že data jsou dostupná za podmínek Open Database License, a pokud používáte naÅ¡e mapové dlaždice, že jejich kartografický obsah je licencován pod CC-BY-SA. To můžete splnit odkázáním na tuto stránku. + + Nebo můžete (a pokud šíříte OSM jako data, tak musíte) uvést název licence a odkaz na ni přímo. Pokud používáte médium, které odkazy neumožňuje (např. v tiÅ¡těném díle), navrhujeme, abyste své čtenáře nasměrovali na openstreetmap.org (zřejmě rozšířením „OpenStreetMap“ do této plné adresy), na opendatacommons.org a, pokud se vás to týká, na creativecommons.org. + credit_3_html: |- + U interaktivní elektronické mapy by autorství mělo být uvedeno v rohu mapy. + Příklad: + attribution_example: + alt: Příklad, jak uvádět autorství OpenStreetMap na webové stránce + title: Příklad uvedení autorství + more_title_html: Další informace + more_1_html: O používání naÅ¡ich dat a způsobu uvádění autorství se můžete + dočíst více na licenční stránce + OSMF. + more_2_html: |- + Přestože OpenStreetMap tvoří svobodná data, nemůžeme zdarma poskytovat třetím stranám mapové API. + Vizte naÅ¡e Pravidla použití API, Pravidla použití dlaždic a Pravidla použití Nominatimu. + contributors_title_html: NaÅ¡i přispěvatelé + contributors_intro_html: 'NaÅ¡imi přispěvateli jsou tisíce jednotlivců. Také + zahrnujeme svobodně licencovaná data z národních zeměměřických úřadů a dalších + zdrojů, mimo jiné:' + contributors_at_html: 'Rakousko: Obsahuje data od města + Vídně pod CC + BY), země + Vorarlbersko a země Tyrolsko (pod CC + BY AT s dodatky).' + contributors_ca_html: 'Kanada: Obsahuje data z GeoBase®, + GeoGratis (© Department of Natural Resources Canada), CanVec (© + Department of Natural Resources Canada) a StatCan (Geography Division, Statistics + Canada).' + contributors_fi_html: 'Finsko: Obsahuje data z topografické + databáze a dalších zdrojů finského národního zeměměřického úřadu (Maanmittauslaitos) + dostupná pod licencí + NLSFI.' + contributors_fr_html: 'Francie: Obsahuje data pocházející + z Direction Générale des Impôts.' + contributors_nl_html: 'Nizozemsko: Obsahuje © AND data, + 2007 (www.and.com)' + contributors_nz_html: 'Nový Zéland: Obsahuje data pocházející + z Land Information New Zealand. Crown Copyright reserved.' + contributors_si_html: 'Slovinsko: Obsahuje data Zeměměřického + a mapovacího úřadu a Ministerstva + zemědělství, lesnictví a potravin (veřejné informace o Slovinsku).' + contributors_za_html: |- + Jihoafrická republika: Obsahuje data pocházející z Chief Directorate: + National Geo-Spatial Information, State copyright reserved. + contributors_gb_html: 'Spojené království: Obsahuje data + Ordnance Survey © Crown copyright a právo k databázi 2010–12.' + contributors_footer_1_html: |- + Další podrobnosti o těchto a dalších zdrojích, které se používaly pro vylepÅ¡ení OpenStreetMap, najdete na stránce Contributors na wiki OpenStreetMap. + contributors_footer_2_html: Zahrnutí dat do OpenStreetMap neznamená, že původní + poskytovatel dat podporuje OpenStreetMap, nabízí jakoukoli záruku nebo přijímá + jakoukoli zodpovědnost. + infringement_title_html: PoruÅ¡ení autorských práv + infringement_1_html: Přispěvatelům OSM připomínáme, že by nikdy neměli přidávat + data ze zdrojů chráněných autorským právem (např. Google Maps či tiÅ¡těné + mapy) bez výslovného svolení držitelů práv. + infringement_2_html: Pokud si myslíte, že byl do databáze OpenStreetMap nebo + na tento server neoprávněně vložen autorskoprávně chráněný obsah, postupujte + podle naÅ¡eho postupu + pro odstranění nebo přímo podejte výzvu pomocí on-line + formuláře. + trademarks_title_html: Ochranné známky + trademarks_1_html: OpenStreetMap, jeho logo s lupou a State of the Map jsou + zapsané ochranné známky OpenStreetMap Foundation. Pokud máte dotazy ohledně + vaÅ¡eho používání těchto známek, zaÅ¡lete své dotazy pracovní + skupině pro licencování. index: js_1: Buď používáte prohlížeč bez podpory JavaScriptu, nebo máte JavaScript zakázaný. @@ -1507,6 +1362,110 @@ cs: id_not_configured: iD nebyl nakonfigurován no_iframe_support: Váš prohlížeč nepodporuje vložené HTML rámy (iframes), které jsou pro tuto funkci nezbytné. + export: + title: Export + area_to_export: Oblast k exportu + manually_select: Ručně vybrat jinou oblast + format_to_export: Formát exportu + osm_xml_data: Data OpenStreetMap XML + map_image: Obrázek mapy (zobrazuje standardní vrstvu) + embeddable_html: Vkládatelné HTML + licence: Licence + export_details: Data OpenStreetMap jsou k dispozici pod licencí Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Pokud se tento export nezdaří, zvažte použití jednoho z následujících + zdrojů:' + body: 'Tato oblast je pro export do XML formátu OpenStreetMap příliÅ¡ velká. + Přejděte na větší měřítko, zvolte menší oblast, nebo použijte jeden z následujících + zdrojů pro stahování velkého množství dat:' + planet: + title: Planeta OSM + description: Pravidelně aktualizované kopie kompletní databáze OpenStreetMap + overpass: + title: Overpass API + description: Stažení této oblasti z databázového zrcadla OpenStreetMap + geofabrik: + title: Soubory Geofabrik + description: Pravidelně aktualizované extrakty kontinentů zemí a vybraných + měst + metro: + title: Extrakty Metro + description: Extrakty pro hlavní světová města a jejich okolí + other: + title: Další zdroje + description: Další zdroje uvedené na wiki OpenStreetMap + options: Možnosti + format: Formát + scale: Měřítko + max: max. + image_size: Velikost obrázku + zoom: Zoom + add_marker: Přidat do mapy značku + latitude: 'Šířka:' + longitude: 'Délka:' + output: Výstup + paste_html: Ke vložení na stránku použijte toto HTML + export_button: Export + fixthemap: + title: Nahlásit problém / opravit mapu + how_to_help: + title: Jak pomoci + join_the_community: + title: Přidejte se ke komunitě + explanation_html: Pokud jste si vÅ¡imli nějakého nedostatku naÅ¡ich mapových + dat, např. chybějící silnice nebo vaÅ¡e adresa, nejlepším řeÅ¡ením je připojit + se ke komunitě OpenStreetMap a přidat nebo opravit data vlastnoručně. + add_a_note: + instructions_html: |- + Stačí kliknout na nebo na stejnou ikonku na zobrazené mapě. + Tím do mapy přidáte značku, kterou můžete přesunout tažením myší. Přidejte svou zprávu a klikněte na uložit a ostatní uživatelé se na to podívají. + other_concerns: + title: Jiné problémy + explanation_html: |- + Pokud máte pochyby o používání naÅ¡ich dat nebo jejich obsahu, na naší + stránce o autorských právech naleznete více právních informací, případně kontaktujte + přísluÅ¡nou pracovní skupinu OSMF. + help: + title: Nápověda + introduction: OpenStreetMap nabízí několik zdrojů pro informace o projektu, + otázky a odpovědi a kolaborativní diskuse a dokumentace mapových témat. + welcome: + url: /welcome + title: Vítejte v OSM + description: Začněte tímto rychlým průvodcem zahrnujícím základy OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Cs:Pr%C5%AFvodce_za%C4%8D%C3%A1te%C4%8Dn%C3%ADka + title: Průvodce začátečníka + description: Komunitou spravovaná příručka pro začátečníky. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Položte dotaz nebo vyhledejte odpovědi na stránce otázek a odpovědí + týkajících se OSM. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: E-mailové konference + description: Položte dotaz nebo diskutujte o zajímavých věcech na některé + ze Å¡iroké nabídky tematických či regionálních e-mailových konferencí. + forums: + url: http://forum.openstreetmap.org/ + title: Diskusní fóra + description: Otázky a diskuse pro ty, kteří preferují rozhraní v nástěnkovém + stylu. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Interaktivní chat v mnoha jazycích a na mnoho témat. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Pomoc společnostem a organizacím s přechodem na mapy a další + služby založené na OpenStreetMap. + wiki: + url: https://wiki.openstreetmap.org/wiki/Cs:Main_Page?uselang=cs + title: wiki.openstreetmap.org + description: Podrobnou dokumentaci OSM najdete na wiki. sidebar: search_results: Výsledky hledání close: Zavřít @@ -1607,6 +1566,53 @@ cs: image: Obrázek alt: Alternativní text url: URL + welcome: + title: Vítejte! + introduction_html: Vítejte v OpenStreetMap, svobodné a editovatelné mapě světa. + Teď, když jste se zaregistrovali, můžete začít mapovat. Tady je rychlý přehled + nejdůležitějších věcí, které budete potřebovat znát. + whats_on_the_map: + title: Co patří do mapy + on_html: OpenStreetMap je místem pro mapování věcí, které jsou zároveň skutečné + a aktuální – zahrnuje miliony budov, silnic a dalších podrobností o + místech. Můžete mapovat jakékoli skutečné objekty, které vás zajímají. + off_html: Co nezahrnuje jsou názory jako hodnocení, dřívější či hypotetické + objekty a data ze zdrojů chráněných autorským právem. Pokud nemáte speciální + svolení, nekopírujte z online nebo papírových map. + basic_terms: + title: Základní pojmy pro mapování + paragraph_1_html: OpenStreetMap používá trochu vlastního žargonu. Tady je + několik klíčových slov, která se vám budou hodit. + editor_html: Editor je program nebo webová stránka, pomocí + které editujete mapu. + node_html: Uzel je bod na mapě jako např. jedna restaurace + či strom. + way_html: Cesta je linie nebo plocha jako např. silnice, + potok, jezero nebo budova. + tag_html: Tag je troÅ¡ka dat o uzlu nebo cestě jako např. + název restaurace nebo maximální povolená rychlost na silnici. + rules: + title: Pravidla! + paragraph_1_html: OpenStreetMap má jen málo formálních pravidel, ale od vÅ¡ech + účastníků očekáváme, že budou spolupracovat a komunikovat s komunitou. Pokud + zvažujete jakoukoli jinou činnost než ruční editování, přečtěte si prosím + a dodržujte pokyny na stránkách Importy + a Automatizované + editace. + questions: + title: Nějaké dotazy? + paragraph_1_html: |- + OpenStreetMap nabízí několik zdrojů pro informace o projektu, otázky a odpovědi a kolaborativní diskuse a dokumentace mapových témat. + Zde můžete získat pomoc. + start_mapping: Začít mapovat + add_a_note: + title: Nemáte čas editovat? Přidejte poznámku! + paragraph_1_html: Pokud chcete jen opravit nějakou drobnost a nemáte čas se + registrovat a učit se editovat, můžete jednoduÅ¡e přidat poznámku. + paragraph_2_html: |- + Stačí jít na mapu a kliknout na ikonku poznámky: + . Tím do mapy přidáte značku, kterou můžete přetáhnout. + NapiÅ¡te svou zprávu, klikněte na Přidat a ostatní tvůrci mapy se na to podívají. trace: visibility: private: Soukromá (veřejně dostupná jedině jako anonymní, neuspořádané body) @@ -1651,6 +1657,7 @@ cs: trace_header: upload_trace: Nahrát stopu see_all_traces: Zobrazit vÅ¡echny stopy + see_my_traces: Zobrazit mé stopy traces_waiting: few: Na zpracování čekají %{count} vaÅ¡e stopy. Zvažte, zda by nebylo před nahráním dalších lepší počkat, dokud nebudou zpracovány, abyste neblokovali @@ -1682,6 +1689,7 @@ cs: delete_track: Smazat tuto stopu trace_not_found: Stopa nenalezena! visibility: 'Viditelnost:' + confirm_delete: Smazat tuto stopu? trace_paging_nav: showing_page: Stránka %{page} older: Starší stopy @@ -1704,6 +1712,7 @@ cs: map: mapa list: public_traces: Veřejné GPS stopy + my_traces: Moje GPS stopy public_traces_from: Veřejné GPS stopy uživatele %{user} description: Procházení nedávno nahraných GPS stop tagged_with: se Å¡títky %{tags} @@ -1740,7 +1749,7 @@ cs: do webového rozhraní a přečtěte si Podmínky pro přispěvatele. Nemusíte je odsouhlasit, musíte si je ale zobrazit. oauth: - oauthorize: + authorize: title: Autorizovat přístup k vaÅ¡emu účtu request_access: Aplikace %{app_name} žádá o přístup k vaÅ¡emu účtu %{user}. Vyberte si, zda si přejete, aby aplikace měla následující oprávnění. Můžete jich zvolit @@ -1754,11 +1763,11 @@ cs: allow_write_gpx: nahrávat GPS stopy. allow_write_notes: měnit poznámky. grant_access: Udělit přístup - oauthorize_success: + authorize_success: title: Požadavek na autorizaci povolen allowed: Udělili jste aplikaci %{app_name} přístup k vaÅ¡emu účtu. verification: Ověřovací kód je %{code}. - oauthorize_failure: + authorize_failure: title: Požadavek na autorizaci se nezdařil denied: Odepřeli jste aplikaci %{app_name} přístup k vaÅ¡emu účtu. invalid: Autorizační token je neplatný. @@ -1998,6 +2007,7 @@ cs: if set location: Pokud chcete vidět blízké uživatele, nastavte si na stránce %{settings_link} domácí souřadnice. settings_link_text: nastavení + my friends: Moji přátelé no friends: Zatím jste nepřidali žádné přátele. km away: '%{count} km' m away: '%{count} m' @@ -2197,7 +2207,7 @@ cs: confirm: Potvrdit fail: Nelze odebrat roli `%{role}' uživateli `%{name}'. Zkontrolujte prosím, zda jsou uživatel i role platnými údaji. - user_block: + user_blocks: model: non_moderator_update: K vytvoření nebo aktualizaci bloku musíte být moderátorem. non_moderator_revoke: Pro zruÅ¡ení bloku musíte být moderátorem. @@ -2257,20 +2267,6 @@ cs: period: one: 1 hodina other: '%{count} hodiny' - partial: - show: Zobrazit - edit: Upravit - revoke: ZruÅ¡it ! - confirm: Jste si jistý? - display_name: Zablokovaný uživatel - creator_name: Autor - reason: Důvod pro blok - status: Stav - revoker_name: ZruÅ¡il - not_revoked: (nezruÅ¡eno) - showing_page: Stránka %{page} - next: Následující » - previous: « Předchozí helper: time_future: Končí za %{time}. until_login: Aktivní dokud se uživatel nepřihlásí. @@ -2300,8 +2296,22 @@ cs: back: Zobrazit vÅ¡echny bloky revoker: 'ZruÅ¡il:' needs_view: Aby se blok smazal, uživatel se musí nejprve přihlásit. - note: - description: + block: + not_revoked: (nezruÅ¡eno) + show: Zobrazit + edit: Upravit + revoke: ZruÅ¡it ! + blocks: + display_name: Zablokovaný uživatel + creator_name: Autor + reason: Důvod pro blok + status: Stav + revoker_name: ZruÅ¡il + showing_page: Stránka %{page} + next: Následující » + previous: « Předchozí + notes: + comment: opened_at_html: Vytvořeno před %{when} opened_at_by_html: Vytvořeno před %{when} uživatelem %{user} commented_at_html: Aktualizováno před %{when} @@ -2430,7 +2440,7 @@ cs: distance: Vzdálenost errors: no_route: Nepodařilo se nalézt trasu mezi zadanými místy. - no_place: Nepodařilo se nám najít zadané místo. + no_place: Omlouváme se – nepodařilo se nám najít „%{place}“. instructions: continue_without_exit: Pokračujte na %{name} slight_right_without_exit: Mírně vpravo na %{name} @@ -2450,6 +2460,7 @@ cs: onramp_right_with_name_directions: Odbočte vpravo na nájezd na %{name}, směrem na %{directions} onramp_right_without_directions: Odbočte vpravo na nájezd + onramp_right: Odbočte doprava na nájezd endofroad_right_without_exit: Na konci silnice odbočte vpravo na %{name} merge_right_without_exit: Připojte se vpravo na %{name} fork_right_without_exit: Na rozcestí odbočte vpravo na %{name} @@ -2474,6 +2485,7 @@ cs: onramp_left_with_name_directions: Odbočte vlevo na nájezd na %{name}, směrem na %{directions} onramp_left_without_directions: Odbočte vlevo na nájezd + onramp_left: Odbočte vlevo na nájezd endofroad_left_without_exit: Na konci silnice odbočte vlevo na %{name} merge_left_without_exit: Připojte se vlevo na %{name} fork_left_without_exit: Na rozcestí odbočte vlevo na %{name} @@ -2510,7 +2522,7 @@ cs: show_address: Zobrazit adresu query_features: Průzkum prvků centre_map: Zde vystředit mapu - redaction: + redactions: edit: description: Popis heading: Upravit redakci diff --git a/config/locales/cy.yml b/config/locales/cy.yml index b9971430b..bcaf53750 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -329,34 +329,6 @@ cy: ago: '%{ago} yn ôl' newer_comments: Sylwadau mwy diweddar older_comments: Hen Sylwadau - export: - title: Allforio - start: - area_to_export: Ardal i'w Hallforio - manually_select: Dewisiwch ardal wahanol - format_to_export: Fformatiwch i'w Hallforio - osm_xml_data: Data XML OpenStreetMap - map_image: Delwedd y Map (dangoser yr haen safonol) - embeddable_html: Mewnosod HTML - licence: Trwydded - export_details: Trwyddedir OpenStreetMap ar drwydded Comin - Data Agored (Open Data Commons Open Database License) (ODbL). - too_large: - advice: 'Os yw''r allforio''n methu, ystyriwch un o''r canlynol:' - other: - title: Ffynonellau eraill - description: Ffynonellau ychwanegol a nodir ar wici OpenStreetMap - options: Dewisiadau - format: Fformat - scale: Graddfa - max: uchafswm - image_size: Maint y ddelwedd - zoom: Chwyddo - add_marker: Ychwanegwch bin ar y map - latitude: 'Lledred:' - longitude: 'Hydred:' - output: Allbwn - export_button: Allforio geocoder: search: title: @@ -989,62 +961,6 @@ cy: text: Gwneud Cyfraniad learn_more: Dysgu Mwy more: Mwy - license_page: - foreign: - title: Ynghylch y cyfieithiad hwn - text: Os oes gwrthgyferbyniad rhwng y cyfieithiad hwn a %{english_original_link}, - bydd y dudalen Saesneg yn cael blaenoriaeth. - english_link: y Saesneg gwreiddiol - native: - title: Ynghylch y dudalen hon - native_link: Cymraeg - mapping_link: dechrau mapio - legal_babble: - title_html: Hawlfraint a Thrwydded - intro_1_html: |- - Mae OpenStreetMap yn data agored, dan drwydded Open Data - Commons Open Database License (ODbL). - credit_title_html: Sut i gydnabod OpenStreetMap - attribution_example: - title: Enghraifft o gydnabyddiaeth - more_title_html: Darganfod rhagor - contributors_title_html: Ein cyfrannwyr - contributors_gb_html: "Y Deyrnas Gyfunol: Cynhwysir data a - thestun gan yr Arolwg Ordnans; hawlfraint y Goron a hawl cronfa ddata \n2010-12." - infringement_title_html: Torrwyd yr hawlfraint - welcome_page: - title: Croeso! - whats_on_the_map: - title: Beth sydd ar y Map - basic_terms: - title: Termau syml mapio - questions: - title: Unrhyw gwestiwn? - start_mapping: Dechrau Mapio - add_a_note: - title: Dim amser i olygu? Ychwanegwch nodyn! - fixthemap: - title: Adrodd am broblem / Cywiro map - how_to_help: - title: Sut i Helpu - join_the_community: - title: Ymunwch â'r gymuned - other_concerns: - title: Gofidion eraill - help_page: - title: Cael Cymorth - welcome: - url: /croeso - title: Croeso i OSM - beginners_guide: - title: Llawlyfr Dechreuwyr - about_page: - next: Nesaf - copyright_html: ©cyfrannwyr
      OpenStreetMap - local_knowledge_title: Gwybodaeth Leol - open_data_title: Data Agored - partners_title: Partneriaid notifier: message_notification: hi: Pa hwyl %{to_user}? @@ -1124,6 +1040,37 @@ cy: delete: deleted: Dileuwyd y neges site: + about: + next: Nesaf + copyright_html: ©cyfrannwyr
      OpenStreetMap + local_knowledge_title: Gwybodaeth Leol + open_data_title: Data Agored + partners_title: Partneriaid + copyright: + foreign: + title: Ynghylch y cyfieithiad hwn + text: Os oes gwrthgyferbyniad rhwng y cyfieithiad hwn a %{english_original_link}, + bydd y dudalen Saesneg yn cael blaenoriaeth. + english_link: y Saesneg gwreiddiol + native: + title: Ynghylch y dudalen hon + native_link: Cymraeg + mapping_link: dechrau mapio + legal_babble: + title_html: Hawlfraint a Thrwydded + intro_1_html: |- + Mae OpenStreetMap yn data agored, dan drwydded Open Data + Commons Open Database License (ODbL). + credit_title_html: Sut i gydnabod OpenStreetMap + attribution_example: + title: Enghraifft o gydnabyddiaeth + more_title_html: Darganfod rhagor + contributors_title_html: Ein cyfrannwyr + contributors_gb_html: "Y Deyrnas Gyfunol: Cynhwysir data + a thestun gan yr Arolwg Ordnans; hawlfraint y Goron a hawl cronfa ddata + \n2010-12." + infringement_title_html: Torrwyd yr hawlfraint index: shortlink: Dolen Fyr createnote: Ychwanegu nodyn @@ -1133,6 +1080,48 @@ cy: not_public: Nid ydych wedi gosod eich golygiadau i fod yn gyhoeddus. user_page_link: tudalen defnyddiwr anon_edits_link_text: Darganfyddwch achos hyn. + export: + title: Allforio + area_to_export: Ardal i'w Hallforio + manually_select: Dewisiwch ardal wahanol + format_to_export: Fformatiwch i'w Hallforio + osm_xml_data: Data XML OpenStreetMap + map_image: Delwedd y Map (dangoser yr haen safonol) + embeddable_html: Mewnosod HTML + licence: Trwydded + export_details: Trwyddedir OpenStreetMap ar drwydded Comin + Data Agored (Open Data Commons Open Database License) (ODbL). + too_large: + advice: 'Os yw''r allforio''n methu, ystyriwch un o''r canlynol:' + other: + title: Ffynonellau eraill + description: Ffynonellau ychwanegol a nodir ar wici OpenStreetMap + options: Dewisiadau + format: Fformat + scale: Graddfa + max: uchafswm + image_size: Maint y ddelwedd + zoom: Chwyddo + add_marker: Ychwanegwch bin ar y map + latitude: 'Lledred:' + longitude: 'Hydred:' + output: Allbwn + export_button: Allforio + fixthemap: + title: Adrodd am broblem / Cywiro map + how_to_help: + title: Sut i Helpu + join_the_community: + title: Ymunwch â'r gymuned + other_concerns: + title: Gofidion eraill + help: + title: Cael Cymorth + welcome: + url: /croeso + title: Croeso i OSM + beginners_guide: + title: Llawlyfr Dechreuwyr sidebar: search_results: Canlyniadau Chwilio close: Cau @@ -1225,6 +1214,17 @@ cy: image: Delwedd alt: Testun Amgen url: URL + welcome: + title: Croeso! + whats_on_the_map: + title: Beth sydd ar y Map + basic_terms: + title: Termau syml mapio + questions: + title: Unrhyw gwestiwn? + start_mapping: Dechrau Mapio + add_a_note: + title: Dim amser i olygu? Ychwanegwch nodyn! trace: edit: filename: 'Enw ffeil:' @@ -1282,7 +1282,7 @@ cy: list: tagged_with: tagiwyd gyda %{tags} oauth: - oauthorize: + authorize: allow_to: 'Caniatáu''r rhaglen cleient i:' allow_read_prefs: ddarllen eich gosodiadau defnyddiwr. allow_write_prefs: addasu eich gosodiadau defnyddiwr. @@ -1291,11 +1291,11 @@ cy: allow_read_gpx: ddarllen eich dargopiadau GPS. allow_write_gpx: uwchlwytho dargopiadau GPS. allow_write_notes: addasu nodiadau. - oauthorize_success: + authorize_success: title: Caniatawyd y cais awdurdodiad. allowed: Rydych wedi caniatáu mynediad i'ch cyfrif gan y rhaglen %{app_name}. verification: Y cod dilysiad yw %{code} - oauthorize_failure: + authorize_failure: title: Methwyd y cais awdurdodiad. denied: Rydych wedi gwrthod mynediad i'ch cyfrif gan y rhaglen %{app_name}. invalid: Nid yw'r tocyn awdurdodiad yn ddilys. @@ -1517,15 +1517,7 @@ cy: confirm: Cadarnhau revoke: confirm: Cadarnhau - user_block: - partial: - show: Dangos - edit: Golygu - confirm: Ydych yn sicr? - status: Statws - showing_page: Tudalen %{page} - next: Nesaf » - previous: « Blaenorol + user_blocks: helper: time_future: Yn dod i ben mewn %{time}. time_past: Wedi dod i ben %{time} yn ôl. @@ -1534,8 +1526,16 @@ cy: show: Dangos edit: Golygu confirm: Ydych yn sicr? - note: - description: + block: + show: Dangos + edit: Golygu + blocks: + status: Statws + showing_page: Tudalen %{page} + next: Nesaf » + previous: « Blaenorol + notes: + comment: commented_at_html: Diweddarwyd %{when} yn ôl commented_at_by_html: Diweddarwyd %{when} yn ôl gan %{user} rss: @@ -1608,7 +1608,7 @@ cy: way: Llwybr nothing_found: Ni ddarganfuwyd nodweddion error: 'Gwall cysyltlu gyda %{server}: %{error}' - redaction: + redactions: edit: description: Disgrifiad new: diff --git a/config/locales/da.yml b/config/locales/da.yml index 68be02613..1751cae76 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -20,6 +20,7 @@ # Author: Luckas # Author: Macofe # Author: Mikini +# Author: Mjjzf # Author: Nemo bis # Author: OleLaursen # Author: Peter Alberti @@ -260,7 +261,7 @@ da: list: title: Ændringssæt title_user: Ændringssæt af %{user} - title_friend: Ændringssæt af dine venner + title_friend: Ændringssæt af mine venner title_nearby: Ændringssæt af brugere i nærheden empty: Ingen ændringssæt er fundet. empty_area: Ingen ændringssæt i dette omrÃ¥de. @@ -355,53 +356,6 @@ da: ago: '%{ago} siden' newer_comments: Nyere kommentarer older_comments: Ældre kommentarer - export: - title: Eksportér - start: - area_to_export: OmrÃ¥de som skal eksporteres - manually_select: Vælg et andet omrÃ¥de manuelt - format_to_export: Format for eksport - osm_xml_data: OpenStreetMap XML-data - map_image: Kort billede (viser standard lag) - embeddable_html: HTML der kan indlejres - licence: Licens - export_details: OpenStreetMaps data er licenseret under Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Hvis ovenstÃ¥ende eksport mislykkes, kan du overveje at bruge en af - de kilder, der er anført nedenfor:' - body: 'Dette omrÃ¥de er for stort til at blive eksporteret som OpenStreetMap - XML-data. Zoom ind eller vælg et mindre omrÃ¥de, eller brug en af de følgende - kilder til bulk data-downloads:' - planet: - title: Planet OSM - description: Regelmæssigt opdaterede kopier af den komplette OpenStreetMap - database - overpass: - title: Overpass API - description: Download dette afgrænsede omrÃ¥de fra et spejl af OpenStreetMap-databasen - geofabrik: - title: Geofabrik Downloads - description: Regelmæssigt opdateret uddrag af kontinenter, lande og udvalgte - byer - metro: - title: Metro uddrag - description: Uddrag af verdens største byer og de omkringliggende omrÃ¥der - other: - title: Andre kilder - description: Yderligere kilder er anført pÃ¥ OpenStreetMap-wiki - options: Indstillinger - format: Format - scale: Skala - max: maks - image_size: Billedstørrelse - zoom: Zoom - add_marker: Tilføj en markør pÃ¥ kortet - latitude: 'Bredde:' - longitude: 'Længde:' - output: Output - paste_html: Indsæt HTML som skal indlejres i siden - export_button: Eksportér geocoder: search: title: @@ -1047,268 +1001,6 @@ da: text: Donér learn_more: Lær mere more: Mere - license_page: - foreign: - title: Om denne oversættelse - text: I tilfælde af en konflikt mellem denne oversatte side og %{english_original_link} - har den engelske tekst forrang - english_link: den engelske originaltekst - native: - title: Om denne side - text: Du kigger pÃ¥ den engelske udgave af ophavsretsiden. Du kan gÃ¥ tilbage - til %{native_link} af denne side eller du kan holde op med at læse om ophavsret - og %{mapping_link}. - native_link: den danske udgave - mapping_link: begynde kortlægningen - legal_babble: - title_html: Ophavsret og licens - intro_1_html: |- - OpenStreetMap® er Ã¥bne data, licenseret under Open Data - Commons Open Database License (ODbL) af OpenStreetMap Foundation (OSMF). - intro_2_html: "Du kan frit kopiere, distribuere, overføre og tilpasse vores - data, \nsÃ¥ længe du angiver OpenStreetMap og dets\nbidragsydere som kilde. - Hvis du ændrer eller bygger pÃ¥ vores\ndata, mÃ¥ du kun distribuere resultatet - under den samme licens. Den\nfulde juridiske - tekst\nforklarer dine rettigheder og pligter." - intro_3_html: Kartografien i vores kort-fliser, samt vores dokumentation er - licenseret under Creative - Commons Navngivelse-DelPÃ¥SammeVilkÃ¥r 2.0 (CC BY-SA). - credit_title_html: Kildeangivelse og OpenStreetMap - credit_1_html: Vi kræver at din kildeangivelse mindst bestÃ¥r af “© - OpenStreetMap-bidragsydere”. - credit_2_html: "Du skal ogsÃ¥ gøre det klart, at dataene er tilgængelige under - Open \nDatabase License, og hvis du bruger vores kort-fliser, at kartografien - er\n licenseret som CC BY-SA. Du kan gøre dette ved at linke til\ndenne - side om ophavsret. \nAlternativt, og som et krav, hvis du distribuerer - OSM som\n data, kan du navngive og oprette et hyperlink direkte til licenserne. - I medier\n hvor hyperlinks ikke er mulige (f.eks. trykte værker), foreslÃ¥r - vi, at du\n henviser dine læsere til openstreetmap.org (mÃ¥ske ved at udvide\n'OpenStreetMap' - til denne fuld adresse), til opendatacommons.org, og\n hvis relevant, til - creativecommons.org." - credit_3_html: |- - For et navigerbart elektronisk kort, skal kildeangivelsen være i hjørnet af kortet. - For eksempel: - attribution_example: - alt: Eksempel pÃ¥ hvordan man angiver OpenStreetMap som kilde for en webside - title: Eksempel pÃ¥ kildeangivelse - more_title_html: Læs mere - more_1_html: |- - Læs mere om brug af vores data, og hvordan du krediterer os, pÃ¥ OSMF Licens-siden. - more_2_html: |- - Selvom OpenStreetMap er Ã¥bne data, kan vi ikke levere et - gratis kort-API til tredjeparter. - - Se vores Politik for brug af API, - Politik for brug af kort-fliser - og Politik for brug af Nominatim. - contributors_title_html: Vores bidragsydere - contributors_intro_html: |- - Vores bidragsydere er tusinder af individer. Vi medtager ogsÃ¥ - Ã¥bent licenseret data fra nationale kortlægningsagenturer - og andre kilder, blandt dem: - contributors_at_html: |- - Østrig: Indeholder data fra - Stadt Wien (under - CC BY), - Delstaten Vorarlberg og - Delstaten Tyrol (under CC-BY AT med tilføjelser). - contributors_ca_html: |- - Canada: Indeholder data fra - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada) og StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: 'Finland: Indeholder data fra National - Land Survey af Finlands topografiske database og andre datasæt under NLSFI-licensen.' - contributors_fr_html: |- - Frankrig: Indeholder data fra - Direction Générale des Impôts. - contributors_nl_html: |- - Holland: Indeholder © AND data, 2007 - (www.and.com) - contributors_nz_html: "New Zealand: Indeholder data fra \nLand - Information New Zealand. Crown Copyright reserveret." - contributors_si_html: |- - Slovenien: Indeholder data fra - OpmÃ¥lings- og Kortlægnings-myndigheden og - Ministeriet for Landbrug, Skovbrug og Fødevarer - (offentlig information Slovenien). - contributors_za_html: |- - Syd Afrika: Indeholder data fra - Chief Directorate: - National Geo-Spatial Information, State copyright reserveret. - contributors_gb_html: |- - Storbritannien: indeholder Ordnance - Survey data © Crown copyright and database right - 2010-12. - contributors_footer_1_html: |- - For yderligere oplysninger om disse og andre kilder, der er blevet brugt for at hjælpe med at forbedre OpenStreetMap, se venligst siden med bidragsydere pÃ¥ OpenStreetMap Wiki. - contributors_footer_2_html: |- - Optagelse af data i OpenStreetMap indebærer ikke at den oprindelige - dataudbyder siger god for OpenStreetMap, giver nogen garanti eller - accepterer nogen form for erstatningspligt. - infringement_title_html: Krænkelse af ophavsretten - infringement_1_html: |- - OSM-bidragsydere bliver mindet om aldrig at tilføje data fra nogen - ophavsretligt beskyttede kilder (f.eks. Google Maps eller trykte kort) uden - eksplicit tilladelse fra ophavsret-indehaverne. - infringement_2_html: |- - Hvis du mener, at ophavsretligt beskyttet materiale uberettiget er - føjet til OpenStreetMap databasen eller dette websted, bedes du følge - vores procedure til fjernelse a materiale eller udfyld formular direkte pÃ¥ vores - on-line side. - trademarks_title_html: Varemærker - trademarks_1_html: OpenStreetMap, forstørrelsesglas-logoet og "State of the - Map" er registrerede varemærker til OpenStreetMap Foundation. Hvis du har - spørgsmÃ¥l om din brug af mærkerne, sÃ¥ se Varemærkepolitikken. - welcome_page: - title: Velkommen! - introduction_html: Velkommen til OpenStreetMap, det frie brugerredigerede verdenskort. - Nu hvor du er oprettet som bruger er du klar til at tilføje og ændre kortinformationer. - Her er en guide med de vigtigste informationer til at komme hurtigt i gang. - whats_on_the_map: - title: Hvad kortet indholder - on_html: |- - OpenStreetMap indeholder elementer, der konkret og aktuelt findes - - f.eks. millioner af bygninger, veje og andre detaljer om steder. Du kan kortlægge - enhver detalje fra den virkelige verden som du interesserer dig for. - off_html: |- - Kortet indeholder ikke subjektive informationer (f.eks. anmeldelser), ting - der ikke længere eksisterer, fiktive ting og ophavsretsligt beskyttede data fra andre - kort. Kopier aldrig nogen som helst information fra andre online- eller papirkort - med mindre der forelægger en særlig tilladelse. - basic_terms: - title: Grundlæggende begreber - paragraph_1_html: Her er nogen fÃ¥ begreber som er nyttige at forstÃ¥ for at bidrage - til OpenStreetMap. - editor_html: En editor er et program eller en hjemmeside der - kan bruges til at redigere kortet. - node_html: Et "punkt" er et sted pÃ¥ kortet, f.eks. en enkelt - restaurant eller et træ. - way_html: En "vej" er en linje eller et areal, f.eks. en vej, - en Ã¥ eller en bygning. - tag_html: En egenskab er en lille bid information om et "punkt" - eller en "vej", f.eks. navnet pÃ¥ en restaurant eller hastighedsbegrænsningen - pÃ¥ en vej. - rules: - title: Regler! - paragraph_1_html: "OpenStreetMap har fÃ¥ formelle regler, men vi forventer, at - alle deltagere vil samarbejde\nmed, og kommunikere med fællesskabet. Hvis - du overvejer\nandre aktiviteter end manuel redigering af en side, skal du - læse og følge retningslinjerne pÃ¥ \nImport - og \nAutomatiserede - Redigeringer." - questions: - title: SpørgsmÃ¥l? - paragraph_1_html: |- - Behøver du hjælp til at kortlægge eller er du usikker pÃ¥ hvordan OpenStreetMap bruges? FÃ¥ svar pÃ¥ dine spørgsmÃ¥l pÃ¥ - OpenStreetMaps hjælpeside. - start_mapping: Editér kortet - add_a_note: - title: Ikke tid til redigering? Tilføj en bemærkning! - paragraph_1_html: Hvis du bare vil have en lille detalje rettet, men ikke har - tid til at gøre det selv, sÃ¥ kan du tilføje en note. - paragraph_2_html: |- - Bare gÃ¥ ind pÃ¥ kortet og klik pÃ¥ bemærknings-ikonet: - . Dette vil tilføje en markør som du kan trække rundt pÃ¥ kortet. Tilføj din besked, - klik pÃ¥ gem og andre brugere vil undersøge sagen. - fixthemap: - title: Rapportér et problem / Ret kortet - how_to_help: - title: Hvordan man kan hjælpe - join_the_community: - title: Deltag i fællesskabet - explanation_html: Hvis du har opdaget et problem med vores kortdata, for eksempel - en vej der mangler eller din adresse, er den bedste mÃ¥de at gøre noget ved - det, at deltage i OpenStreetMap-fællesskabet, og tilføje eller reparere - data selv. - add_a_note: - instructions_html: |- - Bare klik pÃ¥ eller det samme ikon pÃ¥ kortvisningen. - Dette vil tilføje en markør som du kan trække rundt pÃ¥ kortet. Tilføj din besked, klik pÃ¥ gem og andre brugere vil undersøge sagen. - other_concerns: - title: Andre bekymringer - explanation_html: |- - Hvis du har bekymringer om, hvordan vores data bruges, eller om indholdet, kan du se vores - side om ophavsret for flere juridiske oplysninger, eller kontakte den relevante - OSMF arbejdsgruppe. - help_page: - title: FÃ¥ hjælp - introduction: OpenStreetMap har flere ressourcer til at lære om projektet, stille - og besvare spørgsmÃ¥l og i fællesskab diskutere og dokumentere emner omkring - kortlægning. - welcome: - url: /welcome - title: Velkommen til OSM - description: Start med denne hurtige guide der dækker det grundlæggende i OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Da:Beginners%27_guide - title: Hjælp for nybegyndere - description: Hjælp for nybegyndere, som vedligeholdes af fællesskabet. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Stil et spørgsmÃ¥l eller find et svar pÃ¥ OSMs spørgsmÃ¥l og svar - side. - mailing_lists: - title: Mailinglister - description: Stil et spørgsmÃ¥l eller diskuter interessante spørgsmÃ¥l pÃ¥ en bred - vifte af tematiske eller regionale mailinglister. - forums: - title: Fora - description: SpørgsmÃ¥l og diskussioner for dem, der foretrækker et opslagstavlelignende - interface. - irc: - title: IRC - description: Interaktiv chat pÃ¥ mange forskellige sprog, og om mange emner. - switch2osm: - title: switch2osm - description: Hjælp til virksomheder og organisationer, der skifter til OpenStreetMap - baserede kort og andre tjenester. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Gennemse wikien for dybdegÃ¥ende OSM dokumentation. - about_page: - next: Næste - copyright_html: ©OpenStreetMap
      bidragsydere - used_by: '%{name} stiller kortdata til rådighed for tusindvis af websteder, mobile - apps og hardware-enheder' - lede_text: OpenStreetMap er bygget af et fællesskab af kortlæggere, der bidrager - og vedligeholder data om veje, stier, caféer, jernbanestationer og meget mere, - over hele verden. - local_knowledge_title: Lokal viden - local_knowledge_html: OpenStreetMap lægger vægt på lokal viden. Bidragsydere bruger - luftfotografier, GPS-enheder og lavteknologiske feltkort til at kontrollere - at OSM er præcis og ajourført. - community_driven_title: Drevet af fællesskabet - community_driven_html: "OpenStreetMap-fællesskabet er alsidigt, passioneret, og - vokser hver dag.\nVores bidragsydere omfatter entusiastiske kortlæggere, GIS-fagfolk, - ingeniører der\nkører OSM-servere, humanitære arbejdere der kortlægger katastroferamte - områder,\nog mange flere.\nFor at læs mere om fællesskabet, se\nOpenStreetMap-bloggen, - \nbrugerdagbøger,\nfællesskabsblogs, - og\n OSM Foundations hjemmeside." - open_data_title: Åbne Data - open_data_html: |- - OpenStreetMap er åbne data: du må bruge dem til ethvert formål, - så længe du nævner OpenStreetMap og dets bidragsydere. Hvis du ændrer eller - bygger oven på data på bestemte måder, må du kun distribuere resultatet under - den samme licens. Se siden om ophavsret og licens for detaljer. - legal_title: Juridisk - legal_html: "Dette websted og mange andre relaterede tjenester er formelt drevet - af \nOpenStreetMap Foundation (OSMF) - på vegne af fællesskabet. Brug af alle OSMF-drevne tjenester er underlagt vores - Politikker - for acceptabel brug og vores Privatlivs-poltik.\n
      - \nDu bedes kontakte OSMF \nhvis - du har spørgsmål om licenser, ophavsret eller andre juridiske spørgsmål og problemstillinger.\n
      \nOpenStreetMap, - forstørrelsesglas-logoet og \"State of the Map\" er varemærker - registreret af OSMF." - partners_title: Partnere notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} kommenterede pÃ¥ et blogindlæg' @@ -1499,6 +1191,163 @@ da: delete: deleted: Besked slettet site: + about: + next: Næste + copyright_html: ©OpenStreetMap
      bidragsydere + used_by: '%{name} stiller kortdata til rådighed for tusindvis af websteder, + mobile apps og hardware-enheder' + lede_text: OpenStreetMap er bygget af et fællesskab af kortlæggere, der bidrager + og vedligeholder data om veje, stier, caféer, jernbanestationer og meget mere, + over hele verden. + local_knowledge_title: Lokal viden + local_knowledge_html: OpenStreetMap lægger vægt på lokal viden. Bidragsydere + bruger luftfotografier, GPS-enheder og lavteknologiske feltkort til at kontrollere + at OSM er præcis og ajourført. + community_driven_title: Drevet af fællesskabet + community_driven_html: "OpenStreetMap-fællesskabet er alsidigt, passioneret, + og vokser hver dag.\nVores bidragsydere omfatter entusiastiske kortlæggere, + GIS-fagfolk, ingeniører der\nkører OSM-servere, humanitære arbejdere der kortlægger + katastroferamte områder,\nog mange flere.\nFor at læs mere om fællesskabet, + se\nOpenStreetMap-bloggen, \nbrugerdagbøger,\nfællesskabsblogs, + og\n OSM Foundations hjemmeside." + open_data_title: Åbne Data + open_data_html: |- + OpenStreetMap er åbne data: du må bruge dem til ethvert formål, + så længe du nævner OpenStreetMap og dets bidragsydere. Hvis du ændrer eller + bygger oven på data på bestemte måder, må du kun distribuere resultatet under + den samme licens. Se siden om ophavsret og licens for detaljer. + legal_title: Juridisk + legal_html: "Dette websted og mange andre relaterede tjenester er formelt drevet + af \nOpenStreetMap Foundation (OSMF) + på vegne af fællesskabet. Brug af alle OSMF-drevne tjenester er underlagt + vores Politikker + for acceptabel brug og vores Privatlivs-poltik.\n
      + \nDu bedes kontakte OSMF + \nhvis du har spørgsmål om licenser, ophavsret eller andre juridiske spørgsmål + og problemstillinger.\n
      \nOpenStreetMap, forstørrelsesglas-logoet og \"State + of the Map\" er varemærker + registreret af OSMF." + partners_title: Partnere + copyright: + foreign: + title: Om denne oversættelse + text: I tilfælde af en konflikt mellem denne oversatte side og %{english_original_link} + har den engelske tekst forrang + english_link: den engelske originaltekst + native: + title: Om denne side + text: Du kigger pÃ¥ den engelske udgave af ophavsretsiden. Du kan gÃ¥ tilbage + til %{native_link} af denne side eller du kan holde op med at læse om ophavsret + og %{mapping_link}. + native_link: den danske udgave + mapping_link: begynde kortlægningen + legal_babble: + title_html: Ophavsret og licens + intro_1_html: |- + OpenStreetMap® er Ã¥bne data, licenseret under Open Data + Commons Open Database License (ODbL) af OpenStreetMap Foundation (OSMF). + intro_2_html: "Du kan frit kopiere, distribuere, overføre og tilpasse vores + data, \nsÃ¥ længe du angiver OpenStreetMap og dets\nbidragsydere som kilde. + Hvis du ændrer eller bygger pÃ¥ vores\ndata, mÃ¥ du kun distribuere resultatet + under den samme licens. Den\nfulde juridiske + tekst\nforklarer dine rettigheder og pligter." + intro_3_html: Kartografien i vores kort-fliser, samt vores dokumentation er + licenseret under Creative + Commons Navngivelse-DelPÃ¥SammeVilkÃ¥r 2.0 (CC BY-SA). + credit_title_html: Kildeangivelse og OpenStreetMap + credit_1_html: Vi kræver at din kildeangivelse mindst bestÃ¥r af “© + OpenStreetMap-bidragsydere”. + credit_2_html: "Du skal ogsÃ¥ gøre det klart, at dataene er tilgængelige under + Open \nDatabase License, og hvis du bruger vores kort-fliser, at kartografien + er\n licenseret som CC BY-SA. Du kan gøre dette ved at linke til\ndenne + side om ophavsret. \nAlternativt, og som et krav, hvis du distribuerer + OSM som\n data, kan du navngive og oprette et hyperlink direkte til licenserne. + I medier\n hvor hyperlinks ikke er mulige (f.eks. trykte værker), foreslÃ¥r + vi, at du\n henviser dine læsere til openstreetmap.org (mÃ¥ske ved at udvide\n'OpenStreetMap' + til denne fuld adresse), til opendatacommons.org, og\n hvis relevant, til + creativecommons.org." + credit_3_html: |- + For et navigerbart elektronisk kort, skal kildeangivelsen være i hjørnet af kortet. + For eksempel: + attribution_example: + alt: Eksempel pÃ¥ hvordan man angiver OpenStreetMap som kilde for en webside + title: Eksempel pÃ¥ kildeangivelse + more_title_html: Læs mere + more_1_html: |- + Læs mere om brug af vores data, og hvordan du krediterer os, pÃ¥ OSMF Licens-siden. + more_2_html: |- + Selvom OpenStreetMap er Ã¥bne data, kan vi ikke levere et + gratis kort-API til tredjeparter. + + Se vores Politik for brug af API, + Politik for brug af kort-fliser + og Politik for brug af Nominatim. + contributors_title_html: Vores bidragsydere + contributors_intro_html: |- + Vores bidragsydere er tusinder af individer. Vi medtager ogsÃ¥ + Ã¥bent licenseret data fra nationale kortlægningsagenturer + og andre kilder, blandt dem: + contributors_at_html: |- + Østrig: Indeholder data fra + Stadt Wien (under + CC BY), + Delstaten Vorarlberg og + Delstaten Tyrol (under CC-BY AT med tilføjelser). + contributors_ca_html: |- + Canada: Indeholder data fra + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada) og StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: 'Finland: Indeholder data fra National + Land Survey af Finlands topografiske database og andre datasæt under NLSFI-licensen.' + contributors_fr_html: |- + Frankrig: Indeholder data fra + Direction Générale des Impôts. + contributors_nl_html: |- + Holland: Indeholder © AND data, 2007 + (www.and.com) + contributors_nz_html: "New Zealand: Indeholder data fra \nLand + Information New Zealand. Crown Copyright reserveret." + contributors_si_html: |- + Slovenien: Indeholder data fra + OpmÃ¥lings- og Kortlægnings-myndigheden og + Ministeriet for Landbrug, Skovbrug og Fødevarer + (offentlig information Slovenien). + contributors_za_html: |- + Syd Afrika: Indeholder data fra + Chief Directorate: + National Geo-Spatial Information, State copyright reserveret. + contributors_gb_html: |- + Storbritannien: indeholder Ordnance + Survey data © Crown copyright and database right + 2010-12. + contributors_footer_1_html: |- + For yderligere oplysninger om disse og andre kilder, der er blevet brugt for at hjælpe med at forbedre OpenStreetMap, se venligst siden med bidragsydere pÃ¥ OpenStreetMap Wiki. + contributors_footer_2_html: |- + Optagelse af data i OpenStreetMap indebærer ikke at den oprindelige + dataudbyder siger god for OpenStreetMap, giver nogen garanti eller + accepterer nogen form for erstatningspligt. + infringement_title_html: Krænkelse af ophavsretten + infringement_1_html: |- + OSM-bidragsydere bliver mindet om aldrig at tilføje data fra nogen + ophavsretligt beskyttede kilder (f.eks. Google Maps eller trykte kort) uden + eksplicit tilladelse fra ophavsret-indehaverne. + infringement_2_html: |- + Hvis du mener, at ophavsretligt beskyttet materiale uberettiget er + føjet til OpenStreetMap databasen eller dette websted, bedes du følge + vores procedure til fjernelse a materiale eller udfyld formular direkte pÃ¥ vores + on-line side. + trademarks_title_html: Varemærker + trademarks_1_html: OpenStreetMap, forstørrelsesglas-logoet og "State of the + Map" er registrerede varemærker til OpenStreetMap Foundation. Hvis du har + spørgsmÃ¥l om din brug af mærkerne, sÃ¥ se Varemærkepolitikken. index: js_1: Du bruger enten en browser som ikke understøtter Javascript, eller du har deaktiveret Javascript. @@ -1532,6 +1381,110 @@ da: id_not_configured: iD er ikke blevet konfigureret no_iframe_support: Din browser understøtter ikke HTML-iframes som er nødvendige for denne funktion. + export: + title: Eksportér + area_to_export: OmrÃ¥de som skal eksporteres + manually_select: Vælg et andet omrÃ¥de manuelt + format_to_export: Format for eksport + osm_xml_data: OpenStreetMap XML-data + map_image: Kort billede (viser standard lag) + embeddable_html: HTML der kan indlejres + licence: Licens + export_details: OpenStreetMaps data er licenseret under Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Hvis ovenstÃ¥ende eksport mislykkes, kan du overveje at bruge en af + de kilder, der er anført nedenfor:' + body: 'Dette omrÃ¥de er for stort til at blive eksporteret som OpenStreetMap + XML-data. Zoom ind eller vælg et mindre omrÃ¥de, eller brug en af de følgende + kilder til bulk data-downloads:' + planet: + title: Planet OSM + description: Regelmæssigt opdaterede kopier af den komplette OpenStreetMap + database + overpass: + title: Overpass API + description: Download dette afgrænsede omrÃ¥de fra et spejl af OpenStreetMap-databasen + geofabrik: + title: Geofabrik Downloads + description: Regelmæssigt opdateret uddrag af kontinenter, lande og udvalgte + byer + metro: + title: Metro uddrag + description: Uddrag af verdens største byer og de omkringliggende omrÃ¥der + other: + title: Andre kilder + description: Yderligere kilder er anført pÃ¥ OpenStreetMap-wiki + options: Indstillinger + format: Format + scale: Skala + max: maks + image_size: Billedstørrelse + zoom: Zoom + add_marker: Tilføj en markør pÃ¥ kortet + latitude: 'Bredde:' + longitude: 'Længde:' + output: Output + paste_html: Indsæt HTML som skal indlejres i siden + export_button: Eksportér + fixthemap: + title: Rapportér et problem / Ret kortet + how_to_help: + title: Hvordan man kan hjælpe + join_the_community: + title: Deltag i fællesskabet + explanation_html: Hvis du har opdaget et problem med vores kortdata, for + eksempel en vej der mangler eller din adresse, er den bedste mÃ¥de at gøre + noget ved det, at deltage i OpenStreetMap-fællesskabet, og tilføje eller + reparere data selv. + add_a_note: + instructions_html: |- + Bare klik pÃ¥ eller det samme ikon pÃ¥ kortvisningen. + Dette vil tilføje en markør som du kan trække rundt pÃ¥ kortet. Tilføj din besked, klik pÃ¥ gem og andre brugere vil undersøge sagen. + other_concerns: + title: Andre bekymringer + explanation_html: |- + Hvis du har bekymringer om, hvordan vores data bruges, eller om indholdet, kan du se vores + side om ophavsret for flere juridiske oplysninger, eller kontakte den relevante + OSMF arbejdsgruppe. + help: + title: FÃ¥ hjælp + introduction: OpenStreetMap har flere ressourcer til at lære om projektet, stille + og besvare spørgsmÃ¥l og i fællesskab diskutere og dokumentere emner omkring + kortlægning. + welcome: + url: /welcome + title: Velkommen til OSM + description: Start med denne hurtige guide der dækker det grundlæggende i + OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Da:Beginners%27_guide + title: Hjælp for nybegyndere + description: Hjælp for nybegyndere, som vedligeholdes af fællesskabet. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Stil et spørgsmÃ¥l eller find et svar pÃ¥ OSMs spørgsmÃ¥l og svar + side. + mailing_lists: + title: Mailinglister + description: Stil et spørgsmÃ¥l eller diskuter interessante spørgsmÃ¥l pÃ¥ en + bred vifte af tematiske eller regionale mailinglister. + forums: + title: Fora + description: SpørgsmÃ¥l og diskussioner for dem, der foretrækker et opslagstavlelignende + interface. + irc: + title: IRC + description: Interaktiv chat pÃ¥ mange forskellige sprog, og om mange emner. + switch2osm: + title: switch2osm + description: Hjælp til virksomheder og organisationer, der skifter til OpenStreetMap + baserede kort og andre tjenester. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Gennemse wikien for dybdegÃ¥ende OSM dokumentation. sidebar: search_results: Søgeresultater close: Luk @@ -1632,6 +1585,57 @@ da: image: Billede alt: Alt-tekst url: URL + welcome: + title: Velkommen! + introduction_html: Velkommen til OpenStreetMap, det frie brugerredigerede verdenskort. + Nu hvor du er oprettet som bruger er du klar til at tilføje og ændre kortinformationer. + Her er en guide med de vigtigste informationer til at komme hurtigt i gang. + whats_on_the_map: + title: Hvad kortet indholder + on_html: |- + OpenStreetMap indeholder elementer, der konkret og aktuelt findes - + f.eks. millioner af bygninger, veje og andre detaljer om steder. Du kan kortlægge + enhver detalje fra den virkelige verden som du interesserer dig for. + off_html: |- + Kortet indeholder ikke subjektive informationer (f.eks. anmeldelser), ting + der ikke længere eksisterer, fiktive ting og ophavsretsligt beskyttede data fra andre + kort. Kopier aldrig nogen som helst information fra andre online- eller papirkort + med mindre der forelægger en særlig tilladelse. + basic_terms: + title: Grundlæggende begreber + paragraph_1_html: Her er nogen fÃ¥ begreber som er nyttige at forstÃ¥ for at + bidrage til OpenStreetMap. + editor_html: En editor er et program eller en hjemmeside + der kan bruges til at redigere kortet. + node_html: Et "punkt" er et sted pÃ¥ kortet, f.eks. en enkelt + restaurant eller et træ. + way_html: En "vej" er en linje eller et areal, f.eks. en + vej, en Ã¥ eller en bygning. + tag_html: En egenskab er en lille bid information om et "punkt" + eller en "vej", f.eks. navnet pÃ¥ en restaurant eller hastighedsbegrænsningen + pÃ¥ en vej. + rules: + title: Regler! + paragraph_1_html: "OpenStreetMap har fÃ¥ formelle regler, men vi forventer, + at alle deltagere vil samarbejde\nmed, og kommunikere med fællesskabet. + Hvis du overvejer\nandre aktiviteter end manuel redigering af en side, skal + du læse og følge retningslinjerne pÃ¥ \nImport + og \nAutomatiserede + Redigeringer." + questions: + title: SpørgsmÃ¥l? + paragraph_1_html: |- + Behøver du hjælp til at kortlægge eller er du usikker pÃ¥ hvordan OpenStreetMap bruges? FÃ¥ svar pÃ¥ dine spørgsmÃ¥l pÃ¥ + OpenStreetMaps hjælpeside. + start_mapping: Editér kortet + add_a_note: + title: Ikke tid til redigering? Tilføj en bemærkning! + paragraph_1_html: Hvis du bare vil have en lille detalje rettet, men ikke + har tid til at gøre det selv, sÃ¥ kan du tilføje en note. + paragraph_2_html: |- + Bare gÃ¥ ind pÃ¥ kortet og klik pÃ¥ bemærknings-ikonet: + . Dette vil tilføje en markør som du kan trække rundt pÃ¥ kortet. Tilføj din besked, + klik pÃ¥ gem og andre brugere vil undersøge sagen. trace: visibility: private: Privat (kun delt som anonyme punkter uden rækkefølge og tidsstempler) @@ -1673,6 +1677,7 @@ da: trace_header: upload_trace: Upload et spor see_all_traces: Vis alle spor + see_my_traces: Se mine spor traces_waiting: one: Du har allerede et GPS-spor i køen. Overvej at vente pÃ¥ dette før du uploader flere spor for ikke at blokere køen for andre brugere. @@ -1699,6 +1704,7 @@ da: delete_track: Slet dette spor trace_not_found: Spor ikke fundet! visibility: 'Synlighed:' + confirm_delete: Slet dette spor? trace_paging_nav: showing_page: Side %{page} older: Ældre spor @@ -1721,6 +1727,7 @@ da: map: kort list: public_traces: Offentlige GPS-spor + my_traces: Mine GPS-spor public_traces_from: Offentlige GPS-spor fra %{user} description: Gennemse de seneste GPS-sporingsoverførsler tagged_with: ' med egenskaberne %{tags}' @@ -1759,7 +1766,7 @@ da: netsiden for at læse bidragsydervilkÃ¥rene. Du behøver ikke at godkende vilkÃ¥rene, men du skal læse dem. oauth: - oauthorize: + authorize: title: Tillad adgang til din konto request_access: Programmet %{app_name} anmoder om adgang til din konto, %{user}. Kontroller, om du vil tillade adgang til følgende funktioner. Du kan vælge @@ -1773,11 +1780,11 @@ da: allow_write_gpx: Upload GPS-spor. allow_write_notes: ændre bemærkninger. grant_access: Tillad adgang - oauthorize_success: + authorize_success: title: Anmodning om tilladelse godkendt allowed: Du har givet programmet %{app_name} adgang til din konto. verification: Bekræftelseskoden er %{code}. - oauthorize_failure: + authorize_failure: title: Anmodning om tilladelse mislykkedes denied: Du har nægtet programmet %{app_name} adgang til din konto. invalid: Godkendelse token er ikke gyldigt. @@ -2017,6 +2024,7 @@ da: if set location: Indstil din hjemmeposition pÃ¥ siden %{settings_link} for at se andre brugere i nærheden. settings_link_text: indstillinger + my friends: Mine venner no friends: Du har ikke tilføjet nogle venner endnu. km away: '%{count}km væk' m away: '%{count}m væk' @@ -2215,7 +2223,7 @@ da: confirm: Bekræft fail: Kunne ikke fratage rollen %{role} fra brugeren %{name}. Kontroller at brugeren og rollen begge er gyldige. - user_block: + user_blocks: model: non_moderator_update: Skal være en moderator for at oprette eller opdatere en blokering. @@ -2278,20 +2286,6 @@ da: period: one: 1 time other: '%{count} timer' - partial: - show: Vis - edit: Redigér - revoke: Tilbagekald! - confirm: Er du sikker? - display_name: Blokkeret bruger - creator_name: Oprettet af - reason: Årsag til blokering - status: Status - revoker_name: Tilbagekaldt af - not_revoked: (ikke tilbagekaldt) - showing_page: Side %{page} - next: Næste » - previous: « Forrige helper: time_future: Slutter om %{time}. until_login: Aktiv, indtil brugeren logger pÃ¥. @@ -2322,8 +2316,22 @@ da: back: Vis alle blokeringer revoker: 'Tilbagekalder:' needs_view: Brugeren skal logge pÃ¥, før denne blokering vil blive fjernet - note: - description: + block: + not_revoked: (ikke tilbagekaldt) + show: Vis + edit: Redigér + revoke: Tilbagekald! + blocks: + display_name: Blokkeret bruger + creator_name: Oprettet af + reason: Årsag til blokering + status: Status + revoker_name: Tilbagekaldt af + showing_page: Side %{page} + next: Næste » + previous: « Forrige + notes: + comment: opened_at_html: Oprettet for %{when} siden opened_at_by_html: Oprettet for %{when} siden af %{user} commented_at_html: Opdateret for %{when} siden @@ -2452,7 +2460,7 @@ da: distance: Afstand errors: no_route: Kunne ikke finde en rute mellem de to steder. - no_place: Beklager - kunne ikke finde det sted. + no_place: Beklager - kunne ikke finde '%{place}'. instructions: continue_without_exit: Fortsæt ad %{name} slight_right_without_exit: Svagt til højre ind pÃ¥ %{name} @@ -2471,6 +2479,7 @@ da: onramp_right_with_name_directions: Drej mod højre ind pÃ¥ rampen pÃ¥ %{name}, retning imod %{directions} onramp_right_without_directions: Drej mod højre ind pÃ¥ rampen + onramp_right: Drej til højre ind pÃ¥ rampen endofroad_right_without_exit: Ved slutningen af vejen drej til højre ud pÃ¥ %{name} merge_right_without_exit: Flet til højre ind pÃ¥ %{name} @@ -2496,6 +2505,7 @@ da: onramp_left_with_name_directions: Drej mod venstre ind pÃ¥ rampen pÃ¥ %{name}, retning imod %{directions} onramp_left_without_directions: Drej mod venstre ind pÃ¥ rampen + onramp_left: Drej til venstre ind pÃ¥ rampen endofroad_left_without_exit: Ved slutningen af vejen drej til venstre ud pÃ¥ %{name} merge_left_without_exit: Flet til venstre ind pÃ¥ %{name} @@ -2533,7 +2543,7 @@ da: show_address: Vis adresse query_features: Find kortobjekter centre_map: Centrer kort her - redaction: + redactions: edit: description: Beskrivelse heading: Rediger omarbejdelse diff --git a/config/locales/de.yml b/config/locales/de.yml index 0061eadb1..947bb3db2 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -286,7 +286,7 @@ de: list: title: Änderungssätze title_user: Änderungssätze von %{user} - title_friend: Änderungssätze deiner Freunde + title_friend: Änderungssätze meiner Freunde title_nearby: Änderungssätze von Benutzern in der Nähe empty: Keine Änderungssätze gefunden. empty_area: Keine Änderungssätze in diesem Bereich. @@ -383,54 +383,6 @@ de: ago: vor %{ago} newer_comments: Neuere Kommentare older_comments: Ältere Kommentare - export: - title: Exportieren - start: - area_to_export: Bereich für den Export - manually_select: Einen anderen Bereich manuell auswählen - format_to_export: Format für den Export - osm_xml_data: OpenStreetMap-XML-Daten - map_image: Karte (zeigt die Standardebene) - embeddable_html: HTML zum Einbinden - licence: Lizenz - export_details: Die von OpenStreetMap zur Verfügung gestellten Daten sind unter - der Open Data Commons - Open Database Lizenz (ODbL) lizenziert. - too_large: - advice: 'Falls der obenstehende Export fehlschlägt, erwäge bitte, eine der - unten aufgelisteten Quellen zu verwenden:' - body: Dieser Bereich ist zu groß, um als OpenStreetMap-XML-Daten exportiert - zu werden. Bitte heranzoomen, einen kleineren Bereich wählen oder eine der - folgenden Quellen für Massendatendownloads nutzen. - planet: - title: Planet OSM - description: Regelmäßig aktualisierte Kopien der kompletten OpenStreetMap-Datenbank - overpass: - title: Overpass API - description: Diese Bounding Box von einem Mirror der OpenStreetMap-Datenbank - herunterladen - geofabrik: - title: Geofabrik Downloads - description: Regelmäßig aktualisierte Auszüge von Kontinenten, Ländern und - ausgewählten Städten. - metro: - title: Metro Extracts - description: Auszüge für bedeutende Weltstädte und ihre Umgebungen - other: - title: Andere Quellen - description: Zusätzliche Quellen sind im OpenStreetMap-Wiki gelistet - options: Optionen - format: 'Format:' - scale: Maßstab - max: max. - image_size: 'Bildgröße:' - zoom: Zoom - add_marker: Markierung zur Karte hinzufügen - latitude: 'Breitengrad:' - longitude: 'Längengrad:' - output: Ausgabe - paste_html: HTML-Code kopieren, um ihn in eine Website einzufügen - export_button: Export geocoder: search: title: @@ -1081,277 +1033,6 @@ de: text: Spenden learn_more: Mehr erfahren more: Mehr - license_page: - foreign: - title: Über diese Übersetzung - text: Für den Fall einer Abweichung zwischen der vorliegenden Übersetzung und - %{english_original_link}, ist die englischsprachige Seite maßgebend. - english_link: dem englischsprachigen Original - native: - title: Über diese Seite - text: Du befindest dich auf der Seite mit der englischsprachigen Version der - Urheberrechts- und Lizensierungsinformationen. Du kannst zur %{native_link} - dieser Seite zurückkehren oder das Lesen der Urheberrechtsinformationen beenden - und %{mapping_link}. - native_link: deutschen Sprachversion - mapping_link: mit dem Kartieren anfangen - legal_babble: - title_html: Urheberrecht und Lizenz - intro_1_html: |- - OpenStreetMap® sind „Open Data“, die gemäß der - Open Data Commons Open Database Lizenz - (ODbL) durch die OpenStreetMap Foundation (OSMF) verfügbar sind. - intro_2_html: |- - Es steht dir frei unsere Daten zu kopieren, weiterzugeben, - zu übermitteln sowie anzupassen, sofern du OpenStreetMap - und die Mitwirkenden als Quelle angibst. Für den Fall, dass - du auf Basis unserer Daten Anpassungen vornimmst, oder sie - als Grundlage für weitere Bearbeitungen verwendest, kannst - du das Ergebnis auch nur gemäß der selben Lizenz weitergeben. - Der vollständige Lizenztext ist unter - Lizenz - einsehbar und erläutert deine Rechte und Pflichten. - intro_3_html: Die Kartografie in unseren Kartenkacheln und unsere Dokumentation - sind unter der ''Creative-Commons''-Lizenz „Namensnennung - – Weitergabe unter gleichen Bedingungen“ 2.0 (CC BY-SA) verfügbar. - credit_title_html: Wie auf die Urheberschaft von OpenStreetMap hinzuweisen ist - credit_1_html: Wir verlangen die Verwendung des Hinweises „© OpenStreetMap-Mitwirkende“. - credit_2_html: |- - Du musst auch klarstellen, dass die Daten unter der Open-Database-Lizenz - verfügbar sind, und, sofern du unsere Kartenkacheln verwendest, dass die - Kartografie gemäß CC BY-SA lizenziert ist. Du kannst dies tun, indem du auf - www.openstreetmap.org/copyright verlinkst. - Ersatzweise, und als Erfordernis, falls du OSM in Datenform weitergibst, - kannst du die Lizenz(en) direkt verlinken und benennen. In Medien, in denen - keine Links möglich sind (z.B. gedruckten Werken), empfehlen wir dir, - deine Leser direkt auf openstreetmap.org zu verweisen (möglicherweise mit - dem Erweitern von „OpenStreetMap“ zur vollen Adresse), auf opendatacommons.org, - und, sofern zutreffend, auf creativecommons.org. - credit_3_html: |- - Der Hinweis sollte für eine durchsuchbare elektronische Karte in der Ecke der Karte stehen. - Zum Beispiel: - attribution_example: - alt: Beispiel, wie man auf OpenStreetMap auf einer Webseite hinweist - title: Namensnennungs-Beispiel auf einer Website mit elektronischer Karte - more_title_html: Weitere Informationen - more_1_html: |- - Mehr Informationen dazu, wie unsere Daten verwendet werden können und wie man auf unsere Urheberschaft hinweist, - kann man auf unserer OSMF-Lizenzseite nachlesen. - more_2_html: |- - Obwohl OpenStreetMap „Open Data“ ist, können wir keine - unentgeltliche Karten-API für Drittparteien bereitstellen. - Siehe unsere API-Verwendungsrichtlinie, - die Kachelverwendungsrichtlinie - und die Nominatim-Verwendungsrichtlinie. - contributors_title_html: Unsere Mitwirkenden - contributors_intro_html: 'Unsere Mitwirkenden sind tausende einzelne Menschen. - Wir beziehen auch offen lizenzierte Daten von nationalen Kartenagenturen und - anderen Quellen ein, darunter:' - contributors_at_html: 'Österreich: Enthält Daten der Stadt - Wien (lizenziert gemäß CC - BY AT), des Landes - Vorarlberg und des Landes Tirol (lizenziert - gemäß CC BY AT samt Erweiterungen zur Lizenz).' - contributors_ca_html: 'Kanada: Enthält Daten von GeoBase®, - GeoGratis (© Department of Natural Resources Canada), CanVec (© - Department of Natural Resources Canada) und StatCan (Geography Division, - Statistics Canada).' - contributors_fi_html: |- - Finnland: Enthält Daten von der - topografischen Datenbank der National Land Survey of Finland - und andere Datensätze, unter der - NLSFI-Lizenz. - contributors_fr_html: 'Frankreich: Enthält Daten der Direction - Générale des Impôts.' - contributors_nl_html: 'Niederlande: Enthält, © AND-Daten, - 2007 (www.and.com)' - contributors_nz_html: 'Neuseeland: Enthält Daten aus Land - Information New Zealand. Urheberrecht vorbehalten.' - contributors_si_html: |- - Slowenien: Enthält Daten aus der - Vermessungs- und Kartierungsbehörde sowie dem - Ministerium für Landwirtschaft, Forsten und Ernährung - (öffentliche Informationen von Slowenien). - contributors_za_html: 'Südafrika: Enthält Daten von Chief - Directorate: National Geo-Spatial Information, Staatliches Urheberrecht - vorbehalten.' - contributors_gb_html: 'Vereinigtes Königreich: Enthält Daten - des Ordnance Survey © Urheber- und Datenbankrecht 2010-12.' - contributors_footer_1_html: Weitere Informationen sowie andere Datenquellen, - die zur Verbesserung von OpenStreetMap genutzt wurden, sind auf der - Seite über die Mitwirkenden im Wiki von OpenStreetMap zu finden. - contributors_footer_2_html: Die Einbeziehung von Daten bei OpenStreetMap bedeutet - nicht, dass der ursprüngliche Datenlieferant OpenStreetMap unterstützt, Gewährleistung - dafür gibt oder die Haftung dafür übernimmt. - infringement_title_html: Urheberrechtsverletzung - infringement_1_html: Die Mitwirkenden von OpenStreetMap weisen wir darauf hin, - dass keinesfalls Daten aus urheberrechtlich geschützten Quellen verwendet - werden dürfen (z. B. Google Maps oder gedruckte Kartenwerke), ohne vorher - die ausdrückliche Erlaubnis des Rechteinhabers erhalten zu haben. - infringement_2_html: |- - Sofern du denkst, dass urheberrechtlich geschütztes Material unerlaubterweise zur - OpenStreetMap-Datenbank oder auf dieser Website hinzugefügt wurde, informiere dich - bitte über unser Verfahren - zum Entfernen von Inhalten oder melde dies direkt mit unserem - Onlineformular. - trademarks_title_html: Markenzeichen - trademarks_1_html: OpenStreetMap, das Lupenlogo und „State of the Map“ sind - eingetragene Warenzeichen der OpenStreetMap Foundation. Falls du Fragen über - deine Verwendung der Marken hast, lies bitte unsere Markenrichtlinie. - welcome_page: - title: Willkommen! - introduction_html: |- - Willkommen bei OpenStreetMap, der weltweiten freien und editierbaren Karte. Mit deiner Anmeldung ist alles so weit, dass du anfangen kannst die Karte zu bearbeiten. - Hier sind noch eine paar nützliche zusätzliche Informationen. - whats_on_the_map: - title: Was gehört in die Karte? - on_html: |- - OpenStreetMap ist eine Datenbank, in der man alles erfassen kann, was derzeit real existiert. - - Dies beinhaltet sowohl Straßen, Gebäude und Plätze mit ihren Eigenschaften, als auch z.B. Geschäfte, Briefkästen oder Hydranten. Eigentlich eben alles, was man so dauerhaft in der Umgebung finden kann und einen interessiert. - off_html: |- - Was nicht in die Datenbank gehört sind subjektive Daten wie Bewertungen, nicht mehr aktuelle - historische Fakten oder nicht real existierende Dinge. Ausserdem ist es wichtig, nichts von - anderen Quellen (auch nicht aus Papierkarten) zu kopieren, da OpenStreetMap das Urheberrecht sehr ernst nimmt. - basic_terms: - title: Grundbegriffe fürs Mapping - paragraph_1_html: OpenStreetMap nutzt ein paar spezifische Begriffe. Hier sind - ein paar davon, die nützlich sein dürften. - editor_html: Ein Editor ist ein Programm oder eine Webseite, - mit der man die Karte bearbeiten kann. - node_html: Ein Node ("Knoten") in OSM ist ein Punkt auf der - Karte, z.B. ein Restaurant oder ein Baum. - way_html: Ein Way ("Weg") in OSM ist eine offene Linie wie - z.B. eine Straße, ein Weg, ein Fluss oder bildet eine geschlossene Fläche, - z.B. ein Gebäude. - tag_html: Ein tag („Attribut“) ist eine Eigenschaft, die man - einem Objekt zuweist, z. B. der Name eines Restaurants oder die erlaubte - Höchstgeschwindigkeit auf einer Straße. - rules: - title: Regeln! - paragraph_1_html: "OpenStreetMap hat nur wenige formale Regeln, aber wir erwarten, - dass alle Teilnehmer\nmit der Gemeinschaft zusammenarbeiten und kommunizieren. - Falls du andere Aktivitäten erwägst\nals per Hand zu bearbeiten, lies und - folge bitte den Richtlinien zu\nImporten - und \nautomatischen - Bearbeitungen." - questions: - title: Fragen? - paragraph_1_html: |- - OpenStreetMap hat mehrere Quellen zum Lernen, Stellen und Beantworten von Fragen über das Projekt - und zum gemeinsamen Diskutieren und Dokumentieren von Kartierungsthemen. - Erhalte hier Hilfe. - start_mapping: Beginne mit dem Bearbeiten der Karte - add_a_note: - title: Keine Zeit? Dann füge einen Hinweis ein! - paragraph_1_html: Falls du nur eine Kleinigkeit korrigieren möchtest und dir - die Zeit fehlt, dich einzuarbeiten, wie man in OSM Daten editiert, so gib - einfach einen Hinweis/melde einen Fehler, dann kann sich ein anderer Mapper - darum kümmern. - paragraph_2_html: |- - Gehe einfach auf die Karte und klicke auf das Sprechblasen-Symbol: - . Dies fügt einen Marker auf der Karte hinzu, diesen verschiebe bitte möglichst genau auf die Problemstelle und schreibe einen Hinweis. Der Hinweis sollte den Sachverhalt möglichst genau beschreiben, damit ein anderer Mapper die Erklärung dann verwenden kann, um den Fehler zu beheben. - fixthemap: - title: Ein Problem melden / Die Karte korrigieren - how_to_help: - title: So kannst du helfen - join_the_community: - title: Der Gemeinschaft beitreten - explanation_html: |- - Falls du bei unseren Kartendaten ein Problem bemerkt hast wie das Fehlen einer Straße oder deiner Adresse, - ist der beste Weg zum Weitermachen der Beitritt zur OpenStreetMap-Gemeinschaft und das Beheben der Daten durch dich selbst. - add_a_note: - instructions_html: |- - Klicke einfach auf oder auf das gleiche Symbol in der Kartenanzeige. - Dies fügt eine Markierung der Karte hinzu, die du durch Ziehen verschieben kannst. - Schreibe deine Nachricht, klicke auf „Speichern“ und andere Mapper werden den Fehler untersuchen. - other_concerns: - title: Andere Anliegen - explanation_html: |- - Falls du Bedenken über die Verwendung unserer Daten oder über die Inhalte hast, lies bitte unsere - Copyright-Seite für mehr rechtliche Informationen oder kontaktiere die entsprechende - OSMF-Arbeitsgruppe. - help_page: - title: Hilfe erhalten - introduction: |- - OpenStreetMap hat mehrere Quellen zum Lernen, Stellen und Beantworten von Fragen über das Projekt - und zum gemeinsamen Diskutieren und Dokumentieren von Kartierungsthemen. - welcome: - url: /welcome - title: Willkommen bei OSM - description: Beginne mit dieser Schnellanleitung, die die OpenStreetMap-Grundlagen - abdeckt. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/DE:Beginners%27_guide - title: Anleitung für Anfänger - description: Eine durch die Gemeinschaft gewartete Anleitung für Anfänger. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Stelle eine Frage oder suche nach Antworten auf der OSM-Fragen-und-Antworten-Seite. - mailing_lists: - title: Mailinglisten - description: Stelle eine Frage und diskutiere interessante Sachen zu einem weiten - Bereich von thematischen oder regionalen Mailinglisten. - forums: - title: Foren - description: Fragen und Diskussionen für diejenigen, die eine Oberfläche in - der Art einer Anschlagstafel bevorzugen. - irc: - title: IRC - description: Interaktiver Chat in vielen unterschiedlichen Sprachen und zu vielen - Themen. - switch2osm: - title: Zu OSM wechseln - description: Hilfe für auf Karten und anderen Diensten gegründeten Unternehmen - und Organisationen, die zu OpenStreetMap wechseln. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Durchsuche das Wiki für eine ausführliche OSM-Dokumentation. - about_page: - next: Nächste - copyright_html: ©OpenStreetMap
      Mitwirkende - used_by: '%{name} stellt Kartendaten für tausende von Webseiten, Apps und andere - Geräte zur Verfügung' - lede_text: |- - OpenStreetMap wird von einer Vielzahl von Mappern erstellt, die Daten zu - Wegen, Gebäuden und allerlei Weiterem weltweit erfassen und pflegen. - local_knowledge_title: Lokales Wissen - local_knowledge_html: |- - OpenStreetMap legt Wert auf lokales Wissen. Autoren benutzen - Luftbilder, GPS-Geräte und Feldkarten zur Verifizierung, sodass OSM - korrekt und aktuell ist. - community_driven_title: Gemeinschaftsbetrieben - community_driven_html: |- - Die OpenStreetMap-Gemeinschaft ist vielfältig, leidenschaftlich und wächst täglich. - Unsere Mitwirkenden sind begeisterte Mapper, GIS-Profis, Ingenieure, die die OSM-Server - betreiben und viele mehr. - Um mehr über die Gemeinschaft zu erfahren, lies unseren - OpenStreetMap-Blog, - die Benutzertagebücher, - Community-Blogs und die Website der - OSM-Foundation. - open_data_title: Open Data - open_data_html: |- - OpenStreetMap ist „Open Data“: Du kannst es für jeden Zweck verwenden, - solange du OpenStreetMap und seine Mitwirkenden erwähnst. Falls du die Daten - abänderst oder auf bestimmte Art einbaust, darfst du das Ergebnis nur unter - der gleichen Lizenz verbreiten. Siehe die - Urheberrechts- und Lizenzseite für Einzelheiten. - legal_title: Rechtliche Hinweise - legal_html: |- - Diese Website und viele damit in Zusammenhang stehenden Dienste werden - von der OpenStreetMap Foundation (OSMF) - für die OSM-Gemeinschaft betrieben. Die Verwendung aller OSMF-betriebenen Dienste - ist Thema unserer - „Acceptable Use Policies“ - und unserer Datenschutzrichtlinie. -
      - Bitte kontaktiere die OSMF, - falls du Lizenz-, Urheberrechts- oder andere rechtliche Fragen hast. -
      - OpenStreetMap, das Lupenlogo und „State of the Map“ sind eingetragene Warenzeichen der OSMF. - partners_title: Partner notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} hat zu einem Blogeintrag kommentiert' @@ -1551,6 +1232,168 @@ de: delete: deleted: Nachricht gelöscht site: + about: + next: Nächste + copyright_html: ©OpenStreetMap
      Mitwirkende + used_by: '%{name} stellt Kartendaten für tausende von Webseiten, Apps und andere + Geräte zur Verfügung' + lede_text: |- + OpenStreetMap wird von einer Vielzahl von Mappern erstellt, die Daten zu + Wegen, Gebäuden und allerlei Weiterem weltweit erfassen und pflegen. + local_knowledge_title: Lokales Wissen + local_knowledge_html: |- + OpenStreetMap legt Wert auf lokales Wissen. Autoren benutzen + Luftbilder, GPS-Geräte und Feldkarten zur Verifizierung, sodass OSM + korrekt und aktuell ist. + community_driven_title: Gemeinschaftsbetrieben + community_driven_html: |- + Die OpenStreetMap-Gemeinschaft ist vielfältig, leidenschaftlich und wächst täglich. + Unsere Mitwirkenden sind begeisterte Mapper, GIS-Profis, Ingenieure, die die OSM-Server + betreiben und viele mehr. + Um mehr über die Gemeinschaft zu erfahren, lies unseren + OpenStreetMap-Blog, + die Benutzertagebücher, + Community-Blogs und die Website der + OSM-Foundation. + open_data_title: Open Data + open_data_html: |- + OpenStreetMap ist „Open Data“: Du kannst es für jeden Zweck verwenden, + solange du OpenStreetMap und seine Mitwirkenden erwähnst. Falls du die Daten + abänderst oder auf bestimmte Art einbaust, darfst du das Ergebnis nur unter + der gleichen Lizenz verbreiten. Siehe die + Urheberrechts- und Lizenzseite für Einzelheiten. + legal_title: Rechtliche Hinweise + legal_html: |- + Diese Website und viele damit in Zusammenhang stehenden Dienste werden + von der OpenStreetMap Foundation (OSMF) + für die OSM-Gemeinschaft betrieben. Die Verwendung aller OSMF-betriebenen Dienste + ist Thema unserer + „Acceptable Use Policies“ + und unserer Datenschutzrichtlinie. +
      + Bitte kontaktiere die OSMF, + falls du Lizenz-, Urheberrechts- oder andere rechtliche Fragen hast. +
      + OpenStreetMap, das Lupenlogo und „State of the Map“ sind eingetragene Warenzeichen der OSMF. + partners_title: Partner + copyright: + foreign: + title: Über diese Übersetzung + text: Für den Fall einer Abweichung zwischen der vorliegenden Übersetzung + und %{english_original_link}, ist die englischsprachige Seite maßgebend. + english_link: dem englischsprachigen Original + native: + title: Über diese Seite + text: Du befindest dich auf der Seite mit der englischsprachigen Version der + Urheberrechts- und Lizensierungsinformationen. Du kannst zur %{native_link} + dieser Seite zurückkehren oder das Lesen der Urheberrechtsinformationen + beenden und %{mapping_link}. + native_link: deutschen Sprachversion + mapping_link: mit dem Kartieren anfangen + legal_babble: + title_html: Urheberrecht und Lizenz + intro_1_html: |- + OpenStreetMap® sind „Open Data“, die gemäß der + Open Data Commons Open Database Lizenz + (ODbL) durch die OpenStreetMap Foundation (OSMF) verfügbar sind. + intro_2_html: |- + Es steht dir frei unsere Daten zu kopieren, weiterzugeben, + zu übermitteln sowie anzupassen, sofern du OpenStreetMap + und die Mitwirkenden als Quelle angibst. Für den Fall, dass + du auf Basis unserer Daten Anpassungen vornimmst, oder sie + als Grundlage für weitere Bearbeitungen verwendest, kannst + du das Ergebnis auch nur gemäß der selben Lizenz weitergeben. + Der vollständige Lizenztext ist unter + Lizenz + einsehbar und erläutert deine Rechte und Pflichten. + intro_3_html: Die Kartografie in unseren Kartenkacheln und unsere Dokumentation + sind unter der ''Creative-Commons''-Lizenz „Namensnennung + – Weitergabe unter gleichen Bedingungen“ 2.0 (CC BY-SA) verfügbar. + credit_title_html: Wie auf die Urheberschaft von OpenStreetMap hinzuweisen + ist + credit_1_html: Wir verlangen die Verwendung des Hinweises „© OpenStreetMap-Mitwirkende“. + credit_2_html: |- + Du musst auch klarstellen, dass die Daten unter der Open-Database-Lizenz + verfügbar sind, und, sofern du unsere Kartenkacheln verwendest, dass die + Kartografie gemäß CC BY-SA lizenziert ist. Du kannst dies tun, indem du auf + www.openstreetmap.org/copyright verlinkst. + Ersatzweise, und als Erfordernis, falls du OSM in Datenform weitergibst, + kannst du die Lizenz(en) direkt verlinken und benennen. In Medien, in denen + keine Links möglich sind (z.B. gedruckten Werken), empfehlen wir dir, + deine Leser direkt auf openstreetmap.org zu verweisen (möglicherweise mit + dem Erweitern von „OpenStreetMap“ zur vollen Adresse), auf opendatacommons.org, + und, sofern zutreffend, auf creativecommons.org. + credit_3_html: |- + Der Hinweis sollte für eine durchsuchbare elektronische Karte in der Ecke der Karte stehen. + Zum Beispiel: + attribution_example: + alt: Beispiel, wie man auf OpenStreetMap auf einer Webseite hinweist + title: Namensnennungs-Beispiel auf einer Website mit elektronischer Karte + more_title_html: Weitere Informationen + more_1_html: |- + Mehr Informationen dazu, wie unsere Daten verwendet werden können und wie man auf unsere Urheberschaft hinweist, + kann man auf unserer OSMF-Lizenzseite nachlesen. + more_2_html: |- + Obwohl OpenStreetMap „Open Data“ ist, können wir keine + unentgeltliche Karten-API für Drittparteien bereitstellen. + Siehe unsere API-Verwendungsrichtlinie, + die Kachelverwendungsrichtlinie + und die Nominatim-Verwendungsrichtlinie. + contributors_title_html: Unsere Mitwirkenden + contributors_intro_html: 'Unsere Mitwirkenden sind tausende einzelne Menschen. + Wir beziehen auch offen lizenzierte Daten von nationalen Kartenagenturen + und anderen Quellen ein, darunter:' + contributors_at_html: 'Österreich: Enthält Daten der Stadt + Wien (lizenziert gemäß CC + BY AT), des Landes + Vorarlberg und des Landes Tirol (lizenziert + gemäß CC BY AT samt Erweiterungen zur Lizenz).' + contributors_ca_html: 'Kanada: Enthält Daten von GeoBase®, + GeoGratis (© Department of Natural Resources Canada), CanVec + (© Department of Natural Resources Canada) und StatCan (Geography + Division, Statistics Canada).' + contributors_fi_html: |- + Finnland: Enthält Daten von der + topografischen Datenbank der National Land Survey of Finland + und andere Datensätze, unter der + NLSFI-Lizenz. + contributors_fr_html: 'Frankreich: Enthält Daten der Direction + Générale des Impôts.' + contributors_nl_html: 'Niederlande: Enthält, © AND-Daten, + 2007 (www.and.com)' + contributors_nz_html: 'Neuseeland: Enthält Daten aus Land + Information New Zealand. Urheberrecht vorbehalten.' + contributors_si_html: |- + Slowenien: Enthält Daten aus der + Vermessungs- und Kartierungsbehörde sowie dem + Ministerium für Landwirtschaft, Forsten und Ernährung + (öffentliche Informationen von Slowenien). + contributors_za_html: 'Südafrika: Enthält Daten von Chief Directorate: National Geo-Spatial Information, + Staatliches Urheberrecht vorbehalten.' + contributors_gb_html: 'Vereinigtes Königreich: Enthält Daten + des Ordnance Survey © Urheber- und Datenbankrecht 2010-12.' + contributors_footer_1_html: Weitere Informationen sowie andere Datenquellen, + die zur Verbesserung von OpenStreetMap genutzt wurden, sind auf der + Seite über die Mitwirkenden im Wiki von OpenStreetMap zu finden. + contributors_footer_2_html: Die Einbeziehung von Daten bei OpenStreetMap bedeutet + nicht, dass der ursprüngliche Datenlieferant OpenStreetMap unterstützt, + Gewährleistung dafür gibt oder die Haftung dafür übernimmt. + infringement_title_html: Urheberrechtsverletzung + infringement_1_html: Die Mitwirkenden von OpenStreetMap weisen wir darauf + hin, dass keinesfalls Daten aus urheberrechtlich geschützten Quellen verwendet + werden dürfen (z. B. Google Maps oder gedruckte Kartenwerke), ohne vorher + die ausdrückliche Erlaubnis des Rechteinhabers erhalten zu haben. + infringement_2_html: |- + Sofern du denkst, dass urheberrechtlich geschütztes Material unerlaubterweise zur + OpenStreetMap-Datenbank oder auf dieser Website hinzugefügt wurde, informiere dich + bitte über unser Verfahren + zum Entfernen von Inhalten oder melde dies direkt mit unserem + Onlineformular. + trademarks_title_html: Markenzeichen + trademarks_1_html: OpenStreetMap, das Lupenlogo und „State of the Map“ sind + eingetragene Warenzeichen der OpenStreetMap Foundation. Falls du Fragen + über deine Verwendung der Marken hast, lies bitte unsere Markenrichtlinie. index: js_1: Dein Browser unterstützt kein JavaScript oder du hast es deaktiviert. js_2: OpenStreetMap nutzt JavaScript für die Kartendarstellung. @@ -1584,6 +1427,115 @@ de: id_not_configured: iD wurde nicht konfiguriert no_iframe_support: Der Browser unterstützt keine HTML-Inlineframes (iframes), die für diese Funktion notwendig sind. + export: + title: Exportieren + area_to_export: Bereich für den Export + manually_select: Einen anderen Bereich manuell auswählen + format_to_export: Format für den Export + osm_xml_data: OpenStreetMap-XML-Daten + map_image: Karte (zeigt die Standardebene) + embeddable_html: HTML zum Einbinden + licence: Lizenz + export_details: Die von OpenStreetMap zur Verfügung gestellten Daten sind unter + der Open Data Commons + Open Database Lizenz (ODbL) lizenziert. + too_large: + advice: 'Falls der obenstehende Export fehlschlägt, erwäge bitte, eine der + unten aufgelisteten Quellen zu verwenden:' + body: Dieser Bereich ist zu groß, um als OpenStreetMap-XML-Daten exportiert + zu werden. Bitte heranzoomen, einen kleineren Bereich wählen oder eine der + folgenden Quellen für Massendatendownloads nutzen. + planet: + title: Planet OSM + description: Regelmäßig aktualisierte Kopien der kompletten OpenStreetMap-Datenbank + overpass: + title: Overpass API + description: Diese Bounding Box von einem Mirror der OpenStreetMap-Datenbank + herunterladen + geofabrik: + title: Geofabrik Downloads + description: Regelmäßig aktualisierte Auszüge von Kontinenten, Ländern und + ausgewählten Städten. + metro: + title: Metro Extracts + description: Auszüge für bedeutende Weltstädte und ihre Umgebungen + other: + title: Andere Quellen + description: Zusätzliche Quellen sind im OpenStreetMap-Wiki gelistet + options: Optionen + format: 'Format:' + scale: Maßstab + max: max. + image_size: 'Bildgröße:' + zoom: Zoom + add_marker: Markierung zur Karte hinzufügen + latitude: 'Breitengrad:' + longitude: 'Längengrad:' + output: Ausgabe + paste_html: HTML-Code kopieren, um ihn in eine Website einzufügen + export_button: Export + fixthemap: + title: Ein Problem melden / Die Karte korrigieren + how_to_help: + title: So kannst du helfen + join_the_community: + title: Der Gemeinschaft beitreten + explanation_html: |- + Falls du bei unseren Kartendaten ein Problem bemerkt hast wie das Fehlen einer Straße oder deiner Adresse, + ist der beste Weg zum Weitermachen der Beitritt zur OpenStreetMap-Gemeinschaft und das Beheben der Daten durch dich selbst. + add_a_note: + instructions_html: |- + Klicke einfach auf oder auf das gleiche Symbol in der Kartenanzeige. + Dies fügt eine Markierung der Karte hinzu, die du durch Ziehen verschieben kannst. + Schreibe deine Nachricht, klicke auf „Speichern“ und andere Mapper werden den Fehler untersuchen. + other_concerns: + title: Andere Anliegen + explanation_html: |- + Falls du Bedenken über die Verwendung unserer Daten oder über die Inhalte hast, lies bitte unsere + Copyright-Seite für mehr rechtliche Informationen oder kontaktiere die entsprechende + OSMF-Arbeitsgruppe. + help: + title: Hilfe erhalten + introduction: |- + OpenStreetMap hat mehrere Quellen zum Lernen, Stellen und Beantworten von Fragen über das Projekt + und zum gemeinsamen Diskutieren und Dokumentieren von Kartierungsthemen. + welcome: + url: /welcome + title: Willkommen bei OSM + description: Beginne mit dieser Schnellanleitung, die die OpenStreetMap-Grundlagen + abdeckt. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/DE:Beginners%27_guide + title: Anleitung für Anfänger + description: Eine durch die Gemeinschaft gewartete Anleitung für Anfänger. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Stelle eine Frage oder suche nach Antworten auf der OSM-Fragen-und-Antworten-Seite. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Mailinglisten + description: Stelle eine Frage und diskutiere interessante Sachen zu einem + weiten Bereich von thematischen oder regionalen Mailinglisten. + forums: + url: http://forum.openstreetmap.org/ + title: Foren + description: Fragen und Diskussionen für diejenigen, die eine Oberfläche in + der Art einer Anschlagstafel bevorzugen. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Interaktiver Chat in vielen unterschiedlichen Sprachen und zu + vielen Themen. + switch2osm: + url: https://switch2osm.org/ + title: Zu OSM wechseln + description: Hilfe für auf Karten und anderen Diensten gegründeten Unternehmen + und Organisationen, die zu OpenStreetMap wechseln. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Durchsuche das Wiki für eine ausführliche OSM-Dokumentation. sidebar: search_results: Suchergebnisse close: Schließen @@ -1684,6 +1636,58 @@ de: image: Bild alt: Alt-Text url: URL + welcome: + title: Willkommen! + introduction_html: |- + Willkommen bei OpenStreetMap, der weltweiten freien und editierbaren Karte. Mit deiner Anmeldung ist alles so weit, dass du anfangen kannst die Karte zu bearbeiten. + Hier sind noch eine paar nützliche zusätzliche Informationen. + whats_on_the_map: + title: Was gehört in die Karte? + on_html: |- + OpenStreetMap ist eine Datenbank, in der man alles erfassen kann, was derzeit real existiert. - + Dies beinhaltet sowohl Straßen, Gebäude und Plätze mit ihren Eigenschaften, als auch z.B. Geschäfte, Briefkästen oder Hydranten. Eigentlich eben alles, was man so dauerhaft in der Umgebung finden kann und einen interessiert. + off_html: |- + Was nicht in die Datenbank gehört sind subjektive Daten wie Bewertungen, nicht mehr aktuelle + historische Fakten oder nicht real existierende Dinge. Ausserdem ist es wichtig, nichts von + anderen Quellen (auch nicht aus Papierkarten) zu kopieren, da OpenStreetMap das Urheberrecht sehr ernst nimmt. + basic_terms: + title: Grundbegriffe fürs Mapping + paragraph_1_html: OpenStreetMap nutzt ein paar spezifische Begriffe. Hier + sind ein paar davon, die nützlich sein dürften. + editor_html: Ein Editor ist ein Programm oder eine Webseite, + mit der man die Karte bearbeiten kann. + node_html: Ein Node ("Knoten") in OSM ist ein Punkt auf der + Karte, z.B. ein Restaurant oder ein Baum. + way_html: Ein Way ("Weg") in OSM ist eine offene Linie wie + z.B. eine Straße, ein Weg, ein Fluss oder bildet eine geschlossene Fläche, + z.B. ein Gebäude. + tag_html: Ein tag („Attribut“) ist eine Eigenschaft, die + man einem Objekt zuweist, z. B. der Name eines Restaurants oder die + erlaubte Höchstgeschwindigkeit auf einer Straße. + rules: + title: Regeln! + paragraph_1_html: "OpenStreetMap hat nur wenige formale Regeln, aber wir erwarten, + dass alle Teilnehmer\nmit der Gemeinschaft zusammenarbeiten und kommunizieren. + Falls du andere Aktivitäten erwägst\nals per Hand zu bearbeiten, lies und + folge bitte den Richtlinien zu\nImporten + und \nautomatischen + Bearbeitungen." + questions: + title: Fragen? + paragraph_1_html: |- + OpenStreetMap hat mehrere Quellen zum Lernen, Stellen und Beantworten von Fragen über das Projekt + und zum gemeinsamen Diskutieren und Dokumentieren von Kartierungsthemen. + Erhalte hier Hilfe. + start_mapping: Beginne mit dem Bearbeiten der Karte + add_a_note: + title: Keine Zeit? Dann füge einen Hinweis ein! + paragraph_1_html: Falls du nur eine Kleinigkeit korrigieren möchtest und dir + die Zeit fehlt, dich einzuarbeiten, wie man in OSM Daten editiert, so gib + einfach einen Hinweis/melde einen Fehler, dann kann sich ein anderer Mapper + darum kümmern. + paragraph_2_html: |- + Gehe einfach auf die Karte und klicke auf das Sprechblasen-Symbol: + . Dies fügt einen Marker auf der Karte hinzu, diesen verschiebe bitte möglichst genau auf die Problemstelle und schreibe einen Hinweis. Der Hinweis sollte den Sachverhalt möglichst genau beschreiben, damit ein anderer Mapper die Erklärung dann verwenden kann, um den Fehler zu beheben. trace: visibility: private: Privat (werden nur als anonyme, unsortierte Punkte ohne Zeitangaben @@ -1729,6 +1733,7 @@ de: trace_header: upload_trace: Lade einen Track hoch see_all_traces: Alle Tracks ansehen + see_my_traces: Meine Tracks ansehen traces_waiting: one: Du hast momentan %{count} Track in der Warteschlange. Bitte warte, bis er fertig ist, um die Verarbeitung nicht für andere Nutzer zu blockieren. @@ -1755,6 +1760,7 @@ de: delete_track: Diesen Track löschen trace_not_found: Track nicht gefunden! visibility: 'Sichtbarkeit:' + confirm_delete: Diesen Track löschen? trace_paging_nav: showing_page: Seite %{page} older: Ältere Tracks @@ -1777,6 +1783,7 @@ de: map: Karte list: public_traces: Öffentliche GPS-Tracks + my_traces: Meine GPS-Tracks public_traces_from: Öffentliche GPS-Tracks von %{user} description: Letzte GPS-Track-Uploads durchsuchen tagged_with: ' gekennzeichnet mit %{tags}' @@ -1815,7 +1822,7 @@ de: Bitte melde dich mit deinem Benutzerkonto an, um die „Bedingungen für Mitwirkende“ einzusehen. Du musst nicht einverstanden sein, aber du musst sie gesehen haben. oauth: - oauthorize: + authorize: title: Zugriff auf dein Benutzerkonto autorisieren request_access: 'Die Anwendung %{app_name} möchte auf dein OpenStreetMap-Konto %{user} zugreifen. Bitte entscheide, ob du der Anwendung die folgenden Berechtigungen @@ -1830,11 +1837,11 @@ de: allow_write_gpx: GPS-Tracks hochzuladen allow_write_notes: Hinweise zu geben/Fehler zu melden grant_access: Zugriff gewähren - oauthorize_success: + authorize_success: title: Autorisierungsanfrage genehmigt allowed: Du hast den Benutzerkontenzugriff für die Anwendung %{app_name} gewährt. verification: Der Verifizierungscode ist %{code}. - oauthorize_failure: + authorize_failure: title: Autorisierungsanfrage fehlgeschlagen denied: Du hast den Benutzerkontenzugriff für die Anwendung %{app_name} abgelehnt. invalid: Der Autorisierungstoken ist nicht gültig. @@ -2083,6 +2090,7 @@ de: if set location: Lege in den %{settings_link} deinen Standort fest, um Benutzer in der Nähe anzeigen zu können. settings_link_text: Einstellungen + my friends: Meine Freunde no friends: Du hast noch keine Freunde hinzugefügt. km away: '%{count} km entfernt' m away: '%{count} m entfernt' @@ -2289,7 +2297,7 @@ de: fail: Konnte die Zuordnung von Benutzer „%{name}“ zu Rolle „%{role}“ nicht aufheben. Bitte überprüfe, ob es sich um einen gültigen Benutzer und eine gültige Rolle handelt. - user_block: + user_blocks: model: non_moderator_update: Du musst Moderator sein, um eine Sperre einzurichten oder zu ändern. @@ -2355,20 +2363,6 @@ de: period: one: 1 Stunde other: '%{count} Stunden' - partial: - show: Anzeigen - edit: Bearbeiten - revoke: Aufheben! - confirm: Bist du sicher? - display_name: Gesperrter Benutzer - creator_name: Urheber - reason: Grund der Sperre - status: Status - revoker_name: Aufgehoben von - not_revoked: (nicht aufgehoben) - showing_page: Seite %{page} - next: Nächste » - previous: « Vorige helper: time_future: Endet in %{time}. until_login: Aktiv, bis der Benutzer sich anmeldet. @@ -2400,8 +2394,22 @@ de: revoker: 'Aufgehoben von:' needs_view: Der Benutzer muss sich wieder anmelden, damit die Sperre beendet wird. - note: - description: + block: + not_revoked: (nicht aufgehoben) + show: Anzeigen + edit: Bearbeiten + revoke: Aufheben! + blocks: + display_name: Gesperrter Benutzer + creator_name: Urheber + reason: Grund der Sperre + status: Status + revoker_name: Aufgehoben von + showing_page: Seite %{page} + next: Nächste » + previous: « Vorige + notes: + comment: opened_at_html: '%{when} erstellt' opened_at_by_html: '%{when} von %{user} erstellt' commented_at_html: '%{when} aktualisiert' @@ -2532,7 +2540,7 @@ de: distance: Distanz errors: no_route: Wir konnten keine Strecke zwischen diesen beiden Orten berechnen. - no_place: Wir konnten den Ort nicht finden. + no_place: Wir konnten den Ort „%{place}“ leider nicht finden. instructions: continue_without_exit: Weiter auf %{name} slight_right_without_exit: Leicht rechts auf %{name} @@ -2554,6 +2562,7 @@ de: onramp_right_with_name_directions: Rechts auf die Auffahrt auf %{name} Richtung %{directions} abbiegen onramp_right_without_directions: Rechts auf die Auffahrt abbiegen + onramp_right: Rechts auf die Auffahrt abbiegen endofroad_right_without_exit: Am Straßenende rechts abbiegen auf %{name} merge_right_without_exit: Rechts einfädeln in %{name} fork_right_without_exit: Bei der Gabelung rechts abbiegen auf %{name} @@ -2579,6 +2588,7 @@ de: onramp_left_with_name_directions: Links auf die Auffahrt auf %{name} Richtung %{directions} abbiegen onramp_left_without_directions: Links auf die Auffahrt abbiegen + onramp_left: Links auf die Auffahrt abbiegen endofroad_left_without_exit: Am Straßenende links abbiegen auf %{name} merge_left_without_exit: Links einfädeln in %{name} fork_left_without_exit: Bei der Gabelung links abbiegen auf %{name} @@ -2615,7 +2625,7 @@ de: show_address: Adresse anzeigen query_features: Abfrage-Funktionen centre_map: Karte hier zentrieren - redaction: + redactions: edit: description: Beschreibung heading: Redaction bearbeiten diff --git a/config/locales/diq.yml b/config/locales/diq.yml index 33090156d..63d02781d 100644 --- a/config/locales/diq.yml +++ b/config/locales/diq.yml @@ -241,35 +241,6 @@ diq: ago: Verdê %{ago} newer_comments: Tewr Vatışê Newey older_comments: Vatışo Tewr Kehan - export: - title: Teberdayış - start: - area_to_export: Cayo ke cıra bıvciyo - manually_select: Be desti ra yew cayo bin weçıne - format_to_export: Formatê teberi ra eştışi - osm_xml_data: OpenStreetMap XML Data - licence: Lisans - too_large: - planet: - title: Geyrenıka OSM - overpass: - title: Overpass API - metro: - title: Çap kerdenê Metroy - description: Çap kerdenê metroyan u banliyo - other: - title: Çemê bini - options: Weçinegi - format: Format - scale: Sence - max: maks - image_size: Gırdiya Resimi - zoom: Nezdı fi - add_marker: Xeriter rê yew nışan berz - latitude: 'Verıniye:' - longitude: 'Derganiye:' - output: Vıcyaen - export_button: Teberdayış geocoder: search: title: @@ -692,11 +663,6 @@ diq: copyright: Heqa telıfi community: Cemaet community_blogs: Blogê Cemaeti - license_page: - native: - title: Heqa na pele de - welcome_page: - title: Xeyr amey! notifier: diary_comment_notification: hi: Merheba %{to_user}, @@ -750,10 +716,41 @@ diq: sent_message_summary: delete_button: Bestere site: + copyright: + native: + title: Heqa na pele de index: permalink: Gıreyo daimi edit: user_page_link: pela karberi + export: + title: Teberdayış + area_to_export: Cayo ke cıra bıvciyo + manually_select: Be desti ra yew cayo bin weçıne + format_to_export: Formatê teberi ra eştışi + osm_xml_data: OpenStreetMap XML Data + licence: Lisans + too_large: + planet: + title: Geyrenıka OSM + overpass: + title: Overpass API + metro: + title: Çap kerdenê Metroy + description: Çap kerdenê metroyan u banliyo + other: + title: Çemê bini + options: Weçinegi + format: Format + scale: Sence + max: maks + image_size: Gırdiya Resimi + zoom: Nezdı fi + add_marker: Xeriter rê yew nışan berz + latitude: 'Verıniye:' + longitude: 'Derganiye:' + output: Vıcyaen + export_button: Teberdayış sidebar: search_results: Neticeyê geyrayışi close: Racnê @@ -798,6 +795,8 @@ diq: text: Metın image: Resım url: GRE + welcome: + title: Xeyr amey! trace: edit: filename: 'Namey dosya:' @@ -1024,7 +1023,7 @@ diq: confirm: Tesdiq ke revoke: confirm: Tesdiq ke - user_block: + user_blocks: new: title: '%{name}i rê blok vırazeno.' heading: '%{name}i ro blok vırazeno.' @@ -1045,19 +1044,6 @@ diq: period: one: 1 seate other: '%{count} seati' - partial: - show: Bımocne - edit: Bıvırne - revoke: Terkne! - confirm: Vac welay? - display_name: Karberê kılitbiyayey - creator_name: Vıraştoğ - status: Weziyet - revoker_name: Terknoğ - not_revoked: (nê terkiyayo) - showing_page: Pele %{page} - next: Peyên » - previous: « Verên helper: time_future: '%{time} dı bıqediyo' time_past: Verdê %{time} qedya @@ -1078,7 +1064,20 @@ diq: revoke: Terkne! confirm: Vac welay? revoker: 'Terkner:' - note: + block: + not_revoked: (nê terkiyayo) + show: Bımocne + edit: Bıvırne + revoke: Terkne! + blocks: + display_name: Karberê kılitbiyayey + creator_name: Vıraştoğ + status: Weziyet + revoker_name: Terknoğ + showing_page: Pele %{page} + next: Peyên » + previous: « Verên + notes: entry: comment: Mışewre javascripts: @@ -1101,7 +1100,7 @@ diq: comment: Mışewre directions: time: Zeman - redaction: + redactions: edit: description: Şınasnayış new: diff --git a/config/locales/dsb.yml b/config/locales/dsb.yml index 8e1547844..0fc05540b 100644 --- a/config/locales/dsb.yml +++ b/config/locales/dsb.yml @@ -311,54 +311,6 @@ dsb: ago: pśed %{ago} newer_comments: NowÅ¡e komentary older_comments: StarÅ¡e komentary - export: - title: Eksportěrowaś - start: - area_to_export: Wurězk za eksport - manually_select: Drugi wurězk manuelnje wubraś - format_to_export: Format za eksport - osm_xml_data: XML-daty OpenStreetMap - map_image: Kórtowy wobraz (pokazujo standardnu rowninu) - embeddable_html: Zasajźujobny HTML - licence: Licenca - export_details: Daty OpenStreetMap licencěruju se pód licencu Licenca - Data Commons Open Database (ODbL). - too_large: - advice: 'Jolic górni eksport se njeraźi, pÅ¡osym rozwaž, lěc wužywaÅ¡ jadnu - ze slědujucych lisćinow:' - body: 'Toś ten wobcerk jo pśewjeliki za eksportěrowanje ako XML-daty OpenStreetMap. - PÅ¡osym pówětÅ¡ abo wubjeŕ mjeńšy wobcerk abo wužyj jadno ze slědujucych žrědłow - za ześěgnjenje wjelikich kopicow datow:' - planet: - title: Planet OSM - description: PÅ¡awidłownje zaktualizěrowane kopije dopołneje datoweje banki - OpenStreetMap - overpass: - title: Overpass API - description: Toś ten wobłuk z glědałkowego serwera datoweje banki OpenStreetMap - ześěgnuś - geofabrik: - title: Geofabrik Downloads - description: PÅ¡awidłownje zaktualizěrowane wuśěgi kontinentow, krajow a - wubranych městow - metro: - title: Metro Extracts - description: Wuśěgi za nejwětÅ¡e swětowe města a jich wokolinu - other: - title: Druge žrědła - description: Pśidatne žrědła nalicone wikiju OpenStreetMap - options: Opcije - format: 'Format:' - scale: Měritko - max: maks. - image_size: 'Wobrazowa wjelikosć:' - zoom: Skalěrowanje - add_marker: Kórśe marku pśidaś - latitude: 'Å yrina:' - longitude: 'Dlinina:' - output: Wudaśe - paste_html: HTML kopěrowaś, aby se zasajźił do websedła - export_button: Eksport geocoder: search: title: @@ -874,200 +826,6 @@ dsb: text: Pósćiś learn_more: DalÅ¡ne informacije more: Wěcej - license_page: - foreign: - title: Wó toś tom pśełožku - text: W paźe konflikta mjazy pśełožonym bokom a %{english_original_link}, engelski - bok ma prědnosć měś - english_link: engelskim originalom - native: - title: Wó toś tom boku - text: WoglědujoÅ¡ se engelsku wersiju boka awtorskego pÅ¡awa. MóžoÅ¡ se k %{native_link} - toś togo boka wrośiś abo pśestaś wó awtorskem pÅ¡awje cytaś a %{mapping_link}. - native_link: dolnoserbskej wersiji - mapping_link: kartěrowanje zachopiś - legal_babble: - title_html: Awtorske pÅ¡awo a licenca - intro_1_html: |- - OpenStreetMap su zjawne daty, licencěrowane pód licencu Open Data - Commons Open Database (ODbL). - intro_2_html: MóžoÅ¡ naÅ¡e daty kopěrowaś, rozdźěliś, pśenjasć a pśiměriś, tak - dłujko ako naspomnjejoÅ¡ OpenStreetMap a jich sobustatkujucych. Jolic změnijoÅ¡ - naÅ¡e kórty abo daty abo zepěraÅ¡ se na nje, móžoÅ¡ wuslědk jano pód teju sameju - licencu rozdźěliś. Dopołny pÅ¡awniski - code wujasnjujo twóje pÅ¡awa a zagronitosći. - intro_3_html: Kartografija w naÅ¡ych kórtowych kachlach a naÅ¡a dokumentacija - stej pód licencu Creative - Commons Attribution-ShareAlike 2.0 (CC-BY-SA) licencěrowanej. - credit_title_html: Kak naspomnjeś awtorstwo OpenStreetMap - credit_1_html: Pominamy se, až pódawaÅ¡ sobustatkujucych “© OpenStreetMap”. - credit_2_html: MusyÅ¡ teke wujasniś, až daty stoje pód licencu Open Database, - a, jolic naÅ¡e kórtowe kachle se wužywaju, až kartografija licencěrujo se pód - CC-BY-SA. MóžoÅ¡ to cyniś, z tym až wótkazujoÅ¡ do toś - togo boka awtorskego pÅ¡awa. Alternatiwnje, a ako pótrěbnosć, jolic rozdźělujoÅ¡ - OSM w datowem formje, móžoÅ¡ direktnje k licencam pomjenjowaś a wótkazaś. W - medijach, źož wótkaze njejsu móžno (na pś. wuśišćane źěła), naraźujomy śi, - twójich cytarjow na openstreetmap.org (snaź z tym až rozÅ¡yrjujoÅ¡ 'OpenStreetMap' - k toś tej połnej adresy), na opendatacommons.org a, jolic to jo relewantne, - na creativecommons.org dopomnjeś. - credit_3_html: 'Za pśepytujobnu elektronisku kórtu by měło se źěkowanje w rožku - kórty pokazaś. Na pśikład:' - attribution_example: - alt: Pśikład, kak pokazujo se na webboku na OpenStreetMap - title: Pśipokazański pśikład - more_title_html: DalÅ¡ne informacije - more_1_html: Cytaj wěcej wó wužywanju naÅ¡ych datow a kak dajo se nas pśipóznaś - pód Ceste pÅ¡awniske - pÅ¡aÅ¡enja. - more_2_html: "Lěcrownož OpenStreetMap wobstoj ze zjawnych datow, njamóžomy dermotny - kórtowy API za wuwijarjow tśeśich póbitowaś. \nGlědaj naÅ¡e pÅ¡awidła - za wužywanje API, PÅ¡awidła - za wužywanje kachlow a PÅ¡awidła - za wužywanje Nominatim." - contributors_title_html: NaÅ¡e sobustatkujuce - contributors_intro_html: 'NaÅ¡e sobustatkujuce su towzynty wósobow. Zapśimujomy - teke daty wótwórjoneje licence z narodnych kartěrowańskich pśedewześow a drugich - žrědłow, mjaz nimi:' - contributors_at_html: 'Awstriska: Wopśimujo daty z Stadt - Wien (pód CC - BY), Land - Vorarlberg a Land Tirol (pod CC-BY - AT ze změnami).' - contributors_ca_html: 'Kanada: Wopśimujo daty z GeoBase®, - GeoGratis (© Department of Natural Resources Canada), CanVec (© - Department of Natural Resources Canada), a StatCan (Geography Division, Statistics - Canada).' - contributors_fi_html: 'Finska: Wopśimujo daty z topografiskeje - datoweje banki National Land Survey of Finland a drugich datowych sajźbow, - pód NLSFI-licencuFrancojska
      : Wopśimujo daty z Direction - Générale des Impôts.' - contributors_nl_html: 'Nižozemska: Wopsimujo daty © AND, - 2007 (www.and.com)' - contributors_nz_html: 'Nowoseelandska: Wopśimujo daty ze žrědłow - wót Land Information New Zealand. Awtorske pÅ¡awo wuměnjone.' - contributors_za_html: 'Pódpołdnjowa Afrika: Wopśimujo daty - z Chief Directorate: National Geo-Spatial - Information, Statne awtorske pÅ¡awo wuměnjone.' - contributors_gb_html: 'Zjadnośone kralojstwo: Wopśimujo daty - z Ordnance Survey (Amtske rozměrjenje kraja) © Awtorske pÅ¡awo a pÅ¡awo - za datowe banki 2010-2012.' - contributors_footer_1_html: Za dalÅ¡ne drobnostki za to a druge žrědła, kótarež - su se wužyli, aby OpenStreetMap pólěpÅ¡yli, glědaj pÅ¡oÅ¡ym bok - sobustatkujucych na wikiju OpenStreetMap. - contributors_footer_2_html: Zapśimowanje datow do OpenStreetMap njegroni, až - póbitowaŕ originalnych datow pśipóznawa OpenStreetMap, dawa někaku garantiju - abo pśewzejo rukowanje. - infringement_title_html: Pśejźenje stwóriśelskego pÅ¡awa - infringement_1_html: Sobustatkujucych OSM napominamy, až njedodawaju nigda daty - ze žrědłow, kótarež su pśez awtorske pÅ¡awo šćitane (na pś. z Google Maps abo - z wuśišćanych kórtow) bźez wurazneje dowólnosći awtorow. - infringement_2_html: Joli měniÅ¡, aý awtorskopÅ¡awniski šćitany material jo se - datowej bance OpenStreetMap abo toś tomu sedłoju bźez dowólnosći pśidał, póśěguj - se pÅ¡osym na naÅ¡o póstupowanje - za wótwónoźowanje wopśimjeśaabo daj to direktnje na naÅ¡om formularnem - boku k wěsći. - welcome_page: - title: Witaj! - introduction_html: Witaj k OpenstreetMap, lichej a wobźěłujobnej kórśe swěta. - Něnto, za tym až sy se zregistrěrował, móžoÅ¡ se do kartěrowanja pušćiś. How - jo krotke zapokazanje z nejwažnjejÅ¡ymi informacijami, kótarež musyÅ¡ wěźeś. - whats_on_the_map: - title: Což na kórtu słuÅ¡a - on_html: OpenStreetMap jo městno za kartěrowanje wěcow, kótarež su realne - a aktualne - wopśimujo miliony twarjenjow, puśow a druge drobnostki wó - městnach. MóžoÅ¡ kartěrowaś, cožkuli zajmujo śi we napÅ¡awdnem swěśe. - off_html: Což njama wopśimjeś, su subjektiwne daty kaž pogódnośenja, - historiske abo hypotetiske funkcije a daty z pśez awtorske pÅ¡awo šćitanych - žrědłow. Njekopěruj z online- abo papjernych kórtow, snaźkuli maÅ¡ wósebnu - dowólnosć. - basic_terms: - title: Zakładne zapśimjeśa za kartěrowanje - paragraph_1_html: OpenStreetMap wužywa někotare wósebne zapśimjeśa. How su někotare - z nich, kótarež by mógli śi wužytne byś. - editor_html: Editor jo program abo websedło, kótarež móžoÅ¡ - wužywaś, aby kórtu wobźěłał. - node_html: Suk jo dypk na kórśe, na pś. gósćeńc abo bom. - way_html: Puś jo linija abo płonina, na pś. droga, rěka, jazor - abo twarjenje. - tag_html: Atribut jo datowa kakosć wó suku abo puśu, na pśikład - mě gósćeńca abo nejwuÅ¡a spěšnosć na droze. - questions: - title: MaÅ¡ hyšći pÅ¡aÅ¡anja? - paragraph_1_html: |- - OpenStreetMap ma wÅ¡ake resurse za zeznaśe projekta, pÅ¡aÅ¡anja a wótegrona wó něcom a zgromadnu diskusiju a dokumentěrowanje kartěrowańske temy. - Pomoc. - start_mapping: Kartěrowanje zachopiś - add_a_note: - title: NjamaÅ¡ chyle za wobźěłowanje? Pśidaj pokazku! - paragraph_1_html: Jolic coÅ¡ jano drobnosć korigěrowaś a njamaÅ¡ chyle, aby se - zregistrěrował a wuknuł, kak se wobźěłujo, móžoÅ¡ jadnorje pokazku pśidaś. - paragraph_2_html: |- - Źi jadnorje na kórtu a klikni na symbol pokazki: - . Ten pśida kórśe marku, kótaruž móžoÅ¡ pśesunuś. Pśidaj swóju powěźeńku, klikni pótom na Składowaś a druge kartěrowarje budu se wěcy wěnowaś. - fixthemap: - title: Problem k wěsći daś / Kórtu pópÅ¡awiś - how_to_help: - title: Kak móžoÅ¡ pomagaś - join_the_community: - title: Zgromaźeństwu pśistupiś - explanation_html: Jolic sy problem z naÅ¡ymi kórtowymi datami zawuputnuł, na - pśikład droga abo twója adresa felujo, jo nejlěpÅ¡a waÅ¡nja, z tym pókÅ¡acowaś, - se zgromaźeństwoju OpenStreetMap pśizamknuś a sam daty pśidaś abo korigěrowaś. - add_a_note: - instructions_html: |- - Klikni jadnorje na abo na ten samski symbol w zwobraznjenju kórty. - To pśidajo kórśe marku, kótaruž móžoÅ¡ pśez śěgnjenje pśesunuś. - Pśidaj swóju powěsć, klikni pon na Składowaś a druge kartěrowarje budu pó tom slěźiś. - other_concerns: - title: Druge nastupnosći - explanation_html: Jolic maÅ¡ wobmyslenja wó tom, kak naÅ¡e daty se wužiwaju abo - nastupajucy wopśimjeśe, woglědaj se k naÅ¡omu bokoju awtorstwa - za dalÅ¡ne kazniske informacije abo staj se z wótpowědneju źěłoweju - kupku do zwiska. - help_page: - title: Pomoc - introduction: OpenStreetMap ma wÅ¡ake resurse za zeznaśe projekta, pÅ¡aÅ¡anja a wótegrona - wó něcom a zgromadnu diskusiju a dokumentěrowanje kartěrowańskich temow. - welcome: - url: /welcome - title: Witaj k OSM - description: Zachop z toś tym spěšnym rozpokazanim, kótarež wopsímujo zakłady - OpenStreetMap. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: PÅ¡aÅ¡aj se něcogo abo pytaj za wótegronami na boku pÅ¡aÅ¡anjow a wótegronow - OpenStreetMap. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Pśepytaj wiki za nadrobneju OSM-dokumentaciju - about_page: - next: Pśiducy - copyright_html: © sobustatkujuce
      OpenStreetMap - used_by: '%{name} staja kórtowe daty za sta websedłow, mobilne nałoženja a rědy - k dispoziciji' - lede_text: OpenStreetMap twóri se wót zgromaźeństwa kartěrowarjow, kótarež pśinosuju - a woplěwaju daty wó drogach, puśach, kafejownjach, dwórnišćach a wjele wěcej - na cełem swěśe. - local_knowledge_title: Lokalna wěda - local_knowledge_html: Za OpenStreetMap jo wažna lokalna wěda. Sobustatkujuce wužywaju - wobraze z powětÅ¡a, GPS-graty a pólne kórty, aby pśeglědali, aby OSM dokładny - a aktualny był. - community_driven_title: Wót zgromaźeństwa spěchowany - community_driven_html: |- - Zgromaźeństwo OpenStreetMap jo wjelerake, zagórity a rosćo kuždy źeń. - NaÅ¡e sobustatkujuce su zagórite kartěrowarjo, GIS-profije, inženjery, kótarež gónje OSM-serwery, pomogarje, kótarež kartěruju strona katastrofo a wjele wěcej. - Aby wěcej wó zgromaźeństwje zgónił, glej wužywarske dnjowniki, blogi zgromaźeństwa a websedło załožby OSM Foundation - open_data_title: Zjawne daty - open_data_html: 'OpenStreetMap wopśimujo zjawne daty: MóžoÅ¡ je za kuždy - zaměr wužywaś, joli až naspomnjejoÅ¡ OpenStreetMap a jogo sobustatkujuce. Jolic - změnijoÅ¡ daty na wěsty nałog abo napórajoÅ¡, móžoÅ¡ wuslědk jano pód teju samskeju - licencu rozdźěliś. Glej bok awtorskego pÅ¡awa a - licence za drobnosći.' - partners_title: Partnarje notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} jo twój zapisk dnjownika komentěrował.' @@ -1247,6 +1005,124 @@ dsb: delete: deleted: Powěsć wulaÅ¡owana site: + about: + next: Pśiducy + copyright_html: © sobustatkujuce
      OpenStreetMap + used_by: '%{name} staja kórtowe daty za sta websedłow, mobilne nałoženja a rědy + k dispoziciji' + lede_text: OpenStreetMap twóri se wót zgromaźeństwa kartěrowarjow, kótarež pśinosuju + a woplěwaju daty wó drogach, puśach, kafejownjach, dwórnišćach a wjele wěcej + na cełem swěśe. + local_knowledge_title: Lokalna wěda + local_knowledge_html: Za OpenStreetMap jo wažna lokalna wěda. Sobustatkujuce + wužywaju wobraze z powětÅ¡a, GPS-graty a pólne kórty, aby pśeglědali, aby OSM + dokładny a aktualny był. + community_driven_title: Wót zgromaźeństwa spěchowany + community_driven_html: |- + Zgromaźeństwo OpenStreetMap jo wjelerake, zagórity a rosćo kuždy źeń. + NaÅ¡e sobustatkujuce su zagórite kartěrowarjo, GIS-profije, inženjery, kótarež gónje OSM-serwery, pomogarje, kótarež kartěruju strona katastrofo a wjele wěcej. + Aby wěcej wó zgromaźeństwje zgónił, glej wužywarske dnjowniki, blogi zgromaźeństwa a websedło załožby OSM Foundation + open_data_title: Zjawne daty + open_data_html: 'OpenStreetMap wopśimujo zjawne daty: MóžoÅ¡ je za kuždy + zaměr wužywaś, joli až naspomnjejoÅ¡ OpenStreetMap a jogo sobustatkujuce. Jolic + změnijoÅ¡ daty na wěsty nałog abo napórajoÅ¡, móžoÅ¡ wuslědk jano pód teju samskeju + licencu rozdźěliś. Glej bok awtorskego pÅ¡awa + a licence za drobnosći.' + partners_title: Partnarje + copyright: + foreign: + title: Wó toś tom pśełožku + text: W paźe konflikta mjazy pśełožonym bokom a %{english_original_link}, + engelski bok ma prědnosć měś + english_link: engelskim originalom + native: + title: Wó toś tom boku + text: WoglědujoÅ¡ se engelsku wersiju boka awtorskego pÅ¡awa. MóžoÅ¡ se k %{native_link} + toś togo boka wrośiś abo pśestaś wó awtorskem pÅ¡awje cytaś a %{mapping_link}. + native_link: dolnoserbskej wersiji + mapping_link: kartěrowanje zachopiś + legal_babble: + title_html: Awtorske pÅ¡awo a licenca + intro_1_html: |- + OpenStreetMap su zjawne daty, licencěrowane pód licencu Open Data + Commons Open Database (ODbL). + intro_2_html: MóžoÅ¡ naÅ¡e daty kopěrowaś, rozdźěliś, pśenjasć a pśiměriś, tak + dłujko ako naspomnjejoÅ¡ OpenStreetMap a jich sobustatkujucych. Jolic změnijoÅ¡ + naÅ¡e kórty abo daty abo zepěraÅ¡ se na nje, móžoÅ¡ wuslědk jano pód teju sameju + licencu rozdźěliś. Dopołny pÅ¡awniski + code wujasnjujo twóje pÅ¡awa a zagronitosći. + intro_3_html: Kartografija w naÅ¡ych kórtowych kachlach a naÅ¡a dokumentacija + stej pód licencu Creative + Commons Attribution-ShareAlike 2.0 (CC-BY-SA) licencěrowanej. + credit_title_html: Kak naspomnjeś awtorstwo OpenStreetMap + credit_1_html: Pominamy se, až pódawaÅ¡ sobustatkujucych “© OpenStreetMap”. + credit_2_html: MusyÅ¡ teke wujasniś, až daty stoje pód licencu Open Database, + a, jolic naÅ¡e kórtowe kachle se wužywaju, až kartografija licencěrujo se + pód CC-BY-SA. MóžoÅ¡ to cyniś, z tym až wótkazujoÅ¡ do toś + togo boka awtorskego pÅ¡awa. Alternatiwnje, a ako pótrěbnosć, jolic rozdźělujoÅ¡ + OSM w datowem formje, móžoÅ¡ direktnje k licencam pomjenjowaś a wótkazaś. + W medijach, źož wótkaze njejsu móžno (na pś. wuśišćane źěła), naraźujomy + śi, twójich cytarjow na openstreetmap.org (snaź z tym až rozÅ¡yrjujoÅ¡ 'OpenStreetMap' + k toś tej połnej adresy), na opendatacommons.org a, jolic to jo relewantne, + na creativecommons.org dopomnjeś. + credit_3_html: 'Za pśepytujobnu elektronisku kórtu by měło se źěkowanje w + rožku kórty pokazaś. Na pśikład:' + attribution_example: + alt: Pśikład, kak pokazujo se na webboku na OpenStreetMap + title: Pśipokazański pśikład + more_title_html: DalÅ¡ne informacije + more_1_html: Cytaj wěcej wó wužywanju naÅ¡ych datow a kak dajo se nas pśipóznaś + pód Ceste pÅ¡awniske + pÅ¡aÅ¡enja. + more_2_html: "Lěcrownož OpenStreetMap wobstoj ze zjawnych datow, njamóžomy + dermotny kórtowy API za wuwijarjow tśeśich póbitowaś. \nGlědaj naÅ¡e pÅ¡awidła + za wužywanje API, PÅ¡awidła + za wužywanje kachlow a PÅ¡awidła + za wužywanje Nominatim." + contributors_title_html: NaÅ¡e sobustatkujuce + contributors_intro_html: 'NaÅ¡e sobustatkujuce su towzynty wósobow. Zapśimujomy + teke daty wótwórjoneje licence z narodnych kartěrowańskich pśedewześow a + drugich žrědłow, mjaz nimi:' + contributors_at_html: 'Awstriska: Wopśimujo daty z Stadt + Wien (pód CC + BY), Land + Vorarlberg a Land Tirol (pod CC-BY + AT ze změnami).' + contributors_ca_html: 'Kanada: Wopśimujo daty z GeoBase®, + GeoGratis (© Department of Natural Resources Canada), CanVec (© + Department of Natural Resources Canada), a StatCan (Geography Division, + Statistics Canada).' + contributors_fi_html: 'Finska: Wopśimujo daty z topografiskeje + datoweje banki National Land Survey of Finland a drugich datowych sajźbow, + pód NLSFI-licencuFrancojska
      : Wopśimujo daty z Direction + Générale des Impôts.' + contributors_nl_html: 'Nižozemska: Wopsimujo daty © + AND, 2007 (www.and.com)' + contributors_nz_html: 'Nowoseelandska: Wopśimujo daty ze + žrědłow wót Land Information New Zealand. Awtorske pÅ¡awo wuměnjone.' + contributors_za_html: 'Pódpołdnjowa Afrika: Wopśimujo daty + z Chief Directorate: National Geo-Spatial + Information, Statne awtorske pÅ¡awo wuměnjone.' + contributors_gb_html: 'Zjadnośone kralojstwo: Wopśimujo daty + z Ordnance Survey (Amtske rozměrjenje kraja) © Awtorske pÅ¡awo a pÅ¡awo + za datowe banki 2010-2012.' + contributors_footer_1_html: Za dalÅ¡ne drobnostki za to a druge žrědła, kótarež + su se wužyli, aby OpenStreetMap pólěpÅ¡yli, glědaj pÅ¡oÅ¡ym bok + sobustatkujucych na wikiju OpenStreetMap. + contributors_footer_2_html: Zapśimowanje datow do OpenStreetMap njegroni, + až póbitowaŕ originalnych datow pśipóznawa OpenStreetMap, dawa někaku garantiju + abo pśewzejo rukowanje. + infringement_title_html: Pśejźenje stwóriśelskego pÅ¡awa + infringement_1_html: Sobustatkujucych OSM napominamy, až njedodawaju nigda + daty ze žrědłow, kótarež su pśez awtorske pÅ¡awo šćitane (na pś. z Google + Maps abo z wuśišćanych kórtow) bźez wurazneje dowólnosći awtorow. + infringement_2_html: Joli měniÅ¡, aý awtorskopÅ¡awniski šćitany material jo + se datowej bance OpenStreetMap abo toś tomu sedłoju bźez dowólnosći pśidał, + póśěguj se pÅ¡osym na naÅ¡o póstupowanje + za wótwónoźowanje wopśimjeśaabo daj to direktnje na naÅ¡om formularnem + boku k wěsći. index: js_1: Pak wužywaÅ¡ wobglědowak, kótaryž njepódpěra JavaScript, pak sy znjemóžnił JavaScript. @@ -1278,6 +1154,93 @@ dsb: id_not_configured: iD njejo se konfigurěrował no_iframe_support: Twój wobglědowak njepódpěrujo HTML-elementy iframe, kótarež su trěbne za toś tu funkciju. + export: + title: Eksportěrowaś + area_to_export: Wurězk za eksport + manually_select: Drugi wurězk manuelnje wubraś + format_to_export: Format za eksport + osm_xml_data: XML-daty OpenStreetMap + map_image: Kórtowy wobraz (pokazujo standardnu rowninu) + embeddable_html: Zasajźujobny HTML + licence: Licenca + export_details: Daty OpenStreetMap licencěruju se pód licencu Licenca + Data Commons Open Database (ODbL). + too_large: + advice: 'Jolic górni eksport se njeraźi, pÅ¡osym rozwaž, lěc wužywaÅ¡ jadnu + ze slědujucych lisćinow:' + body: 'Toś ten wobcerk jo pśewjeliki za eksportěrowanje ako XML-daty OpenStreetMap. + PÅ¡osym pówětÅ¡ abo wubjeŕ mjeńšy wobcerk abo wužyj jadno ze slědujucych žrědłow + za ześěgnjenje wjelikich kopicow datow:' + planet: + title: Planet OSM + description: PÅ¡awidłownje zaktualizěrowane kopije dopołneje datoweje banki + OpenStreetMap + overpass: + title: Overpass API + description: Toś ten wobłuk z glědałkowego serwera datoweje banki OpenStreetMap + ześěgnuś + geofabrik: + title: Geofabrik Downloads + description: PÅ¡awidłownje zaktualizěrowane wuśěgi kontinentow, krajow a + wubranych městow + metro: + title: Metro Extracts + description: Wuśěgi za nejwětÅ¡e swětowe města a jich wokolinu + other: + title: Druge žrědła + description: Pśidatne žrědła nalicone wikiju OpenStreetMap + options: Opcije + format: 'Format:' + scale: Měritko + max: maks. + image_size: 'Wobrazowa wjelikosć:' + zoom: Skalěrowanje + add_marker: Kórśe marku pśidaś + latitude: 'Å yrina:' + longitude: 'Dlinina:' + output: Wudaśe + paste_html: HTML kopěrowaś, aby se zasajźił do websedła + export_button: Eksport + fixthemap: + title: Problem k wěsći daś / Kórtu pópÅ¡awiś + how_to_help: + title: Kak móžoÅ¡ pomagaś + join_the_community: + title: Zgromaźeństwu pśistupiś + explanation_html: Jolic sy problem z naÅ¡ymi kórtowymi datami zawuputnuł, + na pśikład droga abo twója adresa felujo, jo nejlěpÅ¡a waÅ¡nja, z tym pókÅ¡acowaś, + se zgromaźeństwoju OpenStreetMap pśizamknuś a sam daty pśidaś abo korigěrowaś. + add_a_note: + instructions_html: |- + Klikni jadnorje na abo na ten samski symbol w zwobraznjenju kórty. + To pśidajo kórśe marku, kótaruž móžoÅ¡ pśez śěgnjenje pśesunuś. + Pśidaj swóju powěsć, klikni pon na Składowaś a druge kartěrowarje budu pó tom slěźiś. + other_concerns: + title: Druge nastupnosći + explanation_html: Jolic maÅ¡ wobmyslenja wó tom, kak naÅ¡e daty se wužiwaju + abo nastupajucy wopśimjeśe, woglědaj se k naÅ¡omu bokoju + awtorstwa za dalÅ¡ne kazniske informacije abo staj se z wótpowědneju + źěłoweju kupku + do zwiska. + help: + title: Pomoc + introduction: OpenStreetMap ma wÅ¡ake resurse za zeznaśe projekta, pÅ¡aÅ¡anja a + wótegrona wó něcom a zgromadnu diskusiju a dokumentěrowanje kartěrowańskich + temow. + welcome: + url: /welcome + title: Witaj k OSM + description: Zachop z toś tym spěšnym rozpokazanim, kótarež wopsímujo zakłady + OpenStreetMap. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: PÅ¡aÅ¡aj se něcogo abo pytaj za wótegronami na boku pÅ¡aÅ¡anjow a + wótegronow OpenStreetMap. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Pśepytaj wiki za nadrobneju OSM-dokumentaciju sidebar: search_results: Pytańske wuslědki close: Zacyniś @@ -1367,6 +1330,44 @@ dsb: image: Wobraz alt: Alternatiwny tekst url: URL + welcome: + title: Witaj! + introduction_html: Witaj k OpenstreetMap, lichej a wobźěłujobnej kórśe swěta. + Něnto, za tym až sy se zregistrěrował, móžoÅ¡ se do kartěrowanja pušćiś. How + jo krotke zapokazanje z nejwažnjejÅ¡ymi informacijami, kótarež musyÅ¡ wěźeś. + whats_on_the_map: + title: Což na kórtu słuÅ¡a + on_html: OpenStreetMap jo městno za kartěrowanje wěcow, kótarež su realne + a aktualne - wopśimujo miliony twarjenjow, puśow a druge drobnostki + wó městnach. MóžoÅ¡ kartěrowaś, cožkuli zajmujo śi we napÅ¡awdnem swěśe. + off_html: Což njama wopśimjeś, su subjektiwne daty kaž pogódnośenja, + historiske abo hypotetiske funkcije a daty z pśez awtorske pÅ¡awo šćitanych + žrědłow. Njekopěruj z online- abo papjernych kórtow, snaźkuli maÅ¡ wósebnu + dowólnosć. + basic_terms: + title: Zakładne zapśimjeśa za kartěrowanje + paragraph_1_html: OpenStreetMap wužywa někotare wósebne zapśimjeśa. How su + někotare z nich, kótarež by mógli śi wužytne byś. + editor_html: Editor jo program abo websedło, kótarež móžoÅ¡ + wužywaś, aby kórtu wobźěłał. + node_html: Suk jo dypk na kórśe, na pś. gósćeńc abo bom. + way_html: Puś jo linija abo płonina, na pś. droga, rěka, + jazor abo twarjenje. + tag_html: Atribut jo datowa kakosć wó suku abo puśu, na pśikład + mě gósćeńca abo nejwuÅ¡a spěšnosć na droze. + questions: + title: MaÅ¡ hyšći pÅ¡aÅ¡anja? + paragraph_1_html: |- + OpenStreetMap ma wÅ¡ake resurse za zeznaśe projekta, pÅ¡aÅ¡anja a wótegrona wó něcom a zgromadnu diskusiju a dokumentěrowanje kartěrowańske temy. + Pomoc. + start_mapping: Kartěrowanje zachopiś + add_a_note: + title: NjamaÅ¡ chyle za wobźěłowanje? Pśidaj pokazku! + paragraph_1_html: Jolic coÅ¡ jano drobnosć korigěrowaś a njamaÅ¡ chyle, aby + se zregistrěrował a wuknuł, kak se wobźěłujo, móžoÅ¡ jadnorje pokazku pśidaś. + paragraph_2_html: |- + Źi jadnorje na kórtu a klikni na symbol pokazki: + . Ten pśida kórśe marku, kótaruž móžoÅ¡ pśesunuś. Pśidaj swóju powěźeńku, klikni pótom na Składowaś a druge kartěrowarje budu se wěcy wěnowaś. trace: visibility: private: Priwatny (jano źělony ako anonymne, njezrědowane dypki) @@ -1494,7 +1495,7 @@ dsb: se k webpówjerchoju, aby se wužywarske wuměnjenja woglědał. NjetrjebaÅ¡ zwóliś do nich, musyÅ¡ se je jano woglědaś. oauth: - oauthorize: + authorize: title: Pśistup na twójo konto awtorizěrowaś request_access: Aplikacija %{app_name} pÅ¡osy wó pśistup na twójo konto, %{user}. PÅ¡osym pśeglědaj, lěc aplikacija móžo slědujuce pÅ¡awa měś. MóžoÅ¡ ze slědujucych @@ -1507,11 +1508,11 @@ dsb: allow_read_gpx: twóje priwatne GPS-slědy cytaś. allow_write_gpx: GPS-slědy nagraś. allow_write_notes: pokazki změniś. - oauthorize_success: + authorize_success: title: Awtorizěrowańske napÅ¡aÅ¡owanje dowólone allowed: Sy pśistup nałoženja %{app_name} na twójo konto dowólił. verification: Pśeglědowański kode jo %{code} - oauthorize_failure: + authorize_failure: title: Awtorizěrowańske napÅ¡aÅ¡owanje njejo se raźiło denied: Sy pśistup nałoženja %{app_name} na twójo konto wótpokazał. invalid: Awtorizěrowański token njejo płaśiwy. @@ -1887,7 +1888,7 @@ dsb: confirm: WobkÅ¡uśiś fail: Njejo móžno było wužwyarjeju "%{name}" rolu "%{role}" zajmjeś. PÅ¡osym pśeglědaj, lěc wužywaŕ a rola stej płaśiwej. - user_block: + user_blocks: model: non_moderator_update: Musy moderator byś, aby blokěrowanje wuźělił abo aktualizěrował. non_moderator_revoke: MusyÅ¡ moderator byś, aby blokěrowanje wótpórał. @@ -1951,20 +1952,6 @@ dsb: one: 1 góźina two: '%{count} góźinje' other: '%{count} góźinow' - partial: - show: Pokazaś - edit: Wobźěłaś - revoke: Wótpóraś! - confirm: Sy se wěsty? - display_name: Zablokěrowany wužywaŕ - creator_name: Blokěrowaŕ - reason: Pśicyna za blokěrowanje - status: Status - revoker_name: Wótpórany wót - not_revoked: (nic wótpórany) - showing_page: Bok %{page} - next: Pśiducy » - previous: « PjerwjejÅ¡ny helper: time_future: Kóńcy se %{time}. until_login: Aktiwny, až wužywaŕ se njepśizjawja. @@ -1991,8 +1978,22 @@ dsb: back: WÅ¡e blokěrowanja pokazaś revoker: 'Anulěrowaŕ:' needs_view: Wužywaŕ musy se pśizjawiś, nježli blokěrowanje se wótpórajo. - note: - description: + block: + not_revoked: (nic wótpórany) + show: Pokazaś + edit: Wobźěłaś + revoke: Wótpóraś! + blocks: + display_name: Zablokěrowany wužywaŕ + creator_name: Blokěrowaŕ + reason: Pśicyna za blokěrowanje + status: Status + revoker_name: Wótpórany wót + showing_page: Bok %{page} + next: Pśiducy » + previous: « PjerwjejÅ¡ny + notes: + comment: opened_at_html: Pśed %{when} napórany opened_at_by_html: Pśed %{when} wót %{user} napórany commented_at_html: Pśed %{when} zaktualizěrowany @@ -2091,7 +2092,7 @@ dsb: comment: Komentar edit_help: Pśesuń kórtu do městna, kótarež coÅ¡ wobźěłaś, powětÅ¡ tam a klikni pótom how. - redaction: + redactions: edit: description: Wopisanje heading: Redakciju wobźěłaś diff --git a/config/locales/el.yml b/config/locales/el.yml index 7b7cdc97d..ab4a6eeab 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -271,7 +271,7 @@ el: list: title: Ομάδες αλλαγών title_user: Ομάδες αλλαγών από τον %{user} - title_friend: Ομάδες αλλαγών από τους φίλους σου + title_friend: Ομάδες αλλαγών από τους φίλους μου title_nearby: Ομάδες αλλαγών από κοντινούς χρήστες empty: Δεν βρέθηκαν ομάδες αλλαγών. empty_area: Δεν βρέθηκαν αλλαγές σε αυτήν την περιοχή. @@ -301,7 +301,7 @@ el: user_title: ημερολόγιο του %{user} in_language_title: Καταχωρήσεις ημερολογίων στα %{language} new: Νέα καταχώρηση ημερολογίου - new_title: Συντάξτε μια νέα καταχώρηση στο ημερολόγιο χρήστη σας + new_title: Σύνταξη μιας νέας καταχώρησης στο ημερολόγιο χρήστη μου no_entries: Δεν βρέθηκαν καταχωρήσεις στο ημερολόγιο recent_entries: Πρόσφατες καταχωρίσεις ημερολογίου older_entries: Παλιότερες καταχωρήσεις @@ -312,8 +312,8 @@ el: body: 'Κείμενο:' language: 'Γλώσσα:' location: 'Τοποθεσία:' - latitude: Γεωγραφικό πλάτος - longitude: Γεωγραφικό μήκος + latitude: 'Γεωγραφικό πλάτος:' + longitude: 'Γεωγραφικό μήκος:' use_map_link: χρησιμοποιήστε τον χάρτη save_button: Αποθήκευση marker_text: Τοποθεσία καταχώρησης ημερολογίου @@ -369,55 +369,6 @@ el: ago: πριν από %{ago} newer_comments: Νεότερα Σχόλια older_comments: Παλαιότερα Σχόλια - export: - title: Εξαγωγή - start: - area_to_export: Περιοχή προς εξαγωγή - manually_select: Χειροκίνητη επιλογή διαφορετικής περιοχής - format_to_export: Μορφή προς εξαγωγή - osm_xml_data: Δεδομένα OpenStreetMap σε μορφή XML - map_image: Εικόνα χάρτη (δείχνει τυπικό στρώμα) - embeddable_html: Ενσωματούμενη HTML - licence: Άδεια - export_details: Τα δεδομένα του OpenStreetMap είναι αδειοδοτημένα υπό την Open Data Commons Open - Database License (ODbL). - too_large: - advice: 'Αν η εξαγωγή αποτυγχάνει, παρακαλώ δοκιμάστε μία από τις πηγές που - αναφέρονται παρακάτω:' - body: 'Αυτή η περιοχή είναι πολύ μεγάλη για να εξαχθεί ως δεδομένα OpenStreetMap - XML. Παρακαλώ κάνετε μεγέθυνση, επιλέξτε μικρότερη περιοχή, ή χρησιμοποιήστε - μία από της ακόλουθες πηγές για μαζικές λήψεις δεδομένων:' - planet: - title: Πλανήτης OSM - description: Τακτικά-ενημερωμένα αντίγραφα της πλήρης βάσης δεδομένων του - OpenStreetMap - overpass: - title: Overpass API - description: Λήψη αυτού του πλαισίου οριοθέτησης από ένα καθρέφτη της βάσης - δεδομένων του OpenStreetMap - geofabrik: - title: Λήψεις Geofabrik - description: Τακτικά-ενημερωμένες εξαγωγές ηπείρων, χωρών και επιλεγμένων - πόλεων - metro: - title: Εξαγωγές Metro - description: Χάρτες για τις μεγάλες πόλεις του κόσμου και της γύρω περιοχές - other: - title: Άλλες πηγές - description: Επιπλέον πηγές απαριθμούνται στο wiki του OpenStreetMap - options: Επιλογές - format: Μορφοποίηση - scale: Κλίμακα - max: μεγ - image_size: Μέγεθος εικόνας - zoom: Εστίαση - add_marker: Προσθέστε ένα δείκτη στο χάρτη - latitude: 'Γεω. Πλ:' - longitude: 'Γεω. Μη.:' - output: Απόδοση - paste_html: Επικόλληση HTML για ενσωμάτωση στην ιστοσελίδα - export_button: Εξαγωγή geocoder: search: title: @@ -975,6 +926,7 @@ el: viewpoint: Σημείο θέας zoo: Ζωολογικός κήπος tunnel: + building_passage: Πέρασμα κτιρίου culvert: Οχετός "yes": Σήραγγα waterway: @@ -1044,8 +996,8 @@ el: intro_text: Το OpenStreetMap είναι χάρτης του κόσμου, που δημιουργήθηκε από ανθρώπους σαν κι εσάς και είναι δωρεάν, υπό άδεια ελεύθερης χρήσης. intro_2_create_account: Δημιουργήστε ένα λογαριασμό χρήστη - partners_html: Η λειτουργία υποστηρίζεται από το %{ucl}, %{bytemark} και %{ic}, - και άλλους %{συνεργάτες}. + partners_html: Η λειτουργία υποστηρίζεται από το %{ucl}, %{bytemark}, %{ic}, και + άλλους %{partners}. partners_ucl: UCL partners_ic: Imperial College του Λονδίνου partners_bytemark: Bytemark Hosting @@ -1068,264 +1020,6 @@ el: text: Κάντε μια δωρεά learn_more: Μάθετε περισσότερα more: Περισσότερα - license_page: - foreign: - title: Σχετικά με αυτήν τη μετάφραση - text: Σε περίπτωση διένεξης μεταξύ αυτής της μεταφρασμένης σελίδας και %{english_original_link}, - η Αγγλική σελίδα θα προτιμηθεί - english_link: της πρωτότυπης Αγγλικής - native: - title: Σχετικά με αυτήν τη σελίδα - text: Προβάλλετε η αγγλική έκδοση της σελίδας πνευματικών δικαιωμάτων. Μπορείτε - να επιστρέψετε στην %{native_link} της σελίδας ή να σταματήσετε να διαβάζετε - για τα πνευματικά δικαιώματα και να %{mapping_link}. - native_link: ελληνική έκδοση - mapping_link: αρχίστε τη χαρτογράφηση - legal_babble: - title_html: Πνευματικά δικαιώματα και άδεια χρήσης - intro_1_html: |- - Το OpenStreetMap® είναι βάση ανοικτών δεδομένων αδειοδοτημένα υπό την Open Data Commons Open Database License (ODbL) από το Ίδρυμα OpenStreetMap (OSMF). - intro_2_html: Είστε ελεύθεροι να αντιγράψετε, να διανείμετε, μεταδώσετε και - προσαρμόσετε τα δεδομένα μας εφόσον κάνετε αναφορά στο OpenStreetMap και στους - συνεισφέροντές του. Εάν τροποποιήσετε ή αξιοποιήσετε τα δεδομένα μας, μπορείτε - να διανείμετε το αποτέλεσμα μόνο σύμφωνα με την ίδια άδεια. Ο πλήρης νομικός - κώδικας εξηγεί τα δικαιώματα και τις υποχρεώσεις. - intro_3_html: |- - Η χαρτογράφηση στα πλακίδια χάρτη, και η τεκμηρίωση μας, είναι αδειοδοτημένες υπο την άδεια Creative - Commons Attribution-ShareAlike 2.0 (CC BY-SA). - credit_title_html: Πως να κάνετε αναφορά στο OpenStreetMap - credit_1_html: |- - Απαιτείται να χρησιμοποιείτε την αναφορά στο “© Συνεισφέροντες του - OpenStreetMap”. - credit_2_html: |- - Επίσης πρέπει να κάνετε σαφές ότι τα δεδομένα διατίθενται υπό την άδεια Open - Database License, και αν χρησιμοποιείτε τα πλακίδια χάρτη, ότι η χαρτογραφία είναι υπό την άδεια CC-BY-SA. Μπορείτε να το κάνετε αυτό με σύνδεσμο σε αυτήν τη σελίδα δικαιωμάτων. - Εναλλακτικά, και σαν προαπαιτούμενο εάν διαμοιράζετε δεδομένα OSM, μπορείτε να δώσετε απευθείας σύνδεσμο προς τις άδειες. Σε μέσα στα οποία οι σύνδεσμοι δεν είναι εφικτοί (π.χ. εκτυπώσεις), προτείνουμε να κατευθύνετε τους αναγνώστες σας στο openstreetmap.org (ίσως επεκτείνοντας το «OpenStreetMap» σε αυτήν τη πλήρη διεύθυνση), προς opendatacommons.org, και αναλόγως στο creativecommons.org. - credit_3_html: |- - Για έναν ηλεκτρονικά εμφανιζόμενο χάρτη, η αναφορά θα πρέπει να εμφανίζεται στη γωνία του χάρτη. - Για παράδειγμα: - attribution_example: - alt: Παράδειγμα του πως αναφέρεται το OpenStreetMap σε μια ιστοσελίδα - title: Παράδειγμα αναφοράς δημιουργού - more_title_html: Μαθαίνοντας περισσότερα - more_1_html: |- - Διαβάστε περισσότερα σχετικά με τη χρήση των δεδομένων μας, και πώς να μας μνημονεύσετε στην - σελίδα Άδειας OSMF. - more_2_html: |- - Παρόλο που το OpenStreetMap αποτελείται από ανοικτά δεδομένα, δεν μπορούμε να προσφέρουμε ένα - δωρεάν API χαρτών για τρίτους προγραμματιστές. - Δείτε τις πολιτικές χρήσης μας για το API, - τα πλακίδια - και για το Nominatim. - contributors_title_html: Οι συνεισφέροντές μας - contributors_intro_html: 'Οι συνεισφέροντες μας είναι χιλιάδες άτομα. Επίσης - έχουμε περιλάβει δεδομένα ανοικτής άδειας από εθνικές υπηρεσίες χαρτογράφησης - και άλλες πηγές, μεταξύ αυτών:' - contributors_at_html: |- - Αυστρία: Περιέχει δεδομένα από τα - Stadt Wien (υπό CC BY), - Land Vorarlberg και - Land Tirol (υπό CC BY AT με τροποποιήσεις). - contributors_ca_html: |- - Καναδάς: Περιέχει δεδομένα από τα - GeoBase®, GeoGratis (© Τμήμα Φυσικών - Πόρων Καναδά), CanVec (© Τμήμα Φυσικών - Πόρων Καναδά) και StatCan (Γεωγραφική Διαίρεση, - Στατιστική Υπηρεσία Καναδά). - contributors_fi_html: "Φινλανδία: Περιέχει δεδομένα από το - National Land Survey of Finland's Topographic Database\nκαι άλλα datasets, - υπό την \nNLSFI - Άδεια." - contributors_fr_html: 'Γαλλία: Περιέχει δεδομένα που προέρχονται - από το Direction Générale des Impôts.' - contributors_nl_html: 'Ολλανδία: Περιέχει δεδομένα που προέρχονται - από το AND © 2007 (www.and.com)' - contributors_nz_html: 'Νέα Ζηλανδία: Περιέχει δεδομένα που - πηγάζουν από την Υπηρεσία Πληροφοριών Γης Νέας Ζηλανδίας. Τα Πνευματικά Δικαιώματα - Crown είναι κατωχυρωμένα.' - contributors_si_html: |- - Σλοβενία: Περιέχει δεδομένα από την - Αρχή Τοπογραφίας και Χαρτογράφησης και το Υπουργείο Γεωργίας, Δασών και Τροφίμων - (δημόσιες πληροφορίες της Σλοβενίας). - contributors_za_html: |- - Νότια Αφρική: Περιεχέι δεδομένα που προέρχονται από το - Chief Directorate: - National Geo-Spatial Information, Πνευματικό δικαίωμα χώρας κατοχυρωμένο. - contributors_gb_html: |- - Ηνωμένο Βασίλειο: Περιέχει δεδομένα - της Ordnance Survey © Crown πνευματικά δικαιώματα και δικαιώματα βάσης δεδομένων - 2010-12. - contributors_footer_1_html: |- - Για περισσότερες λεπτομέρειες σχετικά με αυτές, και άλλες πηγές που χρησιμοποιήθηκαν - για να βελτιώσουν το OpenStreetMap, παρακαλούμε δείτε τη σελίδα Συνεισφέροντες στο OpenStreetMap Wiki. - contributors_footer_2_html: Η συμπερίληψη δεδομένων στο OpenStreetMap δεν συνεπάγεται - ότι ο αρχικός πάροχος δεδομένων εγκρίνει το OpenStreetMap, παρέχει οποιαδήποτε - εγγύηση ή αποδέχεται καμία ευθύνη. - infringement_title_html: Παραβιάσεις πνευματικών δικαιωμάτων - infringement_1_html: Υπενθυμίζουμε στους συνεισφέροντες του OSM να μην προσθέτουν - δεδομένα από πηγές με πνευματικά δικαιώματα (π.χ. Google Maps η έντυπους χάρτες) - χωρίς την προηγούμενη άδεια από τους ιδιοκτήτες των δικαιωμάτων. - infringement_2_html: Εάν πιστεύετε ότι προστέθηκε παράνομα υλικό που προστατεύεται - από πνευματικά δικαιώματα στη βάση δεδομένων του OpenStreetMap ή σε αυτόν - τον ιστότοπο, παρακαλούμε απευθυνθείτε στη - διαδικασία απομάκρυνσης ή καταθέστε άμεσα μια αίτηση στην on-line - σελίδα αιτήσεων. - trademarks_title_html: Εμπορικά σήματα - trademarks_1_html: Το OpenStreetMap, το λογότυπο με το μεγεθυντικό φακό και - το «State of the Map» είναι σήματα κατατεθέντα του Ιδρύματος OpenStreetMap. - Αν έχετε ερωτήσεις σχετικά με τη χρήση των σημάτων, παρακαλώ επισκεφθείτε - το Πολιτική - Εμπορικών Σημάτων. - welcome_page: - title: Καλώς ήρθατε! - introduction_html: Σας καλωσορίζουμε στο OpenStreetMap, τον ελεύθερο και επεξεργάσιμο - χάρτη του κόσμου. Τώρα που έχετε εγγραφεί, είστε πανέτοιμοι να αρχίσετε τη χαρτογράφηση. - Εδώ είναι ένας γρήγορος οδηγός με τα πιο σημαντικά πράγματα που πρέπει να ξέρετε. - whats_on_the_map: - title: Τι είναι στον Χάρτη - on_html: |- - Το OpenStreetMap περιέχει πράγματα που είναι πραγματικά και σύγχρονα - - περιλαμβάνει εκατομμύρια κτίρια, δρόμους, και άλλες λεπτομέρειες για διάφορα μέρη. Μπορείτε να χαρτογραφήσετε - οποιοδήποτε χαρακτηριστικά του πραγματικού κόσμου που σας κάνουν ενδιαφέρον. - off_html: |- - Αυτά που δεν περιλαμβάνει είναι δογματικά δεδομένα όπως βαθμολογίες, ιστορικά ή - υποθετικά χαρακτηριστικά, και δεδομένα από πηγές που προστατεύονται από πνευματικά δικαιώματα. Εκτός αν έχετε ειδική άδεια, - μην αντιγράψτε από ηλεκτρονικούς ή φυσικούς χάρτες. - basic_terms: - title: Βασικοί Όροι Για Τη Χαρτογράφηση - paragraph_1_html: Η κοινότητα OpenStreetMap έχει δικό της γλωσσάρι. Παρακάτω - είναι μερικές λέξεις που μπορεί να σας φανούν χρήσιμες. - editor_html: Οι επεξεργαστές είναι εφαρμογές ή ιστοσελίδες - που μπορείτε να χρησιμοποιήσετε για να επεξεργαστείτε το χάρτη. - node_html: Οι κόμβοι είναι σημεία στον χάρτη, όπως ένα εστιατόριο - ή ένα δένδρο. - way_html: Οι διαδρομές είναι γραμμές ή περιοχές, όπως δρόμοι, - ρέματα, λίμνες ή κτήρια. - tag_html: Τα χαρακτηριστικά είναι δεδομένα που σχετίζονται - με κόμβους ή διαδρομές, όπως τα ονόματα εστιατορίως ή τα όριο ταχύτητας διάφορων - δρόμων. - rules: - title: Κανόνες! - paragraph_1_html: Το OpenStreetMap έχει λίγους επίσημους κανόνες, αλλά αναμένουμε - από όλους τους συμμετέχοντες να συνεργαστούν και να επικοινωνούν με την κοινότητα. - Αν σκέφτεστε άλλες δραστηριότητες εκτός από την επεξεργασία με το χέρι, παρακαλούμε - διαβάστε και ακολουθήστε τις οδηγίες στις Εισαγωγές - και στις Αυτόματες - Επεξεργασίες. - questions: - title: Ερωτήσεις; - paragraph_1_html: |- - Το OpenStreetMap έχει πολλαπλούς πόρους για να μάθετε για το εγχείρημα, να κάνετε - ερωτήσεις και να συζητάτε και να τεκμηριώνετε θέματα χαρτογράφησης συνεργατικά. - Λάβετε βοήθεια εδώ. - start_mapping: Ξεκινήστε τη Χαρτογράφηση - add_a_note: - title: Δεν Έχετε Χρόνο Για Χαρτογράφηση; Προσθέστε μια Σημείωση! - paragraph_1_html: Εάν θέλετε κάτι μικρό να διορθωθεί και δεν έχετε χρόνο να - εγγραφείτε και να μάθετε πως να επεξεργάζεστε τον χάρτη, είναι εύκολο να προσθέσετε - σημειώσεις. - paragraph_2_html: |- - Απλά επισκεφτείτε τον χάρτη και πατήστε το εικονίδιο σημείωσης: - . Αυτό θα προσθέσει έναν δείκτη στο χάρτη, τον οποίο μπορείτε να μετακινήσετε τραβώντας τον. Προσθέστε το μήνυμά σας, κατόπιν πατήστε αποθήκευση, και άλλοι χαρτογράφοι θα το διερευνήσουν. - fixthemap: - title: Αναφέρετε πρόβλημα / Διορθώστε τον χάρτη - how_to_help: - title: Πώς να Βοηθήσετε - join_the_community: - title: Γνωρίστε την κοινότητα - explanation_html: Αν έχετε παρατηρήσει ένα πρόβλημα με τα δεδομένα του χάρτη - μας, παραδείγματος χάριν ένας δρόμος που λείπει στη διεύθυνσή σας, ο καλύτερος - τρόπος να προχωρήσετε είναι να ενταχθείτε στην κοινότητα του OpenStreetMap - και να προσθέσετε ή να επισκευάσετε τα δεδομένα από μόνοι σας. - add_a_note: - instructions_html: |- - Απλά κάντε κλικ στο ή στο ίδιο εικονίδιο στην οθόνη του χάρτη. - Έτσι θα προστεθεί δείκτης στον χάρτη, τον οποίο μπορείτε να μετακινήσετε σέρνοντάς τον. - Προσθέστε το μήνυμά σας και, στη συνέχεια, κάντε κλικ στο κουμπί αποθήκευσης, ώστε να μπορούν άλλοι χαρτογράφοι να ερευνήσουν το πρόβλημα. - other_concerns: - title: Άλλες ανησυχίες - explanation_html: Αν ανησυχείτε για το πώς χρησιμοποιούνται τα δεδομένα μας - ή σχετικά με τα περιεχόμενα, παρακαλούμε συμβουλευτείτε τη σελίδα - πνευματικών δικαιωμάτων μας για περισσότερες νομικές πληροφορίες ή επικοινωνήστε - με την κατάλληλη ομάδα - εργασίας του OSMF. - help_page: - title: Βοήθεια - introduction: Το OpenStreetMap έχει πολλαπλούς πόρους για να μάθετε για το εγχείρημα, - να κάνετε ερωτήσεις, να απαντήσετε σε ερωτήσεις άλλων και να συζητήσετε και - να τεκμηριώσετε θέματα χαρτογράφησης συνεργατικά. - welcome: - url: /welcome - title: Καλώς ήλθατε στο OSM - description: Ξεκινήστε με αυτές τις σύντομες οδηγίες που καλύπτουν τα βασικά - του OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/El:Beginners%27_guide - title: Οδηγός Αρχαρίων - description: Οδηγός αρχαρίων διατηρούμενος από την κοινότητα. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Κάντε μία ερώτηση ή αναζητήσετε απαντήσεις στην ιστοσελίδα ερωτήσεων - και απαντήσεων του OSM. - mailing_lists: - title: Λίστες Αλληλογραφίας - description: Κάντε μία ερώτηση ή συζητήστε ενδιαφέροντα θέματα σε ένα ευρύ φάσμα - τοπικών ή περιφερειακών λιστών αλληλογραφίας. - forums: - title: Φόρουμ - description: Ερωτήσεις και συζητήσεις για όσους προτιμούν μία διεπαφή με στιλ - διάρθρωσης κουκκίδων. - irc: - title: IRC - description: Διαδραστική συνομιλία σε πολλές διαφορετικές γλώσσες και για πολλά - θέματα. - switch2osm: - title: switch2osm - description: Βοήθεια για εταιρείες και οργανισμούς για μετάβαση σε χάρτες που - βασίζονται στο OpenStreetMap και άλλες υπηρεσίες. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Περιηγηθείτε το wiki για επιμελής τεκμηρίωση του OSM. - about_page: - next: Επόμενη - copyright_html: ©Î£Ï…νεισφέροντες
      του OpenStreetMap - used_by: Το %{name} προσφέρει δεδομένα χάρτη σε χιλιάδες ιστότοπους, εφαρμογές - κινητού και συσκευές υλικού - lede_text: |- - Το OpenStreetMap αναπτύσσεται από μια κοινότητα χαρτογράφων που συνεισφέρουν και διατηρούν δεδομένα - σχετικά με δρόμους, μονοπάτια, καφετέριες, σιδηροδρομικούς σταθμούς, και πολλά περισσότερα, σε όλον τον κόσμο. - local_knowledge_title: Τοπική Γνώση - local_knowledge_html: |- - Το OpenStreetMap υπογραμμίζει την τοπική γνώση. Οι συνεισφέροντες χρησιμοποιούν αεροφωτογραφίες, συσκευές GPS, και τοπικούς χάρτες χαμηλής τεχνολογίας για να σιγουρευτούν πως το OSM - είναι ακριβής και ενημερωμένο. - community_driven_title: Βασίζεται Στην Κοινότητα - community_driven_html: |- - Η κοινότητα του OpenStreetMap είναι ποικίλη, παθιασμένη, και μεγαλώνει κάθε μέρα. - Στους συνεισφέροντές μας περιλαμβάνονται ενθουσιώδεις χαρτογράφοι, επαγγελματίες GIS, μηχανικοί - που τρέχουν τους εξυπηρετητές OSM, ανθρωπιστές που χαρτογραφούν κατεστραμμένες-πληγείσες περιοχές, - και πολλούς περισσότερους. - Για να μάθετε περισσότερα για την κοινότητα, ανατρέξτε στα ημερολόγια χρηστών, τα - ιστολόγια της κοινότηταςκαι - την ιστοσελίδα του Ιδρύματος OSM. - open_data_title: Ανοικτά Δεδομένα - open_data_html: 'Το OpenStreetMap είναι βάση ανοικτών δεδομένων: είστε - ελεύθεροι να την χρησιμοποιήστε για οποιονδήποτε σκοπό, εφόσον μνημονεύετε το - OpenStreetMap και τους συνεισφέροντές του. Εάν προσαρμόσετε ή αξιοποιήσετε αυτά - τα δεδομένα με συγκεκριμένους τρόπους, πρέπει να διανείμετε το αποτέλεσμα μόνο - υπό την ίδια άδεια χρήσης. Δείτε τη σελίδα Πνευματικά - Δικαιώματα και Άδεια Χρήσης για λεπτομέρειες.' - legal_title: Νομικό - legal_html: |- - Αυτός ο ιστότοπος και πολλές άλλες σχετικές υπηρεσίες λειτουργούν επίσημα από το Ίδρυμα OpenStreetMap (OSMF) εκ μέρους της κοινότητας. Η χρήση όλων των υπηρεσιών του OSMF υπόκειται στην Πολιτική Αποδεκτής Χρήσης μας και στην Πολιτική Απορρήτου μας. -
      - Παρακαλούμε επικοινωνήστε με το OSMF αν έχετε ερωτήματα για άδειες χρήσης, πνευματικά δικαιώματα ή άλλα νομικά θέματα. - -
      - Το OpenStreetMap, το λογότυπο με το μεγεθυντικό φακό και το <> είναι κατατεθέντα σήματα του OSMF. - partners_title: Συνεργάτες notifier: diary_comment_notification: subject: '[OpenStreetMap] Ο χρήστης %{user} σχολίασε μια καταχώριση ημερολογίου' @@ -1527,6 +1221,153 @@ el: delete: deleted: Το μήνυμα διαγράφηκε site: + about: + next: Επόμενη + copyright_html: ©Î£Ï…νεισφέροντες
      του OpenStreetMap + used_by: Το %{name} προσφέρει δεδομένα χάρτη σε χιλιάδες ιστότοπους, εφαρμογές + κινητού και συσκευές υλικού + lede_text: |- + Το OpenStreetMap αναπτύσσεται από μια κοινότητα χαρτογράφων που συνεισφέρουν και διατηρούν δεδομένα + σχετικά με δρόμους, μονοπάτια, καφετέριες, σιδηροδρομικούς σταθμούς, και πολλά περισσότερα, σε όλον τον κόσμο. + local_knowledge_title: Τοπική Γνώση + local_knowledge_html: |- + Το OpenStreetMap υπογραμμίζει την τοπική γνώση. Οι συνεισφέροντες χρησιμοποιούν αεροφωτογραφίες, συσκευές GPS, και τοπικούς χάρτες χαμηλής τεχνολογίας για να σιγουρευτούν πως το OSM + είναι ακριβής και ενημερωμένο. + community_driven_title: Βασίζεται Στην Κοινότητα + community_driven_html: |- + Η κοινότητα του OpenStreetMap είναι ποικίλη, παθιασμένη, και μεγαλώνει κάθε μέρα. + Στους συνεισφέροντές μας περιλαμβάνονται ενθουσιώδεις χαρτογράφοι, επαγγελματίες GIS, μηχανικοί + που τρέχουν τους εξυπηρετητές OSM, ανθρωπιστές που χαρτογραφούν κατεστραμμένες-πληγείσες περιοχές, + και πολλούς περισσότερους. + Για να μάθετε περισσότερα για την κοινότητα, ανατρέξτε στα ημερολόγια χρηστών, τα + ιστολόγια της κοινότηταςκαι + την ιστοσελίδα του Ιδρύματος OSM. + open_data_title: Ανοικτά Δεδομένα + open_data_html: 'Το OpenStreetMap είναι βάση ανοικτών δεδομένων: είστε + ελεύθεροι να την χρησιμοποιήστε για οποιονδήποτε σκοπό, εφόσον μνημονεύετε + το OpenStreetMap και τους συνεισφέροντές του. Εάν προσαρμόσετε ή αξιοποιήσετε + αυτά τα δεδομένα με συγκεκριμένους τρόπους, πρέπει να διανείμετε το αποτέλεσμα + μόνο υπό την ίδια άδεια χρήσης. Δείτε τη σελίδα Πνευματικά + Δικαιώματα και Άδεια Χρήσης για λεπτομέρειες.' + legal_title: Νομικό + legal_html: |- + Αυτός ο ιστότοπος και πολλές άλλες σχετικές υπηρεσίες λειτουργούν επίσημα από το Ίδρυμα OpenStreetMap (OSMF) εκ μέρους της κοινότητας. Η χρήση όλων των υπηρεσιών του OSMF υπόκειται στην Πολιτική Αποδεκτής Χρήσης μας και στην Πολιτική Απορρήτου μας. +
      + Παρακαλούμε επικοινωνήστε με το OSMF αν έχετε ερωτήματα για άδειες χρήσης, πνευματικά δικαιώματα ή άλλα νομικά θέματα. + +
      + Το OpenStreetMap, το λογότυπο με το μεγεθυντικό φακό και το <> είναι κατατεθέντα σήματα του OSMF. + partners_title: Συνεργάτες + copyright: + foreign: + title: Σχετικά με αυτήν τη μετάφραση + text: Σε περίπτωση διένεξης μεταξύ αυτής της μεταφρασμένης σελίδας και %{english_original_link}, + η Αγγλική σελίδα θα προτιμηθεί + english_link: της πρωτότυπης Αγγλικής + native: + title: Σχετικά με αυτήν τη σελίδα + text: Προβάλλετε η αγγλική έκδοση της σελίδας πνευματικών δικαιωμάτων. Μπορείτε + να επιστρέψετε στην %{native_link} της σελίδας ή να σταματήσετε να διαβάζετε + για τα πνευματικά δικαιώματα και να %{mapping_link}. + native_link: ελληνική έκδοση + mapping_link: αρχίστε τη χαρτογράφηση + legal_babble: + title_html: Πνευματικά δικαιώματα και άδεια χρήσης + intro_1_html: |- + Το OpenStreetMap® είναι βάση ανοικτών δεδομένων αδειοδοτημένα υπό την Open Data Commons Open Database License (ODbL) από το Ίδρυμα OpenStreetMap (OSMF). + intro_2_html: Είστε ελεύθεροι να αντιγράψετε, να διανείμετε, μεταδώσετε και + προσαρμόσετε τα δεδομένα μας εφόσον κάνετε αναφορά στο OpenStreetMap και + στους συνεισφέροντές του. Εάν τροποποιήσετε ή αξιοποιήσετε τα δεδομένα μας, + μπορείτε να διανείμετε το αποτέλεσμα μόνο σύμφωνα με την ίδια άδεια. Ο πλήρης + νομικός κώδικας + εξηγεί τα δικαιώματα και τις υποχρεώσεις. + intro_3_html: |- + Η χαρτογράφηση στα πλακίδια χάρτη, και η τεκμηρίωση μας, είναι αδειοδοτημένες υπο την άδεια Creative + Commons Attribution-ShareAlike 2.0 (CC BY-SA). + credit_title_html: Πως να κάνετε αναφορά στο OpenStreetMap + credit_1_html: |- + Απαιτείται να χρησιμοποιείτε την αναφορά στο “© Συνεισφέροντες του + OpenStreetMap”. + credit_2_html: |- + Επίσης πρέπει να κάνετε σαφές ότι τα δεδομένα διατίθενται υπό την άδεια Open + Database License, και αν χρησιμοποιείτε τα πλακίδια χάρτη, ότι η χαρτογραφία είναι υπό την άδεια CC-BY-SA. Μπορείτε να το κάνετε αυτό με σύνδεσμο σε αυτήν τη σελίδα δικαιωμάτων. + Εναλλακτικά, και σαν προαπαιτούμενο εάν διαμοιράζετε δεδομένα OSM, μπορείτε να δώσετε απευθείας σύνδεσμο προς τις άδειες. Σε μέσα στα οποία οι σύνδεσμοι δεν είναι εφικτοί (π.χ. εκτυπώσεις), προτείνουμε να κατευθύνετε τους αναγνώστες σας στο openstreetmap.org (ίσως επεκτείνοντας το «OpenStreetMap» σε αυτήν τη πλήρη διεύθυνση), προς opendatacommons.org, και αναλόγως στο creativecommons.org. + credit_3_html: |- + Για έναν ηλεκτρονικά εμφανιζόμενο χάρτη, η αναφορά θα πρέπει να εμφανίζεται στη γωνία του χάρτη. + Για παράδειγμα: + attribution_example: + alt: Παράδειγμα του πως αναφέρεται το OpenStreetMap σε μια ιστοσελίδα + title: Παράδειγμα αναφοράς δημιουργού + more_title_html: Μαθαίνοντας περισσότερα + more_1_html: |- + Διαβάστε περισσότερα σχετικά με τη χρήση των δεδομένων μας, και πώς να μας μνημονεύσετε στην + σελίδα Άδειας OSMF. + more_2_html: |- + Παρόλο που το OpenStreetMap αποτελείται από ανοικτά δεδομένα, δεν μπορούμε να προσφέρουμε ένα + δωρεάν API χαρτών για τρίτους προγραμματιστές. + Δείτε τις πολιτικές χρήσης μας για το API, + τα πλακίδια + και για το Nominatim. + contributors_title_html: Οι συνεισφέροντές μας + contributors_intro_html: 'Οι συνεισφέροντες μας είναι χιλιάδες άτομα. Επίσης + έχουμε περιλάβει δεδομένα ανοικτής άδειας από εθνικές υπηρεσίες χαρτογράφησης + και άλλες πηγές, μεταξύ αυτών:' + contributors_at_html: |- + Αυστρία: Περιέχει δεδομένα από τα + Stadt Wien (υπό CC BY), + Land Vorarlberg και + Land Tirol (υπό CC BY AT με τροποποιήσεις). + contributors_ca_html: |- + Καναδάς: Περιέχει δεδομένα από τα + GeoBase®, GeoGratis (© Τμήμα Φυσικών + Πόρων Καναδά), CanVec (© Τμήμα Φυσικών + Πόρων Καναδά) και StatCan (Γεωγραφική Διαίρεση, + Στατιστική Υπηρεσία Καναδά). + contributors_fi_html: "Φινλανδία: Περιέχει δεδομένα από το + National Land Survey of Finland's Topographic Database\nκαι άλλα datasets, + υπό την \nNLSFI + Άδεια." + contributors_fr_html: 'Γαλλία: Περιέχει δεδομένα που προέρχονται + από το Direction Générale des Impôts.' + contributors_nl_html: 'Ολλανδία: Περιέχει δεδομένα που προέρχονται + από το AND © 2007 (www.and.com)' + contributors_nz_html: 'Νέα Ζηλανδία: Περιέχει δεδομένα που + πηγάζουν από την Υπηρεσία Πληροφοριών Γης Νέας Ζηλανδίας. Τα Πνευματικά + Δικαιώματα Crown είναι κατωχυρωμένα.' + contributors_si_html: |- + Σλοβενία: Περιέχει δεδομένα από την + Αρχή Τοπογραφίας και Χαρτογράφησης και το Υπουργείο Γεωργίας, Δασών και Τροφίμων + (δημόσιες πληροφορίες της Σλοβενίας). + contributors_za_html: |- + Νότια Αφρική: Περιεχέι δεδομένα που προέρχονται από το + Chief Directorate: + National Geo-Spatial Information, Πνευματικό δικαίωμα χώρας κατοχυρωμένο. + contributors_gb_html: |- + Ηνωμένο Βασίλειο: Περιέχει δεδομένα + της Ordnance Survey © Crown πνευματικά δικαιώματα και δικαιώματα βάσης δεδομένων + 2010-12. + contributors_footer_1_html: |- + Για περισσότερες λεπτομέρειες σχετικά με αυτές, και άλλες πηγές που χρησιμοποιήθηκαν + για να βελτιώσουν το OpenStreetMap, παρακαλούμε δείτε τη σελίδα Συνεισφέροντες στο OpenStreetMap Wiki. + contributors_footer_2_html: Η συμπερίληψη δεδομένων στο OpenStreetMap δεν + συνεπάγεται ότι ο αρχικός πάροχος δεδομένων εγκρίνει το OpenStreetMap, παρέχει + οποιαδήποτε εγγύηση ή αποδέχεται καμία ευθύνη. + infringement_title_html: Παραβιάσεις πνευματικών δικαιωμάτων + infringement_1_html: Υπενθυμίζουμε στους συνεισφέροντες του OSM να μην προσθέτουν + δεδομένα από πηγές με πνευματικά δικαιώματα (π.χ. Google Maps η έντυπους + χάρτες) χωρίς την προηγούμενη άδεια από τους ιδιοκτήτες των δικαιωμάτων. + infringement_2_html: Εάν πιστεύετε ότι προστέθηκε παράνομα υλικό που προστατεύεται + από πνευματικά δικαιώματα στη βάση δεδομένων του OpenStreetMap ή σε αυτόν + τον ιστότοπο, παρακαλούμε απευθυνθείτε στη + διαδικασία απομάκρυνσης ή καταθέστε άμεσα μια αίτηση στην on-line + σελίδα αιτήσεων. + trademarks_title_html: Εμπορικά σήματα + trademarks_1_html: Το OpenStreetMap, το λογότυπο με το μεγεθυντικό φακό και + το «State of the Map» είναι σήματα κατατεθέντα του Ιδρύματος OpenStreetMap. + Αν έχετε ερωτήσεις σχετικά με τη χρήση των σημάτων, παρακαλώ επισκεφθείτε + το Πολιτική + Εμπορικών Σημάτων. index: js_1: Είτε χρησιμοποιείτε πρόγραμμα περιήγησης που δεν υποστηρίζει JavaScript ή έχετε απενεργοποιήσει την JavaScript. @@ -1559,6 +1400,119 @@ el: id_not_configured: Ο iD δεν έχει ρυθμιστεί no_iframe_support: Ο περιηγητής σας δεν υποστηρίζει το στοιχείο iframe του HTML, που είναι απαραίτητο για αυτήν την λειτουργία. + export: + title: Εξαγωγή + area_to_export: Περιοχή προς εξαγωγή + manually_select: Χειροκίνητη επιλογή διαφορετικής περιοχής + format_to_export: Μορφή προς εξαγωγή + osm_xml_data: Δεδομένα OpenStreetMap σε μορφή XML + map_image: Εικόνα χάρτη (δείχνει τυπικό στρώμα) + embeddable_html: Ενσωματούμενη HTML + licence: Άδεια + export_details: Τα δεδομένα του OpenStreetMap είναι αδειοδοτημένα υπό την Open Data Commons Open + Database License (ODbL). + too_large: + advice: 'Αν η εξαγωγή αποτυγχάνει, παρακαλώ δοκιμάστε μία από τις πηγές που + αναφέρονται παρακάτω:' + body: 'Αυτή η περιοχή είναι πολύ μεγάλη για να εξαχθεί ως δεδομένα OpenStreetMap + XML. Παρακαλώ κάνετε μεγέθυνση, επιλέξτε μικρότερη περιοχή, ή χρησιμοποιήστε + μία από της ακόλουθες πηγές για μαζικές λήψεις δεδομένων:' + planet: + title: Πλανήτης OSM + description: Τακτικά-ενημερωμένα αντίγραφα της πλήρης βάσης δεδομένων του + OpenStreetMap + overpass: + title: Overpass API + description: Λήψη αυτού του πλαισίου οριοθέτησης από ένα καθρέφτη της βάσης + δεδομένων του OpenStreetMap + geofabrik: + title: Λήψεις Geofabrik + description: Τακτικά-ενημερωμένες εξαγωγές ηπείρων, χωρών και επιλεγμένων + πόλεων + metro: + title: Εξαγωγές Metro + description: Χάρτες για τις μεγάλες πόλεις του κόσμου και της γύρω περιοχές + other: + title: Άλλες πηγές + description: Επιπλέον πηγές απαριθμούνται στο wiki του OpenStreetMap + options: Επιλογές + format: Μορφοποίηση + scale: Κλίμακα + max: μεγ + image_size: Μέγεθος εικόνας + zoom: Εστίαση + add_marker: Προσθέστε ένα δείκτη στο χάρτη + latitude: 'Γεω. Πλ:' + longitude: 'Γεω. Μη.:' + output: Απόδοση + paste_html: Επικόλληση HTML για ενσωμάτωση στην ιστοσελίδα + export_button: Εξαγωγή + fixthemap: + title: Αναφέρετε πρόβλημα / Διορθώστε τον χάρτη + how_to_help: + title: Πώς να Βοηθήσετε + join_the_community: + title: Γνωρίστε την κοινότητα + explanation_html: Αν έχετε παρατηρήσει ένα πρόβλημα με τα δεδομένα του χάρτη + μας, παραδείγματος χάριν ένας δρόμος που λείπει στη διεύθυνσή σας, ο καλύτερος + τρόπος να προχωρήσετε είναι να ενταχθείτε στην κοινότητα του OpenStreetMap + και να προσθέσετε ή να επισκευάσετε τα δεδομένα από μόνοι σας. + add_a_note: + instructions_html: |- + Απλά κάντε κλικ στο ή στο ίδιο εικονίδιο στην οθόνη του χάρτη. + Έτσι θα προστεθεί δείκτης στον χάρτη, τον οποίο μπορείτε να μετακινήσετε σέρνοντάς τον. + Προσθέστε το μήνυμά σας και, στη συνέχεια, κάντε κλικ στο κουμπί αποθήκευσης, ώστε να μπορούν άλλοι χαρτογράφοι να ερευνήσουν το πρόβλημα. + other_concerns: + title: Άλλες ανησυχίες + explanation_html: Αν ανησυχείτε για το πώς χρησιμοποιούνται τα δεδομένα μας + ή σχετικά με τα περιεχόμενα, παρακαλούμε συμβουλευτείτε τη σελίδα + πνευματικών δικαιωμάτων μας για περισσότερες νομικές πληροφορίες ή επικοινωνήστε + με την κατάλληλη ομάδα + εργασίας του OSMF. + help: + title: Βοήθεια + introduction: Το OpenStreetMap έχει πολλαπλούς πόρους για να μάθετε για το εγχείρημα, + να κάνετε ερωτήσεις, να απαντήσετε σε ερωτήσεις άλλων και να συζητήσετε και + να τεκμηριώσετε θέματα χαρτογράφησης συνεργατικά. + welcome: + url: /welcome + title: Καλώς ήλθατε στο OSM + description: Ξεκινήστε με αυτές τις σύντομες οδηγίες που καλύπτουν τα βασικά + του OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/El:Beginners%27_guide + title: Οδηγός Αρχαρίων + description: Οδηγός αρχαρίων διατηρούμενος από την κοινότητα. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Κάντε μία ερώτηση ή αναζητήσετε απαντήσεις στην ιστοσελίδα ερωτήσεων + και απαντήσεων του OSM. + mailing_lists: + url: https://lists.openstreetmap.org/ + title: Λίστες Αλληλογραφίας + description: Κάντε μία ερώτηση ή συζητήστε ενδιαφέροντα θέματα σε ένα ευρύ + φάσμα τοπικών ή περιφερειακών λιστών αλληλογραφίας. + forums: + url: https://forum.openstreetmap.org/ + title: Φόρουμ + description: Ερωτήσεις και συζητήσεις για όσους προτιμούν μία διεπαφή με στιλ + διάρθρωσης κουκκίδων. + irc: + url: https://irc.openstreetmap.org/ + title: IRC + description: Διαδραστική συνομιλία σε πολλές διαφορετικές γλώσσες και για + πολλά θέματα. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Βοήθεια για εταιρείες και οργανισμούς για μετάβαση σε χάρτες + που βασίζονται στο OpenStreetMap και άλλες υπηρεσίες. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Περιηγηθείτε το wiki για επιμελής τεκμηρίωση του OSM. sidebar: search_results: Αποτελέσματα Αναζήτησης close: Κλείσιμο @@ -1659,6 +1613,58 @@ el: image: Εικόνα alt: Εναλ. κείμενο url: Διεύθυνση URL + welcome: + title: Καλώς ήρθατε! + introduction_html: Σας καλωσορίζουμε στο OpenStreetMap, τον ελεύθερο και επεξεργάσιμο + χάρτη του κόσμου. Τώρα που έχετε εγγραφεί, είστε πανέτοιμοι να αρχίσετε τη + χαρτογράφηση. Εδώ είναι ένας γρήγορος οδηγός με τα πιο σημαντικά πράγματα + που πρέπει να ξέρετε. + whats_on_the_map: + title: Τι είναι στον Χάρτη + on_html: |- + Το OpenStreetMap περιέχει πράγματα που είναι πραγματικά και σύγχρονα - + περιλαμβάνει εκατομμύρια κτίρια, δρόμους, και άλλες λεπτομέρειες για διάφορα μέρη. Μπορείτε να χαρτογραφήσετε + οποιοδήποτε χαρακτηριστικά του πραγματικού κόσμου που σας κάνουν ενδιαφέρον. + off_html: |- + Αυτά που δεν περιλαμβάνει είναι δογματικά δεδομένα όπως βαθμολογίες, ιστορικά ή + υποθετικά χαρακτηριστικά, και δεδομένα από πηγές που προστατεύονται από πνευματικά δικαιώματα. Εκτός αν έχετε ειδική άδεια, + μην αντιγράψτε από ηλεκτρονικούς ή φυσικούς χάρτες. + basic_terms: + title: Βασικοί Όροι Για Τη Χαρτογράφηση + paragraph_1_html: Η κοινότητα OpenStreetMap έχει δικό της γλωσσάρι. Παρακάτω + είναι μερικές λέξεις που μπορεί να σας φανούν χρήσιμες. + editor_html: Οι επεξεργαστές είναι εφαρμογές ή ιστοσελίδες + που μπορείτε να χρησιμοποιήσετε για να επεξεργαστείτε το χάρτη. + node_html: Οι κόμβοι είναι σημεία στον χάρτη, όπως ένα εστιατόριο + ή ένα δένδρο. + way_html: Οι διαδρομές είναι γραμμές ή περιοχές, όπως δρόμοι, + ρέματα, λίμνες ή κτήρια. + tag_html: Τα χαρακτηριστικά είναι δεδομένα που σχετίζονται + με κόμβους ή διαδρομές, όπως τα ονόματα εστιατορίως ή τα όριο ταχύτητας + διάφορων δρόμων. + rules: + title: Κανόνες! + paragraph_1_html: Το OpenStreetMap έχει λίγους επίσημους κανόνες, αλλά αναμένουμε + από όλους τους συμμετέχοντες να συνεργαστούν και να επικοινωνούν με την + κοινότητα. Αν σκέφτεστε άλλες δραστηριότητες εκτός από την επεξεργασία με + το χέρι, παρακαλούμε διαβάστε και ακολουθήστε τις οδηγίες στις Εισαγωγές + και στις Αυτόματες + Επεξεργασίες. + questions: + title: Ερωτήσεις; + paragraph_1_html: |- + Το OpenStreetMap έχει πολλαπλούς πόρους για να μάθετε για το εγχείρημα, να κάνετε + ερωτήσεις και να συζητάτε και να τεκμηριώνετε θέματα χαρτογράφησης συνεργατικά. + Λάβετε βοήθεια εδώ. + start_mapping: Ξεκινήστε τη Χαρτογράφηση + add_a_note: + title: Δεν Έχετε Χρόνο Για Χαρτογράφηση; Προσθέστε μια Σημείωση! + paragraph_1_html: Εάν θέλετε κάτι μικρό να διορθωθεί και δεν έχετε χρόνο να + εγγραφείτε και να μάθετε πως να επεξεργάζεστε τον χάρτη, είναι εύκολο να + προσθέσετε σημειώσεις. + paragraph_2_html: |- + Απλά επισκεφτείτε τον χάρτη και πατήστε το εικονίδιο σημείωσης: + . Αυτό θα προσθέσει έναν δείκτη στο χάρτη, τον οποίο μπορείτε να μετακινήσετε τραβώντας τον. Προσθέστε το μήνυμά σας, κατόπιν πατήστε αποθήκευση, και άλλοι χαρτογράφοι θα το διερευνήσουν. trace: visibility: private: Προσωπικό (διαμοιρασμός μόνο σαν ανώνυμος) @@ -1702,6 +1708,7 @@ el: trace_header: upload_trace: Αποστολή ίχνους see_all_traces: Δείτε όλα τα ίχνη + see_my_traces: Δες τα ίχνη μου traces_waiting: one: Έχετε %{count} ίχνος σε αναμονή για ανέβασμα. Παρακαλούμε περιμένετε να ολοκληρωθεί πριν ανεβάσετε άλλα, ώστε να μην εμποδίσετε τη σειρά αναμονής @@ -1730,6 +1737,7 @@ el: delete_track: Διαγραφή αυτού του ίχνους trace_not_found: Δεν βρέθηκε ίχνος! visibility: 'Ορατότητα:' + confirm_delete: Διαγραφή αυτού του ίχνους; trace_paging_nav: showing_page: Σελίδα %{page} older: Παλαιότερα Ίχνη @@ -1752,6 +1760,7 @@ el: map: χάρτης list: public_traces: Δημόσια ίχνη GPS + my_traces: Τα ίχνη GPS μου public_traces_from: Δημόσια ίχνη GPS από τον %{user} description: Προβολή πρόσφατων μεταφορτώσεων ιχνών GPS tagged_with: χαρακτηρίστηκαν με %{tags} @@ -1792,7 +1801,7 @@ el: συνδεθείτε στην ηλεκτρονική διεπαφή για να δείτε τους Όρους Συνεισφερόντων. Δεν χρειάζεται να συμφωνήσετε, αλλά θα πρέπει να τους δείτε. oauth: - oauthorize: + authorize: title: Επιτρέψτε την πρόσβαση στο λογαριασμό σας request_access: Η εφαρμογή %{app_name} ζητά πρόσβαση στον λογαριασμό σας, %{user}. Παρακαλώ ελέγξτε κατά πόσο θέλετε η εφαρμογή τις παρακάτω δυνατότητες. Μπορείτε @@ -1807,11 +1816,11 @@ el: allow_write_gpx: ανεβάσει ίχνη GPS. allow_write_notes: τροποποιήσει σημειώσεις. grant_access: Παροχή Πρόσβασης - oauthorize_success: + authorize_success: title: Επιτρέπεται το αίτημα εξουσιοδότησης allowed: Παραχωρήσατε στην εφαρμογή %{app_name} πρόσβαση στον λογαριασμό σας. verification: Ο κωδικός επαλήθευσης είναι %{code}. - oauthorize_failure: + authorize_failure: title: Η αίτηση επαλήθευσης απέτυχε denied: Απαγορέψατε την εφαρμογή %{app_name} από πρόσβαση στον λογαριασμό σας. invalid: Το κουπόνι εξουσιοδότησης δεν είναι έγκυρο. @@ -1854,7 +1863,7 @@ el: revoke: Ανακαλέστε! my_apps: Οι Εφαρμογές Πελάτη Μου no_apps: Έχετε ένα πρόγραμμα που θα θέλατε να εισάγετε για χρήση μαζί μας χρησιμοποιώντας - την παράμετρο %(oauth); Πρέπει να εισάγετε την εφαρμογή δικτύου σας πριν ζητήσει + την παράμετρο %{oauth}; Πρέπει να εισάγετε την εφαρμογή δικτύου σας πριν ζητήσει το OAuth για αυτήν την υπηρεσία. registered_apps: 'Έχετε τις παρακάτω εφαρμογές πελάτη καταχωρημένες:' register_new: Καταχωρήστε την εφαρμογή σας @@ -1874,7 +1883,7 @@ el: allow_write_gpx: αποστείλει ίχνη GPS. allow_write_notes: τροποποιήσει σημειώσεις not_found: - sorry: Λυπούμαστε, αυτός ο %{τύπος} δεν μπόρεσε να βρεθεί. + sorry: Λυπούμαστε, αυτός ο %{type} δεν μπόρεσε να βρεθεί. create: flash: Οι πληροφορίες καταχωρήθηκαν επιτυχώς update: @@ -2005,9 +2014,9 @@ el: consider_pd: Και επιπρόσθετα στην παραπάνω συμφωνία, θεωρώ τις συνεισφορές μου ως Public Domain consider_pd_why: τι είναι αυτό; - guidance: Πληροφορίες για να καταλάβετε αυτούς τους όρους:μία - αναγνώσιμη περίληψηκαι μερικές ανεπίσημες μεταφράσεις - + guidance: Πληροφορίες για να καταλάβετε αυτούς τους όρους:μία + αναγνώσιμη περίληψηκαι μερικές ανεπίσημες + μεταφράσεις agree: Συμφωνώ decline: Διαφωνώ you need to accept or decline: Παρακαλώ διαβάστε και αποδεχτείτε ή απορρίψτε @@ -2060,6 +2069,7 @@ el: if set location: Ορίσετε την τοποθεσία του σπιτιού σας στις %{settings_link} για να δείτε κοντινούς χρήστες. settings_link_text: ρυθμίσεις + my friends: Οι φίλοι μου no friends: Δεν έχετε προσθέσει φίλους ακόμα. km away: '%{count}χλμ μακριά' m away: '%{count}μ μακριά' @@ -2253,23 +2263,25 @@ el: not_a_role: Το αλφαριθμητικό `%{role}' δεν είναι ένας έγκυρος ρόλος. already_has_role: Ο χρήστης έχει ήδη ρόλο %{role}. doesnt_have_role: Ο χρήστης δεν έχει ρόλο %{role}. + not_revoke_admin_current_user: Ο διαχειριστικός ρόλος δεν μπορεί να αναιρεθεί + από τον τρέχον χρήστη. grant: title: Επιβεβαίωση χορήγησης ρόλου heading: Επιβεβαίωση χορήγησης ρόλου are_you_sure: Είστε βέβαιος ότι θέλετε να εκχωρήσετε το ρόλο `%{role}' στον χρήστη `%{name}'? confirm: Επιβεβαίωση - fail: Δεν μπόρεσε να εξουσιοδοτήσει τον χρήστη % {όνομα}. Παρακαλώ ελέγξετε - ότι ο χρήστης και ο ρόλος είναι και οι δύο έγκυροι + fail: Δεν μπόρεσε να εξουσιοδοτήσει τον ρόλο `%{role}' στο χρήστη %{name}. Παρακαλώ + ελέγξετε ότι ο χρήστης και ο ρόλος είναι και οι δύο έγκυροι revoke: title: Επιβεβαίωση ανάκλησης ρόλου heading: Επιβεβαίωση ανάκλησης ρόλου are_you_sure: Σίγουρα θέλετε να ανακαλέστε τον ρόλο «%{role}» από τον χρήστη «%{name}»; confirm: Επιβεβαίωση - fail: Δεν μπόρεσε να αναιρέσει τον ρόλο %{ρόλο} από τον χρήστη %{όνομα}'. Παρακαλώ + fail: Δεν μπόρεσε να αναιρέσει τον ρόλο %{role} από τον χρήστη %{name}'. Παρακαλώ τσεκάρετε ότι ο χρήστης και ο ρόλος είναι και οι δύο έγκυροι. - user_block: + user_blocks: model: non_moderator_update: Πρέπει να είστε συντονιστής για να δημιουργήσετε ή να ενημερώσετε μία φραγή. @@ -2334,20 +2346,6 @@ el: period: one: 1 ώρα other: '%{count} ώρες' - partial: - show: Εμφάνιση - edit: Επεξεργασία - revoke: Ανακαλέστε! - confirm: Είσαστε σίγουροι; - display_name: Αποκλεισμένος Χρήστης - creator_name: Δημιουργός - reason: Αιτία φραγής - status: Κατάσταση - revoker_name: Ανακλήθηκε από - not_revoked: (δεν έχει ανακληθεί) - showing_page: Σελίδα %{page} - next: Επόμενη » - previous: « Προηγούμενη helper: time_future: Τελειώνει σε %{time}. until_login: Ενεργό έως ότου ο χρήστης συνδεθεί. @@ -2378,8 +2376,22 @@ el: back: Προβολή όλων των φραγών revoker: 'Έκανε την ανάκληση:' needs_view: Ο χρήστης πρέπει να συνδεθεί προτού εκκαθαριστεί αυτή η φραγή. - note: - description: + block: + not_revoked: (δεν έχει ανακληθεί) + show: Εμφάνιση + edit: Επεξεργασία + revoke: Ανακαλέστε! + blocks: + display_name: Αποκλεισμένος Χρήστης + creator_name: Δημιουργός + reason: Αιτία φραγής + status: Κατάσταση + revoker_name: Ανακλήθηκε από + showing_page: Σελίδα %{page} + next: Επόμενη » + previous: « Προηγούμενη + notes: + comment: opened_at_html: Δημιουργήθηκε %{when} πριν opened_at_by_html: Δημιουργήθηκε %{when} πριν από τον %{user} commented_at_html: Ενημερώθηκε %{when} πριν @@ -2481,9 +2493,10 @@ el: new: intro: Εντοπίσατε λάθος ή κάτι που λείπει; Πείτε το στους άλλους χαρτογράφους ώστε να λυθεί το πρόβλημα. Μετακινείστε το δείκτη στη σωστή θέση και γράψτε - μια περιγραφή του προβλήματος ως εξήγηση. (Μην εισαγάγετε προσωπικές πληροφορίες - ή πληροφορίες από χάρτες προστατευμένους με πνευματικά δικαιώματα ή λίστες - καταλόγων.) + μια περιγραφή του προβλήματος ως εξήγηση. + advice: Η σημείωση σας είναι δημόσια και μπορεί να χρησιμοποιηθεί για την + ενημέρωση του χάρτη, γι'αυτό μην προστέθετε προσωπικές πληροφορίες, ή πληροφορίες + από χάρτες που καλύπτονται από πνευματικά δικαιώματα ή καταχωρήσεις καταλόγου. add: Προσθήκη Σημείωσης show: anonymous_warning: Αυτό η σημείωση περιλαμβάνει σχόλια από ανώνυμους χρήστες @@ -2510,12 +2523,28 @@ el: distance: Απόσταση errors: no_route: Δεν βρέθηκε διαδρομή ανάμεσα σε αυτά τα δύο μέρη. - no_place: Συγγνώμη, δεν βρέθηκε αυτό το μέρος. + no_place: Συγγνώμη, δεν βρέθηκε αυτό το '%{place}'. instructions: continue_without_exit: Συνεχίστε στην %{name} slight_right_without_exit: Ελαφριά δεξιά στην %{name} + offramp_right: Πάρτε την ράμπα στα δεξιά + offramp_right_with_exit: Πάρτε την έξοδο %{exit} στα δεξιά + offramp_right_with_exit_name: Πάρτε την έξοδο %{exit} στα δεξιά επάνω στο + %{name} + offramp_right_with_exit_directions: Πάρτε την έξοδο %{exit} στα δεξιά προς + τις %{directions} + offramp_right_with_exit_name_directions: Πάρτε την έξοδο %{exit} στα δεξιά + επάνω στο %{name}, προς τις %{directions} offramp_right_with_name: Πάρτε τη λωρίδα δεξιά προς %{name} + offramp_right_with_directions: Πάρτε την ράμπα στα δεξιά προς τις %{directions} + offramp_right_with_name_directions: Πάρτε την ράμπα στα δεξιά επάνω στο %{name}, + προς τις %{directions} onramp_right_without_exit: Στρίψτε δεξιά στη λωρίδα προς %{name} + onramp_right_with_directions: Στρίψτε δεξιά επάνω στη ράμπα προς τις %{directions} + onramp_right_with_name_directions: Στρίψτε δεξιά στην ράμπα επάνω στο %{name}, + προς τις %{directions} + onramp_right_without_directions: Στρίψτε δεξιά επάνω στη ράμπα + onramp_right: Στρίψτε δεξιά επάνω στη ράμπα endofroad_right_without_exit: Στο τέλος του δρόμου στρίψτε δεξιά στην %{name} merge_right_without_exit: Ελαφριά δεξιά προς %{name} fork_right_without_exit: Στην διχάλα στρίψτε δεξιά στην %{name} @@ -2524,8 +2553,24 @@ el: uturn_without_exit: Αναστροφή στην %{name} sharp_left_without_exit: Κλειστά αριστερά στην %{name} turn_left_without_exit: Στρίψτε αριστερά στην %{name} + offramp_left: Πάρτε την ράμπα στα αριστερά + offramp_left_with_exit: Πάρτε την έξοδο %{exit} στα αριστερά + offramp_left_with_exit_name: Πάρτε την έξοδο %{exit} στα αριστερά επάνω στο + %{name} + offramp_left_with_exit_directions: Πάρτε την έξοδο %{exit} στα αριστερά προς + τις %{directions} + offramp_left_with_exit_name_directions: Πάρτε την έξοδο %{exit} στα αριστερά + επάνω στο %{name}, προς τις %{directions} offramp_left_with_name: Πάρτε τη λωρίδα αριστερά προς %{name} + offramp_left_with_directions: Πάρτε την ράμπα στα αριστερά προς τις %{directions} + offramp_left_with_name_directions: Πάρτε την ράμπα στα αριστερά επάνω στο + %{name}, προς τις %{directions} onramp_left_without_exit: Στρίψτε αριστερά στη λωρίδα προς %{name} + onramp_left_with_directions: Στρίψτε αριστερά επάνω στη ράμπα προς τις %{directions} + onramp_left_with_name_directions: Στρίψτε αριστερά στην ράμπα επάνω στο %{name}, + προς τις %{directions} + onramp_left_without_directions: Στρίψτε αριστερά επάνω στη ράμπα + onramp_left: Στρίψτε αριστερά επάνω στη ράμπα endofroad_left_without_exit: Στο τέλος του δρόμου στρίψτε αριστερά στην %{name} merge_left_without_exit: Ελαφριά αριστερά προς %{name} fork_left_without_exit: Στη διχάλα στρίψτε αριστερά στην %{name} @@ -2563,7 +2608,7 @@ el: show_address: Εμφάνιση διεύθυνσης query_features: Πληροφορίες χαρακτηριστικών centre_map: Κεντράρισμα χάρτη εδώ - redaction: + redactions: edit: description: Περιγραφή heading: Επεξεργασία παράληψης diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 5183e5f49..2ec5e27dd 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -349,53 +349,6 @@ en-GB: ago: '%{ago} ago' newer_comments: Newer Comments older_comments: Older Comments - export: - title: Export - start: - area_to_export: Area to Export - manually_select: Manually select a different area - format_to_export: Format to Export - osm_xml_data: OpenStreetMap XML Data - map_image: Map Image (shows standard layer) - embeddable_html: Embeddable HTML - licence: Licence - export_details: OpenStreetMap data is licenced under the Open - Data Commons Open Database Licence (ODbL). - too_large: - advice: 'If the above export fails, please consider using one of the sources - listed below:' - body: This area is too large to be exported as OpenStreetMap XML Data. Please - zoom in or select a smaller area, or use one of the sources listed below - for bulk data downloads. - planet: - title: Planet OSM - description: Regularly updated copies of the complete OpenStreetMap database - overpass: - title: Overpass API - description: Download this bounding box from a mirror of the OpenStreetMap - database - geofabrik: - title: Geofabrik Downloads - description: Regularly-updated extracts of continents, countries, and selected - cities - metro: - title: Metro Extracts - description: Extracts for major world cities and their surrounding areas - other: - title: Other Sources - description: Additional sources listed on the OpenStreetMap wiki - options: Options - format: Format - scale: Scale - max: max - image_size: Image Size - zoom: Zoom - add_marker: Add a marker to the map - latitude: 'Lat:' - longitude: 'Lon:' - output: Output - paste_html: Paste HTML to embed in website - export_button: Export geocoder: search: title: @@ -974,264 +927,6 @@ en-GB: text: Make a Donation learn_more: Learn More more: More - license_page: - foreign: - title: About this translation - text: In the event of a conflict between this translated page and %{english_original_link}, - the English page shall take precedence - english_link: the English original - native: - title: About this page - text: You are viewing the English version of the copyright page. You can go - back to the %{native_link} of this page or you can stop reading about copyright - and %{mapping_link}. - native_link: British English version - mapping_link: start mapping - legal_babble: - title_html: Copyright and Licence - intro_1_html: |- - OpenStreetMap® is open data, licensed under the Open Data - Commons Open Database License (ODbL) by the OpenStreetMap Foundation (OSMF). - intro_2_html: You are free to copy, distribute, transmit and adapt our data, - as long as you credit OpenStreetMap and its contributors. If you alter or - build upon our data, you may distribute the result only under the same licence. - The full legal code - explains your rights and responsibilities. - intro_3_html: |- - The cartography in our map tiles, and our documentation, are - licenced under the Creative - Commons Attribution-ShareAlike 2.0 licence (CC BY-SA). - credit_title_html: How to credit OpenStreetMap - credit_1_html: |- - We require that you use the credit “© OpenStreetMap - contributors”. - credit_2_html: |- - You must also make it clear that the data is available under the Open - Database Licence, and if using our map tiles, that the cartography is - licenced as CC BY-SA. You may do this by linking to - this copyright page. - Alternatively, and as a requirement if you are distributing OSM in a - data form, you can name and link directly to the licence(s). In media - where links are not possible (e.g. printed works), we suggest you - direct your readers to openstreetmap.org (perhaps by expanding - 'OpenStreetMap' to this full address), to opendatacommons.org, and - if relevant, to creativecommons.org. - credit_3_html: |- - For a browsable electronic map, the credit should appear in the corner of the map. - For example: - attribution_example: - alt: Example of how to attribute OpenStreetMap on a webpage - title: Attribution example - more_title_html: Finding out more - more_1_html: |- - Read more about using our data, and how to credit us, at the OSMF Licence page and the community Legal - FAQ. - more_2_html: |- - Although OpenStreetMap is open data, we cannot provide a - free-of-charge map API for third-parties. - See our API Usage Policy, - Tile Usage Policy - and Nominatim Usage Policy. - contributors_title_html: Our contributors - contributors_intro_html: |- - Our contributors are thousands of individuals. We also include - openly-licenced data from national mapping agencies - and other sources, among them: - contributors_at_html: |- - Austria: Contains data from - Stadt Wien (under - CC BY), - Land Vorarlberg and - Land Tirol (under CC BY AT with amendments). - contributors_ca_html: |- - Canada: Contains data from - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), and StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: |- - Finland: Contains data from the - National Land Survey of Finland's Topographic Database - and other datasets, under the - NLSFI Licence. - contributors_fr_html: 'France: Contains data sourced from Direction - Générale des Impôts.' - contributors_nl_html: 'Netherlands: Contains © AND data, - 2007 (www.and.com)' - contributors_nz_html: 'New Zealand: Contains data sourced from - Land Information New Zealand. Crown Copyright reserved.' - contributors_si_html: |- - Slovenia: Contains data from the - Surveying and Mapping Authority and - Ministry of Agriculture, Forestry and Food - (public information of Slovenia). - contributors_za_html: 'South Africa: Contains data sourced - from Chief Directorate: National Geo-Spatial - Information, State copyright reserved.' - contributors_gb_html: 'United Kingdom: Contains Ordnance Survey - data © Crown copyright and database right 2010-12.' - contributors_footer_1_html: For further details of these, and other sources - that have been used to help improve OpenStreetMap, please see the Contributors - page on the OpenStreetMap Wiki. - contributors_footer_2_html: Inclusion of data in OpenStreetMap does not imply - that the original data provider endorses OpenStreetMap, provides any warranty, - or accepts any liability. - infringement_title_html: Copyright infringement - infringement_1_html: OSM contributors are reminded never to add data from any - copyrighted sources (e.g. Google Maps or printed maps) without explicit permission - from the copyright holders. - infringement_2_html: If you believe that copyrighted material has been inappropriately - added to the OpenStreetMap database or this site, please refer to our takedown - procedure or file directly at our on-line - filing page. - trademarks_title_html: Trademarks - trademarks_1_html: OpenStreetMap, the magnifying glass logo, and State of the - Map are registered trademarks of the OpenStreetMap Foundation. If you have - questions about your use of the marks, please send your questions to the Licence - Working Group. - welcome_page: - title: Welcome! - introduction_html: Welcome to OpenStreetMap, the free and editable map of the - world. Now that you're signed up, you're all set to get started mapping. Here's - a quick guide with the most important things you need to know. - whats_on_the_map: - title: What's on the Map - on_html: OpenStreetMap is a place for mapping things that are both real - and current - it includes millions of buildings, roads, and other details - about places. You can map whatever real-world features are interesting to - you. - off_html: What it doesn't include is opinionated data like ratings, - historical or hypothetical features, and data from copyrighted sources. Unless - you have special permission, don't copy from online or paper maps. - basic_terms: - title: Basic Terms For Mapping - paragraph_1_html: OpenStreetMap has some of its own lingo. Here are a few key - words that'll come in handy. - editor_html: An editor is a program or website you can use - to edit the map. - node_html: A node is a point on the map, like a single restaurant - or a tree. - way_html: A way is a line or area, like a road, stream, lake - or building. - tag_html: A tag is a bit of data about a node or way, like - a restaurant's name or a road's speed limit. - rules: - title: Rules! - paragraph_1_html: "OpenStreetMap has few formal rules but we expect all participants - to collaborate\nwith, and communicate with, the community. If you are considering\nany - activities other than editing by hand, please read and follow the guidelines - on \nImports - and \nAutomated - Edits." - questions: - title: Any questions? - paragraph_1_html: |- - OpenStreetMap has several resources for learning about the project, asking and answering questions, and collaboratively discussing and documenting mapping topics. - Get help here. - start_mapping: Start Mapping - add_a_note: - title: No Time To Edit? Add a Note! - paragraph_1_html: If you just want something small fixed and don't have the - time to sign up and learn how to edit, it's easy to add a note. - paragraph_2_html: 'Just go to the map and click the - note icon: . This will add a marker to the - map, which you can move by dragging. Add your message, then click save, and - other mappers will investigate.' - fixthemap: - title: Report a problem/Fix the map - how_to_help: - title: How to Help - join_the_community: - title: Join the community - explanation_html: If you have noticed a problem with our map data, for example - a road is missing or your address, the best way to proceed is to join the - OpenStreetMap community and add or repair the data yourself. - add_a_note: - instructions_html: Just click or the same icon on - the map display. This will add a marker to the map, which you can move by - dragging. Add your message, then click save, and other mappers will investigate. - other_concerns: - title: Other concerns - explanation_html: "If you have concerns about how our data is being used or - about the contents please consult our\ncopyright page - for more legal information, or contact the appropriate \nOSMF - working group." - help_page: - title: Getting Help - introduction: OpenStreetMap has several resources for learning about the project, - asking and answering questions, and collaboratively discussing and documenting - mapping topics. - welcome: - url: /welcome - title: Welcome to OSM - description: Start with this quick guide covering the OpenStreetMap basics. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: Beginners' Guide - description: Community maintained guide for beginners. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Ask a question or look up answers on OSM's question-and-answer - site. - mailing_lists: - title: Mailing Lists - description: Ask a question or discuss interesting matters on a wide range of - topical or regional mailing lists. - forums: - title: Forums - description: Questions and discussions for those that prefer a bulletin board - style interface. - irc: - title: IRC - description: Interactive chat in many different languages and on many topics. - switch2osm: - title: switch2osm - description: Help for companies and organisations switching to OpenStreetMap - based maps and other services. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Browse the wiki for in-depth OSM documentation. - about_page: - next: Next - copyright_html: ©OpenStreetMap
      contributors - used_by: '%{name} powers map data on thousands of web sites, mobile apps, and - hardware devices' - lede_text: OpenStreetMap is built by a community of mappers that contribute and - maintain data about roads, trails, cafés, railway stations, and much more, all - over the world. - local_knowledge_title: Local Knowledge - local_knowledge_html: |- - OpenStreetMap emphasises local knowledge. Contributors use - aerial imagery, GPS devices, and low-tech field maps to verify that OSM - is accurate and up to date. - community_driven_title: Community Driven - community_driven_html: |- - OpenStreetMap's community is diverse, passionate, and growing every day. Our contributors include enthusiast mappers, GIS professionals, engineers running the OSM servers, humanitarians mapping disaster-affected areas, and many more. - To learn more about the community, see the user diaries, community blogs, and the OSM Foundation website. - open_data_title: Open Data - open_data_html: |- - OpenStreetMap is open data: you are free to use it for any purpose - as long as you credit OpenStreetMap and its contributors. If you alter or - build upon the data in certain ways, you may distribute the result only - under the same licence. See the Copyright and - Licence page for details. - legal_title: Legal - legal_html: "This site and many other related services are formally operated by - the \nOpenStreetMap Foundation (OSMF) - \non behalf of the community. Use of all OSMF operated services is subject \nto - our \nAcceptable - Use Policies and our Privacy - Policy\n
      \nPlease contact - the OSMF \nif you have licensing, copyright or other legal questions and - issues." - partners_title: Partners notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} commented on a diary entry' @@ -1419,6 +1114,161 @@ en-GB: delete: deleted: Message deleted site: + about: + next: Next + copyright_html: ©OpenStreetMap
      contributors + used_by: '%{name} powers map data on thousands of web sites, mobile apps, and + hardware devices' + lede_text: OpenStreetMap is built by a community of mappers that contribute + and maintain data about roads, trails, cafés, railway stations, and much more, + all over the world. + local_knowledge_title: Local Knowledge + local_knowledge_html: |- + OpenStreetMap emphasises local knowledge. Contributors use + aerial imagery, GPS devices, and low-tech field maps to verify that OSM + is accurate and up to date. + community_driven_title: Community Driven + community_driven_html: |- + OpenStreetMap's community is diverse, passionate, and growing every day. Our contributors include enthusiast mappers, GIS professionals, engineers running the OSM servers, humanitarians mapping disaster-affected areas, and many more. + To learn more about the community, see the user diaries, community blogs, and the OSM Foundation website. + open_data_title: Open Data + open_data_html: |- + OpenStreetMap is open data: you are free to use it for any purpose + as long as you credit OpenStreetMap and its contributors. If you alter or + build upon the data in certain ways, you may distribute the result only + under the same licence. See the Copyright and + Licence page for details. + legal_title: Legal + legal_html: "This site and many other related services are formally operated + by the \nOpenStreetMap Foundation + (OSMF) \non behalf of the community. Use of all OSMF operated services is + subject \nto our \nAcceptable + Use Policies and our Privacy + Policy\n
      \nPlease contact + the OSMF \nif you have licensing, copyright or other legal questions and + issues." + partners_title: Partners + copyright: + foreign: + title: About this translation + text: In the event of a conflict between this translated page and %{english_original_link}, + the English page shall take precedence + english_link: the English original + native: + title: About this page + text: You are viewing the English version of the copyright page. You can go + back to the %{native_link} of this page or you can stop reading about copyright + and %{mapping_link}. + native_link: British English version + mapping_link: start mapping + legal_babble: + title_html: Copyright and Licence + intro_1_html: |- + OpenStreetMap® is open data, licensed under the Open Data + Commons Open Database License (ODbL) by the OpenStreetMap Foundation (OSMF). + intro_2_html: You are free to copy, distribute, transmit and adapt our data, + as long as you credit OpenStreetMap and its contributors. If you alter or + build upon our data, you may distribute the result only under the same licence. + The full legal code + explains your rights and responsibilities. + intro_3_html: |- + The cartography in our map tiles, and our documentation, are + licenced under the Creative + Commons Attribution-ShareAlike 2.0 licence (CC BY-SA). + credit_title_html: How to credit OpenStreetMap + credit_1_html: |- + We require that you use the credit “© OpenStreetMap + contributors”. + credit_2_html: |- + You must also make it clear that the data is available under the Open + Database Licence, and if using our map tiles, that the cartography is + licenced as CC BY-SA. You may do this by linking to + this copyright page. + Alternatively, and as a requirement if you are distributing OSM in a + data form, you can name and link directly to the licence(s). In media + where links are not possible (e.g. printed works), we suggest you + direct your readers to openstreetmap.org (perhaps by expanding + 'OpenStreetMap' to this full address), to opendatacommons.org, and + if relevant, to creativecommons.org. + credit_3_html: |- + For a browsable electronic map, the credit should appear in the corner of the map. + For example: + attribution_example: + alt: Example of how to attribute OpenStreetMap on a webpage + title: Attribution example + more_title_html: Finding out more + more_1_html: |- + Read more about using our data, and how to credit us, at the OSMF Licence page and the community Legal + FAQ. + more_2_html: |- + Although OpenStreetMap is open data, we cannot provide a + free-of-charge map API for third-parties. + See our API Usage Policy, + Tile Usage Policy + and Nominatim Usage Policy. + contributors_title_html: Our contributors + contributors_intro_html: |- + Our contributors are thousands of individuals. We also include + openly-licenced data from national mapping agencies + and other sources, among them: + contributors_at_html: |- + Austria: Contains data from + Stadt Wien (under + CC BY), + Land Vorarlberg and + Land Tirol (under CC BY AT with amendments). + contributors_ca_html: |- + Canada: Contains data from + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), and StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: |- + Finland: Contains data from the + National Land Survey of Finland's Topographic Database + and other datasets, under the + NLSFI Licence. + contributors_fr_html: 'France: Contains data sourced from + Direction Générale des Impôts.' + contributors_nl_html: 'Netherlands: Contains © AND data, + 2007 (www.and.com)' + contributors_nz_html: 'New Zealand: Contains data sourced + from Land Information New Zealand. Crown Copyright reserved.' + contributors_si_html: |- + Slovenia: Contains data from the + Surveying and Mapping Authority and + Ministry of Agriculture, Forestry and Food + (public information of Slovenia). + contributors_za_html: 'South Africa: Contains data sourced + from Chief Directorate: National Geo-Spatial + Information, State copyright reserved.' + contributors_gb_html: 'United Kingdom: Contains Ordnance + Survey data © Crown copyright and database right 2010-12.' + contributors_footer_1_html: For further details of these, and other sources + that have been used to help improve OpenStreetMap, please see the Contributors + page on the OpenStreetMap Wiki. + contributors_footer_2_html: Inclusion of data in OpenStreetMap does not imply + that the original data provider endorses OpenStreetMap, provides any warranty, + or accepts any liability. + infringement_title_html: Copyright infringement + infringement_1_html: OSM contributors are reminded never to add data from + any copyrighted sources (e.g. Google Maps or printed maps) without explicit + permission from the copyright holders. + infringement_2_html: If you believe that copyrighted material has been inappropriately + added to the OpenStreetMap database or this site, please refer to our takedown + procedure or file directly at our on-line + filing page. + trademarks_title_html: Trademarks + trademarks_1_html: OpenStreetMap, the magnifying glass logo, and State of + the Map are registered trademarks of the OpenStreetMap Foundation. If you + have questions about your use of the marks, please send your questions to + the Licence + Working Group. index: js_1: You are either using a browser that does not support JavaScript, or you have disabled JavaScript. @@ -1451,6 +1301,109 @@ en-GB: id_not_configured: iD has not been configured no_iframe_support: Your browser doesn't support HTML iframes, which are necessary for this feature. + export: + title: Export + area_to_export: Area to Export + manually_select: Manually select a different area + format_to_export: Format to Export + osm_xml_data: OpenStreetMap XML Data + map_image: Map Image (shows standard layer) + embeddable_html: Embeddable HTML + licence: Licence + export_details: OpenStreetMap data is licenced under the Open + Data Commons Open Database Licence (ODbL). + too_large: + advice: 'If the above export fails, please consider using one of the sources + listed below:' + body: This area is too large to be exported as OpenStreetMap XML Data. Please + zoom in or select a smaller area, or use one of the sources listed below + for bulk data downloads. + planet: + title: Planet OSM + description: Regularly updated copies of the complete OpenStreetMap database + overpass: + title: Overpass API + description: Download this bounding box from a mirror of the OpenStreetMap + database + geofabrik: + title: Geofabrik Downloads + description: Regularly-updated extracts of continents, countries, and selected + cities + metro: + title: Metro Extracts + description: Extracts for major world cities and their surrounding areas + other: + title: Other Sources + description: Additional sources listed on the OpenStreetMap wiki + options: Options + format: Format + scale: Scale + max: max + image_size: Image Size + zoom: Zoom + add_marker: Add a marker to the map + latitude: 'Lat:' + longitude: 'Lon:' + output: Output + paste_html: Paste HTML to embed in website + export_button: Export + fixthemap: + title: Report a problem/Fix the map + how_to_help: + title: How to Help + join_the_community: + title: Join the community + explanation_html: If you have noticed a problem with our map data, for example + a road is missing or your address, the best way to proceed is to join + the OpenStreetMap community and add or repair the data yourself. + add_a_note: + instructions_html: Just click or the same icon + on the map display. This will add a marker to the map, which you can move + by dragging. Add your message, then click save, and other mappers will + investigate. + other_concerns: + title: Other concerns + explanation_html: "If you have concerns about how our data is being used or + about the contents please consult our\ncopyright page + for more legal information, or contact the appropriate \nOSMF + working group." + help: + title: Getting Help + introduction: OpenStreetMap has several resources for learning about the project, + asking and answering questions, and collaboratively discussing and documenting + mapping topics. + welcome: + url: /welcome + title: Welcome to OSM + description: Start with this quick guide covering the OpenStreetMap basics. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: Beginners' Guide + description: Community maintained guide for beginners. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Ask a question or look up answers on OSM's question-and-answer + site. + mailing_lists: + title: Mailing Lists + description: Ask a question or discuss interesting matters on a wide range + of topical or regional mailing lists. + forums: + title: Forums + description: Questions and discussions for those that prefer a bulletin board + style interface. + irc: + title: IRC + description: Interactive chat in many different languages and on many topics. + switch2osm: + title: switch2osm + description: Help for companies and organisations switching to OpenStreetMap + based maps and other services. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Browse the wiki for in-depth OSM documentation. sidebar: search_results: Search Results close: Close @@ -1551,6 +1504,54 @@ en-GB: image: Image alt: Alt text url: URL + welcome: + title: Welcome! + introduction_html: Welcome to OpenStreetMap, the free and editable map of the + world. Now that you're signed up, you're all set to get started mapping. Here's + a quick guide with the most important things you need to know. + whats_on_the_map: + title: What's on the Map + on_html: OpenStreetMap is a place for mapping things that are both real + and current - it includes millions of buildings, roads, and other details + about places. You can map whatever real-world features are interesting to + you. + off_html: What it doesn't include is opinionated data like ratings, + historical or hypothetical features, and data from copyrighted sources. + Unless you have special permission, don't copy from online or paper maps. + basic_terms: + title: Basic Terms For Mapping + paragraph_1_html: OpenStreetMap has some of its own lingo. Here are a few + key words that'll come in handy. + editor_html: An editor is a program or website you can use + to edit the map. + node_html: A node is a point on the map, like a single restaurant + or a tree. + way_html: A way is a line or area, like a road, stream, lake + or building. + tag_html: A tag is a bit of data about a node or way, like + a restaurant's name or a road's speed limit. + rules: + title: Rules! + paragraph_1_html: "OpenStreetMap has few formal rules but we expect all participants + to collaborate\nwith, and communicate with, the community. If you are considering\nany + activities other than editing by hand, please read and follow the guidelines + on \nImports + and \nAutomated + Edits." + questions: + title: Any questions? + paragraph_1_html: |- + OpenStreetMap has several resources for learning about the project, asking and answering questions, and collaboratively discussing and documenting mapping topics. + Get help here. + start_mapping: Start Mapping + add_a_note: + title: No Time To Edit? Add a Note! + paragraph_1_html: If you just want something small fixed and don't have the + time to sign up and learn how to edit, it's easy to add a note. + paragraph_2_html: 'Just go to the map and click + the note icon: . This will add a marker + to the map, which you can move by dragging. Add your message, then click + save, and other mappers will investigate.' trace: visibility: private: Private (only shared as anonymous, unordered points) @@ -1682,7 +1683,7 @@ en-GB: to the web interface to view the Contributor Terms. You do not need to agree, but you must view them. oauth: - oauthorize: + authorize: title: Authorise access to your account request_access: The application %{app_name} is requesting access to your account, %{user}. Please check whether you would like the application to have the following @@ -1696,11 +1697,11 @@ en-GB: allow_write_gpx: upload GPS traces. allow_write_notes: modify notes. grant_access: Grant Access - oauthorize_success: + authorize_success: title: Authorisation request allowed allowed: You have granted application %{app_name} access to your account. verification: The verification code is %{code}. - oauthorize_failure: + authorize_failure: title: Authorisation request failed denied: You have denied application %{app_name} access to your account. invalid: The authorisation token is not valid. @@ -2142,7 +2143,7 @@ en-GB: confirm: Confirm fail: Could not revoke role `%{role}' from user `%{name}'. Please check that the user and role are both valid. - user_block: + user_blocks: model: non_moderator_update: Must be a moderator to create or update a block. non_moderator_revoke: Must be a moderator to revoke a block. @@ -2203,20 +2204,6 @@ en-GB: period: one: 1 hour other: '%{count} hours' - partial: - show: Show - edit: Edit - revoke: Revoke! - confirm: Are you sure? - display_name: Blocked User - creator_name: Creator - reason: Reason for block - status: Status - revoker_name: Revoked by - not_revoked: (not revoked) - showing_page: Page %{page} - next: Next » - previous: « Previous helper: time_future: Ends in %{time}. until_login: Active until the user logs in. @@ -2246,8 +2233,22 @@ en-GB: back: View all blocks revoker: 'Revoker:' needs_view: The user needs to log in before this block will be cleared. - note: - description: + block: + not_revoked: (not revoked) + show: Show + edit: Edit + revoke: Revoke! + blocks: + display_name: Blocked User + creator_name: Creator + reason: Reason for block + status: Status + revoker_name: Revoked by + showing_page: Page %{page} + next: Next » + previous: « Previous + notes: + comment: opened_at_html: Created %{when} ago opened_at_by_html: Created %{when} ago by %{user} commented_at_html: Updated %{when} ago @@ -2445,7 +2446,7 @@ en-GB: show_address: Show address query_features: Query features centre_map: Centre map here - redaction: + redactions: edit: description: Description heading: Edit redaction diff --git a/config/locales/en.yml b/config/locales/en.yml index 2fdee0b2d..fd0317df1 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -323,47 +323,6 @@ en: ago: "%{ago} ago" newer_comments: "Newer Comments" older_comments: "Older Comments" - export: - title: "Export" - start: - area_to_export: "Area to Export" - manually_select: "Manually select a different area" - format_to_export: "Format to Export" - osm_xml_data: "OpenStreetMap XML Data" - map_image: "Map Image (shows standard layer)" - embeddable_html: "Embeddable HTML" - licence: "Licence" - export_details: 'OpenStreetMap data is licensed under the Open Data Commons Open Database License (ODbL).' - too_large: - advice: "If the above export fails, please consider using one of the sources listed below:" - body: "This area is too large to be exported as OpenStreetMap XML Data. Please zoom in or select a smaller area, or use one of the sources listed below for bulk data downloads." - planet: - title: "Planet OSM" - description: "Regularly-updated copies of the complete OpenStreetMap database" - overpass: - title: "Overpass API" - description: "Download this bounding box from a mirror of the OpenStreetMap database" - geofabrik: - title: "Geofabrik Downloads" - description: "Regularly-updated extracts of continents, countries, and selected cities" - metro: - title: "Metro Extracts" - description: "Extracts for major world cities and their surrounding areas" - other: - title: "Other Sources" - description: "Additional sources listed on the OpenStreetMap wiki" - options: "Options" - format: "Format" - scale: "Scale" - max: "max" - image_size: "Image Size" - zoom: "Zoom" - add_marker: "Add a marker to the map" - latitude: "Lat:" - longitude: "Lon:" - output: "Output" - paste_html: "Paste HTML to embed in website" - export_button: "Export" geocoder: search: title: @@ -1009,285 +968,6 @@ en: text: Make a Donation learn_more: "Learn More" more: More - license_page: - foreign: - title: About this translation - text: In the event of a conflict between this translated page and %{english_original_link}, the English page shall take precedence - english_link: the English original - native: - title: About this page - text: You are viewing the English version of the copyright page. You can go back to the %{native_link} of this page or you can stop reading about copyright and %{mapping_link}. - native_link: THIS_LANGUAGE_NAME_HERE version - mapping_link: start mapping - legal_babble: - title_html: Copyright and License - intro_1_html: | - OpenStreetMap® is open data, licensed under the Open Data - Commons Open Database License (ODbL) by the OpenStreetMap Foundation (OSMF). - intro_2_html: | - You are free to copy, distribute, transmit and adapt our data, - as long as you credit OpenStreetMap and its - contributors. If you alter or build upon our data, you - may distribute the result only under the same licence. The - full legal - code explains your rights and responsibilities. - intro_3_html: | - The cartography in our map tiles, and our documentation, are - licensed under the Creative - Commons Attribution-ShareAlike 2.0 license (CC BY-SA). - credit_title_html: How to credit OpenStreetMap - credit_1_html: | - We require that you use the credit “© OpenStreetMap - contributors”. - credit_2_html: | - You must also make it clear that the data is available under the Open - Database License, and if using our map tiles, that the cartography is - licensed as CC BY-SA. You may do this by linking to - this copyright page. - Alternatively, and as a requirement if you are distributing OSM in a - data form, you can name and link directly to the license(s). In media - where links are not possible (e.g. printed works), we suggest you - direct your readers to openstreetmap.org (perhaps by expanding - 'OpenStreetMap' to this full address), to opendatacommons.org, and - if relevant, to creativecommons.org. - credit_3_html: | - For a browsable electronic map, the credit should appear in the corner of the map. - For example: - attribution_example: - alt: Example of how to attribute OpenStreetMap on a webpage - title: Attribution example - more_title_html: Finding out more - more_1_html: | - Read more about using our data, and how to credit us, at the OSMF Licence page. - more_2_html: | - Although OpenStreetMap is open data, we cannot provide a - free-of-charge map API for third-parties. - See our API Usage Policy, - Tile Usage Policy - and Nominatim Usage Policy. - contributors_title_html: Our contributors - contributors_intro_html: | - Our contributors are thousands of individuals. We also include - openly-licensed data from national mapping agencies - and other sources, among them: - contributors_at_html: | - Austria: Contains data from - Stadt Wien (under - CC BY), - Land Vorarlberg and - Land Tirol (under CC BY AT with amendments). - contributors_ca_html: | - Canada: Contains data from - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), and StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: | - Finland: Contains data from the - National Land Survey of Finland's Topographic Database - and other datasets, under the - NLSFI License. - contributors_fr_html: | - France: Contains data sourced from - Direction Générale des Impôts. - contributors_nl_html: | - Netherlands: Contains © AND data, 2007 - (www.and.com) - contributors_nz_html: | - New Zealand: Contains data sourced from - Land Information New Zealand. Crown Copyright reserved. - contributors_si_html: | - Slovenia: Contains data from the - Surveying and Mapping Authority and - Ministry of Agriculture, Forestry and Food - (public information of Slovenia). - contributors_za_html: | - South Africa: Contains data sourced from - Chief Directorate: - National Geo-Spatial Information, State copyright reserved. - contributors_gb_html: | - United Kingdom: Contains Ordnance - Survey data © Crown copyright and database right - 2010-12. - contributors_footer_1_html: | - For further details of these, and other sources that have been used - to help improve OpenStreetMap, please see the Contributors - page on the OpenStreetMap Wiki. - contributors_footer_2_html: | - Inclusion of data in OpenStreetMap does not imply that the original - data provider endorses OpenStreetMap, provides any warranty, or - accepts any liability. - infringement_title_html: Copyright infringement - infringement_1_html: | - OSM contributors are reminded never to add data from any - copyrighted sources (e.g. Google Maps or printed maps) without - explicit permission from the copyright holders. - infringement_2_html: | - If you believe that copyrighted material has been inappropriately - added to the OpenStreetMap database or this site, please refer - to our takedown - procedure or file directly at our - on-line filing page. - trademarks_title_html: Trademarks - trademarks_1_html: | - OpenStreetMap, the magnifying glass logo and State of the Map are registered trademarks of the OpenStreetMap Foundation. If you have questions about your use of the marks, please see our Trademark Policy. - welcome_page: - title: Welcome! - introduction_html: | - Welcome to OpenStreetMap, the free and editable map of the world. Now that you're signed - up, you're all set to get started mapping. Here's a quick guide with the most important - things you need to know. - whats_on_the_map: - title: What's on the Map - on_html: | - OpenStreetMap is a place for mapping things that are both real and current - - it includes millions of buildings, roads, and other details about places. You can map - whatever real-world features are interesting to you. - off_html: | - What it doesn't include is opinionated data like ratings, historical or - hypothetical features, and data from copyrighted sources. Unless you have special - permission, don't copy from online or paper maps. - basic_terms: - title: Basic Terms For Mapping - paragraph_1_html: | - OpenStreetMap has some of its own lingo. Here are a few key words that'll come in handy. - editor_html: | - An editor is a program or website you can use to edit the map. - node_html: | - A node is a point on the map, like a single restaurant or a tree. - way_html: | - A way is a line or area, like a road, stream, lake or building. - tag_html: | - A tag is a bit of data about a node or way, like a - restaurant's name or a road's speed limit. - rules: - title: Rules! - paragraph_1_html: | - OpenStreetMap has few formal rules but we expect all participants to collaborate - with, and communicate with, the community. If you are considering - any activities other than editing by hand, please read and follow the guidelines on - Imports and - Automated Edits. - questions: - title: Any questions? - paragraph_1_html: | - OpenStreetMap has several resources for learning about the project, asking and answering - questions, and collaboratively discussing and documenting mapping topics. - Get help here. - start_mapping: Start Mapping - add_a_note: - title: No Time To Edit? Add a Note! - paragraph_1_html: | - If you just want something small fixed and don't have the time to sign up and learn how to edit, it's - easy to add a note. - paragraph_2_html: | - Just go to the map and click the note icon: - . This will add a marker to the map, which you can move - by dragging. Add your message, then click save, and other mappers will investigate. - fixthemap: - title: Report a problem / Fix the map - how_to_help: - title: How to Help - join_the_community: - title: Join the community - explanation_html: | - If you have noticed a problem with our map data, for example a road is missing or your address, the best way to - proceed is to join the OpenStreetMap community and add or repair the data yourself. - add_a_note: - instructions_html: | - Just click or the same icon on the map display. - This will add a marker to the map, which you can move - by dragging. Add your message, then click save, and other mappers will investigate. - other_concerns: - title: Other concerns - explanation_html: | - If you have concerns about how our data is being used or about the contents please consult our - copyright page for more legal information, or contact the appropriate - OSMF working group. - help_page: - title: Getting Help - introduction: | - OpenStreetMap has several resources for learning about the project, asking and answering questions, - and collaboratively discussing and documenting mapping topics. - welcome: - url: /welcome - title: Welcome to OSM - description: Start with this quick guide covering the OpenStreetMap basics. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: Beginners' Guide - description: Community maintained guide for beginners. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Ask a question or look up answers on OSM's question-and-answer site. - mailing_lists: - url: https://lists.openstreetmap.org/ - title: Mailing Lists - description: Ask a question or discuss interesting matters on a wide range of topical or regional mailing lists. - forums: - url: https://forum.openstreetmap.org/ - title: Forums - description: Questions and discussions for those that prefer a bulletin board style interface. - irc: - url: https://irc.openstreetmap.org/ - title: IRC - description: Interactive chat in many different languages and on many topics. - switch2osm: - url: https://switch2osm.org/ - title: switch2osm - description: Help for companies and organisations switching to OpenStreetMap based maps and other services. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Browse the wiki for in-depth OSM documentation. - about_page: - next: Next - copyright_html: ©OpenStreetMap
      contributors - used_by: "%{name} powers map data on thousands of web sites, mobile apps, and hardware devices" - lede_text: | - OpenStreetMap is built by a community of mappers that contribute and maintain data - about roads, trails, cafés, railway stations, and much more, all over the world. - local_knowledge_title: Local Knowledge - local_knowledge_html: | - OpenStreetMap emphasizes local knowledge. Contributors use - aerial imagery, GPS devices, and low-tech field maps to verify that OSM - is accurate and up to date. - community_driven_title: Community Driven - community_driven_html: | - OpenStreetMap's community is diverse, passionate, and growing every day. - Our contributors include enthusiast mappers, GIS professionals, engineers - running the OSM servers, humanitarians mapping disaster-affected areas, - and many more. - To learn more about the community, see the - OpenStreetMap Blog, - user diaries, - community blogs, and - the OSM Foundation website. - open_data_title: Open Data - open_data_html: | - OpenStreetMap is open data: you are free to use it for any purpose - as long as you credit OpenStreetMap and its contributors. If you alter or - build upon the data in certain ways, you may distribute the result only - under the same licence. See the Copyright and - License page for details. - legal_title: Legal - legal_html: | - This site and many other related services are formally operated by the - OpenStreetMap Foundation (OSMF) - on behalf of the community. Use of all OSMF operated services is subject - to our - Acceptable Use Policies and our Privacy Policy -
      - Please contact the OSMF - if you have licensing, copyright or other legal questions. -
      - OpenStreetMap, the magnifying glass logo and State of the Map are registered trademarks of the OSMF. - partners_title: Partners notifier: diary_comment_notification: subject: "[OpenStreetMap] %{user} commented on a diary entry" @@ -1446,6 +1126,175 @@ en: delete: deleted: "Message deleted" site: + about: + next: Next + copyright_html: ©OpenStreetMap
      contributors + used_by: "%{name} powers map data on thousands of web sites, mobile apps, and hardware devices" + lede_text: | + OpenStreetMap is built by a community of mappers that contribute and maintain data + about roads, trails, cafés, railway stations, and much more, all over the world. + local_knowledge_title: Local Knowledge + local_knowledge_html: | + OpenStreetMap emphasizes local knowledge. Contributors use + aerial imagery, GPS devices, and low-tech field maps to verify that OSM + is accurate and up to date. + community_driven_title: Community Driven + community_driven_html: | + OpenStreetMap's community is diverse, passionate, and growing every day. + Our contributors include enthusiast mappers, GIS professionals, engineers + running the OSM servers, humanitarians mapping disaster-affected areas, + and many more. + To learn more about the community, see the + OpenStreetMap Blog, + user diaries, + community blogs, and + the OSM Foundation website. + open_data_title: Open Data + open_data_html: | + OpenStreetMap is open data: you are free to use it for any purpose + as long as you credit OpenStreetMap and its contributors. If you alter or + build upon the data in certain ways, you may distribute the result only + under the same licence. See the Copyright and + License page for details. + legal_title: Legal + legal_html: | + This site and many other related services are formally operated by the + OpenStreetMap Foundation (OSMF) + on behalf of the community. Use of all OSMF operated services is subject + to our + Acceptable Use Policies and our Privacy Policy +
      + Please contact the OSMF + if you have licensing, copyright or other legal questions. +
      + OpenStreetMap, the magnifying glass logo and State of the Map are registered trademarks of the OSMF. + partners_title: Partners + copyright: + foreign: + title: About this translation + text: In the event of a conflict between this translated page and %{english_original_link}, the English page shall take precedence + english_link: the English original + native: + title: About this page + text: You are viewing the English version of the copyright page. You can go back to the %{native_link} of this page or you can stop reading about copyright and %{mapping_link}. + native_link: THIS_LANGUAGE_NAME_HERE version + mapping_link: start mapping + legal_babble: + title_html: Copyright and License + intro_1_html: | + OpenStreetMap® is open data, licensed under the Open Data + Commons Open Database License (ODbL) by the OpenStreetMap Foundation (OSMF). + intro_2_html: | + You are free to copy, distribute, transmit and adapt our data, + as long as you credit OpenStreetMap and its + contributors. If you alter or build upon our data, you + may distribute the result only under the same licence. The + full legal + code explains your rights and responsibilities. + intro_3_html: | + The cartography in our map tiles, and our documentation, are + licensed under the Creative + Commons Attribution-ShareAlike 2.0 license (CC BY-SA). + credit_title_html: How to credit OpenStreetMap + credit_1_html: | + We require that you use the credit “© OpenStreetMap + contributors”. + credit_2_html: | + You must also make it clear that the data is available under the Open + Database License, and if using our map tiles, that the cartography is + licensed as CC BY-SA. You may do this by linking to + this copyright page. + Alternatively, and as a requirement if you are distributing OSM in a + data form, you can name and link directly to the license(s). In media + where links are not possible (e.g. printed works), we suggest you + direct your readers to openstreetmap.org (perhaps by expanding + 'OpenStreetMap' to this full address), to opendatacommons.org, and + if relevant, to creativecommons.org. + credit_3_html: | + For a browsable electronic map, the credit should appear in the corner of the map. + For example: + attribution_example: + alt: Example of how to attribute OpenStreetMap on a webpage + title: Attribution example + more_title_html: Finding out more + more_1_html: | + Read more about using our data, and how to credit us, at the OSMF Licence page. + more_2_html: | + Although OpenStreetMap is open data, we cannot provide a + free-of-charge map API for third-parties. + See our API Usage Policy, + Tile Usage Policy + and Nominatim Usage Policy. + contributors_title_html: Our contributors + contributors_intro_html: | + Our contributors are thousands of individuals. We also include + openly-licensed data from national mapping agencies + and other sources, among them: + contributors_at_html: | + Austria: Contains data from + Stadt Wien (under + CC BY), + Land Vorarlberg and + Land Tirol (under CC BY AT with amendments). + contributors_ca_html: | + Canada: Contains data from + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), and StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: | + Finland: Contains data from the + National Land Survey of Finland's Topographic Database + and other datasets, under the + NLSFI License. + contributors_fr_html: | + France: Contains data sourced from + Direction Générale des Impôts. + contributors_nl_html: | + Netherlands: Contains © AND data, 2007 + (www.and.com) + contributors_nz_html: | + New Zealand: Contains data sourced from + Land Information New Zealand. Crown Copyright reserved. + contributors_si_html: | + Slovenia: Contains data from the + Surveying and Mapping Authority and + Ministry of Agriculture, Forestry and Food + (public information of Slovenia). + contributors_za_html: | + South Africa: Contains data sourced from + Chief Directorate: + National Geo-Spatial Information, State copyright reserved. + contributors_gb_html: | + United Kingdom: Contains Ordnance + Survey data © Crown copyright and database right + 2010-12. + contributors_footer_1_html: | + For further details of these, and other sources that have been used + to help improve OpenStreetMap, please see the Contributors + page on the OpenStreetMap Wiki. + contributors_footer_2_html: | + Inclusion of data in OpenStreetMap does not imply that the original + data provider endorses OpenStreetMap, provides any warranty, or + accepts any liability. + infringement_title_html: Copyright infringement + infringement_1_html: | + OSM contributors are reminded never to add data from any + copyrighted sources (e.g. Google Maps or printed maps) without + explicit permission from the copyright holders. + infringement_2_html: | + If you believe that copyrighted material has been inappropriately + added to the OpenStreetMap database or this site, please refer + to our takedown + procedure or file directly at our + on-line filing page. + trademarks_title_html: Trademarks + trademarks_1_html: | + OpenStreetMap, the magnifying glass logo and State of the Map are registered trademarks of the OpenStreetMap Foundation. If you have questions about your use of the marks, please see our Trademark Policy. index: js_1: "You are either using a browser that does not support JavaScript, or you have disabled JavaScript." js_2: "OpenStreetMap uses JavaScript for its slippy map." @@ -1470,6 +1319,103 @@ en: potlatch2_unsaved_changes: "You have unsaved changes. (To save in Potlatch 2, you should click save.)" id_not_configured: "iD has not been configured" no_iframe_support: "Your browser doesn't support HTML iframes, which are necessary for this feature." + export: + title: "Export" + area_to_export: "Area to Export" + manually_select: "Manually select a different area" + format_to_export: "Format to Export" + osm_xml_data: "OpenStreetMap XML Data" + map_image: "Map Image (shows standard layer)" + embeddable_html: "Embeddable HTML" + licence: "Licence" + export_details: 'OpenStreetMap data is licensed under the Open Data Commons Open Database License (ODbL).' + too_large: + advice: "If the above export fails, please consider using one of the sources listed below:" + body: "This area is too large to be exported as OpenStreetMap XML Data. Please zoom in or select a smaller area, or use one of the sources listed below for bulk data downloads." + planet: + title: "Planet OSM" + description: "Regularly-updated copies of the complete OpenStreetMap database" + overpass: + title: "Overpass API" + description: "Download this bounding box from a mirror of the OpenStreetMap database" + geofabrik: + title: "Geofabrik Downloads" + description: "Regularly-updated extracts of continents, countries, and selected cities" + metro: + title: "Metro Extracts" + description: "Extracts for major world cities and their surrounding areas" + other: + title: "Other Sources" + description: "Additional sources listed on the OpenStreetMap wiki" + options: "Options" + format: "Format" + scale: "Scale" + max: "max" + image_size: "Image Size" + zoom: "Zoom" + add_marker: "Add a marker to the map" + latitude: "Lat:" + longitude: "Lon:" + output: "Output" + paste_html: "Paste HTML to embed in website" + export_button: "Export" + fixthemap: + title: Report a problem / Fix the map + how_to_help: + title: How to Help + join_the_community: + title: Join the community + explanation_html: | + If you have noticed a problem with our map data, for example a road is missing or your address, the best way to + proceed is to join the OpenStreetMap community and add or repair the data yourself. + add_a_note: + instructions_html: | + Just click or the same icon on the map display. + This will add a marker to the map, which you can move + by dragging. Add your message, then click save, and other mappers will investigate. + other_concerns: + title: Other concerns + explanation_html: | + If you have concerns about how our data is being used or about the contents please consult our + copyright page for more legal information, or contact the appropriate + OSMF working group. + help: + title: Getting Help + introduction: | + OpenStreetMap has several resources for learning about the project, asking and answering questions, + and collaboratively discussing and documenting mapping topics. + welcome: + url: /welcome + title: Welcome to OSM + description: Start with this quick guide covering the OpenStreetMap basics. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: Beginners' Guide + description: Community maintained guide for beginners. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Ask a question or look up answers on OSM's question-and-answer site. + mailing_lists: + url: https://lists.openstreetmap.org/ + title: Mailing Lists + description: Ask a question or discuss interesting matters on a wide range of topical or regional mailing lists. + forums: + url: https://forum.openstreetmap.org/ + title: Forums + description: Questions and discussions for those that prefer a bulletin board style interface. + irc: + url: https://irc.openstreetmap.org/ + title: IRC + description: Interactive chat in many different languages and on many topics. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Help for companies and organisations switching to OpenStreetMap based maps and other services. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Browse the wiki for in-depth OSM documentation. sidebar: search_results: Search Results close: Close @@ -1570,6 +1516,59 @@ en: image: Image alt: Alt text url: URL + welcome: + title: Welcome! + introduction_html: | + Welcome to OpenStreetMap, the free and editable map of the world. Now that you're signed + up, you're all set to get started mapping. Here's a quick guide with the most important + things you need to know. + whats_on_the_map: + title: What's on the Map + on_html: | + OpenStreetMap is a place for mapping things that are both real and current - + it includes millions of buildings, roads, and other details about places. You can map + whatever real-world features are interesting to you. + off_html: | + What it doesn't include is opinionated data like ratings, historical or + hypothetical features, and data from copyrighted sources. Unless you have special + permission, don't copy from online or paper maps. + basic_terms: + title: Basic Terms For Mapping + paragraph_1_html: | + OpenStreetMap has some of its own lingo. Here are a few key words that'll come in handy. + editor_html: | + An editor is a program or website you can use to edit the map. + node_html: | + A node is a point on the map, like a single restaurant or a tree. + way_html: | + A way is a line or area, like a road, stream, lake or building. + tag_html: | + A tag is a bit of data about a node or way, like a + restaurant's name or a road's speed limit. + rules: + title: Rules! + paragraph_1_html: | + OpenStreetMap has few formal rules but we expect all participants to collaborate + with, and communicate with, the community. If you are considering + any activities other than editing by hand, please read and follow the guidelines on + Imports and + Automated Edits. + questions: + title: Any questions? + paragraph_1_html: | + OpenStreetMap has several resources for learning about the project, asking and answering + questions, and collaboratively discussing and documenting mapping topics. + Get help here. + start_mapping: Start Mapping + add_a_note: + title: No Time To Edit? Add a Note! + paragraph_1_html: | + If you just want something small fixed and don't have the time to sign up and learn how to edit, it's + easy to add a note. + paragraph_2_html: | + Just go to the map and click the note icon: + . This will add a marker to the map, which you can move + by dragging. Add your message, then click save, and other mappers will investigate. trace: visibility: private: "Private (only shared as anonymous, unordered points)" @@ -1636,6 +1635,7 @@ en: delete_track: "Delete this trace" trace_not_found: "Trace not found!" visibility: "Visibility:" + confirm_delete: "Delete this trace?" trace_paging_nav: showing_page: "Page %{page}" older: "Older Traces" @@ -1689,7 +1689,7 @@ en: blocked: "Your access to the API has been blocked. Please log-in to the web interface to find out more." need_to_see_terms: "Your access to the API is temporarily suspended. Please log-in to the web interface to view the Contributor Terms. You do not need to agree, but you must view them." oauth: - oauthorize: + authorize: title: "Authorize access to your account" request_access: "The application %{app_name} is requesting access to your account, %{user}. Please check whether you would like the application to have the following capabilities. You may choose as many or as few as you like." allow_to: "Allow the client application to:" @@ -1701,11 +1701,11 @@ en: allow_write_gpx: "upload GPS traces." allow_write_notes: "modify notes." grant_access: "Grant Access" - oauthorize_success: + authorize_success: title: "Authorization request allowed" allowed: "You have granted application %{app_name} access to your account." verification: "The verification code is %{code}." - oauthorize_failure: + authorize_failure: title: "Authorization request failed" denied: "You have denied application %{app_name} access to your account." invalid: "The authorization token is not valid." @@ -2107,7 +2107,7 @@ en: are_you_sure: "Are you sure you want to revoke the role `%{role}' from the user `%{name}'?" confirm: "Confirm" fail: "Could not revoke role `%{role}' from user `%{name}'. Please check that the user and role are both valid." - user_block: + user_blocks: model: non_moderator_update: "Must be a moderator to create or update a block." non_moderator_revoke: "Must be a moderator to revoke a block." @@ -2158,20 +2158,6 @@ en: period: one: "1 hour" other: "%{count} hours" - partial: - show: "Show" - edit: "Edit" - revoke: "Revoke!" - confirm: "Are you sure?" - display_name: "Blocked User" - creator_name: "Creator" - reason: "Reason for block" - status: "Status" - revoker_name: "Revoked by" - not_revoked: "(not revoked)" - showing_page: "Page %{page}" - next: "Next »" - previous: "« Previous" helper: time_future: "Ends in %{time}." until_login: "Active until the user logs in." @@ -2201,8 +2187,22 @@ en: back: "View all blocks" revoker: "Revoker:" needs_view: "The user needs to log in before this block will be cleared." - note: - description: + block: + not_revoked: "(not revoked)" + show: "Show" + edit: "Edit" + revoke: "Revoke!" + blocks: + display_name: "Blocked User" + creator_name: "Creator" + reason: "Reason for block" + status: "Status" + revoker_name: "Revoked by" + showing_page: "Page %{page}" + next: "Next »" + previous: "« Previous" + notes: + comment: opened_at_html: "Created %{when} ago" opened_at_by_html: "Created %{when} ago by %{user}" commented_at_html: "Updated %{when} ago" @@ -2399,7 +2399,7 @@ en: show_address: Show address query_features: Query features centre_map: Centre map here - redaction: + redactions: edit: description: "Description" heading: "Edit redaction" diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 338406057..5fbffcbeb 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -248,7 +248,7 @@ eo: list: title: Ŝanĝaroj title_user: Ŝanĝaroj de %{user} - title_friend: Ŝanĝaroj de viaj amikoj + title_friend: Ŝanĝaroj de miaj amikoj title_nearby: Ŝanĝaroj de proksimaj uzantoj empty: Neniaj ŝanĝaroj trovitaj. empty_area: Neniaj ŝanĝaroj en ĉi tiu areo. @@ -277,7 +277,7 @@ eo: user_title: Taglibro de %{user} in_language_title: Taglibraj afiŝoj en %{language} new: Nova taglibra afiŝo - new_title: Kreu novan afiŝon en vian uzant-taglibro + new_title: Krei novan afiŝon en mia uzant-taglibro no_entries: Neniuj taglibraj afiŝoj recent_entries: Lastaj taglibraj afiŝoj older_entries: Pli malnovaj afiŝoj @@ -342,52 +342,6 @@ eo: ago: antaÅ­ %{ago} newer_comments: Novaj komentoj older_comments: Malnovaj komentoj - export: - title: Elporti - start: - area_to_export: Elportonta areo - manually_select: Permane elektu alian areon. - format_to_export: Elport-formo - osm_xml_data: XML datumoj de OpenStreetMap - map_image: Bildo de mapo (norma tavolo) - embeddable_html: Enkorpigebla HTML - licence: Permesilo - export_details: OpenStreetMap-datumoj estas disponeblaj laÅ­ la permesilo Open Data Commons Open - Database License (ODbL). - too_large: - advice: 'Se la elportado malsukcesis, bonvolu uzi unu el jenaj fontoj:' - body: La elektita areo estas tro granda por esti elportita kiel XML-datumojn - de OpenStreetMap. Bonvolu pligrandigi aÅ­ elekti malpli grandan areon, aÅ­ - uzi unu el sekvaj fontoj por amasa datum-elportado. - planet: - title: Planedo OSM - description: Ofte-ĝisdatigataj kopioj de plena OpenStreetMap datumbazo - overpass: - title: Overpass API - description: Elŝutas ĉi tiun areon de spegulkopio de OpenStreetMap datumbazo - geofabrik: - title: Elŝuti el Geofabrik - description: Ofte-ĝisdatigataj eltiraĵoj de kontinentoj, landoj, kaj elektitaj - urboj - metro: - title: Metro-eltiraĵoj - description: Eltiraĵoj de ĉefaj mondaj urboj kaj iliaj ĉirkaÅ­aĵoj - other: - title: Aliaj fontoj - description: Aliaj fontoj enlistigitaj ĉe OpenStreetMap-vikio - options: Elektebloj - format: Formo - scale: Skalo - max: maks - image_size: Bildamplekso - zoom: Pligrandigi - add_marker: Aldoni markon al la mapo - latitude: 'Lat:' - longitude: 'Lon:' - output: Eliro - paste_html: Engluu HTML-kodon al via retpaĝo - export_button: Elporti geocoder: search: title: @@ -1034,242 +988,6 @@ eo: text: Donaci learn_more: Lerni pli more: Pli - license_page: - foreign: - title: Pri ĉi tiu traduko - text: Se okazus konflikto inter ĉi tiu tradukita paĝo kaj %{english_original_link}, - la angla paĝo estas preferata. - english_link: la originalo en la angla - native: - title: Pri ĉi tiu paĝo - text: Vi legas la anglan version de paĝo pri kopirajto. Vi povas reveni al la - %{native_link} de ĉi tiu paĝo aÅ­ vi povas ĉesi legi pri kopirajto kaj %{mapping_link}. - native_link: Esperanta versio - mapping_link: ekigi mapigadon - legal_babble: - title_html: Kopirajto kaj permesilo - intro_1_html: |- - OpenStreetMap® estas projekto de malfermaj datumoj eldonita laÅ­ la permesilo Open Data - Commons Open Database License (ODbL) de la Fondaĵo OpenStreetMap (OSMF). - intro_2_html: Vi rajtas kopii, disdoni, transdoni kaj modifi niajn datumojn, - nur se vi atribuos aÅ­torecon al OpenStreetMap kaj ĝiaj kontribuintoj. Se vi - modifos aÅ­ uzos niajn datumojn, vi povos distribui la verkon laÅ­ la sama permesilo. - La plena interkonsento - de uzado klarigas viajn rajtojn kaj devojn. - intro_3_html: La kartografio de niaj map-kaheloj kaj nia dokumentaro estas disponeblaj - laÅ­ la permesilo Krea - Komunaĵo Atribuite-Samkondiĉe 2.0 (CC BY-SA). - credit_title_html: Kiel atribui aÅ­torecon - credit_1_html: 'Ni postulas, ke vi markos: “© Kontribuintoj de OpenStreetMap”.' - credit_2_html: Vi ankaÅ­ devas klarigi, ke datumoj estas disponeblaj laÅ­ la permesilo - Open Database License, kaj kartografio de map-kaheloj laÅ­ la permesilo CC - BY-SA. Vi povas indiki tion per fari ligilon al tiu - ĉi paĝo pri permesilo. Alimaniere, se vi distribuas OSM en datuma formo, - vi povas mencii nomo(j)n kaj ligilo(j)n al la permesilo(j). Se ne estas eble - meti ligilojn (ekz. en paperaj mapoj), ni sugestas direkti viajn legantojn - al openstreetmap.org (eble meti plenan retadreson), al opendatacommons.org - kaj (se necesas) al creativecommons.org. - credit_3_html: |- - En esploreblaj elektronikaj mapoj, la aÅ­torecon povas esti montrata ĉe la angulo de mapo. - Ekzemplo: - attribution_example: - alt: Ekzemplo kiel atribui OpenStreetMap sur retpaĝo - title: Ekzemplo de aÅ­torec-atribuado - more_title_html: Sciiĝi pli - more_1_html: |- - Sciigu pli pri uzado de niaj datumoj kaj kiel atribui aÅ­torecon ĉe la retpaĝo pri permesilo OSMF. - more_2_html: Kvankam la datumoj de OpenStreetMap estas liberaj, ni ne povas - liveri senpagan API-on por eksteraj programistoj. Legu nian politikon - pri uzado de API, politikon - pri uzado de kaheloj kaj poltikon - pri uzado de Nominatim. - contributors_title_html: Kunlaborantoj - contributors_intro_html: 'Niaj kunlaborantoj estas miloj da homoj. Ni ankaÅ­ - inkludas datumoj laÅ­ malferma permesilo el landaj kartografiaj organizaĵoj - kaj el aliaj fontoj, inter ili:' - contributors_at_html: |- - AÅ­strujo: enhavas datumojn el Stadt Wien (laÅ­ CC BY), - Land Vorarlberg kaj - Land Tirol (laÅ­ CC BY AT kun postaj ŝanĝoj). - contributors_ca_html: |- - Kanado: enhavas datumojn el - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), kaj StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: |- - Suomujo: enhavas datumojn el - National Land Survey of Finland's Topographic Database kaj aliaj fontoj, laÅ­ la permesilo NLSFI. - contributors_fr_html: 'Francujo: enhavas datumojn ricevitajn - el ''Direction Générale des Impôts''.' - contributors_nl_html: |- - Nederlando: enhavas datumojn el © AND, 2007 - (www.and.com). - contributors_nz_html: 'Nov-Zelando: enhavas datumojn ricevitajn - el ''Land Information New Zealand''. Crown Copyright reserved.' - contributors_si_html: |- - Slovenujo: enhavas datumojn el Ofico de Termezurado kaj Kartografio kaj - Ministerio pri Terkulturo, Arbarkulturo kaj Proviantado - (publikaj informoj de Slovenujo). - contributors_za_html: |- - Sud-Afriko: enhavas datumojn ricevitajn el Chief Directorate: - National Geo-Spatial Information, landaj kopirajtoj rezervitaj. - contributors_gb_html: |- - Unuiĝinta Reĝlando: enhavas datumojn el 'Ordnance - Survey' © Crown copyright and database right - 2010-12. - contributors_footer_1_html: |- - Por pli da detaloj pri tiuj ĉi kaj aliaj fontoj uzitaj por plibonigi OpenStreetMap, bonvolu viziti la paĝon pri kontribuintoj en la OpenStreetMap-vikio. - contributors_footer_2_html: Inkludo de datumoj en OpenStreetMap ne indikas, - ke la provizanto de datumoj apogas OpenStreetMap, garantias por iu aÅ­ respondumas - por iu. - infringement_title_html: Rompo de kopirajtoj - infringement_1_html: OSM-kunlaborantoj memoru, por ke neniam aldonu datumojn - el iuj ajn fontoj protektataj de kopirajto (ekz. Google Maps aÅ­ paperaj mapoj) - sen klara permeso de posedanto de kopirajtoj. - infringement_2_html: Se ve pensas, ke datumoj protektataj per kopirajto estas - misaldonitaj al OpenStreetMap-datumbazo aÅ­ al tiu ĉi retejo, bonvolu legi - pri proceduro - de forigado de datumoj aÅ­ plenigi la enretan - formularon. - trademarks_title_html: Registritaj markoj - trademarks_1_html: OpenStreetMap, la piktogramo de grandiga lenso kaj “State - of the Map” estas registritaj markoj de la Fondaĵo OpenStreetMap. Se vi havas - iujn demandojn pri uzado de niaj markoj, bonvolu sciigi kun nia politiko - pri varmarkoj. - welcome_page: - title: Bonvenon! - introduction_html: Bonvenon al OpenStreetMap, la libera kaj redaktebla mapo de - la mondo. Nun kiam vi registriĝis, vi povas ekigi mapigadon. Jen estas mallonga - manlibreto kun la plej gravaj aĵoj kiuj vi povas scii. - whats_on_the_map: - title: Kio estas sur la mapo - on_html: OpenStreetMap estas loko por mapigi objektojn, kiuj estas kaj realaj - kaj aktualaj - tiu estas milionoj da konstruaĵoj, vojoj kaj aliaj detalaĵoj - pri lokoj. Vi povas mapigi ĉiujn elementojn de reala mondo kiuj interesas - vin. - off_html: Ni ne povas inkludi personajn taksojn, eksajn aÅ­ malcertajn - objektojn, kaj datumoj de kopirajtataj fontoj. Escepte se vi estas permesita, - ne kopiu datumoj el aliaj interretaj aÅ­ paperaj mapoj. - basic_terms: - title: Fundamentaj terminoj pri mapigado - paragraph_1_html: OpenStreetMap havas sian propran ĵargonon. Jen estas kelkaj - utilaj vorotoj. - editor_html: Redaktilo estas programo aÅ­ retpaĝo, kiun vi povas - uzi por modifi mapon. - node_html: Nodo (ang. 'node') estas punkto sur la mapo, kiel - restoracio aÅ­ arbo. - way_html: Linio (ang. 'way') estas linio aÅ­ areo, kiel vojo, - rivereto, lago aÅ­ konstruaĵo. - tag_html: Etikedo (ang. 'tag') estas kolekto de datumoj priskribanta - nodon aÅ­ linion, kiel nomo de restoracio aÅ­ rapidlimo de vojo. - rules: - title: Reguloj! - paragraph_1_html: "OpenStreetMap havas malmultajn formalajn regulojn, tamen - ni esperas, ke ĉiuj kunlaboros kaj interparolos en la komunumo. Se vi planas - iujn agadojn aliajn ol permanajn redaktojn, bonvolu legi la sekvajn rekomendojn - pri enportoj - kaj \naÅ­tomataj - redaktoj." - questions: - title: Iaj demandoj? - paragraph_1_html: OpenStreetMap havas kelkajn ejojn por lerni pri la projekto, - por demandi pri ion ajn kaj kune diskuti kaj dokumenti pri mapigado. Alklaku - por ricevi helpon. - start_mapping: Ekigi mapigadon - add_a_note: - title: Ĉu mankas al vi tempo por redakti? Aldonu rimarkon! - paragraph_1_html: Se vi volas nur korekti iun etan kaj vi ne havas tempon por - registriĝi kaj lerni redaktadon, vi povas facile aldoni rimarkon. - paragraph_2_html: Simple iru al la mapo kaj alklaku - la piktogramon . Tio aldonos treneblan markon - al la mapo. Entajpu vian mesaĝon, konservu ĝin kaj aliaj mapigistoj okupiĝos - pri via rimarko. - fixthemap: - title: Raporti problemon / Korekti mapon - how_to_help: - title: Kiel helpi - join_the_community: - title: Aliĝi al la komunumo - explanation_html: Se vi rimarkis iun problemon kun niaj map-datumoj, ekzemple - strato aÅ­ adreso mankas, la plej bona rimedo estas aniĝi OpenStreetMap-komunumo - kaj redakti kaj ripari datumojn mem. - add_a_note: - instructions_html: Simple alklaku aÅ­ la saman piktogramon - sur la mapo. Ĉi tio aldonos moveblan markon, aldonu vian mesaĝon, konservu - ĝin, kaj aliaj mapigistoj okupiĝos pri via rimarko. - other_concerns: - title: Aliaj aferoj - explanation_html: Se vi havas demandojn pri kial niaj datumoj aÅ­ enhavo estas - uzataj, bonvolu ekkoni paĝon pri kopirajto por pliaj - leĝaj informoj, aÅ­ kontaktu la OSMF-laborgrupon. - help_page: - title: Akiri helpon - introduction: OpenStreetMap havas kelkajn ejojn por lerni pri la projekto, por - demandi pri ion ajn kaj kune diskuti kaj dokumenti pri mapigado. - welcome: - url: /welcome - title: Bonvenon al OSM - description: Komencu ekde ĉi tiu manlibreto ampleksanta fundamentojn de OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: Manlibro por komencantoj - description: Manlibro por komencantoj kreata de la komunumo (en la angla). - help: - url: https://help.openstreetmap.org/ - title: OpenStreetMap-helppaĝo - description: Demandu aÅ­ serĉu respondojn je retpaĝo de demandoj-kaj-respondoj - pri OSM. - mailing_lists: - title: Dissendolistoj - description: Demandu aÅ­ diskutu pri interesaj temoj en multaj pritemaj aÅ­ regionaj - dissendolistoj. - forums: - title: Forumoj - description: Demandoj kaj diskutoj por tiuj, kiuj preferas kutimaj diskutforumoj. - irc: - title: IRC - description: Interaga babilejo en multaj diversaj lingvoj kaj pri multaj temoj. - switch2osm: - title: switch2osm - description: Helpi al firmaoj kaj organizaĵoj transiĝi al mapoj kaj aliaj servoj - de OpenStreetMap. - wiki: - url: https://wiki.openstreetmap.org/wiki/Eo:Main_Page - title: OpenStreetMap-vikio - description: Esploru la vikion por akiri detalan dokumentaron pri OSM. - about_page: - next: Sekva - copyright_html: ©OpenStreetMap
      kontribuintoj - used_by: '%{name} liveras map-datumojn por miloj da retejoj, poŝtelefonaj aplikaĵoj - kaj aparatoj' - lede_text: OpenStreetMap estas kreata de komunumo de mapigistoj kiuj aldonas kaj - prizorgas datumojn pri vojoj, kursoj, kafejoj, stacidomoj kaj pli da aliaj, - en la tuta mondo. - local_knowledge_title: Loka scio - local_knowledge_html: OpenStreetMap emfazas lokan scion. Kontribuantoj uzas aerfotojn, - GPS-aparatojn kaj normajn mapojn por verigi ĉu datumoj de OSM estas akurataj - kaj ĝisdatigaj. - community_driven_title: Kondukata de komunumo - community_driven_html: |- - La komunumo de OpenStreetMap estas diversa, pasia kaj kreskas tagon post tago. Inter niaj kontribuantoj estas ŝatantoj de mapoj, profesiuloj de GIS, inĝenieroj prizorgantaj OSM-servilojn, helpistoj kiuj mapigas areojn tuŝitajn de katastrofoj kaj multaj aliaj. Por sciigi pli pri la komunumo, vidu taglibron OpenStreetMap, taglibrojn de uzantoj, - komunumajn taglibrojn kaj la retpaĝon de la Fondaĵo OSM. - open_data_title: Malfermaj datumoj - open_data_html: 'OpenStreetMap estas malfermaj datumoj: vi povas uzi ĝin - kiamaniere vi volas sub la kondiĉo de vi atribuos aŭtorecon al OpenStreetMap - kaj ĝiaj kontribuintoj. Se vi modifos aŭ uzos niajn datumojn, vi povos distribui - la verkon nur laŭ la sama permesilo. Vidu la paĝon - pri kopirajto kaj permesilo por pli da detaloj.' - legal_title: Leĝaj demandoj - legal_html: |- - Tiu ĉi retejo kaj aliaj servoj estas formale administrataj de la Fondaĵo OpenStreetMap (OSMF) komisie de la komunumo. Uzado de ĉiuj OSMF-servoj estas regulata per nia politiko de uzado kaj nia politiko de privateco. Bonvolu kontakti kun OSMF, se vi havas iun demandon pri permesilo, kopirajto aŭ leĝo. -
      - OpenStreetMap, la piktogramo de lupeo kaj “State of the Map” estas registritaj varmarkoj de OSMF. - partners_title: Kunlaborantoj notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} komentis pri taglibra afiŝo' @@ -1453,6 +1171,144 @@ eo: delete: deleted: Mesaĝo forigita site: + about: + next: Sekva + copyright_html: ©OpenStreetMap
      kontribuintoj + used_by: '%{name} liveras map-datumojn por miloj da retejoj, poŝtelefonaj aplikaĵoj + kaj aparatoj' + lede_text: OpenStreetMap estas kreata de komunumo de mapigistoj kiuj aldonas + kaj prizorgas datumojn pri vojoj, kursoj, kafejoj, stacidomoj kaj pli da aliaj, + en la tuta mondo. + local_knowledge_title: Loka scio + local_knowledge_html: OpenStreetMap emfazas lokan scion. Kontribuantoj uzas + aerfotojn, GPS-aparatojn kaj normajn mapojn por verigi ĉu datumoj de OSM estas + akurataj kaj ĝisdatigaj. + community_driven_title: Kondukata de komunumo + community_driven_html: |- + La komunumo de OpenStreetMap estas diversa, pasia kaj kreskas tagon post tago. Inter niaj kontribuantoj estas ŝatantoj de mapoj, profesiuloj de GIS, inĝenieroj prizorgantaj OSM-servilojn, helpistoj kiuj mapigas areojn tuŝitajn de katastrofoj kaj multaj aliaj. Por sciigi pli pri la komunumo, vidu taglibron OpenStreetMap, taglibrojn de uzantoj, + komunumajn taglibrojn kaj la retpaĝon de la Fondaĵo OSM. + open_data_title: Malfermaj datumoj + open_data_html: 'OpenStreetMap estas malfermaj datumoj: vi povas uzi + ĝin kiamaniere vi volas sub la kondiĉo de vi atribuos aŭtorecon al OpenStreetMap + kaj ĝiaj kontribuintoj. Se vi modifos aŭ uzos niajn datumojn, vi povos distribui + la verkon nur laŭ la sama permesilo. Vidu la paĝon + pri kopirajto kaj permesilo por pli da detaloj.' + legal_title: Leĝaj demandoj + legal_html: |- + Tiu ĉi retejo kaj aliaj servoj estas formale administrataj de la Fondaĵo OpenStreetMap (OSMF) komisie de la komunumo. Uzado de ĉiuj OSMF-servoj estas regulata per nia politiko de uzado kaj nia politiko de privateco. Bonvolu kontakti kun OSMF, se vi havas iun demandon pri permesilo, kopirajto aŭ leĝo. +
      + OpenStreetMap, la piktogramo de lupeo kaj “State of the Map” estas registritaj varmarkoj de OSMF. + partners_title: Kunlaborantoj + copyright: + foreign: + title: Pri ĉi tiu traduko + text: Se okazus konflikto inter ĉi tiu tradukita paĝo kaj %{english_original_link}, + la angla paĝo estas preferata. + english_link: la originalo en la angla + native: + title: Pri ĉi tiu paĝo + text: Vi legas la anglan version de paĝo pri kopirajto. Vi povas reveni al + la %{native_link} de ĉi tiu paĝo aÅ­ vi povas ĉesi legi pri kopirajto kaj + %{mapping_link}. + native_link: Esperanta versio + mapping_link: ekigi mapigadon + legal_babble: + title_html: Kopirajto kaj permesilo + intro_1_html: |- + OpenStreetMap® estas projekto de malfermaj datumoj eldonita laÅ­ la permesilo Open Data + Commons Open Database License (ODbL) de la Fondaĵo OpenStreetMap (OSMF). + intro_2_html: Vi rajtas kopii, disdoni, transdoni kaj modifi niajn datumojn, + nur se vi atribuos aÅ­torecon al OpenStreetMap kaj ĝiaj kontribuintoj. Se + vi modifos aÅ­ uzos niajn datumojn, vi povos distribui la verkon laÅ­ la sama + permesilo. La plena interkonsento + de uzado klarigas viajn rajtojn kaj devojn. + intro_3_html: La kartografio de niaj map-kaheloj kaj nia dokumentaro estas + disponeblaj laÅ­ la permesilo Krea + Komunaĵo Atribuite-Samkondiĉe 2.0 (CC BY-SA). + credit_title_html: Kiel atribui aÅ­torecon + credit_1_html: 'Ni postulas, ke vi markos: “© Kontribuintoj de + OpenStreetMap”.' + credit_2_html: Vi ankaÅ­ devas klarigi, ke datumoj estas disponeblaj laÅ­ la + permesilo Open Database License, kaj kartografio de map-kaheloj laÅ­ la permesilo + CC BY-SA. Vi povas indiki tion per fari ligilon al tiu + ĉi paĝo pri permesilo. Alimaniere, se vi distribuas OSM en datuma formo, + vi povas mencii nomo(j)n kaj ligilo(j)n al la permesilo(j). Se ne estas + eble meti ligilojn (ekz. en paperaj mapoj), ni sugestas direkti viajn legantojn + al openstreetmap.org (eble meti plenan retadreson), al opendatacommons.org + kaj (se necesas) al creativecommons.org. + credit_3_html: |- + En esploreblaj elektronikaj mapoj, la aÅ­torecon povas esti montrata ĉe la angulo de mapo. + Ekzemplo: + attribution_example: + alt: Ekzemplo kiel atribui OpenStreetMap sur retpaĝo + title: Ekzemplo de aÅ­torec-atribuado + more_title_html: Sciiĝi pli + more_1_html: |- + Sciigu pli pri uzado de niaj datumoj kaj kiel atribui aÅ­torecon ĉe la retpaĝo pri permesilo OSMF. + more_2_html: Kvankam la datumoj de OpenStreetMap estas liberaj, ni ne povas + liveri senpagan API-on por eksteraj programistoj. Legu nian politikon + pri uzado de API, politikon + pri uzado de kaheloj kaj poltikon + pri uzado de Nominatim. + contributors_title_html: Kunlaborantoj + contributors_intro_html: 'Niaj kunlaborantoj estas miloj da homoj. Ni ankaÅ­ + inkludas datumoj laÅ­ malferma permesilo el landaj kartografiaj organizaĵoj + kaj el aliaj fontoj, inter ili:' + contributors_at_html: |- + AÅ­strujo: enhavas datumojn el Stadt Wien (laÅ­ CC BY), + Land Vorarlberg kaj + Land Tirol (laÅ­ CC BY AT kun postaj ŝanĝoj). + contributors_ca_html: |- + Kanado: enhavas datumojn el + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), kaj StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: |- + Suomujo: enhavas datumojn el + National Land Survey of Finland's Topographic Database kaj aliaj fontoj, laÅ­ la permesilo NLSFI. + contributors_fr_html: 'Francujo: enhavas datumojn ricevitajn + el ''Direction Générale des Impôts''.' + contributors_nl_html: |- + Nederlando: enhavas datumojn el © AND, 2007 + (www.and.com). + contributors_nz_html: 'Nov-Zelando: enhavas datumojn ricevitajn + el ''Land Information New Zealand''. Crown Copyright reserved.' + contributors_si_html: |- + Slovenujo: enhavas datumojn el Ofico de Termezurado kaj Kartografio kaj + Ministerio pri Terkulturo, Arbarkulturo kaj Proviantado + (publikaj informoj de Slovenujo). + contributors_za_html: |- + Sud-Afriko: enhavas datumojn ricevitajn el Chief Directorate: + National Geo-Spatial Information, landaj kopirajtoj rezervitaj. + contributors_gb_html: |- + Unuiĝinta Reĝlando: enhavas datumojn el 'Ordnance + Survey' © Crown copyright and database right + 2010-12. + contributors_footer_1_html: |- + Por pli da detaloj pri tiuj ĉi kaj aliaj fontoj uzitaj por plibonigi OpenStreetMap, bonvolu viziti la paĝon pri kontribuintoj en la OpenStreetMap-vikio. + contributors_footer_2_html: Inkludo de datumoj en OpenStreetMap ne indikas, + ke la provizanto de datumoj apogas OpenStreetMap, garantias por iu aÅ­ respondumas + por iu. + infringement_title_html: Rompo de kopirajtoj + infringement_1_html: OSM-kunlaborantoj memoru, por ke neniam aldonu datumojn + el iuj ajn fontoj protektataj de kopirajto (ekz. Google Maps aÅ­ paperaj + mapoj) sen klara permeso de posedanto de kopirajtoj. + infringement_2_html: Se ve pensas, ke datumoj protektataj per kopirajto estas + misaldonitaj al OpenStreetMap-datumbazo aÅ­ al tiu ĉi retejo, bonvolu legi + pri proceduro + de forigado de datumoj aÅ­ plenigi la enretan + formularon. + trademarks_title_html: Registritaj markoj + trademarks_1_html: OpenStreetMap, la piktogramo de grandiga lenso kaj “State + of the Map” estas registritaj markoj de la Fondaĵo OpenStreetMap. Se vi + havas iujn demandojn pri uzado de niaj markoj, bonvolu sciigi kun nia politiko pri + varmarkoj. index: js_1: Vi aÅ­ uzas foliumilon, kiu ne subtenas Ĝavoskripton, aÅ­ vi havas ĝin malaktivan. js_2: OpensStreetMap uzas Ĝavoskripton por montri ŝoveblan mapon. @@ -1483,6 +1339,104 @@ eo: id_not_configured: iD ne estas agordita no_iframe_support: Via foliumilo ne subtenas 'HTML iframes', ili estas bezonataj por tiu ĉi eblo. + export: + title: Elporti + area_to_export: Elportonta areo + manually_select: Permane elektu alian areon. + format_to_export: Elport-formo + osm_xml_data: XML datumoj de OpenStreetMap + map_image: Bildo de mapo (norma tavolo) + embeddable_html: Enkorpigebla HTML + licence: Permesilo + export_details: OpenStreetMap-datumoj estas disponeblaj laÅ­ la permesilo Open Data Commons Open + Database License (ODbL). + too_large: + advice: 'Se la elportado malsukcesis, bonvolu uzi unu el jenaj fontoj:' + body: La elektita areo estas tro granda por esti elportita kiel XML-datumojn + de OpenStreetMap. Bonvolu pligrandigi aÅ­ elekti malpli grandan areon, aÅ­ + uzi unu el sekvaj fontoj por amasa datum-elportado. + planet: + title: Planedo OSM + description: Ofte-ĝisdatigataj kopioj de plena OpenStreetMap datumbazo + overpass: + title: Overpass API + description: Elŝutas ĉi tiun areon de spegulkopio de OpenStreetMap datumbazo + geofabrik: + title: Elŝuti el Geofabrik + description: Ofte-ĝisdatigataj eltiraĵoj de kontinentoj, landoj, kaj elektitaj + urboj + metro: + title: Metro-eltiraĵoj + description: Eltiraĵoj de ĉefaj mondaj urboj kaj iliaj ĉirkaÅ­aĵoj + other: + title: Aliaj fontoj + description: Aliaj fontoj enlistigitaj ĉe OpenStreetMap-vikio + options: Elektebloj + format: Formo + scale: Skalo + max: maks + image_size: Bildamplekso + zoom: Pligrandigi + add_marker: Aldoni markon al la mapo + latitude: 'Lat:' + longitude: 'Lon:' + output: Eliro + paste_html: Engluu HTML-kodon al via retpaĝo + export_button: Elporti + fixthemap: + title: Raporti problemon / Korekti mapon + how_to_help: + title: Kiel helpi + join_the_community: + title: Aliĝi al la komunumo + explanation_html: Se vi rimarkis iun problemon kun niaj map-datumoj, ekzemple + strato aÅ­ adreso mankas, la plej bona rimedo estas aniĝi OpenStreetMap-komunumo + kaj redakti kaj ripari datumojn mem. + add_a_note: + instructions_html: Simple alklaku aÅ­ la saman + piktogramon sur la mapo. Ĉi tio aldonos moveblan markon, aldonu vian mesaĝon, + konservu ĝin, kaj aliaj mapigistoj okupiĝos pri via rimarko. + other_concerns: + title: Aliaj aferoj + explanation_html: Se vi havas demandojn pri kial niaj datumoj aÅ­ enhavo estas + uzataj, bonvolu ekkoni paĝon pri kopirajto por + pliaj leĝaj informoj, aÅ­ kontaktu la OSMF-laborgrupon. + help: + title: Akiri helpon + introduction: OpenStreetMap havas kelkajn ejojn por lerni pri la projekto, por + demandi pri ion ajn kaj kune diskuti kaj dokumenti pri mapigado. + welcome: + url: /welcome + title: Bonvenon al OSM + description: Komencu ekde ĉi tiu manlibreto ampleksanta fundamentojn de OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: Manlibro por komencantoj + description: Manlibro por komencantoj kreata de la komunumo (en la angla). + help: + url: https://help.openstreetmap.org/ + title: OpenStreetMap-helppaĝo + description: Demandu aÅ­ serĉu respondojn je retpaĝo de demandoj-kaj-respondoj + pri OSM. + mailing_lists: + title: Dissendolistoj + description: Demandu aÅ­ diskutu pri interesaj temoj en multaj pritemaj aÅ­ + regionaj dissendolistoj. + forums: + title: Forumoj + description: Demandoj kaj diskutoj por tiuj, kiuj preferas kutimaj diskutforumoj. + irc: + title: IRC + description: Interaga babilejo en multaj diversaj lingvoj kaj pri multaj temoj. + switch2osm: + title: switch2osm + description: Helpi al firmaoj kaj organizaĵoj transiĝi al mapoj kaj aliaj + servoj de OpenStreetMap. + wiki: + url: https://wiki.openstreetmap.org/wiki/Eo:Main_Page + title: OpenStreetMap-vikio + description: Esploru la vikion por akiri detalan dokumentaron pri OSM. sidebar: search_results: Serĉrezultoj close: Fermi @@ -1583,6 +1537,54 @@ eo: image: Bildo alt: Kromteksto url: URL + welcome: + title: Bonvenon! + introduction_html: Bonvenon al OpenStreetMap, la libera kaj redaktebla mapo + de la mondo. Nun kiam vi registriĝis, vi povas ekigi mapigadon. Jen estas + mallonga manlibreto kun la plej gravaj aĵoj kiuj vi povas scii. + whats_on_the_map: + title: Kio estas sur la mapo + on_html: OpenStreetMap estas loko por mapigi objektojn, kiuj estas kaj + realaj kaj aktualaj - tiu estas milionoj da konstruaĵoj, vojoj kaj + aliaj detalaĵoj pri lokoj. Vi povas mapigi ĉiujn elementojn de reala mondo + kiuj interesas vin. + off_html: Ni ne povas inkludi personajn taksojn, eksajn aÅ­ malcertajn + objektojn, kaj datumoj de kopirajtataj fontoj. Escepte se vi estas permesita, + ne kopiu datumoj el aliaj interretaj aÅ­ paperaj mapoj. + basic_terms: + title: Fundamentaj terminoj pri mapigado + paragraph_1_html: OpenStreetMap havas sian propran ĵargonon. Jen estas kelkaj + utilaj vorotoj. + editor_html: Redaktilo estas programo aÅ­ retpaĝo, kiun vi + povas uzi por modifi mapon. + node_html: Nodo (ang. 'node') estas punkto sur la mapo, kiel + restoracio aÅ­ arbo. + way_html: Linio (ang. 'way') estas linio aÅ­ areo, kiel vojo, + rivereto, lago aÅ­ konstruaĵo. + tag_html: Etikedo (ang. 'tag') estas kolekto de datumoj priskribanta + nodon aÅ­ linion, kiel nomo de restoracio aÅ­ rapidlimo de vojo. + rules: + title: Reguloj! + paragraph_1_html: "OpenStreetMap havas malmultajn formalajn regulojn, tamen + ni esperas, ke ĉiuj kunlaboros kaj interparolos en la komunumo. Se vi planas + iujn agadojn aliajn ol permanajn redaktojn, bonvolu legi la sekvajn rekomendojn + pri enportoj + kaj \naÅ­tomataj + redaktoj." + questions: + title: Iaj demandoj? + paragraph_1_html: OpenStreetMap havas kelkajn ejojn por lerni pri la projekto, + por demandi pri ion ajn kaj kune diskuti kaj dokumenti pri mapigado. Alklaku por ricevi helpon. + start_mapping: Ekigi mapigadon + add_a_note: + title: Ĉu mankas al vi tempo por redakti? Aldonu rimarkon! + paragraph_1_html: Se vi volas nur korekti iun etan kaj vi ne havas tempon + por registriĝi kaj lerni redaktadon, vi povas facile aldoni rimarkon. + paragraph_2_html: Simple iru al la mapo kaj alklaku + la piktogramon . Tio aldonos treneblan markon + al la mapo. Entajpu vian mesaĝon, konservu ĝin kaj aliaj mapigistoj okupiĝos + pri via rimarko. trace: visibility: private: Privata (kunhavigita nur kiel sennomaj, malordigitaj punktoj) @@ -1623,6 +1625,7 @@ eo: trace_header: upload_trace: Alŝuti spuron see_all_traces: Vidi ĉiujn spurojn + see_my_traces: Montri miajn spurojn traces_waiting: one: Vi havas %{count} spuron atendanta alŝutado. Bonvolu atendi ĝis ĝi estos alŝutita, antaÅ­ alŝuti aliajn, do vi ne blokos atendovicon por aliaj uzantoj. @@ -1650,6 +1653,7 @@ eo: delete_track: Forviŝi ĉi tiun spuron trace_not_found: Spuro ne trovebla! visibility: 'Videbleco:' + confirm_delete: Ĉu forigi tiun ĉi spuron? trace_paging_nav: showing_page: Paĝo %{page} older: AntaÅ­aj spuroj @@ -1672,6 +1676,7 @@ eo: map: mapo list: public_traces: Publikaj GPS-spuroj + my_traces: Miaj GPS-spuroj public_traces_from: Publikaj GPS-spuroj de %{user} description: Foliumi laste alŝutitajn GPS-spuroj tagged_with: etikedita kun %{tags} @@ -1708,7 +1713,7 @@ eo: ensaluti al reta fasado por legi interkonsenton pri kontribuado. Vi ne devas akcepti ĝin, sed vi devas legi ĝin. oauth: - oauthorize: + authorize: title: Rajtigi aliron al via konto request_access: La aplikaĵo %{app_name} petas pri aliro al la konto de %{user}. Bonvolu kontroli rajtojn, kiujn vi donas al aplikaĵo. Vi povas elekti rajtojn @@ -1722,11 +1727,11 @@ eo: allow_write_gpx: alŝuti GPS-spurojn. allow_write_notes: modifi rimarkojn. grant_access: Permesi aliron - oauthorize_success: + authorize_success: title: Peto pri permeso permesita allowed: Vi permesis al aplikaĵo %{app_name} aliron al via konto. verification: La kontrol-kodon estas %{code}. - oauthorize_failure: + authorize_failure: title: Peto pri permeso malsukcesis denied: Vi malpermesis al aplikaĵo %{app_name} aliron al via konto invalid: La atingoĵetono ne plu validas. @@ -1965,6 +1970,7 @@ eo: if set location: Agordu vian hejmlokon ĉe la paĝo de %{settings_link} por vidi proksimajn mapigistojn. settings_link_text: agordoj + my friends: Miaj amikoj no friends: Vi ne aldonis iun amikon ankoraÅ­. km away: '%{count} km for' m away: '%{count} m for' @@ -2159,7 +2165,7 @@ eo: confirm: Konfirmi fail: Ne povas nuligi la rolon '%{role}' de la uzanto '%{name}'. Bonvolu kontroli, ĉu kaj uzanto kaj rolo estas korektaj. - user_block: + user_blocks: model: non_moderator_update: Vi devas esti kontrolanto por doni aÅ­ ĝisdatigi blokadon. non_moderator_revoke: Vi devas esti kontrolanto por nuligi blokadon. @@ -2220,20 +2226,6 @@ eo: period: one: 1 horo other: '%{count} horoj' - partial: - show: Montri - edit: Redakti - revoke: Malbloki! - confirm: Ĉu vi certas? - display_name: Blokita uzanto - creator_name: Kreinto - reason: Kialo de blokado - status: Stato - revoker_name: Nuligita de - not_revoked: (ne nuligita) - showing_page: Paĝo %{page} - next: Sekva » - previous: « AntaÅ­a helper: time_future: Finiĝos %{time}. until_login: Aktiva ĝis la uzanto ensalutos. @@ -2263,8 +2255,22 @@ eo: back: Montri ĉiujn blokadojn revoker: 'Malblokanto:' needs_view: La uzanto devas ensaluti antaÅ­ ĉi tiu blokado nuligos. - note: - description: + block: + not_revoked: (ne nuligita) + show: Montri + edit: Redakti + revoke: Malbloki! + blocks: + display_name: Blokita uzanto + creator_name: Kreinto + reason: Kialo de blokado + status: Stato + revoker_name: Nuligita de + showing_page: Paĝo %{page} + next: Sekva » + previous: « AntaÅ­a + notes: + comment: opened_at_html: Kreita antaÅ­ %{when} opened_at_by_html: Kreita antaÅ­ %{when} de %{user} commented_at_html: Ĝisdatigita antaÅ­ %{when} @@ -2394,7 +2400,7 @@ eo: distance: Distanco errors: no_route: Ne povis trovi kurson inter tiuj du punktoj. - no_place: Ho ve - ne povas trovi tiun lokon. + no_place: BedaÅ­rinde ne povas trovi “%{place}”. instructions: continue_without_exit: AntaÅ­en al %{name} slight_right_without_exit: Ete dekstren al %{name} @@ -2416,6 +2422,7 @@ eo: onramp_right_with_name_directions: Dekstren al enveturejo %{name} direkte al %{directions} onramp_right_without_directions: Dekstren al enveturejo + onramp_right: Dekstren al enveturejo endofroad_right_without_exit: Ĉe la fino de la vojo turniĝu dekstren al %{name} merge_right_without_exit: Turniĝu dekstren al %{name} fork_right_without_exit: Ĉe la vojforko turniĝu dekstren al %{name} @@ -2442,6 +2449,7 @@ eo: onramp_left_with_name_directions: Maldekstren al enveturejo %{name} direkte al %{directions} onramp_left_without_directions: Maldekstren al enveturejo + onramp_left: Maldekstren al enveturejo endofroad_left_without_exit: Ĉe la fino de la vojo turniĝu maldekstren al %{name} merge_left_without_exit: Turniĝu maldekstren al %{name} @@ -2479,7 +2487,7 @@ eo: show_address: Montri adreson query_features: Informoj pri objektoj centre_map: Centrigi mapon ĉi tien - redaction: + redactions: edit: description: Priskribo heading: Redakti korekton diff --git a/config/locales/es.yml b/config/locales/es.yml index 26c52fb29..a4bd7b3c8 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -18,6 +18,7 @@ # Author: Idontknow # Author: Indiralena # Author: Invadinado +# Author: James # Author: Javiersanp # Author: Johnarupire # Author: Jynus @@ -277,7 +278,7 @@ es: list: title: Conjuntos de cambios title_user: Conjunto de cambios por %{user} - title_friend: Conjuntos de cambios realizados por tus amigos + title_friend: Conjuntos de cambios realizados por mis amigos title_nearby: Conjuntos de cambios realizados por usuarios cercanos empty: No hay conjuntos de cambios encontrados. empty_area: No hay conjuntos de cambios en esta área. @@ -308,7 +309,7 @@ es: user_title: Diario de %{user} in_language_title: Entradas de diario en %{language} new: Nueva entrada en el diario - new_title: Redactar una nueva entrada en tu diario de usuario + new_title: Redactar una nueva entrada en mi diario de usuario no_entries: No hay entradas en el diario recent_entries: Entradas recientes en el diario older_entries: Entradas más antiguas @@ -375,54 +376,6 @@ es: ago: hace %{ago} newer_comments: Comentarios más recientes older_comments: Comentarios más antiguos - export: - title: Exportar - start: - area_to_export: Área a exportar - manually_select: Seleccionar manualmente un área diferente - format_to_export: Formato de exportación - osm_xml_data: Datos OpenStreetMap en formato XML - map_image: Imagen de mapa (muestra la capa estándar) - embeddable_html: HTML integrable - licence: Licencia - export_details: Los datos de OpenStreetMap se encuentran bajo la licencia - Open Database (ODbL) de Open Data Commons. - too_large: - advice: 'Si la exportación anterior falla, por favor considere usar una de - las fuentes que se enumeran a continuación:' - body: Esta área es demasiado grande para ser exportada como datos XML de OpenStreetMap. - Por favor, acérquese o seleccione un área más pequeña, o utilice una de - las siguientes fuentes para la descarga de datos masiva. - planet: - title: Planeta OSM - description: Copias actualizadas regularmente de la base de datos completa - de OpenStreetMap - overpass: - title: Overpass API - description: Descargar este cuadro delimitador desde una réplica de la base - de datos de OpenStreetMap - geofabrik: - title: Descargas de Geofabrik - description: Extractos actualizados regularmente de los continentes, países, - y ciudades seleccionadas - metro: - title: Extractos de Metro - description: Extractos de las ciudades principales del mundo y sus alrededores - other: - title: Otras fuentes - description: Fuentes adicionales que aparecen en la wiki de OpenStreetMap - options: Opciones - format: Formato - scale: Escala - max: máx. - image_size: Tamaño de la imagen - zoom: Ampliación - add_marker: Añadir un marcador al mapa - latitude: 'Lat:' - longitude: 'Lon:' - output: Resultado - paste_html: Pegar HTML para insertar en sitio web - export_button: Exportar geocoder: search: title: @@ -450,6 +403,8 @@ es: gate: Puerta hangar: Hangar helipad: Helipuerto + holding_position: Punto de espera + parking_position: Punto de estacionamiento runway: Pista taxiway: Calle de rodaje terminal: Terminal @@ -542,6 +497,7 @@ es: village_hall: Sala del pueblo waste_basket: Papelera waste_disposal: Contenedor de basura + water_point: Punto de agua youth_centre: Centro juvenil boundary: administrative: Frontera administrativa @@ -712,6 +668,7 @@ es: water_park: Parque acuático "yes": Ocio man_made: + beacon: Baliza beehive: Colmena breakwater: Rompeolas bridge: Puente @@ -728,14 +685,17 @@ es: mast: Mástil mine: Mina mineshaft: Pozo minero + monitoring_station: Estación de monitorización petroleum_well: Pozo petrolífero pier: Muelle pipeline: Tubería silo: Silo + storage_tank: Tanque de almacenamiento surveillance: Vigilancia tower: Torre wastewater_plant: Planta de tratamiento de aguas watermill: Molino hidráulico + water_tower: Torre de agua water_well: Pozo windmill: Molino de viento works: Fábrica @@ -797,6 +757,7 @@ es: estate_agent: Inmobiliaria government: Oficina gubernamental insurance: Oficina de seguros + it: Oficina de TI lawyer: Abogado ngo: Oficina de ONG telecommunication: Oficina de telecomunicaciones @@ -819,6 +780,7 @@ es: municipality: Municipio neighbourhood: Barrio postcode: Código postal + quarter: Cuatrimestre region: Región sea: Mar square: Plaza @@ -926,10 +888,13 @@ es: stationery: Papelería supermarket: Supermercado tailor: Sastre + ticket: Tienda de Tickets tobacco: Tabaquería toys: Juguetería travel_agency: Agencia de viajes + tyres: Tienda de neumáticos vacant: Tienda vacante + variety_store: Tienda de variedades video: Videoclub wine: Vinatería "yes": Tienda @@ -1045,257 +1010,6 @@ es: text: Hacer una donación learn_more: Más información more: Más - license_page: - foreign: - title: Acerca de esta traducción - text: En el caso de un conflicto entre esta página traducida y %{english_original_link}, - la versión inglesa prevalecerá - english_link: el original en Inglés - native: - title: Acerca de esta página - text: Está viendo la versión en inglés de la página de derechos de autor. Puede - ir a la %{native_link} de esta página o puede dejar de leer acerca de derechos - de autor y %{mapping_link}. - native_link: versión en español - mapping_link: comenzar a cartografiar - legal_babble: - title_html: Derechos de autor y licencia - intro_1_html: |- - OpenStreetMap® es Open Data (un servicio de datos de acceso libre), con licencia Open Data - Commons Open Database License (ODbL) de la Fundación OpenStreetMap (OSMF). - intro_2_html: Puedes copiar, distribuir, transmitir y adaptar nuestros mapas - e información libremente siempre y cuando des reconocimiento a OpenStreetMap - y sus colaboradores. Si alteras o generas contenido sobre nuestros mapas e - información, solo podrás distribuir estos cambios bajo la misma licencia. - El código legal completo - explica tus derechos y obligaciones. - intro_3_html: La cartografía en nuestros mosaicos de mapas y en nuestra documentación, - están licenciados bajo la licencia Creative - Commons Reconocimiento-CompartirIgual 2.0 (CC BY-SA). - credit_title_html: Cómo dar reconocimiento a OpenStreetMap - credit_1_html: Requerimos que utilices los créditos "© Colaboradores de OpenStreetMap". - credit_2_html: |- - Usted debe también dejar claro que los datos están disponibles bajo la licencia Open Database License (ODbL), y si utiliza nuestros mapas, que la cartografía posee licencia CC BY-SA. Puede hacer esto mediante el enlace a esta página de derechos de autor. - Como alternativa y como un requisito si están distribuyendo OSM en un formulario de datos, puede nombrar y enlazar directamente a las licencias. En medios de comunicación donde los enlaces no sean posibles (por ejemplo, obras impresas), le sugerimos que dirija a sus lectores a openstreetmap.org (quizás expandiendo 'OpenStreetMap' hasta esta dirección completa), a opendatacommons.org, y si procede, a creativecommons.org. - credit_3_html: |- - En un mapa electrónico navegable, los créditos deben aparecer en la esquina del mapa. - Por ejemplo: - attribution_example: - alt: Ejemplo de como dar reconocimiento a OpenStreetMap en una página web - title: Ejemplo de atribución - more_title_html: Para saber más... - more_1_html: |- - Encontrarás más información acerca de cómo utilizar nuestros datos y cómo citarnos como fuente en la página de licencia de la OSMF. - more_2_html: |- - A pesar de que OpenStreetMap es contenido abierto, no podemos suminstrar una API de mapas gratuita para terceros. - - Consulta nuestra normativa de uso de la API, la - normativa de uso de mosaicos de mapas y la normativa de uso de Nominatim. - contributors_title_html: Nuestros colaboradores - contributors_intro_html: 'Nuestros colaboradores son miles de personas. Incluimos - también datos con licencia abierta de organismos cartográficos nacionales - y otras fuentes, entre ellas:' - contributors_at_html: |- - Austria: Contiene datos de - Stadt Wien (bajo - CC BY), Land Vorarlberg y Land Tirol (bajo licencia CC BY AT con modificaciones). - contributors_ca_html: 'Canadá: contiene datos de GeoBase®, - GeoGratis (© Department of Natural Resources Canada), CanVec (© - Department of Natural Resources Canada) y StatCan (Geography Division, Statistics - Canada).' - contributors_fi_html: |- - Finlandia: Contiene datos de la National Land Survey de la Finland's Topographic Database - y otras bases de datos, bajo la NLSFI License. - contributors_fr_html: 'Francia: Contiene datos extraídos de - Direction Générale des Impôts.' - contributors_nl_html: |- - Países Bajos: Contiene datos de © AND, 2007 - (www.and.com) - contributors_nz_html: 'Nueva Zelanda: Contiene datos extraídos - de Land Information New Zealand. Crown Copyright reserved.' - contributors_si_html: |- - Eslovenia: Contiene datos del - Surveying and Mapping Authority y - Ministry of Agriculture, Forestry and Food - (información pública de Eslovenia). - contributors_za_html: |- - Sudáfrica: Contiene datos extraídos de - Chief Directorate: Información - Nacional Geoespacial, State copyright reserved. - contributors_gb_html: |- - Reino Unido: Contiene datos de Ordnance Survey © Crown copyright and database right - 2010-12. - contributors_footer_1_html: Para obtener más detalles sobre estas y otras fuentes - que se han utilizado para ayudar a mejorar OpenStreetMap, véase la página - de colaboradores en el Wiki de OpenStreetMap. - contributors_footer_2_html: La inclusión de información en OpenStreetMap no - implica que el proveedor de la información original apoya a OpenStreetMap, - ofrece alguna garantía o acepta alguna responsabilidad. - infringement_title_html: Violación de derechos de autor - infringement_1_html: Se le recuerda a los colaboradores de OSM que no deberán - añadir información procedente de ninguna fuente con derechos de autor reservados - (p. ej. Google Maps o mapas impresos) sin el consentimiento explícito de los - poseedores de los derechos de autor. - infringement_2_html: Si usted cree que algún material con derechos de autor - ha sido incorrectamente agregado a la base de datos de OpenStreetMap o a este - sitio, consulte nuestro procedimiento - de descolgado o preséntelo directamente en nuestra página - de presentación en línea. - trademarks_title_html: Marcas registradas - trademarks_1_html: OpenStreetMap, el logotipo de la lupa y «State of the Map» - son marcas registradas de la Fundación OpenStreetMap. Si tienes preguntas - sobre su uso, consulta nuestra normativa - de marcas registradas. - welcome_page: - title: ¡Bienvenido! - introduction_html: Bienvenido a OpenStreetMap, el mapa libre y editable del mundo. - Ahora que usted está registrado, está todo listo para comenzar a mapear. He - aquí una guía rápida con las cosas más importantes que usted necesita saber. - whats_on_the_map: - title: Qué hay en el mapa - on_html: OpenStreetMap es un lugar para el mapeo de las cosas que son reales - y actuales - esto incluye millones de edificios, carreteras, y otros - detalles acerca de lugares. Puede mapear cualquier característica de la vida - real que es interesante para usted. - off_html: Lo que no se incluye son datos basados en opiniones (por - ejemplo, valoraciones), características históricas que ya no existen sobre - el terreno o hipotéticas, ni datos provenientes de fuentes protegidas por - derechos de autor. A menos que tenga un permiso especial, no copie de mapas - en línea o en papel. - basic_terms: - title: Términos básicos para mapear - paragraph_1_html: OpenStreetMap tiene su propia jerga. Estas son algunas palabras - clave que le pueden ser útiles. - editor_html: Un editor es un programa o sitio web que puede - utilizar para editar el mapa. - node_html: Un nodo es un punto en el mapa, como un restaurante - o un árbol. - way_html: Una vía es una línea o área, como una carretera, - arroyo, lago o edificio. - tag_html: Una etiqueta es un poco de información acerca de - un nodo o vía, como un nombre de restaurante o un límite de velocidad de la - carretera. - rules: - title: Reglas - paragraph_1_html: OpenStreetMap tiene pocas reglas formales, pero esperamos - que todos los participantes colaboraren y se comuniquen con la comunidad. - Si estás considerando alguna actividad que no sea la edición manual, lee y - sigue las instrucciones sobre importaciones - y ediciones - automatizadas. - questions: - title: ¿Alguna pregunta? - paragraph_1_html: |- - OpenStreetMap tiene varios recursos para aprender sobre el proyecto, preguntando y contestando preguntas, y colaborativamente discutir y documentar temas de cartografía. - Obtenga ayuda aquí. - start_mapping: Comenzar a mapear - add_a_note: - title: ¿No tiene tiempo para editar? ¡Añada una nota! - paragraph_1_html: Si sólo desea corregir algo pequeño y no tiene tiempo para - registrarse y aprender a editar, es fácil añadir una nota. - paragraph_2_html: 'Sólo tiene que ir a el mapa y - hacer clic en el icono de nota: . Esto añadirá - un marcador en el mapa, que se puede mover arrastrando. Agregue su mensaje, - haga clic en guardar y otros mapeadores investigarán.' - fixthemap: - title: Reportar un problema / corregir el mapa - how_to_help: - title: Cómo ayudar - join_the_community: - title: Unirse a la comunidad - explanation_html: Si has notado un problema con nuestros datos del mapa, por - ejemplo un camino no encontrado o tu dirección, la mejor manera de proceder - es unirse a la comunidad de OpenStreetMap y añadir o corrigir los datos - por ti mismo. - add_a_note: - instructions_html: |- - Simplemente haz clic en o el mismo icono en la pantalla del mapa. - Esto agregará un marcador para el mapa, que puedes mover - arrastrándolo. Agrega tu mensaje y luego haz clic en guardar y otros usuarios lo investigarán. - other_concerns: - title: Otras preocupaciones - explanation_html: |- - Si tienes preocupaciones sobre cómo se están utilizando nuestros datos o sobre el contenido, consulta nuestra - página de derechos de autor para obtener más información legal, o contacta con el grupo de trabajo OSMF apropiado. - help_page: - title: Cómo obtener ayuda - introduction: OpenStreetMap tiene varios recursos para aprender sobre el proyecto, - preguntando y contestando preguntas, y colaborativamente discutir y documentar - temas de cartografía. - welcome: - url: /welcome - title: Le damos la bienvenida a OSM - description: Comenzar con esta guía rápida que cubre lo básico de OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/ES:Beginners%27_guide - title: Guía del principiante - description: Guía para principiantes, mantenida por la comunidad. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Hacer una pregunta o buscar respuestas en el sitio de preguntas - y respuestas de OSM. - mailing_lists: - title: Listas de correo - description: Pregunta o discute temas interesantes de un amplio abanico de listas - de correo temáticas o regionales. - forums: - title: Foros - description: Preguntas y discusiones para aquellos que prefieren una interfaz - del estilo cartelera de anuncios. - irc: - title: IRC - description: Chat interactivo en muchos idiomas diferentes y sobre muchos temas. - switch2osm: - title: Migra a OSM - description: Ayuda para las empresas y organizaciones que migran a mapas y a - otros servicios, basados en OpenStreetMap. - wiki: - url: https://wiki.openstreetmap.org/wiki/ES:Main_Page - title: wiki.openstreetmap.org - description: Explora el wiki para obtener documentación detallada de OSM. - about_page: - next: Siguiente - copyright_html: ©Colaboradores de
      OpenStreetMap - used_by: '%{name} impulsa mediante geodatos a miles de sitios web, aplicaciones - móviles y dispositivos de hardware.' - lede_text: OpenStreetMap lo crea una gran comunidad de colaboradores que con sus - contribuciones al mapa añaden y mantienen datos sobre caminos, senderos, cafeterías, - estaciones de ferrocarril y muchas cosas más a lo largo de todo el mundo. - local_knowledge_title: Conocimiento local - local_knowledge_html: OpenStreetMap valora mucho el conocimiento local. Los colaboradores - utilizan imágenes aéreas, dispositivos GPS, mapas y otras fuentes de datos libres - para verificar que los datos de OSM sean precisos y estén actualizados. - community_driven_title: Impulsado por la comunidad - community_driven_html: "La comunidad de OpenStreetMap es diversa y entusiasta - y crece todos los días.\nEntre nuestros colaboradores figuran cartógrafos apasionados, - profesionales de GIS, ingenieros que hacen funcionar los servidores de OSM, - humanitarios que elaboran mapas de zonas de desastre, y muchas personas más.\nPara - obtener más información sobre la comunidad, véase el \nblog - de OpenStreetMap, los diarios de los usuarios, - los blogs comunitarios y el sitio - web de la\nthe Fundación OSM." - open_data_title: Datos abiertos - open_data_html: 'OpenStreetMap es datos abiertos: puedes usarlo libremente - para cualquier propósito, siempre y cuando des crédito a OpenStreetMap y a sus - colaboradores. Si alteras o te basas en los datos en casos determinados, deberás - distribuir el resultado únicamente bajo la misma licencia. Consulta la - página sobre Derechos de autor y Licencia para obtener más detalles.' - legal_title: Legal - legal_html: "Este sitio y muchos otros servicios relacionados son gestionados - formalmente por la \nFundación OpenStreetMap - (OSMF) \nen nombre de la comunidad. El uso de todos los servicios gestionados - por la OSMF está sujeto \na nuestra \nnormativa - de uso aceptable y nuestra normativa - de privacidad\n
      \nPonte en - contacto con la OSMF \nsi tienes preguntas sobre licencias, derechos de - autor u otra cuestión legal.\n
      \nOpenStreetMap, el logotipo de la lupa y - «State of the Map» son marcas - registradas de la OSMF." - partners_title: Socios notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} ha comentado en una entrada de diario' @@ -1490,6 +1204,153 @@ es: delete: deleted: Mensaje borrado site: + about: + next: Siguiente + copyright_html: ©Colaboradores de
      OpenStreetMap + used_by: '%{name} impulsa mediante geodatos a miles de sitios web, aplicaciones + móviles y dispositivos de hardware.' + lede_text: OpenStreetMap lo crea una gran comunidad de colaboradores que con + sus contribuciones al mapa añaden y mantienen datos sobre caminos, senderos, + cafeterías, estaciones de ferrocarril y muchas cosas más a lo largo de todo + el mundo. + local_knowledge_title: Conocimiento local + local_knowledge_html: OpenStreetMap valora mucho el conocimiento local. Los + colaboradores utilizan imágenes aéreas, dispositivos GPS, mapas y otras fuentes + de datos libres para verificar que los datos de OSM sean precisos y estén + actualizados. + community_driven_title: Impulsado por la comunidad + community_driven_html: "La comunidad de OpenStreetMap es diversa y entusiasta + y crece todos los días.\nEntre nuestros colaboradores figuran cartógrafos + apasionados, profesionales de GIS, ingenieros que hacen funcionar los servidores + de OSM, humanitarios que elaboran mapas de zonas de desastre, y muchas personas + más.\nPara obtener más información sobre la comunidad, véase el \nblog + de OpenStreetMap, los diarios de los usuarios, + los blogs comunitarios y el + sitio web de la\nthe Fundación OSM." + open_data_title: Datos abiertos + open_data_html: 'OpenStreetMap es datos abiertos: puedes usarlo libremente + para cualquier propósito, siempre y cuando des crédito a OpenStreetMap y a + sus colaboradores. Si alteras o te basas en los datos en casos determinados, + deberás distribuir el resultado únicamente bajo la misma licencia. Consulta + la página sobre Derechos de autor y Licencia + para obtener más detalles.' + legal_title: Legal + legal_html: "Este sitio y muchos otros servicios relacionados son gestionados + formalmente por la \nFundación OpenStreetMap + (OSMF) \nen nombre de la comunidad. El uso de todos los servicios gestionados + por la OSMF está sujeto \na nuestra \nnormativa + de uso aceptable y nuestra normativa + de privacidad\n
      \nPonte + en contacto con la OSMF \nsi tienes preguntas sobre licencias, derechos + de autor u otra cuestión legal.\n
      \nOpenStreetMap, el logotipo de la lupa + y «State of the Map» son marcas + registradas de la OSMF." + partners_title: Socios + copyright: + foreign: + title: Acerca de esta traducción + text: En el caso de un conflicto entre esta página traducida y %{english_original_link}, + la versión inglesa prevalecerá + english_link: el original en Inglés + native: + title: Acerca de esta página + text: Está viendo la versión en inglés de la página de derechos de autor. + Puede ir a la %{native_link} de esta página o puede dejar de leer acerca + de derechos de autor y %{mapping_link}. + native_link: versión en español + mapping_link: comenzar a cartografiar + legal_babble: + title_html: Derechos de autor y licencia + intro_1_html: |- + OpenStreetMap® es Open Data (un servicio de datos de acceso libre), con licencia Open Data + Commons Open Database License (ODbL) de la Fundación OpenStreetMap (OSMF). + intro_2_html: Puedes copiar, distribuir, transmitir y adaptar nuestros mapas + e información libremente siempre y cuando des reconocimiento a OpenStreetMap + y sus colaboradores. Si alteras o generas contenido sobre nuestros mapas + e información, solo podrás distribuir estos cambios bajo la misma licencia. + El código legal + completo explica tus derechos y obligaciones. + intro_3_html: La cartografía en nuestros mosaicos de mapas y en nuestra documentación, + están licenciados bajo la licencia Creative + Commons Reconocimiento-CompartirIgual 2.0 (CC BY-SA). + credit_title_html: Cómo dar reconocimiento a OpenStreetMap + credit_1_html: Requerimos que utilices los créditos "© Colaboradores de OpenStreetMap". + credit_2_html: |- + Usted debe también dejar claro que los datos están disponibles bajo la licencia Open Database License (ODbL), y si utiliza nuestros mapas, que la cartografía posee licencia CC BY-SA. Puede hacer esto mediante el enlace a esta página de derechos de autor. + Como alternativa y como un requisito si están distribuyendo OSM en un formulario de datos, puede nombrar y enlazar directamente a las licencias. En medios de comunicación donde los enlaces no sean posibles (por ejemplo, obras impresas), le sugerimos que dirija a sus lectores a openstreetmap.org (quizás expandiendo 'OpenStreetMap' hasta esta dirección completa), a opendatacommons.org, y si procede, a creativecommons.org. + credit_3_html: |- + En un mapa electrónico navegable, los créditos deben aparecer en la esquina del mapa. + Por ejemplo: + attribution_example: + alt: Ejemplo de como dar reconocimiento a OpenStreetMap en una página web + title: Ejemplo de atribución + more_title_html: Para saber más... + more_1_html: |- + Encontrarás más información acerca de cómo utilizar nuestros datos y cómo citarnos como fuente en la página de licencia de la OSMF. + more_2_html: |- + A pesar de que OpenStreetMap es contenido abierto, no podemos suminstrar una API de mapas gratuita para terceros. + + Consulta nuestra normativa de uso de la API, la + normativa de uso de mosaicos de mapas y la normativa de uso de Nominatim. + contributors_title_html: Nuestros colaboradores + contributors_intro_html: 'Nuestros colaboradores son miles de personas. Incluimos + también datos con licencia abierta de organismos cartográficos nacionales + y otras fuentes, entre ellas:' + contributors_at_html: |- + Austria: Contiene datos de + Stadt Wien (bajo + CC BY), Land Vorarlberg y Land Tirol (bajo licencia CC BY AT con modificaciones). + contributors_ca_html: 'Canadá: contiene datos de GeoBase®, + GeoGratis (© Department of Natural Resources Canada), CanVec (© + Department of Natural Resources Canada) y StatCan (Geography Division, Statistics + Canada).' + contributors_fi_html: |- + Finlandia: Contiene datos de la National Land Survey de la Finland's Topographic Database + y otras bases de datos, bajo la NLSFI License. + contributors_fr_html: 'Francia: Contiene datos extraídos + de Direction Générale des Impôts.' + contributors_nl_html: |- + Países Bajos: Contiene datos de © AND, 2007 + (www.and.com) + contributors_nz_html: 'Nueva Zelanda: Contiene datos extraídos + de Land Information New Zealand. Crown Copyright reserved.' + contributors_si_html: |- + Eslovenia: Contiene datos del + Surveying and Mapping Authority y + Ministry of Agriculture, Forestry and Food + (información pública de Eslovenia). + contributors_za_html: |- + Sudáfrica: Contiene datos extraídos de + Chief Directorate: Información + Nacional Geoespacial, State copyright reserved. + contributors_gb_html: |- + Reino Unido: Contiene datos de Ordnance Survey © Crown copyright and database right + 2010-12. + contributors_footer_1_html: Para obtener más detalles sobre estas y otras + fuentes que se han utilizado para ayudar a mejorar OpenStreetMap, véase + la página de + colaboradores en el Wiki de OpenStreetMap. + contributors_footer_2_html: La inclusión de información en OpenStreetMap no + implica que el proveedor de la información original apoya a OpenStreetMap, + ofrece alguna garantía o acepta alguna responsabilidad. + infringement_title_html: Violación de derechos de autor + infringement_1_html: Se le recuerda a los colaboradores de OSM que no deberán + añadir información procedente de ninguna fuente con derechos de autor reservados + (p. ej. Google Maps o mapas impresos) sin el consentimiento explícito de + los poseedores de los derechos de autor. + infringement_2_html: Si usted cree que algún material con derechos de autor + ha sido incorrectamente agregado a la base de datos de OpenStreetMap o a + este sitio, consulte nuestro procedimiento + de descolgado o preséntelo directamente en nuestra página + de presentación en línea. + trademarks_title_html: Marcas registradas + trademarks_1_html: OpenStreetMap, el logotipo de la lupa y «State of the Map» + son marcas registradas de la Fundación OpenStreetMap. Si tienes preguntas + sobre su uso, consulta nuestra normativa + de marcas registradas. index: js_1: Está usando un navegador que no soporta o tiene desactivado JavaScript js_2: OpenStreetMap utiliza JavaScript para mostrar su mapa @@ -1520,6 +1381,115 @@ es: id_not_configured: iD no ha sido configurado no_iframe_support: Su navegador no soporta iframes HTML, que son necesarios para esta funcionalidad. + export: + title: Exportar + area_to_export: Área a exportar + manually_select: Seleccionar manualmente un área diferente + format_to_export: Formato de exportación + osm_xml_data: Datos OpenStreetMap en formato XML + map_image: Imagen de mapa (muestra la capa estándar) + embeddable_html: HTML integrable + licence: Licencia + export_details: Los datos de OpenStreetMap se encuentran bajo la licencia + Open Database (ODbL) de Open Data Commons. + too_large: + advice: 'Si la exportación anterior falla, por favor considere usar una de + las fuentes que se enumeran a continuación:' + body: Esta área es demasiado grande para ser exportada como datos XML de OpenStreetMap. + Por favor, acérquese o seleccione un área más pequeña, o utilice una de + las siguientes fuentes para la descarga de datos masiva. + planet: + title: Planeta OSM + description: Copias actualizadas regularmente de la base de datos completa + de OpenStreetMap + overpass: + title: Overpass API + description: Descargar este cuadro delimitador desde una réplica de la base + de datos de OpenStreetMap + geofabrik: + title: Descargas de Geofabrik + description: Extractos actualizados regularmente de los continentes, países, + y ciudades seleccionadas + metro: + title: Extractos de Metro + description: Extractos de las ciudades principales del mundo y sus alrededores + other: + title: Otras fuentes + description: Fuentes adicionales que aparecen en la wiki de OpenStreetMap + options: Opciones + format: Formato + scale: Escala + max: máx. + image_size: Tamaño de la imagen + zoom: Ampliación + add_marker: Añadir un marcador al mapa + latitude: 'Lat:' + longitude: 'Lon:' + output: Resultado + paste_html: Pegar HTML para insertar en sitio web + export_button: Exportar + fixthemap: + title: Reportar un problema / corregir el mapa + how_to_help: + title: Cómo ayudar + join_the_community: + title: Unirse a la comunidad + explanation_html: Si has notado un problema con nuestros datos del mapa, + por ejemplo un camino no encontrado o tu dirección, la mejor manera de + proceder es unirse a la comunidad de OpenStreetMap y añadir o corrigir + los datos por ti mismo. + add_a_note: + instructions_html: |- + Simplemente haz clic en o el mismo icono en la pantalla del mapa. + Esto agregará un marcador para el mapa, que puedes mover + arrastrándolo. Agrega tu mensaje y luego haz clic en guardar y otros usuarios lo investigarán. + other_concerns: + title: Otras preocupaciones + explanation_html: |- + Si tienes preocupaciones sobre cómo se están utilizando nuestros datos o sobre el contenido, consulta nuestra + página de derechos de autor para obtener más información legal, o contacta con el grupo de trabajo OSMF apropiado. + help: + title: Cómo obtener ayuda + introduction: OpenStreetMap tiene varios recursos para aprender sobre el proyecto, + preguntando y contestando preguntas, y colaborativamente discutir y documentar + temas de cartografía. + welcome: + url: /welcome + title: Le damos la bienvenida a OSM + description: Comenzar con esta guía rápida que cubre lo básico de OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/ES:Beginners%27_guide + title: Guía del principiante + description: Guía para principiantes, mantenida por la comunidad. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Hacer una pregunta o buscar respuestas en el sitio de preguntas + y respuestas de OSM. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Listas de correo + description: Pregunta o discute temas interesantes de un amplio abanico de + listas de correo temáticas o regionales. + forums: + url: http://forum.openstreetmap.org/ + title: Foros + description: Preguntas y discusiones para aquellos que prefieren una interfaz + del estilo cartelera de anuncios. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Chat interactivo en muchos idiomas diferentes y sobre muchos + temas. + switch2osm: + url: https://switch2osm.org/ + title: Migra a OSM + description: Ayuda para las empresas y organizaciones que migran a mapas y + a otros servicios, basados en OpenStreetMap. + wiki: + url: https://wiki.openstreetmap.org/wiki/ES:Main_Page + title: wiki.openstreetmap.org + description: Explora el wiki para obtener documentación detallada de OSM. sidebar: search_results: Resultados de la búsqueda close: Cerrar @@ -1620,6 +1590,57 @@ es: image: Imagen alt: Texto alternativo url: URL + welcome: + title: ¡Bienvenido! + introduction_html: Bienvenido a OpenStreetMap, el mapa libre y editable del + mundo. Ahora que usted está registrado, está todo listo para comenzar a mapear. + He aquí una guía rápida con las cosas más importantes que usted necesita saber. + whats_on_the_map: + title: Qué hay en el mapa + on_html: OpenStreetMap es un lugar para el mapeo de las cosas que son reales + y actuales - esto incluye millones de edificios, carreteras, y otros + detalles acerca de lugares. Puede mapear cualquier característica de la + vida real que es interesante para usted. + off_html: Lo que no se incluye son datos basados en opiniones (por + ejemplo, valoraciones), características históricas que ya no existen sobre + el terreno o hipotéticas, ni datos provenientes de fuentes protegidas por + derechos de autor. A menos que tenga un permiso especial, no copie de mapas + en línea o en papel. + basic_terms: + title: Términos básicos para mapear + paragraph_1_html: OpenStreetMap tiene su propia jerga. Estas son algunas palabras + clave que le pueden ser útiles. + editor_html: Un editor es un programa o sitio web que puede + utilizar para editar el mapa. + node_html: Un nodo es un punto en el mapa, como un restaurante + o un árbol. + way_html: Una vía es una línea o área, como una carretera, + arroyo, lago o edificio. + tag_html: Una etiqueta es un poco de información acerca de + un nodo o vía, como un nombre de restaurante o un límite de velocidad de + la carretera. + rules: + title: Reglas + paragraph_1_html: OpenStreetMap tiene pocas reglas formales, pero esperamos + que todos los participantes colaboraren y se comuniquen con la comunidad. + Si estás considerando alguna actividad que no sea la edición manual, lee + y sigue las instrucciones sobre importaciones + y ediciones + automatizadas. + questions: + title: ¿Alguna pregunta? + paragraph_1_html: |- + OpenStreetMap tiene varios recursos para aprender sobre el proyecto, preguntando y contestando preguntas, y colaborativamente discutir y documentar temas de cartografía. + Obtenga ayuda aquí. + start_mapping: Comenzar a mapear + add_a_note: + title: ¿No tiene tiempo para editar? ¡Añada una nota! + paragraph_1_html: Si sólo desea corregir algo pequeño y no tiene tiempo para + registrarse y aprender a editar, es fácil añadir una nota. + paragraph_2_html: 'Sólo tiene que ir a el mapa + y hacer clic en el icono de nota: . Esto + añadirá un marcador en el mapa, que se puede mover arrastrando. Agregue + su mensaje, haga clic en guardar y otros mapeadores investigarán.' trace: visibility: private: Privado (solo compartido como anónimo, puntos no ordenados) @@ -1662,6 +1683,7 @@ es: trace_header: upload_trace: Subir una traza see_all_traces: Ver todas las trazas + see_my_traces: Ver mis rastros traces_waiting: one: Tienes %{count} traza esperando por subir. Por favor, considera esperar a que esta termine antes de subir más, para no bloquear la cola a otros @@ -1712,10 +1734,11 @@ es: map: mapa list: public_traces: Trazas GPS públicas + my_traces: Mis rastos de GPS public_traces_from: Trazas GPS públicas de %{user} description: Explorar los itinerarios GPS recién subidos tagged_with: etiquetado con %{tags} - empty_html: No hay nada aquí todavía. Sube una nueva + empty_html: Todavía no hay nada aquí. Sube una nueva traza o aprende más sobre trazas GPS en la página wiki. delete: @@ -1751,7 +1774,7 @@ es: accede a la web para ver los Términos de Contribución. No es necesario aceptar, pero debes conocerlos. oauth: - oauthorize: + authorize: title: Autorizar el acceso a su cuenta request_access: La aplicación %{app_name} está solicitando acceso a su cuenta, %{user}. Por favor, revise si quiere que la aplicación tenga las siguientes @@ -1765,11 +1788,11 @@ es: allow_write_gpx: subir trazas GPS. allow_write_notes: cambiar notas. grant_access: Otorgar acceso - oauthorize_success: + authorize_success: title: Solicitud de autorización permitida allowed: Usted ha concedido el acceso a la aplicación %{app_name} a su cuenta. verification: El código de verificación es %{code}. - oauthorize_failure: + authorize_failure: title: Falló la solicitud de autorización denied: Usted ha negado el acceso a la aplicación %{app_name} a su cuenta. invalid: La ficha de autorización no es válida. @@ -1870,7 +1893,7 @@ es: title: Iniciar sesión con OpenID alt: Iniciar sesión con una URL OpenID google: - title: Iniciar sesión con Google + title: Acceder con Google alt: Iniciar sesión con una OpenID de Google facebook: title: Inicia sesión con Facebook @@ -1888,10 +1911,10 @@ es: title: Iniciar sesión con Yahoo alt: Iniciar sesión con una OpenID de Yahoo wordpress: - title: Iniciar sesión con Wordpress + title: Acceder con Wordpress alt: Iniciar sesión con una OpenID de Wordpress aol: - title: Iniciar sesión con AOL + title: Acceder con AOL alt: Iniciar sesión con una OpenID de AOL logout: title: Salir @@ -2014,6 +2037,7 @@ es: if set location: Configure su lugar de origen en la página %{settings_link} para ver los usuarios cercanos. settings_link_text: preferencias + my friends: Mis amigos no friends: No has añadido ningún amigo aún. km away: '%{count} km de distancia' m away: '%{count} m de distancia' @@ -2073,7 +2097,7 @@ es: botón inferior. Desde la migración a la API 0.6, sólo los usuarios públicos pueden editar el mapa (más detalles aquí)
      • Su dirección de correo no será revelada por el - hecho de ser público.
      • Esta acción no puede ser revertida y todos + hecho de ser público.
      • Esta acción no puede ser deshecha y todos los nuevos usuarios son públicos por omisión.
      contributor terms: heading: 'Términos de Colaborador:' @@ -2218,7 +2242,7 @@ es: confirm: Confirmar fail: No se pudo revocar la función `%{role}' del usuario `%{name}'. Por favor, comprueba que el usuario y la función sean válidos. - user_block: + user_blocks: model: non_moderator_update: Debes ser un moderador para poder crear o actualizar un bloqueo. @@ -2285,20 +2309,6 @@ es: period: one: 1 hora other: '%{count} horas' - partial: - show: Mostrar - edit: Editar - revoke: Revocar - confirm: ¿Lo confirmas? - display_name: Usuario bloqueado - creator_name: Creador - reason: Razón del bloqueo - status: Estado - revoker_name: Revocado por - not_revoked: (no revocado) - showing_page: Página %{page} - next: Siguiente » - previous: « Anterior helper: time_future: Termina en %{time}. until_login: Activo hasta que el usuario acceda. @@ -2330,8 +2340,22 @@ es: revoker: 'Revocador:' needs_view: El usuario tiene que iniciar sesión antes de que este bloqueo sea eliminado - note: - description: + block: + not_revoked: (no revocado) + show: Mostrar + edit: Editar + revoke: Revocar + blocks: + display_name: Usuario bloqueado + creator_name: Creador + reason: Razón del bloqueo + status: Estado + revoker_name: Revocado por + showing_page: Página %{page} + next: Siguiente » + previous: « Anterior + notes: + comment: opened_at_html: Creado hace %{when} opened_at_by_html: Creado hace %{when} por %{user} commented_at_html: Actualizado hace %{when} @@ -2461,10 +2485,17 @@ es: distance: Distancia errors: no_route: No se pudo encontrar una ruta entre esos dos lugares. - no_place: Lo sentimos - no se pudo encontrar ese lugar. + no_place: No se pudo localizar «%{place}». instructions: continue_without_exit: Continuar en %{name} slight_right_without_exit: Gire un poco a la derecha hacia %{name} + offramp_right: Use la rampa de la derecha + offramp_right_with_exit: Use la salida %{exit} de la derecha + offramp_right_with_exit_name: Tome la salida %{exit} a la derecha hacia %{name} + offramp_right_with_exit_directions: Toma la salida %{exit} a la derecha hacia + %{directions} + offramp_right_with_exit_name_directions: Toma la salida %{exit} a la derecha + hacia %{name}, en dirección %{directions} offramp_right_with_name: Tome la salida a la derecha hacia %{name} offramp_right_with_directions: Toma la salida a la derecha hacia %{directions} onramp_right_without_exit: Gira a la derecha en la salida hacia %{name} @@ -2518,7 +2549,7 @@ es: show_address: Mostrar dirección query_features: Consultar características centre_map: Centrar el mapa aquí - redaction: + redactions: edit: description: Descripción heading: Editar redacción diff --git a/config/locales/et.yml b/config/locales/et.yml index c63df8a1a..b4ff26386 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -337,61 +337,15 @@ et: ago: '%{ago} tagasi' newer_comments: Uuemad kommentaarid older_comments: Vanemad kommentaarid - export: - title: Eksportimine - start: - area_to_export: Eksporditav ala - manually_select: Vali käsitsi teine ala - format_to_export: Eksporditav vorming - osm_xml_data: OpenStreetMapi andmed XML-kujul - map_image: Kaardi pilt (kuvab tavakaardi) - embeddable_html: Põimitav HTML - licence: Litsents - export_details: OpenStreetMapi andmed on avaldatud litsentsi Open - Data Commons Open Database License (ODbL) tingimustel. - too_large: - advice: 'Kui ülaltoodu eksportimine ebaõnnestub, siis kasuta palun ühte alljärgnevatest - allikatest:' - body: See ala on liiga suur, et eksportida OpenStreetMapi andmeid XML-kujul. - Palun suurenda või vali väiksem ala või kasuta üht allpool loetletud allikatest, - et laadida alla suuri andmehulki. - planet: - title: Planet OSM - description: Regulaarselt uuendatavad koopiad tervest OpenStreetMapi andmebaasist - overpass: - title: Overpass API - description: Laadi alla piiritletud ala OpenStreetMapi andmebaasi peegelserverist - geofabrik: - title: Geofabriki allalaadimised - description: Regulaarselt uuendatavad tõmmised kontinentidest, riikidest - ja valikulistest linnadest - metro: - title: Metro tõmmised - description: Tõmmised maailma suurematest linnadest ja nende ümbruskondadest - other: - title: Muud allikad - description: Täiendavad allikad on välja toodud OpenStreetMapi vikis - options: Sätted - format: 'Vorming:' - scale: Mõõtkava - max: maks. - image_size: Pildi suurus - zoom: Suurendus - add_marker: Lisa kaardile kohamärk - latitude: 'Laius:' - longitude: 'Pikkus:' - output: Väljund - paste_html: Kopeeri ja lisa see HTML-kood oma veebilehele. - export_button: Ekspordi geocoder: search: title: - latlon: Sisemised tulemused - ca_postcode: Geocoder.CA tulemused - osm_nominatim: OpenStreetMap - Nominatimi tulemused + latlon: Sisemised tulemused + ca_postcode: Geocoder.CA tulemused + osm_nominatim: OpenStreetMap + Nominatimi tulemused geonames: GeoNamesi tulemused - osm_nominatim_reverse: OpenStreetMap + osm_nominatim_reverse: OpenStreetMap Nominatimi tulemused geonames_reverse: GeoNamesi tulemused search_osm_nominatim: @@ -786,7 +740,7 @@ et: level10: 10. järgu piir description: title: - osm_nominatim: Asukoht OpenStreetMap + osm_nominatim: Asukoht OpenStreetMap Nominatimist geonames: Asukoht teenusest GeoNames types: @@ -844,264 +798,6 @@ et: text: Anneta learn_more: Lisateave more: Veel - license_page: - foreign: - title: Info selle tõlke kohta - text: Kui selle tõlgitud lehekülje ja %{english_original_link} vahel on vastuolu, - siis on ingliskeelne tekst ülimuslik. - english_link: ingliskeelse originaali - native: - title: Sellest lehest - text: Sa vaatad ingliskeelset versiooni autoriõiguste lehest. Sa võid minna - tagasi selle lehe %{native_link} juurde või lõpetada autoriõiguste lugemise - ja %{mapping_link}. - native_link: eestikeelse versiooni - mapping_link: alustada kaardistamist - legal_babble: - title_html: Autoriõigused ja litsents - intro_1_html: |- - OpenStreetMapi® andmed on avaandmed, mille - OpenStreetMap Foundation (OSMF) on avaldanud litsentsi Open Data Commons Open Database License (ODbL) all. - intro_2_html: |- - Tohid andmeid vabalt kopeerida, levitada, edastada ja kohandada, - kui viitad OpenStreetMapile ja selle kaastöölistele. - Kui muudad andmeid või teed neist tuletise, siis tohid - tulemust levitada ainult sama litsentsi tingimustel. - Sinu õigusi ja kohustusi selgitab litsentsi täistekst. - intro_3_html: |- - Kaardipaanide kujutised ja dokumentatsioon kuuluvad Creative Commonsi - litsentsi "Autorile viitamine + jagamine samadel tingimustel 2.0" (CC BY-SA) alla. - credit_title_html: OpenStreetMapile viitamine - credit_1_html: |- - Nõuame, et kasutad omistamiseks teksti “© OpenStreetMapi - kaastöölised”. - credit_2_html: |- - Samuti pead selgelt välja tooma, et andmed kuuluvad litsentsi Open - Database License alla ja kui kasutatakse kaardipaane, siis et kujutised - kuuluvad litsentsi CC BY-SA alla. Üks võimalus selleks on linkida - siia autoriõiguse leheküljele. - Teine võimalus ja samas ka nõue, kui levitad OSM-i - andmete kujul, on nimetada litsentsid ja linkida otse neile. Esitusvormis, - kus lingid pole võimalikud (nt trükises), soovitame suunata lugejad - aadressidele openstreetmap.org (võimalik, et laiendades teksti - "OpenStreetMap" täisaadressiks), opendatacommons.org ja - kui vaja, siis ka aadressile creativecommons.org. - credit_3_html: |- - Sirvitaval elektroonilisel kaardil peaks viide olema näha kaardi nurgas. - Näiteks: - attribution_example: - alt: Näide, kuidas tunnustada OpenStreetMapi veebilehel - title: Omistamise näide - more_title_html: Lisateave - more_1_html: Loe OSMF-i litsentsileheküljelt - veel andmete kasutamise kohta ja sellest, kuidas meile viidata. - more_2_html: |- - Kuigi OpenStreetMapi andmed on avaandmed, ei saa me pakkuda - kaardi juures tasuta API-t kolmandatele osapooltele. - Vaata meie API kasutusreegleid, - kaardipaanide kasutusreegleid - ja Nominatimi kasutusreegleid. - contributors_title_html: Meie kaastöölised - contributors_intro_html: |- - Meie kaastöölised on tuhanded üksikisikud. Samuti oleme kaasanud - vabalt litsentseeritud andmeid riiklikest kaardistusteenistustest - ja muudest allikatest, sealhulgas: - contributors_at_html: "Austria: Sisaldab andmeid\nViini - linnast \n(CC - BY tingimustel),\nVorarlbergi - liidumaast ja\nTirooli liidumaast (CC - BY AT tingimustel koos õiendustega)." - contributors_ca_html: |- - Kanada: Sisaldab andmekogude - GeoBase®, GeoGratis (© Kanada loodusvarade - ministeerium), CanVec (© Kanada loodusvarade - ministeerium) ja StatCan (Kanada statistikaameti - geograafia osakond) andmeid. - contributors_fi_html: |- - Soome: Sisaldab andmeid, mis on pärit - Soome riikliku maa-ameti topograafia andmekogust - ja teistest andmestikest. Andmed on kasutatavad NLSFI litsentsi tingimustel. - contributors_fr_html: 'Prantsusmaa: Sisaldab kaardiandmeid, - mis on pärit maksuametist (Direction Générale des Impôts).' - contributors_nl_html: |- - Holland: Sisaldab ettevõtte © AND andmeid - (2007, www.and.com) - contributors_nz_html: |- - Uus-Meremaa: Sisaldab kaardiandmeid - asutusest Land Information New Zealand. Krooni autoriõigus kaitstud. - contributors_si_html: |- - Sloveenia: Sisaldab - mõõdistus- ja kaardistusteenistuse ning - põllu-, metsa- ja toidumajandusministeeriumi andmeid - (Sloveenia avalik informatsioon). - contributors_za_html: |- - LAV: Sisaldab andmeid allikast - Chief Directorate: - National Geo-Spatial Information, õigused kuuluvad riigile. - contributors_gb_html: |- - Suurbritannia: Sisaldab Ordnance - Survey andmeid © krooni autoriõigus ja andmebaasi - õigused kaitstud seisuga detsember 2010. - contributors_footer_1_html: |- - Täpsemat teavet nendest ja teistest allikatest, mida on kasutatud - OpenStreetMapi täiendamiseks, leiad - kaastööliste leheküljelt OpenStreetMapi vikis. - contributors_footer_2_html: |- - Andmete kasutamine OpenStreetMapi koosseisus ei tähenda, et - algsete andmete pakkuja toetab OpenStreetMapi, pakub mingit tagatist või - võtab endale mingeid kohustusi. - infringement_title_html: Autoriõiguste rikkumine - infringement_1_html: |- - OSM-i kaastöölistele on öeldud, et nad ei lisaks kunagi andmeid, - mis pärinevad autoriõigusega kaitstud allikatest (nt Google Maps või trükikaardid), - kui neil puudub autoriõiguse valdaja selgesõnaline luba. - infringement_2_html: |- - Kui usud, et OpenStreetMapi andmebaasi või sellele saidile on lisatud sobimatult - autoriõigusega kaitstud materjali, siis palun juhindu - eemaldamise protseduurist - või täida vastaval leheküljel vorm, et kaebus esitada. - trademarks_title_html: Kaubamärgid - trademarks_1_html: OpenStreetMap, suurendusklaasi logo ja State of the Map on - OpenStreetMap Foundationi registreeritud kaubamärgid. Kui sul on nende märkide - kasutamise kohta küsimusi, siis saada küsimused litsentsitöörühmale. - welcome_page: - title: Tere tulemast! - introduction_html: Tere tulemast OpenStreetMappi, vabasse ja muudetavasse maailmakaarti. - Registreerumine on nüüd tehtud ja sa võid alustada kaardistamist. Siin on lühiülevaade - kõige olulisematest asjadest, mida peaksid teadma. - whats_on_the_map: - title: Mis on kaardil? - on_html: OpenStreetMap on koht, kus saab kaardile kanda objekte mis on reaalselt - antud hetkel olemas - nendeks on miljonid hooned, teed ja muud üksikasjad. - Sa võid kaardile kanda suvalisi reaalselt eksisteerivaid üksikasju, mis sulle - huvi pakuvad. - off_html: Kaart ei sisalda arvamuslikke andmeid, nagu näiteks hinnangud, - ajaloolisi või hüpoteetilisi omadusi, ega andmeid autoriõigustega kaitstud - allikatest. Kui sul puudub eriluba siis ära kopeeri võrgus olevatelt või paberkaartidelt. - basic_terms: - title: Põhilised mõisted kaardistamisel - paragraph_1_html: OpenStreetMapil on omad erialased mõisted. Siin on mõned peamised - mõisted, mida tasub meelde jätta. - editor_html: Redaktor on programm või veebileht, mida saab - kasutada kaardi redigeerimiseks. - node_html: Sõlm on punkt kaardil, nagu näiteks restoran või - puu. - way_html: Joon on joon või ala ja tähistab näiteks teed, oja, - järve või hoonet. - tag_html: Silt sisaldab väikest hulka andmeid sõlme või joone - kohta, näiteks restorani nime või tee kiiruspiirangut. - rules: - title: Reeglid! - paragraph_1_html: "OpenStreetMapil on vähe formaalseid reegleid kuid me eeldame, - et kõik osavõtjad teevad koostööd ja suhtlevad kogukonnaga. Kui plaanid tegevusi, - mis ei ole käsitsi redigeerimine, siis loe \nimportimise - ja \nautomaatsete - muudatuste juhendeid." - questions: - title: Tekkis küsimusi? - paragraph_1_html: |- - OpenStreetMap pakub erinevaid võimalusi projekti tundmaõppimiseks, küsimuste esitamiseks ja vastamiseks ning kaardistamise teemade üle üheskoos arupidamiseks ja dokumenteerimiseks. - Leia abi siit. - start_mapping: Alusta kaardistamist - add_a_note: - title: Pole aega kaarti muuta? Lisa märkus! - paragraph_1_html: Kui soovid teha väikest parandust ja sul pole aega registreeruda - ning õppida, kuidas kaarti muuta, siis lisa lihtsalt kaardile märkus. - paragraph_2_html: |- - See on lihtne! Mine kaardile ja kliki märkuse ikoonile: - . See lisab kaardile markeri, mida sa saad liigutada seda hiirega lohistades. Lisa oma sõnum, seejärel kliki "Salvesta" ja teised kaardistajad näevad seda. - fixthemap: - title: Probleemist teatamine / kaardi parandamine - how_to_help: - title: Kuidas aidata - join_the_community: - title: Liitu kogukonnaga - explanation_html: Kui oled märganud probleemi meie kaardi andmetes, näiteks - puuduvat teed või enda aadressi, siis parim viis selle lahendamiseks on - liituda OpenStreetMapi kogukonnaga ja muuta või parandada andmed ise. - add_a_note: - instructions_html: |- - Kliki või samale ikoonile kaardivaates. - See lisab kaardile markeri, mida sa saad liigutada seda hiirega lohistades. Lisa oma sõnum, seejärel kliki "Salvesta" ja teised kaardistajad näevad seda. - other_concerns: - title: Muud asjad - explanation_html: |- - Kui sul on küsimusi meie andmete kasutamise või sisu kohta, siis palun pöördu juriidilise info - saamiseks meie autoriõiguste lehele või võta ühendust sobiva OSMF töögrupiga. - help_page: - title: Abikeskus - introduction: OpenStreetMap pakub erinevaid võimalusi projekti tundmaõppimiseks, - küsimuste esitamiseks ja vastamiseks ning kaardistamise teemade üle üheskoos - arupidamiseks ja dokumenteerimiseks. - welcome: - url: /welcome - title: Tere tulemast OSMi - description: Alusta selle kiirjuhendiga, mis hõlmab OpenStreetMapi põhitõdesid. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Et:Beginners%27_guide - title: Juhend algajatele - description: Kogukonna poolt loodud juhend algajatele. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Esita küsimus või otsi vastuseid OSMi küsimuste ja vastuste veebilehel. - mailing_lists: - title: Postiloendid - description: Esita küsimusi või arutle huvi pakkuvatel teemadel laias teemade - ringis või kohalikes postiloendites. - forums: - title: Foorumid - description: Küsimused ja arutelud nendele, kes eelistavad teadetetahvlile sarnanevat - kasutajaliidest. - irc: - title: IRC - description: Interaktiivne suhtluskanal paljudes keeltes ja paljudel teemadel. - switch2osm: - title: switch2osm - description: Abi ettevõtetele ja organisatsioonidele, kes plaanivad kasutusele - võtta OpenStreetMapil põhinevad kaardid ja muud teenused. - wiki: - url: http://wiki.openstreetmap.org/wiki/Et:Main_Page - title: wiki.openstreetmap.org - description: Sirvi vikis põhjalikumat OSM dokumentatsiooni. - about_page: - next: Edasi - copyright_html: ©OpenStreetMapi
      kaastöölised - used_by: '%{name} varustab kaardiandmetega tuhandeid veebisaite, mobiilside rakendusi - ja riistvara seadmeid' - lede_text: OpenStreetMap on loodud kaardistajate kogukonna poolt, kes täiendavad - ja hooldavad andmeid teede, radade, kohvikute, raudteejaamade ja paljude teiste - objektide kohta üle kogu maailma. - local_knowledge_title: Kohalik teave - local_knowledge_html: OpenStreetMap asetab rõhu kohalikule teabele. Kaastöölised - kasutavad aerofotosid, GPS-seadmeid ja iseloodud kaarte kontrollimaks, et OSM - oleks täpne ja ajakohane. - community_driven_title: Kogukonna põhine - community_driven_html: |- - OpenStreetMapi kogukond on laiahaardeline ja entusiastlik ning suureneb iga päevaga. - Meie kaastöölisteks on innukad kaardistajad, GIS-spetsialistid, tehnikud, kes - hoiavad töös OSM-i servereid, humanitaarabitöötajad, kes kaardistavad õnnetuspiirkondi, - ja paljud teised. - Et kogukonnaga tutvuda, vaata - OpenStreetMapi blogi, - kasutajate päevikuid, - kogukonnablogisid ja - OSM Foundationi veebisaiti. - open_data_title: Avatud andmed - open_data_html: |- - OpenStreetMap on avatud andmed: sa võid neid vabalt kasutada igal eesmärgil - seni kuni sa tunnustad OpenStreetMapi ja selle kaastööliseid. Kui sa muudad või - või lood midagi nende andmete põhjal, siis võid sa oma tulemust levitada ainult - sama litsentsi alusel. Täpsemat infot vaata lehelt Autoriõigused ja litsents. - legal_title: Juriidiline teave - legal_html: "Seda saiti ja paljusid teisi seotud teenuseid haldab ametlikult \nOpenStreetMap Foundation (OSMF) \nkogukonna - nimel. Kõigis OSMF-i hallatavates teenustes kehtivad meie\nkasutustingimused - ja andmekaitsereeglid.\n
      - \nPalun võta ühendust OSMF-iga,\nkui - sul tekib küsimusi litsentseerimise, autoriõiguste või muude õiguslike probleemide - kohta." - partners_title: Partnerid notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} kommenteeris päeviku sissekannet' @@ -1220,7 +916,7 @@ et: title: Saabunud kirjad my_inbox: Minu postkast outbox: Saadetud kirjad - messages: Sul on %{new_messages} ja %{old_messages} + messages: Sul on %{new_messages} ja %{old_messages}. new_messages: one: '%{count} uus kiri' other: '%{count} uut kirja' @@ -1288,6 +984,169 @@ et: delete: deleted: Sõnum kustutatud site: + about: + next: Edasi + copyright_html: ©OpenStreetMapi
      kaastöölised + used_by: '%{name} varustab kaardiandmetega tuhandeid veebisaite, mobiilirakendusi + ja riistvaraseadmeid.' + lede_text: OpenStreetMapi koostab kaardistajate kogukond, mis täiendab ja haldab + andmeid teede, radade, kohvikute, raudteejaamade ja paljude teiste objektide + kohta üle kogu maailma. + local_knowledge_title: Kohalik teave + local_knowledge_html: OpenStreetMapi rõhuasetus on kohalikul teabel. Kaastöölised + kasutavad aerofotosid, GPS-seadmeid ja muid välikaardistuse vahendeid, et + kontrollida OSMi andmete täpsust ja ajakohasust. + community_driven_title: Kogukonnapõhine + community_driven_html: |- + OpenStreetMapi kogukond on laiahaardeline ja entusiastlik ning suureneb iga päevaga. + Meie kaastöölisteks on innukad kaardistajad, GIS-spetsialistid, tehnikud, kes + hoiavad töös OSM-i servereid, humanitaarabitöötajad, kes kaardistavad õnnetuspiirkondi, + ja paljud teised. + Et kogukonnaga tutvuda, vaata + OpenStreetMapi blogi, + kasutajate päevikuid, + kogukonnablogisid ja + OSM Foundationi veebisaiti. + open_data_title: Avaandmed + open_data_html: |- + OpenStreetMapi andmed on avaandmed. See tähendab, et tohid andmeid vabalt + kasutada igal eesmärgil, kui viitad OpenStreetMapile ja selle kaastöölistele. + Kui muudad andmeid või lood nende põhjal midagi uut, siis tohid tulemust levitada + ainult sama litsentsi alusel. Üksikasjad leiad + autoriõiguste ja litsentsi lehelt. + legal_title: Juriidiline teave + legal_html: "Seda saiti ja paljusid teisi seotud teenuseid haldab ametlikult + \nOpenStreetMap Foundation (OSMF) + \nkogukonna nimel. Kõigis OSMF-i hallatavates teenustes kehtivad meie\nkasutustingimused + ja andmekaitsereeglid.\n
      + \nPalun võta ühendust OSMF-iga,\nkui + sul on küsimusi litsentseerimise, autoriõiguste või muude õiguslike probleemide + kohta.\n
      \nOpenStreetMap, suurendusklaasi logo ja State of the Map on OSMF-i registreeritud + kaubamärgid." + partners_title: Partnerid + copyright: + foreign: + title: Info selle tõlke kohta + text: Kui selle tõlgitud lehekülje ja %{english_original_link} vahel on vastuolu, + siis on ingliskeelne tekst ülimuslik. + english_link: ingliskeelse originaali + native: + title: Sellest lehest + text: Sa vaatad ingliskeelset versiooni autoriõiguste lehest. Sa võid minna + tagasi selle lehe %{native_link} juurde või lõpetada autoriõiguste lugemise + ja %{mapping_link}. + native_link: eestikeelse versiooni + mapping_link: alustada kaardistamist + legal_babble: + title_html: Autoriõigused ja litsents + intro_1_html: |- + OpenStreetMapi® andmed on avaandmed, mille + OpenStreetMap Foundation (OSMF) on avaldanud litsentsi Open Data Commons Open Database License (ODbL) all. + intro_2_html: |- + Tohid andmeid vabalt kopeerida, levitada, edastada ja kohandada, + kui viitad OpenStreetMapile ja selle kaastöölistele. + Kui muudad andmeid või teed neist tuletise, siis tohid + tulemust levitada ainult sama litsentsi tingimustel. + Sinu õigusi ja kohustusi selgitab litsentsi täistekst. + intro_3_html: |- + Kaardipaanide kujutised ja dokumentatsioon kuuluvad Creative Commonsi + litsentsi "Autorile viitamine + jagamine samadel tingimustel 2.0" (CC BY-SA) alla. + credit_title_html: OpenStreetMapile viitamine + credit_1_html: |- + Nõuame, et kasutad omistamiseks teksti “© OpenStreetMapi + kaastöölised”. + credit_2_html: |- + Samuti pead selgelt välja tooma, et andmed kuuluvad litsentsi Open + Database License alla ja kui kasutatakse kaardipaane, siis et kujutised + kuuluvad litsentsi CC BY-SA alla. Üks võimalus selleks on linkida + siia autoriõiguse leheküljele. + Teine võimalus ja samas ka nõue, kui levitad OSM-i + andmete kujul, on nimetada litsentsid ja linkida otse neile. Esitusvormis, + kus lingid pole võimalikud (nt trükises), soovitame suunata lugejad + aadressidele openstreetmap.org (võimalik, et laiendades teksti + "OpenStreetMap" täisaadressiks), opendatacommons.org ja + kui vaja, siis ka aadressile creativecommons.org. + credit_3_html: |- + Sirvitaval elektroonilisel kaardil peaks viide olema näha kaardi nurgas. + Näiteks: + attribution_example: + alt: Näide, kuidas tunnustada OpenStreetMapi veebilehel + title: Omistamise näide + more_title_html: Lisateave + more_1_html: Loe OSMF-i litsentsileheküljelt + veel andmete kasutamise kohta ja sellest, kuidas meile viidata. + more_2_html: |- + Kuigi OpenStreetMapi andmed on avaandmed, ei saa me pakkuda + kaardi juures tasuta API-t kolmandatele osapooltele. + Vaata meie API kasutusreegleid, + kaardipaanide kasutusreegleid + ja Nominatimi kasutusreegleid. + contributors_title_html: Meie kaastöölised + contributors_intro_html: |- + Meie kaastöölised on tuhanded üksikisikud. Samuti oleme kaasanud + vabalt litsentseeritud andmeid riiklikest kaardistusteenistustest + ja muudest allikatest, sealhulgas: + contributors_at_html: "Austria: Sisaldab andmeid\nViini + linnast \n(CC + BY tingimustel),\nVorarlbergi + liidumaast ja\nTirooli liidumaast (CC + BY AT tingimustel koos õiendustega)." + contributors_ca_html: |- + Kanada: Sisaldab andmekogude + GeoBase®, GeoGratis (© Kanada loodusvarade + ministeerium), CanVec (© Kanada loodusvarade + ministeerium) ja StatCan (Kanada statistikaameti + geograafia osakond) andmeid. + contributors_fi_html: |- + Soome: Sisaldab andmeid, mis on pärit + Soome riikliku maa-ameti topograafia andmekogust + ja teistest andmestikest. Andmed on kasutatavad NLSFI litsentsi tingimustel. + contributors_fr_html: 'Prantsusmaa: Sisaldab kaardiandmeid, + mis on pärit maksuametist (Direction Générale des Impôts).' + contributors_nl_html: |- + Holland: Sisaldab ettevõtte © AND andmeid + (2007, www.and.com) + contributors_nz_html: |- + Uus-Meremaa: Sisaldab kaardiandmeid + asutusest Land Information New Zealand. Krooni autoriõigus kaitstud. + contributors_si_html: |- + Sloveenia: Sisaldab + mõõdistus- ja kaardistusteenistuse ning + põllu-, metsa- ja toidumajandusministeeriumi andmeid + (Sloveenia avalik informatsioon). + contributors_za_html: |- + LAV: Sisaldab andmeid allikast + Chief Directorate: + National Geo-Spatial Information, õigused kuuluvad riigile. + contributors_gb_html: |- + Suurbritannia: Sisaldab Ordnance + Survey andmeid © krooni autoriõigus ja andmebaasi + õigused kaitstud seisuga detsember 2010. + contributors_footer_1_html: |- + Täpsemat teavet nendest ja teistest allikatest, mida on kasutatud + OpenStreetMapi täiendamiseks, leiad + kaastööliste leheküljelt OpenStreetMapi vikis. + contributors_footer_2_html: |- + Andmete kasutamine OpenStreetMapi koosseisus ei tähenda, et + algsete andmete pakkuja toetab OpenStreetMapi, pakub mingit tagatist või + võtab endale mingeid kohustusi. + infringement_title_html: Autoriõiguste rikkumine + infringement_1_html: |- + OSM-i kaastöölistele on öeldud, et nad ei lisaks kunagi andmeid, + mis pärinevad autoriõigusega kaitstud allikatest (nt Google Maps või trükikaardid), + kui neil puudub autoriõiguse valdaja selgesõnaline luba. + infringement_2_html: |- + Kui usud, et OpenStreetMapi andmebaasi või sellele saidile on lisatud sobimatult + autoriõigusega kaitstud materjali, siis palun juhindu + eemaldamise protseduurist + või täida vastaval leheküljel vorm, et kaebus esitada. + trademarks_title_html: Kaubamärgid + trademarks_1_html: OpenStreetMap, suurendusklaasi logo ja State of the Map + on OpenStreetMap Foundationi registreeritud kaubamärgid. Kui sul on nende + märkide kasutamise kohta küsimusi, siis vaata meie Trademark + Policy">kaubamärgireegleid. index: js_1: Sa kas kasutad veebilehitsejat, mis ei toeta JavaScript'i või sa oled JavaScript'i ära keelanud. @@ -1305,21 +1164,124 @@ et: oma muudatused avalikuks lehel %{user_page}. user_page_link: kasutajaleht anon_edits_link_text: Uuri välja, miks see on nii. - flash_player_required: Sa vajad Flash playerit Potlatchi kasutamiseks. Sa saad - Flash - Playeri laadida alla lehelt Adobe.com. OpenStreetMapi redigeerimiseks - on olemas ka mitmeid + flash_player_required: Sa vajad Flashi esitajat, et kasutada Potlatchi, OpenStreetMapi + Flashi-põhist toimetit. Saad Flash + Playeri alla laadida saidilt Adobe.com. Selleks, et OpenStreetMapi redigeerida, + on olemas ka mitmeid teisi võimalusi. potlatch_unsaved_changes: Sul on salvestamata muudatusi. (Et salvestada Potlatchis peaksid sa tühistama valitud joone või punkti kui sa redigeerid live-režiimis, või kliki Salvesta nuppu, kui see on nähtaval.) - potlatch2_not_configured: Potlatch 2 pole konfigureeritud - lisateavet vaata - palun http://wiki.openstreetmap.org/wiki/The_Rails_Port + potlatch2_not_configured: Potlatch 2 pole häälestatud. Lisateavet vaata palun + asukohast https://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2 potlatch2_unsaved_changes: Sul on salvestamata muudatusi. (Et salvestada programmis Potlatch 2, peaksid klikkima Salvesta nuppu.) id_not_configured: iD ei ole seadistatud no_iframe_support: Antud veebilehitseja ei toeta HTML iframes funktsiooni mis on vajalik antud režiimi toimimiseks. + export: + title: Eksportimine + area_to_export: Eksporditav ala + manually_select: Vali käsitsi teine ala + format_to_export: Eksporditav vorming + osm_xml_data: OpenStreetMapi andmed XML-kujul + map_image: Kaardi pilt (kuvab tavakaardi) + embeddable_html: Põimitav HTML + licence: Litsents + export_details: OpenStreetMapi andmed on avaldatud litsentsi Open + Data Commons Open Database License (ODbL) tingimustel. + too_large: + advice: 'Kui ülaltoodu eksportimine ebaõnnestub, siis kasuta palun ühte alljärgnevatest + allikatest:' + body: See ala on liiga suur, et eksportida OpenStreetMapi andmeid XML-kujul. + Palun suurenda või vali väiksem ala või kasuta üht allpool loetletud allikatest, + et laadida alla suuri andmehulki. + planet: + title: Planet OSM + description: Regulaarselt uuendatavad koopiad tervest OpenStreetMapi andmebaasist + overpass: + title: Overpass API + description: Laadi alla piiritletud ala OpenStreetMapi andmebaasi peegelserverist + geofabrik: + title: Geofabriki allalaadimised + description: Regulaarselt uuendatavad tõmmised kontinentidest, riikidest + ja valikulistest linnadest + metro: + title: Metro tõmmised + description: Tõmmised maailma suurematest linnadest ja nende ümbruskondadest + other: + title: Muud allikad + description: Täiendavad allikad on välja toodud OpenStreetMapi vikis + options: Sätted + format: 'Vorming:' + scale: Mõõtkava + max: maks. + image_size: Pildi suurus + zoom: Suurendus + add_marker: Lisa kaardile kohamärk + latitude: 'Laius:' + longitude: 'Pikkus:' + output: Väljund + paste_html: Kopeeri ja lisa see HTML-kood oma veebilehele. + export_button: Ekspordi + fixthemap: + title: Probleemist teatamine / kaardi parandamine + how_to_help: + title: Kuidas aidata + join_the_community: + title: Liitu kogukonnaga + explanation_html: Kui oled märganud probleemi meie kaardi andmetes, näiteks + puuduvat teed või enda aadressi, siis parim viis selle lahendamiseks on + liituda OpenStreetMapi kogukonnaga ja muuta või parandada andmed ise. + add_a_note: + instructions_html: |- + Kliki või samale ikoonile kaardivaates. + See lisab kaardile markeri, mida sa saad liigutada seda hiirega lohistades. Lisa oma sõnum, seejärel kliki "Salvesta" ja teised kaardistajad näevad seda. + other_concerns: + title: Muud asjad + explanation_html: |- + Kui sul on küsimusi meie andmete kasutamise või sisu kohta, siis palun pöördu juriidilise info + saamiseks meie autoriõiguste lehele või võta ühendust sobiva OSMF-i töörühmaga. + help: + title: Abikeskus + introduction: OpenStreetMap pakub erinevaid võimalusi projekti tundmaõppimiseks, + küsimuste esitamiseks ja vastamiseks ning kaardistamise teemade üle üheskoos + arupidamiseks ja dokumenteerimiseks. + welcome: + url: /welcome + title: Tere tulemast OSMi + description: Alusta selle kiirjuhendiga, mis hõlmab OpenStreetMapi põhitõdesid. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Et:Beginners%27_guide + title: Juhend algajatele + description: Kogukonna hallatav juhend algajatele. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Esita küsimus või otsi vastuseid OSMi küsimuste ja vastuste veebilehel. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Postiloendid + description: Esita küsimusi või arutle huvipakkuvatel teemadel paljudes temaatilistes + või piirkondlikes postiloendites. + forums: + url: http://forum.openstreetmap.org/ + title: Foorumid + description: Küsimused ja arutelud nendele, kes eelistavad teadetetahvlile + sarnanevat kasutajaliidest. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Interaktiivne suhtluskanal paljudes keeltes ja paljudel teemadel. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Abi ettevõtetele ja organisatsioonidele, kes plaanivad kasutusele + võtta OpenStreetMapil põhinevad kaardid ja muud teenused. + wiki: + url: https://wiki.openstreetmap.org/wiki/Et:Main_Page + title: wiki.openstreetmap.org + description: Sirvi vikis OSMi põhjalikumat dokumentatsiooni. sidebar: search_results: Otsingu tulemused close: Sulge @@ -1399,7 +1361,7 @@ et: edit: Muuda preview: Eelvaade markdown_help: - title_html: Parsitud Markdowniga + title_html: Parsitud Markdowniga headings: Pealkirjad heading: Pealkiri subheading: Alapealkiri @@ -1412,6 +1374,53 @@ et: image: Pilt alt: Alternatiivne tekst url: URL + welcome: + title: Tere tulemast! + introduction_html: Tere tulemast OpenStreetMappi, vabasse ja muudetavasse maailmakaarti. + Registreerumine on nüüd tehtud ja sa võid alustada kaardistamist. Siin on + lühiülevaade kõige olulisematest asjadest, mida peaksid teadma. + whats_on_the_map: + title: Mis on kaardil? + on_html: OpenStreetMap on koht, kus saab kaardile kanda objekte mis on reaalselt + antud hetkel olemas - nendeks on miljonid hooned, teed ja muud üksikasjad. + Sa võid kaardile kanda suvalisi reaalselt eksisteerivaid üksikasju, mis + sulle huvi pakuvad. + off_html: Kaart ei sisalda arvamuslikke andmeid, nagu näiteks hinnangud, + ajaloolisi või hüpoteetilisi omadusi, ega andmeid autoriõigustega kaitstud + allikatest. Kui sul puudub eriluba siis ära kopeeri võrgus olevatelt või + paberkaartidelt. + basic_terms: + title: Põhilised mõisted kaardistamisel + paragraph_1_html: OpenStreetMapil on omad erialased mõisted. Siin on mõned + peamised mõisted, mida tasub meelde jätta. + editor_html: Redaktor on programm või veebileht, mida saab + kasutada kaardi redigeerimiseks. + node_html: Sõlm on punkt kaardil, nagu näiteks restoran või + puu. + way_html: Joon on joon või ala ja tähistab näiteks teed, + oja, järve või hoonet. + tag_html: Silt sisaldab väikest hulka andmeid sõlme või joone + kohta, näiteks restorani nime või tee kiiruspiirangut. + rules: + title: Reeglid! + paragraph_1_html: "OpenStreetMapil on vähe formaalseid reegleid, kuid me eeldame, + et kõik osavõtjad teevad koostööd ja suhtlevad kogukonnaga. Kui plaanid + tegevusi, mis ei ole käsitsi redigeerimine, siis loe \nimportimise + ja \nautomaatsete + muudatuste juhendeid." + questions: + title: Tekkis küsimusi? + paragraph_1_html: |- + OpenStreetMap pakub erinevaid võimalusi projekti tundmaõppimiseks, küsimuste esitamiseks ja vastamiseks ning kaardistamise teemade üle üheskoos arupidamiseks ja dokumenteerimiseks. + Leia abi siit. + start_mapping: Alusta kaardistamist + add_a_note: + title: Pole aega kaarti muuta? Lisa märkus! + paragraph_1_html: Kui soovid teha väikest parandust ja sul pole aega registreeruda + ning õppida, kuidas kaarti muuta, siis lisa lihtsalt kaardile märkus. + paragraph_2_html: |- + See on lihtne! Mine kaardile ja kliki märkuse ikoonile: + . See lisab kaardile markeri, mida sa saad liigutada seda hiirega lohistades. Lisa oma sõnum, seejärel kliki "Salvesta" ja teised kaardistajad näevad seda. trace: visibility: private: Privaatne (jagatud ainult anonüümselt, järjestamata punktid) @@ -1451,6 +1460,7 @@ et: trace_header: upload_trace: Lisa GPS-rada see_all_traces: Vaata kõiki GPS-radasid + see_my_traces: Vaata minu radu trace_optionals: tags: Sildid view: @@ -1494,11 +1504,12 @@ et: map: asukoht kaardil list: public_traces: Avalikud GPS-rajad + my_traces: Minu GPS-rajad public_traces_from: Kasutaja %{user} avalikud GPS-rajad description: Viimati üles laaditud GPS-radade sirvimine tagged_with: ', millel on silt %{tags}' empty_html: Siin pole veel midagi. Laadi üles uus rada - või uuri GPS-radade kohta vikileheküljelt. + või uuri GPS-radade kohta vikileheküljelt. application: require_cookies: cookies_needed: Paistab, et sul on küpsised keelatud. Enne jätkamist luba palun @@ -1512,7 +1523,7 @@ et: sisse veebiliidese kaudu, et näha Kaastöötingimusi. Sa ei pea nendega nõustuma, kuid sa pead neid vaatama. oauth: - oauthorize: + authorize: title: Lubada juurdepääs sinu kontole request_access: Rakendus %{app_name} taotleb juurdepääsu sinu kontole %{user}. Palun kontrolli, kas soovid, et rakendusel oleks järgmised võimalused. Võid @@ -1526,11 +1537,11 @@ et: allow_write_gpx: laadida üles GPS-radu. allow_write_notes: muuta märkuseid. grant_access: Luba juurdepääs - oauthorize_success: + authorize_success: title: Autoriseerimise taotlemine on lubatud allowed: Oled andnud rakendusele %{app_name} juurdepääsu oma kontole. verification: Kontrollkood on %{code}. - oauthorize_failure: + authorize_failure: title: Autoriseerimistaotlus ebaõnnestus denied: Oled keelanud rakendusele %{app_name} juurdepääsu oma kontole. invalid: Autoriseerimisluba ei ole kehtiv. @@ -1538,7 +1549,7 @@ et: flash: Oled tühistanud rakenduse %{application} loa. oauth_clients: new: - title: Registreeri uus rakendus + title: Uue rakenduse registreerimine submit: Registreeri edit: title: Redigeeri oma rakendust @@ -1577,7 +1588,7 @@ et: register_new: Registreeri oma rakendus form: name: Nimi - required: Nõutav + required: nõutav url: Põhirakenduse URL callback_url: Tagasihelistamise URL support_url: Toe URL @@ -1679,13 +1690,13 @@ et: html: |-

      Erinevalt teistest kaartidest on OpenStreetMap loodud samade inimeste poolt nagu sina ja igaüks võib seda parandada, täiendada, alla laadida ja kasutada.

      Registreeru, et alustada kaardi täiendamist. Me saadame sulle meili, et saaksid kinnitada oma kasutajakonto.

      - license_agreement: Oma kasutajakonto kinnitamiseks pead nõustuma kaastöö + license_agreement: Oma kasutajakonto kinnitamiseks pead nõustuma kaastöö tingimustega. email address: 'E-posti aadress:' confirm email address: 'Kinnita e-posti aadress:' - not displayed publicly: Sinu aadressi ei näidata avalikult, lisainfot loe meie - privaatsusreeglitest + not displayed publicly: Sinu aadressi ei näidata avalikult, lisateavet loe meie + andmekaitsereeglitest. display name: 'Kuvatav nimi:' display name description: Avalikult kuvatud kasutajanimi. Seda saate muuta hiljem eelistustes. @@ -1756,6 +1767,7 @@ et: if set location: Määra kodu asukoht lehel %{settings_link}, et näha läheduses asuvaid kasutajaid. settings_link_text: seaded + my friends: Minu sõbrad no friends: Sa ei ole lisanud veel ühtegi sõpra. km away: '%{count} kilomeetri kaugusel' m away: '%{count} meetri kaugusel' @@ -1798,23 +1810,23 @@ et: email never displayed publicly: (ei näidata mitte kunagi avalikult) external auth: 'Väline autentimine:' openid: - link: http://wiki.openstreetmap.org/wiki/OpenID + link: https://wiki.openstreetmap.org/wiki/OpenID link text: mis see on? public editing: heading: 'Avalikud seaded:' enabled: Lubatud. Pole anonüümne ja saab andmeid muuta. - enabled link: http://wiki.openstreetmap.org/wiki/Anonymous_edits + enabled link: https://wiki.openstreetmap.org/wiki/Anonymous_edits enabled link text: Mis see on? disabled: Keelatud ja ei saa andmeid muuta, kõik varasemad muudatused on anonüümsed. disabled link text: Miks ma ei saa kaarti töödelda? public editing note: heading: Avalik toimetamine text: Praegu on su muudatused anonüümsed ja inimesed ei saa saata sulle sõnumeid - ega näha sinu asukohta. Et näha, mida sa muutsid ja võimaldada inimestel - sinuga ühendust võtta selle veebilehe kaudu klõpsa alljärgneval nupul. Peale - üleminekut API versioonile 0.6 võivad kaardi andmeid muuta ainult avalikud - kasutajad. (uurige - välja, miks).
      • Sinu elektronposti aadressi ei avalikustata avalikuks + ega näha sinu asukohta. Et näha, mida sa muutsid ja et võimaldada inimestel + selle veebilehe kaudu sinuga ühendust võtta, klõpsa alljärgneval nupul. + Pärast üleminekut API versioonile 0.6 võivad kaardiandmeid muuta ainult + avalikud kasutajad. (saa + teada, miks).
        • Sinu e-posti aadressi ei avalikustata avalikuks muutumisel.
        • Seda toimingut ei saa tühistada ja kõik uued kasutajad on nüüdsest vaikimisi avalikud.
        contributor terms: @@ -1948,7 +1960,7 @@ et: confirm: Kinnita fail: Ei õnnestu eemaldada rolli `%{role}' kasutajalt `%{name}'. Palun kontrolli, et kasutaja ja roll on mõlemad kehtivad. - user_block: + user_blocks: model: non_moderator_update: Blokeeringu loomiseks või uuendamiseks pead olema moderaator. non_moderator_revoke: Blokeeringu eemaldamiseks pead olema moderaator. @@ -2011,20 +2023,6 @@ et: period: one: 1 tund other: '%{count} tundi' - partial: - show: Näita - edit: Redigeeri - revoke: Tühista! - confirm: Oled Sa kindel? - display_name: Blokeeritud kasutaja - creator_name: Blokeerija - reason: Blokeerimise põhjus - status: Olek - revoker_name: Tühistanud - not_revoked: (pole tühistatud) - showing_page: Leht %{page} - next: Järgmine » - previous: « Eelmine helper: time_future: Lõpuni %{time}. until_login: Aktiivne kuni kasutaja logib sisse. @@ -2054,8 +2052,22 @@ et: back: Vaata kõiki blokeeringuid revoker: Tühistaja needs_view: Kasutaja peab sisse logima enne kui see blokeering eemaldatakse. - note: - description: + block: + not_revoked: (pole tühistatud) + show: Näita + edit: Redigeeri + revoke: Tühista! + blocks: + display_name: Blokeeritud kasutaja + creator_name: Blokeerija + reason: Blokeerimise põhjus + status: Olek + revoker_name: Tühistanud + showing_page: Leht %{page} + next: Järgmine » + previous: « Eelmine + notes: + comment: opened_at_html: Loodud %{when} tagasi opened_at_by_html: Loodud %{when} tagasi kasutaja %{user} poolt commented_at_html: Uuendatud %{when} tagasi @@ -2182,7 +2194,7 @@ et: distance: Vahemaa errors: no_route: Ei suutnud leida teekonda nende kahe koha vahel. - no_place: Seda kohta kahjuks ei leitud. + no_place: Kohta "%{place}" ei õnnestunud kahjuks leida. instructions: unnamed: nimetu time: Kestus @@ -2200,7 +2212,7 @@ et: show_address: Kuva aadress query_features: Mis siin on? centre_map: Kuva kaardi keskel - redaction: + redactions: edit: description: Kirjeldus heading: Redigeeri redaktsiooni diff --git a/config/locales/eu.yml b/config/locales/eu.yml index ee5791ad7..b0fe434c3 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -5,6 +5,7 @@ # Author: An13sa # Author: Asieriko # Author: Gorkaazk +# Author: Iñaki LL # Author: Mikel Ibaiba # Author: MikelEH # Author: PerroVerd @@ -346,53 +347,6 @@ eu: ago: Duela %{ago} newer_comments: Iruzkin berriagoak older_comments: Iruzkin zaharragoak - export: - title: Esportatu - start: - area_to_export: Esportatu beharreko eremua - manually_select: Aukeratu eskuz eremu ezberdin bat - format_to_export: Esportatzeko formatua - osm_xml_data: OpenStreetMap XML Datuak - map_image: Maparen irudia (geruza estandarra erakusten du) - embeddable_html: HTML kapsulagarria - licence: Lizentzia - export_details: OpenStreetMap-eko datuak Open - Data Commons Datu-base Irekiko Lizentzia baimen baten mende daude. - too_large: - advice: 'Goiko esportazioak kale egiten badu, behean zerrendatutako iturrietako - bat erabiltzea kontuan hartu mesedez:' - body: Area hau oso handia da OpenStreetMap XML datu bezala esportatzeko. Zooma - handitu edo eremu txikiagoa hautatu edo behean zerrendatutako iturrietako - bat erabili datuak bulkatze-deskargak egiteko mesedez. - planet: - title: OSM Planeta - description: OpenStreetMap datu-base osoko aldizkako kopia eguneratuak - overpass: - title: Overpass API - description: Deskargatu muga kutxa hau OpenStreetMap datu-basearen ispilu - batetik - geofabrik: - title: Geofabrik Deskargak - description: Kontinenteen, herrialdeen eta hautatutako hirien laburpen eguneratuak - maiztasun handiz - metro: - title: Metro Laburpenak - description: Munduko hiri handienetako eta inguruko hirien laburpenak - other: - title: Bestelako Iturriak - description: OpenStreetMap wikian zerrendatutako iturri osagarriak - options: Aukerak - format: Formatua - scale: Eskala - max: max - image_size: Irudiaren tamaina - zoom: Zooma - add_marker: Mapari markatzailea gehitu - latitude: 'Lat:' - longitude: 'Lon:' - output: Irteera - paste_html: Itsatsi HTMLa webgunean kapsulatzeko - export_button: Esportatu geocoder: search: title: @@ -965,256 +919,6 @@ eu: text: Dohaintza egin learn_more: Ikasi gehiago more: Gehiago - license_page: - foreign: - title: Itzulpen honi buruz - text: Itzulitako orrialde hau eta %{english_original_link} arteko gatazka izanez - gero, ingelesezko orrialdeak lehentasuna hartuko du - english_link: jatorrizkoa ingelesez - native: - title: Orrialde honi buruz - text: Copyright-aren bertsio ingelesez ikusten ari zara. Orrialde honen %{native_link} - orrira itzuli edo copyrightarekin eta %{mapping_link}-ri buruz irakurtzeari - utzi diezaiokezu. - native_link: Euskara version - mapping_link: kartografiarekin hasi - legal_babble: - title_html: Egile-eskubideak eta lizentzia - intro_1_html: |- - OpenStreetMap® irekitako datua multzoa da, Datu irekiak - Commons Open Database Lizentzia (ODbL) darama OpenStreetMap Fundazioaren babespean (OSMF). - intro_2_html: |- - Kopiatu, banatu, transmititu eta gure datuak egokitzeko baimena duzu, betiere kredituetan OpenStreetMap eta bere - laguntzaileak sartuz. Zure datuak aldatzen edo erauzten badituzu, lizentzia horren azpian soilik banatzea gerta daiteke. legal - kodeak zure eskubideak eta erantzukizunak azaltzen ditu. - intro_3_html: |- - Gure mapa fitxen kartografia, eta gure dokumentazioa, Creative - Commons Attribution-ShareAlike 2.0 lizentziapean eskaintzen dira (CC BY-SA). - credit_title_html: OpenStreetMap nola kreditatu - credit_1_html: '“© OpenStreetMap contributors” kreditua erabiltzeko - eskatzen dizugu.' - credit_2_html: "Halaber, argi utzi behar duzu datuak Open azpian erabilgarri - dauden\nDatu-basearen lizentziapean, eta gure mapa fitxak erabiltzen badituzu, - kartografia CC BY-SA lizentziatu daramala. Horretarako \n - copyright-orri honetan egin dezakezu.\nBestela, eta behar izanez gero, - OSM banatzen ari zarenean\ndatu-inprimakian, izen-abizenak eta baimenak zuzenean - lotu ditzakezu. Loturak posibleak ez diren komunikabideetan\n(adibidez, inprimatutako - lanak), gomendatzen dizugu\nzure irakurleei openstreetmap.org (agian hedapenean)\n'OpenStreetMap' - helbide honetaraino), opendatacommons.org helbidera, eta\ndagokionean, creativecommons.org-era - zuzentzea." - credit_3_html: |- - Mapa elektroniko bateragarrientzat, kredituak maparen izkinan agertu behar dira. - Adibidez: - attribution_example: - alt: Web-orri batean OpenStreetMap nola esleitu erakusteko adibidea - title: Eskuduntza adibidea - more_title_html: Jakin ezazu gehiago - more_1_html: |- - Irakurri gehiago gure datuak erabiltzeari buruz, eta nola gu kreditatu, hemen:OSMF Licence page. - more_2_html: |- - OpenStreetMap datuak irekita dauden arren, ezin dugu eman - aplikazio libreko maparen APIa hirugarrenentzat. - Ikusi gure API erabileraren gidalerroak , - Tile erabileraren gidalerroak - eta Nominatim Erabilera-gidalerroak aztertzeko. - contributors_title_html: Gure kolaboratzaileak - contributors_intro_html: |- - Gure laguntzaileen taldea milaka pertsonek osatzen dute. Horrez gain, nazio mailan aginte publikoko lizentziak - dituzten mapak eta beste iturri batzuk eskeintzen ditugu, besteak beste: - contributors_at_html: |- - Austria: Honako iturrietatik ateratako datuak ditu: - Stadt Wien (CC BY lizentziapean), - Land Vorarlberg eta - Land Tirol (CC BY AT zuzenketekin lizentziapean). - contributors_ca_html: |- - Canada: Datuak - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), eta StatCan (Geography Division, - Statistics Canada) biltegietatik hartzen ditu. - contributors_fi_html: |- - Finland: Datuak hemendik hartzen ditu: Finlandiako topografia datu-baseko inkesta nazionala - eta beste datubase batzuk, honen azpian: - NLSFI License. - contributors_fr_html: 'Frantzia: Direction Générale des Impôts-etik - ateratako datuak ditu.' - contributors_nl_html: |- - Herbehereak: Contains © AND data, 2007 - (www.and.com) - contributors_nz_html: |- - Zeelanda Berria: datuak biltzen ditu - Zeelanda Berriko Landako informaziotik. Erregin Copyright erreserbatuta. - contributors_si_html: |- - Eslovenia: datuak biltzen ditu - Burutzea eta Mapping Agintaritzatik eta - Nekazaritza, Basogintza eta Elikadura Ministeriotik - (Esloveniako informazio publikoa). - contributors_za_html: |- - Hego Afrika : - Zuzendaritza Nagusia datuen jatorria: - Geo-Lurralde Informazio Nazionala , Estatuko copyright erreserbatuta. - contributors_gb_html: |- - Erresuma Batua: Ordnance - Inkestaren datuak eta kopiak biltzen ditu; Crown copyright eta datu-basearen eskubidea 2010-12. - contributors_footer_1_html: |- - OpenStreetMap hobetzen laguntzeko lagundu dutenen xehetasun gehiago eta erabilitako beste iturri batzuk ezagutzeko, mesedez OpenStreetMap Wikian ikusi Contributors - page. - contributors_footer_2_html: |- - OpenStreetMap-en datuak sartzeak ez du beharrez jatorrizko - datu-hornitzaileak OpenStreetMap onartzea baieztatzen, edozein berme ematen, edota inolako erantzukizunik onartzen. - infringement_title_html: Egile-eskubideen urraketa - infringement_1_html: |- - OSMren laguntzaileek ez dute inolako daturik gehitu behar - copyright iturrietatik (adibidez, Google Maps edo inprimatutako mapak) copyright-jabeen baimen espliziturik gabe. - infringement_2_html: |- - Uste baduzu copyrightako materiala ez dela egokia izan - OpenStreetMap datu-baseari edo gune honi gehitu zaionean, mesedez - Gure bajazioa - prozedura edo zuzenean gure fitxategian - lineako aurkezpen orrira jo. - trademarks_title_html: Marka komertzialak - trademarks_1_html: OpenStreetMap, lupa-logotipoa eta Maparen egoera OpenStreetMap - Fundazioaren marka erregistratuak dira. Marka erabiltzeari buruzko galderarik - baduzu, bidali zure galderak - Lizentzia-lan taldera. - welcome_page: - title: Ongi etorri! - introduction_html: Ongi etorri OpenStreetMapera, edonork alda dezakeen munduko - mapa askera. Orain izena eman duzula, mapak editatzen has zaitezke. Hona hemen - gida laburra jakin behar dituzun gauzarik garrantzitsuenak dituena. - whats_on_the_map: - title: Mapan dagoena - on_html: |- - OpenStreetMap erreal eta egungo gauzak mapeatzeko lekua da - milioika eraikin, errepide eta beste leku batzuei buruzko xehetasunak biltzen ditu. Mapa jar ditzakezu - mundu errealeko zuretzat interesgarriak diren ezaugarriak. - off_html: Zer ez baditu balorazio bezalako datu iritziak ematen, historiko - edo ezaugarri hipotetikoak eta copyright-iturrietatik datozen datuak. Ez baduzu - baimen berezia, ez kopiatu lineako edo papereko mapetatik. - basic_terms: - title: Kartografiarako Oinarrizko Terminoak - paragraph_1_html: OpenStreetMap-ek bere parekatze propioa du. Hemen daude erabilgarriak - diren zenbait hitz gako. - editor_html: Editore bat mapa editatzeko erabil dezakezun programa - edo webgunea da. - node_html: Nodo bat maparen puntu bat da, jatetxe bakar bat - edo zuhaitz bat bezalakoa. - way_html: Bide bat linea edo eremu bat da, errepidea, erreka, - aintzira edo eraikin bat bezalakoa. - tag_html: Etiketa nodo edo modu bati buruzko datu bitxi bat - da, adibidez jatetxe izena edo errepideen abiadura muga. - rules: - title: Arauak! - paragraph_1_html: |- - OpenStreetMap-ek arau formal gutxi ditu baina parte-hartzaile guztiek bete dezaten espero dugu eta komunitatearekin komunikatzea. Eskuz editatzea ez den beste jarduera batean pentsatzen ari bazara, irakurri eta jarraitu jarraibideak - Importazioak eta Edizio automatizatuetan . - questions: - title: Galderarik? - paragraph_1_html: |- - OpenStreetMap-ek proiektuari buruz ikasteko baliabideak ditu, galdetuz eta erantzunez, eta mapping gaiak eztabaidatu eta dokumentatuz lankidetzan. - Jaso laguntza hemen. - start_mapping: Hasi mapeatzen - add_a_note: - title: Editatzeko denborarik ez? Gehitu ohar bat! - paragraph_1_html: Zerbait txiki eta finkoa bada eta ez baduzu denbora erregistratzeko - eta nola editatzen ikasteko, ohar bat gehitzea erraza da. - paragraph_2_html: |- - Joan besterik gabe mapara eta egin klik oharraren ikonoan: - . Honek markatzailea gehituko dio mapari, arrastatuz mugitu ahal izateko. Gehitu zure mezua, ondoren sakatu gorde eta beste erabiltzaileek ikertu egingo dute. - fixthemap: - title: Arazo baten berri eman / Mapa zuzendu - how_to_help: - title: Nola lagundu - join_the_community: - title: Komunitateko kide bihurtu - explanation_html: Arazoren bat nabaritu baduzu maparen datuekin, adibidez, - errepide edo zure helbidea faltan daudela, jarraitzeko modurik onena OpenStreetMap - komunitatean sartzea da datuak berreskuratu edo konpontzeko. - add_a_note: - instructions_html: |- - Egin klik edo ikono berean maparen pantailan. - Honek markatzailea gehituko dio mapari, arrastatuz mugitu ahal izateko. Gehitu zure mezua, ondoren sakatu gorde eta beste erabiltzaileek ikertu egingo dute. - other_concerns: - title: Bestelako kezkak - explanation_html: |- - Zure datuak nola erabiltzen diren edo edukiari buruzko kezka baduzu, kontsultatu gure - copyright orria informazio juridiko gehiago lortzeko, edo jar zaitez dagokionarekin harremanetan - OSMF lan taldean . - help_page: - title: Laguntza Lortu - introduction: OpenStreetMap-ek proiektuari buruz ikasteko hainbat baliabide ditu, - galderak egin eta erantzun, edota mapping gaiak eztabaidatu eta dokumentazeko - elkarlana. - welcome: - url: /welcome - title: Ongi etorri OSM-ra - description: OpenStreetMap-en oinarrizkoak betetzen dituen gida azkar honekin - hasi. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Eu:Beginners%27_guide - title: Hasiberrientzako gida - description: Hasiberrientzako mantentze-gida komunitarioa. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Egin galdera bat edo begiratu OSM-en galdera-eta-erantzun gunean. - mailing_lists: - title: Posta Bidaltze Zerrendak - description: Galdera bat egin edo eztabaidatu gai interesgarriak gaikako edo - eskualdekako posta zerrendetan. - forums: - title: Foroak - description: Galderak eta eztabaidak iragarki taula estilo interfazea nahiago - dutenentzat. - irc: - title: IRC - description: Hizkuntza eta gai askotako hizketaldi interaktiboa. - switch2osm: - title: switch2osm - description: Laguntza enpresei eta erakundeei OpenStreetMap-en oinarritutako - mapetara eta beste zerbitzuetara aldatzeko. - wiki: - url: http://wiki.openstreetmap.org/wiki/Eu:Main_Page - title: wiki.openstreetmap.org - description: OSM informazio zehatzerako wiki arakatu. - about_page: - next: Hurrengoa - copyright_html: ©OpenStreetMap
        kolaboratzaileak - used_by: '%{name}-k eskuliburuen mapak milaka web gune, mugikorretako aplikazio - eta hardware gailuetan ahalbidetzen ditu' - lede_text: OpenStreetMap mundu osoan zehar errepideak, bideak, kafetegiak, tren - geltokiak eta askoz gehiago mapatzaileen komunitate batek eskeinitako datuen - eta haien mantentzearen laguntzaz eraiki ditu. - local_knowledge_title: Tokiko Ezagutza - local_knowledge_html: OpenStreetMap tokiko ezagutzak azpimarratzen ditu. Laguntzaileek - aireko irudiak erabiltzen dituzte, GPS gailuak eta teknologia baxuko eremuko - mapak OSMrako egiaztapen zehatza eta eguneratua egiteko. - community_driven_title: Komunitatearen Ahotsa - community_driven_html: "OpenStreetMap komunitatea anitza eta sutsua da, egunero - haziz doa.\nGure laguntzaileen artean daude, mapazaleak, GIS arloko profesionalak, - \nOSM zerbitzariak exekutatzen dituzten ingeniariak, hondamendiek kaltetutako - eremuak mapatzen dituzten boluntarioak,\neta askoz gehiagok.\nKomunitateari - buruz gehiago jakiteko, ikus OpenStreetMap - bloga,\nerabiltzaileen egunerokoak,\nkomunitate - blogak eta OSM Fundazioaren - webgunea." - open_data_title: Datu Irekiak - open_data_html: |- - OpenStreetMap datu irekiak ditu: edozein gauzarako erabil dezakezu betiere OpenStreetMap-ek eta bere kolaboratzaileek aipatzen badituzu. Moduren batean datuen gainean edukia eraikiz, emaitza bakarrik banatu ahal izango duzu lizentzia beraren azpian. Ikusi Copyright eta - Lizentzia orria xehetasunak lortzeko. - legal_title: Legala - legal_html: |- - Gune hau eta beste hainbat zerbitzu lotzen dira formalki - OpenStreetMap Foundation (OSMF) - komunitatearen izenean. OSMF operatutako zerbitzu guztien erabilera gaia da - gure - Politika Erabilpen Onargarria eta gure Pribatutasun-gidalerroak - Mesedez jarri harremanetan OSMF-ekin - lizentziak, copyrightak edo bestelako lege-galderak eta arazoak badituzu. - partners_title: Parte-hartzaileak notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} eguneroko sarrera batean iruzkina utzi du' @@ -1404,6 +1108,157 @@ eu: delete: deleted: Mezua ezabatuta site: + about: + next: Hurrengoa + copyright_html: ©OpenStreetMap
        kolaboratzaileak + used_by: '%{name}-k eskuliburuen mapak milaka web gune, mugikorretako aplikazio + eta hardware gailuetan ahalbidetzen ditu' + lede_text: OpenStreetMap mundu osoan zehar errepideak, bideak, kafetegiak, tren + geltokiak eta askoz gehiago mapatzaileen komunitate batek eskeinitako datuen + eta haien mantentzearen laguntzaz eraiki ditu. + local_knowledge_title: Tokiko Ezagutza + local_knowledge_html: OpenStreetMap tokiko ezagutzak azpimarratzen ditu. Laguntzaileek + aireko irudiak erabiltzen dituzte, GPS gailuak eta teknologia baxuko eremuko + mapak OSMrako egiaztapen zehatza eta eguneratua egiteko. + community_driven_title: Komunitatearen Ahotsa + community_driven_html: "OpenStreetMap komunitatea anitza eta sutsua da, egunero + haziz doa.\nGure laguntzaileen artean daude, mapazaleak, GIS arloko profesionalak, + \nOSM zerbitzariak exekutatzen dituzten ingeniariak, hondamendiek kaltetutako + eremuak mapatzen dituzten boluntarioak,\neta askoz gehiagok.\nKomunitateari + buruz gehiago jakiteko, ikus OpenStreetMap + bloga,\nerabiltzaileen egunerokoak,\nkomunitate + blogak eta OSM Fundazioaren + webgunea." + open_data_title: Datu Irekiak + open_data_html: |- + OpenStreetMap datu irekiak ditu: edozein gauzarako erabil dezakezu betiere OpenStreetMap-ek eta bere kolaboratzaileek aipatzen badituzu. Moduren batean datuen gainean edukia eraikiz, emaitza bakarrik banatu ahal izango duzu lizentzia beraren azpian. Ikusi Copyright eta + Lizentzia orria xehetasunak lortzeko. + legal_title: Legala + legal_html: |- + Gune hau eta beste hainbat zerbitzu lotzen dira formalki + OpenStreetMap Foundation (OSMF) + komunitatearen izenean. OSMF operatutako zerbitzu guztien erabilera gaia da + gure + Politika Erabilpen Onargarria eta gure Pribatutasun-gidalerroak + Mesedez jarri harremanetan OSMF-ekin + lizentziak, copyrightak edo bestelako lege-galderak eta arazoak badituzu. + partners_title: Parte-hartzaileak + copyright: + foreign: + title: Itzulpen honi buruz + text: Itzulitako orrialde hau eta %{english_original_link} arteko gatazka + izanez gero, ingelesezko orrialdeak lehentasuna hartuko du + english_link: jatorrizkoa ingelesez + native: + title: Orrialde honi buruz + text: Copyright-aren bertsio ingelesez ikusten ari zara. Orrialde honen %{native_link} + orrira itzuli edo copyrightarekin eta %{mapping_link}-ri buruz irakurtzeari + utzi diezaiokezu. + native_link: Euskara version + mapping_link: kartografiarekin hasi + legal_babble: + title_html: Egile-eskubideak eta lizentzia + intro_1_html: |- + OpenStreetMap® irekitako datua multzoa da, Datu irekiak + Commons Open Database Lizentzia (ODbL) darama OpenStreetMap Fundazioaren babespean (OSMF). + intro_2_html: |- + Kopiatu, banatu, transmititu eta gure datuak egokitzeko baimena duzu, betiere kredituetan OpenStreetMap eta bere + laguntzaileak sartuz. Zure datuak aldatzen edo erauzten badituzu, lizentzia horren azpian soilik banatzea gerta daiteke. legal + kodeak zure eskubideak eta erantzukizunak azaltzen ditu. + intro_3_html: |- + Gure mapa fitxen kartografia, eta gure dokumentazioa, Creative + Commons Attribution-ShareAlike 2.0 lizentziapean eskaintzen dira (CC BY-SA). + credit_title_html: OpenStreetMap nola kreditatu + credit_1_html: '“© OpenStreetMap contributors” kreditua erabiltzeko + eskatzen dizugu.' + credit_2_html: "Halaber, argi utzi behar duzu datuak Open azpian erabilgarri + dauden\nDatu-basearen lizentziapean, eta gure mapa fitxak erabiltzen badituzu, + kartografia CC BY-SA lizentziatu daramala. Horretarako \n + copyright-orri honetan egin dezakezu.\nBestela, eta behar izanez gero, + OSM banatzen ari zarenean\ndatu-inprimakian, izen-abizenak eta baimenak + zuzenean lotu ditzakezu. Loturak posibleak ez diren komunikabideetan\n(adibidez, + inprimatutako lanak), gomendatzen dizugu\nzure irakurleei openstreetmap.org + (agian hedapenean)\n'OpenStreetMap' helbide honetaraino), opendatacommons.org + helbidera, eta\ndagokionean, creativecommons.org-era zuzentzea." + credit_3_html: |- + Mapa elektroniko bateragarrientzat, kredituak maparen izkinan agertu behar dira. + Adibidez: + attribution_example: + alt: Web-orri batean OpenStreetMap nola esleitu erakusteko adibidea + title: Eskuduntza adibidea + more_title_html: Jakin ezazu gehiago + more_1_html: |- + Irakurri gehiago gure datuak erabiltzeari buruz, eta nola gu kreditatu, hemen:OSMF Licence page. + more_2_html: |- + OpenStreetMap datuak irekita dauden arren, ezin dugu eman + aplikazio libreko maparen APIa hirugarrenentzat. + Ikusi gure API erabileraren gidalerroak , + Tile erabileraren gidalerroak + eta Nominatim Erabilera-gidalerroak aztertzeko. + contributors_title_html: Gure kolaboratzaileak + contributors_intro_html: |- + Gure laguntzaileen taldea milaka pertsonek osatzen dute. Horrez gain, nazio mailan aginte publikoko lizentziak + dituzten mapak eta beste iturri batzuk eskeintzen ditugu, besteak beste: + contributors_at_html: |- + Austria: Honako iturrietatik ateratako datuak ditu: + Stadt Wien (CC BY lizentziapean), + Land Vorarlberg eta + Land Tirol (CC BY AT zuzenketekin lizentziapean). + contributors_ca_html: |- + Canada: Datuak + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), eta StatCan (Geography Division, + Statistics Canada) biltegietatik hartzen ditu. + contributors_fi_html: |- + Finland: Datuak hemendik hartzen ditu: Finlandiako topografia datu-baseko inkesta nazionala + eta beste datubase batzuk, honen azpian: + NLSFI License. + contributors_fr_html: 'Frantzia: Direction Générale des Impôts-etik + ateratako datuak ditu.' + contributors_nl_html: |- + Herbehereak: Contains © AND data, 2007 + (www.and.com) + contributors_nz_html: |- + Zeelanda Berria: datuak biltzen ditu + Zeelanda Berriko Landako informaziotik. Erregin Copyright erreserbatuta. + contributors_si_html: |- + Eslovenia: datuak biltzen ditu + Burutzea eta Mapping Agintaritzatik eta + Nekazaritza, Basogintza eta Elikadura Ministeriotik + (Esloveniako informazio publikoa). + contributors_za_html: |- + Hego Afrika : + Zuzendaritza Nagusia datuen jatorria: + Geo-Lurralde Informazio Nazionala , Estatuko copyright erreserbatuta. + contributors_gb_html: |- + Erresuma Batua: Ordnance + Inkestaren datuak eta kopiak biltzen ditu; Crown copyright eta datu-basearen eskubidea 2010-12. + contributors_footer_1_html: |- + OpenStreetMap hobetzen laguntzeko lagundu dutenen xehetasun gehiago eta erabilitako beste iturri batzuk ezagutzeko, mesedez OpenStreetMap Wikian ikusi Contributors + page. + contributors_footer_2_html: |- + OpenStreetMap-en datuak sartzeak ez du beharrez jatorrizko + datu-hornitzaileak OpenStreetMap onartzea baieztatzen, edozein berme ematen, edota inolako erantzukizunik onartzen. + infringement_title_html: Egile-eskubideen urraketa + infringement_1_html: |- + OSMren laguntzaileek ez dute inolako daturik gehitu behar + copyright iturrietatik (adibidez, Google Maps edo inprimatutako mapak) copyright-jabeen baimen espliziturik gabe. + infringement_2_html: |- + Uste baduzu copyrightako materiala ez dela egokia izan + OpenStreetMap datu-baseari edo gune honi gehitu zaionean, mesedez + Gure bajazioa + prozedura edo zuzenean gure fitxategian + lineako aurkezpen orrira jo. + trademarks_title_html: Marka komertzialak + trademarks_1_html: OpenStreetMap, lupa-logotipoa eta Maparen egoera OpenStreetMap + Fundazioaren marka erregistratuak dira. Marka erabiltzeari buruzko galderarik + baduzu, bidali zure galderak + Lizentzia-lan taldera. index: js_1: Javascript onartzen ez duen arakatzailea erabiltzen ari zara edo JavaScript desgaitu duzu. @@ -1436,6 +1291,108 @@ eu: id_not_configured: iD-a ez da konfiguratu no_iframe_support: Zure nabigatzaileak ez ditu onartzen HTML iframe-ak, funtzio honetarako ezinbestekoak direnak. + export: + title: Esportatu + area_to_export: Esportatu beharreko eremua + manually_select: Aukeratu eskuz eremu ezberdin bat + format_to_export: Esportatzeko formatua + osm_xml_data: OpenStreetMap XML Datuak + map_image: Maparen irudia (geruza estandarra erakusten du) + embeddable_html: HTML kapsulagarria + licence: Lizentzia + export_details: OpenStreetMap-eko datuak Open + Data Commons Datu-base Irekiko Lizentzia baimen baten mende daude. + too_large: + advice: 'Goiko esportazioak kale egiten badu, behean zerrendatutako iturrietako + bat erabiltzea kontuan hartu mesedez:' + body: Area hau oso handia da OpenStreetMap XML datu bezala esportatzeko. Zooma + handitu edo eremu txikiagoa hautatu edo behean zerrendatutako iturrietako + bat erabili datuak bulkatze-deskargak egiteko mesedez. + planet: + title: OSM Planeta + description: OpenStreetMap datu-base osoko aldizkako kopia eguneratuak + overpass: + title: Overpass API + description: Deskargatu muga kutxa hau OpenStreetMap datu-basearen ispilu + batetik + geofabrik: + title: Geofabrik Deskargak + description: Kontinenteen, herrialdeen eta hautatutako hirien laburpen eguneratuak + maiztasun handiz + metro: + title: Metro Laburpenak + description: Munduko hiri handienetako eta inguruko hirien laburpenak + other: + title: Bestelako Iturriak + description: OpenStreetMap wikian zerrendatutako iturri osagarriak + options: Aukerak + format: Formatua + scale: Eskala + max: max + image_size: Irudiaren tamaina + zoom: Zooma + add_marker: Mapari markatzailea gehitu + latitude: 'Lat:' + longitude: 'Lon:' + output: Irteera + paste_html: Itsatsi HTMLa webgunean kapsulatzeko + export_button: Esportatu + fixthemap: + title: Arazo baten berri eman / Mapa zuzendu + how_to_help: + title: Nola lagundu + join_the_community: + title: Komunitateko kide bihurtu + explanation_html: Arazoren bat nabaritu baduzu maparen datuekin, adibidez, + errepide edo zure helbidea faltan daudela, jarraitzeko modurik onena OpenStreetMap + komunitatean sartzea da datuak berreskuratu edo konpontzeko. + add_a_note: + instructions_html: |- + Egin klik edo ikono berean maparen pantailan. + Honek markatzailea gehituko dio mapari, arrastatuz mugitu ahal izateko. Gehitu zure mezua, ondoren sakatu gorde eta beste erabiltzaileek ikertu egingo dute. + other_concerns: + title: Bestelako kezkak + explanation_html: |- + Zure datuak nola erabiltzen diren edo edukiari buruzko kezka baduzu, kontsultatu gure + copyright orria informazio juridiko gehiago lortzeko, edo jar zaitez dagokionarekin harremanetan + OSMF lan taldean . + help: + title: Laguntza Lortu + introduction: OpenStreetMap-ek proiektuari buruz ikasteko hainbat baliabide + ditu, galderak egin eta erantzun, edota mapping gaiak eztabaidatu eta dokumentazeko + elkarlana. + welcome: + url: /welcome + title: Ongi etorri OSM-ra + description: OpenStreetMap-en oinarrizkoak betetzen dituen gida azkar honekin + hasi. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Eu:Beginners%27_guide + title: Hasiberrientzako gida + description: Hasiberrientzako mantentze-gida komunitarioa. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Egin galdera bat edo begiratu OSM-en galdera-eta-erantzun gunean. + mailing_lists: + title: Posta Bidaltze Zerrendak + description: Galdera bat egin edo eztabaidatu gai interesgarriak gaikako edo + eskualdekako posta zerrendetan. + forums: + title: Foroak + description: Galderak eta eztabaidak iragarki taula estilo interfazea nahiago + dutenentzat. + irc: + title: IRC + description: Hizkuntza eta gai askotako hizketaldi interaktiboa. + switch2osm: + title: switch2osm + description: Laguntza enpresei eta erakundeei OpenStreetMap-en oinarritutako + mapetara eta beste zerbitzuetara aldatzeko. + wiki: + url: http://wiki.openstreetmap.org/wiki/Eu:Main_Page + title: wiki.openstreetmap.org + description: OSM informazio zehatzerako wiki arakatu. sidebar: search_results: Bilaketaren emaitzak close: Itxi @@ -1523,7 +1480,7 @@ eu: preview: Aurrikusi markdown_help: title_html: Honekin analizatua:Markdown - headings: Goiburuak + headings: Atalburuak heading: Goiburua subheading: Azpi-goiburua unordered: Ordenik gabeko zerrenda @@ -1535,6 +1492,49 @@ eu: image: Irudia alt: Testu alternatiboa url: URLa + welcome: + title: Ongi etorri! + introduction_html: Ongi etorri OpenStreetMapera, edonork alda dezakeen munduko + mapa askera. Orain izena eman duzula, mapak editatzen has zaitezke. Hona hemen + gida laburra jakin behar dituzun gauzarik garrantzitsuenak dituena. + whats_on_the_map: + title: Mapan dagoena + on_html: |- + OpenStreetMap erreal eta egungo gauzak mapeatzeko lekua da - milioika eraikin, errepide eta beste leku batzuei buruzko xehetasunak biltzen ditu. Mapa jar ditzakezu + mundu errealeko zuretzat interesgarriak diren ezaugarriak. + off_html: Zer ez baditu balorazio bezalako datu iritziak ematen, + historiko edo ezaugarri hipotetikoak eta copyright-iturrietatik datozen + datuak. Ez baduzu baimen berezia, ez kopiatu lineako edo papereko mapetatik. + basic_terms: + title: Kartografiarako Oinarrizko Terminoak + paragraph_1_html: OpenStreetMap-ek bere parekatze propioa du. Hemen daude + erabilgarriak diren zenbait hitz gako. + editor_html: Editore bat mapa editatzeko erabil dezakezun + programa edo webgunea da. + node_html: Nodo bat maparen puntu bat da, jatetxe bakar bat + edo zuhaitz bat bezalakoa. + way_html: Bide bat linea edo eremu bat da, errepidea, erreka, + aintzira edo eraikin bat bezalakoa. + tag_html: Etiketa nodo edo modu bati buruzko datu bitxi bat + da, adibidez jatetxe izena edo errepideen abiadura muga. + rules: + title: Arauak! + paragraph_1_html: |- + OpenStreetMap-ek arau formal gutxi ditu baina parte-hartzaile guztiek bete dezaten espero dugu eta komunitatearekin komunikatzea. Eskuz editatzea ez den beste jarduera batean pentsatzen ari bazara, irakurri eta jarraitu jarraibideak + Importazioak eta Edizio automatizatuetan . + questions: + title: Galderarik? + paragraph_1_html: |- + OpenStreetMap-ek proiektuari buruz ikasteko baliabideak ditu, galdetuz eta erantzunez, eta mapping gaiak eztabaidatu eta dokumentatuz lankidetzan. + Jaso laguntza hemen. + start_mapping: Hasi mapeatzen + add_a_note: + title: Editatzeko denborarik ez? Gehitu ohar bat! + paragraph_1_html: Zerbait txiki eta finkoa bada eta ez baduzu denbora erregistratzeko + eta nola editatzen ikasteko, ohar bat gehitzea erraza da. + paragraph_2_html: |- + Joan besterik gabe mapara eta egin klik oharraren ikonoan: + . Honek markatzailea gehituko dio mapari, arrastatuz mugitu ahal izateko. Gehitu zure mezua, ondoren sakatu gorde eta beste erabiltzaileek ikertu egingo dute. trace: visibility: private: Pribatua (puntu anonimo eta desordenatu gisa soilik partekatzen da) @@ -1663,7 +1663,7 @@ eu: Laguntzaileen Baldintzak ikusteko. Ez duzu ados egon behar, baina horiek ikusi behar dituzu. oauth: - oauthorize: + authorize: title: Zure kontuan sartzeko baimena eman request_access: '%{app_name} aplikazioak zure konturako sarbidea eskatzen du, %{user}. Egiaztatu eskaera hurrengo gaitasunak izatea nahi duzula. Nahi dituzun @@ -1677,11 +1677,11 @@ eu: allow_write_gpx: GPS aztarnak igo. allow_write_notes: Oharrak aldatu. grant_access: Baimena Eman - oauthorize_success: + authorize_success: title: Baimen eskaera onartua allowed: '%{app_name} aplikazioari zure kontura sartzeko baimena eman diozu.' verification: Egiaztapen kodea %{code} da. - oauthorize_failure: + authorize_failure: title: Baimen eskaerak kale egin du denied: '%{app_name} aplikazioari zure kontura sartzeko baimena kendu diozu.' invalid: Baimen token-a ez du balio. @@ -2124,7 +2124,7 @@ eu: confirm: Berretsi fail: '%{name} erabiltzaileari ezin izan zaio %{role} rola ezeztatu. Egiaztatu erabiltzailea eta rola balio duten mesedez.' - user_block: + user_blocks: model: non_moderator_update: Moderatzailea izan behar du blokeo bat sortu edo eguneratzeko. non_moderator_revoke: Moderatzaile izan behar da blokeo bat ezeztatzeko. @@ -2186,20 +2186,6 @@ eu: period: one: ordu bat other: '%{count} ordu' - partial: - show: Erakutsi - edit: Aldatu - revoke: Ezeztatu! - confirm: Ziur zaude? - display_name: Blokeatutako Erabiltzailea - creator_name: Egilea - reason: Blokeatzeko arrazoia - status: Egoera - revoker_name: -k ezeztatua - not_revoked: (ez da ezeztatu) - showing_page: '%{page} orria' - next: Hurrengoa » - previous: « Aurrekoa helper: time_future: '%{time}n bukatzen du' until_login: Erabiltzaileak saioa hasi arte aktiboa. @@ -2230,8 +2216,22 @@ eu: back: Blokeo guztiak ikusi revoker: 'Ezeztatu duena:' needs_view: Erabiltzaileak saioa hasi behar du blokeoa kendu baino lehen. - note: - description: + block: + not_revoked: (ez da ezeztatu) + show: Erakutsi + edit: Aldatu + revoke: Ezeztatu! + blocks: + display_name: Blokeatutako Erabiltzailea + creator_name: Egilea + reason: Blokeatzeko arrazoia + status: Egoera + revoker_name: -k ezeztatua + showing_page: '%{page} orria' + next: Hurrengoa » + previous: « Aurrekoa + notes: + comment: opened_at_html: Duela %{when} sortua opened_at_by_html: '%{user}-ek duela %{when} sortua' commented_at_html: Duela %{when} eguneratua @@ -2413,7 +2413,7 @@ eu: show_address: Erakutsi helbidea query_features: Eskaera ezaugarriak centre_map: Mapa hona zentratu - redaction: + redactions: edit: description: Deskribapena heading: Aldatu erredakzioa diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 15f680e05..8cb9e45c7 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -356,52 +356,6 @@ fa: ago: '%{ago} قبل' newer_comments: نظرات جدیدتر older_comments: نظرات قدیمی‌تر - export: - title: خارج سازی - start: - area_to_export: خارج سازی منطقه - manually_select: به صورت دستی منطقه دیگری را انتخاب کنید - format_to_export: فرمت خارج سازی - osm_xml_data: داده‌های XML OpenStreetMap - map_image: تصویر نقشه (لایه استاندارد را نشان میدهد) - embeddable_html: HTML قابل درج - licence: مجوز - export_details: داده‌های OpenStreetMap دارای مجوز زیر هستند داده‌های - باز عمومی مجوز دیتابیس باز (ODbL). - too_large: - advice: 'اگر برون‌بری بالا ناموفق بود، لطفاً از یکی از منابع ذکر شده در زیر - استفاده کنید:' - body: این منطقه برای خارج‌سازی به عنوان داده‌های XML OpenStreetMap خیلی بزرگ - است. لطفاً بزرگنمایی کنید یا یک منطقه کوچکتر را انتخاب کنید، یا برای دریافت - داده‌های انبوه یکی از منابع فهرست زیر را استفاده کنید. - planet: - title: سیاره ی OSM - description: کپی منظم از دیتابیس کامل OpenStreetMap - overpass: - title: روگذر API - description: دریافت این جعبه محدوده از یکی از پیوندهای کمکی پایگاه داده‌های - OpenStreetMap - geofabrik: - title: دانلود های Geofabrik - description: بروز رسانی های مرتب خلاصه از قاره ها، کشورها، و شهرهای انتخابی - metro: - title: خلاصه های مترو - description: خلاصه هایی برای شهرهای بزرگ جهان و مناطق اطرافشان - other: - title: سایر منابع - description: منابع اضافی ذکر شده در ویکی OpenStreetMap - options: گزینه‌ها - format: فرمت - scale: مقیاس - max: حداکثر - image_size: اندازهٔ تصویر - zoom: بزگ‌نمایی - add_marker: اضافه کردن نشانگر به نقشه - latitude: 'عرض:' - longitude: 'طول:' - output: خروجی - paste_html: برای درج در وب سایت HTML را جایگذاری کنید - export_button: خارج سازی geocoder: search: title: @@ -1006,234 +960,6 @@ fa: text: کمک مالی learn_more: اطلاعات بیشتر more: بیشتر - license_page: - foreign: - title: درباره این ترجمه‌ها - text: در زمان به وجود آمدن تداخل بین برگردان فارسی و %{english_original_link}، - نوشتهٔ انگلیسی برتری دارد - english_link: اصل انگلیسی - native: - title: درباره این صفحه - text: شما در حال مشاهده ویرایش انگلیسی قانون کپی‌رایت هستید. برای دیدن %{native_link} می - توانید به عقب باز گردید یا خواندن متن کپی رایت و %{mapping_link} را متوقف - کنید. - native_link: نسخهٔ فارسی - mapping_link: شروع به نقشه‌کشی - legal_babble: - title_html: حق نشر و مجوز - intro_1_html: |- - OpenStreetMap داده باز است، تحت مجوز Open Data - Commons Open Database License (ODbL). - intro_2_html: شما برای کپی برداری، توزیع، انتقال و انطباق داده های ما آزاد هستید، - تا زمانی که معتبران و همکاران OpenStreetMap باشید. اگر شما تغییر دهید یا بسازید - داده های ما را، شما باید نتایج را فقط تحت همین مجوز توزیع کنید. اطلاعات کامل - کد قانونی حقوق - و وظایف شما را توضیح میدهد. - intro_3_html: |- - نقشه کشی در کاشی های نقشه ی ما، و مدارک ما، تحت مجوز Creative - Commons Attribution-ShareAlike 2.0هستند ، مجوز (CC BY-SA). - credit_title_html: چگونه از OpenStreetMap اعتبار بگیریم - credit_1_html: ما نیاز داریم که شما استفاده کنید از اعتبار “© همکاران - OpenStreetMap”. - credit_2_html: همچنین مطمئن باشید که پاک کردن داده ها تحت یک مجوز دیتابیس باز - است، و اگر از کاشی‌های نقشهٔ ما استفاده می‌کنید، نقشه‌برداری تحت مجوز CC - BY-SA است. میتوانید با پیونددادن به این - صفحه حق نشر متناوبا آن را انجام دهید، و به عنوان یک درخواست اگر شما توزیع - کنندهٔ نوع داده‌های OSM هستید، می‌توانید نام و پیوند را بطور مستقیم به مجوز - بدهید. در رسانه‌ها جاهایی که پیوندها مقدور نیستند(مثل کارهای چاپی)، پیشنهاد - می‌کنیم خوانندگان‌تان را به openstreetmap.org راهنمایی کنید(شاید با گسترش - 'OpenStreetMap' به این نشانی کامل)، به opendatacommons.org، و اگر مناسب باشد، - به creativecommons.org. - credit_3_html: |- - برای یک نقشه الکترونیکی قابل مرور، اعتبار باید در گوشه ای از نقشه ظاهر شود. - برای مثال: - attribution_example: - alt: مثال برای چگونه OpenStreetMap را در صفحه ی وبی نسبت دهیم - title: مثال انتساب - more_title_html: پیدا کردن اطلاعات بیشتر - more_1_html: |- - درباره استفاده از داده های ما، و چگونه به ما اعتبار دهید بیشتر بخوانید، در Legal - FAQ. - more_2_html: اگرچه OpenStreetMap داده باز است، ما نمی توانیم API نقشه را به - رایگان در اختیار توسعه دهندگان شخص ثالث قرار دهیم. API - Usage Policy ما را ببینید، Tile - Usage Policy و Nominatim - Usage Policy. - contributors_title_html: همکاران ما - contributors_intro_html: 'شرکای ما هزاران شخص هستند. ما همچنین جواز علنی داده - از سازمان نقشه برداری ملی و دیگر منابع را شامل میشویم، در بین آنها:' - contributors_at_html: |- - Austria: Contains data from - Stadt Wien (under - CC BY), - Land Vorarlberg and - Land Tirol (under CC BY AT with amendments). - contributors_ca_html: |- - Canada: Contains data from - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), and StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: |- - Finland: Contains data from the - National Land Survey of Finland's Topographic Database - and other datasets, under the - NLSFI License. - contributors_fr_html: |- - France: Contains data sourced from - Direction Générale des Impôts. - contributors_nl_html: |- - Netherlands: Contains © AND data, 2007 - (www.and.com) - contributors_nz_html: |- - New Zealand: Contains data sourced from - Land Information New Zealand. Crown Copyright reserved. - contributors_za_html: |- - South Africa: Contains data sourced from - Chief Directorate: - National Geo-Spatial Information, State copyright reserved. - contributors_gb_html: |- - United Kingdom: Contains Ordnance - Survey data © Crown copyright and database right - 2010-12. - contributors_footer_1_html: برای اطلاعات بیشتر درباره این منابع و سایر منابع - مورد استفاده برای پیشرفت اوپن‌استریت‌مپ، لطفاً این پیوند را نگاه کنید. - contributors_footer_2_html: ورود داده‌ها در OpenStreetMap به این معنی نیست که - ارائه‌دهندهٔ اصلی داده‌ها توسط OpenStreetMap تأییدشده، هر گونه ضمانتی فراهم - می‌کند، یا هر گونه مسئولیت را می‌پذیرد. - infringement_title_html: نقض کپی رایت - infringement_1_html: شرکای OSM یادآوری میکنند هرگز داده ای را از منابع حق نشر - اضافه نکنید(مثلا نقشه های گوگل یا نقشه های چاپ شده) بدون اجازه صریح از دارندگان - حق تکثیر. - infringement_2_html: اگر فکر می‌کنید که این حق نشر داده شده به‌طور نامناسب به - پایگاه داده‌های OpenStreetMap یا این سایت اضافه شده‌است، لطفاً به رویهٔ - حذف ما یا پرونده مستقیم در صفحهٔ - بایگانی برخط ما مراجعه کنید. - trademarks_title_html: علائم ثبت شده تجاری - welcome_page: - title: خوش آمدید! - introduction_html: به OpenStreetMap خوش آمدید، نقشه‌ای رایگان و قابل ویرایش از - جهان. حالا که شما وارد سامانه شده‌اید، شما همهٔ شروط نقشه‌کشی را دارید. اینجا - یک راهنمایی سریع هست با مهمترین چیزهایی که شما به دانستنش نیاز دارید. - whats_on_the_map: - title: داخل نقشه چیست - on_html: OpenStreetMap مکانی برای کارهای نقشه کشی است که هر دو واقعی و - حاضر اند- شامل میلیون ها ساختمان، جاده، و سایر جزئیات در مورد مکان هاست. - شما میتوانید هرچه که در دنیای واقعی برایتان جالب است را نقشه کنید. - off_html: آنچه شامل نمیشود داده های خودرای مثل رتبه بندی، ویژگی های - تاریخی یا فرضی، و داده های منابع حق نشر شده اند. از نقشه های آنلاین یا کاغذی - کپی نکنید، مگر اینکه اجازه ی ویژه داشته باشید. - basic_terms: - title: شرایط اساسی برای نقشه برداری - paragraph_1_html: OpenStreetMap مقداری زبان ویژه خود دارد. اینجا چند کلمه ی - کلیدی هست که بصورت دستی آمده اند. - editor_html: ویرایشگر یک برنامه یا وبسایت است که با استفاده - از آن میتوانید نقشه را ویرایش کنید. - node_html: گره یک نقطه روی نقشه است، مثل یک رستوران تنها یا - یک درخت. - way_html: راه یک خط یا فضا است، مثل یک رود، نهر آب، برکه یا - ساختمان. - tag_html: برچسب یک بیت داده درباره ی یک گره یا راه است، شبیه - نام یک رستوران یا محدودیت سرعت یک جاده. - rules: - title: قوانین! - paragraph_1_html: OpenStreetMap تنها چند قاعده معمولی دارد اما از همه مشارکت - کنندگان انتظار همکاری و ارتباط با کلیه جامعه را داریم. اگر میخواهید هرگونه - فعالیتی به غیر از آنچه که با دست انجام میشود را انجام دهید، لطفاً متن زیر - و خطوط راهنما را در مورد ایمپورت - و - بخوانید. - questions: - title: سؤالی هست؟ - paragraph_1_html: |- - OpenStreetMap چندین منبع برای یادگیری پیرامون پروژه، پرسش و پاسخ به پرسش، و بحث مشترک و مباحث نقشه برداری مستند دارد. - برای کمک اینجا بروید. - start_mapping: شروع نقشه کشی - add_a_note: - title: زمانی برای ویرایش ندارید؟ یک یادداشت اضافه کنید! - paragraph_1_html: "اگر فقط چیزهای کوچکی را میخواهید ترمیم کنید و زمانی برای - ثبت نام و یادگیری ویرایش ندارید، \nافزودن یک یادداشت خیلی ساده است." - paragraph_2_html: |- - فقط بروید به نقشه و روی آیکون یادداشت کلیک کنید: - . اینجوری یک علامت گذار به نقشه اضافه می‌شود، که می‌توانید با کشیدن جابجایش کنید. پیامتان را اضافه کنید، بعد روی ذخیره کلیک کنید، و سایر نقشه کشان بررسی خواهند کرد. - fixthemap: - title: گزارش مشکل / تعمیر نقشه - how_to_help: - title: چگونه کمک کنید - join_the_community: - title: به جمع ما بپیوندید - explanation_html: اگر مشکلی با داده های نقشهٔ ما دارید به عنوان مثال جاده‌ای - یا نشانی‌ای گم شده‌است، بهترین راه برای اقدام به عضویت جامعهٔ اپن‌استریت‌مپ - بپیوندید و داده‌ها را خودتان اضافه یا تعمیر کنید. - add_a_note: - instructions_html: |- - فقط یا آیکون مشابه در نمایش نقشه را کلیک کنید. - این یک نشانگر به نقشه اضافه خواهد کرد، که شما می‌توانید با کشیدن آن را حرکت دهید. پیام خود را اضافه کنید، سپس دکمه ذخیره را کلیک کنید، و نقشه های دیگر بررسی خواهند‌شد. - other_concerns: - title: نگرانی‌های دیگر - explanation_html: اگر شما نگران این هستید که چطور اطلاعات ما مورد استفاده قرار - می‌گیرد یا درباره درباره محتوا با copyright page - ما برای اطلاعات قانونی بیشتر تماس بگیرید، یا به طور مناسبی با OSMF - working group تماس بگیرید. - help_page: - title: کمک گرفتن - introduction: OpenStreetMap چندین منبع برای یادگیری پیرامون پروژه، پرسش و پاسخ - به پرسش، و بحث مشترک و مباحث نقشه برداری مستند دارد. - welcome: - url: /welcome - title: به OSM خوش آمدید - description: با این آموزش ساده که در بر دارنده مبانی OpenStreetMap است آغاز - کنید. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Fa:Beginners%27_guide - title: راهنمای مبتدیان - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: یک سؤال بپرسید یا پاسخ ها را ببینید در سایت پرسش و پاسخ OSM. - mailing_lists: - title: فهرست ایمیل‌ها - description: در لیست های بلند و بالای محلی یا منطقه ای سوالی بپرسید یا در مورد - موضوعات جالب بحث کنید. - forums: - title: انجمنها - description: سوالات و بحث برای کسانی که رابط سبک انجمن را ترجیح می دهند. - irc: - title: IRC - description: گفتگوی تعاملی به زبانها و در مورد موضوعات مختلف. - switch2osm: - title: سویچ به OSM - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: برای مستندات عمیق OSM ویکی را مرور کنید. - about_page: - next: بعدی - copyright_html: ©OpenStreetMap
        contributors - used_by: '%{name} در صدها وب سایت، برنامه های موبایل، و وسایل سخت افزاری داده - های نقشه را قدرت داده است' - lede_text: OpenStreetMap توسط جامعه ای از نقشه کشان ساخته شده که نگه داری و کمک - میکنند داده ها یی درباره ی جاده ها، مسیر های پیاده روی، کافه ها، ایستگاه های - راه آهن، و خیلی بیشتر، در سرتاسر جهان. - local_knowledge_title: دانش محلی - local_knowledge_html: OpenStreetMap بر دانش محلی تاکید دارد. همکاران از تصاویر - هوایی، دستگاه های GPS، و نقشه های حوزه تکنولوژی پایین بمنظور دقت و بروز بودن - OSM استفاده میکنند. - community_driven_title: نوع جامعه گرایی - community_driven_html: |- - انجمن OpenStreetMap گوناگون، پرشور، و هر روز در حال رشد است. - همکاران ما عبارت اند از: نقشه کشان علاقه مند، متخصصان GIS، مهندسین اجرایی در سرور های OSM، نقشه کشی بشردوستان در مناطق فاجعه زده، و خیلی بیشتر. - برای یادگیری بیشتر درباره ی انجمن، یادداشت های روزانه کاربر، وبلاگ های انجمن، و وبسایت بنیاد OSM را ببینید. - open_data_title: داده های باز - open_data_html: 'OpenStreetMap داده بازاست: شما آزادید آنرا برای هر منظور - و مقصودی استفاده کنید تا وقتی که اعتبار OpenStreetMap و همکارانش را دارید. اگر - شما داده ها را در روش های خاص تغییر دهید یا بسازید، شما باید نتایج را تحت همین - مجوز توزیع کنید. صفحه ی حق نشر و مجوز را - برای راهنمایی ببینید.' - legal_title: قانونی - partners_title: شرکای تجاری notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} در یادداشت روزانه شما نظر داد' @@ -1421,6 +1147,138 @@ fa: delete: deleted: پیام حذف شد site: + about: + next: بعدی + copyright_html: ©OpenStreetMap
        contributors + used_by: '%{name} در صدها وب سایت، برنامه های موبایل، و وسایل سخت افزاری داده + های نقشه را قدرت داده است' + lede_text: OpenStreetMap توسط جامعه ای از نقشه کشان ساخته شده که نگه داری و + کمک میکنند داده ها یی درباره ی جاده ها، مسیر های پیاده روی، کافه ها، ایستگاه + های راه آهن، و خیلی بیشتر، در سرتاسر جهان. + local_knowledge_title: دانش محلی + local_knowledge_html: OpenStreetMap بر دانش محلی تاکید دارد. همکاران از تصاویر + هوایی، دستگاه های GPS، و نقشه های حوزه تکنولوژی پایین بمنظور دقت و بروز بودن + OSM استفاده میکنند. + community_driven_title: نوع جامعه گرایی + community_driven_html: |- + انجمن OpenStreetMap گوناگون، پرشور، و هر روز در حال رشد است. + همکاران ما عبارت اند از: نقشه کشان علاقه مند، متخصصان GIS، مهندسین اجرایی در سرور های OSM، نقشه کشی بشردوستان در مناطق فاجعه زده، و خیلی بیشتر. + برای یادگیری بیشتر درباره ی انجمن، یادداشت های روزانه کاربر، وبلاگ های انجمن، و وبسایت بنیاد OSM را ببینید. + open_data_title: داده های باز + open_data_html: 'OpenStreetMap داده بازاست: شما آزادید آنرا برای هر منظور + و مقصودی استفاده کنید تا وقتی که اعتبار OpenStreetMap و همکارانش را دارید. + اگر شما داده ها را در روش های خاص تغییر دهید یا بسازید، شما باید نتایج را + تحت همین مجوز توزیع کنید. صفحه ی حق نشر و مجوز را + برای راهنمایی ببینید.' + legal_title: قانونی + partners_title: شرکای تجاری + copyright: + foreign: + title: درباره این ترجمه‌ها + text: در زمان به وجود آمدن تداخل بین برگردان فارسی و %{english_original_link}، + نوشتهٔ انگلیسی برتری دارد + english_link: اصل انگلیسی + native: + title: درباره این صفحه + text: شما در حال مشاهده ویرایش انگلیسی قانون کپی‌رایت هستید. برای دیدن %{native_link} می + توانید به عقب باز گردید یا خواندن متن کپی رایت و %{mapping_link} را متوقف + کنید. + native_link: نسخهٔ فارسی + mapping_link: شروع به نقشه‌کشی + legal_babble: + title_html: حق نشر و مجوز + intro_1_html: |- + OpenStreetMap داده باز است، تحت مجوز Open Data + Commons Open Database License (ODbL). + intro_2_html: شما برای کپی برداری، توزیع، انتقال و انطباق داده های ما آزاد + هستید، تا زمانی که معتبران و همکاران OpenStreetMap باشید. اگر شما تغییر + دهید یا بسازید داده های ما را، شما باید نتایج را فقط تحت همین مجوز توزیع + کنید. اطلاعات کامل کد + قانونی حقوق و وظایف شما را توضیح میدهد. + intro_3_html: |- + نقشه کشی در کاشی های نقشه ی ما، و مدارک ما، تحت مجوز Creative + Commons Attribution-ShareAlike 2.0هستند ، مجوز (CC BY-SA). + credit_title_html: چگونه از OpenStreetMap اعتبار بگیریم + credit_1_html: ما نیاز داریم که شما استفاده کنید از اعتبار “© همکاران + OpenStreetMap”. + credit_2_html: همچنین مطمئن باشید که پاک کردن داده ها تحت یک مجوز دیتابیس + باز است، و اگر از کاشی‌های نقشهٔ ما استفاده می‌کنید، نقشه‌برداری تحت مجوز + CC BY-SA است. میتوانید با پیونددادن به این + صفحه حق نشر متناوبا آن را انجام دهید، و به عنوان یک درخواست اگر شما + توزیع کنندهٔ نوع داده‌های OSM هستید، می‌توانید نام و پیوند را بطور مستقیم + به مجوز بدهید. در رسانه‌ها جاهایی که پیوندها مقدور نیستند(مثل کارهای چاپی)، + پیشنهاد می‌کنیم خوانندگان‌تان را به openstreetmap.org راهنمایی کنید(شاید + با گسترش 'OpenStreetMap' به این نشانی کامل)، به opendatacommons.org، و اگر + مناسب باشد، به creativecommons.org. + credit_3_html: |- + برای یک نقشه الکترونیکی قابل مرور، اعتبار باید در گوشه ای از نقشه ظاهر شود. + برای مثال: + attribution_example: + alt: مثال برای چگونه OpenStreetMap را در صفحه ی وبی نسبت دهیم + title: مثال انتساب + more_title_html: پیدا کردن اطلاعات بیشتر + more_1_html: |- + درباره استفاده از داده های ما، و چگونه به ما اعتبار دهید بیشتر بخوانید، در Legal + FAQ. + more_2_html: اگرچه OpenStreetMap داده باز است، ما نمی توانیم API نقشه را به + رایگان در اختیار توسعه دهندگان شخص ثالث قرار دهیم. API + Usage Policy ما را ببینید، Tile + Usage Policy و Nominatim + Usage Policy. + contributors_title_html: همکاران ما + contributors_intro_html: 'شرکای ما هزاران شخص هستند. ما همچنین جواز علنی داده + از سازمان نقشه برداری ملی و دیگر منابع را شامل میشویم، در بین آنها:' + contributors_at_html: |- + Austria: Contains data from + Stadt Wien (under + CC BY), + Land Vorarlberg and + Land Tirol (under CC BY AT with amendments). + contributors_ca_html: |- + Canada: Contains data from + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), and StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: |- + Finland: Contains data from the + National Land Survey of Finland's Topographic Database + and other datasets, under the + NLSFI License. + contributors_fr_html: |- + France: Contains data sourced from + Direction Générale des Impôts. + contributors_nl_html: |- + Netherlands: Contains © AND data, 2007 + (www.and.com) + contributors_nz_html: |- + New Zealand: Contains data sourced from + Land Information New Zealand. Crown Copyright reserved. + contributors_za_html: |- + South Africa: Contains data sourced from + Chief Directorate: + National Geo-Spatial Information, State copyright reserved. + contributors_gb_html: |- + United Kingdom: Contains Ordnance + Survey data © Crown copyright and database right + 2010-12. + contributors_footer_1_html: برای اطلاعات بیشتر درباره این منابع و سایر منابع + مورد استفاده برای پیشرفت اوپن‌استریت‌مپ، لطفاً این پیوند را نگاه کنید. + contributors_footer_2_html: ورود داده‌ها در OpenStreetMap به این معنی نیست + که ارائه‌دهندهٔ اصلی داده‌ها توسط OpenStreetMap تأییدشده، هر گونه ضمانتی + فراهم می‌کند، یا هر گونه مسئولیت را می‌پذیرد. + infringement_title_html: نقض کپی رایت + infringement_1_html: شرکای OSM یادآوری میکنند هرگز داده ای را از منابع حق + نشر اضافه نکنید(مثلا نقشه های گوگل یا نقشه های چاپ شده) بدون اجازه صریح + از دارندگان حق تکثیر. + infringement_2_html: اگر فکر می‌کنید که این حق نشر داده شده به‌طور نامناسب + به پایگاه داده‌های OpenStreetMap یا این سایت اضافه شده‌است، لطفاً به رویهٔ + حذف ما یا پرونده مستقیم در صفحهٔ + بایگانی برخط ما مراجعه کنید. + trademarks_title_html: علائم ثبت شده تجاری index: js_1: شما در حال استفاده از مرورگری هستید که جاوا اسکریپت را پشتیبانی نمی کند، یا جاوا اسکریپت را غیر فعال کرده اید. @@ -1452,6 +1310,102 @@ fa: id_not_configured: iD پیکربندی نشده است no_iframe_support: مرورگر شما فریم های HTML که برای این ویژگی لازم است را پشتیبانی نمی کند. + export: + title: خارج سازی + area_to_export: خارج سازی منطقه + manually_select: به صورت دستی منطقه دیگری را انتخاب کنید + format_to_export: فرمت خارج سازی + osm_xml_data: داده‌های XML OpenStreetMap + map_image: تصویر نقشه (لایه استاندارد را نشان میدهد) + embeddable_html: HTML قابل درج + licence: مجوز + export_details: داده‌های OpenStreetMap دارای مجوز زیر هستند داده‌های + باز عمومی مجوز دیتابیس باز (ODbL). + too_large: + advice: 'اگر برون‌بری بالا ناموفق بود، لطفاً از یکی از منابع ذکر شده در زیر + استفاده کنید:' + body: این منطقه برای خارج‌سازی به عنوان داده‌های XML OpenStreetMap خیلی بزرگ + است. لطفاً بزرگنمایی کنید یا یک منطقه کوچکتر را انتخاب کنید، یا برای دریافت + داده‌های انبوه یکی از منابع فهرست زیر را استفاده کنید. + planet: + title: سیاره ی OSM + description: کپی منظم از دیتابیس کامل OpenStreetMap + overpass: + title: روگذر API + description: دریافت این جعبه محدوده از یکی از پیوندهای کمکی پایگاه داده‌های + OpenStreetMap + geofabrik: + title: دانلود های Geofabrik + description: بروز رسانی های مرتب خلاصه از قاره ها، کشورها، و شهرهای انتخابی + metro: + title: خلاصه های مترو + description: خلاصه هایی برای شهرهای بزرگ جهان و مناطق اطرافشان + other: + title: سایر منابع + description: منابع اضافی ذکر شده در ویکی OpenStreetMap + options: گزینه‌ها + format: فرمت + scale: مقیاس + max: حداکثر + image_size: اندازهٔ تصویر + zoom: بزگ‌نمایی + add_marker: اضافه کردن نشانگر به نقشه + latitude: 'عرض:' + longitude: 'طول:' + output: خروجی + paste_html: برای درج در وب سایت HTML را جایگذاری کنید + export_button: خارج سازی + fixthemap: + title: گزارش مشکل / تعمیر نقشه + how_to_help: + title: چگونه کمک کنید + join_the_community: + title: به جمع ما بپیوندید + explanation_html: اگر مشکلی با داده های نقشهٔ ما دارید به عنوان مثال جاده‌ای + یا نشانی‌ای گم شده‌است، بهترین راه برای اقدام به عضویت جامعهٔ اپن‌استریت‌مپ + بپیوندید و داده‌ها را خودتان اضافه یا تعمیر کنید. + add_a_note: + instructions_html: |- + فقط یا آیکون مشابه در نمایش نقشه را کلیک کنید. + این یک نشانگر به نقشه اضافه خواهد کرد، که شما می‌توانید با کشیدن آن را حرکت دهید. پیام خود را اضافه کنید، سپس دکمه ذخیره را کلیک کنید، و نقشه های دیگر بررسی خواهند‌شد. + other_concerns: + title: نگرانی‌های دیگر + explanation_html: اگر شما نگران این هستید که چطور اطلاعات ما مورد استفاده + قرار می‌گیرد یا درباره درباره محتوا با copyright page + ما برای اطلاعات قانونی بیشتر تماس بگیرید، یا به طور مناسبی با OSMF + working group تماس بگیرید. + help: + title: کمک گرفتن + introduction: OpenStreetMap چندین منبع برای یادگیری پیرامون پروژه، پرسش و پاسخ + به پرسش، و بحث مشترک و مباحث نقشه برداری مستند دارد. + welcome: + url: /welcome + title: به OSM خوش آمدید + description: با این آموزش ساده که در بر دارنده مبانی OpenStreetMap است آغاز + کنید. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Fa:Beginners%27_guide + title: راهنمای مبتدیان + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: یک سؤال بپرسید یا پاسخ ها را ببینید در سایت پرسش و پاسخ OSM. + mailing_lists: + title: فهرست ایمیل‌ها + description: در لیست های بلند و بالای محلی یا منطقه ای سوالی بپرسید یا در + مورد موضوعات جالب بحث کنید. + forums: + title: انجمنها + description: سوالات و بحث برای کسانی که رابط سبک انجمن را ترجیح می دهند. + irc: + title: IRC + description: گفتگوی تعاملی به زبانها و در مورد موضوعات مختلف. + switch2osm: + title: سویچ به OSM + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: برای مستندات عمیق OSM ویکی را مرور کنید. sidebar: search_results: نتایج جستجو close: بستن @@ -1551,6 +1505,52 @@ fa: image: تصویر alt: دگرسازی متن url: نشانی اینترنتی + welcome: + title: خوش آمدید! + introduction_html: به OpenStreetMap خوش آمدید، نقشه‌ای رایگان و قابل ویرایش + از جهان. حالا که شما وارد سامانه شده‌اید، شما همهٔ شروط نقشه‌کشی را دارید. + اینجا یک راهنمایی سریع هست با مهمترین چیزهایی که شما به دانستنش نیاز دارید. + whats_on_the_map: + title: داخل نقشه چیست + on_html: OpenStreetMap مکانی برای کارهای نقشه کشی است که هر دو واقعی + و حاضر اند- شامل میلیون ها ساختمان، جاده، و سایر جزئیات در مورد مکان + هاست. شما میتوانید هرچه که در دنیای واقعی برایتان جالب است را نقشه کنید. + off_html: آنچه شامل نمیشود داده های خودرای مثل رتبه بندی، ویژگی های + تاریخی یا فرضی، و داده های منابع حق نشر شده اند. از نقشه های آنلاین یا کاغذی + کپی نکنید، مگر اینکه اجازه ی ویژه داشته باشید. + basic_terms: + title: شرایط اساسی برای نقشه برداری + paragraph_1_html: OpenStreetMap مقداری زبان ویژه خود دارد. اینجا چند کلمه + ی کلیدی هست که بصورت دستی آمده اند. + editor_html: ویرایشگر یک برنامه یا وبسایت است که با استفاده + از آن میتوانید نقشه را ویرایش کنید. + node_html: گره یک نقطه روی نقشه است، مثل یک رستوران تنها + یا یک درخت. + way_html: راه یک خط یا فضا است، مثل یک رود، نهر آب، برکه + یا ساختمان. + tag_html: برچسب یک بیت داده درباره ی یک گره یا راه است، شبیه + نام یک رستوران یا محدودیت سرعت یک جاده. + rules: + title: قوانین! + paragraph_1_html: OpenStreetMap تنها چند قاعده معمولی دارد اما از همه مشارکت + کنندگان انتظار همکاری و ارتباط با کلیه جامعه را داریم. اگر میخواهید هرگونه + فعالیتی به غیر از آنچه که با دست انجام میشود را انجام دهید، لطفاً متن زیر + و خطوط راهنما را در مورد ایمپورت + و + بخوانید. + questions: + title: سؤالی هست؟ + paragraph_1_html: |- + OpenStreetMap چندین منبع برای یادگیری پیرامون پروژه، پرسش و پاسخ به پرسش، و بحث مشترک و مباحث نقشه برداری مستند دارد. + برای کمک اینجا بروید. + start_mapping: شروع نقشه کشی + add_a_note: + title: زمانی برای ویرایش ندارید؟ یک یادداشت اضافه کنید! + paragraph_1_html: "اگر فقط چیزهای کوچکی را میخواهید ترمیم کنید و زمانی برای + ثبت نام و یادگیری ویرایش ندارید، \nافزودن یک یادداشت خیلی ساده است." + paragraph_2_html: |- + فقط بروید به نقشه و روی آیکون یادداشت کلیک کنید: + . اینجوری یک علامت گذار به نقشه اضافه می‌شود، که می‌توانید با کشیدن جابجایش کنید. پیامتان را اضافه کنید، بعد روی ذخیره کلیک کنید، و سایر نقشه کشان بررسی خواهند کرد. trace: visibility: private: خصوصی (فقط به عنوان ناشناس ، نقاط نامشخص) @@ -1677,7 +1677,7 @@ fa: شرکت‌کننده لطفاً وارد رابط کاربری وب شوید. نیاز به موافقت شما نیست، ولی باید حتماً آن‌ٰها را ببینید. oauth: - oauthorize: + authorize: title: دسترسی اجازه دادن به حسابتان request_access: برنامهٔ %{app_name}%{app_name} درخواست دسترسی به حسابتان %{user} را دارد. لطفاً بررسی کنید که می‌خواهید برنامه به قابلیت‌های زیر دسترسی داشته @@ -1691,11 +1691,11 @@ fa: allow_write_gpx: بارگذاری پیگیری‌های GPS. allow_write_notes: تغییر یادداشت ها. grant_access: امکان دسترسی - oauthorize_success: + authorize_success: title: درخواست اجازه دادن مجاز است allowed: شما به برنامه ی %{app_name} اجازه ی دسترسی به حسابتان را دادید. verification: کد تأیید %{code} است. - oauthorize_failure: + authorize_failure: title: درخواست اجازه دادن انجام نشد denied: شما به برنامه ی %{app_name} اجازه ی دسترسی به حسابتان را ندادید. invalid: نشانه مجوز معتبر نیست. @@ -2129,7 +2129,7 @@ fa: confirm: تأیید fail: نمی‌توان نقش %{role} کاربر %{name} را لغو کرد. لطفاً از معتبربودن کاربر و نقش اطمینان حاصل نمایید. - user_block: + user_blocks: model: non_moderator_update: برای بروزرسانی یا ایجاد بلوک باید یک مدیر بود. non_moderator_revoke: برای لغو یک بلوک باید مدیر بود. @@ -2191,20 +2191,6 @@ fa: period: one: 1 ساعت other: '%{count} ساعت' - partial: - show: نمایش - edit: ویرایش - revoke: باطل کردن! - confirm: آیا مطمئن هستید؟ - display_name: کاربر بلوک شده - creator_name: ایجاد کننده - reason: دلیل بلوک - status: وضعیت - revoker_name: باطل شده توسط - not_revoked: (باطل نشده) - showing_page: صفحهٔ %{page} - next: بعدی » - previous: « قبلی helper: time_future: در %{time} پایان می پذیرد. until_login: فعال تا وقتی کاربر وارد شود. @@ -2233,8 +2219,22 @@ fa: back: مشاهده تمام بلوک ها revoker: 'باطل کننده:' needs_view: کاربر قبل از پاک شدن این بلوک نیاز به وارد شدن دارد. - note: - description: + block: + not_revoked: (باطل نشده) + show: نمایش + edit: ویرایش + revoke: باطل کردن! + blocks: + display_name: کاربر بلوک شده + creator_name: ایجاد کننده + reason: دلیل بلوک + status: وضعیت + revoker_name: باطل شده توسط + showing_page: صفحهٔ %{page} + next: بعدی » + previous: « قبلی + notes: + comment: opened_at_html: ایجاد شده %{when} قبل opened_at_by_html: ایجاد شده %{when} قبل توسط %{user} commented_at_html: بروز شده %{when} قبل @@ -2403,7 +2403,7 @@ fa: context: add_note: یک یادداشت در اینجا اضافه کنید show_address: نمایش آدرس - redaction: + redactions: edit: description: شرح heading: ویرایش کردن ویرایش diff --git a/config/locales/fi.yml b/config/locales/fi.yml index cf42664c2..5a75d8cc4 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -270,7 +270,7 @@ fi: list: title: Muutoskokoelmat title_user: Käyttäjän %{user} muutoskokoelmat - title_friend: Kaverien muutoskokoelmat + title_friend: Kaverieni muutoskokoelmat title_nearby: Lähellä olevien käyttäjien muutoskokoelmat empty: Muutosryhmiä ei löytynyt. empty_area: Ei muutosryhmiä tällä alueella. @@ -300,7 +300,7 @@ fi: user_title: Käyttäjän %{user} päiväkirja in_language_title: Päiväkirjamerkinnät kielellä %{language} new: Lisää päiväkirjamerkintä - new_title: Kirjoita uusi päiväkirjamerkintä + new_title: Kirjoita uusi merkintä käyttäjän päiväkirjaani no_entries: Päiväkirjassa ei ole merkintöjä. recent_entries: Uusimmat päiväkirjamerkinnät older_entries: Vanhempia... @@ -366,52 +366,6 @@ fi: ago: '%{ago} sitten' newer_comments: Uudemmat kommentit older_comments: Vanhemmat kommentit - export: - title: Alueen vienti - start: - area_to_export: Vietävä alue - manually_select: Valitse pienempi alue - format_to_export: Vientimuoto - osm_xml_data: OpenStreetMapin XML-muoto - map_image: Karttakuva (näyttää standarditason) - embeddable_html: HTML-koodi - licence: Lisenssi - export_details: OpenStreetMap-karttatietoja saa käyttää Open - Data Commons Open Database License (ODbL) (engl.) ehdoilla. - too_large: - advice: 'Jos vientitoiminto ei toimi, kokeile myös seuraavia palveluja:' - body: 'Näin suurta aluetta ei voi viedä OpenStreetMap XML-tiedostona. Lähennä - karttaa tai valitse pienempi alue, tai vaihtoehtoisesti lataa tiedosto joltakin - seuraavista:' - planet: - title: Planet OSM - description: Säännöllisesti päivitettyjä kopioita täydellisestä OpenStreetMap-tietokannasta - overpass: - title: Overpass API - description: Lataa kartalle rajattu alue OpenStreetMapin varapalvelimelta - geofabrik: - title: Geofabrik-lataukset - description: Säännöllisesti päivitetyt otteet maanosista, maista ja valituista - kaupungeista - metro: - title: Metro-otteet - description: Otteita maailman suurista kaupungeista ja niitä ympäröivistä - alueista - other: - title: Muut lähteet - description: Muut lähteet ovat esillä OpenStreetMap-wikissä - options: Asetukset - format: 'Tiedostomuoto:' - scale: Mittakaava - max: enintään - image_size: Kuvan koko - zoom: Suurennostaso - add_marker: Lisää vietävään kartaan kohdemerkki - latitude: 'Lev:' - longitude: 'Pit:' - output: Tulos - paste_html: Kopioi ja liitä tämä HTML-koodi verkkosivullesi - export_button: Vie geocoder: search: title: @@ -1057,248 +1011,6 @@ fi: text: Lahjoita learn_more: Lisätietoja more: Lisää - license_page: - foreign: - title: Tietoja tästä käännöksestä - text: Jos tämän käännetyn sivun ja %{english_original_link} välillä on eroja, - englanninkielinen sivu on aina etusijalla. - english_link: englanninenkielisen alkuperäisversion - native: - title: Tietoja sivusta - text: Tällä sivulla on alkuperäinen englanninkielinen versio tekijäoikeuksista. - Saatavilla on myös %{native_link}. Voit myös lopettaa tekijänoikeuksien lukemisen - ja %{mapping_link}. - native_link: suomenkielinen versio - mapping_link: aloittaa kartoituksen - legal_babble: - title_html: Tekijänoikeus ja lisenssi - intro_1_html: |- - OpenStreetMap® on avointa dataa, jonka OpenStreetMap Foundation (OSMF) on lisensoinut Open Data Commons Open Database -lisenssillä (ODbL). - intro_2_html: "OpenStreetMapin karttoja ja tietoja voi kopioida, levittää, välittää - ja mukauttaa, \nkunhan OpenStreetMap ja sen tekijät mainitaan. Jos karttoja - tai tietoja muutetaan tai kehitetään, niitä saa levittää vain samalla lisenssillä.\nLakitekstissä - mainitaan levittäjän oikeudet ja velvollisuudet." - intro_3_html: |- - Kartta-aineisto ja dokumentaatio on lisensoitu Creative - Commons Nimeä-Jaa samoin 2.0 -lisenssillä (CC-BY-SA). - credit_title_html: OpenStreetMapin mainitseminen - credit_1_html: OpenStreetMapin sisältöä levitettäessä on mainittava teksti "© - OpenStreetMapin tekijät" tai sen englanninkielinen vastine "© - OpenStreetMap contributors". - credit_2_html: "Levittäjän tulee tehdä selväksi, että aineisto on saatavilla - Open Database Lisenssillä\nja kartta-aineiston olevan lisensoitu CC-BY-SA-lisenssillä. - Tämä voidaan tehdä sijoittamalla sivulle linkki\ntälle - tekijänoikeussivulle. \nJos linkkien käyttö ei ole mahdollista (esimerkiksi - paperille tulostettu aineisto),\nsuosittelemme ohjaamaan lukijat osoitteisiin - www.openstreetmap.org, opendatacommons.org ja tarvittaessa myös creativecommons.org." - credit_3_html: 'Sähköisen karttaikkunan tulee sisältää tekijän nimi kartan alaosassa:' - attribution_example: - alt: Esimerkki siitä, miten nimetä OpenStreetMap nettisivulla - title: Nimeämisesimerkki - more_title_html: Lisätietoja - more_1_html: |- - Lue lisää aineiston käyttämisestä ja tekijöiden mainitsemisesta OSM-säätiön lisensointiohjeesta. - more_2_html: "Vaikka OpenStreetMap on avointa dataa, emme voi tarjota maksutonta - karttarajapintaa (API) kolmannen osapuolen kehittäjille.\n\nTutustu karttarajapinnan - käyttöehtoihin,\nkartta-aineiston - käyttöehtoihin ja \nNominatimin - käyttöehtoihin." - contributors_title_html: Tekijät - contributors_intro_html: |- - Tekijöinämme on tuhansia yksityishenkilöitä. Olemme myös sisällyttäneet - vapaasti lisensoitua dataa kansallisilta kartoitustoimistoilta - ja muista lähteistä, muun muassa: - contributors_at_html: |- - Itävalta: Sisältää karttatietoja - Stadt Wienistä (CC BY -lisenssillä), - Land Vorarlbergista ja - Land Tirolista (CC-BY AT -lisenssillä tietyin muutoksin). - contributors_ca_html: |- - Kanada: Sisältää karttatietoja - GeoBasesta ®, GeoGratisista (© Department of Natural - Resources Canada), CanVecista (© Department of Natural - Resources Canada), ja StatCanista (Geography Division, - Statistics Canada). - contributors_fi_html: 'Suomi: Sisältää karttatietoja Maanmittauslaitoksen - maastotietokannasta ja muista lähteistä Maanmittauslaitoksen - lisenssin mukaisesti.' - contributors_fr_html: |- - Ranska: Sisältää karttatietoja - Direction Générale des Impôtsista. - contributors_nl_html: |- - Alankomaat: Sisältää © AND-karttatietoja vuodelta 2007 - (www.and.com) - contributors_nz_html: 'Uusi-Seelanti: Sisältää karttatietoja - Land Information New Zealandista. Crown Copyright.' - contributors_si_html: "Slovenia: Sisältää \nMaanmittaus- - ja kartoitusviranomaisen sekä\nMaatalous-, - metsä- ja ruokaministeriön tuottamia karttatietoja\n(Slovenian julkista - karttamateriaalia)." - contributors_za_html: |- - Etelä-Afrikka: Sisältää karttatietoja - Chief Directorate: - National Geo-Spatial Informationista, kaikki oikeudet pidätetään. - contributors_gb_html: |- - Iso-Britannia: Sisältää Ordnance Surveyn - keräämiä karttatietoja © Crown Copyright ja tietokantojen käyttöoikeuden joulukuulta 2010. - contributors_footer_1_html: |- - Täydellinen lista OpenStreetMapin tukijoista löytyy OpenStreetMapin wikistä Avustajat-sivulta. - contributors_footer_2_html: |- - Tietojen sisältyminen OpenStreetMapiin ei tarkoita, että tietojen antaja - ottaa kantaa OpenStreetMapiin tai vastuuta tietojen oikeellisuudesta. - infringement_title_html: Tekijänoikeusloukkaus - infringement_1_html: |- - OpenStreetMapin kartoittajia muistutetaan, että kopioiminen tekijänoikeuksien alaisista teoksista - (esimerkiksi Google Mapsista tai paperikartoista) ilman tekijänoikeuden haltijan nimenomaista lupaa on kielletty. - infringement_2_html: Jos kuka tahansa OpenStreetMapin käyttäjä epäilee, että - karttatietoja on otettu luvattomasta lähteestä OSM:n karttatietoihin tai sivustolle, - siitä tulee tehdä poistopyyntö - tai ilmoittaa suoraan. - trademarks_title_html: Tavaramerkit - trademarks_1_html: OpenStreetMap, suurennuslasilogo ja maailmankartta ovat OpenStreetMap-säätiön - rekisteröityjä tavaramerkkejä. Jos sinulla on kysyttävää tutustu tavaramerkkisivuun. - welcome_page: - title: Tervetuloa! - introduction_html: 'Tervetuloa OpenStreetMapiin: ilmaiseen ja vapaasti muokattavaan - maailmankarttaan. Rekisteröityminen on nyt suoritettu, joten olet valmis aloittamaan - kartan muokkaamisen. Tutustu ensin kuitenkin näihin perusasioihin.' - whats_on_the_map: - title: Kartan sisältö - on_html: OpenStreetMapissä voi kartoittaa asioita, jotka ovat olemassa juuri - nyt – se sisältää miljoonia rakennuksia, teitä ja muita tietoja maailmasta. - Voit kartoittaa mitä tahansa reaalimaailman piirteitä, jotka sinua kiinnostavat. - off_html: Kartta ei sisällä mielipiteitä, kuten arvosteluja, historiallisia - tai hypoteettisia ominaisuuksia, eikä tietoja tekijänoikeuksin suojatuista - lähteistä. Ellei sinulla ole erityistä lupaa, älä kopioi verkko- tai paperikarttoja. - basic_terms: - title: Käsitteitä ja termistöä - paragraph_1_html: OpenStreetMapissa käytetään paljon vain sille omaista termistöä. - Kun nämä sanat ovat hallinnassa, olet jo voiton puolella! - editor_html: Muokkausohjelma tai kartanmuokkain - (engl. editor) on ohjelmisto tai verkkosivusto, jolla voi muokata karttaa. - node_html: Piste (engl. node) on pistemäinen kohde kartalla, - kuten ravintola tai puu. Näitä kutsutaan paikkapisteiksi. Pisteet, joilla - ei ole ominaisuustietoja ja ovat vain viivan osana, kutsutaan myös viivapisteiksi. - way_html: Avoin viiva (engl. way) on viivamainen kohde, kuten - katu tai joki. Suljettu viiva eli alue (engl. area) kuvaa - aluetta, kuten järveä tai rakennusta. - tag_html: Tagi eli ominaisuustieto kuvaa pisteen, - viivan tai alueen käyttötarkoitusta. Tällaisia tietoja ovat esimerkiksi ravintolan - nimi tai kadun nopeusrajoitus. - rules: - title: Pelisäännöt - paragraph_1_html: "OpenStreetMapilla on joitakin muodollisia säännöksiä, mutta - oletamme kaikkien käyttäjien tekevän yhteistyötä muiden kanssa. Jos harkitset - muita toimintoja kuin perusmuokkausta, lue ohje tietojen - tuonnista ja \nautomaattisista - muokkauksista." - questions: - title: Kysyttävää? - paragraph_1_html: OpenStreetMapin käyttötukea on saatavilla useilla eri tavoilla. - Tutustu OpenStreetMapin ohjekeskukseen. - start_mapping: Aloita kartan muokkaaminen - add_a_note: - title: Eikö muokkaaminen innosta? Ilmoita karttavirheistä! - paragraph_1_html: Jos huomaat kartalla virheen, muttet halua korjata sitä itse, - tee siitä karttavirheilmoitus. - paragraph_2_html: 'Se on helppoa! Siirry kartalle - ja napsauta -kuvaketta. Siirrä kartalle ilmestyvä - karttamerkki virheen kohdalle. Kirjoita virheestä lisätietoja: Suomessa olevista - virheistä suomeksi ja muualla olevista virheistä paikallisella kielellä tai - englanniksi. Lopuksi tallenna ilmoitus, jolloin muut kartoittajat voivat korjata - virheen.' - fixthemap: - title: Ilmoita ongelmasta / Korjaa karttaa - how_to_help: - title: Kuinka voin auttaa - join_the_community: - title: Liity yhteisöön - explanation_html: Jos olet huomannut ongelman kartassa, kuten puuttuvan tien - tai puuttuvan osoitteesi, paras tapa toimia on liittyä OpenStreetMap-yhteisöön - ja lisätä tai korjata kohta itse. - add_a_note: - instructions_html: "Klikkaa vain tai samaa ikonia - karttanäkymässä.\nTämä lisää merkin kartalle, jota voit liikuttaa \nraahaamalla. - Lisää tekstisi, ja klikkaa Tallenna, ja muut voivat tutkia sitä." - other_concerns: - title: Muut huolenaiheet - explanation_html: Jos sinulla on huolia siitä miten meidän tietoamme käytetään - tai huolia sisällöstä, katso neuvoa copyright-sivultamme - saadaksesi lisätietoa, tai ota yhteyttä sopivaanOSMF-työryhmään. - help_page: - title: Ohjekeskus - introduction: Ohjeita ja vinkkejä OpenStreetMapin käyttöön on saatavilla useista - eri lähteistä. - welcome: - url: /welcome - title: Tervetuloa OpenStreetMapiin - description: Opi OpenStreetMapin perusteet tällä helpolla aloitusoppaalla. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Fi:Beginners%27_guide - title: Aloitusopas - description: Yhteisön ylläpitämä opas aloittelijoille. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Etsi vastauksia tai esitä oma kysymyksesi OSM:n kysy- ja vastaa - -sivustolla. Englanninkielinen. - mailing_lists: - title: Postituslistat - description: Esitä kysymyksiä tai keskustele laajalti kiinnostavista aiheista - aiheita koskevilla tai alueellisilla sähköpostilistoilla. - forums: - title: Keskustelupalsta - description: Kysymykset ja keskustelut niille, jotka haluavat mielummin ilmoitustaulutyylisen - käyttöliittymän. - irc: - title: IRC - description: Interaktiivinen chat monilla eri kielillä ja monista eri aiheista. - switch2osm: - title: switch2osm (Vaihda OSM:iin) - description: Auta yrityksiä ja organisaatioita vaihtamaan OpenStreetMapiin pohjautuviin - karttoihin ja muihin palveluihin. - wiki: - url: https://wiki.openstreetmap.org/wiki/Fi:Main_Page - title: wiki.openstreetmap.org - description: Tutustu syvällisemmin OpenStreetMapiin wikikirjastossa. Osittain - englanninkielinen. - about_page: - next: Seuraava - copyright_html: ©OpenStreetMapin
        tekijät - used_by: Tuhannet verkkosivustot, mobiilisovellukset ja laitteistot käyttävät - %{name}-karttaa - lede_text: OpenStreetMapia rakentavat vapaaehtoiset yhteisön jäsenet, jotka tuottavat - ja ylläpitävät karttatietoja teistä, rautateistä, kahviloista, rautatieasemista - ja monista muista kohteista kaikkialla maailmassa. - local_knowledge_title: Paikallistuntemus - local_knowledge_html: OpenStreetMapissa korostuu paikallistuntemus. Kartoittajat - käyttävät ilmakuvia, GPS-paikantamia ja jalkautumista pitääkseen OpenStreetMap-kartan - ajan tasalla. - community_driven_title: Yhteisön voima - community_driven_html: |- - OpenStreetMap-yhteisö on monipuolinen, intohimoinen ja kasvaa joka päivä. Yhteisöön kuuluu harrastajakartoittajia, GIS-ammattilaisia, järjestelmää ylläpitäviä insinöörejä, humanitaarisia auttajia, jotka kartoittavat katastrofin kärsineitä alueita sekä monia muita. Lisätietoja yhteisöstä saa lukemalla OpenStreetMap-blogia, käyttäjien päiväkirjoja, - yhteisöblogeja ja - OSM-säätiön verkkosivua. - open_data_title: Avoin data - open_data_html: 'OpenStreetMap on avointa dataa: palvelua saa käyttää vapaasti - mihin tahansa, kunhan OpenStreetMap tekijöineen mainitaan. Jos palvelua kehitetään - tai muuunnellaan, sitä saa levittää eteenpäin vain samalla lisenssillä. Lisätietoja - on Tekijänoikeus ja lisenssi -sivulla.' - legal_title: Lakitekninen jako - legal_html: "Tämä ja monet muut OSM-sivustot ovat muodollisesti OpenStreetMap-säätiön - (OSMF) hallinnoimia OSM-yhteisön puolesta. Kaikkien näiden sivustojen käyttöön - sovelletaan \nsallitun - käytön käytäntöjä ja tietosuojakäytäntöä - (molemmat sisällöt saatavilla vain englanniksi).\n
        \nOta - yhteys OSMF:ään lisensointi-, tekijänoikeus- ja muissa lakiteknisissä kysymyksissä.\n
        \nNimi - OpenStreetMap, suurennuslasilogo ja slogan State of the Map ovat säätiön - rekisteröimiä tavaramerkkejä." - partners_title: Kumppanit notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} on lisännyt kommentin päiväkirjamerkintääsi' @@ -1486,6 +1198,147 @@ fi: delete: deleted: Viesti on poistettu. site: + about: + next: Seuraava + copyright_html: ©OpenStreetMapin
        tekijät + used_by: Tuhannet verkkosivustot, mobiilisovellukset ja laitteistot käyttävät + %{name}-karttaa + lede_text: OpenStreetMapia rakentavat vapaaehtoiset yhteisön jäsenet, jotka + tuottavat ja ylläpitävät karttatietoja teistä, rautateistä, kahviloista, rautatieasemista + ja monista muista kohteista kaikkialla maailmassa. + local_knowledge_title: Paikallistuntemus + local_knowledge_html: OpenStreetMapissa korostuu paikallistuntemus. Kartoittajat + käyttävät ilmakuvia, GPS-paikantamia ja jalkautumista pitääkseen OpenStreetMap-kartan + ajan tasalla. + community_driven_title: Yhteisön voima + community_driven_html: |- + OpenStreetMap-yhteisö on monipuolinen, intohimoinen ja kasvaa joka päivä. Yhteisöön kuuluu harrastajakartoittajia, GIS-ammattilaisia, järjestelmää ylläpitäviä insinöörejä, humanitaarisia auttajia, jotka kartoittavat katastrofin kärsineitä alueita sekä monia muita. Lisätietoja yhteisöstä saa lukemalla OpenStreetMap-blogia, käyttäjien päiväkirjoja, + yhteisöblogeja ja + OSM-säätiön verkkosivua. + open_data_title: Avoin data + open_data_html: 'OpenStreetMap on avointa dataa: palvelua saa käyttää + vapaasti mihin tahansa, kunhan OpenStreetMap tekijöineen mainitaan. Jos palvelua + kehitetään tai muuunnellaan, sitä saa levittää eteenpäin vain samalla lisenssillä. + Lisätietoja on Tekijänoikeus ja lisenssi + -sivulla.' + legal_title: Lakitekninen jako + legal_html: "Tämä ja monet muut OSM-sivustot ovat muodollisesti OpenStreetMap-säätiön + (OSMF) hallinnoimia OSM-yhteisön puolesta. Kaikkien näiden sivustojen käyttöön + sovelletaan \nsallitun + käytön käytäntöjä ja tietosuojakäytäntöä + (molemmat sisällöt saatavilla vain englanniksi).\n
        \nOta + yhteys OSMF:ään lisensointi-, tekijänoikeus- ja muissa lakiteknisissä + kysymyksissä.\n
        \nNimi OpenStreetMap, suurennuslasilogo ja slogan State + of the Map ovat säätiön + rekisteröimiä tavaramerkkejä." + partners_title: Kumppanit + copyright: + foreign: + title: Tietoja tästä käännöksestä + text: Jos tämän käännetyn sivun ja %{english_original_link} välillä on eroja, + englanninkielinen sivu on aina etusijalla. + english_link: englanninenkielisen alkuperäisversion + native: + title: Tietoja sivusta + text: Tällä sivulla on alkuperäinen englanninkielinen versio tekijäoikeuksista. + Saatavilla on myös %{native_link}. Voit myös lopettaa tekijänoikeuksien + lukemisen ja %{mapping_link}. + native_link: suomenkielinen versio + mapping_link: aloittaa kartoituksen + legal_babble: + title_html: Tekijänoikeus ja lisenssi + intro_1_html: |- + OpenStreetMap® on avointa dataa, jonka OpenStreetMap Foundation (OSMF) on lisensoinut Open Data Commons Open Database -lisenssillä (ODbL). + intro_2_html: "OpenStreetMapin karttoja ja tietoja voi kopioida, levittää, + välittää ja mukauttaa, \nkunhan OpenStreetMap ja sen tekijät mainitaan. + Jos karttoja tai tietoja muutetaan tai kehitetään, niitä saa levittää vain + samalla lisenssillä.\nLakitekstissä + mainitaan levittäjän oikeudet ja velvollisuudet." + intro_3_html: |- + Kartta-aineisto ja dokumentaatio on lisensoitu Creative + Commons Nimeä-Jaa samoin 2.0 -lisenssillä (CC-BY-SA). + credit_title_html: OpenStreetMapin mainitseminen + credit_1_html: OpenStreetMapin sisältöä levitettäessä on mainittava teksti + "© OpenStreetMapin tekijät" tai sen englanninkielinen vastine + "© OpenStreetMap contributors". + credit_2_html: "Levittäjän tulee tehdä selväksi, että aineisto on saatavilla + Open Database Lisenssillä\nja kartta-aineiston olevan lisensoitu CC-BY-SA-lisenssillä. + Tämä voidaan tehdä sijoittamalla sivulle linkki\ntälle + tekijänoikeussivulle. \nJos linkkien käyttö ei ole mahdollista (esimerkiksi + paperille tulostettu aineisto),\nsuosittelemme ohjaamaan lukijat osoitteisiin + www.openstreetmap.org, opendatacommons.org ja tarvittaessa myös creativecommons.org." + credit_3_html: 'Sähköisen karttaikkunan tulee sisältää tekijän nimi kartan + alaosassa:' + attribution_example: + alt: Esimerkki siitä, miten nimetä OpenStreetMap nettisivulla + title: Nimeämisesimerkki + more_title_html: Lisätietoja + more_1_html: |- + Lue lisää aineiston käyttämisestä ja tekijöiden mainitsemisesta OSM-säätiön lisensointiohjeesta. + more_2_html: "Vaikka OpenStreetMap on avointa dataa, emme voi tarjota maksutonta + karttarajapintaa (API) kolmannen osapuolen kehittäjille.\n\nTutustu karttarajapinnan + käyttöehtoihin,\nkartta-aineiston + käyttöehtoihin ja \nNominatimin + käyttöehtoihin." + contributors_title_html: Tekijät + contributors_intro_html: |- + Tekijöinämme on tuhansia yksityishenkilöitä. Olemme myös sisällyttäneet + vapaasti lisensoitua dataa kansallisilta kartoitustoimistoilta + ja muista lähteistä, muun muassa: + contributors_at_html: |- + Itävalta: Sisältää karttatietoja + Stadt Wienistä (CC BY -lisenssillä), + Land Vorarlbergista ja + Land Tirolista (CC-BY AT -lisenssillä tietyin muutoksin). + contributors_ca_html: |- + Kanada: Sisältää karttatietoja + GeoBasesta ®, GeoGratisista (© Department of Natural + Resources Canada), CanVecista (© Department of Natural + Resources Canada), ja StatCanista (Geography Division, + Statistics Canada). + contributors_fi_html: 'Suomi: Sisältää karttatietoja Maanmittauslaitoksen + maastotietokannasta ja muista lähteistä Maanmittauslaitoksen + lisenssin mukaisesti.' + contributors_fr_html: |- + Ranska: Sisältää karttatietoja + Direction Générale des Impôtsista. + contributors_nl_html: |- + Alankomaat: Sisältää © AND-karttatietoja vuodelta 2007 + (www.and.com) + contributors_nz_html: 'Uusi-Seelanti: Sisältää karttatietoja + Land Information New Zealandista. Crown Copyright.' + contributors_si_html: "Slovenia: Sisältää \nMaanmittaus- + ja kartoitusviranomaisen sekä\nMaatalous-, + metsä- ja ruokaministeriön tuottamia karttatietoja\n(Slovenian julkista + karttamateriaalia)." + contributors_za_html: |- + Etelä-Afrikka: Sisältää karttatietoja + Chief Directorate: + National Geo-Spatial Informationista, kaikki oikeudet pidätetään. + contributors_gb_html: |- + Iso-Britannia: Sisältää Ordnance Surveyn + keräämiä karttatietoja © Crown Copyright ja tietokantojen käyttöoikeuden joulukuulta 2010. + contributors_footer_1_html: |- + Täydellinen lista OpenStreetMapin tukijoista löytyy OpenStreetMapin wikistä Avustajat-sivulta. + contributors_footer_2_html: |- + Tietojen sisältyminen OpenStreetMapiin ei tarkoita, että tietojen antaja + ottaa kantaa OpenStreetMapiin tai vastuuta tietojen oikeellisuudesta. + infringement_title_html: Tekijänoikeusloukkaus + infringement_1_html: |- + OpenStreetMapin kartoittajia muistutetaan, että kopioiminen tekijänoikeuksien alaisista teoksista + (esimerkiksi Google Mapsista tai paperikartoista) ilman tekijänoikeuden haltijan nimenomaista lupaa on kielletty. + infringement_2_html: Jos kuka tahansa OpenStreetMapin käyttäjä epäilee, että + karttatietoja on otettu luvattomasta lähteestä OSM:n karttatietoihin tai + sivustolle, siitä tulee tehdä poistopyyntö + tai ilmoittaa suoraan. + trademarks_title_html: Tavaramerkit + trademarks_1_html: OpenStreetMap, suurennuslasilogo ja maailmankartta ovat + OpenStreetMap-säätiön rekisteröityjä tavaramerkkejä. Jos sinulla on kysyttävää + tutustu tavaramerkkisivuun. index: js_1: Selain ei tue JavaScriptiä tai sen suorittaminen on estetty. js_2: OpenStreetMap tarvitsee JavaScriptin liikuteltavaan karttaan. @@ -1515,6 +1368,110 @@ fi: id_not_configured: iD-ohjelmaa ei ole asetettu no_iframe_support: Käytössä oleva selain ei tue HTML-kehyksiä, joka vaaditaan tämän toiminnon käyttämiseen. + export: + title: Alueen vienti + area_to_export: Vietävä alue + manually_select: Valitse pienempi alue + format_to_export: Vientimuoto + osm_xml_data: OpenStreetMapin XML-muoto + map_image: Karttakuva (näyttää standarditason) + embeddable_html: HTML-koodi + licence: Lisenssi + export_details: OpenStreetMap-karttatietoja saa käyttää Open + Data Commons Open Database License (ODbL) (engl.) ehdoilla. + too_large: + advice: 'Jos vientitoiminto ei toimi, kokeile myös seuraavia palveluja:' + body: 'Näin suurta aluetta ei voi viedä OpenStreetMap XML-tiedostona. Lähennä + karttaa tai valitse pienempi alue, tai vaihtoehtoisesti lataa tiedosto joltakin + seuraavista:' + planet: + title: Planet OSM + description: Säännöllisesti päivitettyjä kopioita täydellisestä OpenStreetMap-tietokannasta + overpass: + title: Overpass API + description: Lataa kartalle rajattu alue OpenStreetMapin varapalvelimelta + geofabrik: + title: Geofabrik-lataukset + description: Säännöllisesti päivitetyt otteet maanosista, maista ja valituista + kaupungeista + metro: + title: Metro-otteet + description: Otteita maailman suurista kaupungeista ja niitä ympäröivistä + alueista + other: + title: Muut lähteet + description: Muut lähteet ovat esillä OpenStreetMap-wikissä + options: Asetukset + format: 'Tiedostomuoto:' + scale: Mittakaava + max: enintään + image_size: Kuvan koko + zoom: Suurennostaso + add_marker: Lisää vietävään kartaan kohdemerkki + latitude: 'Lev:' + longitude: 'Pit:' + output: Tulos + paste_html: Kopioi ja liitä tämä HTML-koodi verkkosivullesi + export_button: Vie + fixthemap: + title: Ilmoita ongelmasta / Korjaa karttaa + how_to_help: + title: Kuinka voin auttaa + join_the_community: + title: Liity yhteisöön + explanation_html: Jos olet huomannut ongelman kartassa, kuten puuttuvan + tien tai puuttuvan osoitteesi, paras tapa toimia on liittyä OpenStreetMap-yhteisöön + ja lisätä tai korjata kohta itse. + add_a_note: + instructions_html: "Klikkaa vain tai samaa ikonia + karttanäkymässä.\nTämä lisää merkin kartalle, jota voit liikuttaa \nraahaamalla. + Lisää tekstisi, ja klikkaa Tallenna, ja muut voivat tutkia sitä." + other_concerns: + title: Muut huolenaiheet + explanation_html: Jos sinulla on huolia siitä miten meidän tietoamme käytetään + tai huolia sisällöstä, katso neuvoa copyright-sivultamme + saadaksesi lisätietoa, tai ota yhteyttä sopivaanOSMF-työryhmään. + help: + title: Ohjekeskus + introduction: Ohjeita ja vinkkejä OpenStreetMapin käyttöön on saatavilla useista + eri lähteistä. + welcome: + url: /welcome + title: Tervetuloa OpenStreetMapiin + description: Opi OpenStreetMapin perusteet tällä helpolla aloitusoppaalla. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Fi:Beginners%27_guide + title: Aloitusopas + description: Yhteisön ylläpitämä opas aloittelijoille. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Etsi vastauksia tai esitä oma kysymyksesi OSM:n kysy- ja vastaa + -sivustolla. Englanninkielinen. + mailing_lists: + url: https://lists.openstreetmap.org/ + title: Postituslistat + description: Esitä kysymyksiä tai keskustele laajalti kiinnostavista aiheista + aiheita koskevilla tai alueellisilla sähköpostilistoilla. + forums: + url: https://forum.openstreetmap.org/ + title: Keskustelupalsta + description: Kysymykset ja keskustelut niille, jotka haluavat mielummin ilmoitustaulutyylisen + käyttöliittymän. + irc: + url: https://irc.openstreetmap.org/ + title: IRC + description: Interaktiivinen chat monilla eri kielillä ja monista eri aiheista. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm (Vaihda OSM:iin) + description: Auta yrityksiä ja organisaatioita vaihtamaan OpenStreetMapiin + pohjautuviin karttoihin ja muihin palveluihin. + wiki: + url: https://wiki.openstreetmap.org/wiki/Fi:Main_Page + title: wiki.openstreetmap.org + description: Tutustu syvällisemmin OpenStreetMapiin wikikirjastossa. Osittain + englanninkielinen. sidebar: search_results: Hakutulokset close: Sulje @@ -1615,6 +1572,57 @@ fi: image: Kuva alt: Vaihtoehtoinen teksti url: Osoite + welcome: + title: Tervetuloa! + introduction_html: 'Tervetuloa OpenStreetMapiin: ilmaiseen ja vapaasti muokattavaan + maailmankarttaan. Rekisteröityminen on nyt suoritettu, joten olet valmis aloittamaan + kartan muokkaamisen. Tutustu ensin kuitenkin näihin perusasioihin.' + whats_on_the_map: + title: Kartan sisältö + on_html: OpenStreetMapissä voi kartoittaa asioita, jotka ovat olemassa + juuri nyt – se sisältää miljoonia rakennuksia, teitä ja muita tietoja + maailmasta. Voit kartoittaa mitä tahansa reaalimaailman piirteitä, jotka + sinua kiinnostavat. + off_html: Kartta ei sisällä mielipiteitä, kuten arvosteluja, historiallisia + tai hypoteettisia ominaisuuksia, eikä tietoja tekijänoikeuksin suojatuista + lähteistä. Ellei sinulla ole erityistä lupaa, älä kopioi verkko- tai paperikarttoja. + basic_terms: + title: Käsitteitä ja termistöä + paragraph_1_html: OpenStreetMapissa käytetään paljon vain sille omaista termistöä. + Kun nämä sanat ovat hallinnassa, olet jo voiton puolella! + editor_html: Muokkausohjelma tai kartanmuokkain + (engl. editor) on ohjelmisto tai verkkosivusto, jolla voi muokata karttaa. + node_html: Piste (engl. node) on pistemäinen kohde kartalla, + kuten ravintola tai puu. Näitä kutsutaan paikkapisteiksi. Pisteet, joilla + ei ole ominaisuustietoja ja ovat vain viivan osana, kutsutaan myös viivapisteiksi. + way_html: Avoin viiva (engl. way) on viivamainen kohde, kuten + katu tai joki. Suljettu viiva eli alue (engl. area) kuvaa + aluetta, kuten järveä tai rakennusta. + tag_html: Tagi eli ominaisuustieto kuvaa + pisteen, viivan tai alueen käyttötarkoitusta. Tällaisia tietoja ovat esimerkiksi + ravintolan nimi tai kadun nopeusrajoitus. + rules: + title: Pelisäännöt + paragraph_1_html: "OpenStreetMapilla on joitakin muodollisia säännöksiä, mutta + oletamme kaikkien käyttäjien tekevän yhteistyötä muiden kanssa. Jos harkitset + muita toimintoja kuin perusmuokkausta, lue ohje tietojen + tuonnista ja \nautomaattisista + muokkauksista." + questions: + title: Kysyttävää? + paragraph_1_html: OpenStreetMapin käyttötukea on saatavilla useilla eri tavoilla. + Tutustu OpenStreetMapin ohjekeskukseen. + start_mapping: Aloita kartan muokkaaminen + add_a_note: + title: Eikö muokkaaminen innosta? Ilmoita karttavirheistä! + paragraph_1_html: Jos huomaat kartalla virheen, muttet halua korjata sitä + itse, tee siitä karttavirheilmoitus. + paragraph_2_html: 'Se on helppoa! Siirry kartalle + ja napsauta -kuvaketta. Siirrä kartalle + ilmestyvä karttamerkki virheen kohdalle. Kirjoita virheestä lisätietoja: + Suomessa olevista virheistä suomeksi ja muualla olevista virheistä paikallisella + kielellä tai englanniksi. Lopuksi tallenna ilmoitus, jolloin muut kartoittajat + voivat korjata virheen.' trace: visibility: private: Yksityinen (vain pisteet ilman nimeä ja aikaleimoja) @@ -1657,6 +1665,7 @@ fi: trace_header: upload_trace: Lisää GPS-jälki see_all_traces: Näytä kaikki jäljet + see_my_traces: Katsele jälkiäni traces_waiting: one: Sinulla on %{count} jälki käsittelyjonossa odottamassa tallennusta tietokantaan. Olisi huomaavaista jos odottaisit näiden valmistuvan ennen kuin lähetät @@ -1687,6 +1696,7 @@ fi: delete_track: Poista tämä jälki trace_not_found: Jälkeä ei löydy! visibility: 'Näkyvyys:' + confirm_delete: Poista tämä jälki? trace_paging_nav: showing_page: Sivu %{page} older: Vanhat jäljet @@ -1711,6 +1721,7 @@ fi: map: sijainti kartalla list: public_traces: Julkiset GPS-jäljet + my_traces: GPS-jälkeni public_traces_from: Käyttäjän %{user} julkiset GPS-jäljet description: Selaa viimeisimpiä GPS-jälkiä tagged_with: ', joilla on tagi %{tags}' @@ -1746,7 +1757,7 @@ fi: sisään verkkokäyttöliittymään nähdäksesi osallistujien ehdot. Niihin ei tarvitse suostua, mutta ne täytyy lukea. oauth: - oauthorize: + authorize: title: Salli tilisi käyttö request_access: Sovellus %{app_name} pyytää pääsyä käyttäjätiliisi %{user}. Tarkasta oikeudet, jotka tahdot antaa sovellukselle. Voit valita mielestäsi @@ -1760,11 +1771,11 @@ fi: allow_write_gpx: tallenna GPS-jälkiä. allow_write_notes: Muokkaa muistiinpanoja. grant_access: Myönnä oikeudet - oauthorize_success: + authorize_success: title: Valtuutuspyyntö hyväksytty allowed: Sovellukselle %{app_name} on myönnetty käyttöoikeus käyttäjätiliisi. verification: Vahvistuskoodi on %{code}. - oauthorize_failure: + authorize_failure: title: Valtuutuspyyntö epäonnistui denied: Sovelluksen %{app_name} käyttöoikeus käyttäjätiliisi on poistettu. invalid: Lupamerkki ei kelpaa. @@ -1998,6 +2009,7 @@ fi: if set location: Määrittelet sijaintisi sivulla %{settings_link} nähdäksesi lähialueen käyttäjiä. settings_link_text: asetussivulla + my friends: Ystäväni no friends: Sinulla ei ole vielä kavereita. km away: '%{count} kilometrin päässä' m away: '%{count} metrin päässä' @@ -2193,7 +2205,7 @@ fi: confirm: Vahvista fail: Ryhmän ”%{role}” poistaminen käyttäjältä ”%{name}” epäonnistui. Tarkista että käyttäjä ja ryhmä ovat molemmat kelvollisia. - user_block: + user_blocks: model: non_moderator_update: Sinun on oltava moderaattori luodaksesi tai muokataksesi estoa. @@ -2253,20 +2265,6 @@ fi: period: one: 1 tunti other: '%{count} tuntia' - partial: - show: Näytä - edit: Muokkaa - revoke: Estä! - confirm: Oletko varma? - display_name: Estetty käyttäjä - creator_name: Tekijä - reason: Eston syy - status: Tila - revoker_name: Eston tehnyt - not_revoked: (ei kumottu) - showing_page: Sivu %{page} - next: Seuraava » - previous: « Edellinen helper: time_future: Päättyy %{time} kuluttua. until_login: Aktiivinen kunnes käyttäjä kirjautuu sisään. @@ -2297,8 +2295,22 @@ fi: back: Näytä kaikki estot revoker: 'Estäjä:' needs_view: Käyttäjän täytyy kirjautua sisään ennen kuin esto poistuu. - note: - description: + block: + not_revoked: (ei kumottu) + show: Näytä + edit: Muokkaa + revoke: Estä! + blocks: + display_name: Estetty käyttäjä + creator_name: Tekijä + reason: Eston syy + status: Tila + revoker_name: Eston tehnyt + showing_page: Sivu %{page} + next: Seuraava » + previous: « Edellinen + notes: + comment: opened_at_html: Luotu %{when} sitten opened_at_by_html: '%{user} luonut %{when} sitten' commented_at_html: Päivitetty %{when} sitten @@ -2427,7 +2439,7 @@ fi: distance: Etäisyys errors: no_route: Reittiä näiden paikkojen välille ei löytynyt. - no_place: Paikkaa ei löytynyt. + no_place: Paikkaa '%{place}' ei löytynyt. instructions: continue_without_exit: Jatka tiellä %{name} slight_right_without_exit: Kaarra oikealle tielle %{name} @@ -2447,6 +2459,7 @@ fi: onramp_right_with_name_directions: Käänny vasemmalle rampille %{name} suuntaan %{directions} onramp_right_without_directions: Käänny oikealle rampille + onramp_right: Käänny oikealle rampille endofroad_right_without_exit: Tienpäässä käänny oikealle tielle %{name} merge_right_without_exit: Liity oikealle tielle %{name} fork_right_without_exit: Liittymässä ryhmity oikealle suuntaan %{name} @@ -2472,6 +2485,7 @@ fi: onramp_left_with_name_directions: Käänny vasemmalle rampille %{name} suuntaan %{directions} onramp_left_without_directions: Käänny vasemmalle rampille + onramp_left: Käänny vasemmalle rampille endofroad_left_without_exit: Tienpäässä käänny vasemmalle tielle %{name} merge_left_without_exit: Liity vasemmalle tielle %{name} fork_left_without_exit: Liittymässä ryhmity vasemmalle suuntaan %{name} @@ -2511,7 +2525,7 @@ fi: show_address: Näytä osoite query_features: Lähistöllä centre_map: Keskitä kartta - redaction: + redactions: edit: description: Kuvaus heading: Muokkaa laitosta diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 3e36a1486..f63bebc3f 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -395,54 +395,6 @@ fr: ago: il y a %{ago} newer_comments: Commentaires plus récents older_comments: Commentaires plus anciens - export: - title: Exporter - start: - area_to_export: Zone à exporter - manually_select: Sélectionner manuellement une autre zone - format_to_export: Format d’export - osm_xml_data: Données XML OpenStreetMap - map_image: Image de la carte (affiche le calque standard) - embeddable_html: HTML incorporable. - licence: Licence - export_details: Les données d’OpenStreetMap sont publiées sous la licence - Open Data Commons Open Database (ODbL). - too_large: - advice: 'Si l’export ci-dessus échoue, veuillez envisager l’utilisation d’une - des sources listées ci-dessous :' - body: Cette zone est trop vaste pour être exportée au format OpenStreetMap - XML. Veuillez zoomer ou sélectionner une zone plus petite, ou utiliser une - des sources suivantes pour le téléchargement de données massives. - planet: - title: Planète OSM - description: Copies régulièrement mises à jour de la base de données complète - de OpenStreetMap - overpass: - title: API Overpass - description: Télécharger ce cadre englobant depuis un miroir de la base - de données OpenStreetMap - geofabrik: - title: Téléchargements de Geofabrik - description: Extractions régulièrement mises à jour des continents, des - pays et des villes sélectionnées - metro: - title: Extractions de Metro - description: Extractions des principales villes du monde et de leurs environs - other: - title: Autres sources - description: Sources supplémentaires listées dans le wiki de OpenStreetMap - options: Options - format: Format - scale: Échelle - max: max - image_size: Taille de l’image - zoom: Zoom - add_marker: Ajouter un marqueur sur la carte - latitude: 'Lat :' - longitude: 'Lon :' - output: Sortie - paste_html: Copier le code HTML à intégrer dans un site web - export_button: Exporter geocoder: search: title: @@ -846,13 +798,13 @@ fr: country: Pays county: Comté farm: Ferme - hamlet: Hameau + hamlet: Hameau ou lieu-dit habité house: Maison houses: Maisons island: Île islet: Îlot isolated_dwelling: Lieu-dit habité - locality: Lieu-dit + locality: Lieu-dit inhabité municipality: Municipalité neighbourhood: Quartier postcode: Code postal @@ -1089,268 +1041,6 @@ fr: text: Faire un don learn_more: En savoir plus more: Plus - license_page: - foreign: - title: À propos de cette traduction - text: En cas de conflit entre la présente page traduite et %{english_original_link}, - la version anglaise prévaudra - english_link: l’original en anglais - native: - title: À propos de cette page - text: Vous lisez la version anglaise originale de la page au sujet des droits - d’auteur. Vous pouvez retourner à la %{native_link} de cette page ou arrêter - de lire à son sujet et %{mapping_link}. - native_link: traduction française - mapping_link: commencer à contribuer - legal_babble: - title_html: Droits d’auteur et licence - intro_1_html: |- - OpenStreetMap® est un ensemble de données ouvertes, disponibles sous licence libre Open Data Commons Open Database License (ODbL) auprès de la Fondation OpenStreetMap (OSMF). - intro_2_html: Vous êtes libre de copier, distribuer, transmettre et adapter - nos données, à condition que vous créditiez, OpenStreetMap et ses contributeurs. - Si vous modifiez ou utilisez nos données dans d’autres œuvres dérivées, vous - ne pouvez distribuer celles-ci que sous la même licence. Le texte - légal complet détaille vos droits et responsabilités. - intro_3_html: Nos carreaux de rendu cartographiques, ainsi que notre documentation, - sont disponibles sous la licence Creative - Commons paternité – partage à l’identique 2.0 (CC-BY-SA). - credit_title_html: Comment créditer OpenStreetMap - credit_1_html: Nous demandons que votre crédit comporte la mention « © les contributeurs - d’OpenStreetMap ». - credit_2_html: |- - Vous devez également préciser clairement que les données sont disponibles sous la licence ODbL et, si vous utilisez les tuiles de notre carte, que la carte est sous la licence CC-BY-SA. Vous pouvez mentionner ceci avec un lien hypertexte vers - cette page de mentions légales. - Alternativement, et obligatoirement si vous distribuez OpenStreetMap sous forme de données brutes, vous pouvez directement nommer et fournir un lien vers la ou les licences. Sur les supports où les liens hypertexte sont impossibles (par exemple sur un support papier), nous vous suggérons de rediriger vos lecteurs vers le site openstreetmap.org (éventuellement en développant « OpenStreetMap » en l’adresse openstreetmap.org), vers opendatacommons.org et, si c’est pertinent, vers creativecommons.org. - credit_3_html: |- - Pour une carte électronique navigable, le crédit devrait apparaître dans le coin de la carte. - Par exemple : - attribution_example: - alt: Exemple d’attribution d’OpenStreetMap sur une page internet - title: Exemple d’attribution - more_title_html: Pour trouver plus d’informations - more_1_html: |- - Pour obtenir plus d’informations sur la façon de réutiliser nos données et de nous créditer, veuillez lire la Licence OSMF et le FAQ Légal. - more_2_html: "Bien qu’OpenStreetMap soit un jeu de données libres et ouvertes, - nous ne pouvons pas fournir une API gratuite et en libre accès pour les tierces - personnes.\nVeuillez vous référer à notre politique - d’utilisation de l’API, \n à notre politique - d’utilisation des tuiles, \net à la politique - d’utilisation de Nominatim." - contributors_title_html: Nos contributeurs - contributors_intro_html: 'Nos contributeurs sont des milliers de personnes. - Nous incluons également des données publiées sous licence ouverte par des - agences nationales de cartographie et par d’autres sources, notamment :' - contributors_at_html: 'Autriche : contient des données sur - la ville de Vienne (sous licence CC BY), - la région - du Vorarlberg et la région du Tyrol (sous licence CC - BY AT avec amendements).' - contributors_ca_html: 'Canada : contient des données de GeoBase®, - GeoGratis (© Département des Ressources naturelles du Canada), CanVec - (© Département des Ressources naturelles du Canada) et StatCan (Division - Géographie, Statistiques du Canada).' - contributors_fi_html: 'Finlande : contient des données de la - Base de données topographique de l’Inspection nationale du territoire de Finlande - et d’autres ensembles de données, sous licence - NLSFI.' - contributors_fr_html: 'France : contient des données de la - Direction générale des finances publiques (anciennement la Direction - générale des impôts).' - contributors_nl_html: 'Pays-Bas : contient des données © AND, 2007 (www.and.com).' - contributors_nz_html: 'Nouvelle-Zélande : contient des données - provenant du Land Information New Zealand. Copyright de la Couronne - réservé.' - contributors_si_html: 'Slovénie : contient des données de l’Autorité de Planification et de Cartographie - et du Ministère de l’Agriculture, de - la Forêt et de l’Alimentation (information publique de la Slovénie).' - contributors_za_html: |- - Afrique du Sud : contient des données issues de la Direction principale des - Informations Géospatiales Nationales, copyright de l’État réservé. - contributors_gb_html: 'Royaume-Uni : contient des données issues - de l’Ordnance Survey © 2010-2012 Droits d’auteurs et de la base de - données de la Couronne.' - contributors_footer_1_html: Pour plus de détails sur celles-ci et sur les autres - sources utilisées pour aider à améliorer OpenStreetMap, consultez la page - des contributeurs - sur le wiki d’OpenStreetMap. - contributors_footer_2_html: L’inclusion de données dans OpenStreetMap n’implique - pas que les fournisseurs d’origine du contenu approuvent OpenStreetMap, ni - qu’ils garantissent ou acceptent quelque responsabilité que ce soit. - infringement_title_html: Violation des droits d’auteur - infringement_1_html: Nous rappelons aux contributeurs d’OSM qu’ils ne doivent - jamais ajouter de données provenant de sources protégées par le droit d’auteur - (copyright) ou des droits voisins (par ex. Google Maps ou des cartes - imprimées) sans autorisation explicite de la part des détenteurs de ces droits. - infringement_2_html: Si vous pensez que des données ont été ajoutées à la base - de données OpenStreetMap ou à ce site en violation des droits d’auteur, veuillez - vous référer à notre procédure - de retrait de données ou notifiez-nous directement à travers notre formulaire en ligne. - trademarks_title_html: Marques - trademarks_1_html: OpenStreetMap, le logo loupe et State of the Map sont des - marques déposées de l'OpenStreetMap Foundation. Si vous avez des questions - à propos de l’utilisation de ces marques, merci de consulter notre règlement - concernant les marques déposées. - welcome_page: - title: Bienvenue ! - introduction_html: Bienvenue à OpenStreetMap, la carte du monde libre et éditable. - Maintenant que vous êtes enregistré, vous avez tout ce qu’il faut pour commencer - à cartographier. Ce qui suit est un petit guide des choses les plus importantes - à savoir. - whats_on_the_map: - title: Ce qu’il y a sur la carte - on_html: OpenStreetMap sert à cartographier des objets qui sont à la fois réels - et actuels — il contient des millions de bâtiments, de routes et d’autres - détails sur des lieux. Vous pouvez cartographier n’importe quel élément du - monde réel qui vous intéresse. - off_html: Ce qui est par contre exclu sont les données subjectives - comme les cotes de popularité, les éléments historiques ou hypothétiques, - et les données venant de source protégées par le droit d’auteur ou des droits - voisins. À moins d’avoir une permission spéciale, ne copiez rien depuis une - carte papier ou en ligne. - basic_terms: - title: Terminologie de base pour la cartographie - paragraph_1_html: OpenStreetMap a son propre jargon. Voici quelques mots-clefs - qui vous seront utiles. - editor_html: Un éditeur est un programme ou site web qui vous - permet de modifier la carte. - node_html: Un nœud est un point sur la carte, tel qu’un seul - restaurant ou un arbre isolé. - way_html: Un cheminattribut (ou tag) est une information - à propos d’un nœud ou d’un chemin, comme le nom d’un restaurant ou la limite - de vitesse d’une route. - rules: - title: Règles ! - paragraph_1_html: OpenStreetMap a quelques règles formelles, mais nous attendons - de tous les participants une collaboration et une communication avec la communauté. - Si vous envisagez d’autres activités que la modification à la main, veuillez - lire et suivre les directives sur les - importations et les - modifications automatiques. - questions: - title: Des questions ? - paragraph_1_html: |- - OpenStreetMap propose plusieurs ressources pour apprendre à travailler dans le projet, pour poser des questions et y répondre, et pour discuter et documenter les sujets de cartographie en collaboration avec d’autres utilisateurs. - Trouvez de l’aide ici. - start_mapping: Commencer à cartographier - add_a_note: - title: Pas le temps d’effectuer les modifications ? Ajoutez une note ! - paragraph_1_html: |- - Si vous voulez juste une petite correction et n’avez pas le temps de vous - enregistrer sur le projet et d’apprendre à effectuer les modifications, il est facile d’ajouter une note. - paragraph_2_html: |- - Allez simplement sur la carte et cliquez sur l’icône note : - . Cela ajoutera un marqueur sur la carte, que vous pouvez déplacer en faisant glisser la carte. Ajoutez votre message puis cliquez sur Enregistrer, et d’autres contributeurs iront regarder. - fixthemap: - title: Signaler un problème / Corriger la carte - how_to_help: - title: Comment aider - join_the_community: - title: Rejoindre la communauté - explanation_html: Si vous avez remarqué un problème avec nos données de carte, - par exemple s’il manque une route ou votre adresse, le meilleur moyen de - faire est de rejoindre la communauté OpenStreetMap et d’ajouter ou réparer - les données vous-même. - add_a_note: - instructions_html: |- - Cliquez simplement sur ou cette même icône sur l’affichage de la carte. - Cela placera un marqueur sur la carte, que vous pourrez déplacer en le glissant. Ajoutez votre message, puis cliquez sur Enregistrer, et d’autres cartographes l’étudieront. - other_concerns: - title: Autres préoccupations - explanation_html: Si vous êtes préoccupé par la manière dont nos données sont - utilisées ou sur leur contenu, veuillez consulter notre page - des droits d’auteur pour davantage d’informations légales ou contacter - le groupe de - travail OSMF approprié. - help_page: - title: Obtenir de l’aide - introduction: OpenStreetMap propose plusieurs ressources pour apprendre à travailler - dans le projet, pour poser des questions et y répondre, et pour discuter et - documenter les sujets de cartographie en collaboration avec d’autres utilisateurs. - welcome: - url: /welcome - title: Bienvenue à OSM - description: Commencer avec ce guide rapide couvrant les bases d’OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/FR:Guide_du_d%C3%A9butant - title: Guide du débutant - description: Guide pour les débutants maintenu par la communauté. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Poser une question ou chercher des réponses sur le site de questions-et-réponses - d’OSM. - mailing_lists: - title: Listes de diffusion - description: Poser une question ou discuter de questions intéressantes sur un - large éventail de thématiques ou des listes de diffusion régionaux. - forums: - title: Forums - description: Des questions et des discussions pour ceux qui préfèrent une interface - sous forme de tableau d’affichage. - irc: - title: IRC - description: Discussion interactive dans de nombreuses langues différentes et - sur de nombreux sujets. - switch2osm: - title: switch2osm - description: Aide pour les entreprises et les organisations de commutation à - OpenStreetMap, en fonction des cartes et d’autres services. - wiki: - url: https://wiki.openstreetmap.org/wiki/FR:Page_principale - title: wiki.openstreetmap.org - description: Parcourez le wiki pour la documentation approfondie d’OSM - about_page: - next: Suivant - copyright_html: ©Contributeurs
        d’OpenStreetMap - used_by: '%{name} fournit des données cartographiques sur des milliers de sites - web, applications mobiles et appareils' - lede_text: OpenStreetMap est bâti par une communauté de cartographes bénévoles - qui contribuent et maintiennent les données des routes, sentiers, cafés, stations - ferroviaires et bien plus encore, partout dans le monde. - local_knowledge_title: Connaissance locale - local_knowledge_html: OpenStreetMap encourage et met en avant la connaissance - locale du terrain. Les contributeurs utilisent l’imagerie aérienne, les récepteurs - GPS et les cartes classiques du terrain pour vérifier qu’OSM est exact et à - jour. - community_driven_title: Conduit par la communauté - community_driven_html: "La communauté d’OpenStreetMap est diverse, passionnée - et grossit chaque jour. Nos contributeurs incluent des cartographes enthousiastes, - des professionnels du SIG, des ingénieurs qui font fonctionner les serveurs - d’OSM, des humanitaires cartographiant les zones dévastées par une catastrophe - et beaucoup d’autres.\nPour en savoir plus sur la communauté, consultez \nle blogue OpenStreetMap,\nles - annuaires d’utilisateurs, \nles - blogues communautaires et \nle site web de la Fondation - OSM." - open_data_title: Données libres - open_data_html: 'OpenStreetMap est en données ouvertes : vous êtes libre - de l’utiliser pour n’importe quel but tant que vous créditez OpenStreetMap et - ses contributeurs. Si vous modifiez ou vous appuyez sur les données d’une façon - quelconque, vous pouvez distribuer le résultat seulement suivant la même licence. - Consultez la page sur les droits d’auteur et licence - pour plus de détails.' - legal_title: Juridique - legal_html: "Ce site et de nombreux autres services connexes sont formellement - exploités par la \nFondation OpenStreetMap - (OSMF) \nau nom de la communauté. L’utilisation de tous les services offerts - par l’OSMF est sujette\nà notre \nPolitique - des usages acceptés et à notre Politique - de confidentialité.\n
        \nVeuillez contacter - l’OSMF \nsi vous avez des questions ou problèmes concernant les licences, - les droits d’auteur ou d’autres aspects juridiques.\n
        \nOpenStreetMap, le - logo avec la loupe et ''State of the Map'' sont des - marques déposées de OSMF." - partners_title: Partenaires notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} a publié un commentaire sur un article de @@ -1545,6 +1235,158 @@ fr: delete: deleted: Message supprimé site: + about: + next: Suivant + copyright_html: ©Contributeurs
        d’OpenStreetMap + used_by: '%{name} fournit des données cartographiques sur des milliers de sites + web, applications mobiles et appareils' + lede_text: OpenStreetMap est bâti par une communauté de cartographes bénévoles + qui contribuent et maintiennent les données des routes, sentiers, cafés, stations + ferroviaires et bien plus encore, partout dans le monde. + local_knowledge_title: Connaissance locale + local_knowledge_html: OpenStreetMap encourage et met en avant la connaissance + locale du terrain. Les contributeurs utilisent l’imagerie aérienne, les récepteurs + GPS et les cartes classiques du terrain pour vérifier qu’OSM est exact et + à jour. + community_driven_title: Conduit par la communauté + community_driven_html: "La communauté d’OpenStreetMap est diverse, passionnée + et grossit chaque jour. Nos contributeurs incluent des cartographes enthousiastes, + des professionnels du SIG, des ingénieurs qui font fonctionner les serveurs + d’OSM, des humanitaires cartographiant les zones dévastées par une catastrophe + et beaucoup d’autres.\nPour en savoir plus sur la communauté, consultez \nle blogue OpenStreetMap,\nles + annuaires d’utilisateurs, \nles + blogues communautaires et \nle site web de la Fondation + OSM." + open_data_title: Données libres + open_data_html: 'OpenStreetMap est en données ouvertes : vous êtes libre + de l’utiliser pour n’importe quel but tant que vous créditez OpenStreetMap + et ses contributeurs. Si vous modifiez ou vous appuyez sur les données d’une + façon quelconque, vous pouvez distribuer le résultat seulement suivant la + même licence. Consultez la page sur les droits + d’auteur et licence pour plus de détails.' + legal_title: Juridique + legal_html: "Ce site et de nombreux autres services connexes sont formellement + exploités par la \nFondation OpenStreetMap + (OSMF) \nau nom de la communauté. L’utilisation de tous les services offerts + par l’OSMF est sujette\nà notre \nPolitique + des usages acceptés et à notre Politique + de confidentialité.\n
        \nVeuillez contacter + l’OSMF \nsi vous avez des questions ou problèmes concernant les licences, + les droits d’auteur ou d’autres aspects juridiques.\n
        \nOpenStreetMap, + le logo avec la loupe et ''State of the Map'' sont des + marques déposées de OSMF." + partners_title: Partenaires + copyright: + foreign: + title: À propos de cette traduction + text: En cas de conflit entre la présente page traduite et %{english_original_link}, + la version anglaise prévaudra + english_link: l’original en anglais + native: + title: À propos de cette page + text: Vous lisez la version anglaise originale de la page au sujet des droits + d’auteur. Vous pouvez retourner à la %{native_link} de cette page ou arrêter + de lire à son sujet et %{mapping_link}. + native_link: traduction française + mapping_link: commencer à contribuer + legal_babble: + title_html: Droits d’auteur et licence + intro_1_html: |- + OpenStreetMap® est un ensemble de données ouvertes, disponibles sous licence libre Open Data Commons Open Database License (ODbL) auprès de la Fondation OpenStreetMap (OSMF). + intro_2_html: Vous êtes libre de copier, distribuer, transmettre et adapter + nos données, à condition que vous créditiez, OpenStreetMap et ses contributeurs. + Si vous modifiez ou utilisez nos données dans d’autres œuvres dérivées, + vous ne pouvez distribuer celles-ci que sous la même licence. Le texte + légal complet détaille vos droits et responsabilités. + intro_3_html: Nos carreaux de rendu cartographiques, ainsi que notre documentation, + sont disponibles sous la licence Creative + Commons paternité – partage à l’identique 2.0 (CC-BY-SA). + credit_title_html: Comment créditer OpenStreetMap + credit_1_html: Nous demandons que votre crédit comporte la mention « © les + contributeurs d’OpenStreetMap ». + credit_2_html: |- + Vous devez également préciser clairement que les données sont disponibles sous la licence ODbL et, si vous utilisez les tuiles de notre carte, que la carte est sous la licence CC-BY-SA. Vous pouvez mentionner ceci avec un lien hypertexte vers + cette page de mentions légales. + Alternativement, et obligatoirement si vous distribuez OpenStreetMap sous forme de données brutes, vous pouvez directement nommer et fournir un lien vers la ou les licences. Sur les supports où les liens hypertexte sont impossibles (par exemple sur un support papier), nous vous suggérons de rediriger vos lecteurs vers le site openstreetmap.org (éventuellement en développant « OpenStreetMap » en l’adresse openstreetmap.org), vers opendatacommons.org et, si c’est pertinent, vers creativecommons.org. + credit_3_html: |- + Pour une carte électronique navigable, le crédit devrait apparaître dans le coin de la carte. + Par exemple : + attribution_example: + alt: Exemple d’attribution d’OpenStreetMap sur une page internet + title: Exemple d’attribution + more_title_html: Pour trouver plus d’informations + more_1_html: |- + Pour obtenir plus d’informations sur la façon de réutiliser nos données et de nous créditer, veuillez lire la Licence OSMF et le FAQ Légal. + more_2_html: "Bien qu’OpenStreetMap soit un jeu de données libres et ouvertes, + nous ne pouvons pas fournir une API gratuite et en libre accès pour les + tierces personnes.\nVeuillez vous référer à notre politique + d’utilisation de l’API, \n à notre politique + d’utilisation des tuiles, \net à la politique + d’utilisation de Nominatim." + contributors_title_html: Nos contributeurs + contributors_intro_html: 'Nos contributeurs sont des milliers de personnes. + Nous incluons également des données publiées sous licence ouverte par des + agences nationales de cartographie et par d’autres sources, notamment :' + contributors_at_html: 'Autriche : contient des données sur + la ville de Vienne (sous licence + CC BY), + la région + du Vorarlberg et la région du Tyrol (sous licence CC + BY AT avec amendements).' + contributors_ca_html: 'Canada : contient des données de GeoBase®, + GeoGratis (© Département des Ressources naturelles du Canada), + CanVec (© Département des Ressources naturelles du Canada) et StatCan + (Division Géographie, Statistiques du Canada).' + contributors_fi_html: 'Finlande : contient des données de + la Base de données topographique de l’Inspection nationale du territoire + de Finlande et d’autres ensembles de données, sous licence + NLSFI.' + contributors_fr_html: 'France : contient des données de la + Direction générale des finances publiques (anciennement la Direction + générale des impôts).' + contributors_nl_html: 'Pays-Bas : contient des données © + AND, 2007 (www.and.com).' + contributors_nz_html: 'Nouvelle-Zélande : contient des données + provenant du Land Information New Zealand. Copyright de la Couronne + réservé.' + contributors_si_html: 'Slovénie : contient des données de + l’Autorité de Planification et de Cartographie + et du Ministère de l’Agriculture, de + la Forêt et de l’Alimentation (information publique de la Slovénie).' + contributors_za_html: |- + Afrique du Sud : contient des données issues de la Direction principale des + Informations Géospatiales Nationales, copyright de l’État réservé. + contributors_gb_html: 'Royaume-Uni : contient des données + issues de l’Ordnance Survey © 2010-2012 Droits d’auteurs et de + la base de données de la Couronne.' + contributors_footer_1_html: Pour plus de détails sur celles-ci et sur les + autres sources utilisées pour aider à améliorer OpenStreetMap, consultez + la page des contributeurs + sur le wiki d’OpenStreetMap. + contributors_footer_2_html: L’inclusion de données dans OpenStreetMap n’implique + pas que les fournisseurs d’origine du contenu approuvent OpenStreetMap, + ni qu’ils garantissent ou acceptent quelque responsabilité que ce soit. + infringement_title_html: Violation des droits d’auteur + infringement_1_html: Nous rappelons aux contributeurs d’OSM qu’ils ne doivent + jamais ajouter de données provenant de sources protégées par le droit d’auteur + (copyright) ou des droits voisins (par ex. Google Maps ou des cartes + imprimées) sans autorisation explicite de la part des détenteurs de ces + droits. + infringement_2_html: Si vous pensez que des données ont été ajoutées à la + base de données OpenStreetMap ou à ce site en violation des droits d’auteur, + veuillez vous référer à notre procédure + de retrait de données ou notifiez-nous directement à travers notre formulaire en ligne. + trademarks_title_html: Marques + trademarks_1_html: OpenStreetMap, le logo loupe et State of the Map sont des + marques déposées de l'OpenStreetMap Foundation. Si vous avez des questions + à propos de l’utilisation de ces marques, merci de consulter notre règlement + concernant les marques déposées. index: js_1: JavaScript n’est pas pris en charge par le navigateur que vous utilisez, ou bien vous l’avez désactivé. @@ -1580,6 +1422,116 @@ fr: id_not_configured: iD n’a pas été configuré no_iframe_support: Votre navigateur ne prend pas en charge les ''iframes HTML'', qui sont nécessaires pour cette fonctionnalité. + export: + title: Exporter + area_to_export: Zone à exporter + manually_select: Sélectionner manuellement une autre zone + format_to_export: Format d’export + osm_xml_data: Données XML OpenStreetMap + map_image: Image de la carte (affiche le calque standard) + embeddable_html: HTML incorporable. + licence: Licence + export_details: Les données d’OpenStreetMap sont publiées sous la licence + Open Data Commons Open Database (ODbL). + too_large: + advice: 'Si l’export ci-dessus échoue, veuillez envisager l’utilisation d’une + des sources listées ci-dessous :' + body: Cette zone est trop vaste pour être exportée au format OpenStreetMap + XML. Veuillez zoomer ou sélectionner une zone plus petite, ou utiliser une + des sources suivantes pour le téléchargement de données massives. + planet: + title: Planète OSM + description: Copies régulièrement mises à jour de la base de données complète + de OpenStreetMap + overpass: + title: API Overpass + description: Télécharger ce cadre englobant depuis un miroir de la base + de données OpenStreetMap + geofabrik: + title: Téléchargements de Geofabrik + description: Extractions régulièrement mises à jour des continents, des + pays et des villes sélectionnées + metro: + title: Extractions de Metro + description: Extractions des principales villes du monde et de leurs environs + other: + title: Autres sources + description: Sources supplémentaires listées dans le wiki de OpenStreetMap + options: Options + format: Format + scale: Échelle + max: max + image_size: Taille de l’image + zoom: Zoom + add_marker: Ajouter un marqueur sur la carte + latitude: 'Lat :' + longitude: 'Lon :' + output: Sortie + paste_html: Copier le code HTML à intégrer dans un site web + export_button: Exporter + fixthemap: + title: Signaler un problème / Corriger la carte + how_to_help: + title: Comment aider + join_the_community: + title: Rejoindre la communauté + explanation_html: Si vous avez remarqué un problème avec nos données de + carte, par exemple s’il manque une route ou votre adresse, le meilleur + moyen de faire est de rejoindre la communauté OpenStreetMap et d’ajouter + ou réparer les données vous-même. + add_a_note: + instructions_html: |- + Cliquez simplement sur ou cette même icône sur l’affichage de la carte. + Cela placera un marqueur sur la carte, que vous pourrez déplacer en le glissant. Ajoutez votre message, puis cliquez sur Enregistrer, et d’autres cartographes l’étudieront. + other_concerns: + title: Autres préoccupations + explanation_html: Si vous êtes préoccupé par la manière dont nos données sont + utilisées ou sur leur contenu, veuillez consulter notre page + des droits d’auteur pour davantage d’informations légales ou contacter + le groupe de + travail OSMF approprié. + help: + title: Obtenir de l’aide + introduction: OpenStreetMap propose plusieurs ressources pour apprendre à travailler + dans le projet, pour poser des questions et y répondre, et pour discuter et + documenter les sujets de cartographie en collaboration avec d’autres utilisateurs. + welcome: + url: /welcome + title: Bienvenue à OSM + description: Commencer avec ce guide rapide couvrant les bases d’OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/FR:Guide_du_d%C3%A9butant + title: Guide du débutant + description: Guide pour les débutants maintenu par la communauté. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Poser une question ou chercher des réponses sur le site de questions-et-réponses + d’OSM. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Listes de diffusion + description: Poser une question ou discuter de questions intéressantes sur + un large éventail de thématiques ou des listes de diffusion régionaux. + forums: + url: http://forum.openstreetmap.org/ + title: Forums + description: Des questions et des discussions pour ceux qui préfèrent une + interface sous forme de tableau d’affichage. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Discussion interactive dans de nombreuses langues différentes + et sur de nombreux sujets. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Aide pour les entreprises et les organisations de commutation + à OpenStreetMap, en fonction des cartes et d’autres services. + wiki: + url: https://wiki.openstreetmap.org/wiki/FR:Page_principale + title: wiki.openstreetmap.org + description: Parcourez le wiki pour la documentation approfondie d’OSM sidebar: search_results: Résultats de la recherche close: Fermer @@ -1680,6 +1632,58 @@ fr: image: Image alt: Texte alternatif url: URL + welcome: + title: Bienvenue ! + introduction_html: Bienvenue à OpenStreetMap, la carte du monde libre et éditable. + Maintenant que vous êtes enregistré, vous avez tout ce qu’il faut pour commencer + à cartographier. Ce qui suit est un petit guide des choses les plus importantes + à savoir. + whats_on_the_map: + title: Ce qu’il y a sur la carte + on_html: OpenStreetMap sert à cartographier des objets qui sont à la fois + réels et actuels — il contient des millions de bâtiments, de routes + et d’autres détails sur des lieux. Vous pouvez cartographier n’importe quel + élément du monde réel qui vous intéresse. + off_html: Ce qui est par contre exclu sont les données subjectives + comme les cotes de popularité, les éléments historiques ou hypothétiques, + et les données venant de source protégées par le droit d’auteur ou des droits + voisins. À moins d’avoir une permission spéciale, ne copiez rien depuis + une carte papier ou en ligne. + basic_terms: + title: Terminologie de base pour la cartographie + paragraph_1_html: OpenStreetMap a son propre jargon. Voici quelques mots-clefs + qui vous seront utiles. + editor_html: Un éditeur est un programme ou site web qui + vous permet de modifier la carte. + node_html: Un nœud est un point sur la carte, tel qu’un seul + restaurant ou un arbre isolé. + way_html: Un cheminattribut (ou tag) est une information + à propos d’un nœud ou d’un chemin, comme le nom d’un restaurant ou la limite + de vitesse d’une route. + rules: + title: Règles ! + paragraph_1_html: OpenStreetMap a quelques règles formelles, mais nous attendons + de tous les participants une collaboration et une communication avec la + communauté. Si vous envisagez d’autres activités que la modification à la + main, veuillez lire et suivre les directives sur les + importations et les + modifications automatiques. + questions: + title: Des questions ? + paragraph_1_html: |- + OpenStreetMap propose plusieurs ressources pour apprendre à travailler dans le projet, pour poser des questions et y répondre, et pour discuter et documenter les sujets de cartographie en collaboration avec d’autres utilisateurs. + Trouvez de l’aide ici. + start_mapping: Commencer à cartographier + add_a_note: + title: Pas le temps d’effectuer les modifications ? Ajoutez une note ! + paragraph_1_html: |- + Si vous voulez juste une petite correction et n’avez pas le temps de vous + enregistrer sur le projet et d’apprendre à effectuer les modifications, il est facile d’ajouter une note. + paragraph_2_html: |- + Allez simplement sur la carte et cliquez sur l’icône note : + . Cela ajoutera un marqueur sur la carte, que vous pouvez déplacer en faisant glisser la carte. Ajoutez votre message puis cliquez sur Enregistrer, et d’autres contributeurs iront regarder. trace: visibility: private: Privé (partagé anonymement, points non ordonnés) @@ -1751,6 +1755,7 @@ fr: delete_track: Supprimer cette piste trace_not_found: Trace non trouvée ! visibility: 'Visibilité :' + confirm_delete: Supprimer cette trace ? trace_paging_nav: showing_page: Page %{page} older: Anciennes traces @@ -1813,7 +1818,7 @@ fr: vous connecter à l’interface web pour afficher les conditions de contributions. Vous n’avez pas besoin de les accepter, mais vous devez les visualiser. oauth: - oauthorize: + authorize: title: Autoriser l’accès à votre compte request_access: L’application %{app_name} demande l’accès à votre compte, %{user}. Veuillez vérifiez si vous désirez que l’application dispose des droits suivants. @@ -1828,11 +1833,11 @@ fr: allow_write_gpx: envoyer des traces GPS. allow_write_notes: modifier les notes. grant_access: Accorder l’accès - oauthorize_success: + authorize_success: title: La demande d’autorisation a été acceptée allowed: Vous avez accordé à l’application %{app_name} l’accès à votre compte. verification: Le code de vérification est %{code}. - oauthorize_failure: + authorize_failure: title: La demande d’autorisation a échoué denied: Vous avez refusé à l’application %{app_name} l’accès à votre compte. invalid: Le jeton d’autorisation n’est pas valide. @@ -2294,7 +2299,7 @@ fr: confirm: Confirmer fail: Impossible de révoquer le rôle « %{role} » de l’utilisateur « %{name} ». Vérifiez que l’utilisateur et le rôle sont valides. - user_block: + user_blocks: model: non_moderator_update: Vous devez être modérateur pour créer ou modifier un blocage. non_moderator_revoke: Vous devez être modérateur pour révoquer un blocage. @@ -2358,20 +2363,6 @@ fr: period: one: '%{count} heure' other: '%{count} heures' - partial: - show: Afficher - edit: Modifier - revoke: Révoquer ! - confirm: Êtes-vous sûr ? - display_name: Utilisateur bloqué - creator_name: Créateur - reason: Motif du blocage - status: État - revoker_name: Révoqué par - not_revoked: (non révoqué) - showing_page: Page %{page} - next: Suivant » - previous: « Précédent helper: time_future: Prends fin dans %{time}. until_login: Actif jusqu’à ce que l’utilisateur se connecte. @@ -2402,8 +2393,22 @@ fr: back: Afficher tous les blocages revoker: 'Révocateur :' needs_view: L’utilisateur doit se connecter avant que ce blocage soit supprimé. - note: - description: + block: + not_revoked: (non révoqué) + show: Afficher + edit: Modifier + revoke: Révoquer ! + blocks: + display_name: Utilisateur bloqué + creator_name: Créateur + reason: Motif du blocage + status: État + revoker_name: Révoqué par + showing_page: Page %{page} + next: Suivant » + previous: « Précédent + notes: + comment: opened_at_html: Créé il y a %{when} opened_at_by_html: Créé il y a %{when} par « %{user} » commented_at_html: Mis à jour il y a %{when} @@ -2533,7 +2538,7 @@ fr: distance: Distance errors: no_route: Impossible de trouver une route entre ces deux lieux. - no_place: Désolé, impossible de trouver ce lieu. + no_place: Désolé, impossible de trouver '%{place}'. instructions: continue_without_exit: Continuez sur %{name} slight_right_without_exit: Tournez légèrement à droite sur %{name} @@ -2554,6 +2559,7 @@ fr: onramp_right_with_name_directions: Tourner à droite sur la bretelle sur %{name}, vers %{directions} onramp_right_without_directions: Tourner à droite sur la bretelle + onramp_right: Tourner à droite sur la bretelle endofroad_right_without_exit: À la fin de la route, tourner à droite sur %{name} merge_right_without_exit: Rejoindre à droite sur %{name} fork_right_without_exit: À la bifurcation, tourner à droite sur %{name} @@ -2579,6 +2585,7 @@ fr: onramp_left_with_name_directions: Tourner à gauche sur la bretelle sur %{name}, vers %{directions} onramp_left_without_directions: Tourner à gauche sur la bretelle + onramp_left: Tourner à gauche sur la bretelle endofroad_left_without_exit: À la fin de la route, tourner à gauche sur %{name} merge_left_without_exit: Rejoindre à gauche sur %{name} fork_left_without_exit: À la bifurcation, tourner à gauche sur %{name} @@ -2615,7 +2622,7 @@ fr: show_address: Afficher l’adresse query_features: Interroger les objets centre_map: Centrer la carte ici - redaction: + redactions: edit: description: Description heading: Modifier le masquage diff --git a/config/locales/fur.yml b/config/locales/fur.yml index 63e978728..70710b569 100644 --- a/config/locales/fur.yml +++ b/config/locales/fur.yml @@ -319,37 +319,6 @@ fur: ago: '%{ago} indaûr' newer_comments: Coments plui gnûfs older_comments: Coments plui vieris - export: - title: Espuarte - start: - area_to_export: Aree di espuartâ - manually_select: Sielç a man une aree divierse - format_to_export: Formât di espuartâ - osm_xml_data: Dâts XML di OpenStreetMap - licence: Licence - export_details: I dâts di OpenStreetMap a son dâts fûr sot de licence Open - Data Commons Open Database License (ODbL). - too_large: - body: Cheste aree e je masse grande par espuartâle come dâts XML di OpenStreetMap. - Par plasê incrès il zoom, sielç une aree plui piçule o dopre une des sorzints - ca sot par discjamâ un grum di dâts. - overpass: - title: API Overpass - other: - title: Altris sorzints - description: Altris sorzints elencadis su la wiki di OpenStreetMap - options: Opzions - format: 'Formât:' - scale: Scjale - max: max - image_size: 'Dimensions figure:' - zoom: Ingrandiment - add_marker: Zonte un segnalut ae mape - latitude: 'Lat:' - longitude: 'Lon:' - output: Jessude - paste_html: Tache l'HTML par inserîlu tal to sît web - export_button: Espuarte geocoder: search: title: @@ -685,48 +654,6 @@ fur: text: Done alc learn_more: Par savênt di plui more: Plui - license_page: - foreign: - title: Informazions su cheste traduzion - native: - title: Informazions su cheste pagjine - mapping_link: scomence a mapâ - legal_babble: - title_html: Copyright e licence - attribution_example: - title: Esempli di atribuzion - more_title_html: Par savênt di plui - contributors_title_html: Nestris colaboradôrs - welcome_page: - title: Benvignût! - whats_on_the_map: - title: Ce ch'al è su la mape - questions: - title: Domandis? - start_mapping: Scomence a mapâ - add_a_note: - title: No tu âs timp par fâ i cambiaments? Zonte une note! - fixthemap: - title: Segnale un probleme / Comede la mape - how_to_help: - title: Cemût contribuî - join_the_community: - title: Jentre te comunitât - other_concerns: - title: Altris aspiets - help_page: - title: Cemût vê un jutori - welcome: - url: /welcome - title: Benvignûts in OSM - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: Prossim - copyright_html: ©Colaboradôrs
        di OpenStreetMap - local_knowledge_title: Cognossince locâl - open_data_title: Dâts vierts notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} al à zontât un coment ae tô vôs dal diari' @@ -829,6 +756,23 @@ fur: delete: deleted: Messaç eliminât site: + about: + next: Prossim + copyright_html: ©Colaboradôrs
        di OpenStreetMap + local_knowledge_title: Cognossince locâl + open_data_title: Dâts vierts + copyright: + foreign: + title: Informazions su cheste traduzion + native: + title: Informazions su cheste pagjine + mapping_link: scomence a mapâ + legal_babble: + title_html: Copyright e licence + attribution_example: + title: Esempli di atribuzion + more_title_html: Par savênt di plui + contributors_title_html: Nestris colaboradôrs index: js_1: Tu stâs doprant un sgarfadôr che nol supuarte JavaScript o ben JavaScript al è stât disativât. @@ -858,6 +802,52 @@ fur: 2, tu scugnis fracâ sul boton pal salvataç) no_iframe_support: Il to sgarfadôr nol supuarte i iframes HTML, che a coventin par cheste funzion. + export: + title: Espuarte + area_to_export: Aree di espuartâ + manually_select: Sielç a man une aree divierse + format_to_export: Formât di espuartâ + osm_xml_data: Dâts XML di OpenStreetMap + licence: Licence + export_details: I dâts di OpenStreetMap a son dâts fûr sot de licence Open + Data Commons Open Database License (ODbL). + too_large: + body: Cheste aree e je masse grande par espuartâle come dâts XML di OpenStreetMap. + Par plasê incrès il zoom, sielç une aree plui piçule o dopre une des sorzints + ca sot par discjamâ un grum di dâts. + overpass: + title: API Overpass + other: + title: Altris sorzints + description: Altris sorzints elencadis su la wiki di OpenStreetMap + options: Opzions + format: 'Formât:' + scale: Scjale + max: max + image_size: 'Dimensions figure:' + zoom: Ingrandiment + add_marker: Zonte un segnalut ae mape + latitude: 'Lat:' + longitude: 'Lon:' + output: Jessude + paste_html: Tache l'HTML par inserîlu tal to sît web + export_button: Espuarte + fixthemap: + title: Segnale un probleme / Comede la mape + how_to_help: + title: Cemût contribuî + join_the_community: + title: Jentre te comunitât + other_concerns: + title: Altris aspiets + help: + title: Cemût vê un jutori + welcome: + url: /welcome + title: Benvignûts in OSM + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: search_results: Risultâts de ricercje close: Siere @@ -923,6 +913,15 @@ fur: image: Figure alt: Test alternatîf url: URL + welcome: + title: Benvignût! + whats_on_the_map: + title: Ce ch'al è su la mape + questions: + title: Domandis? + start_mapping: Scomence a mapâ + add_a_note: + title: No tu âs timp par fâ i cambiaments? Zonte une note! trace: create: upload_trace: Cjame percors GPS @@ -1008,7 +1007,7 @@ fur: description: description_without_count: File GPS di %{user} oauth: - oauthorize: + authorize: request_access: La aplicazion %{app_name} e je daûr a domandâ di vê acès al to profîl, %{user}. Controle se tu sês dacuardi che la aplicazion e podedi fâ chestis robis. Tu puedis sielzi ogni opzion in mût indipendent. @@ -1020,7 +1019,7 @@ fur: allow_read_gpx: lei i tiei percors GPS privâts. allow_write_gpx: cjamâ percors GPS. allow_write_notes: cambiâ lis notis. - oauthorize_success: + authorize_success: verification: Il codiç di verifiche al è %{code}. oauth_clients: new: @@ -1303,7 +1302,7 @@ fur: confirm: Conferme revoke: confirm: Conferme - user_block: + user_blocks: not_found: back: Torne al somari new: @@ -1327,20 +1326,6 @@ fur: period: one: 1 ore other: '%{count} oris' - partial: - show: Mostre - edit: Cambie - revoke: Revoche! - confirm: Sêstu sigûr? - display_name: Utent blocât - creator_name: Creadôr - reason: Reson dal bloc - status: Stât - revoker_name: Revocât di - not_revoked: (no revocât) - showing_page: Pagjine %{page} - next: Sucessîf » - previous: « Precedent helper: time_future: Finìs ca di %{time}. time_past: Finît %{time} indaûr. @@ -1365,8 +1350,22 @@ fur: reason: 'Reson dal bloc:' back: Cjale ducj i blocs revoker: 'Chel che al à revocât:' - note: - description: + block: + not_revoked: (no revocât) + show: Mostre + edit: Cambie + revoke: Revoche! + blocks: + display_name: Utent blocât + creator_name: Creadôr + reason: Reson dal bloc + status: Stât + revoker_name: Revocât di + showing_page: Pagjine %{page} + next: Sucessîf » + previous: « Precedent + notes: + comment: opened_at_html: Creât %{when} indaûr opened_at_by_html: Creât %{when} indaûr di %{user} commented_at_html: Inzornade %{when} indaûr @@ -1481,7 +1480,7 @@ fur: nothing_found: Nissune carataristiche cjatade error: 'Erôr contatant %{server}: %{error}' timeout: Timp scjadût contatant %{server} - redaction: + redactions: edit: description: Descrizion new: diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 21a5a5fc2..0d4333e30 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -126,16 +126,6 @@ fy: edit: Bewurkje comments: ago: '%{ago} lyn' - export: - start: - licence: Lisinsje - options: Opsjes - format: 'Formaat:' - scale: Skaal - max: maks - latitude: 'Breedte:' - longitude: 'Lingte:' - output: Útfier geocoder: search_osm_nominatim: prefix: @@ -432,26 +422,6 @@ fy: foundation: Stifting foundation_title: De OpenStreetMap Foundation more: Mear - license_page: - native: - native_link: Frysktalige ferzje - welcome_page: - title: Wolkom! - help_page: - welcome: - url: /welcome - title: Wolkom by OSM - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - irc: - title: IRC - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: Folgjende - partners_title: Partners notifier: diary_comment_notification: hi: Hallo %{to_user}, @@ -492,6 +462,33 @@ fy: sent_message_summary: delete_button: Fuortsmite site: + about: + next: Folgjende + partners_title: Partners + copyright: + native: + native_link: Frysktalige ferzje + export: + licence: Lisinsje + options: Opsjes + format: 'Formaat:' + scale: Skaal + max: maks + latitude: 'Breedte:' + longitude: 'Lingte:' + output: Útfier + help: + welcome: + url: /welcome + title: Wolkom by OSM + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + irc: + title: IRC + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: close: Slute search: @@ -523,6 +520,8 @@ fy: text: Tekst image: Ôfbylding url: URL + welcome: + title: Wolkom! trace: edit: filename: 'Triemnamme:' @@ -599,17 +598,18 @@ fy: list: title: Meidoggers heading: Meidoggers - user_block: - partial: + user_blocks: + show: + status: Status + edit: Bewurkje + block: edit: Bewurkje + blocks: status: Status showing_page: Side %{page} next: Folgjende » previous: « Foarige - show: - status: Status - edit: Bewurkje - note: + notes: mine: id: Id creator: Auteur @@ -630,7 +630,7 @@ fy: time: Tiid query: relation: Relaasje - redaction: + redactions: edit: description: Beskriuwing new: diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 0790e0bb8..ac16e4068 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -231,7 +231,7 @@ ga: list: title: Tacair athruithe title_user: Tacair athruithe de chuid %{user} - title_friend: Tacair athruithe de chuid do chairde + title_friend: Tacair athruithe de chuid mo chairde title_nearby: Tacair athruithe a rinne úsáideoirí in aice láimhe empty: Níor aimsíodh aon tacar athruithe. empty_area: Níl aon tacar athruithe sa limistéar seo. @@ -261,7 +261,7 @@ ga: user_title: Dialann %{user} in_language_title: 'Iontrálacha Dialainne i: %{language}' new: Iontráil Nua Dialainne - new_title: Scríobh iontráil nua i do dhialann úsáideora + new_title: Scríobh iontráil nua i mo dhialann úsáideora no_entries: Níl aon iontráil dialainne ann recent_entries: Iontrálacha dialainne le déanaí older_entries: Iontrálacha Níos Sine @@ -329,55 +329,6 @@ ga: ago: '%{ago} ó shin' newer_comments: Nótaí Tráchta Níos Úire older_comments: Nótaí Tráchta Níos Sine - export: - title: Easportáil - start: - area_to_export: Limistéar la hEaspórtáil - manually_select: Roghnaigh limistéar eile de láimh - format_to_export: Formáid le hEaspórtáil - osm_xml_data: Sonraí XML OpenStreetMap - map_image: Íomhá den Léarscáil (taispeántar an tsraith chaighdeánach) - embeddable_html: HTML inleabaithe - licence: Ceadúnas - export_details: Tá sonraí OpenStreetMap ceadúnaithe faoi Cheadúnas - Bunachar Sonraí Oscailte (ODbL) de chuid Open Data Commons. - too_large: - advice: 'Má theipeann ar an easpórtáil thuas, smaoinigh ar cheann de na foinsí - sa liosta thíos a úsáid:' - body: Tá an limistéar seo rómhór le heaspórtáil mar Sonraí XML OpenStreetMap. - Zúmáil isteach nó roghnaigh limistéar níos lú, nó bain triail as ceann de - na foinsí atá sa liosta thíos chun bulc-íoslódálacha sonraí a dhéanamh. - planet: - title: Planet OSM - description: Cóipeanna a dhéantar a nuashonrú go rialta de bhunachar sonraí - iomlán OpenStreetMap - overpass: - title: Comhéadan feidhmchláir Overpass - description: Íoslódáil an bosca teorainn seo ó scáthán den bhunachar sonraí - OpenStreetMap - geofabrik: - title: Íoslódálacha Geofabrik - description: Asbhaintí a thugtar cothrom le dáta go rialta de mhór-ranna, - tíortha agus cathracha roghnaithe - metro: - title: Ábhair asbhainte Metro - description: Asbhaintí le haghaidh mórchathracha domhanda agus an ceantar - máguaird - other: - title: Foinsí Eile - description: Tá liosta de na foinsí breise ar vicí OpenStreetMap - options: Roghanna - format: Formáid - scale: Scála - max: uasta - image_size: Méid na hÍomhá - zoom: Zúmáil - add_marker: Cuir marcóir leis an léarscáil - latitude: 'D-lthd:' - longitude: 'D-fhad:' - output: Aschur - paste_html: Greamaigh HTML le leabú i suíomh gréasáil - export_button: Easportáil geocoder: search: title: @@ -880,6 +831,8 @@ ga: optician: Radharceolaí organic: Siopa Bia Orgánaigh outdoor: Siopa Earraí don Taobh Amuigh + paint: Siopa Péinte + pawnbroker: Geallbhróicéir pet: Siopa Peataí pharmacy: Cógaslann photo: Siopa Grianghrafadóireachta @@ -894,6 +847,7 @@ ga: tobacco: Siopa tobac toys: Siopa Bréagán travel_agency: Gníomhaireacht Taistil + tyres: Siopa bonn vacant: Siopa folamh video: Siopa Scannán ar Cíos wine: Siopa fíona @@ -1011,190 +965,6 @@ ga: text: Tabhair Síntiús Airgid learn_more: Tuilleadh Eolais more: Tuilleadh - license_page: - foreign: - title: Maidir leis an aistriúchán seo - text: Sa chás nach mbeidh an leathanach aistrithe seo agus an %{english_original_link} - ag teacht le chéile, tabharfar tús áite don leathanach Béarla - english_link: Leagan bunaidh Béarla - native: - title: Maidir leis an leathanach seo - text: Tá tú ag breathnú ar an leagan Béarla den leathanach cóipchirt. Is féidir - leat dul ar ais chuig an %{native_link} den leathanach seo nó is féidir leat - éirí as a bheith ag léamh faoi chúrsaí cóipchirt agus %{mapping_link}. - native_link: Leagan THIS_LANGUAGE_NAME_HERE - mapping_link: dul i mbun léarscáilithe - legal_babble: - title_html: Cóipcheart agus Ceadúnas - intro_1_html: |- - Sonraí oscailte atá i gceist le OpenStreetMap®, atá ceadúnaithe faoi Cheadúnas Bunachar Sonraí Oscailte (ODbL) de chuid Open Data Commons ag Fondúireacht OpenStreetMap (OSMF). - intro_2_html: Tá saoirse agat ár gcuid sonraí a chóipeáil, a dháileadh, a tharchur - agus a oiriúnú, a fhad agus a thugann tú creidiúint do OpenStreetMap agus - dá rannchuiditheoirí. Má athraíonn tú ár gcuid sonraí nó má thógann tú orthu, - ní fhéadfaidh tú an toradh sin a dháileadh ach faoin gceadúnas céanna. Tá - míniú ar do chearta agus ar do fhreagrachtaí sa chód - dlíthiúil iomlán. - intro_3_html: Tá an chartagrafaíocht sna tíleanna léarscáile atá againn, agus - an doiciméadú, ceadúnaithe faoin gceadúnas Sannta-Comhroinnte - Comhionann 2.0 de chuid Creative Commons (CC BY-SA). - credit_title_html: Conas OpenStreetMap a lua - credit_1_html: Ceanglaímid ort an lua “©Rannchuiditheoirí OpenStreetMap” - a úsáid. - credit_2_html: Ní mór duit a chinntiú freisin go bhfuil soiléir go bhfuil na - sonraí ar fáil faoin gCeadúnas Bunachar sonraí Oscailte agus, má úsáideann - tú na tíleanna léarscáile atá againn, go bhfuil an chartagrafaíocht ceadúnaithe - mar CC BY-SA. Is féidir leat é sin a dhéanamh ach nasc a dhéanamh chuig an - bhfógra cóipchirt seo. - Mar mhalairt air sin, agus is gá duit é seo a dhéanamh má rud é gur i bhfoirm - sonraí atá OSM á dháileadh agat, is féidir leat an ceadúnaí/na ceadúnaithe - a ainmniú agus nasc a dhéanamh chuige/chucu go díreach. I meáin nach féidir - naisc a dhéanamh (m.sh. saothair chlóite), molaimid duit do léitheoirí a threorú - chuig openstreetmap.org (d'fhéadfá é sin a dhéanamh ach an seoladh iomlán - seo a thabhairt in áit 'OpenStreetMap'), chuig opendatacommons.org, agus, - más ábhartha, chuig creativecommons.org. - credit_3_html: |- - I gcás léarscáil leictreonach is féidir a bhrabhsáil, ba cheart an lua a bheith le feiceáil i gcúinne na léarscáile. - Mar shampla: - attribution_example: - alt: Sampla den bhealach chun OpenStreetMap a lua ar shuíomh gréasáin - title: Lua samplach - more_title_html: Tuilleadh eolais - more_1_html: Is féidir leat tuilleadh eolais a fháil faoinár sonraí a úsáid, - agus faoin gcaoi chun muid a lua, ag leathanach - ceadúnais Fhondúireacht OSM. - more_2_html: |- - Cé gur sonraí oscailte iad sonraí OpenStreetMap, ní féidir linn API saor in aisce den léarscáil a sholáthar do thríú páirtithe. - Féach ár bPolasaí Úsáide don API,an Polasaí maidir le Tíleanna a úsáid agus an Polasaí maidir le Nominatim a úsáid. - contributors_title_html: Ár rannchuiditheoirí - contributors_at_html: |- - An Ostair: Tá sonraí ann ó - Stadt Wien (faoi - CC BY), - Land Vorarlberg agus ó - Land Tirol (faoi CC BY AT le leasuithe). - contributors_ca_html: "Ceanada: Tá sonraí ann ó \nGeoBase®, - GeoGratis (© Department of Natural\nResources Canada), CanVec (© - Department of Natural\nResources Canada), and StatCan (Geography Division,\nStatistics - Canada)." - contributors_fi_html: 'An Fhionlainn: Tá sonraí ann ó Bhunachar - Sonraí Topagrafaíochta an Maanmittauslaitos (Suirbhéireacht Náisiúnta Talún - na Fionlainne) agus ó thacair sonraí eile, faoin gCeadúnas - NLSFI.' - contributors_fr_html: 'An Fhrainc: Tá sonraí ann a fuarthas - ón Direction Générale des Impôts.' - contributors_nl_html: |- - An Ísiltír: Tá © Sonraí AND, 2007 ann - (www.and.com) - contributors_footer_1_html: |- - Chun tuilleadh sonraí a fháil fúthu seo, agus faoi na sonraí eile a úsáideadh ar mhaithe le OpenStreetMap a fheabhsú, féach leathanach na Rannchuiditheoirí ar Vicí OpenStreetMap. - infringement_title_html: Sárú cóipchirt - infringement_1_html: Meabhraítear do rannchuiditheoirí OSM gan sonraí ó aon - fhoinse atá faoi chóipcheart (m.sh. Google Maps nó léarscáileanna clóite) - a chur leis riamh gan cead a fháil go sainráite ó na sealbhóirí cóipchirt. - trademarks_title_html: Trádmharcanna - welcome_page: - title: Fáilte! - introduction_html: Fáilte go OpenStreepMap, léarscáil den Domhan atá saor in aisce - agus ar féidir eagarthóireacht a dhéanamh uirthi. Anois agus tú cláraithe, tá - tú réidh chun léarscáiliú a dhéanamh. Seo treoir tosaigh leis an mbuneolas a - bheidh ag teastáil uait. - whats_on_the_map: - title: Cad atá ar an léarscáil - on_html: Is áit é OpenStreetMap chun léarscáiliú a dhéanamh ar rudaí atá - ann dáiríre agus faoi láthair - tá na milliúin foirgneamh, bóithre agus - sonraí eile faoi áiteacha ar fáil air. Is féidir leat cibé na gnéithe den - fhíorshaol atá suimiúil duit féin a léarscáiliú. - off_html: I measc na rudaí nach bhfuil ann tá sonraí bunaithe ar thuairimí - cosúil le rátálacha, gnéithe stairiúla nó teoiriciúla, agus sonraí ó fhoinsí - faoi chóipcheart. Mura bhfuil cead speisialta agat, ná cóipeáil as léarscáileanna - ar líne nó páipéir. - basic_terms: - title: Téarmaí Bunúsacha a bhaineann le Léarscáiliú - paragraph_1_html: Tá roinnt béarlagair dá chuid féin ag baint le OpenStreetMap. - Seo roinnt den na focail is tábhachtaí a bheidh úsáideach duit. - editor_html: Is éard is eagarthóir ann ná ríomhchlár nó suíomh - gréasáin a úsáideann tú chun an léarscáil a chur in eagar. - node_html: Is éard is nód ann ná pointe ar an léarscáil, cosúil - le bialann amháin nó crann. - way_html: Is éard is bealach ann ná líne nó limistéar, cosúil - le bóthair, sruthán, loch nó foirgneamh. - tag_html: Is éard is clib ann ná píosa sonraí faoi nód nó bealach, - cosúil le hainm bialainne nó teorainn luais bóthair. - rules: - title: Rialacha! - paragraph_1_html: |- - Is beag riail fhoirmiúil atá ag OpenStreetMap ach bímid ag súil leis go mbeidh rannpháirtithe ag comhoibriú leis an bpobal agus go rachaidh siad i mbun cumarsáide leis. Má tá tú ag smaoineamh ar aon ghníomhaíocht eile a dhéanamh seachas eagarthóireacht a dhéanamh de láimh, léigh agus lean na treoirlínte maidir le hIompórtálacha agus - Eagarthóireacht Uathoibrithe. - questions: - title: Aon cheist agat? - start_mapping: Téigh i mbun Léarscáilithe - add_a_note: - title: Easpa Ama chun Eagarthóireacht a Dhéanamh? Fág Nóta! - paragraph_1_html: Mura bhfuil tú ag iarraidh ach go ndéanfaí rud beag a cheartú - agus gan an t-am agat clárú agus foghlaim conas eagarthóireacht a dhéanamh, - tá sé an-éasca nóta a scríobh. - fixthemap: - title: Fadhb a thuairisciú / An léarscáil a dheisiú - how_to_help: - title: Conas Cabhrú - join_the_community: - title: Glac páirt sa phobal - other_concerns: - title: Ábhar imní eile - help_page: - title: Cabhair a Fháil - welcome: - url: /welcome - title: Fáilte go OSM - description: Tosaigh leis an treoir thapa seo a chlúdaíonn gnéithe bunúsacha - OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/GA:Beginners%27_guide - title: Treoir do Thosaitheoirí - description: Treoir do thosaitheoirí atá faoi stiúir an phobail. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Is féidir ceist a chur nó freagraí a chuardach ar shuíomh ceisteanna - agus freagraí OSM. - mailing_lists: - title: Liosta Seachadta - description: Is féidir ceist a chur nó ábhair shuimiúla a phlé ar raon leathan - de liostaí seachadta téamacha agus réigiúnacha. - forums: - title: Fóraim - description: Ceisteanna agus plé dóibh siúd ar fearr leo comhéadan ar stíl clár - fógraí. - irc: - title: IRC - description: Comhrá idirghníomhach i go leor teangacha éagsúla agus ar go leor - ábhair éagsúla. - switch2osm: - title: switch2osm - description: Cabhair do chuideachtaí agus eagraíochtaí atá ag athrú chuig léarscáileanna - agus seirbhísí eile atá bunaithe ar OpenStreetMap. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Brabhsáil an vicí le haghaidh doiciméadú mionsonraithe OSM. - about_page: - next: Ar aghaidh - copyright_html: ©Rannchuiditheoirí
        OpenStreetMap - used_by: Cuireann %{name} sonraí léarscáile ar fáil do na mílte suíomh gréasáin, - feidhmchlár móibíleach agus gléas crua-earraí - local_knowledge_title: Eolas Áitiúil - community_driven_title: Faoi Smacht an Phobail - open_data_title: Sonraí Oscailte - open_data_html: 'Is sonraí oscailte atá in OpenStreetMap: tá saoirse agat - é a úsáid chun críocha ar bith a fhad agus a dhéantar OpenStreetMap agus a rannchuiditheoirí - a lua. Má athraíonn tú na sonraí nó má thógann tú orthu ar bhealaí áirithe, - ní féidir leat an toradh a dháileadh ach faoin gceadúnas céanna. Féach an - leathanach faoin gCóipcheart agus Ceadúnais chun sonraí a fháil.' - legal_title: Dlíthiúil - partners_title: Comhpháirtithe notifier: diary_comment_notification: subject: '[OpenStreetMap] Rinne %{user} nóta tráchta faoi iontráil dialainne' @@ -1399,6 +1169,106 @@ ga: delete: deleted: Teachtaireacht scriosta site: + about: + next: Ar aghaidh + copyright_html: ©Rannchuiditheoirí
        OpenStreetMap + used_by: Cuireann %{name} sonraí léarscáile ar fáil do na mílte suíomh gréasáin, + feidhmchlár móibíleach agus gléas crua-earraí + local_knowledge_title: Eolas Áitiúil + community_driven_title: Faoi Smacht an Phobail + open_data_title: Sonraí Oscailte + open_data_html: 'Is sonraí oscailte atá in OpenStreetMap: tá saoirse + agat é a úsáid chun críocha ar bith a fhad agus a dhéantar OpenStreetMap agus + a rannchuiditheoirí a lua. Má athraíonn tú na sonraí nó má thógann tú orthu + ar bhealaí áirithe, ní féidir leat an toradh a dháileadh ach faoin gceadúnas + céanna. Féach an leathanach faoin gCóipcheart + agus Ceadúnais chun sonraí a fháil.' + legal_title: Dlíthiúil + partners_title: Comhpháirtithe + copyright: + foreign: + title: Maidir leis an aistriúchán seo + text: Sa chás nach mbeidh an leathanach aistrithe seo agus an %{english_original_link} + ag teacht le chéile, tabharfar tús áite don leathanach Béarla + english_link: Leagan bunaidh Béarla + native: + title: Maidir leis an leathanach seo + text: Tá tú ag breathnú ar an leagan Béarla den leathanach cóipchirt. Is féidir + leat dul ar ais chuig an %{native_link} den leathanach seo nó is féidir + leat éirí as a bheith ag léamh faoi chúrsaí cóipchirt agus %{mapping_link}. + native_link: Leagan THIS_LANGUAGE_NAME_HERE + mapping_link: dul i mbun léarscáilithe + legal_babble: + title_html: Cóipcheart agus Ceadúnas + intro_1_html: |- + Sonraí oscailte atá i gceist le OpenStreetMap®, atá ceadúnaithe faoi Cheadúnas Bunachar Sonraí Oscailte (ODbL) de chuid Open Data Commons ag Fondúireacht OpenStreetMap (OSMF). + intro_2_html: Tá saoirse agat ár gcuid sonraí a chóipeáil, a dháileadh, a + tharchur agus a oiriúnú, a fhad agus a thugann tú creidiúint do OpenStreetMap + agus dá rannchuiditheoirí. Má athraíonn tú ár gcuid sonraí nó má thógann + tú orthu, ní fhéadfaidh tú an toradh sin a dháileadh ach faoin gceadúnas + céanna. Tá míniú ar do chearta agus ar do fhreagrachtaí sa chód + dlíthiúil iomlán. + intro_3_html: Tá an chartagrafaíocht sna tíleanna léarscáile atá againn, agus + an doiciméadú, ceadúnaithe faoin gceadúnas Sannta-Comhroinnte + Comhionann 2.0 de chuid Creative Commons (CC BY-SA). + credit_title_html: Conas OpenStreetMap a lua + credit_1_html: Ceanglaímid ort an lua “©Rannchuiditheoirí OpenStreetMap” + a úsáid. + credit_2_html: Ní mór duit a chinntiú freisin go bhfuil soiléir go bhfuil + na sonraí ar fáil faoin gCeadúnas Bunachar sonraí Oscailte agus, má úsáideann + tú na tíleanna léarscáile atá againn, go bhfuil an chartagrafaíocht ceadúnaithe + mar CC BY-SA. Is féidir leat é sin a dhéanamh ach nasc a dhéanamh chuig + an bhfógra cóipchirt seo. + Mar mhalairt air sin, agus is gá duit é seo a dhéanamh má rud é gur i bhfoirm + sonraí atá OSM á dháileadh agat, is féidir leat an ceadúnaí/na ceadúnaithe + a ainmniú agus nasc a dhéanamh chuige/chucu go díreach. I meáin nach féidir + naisc a dhéanamh (m.sh. saothair chlóite), molaimid duit do léitheoirí a + threorú chuig openstreetmap.org (d'fhéadfá é sin a dhéanamh ach an seoladh + iomlán seo a thabhairt in áit 'OpenStreetMap'), chuig opendatacommons.org, + agus, más ábhartha, chuig creativecommons.org. + credit_3_html: |- + I gcás léarscáil leictreonach is féidir a bhrabhsáil, ba cheart an lua a bheith le feiceáil i gcúinne na léarscáile. + Mar shampla: + attribution_example: + alt: Sampla den bhealach chun OpenStreetMap a lua ar shuíomh gréasáin + title: Lua samplach + more_title_html: Tuilleadh eolais + more_1_html: Is féidir leat tuilleadh eolais a fháil faoinár sonraí a úsáid, + agus faoin gcaoi chun muid a lua, ag leathanach + ceadúnais Fhondúireacht OSM. + more_2_html: |- + Cé gur sonraí oscailte iad sonraí OpenStreetMap, ní féidir linn API saor in aisce den léarscáil a sholáthar do thríú páirtithe. + Féach ár bPolasaí Úsáide don API,an Polasaí maidir le Tíleanna a úsáid agus an Polasaí maidir le Nominatim a úsáid. + contributors_title_html: Ár rannchuiditheoirí + contributors_at_html: |- + An Ostair: Tá sonraí ann ó + Stadt Wien (faoi + CC BY), + Land Vorarlberg agus ó + Land Tirol (faoi CC BY AT le leasuithe). + contributors_ca_html: "Ceanada: Tá sonraí ann ó \nGeoBase®, + GeoGratis (© Department of Natural\nResources Canada), CanVec (© + Department of Natural\nResources Canada), and StatCan (Geography Division,\nStatistics + Canada)." + contributors_fi_html: 'An Fhionlainn: Tá sonraí ann ó Bhunachar + Sonraí Topagrafaíochta an Maanmittauslaitos (Suirbhéireacht Náisiúnta Talún + na Fionlainne) agus ó thacair sonraí eile, faoin gCeadúnas + NLSFI.' + contributors_fr_html: 'An Fhrainc: Tá sonraí ann a fuarthas + ón Direction Générale des Impôts.' + contributors_nl_html: |- + An Ísiltír: Tá © Sonraí AND, 2007 ann + (www.and.com) + contributors_footer_1_html: |- + Chun tuilleadh sonraí a fháil fúthu seo, agus faoi na sonraí eile a úsáideadh ar mhaithe le OpenStreetMap a fheabhsú, féach leathanach na Rannchuiditheoirí ar Vicí OpenStreetMap. + infringement_title_html: Sárú cóipchirt + infringement_1_html: Meabhraítear do rannchuiditheoirí OSM gan sonraí ó aon + fhoinse atá faoi chóipcheart (m.sh. Google Maps nó léarscáileanna clóite) + a chur leis riamh gan cead a fháil go sainráite ó na sealbhóirí cóipchirt. + trademarks_title_html: Trádmharcanna index: js_1: Tá tú ag úsáid brabhsálaí nach dtacaíonn le JavaScript, é sin nó tá JavaScript díchumasaithe agat. @@ -1434,6 +1304,102 @@ ga: id_not_configured: Níor cumraíodh iD no_iframe_support: Ní thacaíonn do bhrabhsálaí leis an ngné 'iframe' de chuid HTML, rud atá riachtanach don ghné seo. + export: + title: Easportáil + area_to_export: Limistéar la hEaspórtáil + manually_select: Roghnaigh limistéar eile de láimh + format_to_export: Formáid le hEaspórtáil + osm_xml_data: Sonraí XML OpenStreetMap + map_image: Íomhá den Léarscáil (taispeántar an tsraith chaighdeánach) + embeddable_html: HTML inleabaithe + licence: Ceadúnas + export_details: Tá sonraí OpenStreetMap ceadúnaithe faoi Cheadúnas + Bunachar Sonraí Oscailte (ODbL) de chuid Open Data Commons. + too_large: + advice: 'Má theipeann ar an easpórtáil thuas, smaoinigh ar cheann de na foinsí + sa liosta thíos a úsáid:' + body: Tá an limistéar seo rómhór le heaspórtáil mar Sonraí XML OpenStreetMap. + Zúmáil isteach nó roghnaigh limistéar níos lú, nó bain triail as ceann de + na foinsí atá sa liosta thíos chun bulc-íoslódálacha sonraí a dhéanamh. + planet: + title: Planet OSM + description: Cóipeanna a dhéantar a nuashonrú go rialta de bhunachar sonraí + iomlán OpenStreetMap + overpass: + title: Comhéadan feidhmchláir Overpass + description: Íoslódáil an bosca teorainn seo ó scáthán den bhunachar sonraí + OpenStreetMap + geofabrik: + title: Íoslódálacha Geofabrik + description: Asbhaintí a thugtar cothrom le dáta go rialta de mhór-ranna, + tíortha agus cathracha roghnaithe + metro: + title: Ábhair asbhainte Metro + description: Asbhaintí le haghaidh mórchathracha domhanda agus an ceantar + máguaird + other: + title: Foinsí Eile + description: Tá liosta de na foinsí breise ar vicí OpenStreetMap + options: Roghanna + format: Formáid + scale: Scála + max: uasta + image_size: Méid na hÍomhá + zoom: Zúmáil + add_marker: Cuir marcóir leis an léarscáil + latitude: 'D-lthd:' + longitude: 'D-fhad:' + output: Aschur + paste_html: Greamaigh HTML le leabú i suíomh gréasáil + export_button: Easportáil + fixthemap: + title: Fadhb a thuairisciú / An léarscáil a dheisiú + how_to_help: + title: Conas Cabhrú + join_the_community: + title: Glac páirt sa phobal + other_concerns: + title: Ábhar imní eile + help: + title: Cabhair a Fháil + welcome: + url: /welcome + title: Fáilte go OSM + description: Tosaigh leis an treoir thapa seo a chlúdaíonn gnéithe bunúsacha + OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/GA:Beginners%27_guide + title: Treoir do Thosaitheoirí + description: Treoir do thosaitheoirí atá faoi stiúir an phobail. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Is féidir ceist a chur nó freagraí a chuardach ar shuíomh ceisteanna + agus freagraí OSM. + mailing_lists: + url: https://lists.openstreetmap.org/ + title: Liosta Seachadta + description: Is féidir ceist a chur nó ábhair shuimiúla a phlé ar raon leathan + de liostaí seachadta téamacha agus réigiúnacha. + forums: + url: https://forum.openstreetmap.org/ + title: Fóraim + description: Ceisteanna agus plé dóibh siúd ar fearr leo comhéadan ar stíl + clár fógraí. + irc: + url: https://irc.openstreetmap.org/ + title: IRC + description: Comhrá idirghníomhach i go leor teangacha éagsúla agus ar go + leor ábhair éagsúla. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Cabhair do chuideachtaí agus eagraíochtaí atá ag athrú chuig + léarscáileanna agus seirbhísí eile atá bunaithe ar OpenStreetMap. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Brabhsáil an vicí le haghaidh doiciméadú mionsonraithe OSM. sidebar: search_results: Torthaí an chuardaigh close: Dún @@ -1534,6 +1500,47 @@ ga: image: Íomhá alt: Téacs malartach url: URL + welcome: + title: Fáilte! + introduction_html: Fáilte go OpenStreepMap, léarscáil den Domhan atá saor in + aisce agus ar féidir eagarthóireacht a dhéanamh uirthi. Anois agus tú cláraithe, + tá tú réidh chun léarscáiliú a dhéanamh. Seo treoir tosaigh leis an mbuneolas + a bheidh ag teastáil uait. + whats_on_the_map: + title: Cad atá ar an léarscáil + on_html: Is áit é OpenStreetMap chun léarscáiliú a dhéanamh ar rudaí atá + ann dáiríre agus faoi láthair - tá na milliúin foirgneamh, bóithre + agus sonraí eile faoi áiteacha ar fáil air. Is féidir leat cibé na gnéithe + den fhíorshaol atá suimiúil duit féin a léarscáiliú. + off_html: I measc na rudaí nach bhfuil ann tá sonraí bunaithe ar + thuairimí cosúil le rátálacha, gnéithe stairiúla nó teoiriciúla, agus sonraí + ó fhoinsí faoi chóipcheart. Mura bhfuil cead speisialta agat, ná cóipeáil + as léarscáileanna ar líne nó páipéir. + basic_terms: + title: Téarmaí Bunúsacha a bhaineann le Léarscáiliú + paragraph_1_html: Tá roinnt béarlagair dá chuid féin ag baint le OpenStreetMap. + Seo roinnt den na focail is tábhachtaí a bheidh úsáideach duit. + editor_html: Is éard is eagarthóir ann ná ríomhchlár nó suíomh + gréasáin a úsáideann tú chun an léarscáil a chur in eagar. + node_html: Is éard is nód ann ná pointe ar an léarscáil, + cosúil le bialann amháin nó crann. + way_html: Is éard is bealach ann ná líne nó limistéar, cosúil + le bóthair, sruthán, loch nó foirgneamh. + tag_html: Is éard is clib ann ná píosa sonraí faoi nód nó + bealach, cosúil le hainm bialainne nó teorainn luais bóthair. + rules: + title: Rialacha! + paragraph_1_html: |- + Is beag riail fhoirmiúil atá ag OpenStreetMap ach bímid ag súil leis go mbeidh rannpháirtithe ag comhoibriú leis an bpobal agus go rachaidh siad i mbun cumarsáide leis. Má tá tú ag smaoineamh ar aon ghníomhaíocht eile a dhéanamh seachas eagarthóireacht a dhéanamh de láimh, léigh agus lean na treoirlínte maidir le hIompórtálacha agus + Eagarthóireacht Uathoibrithe. + questions: + title: Aon cheist agat? + start_mapping: Téigh i mbun Léarscáilithe + add_a_note: + title: Easpa Ama chun Eagarthóireacht a Dhéanamh? Fág Nóta! + paragraph_1_html: Mura bhfuil tú ag iarraidh ach go ndéanfaí rud beag a cheartú + agus gan an t-am agat clárú agus foghlaim conas eagarthóireacht a dhéanamh, + tá sé an-éasca nóta a scríobh. trace: visibility: private: Príobháideacha (ní chomhroinnfear é ach mar phointí gan ainm, gan ord) @@ -1617,6 +1624,7 @@ ga: map: léarscáil list: public_traces: Loirg GPS phoiblí + my_traces: Mo loirg GPS public_traces_from: Loirg GPS phoiblí ó %{user} description: Brabhsáil rianta GPS a uaslódáladh le déanaí tagged_with: a bhfuil na clibeanna %{tags} acu @@ -1648,13 +1656,16 @@ ga: require_moderator: not_a_moderator: Is gá duit a bheith i do mhodhnóir chun an gníomh sin a dhéanamh. setup_user_auth: + blocked_zero_hour: Tá teachtaireacht phráinneach againn duit ar shuíomh gréasáin + OpenStreetMap. Ní mór duit an teachtaireacht a léamh sula mbeidh tú in ann + do chuid athruithe a shábháil. blocked: Tá bac curtha ar do rochtain ar an API. Logáil isteach ar an gcomhéadan gréasáin chun tuilleadh eolais a fháil. need_to_see_terms: Cuireadh do rochtain ar an API ar fionraí go sealadach. Logáil isteach ar an gcomhéadan gréasáin le hamharc ar Théarmaí na Rannchuiditheoirí. Ní gá duit aontú, ach ní mór duit amharc orthu. oauth: - oauthorize: + authorize: title: Rochtain ar do chuntas a údarú request_access: D'iarr an feidhmchlár %{app_name} rochtain ar do chuntas, %{user}. Seiceáil ar mhaith leat go mbeadh na cumais seo a leanas ag an bhfeidhmchlár. @@ -1669,16 +1680,18 @@ ga: allow_write_gpx: loirg GPS a uaslódáil. allow_write_notes: nótaí a athrú. grant_access: Tabhar an Rochtain - oauthorize_success: + authorize_success: title: Ceadaíodh an t-iarratas ar údarú allowed: Thug tú rochtain ar do chuntas don fheidhmchár %{app_name}. verification: Is é %{code} an cód fíorúcháin. - oauthorize_failure: + authorize_failure: title: Theip ar an iarratas ar údarú denied: Dhiúltaigh tú rochtain ar do chuntas don fheidhmchár %{app_name}. invalid: Níl an ceadchomhartha bailí. revoke: flash: Tharraing tú siar an ceadchomhartha le haghaidh %{application} + permissions: + missing: Níor thug tú cead don fheidhmchlár rochtain a fháil ar an áis seo oauth_clients: new: title: Iarratas nua a chlárú @@ -1762,6 +1775,9 @@ ga: create account minute: Is féidir cuntas a chruthú, ní thógfaidh sé ach nóiméad ort. no account: Níl cuntas agat? + account is suspended: Ár leithscéal, cuireadh do chuntas ar fionraí i ngeall + ar ghníomhaíocht amhrasach.
        Téigh i dteagmháil leis an riarthóir + gréasáin más mian leat é seo a phlé. auth failure: Ár leithscéil, níorbh fhéidir logáil isteach leis na sonraí sin. openid_logo_alt: Logáil isteach le OpenID auth_providers: @@ -1839,6 +1855,7 @@ ga: confirm password: 'Deimhnigh an Focal Faire:' use external auth: Nó, bain úsáid as tríú páirtí le logáil isteach continue: Cláraigh + terms accepted: Go raibh maith agat as glacadh leis na téarmaí nua do rannchuiditheoirí. terms: title: Téarmaí do rannchuiditheoirí heading: Téarmaí do rannchuiditheoirí @@ -1896,17 +1913,26 @@ ga: moderator_history: Baic a Tugadh comments: 'Nótaí tráchta:' create_block: Cuir bac ar an Úsáideoir seo + hide_user: Cuir an tÚsáideoir seo i bhfolach + unhide_user: Taispeáin an tÚsáideoir seo + delete_user: Scrios an tÚsáideoir seo confirm: Deimhnigh + friends_diaries: iontrálacha dialainne do chairde popup: + nearby mapper: Léarscálaí in aice láimhe friend: Cara account: + title: Cuir an cuntas in eagar my settings: Mo chuid socruithe + current email address: 'An seoladh ríomhphoist reatha:' + new email address: 'An seoladh ríomhphoist nua:' email never displayed publicly: (nach dtaispeántar go poiblí riamh) external auth: 'Fíordheimhniú Seachtrach:' openid: link: https://wiki.openstreetmap.org/wiki/OpenID link text: céard é seo? public editing: + heading: 'Eagarthóireacht phoiblí:' enabled link text: céard é seo? contributor terms: heading: 'Téarmaí do Rannchuiditheoirí:' @@ -1935,8 +1961,20 @@ ga: introduction_1: Tá ríomhphost chun é a dheimhniú seolta chugat againn. introduction_2: Deimhnigh do chuntas trí chliceáil ar an nasc sa ríomhphost agus beidh tú in ann tosú ar léirscáiliú a dhéanamh. + button: Deimhnigh + success: Deimhníodh do chuntas, go raibh maith agat as clárú! + already active: Deimhníodh an cuntas seo cheana féin. + unknown token: Tá an cód deimhniúcháin seo imithe in éag, é sin nó níl sé ann. confirm_resend: failure: Níor aimsíodh an t-úsáideoir %{name}. + confirm_email: + button: Deimhnigh + success: Deimhníodh an t-athrú ar an seoladh ríomhphoist! + make_friend: + heading: Cuir %{user} leis mar chara? + button: Cuir leis mar chara + success: Is cara leat %{name} anois! + failed: Ár leithscéal, níorbh fhéidir %{name} a chur leis mar chara. list: title: Úsáideoirí heading: Úsáideoirí @@ -1945,7 +1983,7 @@ ga: user_role: revoke: confirm: Deimhnigh - user_block: + user_blocks: new: submit: Cruthaigh bac needs_view: Ní mór don úsáideoir logáil isteach sula mbainfear an bac seo @@ -1958,26 +1996,27 @@ ga: period: one: uair amháin an chloig other: '%{count} uair an chloig' - partial: + show: + show: Taispeáin + confirm: An bhfuil tú cinnte? + needs_view: Ní mór don úsáideoir logáil isteach sula nglanfar an bac seo. + block: + not_revoked: (nár tarraingíodh siar) show: Taispeáin edit: Cuir in Eagar revoke: Tarraing siar! - confirm: An bhfuil tú cinnte? + blocks: display_name: Úsáideoir Bactha creator_name: Cruthaitheoir reason: Cúis don bhac status: Stádas revoker_name: Tarraingthe siar ag - not_revoked: (nár tarraingíodh siar) showing_page: Leathanach %{page} next: Ar aghaidh » previous: « Roimhe - show: - show: Taispeáin - confirm: An bhfuil tú cinnte? - needs_view: Ní mór don úsáideoir logáil isteach sula nglanfar an bac seo. - note: + notes: rss: + title: Nótaí OpenStreetMap description_item: Fotha RSS don nóta %{id} opened: 'nóta nua (gar do: %{place})' commented: 'nóta tráchta nua (gar do: %{place})' @@ -2048,30 +2087,70 @@ ga: new: add: Cuir Nóta Leis show: + comment_and_resolve: Fág nóta tráchta agus réitigh é comment: Déan nóta tráchta edit_help: Bog an léarscáil agus zúmáil isteach ar áit is mian leat a chur in eagar, ansin cliceáil anseo. directions: + ascend: Dul suas engines: graphhopper_bicycle: Rothar (GraphHopper) + graphhopper_car: Carr (GraphHopper) graphhopper_foot: Ag Siúl (GraphHopper) mapquest_bicycle: Rothar (MapQuest) mapquest_car: Carr (MapQuest) mapquest_foot: Ag Siúl (MapQuest) osrm_car: Carr (OSRM) + descend: Dul síos directions: Treoracha distance: Fad errors: no_route: Níorbh fhéidir bealach a aimsiú idir an dhá áit sin. - no_place: Ár leithscéil - níorbh fhéidir an áit sin aimsiú. + no_place: Ár leithscéil - níorbh fhéidir '%{place}' a aimsiú. instructions: continue_without_exit: Lean ar aghaidh ar %{name} slight_right_without_exit: Beagán ar dheis go %{name} + offramp_right: Tógáil an rampa ar dheis + offramp_right_with_exit: Tóg an tslí amach %{exit} ar dheis + offramp_right_with_exit_name: Tóg an tslí amach %{exit} ar dheis go %{name} + offramp_right_with_exit_directions: Tóg an tslí amach %{exit} ar dheis i dtreo + %{directions} + offramp_right_with_exit_name_directions: Tóg an tslí amach %{exit} ar dheis + go %{name}, i dtreo %{directions} + offramp_right_with_name: Tóg an rampa ar dheis go %{name} + offramp_right_with_directions: Tóg an rampa ar dheis i dtreo %{directions} + offramp_right_with_name_directions: Tóg an rampa ar dheis go %{name}, i dtreo + %{directions} + onramp_right_without_exit: Cas ar dheis ar an rampa go %{name} + onramp_right_with_directions: Cas ar dheis ar an rampa i dtreo %{directions} + onramp_right_with_name_directions: Cas ar dheis ar an an rampa go %{name}, + i dtreo %{directions} + onramp_right_without_directions: Cas ar dheis ar an rampa + endofroad_right_without_exit: Ag ceann an bhóthair cas ar dheis go %{name} + fork_right_without_exit: Ag an ngabhal, cas ar dheis go %{name} turn_right_without_exit: Cas ar dheis agus tóg %{name} sharp_right_without_exit: Casadh géar ar dheis go %{name} uturn_without_exit: U-chasadh feadh %{name} sharp_left_without_exit: Casadh géar ar chlé go %{name} turn_left_without_exit: Cas ar chlé agus tóg %{name} + offramp_left: Tógáil an rampa ar chlé + offramp_left_with_exit: Tóg an tslí amach %{exit} ar chlé + offramp_left_with_exit_name: Tóg an tslí amach %{exit} ar chlé go %{name} + offramp_left_with_exit_directions: Tóg an tslí amach %{exit} ar chlé i dtreo + %{directions} + offramp_left_with_exit_name_directions: Tóg an tslí amach %{exit} ar chlé + go %{name}, i dtreo %{directions} + offramp_left_with_name: Tóg an rampa ar chlé go %{name} + offramp_left_with_directions: Tóg an rampa ar chlé i dtreo %{directions} + offramp_left_with_name_directions: Tóg an rampa ar chlé go %{name}, i dtreo + %{directions} + onramp_left_without_exit: Cas ar chlé ar an rampa go %{name} + onramp_left_with_directions: Cas ar chlé ar an rampa i dtreo %{directions} + onramp_left_with_name_directions: Cas ar chlé ar an an rampa go %{name}, i + dtreo %{directions} + onramp_left_without_directions: Cas ar chlé ar an rampa + endofroad_left_without_exit: Ag ceann an bhóthair cas ar chlé go %{name} + fork_left_without_exit: Ag an ngabhal, cas ar chlé go %{name} slight_left_without_exit: Beagán ar chlé go %{name} via_point_without_exit: (tríd an bpointe) follow_without_exit: Lean %{name} @@ -2079,10 +2158,15 @@ ga: leave_roundabout_without_exit: Fág an timpeallán - %{name} stay_roundabout_without_exit: Fan ar an timpeallán - %{name} start_without_exit: Tosaigh ar %{name} - destination_without_exit: Ceann scríbe baint amach + destination_without_exit: Ceann scríbe bainte amach against_oneway_without_exit: Téigh i gcoinne treo an aontreo ar %{name} end_oneway_without_exit: Deireadh an aontreo ar %{name} roundabout_with_exit: Ag an timpeallán, tóg bealach amach %{exit} go %{name} + turn_left_with_exit: Ag an timpeallán cas ar chlé go %{name} + slight_left_with_exit: Ag an timpeallán téigh beagán ar chlé go %{name} + turn_right_with_exit: Ag an timpeallán cas ar dheis go %{name} + slight_right_with_exit: Ag an timpeallán téigh beagán ar dheis go %{name} + continue_with_exit: Ag an timpeallán lean díreach ar aghaidh go %{name} unnamed: bóthar gan ainm courtesy: Treoracha le caoinchead %{link} time: Am @@ -2090,12 +2174,20 @@ ga: node: Nód way: Bealach relation: Gaol + nothing_found: Níor aimsíodh aon ghnéithe error: 'Earráid ag dul i dteagmháil le %{server}: %{error}' timeout: Am istigh ag déanamh teagmhála le %{server} - redaction: + context: + directions_from: Treoracha as seo + directions_to: Treoracha go dtí seo + add_note: Cuir isteach nóta anseo + redactions: edit: description: Cur síos + new: + description: Cur síos show: + description: 'Cur síos:' title: Ceilt á taispeáint user: 'Cruthaitheoir:' edit: Cuir an cheilt seo in eagar diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 04dca87f5..e6b6e515f 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -349,55 +349,6 @@ gd: ago: o chionn %{ago} newer_comments: Beachdan nas ùire older_comments: Beachdan nas sine - export: - title: Às-phortaich - start: - area_to_export: An raon ri às-phortadh - manually_select: Tagh raon eile a làimh - format_to_export: Fòrmat an às-phortaidh - osm_xml_data: Dàta XML OpenStreetMap - map_image: Dealbh a' mhapa (seallaidh seo a' bhreath stannardach) - embeddable_html: HTML a ghabhas leabachadh - licence: Ceadachas - export_details: Tha OpenStreetMap fo cheadachas Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Ma dh''fhàilligeas leis an às-phortadh gu h-àrd, feuch an cleachd - thu aon dhe na tùsan gu h-ìosal:' - body: Tha an raon seo ro mhòr ach an gabhadh às-phortadh 'na dhàta XML OpenStreetMap. - Feuch an sùm thu a-steach no gun tagh thu raon nas lugha no gun cleachd - thu aon dhe na tùsan gu h-ìosal airson tomad de dhàta a luchdadh a-nuas. - planet: - title: Planet OSM - description: Lethbhreacan dhen stòr-dàta shlàn aig OpenStreetMap a thèid - ùrachadh gu cunbhalach. - overpass: - title: Overpass API - description: Luchdaich a-nuas na tha sa bhogsa-iadhaidh seo o sgàthan dhen - stòr-dàta OpenStreetMap - geofabrik: - title: Geofabrik Downloads - description: Às-tharraing de mhòr-thìrean, dùthchannan agus roghainn de - bhailtean a thèid ùrachadh gu cunbhalach. - metro: - title: Metro Extracts - description: Às-tharraing de mòr-bhailtean an t-saoghail agus dhe na raointean - timcheall orra - other: - title: Tùsan eile - description: Gheibh thu tùsan a bharrachd air an uicidh aig OpenStreetMap - options: Roghainnean - format: Fòrmat - scale: Sgèile - max: as motha - image_size: Meud an deilbh - zoom: Sùm - add_marker: Cuir comharra ris a' mhapa - latitude: 'D-leud:' - longitude: 'D-fhad:' - output: Às-chur - paste_html: Cuir ann HTML gus a leabachadh ann an làrach-lìn eile - export_button: Às-phortaich geocoder: search: title: @@ -974,247 +925,6 @@ gd: text: Thoir tìodhlac dhuinn learn_more: Barrachd fiosrachaidh more: Barrachd - license_page: - foreign: - title: Mun eadar-theangachadh seo - text: Ma bhios còmhstri eadar an duilleag air eadar-theangachadh seo agus %{english_original_link}, - bidh am prìomhachas air an duilleag sa Bheurla - english_link: an duilleag tùsail sa Bheurla - native: - title: Mun duilleag seo - text: Tha thu a' coimhead air tionndadh sa Bheurla de dhuilleag na còrach-lethbhreac. - 'S urrainn dhut tilleadh dhan %{native_link} dhen duilleag seo no sgur de - leughadh mun chòir-lethbhreac agus %{mapping_link}. - native_link: tionndadh sa Ghàidhlig - mapping_link: tòiseachadh air an obair-mhapa - legal_babble: - title_html: Còir-lethbhreac agus ceadachas - intro_1_html: '''S e dàta fosgailte a tha san OpenStreetMap® - fo cheadachas Open Data - Commons Open Database License (ODbL) le Fonndas - OpenStreetMap (OSMF).' - intro_2_html: |- - Faodaidh tu lethbhreacan a dhèanamh dhen dàta againn, a sgaoileadh, - a thar-chur agus atharrachadh gu saor, cho fad 's a bheir thu urram - dha OpenStreetMap agus a cho-thabhartaichean. Ma nì thu atharrachadh - air an dàta againn no ma thogas tu rudeigin eile leis, faodaidh tu - an toradh a sgaoileadh fon aon cheadachas. Mìnichidh an - còd laghail - slàn dè na còirichean agus na dleastanasan a tha agad. - intro_3_html: |- - Tha am mapachadh sna leacan mapa againn agus an docamaideadh againn - fo cheadachas Creative - Commons Attribution-ShareAlike 2.0 license (CC BY-SA). - credit_title_html: Mar a bheir thu urram dha OpenStreetMap - credit_1_html: |- - Tha e riatanach gun chleachd thu “© OpenStreetMap - contributors” mar urram. - credit_2_html: |- - Feumaidh tu mìneachadh gu soilleir cuideachd gu bheil an dàta ri fhaighinn - fo cheadachas Open Database License, agus ma chleachdas tu na leacan mapa - againn gu bheil am mapachadh fo cheadachas CC BY-SA. Faodaidh tu seo - a dhèanamh le ceangal gun - duilleag na còrach-lethbhreac seo. - Mar roghainn eile agus gu riatanach ma sgaoileas tu OSM 'na dhàta, - 's urrainn dhut an ceadachas/na ceadachasan ainmeachadh agus ceangal dìreach - a dhèanamh dhaibh. Ann am meadhanan far nach gabh ceangal a dhèanamh (can - stuthan clò-bhuailte), mholamaid gun stiùirich thu an luchd-leughaidh gu - openstreetmap.org (dh'fhaoidte gun leudaich thu 'OpenStreetMap' leis - an t-seòladh shlàn seo), gu opendatacommons.org agus ma tha seo iomchaidh gu - creativecommons.org. - credit_3_html: |- - airson mapa leatronaigeach a ghabhas rùrachadh, bu chòir dhan urram a nochdadh air - oisean a' mhapa. Mar eisimpleir: - attribution_example: - alt: Ball-eisimpleir air mar a bheir thu urram dha OpenStreetMap air duilleag-lìn - title: Ball-eisimpleir air urram - more_title_html: Barrachd fiosrachaidh - more_1_html: |- - Leugh barrachd air mar a chleachdas tu an dàta againn agus mar a - bheir thu urram dhuinn air duilleag a' cheadachais OSMF agus CÀBHA laghail sa choimhearsnachd. - more_2_html: |- - Ged as e dàta saor a tha san OpenStreetMap, chan urrainn dhuinn API mapa an-asgaidh a thoirt do threas-phàrtaidhean. - Faic poileasaidh cleachdadh an API, - poileasaidh cleachdadh nan leacagan - agus poileasaidh cleachdadh Nominatim againn. - contributors_title_html: Na co-thabhartaicheean againn - contributors_intro_html: |- - 'S e mìltean de dhaoine a tha sna co-thabhartaichean againn. - Gabhaidh sinn a-steach dàta fo cheadachas fosgailte aig buidhnean - mapachaidh nàiseanta agus tùsan eile, agus tha an fheadhainn a leanas - 'nam measg: - contributors_at_html: |- - An Ostair: Gabhaidh seo a-steach dàta o - Stadt Wien (fo cheadachas - CC BY), - Land Vorarlberg agus - Land Tirol (fo cheadachas CC BY AT le atharraichean). - contributors_ca_html: |- - Canada: Gabhaidh seo a-steach dàta o - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), agus StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: |- - An Fhionnlann: Gabhaidh seo a-steach dàta on - National Land Survey of Finland's Topographic Database - agud seataichean-dàta eile fo cheadachas - NLSFI License. - contributors_fr_html: |- - An Fhraing: Gabhaidh seo a-steach dàta o - Direction Générale des Impôts. - contributors_nl_html: |- - Na Tìrean Ìsle: Gabhaidh seo a-steach dàta o © AND, 2007 - (www.and.com) - contributors_nz_html: |- - Sealann Nuadh: Gabhaidh seo a-steach dàta o - Land Information New Zealand. Còir-lethbhreac a' Chrùin glèidhte. - contributors_si_html: |- - An t-Slòbhain: Gabhaidh seo a-steach dàta o - Ùghdarras Suirbhidheadh agus Mapachaidh agus - Ministreachd an Àiteachais, na Coilltearachd agus a' Bhidhe - (fiosrachadh poblach na Slòbhaine). - contributors_za_html: |- - Afraga a Deas: Gabhaidh seo a-steach dàta o - Chief Directorate: - National Geo-Spatial Information, coir-lethbhreac na Stàite glèidhte. - contributors_gb_html: |- - An Rìoghachd Aonaichte: Gabhaidh seo a-steach dàta Ordnance - Survey © còir-lethbhreac a' Chrùin agus dlighe stòir-dàta - 2010-12. - contributors_footer_1_html: |- - Airson barrachd fiosrachaidh air an fheadhainn seo agus air barrachd - thùsan a chaidh a chleachdadh a chum piseachadh OpenStreetMap, thoir - sùil air Duilleag nan co-thabhartaichean - air uicidh OpenStreetMap. - contributors_footer_2_html: Ma thèid dàta a ghabhail a-steach ann an OpenStreetMap, - chan eil e fillte a-staigh gun do chuir an solaraiche dàta tùsail aonta ri - OpenStreetMap, gun toireadh e barantas sam bith seachad no gum biodh e fo - fhiachanas sam bith. - infringement_title_html: Briseadh a-steach air còraichean-lethbhreac - infringement_1_html: Tha sinn a' cur an cuimhne nan co-thabhartaichean OSM nach - cuir iad dàta o thùs fo chòir-lethbhreac ri OSM (can Google Maps no mapaichean - clò-bhuailte) idir ach ma fhuair iad cead soilleir o shealbhadairean na còrach-lethbhreac. - infringement_2_html: |- - Ma tha thu dhen bheachd gun deach stuth fo chòir-lethbhreac a chur ri stòr-dàta OpenStreetMap no an làrach-lìn seo ann an dòigh nach eil iomchaidh, thoir sùil air a' mhodh toirt air falbh againn no faidhlich e gu dìreach air an - duilleag faidhlidh air loidhne againn. - trademarks_title_html: Comharran-malairt - welcome_page: - title: Fàilte! - introduction_html: Fàilte gu OpenStreetMap, mapa saor an t-saoghail a ghabhas - deasachadh. Nise on a tha thu air clàradh, tha thu ullamh gus tòiseachadh air - an obair-mhapa. Seo treòir luath a bheir eòlas dhut air na rudan as cudromaiche. - whats_on_the_map: - title: Na tha air a' mhapa - on_html: |- - 'S e àite a tha san OpenStreetMap gus mapa a dhèanamh de nithean a tha an dà chuid fìos is làithreach - - gabhaidh seo a-steach milleanan de thogalaichean, rathaidean agus fiosrachadh eile mu àiteachan. 'S urrainn dhut feart sam bith an t-saoghail fhìrinnich sa bheil ùidh agad a chur ris a' mhapa. - off_html: '''S ann nach gabh e a-steach dàta mu bheachdan a leithid - rangachaidhean, feartan eachdraidheil no baralach no dàta o thùsan fo chòir-lethbhreac. - Mur eil cead soilleir agad, na dèan lethbhreac o mhapaichean air loidhne no - air pàipear.' - basic_terms: - title: Teirmichean bunasach airson na h-obrach-mapa - paragraph_1_html: Tha cainnt shònraichte air OpenStreetMap. Seo facal no dhà - cudromach a bhios feumail dhut. - editor_html: '''S e prògram no làrach-lìn a tha ann an deasaiche - as urrainn dhut cleachdadh gus am mapa a dheasachadh.' - node_html: '''S e puing air a'' mhapa a tha ann an nòd, can - taigh-bìdh no craobh.' - way_html: '''S e loidhne no raon a tha ann an slighe, can rathad, - loch no togalach.' - tag_html: '''S e beagan dàta mu nòd no slighe a tha ann an taga, - can ainm taighe-bhìdh no crìoch astair rathaid.' - rules: - title: Riaghailtean! - questions: - title: A bheil ceist sam bith agad? - paragraph_1_html: |- - Tha iomadh goireas aig OpenStreetMap gus faighinn a-mach mun phròiseact, ceistean a chur 's a fhreagairt agus deasbad a dhèanamh is cuspairean mun mhapa a chlàradh còmhla. - Faigh cobhair an-seo. - start_mapping: Tòisich air an obair-mhapa - add_a_note: - title: Nach eil ùine agad airson deasachadh? Cuir nòta ris! - paragraph_1_html: Ma thogras tu rud beag a chàradh ach chan eil ùine agad gus - clàradh agus ionnsachadh mar a nì thu deasachadh, tha e furasta nòta a chur - ris. - paragraph_2_html: |- - Cha leig thu leas ach tadhal air a' mhapa 's briogadh air ìomhaigheag an nòta: - . Cuiridh seo comharra ris a' mhapa as urrainn dhut gluasad 's tu 'ga shlaodadh. Cuir an teachdaireachd agad ris agus briog air "Sàbhail" an uairsin gus an dèan luchd-mapachaidh eile sgrùdadh air. - fixthemap: - title: Innis dhuinn mu dhuilgheadas / Càraich am mapa - how_to_help: - title: Mar a bheir thu taic dhuinn - join_the_community: - title: Gabh pàirt sa choimhearsnachd - explanation_html: Ma mhothaicheas tu duilgheadas leis an dàta mapa againn, - can bu bheil rathad no an seòladh agad a dhìth, nach fhaigh thu ballrachd - sa choimhearsnachd OpenStreetMap ach an càraich no an cuir thu fhèin an - dàta ris. \ - add_a_note: - instructions_html: Cha leig thu leas ach briogadh air - no air an aon ìomhaigheag ann an sealladh a' mhapa. Cuiridh seo comharra - ris a' mhapa as urrainn dhut gluasad 's tu 'ga shlaodadh. Cuir an teachdaireachd - agad ris agus briog air "Sàbhail" an uairsin gus an dèan luchd-mapachaidh - eile sgrùdadh air. - other_concerns: - title: Cùisean eile - explanation_html: "Ma tha rud sam bith eile a' cur dragh ort a thaobh na susbainte - no mar a tha an dàta againn 'ga chleachdadh, tadhail air\nduilleag - na còrach-lethbhreac againn airson barrachd fiosrachaidh laghail no cuir - fios gun \nbhuidheann - obrach OSMF iomchaidh. \\" - help_page: - title: A' faighinn cobhair - introduction: Tha iomadh goireas aig OpenStreetMap gus faighinn a-mach mun phròiseact, - ceistean a chur 's a fhreagairt agus deasbad a dhèanamh is cuspairean mun mhapa - a chlàradh còmhla. - welcome: - url: /welcome - title: Fàilte gu OSM - description: Faigh toiseach tòiseachaidh air OpenStreetMap leis an stiùireadh - luath seo. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: Treòir an luchd-tòiseachaidh - description: Treòir leis a’ choimhearsnachd do luchd-tòiseachaidh - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Faighnich ceist no rùraich na freagairtean air làrach nan ceistean - àbhaisteach aig OSM. - mailing_lists: - title: Liostaichean-puist - switch2osm: - title: switch2osm - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Brabhsaich san uicidh airson docamaideadh mionaideach air OSM. - about_page: - next: Air adhart - copyright_html: ©Co-thabhartaichean
        OpenStreetMap - used_by: Bheir %{name} dàta mapa dha mhìltean de làraichean-lìn, aplacaidean inneil-làimhe - agus uidheaman bathair-chruaidh - lede_text: Tha OpenStreetMap 'ga thogail le coimhearsnachd de luchd-mapachaidh - a bheir dàta dhuinn mu rathaidean, slighean cafaidhean, stèiseanan-rèile agus - mòran a bharrachd air feadh an t-saoghail agus a nì obair-càraidh air. - local_knowledge_title: Eòlas ionadail - local_knowledge_html: '''S ann gu bheil eòlas ionadail air aire OpenStreetMap. - cleachdaich na co-thabhartaichean dealbhan adhair, uidheaman GPS agus mapaichean-làraich - bun-theicneolach airson dearbhadh gu bheil OSM ceart agus làithreach.' - community_driven_title: Fo smachd na coimhearsnachd - community_driven_html: |- - Tha coimhearsnachd OpenStreetMap measgaichte, dealasach agus a' fàs gach latha. Gabhaidh na co-thabhartaichean againn a-steach luchd-mapa saor-thoileach, luchd shiostaman fiosrachaidh chruinn-eòlaich proifeiseanta, innleadairean a ruitheas na frithealaichean aig OSM, luchd taic dhaonnachdach a nì mapaichean air raointean fo dhunaidh agus mòran a bharrachd. - Airson barrachd fiosrachaidh mun choimhearsnachd, tadhail air leabhraichean-latha, - blogaichean na coimhearsnachd agus - làrach-lìn an Fhonndais OSM. - open_data_title: Dàta fosgailte - open_data_html: |- - 'S e dàta fosgailte a tha san OpenStreetMap: faodaidh tu a chleachdadh a chum adhbhair sam bith cho fad 's a bheir thu urram air OpenStreetMap agus na co-thabhartaichean aige. Ma nì thu atharrachadh air an dàta againn no ma thogas tu rudeigin eile leis, faodaidh tu - an toradh a sgaoileadh fon aon cheadachas. Thoir sùil air Duilleag na còrach-lethbhreac agus a' cheadachais airson barrachd fiosrachaidh. - legal_title: Nòtaichean laghail - partners_title: Com-pàirtichean notifier: diary_comment_notification: subject: '[OpenStreetMap] Thug %{user} seachad beachd air leabhar-latha' @@ -1412,6 +1122,156 @@ gd: delete: deleted: Chaidh an teachdaireachd a sguabadh às site: + about: + next: Air adhart + copyright_html: ©Co-thabhartaichean
        OpenStreetMap + used_by: Bheir %{name} dàta mapa dha mhìltean de làraichean-lìn, aplacaidean + inneil-làimhe agus uidheaman bathair-chruaidh + lede_text: Tha OpenStreetMap 'ga thogail le coimhearsnachd de luchd-mapachaidh + a bheir dàta dhuinn mu rathaidean, slighean cafaidhean, stèiseanan-rèile agus + mòran a bharrachd air feadh an t-saoghail agus a nì obair-càraidh air. + local_knowledge_title: Eòlas ionadail + local_knowledge_html: '''S ann gu bheil eòlas ionadail air aire OpenStreetMap. + cleachdaich na co-thabhartaichean dealbhan adhair, uidheaman GPS agus mapaichean-làraich + bun-theicneolach airson dearbhadh gu bheil OSM ceart agus làithreach.' + community_driven_title: Fo smachd na coimhearsnachd + community_driven_html: |- + Tha coimhearsnachd OpenStreetMap measgaichte, dealasach agus a' fàs gach latha. Gabhaidh na co-thabhartaichean againn a-steach luchd-mapa saor-thoileach, luchd shiostaman fiosrachaidh chruinn-eòlaich proifeiseanta, innleadairean a ruitheas na frithealaichean aig OSM, luchd taic dhaonnachdach a nì mapaichean air raointean fo dhunaidh agus mòran a bharrachd. + Airson barrachd fiosrachaidh mun choimhearsnachd, tadhail air leabhraichean-latha, + blogaichean na coimhearsnachd agus + làrach-lìn an Fhonndais OSM. + open_data_title: Dàta fosgailte + open_data_html: |- + 'S e dàta fosgailte a tha san OpenStreetMap: faodaidh tu a chleachdadh a chum adhbhair sam bith cho fad 's a bheir thu urram air OpenStreetMap agus na co-thabhartaichean aige. Ma nì thu atharrachadh air an dàta againn no ma thogas tu rudeigin eile leis, faodaidh tu + an toradh a sgaoileadh fon aon cheadachas. Thoir sùil air Duilleag na còrach-lethbhreac agus a' cheadachais airson barrachd fiosrachaidh. + legal_title: Nòtaichean laghail + partners_title: Com-pàirtichean + copyright: + foreign: + title: Mun eadar-theangachadh seo + text: Ma bhios còmhstri eadar an duilleag air eadar-theangachadh seo agus + %{english_original_link}, bidh am prìomhachas air an duilleag sa Bheurla + english_link: an duilleag tùsail sa Bheurla + native: + title: Mun duilleag seo + text: Tha thu a' coimhead air tionndadh sa Bheurla de dhuilleag na còrach-lethbhreac. + 'S urrainn dhut tilleadh dhan %{native_link} dhen duilleag seo no sgur de + leughadh mun chòir-lethbhreac agus %{mapping_link}. + native_link: tionndadh sa Ghàidhlig + mapping_link: tòiseachadh air an obair-mhapa + legal_babble: + title_html: Còir-lethbhreac agus ceadachas + intro_1_html: '''S e dàta fosgailte a tha san OpenStreetMap® fo cheadachas Open + Data Commons Open Database License (ODbL) le Fonndas + OpenStreetMap (OSMF).' + intro_2_html: |- + Faodaidh tu lethbhreacan a dhèanamh dhen dàta againn, a sgaoileadh, + a thar-chur agus atharrachadh gu saor, cho fad 's a bheir thu urram + dha OpenStreetMap agus a cho-thabhartaichean. Ma nì thu atharrachadh + air an dàta againn no ma thogas tu rudeigin eile leis, faodaidh tu + an toradh a sgaoileadh fon aon cheadachas. Mìnichidh an + còd laghail + slàn dè na còirichean agus na dleastanasan a tha agad. + intro_3_html: |- + Tha am mapachadh sna leacan mapa againn agus an docamaideadh againn + fo cheadachas Creative + Commons Attribution-ShareAlike 2.0 license (CC BY-SA). + credit_title_html: Mar a bheir thu urram dha OpenStreetMap + credit_1_html: |- + Tha e riatanach gun chleachd thu “© OpenStreetMap + contributors” mar urram. + credit_2_html: |- + Feumaidh tu mìneachadh gu soilleir cuideachd gu bheil an dàta ri fhaighinn + fo cheadachas Open Database License, agus ma chleachdas tu na leacan mapa + againn gu bheil am mapachadh fo cheadachas CC BY-SA. Faodaidh tu seo + a dhèanamh le ceangal gun + duilleag na còrach-lethbhreac seo. + Mar roghainn eile agus gu riatanach ma sgaoileas tu OSM 'na dhàta, + 's urrainn dhut an ceadachas/na ceadachasan ainmeachadh agus ceangal dìreach + a dhèanamh dhaibh. Ann am meadhanan far nach gabh ceangal a dhèanamh (can + stuthan clò-bhuailte), mholamaid gun stiùirich thu an luchd-leughaidh gu + openstreetmap.org (dh'fhaoidte gun leudaich thu 'OpenStreetMap' leis + an t-seòladh shlàn seo), gu opendatacommons.org agus ma tha seo iomchaidh gu + creativecommons.org. + credit_3_html: |- + airson mapa leatronaigeach a ghabhas rùrachadh, bu chòir dhan urram a nochdadh air + oisean a' mhapa. Mar eisimpleir: + attribution_example: + alt: Ball-eisimpleir air mar a bheir thu urram dha OpenStreetMap air duilleag-lìn + title: Ball-eisimpleir air urram + more_title_html: Barrachd fiosrachaidh + more_1_html: |- + Leugh barrachd air mar a chleachdas tu an dàta againn agus mar a + bheir thu urram dhuinn air duilleag a' cheadachais OSMF agus CÀBHA laghail sa choimhearsnachd. + more_2_html: |- + Ged as e dàta saor a tha san OpenStreetMap, chan urrainn dhuinn API mapa an-asgaidh a thoirt do threas-phàrtaidhean. + Faic poileasaidh cleachdadh an API, + poileasaidh cleachdadh nan leacagan + agus poileasaidh cleachdadh Nominatim againn. + contributors_title_html: Na co-thabhartaicheean againn + contributors_intro_html: |- + 'S e mìltean de dhaoine a tha sna co-thabhartaichean againn. + Gabhaidh sinn a-steach dàta fo cheadachas fosgailte aig buidhnean + mapachaidh nàiseanta agus tùsan eile, agus tha an fheadhainn a leanas + 'nam measg: + contributors_at_html: |- + An Ostair: Gabhaidh seo a-steach dàta o + Stadt Wien (fo cheadachas + CC BY), + Land Vorarlberg agus + Land Tirol (fo cheadachas CC BY AT le atharraichean). + contributors_ca_html: |- + Canada: Gabhaidh seo a-steach dàta o + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), agus StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: |- + An Fhionnlann: Gabhaidh seo a-steach dàta on + National Land Survey of Finland's Topographic Database + agud seataichean-dàta eile fo cheadachas + NLSFI License. + contributors_fr_html: |- + An Fhraing: Gabhaidh seo a-steach dàta o + Direction Générale des Impôts. + contributors_nl_html: |- + Na Tìrean Ìsle: Gabhaidh seo a-steach dàta o © AND, 2007 + (www.and.com) + contributors_nz_html: |- + Sealann Nuadh: Gabhaidh seo a-steach dàta o + Land Information New Zealand. Còir-lethbhreac a' Chrùin glèidhte. + contributors_si_html: |- + An t-Slòbhain: Gabhaidh seo a-steach dàta o + Ùghdarras Suirbhidheadh agus Mapachaidh agus + Ministreachd an Àiteachais, na Coilltearachd agus a' Bhidhe + (fiosrachadh poblach na Slòbhaine). + contributors_za_html: |- + Afraga a Deas: Gabhaidh seo a-steach dàta o + Chief Directorate: + National Geo-Spatial Information, coir-lethbhreac na Stàite glèidhte. + contributors_gb_html: |- + An Rìoghachd Aonaichte: Gabhaidh seo a-steach dàta Ordnance + Survey © còir-lethbhreac a' Chrùin agus dlighe stòir-dàta + 2010-12. + contributors_footer_1_html: |- + Airson barrachd fiosrachaidh air an fheadhainn seo agus air barrachd + thùsan a chaidh a chleachdadh a chum piseachadh OpenStreetMap, thoir + sùil air Duilleag nan co-thabhartaichean + air uicidh OpenStreetMap. + contributors_footer_2_html: Ma thèid dàta a ghabhail a-steach ann an OpenStreetMap, + chan eil e fillte a-staigh gun do chuir an solaraiche dàta tùsail aonta + ri OpenStreetMap, gun toireadh e barantas sam bith seachad no gum biodh + e fo fhiachanas sam bith. + infringement_title_html: Briseadh a-steach air còraichean-lethbhreac + infringement_1_html: Tha sinn a' cur an cuimhne nan co-thabhartaichean OSM + nach cuir iad dàta o thùs fo chòir-lethbhreac ri OSM (can Google Maps no + mapaichean clò-bhuailte) idir ach ma fhuair iad cead soilleir o shealbhadairean + na còrach-lethbhreac. + infringement_2_html: |- + Ma tha thu dhen bheachd gun deach stuth fo chòir-lethbhreac a chur ri stòr-dàta OpenStreetMap no an làrach-lìn seo ann an dòigh nach eil iomchaidh, thoir sùil air a' mhodh toirt air falbh againn no faidhlich e gu dìreach air an + duilleag faidhlidh air loidhne againn. + trademarks_title_html: Comharran-malairt index: js_1: Tha thu a' chleachdadh brabhsair nach cuir taic ri JavaScript no chuir thu JavaScript à comas. @@ -1448,6 +1308,104 @@ gd: id_not_configured: Cha deach iD a rèiteachadh no_iframe_support: Cha toir am brabhsair agad taic ri HTML iframes a tha riatanach airson an fhearta seo. + export: + title: Às-phortaich + area_to_export: An raon ri às-phortadh + manually_select: Tagh raon eile a làimh + format_to_export: Fòrmat an às-phortaidh + osm_xml_data: Dàta XML OpenStreetMap + map_image: Dealbh a' mhapa (seallaidh seo a' bhreath stannardach) + embeddable_html: HTML a ghabhas leabachadh + licence: Ceadachas + export_details: Tha OpenStreetMap fo cheadachas Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Ma dh''fhàilligeas leis an às-phortadh gu h-àrd, feuch an cleachd + thu aon dhe na tùsan gu h-ìosal:' + body: Tha an raon seo ro mhòr ach an gabhadh às-phortadh 'na dhàta XML OpenStreetMap. + Feuch an sùm thu a-steach no gun tagh thu raon nas lugha no gun cleachd + thu aon dhe na tùsan gu h-ìosal airson tomad de dhàta a luchdadh a-nuas. + planet: + title: Planet OSM + description: Lethbhreacan dhen stòr-dàta shlàn aig OpenStreetMap a thèid + ùrachadh gu cunbhalach. + overpass: + title: Overpass API + description: Luchdaich a-nuas na tha sa bhogsa-iadhaidh seo o sgàthan dhen + stòr-dàta OpenStreetMap + geofabrik: + title: Geofabrik Downloads + description: Às-tharraing de mhòr-thìrean, dùthchannan agus roghainn de + bhailtean a thèid ùrachadh gu cunbhalach. + metro: + title: Metro Extracts + description: Às-tharraing de mòr-bhailtean an t-saoghail agus dhe na raointean + timcheall orra + other: + title: Tùsan eile + description: Gheibh thu tùsan a bharrachd air an uicidh aig OpenStreetMap + options: Roghainnean + format: Fòrmat + scale: Sgèile + max: as motha + image_size: Meud an deilbh + zoom: Sùm + add_marker: Cuir comharra ris a' mhapa + latitude: 'D-leud:' + longitude: 'D-fhad:' + output: Às-chur + paste_html: Cuir ann HTML gus a leabachadh ann an làrach-lìn eile + export_button: Às-phortaich + fixthemap: + title: Innis dhuinn mu dhuilgheadas / Càraich am mapa + how_to_help: + title: Mar a bheir thu taic dhuinn + join_the_community: + title: Gabh pàirt sa choimhearsnachd + explanation_html: Ma mhothaicheas tu duilgheadas leis an dàta mapa againn, + can bu bheil rathad no an seòladh agad a dhìth, nach fhaigh thu ballrachd + sa choimhearsnachd OpenStreetMap ach an càraich no an cuir thu fhèin an + dàta ris. \ + add_a_note: + instructions_html: Cha leig thu leas ach briogadh air + no air an aon ìomhaigheag ann an sealladh a' mhapa. Cuiridh seo comharra + ris a' mhapa as urrainn dhut gluasad 's tu 'ga shlaodadh. Cuir an teachdaireachd + agad ris agus briog air "Sàbhail" an uairsin gus an dèan luchd-mapachaidh + eile sgrùdadh air. + other_concerns: + title: Cùisean eile + explanation_html: "Ma tha rud sam bith eile a' cur dragh ort a thaobh na susbainte + no mar a tha an dàta againn 'ga chleachdadh, tadhail air\nduilleag + na còrach-lethbhreac againn airson barrachd fiosrachaidh laghail no + cuir fios gun \nbhuidheann + obrach OSMF iomchaidh. \\" + help: + title: A' faighinn cobhair + introduction: Tha iomadh goireas aig OpenStreetMap gus faighinn a-mach mun phròiseact, + ceistean a chur 's a fhreagairt agus deasbad a dhèanamh is cuspairean mun + mhapa a chlàradh còmhla. + welcome: + url: /welcome + title: Fàilte gu OSM + description: Faigh toiseach tòiseachaidh air OpenStreetMap leis an stiùireadh + luath seo. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: Treòir an luchd-tòiseachaidh + description: Treòir leis a’ choimhearsnachd do luchd-tòiseachaidh + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Faighnich ceist no rùraich na freagairtean air làrach nan ceistean + àbhaisteach aig OSM. + mailing_lists: + title: Liostaichean-puist + switch2osm: + title: switch2osm + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Brabhsaich san uicidh airson docamaideadh mionaideach air OSM. sidebar: search_results: Toraidhean luirg close: Dùin @@ -1547,6 +1505,48 @@ gd: image: Dealbh alt: Teacsa eile url: URL + welcome: + title: Fàilte! + introduction_html: Fàilte gu OpenStreetMap, mapa saor an t-saoghail a ghabhas + deasachadh. Nise on a tha thu air clàradh, tha thu ullamh gus tòiseachadh + air an obair-mhapa. Seo treòir luath a bheir eòlas dhut air na rudan as cudromaiche. + whats_on_the_map: + title: Na tha air a' mhapa + on_html: |- + 'S e àite a tha san OpenStreetMap gus mapa a dhèanamh de nithean a tha an dà chuid fìos is làithreach - + gabhaidh seo a-steach milleanan de thogalaichean, rathaidean agus fiosrachadh eile mu àiteachan. 'S urrainn dhut feart sam bith an t-saoghail fhìrinnich sa bheil ùidh agad a chur ris a' mhapa. + off_html: '''S ann nach gabh e a-steach dàta mu bheachdan a leithid + rangachaidhean, feartan eachdraidheil no baralach no dàta o thùsan fo chòir-lethbhreac. + Mur eil cead soilleir agad, na dèan lethbhreac o mhapaichean air loidhne + no air pàipear.' + basic_terms: + title: Teirmichean bunasach airson na h-obrach-mapa + paragraph_1_html: Tha cainnt shònraichte air OpenStreetMap. Seo facal no dhà + cudromach a bhios feumail dhut. + editor_html: '''S e prògram no làrach-lìn a tha ann an deasaiche + as urrainn dhut cleachdadh gus am mapa a dheasachadh.' + node_html: '''S e puing air a'' mhapa a tha ann an nòd, can + taigh-bìdh no craobh.' + way_html: '''S e loidhne no raon a tha ann an slighe, can + rathad, loch no togalach.' + tag_html: '''S e beagan dàta mu nòd no slighe a tha ann an taga, + can ainm taighe-bhìdh no crìoch astair rathaid.' + rules: + title: Riaghailtean! + questions: + title: A bheil ceist sam bith agad? + paragraph_1_html: |- + Tha iomadh goireas aig OpenStreetMap gus faighinn a-mach mun phròiseact, ceistean a chur 's a fhreagairt agus deasbad a dhèanamh is cuspairean mun mhapa a chlàradh còmhla. + Faigh cobhair an-seo. + start_mapping: Tòisich air an obair-mhapa + add_a_note: + title: Nach eil ùine agad airson deasachadh? Cuir nòta ris! + paragraph_1_html: Ma thogras tu rud beag a chàradh ach chan eil ùine agad + gus clàradh agus ionnsachadh mar a nì thu deasachadh, tha e furasta nòta + a chur ris. + paragraph_2_html: |- + Cha leig thu leas ach tadhal air a' mhapa 's briogadh air ìomhaigheag an nòta: + . Cuiridh seo comharra ris a' mhapa as urrainn dhut gluasad 's tu 'ga shlaodadh. Cuir an teachdaireachd agad ris agus briog air "Sàbhail" an uairsin gus an dèan luchd-mapachaidh eile sgrùdadh air. trace: visibility: private: Prìobhaideach (cha dèid a cho-roinneadh ach 'na phuingean gun urra @@ -1682,7 +1682,7 @@ gd: chom-pàirtiche a shealltainn. Cha leig thu leas aontachadh riutha, ach feumaidh tu an leughadh. oauth: - oauthorize: + authorize: title: Ceadaich inntrigeadh dhan chunntas agad request_access: Dh'iarr aplacaid %{app_name} inntrigeadh dhan chunntas agad, %{user}. Thoir sùil a bheil thu airson 's gum bi na comasan a leanas air an @@ -1698,11 +1698,11 @@ gd: allow_write_gpx: lorgaidhean GPS a luchdadh suas. allow_write_notes: nòtaichean atharrachadh. grant_access: Thoir inntrigeadh - oauthorize_success: + authorize_success: title: Chaidh gabhail ri iarrtas a' chead allowed: Thug thu cead dha dh'aplacaid %{app_name} an cunntas agad inntrigeadh. verification: '''S e %{code} a tha sa chòd dearbhaidh.' - oauthorize_failure: + authorize_failure: title: Chaidh iarrtas a' chead a dhiùltadh denied: Dhiùlt thu gun inntrigeadh aplacaid %{app_name} an cunntas agad. invalid: Chan eil tòcan a' chead dligheach. @@ -2152,7 +2152,7 @@ gd: fail: Cha b' urrainn dhuinn an dreuchd "%{role}" a thoirt air falbh on chleachdaiche "%{name}". Dearbhaich gu bheil an dà chuid an cleachdaiche agus an dreuchd dligheach. - user_block: + user_blocks: model: non_moderator_update: Feumaidh tu bhith 'nad mhaoir mus urrainn dhut bacadh a chruthachadh no ùrachadh. @@ -2223,20 +2223,6 @@ gd: flash: Chaidh am bacadh seo a chùl-ghairm. period: other: '%{count} uair a thìde' - partial: - show: Seall - edit: Deasaich - revoke: Cùl-ghairm! - confirm: A bheil thu cinnteach? - display_name: Cleachdaiche bacte - creator_name: Cruthadair - reason: Adhbhar a' bhacaidh - status: Staid - revoker_name: Air a chùl-ghairm le - not_revoked: (cha deach a chùl-ghairm) - showing_page: Duilleag %{page} - next: Air adhart » - previous: « Air ais helper: time_future: Falbhaidh an ùine air an ceann %{time}. until_login: Gnìomhach gus an clàraich an cleachdaiche a-steach. @@ -2264,8 +2250,22 @@ gd: revoker: 'Cùl-ghairm le:' needs_view: Feumaidh an cleachdaiche clàradh a-steach mus dèid am bacadh seo a thoirt air falamh. - note: - description: + block: + not_revoked: (cha deach a chùl-ghairm) + show: Seall + edit: Deasaich + revoke: Cùl-ghairm! + blocks: + display_name: Cleachdaiche bacte + creator_name: Cruthadair + reason: Adhbhar a' bhacaidh + status: Staid + revoker_name: Air a chùl-ghairm le + showing_page: Duilleag %{page} + next: Air adhart » + previous: « Air ais + notes: + comment: opened_at_html: Air a chruthachadh o chionn %{when} opened_at_by_html: Air a chruthachadh o chionn %{when} le %{user} commented_at_html: Air ùrachadh o chionn %{when} @@ -2403,7 +2403,7 @@ gd: nothing_found: Cha deach feart a lorg error: 'Mearachd a'' conaltradh le %{server}: %{error}' timeout: Dh'fhalbh an ùine air a' chonaltradh le %{server} - redaction: + redactions: edit: description: Tuairisgeul heading: Deasaich an t-ath-sgrùdadh diff --git a/config/locales/gl.yml b/config/locales/gl.yml index cd274653b..849cd115a 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -6,6 +6,7 @@ # Author: Elisardojm # Author: Gallaecio # Author: Macofe +# Author: Navhy # Author: Nemo bis # Author: Toliño # Author: Vivaelcelta @@ -76,9 +77,9 @@ gl: body: Corpo recipient: Destinatario user: - email: Correo electrónico + email: Enderezo electrónico active: Activo - display_name: Nome mostrado + display_name: Nome amosado description: Descrición languages: Linguas pass_crypt: Contrasinal @@ -89,7 +90,7 @@ gl: description: Potlatch 1 (editor integrado no navegador) id: name: iD - description: iD (editor no navegador) + description: iD (editor integrado no navegador) potlatch2: name: Potlatch 2 description: Potlatch 2 (editor integrado no navegador) @@ -177,7 +178,7 @@ gl: note: nota redacted: redaction: Redacción %{id} - message_html: A versión %{version} deste %{type} non se pode mostrar tal como + message_html: A versión %{version} deste %{type} non se pode amosar tal como foi redactada. Consulte %{redaction_link} para obter máis detalles. type: node: nodo @@ -252,7 +253,7 @@ gl: sorry: Sentímolo, a lista do conxunto de cambios solicitada tardou demasiado tempo en ser recuperada. rss: - title_all: Discusión do conxunto de cambios de OpenStreetMap + title_all: Discusión do conxunto de cambios no OpenStreetMap title_particular: 'Conversa do conxunto de cambios #%{changeset_id} de OpenStreetMap' comment: 'Comentario novo sobre o conxunto de cambios #%{changeset_id} de %{author}' commented_at_html: Actualizado hai %{when} @@ -290,7 +291,7 @@ gl: user_title: Diario de %{user} leave_a_comment: Deixar un comentario login_to_leave_a_comment: '%{login_link} para deixar un comentario' - login: Acceda ao sistema + login: Iniciar sesión save_button: Gardar no_such_entry: title: Non hai tal entrada de diario @@ -299,7 +300,7 @@ gl: a ortografía ou que a ligazón que seguiu estea ben. diary_entry: posted_by: Publicado por %{link_user} o %{created} en %{language_link} - comment_link: Comentar esta entrada + comment_link: Comentar nesta entrada reply_link: Responder a esta entrada comment_count: one: '%{count} comentario' @@ -336,64 +337,17 @@ gl: ago: hai %{ago} newer_comments: Comentarios máis recentes older_comments: Comentarios máis vellos - export: - title: Exportar - start: - area_to_export: Zona a exportar - manually_select: Seleccionar manualmente outra zona - format_to_export: Formato de exportación - osm_xml_data: Datos XML do OpenStreetMap - map_image: Imaxe de mapa (mostra unha capa normal) - embeddable_html: HTML incorporable - licence: Licenza - export_details: Os datos do OpenStreetMap están licenciados baixo a licenza - Open Data Commons Open Database License (ODbL). - too_large: - advice: 'Se a exportación anterior falla, considere utilizar unha das fontes - listadas a continuación:' - body: 'Esta zona é grande de máis para ser exportada como datos XML do OpenStreetMap. - Amplíe a zona ou escolla unha menor, ou utilice unha das seguintes fontes - para as descargas masivas de datos:' - planet: - title: Planeta OSM - description: Copias actualizadas regularmente da base de datos do OpenStreetMap - ao completo - overpass: - title: Pasarela da API - description: Descargar esta caixa desde un espello da base de datos do OpenStreetMap - geofabrik: - title: Descargas Geofabrik - description: Extraccións actualizadas regularmente dalgúns continentes, - países e cidades seleccionados - metro: - title: Extraccións Metro - description: Extraccións das maiores cidades do mundo e as súas zonas próximas - other: - title: Outras fontes - description: Fontes adicionais listadas no wiki do OpenStreetMap - options: Opcións - format: Formato - scale: Escala - max: máx. - image_size: Tamaño da imaxe - zoom: Zoom - add_marker: Engadir un marcador ao mapa - latitude: 'Lat:' - longitude: 'Lon:' - output: Saída - paste_html: Pegue o código HTML para incluílo na páxina web - export_button: Exportar geocoder: search: title: latlon: Resultados internos - ca_postcode: Resultados desde Geocoder.CA - osm_nominatim: Resultados desde OpenStreetMap + ca_postcode: Resultados dende Geocoder.CA + osm_nominatim: Resultados dende OpenStreetMap Nominatim - geonames: Resultados desde GeoNames - osm_nominatim_reverse: Resultados desde OpenStreetMap + geonames: Resultados dende GeoNames + osm_nominatim_reverse: Resultados dende OpenStreetMap Nominatim - geonames_reverse: Resultados desde GeoNames + geonames_reverse: Resultados dende GeoNames search_osm_nominatim: prefix: aerialway: @@ -412,12 +366,13 @@ gl: gate: Porta hangar: Hangar helipad: Heliporto + holding_position: Posición de espera parking_position: Posición de estacionamento runway: Pista taxiway: Vía de circulación do aeroporto terminal: Terminal amenity: - animal_shelter: Refuxio de animais + animal_shelter: Abeiro de animais arts_centre: Centro artístico atm: Caixeiro automático bank: Banco @@ -440,7 +395,7 @@ gl: childcare: Gardería cinema: Cine clinic: Clínica - clock: Reloxio + clock: Reloxo college: Instituto community_centre: Centro comunitario courthouse: Xulgado @@ -458,6 +413,7 @@ gl: fuel: Combustible gambling: Xogos de azar grave_yard: Cemiterio + grit_bin: Caixa de xemas hospital: Hospital hunting_stand: Lugar de caza ice_cream: Xeadaría @@ -465,13 +421,13 @@ gl: library: Biblioteca marketplace: Praza de mercado monastery: Mosteiro - motorcycle_parking: Estacionamento para motocicletas + motorcycle_parking: Aparcadoiro para motocicletas nightclub: Club nocturno nursing_home: Residencia para a terceira idade office: Oficina parking: Aparcadoiro - parking_entrance: Entrada de estacionamento - parking_space: Aparcadoiro + parking_entrance: Entrada de aparcadoiro + parking_space: Espazo para aparcadoiro pharmacy: Farmacia place_of_worship: Lugar de culto police: Policía @@ -514,6 +470,7 @@ gl: protected_area: Zona protexida bridge: aqueduct: Acueduto + boardwalk: Pasarela suspension: Ponte colgante swing: Ponte xiratoria viaduct: Viaduto @@ -533,7 +490,7 @@ gl: "yes": Tenda de artesanía emergency: ambulance_station: Base de ambulancias - assembly_point: Punto de reunión + assembly_point: Punto de reagrupamento defibrillator: Desfibrilador landing_site: Lugar de aterrizaxe de emerxencia phone: Teléfono de emerxencia @@ -555,8 +512,9 @@ gl: living_street: Rúa residencial milestone: Miliario motorway: Autoestrada - motorway_junction: Cruzamento de autovías + motorway_junction: Cruzamento de autoestradas motorway_link: Enlace de autoestrada + passing_place: Lugar de paso path: Camiño pedestrian: Camiño peonil platform: Plataforma @@ -573,7 +531,7 @@ gl: services: Área de servizo speed_camera: Radar steps: Chanzos - stop: Sinal de alto + stop: Sinal de stop street_lamp: Luminaria tertiary: Estrada terciaria tertiary_link: Estrada terciaria @@ -582,6 +540,7 @@ gl: trail: Pista trunk: Estrada nacional trunk_link: Estrada nacional + turning_loop: Círculo de xiro unclassified: Estrada sen clasificar "yes": Estrada historic: @@ -608,7 +567,7 @@ gl: stone: Pedra tomb: Sepulcro tower: Torre - wayside_cross: Cruce de camiños + wayside_cross: Cruceiro wayside_shrine: Santuario no camiño wreck: Pecio "yes": Sitio histórico @@ -651,6 +610,7 @@ gl: bird_hide: Observatorio de aves common: Terreo común dog_park: Parque canino + firepit: Fogueira fishing: Área de pesca fitness_centre: Ximnasio (fitness) fitness_station: Ximnasio @@ -675,24 +635,38 @@ gl: water_park: Parque acuático "yes": Ocio man_made: + adit: Galería de acceso + beacon: Baliza beehive: Colmea + breakwater: Crebaondas bridge: Ponte bunker_silo: Búnker chimney: Cheminea crane: Guindastre + dolphin: Poste de amarradura dyke: Dique + embankment: Terraplén + flagpole: Mastro + gasometer: Gasómetro + groyne: Dique + kiln: Forno lighthouse: Faro + mast: Mastro mine: Mina mineshaft: Pozo mineiro + monitoring_station: Estación de monitorización petroleum_well: Pozo petrolífero + pier: Peirao pipeline: Tubaxe silo: Silo + storage_tank: Tanque de almacenaxe surveillance: Vixilancia tower: Torre wastewater_plant: Planta de tratamento de augas watermill: Muíño hidráulico water_tower: Torre de auga water_well: Pozo + water_works: Planta de tratamento de augas windmill: Muíño de vento works: Fábrica "yes": Artificial @@ -753,6 +727,7 @@ gl: estate_agent: Axencia inmobiliaria government: Oficina gobernamental insurance: Oficina de seguros + it: Oficina informática lawyer: Avogado ngo: Oficina dunha ONG telecommunication: Oficina de telecomunicacións @@ -761,6 +736,7 @@ gl: place: allotments: Hortas city: Cidade + city_block: Quinteiro country: País county: Condado farm: Granxa @@ -774,6 +750,7 @@ gl: municipality: Municipio neighbourhood: Veciñanza postcode: Código postal + quarter: Trimestre region: Rexión sea: Mar square: Praza @@ -815,6 +792,7 @@ gl: beauty: Tenda de produtos de beleza beverages: Tenda de bebidas bicycle: Tenda de bicicletas + bookmaker: Casa de apostas books: Libraría boutique: Boutique butcher: Carnizaría @@ -831,7 +809,7 @@ gl: copyshop: Tenda de fotocopias cosmetics: Tenda de cosméticos deli: Tenda de delicias - department_store: Gran almacén + department_store: Grandes almacéns discount: Tenda de descontos doityourself: Tenda de bricolaxe dry_cleaning: Limpeza en seco @@ -853,8 +831,11 @@ gl: hairdresser: Perrucaría hardware: Ferraxaría hifi: Hi-Fi + houseware: Tenda de artigos para casa + interior_decoration: Decoración de interiores jewelry: Xoiaría kiosk: Quiosco + kitchen: Tenda de cociñas laundry: Lavandaría lottery: Lotaría mall: Centro comercial @@ -867,18 +848,25 @@ gl: optician: Oftalmólogo organic: Tenda de alimentos orgánicos outdoor: Tenda de deportes ao aire libre + paint: Tenda de pintura + pawnbroker: Prestamista pet: Tenda de mascotas pharmacy: Farmacia photo: Tenda de fotografía + seafood: Marisco second_hand: Tenda de segunda man shoes: Zapataría sports: Tenda de deportes stationery: Papelaría supermarket: Supermercado tailor: Xastraría + ticket: Tenda de billetes tobacco: Estanco toys: Xoguetaría travel_agency: Axencia de viaxes + tyres: Tenda de rodas + vacant: Tenda vacante + variety_store: Tenda de variedades video: Tenda de vídeos wine: Tenda de viño "yes": Tenda @@ -904,6 +892,7 @@ gl: viewpoint: Miradoiro zoo: Zoolóxico tunnel: + building_passage: Pasaxe do edificio culvert: Sumidoiro "yes": Túnel waterway: @@ -947,13 +936,13 @@ gl: more_results: Máis resultados layouts: logo: - alt_text: Logo do OpenStreetMap + alt_text: Logotipo do OpenStreetMap home: Ir á localización inicial logout: Saír - log_in: Rexistro + log_in: Iniciar sesión log_in_tooltip: Acceder ao sistema cunha conta existente sign_up: Rexistrarse - start_mapping: Comezar a cartografiar + start_mapping: Comezar a cartografar sign_up_tooltip: Crear unha conta para editar edit: Editar history: Historial @@ -966,7 +955,7 @@ gl: user_diaries_tooltip: Ollar os diarios do usuario edit_with: Editar con %{editor} tag_line: O mapa mundial libre - intro_header: Dámoslle a benvida ao OpenStreetMap! + intro_header: Dámoslle a benvida ó OpenStreetMap! intro_text: O OpenStreetMap é un mapa do mundo, creado por xente coma vostede e de libre uso baixo unha licenza aberta. intro_2_create_account: Cree unha conta de usuario @@ -994,282 +983,6 @@ gl: text: Facer unha doazón learn_more: Máis información more: Máis - license_page: - foreign: - title: Acerca desta tradución - text: En caso de conflito entre esta páxina traducida e %{english_original_link}, - a páxina en inglés prevalecerá - english_link: a orixinal en inglés - native: - title: Acerca desta páxina - text: Estás vendo a versión en inglés da páxina de dereitos de autor. Pode volver - á %{native_link} desta páxina ou pode deixar de ler sobre os dereitos de autor - e %{mapping_link}. - native_link: versión en galego - mapping_link: comezar a contribuír - legal_babble: - title_html: Dereitos de autoría e licenza - intro_1_html: "O OpenStreetMap ® - está dispoñible baixo datos abertos e atópase baixo a Open - Data\nCommons Open Database License (ODbL) da Fundación - OpenStreetMap (OSMF)." - intro_2_html: |- - Vostede é libre de copiar, distribuír, transmitir e adaptar os nosos datos, - na medida en que acredite o OpenStreetMap e mais os seus - colaboradores. Se altera ou constrúe a partir dos nosos datos, terá - que distribuír o resultado baixo a mesma licenza. O - texto - legal ao completo explica os seus dereitos e responsabilidades. - intro_3_html: |- - Os datos cartográficos dos cuadrantes dos nosos mapas e a nosa documentación - atópanse baixo a licenza Creative - Commons recoñecemento compartir igual 2.0 (CC BY-SA). - credit_title_html: Como acreditar o OpenStreetMap - credit_1_html: |- - Pedímoslle que acredite o traballo así: “© dos colaboradores do - OpenStreetMap”. - credit_2_html: "Cómpre tamén deixar claro que os datos están dispoñibles baixo - a Open \nDatabase License e, se utiliza os cuadrantes dos nosos mapas, que - os datos cartográficos\nestán baixo a licenza CC-BY-SA. Pode facelo ligando - con\nesta páxina.\nComo - alternativa, e obrigatoriamente se está distribuíndo o OSM nun\nformulario - de datos, pode nomear e ligar directamente cara á(s) licenza(s). Naqueles - medios\nnos que non sexa posible incluír as ligazóns (por exemplo, nas obras - impresas), suxerimos\nque dirixa aos lectores a openstreetmap.org (quizais - poñendo o texto\n\"OpenStreetMap\" no enderezo completo), a opendatacommons.org - e,\nse fose relevante, a creativecommons.org." - credit_3_html: |- - Nun mapa electrónico explorable, o crédito debe aparecer na beira do mapa. - Por exemplo: - attribution_example: - alt: Exemplo de como recoñecer o OpenStreetMap nunha páxina web - title: Exemplo de recoñecemento - more_title_html: Máis información - more_1_html: |- - Descubra máis sobre como empregar os nosos datos e como acreditarnos na páxina de licenza de OSMF. - more_2_html: |- - Malia que o OpenStreetMap é de datos abertos, non podemos proporcionar un - mapa API gratuíto aos desenvolvedores. - Vexa a política de uso da API, - a política de uso de cuadrantes - e a política de uso do Nominatim. - contributors_title_html: Os nosos colaboradores - contributors_intro_html: |- - Os nosos colaboradores son miles de persoas. Tamén incluímos - datos baixo licenzas abertas de axencias nacionais de cartografía - e outras fontes, entre elas: - contributors_at_html: |- - Austria: Contén datos de - Stadt Wien (baixo a licenza - CC BY), - Land Vorarlberg e - Land Tirol (baixo a licenza CC-BY AT con emendas). - contributors_ca_html: |- - Canadá: Contén datos de - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada) e StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: |- - Finlandia: Contén datos da - National Land Survey of Finland's Topographic Database - e outros conxuntos de datos, baixo a - licenza NLSFI. - contributors_fr_html: |- - Francia: Contén datos con orixe na - Direction Générale des Impôts. - contributors_nl_html: |- - Países Baixos: Contén datos de © AND, 2007 - (www.and.com) - contributors_nz_html: |- - Nova Zelandia: Contén datos con orixe no - Land Information New Zealand. Dereitos de autor da coroa. - contributors_si_html: |- - Eslovenia: Contén datos da - Autoridade de Planificación e de Cartografía e do - Ministerio de Agricultura, Bosques e Alimentación - (información pública de Eslovenia). - contributors_za_html: |- - Sudáfrica: Contén datos con orixe no - Chief Directorate: - National Geo-Spatial Information, dereitos de autor do estado reservados. - contributors_gb_html: |- - Reino Unido: Contén datos da Ordnance - Survey © Dereitos de autor da coroa e dereito da base de datos - 2010-12. - contributors_footer_1_html: |- - Para obter máis información sobre estas e outras fontes usadas - para axudar na mellora do OpenStreetMap, bote unha ollada á páxina dos - colaboradores no wiki do OpenStreetMap. - contributors_footer_2_html: |- - A inclusión de datos no OpenStreetMap non implica que o que - orixinalmente proporcionou os datos apoie o OpenStreetMap, - dea calquera garantía ou acepte calquera responsabilidade. - infringement_title_html: Violación dos dereitos de autoría - infringement_1_html: |- - Lembramos aos colaboradores do OSM que nunca engadan datos de - fontes con dereitos de autor (por exemplo, o Google Maps ou mapas impresos) sen - o permiso explícito dos posuidores deses dereitos. - infringement_2_html: |- - Se pensa que se engadiu material protexido de xeito inapropiado - á base de datos do OpenStreetMap ou a este sitio, consulte - o noso procedemento - para retirar datos ou deixe unha notificación no noso - formulario en liña. - trademarks_title_html: Marcas rexistadas - trademarks_1_html: OpenStreetMap, o logotipo coa lupa e ''State of the Map'' - son marcas rexistadas da Fundación OpenStreetMap. Se ten algunha pregunta - sobre a utilización das marcas, por favor consulte a nosa Política - de Licenzas. - welcome_page: - title: Reciba a nosa benvida! - introduction_html: Dámoslle a benvida ao OpenStreetMap, o mapa do mundo libre - e editable. Agora que está rexistrado, xa pode empezar a cartografiar. Velaquí - hai unha guía rápida das cousas máis importantes que necesita saber. - whats_on_the_map: - title: Que hai no mapa - on_html: O OpenStreetMap é un lugar para cartografiar cousas que son reais - e actuais, entre as que se atopan millóns de edificios, estradas e outros - detalles sobre os lugares. Pode cartografiar calquera característica do mundo - real na que teña interese. - off_html: O que non inclúe son datos subxectivos como valoracións, - características históricas ou hipotéticas e datos de fontes protexidas por - dereitos de autoría. A menos que teña permisos especiais, non copie de mapas - en liña ou en papel. - basic_terms: - title: Vocabulario básico para cartografiar - paragraph_1_html: O OpenStreetMap ten unha xerga propia. Velaquí hai unhas palabras - clave que son de utilidade. - editor_html: Un editor é un programa ou sitio web que pode - usar para editar o mapa. - node_html: Un nodo é un punto no mapa, como un restaurante - ou unha árbore. - way_html: Un camiño é unha liña ou área, como unha estrada, - un arroio, un lago ou un edificio. - tag_html: Unha etiqueta é unha peza de datos sobre un nodo - ou un camiño, como o nome dun restaurante ou o límite de velocidade dunha - estrada. - rules: - title: Regras! - paragraph_1_html: OpenStreetMap ten poucas regras formais, pero esperamos que - todos os participantes colaboraren e se comuniquen coa comunidade. Se está - considerando algunha actividade que non sexa a edición manual, lea e siga - as instrucións sobre org/wiki/Import/Guidelines'>importacións - e edicións - automatizadas. - questions: - title: Ten algunha pregunta? - paragraph_1_html: |- - O OpenStreetMap ten varios recursos para aprender sobre o proxecto, para formular e responder - preguntas, así como para debater e documentar colaborativamente sobre temas de cartografía. - Obteña axuda aquí. - start_mapping: Comezar a cartografiar - add_a_note: - title: Non ten tempo para editar? Engada unha nota! - paragraph_1_html: Se soamente quere corrixir unha pequena cousa e non ten tempo - de rexistrarse e aprender a editar, engadir unha nota é moi sinxelo. - paragraph_2_html: 'Vaia ao mapa e prema na icona - de notas: . Isto ha engadir un marcador ao - mapa, que pode desplazar arrastrándoo. Engada a súa mensaxe, logo prema no - botón de gardar e os outros colaboradores han comprobalo.' - fixthemap: - title: Informar dun problema/Corrixir o mapa - how_to_help: - title: Como axudar - join_the_community: - title: Únase á comunidade - explanation_html: |- - Se atopa algún problema cos datos dos nosos mapas (por exemplo, se falta algunha estrada), o mellor é - unirse á comunidade do OpenStreetMap e engadir ou corrixir os datos directamente. - add_a_note: - instructions_html: |- - Simplemente, prema en ou na mesma icona na visualización do mapa. - Isto ha engadir un marcador ao mapa que pode mover - arrastrándoo. Engada a súa mensaxe, prema en "Gardar" e outras persoas investigarán iso. - other_concerns: - title: Outras preocupacións - explanation_html: |- - Se lle preocupa como se usan os nosos datos ou lle preocupan os contidos, consulte a - páxina de dereitos de autoría para obter máis información legal ou póñase en contacto cun dos - grupos de traballo da Fundación OSM. - help_page: - title: Obter axuda - introduction: |- - O OpenStreetMap ten varios recursos para aprender sobre o proxecto, para formular e responder preguntas, - así como para debater e documentar colaborativamente sobre temas de cartografía. - welcome: - url: /welcome - title: Dámoslle a benvida ao OSM - description: Comece con esta guía rápida cos principios básicos do OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: Guía do principiante - description: Guía para principiantes, mantida pola comunidade. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Formule unha pregunta ou busque respostas no sitio de preguntas - e respostas do OSM. - mailing_lists: - title: Listas de correo - description: Pregunta ou conversa sobre temas interesantes nun amplo abano de - listas de correo temáticas ou rexionais. - forums: - title: Foros - description: Preguntas e conversas para os que prefiren unha interface do estilo - carteleira de anuncios. - irc: - title: IRC - description: Chat interactivo en moitos idiomas diferentes e sobre moitos temas. - switch2osm: - title: Migra a OSM - description: Axuda para as empresas e organizacións que migran a mapas e a outros - servizos baseados en OpenStreetMap. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: No wiki atopará documentación detallada do OSM. - about_page: - next: Seguinte - copyright_html: ©Colaboradores do
        OpenStreetMap - used_by: '%{name} fornece datos xeográficos a miles de sitios web, aplicacións - para móbiles e dispositivos físicos' - lede_text: |- - O OpenStreetMap é obra dunha comunidade de xente que achega e mantén datos - de todo o mundo sobre camiños, vías, cafetarías, estacións e moitas máis cousas. - local_knowledge_title: Coñecemento local - local_knowledge_html: |- - O OpenStreetMap fai fincapé nos coñecementos locais. Os colaboradores axúdanse - de imaxes aéreas, dispositivos GPS e mapas de campo rudimentarios para asegurarse de que os datos do OSM - son correctos e están actualizados. - community_driven_title: Dirixido pola comunidade - community_driven_html: |- - A comunidade do OpenStreetMap é diversa, apaixonada e cada día máis persoas se unen a ela. - Entre os nosos colaboradores hai cartógrafos entusiastas, profesionais dos sistemas de información xeográfica, enxeñeiros - que se ocupan de manter os servidores do OSM, colaboradores de proxectos humanitarios que achegan datos sobre zonas afectadas por desastres, - e moitas outras persoas. - Para obter máis información sobre a comunidade, consulte o - blogue do OpenStreetMap, - diarios de usuarios, - blogues da comunidade, e - o sitio web da Fundación OSM. - open_data_title: Datos libres - open_data_html: |- - Os datos do OpenStreetMap son datos libres; pode usalos libremente e para calquera finalidade - sempre que recoñeza ao OpenStreetMap e mailos seus colaboradores como os autores dos datos. Se modifica os datos - ou os utiliza dalgún xeito para outros fins, pode distribuír o resultado sempre e cando o faga empregando a mesma licenza. Atopará información máis detallada na páxina de dereitos de autoría e licenza. - legal_title: Legal - legal_html: "Este sitio e moitos outros servizos relacionados están formalmente - operados pola \nFundación OpenStreetMap - (OSMF) \nen nome da comunidade. O uso de tódolos servizos operados pola OSMF - está suxeito \nás nosas \nPolíticas - de Uso Aceptable e á nosa Política - de Privacidade\n
        \nPor favor, contacta - coa OSMF se tes algunha pregunta ou problema de licenza, dereitos de autoría - ou calquera outra cuestión legal." - partners_title: Socios notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} comentou nunha entrada de diario' @@ -1297,7 +1010,7 @@ gl: and_no_tags: e sen etiquetas. failure: subject: '[OpenStreetMap] Importación GPX errónea' - failed_to_import: 'erro ao importar. Aquí está o erro:' + failed_to_import: 'erro ao importar. Velaquí atópase o erro:' more_info_1: Máis información sobre os erros de importación GPX e como evitalos more_info_2: 'pódense atopar en:' success: @@ -1400,7 +1113,7 @@ gl: date: Data no_messages_yet: Aínda non ten ningunha mensaxe. Por que non se pon en contacto con algunhas das %{people_mapping_nearby_link}? - people_mapping_nearby: persoas próximas a vostede + people_mapping_nearby: persoas preto de vostede message_summary: unread_button: Marcar como non lido read_button: Marcar como lido @@ -1458,6 +1171,176 @@ gl: delete: deleted: Mensaxe borrada site: + about: + next: Seguinte + copyright_html: ©Colaboradores do
        OpenStreetMap + used_by: '%{name} fornece datos xeográficos a miles de sitios web, aplicacións + para móbiles e dispositivos físicos' + lede_text: |- + O OpenStreetMap é obra dunha comunidade de xente que achega e mantén datos + de todo o mundo sobre camiños, vías, cafetarías, estacións e moitas máis cousas. + local_knowledge_title: Coñecemento local + local_knowledge_html: |- + O OpenStreetMap fai fincapé nos coñecementos locais. Os colaboradores axúdanse + de imaxes aéreas, dispositivos GPS e mapas de campo rudimentarios para asegurarse de que os datos do OSM + son correctos e están actualizados. + community_driven_title: Dirixido pola comunidade + community_driven_html: |- + A comunidade do OpenStreetMap é diversa, apaixonada e cada día máis persoas se unen a ela. + Entre os nosos colaboradores hai cartógrafos entusiastas, profesionais dos sistemas de información xeográfica, enxeñeiros + que se ocupan de manter os servidores do OSM, colaboradores de proxectos humanitarios que achegan datos sobre zonas afectadas por desastres, + e moitas outras persoas. + Para obter máis información sobre a comunidade, consulte o + blogue do OpenStreetMap, + diarios de usuarios, + blogues da comunidade, e + o sitio web da Fundación OSM. + open_data_title: Datos libres + open_data_html: |- + Os datos do OpenStreetMap son datos libres; pode usalos libremente e para calquera finalidade + sempre que recoñeza ao OpenStreetMap e mailos seus colaboradores como os autores dos datos. Se modifica os datos + ou os utiliza dalgún xeito para outros fins, pode distribuír o resultado sempre e cando o faga empregando a mesma licenza. Atopará información máis detallada na páxina de dereitos de autoría e licenza. + legal_title: Legal + legal_html: "Este sitio e outros servizos relacionados son formalmente xestionados + pola \nFundación OpenStreetMap (OSMF) + \nen nome da comunidade. A utilización de tódolos servizos operados pola OSMF + atópase suxeita\nás nosas normas de Políticas + de Uso Aceptable e de Privacidade\n
        + \nPor favor contacte coa OSMF + \nse ten cuestións relacionadas coas licenzas, dereitos de autor, cuestións + legais ou problemas.\n
        \nOpenStreetMap, o logotipo da lupa e o State of + the Map son marcas + comerciais rexistadas da OSMF." + partners_title: Socios + copyright: + foreign: + title: Acerca desta tradución + text: En caso de conflito entre esta páxina traducida e %{english_original_link}, + a páxina en inglés prevalecerá + english_link: a orixinal en inglés + native: + title: Acerca desta páxina + text: Estás vendo a versión en inglés da páxina de dereitos de autor. Pode + volver á %{native_link} desta páxina ou pode deixar de ler sobre os dereitos + de autor e %{mapping_link}. + native_link: versión en galego + mapping_link: comezar a contribuír + legal_babble: + title_html: Dereitos de autoría e licenza + intro_1_html: "O OpenStreetMap ® + está dispoñible baixo datos abertos e atópase baixo a Open + Data\nCommons Open Database License (ODbL) da Fundación + OpenStreetMap (OSMF)." + intro_2_html: |- + Vostede é libre de copiar, distribuír, transmitir e adaptar os nosos datos, + na medida en que acredite o OpenStreetMap e mais os seus + colaboradores. Se altera ou constrúe a partir dos nosos datos, terá + que distribuír o resultado baixo a mesma licenza. O + texto + legal ao completo explica os seus dereitos e responsabilidades. + intro_3_html: |- + Os datos cartográficos dos cuadrantes dos nosos mapas e a nosa documentación + atópanse baixo a licenza Creative + Commons recoñecemento compartir igual 2.0 (CC BY-SA). + credit_title_html: Como acreditar o OpenStreetMap + credit_1_html: |- + Pedímoslle que acredite o traballo así: “© dos colaboradores do + OpenStreetMap”. + credit_2_html: "Cómpre tamén deixar claro que os datos están dispoñibles baixo + a Open \nDatabase License e, se utiliza os cuadrantes dos nosos mapas, que + os datos cartográficos\nestán baixo a licenza CC-BY-SA. Pode facelo ligando + con\nesta páxina.\nComo + alternativa, e obrigatoriamente se está distribuíndo o OSM nun\nformulario + de datos, pode nomear e ligar directamente cara á(s) licenza(s). Naqueles + medios\nnos que non sexa posible incluír as ligazóns (por exemplo, nas obras + impresas), suxerimos\nque dirixa aos lectores a openstreetmap.org (quizais + poñendo o texto\n\"OpenStreetMap\" no enderezo completo), a opendatacommons.org + e,\nse fose relevante, a creativecommons.org." + credit_3_html: |- + Nun mapa electrónico explorable, o crédito debe aparecer na beira do mapa. + Por exemplo: + attribution_example: + alt: Exemplo de como recoñecer o OpenStreetMap nunha páxina web + title: Exemplo de recoñecemento + more_title_html: Máis información + more_1_html: |- + Descubra máis sobre como empregar os nosos datos e como acreditarnos na páxina de licenza de OSMF. + more_2_html: |- + Malia que o OpenStreetMap é de datos abertos, non podemos proporcionar un + mapa API gratuíto aos desenvolvedores. + Vexa a política de uso da API, + a política de uso de cuadrantes + e a política de uso do Nominatim. + contributors_title_html: Os nosos colaboradores + contributors_intro_html: |- + Os nosos colaboradores son miles de persoas. Tamén incluímos + datos baixo licenzas abertas de axencias nacionais de cartografía + e outras fontes, entre elas: + contributors_at_html: |- + Austria: Contén datos de + Stadt Wien (baixo a licenza + CC BY), + Land Vorarlberg e + Land Tirol (baixo a licenza CC-BY AT con emendas). + contributors_ca_html: |- + Canadá: Contén datos de + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada) e StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: |- + Finlandia: Contén datos da + National Land Survey of Finland's Topographic Database + e outros conxuntos de datos, baixo a + licenza NLSFI. + contributors_fr_html: |- + Francia: Contén datos con orixe na + Direction Générale des Impôts. + contributors_nl_html: |- + Países Baixos: Contén datos de © AND, 2007 + (www.and.com) + contributors_nz_html: |- + Nova Zelandia: Contén datos con orixe no + Land Information New Zealand. Dereitos de autor da coroa. + contributors_si_html: |- + Eslovenia: Contén datos da + Autoridade de Planificación e de Cartografía e do + Ministerio de Agricultura, Bosques e Alimentación + (información pública de Eslovenia). + contributors_za_html: |- + Suráfrica: Contén datos con orixe no + Chief Directorate: + National Geo-Spatial Information, dereitos de autor do estado reservados. + contributors_gb_html: |- + Reino Unido: Contén datos da Ordnance + Survey © Dereitos de autor da coroa e dereito da base de datos + 2010-12. + contributors_footer_1_html: |- + Para obter máis información sobre estas e outras fontes usadas + para axudar na mellora do OpenStreetMap, bote unha ollada á páxina dos + colaboradores no wiki do OpenStreetMap. + contributors_footer_2_html: |- + A inclusión de datos no OpenStreetMap non implica que o que + orixinalmente proporcionou os datos apoie o OpenStreetMap, + dea calquera garantía ou acepte calquera responsabilidade. + infringement_title_html: Violación dos dereitos de autoría + infringement_1_html: |- + Lembramos aos colaboradores do OSM que nunca engadan datos de + fontes con dereitos de autor (por exemplo, o Google Maps ou mapas impresos) sen + o permiso explícito dos posuidores deses dereitos. + infringement_2_html: |- + Se pensa que se engadiu material protexido de xeito inapropiado + á base de datos do OpenStreetMap ou a este sitio, consulte + o noso procedemento + para retirar datos ou deixe unha notificación no noso + formulario en liña. + trademarks_title_html: Marcas rexistadas + trademarks_1_html: OpenStreetMap, o logotipo coa lupa e ''State of the Map'' + son marcas rexistadas da Fundación OpenStreetMap. Se ten algunha pregunta + sobre a utilización das marcas, por favor consulte a nosa Política + de Licenzas. index: js_1: Está a usar un navegador que non soporta o JavaScript ou teno desactivado. js_2: O OpenStreetMap emprega JavaScript para o seu mapa estático e dinámico. @@ -1475,10 +1358,10 @@ gl: as súas edicións como públicas desde a súa %{user_page}. user_page_link: páxina de usuario anon_edits_link_text: Descubra aquí o motivo. - flash_player_required: Necesita un reprodutor de Flash para usar o Potlatch, - o editor Flash do OpenStreetMap. Pode descargar - o reprodutor Flash desde Adobe.com. Hai dispoñibles outras - opcións para editar o OpenStreetMap. + flash_player_required: Precisa un reprodutor Flash para usar Potlatch, o editor + Flash de OpenStreetMap. Pode descargar + Flash do sitio Adobe.com. Tamén + están dispoñíbeis outras opcións para editar OpenStreetMap. potlatch_unsaved_changes: Ten cambios sen gardar. (Para gardar no Potlatch, ten que desmarcar o camiño actual ou o punto, se está a editar no modo en vivo, ou premer sobre o botón "Gardar".) @@ -1489,6 +1372,114 @@ gl: id_not_configured: iD non está configurado no_iframe_support: O seu navegador non soporta os iframes HTML, necesarios para esta característica. + export: + title: Exportar + area_to_export: Zona a exportar + manually_select: Seleccionar manualmente outra zona + format_to_export: Formato de exportación + osm_xml_data: Datos XML do OpenStreetMap + map_image: Imaxe do mapa (amosa unha capa normal) + embeddable_html: HTML embebíbel + licence: Licenza + export_details: Os datos do OpenStreetMap están licenciados baixo a licenza + Open Data Commons Open Database License (ODbL). + too_large: + advice: 'Se a exportación anterior falla, considere utilizar unha das fontes + listadas a continuación:' + body: 'Esta zona é grande de máis para ser exportada como datos XML do OpenStreetMap. + Amplíe a zona ou escolla unha menor, ou utilice unha das seguintes fontes + para as descargas masivas de datos:' + planet: + title: Planeta OSM + description: Copias actualizadas regularmente da base de datos do OpenStreetMap + ó completo + overpass: + title: Pasarela da API + description: Descargar esta caixa dende un espello da base de datos do OpenStreetMap + geofabrik: + title: Descargas de Geofabrik + description: Extraccións actualizadas regularmente dalgúns continentes, + países e cidades seleccionados + metro: + title: Extraccións do Metro + description: Extraccións das maiores cidades do mundo e as súas zonas próximas + other: + title: Outras fontes + description: Fontes adicionais listadas no wiki do OpenStreetMap + options: Opcións + format: Formato + scale: Escala + max: máx. + image_size: Tamaño da imaxe + zoom: Zoom + add_marker: Engadir un marcador ao mapa + latitude: 'Lat:' + longitude: 'Lon:' + output: Saída + paste_html: Pegue o código HTML para incluílo na páxina web + export_button: Exportar + fixthemap: + title: Informar dun problema/Corrixir o mapa + how_to_help: + title: Como axudar + join_the_community: + title: Únase á comunidade + explanation_html: |- + Se atopa algún problema cos datos dos nosos mapas (por exemplo, se falta algunha estrada), o mellor é + unirse á comunidade do OpenStreetMap e engadir ou corrixir os datos directamente. + add_a_note: + instructions_html: |- + Simplemente, prema en ou na mesma icona na visualización do mapa. + Isto ha engadir un marcador ao mapa que pode mover + arrastrándoo. Engada a súa mensaxe, prema en "Gardar" e outras persoas investigarán iso. + other_concerns: + title: Outras preocupacións + explanation_html: |- + Se lle preocupa como se usan os nosos datos ou lle preocupan os contidos, consulte a + páxina de dereitos de autoría para obter máis información legal ou póñase en contacto cun dos + grupos de traballo da Fundación OSM. + help: + title: Obter axuda + introduction: |- + O OpenStreetMap ten varios recursos para aprender sobre o proxecto, para formular e responder preguntas, + así como para debater e documentar colaborativamente sobre temas de cartografía. + welcome: + url: /welcome + title: Dámoslle a benvida ao OSM + description: Comece con esta guía rápida cos principios básicos do OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: Guía do principiante + description: Guía para principiantes, mantida pola comunidade. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Formule unha pregunta ou busque respostas no sitio de preguntas + e respostas do OSM. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Listas de correo + description: Pregunta ou conversa sobre temas interesantes nun amplo abano + de listas de correo temáticas ou rexionais. + forums: + url: http://forum.openstreetmap.org/ + title: Foros + description: Preguntas e conversas para os que prefiren unha interface do + estilo carteleira de anuncios. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Conversa interactiva en moitas linguaxes diferentes e sobre moitos + temas. + switch2osm: + url: https://switch2osm.org/ + title: Migra a OSM + description: Axuda para as empresas e organizacións que migran a mapas e a + outros servizos baseados en OpenStreetMap. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: No wiki atopará documentación detallada do OSM. sidebar: search_results: Resultados da procura close: Pechar @@ -1499,8 +1490,9 @@ gl: from: De to: A where_am_i: Onde está isto? - where_am_i_title: Describa a localización actual usando o motor de procuras + where_am_i_title: Describa a localización actual empregando o motor de procuras submit_text: Ir + reverse_directions_text: Inverter as direccións key: table: entry: @@ -1588,6 +1580,57 @@ gl: image: Imaxe alt: Texto alternativo url: URL + welcome: + title: Reciba a nosa benvida! + introduction_html: Dámoslle a benvida ao OpenStreetMap, o mapa do mundo libre + e editable. Agora que está rexistrado, xa pode empezar a cartografar. Velaquí + hai unha guía rápida das cousas máis importantes que necesita saber. + whats_on_the_map: + title: Que hai no mapa + on_html: O OpenStreetMap é un lugar para cartografar cousas que son reais + e actuais, entre as que se atopan millóns de edificios, estradas e + outros detalles sobre os lugares. Pode cartografar calquera característica + do mundo real na que teña interese. + off_html: O que non inclúe son datos subxectivos como valoracións, + características históricas ou hipotéticas e datos de fontes protexidas por + dereitos de autoría. A menos que teña permisos especiais, non copie de mapas + en liña ou en papel. + basic_terms: + title: Vocabulario básico para cartografar + paragraph_1_html: O OpenStreetMap ten unha xerga propia. Velaquí hai unhas + palabras clave que son de utilidade. + editor_html: Un editor é un programa ou sitio web que pode + usar para editar o mapa. + node_html: Un nodo é un punto no mapa, como un restaurante + ou unha árbore. + way_html: Un camiño é unha liña ou área, como unha estrada, + un arroio, un lago ou un edificio. + tag_html: Unha etiqueta é unha peza de datos sobre un nodo + ou un camiño, como o nome dun restaurante ou o límite de velocidade dunha + estrada. + rules: + title: Regras! + paragraph_1_html: OpenStreetMap ten poucas regras formais, pero esperamos + que todos os participantes colaboraren e se comuniquen coa comunidade. Se + está considerando algunha actividade que non sexa a edición manual, lea + e siga as instrucións sobre org/wiki/Import/Guidelines'>importacións + e edicións + automatizadas. + questions: + title: Ten algunha pregunta? + paragraph_1_html: |- + O OpenStreetMap ten varios recursos para aprender sobre o proxecto, para formular e responder + preguntas, así como para debater e documentar colaborativamente sobre temas de cartografía. + Obteña axuda aquí. + start_mapping: Comezar a cartografar + add_a_note: + title: Non ten tempo para editar? Engada unha nota! + paragraph_1_html: Se soamente quere corrixir unha pequena cousa e non ten + tempo de rexistrarse e aprender a editar, engadir unha nota é moi sinxelo. + paragraph_2_html: 'Vaia ao mapa e prema na icona + de notas: . Isto ha engadir un marcador + ao mapa, que pode desplazar arrastrándoo. Engada a súa mensaxe, logo prema + no botón de gardar e os outros colaboradores han comprobalo.' trace: visibility: private: Privado (só compartido como anónimo; puntos desordenados) @@ -1630,6 +1673,7 @@ gl: trace_header: upload_trace: Cargar unha pista see_all_traces: Ollar todas as pistas + see_my_traces: Ollar as miñas pistas traces_waiting: one: Ten %{count} pista á espera de ser cargada. Considere agardar a que remate antes de cargar máis para non bloquear a cola do resto de usuarios. @@ -1656,6 +1700,7 @@ gl: delete_track: Borrar esta pista trace_not_found: Non se atopou a pista! visibility: 'Visibilidade:' + confirm_delete: Eliminar esta pista? trace_paging_nav: showing_page: Páxina %{page} older: Pistas máis antigas @@ -1678,8 +1723,9 @@ gl: map: mapa list: public_traces: Pistas GPS públicas + my_traces: As miñas pistas GPS public_traces_from: Pistas GPS públicas de %{user} - description: Examinar as cargas recentes de pistas GPS + description: Explorar as pistas GPS cargadas recentemente tagged_with: ' etiquetadas con %{tags}' empty_html: Aínda non hai nada por aquí. Cargue unha nova pista ou obteña máis información sobre as pistas GPS na páxina @@ -1715,7 +1761,7 @@ gl: ao sistema para ollar os termos do colaborador. Non ten que aceptalos, pero debe coñecelos. oauth: - oauthorize: + authorize: title: Autorizar o acceso á súa conta request_access: A aplicación %{app_name} solicita acceso á súa conta, %{user}. Comprobe que desexa que a aplicación teña as seguintes capacidades. Pode elixir @@ -1729,11 +1775,11 @@ gl: allow_write_gpx: cargar pistas GPS. allow_write_notes: modificar as notas. grant_access: Permitir o acceso - oauthorize_success: + authorize_success: title: Aceptouse a solicitude de autorización allowed: Concedeulle acceso á súa conta á aplicación %{app_name}. verification: O código de verificación é %{code}. - oauthorize_failure: + authorize_failure: title: Fallou a solicitude de autorización denied: Denegoulle o acceso á súa conta á aplicación %{app_name}. invalid: O pase de autorización non é válido. @@ -1916,9 +1962,9 @@ gl: terms: title: Termos do colaborador heading: Termos do colaborador - read and accept: Por favor, le o acordo que aparece a continuación e prema sobre - o botón "Aceptar" para confirmar que está de acordo cos termos deste acordo - para as súas contribucións pasadas e futuras. + read and accept: Por favor, lea o acordo seguinte e prema no botón "Aceptar" + para confirmar que acepta os termos deste acordo para as súas contribucións + anteriores e futuras. consider_pd: Ademais do acordo anterior, considero que as miñas contribucións están no dominio público consider_pd_why: que é isto? @@ -1975,6 +2021,7 @@ gl: if set location: Defina a súa localización na páxina de %{settings_link} para ollar usuarios de lugares próximos. settings_link_text: axustes + my friends: Os meus amigos no friends: Aínda non engadiu ningún amigo. km away: a %{count}km de distancia m away: a %{count}m de distancia @@ -2178,7 +2225,7 @@ gl: confirm: Confirmar fail: Non se lle puido revogar o rol "%{role}" ao usuario "%{name}". Comprobe que tanto o usuario coma o rol son correctos. - user_block: + user_blocks: model: non_moderator_update: Cómpre ser moderador para crear ou actualizar un bloqueo. non_moderator_revoke: Cómpre ser moderador para revogar un bloqueo. @@ -2242,20 +2289,6 @@ gl: period: one: 1 hora other: '%{count} horas' - partial: - show: Mostrar - edit: Editar - revoke: Revogar! - confirm: Está seguro? - display_name: Usuario bloqueado - creator_name: Creador - reason: Motivo para o bloqueo - status: Estado - revoker_name: Revogado por - not_revoked: (non revogado) - showing_page: Páxina %{page} - next: Seguinte » - previous: « Anterior helper: time_future: Remata en %{time}. until_login: Activo ata que o usuario inicie sesión. @@ -2287,8 +2320,22 @@ gl: revoker: 'Autor da revogación:' needs_view: O usuario ten que acceder ao sistema antes de que o bloqueo sexa retirado. - note: - description: + block: + not_revoked: (non revogado) + show: Mostrar + edit: Editar + revoke: Revogar! + blocks: + display_name: Usuario bloqueado + creator_name: Creador + reason: Motivo para o bloqueo + status: Estado + revoker_name: Revogado por + showing_page: Páxina %{page} + next: Seguinte » + previous: « Anterior + notes: + comment: opened_at_html: Creado hai %{when} opened_at_by_html: Creado hai %{when} por %{user} commented_at_html: Subido hai %{when} @@ -2418,12 +2465,29 @@ gl: distance: Distancia errors: no_route: Non se puido atopar unha ruta entre eses dous lugares. - no_place: Sentímolo - non se puido atopar ese lugar. + no_place: Sentímolo - non foi posíbel atopar '%{place}'. instructions: continue_without_exit: Continuar en %{name} slight_right_without_exit: Xire un pouco cara á dereita en %{name} + offramp_right: Colla a rampla da dereita + offramp_right_with_exit: Tome a saída %{exit} cara á dereita + offramp_right_with_exit_name: Tome a saída %{exit} á dereita cara %{name} + offramp_right_with_exit_directions: Tome a saída %{exit} cara á dereita, en + dirección a %{directions} + offramp_right_with_exit_name_directions: Tome a saída %{exit} á dereita cara + %{name}, en dirección a %{directions} offramp_right_with_name: Colla a rampla á dereita en %{name} + offramp_right_with_directions: Tome a vía de acceso cara á dereita en dirección + a %{directions} + offramp_right_with_name_directions: Tome a vía de acceso á dereita cara %{name}, + en dirección a %{directions} onramp_right_without_exit: Xire á dereita na rampla en %{name} + onramp_right_with_directions: Xire á dereita, cara á rampla en dirección a + %{directions} + onramp_right_with_name_directions: Xire á dereita na rampla cara %{name}, + en dirección a %{directions} + onramp_right_without_directions: Xire á dereita cara a rampla + onramp_right: Xire á dereita cara a rampla endofroad_right_without_exit: Ó final da estrada xire á dereita en %{name} merge_right_without_exit: Únase á dereita en %{name} fork_right_without_exit: Na bifurcación xire á dereita en %{name} @@ -2432,18 +2496,33 @@ gl: uturn_without_exit: Cambio de sentido en %{name} sharp_left_without_exit: Xiro brusco á esquerda en %{name} turn_left_without_exit: Xire á esquerda cara %{name} + offramp_left: Tome a rampla á esquerda + offramp_left_with_exit: Tome a saída %{exit} á esquerda + offramp_left_with_exit_name: Tome a saída %{exit} á esquerda cara %{name} + offramp_left_with_exit_directions: Tome a saída %{exit} á esquerda en dirección + a %{directions} + offramp_left_with_exit_name_directions: Tome a saída %{exit} á esquerda cara + %{name}, en dirección a %{directions} offramp_left_with_name: Colla a rampla á esquerda en %{name} + offramp_left_with_directions: Tome a rampla á esquerda en dirección a %{directions} + offramp_left_with_name_directions: Tome a rampla á esquerda cara %{name}, + en dirección a %{directions} onramp_left_without_exit: Xire á esquerda na rampla en %{name} + onramp_left_with_directions: Xire á esquerda na rampla en dirección a %{directions} + onramp_left_with_name_directions: Xire á esquerda na rampla cara %{name}, + en dirección a %{directions} + onramp_left_without_directions: Xire á esquerda cara a rampla + onramp_left: Xire á esquerda cara a rampla endofroad_left_without_exit: Ó final da estrada xire á esquerda en %{name} merge_left_without_exit: Únase á esquerda en %{name} fork_left_without_exit: Na bifurcación xire á esquerda en %{name} slight_left_without_exit: Xire un pouco cara á esquerda en %{name} via_point_without_exit: (punto intermedio) follow_without_exit: Siga %{name} - roundabout_without_exit: Na rotonda, tomar %{name} + roundabout_without_exit: Na rotonda, tome a saída cara a %{name} leave_roundabout_without_exit: Sair da rotonda - %{name} stay_roundabout_without_exit: Permanecer na rotonda - %{name} - start_without_exit: Comezar ó final de %{name} + start_without_exit: Comezar en %{name} destination_without_exit: Chegada ó destino against_oneway_without_exit: Ir en contra dun só sentido en %{name} end_oneway_without_exit: Final dun só sentido en %{name} @@ -2470,7 +2549,7 @@ gl: show_address: Mostrar dirección query_features: Consultar características centre_map: Centrar o mapa aquí - redaction: + redactions: edit: description: Descrición heading: Editar a redacción diff --git a/config/locales/he.yml b/config/locales/he.yml index 23b317e9a..ed645cbf0 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -20,6 +20,7 @@ # Author: YaronSh # Author: Yona b # Author: Ypnypn +# Author: נדב ס # Author: תומר ט --- he: @@ -251,7 +252,7 @@ he: list: title: ערכות שינויים title_user: ערכות שינויים של %{user} - title_friend: ערכות שינויים של החברים שלך + title_friend: ערכות שינויים של החברים שלי title_nearby: ערכות שינויים של משתמשים בסביבה empty: לא נמצאה שום ערכת שינויים. empty_area: אין ערכות שינויים באזור הזה. @@ -280,7 +281,7 @@ he: user_title: היומן של %{user} in_language_title: רשומות יומן ב%{language} new: רשומת יומן חדשה - new_title: כתיבת רשומה חדשה ביומן המשתמש שלך + new_title: כתיבת רשומה חדשה ביומן המשתמש שלי no_entries: אין רשומות יומן recent_entries: רשומות יומן אחרונות older_entries: רשומות ישנות יותר @@ -345,50 +346,6 @@ he: ago: לפי %{ago} newer_comments: הערות חדשות older_comments: הערות ישנות - export: - title: ייצוא - start: - area_to_export: האזור לייצוא - manually_select: בחירה ידנית של אזור אחר - format_to_export: תסדיר לייצוא - osm_xml_data: נתוני XML של OpenStreetMap - map_image: תמונת מפה (תצוגת שכבה תקנית) - embeddable_html: HTML שניתן להטמעה - licence: רישיון - export_details: המידע ב־OpenStreetMap מוגש בכפוף לרישיון - Open Data Commons לנתונים פתוחים (ODbL). - too_large: - advice: 'אם הייבוא הנ״ל נכשל, נא לנסות להשתמש באחד המקורות להלן:' - body: 'האזור גדול מכדי שאפשר יהיה לייצא אותו בתור נתוני XML של OpenStreetMap. - נא להתקרב או לבחור אזור קטן יותר, או להשתמש במקורות הבאים בשביל הורדות נתונים - גדולות:' - planet: - title: פלאנט OSM - description: עותקים מעודכנים באופן קבוע של כל מסד הנתונים של OpenStreetMap - overpass: - title: Overpass API - description: הורדת התיבה התוחמת הזאת מאתר מראה של מסד הנתונים של OpenStreetMap - geofabrik: - title: הורדות של Geofabrik - description: עותקים מעודכנים באופן קבוע של יבשות, מדינות וערים נבחרות - metro: - title: מובאות מטרו - description: מובאות חלקיות לערים עולמיות גדולות ואזורים בסביבתן - other: - title: מקורות אחרים - description: מקורות נוספים רשומים בוויקי של OpenStreetMap - options: אפשרויות - format: תסדיר - scale: קנה מידה - max: לכל היותר - image_size: גודל התמונה - zoom: מרחק מתצוגה - add_marker: הוספת סמן למפה - latitude: 'קווי אורך:' - longitude: 'קווי רוחב:' - output: פלט - paste_html: להדביק HTML להטמעה באתר - export_button: ייצוא geocoder: search: title: @@ -566,6 +523,7 @@ he: services: שירותי דרך speed_camera: מצלמת מהירות steps: מדרגות + stop: תמרור עצור street_lamp: פנס רחוב tertiary: דרך שלישונית tertiary_link: דרך שלישונית @@ -976,261 +934,6 @@ he: text: תרומה learn_more: מידע נוסף more: עוד - license_page: - foreign: - title: אודות תרגום זה - text: במקרה של חוסר תאימות בין עמוד מתורגם זה ובין %{english_original_link}, - יש לתת עדיפות לעמוד באנגלית - english_link: העמוד המקורי באנגלית - native: - title: אודות דף זה - text: זהו עמוד זכויות היוצרים בגרסתו באנגלית. אפשר לחזור ל%{native_link} של - עמוד זה, ואפשר גם להפסיק לקרוא על זכויות יוצרים ו%{mapping_link}. - native_link: גרסה עברית - mapping_link: להתחיל למפות - legal_babble: - title_html: זכויות יוצרים ורישיון - intro_1_html: |- - מיזם OpenStreetMap® הוא נתונים פתוחים, שמתפרסמים לפי רישיון Open Data - Commons Open Database (ר״ת ODbL) על־ידי OpenStreetMap Foundation (ר״ת OSMF). - intro_2_html: |- - אתם חופשיים להעתיק, להפיץ, לשדר ולהתאים את הנתונים שלנו, - כל עוד אתם נותנים ייחוס ל־OpenStreetMap - ולתורמים למיזם. אם אתם משנים את הנתונים או את המפות שלנו או מסתמכים עליהם כדי ליצור משהו חדש, - מותר לכם להפיץ את התוצאות רק לפי תנאי אותו הרישיון. - המסמך - המשפטי המלא מסביר את זכויותיכם ואת תחומי האחריות שלכם. - intro_3_html: |- - המיפוי באריחי המפה שלנו, והתיעוד שלנו מוגשים בכפוף - לרישיון קריאייטיב - קומונז ייחוס–שיתוף־זהה 2.0 license (בקיצור CC-BY-SA). - credit_title_html: איך לתת ייחוס ל־OpenStreetMap - credit_1_html: אנו דורשים ייחוס אל „© תורמי OpenStreetMap”. - credit_2_html: |- - כמו־כן, חובתך להבהיר שהנתונים זמינים בכפוף לרישיון למסדי - נתונים פתוחים, ואם נעשה שימוש באריחי המפה שלנו, שהמיפוי כפופות - לרישיון CC-BY-SA. באפשרותך לעשות זאת באמצעות קישור אל - דף זכויות היוצירם. - לחלופין, וזו חובתך בעת הפצת OSM בצורת - נתונים, באפשרותך לציין את השמות ולקשר ישירות אל הרישיון או הרישיונות. באמצעי תקשורת - שלא ניתן להשתמש בהם בקישורים (למשל בדפוס), אני ממליצים - להפנות את הקוראים שלך אל openstreetmap.org (אולי על־ידי הרחבת - „OpenStreetMap” ככתובת מלאה), אל opendatacommons.org, ואם - זה מתאים, אל creativecommons.org. - credit_3_html: 'בשביל מפה אלקטרונית שאפשר לעיין בה, הייחוס צריך להופיע בפינת - המפה. למשל:' - attribution_example: - alt: דוגמה לצורה הנכונה לתת ייחוס ל־OpenStreetMap באתר האינטרנט - title: דוגמה לייחוס - more_title_html: איך למצוא מידע נוסף - more_1_html: |- - קִראו עוד על שימוש בנתונים שלנו ועל דרכים לייחס אלינו יצירות נגזרות בדף רישיון OSMF. - more_2_html: |- - אף־על־פי ש־OpenStreetMap הוא מיזם נתונים פתוחים, איננו יכולים לספק - API מפות בחינם לכל צד שלישי. - ר׳ את דפי המדיניות שלנו: המדיניות השימוש ב־API, - מדיניות השימוש באריחים - ומדיניות השימוש בנומינטים. - contributors_title_html: התורמים שלנו - contributors_intro_html: |- - התורמים שלנו הם אלפי אנשים. אנו גם כוללים - נתונים ברישיון פתוח מסוכנויות מיפוי לאומות - וממקורות אחרים, בהם: - contributors_at_html: |- - אוסטריה: מכיל נתונים - מעיריית וינה לפי תנאי - CC BY, - ממדינת פורארלברג - וממדינת טירול (לפי CC-BY AT עם תיקונים). - contributors_ca_html: |- - קנדה: מכיל נתונים - מ־GeoBase®‏, GeoGratis‏ (©‏ Department of Natural - Resources Canada)‏, CanVec‏ (©‏ Department of Natural - Resources Canada), ו־StatCan‏ (Geography Division, - Statistics Canada). - contributors_fi_html: |- - פינלנד: מכיל מידע ממסד נתונים טופוגרפיים של פינלנד וממקורות מידע אחרים, תחת - רישיון NLSFI. - contributors_fr_html: |- - צרפת: מכיל נתונים שהגיעו במקור - ממנהלת המסים הכללית (Direction Générale des Impôts). - contributors_nl_html: |- - הולנד: מכיל © נתונים מ־ AND‏, 2007 - (www.and.com) - contributors_nz_html: |- - ניו זילנד: מכיל נתונים שהגיעו במקור - מ־Land Information New Zealand. זכויות היוצרים של הכתר שמורות. - contributors_si_html: |- - סלובניה: מכיל נתונים מהרשות למדידת־קרקעות ולמיפוי וממשרד החקלאות, היערנות והמזון - (מידע ציבורי של סלובניה). - contributors_za_html: |- - דרום אפריקה: מכיל נתונים שהגיעו - מ־מִנהל כללי: - מידע גאו־מרחבי לאומי, זכות יוצרים ממלכתית שמורה. - contributors_gb_html: |- - הממלכה המאוחדת: מכיל נתוני סקר מדידות - © זכויות הכתר וזכויות מסדי נתונים - 2010–2012. - contributors_footer_1_html: |- - למידע נוסף על מקורות אלה ואחרים ששימשו - לשיפור OpenStreetMap, נא לראות את דף - התורמים בוויקי של OpenStreetMap. - contributors_footer_2_html: |- - הכללה של נתונים ב־OpenStreetMap אינה אומרת שהספק המקורי - של הנתוהים תומך ב־OpenStreetMap, לוקח על עצמו אחריות כלשהי, או - מקבל חבות כלשהי. - infringement_title_html: הפרת זכויות יוצרים - infringement_1_html: |- - אנו מזכירים לתורמים ל־OSM לעולם לא להוסיף נתונים משום מקור - שמוגבל בזכויות יוצרים (למשל מפות גוגל או מפות מודפסות) ללא - אישור מפורש מבעלי הזכויות. - infringement_2_html: |- - אם נראה לך שחומר שמוגבל בזכויות יוצרים נוסף באופן לא הולם - אל מסד הנתונים של OpenStreetMap או אל האתר הזה, נא לפנות - אל נוהל - ההסרה שלנו או כתבו תלונה ישירות - בדף התלונות המקוון שלנו. - trademarks_title_html: סימנים מסחריים - trademarks_1_html: OpenStreetMap, סמל הזכוכית המגדלת ו־State of the Map הם סימנים - מסחריים של קרן OpenStreetMap. אם יש לך שאלות על השימוש שלך בסימנים, ר' את - מדיניות הסימנים - המסחריים שלנו. - welcome_page: - title: ברוך בואך! - introduction_html: ברוך בואך ל־OpenStreetMap, מפה חופשית של העולם, שאפשר לערוך. - עכשיו שנרשמת, הכול מוכן ואפשר להתחיל לצייר מפות. הנה מדריך קצת שייתן לך את הדברים - החשובים שכדאי לך לדעת. - whats_on_the_map: - title: מה על המפה - on_html: OpenStreetMap הוא מקום למיפוי דברים אמתיים ונוכחיים – הוא מכיל מיליוני - מבנים, דרכים ופרטים אחרים על מקומות. אפשר למפות כל ישות מהעולם האמתי שמעניין - אותך. - off_html: מה שאין פה זה מידע דעתני כמו דירוגים, מקומות היסטוריים או היפותטיים - ונתונים ומקורות שמוגבלים בזכויות יוצרים. אנו דורשים ממך לא להוסיף מידע ממפות - מקוונות או מודפסות אלא אם יש לך אישור מיוחד לכך. - basic_terms: - title: מונחים בסיסיים למיפוי - paragraph_1_html: למיזם OpenStreetMap יש עגה משלו. הנה מספר מילות מפתח שיהיו - שימושיות. - editor_html: עורך הוא תכנה או אתר לעריכת המפה. - node_html: צומת נוא נקודה על מפה, כגון מסעדה אחת או ×¢×¥ אחד. - way_html: נתיב הוא קו או אזור כמו דרך, זרם, אגם או מבנה. - tag_html: תג הוא פיסת מידע על צומת או על נתיב כמו שם של מסעדה - או מגבלת מהירות בדרך. - rules: - title: חוקים! - paragraph_1_html: ל־OpenStreetMap יש מעט חוקים פורמליים, אבל אנחנו מצפים מכל - המשתתפים לשתף פעולה ולתקשר עם הקהילה. אם אתם שוקלים לבצע פעולות כלשהן מלבד - עריכה ידנית, אנא קראו את המדריכים על יבוא - ועל עריכות - אוטומטיות. - questions: - title: יש שאלות? - paragraph_1_html: |- - ב־OpenStreetMap יש מספר משאבים ללימוד על המיזם, לשאלות ותשובות, - ולדיון ותיעוד שיתופי של נושאי מיפוי. - מקום לקבל עזרה. - start_mapping: להתחיל למפות - add_a_note: - title: אין לך זמן לערוך? אפשר להוסיף הערה! - paragraph_1_html: אם רק רצית לתקן משהו קטן ואין לך זמן להירשם וללמוד איך לערוך, - קל להוסיף הערה. - paragraph_2_html: 'צריך פשוט ללכת אל המפה וללחוץ - על סמל ההערה: . זה יוסיף למפה סמן, שאפשר - לגרור. אחרי הוספת ההערה יש ללחוץ על שמירה וממפים אחרים יבדקו את זה.' - fixthemap: - title: לדווח על בעיה / לתקן את המפה - how_to_help: - title: איך אפשר לעזור - join_the_community: - title: להצטרף לקהילה - explanation_html: |- - אם שמת לב לבעיה על נתוני המפה שלנו, למשל שדרך או שכתובת שלך חסרה, הדרך הטובה ביותר - להמשיך היא להצטרף לקהילת OpenStreetMap ולתקן את הנתונים בעצמך. - add_a_note: - instructions_html: |- - צריך פשוט ללחוץ על או על אותו הסמל בתצוגת המפה. - זה יוסיף למפה סמן שאפשר להזיז - באמצעות גרירה. יש להוסיף שם הערה ולשמור אותה וממפים אחרים יחקרו את זה. - other_concerns: - title: דאגות אחרות - explanation_html: אם יש לך דאגות לגבי איך שהנתונים שלנו משמשים או על התוכן, - נא לקרוא את דף זכויות היוצרים שלנו למידע משפטי נוסף, - או ליצור קשר עם קבוצת - העבודה המתאימה ב־OSMF. - help_page: - title: קבלת עזרה - introduction: |- - ב־OpenStreetMap יש מספר משאבים ללימוד על המיזם, לשאלות ותשובות, - ולדיון ותיעוד שיתופי של נושאי מיפוי. - welcome: - url: /welcome - title: ברוכים הבאים ל־OSM - description: תחילת היכרות בעזרת מדריך מהיר שסוקר את היסודות של OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/He:Beginners%27_guide - title: המדריך למתחילים - description: מדריך בתחזוקת הקהילה למתחילים. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: לשאול שאלה או לחפש תשובות באתר השאלות והתשובות של OSM. - mailing_lists: - title: רשימות תפוצה - description: לשאול שאלה או לדון בדברים מעניינים ברשימות תפוצה נושאים ואזוריות - רבות. - forums: - title: פורומים - description: שאלות ודיונים לאנשים שמעדיפים ממשק בסגנון פורום. - irc: - title: IRC - description: שיחה אינטראקטיבית בשפות שונות רבות ובנושאים רבים. - switch2osm: - title: switch2osm - description: עזרה לחברות וארגונים שעוברים למפות ושירותים אחרים של OpenStreetMap. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: לעיין בוויקי לתיעוד מעמיק על OSM. - about_page: - next: הבא - copyright_html: ©×ª×•×¨×ž×™
        OpenStreetMap - used_by: '%{name} מפעילה נתוני המפה באלפי אתרי אינטרנט, יישומים ומכשירים שונים' - lede_text: את OpenStreetMap בונה קהילת ממפים שתורמים ומתחזקים נתונים על דרכים, - שבילים, בתי־קפה, תחנות רכבת ועוד הרבה יותר, מסביב לעולם. - local_knowledge_title: ידע מקומי - local_knowledge_html: |- - OpenStreetMap מדגישה ידע מקומי. התורמים משתמשים - בתמונות מהאוויר, מכשירי GPS, ומפות שדה „לואו־טק” כדי לוודא ש־OSM - מדויקת ומעודכנת. - community_driven_title: מונהג על־ידי הקהילה - community_driven_html: |- - קהילת OpenStreetMap מגוונת, בעלת תשוקה, וגדלה מיום ליום. - בקרב התורמים שלנו יש ממפים נלהבים, מקצועני מערכות מידע גאוגרפיות (GIS), מהנדסים - שמריצים את שרתי OSM, פעילי סיוע הומניטרי שממפים אזורי מוכי־אסון, - ורבים אחרים. - למידע נוסף על הקהילה, ר׳ את OpenStreetMap Blog, יומני משתמשים, יומני קהילה, ואתר OSM Foundation. - open_data_title: נתונים פתוחים - open_data_html: |- - OpenStreetMap היא נתונים פתוחים: יש לך הופש להשתמש בה לכל מטרה, - כל עוד ניתן ייחוס ל־OpenStreetMap ולתורמיה. מותר לשנות את הנתונים - ולבנות על גביהם דברים מסוימים, אך יש להפיץ את התוצאות של זה - לפי התנאים של אותו הרישיון. ר' את דף הרישיון וזכויות היוצרים לפרטים נוספים. - legal_title: משפטי - legal_html: |- - האתר הזה ושירותים רבים אחרים מופעלים על־ידי קרן OpenStreetMap‏ (OSMF) בשם הקהילה. השימוש בכל השירותים במפעילה OSMF כפוף - ל־ - מדיניות שימוש קביל שלנו - ול־Privacy Policyמדיניות הפרטיות שלנו -
        - נא ליצור קשר עם OSMF אם יש לך שאלות על רישוי, זכויות יוצרים או שאלות משפטיות אחרות. -
        - OpenStreetMap, סמל הזכוכית המגדלת, ו־State of the Map הם סימנים מסחריים רשומים של קרן OSM. - partners_title: שותפים notifier: diary_comment_notification: subject: '[אופן סטריט מאפ OpenStreetMap] תגובה מאת %{user} נוספה לרשומת יומן' @@ -1406,6 +1109,164 @@ he: delete: deleted: ההודעה נמחקה site: + about: + next: הבא + copyright_html: ©×ª×•×¨×ž×™
        OpenStreetMap + used_by: '%{name} מפעילה נתוני המפה באלפי אתרי אינטרנט, יישומים ומכשירים שונים' + lede_text: את OpenStreetMap בונה קהילת ממפים שתורמים ומתחזקים נתונים על דרכים, + שבילים, בתי־קפה, תחנות רכבת ועוד הרבה יותר, מסביב לעולם. + local_knowledge_title: ידע מקומי + local_knowledge_html: |- + OpenStreetMap מדגישה ידע מקומי. התורמים משתמשים + בתמונות מהאוויר, מכשירי GPS, ומפות שדה „לואו־טק” כדי לוודא ש־OSM + מדויקת ומעודכנת. + community_driven_title: מונהג על־ידי הקהילה + community_driven_html: |- + קהילת OpenStreetMap מגוונת, בעלת תשוקה, וגדלה מיום ליום. + בקרב התורמים שלנו יש ממפים נלהבים, מקצועני מערכות מידע גאוגרפיות (GIS), מהנדסים + שמריצים את שרתי OSM, פעילי סיוע הומניטרי שממפים אזורי מוכי־אסון, + ורבים אחרים. + למידע נוסף על הקהילה, ר׳ את OpenStreetMap Blog, יומני משתמשים, יומני קהילה, ואתר OSM Foundation. + open_data_title: נתונים פתוחים + open_data_html: |- + OpenStreetMap היא נתונים פתוחים: יש לך הופש להשתמש בה לכל מטרה, + כל עוד ניתן ייחוס ל־OpenStreetMap ולתורמיה. מותר לשנות את הנתונים + ולבנות על גביהם דברים מסוימים, אך יש להפיץ את התוצאות של זה + לפי התנאים של אותו הרישיון. ר' את דף הרישיון וזכויות היוצרים לפרטים נוספים. + legal_title: משפטי + legal_html: |- + האתר הזה ושירותים רבים אחרים מופעלים על־ידי קרן OpenStreetMap‏ (OSMF) בשם הקהילה. השימוש בכל השירותים במפעילה OSMF כפוף + ל־ + מדיניות שימוש קביל שלנו + ול־Privacy Policyמדיניות הפרטיות שלנו +
        + נא ליצור קשר עם OSMF אם יש לך שאלות על רישוי, זכויות יוצרים או שאלות משפטיות אחרות. +
        + OpenStreetMap, סמל הזכוכית המגדלת, ו־State of the Map הם סימנים מסחריים רשומים של קרן OSM. + partners_title: שותפים + copyright: + foreign: + title: אודות תרגום זה + text: במקרה של חוסר תאימות בין עמוד מתורגם זה ובין %{english_original_link}, + יש לתת עדיפות לעמוד באנגלית + english_link: העמוד המקורי באנגלית + native: + title: אודות דף זה + text: זהו עמוד זכויות היוצרים בגרסתו באנגלית. אפשר לחזור ל%{native_link} של + עמוד זה, ואפשר גם להפסיק לקרוא על זכויות יוצרים ו%{mapping_link}. + native_link: גרסה עברית + mapping_link: להתחיל למפות + legal_babble: + title_html: זכויות יוצרים ורישיון + intro_1_html: |- + מיזם OpenStreetMap® הוא נתונים פתוחים, שמתפרסמים לפי רישיון Open Data + Commons Open Database (ר״ת ODbL) על־ידי OpenStreetMap Foundation (ר״ת OSMF). + intro_2_html: |- + אתם חופשיים להעתיק, להפיץ, לשדר ולהתאים את הנתונים שלנו, + כל עוד אתם נותנים ייחוס ל־OpenStreetMap + ולתורמים למיזם. אם אתם משנים את הנתונים או את המפות שלנו או מסתמכים עליהם כדי ליצור משהו חדש, + מותר לכם להפיץ את התוצאות רק לפי תנאי אותו הרישיון. + המסמך + המשפטי המלא מסביר את זכויותיכם ואת תחומי האחריות שלכם. + intro_3_html: |- + המיפוי באריחי המפה שלנו, והתיעוד שלנו מוגשים בכפוף + לרישיון קריאייטיב + קומונז ייחוס–שיתוף־זהה 2.0 license (בקיצור CC-BY-SA). + credit_title_html: איך לתת ייחוס ל־OpenStreetMap + credit_1_html: אנו דורשים ייחוס אל „© תורמי OpenStreetMap”. + credit_2_html: |- + כמו־כן, חובתך להבהיר שהנתונים זמינים בכפוף לרישיון למסדי + נתונים פתוחים, ואם נעשה שימוש באריחי המפה שלנו, שהמיפוי כפופות + לרישיון CC-BY-SA. באפשרותך לעשות זאת באמצעות קישור אל + דף זכויות היוצירם. + לחלופין, וזו חובתך בעת הפצת OSM בצורת + נתונים, באפשרותך לציין את השמות ולקשר ישירות אל הרישיון או הרישיונות. באמצעי תקשורת + שלא ניתן להשתמש בהם בקישורים (למשל בדפוס), אני ממליצים + להפנות את הקוראים שלך אל openstreetmap.org (אולי על־ידי הרחבת + „OpenStreetMap” ככתובת מלאה), אל opendatacommons.org, ואם + זה מתאים, אל creativecommons.org. + credit_3_html: 'בשביל מפה אלקטרונית שאפשר לעיין בה, הייחוס צריך להופיע בפינת + המפה. למשל:' + attribution_example: + alt: דוגמה לצורה הנכונה לתת ייחוס ל־OpenStreetMap באתר האינטרנט + title: דוגמה לייחוס + more_title_html: איך למצוא מידע נוסף + more_1_html: |- + קִראו עוד על שימוש בנתונים שלנו ועל דרכים לייחס אלינו יצירות נגזרות בדף רישיון OSMF. + more_2_html: |- + אף־על־פי ש־OpenStreetMap הוא מיזם נתונים פתוחים, איננו יכולים לספק + API מפות בחינם לכל צד שלישי. + ר׳ את דפי המדיניות שלנו: המדיניות השימוש ב־API, + מדיניות השימוש באריחים + ומדיניות השימוש בנומינטים. + contributors_title_html: התורמים שלנו + contributors_intro_html: |- + התורמים שלנו הם אלפי אנשים. אנו גם כוללים + נתונים ברישיון פתוח מסוכנויות מיפוי לאומות + וממקורות אחרים, בהם: + contributors_at_html: |- + אוסטריה: מכיל נתונים + מעיריית וינה לפי תנאי + CC BY, + ממדינת פורארלברג + וממדינת טירול (לפי CC-BY AT עם תיקונים). + contributors_ca_html: |- + קנדה: מכיל נתונים + מ־GeoBase®‏, GeoGratis‏ (©‏ Department of Natural + Resources Canada)‏, CanVec‏ (©‏ Department of Natural + Resources Canada), ו־StatCan‏ (Geography Division, + Statistics Canada). + contributors_fi_html: |- + פינלנד: מכיל מידע ממסד נתונים טופוגרפיים של פינלנד וממקורות מידע אחרים, תחת + רישיון NLSFI. + contributors_fr_html: |- + צרפת: מכיל נתונים שהגיעו במקור + ממנהלת המסים הכללית (Direction Générale des Impôts). + contributors_nl_html: |- + הולנד: מכיל © נתונים מ־ AND‏, 2007 + (www.and.com) + contributors_nz_html: |- + ניו זילנד: מכיל נתונים שהגיעו במקור + מ־Land Information New Zealand. זכויות היוצרים של הכתר שמורות. + contributors_si_html: |- + סלובניה: מכיל נתונים מהרשות למדידת־קרקעות ולמיפוי וממשרד החקלאות, היערנות והמזון + (מידע ציבורי של סלובניה). + contributors_za_html: |- + דרום אפריקה: מכיל נתונים שהגיעו + מ־מִנהל כללי: + מידע גאו־מרחבי לאומי, זכות יוצרים ממלכתית שמורה. + contributors_gb_html: |- + הממלכה המאוחדת: מכיל נתוני סקר מדידות + © זכויות הכתר וזכויות מסדי נתונים + 2010–2012. + contributors_footer_1_html: |- + למידע נוסף על מקורות אלה ואחרים ששימשו + לשיפור OpenStreetMap, נא לראות את דף + התורמים בוויקי של OpenStreetMap. + contributors_footer_2_html: |- + הכללה של נתונים ב־OpenStreetMap אינה אומרת שהספק המקורי + של הנתוהים תומך ב־OpenStreetMap, לוקח על עצמו אחריות כלשהי, או + מקבל חבות כלשהי. + infringement_title_html: הפרת זכויות יוצרים + infringement_1_html: |- + אנו מזכירים לתורמים ל־OSM לעולם לא להוסיף נתונים משום מקור + שמוגבל בזכויות יוצרים (למשל מפות גוגל או מפות מודפסות) ללא + אישור מפורש מבעלי הזכויות. + infringement_2_html: |- + אם נראה לך שחומר שמוגבל בזכויות יוצרים נוסף באופן לא הולם + אל מסד הנתונים של OpenStreetMap או אל האתר הזה, נא לפנות + אל נוהל + ההסרה שלנו או כתבו תלונה ישירות + בדף התלונות המקוון שלנו. + trademarks_title_html: סימנים מסחריים + trademarks_1_html: OpenStreetMap, סמל הזכוכית המגדלת ו־State of the Map הם + סימנים מסחריים של קרן OpenStreetMap. אם יש לך שאלות על השימוש שלך בסימנים, + ר' את מדיניות + הסימנים המסחריים שלנו. index: js_1: הדפדפן שבו אתה משתמש אינו תומך ב־JavaScript, או שכיבית את השימוש ב־JavaScript. js_2: אתר OpenStreetMap משתמש ב־JavaScript למפה המחליקה. @@ -1435,6 +1296,103 @@ he: id_not_configured: לא התבצעו הגדרות של iD no_iframe_support: הדפדפן שלך אינו תומך באלמנטים מסוג iframe של HTML, ואלו חיוניים עבור תכונה זו. + export: + title: ייצוא + area_to_export: האזור לייצוא + manually_select: בחירה ידנית של אזור אחר + format_to_export: תסדיר לייצוא + osm_xml_data: נתוני XML של OpenStreetMap + map_image: תמונת מפה (תצוגת שכבה תקנית) + embeddable_html: HTML שניתן להטמעה + licence: רישיון + export_details: המידע ב־OpenStreetMap מוגש בכפוף לרישיון + Open Data Commons לנתונים פתוחים (ODbL). + too_large: + advice: 'אם הייבוא הנ״ל נכשל, נא לנסות להשתמש באחד המקורות להלן:' + body: 'האזור גדול מכדי שאפשר יהיה לייצא אותו בתור נתוני XML של OpenStreetMap. + נא להתקרב או לבחור אזור קטן יותר, או להשתמש במקורות הבאים בשביל הורדות נתונים + גדולות:' + planet: + title: פלאנט OSM + description: עותקים מעודכנים באופן קבוע של כל מסד הנתונים של OpenStreetMap + overpass: + title: Overpass API + description: הורדת התיבה התוחמת הזאת מאתר מראה של מסד הנתונים של OpenStreetMap + geofabrik: + title: הורדות של Geofabrik + description: עותקים מעודכנים באופן קבוע של יבשות, מדינות וערים נבחרות + metro: + title: מובאות מטרו + description: מובאות חלקיות לערים עולמיות גדולות ואזורים בסביבתן + other: + title: מקורות אחרים + description: מקורות נוספים רשומים בוויקי של OpenStreetMap + options: אפשרויות + format: תסדיר + scale: קנה מידה + max: לכל היותר + image_size: גודל התמונה + zoom: מרחק מתצוגה + add_marker: הוספת סמן למפה + latitude: 'קווי אורך:' + longitude: 'קווי רוחב:' + output: פלט + paste_html: להדביק HTML להטמעה באתר + export_button: ייצוא + fixthemap: + title: לדווח על בעיה / לתקן את המפה + how_to_help: + title: איך אפשר לעזור + join_the_community: + title: להצטרף לקהילה + explanation_html: |- + אם שמת לב לבעיה על נתוני המפה שלנו, למשל שדרך או שכתובת שלך חסרה, הדרך הטובה ביותר + להמשיך היא להצטרף לקהילת OpenStreetMap ולתקן את הנתונים בעצמך. + add_a_note: + instructions_html: |- + צריך פשוט ללחוץ על או על אותו הסמל בתצוגת המפה. + זה יוסיף למפה סמן שאפשר להזיז + באמצעות גרירה. יש להוסיף שם הערה ולשמור אותה וממפים אחרים יחקרו את זה. + other_concerns: + title: דאגות אחרות + explanation_html: אם יש לך דאגות לגבי איך שהנתונים שלנו משמשים או על התוכן, + נא לקרוא את דף זכויות היוצרים שלנו למידע משפטי + נוסף, או ליצור קשר עם קבוצת + העבודה המתאימה ב־OSMF. + help: + title: קבלת עזרה + introduction: |- + ב־OpenStreetMap יש מספר משאבים ללימוד על המיזם, לשאלות ותשובות, + ולדיון ותיעוד שיתופי של נושאי מיפוי. + welcome: + url: /welcome + title: ברוכים הבאים ל־OSM + description: תחילת היכרות בעזרת מדריך מהיר שסוקר את היסודות של OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/He:Beginners%27_guide + title: המדריך למתחילים + description: מדריך בתחזוקת הקהילה למתחילים. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: לשאול שאלה או לחפש תשובות באתר השאלות והתשובות של OSM. + mailing_lists: + title: רשימות תפוצה + description: לשאול שאלה או לדון בדברים מעניינים ברשימות תפוצה נושאים ואזוריות + רבות. + forums: + title: פורומים + description: שאלות ודיונים לאנשים שמעדיפים ממשק בסגנון פורום. + irc: + title: IRC + description: שיחה אינטראקטיבית בשפות שונות רבות ובנושאים רבים. + switch2osm: + title: switch2osm + description: עזרה לחברות וארגונים שעוברים למפות ושירותים אחרים של OpenStreetMap. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: לעיין בוויקי לתיעוד מעמיק על OSM. sidebar: search_results: תוצאות החיפוש close: לסגירה @@ -1534,6 +1492,49 @@ he: image: תמונה alt: טקסט חלופי url: כתובת + welcome: + title: ברוך בואך! + introduction_html: ברוך בואך ל־OpenStreetMap, מפה חופשית של העולם, שאפשר לערוך. + עכשיו שנרשמת, הכול מוכן ואפשר להתחיל לצייר מפות. הנה מדריך קצת שייתן לך את + הדברים החשובים שכדאי לך לדעת. + whats_on_the_map: + title: מה על המפה + on_html: OpenStreetMap הוא מקום למיפוי דברים אמתיים ונוכחיים – הוא מכיל מיליוני + מבנים, דרכים ופרטים אחרים על מקומות. אפשר למפות כל ישות מהעולם האמתי שמעניין + אותך. + off_html: מה שאין פה זה מידע דעתני כמו דירוגים, מקומות היסטוריים או היפותטיים + ונתונים ומקורות שמוגבלים בזכויות יוצרים. אנו דורשים ממך לא להוסיף מידע + ממפות מקוונות או מודפסות אלא אם יש לך אישור מיוחד לכך. + basic_terms: + title: מונחים בסיסיים למיפוי + paragraph_1_html: למיזם OpenStreetMap יש עגה משלו. הנה מספר מילות מפתח שיהיו + שימושיות. + editor_html: עורך הוא תכנה או אתר לעריכת המפה. + node_html: צומת נוא נקודה על מפה, כגון מסעדה אחת או ×¢×¥ אחד. + way_html: נתיב הוא קו או אזור כמו דרך, זרם, אגם או מבנה. + tag_html: תג הוא פיסת מידע על צומת או על נתיב כמו שם של מסעדה + או מגבלת מהירות בדרך. + rules: + title: חוקים! + paragraph_1_html: ל־OpenStreetMap יש מעט חוקים פורמליים, אבל אנחנו מצפים מכל + המשתתפים לשתף פעולה ולתקשר עם הקהילה. אם אתם שוקלים לבצע פעולות כלשהן מלבד + עריכה ידנית, אנא קראו את המדריכים על יבוא + ועל עריכות + אוטומטיות. + questions: + title: יש שאלות? + paragraph_1_html: |- + ב־OpenStreetMap יש מספר משאבים ללימוד על המיזם, לשאלות ותשובות, + ולדיון ותיעוד שיתופי של נושאי מיפוי. + מקום לקבל עזרה. + start_mapping: להתחיל למפות + add_a_note: + title: אין לך זמן לערוך? אפשר להוסיף הערה! + paragraph_1_html: אם רק רצית לתקן משהו קטן ואין לך זמן להירשם וללמוד איך לערוך, + קל להוסיף הערה. + paragraph_2_html: 'צריך פשוט ללכת אל המפה וללחוץ + על סמל ההערה: . זה יוסיף למפה סמן, שאפשר + לגרור. אחרי הוספת ההערה יש ללחוץ על שמירה וממפים אחרים יבדקו את זה.' trace: visibility: private: פרטי (משותף רק כאלמוני, נקודות לא ממוינות) @@ -1655,7 +1656,7 @@ he: need_to_see_terms: גישתך ל־API מושעית זמנית. נא להיכנס לאתר כדי לצפות בתנאי התרומה. אין צורך לקבל אותם, אבל חובה להציג אותם. oauth: - oauthorize: + authorize: title: אישור הגישה לחשבון שלך request_access: היישום %{app_name} דורש גישה לחשבונך, %{user}. נא לבדוק האם מתאים לך שהיישום יקבל את היכולות האלו. אפשר לבחור או לא לבחור את כל מה שמתאים @@ -1669,11 +1670,11 @@ he: allow_write_gpx: להעלות מסלולי GPS. allow_write_notes: לשנות הערות grant_access: מתן גישה - oauthorize_success: + authorize_success: title: בקשת אישור אושרה allowed: נתת ליישום %{app_name} גישה לחשבונך. verification: קוד האימות הוא %{code}. - oauthorize_failure: + authorize_failure: title: בקשת אישור נכשלה denied: שללת מהיישום %{app_name} את הגישה לחשבון שלך. invalid: האסימון האישור אינו תקף. @@ -1904,6 +1905,7 @@ he: if set location: הגדרה של מיקום הבית שלך בדף %{settings_link} תאפשר לך לראות משתמשים בסביבתך. settings_link_text: הגדרות + my friends: החברים שלי no friends: עדיין לא הוספת חברים. km away: במרחק %{count} ק״מ m away: במרחק %{count} מ׳ @@ -2096,7 +2098,7 @@ he: confirm: אישור fail: שלילת התפקיד „%{role}” מהמשתמש „%{name}” נכשלה. נא לבדוק שהמשתמש והתפקיד תקינים. - user_block: + user_blocks: model: non_moderator_update: צריך להיות מנהל כדי ליצור או לעדכן חסימה. non_moderator_revoke: צריך להיות מנהל כדי לבטל חסימה. @@ -2151,20 +2153,6 @@ he: period: one: שעה אחת other: '%{count} שעות' - partial: - show: הצגה - edit: עריכה - revoke: לבטל! - confirm: באמת? - display_name: משתמש חסום - creator_name: יוצר - reason: סיבה לחסימה - status: מצב - revoker_name: בוטלה על־ידי - not_revoked: (לא בוטלה) - showing_page: הדף %{page} - next: הבא » - previous: « הקודם helper: time_future: תסתיים בעוד %{time} until_login: פעילה עד שהמשתמש ייכנס לחשבון. @@ -2194,8 +2182,22 @@ he: back: צפייה בכל החסימות revoker: 'מבטל:' needs_view: המשתמש צריך להיכנס לחשבון לפני שהחסימה הזאת יכולה להתבטל. - note: - description: + block: + not_revoked: (לא בוטלה) + show: הצגה + edit: עריכה + revoke: לבטל! + blocks: + display_name: משתמש חסום + creator_name: יוצר + reason: סיבה לחסימה + status: מצב + revoker_name: בוטלה על־ידי + showing_page: הדף %{page} + next: הבא » + previous: « הקודם + notes: + comment: opened_at_html: נוצרה לפני %{when} opened_at_by_html: נוצרה לפני %{when} על־ידי %{user} commented_at_html: עודכנה לפני %{when} @@ -2320,10 +2322,13 @@ he: distance: מרחק errors: no_route: לא מצאנו נתיב שמחבר בין שני המקומות האלה. - no_place: סליחה – לא מצאנו את המקום הזה. + no_place: סליחה – לא מצאנו את %{place}. instructions: continue_without_exit: להמשיך על %{name} slight_right_without_exit: קצת ימינה אל %{name} + offramp_right_with_exit: צא ביציאה %{exit} מימין + offramp_right_with_exit_name: צא ביציאה %{exit} מימין אל %{name} + offramp_right_with_exit_directions: צא ביציאה %{exit} מימין לכיוון %{directions} offramp_right_with_name: לעלות ימינה אל %{name} onramp_right_without_exit: לפנות ימינה לעלייה אל %{name} endofroad_right_without_exit: בסוף הדרך לפנות ימינה אל %{name} @@ -2372,7 +2377,7 @@ he: show_address: להציג כתובת query_features: אפשרויות שאילתה centre_map: למרכז את המפה כאן - redaction: + redactions: edit: description: תיאור heading: עריכת חיתוך diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 4def80e7b..85378d3c7 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -337,53 +337,6 @@ hr: ago: prije %{ago} newer_comments: Noviji komentari older_comments: Stariji komentari - export: - title: Izvoz - start: - area_to_export: Područje za export - manually_select: Ručno izaberi drukčije područje - format_to_export: Format za Export - osm_xml_data: OpenStreetMap XML podaci - map_image: Slika karte (prikazuje standardni sloj) - embeddable_html: HTML kod za umetanje - licence: Dozvola - export_details: OpenStreetMap podaci su licencirani pod Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Ako gornji izvoz podataka ne uspije, molim pokuÅ¡aj sa nekim od izvora - navedenih ispod:' - body: Ovo područje je preveliko da bi se izvezlo u OpenStreetMap XML formatu. - Molim približi prikaz ili odaberi manje područje ili odaberi jedan od izvora - navedenih ispod za preuzimanje velike količine podataka. - planet: - title: PlanetOSM - description: Redovno ažurirane kopije kompletne baze podataka OpenStreetMap-a - overpass: - title: Overpass API - description: Preuzmi iznad odabrano granično područje sa drugog servera - na kojem je identična kopija baze podataka OpenStreetMap-a - geofabrik: - title: Geofabrik Downloads - description: 'Redovno ažurirani podaci za izvoz: kontinenata, država i odabranih - gradova' - metro: - title: Metro Extracts - description: Izvoz za glavne svjetske gradove i njihovih obližnjih područja - other: - title: Drugi izvori - description: Dodatni izvori su navedeni na wiki stranici OpenStreetMap-a - options: Opcije - format: Format - scale: Mjerilo - max: max - image_size: Veličina slike - zoom: Približenje - add_marker: Dodaj marker na kartu - latitude: 'Lat:' - longitude: 'Lon:' - output: Izlaz - paste_html: Zalijepi HTML za ugrađivanje na web stranicu - export_button: Export geocoder: search: title: @@ -926,115 +879,6 @@ hr: text: Donirajte learn_more: Saznaj viÅ¡e more: ViÅ¡e - license_page: - foreign: - title: O ovom prijevodu - text: U slučaju konflikta između ove prevedene stranice i %{english_original_link}, - Engleski stranice imaju prednost - english_link: Engleski izvornik - native: - title: O ovoj stranici - text: Vi gledate englesku verziju stranice o autorskim pravima. Možete se vratiti - na %{native_link} ove stranice ili možete prestati čitati o autorskim pravima - i %{mapping_link}. - native_link: hrvatsko izdanje - mapping_link: počnite kartirati - legal_babble: - title_html: Autorska prava i Dozvola - intro_1_html: |- - OpenStreetMap® sadrži otvorene podatke, licencirane pod Open Data - Commons Open Database License (ODbL) licencom od strane OpenStreetMap zaklade (OSMF). - intro_2_html: Slobodni ste kopirati, distribuirati, prenositi i adaptirati naÅ¡e - podatke, sve dok navodite OpenStreetMap i njegove doprinositelje kao izvor. - Ako izmijenite ili nadogradite naÅ¡e podatke, možete distribuirati rezultate - samo pod istom licencom. Puni pravni - tekst objaÅ¡njava vaÅ¡a prava i odgovornosti. - intro_3_html: Kartografija koja je prisutna u naÅ¡im sličicama karte i naÅ¡a dokumentacija - je pod Imenovanje-Dijeli - pod istim uvjetima 2.0 licencijom (CC BY-SA). - credit_title_html: Kako navoditi OpenStreetMap kao izvor - credit_1_html: |- - Zahtjevamo da istaknete zasluge “© OpenStreetMap - contributors”. - credit_2_html: |- - Također morate jasno naznačiti da su podaci dostupni po licenci Open Database Licence i, ako koristite naÅ¡e sličice karte, naznačiti da je kartografija licencirana pod CC BY-SA. Možete to učiniti postavljanjem poveznice na ovu stranicu sa autorskim pravima. - Alternativno, a kao nužna potreba ako distribuirate OSM samo u obliku podataka, možete postaviti poveznicu izravno na tekst licence/a. Ako oblik medija ne omogućuje koriÅ¡tenje poveznica (npr. printani radovi), predlažemo da uputite VaÅ¡e čitatelje na openstreetmap.org (označava točno adresu web stranice umjesto samo ime projekta - 'OpenStreetMap'), na opendatacommons.org i ako je potrebno na creativecommons.org. - attribution_example: - title: Primjer doprinosa - more_title_html: ViÅ¡e o - more_1_html: |- - Pročitaj viÅ¡e o koriÅ¡tenju naÅ¡ih podataka i kako iskazati zasluge na OSMF Licence stranici i zajednici Legal - FAQ. - more_2_html: |- - Iako su podaci karte OpenStreetMap slobodni podaci, ne možemo pružiti besplatni API (aplikacijsko programsko sučelje) za razvojne inženjere treće strane. - Vidi naÅ¡ API Usage Policy, - Tile Usage Policy - i Nominatim Usage Policy. - contributors_title_html: NaÅ¡i doprinositelji - contributors_intro_html: 'Sudionici projekta su tisuće individualaca. Projekt - također uključuje podatke pod slobodnim licencama od nacionalnih kartografskih - agencija i drugih izvora, među kojima su:' - contributors_ca_html: |- - Kanada: Sadrži podatke iz - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), i StatCan (Geography Division, - Statistics Canada). - contributors_nz_html: |- - Novi Zeland: Sadrži podatke izvorno iz - Land Information New Zealand. Crown Copyright reserved. - contributors_gb_html: |- - Velika Britanija: Sadrži podatke Ordnance - Survey data © Crown copyright and database right - 2010-12. - contributors_footer_2_html: " UvrÅ¡tenje podataka u OpenStreetMap ne podrazumjeva - da se izvorni\n davatelj podataka podržava OpenStreetMap, pruža bilo kakovo - jamstvo, ili \n prihvaća bilo kakve obveze." - welcome_page: - title: DobrodoÅ¡li! - whats_on_the_map: - title: Å to ova karta sadrži - basic_terms: - way_html: Put je linija ili područje, npr. cesta, potok, jezero - ili zgrada. - tag_html: Oznaka je dodatni podatak (metapodatak) o točki ili - putu, npr. ime restorana ili ograničenje brzine. - questions: - title: Ima li pitanja? - start_mapping: Počni kartirati - add_a_note: - title: NemaÅ¡ vremena za uređivanje? Dodaj biljeÅ¡ku! - paragraph_1_html: Ako želiÅ¡ samo napraviti malu doradu i nemaÅ¡ vremena za registraciju - i učenje pravila uređivanja, možeÅ¡ jednostavno dodati biljeÅ¡ku na kartu. - help_page: - welcome: - title: DobrodoÅ¡ao/la na OSM - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Hr:Beginners%27_guide - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: Dalje - copyright_html: ©OpenStreetMap
        doprinositelji - local_knowledge_title: Lokalno znanje - local_knowledge_html: OpenStreetMap pridodaje posebnu važnost lokalnom znanju. - Doprinositelji koriste zračne snimke, GNSS uređaje i vlastito novo-prikupljene - podatke za provjeru točnosti i ažurnosti OSM podataka. - open_data_title: Otvoreni podaci - open_data_html: 'OpenStreetMap sadrži slobodne podatke: možeÅ¡ ih slobodno - koristiti za bilo koju svrhu dok god su uz podatke naznačene zasluge OpenStreetMap-a - i njegovih doprinositelja. Ako izmjenjujeÅ¡ podatke ili stvaraÅ¡ nove na temelju - preuzetih podataka, te podatke možeÅ¡ distribuirati samo pod istom licencom. Vidi - stranicu:Autorska prava i licenca za detalje.' - partners_title: Partneri notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} je komentirao tvoj zapis u dnevnik' @@ -1188,6 +1032,88 @@ hr: delete: deleted: Poruka obrisana site: + about: + next: Dalje + copyright_html: ©OpenStreetMap
        doprinositelji + local_knowledge_title: Lokalno znanje + local_knowledge_html: OpenStreetMap pridodaje posebnu važnost lokalnom znanju. + Doprinositelji koriste zračne snimke, GNSS uređaje i vlastito novo-prikupljene + podatke za provjeru točnosti i ažurnosti OSM podataka. + open_data_title: Otvoreni podaci + open_data_html: 'OpenStreetMap sadrži slobodne podatke: možeÅ¡ ih slobodno + koristiti za bilo koju svrhu dok god su uz podatke naznačene zasluge OpenStreetMap-a + i njegovih doprinositelja. Ako izmjenjujeÅ¡ podatke ili stvaraÅ¡ nove na temelju + preuzetih podataka, te podatke možeÅ¡ distribuirati samo pod istom licencom. Vidi + stranicu:Autorska prava i licenca za detalje.' + partners_title: Partneri + copyright: + foreign: + title: O ovom prijevodu + text: U slučaju konflikta između ove prevedene stranice i %{english_original_link}, + Engleski stranice imaju prednost + english_link: Engleski izvornik + native: + title: O ovoj stranici + text: Vi gledate englesku verziju stranice o autorskim pravima. Možete se + vratiti na %{native_link} ove stranice ili možete prestati čitati o autorskim + pravima i %{mapping_link}. + native_link: hrvatsko izdanje + mapping_link: počnite kartirati + legal_babble: + title_html: Autorska prava i Dozvola + intro_1_html: |- + OpenStreetMap® sadrži otvorene podatke, licencirane pod Open Data + Commons Open Database License (ODbL) licencom od strane OpenStreetMap zaklade (OSMF). + intro_2_html: Slobodni ste kopirati, distribuirati, prenositi i adaptirati + naÅ¡e podatke, sve dok navodite OpenStreetMap i njegove doprinositelje kao + izvor. Ako izmijenite ili nadogradite naÅ¡e podatke, možete distribuirati + rezultate samo pod istom licencom. Puni pravni + tekst objaÅ¡njava vaÅ¡a prava i odgovornosti. + intro_3_html: Kartografija koja je prisutna u naÅ¡im sličicama karte i naÅ¡a + dokumentacija je pod Imenovanje-Dijeli + pod istim uvjetima 2.0 licencijom (CC BY-SA). + credit_title_html: Kako navoditi OpenStreetMap kao izvor + credit_1_html: |- + Zahtjevamo da istaknete zasluge “© OpenStreetMap + contributors”. + credit_2_html: |- + Također morate jasno naznačiti da su podaci dostupni po licenci Open Database Licence i, ako koristite naÅ¡e sličice karte, naznačiti da je kartografija licencirana pod CC BY-SA. Možete to učiniti postavljanjem poveznice na ovu stranicu sa autorskim pravima. + Alternativno, a kao nužna potreba ako distribuirate OSM samo u obliku podataka, možete postaviti poveznicu izravno na tekst licence/a. Ako oblik medija ne omogućuje koriÅ¡tenje poveznica (npr. printani radovi), predlažemo da uputite VaÅ¡e čitatelje na openstreetmap.org (označava točno adresu web stranice umjesto samo ime projekta - 'OpenStreetMap'), na opendatacommons.org i ako je potrebno na creativecommons.org. + attribution_example: + title: Primjer doprinosa + more_title_html: ViÅ¡e o + more_1_html: |- + Pročitaj viÅ¡e o koriÅ¡tenju naÅ¡ih podataka i kako iskazati zasluge na OSMF Licence stranici i zajednici Legal + FAQ. + more_2_html: |- + Iako su podaci karte OpenStreetMap slobodni podaci, ne možemo pružiti besplatni API (aplikacijsko programsko sučelje) za razvojne inženjere treće strane. + Vidi naÅ¡ API Usage Policy, + Tile Usage Policy + i Nominatim Usage Policy. + contributors_title_html: NaÅ¡i doprinositelji + contributors_intro_html: 'Sudionici projekta su tisuće individualaca. Projekt + također uključuje podatke pod slobodnim licencama od nacionalnih kartografskih + agencija i drugih izvora, među kojima su:' + contributors_ca_html: |- + Kanada: Sadrži podatke iz + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), i StatCan (Geography Division, + Statistics Canada). + contributors_nz_html: |- + Novi Zeland: Sadrži podatke izvorno iz + Land Information New Zealand. Crown Copyright reserved. + contributors_gb_html: |- + Velika Britanija: Sadrži podatke Ordnance + Survey data © Crown copyright and database right + 2010-12. + contributors_footer_2_html: " UvrÅ¡tenje podataka u OpenStreetMap ne podrazumjeva + da se izvorni\n davatelj podataka podržava OpenStreetMap, pruža bilo kakovo + jamstvo, ili \n prihvaća bilo kakve obveze." index: js_1: Koristite internet preglednik koji ne podržava JavaScript, ili vam je isključen JavaScript. @@ -1218,6 +1144,63 @@ hr: id_not_configured: iD nije konfiguriran no_iframe_support: Tvoj preglednik ne podržava HTML iframes, koji su potrebni za ovu značajku. + export: + title: Izvoz + area_to_export: Područje za export + manually_select: Ručno izaberi drukčije područje + format_to_export: Format za Export + osm_xml_data: OpenStreetMap XML podaci + map_image: Slika karte (prikazuje standardni sloj) + embeddable_html: HTML kod za umetanje + licence: Dozvola + export_details: OpenStreetMap podaci su licencirani pod Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Ako gornji izvoz podataka ne uspije, molim pokuÅ¡aj sa nekim od izvora + navedenih ispod:' + body: Ovo područje je preveliko da bi se izvezlo u OpenStreetMap XML formatu. + Molim približi prikaz ili odaberi manje područje ili odaberi jedan od izvora + navedenih ispod za preuzimanje velike količine podataka. + planet: + title: PlanetOSM + description: Redovno ažurirane kopije kompletne baze podataka OpenStreetMap-a + overpass: + title: Overpass API + description: Preuzmi iznad odabrano granično područje sa drugog servera + na kojem je identična kopija baze podataka OpenStreetMap-a + geofabrik: + title: Geofabrik Downloads + description: 'Redovno ažurirani podaci za izvoz: kontinenata, država i odabranih + gradova' + metro: + title: Metro Extracts + description: Izvoz za glavne svjetske gradove i njihovih obližnjih područja + other: + title: Drugi izvori + description: Dodatni izvori su navedeni na wiki stranici OpenStreetMap-a + options: Opcije + format: Format + scale: Mjerilo + max: max + image_size: Veličina slike + zoom: Približenje + add_marker: Dodaj marker na kartu + latitude: 'Lat:' + longitude: 'Lon:' + output: Izlaz + paste_html: Zalijepi HTML za ugrađivanje na web stranicu + export_button: Export + help: + welcome: + title: DobrodoÅ¡ao/la na OSM + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Hr:Beginners%27_guide + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: search_results: Rezultazi traženja close: Zatvori @@ -1307,6 +1290,23 @@ hr: image: Slika alt: Alternativni tekst url: URL + welcome: + title: DobrodoÅ¡li! + whats_on_the_map: + title: Å to ova karta sadrži + basic_terms: + way_html: Put je linija ili područje, npr. cesta, potok, + jezero ili zgrada. + tag_html: Oznaka je dodatni podatak (metapodatak) o točki + ili putu, npr. ime restorana ili ograničenje brzine. + questions: + title: Ima li pitanja? + start_mapping: Počni kartirati + add_a_note: + title: NemaÅ¡ vremena za uređivanje? Dodaj biljeÅ¡ku! + paragraph_1_html: Ako želiÅ¡ samo napraviti malu doradu i nemaÅ¡ vremena za + registraciju i učenje pravila uređivanja, možeÅ¡ jednostavno dodati biljeÅ¡ku + na kartu. trace: visibility: private: Privatni (prikazuje se kao anonimne, nespoložene točke) @@ -1426,7 +1426,7 @@ hr: blocked: Tvoj pristup API-u je blokiran. Prijavite se na web sučelje da saznate viÅ¡e. oauth: - oauthorize: + authorize: request_access: Aplikacija %{app_name} zahtjeva pristup vaÅ¡em korisničkom računu (%{user}). Provjerite želite li da aplikacija ima te mogućnosti, te odaberite koliko joj želite dopustiti. @@ -1823,7 +1823,7 @@ hr: confirm: Potvrdi fail: Nemogu opozvati ulogu `%{role}' iz korisnika `%{name}'. Molim provjerite jeli korisnik i uloga ispravno. - user_block: + user_blocks: model: non_moderator_update: Morate biti moderator da stovrite ili ažurirate blokadu. non_moderator_revoke: Morate biti moderator da opozovete blokadu. @@ -1881,20 +1881,6 @@ hr: period: one: 1 sat other: '%{count} sati' - partial: - show: Prikaži - edit: Uredi - revoke: Opozovi! - confirm: Jeste li sigurni? - display_name: Blokirani korisnik - creator_name: Tvorac - reason: Razlog za blokadu - status: Status - revoker_name: Opozvao - not_revoked: (nije opozvano) - showing_page: Stranica %{page} - next: Slijedeća » - previous: « Prethodna helper: time_future: ZavrÅ¡ava u %{time}. until_login: Aktivno dok se korsnik ne prijavi. @@ -1921,8 +1907,22 @@ hr: back: Prikaži sve blokade revoker: 'Opozivatelj:' needs_view: Korisnik se mora prijaviti prije nego se blokada očisti. - note: - description: + block: + not_revoked: (nije opozvano) + show: Prikaži + edit: Uredi + revoke: Opozovi! + blocks: + display_name: Blokirani korisnik + creator_name: Tvorac + reason: Razlog za blokadu + status: Status + revoker_name: Opozvao + showing_page: Stranica %{page} + next: Slijedeća » + previous: « Prethodna + notes: + comment: opened_at_html: Stvorena prije %{when} opened_at_by_html: Stvorio korisnik %{user} prije %{when} commented_at_html: Osvježena prije %{when} @@ -2040,7 +2040,7 @@ hr: offramp_right_with_name: Siđi sa autoceste desno na %{name} onramp_right_without_exit: Skreni desno na autocestu %{name} endofroad_right_without_exit: Na kraju ceste skreni desno na %{name} - redaction: + redactions: edit: description: Opis new: diff --git a/config/locales/hsb.yml b/config/locales/hsb.yml index b7d9cdbfd..f0a034cf1 100644 --- a/config/locales/hsb.yml +++ b/config/locales/hsb.yml @@ -331,54 +331,6 @@ hsb: ago: před %{ago} newer_comments: NowÅ¡e komentary older_comments: StarÅ¡e komentary - export: - title: Eksportować - start: - area_to_export: Wobłuk za eksport - manually_select: Druhi wobłuk manuelnje wubrać - format_to_export: Format za eksport - osm_xml_data: OpenStreetMap XML-daty - map_image: Kartowy wobraz (pokazuje standardnu runinu) - embeddable_html: Zasadźujomny HTML - licence: Licenca - export_details: Daty OpenStreetMap su pod licencu Open - Data Commons Open Database (ODbL). - too_large: - advice: 'Jeli horni eksport so njeradźi, proÅ¡u wuwaž, hač wužiwaÅ¡ jednu ze - slědowacych lisćinow:' - body: 'Tutón wobłuk je přewulki za eksportowanje jako XML-daty OpenStreetMap. - ProÅ¡u powjetÅ¡ abo wubjer mjeńši wobłuk abo wužij jedne ze slědowacych žórłow - za sćehnjenje wulkich mnóstwow datow:' - planet: - title: Planet OSM - description: Prawidłownje zaktualizowane kopije dospołneje datoweje banki - OpenStreetMap - overpass: - title: Overpass API - description: Tutón wobłuk ze Å¡piheloweho serwera datoweje banki OpenStreetMap - sćahnyć - geofabrik: - title: Geofabrik Downloads - description: Prawidłownje zaktualizowane wućahi kontinentow, krajow a wubranych - městow - metro: - title: Metro Extracts - description: Wućahi za najwjetÅ¡e swětowe města a jich wokoliny - other: - title: Druhe žórła - description: Přidatne žórła nalistowane na wikiju OpenStreetMap - options: Opcije - format: 'Format:' - scale: Měritko - max: maks. - image_size: 'Wobrazowa wulkosć:' - zoom: Skalowanje - add_marker: Marku karće přidać - latitude: 'Šěrokostnik:' - longitude: 'Dołhostnik:' - output: Wudaće - paste_html: HTML-kod kopěrować, zo by so do websydła zasunył - export_button: Eksport geocoder: search: title: @@ -956,235 +908,6 @@ hsb: text: Darić learn_more: DalÅ¡e informacije more: Wjace - license_page: - foreign: - title: Wo tutym přełožku - text: W padźe konflikta mjez přełoženej stronje a %{english_original_link}, - jendźelska strona dyrbi prioritatu měć - english_link: jendźelskim originalom - native: - title: Wo tutej stronje - text: WobhladujeÅ¡ sej jendźelsku wersiju strony awtorskeho prawa. MóžeÅ¡ so k - %{native_link} tuteje strony wróćić abo wo awtorskim prawje čitać a %{mapping_link}. - native_link: hornjoserbskej wersiji - mapping_link: kartěrowanje započeć - legal_babble: - title_html: Awtorske prawo a licenca - intro_1_html: |- - OpenStreetMap su zjawne daty, licencowane pod licencu Open Data - Commons Open Database (ODbL) wot załožby OpenStreetMap (OSMF). - intro_2_html: MóžeÅ¡ naÅ¡e daty kopěrować, rozdźělić, přenjesć a přiměrić, tak - dołho kaž OpenStreetMap a jich sobuskutkowacych naspominaÅ¡. Jeli změniÅ¡ naÅ¡e - daty abo zepěraÅ¡ so na nje, móžeÅ¡ wuslědk jenož pod samsnej licencu rozdźělić. - Dospołny prawniski - kod wujasnja twoje prawa a zamołwitosće. - intro_3_html: Kartografija w naÅ¡ich kartowych kachličkach a naÅ¡a dokumentacija - stej pod licencu Creative - Commons Attribution-ShareAlike 2.0 (CC-BY-SA) licencowanej. - credit_title_html: Kak awtorstwo OpenStreetMap naspomnić - credit_1_html: Žadamy sej, zo podawaÅ¡ sobuskutkowarjow “© OpenStreetMap”. - credit_2_html: DyrbiÅ¡ tež wujasnić, zo daty steja pod licencu Open Database, - a, jeli so naÅ¡e kartowe kachlicy wužiwaja, zo kartografija so pod CC-BY-SA - licencuje. MóžeÅ¡ to činić, wotkazujo do tuteje - strony awtorskeho prawa. Alternatiwnje, a jako žadanje, jeli rozdźělujeÅ¡ - OSM w datowym formje, móžeÅ¡ direktnje k licencam mjenować a wotkazać. W medijach, - hdźež wotkazy móžno njejsu (na př. wućišćane dźěła), namjetujemy ći, twojich - čitarjow na openstreetmap.org (snadź rozšěrjejo 'OpenStreetMap' k tutej połnej - adresy), na opendatacommons.org a, jeli to je relewantne, na creativecommons.org - skedźbnić. - credit_3_html: 'Za přepytujomnu elektronisku kartu měło so dźakprajenje w róžku - karty jewić. Na přikład:' - attribution_example: - alt: Přikład, kak so na webstronje na OpenStreetMap pokazuje - title: Připokazanski přikład - more_title_html: DalÅ¡e informacije - more_1_html: |- - Čitaj wjace wo wužiwanju naÅ¡ich datow a kak hodźi so nas přispomnić na stronje OSMF wo licencach a pod "Huste prawniske praÅ¡enja". - more_2_html: "Hačrunjež OpenStreetMap wobsteji ze zjawnych datow, njemóžemy - darmotny kartowy API za wuwiwarjow třećich poskićić. \nHlej naÅ¡e prawidła - za wužiwanje API, Prawidła - za wužiwanje polow a Prawidła - za wužiwanje Nominatim." - contributors_title_html: NaÅ¡i sobuskutkowacy - contributors_intro_html: 'NaÅ¡i sobuskutkowacy su tysacy wosobow. Zapřijimamy - tež daty wotewrjeneje licency z narodnych kartowanskich předewzaćow a druhich - žórłow, mjez nimi:' - contributors_at_html: 'Awstriska: Wobsahuje daty z Stadt - Wien (pod CC - BY), Land - Vorarlberg a Land Tirol (pod CC-BY - AT ze změnami).' - contributors_ca_html: 'Kanada: Wobsahuje daty z GeoBase®, - GeoGratis (© Department of Natural Resources Canada), CanVec (© - Department of Natural Resources Canada), a StatCan (Geography Division, Statistics - Canada).' - contributors_fi_html: 'Finska: Wobsahuje daty z topografiskeje - datoweje banki National Land Survey of Finland a druhich datowych sadźbow, - pod NLSFI-licencuFrancoska: Wobsahuje daty z Direction - Générale des Impôts.' - contributors_nl_html: 'Nižozemska: Wobsahuje daty © AND - data, 2007 (www.and.com)' - contributors_nz_html: 'Nowoseelandska: Wobsahuje daty ze žórłow - wot Land Information New Zealand. Awtorske prawo wuměnjene.' - contributors_si_html: 'Słowjenska: Wobsahuje daty ze zarjada - za krajměrjenje a kartěrowanje kaž tež z ministerstwa - za ratarstwo, lěsnistwo a zežiwjenje (zjawne informacije Słowjenskeje).' - contributors_za_html: 'Južna Afrika: Wobsahuje daty z Chief - Directorate: National Geo-Spatial Information, Statne awtorske prawo - wuměnjene.' - contributors_gb_html: 'Zjednoćene kralestwo: Wobsahuje daty - z Ordnance Survey (Zarjadniske krajměrjenstwo) © Awtorske prawo a prawo - za datowe banki 2010-2012.' - contributors_footer_1_html: Za dalÅ¡e podrobnosće za to a druhe žórła, kotrež - su so wužili, zo bychu OpenStreetMap polěpÅ¡ili, hlej proÅ¡u stronu - sobuskutkowarjow na wikiju OpenStreetMap. - contributors_footer_2_html: Zapřijimanje datow do OpenStreetMap njerěka, zo - poskićowar originalnych datow OpenStreetMap připóznawa, někajku garantiju - dodawa abo rukowanje přewozmje. - infringement_title_html: Přeńdźenje awtorskeho prawa - infringement_1_html: Sobuskutkowacych OSM namołwjamy, zo ženje daty ze žórłow, - kotrež su přez awtorske prawo Å¡kitane (na př. z Google Maps abo z wućišćanych - kartow) bjez wurazneje dowolnosće awtorow njepřidawaja. - infringement_2_html: Jeli měniÅ¡, zo awtorskoprawnisce Å¡kitany material je so - datowej bance OpenStreetMap abo tutomu sydłu bjez dowolnosće přidał, poćahuj - so proÅ¡u na naÅ¡e postupowanje - za wotstronjenje wobsahaabo zdźěl to direktnje na naÅ¡ej formularnej - stronje. - trademarks_title_html: markowe znamjo - trademarks_1_html: OpenStreetMap, logo z lupu a staw karty su registrowane znamjenja - załožby OpenStreetMap. MaÅ¡-li praÅ¡enja wo wužiwanju znamjo, pósćel je proÅ¡u - dźěłowej - skupinje "licency". - welcome_page: - title: Witaj! - introduction_html: Witaj k OpenstreetMap, swobodnej a wobdźěłujomnej karće swěta. - Nětko, po tym zo sy so zregistrował, móžeÅ¡ so do kartěrowanja dać. Tu je krótki - nawod z najwažniÅ¡imi informacijemi, kotrež dyrbiÅ¡ wědźeć. - whats_on_the_map: - title: Å tož na kartu słuÅ¡a - on_html: OpenStreetMap je městno za kartěrowanje wěcow, kotrež su realne - a aktualne - wobsahuje miliony twarjenjow, pućow a druhe podrobnosće - wo městnach. MóžeÅ¡ kartěrować, Å¡tožkuli će we woprawdźitym swěće zajimuje. - off_html: Å tož njema wobsahować, su subjektiwne daty kaž pohódnoćenja, - historiske abo hypotetiske funkcije a daty z přez awtorske prawo Å¡kitanych - žórłow. Njekopěruju z online- abo papjernych kartow, chibazo maÅ¡ wosebitu - dowolnosć. - basic_terms: - title: Zakładne zapřijeća za kartěrowanje - paragraph_1_html: OpenStreetMap někotre wosebite zapřijeća wužiwa. Tu su někotre - z nich, kotrež móhli ći wužitne być. - editor_html: Editor je program abo websydło, kotrež móžeÅ¡ wužiwać, - zo by kartu wobdźěłał. - node_html: Suk je dypk na karće, na př. hosćenc abo Å¡tom. - way_html: Puć je linija abo płonina, na př. dróha, rěka, jězor - abo twarjenje. - tag_html: Atribut je datowa kajkosć wo suku abo puću, na přikład - mjeno hosćenca abo najwyÅ¡a spěšnosć na hasy. - rules: - title: Prawidła! - paragraph_1_html: "OpenStreetMap ma jenož mało formelnych prawidłow, ale wočakujemy - wot wšěch wobdźělnikow, zo bychu ze zhromadźenstwom hromadźe dźěłali a komunikowali. - PlanujeÅ¡-li druhe činitosće hač wobdźěłanje z ruku, proÅ¡u přečitaj prawidła - wo importowanju - a \nautomatiskim - wobdźěłanju a měj so po nim." - questions: - title: MaÅ¡ hišće praÅ¡enja? - paragraph_1_html: |- - OpenStreetMap ma wÅ¡elake resursy za zeznaće projekta, praÅ¡enja a wotmołwy wo něčim a zhromadnu diskusiju a dokumentowanje kartěrowanske temy. - Pomoc. - start_mapping: Kartěrowanje započeć - add_a_note: - title: NimaÅ¡ chwile za wobdźěłowanje? Přidaj pokazku! - paragraph_1_html: Jeli chceÅ¡ jenož drobnosć korigować a nimaÅ¡ chwile, zo by - so zregistrował a wuknył, kak so wobdźěłuje, móžeÅ¡ prosće pokazku přidać. - paragraph_2_html: |- - Dźi prosće na kartu a klikń na symbol pokazki: - . Tón přida karće marku, kotruž móžeÅ¡ přesunyć. Přidaj swoju zdźělenku, klikń potom na Składować a druzy kartěrowarjo budu so wěcy wěnować. - fixthemap: - title: Problem zdźělić / Kartu poprawić - how_to_help: - title: Kak móžeÅ¡ pomhać - join_the_community: - title: Do zhromadźenstwa zastupić - explanation_html: Jeli sy problem z naÅ¡imi kartowymi datami pytnył, na přikład - dróha abo twoja adresa faluje, je najlěpÅ¡e waÅ¡nje, z tym pokročować, so - zhromadźenstwu OpenStreetMap přiidružić a sam daty přidać abo korigować. - add_a_note: - instructions_html: |- - Klikń prosće na abo na samsny symbol w zwobraznjenju karty. - To přida karće marku, kotruž móžeÅ¡ přez ćehnjenje přesunyć. - Přidaj swoju powěsć, klikń potom na Składować a druzy kartěrowarjo to přeslědźa. - other_concerns: - title: Druhe naležnosće - explanation_html: Jeli maÅ¡ wobmyslenja wo tym, kak so naÅ¡e daty wužiwaja abo - nastupajo wobsah, wopytaj naÅ¡u stronu awtorstwa za - dalÅ¡e zakonjowe informacije abo staj so z wotpowědnej dźěłowej - skupinu do zwiska. - help_page: - title: Wo pomoc prosyć - introduction: OpenStreetMap ma wÅ¡elake resursy za zeznaće projekta, praÅ¡enja a - wotmołwy wo něčim a zhromadnu diskusiju a dokumentowanje kartěrowanskich temow. - welcome: - url: /welcome - title: Witaj k OSM - description: Započń z tutym spěšnym nawodom, kotryž zakłady OpenStreetMap wobsahuje. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/hsb:Beginners%27_guide - title: Instrukcije za nowačkow - description: Přez zhromadźenstwo wothladowany nawod za započatkowarjow. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: PraÅ¡ej so za něčim abo pytaj za wotmołwami na stronje praÅ¡enjow - a wotmołwow OpenStreetMap. - mailing_lists: - title: Rozesyłanske lisćiny - description: Staj praÅ¡enje abo diskutuj zajimawe wěcy w šěrokim wobłuku temow - abo regionalnych rozesyłanskich lisćinow. - forums: - title: Forum - description: PraÅ¡enja a diskusije za tych, kotřiž powjerch čorneje deski preferuja. - irc: - title: IRC - description: Interaktiwny chat we wÅ¡elakich rěčach a wo wjele temach. - switch2osm: - title: Přeńć k OSM - description: Pomoc za předewzaća a organizacije, kotrež na kartach a druhich - słužbach bazuja a k OpenStreetMap přeńdu. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Přepytaj wiki za nadrobnej OSM-dokumentaciju - about_page: - next: Dale - copyright_html: © sobuskutkowacy
        OpenStreetMap - used_by: '%{name} staja kartowe daty za tysacy websydłow, mobilne nałoženja a - graty k dispoziciji' - lede_text: OpenStreetMap twori so wot zhromadźenstwa kartěrowarjow, kotřiž daty - wo hasach, pućach, kofejownjach, dwórnišćach a wjele wjace na cyłym swěće přinoÅ¡uja - a hladaja. - local_knowledge_title: Lokalna wěda - local_knowledge_html: OpenStreetMap kładźe wažnosć na lokalnu wědu. Sobuskutkowacy - wužiwaja powětrowe wobrazy, GPS-graty a pólne karty, zo bychu přepruwowali, - zo by OSM je dokładny a aktualny. - community_driven_title: Wot zhromadźenstwa spěchowany - community_driven_html: |- - Zhromadźenstwo OpenStreetMap je wÅ¡elakore, rozpalite a rosće kóždy dźeń. - NaÅ¡i sobuskutkowacy su zahorići kartěrowarjo, GIS-profijo, inženjerojo, kotřiž OSM-serwery ćěrja, pomocnicy, kotřiž kónčiny katastrofow kartěruja a wjele wjace. - Zo by wjace wo zhromadźenstwje zhonił, hlej wužiwarske dźeniki, blogi zhromadźenstwa a websydło załožby OSM Foundation - open_data_title: Zjawne daty - open_data_html: 'OpenStreetMap wobsahuje zjawne daty: MóžeÅ¡ je za kóždy - zaměr wužiwać, dołhož OpenStreetMap a jeho sobuskutkowacych naspomnjeÅ¡. Jeli - daty na wěste waÅ¡nje změniÅ¡ abo wutworiÅ¡, móžeÅ¡ wuslědk jenož pod samsnej licencu - rozdźělić.Hlej stronu awtorskeho prawa a licency - za podrobnosće.' - legal_title: Prawniske pokiwy - partners_title: Partnerojo notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} je twój dźenikowy zapisk komentował' @@ -1376,6 +1099,134 @@ hsb: delete: deleted: Powěsć zničena site: + about: + next: Dale + copyright_html: © sobuskutkowacy
        OpenStreetMap + used_by: '%{name} staja kartowe daty za tysacy websydłow, mobilne nałoženja + a graty k dispoziciji' + lede_text: OpenStreetMap twori so wot zhromadźenstwa kartěrowarjow, kotřiž daty + wo hasach, pućach, kofejownjach, dwórnišćach a wjele wjace na cyłym swěće + přinoÅ¡uja a hladaja. + local_knowledge_title: Lokalna wěda + local_knowledge_html: OpenStreetMap kładźe wažnosć na lokalnu wědu. Sobuskutkowacy + wužiwaja powětrowe wobrazy, GPS-graty a pólne karty, zo bychu přepruwowali, + zo by OSM je dokładny a aktualny. + community_driven_title: Wot zhromadźenstwa spěchowany + community_driven_html: |- + Zhromadźenstwo OpenStreetMap je wÅ¡elakore, rozpalite a rosće kóždy dźeń. + NaÅ¡i sobuskutkowacy su zahorići kartěrowarjo, GIS-profijo, inženjerojo, kotřiž OSM-serwery ćěrja, pomocnicy, kotřiž kónčiny katastrofow kartěruja a wjele wjace. + Zo by wjace wo zhromadźenstwje zhonił, hlej wužiwarske dźeniki, blogi zhromadźenstwa a websydło załožby OSM Foundation + open_data_title: Zjawne daty + open_data_html: 'OpenStreetMap wobsahuje zjawne daty: MóžeÅ¡ je za kóždy + zaměr wužiwać, dołhož OpenStreetMap a jeho sobuskutkowacych naspomnjeÅ¡. Jeli + daty na wěste waÅ¡nje změniÅ¡ abo wutworiÅ¡, móžeÅ¡ wuslědk jenož pod samsnej + licencu rozdźělić.Hlej stronu awtorskeho prawa + a licency za podrobnosće.' + legal_title: Prawniske pokiwy + partners_title: Partnerojo + copyright: + foreign: + title: Wo tutym přełožku + text: W padźe konflikta mjez přełoženej stronje a %{english_original_link}, + jendźelska strona dyrbi prioritatu měć + english_link: jendźelskim originalom + native: + title: Wo tutej stronje + text: WobhladujeÅ¡ sej jendźelsku wersiju strony awtorskeho prawa. MóžeÅ¡ so + k %{native_link} tuteje strony wróćić abo wo awtorskim prawje čitać a %{mapping_link}. + native_link: hornjoserbskej wersiji + mapping_link: kartěrowanje započeć + legal_babble: + title_html: Awtorske prawo a licenca + intro_1_html: |- + OpenStreetMap su zjawne daty, licencowane pod licencu Open Data + Commons Open Database (ODbL) wot załožby OpenStreetMap (OSMF). + intro_2_html: MóžeÅ¡ naÅ¡e daty kopěrować, rozdźělić, přenjesć a přiměrić, tak + dołho kaž OpenStreetMap a jich sobuskutkowacych naspominaÅ¡. Jeli změniÅ¡ + naÅ¡e daty abo zepěraÅ¡ so na nje, móžeÅ¡ wuslědk jenož pod samsnej licencu + rozdźělić. Dospołny prawniski + kod wujasnja twoje prawa a zamołwitosće. + intro_3_html: Kartografija w naÅ¡ich kartowych kachličkach a naÅ¡a dokumentacija + stej pod licencu Creative + Commons Attribution-ShareAlike 2.0 (CC-BY-SA) licencowanej. + credit_title_html: Kak awtorstwo OpenStreetMap naspomnić + credit_1_html: Žadamy sej, zo podawaÅ¡ sobuskutkowarjow “© OpenStreetMap”. + credit_2_html: DyrbiÅ¡ tež wujasnić, zo daty steja pod licencu Open Database, + a, jeli so naÅ¡e kartowe kachlicy wužiwaja, zo kartografija so pod CC-BY-SA + licencuje. MóžeÅ¡ to činić, wotkazujo do tuteje + strony awtorskeho prawa. Alternatiwnje, a jako žadanje, jeli rozdźělujeÅ¡ + OSM w datowym formje, móžeÅ¡ direktnje k licencam mjenować a wotkazać. W + medijach, hdźež wotkazy móžno njejsu (na př. wućišćane dźěła), namjetujemy + ći, twojich čitarjow na openstreetmap.org (snadź rozšěrjejo 'OpenStreetMap' + k tutej połnej adresy), na opendatacommons.org a, jeli to je relewantne, + na creativecommons.org skedźbnić. + credit_3_html: 'Za přepytujomnu elektronisku kartu měło so dźakprajenje w + róžku karty jewić. Na přikład:' + attribution_example: + alt: Přikład, kak so na webstronje na OpenStreetMap pokazuje + title: Připokazanski přikład + more_title_html: DalÅ¡e informacije + more_1_html: |- + Čitaj wjace wo wužiwanju naÅ¡ich datow a kak hodźi so nas přispomnić na stronje OSMF wo licencach a pod "Huste prawniske praÅ¡enja". + more_2_html: "Hačrunjež OpenStreetMap wobsteji ze zjawnych datow, njemóžemy + darmotny kartowy API za wuwiwarjow třećich poskićić. \nHlej naÅ¡e prawidła + za wužiwanje API, Prawidła + za wužiwanje polow a Prawidła + za wužiwanje Nominatim." + contributors_title_html: NaÅ¡i sobuskutkowacy + contributors_intro_html: 'NaÅ¡i sobuskutkowacy su tysacy wosobow. Zapřijimamy + tež daty wotewrjeneje licency z narodnych kartowanskich předewzaćow a druhich + žórłow, mjez nimi:' + contributors_at_html: 'Awstriska: Wobsahuje daty z Stadt + Wien (pod CC + BY), Land + Vorarlberg a Land Tirol (pod CC-BY + AT ze změnami).' + contributors_ca_html: 'Kanada: Wobsahuje daty z GeoBase®, + GeoGratis (© Department of Natural Resources Canada), CanVec (© + Department of Natural Resources Canada), a StatCan (Geography Division, + Statistics Canada).' + contributors_fi_html: 'Finska: Wobsahuje daty z topografiskeje + datoweje banki National Land Survey of Finland a druhich datowych sadźbow, + pod NLSFI-licencuFrancoska: Wobsahuje daty z Direction + Générale des Impôts.' + contributors_nl_html: 'Nižozemska: Wobsahuje daty © + AND data, 2007 (www.and.com)' + contributors_nz_html: 'Nowoseelandska: Wobsahuje daty ze + žórłow wot Land Information New Zealand. Awtorske prawo wuměnjene.' + contributors_si_html: 'Słowjenska: Wobsahuje daty ze zarjada + za krajměrjenje a kartěrowanje kaž tež z ministerstwa + za ratarstwo, lěsnistwo a zežiwjenje (zjawne informacije Słowjenskeje).' + contributors_za_html: 'Južna Afrika: Wobsahuje daty z Chief Directorate: National Geo-Spatial + Information, Statne awtorske prawo wuměnjene.' + contributors_gb_html: 'Zjednoćene kralestwo: Wobsahuje daty + z Ordnance Survey (Zarjadniske krajměrjenstwo) © Awtorske prawo a prawo + za datowe banki 2010-2012.' + contributors_footer_1_html: Za dalÅ¡e podrobnosće za to a druhe žórła, kotrež + su so wužili, zo bychu OpenStreetMap polěpÅ¡ili, hlej proÅ¡u stronu + sobuskutkowarjow na wikiju OpenStreetMap. + contributors_footer_2_html: Zapřijimanje datow do OpenStreetMap njerěka, zo + poskićowar originalnych datow OpenStreetMap připóznawa, někajku garantiju + dodawa abo rukowanje přewozmje. + infringement_title_html: Přeńdźenje awtorskeho prawa + infringement_1_html: Sobuskutkowacych OSM namołwjamy, zo ženje daty ze žórłow, + kotrež su přez awtorske prawo Å¡kitane (na př. z Google Maps abo z wućišćanych + kartow) bjez wurazneje dowolnosće awtorow njepřidawaja. + infringement_2_html: Jeli měniÅ¡, zo awtorskoprawnisce Å¡kitany material je + so datowej bance OpenStreetMap abo tutomu sydłu bjez dowolnosće přidał, + poćahuj so proÅ¡u na naÅ¡e postupowanje + za wotstronjenje wobsahaabo zdźěl to direktnje na naÅ¡ej formularnej + stronje. + trademarks_title_html: markowe znamjo + trademarks_1_html: OpenStreetMap, logo z lupu a staw karty su registrowane + znamjenja załožby OpenStreetMap. MaÅ¡-li praÅ¡enja wo wužiwanju znamjo, pósćel + je proÅ¡u dźěłowej + skupinje "licency". index: js_1: Pak wužiwaÅ¡ wobhladowak, kotryž JavaScript njepodpěruje, pak sy JavaScript znjemóžnił. @@ -1407,6 +1258,110 @@ hsb: id_not_configured: iD njeje so konfigurował no_iframe_support: Twó wobhladowak njepodpěruje iframe-elementy, kotrež su za tutu funkciju trěbne. + export: + title: Eksportować + area_to_export: Wobłuk za eksport + manually_select: Druhi wobłuk manuelnje wubrać + format_to_export: Format za eksport + osm_xml_data: OpenStreetMap XML-daty + map_image: Kartowy wobraz (pokazuje standardnu runinu) + embeddable_html: Zasadźujomny HTML + licence: Licenca + export_details: Daty OpenStreetMap su pod licencu Open + Data Commons Open Database (ODbL). + too_large: + advice: 'Jeli horni eksport so njeradźi, proÅ¡u wuwaž, hač wužiwaÅ¡ jednu ze + slědowacych lisćinow:' + body: 'Tutón wobłuk je přewulki za eksportowanje jako XML-daty OpenStreetMap. + ProÅ¡u powjetÅ¡ abo wubjer mjeńši wobłuk abo wužij jedne ze slědowacych žórłow + za sćehnjenje wulkich mnóstwow datow:' + planet: + title: Planet OSM + description: Prawidłownje zaktualizowane kopije dospołneje datoweje banki + OpenStreetMap + overpass: + title: Overpass API + description: Tutón wobłuk ze Å¡piheloweho serwera datoweje banki OpenStreetMap + sćahnyć + geofabrik: + title: Geofabrik Downloads + description: Prawidłownje zaktualizowane wućahi kontinentow, krajow a wubranych + městow + metro: + title: Metro Extracts + description: Wućahi za najwjetÅ¡e swětowe města a jich wokoliny + other: + title: Druhe žórła + description: Přidatne žórła nalistowane na wikiju OpenStreetMap + options: Opcije + format: 'Format:' + scale: Měritko + max: maks. + image_size: 'Wobrazowa wulkosć:' + zoom: Skalowanje + add_marker: Marku karće přidać + latitude: 'Šěrokostnik:' + longitude: 'Dołhostnik:' + output: Wudaće + paste_html: HTML-kod kopěrować, zo by so do websydła zasunył + export_button: Eksport + fixthemap: + title: Problem zdźělić / Kartu poprawić + how_to_help: + title: Kak móžeÅ¡ pomhać + join_the_community: + title: Do zhromadźenstwa zastupić + explanation_html: Jeli sy problem z naÅ¡imi kartowymi datami pytnył, na přikład + dróha abo twoja adresa faluje, je najlěpÅ¡e waÅ¡nje, z tym pokročować, so + zhromadźenstwu OpenStreetMap přiidružić a sam daty přidać abo korigować. + add_a_note: + instructions_html: |- + Klikń prosće na abo na samsny symbol w zwobraznjenju karty. + To přida karće marku, kotruž móžeÅ¡ přez ćehnjenje přesunyć. + Přidaj swoju powěsć, klikń potom na Składować a druzy kartěrowarjo to přeslědźa. + other_concerns: + title: Druhe naležnosće + explanation_html: Jeli maÅ¡ wobmyslenja wo tym, kak so naÅ¡e daty wužiwaja abo + nastupajo wobsah, wopytaj naÅ¡u stronu awtorstwa + za dalÅ¡e zakonjowe informacije abo staj so z wotpowědnej dźěłowej + skupinu do zwiska. + help: + title: Wo pomoc prosyć + introduction: OpenStreetMap ma wÅ¡elake resursy za zeznaće projekta, praÅ¡enja + a wotmołwy wo něčim a zhromadnu diskusiju a dokumentowanje kartěrowanskich + temow. + welcome: + url: /welcome + title: Witaj k OSM + description: Započń z tutym spěšnym nawodom, kotryž zakłady OpenStreetMap + wobsahuje. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/hsb:Beginners%27_guide + title: Instrukcije za nowačkow + description: Přez zhromadźenstwo wothladowany nawod za započatkowarjow. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: PraÅ¡ej so za něčim abo pytaj za wotmołwami na stronje praÅ¡enjow + a wotmołwow OpenStreetMap. + mailing_lists: + title: Rozesyłanske lisćiny + description: Staj praÅ¡enje abo diskutuj zajimawe wěcy w šěrokim wobłuku temow + abo regionalnych rozesyłanskich lisćinow. + forums: + title: Forum + description: PraÅ¡enja a diskusije za tych, kotřiž powjerch čorneje deski preferuja. + irc: + title: IRC + description: Interaktiwny chat we wÅ¡elakich rěčach a wo wjele temach. + switch2osm: + title: Přeńć k OSM + description: Pomoc za předewzaća a organizacije, kotrež na kartach a druhich + słužbach bazuja a k OpenStreetMap přeńdu. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Přepytaj wiki za nadrobnej OSM-dokumentaciju sidebar: search_results: Pytanske wuslědki close: Začinić @@ -1501,6 +1456,52 @@ hsb: image: Wobraz alt: Alternatiwny tekst url: URL + welcome: + title: Witaj! + introduction_html: Witaj k OpenstreetMap, swobodnej a wobdźěłujomnej karće swěta. + Nětko, po tym zo sy so zregistrował, móžeÅ¡ so do kartěrowanja dać. Tu je krótki + nawod z najwažniÅ¡imi informacijemi, kotrež dyrbiÅ¡ wědźeć. + whats_on_the_map: + title: Å tož na kartu słuÅ¡a + on_html: OpenStreetMap je městno za kartěrowanje wěcow, kotrež su realne + a aktualne - wobsahuje miliony twarjenjow, pućow a druhe podrobnosće + wo městnach. MóžeÅ¡ kartěrować, Å¡tožkuli će we woprawdźitym swěće zajimuje. + off_html: Å tož njema wobsahować, su subjektiwne daty kaž pohódnoćenja, + historiske abo hypotetiske funkcije a daty z přez awtorske prawo Å¡kitanych + žórłow. Njekopěruju z online- abo papjernych kartow, chibazo maÅ¡ wosebitu + dowolnosć. + basic_terms: + title: Zakładne zapřijeća za kartěrowanje + paragraph_1_html: OpenStreetMap někotre wosebite zapřijeća wužiwa. Tu su někotre + z nich, kotrež móhli ći wužitne być. + editor_html: Editor je program abo websydło, kotrež móžeÅ¡ + wužiwać, zo by kartu wobdźěłał. + node_html: Suk je dypk na karće, na př. hosćenc abo Å¡tom. + way_html: Puć je linija abo płonina, na př. dróha, rěka, + jězor abo twarjenje. + tag_html: Atribut je datowa kajkosć wo suku abo puću, na + přikład mjeno hosćenca abo najwyÅ¡a spěšnosć na hasy. + rules: + title: Prawidła! + paragraph_1_html: "OpenStreetMap ma jenož mało formelnych prawidłow, ale wočakujemy + wot wšěch wobdźělnikow, zo bychu ze zhromadźenstwom hromadźe dźěłali a komunikowali. + PlanujeÅ¡-li druhe činitosće hač wobdźěłanje z ruku, proÅ¡u přečitaj prawidła + wo importowanju + a \nautomatiskim + wobdźěłanju a měj so po nim." + questions: + title: MaÅ¡ hišće praÅ¡enja? + paragraph_1_html: |- + OpenStreetMap ma wÅ¡elake resursy za zeznaće projekta, praÅ¡enja a wotmołwy wo něčim a zhromadnu diskusiju a dokumentowanje kartěrowanske temy. + Pomoc. + start_mapping: Kartěrowanje započeć + add_a_note: + title: NimaÅ¡ chwile za wobdźěłowanje? Přidaj pokazku! + paragraph_1_html: Jeli chceÅ¡ jenož drobnosć korigować a nimaÅ¡ chwile, zo by + so zregistrował a wuknył, kak so wobdźěłuje, móžeÅ¡ prosće pokazku přidać. + paragraph_2_html: |- + Dźi prosće na kartu a klikń na symbol pokazki: + . Tón přida karće marku, kotruž móžeÅ¡ přesunyć. Přidaj swoju zdźělenku, klikń potom na Składować a druzy kartěrowarjo budu so wěcy wěnować. trace: visibility: private: Priwatna (jenož jako anonymna, njezrjadowane dypki ) @@ -1632,7 +1633,7 @@ hsb: so k webpowjerchej, zo by sej wuměnjenja za sobuskutkowacych wobhladał. NjetrjebaÅ¡ přezjedny być, dyrbiÅ¡ sej je jenož wobhladać. oauth: - oauthorize: + authorize: title: Přistup na twoje konto awtorizować request_access: Aplikacija %{app_name} prosy wo přistup na twoje konto, %{user}. ProÅ¡u rozsudź, hač aplikacija ma slědowace prawa měć. MóžeÅ¡ wšě abo jenož @@ -1646,11 +1647,11 @@ hsb: allow_write_gpx: GPS-ćěrje nahrać. allow_write_notes: pokazki změnić. grant_access: Přistup dać - oauthorize_success: + authorize_success: title: Awtorizowanske napraÅ¡owanje dowolene allowed: Sy přistup nałoženja %{app_name} na twoje konto dowolił. verification: Přepruwowanski kod je %{code}. - oauthorize_failure: + authorize_failure: title: Awtorizowanske napřaÅ¡owanje je so njeporadźiło denied: Sy přistup nałoženja %{app_name} na twoje konto wotpokazał. invalid: Awtorizaciski token płaćiwy njeje. @@ -2077,7 +2078,7 @@ hsb: confirm: Wobkrućić fail: Njebě móžno rólu "%{role} wužiwarjej "%{name}" preč wzać. ProÅ¡u skontroluj, hačj wužiwar kaž tež róla stej płaćiwej. - user_block: + user_blocks: model: non_moderator_update: DyrbiÅ¡ moderator być, zo by blokowanje wudźělił abo aktualizował. non_moderator_revoke: DyrbiÅ¡ moderator być, zo by blokowanje zběhnył. @@ -2140,20 +2141,6 @@ hsb: one: 1 hodźina two: '%{count} hodźinje' other: '%{count} hodźin' - partial: - show: Pokazać - edit: Wobdźěłać - revoke: Zběhnyć! - confirm: ChceÅ¡ woprawdźe? - display_name: Zablokowany wužiwar - creator_name: Blokowar - reason: Přičina za blokowanje - status: Status - revoker_name: Zběhnjene wot - not_revoked: (njezběhnjeny) - showing_page: Strona %{page} - next: Přichodny » - previous: « Předchadny helper: time_future: Kónči so %{time}. until_login: Aktiwne, doniž so wužiwar njepřizjewja. @@ -2182,8 +2169,22 @@ hsb: back: Wšě blokowanja pokazać revoker: 'Zeběracy wužiwar:' needs_view: Wužiwar dyrbi so přizjewić, prjedy hač tute blokowanje so zběhnje. - note: - description: + block: + not_revoked: (njezběhnjeny) + show: Pokazać + edit: Wobdźěłać + revoke: Zběhnyć! + blocks: + display_name: Zablokowany wužiwar + creator_name: Blokowar + reason: Přičina za blokowanje + status: Status + revoker_name: Zběhnjene wot + showing_page: Strona %{page} + next: Přichodny » + previous: « Předchadny + notes: + comment: opened_at_html: Před %{when} wutworjeny opened_at_by_html: Před %{when} wot %{user} wutworjeny commented_at_html: Před %{when} zaktualizowany @@ -2337,7 +2338,7 @@ hsb: nothing_found: Žane funkcije namakane error: 'Zmylk při kontaktowanju %{server}: %{error}' timeout: Čas překročowany při kontaktowanju %{server} - redaction: + redactions: edit: description: Wopisanje heading: Redakciju wobdźěłać diff --git a/config/locales/hu.yml b/config/locales/hu.yml index a8171eb2d..25827211b 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -253,7 +253,7 @@ hu: list: title: Módosításcsomagok title_user: '%{user} módosításcsomagjai' - title_friend: Ismerőseid módosításcsomagjai + title_friend: Ismerőseim módosításcsomagjai title_nearby: Közeli felhasználók módosításcsomagjai empty: Nincs módosításcsomag empty_area: Nincs módosításcsomag erre a területre. @@ -283,7 +283,7 @@ hu: user_title: '%{user} naplója' in_language_title: Naplóbejegyzések %{language} nyelven new: Új naplóbejegyzés - new_title: Új naplóbejegyzés írása a felhasználói naplóba + new_title: Új bejegyzés írása a felhasználói naplómba no_entries: Nincsenek naplóbejegyzések recent_entries: Legutóbbi naplóbejegyzések older_entries: Régebbi bejegyzések @@ -350,53 +350,6 @@ hu: ago: '%{ago} idővel ezelőtt' newer_comments: Úabb hozzászólások older_comments: Régebbi hozzászólások - export: - title: Exportálás - start: - area_to_export: Exportálandó terület - manually_select: Más terület kézi kijelölése - format_to_export: Exportálás formátuma - osm_xml_data: OpenStreetMap XML adat - map_image: Térkép (Alapértelmezett réteg) - embeddable_html: Beágyazható HTML - licence: Licenc - export_details: Az OpenStreetMap adatokra az Open - Data Commons Open Database licenc vonatkozik. (ODbL) - too_large: - advice: Ha a fenti exportálás sikertelen lenne, próbáld meg az alábbi listából - valamelyik lehetőséget. - body: Ez a terület túl nagy ahhoz, hogy exportálásra kerüljön OpenStreetMap - XML adatként. Közelíts, vagy jelölj ki kisebb területet. Esetleg használd - az alábbi listából valamelyik nagy adatmennyiségek letöltését támogató módszert. - planet: - title: Planet OSM - description: A teljes OpenStreetMap adatbázis rendszeresen frissített másolatai - overpass: - title: Overpass API - description: A megjelenített befoglaló keret letöltése egy OpenStreetMap - tükörserverről - geofabrik: - title: Geofabrik letöltések - description: Kontinensek, országok és kiválasztott városok rendszeresen - frissített kivonata - metro: - title: Metro Extracts - description: A főbb városok, valamint a környező területek kivonatai - other: - title: Más források - description: További források az OpenStreetMap wiki oldalán találhatók - options: Beállítások - format: 'Formátum:' - scale: Méretarány - max: max. - image_size: Képméret - zoom: Nagyítási szint - add_marker: Jelölő hozzáadása a térképhez - latitude: 'Földrajzi szélesség:' - longitude: 'Földrajzi hosszúság:' - output: Kimenet - paste_html: Webhelyekbe való beágyazáshoz illeszd be a HTML kódot - export_button: Exportálás geocoder: search: title: @@ -733,7 +686,7 @@ hu: government: Kormányzati hivatal insurance: Biztosítási iroda lawyer: Ügyvéd - ngo: Nem kormányzati iroda + ngo: Civil szervezet irodája telecommunication: Távközlési iroda travel_agent: Utazási iroda "yes": Iroda @@ -969,257 +922,6 @@ hu: text: Adományozz learn_more: További info more: Több - license_page: - foreign: - title: Erről a fordításról - text: Abban az esetben, ha ez a lefordított oldal és %{english_original_link} - eltér egymástól, akkor az angol nyelvű oldal élvez elsőbbséget - english_link: az eredeti angol nyelvű - native: - title: Erről az oldalról - text: Jelenleg a szerzői jogi oldal angol nyelvű változatát látod. Visszaléphetsz - ezen oldal %{native_link}, vagy befejezheted a szerzői jogról szóló oldal - olvasását, és %{mapping_link}. - native_link: magyar nyelvű változatára - mapping_link: kezdheted a térképezést - legal_babble: - title_html: Szerzői jog és licenc - intro_1_html: |- - Az OpenStreetMap® egy szabad adathalmaz, amelyet az Open Data - Commons Open Database License licenc (ODbL) alatt tett közzé az OpenStreetMap Alapítvány (OSMF). - intro_2_html: |2- - Szabadon másolhatod, terjesztheted, továbbíthatod és átdolgozhatod adatainkat mindaddig, amíg feltünteted az OpenStreetMapot és közreműködőit. Ha módosítod vagy felhasználod az adatainkat, akkor az eredményt is csak azonos licenccel terjesztheted. A teljes jogi - szabályzat ismerteti a jogaidat és kötelezettségeidet. - intro_3_html: |2- - Az OpenStreetMap térképeire a Creative - Commons Nevezd meg! - Így add tovább! 2.0 licenc (CC BY-SA) vonatkozik. - credit_title_html: Hogyan kell feltüntetned az OpenStreetMapot? - credit_1_html: Kérjük, hogy forrásként a “© OpenStreetMap közreműködők” - szöveget tüntesd fel. - credit_2_html: Azt is egyértelművé kell tenned, hogy az adatok az Open Database - Licenc alatt elérhetőek, illetve ha a mi térkép csempéinket használod akkor - azt, hogy a grafikai megjelenítés a CC BY-SA licenc feltételeivel használható. - Ezt megteheted egy erre a copyright - oldalra való hivatkozással. Alternatívaként, ha az OSM-et adatokként terjeszted, - akkor fel kell tüntetned a nevet és linket közvetlenül a licencre. Ha a formátum - a linkelést nem teszi lehetővé (pl. nyomtatásban), javasoljuk, hogy a felhasználókat - irányítsd az openstreetmap.org címre (esetlegesen az "OpenStreetMap" szót - kiegészítve erre a teljes címre), és az opendatacommons.org címre, illetve - - ha szükséges - a creativecommons.org címre. - credit_3_html: |- - Böngészhető elektronikus térkép esetén a forrásra vonatkozó hivatkozás jelenjen meg a térkép sarkában. - Például: - attribution_example: - alt: Példa arra, hogyan jelenjen meg az OpenStreetMap-re való hivatkozás egy - weboldalon - title: Példa egy hivatkozásra - more_title_html: Tudj meg többet! - more_1_html: |- - További információ adataink használatáról az OSMF Licenc lapon. - more_2_html: |- - Habár az OpenStreetMap egy nyílt adatforrás, nem tudunk ingyenes térkép API elérést biztosítani a harmadik feleknek. - - Lásd az API Felhasználási Irányelveinket, a Csempe Felhasználási Irányelveinket és a Nominatim Felhasználási Irányelveinket. - contributors_title_html: Közreműködőink - contributors_intro_html: 'Többszáz egyéni közreműködőnk van. További, szabadon - elérhető adatokat is felhasználunk nemzeti térkép intézetektől és más forrásokból, - többek között:' - contributors_at_html: |- - Ausztria: adatokat tartalmaz a következő forrásból: - Bécs városa - CC BY licenc alatt. - contributors_ca_html: |- - Kanada: adatokat tartalmaz a következő forrásokból: - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), and StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: "Finnország: Adatokat tartalmaz a következő - forrásokból: \nNational Land Survey of Finland's Topographic Database\nés - más adatforrások NLSFI - licenc alatt." - contributors_fr_html: |- - France: adatokat tartalmaz a következő forrásból: - Direction Générale des Impôts. - contributors_nl_html: |- - Hollandia: adatokat tartalmaz innen: Automotive Navigation Data, 2007 - (www.and.com) - contributors_nz_html: |- - Új-Zéland: adatokat tartalmaz a következő forrásból: - Land Information New Zealand. Szerzői jog fenntartva. - contributors_si_html: 'Szlovénia: Tartalmaz adatokat a Földmérési - és Térképészeti Hatóságtól és a Földművelési, - Erdőgazdálkodási és Élelmezésügyi Minisztériumtól (nyilvános információk - Szlovéniában).' - contributors_za_html: |- - Dél-Afrika: tartalmaz olyan adatokat, amik a - Chief Directorate: - National Geo-Spatial Information-tól származnak, az állami szerzői jogok fenntartva. - contributors_gb_html: "Egyesült Királyság: Térképészeti Szolgálat - adatokat © Királyi szerzői és adatbázisjog \n2010 - 12." - contributors_footer_1_html: |- - További részletekért, és az OpenStreetMap javításához használt más forrásokról, - kérjük, olvassa el a hozzájárulók oldalát - az OpenStreetMap wikin. - contributors_footer_2_html: |2- - Az adatok befoglalása az OpenStreetMapba nem jelenti azt, hogy az eredeti - adatszolgáltató támogatja az OpenStreetMapot, nyújt garanciát vagy - vállal rá felelősséget. - infringement_title_html: Copyright megsértése - infringement_1_html: |2- - Az OSM közreműködői emlékeztetve lettek arra, hogy soha ne adjanak hozzá adatokat egyetlen - szerzői jogvédett forrásból se (pl. Google Térkép vagy nyomtatott térképek) a - szerzői jog tulajdonosának kifejezett engedélye nélkül. - infringement_2_html: |- - Ha úgy gondolod, hogy jogvédett anyag került jogszerűtlenül az OpenStreetMap adatbázisba vagy erre a weblapra, kérjük olvasd el az eltávolítási - folyamat leírását vagy jelentsd be közvetlenül az - online bejelentő oldalon. - trademarks_title_html: Védjegyek - trademarks_1_html: Az OpenStreetMap, a nagyító ikon és a State of the Map az - OpenStreetMap Foundation bejegyzett védjegyei. Ha kérdésed van ezek felhasználásával - kapcsolatban, kérlek tekintsd meg a Védjegy - irányelveinket. - welcome_page: - title: Üdvözlet! - introduction_html: Üdvözöl az OpenStreetMap - a szabad és szerkeszthető világtérkép - - közössége. Most, hogy regisztráltál, máris elkezdheted a térképezést. Itt - elérhető egy gyors összefoglaló a legfontosabb tudnivalókkal. - whats_on_the_map: - title: Mi van a térképen - on_html: Az OpenStreetMapen olyan dolgokat ábrázolunk, amelyek valódiak - és jelenleg is léteznek - épületek milliói, utak és egyéb részletek a - különböző helyeken. Bármi olyan, téged érdeklő elemet ábrázolhatsz, ami fizikailag - létezik. - off_html: Amit nem ábrázolunk azok szubjektív adatok mint például értékelés, - történelmi vagy történeti helyek, adatok jogvédett forrásokból. Sose másolj - semmit más internetes vagy papír térképekről, hacsak nincs erre külön engedélyed. - basic_terms: - title: Alapvető kifejezések a térképezéshez - paragraph_1_html: Az OpenStretMapnek megvan a saját nyelvjárása. Felsorolunk - néhány fontosabb kifejezést, amelyek segítenek az elindulásban. - editor_html: A szerkesztőprogram egy olyan letölthető program - vagy weboldal, amellyel a térképet tudod módosítani. - node_html: A pont egy pontszerű objektum a térképen, mint például - étterem vagy egy fa. - way_html: A vonal egy vonalas vagy terület objektum, mint például - egy út, folyó, tó vagy épület. - tag_html: A címke egy pici adat egy ponthoz vagy vonalhoz, - mint például egy étterem neve vagy egy sebességkorlátozás mértéke. - rules: - title: Szabályok! - paragraph_1_html: "Az openStreetMap-nek van néhány formális szabálya is de alapvetően - minden résztvevőtől azt várjuk el hogy együttműködjön és kommunikáljon a közösség - többi tagjával. Ha bármilyen kézi szerkesztésen túlmutató tevékenységet tervezel - akkor kérjük, hogy olvasd el az erről szóló útmutatókat az \nImportálásról - és az \nAutomatikus - szerkesztésekről szóló lapokon." - questions: - title: Kérdésed van? - paragraph_1_html: Az OpenStreetMap számos anyagot kínál fel ahhoz, hogy ismerkedj - a projekttel, kérdéseket tégy fel vagy válaszolj meg, vagy térképezési témákat - beszélj meg a közösség tagjaival. Itt találsz segítséget. - start_mapping: Térképezés indítása - add_a_note: - title: Nincs időd szerkeszteni? Küldj be jegyzetet! - paragraph_1_html: Ha valami apróságot szeretnél kijavíttatni és nincs időd regisztrálni - és megtanulni a szerkesztést, nagyon egyszerűen beküldhetsz egy jegyzetet! - paragraph_2_html: |- - Menj a térképre és kattints a jegyzet ikonra: - . Ez elhelyez egy jelzést a térképen, amelyet áthúzhatsz a pontos helyére. Majd írd be az üzeneted és nyomd meg az Elküldés gombot, hogy a térképezők megvizsgálhassák. - fixthemap: - title: Hibabejelentés / Térkép javítása - how_to_help: - title: Hogyan segíthetsz - join_the_community: - title: Csatlakozás a közösséghez - explanation_html: Ha bármilyen hibát találtál a térképadatokban, például hiányzik - egy út vagy cím, a legjobb, ha csatlakozol az OpenStreetMap közösséghez - és kijavítod az adatot saját magad. - add_a_note: - instructions_html: Csak kattints a ikonra a térképnézetben. - Ez felrak egy helyjelölőt a térképre, amit húzással tudsz a megfelelő helyre - mozgatni. Írd meg hozzá az üzeneted, majd kattints a mentésre, és a többi - térképész meg fogja vizsgálni. - other_concerns: - title: Egyéb aggályok - explanation_html: Ha kérdése merül fel az adataink felhasználásáról, vagy a - tartalomról, akkor keresse fel a szerzői jogi oldalunkat - a további jogi információkért, vagy lépjen kapcsolatba a megfelelő OSMF - munkacsoportot. - help_page: - title: Segítségkérés - introduction: Az OpenStreetMap számos anyagot kínál fel ahhoz, hogy ismerkedj - a projekttel, kérdéseket tégy fel vagy válaszolj meg, vagy térképezési témákat - beszélj meg a közösség tagjaival. - welcome: - url: /welcome - title: Üdvözlünk az OSM-en - description: Eza gyors útmutató megismertet az OpenStreetMap alapjaival. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Hu:Beginners%27_guide - title: Kezdők kézikönyve - description: A közösség által karbantartott útmutató kezdőknek. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Kérdezz vagy keress válaszokat az OSM kérdések-és-válaszok lapján. - mailing_lists: - title: Levelezőlisták - description: Kérdezz vagy beszélgess érdekességekről a számos tematikus vagy - helyi levelezőlistán. - forums: - title: Fórumok - description: Kérdések és beszélgetések helye azoknak, akik előnyben részesítik - a hirdetőtábla stílusú felületet. - irc: - title: IRC - description: Interaktív chat számos nyelven, számos témában. - switch2osm: - title: válts osm-re - description: Segíts cégeknek és szervezeteknek OpenStreetMap-alapú térképekre - és egyéb szolgáltatásokra váltani. - wiki: - url: https://wiki.openstreetmap.org/wiki/Hu:Main_Page - title: wiki.openstreetmap.org - description: Böngészd a wikit mélyreható OSM dokumentációért. - about_page: - next: Következő - copyright_html: ©OpenStreetMap
        közreműködők - used_by: '%{name} több ezer weboldalnak, mobilalkalmazásnak, és hardver-eszköznek - biztosít térképadatokat' - lede_text: Az OpenStreetMapet egy térképszerkesztő-közösség építi, akik hozzáadnak - és karbantartanak adatokat világszerte utakról, ösvényekről, kávézókról, vasútállomásokról - és még sok mindenről. - local_knowledge_title: Helyi tudásbázis - local_knowledge_html: Az OpenStreetMap hangsúlyt fektet a helyi ismeretekre. A - közreműködők műholdképeket, GPS-eszközöket és hagyományos térképeket használnak, - hogy ellenőrizzék az OSM pontosságát és naprakészségét. - community_driven_title: Közösség által vezérelt - community_driven_html: Az OpenStreetMap közössége változatos, lelkes, és minden - nap növekszik. Lelkes térképezők, GIS profik, az OSM szervereket üzemeltető - technikusok, katasztrófa-sújtotta területeket térképező önkéntesek működnek - közre a térkép szerkesztésében. Ha többet szeretnél megtudni a közösségről, - lásd az OpenStreetMap Blogot, a - felhasználói naplókat, a közösségi - blogokat, és az OSM Foundation - weboldalát. - open_data_title: Szabad adatok - open_data_html: 'Az OpenStreetMap szabad adatokból áll: szabadon használhatod - bármilyen célra az OpenStreetMap és közreműködői megjelölésével. Ha hozzáadsz, - vagy módosítod az adatot valamilyen módon, az eredményt csak ugyanezzel a licenccel - teheted közzé. Lásd a Copyright és Licence oldalt - a részletekért.' - legal_title: Jogi segítség - legal_html: |- - Az oldalt és sok kapcsolódó szolgáltatást formálisan az OpenStreetMap Foundation (OSMF) üzemelteti, a közösség nevében. Az összes OSMF által üzemeltetett szolgáltatásra vonatkoznak az Elfogadható felhasználási irányelvek, és az Adatvédelmi nyilatkozat. -
        - Lépjen kapcsolatba az OSMF-fel, ha licencelési, szerzői jogi vagy más jogi kérdése vagy problémája van. - partners_title: Partnerek notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} hozzászólt a naplóbejegyzésedhez' @@ -1411,6 +1113,154 @@ hu: delete: deleted: Üzenet törölve site: + about: + next: Következő + copyright_html: ©OpenStreetMap
        közreműködők + used_by: '%{name} több ezer weboldalnak, mobilalkalmazásnak, és hardver-eszköznek + biztosít térképadatokat' + lede_text: Az OpenStreetMapet egy térképszerkesztő-közösség építi, akik hozzáadnak + és karbantartanak adatokat világszerte utakról, ösvényekről, kávézókról, vasútállomásokról + és még sok mindenről. + local_knowledge_title: Helyi tudásbázis + local_knowledge_html: Az OpenStreetMap hangsúlyt fektet a helyi ismeretekre. + A közreműködők műholdképeket, GPS-eszközöket és hagyományos térképeket használnak, + hogy ellenőrizzék az OSM pontosságát és naprakészségét. + community_driven_title: Közösség által vezérelt + community_driven_html: Az OpenStreetMap közössége változatos, lelkes, és minden + nap növekszik. Lelkes térképezők, GIS profik, az OSM szervereket üzemeltető + technikusok, katasztrófa-sújtotta területeket térképező önkéntesek működnek + közre a térkép szerkesztésében. Ha többet szeretnél megtudni a közösségről, + lásd az OpenStreetMap Blogot, + a felhasználói naplókat, a közösségi + blogokat, és az OSM Foundation + weboldalát. + open_data_title: Szabad adatok + open_data_html: 'Az OpenStreetMap szabad adatokból áll: szabadon használhatod + bármilyen célra az OpenStreetMap és közreműködői megjelölésével. Ha hozzáadsz, + vagy módosítod az adatot valamilyen módon, az eredményt csak ugyanezzel a + licenccel teheted közzé. Lásd a Copyright és + Licence oldalt a részletekért.' + legal_title: Jogi segítség + legal_html: |- + Az oldalt és sok kapcsolódó szolgáltatást formálisan az OpenStreetMap Foundation (OSMF) üzemelteti, a közösség nevében. Az összes OSMF által üzemeltetett szolgáltatásra vonatkoznak az Elfogadható felhasználási irányelvek, és az Adatvédelmi nyilatkozat. +
        + Lépjen kapcsolatba az OSMF-fel, ha licencelési, szerzői jogi vagy más jogi kérdése vagy problémája van. + partners_title: Partnerek + copyright: + foreign: + title: Erről a fordításról + text: Abban az esetben, ha ez a lefordított oldal és %{english_original_link} + eltér egymástól, akkor az angol nyelvű oldal élvez elsőbbséget + english_link: az eredeti angol nyelvű + native: + title: Erről az oldalról + text: Jelenleg a szerzői jogi oldal angol nyelvű változatát látod. Visszaléphetsz + ezen oldal %{native_link}, vagy befejezheted a szerzői jogról szóló oldal + olvasását, és %{mapping_link}. + native_link: magyar nyelvű változatára + mapping_link: kezdheted a térképezést + legal_babble: + title_html: Szerzői jog és licenc + intro_1_html: |- + Az OpenStreetMap® egy szabad adathalmaz, amelyet az Open Data + Commons Open Database License licenc (ODbL) alatt tett közzé az OpenStreetMap Alapítvány (OSMF). + intro_2_html: |2- + Szabadon másolhatod, terjesztheted, továbbíthatod és átdolgozhatod adatainkat mindaddig, amíg feltünteted az OpenStreetMapot és közreműködőit. Ha módosítod vagy felhasználod az adatainkat, akkor az eredményt is csak azonos licenccel terjesztheted. A teljes jogi + szabályzat ismerteti a jogaidat és kötelezettségeidet. + intro_3_html: |2- + Az OpenStreetMap térképeire a Creative + Commons Nevezd meg! - Így add tovább! 2.0 licenc (CC BY-SA) vonatkozik. + credit_title_html: Hogyan kell feltüntetned az OpenStreetMapot? + credit_1_html: Kérjük, hogy forrásként a “© OpenStreetMap közreműködők” + szöveget tüntesd fel. + credit_2_html: Azt is egyértelművé kell tenned, hogy az adatok az Open Database + Licenc alatt elérhetőek, illetve ha a mi térkép csempéinket használod akkor + azt, hogy a grafikai megjelenítés a CC BY-SA licenc feltételeivel használható. + Ezt megteheted egy erre a copyright + oldalra való hivatkozással. Alternatívaként, ha az OSM-et adatokként + terjeszted, akkor fel kell tüntetned a nevet és linket közvetlenül a licencre. + Ha a formátum a linkelést nem teszi lehetővé (pl. nyomtatásban), javasoljuk, + hogy a felhasználókat irányítsd az openstreetmap.org címre (esetlegesen + az "OpenStreetMap" szót kiegészítve erre a teljes címre), és az opendatacommons.org + címre, illetve - ha szükséges - a creativecommons.org címre. + credit_3_html: |- + Böngészhető elektronikus térkép esetén a forrásra vonatkozó hivatkozás jelenjen meg a térkép sarkában. + Például: + attribution_example: + alt: Példa arra, hogyan jelenjen meg az OpenStreetMap-re való hivatkozás + egy weboldalon + title: Példa egy hivatkozásra + more_title_html: Tudj meg többet! + more_1_html: |- + További információ adataink használatáról az OSMF Licenc lapon. + more_2_html: |- + Habár az OpenStreetMap egy nyílt adatforrás, nem tudunk ingyenes térkép API elérést biztosítani a harmadik feleknek. + + Lásd az API Felhasználási Irányelveinket, a Csempe Felhasználási Irányelveinket és a Nominatim Felhasználási Irányelveinket. + contributors_title_html: Közreműködőink + contributors_intro_html: 'Többszáz egyéni közreműködőnk van. További, szabadon + elérhető adatokat is felhasználunk nemzeti térkép intézetektől és más forrásokból, + többek között:' + contributors_at_html: |- + Ausztria: adatokat tartalmaz a következő forrásból: + Bécs városa + CC BY licenc alatt. + contributors_ca_html: |- + Kanada: adatokat tartalmaz a következő forrásokból: + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), and StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: "Finnország: Adatokat tartalmaz a következő + forrásokból: \nNational Land Survey of Finland's Topographic Database\nés + más adatforrások NLSFI + licenc alatt." + contributors_fr_html: |- + France: adatokat tartalmaz a következő forrásból: + Direction Générale des Impôts. + contributors_nl_html: |- + Hollandia: adatokat tartalmaz innen: Automotive Navigation Data, 2007 + (www.and.com) + contributors_nz_html: |- + Új-Zéland: adatokat tartalmaz a következő forrásból: + Land Information New Zealand. Szerzői jog fenntartva. + contributors_si_html: 'Szlovénia: Tartalmaz adatokat a Földmérési és Térképészeti Hatóságtól + és a Földművelési, Erdőgazdálkodási + és Élelmezésügyi Minisztériumtól (nyilvános információk Szlovéniában).' + contributors_za_html: |- + Dél-Afrika: tartalmaz olyan adatokat, amik a + Chief Directorate: + National Geo-Spatial Information-tól származnak, az állami szerzői jogok fenntartva. + contributors_gb_html: "Egyesült Királyság: Térképészeti + Szolgálat adatokat © Királyi szerzői és adatbázisjog \n2010 - 12." + contributors_footer_1_html: |- + További részletekért, és az OpenStreetMap javításához használt más forrásokról, + kérjük, olvassa el a hozzájárulók oldalát + az OpenStreetMap wikin. + contributors_footer_2_html: |2- + Az adatok befoglalása az OpenStreetMapba nem jelenti azt, hogy az eredeti + adatszolgáltató támogatja az OpenStreetMapot, nyújt garanciát vagy + vállal rá felelősséget. + infringement_title_html: Copyright megsértése + infringement_1_html: |2- + Az OSM közreműködői emlékeztetve lettek arra, hogy soha ne adjanak hozzá adatokat egyetlen + szerzői jogvédett forrásból se (pl. Google Térkép vagy nyomtatott térképek) a + szerzői jog tulajdonosának kifejezett engedélye nélkül. + infringement_2_html: |- + Ha úgy gondolod, hogy jogvédett anyag került jogszerűtlenül az OpenStreetMap adatbázisba vagy erre a weblapra, kérjük olvasd el az eltávolítási + folyamat leírását vagy jelentsd be közvetlenül az + online bejelentő oldalon. + trademarks_title_html: Védjegyek + trademarks_1_html: Az OpenStreetMap, a nagyító ikon és a State of the Map + az OpenStreetMap Foundation bejegyzett védjegyei. Ha kérdésed van ezek felhasználásával + kapcsolatban, kérlek tekintsd meg a Védjegy + irányelveinket. index: js_1: Vagy egy olyan böngészőt használsz, amely nem támogatja a JavaScriptet, vagy letiltottad a JavaScriptet. @@ -1442,6 +1292,108 @@ hu: id_not_configured: Az iD nincs beállítva no_iframe_support: A böngésződ nem támogatja a HTML-kereteket, amely ehhez a funkcióhoz szükséges. + export: + title: Exportálás + area_to_export: Exportálandó terület + manually_select: Más terület kézi kijelölése + format_to_export: Exportálás formátuma + osm_xml_data: OpenStreetMap XML adat + map_image: Térkép (Alapértelmezett réteg) + embeddable_html: Beágyazható HTML + licence: Licenc + export_details: Az OpenStreetMap adatokra az Open + Data Commons Open Database licenc vonatkozik. (ODbL) + too_large: + advice: Ha a fenti exportálás sikertelen lenne, próbáld meg az alábbi listából + valamelyik lehetőséget. + body: Ez a terület túl nagy ahhoz, hogy exportálásra kerüljön OpenStreetMap + XML adatként. Közelíts, vagy jelölj ki kisebb területet. Esetleg használd + az alábbi listából valamelyik nagy adatmennyiségek letöltését támogató módszert. + planet: + title: Planet OSM + description: A teljes OpenStreetMap adatbázis rendszeresen frissített másolatai + overpass: + title: Overpass API + description: A megjelenített befoglaló keret letöltése egy OpenStreetMap + tükörserverről + geofabrik: + title: Geofabrik letöltések + description: Kontinensek, országok és kiválasztott városok rendszeresen + frissített kivonata + metro: + title: Metro Extracts + description: A főbb városok, valamint a környező területek kivonatai + other: + title: Más források + description: További források az OpenStreetMap wiki oldalán találhatók + options: Beállítások + format: 'Formátum:' + scale: Méretarány + max: max. + image_size: Képméret + zoom: Nagyítási szint + add_marker: Jelölő hozzáadása a térképhez + latitude: 'Földrajzi szélesség:' + longitude: 'Földrajzi hosszúság:' + output: Kimenet + paste_html: Webhelyekbe való beágyazáshoz illeszd be a HTML kódot + export_button: Exportálás + fixthemap: + title: Hibabejelentés / Térkép javítása + how_to_help: + title: Hogyan segíthetsz + join_the_community: + title: Csatlakozás a közösséghez + explanation_html: Ha bármilyen hibát találtál a térképadatokban, például + hiányzik egy út vagy cím, a legjobb, ha csatlakozol az OpenStreetMap közösséghez + és kijavítod az adatot saját magad. + add_a_note: + instructions_html: Csak kattints a ikonra a térképnézetben. + Ez felrak egy helyjelölőt a térképre, amit húzással tudsz a megfelelő + helyre mozgatni. Írd meg hozzá az üzeneted, majd kattints a mentésre, + és a többi térképész meg fogja vizsgálni. + other_concerns: + title: Egyéb aggályok + explanation_html: Ha kérdése merül fel az adataink felhasználásáról, vagy + a tartalomról, akkor keresse fel a szerzői jogi oldalunkat + a további jogi információkért, vagy lépjen kapcsolatba a megfelelő OSMF + munkacsoportot. + help: + title: Segítségkérés + introduction: Az OpenStreetMap számos anyagot kínál fel ahhoz, hogy ismerkedj + a projekttel, kérdéseket tégy fel vagy válaszolj meg, vagy térképezési témákat + beszélj meg a közösség tagjaival. + welcome: + url: /welcome + title: Üdvözlünk az OSM-en + description: Eza gyors útmutató megismertet az OpenStreetMap alapjaival. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Hu:Beginners%27_guide + title: Kezdők kézikönyve + description: A közösség által karbantartott útmutató kezdőknek. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Kérdezz vagy keress válaszokat az OSM kérdések-és-válaszok lapján. + mailing_lists: + title: Levelezőlisták + description: Kérdezz vagy beszélgess érdekességekről a számos tematikus vagy + helyi levelezőlistán. + forums: + title: Fórumok + description: Kérdések és beszélgetések helye azoknak, akik előnyben részesítik + a hirdetőtábla stílusú felületet. + irc: + title: IRC + description: Interaktív chat számos nyelven, számos témában. + switch2osm: + title: válts osm-re + description: Segíts cégeknek és szervezeteknek OpenStreetMap-alapú térképekre + és egyéb szolgáltatásokra váltani. + wiki: + url: https://wiki.openstreetmap.org/wiki/Hu:Main_Page + title: wiki.openstreetmap.org + description: Böngészd a wikit mélyreható OSM dokumentációért. sidebar: search_results: Keresés eredményei close: Bezár @@ -1541,6 +1493,56 @@ hu: image: Kép alt: ALT szöveg url: URL + welcome: + title: Üdvözlet! + introduction_html: Üdvözöl az OpenStreetMap - a szabad és szerkeszthető világtérkép + - közössége. Most, hogy regisztráltál, máris elkezdheted a térképezést. Itt + elérhető egy gyors összefoglaló a legfontosabb tudnivalókkal. + whats_on_the_map: + title: Mi van a térképen + on_html: Az OpenStreetMapen olyan dolgokat ábrázolunk, amelyek valódiak + és jelenleg is léteznek - épületek milliói, utak és egyéb részletek + a különböző helyeken. Bármi olyan, téged érdeklő elemet ábrázolhatsz, ami + fizikailag létezik. + off_html: Amit nem ábrázolunk azok szubjektív adatok mint például + értékelés, történelmi vagy történeti helyek, adatok jogvédett forrásokból. + Sose másolj semmit más internetes vagy papír térképekről, hacsak nincs erre + külön engedélyed. + basic_terms: + title: Alapvető kifejezések a térképezéshez + paragraph_1_html: Az OpenStretMapnek megvan a saját nyelvjárása. Felsorolunk + néhány fontosabb kifejezést, amelyek segítenek az elindulásban. + editor_html: A szerkesztőprogram egy olyan letölthető program + vagy weboldal, amellyel a térképet tudod módosítani. + node_html: A pont egy pontszerű objektum a térképen, mint + például étterem vagy egy fa. + way_html: A vonal egy vonalas vagy terület objektum, mint + például egy út, folyó, tó vagy épület. + tag_html: A címke egy pici adat egy ponthoz vagy vonalhoz, + mint például egy étterem neve vagy egy sebességkorlátozás mértéke. + rules: + title: Szabályok! + paragraph_1_html: "Az openStreetMap-nek van néhány formális szabálya is de + alapvetően minden résztvevőtől azt várjuk el hogy együttműködjön és kommunikáljon + a közösség többi tagjával. Ha bármilyen kézi szerkesztésen túlmutató tevékenységet + tervezel akkor kérjük, hogy olvasd el az erről szóló útmutatókat az \nImportálásról + és az \nAutomatikus + szerkesztésekről szóló lapokon." + questions: + title: Kérdésed van? + paragraph_1_html: Az OpenStreetMap számos anyagot kínál fel ahhoz, hogy ismerkedj + a projekttel, kérdéseket tégy fel vagy válaszolj meg, vagy térképezési témákat + beszélj meg a közösség tagjaival. Itt találsz segítséget. + start_mapping: Térképezés indítása + add_a_note: + title: Nincs időd szerkeszteni? Küldj be jegyzetet! + paragraph_1_html: Ha valami apróságot szeretnél kijavíttatni és nincs időd + regisztrálni és megtanulni a szerkesztést, nagyon egyszerűen beküldhetsz + egy jegyzetet! + paragraph_2_html: |- + Menj a térképre és kattints a jegyzet ikonra: + . Ez elhelyez egy jelzést a térképen, amelyet áthúzhatsz a pontos helyére. Majd írd be az üzeneted és nyomd meg az Elküldés gombot, hogy a térképezők megvizsgálhassák. trace: visibility: private: Magán (megosztva csak névtelenül, rendezetlen pontok) @@ -1665,7 +1667,7 @@ hu: került. Jelentkezz be a webes felületen a közreműködési feltételek megtekintéséhez. Ezt nem kell elfogadnod, de meg kell tekintened. oauth: - oauthorize: + authorize: title: A fiókodhoz való hozzáférés engedélyezése request_access: A(z) %{app_name} alkalmazás hozzáférést kér a felhasználói fiókodhoz, %{user}. Kérlek, jelöld, ha azt szeretnéd, hogy az alkalmazás rendelkezzen @@ -1680,11 +1682,11 @@ hu: allow_write_gpx: GPS nyomvonalak feltöltése. allow_write_notes: jegyzet módosítása grant_access: Hozzáférés megadása - oauthorize_success: + authorize_success: title: Hozzáférési kérés jóváhagyva allowed: '%{app_name} számára hozzáférést biztosítottál a fiókodhoz.' verification: 'Az ellenőrző kód: %{code}.' - oauthorize_failure: + authorize_failure: title: Az azonosítás sikertelen. denied: '%{app_name} alkalmazástól megtagadtad, hogy hozzáférhessen a fiókodhoz.' invalid: A hitelesítő token érvénytelen. @@ -2129,7 +2131,7 @@ hu: confirm: Megerősítés fail: A '%{role}' szerep nem vonható vissza '%{name}' felhasználótól. Kérlek ellenőrizd, hogy mind a felhasználó, mind a szerep érvényes-e. - user_block: + user_blocks: model: non_moderator_update: Blokkolás kiosztásához vagy frissítéséhez moderátornak kell lenned. @@ -2193,20 +2195,6 @@ hu: period: one: 1 órája other: '%{count} órája' - partial: - show: Megjelenítés - edit: Szerkesztés - revoke: Visszavonás! - confirm: Biztos vagy benne? - display_name: Blokkolt felhasználó - creator_name: Készítő - reason: Blokkolás indoklása - status: Állapot - revoker_name: 'Visszavonta:' - not_revoked: (nincs visszavonva) - showing_page: '%{page}. oldal' - next: Következő » - previous: « Előző helper: time_future: Véget ér %{time} múlva. until_login: Aktív a felhasználó bejelentkezéséig. @@ -2236,8 +2224,22 @@ hu: back: Összes blokkolás megjelenítése revoker: 'Visszavonó:' needs_view: A felhasználónak be kell jelentkeznie, mielőtt a blokkolás feloldódna. - note: - description: + block: + not_revoked: (nincs visszavonva) + show: Megjelenítés + edit: Szerkesztés + revoke: Visszavonás! + blocks: + display_name: Blokkolt felhasználó + creator_name: Készítő + reason: Blokkolás indoklása + status: Állapot + revoker_name: 'Visszavonta:' + showing_page: '%{page}. oldal' + next: Következő » + previous: « Előző + notes: + comment: opened_at_html: Létrehozva %{when} opened_at_by_html: Létrehozta %{user} %{when} commented_at_html: 'Frissítve: %{when}' @@ -2420,7 +2422,7 @@ hu: show_address: Cím megjelenítése query_features: Funkciók lekérdezése centre_map: Térkép középre hozása itt - redaction: + redactions: edit: description: Leírás heading: Módosítás szerkesztése diff --git a/config/locales/ia.yml b/config/locales/ia.yml index 92ac13ced..743e0ca5c 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -334,54 +334,6 @@ ia: ago: '%{ago} retro' newer_comments: Commentos plus recente older_comments: Commentos plus ancian - export: - title: Exportar - start: - area_to_export: Area a exportar - manually_select: Seliger manualmente un altere area - format_to_export: Formato de exportation - osm_xml_data: Datos XML de OpenStreetMap - map_image: Imagine de carta (monstra le strato standard) - embeddable_html: HTML incorporabile - licence: Licentia - export_details: Le datos de OpenStreetMap es licentiate sub le Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Si iste exportation falle, considera usar un del fontes listate hic - infra:' - body: 'Iste area es troppo grande pro esser exportate como datos XML de OpenStreetMap. - Per favor face zoom avante, o selige un area minor, o usa un del sequente - fontes pro discargamento de datos in massa:' - planet: - title: Planeta OSM - description: Copias regularmente actualisate del base de datos complete - de OpenStreetMap - overpass: - title: Overpass API - description: Discargar iste quadro delimitator ab un replica del base de - datos de OpenStreetMap - geofabrik: - title: Discargamentos de Geofabrik - description: Extractos regularmente actualisate de continentes, paises, - e citates seligite - metro: - title: Extractos de Metro - description: Extractos de metropoles e lor areas circumvicin - other: - title: Altere fontes - description: Fontes additional listate in le wiki de OpenStreetMap - options: Optiones - format: 'Formato:' - scale: Scala - max: max - image_size: 'Dimension del imagine:' - zoom: Zoom - add_marker: Adder un marcator al carta - latitude: 'Lat:' - longitude: 'Lon:' - output: Resultato - paste_html: Colla HTML pro incorporar in sito web - export_button: Exportar geocoder: search: title: @@ -958,259 +910,6 @@ ia: text: Facer un donation learn_more: Leger plus more: Plus - license_page: - foreign: - title: A proposito de iste traduction - text: In caso de un conflicto inter iste pagina traducite e %{english_original_link}, - le pagina in anglese prevalera. - english_link: le original in anglese - native: - title: A proposito de iste pagina - text: Tu vide nunc le version in anglese del pagina de copyright. Tu pote retornar - al %{native_link} de iste pagina o tu pote cessar de leger super copyright - e %{mapping_link}. - native_link: version in interlingua - mapping_link: comenciar le cartographia - legal_babble: - title_html: Copyright e Licentia - intro_1_html: |- - OpenStreetMap® es datos aperte, licentiate sub le Open Data - Commons Open Database License (ODbL) per le Fundation OpenStreetMap (OSMF). - intro_2_html: |2- - Vos es libere de copiar, distribuer, transmitter e adaptar nostre cartas - e datos, a condition que vos da recognoscentia a OpenStreetMap e su - contributores. Si vos altera o extende nostre cartas e datos, vos - pote distribuer le resultato solmente sub le mesme licentia. Le - complete codice - legal explica vostre derectos e responsabilitates. - intro_3_html: |- - Le cartographia in nostre tegulas de carta, e nostre documentation, son - publicate sub licentia Creative - Commons Attribution-ShareAlike 2.0 (CC-BY-SA). - credit_title_html: Como dar recognoscentia a OpenStreetMap - credit_1_html: |- - Nos require que vos usa le recognoscentia “© OpenStreetMap - contributors”. - credit_2_html: |- - Vos debe anque clarificar que le datos es disponibile sub Open Database License, e si vos usa nostre tegulas cartographic, que le cartographia es licentiate sub CC-BY-SA. Vos pote facer isto con un ligamine a iste pagina de copyright. - Alternativemente, e obligatorimente si vos distribue OSM in forma de datos, vos pote mentionar le licentia(s) e ligar directemente a illo(s). Si vos usa un medio de communication in le qual le ligamines non es possibile (p.ex. un obra imprimite), nos suggere que vos dirige vostre lectores a openstreetmap.org (forsan per inserer iste adresse complete in loco del parola ‘OpenStreetMap’), a opendatacommons.org, e (si relevante) a creativecommons.org. - credit_3_html: 'Pro un carta electronic navigabile, le recognoscentia debe apparer - in le angulo del carta. Per exemplo:' - attribution_example: - alt: Exemplo de como recognoscer OpenStreetMap in un pagina web - title: Exemplo de recognoscentia - more_title_html: Pro saper plus - more_1_html: |- - Lege plus sur le uso de nostre datos, e como recognoscer nos, in le pagina de licentia OSMF. - more_2_html: |- - Ben que OpenStreetMap es datos aperte, nos non pote fornir un API cartographic gratuite pro tertios. Vide nostre politica pro le uso del API, - politica pro le uso de tegulas - e politica pro le uso de Nominatim. - contributors_title_html: Nostre contributores - contributors_intro_html: 'Nostre contributores es milles de personas. Nos include - anque le datos sub licentia aperte de agentias cartographic national e de - altere fontes, inter le quales:' - contributors_at_html: |- - Austria: Contine datos ab le - Citate de Vienna licentiate sub - CC BY. - contributors_ca_html: |- - Canada: Contine datos ab - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), e StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: "Finlandia: Contine datos ab le base - de datos topographic del Inspection \nNational del Territorio de Finlandia - e de altere insimules de datos, sub le\nlicentia - NLSFI." - contributors_fr_html: |- - Francia: Contine datos fornite per le - Direction Générale des Impôts. - contributors_nl_html: |- - Nederlandia: Contine datos © AND, 2007 - (www.and.com) - contributors_nz_html: |- - Nove Zelandia: Contine datos proveniente de - Land Information New Zealand. Crown Copyright reservate. - contributors_si_html: |- - Slovenia: Contine datos ab le - Surveying and Mapping Authority e del - Ministerio del Agricultura, Silvicultura e Alimento - (information public de Slovenia). - contributors_za_html: |- - Africa del Sud: Contine datos proveniente del - Chief Directorate: - National Geo-Spatial Information, copyright del Stato reservate. - contributors_gb_html: |- - Regno Unite: Contine datos de Ordnance - Survey © copyright del Corona e derecto de base de datos - 2010-12. - contributors_footer_1_html: |- - Pro ulterior detalios de iste e altere fontes que ha essite usate - pro adjutar a meliorar OpenStreetMap, vide le pagina - de contributores in le wiki de OpenStreetMap. - contributors_footer_2_html: |2- - Le inclusion de datos in OpenStreetMap non implica que le fornitor - original del datos indorsa OpenStreetMap, forni alcun garantia, o - accepta alcun responsabilitate. - infringement_title_html: Violation de copyright - infringement_1_html: |2- - Nos rememora al contributores de OSM de nunquam adder datos de alcun - fonte sub derecto de autor (p.ex. Google Maps o cartas imprimite) - sin explicite permission del titulares del derecto de autor. - infringement_2_html: Si vos crede que material sub copyright ha essite inserite - inappropriatemente in le base de datos de OpenStreetMap o in iste sito, per - favor consulta nostre procedura - de remotion o submitte un plancto immediate usante nostre formulario - in linea. - trademarks_title_html: Marcas commercial - trademarks_1_html: OpenStreetMap, le logotypo con le lupa e "State of the Map" - es marcas registrate del Fundation OpenStreetMap. Si vos ha questiones sur - le uso de iste marcas, invia los al gruppo - de labor sur licentias. - welcome_page: - title: Benvenite! - introduction_html: Bevenite a OpenStreetMap, le carta libere e modificabile del - mundo. Ora que tu te ha inscribite, tu es preste a comenciar a cartographiar. - Ecce un guida curte con le cosas le plus importante a saper. - whats_on_the_map: - title: Que es sur le carta? - on_html: OpenStreetMap es un loco pro cartographar cosas real e actual; - illo include milliones de edificios, stratas e altere detalios sur locos. - Tu pote cartographar qualcunque cosa del mundo real que te interessa. - off_html: Illo non include datos subjective como punctos de appreciation, - objectos historic o hypothetic. Le datos ab fontes sub copyright es equalmente - excludite; non copia cosas ab cartas in linea o de papiro sin permission special! - basic_terms: - title: Vocabulario de base pro le cartographia - paragraph_1_html: OpenStreetMap ha un jargon proprie. Ecce alcun parolas clave - que te essera utile. - editor_html: Un editor es un programma o sito web que tu pote - usar pro modificar le carta. - node_html: Un nodo es un puncto sur le carta, como un restaurante - o un arbore individual. - way_html: Un via es un linea o area, como un strata, fluxo, - laco o edificio. - tag_html: Un etiquetta es un unitate de information sur un - nodo o via, como le nomine de un restaurante o le limite de velocitate de - un strata. - rules: - title: Regulas! - paragraph_1_html: OpenStreetMap ha poc regulas formal, ma nos expecta que tote - le participantes collabora e communica con le communitate. Si vos considera - un activitate altere que modification per mano, lege e seque le directivas - sur le importation - e sur le modification - automatisate. - questions: - title: Questiones? - paragraph_1_html: |- - OpenStreetMap ha plure ressources pro apprender a cognoscer le projecto, pro poner e responder a questiones e pro discuter e documentar le subjectos de carthographia in collaboration con alteres. - Obtene adjuta hic. - start_mapping: comenciar le cartographia - add_a_note: - title: Non ha tempore pro modificar? Adde un nota! - paragraph_1_html: Si tu vole meliorar un micre cosa e non ha le tempore pro - crear un conto e apprender a modificar, alora il es facile adder un nota. - paragraph_2_html: |- - Simplemente visita le carta e clicca sur le icone de nota: - . Un marcator essera addite al carta, que tu pote displaciar trahente lo con le mouse. Adde tu message, pois clicca sur Salveguardar, e altere cartographos lo investigara. - fixthemap: - title: Reportar un problema / Corriger le carta - how_to_help: - title: Como adjutar - join_the_community: - title: Adherer al communitate - explanation_html: Si tu ha trovate un problema con nostre datos cartographic, - per exemplo si il manca un cammino o tu adresse, lo melior es inscriber - te a OpenStreetMap e adder o reparar le datos tu mesme. - add_a_note: - instructions_html: Clicca simplemente sur o sur - le mesme icone in le quadro del carta. Un marcator essera addite al carta, - que tu pote displaciar trahente lo con le mouse. Adde tu message, pois clicca - sur Salveguardar, e altere cartographos lo investigara. - other_concerns: - title: Altere preoccupationes - explanation_html: Si tu ha preoccupationes sur le maniera in que nostre datos - es usate o sur le contento, per favor consulta nostre pagina sur le derectos - de autor pro obtener information juridic, o contacta le gruppo - de labor OSMF appropriate. - help_page: - title: Obtener adjuta - introduction: OpenStreetMap ha plure ressources pro apprender a cognoscer le projecto, - pro poner e responder a questiones e pro discuter e documentar le subjectos - de cartographia in collaboration con alteres. - welcome: - url: /welcome - title: Benvenite a OSM - description: Comencia con iste guida rapide sur le fundamentos de OpenStreetMap. - beginners_guide: - title: Guida pro comenciantes - description: Guida pro comenciantes, mantenite per le communitate. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Pone un question o cerca responsas sur le sito de questiones e - responsas de OSM. - mailing_lists: - title: Listas de diffusion - description: Pone un question o discute cosas interessante sur un varietate - de listas de diffusion thematic o regional. - forums: - title: Foros - description: Questiones e discussiones pro qui prefere un interfacie in stilo - de tabuliero de bulletines. - irc: - title: IRC - description: Conversation interactive in multe linguas differente e sur multe - themas. - switch2osm: - description: Adjuta pro companias e organisationes qui vole migrar a cartas - e altere servicios a base de OpenStreetMap. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Percurre le wiki pro le documentation in detalio de OSM. - about_page: - next: Sequente - copyright_html: ©Contributores de
        OpenStreetMap - used_by: '%{name} forni datos cartographic a milles de sitos web, applicationes - mobile e dispositivos physic' - lede_text: OpenStreetMap es construite per un communitate de cartographos que - contribue e mantene datos sur stratas, sentieros, cafés, stationes ferroviari - e multo plus, in tote le mundo. - local_knowledge_title: Cognoscentia local - local_knowledge_html: |- - OpenStreetMap mitte le emphase sur le cognoscentia local. Contributores usa - imageria aeree, apparatos GPS e cartas ordinari de terreno pro verificar que OSM - es accurate e actual. - community_driven_title: Dirigite per le communitate - community_driven_html: |- - Le communitate de OpenStreetMap es diverse, passionate e cresce cata die. Nostre contributores include cartographos enthusiasta, professionales de GIS, ingenieros gerente le servitores de OSM, humanitarios cartographiante areas devastate per un disastro, e multe alteres. - Pro apprender plus sur le communitate, vide - le blog de OpenStreetMap, - le diarios del usatores, - le blogs del communitate - e le sito web del Fundation OSM. - open_data_title: Datos aperte - open_data_html: |- - OpenStreetMap es constituite per datos aperte: tu es libere de usar lo pro qualcunque scopo a condition que tu da credito a OpenStreetMap e su contributores. Si tu altera o extende le datos in certe manieras, tu pote distribuer le resultato solmente sub le mesme licentia. Vide le pagina Copyright e - Licentia pro detalios. - legal_title: Juridic - legal_html: "Iste sito e multe altere servicios associate es formalmente gerite - per le \nFundation OpenStreetMap - (OSMF) \nin nomine del communitate. Le uso de tote le servicios gerite per OSMF - es subjecte a nostre \npoliticas - de uso acceptabile e a nostre politica - de confidentialitate\n
        \nContacta - OSMF \nsi vos ha questiones sur licentias, derectos de autor o altere themas - juridic." - partners_title: Partners notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} commentava un entrata de diario' @@ -1403,6 +1102,156 @@ ia: delete: deleted: Message delite site: + about: + next: Sequente + copyright_html: ©Contributores de
        OpenStreetMap + used_by: '%{name} forni datos cartographic a milles de sitos web, applicationes + mobile e dispositivos physic' + lede_text: OpenStreetMap es construite per un communitate de cartographos que + contribue e mantene datos sur stratas, sentieros, cafés, stationes ferroviari + e multo plus, in tote le mundo. + local_knowledge_title: Cognoscentia local + local_knowledge_html: |- + OpenStreetMap mitte le emphase sur le cognoscentia local. Contributores usa + imageria aeree, apparatos GPS e cartas ordinari de terreno pro verificar que OSM + es accurate e actual. + community_driven_title: Dirigite per le communitate + community_driven_html: |- + Le communitate de OpenStreetMap es diverse, passionate e cresce cata die. Nostre contributores include cartographos enthusiasta, professionales de GIS, ingenieros gerente le servitores de OSM, humanitarios cartographiante areas devastate per un disastro, e multe alteres. + Pro apprender plus sur le communitate, vide + le blog de OpenStreetMap, + le diarios del usatores, + le blogs del communitate + e le sito web del Fundation OSM. + open_data_title: Datos aperte + open_data_html: |- + OpenStreetMap es constituite per datos aperte: tu es libere de usar lo pro qualcunque scopo a condition que tu da credito a OpenStreetMap e su contributores. Si tu altera o extende le datos in certe manieras, tu pote distribuer le resultato solmente sub le mesme licentia. Vide le pagina Copyright e + Licentia pro detalios. + legal_title: Juridic + legal_html: "Iste sito e multe altere servicios associate es formalmente gerite + per le \nFundation OpenStreetMap + (OSMF) \nin nomine del communitate. Le uso de tote le servicios gerite per + OSMF es subjecte a nostre \npoliticas + de uso acceptabile e a nostre politica + de confidentialitate\n
        \nContacta + OSMF \nsi vos ha questiones sur licentias, derectos de autor o altere + themas juridic." + partners_title: Partners + copyright: + foreign: + title: A proposito de iste traduction + text: In caso de un conflicto inter iste pagina traducite e %{english_original_link}, + le pagina in anglese prevalera. + english_link: le original in anglese + native: + title: A proposito de iste pagina + text: Tu vide nunc le version in anglese del pagina de copyright. Tu pote + retornar al %{native_link} de iste pagina o tu pote cessar de leger super + copyright e %{mapping_link}. + native_link: version in interlingua + mapping_link: comenciar le cartographia + legal_babble: + title_html: Copyright e Licentia + intro_1_html: |- + OpenStreetMap® es datos aperte, licentiate sub le Open Data + Commons Open Database License (ODbL) per le Fundation OpenStreetMap (OSMF). + intro_2_html: |2- + Vos es libere de copiar, distribuer, transmitter e adaptar nostre cartas + e datos, a condition que vos da recognoscentia a OpenStreetMap e su + contributores. Si vos altera o extende nostre cartas e datos, vos + pote distribuer le resultato solmente sub le mesme licentia. Le + complete codice + legal explica vostre derectos e responsabilitates. + intro_3_html: |- + Le cartographia in nostre tegulas de carta, e nostre documentation, son + publicate sub licentia Creative + Commons Attribution-ShareAlike 2.0 (CC-BY-SA). + credit_title_html: Como dar recognoscentia a OpenStreetMap + credit_1_html: |- + Nos require que vos usa le recognoscentia “© OpenStreetMap + contributors”. + credit_2_html: |- + Vos debe anque clarificar que le datos es disponibile sub Open Database License, e si vos usa nostre tegulas cartographic, que le cartographia es licentiate sub CC-BY-SA. Vos pote facer isto con un ligamine a iste pagina de copyright. + Alternativemente, e obligatorimente si vos distribue OSM in forma de datos, vos pote mentionar le licentia(s) e ligar directemente a illo(s). Si vos usa un medio de communication in le qual le ligamines non es possibile (p.ex. un obra imprimite), nos suggere que vos dirige vostre lectores a openstreetmap.org (forsan per inserer iste adresse complete in loco del parola ‘OpenStreetMap’), a opendatacommons.org, e (si relevante) a creativecommons.org. + credit_3_html: 'Pro un carta electronic navigabile, le recognoscentia debe + apparer in le angulo del carta. Per exemplo:' + attribution_example: + alt: Exemplo de como recognoscer OpenStreetMap in un pagina web + title: Exemplo de recognoscentia + more_title_html: Pro saper plus + more_1_html: |- + Lege plus sur le uso de nostre datos, e como recognoscer nos, in le pagina de licentia OSMF. + more_2_html: |- + Ben que OpenStreetMap es datos aperte, nos non pote fornir un API cartographic gratuite pro tertios. Vide nostre politica pro le uso del API, + politica pro le uso de tegulas + e politica pro le uso de Nominatim. + contributors_title_html: Nostre contributores + contributors_intro_html: 'Nostre contributores es milles de personas. Nos + include anque le datos sub licentia aperte de agentias cartographic national + e de altere fontes, inter le quales:' + contributors_at_html: |- + Austria: Contine datos ab le + Citate de Vienna licentiate sub + CC BY. + contributors_ca_html: |- + Canada: Contine datos ab + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), e StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: "Finlandia: Contine datos ab le base + de datos topographic del Inspection \nNational del Territorio de Finlandia + e de altere insimules de datos, sub le\nlicentia + NLSFI." + contributors_fr_html: |- + Francia: Contine datos fornite per le + Direction Générale des Impôts. + contributors_nl_html: |- + Nederlandia: Contine datos © AND, 2007 + (www.and.com) + contributors_nz_html: |- + Nove Zelandia: Contine datos proveniente de + Land Information New Zealand. Crown Copyright reservate. + contributors_si_html: |- + Slovenia: Contine datos ab le + Surveying and Mapping Authority e del + Ministerio del Agricultura, Silvicultura e Alimento + (information public de Slovenia). + contributors_za_html: |- + Africa del Sud: Contine datos proveniente del + Chief Directorate: + National Geo-Spatial Information, copyright del Stato reservate. + contributors_gb_html: |- + Regno Unite: Contine datos de Ordnance + Survey © copyright del Corona e derecto de base de datos + 2010-12. + contributors_footer_1_html: |- + Pro ulterior detalios de iste e altere fontes que ha essite usate + pro adjutar a meliorar OpenStreetMap, vide le pagina + de contributores in le wiki de OpenStreetMap. + contributors_footer_2_html: |2- + Le inclusion de datos in OpenStreetMap non implica que le fornitor + original del datos indorsa OpenStreetMap, forni alcun garantia, o + accepta alcun responsabilitate. + infringement_title_html: Violation de copyright + infringement_1_html: |2- + Nos rememora al contributores de OSM de nunquam adder datos de alcun + fonte sub derecto de autor (p.ex. Google Maps o cartas imprimite) + sin explicite permission del titulares del derecto de autor. + infringement_2_html: Si vos crede que material sub copyright ha essite inserite + inappropriatemente in le base de datos de OpenStreetMap o in iste sito, + per favor consulta nostre procedura + de remotion o submitte un plancto immediate usante nostre formulario + in linea. + trademarks_title_html: Marcas commercial + trademarks_1_html: OpenStreetMap, le logotypo con le lupa e "State of the + Map" es marcas registrate del Fundation OpenStreetMap. Si vos ha questiones + sur le uso de iste marcas, invia los al gruppo + de labor sur licentias. index: js_1: O tu usa un navigator que non supporta JavaScript, o tu ha disactivate JavaScript. @@ -1434,6 +1283,109 @@ ia: id_not_configured: iD non ha essite configurate no_iframe_support: Tu navigator non supporta le iframes in HTML, necessari pro iste functionalitate. + export: + title: Exportar + area_to_export: Area a exportar + manually_select: Seliger manualmente un altere area + format_to_export: Formato de exportation + osm_xml_data: Datos XML de OpenStreetMap + map_image: Imagine de carta (monstra le strato standard) + embeddable_html: HTML incorporabile + licence: Licentia + export_details: Le datos de OpenStreetMap es licentiate sub le Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Si iste exportation falle, considera usar un del fontes listate hic + infra:' + body: 'Iste area es troppo grande pro esser exportate como datos XML de OpenStreetMap. + Per favor face zoom avante, o selige un area minor, o usa un del sequente + fontes pro discargamento de datos in massa:' + planet: + title: Planeta OSM + description: Copias regularmente actualisate del base de datos complete + de OpenStreetMap + overpass: + title: Overpass API + description: Discargar iste quadro delimitator ab un replica del base de + datos de OpenStreetMap + geofabrik: + title: Discargamentos de Geofabrik + description: Extractos regularmente actualisate de continentes, paises, + e citates seligite + metro: + title: Extractos de Metro + description: Extractos de metropoles e lor areas circumvicin + other: + title: Altere fontes + description: Fontes additional listate in le wiki de OpenStreetMap + options: Optiones + format: 'Formato:' + scale: Scala + max: max + image_size: 'Dimension del imagine:' + zoom: Zoom + add_marker: Adder un marcator al carta + latitude: 'Lat:' + longitude: 'Lon:' + output: Resultato + paste_html: Colla HTML pro incorporar in sito web + export_button: Exportar + fixthemap: + title: Reportar un problema / Corriger le carta + how_to_help: + title: Como adjutar + join_the_community: + title: Adherer al communitate + explanation_html: Si tu ha trovate un problema con nostre datos cartographic, + per exemplo si il manca un cammino o tu adresse, lo melior es inscriber + te a OpenStreetMap e adder o reparar le datos tu mesme. + add_a_note: + instructions_html: Clicca simplemente sur o sur + le mesme icone in le quadro del carta. Un marcator essera addite al carta, + que tu pote displaciar trahente lo con le mouse. Adde tu message, pois + clicca sur Salveguardar, e altere cartographos lo investigara. + other_concerns: + title: Altere preoccupationes + explanation_html: Si tu ha preoccupationes sur le maniera in que nostre datos + es usate o sur le contento, per favor consulta nostre pagina sur le derectos + de autor pro obtener information juridic, o contacta le gruppo + de labor OSMF appropriate. + help: + title: Obtener adjuta + introduction: OpenStreetMap ha plure ressources pro apprender a cognoscer le + projecto, pro poner e responder a questiones e pro discuter e documentar le + subjectos de cartographia in collaboration con alteres. + welcome: + url: /welcome + title: Benvenite a OSM + description: Comencia con iste guida rapide sur le fundamentos de OpenStreetMap. + beginners_guide: + title: Guida pro comenciantes + description: Guida pro comenciantes, mantenite per le communitate. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Pone un question o cerca responsas sur le sito de questiones + e responsas de OSM. + mailing_lists: + title: Listas de diffusion + description: Pone un question o discute cosas interessante sur un varietate + de listas de diffusion thematic o regional. + forums: + title: Foros + description: Questiones e discussiones pro qui prefere un interfacie in stilo + de tabuliero de bulletines. + irc: + title: IRC + description: Conversation interactive in multe linguas differente e sur multe + themas. + switch2osm: + description: Adjuta pro companias e organisationes qui vole migrar a cartas + e altere servicios a base de OpenStreetMap. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Percurre le wiki pro le documentation in detalio de OSM. sidebar: search_results: Resultatos del recerca close: Clauder @@ -1533,6 +1485,54 @@ ia: image: Imagine alt: Texto alternative url: URL + welcome: + title: Benvenite! + introduction_html: Bevenite a OpenStreetMap, le carta libere e modificabile + del mundo. Ora que tu te ha inscribite, tu es preste a comenciar a cartographiar. + Ecce un guida curte con le cosas le plus importante a saper. + whats_on_the_map: + title: Que es sur le carta? + on_html: OpenStreetMap es un loco pro cartographar cosas real e actual; + illo include milliones de edificios, stratas e altere detalios sur locos. + Tu pote cartographar qualcunque cosa del mundo real que te interessa. + off_html: Illo non include datos subjective como punctos de appreciation, + objectos historic o hypothetic. Le datos ab fontes sub copyright es equalmente + excludite; non copia cosas ab cartas in linea o de papiro sin permission + special! + basic_terms: + title: Vocabulario de base pro le cartographia + paragraph_1_html: OpenStreetMap ha un jargon proprie. Ecce alcun parolas clave + que te essera utile. + editor_html: Un editor es un programma o sito web que tu + pote usar pro modificar le carta. + node_html: Un nodo es un puncto sur le carta, como un restaurante + o un arbore individual. + way_html: Un via es un linea o area, como un strata, fluxo, + laco o edificio. + tag_html: Un etiquetta es un unitate de information sur un + nodo o via, como le nomine de un restaurante o le limite de velocitate de + un strata. + rules: + title: Regulas! + paragraph_1_html: OpenStreetMap ha poc regulas formal, ma nos expecta que + tote le participantes collabora e communica con le communitate. Si vos considera + un activitate altere que modification per mano, lege e seque le directivas + sur le importation + e sur le modification + automatisate. + questions: + title: Questiones? + paragraph_1_html: |- + OpenStreetMap ha plure ressources pro apprender a cognoscer le projecto, pro poner e responder a questiones e pro discuter e documentar le subjectos de carthographia in collaboration con alteres. + Obtene adjuta hic. + start_mapping: comenciar le cartographia + add_a_note: + title: Non ha tempore pro modificar? Adde un nota! + paragraph_1_html: Si tu vole meliorar un micre cosa e non ha le tempore pro + crear un conto e apprender a modificar, alora il es facile adder un nota. + paragraph_2_html: |- + Simplemente visita le carta e clicca sur le icone de nota: + . Un marcator essera addite al carta, que tu pote displaciar trahente lo con le mouse. Adde tu message, pois clicca sur Salveguardar, e altere cartographos lo investigara. trace: visibility: private: Private (solmente condividite como anonymo, punctos non ordinate) @@ -1663,7 +1663,7 @@ ia: Per favor aperi session in le interfacie web pro vider le Conditiones de contributor. Non es necessari declarar se de accordo, ma es obligatori haber legite los. oauth: - oauthorize: + authorize: title: Autorisar accesso a tu conto request_access: Le application %{app_name} requesta accesso a tu conto "%{user}". Per favor verifica si tu vole que le application ha le sequente possibilitates. @@ -1677,11 +1677,11 @@ ia: allow_write_gpx: incargar tracias GPS. allow_write_notes: modificar notas. grant_access: Conceder accesso - oauthorize_success: + authorize_success: title: Requesta de autorisation acceptate allowed: Tu ha concedite al application %{app_name} le accesso a tu conto. verification: Le codice de verification es %{code}. - oauthorize_failure: + authorize_failure: title: Requesta de autorisation fallite denied: Tu ha refusate al application %{app_name} le accesso a tu conto. invalid: Le indicio de autorisation non es valide. @@ -2127,7 +2127,7 @@ ia: confirm: Confirmar fail: Impossibile revocar le rolo `%{role}' del usator `%{name}'. Verifica que e le usator e le rolo es valide. - user_block: + user_blocks: model: non_moderator_update: Debe esser moderator pro crear o actualisar un blocada. non_moderator_revoke: Debe esser moderator pro revocar un blocada. @@ -2189,20 +2189,6 @@ ia: period: one: 1 hora other: '%{count} horas' - partial: - show: Monstrar - edit: Modificar - revoke: Revocar! - confirm: Es tu secur? - display_name: Usator blocate - creator_name: Creator - reason: Motivo del blocada - status: Stato - revoker_name: Revocate per - not_revoked: (non revocate) - showing_page: Pagina %{page} - next: Sequente » - previous: « Precedente helper: time_future: Expira in %{time}. until_login: Active usque le usator aperi un session. @@ -2233,8 +2219,22 @@ ia: back: Vider tote le blocadas revoker: 'Revocator:' needs_view: Le usator debe aperir un session ante que iste blocada es cancellate. - note: - description: + block: + not_revoked: (non revocate) + show: Monstrar + edit: Modificar + revoke: Revocar! + blocks: + display_name: Usator blocate + creator_name: Creator + reason: Motivo del blocada + status: Stato + revoker_name: Revocate per + showing_page: Pagina %{page} + next: Sequente » + previous: « Precedente + notes: + comment: opened_at_html: Create %{when} retro opened_at_by_html: Create %{when} retro per %{user} commented_at_html: Actualisate %{when} retro @@ -2414,7 +2414,7 @@ ia: show_address: Monstrar adresse query_features: Cercar objectos centre_map: Centrar le carta hic - redaction: + redactions: edit: description: Description heading: Modificar obscuration diff --git a/config/locales/id.yml b/config/locales/id.yml index 41fd9dd4f..f9dd4ee80 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -354,53 +354,6 @@ id: ago: '%{ago} yang lalu' newer_comments: Komentar Baru older_comments: Komentar Lama - export: - title: Ekspor - start: - area_to_export: Wilayah untuk diekspor - manually_select: Pilih wilayah berbeda secara manual - format_to_export: Format untuk diekspor - osm_xml_data: Data XML OpenStreetMap - map_image: Gambar Peta (menunjukkan layer standar) - embeddable_html: HTML yang terkait - licence: Lisensi - export_details: Data OpenStreetMap memiliki lisensi Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Jika ekspor di atas gagal, silakan pertimbangkan untuk menggunakan - satu dari sumber yang tercantum di bawah ini:' - body: Wilayah ini terlalu besar untuk diekspor sebagai data XML OpenStreetMap. - Silakan perbesar atau pilih wilayah yang lebih kecil, atau gunakan salah - satu sumber di bawah ini untuk mengunduh data massal. - planet: - title: Planet OSM - description: Salinan lengkap basis data OpenStreetMap yang dimutakhiran - secara rutin - overpass: - title: Melebihi API - description: Unduh kotak pembatas ini dari cermin dari database OpenStreetMap - geofabrik: - title: Unduhan Geofabrik - description: Diperbarui secara rutin ekstrak benua, negara dan kota-kota - yang dipilih - metro: - title: Ekstrak Metro - description: Ekstrak untuk kota-kota besar dunia dan daerah sekitarnya - other: - title: Sumber Lain - description: Sumber-sumber tambahan yang tercantum di wiki OpenStreetMap - options: Pilihan - format: Format - scale: Skala - max: Maks - image_size: Ukuran gambar - zoom: Perbesar - add_marker: Tambahkan penanda ke peta - latitude: 'Lintang:' - longitude: 'Bujur:' - output: Hasil - paste_html: Salin HTML untuk menyimpan di website - export_button: Ekspor geocoder: search: title: @@ -973,265 +926,6 @@ id: text: Menyumbang learn_more: Pelajari Lagi more: Selanjutnya - license_page: - foreign: - title: Tentang terjemahan ini - text: Saat terjadi konflik antara halaman terjemahan dan %{english_original_link}, - halaman bahasa Inggris akan diutamakan - english_link: asli bahasa Inggris - native: - title: Tentang halaman ini - text: Anda melihat versi bahasa Inggris dari halaman hak cipta. Anda dapat kembali - ke %{native_link} dari halaman ini atau Anda dapat berhenti membaca tentang - hak cipta dan %{mapping_link}. - native_link: versi bahasa Indonesia - mapping_link: memulai pemetaan - legal_babble: - title_html: Hak Cipta & Lisensi - intro_1_html: |- - OpenStreetMap® adalah data terbuka, berlisensi di bawah Open Data - Commons Open Database License (ODbL) oleh OpenStreetMap Foundation (OSMF). - intro_2_html: |- - Anda dibebaskan untuk menyalin, menyalurkan, mentransfer dan mengadaptasi data kami, - selama Anda menyertakan OpenStreetMap dan kontributornya. Jika Anda mengubah atau membangun - data kami, Anda harus menyalurkan hasilnya dalam lisensi yang sama. - Kode legal berisi penjelasan hak dan kewajiban Anda. - intro_3_html: |- - Kartografi dalam tampilan peta dan dokumentasi kami - berlisensi di bawah Creative - Commons Attribution-ShareAlike 2.0 lisensi (CC-BY-SA). - credit_title_html: Cara memberikan kredit pada OpenStreetMap - credit_1_html: Kami mewajibkan Anda untuk menggunakan kredit “© Kontributor - OpenStreetMap”. - credit_2_html: Anda juga harus memperjelas bahwa data tersedia di bawah Lisensi - Database Terbuka, dan jika menggunakan tiles peta kami, kartografi berlisensi - sebagai CC-BY-SA. Anda dapat melakukannya dengan menghubungkan ke halaman - hak cipta. Alternatifnya, dan sebagai sebuah persyaratan jika Anda mendistribusikan - OSM dalam bentuk data, Anda dapat menamakan dan menghubungkannya langsung - pada lisensinya. Pada media yang tidak memungkinkan tautan (misalnya hasil - cetak), kami menyarankan Anda untuk mengarahkan pembaca Anda pada openstreetmap.org - (mungkin dengan memperluas halaman 'OpenStreetMap' secara penuh), untuk opendatacommons.org, - dan jika relevan, untuk creativecommons.org. - credit_3_html: |- - Untuk peta elektronik dapat ditelusuri, kredit harus muncul di sudut peta. - Sebagai contoh: - attribution_example: - alt: Contoh tentang bagaimana memberikan atribusi untuk OpenStreetMap pada - halaman web - title: Contoh atribusi - more_title_html: Mengetahui lebih lanjut - more_1_html: |- - Baca lebih lanjut tentang pemakaian data kami, dan cara memberi kami kredit, di halaman lisensi OSMF dan Pertanyaan Legal yang sering diajukan (FAQ) komunitas. - more_2_html: |- - Meskipun OpenStreetMap merupakan data yang terbuka, kami tidak dapat menyediakan API peta gratis bagi pihak ketiga. - Lihat Kebijakan Penggunaan API, - Kebijakan Penggunaan Tile - dan Kebijakan Penggunaan Nominatim. - contributors_title_html: Kontributor kami - contributors_intro_html: 'Kontributor kami terdiri dari ribuan orang. Kami juga - memasukkan data dengan lisensi terbuka yang didapat dari badan-badan pemetaan - nasional dan sumber lainnya, diantaranya:' - contributors_at_html: |- - Austria: Berisi data dari - Stadt Wien (lisensi - CC BY), - Land Vorarlberg dan - Land Tirol (lisensi CC-BY AT dengan perubahan). - contributors_ca_html: |- - Kanada: Berisi data dari - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), dan StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: "Finlandia: Berisi data dari basis data - topografi\nSurvei Pertanahan Nasional Finlandia \n dan dataset lainnya, di - bawah\nLisensi - NLSFI." - contributors_fr_html: |- - Perancis: Berisi data yang bersumber dari - Direction Générale des Impôts. - contributors_nl_html: |- - Belanda: Berisi © data AND, 2007 - (www.and.com) - contributors_nz_html: |- - Selandia Baru: Berisi data yang bersumber dari - Land Information New Zealand. Hak cipta milik Kerajaan. - contributors_si_html: |- - Slovenia: Berisi data dari - Surveying and Mapping Authority dan - Ministry of Agriculture, Forestry and Food - (informasi publik Slovenia). - contributors_za_html: |- - Afrika Selatan: Berisi data yang bersumber dari - Chief Directorate: - National Geo-Spatial Information, hak cipta milik negara. - contributors_gb_html: |- - Britania Raya: Berisi data Ordnance - Survey © Hak cipta dan basis data milik Kerajaan - 2010-12. - contributors_footer_1_html: |- - Untuk rincian lebih lanjut, dan sumber-sumber lainnya yang telah digunakan untuk meningkatkan OpenStreetMap, silakan lihat halaman Kontributor pada Wiki OpenStreetMap. - contributors_footer_2_html: Dimasukkannya data dalam OpenStreetMap tidak berarti - bahwa penyedia data yang asli mendukung OpenStreetMap, menyediakan jaminan, - atau menerima tanggung jawab apapun. - infringement_title_html: Pelanggaran hak cipta - infringement_1_html: Kontributor OSM diingatkan untuk tidak menambahkan data - dari sumber yang memiliki hak cipta sendiri (misalnya, Google Maps atau peta - cetak) tanpa izin eksplisit dari pemegang hak cipta. - infringement_2_html: |- - Jika Anda percaya bahwa materi berhak cipta telah tidak tepat - ditambahkan ke OpenStreetMap database atau situs ini, silakan lihat prosedur takedown kami atau kirimkan file langsung pada - pengajuan halaman on-line. - trademarks_title_html: Merek dagang - trademarks_1_html: OpenStreetMap, logo lup, dan State of the Map adalah merek - dagang terdaftar dari OpenStreetMap Foundation. Jika Anda memiliki pertanyaan - tentang penggunaan merek tersebut, silakan kirim pertanyaan Anda ke Licence - Working Group. - welcome_page: - title: Selamat datang! - introduction_html: Selamat datang di OpenStreetMap, peta dunia gratis dan dapat - disunting. Kini setelah Anda mendaftar, Anda sudah siap untuk memulai pemetaan. - Berikut ini adalah panduan cepat dengan hal-hal terpenting yang perlu Anda ketahui. - whats_on_the_map: - title: Apa yang ada di Peta - on_html: OpenStreetMap adalah tempat untuk memetakan hal-hal, baik nyata - dan saat ini - ini mencakup jutaan bangunan, jalan, dan rincian lainnya - tentang tempat-tempat. Anda dapat memetakan fitur dunia-nyata apapun yang - menarik untuk Anda. - off_html: Apa yang tidak termasuk adalah data pendapat seperti peringkat, - fitur sejarah atau hipotesis, dan data dari sumber berhak cipta. Kecuali Anda - mempunyai izin khusus, jangan menyalin dari peta online atau kertas. - basic_terms: - title: Istilah-Istilah Dasar untuk Pemetaan - paragraph_1_html: OpenStreetMap memiliki beberapa istilah tersendiri. Berikut - ini beberapa kata kunci yang dapat digunakan. - editor_html: Editor adalah sebuah program atau situs web yang - dapat Anda gunakan untuk menyunting peta. - node_html: Sebuah node adalah sebuah titik pada peta, seperti - sebuah restoran tunggal atau sebuah pohon. - way_html: Sebuah jalur berupa garis merupakan wilayah seperti - jalan, sungai, danau, atau bangunan. - tag_html: "Sebuah tag adalah sedikit data tentang simpul atau - jalan, seperti \nnama restoran atau batas kecepatan jalan" - rules: - title: Aturan! - paragraph_1_html: OpenStreetMap memiliki sedikit aturan formal tetapi kami mengharapkan - semua pesertanya untuk bekerja sama dan berkomunikasi dalam komunitas. Jika - Anda memikirkan aktivitas selain menyunting secara langsung, mohon baca dan - ikuti panduan padaImpor - dan Penyuntingan - otomatis. - questions: - title: Ada pertanyaan? - paragraph_1_html: "OpenStreetMap memiliki beberapa sumber daya untuk belajar - tentang proyek, bertanya dan menjawab \npertanyaan, dan bersama-sama mendiskusikan - dan mendokumentasikan topik pemetaan.\nDapatkan bantuan - di sini." - start_mapping: Mulai pemetaan - add_a_note: - title: Keberatan menyunting? Tambahkan catatan! - paragraph_1_html: Jika Anda ingin memberi perbaikan kecil dan tidak mau mendaftar - ataupun mempelajari cara penyuntingan, Anda cukup memberi catatan. - paragraph_2_html: |- - Langsung ke peta dan klik ikon catatan: - . Ini akan menambahkan sebuah penanda ke peta yang dapat bergerak - dengan menyeretnya. Tambahkan pesan, lalu klik simpan, dan pemeta lainnya akan menyelidiki. - fixthemap: - title: Laporkan kesalahan / Perbaiki peta - how_to_help: - title: Cara Membantu - join_the_community: - title: Bergabung dengan komunitas - explanation_html: "Jika Anda telah melihat masalah dengan data peta kami, - misalnya jalan yang hilang atau alamat Anda, cara terbaik untuk \nmelanjutkan - adalah untuk bergabung dengan komunitas OpenStreetMap dan menambah atau - memperbaiki data diri." - add_a_note: - instructions_html: "Hanya klik atau ikon yang sama - pada layar peta. \nIni akan menambahkan penanda ke peta, yang dapat Anda - bergerak \ndengan menyeret. Tambahkan pesan Anda, lalu klik simpan, dan - pembuat peta lainnya akan menyelidiki." - other_concerns: - title: Kekhawatiran lain - explanation_html: "Jika Anda memiliki kekhawatiran tentang bagaimana data kami - sedang digunakan atau tentang isi silakan baca\nhalaman - hak cipta untuk informasi hukum lainnya, atau hubungi \nkelompok - kerja OSMF yang sesuai." - help_page: - title: Dapatkan Bantuan - introduction: "OpenStreetMap memiliki beberapa sumber daya untuk belajar tentang - proyek, bertanya dan menjawab pertanyaan, \ndan bersama-sama mendiskusikan dan - mendokumentasikan topik pemetaan." - welcome: - url: /welcome - title: Selamat datang di OSM - description: Mulailah dengan panduan cepat meliputi dasar-dasar OpenStreetMap. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Panduan%27_pemula - title: Pedoman Pemula - description: Panduan yang ditunjang komunitas bagi pemula. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Ajukan pertanyaan atau mencari jawaban di situs tanya-jawab OSM - ini. - mailing_lists: - title: Daftar Alamat - description: Bertanya atau berdiskusi hal-hal menarik dalam daftar alamat menurut - berbagai topik dan daerah. - forums: - title: Forum - description: Pertanyaan dan diskusi bagi mereka yang lebih menyukai antarmuka - bergaya papan pengumuman. - irc: - title: IRC - description: Obrolan interaktif dalam berbagai bahasa mengenai bermacam-macam - topik. - switch2osm: - title: switch2osm - description: Bantuan untuk perusahaan dan organisasi yang beralih ke peta dan - layanan lain berbasis OpenStreetMap. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Telusuri wiki untuk dokumentasi mendalam OSM. - about_page: - next: Berikutnya - copyright_html: ©Kontributor
        OpenStreetMap - used_by: Kekuatan %{name} memetakan data pada ribuan situs web, aplikasi seluler, - dan perangkat keras - lede_text: "OpenStreetMap dibangun oleh komunitas pembuat peta yang berkontribusi - dan memelihara data \ntentang jalan, jalur, kafe, stasiun kereta api, dan masih - banyak lagi, di seluruh dunia." - local_knowledge_title: Pengetahuan Lokal - local_knowledge_html: "OpenStreetMap menekankan pengetahuan lokal. Kontributor - menggunakan \ncitra udara, perangkat GPS, dan peta lapangan berteknologi rendah - untuk memverifikasi bahwa OSM akurat dan termutakhir." - community_driven_title: Berbasis Masyarakat - community_driven_html: |- - Komunitas OpenStreetMap sangat beragam, rajin berkontribusi, dan semakin besar setiap harinya. - Kontributor kami terdiri dari penggemar peta, pegiat SIG, teknisi - yang mengurus server OSM, relawan yang memetakan kawasan terdampak bencana, - dan lain-lain. - Untuk mengetahui lebih lanjut, baca catatan harian pengguna, - blog komunitas, dan situs web OSM Foundation. - open_data_title: Data Terbuka - open_data_html: 'OpenStreetMap adalah data terbuka: Anda bebas untuk menggunakannya - untuk tujuan apapun selama Anda memberi penghargaan pada OpenStreetMap dan kontributornya. - Jika Anda mengubah atau membangun dari data dengan cara tertentu, Anda dapat - menyebarkan hasilnya hanya di bawah lisensi yang sama. Lihat halaman - Hak Cipta dan Lisensi untuk perinciannya.' - legal_title: Legal - legal_html: |- - Situs ini dan layanan terkait lainnya dioperasikan secara resmi oleh OpenStreetMap Foundation (OSMF) atas nama komunitas. Menggunakan semua layanan yang dioperasikan oleh OSMF tunduk kepada - Kebijakan Penggunaan Diterima dan Kebijakan Privasi kami -
        - Silakan menghubungi OSMF jika Anda punya pertanyaan seputar lisensi, hak cipta, atau isu dan pertanyaan hukum lainnya. - partners_title: Rekan notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} mengomentari sebuah entri catatan harian' @@ -1426,6 +1120,158 @@ id: delete: deleted: Pesan dihapus site: + about: + next: Berikutnya + copyright_html: ©Kontributor
        OpenStreetMap + used_by: Kekuatan %{name} memetakan data pada ribuan situs web, aplikasi seluler, + dan perangkat keras + lede_text: "OpenStreetMap dibangun oleh komunitas pembuat peta yang berkontribusi + dan memelihara data \ntentang jalan, jalur, kafe, stasiun kereta api, dan + masih banyak lagi, di seluruh dunia." + local_knowledge_title: Pengetahuan Lokal + local_knowledge_html: "OpenStreetMap menekankan pengetahuan lokal. Kontributor + menggunakan \ncitra udara, perangkat GPS, dan peta lapangan berteknologi rendah + untuk memverifikasi bahwa OSM akurat dan termutakhir." + community_driven_title: Berbasis Masyarakat + community_driven_html: |- + Komunitas OpenStreetMap sangat beragam, rajin berkontribusi, dan semakin besar setiap harinya. + Kontributor kami terdiri dari penggemar peta, pegiat SIG, teknisi + yang mengurus server OSM, relawan yang memetakan kawasan terdampak bencana, + dan lain-lain. + Untuk mengetahui lebih lanjut, baca catatan harian pengguna, + blog komunitas, dan situs web OSM Foundation. + open_data_title: Data Terbuka + open_data_html: 'OpenStreetMap adalah data terbuka: Anda bebas untuk + menggunakannya untuk tujuan apapun selama Anda memberi penghargaan pada OpenStreetMap + dan kontributornya. Jika Anda mengubah atau membangun dari data dengan cara + tertentu, Anda dapat menyebarkan hasilnya hanya di bawah lisensi yang sama. + Lihat halaman Hak Cipta dan Lisensi untuk + perinciannya.' + legal_title: Legal + legal_html: |- + Situs ini dan layanan terkait lainnya dioperasikan secara resmi oleh OpenStreetMap Foundation (OSMF) atas nama komunitas. Menggunakan semua layanan yang dioperasikan oleh OSMF tunduk kepada + Kebijakan Penggunaan Diterima dan Kebijakan Privasi kami +
        + Silakan menghubungi OSMF jika Anda punya pertanyaan seputar lisensi, hak cipta, atau isu dan pertanyaan hukum lainnya. + partners_title: Rekan + copyright: + foreign: + title: Tentang terjemahan ini + text: Saat terjadi konflik antara halaman terjemahan dan %{english_original_link}, + halaman bahasa Inggris akan diutamakan + english_link: asli bahasa Inggris + native: + title: Tentang halaman ini + text: Anda melihat versi bahasa Inggris dari halaman hak cipta. Anda dapat + kembali ke %{native_link} dari halaman ini atau Anda dapat berhenti membaca + tentang hak cipta dan %{mapping_link}. + native_link: versi bahasa Indonesia + mapping_link: memulai pemetaan + legal_babble: + title_html: Hak Cipta & Lisensi + intro_1_html: |- + OpenStreetMap® adalah data terbuka, berlisensi di bawah Open Data + Commons Open Database License (ODbL) oleh OpenStreetMap Foundation (OSMF). + intro_2_html: |- + Anda dibebaskan untuk menyalin, menyalurkan, mentransfer dan mengadaptasi data kami, + selama Anda menyertakan OpenStreetMap dan kontributornya. Jika Anda mengubah atau membangun + data kami, Anda harus menyalurkan hasilnya dalam lisensi yang sama. + Kode legal berisi penjelasan hak dan kewajiban Anda. + intro_3_html: |- + Kartografi dalam tampilan peta dan dokumentasi kami + berlisensi di bawah Creative + Commons Attribution-ShareAlike 2.0 lisensi (CC-BY-SA). + credit_title_html: Cara memberikan kredit pada OpenStreetMap + credit_1_html: Kami mewajibkan Anda untuk menggunakan kredit “© + Kontributor OpenStreetMap”. + credit_2_html: Anda juga harus memperjelas bahwa data tersedia di bawah Lisensi + Database Terbuka, dan jika menggunakan tiles peta kami, kartografi berlisensi + sebagai CC-BY-SA. Anda dapat melakukannya dengan menghubungkan ke halaman + hak cipta. Alternatifnya, dan sebagai sebuah persyaratan jika Anda mendistribusikan + OSM dalam bentuk data, Anda dapat menamakan dan menghubungkannya langsung + pada lisensinya. Pada media yang tidak memungkinkan tautan (misalnya hasil + cetak), kami menyarankan Anda untuk mengarahkan pembaca Anda pada openstreetmap.org + (mungkin dengan memperluas halaman 'OpenStreetMap' secara penuh), untuk + opendatacommons.org, dan jika relevan, untuk creativecommons.org. + credit_3_html: |- + Untuk peta elektronik dapat ditelusuri, kredit harus muncul di sudut peta. + Sebagai contoh: + attribution_example: + alt: Contoh tentang bagaimana memberikan atribusi untuk OpenStreetMap pada + halaman web + title: Contoh atribusi + more_title_html: Mengetahui lebih lanjut + more_1_html: |- + Baca lebih lanjut tentang pemakaian data kami, dan cara memberi kami kredit, di halaman lisensi OSMF dan Pertanyaan Legal yang sering diajukan (FAQ) komunitas. + more_2_html: |- + Meskipun OpenStreetMap merupakan data yang terbuka, kami tidak dapat menyediakan API peta gratis bagi pihak ketiga. + Lihat Kebijakan Penggunaan API, + Kebijakan Penggunaan Tile + dan Kebijakan Penggunaan Nominatim. + contributors_title_html: Kontributor kami + contributors_intro_html: 'Kontributor kami terdiri dari ribuan orang. Kami + juga memasukkan data dengan lisensi terbuka yang didapat dari badan-badan + pemetaan nasional dan sumber lainnya, diantaranya:' + contributors_at_html: |- + Austria: Berisi data dari + Stadt Wien (lisensi + CC BY), + Land Vorarlberg dan + Land Tirol (lisensi CC-BY AT dengan perubahan). + contributors_ca_html: |- + Kanada: Berisi data dari + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), dan StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: "Finlandia: Berisi data dari basis + data topografi\nSurvei Pertanahan Nasional Finlandia \n dan dataset lainnya, + di bawah\nLisensi + NLSFI." + contributors_fr_html: |- + Perancis: Berisi data yang bersumber dari + Direction Générale des Impôts. + contributors_nl_html: |- + Belanda: Berisi © data AND, 2007 + (www.and.com) + contributors_nz_html: |- + Selandia Baru: Berisi data yang bersumber dari + Land Information New Zealand. Hak cipta milik Kerajaan. + contributors_si_html: |- + Slovenia: Berisi data dari + Surveying and Mapping Authority dan + Ministry of Agriculture, Forestry and Food + (informasi publik Slovenia). + contributors_za_html: |- + Afrika Selatan: Berisi data yang bersumber dari + Chief Directorate: + National Geo-Spatial Information, hak cipta milik negara. + contributors_gb_html: |- + Britania Raya: Berisi data Ordnance + Survey © Hak cipta dan basis data milik Kerajaan + 2010-12. + contributors_footer_1_html: |- + Untuk rincian lebih lanjut, dan sumber-sumber lainnya yang telah digunakan untuk meningkatkan OpenStreetMap, silakan lihat halaman Kontributor pada Wiki OpenStreetMap. + contributors_footer_2_html: Dimasukkannya data dalam OpenStreetMap tidak berarti + bahwa penyedia data yang asli mendukung OpenStreetMap, menyediakan jaminan, + atau menerima tanggung jawab apapun. + infringement_title_html: Pelanggaran hak cipta + infringement_1_html: Kontributor OSM diingatkan untuk tidak menambahkan data + dari sumber yang memiliki hak cipta sendiri (misalnya, Google Maps atau + peta cetak) tanpa izin eksplisit dari pemegang hak cipta. + infringement_2_html: |- + Jika Anda percaya bahwa materi berhak cipta telah tidak tepat + ditambahkan ke OpenStreetMap database atau situs ini, silakan lihat prosedur takedown kami atau kirimkan file langsung pada + pengajuan halaman on-line. + trademarks_title_html: Merek dagang + trademarks_1_html: OpenStreetMap, logo lup, dan State of the Map adalah merek + dagang terdaftar dari OpenStreetMap Foundation. Jika Anda memiliki pertanyaan + tentang penggunaan merek tersebut, silakan kirim pertanyaan Anda ke Licence + Working Group. index: js_1: Anda menggunakan browser yang tidak mendukung JavaScript, atau Anda telah menonaktifkan JavaScript. @@ -1457,6 +1303,111 @@ id: id_not_configured: iD belum dikonfigurasikan no_iframe_support: Peramban Anda tidak mendukung iframe HTML yang diperlukan untuk fitur ini. + export: + title: Ekspor + area_to_export: Wilayah untuk diekspor + manually_select: Pilih wilayah berbeda secara manual + format_to_export: Format untuk diekspor + osm_xml_data: Data XML OpenStreetMap + map_image: Gambar Peta (menunjukkan layer standar) + embeddable_html: HTML yang terkait + licence: Lisensi + export_details: Data OpenStreetMap memiliki lisensi Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Jika ekspor di atas gagal, silakan pertimbangkan untuk menggunakan + satu dari sumber yang tercantum di bawah ini:' + body: Wilayah ini terlalu besar untuk diekspor sebagai data XML OpenStreetMap. + Silakan perbesar atau pilih wilayah yang lebih kecil, atau gunakan salah + satu sumber di bawah ini untuk mengunduh data massal. + planet: + title: Planet OSM + description: Salinan lengkap basis data OpenStreetMap yang dimutakhiran + secara rutin + overpass: + title: Melebihi API + description: Unduh kotak pembatas ini dari cermin dari database OpenStreetMap + geofabrik: + title: Unduhan Geofabrik + description: Diperbarui secara rutin ekstrak benua, negara dan kota-kota + yang dipilih + metro: + title: Ekstrak Metro + description: Ekstrak untuk kota-kota besar dunia dan daerah sekitarnya + other: + title: Sumber Lain + description: Sumber-sumber tambahan yang tercantum di wiki OpenStreetMap + options: Pilihan + format: Format + scale: Skala + max: Maks + image_size: Ukuran gambar + zoom: Perbesar + add_marker: Tambahkan penanda ke peta + latitude: 'Lintang:' + longitude: 'Bujur:' + output: Hasil + paste_html: Salin HTML untuk menyimpan di website + export_button: Ekspor + fixthemap: + title: Laporkan kesalahan / Perbaiki peta + how_to_help: + title: Cara Membantu + join_the_community: + title: Bergabung dengan komunitas + explanation_html: "Jika Anda telah melihat masalah dengan data peta kami, + misalnya jalan yang hilang atau alamat Anda, cara terbaik untuk \nmelanjutkan + adalah untuk bergabung dengan komunitas OpenStreetMap dan menambah atau + memperbaiki data diri." + add_a_note: + instructions_html: "Hanya klik atau ikon yang + sama pada layar peta. \nIni akan menambahkan penanda ke peta, yang dapat + Anda bergerak \ndengan menyeret. Tambahkan pesan Anda, lalu klik simpan, + dan pembuat peta lainnya akan menyelidiki." + other_concerns: + title: Kekhawatiran lain + explanation_html: "Jika Anda memiliki kekhawatiran tentang bagaimana data + kami sedang digunakan atau tentang isi silakan baca\nhalaman + hak cipta untuk informasi hukum lainnya, atau hubungi \nkelompok + kerja OSMF yang sesuai." + help: + title: Dapatkan Bantuan + introduction: "OpenStreetMap memiliki beberapa sumber daya untuk belajar tentang + proyek, bertanya dan menjawab pertanyaan, \ndan bersama-sama mendiskusikan + dan mendokumentasikan topik pemetaan." + welcome: + url: /welcome + title: Selamat datang di OSM + description: Mulailah dengan panduan cepat meliputi dasar-dasar OpenStreetMap. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Panduan%27_pemula + title: Pedoman Pemula + description: Panduan yang ditunjang komunitas bagi pemula. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Ajukan pertanyaan atau mencari jawaban di situs tanya-jawab OSM + ini. + mailing_lists: + title: Daftar Alamat + description: Bertanya atau berdiskusi hal-hal menarik dalam daftar alamat + menurut berbagai topik dan daerah. + forums: + title: Forum + description: Pertanyaan dan diskusi bagi mereka yang lebih menyukai antarmuka + bergaya papan pengumuman. + irc: + title: IRC + description: Obrolan interaktif dalam berbagai bahasa mengenai bermacam-macam + topik. + switch2osm: + title: switch2osm + description: Bantuan untuk perusahaan dan organisasi yang beralih ke peta + dan layanan lain berbasis OpenStreetMap. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Telusuri wiki untuk dokumentasi mendalam OSM. sidebar: search_results: Hasil Pencarian close: Tutup @@ -1556,6 +1507,56 @@ id: image: Gambar alt: Teks Alternatif url: URL + welcome: + title: Selamat datang! + introduction_html: Selamat datang di OpenStreetMap, peta dunia gratis dan dapat + disunting. Kini setelah Anda mendaftar, Anda sudah siap untuk memulai pemetaan. + Berikut ini adalah panduan cepat dengan hal-hal terpenting yang perlu Anda + ketahui. + whats_on_the_map: + title: Apa yang ada di Peta + on_html: OpenStreetMap adalah tempat untuk memetakan hal-hal, baik nyata + dan saat ini - ini mencakup jutaan bangunan, jalan, dan rincian lainnya + tentang tempat-tempat. Anda dapat memetakan fitur dunia-nyata apapun yang + menarik untuk Anda. + off_html: Apa yang tidak termasuk adalah data pendapat seperti peringkat, + fitur sejarah atau hipotesis, dan data dari sumber berhak cipta. Kecuali + Anda mempunyai izin khusus, jangan menyalin dari peta online atau kertas. + basic_terms: + title: Istilah-Istilah Dasar untuk Pemetaan + paragraph_1_html: OpenStreetMap memiliki beberapa istilah tersendiri. Berikut + ini beberapa kata kunci yang dapat digunakan. + editor_html: Editor adalah sebuah program atau situs web + yang dapat Anda gunakan untuk menyunting peta. + node_html: Sebuah node adalah sebuah titik pada peta, seperti + sebuah restoran tunggal atau sebuah pohon. + way_html: Sebuah jalur berupa garis merupakan wilayah seperti + jalan, sungai, danau, atau bangunan. + tag_html: "Sebuah tag adalah sedikit data tentang simpul + atau jalan, seperti \nnama restoran atau batas kecepatan jalan" + rules: + title: Aturan! + paragraph_1_html: OpenStreetMap memiliki sedikit aturan formal tetapi kami + mengharapkan semua pesertanya untuk bekerja sama dan berkomunikasi dalam + komunitas. Jika Anda memikirkan aktivitas selain menyunting secara langsung, + mohon baca dan ikuti panduan padaImpor + dan Penyuntingan + otomatis. + questions: + title: Ada pertanyaan? + paragraph_1_html: "OpenStreetMap memiliki beberapa sumber daya untuk belajar + tentang proyek, bertanya dan menjawab \npertanyaan, dan bersama-sama mendiskusikan + dan mendokumentasikan topik pemetaan.\nDapatkan bantuan + di sini." + start_mapping: Mulai pemetaan + add_a_note: + title: Keberatan menyunting? Tambahkan catatan! + paragraph_1_html: Jika Anda ingin memberi perbaikan kecil dan tidak mau mendaftar + ataupun mempelajari cara penyuntingan, Anda cukup memberi catatan. + paragraph_2_html: |- + Langsung ke peta dan klik ikon catatan: + . Ini akan menambahkan sebuah penanda ke peta yang dapat bergerak + dengan menyeretnya. Tambahkan pesan, lalu klik simpan, dan pemeta lainnya akan menyelidiki. trace: visibility: private: Pribadi (hanya berbagi sebagai anonim, poin tidak berurut) @@ -1684,7 +1685,7 @@ id: log-in ke antarmuka web untuk melihat persyaratan kontributor. Anda tidak perlu untuk setuju, tapi Anda harus melihat mereka. oauth: - oauthorize: + authorize: title: Otorisasi akses ke akun Anda request_access: Aplikasi %{app_name} akan meminta akses ke akun, %{user}. Periksa apakah Anda ingin aplikasi untuk memiliki kemampuan berikut. Anda dapat memilih @@ -1698,11 +1699,11 @@ id: allow_write_gpx: unggah jejak GPS. allow_write_notes: memodifikasi catatan. grant_access: Ijinkan Akses - oauthorize_success: + authorize_success: title: Permintaan otorisasi diperbolehkan allowed: Anda telah memberikan aplikasi %{app_name} akses ke akun Anda. verification: Kode verifikasi adalah %{code}. - oauthorize_failure: + authorize_failure: title: Permintaan otorisasi gagal denied: Anda telah menolak aplikasi %{app_name} mengakses akun Anda. invalid: Otorisasi token ini tidak berlaku. @@ -2148,7 +2149,7 @@ id: confirm: Konfirmasi fail: Tidak dapat mencabut peran `%{role}' dari pengguna `%{name}'. Silahkan periksa bahwa pengguna dan perannya valid. - user_block: + user_blocks: model: non_moderator_update: Harus merupakan moderator untuk membuat atau memperbarui blokir. @@ -2212,20 +2213,6 @@ id: period: one: 1 hour other: '%{count} hours' - partial: - show: Tampilkan - edit: Edit - revoke: Batalkan! - confirm: Apakah Anda yakin? - display_name: Pengguna yang Diblokir - creator_name: Pencipta - reason: Alasan untuk blokir - status: Status - revoker_name: Dibatalkan oleh - not_revoked: (tidak dicabut) - showing_page: Halaman %{page} - next: Berikutnya » - previous: « Sebelumnya helper: time_future: Berakhir pada %{time}. until_login: Aktif sampai pengguna melakukan log in. @@ -2255,8 +2242,22 @@ id: back: Lihat semua blokir revoker: 'Pembatal:' needs_view: Pengguna harus log in sebelum blokir ini dihapus. - note: - description: + block: + not_revoked: (tidak dicabut) + show: Tampilkan + edit: Edit + revoke: Batalkan! + blocks: + display_name: Pengguna yang Diblokir + creator_name: Pencipta + reason: Alasan untuk blokir + status: Status + revoker_name: Dibatalkan oleh + showing_page: Halaman %{page} + next: Berikutnya » + previous: « Sebelumnya + notes: + comment: opened_at_html: Dibuat %{when} yang lalu opened_at_by_html: Dibuat %{when} yang lalu oleh %{user} commented_at_html: Diperbarui %{when} yang lalu @@ -2436,7 +2437,7 @@ id: show_address: Tampilkan alamat query_features: Fitur-fitur kueri centre_map: Pusatkan peta di sini - redaction: + redactions: edit: description: Deskripsi heading: Mengedit Redaksi diff --git a/config/locales/is.yml b/config/locales/is.yml index 4528b0fa8..d59f63f2c 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -250,7 +250,7 @@ is: list: title: Breytingasett title_user: Breytingar eftir %{user} - title_friend: Breytingar eftir vini þína + title_friend: Breytingar eftir vini mína title_nearby: Breytingar eftir nálæga notendur empty: Engin breytingasett fundust. empty_area: Engin breytingasett á þessu svæði. @@ -280,7 +280,7 @@ is: user_title: Blogg %{user} in_language_title: Bloggfærslur á %{language} new: Ný bloggfærsla - new_title: Semja nýja færslu á bloggið þitt + new_title: Semja nýja færslu á bloggið mitt no_entries: Engar bloggfærslur recent_entries: Nýlegar bloggfærslur older_entries: Eldri færslur @@ -345,51 +345,6 @@ is: ago: fyrir %{ago} síðan newer_comments: Nýrri athugasemdir older_comments: Eldri athugasemdir - export: - title: Flytja út - start: - area_to_export: Svæði til að niðurhala - manually_select: Velja annað svæði á kortinu - format_to_export: Skráasnið - osm_xml_data: OpenStreetMap XML gögn - map_image: Kortamynd (sýnir staðallagið) - embeddable_html: HTML til að bæta á vefsíðu - licence: Leyfi - export_details: OpenStreetMap gögnin eru með Open - Data Commons Open Database License (ODbL) notkunarleyfi. - too_large: - advice: 'Ef útflutningurinn hér að ofan mistekst, íhugaðu að nota einn af - gagnagjöfunum sem taldir eru upp hér að neðan:' - body: Svæðið sem þú ert að reyna að flytja út á OpenStreetMap á XML-sniði - er of stórt. Auktu aðdráttinn eða veldu smærra svæði, nú eða notaðu eina - af eftirfarandi leiðum til að flytja inn mikið magn gagna. - planet: - title: OSM-plánetan - description: Reglulega uppfærð afrit af öllum OpenStreetMap gagnagrunninum - overpass: - title: Overpass API-forritsviðmót - description: Sæktu þennan gagnaramma frá spegli af OpenStreetMap gagnagrunninum - geofabrik: - title: Niðurhöl frá Geofabrik - description: Reglulega uppfært yfirlit heimsálfa, landa og valinna borga - metro: - title: Yfirlit veðurspár - description: Yfirlit veðurspár fyrir helstu heimsborgir og nágrenni þeirra - other: - title: Aðrar heimildir - description: Aðrir gagnagjafar sem taldir eru upp á kviku/wiki OpenStreetMap - options: Valmöguleikar - format: Snið - scale: Kvarði - max: hámark - image_size: Stærð myndar - zoom: Aðdráttur - add_marker: Bæta kortamerki á kortið - latitude: 'Lengd:' - longitude: 'Breidd:' - output: Úttak - paste_html: Notaðu þennan HTML kóða til að bæta kortinu á vefsíðu - export_button: Flytja út geocoder: search: title: @@ -1038,290 +993,6 @@ is: text: Styrkja verkefnið learn_more: Vita meira more: Meira - license_page: - foreign: - title: Um þessa þýðingu - text: Stangist þessi þýðing á við %{english_original_link}, gildir hin síðari - fram yfir íslenskuna. - english_link: ensku útgáfuna - native: - title: Um þessa síðu - text: |- - Þú ert að skoða höfundaréttarsíðuna á frummálinu. Þú getur - lesið þessa útgáfu, farið aftur á %{native_link}, eða hætt - þessu lagabulli og %{mapping_link}. - native_link: íslensku útgáfuna - mapping_link: farið að kortleggja - legal_babble: - title_html: Höfundarréttur og notkunarleyfi - intro_1_html: |- - OpenStreetMap® er opinn og frjáls kortagrunnur, gefinn út með Open Data - Commons Open Database License (ODbL) notkunarleyfi frá OpenStreetMap Foundation (OSMF) sjálfseignarstofnuninni. - intro_2_html: |- - Þér er frjálst að afrita, dreifa, senda og aðlaga kortagrunninn - og gögn hans, gegn því að þú vísar í og viðurkennir rétt OpenStreetMap - og sjálfboðaliða þess. Ef þú breytir eða byggir á kortagrunninum - eða gögnum hans, þá verður þú að gefa niðurstöðuna út með - sama leyfi. - Leyfistextinn - útskýrir réttindi þín og skyldur. - intro_3_html: |- - Landupplýsingarnar í kortaflísunum okkar, og í hjálparskjölunum, eru - gefnar út með Creative - Commons Attribution-ShareAlike 2.0 notkunarleyfi (CC BY-SA). - credit_title_html: Hvernig á að vísa til OpenStreetMap - credit_1_html: |- - Við gerum kröfu um að þú notir tilvísunina “© Þátttakendur í - OpenStreetMap verkefninu”. - credit_2_html: "Þú þarft líka að taka skýrt fram að gögnin séu tiltæk með Open\nDatabase - notkunarleyfi, og ef verið sé að nota kortaflísar frá okkur, að kortagögnin - \nséu með CC BY-SA notkunarleyfi. Þú getur gert það með því að tengja\ná þessa höfundarréttarsíðu.\nAnnars, - og þess er krafist ef þú ert að dreifa OSM á einhverju\ngagnaformi, geturðu - talið upp og tengt beint á leyfishafana. Í miðlum\nþar sem tenglar eru varla - mögulegir (t.d. prentuðum verkum), stingum við upp á að\nþú beinir lesendum - á openstreetmap.org (mögulega að tengja\n'OpenStreetMap' við fullt vistfang - þessarar síðu), á opendatacommons.org, og\nef slíkt á við, á creativecommons.org." - credit_3_html: |- - Á flettanlegum rafrænum landakortum ætti tilvísunin að birtast í horni kortsins. - Til dæmis: - attribution_example: - alt: Dæmi um hvernig eigi að vísa til OpenStreetMap á vefsíðu - title: Dæmi um tilvísun - more_title_html: Finna út meira - more_1_html: |- - Lestu meira um notkun á gögnunum okkar og hvernig eigi að vísa til okkar á síðunni OSMF notkunarleyfi. - more_2_html: |- - Þó OpenStreetMap snúist um opin gögn, getum við ekki - séð utanaðkomandi aðilum fyrir ókeypis API-kortaþjónustu. - Skoðaðu síðurnar um notkun á API-forritsviðmóti, - notkun á kortaflísum - and notkun á OSM-Nominatim. - contributors_title_html: Þeir sem hafa komið með framlög - contributors_intro_html: |- - Framlög hafa komið frá mörgum þúsundum einstaklinga. Við erum líka - með gögn með opnum notkunarleyfum frá þjóðlegum landupplýsingastofnunum - auk annarra opinberra aðila, meðal annars: - contributors_at_html: |- - Austurríki: Inniheldur gögn frá - Stadt Wien (með - CC BY), - Land Vorarlberg og - Land Tirol (under CC BY AT með viðaukum). - contributors_ca_html: |- - Kanada: Inniheldur gögn frá - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), og StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: |- - Finnland: Inniheldur gögn frá - landupplýsingagagnagrunni Landmælinga Finnlands - auk annarra gagnasafna, með - NLSFI notkunarleyfi. - contributors_fr_html: |- - Frakkland: Inniheldur afleidd gögn frá - Direction Générale des Impôts (Skattstjóraembættið). - contributors_nl_html: |- - Holland: Inniheldur AND-gögn ©, 2007 - (www.and.com) - contributors_nz_html: |- - Nýja-Sjáland: Inniheldur gögn með uppruna frá - Land Information New Zealand. Með Crown Copyright höfundarrétti. - contributors_si_html: |- - Slóvenía: Inniheldur gögn frá - landmælinga og kortagerðaryfirvöldum og - ráðuneyti landbúnaðar, skógnýtingar og matvæla - (opinberar upplýsingar í Slóveníu). - contributors_za_html: |- - Suður-Afríka: Inniheldur gögn frá - Chief Directorate: - National Geo-Spatial Information, höfundarréttur suðurafríska ríkisins (state copyright) áskilinn. - contributors_gb_html: |- - Bretland: Inniheldur landmælinga- - og kortagerðargögn með © Crown Copyright höfundarrétti auk réttinda varðandi gagnasafn - 2010-12. - contributors_footer_1_html: |- - Til að skoða nánari upplýsingar um þetta, auk annarra gagna sem notuð hafa verið - til að bæta OpenStreetMap, skoðaðu þá síðuna Þátttakendur á wiki/kvikusvæði OpenStreetMap. - contributors_footer_2_html: |- - Samþætting gagna inn í OpenStreetMap hefur ekki sjálfkrafa í för með sér að - upprunaleg gagnaþjónusta taki þátt í OpenStreetMap, taki neina ábyrgð á gögnum, eða - samþykki skaðabótaskyldu vegna þeirra. - infringement_title_html: Brot á höfundarrétti - infringement_1_html: |- - Þátttakendur í OSM eru minntir á að þeir megi aldrei bæta inn gögnum frá neinum - höfundarréttarvörðum upptökum (t.d. Google Maps eða prentuðum kortum) án - sérstakrar heimildar frá handhöfum höfundarréttarins. - infringement_2_html: |- - Ef þú heldur að höfundarréttarvarið efni hafi ranglega verið bætt í - OpenStreetMap gagnagrunninn eða á þetta vefsvæði, skaltu skoða - fjarlægingarferlið okkar eða skrá fyrirspurn beint á - veflægu kröfugerðarsíðuna okkar. - trademarks_title_html: Vörumerki - trademarks_1_html: OpenStreetMap, merkið með stækkunarglerinu staða kortsins - eru skrásett vörumerki OpenStreetMap Foundation sjálfseignarstofnuninnar. - Ef þú ert með spurningar varðandi notkun þína á þessum vörumerkjum, sendu - þá fyrirspurnir á vinnuhóp - notkunarleyfa. - welcome_page: - title: Velkomin! - introduction_html: |- - Velkomin í OpenStreetMap, frjálsa heimskortinu sem þú getur breytt og lagað. Núna þegar þú ert - búin(n) að skrá þig, geturðu farið að setja atriði inn á kortið. Hér er fljótlegur leiðarvísir - með því helsta sem þú þarft að vita. - whats_on_the_map: - title: Hvað er á kortinu - on_html: |- - OpenStreetMap er staður til að gera kort með varanlegum eða tímabundnum fyrirbærum - - nú þegar eru þarna milljónir bygginga, vega og annarra smáatriða sem lýsa stöðum. Þú getur kortlagt - hvaðeina sem þér finnst áhugavert og sem tilheyrir raunheimum. - off_html: |- - Það sem OSM inniheldur ekki eru gögn sem byggjast á skoðunum eintaklinga, sagnfræðilegar tilgátur eða - möguleikar, að ógleymdum gögnum frá höfundarréttarvörðum upptökum. Ef þú ert ekki með sérstakt leyfi til slíks, - ekki afrita eftir landakortum á pappír eða á netinu. - basic_terms: - title: Grunnhugtök við kortagerð - paragraph_1_html: OpenStreetMap inniheldur svolítið af eigin slangurorðum. Hér - eru nokkur algeng orð sem gott er að hafa á bak við eyrað. - editor_html: Ritill er forrit eða vefsvæði sem hægt er að nota - við breytingar á landakortinu. - node_html: Hnútur er punktur á kortinu, eins og til dæmis veitingastaður - eða tré. - way_html: Leið er lína eða svæði, eins og til dæmis vegur, - vatnsfall, tjörn eða bygging. - tag_html: |- - Merki er dálítill gagnabútur varðandi leið eða annað atriði, til dæmis - nafn á veitingastað eða hraðatakmörk á vegi. - rules: - title: Reglur! - paragraph_1_html: "OpenStreetMap er með fáar formlegar reglur en við væntum - þess og gerum kröfu um\nað allir þáttakendur starfi með og eigi samskipti - við OSM-samfélagið. Ef þú ert að íhuga aðgerðir\naðrar en handvirkar breytingar, - ættirðu að lesa og fylgja leiðbeiningunum á síðunum \nInnflutningur - og \nSjálfvirkar - breytingar." - questions: - title: Einhverjar spurningar? - paragraph_1_html: |- - OpenStreetMap er með ýmsar leiðir til að læra meira um verkefnið, spyrja og svara - spurningum, og ræða í hópum um málefni tengd kortagerð. - Fáðu aðstoð hér. - start_mapping: Hefja kortlagningu - add_a_note: - title: Enginn tími fyrir breytingar? Bættu við athugasemd! - paragraph_1_html: Það er auðvelt að bæta við minnispunkti ef þú vilt laga eitthvað - smávægilegt en hefur ekki tíma til að skrá þig og læra hvernig maður breytir - kortinu. - paragraph_2_html: |- - Farðu á landakortið og smelltu á minnismiðatáknið: - . Þetta mun bæta merki á kortið, sem þú getur fært til - með því að draga það. Bættu við skilaboðunum þínum, smelltu síðan á að vista, og annað kortagerðarfólk mun væntanlega rannsaka málið. - fixthemap: - title: Tilkynna vandamál / Laga kortið - how_to_help: - title: Hvernig á að hjálpa til - join_the_community: - title: Ganga í hópinn - explanation_html: |- - Ef þú hefur rekist á vandamál í kortagögnunum, til dæmis ef það vantar götu eða húsnúmer, er besta leiðin - að ganga til liðs við OpenStreetMap og bæta við eða laga gögnin sjálfur. \ - add_a_note: - instructions_html: |- - Smelltu á eða sama táknið í kortaglugganum. - Þetta mun bæta merki á kortið, sem þú getur fært til - með því að draga það. Bættu við skilaboðunum þínum, smelltu síðan á að vista, og annað kortagerðarfólk mun væntanlega rannsaka málið. - other_concerns: - title: Önnur íhugunarefni - explanation_html: "Ef þú ert að velta fyrir þér hvernig gögnin okkar eru notuð - eða einhverju varðandi efni þeirra, geturðu skoðað\nsíðuna - varðandi höfundarrétt varðandi nánari lagaskýringar, eða haft samband - við viðeigandi \nOSMF - vinnuhóp. \\" - help_page: - title: Til að fá hjálp - introduction: |- - OpenStreetMap er með ýmsar leiðir til að læra meira um verkefnið, spyrja og svara - spurningum, og ræða í hópum um málefni tengd kortagerð. - welcome: - url: /velkomin - title: Velkomin í OSM - description: Byrjaðu með þessum fljótlega leiðarvísi með helstu grunnatriðum - varðandi OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: Byrjenda-leiðbeiningar - description: Leiðarvísir fyrir byrjendur sem haldið er við af samfélaginu. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Spyrðu spurninga eða flettu upp svörum á spyrja/svara hluta OSM-vefsvæðisins. - mailing_lists: - title: Póstlistar - description: Spyrðu spurninga eða spjallaðu um áhugaverð málefni á einhverjum - af fjölmörgum póstlistum tengdum tungumálum eða viðfangsefnum. - forums: - title: Spjallsvæði - description: Spurningar og umræður fyrir þá sem kunna betur við klassísk viðmót - hefðbundinna spjallborða. - irc: - title: IRC - description: Gagnvirkt spjall á mörgum tungumálum og um margvísleg málefni. - switch2osm: - title: switch2osm - description: Hjálp fyrir fyrirtæki, stofnanir og félagasamtök sem ætla sér að - skipta yfir í kort byggð á OpenStreetMap og tengdum þjónustum. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Vafraðu um wiki/kvikuna til að sjá greinargóðar leiðbeiningar varðandi - OSM. - about_page: - next: Næsta - copyright_html: ©ÃžÃ¡tttakendur í
        OpenStreetMap
        verkefninu - used_by: '%{name} drífur áfram kortagögn á þúsundum vefsíðna, símaforritum og - tækjum' - lede_text: OpenStreetMap er byggt upp af heilu samfélagi kortagerðarfólks sem - leggur inn og viðheldur gögnum um vegi, stíga, kaffihús, járnbrautir og margt, - margt fleira, út um víða veröld. - local_knowledge_title: Staðbundin þekking - local_knowledge_html: |- - OpenStreetMap leggur áherslu á staðbundna þekkingu. Þátttakendurnir nota - loftmyndir, GPS-tæki o.þ.h. til jafns við frumstæðar kortaskissur til að sannreyna að OSM - sé nákvæmt og vel uppfært. - community_driven_title: Samfélagsdrifið - community_driven_html: |- - Samfélagið í kringum OpenStreetMap er fjölbreytilegt, áhugasamt og vex frá degi til dags. - Innan þess starfa áhugafólk um kortagerð, atvinnumenn í GIS-fræðum, verkfræðingar - sem meðal annars sjá um vefþjóna OSM, hjálparstarfsfólk sem kortleggur hamfarasvæði, - og margir aðrir. - Til að fræðast betur um þetta samfélag, geturðu skoðað - OpenStreetMap bloggið, - dagbækur notenda, - bloggsvæði þátttakenda og - vefsvæði OSM Foundation. - open_data_title: Opin gögn - open_data_html: |- - OpenStreetMap eru opin gögn: þér er heimilt að nota þetta í hvaða tilgangi sem er - svo framarlega að þú getir um OpenStreetMap og þátttakendurna í verkefninu. Ef þú breytir gögnunum - eða byggir á göngunum á einhvern máta, máttu einungis dreifa útkomunni - með sömu notkunarskilmálum. Skoðaðu síðuna um höfundarrétt og - notkunarleyfi til að sjá ítarlegri upplýsingar varðandi þetta. - legal_title: Lagalegur fyrirvari - legal_html: "Þetta vefsvæði ásamt mörgum tengdum þjónustum er formlega rekið af\nOpenStreetMap Foundation (OSMF) \nfyrir - hönd samfélagsins. Notkun allrar þjónustu á vegum OSMF fellur undir \nstefnu - okkar varðandi ásættanlega notkun auk persónuverndarstefnu - okkar\n.
        \nEndilega hafðu - samband við OSMF \nef þú ert með spurningar eða beiðnir varðandi notkunarleyfi, - höfundarrétt eða önnur lögfræðileg málefni.\n
        \nOpenStreetMap, táknmerkið - með stækkunarglerinu og ástand kortsins eru skrásett - vörumerki OSMF." - partners_title: Samstarfsaðilar notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} bætti athugasemd við bloggfærslu þína' @@ -1519,6 +1190,179 @@ is: delete: deleted: Skilaboðunum var eytt site: + about: + next: Næsta + copyright_html: ©ÃžÃ¡tttakendur í
        OpenStreetMap
        verkefninu + used_by: '%{name} drífur áfram kortagögn á þúsundum vefsíðna, símaforritum og + tækjum' + lede_text: OpenStreetMap er byggt upp af heilu samfélagi kortagerðarfólks sem + leggur inn og viðheldur gögnum um vegi, stíga, kaffihús, járnbrautir og margt, + margt fleira, út um víða veröld. + local_knowledge_title: Staðbundin þekking + local_knowledge_html: |- + OpenStreetMap leggur áherslu á staðbundna þekkingu. Þátttakendurnir nota + loftmyndir, GPS-tæki o.þ.h. til jafns við frumstæðar kortaskissur til að sannreyna að OSM + sé nákvæmt og vel uppfært. + community_driven_title: Samfélagsdrifið + community_driven_html: |- + Samfélagið í kringum OpenStreetMap er fjölbreytilegt, áhugasamt og vex frá degi til dags. + Innan þess starfa áhugafólk um kortagerð, atvinnumenn í GIS-fræðum, verkfræðingar + sem meðal annars sjá um vefþjóna OSM, hjálparstarfsfólk sem kortleggur hamfarasvæði, + og margir aðrir. + Til að fræðast betur um þetta samfélag, geturðu skoðað + OpenStreetMap bloggið, + dagbækur notenda, + bloggsvæði þátttakenda og + vefsvæði OSM Foundation. + open_data_title: Opin gögn + open_data_html: |- + OpenStreetMap eru opin gögn: þér er heimilt að nota þetta í hvaða tilgangi sem er + svo framarlega að þú getir um OpenStreetMap og þátttakendurna í verkefninu. Ef þú breytir gögnunum + eða byggir á göngunum á einhvern máta, máttu einungis dreifa útkomunni + með sömu notkunarskilmálum. Skoðaðu síðuna um höfundarrétt og + notkunarleyfi til að sjá ítarlegri upplýsingar varðandi þetta. + legal_title: Lagalegur fyrirvari + legal_html: "Þetta vefsvæði ásamt mörgum tengdum þjónustum er formlega rekið + af\nOpenStreetMap Foundation (OSMF) + \nfyrir hönd samfélagsins. Notkun allrar þjónustu á vegum OSMF fellur undir + \nstefnu + okkar varðandi ásættanlega notkun auk persónuverndarstefnu + okkar\n.
        \nEndilega hafðu + samband við OSMF \nef þú ert með spurningar eða beiðnir varðandi notkunarleyfi, + höfundarrétt eða önnur lögfræðileg málefni.\n
        \nOpenStreetMap, táknmerkið + með stækkunarglerinu og ástand kortsins eru skrásett + vörumerki OSMF." + partners_title: Samstarfsaðilar + copyright: + foreign: + title: Um þessa þýðingu + text: Stangist þessi þýðing á við %{english_original_link}, gildir hin síðari + fram yfir íslenskuna. + english_link: ensku útgáfuna + native: + title: Um þessa síðu + text: |- + Þú ert að skoða höfundaréttarsíðuna á frummálinu. Þú getur + lesið þessa útgáfu, farið aftur á %{native_link}, eða hætt + þessu lagabulli og %{mapping_link}. + native_link: íslensku útgáfuna + mapping_link: farið að kortleggja + legal_babble: + title_html: Höfundarréttur og notkunarleyfi + intro_1_html: |- + OpenStreetMap® er opinn og frjáls kortagrunnur, gefinn út með Open Data + Commons Open Database License (ODbL) notkunarleyfi frá OpenStreetMap Foundation (OSMF) sjálfseignarstofnuninni. + intro_2_html: |- + Þér er frjálst að afrita, dreifa, senda og aðlaga kortagrunninn + og gögn hans, gegn því að þú vísar í og viðurkennir rétt OpenStreetMap + og sjálfboðaliða þess. Ef þú breytir eða byggir á kortagrunninum + eða gögnum hans, þá verður þú að gefa niðurstöðuna út með + sama leyfi. + Leyfistextinn + útskýrir réttindi þín og skyldur. + intro_3_html: |- + Landupplýsingarnar í kortaflísunum okkar, og í hjálparskjölunum, eru + gefnar út með Creative + Commons Attribution-ShareAlike 2.0 notkunarleyfi (CC BY-SA). + credit_title_html: Hvernig á að vísa til OpenStreetMap + credit_1_html: |- + Við gerum kröfu um að þú notir tilvísunina “© Þátttakendur í + OpenStreetMap verkefninu”. + credit_2_html: "Þú þarft líka að taka skýrt fram að gögnin séu tiltæk með + Open\nDatabase notkunarleyfi, og ef verið sé að nota kortaflísar frá okkur, + að kortagögnin \nséu með CC BY-SA notkunarleyfi. Þú getur gert það með því + að tengja\ná þessa höfundarréttarsíðu.\nAnnars, + og þess er krafist ef þú ert að dreifa OSM á einhverju\ngagnaformi, geturðu + talið upp og tengt beint á leyfishafana. Í miðlum\nþar sem tenglar eru varla + mögulegir (t.d. prentuðum verkum), stingum við upp á að\nþú beinir lesendum + á openstreetmap.org (mögulega að tengja\n'OpenStreetMap' við fullt vistfang + þessarar síðu), á opendatacommons.org, og\nef slíkt á við, á creativecommons.org." + credit_3_html: |- + Á flettanlegum rafrænum landakortum ætti tilvísunin að birtast í horni kortsins. + Til dæmis: + attribution_example: + alt: Dæmi um hvernig eigi að vísa til OpenStreetMap á vefsíðu + title: Dæmi um tilvísun + more_title_html: Finna út meira + more_1_html: |- + Lestu meira um notkun á gögnunum okkar og hvernig eigi að vísa til okkar á síðunni OSMF notkunarleyfi. + more_2_html: |- + Þó OpenStreetMap snúist um opin gögn, getum við ekki + séð utanaðkomandi aðilum fyrir ókeypis API-kortaþjónustu. + Skoðaðu síðurnar um notkun á API-forritsviðmóti, + notkun á kortaflísum + and notkun á OSM-Nominatim. + contributors_title_html: Þeir sem hafa komið með framlög + contributors_intro_html: |- + Framlög hafa komið frá mörgum þúsundum einstaklinga. Við erum líka + með gögn með opnum notkunarleyfum frá þjóðlegum landupplýsingastofnunum + auk annarra opinberra aðila, meðal annars: + contributors_at_html: |- + Austurríki: Inniheldur gögn frá + Stadt Wien (með + CC BY), + Land Vorarlberg og + Land Tirol (under CC BY AT með viðaukum). + contributors_ca_html: |- + Kanada: Inniheldur gögn frá + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), og StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: |- + Finnland: Inniheldur gögn frá + landupplýsingagagnagrunni Landmælinga Finnlands + auk annarra gagnasafna, með + NLSFI notkunarleyfi. + contributors_fr_html: |- + Frakkland: Inniheldur afleidd gögn frá + Direction Générale des Impôts (Skattstjóraembættið). + contributors_nl_html: |- + Holland: Inniheldur AND-gögn ©, 2007 + (www.and.com) + contributors_nz_html: |- + Nýja-Sjáland: Inniheldur gögn með uppruna frá + Land Information New Zealand. Með Crown Copyright höfundarrétti. + contributors_si_html: |- + Slóvenía: Inniheldur gögn frá + landmælinga og kortagerðaryfirvöldum og + ráðuneyti landbúnaðar, skógnýtingar og matvæla + (opinberar upplýsingar í Slóveníu). + contributors_za_html: |- + Suður-Afríka: Inniheldur gögn frá + Chief Directorate: + National Geo-Spatial Information, höfundarréttur suðurafríska ríkisins (state copyright) áskilinn. + contributors_gb_html: |- + Bretland: Inniheldur landmælinga- + og kortagerðargögn með © Crown Copyright höfundarrétti auk réttinda varðandi gagnasafn + 2010-12. + contributors_footer_1_html: |- + Til að skoða nánari upplýsingar um þetta, auk annarra gagna sem notuð hafa verið + til að bæta OpenStreetMap, skoðaðu þá síðuna Þátttakendur á wiki/kvikusvæði OpenStreetMap. + contributors_footer_2_html: |- + Samþætting gagna inn í OpenStreetMap hefur ekki sjálfkrafa í för með sér að + upprunaleg gagnaþjónusta taki þátt í OpenStreetMap, taki neina ábyrgð á gögnum, eða + samþykki skaðabótaskyldu vegna þeirra. + infringement_title_html: Brot á höfundarrétti + infringement_1_html: |- + Þátttakendur í OSM eru minntir á að þeir megi aldrei bæta inn gögnum frá neinum + höfundarréttarvörðum upptökum (t.d. Google Maps eða prentuðum kortum) án + sérstakrar heimildar frá handhöfum höfundarréttarins. + infringement_2_html: |- + Ef þú heldur að höfundarréttarvarið efni hafi ranglega verið bætt í + OpenStreetMap gagnagrunninn eða á þetta vefsvæði, skaltu skoða + fjarlægingarferlið okkar eða skrá fyrirspurn beint á + veflægu kröfugerðarsíðuna okkar. + trademarks_title_html: Vörumerki + trademarks_1_html: OpenStreetMap, merkið með stækkunarglerinu staða kortsins + eru skrásett vörumerki OpenStreetMap Foundation sjálfseignarstofnuninnar. + Ef þú ert með spurningar varðandi notkun þína á þessum vörumerkjum, sendu + þá fyrirspurnir á vinnuhóp + notkunarleyfa. index: js_1: Þú ert annaðhvort að nota vafra sem styður ekki JavaScript eða hefur slökkt á JavaScript stuðning. @@ -1551,6 +1395,109 @@ is: id_not_configured: Það er ekki búið að setja upp auðkenni no_iframe_support: Því miður styður vafrinn þinn ekki HTML-iframes, sem er nauðsynlegt ef nota á þennan eiginleika. + export: + title: Flytja út + area_to_export: Svæði til að niðurhala + manually_select: Velja annað svæði á kortinu + format_to_export: Skráasnið + osm_xml_data: OpenStreetMap XML gögn + map_image: Kortamynd (sýnir staðallagið) + embeddable_html: HTML til að bæta á vefsíðu + licence: Leyfi + export_details: OpenStreetMap gögnin eru með Open + Data Commons Open Database License (ODbL) notkunarleyfi. + too_large: + advice: 'Ef útflutningurinn hér að ofan mistekst, íhugaðu að nota einn af + gagnagjöfunum sem taldir eru upp hér að neðan:' + body: Svæðið sem þú ert að reyna að flytja út á OpenStreetMap á XML-sniði + er of stórt. Auktu aðdráttinn eða veldu smærra svæði, nú eða notaðu eina + af eftirfarandi leiðum til að flytja inn mikið magn gagna. + planet: + title: OSM-plánetan + description: Reglulega uppfærð afrit af öllum OpenStreetMap gagnagrunninum + overpass: + title: Overpass API-forritsviðmót + description: Sæktu þennan gagnaramma frá spegli af OpenStreetMap gagnagrunninum + geofabrik: + title: Niðurhöl frá Geofabrik + description: Reglulega uppfært yfirlit heimsálfa, landa og valinna borga + metro: + title: Yfirlit veðurspár + description: Yfirlit veðurspár fyrir helstu heimsborgir og nágrenni þeirra + other: + title: Aðrar heimildir + description: Aðrir gagnagjafar sem taldir eru upp á kviku/wiki OpenStreetMap + options: Valmöguleikar + format: Snið + scale: Kvarði + max: hámark + image_size: Stærð myndar + zoom: Aðdráttur + add_marker: Bæta kortamerki á kortið + latitude: 'Lengd:' + longitude: 'Breidd:' + output: Úttak + paste_html: Notaðu þennan HTML kóða til að bæta kortinu á vefsíðu + export_button: Flytja út + fixthemap: + title: Tilkynna vandamál / Laga kortið + how_to_help: + title: Hvernig á að hjálpa til + join_the_community: + title: Ganga í hópinn + explanation_html: |- + Ef þú hefur rekist á vandamál í kortagögnunum, til dæmis ef það vantar götu eða húsnúmer, er besta leiðin + að ganga til liðs við OpenStreetMap og bæta við eða laga gögnin sjálfur. \ + add_a_note: + instructions_html: |- + Smelltu á eða sama táknið í kortaglugganum. + Þetta mun bæta merki á kortið, sem þú getur fært til + með því að draga það. Bættu við skilaboðunum þínum, smelltu síðan á að vista, og annað kortagerðarfólk mun væntanlega rannsaka málið. + other_concerns: + title: Önnur íhugunarefni + explanation_html: "Ef þú ert að velta fyrir þér hvernig gögnin okkar eru notuð + eða einhverju varðandi efni þeirra, geturðu skoðað\nsíðuna + varðandi höfundarrétt varðandi nánari lagaskýringar, eða haft samband + við viðeigandi \nOSMF + vinnuhóp. \\" + help: + title: Til að fá hjálp + introduction: |- + OpenStreetMap er með ýmsar leiðir til að læra meira um verkefnið, spyrja og svara + spurningum, og ræða í hópum um málefni tengd kortagerð. + welcome: + url: /velkomin + title: Velkomin í OSM + description: Byrjaðu með þessum fljótlega leiðarvísi með helstu grunnatriðum + varðandi OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: Byrjenda-leiðbeiningar + description: Leiðarvísir fyrir byrjendur sem haldið er við af samfélaginu. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Spyrðu spurninga eða flettu upp svörum á spyrja/svara hluta OSM-vefsvæðisins. + mailing_lists: + title: Póstlistar + description: Spyrðu spurninga eða spjallaðu um áhugaverð málefni á einhverjum + af fjölmörgum póstlistum tengdum tungumálum eða viðfangsefnum. + forums: + title: Spjallsvæði + description: Spurningar og umræður fyrir þá sem kunna betur við klassísk viðmót + hefðbundinna spjallborða. + irc: + title: IRC + description: Gagnvirkt spjall á mörgum tungumálum og um margvísleg málefni. + switch2osm: + title: switch2osm + description: Hjálp fyrir fyrirtæki, stofnanir og félagasamtök sem ætla sér + að skipta yfir í kort byggð á OpenStreetMap og tengdum þjónustum. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Vafraðu um wiki/kvikuna til að sjá greinargóðar leiðbeiningar + varðandi OSM. sidebar: search_results: Leitarniðurstöður close: Loka @@ -1651,6 +1598,59 @@ is: image: Mynd alt: Alt-texti url: Slóð (URL) + welcome: + title: Velkomin! + introduction_html: |- + Velkomin í OpenStreetMap, frjálsa heimskortinu sem þú getur breytt og lagað. Núna þegar þú ert + búin(n) að skrá þig, geturðu farið að setja atriði inn á kortið. Hér er fljótlegur leiðarvísir + með því helsta sem þú þarft að vita. + whats_on_the_map: + title: Hvað er á kortinu + on_html: |- + OpenStreetMap er staður til að gera kort með varanlegum eða tímabundnum fyrirbærum - + nú þegar eru þarna milljónir bygginga, vega og annarra smáatriða sem lýsa stöðum. Þú getur kortlagt + hvaðeina sem þér finnst áhugavert og sem tilheyrir raunheimum. + off_html: |- + Það sem OSM inniheldur ekki eru gögn sem byggjast á skoðunum eintaklinga, sagnfræðilegar tilgátur eða + möguleikar, að ógleymdum gögnum frá höfundarréttarvörðum upptökum. Ef þú ert ekki með sérstakt leyfi til slíks, + ekki afrita eftir landakortum á pappír eða á netinu. + basic_terms: + title: Grunnhugtök við kortagerð + paragraph_1_html: OpenStreetMap inniheldur svolítið af eigin slangurorðum. + Hér eru nokkur algeng orð sem gott er að hafa á bak við eyrað. + editor_html: Ritill er forrit eða vefsvæði sem hægt er að + nota við breytingar á landakortinu. + node_html: Hnútur er punktur á kortinu, eins og til dæmis + veitingastaður eða tré. + way_html: Leið er lína eða svæði, eins og til dæmis vegur, + vatnsfall, tjörn eða bygging. + tag_html: |- + Merki er dálítill gagnabútur varðandi leið eða annað atriði, til dæmis + nafn á veitingastað eða hraðatakmörk á vegi. + rules: + title: Reglur! + paragraph_1_html: "OpenStreetMap er með fáar formlegar reglur en við væntum + þess og gerum kröfu um\nað allir þáttakendur starfi með og eigi samskipti + við OSM-samfélagið. Ef þú ert að íhuga aðgerðir\naðrar en handvirkar breytingar, + ættirðu að lesa og fylgja leiðbeiningunum á síðunum \nInnflutningur + og \nSjálfvirkar + breytingar." + questions: + title: Einhverjar spurningar? + paragraph_1_html: |- + OpenStreetMap er með ýmsar leiðir til að læra meira um verkefnið, spyrja og svara + spurningum, og ræða í hópum um málefni tengd kortagerð. + Fáðu aðstoð hér. + start_mapping: Hefja kortlagningu + add_a_note: + title: Enginn tími fyrir breytingar? Bættu við athugasemd! + paragraph_1_html: Það er auðvelt að bæta við minnispunkti ef þú vilt laga + eitthvað smávægilegt en hefur ekki tíma til að skrá þig og læra hvernig + maður breytir kortinu. + paragraph_2_html: |- + Farðu á landakortið og smelltu á minnismiðatáknið: + . Þetta mun bæta merki á kortið, sem þú getur fært til + með því að draga það. Bættu við skilaboðunum þínum, smelltu síðan á að vista, og annað kortagerðarfólk mun væntanlega rannsaka málið. trace: visibility: private: Prívat (aðeins deilt sem óauðkennanlegum, óröðuðum punktum) @@ -1695,6 +1695,7 @@ is: trace_header: upload_trace: Senda inn feril see_all_traces: Sjá alla ferla + see_my_traces: Skoða ferlana mína traces_waiting: one: Þú ert með %{count} feril í bið. Íhugaðu að bíða með að senda inn fleiri ferla til að aðrir notendur komist að. @@ -1721,6 +1722,7 @@ is: delete_track: Eyða trace_not_found: Þessi ferill fannst ekki! visibility: 'Sýnileiki:' + confirm_delete: Eyða þessum ferli? trace_paging_nav: showing_page: Síða %{page} older: Eldri ferlar @@ -1743,6 +1745,7 @@ is: map: kort list: public_traces: Allir ferlar + my_traces: GPS-ferlarnir mínir public_traces_from: Ferlar eftir %{user} description: Skoða nýlega innsenda GPS-ferla tagged_with: ' með merkið %{tags}' @@ -1780,7 +1783,7 @@ is: (Contributor Terms). Þú þarft ekki endilega að samþykkja þá, en þú verður að skoða þá. oauth: - oauthorize: + authorize: title: Auðkenndu aðgang að notandaaðganginum þínum request_access: Forritið %{app_name} hefur óskað eftir að fá aðgang að OpenStreetMap í gegnum notandaaðganginn þinn, %{user}. Merktu við hvað eiginleika þú vilt @@ -1795,11 +1798,11 @@ is: allow_write_gpx: senda inn GPS ferla. allow_write_notes: breyta minnispunktum. grant_access: Veita aðgang - oauthorize_success: + authorize_success: title: Auðkenningarbeiðni samþykkt allowed: Þú hefur veitt forritinu %{app_name} aðgang að notandaaðganginum þínum. verification: Sannvottunarkóðinn er %{code}. - oauthorize_failure: + authorize_failure: title: Auðkenningarbeiðni brást denied: Þú hefur neitað forritinu %{app_name} um aðgang að notandaaðganginum þínum. @@ -2046,6 +2049,7 @@ is: if set location: Ef þú vistar staðsetningu þína á %{settings_link} mun kortasjá birtast hér fyrir neðan með merki fyrir þig og nálæga notendur. settings_link_text: stillingasíðunni + my friends: Vinir mínir no friends: Þú átt enga vini km away: í %{count} km fjarlægð m away: í %{count} m fjarlægð @@ -2246,7 +2250,7 @@ is: confirm: Staðfesta fail: Gat ekki svift „%{name}“ leyfinu „%{role}“. Staðfestu að notandinn og leyfið séu bæði gild. - user_block: + user_blocks: model: non_moderator_update: Þú verður að vera stjórnandi til að búa til eða breyta banni. @@ -2301,20 +2305,6 @@ is: period: one: 1 stund other: '%{count} stundir' - partial: - show: Sýna - edit: Breyta - revoke: Eyða banninu - confirm: Ert þú viss? - display_name: Bann gegn - creator_name: Búið til af - reason: Ástæða banns - status: Staða - revoker_name: Eytt af - not_revoked: (ekki eytt) - showing_page: Síða %{page} - next: Næsta » - previous: « Fyrri helper: time_future: Endar eftir %{time} until_login: Virkt þangað til notandinn skráir sig inn. @@ -2345,8 +2335,22 @@ is: back: Listi yfir öll bönn revoker: 'Eytt af:' needs_view: Notandinn þarf að innskrá sig áður en bannið fellur úr gildi. - note: - description: + block: + not_revoked: (ekki eytt) + show: Sýna + edit: Breyta + revoke: Eyða banninu + blocks: + display_name: Bann gegn + creator_name: Búið til af + reason: Ástæða banns + status: Staða + revoker_name: Eytt af + showing_page: Síða %{page} + next: Næsta » + previous: « Fyrri + notes: + comment: opened_at_html: Búið til fyrir %{when} síðan opened_at_by_html: Búið til fyrir %{when} síðan af %{user} commented_at_html: Uppfært fyrir %{when} síðan @@ -2479,7 +2483,7 @@ is: distance: Vegalengd errors: no_route: Gat ekki fundið leið á milli þessara tveggja staða. - no_place: Því miður, gat ekki fundið þennan stað. + no_place: Því miður - gat ekki fundið '%{place}'. instructions: continue_without_exit: Haltu áfram á %{name} slight_right_without_exit: Beygðu lítillega til hægri yfir á %{name} @@ -2499,6 +2503,7 @@ is: onramp_right_with_name_directions: Beygðu til hægri á rampinn til %{name}, í áttina að %{directions} onramp_right_without_directions: Beygðu til hægri á rampinn + onramp_right: Beygðu til hægri á rampinn endofroad_right_without_exit: Við enda vegarins skaltu beygja til hægri inn á %{name} merge_right_without_exit: Hliðraðu þér inn á akreinina til hægri inn á %{name} @@ -2524,6 +2529,7 @@ is: onramp_left_with_name_directions: Beygðu til vinstri á rampinn til %{name}, í áttina að %{directions} onramp_left_without_directions: Beygðu til vinstri á rampinn + onramp_left: Beygðu til vinstri á rampinn endofroad_left_without_exit: Við enda vegarins skaltu beygja til vinstri inn á %{name} merge_left_without_exit: Hliðraðu þér inn á akreinina til vinstri inn á %{name} @@ -2564,7 +2570,7 @@ is: show_address: Sjá heimilisfang query_features: Rannsaka fitjur centre_map: Miðjusetja kort hér - redaction: + redactions: edit: description: Lýsing heading: Breyta leiðréttingu diff --git a/config/locales/it.yml b/config/locales/it.yml index 0f6d08c20..0ed34f74d 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -275,7 +275,7 @@ it: list: title: Gruppi di modifiche title_user: Gruppi di modifiche di %{user} - title_friend: Gruppi di modifiche dei tuoi amici + title_friend: Gruppi di modifiche dei miei amici title_nearby: Gruppi di modifiche da parte di utenti nelle vicinanze empty: Nessun gruppo di modifiche trovato. empty_area: Nessun gruppo di modifiche in quest'area. @@ -306,7 +306,7 @@ it: user_title: Diario dell'utente %{user} in_language_title: Voci del diario in %{language} new: Nuova voce del diario - new_title: Componi una nuova voce nel tuo diario-utente + new_title: Componi una nuova voce nel mio diario-utente no_entries: Nessuna voce nel diario recent_entries: Voci del diario recenti older_entries: Voci più vecchie @@ -372,53 +372,6 @@ it: ago: '%{ago} fa' newer_comments: Commenti più recenti older_comments: Commenti più vecchi - export: - title: Esporta - start: - area_to_export: Area da esportare - manually_select: Seleziona manualmente un'area differente - format_to_export: Formato di esportazione - osm_xml_data: Dati XML OpenStreetMap - map_image: Immagine Mappa (mostra livello standard) - embeddable_html: HTML incapsulabile - licence: Licenza - export_details: I dati OpenStreetMap sono rilasciati con licenza - Open Data Commons Open Database (ODbL). - too_large: - advice: 'Se le esportazioni riportate sopra non riescono, prova con una delle - fonti elencate di seguito:' - body: 'Quest''area è troppo grande per essere esportata come Dati XML di OpenStreetMap. - Si prega di zoomare, di selezionare un''area più piccola o di utilizzare - una delle seguenti fonti per il download di massa dei dati:' - planet: - title: Pianeta OSM - description: Copie aggiornate regolarmente del database OpenStreetMap completo - overpass: - title: Overpass API - description: Scarica questo riquadro di selezione da un mirror del database - di OpenStreetMap - geofabrik: - title: Geofabrik Downloads - description: Estratti aggiornati regolarmente di continenti, paesi, e città - selezionata - metro: - title: Metro Extracts - description: Estratti per le principali città del mondo e le loro aree circostanti - other: - title: Altre fonti - description: Ulteriori fonti elencate sul wiki di OpenStreetMap - options: Opzioni - format: Formato - scale: Scala - max: max - image_size: Dimensione immagine - zoom: Ingrandimento - add_marker: Aggiungi un marcatore alla mappa - latitude: 'Lat:' - longitude: 'Lon:' - output: Risultato - paste_html: Incolla l'HTML per incapsulare nel sito web - export_button: Esporta geocoder: search: title: @@ -1065,262 +1018,6 @@ it: text: Fai una donazione learn_more: Ulteriori informazioni more: Altro - license_page: - foreign: - title: A proposito di questa traduzione - text: In caso di incoerenza fra questa pagina di traduzione e %{english_original_link}, - fa fede la pagina in inglese - english_link: l'originale in inglese - native: - title: A proposito di questa pagina - text: Stai visualizzando la versione in inglese della pagina sul copyright. - Puoi tornare alla %{native_link} di questa pagina oppure puoi terminare la - lettura di diritto d'autore e %{mapping_link}. - native_link: versione in italiano - mapping_link: inizia a mappare - legal_babble: - title_html: Copyright e licenza - intro_1_html: |- - OpenStreetMap® è open data, e i suoi dati sono distribuiti con licenza Open Data Commons Open Database License (ODbL) dalla OpenStreetMap Foundation (OSMF). - intro_2_html: "Sei libero di copiare, distribuire, trasmettere e adattare i - nostri dati, finché lo attribuisci a OpenStreetMap e ai suoi contributori. - Se alteri o ti basi sui nostri dati,\npuoi distribuire il risultato solo sotto - la stessa licenza. Il \ncodice\nlegale - completo illustra i tuoi diritti e le tue responsabilità." - intro_3_html: "La cartografia contenuta nelle nostre tavole, e la nostra documentazione, - sono rilasciate sotto licenza Creative - \nCommons Attribuzione - Condividi allo stesso modo 2.0 (CC BY-SA)." - credit_title_html: Come si attribuisce a OpenStreetMap - credit_1_html: Si richiede che l'attribuzione sia “© OpenStreetMap - contributors ”. - credit_2_html: |- - Inoltre devi specificare chiaramente che i dati sono disponibili sotto la Open Database Licese e, se usi le nostre tavole, che la cartografia è pubblicata con licenza CC BY-SA. Puoi fare ciò mettendo un collegamento URL a questa pagina di copyright. - In alternativa, e necessariamente se stai distribuendo OSM sotto forma di dati, puoi citare e creare un collegamento diretto alle licenze. In mezzi di comunicazione dove i collegamenti URL non sono possibili (per esempio un'opera stampata), ti suggeriamo di indirizzare i lettori verso openstreetmap.org (magari esplicitando 'OpenStreetMap' come nome completo), verso opendatacommons.org e, se necessario, verso creativecommons.org. - credit_3_html: |- - In una mappa elettronica navigabile, i crediti devono essere mostrati nell'angolo della mappa. - Ad esempio: - attribution_example: - alt: Esempio di come attribuire ad OpenStreetMap su una pagina web - title: Esempio di attribuzione - more_title_html: Per saperne di più - more_1_html: Per saperne di più su come utilizzare i nostri dati e come citarne - correttamente la fonte, consulta la pagina sulla Licenza - OSMF. - more_2_html: |- - Anche se i dati OpenStreetMap sono aperti, non possiamo fornire accesso alle API della mappa gratuitamente per terze parti. - Vedi la nostra Politica di utilizzo delle API, la - Politica di utilizzo delle tavole della mappa - e la Politica di utilizzo di Nominatim. - contributors_title_html: Nostri collaboratori - contributors_intro_html: 'I nostri contributori sono migliaia di individui. - Includiamo anche dati distribuiti sotto licenze aperte provenienti da agenzie - cartografiche nazionali o di altra fonte, tra cui:' - contributors_at_html: |- - Austria: contiene i dati della - Stadt Wien (sotto - CC BY), - Land Vorarlberg e - Land Tirol (sotto CC-BY AT con emendamenti). - contributors_ca_html: |- - Canada: contiene i dati della - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), e della StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: |- - Finlandia: contiene dati dal - National Land Survey of Finland's Topographic Database - e di altri set di dati, in base alla - licensa NLSFI. - contributors_fr_html: |- - Francia: contiene dati provenienti dalla - Direction Générale des Impôts. - contributors_nl_html: |- - Olanda: contiene dati © AND, 2007 - (www.and.com) - contributors_nz_html: |- - Nuova Zelanda: contiene i dati provenienti dalla - Land Information New Zealand. Crown Copyright reserved. - contributors_si_html: |- - Slovenia: Contiene dati dell' - Autorità per il Rilievo e la Mappatura e del - Ministero dell' Agricoltura, delle foreste e dell'alimentazione - (informazioni pubbliche della Slovenia). - contributors_za_html: |- - Sud Africa: contiene i dati provenienti dalla - Chief Directorate: - National Geo-Spatial Information, State copyright reserved. - contributors_gb_html: |- - Regno Unito: contiene i dati della - Ordnance Survey © Crown copyright and database right - 2010-12. - contributors_footer_1_html: |- - Per ulteriori dettagli di queste e altre fonti che sono state utilizzate - per aiutare a migliorare OpenStreetMap, consulta la pagina dei - collaboratori sul wiki di OpenStreetMap. - contributors_footer_2_html: |- - L'inserimento dei dati in OpenStreetMap non implica che il fornitore - originale dei dati appoggi OpenStreetMap, fornisca alcuna garanzia o - accetti qualsiasi responsabilità. - infringement_title_html: Violazione del copyright - infringement_1_html: Ai contributori OSM si ricorda di non aggiungere dati da - qualsiasi fonte protetta da copyright (ad esempio Google Maps o mappe stampate) - senza esplicita autorizzazione dei titolare del copyright. - infringement_2_html: |- - Se ritieni che materiale protetto da copyright sia stato impropriamente aggiunto al database di OpenStreetMap o a questo sito, consulta la nostra - procedura di rimozione per violazione del copyright o segnalacelo direttamente alla nostra - pagina di segnalazione on-line. - trademarks_title_html: Marchi registrati - trademarks_1_html: '"OpenStreetMap", il logo con la lente d''ingrandimento e - "State of the Map" sono marchi registrati della Fondazione OpenStreetMap. - Se avete domande sull''uso dei marchi, vedi la nostra politica - sui marchi.' - welcome_page: - title: Benvenuto! - introduction_html: Benvenuti in OpenStreetMap, la mappa del mondo libera e modificabile. - Ora che ti sei registrato, sei pronto a iniziare ad editare la mappa. Ecco una - guida rapida con le cose più importanti che dovresti sapere. - whats_on_the_map: - title: Cosa c'è sulla mappa - on_html: |- - OpenStreetMap è un luogo per la mappatura delle cose che sono sia vere che attuali - comprende milioni di edifici, strade e altri dettagli sui luoghi. Puoi mappare - qualsiasi cosa che nel mondo reale ti interessa. - off_html: Ciò che non comprende dati opinabili come valutazioni, caratteristiche - storiche o ipotetiche e dati da fonti coperte da copyright. A meno che non - si abbiano particolari permessi, non bisogna copiare dalle mappe online o - da quelle cartacee. - basic_terms: - title: Condizioni basilari per il Mapping - paragraph_1_html: OpenStreetMap ha un proprio "gergo". Eccoti qualche parola - che potrebbe tornarti utile. - editor_html: Un editor è un programma o un sito internet che - puoi utilizzare per modificare la mappa. - node_html: Un nodo è un punto sulla mappa, come un singolo - ristorante o un albero. - way_html: Una via è una linea o una zona, come una strada, - un fiume, lago o edificio. - tag_html: Un tag include alcuni dati su un punto o una strada, - come il nome di un ristorante o i limiti di velocità di una strada. - rules: - title: Regole! - paragraph_1_html: "OpenStreetMap ha poche regole formali, ma ci aspettiamo che - tutti i partecipanti collaborino e comunichino con la comunità. Se stai considerando - qualsiasi altra attività oltre all'editing manuale, dovresti prima leggere - le linee guida sulle importazioni - e \nmodifiche - automatiche e seguire le loro indicazioni." - questions: - title: Domande? - paragraph_1_html: |- - OpenStreetMap ha diverse risorse per imparare a conoscere il progetto, chiedendo e rispondendo alle domande, discutendo collaborativamente e documentando gli argomenti di mappatura. - Ottieni aiuto. - start_mapping: Inizia a mappare - add_a_note: - title: Non hai tempo per editare? Aggiungi una nota! - paragraph_1_html: Se vuoi fare solo una piccola correzione, ma non hai abbastanza - tempo per registrarti e imparare come modificare, puoi semplicemente aggiungere - una nota. - paragraph_2_html: |- - Vai alla mappa e clicca sull'icona della nota: - . Questo aggiungerà un marker alla mappa, che potrai muovere trascinandolo. Aggiungi il tuo messaggio, quindi fare clic su Salva e altri Mappers daranno un'occhiata. - fixthemap: - title: Segnala un problema / Correggi la mappa - how_to_help: - title: Come aiutare - join_the_community: - title: Entra nella comunità - explanation_html: Se avete notato un problema fra i nostri dati della mappa, - per esempio manca una strada o il tuo indirizzo, il modo migliore per procedere - è quello di unirsi alla comunità di OpenStreetMap e aggiungere o riparare - quel dato da te. - add_a_note: - instructions_html: Basta cliccare o la stessa icona - visualizzata sulla mappa. Questo aggiungerà un marker alla mappa che puoi - muovere trascinando. Aggiungi un messaggio, poi fai clic su Salva e altri - mappers indagheranno. - other_concerns: - title: Ulteriori dubbi - explanation_html: Se hai dubbi su come i nostri dati vengono utilizzati consulta - la nostra pagina sulle licenze per ulteriori informazioni - legali, oppure contatta il - gruppo di lavoro OSMF. - help_page: - title: Come ottenere aiuto - introduction: OpenStreetMap ha diverse risorse per imparare a conoscere il progetto, - chiedendo e rispondendo alle domande, discutendo collaborativamente e documentando - gli argomenti di mappatura. - welcome: - url: /welcome - title: Benvenuti in OSM - description: Inizia con questa guida rapida che copre le basi di OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/IT:Beginners%27_guide - title: Guida per Principianti - description: Guida per i principianti gestita dalla community. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Fai una domanda o cerca risposte sul sito di domande e risposte - di OSM. - mailing_lists: - title: Mailing List - description: Poni la tua domanda o discuti questioni di interesse su una vasta - gamma di mailing list tematiche o regionali. - forums: - title: Forum - description: Domande e discussioni per coloro che preferiscono un'interfaccia - in stile bacheca (BBS). - irc: - title: IRC - description: Chat interattiva in molte lingue diverse e su molti argomenti. - switch2osm: - title: switch2osm - description: Aiuto per imprese e organizzazioni che intendono migrare a mappe - e altri servizi basati su OpenStreetMap. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Sfoglia il wiki per la documentazione approfondita di OSM. - about_page: - next: Successivo - copyright_html: ©OpenStreetMap
        contributors - used_by: '%{name} fornisce dati geografici su migliaia di siti web, applicazioni - mobili e dispositivi hardware' - lede_text: OpenStreetMap è costruito da una comunità di mappatori che contribuiscono - e mantengono i dati sulle strade, sentieri, caffè, stazioni ferroviarie e molto - altro ancora, in tutto il mondo. - local_knowledge_title: Conoscenza locale - local_knowledge_html: OpenStreetMap enfatizza la conoscenza locale. I contributori - usano immagini aeree, dispositivi GPS e mappe sul campo low-tech per verificare - che OSM sia accurato e aggiornato. - community_driven_title: Guidato dalla Comunità - community_driven_html: La comunità di OpenStreetMap è diversa, appassionante, - e cresce ogni giorno. I nostri contributori includono mapper entusiasti, professionisti - GIS, ingegneri che gestiscono i server di OSM, mapping umanitario di aree soggette - a disastri e molto altro. Per ulteriori informazioni sulla comunità, consulta - il blog OpenStreetMap, i diari - degli utenti, il blog della comunità, - e il sito OSM Foundation. - open_data_title: Open Data - open_data_html: 'OpenStreetMap è open data: sei libero di usarla per qualsiasi - scopo a patto di attribuirla a OpenStreetMap e ai suoi contributori. Se alteri - o sviluppi sulla base dei dati in un certo modo, puoi distribuire il risultato - solo mediante la stessa licenza. Consultare la pagina - Copyright e Licenza per i dettagli.' - legal_title: Note legali - legal_html: "Questo sito e molti altri servizi correlati sono formalmente gestiti - dalla \nOpenStreetMap Foundation - (OSMF) \nper conto della comunità. L'uso di tutti i servizi gestiti dalla OSMF - è soggetto \nalle nostre \nregole - di utilizzo accettabile ed alla nostra informativa - sulla privacy\n
        \nSi prega di contattare - la OSMF \nin caso di dubbi e problemi di licenza, copyright o altre questioni - legali.\n
        \n\"OpenStreetMap\", il logo con la lente d'ingrandimento e \"State - of the Map\" sono sono - marchi registrati della OSMF." - partners_title: Partner notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} ha commentato una voce del diario' @@ -1515,6 +1212,157 @@ it: delete: deleted: Messaggio eliminato site: + about: + next: Successivo + copyright_html: ©OpenStreetMap
        contributors + used_by: '%{name} fornisce dati geografici su migliaia di siti web, applicazioni + mobili e dispositivi hardware' + lede_text: OpenStreetMap è costruito da una comunità di mappatori che contribuiscono + e mantengono i dati sulle strade, sentieri, caffè, stazioni ferroviarie e + molto altro ancora, in tutto il mondo. + local_knowledge_title: Conoscenza locale + local_knowledge_html: OpenStreetMap enfatizza la conoscenza locale. I contributori + usano immagini aeree, dispositivi GPS e mappe sul campo low-tech per verificare + che OSM sia accurato e aggiornato. + community_driven_title: Guidato dalla Comunità + community_driven_html: La comunità di OpenStreetMap è diversa, appassionante, + e cresce ogni giorno. I nostri contributori includono mapper entusiasti, professionisti + GIS, ingegneri che gestiscono i server di OSM, mapping umanitario di aree + soggette a disastri e molto altro. Per ulteriori informazioni sulla comunità, + consulta il blog OpenStreetMap, + i diari degli utenti, il blog + della comunità, e il sito OSM + Foundation. + open_data_title: Open Data + open_data_html: 'OpenStreetMap è open data: sei libero di usarla per + qualsiasi scopo a patto di attribuirla a OpenStreetMap e ai suoi contributori. + Se alteri o sviluppi sulla base dei dati in un certo modo, puoi distribuire + il risultato solo mediante la stessa licenza. Consultare la pagina + Copyright e Licenza per i dettagli.' + legal_title: Note legali + legal_html: "Questo sito e molti altri servizi correlati sono formalmente gestiti + dalla \nOpenStreetMap Foundation + (OSMF) \nper conto della comunità. L'uso di tutti i servizi gestiti dalla + OSMF è soggetto \nalle nostre \nregole + di utilizzo accettabile ed alla nostra informativa + sulla privacy\n
        \nSi prega di contattare + la OSMF \nin caso di dubbi e problemi di licenza, copyright o altre questioni + legali.\n
        \n\"OpenStreetMap\", il logo con la lente d'ingrandimento e \"State + of the Map\" sono sono + marchi registrati della OSMF." + partners_title: Partner + copyright: + foreign: + title: A proposito di questa traduzione + text: In caso di incoerenza fra questa pagina di traduzione e %{english_original_link}, + fa fede la pagina in inglese + english_link: l'originale in inglese + native: + title: A proposito di questa pagina + text: Stai visualizzando la versione in inglese della pagina sul copyright. + Puoi tornare alla %{native_link} di questa pagina oppure puoi terminare + la lettura di diritto d'autore e %{mapping_link}. + native_link: versione in italiano + mapping_link: inizia a mappare + legal_babble: + title_html: Copyright e licenza + intro_1_html: |- + OpenStreetMap® è open data, e i suoi dati sono distribuiti con licenza Open Data Commons Open Database License (ODbL) dalla OpenStreetMap Foundation (OSMF). + intro_2_html: "Sei libero di copiare, distribuire, trasmettere e adattare + i nostri dati, finché lo attribuisci a OpenStreetMap e ai suoi contributori. + Se alteri o ti basi sui nostri dati,\npuoi distribuire il risultato solo + sotto la stessa licenza. Il \ncodice\nlegale + completo illustra i tuoi diritti e le tue responsabilità." + intro_3_html: "La cartografia contenuta nelle nostre tavole, e la nostra documentazione, + sono rilasciate sotto licenza Creative + \nCommons Attribuzione - Condividi allo stesso modo 2.0 (CC BY-SA)." + credit_title_html: Come si attribuisce a OpenStreetMap + credit_1_html: Si richiede che l'attribuzione sia “© OpenStreetMap + contributors ”. + credit_2_html: |- + Inoltre devi specificare chiaramente che i dati sono disponibili sotto la Open Database Licese e, se usi le nostre tavole, che la cartografia è pubblicata con licenza CC BY-SA. Puoi fare ciò mettendo un collegamento URL a questa pagina di copyright. + In alternativa, e necessariamente se stai distribuendo OSM sotto forma di dati, puoi citare e creare un collegamento diretto alle licenze. In mezzi di comunicazione dove i collegamenti URL non sono possibili (per esempio un'opera stampata), ti suggeriamo di indirizzare i lettori verso openstreetmap.org (magari esplicitando 'OpenStreetMap' come nome completo), verso opendatacommons.org e, se necessario, verso creativecommons.org. + credit_3_html: |- + In una mappa elettronica navigabile, i crediti devono essere mostrati nell'angolo della mappa. + Ad esempio: + attribution_example: + alt: Esempio di come attribuire ad OpenStreetMap su una pagina web + title: Esempio di attribuzione + more_title_html: Per saperne di più + more_1_html: Per saperne di più su come utilizzare i nostri dati e come citarne + correttamente la fonte, consulta la pagina sulla Licenza + OSMF. + more_2_html: |- + Anche se i dati OpenStreetMap sono aperti, non possiamo fornire accesso alle API della mappa gratuitamente per terze parti. + Vedi la nostra Politica di utilizzo delle API, la + Politica di utilizzo delle tavole della mappa + e la Politica di utilizzo di Nominatim. + contributors_title_html: Nostri collaboratori + contributors_intro_html: 'I nostri contributori sono migliaia di individui. + Includiamo anche dati distribuiti sotto licenze aperte provenienti da agenzie + cartografiche nazionali o di altra fonte, tra cui:' + contributors_at_html: |- + Austria: contiene i dati della + Stadt Wien (sotto + CC BY), + Land Vorarlberg e + Land Tirol (sotto CC-BY AT con emendamenti). + contributors_ca_html: |- + Canada: contiene i dati della + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), e della StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: |- + Finlandia: contiene dati dal + National Land Survey of Finland's Topographic Database + e di altri set di dati, in base alla + licensa NLSFI. + contributors_fr_html: |- + Francia: contiene dati provenienti dalla + Direction Générale des Impôts. + contributors_nl_html: |- + Olanda: contiene dati © AND, 2007 + (www.and.com) + contributors_nz_html: |- + Nuova Zelanda: contiene i dati provenienti dalla + Land Information New Zealand. Crown Copyright reserved. + contributors_si_html: |- + Slovenia: Contiene dati dell' + Autorità per il Rilievo e la Mappatura e del + Ministero dell' Agricoltura, delle foreste e dell'alimentazione + (informazioni pubbliche della Slovenia). + contributors_za_html: |- + Sud Africa: contiene i dati provenienti dalla + Chief Directorate: + National Geo-Spatial Information, State copyright reserved. + contributors_gb_html: |- + Regno Unito: contiene i dati della + Ordnance Survey © Crown copyright and database right + 2010-12. + contributors_footer_1_html: |- + Per ulteriori dettagli di queste e altre fonti che sono state utilizzate + per aiutare a migliorare OpenStreetMap, consulta la pagina dei + collaboratori sul wiki di OpenStreetMap. + contributors_footer_2_html: |- + L'inserimento dei dati in OpenStreetMap non implica che il fornitore + originale dei dati appoggi OpenStreetMap, fornisca alcuna garanzia o + accetti qualsiasi responsabilità. + infringement_title_html: Violazione del copyright + infringement_1_html: Ai contributori OSM si ricorda di non aggiungere dati + da qualsiasi fonte protetta da copyright (ad esempio Google Maps o mappe + stampate) senza esplicita autorizzazione dei titolare del copyright. + infringement_2_html: |- + Se ritieni che materiale protetto da copyright sia stato impropriamente aggiunto al database di OpenStreetMap o a questo sito, consulta la nostra + procedura di rimozione per violazione del copyright o segnalacelo direttamente alla nostra + pagina di segnalazione on-line. + trademarks_title_html: Marchi registrati + trademarks_1_html: '"OpenStreetMap", il logo con la lente d''ingrandimento + e "State of the Map" sono marchi registrati della Fondazione OpenStreetMap. + Se avete domande sull''uso dei marchi, vedi la nostra politica + sui marchi.' index: js_1: Si sta utilizzando un browser che non supporta JavaScript, oppure è stato disabilitato JavaScript. @@ -1547,6 +1395,114 @@ it: id_not_configured: iD non è stato configurato no_iframe_support: Il proprio browser non supporta gli iframe HTML, necessari per questa funzionalità. + export: + title: Esporta + area_to_export: Area da esportare + manually_select: Seleziona manualmente un'area differente + format_to_export: Formato di esportazione + osm_xml_data: Dati XML OpenStreetMap + map_image: Immagine Mappa (mostra livello standard) + embeddable_html: HTML incapsulabile + licence: Licenza + export_details: I dati OpenStreetMap sono rilasciati con licenza + Open Data Commons Open Database (ODbL). + too_large: + advice: 'Se le esportazioni riportate sopra non riescono, prova con una delle + fonti elencate di seguito:' + body: 'Quest''area è troppo grande per essere esportata come Dati XML di OpenStreetMap. + Si prega di zoomare, di selezionare un''area più piccola o di utilizzare + una delle seguenti fonti per il download di massa dei dati:' + planet: + title: Pianeta OSM + description: Copie aggiornate regolarmente del database OpenStreetMap completo + overpass: + title: Overpass API + description: Scarica questo riquadro di selezione da un mirror del database + di OpenStreetMap + geofabrik: + title: Geofabrik Downloads + description: Estratti aggiornati regolarmente di continenti, paesi, e città + selezionata + metro: + title: Metro Extracts + description: Estratti per le principali città del mondo e le loro aree circostanti + other: + title: Altre fonti + description: Ulteriori fonti elencate sul wiki di OpenStreetMap + options: Opzioni + format: Formato + scale: Scala + max: max + image_size: Dimensione immagine + zoom: Ingrandimento + add_marker: Aggiungi un marcatore alla mappa + latitude: 'Lat:' + longitude: 'Lon:' + output: Risultato + paste_html: Incolla l'HTML per incapsulare nel sito web + export_button: Esporta + fixthemap: + title: Segnala un problema / Correggi la mappa + how_to_help: + title: Come aiutare + join_the_community: + title: Entra nella comunità + explanation_html: Se avete notato un problema fra i nostri dati della mappa, + per esempio manca una strada o il tuo indirizzo, il modo migliore per + procedere è quello di unirsi alla comunità di OpenStreetMap e aggiungere + o riparare quel dato da te. + add_a_note: + instructions_html: Basta cliccare o la stessa + icona visualizzata sulla mappa. Questo aggiungerà un marker alla mappa + che puoi muovere trascinando. Aggiungi un messaggio, poi fai clic su Salva + e altri mappers indagheranno. + other_concerns: + title: Ulteriori dubbi + explanation_html: Se hai dubbi su come i nostri dati vengono utilizzati consulta + la nostra pagina sulle licenze per ulteriori informazioni + legali, oppure contatta il + gruppo di lavoro OSMF. + help: + title: Come ottenere aiuto + introduction: OpenStreetMap ha diverse risorse per imparare a conoscere il progetto, + chiedendo e rispondendo alle domande, discutendo collaborativamente e documentando + gli argomenti di mappatura. + welcome: + url: /welcome + title: Benvenuti in OSM + description: Inizia con questa guida rapida che copre le basi di OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/IT:Beginners%27_guide + title: Guida per Principianti + description: Guida per i principianti gestita dalla community. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Fai una domanda o cerca risposte sul sito di domande e risposte + di OSM. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Mailing List + description: Poni la tua domanda o discuti questioni di interesse su una vasta + gamma di mailing list tematiche o regionali. + forums: + url: http://forum.openstreetmap.org/ + title: Forum + description: Domande e discussioni per coloro che preferiscono un'interfaccia + in stile bacheca (BBS). + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Chat interattiva in molte lingue diverse e su molti argomenti. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Aiuto per imprese e organizzazioni che intendono migrare a mappe + e altri servizi basati su OpenStreetMap. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Sfoglia il wiki per la documentazione approfondita di OSM. sidebar: search_results: Risultati della ricerca close: Chiudi @@ -1647,6 +1603,54 @@ it: image: Immagine alt: Testo alternativo url: URL + welcome: + title: Benvenuto! + introduction_html: Benvenuti in OpenStreetMap, la mappa del mondo libera e modificabile. + Ora che ti sei registrato, sei pronto a iniziare ad editare la mappa. Ecco + una guida rapida con le cose più importanti che dovresti sapere. + whats_on_the_map: + title: Cosa c'è sulla mappa + on_html: |- + OpenStreetMap è un luogo per la mappatura delle cose che sono sia vere che attuali - comprende milioni di edifici, strade e altri dettagli sui luoghi. Puoi mappare + qualsiasi cosa che nel mondo reale ti interessa. + off_html: Ciò che non comprende dati opinabili come valutazioni, + caratteristiche storiche o ipotetiche e dati da fonti coperte da copyright. + A meno che non si abbiano particolari permessi, non bisogna copiare dalle + mappe online o da quelle cartacee. + basic_terms: + title: Condizioni basilari per il Mapping + paragraph_1_html: OpenStreetMap ha un proprio "gergo". Eccoti qualche parola + che potrebbe tornarti utile. + editor_html: Un editor è un programma o un sito internet + che puoi utilizzare per modificare la mappa. + node_html: Un nodo è un punto sulla mappa, come un singolo + ristorante o un albero. + way_html: Una via è una linea o una zona, come una strada, + un fiume, lago o edificio. + tag_html: Un tag include alcuni dati su un punto o una strada, + come il nome di un ristorante o i limiti di velocità di una strada. + rules: + title: Regole! + paragraph_1_html: "OpenStreetMap ha poche regole formali, ma ci aspettiamo + che tutti i partecipanti collaborino e comunichino con la comunità. Se stai + considerando qualsiasi altra attività oltre all'editing manuale, dovresti + prima leggere le linee guida sulle importazioni + e \nmodifiche + automatiche e seguire le loro indicazioni." + questions: + title: Domande? + paragraph_1_html: |- + OpenStreetMap ha diverse risorse per imparare a conoscere il progetto, chiedendo e rispondendo alle domande, discutendo collaborativamente e documentando gli argomenti di mappatura. + Ottieni aiuto. + start_mapping: Inizia a mappare + add_a_note: + title: Non hai tempo per editare? Aggiungi una nota! + paragraph_1_html: Se vuoi fare solo una piccola correzione, ma non hai abbastanza + tempo per registrarti e imparare come modificare, puoi semplicemente aggiungere + una nota. + paragraph_2_html: |- + Vai alla mappa e clicca sull'icona della nota: + . Questo aggiungerà un marker alla mappa, che potrai muovere trascinandolo. Aggiungi il tuo messaggio, quindi fare clic su Salva e altri Mappers daranno un'occhiata. trace: visibility: private: Privato (condiviso solamente come anonimo, punti non ordinati) @@ -1779,7 +1783,7 @@ it: di accedere all'interfaccia web per visualizzare i termini di contribuzione. Non c'è bisogno che tu aderisca, però è necessario che tu li legga. oauth: - oauthorize: + authorize: title: Autorizzare l'accesso al tuo account request_access: L'applicazione %{app_name} sta richiedendo l'accesso al tuo profilo, %{user}. Si prega di verificare se si desidera che l'applicazione @@ -1793,11 +1797,11 @@ it: allow_write_gpx: carica tracciati GPS. allow_write_notes: modificare le note. grant_access: Concedi l'accesso - oauthorize_success: + authorize_success: title: Richiesta di autorizzazione consentita allowed: Hai consentito l'accesso all'applicazione %{app_name} al tuo account. verification: Il codice di verifica è %{code}. - oauthorize_failure: + authorize_failure: title: Richiesta di autorizzazione non riuscita denied: Hai negato l'accesso all'applicazione %{app_name} al tuo account. invalid: Il token di autorizzazione non è valido. @@ -2245,7 +2249,7 @@ it: confirm: Conferma fail: Impossibile revocare il ruolo `%{role}' dall'utente `%{name}'. Si prega di controllare che utente e ruolo siano entrambi validi. - user_block: + user_blocks: model: non_moderator_update: Devi essere un moderatore per creare o aggiornare un blocco. non_moderator_revoke: Devi essere un moderatore per revocare un blocco. @@ -2309,20 +2313,6 @@ it: period: one: 1 ora other: '%{count} ore' - partial: - show: Mostra - edit: Modifica - revoke: Revoca! - confirm: Sei sicuro? - display_name: Utente bloccato - creator_name: Autore - reason: Motivo del blocco - status: Stato - revoker_name: Revocato da - not_revoked: (non revocato) - showing_page: Pagina %{page} - next: Successivo » - previous: « Precedente helper: time_future: Termina fra %{time}. until_login: Attivo finché l'utente non si collega. @@ -2353,8 +2343,22 @@ it: back: Visualizza tutti i blocchi revoker: 'Revocatore:' needs_view: L'utente deve collegarsi prima che questo blocco sia cancellato. - note: - description: + block: + not_revoked: (non revocato) + show: Mostra + edit: Modifica + revoke: Revoca! + blocks: + display_name: Utente bloccato + creator_name: Autore + reason: Motivo del blocco + status: Stato + revoker_name: Revocato da + showing_page: Pagina %{page} + next: Successivo » + previous: « Precedente + notes: + comment: opened_at_html: Creata %{when} fa opened_at_by_html: Creata %{when} fa da %{user} commented_at_html: Aggiornata %{when} fa @@ -2484,7 +2488,7 @@ it: distance: Distanza errors: no_route: Impossibile trovare un percorso fra questi due posti. - no_place: Spiacenti, non è possibile trovare quel luogo. + no_place: Spiacenti, non è possibile trovare '%{place}'. instructions: continue_without_exit: Prosegui su %{name} slight_right_without_exit: Svolta leggermente a destra in %{name} @@ -2504,6 +2508,7 @@ it: onramp_right_with_name_directions: Gira a destra sulla rampa su %{name}, in direzione %{directions} onramp_right_without_directions: Gira a destra sulla rampa + onramp_right: Gira a destra sulla rampa endofroad_right_without_exit: Alla fine della strada svolta a destra in %{name} merge_right_without_exit: Immettiti a destra in %{name} fork_right_without_exit: Al bivio svolta a destra in %{name} @@ -2528,6 +2533,7 @@ it: onramp_left_with_name_directions: Gira a sinistra alla rampa su %{name}, in direzione %{directions} onramp_left_without_directions: Gira a sinistra sulla rampa + onramp_left: Gira a sinistra sulla rampa endofroad_left_without_exit: Alla fine della strada svolta a sinistra in %{name} merge_left_without_exit: Immettiti a sinistra in %{name} fork_left_without_exit: Al bivio svolta a sinistra in %{name} @@ -2564,7 +2570,7 @@ it: show_address: Mostra indirizzo query_features: Ricerca di elementi centre_map: Centra la mappa qui - redaction: + redactions: edit: description: Descrizione heading: Modifica Redazione diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 710dc0bed..f3a8fdad5 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -351,48 +351,6 @@ ja: ago: '%{ago}前' newer_comments: 新しいコメント older_comments: 古いコメント - export: - title: エクスポート - start: - area_to_export: エクスポートする領域 - manually_select: ドラッグして別の領域を選択 - format_to_export: エクスポートするファイル形式 - osm_xml_data: OpenStreetMap XML データ - map_image: 地図画像 (標準レイヤーを表示) - embeddable_html: 埋め込み HTML - licence: ライセンス - export_details: OpenStreetMap のデータは Open - Data Commons Open Database License (ODbL) の下にライセンスされています。 - too_large: - advice: '上のエクスポートが失敗した場合は、以下に列挙した情報源のいずれかの使用を検討してください:' - body: 領域が大きすぎて OpenStreetMap XML データとしてエクスポートできません。拡大するか、領域を小さくするか、以下に列挙したソースから一括データダウンロードを使用するかしてください。 - planet: - title: Planet OSM - description: 定期的に更新される、OpenStreetMap データベースの完全な複製 - overpass: - title: Overpass API - description: OpenStreetMapデータベースのミラーからこの範囲をダウンロード - geofabrik: - title: Geofabrik のダウンロード - description: 大陸、国、および選択した都市を抽出したもので、定期的に更新されます - metro: - title: Metro Extracts - description: 世界の主要都市とその周辺地域を抽出します - other: - title: 他の情報源 - description: OpenStreetMap ウィキに記載されている追加の情報源 - options: オプション - format: ファイル形式 - scale: 縮尺 - max: 最大 - image_size: 画像サイズ - zoom: ズーム - add_marker: マーカーを地図に追加 - latitude: '緯度:' - longitude: '経度:' - output: 出力 - paste_html: 以下の HTML をあなたのサイトに貼り付けてください - export_button: エクスポート geocoder: search: title: @@ -671,7 +629,9 @@ ja: water_park: 親水公園 "yes": レジャー man_made: + bridge: 橋 lighthouse: 灯台 + mine: 鉱山 pipeline: パイプライン silo: サイロ storage_tank: 貯蔵タンク @@ -971,182 +931,6 @@ ja: text: 寄付 learn_more: 詳細 more: その他 - license_page: - foreign: - title: この翻訳について - text: この翻訳版のページと%{english_original_link}の間で競合が発生した場合は、英語版の内容が優先されます - english_link: 英語の原文 - native: - title: このページについて - text: 閲覧中のこのページは著作権情報ページの英語版です。このページの%{native_link}に戻れます。または%{mapping_link}からマッピングに戻れます。 - native_link: 日本語版 - mapping_link: マッピングを開始 - legal_babble: - title_html: 著作権とライセンス - intro_1_html: |- - OpenStreetMap® は著作権者であるOpenStreetMap財団 (OSMF)がOpen Data Commons Open Database License (ODbL) の下にライセンスするオープンデータです。 - intro_2_html: OpenStreetMapとその協力者をクレジットすれば、データを自由にコピー、配布、送信、利用することができます。変更したり翻案したりしたデータは同じライセンスに従う場合のみ、提供することができます。あなたの権利と責任は、ライセンス契約の全文で説明しています。 - intro_3_html: |- - 地図タイルの作成法やドキュメントは、Creative - Commons Attribution-ShareAlike 2.0 ライセンス (CC BY-SA) に基づいてライセンスされます。 - credit_title_html: OpenStreetMap のクレジット表記の仕方 - credit_1_html: '“© OpenStreetMap contributors”のクレジットを必ず使用してください。' - credit_2_html: あなたはデータが Open Database License に基づいて提供されていること、そして地図タイルを使用する場合は、地図製作が - CC BY-SA としてライセンスされていることを明確にしなければなりません。著作権表示ページにリンクすることでこれを表現することができます。また、データの形式でOpenStreetMapを配布する場合の要件として、名前を表示の上、ライセンスに直接リンクすることができます。リンクを張れないメディア(印刷など)の場合は、openstreetmap.org(OpenStreetMapをアドレスとして展開した形)、opendatacommons.org、さらに関連がある場合はcreativecommons.orgへ読者を誘導することをお勧めします。 - credit_3_html: |- - 閲覧可能な電子地図の場合は、地図の隅にクレジットを表示してください。 - 例: - attribution_example: - alt: ウェブページに OpenStreetMap を記述する方法の例 - title: 権利表示の例 - more_title_html: 詳細を見る - more_1_html: |- - データの利用やクレジット方法についての詳細はOSMF ライセンスページをお読みください。 - more_2_html: OpenStreetMap はオープンデータですが、サードパーティーの開発者のための無料の地図 API は提供できません。API 利用規約、タイル利用規約ならびにNominatim利用ポリシーをお読みください。 - contributors_title_html: 協力者 - contributors_intro_html: 数千人もの個人が協力者となっています。それに加え、各国の地図作成機関や、以下のように、その他の情報源も含め、公開されたライセンスによるデータを含みます。 - contributors_at_html: 'オーストリア: Stadt - Wien (ライセンス CC - BY)、Land - Vorarlberg、Land Tirol (ライセンス CC - BY AT with amendments) によるデータを含みます。' - contributors_ca_html: 'カナダ: GeoBase®ã€GeoGratis (© - Department of Natural Resources Canada)、CanVec (© Department of Natural - Resources Canada)、StatCan (Geography Division, Statistics Canada) によるデータを含みます。' - contributors_fi_html: 'フィンランド: NLSFI - Licenseに基づき、National Land Survey of Finland''s Topographic Database及びその他のデータセットのデータを含んでいます。' - contributors_fr_html: 'フランス: Direction Générale des Impôts - によるデータを含みます。' - contributors_nl_html: 'オランダ: © AND データ、2007 (www.and.com) - を含みます。' - contributors_nz_html: 'ニュージーランド: Land Information New Zealand - によるデータを含みます。著作権はクラウン・コピーライトになります。' - contributors_si_html: 'スロベニア: 調査地図庁ならびに農林食料省(スロベニアの公開情報)による。' - contributors_za_html: '南アフリカ: Chief - Directorate: National Geo-Spatial Information,政府によるデータを含み、著作権を保持します。' - contributors_gb_html: 'イギリス: 陸地測量データ ©è‘—作権はクラウン・コピーライト及びdatabase - right 2010-12 を含みます。' - contributors_footer_1_html: |- - これらの詳細について、またOpenStreetMapの向上に使用されたその他のソースについては、OpenStreetMap Wikiの協力者ページをご覧ください。 - contributors_footer_2_html: OpenStreetMapのデータに含めることは、元データの提供者がOpenStreetMapを支持したり、何かしらの保証を行ったり、何かしらの責任を負ったりすることを意味するものではありません。 - infringement_title_html: 著作権侵害 - infringement_1_html: 'OpenStreetMapの協力者は、著作権者から明確な許諾を得ずに、著作権のある情報源 (例: Google - マップや印刷された地図) から決してデータを持ち込まないよう注意するものとします。' - infringement_2_html: もし著作権のある素材がOpenStreetMapのデータベースや本サイトに不正に追加されたとお考えの場合は、却下手順をお読みになるか、オンライン却下のページから直接申し立てを行ってください。 - trademarks_title_html: 商標 - trademarks_1_html: OpenStreetMapならびに拡大鏡のロゴおよびState of the MapはOpenStreetMap財団の登録商標です。商標の利用に関しては、商標利用ポリシーを参照ください。 - welcome_page: - title: ようこそ! - introduction_html: フリーで編集可能な世界地図、OpenStreetMapへようこそ。サインアップしたので、マッピングの準備はすべて整いました。知っておかなければならない重要事項を簡単に説明します。 - whats_on_the_map: - title: 地図上にあるもの - on_html: OpenStreetMapは現実かつ現存のもの - 数々の建物、道路、場所に関するその他の詳細をマッピングする場所です。あなたは関心のある現実世界のものを何でもマッピングできます。 - off_html: 含めてはいけないものは、評価のような主観的なデータ、歴史的または仮想的なもの、著作権のある情報源からのデータです。特別な許可がない場合は、オンラインや紙の地図からコピーをしてはいけません。 - basic_terms: - title: マッピングのための基本的な用語 - paragraph_1_html: OpenStreetMap には独自の用語がいくつかあります。ここでは手早く、いくつかのキーワードを紹介しましょう。 - editor_html: エディターは、地図を編集できるプログラムやウェブサイトです。 - node_html: ノードは地図上の点です。1 軒のレストランや 1 本の樹木が該当します。 - way_html: ウェイは線または領域です。道路、水路、湖、建物などが該当します。 - tag_html: タグはノードやウェイについて補足するデータです。レストランの名前、道路の制限速度などが該当します。 - rules: - title: ルール - paragraph_1_html: |- - OpenStreetMapには正規の規約がいくつかありますが、すべての利用者とコミュニティの協力と意思疎通をお願いしています。手動で編集する以外をご検討の場合は、インポートならびに - 自動的な編集ガイドラインをよく読んで従ってください。 - questions: - title: 何か質問はありますか? - paragraph_1_html: |- - OpenStreetMapにはプロジェクトについて学んだり、質疑応答したり、共同で議論したり、マッピングについての知識を文書化したりするさまざまなリソースがあります。 - ここからヘルプを得ましょう。 - start_mapping: マッピングを開始 - add_a_note: - title: 編集する時間がないためメモを残します - paragraph_1_html: |- - 些細な修正だけをしたいが、サインアップしたり編集の仕方を勉強する時間がない場合は、 - 簡単にメモを追加できます。 - paragraph_2_html: 地図に移動してメモアイコン()をクリックするだけです。これで地図上に印が追加され、ドラッグして移動させることができます。あなたのメッセージを追加し、保存をクリックすれば、他のマッパーが調査するでしょう。 - fixthemap: - title: 問題点の報告 / 地図の修正 - how_to_help: - title: 支援する方法 - join_the_community: - title: コミュニティへの参加 - explanation_html: 道路やあなたの住所が抜けているなど地図データの問題を見つけた場合、OpenStreetMapのコミュニティに参加して自分でデータの修正や追加をすることが最善の方法です。 - add_a_note: - instructions_html: |- - をクリックするか、または地図上の同じアイコンをクリックしてください。 - 地図にマーカーが追加されます。マーカーはドラッグで移動できます。 - メッセージを追加して保存をクリックすると、他のマッパーたちが調査します。 - other_concerns: - title: 他の問題 - explanation_html: 私たちのデータの使い方やコンテンツに問題がある場合、著作権のページを参照して法的情報をご確認いただくか、適切な - OSMF ワーキング グループ - までご連絡ください。 - help_page: - title: ヘルプの取得 - introduction: OpenStreetMapにはプロジェクトについて学んだり、質疑応答したり、協議したり、マッピングについての知識を文書化したりするさまざまなリソースがあります。 - welcome: - url: /welcome - title: OSM へようこそ - description: OpenStreetMap の基礎を網羅しているこのクイック ガイドから始めましょう。 - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: 初心者向けの手引き - description: コミュニティは、初心者向けガイドが整備しています。 - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: OSM の質問回答サイトで質問したり回答を検索したりする。 - mailing_lists: - title: メーリング リスト - description: メーリングリストは話題や地域ごとに多種多様で、質問や興味のある事項について議論できる場です。 - forums: - title: フォーラム - description: 掲示板方式のインタフェイスを好む人を対象とした質問や議論 - irc: - title: IRC - description: 多様な言語によるいろいろな話題を取上げた双方向性チャット - switch2osm: - title: switch2osm - description: ヘルプ、OpenStreetMapをベースにした地図その他のサービスへ切り替えた法人や団体向け。 - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: 詳細なOSMの説明が書かれたウィキを参照します。 - about_page: - next: 次へ - copyright_html: ©OpenStreetMap
        協力者 - used_by: '%{name} は、数多くのウェブ サイト、モバイル アプリ、ハードウェア機器で利用されています' - lede_text: OpenStreetMapは、道路、通路、カフェ、鉄道駅など、世界中にあるすべてのものに関するデータを提供・メンテナンスしているマッパーのコミュニティによって構築されました。 - local_knowledge_title: 地元の情報 - local_knowledge_html: OpenStreetMapは地域の知識を強調します。協力者は航空写真やGPS機器、ローテクのフィールド地図を使用して、OpenStreetMapが正確で最新の状態であることを確認します。 - community_driven_title: コミュニティ主導 - community_driven_html: OpenStreetMapのコミュニティは多様で、情熱的で、毎日成長しています。協力者には地図作りマニア、GISの専門家、OpenStreetMapサーバーを稼働させている技術者、被災地の地図作りをする人道主義者などを含みます。コミュニティについて詳しくは、OpenStreetMap のブログ、利用者の日記、コミュニティのブログとOSM財団のウェブサイトをご覧ください。 - open_data_title: オープン データ - open_data_html: OpenStreetMapはオープンデータです。あなたはOpenStreetMapと協力者の著作権を表示すれば、いかなる目的でも無料で利用することができます。もし何らかの方法でデータを変更したり二次データを作成したりした場合も、同じライセンス条件下でのみ結果を配布できます。詳しくは、著作権とライセンスをご覧ください。 - legal_title: 法律関係 - legal_html: "このサイトおよびその他の関連サービスは、コミュニティを代表してOpenStreetMap財団 - (OSMF) が運営しています。OpenStreetMap財団の運営するサービス利用者は、私たちの定める利用規定ならびに当財団のプライバシーに関する規定の対象となります。\n
        - \nライセンス、著作権その他法的な質問や問題がある場合は、OpenStreetMap財団までご連絡ください。\n
        \nOpenStreetMapならびに拡大鏡のロゴおよびState - of the MapはOpenStreetMap財団の登録商標です。" - partners_title: パートナー notifier: diary_comment_notification: subject: '[OpenStreetMap]の%{user}さんが日記エントリにコメントしました' @@ -1300,6 +1084,103 @@ ja: delete: deleted: メッセージを削除しました site: + about: + next: 次へ + copyright_html: ©OpenStreetMap
        協力者 + used_by: '%{name} は、数多くのウェブ サイト、モバイル アプリ、ハードウェア機器で利用されています' + lede_text: OpenStreetMapは、道路、通路、カフェ、鉄道駅など、世界中にあるすべてのものに関するデータを提供・メンテナンスしているマッパーのコミュニティによって構築されました。 + local_knowledge_title: 地元の情報 + local_knowledge_html: OpenStreetMapは地域の知識を強調します。協力者は航空写真やGPS機器、ローテクのフィールド地図を使用して、OpenStreetMapが正確で最新の状態であることを確認します。 + community_driven_title: コミュニティ主導 + community_driven_html: OpenStreetMapのコミュニティは多様で、情熱的で、毎日成長しています。協力者には地図作りマニア、GISの専門家、OpenStreetMapサーバーを稼働させている技術者、被災地の地図作りをする人道主義者などを含みます。コミュニティについて詳しくは、OpenStreetMap のブログ、利用者の日記、コミュニティのブログとOSM財団のウェブサイトをご覧ください。 + open_data_title: オープン データ + open_data_html: OpenStreetMapはオープンデータです。あなたはOpenStreetMapと協力者の著作権を表示すれば、いかなる目的でも無料で利用することができます。もし何らかの方法でデータを変更したり二次データを作成したりした場合も、同じライセンス条件下でのみ結果を配布できます。詳しくは、著作権とライセンスをご覧ください。 + legal_title: 法律関係 + legal_html: "このサイトおよびその他の関連サービスは、コミュニティを代表してOpenStreetMap財団 + (OSMF) が運営しています。OpenStreetMap財団の運営するサービス利用者は、私たちの定める利用規定ならびに当財団のプライバシーに関する規定の対象となります。\n
        + \nライセンス、著作権その他法的な質問や問題がある場合は、OpenStreetMap財団までご連絡ください。\n
        \nOpenStreetMapならびに拡大鏡のロゴおよびState + of the MapはOpenStreetMap財団の登録商標です。" + partners_title: パートナー + copyright: + foreign: + title: この翻訳について + text: この翻訳版のページと%{english_original_link}の間で競合が発生した場合は、英語版の内容が優先されます + english_link: 英語の原文 + native: + title: このページについて + text: 閲覧中のこのページは著作権情報ページの英語版です。このページの%{native_link}に戻れます。または%{mapping_link}からマッピングに戻れます。 + native_link: 日本語版 + mapping_link: マッピングを開始 + legal_babble: + title_html: 著作権とライセンス + intro_1_html: |- + OpenStreetMap® は著作権者であるOpenStreetMap財団 (OSMF)がOpen Data Commons Open Database License (ODbL) の下にライセンスするオープンデータです。 + intro_2_html: OpenStreetMapとその協力者をクレジットすれば、データを自由にコピー、配布、送信、利用することができます。変更したり翻案したりしたデータは同じライセンスに従う場合のみ、提供することができます。あなたの権利と責任は、ライセンス契約の全文で説明しています。 + intro_3_html: |- + 地図タイルの作成法やドキュメントは、Creative + Commons Attribution-ShareAlike 2.0 ライセンス (CC BY-SA) に基づいてライセンスされます。 + credit_title_html: OpenStreetMap のクレジット表記の仕方 + credit_1_html: '“© OpenStreetMap contributors”のクレジットを必ず使用してください。' + credit_2_html: あなたはデータが Open Database License に基づいて提供されていること、そして地図タイルを使用する場合は、地図製作が + CC BY-SA としてライセンスされていることを明確にしなければなりません。著作権表示ページにリンクすることでこれを表現することができます。また、データの形式でOpenStreetMapを配布する場合の要件として、名前を表示の上、ライセンスに直接リンクすることができます。リンクを張れないメディア(印刷など)の場合は、openstreetmap.org(OpenStreetMapをアドレスとして展開した形)、opendatacommons.org、さらに関連がある場合はcreativecommons.orgへ読者を誘導することをお勧めします。 + credit_3_html: |- + 閲覧可能な電子地図の場合は、地図の隅にクレジットを表示してください。 + 例: + attribution_example: + alt: ウェブページに OpenStreetMap を記述する方法の例 + title: 権利表示の例 + more_title_html: 詳細を見る + more_1_html: |- + データの利用やクレジット方法についての詳細はOSMF ライセンスページをお読みください。 + more_2_html: OpenStreetMap はオープンデータですが、サードパーティーの開発者のための無料の地図 API は提供できません。API 利用規約、タイル利用規約ならびにNominatim利用ポリシーをお読みください。 + contributors_title_html: 協力者 + contributors_intro_html: 数千人もの個人が協力者となっています。それに加え、各国の地図作成機関や、以下のように、その他の情報源も含め、公開されたライセンスによるデータを含みます。 + contributors_at_html: 'オーストリア: Stadt + Wien (ライセンス CC + BY)、Land + Vorarlberg、Land Tirol (ライセンス CC + BY AT with amendments) によるデータを含みます。' + contributors_ca_html: 'カナダ: GeoBase®ã€GeoGratis (© + Department of Natural Resources Canada)、CanVec (© Department of Natural + Resources Canada)、StatCan (Geography Division, Statistics Canada) によるデータを含みます。' + contributors_fi_html: 'フィンランド: NLSFI + Licenseに基づき、National Land Survey of Finland''s Topographic Database及びその他のデータセットのデータを含んでいます。' + contributors_fr_html: 'フランス: Direction Générale des Impôts + によるデータを含みます。' + contributors_nl_html: 'オランダ: © AND データ、2007 (www.and.com) + を含みます。' + contributors_nz_html: 'ニュージーランド: Land Information New Zealand + によるデータを含みます。著作権はクラウン・コピーライトになります。' + contributors_si_html: 'スロベニア: 調査地図庁ならびに農林食料省(スロベニアの公開情報)による。' + contributors_za_html: '南アフリカ: Chief + Directorate: National Geo-Spatial Information,政府によるデータを含み、著作権を保持します。' + contributors_gb_html: 'イギリス: 陸地測量データ ©è‘—作権はクラウン・コピーライト及びdatabase + right 2010-12 を含みます。' + contributors_footer_1_html: |- + これらの詳細について、またOpenStreetMapの向上に使用されたその他のソースについては、OpenStreetMap Wikiの協力者ページをご覧ください。 + contributors_footer_2_html: OpenStreetMapのデータに含めることは、元データの提供者がOpenStreetMapを支持したり、何かしらの保証を行ったり、何かしらの責任を負ったりすることを意味するものではありません。 + infringement_title_html: 著作権侵害 + infringement_1_html: 'OpenStreetMapの協力者は、著作権者から明確な許諾を得ずに、著作権のある情報源 (例: Google + マップや印刷された地図) から決してデータを持ち込まないよう注意するものとします。' + infringement_2_html: もし著作権のある素材がOpenStreetMapのデータベースや本サイトに不正に追加されたとお考えの場合は、却下手順をお読みになるか、オンライン却下のページから直接申し立てを行ってください。 + trademarks_title_html: 商標 + trademarks_1_html: OpenStreetMapならびに拡大鏡のロゴおよびState of the MapはOpenStreetMap財団の登録商標です。商標の利用に関しては、商標利用ポリシーを参照ください。 index: js_1: JavaScript に対応していないブラウザーを使用しているか、JavaScript を無効にしているかのどちらかです。 js_2: OpenStreetMap は地図の表示に JavaScript を使用します。 @@ -1322,6 +1203,96 @@ ja: potlatch2_unsaved_changes: 保存していない変更があります。(Potlatch 2 では、保存をクリックして保存する必要があります。) id_not_configured: iDが設定されていません。 no_iframe_support: あなたのブラウザーは、この機能に必須の HTML iframe に未対応です。 + export: + title: エクスポート + area_to_export: エクスポートする領域 + manually_select: ドラッグして別の領域を選択 + format_to_export: エクスポートするファイル形式 + osm_xml_data: OpenStreetMap XML データ + map_image: 地図画像 (標準レイヤーを表示) + embeddable_html: 埋め込み HTML + licence: ライセンス + export_details: OpenStreetMap のデータは Open + Data Commons Open Database License (ODbL) の下にライセンスされています。 + too_large: + advice: '上のエクスポートが失敗した場合は、以下に列挙した情報源のいずれかの使用を検討してください:' + body: 領域が大きすぎて OpenStreetMap XML データとしてエクスポートできません。拡大するか、領域を小さくするか、以下に列挙したソースから一括データダウンロードを使用するかしてください。 + planet: + title: Planet OSM + description: 定期的に更新される、OpenStreetMap データベースの完全な複製 + overpass: + title: Overpass API + description: OpenStreetMapデータベースのミラーからこの範囲をダウンロード + geofabrik: + title: Geofabrik のダウンロード + description: 大陸、国、および選択した都市を抽出したもので、定期的に更新されます + metro: + title: Metro Extracts + description: 世界の主要都市とその周辺地域を抽出します + other: + title: 他の情報源 + description: OpenStreetMap ウィキに記載されている追加の情報源 + options: オプション + format: ファイル形式 + scale: 縮尺 + max: 最大 + image_size: 画像サイズ + zoom: ズーム + add_marker: マーカーを地図に追加 + latitude: '緯度:' + longitude: '経度:' + output: 出力 + paste_html: 以下の HTML をあなたのサイトに貼り付けてください + export_button: エクスポート + fixthemap: + title: 問題点の報告 / 地図の修正 + how_to_help: + title: 支援する方法 + join_the_community: + title: コミュニティへの参加 + explanation_html: 道路やあなたの住所が抜けているなど地図データの問題を見つけた場合、OpenStreetMapのコミュニティに参加して自分でデータの修正や追加をすることが最善の方法です。 + add_a_note: + instructions_html: |- + をクリックするか、または地図上の同じアイコンをクリックしてください。 + 地図にマーカーが追加されます。マーカーはドラッグで移動できます。 + メッセージを追加して保存をクリックすると、他のマッパーたちが調査します。 + other_concerns: + title: 他の問題 + explanation_html: 私たちのデータの使い方やコンテンツに問題がある場合、著作権のページを参照して法的情報をご確認いただくか、適切な + OSMF ワーキング + グループ までご連絡ください。 + help: + title: ヘルプの取得 + introduction: OpenStreetMapにはプロジェクトについて学んだり、質疑応答したり、協議したり、マッピングについての知識を文書化したりするさまざまなリソースがあります。 + welcome: + url: /welcome + title: OSM へようこそ + description: OpenStreetMap の基礎を網羅しているこのクイック ガイドから始めましょう。 + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: 初心者向けの手引き + description: コミュニティは、初心者向けガイドが整備しています。 + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: OSM の質問回答サイトで質問したり回答を検索したりする。 + mailing_lists: + url: http://lists.openstreetmap.org/ + title: メーリング リスト + description: メーリングリストは話題や地域ごとに多種多様で、質問や興味のある事項について議論できる場です。 + forums: + title: フォーラム + description: 掲示板方式のインタフェイスを好む人を対象とした質問や議論 + irc: + title: IRC + description: 多様な言語によるいろいろな話題を取上げた双方向性チャット + switch2osm: + title: switch2osm + description: ヘルプ、OpenStreetMapをベースにした地図その他のサービスへ切り替えた法人や団体向け。 + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: 詳細なOSMの説明が書かれたウィキを参照します。 sidebar: search_results: 検索結果 close: 閉じる @@ -1422,6 +1393,38 @@ ja: image: 画像 alt: 代替テキスト url: URL + welcome: + title: ようこそ! + introduction_html: フリーで編集可能な世界地図、OpenStreetMapへようこそ。サインアップしたので、マッピングの準備はすべて整いました。知っておかなければならない重要事項を簡単に説明します。 + whats_on_the_map: + title: 地図上にあるもの + on_html: OpenStreetMapは現実かつ現存のもの - 数々の建物、道路、場所に関するその他の詳細をマッピングする場所です。あなたは関心のある現実世界のものを何でもマッピングできます。 + off_html: 含めてはいけないものは、評価のような主観的なデータ、歴史的または仮想的なもの、著作権のある情報源からのデータです。特別な許可がない場合は、オンラインや紙の地図からコピーをしてはいけません。 + basic_terms: + title: マッピングのための基本的な用語 + paragraph_1_html: OpenStreetMap には独自の用語がいくつかあります。ここでは手早く、いくつかのキーワードを紹介しましょう。 + editor_html: エディターは、地図を編集できるプログラムやウェブサイトです。 + node_html: ノードは地図上の点です。1 軒のレストランや 1 本の樹木が該当します。 + way_html: ウェイは線または領域です。道路、水路、湖、建物などが該当します。 + tag_html: タグはノードやウェイについて補足するデータです。レストランの名前、道路の制限速度などが該当します。 + rules: + title: ルール + paragraph_1_html: |- + OpenStreetMapには正規の規約がいくつかありますが、すべての利用者とコミュニティの協力と意思疎通をお願いしています。手動で編集する以外をご検討の場合は、インポートならびに + 自動的な編集ガイドラインをよく読んで従ってください。 + questions: + title: 何か質問はありますか? + paragraph_1_html: |- + OpenStreetMapにはプロジェクトについて学んだり、質疑応答したり、共同で議論したり、マッピングについての知識を文書化したりするさまざまなリソースがあります。 + ここからヘルプを得ましょう。 + start_mapping: マッピングを開始 + add_a_note: + title: 編集する時間がないためメモを残します + paragraph_1_html: |- + 些細な修正だけをしたいが、サインアップしたり編集の仕方を勉強する時間がない場合は、 + 簡単にメモを追加できます。 + paragraph_2_html: 地図に移動してメモアイコン()をクリックするだけです。これで地図上に印が追加され、ドラッグして移動させることができます。あなたのメッセージを追加し、保存をクリックすれば、他のマッパーが調査するでしょう。 trace: visibility: private: 非公開 (匿名、点は順不同) @@ -1539,7 +1542,7 @@ ja: blocked: APIへのアクセスがブロックされました。Web インターフェイスからログインし直して詳細を確認してください。 need_to_see_terms: あなたは一時的にAPIの利用を停止されています。ウェブインターフェイスにログインして協力者規約をご覧ください。同意しなくてもかまいませんが、必ずご覧ください。 oauth: - oauthorize: + authorize: title: あなたのアカウントへのアクセスの認証 request_access: アプリケーション %{app_name} があなたのアカウント%{user} への接続許可を求めています。そのアプリケーションに以下を許可してもよいかどうかを確認してください。単独もしくは複数の許可を与えることができます。 allow_to: 'クライアント アプリケーションに以下の操作を許可する:' @@ -1551,11 +1554,11 @@ ja: allow_write_gpx: GPSトレースをアップロードする。 allow_write_notes: メモを変更する。 grant_access: アクセスを許可 - oauthorize_success: + authorize_success: title: 認証リクエストが成功しました allowed: アプリケーション %{app_name} によるあなたのアカウントへのアクセスを許可しました。 verification: 検証コードは %{code} です。 - oauthorize_failure: + authorize_failure: title: 認証リクエストに失敗しました denied: アプリケーション %{app_name} によるあなたのアカウントへのアクセスを拒否しました。 invalid: 認証トークンが有効ではありません。 @@ -1954,7 +1957,7 @@ ja: are_you_sure: 利用者「%{name}」の「%{role}」権限を本当に取り消しますか? confirm: 確認 fail: 利用者「%{name}」の「%{role}」権限を取り消せませんでした。利用者および権限が両方とも正しいか確認してください。 - user_block: + user_blocks: model: non_moderator_update: ブロックの作成/更新にはモデレーター権限が必要です。 non_moderator_revoke: ブロックの取り消しにはモデレーター権限が必要です。 @@ -2003,20 +2006,6 @@ ja: revoke: 取り消す! flash: このブロックは取り消されました。 period: '%{count} 時間' - partial: - show: 表示する - edit: 編集 - revoke: 取り消す! - confirm: 本当によろしいですか? - display_name: ブロックされている利用者 - creator_name: 作成者 - reason: ブロックされた理由 - status: 状態 - revoker_name: 取り消し者 - not_revoked: (取り消されていません) - showing_page: ページ %{page} - next: 次へ » - previous: « 前へ helper: time_future: '%{time} に終了します。' until_login: 利用者がログインするまで有効です。 @@ -2046,8 +2035,22 @@ ja: back: すべてのブロックを表示 revoker: '取消:' needs_view: ブロックを解除するには、利用者はログインし直す必要があります。 - note: - description: + block: + not_revoked: (取り消されていません) + show: 表示する + edit: 編集 + revoke: 取り消す! + blocks: + display_name: ブロックされている利用者 + creator_name: 作成者 + reason: ブロックされた理由 + status: 状態 + revoker_name: 取り消し者 + showing_page: ページ %{page} + next: 次へ » + previous: « 前へ + notes: + comment: opened_at_html: '%{when}前に作成' opened_at_by_html: '%{user}さんが%{when}前に作成' commented_at_html: '%{when}前に更新' @@ -2171,7 +2174,7 @@ ja: distance: 距離 errors: no_route: 2点間のルートが見つかりません。 - no_place: 残念ながら、その場所は見つかりませんでした。 + no_place: 残念ながら、場所「%{place}」は見つかりませんでした。 instructions: continue_without_exit: '%{name}を続行' slight_right_without_exit: 道なりに右折して%{name}へ @@ -2223,7 +2226,7 @@ ja: show_address: アドレスを表示 query_features: 地物を検索 centre_map: ここで地図を中央に置く - redaction: + redactions: edit: description: 説明 heading: 改訂の編集 diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 1c3df4f9b..05f7db35d 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -262,29 +262,6 @@ ka: ago: '%{ago} წინ' newer_comments: ახალი კომენტარები older_comments: ძველი კომენტარები - export: - title: ექსპორტი - start: - area_to_export: ტერიტორია ექსპორტისათვის - manually_select: სხვა რეგიონის გამოყოფა ხელით - format_to_export: ექსპორტის ფორმატი - osm_xml_data: OpenStreetMap XML–ის მონაცემები - map_image: რუკის სურათი (სტანდარტული ფენის ჩვენება) - licence: ლიცენზია - too_large: - planet: - title: პლანეტა OSM - options: პარამეტრები - format: ფორმატი - scale: მასშტაბი - max: მაქს. - image_size: გამოსახულების ზომა - zoom: გადიდება - add_marker: რუკაზე ნიშნულის დასმა - latitude: 'განედი:' - longitude: 'გრძედი:' - output: შედეგი - export_button: ექსპორტი geocoder: search: title: @@ -759,15 +736,6 @@ ka: foundation_title: ფონდი OpenStreetMap make_a_donation: text: პროექტის დახმარება - license_page: - foreign: - english_link: ინგლისური ორიგინალი - native: - title: ამ გვერდის შესახებ - native_link: ქართული ვერსია - mapping_link: კარტოგრაფირების დაწყება - legal_babble: - title_html: საავტორო უფლებები და ლიცენზია notifier: diary_comment_notification: subject: '[OpenStreetMap]-ის მომხმარებელმა %{user} თქვენს დღიურში დატოვა კომენტარი' @@ -868,12 +836,43 @@ ka: delete: deleted: შეტყობინება წაშლილია site: + copyright: + foreign: + english_link: ინგლისური ორიგინალი + native: + title: ამ გვერდის შესახებ + native_link: ქართული ვერსია + mapping_link: კარტოგრაფირების დაწყება + legal_babble: + title_html: საავტორო უფლებები და ლიცენზია index: permalink: მუდმივი ბმული shortlink: მოკლე ბმული createnote: შენიშვნის დამატება edit: user_page_link: მომხმარებლის გვერდი + export: + title: ექსპორტი + area_to_export: ტერიტორია ექსპორტისათვის + manually_select: სხვა რეგიონის გამოყოფა ხელით + format_to_export: ექსპორტის ფორმატი + osm_xml_data: OpenStreetMap XML–ის მონაცემები + map_image: რუკის სურათი (სტანდარტული ფენის ჩვენება) + licence: ლიცენზია + too_large: + planet: + title: პლანეტა OSM + options: პარამეტრები + format: ფორმატი + scale: მასშტაბი + max: მაქს. + image_size: გამოსახულების ზომა + zoom: გადიდება + add_marker: რუკაზე ნიშნულის დასმა + latitude: 'განედი:' + longitude: 'გრძედი:' + output: შედეგი + export_button: ექსპორტი sidebar: search_results: ძიების შედეგები close: დახურვა @@ -988,7 +987,7 @@ ka: by: 'ავტორი:' map: რუკა oauth: - oauthorize: + authorize: allow_write_api: რუკის შეცვლა. oauth_clients: new: @@ -1135,7 +1134,7 @@ ka: confirm: დადასტურება revoke: confirm: დადასტურება - user_block: + user_blocks: new: title: მომხმარებელ %{name} ბლოკირების შექმნა heading: მომხმარებელ %{name} ბლოკირების შექმნა @@ -1161,20 +1160,6 @@ ka: period: one: 1 საათი other: '%{count} საათი' - partial: - show: ჩვენება - edit: რედაქტირება - revoke: განბლოკვა! - confirm: დარწმუნებული ხართ? - display_name: დაბლოკილი მომხმარებელი - creator_name: შემქმნელი - reason: დაბლოკვის მიზეზი - status: სტატუსი - revoker_name: განბლოკილია - not_revoked: (არ არის განბლოკილი) - showing_page: გვერდი %{page} - next: შემდეგი » - previous: « წინა helper: time_future: მთავრდება %{time}–ში. until_login: აქტიურია მანამდე, სანამ მომხმარებელი არ შევა სისტემაში. @@ -1201,8 +1186,22 @@ ka: back: ყველა ბლოკირების ჩვენება revoker: 'განმბლოკველი:' needs_view: სანამ მოხდება ბლოკის მოხსნა, მანამდე საჭიროა მომხმარებლის დარეგისტრირება - note: - description: + block: + not_revoked: (არ არის განბლოკილი) + show: ჩვენება + edit: რედაქტირება + revoke: განბლოკვა! + blocks: + display_name: დაბლოკილი მომხმარებელი + creator_name: შემქმნელი + reason: დაბლოკვის მიზეზი + status: სტატუსი + revoker_name: განბლოკილია + showing_page: გვერდი %{page} + next: შემდეგი » + previous: « წინა + notes: + comment: opened_at_html: შეიქმნა %{when} წინ opened_at_by_html: შექმნა %{when} წინ მომხმარებელმა %{user} commented_at_html: განახლდა %{when} წინ @@ -1231,7 +1230,7 @@ ka: comment: კომენტარი context: show_address: მისამართის ჩვენება - redaction: + redactions: edit: description: აღწერა new: diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 133288ef5..f676964f8 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -335,52 +335,6 @@ kab: ago: '%{ago} aya' newer_comments: Iwenniten ineggura older_comments: Iwenniten iqbuṛen - export: - title: Sifeḍ - start: - area_to_export: Tamnaḍt n usifeḍ - manually_select: Fren s ufus tamnadt-nniḍen - format_to_export: Amasal n usifeḍ - osm_xml_data: Isefka XML OpenStreetMap - map_image: Tugna n tkarḍa (ad tesken akalku n tegnut) - embeddable_html: HTML yettwaslaÉ£en - licence: Turagt - export_details: Isefka n OpenStreetMap ffÉ£en-d ddaw n Turaft - Open Data Commons Open Database (ODbL). - too_large: - advice: 'Ma yella asifed ddaw-a yeÉ£li, seqdec ma ulac aÉ£ilif tiÉ£bula yettwabedren - ddaw-a:' - body: Tamnadt-agi hrawet aá¹­as akken ad tettwasifeḍ ar umasal OpenStreetMap - XML SenÉ£es ma ulac aÉ£ilif temÉ£er neÉ£ fren tamnaḍt meẓẓiyen, neÉ£ seqdec yiwen - seg iÉ£bula-agi i usider n isefka s uqettun. - planet: - title: Amtiweg OSM - description: Ad yenÉ£el si sya ar da lqem n taffa n isefka yemmden n OpenStreetMap - overpass: - title: API Overpass - description: Sider akatar-agi amagbar seg temrayt n taffa n isefka OpenStreetMap - geofabrik: - title: Isidar Geofabrik - description: Ad d-yessuffeÉ£ si sya ar da ileqman n imeẓawen, timura akked - timdinin yettwafernen - metro: - title: AsuffeÉ£ n umiá¹­ru - description: AsuffeÉ£ n temdinin tigejdanin n umadal akked lquṛub-nsent - other: - title: IÉ£bula-nniḍen - description: Ibula-nniḍen yettwabedren deug uwiki OpenStreetMap - options: IÉ£ewwaṛen - format: Amasal - scale: Sellum - max: afellay - image_size: TeÉ£zi n tugna - zoom: SemÉ£eṛ - add_marker: Rnu taṛekkizt É£ef tkarḍa - latitude: 'Tarrut:' - longitude: 'Tazegrart:' - output: TuffÉ£a - paste_html: Senteḍ tangalt HTML deg usmel Web - export_button: Sifeḍ geocoder: search: title: @@ -714,90 +668,6 @@ kab: text: Mudd tawsa learn_more: Issin ugar more: Ugar - license_page: - foreign: - title: Ɣef tsuqilt-agi - text: Ma llant tilla gar usebter-agi yettwasiqlen d %{english_original_link},Lqem - n tegllizit ara nawi - english_link: Aneá¹£li s teglizit - native: - title: Ɣef usebter-agi - native_link: Tasuqilt s teqbaylit - mapping_link: Bdu attekki - legal_babble: - title_html: Izerfan n umeskar d turagt - intro_1_html: |- - OpenStreetMap d tagrumma n isefka yeldin, yellan ddaw n turagt Open Data Commons Open Database License (ODbL). - credit_title_html: Amek ara ternuḍ asmad i OpenStreetMap - attribution_example: - alt: AmedÉ£a É£ef wamek ara tettekkiḍ di OpenStreetMap s usebter web - title: Amedya n uttekki - more_title_html: Akken ad tafeḍ ugar n telÉ£ut - contributors_title_html: Iwiziwen-nneÉ£ - contributors_at_html: 'Utric : tegber isefka É£ef Tamdint - n Viyan (ddaw n turagt CC - BY), tamnaḍt - n Vorarlberg akked temnadt n Tyrol (ddaw n turagt CC - BY AT avec amendements).' - contributors_ca_html: 'Canada : yegber isefka n GeoBase®, - GeoGratis (© Agezdu n tiÉ£bula n ugama n Kanada), CanVec - (© Agezdu n tiqbula n ugama n Kanada) et StatCan (Agezdu n tirakalt, - Tidaddanin n Kanada).' - contributors_nl_html: 'Huland : yegber isefka © AND, 2007 (www.and.com).' - welcome_page: - title: Aná¹£uf! - whats_on_the_map: - title: Ayen yellan di tkarḍa - rules: - title: Ilugan! - questions: - title: Asteqsi? - paragraph_1_html: |- - OpenStreetMap tsumur ddeqs n tiÉ£bula ara t-issineḍ ad tesxedmeḍ deg usenfaṛ, akken ad testeqsiḍ neÉ£ ad t-muddeḍ tiririt, udiÉ£ ad tmeslayeḍ neÉ£ ad teÉ£reḍ tasemlit É£ef isental n tira n tkarḍiwin d iseqdacen nniḍen. - Wali afus dagi. - fixthemap: - how_to_help: - title: Amek ara d-muddeḍ afus - join_the_community: - title: Ddu ar tmezdagnut - other_concerns: - title: Uguren-nniḍen - help_page: - title: Awi tallelt - introduction: OpenStreetMap tsumur ddeqs n tiÉ£bula ara t-issineḍ ad tesxedmeḍ - deg usenfaṛ, akken ad testeqsiḍ neÉ£ ad t-muddeḍ tiririt, udiÉ£ ad tmeslayeḍ neÉ£ - ad teÉ£reḍ tasemlit É£ef isental n tira n tkarḍiwin d iseqdacen nniḍen. - welcome: - url: /welcome - title: AnÉ£uf ar OSM - description: Bdu s uminir-agi arurad yettmeslayen É£ef udasil n OpenStreetMap. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: Amnir n ulemad - description: Aminir i yinelmaden imaynuten i t-xeddem tmezdagnut. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Steqsi neÉ£ nadi tiririyin deg usmel akked isteqsiyen n OSM. - mailing_lists: - title: Tabraá¹­á¹­ n tnezwit - forums: - title: Inmagaren - irc: - title: IRC - switch2osm: - title: switch2osm - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: Ar zdat - copyright_html: ©imttekkiyen
        n OpenStreetMap - open_data_title: Isefka ilelliyen - legal_title: Asaḍuf - partners_title: Imendiden notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} yuzen-d awennit ar umagrad n uÉ£mis' @@ -935,12 +805,130 @@ kab: delete: deleted: Izen yettwakkes site: + about: + next: Ar zdat + copyright_html: ©imttekkiyen
        n OpenStreetMap + open_data_title: Isefka ilelliyen + legal_title: Asaḍuf + partners_title: Imendiden + copyright: + foreign: + title: Ɣef tsuqilt-agi + text: Ma llant tilla gar usebter-agi yettwasiqlen d %{english_original_link},Lqem + n tegllizit ara nawi + english_link: Aneṣli s teglizit + native: + title: Ɣef usebter-agi + native_link: Tasuqilt s teqbaylit + mapping_link: Bdu attekki + legal_babble: + title_html: Izerfan n umeskar d turagt + intro_1_html: |- + OpenStreetMap d tagrumma n isefka yeldin, yellan ddaw n turagt Open Data Commons Open Database License (ODbL). + credit_title_html: Amek ara ternuḍ asmad i OpenStreetMap + attribution_example: + alt: Amedɣa ɣef wamek ara tettekkiḍ di OpenStreetMap s usebter web + title: Amedya n uttekki + more_title_html: Akken ad tafeḍ ugar n telɣut + contributors_title_html: Iwiziwen-nneɣ + contributors_at_html: 'Utric : tegber isefka ɣef Tamdint + n Viyan (ddaw n turagt CC + BY), tamnaḍt + n Vorarlberg akked temnadt n Tyrol (ddaw n turagt CC + BY AT avec amendements).' + contributors_ca_html: 'Canada : yegber isefka n GeoBase®, + GeoGratis (© Agezdu n tiɣbula n ugama n Kanada), CanVec + (© Agezdu n tiqbula n ugama n Kanada) et StatCan (Agezdu n tirakalt, + Tidaddanin n Kanada).' + contributors_nl_html: 'Huland : yegber isefka © AND, 2007 (www.and.com).' index: permalink: Aseɣwen yezgan shortlink: Aseɣwen awezlan createnote: Rnu tazmilt edit: user_page_link: asebter n useqdac + export: + title: Sifeḍ + area_to_export: Tamnaḍt n usifeḍ + manually_select: Fren s ufus tamnadt-nniḍen + format_to_export: Amasal n usifeḍ + osm_xml_data: Isefka XML OpenStreetMap + map_image: Tugna n tkarḍa (ad tesken akalku n tegnut) + embeddable_html: HTML yettwaslaɣen + licence: Turagt + export_details: Isefka n OpenStreetMap ffɣen-d ddaw n Turaft + Open Data Commons Open Database (ODbL). + too_large: + advice: 'Ma yella asifed ddaw-a yeɣli, seqdec ma ulac aɣilif tiɣbula yettwabedren + ddaw-a:' + body: Tamnadt-agi hrawet aṭas akken ad tettwasifeḍ ar umasal OpenStreetMap + XML Senɣes ma ulac aɣilif temɣer neɣ fren tamnaḍt meẓẓiyen, neɣ seqdec yiwen + seg iɣbula-agi i usider n isefka s uqettun. + planet: + title: Amtiweg OSM + description: Ad yenɣel si sya ar da lqem n taffa n isefka yemmden n OpenStreetMap + overpass: + title: API Overpass + description: Sider akatar-agi amagbar seg temrayt n taffa n isefka OpenStreetMap + geofabrik: + title: Isidar Geofabrik + description: Ad d-yessuffeɣ si sya ar da ileqman n imeẓawen, timura akked + timdinin yettwafernen + metro: + title: Asuffeɣ n umiṭru + description: Asuffeɣ n temdinin tigejdanin n umadal akked lquṛub-nsent + other: + title: Iɣbula-nniḍen + description: Ibula-nniḍen yettwabedren deug uwiki OpenStreetMap + options: Iɣewwaṛen + format: Amasal + scale: Sellum + max: afellay + image_size: Teɣzi n tugna + zoom: Semɣeṛ + add_marker: Rnu taṛekkizt ɣef tkarḍa + latitude: 'Tarrut:' + longitude: 'Tazegrart:' + output: Tuffɣa + paste_html: Senteḍ tangalt HTML deg usmel Web + export_button: Sifeḍ + fixthemap: + how_to_help: + title: Amek ara d-muddeḍ afus + join_the_community: + title: Ddu ar tmezdagnut + other_concerns: + title: Uguren-nniḍen + help: + title: Awi tallelt + introduction: OpenStreetMap tsumur ddeqs n tiɣbula ara t-issineḍ ad tesxedmeḍ + deg usenfaṛ, akken ad testeqsiḍ neɣ ad t-muddeḍ tiririt, udiɣ ad tmeslayeḍ + neɣ ad teɣreḍ tasemlit ɣef isental n tira n tkarḍiwin d iseqdacen nniḍen. + welcome: + url: /welcome + title: Anɣuf ar OSM + description: Bdu s uminir-agi arurad yettmeslayen ɣef udasil n OpenStreetMap. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: Amnir n ulemad + description: Aminir i yinelmaden imaynuten i t-xeddem tmezdagnut. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Steqsi neɣ nadi tiririyin deg usmel akked isteqsiyen n OSM. + mailing_lists: + title: Tabraṭṭ n tnezwit + forums: + title: Inmagaren + irc: + title: IRC + switch2osm: + title: switch2osm + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: search_results: Igmad n unadi close: Mdel @@ -974,6 +962,17 @@ kab: image: Tugna alt: Aḍris-nniḍen url: Tansa URL + welcome: + title: Anṣuf! + whats_on_the_map: + title: Ayen yellan di tkarḍa + rules: + title: Ilugan! + questions: + title: Asteqsi? + paragraph_1_html: |- + OpenStreetMap tsumur ddeqs n tiɣbula ara t-issineḍ ad tesxedmeḍ deg usenfaṛ, akken ad testeqsiḍ neɣ ad t-muddeḍ tiririt, udiɣ ad tmeslayeḍ neɣ ad teɣreḍ tasemlit ɣef isental n tira n tkarḍiwin d iseqdacen nniḍen. + Wali afus dagi. trace: edit: title: Ẓreg lǧeṛṛa %{name} @@ -1061,7 +1060,7 @@ kab: send ad tizmireḍ ad teskelseḍ asnifel-ik. blocked: Anekcum-ik API yewḥel. Qqen ar ugrudem Web i ugar n isallen. oauth: - oauthorize: + authorize: title: Sireg anekcum ar umiḍan-ik allow_to: 'Sireg asnas amsaɣ i:' allow_read_prefs: ɣeṛ ismenyifen-ik n useqdac. @@ -1072,11 +1071,11 @@ kab: allow_write_gpx: azen lǧerrat GPS allow_write_notes: snifel tizmilin. grant_access: Mudd tasiregt - oauthorize_success: + authorize_success: title: Asuter n tsiregt tettwaqbel allowed: Yessefk ad tmuddeḍ tasiregt ar umiḍan-ik i usnas %{app_name}. verification: Asenqed n tengalt d %{code}. - oauthorize_failure: + authorize_failure: title: Asuter n tsiregt ur yeddi ara denied: Tugwiḍ tasiregt n unekcu ar umiḍan-ik i usnas %{app_name}. invalid: Ajiṭun n tsiregt mačči d ameɣtu. @@ -1358,20 +1357,7 @@ kab: confirm: Sentem revoke: confirm: Sentem - user_block: - partial: - show: Sken - edit: Ẓreg - revoke: Ḥwi! - confirm: Tebɣiḍ? - display_name: Aseqdac iweḥlen - creator_name: Amernay - reason: Taɣzint n usewḥel - status: Addad - revoker_name: Isewḥel-it - showing_page: Asebter %{page} - next: Ar zdat» - previous: « ar deffir + user_blocks: helper: time_future: Ad ifak di %{time}. until_login: D urmid arama yeqqen useqdac @@ -1398,8 +1384,21 @@ kab: reason: 'Taɣzint n usewḥel:' back: Sken akk isewḥal needs_view: Aseqdac-agi yesra ad yeqqen send ad yettwakkes u sewḥel. - note: - description: + block: + show: Sken + edit: Ẓreg + revoke: Ḥwi! + blocks: + display_name: Aseqdac iweḥlen + creator_name: Amernay + reason: Taɣzint n usewḥel + status: Addad + revoker_name: Isewḥel-it + showing_page: Asebter %{page} + next: Ar zdat» + previous: « ar deffir + notes: + comment: opened_at_html: Yattwarna %{when} aya opened_at_by_html: Yettwarna %{when} aya sɣur %{user} commented_at_html: Yettwalqem %{when} aya @@ -1488,7 +1487,7 @@ kab: add_note: Rnu tazmilt dagi show_address: Sken tansa query_features: Suter tiɣawsiwin - redaction: + redactions: edit: description: Aglam new: diff --git a/config/locales/km.yml b/config/locales/km.yml index 63bd46933..452daa276 100644 --- a/config/locales/km.yml +++ b/config/locales/km.yml @@ -87,7 +87,7 @@ km: view_details: មើលព័ត៌មានលម្អិត​ location: ទីតាំង​៖​ changeset: - title: 'សំនុំ​បំលាស់ប្តូរ​: %{id}' + title: សំណុំបន្លាស់ប្ដូរ៖ %{id} belongs_to: អ្នក​បង្កើត node: ខ្នែងចំនួន (%{count}) node_paginated: ខ្នែងចំនួន (%{x}-%{y} ក្នុងចំណោម %{count}) @@ -95,10 +95,11 @@ km: way_paginated: ផ្លូវចំនួន (%{x}-%{y} ក្នុងចំណោម %{count}) relation: ទំនាក់ទំនងចំនួន (%{count}) relation_paginated: ទំនាក់ទំនងចំនួន (%{x}-%{y} ក្នុងចំណោម %{count}) - changesetxml: សំនុំ​បំលាស់ប្តូរ​ XML + changesetxml: សំណុំបន្លាស់ប្ដូរ​ XML feed: - title: សំនុំ​បំលាស់ប្តូរ​ %{id} + title: សំណុំបន្លាស់ប្ដូរ​ %{id} title_comment: សំនុំ​បំលាស់ប្តូរ​ %{id} - %{comment} + join_discussion: កត់ឈ្មោះចូលដើម្បីចូលរួមពិភាក្សា node: title: ខ្នែង៖ %{name} history_title: ប្រវត្តិខ្នែង៖ %{name} @@ -166,9 +167,9 @@ km: comment: មតិយោបល់​ area: តំបន់ list: - title: សំនុំ​បំលាស់ប្តូរ​ + title: សំណុំបន្លាស់ប្ដូរ title_user: សំនុំ​បំលាស់ប្តូរ​ ដោយ %{user} - title_friend: សំណុំបន្លាស់ប្ដូរដោយមិត្តភក្ដិរបស់អ្នក + title_friend: សំណុំបន្លាស់ប្ដូរដោយមិត្តភក្ដិខ្ញុំ title_nearby: សំណុំបន្លាស់ប្ដូរដោយអ្នកប្រើប្រាស់ក្បែរៗអ្នក empty: រកមិនឃើញសំណុំបន្លាស់ប្ដូរ។ empty_area: គ្មានសំណុំបន្លាស់ប្ដូរនៅក្នុងតំបន់នេះទេ។ @@ -180,6 +181,7 @@ km: diary_entry: new: title: ប្រកាសកំណត់ហេតុថ្មី + publish_button: បោះផ្សាយ list: title: កំណត់ហេតុរបស់អ្នកប្រើប្រាស់ title_friends: កំណត់ហេតុរបស់មិត្តភក្ដិ @@ -223,23 +225,6 @@ km: location: ទីតាំង​៖​ view: មើល​ edit: កែប្រែ - export: - start: - area_to_export: ផ្ទៃដើម្បីនាំចេញ​ - licence: អាជ្ញាបណ្ណ - too_large: - planet: - title: Planet OSM - options: ជម្រើស - format: ទម្រង់ - scale: រង្វាស់​ - max: អតិ. - image_size: ទំហំ​រូបភាព​ - zoom: ពង្រីកឬបង្រួម - add_marker: បន្ថែមសញ្ញាសម្គាល់ទៅលើផែនទី - latitude: រយៈទទឹង៖ - longitude: រយៈបណ្ដោយ៖ - export_button: នាំចេញ​ geocoder: search: title: @@ -254,20 +239,24 @@ km: bank: ធនាគារ bar: បារ bbq: BBQ - bench: បង់ - bicycle_parking: កន្លែងចតកង់ - bicycle_rental: កង់ជួល + bench: បង់អង្គុយ + bicycle_parking: កន្លែងចតទោចក្រយាន + bicycle_rental: កន្លែងជួលទោចក្រយាន biergarten: បៀរហ្កាដិន + boat_rental: កន្លែងជួលទូក brothel: ផ្ទះបន bureau_de_change: កន្លែងប្ដូរប្រាក់ bus_station: ចំណតឡានក្រុង cafe: ហាងកាហ្វេ - car_rental: ឡានជួល - car_wash: លាងឡាន - casino: បនល្បែង + car_rental: កន្លែងជួលរថយន្ត + car_sharing: កន្លែងប្រើរថយន្តរួមគ្នា + car_wash: កន្លែងលាងរថយន្ត + casino: កាស៊ីណូ charging_station: ស្ថានីយ៍សាកភ្លើង + childcare: កន្លែងថែទាំកុមារ cinema: រោងកុន clinic: គ្លីនីក + clock: នាឡិកា college: មហាវិទ្យាល័យ community_centre: មណ្ឌលសហគមន៍ courthouse: តុលាការ @@ -277,27 +266,39 @@ km: drinking_water: ទឹកផឹក driving_school: សាលាបង្រៀនបើកបរ embassy: ស្ថានទូត + fast_food: ហាងម្ហូបទាន់ចិត្ត + ferry_terminal: ចំណតសាឡាង fire_station: ស្ថានីយ៍អគ្គីភ័យ food_court: អាហារដ្ឋាន - fountain: ទឺកផុស + fountain: ទឹកផុស fuel: ឥន្ធនៈ + gambling: បនល្បែង grave_yard: វាលផ្នូរខ្មោច + grit_bin: ធុងអំបិល hospital: មន្ទីរពេទ្យ - ice_cream: ការ៉េម + hunting_stand: ខ្ទមអ្នកប្រមាញ់ + ice_cream: ហាងការ៉េម kindergarten: សាលាមតេ្តយ្យ library: បណ្ណាល័យ marketplace: ទីផ្សារ + monastery: ព្រះវិហារ + motorcycle_parking: ចំណត់ទោចក្រយានយន្ត nightclub: ក្លឹបរាត្រី + nursing_home: កន្លែងថែទាំជនចាស់ជរា office: ការិយាល័យ parking: ចំណតរថយន្ត + parking_entrance: ច្រកចូលចំណតរថយន្ត + parking_space: កន្លែងចតរថយន្ត pharmacy: ឱសថស្ថាន place_of_worship: ទីសក្ការបូជា police: នគរបាល - post_box: ប្រអប់ប្រៃសណីយ + post_box: ប្រអប់ប្រៃសណីយ៍ post_office: ប៉ុស្តិ៍ប្រៃសណីយ៍ + preschool: សាលាមតេ្តយ្យ prison: ពន្ធនាគារ - pub: បារ + pub: ហាងស្រា public_building: អាគារសាធារណៈ + recycling: កន្លែងចោលសំរាមអាចប្រើឡើងវិញ restaurant: ភោជនីយដ្ឋាន retirement_home: ផ្ទះចាស់ជរា sauna: សោណា @@ -306,16 +307,22 @@ km: shop: ហាង shower: កន្លែងងូតទឹក social_centre: មណ្ឌលសង្គមកិច្ច + social_club: ក្លឹបសកម្មភាពសង្គម + social_facility: អាគារសាធារណៈ + studio: ស្ទុយឌីយ៉ូ swimming_pool: អាងហែលទឹក - taxi: តាក់ស៊ី + taxi: ចំណតតាក់ស៊ី telephone: ទូរស័ព្ទសាធារណៈ theatre: មហោស្រព toilets: បន្ទប់ទឹក + townhall: សាលាក្រុង university: សាកលវិទ្យាល័យ vending_machine: ម៉ាស៊ីនលក់ veterinary: ពេទ្យសត្វ village_hall: សាលាភូមិ - waste_basket: ធុងសម្រាម + waste_basket: ធុងសំរាម + waste_disposal: កន្លែងប្រមូលសំរាម + water_point: កន្លែងបូមទឹក youth_centre: មណ្ឌលយុវជន boundary: administrative: ព្រំដែនរដ្ឋបាល @@ -323,29 +330,71 @@ km: national_park: ឧទ្យានជាតិ protected_area: តំបន់ការពារ bridge: - swing: ស្ពានយោល + aqueduct: ផ្លូវបង្ហូរទឹក + boardwalk: ផ្លូវឈើ + suspension: ស្ពានយោល + swing: ស្ពានវិល + viaduct: ស្ពានខ្ពស់ "yes": ស្ពាន building: "yes": អាគារ + craft: + brewery: កន្លែងបិតស្រា + carpenter: ហាងជាងឈើ + electrician: ហាងអគ្គីសនី + gardener: ហាងថែទាំសួនច្បារ + painter: ហាងលាបថ្នាំ + photographer: ហាងថតរូប + plumber: ហាងបំពុងទឹក + shoemaker: ហាងស្បែកជើង + tailor: ហាងកាត់ដេរ + "yes": ហាងសិប្បកម្ម emergency: + ambulance_station: ស្ថានីយ៍រថយន្តសង្គ្រោះបន្ទាន់ + assembly_point: កន្លែងជួបជុំគ្នាពេលមានអាសន្ន + defibrillator: ម៉ាស៊ីនកន្ត្រាក់បេះដូង + landing_site: កន្លែងចុះចតពេលមានអាសន្ន phone: ទូរស័ព្ទសង្រ្គោះបន្ទាន់ + water_tank: ធុងស្ដុកទឹកពេលមានអាសន្ន highway: + abandoned: ផ្លូវល្បឿនលឿនបោះបង់ចោល bridleway: ផ្លូវសេះ + bus_stop: ចំណតឡានក្រុង + construction: ផ្លូវល្បឿនលឿនកំពុងស្ថាបនា + cycleway: ផ្លូវទោចក្រយាន + elevator: ជណ្ដើរយោង + footway: ផ្លូវថ្មើរជើង + ford: ផ្លូវលិចទឹក + give_way: ផ្លាកសញ្ញាផ្ដល់អាទិភាព + motorway: ផ្លូវល្បឿនលឿន + motorway_link: ផ្លូវល្បឿនលឿន rest_area: កន្លែងសម្រាក road: ផ្លូវ + stop: ផ្លាកសញ្ញាឈប់ street_lamp: ភ្លើងបំភ្លឺផ្លូវ + traffic_signals: ភ្លើងសញ្ញាចរាចរណ៍ historic: archaeological_site: ស្ថានីយ៍ប្រវត្តិសាស្ត្រ battlefield: សមរភូមិ boundary_stone: បង្គោលព្រំដែន - building: អាគារ + building: អាគារប្រវត្តិសាស្ត្រ + bunker: ត្រង់សេ castle: ប្រាសាទ church: វិហារគ្រិស្តសាសនា + city_gate: ក្លោងទ្វារក្រុង + citywalls: កំផែងក្រុង fort: បន្ទាយ + heritage: ស្ថនីយ៍បេតិកភ័ណ្ឌ house: ផ្ទះ + mine: ភ្នំរ៉ែ + mine_shaft: អណ្ដូងរ៉ែ tomb: ផ្នូរ tower: ប៉ម + "yes": ស្ថានីយ៍ប្រវត្តិសាស្ត្រ landuse: + commercial: តំបន់ពាណិជ្ជកម្ម + conservation: តំបន់អភិរក្ស + construction: តំបន់កំពុងសាងសង់ farm: កសិដ្ឋាន​ farmland: ដីកសិដ្ឋាន farmyard: វាលកសិដ្ឋាន @@ -353,20 +402,24 @@ km: grass: វាលស្មៅ industrial: តំបន់ឧស្សាហកម្ម military: តំបន់យោធា + mine: ភ្នំរ៉ែ quarry: កន្លែងយកថ្ម railway: ផ្លូវដែក recreation_ground: ទីលានកំសាន្ត reservoir: បឹងស្តុកទឹក residential: តំបន់លំនៅដ្ឋាន + retail: ហាងលក់រាយ road: តំបន់ផ្លូវ vineyard: ចំការទំពាំងបាយជូរ leisure: beach_resort: ឆ្នេរកំសាន្ត common: ដីរួម fishing: តំបន់ស្ទូចត្រី - fitness_station: ស្ថានីយ៍កីឡា + fitness_centre: មណ្ឌលហាត់ប្រាណ + fitness_station: ស្ថានីយ៍ហាត់ប្រាណ garden: សួនច្បារ golf_course: ទីលានកូនហ្គោល + horse_riding: កន្លែងជិះសេះ ice_rink: តារាងលេងស្គីលើទឹកកក nature_reserve: តំបន់អភិរក្សធម្មជាតិ park: ឧទ្យាន​ @@ -382,6 +435,7 @@ km: natural: bay: ឆកសមុទ្រ beach: ឆ្នេរខ្សាច់ + cape: ជ្រោយ cave_entrance: ច្រកចូលរូងភ្នំ cliff: ជ្រោះ crater: មាត់ភ្នំភ្លើង @@ -402,11 +456,14 @@ km: office: accountant: គណនីករ architect: ស្ថាបត្យករ + association: សមាគម company: ក្រុមហ៊ុន + educational_institution: ស្ថាប័នអប់រំ employment_agency: ភ្នាក់ងារណែនាំការងារ estate_agent: ភ្នាក់ងារអចលនវត្ថុ government: ការិយាល័យរដ្ឋាភិបាល insurance: ការិយាល័យធានារ៉ាប់រង + it: ការិយាល័យព័តមានវិទ្យា lawyer: មេធាវី ngo: ការិយាល័យ NGO telecommunication: ការិយាល័យទូរគមនាគមន៍ @@ -414,7 +471,9 @@ km: "yes": ការិយាល័យ place: city: ទីក្រុង - county: ប្រទេស + country: ប្រទេស​ + county: ខេត្តក្រុង + farm: កសិដ្ឋាន​ house: ផ្ទះ houses: ផ្ទះ island: កោះ @@ -427,9 +486,17 @@ km: abandoned: ផ្លូវដែកបោះបង់ចោល construction: ផ្លូវដែកកំពុងស្ថាបនា disused: ផ្លូវដែកឈប់ប្រើ + level_crossing: ផ្លូវកាត់ផ្លូវដែក + light_rail: ផ្លូវដែកធុនស្រាល + miniature: ផ្លូវដែកខ្នាតតូច + preserved: ផ្លូវដែកអភិរក្ស + proposed: ផ្លូវដែកគម្រោងសង់ + spur: ផ្លូវខ្នែងផ្លូវដែក station: ស្ថានីយ៍ផ្លូវដែក - subway: ស្ថានីយ៍រថភ្លើងក្រោមដី + stop: ស្ថានីយ៍ផ្លូវដែក + subway: ផ្លូវដែកក្រោមដី subway_entrance: ច្រកចូលស្ថានីយ៍រថភ្លើងក្រោមដី + switch: ផ្លូវបំបែកផ្លូវដែក shop: antiques: ហាងវត្ថុបុរាណ art: ហាងសិល្បៈ @@ -437,27 +504,65 @@ km: beauty: ហាងសម្អាងការ beverages: ហាងភេសជ្ជៈ bicycle: ហាងទោចក្រយាន + bookmaker: ហាងភ្នាល់ books: បណ្ណាគារ + boutique: ហាងសម្អាងការ butcher: ហាងសាច់ - car: ហាងឡាន - car_parts: ហាងគ្រឿងបន្លាស់ឡាន - car_repair: ហាងជួសជុលឡាន + car: ហាងរថយន្ត + car_parts: ហាងគ្រឿងបន្លាស់រថយន្ត + car_repair: ហាងជួសជុលរថយន្ត carpet: ហាងកម្រាលព្រំ + charity: ហាងសប្បុរសធម៌ + chemist: ហាងថ្នាំ + clothes: ហាងសម្លៀកបំពាក់ + computer: ហាងកុំព្យូទ័រ + confectionery: ហាងនំ + copyshop: ហាងថតចម្លង + cosmetics: ហាងគ្រឿងសម្អាង + dry_cleaning: ហាងបោកអ៊ុត + electronics: ហាងអេឡិចត្រូនិច + estate_agent: ភ្នាក់ងារអចលនវត្ថុ + fish: ហាងត្រី + florist: ហាងផ្កា + food: ហាងអាហារ + furniture: ហាងសង្ហារឹម + gallery: វិចិត្រសាល + gift: ហាងវត្ថុអនុស្សាវរីយ៍ + greengrocer: ហាងបន្លែនិងផ្លែឈើ + hairdresser: ហាងកាត់សក់និងអ៊ុតសក់ + jewelry: ហាងលក់គ្រឿងអល័ង្ការ + laundry: ហាងបោកអ៊ុត + massage: ហាងម៉ាស្សា + mobile_phone: ហាងទូរស័ព្ទ + motorcycle: ហាងទោចក្រយានយន្ត + music: ហាងតន្ត្រី + newsagent: ហាងកាសែត + optician: ហាងវ៉ែនតា + tourism: + camp_site: កន្លែងបោះតង់ + caravan_site: កន្លែងចតឡានបោះតង់ description: types: cities: ក្រុង​ layouts: - logout: ចាកចេញ​ - log_in: ឡុកអ៊ីន​ - sign_up: ចុះឈ្មោះ​ + logout: កត់ឈ្មោះចេញ + log_in: កត់ឈ្មោះចូល + log_in_tooltip: កត់ឈ្មោះចូលជាមួយគណនីមានហើយ + sign_up: ចុះឈ្មោះ​ចូល edit: កែប្រែ​ history: ប្រវត្តិ​ export: នាំចេញ​ tag_line: |- ផែនទីពិភពលោក​វិគីសេរី
        (The Free Wiki World Map) + help: ជំនួយ + about: អំពី + copyright: រក្សាសិទ្ឋ + community: សហគមន៍ make_a_donation: text: ជួយ​ឧបត្ថម្ភ​ + learn_more: ស្វែងយល់បន្ថែម + more: ផ្សេងទៀត notifier: diary_comment_notification: hi: សួស្ដី %{to_user}, @@ -502,9 +607,28 @@ km: date: កាលបរិច្ឆេទ​ to: ទៅ​ site: + copyright: + foreign: + title: អំពីការបកប្រែនេះ edit: not_public: អ្នកមិនបានកំណត់​កំណែប្រែរបស់អ្នកជាសាធារណៈ​។ user_page_link: ទំព័រអ្នកប្រើប្រាស់​ + export: + area_to_export: ផ្ទៃដើម្បីនាំចេញ​ + licence: អាជ្ញាបណ្ណ + too_large: + planet: + title: Planet OSM + options: ជម្រើស + format: ទម្រង់ + scale: រង្វាស់​ + max: អតិ. + image_size: ទំហំ​រូបភាព​ + zoom: ពង្រីកចូលឬបង្រួមចេញ + add_marker: បន្ថែមសញ្ញាសម្គាល់ទៅលើផែនទី + latitude: រយៈទទឹង៖ + longitude: រយៈបណ្ដោយ៖ + export_button: នាំចេញ​ sidebar: search_results: លទ្ធផលនៃការស្វែងរក​ close: បិទ​ @@ -515,6 +639,16 @@ km: key: table: entry: + motorway: ផ្លូវល្បឿនលឿន + main_road: ផ្លូវធំ + cycleway: ផ្លូវទោចក្រយាន + cycleway_national: ផ្លូវទោចក្រយានជាតិ + cycleway_local: ផ្លូវទោចក្រយានតំបន់ + rail: ផ្លូវដែក + subway: ផ្លូវដែកក្រោមដី + tram: + - ផ្លូវដែកធុនស្រាល + admin: ព្រំដែនរដ្ឋបាល forest: ព្រៃឈើ​ park: ឧទ្យាន​ industrial: តំបន់ឧស្សាហកម្ម​ @@ -523,7 +657,7 @@ km: school: - សាលារៀន​ - សាកលវិទ្យាល័យ​ - station: ស្ថានីយរថភ្លើង​ + station: ស្ថានីយ៍ផ្លូវដែក trace: edit: filename: ឈ្មោះឯកសារ​៖ @@ -533,7 +667,7 @@ km: edit: កែប្រែ​ description: បរិយាយ​៖ tags: ស្លាក​៖ - save_button: រក្សាទុក​បំលាស់ប្តូរនានា​ + save_button: រក្សាទុក​បន្លាស់ប្តូរនានា​ visibility_help: តើនេះមានន័យ​ដូចម្ដេច​​? trace_form: upload_gpx: ផ្ទុកឡើង​ឯកសារ GPX ៖ @@ -578,15 +712,44 @@ km: allow_write_api: កែសម្រួលផែនទី​ user: login: - title: ឡុកអ៊ីន​ - heading: ឡុកអ៊ីន​ + title: កត់ឈ្មោះចូល + heading: កត់ឈ្មោះចូល email or username: អាសយដ្ឋានអ៊ីមែល ឬឈ្មោះអ្នកប្រើប្រាស់​៖ - login_button: ឡុកអ៊ីន​ + login_button: កត់ឈ្មោះចូល + auth_providers: + openid: + title: កត់ឈ្មោះចូលដោយប្រើ OpenID + google: + title: កត់ឈ្មោះចូលដោយប្រើ Google + facebook: + title: កត់ឈ្មោះចូលដោយប្រើ Facebook + windowslive: + title: កត់ឈ្មោះចូលដោយប្រើ Windows Live + github: + title: កត់ឈ្មោះចូលដោយប្រើ GitHub + wikipedia: + title: កត់ឈ្មោះចូលដោយប្រើវិគីភីឌា + yahoo: + title: កត់ឈ្មោះចូលដោយប្រើ Yahoo + wordpress: + title: កត់ឈ្មោះចូលដោយប្រើ Wordpress + aol: + title: កត់ឈ្មោះចូលដោយប្រើ AOL + logout: + title: កត់ឈ្មោះចេញ + logout_button: កត់ឈ្មោះចេញ new: - continue: ចុះឈ្មោះ + title: ចុះឈ្មោះ​ចូល + use external auth: ប្រើភ្នាក់ងារទី៣ដើម្បីកត់ឈ្មោះចូល + continue: ចុះឈ្មោះចូល terms: agree: យល់​ព្រម​ decline: បដិសេធ + legale_select: ប្រទេស​ស្នាក់​នៅ៖ + legale_names: + france: ប្រទេសបារាំង + italy: ប្រទេសអ៊ីតាលី + rest_of_world: ប្រទេសផ្សេងទៀត view: my edits: កំណែប្រែ​របស់ខ្ញុំ​ edits: កំណែប្រែ​ @@ -594,8 +757,8 @@ km: add as friend: បន្ថែមជាមិត្ត​ description: បរិយាយ​ no friends: អ្នកមិនទាន់បានបន្ថែមមិត្តណាមួយនៅឡើយទេ​។ - km away: មានចំងាយ %{count} គ.ម. - m away: មានចំងាយ %{count} ម. + km away: ចម្ងាយ %{count} គ.ម. + m away: ចម្ងាយ %{count} ម. account: title: កែប្រែគណនី​ public editing: @@ -611,14 +774,42 @@ km: heading: បញ្ជាក់ការផ្លាស់ប្ដូរ​អាសយដ្ឋានអ៊ីមែល press confirm button: ចុចលើប៉ូតុងខាងក្រោមដើម្បីបញ្ជាក់អាសយដ្ឋានអ៊ីមែលថ្មីរបស់អ្នក​។ button: បញ្ជាក់​ - success: បានបញ្ជាក់អាសយដ្ឋានអ៊ីមែលរបស់អ្នករូចរាល់ហើយ សូមអរគុណចំពោះការចុះឈ្មោះ​! + success: បានបញ្ជាក់អាសយដ្ឋានអ៊ីមែលរបស់អ្នករូចរាល់ហើយ! make_friend: success: '%{name} ឥឡូវនេះជាមិត្តរបស់អ្នក​។' failed: អភ័យទោស, បរាជ័យក្នុងការបន្ដែម %{name} ជាមិត្ត​។ already_a_friend: អ្នកគឺជាមិត្តជាមួយ %{name} រួចហើយ​។ remove_friend: not_a_friend: '%{name} មិនមែនជាមិត្តរបស់អ្នកទេ​។' - redaction: + javascripts: + embed: + report_problem: រាយការណ៍​បញ្ហា + key: + title: កំណត់សម្គាល់ + tooltip: កំណត់សម្គាល់ + tooltip_disabled: ស្រទាប់នេះគ្មានកំណត់សម្គាល់ទេ + map: + zoom: + in: ពង្រីកចូល + out: បង្រួមចេញ + locate: + title: បង្ហាញទីតាំងខ្ញុំ + popup: អ្នកកំពុងស្ថិតនៅចម្ងាយ {distance} {unit} ពីចំនុចនេះ + base: + standard: ស្តង់ដារ + cycle_map: ផែនទីផ្លូវទោចក្រយាន + transport_map: ផែនទីចរាចរណ៍ + hot: សកម្មភាពមនុស្សធម៌ + layers: + header: ស្រទាប់ផែនទី + title: ស្រទាប់ + site: + edit_disabled_tooltip: ពង្រីកចូលដើម្បីកែប្រែផែនទី + createnote_disabled_tooltip: ពង្រីកចូលដើម្បីបន្ថែមចំណារទៅលើផែនទី + map_data_zoom_in_tooltip: ពង្រីកចូលដើម្បីមើលទិន្នន័យផែនទី + context: + show_address: បង្ហាញអាសយដ្ឋាន + redactions: show: description: បរិយាយ៖ ... diff --git a/config/locales/kn.yml b/config/locales/kn.yml index 90074c6d7..e2e884c14 100644 --- a/config/locales/kn.yml +++ b/config/locales/kn.yml @@ -276,16 +276,6 @@ kn: comment: ಟಿಪ್ಪಣಿ newer_comments: ಹೊಸ ಟಿಪ್ಪಣಿಗಳು older_comments: ಹಳೆ ಟಿಪ್ಪಣಿಗಳು - export: - title: ರಫ್ತು ಮಾಡು - start: - licence: ಪರವಾನಗಿ - options: ಆಯ್ಕೆಗಳು - scale: ಮಾಪಕ - latitude: 'ಅಕ್ಷಾಂಶ:' - longitude: 'ರೇಖಾಂಶ:' - output: ಔಟ್‌ಪುಟ್ - export_button: ರಫ್ತು ಮಾಡು geocoder: search_osm_nominatim: prefix: @@ -497,48 +487,6 @@ kn: text: ದೇಣಿಗೆ ನೀಡಿ learn_more: ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ more: ಇನ್ನಷ್ಟು - license_page: - foreign: - title: ಈ ಅನುವಾದದ ಬಗ್ಗೆ - english_link: ಆಂಗ್ಲದ ಮೂಲ - native: - title: ಈ ಪುಟದ ಬಗ್ಗೆ - mapping_link: ನಕ್ಷೆಯನ್ನು ಸಂಪಾದಿಸಿಲು ಪ್ರಾರಂಭಿಸಿ - legal_babble: - title_html: ಕೃತಿಸ್ವಾಮ್ಯ ಮತ್ತು ಪರವಾನಗಿ - welcome_page: - title: ಸುಸ್ವಾಗತ! - whats_on_the_map: - title: ನಕ್ಷೆಯ ಮೇಲೆನಿದೆ - questions: - title: ಏನಾದರು ಪ್ರಶ್ನೆಗಳಿವೆಯೇ? - start_mapping: ನಕ್ಷೆಯನ್ನು ಸಂಪಾದಿಸಿಲು ಪ್ರಾರಂಭಿಸಿ - add_a_note: - title: ನಕ್ಷೆಯನ್ನು ಸಂಪಾದಿಸಿಲು ಸಮಯವಿಲ್ಲವೇ? ಟಿಪ್ಪಣಿಯನ್ನು ಸೇರಿಸಿರಿ! - fixthemap: - title: ಸಮಸ್ಯೆಯನ್ನು ವರದಿ ಮಾಡಿ / ನಕ್ಷೆಯನ್ನು ಸರಿಪಡಿಸಿ - how_to_help: - title: ಸಹಾಯ ಮಾಡುವುದು ಹೇಗೆ - join_the_community: - title: ಸಮುದಾಯವನ್ನು ಸೇರಿ - other_concerns: - title: ಇತರೆ ಕಳಕಳಿಗಳು - help_page: - title: ಸಹಾಯವನ್ನು ಪಡೆವುದು - welcome: - url: /welcome - title: ಒಎಸ್ಎಂಗೆ ಸುಸ್ವಾಗತ - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - irc: - title: ಐ ಆರ್ ಸಿ - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: ಮುಂದಿನ - open_data_title: ಮುಕ್ತ ದತ್ತಾಂಶ notifier: diary_comment_notification: hi: ನಮಸ್ತೆ %{to_user} @@ -594,6 +542,48 @@ kn: delete: deleted: ಸಂದೇಶವನ್ನು ಅಳಿಸಿ ಹಾಕಲಾಗಿದೆ site: + about: + next: ಮುಂದಿನ + open_data_title: ಮುಕ್ತ ದತ್ತಾಂಶ + copyright: + foreign: + title: ಈ ಅನುವಾದದ ಬಗ್ಗೆ + english_link: ಆಂಗ್ಲದ ಮೂಲ + native: + title: ಈ ಪುಟದ ಬಗ್ಗೆ + mapping_link: ನಕ್ಷೆಯನ್ನು ಸಂಪಾದಿಸಿಲು ಪ್ರಾರಂಭಿಸಿ + legal_babble: + title_html: ಕೃತಿಸ್ವಾಮ್ಯ ಮತ್ತು ಪರವಾನಗಿ + export: + title: ರಫ್ತು ಮಾಡು + licence: ಪರವಾನಗಿ + options: ಆಯ್ಕೆಗಳು + scale: ಮಾಪಕ + latitude: 'ಅಕ್ಷಾಂಶ:' + longitude: 'ರೇಖಾಂಶ:' + output: ಔಟ್‌ಪುಟ್ + export_button: ರಫ್ತು ಮಾಡು + fixthemap: + title: ಸಮಸ್ಯೆಯನ್ನು ವರದಿ ಮಾಡಿ / ನಕ್ಷೆಯನ್ನು ಸರಿಪಡಿಸಿ + how_to_help: + title: ಸಹಾಯ ಮಾಡುವುದು ಹೇಗೆ + join_the_community: + title: ಸಮುದಾಯವನ್ನು ಸೇರಿ + other_concerns: + title: ಇತರೆ ಕಳಕಳಿಗಳು + help: + title: ಸಹಾಯವನ್ನು ಪಡೆವುದು + welcome: + url: /welcome + title: ಒಎಸ್ಎಂಗೆ ಸುಸ್ವಾಗತ + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + irc: + title: ಐ ಆರ್ ಸಿ + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: close: ಮುಚ್ಚಿ search: @@ -626,6 +616,15 @@ kn: heading: ತಲೆಬರಹ subheading: ಉಪ ಶಿರೋನಾಮೆ image: ಚಿತ್ರ + welcome: + title: ಸುಸ್ವಾಗತ! + whats_on_the_map: + title: ನಕ್ಷೆಯ ಮೇಲೆನಿದೆ + questions: + title: ಏನಾದರು ಪ್ರಶ್ನೆಗಳಿವೆಯೇ? + start_mapping: ನಕ್ಷೆಯನ್ನು ಸಂಪಾದಿಸಿಲು ಪ್ರಾರಂಭಿಸಿ + add_a_note: + title: ನಕ್ಷೆಯನ್ನು ಸಂಪಾದಿಸಿಲು ಸಮಯವಿಲ್ಲವೇ? ಟಿಪ್ಪಣಿಯನ್ನು ಸೇರಿಸಿರಿ! trace: edit: filename: 'ಕಡತದ ಹೆಸರು:' @@ -653,10 +652,10 @@ kn: legale_names: france: ಫ಼್ರಾನ್ಸ್ italy: ಇಟಲಿ - user_block: + user_blocks: show: created: ಸೃಷ್ಟಿಸಲ್ಪಟ್ಟಿದೆ - note: + notes: rss: description_area: '[(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})] ನಿಮ್ಮ ಸ್ಥಳದಲ್ಲಿ ಮುಗಿಸಿದ ಅಥವಾ ವರದಿಮಾಡಿದ, ಟಿಪ್ಪಣಿಗಳ ಪಟ್ಟಿ' diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 4a606abd8..55d0a4df6 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -285,7 +285,7 @@ ko: user_title: '%{user}의 일기' in_language_title: '%{language}의 일기 항목' new: 새 일기 항목 - new_title: 사용자 일기에 새 항목 작성 + new_title: 내 사용자 일기에 새 항목 작성 no_entries: 일기 항목이 없습니다 recent_entries: 최근 일기 항목 older_entries: 이전 항목 @@ -349,49 +349,6 @@ ko: ago: '%{ago} 전' newer_comments: 새 댓글 older_comments: 이전 댓글 - export: - title: 내보내기 - start: - area_to_export: 지역 내보내기 - manually_select: 수동으로 다른 지역 선택 - format_to_export: 내보내기 형식 - osm_xml_data: OpenStreetMap XML 데이터 - map_image: 지도 그림 (표준 레이어 보이기) - embeddable_html: 내장된 HTML - licence: 라이선스 - export_details: OpenStreetMap 데이터는 오픈 - 데이터 커먼즈 오픈 데이터베이스 라이선스(ODbL)에 따라 사용할 수 있습니다. - too_large: - advice: '위의 내보내기가 실패하면, 아래에 나열된 원본 중 하나를 사용하는 것을 고려해주세요:' - body: 이 지역은 OpenStreetMap XML 데이터로 내보내는 데 너무 넓습니다. 확대하거나 작은 지역을 선택하거나, 대량 - 데이터 다운로드에 대한 아래에 나열된 자료 중 하나를 사용하세요. - planet: - title: 플래닛 OSM - description: 완전한 OpenStreetMap 데이터베이스가 정기적으로 업데이트되는 복사본 - overpass: - title: Overpass API - description: OpenStreetMap 데이터베이스의 미러에서 이 테두리 상자를 다운로드 - geofabrik: - title: Geofabrik 다운로드 - description: 대륙, 국가 및 선택한 도시가 정기적으로 업데이트되는 추출본 - metro: - title: 대도시 추출본 - description: 세계 주요 도시와 ê·¸ 주변 지역에 대한 추출본 - other: - title: 다른 원본 - description: OpenStreetMap 위키에 나와있는 추가 원본 - options: 옵션 - format: 형식 - scale: 축척 - max: 최대 - image_size: 그림 크기 - zoom: 확대/축소 - add_marker: 지도에 표시 추가 - latitude: '위도:' - longitude: '경도:' - output: 출력 - paste_html: HTML을 붙여 넣어 웹사이트에 포함시키세요 - export_button: 내보내기 geocoder: search: title: @@ -416,6 +373,7 @@ ko: apron: 에이프런 gate: 문 helipad: 헬기 착륙장 + parking_position: 주차 위치 runway: 활주로 taxiway: 유도로 terminal: 터미널 @@ -474,6 +432,7 @@ ko: office: 사옥 parking: 주차장 parking_entrance: 주차장 입구 + parking_space: 주차 공간 pharmacy: 약국 place_of_worship: 예배당 police: 경찰서 @@ -597,6 +556,7 @@ ko: manor: 장원 memorial: 기념비 mine: 광산 + mine_shaft: 탄갱 monument: 기념물 roman_road: 로마 도로 ruins: 폐허 @@ -869,6 +829,8 @@ ko: stationery: 문구점 supermarket: 수퍼마켓 tailor: 양복점 + ticket: 매표소 + tobacco: 담배 가게 toys: 완구점 travel_agency: 여행사 tyres: 타이어 상점 @@ -983,250 +945,6 @@ ko: text: 기부하기 learn_more: 더 알아보기 more: 더 보기 - license_page: - foreign: - title: 이 번역에 대한 정보 - text: 이 번역한 문서와 %{english_original_link} 사이에 상충하는 경우 영어 문서가 우선합니다 - english_link: 영어 원본 - native: - title: 이 문서에 대한 정보 - text: 저작권 문서의 영어 버전을 ë³´ê³  있습니다. 이 문서의 %{native_link}으로 돌아갈 수 있으며 또는 저작권을 읽는 것을 - 멈추고 %{mapping_link}할 수 있습니다. - native_link: 한국어 버전 - mapping_link: 매핑을 시작 - legal_babble: - title_html: 저작권 및 라이선스 - intro_1_html: |- - OpenStreetMap®ì€ 오픈 데이터로 OpenStreetMap 재단 (OSMF)의 오픈 데이터 - 커먼즈 오픈 데이터베이스 라이선스(ODbL)에 따라 사용할 수 있습니다. - intro_2_html: |- - OpenStreetMap 기여자를 명시하는 한, OpenStreetMap 데이터를 자유롭게 복사, 배포, 전송 및 적용할 수 있습니다. - 데이터를 바꾸거나 데이터에 기초로 할 때는 오로지 - 같은 라이선스에 따라서만 결과를 배포할 수 있습니다. - 전문은 - 당신의 권리와 책임을 설명합니다. - intro_3_html: |- - 지도 타일의 지도 제작과 설명문서는 - 크리에이티브 - 커먼즈 저작자표시-동일조건변경허락 2.0 라이선스(CC BY-SA)에 따라 사용할 수 있습니다. - credit_title_html: OpenStreetMap 제작진 넣는 방법 - credit_1_html: '“© OpenStreetMap 기여자”를 저작자로 사용해야 합니다.' - credit_2_html: |- - 또한 명확하게 데이터는 오픈 데이터베이스 라이선스에 따라 사용할 수 있으며, - 지도 제작은 지도 타일을 사용할 때에 CC-BY-SA로 허가합니다. - 이 저작권 문서로 - 링크하여 이렇게 할 수 있습니다. - 또한 데이터 형식으로 OSM을 배포할 때는 라이선스 이름과 - 라이선스에 직접 링크를 할 수 있습니다. 링크할 수 없는 - 매체(예를 들어 인쇄 작업)에서는 opendatacommons.org와 - openstreetmap.org('OpenStreetMap'을 전체 주소로 확장)로 - 독자에 직접 알려주세요. 관련 있다면 creativecommons.org로 알려주세요. - credit_3_html: |- - 찾아볼 수 있는 전자 지도에 대해서는 제작진은 지도의 모서리에 보여야만 합니다. - 예를 들어: - attribution_example: - alt: 웹페이지에 OpenStreetMap에 표시하는 방법의 예 - title: 권리 표시 예 - more_title_html: 자세히 찾기 - more_1_html: |- - 데이터를 사용하는 방법과 제작진을 표시하는 방법에 대해서는 OSMF 라이선스 문서 - 를 자세히 읽으세요. - more_2_html: |- - OpenStreetMap은 오픈 데이터이지만 타사 개발자를 위한 - 지도 API는 무료로 제공할 수 없습니다. - API 사용 정책, - 타일 사용 정책과 - Nominatim(이름) 사용 정책를 참조하세요. - contributors_title_html: 우리의 기여자 - contributors_intro_html: |- - 우리의 기여자는 수천 명입니다. 또한 국립지도 제작 기관과 - 같은 다른 소스의 공개 라이선스의 데이터를 포함하고 있습니다: - contributors_at_html: |- - 오스트리아: Stadt Wien - (CC BY에 따름), - Land Vorarlberg와 - Land Tirol (개정된 CC-BY AT에 따름)에서의 - 데이터를 포함합니다. - contributors_ca_html: |- - 캐나다: GeoBase®, GeoGratis - (© 캐나다 천연자원부), - CanVec (© 캐나다 - 천연자원부)ê³¼ StatCan (캐나다 연방통계청, - 지리부)에서의 데이터를 포함합니다. - contributors_fi_html: |- - 핀란드: NLSFI 라이선스에 따른, - National Land Survey of Finland's Topographic Database와 - 다른 데이터집합에서의 데이터를 포함합니다. - contributors_fr_html: |- - 프랑스: Direction Générale des Impôts에서의 - 데이터를 포함합니다. - contributors_nl_html: |- - 네덜란드: © AND 데이터, 2007년 - (www.and.com)을 포함합니다. - contributors_nz_html: |- - 뉴질랜드: Land Information New Zealand에서의 - 데이터를 포함합니다. Crown이 저작권을 소유합니다. - contributors_si_html: |- - 슬로베니아: Surveying and Mapping Authority와 - Ministry of Agriculture, Forestry and Food - (슬로베니아의 공개 정보)에서의 데이터를 포함합니다. - contributors_za_html: |- - 남아프리카 공화국: Chief Directorate: - National Geo-Spatial Information에서의 데이터를 - 포함합니다. State가 저작권을 소유합니다. - contributors_gb_html: |- - 영국: 육지 측량 데이터 - © Crown 저작권 및 데이터베이스 권리 - 2010-12를 포함합니다. - contributors_footer_1_html: |- - 자세한 내용과 OpenStreetMap을 개선하는 데 도움이 되는 데 사용한 - 기타 자료에 대해서는 OpenStreetMap 위키에 있는 기여자 문서 - 를 참조하세요. - contributors_footer_2_html: |- - OpenStreetMap에 포함된 데이터는 원래 데이터 제공자가 - OpenStreetMap을 보증하거나 어떠한 보증도 제공하거나 - 어떠한 책임도 진다는 것을 의미하지 않습니다. - infringement_title_html: 저작권 침해 - infringement_1_html: |- - OSM 기여자는 저작권 소유자로부터 명시적 허가 없이 - 저작권이 있는 자료(예를 들어 Google 지도 또는 인쇄된 지도)에서 - 데이터를 반입하지 않도록 주의하여야 합니다. - infringement_2_html: |- - 저작권을 가진 자료가 부적절하게 OpenStreetMap 데이터베이스나 이 사이트에 - 추가되었다고 생각하면 게시 - 중단 절차를 참고하거나 온라인 - 신고 페이지에서 직접 제출하세요. - trademarks_title_html: 등록 상표 - trademarks_1_html: OpenStreetMap, 돋보기 로고, 스테이트 오브 맵은 OpenStreetMap 재단의 등록상표입니다. - 상표의 사용에 대해 의문이 있는 경우, 관련된 질문을 라이선싱 - 작업 그룹으로 보내 주세요. - welcome_page: - title: 환영합니다! - introduction_html: |- - 세계의 자유롭고 편집할 수 있는 지도인, OpenStreetMap에 오신 것을 환영합니다. 지금 가입하면, - 시작된 매핑을 얻도록 모두 설정됩니다. 여기에서 알아야 하는 가장 중요한 것들로 된 - 빠른 가이드가 있습니다. - whats_on_the_map: - title: 지도는 무엇입니까 - on_html: |- - OpenStreetMap은 현실과 현재를 전부 매핑하기 위한 장소입니다 - - 장소에 대한 건물, 도로, 그리고 그밖의 자세한 수백만 가지 정보를 포함합니다. 흥미있는 - 현실 세계 지물은 무엇이든 매핑할 수 있습니다. - off_html: |- - 장소에 대한 평가, 역사에 관한 것이나 추측에 의한 정보, 그리고 저작권이 있는 정보처럼 - 독단적인 데이터는 들어갈 수 없습니다. 특별히 허용받지 않으셨다면 - 온라인 지도나 종이 지도에서 복사해오지 마십시오. - basic_terms: - title: 매핑하는데 필요한 기본 용어 - paragraph_1_html: OpenStreetMap에서는 자체 용어가 몇 가지 사용됩니다. 여기에 편리하게 사용할 수 있는 몇 가지 - 핵심 단어가 있습니다. - editor_html: 편집기는 지도를 편집하는 데 사용할 수 있는 프로그램이나 웹사이트입니다. - node_html: 노드는 지도상의 어느 한 지점으로, 음식점 한 곳이나 나무 한 그루 같은 것을 말합니다. - way_html: 길은 지도상의 선이나 구역을 말하며, 도로, 개울, 호수나 건물을 나타냅니다. - tag_html: 태그는 노드나 길을 보충하는 데이터로, 음식점의 이름이나 도로의 속도 제한 같은 것을 말합니다. - rules: - title: 여기서 규칙! - paragraph_1_html: "OpenStreetMap은 몇 가지 형식적인 규칙이 있지만 우리는 모든 참가자가 협력하고, 공동체와 소통하기를 - 바랍니다.\n여러분이 직접 편집하지 않는 다른 활동을 고려한다면, \n가져오기와 - \n자동화된 - 편집에서의\n다음 가이드라인을 읽고 따라주시기 바랍니다." - questions: - title: 질문 있나요? - paragraph_1_html: |- - OpenStreetMap은 프로젝트에 대해 배우고, 질문을 묻고 답하고, - 매핑 주제를 협력하여 토론하고 문서하기 위한 여러 자료가 있습니다. - 여기서 도움을 얻으세요. - start_mapping: 매핑 시작 - add_a_note: - title: 편집할 시간이 없습니까? 참고를 추가하세요! - paragraph_1_html: |- - 그냥 한 가지 간단한 것이 ê³ ì¹  게 있다거나 가입하면서 편집하는 방법을 배우기에 시간이 없다면, - 참고를 추가하는 것이 낫습니다. - paragraph_2_html: |- - 지도로 가고 나서 참고 아이콘을 클릭하세요: - . 드래그하여 이동할 수 있는 표시가 지도에 추가됩니다. - 메시지를 추가하고 나서, 저장을 클릭하면, 다른 매퍼가 조사할 것입니다. - fixthemap: - title: 문제 ë³´ê³  / 지도 고치기 - how_to_help: - title: 돕는 방법 - join_the_community: - title: 공동체에 가입하기 - explanation_html: |- - 우리의 지도 데이터에, 예를 들어 도로가 없거나 여러분의 주소에 문제가 있음을 보았다면, 진행하는 가장 좋은 방법은 - OpenStreetMap 공동체에 가입하고 스스로 데이터를 추가하거나 고치는 것입니다. - add_a_note: - instructions_html: |- - 나 지도에 표시되는 같은 아이콘을 클릭하세요. - 끌어서 움직일 수 있는, 지도에 표시를 추가할 것입니다. - 메시지를 추가하고 나서, 저장을 클릭하면, 다른 매퍼가 조사할 것입니다. - other_concerns: - title: 기타 문제 - explanation_html: |- - 우리의 데이터가 사용되는 방법이나 내용에 대한 문제가 있다면 더 많은 법률 - 정보에 대한 우리의 저작권 문서를 참조하거나 해당 - OSMF 작업 그룹에 문의하시기 바랍니다. - help_page: - title: 도움말 얻기 - introduction: |- - OpenStreetMap은 프로젝트에 대해 배우고, 질문을 묻고 답하고, - 매핑 주제를 협력하여 토론하고 문서하기 위한 여러 자료가 있습니다. - welcome: - url: /welcome - title: OSM에 오신 것을 환영합니다 - description: OpenStreetMap 기초를 다루는 이 퀵 가이드로 시작합니다. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Ko:%EC%B4%88%EB%B3%B4%EC%9E%90_%EC%95%88%EB%82%B4%EC%84%9C - title: 초보자 가이드 - description: 커뮤니티에서 유지하는 초보자 가이드 - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: OSM의 질문 및 답변 사이트에서 질문하거나 답변을 찾아보세요. - mailing_lists: - title: 메일링 리스트 - description: 국소 또는 지역의 메일링 리스트의 넓은 범위에서 관심사에 대해 질문하거나 토론을 합니다. - forums: - title: 포럼들 - description: 게시판 스타일 인터페이스를 선호하는 것에 대한 질문과 토론입니다. - irc: - title: IRC - description: 다양한 주제에서 많은 다른 언어로 된 대화형 채트입니다. - switch2osm: - title: switch2osm - description: 회사나 단체가 OpenStreetMap와 다른 서비스를 기반으로 전환하는 것에 도움을 주십시오. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: 깊이 있는 OSM 설명문서에 대해서는 위키를 찾아보세요. - about_page: - next: 다음 - copyright_html: ©OpenStreetMap
        기여자 - used_by: '%{name}의 지도 자료는 수많은 웹사이트와 모바일 앱, 하드웨어 장치에서 사용합니다' - lede_text: OpenStreetMap은 도로나 오솔길, 카페, 기차역 등에 대한 전세계에 있는 자료를 유지하고 기여하는 지도 제작자 - 공동체로부터 제작됩니다. - local_knowledge_title: 지역 지식 - local_knowledge_html: OpenStreetMap은 지역 지식을 강조합니다. 기여자는 OSM이 정확하고 최신 상태라는 것이 확인되는 - 항공 사진이나 GPS 장치, 저차원 기술분야 지도를 사용합니다. - community_driven_title: 공동체 주도 - community_driven_html: |- - OpenStreetMap의 공동체는 다양하고, 열정적이며, 날마다 자라납니다. 열성적인 지도 제작자, GIS 전문가, OSM 서버를 작동시키는 기술자, 재해 지역의 지도를 제작하는 인도주의자 등이 우리의 기여자입니다. - 공동체에 대해 알고 싶다면 사용자 일기, OpenStreetMap 블로그, 공동체 블로그, OSM 재단 웹사이트를 방문해보세요. - open_data_title: 개방형 자료 - open_data_html: 'OpenStreetMap은 개방형 자료입니다: OpenStreetMap 및 기여자를 저작자로 명시하는 한 어떠한 - 목적으로도 자유롭게 이용할 수 있습니다. 만일 어떤 방법으로 자료를 변경하거나 2차 제작을 한다면, 동일한 라이선스에 한하여 그 결과물을 - 배포할 수 있습니다. 자세한 내용은 저작권 및 라이선스 문서에서 확인하세요.' - legal_title: 법률 - legal_html: |- - 이 사이트 및 많은 다른 관련된 부문은 공동체를 대표하여 OpenStreetMap 재단에서 정식적으로 운영합니다. OpenStreetMap 재단이 운영하는 부문의 이용은 - 허용할 수 있는 이용 정책 및 개인정보 정책 조건 하에서 이루어집니다. -
        - 만일 이용허락 또는 저작권 및 다른 법률적인 질문이나 사안이 있다면, OpenStreetMap 재단에 연락하십시오. - partners_title: 파트너 notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user}님이 당신의 일기 항목에 댓글을 남겼습니다' @@ -1393,6 +1111,152 @@ ko: delete: deleted: 메시지가 삭제됨 site: + about: + next: 다음 + copyright_html: ©OpenStreetMap
        기여자 + used_by: '%{name}의 지도 자료는 수많은 웹사이트와 모바일 앱, 하드웨어 장치에서 사용합니다' + lede_text: OpenStreetMap은 도로나 오솔길, 카페, 기차역 등에 대한 전세계에 있는 자료를 유지하고 기여하는 지도 제작자 + 공동체로부터 제작됩니다. + local_knowledge_title: 지역 지식 + local_knowledge_html: OpenStreetMap은 지역 지식을 강조합니다. 기여자는 OSM이 정확하고 최신 상태라는 것이 + 확인되는 항공 사진이나 GPS 장치, 저차원 기술분야 지도를 사용합니다. + community_driven_title: 공동체 주도 + community_driven_html: |- + OpenStreetMap의 공동체는 다양하고, 열정적이며, 날마다 자라납니다. 열성적인 지도 제작자, GIS 전문가, OSM 서버를 작동시키는 기술자, 재해 지역의 지도를 제작하는 인도주의자 등이 우리의 기여자입니다. + 공동체에 대해 알고 싶다면 사용자 일기, OpenStreetMap 블로그, 공동체 블로그, OSM 재단 웹사이트를 방문해보세요. + open_data_title: 개방형 자료 + open_data_html: 'OpenStreetMap은 개방형 자료입니다: OpenStreetMap 및 기여자를 저작자로 명시하는 한 + 어떠한 목적으로도 자유롭게 이용할 수 있습니다. 만일 어떤 방법으로 자료를 변경하거나 2차 제작을 한다면, 동일한 라이선스에 한하여 + 그 결과물을 배포할 수 있습니다. 자세한 내용은 저작권 및 라이선스 문서에서 + 확인하세요.' + legal_title: 법률 + legal_html: |- + 이 사이트 및 많은 다른 관련된 부문은 공동체를 대표하여 OpenStreetMap 재단에서 정식적으로 운영합니다. OpenStreetMap 재단이 운영하는 부문의 이용은 + 허용할 수 있는 이용 정책 및 개인정보 정책 조건 하에서 이루어집니다. +
        + 만일 이용허락 또는 저작권 및 다른 법률적인 질문이나 사안이 있다면, OpenStreetMap 재단에 연락하십시오. + partners_title: 파트너 + copyright: + foreign: + title: 이 번역에 대한 정보 + text: 이 번역한 문서와 %{english_original_link} 사이에 상충하는 경우 영어 문서가 우선합니다 + english_link: 영어 원본 + native: + title: 이 문서에 대한 정보 + text: 저작권 문서의 영어 버전을 ë³´ê³  있습니다. 이 문서의 %{native_link}으로 돌아갈 수 있으며 또는 저작권을 읽는 + 것을 멈추고 %{mapping_link}할 수 있습니다. + native_link: 한국어 버전 + mapping_link: 매핑을 시작 + legal_babble: + title_html: 저작권 및 라이선스 + intro_1_html: |- + OpenStreetMap®ì€ 오픈 데이터로 OpenStreetMap 재단 (OSMF)의 오픈 데이터 + 커먼즈 오픈 데이터베이스 라이선스(ODbL)에 따라 사용할 수 있습니다. + intro_2_html: |- + OpenStreetMap 기여자를 명시하는 한, OpenStreetMap 데이터를 자유롭게 복사, 배포, 전송 및 적용할 수 있습니다. + 데이터를 바꾸거나 데이터에 기초로 할 때는 오로지 + 같은 라이선스에 따라서만 결과를 배포할 수 있습니다. + 전문은 + 당신의 권리와 책임을 설명합니다. + intro_3_html: |- + 지도 타일의 지도 제작과 설명문서는 + 크리에이티브 + 커먼즈 저작자표시-동일조건변경허락 2.0 라이선스(CC BY-SA)에 따라 사용할 수 있습니다. + credit_title_html: OpenStreetMap 제작진 넣는 방법 + credit_1_html: '“© OpenStreetMap 기여자”를 저작자로 사용해야 합니다.' + credit_2_html: |- + 또한 명확하게 데이터는 오픈 데이터베이스 라이선스에 따라 사용할 수 있으며, + 지도 제작은 지도 타일을 사용할 때에 CC-BY-SA로 허가합니다. + 이 저작권 문서로 + 링크하여 이렇게 할 수 있습니다. + 또한 데이터 형식으로 OSM을 배포할 때는 라이선스 이름과 + 라이선스에 직접 링크를 할 수 있습니다. 링크할 수 없는 + 매체(예를 들어 인쇄 작업)에서는 opendatacommons.org와 + openstreetmap.org('OpenStreetMap'을 전체 주소로 확장)로 + 독자에 직접 알려주세요. 관련 있다면 creativecommons.org로 알려주세요. + credit_3_html: |- + 찾아볼 수 있는 전자 지도에 대해서는 제작진은 지도의 모서리에 보여야만 합니다. + 예를 들어: + attribution_example: + alt: 웹페이지에 OpenStreetMap에 표시하는 방법의 예 + title: 권리 표시 예 + more_title_html: 자세히 찾기 + more_1_html: |- + 데이터를 사용하는 방법과 제작진을 표시하는 방법에 대해서는 OSMF 라이선스 문서 + 를 자세히 읽으세요. + more_2_html: |- + OpenStreetMap은 오픈 데이터이지만 타사 개발자를 위한 + 지도 API는 무료로 제공할 수 없습니다. + API 사용 정책, + 타일 사용 정책과 + Nominatim(이름) 사용 정책를 참조하세요. + contributors_title_html: 우리의 기여자 + contributors_intro_html: |- + 우리의 기여자는 수천 명입니다. 또한 국립지도 제작 기관과 + 같은 다른 소스의 공개 라이선스의 데이터를 포함하고 있습니다: + contributors_at_html: |- + 오스트리아: Stadt Wien + (CC BY에 따름), + Land Vorarlberg와 + Land Tirol (개정된 CC-BY AT에 따름)에서의 + 데이터를 포함합니다. + contributors_ca_html: |- + 캐나다: GeoBase®, GeoGratis + (© 캐나다 천연자원부), + CanVec (© 캐나다 + 천연자원부)ê³¼ StatCan (캐나다 연방통계청, + 지리부)에서의 데이터를 포함합니다. + contributors_fi_html: |- + 핀란드: NLSFI 라이선스에 따른, + National Land Survey of Finland's Topographic Database와 + 다른 데이터집합에서의 데이터를 포함합니다. + contributors_fr_html: |- + 프랑스: Direction Générale des Impôts에서의 + 데이터를 포함합니다. + contributors_nl_html: |- + 네덜란드: © AND 데이터, 2007년 + (www.and.com)을 포함합니다. + contributors_nz_html: |- + 뉴질랜드: Land Information New Zealand에서의 + 데이터를 포함합니다. Crown이 저작권을 소유합니다. + contributors_si_html: |- + 슬로베니아: Surveying and Mapping Authority와 + Ministry of Agriculture, Forestry and Food + (슬로베니아의 공개 정보)에서의 데이터를 포함합니다. + contributors_za_html: |- + 남아프리카 공화국: Chief Directorate: + National Geo-Spatial Information에서의 데이터를 + 포함합니다. State가 저작권을 소유합니다. + contributors_gb_html: |- + 영국: 육지 측량 데이터 + © Crown 저작권 및 데이터베이스 권리 + 2010-12를 포함합니다. + contributors_footer_1_html: |- + 자세한 내용과 OpenStreetMap을 개선하는 데 도움이 되는 데 사용한 + 기타 자료에 대해서는 OpenStreetMap 위키에 있는 기여자 문서 + 를 참조하세요. + contributors_footer_2_html: |- + OpenStreetMap에 포함된 데이터는 원래 데이터 제공자가 + OpenStreetMap을 보증하거나 어떠한 보증도 제공하거나 + 어떠한 책임도 진다는 것을 의미하지 않습니다. + infringement_title_html: 저작권 침해 + infringement_1_html: |- + OSM 기여자는 저작권 소유자로부터 명시적 허가 없이 + 저작권이 있는 자료(예를 들어 Google 지도 또는 인쇄된 지도)에서 + 데이터를 반입하지 않도록 주의하여야 합니다. + infringement_2_html: |- + 저작권을 가진 자료가 부적절하게 OpenStreetMap 데이터베이스나 이 사이트에 + 추가되었다고 생각하면 게시 + 중단 절차를 참고하거나 온라인 + 신고 페이지에서 직접 제출하세요. + trademarks_title_html: 등록 상표 + trademarks_1_html: OpenStreetMap, 돋보기 로고, 스테이트 오브 맵은 OpenStreetMap 재단의 등록상표입니다. + 상표의 사용에 대해 의문이 있는 경우, 관련된 질문을 라이선싱 + 작업 그룹으로 보내 주세요. index: js_1: 자바스크립트를 지원하지 않는 브라우저를 사용 중이거나, 자바스크립트가 활성화되어 있지 않습니다. js_2: OpenStreetMap은 매끄러운 지도를 위해 자바스크립트를 사용합니다. @@ -1418,6 +1282,101 @@ ko: potlatch2_unsaved_changes: 바뀐 내용을 저장하지 않았습니다. (Potlatch 2에서 저장하려면 저장을 클릭해야 합니다.) id_not_configured: iD가 설정되지 않았습니다 no_iframe_support: 브라우저가 이 기능에 필요한 HTML iframe을 지원하지 않습니다. + export: + title: 내보내기 + area_to_export: 지역 내보내기 + manually_select: 수동으로 다른 지역 선택 + format_to_export: 내보내기 형식 + osm_xml_data: OpenStreetMap XML 데이터 + map_image: 지도 그림 (표준 레이어 보이기) + embeddable_html: 내장된 HTML + licence: 라이선스 + export_details: OpenStreetMap 데이터는 오픈 + 데이터 커먼즈 오픈 데이터베이스 라이선스(ODbL)에 따라 사용할 수 있습니다. + too_large: + advice: '위의 내보내기가 실패하면, 아래에 나열된 원본 중 하나를 사용하는 것을 고려해주세요:' + body: 이 지역은 OpenStreetMap XML 데이터로 내보내는 데 너무 넓습니다. 확대하거나 작은 지역을 선택하거나, 대량 + 데이터 다운로드에 대한 아래에 나열된 자료 중 하나를 사용하세요. + planet: + title: 플래닛 OSM + description: 완전한 OpenStreetMap 데이터베이스가 정기적으로 업데이트되는 복사본 + overpass: + title: Overpass API + description: OpenStreetMap 데이터베이스의 미러에서 이 테두리 상자를 다운로드 + geofabrik: + title: Geofabrik 다운로드 + description: 대륙, 국가 및 선택한 도시가 정기적으로 업데이트되는 추출본 + metro: + title: 대도시 추출본 + description: 세계 주요 도시와 ê·¸ 주변 지역에 대한 추출본 + other: + title: 다른 원본 + description: OpenStreetMap 위키에 나와있는 추가 원본 + options: 옵션 + format: 형식 + scale: 축척 + max: 최대 + image_size: 그림 크기 + zoom: 확대/축소 + add_marker: 지도에 표시 추가 + latitude: '위도:' + longitude: '경도:' + output: 출력 + paste_html: HTML을 붙여 넣어 웹사이트에 포함시키세요 + export_button: 내보내기 + fixthemap: + title: 문제 ë³´ê³  / 지도 고치기 + how_to_help: + title: 돕는 방법 + join_the_community: + title: 공동체에 가입하기 + explanation_html: |- + 우리의 지도 데이터에, 예를 들어 도로가 없거나 여러분의 주소에 문제가 있음을 보았다면, 진행하는 가장 좋은 방법은 + OpenStreetMap 공동체에 가입하고 스스로 데이터를 추가하거나 고치는 것입니다. + add_a_note: + instructions_html: |- + 나 지도에 표시되는 같은 아이콘을 클릭하세요. + 끌어서 움직일 수 있는, 지도에 표시를 추가할 것입니다. + 메시지를 추가하고 나서, 저장을 클릭하면, 다른 매퍼가 조사할 것입니다. + other_concerns: + title: 기타 문제 + explanation_html: |- + 우리의 데이터가 사용되는 방법이나 내용에 대한 문제가 있다면 더 많은 법률 + 정보에 대한 우리의 저작권 문서를 참조하거나 해당 + OSMF 작업 그룹에 문의하시기 바랍니다. + help: + title: 도움말 얻기 + introduction: |- + OpenStreetMap은 프로젝트에 대해 배우고, 질문을 묻고 답하고, + 매핑 주제를 협력하여 토론하고 문서하기 위한 여러 자료가 있습니다. + welcome: + url: /welcome + title: OSM에 오신 것을 환영합니다 + description: OpenStreetMap 기초를 다루는 이 퀵 가이드로 시작합니다. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Ko:%EC%B4%88%EB%B3%B4%EC%9E%90_%EC%95%88%EB%82%B4%EC%84%9C + title: 초보자 가이드 + description: 커뮤니티에서 유지하는 초보자 가이드 + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: OSM의 질문 및 답변 사이트에서 질문하거나 답변을 찾아보세요. + mailing_lists: + title: 메일링 리스트 + description: 국소 또는 지역의 메일링 리스트의 넓은 범위에서 관심사에 대해 질문하거나 토론을 합니다. + forums: + title: 포럼들 + description: 게시판 스타일 인터페이스를 선호하는 것에 대한 질문과 토론입니다. + irc: + title: IRC + description: 다양한 주제에서 많은 다른 언어로 된 대화형 채트입니다. + switch2osm: + title: switch2osm + description: 회사나 단체가 OpenStreetMap와 다른 서비스를 기반으로 전환하는 것에 도움을 주십시오. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: 깊이 있는 OSM 설명문서에 대해서는 위키를 찾아보세요. sidebar: search_results: 검색 ê²°ê³¼ close: 닫기 @@ -1518,6 +1477,53 @@ ko: image: 그림 alt: 대체 텍스트 url: URL + welcome: + title: 환영합니다! + introduction_html: |- + 세계의 자유롭고 편집할 수 있는 지도인, OpenStreetMap에 오신 것을 환영합니다. 지금 가입하면, + 시작된 매핑을 얻도록 모두 설정됩니다. 여기에서 알아야 하는 가장 중요한 것들로 된 + 빠른 가이드가 있습니다. + whats_on_the_map: + title: 지도는 무엇입니까 + on_html: |- + OpenStreetMap은 현실과 현재를 전부 매핑하기 위한 장소입니다 - + 장소에 대한 건물, 도로, 그리고 그밖의 자세한 수백만 가지 정보를 포함합니다. 흥미있는 + 현실 세계 지물은 무엇이든 매핑할 수 있습니다. + off_html: |- + 장소에 대한 평가, 역사에 관한 것이나 추측에 의한 정보, 그리고 저작권이 있는 정보처럼 + 독단적인 데이터는 들어갈 수 없습니다. 특별히 허용받지 않으셨다면 + 온라인 지도나 종이 지도에서 복사해오지 마십시오. + basic_terms: + title: 매핑하는데 필요한 기본 용어 + paragraph_1_html: OpenStreetMap에서는 자체 용어가 몇 가지 사용됩니다. 여기에 편리하게 사용할 수 있는 몇 + 가지 핵심 단어가 있습니다. + editor_html: 편집기는 지도를 편집하는 데 사용할 수 있는 프로그램이나 웹사이트입니다. + node_html: 노드는 지도상의 어느 한 지점으로, 음식점 한 곳이나 나무 한 그루 같은 것을 말합니다. + way_html: 길은 지도상의 선이나 구역을 말하며, 도로, 개울, 호수나 건물을 나타냅니다. + tag_html: 태그는 노드나 길을 보충하는 데이터로, 음식점의 이름이나 도로의 속도 제한 같은 것을 + 말합니다. + rules: + title: 여기서 규칙! + paragraph_1_html: "OpenStreetMap은 몇 가지 형식적인 규칙이 있지만 우리는 모든 참가자가 협력하고, 공동체와 + 소통하기를 바랍니다.\n여러분이 직접 편집하지 않는 다른 활동을 고려한다면, \n가져오기와 + \n자동화된 + 편집에서의\n다음 가이드라인을 읽고 따라주시기 바랍니다." + questions: + title: 질문 있나요? + paragraph_1_html: |- + OpenStreetMap은 프로젝트에 대해 배우고, 질문을 묻고 답하고, + 매핑 주제를 협력하여 토론하고 문서하기 위한 여러 자료가 있습니다. + 여기서 도움을 얻으세요. + start_mapping: 매핑 시작 + add_a_note: + title: 편집할 시간이 없습니까? 참고를 추가하세요! + paragraph_1_html: |- + 그냥 한 가지 간단한 것이 ê³ ì¹  게 있다거나 가입하면서 편집하는 방법을 배우기에 시간이 없다면, + 참고를 추가하는 것이 낫습니다. + paragraph_2_html: |- + 지도로 가고 나서 참고 아이콘을 클릭하세요: + . 드래그하여 이동할 수 있는 표시가 지도에 추가됩니다. + 메시지를 추가하고 나서, 저장을 클릭하면, 다른 매퍼가 조사할 것입니다. trace: visibility: private: 비공개(익명으로 공유됨, 정렬되지 않은 점) @@ -1557,6 +1563,7 @@ ko: trace_header: upload_trace: 궤적 올리기 see_all_traces: 모든 궤적 보기 + see_my_traces: 내 추적 보기 traces_waiting: one: 올리기를 기다리는 궤적 %{count}개가 있습니다. 대기중인 다른 사용자의 올리기를 막지 않도록 올리기가 끝날 때까지 더 기다려주십시오. @@ -1581,6 +1588,7 @@ ko: delete_track: 이 궤적 삭제 trace_not_found: 추적을 찾을 수 없습니다! visibility: '공개 여부:' + confirm_delete: 이 궤적을 삭제할까요? trace_paging_nav: showing_page: '%{page}쪽' older: 이전 궤적 @@ -1603,6 +1611,7 @@ ko: map: 지도 list: public_traces: 공개 GPS 궤적 + my_traces: 내 GPS 추적 public_traces_from: '%{user}님의 공개 GPS 궤적' description: 최근의 GPS 궤적 업로드 항목 둘러보기 tagged_with: '%{tags}(으)로 태그함' @@ -1637,7 +1646,7 @@ ko: need_to_see_terms: API에 대한 접근을 일시적으로 중지했습니다. 기여자 약관을 보려면 웹 인터페이스에 로그인하세요. 기여자 약관에 동의할 필요는 없습니다만 기여자 약관을 보아야 합니다. oauth: - oauthorize: + authorize: title: 내 계정에 접근 인증 request_access: '%{app_name} 애플리케이션이 %{user} 계정에 접근을 요청합니다. 애플리케이션이 다음 기능을 수행할 것인지 확인하세요. 원하는 만큼 많거나 적게 선택할 수 있습니다.' @@ -1650,11 +1659,11 @@ ko: allow_write_gpx: GPS 추적을 올립니다. allow_write_notes: 참고를 수정합니다. grant_access: 권한 부여 - oauthorize_success: + authorize_success: title: 인증 요청이 허가됨 allowed: 내 계정에 %{app_name} 애플리케이션 접근이 부여되었습니다. verification: 인증 코드는 %{code}입니다. - oauthorize_failure: + authorize_failure: title: 인증 요청이 실패됨 denied: 내 계정에 %{app_name} 애플리케이션 접근이 거부되었습니다. invalid: 인증 토큰이 올바르지 않습니다. @@ -1879,6 +1888,7 @@ ko: user location: 사용자 위치 if set location: 근처 사용자를 보려면 %{settings_link} 페이지에 집 위치를 설정하세요. settings_link_text: 설정 + my friends: 내 친구 no friends: 아직 어떠한 친구도 추가하지 않았습니다. km away: '%{count}km 거리' m away: '%{count}m 거리' @@ -2061,7 +2071,7 @@ ko: are_you_sure: '''%{name}'' 사용자로부터 ''%{role}'' 역할을 해제하겠습니까?' confirm: 확인 fail: '''%{name} 사용자로부터 ''%{role}'' 역할을 해제할 수 없습니다. 사용자와 역할이 모두 올바른지 확인하세요.' - user_block: + user_blocks: model: non_moderator_update: 차단을 만들거나 바꾸려면 운영자여야 합니다. non_moderator_revoke: 차단을 해제하려면 운영자여야 합니다. @@ -2115,20 +2125,6 @@ ko: period: one: 1시간 other: '%{count}시간' - partial: - show: 보기 - edit: 편집 - revoke: 해제! - confirm: 확실합니까? - display_name: 차단된 사용자 - creator_name: 만든이 - reason: 차단 이유 - status: 상태 - revoker_name: 해제자 - not_revoked: (철회하지 않음) - showing_page: '%{page}쪽' - next: 다음 » - previous: « 이전 helper: time_future: '%{time}에 끝납니다.' until_login: 사용자가 로그인할 때까지 활성합니다. @@ -2158,8 +2154,22 @@ ko: back: 모든 차단 보기 revoker: '해제:' needs_view: 차단 해제하기 전에 다시 로그인해야합니다. - note: - description: + block: + not_revoked: (철회하지 않음) + show: 보기 + edit: 편집 + revoke: 해제! + blocks: + display_name: 차단된 사용자 + creator_name: 만든이 + reason: 차단 이유 + status: 상태 + revoker_name: 해제자 + showing_page: '%{page}쪽' + next: 다음 » + previous: « 이전 + notes: + comment: opened_at_html: '%{when} 전에 만듦' opened_at_by_html: '%{user}님이 %{when} 전에 만듦' commented_at_html: '%{when} 전에 바꿈' @@ -2283,7 +2293,7 @@ ko: distance: 거리 errors: no_route: 두 장소 사이의 경로를 찾을 수 없습니다. - no_place: 죄송합니다 - ê·¸ 장소를 찾을 수 없습니다. + no_place: 죄송합니다 - '%{place}'을(를) 찾을 수 없습니다. instructions: continue_without_exit: '%{name}(으)로 계속 가세요' slight_right_without_exit: '%{name}을(를) 따라 오른쪽으로 완만하게 도세요' @@ -2335,7 +2345,7 @@ ko: show_address: 주소 보기 query_features: 이 지형지물 보기 centre_map: 여기를 정중앙으로 지정 - redaction: + redactions: edit: description: 설명 heading: 교정 편집 diff --git a/config/locales/ku-Latn.yml b/config/locales/ku-Latn.yml index 8b775648b..fed213f69 100644 --- a/config/locales/ku-Latn.yml +++ b/config/locales/ku-Latn.yml @@ -1,4 +1,4 @@ -# Messages for Kurdish (Latin script) (Kurdî (latînî)‎) +# Messages for Kurdish (Latin script) (kurdî (latînî)‎) # Exported from translatewiki.net # Export driver: phpyaml # Author: Bikarhêner @@ -249,7 +249,7 @@ ku-Latn: list: title: Desteya guhertinan title_user: Desteyên guhertinan yên ji alî %{user} ve - title_friend: Desteyên guhertinan yên ji alî hevalên te ve + title_friend: Desteyên guhertinan yên ji aliyê hevalên te ve title_nearby: Desteyên guhertinan yên ji alî bikarhênerên nêz ve empty: Desteyên guhertinan nehate dîtin. empty_area: Li vê derê desteyên guhertinan tine ne. @@ -280,7 +280,7 @@ ku-Latn: user_title: Rojnivîska %{user} in_language_title: Nivîsên Rojane yên bi %{language} new: Nivîsa nû yê rojane - new_title: Di rojnivîska xwe de nivîsekî nû binivîse + new_title: Di rojnivîska min de nivîsekî nû binivîse no_entries: Nivîsên rojane tine recent_entries: Nivîsên rojane yên dawîn older_entries: Nivîsên Kevintir @@ -346,55 +346,6 @@ ku-Latn: ago: berî %{ago} newer_comments: Şîroveyên nûtir older_comments: Şîroveyên kevintir - export: - title: Derxîne - start: - area_to_export: Cihê ku wê were derxistin - manually_select: Bi destê xwe cihekî din bibijêre - format_to_export: Awayê derxistinê - osm_xml_data: Daneyên OpenStreetMapê a bi şiklê XML'yê - map_image: Risma Xerîteyê (tebeqeya standart nîşan dide) - embeddable_html: HTML'a ku dikare were pêvekirin - licence: Lîsans - export_details: Daneyên OpenStreetMapê di bin lîsansa Open - Data Commons Open Database License (ODbL) hatiye lîsanskirin. - too_large: - advice: Eger hûn ji yê jor nikaribin eksport bikin, xêra xwe yek ji van çavkaniyên - li xwarê a lîstekirî biemilînin. - body: Ev der ji bo ku wekî Daneya XML a OpenStreetMapê were eksportkirin zahf - mezin e. Xêra xwe hinek jî nêzîk bike an jî qadekî biçûktir bibijêre an - jî ji bo daxistina daneyên mezin yek ji van çavkaniyên lîstekirî yên li - jêr biemilîne. - planet: - title: Seyareya OSMê - description: Kopiyên daneyên OpenStreetMapê yê ku bi awayekî binîzam têne - nûkirin - overpass: - title: Overpass API - description: Vê qutiya sînorkar ji eyneyekî daneya OpenStreetMapê daxîne - geofabrik: - title: Daxistinên Geofabrikê - description: Kurteyên parzemîn, welat û bajarên bijartî yê ku bi awayekî - sîstematîk têne nûkirin - metro: - title: Xulasayê Bajara Mezin - description: Xulasayên ji bo bajarên mezin yên dinyayê û derdorê wan bajaran - other: - title: Çavkaniyên din - description: Çavkaniyên îlawe yên ku li ser wîkiya OpenStreetMapê hatine - lîstekirin - options: Vebijêrk - format: Format - scale: Pîvan (miqyas) - max: maksîmum - image_size: Mezinahiya Rismê - zoom: Nêzîk bike - add_marker: Nîşankereke îlawe bike xerîteyê - latitude: Hêlîpanː - longitude: Hêlîlarː - output: Encam - paste_html: Vê koda HTML'yê dikarî bi ser malperra xwe ve kopî bikî - export_button: Derxîne geocoder: search: title: @@ -1039,256 +990,6 @@ ku-Latn: text: Bexş bike learn_more: Zêdetir Hîn Bibe more: Zêdetir - license_page: - foreign: - title: Derbarê vê wergerê de - text: Eger di navbera vê rûpela tercumekirî û %{english_original_link} de îxtilafek - hebe wê rûpela bi zimanê îngilîzî li ber çavan were girtin - english_link: eslê we ya bi îngilîzî - native: - title: Der barê vê rûpelê - text: Hûn vêga dinêrin versiyona bi zimanê îngilîzî ya rûpela mafê daneriyê. - Hûn dikarin vebigerin %{native_link} a vê rûpelê an jî hûn dikarin li vir - bimînin da ku hûn derbarê mafê daneriyê û derbarê %{mapping_link} de agahiyan - werbigrin. - native_link: versiyona bi kurdî - mapping_link: dest bi çêkirina nexşeyan bike - legal_babble: - title_html: Mafê daneriyê û lîsans - intro_1_html: |- - OpenStreetMap® open data ye, bi lîsansa Open Data - Commons Open Database License (ODbLê) ku ji aliyê OpenStreetMap Foundation (OSMF) ve hatiye çêkirin ve hatiye lîsanskirin. - intro_2_html: Hûn serbest in ku daneyên me kopî bikin, belav bikin, bişînin - yekî an jî adapte bikin bi şerta ku hûn behsa me bikin, rûmeta me bigrin. - Eger hûn daneyên me biguherînin an jî baştir bikin hûn vê netîceyê tenê di - bin eynî lîsansê de dikarin belav bikin. Temamiya koda - qanûnî, maf û berpirsiyariyên we îzah dike. - intro_3_html: |- - Nexşesazî û belgekirinên di nexşeya me de, di bin lîsansa Creative - Commons Attribution-ShareAlike 2.0 (CC BY-SA) de hatiye lîsanskirin. - credit_title_html: Em çawan wekî çavkaniyekê behsa OpenStreetMapê bikin - credit_1_html: Ji bo referansgirtinê divê tu wisa binivîsîː “© beşarên - OpenStreetMapê ”. - credit_2_html: Herwiha divê hûn zelal bikin ku daneyên me di bin lîsansa Open - Database License de hatiye lîsanskirin, û eger karoyên nexşeya me were emilandin, - diyar bikin ku ev kartografî jî bi CC BY-SA hatiye lîsanskirin. Hûn vê bi - lînkdana ji rûpela mafê - daneriyê re dikarin bikin. Wekî alternatîv, û wekî hewcehiyek eger tu - OSMyê di formekî daneyan de belav bikî tu dikarî rasterast lîsansan bi nav - bikî an jî girê bidî lîsansê(n) rasterast. Di medyayên ku lînkkirin ne mimkun - bin de (wekî mînak. xebatên çapkirî), em ji we re pêşniyar dikin ku hûn xwînerên - xwe tewcîhê openstreetmap.org'ê, opendatacommons.org'ê, û heke minasib be - creativecommons.org'ê bikin. - credit_3_html: "Ji bo nexşeyekî elektronîk yê gerrînbar, çavkanî divê li jêra - goşeya alî rastê were xuyan. \nWek nimûne:" - attribution_example: - alt: Mînakekê atfkirinê ya OpenSteetMapê yê li ser malperekî înternetê - title: Mînaka atfkirinê - more_title_html: Zêdetir hîn bibe - more_1_html: |- - Ji bo ku derbarê emilandina daneyên me û referansdana me de zêdetir hîn bibî rûpela Lîsansê a OSMFê bixwîne. - more_2_html: Digel ku OpenStreetMap bi daneyên vekirî be jî, em ji bo aliyên - sêyem APIyekê nexşeyê ya belaş peyda nakin. Binêre rûpelên me yên Polîtîkaya - Emilandina APIyê , Polîtîkaya - Emilandina Karoyê û Polîtîkaya - Emilandina Nominatimê. - contributors_title_html: Beşdarên me - contributors_intro_html: 'Bi hezaran beşdarên me hene. Herwiha em ji ajansên - nexşekirinê yên netewî û çavkaniyên din jî daneyên bi lîsansa-vekirî îhtîwa - dikin, hinek ji wan ev in:' - contributors_at_html: |- - Awistirya: Daneyên ji Stadt Wien (di bin - CC BY de), Land Vorarlberg û Land Tirol (tevî guhertinan di bin lîsansa CC BY AT de) dihundirrîne. - contributors_ca_html: |- - Keneda: Daneyên ji GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), û StatCan (Geography Division, - Statistics Canada) dihundirrîne. - contributors_fi_html: 'Fînlenda: Daneyên ji National Land Survey - of Finland''s Topographic Database û ji komên din ên daneyan, di bin a Lîsansa - NLSFI de daneyan dihundirrîne.' - contributors_fr_html: 'Frensa: Daneyên ji Direction Générale - des Impôts''ê hatine bidestxistin dihundirrîne.' - contributors_nl_html: |- - Holenda: Daneyên © ANDê dihundirrîne, 2007 - (www.and.com) - contributors_nz_html: 'Nû Zelenda: Daneyên ku ji Land Information - New Zealandê hatine bidestxistin dihundirrîne. Crown Copyright parastî ye.' - contributors_si_html: |- - Slovenya: Daneyên ji Surveying and Mapping Authority û - Ministry of Agriculture, Forestry and Food - (agahiyên ji xelkê re vekirî yên Slovenyayê) dihundirrîne. - contributors_za_html: |- - Afrîkaya Başûr: Daneyên ku ji Chief Directorate: - National Geo-Spatial Information hatine bidestxistin dihundirrîne. Mafê daneriyê yê dewletê parastî ye. - contributors_gb_html: |- - Mîrnişîna Yekbûyî: Daneyên Ordnance - Survey data © dihundirrîne; mafê daneriyê yê Crownê û mafê databasê parastî ne 2010-12. - contributors_footer_1_html: |- - Ji bo dêtayên van û çavkaniyên din yên ku di pêşdebirina OpenStreeteMapê de hatine bikaranîn agahiyên zêdetir werbigrî, xêra xwe ji ser OpenStreetMap Wiki'yê binêre rûpela Beşdaran. - contributors_footer_2_html: Daxilbûna daneyan a di OpenStreetMapê de nayê maneya - ku peydakera daneyan yê eslî OpenStreetMapê teswîb dike, garantiyekî temîn - dike an jî berpirsîyariyekê qebûl dike. - infringement_title_html: Îxlala mafê daneriyê - infringement_1_html: Kesên ku tevkariyên OSMê dikin bila ti carî ji bîr nekin - daneyên ji çavkaniyên ku mafên wan ên daneriyê parastî be (wekî nimûne Google - Maps an jî nexşeyên çapkirî) bêyî destûra eşkere yê xwediyê wan, ji van çavkaniyan - ti daneyek wernegrin. - infringement_2_html: Eger tu bawer bî materyalekî ku mafê we yê daneriyê parastî - ye bi şaşîtî li vê sîteyê an jî li daneya OpenStreetMapê hatibe zêdekirin - xêra xwe miracaeta prosedûra - me ya rakirinê bike an jî rasterast di rûpela - me ya dosyekirinê a online de qeyd bikin. - trademarks_title_html: Markên bazirganî - trademarks_1_html: OpenStreetMap, logoya mercekê û State of the Map; markên - ticarî yên OpenStreetMap Foundationê yên qeydkirî nin. Heke derbarê bikaranîna - markan de pirsên we hebin xêra xwe binêrin Polîtîkaya - Markên Ticarî. - welcome_page: - title: Tu bi xêr hatî! - introduction_html: Tu bi xêr hatî OpenStreetMapê, nexşeya dinyayê yê azad û yê - ku bi rehetî dikare were sererastkirin. Niha te xwe qeyd kiriye û tu dikarî - dest bi nexşekirinê bikî. Va ye li vir rêbernameyek bilez yê tiştên muhîm heye - ku divê tu van bizanibî. - whats_on_the_map: - title: Çi hene li ser nexşeyê - on_html: OpenStreetMap cihekî ye ji bo nexşekirina tiştên heqîqî û rojane - - tê de bi milyonan avahî, rê û dêtayên derbarê deveran de heye. Her taybetmendiyê - cîhana rastîn ê ku bala te bikişîne dikarî nexşe bikî. - off_html: Çi tê de nabe? Daneyên serhişkane yên wek nirxandin, xisûsiyetên - dîrokî an jî ferazî û daneyên ji çavkaniyên ku mafên wan ên daneriyê parastî - be hatibin. Eger destûrekî we yê xisûsî tine be, ji nexşeyên online an jî - ji nexşeyên ser kaxizan kopî nekin. - basic_terms: - title: Termên esasî yên ji bo nexşekirinê - paragraph_1_html: OpenStreetMap xwediyê argoya xwe (zimanê xwe yê taybet) ye. - Vaye li vir çend peyvên ku wê bi kêrên we bên heye. - editor_html: Sererastker (edîtor) bername an jî malperekî înternetê - ye ku hûn wê dikarin ji bo sererastkirina nexşeyê bi kar bînin. - node_html: Girêk, nuqteyekî di nexşeyê de ye, wekî restorantek - an jî darek. - way_html: Rê, xetek an jî deverek yê wekî cadeyek, golek an - jî avahiyek e. - tag_html: Etîket, parçeyekî daneyê yê derbarê girêkek an jî - rêyek yê mîna navê restorantek an jî lîmîta lezê yê kolanek e. - rules: - title: Qaîdeyên vêǃ - paragraph_1_html: "Her çiqas qaîdeyen fermî yên OpenStreetMapê hindik bin jî - em ji hemû kesên tevkariya me dikin hêvî dikin ku bi civatê re bi hevkarî - bixebitin û di têkiliyê de bin. Eger tu bifikirî ku xebatên xwe ne bi destê - xwe bi rê ve bibî, xêra xwe ji jêr rêziknameyê bixwîne û bi ya rêziknameyê - bike: Barkirin - û \nSererastkirinên - otomatîk." - questions: - title: Pirsekî te heye? - paragraph_1_html: OpenStreetMap ji bo hînbûna projeyê, pirskirin û cewabdana - pirsan, û ji bo nîqaşên ku bi hevkarî têne kirin û ji bo belgekirina mijarên - nexşeyê xwediyê çend çavkaniyan e. Ji vir alîkariyê - werbigrin. - start_mapping: Dest bi çêkirina nexşeyan bike - add_a_note: - title: Ji bo sererastkirinê wextê te tine? Wê gavê notek lê zêde bike! - paragraph_1_html: Eger tu bixwazibî tenê tiştek biçûk rast bikî û wextê te ji - bo qeydbûnê û ji bo ku hînbibî mirov wê çawa sererast bike tine be, tenê notek - binivîsî bes e. - paragraph_2_html: 'Tenê here nexşeyê û bitikîne ser - sembola notê: . Wê ev, li nexşeyê nîşankerek - zêde bike, ê ku tu bikaribî bi kaşkirinê cihê wî biguherînî. Peyamê xwe binivîse, - dû re li qeydkirin''ê bitikîne. Nexşesazên din wê lê bikolin.' - fixthemap: - title: Pirgirêkek rabigihîne / Nexşeyê sererast bike - how_to_help: - title: Çawa dikarim alî we bikim? - join_the_community: - title: Tevlî civatê bibe - explanation_html: Heke te di daneyên nexşeya me de pirsgirêkek ferq kiribe, - wekî mînak kolanek an jî adrêsa te kêm be, riya herî baş a dewamkirinê beşdarî - civata me ya OpenStreetMapê bibe û tu bixwe rast bike an jî îlawe bike. - add_a_note: - instructions_html: Tenê bitikîne ser îkona an jî - ji ser ekrana xerîteyê bitikîne ser eynî îkonê. Wê ev, ji nexşeyê re nîşankerek - deyne ku tu dikarî bi kaşkirinê cihê vê nîşankerê biguherînî. Peyama xwe - binivîse, piştre bitikîne ser qeyd bike'yê, wê nexşesazên din lê bikolin. - other_concerns: - title: Meseleyên din - explanation_html: |- - Eger derbarê emilandina daneyan an jî derbarê naverokan de fikarên te hebin ji bo ku zêdetir agahiyên zagonî werbigrî xêra xwe binêre rûpela me ya mafê daneriyê an jî bi - koma xebatê yê OSMFê a eleqedar re bikeve îrtîbatê. - help_page: - title: Wergirtina alîkariyê - introduction: OpenStreetMap ji bo hînbûna projeyê, pirskirin û cewabdana pirsan, - û ji bo nîqaşên ku bi hevkarî têne kirin û ji bo belgekirina mijarên nexşeyê - xwediyê çend çavkaniyan e. - welcome: - url: /welcome - title: Bi xêr hatî OSMê - description: Bi vê rêbernameya kurt ê ku tê de esasên OpenStreetMapê heye dest - pê bike. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: Rêbera ji bo kesên ku nû dest pê kirine - description: Civata me, ji bo kesên ku nû dest pê kirine rêbertî dike. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Pirsek bipirsin an binêrin cewabên li ser malpera OSMê ya pirs-û-bersivê. - mailing_lists: - title: Lîsteya E-nameyan - description: Di lîsteyên e-nameyan yên deverî an jî herêmî yên cur bi cur de - hûn dikarin pirsan bipirsin an jî mijarên balkêş nîqaş bikin. - forums: - title: Forum - description: Pirs û gotûbêjên ji bo kesên ku înterfeysên bi şêweya panoya daxuyaniyê - tercîh dikin. - irc: - title: IRC - description: Sohbeta înteraktîv yê bi gelek zimanan û di gelek mijaran de. - switch2osm: - title: switch2osm - description: Alikariya ji bo şirket û komeleyên ku derbasî nexşe û xizmetên - din yên bi bingeha OpenStreetMapê dibin. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Ji bo belgeyên OSMyê yên bi berfirehî binêrin wîkiyê. - about_page: - next: Pêşve - copyright_html: ©Beşdarên
        OpenStreetMapê - used_by: '%{name} li ser bi hezaran malper, sepanên mobîl û cîhazên hişkalavan, - daneyên nexşeyê li hev tîne' - lede_text: OpenStreetMap ji alî civata nexşesazên ku ji seransera dinyayê der - barê kolanan, kafeyan, stasyonên trênan û zêdetirê wan de daneyan tevlî vir - dike û diparêze. - local_knowledge_title: Zanyariya herêmî - local_knowledge_html: OpenStreetMap girîngiyê dide zanyariyên xwecihî. Beşdarên - me ji bo tesdîq bikin ku OSM rast û rojane ye, wêneyên hewayî, cîhazên GPSê - û nexşeyên deverê yên bi teknolojiya-nizm bi kar tînin. - community_driven_title: Bi rêbertiya civatê - community_driven_html: Civata OpenStreetMapê curbicur û bengîn e û herroj mezintir - dibe. Di navbera beşdarên me de nexşesazên dilxwaz, pisporên GISê, endazyerên - serverên OSMê dixebitînin, xêrxwazên ji bo herêmên di tesîra karesatê de mane - nexşe dikin û zêdetirên wan jî henin. Derbarê civatê de ji bo ku zêdetir tiştan - hîn bibî, binêre Bloga OpenStreetMapê, - rojnivîskên bikarhêneran, blogên - civatê û malpera Weqfa OSMê. - open_data_title: Daneyên vekirî - open_data_html: 'OpenStreetMap bi daneya vekirî ye: hûn serbest in ku vê - bi her armancê bi kar bînin, bi şerta ku hûn OpenStreetMap û beşdarên wê referans - bidin. Heke hûn daneyan biguherînin an jî li serê zêde bikin hûn vê encamê tenê - di bin eynî lîsansê de dikarin belav bikin. Ji bo dêtayan binêrin rûpela - lîsans û mafê daneriyê.' - legal_title: Zagonî - legal_html: |- - Ev malper û gelek xizmetên din yên pêwendîdar bi awayekî fermî ji aliyê Weqfa OpenStreetMapê (OSMF) ve li ser navê civatê tê birêvebirin. Bikaranîna hemû karûbarên ku ji aliyê OSMF ve tê birêvebirin mijara - Politikayên Bikaranînê yê Qebûlbar û Politikaya me ya Veşarîtiyê ye -
        Eger di derbarê lîsanskirin, mafê daneriyê de pirsên we hebin an jî ji bo pirsên we yên din ên qanûnî xêra xwe bi OSMF re bikevin têkiliyê.
        OpenStreetMap, logoya mercekê û State of the Map marqeyên ticarî yên qeydkirî yê OSMFê nin. - partners_title: Şirîkên me notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} li ser nivîsek rojane şirove kir' @@ -1487,6 +1188,148 @@ ku-Latn: delete: deleted: Payam hate jêbirin site: + about: + next: Pêşve + copyright_html: ©Beşdarên
        OpenStreetMapê + used_by: '%{name} li ser bi hezaran malper, sepanên mobîl û cîhazên hişkalavan, + daneyên nexşeyê li hev tîne' + lede_text: OpenStreetMap ji alî civata nexşesazên ku ji seransera dinyayê der + barê kolanan, kafeyan, stasyonên trênan û zêdetirê wan de daneyan tevlî vir + dike û diparêze. + local_knowledge_title: Zanyariya herêmî + local_knowledge_html: OpenStreetMap girîngiyê dide zanyariyên xwecihî. Beşdarên + me ji bo tesdîq bikin ku OSM rast û rojane ye, wêneyên hewayî, cîhazên GPSê + û nexşeyên deverê yên bi teknolojiya-nizm bi kar tînin. + community_driven_title: Bi rêbertiya civatê + community_driven_html: Civata OpenStreetMapê curbicur û bengîn e û herroj mezintir + dibe. Di navbera beşdarên me de nexşesazên dilxwaz, pisporên GISê, endazyerên + serverên OSMê dixebitînin, xêrxwazên ji bo herêmên di tesîra karesatê de mane + nexşe dikin û zêdetirên wan jî henin. Derbarê civatê de ji bo ku zêdetir tiştan + hîn bibî, binêre Bloga OpenStreetMapê, + rojnivîskên bikarhêneran, blogên + civatê û malpera Weqfa OSMê. + open_data_title: Daneyên vekirî + open_data_html: 'OpenStreetMap bi daneya vekirî ye: hûn serbest in ku + vê bi her armancê bi kar bînin, bi şerta ku hûn OpenStreetMap û beşdarên wê + referans bidin. Heke hûn daneyan biguherînin an jî li serê zêde bikin hûn + vê encamê tenê di bin eynî lîsansê de dikarin belav bikin. Ji bo dêtayan binêrin + rûpela lîsans û mafê daneriyê.' + legal_title: Zagonî + legal_html: |- + Ev malper û gelek xizmetên din yên pêwendîdar bi awayekî fermî ji aliyê Weqfa OpenStreetMapê (OSMF) ve li ser navê civatê tê birêvebirin. Bikaranîna hemû karûbarên ku ji aliyê OSMF ve tê birêvebirin mijara + Politikayên Bikaranînê yê Qebûlbar û Politikaya me ya Veşarîtiyê ye +
        Eger di derbarê lîsanskirin, mafê daneriyê de pirsên we hebin an jî ji bo pirsên we yên din ên qanûnî xêra xwe bi OSMF re bikevin têkiliyê.
        OpenStreetMap, logoya mercekê û State of the Map marqeyên ticarî yên qeydkirî yê OSMFê nin. + partners_title: Şirîkên me + copyright: + foreign: + title: Derbarê vê wergerê de + text: Eger di navbera vê rûpela tercumekirî û %{english_original_link} de + îxtilafek hebe wê rûpela bi zimanê îngilîzî li ber çavan were girtin + english_link: eslê we ya bi îngilîzî + native: + title: Der barê vê rûpelê + text: Hûn vêga dinêrin versiyona bi zimanê îngilîzî ya rûpela mafê daneriyê. + Hûn dikarin vebigerin %{native_link} a vê rûpelê an jî hûn dikarin li vir + bimînin da ku hûn derbarê mafê daneriyê û derbarê %{mapping_link} de agahiyan + werbigrin. + native_link: versiyona bi kurdî + mapping_link: dest bi çêkirina nexşeyan bike + legal_babble: + title_html: Mafê daneriyê û lîsans + intro_1_html: |- + OpenStreetMap® open data ye, bi lîsansa Open Data + Commons Open Database License (ODbLê) ku ji aliyê OpenStreetMap Foundation (OSMF) ve hatiye çêkirin ve hatiye lîsanskirin. + intro_2_html: Hûn serbest in ku daneyên me kopî bikin, belav bikin, bişînin + yekî an jî adapte bikin bi şerta ku hûn behsa me bikin, rûmeta me bigrin. + Eger hûn daneyên me biguherînin an jî baştir bikin hûn vê netîceyê tenê + di bin eynî lîsansê de dikarin belav bikin. Temamiya koda + qanûnî, maf û berpirsiyariyên we îzah dike. + intro_3_html: |- + Nexşesazî û belgekirinên di nexşeya me de, di bin lîsansa Creative + Commons Attribution-ShareAlike 2.0 (CC BY-SA) de hatiye lîsanskirin. + credit_title_html: Em çawan wekî çavkaniyekê behsa OpenStreetMapê bikin + credit_1_html: Ji bo referansgirtinê divê tu wisa binivîsîː “© + beşarên OpenStreetMapê ”. + credit_2_html: Herwiha divê hûn zelal bikin ku daneyên me di bin lîsansa Open + Database License de hatiye lîsanskirin, û eger karoyên nexşeya me were emilandin, + diyar bikin ku ev kartografî jî bi CC BY-SA hatiye lîsanskirin. Hûn vê bi + lînkdana ji rûpela mafê + daneriyê re dikarin bikin. Wekî alternatîv, û wekî hewcehiyek eger tu + OSMyê di formekî daneyan de belav bikî tu dikarî rasterast lîsansan bi nav + bikî an jî girê bidî lîsansê(n) rasterast. Di medyayên ku lînkkirin ne mimkun + bin de (wekî mînak. xebatên çapkirî), em ji we re pêşniyar dikin ku hûn + xwînerên xwe tewcîhê openstreetmap.org'ê, opendatacommons.org'ê, û heke + minasib be creativecommons.org'ê bikin. + credit_3_html: "Ji bo nexşeyekî elektronîk yê gerrînbar, çavkanî divê li jêra + goşeya alî rastê were xuyan. \nWek nimûne:" + attribution_example: + alt: Mînakekê atfkirinê ya OpenSteetMapê yê li ser malperekî înternetê + title: Mînaka atfkirinê + more_title_html: Zêdetir hîn bibe + more_1_html: |- + Ji bo ku derbarê emilandina daneyên me û referansdana me de zêdetir hîn bibî rûpela Lîsansê a OSMFê bixwîne. + more_2_html: Digel ku OpenStreetMap bi daneyên vekirî be jî, em ji bo aliyên + sêyem APIyekê nexşeyê ya belaş peyda nakin. Binêre rûpelên me yên Polîtîkaya + Emilandina APIyê , Polîtîkaya + Emilandina Karoyê û Polîtîkaya + Emilandina Nominatimê. + contributors_title_html: Beşdarên me + contributors_intro_html: 'Bi hezaran beşdarên me hene. Herwiha em ji ajansên + nexşekirinê yên netewî û çavkaniyên din jî daneyên bi lîsansa-vekirî îhtîwa + dikin, hinek ji wan ev in:' + contributors_at_html: |- + Awistirya: Daneyên ji Stadt Wien (di bin + CC BY de), Land Vorarlberg û Land Tirol (tevî guhertinan di bin lîsansa CC BY AT de) dihundirrîne. + contributors_ca_html: |- + Keneda: Daneyên ji GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), û StatCan (Geography Division, + Statistics Canada) dihundirrîne. + contributors_fi_html: 'Fînlenda: Daneyên ji National Land + Survey of Finland''s Topographic Database û ji komên din ên daneyan, di + bin a Lîsansa + NLSFI de daneyan dihundirrîne.' + contributors_fr_html: 'Frensa: Daneyên ji Direction Générale + des Impôts''ê hatine bidestxistin dihundirrîne.' + contributors_nl_html: |- + Holenda: Daneyên © ANDê dihundirrîne, 2007 + (www.and.com) + contributors_nz_html: 'Nû Zelenda: Daneyên ku ji Land Information + New Zealandê hatine bidestxistin dihundirrîne. Crown Copyright parastî ye.' + contributors_si_html: |- + Slovenya: Daneyên ji Surveying and Mapping Authority û + Ministry of Agriculture, Forestry and Food + (agahiyên ji xelkê re vekirî yên Slovenyayê) dihundirrîne. + contributors_za_html: |- + Afrîkaya Başûr: Daneyên ku ji Chief Directorate: + National Geo-Spatial Information hatine bidestxistin dihundirrîne. Mafê daneriyê yê dewletê parastî ye. + contributors_gb_html: |- + Mîrnişîna Yekbûyî: Daneyên Ordnance + Survey data © dihundirrîne; mafê daneriyê yê Crownê û mafê databasê parastî ne 2010-12. + contributors_footer_1_html: |- + Ji bo dêtayên van û çavkaniyên din yên ku di pêşdebirina OpenStreeteMapê de hatine bikaranîn agahiyên zêdetir werbigrî, xêra xwe ji ser OpenStreetMap Wiki'yê binêre rûpela Beşdaran. + contributors_footer_2_html: Daxilbûna daneyan a di OpenStreetMapê de nayê + maneya ku peydakera daneyan yê eslî OpenStreetMapê teswîb dike, garantiyekî + temîn dike an jî berpirsîyariyekê qebûl dike. + infringement_title_html: Îxlala mafê daneriyê + infringement_1_html: Kesên ku tevkariyên OSMê dikin bila ti carî ji bîr nekin + daneyên ji çavkaniyên ku mafên wan ên daneriyê parastî be (wekî nimûne Google + Maps an jî nexşeyên çapkirî) bêyî destûra eşkere yê xwediyê wan, ji van + çavkaniyan ti daneyek wernegrin. + infringement_2_html: Eger tu bawer bî materyalekî ku mafê we yê daneriyê parastî + ye bi şaşîtî li vê sîteyê an jî li daneya OpenStreetMapê hatibe zêdekirin + xêra xwe miracaeta prosedûra + me ya rakirinê bike an jî rasterast di rûpela + me ya dosyekirinê a online de qeyd bikin. + trademarks_title_html: Markên bazirganî + trademarks_1_html: OpenStreetMap, logoya mercekê û State of the Map; markên + ticarî yên OpenStreetMap Foundationê yên qeydkirî nin. Heke derbarê bikaranîna + markan de pirsên we hebin xêra xwe binêrin Polîtîkaya + Markên Ticarî. index: js_1: Tu an gerokek ku piştgiriyê nade JavaScriptê bi kar tînî an jî JavaScript hatiye neçalakkirin. @@ -1523,6 +1366,113 @@ ku-Latn: id_not_configured: iD nehatiye mîhengkirin no_iframe_support: Geroka te piştgiriyê nade iframe'yên HTML ku ji bo nişandana vê taybetmendiyê lazim e. + export: + title: Derxîne + area_to_export: Cihê ku wê were derxistin + manually_select: Bi destê xwe cihekî din bibijêre + format_to_export: Awayê derxistinê + osm_xml_data: Daneyên OpenStreetMapê a bi şiklê XML'yê + map_image: Risma Xerîteyê (tebeqeya standart nîşan dide) + embeddable_html: HTML'a ku dikare were pêvekirin + licence: Lîsans + export_details: Daneyên OpenStreetMapê di bin lîsansa Open + Data Commons Open Database License (ODbL) hatiye lîsanskirin. + too_large: + advice: Eger hûn ji yê jor nikaribin eksport bikin, xêra xwe yek ji van çavkaniyên + li xwarê a lîstekirî biemilînin. + body: Ev der ji bo ku wekî Daneya XML a OpenStreetMapê were eksportkirin zahf + mezin e. Xêra xwe hinek jî nêzîk bike an jî qadekî biçûktir bibijêre an + jî ji bo daxistina daneyên mezin yek ji van çavkaniyên lîstekirî yên li + jêr biemilîne. + planet: + title: Seyareya OSMê + description: Kopiyên daneyên OpenStreetMapê yê ku bi awayekî binîzam têne + nûkirin + overpass: + title: Overpass API + description: Vê qutiya sînorkar ji eyneyekî daneya OpenStreetMapê daxîne + geofabrik: + title: Daxistinên Geofabrikê + description: Kurteyên parzemîn, welat û bajarên bijartî yê ku bi awayekî + sîstematîk têne nûkirin + metro: + title: Xulasayê Bajara Mezin + description: Xulasayên ji bo bajarên mezin yên dinyayê û derdorê wan bajaran + other: + title: Çavkaniyên din + description: Çavkaniyên îlawe yên ku li ser wîkiya OpenStreetMapê hatine + lîstekirin + options: Vebijêrk + format: Format + scale: Pîvan (miqyas) + max: maksîmum + image_size: Mezinahiya Rismê + zoom: Nêzîk bike + add_marker: Nîşankereke îlawe bike xerîteyê + latitude: Hêlîpanː + longitude: Hêlîlarː + output: Encam + paste_html: Vê koda HTML'yê dikarî bi ser malperra xwe ve kopî bikî + export_button: Derxîne + fixthemap: + title: Pirgirêkek rabigihîne / Nexşeyê sererast bike + how_to_help: + title: Çawa dikarim alî we bikim? + join_the_community: + title: Tevlî civatê bibe + explanation_html: Heke te di daneyên nexşeya me de pirsgirêkek ferq kiribe, + wekî mînak kolanek an jî adrêsa te kêm be, riya herî baş a dewamkirinê + beşdarî civata me ya OpenStreetMapê bibe û tu bixwe rast bike an jî îlawe + bike. + add_a_note: + instructions_html: Tenê bitikîne ser îkona an + jî ji ser ekrana xerîteyê bitikîne ser eynî îkonê. Wê ev, ji nexşeyê re + nîşankerek deyne ku tu dikarî bi kaşkirinê cihê vê nîşankerê biguherînî. + Peyama xwe binivîse, piştre bitikîne ser qeyd bike'yê, wê nexşesazên din + lê bikolin. + other_concerns: + title: Meseleyên din + explanation_html: |- + Eger derbarê emilandina daneyan an jî derbarê naverokan de fikarên te hebin ji bo ku zêdetir agahiyên zagonî werbigrî xêra xwe binêre rûpela me ya mafê daneriyê an jî bi + koma xebatê yê OSMFê a eleqedar re bikeve îrtîbatê. + help: + title: Wergirtina alîkariyê + introduction: OpenStreetMap ji bo hînbûna projeyê, pirskirin û cewabdana pirsan, + û ji bo nîqaşên ku bi hevkarî têne kirin û ji bo belgekirina mijarên nexşeyê + xwediyê çend çavkaniyan e. + welcome: + url: /welcome + title: Bi xêr hatî OSMê + description: Bi vê rêbernameya kurt ê ku tê de esasên OpenStreetMapê heye + dest pê bike. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: Rêbera ji bo kesên ku nû dest pê kirine + description: Civata me, ji bo kesên ku nû dest pê kirine rêbertî dike. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Pirsek bipirsin an binêrin cewabên li ser malpera OSMê ya pirs-û-bersivê. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Lîsteya E-nameyan + description: Di lîsteyên e-nameyan yên deverî an jî herêmî yên cur bi cur + de hûn dikarin pirsan bipirsin an jî mijarên balkêş nîqaş bikin. + forums: + title: Forum + description: Pirs û gotûbêjên ji bo kesên ku înterfeysên bi şêweya panoya + daxuyaniyê tercîh dikin. + irc: + title: IRC + description: Sohbeta înteraktîv yê bi gelek zimanan û di gelek mijaran de. + switch2osm: + title: switch2osm + description: Alikariya ji bo şirket û komeleyên ku derbasî nexşe û xizmetên + din yên bi bingeha OpenStreetMapê dibin. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Ji bo belgeyên OSMyê yên bi berfirehî binêrin wîkiyê. sidebar: search_results: Encamên lêgerînê close: Bigire @@ -1625,6 +1575,58 @@ ku-Latn: image: Wêne alt: Nivîsa alternatîv url: URL + welcome: + title: Tu bi xêr hatî! + introduction_html: Tu bi xêr hatî OpenStreetMapê, nexşeya dinyayê yê azad û + yê ku bi rehetî dikare were sererastkirin. Niha te xwe qeyd kiriye û tu dikarî + dest bi nexşekirinê bikî. Va ye li vir rêbernameyek bilez yê tiştên muhîm + heye ku divê tu van bizanibî. + whats_on_the_map: + title: Çi hene li ser nexşeyê + on_html: OpenStreetMap cihekî ye ji bo nexşekirina tiştên heqîqî û rojane + - tê de bi milyonan avahî, rê û dêtayên derbarê deveran de heye. Her taybetmendiyê + cîhana rastîn ê ku bala te bikişîne dikarî nexşe bikî. + off_html: Çi tê de nabe? Daneyên serhişkane yên wek nirxandin, xisûsiyetên + dîrokî an jî ferazî û daneyên ji çavkaniyên ku mafên wan ên daneriyê parastî + be hatibin. Eger destûrekî we yê xisûsî tine be, ji nexşeyên online an jî + ji nexşeyên ser kaxizan kopî nekin. + basic_terms: + title: Termên esasî yên ji bo nexşekirinê + paragraph_1_html: OpenStreetMap xwediyê argoya xwe (zimanê xwe yê taybet) + ye. Vaye li vir çend peyvên ku wê bi kêrên we bên heye. + editor_html: Sererastker (edîtor) bername an jî malperekî + înternetê ye ku hûn wê dikarin ji bo sererastkirina nexşeyê bi kar bînin. + node_html: Girêk, nuqteyekî di nexşeyê de ye, wekî restorantek + an jî darek. + way_html: Rê, xetek an jî deverek yê wekî cadeyek, golek + an jî avahiyek e. + tag_html: Etîket, parçeyekî daneyê yê derbarê girêkek an + jî rêyek yê mîna navê restorantek an jî lîmîta lezê yê kolanek e. + rules: + title: Qaîdeyên vêǃ + paragraph_1_html: "Her çiqas qaîdeyen fermî yên OpenStreetMapê hindik bin + jî em ji hemû kesên tevkariya me dikin hêvî dikin ku bi civatê re bi hevkarî + bixebitin û di têkiliyê de bin. Eger tu bifikirî ku xebatên xwe ne bi destê + xwe bi rê ve bibî, xêra xwe ji jêr rêziknameyê bixwîne û bi ya rêziknameyê + bike: Barkirin + û \nSererastkirinên + otomatîk." + questions: + title: Pirsekî te heye? + paragraph_1_html: OpenStreetMap ji bo hînbûna projeyê, pirskirin û cewabdana + pirsan, û ji bo nîqaşên ku bi hevkarî têne kirin û ji bo belgekirina mijarên + nexşeyê xwediyê çend çavkaniyan e. Ji vir alîkariyê + werbigrin. + start_mapping: Dest bi çêkirina nexşeyan bike + add_a_note: + title: Ji bo sererastkirinê wextê te tine? Wê gavê notek lê zêde bike! + paragraph_1_html: Eger tu bixwazibî tenê tiştek biçûk rast bikî û wextê te + ji bo qeydbûnê û ji bo ku hînbibî mirov wê çawa sererast bike tine be, tenê + notek binivîsî bes e. + paragraph_2_html: 'Tenê here nexşeyê û bitikîne + ser sembola notê: . Wê ev, li nexşeyê nîşankerek + zêde bike, ê ku tu bikaribî bi kaşkirinê cihê wî biguherînî. Peyamê xwe + binivîse, dû re li qeydkirin''ê bitikîne. Nexşesazên din wê lê bikolin.' trace: visibility: private: Xisûsî (tenê wekî nuqteyên anonîm û nerêzkirî tê belavkirin) @@ -1668,6 +1670,7 @@ ku-Latn: trace_header: upload_trace: Şopek GPSê bar bike see_all_traces: Hemû şopan bibîne + see_my_traces: Şopên min bibîne traces_waiting: one: '%{count} şopê te yê ku li hêviya barkirinê disekine heye. Ji bo ku ji bikarhênerên din re nebî asteng, xêra xwe hêj ku te zêdetir şopan bar nekir, @@ -1696,6 +1699,7 @@ ku-Latn: delete_track: Vê şopê jê bibe trace_not_found: Şop nehate dîtin! visibility: Kî dikare bibîneː + confirm_delete: Vê şopê dixwazî jê bibî? trace_paging_nav: showing_page: Rûpel %{page} older: Şopên kevintir @@ -1718,6 +1722,7 @@ ku-Latn: map: nexşe list: public_traces: Şopên GPSê yên giştî (ji her kesê re vekirî) + my_traces: Şopên min ên GPSê public_traces_from: Şopên GPSê yên giştî yên ji %{user} description: Çavê xwe li nûkirinên şopên GPSê yên dawîn bigerîne tagged_with: ' bi %{tags} hate etîketkirin' @@ -1755,7 +1760,7 @@ ku-Latn: Xêra xwe ji bo ku Şertên Beşdaran bibînî têkeve înterfeysa webê. Hewce nake ku tu van qebûl bikî, lê divê tu van bibînî. oauth: - oauthorize: + authorize: title: Ji bo gihîna hesabê xwe selahiyetê bide request_access: Sepana %{app_name} dixwaze bigihîje hesabê te, %{user}. Xêra xwe kontrol bike ku tu dixwazî ev sepan bigihîje van taybetmendiyên li jêr. @@ -1769,11 +1774,11 @@ ku-Latn: allow_write_gpx: barkirina şopên GPSê. allow_write_notes: guherandina notan. grant_access: Destûra gihîştinê bide - oauthorize_success: + authorize_success: title: Ji bo gihînê destûr hate dayîn allowed: Tu destûr dayî sepana %{app_name} ji bo ku bigîhîje hesabê te. verification: Koda teyîdkirinê %{code} ye. - oauthorize_failure: + authorize_failure: title: Daxwaza selahiyetdarkirinê bi ser neket denied: Tu destûr nedayî sepana %{app_name} ji bo ku bigîhîje hesabê te. invalid: Nîşana destûrdariyê ne derbasdar e. @@ -2018,6 +2023,7 @@ ku-Latn: if set location: Ji bo ku bikarhênerên nêzî xwe bibînî ji ser rûpela %{settings_link} cihê malê xwe bide diyarkirin. settings_link_text: eyaran + my friends: Hevalên min no friends: Te hêj ji xwe re hevalek çênekiriye. km away: '%{count} km dûr e' m away: '%{count} m dûr e' @@ -2220,7 +2226,7 @@ ku-Latn: confirm: Bipejirîne fail: Rola `%{role}' ji bikarhêner `%{name}' nikare were rakirin. Xêra xwe kontrol bike ka bikarhêner û rol muteber in an na. - user_block: + user_blocks: model: non_moderator_update: Ji bo ku astengiyek çêbikî an jî nû bikî, divê tu moderatorek bibî. @@ -2285,20 +2291,6 @@ ku-Latn: period: one: 1 saetê other: '%{count} saetan' - partial: - show: Nîşan bide - edit: Biguherîne - revoke: Betal bike! - confirm: Tu piştrast î? - display_name: Bikarhênerê astengkirî - creator_name: Çêker - reason: Sedema astengkirinê - status: Rewş - revoker_name: Yê ku betal kiriyeː - not_revoked: (ne betalkirî) - showing_page: Rûpel %{page} - next: Pêşve » - previous: « Paşve helper: time_future: Di %{time} de diqede. until_login: Heta ku bikarhêner têkeve aktîv e @@ -2328,8 +2320,22 @@ ku-Latn: back: Hemû astengiyan bibîne revoker: Yê ku rakiriyeː needs_view: Divê bikarhêner berî ku ev astengî rabe têbikeve. - note: - description: + block: + not_revoked: (ne betalkirî) + show: Nîşan bide + edit: Biguherîne + revoke: Betal bike! + blocks: + display_name: Bikarhênerê astengkirî + creator_name: Çêker + reason: Sedema astengkirinê + status: Rewş + revoker_name: Yê ku betal kiriyeː + showing_page: Rûpel %{page} + next: Pêşve » + previous: « Paşve + notes: + comment: opened_at_html: Berî %{when} hate çêkirin opened_at_by_html: Berî %{when} ji aliyê %{user} ve hate çêkirin commented_at_html: Berî %{when} hate nûkirin @@ -2459,7 +2465,7 @@ ku-Latn: distance: Mesafe errors: no_route: Di navbera van du cihan de rotayek nehate dîtin. - no_place: Bibore - ev der nehate dîtin. + no_place: Bibore - '%{place}' nehate dîtin. instructions: continue_without_exit: Bi %{name} dewam bike slight_right_without_exit: Ji ser %{name} hinek bi rastê ve @@ -2498,6 +2504,7 @@ ku-Latn: way: Rê relation: Eleqe nothing_found: Taybetmendî nehatin dîtin + timeout: Dema girêdana %{server} bihurî context: directions_from: Tarîfa rêyê ji vir bide destpêkirin directions_to: Vê derê bike armanca xwe @@ -2505,7 +2512,7 @@ ku-Latn: show_address: Adrêsê nîşan bide query_features: Taybetmendiyan nîşan bide centre_map: Vê der bike merkeza nexşeyê - redaction: + redactions: edit: description: Danasîn heading: Redaksiyonê biguherîne diff --git a/config/locales/lb.yml b/config/locales/lb.yml index 8f1638399..51260077e 100644 --- a/config/locales/lb.yml +++ b/config/locales/lb.yml @@ -62,6 +62,8 @@ lb: name: Potlatch 1 id: name: iD + potlatch2: + name: Potlatch 2 browse: created: Ugeluecht closed: Zou @@ -184,7 +186,7 @@ lb: list: title: Sette vun Ännerungen title_user: Sete vun Ännerunge vum %{user} - title_friend: Sette vun Ännerunge vun Äre Frënn + title_friend: Ännerunge vun Äre Frënn title_nearby: Sette vun Ännerunge vu Benotzer déi nobäi sinn empty: Keng Sette vun Ännerunge fonnt. empty_area: Keng Sette vun Ännerungen an dëser Géigend. @@ -237,31 +239,6 @@ lb: ago: viru(n) %{ago} newer_comments: Méi nei Bemierkungen older_comments: Méi al Bemierkungen - export: - title: Exportéieren - start: - area_to_export: Beräich fir den Export - manually_select: Sicht manuell eng aner Géigend eraus - format_to_export: Format fir z'exportéieren - osm_xml_data: OpenStreetMap-XML-Daten - licence: Lizenz - too_large: - planet: - description: Regelméisseg aktualiséiert Kopie vun der kompletter OpenStreetMap - Datebank - other: - title: Aner Quellen - description: Zousätzlech Quelle stinn an der OpenStreetMap Wiki - options: Optiounen - format: Format - scale: Maassstab - max: max - image_size: Gréisst vum Bild - zoom: Zoom - latitude: 'Geographesch Breet:' - longitude: 'Geographesch Längt:' - output: Resultat - export_button: Exportéieren geocoder: search: title: @@ -319,6 +296,8 @@ lb: library: Bibliothéik marketplace: Maartplaz monastery: Klouschter + nightclub: Bar (Nightclub) + nursing_home: Altersheim office: Büro parking: Parking parking_space: Parkplaz(en) @@ -349,6 +328,7 @@ lb: vending_machine: Verkaafsautomat veterinary: Déiereklinik waste_basket: Drecksback + youth_centre: Jugendhaus boundary: national_park: Nationalpark bridge: @@ -383,6 +363,7 @@ lb: ford: Fuert milestone: Kilometersteen motorway: Autobunn + motorway_link: Autobunnsopfaart path: Pad pedestrian: Fousswee platform: Quai @@ -422,12 +403,14 @@ lb: "yes": Kräizung landuse: cemetery: Kierfecht + construction: Chantier farm: Bauerenhaff farmland: Akerland farmyard: Bauerenhaff forest: Bësch garages: Garagen grass: Wiss + greenfield: Gréngzone industrial: Industriezone military: Militairegebitt mine: Minn @@ -444,6 +427,7 @@ lb: miniature_golf: Minigolf nature_reserve: Naturschutzgebitt park: Park + pitch: Sportsterrain playground: Spillplaz sauna: Sauna stadium: Stadion @@ -481,6 +465,7 @@ lb: forest: Bësch geyser: Geysir glacier: Gletscher + grassland: Wiss hill: Hiwwel island: Insel land: Land @@ -533,6 +518,7 @@ lb: disused: Fréier Eisebunn junction: Eisebunnskräizung miniature: Miniatur-Eisebunn + monorail: Monorail platform: Zuchquai proposed: Proposéiert Eisebunnslinn station: Gare (Eisebunn) @@ -561,6 +547,7 @@ lb: furniture: Miwwelgeschäft gallery: Galerie hairdresser: Coiffeur + hardware: Quincaillerie jewelry: Bijouterie laundry: Botzerei lottery: Lotterie @@ -579,6 +566,7 @@ lb: tailor: Schneider travel_agency: Reesbüro tyres: Peuenhändler + wine: Vinothéik "yes": Geschäft tourism: apartment: Appartement @@ -618,6 +606,7 @@ lb: home: Op déi Plaz zréckgoen déi als Doheem definéiert ass logout: Ausloggen log_in: Aloggen + sign_up: Mellt Iech un edit: Änneren history: Versiounen export: Exportéieren @@ -644,63 +633,6 @@ lb: text: En Don maachen learn_more: Méi wëssen more: Méi - license_page: - foreign: - title: Iwwer dës Iwwersetzung - english_link: den engleschen Original - native: - title: Iwwer dës Säit - native_link: lëtzebuergesch Versioun - legal_babble: - title_html: Copyright a Lizenz - more_title_html: Fir méi ze wëssen - infringement_title_html: Copyright-Verletzung - welcome_page: - title: Wëllkomm! - whats_on_the_map: - title: Wat ass op der Kaart - rules: - title: Regelen! - questions: - title: Nach Froen? - add_a_note: - title: Keng Zäit fir z'änneren? Setzt eng Notiz derbäi! - fixthemap: - title: E Problem mellen / D'Kaart verbesseren - how_to_help: - title: Wéi Hëllefen - join_the_community: - title: Maacht bei eis mat - other_concerns: - title: Aner Uleies - help_page: - title: Hëllef kréien - welcome: - url: /welcome - title: Wëllkomm bäi OSM - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: Guide fir nei Benotzer - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Stellt eng Fro oder kuckt no Äntwerten um OSM-Site mat de Froen - an Äntwerten. - mailing_lists: - title: Mailing-Lëschten - forums: - title: Forumen - irc: - title: IRC - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: Weider - local_knowledge_title: Lokaalt Wëssen - open_data_title: Open Data - legal_title: Legal - partners_title: Partner notifier: diary_comment_notification: hi: Salut %{to_user}, @@ -785,6 +717,7 @@ lb: unread_button: Als net gelies markéieren delete_button: Läschen back: Zréck + to: Fir sent_message_summary: delete_button: Läschen mark: @@ -793,19 +726,96 @@ lb: delete: deleted: Message geläscht site: + about: + next: Weider + local_knowledge_title: Lokaalt Wëssen + open_data_title: Open Data + legal_title: Legal + partners_title: Partner + copyright: + foreign: + title: Iwwer dës Iwwersetzung + english_link: den engleschen Original + native: + title: Iwwer dës Säit + native_link: lëtzebuergesch Versioun + legal_babble: + title_html: Copyright a Lizenz + more_title_html: Fir méi ze wëssen + infringement_title_html: Copyright-Verletzung index: js_1: Dir hutt entweder e Browser dee JavaScript net ënnerstëtzt oder Dir hutt JavaScript desaktivéiert. + permalink: Permanentlink + shortlink: Kuerze Link createnote: Eng Notiz derbäisetzen edit: not_public: Dir hutt net agestallt datt Är Ännerungen ëffentlech sinn. user_page_link: Benotzersäit anon_edits_link_text: Fannt eraus firwat dat de Fall ass. + export: + title: Exportéieren + area_to_export: Beräich fir den Export + manually_select: Sicht manuell eng aner Géigend eraus + format_to_export: Format fir z'exportéieren + osm_xml_data: OpenStreetMap-XML-Daten + licence: Lizenz + too_large: + planet: + description: Regelméisseg aktualiséiert Kopie vun der kompletter OpenStreetMap + Datebank + other: + title: Aner Quellen + description: Zousätzlech Quelle stinn an der OpenStreetMap Wiki + options: Optiounen + format: Format + scale: Maassstab + max: max + image_size: Gréisst vum Bild + zoom: Zoom + latitude: 'Geographesch Breet:' + longitude: 'Geographesch Längt:' + output: Resultat + export_button: Exportéieren + fixthemap: + title: E Problem mellen / D'Kaart verbesseren + how_to_help: + title: Wéi Hëllefen + join_the_community: + title: Maacht bei eis mat + other_concerns: + title: Aner Uleies + help: + title: Hëllef kréien + welcome: + url: /welcome + title: Wëllkomm bäi OSM + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: Guide fir nei Benotzer + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Stellt eng Fro oder kuckt no Äntwerten um OSM-Site mat de Froen + an Äntwerten. + mailing_lists: + title: Mailing-Lëschten + forums: + title: Forumen + irc: + url: http://irc.openstreetmap.org/ + title: IRC + switch2osm: + url: https://switch2osm.org/ + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: search_results: Resultater vum Sichen close: Zoumaachen search: search: Sichen + from: Vum where_am_i: Wou ass dat? submit_text: Lass key: @@ -843,6 +853,8 @@ lb: - Universitéit summit: - Spëtzt + private: Privaten Terrain + construction: Stroossen am Bau bicycle_shop: Vëlosgeschäft bicycle_parking: Vëlosparking toilets: Toiletten @@ -862,6 +874,16 @@ lb: image: Bild alt: Alternativen Text url: URL + welcome: + title: Wëllkomm! + whats_on_the_map: + title: Wat ass op der Kaart + rules: + title: Regelen! + questions: + title: Nach Froen? + add_a_note: + title: Keng Zäit fir z'änneren? Setzt eng Notiz derbäi! trace: edit: filename: 'Numm vum Fichier:' @@ -915,10 +937,12 @@ lb: by: vum in: an map: Kaart + list: + my_traces: Meng GPS Spueren description: description_without_count: GPX-Fichier vum %{user} oauth: - oauthorize: + authorize: allow_read_prefs: Är Benotzerastellunge liesen. allow_write_prefs: Är Benotzerastellungen änneren. allow_write_api: d'Kaart änneren. @@ -1028,6 +1052,7 @@ lb: no_such_user: title: Sou e Benotzer gëtt et net heading: De Benotzer %{user} gëtt et net + deleted: geläscht view: my diary: Mäi Blog my edits: Meng Ännerungen @@ -1036,6 +1061,7 @@ lb: my profile: Mäi Profil my settings: Meng Astellungen my comments: Meng Bemierkungen + oauth settings: OAuth-Astellungen blocks by me: vu Mir Gespaart send message: Message schécken diary: Blog @@ -1050,6 +1076,7 @@ lb: status: 'Status:' description: Beschreiwung settings_link_text: Astellungen + my friends: Meng Frënn no friends: Dir hutt nach keng Frënn derbäigesat. km away: '%{count} km ewech' m away: '%{count} m ewech' @@ -1100,6 +1127,8 @@ lb: keep image: Dat aktuellt Bild behalen delete image: Dat aktuellt Bild ewechhuelen replace image: Dat aktuellt Bild ersetzen + latitude: 'Breedegrad:' + longitude: 'Längegrad:' save changes button: Ännerunge späicheren make edits public button: All meng Ännerunge ëffentlech maachen return to profile: 'Zréck op de Profil:' @@ -1168,9 +1197,12 @@ lb: confirm: Confirméieren fail: D'Roll '%{role}' konnt net vum Benotzer '%{name}' ewechgeholl ginn. Kuckt w.e.g. no ob de Benotzer an d'Roll allen zwee valabel sinn. - user_block: + user_blocks: + not_found: + back: Zréck op d'Iwwersiicht new: submit: Spär uleeën + tried_contacting: Ech hunn de Benotzer kontaktéiert an e gefrot fir opzehalen. back: All Späre weisen edit: submit: Spär aktualiséieren @@ -1184,20 +1216,10 @@ lb: empty: Et goufe nach keng Späre gemaach. revoke: revoke: Ophiewen! + flash: Dës Spär gouf opgehuewen. period: one: 1 Stonn other: '%{count} Stonnen' - partial: - show: Weisen - edit: Änneren - revoke: Ophiewen! - confirm: Sidd Dir sécher? - display_name: Gespaarte Benotzer - reason: Grond fir d'Spär - status: Status - showing_page: Säit %{page} - next: Nächst » - previous: « Vireg blocks_on: title: Späre vum %{name} empty: '%{name} gouf bis elo nach net gespaart.' @@ -1215,7 +1237,20 @@ lb: confirm: Sidd Dir sécher? reason: 'Grond fir d''Spär:' back: All Späre weisen - note: + block: + not_revoked: (net opgehuewen) + show: Weisen + edit: Änneren + revoke: Ophiewen! + blocks: + display_name: Gespaarte Benotzer + reason: Grond fir d'Spär + status: Status + revoker_name: Opgehuewe vum + showing_page: Säit %{page} + next: Nächst » + previous: « Vireg + notes: rss: title: OpenStreetMap Notizen entry: @@ -1258,6 +1293,8 @@ lb: changesets: show: comment: Bemierkung + subscribe: Abonnéieren + unsubscribe: Ofbestellen hide_comment: verstoppen unhide_comment: nees weisen notes: @@ -1270,13 +1307,18 @@ lb: comment: Bemierkung directions: ascend: Vu kleng op grouss + engines: + osrm_car: Auto (OSRM) descend: Vu grouss op kleng directions: Richtungen distance: Distanz + errors: + no_place: Mir konnten d'Plaz '%{place}' leider net fannen. instructions: continue_without_exit: Virun op %{name} offramp_right_with_name: Déi riets Opfaart op %{name} huelen onramp_right_without_exit: Bei der Opfaart riets ofbéien op %{name} + onramp_right: Op der Opfaart no riets ofbéien endofroad_right_without_exit: Um Ënn vun der Strooss riets ofbéien op %{name} merge_right_without_exit: Riets areien op %{name} fork_right_without_exit: Um Ënn vun der Strooss riets ofbéien op %{name} @@ -1284,6 +1326,7 @@ lb: sharp_left_without_exit: Schaarf lénks op %{name} offramp_left_with_name: Déi lénks Opfaart op %{name} huelen onramp_left_without_exit: Bei der Opfaart lénks ofbéien op %{name} + onramp_left: Op der Opfaart no lénks ofbéien endofroad_left_without_exit: Um Ënn vun der Strooss lénks ofbéien op %{name} merge_left_without_exit: Lénks areien op %{name} fork_left_without_exit: Um Ënn vun der Strooss lénks ofbéien op %{name} @@ -1308,7 +1351,7 @@ lb: add_note: Eng Notiz hei derbäisetzen show_address: Adress weisen centre_map: Kaart hei zentréieren - redaction: + redactions: edit: description: Beschreiwung new: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 8d94f6f1a..636d2034d 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -343,54 +343,6 @@ lt: ago: prieÅ¡ %{ago} newer_comments: Naujesni komentarai older_comments: Senesni komentarai - export: - title: Eksportuoti - start: - area_to_export: Eksportuotinas plotas - manually_select: Rankiniu bÅ«du parinkti kitą sritį - format_to_export: Eksporto formatas - osm_xml_data: OpenStreetMap XML duomenys - map_image: Žemėlapio vaizdas (rodo standartinį sluoksnį) - embeddable_html: Pritaikomas HTML - licence: Licencija - export_details: OpenStreetMap duomenų licencija - Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Jei aukščiau pateiktas eksportas nepavyko, pabandykite vieną iÅ¡ žemiau - iÅ¡vardintų Å¡altinių:' - body: Å i sritis per didelė, kad bÅ«tų galima eksportuoti OpenStreetMap XML - duomenis. Padidinkite, parinkite mažesnę sritį arba naudokite vieną iÅ¡ didelio - duomenų kiekio atsiuntimo Å¡altinių. - planet: - title: OSM planeta - description: PeriodiÅ¡kai atnaujinamos pilnos OpenStreetMap duomenų bazės - kopijos - overpass: - title: Overpass API - description: Atsisiųsti Å¡ią apimtį iÅ¡ OpenStreetMap duombazės kopijos - geofabrik: - title: Geofabrik atsisiuntimai - description: PeriodiÅ¡kai atnaujinami kontinentų, Å¡alių ir kai kurių miestų - duomenys. - metro: - title: Metro iÅ¡karpos - description: Pagrindinių pasaulio miestų ir aplinkinių teritorijų duomenų - iÅ¡karpos - other: - title: Kiti Å¡altiniai - description: Papildomi Å¡altiniai iÅ¡vardinti OpenStreetMap wiki - options: Parinktys - format: Formatas - scale: Mastelis - max: maksimalus - image_size: Žemėlapio dydis - zoom: Padidinti - add_marker: Pridėti žymeklį žemėlapyje - latitude: 'Plat:' - longitude: 'Ilg:' - output: Rezultatas - paste_html: Ä®kelkite šį HTML į svetainę - export_button: Eksportuoti geocoder: search: title: @@ -990,256 +942,6 @@ lt: text: Paremkite learn_more: Sužinoti daugiau more: Daugiau - license_page: - foreign: - title: Apie šį vertimą - text: Esant konfliktui tarp Å¡io iÅ¡versto puslapio ir %{english_original_link}, - pirmenybė bus teikiama angliÅ¡kajai versijai. - english_link: anglų originalas - native: - title: Apie šį puslapį - text: JÅ«s žiÅ«rite angliÅ¡ką autorinių teisių puslapį. JÅ«s galite sugrįžti prie - Å¡io puslapio %{native_link} arba tiesiog baigti skaitymą apie autorines teises - ir %{mapping_link}. - native_link: LietuviÅ¡ka versija - mapping_link: pradėti žymėjimą - legal_babble: - title_html: Autorinės teisės ir licencija - intro_1_html: |- - OpenStreetMap® yra laisvai prieinamas, licencijuotas OpenStreetMap fondo (OSMF) pagal „Open Data - Commons Open Database License“ (ODbL). - intro_2_html: |- - JÅ«s galite laisvai platinti ir pritaikyti mÅ«sų duomenimis, taip ilgai kiek jÅ«s kredituosite OpenStreetMap ir jos kÅ«rėjus. Jei naudodamiesi mÅ«sų žemėlapiais sukursite savo duomenis, jÅ«sų duomenis turi bÅ«ti licenzijuoti pagal tą pačią licenziją. - full Legalus kodas paaiÅ¡kins jÅ«sų teises ir atsakomybes. - intro_3_html: |- - MÅ«sų žemėlapio žymėjimas, bei mÅ«sų dokumentacija, yra licencijuota pagal Creative - Commons Attribution-ShareAlike 2.0 licenciją (CC-BY-SA). - credit_title_html: Ką pažymėti prisidėjus prie projekto - credit_1_html: |- - Mes reikalaujame, kad jÅ«s kredituotumėte "© OpenStreetMap - autoriai ". - credit_2_html: Jums turi bÅ«ti aiÅ¡ku, kad duomenys kurie yra prieinami atvirai, - ir jei jÅ«s naudojatės mÅ«sų žemėlapiu, kuri licencijuota pagal CC-BY-SA. JÅ«s - turėtumėte paspausti Å¡ią nuorodą, vedančią į šį - autorinių teisių puslapį. Kita vertus, ir kaip reikalavimas jei platinate - OSM duomenų forma, jÅ«s galite nurodyti licenciją (-as). Žiniasklaidos priemonėse, - kur nuorodos pateikimas yra neįmanoma (pvz. spausdinti darbai), mes siÅ«lome - jÅ«sų skaitytojus nukreipti į openstreetmap.org (ko gero iÅ¡plečiant OpenStreetMap - iki pilno adreso), į opendatacommons.org ir jei tinka, į creativecommons.org - credit_3_html: |- - NarÅ¡ymui po elektroninį žemėlapį, kÅ«rėjų sąraÅ¡as turėtų pasirodyti žemėlapio kampe. - - Pavyzdžiui: - attribution_example: - alt: Pavyzdys kaip galima priskirti paskyrimus OpenStreetMap svetainėje - title: Priskyrimo pavyzdys - more_title_html: Sužinokite daugiau - more_1_html: |- - Sužinokite daugiau apie mÅ«sų duomenų naudojimą, kaip pažymėti prisidėjusius OSMF licencijavimo puslapyje ir bendruomenės DUK dėl legalumo. - more_2_html: |- - Nors OpenStreetMap duomenys yra atviri, mes negalime pateikti - nemokamos žemėlapių API trečiosioms Å¡alims. - PeržiÅ«rėkite mÅ«sų API naudojimo politiką, - Kaladėlių naudojimo politiką, - bei Nominatim naudojimo politiką. - contributors_title_html: MÅ«sų autoriai - contributors_intro_html: MÅ«sų autoriai yra tÅ«kstančiai įvairių žmonių. Taip - pat apimame ir laisvai prieinamą turinį iÅ¡ valstybinių kartografijos agentÅ«rų, - taip pat ir kitų įvairių Å¡altinių. - contributors_at_html: |- - Austrija: Turi duomenis nuo: - Stadt Wien (under - CC BY), - Land Vorarlberg and - Land Tirol (under CC-BY AT su pataisomis). - contributors_ca_html: |- - Kanada: Turi duomenis nuo: - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), bei StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: 'Suomija: Yra duomenų iÅ¡ Nacionalinio - žemės tyrimo Suomijos topografijos duomenų bazės ir kitų duomenų rinkinių, - pagal NLSFI - Licensiją.' - contributors_fr_html: |- - PrancÅ«zija: Turi duomenis nuo: - Direction Générale des Impôts. - contributors_nl_html: |- - Nyderlandai: Apima © AND duomenys, 2007 - (www.and.com) - contributors_nz_html: |- - Naujoji Zelandija: Turi duomenys nuo - Land Information New Zealand. KarÅ«nos iÅ¡saugotos autorinės teisės. - contributors_si_html: |- - Slovėnija: Panaudoti duomenys iÅ¡ ApžiÅ«ros ir kartografavimo valdžios bei - Žemės Å«kio, miÅ¡kų ir maisto ministerijos - (vieÅ¡a Slovėnijos informacija). - contributors_za_html: |- - Pietų Afrika: Turi duomenis nuo: - Chief Directorate: - National Geo-Spatial Information, Valstybinės iÅ¡saugotos autoriaus teisės. - contributors_gb_html: |- - Jungtinė Karalystė: Apima Ordnance - Survey data © KarÅ«nos autorinės teisės ir duomenų teisės - 2010-12. - contributors_footer_1_html: Kad sužinotumėte daugiau apie tuos, ir kitus Å¡altinius, - kurie buvo naudojami padėti vystyti OpenStreetMap, peržiÅ«rėkite Vystytojų - puslapį OpenStreetMap dokumentacijoje - contributors_footer_2_html: Duomenų įtraukimas OpenStreetMap nereiÅ¡kia, kad - originalių duomenų tiekėjas patvirtina OpenStreetMap, nenumatyta jokių garantijų - ir neprisiimama jokios atsakomybės. - infringement_title_html: Autorių teisių pažeidimas - infringement_1_html: OSM pildytojai primenami niekada nesinaudoti autorių teisėmis - apsaugotų Å¡altinių (pvz. Google Maps ar spausdintų žemėlapių) be leidimo naudoti. - infringement_2_html: Jei manote, kad autorių teisių saugomi darbai buvo netinkamai - panaudoti pildant OpenStreetMap duomenų bazę ar Å¡ią svetainę, praneÅ¡kite mums - Å¡ioje - svetainėje arba užpildykite šį - pildymų lapą. - trademarks_title_html: Prekių ženklai - trademarks_1_html: OpenStreetMap, lupos logotipas ir „State of the Map“ yra - registruoti OpenStreetMap fondo prekių ženklai. Jei turite klausimų apie Å¡ių - ženklų naudojimą, siųskite savo klausimus Licencijavimo - darbinei grupei. - welcome_page: - title: Sveiki atvykę! - introduction_html: Sveikiname prisijungus prie OpenStreetMap - laisvo ir redaguojamo - pasaulio žemėlapio. Dabar, kai prisijungėte, galite pradėti žymėti. Čia trumpa - instrukcija su svarbiausiais dalykais, kuriuos turėtumėte žinoti. - whats_on_the_map: - title: Kas yra žemėlapyje - on_html: OpenStreetMap žymimi objektai, kurie yra tikri ir dabartiniai - - tai milijonai pastatų, kelių ir kitos vietovių informacijos. Galite žymėti - bet kokius jus dominančius realaus pasaulio objektus. - off_html: Kas tikrai netinka, tai subjektyvÅ«s duomenys, tokie kaip - įvertinimai, istoriniai arba hipotetiniai objektai, taipogi duomenys iÅ¡ autorinių - teisių saugomų duomenų Å¡altinių. Jei negavote specialaus leidimo - nekopijuokite - iÅ¡ internetinių ar popierinių žemėlapių. - basic_terms: - title: Pagrindiniai žymėjimo terminai - paragraph_1_html: OpenStreetMap turi savo žodyną. Čia keli pagrindiniai naudojami - terminai/žodžiai. - editor_html: Rengyklė - tai programa arba svetainė su kuria - galite redaguoti žemėlapį. - node_html: node/taÅ¡kas - taÅ¡kas žemėlapyje, pavyzdžiui vienas - restoranas ar medis. - way_html: kelias/way - linija ar plotas, pavyzdžiui kelias, - upeliukas, ežeras ar pastatas. - tag_html: žyma/tag - informacija apie taÅ¡ką ar liniją, pavyzdžiui - restorano pavadinimas arba kelio greičio apribojimas. - rules: - title: Taisyklės! - paragraph_1_html: "OpenStreetMap turi nedaug formalių taisyklių, bet mes tikimės, - kad visi dalyviai\nbendradarbiaus ir bendraus su bendruomene. Jei svarstote - bet kokius\nveiksmus, iÅ¡skyrus rankinį redagavimą, perskaitykite ir laikykitės - rekomendacijų apie\nimportus - ir \nautomatizuotą - redagavimą." - questions: - title: Turite klausimų? - paragraph_1_html: |- - Yra kelios vietos, kur galima rasti informacijos apie OpenStreetMap, užduoti klausimus, diskutuoti ir dokumentuoti žymėjimo temas. - Pagalbą rasite čia. - start_mapping: Pradėti žymėti - add_a_note: - title: Neturite laiko redaguoti? Pridėkite pastabą! - paragraph_1_html: Jei norite pataisyti kažką nedidelio ir neturite laiko registruotis - ir mokytis redaguoti - labai paprasta tiesiog palikti pastabą. - paragraph_2_html: 'Tiesiog eikite į žemėlapį ir spauskite - pastabų piktogramą: . Žemėlapyje bus pridėtas - žymeklis, kurį galite pertempti į kitą vietą. Pridėkite jÅ«sų praneÅ¡imą, tada - spauskite įraÅ¡yti ir kiti žymėtojai patyrinės jÅ«sų pastabą.' - fixthemap: - title: PraneÅ¡ti apie problemą / taisyti žemėlapį - how_to_help: - title: Kaip padėti - join_the_community: - title: Prisijungti prie bendruomenės - explanation_html: Jei pastebėjote žemėlapio duomenų problemą, pavyzdžiui radote - trÅ«kstamą kelią ar adresą, geriausias variantas yra prisijungti prie OpenStreetMap - bendruomenės ir pridėti ar pataisyti duomenis patiems. - add_a_note: - instructions_html: Tiesiog spauskite arba tą pačią - piktogramą žemėlapyje. Žemėlapyje bus pridėtas žymeklis, kurį galėsite pertempti. - Pridėkite jÅ«sų praneÅ¡imą, kurį kiti žymėtojai perskaitys ir iÅ¡tirs. - other_concerns: - title: Kiti rÅ«pesčiai - explanation_html: Jei abejojate, kaip mÅ«sų duomenys naudojami arba dėl turinio, - perskaitykite mÅ«sų teisių ir licencijos puslapį, - kur rasite daugiau teisinės informacijos, arba susisiekite su atitinkama OSMF darbo grupe. - help_page: - title: Pagalbos paieÅ¡ka - introduction: Yra kelios vietos, kur galima rasti informacijos apie OpenStreetMap, - užduoti klausimus, diskutuoti ir dokumentuoti žymėjimo temas. - welcome: - url: /welcome - title: Sveiki atvykę į OSM - description: Pradėkite Å¡iuo greitu vadovu apie OpenStreetMap pagrindus. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Lt:Beginners%27_guide - title: Pradedančiojo vadovas - description: Bendruomenės palaikomas vadovas pradedantiesiems. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Užduokite klausimą arba ieÅ¡kokite atsakymą OSM klausimų-ir-atsakymų - svetainėje. - mailing_lists: - title: El. paÅ¡to grupės - description: Užduokite klausimą ar diskutuokite apie įdomius dalykus daugelyje - teminių ar regioninių el. paÅ¡to grupių. - forums: - title: Forumai - description: Klausimai ir diskusijos tiems, kas teikia pirmenybę el. skelbimų - lentos stiliaus sąsajai. - irc: - title: IRC - description: InteraktyvÅ«s pokalbiai daugeliu kalbų, daugeliu temų. - switch2osm: - title: switch2osm - description: Pagalba kompanijoms ir organizacijoms pereinant į OpenStreetMap - paremtus žemėlapius ir kitas paslaugas. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: NarÅ¡ykite OSM detalios dokumentacijos wiki. - about_page: - next: Kitas - copyright_html: ©OpenStreetMap
        talkininkai - used_by: '%{name} duomenis naudoja šimtai svetainių, mobilių aplikacijų ir įrenginių' - lede_text: OpenStreetMap kuria bendruomenė žymėtojų, kuriančių ir prižiūrinčių - kelių, takų, kavinių, stočių ir kitokius pasaulio duomenis. - local_knowledge_title: Vietinės žinios - local_knowledge_html: OpenStreetMap išskiria vietines žinias. Talkininkai naudoja - orotofoto nuotraukas, GPS įrenginius ir paprastus lauko žemėlapius, tikrindami, - kad OSM duomenys yra teisingi ir aktualūs. - community_driven_title: Bendruomenės vystomas - community_driven_html: OpenStreetMap bendruomenė yra įvairi, aistringa ir auganti - kiekvieną dieną. Tarp mūsų talkininkų yra žymėtojai entuziastai, GIS profesionalai, - OSM stotis prižiūrintys inžinieriai, žmonės žymintys nelaimių vietas ir daug - kitų. Norėdami daugiau sužinoti apie bendruomenę, skaitykite naudotojų - dienoraščius, bendruomenės dienoraščius - ir OSM fondo svetainę. - open_data_title: Atviri duomenys - open_data_html: 'OpenStreetMap yra atviri duomenys: jūs galite laisvai - juos naudoti bet kokiems tikslams, tol kol nepamirštate paminėti OpenStreetMap - ir jo talkininkus. Jei keičiate arba pildote duomenis, galite rezultatą teikti - tik su tokia pačia licencija. Daugiau informacijos rasite Teisės - ir licencija.' - legal_title: Teisės - legal_html: "Šis puslapis ir daugelis kitų susijusių paslaugų yra formaliai valdomi - \nOpenStreetMap fondo (OSMF) \nbendruomenės - vardu. Visų OSMF valdomų paslaugų naudojimas yra\npriklausomas nuo \nPriimtino - naudojimo politikos ir mūsų Privatumo - politikos.\n
        \nSusisiekite - su OSMF, \njei turite licencijavimo, autoriaus teisių ar kitų teisinių klausimų - ar problemų." - partners_title: Partneriai notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} pakomentavo dienoraščio įrašą' @@ -1422,6 +1124,155 @@ lt: delete: deleted: PraneÅ¡imas iÅ¡trintas site: + about: + next: Kitas + copyright_html: ©OpenStreetMap
        talkininkai + used_by: '%{name} duomenis naudoja šimtai svetainių, mobilių aplikacijų ir įrenginių' + lede_text: OpenStreetMap kuria bendruomenė žymėtojų, kuriančių ir prižiūrinčių + kelių, takų, kavinių, stočių ir kitokius pasaulio duomenis. + local_knowledge_title: Vietinės žinios + local_knowledge_html: OpenStreetMap išskiria vietines žinias. Talkininkai naudoja + orotofoto nuotraukas, GPS įrenginius ir paprastus lauko žemėlapius, tikrindami, + kad OSM duomenys yra teisingi ir aktualūs. + community_driven_title: Bendruomenės vystomas + community_driven_html: OpenStreetMap bendruomenė yra įvairi, aistringa ir auganti + kiekvieną dieną. Tarp mūsų talkininkų yra žymėtojai entuziastai, GIS profesionalai, + OSM stotis prižiūrintys inžinieriai, žmonės žymintys nelaimių vietas ir daug + kitų. Norėdami daugiau sužinoti apie bendruomenę, skaitykite naudotojų + dienoraščius, bendruomenės dienoraščius + ir OSM fondo svetainę. + open_data_title: Atviri duomenys + open_data_html: 'OpenStreetMap yra atviri duomenys: jūs galite laisvai + juos naudoti bet kokiems tikslams, tol kol nepamirštate paminėti OpenStreetMap + ir jo talkininkus. Jei keičiate arba pildote duomenis, galite rezultatą teikti + tik su tokia pačia licencija. Daugiau informacijos rasite Teisės + ir licencija.' + legal_title: Teisės + legal_html: "Šis puslapis ir daugelis kitų susijusių paslaugų yra formaliai + valdomi \nOpenStreetMap fondo (OSMF) + \nbendruomenės vardu. Visų OSMF valdomų paslaugų naudojimas yra\npriklausomas + nuo \nPriimtino + naudojimo politikos ir mūsų Privatumo + politikos.\n
        \nSusisiekite + su OSMF, \njei turite licencijavimo, autoriaus teisių ar kitų teisinių + klausimų ar problemų." + partners_title: Partneriai + copyright: + foreign: + title: Apie šį vertimą + text: Esant konfliktui tarp Å¡io iÅ¡versto puslapio ir %{english_original_link}, + pirmenybė bus teikiama angliÅ¡kajai versijai. + english_link: anglų originalas + native: + title: Apie šį puslapį + text: JÅ«s žiÅ«rite angliÅ¡ką autorinių teisių puslapį. JÅ«s galite sugrįžti prie + Å¡io puslapio %{native_link} arba tiesiog baigti skaitymą apie autorines + teises ir %{mapping_link}. + native_link: LietuviÅ¡ka versija + mapping_link: pradėti žymėjimą + legal_babble: + title_html: Autorinės teisės ir licencija + intro_1_html: |- + OpenStreetMap® yra laisvai prieinamas, licencijuotas OpenStreetMap fondo (OSMF) pagal „Open Data + Commons Open Database License“ (ODbL). + intro_2_html: |- + JÅ«s galite laisvai platinti ir pritaikyti mÅ«sų duomenimis, taip ilgai kiek jÅ«s kredituosite OpenStreetMap ir jos kÅ«rėjus. Jei naudodamiesi mÅ«sų žemėlapiais sukursite savo duomenis, jÅ«sų duomenis turi bÅ«ti licenzijuoti pagal tą pačią licenziją. + full Legalus kodas paaiÅ¡kins jÅ«sų teises ir atsakomybes. + intro_3_html: |- + MÅ«sų žemėlapio žymėjimas, bei mÅ«sų dokumentacija, yra licencijuota pagal Creative + Commons Attribution-ShareAlike 2.0 licenciją (CC-BY-SA). + credit_title_html: Ką pažymėti prisidėjus prie projekto + credit_1_html: |- + Mes reikalaujame, kad jÅ«s kredituotumėte "© OpenStreetMap + autoriai ". + credit_2_html: Jums turi bÅ«ti aiÅ¡ku, kad duomenys kurie yra prieinami atvirai, + ir jei jÅ«s naudojatės mÅ«sų žemėlapiu, kuri licencijuota pagal CC-BY-SA. + JÅ«s turėtumėte paspausti Å¡ią nuorodą, vedančią į šį + autorinių teisių puslapį. Kita vertus, ir kaip reikalavimas jei platinate + OSM duomenų forma, jÅ«s galite nurodyti licenciją (-as). Žiniasklaidos priemonėse, + kur nuorodos pateikimas yra neįmanoma (pvz. spausdinti darbai), mes siÅ«lome + jÅ«sų skaitytojus nukreipti į openstreetmap.org (ko gero iÅ¡plečiant OpenStreetMap + iki pilno adreso), į opendatacommons.org ir jei tinka, į creativecommons.org + credit_3_html: |- + NarÅ¡ymui po elektroninį žemėlapį, kÅ«rėjų sąraÅ¡as turėtų pasirodyti žemėlapio kampe. + + Pavyzdžiui: + attribution_example: + alt: Pavyzdys kaip galima priskirti paskyrimus OpenStreetMap svetainėje + title: Priskyrimo pavyzdys + more_title_html: Sužinokite daugiau + more_1_html: |- + Sužinokite daugiau apie mÅ«sų duomenų naudojimą, kaip pažymėti prisidėjusius OSMF licencijavimo puslapyje ir bendruomenės DUK dėl legalumo. + more_2_html: |- + Nors OpenStreetMap duomenys yra atviri, mes negalime pateikti + nemokamos žemėlapių API trečiosioms Å¡alims. + PeržiÅ«rėkite mÅ«sų API naudojimo politiką, + Kaladėlių naudojimo politiką, + bei Nominatim naudojimo politiką. + contributors_title_html: MÅ«sų autoriai + contributors_intro_html: MÅ«sų autoriai yra tÅ«kstančiai įvairių žmonių. Taip + pat apimame ir laisvai prieinamą turinį iÅ¡ valstybinių kartografijos agentÅ«rų, + taip pat ir kitų įvairių Å¡altinių. + contributors_at_html: |- + Austrija: Turi duomenis nuo: + Stadt Wien (under + CC BY), + Land Vorarlberg and + Land Tirol (under CC-BY AT su pataisomis). + contributors_ca_html: |- + Kanada: Turi duomenis nuo: + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), bei StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: 'Suomija: Yra duomenų iÅ¡ Nacionalinio + žemės tyrimo Suomijos topografijos duomenų bazės ir kitų duomenų rinkinių, + pagal NLSFI + Licensiją.' + contributors_fr_html: |- + PrancÅ«zija: Turi duomenis nuo: + Direction Générale des Impôts. + contributors_nl_html: |- + Nyderlandai: Apima © AND duomenys, 2007 + (www.and.com) + contributors_nz_html: |- + Naujoji Zelandija: Turi duomenys nuo + Land Information New Zealand. KarÅ«nos iÅ¡saugotos autorinės teisės. + contributors_si_html: |- + Slovėnija: Panaudoti duomenys iÅ¡ ApžiÅ«ros ir kartografavimo valdžios bei + Žemės Å«kio, miÅ¡kų ir maisto ministerijos + (vieÅ¡a Slovėnijos informacija). + contributors_za_html: |- + Pietų Afrika: Turi duomenis nuo: + Chief Directorate: + National Geo-Spatial Information, Valstybinės iÅ¡saugotos autoriaus teisės. + contributors_gb_html: |- + Jungtinė Karalystė: Apima Ordnance + Survey data © KarÅ«nos autorinės teisės ir duomenų teisės + 2010-12. + contributors_footer_1_html: Kad sužinotumėte daugiau apie tuos, ir kitus Å¡altinius, + kurie buvo naudojami padėti vystyti OpenStreetMap, peržiÅ«rėkite Vystytojų + puslapį OpenStreetMap dokumentacijoje + contributors_footer_2_html: Duomenų įtraukimas OpenStreetMap nereiÅ¡kia, kad + originalių duomenų tiekėjas patvirtina OpenStreetMap, nenumatyta jokių garantijų + ir neprisiimama jokios atsakomybės. + infringement_title_html: Autorių teisių pažeidimas + infringement_1_html: OSM pildytojai primenami niekada nesinaudoti autorių + teisėmis apsaugotų Å¡altinių (pvz. Google Maps ar spausdintų žemėlapių) be + leidimo naudoti. + infringement_2_html: Jei manote, kad autorių teisių saugomi darbai buvo netinkamai + panaudoti pildant OpenStreetMap duomenų bazę ar Å¡ią svetainę, praneÅ¡kite + mums Å¡ioje + svetainėje arba užpildykite šį + pildymų lapą. + trademarks_title_html: Prekių ženklai + trademarks_1_html: OpenStreetMap, lupos logotipas ir „State of the Map“ yra + registruoti OpenStreetMap fondo prekių ženklai. Jei turite klausimų apie + Å¡ių ženklų naudojimą, siųskite savo klausimus Licencijavimo + darbinei grupei. index: js_1: JÅ«s arba naudojate narÅ¡yklę, nepalaikančią JavaScript, arba iÅ¡jungėte JavaScript palaikymą. @@ -1455,6 +1306,109 @@ lt: id_not_configured: iD nesukonfigÅ«ruotas no_iframe_support: JÅ«sų narÅ¡yklė nepalaiko HTML iframe'ų, o Å¡iai savybei jie bÅ«tini. + export: + title: Eksportuoti + area_to_export: Eksportuotinas plotas + manually_select: Rankiniu bÅ«du parinkti kitą sritį + format_to_export: Eksporto formatas + osm_xml_data: OpenStreetMap XML duomenys + map_image: Žemėlapio vaizdas (rodo standartinį sluoksnį) + embeddable_html: Pritaikomas HTML + licence: Licencija + export_details: OpenStreetMap duomenų licencija - Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Jei aukščiau pateiktas eksportas nepavyko, pabandykite vieną iÅ¡ žemiau + iÅ¡vardintų Å¡altinių:' + body: Å i sritis per didelė, kad bÅ«tų galima eksportuoti OpenStreetMap XML + duomenis. Padidinkite, parinkite mažesnę sritį arba naudokite vieną iÅ¡ didelio + duomenų kiekio atsiuntimo Å¡altinių. + planet: + title: OSM planeta + description: PeriodiÅ¡kai atnaujinamos pilnos OpenStreetMap duomenų bazės + kopijos + overpass: + title: Overpass API + description: Atsisiųsti Å¡ią apimtį iÅ¡ OpenStreetMap duombazės kopijos + geofabrik: + title: Geofabrik atsisiuntimai + description: PeriodiÅ¡kai atnaujinami kontinentų, Å¡alių ir kai kurių miestų + duomenys. + metro: + title: Metro iÅ¡karpos + description: Pagrindinių pasaulio miestų ir aplinkinių teritorijų duomenų + iÅ¡karpos + other: + title: Kiti Å¡altiniai + description: Papildomi Å¡altiniai iÅ¡vardinti OpenStreetMap wiki + options: Parinktys + format: Formatas + scale: Mastelis + max: maksimalus + image_size: Žemėlapio dydis + zoom: Padidinti + add_marker: Pridėti žymeklį žemėlapyje + latitude: 'Plat:' + longitude: 'Ilg:' + output: Rezultatas + paste_html: Ä®kelkite šį HTML į svetainę + export_button: Eksportuoti + fixthemap: + title: PraneÅ¡ti apie problemą / taisyti žemėlapį + how_to_help: + title: Kaip padėti + join_the_community: + title: Prisijungti prie bendruomenės + explanation_html: Jei pastebėjote žemėlapio duomenų problemą, pavyzdžiui + radote trÅ«kstamą kelią ar adresą, geriausias variantas yra prisijungti + prie OpenStreetMap bendruomenės ir pridėti ar pataisyti duomenis patiems. + add_a_note: + instructions_html: Tiesiog spauskite arba tą pačią + piktogramą žemėlapyje. Žemėlapyje bus pridėtas žymeklis, kurį galėsite + pertempti. Pridėkite jÅ«sų praneÅ¡imą, kurį kiti žymėtojai perskaitys ir + iÅ¡tirs. + other_concerns: + title: Kiti rÅ«pesčiai + explanation_html: Jei abejojate, kaip mÅ«sų duomenys naudojami arba dėl turinio, + perskaitykite mÅ«sų teisių ir licencijos puslapį, + kur rasite daugiau teisinės informacijos, arba susisiekite su atitinkama + OSMF darbo grupe. + help: + title: Pagalbos paieÅ¡ka + introduction: Yra kelios vietos, kur galima rasti informacijos apie OpenStreetMap, + užduoti klausimus, diskutuoti ir dokumentuoti žymėjimo temas. + welcome: + url: /welcome + title: Sveiki atvykę į OSM + description: Pradėkite Å¡iuo greitu vadovu apie OpenStreetMap pagrindus. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Lt:Beginners%27_guide + title: Pradedančiojo vadovas + description: Bendruomenės palaikomas vadovas pradedantiesiems. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Užduokite klausimą arba ieÅ¡kokite atsakymą OSM klausimų-ir-atsakymų + svetainėje. + mailing_lists: + title: El. paÅ¡to grupės + description: Užduokite klausimą ar diskutuokite apie įdomius dalykus daugelyje + teminių ar regioninių el. paÅ¡to grupių. + forums: + title: Forumai + description: Klausimai ir diskusijos tiems, kas teikia pirmenybę el. skelbimų + lentos stiliaus sąsajai. + irc: + title: IRC + description: InteraktyvÅ«s pokalbiai daugeliu kalbų, daugeliu temų. + switch2osm: + title: switch2osm + description: Pagalba kompanijoms ir organizacijoms pereinant į OpenStreetMap + paremtus žemėlapius ir kitas paslaugas. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: NarÅ¡ykite OSM detalios dokumentacijos wiki. sidebar: search_results: PaieÅ¡kos rezultatai close: Uždaryti @@ -1554,6 +1508,54 @@ lt: image: Paveikslėlis alt: Alternatyvusis tekstas url: URL + welcome: + title: Sveiki atvykę! + introduction_html: Sveikiname prisijungus prie OpenStreetMap - laisvo ir redaguojamo + pasaulio žemėlapio. Dabar, kai prisijungėte, galite pradėti žymėti. Čia trumpa + instrukcija su svarbiausiais dalykais, kuriuos turėtumėte žinoti. + whats_on_the_map: + title: Kas yra žemėlapyje + on_html: OpenStreetMap žymimi objektai, kurie yra tikri ir dabartiniai + - tai milijonai pastatų, kelių ir kitos vietovių informacijos. Galite žymėti + bet kokius jus dominančius realaus pasaulio objektus. + off_html: Kas tikrai netinka, tai subjektyvÅ«s duomenys, tokie kaip + įvertinimai, istoriniai arba hipotetiniai objektai, taipogi duomenys iÅ¡ + autorinių teisių saugomų duomenų Å¡altinių. Jei negavote specialaus leidimo + - nekopijuokite iÅ¡ internetinių ar popierinių žemėlapių. + basic_terms: + title: Pagrindiniai žymėjimo terminai + paragraph_1_html: OpenStreetMap turi savo žodyną. Čia keli pagrindiniai naudojami + terminai/žodžiai. + editor_html: Rengyklė - tai programa arba svetainė su kuria + galite redaguoti žemėlapį. + node_html: node/taÅ¡kas - taÅ¡kas žemėlapyje, pavyzdžiui vienas + restoranas ar medis. + way_html: kelias/way - linija ar plotas, pavyzdžiui kelias, + upeliukas, ežeras ar pastatas. + tag_html: žyma/tag - informacija apie taÅ¡ką ar liniją, pavyzdžiui + restorano pavadinimas arba kelio greičio apribojimas. + rules: + title: Taisyklės! + paragraph_1_html: "OpenStreetMap turi nedaug formalių taisyklių, bet mes tikimės, + kad visi dalyviai\nbendradarbiaus ir bendraus su bendruomene. Jei svarstote + bet kokius\nveiksmus, iÅ¡skyrus rankinį redagavimą, perskaitykite ir laikykitės + rekomendacijų apie\nimportus + ir \nautomatizuotą + redagavimą." + questions: + title: Turite klausimų? + paragraph_1_html: |- + Yra kelios vietos, kur galima rasti informacijos apie OpenStreetMap, užduoti klausimus, diskutuoti ir dokumentuoti žymėjimo temas. + Pagalbą rasite čia. + start_mapping: Pradėti žymėti + add_a_note: + title: Neturite laiko redaguoti? Pridėkite pastabą! + paragraph_1_html: Jei norite pataisyti kažką nedidelio ir neturite laiko registruotis + ir mokytis redaguoti - labai paprasta tiesiog palikti pastabą. + paragraph_2_html: 'Tiesiog eikite į žemėlapį ir + spauskite pastabų piktogramą: . Žemėlapyje + bus pridėtas žymeklis, kurį galite pertempti į kitą vietą. Pridėkite jÅ«sų + praneÅ¡imą, tada spauskite įraÅ¡yti ir kiti žymėtojai patyrinės jÅ«sų pastabą.' trace: visibility: private: Privatus (dalinamas tik kaip anonimiÅ¡kas, taÅ¡kai nesurikiuoti) @@ -1683,7 +1685,7 @@ lt: prisiregistruoti prie tinklo sąsajos ir peržiÅ«rėti talkininkų sąlygas. JÅ«s neprivalote su jomis sutikti, bet perskaityti - privalote. oauth: - oauthorize: + authorize: title: Autorizuoti priėjimą prie jÅ«sų paskyros request_access: Programa %{app_name} praÅ¡o prieigos prie jÅ«sų paskyros, %{user}. PeržiÅ«rėkite, ar jÅ«s norėtumėte taikyti Å¡ias galimybes. Galite pasirinkti @@ -1697,11 +1699,11 @@ lt: allow_write_gpx: įkelti GPS pėdsakus. allow_write_notes: modifikuoti pastabas. grant_access: Suteikti prieigą - oauthorize_success: + authorize_success: title: Autorizavimo užklausa leista allowed: JÅ«s leidote aplikacijai %{app_name} prieiti prie savo paskyros. verification: Patvirtinimo kodas yra %{code}. - oauthorize_failure: + authorize_failure: title: Autorizacijos užklausa nepavyko denied: JÅ«s neleidote aplikacijai %{app_name} prieiti prie savo paskyros. invalid: Netinkamas autorizacijos žetonas. @@ -2137,7 +2139,7 @@ lt: confirm: Patvirtinti fail: Nepavyko atimti rolės „%{role}“ iÅ¡ naudotojo „%{name}“. Patikrinkite, kad tiek naudotojas, tiek rolė įvesta teisingai. - user_block: + user_blocks: model: non_moderator_update: Norėdami sukurti ar atnaujinti blokavimą turite bÅ«ti moderatoriumi. non_moderator_revoke: Norėdami atÅ¡aukti blokavimą turite bÅ«ti moderatoriumi. @@ -2201,20 +2203,6 @@ lt: period: one: 1 valanda other: '%{count} valandos' - partial: - show: Rodyti - edit: Keisti - revoke: AtÅ¡aukti! - confirm: Ar tikrai? - display_name: Blokuojamas naudotojas - creator_name: KÅ«rėjas - reason: Blokavimo priežastis - status: BÅ«sena - revoker_name: AtÅ¡aukė - not_revoked: (neatÅ¡auktas) - showing_page: Puslapis %{page} - next: Kitas » - previous: « Ankstesnis helper: time_future: Baigiasi po %{time}. until_login: Aktyvus iki naudotojo prisijungimo. @@ -2243,8 +2231,22 @@ lt: back: PeržiÅ«rėti visus blokavimus revoker: 'AtÅ¡aukėjas:' needs_view: Naudotojas turi prisijungti, kad jo blokavimas bÅ«tų panaikintas. - note: - description: + block: + not_revoked: (neatÅ¡auktas) + show: Rodyti + edit: Keisti + revoke: AtÅ¡aukti! + blocks: + display_name: Blokuojamas naudotojas + creator_name: KÅ«rėjas + reason: Blokavimo priežastis + status: BÅ«sena + revoker_name: AtÅ¡aukė + showing_page: Puslapis %{page} + next: Kitas » + previous: « Ankstesnis + notes: + comment: opened_at_html: Sukurta prieÅ¡ %{when} opened_at_by_html: PrieÅ¡ %{when} sukÅ«rė %{user} commented_at_html: Atnaujinta prieÅ¡ %{when} @@ -2422,7 +2424,7 @@ lt: show_address: Rodyti adresą query_features: IeÅ¡koti objektų centre_map: Centruoti žemėlapį čia - redaction: + redactions: edit: description: ApraÅ¡ymas heading: Keisti redakciją diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 0f5cafb38..a02ddb035 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -342,51 +342,6 @@ lv: ago: '%{ago} atpakaļ' newer_comments: Jaunākie komentāri older_comments: Vecāki komentāri - export: - title: Eksportēt - start: - area_to_export: Apgabals, kuru eksportēt - manually_select: Manuāli izvēlēties citu teritoriju - format_to_export: Eksportēšanas formāts - osm_xml_data: OpenStreetMap XML dati - map_image: Kartes attēls (parāda standarta slāni) - embeddable_html: Ievietojams HTML kods - licence: Licence - export_details: OpenStreetMap dati ir licencēti saskaņā ar Atvērtās - Datu Kopas Atvērtās Datubāzes licenci (ODbL). - too_large: - advice: 'Ja augstāk esoÅ¡ais eksports neizdodas, lÅ«dzu apsver iespēj lietot - kādu no zemāk minētajiem avotiem:' - body: Å is apgabals ir pārāk liels, lai to eksportētu kā OpenStreetMap XML - datus. LÅ«dzu tuvini vai izvēlies mazāku apgabalu. - planet: - title: OSM Planēta - description: Regulāri atjauninātas kopijas no pilnās OpenStreetMap datubāzes - overpass: - title: Overpass API - description: Lejupielādē Å¡o apgabalu no OpenStreetMap datubāzes spoguļa - geofabrik: - title: Geofabrik Lejupielādes - description: Regulāri atjaunoti izgriezumi no kontinentiem, valstÄ«m, un - izvēlētām pilsētām - metro: - title: Metro Izgriezumi - description: Izgriezumi lielākajām pasaules pilsētām un to apkārteni - other: - title: Citi Avoti - description: Papildus avoti, kas norādÄ«ti OpenStreetMap wiki - options: Iespējas - format: Formāts - scale: Mērogs - max: lÄ«dz - image_size: Attēla izmērs - zoom: Palielināt - add_marker: Pievienot atzÄ«mi kartei - latitude: 'Platums:' - longitude: 'Garums:' - output: Izvade - paste_html: IelÄ«mēt HTML mājas lapā - export_button: Eksportēt geocoder: search: title: @@ -961,256 +916,6 @@ lv: text: Ziedot attÄ«stÄ«bai learn_more: Uzzināt Vairāk more: Vairāk - license_page: - foreign: - title: Par Å¡o tulkojumu - text: GadÄ«jumā, ja Å¡Ä« tulkotā lapa ir nesaskaņā ar %{english_original_link}, - vērā jāņem un jāvadās no angliskās lapas - english_link: angliskais oriÄ£ināls - native: - title: Par Å¡o lapu - text: Tu skaties anglisko versiju autortiesÄ«bām. Tu vari doties atpakaļ uz %{native_link} - Å¡ai lapai vai Tu vari beigt lasÄ«t par autortiesÄ«bām un %{mapping_link}. - native_link: latviskā versija - mapping_link: sākt kartēt - legal_babble: - title_html: AutortiesÄ«bas un Licence - intro_1_html: |- - OpenStreetMap ir atvērto datu, kad licencēti zem Atvērtās Datu Kopas Atvērtās Datubāzes licences (ODbL). - intro_2_html: |- - Tu vari kopēt, izplatÄ«t, nosÅ«tÄ«t un adaptēt mÅ«su kartes - un datus, kamēr tu atsaucies uz OpenStreetMap un tās - veidotājiem. Ja tu maini vai veido uz mÅ«su kartēm, tu - vari izplatÄ«t rezultātu tikai zem tās paÅ¡as licences. Pilns - juridiskais kods izskaidro tavas tiesÄ«bas un pienākumus. - intro_3_html: |- - Kartogrāfija mÅ«su karÅ¡u flÄ«zēs un mÅ«su dokumentācija ir licencēti zem Creative - Commons Attribution-ShareAlike 2.0 licences (CC-BY-SA). - credit_title_html: Kā atsaukties uz OpenStreetMap - credit_1_html: |- - Mēs pieprasām, ka tu izmanto atsauci “© OpenStreetMap - veidotāji”. - credit_2_html: "Kur iespējams, OpenStreetMap vajadzētu bÅ«t iesaitētam uz http://www.openstreetmap.org/\n - \ un CC BY-SA uz http://creativecommons.org/licenses/by-sa/2.0/. - Ja\n tu lieto mediju, kur saites nav iespējamas (piem. \n printēts darbs), - mēs iesakām pārsÅ«tÄ«t savus lasÄ«tājus uz\n www.openstreetmap.org (piemēram - paplaÅ¡inot\n ‘OpenStreetMap.org’ uz pilno adresi) un uz\n www.creativecommons.org." - credit_3_html: 'PriekÅ¡ pārlÅ«kojamas elektroniskās kartes, atsaucei ir jāparādās - kartes stÅ«rÄ«. Piemēram:' - attribution_example: - alt: Piemērs, kā OpenStreetMap apzÄ«mēt web lapā - title: Atsauces piemērs - more_title_html: Uzzināt vairāk - more_1_html: |- - Lasi vairāk par mÅ«su datu izmantoÅ¡anu, un kā uz mums atsaukties juridiskajā - FAQ. - more_2_html: |- - Lai gan OpenStreetMap ir atvērti dati, mēs nevaram piedāvāt bezmaksas kartes API trešās puses izstrādātājiem. - Apskati mÅ«su API LietoÅ¡anas Politiku, - Flīžu LietoÅ¡anas Politiku - un Nominatim LietoÅ¡anas Politiku. - contributors_title_html: MÅ«su veidotāji - contributors_intro_html: |- - MÅ«su veidotāji ir tÅ«kstoÅ¡iem cilvēku. Mēs arÄ« ievietojam - atvērti-licencētus datus no nacionālajām kartēšanas aÄ£entÅ«rām - un citiem avotiem, to skaitā: - contributors_at_html: |- - Austrija: Ietver datus no - Stadt Wien (zem - CC BY). - contributors_ca_html: |- - Kanāda: Ietver datus no - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), un StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: |- - Somija: Satur datus no - Somijas Topogrāfiskās Datubāzes Nacionālās Zemes Dienesta - un citām datu kopām zem - NLSFI Licence. - contributors_fr_html: |- - Francija: Ietver datus no - Direction Générale des Impôts. - contributors_nl_html: |- - NÄ«derlande: Satur © AND data, 2007 - (www.and.com) - contributors_nz_html: |- - Jaunzēlande: Ietver datus no - Land Information New Zealand. Crown Copyright reserved. - contributors_si_html: |- - Slovēnija: Satur datus no - Aptauju un kartogrāfijas aÄ£entÅ«ras un - LauksaimniecÄ«bas, mežsaimniecÄ«bass un pārtikas ministrijas - (Slovēnijas publiskā informācija). - contributors_za_html: |- - Dienvidāfrika: Ietver datus no - Chief Directorate: - National Geo-Spatial Information, State copyright reserved. - contributors_gb_html: |- - Apvienotā Karaliste: Satur Ordnance - Survey datus © Kroņa tiesÄ«bas un datubāze - 2010-12. - contributors_footer_1_html: |- - SÄ«kāku informāciju par Å¡iem, un citiem avotiem, kas izmantoti, - lai uzlabotu OpenStreetMap, lÅ«dzu apskati Veidotāju - lapu iekÅ¡ OpenStreetMap Wiki. - contributors_footer_2_html: |2- - Datu ievietoÅ¡ana OpenStreetMap nenozÄ«mē ka oriÄ£inālais - datu avots sniedz atbalstu OpenStreetMap, dod garantiju, vai - pieņem jebkādu atbildÄ«bu. - infringement_title_html: AutortiesÄ«bu pārkāpums - infringement_1_html: "OSM veidotājiem tiek atgādināts, nekad neizmantot datus - no jebkuriem \nar autortiesÄ«bām aizsargātiem avotiem (piem. Google Maps vai - drukātām kartēm), bez \nprecÄ«zi formulētas atļaujas no autortiesÄ«bu Ä«paÅ¡niekiem." - infringement_2_html: |- - Ja tu tici, ka ar autortiesÄ«bām aizsargāts materiāls ir ticis neatbilstoÅ¡i - pievienots OpenStreetMap datubāzei vai vietnei, lÅ«dzu atsaucies uz - mÅ«su noņemÅ¡anas - procedÅ«ru vai paziņo pa tieÅ¡o mums, izmantojot - on-line ziņoÅ¡anas veidni. - trademarks_title_html: ReÄ£istrētas preču zÄ«mes - trademarks_1_html: OpenStreetMap, lupa un Å¡tata karte ir reÄ£istrētas OpenStreetMap - fonda preču zÄ«mes. Ja jums ir jautājumi par mÅ«su logotipu lietoÅ¡anu, lÅ«dzu - sÅ«tiet jÅ«su jautājumus uz Licence - Working Group. - welcome_page: - title: Laipni lÅ«dzam! - introduction_html: Sveicināts OpenStreetMap, bezmaksas un rediģējamā pasaules - karte. Tagad, kad esi piereÄ£istrējies, tu vari sākt kartēt. Å eit ir neliela - pamācÄ«bā ar svarÄ«gākajām lietām, kuras tev jāzina. - whats_on_the_map: - title: Kas ir uz kartes - on_html: OpenStreetMap ir karte, kurā iezÄ«mē lietas, kuras ir reālas un - esoÅ¡as - tā iekļauj miljonus ar namiem, ceļiem un citām detaļām par vietām. - Tu vari kartēt jebko no reālās pasaules, kas tev liekas interesants. - off_html: Ko tā neiekļauj ir viedokļa dati kā reitings, vēsture vai - hipotētiskas Ä«paÅ¡Ä«bas, un datus no ar autortiesÄ«bām aizsargātiem avotiem. - Ja vien tev nav speciāla atļauja, nekopē no tieÅ¡saistes vai papÄ«ra kartēm. - basic_terms: - title: Pamatnoteikumi kartēšanai - paragraph_1_html: OpenStreetMap ir paÅ¡ai savs profesionālais žargons. Å eit ir - daži atslēgvārdi, kas var noderēt. - editor_html: Redaktors ir programma vai mājaslapa, kuru var - izmantot, lai labotu karti. - node_html: Punkts ir punkts uz kartes, kā viens restorāns vai - koks. - way_html: Ceļš ir lÄ«nija vai laukums, kā ceļš, strauts, ezers - vai māja. - tag_html: Birka ir dati par punktu vai ceļu, kā restorāna nosaukums - vai ceļa ātruma ierobežojums. - rules: - title: Noteikumi! - paragraph_1_html: OpenStreetMap ir tikai daži formālie noteikumi, bet mēs ceram, - ka visi dalÄ«bnieki sadarbosies un komunicēs ar mÅ«su kopienu un tās biedriem. - Ja jÅ«s apsverat citas iespējas, kas nav manuālā rediģēšana ar roku tad lÅ«dzu - izlasiet un sekojiet pamācÄ«bām Importi - un Automātiskā - rediģēšana. - questions: - title: Kādi jautājumi? - paragraph_1_html: NepiecieÅ¡ama palÄ«dzÄ«ba kartējot, vai nav skaidrs kā lietot - OpenStreetMap? Atrodi atbildes uz saviem jautājumiem palÄ«dzÄ«bas - lapā. - start_mapping: Sākt Kartēt - add_a_note: - title: Nav laika laboÅ¡anai? Pievienojiet piezÄ«mi! - paragraph_1_html: Ja tu vēlies labot ko mazu un nav laika lai piereÄ£istrētos - vai iemācÄ«tos kā rediģēt, ir iespējams vienkārÅ¡i atstāt piezÄ«mi. - paragraph_2_html: VienkārÅ¡i dodies uz karti un spied - uz . Tas pievienos marÄ·ieri kartē, kuru tu - vari pārvietot pavelkot to. Pievieno savu ziņojumu, tad spied saglabāt, un - citi kartētāji varēs izpētÄ«t problēmu. - fixthemap: - title: Ziņot par problēmu / Labot karti - how_to_help: - title: Kā palÄ«dzēt - join_the_community: - title: Pievienojies kopienai - explanation_html: Konstatējot problēmas ar mÅ«su kartes datiem, piemēram trÅ«kstoÅ¡u - ceļu vai adresi, labākais variants, kā rÄ«koties ir pievienoties OpenStreetMap - kopienai un pievienot vai atjaunot datus jums paÅ¡am. - add_a_note: - instructions_html: NoklikÅ¡Ä·iniet uz vai arÄ« uz tās - paÅ¡as ikonas kartes displejā. Tādā veidā jÅ«s pievienosiet marÄ·ieri Å¡ai kartei, - kuru jÅ«s varēsiet izkustināt, 'velkot'. Pievienojiet savu ziņu un tad uzspiediet - 'Saglabāt' un pārējie lietotāji to izpētÄ«s. - other_concerns: - title: Citas bažas - explanation_html: "Ja jums ir bažas par to, kā mÅ«su dati tiek izmantoti, vai - par saturu, lÅ«dzu, skatiet mÅ«su\nautortiesÄ«bu lapu, - lai iegÅ«tu juridisko informāciju, vai sazinieties ar atbilstoÅ¡o \nOSMF - darba grupu." - help_page: - title: PalÄ«dzÄ«bas saņemÅ¡ana - introduction: OpenStreetMap ir vairāki resursi, lai uzzinātu par projektu, uzdotu - un atbildētu uz jautājumiem, un diskutētu un dokumentētu kartēšanas tēmas. - welcome: - url: /sveicināts - title: Laipni lÅ«gti iekÅ¡ OSM - description: Sāc ar Å¡o Ä«so ceļvedi, kurÅ¡ aptver OpenStreetMap pamatus. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Lv:Beginners%27_guide - title: Iesācēja Rokasgrāmata - description: Lietotāju uzturēta pamācÄ«ba priekÅ¡ iesācējiem. - help: - url: http://forum.openstreetmap.org/viewforum.php?id=59 - title: help.openstreetmap.org - description: Uzdod jautājumu vai atrodi atbildes iekÅ¡ OSM jautājumu un atbilžu - lapas. - mailing_lists: - title: Adresātu Saraksti - description: Uzdodiet jautājumu vai apspriediet interesējošās tēmas par vispārējajiem - vai reÄ£ionālajiem adresātu sarakstiem. - forums: - title: Forumi - description: Jautājumi un diskusijas priekÅ¡ tiem, kuri dod priekÅ¡roku foruma-tipa - interfeisa stilam. - irc: - title: IRC - description: InteraktÄ«vais čats dažādās valodās par dažādām tēmām. - switch2osm: - title: switch2osm - description: PalÄ«dzÄ«ba uzņēmumiem un organizācijām, kuras pāriet uz OpenStreetMap - balstÄ«tajām kartēm un citiem pakalpojumiem. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: CaurlÅ«ko wiki priekÅ¡ padziļinātas OSM dokumentācijas. - about_page: - next: Tālāk - copyright_html: ©OpenStreetMap
        atbalstītāji - used_by: '%{name} darbina kartes datus simtiem mājaslapu, mobilajās aplikācijās - un aparatūras ierīcēs' - lede_text: OpenStreetMap būvē kartētāju kopiena, kuri iegulda un uztur datus par - ceļiem, takām, kafejnīcām, dzelzceļa stacijām un daudz ko vairāk visā pasaulē. - local_knowledge_title: Vietējo zināšanas - local_knowledge_html: OpenStreetMap liek uzsvaru uz vietējo zināšanām. Datu veidotāji - lieto satelītbildes, GPS ierīces, un parastas papīra kartes, lai pārliecinātos - ka OSM ir precīzs un aktuāls. - community_driven_title: Kopienas virzīts - community_driven_html: |- - OpenStreetMap kopiena ir daudzveidīga, kaislīga un pieaug katru dienu. - Mūsu ieguldītāji ir entuziastiski kartogrāfi, GIS profesionāļi, inženieri, kuri darbina OSM serverus, humanitārieši, kas kartē apgabalus, kurus skārusi dabas katastrofa un daudzi citi. - Lai uzzinātu vairāk par kopienu, apskati lietotāju dienasgrāmatas, - kopienu blogus, un - OSM Fonds mājaslapu. - open_data_title: Atvērti dati - open_data_html: 'OpenStreetMap ir atvērti dati: tev ir brīvas tiesības - to lietot jebkādam mērķim, kamēr tu ievieto atsauci uz OpenStreetMap un tās - veidotājiem. Ja tu maini vai būvē pa virtsu datiem dažādos veidos, tu vai tos - izplatīt tikai zem tās pašas licences. Apskati Autortiesību - un Licences lapu priekš padziļinātas informācijas.' - legal_title: Juridiskie jautājumi - legal_html: "Šo vietni un daudzus citus ar to saistītos pakalpojumus oficiāli - pārvalda OpenStreetMap fonds (OSMF) - kopienas vārdā.\n
        \nLÅ«dzu sazinieties - OSMF, ja jums ir jautājumi par autortiesÄ«bām vai citiem juridiskajiem jautājumiem." - partners_title: Partneri notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} komentēja jÅ«su dienasgrāmatas ierakstu' @@ -1401,6 +1106,156 @@ lv: delete: deleted: Ziņa izdzēsta site: + about: + next: Tālāk + copyright_html: ©OpenStreetMap
        atbalstītāji + used_by: '%{name} darbina kartes datus simtiem mājaslapu, mobilajās aplikācijās + un aparatūras ierīcēs' + lede_text: OpenStreetMap būvē kartētāju kopiena, kuri iegulda un uztur datus + par ceļiem, takām, kafejnīcām, dzelzceļa stacijām un daudz ko vairāk visā + pasaulē. + local_knowledge_title: Vietējo zināšanas + local_knowledge_html: OpenStreetMap liek uzsvaru uz vietējo zināšanām. Datu + veidotāji lieto satelītbildes, GPS ierīces, un parastas papīra kartes, lai + pārliecinātos ka OSM ir precīzs un aktuāls. + community_driven_title: Kopienas virzīts + community_driven_html: |- + OpenStreetMap kopiena ir daudzveidīga, kaislīga un pieaug katru dienu. + Mūsu ieguldītāji ir entuziastiski kartogrāfi, GIS profesionāļi, inženieri, kuri darbina OSM serverus, humanitārieši, kas kartē apgabalus, kurus skārusi dabas katastrofa un daudzi citi. + Lai uzzinātu vairāk par kopienu, apskati lietotāju dienasgrāmatas, + kopienu blogus, un + OSM Fonds mājaslapu. + open_data_title: Atvērti dati + open_data_html: 'OpenStreetMap ir atvērti dati: tev ir brīvas tiesības + to lietot jebkādam mērķim, kamēr tu ievieto atsauci uz OpenStreetMap un tās + veidotājiem. Ja tu maini vai būvē pa virtsu datiem dažādos veidos, tu vai + tos izplatīt tikai zem tās pašas licences. Apskati Autortiesību + un Licences lapu priekš padziļinātas informācijas.' + legal_title: Juridiskie jautājumi + legal_html: "Šo vietni un daudzus citus ar to saistītos pakalpojumus oficiāli + pārvalda OpenStreetMap fonds (OSMF) + kopienas vārdā.\n
        \nLÅ«dzu sazinieties + OSMF, ja jums ir jautājumi par autortiesÄ«bām vai citiem juridiskajiem + jautājumiem." + partners_title: Partneri + copyright: + foreign: + title: Par Å¡o tulkojumu + text: GadÄ«jumā, ja Å¡Ä« tulkotā lapa ir nesaskaņā ar %{english_original_link}, + vērā jāņem un jāvadās no angliskās lapas + english_link: angliskais oriÄ£ināls + native: + title: Par Å¡o lapu + text: Tu skaties anglisko versiju autortiesÄ«bām. Tu vari doties atpakaļ uz + %{native_link} Å¡ai lapai vai Tu vari beigt lasÄ«t par autortiesÄ«bām un %{mapping_link}. + native_link: latviskā versija + mapping_link: sākt kartēt + legal_babble: + title_html: AutortiesÄ«bas un Licence + intro_1_html: |- + OpenStreetMap ir atvērto datu, kad licencēti zem Atvērtās Datu Kopas Atvērtās Datubāzes licences (ODbL). + intro_2_html: |- + Tu vari kopēt, izplatÄ«t, nosÅ«tÄ«t un adaptēt mÅ«su kartes + un datus, kamēr tu atsaucies uz OpenStreetMap un tās + veidotājiem. Ja tu maini vai veido uz mÅ«su kartēm, tu + vari izplatÄ«t rezultātu tikai zem tās paÅ¡as licences. Pilns + juridiskais kods izskaidro tavas tiesÄ«bas un pienākumus. + intro_3_html: |- + Kartogrāfija mÅ«su karÅ¡u flÄ«zēs un mÅ«su dokumentācija ir licencēti zem Creative + Commons Attribution-ShareAlike 2.0 licences (CC-BY-SA). + credit_title_html: Kā atsaukties uz OpenStreetMap + credit_1_html: |- + Mēs pieprasām, ka tu izmanto atsauci “© OpenStreetMap + veidotāji”. + credit_2_html: "Kur iespējams, OpenStreetMap vajadzētu bÅ«t iesaitētam uz http://www.openstreetmap.org/\n + \ un CC BY-SA uz http://creativecommons.org/licenses/by-sa/2.0/. + Ja\n tu lieto mediju, kur saites nav iespējamas (piem. \n printēts darbs), + mēs iesakām pārsÅ«tÄ«t savus lasÄ«tājus uz\n www.openstreetmap.org (piemēram + paplaÅ¡inot\n ‘OpenStreetMap.org’ uz pilno adresi) un uz\n www.creativecommons.org." + credit_3_html: 'PriekÅ¡ pārlÅ«kojamas elektroniskās kartes, atsaucei ir jāparādās + kartes stÅ«rÄ«. Piemēram:' + attribution_example: + alt: Piemērs, kā OpenStreetMap apzÄ«mēt web lapā + title: Atsauces piemērs + more_title_html: Uzzināt vairāk + more_1_html: |- + Lasi vairāk par mÅ«su datu izmantoÅ¡anu, un kā uz mums atsaukties juridiskajā + FAQ. + more_2_html: |- + Lai gan OpenStreetMap ir atvērti dati, mēs nevaram piedāvāt bezmaksas kartes API trešās puses izstrādātājiem. + Apskati mÅ«su API LietoÅ¡anas Politiku, + Flīžu LietoÅ¡anas Politiku + un Nominatim LietoÅ¡anas Politiku. + contributors_title_html: MÅ«su veidotāji + contributors_intro_html: |- + MÅ«su veidotāji ir tÅ«kstoÅ¡iem cilvēku. Mēs arÄ« ievietojam + atvērti-licencētus datus no nacionālajām kartēšanas aÄ£entÅ«rām + un citiem avotiem, to skaitā: + contributors_at_html: |- + Austrija: Ietver datus no + Stadt Wien (zem + CC BY). + contributors_ca_html: |- + Kanāda: Ietver datus no + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), un StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: |- + Somija: Satur datus no + Somijas Topogrāfiskās Datubāzes Nacionālās Zemes Dienesta + un citām datu kopām zem + NLSFI Licence. + contributors_fr_html: |- + Francija: Ietver datus no + Direction Générale des Impôts. + contributors_nl_html: |- + NÄ«derlande: Satur © AND data, 2007 + (www.and.com) + contributors_nz_html: |- + Jaunzēlande: Ietver datus no + Land Information New Zealand. Crown Copyright reserved. + contributors_si_html: |- + Slovēnija: Satur datus no + Aptauju un kartogrāfijas aÄ£entÅ«ras un + LauksaimniecÄ«bas, mežsaimniecÄ«bass un pārtikas ministrijas + (Slovēnijas publiskā informācija). + contributors_za_html: |- + Dienvidāfrika: Ietver datus no + Chief Directorate: + National Geo-Spatial Information, State copyright reserved. + contributors_gb_html: |- + Apvienotā Karaliste: Satur Ordnance + Survey datus © Kroņa tiesÄ«bas un datubāze + 2010-12. + contributors_footer_1_html: |- + SÄ«kāku informāciju par Å¡iem, un citiem avotiem, kas izmantoti, + lai uzlabotu OpenStreetMap, lÅ«dzu apskati Veidotāju + lapu iekÅ¡ OpenStreetMap Wiki. + contributors_footer_2_html: |2- + Datu ievietoÅ¡ana OpenStreetMap nenozÄ«mē ka oriÄ£inālais + datu avots sniedz atbalstu OpenStreetMap, dod garantiju, vai + pieņem jebkādu atbildÄ«bu. + infringement_title_html: AutortiesÄ«bu pārkāpums + infringement_1_html: "OSM veidotājiem tiek atgādināts, nekad neizmantot datus + no jebkuriem \nar autortiesÄ«bām aizsargātiem avotiem (piem. Google Maps + vai drukātām kartēm), bez \nprecÄ«zi formulētas atļaujas no autortiesÄ«bu + Ä«paÅ¡niekiem." + infringement_2_html: |- + Ja tu tici, ka ar autortiesÄ«bām aizsargāts materiāls ir ticis neatbilstoÅ¡i + pievienots OpenStreetMap datubāzei vai vietnei, lÅ«dzu atsaucies uz + mÅ«su noņemÅ¡anas + procedÅ«ru vai paziņo pa tieÅ¡o mums, izmantojot + on-line ziņoÅ¡anas veidni. + trademarks_title_html: ReÄ£istrētas preču zÄ«mes + trademarks_1_html: OpenStreetMap, lupa un Å¡tata karte ir reÄ£istrētas OpenStreetMap + fonda preču zÄ«mes. Ja jums ir jautājumi par mÅ«su logotipu lietoÅ¡anu, lÅ«dzu + sÅ«tiet jÅ«su jautājumus uz Licence + Working Group. index: js_1: Vai nu jÅ«s lietojat pārlÅ«kprogrammu, kas neatbalsta JavaScript, vai arÄ« jÅ«su pārlÅ«kprogrammā JavaScript ir atslēgts. @@ -1432,6 +1287,106 @@ lv: id_not_configured: iD nav konfigurēts no_iframe_support: Tavs pārlÅ«ks neatbalsta HTML rāmjus, kas ir nepiecieÅ¡ami Å¡ai iezÄ«mei. + export: + title: Eksportēt + area_to_export: Apgabals, kuru eksportēt + manually_select: Manuāli izvēlēties citu teritoriju + format_to_export: Eksportēšanas formāts + osm_xml_data: OpenStreetMap XML dati + map_image: Kartes attēls (parāda standarta slāni) + embeddable_html: Ievietojams HTML kods + licence: Licence + export_details: OpenStreetMap dati ir licencēti saskaņā ar Atvērtās + Datu Kopas Atvērtās Datubāzes licenci (ODbL). + too_large: + advice: 'Ja augstāk esoÅ¡ais eksports neizdodas, lÅ«dzu apsver iespēj lietot + kādu no zemāk minētajiem avotiem:' + body: Å is apgabals ir pārāk liels, lai to eksportētu kā OpenStreetMap XML + datus. LÅ«dzu tuvini vai izvēlies mazāku apgabalu. + planet: + title: OSM Planēta + description: Regulāri atjauninātas kopijas no pilnās OpenStreetMap datubāzes + overpass: + title: Overpass API + description: Lejupielādē Å¡o apgabalu no OpenStreetMap datubāzes spoguļa + geofabrik: + title: Geofabrik Lejupielādes + description: Regulāri atjaunoti izgriezumi no kontinentiem, valstÄ«m, un + izvēlētām pilsētām + metro: + title: Metro Izgriezumi + description: Izgriezumi lielākajām pasaules pilsētām un to apkārteni + other: + title: Citi Avoti + description: Papildus avoti, kas norādÄ«ti OpenStreetMap wiki + options: Iespējas + format: Formāts + scale: Mērogs + max: lÄ«dz + image_size: Attēla izmērs + zoom: Palielināt + add_marker: Pievienot atzÄ«mi kartei + latitude: 'Platums:' + longitude: 'Garums:' + output: Izvade + paste_html: IelÄ«mēt HTML mājas lapā + export_button: Eksportēt + fixthemap: + title: Ziņot par problēmu / Labot karti + how_to_help: + title: Kā palÄ«dzēt + join_the_community: + title: Pievienojies kopienai + explanation_html: Konstatējot problēmas ar mÅ«su kartes datiem, piemēram + trÅ«kstoÅ¡u ceļu vai adresi, labākais variants, kā rÄ«koties ir pievienoties + OpenStreetMap kopienai un pievienot vai atjaunot datus jums paÅ¡am. + add_a_note: + instructions_html: NoklikÅ¡Ä·iniet uz vai arÄ« uz + tās paÅ¡as ikonas kartes displejā. Tādā veidā jÅ«s pievienosiet marÄ·ieri + Å¡ai kartei, kuru jÅ«s varēsiet izkustināt, 'velkot'. Pievienojiet savu ziņu + un tad uzspiediet 'Saglabāt' un pārējie lietotāji to izpētÄ«s. + other_concerns: + title: Citas bažas + explanation_html: "Ja jums ir bažas par to, kā mÅ«su dati tiek izmantoti, vai + par saturu, lÅ«dzu, skatiet mÅ«su\nautortiesÄ«bu lapu, + lai iegÅ«tu juridisko informāciju, vai sazinieties ar atbilstoÅ¡o \nOSMF + darba grupu." + help: + title: PalÄ«dzÄ«bas saņemÅ¡ana + introduction: OpenStreetMap ir vairāki resursi, lai uzzinātu par projektu, uzdotu + un atbildētu uz jautājumiem, un diskutētu un dokumentētu kartēšanas tēmas. + welcome: + url: /sveicināts + title: Laipni lÅ«gti iekÅ¡ OSM + description: Sāc ar Å¡o Ä«so ceļvedi, kurÅ¡ aptver OpenStreetMap pamatus. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Lv:Beginners%27_guide + title: Iesācēja Rokasgrāmata + description: Lietotāju uzturēta pamācÄ«ba priekÅ¡ iesācējiem. + help: + url: http://forum.openstreetmap.org/viewforum.php?id=59 + title: help.openstreetmap.org + description: Uzdod jautājumu vai atrodi atbildes iekÅ¡ OSM jautājumu un atbilžu + lapas. + mailing_lists: + title: Adresātu Saraksti + description: Uzdodiet jautājumu vai apspriediet interesējošās tēmas par vispārējajiem + vai reÄ£ionālajiem adresātu sarakstiem. + forums: + title: Forumi + description: Jautājumi un diskusijas priekÅ¡ tiem, kuri dod priekÅ¡roku foruma-tipa + interfeisa stilam. + irc: + title: IRC + description: InteraktÄ«vais čats dažādās valodās par dažādām tēmām. + switch2osm: + title: switch2osm + description: PalÄ«dzÄ«ba uzņēmumiem un organizācijām, kuras pāriet uz OpenStreetMap + balstÄ«tajām kartēm un citiem pakalpojumiem. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: CaurlÅ«ko wiki priekÅ¡ padziļinātas OSM dokumentācijas. sidebar: search_results: Meklēšanas rezultāti close: Aizvērt @@ -1531,6 +1486,53 @@ lv: image: Attēls alt: Alt teksts url: URL + welcome: + title: Laipni lÅ«dzam! + introduction_html: Sveicināts OpenStreetMap, bezmaksas un rediģējamā pasaules + karte. Tagad, kad esi piereÄ£istrējies, tu vari sākt kartēt. Å eit ir neliela + pamācÄ«bā ar svarÄ«gākajām lietām, kuras tev jāzina. + whats_on_the_map: + title: Kas ir uz kartes + on_html: OpenStreetMap ir karte, kurā iezÄ«mē lietas, kuras ir reālas un + esoÅ¡as - tā iekļauj miljonus ar namiem, ceļiem un citām detaļām par + vietām. Tu vari kartēt jebko no reālās pasaules, kas tev liekas interesants. + off_html: Ko tā neiekļauj ir viedokļa dati kā reitings, vēsture vai + hipotētiskas Ä«paÅ¡Ä«bas, un datus no ar autortiesÄ«bām aizsargātiem avotiem. + Ja vien tev nav speciāla atļauja, nekopē no tieÅ¡saistes vai papÄ«ra kartēm. + basic_terms: + title: Pamatnoteikumi kartēšanai + paragraph_1_html: OpenStreetMap ir paÅ¡ai savs profesionālais žargons. Å eit + ir daži atslēgvārdi, kas var noderēt. + editor_html: Redaktors ir programma vai mājaslapa, kuru var + izmantot, lai labotu karti. + node_html: Punkts ir punkts uz kartes, kā viens restorāns + vai koks. + way_html: Ceļš ir lÄ«nija vai laukums, kā ceļš, strauts, ezers + vai māja. + tag_html: Birka ir dati par punktu vai ceļu, kā restorāna + nosaukums vai ceļa ātruma ierobežojums. + rules: + title: Noteikumi! + paragraph_1_html: OpenStreetMap ir tikai daži formālie noteikumi, bet mēs + ceram, ka visi dalÄ«bnieki sadarbosies un komunicēs ar mÅ«su kopienu un tās + biedriem. Ja jÅ«s apsverat citas iespējas, kas nav manuālā rediģēšana ar + roku tad lÅ«dzu izlasiet un sekojiet pamācÄ«bām Importi + un Automātiskā + rediģēšana. + questions: + title: Kādi jautājumi? + paragraph_1_html: NepiecieÅ¡ama palÄ«dzÄ«ba kartējot, vai nav skaidrs kā lietot + OpenStreetMap? Atrodi atbildes uz saviem jautājumiem palÄ«dzÄ«bas + lapā. + start_mapping: Sākt Kartēt + add_a_note: + title: Nav laika laboÅ¡anai? Pievienojiet piezÄ«mi! + paragraph_1_html: Ja tu vēlies labot ko mazu un nav laika lai piereÄ£istrētos + vai iemācÄ«tos kā rediģēt, ir iespējams vienkārÅ¡i atstāt piezÄ«mi. + paragraph_2_html: VienkārÅ¡i dodies uz karti un spied + uz . Tas pievienos marÄ·ieri kartē, kuru tu + vari pārvietot pavelkot to. Pievieno savu ziņojumu, tad spied saglabāt, + un citi kartētāji varēs izpētÄ«t problēmu. trace: visibility: private: Privāts (kopÄ«gots kā anonÄ«ms, nesakārtoti punkti) @@ -1659,7 +1661,7 @@ lv: mājaslapas interfeisā, lai apskatÄ«tu Veidotāju Noteikumus. Tev nevajag piekrist, bet tev tie ir jāapskata. oauth: - oauthorize: + authorize: title: Atļaut piekļuvi savam kontam request_access: Aplikācija %{app_name} pieprasa pieeju tavas lietotājam, %{user}. LÅ«dzu pārbaudi, vai tu vēlies, lai aplikācijai bÅ«tu sekojošās iespējas. Tu @@ -1674,11 +1676,11 @@ lv: allow_write_gpx: augÅ¡upielādēt GPS trases. allow_write_notes: labot piezÄ«mes. grant_access: PieÅ¡Ä·irt piekļuvi - oauthorize_success: + authorize_success: title: Autorizācijas pieprasÄ«jums atļauts allowed: Tu esi pieÅ¡Ä·Ä«ris tiesÄ«bas %{app_name} piekļūt tavam lietotājam. verification: Pārbaudes kods ir %{code}. - oauthorize_failure: + authorize_failure: title: Autorizācijas pieprasÄ«jums neizdevās denied: Tu esi liedzis programmai %{app_name} piekļūt savam lietotājam. invalid: Autorizācijas kods nav derÄ«gs. @@ -2111,7 +2113,7 @@ lv: confirm: Apstiprināt fail: Neizdevās atsaukt lomu `%{role}' no lietotāja `%{name}'. LÅ«dzu pārbaudi, ka tas lietotājs un loma ir derÄ«gi. - user_block: + user_blocks: model: non_moderator_update: JābÅ«t moderatoram, lai veidotu vai atjaunotu liegumu. non_moderator_revoke: JābÅ«t moderatoram, lai atsauktu liegumu. @@ -2171,20 +2173,6 @@ lv: period: one: 1 stunda other: '%{count} stundas' - partial: - show: RādÄ«t - edit: Labot - revoke: Atsaukt! - confirm: Vai esat pārliecināts? - display_name: Bloķēts lietotājs - creator_name: Autors - reason: Iemesls liegumam - status: Statuss - revoker_name: Atsaucis - not_revoked: (nav atsaukts) - showing_page: Rāda lapu %{page} - next: Nākamais » - previous: « Iepriekšējais helper: time_future: Beidzas %{time}. until_login: AktÄ«vs lÄ«dz lietotājs autorizēsies. @@ -2213,8 +2201,22 @@ lv: back: SkatÄ«t visus bloķējumus revoker: 'Atsaucējs:' needs_view: Lietotājam ir jāautorizējas, pirms liegums tiks notÄ«rÄ«ts. - note: - description: + block: + not_revoked: (nav atsaukts) + show: RādÄ«t + edit: Labot + revoke: Atsaukt! + blocks: + display_name: Bloķēts lietotājs + creator_name: Autors + reason: Iemesls liegumam + status: Statuss + revoker_name: Atsaucis + showing_page: Rāda lapu %{page} + next: Nākamais » + previous: « Iepriekšējais + notes: + comment: opened_at_html: Izveidots %{when} atpakaļ opened_at_by_html: Izveidoja %{user} %{when} atpakaļ commented_at_html: Atjaunots %{when} atpakaļ @@ -2384,7 +2386,7 @@ lv: directions_to: Norādes uz Å¡ejieni add_note: Pievienot piezÄ«mi Å¡eit show_address: RādÄ«t adresi - redaction: + redactions: edit: description: Apraksts heading: Labot redakciju diff --git a/config/locales/mk.yml b/config/locales/mk.yml index 55cd142d6..2c024570b 100644 --- a/config/locales/mk.yml +++ b/config/locales/mk.yml @@ -238,7 +238,7 @@ mk: list: title: Измени title_user: Измени на %{user} - title_friend: Измени на ваши пријатели + title_friend: Измени на мои пријатели title_nearby: Измени од соседни корисници empty: Не пронајдов збирови од промени. empty_area: Нема збирови од промени во ова подрачје. @@ -268,7 +268,7 @@ mk: user_title: Дневник на %{user} in_language_title: Дневнички написи на %{language} new: 'Нов дневнички запис:' - new_title: Напишете нов запис во вашиот кориснички дневник + new_title: Напишете нов запис во корисничкиот дневник no_entries: Нема дневнички ставки recent_entries: Скорешни дневнички записи older_entries: Постари ставки @@ -334,53 +334,6 @@ mk: ago: пред %{ago} newer_comments: Понови коментари older_comments: Постари коментари - export: - title: Извези - start: - area_to_export: Простор за извоз - manually_select: Рачно изберете друга површина - format_to_export: Формат за извоз - osm_xml_data: OpenStreetMap XML податоци - map_image: Слика на картата (прикажува стандарден слој) - embeddable_html: HTML-код за вметнување - licence: Лиценца - export_details: Податоците на OpenStreetMap се нудат под Лиценцата - за отворени бази на Складиштето на отворени податоци (ODbL, Open Data - Commons Open Database License). - too_large: - advice: 'Ако не успее увозот погоре, послужете се со некој од долунаведените - извори:' - body: 'Подрачјето е преголемо за да може да се извезе како XML-податоци. Приближете - или изберете помала површина. Можете и да се послужите со еден од следниве - извори за крупно преземање:' - planet: - title: Планетата на OSM - description: Редовно подновувани примероци на целата база на OpenStreetMap - overpass: - title: Извршник „Надвозник“ - description: Преземете ја оваа рамка од огледална база на базата на OpenStreetMap - geofabrik: - title: Преземања на Geofabrik - description: Редовно подновувани извадоци од континенти, земји и избрани - градови - metro: - title: Метроизвадоци - description: Извадоци за поважните градови во свеетот и нивните околни подрачја - other: - title: Други извори - description: Другите извори се наведени на викито на OpenStreetMap - options: Нагодувања - format: Формат - scale: Размер - max: најв. - image_size: Големина на сликата - zoom: Приближи - add_marker: Додај бележник на картата - latitude: Г.Ш. - longitude: Г.Д. - output: Излезни податоци - paste_html: Ископирајте го HTML кодот за да го вметнете во страницата. - export_button: Извези geocoder: search: title: @@ -1028,268 +981,6 @@ mk: text: Дарувајте learn_more: Дознајте повеќе more: Повеќе - license_page: - foreign: - title: За овој превод - text: Во случај на спротиставеност помеѓу оваа преведена страница и %{english_original_link}, - предност има англиската страница - english_link: англискиот оригинал - native: - title: За страницава - text: Ја гледате англиската верзија на страницата за авторски права. Можете - да се вратите на %{native_link} на оваа страница или пак можете да престанете - со читање за авторските права и да %{mapping_link}. - native_link: македонската верзија - mapping_link: почнете да ги работите картите - legal_babble: - title_html: Авторски права и лиценца - intro_1_html: "OpenStreetMap® има - отворени податоци под лиценцата Open - Data\nCommons Open Database License (ODbL) од фондацијата - OpenStreetMap (OSMF)." - intro_2_html: "Нашите податоци слободно можете да ги умножувате, распространувате, - предавате и менувате, \nдоколку ја наведете OpenStreetMap и нејзините\nучесници. - Доколку ги измените или дополните податоците,\nдобиеното можете да го распространувате - само под истата лиценца. Вашите права и одговорност ќе ги најдете\nво целосниот - правен текст." - intro_3_html: |- - Картографијата во нашите полиња на картите и нашата документација - се нудат под лиценцата Криејтив комонс Наведи извор-Сподели под исти услови 2.0 (CC-BY-SA). - credit_title_html: Како да ја наведете OpenStreetMap - credit_1_html: |- - Задолжително наведувајте нè со “© Учесници на - OpenStreetMap ”. - credit_2_html: "Исто така мора јасно да истакнете дека податоците се нудат под - \nЛиценцата за отворени бази, и, доколку ги користите нашите полиња на картите, - дека\nкартографијата е под лиценцата CC-BY-SA. Ова може да го сторите со ставање - на врска\nдо оваа страница - за авторство. \nДруга можност (задолжителна ако го распространувате OSM - во \nподаточен облик) е непосредно да го наведете името на лиценцата и да - ставите врска. \nВо медиумите каде врските не се можни are not possible (на - пр. печатени дела), предлагаме \nда ги упатите читателите кон openstreetmap.org - (можеби со проширување на \n'OpenStreetMap' на оваа полна адреса), кон opendatacommons.org - и\n(ако е релевантно) кон creativecommons.org." - credit_3_html: |- - Кај пребарливата електронска карта, припишувањето треба да се прикаже во аголот од картата. - На пример: - attribution_example: - alt: Пример за тоа како да ја наведете OpenStreetMap на некоја страница - title: Пример за наведување - more_title_html: Повеќе информации - more_1_html: |- - Повеќе за употребата на нашите податоци и како да нè наведете ќе најдете на лиценцната страница. - more_2_html: |- - Иако OpenStreetMap работи со отворени податоци, ние не можеме да понудиме - бесплатни извршници (API) за карти на трети лица. - Погледајте ги правилата за употреба на извршникот, - правилата за полињата - и за Nominatim. - contributors_title_html: Нашите учесници - contributors_intro_html: |- - Во нашиот проект учествуваат илјадници поединци. Користиме и - податоци со отворена лиценца од државни картографски установи - и други извори, меѓу кои се: - contributors_at_html: |- - Австрија: Содржи податоци од - Град Виена (под - CC BY), - Покраина Предарлска и - Покраина Тирол (под CC-BY AT со исправки). - contributors_ca_html: |- - Canada: Содржи податоци од - GeoBase®, GeoGratis (© Министерство за природни ресурси на Канада), CanVec (© Министерство за природни ресурси на Канада), and StatCan (Географско одделение, - Статистичка служба на Канада). - contributors_fi_html: |- - Финска: Содржи податоци од топографската база и други ресурси на Државната геодетска служба на Финска, под лиценцата - NLSFI. - contributors_fr_html: |- - Франција: Содржи податоци од - Генералната даночна управа. - contributors_nl_html: |- - Холандија: Содржи © податоци од AND, 2007 - (www.and.com) - contributors_nz_html: |- - Нов Зеланд: Содржи податоци од - Катастарската служба на Нов Зеланд. Крунски авторски права. - contributors_si_html: |- - Словенија: Содржи податоци од - Геодетската управа и - Министерството за земјоделство, шумарство и храна - (јавни информации од Словенија). - contributors_za_html: |- - ЈАР: Содржи податоци од - Главната управа: - Национална катастарска служба, државни авторски права задржани. - contributors_gb_html: |- - Велика Британија: Содржи податоци - од Картографскиот завод на Обединетото Кралство© Крунски авторски права и - права на базата 2010-12. - contributors_footer_1_html: |- - Повеќе информации за овие и други извори искористени - за подобрување на OpenStreetMap ќе најдете на страницата Учесници на викито на OpenStreetMap. - contributors_footer_2_html: |- - Употребата на податоците на OpenStreetMap не подразбира дека добавувачот - на изворните податоци го застапува или рекламира OpenStreetMap, дава било каква гаранција, или - дека прифаќа било каква одговорност. - infringement_title_html: Прекршување на авторските права - infringement_1_html: |- - Би сакале да ги потсетиме учесниците на OSM дека никогаш не смеат да ставаат - податоци од извори заштитени со авторски права (на пр. Google Карти или печатени карти) без - изречна дозвола од имателите на тие права. - infringement_2_html: "Доколку сметате дека базата на OpenStreetMap или ова мрежно - место\nсодржи бесправно или неисправно поставени податоци, погледајте ја\nпроцедурата - \nза отстранување или поднесете жалба на \nоваа - наменска страница." - trademarks_title_html: Заштитни знаци - trademarks_1_html: OpenStreetMap, логото со лупа и „State of the Map“ („Состојба - на картата“) се заштитни знаци на задолжбината OpenStreetMap. Ако имате прашања - во врска со употребата на знаците, погл. Работната - група за лиценци. - welcome_page: - title: Добре дојдовте! - introduction_html: Добре дојдовте на OpenStreetMap — слободна и уредлива карта - на светот. Сега веќе сте регистрирани, што значи дека можете да почнете со работа. - Еве мала помош за најважните работи што треба да ги знаете. - whats_on_the_map: - title: Што има на картата - on_html: На OpenStreetMap се ставаат најразчични вистински и тековни - нешта — милиони објекти и згради, патишта и други поединости за местата. Можете - да ставате сè што постои и што ве интересира. - off_html: Она што нема тука да го најдете се судови и вреднувања, историски - (повеќе непостоечки) градби, нагаѓања и податоци од извори заштитени со авторски - права. Не копирајте и прецртувајте карти од семрежјето или од книги и атласи, - освен ако немате посебна дозвола. - basic_terms: - title: Основни картографски поими - paragraph_1_html: OpenStreetMap има свој жаргон. Еве некои корисни поими. - editor_html: Уредник е програм или мрежно место што се користи - за уредување на карти. - node_html: Јазол е точка на картата, како на пр. извесен ресторан - или дрво. - way_html: Пат е линија или подрачје, како пат, поток, езеро - или објект (здание). - tag_html: Ознака е податок за јазол или пат, како на пр. име - на ресторан или дозволената брзина на улица. - rules: - title: Правила! - paragraph_1_html: "OpenStreetMap има само малку формални правила, но очекуваме - сите учесници да соработуваат и општат со заедницата. Доколку имате на ум - други активности освен рачно уредување, прочитајте и проследете го упатството - \nУвоз - и \nАвтоматизирани - уредувања." - questions: - title: Имате прашања? - paragraph_1_html: |- - OpenStreetMap има неколку ресурси каде можете да дознаете за проектот, да поставувате прашања, - да водите заедничка дискусија и да документирате картографски теми. - Помош ќе добиете тука. - start_mapping: Почнете да ги работите картите - add_a_note: - title: Немате време да уредувате? Ставете белешка. - paragraph_1_html: Ако сакате да направите само поситна поправка и немате време - да се зачленувате и обучувате, тогаш просто ставете белешка. - paragraph_2_html: |- - Едноставно појдете на картата и стиснете на иконата со белешка: - . Со ова ќе ставите бележник на картата, што потоа можете да го преместувате со влечење. Внесете ја пораката, па зачувајте. Другите кратографи потоа ќе иследат за што станува збор. - fixthemap: - title: Пријава на проблем / Исправка на картата - how_to_help: - title: Како да помогнете - join_the_community: - title: Приклучете се во заедницата - explanation_html: Ако имате забележано проблем со податоците на нашите карти - (на пр. недостасува пат или адреса), најдобро е да се приклучите на заедницата - на OpenStreetMap или пак самите да ги исправите податоците. - add_a_note: - instructions_html: |- - Просто стиснете на или пак на истата икона од приказникот на картата. - Со ова на неа ќе ставите бележник, кој можете да го преместувате со влечење. Ставете ја пораката, па стиснете да зачувате. Потоа другите картографи ќе го иследат проблемот. - other_concerns: - title: Други проблеми - explanation_html: "Ако сте загрижени за тоа како се користат нашите податоци - или во врска со содржините, повеќе правни информации ќе добиете на\nстраницата - за авторски права или обратете се кај соодветната \nработна - група на OSMF." - help_page: - title: Помош - introduction: |- - OpenStreetMap има неколку ресурси каде можете да дознаете за проектот, да поставувате прашања, - да водите заедничка дискусија и да документирате картографски теми. - welcome: - url: /welcome - title: Добре дојдовте на OSM - description: Започнете со овој брз водич низ основите на OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: Почетен курс - description: Напатствија за почетници, напишани од заедницата. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Поставете прашање или побарајте во одговорите на порталот за прашања - и одговори на OSM. - mailing_lists: - title: Поштенски списоци - description: Поставете прашање или разговарајте за интересни прашања на широк - опсег на тематски и регионални поштенски списоци. - forums: - title: Форуми - description: Прашања и разговори за оние кои претпочитаат да општат со објави. - irc: - title: IRC - description: Разговор во живо на најразлични јазици и на многу теми. - switch2osm: - title: Преод на OSM - description: Помош за претпријатија и организации кои преоѓаат на карти на - OpenStreetMap и други услуги. - wiki: - url: https://wiki.openstreetmap.org/wiki/Mk:Main_Page - title: wiki.openstreetmap.org - description: Прелистајте ја подробната документација за OSM на викито. - about_page: - next: Следно - copyright_html: ©Ð£Ñ‡ÐµÑÐ½Ð¸Ñ†Ð¸ на
        OpenStreetMap - used_by: '%{name} обезбедува картографски податоци на илјадници мрежни места, - мобилни прилози и сметачки уреди' - lede_text: |- - OpenStreetMap ја гради заедница од учесници што придонесуваат со свои содржини и ги одржуваат податоците - за патишта, патеки, кафеани, железнички станици и многу друго ширум светот. - local_knowledge_title: Месни сознанија - local_knowledge_html: |- - OpenStreetMap полага особена важност на месни сознија. Учесниците користат - воздушни снимки, ГПС-уреди и пообични теренски карти - со цел да се провери исправноста - и актуелноста на OSM. - community_driven_title: Проектот го работи заедницата - community_driven_html: "Заедницата на OpenStreetMap е разнообразна, посветена - и секојдневно расте.\nМеѓу учесниците имаме аматерски картографи, стручњаци - во ГИС, технолози што работат со опслужувачите на OSM, \nхуманитарни работници - што картираат подрачја погодени \nод катастрофи и разни други.\nПовеќе за заедницата - ќе дознаете на блогот на OpenStreetMap,\nкорисничките дневници,\nблоговите - на заедницата и страниците на\nФондацијата - OSM website." - open_data_title: Отворени податоци - open_data_html: |- - OpenStreetMap е проект со отворени податоци: можете слободно да го користите за било која цел - доколку ја наведете OpenStreetMap и нејзините учесници. Ако решите да ги менувате податоците или да се надоврзувате на нив, добиеното дело можете да го распространувате исклучиво - под истата лиценца. Повеќе ќе најдете на страницата Авторски права и лиценцирање. - legal_title: Правни работи - legal_html: "Ова мрежно место и многу други поврзани услуги со кои раководи \nЗадолжбината OpenStreetMap (OSMF) \nво - име на заедницата. Употребата на сите услуги што ги нуди OSMF подлежи на нашите - \nПравила - за прифатлива употреба и Правилата - за заштита на личните податоци\n
        \nВе молиме контактирајте - ја OSMF \nако имате прашања во врска со лиценцирањето, авторките права и - други правни прашања и проблеми.\n
        \nOpenStreetMap, логото со лупа и „Состојба - на картата“ се заштитни - знаци на OSMF." - partners_title: Партнери notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} коментираше на дневничка ставка' @@ -1478,6 +1169,166 @@ mk: delete: deleted: Пораката е избришана site: + about: + next: Следно + copyright_html: ©Ð£Ñ‡ÐµÑÐ½Ð¸Ñ†Ð¸ на
        OpenStreetMap + used_by: '%{name} обезбедува картографски податоци на илјадници мрежни места, + мобилни прилози и сметачки уреди' + lede_text: |- + OpenStreetMap ја гради заедница од учесници што придонесуваат со свои содржини и ги одржуваат податоците + за патишта, патеки, кафеани, железнички станици и многу друго ширум светот. + local_knowledge_title: Месни сознанија + local_knowledge_html: |- + OpenStreetMap полага особена важност на месни сознија. Учесниците користат + воздушни снимки, ГПС-уреди и пообични теренски карти + со цел да се провери исправноста + и актуелноста на OSM. + community_driven_title: Проектот го работи заедницата + community_driven_html: "Заедницата на OpenStreetMap е разнообразна, посветена + и секојдневно расте.\nМеѓу учесниците имаме аматерски картографи, стручњаци + во ГИС, технолози што работат со опслужувачите на OSM, \nхуманитарни работници + што картираат подрачја погодени \nод катастрофи и разни други.\nПовеќе за + заедницата ќе дознаете на блогот + на OpenStreetMap,\nкорисничките дневници,\nблоговите на заедницата и страниците + на\nФондацијата OSM website." + open_data_title: Отворени податоци + open_data_html: |- + OpenStreetMap е проект со отворени податоци: можете слободно да го користите за било која цел + доколку ја наведете OpenStreetMap и нејзините учесници. Ако решите да ги менувате податоците или да се надоврзувате на нив, добиеното дело можете да го распространувате исклучиво + под истата лиценца. Повеќе ќе најдете на страницата Авторски права и лиценцирање. + legal_title: Правни работи + legal_html: "Ова мрежно место и многу други поврзани услуги со кои раководи + \ \nЗадолжбината OpenStreetMap (OSMF) + \nво име на заедницата. Употребата на сите услуги што ги нуди OSMF подлежи + на нашите \nПравила + за прифатлива употреба и Правилата + за заштита на личните податоци\n
        \nВе молиме контактирајте + ја OSMF \nако имате прашања во врска со лиценцирањето, авторките права + и други правни прашања и проблеми.\n
        \nOpenStreetMap, логото со лупа и + „Состојба на картата“ се заштитни + знаци на OSMF." + partners_title: Партнери + copyright: + foreign: + title: За овој превод + text: Во случај на спротиставеност помеѓу оваа преведена страница и %{english_original_link}, + предност има англиската страница + english_link: англискиот оригинал + native: + title: За страницава + text: Ја гледате англиската верзија на страницата за авторски права. Можете + да се вратите на %{native_link} на оваа страница или пак можете да престанете + со читање за авторските права и да %{mapping_link}. + native_link: македонската верзија + mapping_link: почнете да ги работите картите + legal_babble: + title_html: Авторски права и лиценца + intro_1_html: "OpenStreetMap® има + отворени податоци под лиценцата Open + Data\nCommons Open Database License (ODbL) од фондацијата + OpenStreetMap (OSMF)." + intro_2_html: "Нашите податоци слободно можете да ги умножувате, распространувате, + предавате и менувате, \nдоколку ја наведете OpenStreetMap и нејзините\nучесници. + Доколку ги измените или дополните податоците,\nдобиеното можете да го распространувате + само под истата лиценца. Вашите права и одговорност ќе ги најдете\nво целосниот + правен текст." + intro_3_html: |- + Картографијата во нашите полиња на картите и нашата документација + се нудат под лиценцата Криејтив комонс Наведи извор-Сподели под исти услови 2.0 (CC-BY-SA). + credit_title_html: Како да ја наведете OpenStreetMap + credit_1_html: |- + Задолжително наведувајте нè со “© Учесници на + OpenStreetMap ”. + credit_2_html: "Исто така мора јасно да истакнете дека податоците се нудат + под \nЛиценцата за отворени бази, и, доколку ги користите нашите полиња + на картите, дека\nкартографијата е под лиценцата CC-BY-SA. Ова може да го + сторите со ставање на врска\nдо оваа + страница за авторство. \nДруга можност (задолжителна ако го распространувате + OSM во \nподаточен облик) е непосредно да го наведете името на лиценцата + и да ставите врска. \nВо медиумите каде врските не се можни are not possible + (на пр. печатени дела), предлагаме \nда ги упатите читателите кон openstreetmap.org + (можеби со проширување на \n'OpenStreetMap' на оваа полна адреса), кон opendatacommons.org + и\n(ако е релевантно) кон creativecommons.org." + credit_3_html: |- + Кај пребарливата електронска карта, припишувањето треба да се прикаже во аголот од картата. + На пример: + attribution_example: + alt: Пример за тоа како да ја наведете OpenStreetMap на некоја страница + title: Пример за наведување + more_title_html: Повеќе информации + more_1_html: |- + Повеќе за употребата на нашите податоци и како да нè наведете ќе најдете на лиценцната страница. + more_2_html: |- + Иако OpenStreetMap работи со отворени податоци, ние не можеме да понудиме + бесплатни извршници (API) за карти на трети лица. + Погледајте ги правилата за употреба на извршникот, + правилата за полињата + и за Nominatim. + contributors_title_html: Нашите учесници + contributors_intro_html: |- + Во нашиот проект учествуваат илјадници поединци. Користиме и + податоци со отворена лиценца од државни картографски установи + и други извори, меѓу кои се: + contributors_at_html: |- + Австрија: Содржи податоци од + Град Виена (под + CC BY), + Покраина Предарлска и + Покраина Тирол (под CC-BY AT со исправки). + contributors_ca_html: |- + Canada: Содржи податоци од + GeoBase®, GeoGratis (© Министерство за природни ресурси на Канада), CanVec (© Министерство за природни ресурси на Канада), and StatCan (Географско одделение, + Статистичка служба на Канада). + contributors_fi_html: |- + Финска: Содржи податоци од топографската база и други ресурси на Државната геодетска служба на Финска, под лиценцата + NLSFI. + contributors_fr_html: |- + Франција: Содржи податоци од + Генералната даночна управа. + contributors_nl_html: |- + Холандија: Содржи © податоци од AND, 2007 + (www.and.com) + contributors_nz_html: |- + Нов Зеланд: Содржи податоци од + Катастарската служба на Нов Зеланд. Крунски авторски права. + contributors_si_html: |- + Словенија: Содржи податоци од + Геодетската управа и + Министерството за земјоделство, шумарство и храна + (јавни информации од Словенија). + contributors_za_html: |- + ЈАР: Содржи податоци од + Главната управа: + Национална катастарска служба, државни авторски права задржани. + contributors_gb_html: |- + Велика Британија: Содржи податоци + од Картографскиот завод на Обединетото Кралство© Крунски авторски права и + права на базата 2010-12. + contributors_footer_1_html: |- + Повеќе информации за овие и други извори искористени + за подобрување на OpenStreetMap ќе најдете на страницата Учесници на викито на OpenStreetMap. + contributors_footer_2_html: |- + Употребата на податоците на OpenStreetMap не подразбира дека добавувачот + на изворните податоци го застапува или рекламира OpenStreetMap, дава било каква гаранција, или + дека прифаќа било каква одговорност. + infringement_title_html: Прекршување на авторските права + infringement_1_html: |- + Би сакале да ги потсетиме учесниците на OSM дека никогаш не смеат да ставаат + податоци од извори заштитени со авторски права (на пр. Google Карти или печатени карти) без + изречна дозвола од имателите на тие права. + infringement_2_html: "Доколку сметате дека базата на OpenStreetMap или ова + мрежно место\nсодржи бесправно или неисправно поставени податоци, погледајте + ја\nпроцедурата + \nза отстранување или поднесете жалба на \nоваа + наменска страница." + trademarks_title_html: Заштитни знаци + trademarks_1_html: OpenStreetMap, логото со лупа и „State of the Map“ („Состојба + на картата“) се заштитни знаци на задолжбината OpenStreetMap. Ако имате + прашања во врска со употребата на знаците, погл. Работната + група за лиценци. index: js_1: Или користите прелистувач кој не поддржува JavaScript, или пак сте го оневозможиле тој програм. @@ -1510,6 +1361,111 @@ mk: id_not_configured: Не му се зададени поставки на уредувачкиот програм „iD“ no_iframe_support: Вашиот прелистувач не поддржува „иРамки“ (iframes) со HTML, без кои оваа можност не може да работи. + export: + title: Извези + area_to_export: Простор за извоз + manually_select: Рачно изберете друга површина + format_to_export: Формат за извоз + osm_xml_data: OpenStreetMap XML податоци + map_image: Слика на картата (прикажува стандарден слој) + embeddable_html: HTML-код за вметнување + licence: Лиценца + export_details: Податоците на OpenStreetMap се нудат под Лиценцата + за отворени бази на Складиштето на отворени податоци (ODbL, Open Data + Commons Open Database License). + too_large: + advice: 'Ако не успее увозот погоре, послужете се со некој од долунаведените + извори:' + body: 'Подрачјето е преголемо за да може да се извезе како XML-податоци. Приближете + или изберете помала површина. Можете и да се послужите со еден од следниве + извори за крупно преземање:' + planet: + title: Планетата на OSM + description: Редовно подновувани примероци на целата база на OpenStreetMap + overpass: + title: Извршник „Надвозник“ + description: Преземете ја оваа рамка од огледална база на базата на OpenStreetMap + geofabrik: + title: Преземања на Geofabrik + description: Редовно подновувани извадоци од континенти, земји и избрани + градови + metro: + title: Метроизвадоци + description: Извадоци за поважните градови во свеетот и нивните околни подрачја + other: + title: Други извори + description: Другите извори се наведени на викито на OpenStreetMap + options: Нагодувања + format: Формат + scale: Размер + max: најв. + image_size: Големина на сликата + zoom: Приближи + add_marker: Додај бележник на картата + latitude: Г.Ш. + longitude: Г.Д. + output: Излезни податоци + paste_html: Ископирајте го HTML кодот за да го вметнете во страницата. + export_button: Извези + fixthemap: + title: Пријава на проблем / Исправка на картата + how_to_help: + title: Како да помогнете + join_the_community: + title: Приклучете се во заедницата + explanation_html: Ако имате забележано проблем со податоците на нашите карти + (на пр. недостасува пат или адреса), најдобро е да се приклучите на заедницата + на OpenStreetMap или пак самите да ги исправите податоците. + add_a_note: + instructions_html: |- + Просто стиснете на или пак на истата икона од приказникот на картата. + Со ова на неа ќе ставите бележник, кој можете да го преместувате со влечење. Ставете ја пораката, па стиснете да зачувате. Потоа другите картографи ќе го иследат проблемот. + other_concerns: + title: Други проблеми + explanation_html: "Ако сте загрижени за тоа како се користат нашите податоци + или во врска со содржините, повеќе правни информации ќе добиете на\nстраницата + за авторски права или обратете се кај соодветната \nработна + група на OSMF." + help: + title: Помош + introduction: |- + OpenStreetMap има неколку ресурси каде можете да дознаете за проектот, да поставувате прашања, + да водите заедничка дискусија и да документирате картографски теми. + welcome: + url: /welcome + title: Добре дојдовте на OSM + description: Започнете со овој брз водич низ основите на OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: Почетен курс + description: Напатствија за почетници, напишани од заедницата. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Поставете прашање или побарајте во одговорите на порталот за + прашања и одговори на OSM. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Поштенски списоци + description: Поставете прашање или разговарајте за интересни прашања на широк + опсег на тематски и регионални поштенски списоци. + forums: + url: http://forum.openstreetmap.org/ + title: Форуми + description: Прашања и разговори за оние кои претпочитаат да општат со објави. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Разговор во живо на најразлични јазици и на многу теми. + switch2osm: + url: https://switch2osm.org/ + title: Преод на OSM + description: Помош за претпријатија и организации кои преоѓаат на карти на + OpenStreetMap и други услуги. + wiki: + url: https://wiki.openstreetmap.org/wiki/Mk:Main_Page + title: wiki.openstreetmap.org + description: Прелистајте ја подробната документација за OSM на викито. sidebar: search_results: Исход од пребарувањето close: Затвори @@ -1610,6 +1566,53 @@ mk: image: Слика alt: Алтернативен текст url: URL + welcome: + title: Добре дојдовте! + introduction_html: Добре дојдовте на OpenStreetMap — слободна и уредлива карта + на светот. Сега веќе сте регистрирани, што значи дека можете да почнете со + работа. Еве мала помош за најважните работи што треба да ги знаете. + whats_on_the_map: + title: Што има на картата + on_html: На OpenStreetMap се ставаат најразчични вистински и тековни + нешта — милиони објекти и згради, патишта и други поединости за местата. + Можете да ставате сè што постои и што ве интересира. + off_html: Она што нема тука да го најдете се судови и вреднувања, + историски (повеќе непостоечки) градби, нагаѓања и податоци од извори заштитени + со авторски права. Не копирајте и прецртувајте карти од семрежјето или од + книги и атласи, освен ако немате посебна дозвола. + basic_terms: + title: Основни картографски поими + paragraph_1_html: OpenStreetMap има свој жаргон. Еве некои корисни поими. + editor_html: Уредник е програм или мрежно место што се користи + за уредување на карти. + node_html: Јазол е точка на картата, како на пр. извесен + ресторан или дрво. + way_html: Пат е линија или подрачје, како пат, поток, езеро + или објект (здание). + tag_html: Ознака е податок за јазол или пат, како на пр. + име на ресторан или дозволената брзина на улица. + rules: + title: Правила! + paragraph_1_html: "OpenStreetMap има само малку формални правила, но очекуваме + сите учесници да соработуваат и општат со заедницата. Доколку имате на ум + други активности освен рачно уредување, прочитајте и проследете го упатството + \nУвоз + и \nАвтоматизирани + уредувања." + questions: + title: Имате прашања? + paragraph_1_html: |- + OpenStreetMap има неколку ресурси каде можете да дознаете за проектот, да поставувате прашања, + да водите заедничка дискусија и да документирате картографски теми. + Помош ќе добиете тука. + start_mapping: Почнете да ги работите картите + add_a_note: + title: Немате време да уредувате? Ставете белешка. + paragraph_1_html: Ако сакате да направите само поситна поправка и немате време + да се зачленувате и обучувате, тогаш просто ставете белешка. + paragraph_2_html: |- + Едноставно појдете на картата и стиснете на иконата со белешка: + . Со ова ќе ставите бележник на картата, што потоа можете да го преместувате со влечење. Внесете ја пораката, па зачувајте. Другите кратографи потоа ќе иследат за што станува збор. trace: visibility: private: Доверливо (споделено само како анонимни, неподредени точки) @@ -1655,6 +1658,7 @@ mk: trace_header: upload_trace: Подигни трага see_all_traces: Погледајте ги сите траги + see_my_traces: Мои траги traces_waiting: one: Имате %{count} трага што чека на подигање. Би ве посоветувале да ја почекате да заврши пред да подигате други, за да не ја кочите редицата во која чекаат @@ -1683,6 +1687,7 @@ mk: delete_track: Избриши ја трагава trace_not_found: Трагата не беше најдена! visibility: 'Видливост:' + confirm_delete: Да ја избришам трагава? trace_paging_nav: showing_page: Страница %{page} older: Постари траги @@ -1705,6 +1710,7 @@ mk: map: карта list: public_traces: Јавни ГПС-траги + my_traces: Мои ГПС-траги public_traces_from: Јавни ГПС-траги од %{user} description: Прелистување на скороподигнати ГПС-траги tagged_with: ' означено со %{tags}' @@ -1742,7 +1748,7 @@ mk: Најавете се на мрежниот посредник за да ги погледате Условите за учесниците. Нема потреба да се согласувате со услоците, но мора да ги прочитате. oauth: - oauthorize: + authorize: title: Овластете пристап до вашата сметка request_access: Извршникот %{app_name} бара пристап до вашата сметка, %{user}. Видете дали би сакале извршникот да ги има следните можности. Можете да одберете @@ -1756,11 +1762,11 @@ mk: allow_write_gpx: подига ГПС-траги. allow_write_notes: измена на белешки. grant_access: Дај пристап - oauthorize_success: + authorize_success: title: Барањето за овластување е дозволено allowed: На извршникот %{app_name} му дадовте пристап до вашата сметка. verification: Потврдниот код гласи %{code}. - oauthorize_failure: + authorize_failure: title: Барањето за овластување не успеа denied: На извршникот %{app_name} му го одбивте пристапот до вашата сметка. invalid: Шифрата за овластување е неважечка. @@ -2005,6 +2011,7 @@ mk: if set location: Задајте ја вашата местоположба на страницата %{settings_link} за да ги видите соседните корисници околу вас. settings_link_text: прилагодувања + my friends: Мои пријатели no friends: Сè уште немате додадено пријатели. km away: '%{count} км од вас' m away: '%{count} м од вас' @@ -2210,7 +2217,7 @@ mk: confirm: Потврди fail: Не можев да го лишам корисникот`%{name}' од улогата `%{role}'. Проверете дали корисникот и улогата се важечки. - user_block: + user_blocks: model: non_moderator_update: Морате да бидете модератор за да правите или подновувате блокови. @@ -2271,20 +2278,6 @@ mk: period: one: еден час other: '%{count} часа' - partial: - show: Прикажи - edit: Уреди - revoke: Поништи! - confirm: Дали сте сигурни? - display_name: Блокиран корисник - creator_name: Создавач - reason: Причина за блокирање - status: Статус - revoker_name: 'Поништил:' - not_revoked: (не се поништува) - showing_page: Страница %{page} - next: Следна » - previous: « Претходна helper: time_future: Истекува за %{time}. until_login: Активно додека не се најави корисникот. @@ -2314,8 +2307,22 @@ mk: back: Преглед на сите блокови revoker: 'Поништувач:' needs_view: Овој корисник мора да се најави пред да се исчисти блокот. - note: - description: + block: + not_revoked: (не се поништува) + show: Прикажи + edit: Уреди + revoke: Поништи! + blocks: + display_name: Блокиран корисник + creator_name: Создавач + reason: Причина за блокирање + status: Статус + revoker_name: 'Поништил:' + showing_page: Страница %{page} + next: Следна » + previous: « Претходна + notes: + comment: opened_at_html: Создадена пред %{when} opened_at_by_html: Создадена пред %{when} од %{user} commented_at_html: Подновена пред %{when} @@ -2445,7 +2452,7 @@ mk: distance: Растојание errors: no_route: Не можев да најдам маршрута помеѓу тие две места. - no_place: За жал, не можев да го најдам тоа место. + no_place: За жал, не можев да го најдам местото „%{place}“. instructions: continue_without_exit: Продолжете на %{name} slight_right_without_exit: Малку надесно на %{name} @@ -2464,6 +2471,7 @@ mk: onramp_right_with_name_directions: На влезот десно приклучете се на %{name}, кон %{directions} onramp_right_without_directions: Свртете во влезот десно + onramp_right: Свртете во влезот десно endofroad_right_without_exit: На крајот од патот свртете десно на %{name} merge_right_without_exit: Навлезете десно во %{name} fork_right_without_exit: На разгранокот свртете десно на %{name} @@ -2488,6 +2496,7 @@ mk: onramp_left_with_name_directions: На влезот лево приклучете се на %{name}, кон %{directions} onramp_left_without_directions: Свртете во влезот лево + onramp_left: Свртете во влезот лево endofroad_left_without_exit: На крајот од патот свртете лево на %{name} merge_left_without_exit: Навлезете лево во %{name} fork_left_without_exit: На разгранокот свртете лево на %{name} @@ -2524,7 +2533,7 @@ mk: show_address: Прикажи адреса query_features: Можности за барања centre_map: Тука сосредоточи ја картата - redaction: + redactions: edit: description: Опис heading: Уреди редакција diff --git a/config/locales/mr.yml b/config/locales/mr.yml index 150ade432..d7f837c2c 100644 --- a/config/locales/mr.yml +++ b/config/locales/mr.yml @@ -312,52 +312,6 @@ mr: ago: '%{ago} पूर्वी' newer_comments: नवे अभिप्राय older_comments: जुने अभिप्राय - export: - title: निर्यात - start: - area_to_export: निर्यात करावयाचे क्षेत्र - manually_select: वेगळे क्षेत्र निवडा - format_to_export: निर्यातीचे प्रारुप - osm_xml_data: ओपनस्ट्रीटमॅप XML डाटा - map_image: नकाशा चित्र (प्रमाणित स्तर दाखविते) - embeddable_html: अंतःस्थापन करण्याजोगी HTML - licence: परवाना - export_details: ओपनस्ट्रीटमॅप डाटा हा - परवान्यांतर्गत आहे.ओपन डाटा कॉमन्स ओपन डाटाबेस परवाना (ODbL). - too_large: - advice: 'जर वरील निर्यात करण्यास अपयश आले, तर कृपया खालील स्रोत वापरण्याचा - विचार करा :' - body: हे क्षेत्र OpenStreetMap XML Data म्हणून निर्यात करण्यास खूपच मोठे आहे.कृपया - लहान करा किंवा लहान क्षेत्र निवडा किंवा मोठ्या प्रमाणात डाटाचे अधिभारणासाठी - खालील यादी केलेल्या स्रोतांपैकी एकाचा वापर करा. - planet: - title: प्लॅनेट OSM - description: संपूर्ण ओपनस्ट्रीटमॅप डाटाबेसच्या नियमित अद्यतन केलेल्या प्रती - overpass: - title: API टाळा - description: ओपनस्ट्रीटमॅप प्रतिमा डाटाबेसमधून बंधनपेटीचे(बाउंडिंग बॉक्स) - अधिभारण करा - geofabrik: - title: जियोफेब्रिक अधिभारण - description: नियमितपणे अद्ययावत केले जाणारे खंड, देश, व निवडक शहरांचे उतारे - metro: - title: मेट्रो एक्स्ट्रॅक्ट्स् - description: जगातील प्रमुख शहरे व त्यांच्या सभोवतालीच्या क्षेत्रांचे उतारे - other: - title: इतर स्रोत - description: ओपनस्ट्रीटमॅप विकीवर सूचीबद्ध अतिरिक्त स्रोत - options: विकल्प - format: आराखडा - scale: प्रमाण - max: कमाल - image_size: चित्राचा आकार - zoom: मोठे करा - add_marker: नकाशावर दर्शकचिन्ह जोडा - latitude: 'अक्षांश:' - longitude: 'रेखांश:' - output: उत्पादन - paste_html: संकेतस्थळावर अंतःस्थापनासाठी HTML चिकटवा - export_button: निर्यात geocoder: search: title: @@ -859,78 +813,6 @@ mr: text: देणगी द्या learn_more: अधिक जाणून घ्या more: अधिक - license_page: - foreign: - title: या भाषांतराबद्दल - text: या भाषांतरीत पानाच्या व %{english_original_link} यादरम्यान काही वादाचा - प्रसंग उद्भवल्यास, मूळ इंग्लिश पानास प्राथमिकता राहील. - english_link: मूळ इंग्लिश - native: - title: या पानाबद्दल - text: आपण या प्रताधिकार पानाची इंग्लिश आवृत्ती पहात आहात. आपण या पानाच्या %{native_link}कडे - परत जाऊ शकता, किंवा प्रताधिकाराबद्दल वाचणे थांबवून %{mapping_link} सुरु करू - शकता. - native_link: मराठी आवृत्ती - mapping_link: नकाशा आरेखन - legal_babble: - title_html: प्रताधिकार व परवाना - credit_title_html: ओपनस्ट्रीटमॅपला श्रेय कसे द्यावे - more_title_html: अधिक शोध - contributors_title_html: आमचे योगदाते - contributors_intro_html: 'आमचे योगदानकर्ते हे हजारोंच्या संख्येतील व्यक्ति आहेत.आम्ही - मुक्त परवान्यांतर्गत असलेला डाटा हा राष्ट्रीय नकाशा संस्थेंकडून व त्यातील - इतर स्रोतांतून घेऊन त्याचा अंतर्भाव करतो:' - infringement_title_html: प्रताधिकार भंग - welcome_page: - title: सुस्वागतम्‌! - whats_on_the_map: - title: नकाशावर काय आहे - basic_terms: - title: नकाशा आरेखनासाठीच्या मूलभूत संज्ञा - paragraph_1_html: ओपनस्ट्रीटमॅपची स्वतःची एक बोली आहे. हे काही प्रमुख शब्द आहेत - जे कामी येतील. - editor_html: संपादक हा एक संगणक अनुप्रयोग किंवा संकेतस्थळ आहे, - जे वापरून आपण नकाशाचे संपादन करू शकता. - node_html: गाठ म्हणजे नकाशावरील एक बिंदू, जसे की एक उपाहारगृह - किंवा एक झाड. - way_html: मार्ग म्हणजे एखादी रेष किंवा एखादे क्षेत्र, जसे की - रस्ता, प्रवाह, तलाव किंवा इमारत. - questions: - title: काही प्रश्न? - start_mapping: नकाशा आरेखन सुरु करा - add_a_note: - title: संपादन करण्यास वेळ नाही?टिप्पणी जोडा! - paragraph_1_html: |- - जर आपणास काही छोटेसेच ठिक करुन हवे आहे व आपल्यापाशी प्रवेशाचा व संपादन शिकण्यास वेळ नाही - - तर एक टिप्पणी जोडणे सोपे आहे. - fixthemap: - title: समस्या नोंदवा/नकाशा नीयत करा - how_to_help: - title: मदत कशी करावी - join_the_community: - title: समाजास जुळा - help_page: - title: साहाय्य मिळविणे - welcome: - url: /welcome - title: ओएसएम वर स्वागत आहे - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: OSMच्या प्रश्नोत्तरासाठीच्या संकेतस्थळावर प्रश्न विचारा किंवा उत्तरे - शोधा. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: सखोल OSM प्रलेखनासाठी विकी वाचा. - about_page: - next: पुढील - copyright_html: ©à¤“पनस्ट्रीटमॅप
        योगदाते - local_knowledge_title: स्थानिक ज्ञान - community_driven_title: समाजातर्फे चालविलेले - open_data_title: मुक्त माहिती - partners_title: भागीदार notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user}ने एका अनुदिनीतील नोंदीवर अभिप्राय दिला' @@ -1038,6 +920,35 @@ mr: delete: deleted: संदेश वगळला site: + about: + next: पुढील + copyright_html: ©à¤“पनस्ट्रीटमॅप
        योगदाते + local_knowledge_title: स्थानिक ज्ञान + community_driven_title: समाजातर्फे चालविलेले + open_data_title: मुक्त माहिती + partners_title: भागीदार + copyright: + foreign: + title: या भाषांतराबद्दल + text: या भाषांतरीत पानाच्या व %{english_original_link} यादरम्यान काही वादाचा + प्रसंग उद्भवल्यास, मूळ इंग्लिश पानास प्राथमिकता राहील. + english_link: मूळ इंग्लिश + native: + title: या पानाबद्दल + text: आपण या प्रताधिकार पानाची इंग्लिश आवृत्ती पहात आहात. आपण या पानाच्या + %{native_link}कडे परत जाऊ शकता, किंवा प्रताधिकाराबद्दल वाचणे थांबवून %{mapping_link} + सुरु करू शकता. + native_link: मराठी आवृत्ती + mapping_link: नकाशा आरेखन + legal_babble: + title_html: प्रताधिकार व परवाना + credit_title_html: ओपनस्ट्रीटमॅपला श्रेय कसे द्यावे + more_title_html: अधिक शोध + contributors_title_html: आमचे योगदाते + contributors_intro_html: 'आमचे योगदानकर्ते हे हजारोंच्या संख्येतील व्यक्ति + आहेत.आम्ही मुक्त परवान्यांतर्गत असलेला डाटा हा राष्ट्रीय नकाशा संस्थेंकडून + व त्यातील इतर स्रोतांतून घेऊन त्याचा अंतर्भाव करतो:' + infringement_title_html: प्रताधिकार भंग index: js_1: आपण जावास्क्रीप्ट चालवू न शकणारा न्याहाळक वापरत आहात, किंवा जावास्क्रीप्ट निष्क्रिय आहे. @@ -1053,6 +964,71 @@ mr: आपण आपल्या %{user_page}वरून ती सार्वजनिक ठेवू शकता. user_page_link: सदस्य पाना anon_edits_link_text: असे का आहे ते जाणून घ्या. + export: + title: निर्यात + area_to_export: निर्यात करावयाचे क्षेत्र + manually_select: वेगळे क्षेत्र निवडा + format_to_export: निर्यातीचे प्रारुप + osm_xml_data: ओपनस्ट्रीटमॅप XML डाटा + map_image: नकाशा चित्र (प्रमाणित स्तर दाखविते) + embeddable_html: अंतःस्थापन करण्याजोगी HTML + licence: परवाना + export_details: ओपनस्ट्रीटमॅप डाटा हा + परवान्यांतर्गत आहे.ओपन डाटा कॉमन्स ओपन डाटाबेस परवाना (ODbL). + too_large: + advice: 'जर वरील निर्यात करण्यास अपयश आले, तर कृपया खालील स्रोत वापरण्याचा + विचार करा :' + body: हे क्षेत्र OpenStreetMap XML Data म्हणून निर्यात करण्यास खूपच मोठे आहे.कृपया + लहान करा किंवा लहान क्षेत्र निवडा किंवा मोठ्या प्रमाणात डाटाचे अधिभारणासाठी + खालील यादी केलेल्या स्रोतांपैकी एकाचा वापर करा. + planet: + title: प्लॅनेट OSM + description: संपूर्ण ओपनस्ट्रीटमॅप डाटाबेसच्या नियमित अद्यतन केलेल्या प्रती + overpass: + title: API टाळा + description: ओपनस्ट्रीटमॅप प्रतिमा डाटाबेसमधून बंधनपेटीचे(बाउंडिंग बॉक्स) + अधिभारण करा + geofabrik: + title: जियोफेब्रिक अधिभारण + description: नियमितपणे अद्ययावत केले जाणारे खंड, देश, व निवडक शहरांचे उतारे + metro: + title: मेट्रो एक्स्ट्रॅक्ट्स् + description: जगातील प्रमुख शहरे व त्यांच्या सभोवतालीच्या क्षेत्रांचे उतारे + other: + title: इतर स्रोत + description: ओपनस्ट्रीटमॅप विकीवर सूचीबद्ध अतिरिक्त स्रोत + options: विकल्प + format: आराखडा + scale: प्रमाण + max: कमाल + image_size: चित्राचा आकार + zoom: मोठे करा + add_marker: नकाशावर दर्शकचिन्ह जोडा + latitude: 'अक्षांश:' + longitude: 'रेखांश:' + output: उत्पादन + paste_html: संकेतस्थळावर अंतःस्थापनासाठी HTML चिकटवा + export_button: निर्यात + fixthemap: + title: समस्या नोंदवा/नकाशा नीयत करा + how_to_help: + title: मदत कशी करावी + join_the_community: + title: समाजास जुळा + help: + title: साहाय्य मिळविणे + welcome: + url: /welcome + title: ओएसएम वर स्वागत आहे + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: OSMच्या प्रश्नोत्तरासाठीच्या संकेतस्थळावर प्रश्न विचारा किंवा + उत्तरे शोधा. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: सखोल OSM प्रलेखनासाठी विकी वाचा. sidebar: search_results: शोध निकाल close: बंद करा @@ -1138,6 +1114,29 @@ mr: text: मजकूर image: चित्र url: URL + welcome: + title: सुस्वागतम्‌! + whats_on_the_map: + title: नकाशावर काय आहे + basic_terms: + title: नकाशा आरेखनासाठीच्या मूलभूत संज्ञा + paragraph_1_html: ओपनस्ट्रीटमॅपची स्वतःची एक बोली आहे. हे काही प्रमुख शब्द + आहेत जे कामी येतील. + editor_html: संपादक हा एक संगणक अनुप्रयोग किंवा संकेतस्थळ + आहे, जे वापरून आपण नकाशाचे संपादन करू शकता. + node_html: गाठ म्हणजे नकाशावरील एक बिंदू, जसे की एक उपाहारगृह + किंवा एक झाड. + way_html: मार्ग म्हणजे एखादी रेष किंवा एखादे क्षेत्र, जसे + की रस्ता, प्रवाह, तलाव किंवा इमारत. + questions: + title: काही प्रश्न? + start_mapping: नकाशा आरेखन सुरु करा + add_a_note: + title: संपादन करण्यास वेळ नाही?टिप्पणी जोडा! + paragraph_1_html: |- + जर आपणास काही छोटेसेच ठिक करुन हवे आहे व आपल्यापाशी प्रवेशाचा व संपादन शिकण्यास वेळ नाही + + तर एक टिप्पणी जोडणे सोपे आहे. trace: create: upload_trace: GPS अनुरेख चढवा @@ -1362,16 +1361,15 @@ mr: showing: one: पान %{page} (%{first_item}, %{items} पैकी) other: पान %{page} (%{first_item}-%{last_item}, %{items}पैकी) - user_block: + user_blocks: period: one: १ तास other: '%{count} तास' - partial: - confirm: नक्की आहात? + blocks: showing_page: पान %{page} next: पुढील » previous: « मागील - note: + notes: mine: ago_html: '%{when} पूर्वी' javascripts: @@ -1428,7 +1426,7 @@ mr: पडा' offramp_left_with_exit_name_directions: '%{directions}कडे जाताना %{name}वर %{exit}ने बाहेर पडा' - redaction: + redactions: new: description: वर्णन show: diff --git a/config/locales/ms.yml b/config/locales/ms.yml index ef6e0154c..5007cab7c 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -328,54 +328,6 @@ ms: ago: '%{ago} lalu' newer_comments: Komen Terbaru older_comments: Komen Terlama - export: - title: Eksport - start: - area_to_export: Kawasan untuk Dieksport - manually_select: Pilih kawasan yang lain secara insani - format_to_export: Format untuk Dieksport - osm_xml_data: Data XML OpenStreetMap - map_image: Imej Peta (memaparkan paparan piawai) - embeddable_html: HTML Boleh Benam - licence: Lesen - export_details: Data OpenStreetMap dilesenkan di bawah lesen Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Jika pengeksportan di atas gagal, sila pertimbangkan untuk menggunakan - antara sumber-sumber yang berikut:' - body: 'Kawasan ini terlalu besar untuk dieksport dalam bentuk Data XML OpenStreetMap. - Sila zum dekat atau pilih kawasan yang lebih kecil, atau gunakan mana-mana - sumber yang berikut untuk memuat turun data secara pukal:' - planet: - title: Planet OSM - description: Salinan pangkalan data lengkap OpenStreetMap yang sentiasa - dikemaskinikan - overpass: - title: Overpass API - description: Muat turun petak sempadan ini dari cermin pangkalan data OpenStreetMap - geofabrik: - title: Muat-Turunan Geofabrik - description: Ekstrak benua, negara dan bandar-bandar terpilih yang sentiasa - dikemaskinikan - metro: - title: Ekstrak Metro - description: Pengekstrakan untuk bandar-bandar utama di dunia serta kawasan-kawasan - sekitar - other: - title: Sumber-sumber Lain - description: Sumber-sumber lanjutan yang tersenarai di wiki OpenStreetMap - options: Pilihan - format: Format - scale: Skala - max: maks - image_size: Saiz Imej - zoom: Zum - add_marker: Bubuh penanda pada peta - latitude: 'GL:' - longitude: 'GB:' - output: Output - paste_html: Tampalkan HTML untuk dibenamkan dalam tapak web - export_button: Eksport geocoder: search: title: @@ -943,217 +895,6 @@ ms: text: Derma learn_more: Ketahui Lebih Lanjut more: Selebihnya - license_page: - foreign: - title: Perihal terjemahan ini - text: Sekiranya terdapat percanggahan antara halaman yang diterjemah ini dengan - %{english_original_link}, maka versi bahasa Inggeris itu akan diberi keutamaan - english_link: teks asal bahasa Inggeris - native: - title: Perihal laman ini - text: Anda sedang membaca halaman hak cipta dalam versi bahasa Inggeris. Anda - boleh kembali kepada %{native_link} halaman ini, atau berhenti membaca perihal - hak cipta dan %{mapping_link}. - native_link: versi Bahasa Melayu - mapping_link: mula membuat peta - legal_babble: - title_html: Hak Cipta dan Lesen - intro_1_html: |- - OpenStreetMap ialah data terbuka yang dilesenkan di bawah Open Data - Commons Open Database License (ODbL). - intro_2_html: Anda bebas menyalin, mengedarkan, menyebarkan dan mengubah suai - data kami, asalkan anda memperakui OpenStreetMap dan para penyumbangnya. Jika - anda mengubah suai atau menokok tambah data kami, anda boleh mengedarkannya - di bawah lesen yang sama sahaja. Kanun - undang-undang yang lengkap ini menerangkan hak-hak dan tanggungjawab anda. - intro_3_html: Kartografi jubin peta kami serta pendokumenan kami dilesenkan - di bawah lesen Pengiktirafan-PerkongsianSerupa - 2.0 (CC-BY-SA). - credit_title_html: Cara memberikan penghargaan kepada OpenStreetMap - credit_1_html: Kami memerlukan anda menggunakan dikenali sebagai “© - penyumbang OpenStreetMap” dalam penghargaan. - credit_2_html: |- - Anda juga mesti memperjelas bahawa data ini tersedia di bawah Open Database License, dan juga kartografinya berada di bawah lesen CC-BY-SA jika jubin peta kami turut digunakan. Anda boleh berbuat demikian dengan membuat pautan ke halaman hak cipta ini. - Selain itu, dan sebagai kemestian untuk mengedarkan OSM dalam bentuk data, anda boleh menyatakan nama dan membuat pautan secara terus kepada lesen. Untuk media yang tidak membolehkan pautan (cth. bahan cetakan), kami mencadangkan supaya anda menghalakan pembaca-pembaca ke openstreetmap.org (misalnya, dengan meluaskan 'OpenStreetMap' ke alamat penuh ini), ke opendatacommons.org, dan juga creativecommons.org jika berkenaan. - credit_3_html: |- - Untuk peta elektronik yang boleh disemak imbas, kredit seharusnya disiarkan di sudut peta. - Contoh: - attribution_example: - alt: Contoh mengatribusikan OpenStreetMap pada halaman sesawang - title: Contoh atribusi - more_title_html: Mengetahui lebih lanjut - more_1_html: Baca lebih lanjut tentang penggunaan data kami serta memperakui - kami di Soalan Lazim - Undang-Undang. - more_2_html: Sungguhpun OpenStreetMap merupakan data terbuka, namun kami tidak - boleh menyediakan API peta yang percuma kepada pembangun pihak ketiga. Sila - rujuk Dasar - Penggunaan API, Dasar - Penggunaan Jubin dan Dasar - Penggunaan Nominatim. - contributors_title_html: Penyumbang kami - contributors_intro_html: 'Penyumbang kami merupakan ribuan individu. Kami turut - menyertakan data yang dilesenkan secara terbuka daripada lembaga-lembaga pemetaan - kebangsaan dan sumber-sumber yang lain, antaranya:' - contributors_at_html: 'Austria: Mengandungi data daripada Stadt Wien (di bawah CC - BY) dan Land - Vorarlberg, dan Land Tirol (under CC-BY - AT dengan pindaan).' - contributors_ca_html: 'Kanada: Mengandungi data daripada GeoBase®, - GeoGratis (© Department of Natural Resources Canada), CanVec (© - Department of Natural Resources Canada), and StatCan (Geography Division, - Statistics Canada).' - contributors_fi_html: |- - Finland: Mengandungi data dari Pangkalan Data Topografi - Tinjauan Daratan Negara Finland dan lain-lain set data di bawah - Lesen NLSFI. - contributors_fr_html: 'Perancis: Mengandungi data yang disumberkan - daripada Direction Générale des Impôts.' - contributors_nl_html: |- - Belanda: Mendandungi data © AND, 2007 - (www.and.com) - contributors_nz_html: 'New Zealand: Mengandungi data yang disumberkan - daripada Land Information New Zealand. Crown Copyright reserved.' - contributors_za_html: |- - Afrika Selatan: Mengandungi data yang disumberkan daripada - Pejabat Ketua Pengarah: - National Geo-Spatial Information, Hak cipta kerajaan dipelihara. - contributors_gb_html: 'United Kingdom: Mengandungi data Ordnance - Survey data © Crown copyright and database right 2010-12.' - contributors_footer_1_html: ' Untuk keterangan lanjut tentang semua ini, serta - sumber-sumber lain yang telah digunakan untuk membantu menambah baik OpenStreetMap, - sila rujuk Halaman - penyumbang di Wiki OpenStreetMap.' - contributors_footer_2_html: ' Penyertaan data dalam OpenStreetMap tidak bermaksud - bahawa pembekal data asal menyokong OpenStreetMap, menyediakan sebarang waranti, - atau menerima sebarang tanggungan.' - infringement_title_html: Pencabulan hak cipta - infringement_1_html: Penyumbang OSM diingatkan supaya tidak sesekali menambah - data daripada mana-mana sumber berhak cipta (cth. Peta Google atau peta cetakan) - tanpa izin bersurat daripada pemegang hak cipta. - infringement_2_html: "Sekiranya anda percaya bahawa bahan berhak cipta telah - dtambahkan secara tidak berpatutan ke dalam pangkalan OpenStreetMap atau tapak - ini, sila rujuk prosedur - penarikan atau laporkan secara terus ke dalam \nhalaman - laporan on-line." - welcome_page: - title: Selamat datang! - introduction_html: Selamat datang ke OpenStreetMap, peta dunia yang bebas disunting - oleh orang awam. Kini setelah mendaftar, anda bersiap sedia untuk memeta. Yang - berikut ialah panduan ringkas dengan maklumat-maklumat yang paling penting bagi - anda. - whats_on_the_map: - title: Kandungan Peta - on_html: OpenStreetMap merupakan tempat untuk memetakan benda-benda yang nyata - dan terkini - termasuklah berjuta-juta bangunan, jalan raya dan lain-lain - butiran tempat. Anda boleh memetakan sebarang ciri-ciri nyata yang menarik - minat anda. - off_html: Ia tidak mencakupi data pandangan peribadi seperti penilaian, - ciri-ciri yang wujud zaman dahulu atau sekadar andaian, serta data dari sumber - berhak cipta. Melainkan dengan izin khas, jangan salin dari peta Internet - mahupun kertas. - basic_terms: - title: Peristilahan Asas Pemetaan - paragraph_1_html: OpenStreetMap mempunyai peristilahan tersendiri. Yang berikut - ialah kata-kata kunci yang berguna. - editor_html: Editor ialah perisian atau laman web yang boleh - digunakan untuk menyunting peta. - node_html: Nod ialah titik pada peta, seperti sebuah kedai - makan atau sebatang pokok. - way_html: Jalan ialah garis atau kawasan seperti jalan raya, - sungai, tasik atau bangunan. - tag_html: Teg ialah keterangan ringkas mengenai nod atau jalan, - seperti nama restoran atau had laju jalan raya. - rules: - title: Peraturan! - questions: - title: Ada soalan? - paragraph_1_html: |- - OpenStreetMap menyediakan kemudahan-kemudahan untuk mempelajari tentang projek ini, bersoal jawab, serta bekerjasama membincangkan dan mendokumenkan topik-topik pemetaan. - Minta bantuan di sini. - start_mapping: Mula - add_a_note: - title: Tiada Masa untuk Menyunting? Letak Nota! - paragraph_1_html: Jika anda inginkan suatu butiran kecil dibetulkan tetapi tiada - kelapangan untuk mendaftar dan belajar menyunting, adalah lebih mudah untuk - meletakkan nota. - paragraph_2_html: |- - Layari peta dan klik pada ikon nota: - . Ini akan meletakkan penanda pada peta yang boleh anda alihkan dengan menyeret. Tulis pesanan anda, kemudian klik Simpan, supaya penyunting lain boleh mengkajinya. - fixthemap: - title: Laporkan masalah / Baiki peta - how_to_help: - title: Cara Menolong - join_the_community: - title: Sertai komuniti - explanation_html: Jika anda mendapati kemusykilan dengan data peta kami, misalnya - jalan raya atau alamat anda tertinggal, cara penyelesaian yang terbaik ialah - menyertai komuniti OpenStreetMap dan menambah atau membetulkan data sendiri. - add_a_note: - instructions_html: |- - Hanya klik atau ikon yang sama pada paparan peta. - Ini akan menambah penanda pada peta yang boleh anda alihkan secara menyeret. Berikan pesanan anda, kemudian klik "simpan", barulah pemeta-pemeta lain akan menyiasat. - other_concerns: - title: Persoalan lain - explanation_html: |- - Jika anda mempunyai persoalan mengenai cara penggunaan data kami ataupun isi kandungannya, sila rujuk - halaman hak cipta untuk maklumat undang-undang selanjutnya atau hubungi - kumpulan kerja OSMF yang sewajarnya. - help_page: - title: Meminta Bantuan - introduction: OpenStreetMap menyediakan kemudahan-kemudahan untuk mempelajari - tentang projek ini, bersoal jawab, serta bekerjasama membincangkan dan mendokumenkan - topik-topik pemetaan. - welcome: - url: /welcome - title: Selamat datang ke OSM - description: Mulakan dengan panduan ringkas ini yang merangkumi asas-asas OpenStreetMap. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Tanyakan soalan atau cari jawapan di tapak soal jawab OSM. - mailing_lists: - title: Senarai Mel - forums: - title: Forum - irc: - title: IRC - description: Chat interaktif dalam pelbagai bahasa dan pelbagai topik. - switch2osm: - title: switch2osm - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Layari wiki untuk maklumat lanjut tentang OSM. - about_page: - next: Berikutnya - copyright_html: ©para penyumbang
        OpenStreetMap - used_by: '%{name} menjana data peta pada ratusan laman web, aplikasi mudah alih - dan peranti perkakasan' - lede_text: OpenStreetMap dibina oleh sekumpulan pemeta yang menyumbangkan dan - menyelenggarakan data tentang jalan raya, denai, kedai kopi, stesen keretapi, - dan banyak lagi di seluruh dunia. - local_knowledge_title: Pengetahuan Tempatan - local_knowledge_html: OpenStreetMap menekankan pengetahuan tempatan. Para penyumbang - menggunakan imejan udara, peranti GPS, dan peta lapangan berteknologi rendah - untuk mengesahkan bahawa OSM adalah tepat dan mutakhir. - community_driven_title: Didorong oleh Komuniti - community_driven_html: |- - Komuniti OpenStreetMap pelbagai latar belakang, ghairah, dan makin hari makin berkembang. Antara para penyumbang kami termasuklah pemeta yang sekadar penggemar, profesional GIS, jurutera yang mengelola pelayan OSM, pegawai kemanusiaan yang memetakan kawasan terjejas bencana, - dan ramai lagi. - Untuk mengetahui lebih lanjut tentang komuniti ini, rujuk diari pengguna, - blog komuniti, dan laman web - the OSM Foundation. - open_data_title: Data Terbuka - open_data_html: 'OpenStreetMap ialah data terbuka: anda bebas menggunakannya - untuk sebarang tujuan asalkan anda memberikan penghargaan kepada OpenStreetMap - dan para penyumbangnya. Jika anda mengubah suai atau menokok tambah datanya - dalam cara-cara tertentu, anda boleh mengedarkan hasilnya di bawah lesen yang - sama sahaja. Rujuk halaman Hak Cipta dan Lesen - untuk keterangan lanjut.' - partners_title: Rakan Kongsi notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} mengulas catatan diari anda' @@ -1329,6 +1070,129 @@ ms: delete: deleted: Pesanan dihapuskan site: + about: + next: Berikutnya + copyright_html: ©para penyumbang
        OpenStreetMap + used_by: '%{name} menjana data peta pada ratusan laman web, aplikasi mudah alih + dan peranti perkakasan' + lede_text: OpenStreetMap dibina oleh sekumpulan pemeta yang menyumbangkan dan + menyelenggarakan data tentang jalan raya, denai, kedai kopi, stesen keretapi, + dan banyak lagi di seluruh dunia. + local_knowledge_title: Pengetahuan Tempatan + local_knowledge_html: OpenStreetMap menekankan pengetahuan tempatan. Para penyumbang + menggunakan imejan udara, peranti GPS, dan peta lapangan berteknologi rendah + untuk mengesahkan bahawa OSM adalah tepat dan mutakhir. + community_driven_title: Didorong oleh Komuniti + community_driven_html: |- + Komuniti OpenStreetMap pelbagai latar belakang, ghairah, dan makin hari makin berkembang. Antara para penyumbang kami termasuklah pemeta yang sekadar penggemar, profesional GIS, jurutera yang mengelola pelayan OSM, pegawai kemanusiaan yang memetakan kawasan terjejas bencana, + dan ramai lagi. + Untuk mengetahui lebih lanjut tentang komuniti ini, rujuk diari pengguna, + blog komuniti, dan laman web + the OSM Foundation. + open_data_title: Data Terbuka + open_data_html: 'OpenStreetMap ialah data terbuka: anda bebas menggunakannya + untuk sebarang tujuan asalkan anda memberikan penghargaan kepada OpenStreetMap + dan para penyumbangnya. Jika anda mengubah suai atau menokok tambah datanya + dalam cara-cara tertentu, anda boleh mengedarkan hasilnya di bawah lesen yang + sama sahaja. Rujuk halaman Hak Cipta dan Lesen + untuk keterangan lanjut.' + partners_title: Rakan Kongsi + copyright: + foreign: + title: Perihal terjemahan ini + text: Sekiranya terdapat percanggahan antara halaman yang diterjemah ini dengan + %{english_original_link}, maka versi bahasa Inggeris itu akan diberi keutamaan + english_link: teks asal bahasa Inggeris + native: + title: Perihal laman ini + text: Anda sedang membaca halaman hak cipta dalam versi bahasa Inggeris. Anda + boleh kembali kepada %{native_link} halaman ini, atau berhenti membaca perihal + hak cipta dan %{mapping_link}. + native_link: versi Bahasa Melayu + mapping_link: mula membuat peta + legal_babble: + title_html: Hak Cipta dan Lesen + intro_1_html: |- + OpenStreetMap ialah data terbuka yang dilesenkan di bawah Open Data + Commons Open Database License (ODbL). + intro_2_html: Anda bebas menyalin, mengedarkan, menyebarkan dan mengubah suai + data kami, asalkan anda memperakui OpenStreetMap dan para penyumbangnya. + Jika anda mengubah suai atau menokok tambah data kami, anda boleh mengedarkannya + di bawah lesen yang sama sahaja. Kanun + undang-undang yang lengkap ini menerangkan hak-hak dan tanggungjawab + anda. + intro_3_html: Kartografi jubin peta kami serta pendokumenan kami dilesenkan + di bawah lesen Pengiktirafan-PerkongsianSerupa + 2.0 (CC-BY-SA). + credit_title_html: Cara memberikan penghargaan kepada OpenStreetMap + credit_1_html: Kami memerlukan anda menggunakan dikenali sebagai “© + penyumbang OpenStreetMap” dalam penghargaan. + credit_2_html: |- + Anda juga mesti memperjelas bahawa data ini tersedia di bawah Open Database License, dan juga kartografinya berada di bawah lesen CC-BY-SA jika jubin peta kami turut digunakan. Anda boleh berbuat demikian dengan membuat pautan ke halaman hak cipta ini. + Selain itu, dan sebagai kemestian untuk mengedarkan OSM dalam bentuk data, anda boleh menyatakan nama dan membuat pautan secara terus kepada lesen. Untuk media yang tidak membolehkan pautan (cth. bahan cetakan), kami mencadangkan supaya anda menghalakan pembaca-pembaca ke openstreetmap.org (misalnya, dengan meluaskan 'OpenStreetMap' ke alamat penuh ini), ke opendatacommons.org, dan juga creativecommons.org jika berkenaan. + credit_3_html: |- + Untuk peta elektronik yang boleh disemak imbas, kredit seharusnya disiarkan di sudut peta. + Contoh: + attribution_example: + alt: Contoh mengatribusikan OpenStreetMap pada halaman sesawang + title: Contoh atribusi + more_title_html: Mengetahui lebih lanjut + more_1_html: Baca lebih lanjut tentang penggunaan data kami serta memperakui + kami di Soalan Lazim + Undang-Undang. + more_2_html: Sungguhpun OpenStreetMap merupakan data terbuka, namun kami tidak + boleh menyediakan API peta yang percuma kepada pembangun pihak ketiga. Sila + rujuk Dasar + Penggunaan API, Dasar + Penggunaan Jubin dan Dasar + Penggunaan Nominatim. + contributors_title_html: Penyumbang kami + contributors_intro_html: 'Penyumbang kami merupakan ribuan individu. Kami + turut menyertakan data yang dilesenkan secara terbuka daripada lembaga-lembaga + pemetaan kebangsaan dan sumber-sumber yang lain, antaranya:' + contributors_at_html: 'Austria: Mengandungi data daripada + Stadt Wien (di bawah CC + BY) dan Land + Vorarlberg, dan Land Tirol (under CC-BY + AT dengan pindaan).' + contributors_ca_html: 'Kanada: Mengandungi data daripada + GeoBase®, GeoGratis (© Department of Natural Resources Canada), + CanVec (© Department of Natural Resources Canada), and StatCan (Geography + Division, Statistics Canada).' + contributors_fi_html: |- + Finland: Mengandungi data dari Pangkalan Data Topografi + Tinjauan Daratan Negara Finland dan lain-lain set data di bawah + Lesen NLSFI. + contributors_fr_html: 'Perancis: Mengandungi data yang disumberkan + daripada Direction Générale des Impôts.' + contributors_nl_html: |- + Belanda: Mendandungi data © AND, 2007 + (www.and.com) + contributors_nz_html: 'New Zealand: Mengandungi data yang + disumberkan daripada Land Information New Zealand. Crown Copyright reserved.' + contributors_za_html: |- + Afrika Selatan: Mengandungi data yang disumberkan daripada + Pejabat Ketua Pengarah: + National Geo-Spatial Information, Hak cipta kerajaan dipelihara. + contributors_gb_html: 'United Kingdom: Mengandungi data Ordnance + Survey data © Crown copyright and database right 2010-12.' + contributors_footer_1_html: ' Untuk keterangan lanjut tentang semua ini, + serta sumber-sumber lain yang telah digunakan untuk membantu menambah baik + OpenStreetMap, sila rujuk Halaman + penyumbang di Wiki OpenStreetMap.' + contributors_footer_2_html: ' Penyertaan data dalam OpenStreetMap tidak bermaksud + bahawa pembekal data asal menyokong OpenStreetMap, menyediakan sebarang + waranti, atau menerima sebarang tanggungan.' + infringement_title_html: Pencabulan hak cipta + infringement_1_html: Penyumbang OSM diingatkan supaya tidak sesekali menambah + data daripada mana-mana sumber berhak cipta (cth. Peta Google atau peta + cetakan) tanpa izin bersurat daripada pemegang hak cipta. + infringement_2_html: "Sekiranya anda percaya bahawa bahan berhak cipta telah + dtambahkan secara tidak berpatutan ke dalam pangkalan OpenStreetMap atau + tapak ini, sila rujuk prosedur + penarikan atau laporkan secara terus ke dalam \nhalaman + laporan on-line." index: js_1: Anda sedang menggunakan pelayar web yang tidak menyokong JavaScript, ataupun anda tidak menghidupkan JavaScript. @@ -1361,6 +1225,100 @@ ms: id_not_configured: iD belum dikonfigurasi no_iframe_support: Pelayar web anda tidak menyokong 'iframe' HTML yang diperlukan untuk ciri ini. + export: + title: Eksport + area_to_export: Kawasan untuk Dieksport + manually_select: Pilih kawasan yang lain secara insani + format_to_export: Format untuk Dieksport + osm_xml_data: Data XML OpenStreetMap + map_image: Imej Peta (memaparkan paparan piawai) + embeddable_html: HTML Boleh Benam + licence: Lesen + export_details: Data OpenStreetMap dilesenkan di bawah lesen Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Jika pengeksportan di atas gagal, sila pertimbangkan untuk menggunakan + antara sumber-sumber yang berikut:' + body: 'Kawasan ini terlalu besar untuk dieksport dalam bentuk Data XML OpenStreetMap. + Sila zum dekat atau pilih kawasan yang lebih kecil, atau gunakan mana-mana + sumber yang berikut untuk memuat turun data secara pukal:' + planet: + title: Planet OSM + description: Salinan pangkalan data lengkap OpenStreetMap yang sentiasa + dikemaskinikan + overpass: + title: Overpass API + description: Muat turun petak sempadan ini dari cermin pangkalan data OpenStreetMap + geofabrik: + title: Muat-Turunan Geofabrik + description: Ekstrak benua, negara dan bandar-bandar terpilih yang sentiasa + dikemaskinikan + metro: + title: Ekstrak Metro + description: Pengekstrakan untuk bandar-bandar utama di dunia serta kawasan-kawasan + sekitar + other: + title: Sumber-sumber Lain + description: Sumber-sumber lanjutan yang tersenarai di wiki OpenStreetMap + options: Pilihan + format: Format + scale: Skala + max: maks + image_size: Saiz Imej + zoom: Zum + add_marker: Bubuh penanda pada peta + latitude: 'GL:' + longitude: 'GB:' + output: Output + paste_html: Tampalkan HTML untuk dibenamkan dalam tapak web + export_button: Eksport + fixthemap: + title: Laporkan masalah / Baiki peta + how_to_help: + title: Cara Menolong + join_the_community: + title: Sertai komuniti + explanation_html: Jika anda mendapati kemusykilan dengan data peta kami, + misalnya jalan raya atau alamat anda tertinggal, cara penyelesaian yang + terbaik ialah menyertai komuniti OpenStreetMap dan menambah atau membetulkan + data sendiri. + add_a_note: + instructions_html: |- + Hanya klik atau ikon yang sama pada paparan peta. + Ini akan menambah penanda pada peta yang boleh anda alihkan secara menyeret. Berikan pesanan anda, kemudian klik "simpan", barulah pemeta-pemeta lain akan menyiasat. + other_concerns: + title: Persoalan lain + explanation_html: |- + Jika anda mempunyai persoalan mengenai cara penggunaan data kami ataupun isi kandungannya, sila rujuk + halaman hak cipta untuk maklumat undang-undang selanjutnya atau hubungi + kumpulan kerja OSMF yang sewajarnya. + help: + title: Meminta Bantuan + introduction: OpenStreetMap menyediakan kemudahan-kemudahan untuk mempelajari + tentang projek ini, bersoal jawab, serta bekerjasama membincangkan dan mendokumenkan + topik-topik pemetaan. + welcome: + url: /welcome + title: Selamat datang ke OSM + description: Mulakan dengan panduan ringkas ini yang merangkumi asas-asas + OpenStreetMap. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Tanyakan soalan atau cari jawapan di tapak soal jawab OSM. + mailing_lists: + title: Senarai Mel + forums: + title: Forum + irc: + title: IRC + description: Chat interaktif dalam pelbagai bahasa dan pelbagai topik. + switch2osm: + title: switch2osm + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Layari wiki untuk maklumat lanjut tentang OSM. sidebar: search_results: Hasil Carian close: Tutup @@ -1453,6 +1411,50 @@ ms: image: Gambar alt: Teks alt url: URL + welcome: + title: Selamat datang! + introduction_html: Selamat datang ke OpenStreetMap, peta dunia yang bebas disunting + oleh orang awam. Kini setelah mendaftar, anda bersiap sedia untuk memeta. + Yang berikut ialah panduan ringkas dengan maklumat-maklumat yang paling penting + bagi anda. + whats_on_the_map: + title: Kandungan Peta + on_html: OpenStreetMap merupakan tempat untuk memetakan benda-benda yang nyata + dan terkini - termasuklah berjuta-juta bangunan, jalan raya dan lain-lain + butiran tempat. Anda boleh memetakan sebarang ciri-ciri nyata yang menarik + minat anda. + off_html: Ia tidak mencakupi data pandangan peribadi seperti penilaian, + ciri-ciri yang wujud zaman dahulu atau sekadar andaian, serta data dari + sumber berhak cipta. Melainkan dengan izin khas, jangan salin dari peta + Internet mahupun kertas. + basic_terms: + title: Peristilahan Asas Pemetaan + paragraph_1_html: OpenStreetMap mempunyai peristilahan tersendiri. Yang berikut + ialah kata-kata kunci yang berguna. + editor_html: Editor ialah perisian atau laman web yang boleh + digunakan untuk menyunting peta. + node_html: Nod ialah titik pada peta, seperti sebuah kedai + makan atau sebatang pokok. + way_html: Jalan ialah garis atau kawasan seperti jalan raya, + sungai, tasik atau bangunan. + tag_html: Teg ialah keterangan ringkas mengenai nod atau + jalan, seperti nama restoran atau had laju jalan raya. + rules: + title: Peraturan! + questions: + title: Ada soalan? + paragraph_1_html: |- + OpenStreetMap menyediakan kemudahan-kemudahan untuk mempelajari tentang projek ini, bersoal jawab, serta bekerjasama membincangkan dan mendokumenkan topik-topik pemetaan. + Minta bantuan di sini. + start_mapping: Mula + add_a_note: + title: Tiada Masa untuk Menyunting? Letak Nota! + paragraph_1_html: Jika anda inginkan suatu butiran kecil dibetulkan tetapi + tiada kelapangan untuk mendaftar dan belajar menyunting, adalah lebih mudah + untuk meletakkan nota. + paragraph_2_html: |- + Layari peta dan klik pada ikon nota: + . Ini akan meletakkan penanda pada peta yang boleh anda alihkan dengan menyeret. Tulis pesanan anda, kemudian klik Simpan, supaya penyunting lain boleh mengkajinya. trace: visibility: private: Peribadi (hanya dikongsikan sebagai titik yang tidak tersusun secara @@ -1578,7 +1580,7 @@ ms: log masuk ke dalam antaramuka web untuk melihat Terma-Terma Penyumbang. Anda tidak semestinya harus bersetuju, tetapi mesti membacanya. oauth: - oauthorize: + authorize: title: Benarkan akses kepada akaun anda request_access: Aplikasi %{app_name} sedang memohon akses kepada akaun anda, %{user}. Sila semak sama ada anda menginginkan aplikasi itu untuk memiliki @@ -1592,11 +1594,11 @@ ms: allow_read_gpx: membaca jejak GPS peribadi anda. allow_write_gpx: memuat naik jejak GPS. allow_write_notes: menyunting nota. - oauthorize_success: + authorize_success: title: Permohonan kebenaran dibenarkan allowed: Anda telah memberi aplikasi %{app_name} akses kepada akaun anda. verification: Kod penentusahan ialah %{code}. - oauthorize_failure: + authorize_failure: title: Permohonan kebenaran gagal. denied: Anda telah melarang aplikasi %{app_name} daripada mengakses akaun anda. invalid: Token kebenaran ini tidak sah. @@ -2013,7 +2015,7 @@ ms: confirm: Sahkan fail: Peranan '%{role}' tidak dapat ditarik balik daripada pengguna '%{name}'. Sila semak supaya kedua-dua pengguna dan peranan itu adalah sah. - user_block: + user_blocks: model: non_moderator_update: Anda mesti menjadi penyelia untuk membuat atau mengemaskinikan sekatan. @@ -2077,20 +2079,6 @@ ms: period: one: 1 jam other: '%{count} jam' - partial: - show: Tunjukkan - edit: Sunting - revoke: Tarik Balik! - confirm: Adakah anda pasti? - display_name: Pengguna yang Disekat - creator_name: Pembuat - reason: Sebab sekatan - status: Status - revoker_name: Ditarik balik oleh - not_revoked: (tidak ditarik balik) - showing_page: Halaman %{page} - next: Berikutnya » - previous: « Sebelumnya helper: time_future: Berakhir dalam masa %{time}. until_login: Aktif sehingga pengguna itu log masuk. @@ -2118,8 +2106,22 @@ ms: back: Lihat semua sekatan revoker: 'Penarik balik:' needs_view: Pengguna perlu log masuk sebelum sekatan ini dapat ditarik balik. - note: - description: + block: + not_revoked: (tidak ditarik balik) + show: Tunjukkan + edit: Sunting + revoke: Tarik Balik! + blocks: + display_name: Pengguna yang Disekat + creator_name: Pembuat + reason: Sebab sekatan + status: Status + revoker_name: Ditarik balik oleh + showing_page: Halaman %{page} + next: Berikutnya » + previous: « Sebelumnya + notes: + comment: opened_at_html: Dicatatkan %{when} yang lalu opened_at_by_html: Dicatatkan %{when} yang lalu oleh %{user} commented_at_html: Dikemaskinikan %{when} yang lalu @@ -2249,7 +2251,7 @@ ms: node: Nod way: Jalan relation: Hubungan - redaction: + redactions: edit: description: Keterangan heading: Sunting redaksi diff --git a/config/locales/nb.yml b/config/locales/nb.yml index 6fb0cda22..8d75f8e95 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -8,6 +8,7 @@ # Author: Gustavf # Author: Haakon K # Author: Hansfn +# Author: Imre Eilertsen # Author: Janhoy # Author: Jon Harald Søby # Author: Kingu @@ -346,52 +347,6 @@ nb: ago: '%{ago} siden' newer_comments: Nyere kommentarer older_comments: Eldre kommentarer - export: - title: Eksporter - start: - area_to_export: OmrÃ¥de som skal eksporteres - manually_select: Velg et annet omrÃ¥de manuelt - format_to_export: Eksportformat - osm_xml_data: OpenStreetMap XML-data - map_image: Kartbilde (viser standardlag) - embeddable_html: HTML som kan bygges inn - licence: Lisens - export_details: Data fra OpenStreetMap er lisensiert under Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Hvis eksporten over skulle feile kan du forsøke Ã¥ bruke av en av - kildene i listen under:' - body: Dette omrÃ¥det er for stort for Ã¥ bli eksportert som OpenStreetMap XML-data. - Forstørr utvalg eller velg et mindre omrÃ¥de. Eller bruke en av kildene angitt - under for nedlasting av bulkdata. - planet: - title: Planet OSM - description: Regelmessig oppdaterte kopier av hele OpenStreetMap-databasen - overpass: - title: Overførings-API - description: Last ned denne avgrensingsrammen fra et speil av OpenStreetMap-databasen - geofabrik: - title: Geofabrik-nedlastninger - description: Regelmessig oppdaterte utdrag av kontinenter, land og utvalgte - byer - metro: - title: Metro-utdrag - description: Utdrag av verdens største byer med omgivelser - other: - title: Andre kilder - description: Ytterliger kilder listet pÃ¥ OpenStreetMap-wikien - options: Valg - format: Format - scale: Skala - max: maks - image_size: Bildestørrelse - zoom: Zoom - add_marker: Legg til en markør pÃ¥ kartet - latitude: 'Bre:' - longitude: 'Len:' - output: Utdata - paste_html: Lim inn HTML som skal bygges inn i nettsted - export_button: Eksporter geocoder: search: title: @@ -968,250 +923,6 @@ nb: text: Doner learn_more: Lær mer more: Mer - license_page: - foreign: - title: Om denne oversettelsen - text: I tilfelle konflikt mellom denne oversatte siden og %{english_original_link} - har den engelske versjonen presedens - english_link: den engelske originalen - native: - title: Om denne siden - text: Du ser den engelske versjonen av opphavsrettssiden. Du kan gÃ¥ tilbake - til den %{native_link} av denne siden, eller du kan stoppe Ã¥ lese om opphavsrett - og %{mapping_link}. - native_link: Norsk versjon - mapping_link: start kartlegging - legal_babble: - title_html: Opphavsrett og lisenser - intro_1_html: |- - OpenStreetMap® er Ã¥pne data, lisensiert under Open Data - Commons Open Database License (ODbL) av OpenStreetMap Foundation (OSMF). - intro_2_html: |- - Du stÃ¥r fritt til Ã¥ kopiere, distribuere, overføre og tilpasse vÃ¥re kart og data, - sÃ¥ lenge du krediterer OpenStreetMap og dens - bidragsytere. Hvis du endrer eller bygger videre pÃ¥ vÃ¥re kart eller data, mÃ¥ du - distribuere resultatet under samme lisens. Den - fullstendige juridiske teksten beskriver rettigheter og ansvar. - intro_3_html: |- - Kartografien i vÃ¥re kartruter, samt dokumentasjonen, er lisensiert under Creative - Commons Attribution-ShareAlike 2.0 lisensen (CC BY-SA). - credit_title_html: Hvordan kreditere OpenStreetMap - credit_1_html: Vi krever at du bruker godskrivinga «© OpenStreetMap-bidragsyterene». - credit_2_html: "Du mÃ¥ ogsÃ¥ gjøre det klart at dataene er tilgjengelige under - Open \nDatabase License, og dersom du bruker vÃ¥re kartfliser, at kartografien - er\n lisensert som CC BY-SA. Du kan gjøre dette ved Ã¥ lenke til\ndenne - siden om opphavsrett. \nAlternativt, og som et krav, hvis du distribuerer - OSM i et\n dataskjema, kan du navngi og opprette en hyperlink direkte til - lisensene. I medier\n hvor hyperlenker ikke er mulig (f.eks. trykte verker) - foreslÃ¥r vi at du\n henviser dine lesere til openstreetmap.org (kanskje ved - Ã¥ utvide\n'OpenStreetMap' til denne fulle adressen), til opendatacommons.org, - og\n hvis relevant, til creativecommons.org." - credit_3_html: For et navigerbart elektronisk kart bør krediteringen vises i - hjørnet pÃ¥ kartet. - attribution_example: - alt: Eksempel pÃ¥ hvordan man angir OpenStreetMap som kartkilde pÃ¥ en nettside - title: Eksempel pÃ¥ kildehenvisning - more_title_html: Finner ut mer - more_1_html: Les mer om hvordan du kan bruke dataene vÃ¥re og hvordan du oppgir - oss som kilde pÃ¥ siden om OSMF-lisensen. - more_2_html: |- - Selv om OpenStreetMap er Ã¥pent data, kan vi ikke bidra med gratis kart-API for tredjepartsutviklere. - Se vÃ¥r API Usage Policy, - Tile Usage Policy og Nominatim Usage Policy. - contributors_title_html: VÃ¥re bidragsytere - contributors_intro_html: 'Vi har tusenvis av individuelle bidragsytere. Vi inkluderer - ogsÃ¥ Ã¥pne datasett fra nasjonale karttjenester og andre kilder, blant annet - fra:' - contributors_at_html: |- - Østerrike: Inneholder data fra - Stadt Wien under - CC BY, - Land Vorarlberg og - Land Tirol (under CC BY AT med tilføyelser). - contributors_ca_html: |- - Canada: Inneholder data fra - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), og StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: 'Finland: Inneholder data fra National - Land Survey fra Finlands topografiske database og andre datasett under NLSFI-lisensen.' - contributors_fr_html: |- - Frankrike: Inneholder data hentet fra - Direction Générale des Impôts. - contributors_nl_html: |- - Nederland: Inneholder © AND data, 2007 - (www.and.com) - contributors_nz_html: |- - New Zealand: Inneholder data hentet fra - Land Information New Zealand. Crown Copyright reservert. - contributors_si_html: |- - Slovenia: Inneholder data fra - Geologisk undersøkelse og kartmyndighet and - Departemanget for jordbruk, skog og mat - (offentlig informasjonsopphav fra Slovenia). - contributors_za_html: 'Sør-Afrika: Inneholder data fra Chief - Directorate: National Geo-Spatial Information, State copyright reservert.' - contributors_gb_html: |- - Storbritannia: Inneholder Ordnance - Survey data © Crown copyright and database right 2010-12. - contributors_footer_1_html: For detaljer om disse og andre kilder som har blitt - brukt for Ã¥ forbedre OpenStreetMap, se siden - med bidragsytere pÃ¥ OpenStreetMap-wikien. - contributors_footer_2_html: |2- - Inkludering av data i OpenStreetMap innebærer ikke at den opprinnelige - dataleverandøren støtter OpenStreetMap, gir noen garanti eller - godtar noe erstatningsansvar. - infringement_title_html: Brudd pÃ¥ opphavsrettigheter - infringement_1_html: OSM-bidragsytere blir minnet pÃ¥ aldri Ã¥ legge til data - fra opphavsrettsbeskyttede kilder (f.eks. Google Maps eller utskrevne kart) - uten uttrykkelig tillatelse fra rettighetshaverne. - infringement_2_html: |- - Hvis du mener at opphavsrettslig beskyttet materiale feilaktig er - lagt til OpenStreetMap-databasen eller dette nettstedet, ber vi deg se pÃ¥ - vÃ¥r prosedyre for fjerning av materiale eller send inn klagen direkte pÃ¥ - nettsiden. - trademarks_title_html: Varemerker - trademarks_1_html: OpenStreetMap, forstørrelsesglasslogoen og State of the Map - er registrerte varemerker beskyttet pÃ¥ vegne av OpenStreetMap Foundation. - Hvis du har spørsmÃ¥l vedrørende bruken av varemerkene, rett spørsmÃ¥l mot arbeidsgruppen - for lisenser. - welcome_page: - title: Velkommen! - introduction_html: Velkommen til OpenStreetMap, det fri brukerredigerte verdenskartet. - NÃ¥ som du er opprettet som bruker er du klar til Ã¥ legge til og endre kartinformasjon. - Her er en guide med den viktigste informasjonen for Ã¥ komme hurtig i gang. - whats_on_the_map: - title: Hva finnes pÃ¥ kartet - on_html: OpenStreetMap er et nettsted som lagrer og viser frem fysiske elementer - med en fast geografisk plassering - f.eks. millionvis av bygninger, veier - og andre stedlige detaljer. Du kan kartlegge alle slike ting fra den virkelige - verden som du er interessert i. - off_html: Kartet inneholder ikke subjektiv informasjon (f.eks. anmeldelser), - objekter som er er fiktive eller ikke lenger eksisterer, samt opphavsrettslig - beskyttede data fra andre kart. Kopier aldri noe som helst informasjon fra - andre digitale eller papirbaserte kart, med mindre det foreligger en særlig - tillatelse. - basic_terms: - title: Grunnleggende termer - paragraph_1_html: OpenStreetMap har sin egen sjargong. Her er en ordliste som - kan være nyttig. - editor_html: En redigerer er et program eller en nettside som - kan brukes til Ã¥ redigere kartet. - node_html: En node er et enkeltelement pÃ¥ kartet, f.eks. en - restaurant eller et tre. - way_html: En strekning er en linje eller et areal, f.eks. en - vei, elv, innsjø eller en bygning. - tag_html: En tagg er et informasjonselement om en node eller - strekning, f.eks. navnet pÃ¥ en restaurant eller fartsgrensen pÃ¥ en vei. - rules: - title: Regler! - paragraph_1_html: OpenStreetMap har fÃ¥ formelle regler, men vi forventer at - alle deltagere samarbeider og kommuniserer med fellesskapet. Hvis du er interessert - i andre aktiviteter enn manuell redigering, vennligst les og følg retningslinjene - for import - og automatiske - redigeringer. - questions: - title: Noen spørsmÃ¥l? - paragraph_1_html: |- - OpenStreetMap har diverse ressurser for Ã¥ undervise om prosjektet, som stiller spørsmÃ¥l og svarer pÃ¥ disse, samt legge til rette for dokumenter og diskusjoner om ulike kartleggingsemner. - FÃ¥ hjelp her. - start_mapping: Start kartlegging - add_a_note: - title: Har du ikke tid til Ã¥ kartlegge selv? Legg inn en merknad! - paragraph_1_html: Hvis du bare vil ha rettet en liten detalj, men ikke har tid - til Ã¥ gjøre dette selv, kan du legge inn en merknad. - paragraph_2_html: |- - Bare gÃ¥ til kartet og klikk pÃ¥ notis-ikonet: - . Dette vil legge en markør pÃ¥ kartet, som du sÃ¥ kan dra til annet sted. Legg til meldingen og lagre. Andre kan da sjekke meldingen. - fixthemap: - title: Rapporter et problem / Korriger kartet - how_to_help: - title: Hvordan hjelpe til - join_the_community: - title: Bli med i fellesskapet - explanation_html: Hvis du har observert et problem med vÃ¥re kartdata, for - eksempel at det mangler en vei, anbefaler vi at du blir med i OpenStreetMap-fellesskapet - for Ã¥ kunne reparere dataene selv. - add_a_note: - instructions_html: |- - Bare klikk eller det samme ikonet pÃ¥ kartvisningen. - Dette vil legge en markør pÃ¥ kartet som du kan flytte rundt pÃ¥. Legg sÃ¥ inn en melding og klikk lagre, og andre kartleggere kan følge opp informasjonen din. - other_concerns: - title: Andre problemstillinger - explanation_html: Hvis du er opptatt av hvordan vÃ¥re data blir brukt eller av - innholdet, vær vennlig Ã¥ se pÃ¥ side om opphavsrett - for juridisk informasjon, eller ta kontakt med den dyktige OSMF-arbeidsgruppen. - help_page: - title: FÃ¥ hjelp - introduction: OpenStreetMap har diverse ressurser for Ã¥ lære om prosjektet, stille - eller svare pÃ¥ spørsmÃ¥l samt i fellesskap diskutere og dokumentere kartleggingsemner. - welcome: - url: /velkommen - title: Velkommen til OSM - description: Start med denne hurtigguiden som dekker det grunnleggende om OpenStreetMap. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Nn:Beginners%27_guide - title: Hjelp for nybegynnere - description: Dugnadsbasert guide for nybegynnere. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Still spørsmÃ¥l eller sjekk svar pÃ¥ OSM sine spørsmÃ¥l- og svar-sider. - mailing_lists: - title: E-postlister - description: Still et spørsmÃ¥l eller diskuter interessante tema pÃ¥ en rekke - omrÃ¥de eller saksbestemte e-postlister. - forums: - title: Forumer - description: SpørsmÃ¥l og diskusjoner for de som foretrekker et oppslagstavlelignende - grensesnitt. - irc: - title: IRC - description: Interaktiv sludrekanal pÃ¥ flere ulike sprÃ¥k som dekker mange tema. - switch2osm: - title: switch2osm - description: Hjelp for bedrifter og organisasjoner som vil bytte til OpenStreetMap-baserte - kart og andre tjenester. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Se gjennom wikien for dyptpløyende OSM-dokumentasjon. - about_page: - next: Neste - copyright_html: ©OpenStreetMap
        bidragsytere - used_by: Tusenvis av nettsteder, mobilapper og maskinvareenheter bruker kartdata - fra %{name} - lede_text: OpenStreetMap er bygd av et fellesskap av kartleggere som oppretter - og vedlikeholder data om veier, stier, kafeer, jernbanestasjoner og diverse - annet, over hele verdien. - local_knowledge_title: Lokalkunnskap - local_knowledge_html: OpenStreetMap understreker viktigheten av lokalkunnskap. - Bidragsytere bruker flyfotografier, GPS-enheter og enkle feltkart for å gå god - for at OSM er nøyaktig og oppdatert. - community_driven_title: Fellesskapsdrevet - community_driven_html: |- - OpenStreetMap's samfunn er mangfoldig, lidenskapelig, og den vokser for hver dag som går. - Blant våre bidragsytere finner man entusiast-kartleggere, GIS-proffer, ingeniører som kjører OSM-tjenere, humanister som kartlegger katastroferammede områder, og mange flere. - For å lære mer om samfunnet, sjekk ut OpenStreetMap Bloggen, - brukerdagbøker, - samfunnsblogger, og OSM Foundation nettstedet. - open_data_title: Åpne Data - open_data_html: 'OpenStreetMap er åpne data: Du kan fritt bruke det for - alle formål, så lenge du krediterer OpenStreetMap og dets bidragsytere. Hvis - du gjør endringer eller bygger på dataene på enkelte måter, kan du kun distribuere - resultatet under samme lisens. Se Opphavsrett - og lisenssiden for detaljer.' - legal_title: Juridisk - legal_html: |- - Dette nettstedet og mange tilknyttede tjenester drives formelt av OpenStreetMap Foundation (OSMF) på vegne av fellesskapet. Bruken av alle OSMF-drevne tjenester er gjenstand for vår politikk for akseptabel bruk og vår personvernspolitikk -
        - Vennligst kontakt OSMF om du har spørsmÃ¥l knyttet til lisensiering, opphavsrett eller andre juridiske spørsmÃ¥l. - partners_title: Partnere notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} kommenterte et dagbokinnlegg' @@ -1397,6 +1108,149 @@ nb: delete: deleted: Melding slettet site: + about: + next: Neste + copyright_html: ©OpenStreetMap
        bidragsytere + used_by: Tusenvis av nettsteder, mobilapper og maskinvareenheter bruker kartdata + fra %{name} + lede_text: OpenStreetMap er bygd av et fellesskap av kartleggere som oppretter + og vedlikeholder data om veier, stier, kafeer, jernbanestasjoner og diverse + annet, over hele verdien. + local_knowledge_title: Lokalkunnskap + local_knowledge_html: OpenStreetMap understreker viktigheten av lokalkunnskap. + Bidragsytere bruker flyfotografier, GPS-enheter og enkle feltkart for å gå + god for at OSM er nøyaktig og oppdatert. + community_driven_title: Fellesskapsdrevet + community_driven_html: |- + OpenStreetMap's samfunn er mangfoldig, lidenskapelig, og den vokser for hver dag som går. + Blant våre bidragsytere finner man entusiast-kartleggere, GIS-proffer, ingeniører som kjører OSM-tjenere, humanister som kartlegger katastroferammede områder, og mange flere. + For å lære mer om samfunnet, sjekk ut OpenStreetMap Bloggen, + brukerdagbøker, + samfunnsblogger, og OSM Foundation nettstedet. + open_data_title: Åpne Data + open_data_html: 'OpenStreetMap er åpne data: Du kan fritt bruke det for + alle formål, så lenge du krediterer OpenStreetMap og dets bidragsytere. Hvis + du gjør endringer eller bygger på dataene på enkelte måter, kan du kun distribuere + resultatet under samme lisens. Se Opphavsrett + og lisenssiden for detaljer.' + legal_title: Juridisk + legal_html: |- + Dette nettstedet og mange tilknyttede tjenester drives formelt av OpenStreetMap Foundation (OSMF) på vegne av fellesskapet. Bruken av alle OSMF-drevne tjenester er gjenstand for vår politikk for akseptabel bruk og vår personvernspolitikk +
        + Vennligst kontakt OSMF om du har spørsmÃ¥l knyttet til lisensiering, opphavsrett eller andre juridiske spørsmÃ¥l. + partners_title: Partnere + copyright: + foreign: + title: Om denne oversettelsen + text: I tilfelle konflikt mellom denne oversatte siden og %{english_original_link} + har den engelske versjonen presedens + english_link: den engelske originalen + native: + title: Om denne siden + text: Du ser den engelske versjonen av opphavsrettssiden. Du kan gÃ¥ tilbake + til den %{native_link} av denne siden, eller du kan stoppe Ã¥ lese om opphavsrett + og %{mapping_link}. + native_link: Norsk versjon + mapping_link: start kartlegging + legal_babble: + title_html: Opphavsrett og lisenser + intro_1_html: |- + OpenStreetMap® er Ã¥pne data, lisensiert under Open Data + Commons Open Database License (ODbL) av OpenStreetMap Foundation (OSMF). + intro_2_html: |- + Du stÃ¥r fritt til Ã¥ kopiere, distribuere, overføre og tilpasse vÃ¥re kart og data, + sÃ¥ lenge du krediterer OpenStreetMap og dens + bidragsytere. Hvis du endrer eller bygger videre pÃ¥ vÃ¥re kart eller data, mÃ¥ du + distribuere resultatet under samme lisens. Den + fullstendige juridiske teksten beskriver rettigheter og ansvar. + intro_3_html: |- + Kartografien i vÃ¥re kartruter, samt dokumentasjonen, er lisensiert under Creative + Commons Attribution-ShareAlike 2.0 lisensen (CC BY-SA). + credit_title_html: Hvordan kreditere OpenStreetMap + credit_1_html: Vi krever at du bruker godskrivinga «© OpenStreetMap-bidragsyterene». + credit_2_html: "Du mÃ¥ ogsÃ¥ gjøre det klart at dataene er tilgjengelige under + Open \nDatabase License, og dersom du bruker vÃ¥re kartfliser, at kartografien + er\n lisensert som CC BY-SA. Du kan gjøre dette ved Ã¥ lenke til\ndenne + siden om opphavsrett. \nAlternativt, og som et krav, hvis du distribuerer + OSM i et\n dataskjema, kan du navngi og opprette en hyperlink direkte til + lisensene. I medier\n hvor hyperlenker ikke er mulig (f.eks. trykte verker) + foreslÃ¥r vi at du\n henviser dine lesere til openstreetmap.org (kanskje + ved Ã¥ utvide\n'OpenStreetMap' til denne fulle adressen), til opendatacommons.org, + og\n hvis relevant, til creativecommons.org." + credit_3_html: For et navigerbart elektronisk kart bør krediteringen vises + i hjørnet pÃ¥ kartet. + attribution_example: + alt: Eksempel pÃ¥ hvordan man angir OpenStreetMap som kartkilde pÃ¥ en nettside + title: Eksempel pÃ¥ kildehenvisning + more_title_html: Finner ut mer + more_1_html: Les mer om hvordan du kan bruke dataene vÃ¥re og hvordan du oppgir + oss som kilde pÃ¥ siden om OSMF-lisensen. + more_2_html: |- + Selv om OpenStreetMap er Ã¥pent data, kan vi ikke bidra med gratis kart-API for tredjepartsutviklere. + Se vÃ¥r API Usage Policy, + Tile Usage Policy og Nominatim Usage Policy. + contributors_title_html: VÃ¥re bidragsytere + contributors_intro_html: 'Vi har tusenvis av individuelle bidragsytere. Vi + inkluderer ogsÃ¥ Ã¥pne datasett fra nasjonale karttjenester og andre kilder, + blant annet fra:' + contributors_at_html: |- + Østerrike: Inneholder data fra + Stadt Wien under + CC BY, + Land Vorarlberg og + Land Tirol (under CC BY AT med tilføyelser). + contributors_ca_html: |- + Canada: Inneholder data fra + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), og StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: 'Finland: Inneholder data fra National + Land Survey fra Finlands topografiske database og andre datasett under NLSFI-lisensen.' + contributors_fr_html: |- + Frankrike: Inneholder data hentet fra + Direction Générale des Impôts. + contributors_nl_html: |- + Nederland: Inneholder © AND data, 2007 + (www.and.com) + contributors_nz_html: |- + New Zealand: Inneholder data hentet fra + Land Information New Zealand. Crown Copyright reservert. + contributors_si_html: |- + Slovenia: Inneholder data fra + Geologisk undersøkelse og kartmyndighet and + Departemanget for jordbruk, skog og mat + (offentlig informasjonsopphav fra Slovenia). + contributors_za_html: 'Sør-Afrika: Inneholder data fra Chief Directorate: National Geo-Spatial Information, + State copyright reservert.' + contributors_gb_html: |- + Storbritannia: Inneholder Ordnance + Survey data © Crown copyright and database right 2010-12. + contributors_footer_1_html: For detaljer om disse og andre kilder som har + blitt brukt for Ã¥ forbedre OpenStreetMap, se siden + med bidragsytere pÃ¥ OpenStreetMap-wikien. + contributors_footer_2_html: |2- + Inkludering av data i OpenStreetMap innebærer ikke at den opprinnelige + dataleverandøren støtter OpenStreetMap, gir noen garanti eller + godtar noe erstatningsansvar. + infringement_title_html: Brudd pÃ¥ opphavsrettigheter + infringement_1_html: OSM-bidragsytere blir minnet pÃ¥ aldri Ã¥ legge til data + fra opphavsrettsbeskyttede kilder (f.eks. Google Maps eller utskrevne kart) + uten uttrykkelig tillatelse fra rettighetshaverne. + infringement_2_html: |- + Hvis du mener at opphavsrettslig beskyttet materiale feilaktig er + lagt til OpenStreetMap-databasen eller dette nettstedet, ber vi deg se pÃ¥ + vÃ¥r prosedyre for fjerning av materiale eller send inn klagen direkte pÃ¥ + nettsiden. + trademarks_title_html: Varemerker + trademarks_1_html: OpenStreetMap, forstørrelsesglasslogoen og State of the + Map er registrerte varemerker beskyttet pÃ¥ vegne av OpenStreetMap Foundation. + Hvis du har spørsmÃ¥l vedrørende bruken av varemerkene, rett spørsmÃ¥l mot + arbeidsgruppen + for lisenser. index: js_1: Du har en nettleser som ikke støtter JavaScript eller sÃ¥ har du slÃ¥tt av JavaScript. @@ -1427,6 +1281,107 @@ nb: id_not_configured: iD er ikke satt opp no_iframe_support: Nettleseren din støtter ikke HTML iframes som er nødvendig for denne egenskapen. + export: + title: Eksporter + area_to_export: OmrÃ¥de som skal eksporteres + manually_select: Velg et annet omrÃ¥de manuelt + format_to_export: Eksportformat + osm_xml_data: OpenStreetMap XML-data + map_image: Kartbilde (viser standardlag) + embeddable_html: HTML som kan bygges inn + licence: Lisens + export_details: Data fra OpenStreetMap er lisensiert under Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Hvis eksporten over skulle feile kan du forsøke Ã¥ bruke av en av + kildene i listen under:' + body: Dette omrÃ¥det er for stort for Ã¥ bli eksportert som OpenStreetMap XML-data. + Forstørr utvalg eller velg et mindre omrÃ¥de. Eller bruke en av kildene angitt + under for nedlasting av bulkdata. + planet: + title: Planet OSM + description: Regelmessig oppdaterte kopier av hele OpenStreetMap-databasen + overpass: + title: Overførings-API + description: Last ned denne avgrensingsrammen fra et speil av OpenStreetMap-databasen + geofabrik: + title: Geofabrik-nedlastninger + description: Regelmessig oppdaterte utdrag av kontinenter, land og utvalgte + byer + metro: + title: Metro-utdrag + description: Utdrag av verdens største byer med omgivelser + other: + title: Andre kilder + description: Ytterliger kilder listet pÃ¥ OpenStreetMap-wikien + options: Valg + format: Format + scale: Skala + max: maks + image_size: Bildestørrelse + zoom: Zoom + add_marker: Legg til en markør pÃ¥ kartet + latitude: 'Bre:' + longitude: 'Len:' + output: Utdata + paste_html: Lim inn HTML som skal bygges inn i nettsted + export_button: Eksporter + fixthemap: + title: Rapporter et problem / Korriger kartet + how_to_help: + title: Hvordan hjelpe til + join_the_community: + title: Bli med i fellesskapet + explanation_html: Hvis du har observert et problem med vÃ¥re kartdata, for + eksempel at det mangler en vei, anbefaler vi at du blir med i OpenStreetMap-fellesskapet + for Ã¥ kunne reparere dataene selv. + add_a_note: + instructions_html: |- + Bare klikk eller det samme ikonet pÃ¥ kartvisningen. + Dette vil legge en markør pÃ¥ kartet som du kan flytte rundt pÃ¥. Legg sÃ¥ inn en melding og klikk lagre, og andre kartleggere kan følge opp informasjonen din. + other_concerns: + title: Andre problemstillinger + explanation_html: Hvis du er opptatt av hvordan vÃ¥re data blir brukt eller + av innholdet, vær vennlig Ã¥ se pÃ¥ side om opphavsrett + for juridisk informasjon, eller ta kontakt med den dyktige OSMF-arbeidsgruppen. + help: + title: FÃ¥ hjelp + introduction: OpenStreetMap har diverse ressurser for Ã¥ lære om prosjektet, + stille eller svare pÃ¥ spørsmÃ¥l samt i fellesskap diskutere og dokumentere + kartleggingsemner. + welcome: + url: /velkommen + title: Velkommen til OSM + description: Start med denne hurtigguiden som dekker det grunnleggende om + OpenStreetMap. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Nn:Beginners%27_guide + title: Hjelp for nybegynnere + description: Dugnadsbasert guide for nybegynnere. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Still spørsmÃ¥l eller sjekk svar pÃ¥ OSM sine spørsmÃ¥l- og svar-sider. + mailing_lists: + title: E-postlister + description: Still et spørsmÃ¥l eller diskuter interessante tema pÃ¥ en rekke + omrÃ¥de eller saksbestemte e-postlister. + forums: + title: Forumer + description: SpørsmÃ¥l og diskusjoner for de som foretrekker et oppslagstavlelignende + grensesnitt. + irc: + title: IRC + description: Interaktiv sludrekanal pÃ¥ flere ulike sprÃ¥k som dekker mange + tema. + switch2osm: + title: switch2osm + description: Hjelp for bedrifter og organisasjoner som vil bytte til OpenStreetMap-baserte + kart og andre tjenester. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Se gjennom wikien for dyptpløyende OSM-dokumentasjon. sidebar: search_results: Søkeresultater close: Lukk @@ -1526,6 +1481,55 @@ nb: image: Bilde alt: Alternativ tekst url: URL + welcome: + title: Velkommen! + introduction_html: Velkommen til OpenStreetMap, det fri brukerredigerte verdenskartet. + NÃ¥ som du er opprettet som bruker er du klar til Ã¥ legge til og endre kartinformasjon. + Her er en guide med den viktigste informasjonen for Ã¥ komme hurtig i gang. + whats_on_the_map: + title: Hva finnes pÃ¥ kartet + on_html: OpenStreetMap er et nettsted som lagrer og viser frem fysiske elementer + med en fast geografisk plassering - f.eks. millionvis av bygninger, veier + og andre stedlige detaljer. Du kan kartlegge alle slike ting fra den virkelige + verden som du er interessert i. + off_html: Kartet inneholder ikke subjektiv informasjon (f.eks. anmeldelser), + objekter som er er fiktive eller ikke lenger eksisterer, samt opphavsrettslig + beskyttede data fra andre kart. Kopier aldri noe som helst informasjon fra + andre digitale eller papirbaserte kart, med mindre det foreligger en særlig + tillatelse. + basic_terms: + title: Grunnleggende termer + paragraph_1_html: OpenStreetMap har sin egen sjargong. Her er en ordliste + som kan være nyttig. + editor_html: En redigerer er et program eller en nettside + som kan brukes til Ã¥ redigere kartet. + node_html: En node er et enkeltelement pÃ¥ kartet, f.eks. + en restaurant eller et tre. + way_html: En strekning er en linje eller et areal, f.eks. + en vei, elv, innsjø eller en bygning. + tag_html: En tagg er et informasjonselement om en node eller + strekning, f.eks. navnet pÃ¥ en restaurant eller fartsgrensen pÃ¥ en vei. + rules: + title: Regler! + paragraph_1_html: OpenStreetMap har fÃ¥ formelle regler, men vi forventer at + alle deltagere samarbeider og kommuniserer med fellesskapet. Hvis du er + interessert i andre aktiviteter enn manuell redigering, vennligst les og + følg retningslinjene for import + og automatiske + redigeringer. + questions: + title: Noen spørsmÃ¥l? + paragraph_1_html: |- + OpenStreetMap har diverse ressurser for Ã¥ undervise om prosjektet, som stiller spørsmÃ¥l og svarer pÃ¥ disse, samt legge til rette for dokumenter og diskusjoner om ulike kartleggingsemner. + FÃ¥ hjelp her. + start_mapping: Start kartlegging + add_a_note: + title: Har du ikke tid til Ã¥ kartlegge selv? Legg inn en merknad! + paragraph_1_html: Hvis du bare vil ha rettet en liten detalj, men ikke har + tid til Ã¥ gjøre dette selv, kan du legge inn en merknad. + paragraph_2_html: |- + Bare gÃ¥ til kartet og klikk pÃ¥ notis-ikonet: + . Dette vil legge en markør pÃ¥ kartet, som du sÃ¥ kan dra til annet sted. Legg til meldingen og lagre. Andre kan da sjekke meldingen. trace: visibility: private: Privat (bare delt som anononyme, usorterte punkter) @@ -1617,6 +1621,7 @@ nb: map: kart list: public_traces: Offentlig GPS-spor + my_traces: Mine GPS-spor public_traces_from: Offentlige GPS-spor fra %{user} description: Bla gjennom nylig opplastede GPS-spor tagged_with: merket med %{tags} @@ -1654,7 +1659,7 @@ nb: nettsiden for Ã¥ lese bidragsytervilkÃ¥rene. Du trenger ikke godta vilkÃ¥rene, men du mÃ¥ lese dem. oauth: - oauthorize: + authorize: title: Autoriser tilgang til din konto request_access: Applikasjonen %{app_name} ber om tilgang til din konto, %{user}. Sjekk om du vil at applikasjonen skal ha følgende muligheter. Du kan velge @@ -1668,11 +1673,11 @@ nb: allow_write_gpx: laste opp GPS-spor. allow_write_notes: endre merknader. grant_access: Gi tilgang - oauthorize_success: + authorize_success: title: Autoriseringsforespørsel tillatt allowed: Du har gitt programmet %{app_name} tilgang til din konto. verification: Verifikasjonskoden er %{code}. - oauthorize_failure: + authorize_failure: title: Mislykket forespørsel om autorisering denied: Du har nektet programmet %{app_name} tilgang til din konto. invalid: Autoriseringstoken er ikke gyldig. @@ -1909,6 +1914,7 @@ nb: if set location: Angi din hjemmeposisjon i %{settings_link} for Ã¥ se andre brukere i nærheten. settings_link_text: innstillingene + my friends: Vennene mine no friends: Du har ikke lagt til noen venner ennÃ¥. km away: '%{count}km unna' m away: '%{count}m unna' @@ -2103,7 +2109,7 @@ nb: confirm: Bekreft fail: Kunne ikke fjerne rollen "%{role}" fra bruker "%{name}". Sjekk at bruker og rolle er gyldig. - user_block: + user_blocks: model: non_moderator_update: MÃ¥ være en moderator for Ã¥ opprette eller oppdatere en blokkering. @@ -2164,20 +2170,6 @@ nb: period: one: 1 time other: '%{count} timer' - partial: - show: Vis - edit: Rediger - revoke: Tilbakekall! - confirm: Er du sikker? - display_name: Blokkert bruker - creator_name: Opprettet av - reason: Årsak for blokkering - status: Status - revoker_name: Tilbakekalt av - not_revoked: (ikke tilbakekalt) - showing_page: Side %{page} - next: Neste » - previous: « Forrige helper: time_future: Slutter om %{time}. until_login: Aktiv inntil brukeren logger inn. @@ -2208,8 +2200,22 @@ nb: back: Vis alle blokkeringer revoker: 'Tilbakekaller:' needs_view: Brukeren mÃ¥ logge inn før denne blokkeringen blir fjernet. - note: - description: + block: + not_revoked: (ikke tilbakekalt) + show: Vis + edit: Rediger + revoke: Tilbakekall! + blocks: + display_name: Blokkert bruker + creator_name: Opprettet av + reason: Årsak for blokkering + status: Status + revoker_name: Tilbakekalt av + showing_page: Side %{page} + next: Neste » + previous: « Forrige + notes: + comment: opened_at_html: Opprettet for %{when} siden opened_at_by_html: Opprettet for %{when} siden av %{user} commented_at_html: Oppdatert for %{when} siden @@ -2391,7 +2397,7 @@ nb: show_address: Vis adresse query_features: Se over elementer centre_map: Sentrer kartet her - redaction: + redactions: edit: description: Beskrivelse heading: Rediger maskering diff --git a/config/locales/nds.yml b/config/locales/nds.yml index c0bb47599..3dce199a8 100644 --- a/config/locales/nds.yml +++ b/config/locales/nds.yml @@ -112,19 +112,6 @@ nds: location: view: Ankieken edit: Ännern - export: - start: - licence: Lizenz - format: 'Format:' - scale: Skaal - max: max. - image_size: 'Bildgrött:' - zoom: Zoom - add_marker: Sett en Markteken op de Koort - latitude: 'Breed:' - longitude: 'Läng:' - output: Utgaav - export_button: Export geocoder: search_osm_nominatim: prefix: @@ -380,9 +367,6 @@ nds: help: Hülp make_a_donation: text: Spenn wat - license_page: - native: - title: Över disse Sied notifier: diary_comment_notification: hi: Moin %{to_user}, @@ -435,11 +419,26 @@ nds: delete: deleted: Naricht wegdaan site: + copyright: + native: + title: Över disse Sied index: permalink: Permalink shortlink: Kortlink edit: user_page_link: Brukersied + export: + licence: Lizenz + format: 'Format:' + scale: Skaal + max: max. + image_size: 'Bildgrött:' + zoom: Zoom + add_marker: Sett en Markteken op de Koort + latitude: 'Breed:' + longitude: 'Läng:' + output: Utgaav + export_button: Export sidebar: close: Sluten search: @@ -627,14 +626,14 @@ nds: remove_friend: success: '%{name} is rutnahmen bi de Frünn.' not_a_friend: '%{name} is keen von dien Frünn.' - user_block: - partial: - show: Wiesen - edit: Ännern + user_blocks: show: status: Status show: Wiesen edit: Ännern + block: + show: Wiesen + edit: Ännern javascripts: map: base: diff --git a/config/locales/ne.yml b/config/locales/ne.yml index 009cea823..1f6f310cf 100644 --- a/config/locales/ne.yml +++ b/config/locales/ne.yml @@ -348,52 +348,6 @@ ne: ago: '%{ago} पहिले' newer_comments: नयाँ टिप्पणीहरू older_comments: पूरानो टिप्पणीहरू - export: - title: निर्यात गर्नुहोस् - start: - area_to_export: निर्यात गर्ने क्षेत्र - manually_select: आफै अर्को क्षेत्र छान्नुहोस - format_to_export: निर्यात गर्ने ढाँचा - osm_xml_data: OpenStreetMap XML डेटा - map_image: नक्साको तस्वीर (सर्वस्वीकृत सतहहरू देखाउँछ) - embeddable_html: थप्नलायक HTML - licence: इजाजतपत्र - export_details: ओपनस्ट्रीटम्यापका जानकारीहरू अोपन - डेटा कमन्स ओपन डेटाबेस लाइसेन्स अनुज्ञप्तिसँग अाबद्ध छन् । - too_large: - advice: निर्यात गर्ने प्रक्रिया असफल भएमा तल दिइएका स्रोतहरू प्रयोग गर्नुहोस्- - body: यो क्षेत्र ओपनस्ट्रीटम्याप एक्स् एम् एल जानकारीको रूपमा निर्यात गर्नको - लागि निकै ठूलो छ । कृपया सानो क्षेत्र छान्नुहोस् वा तल देखाइएका स्रोतहरूबाट - ठूलो सङ्ख्यामा जानकारी डाउनलोड गर्नुहोस् । - planet: - title: ओएस्एम ग्रह - description: नियमित रूपमा अपडेट गरिएका ओपनस्ट्रीटम्याप तथ्याङ्कका प्रतिहरू - overpass: - title: ओभरपास एपिअाइ - description: OpenStreetMap तथ्याङ्कको अर्को स्रोतबाट यो सिमारेखा प्राप्त - गर्नुहोस् - geofabrik: - title: Geofabrik डाउनलोडहरू - description: नियमित रूपमा अपडेट गरिएका महादेशहरू, देशहरू तथा चुनिएका सहरहरूका - उद्धरणहरू - metro: - title: मेट्रो उद्धरणहरू - description: विश्वका प्रमुख सहर तथा वरिपरीका क्षेत्रहरूको उद्धरण - other: - title: अन्य स्रोतहरू - description: ओपनस्ट्रीटम्याप विकिमा सूचीत थप स्रोतहरू - options: विकल्पहरू - format: ढाँचा - scale: स्केल - max: अधिकतम - image_size: तस्वीर आकार - zoom: जुम - add_marker: नक्शामा चिह्न थप्नुहोस् - latitude: 'अक्षांश:' - longitude: 'देशान्तर:' - output: उत्पादन - paste_html: वेबसाइट इम्बेड गर्न HTML पेस्ट गर्नुहोस् - export_button: निर्यात गर्नुहोस् geocoder: search: title: @@ -792,54 +746,6 @@ ne: text: दान गर्नुहोस् learn_more: थप जान्नुहोस् more: थप - license_page: - native: - title: यो पृष्ठको बारेमा - mapping_link: म्यापिङ गर्न सुरु गर्नुहोस् - legal_babble: - more_title_html: थप जान्नको लागि - contributors_title_html: हाम्रा योगदान कर्ताहरू - welcome_page: - title: स्वागतम्! - whats_on_the_map: - title: म्यापमा के छ - rules: - title: नियमहरू ! - fixthemap: - how_to_help: - title: कसरी सहायता गर्ने - join_the_community: - title: समूदायमा सहभागी हुनुहोस् - other_concerns: - title: अन्य चासोहरू - help_page: - title: कसरी सहायता पाउने - welcome: - url: /welcome - title: OSM मा स्वागत् छ - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide - title: सुरुवातकर्ताहरूको लागि मार्गदर्शन - description: सुरुवातकर्ताहरूको लागि समुदायद्वारा निर्मित निर्देशिका - help: - title: help.openstreetmap.org - mailing_lists: - title: मेलिङ्ग सूचीहरू - forums: - title: मञ्च - irc: - title: आईआरसि - switch2osm: - title: स्विचटु‍ओएसएम - wiki: - url: http://wiki.openstreetmap.org/ - about_page: - next: अर्को - local_knowledge_title: स्थानीय ज्ञान - community_driven_title: समूदायबाट सञ्चालित - open_data_title: खुल्ला डेटा - legal_title: कानूनी - partners_title: समर्थकहरू notifier: diary_comment_notification: hi: नमस्ते %{to_user}, @@ -909,12 +815,103 @@ ne: delete: deleted: सन्देश मेटियो site: + about: + next: अर्को + local_knowledge_title: स्थानीय ज्ञान + community_driven_title: समूदायबाट सञ्चालित + open_data_title: खुल्ला डेटा + legal_title: कानूनी + partners_title: समर्थकहरू + copyright: + native: + title: यो पृष्ठको बारेमा + mapping_link: म्यापिङ गर्न सुरु गर्नुहोस् + legal_babble: + more_title_html: थप जान्नको लागि + contributors_title_html: हाम्रा योगदान कर्ताहरू index: permalink: स्थायी लिङ्क shortlink: छोटो लिङ्क createnote: एक टिप्पणी थप्नुहोस् edit: user_page_link: प्रयोगकर्ता पृष्ठ + export: + title: निर्यात गर्नुहोस् + area_to_export: निर्यात गर्ने क्षेत्र + manually_select: आफै अर्को क्षेत्र छान्नुहोस + format_to_export: निर्यात गर्ने ढाँचा + osm_xml_data: OpenStreetMap XML डेटा + map_image: नक्साको तस्वीर (सर्वस्वीकृत सतहहरू देखाउँछ) + embeddable_html: थप्नलायक HTML + licence: इजाजतपत्र + export_details: ओपनस्ट्रीटम्यापका जानकारीहरू अोपन + डेटा कमन्स ओपन डेटाबेस लाइसेन्स अनुज्ञप्तिसँग अाबद्ध छन् । + too_large: + advice: निर्यात गर्ने प्रक्रिया असफल भएमा तल दिइएका स्रोतहरू प्रयोग गर्नुहोस्- + body: यो क्षेत्र ओपनस्ट्रीटम्याप एक्स् एम् एल जानकारीको रूपमा निर्यात गर्नको + लागि निकै ठूलो छ । कृपया सानो क्षेत्र छान्नुहोस् वा तल देखाइएका स्रोतहरूबाट + ठूलो सङ्ख्यामा जानकारी डाउनलोड गर्नुहोस् । + planet: + title: ओएस्एम ग्रह + description: नियमित रूपमा अपडेट गरिएका ओपनस्ट्रीटम्याप तथ्याङ्कका प्रतिहरू + overpass: + title: ओभरपास एपिअाइ + description: OpenStreetMap तथ्याङ्कको अर्को स्रोतबाट यो सिमारेखा प्राप्त + गर्नुहोस् + geofabrik: + title: Geofabrik डाउनलोडहरू + description: नियमित रूपमा अपडेट गरिएका महादेशहरू, देशहरू तथा चुनिएका सहरहरूका + उद्धरणहरू + metro: + title: मेट्रो उद्धरणहरू + description: विश्वका प्रमुख सहर तथा वरिपरीका क्षेत्रहरूको उद्धरण + other: + title: अन्य स्रोतहरू + description: ओपनस्ट्रीटम्याप विकिमा सूचीत थप स्रोतहरू + options: विकल्पहरू + format: ढाँचा + scale: स्केल + max: अधिकतम + image_size: तस्वीर आकार + zoom: जुम + add_marker: नक्शामा चिह्न थप्नुहोस् + latitude: 'अक्षांश:' + longitude: 'देशान्तर:' + output: उत्पादन + paste_html: वेबसाइट इम्बेड गर्न HTML पेस्ट गर्नुहोस् + export_button: निर्यात गर्नुहोस् + fixthemap: + how_to_help: + title: कसरी सहायता गर्ने + join_the_community: + title: समूदायमा सहभागी हुनुहोस् + other_concerns: + title: अन्य चासोहरू + help: + title: कसरी सहायता पाउने + welcome: + url: /welcome + title: OSM मा स्वागत् छ + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide + title: सुरुवातकर्ताहरूको लागि मार्गदर्शन + description: सुरुवातकर्ताहरूको लागि समुदायद्वारा निर्मित निर्देशिका + help: + title: help.openstreetmap.org + mailing_lists: + url: http://lists.openstreetmap.org/ + title: मेलिङ्ग सूचीहरू + forums: + url: http://forum.openstreetmap.org/ + title: मञ्च + irc: + url: http://irc.openstreetmap.org/ + title: आईआरसि + switch2osm: + url: https://switch2osm.org/ + title: स्विचटु‍ओएसएम + wiki: + url: http://wiki.openstreetmap.org/ sidebar: close: बन्द गर्नुहोस् search: @@ -968,6 +965,12 @@ ne: text: पाठ image: छवि url: युआरएल + welcome: + title: स्वागतम्! + whats_on_the_map: + title: म्यापमा के छ + rules: + title: नियमहरू ! trace: create: upload_trace: GPS Trace अपलोड गर्ने @@ -1168,23 +1171,23 @@ ne: confirm: निश्चित गर्ने fail: भूमिका `%{role}' ,`%{name}'बाट फिर्ता लिन सकिएन । प्रोगकर्ता नाम र भूमिका दुबै मान्य छन् भन्ने खुलाउनु होस् । - user_block: - partial: + user_blocks: + show: + created: सृजना गरिएको + status: वस्तुस्थिति show: देखाउनुहोस् edit: सम्पादन confirm: निश्चित हुनुहुन्छ ? + block: + show: देखाउनुहोस् + edit: सम्पादन + blocks: creator_name: सर्जक status: वस्तुस्थिति showing_page: पृष्ठ %{page} next: अर्को » previous: « अघिल्लो - show: - created: सृजना गरिएको - status: वस्तुस्थिति - show: देखाउनुहोस् - edit: सम्पादन - confirm: निश्चित हुनुहुन्छ ? - note: + notes: entry: comment: टिप्पणी mine: @@ -1227,7 +1230,7 @@ ne: node: नोड way: बाटो relation: रिलेशन - redaction: + redactions: edit: description: वर्णन new: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index e5943661b..9af1c3928 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -371,54 +371,6 @@ nl: ago: '%{ago} geleden' newer_comments: Latere opmerkingen older_comments: Eerder opmerkingen - export: - title: Exporteren - start: - area_to_export: Te exporteren gebied - manually_select: Handmatig een ander gebied selecteren - format_to_export: Bestandsformaat - osm_xml_data: OpenStreetMap XML-gegevens - map_image: Kaartafbeelding (geeft de standaard laag weer) - embeddable_html: HTML-code - licence: Licentie - export_details: OpenStreetMapgegevens zijn gelicenseerd onder de licentie Open Data Commons Open - Database (ODbL). - too_large: - advice: 'Als het exporteren mislukt, overweeg dan een van de onderstaande - bronnen te gebruiken:' - body: Dit gebied is te groot om als OpenStreetMap XML-gegevens te exporteren. - Zoom in of selecteer een kleiner gebied. - planet: - title: Planet OSM - description: Regelmatig bijgewerkte kopieën van de volledige OpenStreetMap - database - overpass: - title: Overpass API - description: Dit selectiekader downloaden van een kopie van de database - van OpenStreetMap - geofabrik: - title: Geofabrik downloads - description: Regelmatig bijgewerkt extracten van continenten, landen en - een selectie van steden - metro: - title: Metro-extracten - description: Extracten voor grote wereldsteden en hun omliggende gebieden - other: - title: Andere bronnen - description: Extra bronnen die worden vermeld op de OpenStreetMapwiki - options: Opties - format: 'Formaat:' - scale: Schaal - max: max - image_size: 'Afbeeldingsgrootte:' - zoom: Zoom - add_marker: Marker op de kaart zetten - latitude: 'Breedte:' - longitude: 'Lengte:' - output: Uitvoer - paste_html: Kopieer de HTML-code en voeg deze toe aan uw website - export_button: Exporteren geocoder: search: title: @@ -437,11 +389,14 @@ nl: chair_lift: Stoeltjeslift drag_lift: Sleeplift gondola: Gondel + pylon: Pilaar station: Kabelbaanstation aeroway: aerodrome: Luchtvaartterrein + airstrip: Landingsbaan apron: Platform gate: Gate + hangar: Hangaar helipad: Helikopterplatform runway: Start- en landingsbaan taxiway: Taxibaan @@ -501,6 +456,7 @@ nl: office: Kantoor parking: Parking parking_entrance: Ingang parkeerplaats + parking_space: Parkeerplaats pharmacy: Apotheek place_of_worship: Religieuze samenkomstplaats police: Politie @@ -534,6 +490,7 @@ nl: village_hall: Gemeentehuis waste_basket: Prullenbak waste_disposal: Afval + water_point: Waterpunt youth_centre: Jeugdcentrum boundary: administrative: Administratieve grens @@ -564,22 +521,27 @@ nl: defibrillator: Defibrillator landing_site: Noodlandingsbaan phone: Noodtelefoon + water_tank: Watertank voor noodgevallen + "yes": Noodgeval highway: abandoned: Verlaten snelweg bridleway: Ruiterpad bus_guideway: Vrijliggende busbaan bus_stop: Bushalte construction: Snelweg in aanbouw + corridor: Corridor cycleway: Fietspad elevator: Lift emergency_access_point: Noodafslag footway: Voetpad ford: Voorde + give_way: Voorrangsbord living_street: Woonerf milestone: Mijlpaal motorway: Autosnelweg motorway_junction: Autosnelwegknooppunt motorway_link: Autosnelwegverbindingsweg + passing_place: Passeerplaats path: Pad pedestrian: Voetpad platform: Perron @@ -596,6 +558,7 @@ nl: services: Autosnelwegdienstverlening speed_camera: Snelheidscamera steps: Trap + stop: Stopbord street_lamp: Straatlantaarn tertiary: Tertiaire weg tertiary_link: Tertiaire weg @@ -604,6 +567,7 @@ nl: trail: Pad trunk: Autosnelweg trunk_link: Autoweg + turning_loop: Keerlus unclassified: Ongeclassificeerde weg "yes": Weg historic: @@ -623,6 +587,7 @@ nl: manor: Landgoed memorial: Herdenkingsmonument mine: Mijn + mine_shaft: Mijnschacht monument: Monument roman_road: Romeinse weg ruins: Ruïne @@ -632,6 +597,7 @@ nl: wayside_cross: Kruis langs de weg wayside_shrine: Altaar langs de weg wreck: Wrak + "yes": Historische Site junction: "yes": Kruising landuse: @@ -671,6 +637,7 @@ nl: bird_hide: Nestplaats common: Meent dog_park: Hondenpark + firepit: Vuurplaats fishing: Visgrond fitness_centre: Fitnesscentrum fitness_station: Fitnessstation @@ -695,15 +662,44 @@ nl: water_park: Waterspeelpark "yes": Recreatie man_made: + adit: Horizontale Schacht + beacon: Baken + beehive: Bijenkorf + breakwater: Havendam + bridge: Brug + bunker_silo: Bunker + chimney: Schoorsteen + crane: Kraan + dolphin: Meerpaal + dyke: Dijk + flagpole: Vlaggenmast + gasometer: Gashouder + groyne: Golfbreker + kiln: Oven lighthouse: Vuurtoren + mast: Mast + mine: Mijn + mineshaft: Mijnschacht + monitoring_station: Monitoringsstation + petroleum_well: Aardoliebron + pier: Pier pipeline: Pijplijn + silo: Silo + storage_tank: Opslagtank + surveillance: Surveillance tower: Toren + wastewater_plant: Afvalwaterzuivering + watermill: Watermolen + water_tower: Watertoren + water_works: Waterwerken + windmill: Windmolen works: Fabriek "yes": Door mensen gemaakt military: airfield: Militair vliegveld barracks: Kazerne bunker: Bunker + "yes": Militair mountain_pass: "yes": Bergpas natural: @@ -749,11 +745,14 @@ nl: accountant: Boekhouder administrative: Administratie architect: Architect + association: Vereniging company: Bedrijf + educational_institution: Educatieve Instelling employment_agency: Bureau voor werkgelegenheid estate_agent: Makelaar government: Overheidskantoor insurance: Verzekeringskantoor + it: IT Office lawyer: Advocaat ngo: NGO-kantoor telecommunication: Telecommunicatiekantoor @@ -777,6 +776,7 @@ nl: postcode: Postcode region: Regio sea: Zee + square: Plein state: Staat subdivision: Deelgebied suburb: Buitenwijk @@ -855,9 +855,12 @@ nl: hifi: Hi-fi jewelry: Juwelier kiosk: Kioskwinkel + kitchen: Keukenwinkel laundry: Wasserij + lottery: Loterij mall: Overdekt winkelcentrum market: Markt + massage: Massage mobile_phone: Mobiele telefoons motorcycle: Motorfietsenwinkel music: Muziekwinkel @@ -865,6 +868,7 @@ nl: optician: Opticien organic: Organische winkel outdoor: Buitensportwinkel + paint: Verfwinkel pet: Dierenwinkel pharmacy: Apotheek photo: Fotowinkel @@ -874,10 +878,11 @@ nl: stationery: Kantoorartikelenwinkel supermarket: Supermarkt tailor: Kleermaker + tobacco: Tabakswinkel toys: Speelgoedwinkel travel_agency: Reisbureau video: Videotheek - wine: Slijterij + wine: Wijnwinkel "yes": Winkel tourism: alpine_hut: Berghut @@ -991,275 +996,6 @@ nl: text: Doneren learn_more: Meer lezen more: Meer - license_page: - foreign: - title: Over deze vertaling - text: In het geval deze taalversie en %{english_original_link} elkaar tegenspreken, - hebben de bepalingen op de Engelstalige pagina voorrang. - english_link: het Engelstalige origineel - native: - title: Over deze pagina - text: U bent de Engelstalige versie van de auteursrechtenpagina aan het bekijken. - U kunt teruggaan naar de %{native_link} van deze pagina, of u kunt ophouden - met lezen over de auteursrechten en %{mapping_link}. - native_link: Nederlandstalige versie - mapping_link: gaan mappen - legal_babble: - title_html: Auteursrechten en licentie - intro_1_html: |- - OpenStreetMap® is open data, vrijgegeven onder de Open Data - Commons Open Database License (ODbL) door de OpenStreetMap Foundation (OSMF). - intro_2_html: |- - Het staat u vrij onze gegevens te kopiëren, te distribueren, - weer te geven en aan te passen, zo lang u OpenStreetMap en haar - auteurs vermeldt. Als u onze kaarten of gegevens wijzigt of erop verder bouwt, - mag u het resultaat enkel onder dezelfde licentie distribueren. In de - volledige juridische - tekst worden uw rechten en verantwoordelijkheden uitgelegd. - intro_3_html: |- - De cartografie in onze kaarttegels en onze documentatie zijn - vrijgegeven onder de licentie Creative - Commons Naamsvermelding-Gelijk delen 2.0 (CC BY-SA). - credit_title_html: Hoe OpenStreetMap te vermelden - credit_1_html: |- - We vereisen dat u het volgende vermeldt bij gebruik: - “© OpenStreetMap-auteurs”. - credit_2_html: "U moet ook duidelijk maken dat de gegevens beschikbaar zijn - onder de Open\nDatabase License, en als u onze kaarttegels gebruikt, dat de - cartografie\nde licentie CC BY-SA heeft. U kunt dit doen door te verwijzen - naar\nde auteursrechtenpagina. - \nU kunt ook direct verwijzen naar de licentie(s). Dat laatste is verplicht - als u OSM in gegevensvorm distribueert. In media waar\nhyperlinks niet mogelijk - zijn, bijvoorbeeld in gedrukte werken, raden we u aan\nuw lezer te verwijzen - naar openstreetmap.org (mogelijk door de naam \"OpenStreetMap\" naar dit webadres - uit te breiden), naar opendatacommons.org en naar, indien van toepassing, - creativecommons.org." - credit_3_html: |- - Voor een doorbladerbare, digitale kaart, moet de naamsvermelding in een hoek van de kaart weergegeven worden. - Bijvoorbeeld: - attribution_example: - alt: Voorbeeld van hoe de naamsvermelding voor OpenStreetMap toe te passen - op een webpagina - title: Voorbeeld naamsvermelding - more_title_html: Meer informatie - more_1_html: Lees meer over het gebruik van onze gegevens, en hoe u OpenStreetMap - moet vermelden, op de licentiepagina - van de OSMF - more_2_html: |- - Hoewel OpenStreetMap open data is, kunnen we geen gratis - kaart-API voor derde partijen aanbieden. - Zie ons API-gebruikbeleid, - Tegelgebruikbeleid - en Nominatimgebruikbeleid. - contributors_title_html: Onze bijdragers - contributors_intro_html: |- - Onze bijdragers zijn duizenden individuen. OSM bevat ook - open gelicenseerde gegevens van nationale kaartenbureaus - en andere bronnen, waaronder: - contributors_at_html: |- - Oostenrijk: bevat gegevens van de - Stad Wenen (onder - CC BY), Land Vorarlberg en - Land Tirol (onder CC BY-AT met aanvullingen). - contributors_ca_html: |- - Canada: Bevat gegevens van - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), en StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: 'Finland: bevat gegevens van de topografische - database van het nationaal kadaster van Finland en andere gegevensverzamelingen, - onder de licentie NLSFI.' - contributors_fr_html: |- - Frankrijk: Bevat gegevens van - Direction Générale des Impôts. - contributors_nl_html: |- - Nederland: Bevat © Gegevens van AND, 2007 - (www.and.com) - contributors_nz_html: |- - Nieuw-Zeeland: Bevat gegevens van - Land Information New Zealand. Crown Copyright voorbehouden. - contributors_si_html: |- - Slovenië: Bevat gegevens uit - Surveying and Mapping Authority en - Ministerie van Landbouw, Bosbouw en Voedsel - (openbare informatie van Slovenië). - contributors_za_html: |- - Zuid-Afrika: Bevat gegevens afkomstig uit - Chief Directorate: - National Geo-Spatial Information, auteursrechten voor de Staat voorbehouden. - contributors_gb_html: |- - Verenigd Koninkrijk: bevat gegevens van - Ordnance Survey © Crown Copyright en databaserechten - 2010-2012. - contributors_footer_1_html: |- - Voor meer gegevens over deze en andere bronnen die gebruikt zijn - voor het verbeteren van OpenStreetMap, kunt u de pagina met Bijdragers - op de OpenStreetMap Wiki raadplegen. - contributors_footer_2_html: |- - Opname van gegevens in OpenStreetMap betekent niet dat de originele - gegevensverstrekker OpenStreetMap ondersteunt, enige vorm van garantie geeft, of - aansprakelijkheid aanvaardt. - infringement_title_html: Auteursrechtenschending - infringement_1_html: |- - Bijdragers aan OSM horen nooit gegevens toe te voegen - uit bronnen waarvan de licentie niet vrij is (bijvoorbeeld Google Maps of gedrukte kaarten) - zonder expliciete toestemming van de auteursrechtenhouders. - infringement_2_html: |- - Als u van mening bent dat auteursrechtelijk beschermd en niet vrij gelicenseerd materiaal - ongeoorloofd aan de database van OpenStreetMap of aan deze website is toegevoegd, raadpleeg dan - onze verwijderprocedure - of meld het direct en formeel via onze online claimpagina. - trademarks_title_html: Handelsmerken - trademarks_1_html: OpenStreetMap, het vergrootglaslogo en State of the Map zijn - geregistreerde handelsmerken van de OpenStreetMap Foundation. Als u vragen - hebt over uw gebruik van deze merken, stuur dan uw vragen dan naar de Licentiewerkgroep. - welcome_page: - title: Welkom! - introduction_html: Welkom bij OpenStreetMap, de open en te bewerken kaart van - de wereld. Nu u bent aangemeld, kunt u kaarten gaan maken. Hier zijn een aantal - dingen die belangrijk zijn om te weten. - whats_on_the_map: - title: Wat is er op de kaart? - on_html: |- - OpenStreetMap is plaats voor het in kaart brengen van dingen die echt en actueel zijn - - we hebben een kaart met miljoenen gebouwen, wegen en andere details over plaatsen. - U kunt alles uit de echte wereld waar u interesse in hebt in kaart brengen. - off_html: |- - Geen onderdeel van de kaart zijn subjectieve gegevens zoals waarderingen, historische of hypothetische eigenschappen en gegevens uit bronnen die auteursrechtelijk beschermd zijn. Tenzij u bijzondere toestemming hebt, - kunt u niet kopiëren uit kaarten die u online of op papier kunt vinden. - basic_terms: - title: Basisbegrippen voor cartografie - paragraph_1_html: OpenStreetMap heeft een eigen jargon. Hier volgen een aantal - woorden die van pas gaan komen. - editor_html: Een editor is een programma of website die u kunt - gebruiken om de kaart te bewerken. - node_html: Een node is een punt op de kaart, zoals een enkel - restaurant of een boom. - way_html: Een weg (way) is een lijn of gebied, zoals een weg, - een rivier, een meer of een gebouw. - tag_html: Een tag is een eigenschap over een node of een weg, - zoals de naam van een restaurant of de maximumsnelheid op een weg. - rules: - title: Regels! - paragraph_1_html: "OpenStreetMap heeft weinig formele regels, maar we verwachten - dat alle deelnemers samenwerken en communiceren met de gemeenschap. Als u - van plan bent andere activiteiten uit te voeren dan met de hand bewerkingen - maken, lees en volg dan de richtlijnen voor Imports - en \nGeautomatiseerde - bewerkingen." - questions: - title: Nog vragen? - paragraph_1_html: |- - Er zijn verschillende bronnen om te leren over OpenStreetMap, voor het stellen en beantwoorden van vragen, en het samen overleggen en documenteren van onderwerpen die gaan over kaarten maken. - Hier vind je meer informatie. - start_mapping: Beginnen met kaarten maken - add_a_note: - title: Geen tijd om te bewerken? Voeg een opmerking toe! - paragraph_1_html: Als u gewoon wilt iets kleins wilt verbeteren en niet de tijd - niet hebt om u in te schrijven en om te leren hoe te bewerken, kunt u eenvoudig - een opmerking toevoegen. - paragraph_2_html: |- - Ga naar de kaart en klik op het notitiesymbool: - . Er wordt een markering toegevoegd aan de kaart die u kunt verplaatsen door te slepen. Voeg uw bericht toe en klik dan op Opslaan, zodat andere mapper het kunnen onderzoeken. - fixthemap: - title: Een probleem melden / de kaart corrigeren - how_to_help: - title: Hoe je kan helpen - join_the_community: - title: Word lid van onze gemeenschap - explanation_html: Als je een probleem met onze kaartgegevens hebt gevonden - (er ontbreekt bijvoorbeeld een weg of je adres staat er niet in) dan kan - je je het best bij OpenStreetMap inschrijven en de gegevens zelf toevoegen - of corrigeren. - add_a_note: - instructions_html: |- - Klik op of het hetzelfde pictogram op de kaartweergave. - Er wordt dan een markering toegevoegd aan de kaart, die je kan verslepen. - Voeg je bericht toe, klik op opslaan, en andere kaartenmakers kijken dan naar jouw melding. - other_concerns: - title: Andere aangelegenheden - explanation_html: |- - Als je vragen hebt over hoe onze gegevens worden gebruikt of over de inhoud, raadpleeg dan onze - auteursrechtenpagina voor meer juridische informatie, of neem contact op met de betreffende - OSMF-werkgroep. - help_page: - title: Hulp krijgen - introduction: Er zijn verschillende bronnen om meer te leren over OpenStreetMap, - voor het stellen van vragen en het krijgen van antwoorden, en het samen overleggen - en documenteren van onderwerpen die gaan over kaarten maken. - welcome: - url: /welcome - title: Welkom bij OSM - description: Begin met dit snelle stappenplan dat de basis van OpenSteetMap - uitlegt. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/NL:Beginnershandleiding - title: Handleiding voor beginners - description: Handleiding voor beginners, onderhouden door de gemeenschap. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Stel een vraag of zoek antwoorden op de vraag- en antwoordsite - van OSM. - mailing_lists: - title: Mailinglijsten - description: Stel een vraag of bespreek interessante zaken op een hele reeks - onderwerpsgebonden of regionale mailinglijsten. - forums: - title: Forums - description: Vragen en overleg voor als u liever met een interface in bulletin - boardstijl werkt. - irc: - title: IRC - description: Interactieve chat in vele verschillende talen en over tal van onderwerpen. - switch2osm: - title: switch2osm - description: Hulp voor bedrijven en organisaties om over te schakelen op OpenStreetMap-gebaseerde - kaarten en andere diensten. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: In de wiki kijken voor diepgaande documentatie over OSM - about_page: - next: Volgende - copyright_html: ©OpenStreetMap-
        bijdragers - used_by: '%{name} levert gegevens voor duizenden websites, mobiele apps en hardwareimplementaties' - lede_text: OpenStreetMap wordt gemaakt door een gemeenschap van kaartenmakers - die gegevens over wegen, paden, cafés, treinstations en nog veel meer, over - de hele wereld bijdragen en onderhouden. - local_knowledge_title: Lokale kennis - local_knowledge_html: OpenStreetMap legt de nadruk op lokale kennis. Bijdragers - gebruiken luchtfoto's, GPS-apparaten, en low-tech veldkaarten om te controleren - of OSM accuraat en bij de tijd is. - community_driven_title: Communitygedreven - community_driven_html: |- - De gemeenschap van OpenStreetMap is divers, gepassioneerd en wordt elke dag groter. Onder onze bijdragers zitten mensen die kaarten maken als hobby, GIS-professionals, IT-specialisten die de servers van OSM draaiende houden, filantropen die rampgebieden in kaart brengen en nog veel meer. - Bekijk de - OpenStreetMap-blog, - gebruikersdagboeken, - gemeenschapsblogs, - en de website van de OSM Foundation - voor meer informatie over de gemeenschap. - open_data_title: Open data - open_data_html: 'OpenStreetMap is open data: u mag de gegevens gebruiken - voor ieder doel, als u de naam van OpenStreetMap en haar bijdragers maar vermeldt. - Als u de gegevens wijzigt of uitbouwt op bepaalde manieren, dan mag u het resultaat - alleen onder dezelfde licentie verder verspreiden. Zie de pagina - over Auteursrechten en Licentie voor details.' - legal_title: Juridisch - legal_html: "Deze site en tal van andere diensten worden formeel beheerd door - \nOpenStreetMap Foundation (OSMF) - \nnamens de gemeenschap. Het gebruik van alle door OSMF aangeboden diensten - is onderworpen\naan ons \nBeleid - voor aanvaardbaar gebruik en ons Privacybeleid.\n
        - \nNeem contact op met de OSMF - \nals u vragen of problemen hebt in verband met licenties, auteursrechten of - andere juridische zaken." - partners_title: Partners notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} heeft een reactie bij uw dagboek geplaatst' @@ -1454,6 +1190,169 @@ nl: delete: deleted: Het bericht is verwijderd site: + about: + next: Volgende + copyright_html: ©OpenStreetMap-
        bijdragers + used_by: '%{name} levert gegevens voor duizenden websites, mobiele apps en hardwareimplementaties' + lede_text: OpenStreetMap wordt gemaakt door een gemeenschap van kaartenmakers + die gegevens over wegen, paden, cafés, treinstations en nog veel meer, over + de hele wereld bijdragen en onderhouden. + local_knowledge_title: Lokale kennis + local_knowledge_html: OpenStreetMap legt de nadruk op lokale kennis. Bijdragers + gebruiken luchtfoto's, GPS-apparaten, en low-tech veldkaarten om te controleren + of OSM accuraat en bij de tijd is. + community_driven_title: Communitygedreven + community_driven_html: |- + De gemeenschap van OpenStreetMap is divers, gepassioneerd en wordt elke dag groter. Onder onze bijdragers zitten mensen die kaarten maken als hobby, GIS-professionals, IT-specialisten die de servers van OSM draaiende houden, filantropen die rampgebieden in kaart brengen en nog veel meer. + Bekijk de + OpenStreetMap-blog, + gebruikersdagboeken, + gemeenschapsblogs, + en de website van de OSM Foundation + voor meer informatie over de gemeenschap. + open_data_title: Open data + open_data_html: 'OpenStreetMap is open data: u mag de gegevens gebruiken + voor ieder doel, als u de naam van OpenStreetMap en haar bijdragers maar vermeldt. + Als u de gegevens wijzigt of uitbouwt op bepaalde manieren, dan mag u het + resultaat alleen onder dezelfde licentie verder verspreiden. Zie de pagina + over Auteursrechten en Licentie voor details.' + legal_title: Juridisch + legal_html: "Deze site en tal van andere diensten worden formeel beheerd door + \nOpenStreetMap Foundation (OSMF) + \nnamens de gemeenschap. Het gebruik van alle door OSMF aangeboden diensten + is onderworpen\naan ons \nBeleid + voor aanvaardbaar gebruik en ons Privacybeleid.\n
        + \nNeem contact op met de OSMF + \nals u vragen of problemen hebt in verband met licenties, auteursrechten + of andere juridische zaken." + partners_title: Partners + copyright: + foreign: + title: Over deze vertaling + text: In het geval deze taalversie en %{english_original_link} elkaar tegenspreken, + hebben de bepalingen op de Engelstalige pagina voorrang. + english_link: het Engelstalige origineel + native: + title: Over deze pagina + text: U bent de Engelstalige versie van de auteursrechtenpagina aan het bekijken. + U kunt teruggaan naar de %{native_link} van deze pagina, of u kunt ophouden + met lezen over de auteursrechten en %{mapping_link}. + native_link: Nederlandstalige versie + mapping_link: gaan mappen + legal_babble: + title_html: Auteursrechten en licentie + intro_1_html: |- + OpenStreetMap® is open data, vrijgegeven onder de Open Data + Commons Open Database License (ODbL) door de OpenStreetMap Foundation (OSMF). + intro_2_html: |- + Het staat u vrij onze gegevens te kopiëren, te distribueren, + weer te geven en aan te passen, zo lang u OpenStreetMap en haar + auteurs vermeldt. Als u onze kaarten of gegevens wijzigt of erop verder bouwt, + mag u het resultaat enkel onder dezelfde licentie distribueren. In de + volledige juridische + tekst worden uw rechten en verantwoordelijkheden uitgelegd. + intro_3_html: |- + De cartografie in onze kaarttegels en onze documentatie zijn + vrijgegeven onder de licentie Creative + Commons Naamsvermelding-Gelijk delen 2.0 (CC BY-SA). + credit_title_html: Hoe OpenStreetMap te vermelden + credit_1_html: |- + We vereisen dat u het volgende vermeldt bij gebruik: + “© OpenStreetMap-auteurs”. + credit_2_html: "U moet ook duidelijk maken dat de gegevens beschikbaar zijn + onder de Open\nDatabase License, en als u onze kaarttegels gebruikt, dat + de cartografie\nde licentie CC BY-SA heeft. U kunt dit doen door te verwijzen + naar\nde auteursrechtenpagina. + \nU kunt ook direct verwijzen naar de licentie(s). Dat laatste is verplicht + als u OSM in gegevensvorm distribueert. In media waar\nhyperlinks niet mogelijk + zijn, bijvoorbeeld in gedrukte werken, raden we u aan\nuw lezer te verwijzen + naar openstreetmap.org (mogelijk door de naam \"OpenStreetMap\" naar dit + webadres uit te breiden), naar opendatacommons.org en naar, indien van toepassing, + creativecommons.org." + credit_3_html: |- + Voor een doorbladerbare, digitale kaart, moet de naamsvermelding in een hoek van de kaart weergegeven worden. + Bijvoorbeeld: + attribution_example: + alt: Voorbeeld van hoe de naamsvermelding voor OpenStreetMap toe te passen + op een webpagina + title: Voorbeeld naamsvermelding + more_title_html: Meer informatie + more_1_html: Lees meer over het gebruik van onze gegevens, en hoe u OpenStreetMap + moet vermelden, op de licentiepagina + van de OSMF + more_2_html: |- + Hoewel OpenStreetMap open data is, kunnen we geen gratis + kaart-API voor derde partijen aanbieden. + Zie ons API-gebruikbeleid, + Tegelgebruikbeleid + en Nominatimgebruikbeleid. + contributors_title_html: Onze bijdragers + contributors_intro_html: |- + Onze bijdragers zijn duizenden individuen. OSM bevat ook + open gelicenseerde gegevens van nationale kaartenbureaus + en andere bronnen, waaronder: + contributors_at_html: |- + Oostenrijk: bevat gegevens van de + Stad Wenen (onder + CC BY), Land Vorarlberg en + Land Tirol (onder CC BY-AT met aanvullingen). + contributors_ca_html: |- + Canada: Bevat gegevens van + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), en StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: 'Finland: bevat gegevens van de topografische + database van het nationaal kadaster van Finland en andere gegevensverzamelingen, + onder de licentie NLSFI.' + contributors_fr_html: |- + Frankrijk: Bevat gegevens van + Direction Générale des Impôts. + contributors_nl_html: |- + Nederland: Bevat © Gegevens van AND, 2007 + (www.and.com) + contributors_nz_html: |- + Nieuw-Zeeland: Bevat gegevens van + Land Information New Zealand. Crown Copyright voorbehouden. + contributors_si_html: |- + Slovenië: Bevat gegevens uit + Surveying and Mapping Authority en + Ministerie van Landbouw, Bosbouw en Voedsel + (openbare informatie van Slovenië). + contributors_za_html: |- + Zuid-Afrika: Bevat gegevens afkomstig uit + Chief Directorate: + National Geo-Spatial Information, auteursrechten voor de Staat voorbehouden. + contributors_gb_html: |- + Verenigd Koninkrijk: bevat gegevens van + Ordnance Survey © Crown Copyright en databaserechten + 2010-2012. + contributors_footer_1_html: |- + Voor meer gegevens over deze en andere bronnen die gebruikt zijn + voor het verbeteren van OpenStreetMap, kunt u de pagina met Bijdragers + op de OpenStreetMap Wiki raadplegen. + contributors_footer_2_html: |- + Opname van gegevens in OpenStreetMap betekent niet dat de originele + gegevensverstrekker OpenStreetMap ondersteunt, enige vorm van garantie geeft, of + aansprakelijkheid aanvaardt. + infringement_title_html: Auteursrechtenschending + infringement_1_html: |- + Bijdragers aan OSM horen nooit gegevens toe te voegen + uit bronnen waarvan de licentie niet vrij is (bijvoorbeeld Google Maps of gedrukte kaarten) + zonder expliciete toestemming van de auteursrechtenhouders. + infringement_2_html: |- + Als u van mening bent dat auteursrechtelijk beschermd en niet vrij gelicenseerd materiaal + ongeoorloofd aan de database van OpenStreetMap of aan deze website is toegevoegd, raadpleeg dan + onze verwijderprocedure + of meld het direct en formeel via onze online claimpagina. + trademarks_title_html: Handelsmerken + trademarks_1_html: OpenStreetMap, het vergrootglaslogo en State of the Map + zijn geregistreerde handelsmerken van de OpenStreetMap Foundation. Als u + vragen hebt over uw gebruik van deze merken, stuur dan uw vragen dan naar + de Licentiewerkgroep. index: js_1: U gebruikt een browser die JavaScript niet ondersteunt, of u hebt JavaScript uitgeschakeld. @@ -1485,6 +1384,117 @@ nl: id_not_configured: iD is niet ingesteld no_iframe_support: Uw browser ondersteunt geen iframes HTML die nodig zijn voor deze functie. + export: + title: Exporteren + area_to_export: Te exporteren gebied + manually_select: Handmatig een ander gebied selecteren + format_to_export: Bestandsformaat + osm_xml_data: OpenStreetMap XML-gegevens + map_image: Kaartafbeelding (geeft de standaard laag weer) + embeddable_html: HTML-code + licence: Licentie + export_details: OpenStreetMapgegevens zijn gelicenseerd onder de licentie Open Data Commons Open + Database (ODbL). + too_large: + advice: 'Als het exporteren mislukt, overweeg dan een van de onderstaande + bronnen te gebruiken:' + body: Dit gebied is te groot om als OpenStreetMap XML-gegevens te exporteren. + Zoom in of selecteer een kleiner gebied. + planet: + title: Planet OSM + description: Regelmatig bijgewerkte kopieën van de volledige OpenStreetMap + database + overpass: + title: Overpass API + description: Dit selectiekader downloaden van een kopie van de database + van OpenStreetMap + geofabrik: + title: Geofabrik downloads + description: Regelmatig bijgewerkt extracten van continenten, landen en + een selectie van steden + metro: + title: Metro-extracten + description: Extracten voor grote wereldsteden en hun omliggende gebieden + other: + title: Andere bronnen + description: Extra bronnen die worden vermeld op de OpenStreetMapwiki + options: Opties + format: 'Formaat:' + scale: Schaal + max: max + image_size: 'Afbeeldingsgrootte:' + zoom: Zoom + add_marker: Marker op de kaart zetten + latitude: 'Breedte:' + longitude: 'Lengte:' + output: Uitvoer + paste_html: Kopieer de HTML-code en voeg deze toe aan uw website + export_button: Exporteren + fixthemap: + title: Een probleem melden / de kaart corrigeren + how_to_help: + title: Hoe je kan helpen + join_the_community: + title: Word lid van onze gemeenschap + explanation_html: Als je een probleem met onze kaartgegevens hebt gevonden + (er ontbreekt bijvoorbeeld een weg of je adres staat er niet in) dan kan + je je het best bij OpenStreetMap inschrijven en de gegevens zelf toevoegen + of corrigeren. + add_a_note: + instructions_html: |- + Klik op of het hetzelfde pictogram op de kaartweergave. + Er wordt dan een markering toegevoegd aan de kaart, die je kan verslepen. + Voeg je bericht toe, klik op opslaan, en andere kaartenmakers kijken dan naar jouw melding. + other_concerns: + title: Andere aangelegenheden + explanation_html: |- + Als je vragen hebt over hoe onze gegevens worden gebruikt of over de inhoud, raadpleeg dan onze + auteursrechtenpagina voor meer juridische informatie, of neem contact op met de betreffende + OSMF-werkgroep. + help: + title: Hulp krijgen + introduction: Er zijn verschillende bronnen om meer te leren over OpenStreetMap, + voor het stellen van vragen en het krijgen van antwoorden, en het samen overleggen + en documenteren van onderwerpen die gaan over kaarten maken. + welcome: + url: /welcome + title: Welkom bij OSM + description: Begin met dit snelle stappenplan dat de basis van OpenSteetMap + uitlegt. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/NL:Beginnershandleiding + title: Handleiding voor beginners + description: Handleiding voor beginners, onderhouden door de gemeenschap. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Stel een vraag of zoek antwoorden op de vraag- en antwoordsite + van OSM. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Mailinglijsten + description: Stel een vraag of bespreek interessante zaken op een hele reeks + onderwerpsgebonden of regionale mailinglijsten. + forums: + url: http://forum.openstreetmap.org/ + title: Forums + description: Vragen en overleg voor als u liever met een interface in bulletin + boardstijl werkt. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Interactieve chat in vele verschillende talen en over tal van + onderwerpen. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Hulp voor bedrijven en organisaties om over te schakelen op OpenStreetMap-gebaseerde + kaarten en andere diensten. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: In de wiki kijken voor diepgaande documentatie over OSM sidebar: search_results: Zoekresultaten close: Sluiten @@ -1584,6 +1594,54 @@ nl: image: Afbeelding alt: Alternatieve tekst url: URL + welcome: + title: Welkom! + introduction_html: Welkom bij OpenStreetMap, de open en te bewerken kaart van + de wereld. Nu u bent aangemeld, kunt u kaarten gaan maken. Hier zijn een aantal + dingen die belangrijk zijn om te weten. + whats_on_the_map: + title: Wat is er op de kaart? + on_html: |- + OpenStreetMap is plaats voor het in kaart brengen van dingen die echt en actueel zijn - + we hebben een kaart met miljoenen gebouwen, wegen en andere details over plaatsen. + U kunt alles uit de echte wereld waar u interesse in hebt in kaart brengen. + off_html: |- + Geen onderdeel van de kaart zijn subjectieve gegevens zoals waarderingen, historische of hypothetische eigenschappen en gegevens uit bronnen die auteursrechtelijk beschermd zijn. Tenzij u bijzondere toestemming hebt, + kunt u niet kopiëren uit kaarten die u online of op papier kunt vinden. + basic_terms: + title: Basisbegrippen voor cartografie + paragraph_1_html: OpenStreetMap heeft een eigen jargon. Hier volgen een aantal + woorden die van pas gaan komen. + editor_html: Een editor is een programma of website die u + kunt gebruiken om de kaart te bewerken. + node_html: Een node is een punt op de kaart, zoals een enkel + restaurant of een boom. + way_html: Een weg (way) is een lijn of gebied, zoals een + weg, een rivier, een meer of een gebouw. + tag_html: Een tag is een eigenschap over een node of een + weg, zoals de naam van een restaurant of de maximumsnelheid op een weg. + rules: + title: Regels! + paragraph_1_html: "OpenStreetMap heeft weinig formele regels, maar we verwachten + dat alle deelnemers samenwerken en communiceren met de gemeenschap. Als + u van plan bent andere activiteiten uit te voeren dan met de hand bewerkingen + maken, lees en volg dan de richtlijnen voor Imports + en \nGeautomatiseerde + bewerkingen." + questions: + title: Nog vragen? + paragraph_1_html: |- + Er zijn verschillende bronnen om te leren over OpenStreetMap, voor het stellen en beantwoorden van vragen, en het samen overleggen en documenteren van onderwerpen die gaan over kaarten maken. + Hier vind je meer informatie. + start_mapping: Beginnen met kaarten maken + add_a_note: + title: Geen tijd om te bewerken? Voeg een opmerking toe! + paragraph_1_html: Als u gewoon wilt iets kleins wilt verbeteren en niet de + tijd niet hebt om u in te schrijven en om te leren hoe te bewerken, kunt + u eenvoudig een opmerking toevoegen. + paragraph_2_html: |- + Ga naar de kaart en klik op het notitiesymbool: + . Er wordt een markering toegevoegd aan de kaart die u kunt verplaatsen door te slepen. Voeg uw bericht toe en klik dan op Opslaan, zodat andere mapper het kunnen onderzoeken. trace: visibility: private: Persoonlijk (alleen gedeeld als anoniem; ongeordende punten) @@ -1714,7 +1772,7 @@ nl: in de webinterface om de Voorwaarden voor Bijdragen te bekijken. U hoeft ze niet te onderschijven, maar moet ze wel gezien hebben. oauth: - oauthorize: + authorize: title: Geef toegang tot uw account request_access: De toepassing %{app_name} vraagt toegang tot uw gebruiker %{user}. Controleer of u deze toepassing de volgende mogelijkheden wilt bieden. U kunt @@ -1728,11 +1786,11 @@ nl: allow_write_gpx: GPS-tracks uploaden allow_write_notes: opmerkingen wijzigen. grant_access: Toegang verlenen - oauthorize_success: + authorize_success: title: Autorisatieaanvraag toegestaan allowed: U hebt de toepassing %{app_name} toegang verleend tot uw gebruiker. verification: De controlecode is %{code}. - oauthorize_failure: + authorize_failure: title: De autorisatieaanvraag is mislukt. denied: U hebt de toepassing %{app_name} toegang tot uw gebruiker geweigerd. invalid: Het autorisatietoken is niet geldig. @@ -1975,6 +2033,7 @@ nl: if set location: Stel uw thuislocatie in via de pagina %{settings_link} om gebruikers in uw buurt te zien. settings_link_text: instellingen + my friends: Mijn vrienden no friends: U hebt nog geen vrienden toegevoegd. km away: '%{count} km verwijderd' m away: '%{count} m verwijderd' @@ -2173,7 +2232,7 @@ nl: confirm: Bevestigen fail: Het was niet mogelijk de rol "%{role}" voor gebruiker "%{name}" in te trekken. Controleer of de gebruikersnaam en rolnaam correct waren. - user_block: + user_blocks: model: non_moderator_update: U moet moderator zijn om een blokkade te kunnen instellen of bijwerken. @@ -2237,20 +2296,6 @@ nl: period: one: 1 uur other: '%{count} uur' - partial: - show: Weergeven - edit: Bewerken - revoke: Intrekken - confirm: Weet u het zeker? - display_name: Geblokkeerde gebruiker - creator_name: Auteur - reason: Reden voor blokkade - status: Status - revoker_name: Ingetrokken door - not_revoked: (niet ingetrokken) - showing_page: Pagina %{page} - next: Volgende » - previous: « Vorige helper: time_future: Vervalt over %{time}. until_login: Actief totdat de gebruiker zich aanmeldt. @@ -2281,8 +2326,22 @@ nl: back: Alle blokkades bekijken revoker: 'Ingetrokken door:' needs_view: De gebruiker moet aanmelden voordat deze blokkade wordt verwijderd. - note: - description: + block: + not_revoked: (niet ingetrokken) + show: Weergeven + edit: Bewerken + revoke: Intrekken + blocks: + display_name: Geblokkeerde gebruiker + creator_name: Auteur + reason: Reden voor blokkade + status: Status + revoker_name: Ingetrokken door + showing_page: Pagina %{page} + next: Volgende » + previous: « Vorige + notes: + comment: opened_at_html: '%{when} geleden gemaakt' opened_at_by_html: '%{when} geleden gemaakt door %{user}' commented_at_html: '%{when} geleden bijgewerkt' @@ -2464,7 +2523,7 @@ nl: show_address: Toon adres query_features: Opvragen van kenmerken centre_map: Centreer de kaart hier - redaction: + redactions: edit: description: Beschrijving heading: Redigering bewerken diff --git a/config/locales/nn.yml b/config/locales/nn.yml index bd28cc51a..986dbe34a 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -323,37 +323,6 @@ nn: ago: '%{ago} sidan' newer_comments: Nyare kommentarar older_comments: Eldre kommentarar - export: - title: Eksporter - start: - area_to_export: OmrÃ¥de som skal eksporterast - manually_select: Vel eit anna omrÃ¥de manuelt - format_to_export: Format for eksport - osm_xml_data: OpenStreetMap XML-data - map_image: Kartblad (viser standard laget) - embeddable_html: HTML som kan byggjast inn - licence: Lisens - export_details: Data frÃ¥ OpenStreetMap er lisensiert under Open - Data Commons Open Database License (ODbL). - too_large: - body: Dette omrÃ¥det er for stort for Ã¥ eksporterast som OpenStreetMap XML-data. - Zoom inn eller vel eit mindre omrÃ¥de. - planet: - title: Planet OSM - other: - title: Andre kjelder - options: Val - format: Format - scale: Skala - max: maks - image_size: Bildestørrelse - zoom: Zoom - add_marker: Legg til ein markør pÃ¥ kartet - latitude: 'Brei:' - longitude: 'Len:' - output: Utdata - paste_html: Lim inn HTML som skal byggjast inn i nettstad - export_button: Eksporter geocoder: search: title: @@ -929,163 +898,6 @@ nn: text: Gje pengegÃ¥ve learn_more: Les meir more: Meir - license_page: - foreign: - title: Om denne omsetjinga - text: I tilfelle konflikt mellom denne omsette sida og %{english_original_link} - har den engelske versjonen presedens - english_link: den engelske originalen - native: - title: Om denne sida - text: Du ser den engelske versjonen av opphavsrettssida. Du kan gÃ¥ tilbake til - den %{native_link} av denne sida, eller du kan stoppe Ã¥ lese om opphavsrett - og %{mapping_link}. - native_link: Nynorsk versjon - mapping_link: start kartlegging - legal_babble: - title_html: Opphavsrett og lisensar - intro_1_html: Data frÃ¥ OpenStreetMap er Ã¥pne data, lisensiert under Open Data Commons Open Database - License (ODbL). - intro_2_html: "Du er fri til Ã¥ kopiere, distribuere, overføre og tilpasse dataa - vÃ¥re, sÃ¥ lenge du godskriv OpenStreetMap og bidragsytarane\n deira. Dersom - du endrar eller byggjer pÃ¥ dataa vÃ¥re, kan du berre distribuere resultatet - under same lisens. \n Den fullstendige juridiske\n - \ teksten forklarer rettane og ansvaret." - intro_3_html: |- - Kartografien i vÃ¥re kartfliser, og dokumentasjonen vÃ¥r, er lisensiert under Creative - Commons Navngivelse-DelPÃ¥SammeVilkÃ¥r 2.0 (CC BY-SA). - credit_title_html: Korleis kreditere OpenStreetMap - credit_1_html: Me krev at du brukar godskrivinga «© OpenStreetMap-bidragsytarane». - credit_2_html: Du mÃ¥ óg gjere det klart at dataa er tilgjengeleg under Open - Database License, og dersom du brukar kartflisene, at kartografien er lisensiert - under CC BY-SA. Du kan gjere dette ved Ã¥ lenkje til denne - sida. Alternativt, og eit krav om du distribuerer OSM i dataform, kan - du nemne og lenkje til lisensen eller lisensane. I former der lenkjer er umogleg - (t.d. trykte verk), føreslÃ¥r me at du viser lesarane dine til openstreetmap.org - (kanskje ved Ã¥ utvide «OpenStreetMap» til denne fulle adressa), til opendatacommons.org, - og dersom relevant, til creativecommons.org. - credit_3_html: |- - For et navigerbart elektronisk kart, skal kjelda visast i hjørnet av kartet. - Til dømes: - attribution_example: - alt: Døme pÃ¥ korleis ein syner OpenStreetMap som kjelde pÃ¥ ei vevside - title: Døme pÃ¥ kjeldehenvising - more_title_html: Finn ut meir - more_1_html: |- - Les meir om korleis du brukar dataa vÃ¥re, og korleis du krediterer oss, i den juridiske - FAQ-en. - more_2_html: |- - Sjølv om OpenStreetMap er Ã¥pne data kan me ikkje gje eit - gratis kart-API til tredjepartsutviklere. - - SjÃ¥ vÃ¥re retningslinjer for nytting av API-et, - kartbilder - og Nominatim. - contributors_title_html: Bidragsytarane vÃ¥re - contributors_intro_html: 'Me har tusenvis av individuelle bidragsytarar. Me - inkluderer óg Ã¥pne datasett frÃ¥ nasjonale karttjenester og andre kjelder, - bland anna frÃ¥:' - contributors_at_html: |- - Austerrike: Inneheld data henta frÃ¥ - Stadt Wien under - CC BY, - Land Vorarlberg og - Land Tirol (under CC-BY AT med tilleg). - contributors_ca_html: |- - Canada: Inneheld data frÃ¥ - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), og StatCan (Geography Division, - Statistics Canada). - contributors_fr_html: |- - Frankrike: Inneheld data henta frÃ¥ - Direction Générale des Impôts. - contributors_nl_html: |- - Nederland: Inneheld © AND-data, 2007 - (www.and.com)
      • -
      • New Zealand: Inneheld data henta frÃ¥ - Land Information New Zealand. Crown Copyright reservert. - contributors_nz_html: |- - New Zealand: Inneheld data henta frÃ¥ - Land Information New Zealand. Crown Copyright reservert. - contributors_za_html: 'Sør-Afrika: Inneheld data frÃ¥ Chief - Directorate: National Geo-Spatial Information, State copyright reserved.' - contributors_gb_html: |- - Storbritannia: Inneheld Ordnance - Survey data © Crown copyright og database-rettar - 2010-12. - contributors_footer_1_html: |2- - For detaljar om desse og andre kjelder som har blitt brukt for Ã¥ forbetra - OpenStreetMap, sjÃ¥ Bidragsytarar - sida pÃ¥ OpenStreetMap Wikien. - contributors_footer_2_html: |2- - Inkludering av data i OpenStreetMap inneber ikkje at den opphavlege - dataleverandøren støttar OpenStreetMap, gjev nokon garanti eller - godtek noko erstatningsansvar. - infringement_title_html: Illegal kopiering - infringement_1_html: |- - OSM-bidragsytarar vert minna pÃ¥ Ã¥ aldri leggje til data frÃ¥ opphavsrettsbeskytta kjelder (t.d. Google Maps eller utskrivne kart) utan - uttrykkeleg løyve frÃ¥ rettighetshavere. - infringement_2_html: "Dersom du trur at kopibeskytta materiale har blitt lagt - inn i OpenStreetMap databasen eller denne sida, venligst henvend deg til vÃ¥r - takedown - \nprosedyre eller direkte til vÃ¥rt online - skjema." - welcome_page: - title: Velkomen! - whats_on_the_map: - title: Kva som finst pÃ¥ kartet - basic_terms: - title: Grunnleggande termar - rules: - title: Reglar! - questions: - title: SpørsmÃ¥l? - start_mapping: Start kartlegging - add_a_note: - title: Ikkje tid til Ã¥ kartleggje sjølv? Legg inn ein merknad. - fixthemap: - title: Rapporter eit problem/Korriger kartet - how_to_help: - title: Korleis hjelpe til - join_the_community: - title: Ver med i fellesskapen - other_concerns: - title: Andre problemstillingar - help_page: - title: FÃ¥ hjelp - welcome: - url: /velkommen - title: Velkomen til OSM - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Nn:Beginners%27_guide - title: Hjelp for nybegynnarar - description: Dugnadsbasert guide for nybegynnarar. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Still spørsmÃ¥l eller finn eit svar pÃ¥ spørsmÃ¥l- og svar-sidene - til OSM. - mailing_lists: - title: E-postlister - forums: - title: Forum - irc: - title: IRC - switch2osm: - title: switch2osm - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: Neste - copyright_html: ©OpenStreetMap
        bidragsytarar - local_knowledge_title: Lokalkunnskap - community_driven_title: Fellesskapsdrive - open_data_title: Opne Data - legal_title: Juridisk - partners_title: Partnarar notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} kommenterte pÃ¥ ein oppføring i dagboka di' @@ -1238,6 +1050,117 @@ nn: delete: deleted: Melding sletta site: + about: + next: Neste + copyright_html: ©OpenStreetMap
        bidragsytarar + local_knowledge_title: Lokalkunnskap + community_driven_title: Fellesskapsdrive + open_data_title: Opne Data + legal_title: Juridisk + partners_title: Partnarar + copyright: + foreign: + title: Om denne omsetjinga + text: I tilfelle konflikt mellom denne omsette sida og %{english_original_link} + har den engelske versjonen presedens + english_link: den engelske originalen + native: + title: Om denne sida + text: Du ser den engelske versjonen av opphavsrettssida. Du kan gÃ¥ tilbake + til den %{native_link} av denne sida, eller du kan stoppe Ã¥ lese om opphavsrett + og %{mapping_link}. + native_link: Nynorsk versjon + mapping_link: start kartlegging + legal_babble: + title_html: Opphavsrett og lisensar + intro_1_html: Data frÃ¥ OpenStreetMap er Ã¥pne data, lisensiert under + Open Data Commons Open + Database License (ODbL). + intro_2_html: "Du er fri til Ã¥ kopiere, distribuere, overføre og tilpasse + dataa vÃ¥re, sÃ¥ lenge du godskriv OpenStreetMap og bidragsytarane\n deira. + Dersom du endrar eller byggjer pÃ¥ dataa vÃ¥re, kan du berre distribuere resultatet + under same lisens. \n Den fullstendige juridiske\n + \ teksten forklarer rettane og ansvaret." + intro_3_html: |- + Kartografien i vÃ¥re kartfliser, og dokumentasjonen vÃ¥r, er lisensiert under Creative + Commons Navngivelse-DelPÃ¥SammeVilkÃ¥r 2.0 (CC BY-SA). + credit_title_html: Korleis kreditere OpenStreetMap + credit_1_html: Me krev at du brukar godskrivinga «© OpenStreetMap-bidragsytarane». + credit_2_html: Du mÃ¥ óg gjere det klart at dataa er tilgjengeleg under Open + Database License, og dersom du brukar kartflisene, at kartografien er lisensiert + under CC BY-SA. Du kan gjere dette ved Ã¥ lenkje til denne + sida. Alternativt, og eit krav om du distribuerer OSM i dataform, kan + du nemne og lenkje til lisensen eller lisensane. I former der lenkjer er + umogleg (t.d. trykte verk), føreslÃ¥r me at du viser lesarane dine til openstreetmap.org + (kanskje ved Ã¥ utvide «OpenStreetMap» til denne fulle adressa), til opendatacommons.org, + og dersom relevant, til creativecommons.org. + credit_3_html: |- + For et navigerbart elektronisk kart, skal kjelda visast i hjørnet av kartet. + Til dømes: + attribution_example: + alt: Døme pÃ¥ korleis ein syner OpenStreetMap som kjelde pÃ¥ ei vevside + title: Døme pÃ¥ kjeldehenvising + more_title_html: Finn ut meir + more_1_html: |- + Les meir om korleis du brukar dataa vÃ¥re, og korleis du krediterer oss, i den juridiske + FAQ-en. + more_2_html: |- + Sjølv om OpenStreetMap er Ã¥pne data kan me ikkje gje eit + gratis kart-API til tredjepartsutviklere. + + SjÃ¥ vÃ¥re retningslinjer for nytting av API-et, + kartbilder + og Nominatim. + contributors_title_html: Bidragsytarane vÃ¥re + contributors_intro_html: 'Me har tusenvis av individuelle bidragsytarar. Me + inkluderer óg Ã¥pne datasett frÃ¥ nasjonale karttjenester og andre kjelder, + bland anna frÃ¥:' + contributors_at_html: |- + Austerrike: Inneheld data henta frÃ¥ + Stadt Wien under + CC BY, + Land Vorarlberg og + Land Tirol (under CC-BY AT med tilleg). + contributors_ca_html: |- + Canada: Inneheld data frÃ¥ + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), og StatCan (Geography Division, + Statistics Canada). + contributors_fr_html: |- + Frankrike: Inneheld data henta frÃ¥ + Direction Générale des Impôts. + contributors_nl_html: |- + Nederland: Inneheld © AND-data, 2007 + (www.and.com)
      • +
      • New Zealand: Inneheld data henta frÃ¥ + Land Information New Zealand. Crown Copyright reservert. + contributors_nz_html: |- + New Zealand: Inneheld data henta frÃ¥ + Land Information New Zealand. Crown Copyright reservert. + contributors_za_html: 'Sør-Afrika: Inneheld data frÃ¥ Chief + Directorate: National Geo-Spatial Information, State copyright reserved.' + contributors_gb_html: |- + Storbritannia: Inneheld Ordnance + Survey data © Crown copyright og database-rettar + 2010-12. + contributors_footer_1_html: |2- + For detaljar om desse og andre kjelder som har blitt brukt for Ã¥ forbetra + OpenStreetMap, sjÃ¥ Bidragsytarar + sida pÃ¥ OpenStreetMap Wikien. + contributors_footer_2_html: |2- + Inkludering av data i OpenStreetMap inneber ikkje at den opphavlege + dataleverandøren støttar OpenStreetMap, gjev nokon garanti eller + godtek noko erstatningsansvar. + infringement_title_html: Illegal kopiering + infringement_1_html: |- + OSM-bidragsytarar vert minna pÃ¥ Ã¥ aldri leggje til data frÃ¥ opphavsrettsbeskytta kjelder (t.d. Google Maps eller utskrivne kart) utan + uttrykkeleg løyve frÃ¥ rettighetshavere. + infringement_2_html: "Dersom du trur at kopibeskytta materiale har blitt lagt + inn i OpenStreetMap databasen eller denne sida, venligst henvend deg til + vÃ¥r takedown + \nprosedyre eller direkte til vÃ¥rt online + skjema." index: js_1: Du har ein nettleser som ikkje støttar JavaScript eller sÃ¥ har du slÃ¥tt av JavaScript. @@ -1269,6 +1192,69 @@ nn: id_not_configured: iD er ikkje konfigurert no_iframe_support: Nettlesaren din støttar ikkje HTML iframes som er naudsynt for denne eigenskapen. + export: + title: Eksporter + area_to_export: OmrÃ¥de som skal eksporterast + manually_select: Vel eit anna omrÃ¥de manuelt + format_to_export: Format for eksport + osm_xml_data: OpenStreetMap XML-data + map_image: Kartblad (viser standard laget) + embeddable_html: HTML som kan byggjast inn + licence: Lisens + export_details: Data frÃ¥ OpenStreetMap er lisensiert under Open + Data Commons Open Database License (ODbL). + too_large: + body: Dette omrÃ¥det er for stort for Ã¥ eksporterast som OpenStreetMap XML-data. + Zoom inn eller vel eit mindre omrÃ¥de. + planet: + title: Planet OSM + other: + title: Andre kjelder + options: Val + format: Format + scale: Skala + max: maks + image_size: Bildestørrelse + zoom: Zoom + add_marker: Legg til ein markør pÃ¥ kartet + latitude: 'Brei:' + longitude: 'Len:' + output: Utdata + paste_html: Lim inn HTML som skal byggjast inn i nettstad + export_button: Eksporter + fixthemap: + title: Rapporter eit problem/Korriger kartet + how_to_help: + title: Korleis hjelpe til + join_the_community: + title: Ver med i fellesskapen + other_concerns: + title: Andre problemstillingar + help: + title: FÃ¥ hjelp + welcome: + url: /velkommen + title: Velkomen til OSM + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Nn:Beginners%27_guide + title: Hjelp for nybegynnarar + description: Dugnadsbasert guide for nybegynnarar. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Still spørsmÃ¥l eller finn eit svar pÃ¥ spørsmÃ¥l- og svar-sidene + til OSM. + mailing_lists: + title: E-postlister + forums: + title: Forum + irc: + title: IRC + switch2osm: + title: switch2osm + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: search_results: Søkjeresultat close: Lukk @@ -1368,6 +1354,19 @@ nn: image: Bilete alt: Alternativ tekst url: URL + welcome: + title: Velkomen! + whats_on_the_map: + title: Kva som finst pÃ¥ kartet + basic_terms: + title: Grunnleggande termar + rules: + title: Reglar! + questions: + title: SpørsmÃ¥l? + start_mapping: Start kartlegging + add_a_note: + title: Ikkje tid til Ã¥ kartleggje sjølv? Legg inn ein merknad. trace: visibility: private: Privat (berre delt som anononyme, usorterte punkt) @@ -1491,7 +1490,7 @@ nn: pÃ¥ nettsiden for Ã¥ lese bidragsytervilkÃ¥rene. Du treng ikkje godta vilkÃ¥ra, men du mÃ¥ lese dei. oauth: - oauthorize: + authorize: title: Autoriser tilgang til kontoen din request_access: Applikasjonen %{app_name} ber om tilgjenge til kontoen din, %{user}. Sjekk om du vil at applikasjonen skal ha følgjande løyve. Du kan @@ -1505,11 +1504,11 @@ nn: allow_write_gpx: laste opp GPS-spor. allow_write_notes: endre notisar. grant_access: Gje tilgang - oauthorize_success: + authorize_success: title: Autorisasjonsførespurnad tillaten allowed: Du har gitt programmet %{app_name} tilgang til kontoen din. verification: Stadfestingskoden er %{code}. - oauthorize_failure: + authorize_failure: title: Mislykka førespurnad om autorisering denied: Du har nekta programmet %{app_name} tilgang til kontoen din. invalid: Autoriseringsnykelen (token) er ikkje gyldig. @@ -1918,7 +1917,7 @@ nn: confirm: Stadfest fail: Kunne ikkje fjerne rollen "%{role}" frÃ¥ brukar "%{name}". Sjekk at nytter og rolle er gyldig. - user_block: + user_blocks: model: non_moderator_update: MÃ¥ vere ein moderator for Ã¥ opprette eller oppdatere ei blokkering. @@ -1979,20 +1978,6 @@ nn: period: one: 1 time other: '%{count} timar' - partial: - show: Vis - edit: Rediger - revoke: Tilbakekall! - confirm: Er du sikker? - display_name: Blokkert brukar - creator_name: Oppretta av - reason: Årsak for blokkering - status: Status - revoker_name: Tilbakekalt av - not_revoked: (ikkje tilbakekalt) - showing_page: Side %{page} - next: Neste » - previous: « Forrige helper: time_future: Sluttar om %{time}. until_login: Aktiv inntil brukaren loggar inn. @@ -2023,8 +2008,22 @@ nn: back: Vis alle blokkeringar revoker: 'Tilbakekaller:' needs_view: Brukaren mÃ¥ logge inn før denne blokkeringa vert fjerna. - note: - description: + block: + not_revoked: (ikkje tilbakekalt) + show: Vis + edit: Rediger + revoke: Tilbakekall! + blocks: + display_name: Blokkert brukar + creator_name: Oppretta av + reason: Årsak for blokkering + status: Status + revoker_name: Tilbakekalt av + showing_page: Side %{page} + next: Neste » + previous: « Forrige + notes: + comment: opened_at_html: Oppretta for %{when} sidan opened_at_by_html: Oppretta for %{when} sidan av %{user} commented_at_html: Oppdatert for %{when} sidan @@ -2189,7 +2188,7 @@ nn: show_address: Vis adresse query_features: Søkjefunksjonar centre_map: Sentrer kartet her - redaction: + redactions: edit: description: Skildring heading: Rediger maskering diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 25ca116aa..0038a2627 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -2,6 +2,8 @@ # Exported from translatewiki.net # Export driver: phpyaml # Author: Cedric31 +# Author: Gasconoc +# Author: Guilhelma # Author: Macofe # Author: OpenStreetMap-oc --- @@ -235,7 +237,7 @@ oc: list: title: Gropes de modificacions title_user: Gropes de modificacions per %{user} - title_friend: Gropes de modificacions per vòstres amics + title_friend: Grops de modificacions peus amics title_nearby: Gropes de modificacions dels utilizaires a proximitat empty: Cap de grop de modificacions pas trobat. empty_area: Pas cap de grop de modificacions dins aquesta zòna. @@ -332,54 +334,6 @@ oc: ago: i a %{ago} newer_comments: Comentaris mai recents older_comments: Comentaris mai ancians - export: - title: Exportar - start: - area_to_export: Zòna d'exportar - manually_select: Seleccionar manualament una zòna diferenta - format_to_export: Format d'exportar - osm_xml_data: Donadas XML d'OpenStreetMap - map_image: Imatge de mapa (aficha un calc normal) - embeddable_html: HTML incorporable. - licence: Licéncia - export_details: Las donadas d’OpenStreetMap son publicadas jos la licéncia - Open Data Commons ­– Basa de donadas Dobèrta (ODbL). - too_large: - advice: 'Se l’expòrt çaisús fracassa, envisatjatz l’utilizacion d’una de las - fonts listadas çaijòs :' - body: 'Aquesta zòna es tròp vasta per èsser exportada coma donadas XML OpenStreetMap. - Zoomatz o seleccionatz una zòna mai pichona, o utilizatz una de las fonts - seguentas pel telecargament de donadas massivas :' - planet: - title: Planeta OSM - description: Còpias actualizadas regularament de la basa de donadas completa - d'OpenStreetMap - overpass: - title: API palanca - description: Telecargar aqueste quadre englobant dempuèi un miralh de la - basa de donadas d'OpenStreetMap - geofabrik: - title: Telecargaments de Geofabrik - description: Extraccions regularament mesas a jorn de continents, païses - e vilas seleccionadas - metro: - title: Extraccions de Metro - description: Extraccions de las principalas vilas del mond e de lors environs - other: - title: Autras fonts - description: Fonts suplementàrias listadas dins lo wiki d'OpenStreetMap - options: Opcions - format: Format - scale: Escala - max: max - image_size: Talha de l'imatge - zoom: Zoom - add_marker: Apondre un marcador a la mapa - latitude: 'Lat :' - longitude: 'Lon :' - output: Sortida - paste_html: Pegatz lo còdi HTML per incorporar dins un site web. - export_button: Exportar geocoder: search: title: @@ -1026,181 +980,6 @@ oc: text: Far un don learn_more: Ne saber mai more: Mai - license_page: - foreign: - title: A prepaus d'aquesta traduccion - text: En cas de conflicte entre aquesta pagina e la pagina %{english_original_link}, - la version anglesa prima - english_link: original en anglés - native: - title: A prepaus d'aquesta pagina - text: Legissètz la version anglesa de la pagina de copyright. Podètz tornar - a la %{native_link} d'aquesta pagina o arrestar de legir aquesta pagina e - %{mapping_link}. - native_link: version occitana - mapping_link: començar a contribuir - legal_babble: - title_html: Copyright e Licéncia - intro_1_html: |- - OpenStreetMap® es un ensemble de donadas dobèrtas, disponiblas jos licéncia liura Open Data Commons Open Database License (ODbL) alprèp de la Fondacion OpenStreetMap (OSMF). - intro_2_html: |2- - Sètz liure de copiar, distribuir, transmetre e adaptar nòstras donadas, - a condicion que creditetz OpenStreetMap e sos - contributors. Se modificatz o utilizatz nòstras donadas dins d’autras òbras derivadas, - las podètz distribuir sonque jos la meteissa licéncia. Lo - tèxte - legal complet detalha vòstres dreits e responsabilitats. - intro_3_html: Nòstres carrèus de rendut cartografics, e tanben de nòstra documentacion, - son disponibles jos la licéncia Creative - Commons paternitat – partiment a l’identic 2.0 (CC-BY-SA). - credit_title_html: Cossí creditar OpenStreetMap - credit_1_html: Demandam que vòstre crèdit compòrta la mencion « © los contributors - d’OpenStreetMap ». - credit_3_html: |- - Per una mapa electronica navigabla, lo crèdit deuriá aparéisser dins lo canton de la mapa. - Per exemple : - attribution_example: - alt: Exemple d'atribucion OpenStreetMap sus una pagina internet - title: Exemple d'atribucion - more_title_html: Per trobar mai d’informacions - more_1_html: |- - Per obténer mai d’informacions sus cossí reütilizar nòstras donadas e nos creditar, legissètz la FAQ legala. - contributors_title_html: Nòstres contributors - contributors_at_html: 'Áustria : conten de donadas sus la vila de Viena (jos licéncia CC - BY), la region - de Vorarlberg e la region de Tiròl (jos licéncia CC - BY AT amb amendaments).' - contributors_ca_html: 'Canadà : conten de donadas de GeoBase®, - GeoGratis (© Departament de las Ressorsas naturalas de Canadà), CanVec - (© Departament de las Ressorsas naturalas de Canadà) e StatCan (Division - Geografia, Estatisticas de Canadà).' - contributors_fi_html: 'Finlàndia : conten de donadas de la - Basa de donadas topograficas de l’Inspeccion nacionala del territòri de Finlàndia - e d’autres ensembles de donadas, jos licéncia - NLSFI.' - contributors_fr_html: |- - França : conten de donadas de la - Direccion generala dels impòts. - contributors_nl_html: 'Païses Basses : conten de donadas © - AND, 2007 (www.and.com).' - contributors_nz_html: 'Nòva Zelanda : conten de donadas que - provenon del Land Information New Zealand. Copyright de la Corona - reservat.' - contributors_si_html: 'Eslovènia : conten de donadas de l’Autoritat de Planificacion e de Cartografia - e del Ministèri de l’Agricultura, del - Bòsc e de l’Alimentacion (informacion publica d''Eslovènia).' - contributors_za_html: |- - Africa del Sud : conten de donadas eissidas de la Direccion principala de las - Informacions Geoespacialas Nacionalas, copyright de l’Estat reservat. - contributors_gb_html: 'Reialme Unit : conten de donadas eissidas - de l’Ordonància Survey © 2010-2012 Dreits d’autors e de la basa de - donadas de la Corona.' - infringement_title_html: Violacion dels dreits d'autor - trademarks_title_html: Marcas - welcome_page: - title: Benvenguda ! - whats_on_the_map: - title: Çò qu'i a sus la mapa - on_html: |- - OpenStreetMap servís a cartografiar de causas a l'encòp vertadièras e actualas - - inclutz de milions de bastiments, de rotas, e d'autres detalhs de luòcs. Podètz cartografiar quin element vertadièr del mond que que vos interèsse. - basic_terms: - title: Vocabulari de basa de cartografia - paragraph_1_html: OpenStreetMap a son pròpri girgon. Aquí qualques mots claus - que vos seràn utiles. - editor_html: Un editor es un programa o site web que vos permet - d'editar la mapa. - node_html: Un nosèl es un punt sus la mapa, coma un restaurant - o un arbre individual. - way_html: |- - Un camintag es una informacion a prepaus d'un nosèl o d'un camin, coma - lo nom d'un restaurant o la velocitat limita d'una carrièra. - rules: - title: Règlas ! - questions: - title: De questions ? - paragraph_1_html: |- - OpenStreetMap a mantuna ressorsas per aprene lo projècte, per pausar e respondre a de questions, e per discutir en collaboracion amb d’autres e documentar los subjèctes de cartografia. - Trobatz d’ajuda aicí. - start_mapping: Començar de cartografiar - add_a_note: - title: Pas lo temps d'editar ? Apodètz una nòta ! - fixthemap: - title: Senhalar un problèma / Corregir la mapa - how_to_help: - title: Cossí ajudar - join_the_community: - title: Rejónher la comunautat - other_concerns: - title: Autras preocupacions - explanation_html: "Se sètz preocupat pel biais que nòstras donadas son utilizadas - o sus lor contengut, consultatz nòstra\npagina de dreit - d’autor per d'informacions mai legalas, o contactar lo \ngrop - de trabalh OSMF apropriat." - help_page: - title: Obténer d’ajuda - introduction: OpenStreetMap a mantuna ressorsas per aprene lo projècte, per pausar - e respondre a de questions, e respondre a de questions, e per discutir en collaboracion - amb d’autres e documentar los subjèctes de cartografia. - welcome: - url: /welcome - title: Benvenguda a OSM - description: Començar amb aqueste guida rapid que cobrís las basas d'OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/FR:Guide_du_d%C3%A9butant - title: Guida per debutants - description: Guida pels debutants mantengut per la comunautat. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Pausar una question o cercar de responsas sul site questions-e-responsas - d'OSM. - mailing_lists: - title: Listas de difusion - description: Pausar una question o discutir de questions interessantas sus un - larg ventalh de tematicas o de listas de difusion regionalas. - forums: - title: Forums - description: De questions e de discussions per los que preferisson una interfàcia - jos la forma de tablèu d’afichatge. - irc: - title: IRC - description: Discussion interactiva dins de fòrça lengas diferentas e sus fòrça - subjèctes. - switch2osm: - title: switch2osm - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Percorrètz lo wiki per la documentacion aprigondida d’OSM - about_page: - next: Seguent - copyright_html: ©Contributors
        d’OpenStreetMap - used_by: '%{name} provesís de donadas cartograficas sus de milierats de sites - web, aplicacions mobilas e aparelhs' - lede_text: OpenStreetMap es bastit per una comunautat de cartografes benevòls - que contribuisson e mantenon las donadas de las rotas, caminòls, cafès, estacions - ferroviàrias e plan mai encara, pertot dins lo mond. - local_knowledge_title: Coneissença locala - community_driven_title: Menat per la comunautat - community_driven_html: "La comunautat d’OpenStreetMap es divèrsa, passionada e - grossís cada jorn. Nòstres contributors incluisson de cartografes entosiastes, - de professionals del GIS, d'ingenhiaires que menan los servidors OSM, d'umanitaris - que cartografian las zònas devastadas per una catastròfa e plan mai encara.\nPer - ne saber mai sus la comunautat, consultatz los \nannuaris - d’utilizaires, \nlos blogs comunautaris - e lo site web de la Fondacion OSM." - open_data_title: Donadas liuras - legal_title: Juridic - partners_title: Partenaris notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} a postat un comentari sus un article de jornal' @@ -1384,6 +1163,103 @@ oc: delete: deleted: Messatge suprimit site: + about: + next: Seguent + copyright_html: ©Contributors
        d’OpenStreetMap + used_by: '%{name} provesís de donadas cartograficas sus de milierats de sites + web, aplicacions mobilas e aparelhs' + lede_text: OpenStreetMap es bastit per una comunautat de cartografes benevòls + que contribuisson e mantenon las donadas de las rotas, caminòls, cafès, estacions + ferroviàrias e plan mai encara, pertot dins lo mond. + local_knowledge_title: Coneissença locala + community_driven_title: Menat per la comunautat + community_driven_html: "La comunautat d’OpenStreetMap es divèrsa, passionada + e grossís cada jorn. Nòstres contributors incluisson de cartografes entosiastes, + de professionals del GIS, d'ingenhiaires que menan los servidors OSM, d'umanitaris + que cartografian las zònas devastadas per una catastròfa e plan mai encara.\nPer + ne saber mai sus la comunautat, consultatz los \nannuaris + d’utilizaires, \nlos blogs + comunautaris e lo site web de la Fondacion + OSM." + open_data_title: Donadas liuras + legal_title: Juridic + partners_title: Partenaris + copyright: + foreign: + title: A prepaus d'aquesta traduccion + text: En cas de conflicte entre aquesta pagina e la pagina %{english_original_link}, + la version anglesa prima + english_link: original en anglés + native: + title: A prepaus d'aquesta pagina + text: Legissètz la version anglesa de la pagina de copyright. Podètz tornar + a la %{native_link} d'aquesta pagina o arrestar de legir aquesta pagina + e %{mapping_link}. + native_link: version occitana + mapping_link: començar a contribuir + legal_babble: + title_html: Copyright e Licéncia + intro_1_html: |- + OpenStreetMap® es un ensemble de donadas dobèrtas, disponiblas jos licéncia liura Open Data Commons Open Database License (ODbL) alprèp de la Fondacion OpenStreetMap (OSMF). + intro_2_html: |2- + Sètz liure de copiar, distribuir, transmetre e adaptar nòstras donadas, + a condicion que creditetz OpenStreetMap e sos + contributors. Se modificatz o utilizatz nòstras donadas dins d’autras òbras derivadas, + las podètz distribuir sonque jos la meteissa licéncia. Lo + tèxte + legal complet detalha vòstres dreits e responsabilitats. + intro_3_html: Nòstres carrèus de rendut cartografics, e tanben de nòstra documentacion, + son disponibles jos la licéncia Creative + Commons paternitat – partiment a l’identic 2.0 (CC-BY-SA). + credit_title_html: Cossí creditar OpenStreetMap + credit_1_html: Demandam que vòstre crèdit compòrta la mencion « © los contributors + d’OpenStreetMap ». + credit_3_html: |- + Per una mapa electronica navigabla, lo crèdit deuriá aparéisser dins lo canton de la mapa. + Per exemple : + attribution_example: + alt: Exemple d'atribucion OpenStreetMap sus una pagina internet + title: Exemple d'atribucion + more_title_html: Per trobar mai d’informacions + more_1_html: |- + Per obténer mai d’informacions sus cossí reütilizar nòstras donadas e nos creditar, legissètz la FAQ legala. + contributors_title_html: Nòstres contributors + contributors_at_html: 'Áustria : conten de donadas sus la + vila de Viena (jos licéncia CC + BY), la region + de Vorarlberg e la region de Tiròl (jos licéncia CC + BY AT amb amendaments).' + contributors_ca_html: 'Canadà : conten de donadas de GeoBase®, + GeoGratis (© Departament de las Ressorsas naturalas de Canadà), + CanVec (© Departament de las Ressorsas naturalas de Canadà) e StatCan + (Division Geografia, Estatisticas de Canadà).' + contributors_fi_html: 'Finlàndia : conten de donadas de la + Basa de donadas topograficas de l’Inspeccion nacionala del territòri de + Finlàndia e d’autres ensembles de donadas, jos licéncia + NLSFI.' + contributors_fr_html: |- + França : conten de donadas de la + Direccion generala dels impòts. + contributors_nl_html: 'Païses Basses : conten de donadas + © AND, 2007 (www.and.com).' + contributors_nz_html: 'Nòva Zelanda : conten de donadas que + provenon del Land Information New Zealand. Copyright de la Corona + reservat.' + contributors_si_html: 'Eslovènia : conten de donadas de l’Autoritat de Planificacion e de Cartografia + e del Ministèri de l’Agricultura, del + Bòsc e de l’Alimentacion (informacion publica d''Eslovènia).' + contributors_za_html: |- + Africa del Sud : conten de donadas eissidas de la Direccion principala de las + Informacions Geoespacialas Nacionalas, copyright de l’Estat reservat. + contributors_gb_html: 'Reialme Unit : conten de donadas eissidas + de l’Ordonància Survey © 2010-2012 Dreits d’autors e de la basa + de donadas de la Corona.' + infringement_title_html: Violacion dels dreits d'autor + trademarks_title_html: Marcas index: js_1: JavaScript es pas pres en carga pel navigador qu'utilizatz, o alara l’avètz desactivat. @@ -1400,6 +1276,101 @@ oc: potlatch2_unsaved_changes: Avètz de modificacions pas salvadas. (Per salvar vòstras modificacions dins Potlach2, clicar sus "enregistrar".) id_not_configured: iD es pas estat configurat + export: + title: Exportar + area_to_export: Zòna d'exportar + manually_select: Seleccionar manualament una zòna diferenta + format_to_export: Format d'exportar + osm_xml_data: Donadas XML d'OpenStreetMap + map_image: Imatge de mapa (aficha un calc normal) + embeddable_html: HTML incorporable. + licence: Licéncia + export_details: Las donadas d’OpenStreetMap son publicadas jos la licéncia + Open Data Commons ­– Basa de donadas Dobèrta (ODbL). + too_large: + advice: 'Se l’expòrt çaisús fracassa, envisatjatz l’utilizacion d’una de las + fonts listadas çaijòs :' + body: 'Aquesta zòna es tròp vasta per èsser exportada coma donadas XML OpenStreetMap. + Zoomatz o seleccionatz una zòna mai pichona, o utilizatz una de las fonts + seguentas pel telecargament de donadas massivas :' + planet: + title: Planeta OSM + description: Còpias actualizadas regularament de la basa de donadas completa + d'OpenStreetMap + overpass: + title: API palanca + description: Telecargar aqueste quadre englobant dempuèi un miralh de la + basa de donadas d'OpenStreetMap + geofabrik: + title: Telecargaments de Geofabrik + description: Extraccions regularament mesas a jorn de continents, païses + e vilas seleccionadas + metro: + title: Extraccions de Metro + description: Extraccions de las principalas vilas del mond e de lors environs + other: + title: Autras fonts + description: Fonts suplementàrias listadas dins lo wiki d'OpenStreetMap + options: Opcions + format: Format + scale: Escala + max: max + image_size: Talha de l'imatge + zoom: Zoom + add_marker: Apondre un marcador a la mapa + latitude: 'Lat :' + longitude: 'Lon :' + output: Sortida + paste_html: Pegatz lo còdi HTML per incorporar dins un site web. + export_button: Exportar + fixthemap: + title: Senhalar un problèma / Corregir la mapa + how_to_help: + title: Cossí ajudar + join_the_community: + title: Rejónher la comunautat + other_concerns: + title: Autras preocupacions + explanation_html: "Se sètz preocupat pel biais que nòstras donadas son utilizadas + o sus lor contengut, consultatz nòstra\npagina de dreit + d’autor per d'informacions mai legalas, o contactar lo \ngrop + de trabalh OSMF apropriat." + help: + title: Obténer d’ajuda + introduction: OpenStreetMap a mantuna ressorsas per aprene lo projècte, per + pausar e respondre a de questions, e respondre a de questions, e per discutir + en collaboracion amb d’autres e documentar los subjèctes de cartografia. + welcome: + url: /welcome + title: Benvenguda a OSM + description: Començar amb aqueste guida rapid que cobrís las basas d'OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/FR:Guide_du_d%C3%A9butant + title: Guida per debutants + description: Guida pels debutants mantengut per la comunautat. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Pausar una question o cercar de responsas sul site questions-e-responsas + d'OSM. + mailing_lists: + title: Listas de difusion + description: Pausar una question o discutir de questions interessantas sus + un larg ventalh de tematicas o de listas de difusion regionalas. + forums: + title: Forums + description: De questions e de discussions per los que preferisson una interfàcia + jos la forma de tablèu d’afichatge. + irc: + title: IRC + description: Discussion interactiva dins de fòrça lengas diferentas e sus + fòrça subjèctes. + switch2osm: + title: switch2osm + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Percorrètz lo wiki per la documentacion aprigondida d’OSM sidebar: search_results: Resultats de la recèrca close: Tampar @@ -1500,6 +1471,37 @@ oc: image: Imatge alt: Tèxte Alternatiu url: URL + welcome: + title: Benvenguda ! + whats_on_the_map: + title: Çò qu'i a sus la mapa + on_html: |- + OpenStreetMap servís a cartografiar de causas a l'encòp vertadièras e actualas + - inclutz de milions de bastiments, de rotas, e d'autres detalhs de luòcs. Podètz cartografiar quin element vertadièr del mond que que vos interèsse. + basic_terms: + title: Vocabulari de basa de cartografia + paragraph_1_html: OpenStreetMap a son pròpri girgon. Aquí qualques mots claus + que vos seràn utiles. + editor_html: Un editor es un programa o site web que vos + permet d'editar la mapa. + node_html: Un nosèl es un punt sus la mapa, coma un restaurant + o un arbre individual. + way_html: |- + Un camintag es una informacion a prepaus d'un nosèl o d'un camin, coma + lo nom d'un restaurant o la velocitat limita d'una carrièra. + rules: + title: Règlas ! + questions: + title: De questions ? + paragraph_1_html: |- + OpenStreetMap a mantuna ressorsas per aprene lo projècte, per pausar e respondre a de questions, e per discutir en collaboracion amb d’autres e documentar los subjèctes de cartografia. + Trobatz d’ajuda aicí. + start_mapping: Començar de cartografiar + add_a_note: + title: Pas lo temps d'editar ? Apodètz una nòta ! trace: visibility: private: Privat (partejat anonimament, punts pas ordenats) @@ -1539,6 +1541,7 @@ oc: trace_header: upload_trace: Mandar una traça see_all_traces: Veire totas las traças + see_my_traces: véder las mias traças trace_optionals: tags: Balisas view: @@ -1582,6 +1585,7 @@ oc: map: mapa list: public_traces: Traças GPS publicas + my_traces: las mias traças GPS public_traces_from: Traças GPS publicas de %{user} description: Percórrer las traças GPS telecargadas recentament tagged_with: ' balisat amb %{tags}' @@ -1608,7 +1612,7 @@ oc: require_moderator: not_a_moderator: Vos cal èsser moderator per efectuar aquesta accion. oauth: - oauthorize: + authorize: title: Autorizar l’accès a vòstre compte allow_to: 'Autorizar l''aplicacion client a :' allow_read_prefs: legir vòstras preferéncias d'utilizaire. @@ -1620,11 +1624,11 @@ oc: allow_write_gpx: mandar de traças GPS. allow_write_notes: modificar las nòtas. grant_access: Acordar l’accès - oauthorize_success: + authorize_success: title: La demanda d’autorizacion es estada acceptada allowed: Avètz acordat a l’aplicacion %{app_name} l’accès a vòstre compte. verification: Lo còdi de verificacion es %{code}. - oauthorize_failure: + authorize_failure: title: La demanda d’autorizacion a fracassat denied: Avètz refusat a l’aplicacion %{app_name} l’accès a vòstre compte. invalid: Lo geton d’autorizacion es invalid. @@ -1832,6 +1836,7 @@ oc: description: Descripcion user location: Emplaçament de l'utilizaire settings_link_text: opcions + my friends: los mens amics no friends: Avètz pas encara apondut cap d'amic km away: '%{count} km' m away: distant de %{count} m @@ -1984,7 +1989,7 @@ oc: title: Confirmar la revocacion del ròtle heading: Confirmar la revocacion del ròtle confirm: Confirmar - user_block: + user_blocks: model: non_moderator_update: Vos cal èsser moderator per crear o modificar un blocatge. non_moderator_revoke: Vos cal èsser moderator per revocar un blocatge. @@ -2038,20 +2043,6 @@ oc: period: one: 1 ora other: '%{count} oras' - partial: - show: Afichar - edit: Modificar - revoke: Revocar ! - confirm: Sètz segur ? - display_name: Utilizaire blocat - creator_name: Creator - reason: Motiu del blocatge - status: Estatut - revoker_name: Revocat per - not_revoked: (pas revocat) - showing_page: Pagina %{page} - next: Seguent » - previous: « Precedent helper: time_future: Acaba a %{time}. until_login: Actiu fins al moment que l'utilizaire se connectarà. @@ -2080,8 +2071,22 @@ oc: back: Afichar totes los blocatges revoker: 'Revocador :' needs_view: L'utilizaire se deu connectar abans qu'aqueste blocatge siá suprimit. - note: - description: + block: + not_revoked: (pas revocat) + show: Afichar + edit: Modificar + revoke: Revocar ! + blocks: + display_name: Utilizaire blocat + creator_name: Creator + reason: Motiu del blocatge + status: Estatut + revoker_name: Revocat per + showing_page: Pagina %{page} + next: Seguent » + previous: « Precedent + notes: + comment: opened_at_html: Creat fa %{when} opened_at_by_html: Creat fa %{when} per %{user} commented_at_html: Mes a jorn fa %{when} @@ -2203,7 +2208,7 @@ oc: distance: Distància errors: no_route: Impossible de trobar una rota entre aqueles dos luòcs. - no_place: O planhèm, impossible de trobar aqueste luòc. + no_place: O planhèm, impossible de trobar '%{place}'. instructions: continue_without_exit: Contunhar sus %{name} slight_right_without_exit: Viratz leugièrament a dreita sus %{name} @@ -2225,6 +2230,7 @@ oc: onramp_right_with_name_directions: Virar a dreita sus la via de racòrdament sus %{name}, cap a %{directions} onramp_right_without_directions: Virar a dreita sus la via de racòrdament + onramp_right: Tornar a dreita sus la via de racòrdament. endofroad_right_without_exit: A la fin de la rota, virar a dreita sus %{name} merge_right_without_exit: Rejónher a dreita sus %{name} fork_right_without_exit: A la bifurcacion, virar a dreita sus %{name} @@ -2251,6 +2257,7 @@ oc: onramp_left_with_name_directions: Virar a esquèrra sus la via de racòrdament sus %{name}, cap a %{directions} onramp_left_without_directions: Virar a esquèrra sus la via de racòrdament + onramp_left: Virar a esquèrra sus la via de racòrdament endofroad_left_without_exit: A la fin de la rota, virar a esquèrra cap a %{name} merge_left_without_exit: Rejónher a esquèrra sus %{name} fork_left_without_exit: A la bifurcacion, virar a esquèrra sus %{name} @@ -2288,7 +2295,7 @@ oc: show_address: Afichar l’adreça query_features: Requèsta sus las foncionalitats centre_map: Centrar la mapa aicí - redaction: + redactions: edit: description: Descripcion heading: Modificar la redaccion diff --git a/config/locales/pa.yml b/config/locales/pa.yml index 1d9237183..871a41d51 100644 --- a/config/locales/pa.yml +++ b/config/locales/pa.yml @@ -199,27 +199,6 @@ pa: ago: '%{ago} ਪਹਿਲਾਂ' newer_comments: ਹੋਰ ਨਵੀਆਂ ਟਿੱਪਣੀਆਂ older_comments: ਹੋਰ ਪੁਰਾਣੀਆਂ ਟਿੱਪਣੀਆਂ - export: - title: ਬਰਾਮਦ - start: - area_to_export: ਬਰਾਮਦ ਵਾਸਤੇ ਇਲਾਕਾ - manually_select: ਆਪਣੇ ਆਪ ਇੱਕ ਵੱਖਰਾ ਖੇਤਰ ਚੁਣੋ - format_to_export: ਬਰਾਮਦ ਵਾਸਤੇ ਰੂਪ - licence: ਲਾਇਸੰਸ - too_large: - other: - title: ਹੋਰ ਸਰੋਤ - options: ਚੋਣਾਂ - format: ਰੂਪ-ਰੇਖਾ - scale: ਪੈਮਾਨਾ - max: ਵੱਧ ਤੋਂ ਵੱਧ - image_size: ਤਸਵੀਰ ਦਾ ਅਕਾਰ - zoom: ਜ਼ੂਮ ਕਰੋ - add_marker: ਨਕਸ਼ੇ 'ਤੇ ਕੋਈ ਨਿਸ਼ਾਨਦੇਹੀ ਜੋੜੋ - latitude: 'ਅਕਸ਼ਾਂਸ਼:' - longitude: 'ਰੇਖਾਂਸ਼:' - output: ਆਊਟਪੁਟ - export_button: ਬਰਾਮਦ geocoder: search_osm_nominatim: prefix: @@ -713,61 +692,6 @@ pa: text: ਦਾਨ ਦਿਉ learn_more: ਹੋਰ ਜਾਣੋ more: ਹੋਰ - license_page: - foreign: - title: ਇਸ ਤਰਜਮੇ ਬਾਰੇ - english_link: ਮੂਲ ਅੰਗਰੇਜ਼ੀ - native: - title: ਇਸ ਵਰਕੇ ਬਾਰੇ - native_link: ਪੰਜਾਬੀ ਵਰਜਨ - mapping_link: ਨਕਸ਼ਾਬੰਦੀ ਸ਼ੁਰੂ ਕਰੋ - legal_babble: - title_html: ਨਕਲ-ਹੱਕ ਤੇ ਲਾਇਸੰਸ - more_title_html: ਹੋਰ ਜਾਣਕਾਰੀ ਲੱਭਣ ਵਾਸਤੇ - contributors_title_html: ਸਾਡੇ ਯੋਗਦਾਨੀ - welcome_page: - title: ਜੀ ਆਇਆਂ ਨੂੰ! - whats_on_the_map: - title: ਨਕਸ਼ੇ ਉੱਤੇ ਕੀ ਹੈ - rules: - title: ਨਿਯਮ! - questions: - title: ਕੋਈ ਸੁਆਲ? - start_mapping: ਨਕਸ਼ਾਬੰਦੀ ਸ਼ੁਰੂ ਕਰੋ - add_a_note: - title: ਸੋਧਣ ਦੀ ਵਿਹਲ ਨਹੀਂ? ਕੋਈ ਨੋਟ ਜੋੜੋ! - fixthemap: - title: ਕਿਸੇ ਔਕੜ ਦੀ ਇਤਲਾਹ ਦਿਉ / ਨਕਸ਼ਾ ਸਹੀ ਕਰੋ - how_to_help: - title: ਮਦਦ ਕਿਵੇਂ ਕਰਨੀ ਹੈ - join_the_community: - title: ਭਾਈਚਾਰੇ ਨਾਲ਼ ਜੁੜੋ - other_concerns: - title: ਹੋਰ ਫ਼ਿਕਰ - help_page: - title: ਮਦਦ ਲੈਣੀ - welcome: - url: /ਜੀ ਆਇਆਂ ਨੂੰ - title: ਓ.ਐੱਸ.ਐੱਮ. 'ਤੇ ਜੀ ਆਇਆਂ ਨੂੰ - beginners_guide: - title: ਸ਼ੁਰੂਆਤੀ ਗਾਈਡ - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - forums: - title: ਮੰਚ - irc: - title: ਆਈ.ਆਰ.ਸੀ - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: ਅੱਗੇ - copyright_html: ©à¨“ਪਨ-ਸਟਰੀਟ-ਮੈਪ
        ਯੋਗਦਾਨੀ - local_knowledge_title: ਸਥਾਨੀ ਗਿਆਨ - open_data_title: ਓਪਨ ਡਾਟਾ - legal_title: ਕਾਨੂੰਨੀ - partners_title: ਸਾਂਝੀਦਾਰ notifier: gpx_notification: greeting: ਸਤਿ ਸ੍ਰੀ ਅਕਾਲ, @@ -830,6 +754,25 @@ pa: delete: deleted: ਸੁਨੇਹਾ ਮਿਟਾਇਆ ਗਿਆ site: + about: + next: ਅੱਗੇ + copyright_html: ©à¨“ਪਨ-ਸਟਰੀਟ-ਮੈਪ
        ਯੋਗਦਾਨੀ + local_knowledge_title: ਸਥਾਨੀ ਗਿਆਨ + open_data_title: ਓਪਨ ਡਾਟਾ + legal_title: ਕਾਨੂੰਨੀ + partners_title: ਸਾਂਝੀਦਾਰ + copyright: + foreign: + title: ਇਸ ਤਰਜਮੇ ਬਾਰੇ + english_link: ਮੂਲ ਅੰਗਰੇਜ਼ੀ + native: + title: ਇਸ ਵਰਕੇ ਬਾਰੇ + native_link: ਪੰਜਾਬੀ ਵਰਜਨ + mapping_link: ਨਕਸ਼ਾਬੰਦੀ ਸ਼ੁਰੂ ਕਰੋ + legal_babble: + title_html: ਨਕਲ-ਹੱਕ ਤੇ ਲਾਇਸੰਸ + more_title_html: ਹੋਰ ਜਾਣਕਾਰੀ ਲੱਭਣ ਵਾਸਤੇ + contributors_title_html: ਸਾਡੇ ਯੋਗਦਾਨੀ index: permalink: ਪੱਕੀ ਕੜੀ shortlink: ਛੋਟੀ ਕੜੀ @@ -837,6 +780,51 @@ pa: edit: user_page_link: ਵਰਤੋਂਕਾਰ ਵਰਕਾ anon_edits_link_text: ਪਤਾ ਕਰੋ ਕਿ ਮਾਮਲਾ ਇਸ ਤਰ੍ਹਾਂ ਕਿਉਂ ਹੈ। + export: + title: ਬਰਾਮਦ + area_to_export: ਬਰਾਮਦ ਵਾਸਤੇ ਇਲਾਕਾ + manually_select: ਆਪਣੇ ਆਪ ਇੱਕ ਵੱਖਰਾ ਖੇਤਰ ਚੁਣੋ + format_to_export: ਬਰਾਮਦ ਵਾਸਤੇ ਰੂਪ + licence: ਲਾਇਸੰਸ + too_large: + other: + title: ਹੋਰ ਸਰੋਤ + options: ਚੋਣਾਂ + format: ਰੂਪ-ਰੇਖਾ + scale: ਪੈਮਾਨਾ + max: ਵੱਧ ਤੋਂ ਵੱਧ + image_size: ਤਸਵੀਰ ਦਾ ਅਕਾਰ + zoom: ਜ਼ੂਮ ਕਰੋ + add_marker: ਨਕਸ਼ੇ 'ਤੇ ਕੋਈ ਨਿਸ਼ਾਨਦੇਹੀ ਜੋੜੋ + latitude: 'ਅਕਸ਼ਾਂਸ਼:' + longitude: 'ਰੇਖਾਂਸ਼:' + output: ਆਊਟਪੁਟ + export_button: ਬਰਾਮਦ + fixthemap: + title: ਕਿਸੇ ਔਕੜ ਦੀ ਇਤਲਾਹ ਦਿਉ / ਨਕਸ਼ਾ ਸਹੀ ਕਰੋ + how_to_help: + title: ਮਦਦ ਕਿਵੇਂ ਕਰਨੀ ਹੈ + join_the_community: + title: ਭਾਈਚਾਰੇ ਨਾਲ਼ ਜੁੜੋ + other_concerns: + title: ਹੋਰ ਫ਼ਿਕਰ + help: + title: ਮਦਦ ਲੈਣੀ + welcome: + url: /ਜੀ ਆਇਆਂ ਨੂੰ + title: ਓ.ਐੱਸ.ਐੱਮ. 'ਤੇ ਜੀ ਆਇਆਂ ਨੂੰ + beginners_guide: + title: ਸ਼ੁਰੂਆਤੀ ਗਾਈਡ + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + forums: + title: ਮੰਚ + irc: + title: ਆਈ.ਆਰ.ਸੀ + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: search_results: ਖੋਜ ਨਤੀਜੇ close: ਬੰਦ ਕਰੋ @@ -917,6 +905,17 @@ pa: image: ਤਸਵੀਰ alt: ਵਿਕਲਪਿਕ ਲਿਖਤ url: ਯੂ.ਆਰ.ਐੱਲ. + welcome: + title: ਜੀ ਆਇਆਂ ਨੂੰ! + whats_on_the_map: + title: ਨਕਸ਼ੇ ਉੱਤੇ ਕੀ ਹੈ + rules: + title: ਨਿਯਮ! + questions: + title: ਕੋਈ ਸੁਆਲ? + start_mapping: ਨਕਸ਼ਾਬੰਦੀ ਸ਼ੁਰੂ ਕਰੋ + add_a_note: + title: ਸੋਧਣ ਦੀ ਵਿਹਲ ਨਹੀਂ? ਕੋਈ ਨੋਟ ਜੋੜੋ! trace: edit: filename: 'ਫ਼ਾਈਲ ਦਾ ਨਾਂ:' @@ -984,7 +983,7 @@ pa: list: tagged_with: '%{tags} ਨਾਲ਼ ਨਿਸ਼ਾਨਦੇਹ' oauth: - oauthorize: + authorize: allow_write_notes: ਟਿੱਪਣੀਆੰ ਸੋਧੋ। oauth_clients: new: @@ -1180,7 +1179,7 @@ pa: confirm: ਤਸਦੀਕ ਕਰੋ revoke: confirm: ਤਸਦੀਕ ਕਰੋ - user_block: + user_blocks: not_found: back: ਤਤਕਰੇ ਵੱਲ ਵਾਪਸ new: @@ -1197,26 +1196,26 @@ pa: period: one: ੧ ਘੰਟਾ other: '%{count} ਘੰਟੇ' - partial: + show: + status: ਹਾਲਾਤ show: ਵਿਖਾਉ edit: ਸੋਧੋ - revoke: ਪਰਤਾਉ! confirm: ਕੀ ਤੁਹਾਨੂੰ ਯਕੀਨ ਹੈ? + reason: 'ਰੋਕ ਦਾ ਕਾਰਨ:' + back: ਸਾਰੀਆਂ ਰੋਕਾਂ ਵੇਖੋ + revoker: 'ਪਰਤਾਉਣ ਵਾਲ਼ਾ:' + block: + show: ਵਿਖਾਉ + edit: ਸੋਧੋ + revoke: ਪਰਤਾਉ! + blocks: display_name: ਰੋਕਿਆ ਵਰਤੋਂਕਾਰ creator_name: ਸਿਰਜਣਹਾਰ reason: ਰੋਕ ਦਾ ਕਾਰਨ status: ਦਰਜਾ next: ਅਗਲਾ » previous: « ਪਿਛਲਾ - show: - status: ਹਾਲਾਤ - show: ਵਿਖਾਉ - edit: ਸੋਧੋ - confirm: ਕੀ ਤੁਹਾਨੂੰ ਯਕੀਨ ਹੈ? - reason: 'ਰੋਕ ਦਾ ਕਾਰਨ:' - back: ਸਾਰੀਆਂ ਰੋਕਾਂ ਵੇਖੋ - revoker: 'ਪਰਤਾਉਣ ਵਾਲ਼ਾ:' - note: + notes: entry: comment: ਟਿੱਪਣੀ ਕਰੋ full: ਪੂਰੀ ਟਿੱਪਣੀ @@ -1274,7 +1273,7 @@ pa: resolve: ਹੱਲ਼ ਕੱਢੋ reactivate: ਮੁੜ ਚਾਲੂ ਕਰੋ comment: ਟਿੱਪਣੀ ਕਰੋ - redaction: + redactions: edit: description: ਵੇਰਵਾ new: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 4f113e290..f32f2770f 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -15,6 +15,7 @@ # Author: Darellur # Author: Debeet # Author: Deejay1 +# Author: GlutPaprykarz # Author: Ireun # Author: Kaligula # Author: Kastanoto @@ -380,53 +381,6 @@ pl: ago: '%{ago} temu' newer_comments: Nowsze komentarze older_comments: Starsze komentarze - export: - title: Eksportuj - start: - area_to_export: Obszar do wyeksportowania - manually_select: Ręcznie zaznacz inny obszar - format_to_export: Format eksportu - osm_xml_data: Dane XML OpenStreetMap - map_image: Obraz mapy (standardowa warstwa) - embeddable_html: Kod HTML do osadzenia - licence: Licencja - export_details: Dane OpenStreetMap udostępnione są na licencji Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Jeśli eksportowanie się nie uda, proszę rozważyć użycie jednego z - podanych zasobów:' - body: 'Ten obszar jest zbyt duży, aby go wyeksportować jako dane XML OpenStreetMap. - Proszę przybliżyć widok, wybrać mniejszy obszar lub użyć jednego z następujących - zasobów, aby pobrać większą ilość danych:' - planet: - title: Planeta OSM - description: Regularnie aktualizowane kopie całej bazy danych OpenStreetMap - overpass: - title: Overpass API - description: Pobierz ten obszar z serwera lustrzanego przechowującego bazę - danych OpenStreetMap - geofabrik: - title: Pliki Geofabrik - description: Regularnie aktualizowane migawki kontynentów, państw i wybranych - miast - metro: - title: Metro Extracts - description: Migawki dużych miast i otaczających je obszarów - other: - title: Inne zasoby - description: Dodatkowe zasoby wymienione w OpenStreetMap wiki - options: Opcje - format: Format - scale: Skala - max: maks - image_size: Rozmiar obrazu - zoom: Przybliżenie - add_marker: Dodaj znacznik na mapie - latitude: 'Szer:' - longitude: 'Dł:' - output: Wynik - paste_html: Wklej podany kod HTML do swojej strony - export_button: Wyeksportuj geocoder: search: title: @@ -450,10 +404,13 @@ pl: t-bar: Wyciąg orczykowy aeroway: aerodrome: Lotnisko + airstrip: Pas startowy apron: Płyta postojowa gate: Bramka hangar: Hangar helipad: Helipad + holding_position: Punkt oczekiwania + parking_position: Miejsce parkingowe runway: Pas startowy taxiway: Droga kołowania terminal: Terminal @@ -1059,249 +1016,6 @@ pl: text: Przekaż darowiznę learn_more: Dowiedz się więcej more: Więcej - license_page: - foreign: - title: Informacje o tłumaczeniu - text: W przypadku konfliktu pomiędzy tym tłumaczeniem, a %{english_original_link}, - preferowana jest strona w języku angielskim. - english_link: oryginalna angielska wersja - native: - title: O stronie - text: Przeglądasz angielską wersję strony dotyczącej praw autorskich. Możesz - wrócić do %{native_link} tej strony lub przestać czytać o prawach autorskich - i %{mapping_link}. - native_link: wersji po polsku - mapping_link: rozpocząć tworzenie mapy - legal_babble: - title_html: Prawa autorskie i licencja - intro_1_html: |- - OpenStreetMap® to projekt open data, rozpowszechniany na licencji Open Data Commons Open Database License (ODbL) przez OpenStreetMap Foundation (OSMF). - intro_2_html: Możesz swobodnie kopiować, rozpowszechniać, przekazywać innym - i dostosowywać nasze dane, pod warunkiem podania OpenStreetMap i jego autorów - jako źródło. Jeśli zmienisz, przekształcisz lub wykorzystasz nasze dane, wynik - swojej pracy możesz rozpowszechniać tylko na podstawie tej samej licencji. - Pełen tekst licencji - dokładnie opisuje Twoje prawa i obowiązki. - intro_3_html: Mapy w postaci graficznej, a także dokumentacja rozpowszechniane - na warunkach licencji Uznanie - autorstwa na tych samych warunkach 2.0 (CC BY-SA 2.0). - credit_title_html: Jak podać źródło - credit_1_html: Wymagamy podania źródła w postaci “© autorzy OpenStreetMap”. - credit_2_html: Musisz także jasno zaznaczyć, że dane dostępne są na licencji - Open Database License, a w przypadku kafelków - CC BY-SA. Możesz to zrobić - przez podlinkowanie tej - strony licencyjnej. W przypadku rozpowszechniania OSM w formie danych, - możesz podać nazwy licencji i umieścić do nich bezpośredni link. Jeśli niemożliwe - jest umieszczenie linków (np. mapy papierowe), sugerujemy pokierowanie czytelników - na stronę openstreetmap.org (lub OpenStreetMap.org), opendatacommons.org i, - jeśli odpowiednie, creativecommons.org. - credit_3_html: Przy przeglądaniu map elektronicznych, podziękowania powinny - pojawić się w rogu mapy. - attribution_example: - alt: Przykład, jak przypisywać OpenStreetMap na stronie internetowej - title: Przykład uznania autorstwa - more_title_html: Dowiedz się więcej - more_1_html: |- - Dowiedz się więcej o korzystaniu z naszych danych i o tym, jak określić nas jako źródło, z którego pochodzą dane na stronie OSMF License. - more_2_html: Chociaż dane OpenStreetMap są otwarte, nie jesteśmy w stanie zapewnić - nieograniczonego dostępu do naszego API wszystkim chętnym. Zapoznaj się z - naszą Polityką - korzystania z API, Polityką - korzystania z kafelków oraz Polityką - korzystania z Nominatima. - contributors_title_html: Współtwórcy - contributors_intro_html: 'Autorami są tysiące osób. Uwzględniamy również licencjonowane - dane na otwartej zasadzie z krajowych agencji kartograficznych i innych źródeł, - wśród nich:' - contributors_at_html: |- - Austria: Zawiera dane miasta Wiednia (na licencji CC BY), - Land Vorarlberg oraz - Land Tyrol (na licencji CC-BY AT z późniejszymi zmianami). - contributors_ca_html: 'Kanada: Zawiera dane z GeoBase®, - GeoGratis (© ''Department of Natural Resources Canada''), CanVec (© - ''Department of Natural Resources Canada'') i StatCan (''Geography Division, - Statistics Canada'').' - contributors_fi_html: 'Finlandia: Zawiera dane z National Land - Survey of Finland''s Topographic Database i innych zbiorów danych, pod NLSFI - License.' - contributors_fr_html: 'Francja: Zawiera dane uzyskane z ''Direction - Générale des Impôts''.
      • ' - contributors_nl_html: |- - Holandia: Zawiera dane © AND, 2007 - (www.and.com) - contributors_nz_html: 'Nowa Zelandia: Zawiera dane uzyskane - z ''Land Information New Zealand''. Crown Copyright reserved.' - contributors_si_html: |- - Słowenia: Zawiera dane - Urzędu Geodezji i Kartografii oraz - Ministerstwa Rolnictwa, Leśnictwa i Å»ywności - (informacja publiczna Słowenii). - contributors_za_html: |- - Południowa Afryka: zawiera dane pochodzące - z zarządu głównego: - National Geo-Spatial Information, prawa autorskie państwa zastrzeżone. - contributors_gb_html: 'Wielka Brytania: Zawiera dane ''Ordnance - Survey''. © Crown copyright and database right 2010-12.' - contributors_footer_1_html: |- - Szczegóły tych i innych źródeł, które zostały wykorzystane, - aby udoskonalić OpenStreetMap, są dostępne na stronie - Contributors (en). - contributors_footer_2_html: Włączenie danych do OpenStreetMap nie musi oznaczać, - że udostępniający je podmiot popiera OpenStreetMap, udziela jakiejkolwiek - gwarancji lub ponosi jakąkolwiek odpowiedzialność. - infringement_title_html: Naruszenia praw autorskich - infringement_1_html: Użytkownicy OpenStreetMap powinni pamiętać, aby nigdy nie - dodawać danych z jakichkolwiek źródeł chronionych prawami autorskimi (jak - np. Google Maps i większość map drukowanych) bez wyraźnego pozwolenia - właściciela praw autorskich. - infringement_2_html: Jeśli uważasz, że materiał chroniony prawem autorskim został - niewłaściwie dodany do bazy OpenStreetMap, zajrzyj pod adres naszej procedury - usuwania danych lub wypełnij - formularz on-line. - trademarks_title_html: Znaki towarowe - trademarks_1_html: OpenStreetMap, logo i nazwa State of the Map są zastrzeżonymi - znakami towarowymi Fundacji OpenStreetMap. Jeśli masz pytania dotyczące ich - używania, prześlij swoje pytania do grupy - roboczej ds. licencji. - welcome_page: - title: Witamy! - introduction_html: Witamy w OpenStreetMap, wolnej mapie świata. Teraz gdy masz - już konto, możesz przystąpić do mapowania. Oto krótki przewodnik z najważniejszymi - rzeczami, o których musisz wiedzieć. - whats_on_the_map: - title: Co jest na mapie - on_html: OpeenStreetMap jest miejscem mapowania rzeczy, które są zarówno prawdziwe - jak i aktualne - zawiera miliony budynków, dróg i innych szczegółów dotyczących - miejsc. Można mapować wszystkie elementy rzeczywistego świata, które Cię interesują - off_html: Nie wprowadzamy obiektów nieistniejących, hipotetycznych oraz danych - ze źródeł objętych prawami autorskimi. Jeśli nie masz zgody, nie kopiuj z - innych map (zarówno map papierowych, jak i online). - basic_terms: - title: Podstawowe Zasady Mapowania - paragraph_1_html: OpenStreetMap ma własny slang. Oto kilka słów które ci się - przydadzą. - editor_html: Edytor to program lub strona, która pozwala na - edycję mapy. - node_html: Węzeł to punkt na mapie, np. latarnia lub drzewo. - way_html: Linia to droga lub obszar, np. ulica, rzeka, jezioro - lub budynek. - tag_html: Znacznik to część danych opisująca linię lub węzeł, - np. nazwa restauracji lub ograniczenie prędkości dla drogi. - rules: - title: Zasady! - paragraph_1_html: W OpenStreetMap jest kilka formalnych zasad, ale oczekujemy, - że wszyscy uczestnicy będą współpracować i komunikować się ze społecznością. - Jeśli planujesz jakieś działania inne niż same edycje manualne, proszę przeczytaj - i dostosuj się do zaleceń dotyczących importów - oraz zautomatyzowanych - edycji. - questions: - title: Czy masz jakieś pytania? - paragraph_1_html: OpenStreetMap ma wiele zasobów pomocnych w poznawaniu projektu, - pozwalających na zadawanie pytań i otrzymywanie na nie odpowiedzi, oraz na - dyskutowanie i dokumentowanie tematów związanych z mapowaniem. Tutaj - uzyskasz pomoc. - start_mapping: Rozpocznij mapowanie - add_a_note: - title: Nie masz czasu na edycję? Dodaj uwagę! - paragraph_1_html: Jeśli chcesz wprowadzić małą zmianę, ale nie masz czasu na - rejestrację i poznanie sposobów edycji, możesz łatwo dodać uwagę. - paragraph_2_html: 'Wystarczy, że przejdziesz na mapę - i klikniesz ikonę: . Ta czynność doda znacznik, - który możesz przesunąć przez przeciągnięcie. Dodaj swoją uwagę i zapisz ją - - inni maperzy zajmą się twoim zgłoszeniem.' - fixthemap: - title: Zgłoś problem / Popraw mapę - how_to_help: - title: Jak pomóc - join_the_community: - title: Dołącz do społeczności - explanation_html: Jeśli zauważyłeś problem z mapą, na przykład brakującą ulicę - lub adres, najlepszym sposobem na dodanie lub naprawę takich danych jest - dołączenie do społeczności OpenStreetMap i dokonanie edycji lub naprawy - własnoręcznie. - add_a_note: - instructions_html: 'Wystarczy, że klikniesz tutaj: - lub na taką samą ikonkę przeglądając mapę na głównej stronie. Pojawi się - wtedy pinezka, którą możesz przesunąć przeciągając. Wpisz wiadomość, kliknij - Zapisz, a inni mapujący zajmą się opisanym problemem.' - other_concerns: - title: Inne kwestie - explanation_html: "Jeśli masz obawy o jak nasze dane są używane lub zawartość - proszę zapoznać się ze\nstroną o prawach autorskich - po więcej informacji prawnych lub skontaktować się z \ngrupą - roboczą OSMF." - help_page: - title: Uzyskiwanie pomocy - introduction: OpenStreetMap ma wiele zasobów pomocnych w poznawaniu projektu, - pozwalających na otrzymywanie odpowiedzi na pytania oraz dyskutowanie i dokumentowanie - tematów związanych z mapowaniem. - welcome: - url: /welcome - title: Witamy w OSM - description: Zacznij od tego krótkiego przewodnika, obejmującego podstawy OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Pl:Beginners%27_guide - title: Podręcznik dla początkujących - description: Podręcznik dla początkujących tworzony przez społeczność. - help: - url: https://help.openstreetmap.org/ - title: Strona Pomocy OpenStreetMap - description: Zadaj pytanie lub odszukaj odpowiedzi na stronie pytań i odpowiedzi - OSM. - mailing_lists: - title: Listy mailignowe - description: Zadaj pytanie lub przedyskutuj interesujący temat niezależnie od - wybranego tematu lub lokalizacji. - forums: - title: Forum - description: Pytania, dyskusje w formie internetowego forum dyskusyjnego. - irc: - title: IRC - description: Interaktywny czat w różnych językach i na różne tematy. - switch2osm: - title: switch2osm - description: Pomoc firmom i organizacjom w przejściu do mapy OpenStreetMap i - inne usługi. - wiki: - url: https://wiki.openstreetmap.org/wiki/Pl:Main_Page - title: Wiki OpenStreetMap - description: Zapoznaj się z wiki, aby uzyskać szczegółową dokumentację OSM. - about_page: - next: Dalej - copyright_html: ©Członkowie
        OpenStreetMap - used_by: '%{name} dostarcza dane mapowe dla tysięcy stron internetowych, aplikacji - oraz urządzeń' - lede_text: OpenStreetMap jest tworzony przez społeczność dodającą dane o drogach, - ścieżkach, kawiarniach, dworcach i wielu innych, na całym świecie. - local_knowledge_title: Wiedza lokalna - local_knowledge_html: OpenStreetMap wyróżnia wiedzę lokalną. Członkowie używają - zdjęć satelitarnych, lotniczych, nawigacji GPS, i zwykłych map aby zweryfikować - czy dane w OSM są dokładne i aktualne. - community_driven_title: Zarządzany przez społeczność - community_driven_html: |- - Społeczność OpenStreetMap jest różnorodna, zaangażowana i każdego dnia coraz większa. Wśród edytujących mapę są amatorscy kartografowie, specjaliści GIS, inżynierowie odpowiadający za pracę serwerów OSM, osoby tworzące mapy obszarów dotkniętych klęskami żywiołowej dla potrzeb służb ratunkowych oraz wielu innych ludzi. - Aby dowiedzieć się więcej na temat wspólnoty, odwiedź - Blog OpenStreetMap, - blogi użytkowników, - blogi społeczności oraz - stronę OSM Polska. - open_data_title: Otwarte dane - open_data_html: 'OpenStreetMap to otwarte dane: możesz używać ich jak tylko - chcesz pod warunkiem, że dodasz, że pochodzą one z OpenStreetMap i jego członków. - Jeśli zmienisz lub stworzysz coś na podstawie tych danych możesz je dystrybuować, - ale tylko na tej samej licencji. Zobacz Prawa - autorskie i licencja by zobaczyć szczegóły.' - legal_title: Pytania prawne - legal_html: |- - Ta strona internetowa i inne powiązane usługi prowadzone są oficjalnie przez OpenStreetMap Foundation (OSMF) w imieniu społeczności. Korzystanie z wszystkich usług OSMF jest regulowane przez - Politykę użytkowania i naszą Politykę prywatności.
        Proszę, skontaktuj się z OSMF, jeśli masz pytania odnośnie licencji, praw autorskich lub innych prawnych zagadnień i problemów. -
        - OpenStreetMap, logo oraz State of the Map są zarejestrowanymi znakami towarowymi OSMF. - partners_title: Partnerzy notifier: diary_comment_notification: subject: '[OpenStreetMap] Użytkownik %{user} skomentował wpis dziennika' @@ -1496,6 +1210,146 @@ pl: delete: deleted: Wiadomość usunięta site: + about: + next: Dalej + copyright_html: ©Członkowie
        OpenStreetMap + used_by: '%{name} dostarcza dane mapowe dla tysięcy stron internetowych, aplikacji + oraz urządzeń' + lede_text: OpenStreetMap jest tworzony przez społeczność dodającą dane o drogach, + ścieżkach, kawiarniach, dworcach i wielu innych, na całym świecie. + local_knowledge_title: Wiedza lokalna + local_knowledge_html: OpenStreetMap wyróżnia wiedzę lokalną. Członkowie używają + zdjęć satelitarnych, lotniczych, nawigacji GPS, i zwykłych map aby zweryfikować + czy dane w OSM są dokładne i aktualne. + community_driven_title: Zarządzany przez społeczność + community_driven_html: |- + Społeczność OpenStreetMap jest różnorodna, zaangażowana i każdego dnia coraz większa. Wśród edytujących mapę są amatorscy kartografowie, specjaliści GIS, inżynierowie odpowiadający za pracę serwerów OSM, osoby tworzące mapy obszarów dotkniętych klęskami żywiołowej dla potrzeb służb ratunkowych oraz wielu innych ludzi. + Aby dowiedzieć się więcej na temat wspólnoty, odwiedź + Blog OpenStreetMap, + blogi użytkowników, + blogi społeczności oraz + stronę OSM Polska. + open_data_title: Otwarte dane + open_data_html: 'OpenStreetMap to otwarte dane: możesz używać ich jak + tylko chcesz pod warunkiem, że dodasz, że pochodzą one z OpenStreetMap i + jego członków. Jeśli zmienisz lub stworzysz coś na podstawie tych danych możesz + je dystrybuować, ale tylko na tej samej licencji. Zobacz Prawa + autorskie i licencja by zobaczyć szczegóły.' + legal_title: Pytania prawne + legal_html: |- + Ta strona internetowa i inne powiązane usługi prowadzone są oficjalnie przez OpenStreetMap Foundation (OSMF) w imieniu społeczności. Korzystanie z wszystkich usług OSMF jest regulowane przez + Politykę użytkowania i naszą Politykę prywatności.
        Proszę, skontaktuj się z OSMF, jeśli masz pytania odnośnie licencji, praw autorskich lub innych prawnych zagadnień i problemów. +
        + OpenStreetMap, logo oraz State of the Map są zarejestrowanymi znakami towarowymi OSMF. + partners_title: Partnerzy + copyright: + foreign: + title: Informacje o tłumaczeniu + text: W przypadku konfliktu pomiędzy tym tłumaczeniem, a %{english_original_link}, + preferowana jest strona w języku angielskim. + english_link: oryginalna angielska wersja + native: + title: O stronie + text: Przeglądasz angielską wersję strony dotyczącej praw autorskich. Możesz + wrócić do %{native_link} tej strony lub przestać czytać o prawach autorskich + i %{mapping_link}. + native_link: wersji po polsku + mapping_link: rozpocząć tworzenie mapy + legal_babble: + title_html: Prawa autorskie i licencja + intro_1_html: |- + OpenStreetMap® to projekt open data, rozpowszechniany na licencji Open Data Commons Open Database License (ODbL) przez OpenStreetMap Foundation (OSMF). + intro_2_html: Możesz swobodnie kopiować, rozpowszechniać, przekazywać innym + i dostosowywać nasze dane, pod warunkiem podania OpenStreetMap i jego autorów + jako źródło. Jeśli zmienisz, przekształcisz lub wykorzystasz nasze dane, + wynik swojej pracy możesz rozpowszechniać tylko na podstawie tej samej licencji. + Pełen tekst licencji + dokładnie opisuje Twoje prawa i obowiązki. + intro_3_html: Mapy w postaci graficznej, a także dokumentacja rozpowszechniane + na warunkach licencji Uznanie + autorstwa na tych samych warunkach 2.0 (CC BY-SA 2.0). + credit_title_html: Jak podać źródło + credit_1_html: Wymagamy podania źródła w postaci “© autorzy OpenStreetMap”. + credit_2_html: Musisz także jasno zaznaczyć, że dane dostępne są na licencji + Open Database License, a w przypadku kafelków - CC BY-SA. Możesz to zrobić + przez podlinkowanie tej + strony licencyjnej. W przypadku rozpowszechniania OSM w formie danych, + możesz podać nazwy licencji i umieścić do nich bezpośredni link. Jeśli niemożliwe + jest umieszczenie linków (np. mapy papierowe), sugerujemy pokierowanie czytelników + na stronę openstreetmap.org (lub OpenStreetMap.org), opendatacommons.org + i, jeśli odpowiednie, creativecommons.org. + credit_3_html: Przy przeglądaniu map elektronicznych, podziękowania powinny + pojawić się w rogu mapy. + attribution_example: + alt: Przykład, jak przypisywać OpenStreetMap na stronie internetowej + title: Przykład uznania autorstwa + more_title_html: Dowiedz się więcej + more_1_html: |- + Dowiedz się więcej o korzystaniu z naszych danych i o tym, jak określić nas jako źródło, z którego pochodzą dane na stronie OSMF License. + more_2_html: Chociaż dane OpenStreetMap są otwarte, nie jesteśmy w stanie + zapewnić nieograniczonego dostępu do naszego API wszystkim chętnym. Zapoznaj + się z naszą Polityką + korzystania z API, Polityką + korzystania z kafelków oraz Polityką + korzystania z Nominatima. + contributors_title_html: Współtwórcy + contributors_intro_html: 'Autorami są tysiące osób. Uwzględniamy również licencjonowane + dane na otwartej zasadzie z krajowych agencji kartograficznych i innych + źródeł, wśród nich:' + contributors_at_html: |- + Austria: Zawiera dane miasta Wiednia (na licencji CC BY), + Land Vorarlberg oraz + Land Tyrol (na licencji CC-BY AT z późniejszymi zmianami). + contributors_ca_html: 'Kanada: Zawiera dane z GeoBase®, + GeoGratis (© ''Department of Natural Resources Canada''), CanVec (© + ''Department of Natural Resources Canada'') i StatCan (''Geography Division, + Statistics Canada'').' + contributors_fi_html: 'Finlandia: Zawiera dane z National + Land Survey of Finland''s Topographic Database i innych zbiorów danych, + pod NLSFI + License.' + contributors_fr_html: 'Francja: Zawiera dane uzyskane z ''Direction + Générale des Impôts''.' + contributors_nl_html: |- + Holandia: Zawiera dane © AND, 2007 + (www.and.com) + contributors_nz_html: 'Nowa Zelandia: Zawiera dane uzyskane + z ''Land Information New Zealand''. Crown Copyright reserved.' + contributors_si_html: |- + Słowenia: Zawiera dane + Urzędu Geodezji i Kartografii oraz + Ministerstwa Rolnictwa, Leśnictwa i Å»ywności + (informacja publiczna Słowenii). + contributors_za_html: |- + Południowa Afryka: zawiera dane pochodzące + z zarządu głównego: + National Geo-Spatial Information, prawa autorskie państwa zastrzeżone. + contributors_gb_html: 'Wielka Brytania: Zawiera dane ''Ordnance + Survey''. © Crown copyright and database right 2010-12.' + contributors_footer_1_html: |- + Szczegóły tych i innych źródeł, które zostały wykorzystane, + aby udoskonalić OpenStreetMap, są dostępne na stronie + Contributors (en). + contributors_footer_2_html: Włączenie danych do OpenStreetMap nie musi oznaczać, + że udostępniający je podmiot popiera OpenStreetMap, udziela jakiejkolwiek + gwarancji lub ponosi jakąkolwiek odpowiedzialność. + infringement_title_html: Naruszenia praw autorskich + infringement_1_html: Użytkownicy OpenStreetMap powinni pamiętać, aby nigdy + nie dodawać danych z jakichkolwiek źródeł chronionych prawami autorskimi + (jak np. Google Maps i większość map drukowanych) bez wyraźnego pozwolenia + właściciela praw autorskich. + infringement_2_html: Jeśli uważasz, że materiał chroniony prawem autorskim + został niewłaściwie dodany do bazy OpenStreetMap, zajrzyj pod adres naszej + procedury + usuwania danych lub wypełnij + formularz on-line. + trademarks_title_html: Znaki towarowe + trademarks_1_html: OpenStreetMap, logo i nazwa State of the Map są zastrzeżonymi + znakami towarowymi Fundacji OpenStreetMap. Jeśli masz pytania dotyczące + ich używania, prześlij swoje pytania do grupy + roboczej ds. licencji. index: js_1: Twoja przeglądarka internetowa nie obsługuje JavaScriptu, bądź też masz wyłączoną jego obsługę. @@ -1529,6 +1383,114 @@ pl: id_not_configured: iD nie został skonfigurowany no_iframe_support: Używana przeglądarka nie obsługuje HTML iframes, które są niezbędne dla tej funkcji. + export: + title: Eksportuj + area_to_export: Obszar do wyeksportowania + manually_select: Ręcznie zaznacz inny obszar + format_to_export: Format eksportu + osm_xml_data: Dane XML OpenStreetMap + map_image: Obraz mapy (standardowa warstwa) + embeddable_html: Kod HTML do osadzenia + licence: Licencja + export_details: Dane OpenStreetMap udostępnione są na licencji Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Jeśli eksportowanie się nie uda, proszę rozważyć użycie jednego z + podanych zasobów:' + body: 'Ten obszar jest zbyt duży, aby go wyeksportować jako dane XML OpenStreetMap. + Proszę przybliżyć widok, wybrać mniejszy obszar lub użyć jednego z następujących + zasobów, aby pobrać większą ilość danych:' + planet: + title: Planeta OSM + description: Regularnie aktualizowane kopie całej bazy danych OpenStreetMap + overpass: + title: Overpass API + description: Pobierz ten obszar z serwera lustrzanego przechowującego bazę + danych OpenStreetMap + geofabrik: + title: Pliki Geofabrik + description: Regularnie aktualizowane migawki kontynentów, państw i wybranych + miast + metro: + title: Metro Extracts + description: Migawki dużych miast i otaczających je obszarów + other: + title: Inne zasoby + description: Dodatkowe zasoby wymienione w OpenStreetMap wiki + options: Opcje + format: Format + scale: Skala + max: maks + image_size: Rozmiar obrazu + zoom: Przybliżenie + add_marker: Dodaj znacznik na mapie + latitude: 'Szer:' + longitude: 'Dł:' + output: Wynik + paste_html: Wklej podany kod HTML do swojej strony + export_button: Wyeksportuj + fixthemap: + title: Zgłoś problem / Popraw mapę + how_to_help: + title: Jak pomóc + join_the_community: + title: Dołącz do społeczności + explanation_html: Jeśli zauważyłeś problem z mapą, na przykład brakującą + ulicę lub adres, najlepszym sposobem na dodanie lub naprawę takich danych + jest dołączenie do społeczności OpenStreetMap i dokonanie edycji lub naprawy + własnoręcznie. + add_a_note: + instructions_html: 'Wystarczy, że klikniesz tutaj: + lub na taką samą ikonkę przeglądając mapę na głównej stronie. Pojawi się + wtedy pinezka, którą możesz przesunąć przeciągając. Wpisz wiadomość, kliknij + Zapisz, a inni mapujący zajmą się opisanym problemem.' + other_concerns: + title: Inne kwestie + explanation_html: "Jeśli masz obawy o jak nasze dane są używane lub zawartość + proszę zapoznać się ze\nstroną o prawach autorskich + po więcej informacji prawnych lub skontaktować się z \ngrupą + roboczą OSMF." + help: + title: Uzyskiwanie pomocy + introduction: OpenStreetMap ma wiele zasobów pomocnych w poznawaniu projektu, + pozwalających na otrzymywanie odpowiedzi na pytania oraz dyskutowanie i dokumentowanie + tematów związanych z mapowaniem. + welcome: + url: /welcome + title: Witamy w OSM + description: Zacznij od tego krótkiego przewodnika, obejmującego podstawy + OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Pl:Beginners%27_guide + title: Podręcznik dla początkujących + description: Podręcznik dla początkujących tworzony przez społeczność. + help: + url: https://help.openstreetmap.org/ + title: Strona Pomocy OpenStreetMap + description: Zadaj pytanie lub odszukaj odpowiedzi na stronie pytań i odpowiedzi + OSM. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Listy mailignowe + description: Zadaj pytanie lub przedyskutuj interesujący temat niezależnie + od wybranego tematu lub lokalizacji. + forums: + url: http://forum.openstreetmap.org/viewforum.php?id=23 + title: Forum + description: Pytania, dyskusje w formie internetowego forum dyskusyjnego. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Interaktywny czat w różnych językach i na różne tematy. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Pomoc firmom i organizacjom w przejściu do mapy OpenStreetMap + i inne usługi. + wiki: + url: https://wiki.openstreetmap.org/wiki/Pl:Main_Page + title: Wiki OpenStreetMap + description: Zapoznaj się z wiki, aby uzyskać szczegółową dokumentację OSM. sidebar: search_results: Wyniki wyszukiwania close: Zamknij @@ -1628,6 +1590,54 @@ pl: image: Obraz alt: Tekst alternatywny url: Adres (URL) + welcome: + title: Witamy! + introduction_html: Witamy w OpenStreetMap, wolnej mapie świata. Teraz gdy masz + już konto, możesz przystąpić do mapowania. Oto krótki przewodnik z najważniejszymi + rzeczami, o których musisz wiedzieć. + whats_on_the_map: + title: Co jest na mapie + on_html: OpeenStreetMap jest miejscem mapowania rzeczy, które są zarówno prawdziwe + jak i aktualne - zawiera miliony budynków, dróg i innych szczegółów + dotyczących miejsc. Można mapować wszystkie elementy rzeczywistego świata, + które Cię interesują + off_html: Nie wprowadzamy obiektów nieistniejących, hipotetycznych oraz danych + ze źródeł objętych prawami autorskimi. Jeśli nie masz zgody, nie kopiuj + z innych map (zarówno map papierowych, jak i online). + basic_terms: + title: Podstawowe Zasady Mapowania + paragraph_1_html: OpenStreetMap ma własny slang. Oto kilka słów które ci się + przydadzą. + editor_html: Edytor to program lub strona, która pozwala + na edycję mapy. + node_html: Węzeł to punkt na mapie, np. latarnia lub drzewo. + way_html: Linia to droga lub obszar, np. ulica, rzeka, jezioro + lub budynek. + tag_html: Znacznik to część danych opisująca linię lub węzeł, + np. nazwa restauracji lub ograniczenie prędkości dla drogi. + rules: + title: Zasady! + paragraph_1_html: W OpenStreetMap jest kilka formalnych zasad, ale oczekujemy, + że wszyscy uczestnicy będą współpracować i komunikować się ze społecznością. + Jeśli planujesz jakieś działania inne niż same edycje manualne, proszę przeczytaj + i dostosuj się do zaleceń dotyczących importów + oraz zautomatyzowanych + edycji. + questions: + title: Czy masz jakieś pytania? + paragraph_1_html: OpenStreetMap ma wiele zasobów pomocnych w poznawaniu projektu, + pozwalających na zadawanie pytań i otrzymywanie na nie odpowiedzi, oraz + na dyskutowanie i dokumentowanie tematów związanych z mapowaniem. Tutaj + uzyskasz pomoc. + start_mapping: Rozpocznij mapowanie + add_a_note: + title: Nie masz czasu na edycję? Dodaj uwagę! + paragraph_1_html: Jeśli chcesz wprowadzić małą zmianę, ale nie masz czasu + na rejestrację i poznanie sposobów edycji, możesz łatwo dodać uwagę. + paragraph_2_html: 'Wystarczy, że przejdziesz na mapę + i klikniesz ikonę: . Ta czynność doda znacznik, + który możesz przesunąć przez przeciągnięcie. Dodaj swoją uwagę i zapisz + ją - inni maperzy zajmą się twoim zgłoszeniem.' trace: visibility: private: Prywatny (udostępniany jedynie jako anonimowy, nieuporządkowane punkty) @@ -1760,7 +1770,7 @@ pl: przez stronę WWW, aby zapoznać się z Warunkami uczestnictwa. Nie masz obowiązku ich akceptować, ale musisz się z nimi zapoznać. oauth: - oauthorize: + authorize: title: Uwierzytelnij dostęp do konta request_access: Aplikacja %{app_name} żąda dostępu do konta użytkownika %{user}. Proszę potwierdzić przyznanie aplikacji poniższych uprawnień. Można wybrać @@ -1775,11 +1785,11 @@ pl: allow_write_gpx: przesyłanie śladów GPS allow_write_notes: modyfikowanie uwag. grant_access: Przyznaj dostęp - oauthorize_success: + authorize_success: title: Dozwolone żądanie uwierzytelnienia allowed: Przyznano dostęp do konta aplikacji %{app_name}. verification: Kod weryfikacyjny to %{code}. - oauthorize_failure: + authorize_failure: title: Nieudane żądanie uwierzytelnienia denied: Odmówiono dostępu do konta aplikacji %{app_name}. invalid: Token uwierzytelnienia jest nieprawidłowy. @@ -2023,6 +2033,7 @@ pl: if set location: Podaj swoją lokalizację na stronie %{settings_link}, aby zobaczyć użytkowników blisko ciebie. settings_link_text: stronie ustawień + my friends: Moi przyjaciele no friends: Nie dodano jeszcze żadnych znajomych. km away: '%{count}km stąd' m away: '%{count}m stąd' @@ -2222,7 +2233,7 @@ pl: confirm: Potwierdź fail: Nie można cofnąć roli `%{role}' użytkownikowi `%{name}'. Sprawdź, czy użytkownik i rola są ważne. - user_block: + user_blocks: model: non_moderator_update: Musisz być moderatorem, żeby ustalać i edytować blokady. non_moderator_revoke: Musisz być moderatorem, żeby odwoływać blokady. @@ -2288,20 +2299,6 @@ pl: period: one: 1 godzina other: '%{count} godzin' - partial: - show: Pokaż - edit: Edytuj - revoke: Odwołaj - confirm: Na pewno? - display_name: Zablokowany użytkownik - creator_name: Twórca - reason: Powód blokady - status: Status - revoker_name: Odwołana przez - not_revoked: (nieodwołana) - showing_page: Strona %{page} - next: Następna » - previous: « Poprzednia helper: time_future: Blokada wygasa za %{time}. until_login: Aktywne do momentu zalogowania użytkownika. @@ -2331,8 +2328,22 @@ pl: back: Pokaż wszystkie blokady revoker: Cofający uprawnienia needs_view: Użytkownik musi się zalogować zanim blokada zostanie wyczyszczona. - note: - description: + block: + not_revoked: (nieodwołana) + show: Pokaż + edit: Edytuj + revoke: Odwołaj + blocks: + display_name: Zablokowany użytkownik + creator_name: Twórca + reason: Powód blokady + status: Status + revoker_name: Odwołana przez + showing_page: Strona %{page} + next: Następna » + previous: « Poprzednia + notes: + comment: opened_at_html: Stworzono %{when} temu opened_at_by_html: Stworzono %{when} temu przez %{user} commented_at_html: Zaktualizowano %{when} temu @@ -2515,7 +2526,7 @@ pl: show_address: Pokaż adres query_features: Wyświetl dane obiektu centre_map: Wycentruj mapę tutaj - redaction: + redactions: edit: description: Opis heading: Edytuj poprawkę diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index ae5b401f2..4884e11ac 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -274,7 +274,7 @@ pt-BR: list: title: Conjuntos de alterações title_user: Conjuntos de alterações de %{user} - title_friend: Conjuntos de alterações dos seus amigos + title_friend: Conjuntos de alterações feitos pelos meus amigos title_nearby: Conjuntos de alterações de usuários próximos empty: Nenhum conjunto de alterações encontrado. empty_area: Nenhum conjunto de alterações nesta área. @@ -304,7 +304,7 @@ pt-BR: user_title: Diário de %{user} in_language_title: Publicações de Diário em %{language} new: Nova Publicação no Diário - new_title: Escrever nova publicação em seu diário + new_title: Escrever uma nova entrada no meu diário de usuário no_entries: Sem publicações no diário recent_entries: Publicações recentes no diário older_entries: Publicações mais antigas @@ -370,54 +370,6 @@ pt-BR: ago: '%{ago} atrás' newer_comments: Comentários mais recentes older_comments: Comentários mais antigos - export: - title: Exportar - start: - area_to_export: Área a Exportar - manually_select: Selecionar outra área manualmente - format_to_export: Formato a Exportar - osm_xml_data: Dados XML do OpenStreetMap - map_image: Imagem do Mapa (exibe a camada padrão) - embeddable_html: HTML para embutir - licence: Licença - export_details: Os dados do OpenStreetMap encontram-se sob a licença - Open Data Commons Open Database (ODbL). - too_large: - advice: 'Se a exportação acima falhar, considere o uso de uma das fontes listadas - abaixo:' - body: 'Esta área é muito grande para ser exportada como dados em XML do OpenStreetMap. - Aumente o zoom ou selecione uma área menor, ou use as seguintes fontes de - downloads de dados em massa:' - planet: - title: Planeta OSM - description: Cópias regularmente atualizadas da base de dados completa do - OpenStreetMap - overpass: - title: API Overpass - description: Baixar este retângulo limite através de um espelho do banco - de dados do OpenStreetMap - geofabrik: - title: Baixar do Geofabrik - description: Extratos regularmente atualizados de continentes, países, e - cidades selecionadas - metro: - title: Extratos do Portal Metro - description: Extratos das principais cidades do mundo e suas proximidades - other: - title: Outras Fontes - description: Fontes adicionais listadas no wiki do OpenStreetMap - options: Opções - format: Formato - scale: Escala - max: máx - image_size: Tamanho da Imagem - zoom: Ampliação - add_marker: Incluir um marcador no mapa - latitude: 'Lat:' - longitude: 'Lon:' - output: Saída - paste_html: Cole o HTML para publicar no site - export_button: Exportar geocoder: search: title: @@ -1068,260 +1020,6 @@ pt-BR: text: Faça uma doação learn_more: Saiba Mais more: Mais - license_page: - foreign: - title: Sobre esta tradução - text: Caso haja um conflito entre esta tradução e %{english_original_link}, - a página em Inglês terá precedência - english_link: o original em Inglês - native: - title: Sobre esta página - text: Você está vendo a versão em Inglês da página de Direitos Autorais. Você - pode voltar para a %{native_link} desta página ou pode parar de ler sobre - direitos autorais e %{mapping_link}. - native_link: Versão em Português do Brasil - mapping_link: começar a mapear - legal_babble: - title_html: Direitos Autorais e Licença - intro_1_html: |- - O OpenStreetMap® é disponibilizado em dados abertos, sob a licença Open Data - Commons Open Database License (ODbL) pela Fundação OpenStreetMap (OSMF). - intro_2_html: Tem o direito de copiar, distribuir, transmitir e adaptar os nossos - dados, desde que atribua a autoria do OpenStreetMap e os seus contribuidores. - Se alterar ou adicionar conteúdo dos nossos dados, pode distribuir o resultado - apenas com a mesma licença. O texto - legal completo explica os seus direitos e responsabilidades. - intro_3_html: A cartografia nas nossas telas de mapas (imagens dos mapas) e - a nossa documentação são disponibilizadas sob a licença Creative - Commons Atribuição - Partilha nos Mesmos Termos 2.0 (CC BY-SA). - credit_title_html: Como fazer atribuição ao OpenStreetMap - credit_1_html: Requeremos que você faça atribuição citando “© contribuidores - do OpenStreetMap”. - credit_2_html: Também tem de indicar claramente que os dados estão disponíveis - sob a Open Database License (ODbL), e caso utilize as telas de mapas (imagens - dos mapas), que a cartografia é disponibilizada sob a licença CC-BY-SA. Pode - fazer isto colocando uma hiperligação para esta - página sobre licença e direitos de autor. Como alternativa, e obrigatório - caso distribua o OpenStreetMap em formato de dados, pode indicar as licenças - e colocar hiperligações a apontar para as páginas das licenças. Em suportes - que não seja possível colocar hiperligações (por exemplo, obras impressas) - sugerimos que indique o endereço do sítio www.openstreetmap.org (talvez substituindo - ‘OpenStreetMap’ por este endereço web), para www.opendatacommons.org - e, caso se aplique, para www.creativecommons.org - credit_3_html: |- - Para um mapa eletrônico navegável, a atribuição deve aparecer no canto do mapa. - Por exemplo: - attribution_example: - alt: Exemplo de como atribuir o OpenStreetMap numa página web - title: Exemplo de atribuição - more_title_html: Descobrir mais - more_1_html: |- - Leia mais informações sobre a utilização dos nossos dados e como atribuir a autoria na página da licença da OSMF (em inglês). - more_2_html: |- - Embora o OpenStreetMap seja aberto, não podemos fornecer - API de mapa gratuito para terceiros. - Veja nossa Política de uso da APIPolítica de Uso de Imagens - e - contributors_title_html: Nossos contribuidores - contributors_intro_html: |- - Nossos contribuidores são milhares de indivíduos. Também incluímos - dados, cujas licenças são abertas, de organismos nacionais de cartografia - e de outras fontes, dentre elas: - contributors_at_html: 'Áustria: Contém dados de Stadt - Wien (sob a licença CC - BY), Land - Vorarlberg e Land Tirol (sob a licença CC-BY - AT com emendas).' - contributors_ca_html: "Canadá: Contém dados do\n GeoBase®, - GeoGratis (© Departamento de Recursos\n Naturais do Canadá), CanVec - (© Departamento de Recursos\n Naturais do Canadá), and StatCan (Divisão - de Geografia e \n Estatística do Canada)." - contributors_fi_html: "Finlândia: Contem dados do \nNational - Land Survey da Finland´s Topographic Database \nassim como de outras bases - de dados, sob a licença NLSFI." - contributors_fr_html: |- - França: Contém dados da - Direction Générale des Impôts. - contributors_nl_html: 'Países Baixos: Contém dados © AND, - 2007 (www.and.com)' - contributors_nz_html: "Nova Zelândia: Contém dados do \n Land - Information New Zealand. Crown Copyright reserved." - contributors_si_html: 'Eslovênia: Possui dados da Autoridade - de Levantamento e Mapeamento e do Ministério - de Agricultura, Silvicultura e Alimentação (informações públicas da Eslovênia).' - contributors_za_html: |- - Africa do Sul: contém dados originários de - Chief Directorate: - National Geo-Spatial Information, com direitos autorais reservados àquele Estado. - contributors_gb_html: |- - Reino Unido: Contém dados da Ordnance - Survey © Direitos da base e autorais da Crown 2010. - contributors_footer_1_html: Para mais informações sobre estas e outras fontes - utilizadas para melhorar o OpenStreetMap, consulte a página - de contribuidores (em inglês) na wiki do OpenStreetMap. - contributors_footer_2_html: "A inclusão de dados no OpenStreetMap não implica - que fornecedor \noriginal apoie o OpenStreetMap, ou dê qualquer garantia, - ou \naceite qualquer responsabilidade." - infringement_title_html: Violação de Direitos Autorais - infringement_1_html: |2- - Os contribuidores do OSM são lembrados de nunca adicionar dados de quaisquer - fontes com direitos autorais protegidos (ex.: Google Maps ou mapas impressos) sem - permissão expressa dos seus detentores. - infringement_2_html: Se acredita que foi adicionado material protegido por direitos - de autor indevidamente à base de dados do OpenStreetMap, por favor consulte - o procedimento - para retirar dados protegidos (em inglês) ou preencha os dados diretamente - no formulário (em inglês). - trademarks_title_html: Marcas registradas - trademarks_1_html: OpenStreetMap, o respetivo logótipo e State of the Map são - marcas registadas da Fundação OpenStreetMap. Se tiver alguma questão sobre - a utilização das marcas, por favor consulte as nossas Normas - sobre Marcas Comerciais. - welcome_page: - title: Bem-vindo(a)! - introduction_html: Bem-vindo(a) ao OpenStreetMap, o mapa livre e editável do mundo. - Agora que você se inscreveu, você está pronto para começar a mapear. Aqui está - um guia rápido com as coisas mais importantes que você precisa saber. - whats_on_the_map: - title: Conteúdo do Mapa - on_html: |- - OpenStreetMap é o lugar para mapear coisas que são simultaneamente reais e atuais - - isso inclui milhões de edifícios, estradas, e outros detalhes sobre lugares. Você pode mapear qualquer elemento do mundo real que achar interessante. - off_html: O que não está incluído é informação opinativa, como classificações, - características históricas ou hipotéticas, bem como dados de fontes protegidas - por direitos autorais. A não ser que você tenha permissão especial, não copie - de outros mapas online ou de mapas em papel. - basic_terms: - title: Regras Básicas para Mapear - paragraph_1_html: OpenStreetMap tem seus próprios jargões. Aqui estão algumas - palavras-chave úteis. - editor_html: Um editor é um programa ou site que você pode - usar para editar o mapa. - node_html: Um ponto (ou nó) é um ponto no mapa, como um restaurante - ou uma árvore. - way_html: Uma linha (ou caminho) é uma linha ou o contorno - de uma área, como uma estrada, córrego, lago ou edifício. - tag_html: Uma etiqueta é uma informação sobre um ponto ou linha, - como o nome de um restaurante ou o limite de velocidade de uma rodovia. - rules: - title: Regras! - paragraph_1_html: "O OpenStreetMap tem poucas regras formais mas espera-se que - todos os participantes colaborem e comuniquem com a comunidade. Se pretender - realizar ações em massa como importação de dados através de programas por - favor siga as instruções presentes em \nImportações - and \nEdições - Automatizadas." - questions: - title: Dúvidas? - paragraph_1_html: |- - O OpenStreetMap oferece vários recursos para você descobrir mais sobre o projeto, perguntar e responder a questões, e colaborativamente discutir e documentar vários tópicos sobre o mapa. - Obtenha ajuda aqui - start_mapping: Começando a Mapear - add_a_note: - title: Sem tempo para editar? Inclua uma nota! - paragraph_1_html: Se você só quer que algo pequeno seja arrumado, e não tem - tempo para se inscrever e aprender como editar, é fácil adicionar uma nota. - paragraph_2_html: "Basta ir ao mapa e clicar no ícone - da nota: . Isto incluirá um marcador no mapa, - que você pode mover \narrastando. Adicione a sua mensagem e clique em salvar, - e outros mapeadores vão investigar." - fixthemap: - title: Relatar um problema / Corrigir o mapa - how_to_help: - title: Como Ajudar - join_the_community: - title: Junte-se à comunidade - explanation_html: Se você achou um problema nos dados do nosso mapa, como - por exemplo uma estrada ou o seu endereço em falta, o melhor a fazer é juntar-se - à comunidade do OpenStreetMap e incluir ou reparar os dados você mesmo. - add_a_note: - instructions_html: |- - Apenas clique em ou no mesmo ícone na interface do mapa. - Isto incluirá um marcador ao mapa, que você pode mover arrastando. Adicione a sua mensagem, clique em salvar, e outros utilizadores como você vão investigar. - other_concerns: - title: Outras preocupações - explanation_html: Se tem preocupações sobre o modo como os nossos dados estão - a ser usados ou sobre os conteúdos, por favor consulte a nossa página - de direitos de autor para mais informações legais, ou contacte o grupo - de trabalho OSMF apropriado. - help_page: - title: Obtendo Ajuda - introduction: O OpenStreetMap oferece vários recursos para você saber mais sobre - o projeto, perguntar e responder a questões, e colaborativamente discutir e - documentar vários tópicos sobre o mapa. - welcome: - url: /welcome - title: Bem-vindo(a) ao OSM - description: Comece por este guia rápido sobre os princípios básicos do OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Pt:Beginners%27_guide - title: Introdução - description: Guia para iniciantes mantido pela comunidade. - help: - url: http://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Faça uma pergunta ou procure por respostas no fórum de perguntas - e respostas do OpenStreetMap. - mailing_lists: - title: Listas de E-mail - description: Tire uma dúvida ou discuta assuntos interessantes em várias listas - regionais ou por assunto. - forums: - title: Fóruns - description: Questões e discussões para quem prefere fóruns. - irc: - title: IRC - description: Bate-papo interativo em vários idiomas e sobre vários assuntos. - switch2osm: - title: switch2osm - description: Ajuda para empresas e organizações migrando para mapas baseados - no OpenStreetMap e outros serviços. - wiki: - url: https://wiki.openstreetmap.org/wiki/Pt:Main_Page - title: wiki.openstreetmap.org - description: Navegue no wiki para ver a documentação do OSM com mais detalhes. - about_page: - next: Próximo - copyright_html: ©contribuidores
        do OpenStreetMap - used_by: O %{name} fornece dados a centenas de sites na internet, aplicações de - celular e outros dispositivos - lede_text: O OpenStreetMap é desenvolvido por uma comunidade voluntária de mapeadores - que contribuem e mantêm atualizados os dados sobre estradas, trilhos, cafés, - estações ferroviárias e muito mais por todo o mundo. - local_knowledge_title: Conhecimento Local - local_knowledge_html: O OpenStreetMap valoriza o conhecimento local. Os contribuidores - utilizam fotografias aéreas, dispositivos GPS, e mapas do terreno para verificar - que a informação no OpenStreetMap é rigorosa e atualizada. - community_driven_title: Impulsionado pela Comunidade - community_driven_html: |- - A comunidade do OpenStreetMap é diversa, apaixonada, e aumenta diariamente. - Entre os nossos colaboradores encontra-se mapeadores entusiastas, profissionais das áreas de sistemas geográficos, engenheiros que utilizam os servidores do OSM, voluntários a mapear áreas afetadas por grandes desastres, e muitos mais. - Para saber mais sobre a nossa comunidade, veja: - Blogue do OpenStreetMap, - diários dos utilizadores, - blogues da comunidade, e o sítio da Fundação OSM. - open_data_title: Dados Abertos - open_data_html: |- - O OpenStreetMap é constituído por dados abertos: qualquer - pessoa tem a liberdade de usar os dados para qualquer fim desde - credite a autoria do OpenStreetMap e os seus contribuidores. - Se você alterar os dados ou criar algo com os dados, pode distribuir - o produto resultante apenas sob a mesma licença. Consulte a página sobre direitos de autor e licenciamento para mais informações. - legal_title: Jurídico - legal_html: "Este site e outros serviços relacionados são formalmente geridos - pela \nFundação OpenStreetMap (OSMF) - \nem nome da comunidade. A utilização de todos os serviços operados pela OSMF - está sujeita\nàs nossas normas de Utilização - Aceitável e de Privacidade\n
        - \nPor favor contacte a OSMF - \nse tiver questões relacionadas com licenças, direitos de autor, questões legais - ou problemas.\n
        \nO OpenStreetMap, o logótipo da lupa e o State of the Map - são marcas - comerciais registadas da OSMF." - partners_title: Parceiros notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} comentou em uma entrada do diário' @@ -1518,6 +1216,158 @@ pt-BR: delete: deleted: Mensagem apagada site: + about: + next: Próximo + copyright_html: ©contribuidores
        do OpenStreetMap + used_by: O %{name} fornece dados a centenas de sites na internet, aplicações + de celular e outros dispositivos + lede_text: O OpenStreetMap é desenvolvido por uma comunidade voluntária de mapeadores + que contribuem e mantêm atualizados os dados sobre estradas, trilhos, cafés, + estações ferroviárias e muito mais por todo o mundo. + local_knowledge_title: Conhecimento Local + local_knowledge_html: O OpenStreetMap valoriza o conhecimento local. Os contribuidores + utilizam fotografias aéreas, dispositivos GPS, e mapas do terreno para verificar + que a informação no OpenStreetMap é rigorosa e atualizada. + community_driven_title: Impulsionado pela Comunidade + community_driven_html: |- + A comunidade do OpenStreetMap é diversa, apaixonada, e aumenta diariamente. + Entre os nossos colaboradores encontra-se mapeadores entusiastas, profissionais das áreas de sistemas geográficos, engenheiros que utilizam os servidores do OSM, voluntários a mapear áreas afetadas por grandes desastres, e muitos mais. + Para saber mais sobre a nossa comunidade, veja: + Blogue do OpenStreetMap, + diários dos utilizadores, + blogues da comunidade, e o sítio da Fundação OSM. + open_data_title: Dados Abertos + open_data_html: |- + O OpenStreetMap é constituído por dados abertos: qualquer + pessoa tem a liberdade de usar os dados para qualquer fim desde + credite a autoria do OpenStreetMap e os seus contribuidores. + Se você alterar os dados ou criar algo com os dados, pode distribuir + o produto resultante apenas sob a mesma licença. Consulte a página sobre direitos de autor e licenciamento para mais informações. + legal_title: Jurídico + legal_html: "Este site e outros serviços relacionados são formalmente geridos + pela \nFundação OpenStreetMap (OSMF) + \nem nome da comunidade. A utilização de todos os serviços operados pela OSMF + está sujeita\nàs nossas normas de Utilização + Aceitável e de Privacidade\n
        + \nPor favor contacte a OSMF + \nse tiver questões relacionadas com licenças, direitos de autor, questões + legais ou problemas.\n
        \nO OpenStreetMap, o logótipo da lupa e o State + of the Map são marcas + comerciais registadas da OSMF." + partners_title: Parceiros + copyright: + foreign: + title: Sobre esta tradução + text: Caso haja um conflito entre esta tradução e %{english_original_link}, + a página em Inglês terá precedência + english_link: o original em Inglês + native: + title: Sobre esta página + text: Você está vendo a versão em Inglês da página de Direitos Autorais. Você + pode voltar para a %{native_link} desta página ou pode parar de ler sobre + direitos autorais e %{mapping_link}. + native_link: Versão em Português do Brasil + mapping_link: começar a mapear + legal_babble: + title_html: Direitos Autorais e Licença + intro_1_html: |- + O OpenStreetMap® é disponibilizado em dados abertos, sob a licença Open Data + Commons Open Database License (ODbL) pela Fundação OpenStreetMap (OSMF). + intro_2_html: Tem o direito de copiar, distribuir, transmitir e adaptar os + nossos dados, desde que atribua a autoria do OpenStreetMap e os seus contribuidores. + Se alterar ou adicionar conteúdo dos nossos dados, pode distribuir o resultado + apenas com a mesma licença. O texto + legal completo explica os seus direitos e responsabilidades. + intro_3_html: A cartografia nas nossas telas de mapas (imagens dos mapas) + e a nossa documentação são disponibilizadas sob a licença Creative + Commons Atribuição - Partilha nos Mesmos Termos 2.0 (CC BY-SA). + credit_title_html: Como fazer atribuição ao OpenStreetMap + credit_1_html: Requeremos que você faça atribuição citando “© contribuidores + do OpenStreetMap”. + credit_2_html: Também tem de indicar claramente que os dados estão disponíveis + sob a Open Database License (ODbL), e caso utilize as telas de mapas (imagens + dos mapas), que a cartografia é disponibilizada sob a licença CC-BY-SA. + Pode fazer isto colocando uma hiperligação para esta + página sobre licença e direitos de autor. Como alternativa, e obrigatório + caso distribua o OpenStreetMap em formato de dados, pode indicar as licenças + e colocar hiperligações a apontar para as páginas das licenças. Em suportes + que não seja possível colocar hiperligações (por exemplo, obras impressas) + sugerimos que indique o endereço do sítio www.openstreetmap.org (talvez + substituindo ‘OpenStreetMap’ por este endereço web), para www.opendatacommons.org + e, caso se aplique, para www.creativecommons.org + credit_3_html: |- + Para um mapa eletrônico navegável, a atribuição deve aparecer no canto do mapa. + Por exemplo: + attribution_example: + alt: Exemplo de como atribuir o OpenStreetMap numa página web + title: Exemplo de atribuição + more_title_html: Descobrir mais + more_1_html: |- + Leia mais informações sobre a utilização dos nossos dados e como atribuir a autoria na página da licença da OSMF (em inglês). + more_2_html: |- + Embora o OpenStreetMap seja aberto, não podemos fornecer + API de mapa gratuito para terceiros. + Veja nossa Política de uso da APIPolítica de Uso de Imagens + e + contributors_title_html: Nossos contribuidores + contributors_intro_html: |- + Nossos contribuidores são milhares de indivíduos. Também incluímos + dados, cujas licenças são abertas, de organismos nacionais de cartografia + e de outras fontes, dentre elas: + contributors_at_html: 'Áustria: Contém dados de Stadt + Wien (sob a licença CC + BY), Land + Vorarlberg e Land Tirol (sob a licença CC-BY + AT com emendas).' + contributors_ca_html: "Canadá: Contém dados do\n GeoBase®, + GeoGratis (© Departamento de Recursos\n Naturais do Canadá), CanVec + (© Departamento de Recursos\n Naturais do Canadá), and StatCan (Divisão + de Geografia e \n Estatística do Canada)." + contributors_fi_html: "Finlândia: Contem dados do \nNational + Land Survey da Finland´s Topographic Database \nassim como de outras bases + de dados, sob a licença NLSFI." + contributors_fr_html: |- + França: Contém dados da + Direction Générale des Impôts. + contributors_nl_html: 'Países Baixos: Contém dados © + AND, 2007 (www.and.com)' + contributors_nz_html: "Nova Zelândia: Contém dados do \n + \ Land Information New Zealand. Crown Copyright reserved." + contributors_si_html: 'Eslovênia: Possui dados da Autoridade + de Levantamento e Mapeamento e do Ministério + de Agricultura, Silvicultura e Alimentação (informações públicas da + Eslovênia).' + contributors_za_html: |- + Africa do Sul: contém dados originários de + Chief Directorate: + National Geo-Spatial Information, com direitos autorais reservados àquele Estado. + contributors_gb_html: |- + Reino Unido: Contém dados da Ordnance + Survey © Direitos da base e autorais da Crown 2010. + contributors_footer_1_html: Para mais informações sobre estas e outras fontes + utilizadas para melhorar o OpenStreetMap, consulte a página + de contribuidores (em inglês) na wiki do OpenStreetMap. + contributors_footer_2_html: "A inclusão de dados no OpenStreetMap não implica + que fornecedor \noriginal apoie o OpenStreetMap, ou dê qualquer garantia, + ou \naceite qualquer responsabilidade." + infringement_title_html: Violação de Direitos Autorais + infringement_1_html: |2- + Os contribuidores do OSM são lembrados de nunca adicionar dados de quaisquer + fontes com direitos autorais protegidos (ex.: Google Maps ou mapas impressos) sem + permissão expressa dos seus detentores. + infringement_2_html: Se acredita que foi adicionado material protegido por + direitos de autor indevidamente à base de dados do OpenStreetMap, por favor + consulte o procedimento + para retirar dados protegidos (em inglês) ou preencha os dados diretamente + no formulário (em inglês). + trademarks_title_html: Marcas registradas + trademarks_1_html: OpenStreetMap, o respetivo logótipo e State of the Map + são marcas registadas da Fundação OpenStreetMap. Se tiver alguma questão + sobre a utilização das marcas, por favor consulte as nossas Normas + sobre Marcas Comerciais. index: js_1: Você está usando um navegador sem suporte a JavaScript, ou está com o JavaScript desativado. @@ -1551,6 +1401,110 @@ pt-BR: id_not_configured: iD não foi configurado no_iframe_support: Seu navegador não suporta iframes HTML, que são necessários para esse recurso. + export: + title: Exportar + area_to_export: Área a Exportar + manually_select: Selecionar outra área manualmente + format_to_export: Formato a Exportar + osm_xml_data: Dados XML do OpenStreetMap + map_image: Imagem do Mapa (exibe a camada padrão) + embeddable_html: HTML para embutir + licence: Licença + export_details: Os dados do OpenStreetMap encontram-se sob a licença + Open Data Commons Open Database (ODbL). + too_large: + advice: 'Se a exportação acima falhar, considere o uso de uma das fontes listadas + abaixo:' + body: 'Esta área é muito grande para ser exportada como dados em XML do OpenStreetMap. + Aumente o zoom ou selecione uma área menor, ou use as seguintes fontes de + downloads de dados em massa:' + planet: + title: Planeta OSM + description: Cópias regularmente atualizadas da base de dados completa do + OpenStreetMap + overpass: + title: API Overpass + description: Baixar este retângulo limite através de um espelho do banco + de dados do OpenStreetMap + geofabrik: + title: Baixar do Geofabrik + description: Extratos regularmente atualizados de continentes, países, e + cidades selecionadas + metro: + title: Extratos do Portal Metro + description: Extratos das principais cidades do mundo e suas proximidades + other: + title: Outras Fontes + description: Fontes adicionais listadas no wiki do OpenStreetMap + options: Opções + format: Formato + scale: Escala + max: máx + image_size: Tamanho da Imagem + zoom: Ampliação + add_marker: Incluir um marcador no mapa + latitude: 'Lat:' + longitude: 'Lon:' + output: Saída + paste_html: Cole o HTML para publicar no site + export_button: Exportar + fixthemap: + title: Relatar um problema / Corrigir o mapa + how_to_help: + title: Como Ajudar + join_the_community: + title: Junte-se à comunidade + explanation_html: Se você achou um problema nos dados do nosso mapa, como + por exemplo uma estrada ou o seu endereço em falta, o melhor a fazer é + juntar-se à comunidade do OpenStreetMap e incluir ou reparar os dados + você mesmo. + add_a_note: + instructions_html: |- + Apenas clique em ou no mesmo ícone na interface do mapa. + Isto incluirá um marcador ao mapa, que você pode mover arrastando. Adicione a sua mensagem, clique em salvar, e outros utilizadores como você vão investigar. + other_concerns: + title: Outras preocupações + explanation_html: Se tem preocupações sobre o modo como os nossos dados estão + a ser usados ou sobre os conteúdos, por favor consulte a nossa página + de direitos de autor para mais informações legais, ou contacte o grupo de trabalho + OSMF apropriado. + help: + title: Obtendo Ajuda + introduction: O OpenStreetMap oferece vários recursos para você saber mais sobre + o projeto, perguntar e responder a questões, e colaborativamente discutir + e documentar vários tópicos sobre o mapa. + welcome: + url: /welcome + title: Bem-vindo(a) ao OSM + description: Comece por este guia rápido sobre os princípios básicos do OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Pt:Beginners%27_guide + title: Introdução + description: Guia para iniciantes mantido pela comunidade. + help: + url: http://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Faça uma pergunta ou procure por respostas no fórum de perguntas + e respostas do OpenStreetMap. + mailing_lists: + title: Listas de E-mail + description: Tire uma dúvida ou discuta assuntos interessantes em várias listas + regionais ou por assunto. + forums: + title: Fóruns + description: Questões e discussões para quem prefere fóruns. + irc: + title: IRC + description: Bate-papo interativo em vários idiomas e sobre vários assuntos. + switch2osm: + title: switch2osm + description: Ajuda para empresas e organizações migrando para mapas baseados + no OpenStreetMap e outros serviços. + wiki: + url: https://wiki.openstreetmap.org/wiki/Pt:Main_Page + title: wiki.openstreetmap.org + description: Navegue no wiki para ver a documentação do OSM com mais detalhes. sidebar: search_results: Resultados da Busca close: Fechar @@ -1651,6 +1605,54 @@ pt-BR: image: Imagem alt: Texto alternativo url: URL + welcome: + title: Bem-vindo(a)! + introduction_html: Bem-vindo(a) ao OpenStreetMap, o mapa livre e editável do + mundo. Agora que você se inscreveu, você está pronto para começar a mapear. + Aqui está um guia rápido com as coisas mais importantes que você precisa saber. + whats_on_the_map: + title: Conteúdo do Mapa + on_html: |- + OpenStreetMap é o lugar para mapear coisas que são simultaneamente reais e atuais - + isso inclui milhões de edifícios, estradas, e outros detalhes sobre lugares. Você pode mapear qualquer elemento do mundo real que achar interessante. + off_html: O que não está incluído é informação opinativa, como classificações, + características históricas ou hipotéticas, bem como dados de fontes protegidas + por direitos autorais. A não ser que você tenha permissão especial, não + copie de outros mapas online ou de mapas em papel. + basic_terms: + title: Regras Básicas para Mapear + paragraph_1_html: OpenStreetMap tem seus próprios jargões. Aqui estão algumas + palavras-chave úteis. + editor_html: Um editor é um programa ou site que você pode + usar para editar o mapa. + node_html: Um ponto (ou nó) é um ponto no mapa, como um restaurante + ou uma árvore. + way_html: Uma linha (ou caminho) é uma linha ou o contorno + de uma área, como uma estrada, córrego, lago ou edifício. + tag_html: Uma etiqueta é uma informação sobre um ponto ou + linha, como o nome de um restaurante ou o limite de velocidade de uma rodovia. + rules: + title: Regras! + paragraph_1_html: "O OpenStreetMap tem poucas regras formais mas espera-se + que todos os participantes colaborem e comuniquem com a comunidade. Se pretender + realizar ações em massa como importação de dados através de programas por + favor siga as instruções presentes em \nImportações + and \nEdições + Automatizadas." + questions: + title: Dúvidas? + paragraph_1_html: |- + O OpenStreetMap oferece vários recursos para você descobrir mais sobre o projeto, perguntar e responder a questões, e colaborativamente discutir e documentar vários tópicos sobre o mapa. + Obtenha ajuda aqui + start_mapping: Começando a Mapear + add_a_note: + title: Sem tempo para editar? Inclua uma nota! + paragraph_1_html: Se você só quer que algo pequeno seja arrumado, e não tem + tempo para se inscrever e aprender como editar, é fácil adicionar uma nota. + paragraph_2_html: "Basta ir ao mapa e clicar no ícone + da nota: . Isto incluirá um marcador no mapa, + que você pode mover \narrastando. Adicione a sua mensagem e clique em salvar, + e outros mapeadores vão investigar." trace: visibility: private: Privado (compartilhado apenas como pontos anônimos e não ordenados) @@ -1696,6 +1698,7 @@ pt-BR: trace_header: upload_trace: Enviar uma trilha see_all_traces: Ver todas as trilhas + see_my_traces: Ver meus trilhos traces_waiting: '{{PLURAL|one=Você tem %{count} trilha esperando para enviar. Por favor considere esperar que ela termine antes de enviar, para não bloquear a fila para outros usuários.|Você tem %{count} trilhas esperando para enviar. @@ -1722,6 +1725,7 @@ pt-BR: delete_track: Apague esta trilha trace_not_found: Trilha não encontrada! visibility: 'Visibilidade:' + confirm_delete: Eliminar esta trilha? trace_paging_nav: showing_page: Página %{page} older: Trilhas mais antigas @@ -1744,6 +1748,7 @@ pt-BR: map: mapa list: public_traces: Trilhas Públicas de GPS + my_traces: Meus trilhos GPS public_traces_from: Trilhas de GPS públicas de %{user} description: Procurar recentes carregamentos de rastreamento de GPS tagged_with: ' etiquetadas com %{tags}' @@ -1781,7 +1786,7 @@ pt-BR: login na interface web para ler os Termos do Contribuidor. Você não precisa concordar, mas você deve vê-los. oauth: - oauthorize: + authorize: title: Autorizar acesso à sua conta request_access: A aplicação %{app_name} está pedindo acesso à sua conta, %{user}. Confira se deseja mesmo que a aplicação tenha as capacidades a seguir. Você @@ -1795,11 +1800,11 @@ pt-BR: allow_write_gpx: enviar trilhas de GPS. allow_write_notes: alterar notas. grant_access: Dar acesso - oauthorize_success: + authorize_success: title: Pedido de autorização permitido allowed: Dar acesso à sua conta ao programa %{app_name}. verification: O código de verificação é %{code}. - oauthorize_failure: + authorize_failure: title: Falha na autorização denied: Negou acesso à sua conta ao programa %{app_name}. invalid: O token de autorização não é válido. @@ -2046,6 +2051,7 @@ pt-BR: if set location: Defina seu local principal na página de %{settings_link} para ver usuários próximos. settings_link_text: configurações + my friends: Meus amigos no friends: Você ainda não adicionou amigos. km away: '%{count}km de distância' m away: '%{count}m de distância' @@ -2248,7 +2254,7 @@ pt-BR: confirm: Confirmar fail: Não foi possível retirar o papel "%{role}" do usuário "%{name}". Confira se o usuário e o papel são ambos válidos. - user_block: + user_blocks: model: non_moderator_update: É necessário ser um moderador para criar ou atualizar um bloqueio. @@ -2309,20 +2315,6 @@ pt-BR: period: one: uma hora other: '%{count} horas' - partial: - show: Exibir - edit: Editar - revoke: Cancelar! - confirm: Tem certeza? - display_name: Usuário bloqueado - creator_name: Criador - reason: Razão para o bloqueio - status: Estado - revoker_name: Retirado por - not_revoked: (não retirado) - showing_page: Página %{page} - next: Próximo » - previous: « Anterior helper: time_future: Termina em %{time}. until_login: Ativo até que o usuário se conecte. @@ -2352,8 +2344,22 @@ pt-BR: back: Ver todos os bloqueios revoker: 'Quem retirou:' needs_view: O usuário precisa se logar para esse bloqueio ser retirado. - note: - description: + block: + not_revoked: (não retirado) + show: Exibir + edit: Editar + revoke: Cancelar! + blocks: + display_name: Usuário bloqueado + creator_name: Criador + reason: Razão para o bloqueio + status: Estado + revoker_name: Retirado por + showing_page: Página %{page} + next: Próximo » + previous: « Anterior + notes: + comment: opened_at_html: Criado %{when} atrás opened_at_by_html: Criado %{when} atrás por %{user} commented_at_html: Atualizado %{when} atrás @@ -2483,7 +2489,7 @@ pt-BR: distance: Distância errors: no_route: Rota entre esses dois lugares não encontrada. - no_place: Não foi possível encontrar esse lugar. + no_place: Desculpe - não foi possível encontrar '%{place}'. instructions: continue_without_exit: Continuar em %{name} slight_right_without_exit: Curva suave à direita para %{name} @@ -2503,6 +2509,7 @@ pt-BR: onramp_right_with_name_directions: Vire à direita na rampa para %{name}, em direção a %{directions} onramp_right_without_directions: Vire à direita na rampa + onramp_right: Vire à direita para a rampa endofroad_right_without_exit: No fim da estrada, vire à direita na %{name} merge_right_without_exit: Entre à direita na %{name} fork_right_without_exit: Na bifurcação, vire à direita na %{name} @@ -2527,6 +2534,7 @@ pt-BR: onramp_left_with_name_directions: Vire à esquerda na rampa para %{name}, em direção a %{directions} onramp_left_without_directions: Vire à esquerda na rampa + onramp_left: Vire à esquerda para a rampa endofroad_left_without_exit: No fim da estrada, vire à esquerda na %{name} merge_left_without_exit: Entre à esquerda na %{name} fork_left_without_exit: Na bifurcação, vire à esquerda na %{name} @@ -2563,7 +2571,7 @@ pt-BR: show_address: Mostrar Endereço query_features: Consultar elementos centre_map: Centralizar o mapa aqui - redaction: + redactions: edit: description: Descrição heading: Editar anulação diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index f7ce20154..c09c54ca7 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -260,7 +260,7 @@ pt-PT: list: title: Conjuntos de alterações title_user: Conjuntos de alterações de %{user} - title_friend: Conjuntos de alterações feitos pelos seus amigos + title_friend: Conjuntos de alterações feitos pelos meus amigos title_nearby: Conjuntos de alterações feitos por utilizadores das redondezas empty: Não foi encontrado nenhum conjunto de alterações. empty_area: Nenhum conjunto de alterações nesta área. @@ -290,7 +290,7 @@ pt-PT: user_title: Diário de %{user} in_language_title: Entradas no Diário em %{language} new: Nova Entrada no Diário - new_title: Adicionar entrada ao diário + new_title: Escrever uma nova entrada no meu diário de utilizador no_entries: Diário sem entradas recent_entries: Entradas recentes no diário older_entries: Entradas Mais Antigas @@ -356,55 +356,6 @@ pt-PT: ago: '%{ago} atrás' newer_comments: Comentários mais recentes older_comments: Comentários mais antigos - export: - title: Exportar - start: - area_to_export: Área a exportar - manually_select: Selecionar manualmente uma área diferente - format_to_export: Formato da exportação - osm_xml_data: XML OpenStreetMap (.osm) apenas mapa padrão - map_image: Imagem (.jpg .pdf .svg .png .ps) apenas mapa padrão - embeddable_html: HTML (mostra mapa interativo noutros sites) todos os mapas - licence: Licença - export_details: Os dados do OpenStreetMap encontram-se sob a licença - Open Data Commons Open Database (ODbL). - too_large: - advice: 'Se a exportação acima falhar, por favor, considere o uso de uma das - fontes listadas abaixo:' - body: Esta área é demasiado grande para exportar em XML do OpenStreetMap. - Por favor aproxime a vista ou selecione uma área mais pequena. Para exportar - esta área grande utilize uma das seguintes fontes. - planet: - title: Planeta OSM - description: Cópias atualizadas regularmente da base de dados completa do - OpenStreetMap - overpass: - title: Overpass API - description: Fazer o download desta caixa delimitadora através de um espelho - do banco de dados do OpenStreetMap - geofabrik: - title: Downloads do Geofabrik - description: Extratos atualizados regularmente de continentes, países e - cidades selecionadas - metro: - title: Extratos do Metro - description: Extratos das principais cidades do mundo e seus arredores - other: - title: Outras Fontes - description: Fontes adicionais listadas no wiki do OpenStreetMap - options: Opções - format: Formato - scale: Escala - max: máx - image_size: Tamanho da Imagem - zoom: Zoom - add_marker: Adicionar um ponto de interesse no mapa - latitude: 'Lat:' - longitude: 'Lon:' - output: Código HTML - paste_html: Copie e cole o código num site para mostrar o mapa interativo nesse - site - export_button: Exportar geocoder: search: title: @@ -1051,259 +1002,6 @@ pt-PT: text: Fazer um Donativo learn_more: Mais Informações more: Mais - license_page: - foreign: - title: Sobre esta tradução - text: Caso haja um conflito entre esta página traduzida e %{english_original_link}, - a página em inglês tem prevalência - english_link: o original em inglês - native: - title: Sobre esta página - text: Está a ver a versão em Inglês da página de copyright. Pode voltar à %{native_link} - desta página ou, se preferir, %{mapping_link}. - native_link: Versão em português - mapping_link: começar a mapear - legal_babble: - title_html: Licença e Direitos de autor - intro_1_html: |- - O OpenStreetMap® é disponibilizado em dados abertos, sob a licença Open Data - Commons Open Database License (ODbL) pela Fundação OpenStreetMap (OSMF). - intro_2_html: Tem o direito de copiar, distribuir, transmitir e adaptar os nossos - dados, desde que atribua a autoria do OpenStreetMap e os seus contribuidores. - Se alterar ou adicionar conteúdo dos nossos dados, pode distribuir o resultado - apenas com a mesma licença. O texto - legal completo explica os seus direitos e responsabilidades. - intro_3_html: A cartografia nas nossas telas de mapas (imagens dos mapas) e - a nossa documentação são disponibilizadas sob a licença Creative - Commons Atribuição - Partilha nos Mesmos Termos 2.0 (CC BY-SA). - credit_title_html: Como creditar o OpenStreetMap - credit_1_html: É necessário indicar “© contribuidores do OpenStreetMap” - ou caso seja mais adequado em inglês “© OpenStreetMap contributors”. - credit_2_html: Também tem de indicar claramente que os dados estão disponíveis - sob a Open Database License (ODbL), e caso utilize as telas de mapas (imagens - dos mapas), que a cartografia é disponibilizada sob a licença CC-BY-SA. Pode - fazer isto colocando uma hiperligação para esta - página sobre licença e direitos de autor. Como alternativa, e obrigatório - caso distribua o OpenStreetMap em formato de dados, pode indicar as licenças - e colocar hiperligações a apontar para as páginas das licenças. Em suportes - que não seja possível colocar hiperligações (por exemplo, obras impressas) - sugerimos que indique o endereço do sítio www.openstreetmap.org (talvez substituindo - ‘OpenStreetMap’ por este endereço web), para www.opendatacommons.org - e, caso se aplique, para www.creativecommons.org - credit_3_html: |- - Num mapa eletrónico navegável, os créditos devem aparecer num canto do mapa. - Por exemplo (em inglês): - attribution_example: - alt: Exemplo de como indicar os créditos do OpenStreetMap numa página web - title: Exemplo de atribuição - more_title_html: Saber mais - more_1_html: |- - Leia mais informações sobre a utilização dos nossos dados e como atribuir a autoria na página da licença da OSMF (em inglês). - more_2_html: Apesar do OpenStreetMap ser uma plataforma de dados abertos, não - podemos fornecer a terceiros uma API de mapas, livre de encargos. Veja a Política de Utilização - da API, Política - de Utilização de Telas e Política - de Utilização do Nominatim. - contributors_title_html: Os nossos contribuidores - contributors_intro_html: 'Os contribuidores do OpenStreetMap são milhares. Também - são utilizados dados de agências cartográficas nacionais e outras fontes, - entre elas:' - contributors_at_html: 'Áustria: Contém dados de Stadt - Wien (sob a licença CC - BY), Land - Vorarlberg e Land Tirol (sob a licença CC-BY - AT com emendas).' - contributors_ca_html: 'Canadá: Contém dados de GeoBase®, - GeoGratis (© Department of Natural Resources Canada), CanVec (© - Department of Natural Resources Canada), e StatCan (Geography Division, Statistics - Canada).' - contributors_fi_html: "Finlândia: Contem dados do \nNational - Land Survey da Finland´s Topographic Database \nassim como de outras bases - de dados, sob a licença NLSFI." - contributors_fr_html: 'França: Contém dados provenientes da - Direction Générale des Impôts.' - contributors_nl_html: 'Países Baixos: Contém dados © AND, - 2007 (www.and.com)' - contributors_nz_html: 'Nova Zelândia: Contém dados provenientes - de Land Information New Zealand. Crown Copyright reserved.' - contributors_si_html: |- - Eslovénia: Contém dados da - Autoridade de Cartografia e Topografia (Geodetska uprava Republike Slovenije) e do - Ministério da Agricultura, Floresta e Alimentação (Ministrstvo za kmetijstvo, gozdarstvo in prehrano) - (informação pública da Eslovénia). - contributors_za_html: 'África do Sul: Contém dados provenientes - de Chief Directorate: National Geo-Spatial - Information, State copyright reserved.' - contributors_gb_html: 'Reino Unido: Contém dados do Ordnance - Survey © Crown copyright and database right 2010-2012.' - contributors_footer_1_html: Para mais informações sobre estas e outras fontes - utilizadas para melhorar o OpenStreetMap, consulte a página - de contribuidores (em inglês) na wiki do OpenStreetMap. - contributors_footer_2_html: ' A inclusão de dados no OpenStreetMap não implica - que o fornecedor de dados originais apoie o OpenStreetMap, forneça qualquer - garantia, ou aceite algum tipo de responsabilidade.' - infringement_title_html: Violação de direitos de autor - infringement_1_html: É relembrado aos contribuidores do OpenStreetMap para nunca - adicionarem dados de fontes protegidas por direitos de autor (por exemplo - o Google Maps ou mapas comerciais impressos) sem permissão explícita dos detentores - dos direitos de autor. - infringement_2_html: Se acredita que foi adicionado material protegido por direitos - de autor indevidamente à base de dados do OpenStreetMap, por favor consulte - o procedimento - para retirar dados protegidos (em inglês) ou preencha os dados diretamente - no formulário (em inglês). - trademarks_title_html: Marcas registadas - trademarks_1_html: OpenStreetMap, o respetivo logótipo e State of the Map são - marcas registadas da Fundação OpenStreetMap. Se tiver alguma questão sobre - a utilização das marcas, por favor consulte as nossas Normas - sobre Marcas Comerciais. - welcome_page: - title: Bem-vindo ! - introduction_html: Bem-vindo ao OpenStreetMap, o mapa livre e editável do mundo. - Agora como estás inscrito, estás também pronto para mapear. Aqui um guia rápido - com as coisas mais importantes que precisas de saber. - whats_on_the_map: - title: O que está no Mapa - on_html: OpenStreetMap é um lugar para mapear as coisas que são ambos real - e atual - inclui milhões de prédios, estradas, e outros detalhes locais. - Podes mapear qualquer elemento do mundo real que lhe interessa. - off_html: O que não é incluído são dados subjectivos como notações, - factos históricos, objectos inventados, e dados de fontes com copyright. Se - não tiveres permissão específica, não copies dados doutro mapa qualquer que - seja online ou em papel. - basic_terms: - title: Vocabulário para mapear - paragraph_1_html: OpenStreetMap tem a sua própria linguagem. Aqui a explicação - de algumas palavras úteis. - editor_html: Um editor é um programa ou site usado para editar - o mapa. - node_html: Um nó é um ponto no mapa, como um restaurante ou - uma árvore. - way_html: Um caminho é uma linha ou uma área, como uma estrada, - um rio, um lago ou um prédio. - tag_html: Uma etiqueta é um peça de informação sob um nó ou - uma linha, como o nome do restaurante ou o limite de velocidade duma estrada. - rules: - title: Regras! - paragraph_1_html: "O OpenStreetMap tem poucas regras formais mas espera-se que - todos os participantes colaborem e comuniquem com a comunidade. Se pretender - realizar ações em massa como importação de dados através de programas por - favor siga as instruções presentes em \nImportações - and \nEdições - Automatizadas." - questions: - title: Tens perguntas ? - paragraph_1_html: |- - O OpenStreetMap tem vários recursos para saber mais sobre o projeto, perguntar e responder a questões, e colaborativamente discutir e documentar vários tópicos sobre o mapa. - Obtenha ajuda aqui - start_mapping: Começar a mapear - add_a_note: - title: Falta de tempo para editar ? Adiciona uma nota ! - paragraph_1_html: Se quiseres fazer uma pequena alteração más falta tempo para - inscrever-se e aprender a editar, é muito simples deixar uma nota. - paragraph_2_html: |- - Vá apenas para o mapa e clique no ícone de nota: . Isto irá adicionar um marcador no mapa, que poderá ser reposicionado. - Adiciona a sua mensagem e, em seguida, clique em salvaguardar, assim outros mapeadores irão investigar. - fixthemap: - title: Reportar um problema / Corrigir o mapa - how_to_help: - title: Como Ajudar - join_the_community: - title: Junte-se à comunidade - explanation_html: Se você reparou num problema com os dados do nosso mapa, - como por exemplo uma estrada ou o seu adereço em falta, a melhor maneira - de proceder é juntando-se à comunidade do OpenStreetMap e adicionando ou - reparando os dados por si mesmo. - add_a_note: - instructions_html: |- - Apenas clique em ou no mesmo ícone na interface do mapa. - Isto irá adicionar um marcador ao mapa, o qual pode mover arrastando. Adicione a sua mensagem, clique em salvar, e outros utilizadores como você irão investigar. - other_concerns: - title: Outras preocupações - explanation_html: Se tem preocupações sobre o modo como os nossos dados estão - a ser usados ou sobre os conteúdos, por favor consulte a nossa página - de direitos de autor para mais informações legais, ou contacte o grupo - de trabalho OSMF apropriado. - help_page: - title: Obter Ajuda - introduction: O OpenStreetMap tem vários recursos para saber mais sobre o projeto, - perguntar e responder a questões, e colaborativamente discutir e documentar - vários tópicos sobre o mapa. - welcome: - url: /welcome - title: Bem vindo ao OpenStreetMap - description: Comece por este guia rápido sobre os princípios básicos do OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Pt:Beginners%27_guide - title: Guia de Iniciantes - description: Guia para iniciantes criado pela comunidade. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Coloque uma questão ou procure por respostas no fórum de perguntas - e respostas do OpenStreetMap. - mailing_lists: - title: Listas de discussão - description: Faça uma pergunta ou discuta sobre temas interessantes numa vasta - gama de listas de discussão regionais e temáticas. - forums: - title: Fóruns - description: Questões e discussões para quem preferir uma área na internet do - tipo fórum. - irc: - title: IRC - description: Sala de discussão IRC em várias línguas e vários tópicos. - switch2osm: - title: switch2osm - description: Informações para empresas e organizações que queiram mudar para - os mapas do OpenStreetMap e outros serviços. - wiki: - url: https://wiki.openstreetmap.org/wiki/Pt:Main_Page - title: wiki.openstreetmap.org - description: Navegue na wiki de documentação sobre o OpenStreetMap. - about_page: - next: Seguinte - copyright_html: ©Colaboradores
        do OpenStreetMap - used_by: O %{name} fornece dados a milhares de sítios na internet, aplicações - de telemóveis e outros dispositivos - lede_text: O OpenStreetMap é desenvolvido por uma comunidade voluntária de mapeadores - que contribuem e mantêm atualizados os dados sobre estradas, trilhos, cafés, - estações ferroviárias e muito mais por todo o mundo. - local_knowledge_title: Conhecimento Local - local_knowledge_html: O OpenStreetMap valoriza o conhecimento local. Os colaboradores - utilizam fotografias aéreas, dispositivos GPS, e mapas do terreno para verificar - que a informação no OpenStreetMap é rigorosa e atualizada. - community_driven_title: Dirigido pela Comunidade - community_driven_html: |- - A comunidade do OpenStreetMap é diversa, apaixonada, e aumenta diariamente. - Entre os nossos colaboradores encontra-se mapeadores entusiastas, profissionais das áreas de sistemas geográficos, engenheiros que utilizam os servidores do OSM, voluntários a mapear áreas afetadas por grandes desastres, e muitos mais. - Para saber mais sobre a nossa comunidade, veja: - Blogue do OpenStreetMap, - diários dos utilizadores, - blogues da comunidade, e o sítio da Fundação OSM. - open_data_title: Dados Abertos - open_data_html: |- - O OpenStreetMap é constituído por dados abertos: qualquer - pessoa tem a liberdade de usar os dados para qualquer fim desde - credite a autoria do OpenStreetMap e os seus colaboradores. - Se você alterar os dados ou criar algo com os dados, pode distribuir - o produto resultante apenas sob a mesma licença. Consulte a página sobre direitos de autor e licenciamento para mais informações. - legal_title: Termos legais - legal_html: "Este sítio e outros serviços relacionados são formalmente geridos - pela \nFundação OpenStreetMap (OSMF) - \nem nome da comunidade. A utilização de todos os serviços operados pela OSMF - está sujeita\nàs nossas normas de Utilização - Aceitável e de Privacidade\n
        - \nPor favor contacte a OSMF - \nse tiver questões relacionadas com licenças, direitos de autor, questões legais - ou problemas.\n
        \nO OpenStreetMap, o logótipo da lupa e o State of the Map - são marcas - comerciais registadas da OSMF." - partners_title: Parceiros notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} comentou uma entrada de diário' @@ -1498,6 +1196,155 @@ pt-PT: delete: deleted: Mensagem eliminada site: + about: + next: Seguinte + copyright_html: ©Colaboradores
        do OpenStreetMap + used_by: O %{name} fornece dados a milhares de sítios na internet, aplicações + de telemóveis e outros dispositivos + lede_text: O OpenStreetMap é desenvolvido por uma comunidade voluntária de mapeadores + que contribuem e mantêm atualizados os dados sobre estradas, trilhos, cafés, + estações ferroviárias e muito mais por todo o mundo. + local_knowledge_title: Conhecimento Local + local_knowledge_html: O OpenStreetMap valoriza o conhecimento local. Os colaboradores + utilizam fotografias aéreas, dispositivos GPS, e mapas do terreno para verificar + que a informação no OpenStreetMap é rigorosa e atualizada. + community_driven_title: Dirigido pela Comunidade + community_driven_html: |- + A comunidade do OpenStreetMap é diversa, apaixonada, e aumenta diariamente. + Entre os nossos colaboradores encontra-se mapeadores entusiastas, profissionais das áreas de sistemas geográficos, engenheiros que utilizam os servidores do OSM, voluntários a mapear áreas afetadas por grandes desastres, e muitos mais. + Para saber mais sobre a nossa comunidade, veja: + Blogue do OpenStreetMap, + diários dos utilizadores, + blogues da comunidade, e o sítio da Fundação OSM. + open_data_title: Dados Abertos + open_data_html: |- + O OpenStreetMap é constituído por dados abertos: qualquer + pessoa tem a liberdade de usar os dados para qualquer fim desde + credite a autoria do OpenStreetMap e os seus colaboradores. + Se você alterar os dados ou criar algo com os dados, pode distribuir + o produto resultante apenas sob a mesma licença. Consulte a página sobre direitos de autor e licenciamento para mais informações. + legal_title: Termos legais + legal_html: "Este sítio e outros serviços relacionados são formalmente geridos + pela \nFundação OpenStreetMap (OSMF) + \nem nome da comunidade. A utilização de todos os serviços operados pela OSMF + está sujeita\nàs nossas normas de Utilização + Aceitável e de Privacidade\n
        + \nPor favor contacte a OSMF + \nse tiver questões relacionadas com licenças, direitos de autor, questões + legais ou problemas.\n
        \nO OpenStreetMap, o logótipo da lupa e o State + of the Map são marcas + comerciais registadas da OSMF." + partners_title: Parceiros + copyright: + foreign: + title: Sobre esta tradução + text: Caso haja um conflito entre esta página traduzida e %{english_original_link}, + a página em inglês tem prevalência + english_link: o original em inglês + native: + title: Sobre esta página + text: Está a ver a versão em Inglês da página de copyright. Pode voltar à + %{native_link} desta página ou, se preferir, %{mapping_link}. + native_link: Versão em português + mapping_link: começar a mapear + legal_babble: + title_html: Licença e Direitos de autor + intro_1_html: |- + O OpenStreetMap® é disponibilizado em dados abertos, sob a licença Open Data + Commons Open Database License (ODbL) pela Fundação OpenStreetMap (OSMF). + intro_2_html: Tem o direito de copiar, distribuir, transmitir e adaptar os + nossos dados, desde que atribua a autoria do OpenStreetMap e os seus contribuidores. + Se alterar ou adicionar conteúdo dos nossos dados, pode distribuir o resultado + apenas com a mesma licença. O texto + legal completo explica os seus direitos e responsabilidades. + intro_3_html: A cartografia nas nossas telas de mapas (imagens dos mapas) + e a nossa documentação são disponibilizadas sob a licença Creative + Commons - Atribuição-CompartilhaIgual 2.0 (CC BY-SA). + credit_title_html: Como creditar o OpenStreetMap + credit_1_html: É necessário indicar “© contribuidores do OpenStreetMap” + ou caso seja mais adequado em inglês “© OpenStreetMap contributors”. + credit_2_html: Também tem de indicar claramente que os dados estão disponíveis + sob a Open Database License (ODbL), e caso utilize as telas de mapas (imagens + dos mapas), que a cartografia é disponibilizada sob a licença CC-BY-SA. + Pode fazer isto colocando uma hiperligação para esta + página sobre licença e direitos de autor. Como alternativa, e obrigatório + caso distribua o OpenStreetMap em formato de dados, pode indicar as licenças + e colocar hiperligações a apontar para as páginas das licenças. Em suportes + que não seja possível colocar hiperligações (por exemplo, obras impressas) + sugerimos que indique o endereço do sítio www.openstreetmap.org (talvez + substituindo ‘OpenStreetMap’ por este endereço web), para www.opendatacommons.org + e, caso se aplique, para www.creativecommons.org + credit_3_html: |- + Num mapa eletrónico navegável, os créditos devem aparecer num canto do mapa. + Por exemplo (em inglês): + attribution_example: + alt: Exemplo de como indicar os créditos do OpenStreetMap numa página web + title: Exemplo de atribuição + more_title_html: Saber mais + more_1_html: |- + Leia mais informações sobre a utilização dos nossos dados e como atribuir a autoria na página da licença da OSMF (em inglês). + more_2_html: Apesar do OpenStreetMap ser uma plataforma de dados abertos, + não podemos fornecer a terceiros uma API de mapas, livre de encargos. Veja + a Política + de Utilização da API, Política + de Utilização de Telas e Política + de Utilização do Nominatim. + contributors_title_html: Os nossos contribuidores + contributors_intro_html: 'Os contribuidores do OpenStreetMap são milhares. + Também são utilizados dados de agências cartográficas nacionais e outras + fontes, entre elas:' + contributors_at_html: 'Áustria: Contém dados de Stadt + Wien (sob a licença CC + BY), Land + Vorarlberg e Land Tirol (sob a licença CC-BY + AT com emendas).' + contributors_ca_html: 'Canadá: Contém dados de GeoBase®, + GeoGratis (© Department of Natural Resources Canada), CanVec (© + Department of Natural Resources Canada), e StatCan (Geography Division, + Statistics Canada).' + contributors_fi_html: "Finlândia: Contem dados do \nNational + Land Survey da Finland´s Topographic Database \nassim como de outras bases + de dados, sob a licença NLSFI." + contributors_fr_html: 'França: Contém dados provenientes + da Direction Générale des Impôts.' + contributors_nl_html: 'Países Baixos: Contém dados © + AND, 2007 (www.and.com)' + contributors_nz_html: 'Nova Zelândia: Contém dados provenientes + de Land Information New Zealand. Crown Copyright reserved.' + contributors_si_html: |- + Eslovénia: Contém dados da + Autoridade de Cartografia e Topografia (Geodetska uprava Republike Slovenije) e do + Ministério da Agricultura, Floresta e Alimentação (Ministrstvo za kmetijstvo, gozdarstvo in prehrano) + (informação pública da Eslovénia). + contributors_za_html: 'África do Sul: Contém dados provenientes + de Chief Directorate: National Geo-Spatial + Information, State copyright reserved.' + contributors_gb_html: 'Reino Unido: Contém dados do Ordnance + Survey © Crown copyright and database right 2010-2012.' + contributors_footer_1_html: Para mais informações sobre estas e outras fontes + utilizadas para melhorar o OpenStreetMap, consulte a página + de contribuidores (em inglês) na wiki do OpenStreetMap. + contributors_footer_2_html: ' A inclusão de dados no OpenStreetMap não implica + que o fornecedor de dados originais apoie o OpenStreetMap, forneça qualquer + garantia, ou aceite algum tipo de responsabilidade.' + infringement_title_html: Violação de direitos de autor + infringement_1_html: É relembrado aos contribuidores do OpenStreetMap para + nunca adicionarem dados de fontes protegidas por direitos de autor (por + exemplo o Google Maps ou mapas comerciais impressos) sem permissão explícita + dos detentores dos direitos de autor. + infringement_2_html: Se acredita que foi adicionado material protegido por + direitos de autor indevidamente à base de dados do OpenStreetMap, por favor + consulte o procedimento + para retirar dados protegidos (em inglês) ou preencha os dados diretamente + no formulário (em inglês). + trademarks_title_html: Marcas registadas + trademarks_1_html: OpenStreetMap, o respetivo logótipo e State of the Map + são marcas registadas da Fundação OpenStreetMap. Se tiver alguma questão + sobre a utilização das marcas, por favor consulte as nossas Normas + sobre Marcas Comerciais. index: js_1: Está a usar um navegador de Internet que não suporta JavaScript ou tem o JavaScript desativado. @@ -1529,6 +1376,115 @@ pt-PT: id_not_configured: O editor iD não foi configurado no_iframe_support: O seu navegador de Internet não suporta ou tem desativado as iframes HTML, que são necessárias para esta funcionalidade. + export: + title: Exportar + area_to_export: Área a exportar + manually_select: Selecionar manualmente uma área diferente + format_to_export: Formato da exportação + osm_xml_data: XML OpenStreetMap (.osm) apenas mapa padrão + map_image: Imagem (.jpg .pdf .svg .png .ps) apenas mapa padrão + embeddable_html: HTML (mostra mapa interativo noutros sites) todos os mapas + licence: Licença + export_details: Os dados do OpenStreetMap encontram-se sob a licença + Open Data Commons Open Database (ODbL). + too_large: + advice: 'Se a exportação acima falhar, por favor, considere o uso de uma das + fontes listadas abaixo:' + body: Esta área é demasiado grande para exportar em XML do OpenStreetMap. + Por favor aproxime a vista ou selecione uma área mais pequena. Para exportar + esta área grande utilize uma das seguintes fontes. + planet: + title: Planeta OSM + description: Cópias atualizadas regularmente da base de dados completa do + OpenStreetMap + overpass: + title: Overpass API + description: Fazer o download desta caixa delimitadora através de um espelho + do banco de dados do OpenStreetMap + geofabrik: + title: Downloads do Geofabrik + description: Extratos atualizados regularmente de continentes, países e + cidades selecionadas + metro: + title: Extratos do Metro + description: Extratos das principais cidades do mundo e seus arredores + other: + title: Outras Fontes + description: Fontes adicionais listadas no wiki do OpenStreetMap + options: Opções + format: Formato + scale: Escala + max: máx + image_size: Tamanho da Imagem + zoom: Zoom + add_marker: Adicionar um ponto de interesse no mapa + latitude: 'Lat:' + longitude: 'Lon:' + output: Código HTML + paste_html: Copie e cole o código num site para mostrar o mapa interativo nesse + site + export_button: Exportar + fixthemap: + title: Reportar um problema / Corrigir o mapa + how_to_help: + title: Como Ajudar + join_the_community: + title: Junte-se à comunidade + explanation_html: Se reparou num problema com os dados do mapa, como a falta + de uma estrada ou do seu endereço, a melhor coisa a fazer é juntar-se + à comunidade do OpenStreetMap e adicionar ou corrigir os dados você mesmo. + add_a_note: + instructions_html: |- + Clique simplesmente em ou no mesmo ícone na interface do mapa. + Isto irá adicionar um marcador ao mapa, que pode mover arrastando-o. Adicione a sua mensagem, clique para gravar, e outros colaboradores irão investigar. + other_concerns: + title: Outras preocupações + explanation_html: Se tem preocupações sobre o modo como os nossos dados estão + a ser usados ou sobre os conteúdos, por favor consulte a nossa página + de direitos de autor para mais informações legais, ou contacte o grupo de trabalho + OSMF apropriado. + help: + title: Obter Ajuda + introduction: O OpenStreetMap tem vários recursos para saber mais sobre o projeto, + perguntar e responder a questões, e discutir e documentar assuntos cartográficos + de forma colaborativa. + welcome: + url: /welcome + title: Bem-vindo(a) ao OpenStreetMap + description: Comece por este guia rápido sobre os princípios básicos do OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Pt:Beginners%27_guide + title: Guia para Principiantes + description: Guia para principiantes atualizado pela comunidade. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Faça uma pergunta ou procure respostas no fórum de perguntas + e respostas do OpenStreetMap. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Listas de divulgação + description: Faça uma pergunta ou debata temas interessantes numa vasta gama + de listas de divulgação temáticas ou regionais. + forums: + url: http://forum.openstreetmap.org/ + title: Fóruns + description: Questões e discussões para quem preferir uma interface ao estilo + dos sistemas de boletins eletrónicos. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Sala de discussão IRC em várias línguas e vários tópicos. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Informações para empresas e organizações que queiram mudar para + os mapas do OpenStreetMap e outros serviços. + wiki: + url: https://wiki.openstreetmap.org/wiki/Pt:Main_Page + title: wiki.openstreetmap.org + description: Navegue na wiki de documentação sobre o OpenStreetMap. sidebar: search_results: Resultados da Pesquisa close: Fechar @@ -1629,6 +1585,54 @@ pt-PT: image: Imagem alt: Texto alternativo url: URL + welcome: + title: Bem-vindo ! + introduction_html: Bem-vindo(a) ao OpenStreetMap, o mapa do mundo, grátis e + editável. Agora que se inscreveu, está tudo pronto para cartografar. Aqui + tem um guia rápido com as coisas mais importantes que precisa de saber. + whats_on_the_map: + title: O que está no mapa + on_html: O OpenStreetMap é um lugar para cartografar as coisas reais e + atuais - inclui milhões de prédios, estradas e outros detalhes sobre + lugares. Pode cartografar as características do mundo que lhe interessam. + off_html: O que não é incluído são dados subjetivos como avaliações, + caraterísticas históricas ou hipotéticas, e dados de fontes protegidas por + direitos de autor. Se não tiver autorização específica para fazê-lo, não + copie dados de outros mapas, quer estes estejam na Internet ou em papel. + basic_terms: + title: Vocabulário básico para cartografar + paragraph_1_html: O OpenStreetMap tem alguma linguagem própria. Aqui tem a + explicação de algumas palavras úteis. + editor_html: Um editor é um programa ou site usado para editar + o mapa. + node_html: Um nó é um ponto no mapa, como um restaurante + ou uma árvore. + way_html: Um caminho é uma linha ou uma área, como uma estrada, + um rio, um lago ou um prédio. + tag_html: Uma etiqueta é um dado acerca de um nó ou de uma + linha, como o nome de um restaurante ou o limite de velocidade duma estrada. + rules: + title: Regras! + paragraph_1_html: "O OpenStreetMap tem poucas regras formais mas espera-se + que todos os participantes colaborem e comuniquem com a comunidade. Se pretender + realizar ações em massa como importação de dados através de programas por + favor siga as instruções presentes em \nImportações + and \nEdições + Automatizadas." + questions: + title: Tens perguntas ? + paragraph_1_html: |- + O OpenStreetMap tem vários recursos para saber mais sobre o projeto, perguntar e responder a questões, e colaborativamente discutir e documentar vários tópicos sobre o mapa. + Obtenha ajuda aqui + start_mapping: Começar a mapear + add_a_note: + title: Falta de tempo para editar ? Adiciona uma nota ! + paragraph_1_html: Se pretende que seja feita uma pequena correção mas não + tem disponibilidade para criar uma conta e aprender a editar, é muito simples + deixar uma nota. + paragraph_2_html: |- + Vá ao mapa e clique no ícone da nota: . Isto adiciona um marcador no mapa, que pode reposicionar arrastando-o. + Adicione a sua mensagem, clique para gravar e outros colaboradores irão investigar. trace: visibility: private: Privado (apenas partilhado como anónimo, pontos não ordenados) @@ -1671,6 +1675,7 @@ pt-PT: trace_header: upload_trace: Enviar trilho GPS see_all_traces: Ver todos os trilhos + see_my_traces: Ver meus trilhos traces_waiting: one: Tem %{count} trilho GPS na fila para ser colocado na base de dados do OpenStreetMap. Por favor, antes de enviar mais trilhos aguarde um pouco @@ -1701,6 +1706,7 @@ pt-PT: delete_track: Eliminar este trilho trace_not_found: Não foi encontrado o trilho! visibility: 'Visibilidade:' + confirm_delete: Eliminar este trilho? trace_paging_nav: showing_page: Página %{page} older: Trilhos GPS mais antigos @@ -1723,8 +1729,9 @@ pt-PT: map: mapa list: public_traces: Trilhos GPS públicos + my_traces: Meus trilhos GPS public_traces_from: Trilhos GPS públicos do utilizador %{user} - description: Ver trilhos GPS enviados recentemente + description: Explorar os trilhos GPS enviados recentemente tagged_with: ' etiquetado com %{tags}' empty_html: Ainda não enviou nenhum trilho GPS. Envie um novo trilho GPS ou saiba mais sobre trilhos GPS na página @@ -1760,7 +1767,7 @@ pt-PT: aceda à página web do OpenStreetMap e entre na sua conta para ver os Termos de Colaborador. Não precisa de aceitar os termos mas tem de os ver. oauth: - oauthorize: + authorize: title: Autorizar acesso à sua conta request_access: O programa %{app_name} está a pedir acesso à sua conta, %{user}. Por favor escolha as permissões que o programa pode ter. Pode escolher as @@ -1774,11 +1781,11 @@ pt-PT: allow_write_gpx: enviar trilhos GPS. allow_write_notes: alterar erros reportados. grant_access: Permitir Acesso - oauthorize_success: + authorize_success: title: Pedido de autorização permitido allowed: Forneceu ao programa %{app_name} o acesso à sua conta. verification: O código de verificação é %{code}. - oauthorize_failure: + authorize_failure: title: Falhou o pedido de autorização. denied: Anulou o acesso do programa %{app_name} à sua conta. invalid: O token de autorização não é válido. @@ -2022,6 +2029,7 @@ pt-PT: if set location: Indique a sua localização habitual na página %{settings_link} para ver outros editores nas redondezas. settings_link_text: configurações + my friends: Meus amigos no friends: Ainda não adicionou nenhum amigo. km away: '%{count}km de distância' m away: '%{count}m de distância' @@ -2228,7 +2236,7 @@ pt-PT: confirm: Confirmar fail: Não foi possível retirar o cargo `%{role}' ao utilizador `%{name}'. Por favor verifique se o utilizador e o cargo são válidos. - user_block: + user_blocks: model: non_moderator_update: Tem de ser um moderador para criar ou atualizar um bloqueio. non_moderator_revoke: Tem de ser um moderador para revogar um bloqueio. @@ -2292,20 +2300,6 @@ pt-PT: period: one: 1 hora other: '%{count} horas' - partial: - show: Mostrar - edit: Editar - revoke: Revogar! - confirm: Tem a certeza? - display_name: Utilizador Bloqueado - creator_name: Criador - reason: Motivo do bloqueio - status: Estado - revoker_name: Revogado por - not_revoked: (não revogado) - showing_page: Página %{page} - next: Seguinte » - previous: « Anterior helper: time_future: Termina em %{time}. until_login: Ativo até o utilizador entrar na conta. @@ -2336,8 +2330,22 @@ pt-PT: back: Ver todos os bloqueios revoker: 'Revogador:' needs_view: O utilizador necessita de autenticar-se antes deste bloqueio terminar. - note: - description: + block: + not_revoked: (não revogado) + show: Mostrar + edit: Editar + revoke: Revogar! + blocks: + display_name: Utilizador Bloqueado + creator_name: Criador + reason: Motivo do bloqueio + status: Estado + revoker_name: Revogado por + showing_page: Página %{page} + next: Seguinte » + previous: « Anterior + notes: + comment: opened_at_html: Criado %{when} atrás opened_at_by_html: Criado %{when} atrás por %{user} commented_at_html: Atualizado %{when} @@ -2469,58 +2477,62 @@ pt-PT: distance: Distância errors: no_route: Não foi encontrada uma rota entre os dois pontos. - no_place: Desculpe - não foi possível encontrar esse local. + no_place: Desculpe - não foi possível encontrar '%{place}'. instructions: continue_without_exit: Continuar em %{name} slight_right_without_exit: Virar ligeiramente à direita para %{name} offramp_right: Conduza até a rampa do lado direito offramp_right_with_exit: Tome a saída %{exit} à direita - offramp_right_with_exit_name: Tome a saída %{exit} à direita em %{name} + offramp_right_with_exit_name: Tome a saída %{exit} à direita para %{name} offramp_right_with_exit_directions: Tome a saída %{exit} à direita, em direção a %{directions} - offramp_right_with_exit_name_directions: Tome a saída %{exit} à direita na + offramp_right_with_exit_name_directions: Tome a saída %{exit} à direita para %{name}, em direção a %{directions} - offramp_right_with_name: Seguir a via de acesso à direita para %{name} - offramp_right_with_directions: Conduza até a rampa do lado direito em direção + offramp_right_with_name: Tome a via de acesso à direita para %{name} + offramp_right_with_directions: Tome a via de acesso à direita em direção a + %{directions} + offramp_right_with_name_directions: Tome a via de acesso à direita para %{name}, + em direção a %{directions} + onramp_right_without_exit: Vire à direita na via de acesso para %{name} + onramp_right_with_directions: Vire à direita, para a via de acesso em direção a %{directions} - offramp_right_with_name_directions: Conduza até a rampa do lado direito para - %{name}, em direção a %{directions} - onramp_right_without_exit: Virar à direita na via de acesso para %{name} - onramp_right_with_directions: Vire à direita na rampa em direção a %{directions} - onramp_right_with_name_directions: Vire à direita na rampa para %{name}, em - direção a %{directions} - onramp_right_without_directions: Vire à direita na rampa - endofroad_right_without_exit: No fim da estrada, virar à direita para %{name} - merge_right_without_exit: Encostar à via da direita para %{name} - fork_right_without_exit: Na bifurcação virar à direita para %{name} - turn_right_without_exit: Virar à direita para %{name} + onramp_right_with_name_directions: Vire à direita na via de acesso para %{name}, + em direção a %{directions} + onramp_right_without_directions: Vire à direita para a rampa + onramp_right: Vire à direita para a rampa + endofroad_right_without_exit: No fim da estrada, vire à direita para %{name} + merge_right_without_exit: Passe para a faixa da direita, para %{name} + fork_right_without_exit: Na bifurcação, vire à direita para %{name} + turn_right_without_exit: Vire à direita para %{name} sharp_right_without_exit: Curva acentuada à direita para %{name} uturn_without_exit: Inversão de marcha em %{name} sharp_left_without_exit: Curva acentuada à esquerda para %{name} - turn_left_without_exit: Virar à esquerda para %{name} - offramp_left: Conduza até a rampa do lado esquerdo + turn_left_without_exit: Vire à esquerda para %{name} + offramp_left: Tome a via de acesso do lado esquerdo offramp_left_with_exit: Tome a saída %{exit} à esquerda - offramp_left_with_exit_name: Tome a saída %{exit} à esquerda na %{name} + offramp_left_with_exit_name: Tome a saída %{exit} à esquerda para %{name} offramp_left_with_exit_directions: Tome a saída %{exit} à esquerda, em direção a %{directions} - offramp_left_with_exit_name_directions: Tome a saída %{exit} à esquerda em - %{name}, em direção a %{directions} - offramp_left_with_name: Seguir a via de acesso à esquerda para %{name} - offramp_left_with_directions: Conduza até a rampa do lado esquerdo em direção - a %{directions} - offramp_left_with_name_directions: Conduza até a tampa do lado esquerdo para + offramp_left_with_exit_name_directions: Tome a saída %{exit} à esquerda para %{name}, em direção a %{directions} - onramp_left_without_exit: Virar à esquerda na via de acesso para %{name} - onramp_left_with_directions: Vire à esquerda na rampa em direção a %{directions} - onramp_left_with_name_directions: Vire à esquerda na rampa para %{name}, em - direção a %{directions} - onramp_left_without_directions: Vire à esquerda na rampa - endofroad_left_without_exit: No fim da estrada virar à esquerda para %{name} - merge_left_without_exit: Encostar à via da esquerda para %{name} - fork_left_without_exit: Na bifurcação virar à esquerda para %{name} - slight_left_without_exit: Virar ligeiramente à esquerda para %{name} + offramp_left_with_name: Tome a via de acesso à esquerda para %{name} + offramp_left_with_directions: Tome a via de acesso à esquerda em direção a + %{directions} + offramp_left_with_name_directions: Tome a via de acesso à esquerda para %{name}, + em direção a %{directions} + onramp_left_without_exit: Vire à esquerda na via de acesso para %{name} + onramp_left_with_directions: Vire à esquerda na via de acesso em direção a + %{directions} + onramp_left_with_name_directions: Vire à esquerda na via de acesso para %{name}, + em direção a %{directions} + onramp_left_without_directions: Vire à esquerda para a rampa + onramp_left: Vire à esquerda para a rampa + endofroad_left_without_exit: No fim da estrada, vire à esquerda para %{name} + merge_left_without_exit: Passe para a faixa da esquerda, para %{name} + fork_left_without_exit: Na bifurcação, vire à esquerda para %{name} + slight_left_without_exit: Vire ligeiramente à esquerda para %{name} via_point_without_exit: (ponto de passagem) - follow_without_exit: Seguir %{name} + follow_without_exit: Siga %{name} roundabout_without_exit: Na rotunda, tome a saída para %{name} leave_roundabout_without_exit: Saia da rotunda - %{name} stay_roundabout_without_exit: Mantenha-se na rotunda - %{name} @@ -2528,14 +2540,14 @@ pt-PT: destination_without_exit: Chegada ao destino against_oneway_without_exit: Ir em contra-mão em %{name} end_oneway_without_exit: Fim do sentido único em %{name} - roundabout_with_exit: Na rotunda seguir a saída %{exit} para %{name} - turn_left_with_exit: Na rotunda, virar à esquerda para %{name} - slight_left_with_exit: Na rotunda, virar ligeiramente à esquerda para %{name} - turn_right_with_exit: Na rotunda, virar à direita para %{name} - slight_right_with_exit: Na rotunda, virar ligeiramente à direita para %{name} - continue_with_exit: Na rotunda, continuar em frente para %{name} - unnamed: sem nome - courtesy: Direções fornecidas por %{link} + roundabout_with_exit: Na rotunda, tome a saída %{exit} para %{name} + turn_left_with_exit: Na rotunda, vire à esquerda para %{name} + slight_left_with_exit: Na rotunda, vire ligeiramente à esquerda para %{name} + turn_right_with_exit: Na rotunda, vire à direita para %{name} + slight_right_with_exit: Na rotunda, vire ligeiramente à direita para %{name} + continue_with_exit: Na rotunda, continue em frente para %{name} + unnamed: estrada sem nome + courtesy: Indicações fornecidas por %{link} time: Tempo query: node: Nó @@ -2545,20 +2557,20 @@ pt-PT: error: 'Erro ao comunicar com %{server}: %{error}' timeout: Tempo limite excedido ao ligar a %{server} context: - directions_from: Direções a partir daqui - directions_to: Direções para aqui - add_note: Reportar um erro aqui + directions_from: Indicações a partir daqui + directions_to: Indicações para aqui + add_note: Adicionar uma nota aqui show_address: Mostrar endereço query_features: Consular elementos centre_map: Centrar mapa aqui - redaction: + redactions: edit: description: Descrição heading: Editar supressão submit: Gravar supressão title: Editar supressão index: - empty: Não existem supressões a mostrar. + empty: Não existem supressões para mostrar. heading: Lista de supressões title: Lista de supressões new: diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 1f9544d27..b85b70360 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -335,34 +335,6 @@ ro: ago: cu %{ago} în urmă newer_comments: Comentarii mai noi older_comments: Comentarii mai vechi - export: - title: Exportare - start: - area_to_export: Zona pentru export - manually_select: Selectați manual o altă zonă - format_to_export: Format de exportat - osm_xml_data: Date XML OpenStreetMap - licence: Licență - too_large: - planet: - title: Planeta OSM - overpass: - title: Overpass API - geofabrik: - title: Descărcări Geofabrik - other: - title: Alte surse - options: Opțiuni - format: Format - scale: Scară - max: max - image_size: Dimensiune imagine - zoom: Zoom - add_marker: Adaugă un marcator pe hartă - latitude: 'Lat:' - longitude: 'Long:' - output: Date de ieșire - export_button: Exportare geocoder: search: title: @@ -803,47 +775,6 @@ ro: text: Faceți o donație learn_more: Aflați mai multe more: Mai multe - license_page: - foreign: - title: Despre această traducere - native: - title: Despre această pagină - mapping_link: Începeți să cartografiați - legal_babble: - title_html: Drepturi de autor și licență - contributors_title_html: Contribuitorii noștri - infringement_title_html: Încălcarea drepturilor de autor - trademarks_title_html: Mărci înregistrate - welcome_page: - title: Bun venit! - basic_terms: - editor_html: Un editor este un program sau website pe care - îl puteți utiliza pentru a edita harta. - rules: - title: Reguli - questions: - title: Întrebări? - start_mapping: Începeți să cartografiați - add_a_note: - title:

        Nu aveți timp pentru editare? Adaugați o notă!

        - fixthemap: - how_to_help: - title:

        Cum poți ajuta

        - join_the_community: - title: Alăturați-vă comunității - help_page: - welcome: - url: Bun venit - title: Bine ați venit la OSM - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Ro:Beginners%27_guide - title: Ghidul începătorilor - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - about_page: - next: Înainte - partners_title: Parteneri notifier: diary_comment_notification: hi: Salut %{to_user}, @@ -907,12 +838,68 @@ ro: delete: deleted: Mesaj șters site: + about: + next: Înainte + partners_title: Parteneri + copyright: + foreign: + title: Despre această traducere + native: + title: Despre această pagină + mapping_link: Începeți să cartografiați + legal_babble: + title_html: Drepturi de autor și licență + contributors_title_html: Contribuitorii noștri + infringement_title_html: Încălcarea drepturilor de autor + trademarks_title_html: Mărci înregistrate index: permalink: Legătură permanentă shortlink: Legătură scurtată createnote: Adaugă o notă edit: user_page_link: pagină de utilizator + export: + title: Exportare + area_to_export: Zona pentru export + manually_select: Selectați manual o altă zonă + format_to_export: Format de exportat + osm_xml_data: Date XML OpenStreetMap + licence: Licență + too_large: + planet: + title: Planeta OSM + overpass: + title: Overpass API + geofabrik: + title: Descărcări Geofabrik + other: + title: Alte surse + options: Opțiuni + format: Format + scale: Scară + max: max + image_size: Dimensiune imagine + zoom: Zoom + add_marker: Adaugă un marcator pe hartă + latitude: 'Lat:' + longitude: 'Long:' + output: Date de ieșire + export_button: Exportare + fixthemap: + how_to_help: + title:

        Cum poți ajuta

        + join_the_community: + title: Alăturați-vă comunității + help: + welcome: + url: Bun venit + title: Bine ați venit la OSM + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Ro:Beginners%27_guide + title: Ghidul începătorilor + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org sidebar: search_results: Rezultatele căutării close: Închide @@ -935,6 +922,18 @@ ro: park: Parc markdown_help: title_html: Parsat cu Markdown + welcome: + title: Bun venit! + basic_terms: + editor_html: Un editor este un program sau website pe care + îl puteți utiliza pentru a edita harta. + rules: + title: Reguli + questions: + title: Întrebări? + start_mapping: Începeți să cartografiați + add_a_note: + title:

        Nu aveți timp pentru editare? Adaugați o notă!

        trace: edit: visibility: 'Vizibilitate:' @@ -952,7 +951,7 @@ ro: tags: 'Etichete:' visibility: 'Vizibilitate:' oauth: - oauthorize: + authorize: request_access: Aplicația %{app_name} cere acces la contul dumneavoastră, %{user}. Vă rugăm să alegeți care din următoarele permisiuni le poate avea aplicația. Puteți alege cât de multe sau cât de puține doriți. @@ -1005,11 +1004,11 @@ ro: preferred editor: 'Editor preferat:' gravatar: link text: Ce este aceasta? - user_block: - partial: - show: Arată + user_blocks: show: show: Arată + block: + show: Arată javascripts: share: title: Distribuie diff --git a/config/locales/ru.yml b/config/locales/ru.yml index a5820c5a7..a82be2ff2 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -29,6 +29,7 @@ # Author: Facenapalm # Author: FreeExec # Author: G0rn +# Author: Happy13241 # Author: Helpau # Author: Ignatus # Author: Iluvatar @@ -304,7 +305,7 @@ ru: list: title: Пакет правок title_user: Пакеты правок пользователя %{user} - title_friend: Пакеты правок ваших друзей + title_friend: Пакеты правок моих друзей title_nearby: Пакеты правок соседних участников empty: Пакеты правок не найдены. empty_area: Нет пакетов правок в этой области. @@ -334,7 +335,7 @@ ru: user_title: Дневник пользователя %{user} in_language_title: Дневниковые записи на языке %{language} new: Новая запись в дневнике - new_title: Сделать новую запись в своем дневнике + new_title: Сделать новую запись в моем дневнике no_entries: В дневнике нет записей recent_entries: Недавние записи older_entries: Более старые записи @@ -400,53 +401,6 @@ ru: ago: '%{ago} назад' newer_comments: Более новые комментарии older_comments: Более старые комментарии - export: - title: Экспортировать - start: - area_to_export: Область для экспорта - manually_select: Выделить другую область - format_to_export: Формат экспорта - osm_xml_data: Данные в формате OpenStreetMap XML - map_image: Изображение карты (показывает стандартный слой) - embeddable_html: Встраиваемый HTML - licence: Лицензия - export_details: Данные OpenStreetMap распространяются по лицензии - Open Data Commons Open Database License (ODbL). - too_large: - advice: 'Если этот экспорт пройдёт неудачно, пожалуйста, попробуйте один из - перечисленных ниже источников:' - body: 'Эта область слишком велика для экспорта в качестве данных в формате - OpenStreetMap XML. Пожалуйста, увеличьте масштаб, выберите меньшую область - или используйте один из перечисленных ниже других источников:' - planet: - title: Планета OSM - description: Регулярно обновляемые копии полной базы данных OpenStreetMap - overpass: - title: Overpass API - description: Скачать ограниченную этим прямоугольником область с зеркала - базы данных OpenStreetMap - geofabrik: - title: Загрузки Geofabrik - description: Регулярно обновляемые выгрузки континентов, стран и отдельных - городов - metro: - title: Выгрузки городов - description: Выгрузки крупных городов мира и окружающих их районов - other: - title: Другие источники - description: Дополнительные источники, перечисленные в вики OpenStreetMap - options: Настройки - format: Формат - scale: Масштаб - max: макс. - image_size: 'Размер изображения:' - zoom: Приблизить - add_marker: Добавить маркер на карту - latitude: 'Широта:' - longitude: 'Долгота:' - output: Результат - paste_html: HTML-код для встраивания на сайт - export_button: Экспортировать geocoder: search: title: @@ -1093,245 +1047,6 @@ ru: text: Поддержать проект learn_more: Узнать больше more: Ещё - license_page: - foreign: - title: Об этом переводе - text: В случае конфликта между этой переведённой страницей и %{english_original_link}, - английская страница должна иметь приоритет - english_link: английского оригинала - native: - title: Об этой странице - text: Вы просматриваете английскую версию страницы авторских прав. Вы можете - вернуться к %{native_link} этой страницы или можете прекратить чтение об авторских - правах и %{mapping_link}. - native_link: русской версии - mapping_link: начать картографирование - legal_babble: - title_html: Авторские права и лицензирование - intro_1_html: |- - OpenStreetMap® содержит свободные данные, распространяемые по лицензии Open Data - Commons Open Database License (ODbL) организацией OpenStreetMap Foundation (OSMF). - intro_2_html: Вы можете свободно копировать, распространять, передавать и дорабатывать - наши данные до тех пор, пока вы ссылаетесь на OpenStreetMap и его сообщество. - Если вы изменяете или берёте наши данные за основу, то вы должны распространять - результат только по такой же лицензии. Полный юридический - текст лицензии разъясняет ваши права и обязанности. - intro_3_html: Изготовленные нами изображения карты, также как и наша документация - распространяются по лицензии Creative - Commons Attribution-ShareAlike 2.0 (CC BY-SA). - credit_title_html: Как сослаться на OpenStreetMap - credit_1_html: Мы требуем, чтобы вы указывали «© Участники OpenStreetMap». - credit_2_html: Вы должны также ясно обозначить, что по лицензии Open Database - License распространяется база геоданных, в то время как готовые изображения - карты лицензированы под CC BY-SA. Вы можете сделать это, разместив ссылку - на эту страницу. Если - же вы распространяете OSM только в виде базы данных, мы можете размещать гиперссылку - напрямую на текст соответствующей лицензии. Если формат медиа делает использование - гиперссылок невозможным (как например бумажные карты), мы рассчитываем, что - вы направите читателей на openstreetmap.org (обозначив именно адрес сайта - вместо только лишь названия проекта, 'OpenStreetMap'), на opendatacommons.org, - и, при необходимости, на creativecommons.org. - credit_3_html: |- - В случае электронной карты с прокруткой, ссылка должна всегда находиться в углу окна просмотра карты. - Например: - attribution_example: - alt: Пример того, как сослаться на OpenStreetMap с веб-страницы - title: Пример указания авторства - more_title_html: Узнайте больше - more_1_html: Прочитайте больше об использовании наших данных и о том, как указывать - нас, на странице Лицензии - OSMF. - more_2_html: Хотя данные OpenStreetMap открыты для использования, мы не в состоянии - предоставить бесплатный API к нашим картам для сторонних разработчиков. См. - Правила использования - API, Правила - использования частей карты и Правила - использования службы Nominatim . - contributors_title_html: Кто вносит вклад в наш проект - contributors_intro_html: 'Участниками проекта являются тысячи отдельных людей. - Проект также включает данные под свободными лицензиями от национальных картографических - агентств и от других источников, среди которых:' - contributors_at_html: |- - Австрия. Данные города Вена (на условиях CC BY), а также земель Форарльберга и - Тироля (на условиях CC BY AT с дополнениями). - contributors_ca_html: Канада. Данные от GeoBase ®, GeoGratis - (© Департамент природных ресурсов Канады), CanVec (© Департамент природных - ресурсов Канады) и StatCan (Отдел Географии, Статистическое ведомство Канады). - contributors_fi_html: |- - Финляндия: Содержит данные из топографической базы национальной земельной службы Финляндии - и других наборов данных, под - лицензией NLSFI. - contributors_fr_html: 'Франция: Данные от Главного налогового - управления.' - contributors_nl_html: 'Нидерланды: Contains © AND data, - 2007 (www.and.com)' - contributors_nz_html: Новая Зеландия. Данные из сведений о - земельных ресурсах Новой Зеландии. Crown Copyright reserved. - contributors_si_html: 'Словения: содержит данные от Геодезического - и картографического управления и Министерства - сельского, лесного хозяйства и продовольствия (открытая информация Словении).' - contributors_za_html: |- - ЮАР: Имеются данные из - Главное управление: - Национальная геоинформационная система, права принадлежат государству. - contributors_gb_html: Великобритания. Данные Ordnance Survey - © Crown copyright и права на базы данных 2010-12. - contributors_footer_1_html: Более подробную информацию об этих и других источниках, - использованных для наполнения OpenStreetMap, смотрите на странице - Contributors вики-сервера OpenStreetMap. - contributors_footer_2_html: Включение данных в OpenStreetMap не означает, что - поставщик первичных данных каким-либо образом поддерживает OpenStreetMap, - предоставляет гарантии или принимает на себя какую-любую ответственность. - infringement_title_html: Нарушение авторских прав - infringement_1_html: Напоминаем участникам сообщества OSM, что добавление данных - из любых защищённых авторским правом источников (например, с Google Maps или - печатных карт) не должно проводиться без явного предварительного согласия - правообладателей. - infringement_2_html: |- - Если вы считаете, что защищённый авторским правом материал был неправомерно - добавлен к базе OpenStreetMap или к этому сайту, пожалуйста, обратитесь - к нашей процедуре - изымания или непосредственно на нашу - вебстраницу регистрации. - trademarks_title_html: Товарные знаки - trademarks_1_html: OpenStreetMap, логотип с увеличительным стеклом и State of - the Map являются зарегистрированными товарными знаками Фонда OpenStreetMap. - Если у вас есть вопросы об использовании этих знаков, пожалуйста, ознакомьтесь - с Политикой - в области товарных знаков. - welcome_page: - title: Добро пожаловать! - introduction_html: Добро пожаловать на OpenStreetMap, открытую и свободную карту - мира. Теперь, когда регистрация завершена, можно начинать картографировать. - Вот небольшая инструкция по самым важным вещам, которые необходимо знать. - whats_on_the_map: - title: Что находится на карте - on_html: |- - На карте OpenStreetMap расположены объекты, которые существуют в данный момент - - то есть миллионы зданий, дорог и других элементов местности. Вы вольны отмечать любые детали окружающего мира, которые вам интересны. - off_html: Карта не включает оценочные данные вроде рейтингов, бывшие - или гипотетические постройки, и информацию из источников, защищённых авторским - правом. Если вы не получили специального разрешения, не копируйте данные с - любых других карт. - basic_terms: - title: Небольшой словарь картографа - paragraph_1_html: У OpenStreetMap выработался локальный сленг. Вот несколько - понятий, которые стоит иметь ввиду. - editor_html: Редактор — это программа или веб-сайт, которые - можно использовать для редактирования карты. - node_html: Точка (node) — простейший элемент карты, вроде входа - в ресторан или отдельного дерева. - way_html: Линия — это отрезок или кривая, соединяющая точки, - обозначающая, к примеру, дорогу, ручей, контур озера или здания. - tag_html: Тег – это единица описания точки или линии, например - название ресторана или скоростное ограничение конкретной дороги. - rules: - title: Правила! - paragraph_1_html: В OpenStreetMap есть лишь несколько формальных правил, но - мы бы хотели, чтоб все участники сотрудничали и взаимодействовали с сообществом. - Если речь идёт о любых действиях, кроме редактирования вручную, пожалуйста, - прочитайте рекомендацияи по импорту - и автоматизированным - правкам и следуйте им в дальнейшем. - questions: - title: Остались вопросы? - paragraph_1_html: |- - У OpenStreetMap есть несколько ресурсов, где можно узнать о проекте, задать вопросы, или ответить на них, и совместно обсудить темы, касающиеся картографии. - Получите помощь здесь. - start_mapping: Начать картографировать - add_a_note: - title: Нет времени отредактировать карту? Добавьте заметку! - paragraph_1_html: Если нужно сделать небольшое уточнение, ради которого слишком - долго регистрироваться и изучать правила правки, можно просто добавить заметку - на карту. - paragraph_2_html: |- - Просто перейдите к карте и нажмите на иконку заметок: - . Это добавит на карту маркер, который можно перетаскивать. Просто напишите сообщение и нажмите "Добавить", и другие участники увидят его. - fixthemap: - title: Сообщить о проблеме / исправить карту - how_to_help: - title: Как помочь - join_the_community: - title: Присоединиться к сообществу - explanation_html: Если вы заметили проблему в данных нашей карты, например, - отсутствие дороги или вашего адреса, лучший способ для дальнейших действий - — вступить в сообщество OpenStreetMap и добавить или восстановить данные - самостоятельно. - add_a_note: - instructions_html: |- - Просто нажмите или на тот же значок на карте. - Это добавит на карту маркер, который можно передвигать перетаскиванием. Добавьте сообщение, а затем нажмите кнопку сохранения, и другие картографы увидят его. - other_concerns: - title: Другие проблемы - explanation_html: |- - Если у вас есть вопросы о том, как используются наши данные, или о содержимом сайта, обратитесь к нашей - странице авторских прав для получения дополнительной правовой информации или свяжитесь с соответствующий - рабочей группой OSMF. - help_page: - title: Получение справки - introduction: На OpenStreetMap есть несколько ресурсов, где можно узнать о проекте, - задать вопросы или ответить на них и совместно обсудить темы, касающиеся картографии. - welcome: - url: /welcome - title: Добро пожаловать на OSM - description: Начните с этого краткого руководства, охватывающего основы OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/RU:%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BD%D0%BE%D0%B2%D0%B8%D1%87%D0%BA%D0%B0 - title: Руководство для начинающих - description: Сообщество поддерживает руководство для начинающих. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Задать вопрос или найти ответы на сайте вопросов и ответов OSM. - mailing_lists: - title: Списки рассылок - description: Задайте вопрос или обсудите насущные вопросы в списке рассылок - (количество активных пользователей зависит от языка). - forums: - title: Форумы - description: Вопросы и обсуждения для тех, кто предпочитает форумы для общения. - irc: - title: IRC - description: Интерактивный чат на разных языках и на разные темы. - switch2osm: - title: switch2osm - description: Помощь компаниям и организациям в переходе на карты и другие ресурсы - OpenStreetMap. - wiki: - url: https://wiki.openstreetmap.org/wiki/RU:Заглавная_страница - title: wiki.openstreetmap.org - description: Посмотреть вики с подробной документацией по OSM - about_page: - next: Далее - copyright_html: ©Ð£Ñ‡Ð°ÑÑ‚ники
        OpenStreetMap - used_by: '%{name} предоставляет данные для тысяч сайтов, мобильных приложений - и устройств' - lede_text: OpenStreetMap создан сообществом картографов, которые добавляют и поддерживают - данные о дорогах, тропах, кафе, вокзалах и многих других объектах по всему миру. - local_knowledge_title: Знание местности - local_knowledge_html: OpenStreetMap придаёт особое значение знанию местности. - Участники также используют аэрофотоснимки, GPS-устройства и низкотехнологичных - карты земель для проверки того, что данные OSM являются точными и актуальными. - community_driven_title: Силами сообщества - community_driven_html: |- - Сообщество OpenStreetMap — разнообразное, неравнодушное и растущее с каждым днём. - Наши участники — это энтузиасты-картографы, ГИС-профессионалы, инженеры, содержащие серверы OSM, люди, отмечающие районы, пострадавшие от бедствий, и многие другие. - Чтобы узнать больше о сообществе, читайте блог OpenStreetMap , дневники участников, блоги сообщества и сайт Фонда OSM. - open_data_title: Открытые данные - open_data_html: 'OpenStreetMap являются открытыми данными: вы можете использовать - их для любых целей до тех пор, пока вы указываете авторские права OpenStreetMap - и его участников. Если вы изменяете данные или определенным образом основываетесь - на них, вы можете распространять свой результат только под той же лицензией. - Смотрите Авторские права и лицензирование - для более подробной информации.' - legal_title: Юридические вопросы - legal_html: |- - Этот веб-сайт и многие связанные с ними услуги находятся в ведении OpenStreetMap Foundation (OSMF), действующего от имени сообщества OSM. Использование предоставляемых OSMF услуг является предметом нашей политики конфиденциальностии «Приемлемой политики использования».
        Пожалуйста, свяжитесь с OSMF, если есть вопросы относительно лицензирования, авторских прав, либо другие правовые вопросы. -
        - Логотип OpenStreetMap в виде увеличительного стекла и логотип State of the Map — зарегистрированные товарные знаки организации OSMF. - partners_title: Партнёры notifier: diary_comment_notification: subject: Пользователь [OpenStreetMap] %{user} оставил комментарий в дневнике @@ -1535,6 +1250,145 @@ ru: delete: deleted: Сообщение удалено site: + about: + next: Далее + copyright_html: ©Ð£Ñ‡Ð°ÑÑ‚ники
        OpenStreetMap + used_by: '%{name} предоставляет данные для тысяч сайтов, мобильных приложений + и устройств' + lede_text: OpenStreetMap создан сообществом картографов, которые добавляют и + поддерживают данные о дорогах, тропах, кафе, вокзалах и многих других объектах + по всему миру. + local_knowledge_title: Знание местности + local_knowledge_html: OpenStreetMap придаёт особое значение знанию местности. + Участники также используют аэрофотоснимки, GPS-устройства и низкотехнологичных + карты земель для проверки того, что данные OSM являются точными и актуальными. + community_driven_title: Силами сообщества + community_driven_html: |- + Сообщество OpenStreetMap — разнообразное, неравнодушное и растущее с каждым днём. + Наши участники — это энтузиасты-картографы, ГИС-профессионалы, инженеры, содержащие серверы OSM, люди, отмечающие районы, пострадавшие от бедствий, и многие другие. + Чтобы узнать больше о сообществе, читайте блог OpenStreetMap , дневники участников, блоги сообщества и сайт Фонда OSM. + open_data_title: Открытые данные + open_data_html: 'OpenStreetMap являются открытыми данными: вы можете + использовать их для любых целей до тех пор, пока вы указываете авторские права + OpenStreetMap и его участников. Если вы изменяете данные или определенным + образом основываетесь на них, вы можете распространять свой результат только + под той же лицензией. Смотрите Авторские права + и лицензирование для более подробной информации.' + legal_title: Юридические вопросы + legal_html: |- + Этот веб-сайт и многие связанные с ними услуги находятся в ведении OpenStreetMap Foundation (OSMF), действующего от имени сообщества OSM. Использование предоставляемых OSMF услуг является предметом нашей политики конфиденциальностии «Приемлемой политики использования».
        Пожалуйста, свяжитесь с OSMF, если есть вопросы относительно лицензирования, авторских прав, либо другие правовые вопросы. +
        + Логотип OpenStreetMap в виде увеличительного стекла и логотип State of the Map — зарегистрированные товарные знаки организации OSMF. + partners_title: Партнёры + copyright: + foreign: + title: Об этом переводе + text: В случае конфликта между этой переведённой страницей и %{english_original_link}, + английская страница должна иметь приоритет + english_link: английского оригинала + native: + title: Об этой странице + text: Вы просматриваете английскую версию страницы авторских прав. Вы можете + вернуться к %{native_link} этой страницы или можете прекратить чтение об + авторских правах и %{mapping_link}. + native_link: русской версии + mapping_link: начать картографирование + legal_babble: + title_html: Авторские права и лицензирование + intro_1_html: |- + OpenStreetMap® содержит свободные данные, распространяемые по лицензии Open Data + Commons Open Database License (ODbL) организацией OpenStreetMap Foundation (OSMF). + intro_2_html: Вы можете свободно копировать, распространять, передавать и + дорабатывать наши данные до тех пор, пока вы ссылаетесь на OpenStreetMap + и его сообщество. Если вы изменяете или берёте наши данные за основу, то + вы должны распространять результат только по такой же лицензии. Полный юридический текст + лицензии разъясняет ваши права и обязанности. + intro_3_html: Изготовленные нами изображения карты, также как и наша документация + распространяются по лицензии Creative + Commons Attribution-ShareAlike 2.0 (CC BY-SA). + credit_title_html: Как сослаться на OpenStreetMap + credit_1_html: Мы требуем, чтобы вы указывали «© Участники OpenStreetMap». + credit_2_html: Вы должны также ясно обозначить, что по лицензии Open Database + License распространяется база геоданных, в то время как готовые изображения + карты лицензированы под CC BY-SA. Вы можете сделать это, разместив ссылку + на эту страницу. Если + же вы распространяете OSM только в виде базы данных, мы можете размещать + гиперссылку напрямую на текст соответствующей лицензии. Если формат медиа + делает использование гиперссылок невозможным (как например бумажные карты), + мы рассчитываем, что вы направите читателей на openstreetmap.org (обозначив + именно адрес сайта вместо только лишь названия проекта, 'OpenStreetMap'), + на opendatacommons.org, и, при необходимости, на creativecommons.org. + credit_3_html: |- + В случае электронной карты с прокруткой, ссылка должна всегда находиться в углу окна просмотра карты. + Например: + attribution_example: + alt: Пример того, как сослаться на OpenStreetMap с веб-страницы + title: Пример указания авторства + more_title_html: Узнайте больше + more_1_html: Прочитайте больше об использовании наших данных и о том, как + указывать нас, на странице + Лицензии OSMF. + more_2_html: Хотя данные OpenStreetMap открыты для использования, мы не в + состоянии предоставить бесплатный API к нашим картам для сторонних разработчиков. + См. Правила + использования API, Правила + использования частей карты и Правила + использования службы Nominatim . + contributors_title_html: Кто вносит вклад в наш проект + contributors_intro_html: 'Участниками проекта являются тысячи отдельных людей. + Проект также включает данные под свободными лицензиями от национальных картографических + агентств и от других источников, среди которых:' + contributors_at_html: |- + Австрия. Данные города Вена (на условиях CC BY), а также земель Форарльберга и + Тироля (на условиях CC BY AT с дополнениями). + contributors_ca_html: Канада. Данные от GeoBase ®, GeoGratis + (© Департамент природных ресурсов Канады), CanVec (© Департамент природных + ресурсов Канады) и StatCan (Отдел Географии, Статистическое ведомство Канады). + contributors_fi_html: |- + Финляндия: Содержит данные из топографической базы национальной земельной службы Финляндии + и других наборов данных, под + лицензией NLSFI. + contributors_fr_html: 'Франция: Данные от Главного налогового + управления.' + contributors_nl_html: 'Нидерланды: Contains © AND data, + 2007 (www.and.com)' + contributors_nz_html: Новая Зеландия. Данные из сведений + о земельных ресурсах Новой Зеландии. Crown Copyright reserved. + contributors_si_html: 'Словения: содержит данные от Геодезического + и картографического управления и Министерства + сельского, лесного хозяйства и продовольствия (открытая информация Словении).' + contributors_za_html: |- + ЮАР: Имеются данные из + Главное управление: + Национальная геоинформационная система, права принадлежат государству. + contributors_gb_html: Великобритания. Данные Ordnance Survey + © Crown copyright и права на базы данных 2010-12. + contributors_footer_1_html: Более подробную информацию об этих и других источниках, + использованных для наполнения OpenStreetMap, смотрите на странице + Contributors вики-сервера OpenStreetMap. + contributors_footer_2_html: Включение данных в OpenStreetMap не означает, + что поставщик первичных данных каким-либо образом поддерживает OpenStreetMap, + предоставляет гарантии или принимает на себя какую-любую ответственность. + infringement_title_html: Нарушение авторских прав + infringement_1_html: Напоминаем участникам сообщества OSM, что добавление + данных из любых защищённых авторским правом источников (например, с Google + Maps или печатных карт) не должно проводиться без явного предварительного + согласия правообладателей. + infringement_2_html: |- + Если вы считаете, что защищённый авторским правом материал был неправомерно + добавлен к базе OpenStreetMap или к этому сайту, пожалуйста, обратитесь + к нашей процедуре + изымания или непосредственно на нашу + вебстраницу регистрации. + trademarks_title_html: Товарные знаки + trademarks_1_html: OpenStreetMap, логотип с увеличительным стеклом и State + of the Map являются зарегистрированными товарными знаками Фонда OpenStreetMap. + Если у вас есть вопросы об использовании этих знаков, пожалуйста, ознакомьтесь + с Политикой + в области товарных знаков. index: js_1: Вы используете браузер, в котором не поддерживается или отключен JavaScript. js_2: OpenStreetMap использует JavaScript для отображения карт. @@ -1566,6 +1420,109 @@ ru: id_not_configured: iD не был настроен no_iframe_support: Ваш браузер не поддерживает рамки в HTML, а они нужны для этого режима. + export: + title: Экспортировать + area_to_export: Область для экспорта + manually_select: Выделить другую область + format_to_export: Формат экспорта + osm_xml_data: Данные в формате OpenStreetMap XML + map_image: Изображение карты (показывает стандартный слой) + embeddable_html: Встраиваемый HTML + licence: Лицензия + export_details: Данные OpenStreetMap распространяются по лицензии + Open Data Commons Open Database License (ODbL). + too_large: + advice: 'Если этот экспорт пройдёт неудачно, пожалуйста, попробуйте один из + перечисленных ниже источников:' + body: 'Эта область слишком велика для экспорта в качестве данных в формате + OpenStreetMap XML. Пожалуйста, увеличьте масштаб, выберите меньшую область + или используйте один из перечисленных ниже других источников:' + planet: + title: Планета OSM + description: Регулярно обновляемые копии полной базы данных OpenStreetMap + overpass: + title: Overpass API + description: Скачать ограниченную этим прямоугольником область с зеркала + базы данных OpenStreetMap + geofabrik: + title: Загрузки Geofabrik + description: Регулярно обновляемые выгрузки континентов, стран и отдельных + городов + metro: + title: Выгрузки городов + description: Выгрузки крупных городов мира и окружающих их районов + other: + title: Другие источники + description: Дополнительные источники, перечисленные в вики OpenStreetMap + options: Настройки + format: Формат + scale: Масштаб + max: макс. + image_size: 'Размер изображения:' + zoom: Приблизить + add_marker: Добавить маркер на карту + latitude: 'Широта:' + longitude: 'Долгота:' + output: Результат + paste_html: HTML-код для встраивания на сайт + export_button: Экспортировать + fixthemap: + title: Сообщить о проблеме / исправить карту + how_to_help: + title: Как помочь + join_the_community: + title: Присоединиться к сообществу + explanation_html: Если вы заметили проблему в данных нашей карты, например, + отсутствие дороги или вашего адреса, лучший способ для дальнейших действий + — вступить в сообщество OpenStreetMap и добавить или восстановить данные + самостоятельно. + add_a_note: + instructions_html: |- + Просто нажмите или на тот же значок на карте. + Это добавит на карту маркер, который можно передвигать перетаскиванием. Добавьте сообщение, а затем нажмите кнопку сохранения, и другие картографы увидят его. + other_concerns: + title: Другие проблемы + explanation_html: |- + Если у вас есть вопросы о том, как используются наши данные, или о содержимом сайта, обратитесь к нашей + странице авторских прав для получения дополнительной правовой информации или свяжитесь с соответствующий + рабочей группой OSMF. + help: + title: Получение справки + introduction: На OpenStreetMap есть несколько ресурсов, где можно узнать о проекте, + задать вопросы или ответить на них и совместно обсудить темы, касающиеся картографии. + welcome: + url: /welcome + title: Добро пожаловать на OSM + description: Начните с этого краткого руководства, охватывающего основы OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/RU:%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BD%D0%BE%D0%B2%D0%B8%D1%87%D0%BA%D0%B0 + title: Руководство для начинающих + description: Сообщество поддерживает руководство для начинающих. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Задать вопрос или найти ответы на сайте вопросов и ответов OSM. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Списки рассылок + description: Задайте вопрос или обсудите насущные вопросы в списке рассылок + (количество активных пользователей зависит от языка). + forums: + url: http://forum.openstreetmap.org/ + title: Форумы + description: Вопросы и обсуждения для тех, кто предпочитает форумы для общения. + irc: + title: IRC + description: Интерактивный чат на разных языках и на разные темы. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Помощь компаниям и организациям в переходе на карты и другие + ресурсы OpenStreetMap. + wiki: + url: https://wiki.openstreetmap.org/wiki/RU:Заглавная_страница + title: wiki.openstreetmap.org + description: Посмотреть вики с подробной документацией по OSM sidebar: search_results: Результаты поиска close: Закрыть @@ -1667,6 +1624,54 @@ ru: image: Изображение alt: Альтернативный текст url: URL + welcome: + title: Добро пожаловать! + introduction_html: Добро пожаловать на OpenStreetMap, открытую и свободную карту + мира. Теперь, когда регистрация завершена, можно начинать картографировать. + Вот небольшая инструкция по самым важным вещам, которые необходимо знать. + whats_on_the_map: + title: Что находится на карте + on_html: |- + На карте OpenStreetMap расположены объекты, которые существуют в данный момент - + то есть миллионы зданий, дорог и других элементов местности. Вы вольны отмечать любые детали окружающего мира, которые вам интересны. + off_html: Карта не включает оценочные данные вроде рейтингов, бывшие + или гипотетические постройки, и информацию из источников, защищённых авторским + правом. Если вы не получили специального разрешения, не копируйте данные + с любых других карт. + basic_terms: + title: Небольшой словарь картографа + paragraph_1_html: У OpenStreetMap выработался локальный сленг. Вот несколько + понятий, которые стоит иметь ввиду. + editor_html: Редактор — это программа или веб-сайт, которые + можно использовать для редактирования карты. + node_html: Точка (node) — простейший элемент карты, вроде + входа в ресторан или отдельного дерева. + way_html: Линия — это отрезок или кривая, соединяющая точки, + обозначающая, к примеру, дорогу, ручей, контур озера или здания. + tag_html: Тег – это единица описания точки или линии, например + название ресторана или скоростное ограничение конкретной дороги. + rules: + title: Правила! + paragraph_1_html: В OpenStreetMap есть лишь несколько формальных правил, но + мы бы хотели, чтоб все участники сотрудничали и взаимодействовали с сообществом. + Если речь идёт о любых действиях, кроме редактирования вручную, пожалуйста, + прочитайте рекомендацияи по импорту + и автоматизированным + правкам и следуйте им в дальнейшем. + questions: + title: Остались вопросы? + paragraph_1_html: |- + У OpenStreetMap есть несколько ресурсов, где можно узнать о проекте, задать вопросы, или ответить на них, и совместно обсудить темы, касающиеся картографии. + Получите помощь здесь. + start_mapping: Начать картографировать + add_a_note: + title: Нет времени отредактировать карту? Добавьте заметку! + paragraph_1_html: Если нужно сделать небольшое уточнение, ради которого слишком + долго регистрироваться и изучать правила правки, можно просто добавить заметку + на карту. + paragraph_2_html: |- + Просто перейдите к карте и нажмите на иконку заметок: + . Это добавит на карту маркер, который можно перетаскивать. Просто напишите сообщение и нажмите "Добавить", и другие участники увидят его. trace: visibility: private: Частный (доступно только анонимно, неупорядоченные точки) @@ -1713,6 +1718,7 @@ ru: trace_header: upload_trace: Загрузить треки see_all_traces: Показать все треки + see_my_traces: Показать мои треки traces_waiting: one: '%{count} ваш трек ожидает передачи на сервер. Пожалуйста, дождитесь окончания передачи этого трека, перед тем как начать передавать на сервер @@ -1741,6 +1747,7 @@ ru: delete_track: Удалить этот трек trace_not_found: Трек не найден! visibility: 'Видимость:' + confirm_delete: Удалить этот трек? trace_paging_nav: showing_page: Страница %{page} older: Более старые треки @@ -1763,6 +1770,7 @@ ru: map: карта list: public_traces: Общедоступные GPS-треки + my_traces: Мои GPS-треки public_traces_from: Общедоступные треки пользователя %{user} description: Просмотр последних загруженных GPS-треков tagged_with: 'с тегами: %{tags}' @@ -1799,7 +1807,7 @@ ru: через веб-интерфейс для просмотра условий участия. Вам не обязательно соглашаться, но вы должны просмотреть их. oauth: - oauthorize: + authorize: title: Разрешить доступ к вашей учётной записи request_access: Приложение %{app_name} запрашивает доступ к вашей учётной записи, %{user}. Пожалуйста, проверьте хотите ли вы, чтобы приложение имело следующие @@ -1813,11 +1821,11 @@ ru: allow_write_gpx: передавать GPS-треки на сервер allow_write_notes: изменять заметки grant_access: Предоставить доступ - oauthorize_success: + authorize_success: title: Запрос на авторизацию разрешён allowed: Вы предоставили приложению %{app_name} доступ к вашей учётной записи. verification: 'Проверочный код: %{code}.' - oauthorize_failure: + authorize_failure: title: Сбой запроса авторизации denied: Вы запретили приложению %{app_name} доступ к вашей учётной записи. invalid: Токен авторизации недействителен. @@ -2064,6 +2072,7 @@ ru: if set location: Укажите свое местоположение на вашей странице %{settings_link} чтобы увидеть своих соседей. settings_link_text: настройки + my friends: Друзья no friends: Вы не добавили ещё ни одного друга. km away: '%{count} км от вас' m away: '%{count} м от вас' @@ -2268,7 +2277,7 @@ ru: confirm: Подтвердить fail: Не удалось отозвать роль «%{role}» у пользователя «%{name}. Пожалуйста, проверьте, что пользователь и роль являются допустимыми. - user_block: + user_blocks: model: non_moderator_update: Нужно быть модератором, чтобы создать или изменить блокировку. non_moderator_revoke: Нужно быть модератором, чтобы снять блокировку. @@ -2336,20 +2345,6 @@ ru: period: one: 1 час other: '%{count} час.' - partial: - show: Показать - edit: Править - revoke: Разблокировать! - confirm: Вы уверены? - display_name: Заблокированный пользователь - creator_name: Автор - reason: Причина блокировки - status: Состояние - revoker_name: Разблокировал - not_revoked: (не разблокирован) - showing_page: Страница %{page} - next: Следующая → - previous: ← Предыдущая helper: time_future: Заканчивается через %{time}. until_login: Активно до тех пор, пока пользователь не войдёт в систему. @@ -2381,8 +2376,22 @@ ru: revoker: 'Разблокировавший:' needs_view: Пользователь должен зарегистрироваться, прежде чем это блокирование будет снято. - note: - description: + block: + not_revoked: (не разблокирован) + show: Показать + edit: Править + revoke: Разблокировать! + blocks: + display_name: Заблокированный пользователь + creator_name: Автор + reason: Причина блокировки + status: Состояние + revoker_name: Разблокировал + showing_page: Страница %{page} + next: Следующая → + previous: ← Предыдущая + notes: + comment: opened_at_html: Создана %{when} назад opened_at_by_html: Создана %{when} назад %{user} commented_at_html: Обновлена %{when} назад @@ -2513,7 +2522,7 @@ ru: distance: Расстояние errors: no_route: Не удалось найти маршрут между этими двумя точками. - no_place: К сожалению, данное место не найдено. + no_place: К сожалению невозможно определить '%{place}'. instructions: continue_without_exit: Продолжите по %{name} slight_right_without_exit: Плавно поверните направо на %{name} @@ -2533,6 +2542,7 @@ ru: onramp_right_with_name_directions: Сверните на правый въезд на %{name} в направлении %{directions} onramp_right_without_directions: Сверните на правый въезд + onramp_right: Сверните на въезд справа endofroad_right_without_exit: В конце дороги поверните направо на %{name} merge_right_without_exit: Перестройтесь правее на %{name} fork_right_without_exit: На развилке поверните направо на %{name} @@ -2557,6 +2567,7 @@ ru: onramp_left_with_name_directions: Сверните на левый въезд на %{name} в направлении %{directions} onramp_left_without_directions: Сверните на левый въезд + onramp_left: Сверните на въезд слева endofroad_left_without_exit: В конце дороги поверните налево на %{name} merge_left_without_exit: Перестройтесь левее на %{name} fork_left_without_exit: На развилке поверните налево на %{name} @@ -2593,7 +2604,7 @@ ru: show_address: Показать адрес query_features: Что здесь? centre_map: Центрировать карту - redaction: + redactions: edit: description: Описание heading: Редактировать исправление diff --git a/config/locales/scn.yml b/config/locales/scn.yml index db5813acd..cfa123dde 100644 --- a/config/locales/scn.yml +++ b/config/locales/scn.yml @@ -331,53 +331,6 @@ scn: ago: '%{ago} fa' newer_comments: Cummenti cchiù novi older_comments: Cummenti cchiù vecchî - export: - title: Espurtazzioni - start: - area_to_export: Ària d'espurtari - manually_select: Scegghî manualmenti n'ària diffirenti - format_to_export: Furmatu d'espurtari - osm_xml_data: Dati XML d'OpenStreetMap - map_image: Mmàggini dâ cartina (ammustra lu stratu standard) - embeddable_html: HTML ncurpuràbbili - licence: Licenza - export_details: Li dati d'OpenStreetMap sunnu sutta la licenza Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Si la spurtazzioni ccassupra nun arrinesci, poi pruvari cu una dî - fonti ccassutta:' - body: St'ària è troppu granni pi spurtàrila comu Dati XML di OpenStreetMap. - Pi favuri zumma, o scegghî n'ària cchiù piccidda, o puru pû scarricamentu - massizzu di dati adòpira una dî fonti ccassutta. - planet: - title: Pianeta OSM - description: Copî dâ basi di dati cumpreta di OpenStreetMap ca vèninu aggiurnati - rigularmenti - overpass: - title: API Overpass - description: Scàrrica stu riquatru dûn mirror dâ basi di dati d'OpenStreetMap - geofabrik: - title: Scarricamenti dâ Geofabrik - description: Astratti di cuntinenti, di paisi, e di na silizzioni di cità - ca vèninu aggiurnati rigularmenti - metro: - title: Metro Extracts - description: Estratti dî principali cità dû munnu e di l'àrii circustanti - other: - title: Àutri fonti - description: Àutri fonti elincati ntâ wiki d'OpenStreetMap - options: Opzioni - format: Furmatu - scale: Scala - max: max - image_size: Grannizza dâ mmàggini - zoom: Ngrannimentu - add_marker: Agghiunci un signu ntâ cartina - latitude: 'Lat:' - longitude: 'Lun:' - output: Pruduttu - paste_html: Ncodda l'HTML pi ncurpurari ntôn situ web - export_button: Esporta geocoder: search: title: @@ -950,261 +903,6 @@ scn: text: Fai na dunazzioni learn_more: Sapìrinni cchiossai more: Àutri cosi - license_page: - foreign: - title: A prupòsitu di sta traduzzioni - text: N casu di cunflittu tra di sta pàggina traduciuta e %{english_original_link}, - fa fidi la pàggina n ngrisi - english_link: l'origginali n lingua ngrisa - native: - title: A prupòsitu di sta pàggina - text: Stai taliannu la virsioni n lingua ngrisa dâ pàggina dû drittu d'auturi. - Poi turnari â %{native_link} di sta pàggina o puru poi finiri di nfurmàriti - supra ô drittu d'auturi e %{mapping_link}. - native_link: virsioni n sicilianu - mapping_link: accuminzari a mappari - legal_babble: - title_html: Dritti d'auturi e Licenza - intro_1_html: |- - OpenStreetMap® è fattu di dati graputi, cunciduti sutta â licenza Open Data - Commons Open Database License (ODbL) dâ Funnazzioni OpenStreetMap (OSMF). - intro_2_html: |- - Sî lìbbiru di cupiari, diffùnniri, trasmèttiri e adattari li nostri dati, fintantu chi l'attribbuisci a OpenStreetMap e ê sò cuntribbutura. Si canci li dati o l'adòpiri comu puntu di partenza, poi distribbuiri lu travagghiu risurtanti sulamenti sutta â stissa licenza. Lu còdici ligali - code cumpletu spiega quali sunnu li tò dritti e li tò rispunzabbilità. - intro_3_html: |- - La cartugrafìa ntê mattunelli dâ nostra cartina, e la nostra ducumintazzioni, sunnu sutta â licenza Creative - Commons Attribution-ShareAlike 2.0 (CC BY-SA). - credit_title_html: Comu s'attribbuisci a OpenStreetMap - credit_1_html: Addumannamu chi s'usa l'attribbuzzioni «© li cuntribbutura - d'OpenStreetMap». - credit_2_html: "S'havi a rènniri chiaru ca li dati sunnu misi a dispusizzioni - sutta dâ Open\nDatabase License, e si s’adòpiranu li mattunelli dâ nostra - cartina, chi la cartugrafìa è sutta dâ licenza CC BY-SA. Sta cosa si pò fari - mittennu nu culligamentu a \nsta - pàggina dû drittu d'auturi.\nComu altirnativa, e obbligatoriamenti quannu - si diffunni OSM sutta forma di dati, si ponnu mintuari li licenzi pi nomu - e cûn culligamentu direttu chi porta unni iddi. Nta ddi menzi unni li culligamenti - nun sunnu pussìbbili (p'esempiu ntâ carta stampata), suggiremu di mannari - li littura direttamenti unni openstreetmap.org (macari espannennu \n‘OpenStreetMap’ - a stu nnirizzu cumpletu), unni opendatacommons.org, e, quann'è oppurtunu, - unni\n creativecommons.org." - credit_3_html: |- - Nta na cartina elittrònica navigàbbili, l’attribbuzzioni avissi a spuntari nta l'àngulu dâ cartina. - P'esempiu: - attribution_example: - alt: Esempiu di comu s'attribbuisci a OpenStreetMap nta na pàggina web - title: Esempiu d'attribbuzzioni - more_title_html: Pi sapìrinni cchiossai - more_1_html: |- - Attrova àutri nfurmazzioni a prupòsitu di comu s'adòpiranu li nostri dati, e comu ni si duna attribbuzzioni, ntâ pàggina dâ licenza di l'OSMF e ntê addumannati friquenti ligali gistuti dâ cumunità. - more_2_html: "Macari si OpenStreetMap è fattu di dati graputi, nun putemu furniri - n'API cartugràfica gratùita ê sviluppatura di terza parti.\nTalìa la nostra - Pulìtica pi - l'utilizzu di l'API, \nla Pulìtica - pi l'utilizzu dî mattunelli\n e la Pulìtica - pi l'utilizzu di Nominatim." - contributors_title_html: Li nostri cuntribbutura - contributors_intro_html: 'Li nostri cuntribbutura sunnu migghiara di genti. - Pigghiamu macari dati cu licenza graputa furnuti di l''agginzìi cartugràfichi - nazziunali e d''àutri fonti, tra dî quali:' - contributors_at_html: "Austria: Cunteni dati dâ\nStadt - Wien (sutta a \nCC - BY),\nLand - Vorarlberg e\nLand Tirol (sutta a CC - BY AT cu canciamenti)." - contributors_ca_html: "Canadà: Cunteni dati di \nGeoBase®, - GeoGratis (© Department of Natural\nResources Canada), CanVec (© - Department of Natural\nResources Canada), e StatCan (Geography Division,\nStatistics - Canada)." - contributors_fi_html: "Finlannia: Cunteni dati dâ Basi di Dati - Topugràfica dû National Land Survey dâ Finlannia e d'àutri nzemi di dati, - sutta â \nLicenza - NLSFI." - contributors_fr_html: "Francia: Cunteni dati furnuti dâ \nDirection - Générale des Impôts." - contributors_nl_html: |- - Paisi Vasci: Cunteni dati © AND, 2007 - (www.and.com) - contributors_nz_html: "Nova Zilanna: Cunteni dati furnuti dâ - \nLand Information New Zealand. Crown Copyright reserved." - contributors_si_html: "Sluvenia: Counteni dati dâ \nSurveying - and Mapping Authority e dû\nMinisteru - di l’Agricultura, dî Furesti e di l’Alimintazzioni\n(nfurmazzioni pùbblichi - dâ Sluvenia)." - contributors_za_html: "Àfrica dû Sud: Cunteni dati dû \nChief Directorate:\nNational Geo-Spatial Information, - State copyright reserved." - contributors_gb_html: |- - Regnu Unitu: Cunteni dati di l’Ordnance - Survey © Crown copyright and database right - 2010-12. - contributors_footer_1_html: |- - Pi canùsciri àutri dittagghî supra a chisti e àutri fonti chi foru adupirati pi migghiurari OpenStreetMap, poi taliari la pàggina dî cuntribbutura supra â wiki di OpenStreetMap. - contributors_footer_2_html: La nclusioni dî dati nta OpenStreetMap nun ìmplica - ca lu sò furnituri origginali susteni OpenStreetMap, furnisci na quarchi garanzìa, - o accetta na quarchi rispunzabbilità. - infringement_title_html: Viulazzioni dû drittu d’auturi - infringement_1_html: Ê cuntribbutura d'OSM s'arricorda di nun agghiùnciri mai - dati chi vèninu di fonti prutetti dû drittu d'auturi (ad esempiu Google Maps - o puru li carti stampati) senza aviri n'auturizzazzioni splìcita dû titulari - dû drittu d'auturi. - infringement_2_html: "Si penzi chi fu junciutu di manera nun dèbbita matiriali - prutettu dû drittu d'auturi o ntâ basi di dati di OpenStreetMap o puru nta - stu situ, pi favuri fai rifirimentu â nostra\n prucidura - di cancillazzioni o puru signalinilu direttamenti pi menzu dû nostru \nmòdulu di signalazzioni n lìnia." - trademarks_title_html: Marchi riggistrati - trademarks_1_html: OpenStreetMap e lu logu dâ lenti di ngrannimentu sunnu marchi - riggistrati dâ Funnazzioni OpenStreetMap. Si hai quarchi addumannata supra - a l'utilizzu chi poi fari di sti marchi, la poi mannari ô Gruppu - di travagghiu dî licenzi. - welcome_page: - title: Bimminuti! - introduction_html: Bimminuti nta OpenStreetMap, la cartina dû munnu lìbbira e - canciàbbili. Ora chi siti scritti, siti pronti p'accuminzari a mappari. Ccà - c'è na guida chi spiega li cosi cchiù mpurtanti c'aviti a sapiri. - whats_on_the_map: - title: Zocchi c'è supra â cartina - on_html: |- - OpenStreetMap è nu postu pi mappari cosi chi sù veri e attuali - - cunteni miliuna d'edificî, strati e àutri dittagghî dî posti. Poi mappari zocchegghiè dû munnu riali chi ti ntiressa. - off_html: Chiddu chi mmeci nun c'è sunnu li dati d'opinioni comu p'esempiu - li giudizzî, l'elimenti chi nun esìstinu cchiù o chi sunnu iputètici, e li - dati chi vèninu di fonti prutetti dû drittu d'auturi. A menu chi nun hai n'auturizzazzioni - spiciali, nun cupiari mai di mappi n lìnia o di carta. - basic_terms: - title: Tèrmini funnamintali dâ mappatura - paragraph_1_html: OpenStreetMap havi nu sò linguaggiu particulari. Ccà ci sù - na para di palori chi ti ponnu aggiuvari. - editor_html: N'editor è nu prugramma o nu situ web chi poi - adupirari pi fari canciamenti ntâ cartina. - node_html: Un gruppu è nu puntu sìngulu supra â cartina, comu - p'esempiu nu ristoranti o n'àrvulu. - way_html: Nu caminu è na lìnia o puru n'ària, comu ponnu èssiri - na strata, un ciumi, un lacu o puru n'edificiu. - tag_html: |- - N’etichetta è na nfurmazzioni sìngula a prupòsitu dûn gruppu o dûn caminu, comu - p'esempiu lu nomu dûn ristoranti o lu lìmiti di vilucità di na strata. - rules: - title: Règuli! - paragraph_1_html: "OpenStreetMap havi picca règuli furmali, pirò n'aspittamu - chi tutti li participanti cullàbburanu e cumùnicanu câ cumunità. Si stai pigghiannu - a cunziddirazzioni di canciari la carta di quarchi manera àutra rispettu a - fàrilu a manu, pi favuri leggi e rispetta li lìnii guida ca poi attruvari - nta\nMpurtazzioni - e \nCanciamenti - autumatizzati." - questions: - title: Hai dumanni? - paragraph_1_html: |- - OpenStreetMap havi tanti risorsi pi nzignàrisi comu funziona lu pruggettu, pi fari addumannati e dari arrispunnuti, - e pi discùtiri d'argumenti c'arriguàrdanu la mappatura e ducumintàrili n cullabburazzioni. - Poi attruvari aiutu ccà. - start_mapping: Accumenza a mappari - add_a_note: - title: Nun hai tempu pi fari canciamenti? Allura agghiunci na nota! - paragraph_1_html: |- - Si voi sulamenti cunzata quarchi cosa piccidda, e nun hai lu tempu pi scrivìriti e nzignàriti a mappari, è - cchiù fàcili lassari na nota. - paragraph_2_html: |- - Abbasta chi vai supra â cartina e clicchi la cona dâ nota: - . Di sta manera s'agghiunci un signali supra â cartina, e lu poi spustari strascinànnulu. Agghiunci lu tò missaggiu, clicca sarva, e a stu puntu l'àutri mappatura dùnanu n'occhiata. - fixthemap: - title: Assignalari prubblemi / Cunzari la cartina - how_to_help: - title: Comu aiutari - join_the_community: - title: Tràsiri ntâ cumunità - explanation_html: Si t'addunasti chi c'è quarchi prubblema ntê dati dâ nostra - cartina, p'esempiu c'ammanca na strata o puru ca lu tò nnirizzu è sbagghiatu, - la megghiu cosa di fari è di scrivìriti ntâ cumunità d'OpenStreetMap e d'agghiùnciri - o cunzari li dati tu stissu. - add_a_note: - instructions_html: |- - Abbasta chi clicchi o puru la stissa cona ntâ carta. - Facennu accussì si piazza un signali supra â carta, chi si pò spustari strascinànnulu. - S'agghiunci nu propiu missaggiu, appoi si clicca «sarva», e l'àutri mappatura talìanu la situazzioni. - other_concerns: - title: Àutri dubbî - explanation_html: "Si hai dubbî a prupòsitu di comu vèninu adupirati li nostri - dati, o a prupòsitu dî cuntinuti, pi favuri cunzurta la nostra \npàggina - dû drittu d'auturi p'aviri àutri nfurmazzioni ligali, o puru cuntatta - lu \ngruppu di - travagghiu OSMF apprupiatu." - help_page: - title: Attruvari aiutu - introduction: |- - OpenStreetMap havi tanti risorsi pi nzignàrisi comu funziona lu pruggettu, pi fari addumannati e dari arrispunnuti, - e pi discùtiri d'argumenti c'arriguàrdanu la mappatura e ducumintàrili n cullabburazzioni. - welcome: - url: /welcome - title: Bimminuti nta OSM - description: Accumenza cu sta guida ràpida chi nzigna li funnamenti d'OpenStreetMap. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/IT:Beginners%27_guide - title: Guida dî principianti - description: Guida pî principianti mantinuta dâ cumunità. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Fai n'addumannata o cerca n'arrispunnuta ntô situ d'addumannati - e arrispunnuti d'OSM. - mailing_lists: - title: Mailing list - description: Fai addumannati o discuti di quistioni ntirissanti nta na gamma - ampia di mailing list spicializzati pi tema o pi riggiuni. - forums: - title: Forum - description: Addumannati e discussioni pi chiddi chi prifirìscinu na ntirfaccia - fatta a bacheca. - irc: - title: IRC - description: Chat ntirattiva nta tanti lingui e supra a tanti argumenti diffirenti. - switch2osm: - title: switch2osm - description: Aiutu pi mprisi e assuciazzioni chi vannu a passari ê cartini e - a l'àutri sirvizzi basati supra a OpenStreetMap. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Sfogghia lu wiki p'attruvari la ducumintazzioni apprufunnuta d'OSM. - about_page: - next: Appressu - copyright_html: ©Li cuntribbutura
        d'OpenStreetMap - used_by: '%{name} furnisci li dati giogràfici a migghiara di siti web, applicazzioni - mòbbili e apparecchi hardware' - lede_text: |- - OpenStreetMap veni custruutu di na cumunità di mappatura chi cuntribbuìscinu e mantèninu dati - c'arriguàrdanu strati, trazzeri, bar, stazzioni dî treni, e tanti àutri cosi, nta tuttu lu munnu. - local_knowledge_title: Canuscenza lucali - local_knowledge_html: OpenStreetMap metti l'accentu supra â canuscenza lucali. - Li cuntribbutura adòpiranu mmàggini aèrii, dispusitivi GPS, accussì comu cartini - a vascia ticnoluggìa, pi virificari chi OpenStreetMap è accuratu e arresta aggiurnatu. - community_driven_title: Guidatu dâ cumunità - community_driven_html: |- - La cumunità d'OpenStreetMap è varia, appassiunata, e crisci ogni jornu. - Tra dî nostri cuntribbutura ci sunnu mappatura entusiasti, prufissiunisti dî GIS, ncigneri chi mànnanu avanti li sirventi di OSM, vuluntarî chi màppanu li zoni afflitti dî disastri, e àutri genti ancora. - Pi sapiri cchiossai a prupòsitu dâ cumunità, talìa li diari di l'utenti, - li blog dâ cumunità, e lu situ dâ Funnazzioni OSM. - open_data_title: Dati graputi - open_data_html: 'OpenStreetMap è fattu di dati graputi: sî lìbbiru d''adupiràrili - pi quali mutivu voi voi, finattantu chi duni l''attribbuzzioni a OpenStreetMap - e li sò cuntribbutura. Si canci li dati o l''adòpiri comu puntu di partenza, - lu travagghiu chi nni risurta lu poi distribbuiri sulu sutta â stissa licenza. - Talìa la pàggina dû drittu d''auturi e dâ licenza - pî dittagghî.' - legal_title: Noti ligali - legal_html: "Stu situ e tanti àutri sirvizzî assuciati sunnu gistuti dâ \nFunnazzioni OpenStreetMap (OSMF) \npi cuntu - dâ cumunità.\n
        \nVi prigamu di cuntattari - l'OSMF \nsi aviti addumannati o àutri prubblemi a prupòsitu di licenza, - drittu d'auturi o àutri quistioni ligali." - partners_title: Cullabburatura notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} cummintau na vuci dû tò diariu' @@ -1395,6 +1093,152 @@ scn: delete: deleted: Missaggiu cancillatu site: + about: + next: Appressu + copyright_html: ©Li cuntribbutura
        d'OpenStreetMap + used_by: '%{name} furnisci li dati giogràfici a migghiara di siti web, applicazzioni + mòbbili e apparecchi hardware' + lede_text: |- + OpenStreetMap veni custruutu di na cumunità di mappatura chi cuntribbuìscinu e mantèninu dati + c'arriguàrdanu strati, trazzeri, bar, stazzioni dî treni, e tanti àutri cosi, nta tuttu lu munnu. + local_knowledge_title: Canuscenza lucali + local_knowledge_html: OpenStreetMap metti l'accentu supra â canuscenza lucali. + Li cuntribbutura adòpiranu mmàggini aèrii, dispusitivi GPS, accussì comu cartini + a vascia ticnoluggìa, pi virificari chi OpenStreetMap è accuratu e arresta + aggiurnatu. + community_driven_title: Guidatu dâ cumunità + community_driven_html: |- + La cumunità d'OpenStreetMap è varia, appassiunata, e crisci ogni jornu. + Tra dî nostri cuntribbutura ci sunnu mappatura entusiasti, prufissiunisti dî GIS, ncigneri chi mànnanu avanti li sirventi di OSM, vuluntarî chi màppanu li zoni afflitti dî disastri, e àutri genti ancora. + Pi sapiri cchiossai a prupòsitu dâ cumunità, talìa li diari di l'utenti, + li blog dâ cumunità, e lu situ dâ Funnazzioni OSM. + open_data_title: Dati graputi + open_data_html: 'OpenStreetMap è fattu di dati graputi: sî lìbbiru d''adupiràrili + pi quali mutivu voi voi, finattantu chi duni l''attribbuzzioni a OpenStreetMap + e li sò cuntribbutura. Si canci li dati o l''adòpiri comu puntu di partenza, + lu travagghiu chi nni risurta lu poi distribbuiri sulu sutta â stissa licenza. + Talìa la pàggina dû drittu d''auturi e dâ licenza + pî dittagghî.' + legal_title: Noti ligali + legal_html: "Stu situ e tanti àutri sirvizzî assuciati sunnu gistuti dâ \nFunnazzioni OpenStreetMap (OSMF) \npi + cuntu dâ cumunità.\n
        \nVi prigamu di cuntattari + l'OSMF \nsi aviti addumannati o àutri prubblemi a prupòsitu di licenza, + drittu d'auturi o àutri quistioni ligali." + partners_title: Cullabburatura + copyright: + foreign: + title: A prupòsitu di sta traduzzioni + text: N casu di cunflittu tra di sta pàggina traduciuta e %{english_original_link}, + fa fidi la pàggina n ngrisi + english_link: l'origginali n lingua ngrisa + native: + title: A prupòsitu di sta pàggina + text: Stai taliannu la virsioni n lingua ngrisa dâ pàggina dû drittu d'auturi. + Poi turnari â %{native_link} di sta pàggina o puru poi finiri di nfurmàriti + supra ô drittu d'auturi e %{mapping_link}. + native_link: virsioni n sicilianu + mapping_link: accuminzari a mappari + legal_babble: + title_html: Dritti d'auturi e Licenza + intro_1_html: |- + OpenStreetMap® è fattu di dati graputi, cunciduti sutta â licenza Open Data + Commons Open Database License (ODbL) dâ Funnazzioni OpenStreetMap (OSMF). + intro_2_html: |- + Sî lìbbiru di cupiari, diffùnniri, trasmèttiri e adattari li nostri dati, fintantu chi l'attribbuisci a OpenStreetMap e ê sò cuntribbutura. Si canci li dati o l'adòpiri comu puntu di partenza, poi distribbuiri lu travagghiu risurtanti sulamenti sutta â stissa licenza. Lu còdici ligali + code cumpletu spiega quali sunnu li tò dritti e li tò rispunzabbilità. + intro_3_html: |- + La cartugrafìa ntê mattunelli dâ nostra cartina, e la nostra ducumintazzioni, sunnu sutta â licenza Creative + Commons Attribution-ShareAlike 2.0 (CC BY-SA). + credit_title_html: Comu s'attribbuisci a OpenStreetMap + credit_1_html: Addumannamu chi s'usa l'attribbuzzioni «© li cuntribbutura + d'OpenStreetMap». + credit_2_html: "S'havi a rènniri chiaru ca li dati sunnu misi a dispusizzioni + sutta dâ Open\nDatabase License, e si s’adòpiranu li mattunelli dâ nostra + cartina, chi la cartugrafìa è sutta dâ licenza CC BY-SA. Sta cosa si pò + fari mittennu nu culligamentu a \nsta + pàggina dû drittu d'auturi.\nComu altirnativa, e obbligatoriamenti quannu + si diffunni OSM sutta forma di dati, si ponnu mintuari li licenzi pi nomu + e cûn culligamentu direttu chi porta unni iddi. Nta ddi menzi unni li culligamenti + nun sunnu pussìbbili (p'esempiu ntâ carta stampata), suggiremu di mannari + li littura direttamenti unni openstreetmap.org (macari espannennu \n‘OpenStreetMap’ + a stu nnirizzu cumpletu), unni opendatacommons.org, e, quann'è oppurtunu, + unni\n creativecommons.org." + credit_3_html: |- + Nta na cartina elittrònica navigàbbili, l’attribbuzzioni avissi a spuntari nta l'àngulu dâ cartina. + P'esempiu: + attribution_example: + alt: Esempiu di comu s'attribbuisci a OpenStreetMap nta na pàggina web + title: Esempiu d'attribbuzzioni + more_title_html: Pi sapìrinni cchiossai + more_1_html: |- + Attrova àutri nfurmazzioni a prupòsitu di comu s'adòpiranu li nostri dati, e comu ni si duna attribbuzzioni, ntâ pàggina dâ licenza di l'OSMF e ntê addumannati friquenti ligali gistuti dâ cumunità. + more_2_html: "Macari si OpenStreetMap è fattu di dati graputi, nun putemu + furniri n'API cartugràfica gratùita ê sviluppatura di terza parti.\nTalìa + la nostra Pulìtica + pi l'utilizzu di l'API, \nla Pulìtica + pi l'utilizzu dî mattunelli\n e la Pulìtica + pi l'utilizzu di Nominatim." + contributors_title_html: Li nostri cuntribbutura + contributors_intro_html: 'Li nostri cuntribbutura sunnu migghiara di genti. + Pigghiamu macari dati cu licenza graputa furnuti di l''agginzìi cartugràfichi + nazziunali e d''àutri fonti, tra dî quali:' + contributors_at_html: "Austria: Cunteni dati dâ\nStadt + Wien (sutta a \nCC + BY),\nLand + Vorarlberg e\nLand Tirol (sutta a CC + BY AT cu canciamenti)." + contributors_ca_html: "Canadà: Cunteni dati di \nGeoBase®, + GeoGratis (© Department of Natural\nResources Canada), CanVec (© + Department of Natural\nResources Canada), e StatCan (Geography Division,\nStatistics + Canada)." + contributors_fi_html: "Finlannia: Cunteni dati dâ Basi di + Dati Topugràfica dû National Land Survey dâ Finlannia e d'àutri nzemi di + dati, sutta â \nLicenza + NLSFI." + contributors_fr_html: "Francia: Cunteni dati furnuti dâ \nDirection + Générale des Impôts." + contributors_nl_html: |- + Paisi Vasci: Cunteni dati © AND, 2007 + (www.and.com) + contributors_nz_html: "Nova Zilanna: Cunteni dati furnuti + dâ \nLand Information New Zealand. Crown Copyright reserved." + contributors_si_html: "Sluvenia: Counteni dati dâ \nSurveying + and Mapping Authority e dû\nMinisteru + di l’Agricultura, dî Furesti e di l’Alimintazzioni\n(nfurmazzioni pùbblichi + dâ Sluvenia)." + contributors_za_html: "Àfrica dû Sud: Cunteni dati dû \nChief Directorate:\nNational Geo-Spatial + Information, State copyright reserved." + contributors_gb_html: |- + Regnu Unitu: Cunteni dati di l’Ordnance + Survey © Crown copyright and database right + 2010-12. + contributors_footer_1_html: |- + Pi canùsciri àutri dittagghî supra a chisti e àutri fonti chi foru adupirati pi migghiurari OpenStreetMap, poi taliari la pàggina dî cuntribbutura supra â wiki di OpenStreetMap. + contributors_footer_2_html: La nclusioni dî dati nta OpenStreetMap nun ìmplica + ca lu sò furnituri origginali susteni OpenStreetMap, furnisci na quarchi + garanzìa, o accetta na quarchi rispunzabbilità. + infringement_title_html: Viulazzioni dû drittu d’auturi + infringement_1_html: Ê cuntribbutura d'OSM s'arricorda di nun agghiùnciri + mai dati chi vèninu di fonti prutetti dû drittu d'auturi (ad esempiu Google + Maps o puru li carti stampati) senza aviri n'auturizzazzioni splìcita dû + titulari dû drittu d'auturi. + infringement_2_html: "Si penzi chi fu junciutu di manera nun dèbbita matiriali + prutettu dû drittu d'auturi o ntâ basi di dati di OpenStreetMap o puru nta + stu situ, pi favuri fai rifirimentu â nostra\n prucidura + di cancillazzioni o puru signalinilu direttamenti pi menzu dû nostru + \nmòdulu di signalazzioni n lìnia." + trademarks_title_html: Marchi riggistrati + trademarks_1_html: OpenStreetMap e lu logu dâ lenti di ngrannimentu sunnu + marchi riggistrati dâ Funnazzioni OpenStreetMap. Si hai quarchi addumannata + supra a l'utilizzu chi poi fari di sti marchi, la poi mannari ô Gruppu + di travagghiu dî licenzi. index: js_1: O stai adupirannu nu browser chi nun supporta lu JavaScript, o puru hai lu JavaScript disattivatu. @@ -1427,6 +1271,116 @@ scn: id_not_configured: iD nun fu cunfiguratu no_iframe_support: Lu tò browser nun supporta l'iframe di l'HTML, chi sunnu nicissarî pi sta funziunalità. + export: + title: Espurtazzioni + area_to_export: Ària d'espurtari + manually_select: Scegghî manualmenti n'ària diffirenti + format_to_export: Furmatu d'espurtari + osm_xml_data: Dati XML d'OpenStreetMap + map_image: Mmàggini dâ cartina (ammustra lu stratu standard) + embeddable_html: HTML ncurpuràbbili + licence: Licenza + export_details: Li dati d'OpenStreetMap sunnu sutta la licenza Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Si la spurtazzioni ccassupra nun arrinesci, poi pruvari cu una dî + fonti ccassutta:' + body: St'ària è troppu granni pi spurtàrila comu Dati XML di OpenStreetMap. + Pi favuri zumma, o scegghî n'ària cchiù piccidda, o puru pû scarricamentu + massizzu di dati adòpira una dî fonti ccassutta. + planet: + title: Pianeta OSM + description: Copî dâ basi di dati cumpreta di OpenStreetMap ca vèninu aggiurnati + rigularmenti + overpass: + title: API Overpass + description: Scàrrica stu riquatru dûn mirror dâ basi di dati d'OpenStreetMap + geofabrik: + title: Scarricamenti dâ Geofabrik + description: Astratti di cuntinenti, di paisi, e di na silizzioni di cità + ca vèninu aggiurnati rigularmenti + metro: + title: Metro Extracts + description: Estratti dî principali cità dû munnu e di l'àrii circustanti + other: + title: Àutri fonti + description: Àutri fonti elincati ntâ wiki d'OpenStreetMap + options: Opzioni + format: Furmatu + scale: Scala + max: max + image_size: Grannizza dâ mmàggini + zoom: Ngrannimentu + add_marker: Agghiunci un signu ntâ cartina + latitude: 'Lat:' + longitude: 'Lun:' + output: Pruduttu + paste_html: Ncodda l'HTML pi ncurpurari ntôn situ web + export_button: Esporta + fixthemap: + title: Assignalari prubblemi / Cunzari la cartina + how_to_help: + title: Comu aiutari + join_the_community: + title: Tràsiri ntâ cumunità + explanation_html: Si t'addunasti chi c'è quarchi prubblema ntê dati dâ nostra + cartina, p'esempiu c'ammanca na strata o puru ca lu tò nnirizzu è sbagghiatu, + la megghiu cosa di fari è di scrivìriti ntâ cumunità d'OpenStreetMap e + d'agghiùnciri o cunzari li dati tu stissu. + add_a_note: + instructions_html: |- + Abbasta chi clicchi o puru la stissa cona ntâ carta. + Facennu accussì si piazza un signali supra â carta, chi si pò spustari strascinànnulu. + S'agghiunci nu propiu missaggiu, appoi si clicca «sarva», e l'àutri mappatura talìanu la situazzioni. + other_concerns: + title: Àutri dubbî + explanation_html: "Si hai dubbî a prupòsitu di comu vèninu adupirati li nostri + dati, o a prupòsitu dî cuntinuti, pi favuri cunzurta la nostra \npàggina + dû drittu d'auturi p'aviri àutri nfurmazzioni ligali, o puru cuntatta + lu \ngruppu + di travagghiu OSMF apprupiatu." + help: + title: Attruvari aiutu + introduction: |- + OpenStreetMap havi tanti risorsi pi nzignàrisi comu funziona lu pruggettu, pi fari addumannati e dari arrispunnuti, + e pi discùtiri d'argumenti c'arriguàrdanu la mappatura e ducumintàrili n cullabburazzioni. + welcome: + url: /welcome + title: Bimminuti nta OSM + description: Accumenza cu sta guida ràpida chi nzigna li funnamenti d'OpenStreetMap. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/IT:Beginners%27_guide + title: Guida dî principianti + description: Guida pî principianti mantinuta dâ cumunità. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Fai n'addumannata o cerca n'arrispunnuta ntô situ d'addumannati + e arrispunnuti d'OSM. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: Mailing list + description: Fai addumannati o discuti di quistioni ntirissanti nta na gamma + ampia di mailing list spicializzati pi tema o pi riggiuni. + forums: + url: http://forum.openstreetmap.org/ + title: Forum + description: Addumannati e discussioni pi chiddi chi prifirìscinu na ntirfaccia + fatta a bacheca. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Chat ntirattiva nta tanti lingui e supra a tanti argumenti diffirenti. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Aiutu pi mprisi e assuciazzioni chi vannu a passari ê cartini + e a l'àutri sirvizzi basati supra a OpenStreetMap. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Sfogghia lu wiki p'attruvari la ducumintazzioni apprufunnuta + d'OSM. sidebar: search_results: Risurtati di l'arricerca close: Chiudi @@ -1519,6 +1473,57 @@ scn: image: Mmàggini alt: Testu altirnativu url: URL + welcome: + title: Bimminuti! + introduction_html: Bimminuti nta OpenStreetMap, la cartina dû munnu lìbbira + e canciàbbili. Ora chi siti scritti, siti pronti p'accuminzari a mappari. + Ccà c'è na guida chi spiega li cosi cchiù mpurtanti c'aviti a sapiri. + whats_on_the_map: + title: Zocchi c'è supra â cartina + on_html: |- + OpenStreetMap è nu postu pi mappari cosi chi sù veri e attuali - + cunteni miliuna d'edificî, strati e àutri dittagghî dî posti. Poi mappari zocchegghiè dû munnu riali chi ti ntiressa. + off_html: Chiddu chi mmeci nun c'è sunnu li dati d'opinioni comu + p'esempiu li giudizzî, l'elimenti chi nun esìstinu cchiù o chi sunnu iputètici, + e li dati chi vèninu di fonti prutetti dû drittu d'auturi. A menu chi nun + hai n'auturizzazzioni spiciali, nun cupiari mai di mappi n lìnia o di carta. + basic_terms: + title: Tèrmini funnamintali dâ mappatura + paragraph_1_html: OpenStreetMap havi nu sò linguaggiu particulari. Ccà ci + sù na para di palori chi ti ponnu aggiuvari. + editor_html: N'editor è nu prugramma o nu situ web chi poi + adupirari pi fari canciamenti ntâ cartina. + node_html: Un gruppu è nu puntu sìngulu supra â cartina, + comu p'esempiu nu ristoranti o n'àrvulu. + way_html: Nu caminu è na lìnia o puru n'ària, comu ponnu + èssiri na strata, un ciumi, un lacu o puru n'edificiu. + tag_html: |- + N’etichetta è na nfurmazzioni sìngula a prupòsitu dûn gruppu o dûn caminu, comu + p'esempiu lu nomu dûn ristoranti o lu lìmiti di vilucità di na strata. + rules: + title: Règuli! + paragraph_1_html: "OpenStreetMap havi picca règuli furmali, pirò n'aspittamu + chi tutti li participanti cullàbburanu e cumùnicanu câ cumunità. Si stai + pigghiannu a cunziddirazzioni di canciari la carta di quarchi manera àutra + rispettu a fàrilu a manu, pi favuri leggi e rispetta li lìnii guida ca poi + attruvari nta\nMpurtazzioni + e \nCanciamenti + autumatizzati." + questions: + title: Hai dumanni? + paragraph_1_html: |- + OpenStreetMap havi tanti risorsi pi nzignàrisi comu funziona lu pruggettu, pi fari addumannati e dari arrispunnuti, + e pi discùtiri d'argumenti c'arriguàrdanu la mappatura e ducumintàrili n cullabburazzioni. + Poi attruvari aiutu ccà. + start_mapping: Accumenza a mappari + add_a_note: + title: Nun hai tempu pi fari canciamenti? Allura agghiunci na nota! + paragraph_1_html: |- + Si voi sulamenti cunzata quarchi cosa piccidda, e nun hai lu tempu pi scrivìriti e nzignàriti a mappari, è + cchiù fàcili lassari na nota. + paragraph_2_html: |- + Abbasta chi vai supra â cartina e clicchi la cona dâ nota: + . Di sta manera s'agghiunci un signali supra â cartina, e lu poi spustari strascinànnulu. Agghiunci lu tò missaggiu, clicca sarva, e a stu puntu l'àutri mappatura dùnanu n'occhiata. trace: visibility: private: Privata (cunnivisu sulu comu anònimu, òrdini dî punti nun mantinutu) @@ -1648,7 +1653,7 @@ scn: trasi dû situ pi taliari li cunnizzioni di cuntribbuzzioni. Nun l'hai a accittari pi forza, pirò l'hai a taliari. oauth: - oauthorize: + authorize: title: Auturizzari l'accessu ô tò cuntu request_access: L'applicazzioni %{app_name} addumanna l'accessu ô tò cuntu, %{user}. Pi favuri cuntrolla si ti piaci chi l'applicazzioni havi accessu @@ -1662,11 +1667,11 @@ scn: allow_write_gpx: carricari li tracciati GPS. allow_write_notes: canciari li noti. grant_access: Duna l’accessu - oauthorize_success: + authorize_success: title: Addumannata d'auturizzazzioni cunciduta allowed: Cuncidisti l'accessu ô tò cuntu a l'applicazzioni %{app_name}. verification: Lu còdici di virìfica è %{code}. - oauthorize_failure: + authorize_failure: title: Addumannata d'auturizzazzioni nigata denied: Nijasti l'accessu ô tò cuntu a l'applicazzioni %{app_name}. invalid: Lu token d'auturizzazzioni nun è bonu. @@ -2094,7 +2099,7 @@ scn: confirm: Cunferma fail: Nun fu pussìbbili arrivucari lu rolu «%{role}» a l'utenti «%{name}». Pi favuri cuntrolla chi tantu l'utenti quantu lu rolu sunnu vàlidi. - user_block: + user_blocks: model: non_moderator_update: Hai a èssiri nu mudiraturi pi criari o canciari un bloccu. non_moderator_revoke: Hai a èssiri nu mudiraturi p'arrivucari un bloccu. @@ -2155,20 +2160,6 @@ scn: period: one: 1 ura other: '%{count} uri' - partial: - show: Ammustra - edit: Cancia - revoke: Rèvuca! - confirm: Sî sicuru? - display_name: Utenti bluccatu - creator_name: Criaturi - reason: Mutivu dû bloccu - status: Statu - revoker_name: Arrivucatu di - not_revoked: (nun arrivucatu) - showing_page: Pàggina %{page} - next: Appressu » - previous: « Arreri helper: time_future: Finisci tra %{time} until_login: Attivatu nfina a quannu l'utenti trasi. @@ -2197,8 +2188,22 @@ scn: back: Talìa tutti li blocchi revoker: 'Rivucaturi:' needs_view: L'utenti havi a tràsiri prima chi stu bloccu veni livatu. - note: - description: + block: + not_revoked: (nun arrivucatu) + show: Ammustra + edit: Cancia + revoke: Rèvuca! + blocks: + display_name: Utenti bluccatu + creator_name: Criaturi + reason: Mutivu dû bloccu + status: Statu + revoker_name: Arrivucatu di + showing_page: Pàggina %{page} + next: Appressu » + previous: « Arreri + notes: + comment: opened_at_html: Criatu %{when} fa opened_at_by_html: Criatu %{when} fa di %{user} commented_at_html: Aggiurnatu %{when} fa @@ -2350,7 +2355,7 @@ scn: nothing_found: Nuddu elimentu attruvatu error: 'Erruri ntô cuntattari %{server}: %{error}' timeout: Tempu scadutu ntô cuntattari %{server} - redaction: + redactions: edit: description: Discrizzioni heading: Cancia occultamentu diff --git a/config/locales/sco.yml b/config/locales/sco.yml index be400f9ac..d5a94ee0c 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -313,53 +313,6 @@ sco: ago: '%{ago} ago' newer_comments: Newer Comments older_comments: Aulder Comments - export: - title: Export - start: - area_to_export: Aurie tae Export - manually_select: Manually select a different aurie - format_to_export: Format tae Export - osm_xml_data: OpenStreetMap XML Data - map_image: Cairt Image (shaws staundart layer) - embeddable_html: Embeddable HTML - licence: Licence - export_details: OpenStreetMap data is licensed unner the Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'If the abuin export fails, please consider uisin ane o the soorces - leetit ablo:' - body: This aurie is too lairge tae be exportit as OpenStreetMap XML Data. - Please zuim in or select a smawer aurie, or uise ane o the soorces leetit - ablo for bulk data dounloads. - planet: - title: Planet OSM - description: Regularly-updated copies o the complete OpenStreetMap database - overpass: - title: Overpass API - description: Dounload this boondin box frae a mirror o the OpenStreetMap - database - geofabrik: - title: Geofabrik Dounloads - description: Regularly-updatit extracts o continents, kintras, an selectit - ceeties - metro: - title: Metro Extracts - description: Extracts for major warld ceeties an thair surroondin auries - other: - title: Ither Soorces - description: Addeetional soorces leetit on the OpenStreetMap wiki - options: Options - format: Format - scale: Scale - max: max - image_size: Image Size - zoom: Zuim - add_marker: Add a marker tae the cairt - latitude: 'Lat:' - longitude: 'Lon:' - output: Ootput - paste_html: Paste HTML tae embed in wabsteid - export_button: Export geocoder: search: title: @@ -891,129 +844,6 @@ sco: text: Make a Donation learn_more: Learn Mair more: Mair - license_page: - foreign: - title: Aboot this translation - text: In the event of a conflict atween this translatit page an %{english_original_link}, - the Inglis page shall tak precedence - english_link: the Inglis oreeginal - native: - title: Aboot this page - text: Ye are viewin the Inglis version o the copyricht page. Ye can gang back - tae the %{native_link} o this page or ye can stap readin aboot copyricht an - %{mapping_link}. - native_link: Scots version - mapping_link: stairt cairttin - legal_babble: - title_html: Copyricht an License - intro_1_html: |- - OpenStreetMap® is open data, licensed unner the Open Data - Commons Open Database License (ODbL) bi the OpenStreetMap Foundation (OSMF). - intro_2_html: |- - Ye are free tae copy, distribute, transmit an adapt oor data, - as lang as ye credit OpenStreetMap an its - contreibutors. If ye alter or big upon oor data, ye - mey distribute the result anly unner the same licence. The - full legal - code explains yer richts an responsibilities. - intro_3_html: |- - The cairtografie in oor cairt tiles, an oor documentation, are - licensed unner the Creative - Commons Attribution-ShareAlike 2.0 license (CC BY-SA). - credit_title_html: Hou tae credit OpenStreetMap - credit_1_html: |- - We require that ye uise the credit “© OpenStreetMap - contributors”. - credit_2_html: |- - Ye must an aa mak it clear that the data is available unner the Open - Database License, an if uisin oor cairt tiles, that the cairtografie is - licensed as CC BY-SA. Ye mey dae this bi airtin tae - this copyricht page. - Alternatively, an as a requirement if ye are distributin OSM in a - data form, ye can name an link directly tae the license(s). In media - whaur airtins are nae possible (e.g. printed wirks), we suggest ye - direct yer readers tae openstreetmap.org (perhaps bi expandin - 'OpenStreetMap' tae this full address), tae opendatacommons.org, an - if relevant, to creativecommons.org. - credit_3_html: |- - For a brousable electronic cairt, the credit should appear in the corner o the cairt. - For example: - attribution_example: - alt: Example o hou tae attribute OpenStreetMap on a wabpage - title: Attreibution example - more_title_html: Findin oot mair - more_1_html: |- - Read mair aboot uisin oor data, an hou tae credit us, at the OSMF Licence page an the commonty Legal - FAQ. - more_2_html: |- - Altho OpenStreetMap is open data, we cannae provide a - free-o-charge cairt API for third-party developers. - See oor API Uisage Policy, - Tile Uisage Policy - and Nominatim Uisage Policy. - contributors_title_html: Oor contreibutors - contributors_intro_html: |- - Oor contreibutors are thoosands o individuals. We an aa include - openly-licensed data frae naitional mappin agencies - an ither soorces, amang them: - contributors_at_html: |- - Austrick: Contains data frae - Stadt Wien (unner - CC BY), - Land Vorarlberg an - Land Tirol (unner CC BY AT wi amendments). - contributors_ca_html: |- - Canadae: Contains data frae - GeoBase®, GeoGratis (© Department o Naitural - Resoorces Canadae), CanVec (© Department o Naitural - Resoorces Canadae), an StatCan (Geografie Diveesion, - Stateestics Canadae). - contributors_fi_html: |- - Finland: Contains data frae the - Naitional Laund Survey o Finland's Topographic Database - an ither datasets, unner the - NLSFI License. - contributors_fr_html: |- - Fraunce: Contains data soorced frae - Direction Générale des Impôts. - contributors_nl_html: |- - Netherlands: Contains © AND data, 2007 - (www.and.com) - contributors_nz_html: |- - New Zealand: Contains data soorced frae - Land Information New Zealand. Crown Copyricht reserved. - infringement_title_html: Copyricht infringement - welcome_page: - title: Walcome! - introduction_html: |- - Walcome tae OpenStreetMap, the free an eeditable cairt o the warld. Nou that ye're signed - up, ye're aw set tae get stairtit cairttin. Here's a quick guide wi the maist important - things ye need tae ken. - whats_on_the_map: - title: Whit's on the Cairt - on_html: |- - OpenStreetMap is a place for cairttin things that are baith real an current - - it includes millions o biggins, roads, an ither details aboot places. Ye can cairt - whitever real-warld featurs are interestin tae ye. - off_html: |- - Whit it disna include is opinionatit data lik ratins, historical or - hypothetical featurs, an data frae copyrichtit soorces. Unless ye hae special - permission, dinna copy frae online or paper cairts. - fixthemap: - how_to_help: - join_the_community: - explanation_html: |- - Gif ye'v seen ae proablem wi oor map data, fer example ae road is missin or yer address, the best waa tae - proceed is tae jyn the OpenStreetMap communitie n eik or repair the data yersel. - other_concerns: - explanation_html: "Gif ye hae concerns aneat hou oor data is bein uised or aneat - the contents please see oor\ncopiericht page fer - mair legal information, or contact the appropriate \nOSMF - wairkin groop." notifier: lost_password_plain: hopefully_you: Someane (possibly ye) haes asked for the passwird tae be reset @@ -1032,6 +862,159 @@ sco: subject_other: '[OpenStreetMap] %{commenter} haes commentit on a note ye are interestit in' site: + copyright: + foreign: + title: Aboot this translation + text: In the event of a conflict atween this translatit page an %{english_original_link}, + the Inglis page shall tak precedence + english_link: the Inglis oreeginal + native: + title: Aboot this page + text: Ye are viewin the Inglis version o the copyricht page. Ye can gang back + tae the %{native_link} o this page or ye can stap readin aboot copyricht + an %{mapping_link}. + native_link: Scots version + mapping_link: stairt cairttin + legal_babble: + title_html: Copyricht an License + intro_1_html: |- + OpenStreetMap® is open data, licensed unner the Open Data + Commons Open Database License (ODbL) bi the OpenStreetMap Foundation (OSMF). + intro_2_html: |- + Ye are free tae copy, distribute, transmit an adapt oor data, + as lang as ye credit OpenStreetMap an its + contreibutors. If ye alter or big upon oor data, ye + mey distribute the result anly unner the same licence. The + full legal + code explains yer richts an responsibilities. + intro_3_html: |- + The cairtografie in oor cairt tiles, an oor documentation, are + licensed unner the Creative + Commons Attribution-ShareAlike 2.0 license (CC BY-SA). + credit_title_html: Hou tae credit OpenStreetMap + credit_1_html: |- + We require that ye uise the credit “© OpenStreetMap + contributors”. + credit_2_html: |- + Ye must an aa mak it clear that the data is available unner the Open + Database License, an if uisin oor cairt tiles, that the cairtografie is + licensed as CC BY-SA. Ye mey dae this bi airtin tae + this copyricht page. + Alternatively, an as a requirement if ye are distributin OSM in a + data form, ye can name an link directly tae the license(s). In media + whaur airtins are nae possible (e.g. printed wirks), we suggest ye + direct yer readers tae openstreetmap.org (perhaps bi expandin + 'OpenStreetMap' tae this full address), tae opendatacommons.org, an + if relevant, to creativecommons.org. + credit_3_html: |- + For a brousable electronic cairt, the credit should appear in the corner o the cairt. + For example: + attribution_example: + alt: Example o hou tae attribute OpenStreetMap on a wabpage + title: Attreibution example + more_title_html: Findin oot mair + more_1_html: |- + Read mair aboot uisin oor data, an hou tae credit us, at the OSMF Licence page an the commonty Legal + FAQ. + more_2_html: |- + Altho OpenStreetMap is open data, we cannae provide a + free-o-charge cairt API for third-party developers. + See oor API Uisage Policy, + Tile Uisage Policy + and Nominatim Uisage Policy. + contributors_title_html: Oor contreibutors + contributors_intro_html: |- + Oor contreibutors are thoosands o individuals. We an aa include + openly-licensed data frae naitional mappin agencies + an ither soorces, amang them: + contributors_at_html: |- + Austrick: Contains data frae + Stadt Wien (unner + CC BY), + Land Vorarlberg an + Land Tirol (unner CC BY AT wi amendments). + contributors_ca_html: |- + Canadae: Contains data frae + GeoBase®, GeoGratis (© Department o Naitural + Resoorces Canadae), CanVec (© Department o Naitural + Resoorces Canadae), an StatCan (Geografie Diveesion, + Stateestics Canadae). + contributors_fi_html: |- + Finland: Contains data frae the + Naitional Laund Survey o Finland's Topographic Database + an ither datasets, unner the + NLSFI License. + contributors_fr_html: |- + Fraunce: Contains data soorced frae + Direction Générale des Impôts. + contributors_nl_html: |- + Netherlands: Contains © AND data, 2007 + (www.and.com) + contributors_nz_html: |- + New Zealand: Contains data soorced frae + Land Information New Zealand. Crown Copyricht reserved. + infringement_title_html: Copyricht infringement + export: + title: Export + area_to_export: Aurie tae Export + manually_select: Manually select a different aurie + format_to_export: Format tae Export + osm_xml_data: OpenStreetMap XML Data + map_image: Cairt Image (shaws staundart layer) + embeddable_html: Embeddable HTML + licence: Licence + export_details: OpenStreetMap data is licensed unner the Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'If the abuin export fails, please consider uisin ane o the soorces + leetit ablo:' + body: This aurie is too lairge tae be exportit as OpenStreetMap XML Data. + Please zuim in or select a smawer aurie, or uise ane o the soorces leetit + ablo for bulk data dounloads. + planet: + title: Planet OSM + description: Regularly-updated copies o the complete OpenStreetMap database + overpass: + title: Overpass API + description: Dounload this boondin box frae a mirror o the OpenStreetMap + database + geofabrik: + title: Geofabrik Dounloads + description: Regularly-updatit extracts o continents, kintras, an selectit + ceeties + metro: + title: Metro Extracts + description: Extracts for major warld ceeties an thair surroondin auries + other: + title: Ither Soorces + description: Addeetional soorces leetit on the OpenStreetMap wiki + options: Options + format: Format + scale: Scale + max: max + image_size: Image Size + zoom: Zuim + add_marker: Add a marker tae the cairt + latitude: 'Lat:' + longitude: 'Lon:' + output: Ootput + paste_html: Paste HTML tae embed in wabsteid + export_button: Export + fixthemap: + how_to_help: + join_the_community: + explanation_html: |- + Gif ye'v seen ae proablem wi oor map data, fer example ae road is missin or yer address, the best waa tae + proceed is tae jyn the OpenStreetMap communitie n eik or repair the data yersel. + other_concerns: + explanation_html: "Gif ye hae concerns aneat hou oor data is bein uised or + aneat the contents please see oor\ncopiericht page + fer mair legal information, or contact the appropriate \nOSMF + wairkin groop." sidebar: search_results: Sairch Results search: @@ -1062,6 +1045,22 @@ sco: edit: Eedit markdown_help: headings: Heidins + welcome: + title: Walcome! + introduction_html: |- + Walcome tae OpenStreetMap, the free an eeditable cairt o the warld. Nou that ye're signed + up, ye're aw set tae get stairtit cairttin. Here's a quick guide wi the maist important + things ye need tae ken. + whats_on_the_map: + title: Whit's on the Cairt + on_html: |- + OpenStreetMap is a place for cairttin things that are baith real an current - + it includes millions o biggins, roads, an ither details aboot places. Ye can cairt + whitever real-warld featurs are interestin tae ye. + off_html: |- + Whit it disna include is opinionatit data lik ratins, historical or + hypothetical featurs, an data frae copyrichtit soorces. Unless ye hae special + permission, dinna copy frae online or paper cairts. trace: create: upload_trace: Uplaid GPS Trace @@ -1167,7 +1166,7 @@ sco: show_address: Shaw address query_features: Query featurs centre_map: Centre cairt here - redaction: + redactions: edit: description: Description heading: Eedit redaction diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 3da29052f..f2b3ef527 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -323,51 +323,6 @@ sk: ago: pred %{ago} newer_comments: NovÅ¡ie komentáre older_comments: StarÅ¡ie komentáre - export: - title: Export - start: - area_to_export: OblasÅ¥ pre export - manually_select: Manuálne vybraÅ¥ inú oblasÅ¥ - format_to_export: Formát pre export - osm_xml_data: OpenStreetMap XML dáta - map_image: Obrázok (obsahuje Å¡tandardné vrstvy) - embeddable_html: Vložiteľné HTML - licence: Licencia - export_details: Údaje OpenStreetMap sú k dispozícii pod licenciou Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Ak tento export zlyhá, zvážte použitie niektorého z nasledovných - zdrojov:' - body: Táto oblasÅ¥ je príliÅ¡ veľká pre export OpenStreetMap XML dát. Priblížte - prosím mapu, alebo vyberte menÅ¡iu oblasÅ¥. - planet: - title: Planéta OSM - description: Pravidelne aktualizované kópie kompletnej databázy OpenStreetMap - overpass: - title: Overpass API - description: StiahnuÅ¥ túto oblasÅ¥ z repliky databázy OpenStreetMap - geofabrik: - title: Geofabrik na stiahnutie - description: Pravidelne aktualizované extrakty svetadielov, krajín a vybraných - miest - metro: - title: Metro extrakty - description: Extrakty pre hlavné svetové mestá a ich okolie - other: - title: Iné zdroje - description: ĎalÅ¡ie zdroje sú uvedené na OpenStreetMap wiki - options: Možnosti - format: Formát - scale: Mierka - max: max - image_size: Rozmery obrázku - zoom: Zväčšenie - add_marker: PridaÅ¥ do mapy značku - latitude: 'Zem.šírka:' - longitude: 'Zem. dĺžka:' - output: Výstup - paste_html: Pre vloženie do stránky použite toto HTML - export_button: Export geocoder: search: title: @@ -918,150 +873,6 @@ sk: text: Darovanie learn_more: Viac info more: ĎalÅ¡ie - license_page: - foreign: - title: O tomto preklade - text: V prípade rozporu mezi touto preloženou verziou a %{english_original_link} - má anglická stránka prednosÅ¥ - english_link: anglickým originálom - native: - title: O tejto stránke - text: Pozeráte si anglickú verziu stránky o autorských právach. Môžete sa vrátiÅ¥ - na %{native_link} stránky alebo si prestaÅ¥ čítaÅ¥ o copyrightoch a %{mapping_link}. - native_link: slovenskú verziu - mapping_link: začaÅ¥ mapovaÅ¥ - legal_babble: - title_html: Autorské práva a licencia - intro_1_html: OpenStreetMap sú slobodné dáta, ponúkané za podmienok - licencie Open Data Commons - Open Database License (ODbL). - intro_2_html: ' Môžete kopírovaÅ¥, distribuovaÅ¥, oznamovaÅ¥ verejnosti a upravovaÅ¥ - naÅ¡e dáta, pokiaľ ako zdroj uvediete „OpenStreetMap a jeho prispievatelia“. - Ak naÅ¡e mapy alebo dáta budete upravovaÅ¥ alebo ich použijete vo svojom diele, - musíte výsledné dielo šíriÅ¥ pod rovnakou licenciou. VaÅ¡e práva a povinnosti - sú vysvetlené v plnom - znení licenčnej zmluvy.' - intro_3_html: Kartografia v naÅ¡ich mapových podkladoch a naÅ¡a dokumentácia je - zverejnená pod licenciou Creative - Commons Uveďte autora – Zachovajte licenciu 2.0 (CC-BY-SA). - credit_title_html: Ako uvádzaÅ¥ OpenStreetMap - credit_1_html: Vyžadujeme uviesÅ¥ „© Prispievatelia OpenStreetMap“. - credit_2_html: |- - Musíte tiež zdôrazniÅ¥, že údaje sú dostupné pod licenciou Open Database Licence, a pokiaľ používate naÅ¡e mapové dlaždice, že ich kartografický obsah je licencovaný pod CC-BY-SA. Uvedené môžete splniÅ¥ hypertextovým odkazom na tuto stránku. - - Alternatívne môžete (a ak šírite OSM v dátovej forme, tak musíte) vymenovaÅ¥ licencie a uviesÅ¥ hypertextové odkazy priamo na ne. Pri médiách, kde hypertextové odkazy nie sú možné (napr. tlačené diela), odporúčame, aby ste nasmerovali čitateľov na openstreetmap.org (napríklad rozšírením slova 'OpenStreetMap' na túto plnú adresu), na opendatacommons.org a na creativecommons.org (ak je to relevenantné). - credit_3_html: |- - V prípade interaktívnej elektronickej mapy by autorstvo malo byÅ¥ uvedené v rohu mapy. - Napríklad: - attribution_example: - alt: Príklad, ako uvádzaÅ¥ autorstvo OpenStreetMap na webovej stránke - title: Príklad uvedenia autorstva - more_title_html: ĎalÅ¡ie informácie - more_1_html: O používaní naÅ¡ich dát a spôsobe citovania, sa môžete dočítaÅ¥ viac - v naÅ¡ich Často kladených - právnych otázkach. - more_2_html: |- - Hoci OpenStreetMap tvorí slobodné dáta, nemôžeme zadarmo poskytovaÅ¥ tretím stranám mapové API. - Pozrite naÅ¡e Pravidlá použitia API, Pravidlá použitia mapových dlaždíc a Pravidlá použitia nástroja Nominatim. - contributors_title_html: NaÅ¡i prispievatelia - contributors_intro_html: 'NaÅ¡i prispievatelia sú tisícky jednotlivcov. Máme - aj dáta so slobodnou licenciou od národných geografických inÅ¡titúcií či iných - zdrojov, medzi nimi:' - contributors_at_html: |- - Rakúsko: Obsahuje dáta od - mesta Viedeň (pod licenciou - CC BY), - krajiny Vorarlberg a - krajiny Tirol (pod licenciou CC-BY AT s úpravami). - contributors_ca_html: 'Kanada: Obsahuje dáta z GeoBase ®, GeoGratis - (© Department of Natural Resources Canada), CanVec (© Department of Natural - Resources Canada) a StatCan (Geography Division, Statistics Canada).' - contributors_fr_html: 'Francúzsko: Obsahuje dáta pochádzajúce - z Direction Générale des impôts.' - contributors_nl_html: |- - Holandsko: obsahuje © AND dát, 2007 - (www.and.com) - contributors_nz_html: 'Nový Zéland: Obsahuje dáta pochádzajúce - z Land Information New Zealand. Crown Copyright reserved.' - contributors_za_html: 'Juhoafrická republika: Obsahuje dáta - pochádzajúce z Chief Directorate: National - Geo-Spatial Information, State copyright reserved.' - contributors_gb_html: 'Spojené kráľovstvo: Obsahuje dáta Ordnance - Survey © Crown copyright a právo k databáze 2010-12.' - contributors_footer_1_html: |- - Podrobnosti o týchto a ďalších zdrojoch, ktoré boli použité pre vylepÅ¡enie OpenStreetMap, nájdete na stránke Contributors na OpenStreetMap wiki. - contributors_footer_2_html: ' Zahrnutie dát do OpenStreetMap neznamená, že - pôvodný poskytovateľ dát podporuje OpenStreetMap, ponúka akúkoľvek záruku, - alebo prijíma akúkoľvek zodpovednosÅ¥.' - infringement_title_html: PoruÅ¡enie autorských práv - infringement_1_html: Prispievateľom OSM pripomíname, že by nikdy nemali pridávaÅ¥ - dáta zo zdrojov chránených autorským právom (napr. Google Maps či tlačené - mapy) bez výslovného súhlasu držiteľov práv. - infringement_2_html: Ak sa domnievate, že materiál podliehajúci autorským právam - bol neoprávnene pridaný do databázy OpenStreetMap alebo na tieto stránky, - prosíme vás, aby ste si pozreli náš postup - odstraňovania alebo podajte žiadosÅ¥ priamo na stránke - pre podávanie sÅ¥ažností. - welcome_page: - title: Vitajte! - introduction_html: Vitajte na OpenStreetMap, slobodnej a upravovateľnej mape sveta. - Teraz, keď ste zaregistrovaní, môžete začaÅ¥ mapovaÅ¥. Tu je stručný prehľad najdôležitejších, - ktoré potrebujete vedieÅ¥. - whats_on_the_map: - title: Čo patrí do mapy - on_html: OpenStreetMap je miesto pre mapovanie vecí, ktoré sú zároveň reálne - aj aktuálne - obsahuje milióny budov, ciest a ďalÅ¡ie podrobnosti o miestach. - Môžete mapovaÅ¥ čokoľvek, čo vás zaujíma. - off_html: Čo nezahŕňa sú názory ako hodnotenia, historické či hypotetické - objekty a údaje zo zdrojov chránených autorským právom. Pokiaľ nemáte Å¡peciálne - oprávnenie, nekopírujte z online nebo papierových máp. - basic_terms: - title: Základné pojmy pre mapovanie - paragraph_1_html: OpenStreetMap má svoj vlastný žargón. Tu je niekoľko kľúčových - slov, ktoré vám prídu vhod. - editor_html: Editor je program alebo webovej stránky pomocou - ktorej upravujete mapu. - node_html: uzol je bod na mape, napr. jedna reÅ¡taurácia alebo - strom. - way_html: Cesta je čiara alebo oblasÅ¥, ako cesty, vodné toky, - jazerá alebo budovy. - tag_html: Značka je trochu údajov o uzle alebo ceste, napr. - názov reÅ¡taurácie alebo rýchlostný limit cesty. - questions: - title: Akékoľvek otázky? - paragraph_1_html: Potrebujete pomoc s mapovaním alebo vám nie je jasné, ako - OpenStreetMap používaÅ¥? Odpovede na svoje otázky môžete získaÅ¥ na webe - s nápovedou. - start_mapping: ZačaÅ¥ mapovaÅ¥ - add_a_note: - title: Nie je čas upravovaÅ¥? Pridajte poznámku! - paragraph_1_html: Pokiaľ chcete len opraviÅ¥ nejakú drobnosÅ¥ a nemáte čas sa - registrovaÅ¥ a učiÅ¥ sa upravovaÅ¥, môžete jednoducho pridaÅ¥ poznámku. - fixthemap: - title: NahlásiÅ¥ problém / OpraviÅ¥ mapu - how_to_help: - title: Ako pomôcÅ¥ - join_the_community: - title: Pripojte sa ku komunite - help_page: - welcome: - title: Vitajte na OSM - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Sk:Beginners%27_guide - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - forums: - title: Fóra - irc: - title: IRC - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - about_page: - next: Ďalej - partners_title: Partneri notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} okomentoval záznam vo vaÅ¡om denníku' @@ -1213,6 +1024,95 @@ sk: delete: deleted: Správa vymazaná site: + about: + next: Ďalej + partners_title: Partneri + copyright: + foreign: + title: O tomto preklade + text: V prípade rozporu mezi touto preloženou verziou a %{english_original_link} + má anglická stránka prednosÅ¥ + english_link: anglickým originálom + native: + title: O tejto stránke + text: Pozeráte si anglickú verziu stránky o autorských právach. Môžete sa + vrátiÅ¥ na %{native_link} stránky alebo si prestaÅ¥ čítaÅ¥ o copyrightoch a + %{mapping_link}. + native_link: slovenskú verziu + mapping_link: začaÅ¥ mapovaÅ¥ + legal_babble: + title_html: Autorské práva a licencia + intro_1_html: OpenStreetMap sú slobodné dáta, ponúkané za podmienok + licencie Open Data Commons + Open Database License (ODbL). + intro_2_html: ' Môžete kopírovaÅ¥, distribuovaÅ¥, oznamovaÅ¥ verejnosti a upravovaÅ¥ + naÅ¡e dáta, pokiaľ ako zdroj uvediete „OpenStreetMap a jeho prispievatelia“. + Ak naÅ¡e mapy alebo dáta budete upravovaÅ¥ alebo ich použijete vo svojom diele, + musíte výsledné dielo šíriÅ¥ pod rovnakou licenciou. VaÅ¡e práva a povinnosti + sú vysvetlené v plnom + znení licenčnej zmluvy.' + intro_3_html: Kartografia v naÅ¡ich mapových podkladoch a naÅ¡a dokumentácia + je zverejnená pod licenciou Creative + Commons Uveďte autora – Zachovajte licenciu 2.0 (CC-BY-SA). + credit_title_html: Ako uvádzaÅ¥ OpenStreetMap + credit_1_html: Vyžadujeme uviesÅ¥ „© Prispievatelia OpenStreetMap“. + credit_2_html: |- + Musíte tiež zdôrazniÅ¥, že údaje sú dostupné pod licenciou Open Database Licence, a pokiaľ používate naÅ¡e mapové dlaždice, že ich kartografický obsah je licencovaný pod CC-BY-SA. Uvedené môžete splniÅ¥ hypertextovým odkazom na tuto stránku. + + Alternatívne môžete (a ak šírite OSM v dátovej forme, tak musíte) vymenovaÅ¥ licencie a uviesÅ¥ hypertextové odkazy priamo na ne. Pri médiách, kde hypertextové odkazy nie sú možné (napr. tlačené diela), odporúčame, aby ste nasmerovali čitateľov na openstreetmap.org (napríklad rozšírením slova 'OpenStreetMap' na túto plnú adresu), na opendatacommons.org a na creativecommons.org (ak je to relevenantné). + credit_3_html: |- + V prípade interaktívnej elektronickej mapy by autorstvo malo byÅ¥ uvedené v rohu mapy. + Napríklad: + attribution_example: + alt: Príklad, ako uvádzaÅ¥ autorstvo OpenStreetMap na webovej stránke + title: Príklad uvedenia autorstva + more_title_html: ĎalÅ¡ie informácie + more_1_html: O používaní naÅ¡ich dát a spôsobe citovania, sa môžete dočítaÅ¥ + viac v naÅ¡ich Často + kladených právnych otázkach. + more_2_html: |- + Hoci OpenStreetMap tvorí slobodné dáta, nemôžeme zadarmo poskytovaÅ¥ tretím stranám mapové API. + Pozrite naÅ¡e Pravidlá použitia API, Pravidlá použitia mapových dlaždíc a Pravidlá použitia nástroja Nominatim. + contributors_title_html: NaÅ¡i prispievatelia + contributors_intro_html: 'NaÅ¡i prispievatelia sú tisícky jednotlivcov. Máme + aj dáta so slobodnou licenciou od národných geografických inÅ¡titúcií či + iných zdrojov, medzi nimi:' + contributors_at_html: |- + Rakúsko: Obsahuje dáta od + mesta Viedeň (pod licenciou + CC BY), + krajiny Vorarlberg a + krajiny Tirol (pod licenciou CC-BY AT s úpravami). + contributors_ca_html: 'Kanada: Obsahuje dáta z GeoBase ®, + GeoGratis (© Department of Natural Resources Canada), CanVec (© Department + of Natural Resources Canada) a StatCan (Geography Division, Statistics Canada).' + contributors_fr_html: 'Francúzsko: Obsahuje dáta pochádzajúce + z Direction Générale des impôts.' + contributors_nl_html: |- + Holandsko: obsahuje © AND dát, 2007 + (www.and.com) + contributors_nz_html: 'Nový Zéland: Obsahuje dáta pochádzajúce + z Land Information New Zealand. Crown Copyright reserved.' + contributors_za_html: 'Juhoafrická republika: Obsahuje dáta + pochádzajúce z Chief Directorate: National + Geo-Spatial Information, State copyright reserved.' + contributors_gb_html: 'Spojené kráľovstvo: Obsahuje dáta + Ordnance Survey © Crown copyright a právo k databáze 2010-12.' + contributors_footer_1_html: |- + Podrobnosti o týchto a ďalších zdrojoch, ktoré boli použité pre vylepÅ¡enie OpenStreetMap, nájdete na stránke Contributors na OpenStreetMap wiki. + contributors_footer_2_html: ' Zahrnutie dát do OpenStreetMap neznamená, že + pôvodný poskytovateľ dát podporuje OpenStreetMap, ponúka akúkoľvek záruku, + alebo prijíma akúkoľvek zodpovednosÅ¥.' + infringement_title_html: PoruÅ¡enie autorských práv + infringement_1_html: Prispievateľom OSM pripomíname, že by nikdy nemali pridávaÅ¥ + dáta zo zdrojov chránených autorským právom (napr. Google Maps či tlačené + mapy) bez výslovného súhlasu držiteľov práv. + infringement_2_html: Ak sa domnievate, že materiál podliehajúci autorským + právam bol neoprávnene pridaný do databázy OpenStreetMap alebo na tieto + stránky, prosíme vás, aby ste si pozreli náš postup + odstraňovania alebo podajte žiadosÅ¥ priamo na stránke + pre podávanie sÅ¥ažností. index: js_1: Používate prehliadač bez podpory JavaScriptu, alebo máte JavaScript vypnutý. js_2: OpenStreetMap používa pre interaktívnu mapu JavaScript. @@ -1244,6 +1144,71 @@ sk: id_not_configured: iD zatiaľ nie je nakonfigurovaný no_iframe_support: Váš prehliadač nepodporuje vložené HTML rámy (iframes), ktoré sú pre túto funkciu nevyhnutné. + export: + title: Export + area_to_export: OblasÅ¥ pre export + manually_select: Manuálne vybraÅ¥ inú oblasÅ¥ + format_to_export: Formát pre export + osm_xml_data: OpenStreetMap XML dáta + map_image: Obrázok (obsahuje Å¡tandardné vrstvy) + embeddable_html: Vložiteľné HTML + licence: Licencia + export_details: Údaje OpenStreetMap sú k dispozícii pod licenciou Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Ak tento export zlyhá, zvážte použitie niektorého z nasledovných + zdrojov:' + body: Táto oblasÅ¥ je príliÅ¡ veľká pre export OpenStreetMap XML dát. Priblížte + prosím mapu, alebo vyberte menÅ¡iu oblasÅ¥. + planet: + title: Planéta OSM + description: Pravidelne aktualizované kópie kompletnej databázy OpenStreetMap + overpass: + title: Overpass API + description: StiahnuÅ¥ túto oblasÅ¥ z repliky databázy OpenStreetMap + geofabrik: + title: Geofabrik na stiahnutie + description: Pravidelne aktualizované extrakty svetadielov, krajín a vybraných + miest + metro: + title: Metro extrakty + description: Extrakty pre hlavné svetové mestá a ich okolie + other: + title: Iné zdroje + description: ĎalÅ¡ie zdroje sú uvedené na OpenStreetMap wiki + options: Možnosti + format: Formát + scale: Mierka + max: max + image_size: Rozmery obrázku + zoom: Zväčšenie + add_marker: PridaÅ¥ do mapy značku + latitude: 'Zem.šírka:' + longitude: 'Zem. dĺžka:' + output: Výstup + paste_html: Pre vloženie do stránky použite toto HTML + export_button: Export + fixthemap: + title: NahlásiÅ¥ problém / OpraviÅ¥ mapu + how_to_help: + title: Ako pomôcÅ¥ + join_the_community: + title: Pripojte sa ku komunite + help: + welcome: + title: Vitajte na OSM + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Sk:Beginners%27_guide + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + forums: + title: Fóra + irc: + title: IRC + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org sidebar: search_results: Výsledky vyhľadávania close: ZavrieÅ¥ @@ -1343,6 +1308,41 @@ sk: image: Obrázok alt: Alternatívny text url: URL + welcome: + title: Vitajte! + introduction_html: Vitajte na OpenStreetMap, slobodnej a upravovateľnej mape + sveta. Teraz, keď ste zaregistrovaní, môžete začaÅ¥ mapovaÅ¥. Tu je stručný + prehľad najdôležitejších, ktoré potrebujete vedieÅ¥. + whats_on_the_map: + title: Čo patrí do mapy + on_html: OpenStreetMap je miesto pre mapovanie vecí, ktoré sú zároveň reálne + aj aktuálne - obsahuje milióny budov, ciest a ďalÅ¡ie podrobnosti o + miestach. Môžete mapovaÅ¥ čokoľvek, čo vás zaujíma. + off_html: Čo nezahŕňa sú názory ako hodnotenia, historické či hypotetické + objekty a údaje zo zdrojov chránených autorským právom. Pokiaľ nemáte Å¡peciálne + oprávnenie, nekopírujte z online nebo papierových máp. + basic_terms: + title: Základné pojmy pre mapovanie + paragraph_1_html: OpenStreetMap má svoj vlastný žargón. Tu je niekoľko kľúčových + slov, ktoré vám prídu vhod. + editor_html: Editor je program alebo webovej stránky pomocou + ktorej upravujete mapu. + node_html: uzol je bod na mape, napr. jedna reÅ¡taurácia alebo + strom. + way_html: Cesta je čiara alebo oblasÅ¥, ako cesty, vodné toky, + jazerá alebo budovy. + tag_html: Značka je trochu údajov o uzle alebo ceste, napr. + názov reÅ¡taurácie alebo rýchlostný limit cesty. + questions: + title: Akékoľvek otázky? + paragraph_1_html: Potrebujete pomoc s mapovaním alebo vám nie je jasné, ako + OpenStreetMap používaÅ¥? Odpovede na svoje otázky môžete získaÅ¥ na webe + s nápovedou. + start_mapping: ZačaÅ¥ mapovaÅ¥ + add_a_note: + title: Nie je čas upravovaÅ¥? Pridajte poznámku! + paragraph_1_html: Pokiaľ chcete len opraviÅ¥ nejakú drobnosÅ¥ a nemáte čas sa + registrovaÅ¥ a učiÅ¥ sa upravovaÅ¥, môžete jednoducho pridaÅ¥ poznámku. trace: visibility: private: Súkromné (iba zdieľané ako anonymné, neusporiadané body) @@ -1458,7 +1458,7 @@ sk: do webového rozhrania a prečítajte si Podmienky prispievania. Nie je nutné ich odsúhlasiÅ¥, musíte si ich ale zobraziÅ¥. oauth: - oauthorize: + authorize: request_access: Aplikácia %{app_name} požaduje prístup k vášmu kontu (%{user}). Vyberte si, či si želáte, aby mala aplikácia nasledujúce oprávnenie. Môžete zvoliÅ¥ ľubovoľný počet oprávnení. @@ -1469,7 +1469,7 @@ sk: allow_write_api: upravovaÅ¥ mapu. allow_read_gpx: čítaÅ¥ vaÅ¡e súkromné GPS stopy. allow_write_gpx: nahraÅ¥ GPS stopy. - oauthorize_success: + authorize_success: verification: Váš overovací kód je %{code}. revoke: flash: Prístup pre aplikáciu %{application} bol odvolaný. @@ -1868,7 +1868,7 @@ sk: confirm: PotvrdiÅ¥ fail: Nemôžem zruÅ¡iÅ¥ úlohu `%{role}' od používateľa `%{name}'. Prosím skontrolujte aby používateľ a úloha boli oprávnené. - user_block: + user_blocks: model: non_moderator_update: Musí byÅ¥ moderátorom na vytvorenie alebo aktualizáciu bloku. @@ -1931,20 +1931,6 @@ sk: few: '%{count} hodiny' one: 1 hodina other: '%{count} hodín' - partial: - show: ZobraziÅ¥ - edit: UpraviÅ¥ - revoke: ZruÅ¡iÅ¥! - confirm: Ste si istí? - display_name: Blokovaný používateľ - creator_name: Tvorca - reason: Dôvod pre blokovanie - status: Stav - revoker_name: ZruÅ¡il - not_revoked: (nezruÅ¡ený) - showing_page: Strana %{page} - next: ĎalÅ¡ia stránka » - previous: « Predchádzajúca stránka helper: time_future: Končí o %{time}. until_login: Aktívny až do prihlásenia používateľa. @@ -1973,8 +1959,22 @@ sk: back: ZobraziÅ¥ vÅ¡etky blokovania revoker: 'Odvolal:' needs_view: Aby sa blok zmazal, požívateľ sa musí najprv prihlásiÅ¥. - note: - description: + block: + not_revoked: (nezruÅ¡ený) + show: ZobraziÅ¥ + edit: UpraviÅ¥ + revoke: ZruÅ¡iÅ¥! + blocks: + display_name: Blokovaný používateľ + creator_name: Tvorca + reason: Dôvod pre blokovanie + status: Stav + revoker_name: ZruÅ¡il + showing_page: Strana %{page} + next: ĎalÅ¡ia stránka » + previous: « Predchádzajúca stránka + notes: + comment: opened_at_html: Vytvorené pred %{when} mine: creator: Autor @@ -2063,7 +2063,7 @@ sk: instructions: unnamed: nepomenované time: Čas - redaction: + redactions: edit: description: Popis heading: UpraviÅ¥ revíziu diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 19ce9877e..c9844fb50 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -141,6 +141,8 @@ sl: title_comment: Paket sprememb %{id} - %{comment} join_discussion: Prijavite se za pridružitev pogovoru discussion: Pogovor + still_open: Paket sprememb je Å¡e vedno odprt - razprava se bo odprla, ko bo + paket sprememb zaprt. node: title: 'Vozlišče: %{name}' history_title: 'Zgodovina vozlišča: %{name}' @@ -244,7 +246,7 @@ sl: list: title: Paketi sprememb title_user: Paketi sprememb uporabnika %{user} - title_friend: Paket sprememb vaÅ¡ih prijateljev + title_friend: Paketi sprememb mojih prijateljev title_nearby: Paketi sprememb bližnjih uporabnikov empty: Ni najdenih paketov sprememb. empty_area: Na tem področju ni paketov sprememb. @@ -273,7 +275,7 @@ sl: user_title: Dnevnik uporabnika %{user} in_language_title: Dnevniki v jeziku %{language} new: Nov zapis v dnevnik uporabnikov - new_title: NapiÅ¡ite nov zapis v vaÅ¡ uporabniÅ¡ki dnevnik + new_title: Nov zapis v moj uporabniÅ¡ki dnevnik no_entries: Ni zapisov v dnevnik recent_entries: Nedavni vnosi v dnevnik older_entries: StarejÅ¡i zapisi @@ -340,51 +342,6 @@ sl: ago: pred %{ago} newer_comments: NovejÅ¡i komentarji older_comments: StarejÅ¡i komentarji - export: - title: Izvozi - start: - area_to_export: Področje za izvoz - manually_select: Ročno izberi drugo področje - format_to_export: Oblika izvoženih podatkov - osm_xml_data: Podatki OpenStreetMap v zapisu XML - map_image: Slika zemljevida (prikaže standardni izris) - embeddable_html: HTML za vključitev na spletno stran - licence: Licenca - export_details: OpenStreetMap podatki imajo dovoljenje Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Če zgornji izvoz spodleti, uporabite enega od spodnjih virov:' - body: 'To področje je preveliko za izvoz v XML OpenStreetMap. Prosimo, da - se približate ali izberete manjÅ¡e področje ali pa da uporabite enega od - naslednjih virov za obsežen prenos podatkov:' - planet: - title: Planet OSM - description: Redno posodabljane kopije celotne podatkovne zbirke OpenStreetMap - overpass: - title: Overpass API - description: Prenesi to območje iz zrcalnega strežnika podatkovne zbirke - OpenStreetMap - geofabrik: - title: Prenosi Geofabrik - description: Redno posodabljani izvlečki celin, držav in izbranih mest - metro: - title: Izvlečki Metro - description: Izvlečki za največja mesta na svetu in njihovo okolico - other: - title: Drugi viri - description: Dodatni viri, navedeni v wikiju OpenStreetMap - options: Možnosti - format: Oblika - scale: Merilo - max: največ - image_size: Velikost slike - zoom: Povečava - add_marker: Dodaj zaznamek na zemljevid - latitude: 'Å ir:' - longitude: 'Dol:' - output: Rezultat - paste_html: Uporabite ta HTML za vključitev zemljevida na spletno stran - export_button: Izvozi geocoder: search: title: @@ -403,7 +360,10 @@ sl: chair_lift: Sedežnica drag_lift: Vlečnica gondola: Kabinska žičnica + platter: Vlečnica s krožnički + pylon: Steber station: ŽičniÅ¡ka postaja + t-bar: Vlečnica s sidri aeroway: aerodrome: Letališče airstrip: Vzletna steza @@ -469,6 +429,7 @@ sl: office: Pisarne parking: Parkirišče parking_entrance: Vhod v parkirišče + parking_space: Parkirno mesto pharmacy: Lekarna place_of_worship: Verski hram police: Policija @@ -544,6 +505,7 @@ sl: emergency_access_point: Dostop za interventna vozila footway: PeÅ¡pot ford: Prehod + give_way: Znak Nimate prednosti living_street: Ulica z umirjenim prometom milestone: Kilometerski kamen motorway: Avtocesta @@ -565,6 +527,7 @@ sl: services: Avtocestno postajališče speed_camera: Hitrostna kamera steps: Stopnice + stop: Stop znak street_lamp: Ulična svetilka tertiary: Lokalna cesta tertiary_link: Terciarna cesta @@ -670,10 +633,15 @@ sl: bunker_silo: Bunker chimney: Dimnik crane: Žerjav + dyke: Nasip + embankment: Nasip + flagpole: Zastavni drog lighthouse: Svetilnik + mine: Rudnik mineshaft: RudniÅ¡ki jaÅ¡ek pier: Pomol pipeline: Cevovod + silo: Silos tower: Stolp watermill: Vodno kolo water_tower: Vodni stolp @@ -975,116 +943,6 @@ sl: text: Prispevajte finančna sredstva learn_more: Več o tem more: Več - license_page: - foreign: - title: O tem prevodu - text: V primeru neskladja med tem prevodom in %{english_original_link} se bo - uporabila angleÅ¡ka stran - english_link: angleÅ¡ki izvirnik - native: - title: O tej strani - text: Berete angleÅ¡ko različico avtorskih strani. Lahko se vrnete na %{native_link} - te strani, ali se lahko ustavite branje o avtorskih pravicah in %{mapping_link}. - native_link: Slovensko verzijo - mapping_link: začnete kartirati - legal_babble: - title_html: Avtorske pravice in licenca - intro_1_html: OpenStreetMap® so prosti - podatki z dovoljenjem Open - Data Commons Open Database License (ODbL) Fundacije - OpenStreetMap (OSMF). - contributors_title_html: NaÅ¡i sodelavci - contributors_si_html: |- - Slovenija: Vsebuje javne podatke - Geodetske uprave Republike Slovenije in - Ministrstva za kmetijstvo, gozdarstvo in prehrano. - contributors_footer_1_html: |- - Za več podrobnosti o teh in drugih virih, ki so bili uporabljeni kot pripomočki pri izboljÅ¡evanju OpenStreetMap, si prosimo oglejte stran sodelujočih na wikiju OpenStreetMap. - infringement_title_html: KrÅ¡itev avtorskih pravic - welcome_page: - title: DobrodoÅ¡li! - introduction_html: DobrodoÅ¡li na OpenStreetMap, brezplačni zemljevid sveta, ki - ga je mogoče tudi urejati. Zdaj, ko ste vpisani, ste pripravljeni za začetek - kartiranja. Tu dobite hitri vodnik z najbolj pomembnimi stvarmi, ki jih morate - vedeti. - whats_on_the_map: - title: Kaj je na zemljevidu - on_html: OpenStreetMap je kraj za kartiranje stvari, ki so bodisi resnične - kot trenutne - vključuje milijone stavb, cest in druge podatke o krajih. - Lahko kartirate katerikoli resnično značilnost, ki je za vas zanimiva. - off_html: To, kar ne vključuje mnenjskih podatkov kot so ocene, zgodovinske - ali hipotetične značilnosti in podatke iz avtorsko zaščitenih virov. Razen - če nimate posebnega dovoljenja, ne kopirajte iz spletnih ali tiskanih zemljevidov. - basic_terms: - title: Osnovni pogoji za kartiranje - paragraph_1_html: OpenStreetMap ima tudi svoj žargon. Tukaj je nekaj ključnih - besed, ki vam bodo priÅ¡le prav. - editor_html: Urejevalnik je program ali spletna stran, ki jo - lahko uporabite za urejanje zemljevida. - node_html: Vozlišče je točka na zemljevidu, kot npr. restavracija - ali drevo. - way_html: Pot je črta ali področje, kot je npr. cesta, potok, - jezero ali zgradba. - tag_html: Oznaka je podatek o vozlišču ali poti, kot je npr. - ime restavracija ali omejitev hitrosti na cesti. - rules: - title: Pravila! - questions: - title: Imate kakÅ¡no vpraÅ¡anja? - paragraph_1_html: |- - OpenStreetMap ima več virov za učenje o projektu, zastavljanje in odgovarjanje na vpraÅ¡anja, sodelovalno razpravljanje in dokumentiranje tem o kartiranju. - Poiščite pomoč tukaj. - start_mapping: Začnite kartirati - add_a_note: - title: Nimate časa za urejanje? Dodajte opombo! - paragraph_1_html: Če si želite popraviti kakÅ¡no majhno napako in nimate časa - za prijavo oziroma za spoznati kaj več o urejanju, lahko enostavneje le dodati - opombo. - paragraph_2_html: 'Samo pojdite na zemljevid in kliknite - ikono opombe: . Tako boste na zemljevid dodali - oznako, ki jo lahko premaknete z vlečenjem. Dodajte vaÅ¡o opombo in nato kliknite - Shrani. Drugi kartografi bodo to preiskali.' - fixthemap: - title: Prijavi napako / Popravi zemljevid - how_to_help: - title: Kako pomagati - join_the_community: - title: Pridružite se skupnosti - other_concerns: - title: Drugi pomisleki - help_page: - title: Iskanje pomoči - introduction: OpenStreetMap ima več virov za učenje o projektu, zastavljanje in - odgovarjanje na vpraÅ¡anja, sodelovanje v razpravah in dokumentacijo kartografskih - tem. - welcome: - title: DobrodoÅ¡li v OSM - description: Začnite s tem hitrim vodičem, ki zajema osnove OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Sl:Beginners%27_guide - title: Vodnik za začetnike - description: Vodnik za začetnike, ki ga vzdržuje skupnost. - help: - url: https://help.openstreetmap.org/ - description: Zastavite vpraÅ¡anje ali poiščete odgovore v OSM zbirki vpraÅ¡anj - in odgovorov. - mailing_lists: - title: PoÅ¡tni seznami - forums: - title: Forumi - irc: - title: IRC - description: Interaktivni klepet v mnogo različnih jezikih in o mnogo temah. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Prebrskajte wiki za poglobljeno OSM dokumentacijo. - about_page: - next: Naslednji - copyright_html: ©OpenStreetMap
        sodelavci - local_knowledge_title: Krajevno znanje - partners_title: Partnerji notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} je komentiral vnos v dnevnik' @@ -1100,6 +958,7 @@ sl: footer_html: Lahko tudi preberete sporočilo na %{readurl} in lahko odgovorite na %{replyurl} friend_notification: + hi: Pozdravljeni, %{to_user}, subject: '[OpenStreetMap] %{user} vas je dodal med prijatelje' had_added_you: '%{user} vas je dodal med prijatelje na OpenStreetMap.' see_their_profile: Njegov profil si lahko ogledate na %{userurl}. @@ -1281,6 +1140,39 @@ sl: delete: deleted: Sporočilo izbrisano site: + about: + next: Naslednji + copyright_html: ©OpenStreetMap
        sodelavci + local_knowledge_title: Krajevno znanje + partners_title: Partnerji + copyright: + foreign: + title: O tem prevodu + text: V primeru neskladja med tem prevodom in %{english_original_link} se + bo uporabila angleÅ¡ka stran + english_link: angleÅ¡ki izvirnik + native: + title: O tej strani + text: Berete angleÅ¡ko različico avtorskih strani. Lahko se vrnete na %{native_link} + te strani, ali se lahko ustavite branje o avtorskih pravicah in %{mapping_link}. + native_link: Slovensko verzijo + mapping_link: začnete kartirati + legal_babble: + title_html: Avtorske pravice in licenca + intro_1_html: OpenStreetMap® so prosti + podatki z dovoljenjem Open + Data Commons Open Database License (ODbL) Fundacije + OpenStreetMap (OSMF). + contributors_title_html: NaÅ¡i sodelavci + contributors_si_html: |- + Slovenija: Vsebuje javne podatke + Geodetske uprave Republike Slovenije in + Ministrstva za kmetijstvo, gozdarstvo in prehrano. + contributors_footer_1_html: |- + Za več podrobnosti o teh in drugih virih, ki so bili uporabljeni kot pripomočki pri izboljÅ¡evanju OpenStreetMap, si prosimo oglejte stran sodelujočih na wikiju OpenStreetMap. + infringement_title_html: KrÅ¡itev avtorskih pravic + trademarks_title_html: Blagovne znamke index: js_1: Bodisi uporabljate brskalnik, ki ne podpira Javascript-a, ali pa je izvajanje Javascript-a onemogočeno. @@ -1311,6 +1203,85 @@ sl: id_not_configured: iD Å¡e ni bil konfiguriran no_iframe_support: VaÅ¡ brskalnik ne podpira HTML iframes, kar je potrebno za to funkcijo. + export: + title: Izvozi + area_to_export: Področje za izvoz + manually_select: Ročno izberi drugo področje + format_to_export: Oblika izvoženih podatkov + osm_xml_data: Podatki OpenStreetMap v zapisu XML + map_image: Slika zemljevida (prikaže standardni izris) + embeddable_html: HTML za vključitev na spletno stran + licence: Licenca + export_details: OpenStreetMap podatki imajo dovoljenje Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Če zgornji izvoz spodleti, uporabite enega od spodnjih virov:' + body: 'To področje je preveliko za izvoz v XML OpenStreetMap. Prosimo, da + se približate ali izberete manjÅ¡e področje ali pa da uporabite enega od + naslednjih virov za obsežen prenos podatkov:' + planet: + title: Planet OSM + description: Redno posodabljane kopije celotne podatkovne zbirke OpenStreetMap + overpass: + title: Overpass API + description: Prenesi to območje iz zrcalnega strežnika podatkovne zbirke + OpenStreetMap + geofabrik: + title: Prenosi Geofabrik + description: Redno posodabljani izvlečki celin, držav in izbranih mest + metro: + title: Izvlečki Metro + description: Izvlečki za največja mesta na svetu in njihovo okolico + other: + title: Drugi viri + description: Dodatni viri, navedeni v wikiju OpenStreetMap + options: Možnosti + format: Oblika + scale: Merilo + max: največ + image_size: Velikost slike + zoom: Povečava + add_marker: Dodaj zaznamek na zemljevid + latitude: 'Å ir:' + longitude: 'Dol:' + output: Rezultat + paste_html: Uporabite ta HTML za vključitev zemljevida na spletno stran + export_button: Izvozi + fixthemap: + title: Prijavi napako / Popravi zemljevid + how_to_help: + title: Kako pomagati + join_the_community: + title: Pridružite se skupnosti + other_concerns: + title: Drugi pomisleki + help: + title: Iskanje pomoči + introduction: OpenStreetMap ima več virov za učenje o projektu, zastavljanje + in odgovarjanje na vpraÅ¡anja, sodelovanje v razpravah in dokumentacijo kartografskih + tem. + welcome: + title: DobrodoÅ¡li v OSM + description: Začnite s tem hitrim vodičem, ki zajema osnove OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Sl:Beginners%27_guide + title: Vodnik za začetnike + description: Vodnik za začetnike, ki ga vzdržuje skupnost. + help: + url: https://help.openstreetmap.org/ + description: Zastavite vpraÅ¡anje ali poiščete odgovore v OSM zbirki vpraÅ¡anj + in odgovorov. + mailing_lists: + title: PoÅ¡tni seznami + forums: + title: Forumi + irc: + title: IRC + description: Interaktivni klepet v mnogo različnih jezikih in o mnogo temah. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Prebrskajte wiki za poglobljeno OSM dokumentacijo. sidebar: search_results: Rezultati iskanja close: Zapri @@ -1323,6 +1294,7 @@ sl: where_am_i: Kje je to? where_am_i_title: OpiÅ¡ite trenutno lokacijo z uporabo iskalnika submit_text: Išči + reverse_directions_text: Obrni smer key: table: entry: @@ -1410,6 +1382,49 @@ sl: image: Slika alt: Dodatno besedilo url: URL + welcome: + title: DobrodoÅ¡li! + introduction_html: DobrodoÅ¡li na OpenStreetMap, brezplačni zemljevid sveta, + ki ga je mogoče tudi urejati. Zdaj, ko ste vpisani, ste pripravljeni za začetek + kartiranja. Tu dobite hitri vodnik z najbolj pomembnimi stvarmi, ki jih morate + vedeti. + whats_on_the_map: + title: Kaj je na zemljevidu + on_html: OpenStreetMap je kraj za kartiranje stvari, ki so bodisi resnične + kot trenutne - vključuje milijone stavb, cest in druge podatke o krajih. + Lahko kartirate katerikoli resnično značilnost, ki je za vas zanimiva. + off_html: To, kar ne vključuje mnenjskih podatkov kot so ocene, zgodovinske + ali hipotetične značilnosti in podatke iz avtorsko zaščitenih virov. Razen + če nimate posebnega dovoljenja, ne kopirajte iz spletnih ali tiskanih zemljevidov. + basic_terms: + title: Osnovni pogoji za kartiranje + paragraph_1_html: OpenStreetMap ima tudi svoj žargon. Tukaj je nekaj ključnih + besed, ki vam bodo priÅ¡le prav. + editor_html: Urejevalnik je program ali spletna stran, ki + jo lahko uporabite za urejanje zemljevida. + node_html: Vozlišče je točka na zemljevidu, kot npr. restavracija + ali drevo. + way_html: Pot je črta ali področje, kot je npr. cesta, potok, + jezero ali zgradba. + tag_html: Oznaka je podatek o vozlišču ali poti, kot je npr. + ime restavracija ali omejitev hitrosti na cesti. + rules: + title: Pravila! + questions: + title: Imate kakÅ¡no vpraÅ¡anja? + paragraph_1_html: |- + OpenStreetMap ima več virov za učenje o projektu, zastavljanje in odgovarjanje na vpraÅ¡anja, sodelovalno razpravljanje in dokumentiranje tem o kartiranju. + Poiščite pomoč tukaj. + start_mapping: Začnite kartirati + add_a_note: + title: Nimate časa za urejanje? Dodajte opombo! + paragraph_1_html: Če si želite popraviti kakÅ¡no majhno napako in nimate časa + za prijavo oziroma za spoznati kaj več o urejanju, lahko enostavneje le + dodati opombo. + paragraph_2_html: 'Samo pojdite na zemljevid in + kliknite ikono opombe: . Tako boste na + zemljevid dodali oznako, ki jo lahko premaknete z vlečenjem. Dodajte vaÅ¡o + opombo in nato kliknite Shrani. Drugi kartografi bodo to preiskali.' trace: visibility: private: Zasebna (v skupni rabi kot anonimna, neurejene točke) @@ -1537,7 +1552,7 @@ sl: se na spletno stran in si oglejte pogoje "Contributor Terms". Ni se vam treba strinjati, vendar si jih morate ogledati. oauth: - oauthorize: + authorize: title: Dovoli dostop do vaÅ¡ega računa request_access: Aplikacija %{app_name} zahteva dostop do vaÅ¡ega računa %{user}. Prosimo, preverite, ali želite aplikaciji omogočiti naslednje zmožnosti. Izbirate @@ -1552,11 +1567,11 @@ sl: allow_write_gpx: nalaganje sledi GPS. allow_write_notes: spreminjanje opomb. grant_access: Odobri dostop - oauthorize_success: + authorize_success: title: Zahteva za overovitev uspeÅ¡na allowed: Aplikaciji %{app_name} ste odobrili zahtevek za dostop do vaÅ¡ega računa. verification: Koda za preverjanje je %{code}. - oauthorize_failure: + authorize_failure: title: Zahteva za overovitev ni uspela denied: Aplikaciji %{app_name} ste zavrnili zahtevek za dostop do vaÅ¡ega računa. revoke: @@ -1658,6 +1673,9 @@ sl: google: title: Prijava z Googlom alt: Prijava z Google OpenID-jem + github: + title: Vpis z GitHub-om + alt: Vpis z računom pri GitHub-u yahoo: title: Prijava z Yahoo alt: Prijava z Yahoo OpenID @@ -1975,7 +1993,7 @@ sl: confirm: Potrdi fail: Ne morem preklicati vlogo '%{role}' uporabniku '%{name}'. Prosimo preverite, če sta uporabnik in vloga pravilna. - user_block: + user_blocks: model: non_moderator_update: Morate biti moderator da ustvarite ali popravite blokado. non_moderator_revoke: Morate biti moderator da prekličete blokado. @@ -2035,20 +2053,6 @@ sl: one: 1 ura two: '%{count} uri' other: '%{count} ur' - partial: - show: Prikaži - edit: Uredi - revoke: Prekliči! - confirm: Ali ste prepričani? - display_name: Blokiran uporabnik - creator_name: Ustvarjalec - reason: 'Razlog za blokado:' - status: Stanje - revoker_name: Preklical - not_revoked: (ni preklicana) - showing_page: Stran %{page} - next: Naslednja » - previous: « PrejÅ¡nja helper: time_future: Konča v %{time}. until_login: Aktivna dokler uporabnik se prijavi. @@ -2078,8 +2082,22 @@ sl: back: Prikaži vse blokade revoker: 'Preklical:' needs_view: Uporabnik se mora prijaviti preden bo blokada ukinjena. - note: - description: + block: + not_revoked: (ni preklicana) + show: Prikaži + edit: Uredi + revoke: Prekliči! + blocks: + display_name: Blokiran uporabnik + creator_name: Ustvarjalec + reason: 'Razlog za blokado:' + status: Stanje + revoker_name: Preklical + showing_page: Stran %{page} + next: Naslednja » + previous: « PrejÅ¡nja + notes: + comment: opened_at_html: Ustvarjeno %{when} nazaj opened_at_by_html: Ustvarjeno %{when} nazaj od %{user} commented_at_html: Posodobljeno %{when} nazaj @@ -2192,13 +2210,16 @@ sl: edit_help: Premaknite zemljevid in približajte lokacijo, ki jo želite urediti, nato pa kliknite tukaj. directions: + ascend: Vzpon engines: graphhopper_bicycle: Kolo (GraphHopper) + graphhopper_car: Avto (GraphHopper) graphhopper_foot: Hoja (GraphHopper) mapquest_bicycle: Kolo (MapQuest) mapquest_car: Avto (MapQuest) mapquest_foot: Hoja (MapQuest) osrm_car: Avto (OSRM) + descend: Spust directions: Navodila distance: Razdalja errors: @@ -2207,8 +2228,17 @@ sl: instructions: continue_without_exit: Nadaljujte po %{name} slight_right_without_exit: Rahlo desno na %{name} + offramp_right: Zapeljite na dovoz na desni + offramp_right_with_exit: Uporabite %{exit}. izhod na desni + offramp_right_with_exit_name: Uporabite %{exit}. izhod na desni, da zapeljete + na %{name} + offramp_right_with_exit_directions: Uporabite %{exit}. izhod na desni proti + %{directions} offramp_right_with_name: Zapeljite na priključek na desni in nato na %{name} + offramp_right_with_directions: Zapeljite na dovoz na desni za %{directions} onramp_right_without_exit: Na priključku zavijte desno na %{name} + onramp_right_with_directions: Zavijte desno na dovoz za %{directions} + onramp_right_without_directions: Zavijte desno na dovoz endofroad_right_without_exit: Na koncu ceste zavijte desno na %{name} merge_right_without_exit: Zapeljite rahlo desno na %{name} fork_right_without_exit: Na razcepu zavijte desno na %{name} @@ -2217,8 +2247,17 @@ sl: uturn_without_exit: Polkrožno obrnite po %{name} sharp_left_without_exit: Ostro levo na %{name} turn_left_without_exit: Zavijte levo na %{name} + offramp_left: Zavijte levo na dovoz + offramp_left_with_exit: Uporabite %{exit}. izhod na levi + offramp_left_with_exit_name: Uporabite %{exit}. izhod na levi, da zapeljete + na %{name} + offramp_left_with_exit_name_directions: Uporabite %{exit}. izhod na levi, + da zapeljete na %{name} proti %{directions} offramp_left_with_name: Zapeljite na priključek na levi in nato na %{name} + offramp_left_with_directions: Zapeljite na dovoz na levi za %{directions} onramp_left_without_exit: Na priključku zavijte levo na %{name} + onramp_left_with_directions: Zavijte levo na dovoz za %{directions} + onramp_left_without_directions: Zavijte levo na dovoz endofroad_left_without_exit: Na koncu ceste zavijete levo na %{name} merge_left_without_exit: Zapeljite rahlo levo na %{name} fork_left_without_exit: Na razcepu zavijte levo na %{name} @@ -2228,7 +2267,7 @@ sl: roundabout_without_exit: V krožišču uporabite izvoz na %{name} leave_roundabout_without_exit: Zapustite krožišče - %{name} stay_roundabout_without_exit: Ostanite v krožišču - %{name} - start_without_exit: Začnite na koncu %{name} + start_without_exit: Začnite na %{name} destination_without_exit: Pojdite do cilja against_oneway_without_exit: Pojdite po enosmerni cesti na %{name} end_oneway_without_exit: Konec enosmerne ceste na %{name} @@ -2256,7 +2295,7 @@ sl: show_address: Prikaži naslov query_features: Poišči značilnosti centre_map: Premakni na sredino - redaction: + redactions: edit: description: Opis heading: Uredi redakcijo diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 3ae63b54e..fd5d326f7 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -347,55 +347,6 @@ sq: ago: '%{ago} më parë' newer_comments: Komentet më të fundit older_comments: Komentet e vjetra - export: - title: Eksporto - start: - area_to_export: Zona për tu eksportuar - manually_select: Zgjidh me dorë një zonë tjetër - format_to_export: Formati per eksportim - osm_xml_data: Të dhëna XML të OpenStreetMap - map_image: Imzhi i hartës (shfaq shtresën e parazgjedhur) - embeddable_html: HTML i inkorporueshëm - licence: Licensa - export_details: Të dhënat e OpenStreetMap janë të licencuara nën Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Në qoftë se dështon eksporti i mësipërm, të lutem konsidero përdorimin - e një nga burimet e renditura më poshtë:' - body: Kjo zonë është shumë e madhe për të eksportuar të dhënat XML të OpenStreetMap. - Të lutem zmadho (zoom) ose zgjidh një zonë më të vogël, ose përdor një nga - burimet e listuara më poshtë për të shkarkuar pjesë të mëdha të të dhënave. - planet: - title: Planet OSM - description: Kopje të plota të përditësuara rregullisht të bazës së të dhënave - të OpenStreetMap - overpass: - title: API mbikalues - description: Shkarkoni këtë kuti kufizimi nga një pasqyrim i të dhënave - të OpenStreetMap - geofabrik: - title: Shkarkimet nga Geofabrik - description: Përditësime rregullisht të ekstrakteve të kontinenteve, vendeve, - dhe qyteteve të përzgjedhura - metro: - title: Metro Ekstrakte - description: Ekstrakte të qyteteve më të mëdha botërore dhe zonave përreth - tyre - other: - title: Burime të tjera - description: Burime shtesë të listuara në faqen e OpenStreetMap wiki - options: Opsionet - format: Formati - scale: Shkallë - max: max - image_size: Madhësia e imazhit - zoom: Zmadho - add_marker: Shto një shënues në hartë - latitude: 'Lat:' - longitude: 'Lon:' - output: Dalja - paste_html: Ngjite HTML për ta inkorporuar në uebfaqe - export_button: Eksporto geocoder: search: title: @@ -916,137 +867,6 @@ sq: text: Dhuro learn_more: Mëso më shumë more: Më shumë - license_page: - foreign: - title: Rreth këtij përkthimi - text: Në rast të një konflikti ndërmjet kësaj faqeje të përkthyer dhe %{english_original_link}, - faqja në anglisht do të ketë përparësi - english_link: origjinalit në anglisht - native: - title: Rreth kësaj faqeje - text: Je duke parë versionin në anglisht të faqes së të drejtave autoriale. - Mund të shkosh mbrapa tek %{native_link} i kësaj faqeje ose mund të ndalesh - së lexuari rreth të drejtave autoriale dhe %{mapping_link}. - native_link: Versioni në THIS_LANGUAGE_NAME_HERE - mapping_link: fillo hatrografimin - legal_babble: - title_html: Të drejtat autoriale dhe licensa - intro_1_html: |- - OpenStreetMap® përmban të dhëna të hapura, të licencuara nën Open Data - Commons Open Database License (ODbL) by the OpenStreetMap Foundation (OSMF). - intro_2_html: "Ju jeni të lirë të kopjoni, shpërndani, transmetoni dhe adoptoni - dhe të dhënat tona, \nduke pasur parasysh citimin e OpenStreetMap dhe kontribuuesve - të saj. Nëse ndryshoni apo ndërtoni mbi hartat apo të dhënat tona, ju\nmund - të shpërndani rezultatet nën licencën e njëjtë. Licenca e plotë legal\n - \ code shpjegon të drejtat dhe përgjegjësitë tuaja." - intro_3_html: |- - Hartografimi i pjesëve tona, dhe dokumantacioni ynë, janë të licencuara nën licensë të Creative - Commons Attribution-ShareAlike 2.0(CC BY-SA). - credit_title_html: Si të citoni OpenStreetMap - credit_1_html: Ne kërkojmë që ju të përdorni kreditet e “© OpenStreetMap - contributors”. - credit_2_html: " Ku është e mundur, OpenStreetMap duhet të hyperlinked to http://www.openstreetmap.org/\n - \ dhe CC BY-SA to http://creativecommons.org/licenses/by-sa/2.0/. - Nëse jeni duke përdorur një medium ku nuk mund të bëhen linka (p.sh. a\n letër - e shtypur), ne sugjerojmë që ju të drejtoni lexuesit tek\n www.openstreetmap.org - (ndoshta duke shpjeguar \n ‘OpenStreetMap’ këtë adresë të plotë) - dhe tek \n www.creativecommons.org." - more_title_html: Zbulo më shumë - more_1_html: |2- - Lexoni më shumë rreth përdorimit të të dhënave Legal - FAQ. - more_2_html: |2- - OSM kontribuuesit duhet të mos përdorin asnjë të dhënë prej burimeve të çfarëdoshme - të mbrojtura me të drejta të kopjimit (p.sh. Google Maps apo harta të printuara) pa - leje speciale prej pronarëve të të drejtave të kopjimit. - contributors_title_html: Kontribuuesit tanë - contributors_intro_html: " Licenca jonë CC BY-SA kërkon nga ju që “të - vlerësoni Autorin\n Origjinal përkatës të mediumit apo masave që jeni duke - i\n shfrytëzuar ”. Hartuesit individual të OSM nuk kërkojnë një\n citim - mbi dhe për atë që kontribuojnë për “OpenStreetMap\n ”, por kur - përfshihen në OSM, hartat nga një agjencion nacional i hartave \n apo faktor - tjerë madhor burimor, është e arsyeshme të citohen drejtpërsëdrejti \n duke - paraqitur emrin apo duke lidhur faqen e tyre me link." - contributors_ca_html: |- - Canada: Përmban të dhëna nga - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), and StatCan (Geography Division, - Statistics Canada). - contributors_nz_html: 'New Zealand: Përmban të dhëna të sigururar - nga Land Information New Zealand. Crown Copyright reserved.' - contributors_gb_html: |- - Britani e Madhe: Përmban të dhëna nga Ordnance - Survey©. Crown i ka të drejtat autoriale dhe të databazës. - contributors_footer_2_html: " Përfshirja e të dhënave në OpenStreetMap nuk - thekson se të ofruesi origjinal i të \n dhënave përdor OpenStreetMap, ofron - garancion, apo\n pranon çfarëdo anekse." - welcome_page: - title: Mirësevjen - whats_on_the_map: - title: Çfarë ka në hartë? - basic_terms: - title: Termat bazë për hartografim - paragraph_1_html: OpenStreetMap ka disa shprehje në zhargonin e vet. Këtu janë - disa fjalë kyçe mund të jenë të dobishme. - editor_html: Një redaktor është një program apo faqe të cilën - mund ta përdorni për ta redaktuar hartën. - node_html: Një nyje është një pikë në hartë, si një restorant - i vetëm ose një pemë. - way_html: Një rrugë është një linjë apo fushë, si një rrugë, - lumë, liqen apo ndërtesë. - rules: - title: Rregullat! - start_mapping: Fillo hartografimin - add_a_note: - title: Nuk ke kohë për të redaktuar? Shto një shënim! - fixthemap: - how_to_help: - title: Si të ndihmosh - join_the_community: - title: Bashkohu me komunitetin - explanation_html: Nëse keni vënë re një problem me të dhënat e hartës, për - shembull një rrugë mungon apo adresa juaj, mënyra më e mirë për të procesuar - është t'i bashkohesh komunitetit OpeenStreetMap dhe të shtosh apo të riparosh - të dhënat vetë. - add_a_note: - instructions_html: Klikoni ose të njëjtën ikonë - në ekranin e hartës. Kjo do të shtojë një shënues në hartë, të cilën ju - mund ta lëvizni duke e tërhequr. Shtoni mesazhin tuaj, pastaj klikoni save - dhe editues të tjerë do ta kontrollojnë. - other_concerns: - title: Shqetësime të tjera - help_page: - title: Merr ndihmë - introduction: OpenStreetMap ka disa burime për të mësuar në lidhje me projektin, - duke bërë pyetje dhe duke ju përgjigjur dhe duke diskutuar bashkërisht dhe duke - dokumentuar temat e hartës. - welcome: - url: /mirësevjen - title: Mirësevjen në OSM - description: Filloni me këtë udhëzues të thjeshtë që mbulon bazat e OpenStreetMap. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Sq:Beginners%27_guide - title: Udhëzues për fillestarë. - description: Një udhëzues për fillestarë që mirëmbahet nga komuniteti. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Bëni një pyetje ose shikoni përgjigjet në faqen pyetje dhe përgjigje - të OSM-së. - mailing_lists: - title: Listat E Postimeve - description: Bëni një pyetje ose diskutoni çështje interesante në një gamë të - gjerë të listës së postimeve të ditës apo rajonale. - forums: - title: Forumet - about_page: - next: Tjetra - copyright_html: ©OpenStreetMap
        kontribuesit notifier: diary_comment_notification: hi: Përshëndetje %{to_user}, @@ -1132,6 +952,78 @@ sq: as_read: Mesazhi është shënuar si të lexuar as_unread: Mesazhi është shënuar si i palexuar site: + about: + next: Tjetra + copyright_html: ©OpenStreetMap
        kontribuesit + copyright: + foreign: + title: Rreth këtij përkthimi + text: Në rast të një konflikti ndërmjet kësaj faqeje të përkthyer dhe %{english_original_link}, + faqja në anglisht do të ketë përparësi + english_link: origjinalit në anglisht + native: + title: Rreth kësaj faqeje + text: Je duke parë versionin në anglisht të faqes së të drejtave autoriale. + Mund të shkosh mbrapa tek %{native_link} i kësaj faqeje ose mund të ndalesh + së lexuari rreth të drejtave autoriale dhe %{mapping_link}. + native_link: Versioni në THIS_LANGUAGE_NAME_HERE + mapping_link: fillo hatrografimin + legal_babble: + title_html: Të drejtat autoriale dhe licensa + intro_1_html: |- + OpenStreetMap® përmban të dhëna të hapura, të licencuara nën Open Data + Commons Open Database License (ODbL) by the OpenStreetMap Foundation (OSMF). + intro_2_html: "Ju jeni të lirë të kopjoni, shpërndani, transmetoni dhe adoptoni + dhe të dhënat tona, \nduke pasur parasysh citimin e OpenStreetMap dhe kontribuuesve + të saj. Nëse ndryshoni apo ndërtoni mbi hartat apo të dhënat tona, ju\nmund + të shpërndani rezultatet nën licencën e njëjtë. Licenca e plotë legal\n + \ code shpjegon të drejtat dhe përgjegjësitë tuaja." + intro_3_html: |- + Hartografimi i pjesëve tona, dhe dokumantacioni ynë, janë të licencuara nën licensë të Creative + Commons Attribution-ShareAlike 2.0(CC BY-SA). + credit_title_html: Si të citoni OpenStreetMap + credit_1_html: Ne kërkojmë që ju të përdorni kreditet e “© OpenStreetMap + contributors”. + credit_2_html: " Ku është e mundur, OpenStreetMap duhet të hyperlinked to + http://www.openstreetmap.org/\n + \ dhe CC BY-SA to http://creativecommons.org/licenses/by-sa/2.0/. + Nëse jeni duke përdorur një medium ku nuk mund të bëhen linka (p.sh. a\n + \ letër e shtypur), ne sugjerojmë që ju të drejtoni lexuesit tek\n www.openstreetmap.org + (ndoshta duke shpjeguar \n ‘OpenStreetMap’ këtë adresë të plotë) + dhe tek \n www.creativecommons.org." + more_title_html: Zbulo më shumë + more_1_html: |2- + Lexoni më shumë rreth përdorimit të të dhënave Legal + FAQ. + more_2_html: |2- + OSM kontribuuesit duhet të mos përdorin asnjë të dhënë prej burimeve të çfarëdoshme + të mbrojtura me të drejta të kopjimit (p.sh. Google Maps apo harta të printuara) pa + leje speciale prej pronarëve të të drejtave të kopjimit. + contributors_title_html: Kontribuuesit tanë + contributors_intro_html: " Licenca jonë CC BY-SA kërkon nga ju që “të + vlerësoni Autorin\n Origjinal përkatës të mediumit apo masave që jeni duke + i\n shfrytëzuar ”. Hartuesit individual të OSM nuk kërkojnë një\n + \ citim mbi dhe për atë që kontribuojnë për “OpenStreetMap\n ”, + por kur përfshihen në OSM, hartat nga një agjencion nacional i hartave \n + \ apo faktor tjerë madhor burimor, është e arsyeshme të citohen drejtpërsëdrejti + \n duke paraqitur emrin apo duke lidhur faqen e tyre me link." + contributors_ca_html: |- + Canada: Përmban të dhëna nga + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), and StatCan (Geography Division, + Statistics Canada). + contributors_nz_html: 'New Zealand: Përmban të dhëna të sigururar + nga Land Information New Zealand. Crown Copyright reserved.' + contributors_gb_html: |- + Britani e Madhe: Përmban të dhëna nga Ordnance + Survey©. Crown i ka të drejtat autoriale dhe të databazës. + contributors_footer_2_html: " Përfshirja e të dhënave në OpenStreetMap nuk + thekson se të ofruesi origjinal i të \n dhënave përdor OpenStreetMap, ofron + garancion, apo\n pranon çfarëdo anekse." edit: user_page_link: '{{GENDER:{{ROOTPAGENAME}}|faqja e përdoruesit|faqja e përdorueses}}' anon_edits: (%{link}) @@ -1139,6 +1031,94 @@ sq: redaktorin e 'OpenStreetMap Flash'. Ti mund ta shkarkosh Flash Player nga Adobe.com. Disa mënyra të tjeratë për ta redaktuar OpenStreetMap, gjithashtu janë të mundshme. + export: + title: Eksporto + area_to_export: Zona për tu eksportuar + manually_select: Zgjidh me dorë një zonë tjetër + format_to_export: Formati per eksportim + osm_xml_data: Të dhëna XML të OpenStreetMap + map_image: Imzhi i hartës (shfaq shtresën e parazgjedhur) + embeddable_html: HTML i inkorporueshëm + licence: Licensa + export_details: Të dhënat e OpenStreetMap janë të licencuara nën Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Në qoftë se dështon eksporti i mësipërm, të lutem konsidero përdorimin + e një nga burimet e renditura më poshtë:' + body: Kjo zonë është shumë e madhe për të eksportuar të dhënat XML të OpenStreetMap. + Të lutem zmadho (zoom) ose zgjidh një zonë më të vogël, ose përdor një nga + burimet e listuara më poshtë për të shkarkuar pjesë të mëdha të të dhënave. + planet: + title: Planet OSM + description: Kopje të plota të përditësuara rregullisht të bazës së të dhënave + të OpenStreetMap + overpass: + title: API mbikalues + description: Shkarkoni këtë kuti kufizimi nga një pasqyrim i të dhënave + të OpenStreetMap + geofabrik: + title: Shkarkimet nga Geofabrik + description: Përditësime rregullisht të ekstrakteve të kontinenteve, vendeve, + dhe qyteteve të përzgjedhura + metro: + title: Metro Ekstrakte + description: Ekstrakte të qyteteve më të mëdha botërore dhe zonave përreth + tyre + other: + title: Burime të tjera + description: Burime shtesë të listuara në faqen e OpenStreetMap wiki + options: Opsionet + format: Formati + scale: Shkallë + max: max + image_size: Madhësia e imazhit + zoom: Zmadho + add_marker: Shto një shënues në hartë + latitude: 'Lat:' + longitude: 'Lon:' + output: Dalja + paste_html: Ngjite HTML për ta inkorporuar në uebfaqe + export_button: Eksporto + fixthemap: + how_to_help: + title: Si të ndihmosh + join_the_community: + title: Bashkohu me komunitetin + explanation_html: Nëse keni vënë re një problem me të dhënat e hartës, për + shembull një rrugë mungon apo adresa juaj, mënyra më e mirë për të procesuar + është t'i bashkohesh komunitetit OpeenStreetMap dhe të shtosh apo të riparosh + të dhënat vetë. + add_a_note: + instructions_html: Klikoni ose të njëjtën ikonë + në ekranin e hartës. Kjo do të shtojë një shënues në hartë, të cilën ju + mund ta lëvizni duke e tërhequr. Shtoni mesazhin tuaj, pastaj klikoni + save dhe editues të tjerë do ta kontrollojnë. + other_concerns: + title: Shqetësime të tjera + help: + title: Merr ndihmë + introduction: OpenStreetMap ka disa burime për të mësuar në lidhje me projektin, + duke bërë pyetje dhe duke ju përgjigjur dhe duke diskutuar bashkërisht dhe + duke dokumentuar temat e hartës. + welcome: + url: /mirësevjen + title: Mirësevjen në OSM + description: Filloni me këtë udhëzues të thjeshtë që mbulon bazat e OpenStreetMap. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Sq:Beginners%27_guide + title: Udhëzues për fillestarë. + description: Një udhëzues për fillestarë që mirëmbahet nga komuniteti. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Bëni një pyetje ose shikoni përgjigjet në faqen pyetje dhe përgjigje + të OSM-së. + mailing_lists: + title: Listat E Postimeve + description: Bëni një pyetje ose diskutoni çështje interesante në një gamë + të gjerë të listës së postimeve të ditës apo rajonale. + forums: + title: Forumet sidebar: search_results: Rezultatet e kërkimit close: Mbyll @@ -1163,6 +1143,25 @@ sq: richtext_area: edit: Redakto preview: Parapamje + welcome: + title: Mirësevjen + whats_on_the_map: + title: Çfarë ka në hartë? + basic_terms: + title: Termat bazë për hartografim + paragraph_1_html: OpenStreetMap ka disa shprehje në zhargonin e vet. Këtu + janë disa fjalë kyçe mund të jenë të dobishme. + editor_html: Një redaktor është një program apo faqe të cilën + mund ta përdorni për ta redaktuar hartën. + node_html: Një nyje është një pikë në hartë, si një restorant + i vetëm ose një pemë. + way_html: Një rrugë është një linjë apo fushë, si një rrugë, + lumë, liqen apo ndërtesë. + rules: + title: Rregullat! + start_mapping: Fillo hartografimin + add_a_note: + title: Nuk ke kohë për të redaktuar? Shto një shënim! trace: visibility: private: Privat (ndahet vetëm si anonim, pika të parenditura) @@ -1557,7 +1556,7 @@ sq: confirm: Konfirmo fail: Nuk ia doli ta revokoj rolin `%{role}' prej perdoruesit `%{name}'. Të lutem kontrollo përdoruesin dhe rolin nëse janë të dy të vlefshëm. - user_block: + user_blocks: new: reason: Arsyeja pse %{name} është duke u bllokuar. Të lutem je sa më i qetë dhe arsyeshëm, mundësisht përshkruaj sa më shumë detaje rreth situatës, dhe @@ -1565,19 +1564,19 @@ sq: gjuhën e komunitetit, prandaj përdor formulime sa më lehtë të kuptueshme. revoke: revoke: Revoko! - partial: + show: + confirm: A jeni i sigurt? + block: show: Shfaq edit: Redakto revoke: Revoko! - confirm: A jeni i sigurt? + blocks: status: Statusi revoker_name: Revokuar nga - show: - confirm: A jeni i sigurt? javascripts: site: edit_tooltip: Redakto hartën - redaction: + redactions: show: destroy: Revoko këtë redaktim confirm: A je i sigurt? diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index a5d15f9a7..ad44d5885 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -240,32 +240,6 @@ sr-Latn: ago: pre %{ago} newer_comments: Noviji komentari older_comments: Stariji komentari - export: - start: - area_to_export: Područje za izvoz - manually_select: Ručno izaberite drugo područje - format_to_export: Format za izvoz - osm_xml_data: Openstritmap XML podaci - map_image: Slika mape (prikazuje standardni sloj) - embeddable_html: Ugradivi HTML kod - licence: Licenca - export_details: Podaci Openstritmapa su dostupni pod licencom Krijejtiv - komons Autorstvo-Deliti pod istim uslovima 2.0. - too_large: - body: Ovo područje je preveliko da bi bilo izvezeno u formatu XML. Uvećajte - prikaz ili izaberite manju povrÅ¡inu. - options: Mogućnosti - format: Format - scale: Razmera - max: najviÅ¡e - image_size: Veličina slike - zoom: Uvećanje - add_marker: Dodaj marker na mapu - latitude: 'GÅ :' - longitude: 'GD:' - output: Izlaz - paste_html: Ubacite HTML kod za ugrađivanje na stranice - export_button: Izvezi geocoder: search: title: @@ -739,103 +713,6 @@ sr-Latn: make_a_donation: title: Podržite Openstritmap novčanim prilogom text: Priložite novac - license_page: - foreign: - title: O prevodu - text: U slučaju sukoba između prevedene stranice i %{english_original_link}, - engleska stranica ima prednost - english_link: engleskog originala - native: - title: O stranici - text: Trenutno posmatrate englesko izdanje stranice o autorskim pravima. Možete - se vratiti na %{native_link} ove stranice ili jednostavno zaboravite na autorska - prava i %{mapping_link}. - native_link: srpsko izdanje - mapping_link: počnite s mapiranjem - legal_babble: - title_html: Autorska prava i licenca - intro_1_html: |- - OpenStreetMap is open data, licensed under the Open Data - Commons Open Database License (ODbL). - intro_2_html: |2- - Možete da umnožavate, delite, prenosite i prilagođavate - naÅ¡e mape i podatke, sve dok imenujete Openstritmap i njene - urednike. Ako želite da menjate i dograđujete naÅ¡e podatke, - možete ih deliti samo pod istom licencom. - Ceo - tekst ugovora objaÅ¡njava vam vaÅ¡a prava i odgovornosti. - credit_title_html: Kako da imenujete Openstritmap - credit_1_html: |2- - Ako koristite naÅ¡e slike mapa, tražimo da zasluge sadrže - bar “© Doprinosioci - Openstritmapa, CC BY-SA”. Ako koristite samo podatke mapa, - navedite “Kartografski podaci © Doprinosioci Openstritmapa, - CC BY-SA”. - credit_2_html: |2- - Gde je moguće, Openstritmap bi trebalo da vodi do adrese http://www.openstreetmap.org/ - i CC BY-SA do http://creativecommons.org/licenses/by-sa/2.0/. - Ako koristite medijum u kom se veze ne mogu postaviti - (npr. Å¡tampani rad), predlažemo da usmerite vaÅ¡e - čitaoce na www.openstreetmap.org (po mogućstvu - proÅ¡iravanjem ‘Openstritmapa’ na celu adresu) - i na www.creativecommons.org. - more_title_html: Saznajte viÅ¡e - more_1_html: |2- - Pročitajte viÅ¡e o korišćenju naÅ¡ih podataka na ČPP. - more_2_html: |2- - Podsećamo urednike Openstritmapa da nikada ne dodaju podatke - od bilo kog izvora zaÅ¡tićenog autorskim pravima (npr. - Gugl mape ili Å¡tampane mape) bez izričite dozvole - nosioca autorskog prava. - contributors_title_html: NaÅ¡i saradnici - contributors_intro_html: |2- - NaÅ¡a licenca CC BY-SA zahteva od vas da “morate - navesti ime izvornog autora ili davaoca licence”. - Pojedinačni kartografi ne zahtevaju isticanje zasluga osim - “Openstritmap doprinosioca”, ali kada podaci - pripadaju nacionalnoj geografskoj agenciji ili drugom - većem izvoru koji je uključen u Openstritmap, razumno je - navesti izvor ili ostaviti hipervezu do njega. - contributors_at_html: |- - Austrija: sadrži podatke iz - Å tata Viena pod licencom - CC BY), - Land Forarlberg i - Land Tirol (pod licencom CC-BY AT sa izmenama i dopunama). - contributors_ca_html: |- - Kanada: sadrži podatke iz - Beobaze®, Geogratisa (© Odeljenje za prirodne - resurse Kanade), Kanvek (© Odeljenje za prirodne - resurse Kanade) i Statkan (Geografski odsek, - Zavod za statistiku Kanade). - contributors_fr_html: |- - Francuska: sadrži podatke koji potiču od - Generalne direkcije za oporezivanje. - contributors_nl_html: |- - Holandija: sadrži © AND podaci, 2007 - (www.and.com) - contributors_nz_html: |- - Novi Zeland: sadrži podatke koji potiču od - Land Information New Zealand. Krunska autorska prava zadržana. - contributors_za_html: |- - Južnoafrička Republika: sadrži podatke iz - Glavne uprave: - Nacionalna katastarska služba, državna autorska prava zadržana. - contributors_gb_html: |- - Ujedinjeno Kraljevstvo: sadrži Zvanične - podatke geodetskog premeravanja © Autorska prava 2010. - contributors_footer_1_html: |- - ViÅ¡e informacija o ovim i drugim izvorima korišćenim - za poboljÅ¡avanje Openstritmapa možete naći na stranici Doprinosioci na naÅ¡em vikiju. - contributors_footer_2_html: |2- - Uključivanje podataka u Openstritmap ne podrazumeva da izvorni - vlasnik podataka prihvata Openstritmap, obezbeđuje bilo kakvu - garanciju ili prihvata odgovornost. notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} prokomentarisa vaÅ¡ unos u dnevniku' @@ -964,6 +841,103 @@ sr-Latn: delete: deleted: Poruka je obrisana site: + copyright: + foreign: + title: O prevodu + text: U slučaju sukoba između prevedene stranice i %{english_original_link}, + engleska stranica ima prednost + english_link: engleskog originala + native: + title: O stranici + text: Trenutno posmatrate englesko izdanje stranice o autorskim pravima. Možete + se vratiti na %{native_link} ove stranice ili jednostavno zaboravite na + autorska prava i %{mapping_link}. + native_link: srpsko izdanje + mapping_link: počnite s mapiranjem + legal_babble: + title_html: Autorska prava i licenca + intro_1_html: |- + OpenStreetMap is open data, licensed under the Open Data + Commons Open Database License (ODbL). + intro_2_html: |2- + Možete da umnožavate, delite, prenosite i prilagođavate + naÅ¡e mape i podatke, sve dok imenujete Openstritmap i njene + urednike. Ako želite da menjate i dograđujete naÅ¡e podatke, + možete ih deliti samo pod istom licencom. + Ceo + tekst ugovora objaÅ¡njava vam vaÅ¡a prava i odgovornosti. + credit_title_html: Kako da imenujete Openstritmap + credit_1_html: |2- + Ako koristite naÅ¡e slike mapa, tražimo da zasluge sadrže + bar “© Doprinosioci + Openstritmapa, CC BY-SA”. Ako koristite samo podatke mapa, + navedite “Kartografski podaci © Doprinosioci Openstritmapa, + CC BY-SA”. + credit_2_html: |2- + Gde je moguće, Openstritmap bi trebalo da vodi do adrese http://www.openstreetmap.org/ + i CC BY-SA do http://creativecommons.org/licenses/by-sa/2.0/. + Ako koristite medijum u kom se veze ne mogu postaviti + (npr. Å¡tampani rad), predlažemo da usmerite vaÅ¡e + čitaoce na www.openstreetmap.org (po mogućstvu + proÅ¡iravanjem ‘Openstritmapa’ na celu adresu) + i na www.creativecommons.org. + more_title_html: Saznajte viÅ¡e + more_1_html: |2- + Pročitajte viÅ¡e o korišćenju naÅ¡ih podataka na ČPP. + more_2_html: |2- + Podsećamo urednike Openstritmapa da nikada ne dodaju podatke + od bilo kog izvora zaÅ¡tićenog autorskim pravima (npr. + Gugl mape ili Å¡tampane mape) bez izričite dozvole + nosioca autorskog prava. + contributors_title_html: NaÅ¡i saradnici + contributors_intro_html: |2- + NaÅ¡a licenca CC BY-SA zahteva od vas da “morate + navesti ime izvornog autora ili davaoca licence”. + Pojedinačni kartografi ne zahtevaju isticanje zasluga osim + “Openstritmap doprinosioca”, ali kada podaci + pripadaju nacionalnoj geografskoj agenciji ili drugom + većem izvoru koji je uključen u Openstritmap, razumno je + navesti izvor ili ostaviti hipervezu do njega. + contributors_at_html: |- + Austrija: sadrži podatke iz + Å tata Viena pod licencom + CC BY), + Land Forarlberg i + Land Tirol (pod licencom CC-BY AT sa izmenama i dopunama). + contributors_ca_html: |- + Kanada: sadrži podatke iz + Beobaze®, Geogratisa (© Odeljenje za prirodne + resurse Kanade), Kanvek (© Odeljenje za prirodne + resurse Kanade) i Statkan (Geografski odsek, + Zavod za statistiku Kanade). + contributors_fr_html: |- + Francuska: sadrži podatke koji potiču od + Generalne direkcije za oporezivanje. + contributors_nl_html: |- + Holandija: sadrži © AND podaci, 2007 + (www.and.com) + contributors_nz_html: |- + Novi Zeland: sadrži podatke koji potiču od + Land Information New Zealand. Krunska autorska prava zadržana. + contributors_za_html: |- + Južnoafrička Republika: sadrži podatke iz + Glavne uprave: + Nacionalna katastarska služba, državna autorska prava zadržana. + contributors_gb_html: |- + Ujedinjeno Kraljevstvo: sadrži Zvanične + podatke geodetskog premeravanja © Autorska prava 2010. + contributors_footer_1_html: |- + ViÅ¡e informacija o ovim i drugim izvorima korišćenim + za poboljÅ¡avanje Openstritmapa možete naći na stranici Doprinosioci na naÅ¡em vikiju. + contributors_footer_2_html: |2- + Uključivanje podataka u Openstritmap ne podrazumeva da izvorni + vlasnik podataka prihvata Openstritmap, obezbeđuje bilo kakvu + garanciju ili prihvata odgovornost. index: js_1: Koristite pregledač koji ne podržava javaskript ili ste ga onemogućili. js_2: Openstritmap koristi javaskript za prikazivanje mapa. @@ -989,6 +963,31 @@ sr-Latn: na dugme za čuvanje. no_iframe_support: VaÅ¡ pregledač ne podržava HTML iframes, a oni su potrebni za ovu mogućnost. + export: + area_to_export: Područje za izvoz + manually_select: Ručno izaberite drugo područje + format_to_export: Format za izvoz + osm_xml_data: Openstritmap XML podaci + map_image: Slika mape (prikazuje standardni sloj) + embeddable_html: Ugradivi HTML kod + licence: Licenca + export_details: Podaci Openstritmapa su dostupni pod licencom Krijejtiv + komons Autorstvo-Deliti pod istim uslovima 2.0. + too_large: + body: Ovo područje je preveliko da bi bilo izvezeno u formatu XML. Uvećajte + prikaz ili izaberite manju povrÅ¡inu. + options: Mogućnosti + format: Format + scale: Razmera + max: najviÅ¡e + image_size: Veličina slike + zoom: Uvećanje + add_marker: Dodaj marker na mapu + latitude: 'GÅ :' + longitude: 'GD:' + output: Izlaz + paste_html: Ubacite HTML kod za ugrađivanje na stranice + export_button: Izvezi sidebar: search_results: Rezultati pretrage close: Zatvori @@ -1192,7 +1191,7 @@ sr-Latn: biste pogledali uslove uređivanja. Ne morate da ih prihvatite, već samo da ih vidite. oauth: - oauthorize: + authorize: request_access: Program %{app_name} zahteva pristup vaÅ¡em nalogu, %{user}. Odlučite se da li želite da mu ga omogućite. Možete izabrati bilo koji program. allow_to: 'Dozvoli programu da:' @@ -1558,7 +1557,7 @@ sr-Latn: confirm: Potvrdi fail: Ne mogu da oduzmem ulogu „%{role}“ od korisnika %{name}. Proverite da li su korisnik i uloga ispravni. - user_block: + user_blocks: model: non_moderator_update: Morate biti urednik da biste postavljali ili ažurirali blokadu. @@ -1616,20 +1615,6 @@ sr-Latn: period: one: 1 sat other: '%{count} sata' - partial: - show: Prikaži - edit: Uredi - revoke: Opozovi - confirm: Jeste li sigurni? - display_name: Blokirani korisnik - creator_name: Tvorac - reason: Razlozi za blokiranje - status: Stanje - revoker_name: Opozvao - not_revoked: (nije opozvano) - showing_page: Prikaz stranice %{page} - next: Sledeće » - previous: « Prethodno helper: time_future: ZavrÅ¡ava se u %{time}. until_login: Aktivno sve dok se korisnik ne prijavi. @@ -1656,6 +1641,20 @@ sr-Latn: back: Pogledaj sve blokade revoker: 'Opozivalac:' needs_view: Korisnik mora da se prijavi da bi blokada bila uklonjena. + block: + not_revoked: (nije opozvano) + show: Prikaži + edit: Uredi + revoke: Opozovi + blocks: + display_name: Blokirani korisnik + creator_name: Tvorac + reason: Razlozi za blokiranje + status: Stanje + revoker_name: Opozvao + showing_page: Prikaz stranice %{page} + next: Sledeće » + previous: « Prethodno javascripts: map: base: @@ -1665,7 +1664,7 @@ sr-Latn: site: edit_tooltip: Uredite mapu edit_disabled_tooltip: Uvećajte prikaz da biste uredili mapu - redaction: + redactions: edit: description: Opis heading: Uredi redakciju diff --git a/config/locales/sr.yml b/config/locales/sr.yml index d81f2073e..453d7b970 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -339,51 +339,6 @@ sr: ago: пре %{ago} newer_comments: Новији коментари older_comments: Старији коментари - export: - title: Извоз - start: - area_to_export: Област за извоз - manually_select: Ручно изаберите другу област - format_to_export: Формат за извоз - osm_xml_data: Подаци у XML формату - map_image: Слика мапе (приказује стандардни слој) - embeddable_html: Уградиви HTML кôд - licence: Лиценца - export_details: Подаци OpenStreetMap-а су доступни под лиценцом Open - Data Commons Open Database License (ODbL). - too_large: - advice: 'Ако буде проблема при извозу, послужите се неким од доленаведених - извора:' - body: 'Ова област је превелика за извоз у XML формату. Увећајте приказ, изаберите - мању област или користите један од следећих извора за групно преузимање - података:' - planet: - title: Планета OSM - description: Редовно ажурирани примерци целе базе OpenStreetMap-а - overpass: - title: API Overpass-а - description: Преузмите овај оквир са пресликане копије базе OpenStreetMap-а - geofabrik: - title: Преузимања која омогућава Geofabrik - description: Редовно ажурирани исечци континената, земаља и изабраних градова - metro: - title: Исечци градова - description: Исечци великих светских градова и њихових околних подручја - other: - title: Други извори - description: Додатни извори наведени на викију OpenStreetMap-а - options: Опције - format: Формат - scale: Размера - max: макс. - image_size: Величина слике - zoom: Приближи - add_marker: Постави маркер на мапу - latitude: 'Ширина:' - longitude: 'Дужина:' - output: Исход - paste_html: HTML кôд за уградњу на сајт - export_button: Извези geocoder: search: title: @@ -1000,265 +955,6 @@ sr: text: Донирајте learn_more: Детаљније more: Више - license_page: - foreign: - title: О овом преводу - text: У случају сукоба између преведене странице и %{english_original_link}, - енглеска страница има предност - english_link: енглеског оригинала - native: - title: О овој страници - text: Тренутно посматрате енглеско издање странице о ауторским правима. Можете - се вратити на %{native_link} ове странице или једноставно заборавите на ауторска - права и %{mapping_link}. - native_link: српско издање - mapping_link: почни с уређивањем карте - legal_babble: - title_html: Ауторска права и лиценца - intro_1_html: |- - OpenStreetMap® садржи слободне податке који су доступни под лиценцом Open Data - Commons Open Database License (ODbL) организације OpenStreetMap Foundation (OSMF). - intro_2_html: |2- - Можете да умножавате, делите, преносите и прилагођавате - наше податке, све док именујете Опенстритмап и њене - уреднике. Ако желите да мењате и дограђујете наше податке, - можете их делити само под истом лиценцом. - Цео - текст уговора објашњава вам ваша права и одговорности. - intro_3_html: |- - Картографија у нашим пољима мапа и документацији - нуди се под лиценцом Кријејтив комонс Ауторство-Делити под истим условима 2.0 (CC BY-SA). - credit_title_html: Како да именујете OpenStreetMap - credit_1_html: |- - Захтевамо да као носиоце ауторских права наведете “© ОпенСтитМап - сарадници”. - credit_2_html: |- - Такође неопходно је недвосмислено навести да су подаци доступни под лиценцом отворене базе података "Open - Database License", и ако користите наше плочице за карту, да је картографија лиценцирана под CC BY-SA. Ово можете учинити упућивањем на - ову страницу за ауторска права. - Друга могућност је да ако ширите ОСМ у облику податка, лиценце можете навести и повезати директно. У медијима у којима повезивање није могуће (нпр. штампани материјали), предлажемо да упутите читаоце на openstreetmap.org (можда проширујући - 'OpenStreetMap' на пуну адресу), на opendatacommons.org, и ако је потребно, на creativecommons.org. - credit_3_html: |- - Ради прегледније електронске мапе, приписивање би требало да се прикаже у углу мапе. - На пример: - attribution_example: - alt: Пример како да наведете Опенстритмап на некој страници - title: Пример за навођење - more_title_html: Сазнај више - more_1_html: |- - Више о употреби података и како да нас наводите можете наћи на страници лиценце OSMF и у честим правним питањима. - more_2_html: |- - Иако OpenStreetMap ради с отвореним подацима, не можемо - трећим странама понудити бесплатан API за мапе. - Погледајте правила о употреби API-ја, - правила о употреби поља - и Номинатим. - contributors_title_html: Наши сарадници - contributors_intro_html: |- - У нашем пројекту учествује на хиљаде појединаца. Користимо и - податке с отвореном лиценцом од државних картографских установа - и других извора, међу којима су: - contributors_at_html: |- - Аустрија: садржи податке из - Штата Виена под лиценцом - CC BY), - Ланд Форарлберг и - Ланд Тирол (под лиценцом CC-BY AT са изменама и допунама). - contributors_ca_html: |- - Канада: садржи податке из - Беобазе®, Геогратиса (© Одељење за природне - ресурсе Канаде), Канвек (© Одељење за природне - ресурсе Канаде) и Статкан (Географски одсек, - Завод за статистику Канаде). - contributors_fi_html: |- - Финска: Садржи податке са - Топографске базе података Националног геодетског завода Финске - те друге сетове података, под - NLSFI лиценцом. - contributors_fr_html: |- - Француска: садржи податке који потичу од - Генералне дирекције за опорезивање. - contributors_nl_html: |- - Холандија: садржи © AND подаци, 2007 - (www.and.com) - contributors_nz_html: |- - Нови Зеланд: садржи податке који потичу од - Land Information New Zealand. Крунска ауторска права задржана. - contributors_si_html: |- - Словенија: Садржи податке са - Ауторитета за истраживање и мапирање те од - Министарства за пољопривреду, шумарство и прехрамбену индустрију - (јавне информације Словеније). - contributors_za_html: |- - Јужноафричка Република: садржи податке из - Главне управе: - Национална катастарска служба, државна ауторска права задржана. - contributors_gb_html: |- - Уједињено Краљевство: Садржи податке - Картографског завода Уједињеног Краљевства© Крунска ауторска права и - права базе 2010-12. - contributors_footer_1_html: |- - Више информација о овим и другим изворима коришћеним - за побољшавање Опенстритмапа можете наћи на страници Доприносиоци на нашем викију. - contributors_footer_2_html: |2- - Укључивање података у Опенстритмап не подразумева да изворни - власник података прихвата Опенстритмап, обезбеђује било какву - гаранцију или прихвата одговорност. - infringement_title_html: Кршење ауторских права - infringement_1_html: ОСМ сарадници се подсећају да никад не додају податке из - извора заштићених ауторским правима (нпр. Гугл карте или штампане карте) без - изричите дозволе власника ауторских права. - infringement_2_html: |- - Ако верујете да је материјал заштићен ауторским правима био неприкладно - додат у базу података OpenStreetMap или овај сајт, молимо да пратите - нашу процедуру за - скидање или да се директно обратите на - нашој онлајн страници за пријаве. - trademarks_title_html: Робне марке - trademarks_1_html: OpenStreetMap, лого лупе и State of the Map регистроване - су робне марке Фондације OpenStreetMap. Ако имате питања о томе како да користите - марке, пошаљите своја питања Радној - групи за лиценце. - welcome_page: - title: Добро дошли! - introduction_html: Добро дошли на OpenStreetMap, бесплатну изменљиву карту света. - Сада кад сте се пријавили, спремни сте да почнете са картографијом. Ево га брзи - водич са најбитнијим стварима које је потребно знати. - whats_on_the_map: - title: Шта је на карти - on_html: На мапи OpenStreetMap-а се налазе објекти који постоје у датом - тренутку, попут милиона грађевина, путева и других елемената локалитета. - Слободно можете да забележите било које детаље спољног света који су вам занимљиви. - off_html: Оно што се не рачуна су пристрасне оцене, историјски или - хипотетички подаци, и подаци заштићени ауторским правима. Ако немаш изричиту - дозволу, не умножавај папирне и карте са интернета. - basic_terms: - title: Основни картографски термини - paragraph_1_html: ОпенСтритМап има свој жаргон. Ево пар кључних речи које могу - да буду корисне. - editor_html: Уређивач је програм или алат на интернету помоћу - којег се уређује карта. - node_html: Чвор је тачка на карти, нпр. ресторан или дрво. - way_html: Линија је крива или подручје попут пута, потока, - језера или грађевине. - tag_html: Ознака је јединица којом се описује тачка или линија, - нпр. име ресторана или ограничење брзине на одређеном путу. - rules: - title: Правила! - paragraph_1_html: "OpenStreetMap има мало формалних правила, али очекујемо од - свих учесника да сарађују\nи комуницирају са заједницом. Ако разматрате било - какве\nактивности поред ручног уређивања, прочитајте и пратите смернице о - \nувозу - и \nаутоматизованим - изменама." - questions: - title: Питања? - paragraph_1_html: |- - ОпенСтритМап има неколико извора за учење о пројекту, који питају и одговарају на питања, и заједнички расправљају и документују картографске теме. - Овде тражи помоћ. - start_mapping: Почни са цртањем карте - add_a_note: - title: Немаш времена да уредиш? Додај белешку! - paragraph_1_html: Ако хоћеш нешто ситно да поправиш а немаш времена да се пријавиш - или да научиш да уређујеш, једноставно додај белешку. - paragraph_2_html: |- - Само иди на карту и кликни иконицу за белешке: - . Ово ће додати ознаку на карту, коју можеш да помераш превлачењем. Додај своју поруку, сними, и други картографи ће то истражити. - fixthemap: - title: Пријави проблем / Поправи карту - how_to_help: - title: Како да помогнем - join_the_community: - title: Прикључи се заједници - explanation_html: Ако приметите проблем са подацима на нашој мапи (нпр. одсуство - пута или адресе) најбољи начин је да се придружите заједници OpenStreetMap - и самостално додате или исправите податке. - add_a_note: - instructions_html: |- - Само кликни или исту иконицу на приказу карте. - Овоће на карту додати ознаку, Коју можеш да помераш повлачењем. Додај своју поруку, сними, и остали картографи ће то истражити. - other_concerns: - title: Остале бриге - explanation_html: "Ако те брине како се користе наши подаци погледај\nстреницу - о ауторским правима за више правних савета, или контактирај одговарајућу - \nОСМФ радну групу." - help_page: - title: Тражење помоћи - introduction: ОпенСтритМап има неколико извора за учење о пројекту, који питају - и одговарају на питања, и заједнички расправљају и документују картографске - теме. - welcome: - url: /welcome - title: Добро дошли на ОСМ - description: Почни са овим брзим водичем који покрива основе ОпенСтритМапа - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Sr:Beginners%27_guide - title: Водич за почетничке - description: Водич за почетнике - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Постави питање или нађи одговор на ОСМ страници за питања и одговоре. - mailing_lists: - title: Дописне листе - description: Поставите питање или дискутујте о питањима од значаја која се тичу - широког спектра тематских или регионалних мејлинг листа. - forums: - title: Форуми - description: Питања и расправе за оне који преферирају интерфејс у стилу билтен - табле. - irc: - title: IRC - description: Интерактивни разговор на многим језицима и на многе теме. - switch2osm: - title: switch2osm - description: Помоћ за компаније и организације које прелазе на мапе засноване - на OpenStreetMap-у и другим алаткама. - wiki: - url: https://wiki.openstreetmap.org/wiki/Sr:Main_Page - title: wiki.openstreetmap.org/wiki/Sr:Main_Page - description: Претражи вики за детаљнију ОСМ документаацију. - about_page: - next: Следеће - copyright_html: ©ÐžÐ¿ÐµÐ½Ð¡Ñ‚ритМап
        сарадници - used_by: '%{name} обезбеђује картографске податке хиљадама сајтова, мобилних апликација - и уређаја' - lede_text: OpenStreetMap је направила заједница картографа који додавају и одржавају - податке о путевима, стазама, кафићима, железничким станицама и многим другим - објектима широм света. - local_knowledge_title: Локално знање - local_knowledge_html: OpenStreetMap придаје значај локалном знању. Учесници користе - снимке из ваздуха, GPS уређаје и обичне теренске мапе у циљу провере исправности - и ажурности OSM-а. - community_driven_title: Заједница је покретач - community_driven_html: "Заједница OpenStreetMap-а је разнолика, страствена и расте - сваког дана. \nНаши сарадници су ентузијстични мапери, професионалци за GIS, - инжењери\nкоји покрећу OSM сервере, хуманитарци који мапирају подручја погођена - катастрофама,\nи још многи други.\nДа бисте сазнали више о заједници, погледајте - корисничке дневнике,\nблогове - заједнице и\nвеб-сајт Фондације - OSM." - open_data_title: Отцорени подаци - open_data_html: |- - OpenStreetMap је опен дата: слободно можете да га користите за било коју сврху - све док одате заслуге за OpenStreetMap и оне који на њему доприносе. Ако измените или - правите податке на одређене начине, можете да дистрибуишете резултата само - под истом лиценцом. Погледајте страницу о ауторским правима - и лиценцама за детаље. - legal_title: Правни аспекти - legal_html: "Овим сајтом и многим другим повезаним алаткама формално управља\nФондација OpenStreetMap (OSMF) \nу име - заједнице. Употреба свих алатки којима управља OSMF је предмет \nнаше \nполитике - прихватљиве употребе и наше политике - приватности\n
        \nМолимо да контактирате - OSMF \nако имате правна питања или проблеме око лиценцирања, ауторских права - и сл." - partners_title: Партнери notifier: diary_comment_notification: subject: '%{user} је прокоментарисао дневнички запис' @@ -1447,6 +1143,166 @@ sr: delete: deleted: Порука је обрисана site: + about: + next: Следеће + copyright_html: ©ÐžÐ¿ÐµÐ½Ð¡Ñ‚ритМап
        сарадници + used_by: '%{name} обезбеђује картографске податке хиљадама сајтова, мобилних + апликација и уређаја' + lede_text: OpenStreetMap је направила заједница картографа који додавају и одржавају + податке о путевима, стазама, кафићима, железничким станицама и многим другим + објектима широм света. + local_knowledge_title: Локално знање + local_knowledge_html: OpenStreetMap придаје значај локалном знању. Учесници + користе снимке из ваздуха, GPS уређаје и обичне теренске мапе у циљу провере + исправности и ажурности OSM-а. + community_driven_title: Заједница је покретач + community_driven_html: "Заједница OpenStreetMap-а је разнолика, страствена и + расте сваког дана. \nНаши сарадници су ентузијстични мапери, професионалци + за GIS, инжењери\nкоји покрећу OSM сервере, хуманитарци који мапирају подручја + погођена катастрофама,\nи још многи други.\nДа бисте сазнали више о заједници, + погледајте корисничке дневнике,\nблогове + заједнице и\nвеб-сајт Фондације + OSM." + open_data_title: Отцорени подаци + open_data_html: |- + OpenStreetMap је опен дата: слободно можете да га користите за било коју сврху + све док одате заслуге за OpenStreetMap и оне који на њему доприносе. Ако измените или + правите податке на одређене начине, можете да дистрибуишете резултата само + под истом лиценцом. Погледајте страницу о ауторским правима + и лиценцама за детаље. + legal_title: Правни аспекти + legal_html: "Овим сајтом и многим другим повезаним алаткама формално управља\nФондација OpenStreetMap (OSMF) \nу име + заједнице. Употреба свих алатки којима управља OSMF је предмет \nнаше \nполитике + прихватљиве употребе и наше политике + приватности\n
        \nМолимо да контактирате + OSMF \nако имате правна питања или проблеме око лиценцирања, ауторских + права и сл." + partners_title: Партнери + copyright: + foreign: + title: О овом преводу + text: У случају сукоба између преведене странице и %{english_original_link}, + енглеска страница има предност + english_link: енглеског оригинала + native: + title: О овој страници + text: Тренутно посматрате енглеско издање странице о ауторским правима. Можете + се вратити на %{native_link} ове странице или једноставно заборавите на + ауторска права и %{mapping_link}. + native_link: српско издање + mapping_link: почни с уређивањем карте + legal_babble: + title_html: Ауторска права и лиценца + intro_1_html: |- + OpenStreetMap® садржи слободне податке који су доступни под лиценцом Open Data + Commons Open Database License (ODbL) организације OpenStreetMap Foundation (OSMF). + intro_2_html: |2- + Можете да умножавате, делите, преносите и прилагођавате + наше податке, све док именујете Опенстритмап и њене + уреднике. Ако желите да мењате и дограђујете наше податке, + можете их делити само под истом лиценцом. + Цео + текст уговора објашњава вам ваша права и одговорности. + intro_3_html: |- + Картографија у нашим пољима мапа и документацији + нуди се под лиценцом Кријејтив комонс Ауторство-Делити под истим условима 2.0 (CC BY-SA). + credit_title_html: Како да именујете OpenStreetMap + credit_1_html: |- + Захтевамо да као носиоце ауторских права наведете “© ОпенСтитМап + сарадници”. + credit_2_html: |- + Такође неопходно је недвосмислено навести да су подаци доступни под лиценцом отворене базе података "Open + Database License", и ако користите наше плочице за карту, да је картографија лиценцирана под CC BY-SA. Ово можете учинити упућивањем на + ову страницу за ауторска права. + Друга могућност је да ако ширите ОСМ у облику податка, лиценце можете навести и повезати директно. У медијима у којима повезивање није могуће (нпр. штампани материјали), предлажемо да упутите читаоце на openstreetmap.org (можда проширујући + 'OpenStreetMap' на пуну адресу), на opendatacommons.org, и ако је потребно, на creativecommons.org. + credit_3_html: |- + Ради прегледније електронске мапе, приписивање би требало да се прикаже у углу мапе. + На пример: + attribution_example: + alt: Пример како да наведете Опенстритмап на некој страници + title: Пример за навођење + more_title_html: Сазнај више + more_1_html: |- + Више о употреби података и како да нас наводите можете наћи на страници лиценце OSMF и у честим правним питањима. + more_2_html: |- + Иако OpenStreetMap ради с отвореним подацима, не можемо + трећим странама понудити бесплатан API за мапе. + Погледајте правила о употреби API-ја, + правила о употреби поља + и Номинатим. + contributors_title_html: Наши сарадници + contributors_intro_html: |- + У нашем пројекту учествује на хиљаде појединаца. Користимо и + податке с отвореном лиценцом од државних картографских установа + и других извора, међу којима су: + contributors_at_html: |- + Аустрија: садржи податке из + Штата Виена под лиценцом + CC BY), + Ланд Форарлберг и + Ланд Тирол (под лиценцом CC-BY AT са изменама и допунама). + contributors_ca_html: |- + Канада: садржи податке из + Беобазе®, Геогратиса (© Одељење за природне + ресурсе Канаде), Канвек (© Одељење за природне + ресурсе Канаде) и Статкан (Географски одсек, + Завод за статистику Канаде). + contributors_fi_html: |- + Финска: Садржи податке са + Топографске базе података Националног геодетског завода Финске + те друге сетове података, под + NLSFI лиценцом. + contributors_fr_html: |- + Француска: садржи податке који потичу од + Генералне дирекције за опорезивање. + contributors_nl_html: |- + Холандија: садржи © AND подаци, 2007 + (www.and.com) + contributors_nz_html: |- + Нови Зеланд: садржи податке који потичу од + Land Information New Zealand. Крунска ауторска права задржана. + contributors_si_html: |- + Словенија: Садржи податке са + Ауторитета за истраживање и мапирање те од + Министарства за пољопривреду, шумарство и прехрамбену индустрију + (јавне информације Словеније). + contributors_za_html: |- + Јужноафричка Република: садржи податке из + Главне управе: + Национална катастарска служба, државна ауторска права задржана. + contributors_gb_html: |- + Уједињено Краљевство: Садржи податке + Картографског завода Уједињеног Краљевства© Крунска ауторска права и + права базе 2010-12. + contributors_footer_1_html: |- + Више информација о овим и другим изворима коришћеним + за побољшавање Опенстритмапа можете наћи на страници Доприносиоци на нашем викију. + contributors_footer_2_html: |2- + Укључивање података у Опенстритмап не подразумева да изворни + власник података прихвата Опенстритмап, обезбеђује било какву + гаранцију или прихвата одговорност. + infringement_title_html: Кршење ауторских права + infringement_1_html: ОСМ сарадници се подсећају да никад не додају податке + из извора заштићених ауторским правима (нпр. Гугл карте или штампане карте) + без изричите дозволе власника ауторских права. + infringement_2_html: |- + Ако верујете да је материјал заштићен ауторским правима био неприкладно + додат у базу података OpenStreetMap или овај сајт, молимо да пратите + нашу процедуру за + скидање или да се директно обратите на + нашој онлајн страници за пријаве. + trademarks_title_html: Робне марке + trademarks_1_html: OpenStreetMap, лого лупе и State of the Map регистроване + су робне марке Фондације OpenStreetMap. Ако имате питања о томе како да + користите марке, пошаљите своја питања Радној + групи за лиценце. index: js_1: Користите прегледач који не подржава јаваскрипт или сте га онемогућили. js_2: OpenStreetMap користи јаваскрипт за приказивање мапа. @@ -1477,6 +1333,105 @@ sr: id_not_configured: iD није конфигурисан no_iframe_support: Ваш прегледач не подржава HTML iframes, а они су потребни за ову могућност. + export: + title: Извоз + area_to_export: Област за извоз + manually_select: Ручно изаберите другу област + format_to_export: Формат за извоз + osm_xml_data: Подаци у XML формату + map_image: Слика мапе (приказује стандардни слој) + embeddable_html: Уградиви HTML кôд + licence: Лиценца + export_details: Подаци OpenStreetMap-а су доступни под лиценцом Open + Data Commons Open Database License (ODbL). + too_large: + advice: 'Ако буде проблема при извозу, послужите се неким од доленаведених + извора:' + body: 'Ова област је превелика за извоз у XML формату. Увећајте приказ, изаберите + мању област или користите један од следећих извора за групно преузимање + података:' + planet: + title: Планета OSM + description: Редовно ажурирани примерци целе базе OpenStreetMap-а + overpass: + title: API Overpass-а + description: Преузмите овај оквир са пресликане копије базе OpenStreetMap-а + geofabrik: + title: Преузимања која омогућава Geofabrik + description: Редовно ажурирани исечци континената, земаља и изабраних градова + metro: + title: Исечци градова + description: Исечци великих светских градова и њихових околних подручја + other: + title: Други извори + description: Додатни извори наведени на викију OpenStreetMap-а + options: Опције + format: Формат + scale: Размера + max: макс. + image_size: Величина слике + zoom: Приближи + add_marker: Постави маркер на мапу + latitude: 'Ширина:' + longitude: 'Дужина:' + output: Исход + paste_html: HTML кôд за уградњу на сајт + export_button: Извези + fixthemap: + title: Пријави проблем / Поправи карту + how_to_help: + title: Како да помогнем + join_the_community: + title: Прикључи се заједници + explanation_html: Ако приметите проблем са подацима на нашој мапи (нпр. + одсуство пута или адресе) најбољи начин је да се придружите заједници + OpenStreetMap и самостално додате или исправите податке. + add_a_note: + instructions_html: |- + Само кликни или исту иконицу на приказу карте. + Овоће на карту додати ознаку, Коју можеш да помераш повлачењем. Додај своју поруку, сними, и остали картографи ће то истражити. + other_concerns: + title: Остале бриге + explanation_html: "Ако те брине како се користе наши подаци погледај\nстреницу + о ауторским правима за више правних савета, или контактирај одговарајућу + \nОСМФ радну + групу." + help: + title: Тражење помоћи + introduction: ОпенСтритМап има неколико извора за учење о пројекту, који питају + и одговарају на питања, и заједнички расправљају и документују картографске + теме. + welcome: + url: /welcome + title: Добро дошли на ОСМ + description: Почни са овим брзим водичем који покрива основе ОпенСтритМапа + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Sr:Beginners%27_guide + title: Водич за почетничке + description: Водич за почетнике + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Постави питање или нађи одговор на ОСМ страници за питања и одговоре. + mailing_lists: + title: Дописне листе + description: Поставите питање или дискутујте о питањима од значаја која се + тичу широког спектра тематских или регионалних мејлинг листа. + forums: + title: Форуми + description: Питања и расправе за оне који преферирају интерфејс у стилу билтен + табле. + irc: + title: IRC + description: Интерактивни разговор на многим језицима и на многе теме. + switch2osm: + title: switch2osm + description: Помоћ за компаније и организације које прелазе на мапе засноване + на OpenStreetMap-у и другим алаткама. + wiki: + url: https://wiki.openstreetmap.org/wiki/Sr:Main_Page + title: wiki.openstreetmap.org/wiki/Sr:Main_Page + description: Претражи вики за детаљнију ОСМ документаацију. sidebar: search_results: Резултати претраге close: Затвори @@ -1576,6 +1531,52 @@ sr: image: Слика alt: Резервни текст url: Адреса + welcome: + title: Добро дошли! + introduction_html: Добро дошли на OpenStreetMap, бесплатну изменљиву карту света. + Сада кад сте се пријавили, спремни сте да почнете са картографијом. Ево га + брзи водич са најбитнијим стварима које је потребно знати. + whats_on_the_map: + title: Шта је на карти + on_html: На мапи OpenStreetMap-а се налазе објекти који постоје у датом + тренутку, попут милиона грађевина, путева и других елемената локалитета. + Слободно можете да забележите било које детаље спољног света који су вам + занимљиви. + off_html: Оно што се не рачуна су пристрасне оцене, историјски или + хипотетички подаци, и подаци заштићени ауторским правима. Ако немаш изричиту + дозволу, не умножавај папирне и карте са интернета. + basic_terms: + title: Основни картографски термини + paragraph_1_html: ОпенСтритМап има свој жаргон. Ево пар кључних речи које + могу да буду корисне. + editor_html: Уређивач је програм или алат на интернету помоћу + којег се уређује карта. + node_html: Чвор је тачка на карти, нпр. ресторан или дрво. + way_html: Линија је крива или подручје попут пута, потока, + језера или грађевине. + tag_html: Ознака је јединица којом се описује тачка или линија, + нпр. име ресторана или ограничење брзине на одређеном путу. + rules: + title: Правила! + paragraph_1_html: "OpenStreetMap има мало формалних правила, али очекујемо + од свих учесника да сарађују\nи комуницирају са заједницом. Ако разматрате + било какве\nактивности поред ручног уређивања, прочитајте и пратите смернице + о \nувозу + и \nаутоматизованим + изменама." + questions: + title: Питања? + paragraph_1_html: |- + ОпенСтритМап има неколико извора за учење о пројекту, који питају и одговарају на питања, и заједнички расправљају и документују картографске теме. + Овде тражи помоћ. + start_mapping: Почни са цртањем карте + add_a_note: + title: Немаш времена да уредиш? Додај белешку! + paragraph_1_html: Ако хоћеш нешто ситно да поправиш а немаш времена да се + пријавиш или да научиш да уређујеш, једноставно додај белешку. + paragraph_2_html: |- + Само иди на карту и кликни иконицу за белешке: + . Ово ће додати ознаку на карту, коју можеш да помераш превлачењем. Додај своју поруку, сними, и други картографи ће то истражити. trace: visibility: private: Приватни (приказује се као анонимне, непоређане тачке) @@ -1704,7 +1705,7 @@ sr: бисте погледали услове уређивања. Не морате да их прихватите, већ само да их видите. oauth: - oauthorize: + authorize: title: Ауторизујте приступ свом налогу request_access: Програм %{app_name} захтева приступ вашем налогу, %{user}. Одлучите се да ли желите да му га омогућите. Можете изабрати било који програм. @@ -1717,11 +1718,11 @@ sr: allow_write_gpx: отпрема GPS трагове. allow_write_notes: измени белешке. grant_access: Додели приступ - oauthorize_success: + authorize_success: title: Омогућен захтев за ауторизацију allowed: Омогућили сте да апликација %{app_name} приступи Вашем налогу. verification: Верификациони код је %{code}. - oauthorize_failure: + authorize_failure: title: Неуспешан захтев за ауторизацију denied: Онемогућили сте да апликација %{app_name} приступи Вашем налогу. invalid: Токен за ауторизацију није валидан. @@ -2156,7 +2157,7 @@ sr: confirm: Потврди fail: Не могу да одузмем улогу „%{role}“ од корисника %{name}. Проверите да ли су корисник и улога исправни. - user_block: + user_blocks: model: non_moderator_update: Морате бити уредник да бисте постављали или ажурирали блокаду. @@ -2214,20 +2215,6 @@ sr: period: one: 1 сат other: '%{count} сата' - partial: - show: Прикажи - edit: Уреди - revoke: Опозови - confirm: Јесте ли сигурни? - display_name: Блокирани корисник - creator_name: Творац - reason: Разлози за блокирање - status: Стање - revoker_name: Опозвао - not_revoked: (није опозвано) - showing_page: Страница %{page} - next: Следеће » - previous: « Претходно helper: time_future: Завршава се у %{time}. until_login: Активно све док се корисник не пријави. @@ -2257,8 +2244,22 @@ sr: back: Погледај све блокаде revoker: 'Опозивалац:' needs_view: Корисник мора да се пријави да би блокада била уклоњена. - note: - description: + block: + not_revoked: (није опозвано) + show: Прикажи + edit: Уреди + revoke: Опозови + blocks: + display_name: Блокирани корисник + creator_name: Творац + reason: Разлози за блокирање + status: Стање + revoker_name: Опозвао + showing_page: Страница %{page} + next: Следеће » + previous: « Претходно + notes: + comment: opened_at_html: Направљено пре %{when} opened_at_by_html: '%{user} направио пре %{when}' commented_at_html: Освежено пре %{when} @@ -2436,7 +2437,7 @@ sr: show_address: Прикажи адресу query_features: Одлике упита centre_map: Центрирај мапу овде - redaction: + redactions: edit: description: Опис heading: Уреди редакцију diff --git a/config/locales/sv.yml b/config/locales/sv.yml index aaff3ed8d..46e71333f 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -275,7 +275,7 @@ sv: list: title: Ändringsset title_user: Ändringsset av %{user} - title_friend: Ändringsset av dina vänner + title_friend: Ändringsset av mina vänner title_nearby: Ändringsset av närbelägna användare empty: Inga ändringsset hittades. empty_area: Inga ändringsset i det här omrÃ¥det. @@ -305,7 +305,7 @@ sv: user_title: '%{user}s dagbok' in_language_title: Dagboksinlägg pÃ¥ %{language} new: Nytt dagboksinlägg - new_title: Skapa ett nytt inlägg i din användardagbok + new_title: Skapa ett nytt inlägg i min användardagbok no_entries: Inga dagboksinlägg recent_entries: Nyligen skapade dagboksinlägg older_entries: Äldre inlägg @@ -370,53 +370,6 @@ sv: ago: '%{ago} sedan' newer_comments: Nyare kommentarer older_comments: Äldre kommentarer - export: - title: Exportera - start: - area_to_export: OmrÃ¥de som ska exporteras - manually_select: Välj ett annat omrÃ¥de manuellt - format_to_export: Format för export - osm_xml_data: OpenStreetMap XML-data - map_image: Kartbild (visar vanliga lager) - embeddable_html: Inbäddad HTML - licence: Licens - export_details: Data frÃ¥n OpenStreetMap har gjorts tillgänglig under licensen Open Data Commons Open - Database License (ODbL). - too_large: - advice: 'Om ovanstÃ¥ende export misslyckas, vänligen överväg att använda en - av de källor som anges nedan:' - body: 'Detta omrÃ¥de är för stort för att exporteras som OpenStreetMap XML-data. - Vänligen zooma in eller välj ett mindre omrÃ¥de, eller använd en av följande - källor för nedladdningar av bulkdata:' - planet: - title: Planet OSM - description: Regelbundet uppdaterade kopior av den kompletta OpenStreetMap-databasen - overpass: - title: Overpass API - description: Hämta denna avgränsningsram frÃ¥n en spegel av OpenStreetMap-databasen - geofabrik: - title: Geofabrik Downloads - description: Regelbundet uppdaterat utdrag av kontinenter, länder och utvalda - städer - metro: - title: Metro Extracts - description: Utdrag av stora världsstäder och deras näromrÃ¥den - other: - title: Andra källor - description: Ytterligare källor anges pÃ¥ OpenStreetMaps wiki - options: Alternativ - format: Format - scale: Skala - max: max - image_size: Bildstorlek - zoom: Zooma - add_marker: Lägg till markör pÃ¥ kartan - latitude: 'Lat:' - longitude: 'Lon:' - output: Utdata - paste_html: Klistra in HTML för att bädda in pÃ¥ webbplats - export_button: Exportera geocoder: search: title: @@ -1061,270 +1014,6 @@ sv: text: Donera learn_more: Läs mer more: Mer - license_page: - foreign: - title: Om denna översättning - text: I händelse av en konflikt mellan denna översatta sida och %{english_original_link} - har den engelska texten företräde - english_link: det engelska originalet - native: - title: Om denna sida - text: Du tittar pÃ¥ den engelska versionen av sidan om upphovsrätt. Du kan gÃ¥ - tillbaka till %{native_link} pÃ¥ den här sidan eller sluta läsa om upphovsrätt - och %{mapping_link}. - native_link: svensk version - mapping_link: börja kartlägga - legal_babble: - title_html: Upphovsrätt och licens - intro_1_html: |- - OpenStreetMap® är öppen data, gjord tillgänglig under licensen Open Data Commons Open Database License (ODbL) av OpenStreetMap Foundation (OSMF). - intro_2_html: |- - Du är fri att kopiera, distribuera, överföra och anpassa vÃ¥r data, - sÃ¥ länge du anger OpenStreetMap och dess bidragsgivare som källa. - Om du ändrar eller bygger vidare pÃ¥ vÃ¥r data kan du - endast distribuera resultatet under samma licens. Den - fullständiga juridiska - texten förklarar dina rättigheter och skyldigheter. - intro_3_html: |- - Kartografin i vÃ¥ra kartrutor, och vÃ¥r dokumentation, är - tillgängliga under licensen Creative - Commons Attribution-ShareAlike 2.0 (CC BY-SA). - credit_title_html: Hur du anger OpenStreetMap som källa - credit_1_html: |- - Vi kräver att din källhänvisning bestÃ¥r av “© OpenStreetMaps - bidragsgivare”. - credit_2_html: |- - Du mÃ¥ste ocksÃ¥ göra klart att datan är tillgänglig under licensen - Open Database License, och om du använder vÃ¥ra kartrutor, att kartografin är - tillgänglig under licensen CC BY-SA. Du kan göra detta genom att länka till - denna sida om upphovsrätt. - Alternativt, och som krav om du distribuerar OSM i dataform, kan du namnge - och länka direkt till licenserna. I media där länkar ej är möjliga - (t.ex. tryckt material), förslÃ¥r vi att du hänvisar dina läsare till openstreetmap.org - (förslagsvis genom att expandera 'OpenStreetMap' till hela denna adress), till opendatacommons.org, och om relevant till creativecommons.org. - credit_3_html: |- - För en navigerbar elektronisk karta, ska källhänvisningen synas i ena hörnet av kartan. - Till exempel: - attribution_example: - alt: Exempel pÃ¥ hur en webbsida kan ange OpenStreetMap som källa - title: Exempel pÃ¥ källhänvisning. - more_title_html: Mer information - more_1_html: |- - Läs mer om användning av vÃ¥r data och hur du anger oss som källa pÃ¥ OSMF:s licenssida. - more_2_html: |- - Även om OpenStreetMap är öppen data, kan vi inte tillhandahÃ¥lla nÃ¥got gratis kart-API för tredjeparter. - Se vÃ¥r användningspolicy för API, - användningspolicy för kartrutor - och användningspolicy för Nominatim. - contributors_title_html: VÃ¥ra bidragsgivare - contributors_intro_html: |- - VÃ¥ra bidragsgivare är tusentals individer. Vi inkluderar ocksÃ¥ - öppna data frÃ¥n nationella karttjänster, - bland annat frÃ¥n: - contributors_at_html: |- - Österrike: InnehÃ¥ller data frÃ¥n - Stadt Wien (under licensen - CC BY), - Land Vorarlberg och - Land Tirol (under licensen CC BY AT med tillägg). - contributors_ca_html: |- - Kanada: InnehÃ¥ller data frÃ¥n - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada), och StatCan (Geography Division, - Statistics Canada). - contributors_fi_html: 'Finland: InnehÃ¥ller data frÃ¥n Lantmäteriverket - i Finlands topografiska databas och andra dataset, under licensen NLSFI.' - contributors_fr_html: |- - Frankrike: InnehÃ¥ller data - frÃ¥n Direction Générale des Impôts. - contributors_nl_html: |- - Nederländerna: InnehÃ¥ller © AND data, 2007 - (www.and.com) - contributors_nz_html: |- - Nya Zeeland: InnehÃ¥ller data frÃ¥n - Land Information New Zealand. Crown Copyright reserved. - contributors_si_html: |- - Slovenien: InnehÃ¥ller uppgifter frÃ¥n - Surveying and Mapping Authority och - Ministry of Agriculture, Forestry and Food - (offentlig information i Slovenien). - contributors_za_html: |- - Sydafrika: InnehÃ¥ller data frÃ¥n - Chief Directorate: - National Geo-Spatial Information, State copyright reserved. - contributors_gb_html: |- - Storbritannien: InnehÃ¥ller Ordnance - Survey data © Crown copyright and database right - 2010-12. - contributors_footer_1_html: |- - För ytterligare detaljer om dessa och andra källor som använts - för att förbättra OpenStreetMap, se sidan om bidragsgivare - pÃ¥ OpenStreetMaps wiki. - contributors_footer_2_html: " Införandet av uppgifter i OpenStreetMap innebär - inte att den ursprungliga \n datagivaren stödjer OpenStreetMap, ger nÃ¥gon - som helst garanti eller\n tar pÃ¥ sig nÃ¥got ansvar." - infringement_title_html: UpphovsrättsintrÃ¥ng - infringement_1_html: |- - Bidragsgivare till OSM pÃ¥minns om att aldrig lägga till data frÃ¥n - upphovsrättsskyddade källor (t.ex. Google Maps och tryckta kartor) utan - uttryckligt tillstÃ¥nd frÃ¥n upphovsrättsinnehavarna. - infringement_2_html: |- - Om du tror att upphovsrättsskyddat material felaktigt har - lagts in i OpenStreetMaps databas eller till den här webbplatsen, se - vÃ¥rt borttagningsförfarande - eller fyll i vÃ¥rt online-formulär direkt. - trademarks_title_html: Varumärken - trademarks_1_html: OpenStreetMap, förstoringsglas-logotypen och State of the - Map är registrerade varumärken hos OpenStreetMap Foundation. Om du har frÃ¥gor - gällande din användning av varumärkena, vänligen se vÃ¥r varumärkespolicy. - welcome_page: - title: Välkommen! - introduction_html: Välkommen till OpenStreetMap, den fria och redigerbara kartan - över världen. Nu när du har registrerat dig är du klar för att börja kartlägga - saker. Här är en snabb genomgÃ¥ng av de viktigaste sakerna du behöver veta. - whats_on_the_map: - title: Vad finns pÃ¥ kartan - on_html: OpenStreetMap är en plats för att kartlägga sÃ¥dant som bÃ¥de finns - i verkligheten och är aktuellt. OpenStreetMap innehÃ¥ller miljontals byggnader, - vägar och annan information om platser. Du kan lägga till vad som helst som - finns i verkligheten och som intresserar dig. - off_html: Vad OpenStreetMap inte innehÃ¥ller är subjektiva data som - betyg, historiska eller hypotetiska objekt, samt data frÃ¥n upphovsrättsskyddade - källor. Om du inte har ett speciellt tillstÃ¥nd, kopiera inte frÃ¥n andra kartor - online eller pÃ¥ papper. - basic_terms: - title: Grundläggande termer för kartering - paragraph_1_html: OpenStreetMap har en del egen jargong. Här är nÃ¥gra begrepp - som kan vara bra att förstÃ¥. - editor_html: En redigerare är ett program eller en webbsida - du kan använda för att ändra i kartan. - node_html: En nod är en punkt pÃ¥ kartan, till exempel en ensam - restaurang eller ett träd. - way_html: En väg är en linje eller ett omrÃ¥de, till exempel - en väg, bäck, sjö eller byggnad. - tag_html: En tagg är en bit data om en nod eller väg, till - exempel en restaurangs namn eller en vägs hastighetsbegränsning. - rules: - title: Regler! - paragraph_1_html: "OpenStreetMap har fÃ¥ formella regler, men vi förväntar oss - att alla deltagare samarbetar och kommunicerar med gemenskapen. Om du funderar - pÃ¥\nnÃ¥gon annan aktivitet än manuell redigering av sidan, läs och följ anvisningarna - pÃ¥ \nImport - och \nAutomatiserade - redigeringar." - questions: - title: NÃ¥gra frÃ¥gor? - paragraph_1_html: |- - OpenStreetMap har flera resurser som hjälper dig att lära dig om projektet, för att ställa och svara pÃ¥ frÃ¥gor, och tillsammans diskutera och dokumentera frÃ¥gor gällande kartering. - FÃ¥ hjälp här. - start_mapping: Börja kartlägga - add_a_note: - title: Ingen tid att redigera? Lägg till en kommentar! - paragraph_1_html: Om du bara vill ha ett litet problem fixat och inte har tid - att registrera dig sÃ¥ är det lätt att lämna en kartanteckning. - paragraph_2_html: |- - GÃ¥ till kartan och tryck pÃ¥ anteckningsikonen: - . En markör, som du kan dra omkring, kommer att läggas till pÃ¥ kartan. Lägg till ett meddelande och spara. NÃ¥gon annan kommer att undersöka frÃ¥gan. - fixthemap: - title: Rapportera ett problem / Fixa kartan - how_to_help: - title: Hur man kan hjälpa till - join_the_community: - title: GÃ¥ med i gemenskapen - explanation_html: Om du har hittat ett problem med vÃ¥r kartdata, till exempel - att en väg eller din adress saknas, är den bästa lösningen att gÃ¥ med i - OpenStreetMap-gemenskapen och själv lägga till eller reparera datan. - add_a_note: - instructions_html: |- - Klicka bara pÃ¥ eller samma ikon i kartrutan. - Detta lägger till en markör pÃ¥ kartan som du kan flytta - genom att dra. Skriv ditt meddelande och klicka sedan pÃ¥ spara, sÃ¥ kommer andra kartritare att undersöka. - other_concerns: - title: Andra farhÃ¥gor - explanation_html: |- - Om du har frÃ¥gor om hur vÃ¥r data används eller om innehÃ¥llet, se - sidan om upphovsrätt för mer juridisk information eller kontakta lämplig - OSMF-arbetsgrupp. - help_page: - title: FÃ¥ hjälp - introduction: OpenStreetMap har flera resurser som hjälper dig att lära dig om - projektet, för att ställa och svara pÃ¥ frÃ¥gor, och tillsammans diskutera och - dokumentera frÃ¥gor gällande kartering. - welcome: - url: /welcome - title: Välkommen till OSM - description: Börja med den här snabbguiden som täcker grunderna i OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Sv:Beginners%27_guide - title: Guide för nybörjare - description: Guide för nybörjare som underhÃ¥lls av gemenskapen. - help: - url: https://help.OpenStreetMap.org/ - title: help.openstreetmap.org - description: Ställ en frÃ¥ga eller kolla upp svar pÃ¥ OSM:s sida med svar pÃ¥ ofta - förekommande frÃ¥gor. - mailing_lists: - title: E-postlistor - description: Ställ en frÃ¥ga eller diskutera intressanta saker pÃ¥ ett brett utbud - av lokala eller regionala e-postlistor. - forums: - title: Forum - description: FrÃ¥gor och diskussioner för de som föredrar ett gränssnitt liknande - en anslagstavla. - irc: - title: IRC - description: Interaktiv chatt pÃ¥ flera olika sprÃ¥k rörande mängder av ämnen. - switch2osm: - title: switch2osm - description: Hjälp för företag och organisationer att byta till OpenStreetMap-baserade - kartor och andra tjänster. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Sök i wikin för ingÃ¥ende OSM-dokumentation. - about_page: - next: Nästa - copyright_html: ©OpenStreetMap
        bidragsgivare - used_by: '%{name} förser tusentals webbsidor, mobilappar och fysiska apparater - med kartdata' - lede_text: OpenStreetMap är byggt av en gemenskap av kartografer som bidrar och - underhåller data om vägar, stigar, caféer, järnvägsstationer och mycket mer, - över hela världen. - local_knowledge_title: Lokalkännedom - local_knowledge_html: OpenStreetMap betonar lokal kunskap. Bidragsgivare använder - flygbilder, GPS-enheter och lågteknologiska fältkartor för att kontrollera att - OSM är korrekt och uppdaterad. - community_driven_title: Gemenskapsdriven - community_driven_html: "OpenStreetMaps gemenskap är blandad, passionerad och växer - varje dag.\nBland våra bidragsgivare finns kartentusiaster, GIS-proffs, ingenjörer - som håller igång OSM:s servrar, frivilliga som kartlägger katastrofområden, - och många andra.\nFör mer information om gemenskapen, se \nOpenStreetMap-bloggen, - \nanvändardagböcker, \ngemenskapens - bloggar, och \nOSM-stiftelsens - webbplats." - open_data_title: Öppna data - open_data_html: 'OpenStreetMap är öppna data: du kan fritt använda den - för valfritt syfte så länge du anger OpenStreetMap och dess bidragsgivare som - källa. Om du förändrar eller bygger vidare på datan på vissa sätt, kan du endast - distribuera resultatet under samma licens. Se sidan - för Upphovsrätt och Licens för detaljer.' - legal_title: Juridik - legal_html: "Denna sida och många andra liknande tjänster drivs formellt av \nOpenStreetMap Foundation (OSMF) \npå - gemenskapens vägnar. Användning av alla OSMF-opererade tjänster är föremål\nför - våra \npolicyer - för acceptabel användning och vår integritetspolicy\n
        - \nVänligen kontakta OSMF \nom - du har frågor eller funderingar om licenser, upphovsrätt eller andra rättsliga - frågor.\n
        \nOpenStreetMap, förstoringsglaslogotypen och State of the Map - är registrerade - varumärken av OSMF." - partners_title: Partners notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} kommenterade pÃ¥ ett dagboksinlägg' @@ -1515,6 +1204,165 @@ sv: delete: deleted: Meddelande raderat site: + about: + next: Nästa + copyright_html: ©OpenStreetMap
        bidragsgivare + used_by: '%{name} förser tusentals webbsidor, mobilappar och fysiska apparater + med kartdata' + lede_text: OpenStreetMap är byggt av en gemenskap av kartografer som bidrar + och underhåller data om vägar, stigar, caféer, järnvägsstationer och mycket + mer, över hela världen. + local_knowledge_title: Lokalkännedom + local_knowledge_html: OpenStreetMap betonar lokal kunskap. Bidragsgivare använder + flygbilder, GPS-enheter och lågteknologiska fältkartor för att kontrollera + att OSM är korrekt och uppdaterad. + community_driven_title: Gemenskapsdriven + community_driven_html: "OpenStreetMaps gemenskap är blandad, passionerad och + växer varje dag.\nBland våra bidragsgivare finns kartentusiaster, GIS-proffs, + ingenjörer som håller igång OSM:s servrar, frivilliga som kartlägger katastrofområden, + och många andra.\nFör mer information om gemenskapen, se \nOpenStreetMap-bloggen, + \nanvändardagböcker, \ngemenskapens + bloggar, och \nOSM-stiftelsens + webbplats." + open_data_title: Öppna data + open_data_html: 'OpenStreetMap är öppna data: du kan fritt använda den + för valfritt syfte så länge du anger OpenStreetMap och dess bidragsgivare + som källa. Om du förändrar eller bygger vidare på datan på vissa sätt, kan + du endast distribuera resultatet under samma licens. Se sidan + för Upphovsrätt och Licens för detaljer.' + legal_title: Juridik + legal_html: "Denna sida och många andra liknande tjänster drivs formellt av + \nOpenStreetMap Foundation (OSMF) + \npå gemenskapens vägnar. Användning av alla OSMF-opererade tjänster är föremål\nför + våra \npolicyer + för acceptabel användning och vår integritetspolicy\n
        + \nVänligen kontakta OSMF + \nom du har frågor eller funderingar om licenser, upphovsrätt eller andra + rättsliga frågor.\n
        \nOpenStreetMap, förstoringsglaslogotypen och State + of the Map är registrerade + varumärken av OSMF." + partners_title: Partners + copyright: + foreign: + title: Om denna översättning + text: I händelse av en konflikt mellan denna översatta sida och %{english_original_link} + har den engelska texten företräde + english_link: det engelska originalet + native: + title: Om denna sida + text: Du tittar pÃ¥ den engelska versionen av sidan om upphovsrätt. Du kan + gÃ¥ tillbaka till %{native_link} pÃ¥ den här sidan eller sluta läsa om upphovsrätt + och %{mapping_link}. + native_link: svensk version + mapping_link: börja kartlägga + legal_babble: + title_html: Upphovsrätt och licens + intro_1_html: |- + OpenStreetMap® är öppen data, gjord tillgänglig under licensen Open Data Commons Open Database License (ODbL) av OpenStreetMap Foundation (OSMF). + intro_2_html: |- + Du är fri att kopiera, distribuera, överföra och anpassa vÃ¥r data, + sÃ¥ länge du anger OpenStreetMap och dess bidragsgivare som källa. + Om du ändrar eller bygger vidare pÃ¥ vÃ¥r data kan du + endast distribuera resultatet under samma licens. Den + fullständiga juridiska + texten förklarar dina rättigheter och skyldigheter. + intro_3_html: |- + Kartografin i vÃ¥ra kartrutor, och vÃ¥r dokumentation, är + tillgängliga under licensen Creative + Commons Attribution-ShareAlike 2.0 (CC BY-SA). + credit_title_html: Hur du anger OpenStreetMap som källa + credit_1_html: |- + Vi kräver att din källhänvisning bestÃ¥r av “© OpenStreetMaps + bidragsgivare”. + credit_2_html: |- + Du mÃ¥ste ocksÃ¥ göra klart att datan är tillgänglig under licensen + Open Database License, och om du använder vÃ¥ra kartrutor, att kartografin är + tillgänglig under licensen CC BY-SA. Du kan göra detta genom att länka till + denna sida om upphovsrätt. + Alternativt, och som krav om du distribuerar OSM i dataform, kan du namnge + och länka direkt till licenserna. I media där länkar ej är möjliga + (t.ex. tryckt material), förslÃ¥r vi att du hänvisar dina läsare till openstreetmap.org + (förslagsvis genom att expandera 'OpenStreetMap' till hela denna adress), till opendatacommons.org, och om relevant till creativecommons.org. + credit_3_html: |- + För en navigerbar elektronisk karta, ska källhänvisningen synas i ena hörnet av kartan. + Till exempel: + attribution_example: + alt: Exempel pÃ¥ hur en webbsida kan ange OpenStreetMap som källa + title: Exempel pÃ¥ källhänvisning. + more_title_html: Mer information + more_1_html: |- + Läs mer om användning av vÃ¥r data och hur du anger oss som källa pÃ¥ OSMF:s licenssida. + more_2_html: |- + Även om OpenStreetMap är öppen data, kan vi inte tillhandahÃ¥lla nÃ¥got gratis kart-API för tredjeparter. + Se vÃ¥r användningspolicy för API, + användningspolicy för kartrutor + och användningspolicy för Nominatim. + contributors_title_html: VÃ¥ra bidragsgivare + contributors_intro_html: |- + VÃ¥ra bidragsgivare är tusentals individer. Vi inkluderar ocksÃ¥ + öppna data frÃ¥n nationella karttjänster, + bland annat frÃ¥n: + contributors_at_html: |- + Österrike: InnehÃ¥ller data frÃ¥n + Stadt Wien (under licensen + CC BY), + Land Vorarlberg och + Land Tirol (under licensen CC BY AT med tillägg). + contributors_ca_html: |- + Kanada: InnehÃ¥ller data frÃ¥n + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada), och StatCan (Geography Division, + Statistics Canada). + contributors_fi_html: 'Finland: InnehÃ¥ller data frÃ¥n Lantmäteriverket + i Finlands topografiska databas och andra dataset, under licensen NLSFI.' + contributors_fr_html: |- + Frankrike: InnehÃ¥ller data + frÃ¥n Direction Générale des Impôts. + contributors_nl_html: |- + Nederländerna: InnehÃ¥ller © AND data, 2007 + (www.and.com) + contributors_nz_html: |- + Nya Zeeland: InnehÃ¥ller data frÃ¥n + Land Information New Zealand. Crown Copyright reserved. + contributors_si_html: |- + Slovenien: InnehÃ¥ller uppgifter frÃ¥n + Surveying and Mapping Authority och + Ministry of Agriculture, Forestry and Food + (offentlig information i Slovenien). + contributors_za_html: |- + Sydafrika: InnehÃ¥ller data frÃ¥n + Chief Directorate: + National Geo-Spatial Information, State copyright reserved. + contributors_gb_html: |- + Storbritannien: InnehÃ¥ller Ordnance + Survey data © Crown copyright and database right + 2010-12. + contributors_footer_1_html: |- + För ytterligare detaljer om dessa och andra källor som använts + för att förbättra OpenStreetMap, se sidan om bidragsgivare + pÃ¥ OpenStreetMaps wiki. + contributors_footer_2_html: " Införandet av uppgifter i OpenStreetMap innebär + inte att den ursprungliga \n datagivaren stödjer OpenStreetMap, ger nÃ¥gon + som helst garanti eller\n tar pÃ¥ sig nÃ¥got ansvar." + infringement_title_html: UpphovsrättsintrÃ¥ng + infringement_1_html: |- + Bidragsgivare till OSM pÃ¥minns om att aldrig lägga till data frÃ¥n + upphovsrättsskyddade källor (t.ex. Google Maps och tryckta kartor) utan + uttryckligt tillstÃ¥nd frÃ¥n upphovsrättsinnehavarna. + infringement_2_html: |- + Om du tror att upphovsrättsskyddat material felaktigt har + lagts in i OpenStreetMaps databas eller till den här webbplatsen, se + vÃ¥rt borttagningsförfarande + eller fyll i vÃ¥rt online-formulär direkt. + trademarks_title_html: Varumärken + trademarks_1_html: OpenStreetMap, förstoringsglas-logotypen och State of the + Map är registrerade varumärken hos OpenStreetMap Foundation. Om du har frÃ¥gor + gällande din användning av varumärkena, vänligen se vÃ¥r varumärkespolicy. index: js_1: Du använder antingen en webbläsare som inte stöder JavaScript, eller sÃ¥ har du inaktiverat JavaScript. @@ -1546,6 +1394,113 @@ sv: id_not_configured: iD har inte konfigurerats no_iframe_support: Din webbläsare stöder inte HTML iframes, vilken är nödvändig för den här funktionen. + export: + title: Exportera + area_to_export: OmrÃ¥de som ska exporteras + manually_select: Välj ett annat omrÃ¥de manuellt + format_to_export: Format för export + osm_xml_data: OpenStreetMap XML-data + map_image: Kartbild (visar vanliga lager) + embeddable_html: Inbäddad HTML + licence: Licens + export_details: Data frÃ¥n OpenStreetMap har gjorts tillgänglig under licensen Open Data Commons Open + Database License (ODbL). + too_large: + advice: 'Om ovanstÃ¥ende export misslyckas, vänligen överväg att använda en + av de källor som anges nedan:' + body: 'Detta omrÃ¥de är för stort för att exporteras som OpenStreetMap XML-data. + Vänligen zooma in eller välj ett mindre omrÃ¥de, eller använd en av följande + källor för nedladdningar av bulkdata:' + planet: + title: Planet OSM + description: Regelbundet uppdaterade kopior av den kompletta OpenStreetMap-databasen + overpass: + title: Overpass API + description: Hämta denna avgränsningsram frÃ¥n en spegel av OpenStreetMap-databasen + geofabrik: + title: Geofabrik Downloads + description: Regelbundet uppdaterat utdrag av kontinenter, länder och utvalda + städer + metro: + title: Metro Extracts + description: Utdrag av stora världsstäder och deras näromrÃ¥den + other: + title: Andra källor + description: Ytterligare källor anges pÃ¥ OpenStreetMaps wiki + options: Alternativ + format: Format + scale: Skala + max: max + image_size: Bildstorlek + zoom: Zooma + add_marker: Lägg till markör pÃ¥ kartan + latitude: 'Lat:' + longitude: 'Lon:' + output: Utdata + paste_html: Klistra in HTML för att bädda in pÃ¥ webbplats + export_button: Exportera + fixthemap: + title: Rapportera ett problem / Fixa kartan + how_to_help: + title: Hur man kan hjälpa till + join_the_community: + title: GÃ¥ med i gemenskapen + explanation_html: Om du har hittat ett problem med vÃ¥r kartdata, till exempel + att en väg eller din adress saknas, är den bästa lösningen att gÃ¥ med + i OpenStreetMap-gemenskapen och själv lägga till eller reparera datan. + add_a_note: + instructions_html: |- + Klicka bara pÃ¥ eller samma ikon i kartrutan. + Detta lägger till en markör pÃ¥ kartan som du kan flytta + genom att dra. Skriv ditt meddelande och klicka sedan pÃ¥ spara, sÃ¥ kommer andra kartritare att undersöka. + other_concerns: + title: Andra farhÃ¥gor + explanation_html: |- + Om du har frÃ¥gor om hur vÃ¥r data används eller om innehÃ¥llet, se + sidan om upphovsrätt för mer juridisk information eller kontakta lämplig + OSMF-arbetsgrupp. + help: + title: FÃ¥ hjälp + introduction: OpenStreetMap har flera resurser som hjälper dig att lära dig + om projektet, för att ställa och svara pÃ¥ frÃ¥gor, och tillsammans diskutera + och dokumentera frÃ¥gor gällande kartering. + welcome: + url: /welcome + title: Välkommen till OSM + description: Börja med den här snabbguiden som täcker grunderna i OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Sv:Beginners%27_guide + title: Guide för nybörjare + description: Guide för nybörjare som underhÃ¥lls av gemenskapen. + help: + url: https://help.OpenStreetMap.org/ + title: help.openstreetmap.org + description: Ställ en frÃ¥ga eller kolla upp svar pÃ¥ OSM:s sida med svar pÃ¥ + ofta förekommande frÃ¥gor. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: E-postlistor + description: Ställ en frÃ¥ga eller diskutera intressanta saker pÃ¥ ett brett + utbud av lokala eller regionala e-postlistor. + forums: + url: http://forum.openstreetmap.org/ + title: Forum + description: FrÃ¥gor och diskussioner för de som föredrar ett gränssnitt liknande + en anslagstavla. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Interaktiv chatt pÃ¥ flera olika sprÃ¥k rörande mängder av ämnen. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: Hjälp för företag och organisationer att byta till OpenStreetMap-baserade + kartor och andra tjänster. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Sök i wikin för ingÃ¥ende OSM-dokumentation. sidebar: search_results: Sökresultat close: Stäng @@ -1646,6 +1601,54 @@ sv: image: Bild alt: Alt-text url: Webbadress + welcome: + title: Välkommen! + introduction_html: Välkommen till OpenStreetMap, den fria och redigerbara kartan + över världen. Nu när du har registrerat dig är du klar för att börja kartlägga + saker. Här är en snabb genomgÃ¥ng av de viktigaste sakerna du behöver veta. + whats_on_the_map: + title: Vad finns pÃ¥ kartan + on_html: OpenStreetMap är en plats för att kartlägga sÃ¥dant som bÃ¥de finns + i verkligheten och är aktuellt. OpenStreetMap innehÃ¥ller miljontals + byggnader, vägar och annan information om platser. Du kan lägga till vad + som helst som finns i verkligheten och som intresserar dig. + off_html: Vad OpenStreetMap inte innehÃ¥ller är subjektiva data som + betyg, historiska eller hypotetiska objekt, samt data frÃ¥n upphovsrättsskyddade + källor. Om du inte har ett speciellt tillstÃ¥nd, kopiera inte frÃ¥n andra + kartor online eller pÃ¥ papper. + basic_terms: + title: Grundläggande termer för kartering + paragraph_1_html: OpenStreetMap har en del egen jargong. Här är nÃ¥gra begrepp + som kan vara bra att förstÃ¥. + editor_html: En redigerare är ett program eller en webbsida + du kan använda för att ändra i kartan. + node_html: En nod är en punkt pÃ¥ kartan, till exempel en + ensam restaurang eller ett träd. + way_html: En väg är en linje eller ett omrÃ¥de, till exempel + en väg, bäck, sjö eller byggnad. + tag_html: En tagg är en bit data om en nod eller väg, till + exempel en restaurangs namn eller en vägs hastighetsbegränsning. + rules: + title: Regler! + paragraph_1_html: "OpenStreetMap har fÃ¥ formella regler, men vi förväntar + oss att alla deltagare samarbetar och kommunicerar med gemenskapen. Om du + funderar pÃ¥\nnÃ¥gon annan aktivitet än manuell redigering av sidan, läs och + följ anvisningarna pÃ¥ \nImport + och \nAutomatiserade + redigeringar." + questions: + title: NÃ¥gra frÃ¥gor? + paragraph_1_html: |- + OpenStreetMap har flera resurser som hjälper dig att lära dig om projektet, för att ställa och svara pÃ¥ frÃ¥gor, och tillsammans diskutera och dokumentera frÃ¥gor gällande kartering. + FÃ¥ hjälp här. + start_mapping: Börja kartlägga + add_a_note: + title: Ingen tid att redigera? Lägg till en kommentar! + paragraph_1_html: Om du bara vill ha ett litet problem fixat och inte har + tid att registrera dig sÃ¥ är det lätt att lämna en kartanteckning. + paragraph_2_html: |- + GÃ¥ till kartan och tryck pÃ¥ anteckningsikonen: + . En markör, som du kan dra omkring, kommer att läggas till pÃ¥ kartan. Lägg till ett meddelande och spara. NÃ¥gon annan kommer att undersöka frÃ¥gan. trace: visibility: private: Privat (spÃ¥ret delas anonymt och utan ordning) @@ -1687,6 +1690,7 @@ sv: trace_header: upload_trace: Ladda upp GPS-spÃ¥r see_all_traces: Se alla GPS-spÃ¥r + see_my_traces: Se mina spÃ¥r traces_waiting: one: Du har %{count} GPS-spÃ¥r som hÃ¥ller pÃ¥ att laddas upp. Vänta gärna pÃ¥ att dessa blir klara innan du laddar upp fler, sÃ¥ att du inte blockerar @@ -1715,6 +1719,7 @@ sv: delete_track: Radera detta GPS-spÃ¥r trace_not_found: GPS-spÃ¥r hittades inte! visibility: 'Synlighet:' + confirm_delete: Radera detta spÃ¥r? trace_paging_nav: showing_page: Sida %{page} older: Äldre GPS-spÃ¥r @@ -1737,6 +1742,7 @@ sv: map: karta list: public_traces: Publika GPS-spÃ¥r + my_traces: Mina GPS-spÃ¥r public_traces_from: Publika GPS-spÃ¥r frÃ¥n %{user} description: Bläddra bland nyligen uppladdade GPS-spÃ¥r tagged_with: ' taggad med %{tags}' @@ -1774,7 +1780,7 @@ sv: pÃ¥ webbgränssnittet för att se bidragsvillkor. Du behöver inte godkänna dem, men du mÃ¥ste titta pÃ¥ dem. oauth: - oauthorize: + authorize: title: Auktorisera tillgÃ¥ng till ditt konto request_access: Programmet %{app_name} har begärt tillgÃ¥ng till ditt konto, %{user}. Var god kontrollera om du vill att programmet ska ha dessa möjligheter. @@ -1788,11 +1794,11 @@ sv: allow_write_gpx: ladda upp GPS-spÃ¥r allow_write_notes: ändra anteckningar. grant_access: Bevilja Ã¥tkomst - oauthorize_success: + authorize_success: title: Auktoriseringsbegäran tillÃ¥ten allowed: Du har beviljat en applikation %{app_name} tillgÃ¥ng till ditt konto. verification: Verifikationskoden är %{code}. - oauthorize_failure: + authorize_failure: title: Auktoriseringsbegäran misslyckades denied: Du har blockerat en applikation %{app_name} frÃ¥n tillgÃ¥ng till ditt konto. @@ -2031,6 +2037,7 @@ sv: if set location: Ange din hemposition pÃ¥ %{settings_link}-sidan för att se närbelägna användare. settings_link_text: inställningar + my friends: Mina vänner no friends: Du har inte lagt till nÃ¥gra vänner ännu. km away: '%{count}km bort' m away: '%{count}m bort' @@ -2235,7 +2242,7 @@ sv: confirm: Bekräfta fail: Kunde inte Ã¥terkalla rollen "%{role}" frÃ¥n användaren "%{name}". Kontrollera att bÃ¥de användaren och rollen är korrekta. - user_block: + user_blocks: model: non_moderator_update: MÃ¥ste vara en moderator för att skapa eller uppdatera en blockering. @@ -2296,20 +2303,6 @@ sv: period: one: 1 timme other: '%{count} timmar' - partial: - show: Visa - edit: Redigera - revoke: Återkalla! - confirm: Är du säker? - display_name: Blockerad användare - creator_name: Skapare - reason: Orsak till blockering - status: Status - revoker_name: Återkallad av - not_revoked: (Inte Ã¥terkallat) - showing_page: Sida %{page} - next: Nästa » - previous: « FöregÃ¥ende helper: time_future: Slutar om %{time}. until_login: Aktiv till dess användaren loggar in. @@ -2340,8 +2333,22 @@ sv: back: Se alla blockeringar revoker: 'Återställare:' needs_view: Användaren mÃ¥ste logga in innan blockeringen upphör. - note: - description: + block: + not_revoked: (Inte Ã¥terkallat) + show: Visa + edit: Redigera + revoke: Återkalla! + blocks: + display_name: Blockerad användare + creator_name: Skapare + reason: Orsak till blockering + status: Status + revoker_name: Återkallad av + showing_page: Sida %{page} + next: Nästa » + previous: « FöregÃ¥ende + notes: + comment: opened_at_html: Skapades för %{when} sedan opened_at_by_html: Skapades för %{when} sedan av %{user} commented_at_html: Uppdaterades för %{when} sedan @@ -2512,6 +2519,7 @@ sv: onramp_left_with_name_directions: Sväng vänster pÃ¥ rampen till %{name}, mot %{directions} onramp_left_without_directions: Sväng vänster till rampen + onramp_left: Sväng vänster till rampen endofroad_left_without_exit: Vid slutet av vägen, sväng vänster in pÃ¥ %{name} merge_left_without_exit: Sväng vänster in pÃ¥ %{name} fork_left_without_exit: Vid vägskälet sväng vänster in pÃ¥ %{name} @@ -2548,7 +2556,7 @@ sv: show_address: Visa adress query_features: Sökfunktioner centre_map: Centrera kartan här - redaction: + redactions: edit: description: Beskrivning heading: Redigera redaktering diff --git a/config/locales/ta.yml b/config/locales/ta.yml index 7abe5a726..b3c7a7a26 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -226,18 +226,6 @@ ta: when: எப்பொழுது comment: கருத்துரை newer_comments: புதிய கருத்துக்கள் - export: - title: ஏற்றுமதி செய் - start: - licence: உரிமம் - options: விருப்பத் தேர்வுகள் - format: வடிவமைப்பு - scale: அளவுவீதம் - max: அதிகபட்சம் - image_size: பட அளவு - zoom: பெரிதாக்கு - output: வெளியீடு - export_button: ஏற்றுமதி செய் geocoder: search_osm_nominatim: prefix: @@ -497,14 +485,6 @@ ta: text: ஒரு நன்கொடையை அளிக்கவும் learn_more: மேலும் அறிய more: மேலும் - license_page: - foreign: - title: இந்த மொழிபெயர்ப்பு பற்றி - welcome_page: - rules: - title: விதிமுறைகள்! - about_page: - next: அடுத்தது notifier: gpx_notification: greeting: வணக்கம், @@ -558,8 +538,24 @@ ta: delete: deleted: தகவல் நீக்கப்பட்டது site: + about: + next: அடுத்தது + copyright: + foreign: + title: இந்த மொழிபெயர்ப்பு பற்றி edit: user_page_link: பயனர் பக்கம் + export: + title: ஏற்றுமதி செய் + licence: உரிமம் + options: விருப்பத் தேர்வுகள் + format: வடிவமைப்பு + scale: அளவுவீதம் + max: அதிகபட்சம் + image_size: பட அளவு + zoom: பெரிதாக்கு + output: வெளியீடு + export_button: ஏற்றுமதி செய் sidebar: search_results: தேடல் முடிவுகள் close: மூடு @@ -597,6 +593,9 @@ ta: private: தனியார் அனுமதி construction: சாலைகளில் கட்டுமானப் பணிகள் நடந்து வருகின்றன. toilets: கழிவறைகள் + welcome: + rules: + title: விதிமுறைகள்! trace: edit: filename: 'கோப்புப்பெயர்:' @@ -776,15 +775,7 @@ ta: user_role: revoke: confirm: உறுதிப்படுத்து - user_block: - partial: - show: காண்பி - edit: தொகு - revoke: திரும்பபெறு! - confirm: உறுதியாகவா? - display_name: தடைசெய்யப்பட்ட பயனர் - creator_name: உருவாக்கியவர் - status: நிலை + user_blocks: show: status: நிலை show: காண்பி @@ -792,7 +783,15 @@ ta: revoke: திரும்பபெறு! confirm: உறுதியாகவா? reason: 'தடைக்கான காரணம்:' - redaction: + block: + show: காண்பி + edit: தொகு + revoke: திரும்பபெறு! + blocks: + display_name: தடைசெய்யப்பட்ட பயனர் + creator_name: உருவாக்கியவர் + status: நிலை + redactions: update: flash: மாற்றங்கள் சேமிக்கப்பட்டன ... diff --git a/config/locales/te.yml b/config/locales/te.yml index 1a4dff2ad..0a0871395 100644 --- a/config/locales/te.yml +++ b/config/locales/te.yml @@ -207,22 +207,6 @@ te: ago: '%{ago} క్రితం' newer_comments: కొత్త వ్యాఖ్యలు older_comments: పాత వ్యాఖ్యలు - export: - title: ఎగుమతి - start: - embeddable_html: ఇముడ్చగలిగే HTML - licence: లైసెన్సు - too_large: - other: - title: ఇతర మూలాలు - options: ఎంపికలు - format: ఫార్మాటు - scale: కొలబద్ద - max: గరిష్టం - image_size: బొమ్మ పరిమాణం - zoom: పెద్దది - latitude: 'అక్షాం:' - longitude: 'రేఖాం:' geocoder: search: title: @@ -484,39 +468,6 @@ te: text: విరాళమివ్వండి learn_more: మరింత తెలుసుకోండి more: మరిన్ని - license_page: - foreign: - title: ఈ అనువాదం గురించి - native: - title: ఈ పుట గురించి - legal_babble: - title_html: కాపీహక్కులు మరియు లైసెన్సు - attribution_example: - title: ఆపాదింపు ఉదాహరణ - more_title_html: మరింత తెలుసుకోవడం - infringement_title_html: కాపీహక్కుల ఉల్లంఘన - trademarks_title_html: ట్రేడుమార్కులు - welcome_page: - title: స్వాగతం! - whats_on_the_map: - title: పటంలో ఏముంది - rules: - title: నియమాలు! - questions: - title: సందేహాలున్నాయా? - add_a_note: - title: సరిదిద్దేంత సమయం లేదా? ఒక గమనికను చేర్చండి! - fixthemap: - how_to_help: - title: ఎలా తోడ్పడాలి - help_page: - title: సహాయం పొందడం - welcome: - title: OSMకి స్వాగతం - about_page: - next: తదుపరి - local_knowledge_title: స్థానిక పరిజ్ఞానం - partners_title: భాగస్వాములు notifier: diary_comment_notification: hi: హలో %{to_user}, @@ -563,11 +514,49 @@ te: sent_message_summary: delete_button: తొలగించు site: + about: + next: తదుపరి + local_knowledge_title: స్థానిక పరిజ్ఞానం + partners_title: భాగస్వాములు + copyright: + foreign: + title: ఈ అనువాదం గురించి + native: + title: ఈ పుట గురించి + legal_babble: + title_html: కాపీహక్కులు మరియు లైసెన్సు + attribution_example: + title: ఆపాదింపు ఉదాహరణ + more_title_html: మరింత తెలుసుకోవడం + infringement_title_html: కాపీహక్కుల ఉల్లంఘన + trademarks_title_html: ట్రేడుమార్కులు index: permalink: స్థిరలంకె shortlink: చిన్నలింకు edit: user_page_link: వాడుకరి పేజీ + export: + title: ఎగుమతి + embeddable_html: ఇముడ్చగలిగే HTML + licence: లైసెన్సు + too_large: + other: + title: ఇతర మూలాలు + options: ఎంపికలు + format: ఫార్మాటు + scale: కొలబద్ద + max: గరిష్టం + image_size: బొమ్మ పరిమాణం + zoom: పెద్దది + latitude: 'అక్షాం:' + longitude: 'రేఖాం:' + fixthemap: + how_to_help: + title: ఎలా తోడ్పడాలి + help: + title: సహాయం పొందడం + welcome: + title: OSMకి స్వాగతం sidebar: search_results: అన్వేషణ ఫలితాలు close: మూసివేయి @@ -619,6 +608,16 @@ te: text: పాఠ్యం image: బొమ్మ alt: ప్రత్యామ్నాయ పాఠ్యం + welcome: + title: స్వాగతం! + whats_on_the_map: + title: పటంలో ఏముంది + rules: + title: నియమాలు! + questions: + title: సందేహాలున్నాయా? + add_a_note: + title: సరిదిద్దేంత సమయం లేదా? ఒక గమనికను చేర్చండి! trace: edit: filename: 'ఫైలుపేరు:' @@ -804,7 +803,7 @@ te: confirm: నిర్ధారించు revoke: confirm: నిర్ధారించు - user_block: + user_blocks: new: back: అన్ని నిరోధాలను చూడండి edit: @@ -817,13 +816,6 @@ te: period: one: 1 గంట other: '%{count} గంటలు' - partial: - show: చూపించు - edit: మార్చు - reason: నిరోధానికి కారణం - status: స్థితి - next: తదుపరి » - previous: « మునుపటి helper: time_future: '%{time}లో ముగుస్తుంది.' time_past: '%{time} క్రితం ముగిసింది.' @@ -839,7 +831,15 @@ te: edit: మార్చు reason: 'నిరోధానికి కారణం:' back: అన్ని నిరోధాలను చూడండి - note: + block: + show: చూపించు + edit: మార్చు + blocks: + reason: నిరోధానికి కారణం + status: స్థితి + next: తదుపరి » + previous: « మునుపటి + notes: entry: comment: వ్యాఖ్య full: పూర్తి గమనిక @@ -893,7 +893,7 @@ te: directions_to: ఇక్కడికి దిశలు show_address: చిరునామా చూపించు centre_map: ఈచోటును పటానికి కేంద్రం చేయి - redaction: + redactions: edit: description: వివరణ new: diff --git a/config/locales/th.yml b/config/locales/th.yml index aeef574f4..a3f1db458 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -126,11 +126,13 @@ th: commented_by: ความคิดเห็นจาก %{user} เมื่อ %{when} ก่อน changesetxml: ชุดการเปลี่ยนแปลง XML + osmchangexml: เอ็กซ์เอ็มแอลของ osmChange feed: title: ชุดการเปลี่ยนแปลง %{id} title_comment: ชุดการเปลี่ยนแปลง %{id} - %{comment} join_discussion: เข้าสู่ระบบเพื่อเข้าร่วมการอภิปราย discussion: การอภิปราย + still_open: ชุดการเปลี่ยนแปลงกำลังเปิดอยู่ การอภิปรายจะเริ่มได้หลังจากปิดชุดการเปลี่ยนแปลงแล้ว node: title: 'หมุด: %{name}' history_title: 'ประวัติหมุด: %{name}' @@ -138,6 +140,9 @@ th: title: 'เส้นทาง: %{name}' history_title: 'ประวัติเส้นทาง: %{name}' nodes: หมุด + also_part_of: + one: ส่วนของเส้นทาง %{related_ways} + other: ส่วนของเส้นทาง %{related_ways} relation: title: 'ความสัมพันธ์: %{name}' history_title: 'ประวัติความสัมพันธ์: %{name}' @@ -233,7 +238,7 @@ th: list: title: ชุดการเปลี่ยนแปลง title_user: ชุดการเปลี่ยนแปลงที่ทำโดย %{user} - title_friend: ชุดการเปลี่ยนแปลงที่ทำโดยเพื่อนของท่าน + title_friend: ชุดการเปลี่ยนแปลงที่ทำโดยเพื่อนของฉัน title_nearby: ชุดการเปลี่ยนแปลงที่ทำโดยผู้ใช้ที่อยู่ใกล้เคียง empty: ไม่พบชุดการเปลี่ยนแปลง empty_area: ไม่พบชุดการเปลี่ยนแปลงในพื้นที่นี้ @@ -262,7 +267,7 @@ th: user_title: บันทึกของ %{user} in_language_title: รายการบันทึกทั้งหมดในภาษา %{language} new: สร้างบันทึกใหม่ - new_title: สร้างบันทึกใหม่ในสมุดบันทึกประจำตัวของท่าน + new_title: สร้างบันทึกใหม่ในสมุดบันทึกประจำตัวของฉัน no_entries: ไม่มีรายการบันทึก recent_entries: รายการบันทึกล่าสุด older_entries: รายการก่อนหน้า @@ -327,45 +332,6 @@ th: ago: เมื่อ %{ago} ก่อน newer_comments: ความคิดเห็นใหม่กว่า older_comments: ความคิดเห็นเก่ากว่า - export: - title: ส่งออก - start: - area_to_export: พื้นที่ที่จะส่งออก - manually_select: เลือกพื้นที่อื่นด้วยตนเอง - format_to_export: รูปแบบที่จะส่งออก - osm_xml_data: ข้อมูล XML ของ OpenStreetMap - map_image: ภาพแผนที่ (แสดงชั้นภาพมาตรฐาน) - embeddable_html: HTML ฝังตัวได้ - licence: สัญญาอนุญาต - export_details: บรรดาข้อมูลที่ปรากฏในเว็บไซต์ OpenStreetMap อนุญาตให้ใช้ภายใต้สัญญาอนุญาต Open Data - Commons Open Database (ODbL). - too_large: - advice: 'ถ้าการส่งออกข้างต้นล้มเหลว โปรดพิจารณาใช้แหล่งข้อมูลตามที่ระบุด้านล่างนี้:' - body: พื้นที่ใหญ่เกินกว่าที่จะส่งออกเป็นข้อมูล XML ของ OpenStreetMap โปรดขยายเข้าหรือเลือกพื้นที่ที่เล็กลง - หรืออาจจะใช้แหล่งข้อมูลข้างล่างในการดาวน์โหลดแฟ้มข้อมูลจำนวนมาก - planet: - description: สำเนาของฐานข้อมูล OpenStreetMap ซึ่งปรับปรุงอย่างสม่ำเสมอ - geofabrik: - description: รายการทวีป ประเทศ และเมืองสำคัญซึ่งปรับปรุงอย่างสม่ำเสมอ - metro: - title: เมโทรเอกซ์แทรกซ์ - description: รายการเมืองสำคัญของโลกและพื้นที่โดยรอบ - other: - title: แหล่งข้อมูลอื่น - description: แหล่งข้อมูลอื่นตามที่ระบุไว้ใน OpenStreetMap wiki - options: ตัวเลือก - format: รูปแบบ - scale: มาตราส่วน - max: ขนาดสูงสุด - image_size: ขนาดภาพ - zoom: ย่อ-ขยาย - add_marker: เพิ่มเครื่องหมายลงในแผนที่ - latitude: 'ละติจูด:' - longitude: 'ลองจิจูด:' - output: การแสดงผล - paste_html: วาง HTML สำหรับนำไปใช้ในเว็บไซต์ - export_button: ส่งออก geocoder: search: title: @@ -387,6 +353,7 @@ th: platter: กระเช้าลาก pylon: เสากระเช้า station: สถานีรถกระเช้า + t-bar: กระเช้าลากพื้นหิมะ aeroway: aerodrome: ลานบิน airstrip: ลานบินขนาดเล็ก @@ -394,6 +361,8 @@ th: gate: ประตูขึ้นเครื่อง hangar: โรงเก็บเครื่องบิน helipad: ลานจอดเฮลิคอปเตอร์ + holding_position: ตำแหน่งยึด + parking_position: ตำแหน่งจอด runway: ทางวิ่งเครื่องบิน taxiway: ทางขับเครื่องบิน terminal: อาคารผู้โดยสาร @@ -439,6 +408,7 @@ th: fuel: สถานีบริการเชื้อเพลิง gambling: การพนัน grave_yard: สุสาน + grit_bin: ถังเกลือโรยถนน hospital: โรงพยาบาล hunting_stand: บังไพรล่าสัตว์ ice_cream: ร้านไอศกรีม @@ -519,6 +489,7 @@ th: defibrillator: เครื่องช่วยกระตุ้นหัวใจ landing_site: พื้นที่ลงจอดฉุกเฉิน phone: โทรศัพท์ฉุกเฉิน + water_tank: ถังน้ำฉุกเฉิน "yes": อุปกรณ์ฉุกเฉิน highway: abandoned: ทางหลวงที่เลิกใช้แล้ว @@ -538,6 +509,7 @@ th: motorway: ทางหลวงพิเศษ motorway_junction: แยกทางหลวงพิเศษ motorway_link: ถนนทางหลวงพิเศษ + passing_place: ที่หลีกรถ path: เส้นทาง pedestrian: ทางคนเดิน platform: ชานชาลา @@ -563,6 +535,7 @@ th: trail: ทางเดินป่า trunk: ถนนสายประธาน trunk_link: ถนนสายประธาน + turning_loop: ทางโค้งสำหรับกลับรถ unclassified: ถนนที่มิได้จำแนก "yes": ถนน historic: @@ -657,14 +630,20 @@ th: water_park: สวนน้ำ "yes": สถานที่เพื่อนันทนาการ man_made: + adit: ทางระบายน้ำในเหมือง beacon: เสาไฟสัญญาณ beehive: คอนเลี้ยงผึ้ง + breakwater: เขื่อนกันคลื่น bridge: สะพาน + bunker_silo: หลุมหลบภัย chimney: ปล่องไฟ crane: ปั้นจั่น dolphin: หลักผูกเรือ + dyke: กำแพงกันฝั่ง + embankment: คันดิน flagpole: เสาธง gasometer: ถุงเก็บแก๊ส + groyne: รอดักทราย kiln: เตาเผา lighthouse: ประภาคาร/กระโจมไฟ mast: เสา @@ -672,7 +651,9 @@ th: mineshaft: ปล่องเหมือง monitoring_station: สถานีตรวจอากาศ petroleum_well: บ่อน้ำมัน + pier: ท่าเรือ pipeline: ท่อส่งน้ำมัน + silo: ยุ้งฉาง storage_tank: ถังกักเก็บ surveillance: กล้องวงจรปิด tower: หอคอย @@ -741,6 +722,7 @@ th: estate_agent: บริษัทอสังหาริมทรัพย์ government: สำนักงานของรัฐบาล insurance: สำนักงานประกันภัย + it: สำนักงานสารสนเทศ lawyer: ทนายความ ngo: สำนักงานองค์กรเอกชน telecommunication: ที่ทำการโทรคมนาคม @@ -749,6 +731,7 @@ th: place: allotments: ที่ดินแบ่งใช้ city: เมือง + city_block: ตึกสำนักงาน country: ประเทศ county: จังหวัด farm: ไร่นา @@ -762,6 +745,7 @@ th: municipality: เทศบาล neighbourhood: ชุมชน postcode: รหัสไปรษณีย์ + quarter: ย่าน region: ภูมิภาค sea: ทะเล square: จตุรัส @@ -803,6 +787,7 @@ th: beauty: ร้านเสริมสวย beverages: ร้านขายเครื่องดื่ม bicycle: ร้านขายและเช่าจักรยาน + bookmaker: ร้านทำหนังสือ books: ร้านขายหนังสือ boutique: ร้านเสริมสวย butcher: ร้านขายเนื้อ @@ -842,6 +827,7 @@ th: hardware: ร้านวัสดุก่อสร้าง hifi: เครื่องเสียง houseware: ร้านขายเครื่องใช้ในบ้าน + interior_decoration: ร้านขายเครื่องตกแต่งภายใน jewelry: ร้านเครื่องประดับ kiosk: ร้านแผงลอย kitchen: ร้านเครื่องครัว @@ -989,175 +975,6 @@ th: text: บริจาค learn_more: เรียนรู้เพิ่มเติม more: เพิ่มเติม - license_page: - foreign: - title: เกี่ยวกับการแปลนี้ - text: หากมีข้อขัดแย้งจากากรตีความหน้าที่แปลนี้กับหน้าเดิมในภาษาอังกฤษ %{english_original_link} - ให้ถือภาษาอังกฤษเป็นสำคัญถูกต้องเสมอ - english_link: หน้าเดิมในภาษาอังกฤษ - native: - title: เกี่ยวกับหน้านี้ - text: ท่านกำลังเรียกดูหน้าข้อมูลลิขสิทธิ์ในภาษาอังกฤษ และสามารถกลับไปที่หน้าภาษา - %{native_link} หรือกลับไปยังแผนที่ที่ %{mapping_link}. - native_link: รุ่นภาษาTHIS_LANGUAGE_NAME_HERE - mapping_link: เริ่มการทำแผนที่ - legal_babble: - title_html: ลิขสิทธิ์และสัญญาอนุญาต - intro_1_html: |- - OpenStreetMap® เป็นข้อมูลเปิดให้ใช้งาน และอนุญาตให้ใช้งานภายใต้สัญญาอนุญาต Open Data - Commons Open Database License (ODbL) โดยมูลนิธิ OpenStreetMap (OSMF). - intro_2_html: "ท่านสามารถทำสำเนา แจกจ่าย แพร่ภาพ และปรับใช้ข้อมูลของเรา\nตราบเท่าที่ได้ระบุชื่อ - OpenStreetMap ตลอดจนผู้ร่วมจัดทำไว้ในคำขอบคุณหรือที่มา\nถ้าท่านปรับแก้ไขหรือสร้างสรรค์งานใหม่โดยใช้ข้อมูลของเราเป็นพื้น - ท่านสามารถ\nแจกจ่ายผลลัพธ์ที่ได้ภายใต้สัญญาอนุญาตเดียวกันเท่านั้น โปรดดู ข้อกำหนดทางกฎหมาย - \nซึ่งจะอธิบายสิทธิและหน้าที่ที่ท่านพึงมี" - intro_3_html: |- - ภาพร่าง ลายเส้นแผนที่ตามที่ปรากฏ และเอกสารกำกับ อนุญาตให้ใช้งานตามสัญญาอนุญาต Creative - Commons Attribution-ShareAlike 2.0 (CC BY-SA) - credit_title_html: วิธีการแสดงที่มาหรือคำขอบคุณ OpenStreetMap - credit_1_html: |- - เราจำเป็นต้องให้ท่านแสดงที่มาหรือคำขอบคุณแก่ “© ผู้ร่วมสร้างสรรค์ OpenStreetMap - ”. - credit_2_html: |- - ท่านจะต้องระบุให้ชัดเจนเจาะจงว่าข้อมูลอนุญาตให้ใช้ตามสัญญาอนุญาต Open - Database License และถ้ามีการนำรูปแผนที่ไปใช้ รูปนั้นอนุญาตให้ใช้ตามสัญญาอนุญาต - CC BY-SA ในการนี้อาจจะลิงก์ไปยังหน้า - ข้อมูลลิขสิทธิ์ - นอกจากนี้ (จำเป็นหากท่านจ่ายแจกข้อมูล OSM) ท่านสามารถลิงก์ไปยังสัญญาอนุญาตโดยตรง - ในสื่ออย่างอื่น อาทิ สิ่งพิมพ์ ซึ่งไม่สามารถลิงก์ข้อมูลได้แนะนำให้ระบุเพียง openstreetmap.org - และ/หรือ opendatacommons.org และ/หรือ creativecommons.org - more_title_html: ค้นหาเพิ่มเติม - contributors_title_html: ผู้ร่วมสร้างสรรค์ของเรา - contributors_at_html: |- - ออสเตรีย: มีข้อมูลจาก - Stadt Wien (under - CC BY), - Land Vorarlberg และ - Land Tirol (under CC BY AT with amendments). - contributors_ca_html: |- - แคนาดา: มีข้อมูลจาก - GeoBase®, GeoGratis (© Department of Natural - Resources Canada), CanVec (© Department of Natural - Resources Canada) และ StatCan (Geography Division, - Statistics Canada) - contributors_fi_html: |- - ฟินแลนด์: มีข้อมูลจาก - ฐานข้อมูลการสำรวจภูมิศาสตร์แห่งชาติฟินแลนด์และฐานข้อมูลอื่น - อนุญาตให้ใช้ตาม - สัญญาอนุญาต NLSFI. - contributors_fr_html: |- - ฝรั่งเศส: มีข้อมูลจากอธิบดีกรมภาษี ( - Direction Générale des Impôts) - contributors_gb_html: |- - สหราชอาณาจักร: มีข้อมูลจากกองแผนที่ Ordnance - Survey data © ลิขสิทธิ์ราชการและสิทธิ์แห่งฐานข้อมูล - 2010-12 - infringement_title_html: การละเมิดลิขสิทธิ์ - infringement_2_html: |- - หากท่านเชื่อว่าข้อมูลละเมิดลิขสิทธิ์ปรากฏในเว็บไซต์นี้หรือในฐานข้อมูล OpenStreetMap โปรดดู ขั้นตอนการลบข้อมูลละเมิดลิขสิทธิ์ หรือแจ้งได้ที่ - หน้ารับแจ้งการละเมิดข้อมูลลิขสิทธิ์ - trademarks_title_html: เครืองหมายการค้า - welcome_page: - title: ยินดีต้อนรับ! - introduction_html: 'ยินดิต้อนรับสู่ OpenStreetMap, แผนที่โลกแบบเสรีที่ทุกคนสามารถแก้ไขได้ - ซึ่งตอนนี้คุณได้ลงทะเบียนมาแล้ว ก่อนจะไปลุยกัน ด้านล่างมีสิ่งสำคัญที่คุณควรจะรู้ไว้ตลอดการทำแผนที่ของคุณ:' - whats_on_the_map: - title: บนแผนที่ควรมีอะไร - on_html: OpenStreetMap เป็นที่ที่คุณบันทึกสิ่งที่มีอยู่จริงบนพื้นโลก - และมีอยู่ในปัจจุบัน - เช่นตึก หรือถนนที่คุณแห็นอยู่ดาษดื่นทั่วไป - รวมทั้งรายละเอียดเกี่ยวกับร้านรวงต่างๆ หรือข้อมูลอื่นๆ ที่เห็นได้ของสถานที่เหล่านั้น, - โดยคุณจะทำแผนที่โครงสร้างอะไรที่คุณเห็นอยู่บนพื้นดินก็ได้ แล้วแต่ความสนใจของคุณเอง - off_html: แต่ที่นี่จะไม่รับข้อมูลที่มาจากข้อคิดเห็น เช่นคะแนนเรตติ้ง - สถานที่ที่เคยมีอยู่แต่ในอดีต (ปัจจุบันไม่มีแล้ว) รวมทั้งสถานที่ที่คาดว่าจะมีในอนาคต, - และจะไม่รับข้อมูลจากแหล่งที่มีลิขสิทธิ์อื่นๆ, ฉะนั้นอย่าได้คัดลอกข้อมูลจากแผนที่ออนไลน์หรือแผนที่กระดาษมาใส่ - (เว้นแต่คุณได้รับอนุญาตจากเจ้าของลิขสิทธิ์แล้ว) - basic_terms: - title: คำศัพท์พื้นฐานในการทำแผนที่ - paragraph_1_html: 'เมื่อคุณเข้ามาทำแผนที่ใน OpenStreetMap, คุณจะพบกับศัพท์เฉพาะหลายคำ - ซึ่งความหมายจะอธิบายไว้เบื้องต้นที่ด้านล่างนี้:' - editor_html: ตัวแก้ไข หมายถึงโปรแกรม หรือเว็บไซต์ ที่คุณใช้แก้ไขข้อมูลแผนที่ - node_html: หมุด จะเป็นจุดหนึ่งจุดบนแผนที่, เช่น ร้านอาหารที่ตั้งเดี่ยวๆ - หรือต้นไม้ - way_html: เส้นทาง เป็นส่วนที่ลักษณะเป็นเส้นบนแผนที่ เช่นถนน - ลำธาร, หรือไม่ก็เป็นรูปปิด เช่นทะเลสาบ หรือตึก - tag_html: ป้ายกำกับ เป็นข้อมูลรายละเอียดของหมุด หรือเส้นทาง, - เช่น ชื่อ (ของร้าน) หรือ ขีดจำกัดความเร็ว (ของถนน) - rules: - title: อย่าลืมกติกา! - questions: - title: มีคำถามอีกหรือไม่? - paragraph_1_html: "OpenStreetMap มีสื่อสำหรับค้นคว้า สอบถาม ตอบคำถาม \nสนทนาหัวข้อต่างๆ - ตลอดจนอภิปรายและจัดทำวิธีการสร้างแผนที่\nซึ่งคุณจะหาความช่วยเหลือได้ที่นี่" - start_mapping: เริ่มการทำแผนที่ - add_a_note: - title: ไม่มีเวลาแก้ไขใช่ไหม? ใส่หมายเหตุไว้แทนได้! - paragraph_1_html: หากคุณต้องการจะแก้ไขแค่เล็กน้อย และไม่มีเวลาเข้าใช้ระบบและเรียนรู้วิธีแก้ไขด้วยตัวเอง - คุณสามารถจะเขียนหมายเหตุแปะเอาไว้บนจุดที่คุณอยากแก้ไขแทน - paragraph_2_html: |- - แค่ไปที่แผนที่ แล้วคลิกไอคอน หมายเหตุ: - . จากนั้นจะมีเครื่องหมายมาที่แผนที่ให้ท่านลากไปยัง - ตำแหน่งที่ต้องการ ใส่ข้อความที่ต้องการ คลิกบันทึก แล้วผู้ใช้ท่านอื่นจะเข้ามาตรวจสอบให้ - fixthemap: - title: รายงานปัญหา/แก้ไขข้อผิดพลาดในแผนที่ - how_to_help: - title: วิธีการช่วยเหลือ - join_the_community: - title: เข้าร่วมเป็นสมาชิก - explanation_html: หากท่านประสบปัญหาเกี่ยวกับข้อมูลแผนที่ของเรา หรือพบข้อผิดพลาด - เช่น ถนนหายไป หรือมีข้อผิดพลาดด้านที่อยู่ วิธีที่ดีที่สุดคือสมัครเป็นสมาชิก - OpenStreetMap เพื่อดำเนินการแก้ไขด้วยตัวท่านเอง - other_concerns: - title: ข้อกังวลอื่น ๆ - explanation_html: หากท่านมีข้อกังวลเกี่ยวกับการใช้ข้อมูลของเราหรือเกี่ยวกับเนื้อหา - โปรดดูหน้าลิขสิทธิ์ เพื่อดูรายละเอียดทางกฎหมาย หรือติดต่อคณะทำงาน - OSMF - help_page: - title: ขอรับความช่วยเหลือ - welcome: - title: ยินดีต้อนรับสู่ OSM - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Th:Beginners%27_guide - title: คำแนะนำสำหรับผู้เริ่มต้น - mailing_lists: - title: รายการอีเมลรับข่าวสาร - forums: - title: กระดานสนทนา - irc: - title: ไออาร์ซี - about_page: - next: ถัดไป - used_by: '%{name} - ข้อมูลแผนที่ซึ่งขับเคลื่อนเว็บไซต์ แอปพลิเคชั่นมือถือ และอุปกรณ์นำทางมากมายรอบตัวคุณ' - lede_text: OpenStreetMap เป็นโครงการซึ่งสร้างสรรค์ขึ้นจากชุมชนของผู้ใช้และผู้สนใจ - ที่ได้ทำการสำรวจ ปรับปรุง แบ่งปันข้อมูลแผนที่ถนน ทางหลวง ทางเดินป่า, รวมถึงสถานที่ที่น่าสนใจอย่าง - ร้านกาแฟ สถานีรถไฟ และอื่นๆ อีกมากมาย จากทั่วทุกมุมโลก - local_knowledge_title: ความรู้จากท้องถิ่น - local_knowledge_html: OpenStreetMap มุ่งเน้นส่งเสริมการใช้และเผยแพร่ความรู้จากคนท้องถิ่น - โดยนักทำแผนที่ในท้องถิ่นสามารถใช้ทั้งภาพถ่ายดาวเทียม อุปกรณ์ระบุตำแหน่งจีพีเอส - หรือแม้แต่ผังกระดาษ เพื่อเดินสำรวจ เพิ่มเติม และปรับปรุงข้อมูลแผนที่ OpenStreetMap - ให้ละเอียด ถูกต้อง ทันสมัยอยู่เสมอได้ด้วยตนเอง ทุกที่ ทุกเวลา - community_driven_title: ผลักดันโดยชุมชน - community_driven_html: ชุมชนผู้ใช้ OpenStreetMap เติบโตขึ้นมาจากกลุ่มคนที่หลากหลาย - ร่วมสร้างสรรค์จากทั้งนักทำแผนที่สมัครเล่น, ผู้เชี่ยวชาญระบบภูมิสารสนเทศ, วิศวกรดูแลเซิร์ฟเวอร์, - อาสาสมัครบรรเทาสาธารณภัย และสาขาอาชีพอื่นๆ อีกมากมาย, เรียนรู้เพิ่มเติมเกี่ยวกับชุมชนของเราได้จากบล็อกทางการของ OpenStreetMap, รวมบันทึกและบล็อกของผู้ใช้ทั่วสารทิศ, - และที่เว็บไซต์ของมูลนิธิ OpenStreetMap - open_data_title: ข้อมูลเปิดเผย - open_data_html: |- - OpenStreetMap อนุญาตให้ใช้ตามหลักเกณฑ์ข้อมูลเปิดเผย โดยจะนำไปใช้ในวัตถุประสงค์อื่นใดก็ได้ - แต่ต้องแสดงที่มาหรือให้คำขอบคุณต่อ OpenStreetMap ตลอดจนผู้ร่วมสร้างสรรค์ ถ้าท่านปรับแก้ สร้างสรรค์ - หรือกระทำการให้เกิดสิ่งอื่นใดใหม่ขึ้นต่องานที่มีนี้ ท่านสามารถแจกจ่ายได้แต่เพียงภายใต้สัญญาอนุญาตเดิม โปรดดู - หน้าลิขสิทธิ์และสัญญาอนุญาต ถ้าต้องการรายละเอียดเพิ่ม - legal_title: ข้อกำหนดทางกฎหมาย - legal_html: "เว็บไซต์และบริการที่เกี่ยวข้องนี้ดำเนินการและบำรุงรักษาอย่างเป็นทางการโดย\nมูลนิธิ OpenStreetMap (OSMF) \nในนามสมาชิกทุกคน - การใช้บริการที่ดำเนินการโดย OSMF จะต้องอยู่ใต้เงื่อนไข\nการใช้งานที่ยอมรับได้ - และนโยบายความเป็นส่วนบุคคล\n
        - \nโปรดติดต่อ OSMF \nถ้าท่านมีข้อสงสัยเกี่ยวกับสัญญาอนุญาต - ข้อมูลลิขสิทธิ์ คำถามกฎหมายและประเด็นที่เกี่ยวข้อง" - partners_title: องค์กรพันธมิตร notifier: diary_comment_notification: subject: '[OpenStreetMap] ผู้ใช้ %{user} แสดงความคิดเห็นต่อรายการบันทึก' @@ -1336,6 +1153,118 @@ th: delete: deleted: ข้อความถูกลบแล้ว site: + about: + next: ถัดไป + copyright_html: |2- + + ©à¸œà¸¹à¹‰à¸¡à¸µà¸ªà¹ˆà¸§à¸™à¸£à¹ˆà¸§à¸¡ OpenStreetMap
        + used_by: '%{name} - ข้อมูลแผนที่ซึ่งขับเคลื่อนเว็บไซต์ แอปพลิเคชั่นมือถือ และอุปกรณ์นำทางมากมายรอบตัวคุณ' + lede_text: OpenStreetMap เป็นโครงการซึ่งสร้างสรรค์ขึ้นจากชุมชนของผู้ใช้และผู้สนใจ + ที่ได้ทำการสำรวจ ปรับปรุง แบ่งปันข้อมูลแผนที่ถนน ทางหลวง ทางเดินป่า, รวมถึงสถานที่ที่น่าสนใจอย่าง + ร้านกาแฟ สถานีรถไฟ และอื่นๆ อีกมากมาย จากทั่วทุกมุมโลก + local_knowledge_title: ความรู้จากท้องถิ่น + local_knowledge_html: OpenStreetMap มุ่งเน้นส่งเสริมการใช้และเผยแพร่ความรู้จากคนท้องถิ่น + โดยนักทำแผนที่ในท้องถิ่นสามารถใช้ทั้งภาพถ่ายดาวเทียม อุปกรณ์ระบุตำแหน่งจีพีเอส + หรือแม้แต่ผังกระดาษ เพื่อเดินสำรวจ เพิ่มเติม และปรับปรุงข้อมูลแผนที่ OpenStreetMap + ให้ละเอียด ถูกต้อง ทันสมัยอยู่เสมอได้ด้วยตนเอง ทุกที่ ทุกเวลา + community_driven_title: ผลักดันโดยชุมชน + community_driven_html: ชุมชนผู้ใช้ OpenStreetMap เติบโตขึ้นมาจากกลุ่มคนที่หลากหลาย + ร่วมสร้างสรรค์จากทั้งนักทำแผนที่สมัครเล่น, ผู้เชี่ยวชาญระบบภูมิสารสนเทศ, วิศวกรดูแลเซิร์ฟเวอร์, + อาสาสมัครบรรเทาสาธารณภัย และสาขาอาชีพอื่นๆ อีกมากมาย, เรียนรู้เพิ่มเติมเกี่ยวกับชุมชนของเราได้จากบล็อกทางการของ OpenStreetMap, รวมบันทึกและบล็อกของผู้ใช้ทั่วสารทิศ, + และที่เว็บไซต์ของมูลนิธิ OpenStreetMap + open_data_title: ข้อมูลเปิดเผย + open_data_html: |- + OpenStreetMap อนุญาตให้ใช้ตามหลักเกณฑ์ข้อมูลเปิดเผย โดยจะนำไปใช้ในวัตถุประสงค์อื่นใดก็ได้ + แต่ต้องแสดงที่มาหรือให้คำขอบคุณต่อ OpenStreetMap ตลอดจนผู้ร่วมสร้างสรรค์ ถ้าท่านปรับแก้ สร้างสรรค์ + หรือกระทำการให้เกิดสิ่งอื่นใดใหม่ขึ้นต่องานที่มีนี้ ท่านสามารถแจกจ่ายได้แต่เพียงภายใต้สัญญาอนุญาตเดิม โปรดดู + หน้าลิขสิทธิ์และสัญญาอนุญาต ถ้าต้องการรายละเอียดเพิ่ม + legal_title: ข้อกำหนดทางกฎหมาย + legal_html: "เว็บไซต์และบริการที่เกี่ยวข้องนี้ดำเนินการและบำรุงรักษาอย่างเป็นทางการโดย\nมูลนิธิ OpenStreetMap (OSMF) \nในนามสมาชิกทุกคน + การใช้บริการที่ดำเนินการโดย OSMF จะต้องอยู่ใต้เงื่อนไข\nการใช้งานที่ยอมรับได้ + และนโยบายความเป็นส่วนบุคคล\n
        + \nโปรดติดต่อ OSMF \nถ้าท่านมีข้อสงสัยเกี่ยวกับสัญญาอนุญาต + ข้อมูลลิขสิทธิ์ คำถามกฎหมายและประเด็นที่เกี่ยวข้อง" + partners_title: องค์กรพันธมิตร + copyright: + foreign: + title: เกี่ยวกับการแปลนี้ + text: หากมีข้อขัดแย้งจากากรตีความหน้าที่แปลนี้กับหน้าเดิมในภาษาอังกฤษ %{english_original_link} + ให้ถือภาษาอังกฤษเป็นสำคัญถูกต้องเสมอ + english_link: หน้าเดิมในภาษาอังกฤษ + native: + title: เกี่ยวกับหน้านี้ + text: ท่านกำลังเรียกดูหน้าข้อมูลลิขสิทธิ์ในภาษาอังกฤษ และสามารถกลับไปที่หน้าภาษา + %{native_link} หรือกลับไปยังแผนที่ที่ %{mapping_link}. + native_link: รุ่นภาษาTHIS_LANGUAGE_NAME_HERE + mapping_link: เริ่มการทำแผนที่ + legal_babble: + title_html: ลิขสิทธิ์และสัญญาอนุญาต + intro_1_html: |- + OpenStreetMap® เป็นข้อมูลเปิดให้ใช้งาน และอนุญาตให้ใช้งานภายใต้สัญญาอนุญาต Open Data + Commons Open Database License (ODbL) โดยมูลนิธิ OpenStreetMap (OSMF). + intro_2_html: "ท่านสามารถทำสำเนา แจกจ่าย แพร่ภาพ และปรับใช้ข้อมูลของเรา\nตราบเท่าที่ได้ระบุชื่อ + OpenStreetMap ตลอดจนผู้ร่วมจัดทำไว้ในคำขอบคุณหรือที่มา\nถ้าท่านปรับแก้ไขหรือสร้างสรรค์งานใหม่โดยใช้ข้อมูลของเราเป็นพื้น + ท่านสามารถ\nแจกจ่ายผลลัพธ์ที่ได้ภายใต้สัญญาอนุญาตเดียวกันเท่านั้น โปรดดู + ข้อกำหนดทางกฎหมาย + \nซึ่งจะอธิบายสิทธิและหน้าที่ที่ท่านพึงมี" + intro_3_html: |- + ภาพร่าง ลายเส้นแผนที่ตามที่ปรากฏ และเอกสารกำกับ อนุญาตให้ใช้งานตามสัญญาอนุญาต Creative + Commons Attribution-ShareAlike 2.0 (CC BY-SA) + credit_title_html: วิธีการแสดงที่มาหรือคำขอบคุณ OpenStreetMap + credit_1_html: |- + เราจำเป็นต้องให้ท่านแสดงที่มาหรือคำขอบคุณแก่ “© ผู้ร่วมสร้างสรรค์ OpenStreetMap + ”. + credit_2_html: |- + ท่านจะต้องระบุให้ชัดเจนเจาะจงว่าข้อมูลอนุญาตให้ใช้ตามสัญญาอนุญาต Open + Database License และถ้ามีการนำรูปแผนที่ไปใช้ รูปนั้นอนุญาตให้ใช้ตามสัญญาอนุญาต + CC BY-SA ในการนี้อาจจะลิงก์ไปยังหน้า + ข้อมูลลิขสิทธิ์ + นอกจากนี้ (จำเป็นหากท่านจ่ายแจกข้อมูล OSM) ท่านสามารถลิงก์ไปยังสัญญาอนุญาตโดยตรง + ในสื่ออย่างอื่น อาทิ สิ่งพิมพ์ ซึ่งไม่สามารถลิงก์ข้อมูลได้แนะนำให้ระบุเพียง openstreetmap.org + และ/หรือ opendatacommons.org และ/หรือ creativecommons.org + credit_3_html: สำหรับแผนที่อิเล็กทรอนิกส์ที่ค้นได้ รายชื่อผู้มีส่วนร่วมควรปรากฏที่มุมของแผนที่ + attribution_example: + alt: ตัวอย่างการอ้างอิง OpenStreetMap บนหน้าเว็บ + title: ตัวอย่างการอ้างอิง + more_title_html: ค้นหาเพิ่มเติม + more_1_html: |- + อ่านเพิ่มเติมเกี่ยวกับการใช้ข้อมูลของเรา ตลอดจนการอ้างอิงเราได้ที่ หน้าสัญญาอนุญาต OSMF + contributors_title_html: ผู้ร่วมสร้างสรรค์ของเรา + contributors_at_html: |- + ออสเตรีย: มีข้อมูลจาก + Stadt Wien (under + CC BY), + Land Vorarlberg และ + Land Tirol (under CC BY AT with amendments). + contributors_ca_html: |- + แคนาดา: มีข้อมูลจาก + GeoBase®, GeoGratis (© Department of Natural + Resources Canada), CanVec (© Department of Natural + Resources Canada) และ StatCan (Geography Division, + Statistics Canada) + contributors_fi_html: |- + ฟินแลนด์: มีข้อมูลจาก + ฐานข้อมูลการสำรวจภูมิศาสตร์แห่งชาติฟินแลนด์และฐานข้อมูลอื่น + อนุญาตให้ใช้ตาม + สัญญาอนุญาต NLSFI. + contributors_fr_html: |- + ฝรั่งเศส: มีข้อมูลจากอธิบดีกรมภาษี ( + Direction Générale des Impôts) + contributors_gb_html: |- + สหราชอาณาจักร: มีข้อมูลจากกองแผนที่ Ordnance + Survey data © ลิขสิทธิ์ราชการและสิทธิ์แห่งฐานข้อมูล + 2010-12 + infringement_title_html: การละเมิดลิขสิทธิ์ + infringement_2_html: |- + หากท่านเชื่อว่าข้อมูลละเมิดลิขสิทธิ์ปรากฏในเว็บไซต์นี้หรือในฐานข้อมูล OpenStreetMap โปรดดู ขั้นตอนการลบข้อมูลละเมิดลิขสิทธิ์ หรือแจ้งได้ที่ + หน้ารับแจ้งการละเมิดข้อมูลลิขสิทธิ์ + trademarks_title_html: เครืองหมายการค้า index: js_1: ท่านกำลังใช้เบราว์เซอร์ที่ไม่รองรับจาวาสคริปต์ หรือท่านปิดใช้งานจาวาสคริปต์ permalink: ลิงก์ถาวร @@ -1346,7 +1275,74 @@ th: not_public_description: ท่านไม่สามารถแก้ไขแผนที่นี้ได้เว้นแต่จะดำเนินการสิ่งอื่นบางอย่าง ท่านสามารถตั้งให้การแก้ไขของท่านมองเห็นได้ทั่วไปที่%{user_page} user_page_link: หน้าผู้ใช้ + anon_edits_link_text: ค้นหาว่าทำไมจึงเป็นเช่นนี้ no_iframe_support: เบราว์เซอร์ของท่านไม่รองรับการใช้งานเฟรมภายในหน้า HTML จึงไม่สามารถใช้ส่วนประกอบนี้ได้ + export: + title: ส่งออก + area_to_export: พื้นที่ที่จะส่งออก + manually_select: เลือกพื้นที่อื่นด้วยตนเอง + format_to_export: รูปแบบที่จะส่งออก + osm_xml_data: ข้อมูล XML ของ OpenStreetMap + map_image: ภาพแผนที่ (แสดงชั้นภาพมาตรฐาน) + embeddable_html: HTML ฝังตัวได้ + licence: สัญญาอนุญาต + export_details: บรรดาข้อมูลที่ปรากฏในเว็บไซต์ OpenStreetMap อนุญาตให้ใช้ภายใต้สัญญาอนุญาต Open Data + Commons Open Database (ODbL). + too_large: + advice: 'ถ้าการส่งออกข้างต้นล้มเหลว โปรดพิจารณาใช้แหล่งข้อมูลตามที่ระบุด้านล่างนี้:' + body: พื้นที่ใหญ่เกินกว่าที่จะส่งออกเป็นข้อมูล XML ของ OpenStreetMap โปรดขยายเข้าหรือเลือกพื้นที่ที่เล็กลง + หรืออาจจะใช้แหล่งข้อมูลข้างล่างในการดาวน์โหลดแฟ้มข้อมูลจำนวนมาก + planet: + description: สำเนาของฐานข้อมูล OpenStreetMap ซึ่งปรับปรุงอย่างสม่ำเสมอ + geofabrik: + description: รายการทวีป ประเทศ และเมืองสำคัญซึ่งปรับปรุงอย่างสม่ำเสมอ + metro: + title: เมโทรเอกซ์แทรกซ์ + description: รายการเมืองสำคัญของโลกและพื้นที่โดยรอบ + other: + title: แหล่งข้อมูลอื่น + description: แหล่งข้อมูลอื่นตามที่ระบุไว้ใน OpenStreetMap wiki + options: ตัวเลือก + format: รูปแบบ + scale: มาตราส่วน + max: ขนาดสูงสุด + image_size: ขนาดภาพ + zoom: ย่อ-ขยาย + add_marker: เพิ่มเครื่องหมายลงในแผนที่ + latitude: 'ละติจูด:' + longitude: 'ลองจิจูด:' + output: การแสดงผล + paste_html: วาง HTML สำหรับนำไปใช้ในเว็บไซต์ + export_button: ส่งออก + fixthemap: + title: รายงานปัญหา/แก้ไขข้อผิดพลาดในแผนที่ + how_to_help: + title: วิธีการช่วยเหลือ + join_the_community: + title: เข้าร่วมเป็นสมาชิก + explanation_html: หากท่านประสบปัญหาเกี่ยวกับข้อมูลแผนที่ของเรา หรือพบข้อผิดพลาด + เช่น ถนนหายไป หรือมีข้อผิดพลาดด้านที่อยู่ วิธีที่ดีที่สุดคือสมัครเป็นสมาชิก + OpenStreetMap เพื่อดำเนินการแก้ไขด้วยตัวท่านเอง + other_concerns: + title: ข้อกังวลอื่น ๆ + explanation_html: หากท่านมีข้อกังวลเกี่ยวกับการใช้ข้อมูลของเราหรือเกี่ยวกับเนื้อหา + โปรดดูหน้าลิขสิทธิ์ เพื่อดูรายละเอียดทางกฎหมาย + หรือติดต่อคณะทำงาน OSMF + + help: + title: ขอรับความช่วยเหลือ + welcome: + title: ยินดีต้อนรับสู่ OSM + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Th:Beginners%27_guide + title: คำแนะนำสำหรับผู้เริ่มต้น + mailing_lists: + title: รายการอีเมลรับข่าวสาร + forums: + title: กระดานสนทนา + irc: + title: ไออาร์ซี sidebar: search_results: ผลการค้นหา close: ปิด @@ -1446,6 +1442,46 @@ th: image: รูปภาพ alt: ข้อความทดแทนภาพ url: ที่อยู่ลิงก์ + welcome: + title: ยินดีต้อนรับ! + introduction_html: 'ยินดิต้อนรับสู่ OpenStreetMap, แผนที่โลกแบบเสรีที่ทุกคนสามารถแก้ไขได้ + ซึ่งตอนนี้คุณได้ลงทะเบียนมาแล้ว ก่อนจะไปลุยกัน ด้านล่างมีสิ่งสำคัญที่คุณควรจะรู้ไว้ตลอดการทำแผนที่ของคุณ:' + whats_on_the_map: + title: บนแผนที่ควรมีอะไร + on_html: OpenStreetMap เป็นที่ที่คุณบันทึกสิ่งที่มีอยู่จริงบนพื้นโลก + และมีอยู่ในปัจจุบัน - เช่นตึก หรือถนนที่คุณแห็นอยู่ดาษดื่นทั่วไป + รวมทั้งรายละเอียดเกี่ยวกับร้านรวงต่างๆ หรือข้อมูลอื่นๆ ที่เห็นได้ของสถานที่เหล่านั้น, + โดยคุณจะทำแผนที่โครงสร้างอะไรที่คุณเห็นอยู่บนพื้นดินก็ได้ แล้วแต่ความสนใจของคุณเอง + off_html: แต่ที่นี่จะไม่รับข้อมูลที่มาจากข้อคิดเห็น เช่นคะแนนเรตติ้ง + สถานที่ที่เคยมีอยู่แต่ในอดีต (ปัจจุบันไม่มีแล้ว) รวมทั้งสถานที่ที่คาดว่าจะมีในอนาคต, + และจะไม่รับข้อมูลจากแหล่งที่มีลิขสิทธิ์อื่นๆ, ฉะนั้นอย่าได้คัดลอกข้อมูลจากแผนที่ออนไลน์หรือแผนที่กระดาษมาใส่ + (เว้นแต่คุณได้รับอนุญาตจากเจ้าของลิขสิทธิ์แล้ว) + basic_terms: + title: คำศัพท์พื้นฐานในการทำแผนที่ + paragraph_1_html: 'เมื่อคุณเข้ามาทำแผนที่ใน OpenStreetMap, คุณจะพบกับศัพท์เฉพาะหลายคำ + ซึ่งความหมายจะอธิบายไว้เบื้องต้นที่ด้านล่างนี้:' + editor_html: ตัวแก้ไข หมายถึงโปรแกรม หรือเว็บไซต์ ที่คุณใช้แก้ไขข้อมูลแผนที่ + node_html: หมุด จะเป็นจุดหนึ่งจุดบนแผนที่, เช่น ร้านอาหารที่ตั้งเดี่ยวๆ + หรือต้นไม้ + way_html: เส้นทาง เป็นส่วนที่ลักษณะเป็นเส้นบนแผนที่ เช่นถนน + ลำธาร, หรือไม่ก็เป็นรูปปิด เช่นทะเลสาบ หรือตึก + tag_html: ป้ายกำกับ เป็นข้อมูลรายละเอียดของหมุด หรือเส้นทาง, + เช่น ชื่อ (ของร้าน) หรือ ขีดจำกัดความเร็ว (ของถนน) + rules: + title: อย่าลืมกติกา! + questions: + title: มีคำถามอีกหรือไม่? + paragraph_1_html: "OpenStreetMap มีสื่อสำหรับค้นคว้า สอบถาม ตอบคำถาม \nสนทนาหัวข้อต่างๆ + ตลอดจนอภิปรายและจัดทำวิธีการสร้างแผนที่\nซึ่งคุณจะหาความช่วยเหลือได้ที่นี่" + start_mapping: เริ่มการทำแผนที่ + add_a_note: + title: ไม่มีเวลาแก้ไขใช่ไหม? ใส่หมายเหตุไว้แทนได้! + paragraph_1_html: หากคุณต้องการจะแก้ไขแค่เล็กน้อย และไม่มีเวลาเข้าใช้ระบบและเรียนรู้วิธีแก้ไขด้วยตัวเอง + คุณสามารถจะเขียนหมายเหตุแปะเอาไว้บนจุดที่คุณอยากแก้ไขแทน + paragraph_2_html: |- + แค่ไปที่แผนที่ แล้วคลิกไอคอน หมายเหตุ: + . จากนั้นจะมีเครื่องหมายมาที่แผนที่ให้ท่านลากไปยัง + ตำแหน่งที่ต้องการ ใส่ข้อความที่ต้องการ คลิกบันทึก แล้วผู้ใช้ท่านอื่นจะเข้ามาตรวจสอบให้ trace: visibility: private: ส่วนตัว (เผยแพร่ในนามผู้ไม่ประสงค์ออกนาม แต่ละจุดไม่เรียงลำดับ) @@ -1535,19 +1571,21 @@ th: description_with_count: แฟ้มข้อมูล GPX จำนวน %{count} จุด จากผู้ใช้ %{user} description_without_count: แฟ้มข้อมูล GPX จากผู้ใช้ %{user} oauth: - oauthorize: + authorize: title: อนุญาตการเข้าถึงบัญชีของคุณ allow_to: 'อนุญาตให้โปรแกรมสามารถ:' allow_read_prefs: อ่านการตั้งค่าผู้ใช้ของคุณ allow_write_prefs: แก้ไขการตั้งค่าผู้ใช้ของคุณ allow_write_api: แก้ไขแผนที่ + allow_read_gpx: อ่านรอยทาง GPS ของท่าน + allow_write_gpx: อัปโหลดรอยทาง GPS allow_write_notes: แก้ไขหมายเหตุ grant_access: อนุญาตการเข้าถึง - oauthorize_success: + authorize_success: title: การขอรับอนุญาตได้รับอนุมัติแล้ว allowed: ท่านได้อนุญาตให้แอปพลิเคชัน %{app_name} เข้าถึงบัญชีของท่านแล้ว verification: รหัสยืนยันคือ %{code} - oauthorize_failure: + authorize_failure: title: การขอรับอนุญาตล้มเหลว denied: ท่านได้อนุญาตให้แอปพลิเคชัน %{app_name} เข้าถึงบัญชีของท่านแล้ว invalid: ข้อมูลการอนุญาตไม่ถูกต้อง @@ -1622,6 +1660,7 @@ th: heading: ลงชื่อเข้าใช้ email or username: 'อีเมลหรือชื่อผู้ใช้:' password: 'รหัสผ่าน:' + openid: 'โอเพนไอดีของ %{logo}:' remember: จดจำฉันไว้ในระบบ lost password link: ลืมรหัสผ่านหรือ? login_button: ลงชื่อเข้าใช้ @@ -1629,7 +1668,11 @@ th: with username: มีบัญชี OpenStreetMap แล้วหรือยัง? ถ้ามีโปรดเข้าระบบด้วยชื่อผู้ใช้และรหัสผ่านที่ท่านมี with external: นอกจากนี้ ท่านสามารถใช้บัญชีผู้ใช้จากเว็บอื่นในการเข้าใช้งานได้ new to osm: เพิ่งเริ่มใช้ OpenStreetMap หรือ? + to make changes: หากต้องการเปลี่ยนแปลงข้อมูลใน OpenStreetMap ท่านต้องมีบัญชีเสียก่อน + create account minute: สร้างบัญชีเดี๋ยวนี้ ใช้เวลาไม่นาน no account: ยังไม่ได้เป็นสมาชิก? + account not active: ขออภัย บัญชีของท่านยังไม่เปิดใช้งาน
        โปรดใช้ลิงก์ที่ให้ไว้ในอีเมลตอบรับเพื่อเปิดใช้งานบัญชี + หรือขออีเมลตอบรับใหม่ หากสูญหาย openid_logo_alt: เข้าใช้งานด้วย OpenID auth_providers: openid: @@ -1890,7 +1933,7 @@ th: are_you_sure: ท่านแน่ใจว่าต้องการถอดถอนสถานะ `%{role}' จากผู้ใช้ `%{name}' หรือไม่? confirm: ยืนยัน fail: ไม่สามารถถอดถอนสถานะ `%{role}' แก่ผู้ใช้ `%{name}' โปรดตรวจสอบว่าทั้งผู้ใช้และสถานะเป็นที่ถูกต้องดีแล้ว - user_block: + user_blocks: model: non_moderator_update: ต้องเป็นผู้ดูแลระบบจึงจะสามารถสร้างหรือปรับปรุงการกีดกันได้ non_moderator_revoke: ต้องเป็นผู้ดูแลระบบจึงจะสามารถเพิกถอนการกีดกันได้ @@ -1931,12 +1974,6 @@ th: title: การกีดกันผู้ใช้ heading: รายการการกีดกันผู้ใช้ empty: ยังไม่มีการกีดกันใด ๆ - partial: - show: แสดง - edit: แก้ไข - status: สถานะ - next: ถัดไป » - previous: « ก่อนหน้า helper: time_future: จะสิ้นสุดใน %{time} blocks_on: @@ -1947,7 +1984,14 @@ th: status: สถานะ show: แสดง edit: แก้ไข - note: + block: + show: แสดง + edit: แก้ไข + blocks: + status: สถานะ + next: ถัดไป » + previous: « ก่อนหน้า + notes: rss: title: หมายเหตุแผนที่ บน OpenStreetMap entry: @@ -2056,7 +2100,7 @@ th: show_address: แสดงที่อยู่ query_features: แสดงส่วนประกอบ centre_map: วางแผนที่ตรงกลางที่นี่ - redaction: + redactions: edit: description: คำอธิบาย heading: แก้ไขการตรวจทาน diff --git a/config/locales/tl.yml b/config/locales/tl.yml index 04c3c1a26..5955b69aa 100644 --- a/config/locales/tl.yml +++ b/config/locales/tl.yml @@ -309,44 +309,6 @@ tl: ago: '%{ago} na ang nakalilipas' newer_comments: Mas Bagong mga Pagpuna older_comments: Mas Lumang mga Puna - export: - title: Iluwas - start: - area_to_export: Pook na Iluluwas - manually_select: Kinakamay na pumili ng ibang lugar - format_to_export: Anyong Iluluwas - osm_xml_data: Dato ng XML ng OpenStreetMap - map_image: Larawan ng Mapa (nagpapakita ng patong na saligan) - embeddable_html: Maibabaong HTML - licence: Lisensiya - export_details: Ang dato ng OpenStreetMap ay may lisensiyang nasa ilalim ng - lisensiyang Open Data - Commons Open Database License (ODbL). - too_large: - body: Masyadong malaki ang lugar na ito upang mailuwas bilang Dato ng XML - ng OpenStreetMap. Mangyaring lumapit o pumili ng isang mas maliit na pook. - planet: - title: Planet OSM - overpass: - title: Overpass API - metro: - title: Metro Extracts - other: - title: Iba pang mga Pinagmulan - description: Karagdagang mga mapagkukunan na nakalista sa OpenStreetMap - Wiki - options: Mga mapagpipilian - format: Anyo - scale: Sukat - max: pinakamataas - image_size: Sukat ng Larawan - zoom: Lapitan - add_marker: Magdagdag ng isang pananda sa mapa - latitude: 'Latitud:' - longitude: 'Longhitud:' - output: Kinalabasan - paste_html: Idikit ang HTML na ibabaon sa websayt - export_button: Iluwas geocoder: search: title: @@ -880,154 +842,6 @@ tl: text: Magkaloob ng isang Abuloy learn_more: Umalam pa more: Marami pa - license_page: - foreign: - title: Tungkol sa salinwikang ito - text: Kung sakaling maganap ang isang salungatan sa pagitan ng isinalinwikang - pahinang ito at ng %{english_original_link}, mangingibabaw ang pahinang nasa - Ingles - english_link: ang orihinal na nasa Ingles - native: - title: Tungkol sa pahinang ito - text: Tinitingnan mo ang bersyon sa Ingles ng pahina ng karapatan sa kopya. Makababalik - ka sa %{native_link} ng pahinang ito o makahihinto ka sa pagbasa ng tungkol - sa karapatang-ari at %{mapping_link}. - native_link: Bersyon ng Tagalog - mapping_link: simulan ang pagmamapa - legal_babble: - title_html: Karapatan sa Paglalathala at Lisensiya - intro_1_html: |- - Ang OpenStreetMap® ay bukas na datos, nakalisensiya sa ilalim ng lisensiyang Open Data - Commons Open Database License (ODbL) ng OpenStreetMap Foundation o OSMF. - intro_2_html: "Malaya mong makokopya, maipapamahagi, maipahahatid at mahahalaw - ang aming mga dato,\nbasta't babanggitin mo ang OpenStreetMap at ang mga tagapag-ambag\nnito. - Kapag binago mo o nagbuo sa pamamagitan ng aming mga dato, maaari\nmong ipamahagi - ang resulta sa ilalim lamang ng katulad na lisensiya. Ipinapaliwanag \nng - buong kodigong - pambatas \nang mga karapatan at mga pananagutan mo." - intro_3_html: |- - Ang kartograpya sa aming mga tile na mapa at ang aming dokumentasyon ay lisensyado sa ilalim ng lisensiyang Creative - Commons Attribution-ShareAlike 2.0 (CC BY-SA). - credit_title_html: Paano babanggitin ang OpenStreetMap - credit_1_html: "Kinakailangan namin na gamitin ang kredito na “© - mga tagapag-ambag ng \nOpenStreetMap”." - credit_2_html: "Kung saan maaari, dapat na ikawing nang labis (lagyan ng hyperlink) - ang OpenStreetMap\nna papunta sa http://www.openstreetmap.org/\nat - CC BY-SA sa http://creativecommons.org/licenses/by-sa/2.0/. - Kung\ngumagamit ka ng isang midyum o kasangkapan kung saan hindi maaari ang - mga kawing (iyong isang\nakdang nakalimbag), iminumungkahi namin na ituro - ang mga mambabasa mo sa \nwww.openstreetmap.org (marahil sa pamamagitan ng - pagpapalawak ng ‘OpenStreetMap’\nupang maging tumuturo sa buong - tirahan na ito) at sa www.creativecommons.org." - attribution_example: - title: Halimbawa ng Atribusyon - more_title_html: Ang pagtuklas ng mas marami pang iba - more_1_html: |- - Magbasa ng mas marami pa hinggil sa paggamit ng dato namin at kung paano kaming banggitin sa pahina ng Lisensya ng OSMF at sa Mga Palaging Itinatanong na Makabatas. - more_2_html: |- - Ipinapaalala sa mga tagapag-ambag ng OpenStreetMap (OSM) na huwag kailanman magdaragdag ng dato magmula sa anumang - mga pinagmulan na mayroong karapatan sa paglalathala (halimbawa na ang Google Maps o nakalimbag na mga mapa) na wala - ang malinaw na kapahintulutan magmula sa mga tagapaghawak ng karapatan sa paglalathala. - contributors_title_html: Mga tagapag-ambag namin - contributors_intro_html: "Nangangailangan ang aming lisensiyang CC BY-SA na - ikaw ay “magbigay ng pagbanggit sa Orihinal\nna May-akda na makatwiran - sa midyum o kaparaanan na ginagamit Mo”. Ang indibidwal na mga \ntagapagmapa - ng OSM ay hindi humihiling ng isang pagbanggit sa ibabaw at sa itaas niyan - sa “mga \ntagapag-ambag ng OpenStreetMap”, subalit kung saan ang - dato magmula sa isang pambansang\nahensiya ng pagmamapa o ibang pangunahing - pinagmulan ay naisama sa loob ng OpenStreetMap,\nmaaaring maging makatwiran - na banggitin sila sa pamamagitan ng tuwirang paglikha muli ng kanilang\npagkakabanggit - o sa pamamagitan ng pagkakawing dito sa ibabaw ng pahinang ito." - contributors_at_html: "Austria: Naglalaman ng dato magmula - sa \nStadt Wien (na nasa ilalim ng - \nCC BY),\nLand - Vorarlberg at ng\nLand Tirol (na nasa ilalim ng CC - BY AT na mayroong mga susog)." - contributors_ca_html: "Canada: Naglalaman ng dato mula sa\nGeoBase®, - GeoGratis (© Kagawaran ng Likas na Yaman ng \nCanada), CanVec (© - Kagawaran ng Likas na Yaman ng Canada), at StatCan \n(Dibisyon ng Heograpiya, - Estadistika ng Canada)." - contributors_fr_html: "Pransiya: Naglalaman ng dato na nanggaling - magmula sa \nDirection Générale des Impôts." - contributors_nl_html: |- - Nederlandiya: Naglalaman ng © dato ng AND, 2007 - (www.and.com) - contributors_nz_html: |- - Bagong Selanda: naglalaman ng dato na nanggaling magmula sa - Kabatirang Panlupain ng Bagong Selanda. Nakareserba ang Karapatan sa Paglalatahala - na Pangkorona. - contributors_za_html: "Timog Aprika: Naglalaman ng datong nanggaling - magmula sa \nPunong Pangasiwaan: \nPambansang - Kabatiran na Pangheograpiya at Pangkalawakan, nakareserba ang \nkarapatan - ng paglalathala ng Estado." - contributors_gb_html: "Nagkakasiang mga Kaharian: Naglalaman - ng Ordinansiya \nsa dato ng Pagsisiyasat © Karapatan sa Paglalathala - ng Korona at karapatan \nsa kalipunan ng dato 2010-12." - contributors_footer_1_html: "Para sa karagdagang mga detalye ng mga ito, at - iba pang pinanggalingan na ginamit \nupang mapainam ang OpenStreetMap, paki - tingnan ang Pahina - ng \ntagapag-ambag na nasa ibabaw ng Wiki ng OpenStreetMap." - contributors_footer_2_html: "Ang pagsasama ng dato sa loob ng OpenStreetMap - ay hindi nagpapahiwatig na ang orihinal \nna tagapagbigay ng dato ay tumatangkilik - sa OpenStreetMap, nagbibigay ng anumang garantiya, o \ntumatanggap ng anumang - pananagutan." - infringement_title_html: Paglabag sa karapatang-ari - infringement_1_html: Ang mga tagapag-ambag ng OSM ay pinaalalahanan na huwag - magdagdag ng datos mula sa anumang mapagkukunan na may karapatang-ari na nakalaan - (halimbawa, Google Maps o naka-print na mga mapa) nang walang pahintulot mula - sa mga may hawak ng karapatang-ari. - trademarks_title_html: Mga Trademark - welcome_page: - title: Maligayang pagdating! - whats_on_the_map: - title: Anong nasa Mapa - rules: - title: Mga Patakaran! - questions: - title: May mga tanong? - start_mapping: Simulan ang Pagmamapa - fixthemap: - title: Mag-ulat ng problema/ Ayusin ang mapa - how_to_help: - title: Papaano tumulong - help_page: - welcome: - url: /welcome - title: Maligayang pagdating sa OSM - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide - irc: - title: IRC - switch2osm: - title: switch2osm - about_page: - next: Kasunod - copyright_html: ©Mga tagapag-ambag
        ng OpenStreetMap - used_by: Ang %{name} ay nagpapatakbo ng dato ng mapa sa libu-libong mga website, - mga mobile na app, at aparatong hardware - lede_text: Ang OpenStreetMap ay nilikha ng isang komunidad ng mga nagmamapa na - nag-aambag at nagpapanatili ng dato tungkol sa mga kalsada, mga daanan, mga - kapihan, mga istasyon ng tren, at iba pa, sa buong mundo. - community_driven_html: |- - Ang komunidad ng OpenStreetMap ay iba-iba, masigasig, at lumalaki araw-araw. Ang aming mga tagapag-ambag ay binubuo ng mga tagahanga ng mapa, mga propesyonal ng GIS, mga inhinyero na nagpapatakbo sa mga server ng OSM, mga boluntaryo sa pagmamapa ng mga lugar na apektado ng kalamidad, at higit pa. - Upang matuto nang higit pa, tignan ang mga talaarawan ng mga tagagamit, mga blog ng komunidad, at ang websayt ng OSM Foundation. - open_data_title: Bukas na Dato - open_data_html: 'Ang OpenStreetMap ay bukas na datos: malaya kang gamitin - ito para sa anumang layunin hangga''t nagbigay ka ng kredito sa OpenStreetMap - at ang mga tagapag-ambag nito. Kung babaguhin mo o binuo mula sa data sa ilang - mga paraan, maaari mong ipamahagi ang mga resulta sa ilalim lamang ng parehong - lisensya. Tingnan ang pahina ng Karapatang-ari - at Lisensya para sa mga detalye.' - legal_html: |- - Ang site na ito at maraming iba pang mga kaugnay na serbisyo ay opisyal na pinatatakbo ng OpenStreetMap Foundation (OSMF) sa ngalan ng komunidad. Ang paggamit ng lahat ng mga serbisyo na pinatatakbo ng OSMF ay napapailalim sa aming Patakaran sa Tanggapang Paggamit at Patakaran sa Pagkapribado -
        - Mangyaring makipag-ugnay sa OSMF kung mayroon kang mga katanungan tungkol sa paglilisensya, karapatang-ari, o iba pang mga legal na isyu at katanungan. - partners_title: Mga Kawaksi notifier: diary_comment_notification: subject: '[OpenStreetMap] Si %{user} ay nagbigay ng puna sa ipinasok mo sa talaarawan' @@ -1187,6 +1001,131 @@ tl: delete: deleted: Binura ang mensahe site: + about: + next: Kasunod + copyright_html: ©Mga tagapag-ambag
        ng OpenStreetMap + used_by: Ang %{name} ay nagpapatakbo ng dato ng mapa sa libu-libong mga website, + mga mobile na app, at aparatong hardware + lede_text: Ang OpenStreetMap ay nilikha ng isang komunidad ng mga nagmamapa + na nag-aambag at nagpapanatili ng dato tungkol sa mga kalsada, mga daanan, + mga kapihan, mga istasyon ng tren, at iba pa, sa buong mundo. + community_driven_html: |- + Ang komunidad ng OpenStreetMap ay iba-iba, masigasig, at lumalaki araw-araw. Ang aming mga tagapag-ambag ay binubuo ng mga tagahanga ng mapa, mga propesyonal ng GIS, mga inhinyero na nagpapatakbo sa mga server ng OSM, mga boluntaryo sa pagmamapa ng mga lugar na apektado ng kalamidad, at higit pa. + Upang matuto nang higit pa, tignan ang mga talaarawan ng mga tagagamit, mga blog ng komunidad, at ang websayt ng OSM Foundation. + open_data_title: Bukas na Dato + open_data_html: 'Ang OpenStreetMap ay bukas na datos: malaya kang gamitin + ito para sa anumang layunin hangga''t nagbigay ka ng kredito sa OpenStreetMap + at ang mga tagapag-ambag nito. Kung babaguhin mo o binuo mula sa data sa ilang + mga paraan, maaari mong ipamahagi ang mga resulta sa ilalim lamang ng parehong + lisensya. Tingnan ang pahina ng Karapatang-ari + at Lisensya para sa mga detalye.' + legal_html: |- + Ang site na ito at maraming iba pang mga kaugnay na serbisyo ay opisyal na pinatatakbo ng OpenStreetMap Foundation (OSMF) sa ngalan ng komunidad. Ang paggamit ng lahat ng mga serbisyo na pinatatakbo ng OSMF ay napapailalim sa aming Patakaran sa Tanggapang Paggamit at Patakaran sa Pagkapribado +
        + Mangyaring makipag-ugnay sa OSMF kung mayroon kang mga katanungan tungkol sa paglilisensya, karapatang-ari, o iba pang mga legal na isyu at katanungan. + partners_title: Mga Kawaksi + copyright: + foreign: + title: Tungkol sa salinwikang ito + text: Kung sakaling maganap ang isang salungatan sa pagitan ng isinalinwikang + pahinang ito at ng %{english_original_link}, mangingibabaw ang pahinang + nasa Ingles + english_link: ang orihinal na nasa Ingles + native: + title: Tungkol sa pahinang ito + text: Tinitingnan mo ang bersyon sa Ingles ng pahina ng karapatan sa kopya. Makababalik + ka sa %{native_link} ng pahinang ito o makahihinto ka sa pagbasa ng tungkol + sa karapatang-ari at %{mapping_link}. + native_link: Bersyon ng Tagalog + mapping_link: simulan ang pagmamapa + legal_babble: + title_html: Karapatan sa Paglalathala at Lisensiya + intro_1_html: |- + Ang OpenStreetMap® ay bukas na datos, nakalisensiya sa ilalim ng lisensiyang Open Data + Commons Open Database License (ODbL) ng OpenStreetMap Foundation o OSMF. + intro_2_html: "Malaya mong makokopya, maipapamahagi, maipahahatid at mahahalaw + ang aming mga dato,\nbasta't babanggitin mo ang OpenStreetMap at ang mga + tagapag-ambag\nnito. Kapag binago mo o nagbuo sa pamamagitan ng aming mga + dato, maaari\nmong ipamahagi ang resulta sa ilalim lamang ng katulad na + lisensiya. Ipinapaliwanag \nng buong kodigong + pambatas \nang mga karapatan at mga pananagutan mo." + intro_3_html: |- + Ang kartograpya sa aming mga tile na mapa at ang aming dokumentasyon ay lisensyado sa ilalim ng lisensiyang Creative + Commons Attribution-ShareAlike 2.0 (CC BY-SA). + credit_title_html: Paano babanggitin ang OpenStreetMap + credit_1_html: "Kinakailangan namin na gamitin ang kredito na “© + mga tagapag-ambag ng \nOpenStreetMap”." + credit_2_html: "Kung saan maaari, dapat na ikawing nang labis (lagyan ng hyperlink) + ang OpenStreetMap\nna papunta sa http://www.openstreetmap.org/\nat + CC BY-SA sa http://creativecommons.org/licenses/by-sa/2.0/. + Kung\ngumagamit ka ng isang midyum o kasangkapan kung saan hindi maaari + ang mga kawing (iyong isang\nakdang nakalimbag), iminumungkahi namin na + ituro ang mga mambabasa mo sa \nwww.openstreetmap.org (marahil sa pamamagitan + ng pagpapalawak ng ‘OpenStreetMap’\nupang maging tumuturo sa + buong tirahan na ito) at sa www.creativecommons.org." + attribution_example: + title: Halimbawa ng Atribusyon + more_title_html: Ang pagtuklas ng mas marami pang iba + more_1_html: |- + Magbasa ng mas marami pa hinggil sa paggamit ng dato namin at kung paano kaming banggitin sa pahina ng Lisensya ng OSMF at sa Mga Palaging Itinatanong na Makabatas. + more_2_html: |- + Ipinapaalala sa mga tagapag-ambag ng OpenStreetMap (OSM) na huwag kailanman magdaragdag ng dato magmula sa anumang + mga pinagmulan na mayroong karapatan sa paglalathala (halimbawa na ang Google Maps o nakalimbag na mga mapa) na wala + ang malinaw na kapahintulutan magmula sa mga tagapaghawak ng karapatan sa paglalathala. + contributors_title_html: Mga tagapag-ambag namin + contributors_intro_html: "Nangangailangan ang aming lisensiyang CC BY-SA na + ikaw ay “magbigay ng pagbanggit sa Orihinal\nna May-akda na makatwiran + sa midyum o kaparaanan na ginagamit Mo”. Ang indibidwal na mga \ntagapagmapa + ng OSM ay hindi humihiling ng isang pagbanggit sa ibabaw at sa itaas niyan + sa “mga \ntagapag-ambag ng OpenStreetMap”, subalit kung saan + ang dato magmula sa isang pambansang\nahensiya ng pagmamapa o ibang pangunahing + pinagmulan ay naisama sa loob ng OpenStreetMap,\nmaaaring maging makatwiran + na banggitin sila sa pamamagitan ng tuwirang paglikha muli ng kanilang\npagkakabanggit + o sa pamamagitan ng pagkakawing dito sa ibabaw ng pahinang ito." + contributors_at_html: "Austria: Naglalaman ng dato magmula + sa \nStadt Wien (na nasa ilalim + ng \nCC + BY),\nLand + Vorarlberg at ng\nLand Tirol (na nasa ilalim ng CC + BY AT na mayroong mga susog)." + contributors_ca_html: "Canada: Naglalaman ng dato mula sa\nGeoBase®, + GeoGratis (© Kagawaran ng Likas na Yaman ng \nCanada), CanVec (© + Kagawaran ng Likas na Yaman ng Canada), at StatCan \n(Dibisyon ng Heograpiya, + Estadistika ng Canada)." + contributors_fr_html: "Pransiya: Naglalaman ng dato na nanggaling + magmula sa \nDirection Générale des Impôts." + contributors_nl_html: |- + Nederlandiya: Naglalaman ng © dato ng AND, 2007 + (www.and.com) + contributors_nz_html: |- + Bagong Selanda: naglalaman ng dato na nanggaling magmula sa + Kabatirang Panlupain ng Bagong Selanda. Nakareserba ang Karapatan sa Paglalatahala + na Pangkorona. + contributors_za_html: "Timog Aprika: Naglalaman ng datong + nanggaling magmula sa \nPunong Pangasiwaan: + \nPambansang Kabatiran na Pangheograpiya at Pangkalawakan, nakareserba + ang \nkarapatan ng paglalathala ng Estado." + contributors_gb_html: "Nagkakasiang mga Kaharian: Naglalaman + ng Ordinansiya \nsa dato ng Pagsisiyasat © Karapatan sa Paglalathala + ng Korona at karapatan \nsa kalipunan ng dato 2010-12." + contributors_footer_1_html: "Para sa karagdagang mga detalye ng mga ito, at + iba pang pinanggalingan na ginamit \nupang mapainam ang OpenStreetMap, paki + tingnan ang Pahina + ng \ntagapag-ambag na nasa ibabaw ng Wiki ng OpenStreetMap." + contributors_footer_2_html: "Ang pagsasama ng dato sa loob ng OpenStreetMap + ay hindi nagpapahiwatig na ang orihinal \nna tagapagbigay ng dato ay tumatangkilik + sa OpenStreetMap, nagbibigay ng anumang garantiya, o \ntumatanggap ng anumang + pananagutan." + infringement_title_html: Paglabag sa karapatang-ari + infringement_1_html: Ang mga tagapag-ambag ng OSM ay pinaalalahanan na huwag + magdagdag ng datos mula sa anumang mapagkukunan na may karapatang-ari na + nakalaan (halimbawa, Google Maps o naka-print na mga mapa) nang walang pahintulot + mula sa mga may hawak ng karapatang-ari. + trademarks_title_html: Mga Trademark index: js_1: Maaaring gumagamit ka ng isang pantingin-tingin na hindi tumatangkilik ng JavaScript, o hindi mo pinagagana ang JavaScript. @@ -1220,6 +1159,57 @@ tl: (Upang masagip sa Potlatch 2, dapat mong pindutin ang sagipin.) no_iframe_support: Hindi tinatangkilik ng pantingin-tingin mo ang mga iframe ng HTML, na kailangan para sa tampok na ito. + export: + title: Iluwas + area_to_export: Pook na Iluluwas + manually_select: Kinakamay na pumili ng ibang lugar + format_to_export: Anyong Iluluwas + osm_xml_data: Dato ng XML ng OpenStreetMap + map_image: Larawan ng Mapa (nagpapakita ng patong na saligan) + embeddable_html: Maibabaong HTML + licence: Lisensiya + export_details: Ang dato ng OpenStreetMap ay may lisensiyang nasa ilalim ng + lisensiyang Open Data + Commons Open Database License (ODbL). + too_large: + body: Masyadong malaki ang lugar na ito upang mailuwas bilang Dato ng XML + ng OpenStreetMap. Mangyaring lumapit o pumili ng isang mas maliit na pook. + planet: + title: Planet OSM + overpass: + title: Overpass API + metro: + title: Metro Extracts + other: + title: Iba pang mga Pinagmulan + description: Karagdagang mga mapagkukunan na nakalista sa OpenStreetMap + Wiki + options: Mga mapagpipilian + format: Anyo + scale: Sukat + max: pinakamataas + image_size: Sukat ng Larawan + zoom: Lapitan + add_marker: Magdagdag ng isang pananda sa mapa + latitude: 'Latitud:' + longitude: 'Longhitud:' + output: Kinalabasan + paste_html: Idikit ang HTML na ibabaon sa websayt + export_button: Iluwas + fixthemap: + title: Mag-ulat ng problema/ Ayusin ang mapa + how_to_help: + title: Papaano tumulong + help: + welcome: + url: /welcome + title: Maligayang pagdating sa OSM + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Beginners%27_guide + irc: + title: IRC + switch2osm: + title: switch2osm sidebar: search_results: Mga Resulta ng Paghahanap close: Isara @@ -1314,6 +1304,15 @@ tl: image: Larawan alt: Kahaliling teksto url: URL + welcome: + title: Maligayang pagdating! + whats_on_the_map: + title: Anong nasa Mapa + rules: + title: Mga Patakaran! + questions: + title: May mga tanong? + start_mapping: Simulan ang Pagmamapa trace: visibility: private: Pribado (ipinamamahagi lang bilang hindi nagpapakilala, hindi nakaayos @@ -1441,7 +1440,7 @@ tl: lumagda sa ugnayang-mukha ng web upang tingnan ang mga Tuntunin ng Tagapag-ambag. Hindi mo kailangan sumang-ayon, subalit dapat mong tingnan ang mga ito. oauth: - oauthorize: + authorize: request_access: Ang aplikasyong %{app_name} ay humihiling na mapuntahan ang akawnt mo, %{user}. Mangyaring suriin kung nais mong magkaroon ang aplikasyon ng sumusunod na mga kakayahan. Maaari kang pumili ng marami o kaunti ayon @@ -1845,7 +1844,7 @@ tl: confirm: Tiyakin fail: Hindi na mababawi pa ang gampaning `%{role}' mula sa tagagamit na si `%{name}'. Mangyaring suriin kung kapwa katanggap-tanggap ang tagagamit at ang gampanin. - user_block: + user_blocks: model: non_moderator_update: Kailangang isang tagapangasiwa upang makalikha o magsapanahon ng isang paghadlang. @@ -1916,20 +1915,6 @@ tl: period: one: 1 oras other: '%{count} mga oras' - partial: - show: Ipakita - edit: Baguhin - revoke: Bawiin! - confirm: Nakatitiyak ka ba? - display_name: Hinadlangang Tagagamit - creator_name: Tagapaglikha - reason: Dahilan ng pagharang - status: Kalagayan - revoker_name: Binawi ni - not_revoked: (hindi binawi) - showing_page: Ika-%{page} na pahina - next: Susunod » - previous: « Nakaraan helper: time_future: Magwawakas sa %{time}. until_login: Masigla hanggang sa paglagda ng tagagamit. @@ -1959,8 +1944,22 @@ tl: revoker: 'Tagapagbawi:' needs_view: Ang tagagamit ay kailangang lumagda muna bago mahawi ang hadlang na ito. - note: - description: + block: + not_revoked: (hindi binawi) + show: Ipakita + edit: Baguhin + revoke: Bawiin! + blocks: + display_name: Hinadlangang Tagagamit + creator_name: Tagapaglikha + reason: Dahilan ng pagharang + status: Kalagayan + revoker_name: Binawi ni + showing_page: Ika-%{page} na pahina + next: Susunod » + previous: « Nakaraan + notes: + comment: opened_at_html: Nilikha %{when} ang nakaraan opened_at_by_html: Nilikha %{when} ang nakaraan ni %{user} closed_at_html: Nalutas %{when} ang nakaraan @@ -2047,7 +2046,7 @@ tl: directions_to: Mga direksyon papunta rito add_note: Magdagdag ng tala dito centre_map: Igitna ang mapa dito - redaction: + redactions: edit: description: Paglalarawan heading: Baguhin ang redaksiyon diff --git a/config/locales/tr.yml b/config/locales/tr.yml index ddd7aada0..b84affaff 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -372,53 +372,6 @@ tr: ago: '%{ago} önce' newer_comments: Daha yeni yorumlar older_comments: Daha eski yorumlar - export: - title: Dışa aktar - start: - area_to_export: Çıkartılacak alan - manually_select: Fare kullanarak farklı bir alan seç - format_to_export: Çıkartma biçimi - osm_xml_data: OpenStreetMap XML Veri - map_image: Harita (varsayılan katmanı gösterir) - embeddable_html: Gömülebilir HTML - licence: Lisans - export_details: OpenStreetMap verileri, Open - Data Commons Open Database License (ODbL) altında lisanslanmıştır. - too_large: - advice: 'Yukarıdaki dışa aktarım başarısız olursa, lütfen aşağıdaki kaynaklardan - birini kullanmayı düşünün:' - body: Bu alan OpenStreetMap XML verisi olarak verilmesine kadar büyüktür. - Lütfen yakınlaştır veya daha küçük bir alan seç ya da aşağıdaki verilen - diğer kaynakları kullan. - planet: - title: OSM Gezegeni - description: Tam OpenStreetMap veritabanının düzenli güncellenen kopyası - overpass: - title: Overpass API - description: Bu karakter kutusunu OpenStreetMap veritabanının alternatif - bir bağlantısını kullanarak indirin - geofabrik: - title: Geofabrik Ä°ndirmeleri - description: Kıtalar, ülkeler ve seçilen şehirlerin düzenli olarak güncellenen - özetleri - metro: - title: Büyükşehir Çıktıları - description: Büyükşehir ile banliyölerin çıktıkları - other: - title: Diğer Kaynaklar - description: OpenStreetMap vikisinde listelenen ek kaynaklar - options: Seçenekler - format: Biçim - scale: Ölçek - max: maks. - image_size: Resim Boyutu - zoom: Yakınlaştır - add_marker: Haritaya bir işaret ekle - latitude: 'Enlem:' - longitude: 'Boylam:' - output: Çıktı - paste_html: Yukarıdaki HTML kodu kopyalayıp websitesinde yapıştırabilir - export_button: Çıkart geocoder: search: title: @@ -991,270 +944,6 @@ tr: text: Bağış Yapın learn_more: Daha Fazla Bilgi more: Daha fazla - license_page: - foreign: - title: Bu çeviri hakkında - text: Tercüme edilmiş bu sayfa ile %{english_original_link} arasında meydana - gelebilecek herhangi bir uyuşmazlıkta sayfanın özgün dili olan Ä°ngilizce bölümü - önceliklidir. - english_link: Ä°ngilizce orijinal - native: - title: Sayfa hakkında - text: Telif hakkı sayfasının Ä°ngilizce sürümünü görüntülüyorsunuz. Bu sayfanın - %{native_link} ile geri gidebilir ya da telif hakkı ve %{mapping_link} hakkında - bilgi edinmek için sayfada kalabilirsiniz. - native_link: Türkçe sürümü - mapping_link: harita çizmeye başla - legal_babble: - title_html: Telif Hakkı ve Lisans - intro_1_html: |- - OpenStreetMap®, OpenStreetMap Foundation (OSMF) tarafından oluşturulan Open Data - Commons Open Database License (ODbL) ile lisanslandırılmıştır. - intro_2_html: |- - OpenStreetMap'e ve katkıda bulunanlarına değindiğiniz - sürece verilerimizi kopyalamak, dağıtmak, iletmek - ve uyarlamakta serbestsiniz. - Verilerimizi değiştirir veya geliştirirseniz, - sonucu sadece aynı lisans altında dağıtabilirsiniz. - Tüm yasal kod, haklarınızı ve sorumluluklarınızı açıklamaktadır. - intro_3_html: |- - Haritalarımızdaki haritacılık ve belgelerimiz, Creative - Commons Attribution-ShareAlike 2.0 lisansı (CC BY-SA) ile yetkilendirilmiştir. - credit_title_html: OpenStreetMap nasıl atıf edinir - credit_1_html: |- - Atıf şu şekilde yazmak gerekir: “© OpenStreetMap - katılımcıları”. - credit_2_html: |- - Ayrıca, verilerin Open Database License ve - haritalarımızdaki karoları kullanıyorsanız haritacılığımız - CC BY-SA ile lisanslandırıldığını açıkça belirtmelisiniz. - Bunu, bu telif hakkı sayfasına bağlantı vererek gerçekleştirebilirsiniz. - Alternatif ve bir gereksinim olarak, OSM'yi bir veri formunda dağıtıyorsanız direkt olarak lisansları adlandırabilir - veya doğrudan lisanslara bağlayabilirsiniz. Bağlantıların - mümkün olmadığı ortamlarda (örneğin basılı işler) - okuyucularınızı openstreetmap.org'a, opendatacommons.org'a - ve varsa creativecommons.org'a yönlendirmenizi - öneriyoruz. - credit_3_html: |- - Bir gezinebilir elektronik haritanın sağ alt köşesinde kredisi görünmesi lazım. - Örnegin: - attribution_example: - alt: Web sayfasıında OpenStreetMap atıf etmek için bir örnek - title: Atıf örneği - more_title_html: Daha fazlasını öğrenin - more_1_html: |- - Verilerimizi kullanma ve bizi nasıl referans verebileceğiniz hakkında daha fazla bilgi için OSMF Lisans sayfasına bakınız. - more_2_html: |- - OpenStreetMap açık veri olsa da, üçüncü taraflar - için ücretsiz bir harita API'ı sağlayamıyoruz. API Kullanım Politikası, - Karo Kullanım Politikası - ve Nominatim Kullanım Politikası sayfalarımıza bakınız. - contributors_title_html: Katkıcılarımız - contributors_intro_html: |- - Binlerce kişi projemize katkıda bulunmaktadır. Ulusal - haritalama ajanslarından ve diğer kaynaklardan - açık-lisanslı veriler de içeriyoruz: - contributors_at_html: |- - Avusturya: Stadt Wien (CC BY lisansı altında), - Land Vorarlberg ve - Land Tirol'dan (değişiklikleriyle CC BY AT lisansı altında) veriler içermektedir. - contributors_ca_html: "Kanada: GeoBase®, GeoGratis \n(© - Department of Natural\nResources Canada), CanVec (© Department of Natural\nResources - Canada) ve StatCan'den (Geography Division,\nStatistics Canada) veriler içermektedir." - contributors_fi_html: |- - Finlandiya: National Land - Survey of Finland's Topographic Database - ve diğer veri setlerinden, NLSFI License altında, veriler içermektedir.. - contributors_fr_html: |- - Fransa: Direction Générale des Impôts'dan - veri içermektedir. - contributors_nl_html: |- - Hollanda: Contains © AND veri, 2007 - (www.and.com) - contributors_nz_html: 'Yeni Zelanda: Land Information New Zealand''dan - edinilen verileri içerir. Crown Copyright saklıdır.' - contributors_si_html: |- - Slovenya: Surveying and Mapping Authority ve - Ministry of Agriculture, Forestry and Food - (Slovenya'nın halka açık bilgileri) sayfalarından - edinilen verileri içermektedir. - contributors_za_html: |- - Güney Afrika: Chief Directorate: - National Geo-Spatial Information kaynaklı verileri içermektedir, Devlet telif hakkı saklıdır. - contributors_gb_html: |- - Birleşik Krallık: Contains Ordnance - Survey data © Crown copyright and database right - 2010-12. - contributors_footer_1_html: |- - OpenStreetMap'in geliştirilmesine yardımcı olmak için - bu ve diğer kaynaklar hakkında daha ayrıntılı bilgi almak için, - OpenStreetMap Wiki üzerinden Katkıda bulunan kullanıcılar sayfasına lütfen bakınız. - contributors_footer_2_html: |- - Verilerin OpenStreetMap'e dahil edilmesi, orijinal - veri sağlayıcının OpenStreetMap'i onayladığını, - herhangi bir garanti verdiğini ya da - herhangi bir yükümlülüğü kabul ettiğini ima etmez. - infringement_title_html: Telif hakkı ihlali - infringement_1_html: |- - OSM'ye katkıda bulunanların telif hakkı sahiplerinin - açık izni olmadan telif hakkıyla korunan kaynaklardan - (ör. Google Haritalar veya basılı haritalar) hiçbir zaman - veri eklememeleri hatırlatılır. - infringement_2_html: |- - Telif hakkıyla korunan materyalin - OpenStreetMap veritabanına veya bu siteye - yanlışlıkla eklendiğine inanıyorsanız kaldırma prosedürü sayfasına başvurun veya - doğrudan çevrimiçi dosyalama sayfamızda kayda geçirin. - trademarks_title_html: Ticari Markalar - trademarks_1_html: OpenStreetMap, büyüteç logosu ve State of the Map; OpenStreetMap - Foundation'ın tescilli ticari markalarıdır. Markaların kullanımı ile ilgili - sorularınız varsa lütfen sorularınızı Lisans - Çalışma Grubu'na gönderiniz - welcome_page: - title: Hoş geldiniz! - introduction_html: Dünyanın düzenlenebilir ve ücretsiz haritası OpenStreetMap'e - hoş geldiniz. Şu an kaydoldunuz ve bütün haritalama işlemlerine başlamanız için - her şey hazır. İşte bilmeniz gereken en önemli şeylerin hızlı bir kılavuzu. - whats_on_the_map: - title: Haritada ne bulunur - on_html: OpenStreetMap, gerçek ve güncel şeyleri haritalamak için bir - yerdir. Bu milyonlarca binaları, yolları ve yerler hakkında diğer ayrıntıları - içerir. Ä°lgini çeken her türlü gerçek dünya özelliklerini haritalayabilirsin. - off_html: Neyi içermez? Ön yargılı veriler gibi değerlendirmeler, tarihî - ya da farazi özellikler ve telif hakkı olan kaynaklardan gelen verileri içermez. - Özel izniniz yoksa, çevrim içi ya da kağıt haritaları kopyalamayın. - basic_terms: - title: Haritacılığın temel terimleri - paragraph_1_html: OpenStreetMap'in kendine ait bazı argoları vardır. İşte kullanışlı - gelecek birkaç anahtar kelime. - editor_html: Düzenleyici haritayı düzenlemek için kullanabileceğiniz - bir program ya da web sayfasıdır. - node_html: Düğüm, haritadaki bir noktadır. Bu bir restoran - ya da bir ağaç olabilir. - way_html: Yol, bir çizgi ya da alan, bir cadde, akarsu, göl - ya da bina olabilir. - tag_html: Etiket, bir düğümün ya da yolun veri parçasıdır. - Bu bir restoranın ismi ya da yolun hız sınırı olabilir. - rules: - title: Kuralları! - paragraph_1_html: |- - OpenStreetMap'in resmi kuralları yoktur ancak tüm katılımcıların - toplulukla işbirliği yapmasını ve iletişim kurmasını bekleriz. - Elle düzenleme dışında herhangi bir faaliyet düşünüyorsanız, - lütfen yönergeleri okuyun ve uygulayın: - İçe aktarma ve - Otomatik Düzenlemeler - questions: - title: Sorularınız var mı? - paragraph_1_html: OpenStreetMap, proje hakkında bilgiler içeren, soru sormak - ve soruları cevaplamak için ve işbirliği halinde tartışma yapılan ve haritalama - konularını belgelemek için çeşitli kaynaklara sahiptir. Buradan - yardım alın. - start_mapping: Harita çizmeye başla - add_a_note: - title: Düzenlemek için vaktin yok mu? O zaman bir not ekle! - paragraph_1_html: |- - Küçük bir değişikliğin sabit kalmasını istiyor fakat üye olacak ve - nasıl düzenleneceğini öğrenecek zamanınız yoksa - not eklemeniz yeterlidir. - paragraph_2_html: |- - Sadece haritaya gidin ve not simgesine tıklayın: - . Bu, haritaya sürükleyerek taşıyabileceğiniz bir işaret imleci ekleyecektir. - Mesajınızı ekleyin, ardından kaydet'i tıklayın ve diğer - haritacılar yaptıklarınızı inceleyecektir. - fixthemap: - title: Sorun bildir / Haritayı onar - how_to_help: - title: Nasıl yardım edebilirim? - join_the_community: - title: Topluluğa katılın - explanation_html: |- - Harita verilerinde bir sorun fark ettiyseniz, örneğin bir yol veya adresinizin eksik olması gibi, - devam etmenin en iyi yolu OpenStreetMap topluluğuna katılmak ve verileri kendiniz eklemeniz veya düzeltmenizdir. - add_a_note: - instructions_html: |- - Sadece ikonuna tıklayın veya harita görünümü üzerinde aynı ikona tıklayın. - Bu haritaya daha sonra sürükleyerek taşıyabileceğiniz bir işaretleyici ekleyecek. Mesajınızı ekleyin ve kaydedin, diğer haritacılar bunu araştıracaklar. - other_concerns: - title: Diğer sorunlar - explanation_html: Verilerimizin nasıl kullanıldığı veya içeriği hakkında endişeleriniz - varsa lütfen daha fazla yasal bilgi için telif hakkı - sayfamıza başvurun veya ilgili OSMF - çalışma grubuyla iletişime geçin. - help_page: - title: Yardım Almak - introduction: |- - OpenStreetMap, proje hakkında bilgilenmek, soru sormak ve - soruları cevaplamak - ve haritalama konularını ortaklaşa tartışmak ve belgelemek için çeşitli kaynaklara sahiptir. - welcome: - url: /hoşgeldiniz - title: OSM'ye hoşgeldin! - description: OpenStreetMap temellerini öğrenmek için kısa bir kılavuz ile başla. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Tr:Beginners%27_guide - title: Yeni Başlayanlar Kılavuzu - description: Topluluk, yeni başlayanlar için rehberlik yapmaktadır. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Bir soru sor veya OSM'ın soru-ve-cevap sitesinde yanıtları ara. - mailing_lists: - title: E-Posta Listeleri - description: Oldukça geniş yerel veya bölgesel e-posta listelerinde soru sorabilir - veya ilginç konuları tartışabilirsiniz. - forums: - title: Forumlar - description: Duyuru panosu tarzındaki arayüzleri tercih edenler için sorular - ve tartışmalar. - irc: - title: IRC - description: Birçok dilde ve birçok konuda interaktif sohbet. - switch2osm: - title: switch2osm - description: OpenStreetMap tabanlı haritalara ve diğer hizmetlere geçiş yapan - şirketler ve kuruluşlar için yardım. - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Ayrıntılı OSM belgeleri için wiki'ye göz atın. - about_page: - next: Ä°leri - copyright_html: ©OpenStreetMap
        katkıda bulunanları - used_by: '%{name}, binlerce web sitesinde, mobil uygulamalarda ve donanım cihazlarında - verileri eşleştirir.' - lede_text: OpenStreetMap; tüm dünyada yollar, yollar, kafeler, tren istasyonları - ve daha pek çok şey hakkında veri sağlayan ve koruyan bir haritalar topluluğu - tarafından oluşturulmuştur. - local_knowledge_title: Yerel Bilgi - local_knowledge_html: |- - OpenStreetMap, piyasa bilgisi üzerinde durmaktadır. Katkıda bulunanlar, - OSM'nin doğru ve güncel olduğunu doğrulamak için havadan görüntüler, GPS cihazları ve düşük teknoloji alan haritaları kullanmaktadır. - community_driven_title: Katılım Kaynaklı - community_driven_html: |- - OpenStreetMap'ın topluluğu çeşitli ve tutkuludur ayrıca her geçen gün büyümektedir. - Katkıda bulunanların arasında hevesli haritacılar, CBS uzmanları, OSM sunucularını çalıştıran mühendisler, felaketten etkilenen alanlar için haritalama yapan yardımsever kişiler - ve çok daha fazlası yer alıyor. - Çok daha fazlası için - OpenStreetMap Blog, - kullanıcı günlükleri, - topluluk blogları, ve - OSM Foundation websitesine bakınız. - open_data_title: Açık Veri - open_data_html: |- - OpenStreetMap, açık veridir: OpenStreetMap ve katkıda bulunan - kişilere referans verdiğiniz sürece OpenStreetMap herhangi bir amaç için kullanabilirsiniz. - Verileri belirli şekillerde değiştirir veya üzerine inşa ederseniz sonucu sadece aynı lisansla dağıtabilirsiniz. Detaylı bilgi için Telif hakkı ve - Lisans sayfasına göz atınız. - legal_title: Yasal - legal_html: |- - Bu site ve diğer pek çok ilgili hizmet resmi olarak OpenStreetMap Vakfı (OSMF) tarafından topluluk adına işletilmektedir. OSMF tarafından işletilen tüm servislerin kullanımı Kabul Edilebilir Kullanım Politikaları ve Gizlilik Politikamızın konusudur. - Lisanslama, telif hakkı veya diğer yasal sorularınız ve sorunlarınız varsa lütfen OSMF ile iletişime geçin. - partners_title: Ortaklar notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user}, günlük bir girdi hakkında yorum yaptı.' @@ -1451,6 +1140,163 @@ tr: delete: deleted: Mesaj silindi site: + about: + next: Ä°leri + copyright_html: ©OpenStreetMap
        katkıda bulunanları + used_by: '%{name}, binlerce web sitesinde, mobil uygulamalarda ve donanım cihazlarında + verileri eşleştirir.' + lede_text: OpenStreetMap; tüm dünyada yollar, yollar, kafeler, tren istasyonları + ve daha pek çok şey hakkında veri sağlayan ve koruyan bir haritalar topluluğu + tarafından oluşturulmuştur. + local_knowledge_title: Yerel Bilgi + local_knowledge_html: |- + OpenStreetMap, piyasa bilgisi üzerinde durmaktadır. Katkıda bulunanlar, + OSM'nin doğru ve güncel olduğunu doğrulamak için havadan görüntüler, GPS cihazları ve düşük teknoloji alan haritaları kullanmaktadır. + community_driven_title: Katılım Kaynaklı + community_driven_html: |- + OpenStreetMap'ın topluluğu çeşitli ve tutkuludur ayrıca her geçen gün büyümektedir. + Katkıda bulunanların arasında hevesli haritacılar, CBS uzmanları, OSM sunucularını çalıştıran mühendisler, felaketten etkilenen alanlar için haritalama yapan yardımsever kişiler + ve çok daha fazlası yer alıyor. + Çok daha fazlası için + OpenStreetMap Blog, + kullanıcı günlükleri, + topluluk blogları, ve + OSM Foundation websitesine bakınız. + open_data_title: Açık Veri + open_data_html: |- + OpenStreetMap, açık veridir: OpenStreetMap ve katkıda bulunan + kişilere referans verdiğiniz sürece OpenStreetMap herhangi bir amaç için kullanabilirsiniz. + Verileri belirli şekillerde değiştirir veya üzerine inşa ederseniz sonucu sadece aynı lisansla dağıtabilirsiniz. Detaylı bilgi için Telif hakkı ve + Lisans sayfasına göz atınız. + legal_title: Yasal + legal_html: |- + Bu site ve diğer pek çok ilgili hizmet resmi olarak OpenStreetMap Vakfı (OSMF) tarafından topluluk adına işletilmektedir. OSMF tarafından işletilen tüm servislerin kullanımı Kabul Edilebilir Kullanım Politikaları ve Gizlilik Politikamızın konusudur. + Lisanslama, telif hakkı veya diğer yasal sorularınız ve sorunlarınız varsa lütfen OSMF ile iletişime geçin. + partners_title: Ortaklar + copyright: + foreign: + title: Bu çeviri hakkında + text: Tercüme edilmiş bu sayfa ile %{english_original_link} arasında meydana + gelebilecek herhangi bir uyuşmazlıkta sayfanın özgün dili olan Ä°ngilizce + bölümü önceliklidir. + english_link: Ä°ngilizce orijinal + native: + title: Sayfa hakkında + text: Telif hakkı sayfasının Ä°ngilizce sürümünü görüntülüyorsunuz. Bu sayfanın + %{native_link} ile geri gidebilir ya da telif hakkı ve %{mapping_link} hakkında + bilgi edinmek için sayfada kalabilirsiniz. + native_link: Türkçe sürümü + mapping_link: harita çizmeye başla + legal_babble: + title_html: Telif Hakkı ve Lisans + intro_1_html: |- + OpenStreetMap®, OpenStreetMap Foundation (OSMF) tarafından oluşturulan Open Data + Commons Open Database License (ODbL) ile lisanslandırılmıştır. + intro_2_html: |- + OpenStreetMap'e ve katkıda bulunanlarına değindiğiniz + sürece verilerimizi kopyalamak, dağıtmak, iletmek + ve uyarlamakta serbestsiniz. + Verilerimizi değiştirir veya geliştirirseniz, + sonucu sadece aynı lisans altında dağıtabilirsiniz. + Tüm yasal kod, haklarınızı ve sorumluluklarınızı açıklamaktadır. + intro_3_html: |- + Haritalarımızdaki haritacılık ve belgelerimiz, Creative + Commons Attribution-ShareAlike 2.0 lisansı (CC BY-SA) ile yetkilendirilmiştir. + credit_title_html: OpenStreetMap nasıl atıf edinir + credit_1_html: |- + Atıf şu şekilde yazmak gerekir: “© OpenStreetMap + katılımcıları”. + credit_2_html: |- + Ayrıca, verilerin Open Database License ve + haritalarımızdaki karoları kullanıyorsanız haritacılığımız + CC BY-SA ile lisanslandırıldığını açıkça belirtmelisiniz. + Bunu, bu telif hakkı sayfasına bağlantı vererek gerçekleştirebilirsiniz. + Alternatif ve bir gereksinim olarak, OSM'yi bir veri formunda dağıtıyorsanız direkt olarak lisansları adlandırabilir + veya doğrudan lisanslara bağlayabilirsiniz. Bağlantıların + mümkün olmadığı ortamlarda (örneğin basılı işler) + okuyucularınızı openstreetmap.org'a, opendatacommons.org'a + ve varsa creativecommons.org'a yönlendirmenizi + öneriyoruz. + credit_3_html: |- + Bir gezinebilir elektronik haritanın sağ alt köşesinde kredisi görünmesi lazım. + Örnegin: + attribution_example: + alt: Web sayfasıında OpenStreetMap atıf etmek için bir örnek + title: Atıf örneği + more_title_html: Daha fazlasını öğrenin + more_1_html: |- + Verilerimizi kullanma ve bizi nasıl referans verebileceğiniz hakkında daha fazla bilgi için OSMF Lisans sayfasına bakınız. + more_2_html: |- + OpenStreetMap açık veri olsa da, üçüncü taraflar + için ücretsiz bir harita API'ı sağlayamıyoruz. API Kullanım Politikası, + Karo Kullanım Politikası + ve Nominatim Kullanım Politikası sayfalarımıza bakınız. + contributors_title_html: Katkıcılarımız + contributors_intro_html: |- + Binlerce kişi projemize katkıda bulunmaktadır. Ulusal + haritalama ajanslarından ve diğer kaynaklardan + açık-lisanslı veriler de içeriyoruz: + contributors_at_html: |- + Avusturya: Stadt Wien (CC BY lisansı altında), + Land Vorarlberg ve + Land Tirol'dan (değişiklikleriyle CC BY AT lisansı altında) veriler içermektedir. + contributors_ca_html: "Kanada: GeoBase®, GeoGratis \n(© + Department of Natural\nResources Canada), CanVec (© Department of Natural\nResources + Canada) ve StatCan'den (Geography Division,\nStatistics Canada) veriler + içermektedir." + contributors_fi_html: |- + Finlandiya: National Land + Survey of Finland's Topographic Database + ve diğer veri setlerinden, NLSFI License altında, veriler içermektedir.. + contributors_fr_html: |- + Fransa: Direction Générale des Impôts'dan + veri içermektedir. + contributors_nl_html: |- + Hollanda: Contains © AND veri, 2007 + (www.and.com) + contributors_nz_html: 'Yeni Zelanda: Land Information New + Zealand''dan edinilen verileri içerir. Crown Copyright saklıdır.' + contributors_si_html: |- + Slovenya: Surveying and Mapping Authority ve + Ministry of Agriculture, Forestry and Food + (Slovenya'nın halka açık bilgileri) sayfalarından + edinilen verileri içermektedir. + contributors_za_html: |- + Güney Afrika: Chief Directorate: + National Geo-Spatial Information kaynaklı verileri içermektedir, Devlet telif hakkı saklıdır. + contributors_gb_html: |- + Birleşik Krallık: Contains Ordnance + Survey data © Crown copyright and database right + 2010-12. + contributors_footer_1_html: |- + OpenStreetMap'in geliştirilmesine yardımcı olmak için + bu ve diğer kaynaklar hakkında daha ayrıntılı bilgi almak için, + OpenStreetMap Wiki üzerinden Katkıda bulunan kullanıcılar sayfasına lütfen bakınız. + contributors_footer_2_html: |- + Verilerin OpenStreetMap'e dahil edilmesi, orijinal + veri sağlayıcının OpenStreetMap'i onayladığını, + herhangi bir garanti verdiğini ya da + herhangi bir yükümlülüğü kabul ettiğini ima etmez. + infringement_title_html: Telif hakkı ihlali + infringement_1_html: |- + OSM'ye katkıda bulunanların telif hakkı sahiplerinin + açık izni olmadan telif hakkıyla korunan kaynaklardan + (ör. Google Haritalar veya basılı haritalar) hiçbir zaman + veri eklememeleri hatırlatılır. + infringement_2_html: |- + Telif hakkıyla korunan materyalin + OpenStreetMap veritabanına veya bu siteye + yanlışlıkla eklendiğine inanıyorsanız kaldırma prosedürü sayfasına başvurun veya + doğrudan çevrimiçi dosyalama sayfamızda kayda geçirin. + trademarks_title_html: Ticari Markalar + trademarks_1_html: OpenStreetMap, büyüteç logosu ve State of the Map; OpenStreetMap + Foundation'ın tescilli ticari markalarıdır. Markaların kullanımı ile ilgili + sorularınız varsa lütfen sorularınızı Lisans + Çalışma Grubu'na gönderiniz index: js_1: JavaScript desteklemeyen bir tarayıcı kullanıyorsunuz ya da JavaScript devre dışı bırakılmış. @@ -1484,6 +1330,113 @@ tr: id_not_configured: iD yapılandırılmamış no_iframe_support: Bu özelliği görüntülemek için gerekli olan HTML iframe tarayıcınız desteklemiyor. + export: + title: Dışa aktar + area_to_export: Çıkartılacak alan + manually_select: Fare kullanarak farklı bir alan seç + format_to_export: Çıkartma biçimi + osm_xml_data: OpenStreetMap XML Veri + map_image: Harita (varsayılan katmanı gösterir) + embeddable_html: Gömülebilir HTML + licence: Lisans + export_details: OpenStreetMap verileri, Open + Data Commons Open Database License (ODbL) altında lisanslanmıştır. + too_large: + advice: 'Yukarıdaki dışa aktarım başarısız olursa, lütfen aşağıdaki kaynaklardan + birini kullanmayı düşünün:' + body: Bu alan OpenStreetMap XML verisi olarak verilmesine kadar büyüktür. + Lütfen yakınlaştır veya daha küçük bir alan seç ya da aşağıdaki verilen + diğer kaynakları kullan. + planet: + title: OSM Gezegeni + description: Tam OpenStreetMap veritabanının düzenli güncellenen kopyası + overpass: + title: Overpass API + description: Bu karakter kutusunu OpenStreetMap veritabanının alternatif + bir bağlantısını kullanarak indirin + geofabrik: + title: Geofabrik Ä°ndirmeleri + description: Kıtalar, ülkeler ve seçilen şehirlerin düzenli olarak güncellenen + özetleri + metro: + title: Büyükşehir Çıktıları + description: Büyükşehir ile banliyölerin çıktıkları + other: + title: Diğer Kaynaklar + description: OpenStreetMap vikisinde listelenen ek kaynaklar + options: Seçenekler + format: Biçim + scale: Ölçek + max: maks. + image_size: Resim Boyutu + zoom: Yakınlaştır + add_marker: Haritaya bir işaret ekle + latitude: 'Enlem:' + longitude: 'Boylam:' + output: Çıktı + paste_html: Yukarıdaki HTML kodu kopyalayıp websitesinde yapıştırabilir + export_button: Çıkart + fixthemap: + title: Sorun bildir / Haritayı onar + how_to_help: + title: Nasıl yardım edebilirim? + join_the_community: + title: Topluluğa katılın + explanation_html: |- + Harita verilerinde bir sorun fark ettiyseniz, örneğin bir yol veya adresinizin eksik olması gibi, + devam etmenin en iyi yolu OpenStreetMap topluluğuna katılmak ve verileri kendiniz eklemeniz veya düzeltmenizdir. + add_a_note: + instructions_html: |- + Sadece ikonuna tıklayın veya harita görünümü üzerinde aynı ikona tıklayın. + Bu haritaya daha sonra sürükleyerek taşıyabileceğiniz bir işaretleyici ekleyecek. Mesajınızı ekleyin ve kaydedin, diğer haritacılar bunu araştıracaklar. + other_concerns: + title: Diğer sorunlar + explanation_html: Verilerimizin nasıl kullanıldığı veya içeriği hakkında endişeleriniz + varsa lütfen daha fazla yasal bilgi için telif hakkı + sayfamıza başvurun veya ilgili OSMF + çalışma grubuyla iletişime geçin. + help: + title: Yardım Almak + introduction: |- + OpenStreetMap, proje hakkında bilgilenmek, soru sormak ve + soruları cevaplamak + ve haritalama konularını ortaklaşa tartışmak ve belgelemek için çeşitli kaynaklara sahiptir. + welcome: + url: /hoşgeldiniz + title: OSM'ye hoşgeldin! + description: OpenStreetMap temellerini öğrenmek için kısa bir kılavuz ile + başla. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Tr:Beginners%27_guide + title: Yeni Başlayanlar Kılavuzu + description: Topluluk, yeni başlayanlar için rehberlik yapmaktadır. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Bir soru sor veya OSM'ın soru-ve-cevap sitesinde yanıtları ara. + mailing_lists: + url: http://lists.openstreetmap.org/ + title: E-Posta Listeleri + description: Oldukça geniş yerel veya bölgesel e-posta listelerinde soru sorabilir + veya ilginç konuları tartışabilirsiniz. + forums: + url: http://forum.openstreetmap.org/ + title: Forumlar + description: Duyuru panosu tarzındaki arayüzleri tercih edenler için sorular + ve tartışmalar. + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: Birçok dilde ve birçok konuda interaktif sohbet. + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: OpenStreetMap tabanlı haritalara ve diğer hizmetlere geçiş yapan + şirketler ve kuruluşlar için yardım. + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Ayrıntılı OSM belgeleri için wiki'ye göz atın. sidebar: search_results: Arama Sonuçları close: Kapat @@ -1584,6 +1537,59 @@ tr: image: Görsel alt: Alt metin url: URL + welcome: + title: Hoş geldiniz! + introduction_html: Dünyanın düzenlenebilir ve ücretsiz haritası OpenStreetMap'e + hoş geldiniz. Şu an kaydoldunuz ve bütün haritalama işlemlerine başlamanız + için her şey hazır. İşte bilmeniz gereken en önemli şeylerin hızlı bir kılavuzu. + whats_on_the_map: + title: Haritada ne bulunur + on_html: OpenStreetMap, gerçek ve güncel şeyleri haritalamak için + bir yerdir. Bu milyonlarca binaları, yolları ve yerler hakkında diğer ayrıntıları + içerir. Ä°lgini çeken her türlü gerçek dünya özelliklerini haritalayabilirsin. + off_html: Neyi içermez? Ön yargılı veriler gibi değerlendirmeler, + tarihî ya da farazi özellikler ve telif hakkı olan kaynaklardan gelen verileri + içermez. Özel izniniz yoksa, çevrim içi ya da kağıt haritaları + kopyalamayın. + basic_terms: + title: Haritacılığın temel terimleri + paragraph_1_html: OpenStreetMap'in kendine ait bazı argoları vardır. İşte + kullanışlı gelecek birkaç anahtar kelime. + editor_html: Düzenleyici haritayı düzenlemek için kullanabileceğiniz + bir program ya da web sayfasıdır. + node_html: Düğüm, haritadaki bir noktadır. Bu bir restoran + ya da bir ağaç olabilir. + way_html: Yol, bir çizgi ya da alan, bir cadde, akarsu, göl + ya da bina olabilir. + tag_html: Etiket, bir düğümün ya da yolun veri parçasıdır. + Bu bir restoranın ismi ya da yolun hız sınırı olabilir. + rules: + title: Kuralları! + paragraph_1_html: |- + OpenStreetMap'in resmi kuralları yoktur ancak tüm katılımcıların + toplulukla işbirliği yapmasını ve iletişim kurmasını bekleriz. + Elle düzenleme dışında herhangi bir faaliyet düşünüyorsanız, + lütfen yönergeleri okuyun ve uygulayın: + İçe aktarma ve + Otomatik Düzenlemeler + questions: + title: Sorularınız var mı? + paragraph_1_html: OpenStreetMap, proje hakkında bilgiler içeren, soru sormak + ve soruları cevaplamak için ve işbirliği halinde tartışma yapılan ve haritalama + konularını belgelemek için çeşitli kaynaklara sahiptir. Buradan + yardım alın. + start_mapping: Harita çizmeye başla + add_a_note: + title: Düzenlemek için vaktin yok mu? O zaman bir not ekle! + paragraph_1_html: |- + Küçük bir değişikliğin sabit kalmasını istiyor fakat üye olacak ve + nasıl düzenleneceğini öğrenecek zamanınız yoksa + not eklemeniz yeterlidir. + paragraph_2_html: |- + Sadece haritaya gidin ve not simgesine tıklayın: + . Bu, haritaya sürükleyerek taşıyabileceğiniz bir işaret imleci ekleyecektir. + Mesajınızı ekleyin, ardından kaydet'i tıklayın ve diğer + haritacılar yaptıklarınızı inceleyecektir. trace: visibility: private: Kişiye özel (sadece anonim ve sıralanmamış noktalar olarak paylaşılır) @@ -1711,7 +1717,7 @@ tr: görüntülemek için lütfen web arayüzüne giriş yapın. Kabul etmeniz gerekmiyor ancak bunları görmeniz gerekiyor. oauth: - oauthorize: + authorize: title: Hesabınıza erişimi yetkilendirin request_access: '%{app_name} uygulaması hesabınıza, %{user}, erişim izni istiyor. Lütfen uygulamanın aşağıdaki özelliklere sahip olmasını isteyip istemediğinizi @@ -1725,11 +1731,11 @@ tr: allow_write_gpx: GPS izlerini yükleme. allow_write_notes: notları değiştirme. grant_access: Erişim izni ver - oauthorize_success: + authorize_success: title: Erişim isteğine izin verildi allowed: '%{app_name} uygulamasının hesabınıza erişimine izin verdiniz.' verification: Doğrulama kodu %{code}. - oauthorize_failure: + authorize_failure: title: Yetkilendirme isteği başarısız oldu denied: '%{app_name} uygulamasının hesabınıza erişmesini engellediniz.' invalid: Yetkilendirme özelliği geçerli değil. @@ -2168,7 +2174,7 @@ tr: confirm: Onayla fail: '%{name} kullanıcısından %{role} görevi alma işlemi başarısız oldu. Lütfen, hem kullanıcının hem görevin geçerli olduğunu kontrol edin.' - user_block: + user_blocks: model: non_moderator_update: Engelleme yapmak ya da engellemeyi güncellemek için bir moderatöre ihtiyaç duyulmaktadır. @@ -2231,20 +2237,6 @@ tr: period: one: 1 saat other: '%{count} saat' - partial: - show: Göster - edit: Düzenle - revoke: Ä°ptal! - confirm: Emin misin? - display_name: Engellenmiş kullanıcı - creator_name: Oluşturan - reason: Engelleme sebebi - status: Durum - revoker_name: Ä°ptal eden - not_revoked: (iptal edilmemiş) - showing_page: Sayfa %{page} - next: Sonraki » - previous: « Önceki helper: time_future: '%{time} içinde bitecek.' until_login: Kullanıcı giriş yapana kadar aktif. @@ -2274,8 +2266,22 @@ tr: back: Tüm engellemeleri göster revoker: 'Geri alan:' needs_view: Engel kaldırılmadan önce kullanıcının giriş yapması gerekiyor. - note: - description: + block: + not_revoked: (iptal edilmemiş) + show: Göster + edit: Düzenle + revoke: Ä°ptal! + blocks: + display_name: Engellenmiş kullanıcı + creator_name: Oluşturan + reason: Engelleme sebebi + status: Durum + revoker_name: Ä°ptal eden + showing_page: Sayfa %{page} + next: Sonraki » + previous: « Önceki + notes: + comment: opened_at_html: '%{when} önce oluşturuldu' opened_at_by_html: '%{when} önce %{user} tarafından oluşturuldu' commented_at_html: '%{when} önce güncellendi' @@ -2452,7 +2458,7 @@ tr: show_address: Adresi göster query_features: Özellikleri göster centre_map: Haritayı buraya ortala - redaction: + redactions: edit: description: Açıklama heading: Redaksiyonu düzenle diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 31d80c0f1..83ce87ac5 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -7,6 +7,7 @@ # Author: Andriykopanytsia # Author: Andygol # Author: Arturyatsko +# Author: Avatar6 # Author: Base # Author: Choomaq # Author: Dim Grits @@ -365,52 +366,6 @@ uk: ago: '%{ago} тому' newer_comments: Нові коментарі older_comments: Більш старі коментарі - export: - title: Експорт - start: - area_to_export: Ділянка для експорту - manually_select: Виділіть іншу ділянку - format_to_export: Формат експорту - osm_xml_data: Дані OpenStreetMap XML - map_image: Зображення мапи (показує стандартний шар) - embeddable_html: Вбудований HTML - licence: Ліцензія - export_details: Дані OpenStreetMap ліцензуються на умовах Ліцензії - Open Data Commons Open Database License (ODbL). - too_large: - advice: 'Якщо даний експорт не вдався, по можливості використайте одне з перелічених - джерел:' - body: 'Ця ділянка дуже велика для експорту у вигляді XML-даних OpenStreetMap. - Будь ласка наблизьтесь або виберіть меншу ділянку, або скористайтеся одним - з наступних джерел для завантаження великого обсягу даних:' - planet: - title: Планета OSM - description: Регулярно оновлювані копії усієї бази даних OpenStreetMap - overpass: - title: Overpass API - description: Завантажити дані з габаритного прямокутника з дзеркала бази - даних OpenStreetMap - geofabrik: - title: Завантаження Geofabrik - description: Регулярно оновлювані вибірки континентів, країн і деяких міст - metro: - title: Mегаполіси - description: Вибірки даних для великих міст світу і прилеглих до них територій - other: - title: Інші джерела - description: Додаткові джерела перераховані у вікі OpenStreetMap - options: Опції - format: 'Формат:' - scale: Масштаб - max: макс. - image_size: 'Розмір зображення:' - zoom: Збільшити - add_marker: Додати маркер на мапу - latitude: 'Шир.:' - longitude: 'Довг.:' - output: Результат - paste_html: HTML-код для вбудовування до сайту - export_button: Експортувати geocoder: search: title: @@ -983,248 +938,6 @@ uk: text: Підтримайте проект learn_more: Дізнатись більше more: Більше - license_page: - foreign: - title: Про цей переклад - text: У разі суперечностей між цим перекладом та %{english_original_link}, оригінал - англійською має перевагу. - english_link: оригіналом англійською - native: - title: Про цю сторінку - text: Ви переглядаєте англійську версію сторінки авторських прав. Ви можете - повернутись до %{native_link} цієї сторінки або можете не читати про авторські - права та %{mapping_link}. - native_link: української версії - mapping_link: почати створення мапи - legal_babble: - title_html: Авторські права та ліцензування - intro_1_html: |- - Дані OpenStreetMap® є відкритими даними, що ліцензуються OpenStreetMap Foundation (OSMF) на - умовах Ліцензії Open Data Commons Open Database License (ODbL). - intro_2_html: Ви можете вільно копіювати, поширювати, передавати й змінювати - наші дані, посилаючись при цьому на OpenStreetMap та спільноту. Якщо ви змінюєте - наші дані чи створюєте на їх основі свої, ви повинні розповсюджувати результати - під такою ж Ліцензією. Повний чинний - текст Ліцензії пояснює ваші права та обов’язки. - intro_3_html: "Мапи в графічному вигляді, а також документація розповсюджуються - на умовах Ліцензії - Creative \nCommons Attribution-ShareAlike 2.0 (CC-BY-SA)." - credit_title_html: Як вказати посилання на OpenStreetMap - credit_1_html: Ми вимагаємо, щоб ви зазначали “© OpenStreetMap contributors”. - credit_2_html: Ви повинні також чітко вказувати, що дані доступні на умовах - ліцензії Open Database License, а у разі, коли ви використовуєте графічні - мапи з нашого сервера, на них розповсюджуються умови CC-BY-SA. Ви можете зробити - це, навівши посилання на цю - сторінку з роз’ясненням ліцензійних вимог. Або ж, для виконання наших - вимог під час розповсюдження даних OSM, ви можете безпосередньо вказувати - назву ліцензії(й) та посилання на її(їх) текст. Якщо ви користуєтесь носіями, - де використання гіпертекстових посилань неможливе (наприклад друковані матеріали), - ми пропонуємо посилатися безпосередньо на www.openstreetmap.org (або розширено - "www.openstreetmap.org, OpenStreetMap"), opendatacommons.org, а якщо треба, - і на creativecommons.org. - credit_3_html: |- - Для електронних мап, згадка про джерело даних повинна знаходитись у кутку мапи. - Наприклад: - attribution_example: - alt: Приклад того, як треба посилатись на OpenStreetMap на веб-сторінці - title: Приклад зазначення авторства - more_title_html: Дізнатися більше - more_1_html: Дізнайтеся більше про використання наших даних та про те, як посилатися - на нас як на джерело, на сторінці - ліцензії OSMF та у відповідях - спільноти щодо правових питань. - more_2_html: Хоча дані OpenStreetMap є відкритими, ми не в змозі надавати безкоштовний - API для сторонніх розробників. Ознайомтесь із нашими Правилами - використання API, Правилами - використання графічних мап та Правилами - використання сервісу Nominatim. - contributors_title_html: Наші учасники - contributors_intro_html: 'Нашими учасниками є тисячі людей. Ми також включаємо - дані від національних картографічних агенцій, які розповсюджуються на умовах - відкритих ліцензій, серед них:' - contributors_at_html: |- - Австрія: дані від - Stadt Wien (на умовах ліцензії - CC BY), Land Vorarlberg та Земля Тіроль (на умовах CC-BY AT з виправленнями). - contributors_ca_html: 'Канада: дані від GeoBase®, GeoGratis - (© Департамент природних ресурсів Канади), CanVec (© Департамент - природних ресурсів Канади), та StatCan (Відділ Географії, Статистичне відомство - Канади).' - contributors_fi_html: |- - Фінляндія: містить дані з топографічної бази даних Національної земельної служби Фінляндії та інші набори даних на умовах ліцензії - NLSFI. - contributors_fr_html: 'Франція: Дані отримані від Direction - Générale des Impôts (Генеральне управління з оподаткування).' - contributors_nl_html: "Нідерланди: Дані від © AND, 2007 - \n (www.and.com)" - contributors_nz_html: 'Нова Зеландія: дані отримані з інформації - про земельні ресурси Нової Зеландії. Crown Copyright reserved.' - contributors_si_html: 'Словенія: містить дані Управління - Геодезії і картографії та Міністерства - сільського і лісового господарства та продовольства (публічна інформація - Словенії).' - contributors_za_html: "Південна Африка: Містить дані з \n Chief Directorate:\n National Geo-Spatial - Information, State copyright reserved." - contributors_gb_html: 'Сполучене Королівство Великобританії: - дані Ordnance Survey © Crown copyright and database right 2012.' - contributors_footer_1_html: Щоб отримати більш докладну інформацію про ці та - інші джерела, що були використані для покращення мапи OpenStreetMap, будь - ласка, перегляньте сторінку Учасники - OpenStreetMap Вікі. - contributors_footer_2_html: |2- - Включення даних до OpenStreetMap не означає, що постачальник - цих даних якимось чином підтримує OpenStreetMap, надає - які-небудь гарантії чи бере на себе якусь відповідальність. - infringement_title_html: Порушення авторських прав - infringement_1_html: Члени спільноти OSM повинні завжди пам’ятати про те, що - забороняється додавати дані з будь-яких захищених авторським правом джерел - (наприклад, з Google Maps чи з друкованих мап) без отримання попереднього - дозволу правовласників. - infringement_2_html: Якщо ви вважаєте, що захищений авторським правом матеріал - був недоречно доданий до бази даних OpenStreetMap або до цього сайту, ознайомтесь - із нашим порядком - з вилучення таких даних або скористуйтесь безпосередньо нашою сторінкою - для онлайн звернень. - trademarks_title_html: Торгові марки - trademarks_1_html: OpenStreetMap і логотип з лупою є зареєстрованими торговими - марками OpenStreetMap Foundation. Якщо у Вас є запитання щодо використання - Вами цих марок. будь ласка, надсилайте свої запитання до Licence - Working Group. - welcome_page: - title: Ласкаво просимо! - introduction_html: Ласкаво просимо до OpenStreetMap, безкоштовної та доступної - для редагування мапи світу. Тепер, коли ви увійшли, все готово для початку редагування. - Ось короткий посібник з найважливішими речами, які ви повинні знати. - whats_on_the_map: - title: Що на мапі - on_html: |- - На мапі OpenStreetMap розташовані об’єкти, які існують в поточний момент — тобто, це - мільйони будинків, доріг та інших елементів місцевості. Ви можете наносити на мапу будь-які об’єкти навколишнього світу, цікаві для вас. - off_html: Мапа не включає суб’єктивні дані на кшталт оцінок, історичних - або гіпотетичних характеристик та дані з джерел, які захищені авторським правом. - Якщо ви не маєте спеціального дозволу, не копіюйте з паперових мап або з мап - в інтернеті. - basic_terms: - title: Основні Терміни Для Картографування - paragraph_1_html: OpenStreetMap має власну термінологію. Ось кілька важливих - слів, які можуть знадобитися. - editor_html: Редактор — це програма або веб-сайт, який можна - використовувати для редагування мапи. - node_html: Точка — це позначка на мапі, на кшталт ресторану - або дерева. - way_html: Лінія — це відкрита або замкнена ламана на кшталт - дороги, струмка, озера або будівлі. - tag_html: Теґ — одиниця опису точки чи лінії на кшталт назви - ресторану або обмеження швидкості на дорозі. - rules: - title: Правила! - paragraph_1_html: "В OpenStreetMap є кілька формальних правил, але ми сподіваємось, - що всі учасники співпрацюватимуть зі спільнотою. Якщо ви плануєте заходи, - окрім ручного внесення даних, будь ласка, прочитайте та дотримуйтесь наступних - настанов з \nІмпорту - даних та \nАвтоматичного - редагування." - questions: - title: Є питання? - paragraph_1_html: |- - OpenStreetMap має різні ресурси для отримання інформації про проект, щоб поставити питання та отримати відповідь, для спільного обговорення і створення документації з картографування. - Отримайте допомогу тут. - start_mapping: Розпочати картографування - add_a_note: - title: Немає часу, щоб виправити мапу? Додайте нотатку! - paragraph_1_html: Якщо потрібно внести дрібне уточнення, заради якого немає - потреби витрачати час на реєстрацію та вивчення правил редагування, то можна - просто додати нотатку. - paragraph_2_html: |- - Перейдіть до мапи та натисніть піктограму нотатки: - . Це дозволить додати маркер на мапу, який ви зможете перетягнути мишею. Додайте ваше повідомлення, натисніть „зберегти“, і інші учасники побачать його та, у разі потреби, внесуть зміни на мапу. - fixthemap: - title: Повідомити про проблему / Виправити мапу - how_to_help: - title: Як допомогти - join_the_community: - title: Приєднатися до спільноти - explanation_html: Якщо ви помітили, неточності в наших картографічних даних, - наприклад відсутня дорога або ваша адреса, найкращий спосіб це виправити — - приєднатись до спільноти OpenStreetMap і додати або виправити дані самостійно. - add_a_note: - instructions_html: |- - Просто натисніть або подібну піктограму на мапі. - У результаті, на мапі з'явиться маркер, який Ви зможете перетягувати на мапі. Додайте Ваше повідомлення, а потім натисніть кнопку Зберегти, і інші учасники матимуть змогу з цим розібратись. - other_concerns: - title: Інші проблеми - explanation_html: |- - Якщо ви занепокоєні тим, як наші дані використовуються або їх вмістом, зверніться до нашої - сторінки авторських прав для отримання правової інформації, або зв’яжіться з відповідною - робочою групою OSMF. - help_page: - title: Отримання довідки - introduction: OpenStreetMap має різні ресурси для отримання інформації про проект, - щоб поставити питання та отримати відповідь, для спільного обговорення і створення - документації з картографування. - welcome: - url: /welcome - title: Ласкаво просимо до OSM - description: Розпочніть з цього короткого посібника, що охоплює основи OpenStreetMap. - beginners_guide: - url: http://wiki.openstreetmap.org/wiki/Uk:Beginners%27_guide - title: Посібник новачка - description: Посібник для новачків від спільноти. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Поставте запитання або знайдіть відповіді на сайті OSM питання-відповідь. - mailing_lists: - title: Списки розсилки - description: Поставте запитання або обговоріть цікаві речі у широкому виборі - тематичних або регіональних списків розсилки. - forums: - title: Форуми - description: Запитання та обговорення для тих, хто віддає перевагу інтерфейсу - дошки обговорень. - irc: - title: IRC - description: Інтерактивний чат багатьма мовами на багато тем. - switch2osm: - title: switch2osm - description: Допомога компаніям та організаціям, які переходять на карти та - інші послуги OpenStreetMap. - wiki: - url: http://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: Перегляньте вікі щоб отримати докладу OSM документацію. - about_page: - next: Далі - copyright_html: ©Ð£Ñ‡Ð°ÑÐ½Ð¸ÐºÐ¸
        OpenStreetMap - used_by: '%{name} надає картографічні дані для тисяч веб-сайтів, мобільних застосунків - та різних пристроїв' - lede_text: OpenStreetMap створений спільнотою маперів, які вносять і підтримують - дані про дороги, стежки, кав’ярні, вокзали і багато чого іншого по всьому світу. - local_knowledge_title: Знання місцевості - local_knowledge_html: OpenStreetMap надає виразності місцевим даним. Мапери використовують - аерофотознімки, GPS пристрої та прості створені на місцевості схеми для перевірки - точності та актуальності даних OSM. - community_driven_title: Керується спільнотою - community_driven_html: |- - Спільнота OpenStreetMap — різноманітна, затята і щоденно зростаюча. Серед наших учасників є мапери ентузіасти, фахівці ГІС, інженери що підтримують роботу серверів OSM, фахівці, які із гуманістичних причин, допомагають в картографуванні районів, постраждалих від стихійного лиха, і багато інших. - Щоб дізнатися більше про спільноту, подивіться щоденники користувачів - блоги спільноти і сайт фундації OSM. - open_data_title: Відкриті дані - open_data_html: |- - OpenStreetMap — це відкриті дані: Ви можете вільно використовувати їх для будь-яких цілей доти, поки посилаєтесь OpenStreetMap та його учасників. Якщо Ви змінюєте дані або на основі даних будуєте певним чином власні, Ви можете розповсюджувати результат лише під тією самою ліцензією. Дивіться сторінку «Авторські права і - ліцензії», щоб отримати докладну інформацію. - legal_title: Правова інформація - legal_html: "Цей сайт та багато інших повʼязаних сервісів формально керуються - \nOpenStreetMap Foundation (OSMF) \nвід - імені спільноти. Використання усіх сервісів, підконтрольних OSMF, здійснюється - на основі \nПравил - щодо прийнятного використання та нашій Політиці - конфіденційності.\n
        \nБудь ласка, звʼяжіться - з OSMF, \nякщо у Вас є питання чи проблеми щодо ліцензування, авторських - прав та інших юридичних питань." - partners_title: Партнери notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} залишив коментар у вашому щоденнику' @@ -1416,6 +1129,147 @@ uk: delete: deleted: Повідомлення вилучено site: + about: + next: Далі + copyright_html: ©Ð£Ñ‡Ð°ÑÐ½Ð¸ÐºÐ¸
        OpenStreetMap + used_by: '%{name} надає картографічні дані для тисяч веб-сайтів, мобільних застосунків + та різних пристроїв' + lede_text: OpenStreetMap створений спільнотою маперів, які вносять і підтримують + дані про дороги, стежки, кав’ярні, вокзали і багато чого іншого по всьому + світу. + local_knowledge_title: Знання місцевості + local_knowledge_html: OpenStreetMap надає виразності місцевим даним. Мапери + використовують аерофотознімки, GPS пристрої та прості створені на місцевості + схеми для перевірки точності та актуальності даних OSM. + community_driven_title: Керується спільнотою + community_driven_html: |- + Спільнота OpenStreetMap — різноманітна, затята і щоденно зростаюча. Серед наших учасників є мапери ентузіасти, фахівці ГІС, інженери що підтримують роботу серверів OSM, фахівці, які із гуманістичних причин, допомагають в картографуванні районів, постраждалих від стихійного лиха, і багато інших. + Щоб дізнатися більше про спільноту, подивіться щоденники користувачів + блоги спільноти і сайт фундації OSM. + open_data_title: Відкриті дані + open_data_html: |- + OpenStreetMap — це відкриті дані: Ви можете вільно використовувати їх для будь-яких цілей доти, поки посилаєтесь OpenStreetMap та його учасників. Якщо Ви змінюєте дані або на основі даних будуєте певним чином власні, Ви можете розповсюджувати результат лише під тією самою ліцензією. Дивіться сторінку «Авторські права і + ліцензії», щоб отримати докладну інформацію. + legal_title: Правова інформація + legal_html: "Цей сайт та багато інших повʼязаних сервісів формально керуються + \nOpenStreetMap Foundation (OSMF) + \nвід імені спільноти. Використання усіх сервісів, підконтрольних OSMF, здійснюється + на основі \nПравил + щодо прийнятного використання та нашій Політиці + конфіденційності.\n
        \nБудь ласка, звʼяжіться + з OSMF, \nякщо у Вас є питання чи проблеми щодо ліцензування, авторських + прав та інших юридичних питань." + partners_title: Партнери + copyright: + foreign: + title: Про цей переклад + text: У разі суперечностей між цим перекладом та %{english_original_link}, + оригінал англійською має перевагу. + english_link: оригіналом англійською + native: + title: Про цю сторінку + text: Ви переглядаєте англійську версію сторінки авторських прав. Ви можете + повернутись до %{native_link} цієї сторінки або можете не читати про авторські + права та %{mapping_link}. + native_link: української версії + mapping_link: почати створення мапи + legal_babble: + title_html: Авторські права та ліцензування + intro_1_html: |- + Дані OpenStreetMap® є відкритими даними, що ліцензуються OpenStreetMap Foundation (OSMF) на + умовах Ліцензії Open Data Commons Open Database License (ODbL). + intro_2_html: Ви можете вільно копіювати, поширювати, передавати й змінювати + наші дані, посилаючись при цьому на OpenStreetMap та спільноту. Якщо ви + змінюєте наші дані чи створюєте на їх основі свої, ви повинні розповсюджувати + результати під такою ж Ліцензією. Повний чинний + текст Ліцензії пояснює ваші права та обов’язки. + intro_3_html: "Мапи в графічному вигляді, а також документація розповсюджуються + на умовах Ліцензії + Creative \nCommons Attribution-ShareAlike 2.0 (CC-BY-SA)." + credit_title_html: Як вказати посилання на OpenStreetMap + credit_1_html: Ми вимагаємо, щоб ви зазначали “© OpenStreetMap + contributors”. + credit_2_html: Ви повинні також чітко вказувати, що дані доступні на умовах + ліцензії Open Database License, а у разі, коли ви використовуєте графічні + мапи з нашого сервера, на них розповсюджуються умови CC-BY-SA. Ви можете + зробити це, навівши посилання на цю + сторінку з роз’ясненням ліцензійних вимог. Або ж, для виконання наших + вимог під час розповсюдження даних OSM, ви можете безпосередньо вказувати + назву ліцензії(й) та посилання на її(їх) текст. Якщо ви користуєтесь носіями, + де використання гіпертекстових посилань неможливе (наприклад друковані матеріали), + ми пропонуємо посилатися безпосередньо на www.openstreetmap.org (або розширено + "www.openstreetmap.org, OpenStreetMap"), opendatacommons.org, а якщо треба, + і на creativecommons.org. + credit_3_html: |- + Для електронних мап, згадка про джерело даних повинна знаходитись у кутку мапи. + Наприклад: + attribution_example: + alt: Приклад того, як треба посилатись на OpenStreetMap на веб-сторінці + title: Приклад зазначення авторства + more_title_html: Дізнатися більше + more_1_html: Дізнайтеся більше про використання наших даних та про те, як + посилатися на нас як на джерело, на сторінці + ліцензії OSMF та у відповідях + спільноти щодо правових питань. + more_2_html: Хоча дані OpenStreetMap є відкритими, ми не в змозі надавати + безкоштовний API для сторонніх розробників. Ознайомтесь із нашими Правилами + використання API, Правилами + використання графічних мап та Правилами + використання сервісу Nominatim. + contributors_title_html: Наші учасники + contributors_intro_html: 'Нашими учасниками є тисячі людей. Ми також включаємо + дані від національних картографічних агенцій, які розповсюджуються на умовах + відкритих ліцензій, серед них:' + contributors_at_html: |- + Австрія: дані від + Stadt Wien (на умовах ліцензії + CC BY), Land Vorarlberg та Земля Тіроль (на умовах CC-BY AT з виправленнями). + contributors_ca_html: 'Канада: дані від GeoBase®, GeoGratis + (© Департамент природних ресурсів Канади), CanVec (© Департамент + природних ресурсів Канади), та StatCan (Відділ Географії, Статистичне відомство + Канади).' + contributors_fi_html: |- + Фінляндія: містить дані з топографічної бази даних Національної земельної служби Фінляндії та інші набори даних на умовах ліцензії + NLSFI. + contributors_fr_html: 'Франція: Дані отримані від Direction + Générale des Impôts (Генеральне управління з оподаткування).' + contributors_nl_html: "Нідерланди: Дані від © AND, 2007 + \n (www.and.com)" + contributors_nz_html: 'Нова Зеландія: дані отримані з інформації + про земельні ресурси Нової Зеландії. Crown Copyright reserved.' + contributors_si_html: 'Словенія: містить дані Управління + Геодезії і картографії та Міністерства + сільського і лісового господарства та продовольства (публічна інформація + Словенії).' + contributors_za_html: "Південна Африка: Містить дані з \n + \ Chief Directorate:\n National Geo-Spatial + Information, State copyright reserved." + contributors_gb_html: 'Сполучене Королівство Великобританії: + дані Ordnance Survey © Crown copyright and database right 2012.' + contributors_footer_1_html: Щоб отримати більш докладну інформацію про ці + та інші джерела, що були використані для покращення мапи OpenStreetMap, + будь ласка, перегляньте сторінку Учасники + OpenStreetMap Вікі. + contributors_footer_2_html: |2- + Включення даних до OpenStreetMap не означає, що постачальник + цих даних якимось чином підтримує OpenStreetMap, надає + які-небудь гарантії чи бере на себе якусь відповідальність. + infringement_title_html: Порушення авторських прав + infringement_1_html: Члени спільноти OSM повинні завжди пам’ятати про те, + що забороняється додавати дані з будь-яких захищених авторським правом джерел + (наприклад, з Google Maps чи з друкованих мап) без отримання попереднього + дозволу правовласників. + infringement_2_html: Якщо ви вважаєте, що захищений авторським правом матеріал + був недоречно доданий до бази даних OpenStreetMap або до цього сайту, ознайомтесь + із нашим порядком + з вилучення таких даних або скористуйтесь безпосередньо нашою сторінкою + для онлайн звернень. + trademarks_title_html: Торгові марки + trademarks_1_html: OpenStreetMap і логотип з лупою є зареєстрованими торговими + марками OpenStreetMap Foundation. Якщо у Вас є запитання щодо використання + Вами цих марок. будь ласка, надсилайте свої запитання до Licence + Working Group. index: js_1: Ви користуєтесь оглядачем, в якому не підтримується або відключений JavaScript. js_2: OpenStreetMap використовує JavaScript для мапи. @@ -1446,6 +1300,106 @@ uk: id_not_configured: iD не був налаштований no_iframe_support: Ваш оглядач не підтримує фрейми HTML, які необхідні для цієї функції. + export: + title: Експорт + area_to_export: Ділянка для експорту + manually_select: Виділіть іншу ділянку + format_to_export: Формат експорту + osm_xml_data: Дані OpenStreetMap XML + map_image: Зображення мапи (показує стандартний шар) + embeddable_html: Вбудований HTML + licence: Ліцензія + export_details: Дані OpenStreetMap ліцензуються на умовах Ліцензії + Open Data Commons Open Database License (ODbL). + too_large: + advice: 'Якщо даний експорт не вдався, по можливості використайте одне з перелічених + джерел:' + body: 'Ця ділянка дуже велика для експорту у вигляді XML-даних OpenStreetMap. + Будь ласка наблизьтесь або виберіть меншу ділянку, або скористайтеся одним + з наступних джерел для завантаження великого обсягу даних:' + planet: + title: Планета OSM + description: Регулярно оновлювані копії усієї бази даних OpenStreetMap + overpass: + title: Overpass API + description: Завантажити дані з габаритного прямокутника з дзеркала бази + даних OpenStreetMap + geofabrik: + title: Завантаження Geofabrik + description: Регулярно оновлювані вибірки континентів, країн і деяких міст + metro: + title: Mегаполіси + description: Вибірки даних для великих міст світу і прилеглих до них територій + other: + title: Інші джерела + description: Додаткові джерела перераховані у вікі OpenStreetMap + options: Опції + format: 'Формат:' + scale: Масштаб + max: макс. + image_size: 'Розмір зображення:' + zoom: Збільшити + add_marker: Додати маркер на мапу + latitude: 'Шир.:' + longitude: 'Довг.:' + output: Результат + paste_html: HTML-код для вбудовування до сайту + export_button: Експортувати + fixthemap: + title: Повідомити про проблему / Виправити мапу + how_to_help: + title: Як допомогти + join_the_community: + title: Приєднатися до спільноти + explanation_html: Якщо ви помітили, неточності в наших картографічних даних, + наприклад відсутня дорога або ваша адреса, найкращий спосіб це виправити — + приєднатись до спільноти OpenStreetMap і додати або виправити дані самостійно. + add_a_note: + instructions_html: |- + Просто натисніть або подібну піктограму на мапі. + У результаті, на мапі з'явиться маркер, який Ви зможете перетягувати на мапі. Додайте Ваше повідомлення, а потім натисніть кнопку Зберегти, і інші учасники матимуть змогу з цим розібратись. + other_concerns: + title: Інші проблеми + explanation_html: |- + Якщо ви занепокоєні тим, як наші дані використовуються або їх вмістом, зверніться до нашої + сторінки авторських прав для отримання правової інформації, або зв’яжіться з відповідною + робочою групою OSMF. + help: + title: Отримання довідки + introduction: OpenStreetMap має різні ресурси для отримання інформації про проект, + щоб поставити питання та отримати відповідь, для спільного обговорення і створення + документації з картографування. + welcome: + url: /welcome + title: Ласкаво просимо до OSM + description: Розпочніть з цього короткого посібника, що охоплює основи OpenStreetMap. + beginners_guide: + url: http://wiki.openstreetmap.org/wiki/Uk:Beginners%27_guide + title: Посібник новачка + description: Посібник для новачків від спільноти. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Поставте запитання або знайдіть відповіді на сайті OSM питання-відповідь. + mailing_lists: + title: Списки розсилки + description: Поставте запитання або обговоріть цікаві речі у широкому виборі + тематичних або регіональних списків розсилки. + forums: + title: Форуми + description: Запитання та обговорення для тих, хто віддає перевагу інтерфейсу + дошки обговорень. + irc: + title: IRC + description: Інтерактивний чат багатьма мовами на багато тем. + switch2osm: + title: switch2osm + description: Допомога компаніям та організаціям, які переходять на карти та + інші послуги OpenStreetMap. + wiki: + url: http://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: Перегляньте вікі щоб отримати докладу OSM документацію. sidebar: search_results: Результати пошуку close: Закрити @@ -1546,6 +1500,55 @@ uk: image: Зображення alt: Alt текст url: URL + welcome: + title: Ласкаво просимо! + introduction_html: Ласкаво просимо до OpenStreetMap, безкоштовної та доступної + для редагування мапи світу. Тепер, коли ви увійшли, все готово для початку + редагування. Ось короткий посібник з найважливішими речами, які ви повинні + знати. + whats_on_the_map: + title: Що на мапі + on_html: |- + На мапі OpenStreetMap розташовані об’єкти, які існують в поточний момент — тобто, це + мільйони будинків, доріг та інших елементів місцевості. Ви можете наносити на мапу будь-які об’єкти навколишнього світу, цікаві для вас. + off_html: Мапа не включає суб’єктивні дані на кшталт оцінок, історичних + або гіпотетичних характеристик та дані з джерел, які захищені авторським + правом. Якщо ви не маєте спеціального дозволу, не копіюйте з паперових мап + або з мап в інтернеті. + basic_terms: + title: Основні Терміни Для Картографування + paragraph_1_html: OpenStreetMap має власну термінологію. Ось кілька важливих + слів, які можуть знадобитися. + editor_html: Редактор — це програма або веб-сайт, який можна + використовувати для редагування мапи. + node_html: Точка — це позначка на мапі, на кшталт ресторану + або дерева. + way_html: Лінія — це відкрита або замкнена ламана на кшталт + дороги, струмка, озера або будівлі. + tag_html: Теґ — одиниця опису точки чи лінії на кшталт назви + ресторану або обмеження швидкості на дорозі. + rules: + title: Правила! + paragraph_1_html: "В OpenStreetMap є кілька формальних правил, але ми сподіваємось, + що всі учасники співпрацюватимуть зі спільнотою. Якщо ви плануєте заходи, + окрім ручного внесення даних, будь ласка, прочитайте та дотримуйтесь наступних + настанов з \nІмпорту + даних та \nАвтоматичного + редагування." + questions: + title: Є питання? + paragraph_1_html: |- + OpenStreetMap має різні ресурси для отримання інформації про проект, щоб поставити питання та отримати відповідь, для спільного обговорення і створення документації з картографування. + Отримайте допомогу тут. + start_mapping: Розпочати картографування + add_a_note: + title: Немає часу, щоб виправити мапу? Додайте нотатку! + paragraph_1_html: Якщо потрібно внести дрібне уточнення, заради якого немає + потреби витрачати час на реєстрацію та вивчення правил редагування, то можна + просто додати нотатку. + paragraph_2_html: |- + Перейдіть до мапи та натисніть піктограму нотатки: + . Це дозволить додати маркер на мапу, який ви зможете перетягнути мишею. Додайте ваше повідомлення, натисніть „зберегти“, і інші учасники побачать його та, у разі потреби, внесуть зміни на мапу. trace: visibility: private: Приватний (доступний тільки як анонімний, невпорядковані точки) @@ -1679,7 +1682,7 @@ uk: в систему, через веб-інтерфейс для перегляду Умов Участі. Вам не обов’язково погоджуватись, але ви повинні переглянути їх. oauth: - oauthorize: + authorize: title: Авторизувати доступ до облікового запису request_access: Застосунок %{app_name} намагається отримати доступ до вашого облікового запису, %{user}. Будь ласка, перевірте чи бажаєте ви, щоб застосунок @@ -1693,11 +1696,11 @@ uk: allow_write_gpx: передавати GPS-треки на сервер. allow_write_notes: змінювати нотатки. grant_access: Надати доступ - oauthorize_success: + authorize_success: title: Дозволено запит на авторизацію allowed: Ви надали програмі %{app_name} доступ до вашого облікового запису. verification: Код перевірки - %{code}. - oauthorize_failure: + authorize_failure: title: Не вдалося виконати запит авторизації denied: Ви заборонили програмі %{app_name} доступ до вашого облікового запису. invalid: Неприпустимий маркер авторизації. @@ -2141,7 +2144,7 @@ uk: confirm: Підтвердити fail: Не вдалося відкликати роль «%{role}» у користувача «%{name}». Будь ласка, перевірте, що користувач і роль є дійсними. - user_block: + user_blocks: model: non_moderator_update: Потрібно бути модератором, щоб створити або змінити блокування. non_moderator_revoke: Потрібно бути модератором, щоб зняти блокування. @@ -2208,20 +2211,6 @@ uk: few: '%{count} години' one: '%{count} година' other: '%{count} годин' - partial: - show: Показати - edit: Правити - revoke: Розблокувати! - confirm: Ви впевнені? - display_name: Заблокований користувач - creator_name: Автор - reason: Причина блокування - status: Стан - revoker_name: Розблокував - not_revoked: (не розблокований) - showing_page: Сторінка %{page} - next: Наступна → - previous: ← Попередня helper: time_future: До закінчення %{time}. until_login: Активне до тих пір, доки користувач не увійде в систему. @@ -2253,8 +2242,22 @@ uk: revoker: 'Розблокував:' needs_view: Користувачу потрібну увійти до системи перед тим, як блокування буде знято. - note: - description: + block: + not_revoked: (не розблокований) + show: Показати + edit: Правити + revoke: Розблокувати! + blocks: + display_name: Заблокований користувач + creator_name: Автор + reason: Причина блокування + status: Стан + revoker_name: Розблокував + showing_page: Сторінка %{page} + next: Наступна → + previous: ← Попередня + notes: + comment: opened_at_html: Створено %{when} тому opened_at_by_html: Створено %{when} тому користувачем %{user} commented_at_html: Оновлено %{when} тому @@ -2383,7 +2386,7 @@ uk: distance: Відстань errors: no_route: Не вдалося знайти маршрут між цими двома точками. - no_place: Вибачте - не можу знайти це місце. + no_place: На жаль неможливо знайти '%{place}'. instructions: continue_without_exit: Рухайтесь далі по %{name} slight_right_without_exit: Плавно поверніть праворуч на %{name} @@ -2439,7 +2442,7 @@ uk: show_address: Показати адресу query_features: Отримати об’єкти centre_map: Центрувати мапу тут - redaction: + redactions: edit: description: Опис heading: Правити редакцію diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 15751c0ac..54cd81f34 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -269,7 +269,7 @@ vi: user_title: Nhật ký của %{user} in_language_title: Các Mục Nhật ký bằng %{language} new: Mục Nhật ký Mới - new_title: Soạn thảo mục mới trong nhật ký của bạn + new_title: Soạn thảo mục mới trong nhật ký của tôi no_entries: ChÆ°a có mục nhật ký recent_entries: Mục nhật ký gần đây older_entries: Mục Trước @@ -333,53 +333,6 @@ vi: ago: cách đây %{ago} newer_comments: Các Bình luận Sau older_comments: Các Bình luận Trước - export: - title: Xuất - start: - area_to_export: Vùng để Xuất - manually_select: Chọn vùng khác thủ công - format_to_export: Định dạng Xuất - osm_xml_data: Dữ liệu OpenStreetMap XML - map_image: Hình Bản đồ (Lớp Chuẩn) - embeddable_html: HTML để Nhúng - licence: Giấy phép - export_details: Dữ liệu OpenStreetMap được phép sá»­ dụng theo Giấy - phép CÆ¡ sở dữ liệu Mở Open Data Commons (ODbL). - too_large: - advice: 'Nếu việc xuất dữ liệu ở trên bị thất bại, hãy nghÄ© đến việc sá»­ dụng - một trong những nguồn bên dưới:' - body: 'Khu vá»±c này quá lớn để xuất được dữ liệu OpenStreetMap XML. Xin vui - lòng phóng to, chọn khu vá»±c nhỏ hÆ¡n, hoặc tải về dữ liệu khối lượng lớn - từ một dịch vụ sau:' - planet: - title: Quả đất OSM - description: Các bản sao toàn thể cÆ¡ sở dữ liệu OpenStreetMap được cập nhật - thường xuyên - overpass: - title: Overpass API - description: Tải về hộp bao này từ một mirror của cÆ¡ sở dữ liệu OpenStreetMap - geofabrik: - title: Tải về Geofabrik - description: Bản trích lục địa, quốc gia, và một số thành phố được cập nhật - thường xuyên - metro: - title: Bản trích Metro - description: Bản trích một số thành phố lớn và vùng lân cận - other: - title: Nguồn Khác - description: Những nguồn khác được liệt kê trên wiki OpenStreetMap - options: Tùy chọn - format: 'Định dạng:' - scale: Tá»· lệ - max: tối đa - image_size: Hình có Kích cỡ - zoom: Thu phóng - add_marker: Đánh dấu vào bản đồ - latitude: 'VÄ© độ:' - longitude: 'Kinh độ:' - output: Đầu ra - paste_html: Dán HTML để nhúng vào trang Web - export_button: Xuất geocoder: search: title: @@ -952,246 +905,6 @@ vi: text: Quyên góp learn_more: Tìm hiểu Thêm more: Thêm - license_page: - foreign: - title: Thông tin về bản dịch này - text: Trong trường hợp có xung đột giữa trang dịch và trang %{english_original_link}, - trang tiếng Anh sẽ được Æ°u tiên - english_link: nguyên bản tiếng Anh - native: - title: Giới thiệu về trang này - text: Đây là bản tiếng Anh của trang bản quyền. Trở về %{native_link} của trang - này hoặc %{mapping_link} thay vì đọc mãi. - native_link: bản dịch tiếng Việt - mapping_link: bắt đầu vẽ bản đồ - legal_babble: - title_html: Bản quyền và Giấy phép - intro_1_html: |- - OpenStreetMap® là dữ liệu mở được phát hành theo Giấy phép CÆ¡ sở dữ liệu Mở của Open Data - Commons (ODbL) bởi OpenStreetMap Foundation (OSMF). - intro_2_html: Bạn được tá»± do sao chép, phân phối, truyền, và tạo ra các tác - phẩm phái sinh từ các dữ liệu của chúng ta, miễn là bạn ghi công OpenStreetMap - và những người đóng góp vào nó. Nếu bạn sá»­a đổi hoặc tạo sản phẩm dá»±a trên - các dữ liệu của chúng tôi, bạn chỉ được phép phân phối kết quả theo cùng giấy - phép. Mã pháp lý - đầy đủ giải thích các quyền và trách nhiệm của bạn. - intro_3_html: "Các hình ảnh bản đồ và tài liệu của chúng tôi được phát hành - theo giấy phép Creative - \nCommons Ghi công–Chia sẻ tÆ°Æ¡ng tá»± 2.0 (CC BY-SA)." - credit_title_html: Cách ghi công OpenStreetMap - credit_1_html: Chúng tôi bắt bạn phải sá»­ dụng lời ghi công “© những người đóng - góp vào OpenStreetMap”. - credit_2_html: Bạn cÅ©ng phải giải thích rõ rằng dữ liệu được phát hành theo - Giấy phép CÆ¡ sở dữ liệu Mở, và, nếu bạn đang sá»­ dung các hình ảnh bản đồ của - chúng tôi, rằng các hình ảnh này được phát hành theo giấy phép CC BY-SA. Bạn - có thể thỏa mãn điều này bằng cách đặt liên kết đến trang - bản quyền này. Nếu bạn đang phân phối nguyên dữ liệu của OSM hoặc không - muốn đặt liên kết đến trang bản quyền của OSM, bạn có thể nói đến và đặt liên - kết trá»±c tiếp đến (các) giấy phép. Nếu bạn đang sá»­ dụng phÆ°Æ¡ng tiện không - cho phép đặt liên kết, chẳng hạn trong tác phẩm in giấy, chúng tôi gợi ý chỉ - các độc giả đến openstreetmap.org (có lẽ bằng cách mở rộng “OpenStreetMap” - trở thành địa chỉ đầy đủ này), đến opendatacommons.org, và nếu hợp lý, đến - creativecommons.org. - credit_3_html: |- - Đối với một bản đồ điện tá»­ tÆ°Æ¡ng tác, lời ghi công nên xuất hiện ở góc bản đồ. - Ví dụ: - attribution_example: - alt: Ví dụ ghi công OpenStreetMap trên một trang Web - title: Ví dụ ghi công - more_title_html: Tìm hiểu thêm - more_1_html: Hãy đọc thêm chi tiết về việc sá»­ dụng dữ liệu của chúng tôi và - cách ghi công chúng tôi tại trang - giấy phép Quỹ OSM. - more_2_html: Tuy OpenStreetMap là một nguồn dữ liệu mở, nhÆ°ng chúng tôi không - thể cung cấp API miễn phí cho bên thứ ba truy cập bản đồ. Hãy xem Quy - định Sá»­ dụng API, Quy - định Sá»­ dụng Mảnh Bản đồ, và Quy - định Sá»­ dụng Nominatim. - contributors_title_html: Những người đóng góp vào đây - contributors_intro_html: 'Dá»± án này nhờ công sức đóng góp của hàng ngàn cá nhân - và cÅ©ng bao gồm các dữ liệu có giấy phép mở từ các cÆ¡ quan khảo sát quốc gia - và những nguồn gốc khác, chẳng hạn:' - contributors_at_html: 'Áo: Bao gồm dữ liệu từ Bang - Viên (theo CC - BY), Bang - Vorarlberg, và Bang Tyrol (theo bản - sá»­a đổi CC BY Áo).' - contributors_ca_html: 'Canada: Bao gồm dữ liệu từ GeoBase®, - GeoGratis (© Bộ Tài nguyên Canada), CanVec (© Bộ Tài nguyên Canada), và StatCan - (Sở Địa lý, Statistics Canada).' - contributors_fi_html: "Phần Lan: Chứa dữ liệu từ\nCÆ¡ sở dữ - liệu Địa hình của Cục Khảo sát Địa lý Quốc gia Phần Lan (NLS) và các tập hợp - dữ liệu khác theo \nGiấy - phép dữ liệu mở NLS." - contributors_fr_html: 'Pháp: Bao gồm dữ liệu từ Sở thuế Pháp - (Direction générale des Impôts).' - contributors_nl_html: 'Hà Lan: Bao gồm dữ liệu © 2007 AND (www.and.com)' - contributors_nz_html: 'New Zealand: Bao gồm dữ liệu bắt nguồn - từ Land Information New Zealand. Bản quyền Crown Copyright được bảo lÆ°u.' - contributors_si_html: "Slovenia: Bao gồm dữ liệu từ \nCÆ¡ - quan Khảo sát và Bản đồ và\nCục - Nông nghiệp, Lâm nghiệp, và Thức ăn\n(thông tin công cộng của Slovenia)." - contributors_za_html: 'Nam Phi: Bao gồm dữ liệu từ Tổng - cục: Thông tin Không gian địa lý Quốc gia, bản quyền nhà nước được bảo - lÆ°u.' - contributors_gb_html: 'VÆ°Æ¡ng quốc Anh: Bao gồm dữ liệu Ordnance - Survey © bản quyền Crown Copyright và quyền cÆ¡ sở dữ liệu 2010–12.' - contributors_footer_1_html: |- - Xem thêm chi tiết và các nguồn gốc khác dùng để cải tiến OpenStreetMap tại trang Người đóng góp trên OpenStreetMap Wiki. - contributors_footer_2_html: ' Việc bao gồm dữ liệu trong OpenStreetMap không - ngụ ý rằng nhà cung cấp dữ liệu đầu tiên ủng hộ OpenStreetMap, biện hộ sá»± - chính xác của nó, hoặc nhận trách nhiệm pháp lý nào.' - infringement_title_html: Vi phạm bản quyền - infringement_1_html: Những người đóng góp vào OSM được khuyên không bao giờ - bổ sung dữ liệu từ những nguồn có bản quyền (chẳng hạn Bản đồ Google hoặc - các bản đồ trên giấy) trước khi các nhà giữ bản quyền cho phép rõ ràng. - infringement_2_html: Nếu bạn tin rằng tài liệu có bản quyền đã được bổ sung - vào cÆ¡ sở dữ liệu OpenStreetMap hoặc trang này một cách không thích đáng, - xin vui lòng tham khảo quá - trình takedown hoặc nộp đơn trá»±c tiếp tại trang - khiếu nại trá»±c tuyến của chúng tôi. - trademarks_title_html: Nhãn hiệu - trademarks_1_html: OpenStreetMap, biểu trÆ°ng kính lúp, và State of the Map đều - là nhãn hiệu đăng ký của Quỹ OpenStreetMap. Nếu bạn có thắc mắc về cách sá»­ - dụng các nhãn hiệu này, xin vui lòng tham khảo Quy - định về nhãn hiệu của chúng tôi. - welcome_page: - title: Hoan nghênh! - introduction_html: Chào mừng bạn đã đến OpenStreetMap, bản đồ thế giới có dữ liệu - mở được xây dá»±ng bởi những người nhÆ° bạn. Bây giờ bạn đã mở tài khoản thì hãy - cùng góp sức vẽ bản đồ. Đây là những căn bản cần biết để bắt đầu đóng góp. - whats_on_the_map: - title: Mục đích của Bản đồ - on_html: OpenStreetMap là bản đồ chứa bất cứ những gì hiện tại có thật - – nó chứa biết bao tòa nhà, con đường, cá»­a hàng, cÆ¡ sở hạ tầng, cây cối… đủ - mọi thứ. Mời bạn bổ sung bất cứ những gì thu hút sá»± quan tâm của bạn. - off_html: Nó không chứa các ý kiến nhÆ° bài đánh giá, những gì không - hoặc không còn tồn tại, hoặc thông tin từ các nguồn giữ bản quyền. Bạn phải - xin phép của nhà giữ bản quyền mới được sao chép từ bản đồ giấy hay bản đồ - trá»±c tuyến khác. - basic_terms: - title: Thuật ngữ CÆ¡ bản - paragraph_1_html: 'Đây là những thuật ngữ thường gặp khi sá»­ dụng và đóng góp - vào OpenStreetMap:' - editor_html: Trình vẽ là một ứng dụng hoặc trang Web cho phép - sá»­a đổi bản đồ. - node_html: Nốt là một địa điểm trên bản đồ, thí dụ một nhà - hàng hoặc một cái cây. - way_html: Lối là một đường kẻ hoặc vùng, thí dụ con đường, - dòng nước, hồ nước, hoặc tòa nhà. - tag_html: Thẻ là một chi tiết về một nốt hoặc lối, thí dụ tên - của một nhà hàng hoặc tốc độ tối đa của một con đường. - rules: - title: Quy định! - paragraph_1_html: "OpenStreetMap có ít quy định chính thức, nhÆ°ng chúng ta mong - muốn tất cả mọi người tham gia mà cộng tác và giao thiệp với cộng đồng. Nếu - bạn tính hoạt động ngoài việc sá»­a đổi thủ công, xin vui lòng đọc và tuân theo - các hướng dẫn về việc nhập - và \ntá»± - động sá»­a đổi." - questions: - title: Có thắc mắc? - paragraph_1_html: |- - OpenStreetMap có nhiều tài nguyên để cho bạn tìm hiểu về dá»± án, hỏi đáp, và cộng tác soạn thảo tài liệu về các đề tài bản đồ. - Nhận trợ giúp tại đây. - start_mapping: Bắt đầu Đóng góp - add_a_note: - title: Không có Thì giờ Sá»­a đổi? Thêm một Ghi chú! - paragraph_1_html: Nếu bạn chỉ muốn sá»­a một chi tiết nhỏ và không có thì giờ - tập sá»­a đổi, bạn có thể thêm một ghi chú dễ dàng. - paragraph_2_html: |- - Chỉ việc mở bản đồ và bấm hình ghi chú - để thả đinh ghim trên bản đồ. Kéo ghim vào đúng vị trí, ghi lời miêu tả vấn đề, và bấm “Thêm Ghi chú”. Cộng đồng sẽ cố gắng sá»­a theo ý của bạn. - fixthemap: - title: Báo lỗi / Sá»­a bản đồ - how_to_help: - title: Cách giúp đỡ - join_the_community: - title: Tham gia cộng đồng - explanation_html: Nếu bạn nhận thấy một vấn đề trong dữ liệu bản đồ của chúng - tôi, chẳng hạn thiếu con đường hoặc địa chỉ của bạn, cách xá»­ lý tốt nhất - là tham gia cộng đồng OpenStreetMap để thêm hoặc sá»­a dữ liệu lấy. - add_a_note: - instructions_html: |- - Chỉ việc bấm hoặc hình tượng này trên bản đồ. - Nút này sẽ thả một ghim vào bản đồ để bạn kéo thả vào vị trí đúng. Miêu tả vấn đề và bấm LÆ°u. Những người khác sẽ điều tra. - other_concerns: - title: Vấn đề khác - explanation_html: Nếu bạn có thắc mắc về cách sá»­ dụng dữ liệu của chúng tôi - hoặc về nội dung của bản đồ, xin vui lòng xem thông tin pháp lý tại trang - bản quyền, hoặc liên lạc với nhóm - làm việc thích hợp của Quỹ OpenStreetMap. - help_page: - title: Trợ giúp - introduction: OpenStreetMap có nhiều tài nguyên để cho bạn tìm hiểu về dá»± án, - hỏi đáp, và cộng tác soạn thảo tài liệu về các đề tài bản đồ. - welcome: - url: /welcome - title: Chào mừng đến với OSM - description: Bắt đầu với cẩm nang các điều cÆ¡ bản OpenStreetMap. - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Vi:Beginners%27_guide - title: Hướng dẫn Bắt đầu - description: Hướng dẫn bắt đầu do cộng đồng biên tập. - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: Hỏi hang hoặc tìm kiếm các câu trả lời tại trung tâm hỏi đáp của - OSM. - mailing_lists: - title: Danh sách thÆ° - description: Hỏi han hoặc thảo luận về các chuyện quan trọng trên nhiều danh - sách thÆ° được sắp xếp theo chủ đề hoặc khu vá»±c. - forums: - title: Diễn đàn - description: Hỏi han và thảo luận trong một giao diện bảng tin. - irc: - title: IRC - description: Trò chuyện tÆ°Æ¡ng tác trong nhiều ngôn ngữ về nhiều chủ đề. - switch2osm: - title: switch2osm - description: Trợ giúp cho những công ty và tổ chức muốn đổi qua các bản đồ và - dịch vụ dá»±a trên OpenStreetMap. - wiki: - url: https://wiki.openstreetmap.org/wiki/Vi:Main_Page?uselang=vi - title: wiki.openstreetmap.org - description: Đọc tài liệu đầy đủ về OSM trên wiki. - about_page: - next: Tiếp - copyright_html: ©những người
        đóng góp vào
        OpenStreetMap - used_by: '%{name} là nguồn dữ liệu bản đồ của hàng ngàn trang Web, ứng dụng di - động, và thiết bị phần cứng' - lede_text: OpenStreetMap được xây dựng bởi cộng đồng những người đóng góp và bảo - quản dữ liệu về đường sá, tòa nhà, quán cà phê, nhà ga, và đủ mọi thứ ở khắp - thế giới. - local_knowledge_title: Kiến thức Địa phương - local_knowledge_html: OpenStreetMap chú trọng vào kiến thức địa phương. Những - người đóng góp sử dụng hình ảnh từ không trung, các thiết bị GPS, và các bản - đồ phác thảo trên giấy để làm cho OSM chính xác và đúng thời. - community_driven_title: Căn cứ vào Cộng động - community_driven_html: |- - Cộng đồng của OpenStreetMap gồm đủ loại người nhiệt tình và càng ngày càng phát triển. - Cộng đồng gồm những người tình nguyện vẽ bản đồ, các chuyên gia GIS, các kỹ sư bảo quản các máy chủ OSM. Chúng ta vẽ bản đồ quê hưởng, những nơi du lịch, những nơi bị thiên tai (để hỗ trợ cơ quan nhân đạo), và nhiều hơn nữa. - Để tìm hiểu thêm về cộng đồng này, hãy đọc Blog OpenStreetMap, các nhật ký của người dùng, - blog của cộng đồng, và trang chủ Quỹ OSM. - open_data_title: Dữ liệu Mở - open_data_html: 'OpenStreetMap là dữ liệu mở: bạn được tự do sử dụng nó - cho bất cứ mục đích nào, miễn là bạn ghi công OpenStreetMap và những người đóng - góp vào nó. Nếu bạn tạo ra một tác phẩm thay đổi dữ liệu hoặc dựa trên dữ liệu - theo một số cách nhất định, bạn chỉ được phép phân phối tác phẩm kết quả dưới - cùng giấy phép này. Hãy xem chi tiết tại trang - Bản quyền và Giấy phép.' - legal_title: Pháp luật - legal_html: |- - Trang Web này và nhiều dịch vụ có liên quan được hoạt động chính thức bởi Quỹ OpenStreetMap (OSMF) thay mặt cho cộng đồng. Việc sử dụng các dịch vụ do OSMF hoạt động phải tuân theo các Quy định Sử dụng Hợp lý và Quy định về Quyền Riêng tư của chúng tôi. -
        - Xin vui lòng liên lạc với OSMF nếu bạn có thắc mắc về giấy phép, bản quyền, hoặc thắc mắc khác về pháp luật. -
        - OpenStreetMap, biểu trÆ°ng kính lúp, và State of the Map đều là nhãn hiệu đăng ký của Quỹ OSM. - partners_title: Nhà bảo trợ notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} đã bình luận về mục nhật ký' @@ -1377,6 +1090,146 @@ vi: delete: deleted: Đã xóa thÆ° site: + about: + next: Tiếp + copyright_html: ©những người
        đóng góp vào
        OpenStreetMap + used_by: '%{name} là nguồn dữ liệu bản đồ của hàng ngàn trang Web, ứng dụng + di động, và thiết bị phần cứng' + lede_text: OpenStreetMap được xây dựng bởi cộng đồng những người đóng góp và + bảo quản dữ liệu về đường sá, tòa nhà, quán cà phê, nhà ga, và đủ mọi thứ + ở khắp thế giới. + local_knowledge_title: Kiến thức Địa phương + local_knowledge_html: OpenStreetMap chú trọng vào kiến thức địa phương. Những + người đóng góp sử dụng hình ảnh từ không trung, các thiết bị GPS, và các bản + đồ phác thảo trên giấy để làm cho OSM chính xác và đúng thời. + community_driven_title: Căn cứ vào Cộng động + community_driven_html: |- + Cộng đồng của OpenStreetMap gồm đủ loại người nhiệt tình và càng ngày càng phát triển. + Cộng đồng gồm những người tình nguyện vẽ bản đồ, các chuyên gia GIS, các kỹ sư bảo quản các máy chủ OSM. Chúng ta vẽ bản đồ quê hưởng, những nơi du lịch, những nơi bị thiên tai (để hỗ trợ cơ quan nhân đạo), và nhiều hơn nữa. + Để tìm hiểu thêm về cộng đồng này, hãy đọc Blog OpenStreetMap, các nhật ký của người dùng, + blog của cộng đồng, và trang chủ Quỹ OSM. + open_data_title: Dữ liệu Mở + open_data_html: 'OpenStreetMap là dữ liệu mở: bạn được tự do sử dụng + nó cho bất cứ mục đích nào, miễn là bạn ghi công OpenStreetMap và những người + đóng góp vào nó. Nếu bạn tạo ra một tác phẩm thay đổi dữ liệu hoặc dựa trên + dữ liệu theo một số cách nhất định, bạn chỉ được phép phân phối tác phẩm kết + quả dưới cùng giấy phép này. Hãy xem chi tiết tại trang + Bản quyền và Giấy phép.' + legal_title: Pháp luật + legal_html: |- + Trang Web này và nhiều dịch vụ có liên quan được hoạt động chính thức bởi Quỹ OpenStreetMap (OSMF) thay mặt cho cộng đồng. Việc sử dụng các dịch vụ do OSMF hoạt động phải tuân theo các Quy định Sử dụng Hợp lý và Quy định về Quyền Riêng tư của chúng tôi. +
        + Xin vui lòng liên lạc với OSMF nếu bạn có thắc mắc về giấy phép, bản quyền, hoặc thắc mắc khác về pháp luật. +
        + OpenStreetMap, biểu trÆ°ng kính lúp, và State of the Map đều là nhãn hiệu đăng ký của Quỹ OSM. + partners_title: Nhà bảo trợ + copyright: + foreign: + title: Thông tin về bản dịch này + text: Trong trường hợp có xung đột giữa trang dịch và trang %{english_original_link}, + trang tiếng Anh sẽ được Æ°u tiên + english_link: nguyên bản tiếng Anh + native: + title: Giới thiệu về trang này + text: Đây là bản tiếng Anh của trang bản quyền. Trở về %{native_link} của + trang này hoặc %{mapping_link} thay vì đọc mãi. + native_link: bản dịch tiếng Việt + mapping_link: bắt đầu vẽ bản đồ + legal_babble: + title_html: Bản quyền và Giấy phép + intro_1_html: |- + OpenStreetMap® là dữ liệu mở được phát hành theo Giấy phép CÆ¡ sở dữ liệu Mở của Open Data + Commons (ODbL) bởi OpenStreetMap Foundation (OSMF). + intro_2_html: Bạn được tá»± do sao chép, phân phối, truyền, và tạo ra các tác + phẩm phái sinh từ các dữ liệu của chúng ta, miễn là bạn ghi công OpenStreetMap + và những người đóng góp vào nó. Nếu bạn sá»­a đổi hoặc tạo sản phẩm dá»±a trên + các dữ liệu của chúng tôi, bạn chỉ được phép phân phối kết quả theo cùng + giấy phép. Mã pháp + lý đầy đủ giải thích các quyền và trách nhiệm của bạn. + intro_3_html: "Các hình ảnh bản đồ và tài liệu của chúng tôi được phát hành + theo giấy phép Creative + \nCommons Ghi công–Chia sẻ tÆ°Æ¡ng tá»± 2.0 (CC BY-SA)." + credit_title_html: Cách ghi công OpenStreetMap + credit_1_html: Chúng tôi bắt bạn phải sá»­ dụng lời ghi công “© những người + đóng góp vào OpenStreetMap”. + credit_2_html: Bạn cÅ©ng phải giải thích rõ rằng dữ liệu được phát hành theo + Giấy phép CÆ¡ sở dữ liệu Mở, và, nếu bạn đang sá»­ dung các hình ảnh bản đồ + của chúng tôi, rằng các hình ảnh này được phát hành theo giấy phép CC BY-SA. + Bạn có thể thỏa mãn điều này bằng cách đặt liên kết đến trang + bản quyền này. Nếu bạn đang phân phối nguyên dữ liệu của OSM hoặc không + muốn đặt liên kết đến trang bản quyền của OSM, bạn có thể nói đến và đặt + liên kết trá»±c tiếp đến (các) giấy phép. Nếu bạn đang sá»­ dụng phÆ°Æ¡ng tiện + không cho phép đặt liên kết, chẳng hạn trong tác phẩm in giấy, chúng tôi + gợi ý chỉ các độc giả đến openstreetmap.org (có lẽ bằng cách mở rộng “OpenStreetMap” + trở thành địa chỉ đầy đủ này), đến opendatacommons.org, và nếu hợp lý, đến + creativecommons.org. + credit_3_html: |- + Đối với một bản đồ điện tá»­ tÆ°Æ¡ng tác, lời ghi công nên xuất hiện ở góc bản đồ. + Ví dụ: + attribution_example: + alt: Ví dụ ghi công OpenStreetMap trên một trang Web + title: Ví dụ ghi công + more_title_html: Tìm hiểu thêm + more_1_html: Hãy đọc thêm chi tiết về việc sá»­ dụng dữ liệu của chúng tôi và + cách ghi công chúng tôi tại trang + giấy phép Quỹ OSM. + more_2_html: Tuy OpenStreetMap là một nguồn dữ liệu mở, nhÆ°ng chúng tôi không + thể cung cấp API miễn phí cho bên thứ ba truy cập bản đồ. Hãy xem Quy + định Sá»­ dụng API, Quy + định Sá»­ dụng Mảnh Bản đồ, và Quy + định Sá»­ dụng Nominatim. + contributors_title_html: Những người đóng góp vào đây + contributors_intro_html: 'Dá»± án này nhờ công sức đóng góp của hàng ngàn cá + nhân và cÅ©ng bao gồm các dữ liệu có giấy phép mở từ các cÆ¡ quan khảo sát + quốc gia và những nguồn gốc khác, chẳng hạn:' + contributors_at_html: 'Áo: Bao gồm dữ liệu từ Bang + Viên (theo CC + BY), Bang + Vorarlberg, và Bang Tyrol (theo bản + sá»­a đổi CC BY Áo).' + contributors_ca_html: 'Canada: Bao gồm dữ liệu từ GeoBase®, + GeoGratis (© Bộ Tài nguyên Canada), CanVec (© Bộ Tài nguyên Canada), và + StatCan (Sở Địa lý, Statistics Canada).' + contributors_fi_html: "Phần Lan: Chứa dữ liệu từ\nCÆ¡ sở dữ + liệu Địa hình của Cục Khảo sát Địa lý Quốc gia Phần Lan (NLS) và các tập + hợp dữ liệu khác theo \nGiấy + phép dữ liệu mở NLS." + contributors_fr_html: 'Pháp: Bao gồm dữ liệu từ Sở thuế Pháp + (Direction générale des Impôts).' + contributors_nl_html: 'Hà Lan: Bao gồm dữ liệu © 2007 AND + (www.and.com)' + contributors_nz_html: 'New Zealand: Bao gồm dữ liệu bắt nguồn + từ Land Information New Zealand. Bản quyền Crown Copyright được bảo lÆ°u.' + contributors_si_html: "Slovenia: Bao gồm dữ liệu từ \nCÆ¡ quan Khảo sát và Bản đồ và\nCục Nông nghiệp, Lâm nghiệp, và Thức + ăn\n(thông tin công cộng của Slovenia)." + contributors_za_html: 'Nam Phi: Bao gồm dữ liệu từ Tổng + cục: Thông tin Không gian địa lý Quốc gia, bản quyền nhà nước được bảo + lÆ°u.' + contributors_gb_html: 'VÆ°Æ¡ng quốc Anh: Bao gồm dữ liệu Ordnance + Survey © bản quyền Crown Copyright và quyền cÆ¡ sở dữ liệu 2010–12.' + contributors_footer_1_html: |- + Xem thêm chi tiết và các nguồn gốc khác dùng để cải tiến OpenStreetMap tại trang Người đóng góp trên OpenStreetMap Wiki. + contributors_footer_2_html: ' Việc bao gồm dữ liệu trong OpenStreetMap không + ngụ ý rằng nhà cung cấp dữ liệu đầu tiên ủng hộ OpenStreetMap, biện hộ sá»± + chính xác của nó, hoặc nhận trách nhiệm pháp lý nào.' + infringement_title_html: Vi phạm bản quyền + infringement_1_html: Những người đóng góp vào OSM được khuyên không bao giờ + bổ sung dữ liệu từ những nguồn có bản quyền (chẳng hạn Bản đồ Google hoặc + các bản đồ trên giấy) trước khi các nhà giữ bản quyền cho phép rõ ràng. + infringement_2_html: Nếu bạn tin rằng tài liệu có bản quyền đã được bổ sung + vào cÆ¡ sở dữ liệu OpenStreetMap hoặc trang này một cách không thích đáng, + xin vui lòng tham khảo quá + trình takedown hoặc nộp đơn trá»±c tiếp tại trang + khiếu nại trá»±c tuyến của chúng tôi. + trademarks_title_html: Nhãn hiệu + trademarks_1_html: OpenStreetMap, biểu trÆ°ng kính lúp, và State of the Map + đều là nhãn hiệu đăng ký của Quỹ OpenStreetMap. Nếu bạn có thắc mắc về cách + sá»­ dụng các nhãn hiệu này, xin vui lòng tham khảo Quy + định về nhãn hiệu của chúng tôi. index: js_1: Hoặc trình duyệt của bạn không hỗ trợ JavaScript, hoặc bạn đã tắt JavaScript. js_2: OpenStreetMap sá»­ dụng JavaScript cho chức năng bản đồ trÆ¡n. @@ -1408,6 +1261,108 @@ vi: id_not_configured: iD chÆ°a được cấu hình no_iframe_support: Tính năng này cần trình duyệt hỗ trợ khung nội bộ (iframe) trong HTML. + export: + title: Xuất + area_to_export: Vùng để Xuất + manually_select: Chọn vùng khác thủ công + format_to_export: Định dạng Xuất + osm_xml_data: Dữ liệu OpenStreetMap XML + map_image: Hình Bản đồ (Lớp Chuẩn) + embeddable_html: HTML để Nhúng + licence: Giấy phép + export_details: Dữ liệu OpenStreetMap được phép sá»­ dụng theo Giấy + phép CÆ¡ sở dữ liệu Mở Open Data Commons (ODbL). + too_large: + advice: 'Nếu việc xuất dữ liệu ở trên bị thất bại, hãy nghÄ© đến việc sá»­ dụng + một trong những nguồn bên dưới:' + body: 'Khu vá»±c này quá lớn để xuất được dữ liệu OpenStreetMap XML. Xin vui + lòng phóng to, chọn khu vá»±c nhỏ hÆ¡n, hoặc tải về dữ liệu khối lượng lớn + từ một dịch vụ sau:' + planet: + title: Quả đất OSM + description: Các bản sao toàn thể cÆ¡ sở dữ liệu OpenStreetMap được cập nhật + thường xuyên + overpass: + title: Overpass API + description: Tải về hộp bao này từ một mirror của cÆ¡ sở dữ liệu OpenStreetMap + geofabrik: + title: Tải về Geofabrik + description: Bản trích lục địa, quốc gia, và một số thành phố được cập nhật + thường xuyên + metro: + title: Bản trích Metro + description: Bản trích một số thành phố lớn và vùng lân cận + other: + title: Nguồn Khác + description: Những nguồn khác được liệt kê trên wiki OpenStreetMap + options: Tùy chọn + format: 'Định dạng:' + scale: Tá»· lệ + max: tối đa + image_size: Hình có Kích cỡ + zoom: Thu phóng + add_marker: Đánh dấu vào bản đồ + latitude: 'VÄ© độ:' + longitude: 'Kinh độ:' + output: Đầu ra + paste_html: Dán HTML để nhúng vào trang Web + export_button: Xuất + fixthemap: + title: Báo lỗi / Sá»­a bản đồ + how_to_help: + title: Cách giúp đỡ + join_the_community: + title: Tham gia cộng đồng + explanation_html: Nếu bạn nhận thấy một vấn đề trong dữ liệu bản đồ của + chúng tôi, chẳng hạn thiếu con đường hoặc địa chỉ của bạn, cách xá»­ lý + tốt nhất là tham gia cộng đồng OpenStreetMap để thêm hoặc sá»­a dữ liệu + lấy. + add_a_note: + instructions_html: |- + Chỉ việc bấm hoặc hình tượng này trên bản đồ. + Nút này sẽ thả một ghim vào bản đồ để bạn kéo thả vào vị trí đúng. Miêu tả vấn đề và bấm LÆ°u. Những người khác sẽ điều tra. + other_concerns: + title: Vấn đề khác + explanation_html: Nếu bạn có thắc mắc về cách sá»­ dụng dữ liệu của chúng tôi + hoặc về nội dung của bản đồ, xin vui lòng xem thông tin pháp lý tại trang + bản quyền, hoặc liên lạc với nhóm + làm việc thích hợp của Quỹ OpenStreetMap. + help: + title: Trợ giúp + introduction: OpenStreetMap có nhiều tài nguyên để cho bạn tìm hiểu về dá»± án, + hỏi đáp, và cộng tác soạn thảo tài liệu về các đề tài bản đồ. + welcome: + url: /welcome + title: Chào mừng đến với OSM + description: Bắt đầu với cẩm nang các điều cÆ¡ bản OpenStreetMap. + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Vi:Beginners%27_guide + title: Hướng dẫn Bắt đầu + description: Hướng dẫn bắt đầu do cộng đồng biên tập. + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: Hỏi hang hoặc tìm kiếm các câu trả lời tại trung tâm hỏi đáp + của OSM. + mailing_lists: + title: Danh sách thÆ° + description: Hỏi han hoặc thảo luận về các chuyện quan trọng trên nhiều danh + sách thÆ° được sắp xếp theo chủ đề hoặc khu vá»±c. + forums: + url: http://forum.openstreetmap.org/ + title: Diễn đàn + description: Hỏi han và thảo luận trong một giao diện bảng tin. + irc: + title: IRC + description: Trò chuyện tÆ°Æ¡ng tác trong nhiều ngôn ngữ về nhiều chủ đề. + switch2osm: + title: switch2osm + description: Trợ giúp cho những công ty và tổ chức muốn đổi qua các bản đồ + và dịch vụ dá»±a trên OpenStreetMap. + wiki: + url: https://wiki.openstreetmap.org/wiki/Vi:Main_Page?uselang=vi + title: wiki.openstreetmap.org + description: Đọc tài liệu đầy đủ về OSM trên wiki. sidebar: search_results: Kết quả Tìm kiếm close: Đóng @@ -1508,6 +1463,54 @@ vi: image: Hình ảnh alt: Văn bản thay thế url: URL + welcome: + title: Hoan nghênh! + introduction_html: Chào mừng bạn đã đến OpenStreetMap, bản đồ thế giới có dữ + liệu mở được xây dá»±ng bởi những người nhÆ° bạn. Bây giờ bạn đã mở tài khoản + thì hãy cùng góp sức vẽ bản đồ. Đây là những căn bản cần biết để bắt đầu đóng + góp. + whats_on_the_map: + title: Mục đích của Bản đồ + on_html: OpenStreetMap là bản đồ chứa bất cứ những gì hiện tại có thật + – nó chứa biết bao tòa nhà, con đường, cá»­a hàng, cÆ¡ sở hạ tầng, cây cối… + đủ mọi thứ. Mời bạn bổ sung bất cứ những gì thu hút sá»± quan tâm của bạn. + off_html: Nó không chứa các ý kiến nhÆ° bài đánh giá, những gì không + hoặc không còn tồn tại, hoặc thông tin từ các nguồn giữ bản quyền. Bạn phải + xin phép của nhà giữ bản quyền mới được sao chép từ bản đồ giấy hay bản + đồ trá»±c tuyến khác. + basic_terms: + title: Thuật ngữ CÆ¡ bản + paragraph_1_html: 'Đây là những thuật ngữ thường gặp khi sá»­ dụng và đóng góp + vào OpenStreetMap:' + editor_html: Trình vẽ là một ứng dụng hoặc trang Web cho + phép sá»­a đổi bản đồ. + node_html: Nốt là một địa điểm trên bản đồ, thí dụ một nhà + hàng hoặc một cái cây. + way_html: Lối là một đường kẻ hoặc vùng, thí dụ con đường, + dòng nước, hồ nước, hoặc tòa nhà. + tag_html: Thẻ là một chi tiết về một nốt hoặc lối, thí dụ + tên của một nhà hàng hoặc tốc độ tối đa của một con đường. + rules: + title: Quy định! + paragraph_1_html: "OpenStreetMap có ít quy định chính thức, nhÆ°ng chúng ta + mong muốn tất cả mọi người tham gia mà cộng tác và giao thiệp với cộng đồng. + Nếu bạn tính hoạt động ngoài việc sá»­a đổi thủ công, xin vui lòng đọc và + tuân theo các hướng dẫn về việc nhập + và \ntá»± + động sá»­a đổi." + questions: + title: Có thắc mắc? + paragraph_1_html: |- + OpenStreetMap có nhiều tài nguyên để cho bạn tìm hiểu về dá»± án, hỏi đáp, và cộng tác soạn thảo tài liệu về các đề tài bản đồ. + Nhận trợ giúp tại đây. + start_mapping: Bắt đầu Đóng góp + add_a_note: + title: Không có Thì giờ Sá»­a đổi? Thêm một Ghi chú! + paragraph_1_html: Nếu bạn chỉ muốn sá»­a một chi tiết nhỏ và không có thì giờ + tập sá»­a đổi, bạn có thể thêm một ghi chú dễ dàng. + paragraph_2_html: |- + Chỉ việc mở bản đồ và bấm hình ghi chú + để thả đinh ghim trên bản đồ. Kéo ghim vào đúng vị trí, ghi lời miêu tả vấn đề, và bấm “Thêm Ghi chú”. Cộng đồng sẽ cố gắng sá»­a theo ý của bạn. trace: visibility: private: Bí mật (chỉ hiển thị các điểm vô danh không có thứ tá»±) @@ -1553,6 +1556,7 @@ vi: trace_header: upload_trace: Tải lên tuyến đường see_all_traces: Xem tất cả các tuyến đường + see_my_traces: Xem các tuyến đường của tôi traces_waiting: Bạn có %{count} tuyến đường đang chờ được tải lên. Xin hãy chờ đợi việc xong trước khi tải lên thêm tuyến đường, để cho người khác vào hàng đợi kịp. @@ -1599,6 +1603,7 @@ vi: map: bản đồ list: public_traces: Tuyến đường GPS công khai + my_traces: Tuyên đường GPS của tôi public_traces_from: Tuyến đường GPS công khai của %{user} description: Xem những tuyến đường GPS được tải lên gần đây tagged_with: ' có thẻ %{tags}' @@ -1635,7 +1640,7 @@ vi: giao diện Web để đọc các Điều khoản Đóng góp. Bạn không cần phải chấp nhận các điều khoản nhÆ°ng ít nhất phải đọc chúng. oauth: - oauthorize: + authorize: title: Cho phép truy cập tài khoản của bạn request_access: ChÆ°Æ¡ng trình %{app_name} xin phép truy cập tài khoản của bạn, %{user}. Xin hãy chọn những khả năng mà bạn muốn cấp cho chÆ°Æ¡ng trình này. @@ -1649,11 +1654,11 @@ vi: allow_write_gpx: tải lên tuyến đường GPS. allow_write_notes: thay đổi ghi chú. grant_access: Cấp phép Truy cập - oauthorize_success: + authorize_success: title: Yêu cầu cho phép được chấp nhận allowed: Bạn đã cho phép ứng dụng %{app_name} truy cập tài khoản của bạn. verification: Mã xác minh là %{code}. - oauthorize_failure: + authorize_failure: title: Yêu cầu cho phép bị thất bại denied: Bạn đã từ chối ứng dụng %{app_name} không được phép truy cập tài khoản của bạn. @@ -1898,6 +1903,7 @@ vi: if set location: Đặt vị trí nhà tại trang %{settings_link} để xem những người dùng ở gần. settings_link_text: tùy chọn + my friends: Bạn bè của tôi no friends: Bạn chÆ°a thêm bạn bè. km away: cách %{count} km m away: cách %{count} m @@ -2081,6 +2087,8 @@ vi: not_a_role: Chuỗi “%{role}” không phải là vai trò hợp lệ. already_has_role: Người dùng đã có vai trò %{role}. doesnt_have_role: Người dùng không có vai trò %{role}. + not_revoke_admin_current_user: Không thể rút quyền quản lý viên từ người dùng + hiện tại. grant: title: Xác nhận cấp vai trò heading: Xác nhận cấp vai trò @@ -2095,7 +2103,7 @@ vi: confirm: Xác nhận fail: Không thể rút vai trò “%{role}” của người dùng “%{name}”. Vui lòng kiểm tra rằng tên người dùng và vai trò đều hợp lệ. - user_block: + user_blocks: model: non_moderator_update: Chỉ có các điều hành viên được phép cấm hay cập nhật tác vụ cấm. @@ -2155,20 +2163,6 @@ vi: revoke: Bỏ cấm! flash: Đã bỏ cấm. period: '%{count} giờ' - partial: - show: Hiện - edit: Sá»­a đổi - revoke: Bỏ cấm! - confirm: Bạn có chắc không? - display_name: Người bị cấm - creator_name: Người cấm - reason: Lý do cấm - status: Trạng thái - revoker_name: Người bỏ cấm - not_revoked: (không bị hủy) - showing_page: Trang %{page} - next: Sau » - previous: « Trước helper: time_future: Hết hạn %{time}. until_login: Có hiệu lá»±c cho đến khi người dùng đăng nhập. @@ -2198,8 +2192,22 @@ vi: back: Xem tất cả tác vụ cấm revoker: 'Người bỏ cấm:' needs_view: Người dùng cần phải đăng nhập trước khi bỏ cấm được. - note: - description: + block: + not_revoked: (không bị hủy) + show: Hiện + edit: Sá»­a đổi + revoke: Bỏ cấm! + blocks: + display_name: Người bị cấm + creator_name: Người cấm + reason: Lý do cấm + status: Trạng thái + revoker_name: Người bỏ cấm + showing_page: Trang %{page} + next: Sau » + previous: « Trước + notes: + comment: opened_at_html: Được tạo cách đây %{when} opened_at_by_html: Được %{user} tạo cách đây %{when} commented_at_html: Được cập nhật cách đây %{when} @@ -2300,6 +2308,9 @@ vi: intro: Bản đồ có thiếu gì hay sai lầm không? Hãy báo cho chúng tôi để chúng tôi sá»­a chữa bản đồ. Chỉ việc kéo ghim vào vị trí đúng và viết lời giải thích vấn đề. + advice: Ghi chú của bạn được hiển thị công khai và có thể được sá»­ dụng để + cập nhật bản đồ. Xin đừng ghi thông tin cá nhân hoặc thông tin lấy từ bản + đồ hay danh bạ có bản quyền. add: Thêm Ghi chú show: anonymous_warning: Ghi chú này có bình luận của người dùng vô danh đóng góp; @@ -2326,11 +2337,16 @@ vi: distance: Tầm xa errors: no_route: Không tìm thấy tuyến đường giữa hai địa điểm này. - no_place: Rất tiếc, không tìm thấy địa điểm này. + no_place: Rất tiếc, không tìm thấy “%{place}”. instructions: continue_without_exit: Chạy tiếp trên %{name} slight_right_without_exit: Nghiêng về bên phải vào %{name} offramp_right: Đi đường nhánh bên phải + offramp_right_with_exit: Đi theo lối ra %{exit} bên phải + offramp_right_with_exit_name: Đi theo lối ra %{exit} bên phải vào %{name} + offramp_right_with_exit_directions: Đi theo lối ra %{exit} bên phải về %{directions} + offramp_right_with_exit_name_directions: Đi theo lối ra %{exit} bên phải vào + %{name} về %{directions} offramp_right_with_name: Đi đường nhánh bên phải vào %{name} offramp_right_with_directions: Đi đường nhánh bên phải về %{directions} offramp_right_with_name_directions: Đi đường nhánh bên phải vào %{name} về @@ -2339,6 +2355,7 @@ vi: onramp_right_with_directions: Quẹo phải vào đường nhánh về %{directions} onramp_right_with_name_directions: Quẹo phải vào đường nhánh %{name} về %{directions} onramp_right_without_directions: Quẹo phải vào đường nhánh + onramp_right: Quẹo phải vào đường nhánh endofroad_right_without_exit: Tới cuối đường quẹo phải vào %{name} merge_right_without_exit: Nhập sang phải vào %{name} fork_right_without_exit: Tới ngã ba quẹo phải vào %{name} @@ -2348,6 +2365,11 @@ vi: sharp_left_without_exit: Quẹo gắt bên trái vào %{name} turn_left_without_exit: Quẹo trái vào %{name} offramp_left: Đi đường nhánh bên trái + offramp_left_with_exit: Đi theo lối ra %{exit} bên trái + offramp_left_with_exit_name: Đi theo lối ra %{exit} bên trái vào %{name} + offramp_left_with_exit_directions: Đi theo lối ra %{exit} bên trái về %{directions} + offramp_left_with_exit_name_directions: Đi theo lối ra %{exit} bên trái vào + %{name} về %{directions} offramp_left_with_name: Đi đường nhánh bên trái vào %{name} offramp_left_with_directions: Đi đường nhánh bên trái về %{directions} offramp_left_with_name_directions: Đi đường nhánh bên trái vào %{name} về @@ -2356,6 +2378,7 @@ vi: onramp_left_with_directions: Quẹo trái vào đường nhánh về %{directions} onramp_left_with_name_directions: Quẹo trái vào đường nhánh %{name} về %{directions} onramp_left_without_directions: Quẹo trái vào đường nhánh + onramp_left: Quẹo trái vào đường nhánh endofroad_left_without_exit: Tới cuối đường quẹo trái vào %{name} merge_left_without_exit: Nhập sang trái vào %{name} fork_left_without_exit: Tới ngã ba quẹo trái vào %{name} @@ -2392,7 +2415,7 @@ vi: show_address: Xem địa chỉ query_features: Thăm dò yếu tố centre_map: Tập trung bản đồ tại đây - redaction: + redactions: edit: description: Miêu tả heading: Sá»­a đổi dãy ẩn diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 88241bdae..7872eaf22 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -260,7 +260,7 @@ zh-CN: list: title: 修改集合 title_user: '%{user} 的修改集合' - title_friend: 您的朋友的修改集合 + title_friend: 由我的朋友所做的修改集合 title_nearby: 附近用户的修改集合 empty: 没有找到修改集合。 empty_area: 该区域内没有修改集合。 @@ -289,7 +289,7 @@ zh-CN: user_title: '%{user} 的日记' in_language_title: '%{language}日记文章' new: 新日记文章 - new_title: 在您的用户日记中撰写新文章 + new_title: 在我的用户日记中撰写新文章 no_entries: 没有日记文章 recent_entries: 最近的日记文章 older_entries: 更老的文章 @@ -353,48 +353,6 @@ zh-CN: ago: '%{ago} 前' newer_comments: 新评论 older_comments: 旧评论 - export: - title: 导出 - start: - area_to_export: 要导出的区域 - manually_select: 手动选择不同的区域 - format_to_export: 要导出的格式 - osm_xml_data: OpenStreetMap XML 数据 - map_image: 地图图像 (显示标准图层) - embeddable_html: 可嵌入HTML - licence: 许可协议 - export_details: OpenStreetMap 数据采用开放数据共享开放数据库许可协议 - (ODbL)授权。 - too_large: - advice: 如果用上面的导出工具失败了,请考虑使用下面列出的来源来导出: - body: 该区域过大,不能导出为 OpenStreetMap XML 数据。请放大地图或选择一个更小的区域,或使用以下大量数据下载来源之一: - planet: - title: OSM 星球 - description: 定期更新的完整 OpenStreetMap 数据库副本 - overpass: - title: Overpass API - description: 从 OpenStreetMap 数据库的一个镜像下载此限定边框 - geofabrik: - title: Geofabrik 下载 - description: 定期更新的洲、 国家和特定城市的摘录 - metro: - title: 大都市摘录 - description: 世界主要城市和周边地区的摘录 - other: - title: 其他来源 - description: OpenStreetMap wiki 上列出的其他来源 - options: 选项 - format: 格式 - scale: 比例 - max: 最大 - image_size: 图像尺寸 - zoom: 缩放 - add_marker: 添加标记至地图 - latitude: 纬度: - longitude: 经度: - output: 输出 - paste_html: 粘贴可嵌入网站的 HTML - export_button: 导出 geocoder: search: title: @@ -1041,173 +999,6 @@ zh-CN: text: 捐款 learn_more: 了解更多 more: 更多 - license_page: - foreign: - title: 关于本译文 - text: 当该翻译页面与%{english_original_link}冲突时,英语页面会被优先采用 - english_link: 英语原文 - native: - title: 关于本页面 - text: 您正在查看英语版本的著作权页面。您可以返回该页面的%{native_link},或停止阅读著作权信息并%{mapping_link}。 - native_link: 简体中文版本 - mapping_link: 开始绘制地图 - legal_babble: - title_html: 著作权与许可 - intro_1_html: |- - OpenStreetMap®æ˜¯å¼€æ”¾æ•°æ®ï¼Œç”±OpenStreetMap基金会(OSMF)采用开放数据共享开放数据库许可协议(ODbL)授权。 - intro_2_html: 只要您表明来源为 OpenStreetMap 及其贡献者,您就可以自由地复制、分发、传送和改编我们的数据。如果您想转换或者以我们的数据为基础进行创作,您只能采用相同的许可协议发表您的作品。完整的法律文本阐明了您的权利和义务。 - intro_3_html: 我们的地图图块中的绘图数据以及我们的文档采用知识共享“署名-相同方式共享 - 2.0”许可协议授权。 - credit_title_html: 如何表明作者是 OpenStreetMap - credit_1_html: 我们需要您署名“© OpenStreetMap 贡献者”。 - credit_2_html: 您必须明确注明,我们的数据使用开放式数据库协议,若使用我们的地图图块,其协议须为 CC-BY-SA。您可以链接此版权页以注明。另外,若您要以数据形式发布 - OSM,您可以属名并直接链接协议。若某些媒介无法进行链接(如印刷品),我们建议您引导您的读者至 openstreetmap.org (或 OpenStreetMap - 的完整网址)、opendatacommons.org,及可能相关的 creativecommons.org。 - credit_3_html: |- - 对于可浏览的电子地图,标记会出现在地图的右下角。 - 例如: - attribution_example: - alt: 如何在网页上署名 OpenStreetMap 的示例 - title: 署名示例 - more_title_html: 了解更多 - more_1_html: |- - 请在OSMF许可协议页面阅读更多关于使用我们的数据,以及如何表明我们是作者的信息。 - more_2_html: 尽管 OpenStreetMap 开放数据,但是我们无法为第三方提供免费的地图 API。详见我们的 API使用政策、地图图块使用政策及名称服务使用政策。 - contributors_title_html: 我们的贡献者 - contributors_intro_html: 我们的数据来源于成千上万人的贡献。但我们也从国家测绘机构等处获取公共版权的数据,其中包括: - contributors_at_html: 奥地利:包含来自 Stadt - Wien(CC - BY协议)、Land - Vorarlberg及 Land Tirol (修订的 CC-BY - AT协议)的数据。 - contributors_ca_html: 加拿大:含有来自 GeoBase®ï¼ŒGeoGratis(© - 加拿大自然资源部),CanVec (© 加拿大自然资源部)和StatCan (加拿大统计局地理处)的数据。 - contributors_fi_html: 芬兰:包含来自芬兰国家测绘局地形数据库和其他测绘机构的数据,依据 NLSFI - 协议授权。 - contributors_fr_html: 法国:含有来自 Direction Générale des Impôts - 的数据。 - contributors_nl_html: 荷兰:含有© AND data, 2007(www.and.com) - contributors_nz_html: 新西兰:包含来自新西兰土地信息部的数据。Crown 版权所有。 - contributors_si_html: |- - 斯洛文尼亚:包含来自 - Surveying and Mapping Authority和 - Ministry of Agriculture, Forestry and Food(斯洛文尼亚公开信息)的数据。 - contributors_za_html: 南非:包含来自行政局:国家地球空间信息,国家版权所有。 - contributors_gb_html: 英国:包含来自 Ordnance 的调查数据,© Crown 版权所有及数据库权利,2010-12。 - contributors_footer_1_html: |- - 关于其进一步的细节,及其他被用来帮助提升 OpenStreetMap 的来源,详见 OpenStreetMap Wiki 的贡献者页面。 - contributors_footer_2_html: OpenStreetMap 纳入数据并不意味着原始数据提供者认可 OpenStreetMap、提供任何担保或担负任何法律责任。 - infringement_title_html: 著作权侵犯 - infringement_1_html: OSM 的贡献者会被提醒,绝不要在没有著作权人的明确许可时添加来自任何有著作权的来源的数据(如谷歌地图或印刷地图)。 - infringement_2_html: 如果您认为版权的材料已被不恰当地添加的 OpenStreetMap 数据库或该网站,请参见我们的撤除程序,或直接在我们的在线申报页面上提出。 - trademarks_title_html: 商标 - trademarks_1_html: OpenStreetMap、放大镜标志和地图状态是OpenStreetMap基金会的注册商标。如果您对使用这些标志有任何问题,请参见我们的商标方针。 - welcome_page: - title: 欢迎! - introduction_html: 欢迎访问 OpenStreeMap,自由且可编辑的世界地图。您已经登录,可以开始绘制地图。这里是含有您需要知道的最重要的信息的快速指南。 - whats_on_the_map: - title: 地图上有什么 - on_html: OpenStreetMap 是一个真实且最新的地图,它包含数百万的建筑、道路以及其他的位置细节。您基本可以编辑现实世界中您感兴趣的任何东西。 - off_html: 当然它不包含一些激进的数据,譬如评分、历史或者假设的特征,以及有版权的来源。除非您具有特殊权利,否则不要复制在线的或者纸质地图。 - basic_terms: - title: 绘制地图的基本术语 - paragraph_1_html: OpenStreetMap 有一些自己的术语。这里是一些常用的关键词。 - editor_html: 编辑器是您可以用于编辑地图的程序或网站。 - node_html: 节点是地图上的点,例如一个餐馆或一棵树。 - way_html: 路径是线或区域,例如一条路、一条溪、一个湖或一个建筑物。 - tag_html: 标签是关于节点或路径的简短数据,例如餐馆的名字或者道路的速度限制。 - rules: - title: 规则! - paragraph_1_html: OpenStreetMap很少有正式规则,但我们期待所有参与者能合作,并与社区沟通。如果您在考虑任何除手工编辑的活动,请阅读并遵守导入和自动编辑的指导。 - questions: - title: 还有疑问吗? - paragraph_1_html: OpenStreetMap 有若干资源用于学习该项目,提问和回答问题,以及讨论与制作地图相关的话题并且撰写相关文档。点此获取帮助。 - start_mapping: 开始绘制地图 - add_a_note: - title: 没有时间编辑?添加笔记! - paragraph_1_html: 如果您这是想做一些微小改动而没有时间登录来学习如何编辑,那做一些笔记是非常容易的。 - paragraph_2_html: 只要去地图并单击笔记图标:。这将在地图上添加一个标记,您可以拖动它,并添加您的笔记,然后单击保存,其他人可以确认是否正确。 - fixthemap: - title: 报告问题/修正地图 - how_to_help: - title: 如何帮助 - join_the_community: - title: 加入社区 - explanation_html: 如果您发现我们的地图数据有问题,例如缺少某条道路或者您的地址,最好的处理方法就是加入 OpenStreetMap - 社区,然后您自己添加或者改进数据。 - add_a_note: - instructions_html: 只需点击或地图上显示的相同图标。这将向地图加入书签,您也可以拖动移除它。加入您的信息,之后点击保存,其他映射也将用于研究。 - other_concerns: - title: 其他问题 - explanation_html: 如果您有关于如何使用我们的数据或内容的关心请查阅我们在版权页面的更多法律信息,或联系 - OSMF 工作组。 - help_page: - title: 获得帮助 - introduction: OpenStreetMap 有若干资源用于学习该项目,提问和回答问题,以及讨论与制作地图相关的话题并且撰写相关文档。 - welcome: - url: /welcome - title: 欢迎访问 OSM - description: 本快速指南涵盖了快速入门 OpenStreetMap 的基本知识。 - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Zh-hans:Beginners%27_guide - title: 初学者指南 - description: 社群维护的新手指南。 - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: 在 OSM 的问答网站提问或查找回答。 - mailing_lists: - title: 邮件列表 - description: 询问问题或在广泛或局部的邮件列表中讨论有趣事件 - forums: - title: 论坛 - description: 面向更喜欢电子公告栏样式界面的用户的问题和讨论。 - irc: - title: IRC - description: 在很多不同的语言和在很多话题间交互聊天。 - switch2osm: - title: switch2osm - description: 协助公司与组织改用 OpenStreetMap 为基础的地图与相关服务。 - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: 浏览 wiki 深入了解 OSM 文档。 - about_page: - next: 下一页 - copyright_html: ©OpenStreetMap
        贡献者 - used_by: '%{name} 驱动了数以千计的网站,移动应用,以及硬件设备的地图数据。' - lede_text: OpenStreetMap 是一个由地图制作爱好者组成的社区。这些爱好者提供并维护世界各地关于道路、小道、咖啡馆、铁路车站等各种各样的数据。 - local_knowledge_title: 本地知识库 - local_knowledge_html: OpenStreetMap 强调使用本地知识。贡献者们使用航空图像、GPS 设备与传统的地区地图来确保 OSM - 的精确性和时效性。 - community_driven_title: 社区驱动 - community_driven_html: OpenStreetMap 是一个多元化的社区,它充满激情,并且每天都在成长。我们的参与者包括地图制作爱好者,地理信息系统(GIS)从业人员,维护 - OSM 服务器的工程师,标注灾害区域的人道主义自愿者,已经其他很多各界人士。想更多的了解社区请参见OpenStreetMap博客、用户日记、社区博客,以及 - OSM 基金会网站。 - open_data_title: 开放数据 - open_data_html: OpenStreetMap 是开源数据:只要您表明使用了 OpenStreetMap 并承认其贡献者的工作,您就可以使用 - OpenStreetMap。如果您改变或者使用这些数据,您必须按照相同的版权协议发布结果。详情请参见版权协议。 - legal_title: 法律 - legal_html: |- - 此网站和很多其他相关服务已由OpenStreetMap基金会(OSMF)正式代表社群运营。使用所有由OSMF运营的服务均需符合我们的 - 可接受使用方针和我们的隐私政策 -
        - 如果您有许可协议、版权或其他法律问题,请联络OSMF。 -
        - OpenStreetMap、放大镜标志和地图状态是OSMF的注册商标。 - partners_title: 合作伙伴 notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} 在日记项目留下了评论' @@ -1362,6 +1153,103 @@ zh-CN: delete: deleted: 消息已删除 site: + about: + next: 下一页 + copyright_html: ©OpenStreetMap
        贡献者 + used_by: '%{name} 驱动了数以千计的网站,移动应用,以及硬件设备的地图数据。' + lede_text: OpenStreetMap 是一个由地图制作爱好者组成的社区。这些爱好者提供并维护世界各地关于道路、小道、咖啡馆、铁路车站等各种各样的数据。 + local_knowledge_title: 本地知识库 + local_knowledge_html: OpenStreetMap 强调使用本地知识。贡献者们使用航空图像、GPS 设备与传统的地区地图来确保 OSM + 的精确性和时效性。 + community_driven_title: 社区驱动 + community_driven_html: OpenStreetMap 是一个多元化的社区,它充满激情,并且每天都在成长。我们的参与者包括地图制作爱好者,地理信息系统(GIS)从业人员,维护 + OSM 服务器的工程师,标注灾害区域的人道主义自愿者,已经其他很多各界人士。想更多的了解社区请参见OpenStreetMap博客、用户日记、社区博客,以及 + OSM 基金会网站。 + open_data_title: 开放数据 + open_data_html: OpenStreetMap 是开源数据:只要您表明使用了 OpenStreetMap 并承认其贡献者的工作,您就可以使用 + OpenStreetMap。如果您改变或者使用这些数据,您必须按照相同的版权协议发布结果。详情请参见版权协议。 + legal_title: 法律 + legal_html: |- + 此网站和很多其他相关服务已由OpenStreetMap基金会(OSMF)正式代表社群运营。使用所有由OSMF运营的服务均需符合我们的 + 可接受使用方针和我们的隐私政策 +
        + 如果您有许可协议、版权或其他法律问题,请联络OSMF。 +
        + OpenStreetMap、放大镜标志和地图状态是OSMF的注册商标。 + partners_title: 合作伙伴 + copyright: + foreign: + title: 关于本译文 + text: 当该翻译页面与%{english_original_link}冲突时,英语页面会被优先采用 + english_link: 英语原文 + native: + title: 关于本页面 + text: 您正在查看英语版本的著作权页面。您可以返回该页面的%{native_link},或停止阅读著作权信息并%{mapping_link}。 + native_link: 简体中文版本 + mapping_link: 开始绘制地图 + legal_babble: + title_html: 著作权与许可 + intro_1_html: |- + OpenStreetMap®æ˜¯å¼€æ”¾æ•°æ®ï¼Œç”±OpenStreetMap基金会(OSMF)采用开放数据共享开放数据库许可协议(ODbL)授权。 + intro_2_html: 只要您表明来源为 OpenStreetMap 及其贡献者,您就可以自由地复制、分发、传送和改编我们的数据。如果您想转换或者以我们的数据为基础进行创作,您只能采用相同的许可协议发表您的作品。完整的法律文本阐明了您的权利和义务。 + intro_3_html: 我们的地图图块中的绘图数据以及我们的文档采用知识共享“署名-相同方式共享 + 2.0”许可协议授权。 + credit_title_html: 如何表明作者是 OpenStreetMap + credit_1_html: 我们需要您署名“© OpenStreetMap 贡献者”。 + credit_2_html: 您必须明确注明,我们的数据使用开放式数据库协议,若使用我们的地图图块,其协议须为 CC-BY-SA。您可以链接此版权页以注明。另外,若您要以数据形式发布 + OSM,您可以属名并直接链接协议。若某些媒介无法进行链接(如印刷品),我们建议您引导您的读者至 openstreetmap.org (或 OpenStreetMap + 的完整网址)、opendatacommons.org,及可能相关的 creativecommons.org。 + credit_3_html: |- + 对于可浏览的电子地图,标记会出现在地图的右下角。 + 例如: + attribution_example: + alt: 如何在网页上署名 OpenStreetMap 的示例 + title: 署名示例 + more_title_html: 了解更多 + more_1_html: |- + 请在OSMF许可协议页面阅读更多关于使用我们的数据,以及如何表明我们是作者的信息。 + more_2_html: 尽管 OpenStreetMap 开放数据,但是我们无法为第三方提供免费的地图 API。详见我们的 API使用政策、地图图块使用政策及名称服务使用政策。 + contributors_title_html: 我们的贡献者 + contributors_intro_html: 我们的数据来源于成千上万人的贡献。但我们也从国家测绘机构等处获取公共版权的数据,其中包括: + contributors_at_html: 奥地利:包含来自 Stadt + Wien(CC + BY协议)、Land + Vorarlberg及 Land Tirol (修订的 CC-BY + AT协议)的数据。 + contributors_ca_html: 加拿大:含有来自 GeoBase®ï¼ŒGeoGratis(© + 加拿大自然资源部),CanVec (© 加拿大自然资源部)和StatCan (加拿大统计局地理处)的数据。 + contributors_fi_html: 芬兰:包含来自芬兰国家测绘局地形数据库和其他测绘机构的数据,依据 NLSFI + 协议授权。 + contributors_fr_html: 法国:含有来自 Direction Générale des Impôts + 的数据。 + contributors_nl_html: 荷兰:含有© AND data, 2007(www.and.com) + contributors_nz_html: 新西兰:包含来自新西兰土地信息部的数据。Crown 版权所有。 + contributors_si_html: |- + 斯洛文尼亚:包含来自 + Surveying and Mapping Authority和 + Ministry of Agriculture, Forestry and Food(斯洛文尼亚公开信息)的数据。 + contributors_za_html: 南非:包含来自行政局:国家地球空间信息,国家版权所有。 + contributors_gb_html: 英国:包含来自 Ordnance 的调查数据,© Crown + 版权所有及数据库权利,2010-12。 + contributors_footer_1_html: |- + 关于其进一步的细节,及其他被用来帮助提升 OpenStreetMap 的来源,详见 OpenStreetMap Wiki 的贡献者页面。 + contributors_footer_2_html: OpenStreetMap 纳入数据并不意味着原始数据提供者认可 OpenStreetMap、提供任何担保或担负任何法律责任。 + infringement_title_html: 著作权侵犯 + infringement_1_html: OSM 的贡献者会被提醒,绝不要在没有著作权人的明确许可时添加来自任何有著作权的来源的数据(如谷歌地图或印刷地图)。 + infringement_2_html: 如果您认为版权的材料已被不恰当地添加的 OpenStreetMap 数据库或该网站,请参见我们的撤除程序,或直接在我们的在线申报页面上提出。 + trademarks_title_html: 商标 + trademarks_1_html: OpenStreetMap、放大镜标志和地图状态是OpenStreetMap基金会的注册商标。如果您对使用这些标志有任何问题,请参见我们的商标方针。 index: js_1: 您或许正在使用不支持 JavaScript 的浏览器,或您禁用了 JavaScript。 js_2: OpenStreetMap 使用 JavaScript 让地图更平滑。 @@ -1386,6 +1274,96 @@ zh-CN: potlatch2_unsaved_changes: 您有尚未保存的修改。(要在 Potlatch 2 中保存,您应该点击保存。) id_not_configured: iD 尚未配置 no_iframe_support: 您的浏览器不支持 HTML 嵌入式框架,这是此功能所需要的。 + export: + title: 导出 + area_to_export: 要导出的区域 + manually_select: 手动选择不同的区域 + format_to_export: 要导出的格式 + osm_xml_data: OpenStreetMap XML 数据 + map_image: 地图图像 (显示标准图层) + embeddable_html: 可嵌入HTML + licence: 许可协议 + export_details: OpenStreetMap 数据采用开放数据共享开放数据库许可协议 + (ODbL)授权。 + too_large: + advice: 如果用上面的导出工具失败了,请考虑使用下面列出的来源来导出: + body: 该区域过大,不能导出为 OpenStreetMap XML 数据。请放大地图或选择一个更小的区域,或使用以下大量数据下载来源之一: + planet: + title: OSM 星球 + description: 定期更新的完整 OpenStreetMap 数据库副本 + overpass: + title: Overpass API + description: 从 OpenStreetMap 数据库的一个镜像下载此限定边框 + geofabrik: + title: Geofabrik 下载 + description: 定期更新的洲、 国家和特定城市的摘录 + metro: + title: 大都市摘录 + description: 世界主要城市和周边地区的摘录 + other: + title: 其他来源 + description: OpenStreetMap wiki 上列出的其他来源 + options: 选项 + format: 格式 + scale: 比例 + max: 最大 + image_size: 图像尺寸 + zoom: 缩放 + add_marker: 添加标记至地图 + latitude: 纬度: + longitude: 经度: + output: 输出 + paste_html: 粘贴可嵌入网站的 HTML + export_button: 导出 + fixthemap: + title: 报告问题/修正地图 + how_to_help: + title: 如何帮助 + join_the_community: + title: 加入社区 + explanation_html: 如果您发现我们的地图数据有问题,例如缺少某条道路或者您的地址,最好的处理方法就是加入 OpenStreetMap + 社区,然后您自己添加或者改进数据。 + add_a_note: + instructions_html: 只需点击或地图上显示的相同图标。这将向地图加入书签,您也可以拖动移除它。加入您的信息,之后点击保存,其他映射也将用于研究。 + other_concerns: + title: 其他问题 + explanation_html: 如果您有关于如何使用我们的数据或内容的关心请查阅我们在版权页面的更多法律信息,或联系 + OSMF 工作组。 + help: + title: 获得帮助 + introduction: OpenStreetMap 有若干资源用于学习该项目,提问和回答问题,以及讨论与制作地图相关的话题并且撰写相关文档。 + welcome: + url: /welcome + title: 欢迎访问 OSM + description: 本快速指南涵盖了快速入门 OpenStreetMap 的基本知识。 + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Zh-hans:Beginners%27_guide + title: 初学者指南 + description: 社群维护的新手指南。 + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: 在 OSM 的问答网站提问或查找回答。 + mailing_lists: + url: http://lists.openstreetmap.org/ + title: 邮件列表 + description: 询问问题或在广泛或局部的邮件列表中讨论有趣事件 + forums: + url: http://forum.openstreetmap.org/ + title: 论坛 + description: 面向更喜欢电子公告栏样式界面的用户的问题和讨论。 + irc: + url: http://irc.openstreetmap.org/ + title: IRC + description: 在很多不同的语言和在很多话题间交互聊天。 + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: 协助公司与组织改用 OpenStreetMap 为基础的地图与相关服务。 + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: 浏览 wiki 深入了解 OSM 文档。 sidebar: search_results: 搜索结果 close: 关闭 @@ -1487,6 +1465,34 @@ zh-CN: image: 图像 alt: 替代文本 url: URL + welcome: + title: 欢迎! + introduction_html: 欢迎访问 OpenStreeMap,自由且可编辑的世界地图。您已经登录,可以开始绘制地图。这里是含有您需要知道的最重要的信息的快速指南。 + whats_on_the_map: + title: 地图上有什么 + on_html: OpenStreetMap 是一个真实且最新的地图,它包含数百万的建筑、道路以及其他的位置细节。您基本可以编辑现实世界中您感兴趣的任何东西。 + off_html: 当然它不包含一些激进的数据,譬如评分、历史或者假设的特征,以及有版权的来源。除非您具有特殊权利,否则不要复制在线的或者纸质地图。 + basic_terms: + title: 绘制地图的基本术语 + paragraph_1_html: OpenStreetMap 有一些自己的术语。这里是一些常用的关键词。 + editor_html: 编辑器是您可以用于编辑地图的程序或网站。 + node_html: 节点是地图上的点,例如一个餐馆或一棵树。 + way_html: 路径是线或区域,例如一条路、一条溪、一个湖或一个建筑物。 + tag_html: 标签是关于节点或路径的简短数据,例如餐馆的名字或者道路的速度限制。 + rules: + title: 规则! + paragraph_1_html: OpenStreetMap很少有正式规则,但我们期待所有参与者能合作,并与社区沟通。如果您在考虑任何除手工编辑的活动,请阅读并遵守导入和自动编辑的指导。 + questions: + title: 还有疑问吗? + paragraph_1_html: OpenStreetMap 有若干资源用于学习该项目,提问和回答问题,以及讨论与制作地图相关的话题并且撰写相关文档。点此获取帮助。 + start_mapping: 开始绘制地图 + add_a_note: + title: 没有时间编辑?添加笔记! + paragraph_1_html: 如果您这是想做一些微小改动而没有时间登录来学习如何编辑,那做一些笔记是非常容易的。 + paragraph_2_html: 只要去地图并单击笔记图标:。这将在地图上添加一个标记,您可以拖动它,并添加您的笔记,然后单击保存,其他人可以确认是否正确。 trace: visibility: private: 私有 (只以匿名分享,无顺序的点) @@ -1528,6 +1534,7 @@ zh-CN: trace_header: upload_trace: 上传轨迹 see_all_traces: 查看所有轨迹 + see_my_traces: 查看我的轨迹 traces_waiting: 您有 %{count} 条轨迹正等待上传,请在上传更多轨迹前等待这些传完,以确保不会给其他用户造成队列拥堵。 trace_optionals: tags: 标签 @@ -1550,6 +1557,7 @@ zh-CN: delete_track: 删除这条轨迹 trace_not_found: 未找到轨迹! visibility: 可见性: + confirm_delete: 删除这条轨迹么? trace_paging_nav: showing_page: 第 %{page} 页 older: 较旧轨迹 @@ -1572,6 +1580,7 @@ zh-CN: map: 地图 list: public_traces: 公开 GPS 轨迹 + my_traces: 我的GPS轨迹 public_traces_from: 来自 %{user} 的公开 GPS 轨迹 description: 浏览最近的GPS踪迹上传 tagged_with: 以 %{tags} 标记 @@ -1603,7 +1612,7 @@ zh-CN: blocked: 您对 API 的访问已经被阻挡了。请登录到网站以了解更多信息。 need_to_see_terms: 您对 API 的访问已暂时中止。请登录到网站以查看贡献者条款。您不需要同意,但必须查看它们。 oauth: - oauthorize: + authorize: title: 授权访问您的账户 request_access: '%{user},应用程序 %{app_name} 要求访问您的帐户。请确定您要让此应用程序使用下列功能。您可以按照自己的意思选择几个。' allow_to: 允许客户应用程序: @@ -1615,11 +1624,11 @@ zh-CN: allow_write_gpx: 上传 GPS 轨迹。 allow_write_notes: 修改笔记。 grant_access: 授予访问权 - oauthorize_success: + authorize_success: title: 已允许授权申请 allowed: 您已授权 %{app_name} 应用访问您的账户。 verification: 验证码为 %{code}。 - oauthorize_failure: + authorize_failure: title: 授权请求失败 denied: 您已经拒绝应用程序 %{app_name} 访问您的账户。 invalid: 授权令牌无效。 @@ -1837,6 +1846,7 @@ zh-CN: user location: 用户位置 if set location: 如果您设定您的位置,一张精美的地图及其他相关信息将出现在下方。您可以通过您的%{settings_link}页面来设置您的位置。 settings_link_text: 设置 + my friends: 我的朋友 no friends: 您还没有添加任何好友。 km away: '%{count} 千米远' m away: '%{count} 米远' @@ -2014,7 +2024,7 @@ zh-CN: are_you_sure: 您确定要吊销用户 '%{name}' 角色 '%{role}' 吗? confirm: 确认 fail: 无法吊销用户 '%{name}' 角色 '%{role}'。请检查用户和角色是否都正确。 - user_block: + user_blocks: model: non_moderator_update: 必须为管理员才能创建或更新一个封禁。 non_moderator_revoke: 必须为管理员才能撤消块。 @@ -2065,20 +2075,6 @@ zh-CN: period: one: 1 小时 other: '%{count} 小时' - partial: - show: 显示 - edit: 编辑 - revoke: 撤销! - confirm: 您确定吗? - display_name: 封禁的用户 - creator_name: 创建者 - reason: 封禁的原因 - status: 状态 - revoker_name: 撤销者 - not_revoked: (未撤销) - showing_page: 第 %{page} 页 - next: 下一页 » - previous: « 上一页 helper: time_future: 结束于 %{time}。 until_login: 用户登录时激活。 @@ -2108,8 +2104,22 @@ zh-CN: back: 查看所有封禁 revoker: 撤销者: needs_view: 用户需要在该封禁清除前登录。 - note: - description: + block: + not_revoked: (未撤销) + show: 显示 + edit: 编辑 + revoke: 撤销! + blocks: + display_name: 封禁的用户 + creator_name: 创建者 + reason: 封禁的原因 + status: 状态 + revoker_name: 撤销者 + showing_page: 第 %{page} 页 + next: 下一页 » + previous: « 上一页 + notes: + comment: opened_at_html: 于 %{when} 前创建 opened_at_by_html: '%{user} 于 %{when} 前创建' commented_at_html: 于 %{when} 前更新 @@ -2233,7 +2243,7 @@ zh-CN: distance: 距离 errors: no_route: 找不到那两个地方之间的路径。 - no_place: 抱歉——找不到那个地方。 + no_place: 对不起——无法定位“%{place}”。 instructions: continue_without_exit: 在%{name}上直走 slight_right_without_exit: 稍向右转至%{name} @@ -2249,6 +2259,7 @@ zh-CN: onramp_right_with_directions: 向右侧斜坡拐去,往%{directions}方向 onramp_right_with_name_directions: 上坡右转至%{name},往%{directions}方向 onramp_right_without_directions: 右转至坡道上 + onramp_right: 右转至坡道上 endofroad_right_without_exit: 在道路尽头右转至%{name} merge_right_without_exit: 向右并线至%{name} fork_right_without_exit: 在交叉口右转至%{name} @@ -2269,6 +2280,7 @@ zh-CN: onramp_left_with_directions: 向左侧斜坡拐去,往%{directions}方向 onramp_left_with_name_directions: 上坡左转至%{name},往%{directions}方向 onramp_left_without_directions: 左转至坡道上 + onramp_left: 左转至坡道上 endofroad_left_without_exit: 在道路尽头左转至%{name} merge_left_without_exit: 向左并线至%{name} fork_left_without_exit: 在交叉口左转至%{name} @@ -2305,7 +2317,7 @@ zh-CN: show_address: 显示地址 query_features: 查询要素 centre_map: 在此将地图放在中间 - redaction: + redactions: edit: description: 说明 heading: 编辑修订 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index f50219488..61073a33c 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -22,6 +22,7 @@ # Author: Pesder # Author: Reke # Author: Ruila +# Author: Sanmosa # Author: Shangkuanlc # Author: Simon Shek # Author: StephDC @@ -64,7 +65,7 @@ zh-TW: trace: 軌跡 tracepoint: 軌跡點 tracetag: 軌跡標籤 - user: 使用者 + user: 用戶 user_preference: 使用者偏好設定 user_token: 使用者權杖 way: 路徑 @@ -74,16 +75,16 @@ zh-TW: diary_comment: body: 內文 diary_entry: - user: 使用者 + user: 用戶 title: 標題 latitude: 緯度 longitude: 經度 language: 語言 friend: - user: 使用者 + user: 用戶 friend: 好友 trace: - user: 使用者 + user: 用戶 visible: 可見的 name: 名稱 size: 大小 @@ -248,13 +249,13 @@ zh-TW: changesets: id: ID saved_at: 已儲存於 - user: 使用者 + user: 用戶 comment: 評論 area: 區域 list: title: 變更集 title_user: '%{user} 的變更集' - title_friend: 您好友的變更集 + title_friend: 我的好友之變更集 title_nearby: 附近使用者的變更集 empty: 查無變更集。 empty_area: 此地區沒有變更集。 @@ -283,7 +284,7 @@ zh-TW: user_title: '%{user} 的日記' in_language_title: 日記 (語言為 %{language}) new: 新增日記項目 - new_title: 在您的日記中撰寫新的項目 + new_title: 在我的使用者日記裡撰寫新內容 no_entries: 沒有日記項目 recent_entries: 最近的日記項目 older_entries: 較舊的項目 @@ -347,48 +348,6 @@ zh-TW: ago: '%{ago} 前' newer_comments: 較新的評論 older_comments: 較舊的評論 - export: - title: 匯出 - start: - area_to_export: 要匯出的區域 - manually_select: 手動選擇不同的區域 - format_to_export: 要匯出的格式 - osm_xml_data: OpenStreetMap XML 資料 - map_image: 地圖影像 (顯示標準圖層) - embeddable_html: 內嵌式 HTML - licence: 授權 - export_details: OpenStreetMap 的資料採用 Open - Data Commons 開放資料庫授權條款(ODbL)授權。 - too_large: - advice: 若以上匯出失敗,請考慮使用下列來源: - body: 這個區域太大,無法匯出 OpenStreetMap XML 資料。請放大或選擇一個較小的區域,或使用下列大量資料下載源: - planet: - title: 地球 OSM - description: 定期更新的完整 OpenStreetMap 資料庫副本 - overpass: - title: Overpass API - description: 從 OpenStreetMap 資料庫的鏡像,下載此區域 - geofabrik: - title: Geofabrik 下載 - description: 定期更新的洲、國家及特定城市之摘錄資料 - metro: - title: 都會區的摘錄資料 - description: 世界主要城市與附近地區的摘錄資料 - other: - title: 其他來源 - description: OpenStreetMap wiki 上列出的其他來源 - options: 選項 - format: 格式 - scale: 比例 - max: 最大 - image_size: 圖片大小 - zoom: 縮放 - add_marker: 在地圖加上標記 - latitude: 緯度: - longitude: 經度: - output: 輸出 - paste_html: 貼上 HTML 以於網站內嵌 - export_button: 匯出 geocoder: search: title: @@ -1031,199 +990,6 @@ zh-TW: text: 進行捐款 learn_more: 瞭解更多 more: 更多 - license_page: - foreign: - title: 關於這個翻譯 - text: 這個翻譯頁面和 %{english_original_link} 若有衝突,會以英文頁面為準 - english_link: 英文原文 - native: - title: 關於此頁 - text: 您正在檢閱英文版本的版權頁。你可以返回這個網頁的 %{native_link},您亦可以停止閱讀版權並 %{mapping_link}。 - native_link: 台灣正體中文版 - mapping_link: 開始製圖 - legal_babble: - title_html: 版權與授權條款 - intro_1_html: OpenStreetMap 為開放資料,以 - OpenStreetMap 基金會(OSMF)採用的 - Open Data Commons 開放資料庫授權條款(ODbL)授權。 - intro_2_html: |- - 您可以自由地複製、散布、傳輸及修改我們的資料,前提是您須標明作者為 OpenStreetMap 及其貢獻者。若您在我們的資料上作修改或據之衍生其他資料 - ,則只可依相同授權條款散佈有關成果。授權的法律原文詳述您的權責。 - intro_3_html: 我們地圖影像塊的製圖法以及我們的文件,以創用CC - 姓名標示-相同方式分享 (CC BY-SA) 2.0版條款授權。 - credit_title_html: 如何標明作者是 OpenStreetMap - credit_1_html: 我們要求您以“© OpenStreetMap 貢獻者”標明作者。 - credit_2_html: 您亦須清晰註明,有關資料可透過開放資料庫授權條款取得。若使用我們的影像塊,則須註明其製圖法是按 CC-BY-SA 授權。您可以透過連結至此版權頁以作註明。您亦可以指明並直接連結至授權內容 - (但若您要以資料形式發布 OSM,這是必要條件) 。在無法作出連結的媒體 (如印刷品) ,我們建議你引導你的讀者至 openstreetmap.org - (如註明 OpenStreetMap 的完整網址) 、opendatacommons.org,及 (如相關的話) creativecommons.org。 - credit_3_html: |- - 對於可瀏覽的電子地圖,標明出處的文字應放在地圖的一角。 - 例如: - attribution_example: - alt: 如何在網頁上署名 OpenStreetMap 的例子 - title: 署名的例子 - more_title_html: 尋找更多 - more_1_html: |- - 在 OSMF 授權條款頁面可閱讀更多關於使用我們的資料,以及如何標明我們是作者的資料。 - more_2_html: 雖然 OpenStreetMap 是開放資料,但我們無法為第三方提供免費的地圖 API。詳見我們的API - 使用政策、地圖影像塊使用政策及Nominatim - 服務使用政策。 - contributors_title_html: 我們的貢獻者 - contributors_intro_html: 我們的貢獻者為成千上萬的人。我們也收納了從國家測繪機構及其他來源等取得的開放版權資料,其中包括: - contributors_at_html: 奧地利:包含來自 Stadt - Wien (CC - BY授權) 、Land - Vorarlberg及 Land Tirol (修訂的CC-BY - AT授權) 的資料。 - contributors_ca_html: |- - 加拿大:包含來自 GeoBase®ï¼ŒGeoGratis (© Department of Natural - Resources Canada) ,CanVec (© Department of Natural - Resources Canada) 和 StatCan (Geography Division, - Statistics Canada) 的資料。 - contributors_fi_html: |- - 芬蘭: 包含來自 - National Land Survey of Finland's Topographic Database - 及其他資料集的資料,以 - NLSFI License 授權。 - contributors_fr_html: |- - 法國: 包含來自 - Direction Générale des Impôts 的資料。 - contributors_nl_html: |- - 荷蘭: 包含來自© AND data, 2007 - (www.and.com) 的資料。 - contributors_nz_html: |- - 紐西蘭: 包含來自 - Land Information New Zealand (Crown Copyright reserved) 的資料。 - contributors_si_html: |- - 斯洛維尼亞:包含來自Surveying and Mapping Authority和 - Ministry of Agriculture, Forestry and Food - (斯洛維尼亞公開資訊). - contributors_za_html: |- - 南非: 包含來自 - Chief Directorate: - National Geo-Spatial Information (State copyright reserved) 的資料。 - contributors_gb_html: |- - 英國: 包含來自 Ordnance - Survey data (© Crown copyright and database right - 2010-12) 的資料。 - contributors_footer_1_html: |- - 若需要進一步詳情,以及其他曾用以協助改進 - OpenStreetMap 的資料來源,請參閱 OpenStreetMap Wiki 上的貢獻者 - 頁面。 - contributors_footer_2_html: OpenStreetMap 收錄一項資料,並不意味原本的資料提供者認可 OpenStreetMap、提供任何保證或承擔任何法律責任。 - infringement_title_html: 侵犯版權 - infringement_1_html: OSM 的貢獻者會被提醒,絕不要在沒有版權所有人的明確淮許下,加入來自任何有版權的來源的資料 (如 Google - 地圖或印刷地圖)。 - infringement_2_html: 如果你認為有版權的材料被不恰當地加入到 OpenStreetMap 資料庫或此網站,請請參考我們的撤除程序,或直接在我們的網上申報頁面提出。 - trademarks_title_html: 商標 - trademarks_1_html: OpenStreetMap、放大鏡標誌和 OpenStreetMap 研討會是 OpenStreetMap 基金會的註冊商標。如果你對於使用這些商標有疑問的話,請查看我們的商標方針。 - welcome_page: - title: 歡迎! - introduction_html: 歡迎來到 OpenStreetMap,自由和可編輯的世界地圖。您目前已經登入,可以開始繪製地圖。這裡有一份您須知道最重要事項的快速指南。 - whats_on_the_map: - title: 地圖上有什麼 - on_html: |- - OpenStreetMap 是一個為真實且現存物件繪製地圖的地方 - - 它包含數以百萬計的建築物、道路以及關於位置其他詳細資料。您可以 - 在地圖上畫出任何現實世界中令您感興趣的地理特徵。 - off_html: 然而它不包含一些例如評分的主觀意見資料、歷史或假設性的地理特徵,以及有版權的來源資料。除非你獲特別許可,不要抄襲網上或印刷的地圖。 - basic_terms: - title: 繪製地圖的基本術語 - paragraph_1_html: OpenStreetMap 有自己的術語。以下是一些常用的關鍵詞。 - editor_html: 編輯器是你可以用於編輯地圖的程序或網站。 - node_html: 節點是地圖上的一個點,例如一間餐廳或一棵樹。 - way_html: 路徑是一條線或一個區域,例如一條道路、一條溪、一個湖或一棟建築物。 - tag_html: 標籤是關於節點或路徑的簡要資料,例如餐廳的名字或道路的速度限制。 - rules: - title: 規則! - paragraph_1_html: OpenStreetMap 沒有多少正式規則,除了所有參與者都得與社群合作和溝通。如果你有想過用人工以外的方式參與的話,請先熟讀和遵循匯入以及自動化編輯守則。 - questions: - title: 有任何問題嗎? - paragraph_1_html: OpenStreetMap 有一些資源,可用於學習本專案、提出和回答問題,以及討論和紀錄與製作地圖相關的話題。 按此取得說明。 - start_mapping: 開始製圖 - add_a_note: - title: 沒有時間編輯嗎?可加入註記! - paragraph_1_html: 如果你只想做一些微小改動,而沒有時間登入來學習如何編輯,那麼加入一項註記還是非常容易的。 - paragraph_2_html: 只要到地圖並點選註記圖示: 。這將在地圖上加入一個標記,你可以拖動它,並新增你的註記,然後點選儲存,其他製圖者會作出查證。 - fixthemap: - title: 回報問題/改進地圖 - how_to_help: - title: 如何協助 - join_the_community: - title: 加入社群 - explanation_html: 如果你發現我們的地圖資料有問題,例如缺少某條道路或者你的地址,最好的方法就是加入 OpenStreetMap 社群,然後自己加入或者改進資料。 - add_a_note: - instructions_html: |- - 只須點選 或地圖上的同一圖示, - 這將在地圖上加入一個標記,你可以拖動它,並新增你的註記,然後點選儲存,其他製圖者會作出查證。 - other_concerns: - title: 其他問題 - explanation_html: 如果您對我們的資料如何被應用或有關的內容有任何問題,請參閱我們的版權頁瞭解更多法律資訊,或聯絡適當的 OSMF 工作小組。 - help_page: - title: 取得協助 - introduction: OpenStreetMap 有一些資源,可用於學習本專案、提出和回答問題,以及討論和紀錄與製作地圖相關的話題。 - welcome: - url: /welcome - title: 歡迎來到開放街圖 - description: 這個快速指南涵蓋了開放街圖的基礎知識。 - beginners_guide: - url: https://wiki.openstreetmap.org/wiki/Zh-hant:Beginners%27_guide - title: 新手指南 - description: 社群維護的新手指南 - help: - url: https://help.openstreetmap.org/ - title: help.openstreetmap.org - description: 在 OSM 的問答網站提出問題或搜尋答案。 - mailing_lists: - title: 郵件論壇 - description: 在不同主題或是地區的郵件論壇問問題或是討論有趣的事物。 - forums: - title: 論壇 - description: 給習慣論壇型式的地方問問題和討論 - irc: - title: IRC - description: 使用各種不同語言在各種主題聊天互動。 - switch2osm: - title: switch2osm - description: 協助公司與組織改用 OpenStreetMap 為基礎的地圖與相關服務。 - wiki: - url: https://wiki.openstreetmap.org/ - title: wiki.openstreetmap.org - description: 瀏覽 wiki,取得詳盡的 OSM 文件。 - about_page: - next: 下一頁 - copyright_html: ©OpenStreetMap
        貢獻者 - used_by: '%{name} 為數以千計的網站、app 與硬體裝置提供地圖資料' - lede_text: OpenStreetMap 是由製圖者社群所建立,他們提供及不斷更新包括有關世界各地的道路、路徑、咖啡館、火車站等等的資料。 - local_knowledge_title: 地方知識 - local_knowledge_html: |- - OpenStreetMap 強調地方知識。貢獻者們使用 - 航照圖、GPS 裝置與低技術的實地考察製圖,來檢驗 OSM - 是準確而且最新的。 - community_driven_title: 社群推動 - community_driven_html: |- - OpenStreetMap 的社群多元化、懷有熱情,而且日益壯大。我們的貢獻者包括地圖製作愛好者,地理訊息系統的專業人員,提供 OSM 伺服器的工程師,為受災害影響區域製圖的人道主義志願人士,以及其他各界人士。 - 想進一步了解這個社群,請參閱 OpenStreetMap 部落格、使用者日記, - 社群部落格,以及 OSM 基金會 網站。 - open_data_title: 開放資料 - open_data_html: OpenStreetMap 是開放資料的:您可以自由地使用作任何用途,前提是您須標明作者為 OpenStreetMap - 及其貢獻者。若您在我們的資料上作修改或以之透過某些方式衍生其他資料,則只可依相同授權條款散佈有關成果。詳情請參閱版權及授權條款頁面。 - legal_title: 法律資訊 - legal_html: "本站以及許多相關的服務正式由 OpenStreetMap - 基金會(OSMF)代表社群所營運。所有使用的 OSMF 運行服務皆符合我們的可接受使用政策和隱私政策\n
        \n若您有任何授權、版權或其他法律諮詢,請聯絡 OSMF 。\n
        \nOpenStreetMap、放大鏡標誌,和地圖狀態是 OSMF 的註冊商標。" - partners_title: 合作夥伴 notifier: diary_comment_notification: subject: '[OpenStreetMap] %{user} 已評論日記項目' @@ -1382,6 +1148,123 @@ zh-TW: delete: deleted: 訊息已刪除 site: + about: + next: 下一頁 + copyright_html: ©OpenStreetMap
        貢獻者 + used_by: '%{name} 為數以千計的網站、app 與硬體裝置提供地圖資料' + lede_text: OpenStreetMap 是由製圖者社群所建立,他們提供及不斷更新包括有關世界各地的道路、路徑、咖啡館、火車站等等的資料。 + local_knowledge_title: 地方知識 + local_knowledge_html: |- + OpenStreetMap 強調地方知識。貢獻者們使用 + 航照圖、GPS 裝置與低技術的實地考察製圖,來檢驗 OSM + 是準確而且最新的。 + community_driven_title: 社群推動 + community_driven_html: |- + OpenStreetMap 的社群多元化、懷有熱情,而且日益壯大。我們的貢獻者包括地圖製作愛好者,地理訊息系統的專業人員,提供 OSM 伺服器的工程師,為受災害影響區域製圖的人道主義志願人士,以及其他各界人士。 + 想進一步了解這個社群,請參閱 OpenStreetMap 部落格、使用者日記, + 社群部落格,以及 OSM 基金會 網站。 + open_data_title: 開放資料 + open_data_html: OpenStreetMap 是開放資料的:您可以自由地使用作任何用途,前提是您須標明作者為 OpenStreetMap + 及其貢獻者。若您在我們的資料上作修改或以之透過某些方式衍生其他資料,則只可依相同授權條款散佈有關成果。詳情請參閱版權及授權條款頁面。 + legal_title: 法律資訊 + legal_html: "本站以及許多相關的服務正式由 OpenStreetMap + 基金會(OSMF)代表社群所營運。所有使用的 OSMF 運行服務皆符合我們的可接受使用政策和隱私政策\n
        + \n若您有任何授權、版權或其他法律諮詢,請聯絡 OSMF 。\n
        \nOpenStreetMap、放大鏡標誌,和地圖狀態是 OSMF 的註冊商標。" + partners_title: 合作夥伴 + copyright: + foreign: + title: 關於這個翻譯 + text: 這個翻譯頁面和 %{english_original_link} 若有衝突,會以英文頁面為準 + english_link: 英文原文 + native: + title: 關於此頁 + text: 您正在檢閱英文版本的版權頁。你可以返回這個網頁的 %{native_link},您亦可以停止閱讀版權並 %{mapping_link}。 + native_link: 台灣正體中文版 + mapping_link: 開始製圖 + legal_babble: + title_html: 版權與授權條款 + intro_1_html: OpenStreetMap 為開放資料,以 + OpenStreetMap 基金會(OSMF)採用的 + Open Data Commons 開放資料庫授權條款(ODbL)授權。 + intro_2_html: |- + 您可以自由地複製、散布、傳輸及修改我們的資料,前提是您須標明作者為 OpenStreetMap 及其貢獻者。若您在我們的資料上作修改或據之衍生其他資料 + ,則只可依相同授權條款散佈有關成果。授權的法律原文詳述您的權責。 + intro_3_html: 我們地圖影像塊的製圖法以及我們的文件,以創用CC + 姓名標示-相同方式分享 (CC BY-SA) 2.0版條款授權。 + credit_title_html: 如何標明作者是 OpenStreetMap + credit_1_html: 我們要求您以“© OpenStreetMap 貢獻者”標明作者。 + credit_2_html: 您亦須清晰註明,有關資料可透過開放資料庫授權條款取得。若使用我們的影像塊,則須註明其製圖法是按 CC-BY-SA 授權。您可以透過連結至此版權頁以作註明。您亦可以指明並直接連結至授權內容 + (但若您要以資料形式發布 OSM,這是必要條件) 。在無法作出連結的媒體 (如印刷品) ,我們建議你引導你的讀者至 openstreetmap.org + (如註明 OpenStreetMap 的完整網址) 、opendatacommons.org,及 (如相關的話) creativecommons.org。 + credit_3_html: |- + 對於可瀏覽的電子地圖,標明出處的文字應放在地圖的一角。 + 例如: + attribution_example: + alt: 如何在網頁上署名 OpenStreetMap 的例子 + title: 署名的例子 + more_title_html: 尋找更多 + more_1_html: |- + 在 OSMF 授權條款頁面可閱讀更多關於使用我們的資料,以及如何標明我們是作者的資料。 + more_2_html: 雖然 OpenStreetMap 是開放資料,但我們無法為第三方提供免費的地圖 API。詳見我們的API + 使用政策、地圖影像塊使用政策及Nominatim + 服務使用政策。 + contributors_title_html: 我們的貢獻者 + contributors_intro_html: 我們的貢獻者為成千上萬的人。我們也收納了從國家測繪機構及其他來源等取得的開放版權資料,其中包括: + contributors_at_html: 奧地利:包含來自 Stadt + Wien (CC + BY授權) 、Land + Vorarlberg及 Land Tirol (修訂的CC-BY + AT授權) 的資料。 + contributors_ca_html: |- + 加拿大:包含來自 GeoBase®ï¼ŒGeoGratis (© Department of Natural + Resources Canada) ,CanVec (© Department of Natural + Resources Canada) 和 StatCan (Geography Division, + Statistics Canada) 的資料。 + contributors_fi_html: |- + 芬蘭: 包含來自 + National Land Survey of Finland's Topographic Database + 及其他資料集的資料,以 + NLSFI License 授權。 + contributors_fr_html: |- + 法國: 包含來自 + Direction Générale des Impôts 的資料。 + contributors_nl_html: |- + 荷蘭: 包含來自© AND data, 2007 + (www.and.com) 的資料。 + contributors_nz_html: |- + 紐西蘭: 包含來自 + Land Information New Zealand (Crown Copyright reserved) 的資料。 + contributors_si_html: |- + 斯洛維尼亞:包含來自Surveying and Mapping Authority和 + Ministry of Agriculture, Forestry and Food + (斯洛維尼亞公開資訊). + contributors_za_html: |- + 南非: 包含來自 + Chief Directorate: + National Geo-Spatial Information (State copyright reserved) 的資料。 + contributors_gb_html: |- + 英國: 包含來自 Ordnance + Survey data (© Crown copyright and database right + 2010-12) 的資料。 + contributors_footer_1_html: |- + 若需要進一步詳情,以及其他曾用以協助改進 + OpenStreetMap 的資料來源,請參閱 OpenStreetMap Wiki 上的貢獻者 + 頁面。 + contributors_footer_2_html: OpenStreetMap 收錄一項資料,並不意味原本的資料提供者認可 OpenStreetMap、提供任何保證或承擔任何法律責任。 + infringement_title_html: 侵犯版權 + infringement_1_html: OSM 的貢獻者會被提醒,絕不要在沒有版權所有人的明確淮許下,加入來自任何有版權的來源的資料 (如 Google + 地圖或印刷地圖)。 + infringement_2_html: 如果你認為有版權的材料被不恰當地加入到 OpenStreetMap 資料庫或此網站,請請參考我們的撤除程序,或直接在我們的網上申報頁面提出。 + trademarks_title_html: 商標 + trademarks_1_html: OpenStreetMap、放大鏡標誌和 OpenStreetMap 研討會是 OpenStreetMap 基金會的註冊商標。如果你對於使用這些商標有疑問的話,請查看我們的商標方針。 index: js_1: 您使用不支援 JavaScript 的瀏覽器,或者停用了 JavaScript。 js_2: OpenStreetMap 使用 JavaScript 讓地圖更平順。 @@ -1406,6 +1289,98 @@ zh-TW: potlatch2_unsaved_changes: 您有未儲存的更改。 (要在 Potlatch 2 中儲存,您應按一下儲存。) id_not_configured: iD 尚未設定 no_iframe_support: 您的瀏覽器不支援 HTML 嵌入式框架,這是這項功能所必要的。 + export: + title: 匯出 + area_to_export: 要匯出的區域 + manually_select: 手動選擇不同的區域 + format_to_export: 要匯出的格式 + osm_xml_data: OpenStreetMap XML 資料 + map_image: 地圖影像 (顯示標準圖層) + embeddable_html: 內嵌式 HTML + licence: 授權 + export_details: OpenStreetMap 的資料採用 Open + Data Commons 開放資料庫授權條款(ODbL)授權。 + too_large: + advice: 若以上匯出失敗,請考慮使用下列來源: + body: 這個區域太大,無法匯出 OpenStreetMap XML 資料。請放大或選擇一個較小的區域,或使用下列大量資料下載源: + planet: + title: 地球 OSM + description: 定期更新的完整 OpenStreetMap 資料庫副本 + overpass: + title: Overpass API + description: 從 OpenStreetMap 資料庫的鏡像,下載此區域 + geofabrik: + title: Geofabrik 下載 + description: 定期更新的洲、國家及特定城市之摘錄資料 + metro: + title: 都會區的摘錄資料 + description: 世界主要城市與附近地區的摘錄資料 + other: + title: 其他來源 + description: OpenStreetMap wiki 上列出的其他來源 + options: 選項 + format: 格式 + scale: 比例 + max: 最大 + image_size: 圖片大小 + zoom: 縮放 + add_marker: 在地圖加上標記 + latitude: 緯度: + longitude: 經度: + output: 輸出 + paste_html: 貼上 HTML 以於網站內嵌 + export_button: 匯出 + fixthemap: + title: 回報問題/改進地圖 + how_to_help: + title: 如何協助 + join_the_community: + title: 加入社群 + explanation_html: 如果你發現我們的地圖資料有問題,例如缺少某條道路或者你的地址,最好的方法就是加入 OpenStreetMap + 社群,然後自己加入或者改進資料。 + add_a_note: + instructions_html: |- + 只須點選 或地圖上的同一圖示, + 這將在地圖上加入一個標記,你可以拖動它,並新增你的註記,然後點選儲存,其他製圖者會作出查證。 + other_concerns: + title: 其他問題 + explanation_html: 如果您對我們的資料如何被應用或有關的內容有任何問題,請參閱我們的版權頁瞭解更多法律資訊,或聯絡適當的 OSMF 工作小組。 + help: + title: 取得協助 + introduction: OpenStreetMap 有一些資源,可用於學習本專案、提出和回答問題,以及討論和紀錄與製作地圖相關的話題。 + welcome: + url: /welcome + title: 歡迎來到開放街圖 + description: 這個快速指南涵蓋了開放街圖的基礎知識。 + beginners_guide: + url: https://wiki.openstreetmap.org/wiki/Zh-hant:Beginners%27_guide + title: 新手指南 + description: 社群維護的新手指南 + help: + url: https://help.openstreetmap.org/ + title: help.openstreetmap.org + description: 在 OSM 的問答網站提出問題或搜尋答案。 + mailing_lists: + url: https://lists.openstreetmap.org/ + title: 郵件論壇 + description: 在不同主題或是地區的郵件論壇問問題或是討論有趣的事物。 + forums: + url: https://forum.openstreetmap.org/ + title: 論壇 + description: 給習慣論壇型式的地方問問題和討論 + irc: + url: https://irc.openstreetmap.org/ + title: IRC + description: 使用各種不同語言在各種主題聊天互動。 + switch2osm: + url: https://switch2osm.org/ + title: switch2osm + description: 協助公司與組織改用 OpenStreetMap 為基礎的地圖與相關服務。 + wiki: + url: https://wiki.openstreetmap.org/ + title: wiki.openstreetmap.org + description: 瀏覽 wiki,取得詳盡的 OSM 文件。 sidebar: search_results: 搜尋結果 close: 關閉 @@ -1507,6 +1482,38 @@ zh-TW: image: 圖片 alt: 替代文字 url: URL + welcome: + title: 歡迎! + introduction_html: 歡迎來到 OpenStreetMap,自由和可編輯的世界地圖。您目前已經登入,可以開始繪製地圖。這裡有一份您須知道最重要事項的快速指南。 + whats_on_the_map: + title: 地圖上有什麼 + on_html: |- + OpenStreetMap 是一個為真實且現存物件繪製地圖的地方 - + 它包含數以百萬計的建築物、道路以及關於位置其他詳細資料。您可以 + 在地圖上畫出任何現實世界中令您感興趣的地理特徵。 + off_html: 然而它不包含一些例如評分的主觀意見資料、歷史或假設性的地理特徵,以及有版權的來源資料。除非你獲特別許可,不要抄襲網上或印刷的地圖。 + basic_terms: + title: 繪製地圖的基本術語 + paragraph_1_html: OpenStreetMap 有自己的術語。以下是一些常用的關鍵詞。 + editor_html: 編輯器是你可以用於編輯地圖的程序或網站。 + node_html: 節點是地圖上的一個點,例如一間餐廳或一棵樹。 + way_html: 路徑是一條線或一個區域,例如一條道路、一條溪、一個湖或一棟建築物。 + tag_html: 標籤是關於節點或路徑的簡要資料,例如餐廳的名字或道路的速度限制。 + rules: + title: 規則! + paragraph_1_html: OpenStreetMap 沒有多少正式規則,除了所有參與者都得與社群合作和溝通。如果你有想過用人工以外的方式參與的話,請先熟讀和遵循匯入以及自動化編輯守則。 + questions: + title: 有任何問題嗎? + paragraph_1_html: OpenStreetMap 有一些資源,可用於學習本專案、提出和回答問題,以及討論和紀錄與製作地圖相關的話題。 + 按此取得說明。 + start_mapping: 開始製圖 + add_a_note: + title: 沒有時間編輯嗎?可加入註記! + paragraph_1_html: 如果你只想做一些微小改動,而沒有時間登入來學習如何編輯,那麼加入一項註記還是非常容易的。 + paragraph_2_html: 只要到地圖並點選註記圖示: 。這將在地圖上加入一個標記,你可以拖動它,並新增你的註記,然後點選儲存,其他製圖者會作出查證。 trace: visibility: private: 私人 (以匿名方式分享,節點無順序) @@ -1545,6 +1552,7 @@ zh-TW: trace_header: upload_trace: 上傳軌跡 see_all_traces: 查看所有的軌跡 + see_my_traces: 查看我的軌跡 traces_waiting: 您有 %{count} 個軌跡等待上傳。請先等待先前的軌跡處理完後,再來繼續上傳其他軌跡,以免影響其他使用者的排程。 trace_optionals: tags: 標籤 @@ -1567,6 +1575,7 @@ zh-TW: delete_track: 刪除這個軌跡 trace_not_found: 找不到軌跡! visibility: 可見性: + confirm_delete: 刪除這個軌跡? trace_paging_nav: showing_page: 第 %{page} 頁 older: 較舊軌跡 @@ -1589,6 +1598,7 @@ zh-TW: map: 地圖 list: public_traces: 公開 GPS 軌跡 + my_traces: 我的 GPS 軌跡 public_traces_from: '%{user} 的公開 GPS 軌跡' description: 瀏覽最近的 GPS 軌跡上傳 tagged_with: 有如下標籤:%{tags} @@ -1620,7 +1630,7 @@ zh-TW: blocked: 您已經被封鎖使用 API。請登入網頁介面以瞭解更多資訊。 need_to_see_terms: 我們已暫時中止您使用 API 的權限,請登入網頁介面查閱貢獻者條款,您不需要同意有關條款,但必須查閱它們。 oauth: - oauthorize: + authorize: title: 授權使用您的帳號 request_access: 應用程式 %{app_name} 要求使用您的帳號,%{user}。請確定您要讓此應用程式使用下列功能。您可以依自己喜好,選擇多少項功能。 allow_to: 允許用戶端應用程式: @@ -1632,11 +1642,11 @@ zh-TW: allow_write_gpx: 上傳 GPS 軌跡。 allow_write_notes: 修改註記。 grant_access: 授權存取 - oauthorize_success: + authorize_success: title: 允許授權請求 allowed: 您已授權應用程式 %{app_name} 使用您的帳號。 verification: 驗證碼是 %{code}。 - oauthorize_failure: + authorize_failure: title: 授權請求失敗 denied: 您已拒絕應用程式 %{app_name} 使用您的帳號。 invalid: 授權權杖無效。 @@ -1852,6 +1862,7 @@ zh-TW: user location: 使用者位置 if set location: 您可以在 %{settings_link} 頁面設定您家的位置,以檢視附近的使用者。 settings_link_text: 設定 + my friends: 我的好友 no friends: 您尚未加入任何好友。 km away: '%{count} 公里遠' m away: '%{count} 公尺遠' @@ -1977,8 +1988,8 @@ zh-TW: filter: not_an_administrator: 您需要一個行政員才可執行該動作。 list: - title: 使用者 - heading: 使用者 + title: 用戶 + heading: 用戶 showing: one: 頁面 %{page} (%{first_item} / %{items}) other: 頁面 %{page} (%{first_item}-%{last_item} / %{items}) @@ -2022,7 +2033,7 @@ zh-TW: are_you_sure: 您確定要撤銷使用者 "%{name}" "%{role}" 的身份? confirm: 確認 fail: 無法撤銷使用者 "%{name}" "%{role}" 的身份。請檢查使用者和身份是否都正確。 - user_block: + user_blocks: model: non_moderator_update: 只有管理者才可作出或更新封鎖。 non_moderator_revoke: 只有管理者才可撤銷封鎖。 @@ -2073,20 +2084,6 @@ zh-TW: period: one: 1 小時 other: '%{count} 小時' - partial: - show: 顯示 - edit: 編輯 - revoke: 撤銷! - confirm: 您確定嗎? - display_name: 被封鎖的使用者 - creator_name: 建立者 - reason: 封鎖的理由 - status: 狀態 - revoker_name: 撤銷者 - not_revoked: (沒有撤銷) - showing_page: 第 %{page} 頁 - next: 下一頁 » - previous: « 上一頁 helper: time_future: 於 %{time} 結束。 until_login: 生效直至這個使用者登入為止。 @@ -2116,8 +2113,22 @@ zh-TW: back: 檢視所有封鎖 revoker: 撤銷者: needs_view: 在還原這個封鎖之前,該使用者需要先登入。 - note: - description: + block: + not_revoked: (沒有撤銷) + show: 顯示 + edit: 編輯 + revoke: 撤銷! + blocks: + display_name: 被封鎖的使用者 + creator_name: 建立者 + reason: 封鎖的理由 + status: 狀態 + revoker_name: 撤銷者 + showing_page: 第 %{page} 頁 + next: 下一頁 » + previous: « 上一頁 + notes: + comment: opened_at_html: 於 %{when} 前建立 opened_at_by_html: 於 %{when} 前由 %{user} 建立 commented_at_html: 於 %{when} 前更新 @@ -2240,7 +2251,7 @@ zh-TW: distance: 距離 errors: no_route: 查無兩個地點間的路徑。 - no_place: 抱歉 - 查無該地點。 + no_place: 抱歉 - 查無地點「%{place}」。 instructions: continue_without_exit: 繼續行駛 %{name} slight_right_without_exit: 靠右至 %{name} @@ -2256,6 +2267,7 @@ zh-TW: onramp_right_with_directions: 右轉前往上坡朝%{directions} onramp_right_with_name_directions: 在往%{name}的上坡右轉朝%{directions} onramp_right_without_directions: 右轉前往上坡 + onramp_right: 右轉前往上坡 endofroad_right_without_exit: 在道路盡頭右轉至%{name} merge_right_without_exit: 向右併線至%{name} fork_right_without_exit: 在叉路口右轉至%{name} @@ -2276,6 +2288,7 @@ zh-TW: onramp_left_with_directions: 左轉前往上坡朝%{directions} onramp_left_with_name_directions: 在往%{name}的上坡左轉朝%{directions} onramp_left_without_directions: 左轉前往上坡 + onramp_left: 左轉前往上坡 endofroad_left_without_exit: 在道路盡頭左轉至%{name} merge_left_without_exit: 向左併線至%{name} fork_left_without_exit: 在叉路口左轉至%{name} @@ -2312,7 +2325,7 @@ zh-TW: show_address: 顯示地址 query_features: 查詢圖徵 centre_map: 中央地圖在此 - redaction: + redactions: edit: description: 說明 heading: 編輯修訂 diff --git a/config/routes.rb b/config/routes.rb index 1016a89de..67deae7ed 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -68,11 +68,11 @@ OpenStreetMap::Application.routes.draw do get "user/details" => "user#api_details" get "user/gpx_files" => "user#api_gpx_files" - get "user/preferences" => "user_preference#read" - get "user/preferences/:preference_key" => "user_preference#read_one" - put "user/preferences" => "user_preference#update" - put "user/preferences/:preference_key" => "user_preference#update_one" - delete "user/preferences/:preference_key" => "user_preference#delete_one" + get "user/preferences" => "user_preferences#read" + get "user/preferences/:preference_key" => "user_preferences#read_one" + put "user/preferences" => "user_preferences#update" + put "user/preferences/:preference_key" => "user_preferences#update_one" + delete "user/preferences/:preference_key" => "user_preferences#delete_one" post "gpx/create" => "trace#api_create" get "gpx/:id" => "trace#api_read", :id => /\d+/ @@ -224,7 +224,7 @@ OpenStreetMap::Application.routes.draw do get "/user/:display_name/diary" => "diary_entry#list" get "/diary/:language" => "diary_entry#list" get "/diary" => "diary_entry#list" - get "/user/:display_name/diary/:id" => "diary_entry#view", :id => /\d+/ + get "/user/:display_name/diary/:id" => "diary_entry#view", :id => /\d+/, :as => :diary_entry post "/user/:display_name/diary/:id/newcomment" => "diary_entry#comment", :id => /\d+/ match "/user/:display_name/diary/:id/edit" => "diary_entry#edit", :via => [:get, :post], :id => /\d+/ post "/user/:display_name/diary/:id/hide" => "diary_entry#hide", :id => /\d+/, :as => :hide_diary_entry diff --git a/db/functions/xid_to_int4.c b/db/functions/xid_to_int4.c index d654bf269..e312b5f15 100644 --- a/db/functions/xid_to_int4.c +++ b/db/functions/xid_to_int4.c @@ -1,11 +1,16 @@ #include #include -int xid_to_int4(TransactionId xid) +Datum +xid_to_int4(PG_FUNCTION_ARGS) { - return xid; + TransactionId xid = PG_GETARG_INT32(0); + + PG_RETURN_INT32(xid); } +PG_FUNCTION_INFO_V1(xid_to_int4); + /* * To bind this into PGSQL, try something like: * diff --git a/test/controllers/user_preference_controller_test.rb b/test/controllers/user_preferences_controller_test.rb similarity index 93% rename from test/controllers/user_preference_controller_test.rb rename to test/controllers/user_preferences_controller_test.rb index 7f614587d..3e5cbb369 100644 --- a/test/controllers/user_preference_controller_test.rb +++ b/test/controllers/user_preferences_controller_test.rb @@ -1,28 +1,28 @@ require "test_helper" -class UserPreferenceControllerTest < ActionController::TestCase +class UserPreferencesControllerTest < ActionController::TestCase ## # test all routes which lead to this controller def test_routes assert_routing( { :path => "/api/0.6/user/preferences", :method => :get }, - { :controller => "user_preference", :action => "read" } + { :controller => "user_preferences", :action => "read" } ) assert_routing( { :path => "/api/0.6/user/preferences", :method => :put }, - { :controller => "user_preference", :action => "update" } + { :controller => "user_preferences", :action => "update" } ) assert_routing( { :path => "/api/0.6/user/preferences/key", :method => :get }, - { :controller => "user_preference", :action => "read_one", :preference_key => "key" } + { :controller => "user_preferences", :action => "read_one", :preference_key => "key" } ) assert_routing( { :path => "/api/0.6/user/preferences/key", :method => :put }, - { :controller => "user_preference", :action => "update_one", :preference_key => "key" } + { :controller => "user_preferences", :action => "update_one", :preference_key => "key" } ) assert_routing( { :path => "/api/0.6/user/preferences/key", :method => :delete }, - { :controller => "user_preference", :action => "delete_one", :preference_key => "key" } + { :controller => "user_preferences", :action => "delete_one", :preference_key => "key" } ) end diff --git a/test/system/diary_entry_test.rb b/test/system/diary_entry_test.rb new file mode 100644 index 000000000..39ccc04b2 --- /dev/null +++ b/test/system/diary_entry_test.rb @@ -0,0 +1,18 @@ +require "application_system_test_case" + +class DiaryEntrySystemTest < ApplicationSystemTestCase + def setup + create(:language, :code => "en") + @diary_entry = create(:diary_entry) + end + + test "reply to diary entry should prefill the message subject" do + sign_in_as(create(:user)) + visit diary_path + + click_on "Reply to this entry" + + assert page.has_content? "Send a new message" + assert_equal "Re: #{@diary_entry.title}", page.find_field("Subject").value + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index 385a2f682..7198519a7 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -150,5 +150,13 @@ module ActiveSupport end end end + + def sign_in_as(user) + stub_hostip_requests + visit login_path + fill_in "username", :with => user.email + fill_in "password", :with => "test" + click_on "Login", :match => :first + end end end diff --git a/vendor/assets/iD/iD.css.erb b/vendor/assets/iD/iD.css.erb index 7fbfed2c4..ebe73d6a2 100644 --- a/vendor/assets/iD/iD.css.erb +++ b/vendor/assets/iD/iD.css.erb @@ -1983,20 +1983,20 @@ path.fill.tag-amenity-shelter { cursor: url(<%= asset_path("iD/img/cursor-draw.png") %>) 9 9, crosshair; /* FF */ } -.mode-draw-line .way.hover, -.mode-draw-area .way.hover, -.mode-add-line .way.hover, -.mode-add-area .way.hover, -.mode-drag-node .way.hover { +.mode-draw-line .way.target, +.mode-draw-area .way.target, +.mode-add-line .way.target, +.mode-add-area .way.target, +.mode-drag-node .way.target { cursor: crosshair; /* Opera */ cursor: url(<%= asset_path("iD/img/cursor-draw-connect-line.png") %>) 9 9, crosshair; /* FF */ } -.mode-draw-line .vertex.hover, -.mode-draw-area .vertex.hover, -.mode-add-line .vertex.hover, -.mode-add-area .vertex.hover, -.mode-drag-node .vertex.hover { +.mode-draw-line .vertex.target, +.mode-draw-area .vertex.target, +.mode-add-line .vertex.target, +.mode-add-area .vertex.target, +.mode-drag-node .vertex.target { cursor: crosshair; /* Opera */ cursor: url(<%= asset_path("iD/img/cursor-draw-connect-vertex.png") %>) 9 9, crosshair; /* FF */ } @@ -2466,6 +2466,17 @@ h4, h5 { outline-style: none; } +::placeholder { /* Chrome, Firefox, Opera, Safari 10.1+ */ + color: #aaa; + opacity: 1; /* Firefox */ +} +:-ms-input-placeholder { /* Internet Explorer 10-11 */ + color: #aaa; +} +::-ms-input-placeholder { /* Microsoft Edge */ + color: #aaa; +} + p { font-size: 12px; margin:0; @@ -2715,7 +2726,7 @@ li.hide { button { text-align: center; - line-height:20px; + line-height: 20px; border:0; background: white; font-weight: bold; @@ -2959,16 +2970,12 @@ button.save.has-count .count::before { } .header h3 { - text-align: left; + text-align: center; margin-bottom: 0; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; - padding: 20px 20px 20px 40px; -} -[dir='rtl'] .header h3 { - text-align: right; - padding: 20px 40px 20px 20px; + padding: 20px; } .header button, @@ -3995,11 +4002,13 @@ input[type=number] { content: none; } +#preset-input-maxspeed_advisory, #preset-input-maxspeed { border-right: none; border-radius: 0 0 0 4px; width: 80%; } +[dir='rtl'] #preset-input-maxspeed_advisory, [dir='rtl'] #preset-input-maxspeed { border-right: 1px solid #ccc; border-radius: 0 0 4px 0; @@ -4075,7 +4084,7 @@ input[type=number] { content: ""; display: block; position: absolute; - background:#ccc; + background: #ccc; height: 11px; width: 1px; left: 0; @@ -4149,6 +4158,10 @@ input[type=number] { .restriction-controls-container .restriction-controls { display: table; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; } .restriction-controls .restriction-control { @@ -4685,7 +4698,7 @@ div.full-screen > button:hover { .map-controls { right: 0; - top: 70px; + top: 132px; width: 40px; position: fixed; z-index: 100; @@ -4711,27 +4724,46 @@ div.full-screen > button:hover { } /* Zoomer */ - -.zoombuttons button.zoom-in { +.zoombuttons > button.zoom-in { border-radius: 4px 0 0 0; } -[dir='rtl'] .zoombuttons button.zoom-in { +[dir='rtl'] .zoombuttons > button.zoom-in { border-radius: 0 4px 0 0; } -/* Background / Map Data Settings */ +/* Geolocator */ +.geolocate-control { + margin-bottom: 10px; +} +.geolocate-control > button { + border-radius: 0 0 0 4px; +} +[dir='rtl'] .geolocate-control > button { + border-radius: 0 0 4px 0; +} + +/* Pane Buttons */ +.help-control > button { + border-radius: 0 0 0 4px; +} +[dir='rtl'] .help-control > button { + border-radius: 0 0 4px 0; +} .map-data-control button { border-radius: 0; } -.background-control button { +.background-control > button { border-radius: 4px 0 0 0; } -[dir='rtl'] .background-control button { +[dir='rtl'] .background-control > button { border-radius: 0 4px 0 0; } + +/* Background / Map Data Settings */ + .map-data-control, .background-control { position: relative; @@ -5005,52 +5037,61 @@ div.full-screen > button:hover { border-radius: 3px 0 0 3px; } -.map-data-control .map-overlay, -.background-control .map-overlay, -.help-control .map-overlay { - z-index: -1; -} - -/* Geolocator */ - -.geolocate-control { - margin-bottom: 10px; -} +/* Side panes */ -.geolocate-control button { - border-radius: 0 0 0 4px; -} -[dir='rtl'] .geolocate-control button { - border-radius: 0 0 4px 0; +/*.map-data-control .map-pane, +.background-control .map-pane, +.help-control .map-pane { } - -.map-overlay.content { +*/ +.map-pane { position: fixed; top: 60px; bottom: 30px; - padding: 20px 50px 20px 20px; right: 0; - overflow: auto; + padding-bottom: 50px; + overflow: hidden; + z-index: -1; } -[dir='rtl'] .map-overlay.content { - padding: 20px 20px 20px 50px; +[dir='rtl'] .map-pane { left: 0; right: auto !important; } -.map-overlay.content > div { - padding-bottom: 15px; +.pane-heading { + display: flex; + flex-flow: row nowrap; + justify-content: space-between; + border-bottom: 1px solid #ccc; } -/* Help */ +.pane-heading h2 { + margin: 15px 20px; +} -.help-control button { - border-radius: 0 0 0 4px; +.pane-heading button { + width: 40px; + height: 61px; + border-radius: 0; } -[dir='rtl'] .help-control button { - border-radius: 0 0 4px 0; + +.pane-content { + height: 100%; + padding: 10px 50px 20px 20px; + overflow-x: hidden; + overflow-y: scroll; +} +[dir='rtl'] .pane-content { + padding: 10px 20px 20px 50px; } +.pane-content > div { + padding-bottom: 15px; +} + +/* Help */ + + .help-wrap p { font-size: 15px; margin-bottom: 20px; @@ -5127,6 +5168,7 @@ div.full-screen > button:hover { .help-wrap .nav { position: relative; + padding-bottom: 30px; } .help-wrap .nav a { @@ -5311,7 +5353,7 @@ img.tile-debug { .nocolor { color: rgba(0, 0, 0, 0); } .red { color: rgba(255, 0, 0, 0.75); } .green { color: rgba(0, 255, 0, 0.75); } -.blue { color: rgba(0, 0, 255, 0.75); } +.blue { color: rgba(176, 176, 255, 0.75); } .yellow { color: rgba(255, 255, 0, 0.75); } .cyan { color: rgba(0, 255, 255, 0.75); } .magenta { color: rgba(255, 0, 255, 0.75); } @@ -5721,6 +5763,9 @@ img.tile-debug { color: #ccf; } +/* Notification Badges */ + +/* For an icon (e.g. new version) */ .badge { display: inline-block; background: #d32232; @@ -5747,6 +5792,24 @@ img.tile-debug { fill: white; } +/* For text (e.g. upcoming events) */ +.badge-text { + display: inline-block; + color: white; + text-align: center; + width: 16px; + height: 16px; + font-size: 10px; + font-weight: bold; + margin-left: 5px; + background: #f00; + border-radius: 9px; +} +[dir='rtl'] .badge-text { + margin-left: 0; + margin-right: 5px; +} + /* Modals ------------------------------------------------------- */ @@ -5820,8 +5883,7 @@ img.tile-debug { text-align: center; } -.modal-actions button, -.save-success a.button { +.modal-actions button { font-weight: normal; color: #7092ff; border-bottom: 1px solid #ccc; @@ -5830,12 +5892,16 @@ img.tile-debug { text-align: center; display: inline-block; } - -.modal-actions button:hover -.save-success a.button:hover { +.modal-actions button:hover { background-color: #ececec; } +.logo-small { + height: 40px; + width: 40px; + margin: auto; +} + .logo { height: 100px; width: 100%; @@ -5857,34 +5923,103 @@ img.tile-debug { color: #7092ff; } .modal-actions .logo-reset { - color: #E06C5E; + color: #e06c5e; } /* Success Modal ------------------------------------------------------- */ +.save-success.body { + overflow-y: scroll; + overflow-x: hidden; +} + +.save-success .link-out { + margin: 0px 5px; + white-space: nowrap; +} + +.save-summary, +.save-communityLinks { + padding: 0px 20px 15px 20px; +} + +.save-communityLinks { + border-top: 1px solid #ccc; +} + +.save-success table, .save-success p { - padding: 15px 15px 0 15px; + margin-top: 15px; } -.save-success a.details { - padding-left: 15px; +.save-success h3 { + font-size: 14px; + margin-top: 15px; + line-height: 1.5; + padding-bottom: 0; } -.save-success .button { - padding-top: 15px; +.save-success td { + vertical-align: top; } -.save-success .logo-osm { - color: #7092ff; - margin-bottom: 10px; +.save-success td.cell-icon { + width: 40px; } -.save-success a.button.social { - height: auto; - border-bottom: none; +.save-success td.cell-detail { + padding: 0 10px; } -.save-success .icon.social { - height: 80px; - width: 80px; - color: #7092ff; +.save-success td.community-detail { + padding-bottom: 15px; +} + +.summary-view-on-osm, +.community-name { + font-size: 14px; + font-weight: bold; +} +.community-languages { + margin-top: 5px; + font-style: italic; +} +.community-languages:only-child { + margin-top: 0; } +.community-detail a.hide-toggle, +.community-detail a:visited.hide-toggle { + font-size: 12px; + font-weight: normal; + padding-bottom: 0; +} +.community-detail .hide-toggle svg.icon.pre-text { + width: 12px; + height: 15px; +} + +.community-events { + margin-top: 5px; +} + +.community-event, +.community-more { + background-color: #efefef; + padding: 8px; + border-radius: 4px; + margin-bottom: 5px; +} + +.community-event-name { + font-size: 14px; + font-weight: bold; +} +.community-event-when { + font-weight: bold; +} + +.community-missing { + padding: 10px; + text-align: center; +} + + /* Splash Modal ------------------------------------------------------- */ .modal-actions .logo-walkthrough, @@ -6179,7 +6314,7 @@ svg.mouseclick use.right { .tooltip { position: absolute; display: none; - color:#333; + color: #333; font-size: 12px; } @@ -6333,33 +6468,33 @@ svg.mouseclick use.right { /* Exceptions for tooltip layouts */ /* make tooltips in panels dark */ -.map-overlay .tooltip.top .tooltip-arrow, +.map-pane .tooltip.top .tooltip-arrow, .entity-editor-pane .tooltip.top .tooltip-arrow, .warning-section .tooltip.top .tooltip-arrow { border-top-color: #000; } -.map-overlay .tooltip.bottom .tooltip-arrow, +.map-pane .tooltip.bottom .tooltip-arrow, .entity-editor-pane .tooltip.bottom .tooltip-arrow, .warning-section .tooltip.bottom .tooltip-arrow { border-bottom-color: #000; } -.map-overlay .tooltip.left .tooltip-arrow, +.map-pane .tooltip.left .tooltip-arrow, .entity-editor-pane .tooltip.left .tooltip-arrow, .warning-section .tooltip.left .tooltip-arrow { border-left-color: #000; } -.map-overlay .tooltip.right .tooltip-arrow, +.map-pane .tooltip.right .tooltip-arrow, .entity-editor-pane .tooltip.right .tooltip-arrow, .warning-section .tooltip.right .tooltip-arrow { border-right-color: #000; } -.map-overlay .tooltip-inner, -.map-overlay .tooltip-heading, -.map-overlay .keyhint-wrap, +.map-pane .tooltip-inner, +.map-pane .tooltip-heading, +.map-pane .keyhint-wrap, .entity-editor-pane .tooltip-inner, .warning-section .tooltip-inner { background: #000; diff --git a/vendor/assets/iD/iD.js b/vendor/assets/iD/iD.js index b08f2f836..b9b3117c9 100644 --- a/vendor/assets/iD/iD.js +++ b/vendor/assets/iD/iD.js @@ -1,76089 +1,77319 @@ (function () { -var version = "4.13.0"; - -function d3_ascending(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - -function d3_bisector(compare) { - if (compare.length === 1) compare = ascendingComparator(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; + var version = "4.13.0"; + + function ascending(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; + } + + function bisector(compare) { + if (compare.length === 1) compare = ascendingComparator(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; } - return lo; - } - }; -} + }; + } -function ascendingComparator(f) { - return function(d, x) { - return d3_ascending(f(d), x); - }; -} + function ascendingComparator(f) { + return function(d, x) { + return ascending(f(d), x); + }; + } -var ascendingBisect = d3_bisector(d3_ascending); -var bisectRight = ascendingBisect.right; -var bisectLeft = ascendingBisect.left; + var ascendingBisect = bisector(ascending); + var bisectRight = ascendingBisect.right; + var bisectLeft = ascendingBisect.left; -function pairs(array, f) { - if (f == null) f = pair; - var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n); - while (i < n) pairs[i] = f(p, p = array[++i]); - return pairs; -} + function pairs(array, f) { + if (f == null) f = pair; + var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n); + while (i < n) pairs[i] = f(p, p = array[++i]); + return pairs; + } -function pair(a, b) { - return [a, b]; -} + function pair(a, b) { + return [a, b]; + } -function cross(values0, values1, reduce) { - var n0 = values0.length, - n1 = values1.length, - values = new Array(n0 * n1), - i0, - i1, - i, - value0; + function cross(values0, values1, reduce) { + var n0 = values0.length, + n1 = values1.length, + values = new Array(n0 * n1), + i0, + i1, + i, + value0; - if (reduce == null) reduce = pair; + if (reduce == null) reduce = pair; - for (i0 = i = 0; i0 < n0; ++i0) { - for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) { - values[i] = reduce(value0, values1[i1]); + for (i0 = i = 0; i0 < n0; ++i0) { + for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) { + values[i] = reduce(value0, values1[i1]); + } } - } - return values; -} + return values; + } -function d3_descending(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; -} + function d3_descending(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; + } -function number(x) { - return x === null ? NaN : +x; -} + function number(x) { + return x === null ? NaN : +x; + } -function variance(values, valueof) { - var n = values.length, - m = 0, - i = -1, - mean = 0, - value, - delta, - sum = 0; + function variance(values, valueof) { + var n = values.length, + m = 0, + i = -1, + mean = 0, + value, + delta, + sum = 0; - if (valueof == null) { - while (++i < n) { - if (!isNaN(value = number(values[i]))) { - delta = value - mean; - mean += delta / ++m; - sum += delta * (value - mean); + if (valueof == null) { + while (++i < n) { + if (!isNaN(value = number(values[i]))) { + delta = value - mean; + mean += delta / ++m; + sum += delta * (value - mean); + } } } - } - else { - while (++i < n) { - if (!isNaN(value = number(valueof(values[i], i, values)))) { - delta = value - mean; - mean += delta / ++m; - sum += delta * (value - mean); + else { + while (++i < n) { + if (!isNaN(value = number(valueof(values[i], i, values)))) { + delta = value - mean; + mean += delta / ++m; + sum += delta * (value - mean); + } } } - } - - if (m > 1) return sum / (m - 1); -} -function deviation(array, f) { - var v = variance(array, f); - return v ? Math.sqrt(v) : v; -} + if (m > 1) return sum / (m - 1); + } -function extent(values, valueof) { - var n = values.length, - i = -1, - value, - min, - max; + function deviation(array, f) { + var v = variance(array, f); + return v ? Math.sqrt(v) : v; + } - if (valueof == null) { - while (++i < n) { // Find the first comparable value. - if ((value = values[i]) != null && value >= value) { - min = max = value; - while (++i < n) { // Compare the remaining values. - if ((value = values[i]) != null) { - if (min > value) min = value; - if (max < value) max = value; + function extent(values, valueof) { + var n = values.length, + i = -1, + value, + min, + max; + + if (valueof == null) { + while (++i < n) { // Find the first comparable value. + if ((value = values[i]) != null && value >= value) { + min = max = value; + while (++i < n) { // Compare the remaining values. + if ((value = values[i]) != null) { + if (min > value) min = value; + if (max < value) max = value; + } } } } } - } - else { - while (++i < n) { // Find the first comparable value. - if ((value = valueof(values[i], i, values)) != null && value >= value) { - min = max = value; - while (++i < n) { // Compare the remaining values. - if ((value = valueof(values[i], i, values)) != null) { - if (min > value) min = value; - if (max < value) max = value; + else { + while (++i < n) { // Find the first comparable value. + if ((value = valueof(values[i], i, values)) != null && value >= value) { + min = max = value; + while (++i < n) { // Compare the remaining values. + if ((value = valueof(values[i], i, values)) != null) { + if (min > value) min = value; + if (max < value) max = value; + } } } } } + + return [min, max]; } - return [min, max]; -} + var array = Array.prototype; -var array = Array.prototype; + var slice = array.slice; + var map = array.map; -var slice = array.slice; -var map = array.map; + function constant(x) { + return function() { + return x; + }; + } -function constant(x) { - return function() { + function identity(x) { return x; - }; -} - -function identity(x) { - return x; -} - -function d3_range(start, stop, step) { - start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; - - var i = -1, - n = Math.max(0, Math.ceil((stop - start) / step)) | 0, - range = new Array(n); - - while (++i < n) { - range[i] = start + i * step; - } - - return range; -} - -var e10 = Math.sqrt(50), - e5 = Math.sqrt(10), - e2 = Math.sqrt(2); - -function ticks(start, stop, count) { - var reverse, - i = -1, - n, - ticks, - step; - - stop = +stop, start = +start, count = +count; - if (start === stop && count > 0) return [start]; - if (reverse = stop < start) n = start, start = stop, stop = n; - if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return []; - - if (step > 0) { - start = Math.ceil(start / step); - stop = Math.floor(stop / step); - ticks = new Array(n = Math.ceil(stop - start + 1)); - while (++i < n) ticks[i] = (start + i) * step; - } else { - start = Math.floor(start * step); - stop = Math.ceil(stop * step); - ticks = new Array(n = Math.ceil(start - stop + 1)); - while (++i < n) ticks[i] = (start - i) / step; - } - - if (reverse) ticks.reverse(); - - return ticks; -} - -function tickIncrement(start, stop, count) { - var step = (stop - start) / Math.max(0, count), - power = Math.floor(Math.log(step) / Math.LN10), - error = step / Math.pow(10, power); - return power >= 0 - ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) - : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1); -} - -function tickStep(start, stop, count) { - var step0 = Math.abs(stop - start) / Math.max(0, count), - step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), - error = step0 / step1; - if (error >= e10) step1 *= 10; - else if (error >= e5) step1 *= 5; - else if (error >= e2) step1 *= 2; - return stop < start ? -step1 : step1; -} - -function sturges(values) { - return Math.ceil(Math.log(values.length) / Math.LN2) + 1; -} - -function histogram() { - var value = identity, - domain = extent, - threshold = sturges; - - function histogram(data) { - var i, - n = data.length, - x, - values = new Array(n); + } - for (i = 0; i < n; ++i) { - values[i] = value(data[i], i, data); - } + function range(start, stop, step) { + start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; - var xz = domain(values), - x0 = xz[0], - x1 = xz[1], - tz = threshold(values, x0, x1); + var i = -1, + n = Math.max(0, Math.ceil((stop - start) / step)) | 0, + range = new Array(n); - // Convert number of thresholds into uniform thresholds. - if (!Array.isArray(tz)) { - tz = tickStep(x0, x1, tz); - tz = d3_range(Math.ceil(x0 / tz) * tz, Math.floor(x1 / tz) * tz, tz); // exclusive + while (++i < n) { + range[i] = start + i * step; } - // Remove any thresholds outside the domain. - var m = tz.length; - while (tz[0] <= x0) tz.shift(), --m; - while (tz[m - 1] > x1) tz.pop(), --m; + return range; + } + + var e10 = Math.sqrt(50), + e5 = Math.sqrt(10), + e2 = Math.sqrt(2); + + function ticks(start, stop, count) { + var reverse, + i = -1, + n, + ticks, + step; - var bins = new Array(m + 1), - bin; + stop = +stop, start = +start, count = +count; + if (start === stop && count > 0) return [start]; + if (reverse = stop < start) n = start, start = stop, stop = n; + if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return []; - // Initialize bins. - for (i = 0; i <= m; ++i) { - bin = bins[i] = []; - bin.x0 = i > 0 ? tz[i - 1] : x0; - bin.x1 = i < m ? tz[i] : x1; + if (step > 0) { + start = Math.ceil(start / step); + stop = Math.floor(stop / step); + ticks = new Array(n = Math.ceil(stop - start + 1)); + while (++i < n) ticks[i] = (start + i) * step; + } else { + start = Math.floor(start * step); + stop = Math.ceil(stop * step); + ticks = new Array(n = Math.ceil(start - stop + 1)); + while (++i < n) ticks[i] = (start - i) / step; } - // Assign data to bins by value, ignoring any outside the domain. - for (i = 0; i < n; ++i) { - x = values[i]; - if (x0 <= x && x <= x1) { - bins[bisectRight(tz, x, 0, m)].push(data[i]); + if (reverse) ticks.reverse(); + + return ticks; + } + + function tickIncrement(start, stop, count) { + var step = (stop - start) / Math.max(0, count), + power = Math.floor(Math.log(step) / Math.LN10), + error = step / Math.pow(10, power); + return power >= 0 + ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) + : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1); + } + + function tickStep(start, stop, count) { + var step0 = Math.abs(stop - start) / Math.max(0, count), + step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), + error = step0 / step1; + if (error >= e10) step1 *= 10; + else if (error >= e5) step1 *= 5; + else if (error >= e2) step1 *= 2; + return stop < start ? -step1 : step1; + } + + function sturges(values) { + return Math.ceil(Math.log(values.length) / Math.LN2) + 1; + } + + function histogram() { + var value = identity, + domain = extent, + threshold = sturges; + + function histogram(data) { + var i, + n = data.length, + x, + values = new Array(n); + + for (i = 0; i < n; ++i) { + values[i] = value(data[i], i, data); + } + + var xz = domain(values), + x0 = xz[0], + x1 = xz[1], + tz = threshold(values, x0, x1); + + // Convert number of thresholds into uniform thresholds. + if (!Array.isArray(tz)) { + tz = tickStep(x0, x1, tz); + tz = range(Math.ceil(x0 / tz) * tz, Math.floor(x1 / tz) * tz, tz); // exclusive } + + // Remove any thresholds outside the domain. + var m = tz.length; + while (tz[0] <= x0) tz.shift(), --m; + while (tz[m - 1] > x1) tz.pop(), --m; + + var bins = new Array(m + 1), + bin; + + // Initialize bins. + for (i = 0; i <= m; ++i) { + bin = bins[i] = []; + bin.x0 = i > 0 ? tz[i - 1] : x0; + bin.x1 = i < m ? tz[i] : x1; + } + + // Assign data to bins by value, ignoring any outside the domain. + for (i = 0; i < n; ++i) { + x = values[i]; + if (x0 <= x && x <= x1) { + bins[bisectRight(tz, x, 0, m)].push(data[i]); + } + } + + return bins; } - return bins; + histogram.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value; + }; + + histogram.domain = function(_) { + return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain; + }; + + histogram.thresholds = function(_) { + return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold; + }; + + return histogram; } - histogram.value = function(_) { - return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value; - }; + function threshold(values, p, valueof) { + if (valueof == null) valueof = number; + if (!(n = values.length)) return; + if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); + if (p >= 1) return +valueof(values[n - 1], n - 1, values); + var n, + i = (n - 1) * p, + i0 = Math.floor(i), + value0 = +valueof(values[i0], i0, values), + value1 = +valueof(values[i0 + 1], i0 + 1, values); + return value0 + (value1 - value0) * (i - i0); + } - histogram.domain = function(_) { - return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain; - }; + function freedmanDiaconis(values, min, max) { + values = map.call(values, number).sort(ascending); + return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3))); + } - histogram.thresholds = function(_) { - return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold; - }; + function scott(values, min, max) { + return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3))); + } + + function max(values, valueof) { + var n = values.length, + i = -1, + value, + max; - return histogram; -} - -function threshold(values, p, valueof) { - if (valueof == null) valueof = number; - if (!(n = values.length)) return; - if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); - if (p >= 1) return +valueof(values[n - 1], n - 1, values); - var n, - i = (n - 1) * p, - i0 = Math.floor(i), - value0 = +valueof(values[i0], i0, values), - value1 = +valueof(values[i0 + 1], i0 + 1, values); - return value0 + (value1 - value0) * (i - i0); -} - -function freedmanDiaconis(values, min, max) { - values = map.call(values, number).sort(d3_ascending); - return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3))); -} - -function scott(values, min, max) { - return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3))); -} - -function max(values, valueof) { - var n = values.length, - i = -1, - value, - max; - - if (valueof == null) { - while (++i < n) { // Find the first comparable value. - if ((value = values[i]) != null && value >= value) { - max = value; - while (++i < n) { // Compare the remaining values. - if ((value = values[i]) != null && value > max) { - max = value; + if (valueof == null) { + while (++i < n) { // Find the first comparable value. + if ((value = values[i]) != null && value >= value) { + max = value; + while (++i < n) { // Compare the remaining values. + if ((value = values[i]) != null && value > max) { + max = value; + } } } } } - } - else { - while (++i < n) { // Find the first comparable value. - if ((value = valueof(values[i], i, values)) != null && value >= value) { - max = value; - while (++i < n) { // Compare the remaining values. - if ((value = valueof(values[i], i, values)) != null && value > max) { - max = value; + else { + while (++i < n) { // Find the first comparable value. + if ((value = valueof(values[i], i, values)) != null && value >= value) { + max = value; + while (++i < n) { // Compare the remaining values. + if ((value = valueof(values[i], i, values)) != null && value > max) { + max = value; + } } } } } - } - return max; -} + return max; + } -function mean(values, valueof) { - var n = values.length, - m = n, - i = -1, - value, - sum = 0; + function mean(values, valueof) { + var n = values.length, + m = n, + i = -1, + value, + sum = 0; - if (valueof == null) { - while (++i < n) { - if (!isNaN(value = number(values[i]))) sum += value; - else --m; + if (valueof == null) { + while (++i < n) { + if (!isNaN(value = number(values[i]))) sum += value; + else --m; + } } - } - else { - while (++i < n) { - if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value; - else --m; + else { + while (++i < n) { + if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value; + else --m; + } } - } - if (m) return sum / m; -} + if (m) return sum / m; + } -function d3_median(values, valueof) { - var n = values.length, - i = -1, - value, - numbers = []; + function d3_median(values, valueof) { + var n = values.length, + i = -1, + value, + numbers = []; - if (valueof == null) { - while (++i < n) { - if (!isNaN(value = number(values[i]))) { - numbers.push(value); + if (valueof == null) { + while (++i < n) { + if (!isNaN(value = number(values[i]))) { + numbers.push(value); + } } } - } - else { - while (++i < n) { - if (!isNaN(value = number(valueof(values[i], i, values)))) { - numbers.push(value); + else { + while (++i < n) { + if (!isNaN(value = number(valueof(values[i], i, values)))) { + numbers.push(value); + } } } - } - return threshold(numbers.sort(d3_ascending), 0.5); -} + return threshold(numbers.sort(ascending), 0.5); + } -function merge(arrays) { - var n = arrays.length, - m, - i = -1, - j = 0, - merged, - array; + function merge(arrays) { + var n = arrays.length, + m, + i = -1, + j = 0, + merged, + array; - while (++i < n) j += arrays[i].length; - merged = new Array(j); + while (++i < n) j += arrays[i].length; + merged = new Array(j); - while (--n >= 0) { - array = arrays[n]; - m = array.length; - while (--m >= 0) { - merged[--j] = array[m]; + while (--n >= 0) { + array = arrays[n]; + m = array.length; + while (--m >= 0) { + merged[--j] = array[m]; + } } - } - return merged; -} + return merged; + } -function min(values, valueof) { - var n = values.length, - i = -1, - value, - min; + function min(values, valueof) { + var n = values.length, + i = -1, + value, + min; - if (valueof == null) { - while (++i < n) { // Find the first comparable value. - if ((value = values[i]) != null && value >= value) { - min = value; - while (++i < n) { // Compare the remaining values. - if ((value = values[i]) != null && min > value) { - min = value; + if (valueof == null) { + while (++i < n) { // Find the first comparable value. + if ((value = values[i]) != null && value >= value) { + min = value; + while (++i < n) { // Compare the remaining values. + if ((value = values[i]) != null && min > value) { + min = value; + } } } } } - } - else { - while (++i < n) { // Find the first comparable value. - if ((value = valueof(values[i], i, values)) != null && value >= value) { - min = value; - while (++i < n) { // Compare the remaining values. - if ((value = valueof(values[i], i, values)) != null && min > value) { - min = value; + else { + while (++i < n) { // Find the first comparable value. + if ((value = valueof(values[i], i, values)) != null && value >= value) { + min = value; + while (++i < n) { // Compare the remaining values. + if ((value = valueof(values[i], i, values)) != null && min > value) { + min = value; + } } } } } - } - return min; -} + return min; + } -function permute(array, indexes) { - var i = indexes.length, permutes = new Array(i); - while (i--) permutes[i] = array[indexes[i]]; - return permutes; -} + function permute(array, indexes) { + var i = indexes.length, permutes = new Array(i); + while (i--) permutes[i] = array[indexes[i]]; + return permutes; + } -function scan(values, compare) { - if (!(n = values.length)) return; - var n, - i = 0, - j = 0, - xi, - xj = values[j]; + function scan(values, compare) { + if (!(n = values.length)) return; + var n, + i = 0, + j = 0, + xi, + xj = values[j]; - if (compare == null) compare = d3_ascending; + if (compare == null) compare = ascending; - while (++i < n) { - if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) { - xj = xi, j = i; + while (++i < n) { + if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) { + xj = xi, j = i; + } } + + if (compare(xj, xj) === 0) return j; } - if (compare(xj, xj) === 0) return j; -} + function shuffle(array, i0, i1) { + var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0), + t, + i; -function shuffle(array, i0, i1) { - var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0), - t, - i; + while (m) { + i = Math.random() * m-- | 0; + t = array[m + i0]; + array[m + i0] = array[i + i0]; + array[i + i0] = t; + } - while (m) { - i = Math.random() * m-- | 0; - t = array[m + i0]; - array[m + i0] = array[i + i0]; - array[i + i0] = t; + return array; } - return array; -} + function sum(values, valueof) { + var n = values.length, + i = -1, + value, + sum = 0; -function sum(values, valueof) { - var n = values.length, - i = -1, - value, - sum = 0; + if (valueof == null) { + while (++i < n) { + if (value = +values[i]) sum += value; // Note: zero and null are equivalent. + } + } - if (valueof == null) { - while (++i < n) { - if (value = +values[i]) sum += value; // Note: zero and null are equivalent. + else { + while (++i < n) { + if (value = +valueof(values[i], i, values)) sum += value; + } } + + return sum; } - else { - while (++i < n) { - if (value = +valueof(values[i], i, values)) sum += value; + function transpose(matrix) { + if (!(n = matrix.length)) return []; + for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) { + for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) { + row[j] = matrix[j][i]; + } } + return transpose; } - return sum; -} + function length(d) { + return d.length; + } -function transpose(matrix) { - if (!(n = matrix.length)) return []; - for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) { - for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) { - row[j] = matrix[j][i]; - } + function zip() { + return transpose(arguments); } - return transpose; -} -function length(d) { - return d.length; -} + var slice$1 = Array.prototype.slice; -function zip() { - return transpose(arguments); -} + function identity$1(x) { + return x; + } -var slice$1 = Array.prototype.slice; + var top = 1, + right = 2, + bottom = 3, + left = 4, + epsilon = 1e-6; -function identity$1(x) { - return x; -} + function translateX(x) { + return "translate(" + (x + 0.5) + ",0)"; + } -var top = 1, - right = 2, - bottom = 3, - left = 4, - epsilon = 1e-6; + function translateY(y) { + return "translate(0," + (y + 0.5) + ")"; + } -function translateX(x) { - return "translate(" + (x + 0.5) + ",0)"; -} + function number$1(scale) { + return function(d) { + return +scale(d); + }; + } -function translateY(y) { - return "translate(0," + (y + 0.5) + ")"; -} + function center(scale) { + var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset. + if (scale.round()) offset = Math.round(offset); + return function(d) { + return +scale(d) + offset; + }; + } + + function entering() { + return !this.__axis; + } + + function axis(orient, scale) { + var tickArguments = [], + tickValues = null, + tickFormat = null, + tickSizeInner = 6, + tickSizeOuter = 6, + tickPadding = 3, + k = orient === top || orient === left ? -1 : 1, + x = orient === left || orient === right ? "x" : "y", + transform = orient === top || orient === bottom ? translateX : translateY; + + function axis(context) { + var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues, + format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat, + spacing = Math.max(tickSizeInner, 0) + tickPadding, + range = scale.range(), + range0 = +range[0] + 0.5, + range1 = +range[range.length - 1] + 0.5, + position = (scale.bandwidth ? center : number$1)(scale.copy()), + selection = context.selection ? context.selection() : context, + path = selection.selectAll(".domain").data([null]), + tick = selection.selectAll(".tick").data(values, scale).order(), + tickExit = tick.exit(), + tickEnter = tick.enter().append("g").attr("class", "tick"), + line = tick.select("line"), + text = tick.select("text"); + + path = path.merge(path.enter().insert("path", ".tick") + .attr("class", "domain") + .attr("stroke", "#000")); + + tick = tick.merge(tickEnter); + + line = line.merge(tickEnter.append("line") + .attr("stroke", "#000") + .attr(x + "2", k * tickSizeInner)); + + text = text.merge(tickEnter.append("text") + .attr("fill", "#000") + .attr(x, k * spacing) + .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em")); + + if (context !== selection) { + path = path.transition(context); + tick = tick.transition(context); + line = line.transition(context); + text = text.transition(context); + + tickExit = tickExit.transition(context) + .attr("opacity", epsilon) + .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); }); + + tickEnter + .attr("opacity", epsilon) + .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); }); + } -function number$1(scale) { - return function(d) { - return +scale(d); - }; -} + tickExit.remove(); -function center(scale) { - var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset. - if (scale.round()) offset = Math.round(offset); - return function(d) { - return +scale(d) + offset; - }; -} - -function entering() { - return !this.__axis; -} - -function axis(orient, scale) { - var tickArguments = [], - tickValues = null, - tickFormat = null, - tickSizeInner = 6, - tickSizeOuter = 6, - tickPadding = 3, - k = orient === top || orient === left ? -1 : 1, - x = orient === left || orient === right ? "x" : "y", - transform = orient === top || orient === bottom ? translateX : translateY; - - function axis(context) { - var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues, - format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat, - spacing = Math.max(tickSizeInner, 0) + tickPadding, - range = scale.range(), - range0 = +range[0] + 0.5, - range1 = +range[range.length - 1] + 0.5, - position = (scale.bandwidth ? center : number$1)(scale.copy()), - selection = context.selection ? context.selection() : context, - path = selection.selectAll(".domain").data([null]), - tick = selection.selectAll(".tick").data(values, scale).order(), - tickExit = tick.exit(), - tickEnter = tick.enter().append("g").attr("class", "tick"), - line = tick.select("line"), - text = tick.select("text"); - - path = path.merge(path.enter().insert("path", ".tick") - .attr("class", "domain") - .attr("stroke", "#000")); - - tick = tick.merge(tickEnter); - - line = line.merge(tickEnter.append("line") - .attr("stroke", "#000") - .attr(x + "2", k * tickSizeInner)); - - text = text.merge(tickEnter.append("text") - .attr("fill", "#000") - .attr(x, k * spacing) - .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em")); - - if (context !== selection) { - path = path.transition(context); - tick = tick.transition(context); - line = line.transition(context); - text = text.transition(context); - - tickExit = tickExit.transition(context) - .attr("opacity", epsilon) - .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); }); - - tickEnter - .attr("opacity", epsilon) - .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); }); - } - - tickExit.remove(); - - path - .attr("d", orient === left || orient == right - ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter - : "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter); - - tick - .attr("opacity", 1) - .attr("transform", function(d) { return transform(position(d)); }); - - line - .attr(x + "2", k * tickSizeInner); - - text - .attr(x, k * spacing) - .text(format); - - selection.filter(entering) - .attr("fill", "none") - .attr("font-size", 10) - .attr("font-family", "sans-serif") - .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle"); - - selection - .each(function() { this.__axis = position; }); - } - - axis.scale = function(_) { - return arguments.length ? (scale = _, axis) : scale; - }; + path + .attr("d", orient === left || orient == right + ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter + : "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter); - axis.ticks = function() { - return tickArguments = slice$1.call(arguments), axis; - }; + tick + .attr("opacity", 1) + .attr("transform", function(d) { return transform(position(d)); }); - axis.tickArguments = function(_) { - return arguments.length ? (tickArguments = _ == null ? [] : slice$1.call(_), axis) : tickArguments.slice(); - }; + line + .attr(x + "2", k * tickSizeInner); - axis.tickValues = function(_) { - return arguments.length ? (tickValues = _ == null ? null : slice$1.call(_), axis) : tickValues && tickValues.slice(); - }; + text + .attr(x, k * spacing) + .text(format); - axis.tickFormat = function(_) { - return arguments.length ? (tickFormat = _, axis) : tickFormat; - }; + selection.filter(entering) + .attr("fill", "none") + .attr("font-size", 10) + .attr("font-family", "sans-serif") + .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle"); - axis.tickSize = function(_) { - return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner; - }; + selection + .each(function() { this.__axis = position; }); + } - axis.tickSizeInner = function(_) { - return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner; - }; + axis.scale = function(_) { + return arguments.length ? (scale = _, axis) : scale; + }; - axis.tickSizeOuter = function(_) { - return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter; - }; + axis.ticks = function() { + return tickArguments = slice$1.call(arguments), axis; + }; - axis.tickPadding = function(_) { - return arguments.length ? (tickPadding = +_, axis) : tickPadding; - }; + axis.tickArguments = function(_) { + return arguments.length ? (tickArguments = _ == null ? [] : slice$1.call(_), axis) : tickArguments.slice(); + }; - return axis; -} + axis.tickValues = function(_) { + return arguments.length ? (tickValues = _ == null ? null : slice$1.call(_), axis) : tickValues && tickValues.slice(); + }; -function axisTop(scale) { - return axis(top, scale); -} + axis.tickFormat = function(_) { + return arguments.length ? (tickFormat = _, axis) : tickFormat; + }; -function axisRight(scale) { - return axis(right, scale); -} + axis.tickSize = function(_) { + return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner; + }; -function axisBottom(scale) { - return axis(bottom, scale); -} + axis.tickSizeInner = function(_) { + return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner; + }; -function axisLeft(scale) { - return axis(left, scale); -} + axis.tickSizeOuter = function(_) { + return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter; + }; -var noop = {value: function() {}}; + axis.tickPadding = function(_) { + return arguments.length ? (tickPadding = +_, axis) : tickPadding; + }; -function dispatch() { - for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { - if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t); - _[t] = []; + return axis; } - return new Dispatch(_); -} -function Dispatch(_) { - this._ = _; -} + function axisTop(scale) { + return axis(top, scale); + } -function parseTypenames(typenames, types) { - return typenames.trim().split(/^|\s+/).map(function(t) { - var name = "", i = t.indexOf("."); - if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); - if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); - return {type: t, name: name}; - }); -} + function axisRight(scale) { + return axis(right, scale); + } -Dispatch.prototype = dispatch.prototype = { - constructor: Dispatch, - on: function(typename, callback) { - var _ = this._, - T = parseTypenames(typename + "", _), - t, - i = -1, - n = T.length; + function axisBottom(scale) { + return axis(bottom, scale); + } - // If no callback was specified, return the callback of the given type and name. - if (arguments.length < 2) { - while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; - return; - } + function axisLeft(scale) { + return axis(left, scale); + } - // If a type was specified, set the callback for the given type and name. - // Otherwise, if a null callback was specified, remove callbacks of the given name. - if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); - while (++i < n) { - if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback); - else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); + var noop = {value: function() {}}; + + function dispatch() { + for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { + if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t); + _[t] = []; } + return new Dispatch(_); + } - return this; - }, - copy: function() { - var copy = {}, _ = this._; - for (var t in _) copy[t] = _[t].slice(); - return new Dispatch(copy); - }, - call: function(type, that) { - if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - }, - apply: function(type, that, args) { - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - } -}; - -function get(type, name) { - for (var i = 0, n = type.length, c; i < n; ++i) { - if ((c = type[i]).name === name) { - return c.value; - } - } -} - -function set(type, name, callback) { - for (var i = 0, n = type.length; i < n; ++i) { - if (type[i].name === name) { - type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1)); - break; - } - } - if (callback != null) type.push({name: name, value: callback}); - return type; -} - -var xhtml = "http://www.w3.org/1999/xhtml"; - -var namespaces = { - svg: "http://www.w3.org/2000/svg", - xhtml: xhtml, - xlink: "http://www.w3.org/1999/xlink", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/" -}; - -function namespace(name) { - var prefix = name += "", i = prefix.indexOf(":"); - if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); - return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; -} - -function creatorInherit(name) { - return function() { - var document = this.ownerDocument, - uri = this.namespaceURI; - return uri === xhtml && document.documentElement.namespaceURI === xhtml - ? document.createElement(name) - : document.createElementNS(uri, name); - }; -} + function Dispatch(_) { + this._ = _; + } -function creatorFixed(fullname) { - return function() { - return this.ownerDocument.createElementNS(fullname.space, fullname.local); - }; -} + function parseTypenames(typenames, types) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); + return {type: t, name: name}; + }); + } -function creator(name) { - var fullname = namespace(name); - return (fullname.local - ? creatorFixed - : creatorInherit)(fullname); -} + Dispatch.prototype = dispatch.prototype = { + constructor: Dispatch, + on: function(typename, callback) { + var _ = this._, + T = parseTypenames(typename + "", _), + t, + i = -1, + n = T.length; -function none() {} + // If no callback was specified, return the callback of the given type and name. + if (arguments.length < 2) { + while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; + return; + } -function selector(selector) { - return selector == null ? none : function() { - return this.querySelector(selector); - }; -} + // If a type was specified, set the callback for the given type and name. + // Otherwise, if a null callback was specified, remove callbacks of the given name. + if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); + while (++i < n) { + if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback); + else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); + } -function selection_select(select) { - if (typeof select !== "function") select = selector(select); + return this; + }, + copy: function() { + var copy = {}, _ = this._; + for (var t in _) copy[t] = _[t].slice(); + return new Dispatch(copy); + }, + call: function(type, that) { + if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + }, + apply: function(type, that, args) { + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + } + }; - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { - if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - subgroup[i] = subnode; + function get(type, name) { + for (var i = 0, n = type.length, c; i < n; ++i) { + if ((c = type[i]).name === name) { + return c.value; } } } - return new Selection(subgroups, this._parents); -} + function set(type, name, callback) { + for (var i = 0, n = type.length; i < n; ++i) { + if (type[i].name === name) { + type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1)); + break; + } + } + if (callback != null) type.push({name: name, value: callback}); + return type; + } -function empty() { - return []; -} + var xhtml = "http://www.w3.org/1999/xhtml"; -function selectorAll(selector) { - return selector == null ? empty : function() { - return this.querySelectorAll(selector); + var namespaces = { + svg: "http://www.w3.org/2000/svg", + xhtml: xhtml, + xlink: "http://www.w3.org/1999/xlink", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/" }; -} -function selection_selectAll(select) { - if (typeof select !== "function") select = selectorAll(select); - - for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - subgroups.push(select.call(node, node.__data__, i, group)); - parents.push(node); - } - } + function namespace(name) { + var prefix = name += "", i = prefix.indexOf(":"); + if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); + return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; } - return new Selection(subgroups, parents); -} + function creatorInherit(name) { + return function() { + var document = this.ownerDocument, + uri = this.namespaceURI; + return uri === xhtml && document.documentElement.namespaceURI === xhtml + ? document.createElement(name) + : document.createElementNS(uri, name); + }; + } -var matcher = function(selector) { - return function() { - return this.matches(selector); - }; -}; - -if (typeof document !== "undefined") { - var element = document.documentElement; - if (!element.matches) { - var vendorMatches = element.webkitMatchesSelector - || element.msMatchesSelector - || element.mozMatchesSelector - || element.oMatchesSelector; - matcher = function(selector) { - return function() { - return vendorMatches.call(this, selector); - }; + function creatorFixed(fullname) { + return function() { + return this.ownerDocument.createElementNS(fullname.space, fullname.local); }; } -} -var matcher$1 = matcher; + function creator(name) { + var fullname = namespace(name); + return (fullname.local + ? creatorFixed + : creatorInherit)(fullname); + } -function selection_filter(match) { - if (typeof match !== "function") match = matcher$1(match); + function none() {} - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { - if ((node = group[i]) && match.call(node, node.__data__, i, group)) { - subgroup.push(node); - } - } + function selector(selector) { + return selector == null ? none : function() { + return this.querySelector(selector); + }; } - return new Selection(subgroups, this._parents); -} - -function sparse(update) { - return new Array(update.length); -} + function selection_select(select) { + if (typeof select !== "function") select = selector(select); -function selection_enter() { - return new Selection(this._enter || this._groups.map(sparse), this._parents); -} + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { + if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + subgroup[i] = subnode; + } + } + } -function EnterNode(parent, datum) { - this.ownerDocument = parent.ownerDocument; - this.namespaceURI = parent.namespaceURI; - this._next = null; - this._parent = parent; - this.__data__ = datum; -} + return new Selection(subgroups, this._parents); + } -EnterNode.prototype = { - constructor: EnterNode, - appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, - insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, - querySelector: function(selector) { return this._parent.querySelector(selector); }, - querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } -}; - -function constant$1(x) { - return function() { - return x; - }; -} - -var keyPrefix = "$"; // Protect against keys like “__proto__”. - -function bindIndex(parent, group, enter, update, exit, data) { - var i = 0, - node, - groupLength = group.length, - dataLength = data.length; - - // Put any non-null nodes that fit into update. - // Put any null nodes into enter. - // Put any remaining data into enter. - for (; i < dataLength; ++i) { - if (node = group[i]) { - node.__data__ = data[i]; - update[i] = node; - } else { - enter[i] = new EnterNode(parent, data[i]); - } + function empty() { + return []; } - // Put any non-null nodes that don’t fit into exit. - for (; i < groupLength; ++i) { - if (node = group[i]) { - exit[i] = node; - } + function selectorAll(selector) { + return selector == null ? empty : function() { + return this.querySelectorAll(selector); + }; } -} -function bindKey(parent, group, enter, update, exit, data, key) { - var i, - node, - nodeByKeyValue = {}, - groupLength = group.length, - dataLength = data.length, - keyValues = new Array(groupLength), - keyValue; + function selection_selectAll(select) { + if (typeof select !== "function") select = selectorAll(select); - // Compute the key for each node. - // If multiple nodes have the same key, the duplicates are added to exit. - for (i = 0; i < groupLength; ++i) { - if (node = group[i]) { - keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group); - if (keyValue in nodeByKeyValue) { - exit[i] = node; - } else { - nodeByKeyValue[keyValue] = node; + for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + subgroups.push(select.call(node, node.__data__, i, group)); + parents.push(node); + } } } - } - // Compute the key for each datum. - // If there a node associated with this key, join and add it to update. - // If there is not (or the key is a duplicate), add it to enter. - for (i = 0; i < dataLength; ++i) { - keyValue = keyPrefix + key.call(parent, data[i], i, data); - if (node = nodeByKeyValue[keyValue]) { - update[i] = node; - node.__data__ = data[i]; - nodeByKeyValue[keyValue] = null; - } else { - enter[i] = new EnterNode(parent, data[i]); - } + return new Selection(subgroups, parents); } - // Add any remaining nodes that were not bound to data to exit. - for (i = 0; i < groupLength; ++i) { - if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) { - exit[i] = node; - } - } -} + var matcher = function(selector) { + return function() { + return this.matches(selector); + }; + }; -function selection_data(value, key) { - if (!value) { - data = new Array(this.size()), j = -1; - this.each(function(d) { data[++j] = d; }); - return data; + if (typeof document !== "undefined") { + var element = document.documentElement; + if (!element.matches) { + var vendorMatches = element.webkitMatchesSelector + || element.msMatchesSelector + || element.mozMatchesSelector + || element.oMatchesSelector; + matcher = function(selector) { + return function() { + return vendorMatches.call(this, selector); + }; + }; + } } - var bind = key ? bindKey : bindIndex, - parents = this._parents, - groups = this._groups; + var matcher$1 = matcher; - if (typeof value !== "function") value = constant$1(value); + function selection_filter(match) { + if (typeof match !== "function") match = matcher$1(match); - for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { - var parent = parents[j], - group = groups[j], - groupLength = group.length, - data = value.call(parent, parent && parent.__data__, j, parents), - dataLength = data.length, - enterGroup = enter[j] = new Array(dataLength), - updateGroup = update[j] = new Array(dataLength), - exitGroup = exit[j] = new Array(groupLength); - - bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); - - // Now connect the enter nodes to their following update node, such that - // appendChild can insert the materialized enter node before this node, - // rather than at the end of the parent node. - for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { - if (previous = enterGroup[i0]) { - if (i0 >= i1) i1 = i0 + 1; - while (!(next = updateGroup[i1]) && ++i1 < dataLength); - previous._next = next || null; + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { + if ((node = group[i]) && match.call(node, node.__data__, i, group)) { + subgroup.push(node); + } } } - } - update = new Selection(update, parents); - update._enter = enter; - update._exit = exit; - return update; -} + return new Selection(subgroups, this._parents); + } -function selection_exit() { - return new Selection(this._exit || this._groups.map(sparse), this._parents); -} + function sparse(update) { + return new Array(update.length); + } -function selection_merge(selection$$1) { + function selection_enter() { + return new Selection(this._enter || this._groups.map(sparse), this._parents); + } - for (var groups0 = this._groups, groups1 = selection$$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { - for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group0[i] || group1[i]) { - merge[i] = node; - } - } + function EnterNode(parent, datum) { + this.ownerDocument = parent.ownerDocument; + this.namespaceURI = parent.namespaceURI; + this._next = null; + this._parent = parent; + this.__data__ = datum; } - for (; j < m0; ++j) { - merges[j] = groups0[j]; + EnterNode.prototype = { + constructor: EnterNode, + appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, + insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, + querySelector: function(selector) { return this._parent.querySelector(selector); }, + querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } + }; + + function constant$1(x) { + return function() { + return x; + }; } - return new Selection(merges, this._parents); -} + var keyPrefix = "$"; // Protect against keys like “__proto__”. + + function bindIndex(parent, group, enter, update, exit, data) { + var i = 0, + node, + groupLength = group.length, + dataLength = data.length; -function selection_order() { + // Put any non-null nodes that fit into update. + // Put any null nodes into enter. + // Put any remaining data into enter. + for (; i < dataLength; ++i) { + if (node = group[i]) { + node.__data__ = data[i]; + update[i] = node; + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } - for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { - for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { + // Put any non-null nodes that don’t fit into exit. + for (; i < groupLength; ++i) { if (node = group[i]) { - if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); - next = node; + exit[i] = node; } } } - return this; -} + function bindKey(parent, group, enter, update, exit, data, key) { + var i, + node, + nodeByKeyValue = {}, + groupLength = group.length, + dataLength = data.length, + keyValues = new Array(groupLength), + keyValue; -function selection_sort(compare) { - if (!compare) compare = ascending; + // Compute the key for each node. + // If multiple nodes have the same key, the duplicates are added to exit. + for (i = 0; i < groupLength; ++i) { + if (node = group[i]) { + keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group); + if (keyValue in nodeByKeyValue) { + exit[i] = node; + } else { + nodeByKeyValue[keyValue] = node; + } + } + } - function compareNode(a, b) { - return a && b ? compare(a.__data__, b.__data__) : !a - !b; - } + // Compute the key for each datum. + // If there a node associated with this key, join and add it to update. + // If there is not (or the key is a duplicate), add it to enter. + for (i = 0; i < dataLength; ++i) { + keyValue = keyPrefix + key.call(parent, data[i], i, data); + if (node = nodeByKeyValue[keyValue]) { + update[i] = node; + node.__data__ = data[i]; + nodeByKeyValue[keyValue] = null; + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } - for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group[i]) { - sortgroup[i] = node; + // Add any remaining nodes that were not bound to data to exit. + for (i = 0; i < groupLength; ++i) { + if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) { + exit[i] = node; } } - sortgroup.sort(compareNode); } - return new Selection(sortgroups, this._parents).order(); -} + function selection_data(value, key) { + if (!value) { + data = new Array(this.size()), j = -1; + this.each(function(d) { data[++j] = d; }); + return data; + } -function ascending(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} + var bind = key ? bindKey : bindIndex, + parents = this._parents, + groups = this._groups; -function selection_call() { - var callback = arguments[0]; - arguments[0] = this; - callback.apply(null, arguments); - return this; -} + if (typeof value !== "function") value = constant$1(value); -function selection_nodes() { - var nodes = new Array(this.size()), i = -1; - this.each(function() { nodes[++i] = this; }); - return nodes; -} + for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { + var parent = parents[j], + group = groups[j], + groupLength = group.length, + data = value.call(parent, parent && parent.__data__, j, parents), + dataLength = data.length, + enterGroup = enter[j] = new Array(dataLength), + updateGroup = update[j] = new Array(dataLength), + exitGroup = exit[j] = new Array(groupLength); -function selection_node() { + bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); - for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { - for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { - var node = group[i]; - if (node) return node; + // Now connect the enter nodes to their following update node, such that + // appendChild can insert the materialized enter node before this node, + // rather than at the end of the parent node. + for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { + if (previous = enterGroup[i0]) { + if (i0 >= i1) i1 = i0 + 1; + while (!(next = updateGroup[i1]) && ++i1 < dataLength); + previous._next = next || null; + } + } } - } - return null; -} + update = new Selection(update, parents); + update._enter = enter; + update._exit = exit; + return update; + } -function selection_size() { - var size = 0; - this.each(function() { ++size; }); - return size; -} + function selection_exit() { + return new Selection(this._exit || this._groups.map(sparse), this._parents); + } -function selection_empty() { - return !this.node(); -} + function selection_merge(selection$$1) { -function selection_each(callback) { + for (var groups0 = this._groups, groups1 = selection$$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { + for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group0[i] || group1[i]) { + merge[i] = node; + } + } + } - for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { - for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { - if (node = group[i]) callback.call(node, node.__data__, i, group); + for (; j < m0; ++j) { + merges[j] = groups0[j]; } + + return new Selection(merges, this._parents); } - return this; -} + function selection_order() { -function attrRemove(name) { - return function() { - this.removeAttribute(name); - }; -} + for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { + for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { + if (node = group[i]) { + if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); + next = node; + } + } + } -function attrRemoveNS(fullname) { - return function() { - this.removeAttributeNS(fullname.space, fullname.local); - }; -} + return this; + } -function attrConstant(name, value) { - return function() { - this.setAttribute(name, value); - }; -} + function selection_sort(compare) { + if (!compare) compare = ascending$1; -function attrConstantNS(fullname, value) { - return function() { - this.setAttributeNS(fullname.space, fullname.local, value); - }; -} + function compareNode(a, b) { + return a && b ? compare(a.__data__, b.__data__) : !a - !b; + } -function attrFunction(name, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.removeAttribute(name); - else this.setAttribute(name, v); - }; -} + for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group[i]) { + sortgroup[i] = node; + } + } + sortgroup.sort(compareNode); + } -function attrFunctionNS(fullname, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.removeAttributeNS(fullname.space, fullname.local); - else this.setAttributeNS(fullname.space, fullname.local, v); - }; -} + return new Selection(sortgroups, this._parents).order(); + } -function selection_attr(name, value) { - var fullname = namespace(name); + function ascending$1(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; + } - if (arguments.length < 2) { - var node = this.node(); - return fullname.local - ? node.getAttributeNS(fullname.space, fullname.local) - : node.getAttribute(fullname); + function selection_call() { + var callback = arguments[0]; + arguments[0] = this; + callback.apply(null, arguments); + return this; } - return this.each((value == null - ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function" - ? (fullname.local ? attrFunctionNS : attrFunction) - : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value)); -} + function selection_nodes() { + var nodes = new Array(this.size()), i = -1; + this.each(function() { nodes[++i] = this; }); + return nodes; + } -function defaultView(node) { - return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node - || (node.document && node) // node is a Window - || node.defaultView; // node is a Document -} + function selection_node() { -function styleRemove(name) { - return function() { - this.style.removeProperty(name); - }; -} + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { + var node = group[i]; + if (node) return node; + } + } -function styleConstant(name, value, priority) { - return function() { - this.style.setProperty(name, value, priority); - }; -} + return null; + } -function styleFunction(name, value, priority) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.style.removeProperty(name); - else this.style.setProperty(name, v, priority); - }; -} - -function selection_style(name, value, priority) { - return arguments.length > 1 - ? this.each((value == null - ? styleRemove : typeof value === "function" - ? styleFunction - : styleConstant)(name, value, priority == null ? "" : priority)) - : styleValue(this.node(), name); -} - -function styleValue(node, name) { - return node.style.getPropertyValue(name) - || defaultView(node).getComputedStyle(node, null).getPropertyValue(name); -} - -function propertyRemove(name) { - return function() { - delete this[name]; - }; -} + function selection_size() { + var size = 0; + this.each(function() { ++size; }); + return size; + } -function propertyConstant(name, value) { - return function() { - this[name] = value; - }; -} + function selection_empty() { + return !this.node(); + } -function propertyFunction(name, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) delete this[name]; - else this[name] = v; - }; -} - -function selection_property(name, value) { - return arguments.length > 1 - ? this.each((value == null - ? propertyRemove : typeof value === "function" - ? propertyFunction - : propertyConstant)(name, value)) - : this.node()[name]; -} - -function classArray(string) { - return string.trim().split(/^|\s+/); -} - -function classList(node) { - return node.classList || new ClassList(node); -} - -function ClassList(node) { - this._node = node; - this._names = classArray(node.getAttribute("class") || ""); -} - -ClassList.prototype = { - add: function(name) { - var i = this._names.indexOf(name); - if (i < 0) { - this._names.push(name); - this._node.setAttribute("class", this._names.join(" ")); - } - }, - remove: function(name) { - var i = this._names.indexOf(name); - if (i >= 0) { - this._names.splice(i, 1); - this._node.setAttribute("class", this._names.join(" ")); - } - }, - contains: function(name) { - return this._names.indexOf(name) >= 0; - } -}; - -function classedAdd(node, names) { - var list = classList(node), i = -1, n = names.length; - while (++i < n) list.add(names[i]); -} - -function classedRemove(node, names) { - var list = classList(node), i = -1, n = names.length; - while (++i < n) list.remove(names[i]); -} - -function classedTrue(names) { - return function() { - classedAdd(this, names); - }; -} + function selection_each(callback) { -function classedFalse(names) { - return function() { - classedRemove(this, names); - }; -} + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { + if (node = group[i]) callback.call(node, node.__data__, i, group); + } + } -function classedFunction(names, value) { - return function() { - (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); - }; -} + return this; + } -function selection_classed(name, value) { - var names = classArray(name + ""); + function attrRemove(name) { + return function() { + this.removeAttribute(name); + }; + } - if (arguments.length < 2) { - var list = classList(this.node()), i = -1, n = names.length; - while (++i < n) if (!list.contains(names[i])) return false; - return true; + function attrRemoveNS(fullname) { + return function() { + this.removeAttributeNS(fullname.space, fullname.local); + }; } - return this.each((typeof value === "function" - ? classedFunction : value - ? classedTrue - : classedFalse)(names, value)); -} + function attrConstant(name, value) { + return function() { + this.setAttribute(name, value); + }; + } -function textRemove() { - this.textContent = ""; -} + function attrConstantNS(fullname, value) { + return function() { + this.setAttributeNS(fullname.space, fullname.local, value); + }; + } -function textConstant(value) { - return function() { - this.textContent = value; - }; -} + function attrFunction(name, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.removeAttribute(name); + else this.setAttribute(name, v); + }; + } -function textFunction(value) { - return function() { - var v = value.apply(this, arguments); - this.textContent = v == null ? "" : v; - }; -} - -function selection_text(value) { - return arguments.length - ? this.each(value == null - ? textRemove : (typeof value === "function" - ? textFunction - : textConstant)(value)) - : this.node().textContent; -} - -function htmlRemove() { - this.innerHTML = ""; -} - -function htmlConstant(value) { - return function() { - this.innerHTML = value; - }; -} + function attrFunctionNS(fullname, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.removeAttributeNS(fullname.space, fullname.local); + else this.setAttributeNS(fullname.space, fullname.local, v); + }; + } -function htmlFunction(value) { - return function() { - var v = value.apply(this, arguments); - this.innerHTML = v == null ? "" : v; - }; -} - -function selection_html(value) { - return arguments.length - ? this.each(value == null - ? htmlRemove : (typeof value === "function" - ? htmlFunction - : htmlConstant)(value)) - : this.node().innerHTML; -} - -function raise() { - if (this.nextSibling) this.parentNode.appendChild(this); -} - -function selection_raise() { - return this.each(raise); -} - -function lower() { - if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); -} - -function selection_lower() { - return this.each(lower); -} - -function selection_append(name) { - var create = typeof name === "function" ? name : creator(name); - return this.select(function() { - return this.appendChild(create.apply(this, arguments)); - }); -} + function selection_attr(name, value) { + var fullname = namespace(name); -function constantNull() { - return null; -} + if (arguments.length < 2) { + var node = this.node(); + return fullname.local + ? node.getAttributeNS(fullname.space, fullname.local) + : node.getAttribute(fullname); + } -function selection_insert(name, before) { - var create = typeof name === "function" ? name : creator(name), - select = before == null ? constantNull : typeof before === "function" ? before : selector(before); - return this.select(function() { - return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); - }); -} + return this.each((value == null + ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function" + ? (fullname.local ? attrFunctionNS : attrFunction) + : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value)); + } + + function defaultView(node) { + return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node + || (node.document && node) // node is a Window + || node.defaultView; // node is a Document + } + + function styleRemove(name) { + return function() { + this.style.removeProperty(name); + }; + } -function remove() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); -} + function styleConstant(name, value, priority) { + return function() { + this.style.setProperty(name, value, priority); + }; + } -function selection_remove() { - return this.each(remove); -} + function styleFunction(name, value, priority) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.style.removeProperty(name); + else this.style.setProperty(name, v, priority); + }; + } -function selection_cloneShallow() { - return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling); -} + function selection_style(name, value, priority) { + return arguments.length > 1 + ? this.each((value == null + ? styleRemove : typeof value === "function" + ? styleFunction + : styleConstant)(name, value, priority == null ? "" : priority)) + : styleValue(this.node(), name); + } -function selection_cloneDeep() { - return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling); -} + function styleValue(node, name) { + return node.style.getPropertyValue(name) + || defaultView(node).getComputedStyle(node, null).getPropertyValue(name); + } -function selection_clone(deep) { - return this.select(deep ? selection_cloneDeep : selection_cloneShallow); -} + function propertyRemove(name) { + return function() { + delete this[name]; + }; + } -function selection_datum(value) { - return arguments.length - ? this.property("__data__", value) - : this.node().__data__; -} + function propertyConstant(name, value) { + return function() { + this[name] = value; + }; + } -var filterEvents = {}; + function propertyFunction(name, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) delete this[name]; + else this[name] = v; + }; + } -var event = null; + function selection_property(name, value) { + return arguments.length > 1 + ? this.each((value == null + ? propertyRemove : typeof value === "function" + ? propertyFunction + : propertyConstant)(name, value)) + : this.node()[name]; + } -if (typeof document !== "undefined") { - var element$1 = document.documentElement; - if (!("onmouseenter" in element$1)) { - filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"}; + function classArray(string) { + return string.trim().split(/^|\s+/); } -} -function filterContextListener(listener, index, group) { - listener = contextListener(listener, index, group); - return function(event) { - var related = event.relatedTarget; - if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { - listener.call(this, event); - } - }; -} + function classList(node) { + return node.classList || new ClassList(node); + } -function contextListener(listener, index, group) { - return function(event1) { - var event0 = event; // Events can be reentrant (e.g., focus). - event = event1; - try { - listener.call(this, this.__data__, index, group); - } finally { - event = event0; - } - }; -} + function ClassList(node) { + this._node = node; + this._names = classArray(node.getAttribute("class") || ""); + } -function parseTypenames$1(typenames) { - return typenames.trim().split(/^|\s+/).map(function(t) { - var name = "", i = t.indexOf("."); - if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); - return {type: t, name: name}; - }); -} - -function onRemove(typename) { - return function() { - var on = this.__on; - if (!on) return; - for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { - if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { - this.removeEventListener(o.type, o.listener, o.capture); - } else { - on[++i] = o; + ClassList.prototype = { + add: function(name) { + var i = this._names.indexOf(name); + if (i < 0) { + this._names.push(name); + this._node.setAttribute("class", this._names.join(" ")); } - } - if (++i) on.length = i; - else delete this.__on; - }; -} - -function onAdd(typename, value, capture) { - var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener; - return function(d, i, group) { - var on = this.__on, o, listener = wrap(value, i, group); - if (on) for (var j = 0, m = on.length; j < m; ++j) { - if ((o = on[j]).type === typename.type && o.name === typename.name) { - this.removeEventListener(o.type, o.listener, o.capture); - this.addEventListener(o.type, o.listener = listener, o.capture = capture); - o.value = value; - return; + }, + remove: function(name) { + var i = this._names.indexOf(name); + if (i >= 0) { + this._names.splice(i, 1); + this._node.setAttribute("class", this._names.join(" ")); } + }, + contains: function(name) { + return this._names.indexOf(name) >= 0; } - this.addEventListener(typename.type, listener, capture); - o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture}; - if (!on) this.__on = [o]; - else on.push(o); }; -} -function selection_on(typename, value, capture) { - var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t; - - if (arguments.length < 2) { - var on = this.node().__on; - if (on) for (var j = 0, m = on.length, o; j < m; ++j) { - for (i = 0, o = on[j]; i < n; ++i) { - if ((t = typenames[i]).type === o.type && t.name === o.name) { - return o.value; - } - } - } - return; + function classedAdd(node, names) { + var list = classList(node), i = -1, n = names.length; + while (++i < n) list.add(names[i]); } - on = value ? onAdd : onRemove; - if (capture == null) capture = false; - for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture)); - return this; -} - -function customEvent(event1, listener, that, args) { - var event0 = event; - event1.sourceEvent = event; - event = event1; - try { - return listener.apply(that, args); - } finally { - event = event0; + function classedRemove(node, names) { + var list = classList(node), i = -1, n = names.length; + while (++i < n) list.remove(names[i]); } -} - -function dispatchEvent(node, type, params) { - var window = defaultView(node), - event = window.CustomEvent; - if (typeof event === "function") { - event = new event(type, params); - } else { - event = window.document.createEvent("Event"); - if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; - else event.initEvent(type, false, false); + function classedTrue(names) { + return function() { + classedAdd(this, names); + }; } - node.dispatchEvent(event); -} - -function dispatchConstant(type, params) { - return function() { - return dispatchEvent(this, type, params); - }; -} + function classedFalse(names) { + return function() { + classedRemove(this, names); + }; + } -function dispatchFunction(type, params) { - return function() { - return dispatchEvent(this, type, params.apply(this, arguments)); - }; -} - -function selection_dispatch(type, params) { - return this.each((typeof params === "function" - ? dispatchFunction - : dispatchConstant)(type, params)); -} - -var root = [null]; - -function Selection(groups, parents) { - this._groups = groups; - this._parents = parents; -} - -function selection() { - return new Selection([[document.documentElement]], root); -} - -Selection.prototype = selection.prototype = { - constructor: Selection, - select: selection_select, - selectAll: selection_selectAll, - filter: selection_filter, - data: selection_data, - enter: selection_enter, - exit: selection_exit, - merge: selection_merge, - order: selection_order, - sort: selection_sort, - call: selection_call, - nodes: selection_nodes, - node: selection_node, - size: selection_size, - empty: selection_empty, - each: selection_each, - attr: selection_attr, - style: selection_style, - property: selection_property, - classed: selection_classed, - text: selection_text, - html: selection_html, - raise: selection_raise, - lower: selection_lower, - append: selection_append, - insert: selection_insert, - remove: selection_remove, - clone: selection_clone, - datum: selection_datum, - on: selection_on, - dispatch: selection_dispatch -}; - -function d3_select(selector) { - return typeof selector === "string" - ? new Selection([[document.querySelector(selector)]], [document.documentElement]) - : new Selection([[selector]], root); -} - -function create(name) { - return d3_select(creator(name).call(document.documentElement)); -} - -var nextId = 0; - -function local() { - return new Local; -} - -function Local() { - this._ = "@" + (++nextId).toString(36); -} - -Local.prototype = local.prototype = { - constructor: Local, - get: function(node) { - var id = this._; - while (!(id in node)) if (!(node = node.parentNode)) return; - return node[id]; - }, - set: function(node, value) { - return node[this._] = value; - }, - remove: function(node) { - return this._ in node && delete node[this._]; - }, - toString: function() { - return this._; - } -}; - -function sourceEvent() { - var current = event, source; - while (source = current.sourceEvent) current = source; - return current; -} - -function point(node, event) { - var svg = node.ownerSVGElement || node; - - if (svg.createSVGPoint) { - var point = svg.createSVGPoint(); - point.x = event.clientX, point.y = event.clientY; - point = point.matrixTransform(node.getScreenCTM().inverse()); - return [point.x, point.y]; - } - - var rect = node.getBoundingClientRect(); - return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; -} - -function d3_mouse(node) { - var event = sourceEvent(); - if (event.changedTouches) event = event.changedTouches[0]; - return point(node, event); -} - -function d3_selectAll(selector) { - return typeof selector === "string" - ? new Selection([document.querySelectorAll(selector)], [document.documentElement]) - : new Selection([selector == null ? [] : selector], root); -} - -function touch(node, touches, identifier) { - if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches; - - for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { - if ((touch = touches[i]).identifier === identifier) { - return point(node, touch); - } - } - - return null; -} - -function d3_touches(node, touches) { - if (touches == null) touches = sourceEvent().touches; - - for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) { - points[i] = point(node, touches[i]); - } - - return points; -} - -function nopropagation() { - event.stopImmediatePropagation(); -} - -function noevent() { - event.preventDefault(); - event.stopImmediatePropagation(); -} - -function dragDisable(view) { - var root = view.document.documentElement, - selection$$1 = d3_select(view).on("dragstart.drag", noevent, true); - if ("onselectstart" in root) { - selection$$1.on("selectstart.drag", noevent, true); - } else { - root.__noselect = root.style.MozUserSelect; - root.style.MozUserSelect = "none"; - } -} - -function yesdrag(view, noclick) { - var root = view.document.documentElement, - selection$$1 = d3_select(view).on("dragstart.drag", null); - if (noclick) { - selection$$1.on("click.drag", noevent, true); - setTimeout(function() { selection$$1.on("click.drag", null); }, 0); - } - if ("onselectstart" in root) { - selection$$1.on("selectstart.drag", null); - } else { - root.style.MozUserSelect = root.__noselect; - delete root.__noselect; - } -} + function classedFunction(names, value) { + return function() { + (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); + }; + } -function constant$2(x) { - return function() { - return x; - }; -} - -function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) { - this.target = target; - this.type = type; - this.subject = subject; - this.identifier = id; - this.active = active; - this.x = x; - this.y = y; - this.dx = dx; - this.dy = dy; - this._ = dispatch; -} - -DragEvent.prototype.on = function() { - var value = this._.on.apply(this._, arguments); - return value === this._ ? this : value; -}; - -// Ignore right-click, since that should open the context menu. -function defaultFilter() { - return !event.button; -} - -function defaultContainer() { - return this.parentNode; -} - -function defaultSubject(d) { - return d == null ? {x: event.x, y: event.y} : d; -} - -function defaultTouchable() { - return "ontouchstart" in this; -} - -function drag() { - var filter = defaultFilter, - container = defaultContainer, - subject = defaultSubject, - touchable = defaultTouchable, - gestures = {}, - listeners = dispatch("start", "drag", "end"), - active = 0, - mousedownx, - mousedowny, - mousemoving, - touchending, - clickDistance2 = 0; - - function drag(selection$$1) { - selection$$1 - .on("mousedown.drag", mousedowned) - .filter(touchable) - .on("touchstart.drag", touchstarted) - .on("touchmove.drag", touchmoved) - .on("touchend.drag touchcancel.drag", touchended) - .style("touch-action", "none") - .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); - } - - function mousedowned() { - if (touchending || !filter.apply(this, arguments)) return; - var gesture = beforestart("mouse", container.apply(this, arguments), d3_mouse, this, arguments); - if (!gesture) return; - d3_select(event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true); - dragDisable(event.view); - nopropagation(); - mousemoving = false; - mousedownx = event.clientX; - mousedowny = event.clientY; - gesture("start"); - } - - function mousemoved() { - noevent(); - if (!mousemoving) { - var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny; - mousemoving = dx * dx + dy * dy > clickDistance2; - } - gestures.mouse("drag"); - } - - function mouseupped() { - d3_select(event.view).on("mousemove.drag mouseup.drag", null); - yesdrag(event.view, mousemoving); - noevent(); - gestures.mouse("end"); - } - - function touchstarted() { - if (!filter.apply(this, arguments)) return; - var touches = event.changedTouches, - c = container.apply(this, arguments), - n = touches.length, i, gesture; + function selection_classed(name, value) { + var names = classArray(name + ""); - for (i = 0; i < n; ++i) { - if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) { - nopropagation(); - gesture("start"); - } + if (arguments.length < 2) { + var list = classList(this.node()), i = -1, n = names.length; + while (++i < n) if (!list.contains(names[i])) return false; + return true; } + + return this.each((typeof value === "function" + ? classedFunction : value + ? classedTrue + : classedFalse)(names, value)); } - function touchmoved() { - var touches = event.changedTouches, - n = touches.length, i, gesture; + function textRemove() { + this.textContent = ""; + } - for (i = 0; i < n; ++i) { - if (gesture = gestures[touches[i].identifier]) { - noevent(); - gesture("drag"); - } - } + function textConstant(value) { + return function() { + this.textContent = value; + }; } - function touchended() { - var touches = event.changedTouches, - n = touches.length, i, gesture; + function textFunction(value) { + return function() { + var v = value.apply(this, arguments); + this.textContent = v == null ? "" : v; + }; + } - if (touchending) clearTimeout(touchending); - touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! - for (i = 0; i < n; ++i) { - if (gesture = gestures[touches[i].identifier]) { - nopropagation(); - gesture("end"); - } - } + function selection_text(value) { + return arguments.length + ? this.each(value == null + ? textRemove : (typeof value === "function" + ? textFunction + : textConstant)(value)) + : this.node().textContent; } - function beforestart(id, container, point$$1, that, args) { - var p = point$$1(container, id), s, dx, dy, - sublisteners = listeners.copy(); + function htmlRemove() { + this.innerHTML = ""; + } - if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() { - if ((event.subject = s = subject.apply(that, args)) == null) return false; - dx = s.x - p[0] || 0; - dy = s.y - p[1] || 0; - return true; - })) return; + function htmlConstant(value) { + return function() { + this.innerHTML = value; + }; + } - return function gesture(type) { - var p0 = p, n; - switch (type) { - case "start": gestures[id] = gesture, n = active++; break; - case "end": delete gestures[id], --active; // nobreak - case "drag": p = point$$1(container, id), n = active; break; - } - customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]); + function htmlFunction(value) { + return function() { + var v = value.apply(this, arguments); + this.innerHTML = v == null ? "" : v; }; } - drag.filter = function(_) { - return arguments.length ? (filter = typeof _ === "function" ? _ : constant$2(!!_), drag) : filter; - }; + function selection_html(value) { + return arguments.length + ? this.each(value == null + ? htmlRemove : (typeof value === "function" + ? htmlFunction + : htmlConstant)(value)) + : this.node().innerHTML; + } - drag.container = function(_) { - return arguments.length ? (container = typeof _ === "function" ? _ : constant$2(_), drag) : container; - }; + function raise() { + if (this.nextSibling) this.parentNode.appendChild(this); + } - drag.subject = function(_) { - return arguments.length ? (subject = typeof _ === "function" ? _ : constant$2(_), drag) : subject; - }; + function selection_raise() { + return this.each(raise); + } - drag.touchable = function(_) { - return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$2(!!_), drag) : touchable; - }; + function lower() { + if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); + } - drag.on = function() { - var value = listeners.on.apply(listeners, arguments); - return value === listeners ? drag : value; - }; + function selection_lower() { + return this.each(lower); + } - drag.clickDistance = function(_) { - return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2); - }; + function selection_append(name) { + var create = typeof name === "function" ? name : creator(name); + return this.select(function() { + return this.appendChild(create.apply(this, arguments)); + }); + } - return drag; -} - -function define(constructor, factory, prototype) { - constructor.prototype = factory.prototype = prototype; - prototype.constructor = constructor; -} - -function extend(parent, definition) { - var prototype = Object.create(parent.prototype); - for (var key in definition) prototype[key] = definition[key]; - return prototype; -} - -function Color() {} - -var darker = 0.7; -var brighter = 1 / darker; - -var reI = "\\s*([+-]?\\d+)\\s*", - reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*", - reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*", - reHex3 = /^#([0-9a-f]{3})$/, - reHex6 = /^#([0-9a-f]{6})$/, - reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"), - reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"), - reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"), - reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"), - reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"), - reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); - -var named = { - aliceblue: 0xf0f8ff, - antiquewhite: 0xfaebd7, - aqua: 0x00ffff, - aquamarine: 0x7fffd4, - azure: 0xf0ffff, - beige: 0xf5f5dc, - bisque: 0xffe4c4, - black: 0x000000, - blanchedalmond: 0xffebcd, - blue: 0x0000ff, - blueviolet: 0x8a2be2, - brown: 0xa52a2a, - burlywood: 0xdeb887, - cadetblue: 0x5f9ea0, - chartreuse: 0x7fff00, - chocolate: 0xd2691e, - coral: 0xff7f50, - cornflowerblue: 0x6495ed, - cornsilk: 0xfff8dc, - crimson: 0xdc143c, - cyan: 0x00ffff, - darkblue: 0x00008b, - darkcyan: 0x008b8b, - darkgoldenrod: 0xb8860b, - darkgray: 0xa9a9a9, - darkgreen: 0x006400, - darkgrey: 0xa9a9a9, - darkkhaki: 0xbdb76b, - darkmagenta: 0x8b008b, - darkolivegreen: 0x556b2f, - darkorange: 0xff8c00, - darkorchid: 0x9932cc, - darkred: 0x8b0000, - darksalmon: 0xe9967a, - darkseagreen: 0x8fbc8f, - darkslateblue: 0x483d8b, - darkslategray: 0x2f4f4f, - darkslategrey: 0x2f4f4f, - darkturquoise: 0x00ced1, - darkviolet: 0x9400d3, - deeppink: 0xff1493, - deepskyblue: 0x00bfff, - dimgray: 0x696969, - dimgrey: 0x696969, - dodgerblue: 0x1e90ff, - firebrick: 0xb22222, - floralwhite: 0xfffaf0, - forestgreen: 0x228b22, - fuchsia: 0xff00ff, - gainsboro: 0xdcdcdc, - ghostwhite: 0xf8f8ff, - gold: 0xffd700, - goldenrod: 0xdaa520, - gray: 0x808080, - green: 0x008000, - greenyellow: 0xadff2f, - grey: 0x808080, - honeydew: 0xf0fff0, - hotpink: 0xff69b4, - indianred: 0xcd5c5c, - indigo: 0x4b0082, - ivory: 0xfffff0, - khaki: 0xf0e68c, - lavender: 0xe6e6fa, - lavenderblush: 0xfff0f5, - lawngreen: 0x7cfc00, - lemonchiffon: 0xfffacd, - lightblue: 0xadd8e6, - lightcoral: 0xf08080, - lightcyan: 0xe0ffff, - lightgoldenrodyellow: 0xfafad2, - lightgray: 0xd3d3d3, - lightgreen: 0x90ee90, - lightgrey: 0xd3d3d3, - lightpink: 0xffb6c1, - lightsalmon: 0xffa07a, - lightseagreen: 0x20b2aa, - lightskyblue: 0x87cefa, - lightslategray: 0x778899, - lightslategrey: 0x778899, - lightsteelblue: 0xb0c4de, - lightyellow: 0xffffe0, - lime: 0x00ff00, - limegreen: 0x32cd32, - linen: 0xfaf0e6, - magenta: 0xff00ff, - maroon: 0x800000, - mediumaquamarine: 0x66cdaa, - mediumblue: 0x0000cd, - mediumorchid: 0xba55d3, - mediumpurple: 0x9370db, - mediumseagreen: 0x3cb371, - mediumslateblue: 0x7b68ee, - mediumspringgreen: 0x00fa9a, - mediumturquoise: 0x48d1cc, - mediumvioletred: 0xc71585, - midnightblue: 0x191970, - mintcream: 0xf5fffa, - mistyrose: 0xffe4e1, - moccasin: 0xffe4b5, - navajowhite: 0xffdead, - navy: 0x000080, - oldlace: 0xfdf5e6, - olive: 0x808000, - olivedrab: 0x6b8e23, - orange: 0xffa500, - orangered: 0xff4500, - orchid: 0xda70d6, - palegoldenrod: 0xeee8aa, - palegreen: 0x98fb98, - paleturquoise: 0xafeeee, - palevioletred: 0xdb7093, - papayawhip: 0xffefd5, - peachpuff: 0xffdab9, - peru: 0xcd853f, - pink: 0xffc0cb, - plum: 0xdda0dd, - powderblue: 0xb0e0e6, - purple: 0x800080, - rebeccapurple: 0x663399, - red: 0xff0000, - rosybrown: 0xbc8f8f, - royalblue: 0x4169e1, - saddlebrown: 0x8b4513, - salmon: 0xfa8072, - sandybrown: 0xf4a460, - seagreen: 0x2e8b57, - seashell: 0xfff5ee, - sienna: 0xa0522d, - silver: 0xc0c0c0, - skyblue: 0x87ceeb, - slateblue: 0x6a5acd, - slategray: 0x708090, - slategrey: 0x708090, - snow: 0xfffafa, - springgreen: 0x00ff7f, - steelblue: 0x4682b4, - tan: 0xd2b48c, - teal: 0x008080, - thistle: 0xd8bfd8, - tomato: 0xff6347, - turquoise: 0x40e0d0, - violet: 0xee82ee, - wheat: 0xf5deb3, - white: 0xffffff, - whitesmoke: 0xf5f5f5, - yellow: 0xffff00, - yellowgreen: 0x9acd32 -}; - -define(Color, color, { - displayable: function() { - return this.rgb().displayable(); - }, - toString: function() { - return this.rgb() + ""; - } -}); - -function color(format) { - var m; - format = (format + "").trim().toLowerCase(); - return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00 - : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000 - : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) - : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) - : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) - : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) - : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) - : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) - : named.hasOwnProperty(format) ? rgbn(named[format]) - : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) - : null; -} - -function rgbn(n) { - return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); -} - -function rgba(r, g, b, a) { - if (a <= 0) r = g = b = NaN; - return new Rgb(r, g, b, a); -} - -function rgbConvert(o) { - if (!(o instanceof Color)) o = color(o); - if (!o) return new Rgb; - o = o.rgb(); - return new Rgb(o.r, o.g, o.b, o.opacity); -} - -function rgb(r, g, b, opacity) { - return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); -} - -function Rgb(r, g, b, opacity) { - this.r = +r; - this.g = +g; - this.b = +b; - this.opacity = +opacity; -} - -define(Rgb, rgb, extend(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - rgb: function() { - return this; - }, - displayable: function() { - return (0 <= this.r && this.r <= 255) - && (0 <= this.g && this.g <= 255) - && (0 <= this.b && this.b <= 255) - && (0 <= this.opacity && this.opacity <= 1); - }, - toString: function() { - var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); - return (a === 1 ? "rgb(" : "rgba(") - + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " - + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " - + Math.max(0, Math.min(255, Math.round(this.b) || 0)) - + (a === 1 ? ")" : ", " + a + ")"); - } -})); - -function hsla(h, s, l, a) { - if (a <= 0) h = s = l = NaN; - else if (l <= 0 || l >= 1) h = s = NaN; - else if (s <= 0) h = NaN; - return new Hsl(h, s, l, a); -} - -function hslConvert(o) { - if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); - if (!(o instanceof Color)) o = color(o); - if (!o) return new Hsl; - if (o instanceof Hsl) return o; - o = o.rgb(); - var r = o.r / 255, - g = o.g / 255, - b = o.b / 255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - h = NaN, - s = max - min, - l = (max + min) / 2; - if (s) { - if (r === max) h = (g - b) / s + (g < b) * 6; - else if (g === max) h = (b - r) / s + 2; - else h = (r - g) / s + 4; - s /= l < 0.5 ? max + min : 2 - max - min; - h *= 60; - } else { - s = l > 0 && l < 1 ? 0 : h; - } - return new Hsl(h, s, l, o.opacity); -} - -function hsl(h, s, l, opacity) { - return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); -} - -function Hsl(h, s, l, opacity) { - this.h = +h; - this.s = +s; - this.l = +l; - this.opacity = +opacity; -} - -define(Hsl, hsl, extend(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - rgb: function() { - var h = this.h % 360 + (this.h < 0) * 360, - s = isNaN(h) || isNaN(this.s) ? 0 : this.s, - l = this.l, - m2 = l + (l < 0.5 ? l : 1 - l) * s, - m1 = 2 * l - m2; - return new Rgb( - hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), - hsl2rgb(h, m1, m2), - hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), - this.opacity - ); - }, - displayable: function() { - return (0 <= this.s && this.s <= 1 || isNaN(this.s)) - && (0 <= this.l && this.l <= 1) - && (0 <= this.opacity && this.opacity <= 1); - } -})); - -/* From FvD 13.37, CSS Color Module Level 3 */ -function hsl2rgb(h, m1, m2) { - return (h < 60 ? m1 + (m2 - m1) * h / 60 - : h < 180 ? m2 - : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 - : m1) * 255; -} - -var deg2rad = Math.PI / 180; -var rad2deg = 180 / Math.PI; - -var Kn = 18, - Xn = 0.950470, // D65 standard referent - Yn = 1, - Zn = 1.088830, - t0 = 4 / 29, - t1 = 6 / 29, - t2 = 3 * t1 * t1, - t3 = t1 * t1 * t1; - -function labConvert(o) { - if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); - if (o instanceof Hcl) { - var h = o.h * deg2rad; - return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); - } - if (!(o instanceof Rgb)) o = rgbConvert(o); - var b = rgb2xyz(o.r), - a = rgb2xyz(o.g), - l = rgb2xyz(o.b), - x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn), - y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn), - z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn); - return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); -} - -function lab(l, a, b, opacity) { - return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); -} - -function Lab(l, a, b, opacity) { - this.l = +l; - this.a = +a; - this.b = +b; - this.opacity = +opacity; -} - -define(Lab, lab, extend(Color, { - brighter: function(k) { - return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity); - }, - darker: function(k) { - return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity); - }, - rgb: function() { - var y = (this.l + 16) / 116, - x = isNaN(this.a) ? y : y + this.a / 500, - z = isNaN(this.b) ? y : y - this.b / 200; - y = Yn * lab2xyz(y); - x = Xn * lab2xyz(x); - z = Zn * lab2xyz(z); - return new Rgb( - xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB - xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z), - xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z), - this.opacity - ); + function constantNull() { + return null; } -})); - -function xyz2lab(t) { - return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0; -} - -function lab2xyz(t) { - return t > t1 ? t * t * t : t2 * (t - t0); -} - -function xyz2rgb(x) { - return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); -} - -function rgb2xyz(x) { - return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); -} - -function hclConvert(o) { - if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); - if (!(o instanceof Lab)) o = labConvert(o); - var h = Math.atan2(o.b, o.a) * rad2deg; - return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); -} - -function hcl(h, c, l, opacity) { - return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); -} - -function Hcl(h, c, l, opacity) { - this.h = +h; - this.c = +c; - this.l = +l; - this.opacity = +opacity; -} - -define(Hcl, hcl, extend(Color, { - brighter: function(k) { - return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity); - }, - darker: function(k) { - return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity); - }, - rgb: function() { - return labConvert(this).rgb(); - } -})); - -var A = -0.14861, - B = +1.78277, - C = -0.29227, - D = -0.90649, - E = +1.97294, - ED = E * D, - EB = E * B, - BC_DA = B * C - D * A; - -function cubehelixConvert(o) { - if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); - if (!(o instanceof Rgb)) o = rgbConvert(o); - var r = o.r / 255, - g = o.g / 255, - b = o.b / 255, - l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), - bl = b - l, - k = (E * (g - l) - C * bl) / D, - s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 - h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN; - return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); -} - -function cubehelix(h, s, l, opacity) { - return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); -} - -function Cubehelix(h, s, l, opacity) { - this.h = +h; - this.s = +s; - this.l = +l; - this.opacity = +opacity; -} - -define(Cubehelix, cubehelix, extend(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Cubehelix(this.h, this.s, this.l * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Cubehelix(this.h, this.s, this.l * k, this.opacity); - }, - rgb: function() { - var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad, - l = +this.l, - a = isNaN(this.s) ? 0 : this.s * l * (1 - l), - cosh = Math.cos(h), - sinh = Math.sin(h); - return new Rgb( - 255 * (l + a * (A * cosh + B * sinh)), - 255 * (l + a * (C * cosh + D * sinh)), - 255 * (l + a * (E * cosh)), - this.opacity - ); + + function selection_insert(name, before) { + var create = typeof name === "function" ? name : creator(name), + select = before == null ? constantNull : typeof before === "function" ? before : selector(before); + return this.select(function() { + return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); + }); } -})); - -function basis(t1, v0, v1, v2, v3) { - var t2 = t1 * t1, t3 = t2 * t1; - return ((1 - 3 * t1 + 3 * t2 - t3) * v0 - + (4 - 6 * t2 + 3 * t3) * v1 - + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 - + t3 * v3) / 6; -} - -function basis$1(values) { - var n = values.length - 1; - return function(t) { - var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), - v1 = values[i], - v2 = values[i + 1], - v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, - v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; - return basis((t - i / n) * n, v0, v1, v2, v3); - }; -} - -function basisClosed(values) { - var n = values.length; - return function(t) { - var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), - v0 = values[(i + n - 1) % n], - v1 = values[i % n], - v2 = values[(i + 1) % n], - v3 = values[(i + 2) % n]; - return basis((t - i / n) * n, v0, v1, v2, v3); - }; -} -function constant$3(x) { - return function() { - return x; - }; -} + function remove() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); + } -function linear(a, d) { - return function(t) { - return a + t * d; - }; -} + function selection_remove() { + return this.each(remove); + } -function exponential(a, b, y) { - return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { - return Math.pow(a + t * b, y); - }; -} + function selection_cloneShallow() { + return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling); + } -function hue(a, b) { - var d = b - a; - return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a); -} - -function gamma(y) { - return (y = +y) === 1 ? nogamma : function(a, b) { - return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a); - }; -} - -function nogamma(a, b) { - var d = b - a; - return d ? linear(a, d) : constant$3(isNaN(a) ? b : a); -} + function selection_cloneDeep() { + return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling); + } -var d3_interpolateRgb = (function rgbGamma(y) { - var color$$1 = gamma(y); + function selection_clone(deep) { + return this.select(deep ? selection_cloneDeep : selection_cloneShallow); + } - function rgb$$1(start, end) { - var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r), - g = color$$1(start.g, end.g), - b = color$$1(start.b, end.b), - opacity = nogamma(start.opacity, end.opacity); - return function(t) { - start.r = r(t); - start.g = g(t); - start.b = b(t); - start.opacity = opacity(t); - return start + ""; - }; + function selection_datum(value) { + return arguments.length + ? this.property("__data__", value) + : this.node().__data__; } - rgb$$1.gamma = rgbGamma; + var filterEvents = {}; - return rgb$$1; -})(1); + var event = null; -function rgbSpline(spline) { - return function(colors) { - var n = colors.length, - r = new Array(n), - g = new Array(n), - b = new Array(n), - i, color$$1; - for (i = 0; i < n; ++i) { - color$$1 = rgb(colors[i]); - r[i] = color$$1.r || 0; - g[i] = color$$1.g || 0; - b[i] = color$$1.b || 0; - } - r = spline(r); - g = spline(g); - b = spline(b); - color$$1.opacity = 1; - return function(t) { - color$$1.r = r(t); - color$$1.g = g(t); - color$$1.b = b(t); - return color$$1 + ""; - }; - }; -} + if (typeof document !== "undefined") { + var element$1 = document.documentElement; + if (!("onmouseenter" in element$1)) { + filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"}; + } + } -var rgbBasis = rgbSpline(basis$1); -var rgbBasisClosed = rgbSpline(basisClosed); + function filterContextListener(listener, index, group) { + listener = contextListener(listener, index, group); + return function(event) { + var related = event.relatedTarget; + if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { + listener.call(this, event); + } + }; + } -function array$1(a, b) { - var nb = b ? b.length : 0, - na = a ? Math.min(nb, a.length) : 0, - x = new Array(na), - c = new Array(nb), - i; + function contextListener(listener, index, group) { + return function(event1) { + var event0 = event; // Events can be reentrant (e.g., focus). + event = event1; + try { + listener.call(this, this.__data__, index, group); + } finally { + event = event0; + } + }; + } - for (i = 0; i < na; ++i) x[i] = d3_interpolate(a[i], b[i]); - for (; i < nb; ++i) c[i] = b[i]; + function parseTypenames$1(typenames) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + return {type: t, name: name}; + }); + } - return function(t) { - for (i = 0; i < na; ++i) c[i] = x[i](t); - return c; - }; -} + function onRemove(typename) { + return function() { + var on = this.__on; + if (!on) return; + for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { + if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.capture); + } else { + on[++i] = o; + } + } + if (++i) on.length = i; + else delete this.__on; + }; + } -function date(a, b) { - var d = new Date; - return a = +a, b -= a, function(t) { - return d.setTime(a + b * t), d; - }; -} + function onAdd(typename, value, capture) { + var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener; + return function(d, i, group) { + var on = this.__on, o, listener = wrap(value, i, group); + if (on) for (var j = 0, m = on.length; j < m; ++j) { + if ((o = on[j]).type === typename.type && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.capture); + this.addEventListener(o.type, o.listener = listener, o.capture = capture); + o.value = value; + return; + } + } + this.addEventListener(typename.type, listener, capture); + o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture}; + if (!on) this.__on = [o]; + else on.push(o); + }; + } -function d3_interpolateNumber(a, b) { - return a = +a, b -= a, function(t) { - return a + b * t; - }; -} + function selection_on(typename, value, capture) { + var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t; -function object(a, b) { - var i = {}, - c = {}, - k; + if (arguments.length < 2) { + var on = this.node().__on; + if (on) for (var j = 0, m = on.length, o; j < m; ++j) { + for (i = 0, o = on[j]; i < n; ++i) { + if ((t = typenames[i]).type === o.type && t.name === o.name) { + return o.value; + } + } + } + return; + } - if (a === null || typeof a !== "object") a = {}; - if (b === null || typeof b !== "object") b = {}; + on = value ? onAdd : onRemove; + if (capture == null) capture = false; + for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture)); + return this; + } - for (k in b) { - if (k in a) { - i[k] = d3_interpolate(a[k], b[k]); - } else { - c[k] = b[k]; + function customEvent(event1, listener, that, args) { + var event0 = event; + event1.sourceEvent = event; + event = event1; + try { + return listener.apply(that, args); + } finally { + event = event0; } } - return function(t) { - for (k in i) c[k] = i[k](t); - return c; - }; -} - -var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, - reB = new RegExp(reA.source, "g"); - -function zero(b) { - return function() { - return b; - }; -} + function dispatchEvent(node, type, params) { + var window = defaultView(node), + event = window.CustomEvent; -function one(b) { - return function(t) { - return b(t) + ""; - }; -} - -function interpolateString(a, b) { - var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b - am, // current match in a - bm, // current match in b - bs, // string preceding current number in b, if any - i = -1, // index in s - s = [], // string constants and placeholders - q = []; // number interpolators - - // Coerce inputs to strings. - a = a + "", b = b + ""; - - // Interpolate pairs of numbers in a & b. - while ((am = reA.exec(a)) - && (bm = reB.exec(b))) { - if ((bs = bm.index) > bi) { // a string precedes the next number in b - bs = b.slice(bi, bs); - if (s[i]) s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match - if (s[i]) s[i] += bm; // coalesce with previous string - else s[++i] = bm; - } else { // interpolate non-matching numbers - s[++i] = null; - q.push({i: i, x: d3_interpolateNumber(am, bm)}); + if (typeof event === "function") { + event = new event(type, params); + } else { + event = window.document.createEvent("Event"); + if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; + else event.initEvent(type, false, false); } - bi = reB.lastIndex; + + node.dispatchEvent(event); } - // Add remains of b. - if (bi < b.length) { - bs = b.slice(bi); - if (s[i]) s[i] += bs; // coalesce with previous string - else s[++i] = bs; + function dispatchConstant(type, params) { + return function() { + return dispatchEvent(this, type, params); + }; } - // Special optimization for only a single match. - // Otherwise, interpolate each of the numbers and rejoin the string. - return s.length < 2 ? (q[0] - ? one(q[0].x) - : zero(b)) - : (b = q.length, function(t) { - for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }); -} - -function d3_interpolate(a, b) { - var t = typeof b, c; - return b == null || t === "boolean" ? constant$3(b) - : (t === "number" ? d3_interpolateNumber - : t === "string" ? ((c = color(b)) ? (b = c, d3_interpolateRgb) : interpolateString) - : b instanceof color ? d3_interpolateRgb - : b instanceof Date ? date - : Array.isArray(b) ? array$1 - : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object - : d3_interpolateNumber)(a, b); -} - -function interpolateRound(a, b) { - return a = +a, b -= a, function(t) { - return Math.round(a + b * t); - }; -} - -var degrees = 180 / Math.PI; - -var identity$2 = { - translateX: 0, - translateY: 0, - rotate: 0, - skewX: 0, - scaleX: 1, - scaleY: 1 -}; - -function decompose(a, b, c, d, e, f) { - var scaleX, scaleY, skewX; - if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; - if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; - if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; - if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; - return { - translateX: e, - translateY: f, - rotate: Math.atan2(b, a) * degrees, - skewX: Math.atan(skewX) * degrees, - scaleX: scaleX, - scaleY: scaleY + function dispatchFunction(type, params) { + return function() { + return dispatchEvent(this, type, params.apply(this, arguments)); + }; + } + + function selection_dispatch(type, params) { + return this.each((typeof params === "function" + ? dispatchFunction + : dispatchConstant)(type, params)); + } + + var root = [null]; + + function Selection(groups, parents) { + this._groups = groups; + this._parents = parents; + } + + function selection() { + return new Selection([[document.documentElement]], root); + } + + Selection.prototype = selection.prototype = { + constructor: Selection, + select: selection_select, + selectAll: selection_selectAll, + filter: selection_filter, + data: selection_data, + enter: selection_enter, + exit: selection_exit, + merge: selection_merge, + order: selection_order, + sort: selection_sort, + call: selection_call, + nodes: selection_nodes, + node: selection_node, + size: selection_size, + empty: selection_empty, + each: selection_each, + attr: selection_attr, + style: selection_style, + property: selection_property, + classed: selection_classed, + text: selection_text, + html: selection_html, + raise: selection_raise, + lower: selection_lower, + append: selection_append, + insert: selection_insert, + remove: selection_remove, + clone: selection_clone, + datum: selection_datum, + on: selection_on, + dispatch: selection_dispatch }; -} - -var cssNode, - cssRoot, - cssView, - svgNode; -function parseCss(value) { - if (value === "none") return identity$2; - if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; - cssNode.style.transform = value; - value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform"); - cssRoot.removeChild(cssNode); - value = value.slice(7, -1).split(","); - return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]); -} - -function parseSvg(value) { - if (value == null) return identity$2; - if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); - svgNode.setAttribute("transform", value); - if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2; - value = value.matrix; - return decompose(value.a, value.b, value.c, value.d, value.e, value.f); -} - -function interpolateTransform(parse, pxComma, pxParen, degParen) { - - function pop(s) { - return s.length ? s.pop() + " " : ""; + function select(selector) { + return typeof selector === "string" + ? new Selection([[document.querySelector(selector)]], [document.documentElement]) + : new Selection([[selector]], root); } - function translate(xa, ya, xb, yb, s, q) { - if (xa !== xb || ya !== yb) { - var i = s.push("translate(", null, pxComma, null, pxParen); - q.push({i: i - 4, x: d3_interpolateNumber(xa, xb)}, {i: i - 2, x: d3_interpolateNumber(ya, yb)}); - } else if (xb || yb) { - s.push("translate(" + xb + pxComma + yb + pxParen); - } + function create(name) { + return select(creator(name).call(document.documentElement)); } - function rotate(a, b, s, q) { - if (a !== b) { - if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path - q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: d3_interpolateNumber(a, b)}); - } else if (b) { - s.push(pop(s) + "rotate(" + b + degParen); - } - } + var nextId = 0; - function skewX(a, b, s, q) { - if (a !== b) { - q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: d3_interpolateNumber(a, b)}); - } else if (b) { - s.push(pop(s) + "skewX(" + b + degParen); - } + function local() { + return new Local; } - function scale(xa, ya, xb, yb, s, q) { - if (xa !== xb || ya !== yb) { - var i = s.push(pop(s) + "scale(", null, ",", null, ")"); - q.push({i: i - 4, x: d3_interpolateNumber(xa, xb)}, {i: i - 2, x: d3_interpolateNumber(ya, yb)}); - } else if (xb !== 1 || yb !== 1) { - s.push(pop(s) + "scale(" + xb + "," + yb + ")"); - } + function Local() { + this._ = "@" + (++nextId).toString(36); } - return function(a, b) { - var s = [], // string constants and placeholders - q = []; // number interpolators - a = parse(a), b = parse(b); - translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); - rotate(a.rotate, b.rotate, s, q); - skewX(a.skewX, b.skewX, s, q); - scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); - a = b = null; // gc - return function(t) { - var i = -1, n = q.length, o; - while (++i < n) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; + Local.prototype = local.prototype = { + constructor: Local, + get: function(node) { + var id = this._; + while (!(id in node)) if (!(node = node.parentNode)) return; + return node[id]; + }, + set: function(node, value) { + return node[this._] = value; + }, + remove: function(node) { + return this._ in node && delete node[this._]; + }, + toString: function() { + return this._; + } }; -} - -var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)"); -var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")"); - -var rho = Math.SQRT2, - rho2 = 2, - rho4 = 4, - epsilon2 = 1e-12; - -function cosh(x) { - return ((x = Math.exp(x)) + 1 / x) / 2; -} - -function sinh(x) { - return ((x = Math.exp(x)) - 1 / x) / 2; -} - -function tanh(x) { - return ((x = Math.exp(2 * x)) - 1) / (x + 1); -} - -// p0 = [ux0, uy0, w0] -// p1 = [ux1, uy1, w1] -function interpolateZoom(p0, p1) { - var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], - ux1 = p1[0], uy1 = p1[1], w1 = p1[2], - dx = ux1 - ux0, - dy = uy1 - uy0, - d2 = dx * dx + dy * dy, - i, - S; - - // Special case for u0 ≅ u1. - if (d2 < epsilon2) { - S = Math.log(w1 / w0) / rho; - i = function(t) { - return [ - ux0 + t * dx, - uy0 + t * dy, - w0 * Math.exp(rho * t * S) - ]; - }; - } - // General case. - else { - var d1 = Math.sqrt(d2), - b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), - b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), - r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), - r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); - S = (r1 - r0) / rho; - i = function(t) { - var s = t * S, - coshr0 = cosh(r0), - u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); - return [ - ux0 + u * dx, - uy0 + u * dy, - w0 * coshr0 / cosh(rho * s + r0) - ]; - }; + function sourceEvent() { + var current = event, source; + while (source = current.sourceEvent) current = source; + return current; } - i.duration = S * 1000; + function point(node, event) { + var svg = node.ownerSVGElement || node; - return i; -} + if (svg.createSVGPoint) { + var point = svg.createSVGPoint(); + point.x = event.clientX, point.y = event.clientY; + point = point.matrixTransform(node.getScreenCTM().inverse()); + return [point.x, point.y]; + } -function hsl$1(hue$$1) { - return function(start, end) { - var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h), - s = nogamma(start.s, end.s), - l = nogamma(start.l, end.l), - opacity = nogamma(start.opacity, end.opacity); - return function(t) { - start.h = h(t); - start.s = s(t); - start.l = l(t); - start.opacity = opacity(t); - return start + ""; - }; + var rect = node.getBoundingClientRect(); + return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; } -} - -var hsl$2 = hsl$1(hue); -var hslLong = hsl$1(nogamma); - -function lab$1(start, end) { - var l = nogamma((start = lab(start)).l, (end = lab(end)).l), - a = nogamma(start.a, end.a), - b = nogamma(start.b, end.b), - opacity = nogamma(start.opacity, end.opacity); - return function(t) { - start.l = l(t); - start.a = a(t); - start.b = b(t); - start.opacity = opacity(t); - return start + ""; - }; -} -function hcl$1(hue$$1) { - return function(start, end) { - var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h), - c = nogamma(start.c, end.c), - l = nogamma(start.l, end.l), - opacity = nogamma(start.opacity, end.opacity); - return function(t) { - start.h = h(t); - start.c = c(t); - start.l = l(t); - start.opacity = opacity(t); - return start + ""; - }; + function mouse(node) { + var event = sourceEvent(); + if (event.changedTouches) event = event.changedTouches[0]; + return point(node, event); } -} -var hcl$2 = hcl$1(hue); -var hclLong = hcl$1(nogamma); + function d3_selectAll(selector) { + return typeof selector === "string" + ? new Selection([document.querySelectorAll(selector)], [document.documentElement]) + : new Selection([selector == null ? [] : selector], root); + } -function cubehelix$1(hue$$1) { - return (function cubehelixGamma(y) { - y = +y; + function touch(node, touches, identifier) { + if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches; - function cubehelix$$1(start, end) { - var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h), - s = nogamma(start.s, end.s), - l = nogamma(start.l, end.l), - opacity = nogamma(start.opacity, end.opacity); - return function(t) { - start.h = h(t); - start.s = s(t); - start.l = l(Math.pow(t, y)); - start.opacity = opacity(t); - return start + ""; - }; + for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { + if ((touch = touches[i]).identifier === identifier) { + return point(node, touch); + } } - cubehelix$$1.gamma = cubehelixGamma; - - return cubehelix$$1; - })(1); -} - -var cubehelix$2 = cubehelix$1(hue); -var cubehelixLong = cubehelix$1(nogamma); - -function d3_quantize(interpolator, n) { - var samples = new Array(n); - for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1)); - return samples; -} - -var frame = 0, // is an animation frame pending? - timeout = 0, // is a timeout pending? - interval = 0, // are any timers active? - pokeDelay = 1000, // how frequently we check for clock skew - taskHead, - taskTail, - clockLast = 0, - clockNow = 0, - clockSkew = 0, - clock = typeof performance === "object" && performance.now ? performance : Date, - setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; - -function now() { - return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); -} - -function clearNow() { - clockNow = 0; -} - -function Timer() { - this._call = - this._time = - this._next = null; -} - -Timer.prototype = timer.prototype = { - constructor: Timer, - restart: function(callback, delay, time) { - if (typeof callback !== "function") throw new TypeError("callback is not a function"); - time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); - if (!this._next && taskTail !== this) { - if (taskTail) taskTail._next = this; - else taskHead = this; - taskTail = this; - } - this._call = callback; - this._time = time; - sleep(); - }, - stop: function() { - if (this._call) { - this._call = null; - this._time = Infinity; - sleep(); - } - } -}; - -function timer(callback, delay, time) { - var t = new Timer; - t.restart(callback, delay, time); - return t; -} - -function timerFlush() { - now(); // Get the current time, if not already set. - ++frame; // Pretend we’ve set an alarm, if we haven’t already. - var t = taskHead, e; - while (t) { - if ((e = clockNow - t._time) >= 0) t._call.call(null, e); - t = t._next; - } - --frame; -} - -function wake() { - clockNow = (clockLast = clock.now()) + clockSkew; - frame = timeout = 0; - try { - timerFlush(); - } finally { - frame = 0; - nap(); - clockNow = 0; + return null; } -} -function poke() { - var now = clock.now(), delay = now - clockLast; - if (delay > pokeDelay) clockSkew -= delay, clockLast = now; -} + function d3_touches(node, touches) { + if (touches == null) touches = sourceEvent().touches; -function nap() { - var t0, t1 = taskHead, t2, time = Infinity; - while (t1) { - if (t1._call) { - if (time > t1._time) time = t1._time; - t0 = t1, t1 = t1._next; - } else { - t2 = t1._next, t1._next = null; - t1 = t0 ? t0._next = t2 : taskHead = t2; - } - } - taskTail = t0; - sleep(time); -} - -function sleep(time) { - if (frame) return; // Soonest alarm already set, or will be. - if (timeout) timeout = clearTimeout(timeout); - var delay = time - clockNow; // Strictly less than if we recomputed clockNow. - if (delay > 24) { - if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew); - if (interval) interval = clearInterval(interval); - } else { - if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay); - frame = 1, setFrame(wake); - } -} - -function d3_timeout(callback, delay, time) { - var t = new Timer; - delay = delay == null ? 0 : +delay; - t.restart(function(elapsed) { - t.stop(); - callback(elapsed + delay); - }, delay, time); - return t; -} - -function interval$1(callback, delay, time) { - var t = new Timer, total = delay; - if (delay == null) return t.restart(callback, delay, time), t; - delay = +delay, time = time == null ? now() : +time; - t.restart(function tick(elapsed) { - elapsed += total; - t.restart(tick, total += delay, time); - callback(elapsed); - }, delay, time); - return t; -} - -var emptyOn = dispatch("start", "end", "interrupt"); -var emptyTween = []; - -var CREATED = 0; -var SCHEDULED = 1; -var STARTING = 2; -var STARTED = 3; -var RUNNING = 4; -var ENDING = 5; -var ENDED = 6; - -function schedule(node, name, id, index, group, timing) { - var schedules = node.__transition; - if (!schedules) node.__transition = {}; - else if (id in schedules) return; - create$1(node, id, { - name: name, - index: index, // For context during callback. - group: group, // For context during callback. - on: emptyOn, - tween: emptyTween, - time: timing.time, - delay: timing.delay, - duration: timing.duration, - ease: timing.ease, - timer: null, - state: CREATED - }); -} + for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) { + points[i] = point(node, touches[i]); + } -function init(node, id) { - var schedule = get$1(node, id); - if (schedule.state > CREATED) throw new Error("too late; already scheduled"); - return schedule; -} + return points; + } -function set$1(node, id) { - var schedule = get$1(node, id); - if (schedule.state > STARTING) throw new Error("too late; already started"); - return schedule; -} + function nopropagation() { + event.stopImmediatePropagation(); + } -function get$1(node, id) { - var schedule = node.__transition; - if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found"); - return schedule; -} + function noevent() { + event.preventDefault(); + event.stopImmediatePropagation(); + } -function create$1(node, id, self) { - var schedules = node.__transition, - tween; + function nodrag(view) { + var root = view.document.documentElement, + selection$$1 = select(view).on("dragstart.drag", noevent, true); + if ("onselectstart" in root) { + selection$$1.on("selectstart.drag", noevent, true); + } else { + root.__noselect = root.style.MozUserSelect; + root.style.MozUserSelect = "none"; + } + } - // Initialize the self timer when the transition is created. - // Note the actual delay is not known until the first callback! - schedules[id] = self; - self.timer = timer(schedule, 0, self.time); + function yesdrag(view, noclick) { + var root = view.document.documentElement, + selection$$1 = select(view).on("dragstart.drag", null); + if (noclick) { + selection$$1.on("click.drag", noevent, true); + setTimeout(function() { selection$$1.on("click.drag", null); }, 0); + } + if ("onselectstart" in root) { + selection$$1.on("selectstart.drag", null); + } else { + root.style.MozUserSelect = root.__noselect; + delete root.__noselect; + } + } - function schedule(elapsed) { - self.state = SCHEDULED; - self.timer.restart(start, self.delay, self.time); + function constant$2(x) { + return function() { + return x; + }; + } - // If the elapsed delay is less than our first sleep, start immediately. - if (self.delay <= elapsed) start(elapsed - self.delay); + function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) { + this.target = target; + this.type = type; + this.subject = subject; + this.identifier = id; + this.active = active; + this.x = x; + this.y = y; + this.dx = dx; + this.dy = dy; + this._ = dispatch; } - function start(elapsed) { - var i, j, n, o; + DragEvent.prototype.on = function() { + var value = this._.on.apply(this._, arguments); + return value === this._ ? this : value; + }; - // If the state is not SCHEDULED, then we previously errored on start. - if (self.state !== SCHEDULED) return stop(); + // Ignore right-click, since that should open the context menu. + function defaultFilter() { + return !event.button; + } - for (i in schedules) { - o = schedules[i]; - if (o.name !== self.name) continue; - - // While this element already has a starting transition during this frame, - // defer starting an interrupting transition until that transition has a - // chance to tick (and possibly end); see d3/d3-transition#54! - if (o.state === STARTED) return d3_timeout(start); - - // Interrupt the active transition, if any. - // Dispatch the interrupt event. - if (o.state === RUNNING) { - o.state = ENDED; - o.timer.stop(); - o.on.call("interrupt", node, node.__data__, o.index, o.group); - delete schedules[i]; - } - - // Cancel any pre-empted transitions. No interrupt event is dispatched - // because the cancelled transitions never started. Note that this also - // removes this transition from the pending list! - else if (+i < id) { - o.state = ENDED; - o.timer.stop(); - delete schedules[i]; - } - } - - // Defer the first tick to end of the current frame; see d3/d3#1576. - // Note the transition may be canceled after start and before the first tick! - // Note this must be scheduled before the start event; see d3/d3-transition#16! - // Assuming this is successful, subsequent callbacks go straight to tick. - d3_timeout(function() { - if (self.state === STARTED) { - self.state = RUNNING; - self.timer.restart(tick, self.delay, self.time); - tick(elapsed); - } - }); + function defaultContainer() { + return this.parentNode; + } - // Dispatch the start event. - // Note this must be done before the tween are initialized. - self.state = STARTING; - self.on.call("start", node, node.__data__, self.index, self.group); - if (self.state !== STARTING) return; // interrupted - self.state = STARTED; + function defaultSubject(d) { + return d == null ? {x: event.x, y: event.y} : d; + } - // Initialize the tween, deleting null tween. - tween = new Array(n = self.tween.length); - for (i = 0, j = -1; i < n; ++i) { - if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) { - tween[++j] = o; - } - } - tween.length = j + 1; + function defaultTouchable() { + return "ontouchstart" in this; } - function tick(elapsed) { - var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1), - i = -1, - n = tween.length; + function drag() { + var filter = defaultFilter, + container = defaultContainer, + subject = defaultSubject, + touchable = defaultTouchable, + gestures = {}, + listeners = dispatch("start", "drag", "end"), + active = 0, + mousedownx, + mousedowny, + mousemoving, + touchending, + clickDistance2 = 0; - while (++i < n) { - tween[i].call(null, t); + function drag(selection$$1) { + selection$$1 + .on("mousedown.drag", mousedowned) + .filter(touchable) + .on("touchstart.drag", touchstarted) + .on("touchmove.drag", touchmoved) + .on("touchend.drag touchcancel.drag", touchended) + .style("touch-action", "none") + .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); + } + + function mousedowned() { + if (touchending || !filter.apply(this, arguments)) return; + var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments); + if (!gesture) return; + select(event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true); + nodrag(event.view); + nopropagation(); + mousemoving = false; + mousedownx = event.clientX; + mousedowny = event.clientY; + gesture("start"); } - // Dispatch the end event. - if (self.state === ENDING) { - self.on.call("end", node, node.__data__, self.index, self.group); - stop(); + function mousemoved() { + noevent(); + if (!mousemoving) { + var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny; + mousemoving = dx * dx + dy * dy > clickDistance2; + } + gestures.mouse("drag"); } - } - function stop() { - self.state = ENDED; - self.timer.stop(); - delete schedules[id]; - for (var i in schedules) return; // eslint-disable-line no-unused-vars - delete node.__transition; - } -} + function mouseupped() { + select(event.view).on("mousemove.drag mouseup.drag", null); + yesdrag(event.view, mousemoving); + noevent(); + gestures.mouse("end"); + } -function interrupt(node, name) { - var schedules = node.__transition, - schedule$$1, - active, - empty = true, - i; + function touchstarted() { + if (!filter.apply(this, arguments)) return; + var touches = event.changedTouches, + c = container.apply(this, arguments), + n = touches.length, i, gesture; - if (!schedules) return; + for (i = 0; i < n; ++i) { + if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) { + nopropagation(); + gesture("start"); + } + } + } - name = name == null ? null : name + ""; + function touchmoved() { + var touches = event.changedTouches, + n = touches.length, i, gesture; - for (i in schedules) { - if ((schedule$$1 = schedules[i]).name !== name) { empty = false; continue; } - active = schedule$$1.state > STARTING && schedule$$1.state < ENDING; - schedule$$1.state = ENDED; - schedule$$1.timer.stop(); - if (active) schedule$$1.on.call("interrupt", node, node.__data__, schedule$$1.index, schedule$$1.group); - delete schedules[i]; - } + for (i = 0; i < n; ++i) { + if (gesture = gestures[touches[i].identifier]) { + noevent(); + gesture("drag"); + } + } + } - if (empty) delete node.__transition; -} + function touchended() { + var touches = event.changedTouches, + n = touches.length, i, gesture; -function selection_interrupt(name) { - return this.each(function() { - interrupt(this, name); - }); -} - -function tweenRemove(id, name) { - var tween0, tween1; - return function() { - var schedule$$1 = set$1(this, id), - tween = schedule$$1.tween; - - // If this node shared tween with the previous node, - // just assign the updated shared tween and we’re done! - // Otherwise, copy-on-write. - if (tween !== tween0) { - tween1 = tween0 = tween; - for (var i = 0, n = tween1.length; i < n; ++i) { - if (tween1[i].name === name) { - tween1 = tween1.slice(); - tween1.splice(i, 1); - break; + if (touchending) clearTimeout(touchending); + touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! + for (i = 0; i < n; ++i) { + if (gesture = gestures[touches[i].identifier]) { + nopropagation(); + gesture("end"); } } } - schedule$$1.tween = tween1; - }; -} - -function tweenFunction(id, name, value) { - var tween0, tween1; - if (typeof value !== "function") throw new Error; - return function() { - var schedule$$1 = set$1(this, id), - tween = schedule$$1.tween; - - // If this node shared tween with the previous node, - // just assign the updated shared tween and we’re done! - // Otherwise, copy-on-write. - if (tween !== tween0) { - tween1 = (tween0 = tween).slice(); - for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) { - if (tween1[i].name === name) { - tween1[i] = t; - break; + function beforestart(id, container, point$$1, that, args) { + var p = point$$1(container, id), s, dx, dy, + sublisteners = listeners.copy(); + + if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() { + if ((event.subject = s = subject.apply(that, args)) == null) return false; + dx = s.x - p[0] || 0; + dy = s.y - p[1] || 0; + return true; + })) return; + + return function gesture(type) { + var p0 = p, n; + switch (type) { + case "start": gestures[id] = gesture, n = active++; break; + case "end": delete gestures[id], --active; // nobreak + case "drag": p = point$$1(container, id), n = active; break; } - } - if (i === n) tween1.push(t); + customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]); + }; } - schedule$$1.tween = tween1; + drag.filter = function(_) { + return arguments.length ? (filter = typeof _ === "function" ? _ : constant$2(!!_), drag) : filter; + }; + + drag.container = function(_) { + return arguments.length ? (container = typeof _ === "function" ? _ : constant$2(_), drag) : container; + }; + + drag.subject = function(_) { + return arguments.length ? (subject = typeof _ === "function" ? _ : constant$2(_), drag) : subject; + }; + + drag.touchable = function(_) { + return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$2(!!_), drag) : touchable; + }; + + drag.on = function() { + var value = listeners.on.apply(listeners, arguments); + return value === listeners ? drag : value; + }; + + drag.clickDistance = function(_) { + return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2); + }; + + return drag; + } + + function define(constructor, factory, prototype) { + constructor.prototype = factory.prototype = prototype; + prototype.constructor = constructor; + } + + function extend(parent, definition) { + var prototype = Object.create(parent.prototype); + for (var key in definition) prototype[key] = definition[key]; + return prototype; + } + + function Color() {} + + var darker = 0.7; + var brighter = 1 / darker; + + var reI = "\\s*([+-]?\\d+)\\s*", + reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*", + reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*", + reHex3 = /^#([0-9a-f]{3})$/, + reHex6 = /^#([0-9a-f]{6})$/, + reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"), + reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"), + reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"), + reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"), + reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"), + reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); + + var named = { + aliceblue: 0xf0f8ff, + antiquewhite: 0xfaebd7, + aqua: 0x00ffff, + aquamarine: 0x7fffd4, + azure: 0xf0ffff, + beige: 0xf5f5dc, + bisque: 0xffe4c4, + black: 0x000000, + blanchedalmond: 0xffebcd, + blue: 0x0000ff, + blueviolet: 0x8a2be2, + brown: 0xa52a2a, + burlywood: 0xdeb887, + cadetblue: 0x5f9ea0, + chartreuse: 0x7fff00, + chocolate: 0xd2691e, + coral: 0xff7f50, + cornflowerblue: 0x6495ed, + cornsilk: 0xfff8dc, + crimson: 0xdc143c, + cyan: 0x00ffff, + darkblue: 0x00008b, + darkcyan: 0x008b8b, + darkgoldenrod: 0xb8860b, + darkgray: 0xa9a9a9, + darkgreen: 0x006400, + darkgrey: 0xa9a9a9, + darkkhaki: 0xbdb76b, + darkmagenta: 0x8b008b, + darkolivegreen: 0x556b2f, + darkorange: 0xff8c00, + darkorchid: 0x9932cc, + darkred: 0x8b0000, + darksalmon: 0xe9967a, + darkseagreen: 0x8fbc8f, + darkslateblue: 0x483d8b, + darkslategray: 0x2f4f4f, + darkslategrey: 0x2f4f4f, + darkturquoise: 0x00ced1, + darkviolet: 0x9400d3, + deeppink: 0xff1493, + deepskyblue: 0x00bfff, + dimgray: 0x696969, + dimgrey: 0x696969, + dodgerblue: 0x1e90ff, + firebrick: 0xb22222, + floralwhite: 0xfffaf0, + forestgreen: 0x228b22, + fuchsia: 0xff00ff, + gainsboro: 0xdcdcdc, + ghostwhite: 0xf8f8ff, + gold: 0xffd700, + goldenrod: 0xdaa520, + gray: 0x808080, + green: 0x008000, + greenyellow: 0xadff2f, + grey: 0x808080, + honeydew: 0xf0fff0, + hotpink: 0xff69b4, + indianred: 0xcd5c5c, + indigo: 0x4b0082, + ivory: 0xfffff0, + khaki: 0xf0e68c, + lavender: 0xe6e6fa, + lavenderblush: 0xfff0f5, + lawngreen: 0x7cfc00, + lemonchiffon: 0xfffacd, + lightblue: 0xadd8e6, + lightcoral: 0xf08080, + lightcyan: 0xe0ffff, + lightgoldenrodyellow: 0xfafad2, + lightgray: 0xd3d3d3, + lightgreen: 0x90ee90, + lightgrey: 0xd3d3d3, + lightpink: 0xffb6c1, + lightsalmon: 0xffa07a, + lightseagreen: 0x20b2aa, + lightskyblue: 0x87cefa, + lightslategray: 0x778899, + lightslategrey: 0x778899, + lightsteelblue: 0xb0c4de, + lightyellow: 0xffffe0, + lime: 0x00ff00, + limegreen: 0x32cd32, + linen: 0xfaf0e6, + magenta: 0xff00ff, + maroon: 0x800000, + mediumaquamarine: 0x66cdaa, + mediumblue: 0x0000cd, + mediumorchid: 0xba55d3, + mediumpurple: 0x9370db, + mediumseagreen: 0x3cb371, + mediumslateblue: 0x7b68ee, + mediumspringgreen: 0x00fa9a, + mediumturquoise: 0x48d1cc, + mediumvioletred: 0xc71585, + midnightblue: 0x191970, + mintcream: 0xf5fffa, + mistyrose: 0xffe4e1, + moccasin: 0xffe4b5, + navajowhite: 0xffdead, + navy: 0x000080, + oldlace: 0xfdf5e6, + olive: 0x808000, + olivedrab: 0x6b8e23, + orange: 0xffa500, + orangered: 0xff4500, + orchid: 0xda70d6, + palegoldenrod: 0xeee8aa, + palegreen: 0x98fb98, + paleturquoise: 0xafeeee, + palevioletred: 0xdb7093, + papayawhip: 0xffefd5, + peachpuff: 0xffdab9, + peru: 0xcd853f, + pink: 0xffc0cb, + plum: 0xdda0dd, + powderblue: 0xb0e0e6, + purple: 0x800080, + rebeccapurple: 0x663399, + red: 0xff0000, + rosybrown: 0xbc8f8f, + royalblue: 0x4169e1, + saddlebrown: 0x8b4513, + salmon: 0xfa8072, + sandybrown: 0xf4a460, + seagreen: 0x2e8b57, + seashell: 0xfff5ee, + sienna: 0xa0522d, + silver: 0xc0c0c0, + skyblue: 0x87ceeb, + slateblue: 0x6a5acd, + slategray: 0x708090, + slategrey: 0x708090, + snow: 0xfffafa, + springgreen: 0x00ff7f, + steelblue: 0x4682b4, + tan: 0xd2b48c, + teal: 0x008080, + thistle: 0xd8bfd8, + tomato: 0xff6347, + turquoise: 0x40e0d0, + violet: 0xee82ee, + wheat: 0xf5deb3, + white: 0xffffff, + whitesmoke: 0xf5f5f5, + yellow: 0xffff00, + yellowgreen: 0x9acd32 }; -} -function transition_tween(name, value) { - var id = this._id; + define(Color, color, { + displayable: function() { + return this.rgb().displayable(); + }, + toString: function() { + return this.rgb() + ""; + } + }); - name += ""; + function color(format) { + var m; + format = (format + "").trim().toLowerCase(); + return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00 + : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000 + : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) + : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) + : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) + : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) + : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) + : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) + : named.hasOwnProperty(format) ? rgbn(named[format]) + : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) + : null; + } - if (arguments.length < 2) { - var tween = get$1(this.node(), id).tween; - for (var i = 0, n = tween.length, t; i < n; ++i) { - if ((t = tween[i]).name === name) { - return t.value; - } - } - return null; + function rgbn(n) { + return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); } - return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value)); -} + function rgba(r, g, b, a) { + if (a <= 0) r = g = b = NaN; + return new Rgb(r, g, b, a); + } -function tweenValue(transition, name, value) { - var id = transition._id; + function rgbConvert(o) { + if (!(o instanceof Color)) o = color(o); + if (!o) return new Rgb; + o = o.rgb(); + return new Rgb(o.r, o.g, o.b, o.opacity); + } - transition.each(function() { - var schedule$$1 = set$1(this, id); - (schedule$$1.value || (schedule$$1.value = {}))[name] = value.apply(this, arguments); - }); + function rgb(r, g, b, opacity) { + return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); + } - return function(node) { - return get$1(node, id).value[name]; - }; -} - -function interpolate(a, b) { - var c; - return (typeof b === "number" ? d3_interpolateNumber - : b instanceof color ? d3_interpolateRgb - : (c = color(b)) ? (b = c, d3_interpolateRgb) - : interpolateString)(a, b); -} - -function attrRemove$1(name) { - return function() { - this.removeAttribute(name); - }; -} + function Rgb(r, g, b, opacity) { + this.r = +r; + this.g = +g; + this.b = +b; + this.opacity = +opacity; + } -function attrRemoveNS$1(fullname) { - return function() { - this.removeAttributeNS(fullname.space, fullname.local); - }; -} - -function attrConstant$1(name, interpolate$$1, value1) { - var value00, - interpolate0; - return function() { - var value0 = this.getAttribute(name); - return value0 === value1 ? null - : value0 === value00 ? interpolate0 - : interpolate0 = interpolate$$1(value00 = value0, value1); - }; -} - -function attrConstantNS$1(fullname, interpolate$$1, value1) { - var value00, - interpolate0; - return function() { - var value0 = this.getAttributeNS(fullname.space, fullname.local); - return value0 === value1 ? null - : value0 === value00 ? interpolate0 - : interpolate0 = interpolate$$1(value00 = value0, value1); - }; -} - -function attrFunction$1(name, interpolate$$1, value) { - var value00, - value10, - interpolate0; - return function() { - var value0, value1 = value(this); - if (value1 == null) return void this.removeAttribute(name); - value0 = this.getAttribute(name); - return value0 === value1 ? null - : value0 === value00 && value1 === value10 ? interpolate0 - : interpolate0 = interpolate$$1(value00 = value0, value10 = value1); - }; -} - -function attrFunctionNS$1(fullname, interpolate$$1, value) { - var value00, - value10, - interpolate0; - return function() { - var value0, value1 = value(this); - if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local); - value0 = this.getAttributeNS(fullname.space, fullname.local); - return value0 === value1 ? null - : value0 === value00 && value1 === value10 ? interpolate0 - : interpolate0 = interpolate$$1(value00 = value0, value10 = value1); - }; -} - -function transition_attr(name, value) { - var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate; - return this.attrTween(name, typeof value === "function" - ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value)) - : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname) - : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value + "")); -} - -function attrTweenNS(fullname, value) { - function tween() { - var node = this, i = value.apply(node, arguments); - return i && function(t) { - node.setAttributeNS(fullname.space, fullname.local, i(t)); - }; + define(Rgb, rgb, extend(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); + }, + rgb: function() { + return this; + }, + displayable: function() { + return (0 <= this.r && this.r <= 255) + && (0 <= this.g && this.g <= 255) + && (0 <= this.b && this.b <= 255) + && (0 <= this.opacity && this.opacity <= 1); + }, + toString: function() { + var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); + return (a === 1 ? "rgb(" : "rgba(") + + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " + + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " + + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + + (a === 1 ? ")" : ", " + a + ")"); + } + })); + + function hsla(h, s, l, a) { + if (a <= 0) h = s = l = NaN; + else if (l <= 0 || l >= 1) h = s = NaN; + else if (s <= 0) h = NaN; + return new Hsl(h, s, l, a); + } + + function hslConvert(o) { + if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); + if (!(o instanceof Color)) o = color(o); + if (!o) return new Hsl; + if (o instanceof Hsl) return o; + o = o.rgb(); + var r = o.r / 255, + g = o.g / 255, + b = o.b / 255, + min = Math.min(r, g, b), + max = Math.max(r, g, b), + h = NaN, + s = max - min, + l = (max + min) / 2; + if (s) { + if (r === max) h = (g - b) / s + (g < b) * 6; + else if (g === max) h = (b - r) / s + 2; + else h = (r - g) / s + 4; + s /= l < 0.5 ? max + min : 2 - max - min; + h *= 60; + } else { + s = l > 0 && l < 1 ? 0 : h; + } + return new Hsl(h, s, l, o.opacity); } - tween._value = value; - return tween; -} -function attrTween(name, value) { - function tween() { - var node = this, i = value.apply(node, arguments); - return i && function(t) { - node.setAttribute(name, i(t)); - }; + function hsl(h, s, l, opacity) { + return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); } - tween._value = value; - return tween; -} - -function transition_attrTween(name, value) { - var key = "attr." + name; - if (arguments.length < 2) return (key = this.tween(key)) && key._value; - if (value == null) return this.tween(key, null); - if (typeof value !== "function") throw new Error; - var fullname = namespace(name); - return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value)); -} - -function delayFunction(id, value) { - return function() { - init(this, id).delay = +value.apply(this, arguments); - }; -} -function delayConstant(id, value) { - return value = +value, function() { - init(this, id).delay = value; - }; -} + function Hsl(h, s, l, opacity) { + this.h = +h; + this.s = +s; + this.l = +l; + this.opacity = +opacity; + } -function transition_delay(value) { - var id = this._id; + define(Hsl, hsl, extend(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Hsl(this.h, this.s, this.l * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Hsl(this.h, this.s, this.l * k, this.opacity); + }, + rgb: function() { + var h = this.h % 360 + (this.h < 0) * 360, + s = isNaN(h) || isNaN(this.s) ? 0 : this.s, + l = this.l, + m2 = l + (l < 0.5 ? l : 1 - l) * s, + m1 = 2 * l - m2; + return new Rgb( + hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), + hsl2rgb(h, m1, m2), + hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), + this.opacity + ); + }, + displayable: function() { + return (0 <= this.s && this.s <= 1 || isNaN(this.s)) + && (0 <= this.l && this.l <= 1) + && (0 <= this.opacity && this.opacity <= 1); + } + })); + + /* From FvD 13.37, CSS Color Module Level 3 */ + function hsl2rgb(h, m1, m2) { + return (h < 60 ? m1 + (m2 - m1) * h / 60 + : h < 180 ? m2 + : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 + : m1) * 255; + } + + var deg2rad = Math.PI / 180; + var rad2deg = 180 / Math.PI; + + var Kn = 18, + Xn = 0.950470, // D65 standard referent + Yn = 1, + Zn = 1.088830, + t0 = 4 / 29, + t1 = 6 / 29, + t2 = 3 * t1 * t1, + t3 = t1 * t1 * t1; + + function labConvert(o) { + if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); + if (o instanceof Hcl) { + var h = o.h * deg2rad; + return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); + } + if (!(o instanceof Rgb)) o = rgbConvert(o); + var b = rgb2xyz(o.r), + a = rgb2xyz(o.g), + l = rgb2xyz(o.b), + x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn), + y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn), + z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn); + return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); + } + + function lab(l, a, b, opacity) { + return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); + } + + function Lab(l, a, b, opacity) { + this.l = +l; + this.a = +a; + this.b = +b; + this.opacity = +opacity; + } + + define(Lab, lab, extend(Color, { + brighter: function(k) { + return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity); + }, + darker: function(k) { + return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity); + }, + rgb: function() { + var y = (this.l + 16) / 116, + x = isNaN(this.a) ? y : y + this.a / 500, + z = isNaN(this.b) ? y : y - this.b / 200; + y = Yn * lab2xyz(y); + x = Xn * lab2xyz(x); + z = Zn * lab2xyz(z); + return new Rgb( + xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB + xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z), + xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z), + this.opacity + ); + } + })); - return arguments.length - ? this.each((typeof value === "function" - ? delayFunction - : delayConstant)(id, value)) - : get$1(this.node(), id).delay; -} + function xyz2lab(t) { + return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0; + } -function durationFunction(id, value) { - return function() { - set$1(this, id).duration = +value.apply(this, arguments); - }; -} + function lab2xyz(t) { + return t > t1 ? t * t * t : t2 * (t - t0); + } -function durationConstant(id, value) { - return value = +value, function() { - set$1(this, id).duration = value; - }; -} - -function transition_duration(value) { - var id = this._id; - - return arguments.length - ? this.each((typeof value === "function" - ? durationFunction - : durationConstant)(id, value)) - : get$1(this.node(), id).duration; -} - -function easeConstant(id, value) { - if (typeof value !== "function") throw new Error; - return function() { - set$1(this, id).ease = value; - }; -} + function xyz2rgb(x) { + return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); + } -function transition_ease(value) { - var id = this._id; + function rgb2xyz(x) { + return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); + } - return arguments.length - ? this.each(easeConstant(id, value)) - : get$1(this.node(), id).ease; -} + function hclConvert(o) { + if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); + if (!(o instanceof Lab)) o = labConvert(o); + var h = Math.atan2(o.b, o.a) * rad2deg; + return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); + } -function transition_filter(match) { - if (typeof match !== "function") match = matcher$1(match); + function hcl(h, c, l, opacity) { + return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); + } - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { - if ((node = group[i]) && match.call(node, node.__data__, i, group)) { - subgroup.push(node); - } - } + function Hcl(h, c, l, opacity) { + this.h = +h; + this.c = +c; + this.l = +l; + this.opacity = +opacity; } - return new Transition(subgroups, this._parents, this._name, this._id); -} + define(Hcl, hcl, extend(Color, { + brighter: function(k) { + return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity); + }, + darker: function(k) { + return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity); + }, + rgb: function() { + return labConvert(this).rgb(); + } + })); + + var A = -0.14861, + B = +1.78277, + C = -0.29227, + D = -0.90649, + E = +1.97294, + ED = E * D, + EB = E * B, + BC_DA = B * C - D * A; + + function cubehelixConvert(o) { + if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); + if (!(o instanceof Rgb)) o = rgbConvert(o); + var r = o.r / 255, + g = o.g / 255, + b = o.b / 255, + l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), + bl = b - l, + k = (E * (g - l) - C * bl) / D, + s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 + h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN; + return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); + } + + function cubehelix(h, s, l, opacity) { + return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); + } + + function Cubehelix(h, s, l, opacity) { + this.h = +h; + this.s = +s; + this.l = +l; + this.opacity = +opacity; + } + + define(Cubehelix, cubehelix, extend(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Cubehelix(this.h, this.s, this.l * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Cubehelix(this.h, this.s, this.l * k, this.opacity); + }, + rgb: function() { + var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad, + l = +this.l, + a = isNaN(this.s) ? 0 : this.s * l * (1 - l), + cosh = Math.cos(h), + sinh = Math.sin(h); + return new Rgb( + 255 * (l + a * (A * cosh + B * sinh)), + 255 * (l + a * (C * cosh + D * sinh)), + 255 * (l + a * (E * cosh)), + this.opacity + ); + } + })); -function transition_merge(transition$$1) { - if (transition$$1._id !== this._id) throw new Error; + function basis(t1, v0, v1, v2, v3) { + var t2 = t1 * t1, t3 = t2 * t1; + return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + + (4 - 6 * t2 + 3 * t3) * v1 + + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + + t3 * v3) / 6; + } - for (var groups0 = this._groups, groups1 = transition$$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { - for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group0[i] || group1[i]) { - merge[i] = node; - } - } + function basis$1(values) { + var n = values.length - 1; + return function(t) { + var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), + v1 = values[i], + v2 = values[i + 1], + v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, + v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; + return basis((t - i / n) * n, v0, v1, v2, v3); + }; } - for (; j < m0; ++j) { - merges[j] = groups0[j]; + function basisClosed(values) { + var n = values.length; + return function(t) { + var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), + v0 = values[(i + n - 1) % n], + v1 = values[i % n], + v2 = values[(i + 1) % n], + v3 = values[(i + 2) % n]; + return basis((t - i / n) * n, v0, v1, v2, v3); + }; } - return new Transition(merges, this._parents, this._name, this._id); -} + function constant$3(x) { + return function() { + return x; + }; + } -function start(name) { - return (name + "").trim().split(/^|\s+/).every(function(t) { - var i = t.indexOf("."); - if (i >= 0) t = t.slice(0, i); - return !t || t === "start"; - }); -} + function linear(a, d) { + return function(t) { + return a + t * d; + }; + } -function onFunction(id, name, listener) { - var on0, on1, sit = start(name) ? init : set$1; - return function() { - var schedule$$1 = sit(this, id), - on = schedule$$1.on; + function exponential(a, b, y) { + return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { + return Math.pow(a + t * b, y); + }; + } - // If this node shared a dispatch with the previous node, - // just assign the updated shared dispatch and we’re done! - // Otherwise, copy-on-write. - if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener); + function hue(a, b) { + var d = b - a; + return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a); + } - schedule$$1.on = on1; - }; -} + function gamma(y) { + return (y = +y) === 1 ? nogamma : function(a, b) { + return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a); + }; + } -function transition_on(name, listener) { - var id = this._id; + function nogamma(a, b) { + var d = b - a; + return d ? linear(a, d) : constant$3(isNaN(a) ? b : a); + } - return arguments.length < 2 - ? get$1(this.node(), id).on.on(name) - : this.each(onFunction(id, name, listener)); -} + var interpolateRgb = (function rgbGamma(y) { + var color$$1 = gamma(y); -function removeFunction(id) { - return function() { - var parent = this.parentNode; - for (var i in this.__transition) if (+i !== id) return; - if (parent) parent.removeChild(this); - }; -} - -function transition_remove() { - return this.on("end.remove", removeFunction(this._id)); -} + function rgb$$1(start, end) { + var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r), + g = color$$1(start.g, end.g), + b = color$$1(start.b, end.b), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.r = r(t); + start.g = g(t); + start.b = b(t); + start.opacity = opacity(t); + return start + ""; + }; + } -function transition_select(select) { - var name = this._name, - id = this._id; + rgb$$1.gamma = rgbGamma; - if (typeof select !== "function") select = selector(select); + return rgb$$1; + })(1); - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { - if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - subgroup[i] = subnode; - schedule(subgroup[i], name, id, i, subgroup, get$1(node, id)); + function rgbSpline(spline) { + return function(colors) { + var n = colors.length, + r = new Array(n), + g = new Array(n), + b = new Array(n), + i, color$$1; + for (i = 0; i < n; ++i) { + color$$1 = rgb(colors[i]); + r[i] = color$$1.r || 0; + g[i] = color$$1.g || 0; + b[i] = color$$1.b || 0; } - } + r = spline(r); + g = spline(g); + b = spline(b); + color$$1.opacity = 1; + return function(t) { + color$$1.r = r(t); + color$$1.g = g(t); + color$$1.b = b(t); + return color$$1 + ""; + }; + }; } - return new Transition(subgroups, this._parents, name, id); -} + var rgbBasis = rgbSpline(basis$1); + var rgbBasisClosed = rgbSpline(basisClosed); -function transition_selectAll(select) { - var name = this._name, - id = this._id; + function array$1(a, b) { + var nb = b ? b.length : 0, + na = a ? Math.min(nb, a.length) : 0, + x = new Array(na), + c = new Array(nb), + i; - if (typeof select !== "function") select = selectorAll(select); + for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]); + for (; i < nb; ++i) c[i] = b[i]; - for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - for (var children = select.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) { - if (child = children[k]) { - schedule(child, name, id, k, children, inherit); - } - } - subgroups.push(children); - parents.push(node); - } - } + return function(t) { + for (i = 0; i < na; ++i) c[i] = x[i](t); + return c; + }; } - return new Transition(subgroups, parents, name, id); -} + function date(a, b) { + var d = new Date; + return a = +a, b -= a, function(t) { + return d.setTime(a + b * t), d; + }; + } -var Selection$1 = selection.prototype.constructor; + function interpolateNumber(a, b) { + return a = +a, b -= a, function(t) { + return a + b * t; + }; + } -function transition_selection() { - return new Selection$1(this._groups, this._parents); -} + function object(a, b) { + var i = {}, + c = {}, + k; -function styleRemove$1(name, interpolate$$1) { - var value00, - value10, - interpolate0; - return function() { - var value0 = styleValue(this, name), - value1 = (this.style.removeProperty(name), styleValue(this, name)); - return value0 === value1 ? null - : value0 === value00 && value1 === value10 ? interpolate0 - : interpolate0 = interpolate$$1(value00 = value0, value10 = value1); - }; -} + if (a === null || typeof a !== "object") a = {}; + if (b === null || typeof b !== "object") b = {}; -function styleRemoveEnd(name) { - return function() { - this.style.removeProperty(name); - }; -} - -function styleConstant$1(name, interpolate$$1, value1) { - var value00, - interpolate0; - return function() { - var value0 = styleValue(this, name); - return value0 === value1 ? null - : value0 === value00 ? interpolate0 - : interpolate0 = interpolate$$1(value00 = value0, value1); - }; -} - -function styleFunction$1(name, interpolate$$1, value) { - var value00, - value10, - interpolate0; - return function() { - var value0 = styleValue(this, name), - value1 = value(this); - if (value1 == null) value1 = (this.style.removeProperty(name), styleValue(this, name)); - return value0 === value1 ? null - : value0 === value00 && value1 === value10 ? interpolate0 - : interpolate0 = interpolate$$1(value00 = value0, value10 = value1); - }; -} - -function transition_style(name, value, priority) { - var i = (name += "") === "transform" ? interpolateTransformCss : interpolate; - return value == null ? this - .styleTween(name, styleRemove$1(name, i)) - .on("end.style." + name, styleRemoveEnd(name)) - : this.styleTween(name, typeof value === "function" - ? styleFunction$1(name, i, tweenValue(this, "style." + name, value)) - : styleConstant$1(name, i, value + ""), priority); -} - -function styleTween(name, value, priority) { - function tween() { - var node = this, i = value.apply(node, arguments); - return i && function(t) { - node.style.setProperty(name, i(t), priority); + for (k in b) { + if (k in a) { + i[k] = interpolate(a[k], b[k]); + } else { + c[k] = b[k]; + } + } + + return function(t) { + for (k in i) c[k] = i[k](t); + return c; }; } - tween._value = value; - return tween; -} - -function transition_styleTween(name, value, priority) { - var key = "style." + (name += ""); - if (arguments.length < 2) return (key = this.tween(key)) && key._value; - if (value == null) return this.tween(key, null); - if (typeof value !== "function") throw new Error; - return this.tween(key, styleTween(name, value, priority == null ? "" : priority)); -} - -function textConstant$1(value) { - return function() { - this.textContent = value; - }; -} -function textFunction$1(value) { - return function() { - var value1 = value(this); - this.textContent = value1 == null ? "" : value1; - }; -} + var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, + reB = new RegExp(reA.source, "g"); -function transition_text(value) { - return this.tween("text", typeof value === "function" - ? textFunction$1(tweenValue(this, "text", value)) - : textConstant$1(value == null ? "" : value + "")); -} + function zero(b) { + return function() { + return b; + }; + } -function transition_transition() { - var name = this._name, - id0 = this._id, - id1 = newId(); + function one(b) { + return function(t) { + return b(t) + ""; + }; + } - for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - var inherit = get$1(node, id0); - schedule(node, name, id1, i, group, { - time: inherit.time + inherit.delay + inherit.duration, - delay: 0, - duration: inherit.duration, - ease: inherit.ease - }); + function interpolateString(a, b) { + var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b + am, // current match in a + bm, // current match in b + bs, // string preceding current number in b, if any + i = -1, // index in s + s = [], // string constants and placeholders + q = []; // number interpolators + + // Coerce inputs to strings. + a = a + "", b = b + ""; + + // Interpolate pairs of numbers in a & b. + while ((am = reA.exec(a)) + && (bm = reB.exec(b))) { + if ((bs = bm.index) > bi) { // a string precedes the next number in b + bs = b.slice(bi, bs); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; } + if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match + if (s[i]) s[i] += bm; // coalesce with previous string + else s[++i] = bm; + } else { // interpolate non-matching numbers + s[++i] = null; + q.push({i: i, x: interpolateNumber(am, bm)}); + } + bi = reB.lastIndex; } - } - return new Transition(groups, this._parents, name, id1); -} + // Add remains of b. + if (bi < b.length) { + bs = b.slice(bi); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } -var id = 0; + // Special optimization for only a single match. + // Otherwise, interpolate each of the numbers and rejoin the string. + return s.length < 2 ? (q[0] + ? one(q[0].x) + : zero(b)) + : (b = q.length, function(t) { + for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }); + } -function Transition(groups, parents, name, id) { - this._groups = groups; - this._parents = parents; - this._name = name; - this._id = id; -} + function interpolate(a, b) { + var t = typeof b, c; + return b == null || t === "boolean" ? constant$3(b) + : (t === "number" ? interpolateNumber + : t === "string" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString) + : b instanceof color ? interpolateRgb + : b instanceof Date ? date + : Array.isArray(b) ? array$1 + : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object + : interpolateNumber)(a, b); + } -function transition(name) { - return selection().transition(name); -} + function interpolateRound(a, b) { + return a = +a, b -= a, function(t) { + return Math.round(a + b * t); + }; + } -function newId() { - return ++id; -} + var degrees = 180 / Math.PI; -var selection_prototype = selection.prototype; + var identity$2 = { + translateX: 0, + translateY: 0, + rotate: 0, + skewX: 0, + scaleX: 1, + scaleY: 1 + }; -Transition.prototype = transition.prototype = { - constructor: Transition, - select: transition_select, - selectAll: transition_selectAll, - filter: transition_filter, - merge: transition_merge, - selection: transition_selection, - transition: transition_transition, - call: selection_prototype.call, - nodes: selection_prototype.nodes, - node: selection_prototype.node, - size: selection_prototype.size, - empty: selection_prototype.empty, - each: selection_prototype.each, - on: transition_on, - attr: transition_attr, - attrTween: transition_attrTween, - style: transition_style, - styleTween: transition_styleTween, - text: transition_text, - remove: transition_remove, - tween: transition_tween, - delay: transition_delay, - duration: transition_duration, - ease: transition_ease -}; + function decompose(a, b, c, d, e, f) { + var scaleX, scaleY, skewX; + if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; + if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; + if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; + if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; + return { + translateX: e, + translateY: f, + rotate: Math.atan2(b, a) * degrees, + skewX: Math.atan(skewX) * degrees, + scaleX: scaleX, + scaleY: scaleY + }; + } -function linear$1(t) { - return +t; -} + var cssNode, + cssRoot, + cssView, + svgNode; -function quadIn(t) { - return t * t; -} + function parseCss(value) { + if (value === "none") return identity$2; + if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; + cssNode.style.transform = value; + value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform"); + cssRoot.removeChild(cssNode); + value = value.slice(7, -1).split(","); + return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]); + } -function quadOut(t) { - return t * (2 - t); -} + function parseSvg(value) { + if (value == null) return identity$2; + if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); + svgNode.setAttribute("transform", value); + if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2; + value = value.matrix; + return decompose(value.a, value.b, value.c, value.d, value.e, value.f); + } -function quadInOut(t) { - return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2; -} + function interpolateTransform(parse, pxComma, pxParen, degParen) { -function cubicIn(t) { - return t * t * t; -} + function pop(s) { + return s.length ? s.pop() + " " : ""; + } -function cubicOut(t) { - return --t * t * t + 1; -} + function translate(xa, ya, xb, yb, s, q) { + if (xa !== xb || ya !== yb) { + var i = s.push("translate(", null, pxComma, null, pxParen); + q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); + } else if (xb || yb) { + s.push("translate(" + xb + pxComma + yb + pxParen); + } + } -function cubicInOut(t) { - return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2; -} + function rotate(a, b, s, q) { + if (a !== b) { + if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path + q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: interpolateNumber(a, b)}); + } else if (b) { + s.push(pop(s) + "rotate(" + b + degParen); + } + } -var exponent = 3; + function skewX(a, b, s, q) { + if (a !== b) { + q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: interpolateNumber(a, b)}); + } else if (b) { + s.push(pop(s) + "skewX(" + b + degParen); + } + } -var polyIn = (function custom(e) { - e = +e; + function scale(xa, ya, xb, yb, s, q) { + if (xa !== xb || ya !== yb) { + var i = s.push(pop(s) + "scale(", null, ",", null, ")"); + q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); + } else if (xb !== 1 || yb !== 1) { + s.push(pop(s) + "scale(" + xb + "," + yb + ")"); + } + } - function polyIn(t) { - return Math.pow(t, e); + return function(a, b) { + var s = [], // string constants and placeholders + q = []; // number interpolators + a = parse(a), b = parse(b); + translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); + rotate(a.rotate, b.rotate, s, q); + skewX(a.skewX, b.skewX, s, q); + scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); + a = b = null; // gc + return function(t) { + var i = -1, n = q.length, o; + while (++i < n) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; + }; } - polyIn.exponent = custom; + var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)"); + var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")"); - return polyIn; -})(exponent); + var rho = Math.SQRT2, + rho2 = 2, + rho4 = 4, + epsilon2 = 1e-12; + + function cosh(x) { + return ((x = Math.exp(x)) + 1 / x) / 2; + } -var polyOut = (function custom(e) { - e = +e; + function sinh(x) { + return ((x = Math.exp(x)) - 1 / x) / 2; + } - function polyOut(t) { - return 1 - Math.pow(1 - t, e); + function tanh(x) { + return ((x = Math.exp(2 * x)) - 1) / (x + 1); } - polyOut.exponent = custom; + // p0 = [ux0, uy0, w0] + // p1 = [ux1, uy1, w1] + function interpolateZoom(p0, p1) { + var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], + ux1 = p1[0], uy1 = p1[1], w1 = p1[2], + dx = ux1 - ux0, + dy = uy1 - uy0, + d2 = dx * dx + dy * dy, + i, + S; + + // Special case for u0 ≅ u1. + if (d2 < epsilon2) { + S = Math.log(w1 / w0) / rho; + i = function(t) { + return [ + ux0 + t * dx, + uy0 + t * dy, + w0 * Math.exp(rho * t * S) + ]; + }; + } + + // General case. + else { + var d1 = Math.sqrt(d2), + b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), + b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), + r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), + r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); + S = (r1 - r0) / rho; + i = function(t) { + var s = t * S, + coshr0 = cosh(r0), + u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); + return [ + ux0 + u * dx, + uy0 + u * dy, + w0 * coshr0 / cosh(rho * s + r0) + ]; + }; + } - return polyOut; -})(exponent); + i.duration = S * 1000; -var polyInOut = (function custom(e) { - e = +e; + return i; + } - function polyInOut(t) { - return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2; + function hsl$1(hue$$1) { + return function(start, end) { + var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h), + s = nogamma(start.s, end.s), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.s = s(t); + start.l = l(t); + start.opacity = opacity(t); + return start + ""; + }; + } } - polyInOut.exponent = custom; + var hsl$2 = hsl$1(hue); + var hslLong = hsl$1(nogamma); - return polyInOut; -})(exponent); + function lab$1(start, end) { + var l = nogamma((start = lab(start)).l, (end = lab(end)).l), + a = nogamma(start.a, end.a), + b = nogamma(start.b, end.b), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.l = l(t); + start.a = a(t); + start.b = b(t); + start.opacity = opacity(t); + return start + ""; + }; + } -var pi = Math.PI, - halfPi = pi / 2; + function hcl$1(hue$$1) { + return function(start, end) { + var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h), + c = nogamma(start.c, end.c), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.c = c(t); + start.l = l(t); + start.opacity = opacity(t); + return start + ""; + }; + } + } -function sinIn(t) { - return 1 - Math.cos(t * halfPi); -} + var hcl$2 = hcl$1(hue); + var hclLong = hcl$1(nogamma); -function sinOut(t) { - return Math.sin(t * halfPi); -} + function cubehelix$1(hue$$1) { + return (function cubehelixGamma(y) { + y = +y; -function sinInOut(t) { - return (1 - Math.cos(pi * t)) / 2; -} + function cubehelix$$1(start, end) { + var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h), + s = nogamma(start.s, end.s), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.s = s(t); + start.l = l(Math.pow(t, y)); + start.opacity = opacity(t); + return start + ""; + }; + } -function expIn(t) { - return Math.pow(2, 10 * t - 10); -} + cubehelix$$1.gamma = cubehelixGamma; -function expOut(t) { - return 1 - Math.pow(2, -10 * t); -} + return cubehelix$$1; + })(1); + } -function expInOut(t) { - return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2; -} + var cubehelix$2 = cubehelix$1(hue); + var cubehelixLong = cubehelix$1(nogamma); -function circleIn(t) { - return 1 - Math.sqrt(1 - t * t); -} + function d3_quantize(interpolator, n) { + var samples = new Array(n); + for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1)); + return samples; + } -function circleOut(t) { - return Math.sqrt(1 - --t * t); -} + var frame = 0, // is an animation frame pending? + timeout = 0, // is a timeout pending? + interval = 0, // are any timers active? + pokeDelay = 1000, // how frequently we check for clock skew + taskHead, + taskTail, + clockLast = 0, + clockNow = 0, + clockSkew = 0, + clock = typeof performance === "object" && performance.now ? performance : Date, + setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; -function circleInOut(t) { - return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2; -} + function now() { + return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); + } -var b1 = 4 / 11, - b2 = 6 / 11, - b3 = 8 / 11, - b4 = 3 / 4, - b5 = 9 / 11, - b6 = 10 / 11, - b7 = 15 / 16, - b8 = 21 / 22, - b9 = 63 / 64, - b0 = 1 / b1 / b1; + function clearNow() { + clockNow = 0; + } -function bounceIn(t) { - return 1 - bounceOut(1 - t); -} + function Timer() { + this._call = + this._time = + this._next = null; + } -function bounceOut(t) { - return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9; -} + Timer.prototype = timer.prototype = { + constructor: Timer, + restart: function(callback, delay, time) { + if (typeof callback !== "function") throw new TypeError("callback is not a function"); + time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); + if (!this._next && taskTail !== this) { + if (taskTail) taskTail._next = this; + else taskHead = this; + taskTail = this; + } + this._call = callback; + this._time = time; + sleep(); + }, + stop: function() { + if (this._call) { + this._call = null; + this._time = Infinity; + sleep(); + } + } + }; -function bounceInOut(t) { - return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2; -} + function timer(callback, delay, time) { + var t = new Timer; + t.restart(callback, delay, time); + return t; + } -var overshoot = 1.70158; + function timerFlush() { + now(); // Get the current time, if not already set. + ++frame; // Pretend we’ve set an alarm, if we haven’t already. + var t = taskHead, e; + while (t) { + if ((e = clockNow - t._time) >= 0) t._call.call(null, e); + t = t._next; + } + --frame; + } -var backIn = (function custom(s) { - s = +s; + function wake() { + clockNow = (clockLast = clock.now()) + clockSkew; + frame = timeout = 0; + try { + timerFlush(); + } finally { + frame = 0; + nap(); + clockNow = 0; + } + } - function backIn(t) { - return t * t * ((s + 1) * t - s); + function poke() { + var now = clock.now(), delay = now - clockLast; + if (delay > pokeDelay) clockSkew -= delay, clockLast = now; } - backIn.overshoot = custom; + function nap() { + var t0, t1 = taskHead, t2, time = Infinity; + while (t1) { + if (t1._call) { + if (time > t1._time) time = t1._time; + t0 = t1, t1 = t1._next; + } else { + t2 = t1._next, t1._next = null; + t1 = t0 ? t0._next = t2 : taskHead = t2; + } + } + taskTail = t0; + sleep(time); + } - return backIn; -})(overshoot); + function sleep(time) { + if (frame) return; // Soonest alarm already set, or will be. + if (timeout) timeout = clearTimeout(timeout); + var delay = time - clockNow; // Strictly less than if we recomputed clockNow. + if (delay > 24) { + if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew); + if (interval) interval = clearInterval(interval); + } else { + if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay); + frame = 1, setFrame(wake); + } + } -var backOut = (function custom(s) { - s = +s; + function timeout$1(callback, delay, time) { + var t = new Timer; + delay = delay == null ? 0 : +delay; + t.restart(function(elapsed) { + t.stop(); + callback(elapsed + delay); + }, delay, time); + return t; + } - function backOut(t) { - return --t * t * ((s + 1) * t + s) + 1; + function interval$1(callback, delay, time) { + var t = new Timer, total = delay; + if (delay == null) return t.restart(callback, delay, time), t; + delay = +delay, time = time == null ? now() : +time; + t.restart(function tick(elapsed) { + elapsed += total; + t.restart(tick, total += delay, time); + callback(elapsed); + }, delay, time); + return t; } - backOut.overshoot = custom; + var emptyOn = dispatch("start", "end", "interrupt"); + var emptyTween = []; + + var CREATED = 0; + var SCHEDULED = 1; + var STARTING = 2; + var STARTED = 3; + var RUNNING = 4; + var ENDING = 5; + var ENDED = 6; + + function schedule(node, name, id, index, group, timing) { + var schedules = node.__transition; + if (!schedules) node.__transition = {}; + else if (id in schedules) return; + create$1(node, id, { + name: name, + index: index, // For context during callback. + group: group, // For context during callback. + on: emptyOn, + tween: emptyTween, + time: timing.time, + delay: timing.delay, + duration: timing.duration, + ease: timing.ease, + timer: null, + state: CREATED + }); + } - return backOut; -})(overshoot); + function init(node, id) { + var schedule = get$1(node, id); + if (schedule.state > CREATED) throw new Error("too late; already scheduled"); + return schedule; + } -var backInOut = (function custom(s) { - s = +s; + function set$1(node, id) { + var schedule = get$1(node, id); + if (schedule.state > STARTING) throw new Error("too late; already started"); + return schedule; + } - function backInOut(t) { - return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2; + function get$1(node, id) { + var schedule = node.__transition; + if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found"); + return schedule; } - backInOut.overshoot = custom; + function create$1(node, id, self) { + var schedules = node.__transition, + tween; + + // Initialize the self timer when the transition is created. + // Note the actual delay is not known until the first callback! + schedules[id] = self; + self.timer = timer(schedule, 0, self.time); - return backInOut; -})(overshoot); + function schedule(elapsed) { + self.state = SCHEDULED; + self.timer.restart(start, self.delay, self.time); -var tau = 2 * Math.PI, - amplitude = 1, - period = 0.3; + // If the elapsed delay is less than our first sleep, start immediately. + if (self.delay <= elapsed) start(elapsed - self.delay); + } -var elasticIn = (function custom(a, p) { - var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); + function start(elapsed) { + var i, j, n, o; - function elasticIn(t) { - return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p); - } + // If the state is not SCHEDULED, then we previously errored on start. + if (self.state !== SCHEDULED) return stop(); - elasticIn.amplitude = function(a) { return custom(a, p * tau); }; - elasticIn.period = function(p) { return custom(a, p); }; + for (i in schedules) { + o = schedules[i]; + if (o.name !== self.name) continue; - return elasticIn; -})(amplitude, period); + // While this element already has a starting transition during this frame, + // defer starting an interrupting transition until that transition has a + // chance to tick (and possibly end); see d3/d3-transition#54! + if (o.state === STARTED) return timeout$1(start); -var elasticOut = (function custom(a, p) { - var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); + // Interrupt the active transition, if any. + // Dispatch the interrupt event. + if (o.state === RUNNING) { + o.state = ENDED; + o.timer.stop(); + o.on.call("interrupt", node, node.__data__, o.index, o.group); + delete schedules[i]; + } - function elasticOut(t) { - return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p); - } + // Cancel any pre-empted transitions. No interrupt event is dispatched + // because the cancelled transitions never started. Note that this also + // removes this transition from the pending list! + else if (+i < id) { + o.state = ENDED; + o.timer.stop(); + delete schedules[i]; + } + } + + // Defer the first tick to end of the current frame; see d3/d3#1576. + // Note the transition may be canceled after start and before the first tick! + // Note this must be scheduled before the start event; see d3/d3-transition#16! + // Assuming this is successful, subsequent callbacks go straight to tick. + timeout$1(function() { + if (self.state === STARTED) { + self.state = RUNNING; + self.timer.restart(tick, self.delay, self.time); + tick(elapsed); + } + }); + + // Dispatch the start event. + // Note this must be done before the tween are initialized. + self.state = STARTING; + self.on.call("start", node, node.__data__, self.index, self.group); + if (self.state !== STARTING) return; // interrupted + self.state = STARTED; + + // Initialize the tween, deleting null tween. + tween = new Array(n = self.tween.length); + for (i = 0, j = -1; i < n; ++i) { + if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) { + tween[++j] = o; + } + } + tween.length = j + 1; + } - elasticOut.amplitude = function(a) { return custom(a, p * tau); }; - elasticOut.period = function(p) { return custom(a, p); }; + function tick(elapsed) { + var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1), + i = -1, + n = tween.length; - return elasticOut; -})(amplitude, period); + while (++i < n) { + tween[i].call(null, t); + } -var elasticInOut = (function custom(a, p) { - var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); + // Dispatch the end event. + if (self.state === ENDING) { + self.on.call("end", node, node.__data__, self.index, self.group); + stop(); + } + } - function elasticInOut(t) { - return ((t = t * 2 - 1) < 0 - ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p) - : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2; + function stop() { + self.state = ENDED; + self.timer.stop(); + delete schedules[id]; + for (var i in schedules) return; // eslint-disable-line no-unused-vars + delete node.__transition; + } } - elasticInOut.amplitude = function(a) { return custom(a, p * tau); }; - elasticInOut.period = function(p) { return custom(a, p); }; + function interrupt(node, name) { + var schedules = node.__transition, + schedule$$1, + active, + empty = true, + i; - return elasticInOut; -})(amplitude, period); + if (!schedules) return; -var defaultTiming = { - time: null, // Set on use. - delay: 0, - duration: 250, - ease: cubicInOut -}; + name = name == null ? null : name + ""; -function inherit(node, id) { - var timing; - while (!(timing = node.__transition) || !(timing = timing[id])) { - if (!(node = node.parentNode)) { - return defaultTiming.time = now(), defaultTiming; + for (i in schedules) { + if ((schedule$$1 = schedules[i]).name !== name) { empty = false; continue; } + active = schedule$$1.state > STARTING && schedule$$1.state < ENDING; + schedule$$1.state = ENDED; + schedule$$1.timer.stop(); + if (active) schedule$$1.on.call("interrupt", node, node.__data__, schedule$$1.index, schedule$$1.group); + delete schedules[i]; } - } - return timing; -} -function selection_transition(name) { - var id, - timing; + if (empty) delete node.__transition; + } - if (name instanceof Transition) { - id = name._id, name = name._name; - } else { - id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + ""; + function selection_interrupt(name) { + return this.each(function() { + interrupt(this, name); + }); } - for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - schedule(node, name, id, i, group, timing || inherit(node, id)); + function tweenRemove(id, name) { + var tween0, tween1; + return function() { + var schedule$$1 = set$1(this, id), + tween = schedule$$1.tween; + + // If this node shared tween with the previous node, + // just assign the updated shared tween and we’re done! + // Otherwise, copy-on-write. + if (tween !== tween0) { + tween1 = tween0 = tween; + for (var i = 0, n = tween1.length; i < n; ++i) { + if (tween1[i].name === name) { + tween1 = tween1.slice(); + tween1.splice(i, 1); + break; + } + } } - } + + schedule$$1.tween = tween1; + }; } - return new Transition(groups, this._parents, name, id); -} + function tweenFunction(id, name, value) { + var tween0, tween1; + if (typeof value !== "function") throw new Error; + return function() { + var schedule$$1 = set$1(this, id), + tween = schedule$$1.tween; + + // If this node shared tween with the previous node, + // just assign the updated shared tween and we’re done! + // Otherwise, copy-on-write. + if (tween !== tween0) { + tween1 = (tween0 = tween).slice(); + for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) { + if (tween1[i].name === name) { + tween1[i] = t; + break; + } + } + if (i === n) tween1.push(t); + } -selection.prototype.interrupt = selection_interrupt; -selection.prototype.transition = selection_transition; + schedule$$1.tween = tween1; + }; + } -var root$1 = [null]; + function transition_tween(name, value) { + var id = this._id; -function active(node, name) { - var schedules = node.__transition, - schedule$$1, - i; + name += ""; - if (schedules) { - name = name == null ? null : name + ""; - for (i in schedules) { - if ((schedule$$1 = schedules[i]).state > SCHEDULED && schedule$$1.name === name) { - return new Transition([[node]], root$1, name, +i); + if (arguments.length < 2) { + var tween = get$1(this.node(), id).tween; + for (var i = 0, n = tween.length, t; i < n; ++i) { + if ((t = tween[i]).name === name) { + return t.value; + } } + return null; } + + return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value)); } - return null; -} + function tweenValue(transition, name, value) { + var id = transition._id; -function constant$4(x) { - return function() { - return x; - }; -} - -function BrushEvent(target, type, selection) { - this.target = target; - this.type = type; - this.selection = selection; -} - -function nopropagation$1() { - event.stopImmediatePropagation(); -} - -function noevent$1() { - event.preventDefault(); - event.stopImmediatePropagation(); -} - -var MODE_DRAG = {name: "drag"}, - MODE_SPACE = {name: "space"}, - MODE_HANDLE = {name: "handle"}, - MODE_CENTER = {name: "center"}; - -var X = { - name: "x", - handles: ["e", "w"].map(type), - input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; }, - output: function(xy) { return xy && [xy[0][0], xy[1][0]]; } -}; - -var Y = { - name: "y", - handles: ["n", "s"].map(type), - input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; }, - output: function(xy) { return xy && [xy[0][1], xy[1][1]]; } -}; - -var XY = { - name: "xy", - handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type), - input: function(xy) { return xy; }, - output: function(xy) { return xy; } -}; - -var cursors = { - overlay: "crosshair", - selection: "move", - n: "ns-resize", - e: "ew-resize", - s: "ns-resize", - w: "ew-resize", - nw: "nwse-resize", - ne: "nesw-resize", - se: "nwse-resize", - sw: "nesw-resize" -}; - -var flipX = { - e: "w", - w: "e", - nw: "ne", - ne: "nw", - se: "sw", - sw: "se" -}; - -var flipY = { - n: "s", - s: "n", - nw: "sw", - ne: "se", - se: "ne", - sw: "nw" -}; - -var signsX = { - overlay: +1, - selection: +1, - n: null, - e: +1, - s: null, - w: -1, - nw: -1, - ne: +1, - se: +1, - sw: -1 -}; - -var signsY = { - overlay: +1, - selection: +1, - n: -1, - e: null, - s: +1, - w: null, - nw: -1, - ne: -1, - se: +1, - sw: +1 -}; - -function type(t) { - return {type: t}; -} - -// Ignore right-click, since that should open the context menu. -function defaultFilter$1() { - return !event.button; -} - -function defaultExtent() { - var svg = this.ownerSVGElement || this; - return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]]; -} - -// Like d3.local, but with the name “__brush” rather than auto-generated. -function local$1(node) { - while (!node.__brush) if (!(node = node.parentNode)) return; - return node.__brush; -} - -function empty$1(extent) { - return extent[0][0] === extent[1][0] - || extent[0][1] === extent[1][1]; -} - -function brushSelection(node) { - var state = node.__brush; - return state ? state.dim.output(state.selection) : null; -} - -function brushX() { - return brush$1(X); -} - -function brushY() { - return brush$1(Y); -} - -function brush() { - return brush$1(XY); -} - -function brush$1(dim) { - var extent = defaultExtent, - filter = defaultFilter$1, - listeners = dispatch(brush, "start", "brush", "end"), - handleSize = 6, - touchending; - - function brush(group) { - var overlay = group - .property("__brush", initialize) - .selectAll(".overlay") - .data([type("overlay")]); - - overlay.enter().append("rect") - .attr("class", "overlay") - .attr("pointer-events", "all") - .attr("cursor", cursors.overlay) - .merge(overlay) - .each(function() { - var extent = local$1(this).extent; - d3_select(this) - .attr("x", extent[0][0]) - .attr("y", extent[0][1]) - .attr("width", extent[1][0] - extent[0][0]) - .attr("height", extent[1][1] - extent[0][1]); - }); + transition.each(function() { + var schedule$$1 = set$1(this, id); + (schedule$$1.value || (schedule$$1.value = {}))[name] = value.apply(this, arguments); + }); - group.selectAll(".selection") - .data([type("selection")]) - .enter().append("rect") - .attr("class", "selection") - .attr("cursor", cursors.selection) - .attr("fill", "#777") - .attr("fill-opacity", 0.3) - .attr("stroke", "#fff") - .attr("shape-rendering", "crispEdges"); + return function(node) { + return get$1(node, id).value[name]; + }; + } - var handle = group.selectAll(".handle") - .data(dim.handles, function(d) { return d.type; }); + function interpolate$1(a, b) { + var c; + return (typeof b === "number" ? interpolateNumber + : b instanceof color ? interpolateRgb + : (c = color(b)) ? (b = c, interpolateRgb) + : interpolateString)(a, b); + } - handle.exit().remove(); + function attrRemove$1(name) { + return function() { + this.removeAttribute(name); + }; + } - handle.enter().append("rect") - .attr("class", function(d) { return "handle handle--" + d.type; }) - .attr("cursor", function(d) { return cursors[d.type]; }); + function attrRemoveNS$1(fullname) { + return function() { + this.removeAttributeNS(fullname.space, fullname.local); + }; + } - group - .each(redraw) - .attr("fill", "none") - .attr("pointer-events", "all") - .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)") - .on("mousedown.brush touchstart.brush", started); + function attrConstant$1(name, interpolate$$1, value1) { + var value00, + interpolate0; + return function() { + var value0 = this.getAttribute(name); + return value0 === value1 ? null + : value0 === value00 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value1); + }; } - brush.move = function(group, selection$$1) { - if (group.selection) { - group - .on("start.brush", function() { emitter(this, arguments).beforestart().start(); }) - .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); }) - .tween("brush", function() { - var that = this, - state = that.__brush, - emit = emitter(that, arguments), - selection0 = state.selection, - selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(this, arguments) : selection$$1, state.extent), - i = d3_interpolate(selection0, selection1); - - function tween(t) { - state.selection = t === 1 && empty$1(selection1) ? null : i(t); - redraw.call(that); - emit.brush(); - } + function attrConstantNS$1(fullname, interpolate$$1, value1) { + var value00, + interpolate0; + return function() { + var value0 = this.getAttributeNS(fullname.space, fullname.local); + return value0 === value1 ? null + : value0 === value00 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value1); + }; + } - return selection0 && selection1 ? tween : tween(1); - }); - } else { - group - .each(function() { - var that = this, - args = arguments, - state = that.__brush, - selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(that, args) : selection$$1, state.extent), - emit = emitter(that, args).beforestart(); - - interrupt(that); - state.selection = selection1 == null || empty$1(selection1) ? null : selection1; - redraw.call(that); - emit.start().brush().end(); - }); - } - }; + function attrFunction$1(name, interpolate$$1, value) { + var value00, + value10, + interpolate0; + return function() { + var value0, value1 = value(this); + if (value1 == null) return void this.removeAttribute(name); + value0 = this.getAttribute(name); + return value0 === value1 ? null + : value0 === value00 && value1 === value10 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value10 = value1); + }; + } - function redraw() { - var group = d3_select(this), - selection$$1 = local$1(this).selection; + function attrFunctionNS$1(fullname, interpolate$$1, value) { + var value00, + value10, + interpolate0; + return function() { + var value0, value1 = value(this); + if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local); + value0 = this.getAttributeNS(fullname.space, fullname.local); + return value0 === value1 ? null + : value0 === value00 && value1 === value10 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value10 = value1); + }; + } - if (selection$$1) { - group.selectAll(".selection") - .style("display", null) - .attr("x", selection$$1[0][0]) - .attr("y", selection$$1[0][1]) - .attr("width", selection$$1[1][0] - selection$$1[0][0]) - .attr("height", selection$$1[1][1] - selection$$1[0][1]); + function transition_attr(name, value) { + var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate$1; + return this.attrTween(name, typeof value === "function" + ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value)) + : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname) + : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value + "")); + } - group.selectAll(".handle") - .style("display", null) - .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; }) - .attr("y", function(d) { return d.type[0] === "s" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; }) - .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; }) - .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; }); + function attrTweenNS(fullname, value) { + function tween() { + var node = this, i = value.apply(node, arguments); + return i && function(t) { + node.setAttributeNS(fullname.space, fullname.local, i(t)); + }; } + tween._value = value; + return tween; + } - else { - group.selectAll(".selection,.handle") - .style("display", "none") - .attr("x", null) - .attr("y", null) - .attr("width", null) - .attr("height", null); + function attrTween(name, value) { + function tween() { + var node = this, i = value.apply(node, arguments); + return i && function(t) { + node.setAttribute(name, i(t)); + }; } + tween._value = value; + return tween; } - function emitter(that, args) { - return that.__brush.emitter || new Emitter(that, args); + function transition_attrTween(name, value) { + var key = "attr." + name; + if (arguments.length < 2) return (key = this.tween(key)) && key._value; + if (value == null) return this.tween(key, null); + if (typeof value !== "function") throw new Error; + var fullname = namespace(name); + return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value)); } - function Emitter(that, args) { - this.that = that; - this.args = args; - this.state = that.__brush; - this.active = 0; + function delayFunction(id, value) { + return function() { + init(this, id).delay = +value.apply(this, arguments); + }; } - Emitter.prototype = { - beforestart: function() { - if (++this.active === 1) this.state.emitter = this, this.starting = true; - return this; - }, - start: function() { - if (this.starting) this.starting = false, this.emit("start"); - return this; - }, - brush: function() { - this.emit("brush"); - return this; - }, - end: function() { - if (--this.active === 0) delete this.state.emitter, this.emit("end"); - return this; - }, - emit: function(type) { - customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]); - } - }; + function delayConstant(id, value) { + return value = +value, function() { + init(this, id).delay = value; + }; + } - function started() { - if (event.touches) { if (event.changedTouches.length < event.touches.length) return noevent$1(); } - else if (touchending) return; - if (!filter.apply(this, arguments)) return; - - var that = this, - type = event.target.__data__.type, - mode = (event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (event.altKey ? MODE_CENTER : MODE_HANDLE), - signX = dim === Y ? null : signsX[type], - signY = dim === X ? null : signsY[type], - state = local$1(that), - extent = state.extent, - selection$$1 = state.selection, - W = extent[0][0], w0, w1, - N = extent[0][1], n0, n1, - E = extent[1][0], e0, e1, - S = extent[1][1], s0, s1, - dx, - dy, - moving, - shifting = signX && signY && event.shiftKey, - lockX, - lockY, - point0 = d3_mouse(that), - point$$1 = point0, - emit = emitter(that, arguments).beforestart(); - - if (type === "overlay") { - state.selection = selection$$1 = [ - [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]], - [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0] - ]; - } else { - w0 = selection$$1[0][0]; - n0 = selection$$1[0][1]; - e0 = selection$$1[1][0]; - s0 = selection$$1[1][1]; - } + function transition_delay(value) { + var id = this._id; - w1 = w0; - n1 = n0; - e1 = e0; - s1 = s0; + return arguments.length + ? this.each((typeof value === "function" + ? delayFunction + : delayConstant)(id, value)) + : get$1(this.node(), id).delay; + } - var group = d3_select(that) - .attr("pointer-events", "none"); + function durationFunction(id, value) { + return function() { + set$1(this, id).duration = +value.apply(this, arguments); + }; + } - var overlay = group.selectAll(".overlay") - .attr("cursor", cursors[type]); + function durationConstant(id, value) { + return value = +value, function() { + set$1(this, id).duration = value; + }; + } - if (event.touches) { - group - .on("touchmove.brush", moved, true) - .on("touchend.brush touchcancel.brush", ended, true); - } else { - var view = d3_select(event.view) - .on("keydown.brush", keydowned, true) - .on("keyup.brush", keyupped, true) - .on("mousemove.brush", moved, true) - .on("mouseup.brush", ended, true); + function transition_duration(value) { + var id = this._id; - dragDisable(event.view); - } + return arguments.length + ? this.each((typeof value === "function" + ? durationFunction + : durationConstant)(id, value)) + : get$1(this.node(), id).duration; + } - nopropagation$1(); - interrupt(that); - redraw.call(that); - emit.start(); + function easeConstant(id, value) { + if (typeof value !== "function") throw new Error; + return function() { + set$1(this, id).ease = value; + }; + } - function moved() { - var point1 = d3_mouse(that); - if (shifting && !lockX && !lockY) { - if (Math.abs(point1[0] - point$$1[0]) > Math.abs(point1[1] - point$$1[1])) lockY = true; - else lockX = true; - } - point$$1 = point1; - moving = true; - noevent$1(); - move(); - } + function transition_ease(value) { + var id = this._id; - function move() { - var t; + return arguments.length + ? this.each(easeConstant(id, value)) + : get$1(this.node(), id).ease; + } - dx = point$$1[0] - point0[0]; - dy = point$$1[1] - point0[1]; + function transition_filter(match) { + if (typeof match !== "function") match = matcher$1(match); - switch (mode) { - case MODE_SPACE: - case MODE_DRAG: { - if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; - if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; - break; - } - case MODE_HANDLE: { - if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0; - else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx; - if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0; - else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy; - break; - } - case MODE_CENTER: { - if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX)); - if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY)); - break; + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { + if ((node = group[i]) && match.call(node, node.__data__, i, group)) { + subgroup.push(node); } } + } - if (e1 < w1) { - signX *= -1; - t = w0, w0 = e0, e0 = t; - t = w1, w1 = e1, e1 = t; - if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]); - } - - if (s1 < n1) { - signY *= -1; - t = n0, n0 = s0, s0 = t; - t = n1, n1 = s1, s1 = t; - if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]); - } + return new Transition(subgroups, this._parents, this._name, this._id); + } - if (state.selection) selection$$1 = state.selection; // May be set by brush.move! - if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0]; - if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1]; + function transition_merge(transition$$1) { + if (transition$$1._id !== this._id) throw new Error; - if (selection$$1[0][0] !== w1 - || selection$$1[0][1] !== n1 - || selection$$1[1][0] !== e1 - || selection$$1[1][1] !== s1) { - state.selection = [[w1, n1], [e1, s1]]; - redraw.call(that); - emit.brush(); + for (var groups0 = this._groups, groups1 = transition$$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { + for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group0[i] || group1[i]) { + merge[i] = node; + } } } - function ended() { - nopropagation$1(); - if (event.touches) { - if (event.touches.length) return; - if (touchending) clearTimeout(touchending); - touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! - group.on("touchmove.brush touchend.brush touchcancel.brush", null); - } else { - yesdrag(event.view, moving); - view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null); - } - group.attr("pointer-events", "all"); - overlay.attr("cursor", cursors.overlay); - if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)! - if (empty$1(selection$$1)) state.selection = null, redraw.call(that); - emit.end(); + for (; j < m0; ++j) { + merges[j] = groups0[j]; } - function keydowned() { - switch (event.keyCode) { - case 16: { // SHIFT - shifting = signX && signY; - break; - } - case 18: { // ALT - if (mode === MODE_HANDLE) { - if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; - if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; - mode = MODE_CENTER; - move(); - } - break; - } - case 32: { // SPACE; takes priority over ALT - if (mode === MODE_HANDLE || mode === MODE_CENTER) { - if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx; - if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy; - mode = MODE_SPACE; - overlay.attr("cursor", cursors.selection); - move(); - } - break; + return new Transition(merges, this._parents, this._name, this._id); + } + + function start(name) { + return (name + "").trim().split(/^|\s+/).every(function(t) { + var i = t.indexOf("."); + if (i >= 0) t = t.slice(0, i); + return !t || t === "start"; + }); + } + + function onFunction(id, name, listener) { + var on0, on1, sit = start(name) ? init : set$1; + return function() { + var schedule$$1 = sit(this, id), + on = schedule$$1.on; + + // If this node shared a dispatch with the previous node, + // just assign the updated shared dispatch and we’re done! + // Otherwise, copy-on-write. + if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener); + + schedule$$1.on = on1; + }; + } + + function transition_on(name, listener) { + var id = this._id; + + return arguments.length < 2 + ? get$1(this.node(), id).on.on(name) + : this.each(onFunction(id, name, listener)); + } + + function removeFunction(id) { + return function() { + var parent = this.parentNode; + for (var i in this.__transition) if (+i !== id) return; + if (parent) parent.removeChild(this); + }; + } + + function transition_remove() { + return this.on("end.remove", removeFunction(this._id)); + } + + function transition_select(select$$1) { + var name = this._name, + id = this._id; + + if (typeof select$$1 !== "function") select$$1 = selector(select$$1); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { + if ((node = group[i]) && (subnode = select$$1.call(node, node.__data__, i, group))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + subgroup[i] = subnode; + schedule(subgroup[i], name, id, i, subgroup, get$1(node, id)); } - default: return; } - noevent$1(); } - function keyupped() { - switch (event.keyCode) { - case 16: { // SHIFT - if (shifting) { - lockX = lockY = shifting = false; - move(); - } - break; - } - case 18: { // ALT - if (mode === MODE_CENTER) { - if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; - if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; - mode = MODE_HANDLE; - move(); - } - break; - } - case 32: { // SPACE - if (mode === MODE_SPACE) { - if (event.altKey) { - if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; - if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; - mode = MODE_CENTER; - } else { - if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; - if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; - mode = MODE_HANDLE; + return new Transition(subgroups, this._parents, name, id); + } + + function transition_selectAll(select$$1) { + var name = this._name, + id = this._id; + + if (typeof select$$1 !== "function") select$$1 = selectorAll(select$$1); + + for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + for (var children = select$$1.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) { + if (child = children[k]) { + schedule(child, name, id, k, children, inherit); } - overlay.attr("cursor", cursors[type]); - move(); } - break; + subgroups.push(children); + parents.push(node); } - default: return; } - noevent$1(); } - } - function initialize() { - var state = this.__brush || {selection: null}; - state.extent = extent.apply(this, arguments); - state.dim = dim; - return state; + return new Transition(subgroups, parents, name, id); } - brush.extent = function(_) { - return arguments.length ? (extent = typeof _ === "function" ? _ : constant$4([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent; - }; + var Selection$1 = selection.prototype.constructor; - brush.filter = function(_) { - return arguments.length ? (filter = typeof _ === "function" ? _ : constant$4(!!_), brush) : filter; - }; + function transition_selection() { + return new Selection$1(this._groups, this._parents); + } - brush.handleSize = function(_) { - return arguments.length ? (handleSize = +_, brush) : handleSize; - }; + function styleRemove$1(name, interpolate$$1) { + var value00, + value10, + interpolate0; + return function() { + var value0 = styleValue(this, name), + value1 = (this.style.removeProperty(name), styleValue(this, name)); + return value0 === value1 ? null + : value0 === value00 && value1 === value10 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value10 = value1); + }; + } - brush.on = function() { - var value = listeners.on.apply(listeners, arguments); - return value === listeners ? brush : value; - }; + function styleRemoveEnd(name) { + return function() { + this.style.removeProperty(name); + }; + } - return brush; -} - -var cos = Math.cos; -var sin = Math.sin; -var pi$1 = Math.PI; -var halfPi$1 = pi$1 / 2; -var tau$1 = pi$1 * 2; -var max$1 = Math.max; - -function compareValue(compare) { - return function(a, b) { - return compare( - a.source.value + a.target.value, - b.source.value + b.target.value - ); - }; -} - -function chord() { - var padAngle = 0, - sortGroups = null, - sortSubgroups = null, - sortChords = null; - - function chord(matrix) { - var n = matrix.length, - groupSums = [], - groupIndex = d3_range(n), - subgroupIndex = [], - chords = [], - groups = chords.groups = new Array(n), - subgroups = new Array(n * n), - k, - x, - x0, - dx, - i, - j; + function styleConstant$1(name, interpolate$$1, value1) { + var value00, + interpolate0; + return function() { + var value0 = styleValue(this, name); + return value0 === value1 ? null + : value0 === value00 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value1); + }; + } - // Compute the sum. - k = 0, i = -1; while (++i < n) { - x = 0, j = -1; while (++j < n) { - x += matrix[i][j]; - } - groupSums.push(x); - subgroupIndex.push(d3_range(n)); - k += x; + function styleFunction$1(name, interpolate$$1, value) { + var value00, + value10, + interpolate0; + return function() { + var value0 = styleValue(this, name), + value1 = value(this); + if (value1 == null) value1 = (this.style.removeProperty(name), styleValue(this, name)); + return value0 === value1 ? null + : value0 === value00 && value1 === value10 ? interpolate0 + : interpolate0 = interpolate$$1(value00 = value0, value10 = value1); + }; + } + + function transition_style(name, value, priority) { + var i = (name += "") === "transform" ? interpolateTransformCss : interpolate$1; + return value == null ? this + .styleTween(name, styleRemove$1(name, i)) + .on("end.style." + name, styleRemoveEnd(name)) + : this.styleTween(name, typeof value === "function" + ? styleFunction$1(name, i, tweenValue(this, "style." + name, value)) + : styleConstant$1(name, i, value + ""), priority); + } + + function styleTween(name, value, priority) { + function tween() { + var node = this, i = value.apply(node, arguments); + return i && function(t) { + node.style.setProperty(name, i(t), priority); + }; } + tween._value = value; + return tween; + } - // Sort groups… - if (sortGroups) groupIndex.sort(function(a, b) { - return sortGroups(groupSums[a], groupSums[b]); - }); + function transition_styleTween(name, value, priority) { + var key = "style." + (name += ""); + if (arguments.length < 2) return (key = this.tween(key)) && key._value; + if (value == null) return this.tween(key, null); + if (typeof value !== "function") throw new Error; + return this.tween(key, styleTween(name, value, priority == null ? "" : priority)); + } - // Sort subgroups… - if (sortSubgroups) subgroupIndex.forEach(function(d, i) { - d.sort(function(a, b) { - return sortSubgroups(matrix[i][a], matrix[i][b]); - }); - }); + function textConstant$1(value) { + return function() { + this.textContent = value; + }; + } - // Convert the sum to scaling factor for [0, 2pi]. - // TODO Allow start and end angle to be specified? - // TODO Allow padding to be specified as percentage? - k = max$1(0, tau$1 - padAngle * n) / k; - dx = k ? padAngle : tau$1 / n; - - // Compute the start and end angle for each group and subgroup. - // Note: Opera has a bug reordering object literal properties! - x = 0, i = -1; while (++i < n) { - x0 = x, j = -1; while (++j < n) { - var di = groupIndex[i], - dj = subgroupIndex[di][j], - v = matrix[di][dj], - a0 = x, - a1 = x += v * k; - subgroups[dj * n + di] = { - index: di, - subindex: dj, - startAngle: a0, - endAngle: a1, - value: v - }; - } - groups[di] = { - index: di, - startAngle: x0, - endAngle: x, - value: groupSums[di] - }; - x += dx; - } + function textFunction$1(value) { + return function() { + var value1 = value(this); + this.textContent = value1 == null ? "" : value1; + }; + } + + function transition_text(value) { + return this.tween("text", typeof value === "function" + ? textFunction$1(tweenValue(this, "text", value)) + : textConstant$1(value == null ? "" : value + "")); + } + + function transition_transition() { + var name = this._name, + id0 = this._id, + id1 = newId(); - // Generate chords for each (non-empty) subgroup-subgroup link. - i = -1; while (++i < n) { - j = i - 1; while (++j < n) { - var source = subgroups[j * n + i], - target = subgroups[i * n + j]; - if (source.value || target.value) { - chords.push(source.value < target.value - ? {source: target, target: source} - : {source: source, target: target}); + for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + var inherit = get$1(node, id0); + schedule(node, name, id1, i, group, { + time: inherit.time + inherit.delay + inherit.duration, + delay: 0, + duration: inherit.duration, + ease: inherit.ease + }); } } } - return sortChords ? chords.sort(sortChords) : chords; + return new Transition(groups, this._parents, name, id1); } - chord.padAngle = function(_) { - return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle; - }; - - chord.sortGroups = function(_) { - return arguments.length ? (sortGroups = _, chord) : sortGroups; - }; + var id = 0; - chord.sortSubgroups = function(_) { - return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups; - }; + function Transition(groups, parents, name, id) { + this._groups = groups; + this._parents = parents; + this._name = name; + this._id = id; + } - chord.sortChords = function(_) { - return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._; - }; + function transition(name) { + return selection().transition(name); + } - return chord; -} + function newId() { + return ++id; + } -var slice$2 = Array.prototype.slice; + var selection_prototype = selection.prototype; -function constant$5(x) { - return function() { - return x; + Transition.prototype = transition.prototype = { + constructor: Transition, + select: transition_select, + selectAll: transition_selectAll, + filter: transition_filter, + merge: transition_merge, + selection: transition_selection, + transition: transition_transition, + call: selection_prototype.call, + nodes: selection_prototype.nodes, + node: selection_prototype.node, + size: selection_prototype.size, + empty: selection_prototype.empty, + each: selection_prototype.each, + on: transition_on, + attr: transition_attr, + attrTween: transition_attrTween, + style: transition_style, + styleTween: transition_styleTween, + text: transition_text, + remove: transition_remove, + tween: transition_tween, + delay: transition_delay, + duration: transition_duration, + ease: transition_ease }; -} - -var pi$2 = Math.PI, - tau$2 = 2 * pi$2, - epsilon$1 = 1e-6, - tauEpsilon = tau$2 - epsilon$1; - -function Path() { - this._x0 = this._y0 = // start of current subpath - this._x1 = this._y1 = null; // end of current subpath - this._ = ""; -} - -function path() { - return new Path; -} - -Path.prototype = path.prototype = { - constructor: Path, - moveTo: function(x, y) { - this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); - }, - closePath: function() { - if (this._x1 !== null) { - this._x1 = this._x0, this._y1 = this._y0; - this._ += "Z"; - } - }, - lineTo: function(x, y) { - this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); - }, - quadraticCurveTo: function(x1, y1, x, y) { - this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); - }, - bezierCurveTo: function(x1, y1, x2, y2, x, y) { - this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); - }, - arcTo: function(x1, y1, x2, y2, r) { - x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; - var x0 = this._x1, - y0 = this._y1, - x21 = x2 - x1, - y21 = y2 - y1, - x01 = x0 - x1, - y01 = y0 - y1, - l01_2 = x01 * x01 + y01 * y01; - // Is the radius negative? Error. - if (r < 0) throw new Error("negative radius: " + r); + function linear$1(t) { + return +t; + } - // Is this path empty? Move to (x1,y1). - if (this._x1 === null) { - this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); - } + function quadIn(t) { + return t * t; + } - // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. - else if (!(l01_2 > epsilon$1)) {} + function quadOut(t) { + return t * (2 - t); + } - // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? - // Equivalently, is (x1,y1) coincident with (x2,y2)? - // Or, is the radius zero? Line to (x1,y1). - else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$1) || !r) { - this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); - } + function quadInOut(t) { + return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2; + } - // Otherwise, draw an arc! - else { - var x20 = x2 - x0, - y20 = y2 - y0, - l21_2 = x21 * x21 + y21 * y21, - l20_2 = x20 * x20 + y20 * y20, - l21 = Math.sqrt(l21_2), - l01 = Math.sqrt(l01_2), - l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), - t01 = l / l01, - t21 = l / l21; + function cubicIn(t) { + return t * t * t; + } - // If the start tangent is not coincident with (x0,y0), line to. - if (Math.abs(t01 - 1) > epsilon$1) { - this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); - } + function cubicOut(t) { + return --t * t * t + 1; + } - this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); - } - }, - arc: function(x, y, r, a0, a1, ccw) { - x = +x, y = +y, r = +r; - var dx = r * Math.cos(a0), - dy = r * Math.sin(a0), - x0 = x + dx, - y0 = y + dy, - cw = 1 ^ ccw, - da = ccw ? a0 - a1 : a1 - a0; + function cubicInOut(t) { + return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2; + } - // Is the radius negative? Error. - if (r < 0) throw new Error("negative radius: " + r); + var exponent = 3; - // Is this path empty? Move to (x0,y0). - if (this._x1 === null) { - this._ += "M" + x0 + "," + y0; - } + var polyIn = (function custom(e) { + e = +e; - // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). - else if (Math.abs(this._x1 - x0) > epsilon$1 || Math.abs(this._y1 - y0) > epsilon$1) { - this._ += "L" + x0 + "," + y0; + function polyIn(t) { + return Math.pow(t, e); } - // Is this arc empty? We’re done. - if (!r) return; + polyIn.exponent = custom; - // Does the angle go the wrong way? Flip the direction. - if (da < 0) da = da % tau$2 + tau$2; + return polyIn; + })(exponent); - // Is this a complete circle? Draw two arcs to complete the circle. - if (da > tauEpsilon) { - this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); - } + var polyOut = (function custom(e) { + e = +e; - // Is this arc non-empty? Draw an arc! - else if (da > epsilon$1) { - this._ += "A" + r + "," + r + ",0," + (+(da >= pi$2)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); + function polyOut(t) { + return 1 - Math.pow(1 - t, e); } - }, - rect: function(x, y, w, h) { - this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; - }, - toString: function() { - return this._; - } -}; -function defaultSource(d) { - return d.source; -} + polyOut.exponent = custom; -function defaultTarget(d) { - return d.target; -} + return polyOut; + })(exponent); -function defaultRadius(d) { - return d.radius; -} + var polyInOut = (function custom(e) { + e = +e; -function defaultStartAngle(d) { - return d.startAngle; -} - -function defaultEndAngle(d) { - return d.endAngle; -} + function polyInOut(t) { + return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2; + } -function ribbon() { - var source = defaultSource, - target = defaultTarget, - radius = defaultRadius, - startAngle = defaultStartAngle, - endAngle = defaultEndAngle, - context = null; + polyInOut.exponent = custom; - function ribbon() { - var buffer, - argv = slice$2.call(arguments), - s = source.apply(this, argv), - t = target.apply(this, argv), - sr = +radius.apply(this, (argv[0] = s, argv)), - sa0 = startAngle.apply(this, argv) - halfPi$1, - sa1 = endAngle.apply(this, argv) - halfPi$1, - sx0 = sr * cos(sa0), - sy0 = sr * sin(sa0), - tr = +radius.apply(this, (argv[0] = t, argv)), - ta0 = startAngle.apply(this, argv) - halfPi$1, - ta1 = endAngle.apply(this, argv) - halfPi$1; - - if (!context) context = buffer = path(); - - context.moveTo(sx0, sy0); - context.arc(0, 0, sr, sa0, sa1); - if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr? - context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0)); - context.arc(0, 0, tr, ta0, ta1); - } - context.quadraticCurveTo(0, 0, sx0, sy0); - context.closePath(); - - if (buffer) return context = null, buffer + "" || null; - } - - ribbon.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : constant$5(+_), ribbon) : radius; - }; + return polyInOut; + })(exponent); - ribbon.startAngle = function(_) { - return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : startAngle; - }; + var pi = Math.PI, + halfPi = pi / 2; - ribbon.endAngle = function(_) { - return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : endAngle; - }; + function sinIn(t) { + return 1 - Math.cos(t * halfPi); + } - ribbon.source = function(_) { - return arguments.length ? (source = _, ribbon) : source; - }; + function sinOut(t) { + return Math.sin(t * halfPi); + } - ribbon.target = function(_) { - return arguments.length ? (target = _, ribbon) : target; - }; + function sinInOut(t) { + return (1 - Math.cos(pi * t)) / 2; + } - ribbon.context = function(_) { - return arguments.length ? (context = _ == null ? null : _, ribbon) : context; - }; + function expIn(t) { + return Math.pow(2, 10 * t - 10); + } - return ribbon; -} + function expOut(t) { + return 1 - Math.pow(2, -10 * t); + } -var prefix = "$"; + function expInOut(t) { + return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2; + } -function Map() {} + function circleIn(t) { + return 1 - Math.sqrt(1 - t * t); + } -Map.prototype = map$1.prototype = { - constructor: Map, - has: function(key) { - return (prefix + key) in this; - }, - get: function(key) { - return this[prefix + key]; - }, - set: function(key, value) { - this[prefix + key] = value; - return this; - }, - remove: function(key) { - var property = prefix + key; - return property in this && delete this[property]; - }, - clear: function() { - for (var property in this) if (property[0] === prefix) delete this[property]; - }, - keys: function() { - var keys = []; - for (var property in this) if (property[0] === prefix) keys.push(property.slice(1)); - return keys; - }, - values: function() { - var values = []; - for (var property in this) if (property[0] === prefix) values.push(this[property]); - return values; - }, - entries: function() { - var entries = []; - for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]}); - return entries; - }, - size: function() { - var size = 0; - for (var property in this) if (property[0] === prefix) ++size; - return size; - }, - empty: function() { - for (var property in this) if (property[0] === prefix) return false; - return true; - }, - each: function(f) { - for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this); + function circleOut(t) { + return Math.sqrt(1 - --t * t); } -}; -function map$1(object, f) { - var map = new Map; + function circleInOut(t) { + return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2; + } - // Copy constructor. - if (object instanceof Map) object.each(function(value, key) { map.set(key, value); }); + var b1 = 4 / 11, + b2 = 6 / 11, + b3 = 8 / 11, + b4 = 3 / 4, + b5 = 9 / 11, + b6 = 10 / 11, + b7 = 15 / 16, + b8 = 21 / 22, + b9 = 63 / 64, + b0 = 1 / b1 / b1; - // Index array by numeric index or specified key function. - else if (Array.isArray(object)) { - var i = -1, - n = object.length, - o; + function bounceIn(t) { + return 1 - bounceOut(1 - t); + } - if (f == null) while (++i < n) map.set(i, object[i]); - else while (++i < n) map.set(f(o = object[i], i, object), o); + function bounceOut(t) { + return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9; } - // Convert object to map. - else if (object) for (var key in object) map.set(key, object[key]); + function bounceInOut(t) { + return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2; + } - return map; -} + var overshoot = 1.70158; -function nest() { - var keys = [], - sortKeys = [], - sortValues, - rollup, - nest; + var backIn = (function custom(s) { + s = +s; - function apply(array, depth, createResult, setResult) { - if (depth >= keys.length) { - if (sortValues != null) array.sort(sortValues); - return rollup != null ? rollup(array) : array; + function backIn(t) { + return t * t * ((s + 1) * t - s); } - var i = -1, - n = array.length, - key = keys[depth++], - keyValue, - value, - valuesByKey = map$1(), - values, - result = createResult(); + backIn.overshoot = custom; - while (++i < n) { - if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) { - values.push(value); - } else { - valuesByKey.set(keyValue, [value]); - } + return backIn; + })(overshoot); + + var backOut = (function custom(s) { + s = +s; + + function backOut(t) { + return --t * t * ((s + 1) * t + s) + 1; } - valuesByKey.each(function(values, key) { - setResult(result, key, apply(values, depth, createResult, setResult)); - }); + backOut.overshoot = custom; - return result; - } + return backOut; + })(overshoot); - function entries(map, depth) { - if (++depth > keys.length) return map; - var array, sortKey = sortKeys[depth - 1]; - if (rollup != null && depth >= keys.length) array = map.entries(); - else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); }); - return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array; - } + var backInOut = (function custom(s) { + s = +s; - return nest = { - object: function(array) { return apply(array, 0, createObject, setObject); }, - map: function(array) { return apply(array, 0, createMap, setMap); }, - entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); }, - key: function(d) { keys.push(d); return nest; }, - sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; }, - sortValues: function(order) { sortValues = order; return nest; }, - rollup: function(f) { rollup = f; return nest; } - }; -} + function backInOut(t) { + return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2; + } -function createObject() { - return {}; -} + backInOut.overshoot = custom; -function setObject(object, key, value) { - object[key] = value; -} + return backInOut; + })(overshoot); -function createMap() { - return map$1(); -} + var tau = 2 * Math.PI, + amplitude = 1, + period = 0.3; -function setMap(map, key, value) { - map.set(key, value); -} + var elasticIn = (function custom(a, p) { + var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); -function Set() {} + function elasticIn(t) { + return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p); + } -var proto = map$1.prototype; + elasticIn.amplitude = function(a) { return custom(a, p * tau); }; + elasticIn.period = function(p) { return custom(a, p); }; -Set.prototype = set$2.prototype = { - constructor: Set, - has: proto.has, - add: function(value) { - value += ""; - this[prefix + value] = value; - return this; - }, - remove: proto.remove, - clear: proto.clear, - values: proto.keys, - size: proto.size, - empty: proto.empty, - each: proto.each -}; - -function set$2(object, f) { - var set = new Set; - - // Copy constructor. - if (object instanceof Set) object.each(function(value) { set.add(value); }); - - // Otherwise, assume it’s an array. - else if (object) { - var i = -1, n = object.length; - if (f == null) while (++i < n) set.add(object[i]); - else while (++i < n) set.add(f(object[i], i, object)); - } - - return set; -} - -function keys(map) { - var keys = []; - for (var key in map) keys.push(key); - return keys; -} - -function values(map) { - var values = []; - for (var key in map) values.push(map[key]); - return values; -} - -function entries(map) { - var entries = []; - for (var key in map) entries.push({key: key, value: map[key]}); - return entries; -} - -var EOL = {}, - EOF = {}, - QUOTE = 34, - NEWLINE = 10, - RETURN = 13; - -function objectConverter(columns) { - return new Function("d", "return {" + columns.map(function(name, i) { - return JSON.stringify(name) + ": d[" + i + "]"; - }).join(",") + "}"); -} - -function customConverter(columns, f) { - var object = objectConverter(columns); - return function(row, i) { - return f(object(row), i, columns); - }; -} + return elasticIn; + })(amplitude, period); -// Compute unique columns in order of discovery. -function inferColumns(rows) { - var columnSet = Object.create(null), - columns = []; + var elasticOut = (function custom(a, p) { + var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); - rows.forEach(function(row) { - for (var column in row) { - if (!(column in columnSet)) { - columns.push(columnSet[column] = column); - } + function elasticOut(t) { + return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p); } - }); - return columns; -} + elasticOut.amplitude = function(a) { return custom(a, p * tau); }; + elasticOut.period = function(p) { return custom(a, p); }; -function dsv(delimiter) { - var reFormat = new RegExp("[\"" + delimiter + "\n\r]"), - DELIMITER = delimiter.charCodeAt(0); + return elasticOut; + })(amplitude, period); - function parse(text, f) { - var convert, columns, rows = parseRows(text, function(row, i) { - if (convert) return convert(row, i - 1); - columns = row, convert = f ? customConverter(row, f) : objectConverter(row); - }); - rows.columns = columns || []; - return rows; - } + var elasticInOut = (function custom(a, p) { + var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); - function parseRows(text, f) { - var rows = [], // output rows - N = text.length, - I = 0, // current character index - n = 0, // current line number - t, // current token - eof = N <= 0, // current token followed by EOF? - eol = false; // current token followed by EOL? + function elasticInOut(t) { + return ((t = t * 2 - 1) < 0 + ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p) + : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2; + } - // Strip the trailing newline. - if (text.charCodeAt(N - 1) === NEWLINE) --N; - if (text.charCodeAt(N - 1) === RETURN) --N; + elasticInOut.amplitude = function(a) { return custom(a, p * tau); }; + elasticInOut.period = function(p) { return custom(a, p); }; - function token() { - if (eof) return EOF; - if (eol) return eol = false, EOL; + return elasticInOut; + })(amplitude, period); - // Unescape quotes. - var i, j = I, c; - if (text.charCodeAt(j) === QUOTE) { - while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE); - if ((i = I) >= N) eof = true; - else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true; - else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } - return text.slice(j + 1, i - 1).replace(/""/g, "\""); - } + var defaultTiming = { + time: null, // Set on use. + delay: 0, + duration: 250, + ease: cubicInOut + }; - // Find next delimiter or newline. - while (I < N) { - if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true; - else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } - else if (c !== DELIMITER) continue; - return text.slice(j, i); + function inherit(node, id) { + var timing; + while (!(timing = node.__transition) || !(timing = timing[id])) { + if (!(node = node.parentNode)) { + return defaultTiming.time = now(), defaultTiming; } + } + return timing; + } - // Return last token before EOF. - return eof = true, text.slice(j, N); + function selection_transition(name) { + var id, + timing; + + if (name instanceof Transition) { + id = name._id, name = name._name; + } else { + id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + ""; } - while ((t = token()) !== EOF) { - var row = []; - while (t !== EOL && t !== EOF) row.push(t), t = token(); - if (f && (row = f(row, n++)) == null) continue; - rows.push(row); + for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + schedule(node, name, id, i, group, timing || inherit(node, id)); + } + } } - return rows; + return new Transition(groups, this._parents, name, id); } - function format(rows, columns) { - if (columns == null) columns = inferColumns(rows); - return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) { - return columns.map(function(column) { - return formatValue(row[column]); - }).join(delimiter); - })).join("\n"); - } + selection.prototype.interrupt = selection_interrupt; + selection.prototype.transition = selection_transition; - function formatRows(rows) { - return rows.map(formatRow).join("\n"); - } + var root$1 = [null]; - function formatRow(row) { - return row.map(formatValue).join(delimiter); - } + function active(node, name) { + var schedules = node.__transition, + schedule$$1, + i; + + if (schedules) { + name = name == null ? null : name + ""; + for (i in schedules) { + if ((schedule$$1 = schedules[i]).state > SCHEDULED && schedule$$1.name === name) { + return new Transition([[node]], root$1, name, +i); + } + } + } - function formatValue(text) { - return text == null ? "" - : reFormat.test(text += "") ? "\"" + text.replace(/"/g, "\"\"") + "\"" - : text; + return null; } - return { - parse: parse, - parseRows: parseRows, - format: format, - formatRows: formatRows - }; -} + function constant$4(x) { + return function() { + return x; + }; + } -var csv = dsv(","); + function BrushEvent(target, type, selection) { + this.target = target; + this.type = type; + this.selection = selection; + } -var csvParse = csv.parse; -var csvParseRows = csv.parseRows; -var csvFormat = csv.format; -var csvFormatRows = csv.formatRows; + function nopropagation$1() { + event.stopImmediatePropagation(); + } -var tsv = dsv("\t"); + function noevent$1() { + event.preventDefault(); + event.stopImmediatePropagation(); + } -var tsvParse = tsv.parse; -var tsvParseRows = tsv.parseRows; -var tsvFormat = tsv.format; -var tsvFormatRows = tsv.formatRows; + var MODE_DRAG = {name: "drag"}, + MODE_SPACE = {name: "space"}, + MODE_HANDLE = {name: "handle"}, + MODE_CENTER = {name: "center"}; -function center$1(x, y) { - var nodes; + var X = { + name: "x", + handles: ["e", "w"].map(type), + input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; }, + output: function(xy) { return xy && [xy[0][0], xy[1][0]]; } + }; - if (x == null) x = 0; - if (y == null) y = 0; + var Y = { + name: "y", + handles: ["n", "s"].map(type), + input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; }, + output: function(xy) { return xy && [xy[0][1], xy[1][1]]; } + }; - function force() { - var i, - n = nodes.length, - node, - sx = 0, - sy = 0; + var XY = { + name: "xy", + handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type), + input: function(xy) { return xy; }, + output: function(xy) { return xy; } + }; - for (i = 0; i < n; ++i) { - node = nodes[i], sx += node.x, sy += node.y; - } + var cursors = { + overlay: "crosshair", + selection: "move", + n: "ns-resize", + e: "ew-resize", + s: "ns-resize", + w: "ew-resize", + nw: "nwse-resize", + ne: "nesw-resize", + se: "nwse-resize", + sw: "nesw-resize" + }; - for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) { - node = nodes[i], node.x -= sx, node.y -= sy; - } - } + var flipX = { + e: "w", + w: "e", + nw: "ne", + ne: "nw", + se: "sw", + sw: "se" + }; - force.initialize = function(_) { - nodes = _; + var flipY = { + n: "s", + s: "n", + nw: "sw", + ne: "se", + se: "ne", + sw: "nw" }; - force.x = function(_) { - return arguments.length ? (x = +_, force) : x; + var signsX = { + overlay: +1, + selection: +1, + n: null, + e: +1, + s: null, + w: -1, + nw: -1, + ne: +1, + se: +1, + sw: -1 }; - force.y = function(_) { - return arguments.length ? (y = +_, force) : y; + var signsY = { + overlay: +1, + selection: +1, + n: -1, + e: null, + s: +1, + w: null, + nw: -1, + ne: -1, + se: +1, + sw: +1 }; - return force; -} + function type(t) { + return {type: t}; + } -function constant$6(x) { - return function() { - return x; - }; -} - -function jiggle() { - return (Math.random() - 0.5) * 1e-6; -} - -function tree_add(d) { - var x = +this._x.call(null, d), - y = +this._y.call(null, d); - return add(this.cover(x, y), x, y, d); -} - -function add(tree, x, y, d) { - if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points - - var parent, - node = tree._root, - leaf = {data: d}, - x0 = tree._x0, - y0 = tree._y0, - x1 = tree._x1, - y1 = tree._y1, - xm, - ym, - xp, - yp, - right, - bottom, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return tree._root = leaf, tree; - - // Find the existing leaf for the new point, or add it. - while (node.length) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; - } - - // Is the new point is exactly coincident with the existing point? - xp = +tree._x.call(null, node.data); - yp = +tree._y.call(null, node.data); - if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; - - // Otherwise, split the leaf node until the old and new point are separated. - do { - parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); - return parent[j] = node, parent[i] = leaf, tree; -} - -function addAll(data) { - var d, i, n = data.length, - x, - y, - xz = new Array(n), - yz = new Array(n), - x0 = Infinity, - y0 = Infinity, - x1 = -Infinity, - y1 = -Infinity; - - // Compute the points and their extent. - for (i = 0; i < n; ++i) { - if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; - xz[i] = x; - yz[i] = y; - if (x < x0) x0 = x; - if (x > x1) x1 = x; - if (y < y0) y0 = y; - if (y > y1) y1 = y; + // Ignore right-click, since that should open the context menu. + function defaultFilter$1() { + return !event.button; } - // If there were no (valid) points, inherit the existing extent. - if (x1 < x0) x0 = this._x0, x1 = this._x1; - if (y1 < y0) y0 = this._y0, y1 = this._y1; + function defaultExtent() { + var svg = this.ownerSVGElement || this; + return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]]; + } - // Expand the tree to cover the new points. - this.cover(x0, y0).cover(x1, y1); + // Like d3.local, but with the name “__brush” rather than auto-generated. + function local$1(node) { + while (!node.__brush) if (!(node = node.parentNode)) return; + return node.__brush; + } - // Add the new points. - for (i = 0; i < n; ++i) { - add(this, xz[i], yz[i], data[i]); + function empty$1(extent) { + return extent[0][0] === extent[1][0] + || extent[0][1] === extent[1][1]; } - return this; -} + function brushSelection(node) { + var state = node.__brush; + return state ? state.dim.output(state.selection) : null; + } -function tree_cover(x, y) { - if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points + function brushX() { + return brush$1(X); + } - var x0 = this._x0, - y0 = this._y0, - x1 = this._x1, - y1 = this._y1; + function brushY() { + return brush$1(Y); + } - // If the quadtree has no extent, initialize them. - // Integer extent are necessary so that if we later double the extent, - // the existing quadrant boundaries don’t change due to floating point error! - if (isNaN(x0)) { - x1 = (x0 = Math.floor(x)) + 1; - y1 = (y0 = Math.floor(y)) + 1; + function brush() { + return brush$1(XY); } - // Otherwise, double repeatedly to cover. - else if (x0 > x || x > x1 || y0 > y || y > y1) { - var z = x1 - x0, - node = this._root, - parent, - i; + function brush$1(dim) { + var extent = defaultExtent, + filter = defaultFilter$1, + listeners = dispatch(brush, "start", "brush", "end"), + handleSize = 6, + touchending; - switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) { - case 0: { - do parent = new Array(4), parent[i] = node, node = parent; - while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1); - break; - } - case 1: { - do parent = new Array(4), parent[i] = node, node = parent; - while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1); - break; - } - case 2: { - do parent = new Array(4), parent[i] = node, node = parent; - while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y); - break; - } - case 3: { - do parent = new Array(4), parent[i] = node, node = parent; - while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y); - break; - } - } + function brush(group) { + var overlay = group + .property("__brush", initialize) + .selectAll(".overlay") + .data([type("overlay")]); - if (this._root && this._root.length) this._root = node; - } + overlay.enter().append("rect") + .attr("class", "overlay") + .attr("pointer-events", "all") + .attr("cursor", cursors.overlay) + .merge(overlay) + .each(function() { + var extent = local$1(this).extent; + select(this) + .attr("x", extent[0][0]) + .attr("y", extent[0][1]) + .attr("width", extent[1][0] - extent[0][0]) + .attr("height", extent[1][1] - extent[0][1]); + }); - // If the quadtree covers the point already, just return. - else return this; + group.selectAll(".selection") + .data([type("selection")]) + .enter().append("rect") + .attr("class", "selection") + .attr("cursor", cursors.selection) + .attr("fill", "#777") + .attr("fill-opacity", 0.3) + .attr("stroke", "#fff") + .attr("shape-rendering", "crispEdges"); - this._x0 = x0; - this._y0 = y0; - this._x1 = x1; - this._y1 = y1; - return this; -} + var handle = group.selectAll(".handle") + .data(dim.handles, function(d) { return d.type; }); -function tree_data() { - var data = []; - this.visit(function(node) { - if (!node.length) do data.push(node.data); while (node = node.next) - }); - return data; -} - -function tree_extent(_) { - return arguments.length - ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) - : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; -} - -function Quad(node, x0, y0, x1, y1) { - this.node = node; - this.x0 = x0; - this.y0 = y0; - this.x1 = x1; - this.y1 = y1; -} - -function tree_find(x, y, radius) { - var data, - x0 = this._x0, - y0 = this._y0, - x1, - y1, - x2, - y2, - x3 = this._x1, - y3 = this._y1, - quads = [], - node = this._root, - q, - i; - - if (node) quads.push(new Quad(node, x0, y0, x3, y3)); - if (radius == null) radius = Infinity; - else { - x0 = x - radius, y0 = y - radius; - x3 = x + radius, y3 = y + radius; - radius *= radius; - } - - while (q = quads.pop()) { - - // Stop searching if this quadrant can’t contain a closer node. - if (!(node = q.node) - || (x1 = q.x0) > x3 - || (y1 = q.y0) > y3 - || (x2 = q.x1) < x0 - || (y2 = q.y1) < y0) continue; - - // Bisect the current quadrant. - if (node.length) { - var xm = (x1 + x2) / 2, - ym = (y1 + y2) / 2; - - quads.push( - new Quad(node[3], xm, ym, x2, y2), - new Quad(node[2], x1, ym, xm, y2), - new Quad(node[1], xm, y1, x2, ym), - new Quad(node[0], x1, y1, xm, ym) - ); + handle.exit().remove(); - // Visit the closest quadrant first. - if (i = (y >= ym) << 1 | (x >= xm)) { - q = quads[quads.length - 1]; - quads[quads.length - 1] = quads[quads.length - 1 - i]; - quads[quads.length - 1 - i] = q; - } + handle.enter().append("rect") + .attr("class", function(d) { return "handle handle--" + d.type; }) + .attr("cursor", function(d) { return cursors[d.type]; }); + + group + .each(redraw) + .attr("fill", "none") + .attr("pointer-events", "all") + .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)") + .on("mousedown.brush touchstart.brush", started); } - // Visit this point. (Visiting coincident points isn’t necessary!) - else { - var dx = x - +this._x.call(null, node.data), - dy = y - +this._y.call(null, node.data), - d2 = dx * dx + dy * dy; - if (d2 < radius) { - var d = Math.sqrt(radius = d2); - x0 = x - d, y0 = y - d; - x3 = x + d, y3 = y + d; - data = node.data; - } - } - } - - return data; -} - -function tree_remove(d) { - if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points - - var parent, - node = this._root, - retainer, - previous, - next, - x0 = this._x0, - y0 = this._y0, - x1 = this._x1, - y1 = this._y1, - x, - y, - xm, - ym, - right, - bottom, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return this; - - // Find the leaf node for the point. - // While descending, also retain the deepest parent with a non-removed sibling. - if (node.length) while (true) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (!(parent = node, node = node[i = bottom << 1 | right])) return this; - if (!node.length) break; - if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; - } - - // Find the point to remove. - while (node.data !== d) if (!(previous = node, node = node.next)) return this; - if (next = node.next) delete node.next; - - // If there are multiple coincident points, remove just the point. - if (previous) return next ? previous.next = next : delete previous.next, this; - - // If this is the root point, remove it. - if (!parent) return this._root = next, this; - - // Remove this leaf. - next ? parent[i] = next : delete parent[i]; - - // If the parent now contains exactly one leaf, collapse superfluous parents. - if ((node = parent[0] || parent[1] || parent[2] || parent[3]) - && node === (parent[3] || parent[2] || parent[1] || parent[0]) - && !node.length) { - if (retainer) retainer[j] = node; - else this._root = node; - } - - return this; -} - -function removeAll(data) { - for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); - return this; -} - -function tree_root() { - return this._root; -} - -function tree_size() { - var size = 0; - this.visit(function(node) { - if (!node.length) do ++size; while (node = node.next) - }); - return size; -} - -function tree_visit(callback) { - var quads = [], q, node = this._root, child, x0, y0, x1, y1; - if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1)); - while (q = quads.pop()) { - if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { - var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; - if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); - if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); - if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); - if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); - } - } - return this; -} - -function tree_visitAfter(callback) { - var quads = [], next = [], q; - if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1)); - while (q = quads.pop()) { - var node = q.node; - if (node.length) { - var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; - if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); - if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); - if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); - if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); - } - next.push(q); - } - while (q = next.pop()) { - callback(q.node, q.x0, q.y0, q.x1, q.y1); - } - return this; -} - -function defaultX(d) { - return d[0]; -} - -function tree_x(_) { - return arguments.length ? (this._x = _, this) : this._x; -} - -function defaultY(d) { - return d[1]; -} - -function tree_y(_) { - return arguments.length ? (this._y = _, this) : this._y; -} - -function quadtree(nodes, x, y) { - var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN); - return nodes == null ? tree : tree.addAll(nodes); -} - -function Quadtree(x, y, x0, y0, x1, y1) { - this._x = x; - this._y = y; - this._x0 = x0; - this._y0 = y0; - this._x1 = x1; - this._y1 = y1; - this._root = undefined; -} - -function leaf_copy(leaf) { - var copy = {data: leaf.data}, next = copy; - while (leaf = leaf.next) next = next.next = {data: leaf.data}; - return copy; -} - -var treeProto = quadtree.prototype = Quadtree.prototype; - -treeProto.copy = function() { - var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), - node = this._root, - nodes, - child; - - if (!node) return copy; - - if (!node.length) return copy._root = leaf_copy(node), copy; - - nodes = [{source: node, target: copy._root = new Array(4)}]; - while (node = nodes.pop()) { - for (var i = 0; i < 4; ++i) { - if (child = node.source[i]) { - if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); - else node.target[i] = leaf_copy(child); - } - } - } - - return copy; -}; - -treeProto.add = tree_add; -treeProto.addAll = addAll; -treeProto.cover = tree_cover; -treeProto.data = tree_data; -treeProto.extent = tree_extent; -treeProto.find = tree_find; -treeProto.remove = tree_remove; -treeProto.removeAll = removeAll; -treeProto.root = tree_root; -treeProto.size = tree_size; -treeProto.visit = tree_visit; -treeProto.visitAfter = tree_visitAfter; -treeProto.x = tree_x; -treeProto.y = tree_y; - -function x(d) { - return d.x + d.vx; -} - -function y(d) { - return d.y + d.vy; -} - -function collide(radius) { - var nodes, - radii, - strength = 1, - iterations = 1; - - if (typeof radius !== "function") radius = constant$6(radius == null ? 1 : +radius); - - function force() { - var i, n = nodes.length, - tree, - node, - xi, - yi, - ri, - ri2; + brush.move = function(group, selection$$1) { + if (group.selection) { + group + .on("start.brush", function() { emitter(this, arguments).beforestart().start(); }) + .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); }) + .tween("brush", function() { + var that = this, + state = that.__brush, + emit = emitter(that, arguments), + selection0 = state.selection, + selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(this, arguments) : selection$$1, state.extent), + i = interpolate(selection0, selection1); + + function tween(t) { + state.selection = t === 1 && empty$1(selection1) ? null : i(t); + redraw.call(that); + emit.brush(); + } + + return selection0 && selection1 ? tween : tween(1); + }); + } else { + group + .each(function() { + var that = this, + args = arguments, + state = that.__brush, + selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(that, args) : selection$$1, state.extent), + emit = emitter(that, args).beforestart(); + + interrupt(that); + state.selection = selection1 == null || empty$1(selection1) ? null : selection1; + redraw.call(that); + emit.start().brush().end(); + }); + } + }; - for (var k = 0; k < iterations; ++k) { - tree = quadtree(nodes, x, y).visitAfter(prepare); - for (i = 0; i < n; ++i) { - node = nodes[i]; - ri = radii[node.index], ri2 = ri * ri; - xi = node.x + node.vx; - yi = node.y + node.vy; - tree.visit(apply); - } - } - - function apply(quad, x0, y0, x1, y1) { - var data = quad.data, rj = quad.r, r = ri + rj; - if (data) { - if (data.index > node.index) { - var x = xi - data.x - data.vx, - y = yi - data.y - data.vy, - l = x * x + y * y; - if (l < r * r) { - if (x === 0) x = jiggle(), l += x * x; - if (y === 0) y = jiggle(), l += y * y; - l = (r - (l = Math.sqrt(l))) / l * strength; - node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); - node.vy += (y *= l) * r; - data.vx -= x * (r = 1 - r); - data.vy -= y * r; - } - } - return; + function redraw() { + var group = select(this), + selection$$1 = local$1(this).selection; + + if (selection$$1) { + group.selectAll(".selection") + .style("display", null) + .attr("x", selection$$1[0][0]) + .attr("y", selection$$1[0][1]) + .attr("width", selection$$1[1][0] - selection$$1[0][0]) + .attr("height", selection$$1[1][1] - selection$$1[0][1]); + + group.selectAll(".handle") + .style("display", null) + .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; }) + .attr("y", function(d) { return d.type[0] === "s" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; }) + .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; }) + .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; }); } - return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; - } - } - function prepare(quad) { - if (quad.data) return quad.r = radii[quad.data.index]; - for (var i = quad.r = 0; i < 4; ++i) { - if (quad[i] && quad[i].r > quad.r) { - quad.r = quad[i].r; + else { + group.selectAll(".selection,.handle") + .style("display", "none") + .attr("x", null) + .attr("y", null) + .attr("width", null) + .attr("height", null); } } - } - function initialize() { - if (!nodes) return; - var i, n = nodes.length, node; - radii = new Array(n); - for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes); - } + function emitter(that, args) { + return that.__brush.emitter || new Emitter(that, args); + } - force.initialize = function(_) { - nodes = _; - initialize(); - }; + function Emitter(that, args) { + this.that = that; + this.args = args; + this.state = that.__brush; + this.active = 0; + } - force.iterations = function(_) { - return arguments.length ? (iterations = +_, force) : iterations; - }; + Emitter.prototype = { + beforestart: function() { + if (++this.active === 1) this.state.emitter = this, this.starting = true; + return this; + }, + start: function() { + if (this.starting) this.starting = false, this.emit("start"); + return this; + }, + brush: function() { + this.emit("brush"); + return this; + }, + end: function() { + if (--this.active === 0) delete this.state.emitter, this.emit("end"); + return this; + }, + emit: function(type) { + customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]); + } + }; - force.strength = function(_) { - return arguments.length ? (strength = +_, force) : strength; - }; + function started() { + if (event.touches) { if (event.changedTouches.length < event.touches.length) return noevent$1(); } + else if (touchending) return; + if (!filter.apply(this, arguments)) return; + + var that = this, + type = event.target.__data__.type, + mode = (event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (event.altKey ? MODE_CENTER : MODE_HANDLE), + signX = dim === Y ? null : signsX[type], + signY = dim === X ? null : signsY[type], + state = local$1(that), + extent = state.extent, + selection$$1 = state.selection, + W = extent[0][0], w0, w1, + N = extent[0][1], n0, n1, + E = extent[1][0], e0, e1, + S = extent[1][1], s0, s1, + dx, + dy, + moving, + shifting = signX && signY && event.shiftKey, + lockX, + lockY, + point0 = mouse(that), + point$$1 = point0, + emit = emitter(that, arguments).beforestart(); + + if (type === "overlay") { + state.selection = selection$$1 = [ + [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]], + [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0] + ]; + } else { + w0 = selection$$1[0][0]; + n0 = selection$$1[0][1]; + e0 = selection$$1[1][0]; + s0 = selection$$1[1][1]; + } - force.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : radius; - }; + w1 = w0; + n1 = n0; + e1 = e0; + s1 = s0; - return force; -} + var group = select(that) + .attr("pointer-events", "none"); -function index(d) { - return d.index; -} + var overlay = group.selectAll(".overlay") + .attr("cursor", cursors[type]); + + if (event.touches) { + group + .on("touchmove.brush", moved, true) + .on("touchend.brush touchcancel.brush", ended, true); + } else { + var view = select(event.view) + .on("keydown.brush", keydowned, true) + .on("keyup.brush", keyupped, true) + .on("mousemove.brush", moved, true) + .on("mouseup.brush", ended, true); -function find(nodeById, nodeId) { - var node = nodeById.get(nodeId); - if (!node) throw new Error("missing: " + nodeId); - return node; -} + nodrag(event.view); + } -function link(links) { - var id = index, - strength = defaultStrength, - strengths, - distance = constant$6(30), - distances, - nodes, - count, - bias, - iterations = 1; + nopropagation$1(); + interrupt(that); + redraw.call(that); + emit.start(); + + function moved() { + var point1 = mouse(that); + if (shifting && !lockX && !lockY) { + if (Math.abs(point1[0] - point$$1[0]) > Math.abs(point1[1] - point$$1[1])) lockY = true; + else lockX = true; + } + point$$1 = point1; + moving = true; + noevent$1(); + move(); + } - if (links == null) links = []; + function move() { + var t; - function defaultStrength(link) { - return 1 / Math.min(count[link.source.index], count[link.target.index]); - } + dx = point$$1[0] - point0[0]; + dy = point$$1[1] - point0[1]; - function force(alpha) { - for (var k = 0, n = links.length; k < iterations; ++k) { - for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) { - link = links[i], source = link.source, target = link.target; - x = target.x + target.vx - source.x - source.vx || jiggle(); - y = target.y + target.vy - source.y - source.vy || jiggle(); - l = Math.sqrt(x * x + y * y); - l = (l - distances[i]) / l * alpha * strengths[i]; - x *= l, y *= l; - target.vx -= x * (b = bias[i]); - target.vy -= y * b; - source.vx += x * (b = 1 - b); - source.vy += y * b; - } - } - } + switch (mode) { + case MODE_SPACE: + case MODE_DRAG: { + if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; + if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; + break; + } + case MODE_HANDLE: { + if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0; + else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx; + if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0; + else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy; + break; + } + case MODE_CENTER: { + if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX)); + if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY)); + break; + } + } - function initialize() { - if (!nodes) return; + if (e1 < w1) { + signX *= -1; + t = w0, w0 = e0, e0 = t; + t = w1, w1 = e1, e1 = t; + if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]); + } - var i, - n = nodes.length, - m = links.length, - nodeById = map$1(nodes, id), - link; + if (s1 < n1) { + signY *= -1; + t = n0, n0 = s0, s0 = t; + t = n1, n1 = s1, s1 = t; + if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]); + } - for (i = 0, count = new Array(n); i < m; ++i) { - link = links[i], link.index = i; - if (typeof link.source !== "object") link.source = find(nodeById, link.source); - if (typeof link.target !== "object") link.target = find(nodeById, link.target); - count[link.source.index] = (count[link.source.index] || 0) + 1; - count[link.target.index] = (count[link.target.index] || 0) + 1; - } + if (state.selection) selection$$1 = state.selection; // May be set by brush.move! + if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0]; + if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1]; - for (i = 0, bias = new Array(m); i < m; ++i) { - link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); - } + if (selection$$1[0][0] !== w1 + || selection$$1[0][1] !== n1 + || selection$$1[1][0] !== e1 + || selection$$1[1][1] !== s1) { + state.selection = [[w1, n1], [e1, s1]]; + redraw.call(that); + emit.brush(); + } + } - strengths = new Array(m), initializeStrength(); - distances = new Array(m), initializeDistance(); - } + function ended() { + nopropagation$1(); + if (event.touches) { + if (event.touches.length) return; + if (touchending) clearTimeout(touchending); + touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! + group.on("touchmove.brush touchend.brush touchcancel.brush", null); + } else { + yesdrag(event.view, moving); + view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null); + } + group.attr("pointer-events", "all"); + overlay.attr("cursor", cursors.overlay); + if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)! + if (empty$1(selection$$1)) state.selection = null, redraw.call(that); + emit.end(); + } - function initializeStrength() { - if (!nodes) return; + function keydowned() { + switch (event.keyCode) { + case 16: { // SHIFT + shifting = signX && signY; + break; + } + case 18: { // ALT + if (mode === MODE_HANDLE) { + if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; + if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; + mode = MODE_CENTER; + move(); + } + break; + } + case 32: { // SPACE; takes priority over ALT + if (mode === MODE_HANDLE || mode === MODE_CENTER) { + if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx; + if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy; + mode = MODE_SPACE; + overlay.attr("cursor", cursors.selection); + move(); + } + break; + } + default: return; + } + noevent$1(); + } - for (var i = 0, n = links.length; i < n; ++i) { - strengths[i] = +strength(links[i], i, links); + function keyupped() { + switch (event.keyCode) { + case 16: { // SHIFT + if (shifting) { + lockX = lockY = shifting = false; + move(); + } + break; + } + case 18: { // ALT + if (mode === MODE_CENTER) { + if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; + if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; + mode = MODE_HANDLE; + move(); + } + break; + } + case 32: { // SPACE + if (mode === MODE_SPACE) { + if (event.altKey) { + if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; + if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; + mode = MODE_CENTER; + } else { + if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; + if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; + mode = MODE_HANDLE; + } + overlay.attr("cursor", cursors[type]); + move(); + } + break; + } + default: return; + } + noevent$1(); + } } - } - - function initializeDistance() { - if (!nodes) return; - for (var i = 0, n = links.length; i < n; ++i) { - distances[i] = +distance(links[i], i, links); + function initialize() { + var state = this.__brush || {selection: null}; + state.extent = extent.apply(this, arguments); + state.dim = dim; + return state; } - } - force.initialize = function(_) { - nodes = _; - initialize(); - }; + brush.extent = function(_) { + return arguments.length ? (extent = typeof _ === "function" ? _ : constant$4([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent; + }; - force.links = function(_) { - return arguments.length ? (links = _, initialize(), force) : links; - }; + brush.filter = function(_) { + return arguments.length ? (filter = typeof _ === "function" ? _ : constant$4(!!_), brush) : filter; + }; - force.id = function(_) { - return arguments.length ? (id = _, force) : id; - }; + brush.handleSize = function(_) { + return arguments.length ? (handleSize = +_, brush) : handleSize; + }; - force.iterations = function(_) { - return arguments.length ? (iterations = +_, force) : iterations; - }; + brush.on = function() { + var value = listeners.on.apply(listeners, arguments); + return value === listeners ? brush : value; + }; - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initializeStrength(), force) : strength; - }; + return brush; + } - force.distance = function(_) { - return arguments.length ? (distance = typeof _ === "function" ? _ : constant$6(+_), initializeDistance(), force) : distance; - }; + var cos = Math.cos; + var sin = Math.sin; + var pi$1 = Math.PI; + var halfPi$1 = pi$1 / 2; + var tau$1 = pi$1 * 2; + var max$1 = Math.max; + + function compareValue(compare) { + return function(a, b) { + return compare( + a.source.value + a.target.value, + b.source.value + b.target.value + ); + }; + } - return force; -} + function chord() { + var padAngle = 0, + sortGroups = null, + sortSubgroups = null, + sortChords = null; + + function chord(matrix) { + var n = matrix.length, + groupSums = [], + groupIndex = range(n), + subgroupIndex = [], + chords = [], + groups = chords.groups = new Array(n), + subgroups = new Array(n * n), + k, + x, + x0, + dx, + i, + j; -function x$1(d) { - return d.x; -} + // Compute the sum. + k = 0, i = -1; while (++i < n) { + x = 0, j = -1; while (++j < n) { + x += matrix[i][j]; + } + groupSums.push(x); + subgroupIndex.push(range(n)); + k += x; + } -function y$1(d) { - return d.y; -} + // Sort groups… + if (sortGroups) groupIndex.sort(function(a, b) { + return sortGroups(groupSums[a], groupSums[b]); + }); -var initialRadius = 10, - initialAngle = Math.PI * (3 - Math.sqrt(5)); + // Sort subgroups… + if (sortSubgroups) subgroupIndex.forEach(function(d, i) { + d.sort(function(a, b) { + return sortSubgroups(matrix[i][a], matrix[i][b]); + }); + }); -function simulation(nodes) { - var simulation, - alpha = 1, - alphaMin = 0.001, - alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), - alphaTarget = 0, - velocityDecay = 0.6, - forces = map$1(), - stepper = timer(step), - event = dispatch("tick", "end"); + // Convert the sum to scaling factor for [0, 2pi]. + // TODO Allow start and end angle to be specified? + // TODO Allow padding to be specified as percentage? + k = max$1(0, tau$1 - padAngle * n) / k; + dx = k ? padAngle : tau$1 / n; + + // Compute the start and end angle for each group and subgroup. + // Note: Opera has a bug reordering object literal properties! + x = 0, i = -1; while (++i < n) { + x0 = x, j = -1; while (++j < n) { + var di = groupIndex[i], + dj = subgroupIndex[di][j], + v = matrix[di][dj], + a0 = x, + a1 = x += v * k; + subgroups[dj * n + di] = { + index: di, + subindex: dj, + startAngle: a0, + endAngle: a1, + value: v + }; + } + groups[di] = { + index: di, + startAngle: x0, + endAngle: x, + value: groupSums[di] + }; + x += dx; + } - if (nodes == null) nodes = []; + // Generate chords for each (non-empty) subgroup-subgroup link. + i = -1; while (++i < n) { + j = i - 1; while (++j < n) { + var source = subgroups[j * n + i], + target = subgroups[i * n + j]; + if (source.value || target.value) { + chords.push(source.value < target.value + ? {source: target, target: source} + : {source: source, target: target}); + } + } + } - function step() { - tick(); - event.call("tick", simulation); - if (alpha < alphaMin) { - stepper.stop(); - event.call("end", simulation); + return sortChords ? chords.sort(sortChords) : chords; } - } - function tick() { - var i, n = nodes.length, node; + chord.padAngle = function(_) { + return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle; + }; + + chord.sortGroups = function(_) { + return arguments.length ? (sortGroups = _, chord) : sortGroups; + }; - alpha += (alphaTarget - alpha) * alphaDecay; + chord.sortSubgroups = function(_) { + return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups; + }; - forces.each(function(force) { - force(alpha); - }); + chord.sortChords = function(_) { + return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._; + }; - for (i = 0; i < n; ++i) { - node = nodes[i]; - if (node.fx == null) node.x += node.vx *= velocityDecay; - else node.x = node.fx, node.vx = 0; - if (node.fy == null) node.y += node.vy *= velocityDecay; - else node.y = node.fy, node.vy = 0; - } + return chord; } - function initializeNodes() { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.index = i; - if (isNaN(node.x) || isNaN(node.y)) { - var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle; - node.x = radius * Math.cos(angle); - node.y = radius * Math.sin(angle); - } - if (isNaN(node.vx) || isNaN(node.vy)) { - node.vx = node.vy = 0; - } - } - } + var slice$2 = Array.prototype.slice; - function initializeForce(force) { - if (force.initialize) force.initialize(nodes); - return force; + function constant$5(x) { + return function() { + return x; + }; } - initializeNodes(); + var pi$2 = Math.PI, + tau$2 = 2 * pi$2, + epsilon$1 = 1e-6, + tauEpsilon = tau$2 - epsilon$1; - return simulation = { - tick: tick, + function Path() { + this._x0 = this._y0 = // start of current subpath + this._x1 = this._y1 = null; // end of current subpath + this._ = ""; + } - restart: function() { - return stepper.restart(step), simulation; - }, + function path() { + return new Path; + } - stop: function() { - return stepper.stop(), simulation; + Path.prototype = path.prototype = { + constructor: Path, + moveTo: function(x, y) { + this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); }, - - nodes: function(_) { - return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes; + closePath: function() { + if (this._x1 !== null) { + this._x1 = this._x0, this._y1 = this._y0; + this._ += "Z"; + } }, - - alpha: function(_) { - return arguments.length ? (alpha = +_, simulation) : alpha; + lineTo: function(x, y) { + this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); }, - - alphaMin: function(_) { - return arguments.length ? (alphaMin = +_, simulation) : alphaMin; + quadraticCurveTo: function(x1, y1, x, y) { + this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); }, - - alphaDecay: function(_) { - return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; + bezierCurveTo: function(x1, y1, x2, y2, x, y) { + this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); }, + arcTo: function(x1, y1, x2, y2, r) { + x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; + var x0 = this._x1, + y0 = this._y1, + x21 = x2 - x1, + y21 = y2 - y1, + x01 = x0 - x1, + y01 = y0 - y1, + l01_2 = x01 * x01 + y01 * y01; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x1,y1). + if (this._x1 === null) { + this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); + } - alphaTarget: function(_) { - return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; - }, + // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. + else if (!(l01_2 > epsilon$1)) {} - velocityDecay: function(_) { - return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; - }, + // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? + // Equivalently, is (x1,y1) coincident with (x2,y2)? + // Or, is the radius zero? Line to (x1,y1). + else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$1) || !r) { + this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); + } - force: function(name, _) { - return arguments.length > 1 ? (_ == null ? forces.remove(name) : forces.set(name, initializeForce(_)), simulation) : forces.get(name); + // Otherwise, draw an arc! + else { + var x20 = x2 - x0, + y20 = y2 - y0, + l21_2 = x21 * x21 + y21 * y21, + l20_2 = x20 * x20 + y20 * y20, + l21 = Math.sqrt(l21_2), + l01 = Math.sqrt(l01_2), + l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), + t01 = l / l01, + t21 = l / l21; + + // If the start tangent is not coincident with (x0,y0), line to. + if (Math.abs(t01 - 1) > epsilon$1) { + this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); + } + + this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); + } }, + arc: function(x, y, r, a0, a1, ccw) { + x = +x, y = +y, r = +r; + var dx = r * Math.cos(a0), + dy = r * Math.sin(a0), + x0 = x + dx, + y0 = y + dy, + cw = 1 ^ ccw, + da = ccw ? a0 - a1 : a1 - a0; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x0,y0). + if (this._x1 === null) { + this._ += "M" + x0 + "," + y0; + } - find: function(x, y, radius) { - var i = 0, - n = nodes.length, - dx, - dy, - d2, - node, - closest; + // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). + else if (Math.abs(this._x1 - x0) > epsilon$1 || Math.abs(this._y1 - y0) > epsilon$1) { + this._ += "L" + x0 + "," + y0; + } - if (radius == null) radius = Infinity; - else radius *= radius; + // Is this arc empty? We’re done. + if (!r) return; - for (i = 0; i < n; ++i) { - node = nodes[i]; - dx = x - node.x; - dy = y - node.y; - d2 = dx * dx + dy * dy; - if (d2 < radius) closest = node, radius = d2; + // Does the angle go the wrong way? Flip the direction. + if (da < 0) da = da % tau$2 + tau$2; + + // Is this a complete circle? Draw two arcs to complete the circle. + if (da > tauEpsilon) { + this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); } - return closest; + // Is this arc non-empty? Draw an arc! + else if (da > epsilon$1) { + this._ += "A" + r + "," + r + ",0," + (+(da >= pi$2)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); + } }, - - on: function(name, _) { - return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); + rect: function(x, y, w, h) { + this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; + }, + toString: function() { + return this._; } }; -} - -function manyBody() { - var nodes, - node, - alpha, - strength = constant$6(-30), - strengths, - distanceMin2 = 1, - distanceMax2 = Infinity, - theta2 = 0.81; - - function force(_) { - var i, n = nodes.length, tree = quadtree(nodes, x$1, y$1).visitAfter(accumulate); - for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length, node; - strengths = new Array(n); - for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); - } - - function accumulate(quad) { - var strength = 0, q, c, weight = 0, x, y, i; - - // For internal nodes, accumulate forces from child quadrants. - if (quad.length) { - for (x = y = i = 0; i < 4; ++i) { - if ((q = quad[i]) && (c = Math.abs(q.value))) { - strength += q.value, weight += c, x += c * q.x, y += c * q.y; - } - } - quad.x = x / weight; - quad.y = y / weight; - } - // For leaf nodes, accumulate forces from coincident quadrants. - else { - q = quad; - q.x = q.data.x; - q.y = q.data.y; - do strength += strengths[q.data.index]; - while (q = q.next); - } + function defaultSource(d) { + return d.source; + } - quad.value = strength; + function defaultTarget(d) { + return d.target; } - function apply(quad, x1, _, x2) { - if (!quad.value) return true; + function defaultRadius(d) { + return d.radius; + } - var x = quad.x - node.x, - y = quad.y - node.y, - w = x2 - x1, - l = x * x + y * y; + function defaultStartAngle(d) { + return d.startAngle; + } - // Apply the Barnes-Hut approximation if possible. - // Limit forces for very close nodes; randomize direction if coincident. - if (w * w / theta2 < l) { - if (l < distanceMax2) { - if (x === 0) x = jiggle(), l += x * x; - if (y === 0) y = jiggle(), l += y * y; - if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); - node.vx += x * quad.value * alpha / l; - node.vy += y * quad.value * alpha / l; + function defaultEndAngle(d) { + return d.endAngle; + } + + function ribbon() { + var source = defaultSource, + target = defaultTarget, + radius = defaultRadius, + startAngle = defaultStartAngle, + endAngle = defaultEndAngle, + context = null; + + function ribbon() { + var buffer, + argv = slice$2.call(arguments), + s = source.apply(this, argv), + t = target.apply(this, argv), + sr = +radius.apply(this, (argv[0] = s, argv)), + sa0 = startAngle.apply(this, argv) - halfPi$1, + sa1 = endAngle.apply(this, argv) - halfPi$1, + sx0 = sr * cos(sa0), + sy0 = sr * sin(sa0), + tr = +radius.apply(this, (argv[0] = t, argv)), + ta0 = startAngle.apply(this, argv) - halfPi$1, + ta1 = endAngle.apply(this, argv) - halfPi$1; + + if (!context) context = buffer = path(); + + context.moveTo(sx0, sy0); + context.arc(0, 0, sr, sa0, sa1); + if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr? + context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0)); + context.arc(0, 0, tr, ta0, ta1); } - return true; + context.quadraticCurveTo(0, 0, sx0, sy0); + context.closePath(); + + if (buffer) return context = null, buffer + "" || null; } - // Otherwise, process points directly. - else if (quad.length || l >= distanceMax2) return; + ribbon.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant$5(+_), ribbon) : radius; + }; - // Limit forces for very close nodes; randomize direction if coincident. - if (quad.data !== node || quad.next) { - if (x === 0) x = jiggle(), l += x * x; - if (y === 0) y = jiggle(), l += y * y; - if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); - } + ribbon.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : startAngle; + }; - do if (quad.data !== node) { - w = strengths[quad.data.index] * alpha / l; - node.vx += x * w; - node.vy += y * w; - } while (quad = quad.next); - } + ribbon.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : endAngle; + }; - force.initialize = function(_) { - nodes = _; - initialize(); - }; + ribbon.source = function(_) { + return arguments.length ? (source = _, ribbon) : source; + }; - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; - }; + ribbon.target = function(_) { + return arguments.length ? (target = _, ribbon) : target; + }; - force.distanceMin = function(_) { - return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); - }; + ribbon.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), ribbon) : context; + }; - force.distanceMax = function(_) { - return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); - }; + return ribbon; + } - force.theta = function(_) { - return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); + var prefix = "$"; + + function Map() {} + + Map.prototype = map$1.prototype = { + constructor: Map, + has: function(key) { + return (prefix + key) in this; + }, + get: function(key) { + return this[prefix + key]; + }, + set: function(key, value) { + this[prefix + key] = value; + return this; + }, + remove: function(key) { + var property = prefix + key; + return property in this && delete this[property]; + }, + clear: function() { + for (var property in this) if (property[0] === prefix) delete this[property]; + }, + keys: function() { + var keys = []; + for (var property in this) if (property[0] === prefix) keys.push(property.slice(1)); + return keys; + }, + values: function() { + var values = []; + for (var property in this) if (property[0] === prefix) values.push(this[property]); + return values; + }, + entries: function() { + var entries = []; + for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]}); + return entries; + }, + size: function() { + var size = 0; + for (var property in this) if (property[0] === prefix) ++size; + return size; + }, + empty: function() { + for (var property in this) if (property[0] === prefix) return false; + return true; + }, + each: function(f) { + for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this); + } }; - return force; -} + function map$1(object, f) { + var map = new Map; -function radial(radius, x, y) { - var nodes, - strength = constant$6(0.1), - strengths, - radiuses; + // Copy constructor. + if (object instanceof Map) object.each(function(value, key) { map.set(key, value); }); - if (typeof radius !== "function") radius = constant$6(+radius); - if (x == null) x = 0; - if (y == null) y = 0; + // Index array by numeric index or specified key function. + else if (Array.isArray(object)) { + var i = -1, + n = object.length, + o; - function force(alpha) { - for (var i = 0, n = nodes.length; i < n; ++i) { - var node = nodes[i], - dx = node.x - x || 1e-6, - dy = node.y - y || 1e-6, - r = Math.sqrt(dx * dx + dy * dy), - k = (radiuses[i] - r) * strengths[i] * alpha / r; - node.vx += dx * k; - node.vy += dy * k; + if (f == null) while (++i < n) map.set(i, object[i]); + else while (++i < n) map.set(f(o = object[i], i, object), o); } - } - function initialize() { - if (!nodes) return; - var i, n = nodes.length; - strengths = new Array(n); - radiuses = new Array(n); - for (i = 0; i < n; ++i) { - radiuses[i] = +radius(nodes[i], i, nodes); - strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes); - } + // Convert object to map. + else if (object) for (var key in object) map.set(key, object[key]); + + return map; } - force.initialize = function(_) { - nodes = _, initialize(); - }; + function nest() { + var keys = [], + sortKeys = [], + sortValues, + rollup, + nest; - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; - }; + function apply(array, depth, createResult, setResult) { + if (depth >= keys.length) { + if (sortValues != null) array.sort(sortValues); + return rollup != null ? rollup(array) : array; + } - force.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : radius; - }; + var i = -1, + n = array.length, + key = keys[depth++], + keyValue, + value, + valuesByKey = map$1(), + values, + result = createResult(); - force.x = function(_) { - return arguments.length ? (x = +_, force) : x; - }; + while (++i < n) { + if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) { + values.push(value); + } else { + valuesByKey.set(keyValue, [value]); + } + } - force.y = function(_) { - return arguments.length ? (y = +_, force) : y; - }; + valuesByKey.each(function(values, key) { + setResult(result, key, apply(values, depth, createResult, setResult)); + }); - return force; -} + return result; + } -function x$2(x) { - var strength = constant$6(0.1), - nodes, - strengths, - xz; + function entries(map, depth) { + if (++depth > keys.length) return map; + var array, sortKey = sortKeys[depth - 1]; + if (rollup != null && depth >= keys.length) array = map.entries(); + else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); }); + return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array; + } - if (typeof x !== "function") x = constant$6(x == null ? 0 : +x); + return nest = { + object: function(array) { return apply(array, 0, createObject, setObject); }, + map: function(array) { return apply(array, 0, createMap, setMap); }, + entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); }, + key: function(d) { keys.push(d); return nest; }, + sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; }, + sortValues: function(order) { sortValues = order; return nest; }, + rollup: function(f) { rollup = f; return nest; } + }; + } - function force(alpha) { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; - } + function createObject() { + return {}; } - function initialize() { - if (!nodes) return; - var i, n = nodes.length; - strengths = new Array(n); - xz = new Array(n); - for (i = 0; i < n; ++i) { - strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); - } + function setObject(object, key, value) { + object[key] = value; } - force.initialize = function(_) { - nodes = _; - initialize(); - }; + function createMap() { + return map$1(); + } - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; - }; + function setMap(map, key, value) { + map.set(key, value); + } - force.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : x; - }; + function Set() {} - return force; -} + var proto = map$1.prototype; -function y$2(y) { - var strength = constant$6(0.1), - nodes, - strengths, - yz; + Set.prototype = set$2.prototype = { + constructor: Set, + has: proto.has, + add: function(value) { + value += ""; + this[prefix + value] = value; + return this; + }, + remove: proto.remove, + clear: proto.clear, + values: proto.keys, + size: proto.size, + empty: proto.empty, + each: proto.each + }; - if (typeof y !== "function") y = constant$6(y == null ? 0 : +y); + function set$2(object, f) { + var set = new Set; - function force(alpha) { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; - } - } + // Copy constructor. + if (object instanceof Set) object.each(function(value) { set.add(value); }); - function initialize() { - if (!nodes) return; - var i, n = nodes.length; - strengths = new Array(n); - yz = new Array(n); - for (i = 0; i < n; ++i) { - strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + // Otherwise, assume it’s an array. + else if (object) { + var i = -1, n = object.length; + if (f == null) while (++i < n) set.add(object[i]); + else while (++i < n) set.add(f(object[i], i, object)); } - } - force.initialize = function(_) { - nodes = _; - initialize(); - }; + return set; + } - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; - }; + function keys(map) { + var keys = []; + for (var key in map) keys.push(key); + return keys; + } - force.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : y; - }; + function values(map) { + var values = []; + for (var key in map) values.push(map[key]); + return values; + } - return force; -} - -// Computes the decimal coefficient and exponent of the specified number x with -// significant digits p, where x is positive and p is in [1, 21] or undefined. -// For example, formatDecimal(1.23) returns ["123", 0]. -function formatDecimal(x, p) { - if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity - var i, coefficient = x.slice(0, i); - - // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ - // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). - return [ - coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, - +x.slice(i + 1) - ]; -} + function entries(map) { + var entries = []; + for (var key in map) entries.push({key: key, value: map[key]}); + return entries; + } -function exponent$1(x) { - return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN; -} + var EOL = {}, + EOF = {}, + QUOTE = 34, + NEWLINE = 10, + RETURN = 13; -function formatGroup(grouping, thousands) { - return function(value, width) { - var i = value.length, - t = [], - j = 0, - g = grouping[0], - length = 0; + function objectConverter(columns) { + return new Function("d", "return {" + columns.map(function(name, i) { + return JSON.stringify(name) + ": d[" + i + "]"; + }).join(",") + "}"); + } - while (i > 0 && g > 0) { - if (length + g + 1 > width) g = Math.max(1, width - length); - t.push(value.substring(i -= g, i + g)); - if ((length += g + 1) > width) break; - g = grouping[j = (j + 1) % grouping.length]; - } + function customConverter(columns, f) { + var object = objectConverter(columns); + return function(row, i) { + return f(object(row), i, columns); + }; + } - return t.reverse().join(thousands); - }; -} + // Compute unique columns in order of discovery. + function inferColumns(rows) { + var columnSet = Object.create(null), + columns = []; -function formatNumerals(numerals) { - return function(value) { - return value.replace(/[0-9]/g, function(i) { - return numerals[+i]; - }); - }; -} - -function formatDefault(x, p) { - x = x.toPrecision(p); - - out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) { - switch (x[i]) { - case ".": i0 = i1 = i; break; - case "0": if (i0 === 0) i0 = i; i1 = i; break; - case "e": break out; - default: if (i0 > 0) i0 = 0; break; - } - } - - return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x; -} - -var prefixExponent; - -function formatPrefixAuto(x, p) { - var d = formatDecimal(x, p); - if (!d) return x + ""; - var coefficient = d[0], - exponent = d[1], - i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, - n = coefficient.length; - return i === n ? coefficient - : i > n ? coefficient + new Array(i - n + 1).join("0") - : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) - : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y! -} - -function formatRounded(x, p) { - var d = formatDecimal(x, p); - if (!d) return x + ""; - var coefficient = d[0], - exponent = d[1]; - return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient - : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) - : coefficient + new Array(exponent - coefficient.length + 2).join("0"); -} - -var formatTypes = { - "": formatDefault, - "%": function(x, p) { return (x * 100).toFixed(p); }, - "b": function(x) { return Math.round(x).toString(2); }, - "c": function(x) { return x + ""; }, - "d": function(x) { return Math.round(x).toString(10); }, - "e": function(x, p) { return x.toExponential(p); }, - "f": function(x, p) { return x.toFixed(p); }, - "g": function(x, p) { return x.toPrecision(p); }, - "o": function(x) { return Math.round(x).toString(8); }, - "p": function(x, p) { return formatRounded(x * 100, p); }, - "r": formatRounded, - "s": formatPrefixAuto, - "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, - "x": function(x) { return Math.round(x).toString(16); } -}; - -// [[fill]align][sign][symbol][0][width][,][.precision][type] -var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i; - -function formatSpecifier(specifier) { - return new FormatSpecifier(specifier); -} - -formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof - -function FormatSpecifier(specifier) { - if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); - - var match, - fill = match[1] || " ", - align = match[2] || ">", - sign = match[3] || "-", - symbol = match[4] || "", - zero = !!match[5], - width = match[6] && +match[6], - comma = !!match[7], - precision = match[8] && +match[8].slice(1), - type = match[9] || ""; - - // The "n" type is an alias for ",g". - if (type === "n") comma = true, type = "g"; - - // Map invalid types to the default format. - else if (!formatTypes[type]) type = ""; - - // If zero fill is specified, padding goes after sign and before digits. - if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; - - this.fill = fill; - this.align = align; - this.sign = sign; - this.symbol = symbol; - this.zero = zero; - this.width = width; - this.comma = comma; - this.precision = precision; - this.type = type; -} - -FormatSpecifier.prototype.toString = function() { - return this.fill - + this.align - + this.sign - + this.symbol - + (this.zero ? "0" : "") - + (this.width == null ? "" : Math.max(1, this.width | 0)) - + (this.comma ? "," : "") - + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0)) - + this.type; -}; - -function identity$3(x) { - return x; -} - -var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; - -function formatLocale(locale) { - var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3, - currency = locale.currency, - decimal = locale.decimal, - numerals = locale.numerals ? formatNumerals(locale.numerals) : identity$3, - percent = locale.percent || "%"; - - function newFormat(specifier) { - specifier = formatSpecifier(specifier); - - var fill = specifier.fill, - align = specifier.align, - sign = specifier.sign, - symbol = specifier.symbol, - zero = specifier.zero, - width = specifier.width, - comma = specifier.comma, - precision = specifier.precision, - type = specifier.type; - - // Compute the prefix and suffix. - // For SI-prefix, the suffix is lazily computed. - var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", - suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? percent : ""; - - // What format function should we use? - // Is this an integer type? - // Can this type generate exponential notation? - var formatType = formatTypes[type], - maybeSuffix = !type || /[defgprs%]/.test(type); - - // Set the default precision if not specified, - // or clamp the specified precision to the supported range. - // For significant precision, it must be in [1, 21]. - // For fixed precision, it must be in [0, 20]. - precision = precision == null ? (type ? 6 : 12) - : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) - : Math.max(0, Math.min(20, precision)); - - function format(value) { - var valuePrefix = prefix, - valueSuffix = suffix, - i, n, c; - - if (type === "c") { - valueSuffix = formatType(value) + valueSuffix; - value = ""; - } else { - value = +value; - - // Perform the initial formatting. - var valueNegative = value < 0; - value = formatType(Math.abs(value), precision); - - // If a negative value rounds to zero during formatting, treat as positive. - if (valueNegative && +value === 0) valueNegative = false; - - // Compute the prefix and suffix. - valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; - valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); - - // Break the formatted value into the integer “value” part that can be - // grouped, and fractional or exponential “suffix” part that is not. - if (maybeSuffix) { - i = -1, n = value.length; - while (++i < n) { - if (c = value.charCodeAt(i), 48 > c || c > 57) { - valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; - value = value.slice(0, i); - break; - } - } + rows.forEach(function(row) { + for (var column in row) { + if (!(column in columnSet)) { + columns.push(columnSet[column] = column); } } + }); - // If the fill character is not "0", grouping is applied before padding. - if (comma && !zero) value = group(value, Infinity); + return columns; + } - // Compute the padding. - var length = valuePrefix.length + value.length + valueSuffix.length, - padding = length < width ? new Array(width - length + 1).join(fill) : ""; + function dsv(delimiter) { + var reFormat = new RegExp("[\"" + delimiter + "\n\r]"), + DELIMITER = delimiter.charCodeAt(0); - // If the fill character is "0", grouping is applied after padding. - if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; + function parse(text, f) { + var convert, columns, rows = parseRows(text, function(row, i) { + if (convert) return convert(row, i - 1); + columns = row, convert = f ? customConverter(row, f) : objectConverter(row); + }); + rows.columns = columns || []; + return rows; + } + + function parseRows(text, f) { + var rows = [], // output rows + N = text.length, + I = 0, // current character index + n = 0, // current line number + t, // current token + eof = N <= 0, // current token followed by EOF? + eol = false; // current token followed by EOL? + + // Strip the trailing newline. + if (text.charCodeAt(N - 1) === NEWLINE) --N; + if (text.charCodeAt(N - 1) === RETURN) --N; + + function token() { + if (eof) return EOF; + if (eol) return eol = false, EOL; + + // Unescape quotes. + var i, j = I, c; + if (text.charCodeAt(j) === QUOTE) { + while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE); + if ((i = I) >= N) eof = true; + else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true; + else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } + return text.slice(j + 1, i - 1).replace(/""/g, "\""); + } + + // Find next delimiter or newline. + while (I < N) { + if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true; + else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } + else if (c !== DELIMITER) continue; + return text.slice(j, i); + } + + // Return last token before EOF. + return eof = true, text.slice(j, N); + } - // Reconstruct the final output based on the desired alignment. - switch (align) { - case "<": value = valuePrefix + value + valueSuffix + padding; break; - case "=": value = valuePrefix + padding + value + valueSuffix; break; - case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break; - default: value = padding + valuePrefix + value + valueSuffix; break; + while ((t = token()) !== EOF) { + var row = []; + while (t !== EOL && t !== EOF) row.push(t), t = token(); + if (f && (row = f(row, n++)) == null) continue; + rows.push(row); } - return numerals(value); + return rows; } - format.toString = function() { - return specifier + ""; - }; - - return format; - } + function format(rows, columns) { + if (columns == null) columns = inferColumns(rows); + return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) { + return columns.map(function(column) { + return formatValue(row[column]); + }).join(delimiter); + })).join("\n"); + } - function formatPrefix(specifier, value) { - var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), - e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3, - k = Math.pow(10, -e), - prefix = prefixes[8 + e / 3]; - return function(value) { - return f(k * value) + prefix; - }; - } + function formatRows(rows) { + return rows.map(formatRow).join("\n"); + } - return { - format: newFormat, - formatPrefix: formatPrefix - }; -} - -var locale; -var format; -var formatPrefix; - -defaultLocale({ - decimal: ".", - thousands: ",", - grouping: [3], - currency: ["$", ""] -}); - -function defaultLocale(definition) { - locale = formatLocale(definition); - format = locale.format; - formatPrefix = locale.formatPrefix; - return locale; -} - -function precisionFixed(step) { - return Math.max(0, -exponent$1(Math.abs(step))); -} - -function precisionPrefix(step, value) { - return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step))); -} - -function precisionRound(step, max) { - step = Math.abs(step), max = Math.abs(max) - step; - return Math.max(0, exponent$1(max) - exponent$1(step)) + 1; -} - -// Adds floating point numbers with twice the normal precision. -// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and -// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) -// 305–363 (1997). -// Code adapted from GeographicLib by Charles F. F. Karney, -// http://geographiclib.sourceforge.net/ - -function adder() { - return new Adder; -} - -function Adder() { - this.reset(); -} - -Adder.prototype = { - constructor: Adder, - reset: function() { - this.s = // rounded value - this.t = 0; // exact error - }, - add: function(y) { - add$1(temp, y, this.t); - add$1(this, temp.s, this.s); - if (this.s) this.t += temp.t; - else this.s = temp.t; - }, - valueOf: function() { - return this.s; - } -}; - -var temp = new Adder; - -function add$1(adder, a, b) { - var x = adder.s = a + b, - bv = x - a, - av = x - bv; - adder.t = (a - av) + (b - bv); -} - -var epsilon$2 = 1e-6; -var epsilon2$1 = 1e-12; -var pi$3 = Math.PI; -var halfPi$2 = pi$3 / 2; -var quarterPi = pi$3 / 4; -var tau$3 = pi$3 * 2; - -var degrees$1 = 180 / pi$3; -var radians = pi$3 / 180; - -var abs = Math.abs; -var atan = Math.atan; -var atan2 = Math.atan2; -var cos$1 = Math.cos; -var ceil = Math.ceil; -var exp = Math.exp; -var log = Math.log; -var pow = Math.pow; -var sin$1 = Math.sin; -var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; -var sqrt = Math.sqrt; -var tan = Math.tan; - -function acos(x) { - return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x); -} - -function asin(x) { - return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x); -} - -function haversin(x) { - return (x = sin$1(x / 2)) * x; -} - -function noop$1() {} - -function streamGeometry(geometry, stream) { - if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { - streamGeometryType[geometry.type](geometry, stream); - } -} - -var streamObjectType = { - Feature: function(object, stream) { - streamGeometry(object.geometry, stream); - }, - FeatureCollection: function(object, stream) { - var features = object.features, i = -1, n = features.length; - while (++i < n) streamGeometry(features[i].geometry, stream); - } -}; - -var streamGeometryType = { - Sphere: function(object, stream) { - stream.sphere(); - }, - Point: function(object, stream) { - object = object.coordinates; - stream.point(object[0], object[1], object[2]); - }, - MultiPoint: function(object, stream) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); - }, - LineString: function(object, stream) { - streamLine(object.coordinates, stream, 0); - }, - MultiLineString: function(object, stream) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) streamLine(coordinates[i], stream, 0); - }, - Polygon: function(object, stream) { - streamPolygon(object.coordinates, stream); - }, - MultiPolygon: function(object, stream) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) streamPolygon(coordinates[i], stream); - }, - GeometryCollection: function(object, stream) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) streamGeometry(geometries[i], stream); - } -}; - -function streamLine(coordinates, stream, closed) { - var i = -1, n = coordinates.length - closed, coordinate; - stream.lineStart(); - while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); - stream.lineEnd(); -} - -function streamPolygon(coordinates, stream) { - var i = -1, n = coordinates.length; - stream.polygonStart(); - while (++i < n) streamLine(coordinates[i], stream, 1); - stream.polygonEnd(); -} - -function d3_geoStream(object, stream) { - if (object && streamObjectType.hasOwnProperty(object.type)) { - streamObjectType[object.type](object, stream); - } else { - streamGeometry(object, stream); - } -} - -var areaRingSum = adder(); - -var areaSum = adder(), - lambda00, - phi00, - lambda0, - cosPhi0, - sinPhi0; - -var areaStream = { - point: noop$1, - lineStart: noop$1, - lineEnd: noop$1, - polygonStart: function() { - areaRingSum.reset(); - areaStream.lineStart = areaRingStart; - areaStream.lineEnd = areaRingEnd; - }, - polygonEnd: function() { - var areaRing = +areaRingSum; - areaSum.add(areaRing < 0 ? tau$3 + areaRing : areaRing); - this.lineStart = this.lineEnd = this.point = noop$1; - }, - sphere: function() { - areaSum.add(tau$3); - } -}; - -function areaRingStart() { - areaStream.point = areaPointFirst; -} - -function areaRingEnd() { - areaPoint(lambda00, phi00); -} - -function areaPointFirst(lambda, phi) { - areaStream.point = areaPoint; - lambda00 = lambda, phi00 = phi; - lambda *= radians, phi *= radians; - lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi); -} - -function areaPoint(lambda, phi) { - lambda *= radians, phi *= radians; - phi = phi / 2 + quarterPi; // half the angular distance from south pole - - // Spherical excess E for a spherical triangle with vertices: south pole, - // previous point, current point. Uses a formula derived from Cagnoli’s - // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). - var dLambda = lambda - lambda0, - sdLambda = dLambda >= 0 ? 1 : -1, - adLambda = sdLambda * dLambda, - cosPhi = cos$1(phi), - sinPhi = sin$1(phi), - k = sinPhi0 * sinPhi, - u = cosPhi0 * cosPhi + k * cos$1(adLambda), - v = k * sdLambda * sin$1(adLambda); - areaRingSum.add(atan2(v, u)); - - // Advance the previous points. - lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi; -} - -function d3_geoArea(object) { - areaSum.reset(); - d3_geoStream(object, areaStream); - return areaSum * 2; -} - -function spherical(cartesian) { - return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])]; -} - -function cartesian(spherical) { - var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi); - return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)]; -} - -function cartesianDot(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; -} - -function cartesianCross(a, b) { - return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; -} - -// TODO return a -function cartesianAddInPlace(a, b) { - a[0] += b[0], a[1] += b[1], a[2] += b[2]; -} - -function cartesianScale(vector, k) { - return [vector[0] * k, vector[1] * k, vector[2] * k]; -} - -// TODO return d -function cartesianNormalizeInPlace(d) { - var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); - d[0] /= l, d[1] /= l, d[2] /= l; -} - -var lambda0$1, phi0, lambda1, phi1, // bounds - lambda2, // previous lambda-coordinate - lambda00$1, phi00$1, // first point - p0, // previous 3D point - deltaSum = adder(), - ranges, - range; - -var boundsStream = { - point: boundsPoint, - lineStart: boundsLineStart, - lineEnd: boundsLineEnd, - polygonStart: function() { - boundsStream.point = boundsRingPoint; - boundsStream.lineStart = boundsRingStart; - boundsStream.lineEnd = boundsRingEnd; - deltaSum.reset(); - areaStream.polygonStart(); - }, - polygonEnd: function() { - areaStream.polygonEnd(); - boundsStream.point = boundsPoint; - boundsStream.lineStart = boundsLineStart; - boundsStream.lineEnd = boundsLineEnd; - if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); - else if (deltaSum > epsilon$2) phi1 = 90; - else if (deltaSum < -epsilon$2) phi0 = -90; - range[0] = lambda0$1, range[1] = lambda1; - } -}; - -function boundsPoint(lambda, phi) { - ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]); - if (phi < phi0) phi0 = phi; - if (phi > phi1) phi1 = phi; -} - -function linePoint(lambda, phi) { - var p = cartesian([lambda * radians, phi * radians]); - if (p0) { - var normal = cartesianCross(p0, p), - equatorial = [normal[1], -normal[0], 0], - inflection = cartesianCross(equatorial, normal); - cartesianNormalizeInPlace(inflection); - inflection = spherical(inflection); - var delta = lambda - lambda2, - sign$$1 = delta > 0 ? 1 : -1, - lambdai = inflection[0] * degrees$1 * sign$$1, - phii, - antimeridian = abs(delta) > 180; - if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) { - phii = inflection[1] * degrees$1; - if (phii > phi1) phi1 = phii; - } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) { - phii = -inflection[1] * degrees$1; - if (phii < phi0) phi0 = phii; - } else { - if (phi < phi0) phi0 = phi; - if (phi > phi1) phi1 = phi; + function formatRow(row) { + return row.map(formatValue).join(delimiter); } - if (antimeridian) { - if (lambda < lambda2) { - if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; - } else { - if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; - } - } else { - if (lambda1 >= lambda0$1) { - if (lambda < lambda0$1) lambda0$1 = lambda; - if (lambda > lambda1) lambda1 = lambda; - } else { - if (lambda > lambda2) { - if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; - } else { - if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; - } - } + + function formatValue(text) { + return text == null ? "" + : reFormat.test(text += "") ? "\"" + text.replace(/"/g, "\"\"") + "\"" + : text; } - } else { - ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]); - } - if (phi < phi0) phi0 = phi; - if (phi > phi1) phi1 = phi; - p0 = p, lambda2 = lambda; -} - -function boundsLineStart() { - boundsStream.point = linePoint; -} - -function boundsLineEnd() { - range[0] = lambda0$1, range[1] = lambda1; - boundsStream.point = boundsPoint; - p0 = null; -} - -function boundsRingPoint(lambda, phi) { - if (p0) { - var delta = lambda - lambda2; - deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); - } else { - lambda00$1 = lambda, phi00$1 = phi; - } - areaStream.point(lambda, phi); - linePoint(lambda, phi); -} - -function boundsRingStart() { - areaStream.lineStart(); -} - -function boundsRingEnd() { - boundsRingPoint(lambda00$1, phi00$1); - areaStream.lineEnd(); - if (abs(deltaSum) > epsilon$2) lambda0$1 = -(lambda1 = 180); - range[0] = lambda0$1, range[1] = lambda1; - p0 = null; -} - -// Finds the left-right distance between two longitudes. -// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want -// the distance between ±180° to be 360°. -function angle(lambda0, lambda1) { - return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; -} - -function rangeCompare(a, b) { - return a[0] - b[0]; -} - -function rangeContains(range, x) { - return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; -} - -function d3_geoBounds(feature) { - var i, n, a, b, merged, deltaMax, delta; - - phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity); - ranges = []; - d3_geoStream(feature, boundsStream); - - // First, sort ranges by their minimum longitudes. - if (n = ranges.length) { - ranges.sort(rangeCompare); - - // Then, merge any ranges that overlap. - for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { - b = ranges[i]; - if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { - if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; - if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; - } else { - merged.push(a = b); - } - } - - // Finally, find the largest gap between the merged ranges. - // The final bounding box will be the inverse of this gap. - for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { - b = merged[i]; - if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]; - } - } - - ranges = range = null; - - return lambda0$1 === Infinity || phi0 === Infinity - ? [[NaN, NaN], [NaN, NaN]] - : [[lambda0$1, phi0], [lambda1, phi1]]; -} - -var W0, W1, - X0, Y0, Z0, - X1, Y1, Z1, - X2, Y2, Z2, - lambda00$2, phi00$2, // first point - x0, y0, z0; // previous point - -var centroidStream = { - sphere: noop$1, - point: centroidPoint, - lineStart: centroidLineStart, - lineEnd: centroidLineEnd, - polygonStart: function() { - centroidStream.lineStart = centroidRingStart; - centroidStream.lineEnd = centroidRingEnd; - }, - polygonEnd: function() { - centroidStream.lineStart = centroidLineStart; - centroidStream.lineEnd = centroidLineEnd; - } -}; - -// Arithmetic mean of Cartesian vectors. -function centroidPoint(lambda, phi) { - lambda *= radians, phi *= radians; - var cosPhi = cos$1(phi); - centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)); -} - -function centroidPointCartesian(x, y, z) { - ++W0; - X0 += (x - X0) / W0; - Y0 += (y - Y0) / W0; - Z0 += (z - Z0) / W0; -} - -function centroidLineStart() { - centroidStream.point = centroidLinePointFirst; -} - -function centroidLinePointFirst(lambda, phi) { - lambda *= radians, phi *= radians; - var cosPhi = cos$1(phi); - x0 = cosPhi * cos$1(lambda); - y0 = cosPhi * sin$1(lambda); - z0 = sin$1(phi); - centroidStream.point = centroidLinePoint; - centroidPointCartesian(x0, y0, z0); -} - -function centroidLinePoint(lambda, phi) { - lambda *= radians, phi *= radians; - var cosPhi = cos$1(phi), - x = cosPhi * cos$1(lambda), - y = cosPhi * sin$1(lambda), - z = sin$1(phi), - w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); - W1 += w; - X1 += w * (x0 + (x0 = x)); - Y1 += w * (y0 + (y0 = y)); - Z1 += w * (z0 + (z0 = z)); - centroidPointCartesian(x0, y0, z0); -} - -function centroidLineEnd() { - centroidStream.point = centroidPoint; -} - -// See J. E. Brock, The Inertia Tensor for a Spherical Triangle, -// J. Applied Mechanics 42, 239 (1975). -function centroidRingStart() { - centroidStream.point = centroidRingPointFirst; -} - -function centroidRingEnd() { - centroidRingPoint(lambda00$2, phi00$2); - centroidStream.point = centroidPoint; -} - -function centroidRingPointFirst(lambda, phi) { - lambda00$2 = lambda, phi00$2 = phi; - lambda *= radians, phi *= radians; - centroidStream.point = centroidRingPoint; - var cosPhi = cos$1(phi); - x0 = cosPhi * cos$1(lambda); - y0 = cosPhi * sin$1(lambda); - z0 = sin$1(phi); - centroidPointCartesian(x0, y0, z0); -} - -function centroidRingPoint(lambda, phi) { - lambda *= radians, phi *= radians; - var cosPhi = cos$1(phi), - x = cosPhi * cos$1(lambda), - y = cosPhi * sin$1(lambda), - z = sin$1(phi), - cx = y0 * z - z0 * y, - cy = z0 * x - x0 * z, - cz = x0 * y - y0 * x, - m = sqrt(cx * cx + cy * cy + cz * cz), - w = asin(m), // line weight = angle - v = m && -w / m; // area weight multiplier - X2 += v * cx; - Y2 += v * cy; - Z2 += v * cz; - W1 += w; - X1 += w * (x0 + (x0 = x)); - Y1 += w * (y0 + (y0 = y)); - Z1 += w * (z0 + (z0 = z)); - centroidPointCartesian(x0, y0, z0); -} - -function d3_geoCentroid(object) { - W0 = W1 = - X0 = Y0 = Z0 = - X1 = Y1 = Z1 = - X2 = Y2 = Z2 = 0; - d3_geoStream(object, centroidStream); - - var x = X2, - y = Y2, - z = Z2, - m = x * x + y * y + z * z; - // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. - if (m < epsilon2$1) { - x = X1, y = Y1, z = Z1; - // If the feature has zero length, fall back to arithmetic mean of point vectors. - if (W1 < epsilon$2) x = X0, y = Y0, z = Z0; - m = x * x + y * y + z * z; - // If the feature still has an undefined ccentroid, then return. - if (m < epsilon2$1) return [NaN, NaN]; + return { + parse: parse, + parseRows: parseRows, + format: format, + formatRows: formatRows + }; } - return [atan2(y, x) * degrees$1, asin(z / sqrt(m)) * degrees$1]; -} + var csv = dsv(","); -function constant$7(x) { - return function() { - return x; - }; -} + var csvParse = csv.parse; + var csvParseRows = csv.parseRows; + var csvFormat = csv.format; + var csvFormatRows = csv.formatRows; -function compose(a, b) { + var tsv = dsv("\t"); - function compose(x, y) { - return x = a(x, y), b(x[0], x[1]); - } + var tsvParse = tsv.parse; + var tsvParseRows = tsv.parseRows; + var tsvFormat = tsv.format; + var tsvFormatRows = tsv.formatRows; - if (a.invert && b.invert) compose.invert = function(x, y) { - return x = b.invert(x, y), x && a.invert(x[0], x[1]); - }; + function center$1(x, y) { + var nodes; - return compose; -} + if (x == null) x = 0; + if (y == null) y = 0; -function rotationIdentity(lambda, phi) { - return [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi]; -} + function force() { + var i, + n = nodes.length, + node, + sx = 0, + sy = 0; -rotationIdentity.invert = rotationIdentity; + for (i = 0; i < n; ++i) { + node = nodes[i], sx += node.x, sy += node.y; + } -function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { - return (deltaLambda %= tau$3) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) - : rotationLambda(deltaLambda)) - : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) - : rotationIdentity); -} + for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) { + node = nodes[i], node.x -= sx, node.y -= sy; + } + } -function forwardRotationLambda(deltaLambda) { - return function(lambda, phi) { - return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi]; - }; -} + force.initialize = function(_) { + nodes = _; + }; -function rotationLambda(deltaLambda) { - var rotation = forwardRotationLambda(deltaLambda); - rotation.invert = forwardRotationLambda(-deltaLambda); - return rotation; -} + force.x = function(_) { + return arguments.length ? (x = +_, force) : x; + }; -function rotationPhiGamma(deltaPhi, deltaGamma) { - var cosDeltaPhi = cos$1(deltaPhi), - sinDeltaPhi = sin$1(deltaPhi), - cosDeltaGamma = cos$1(deltaGamma), - sinDeltaGamma = sin$1(deltaGamma); + force.y = function(_) { + return arguments.length ? (y = +_, force) : y; + }; - function rotation(lambda, phi) { - var cosPhi = cos$1(phi), - x = cos$1(lambda) * cosPhi, - y = sin$1(lambda) * cosPhi, - z = sin$1(phi), - k = z * cosDeltaPhi + x * sinDeltaPhi; - return [ - atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), - asin(k * cosDeltaGamma + y * sinDeltaGamma) - ]; + return force; } - rotation.invert = function(lambda, phi) { - var cosPhi = cos$1(phi), - x = cos$1(lambda) * cosPhi, - y = sin$1(lambda) * cosPhi, - z = sin$1(phi), - k = z * cosDeltaGamma - y * sinDeltaGamma; - return [ - atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), - asin(k * cosDeltaPhi - x * sinDeltaPhi) - ]; - }; - - return rotation; -} - -function rotation(rotate) { - rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0); - - function forward(coordinates) { - coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians); - return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates; + function constant$6(x) { + return function() { + return x; + }; } - forward.invert = function(coordinates) { - coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians); - return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates; - }; - - return forward; -} - -// Generates a circle centered at [0°, 0°], with a given radius and precision. -function circleStream(stream, radius, delta, direction, t0, t1) { - if (!delta) return; - var cosRadius = cos$1(radius), - sinRadius = sin$1(radius), - step = direction * delta; - if (t0 == null) { - t0 = radius + direction * tau$3; - t1 = radius - step / 2; - } else { - t0 = circleRadius(cosRadius, t0); - t1 = circleRadius(cosRadius, t1); - if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$3; - } - for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { - point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]); - stream.point(point[0], point[1]); - } -} - -// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. -function circleRadius(cosRadius, point) { - point = cartesian(point), point[0] -= cosRadius; - cartesianNormalizeInPlace(point); - var radius = acos(-point[1]); - return ((-point[2] < 0 ? -radius : radius) + tau$3 - epsilon$2) % tau$3; -} - -function circle() { - var center = constant$7([0, 0]), - radius = constant$7(90), - precision = constant$7(6), - ring, - rotate, - stream = {point: point}; - - function point(x, y) { - ring.push(x = rotate(x, y)); - x[0] *= degrees$1, x[1] *= degrees$1; + function jiggle() { + return (Math.random() - 0.5) * 1e-6; } - function circle() { - var c = center.apply(this, arguments), - r = radius.apply(this, arguments) * radians, - p = precision.apply(this, arguments) * radians; - ring = []; - rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert; - circleStream(stream, r, p, 1); - c = {type: "Polygon", coordinates: [ring]}; - ring = rotate = null; - return c; + function tree_add(d) { + var x = +this._x.call(null, d), + y = +this._y.call(null, d); + return add(this.cover(x, y), x, y, d); } - circle.center = function(_) { - return arguments.length ? (center = typeof _ === "function" ? _ : constant$7([+_[0], +_[1]]), circle) : center; - }; - - circle.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), circle) : radius; - }; + function add(tree, x, y, d) { + if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points - circle.precision = function(_) { - return arguments.length ? (precision = typeof _ === "function" ? _ : constant$7(+_), circle) : precision; - }; + var parent, + node = tree._root, + leaf = {data: d}, + x0 = tree._x0, + y0 = tree._y0, + x1 = tree._x1, + y1 = tree._y1, + xm, + ym, + xp, + yp, + right, + bottom, + i, + j; - return circle; -} + // If the tree is empty, initialize the root as a leaf. + if (!node) return tree._root = leaf, tree; -function clipBuffer() { - var lines = [], - line; - return { - point: function(x, y) { - line.push([x, y]); - }, - lineStart: function() { - lines.push(line = []); - }, - lineEnd: noop$1, - rejoin: function() { - if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); - }, - result: function() { - var result = lines; - lines = []; - line = null; - return result; + // Find the existing leaf for the new point, or add it. + while (node.length) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; } - }; -} - -function pointEqual(a, b) { - return abs(a[0] - b[0]) < epsilon$2 && abs(a[1] - b[1]) < epsilon$2; -} - -function Intersection(point, points, other, entry) { - this.x = point; - this.z = points; - this.o = other; // another intersection - this.e = entry; // is an entry? - this.v = false; // visited - this.n = this.p = null; // next & previous -} - -// A generalized polygon clipping algorithm: given a polygon that has been cut -// into its visible line segments, and rejoins the segments by interpolating -// along the clip edge. -function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) { - var subject = [], - clip = [], - i, - n; - - segments.forEach(function(segment) { - if ((n = segment.length - 1) <= 0) return; - var n, p0 = segment[0], p1 = segment[n], x; - - // If the first and last points of a segment are coincident, then treat as a - // closed ring. TODO if all rings are closed, then the winding order of the - // exterior ring should be checked. - if (pointEqual(p0, p1)) { - stream.lineStart(); - for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); - stream.lineEnd(); - return; + + // Is the new point is exactly coincident with the existing point? + xp = +tree._x.call(null, node.data); + yp = +tree._y.call(null, node.data); + if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; + + // Otherwise, split the leaf node until the old and new point are separated. + do { + parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); + return parent[j] = node, parent[i] = leaf, tree; + } + + function addAll(data) { + var d, i, n = data.length, + x, + y, + xz = new Array(n), + yz = new Array(n), + x0 = Infinity, + y0 = Infinity, + x1 = -Infinity, + y1 = -Infinity; + + // Compute the points and their extent. + for (i = 0; i < n; ++i) { + if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; + xz[i] = x; + yz[i] = y; + if (x < x0) x0 = x; + if (x > x1) x1 = x; + if (y < y0) y0 = y; + if (y > y1) y1 = y; } - subject.push(x = new Intersection(p0, segment, null, true)); - clip.push(x.o = new Intersection(p0, null, x, false)); - subject.push(x = new Intersection(p1, segment, null, false)); - clip.push(x.o = new Intersection(p1, null, x, true)); - }); + // If there were no (valid) points, inherit the existing extent. + if (x1 < x0) x0 = this._x0, x1 = this._x1; + if (y1 < y0) y0 = this._y0, y1 = this._y1; - if (!subject.length) return; + // Expand the tree to cover the new points. + this.cover(x0, y0).cover(x1, y1); - clip.sort(compareIntersection); - link$1(subject); - link$1(clip); + // Add the new points. + for (i = 0; i < n; ++i) { + add(this, xz[i], yz[i], data[i]); + } - for (i = 0, n = clip.length; i < n; ++i) { - clip[i].e = startInside = !startInside; + return this; } - var start = subject[0], - points, - point; + function tree_cover(x, y) { + if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points - while (1) { - // Find first unvisited intersection. - var current = start, - isSubject = true; - while (current.v) if ((current = current.n) === start) return; - points = current.z; - stream.lineStart(); - do { - current.v = current.o.v = true; - if (current.e) { - if (isSubject) { - for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.n.x, 1, stream); + var x0 = this._x0, + y0 = this._y0, + x1 = this._x1, + y1 = this._y1; + + // If the quadtree has no extent, initialize them. + // Integer extent are necessary so that if we later double the extent, + // the existing quadrant boundaries don’t change due to floating point error! + if (isNaN(x0)) { + x1 = (x0 = Math.floor(x)) + 1; + y1 = (y0 = Math.floor(y)) + 1; + } + + // Otherwise, double repeatedly to cover. + else if (x0 > x || x > x1 || y0 > y || y > y1) { + var z = x1 - x0, + node = this._root, + parent, + i; + + switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) { + case 0: { + do parent = new Array(4), parent[i] = node, node = parent; + while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1); + break; } - current = current.n; - } else { - if (isSubject) { - points = current.p.z; - for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.p.x, -1, stream); + case 1: { + do parent = new Array(4), parent[i] = node, node = parent; + while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1); + break; + } + case 2: { + do parent = new Array(4), parent[i] = node, node = parent; + while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y); + break; + } + case 3: { + do parent = new Array(4), parent[i] = node, node = parent; + while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y); + break; } - current = current.p; } - current = current.o; - points = current.z; - isSubject = !isSubject; - } while (!current.v); - stream.lineEnd(); + + if (this._root && this._root.length) this._root = node; + } + + // If the quadtree covers the point already, just return. + else return this; + + this._x0 = x0; + this._y0 = y0; + this._x1 = x1; + this._y1 = y1; + return this; } -} -function link$1(array) { - if (!(n = array.length)) return; - var n, - i = 0, - a = array[0], - b; - while (++i < n) { - a.n = b = array[i]; - b.p = a; - a = b; + function tree_data() { + var data = []; + this.visit(function(node) { + if (!node.length) do data.push(node.data); while (node = node.next) + }); + return data; } - a.n = b = array[0]; - b.p = a; -} -var sum$1 = adder(); + function tree_extent(_) { + return arguments.length + ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) + : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; + } -function polygonContains(polygon, point) { - var lambda = point[0], - phi = point[1], - normal = [sin$1(lambda), -cos$1(lambda), 0], - angle = 0, - winding = 0; + function Quad(node, x0, y0, x1, y1) { + this.node = node; + this.x0 = x0; + this.y0 = y0; + this.x1 = x1; + this.y1 = y1; + } - sum$1.reset(); + function tree_find(x, y, radius) { + var data, + x0 = this._x0, + y0 = this._y0, + x1, + y1, + x2, + y2, + x3 = this._x1, + y3 = this._y1, + quads = [], + node = this._root, + q, + i; - for (var i = 0, n = polygon.length; i < n; ++i) { - if (!(m = (ring = polygon[i]).length)) continue; - var ring, - m, - point0 = ring[m - 1], - lambda0 = point0[0], - phi0 = point0[1] / 2 + quarterPi, - sinPhi0 = sin$1(phi0), - cosPhi0 = cos$1(phi0); - - for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { - var point1 = ring[j], - lambda1 = point1[0], - phi1 = point1[1] / 2 + quarterPi, - sinPhi1 = sin$1(phi1), - cosPhi1 = cos$1(phi1), - delta = lambda1 - lambda0, - sign$$1 = delta >= 0 ? 1 : -1, - absDelta = sign$$1 * delta, - antimeridian = absDelta > pi$3, - k = sinPhi0 * sinPhi1; - - sum$1.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta))); - angle += antimeridian ? delta + sign$$1 * tau$3 : delta; - - // Are the longitudes either side of the point’s meridian (lambda), - // and are the latitudes smaller than the parallel (phi)? - if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { - var arc = cartesianCross(cartesian(point0), cartesian(point1)); - cartesianNormalizeInPlace(arc); - var intersection = cartesianCross(normal, arc); - cartesianNormalizeInPlace(intersection); - var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]); - if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { - winding += antimeridian ^ delta >= 0 ? 1 : -1; + if (node) quads.push(new Quad(node, x0, y0, x3, y3)); + if (radius == null) radius = Infinity; + else { + x0 = x - radius, y0 = y - radius; + x3 = x + radius, y3 = y + radius; + radius *= radius; + } + + while (q = quads.pop()) { + + // Stop searching if this quadrant can’t contain a closer node. + if (!(node = q.node) + || (x1 = q.x0) > x3 + || (y1 = q.y0) > y3 + || (x2 = q.x1) < x0 + || (y2 = q.y1) < y0) continue; + + // Bisect the current quadrant. + if (node.length) { + var xm = (x1 + x2) / 2, + ym = (y1 + y2) / 2; + + quads.push( + new Quad(node[3], xm, ym, x2, y2), + new Quad(node[2], x1, ym, xm, y2), + new Quad(node[1], xm, y1, x2, ym), + new Quad(node[0], x1, y1, xm, ym) + ); + + // Visit the closest quadrant first. + if (i = (y >= ym) << 1 | (x >= xm)) { + q = quads[quads.length - 1]; + quads[quads.length - 1] = quads[quads.length - 1 - i]; + quads[quads.length - 1 - i] = q; } } - } - } - // First, determine whether the South pole is inside or outside: - // - // It is inside if: - // * the polygon winds around it in a clockwise direction. - // * the polygon does not (cumulatively) wind around it, but has a negative - // (counter-clockwise) area. - // - // Second, count the (signed) number of times a segment crosses a lambda - // from the point to the South pole. If it is zero, then the point is the - // same side as the South pole. - - return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1); -} - -function clip(pointVisible, clipLine, interpolate, start) { - return function(sink) { - var line = clipLine(sink), - ringBuffer = clipBuffer(), - ringSink = clipLine(ringBuffer), - polygonStarted = false, - polygon, - segments, - ring; - - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - clip.point = pointRing; - clip.lineStart = ringStart; - clip.lineEnd = ringEnd; - segments = []; - polygon = []; - }, - polygonEnd: function() { - clip.point = point; - clip.lineStart = lineStart; - clip.lineEnd = lineEnd; - segments = merge(segments); - var startInside = polygonContains(polygon, start); - if (segments.length) { - if (!polygonStarted) sink.polygonStart(), polygonStarted = true; - clipRejoin(segments, compareIntersection, startInside, interpolate, sink); - } else if (startInside) { - if (!polygonStarted) sink.polygonStart(), polygonStarted = true; - sink.lineStart(); - interpolate(null, null, 1, sink); - sink.lineEnd(); + // Visit this point. (Visiting coincident points isn’t necessary!) + else { + var dx = x - +this._x.call(null, node.data), + dy = y - +this._y.call(null, node.data), + d2 = dx * dx + dy * dy; + if (d2 < radius) { + var d = Math.sqrt(radius = d2); + x0 = x - d, y0 = y - d; + x3 = x + d, y3 = y + d; + data = node.data; } - if (polygonStarted) sink.polygonEnd(), polygonStarted = false; - segments = polygon = null; - }, - sphere: function() { - sink.polygonStart(); - sink.lineStart(); - interpolate(null, null, 1, sink); - sink.lineEnd(); - sink.polygonEnd(); } - }; - - function point(lambda, phi) { - if (pointVisible(lambda, phi)) sink.point(lambda, phi); } - function pointLine(lambda, phi) { - line.point(lambda, phi); - } + return data; + } + + function tree_remove(d) { + if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points + + var parent, + node = this._root, + retainer, + previous, + next, + x0 = this._x0, + y0 = this._y0, + x1 = this._x1, + y1 = this._y1, + x, + y, + xm, + ym, + right, + bottom, + i, + j; - function lineStart() { - clip.point = pointLine; - line.lineStart(); + // If the tree is empty, initialize the root as a leaf. + if (!node) return this; + + // Find the leaf node for the point. + // While descending, also retain the deepest parent with a non-removed sibling. + if (node.length) while (true) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (!(parent = node, node = node[i = bottom << 1 | right])) return this; + if (!node.length) break; + if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; } - function lineEnd() { - clip.point = point; - line.lineEnd(); + // Find the point to remove. + while (node.data !== d) if (!(previous = node, node = node.next)) return this; + if (next = node.next) delete node.next; + + // If there are multiple coincident points, remove just the point. + if (previous) return (next ? previous.next = next : delete previous.next), this; + + // If this is the root point, remove it. + if (!parent) return this._root = next, this; + + // Remove this leaf. + next ? parent[i] = next : delete parent[i]; + + // If the parent now contains exactly one leaf, collapse superfluous parents. + if ((node = parent[0] || parent[1] || parent[2] || parent[3]) + && node === (parent[3] || parent[2] || parent[1] || parent[0]) + && !node.length) { + if (retainer) retainer[j] = node; + else this._root = node; } - function pointRing(lambda, phi) { - ring.push([lambda, phi]); - ringSink.point(lambda, phi); + return this; + } + + function removeAll(data) { + for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); + return this; + } + + function tree_root() { + return this._root; + } + + function tree_size() { + var size = 0; + this.visit(function(node) { + if (!node.length) do ++size; while (node = node.next) + }); + return size; + } + + function tree_visit(callback) { + var quads = [], q, node = this._root, child, x0, y0, x1, y1; + if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1)); + while (q = quads.pop()) { + if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { + var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; + if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); + if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); + if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); + if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); + } } + return this; + } - function ringStart() { - ringSink.lineStart(); - ring = []; + function tree_visitAfter(callback) { + var quads = [], next = [], q; + if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1)); + while (q = quads.pop()) { + var node = q.node; + if (node.length) { + var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; + if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); + if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); + if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); + if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); + } + next.push(q); + } + while (q = next.pop()) { + callback(q.node, q.x0, q.y0, q.x1, q.y1); } + return this; + } - function ringEnd() { - pointRing(ring[0][0], ring[0][1]); - ringSink.lineEnd(); + function defaultX(d) { + return d[0]; + } - var clean = ringSink.clean(), - ringSegments = ringBuffer.result(), - i, n = ringSegments.length, m, - segment, - point; + function tree_x(_) { + return arguments.length ? (this._x = _, this) : this._x; + } - ring.pop(); - polygon.push(ring); - ring = null; + function defaultY(d) { + return d[1]; + } - if (!n) return; + function tree_y(_) { + return arguments.length ? (this._y = _, this) : this._y; + } - // No intersections. - if (clean & 1) { - segment = ringSegments[0]; - if ((m = segment.length - 1) > 0) { - if (!polygonStarted) sink.polygonStart(), polygonStarted = true; - sink.lineStart(); - for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); - sink.lineEnd(); - } - return; - } + function quadtree(nodes, x, y) { + var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN); + return nodes == null ? tree : tree.addAll(nodes); + } + + function Quadtree(x, y, x0, y0, x1, y1) { + this._x = x; + this._y = y; + this._x0 = x0; + this._y0 = y0; + this._x1 = x1; + this._y1 = y1; + this._root = undefined; + } + + function leaf_copy(leaf) { + var copy = {data: leaf.data}, next = copy; + while (leaf = leaf.next) next = next.next = {data: leaf.data}; + return copy; + } + + var treeProto = quadtree.prototype = Quadtree.prototype; + + treeProto.copy = function() { + var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), + node = this._root, + nodes, + child; - // Rejoin connected segments. - // TODO reuse ringBuffer.rejoin()? - if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); + if (!node) return copy; - segments.push(ringSegments.filter(validSegment)); + if (!node.length) return copy._root = leaf_copy(node), copy; + + nodes = [{source: node, target: copy._root = new Array(4)}]; + while (node = nodes.pop()) { + for (var i = 0; i < 4; ++i) { + if (child = node.source[i]) { + if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); + else node.target[i] = leaf_copy(child); + } + } } - return clip; + return copy; }; -} - -function validSegment(segment) { - return segment.length > 1; -} - -// Intersections are sorted along the clip edge. For both antimeridian cutting -// and circle clipping, the same comparison is used. -function compareIntersection(a, b) { - return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1]) - - ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]); -} - -var clipAntimeridian = clip( - function() { return true; }, - clipAntimeridianLine, - clipAntimeridianInterpolate, - [-pi$3, -halfPi$2] -); - -// Takes a line and cuts into visible segments. Return values: 0 - there were -// intersections or the line was empty; 1 - no intersections; 2 - there were -// intersections, and the first and last segments should be rejoined. -function clipAntimeridianLine(stream) { - var lambda0 = NaN, - phi0 = NaN, - sign0 = NaN, - clean; // no intersections - - return { - lineStart: function() { - stream.lineStart(); - clean = 1; - }, - point: function(lambda1, phi1) { - var sign1 = lambda1 > 0 ? pi$3 : -pi$3, - delta = abs(lambda1 - lambda0); - if (abs(delta - pi$3) < epsilon$2) { // line crosses a pole - stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2); - stream.point(sign0, phi0); - stream.lineEnd(); - stream.lineStart(); - stream.point(sign1, phi0); - stream.point(lambda1, phi0); - clean = 0; - } else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian - if (abs(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies - if (abs(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2; - phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); - stream.point(sign0, phi0); - stream.lineEnd(); - stream.lineStart(); - stream.point(sign1, phi0); - clean = 0; - } - stream.point(lambda0 = lambda1, phi0 = phi1); - sign0 = sign1; - }, - lineEnd: function() { - stream.lineEnd(); - lambda0 = phi0 = NaN; - }, - clean: function() { - return 2 - clean; // if intersections, rejoin first and last segments - } - }; -} - -function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { - var cosPhi0, - cosPhi1, - sinLambda0Lambda1 = sin$1(lambda0 - lambda1); - return abs(sinLambda0Lambda1) > epsilon$2 - ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1) - - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0)) - / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) - : (phi0 + phi1) / 2; -} - -function clipAntimeridianInterpolate(from, to, direction, stream) { - var phi; - if (from == null) { - phi = direction * halfPi$2; - stream.point(-pi$3, phi); - stream.point(0, phi); - stream.point(pi$3, phi); - stream.point(pi$3, 0); - stream.point(pi$3, -phi); - stream.point(0, -phi); - stream.point(-pi$3, -phi); - stream.point(-pi$3, 0); - stream.point(-pi$3, phi); - } else if (abs(from[0] - to[0]) > epsilon$2) { - var lambda = from[0] < to[0] ? pi$3 : -pi$3; - phi = direction * lambda / 2; - stream.point(-lambda, phi); - stream.point(0, phi); - stream.point(lambda, phi); - } else { - stream.point(to[0], to[1]); - } -} - -function clipCircle(radius) { - var cr = cos$1(radius), - delta = 6 * radians, - smallRadius = cr > 0, - notHemisphere = abs(cr) > epsilon$2; // TODO optimise for this common case - - function interpolate(from, to, direction, stream) { - circleStream(stream, radius, delta, direction, from, to); - } - - function visible(lambda, phi) { - return cos$1(lambda) * cos$1(phi) > cr; - } - - // Takes a line and cuts into visible segments. Return values used for polygon - // clipping: 0 - there were intersections or the line was empty; 1 - no - // intersections 2 - there were intersections, and the first and last segments - // should be rejoined. - function clipLine(stream) { - var point0, // previous point - c0, // code for previous point - v0, // visibility of previous point - v00, // visibility of first point - clean; // no intersections - return { - lineStart: function() { - v00 = v0 = false; - clean = 1; - }, - point: function(lambda, phi) { - var point1 = [lambda, phi], - point2, - v = visible(lambda, phi), - c = smallRadius - ? v ? 0 : code(lambda, phi) - : v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0; - if (!point0 && (v00 = v0 = v)) stream.lineStart(); - // Handle degeneracies. - // TODO ignore if not clipping polygons. - if (v !== v0) { - point2 = intersect(point0, point1); - if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) { - point1[0] += epsilon$2; - point1[1] += epsilon$2; - v = visible(point1[0], point1[1]); - } + + treeProto.add = tree_add; + treeProto.addAll = addAll; + treeProto.cover = tree_cover; + treeProto.data = tree_data; + treeProto.extent = tree_extent; + treeProto.find = tree_find; + treeProto.remove = tree_remove; + treeProto.removeAll = removeAll; + treeProto.root = tree_root; + treeProto.size = tree_size; + treeProto.visit = tree_visit; + treeProto.visitAfter = tree_visitAfter; + treeProto.x = tree_x; + treeProto.y = tree_y; + + function x(d) { + return d.x + d.vx; + } + + function y(d) { + return d.y + d.vy; + } + + function collide(radius) { + var nodes, + radii, + strength = 1, + iterations = 1; + + if (typeof radius !== "function") radius = constant$6(radius == null ? 1 : +radius); + + function force() { + var i, n = nodes.length, + tree, + node, + xi, + yi, + ri, + ri2; + + for (var k = 0; k < iterations; ++k) { + tree = quadtree(nodes, x, y).visitAfter(prepare); + for (i = 0; i < n; ++i) { + node = nodes[i]; + ri = radii[node.index], ri2 = ri * ri; + xi = node.x + node.vx; + yi = node.y + node.vy; + tree.visit(apply); } - if (v !== v0) { - clean = 0; - if (v) { - // outside going in - stream.lineStart(); - point2 = intersect(point1, point0); - stream.point(point2[0], point2[1]); - } else { - // inside going out - point2 = intersect(point0, point1); - stream.point(point2[0], point2[1]); - stream.lineEnd(); - } - point0 = point2; - } else if (notHemisphere && point0 && smallRadius ^ v) { - var t; - // If the codes for two points are different, or are both zero, - // and there this segment intersects with the small circle. - if (!(c & c0) && (t = intersect(point1, point0, true))) { - clean = 0; - if (smallRadius) { - stream.lineStart(); - stream.point(t[0][0], t[0][1]); - stream.point(t[1][0], t[1][1]); - stream.lineEnd(); - } else { - stream.point(t[1][0], t[1][1]); - stream.lineEnd(); - stream.lineStart(); - stream.point(t[0][0], t[0][1]); + } + + function apply(quad, x0, y0, x1, y1) { + var data = quad.data, rj = quad.r, r = ri + rj; + if (data) { + if (data.index > node.index) { + var x = xi - data.x - data.vx, + y = yi - data.y - data.vy, + l = x * x + y * y; + if (l < r * r) { + if (x === 0) x = jiggle(), l += x * x; + if (y === 0) y = jiggle(), l += y * y; + l = (r - (l = Math.sqrt(l))) / l * strength; + node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); + node.vy += (y *= l) * r; + data.vx -= x * (r = 1 - r); + data.vy -= y * r; } } + return; } - if (v && (!point0 || !pointEqual(point0, point1))) { - stream.point(point1[0], point1[1]); + return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; + } + } + + function prepare(quad) { + if (quad.data) return quad.r = radii[quad.data.index]; + for (var i = quad.r = 0; i < 4; ++i) { + if (quad[i] && quad[i].r > quad.r) { + quad.r = quad[i].r; } - point0 = point1, v0 = v, c0 = c; - }, - lineEnd: function() { - if (v0) stream.lineEnd(); - point0 = null; - }, - // Rejoin first and last segments if there were intersections and the first - // and last points were visible. - clean: function() { - return clean | ((v00 && v0) << 1); } - }; - } + } - // Intersects the great circle between a and b with the clip circle. - function intersect(a, b, two) { - var pa = cartesian(a), - pb = cartesian(b); - - // We have two planes, n1.p = d1 and n2.p = d2. - // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). - var n1 = [1, 0, 0], // normal - n2 = cartesianCross(pa, pb), - n2n2 = cartesianDot(n2, n2), - n1n2 = n2[0], // cartesianDot(n1, n2), - determinant = n2n2 - n1n2 * n1n2; - - // Two polar points. - if (!determinant) return !two && a; - - var c1 = cr * n2n2 / determinant, - c2 = -cr * n1n2 / determinant, - n1xn2 = cartesianCross(n1, n2), - A = cartesianScale(n1, c1), - B = cartesianScale(n2, c2); - cartesianAddInPlace(A, B); - - // Solve |p(t)|^2 = 1. - var u = n1xn2, - w = cartesianDot(A, u), - uu = cartesianDot(u, u), - t2 = w * w - uu * (cartesianDot(A, A) - 1); - - if (t2 < 0) return; - - var t = sqrt(t2), - q = cartesianScale(u, (-w - t) / uu); - cartesianAddInPlace(q, A); - q = spherical(q); - - if (!two) return q; - - // Two intersection points. - var lambda0 = a[0], - lambda1 = b[0], - phi0 = a[1], - phi1 = b[1], - z; - - if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; - - var delta = lambda1 - lambda0, - polar = abs(delta - pi$3) < epsilon$2, - meridian = polar || delta < epsilon$2; - - if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; - - // Check that the first point is between a and b. - if (meridian - ? polar - ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$2 ? phi0 : phi1) - : phi0 <= q[1] && q[1] <= phi1 - : delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) { - var q1 = cartesianScale(u, (-w + t) / uu); - cartesianAddInPlace(q1, A); - return [q, spherical(q1)]; - } - } - - // Generates a 4-bit vector representing the location of a point relative to - // the small circle's bounding box. - function code(lambda, phi) { - var r = smallRadius ? radius : pi$3 - radius, - code = 0; - if (lambda < -r) code |= 1; // left - else if (lambda > r) code |= 2; // right - if (phi < -r) code |= 4; // below - else if (phi > r) code |= 8; // above - return code; - } - - return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]); -} - -function clipLine(a, b, x0, y0, x1, y1) { - var ax = a[0], - ay = a[1], - bx = b[0], - by = b[1], - t0 = 0, - t1 = 1, - dx = bx - ax, - dy = by - ay, - r; - - r = x0 - ax; - if (!dx && r > 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; - if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; - return true; -} - -var clipMax = 1e9, clipMin = -clipMax; - -// TODO Use d3-polygon’s polygonContains here for the ring check? -// TODO Eliminate duplicate buffering in clipBuffer and polygon.push? - -function clipRectangle(x0, y0, x1, y1) { - - function visible(x, y) { - return x0 <= x && x <= x1 && y0 <= y && y <= y1; - } - - function interpolate(from, to, direction, stream) { - var a = 0, a1 = 0; - if (from == null - || (a = corner(from, direction)) !== (a1 = corner(to, direction)) - || comparePoint(from, to) < 0 ^ direction > 0) { - do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); - while ((a = (a + direction + 4) % 4) !== a1); - } else { - stream.point(to[0], to[1]); + function initialize() { + if (!nodes) return; + var i, n = nodes.length, node; + radii = new Array(n); + for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes); } - } - function corner(p, direction) { - return abs(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3 - : abs(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1 - : abs(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0 - : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; + + force.strength = function(_) { + return arguments.length ? (strength = +_, force) : strength; + }; + + force.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : radius; + }; + + return force; } - function compareIntersection(a, b) { - return comparePoint(a.x, b.x); + function index(d) { + return d.index; } - function comparePoint(a, b) { - var ca = corner(a, 1), - cb = corner(b, 1); - return ca !== cb ? ca - cb - : ca === 0 ? b[1] - a[1] - : ca === 1 ? a[0] - b[0] - : ca === 2 ? a[1] - b[1] - : b[0] - a[0]; + function find(nodeById, nodeId) { + var node = nodeById.get(nodeId); + if (!node) throw new Error("missing: " + nodeId); + return node; } - return function(stream) { - var activeStream = stream, - bufferStream = clipBuffer(), - segments, - polygon, - ring, - x__, y__, v__, // first point - x_, y_, v_, // previous point - first, - clean; - - var clipStream = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: polygonStart, - polygonEnd: polygonEnd - }; + function link(links) { + var id = index, + strength = defaultStrength, + strengths, + distance = constant$6(30), + distances, + nodes, + count, + bias, + iterations = 1; - function point(x, y) { - if (visible(x, y)) activeStream.point(x, y); - } + if (links == null) links = []; - function polygonInside() { - var winding = 0; + function defaultStrength(link) { + return 1 / Math.min(count[link.source.index], count[link.target.index]); + } - for (var i = 0, n = polygon.length; i < n; ++i) { - for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { - a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; - if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } - else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } + function force(alpha) { + for (var k = 0, n = links.length; k < iterations; ++k) { + for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) { + link = links[i], source = link.source, target = link.target; + x = target.x + target.vx - source.x - source.vx || jiggle(); + y = target.y + target.vy - source.y - source.vy || jiggle(); + l = Math.sqrt(x * x + y * y); + l = (l - distances[i]) / l * alpha * strengths[i]; + x *= l, y *= l; + target.vx -= x * (b = bias[i]); + target.vy -= y * b; + source.vx += x * (b = 1 - b); + source.vy += y * b; } } - - return winding; } - // Buffer geometry within a polygon and then clip it en masse. - function polygonStart() { - activeStream = bufferStream, segments = [], polygon = [], clean = true; - } + function initialize() { + if (!nodes) return; - function polygonEnd() { - var startInside = polygonInside(), - cleanInside = clean && startInside, - visible = (segments = merge(segments)).length; - if (cleanInside || visible) { - stream.polygonStart(); - if (cleanInside) { - stream.lineStart(); - interpolate(null, null, 1, stream); - stream.lineEnd(); - } - if (visible) { - clipRejoin(segments, compareIntersection, startInside, interpolate, stream); - } - stream.polygonEnd(); + var i, + n = nodes.length, + m = links.length, + nodeById = map$1(nodes, id), + link; + + for (i = 0, count = new Array(n); i < m; ++i) { + link = links[i], link.index = i; + if (typeof link.source !== "object") link.source = find(nodeById, link.source); + if (typeof link.target !== "object") link.target = find(nodeById, link.target); + count[link.source.index] = (count[link.source.index] || 0) + 1; + count[link.target.index] = (count[link.target.index] || 0) + 1; + } + + for (i = 0, bias = new Array(m); i < m; ++i) { + link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); } - activeStream = stream, segments = polygon = ring = null; - } - function lineStart() { - clipStream.point = linePoint; - if (polygon) polygon.push(ring = []); - first = true; - v_ = false; - x_ = y_ = NaN; + strengths = new Array(m), initializeStrength(); + distances = new Array(m), initializeDistance(); } - // TODO rather than special-case polygons, simply handle them separately. - // Ideally, coincident intersection points should be jittered to avoid - // clipping issues. - function lineEnd() { - if (segments) { - linePoint(x__, y__); - if (v__ && v_) bufferStream.rejoin(); - segments.push(bufferStream.result()); + function initializeStrength() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + strengths[i] = +strength(links[i], i, links); } - clipStream.point = point; - if (v_) activeStream.lineEnd(); } - function linePoint(x, y) { - var v = visible(x, y); - if (polygon) ring.push([x, y]); - if (first) { - x__ = x, y__ = y, v__ = v; - first = false; - if (v) { - activeStream.lineStart(); - activeStream.point(x, y); - } - } else { - if (v && v_) activeStream.point(x, y); - else { - var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], - b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; - if (clipLine(a, b, x0, y0, x1, y1)) { - if (!v_) { - activeStream.lineStart(); - activeStream.point(a[0], a[1]); - } - activeStream.point(b[0], b[1]); - if (!v) activeStream.lineEnd(); - clean = false; - } else if (v) { - activeStream.lineStart(); - activeStream.point(x, y); - clean = false; - } - } + function initializeDistance() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + distances[i] = +distance(links[i], i, links); } - x_ = x, y_ = y, v_ = v; } - return clipStream; - }; -} - -function extent$1() { - var x0 = 0, - y0 = 0, - x1 = 960, - y1 = 500, - cache, - cacheStream, - clip; - - return clip = { - stream: function(stream) { - return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream); - }, - extent: function(_) { - return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]]; - } - }; -} - -var lengthSum = adder(), - lambda0$2, - sinPhi0$1, - cosPhi0$1; - -var lengthStream = { - sphere: noop$1, - point: noop$1, - lineStart: lengthLineStart, - lineEnd: noop$1, - polygonStart: noop$1, - polygonEnd: noop$1 -}; - -function lengthLineStart() { - lengthStream.point = lengthPointFirst; - lengthStream.lineEnd = lengthLineEnd; -} - -function lengthLineEnd() { - lengthStream.point = lengthStream.lineEnd = noop$1; -} - -function lengthPointFirst(lambda, phi) { - lambda *= radians, phi *= radians; - lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi); - lengthStream.point = lengthPoint; -} - -function lengthPoint(lambda, phi) { - lambda *= radians, phi *= radians; - var sinPhi = sin$1(phi), - cosPhi = cos$1(phi), - delta = abs(lambda - lambda0$2), - cosDelta = cos$1(delta), - sinDelta = sin$1(delta), - x = cosPhi * sinDelta, - y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta, - z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta; - lengthSum.add(atan2(sqrt(x * x + y * y), z)); - lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi; -} - -function d3_geoLength(object) { - lengthSum.reset(); - d3_geoStream(object, lengthStream); - return +lengthSum; -} - -var coordinates = [null, null], - object$1 = {type: "LineString", coordinates: coordinates}; - -function distance(a, b) { - coordinates[0] = a; - coordinates[1] = b; - return d3_geoLength(object$1); -} - -var containsObjectType = { - Feature: function(object, point) { - return containsGeometry(object.geometry, point); - }, - FeatureCollection: function(object, point) { - var features = object.features, i = -1, n = features.length; - while (++i < n) if (containsGeometry(features[i].geometry, point)) return true; - return false; - } -}; + force.initialize = function(_) { + nodes = _; + initialize(); + }; -var containsGeometryType = { - Sphere: function() { - return true; - }, - Point: function(object, point) { - return containsPoint(object.coordinates, point); - }, - MultiPoint: function(object, point) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) if (containsPoint(coordinates[i], point)) return true; - return false; - }, - LineString: function(object, point) { - return containsLine(object.coordinates, point); - }, - MultiLineString: function(object, point) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) if (containsLine(coordinates[i], point)) return true; - return false; - }, - Polygon: function(object, point) { - return containsPolygon(object.coordinates, point); - }, - MultiPolygon: function(object, point) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) if (containsPolygon(coordinates[i], point)) return true; - return false; - }, - GeometryCollection: function(object, point) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) if (containsGeometry(geometries[i], point)) return true; - return false; - } -}; - -function containsGeometry(geometry, point) { - return geometry && containsGeometryType.hasOwnProperty(geometry.type) - ? containsGeometryType[geometry.type](geometry, point) - : false; -} - -function containsPoint(coordinates, point) { - return distance(coordinates, point) === 0; -} - -function containsLine(coordinates, point) { - var ab = distance(coordinates[0], coordinates[1]), - ao = distance(coordinates[0], point), - ob = distance(point, coordinates[1]); - return ao + ob <= ab + epsilon$2; -} - -function containsPolygon(coordinates, point) { - return !!polygonContains(coordinates.map(ringRadians), pointRadians(point)); -} - -function ringRadians(ring) { - return ring = ring.map(pointRadians), ring.pop(), ring; -} - -function pointRadians(point) { - return [point[0] * radians, point[1] * radians]; -} - -function contains(object, point) { - return (object && containsObjectType.hasOwnProperty(object.type) - ? containsObjectType[object.type] - : containsGeometry)(object, point); -} - -function graticuleX(y0, y1, dy) { - var y = d3_range(y0, y1 - epsilon$2, dy).concat(y1); - return function(x) { return y.map(function(y) { return [x, y]; }); }; -} - -function graticuleY(x0, x1, dx) { - var x = d3_range(x0, x1 - epsilon$2, dx).concat(x1); - return function(y) { return x.map(function(x) { return [x, y]; }); }; -} - -function graticule() { - var x1, x0, X1, X0, - y1, y0, Y1, Y0, - dx = 10, dy = dx, DX = 90, DY = 360, - x, y, X, Y, - precision = 2.5; + force.links = function(_) { + return arguments.length ? (links = _, initialize(), force) : links; + }; - function graticule() { - return {type: "MultiLineString", coordinates: lines()}; - } + force.id = function(_) { + return arguments.length ? (id = _, force) : id; + }; - function lines() { - return d3_range(ceil(X0 / DX) * DX, X1, DX).map(X) - .concat(d3_range(ceil(Y0 / DY) * DY, Y1, DY).map(Y)) - .concat(d3_range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$2; }).map(x)) - .concat(d3_range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$2; }).map(y)); - } + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; - graticule.lines = function() { - return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); - }; + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initializeStrength(), force) : strength; + }; - graticule.outline = function() { - return { - type: "Polygon", - coordinates: [ - X(X0).concat( - Y(Y1).slice(1), - X(X1).reverse().slice(1), - Y(Y0).reverse().slice(1)) - ] + force.distance = function(_) { + return arguments.length ? (distance = typeof _ === "function" ? _ : constant$6(+_), initializeDistance(), force) : distance; }; - }; - graticule.extent = function(_) { - if (!arguments.length) return graticule.extentMinor(); - return graticule.extentMajor(_).extentMinor(_); - }; + return force; + } - graticule.extentMajor = function(_) { - if (!arguments.length) return [[X0, Y0], [X1, Y1]]; - X0 = +_[0][0], X1 = +_[1][0]; - Y0 = +_[0][1], Y1 = +_[1][1]; - if (X0 > X1) _ = X0, X0 = X1, X1 = _; - if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; - return graticule.precision(precision); - }; + function x$1(d) { + return d.x; + } - graticule.extentMinor = function(_) { - if (!arguments.length) return [[x0, y0], [x1, y1]]; - x0 = +_[0][0], x1 = +_[1][0]; - y0 = +_[0][1], y1 = +_[1][1]; - if (x0 > x1) _ = x0, x0 = x1, x1 = _; - if (y0 > y1) _ = y0, y0 = y1, y1 = _; - return graticule.precision(precision); - }; + function y$1(d) { + return d.y; + } - graticule.step = function(_) { - if (!arguments.length) return graticule.stepMinor(); - return graticule.stepMajor(_).stepMinor(_); - }; + var initialRadius = 10, + initialAngle = Math.PI * (3 - Math.sqrt(5)); - graticule.stepMajor = function(_) { - if (!arguments.length) return [DX, DY]; - DX = +_[0], DY = +_[1]; - return graticule; - }; + function simulation(nodes) { + var simulation, + alpha = 1, + alphaMin = 0.001, + alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), + alphaTarget = 0, + velocityDecay = 0.6, + forces = map$1(), + stepper = timer(step), + event = dispatch("tick", "end"); - graticule.stepMinor = function(_) { - if (!arguments.length) return [dx, dy]; - dx = +_[0], dy = +_[1]; - return graticule; - }; + if (nodes == null) nodes = []; - graticule.precision = function(_) { - if (!arguments.length) return precision; - precision = +_; - x = graticuleX(y0, y1, 90); - y = graticuleY(x0, x1, precision); - X = graticuleX(Y0, Y1, 90); - Y = graticuleY(X0, X1, precision); - return graticule; - }; + function step() { + tick(); + event.call("tick", simulation); + if (alpha < alphaMin) { + stepper.stop(); + event.call("end", simulation); + } + } - return graticule - .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]]) - .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]); -} - -function graticule10() { - return graticule()(); -} - -function interpolate$1(a, b) { - var x0 = a[0] * radians, - y0 = a[1] * radians, - x1 = b[0] * radians, - y1 = b[1] * radians, - cy0 = cos$1(y0), - sy0 = sin$1(y0), - cy1 = cos$1(y1), - sy1 = sin$1(y1), - kx0 = cy0 * cos$1(x0), - ky0 = cy0 * sin$1(x0), - kx1 = cy1 * cos$1(x1), - ky1 = cy1 * sin$1(x1), - d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))), - k = sin$1(d); - - var interpolate = d ? function(t) { - var B = sin$1(t *= d) / k, - A = sin$1(d - t) / k, - x = A * kx0 + B * kx1, - y = A * ky0 + B * ky1, - z = A * sy0 + B * sy1; - return [ - atan2(y, x) * degrees$1, - atan2(z, sqrt(x * x + y * y)) * degrees$1 - ]; - } : function() { - return [x0 * degrees$1, y0 * degrees$1]; - }; + function tick() { + var i, n = nodes.length, node; - interpolate.distance = d; - - return interpolate; -} - -function identity$4(x) { - return x; -} - -var areaSum$1 = adder(), - areaRingSum$1 = adder(), - x00, - y00, - x0$1, - y0$1; - -var areaStream$1 = { - point: noop$1, - lineStart: noop$1, - lineEnd: noop$1, - polygonStart: function() { - areaStream$1.lineStart = areaRingStart$1; - areaStream$1.lineEnd = areaRingEnd$1; - }, - polygonEnd: function() { - areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$1; - areaSum$1.add(abs(areaRingSum$1)); - areaRingSum$1.reset(); - }, - result: function() { - var area = areaSum$1 / 2; - areaSum$1.reset(); - return area; - } -}; - -function areaRingStart$1() { - areaStream$1.point = areaPointFirst$1; -} - -function areaPointFirst$1(x, y) { - areaStream$1.point = areaPoint$1; - x00 = x0$1 = x, y00 = y0$1 = y; -} - -function areaPoint$1(x, y) { - areaRingSum$1.add(y0$1 * x - x0$1 * y); - x0$1 = x, y0$1 = y; -} - -function areaRingEnd$1() { - areaPoint$1(x00, y00); -} - -var x0$2 = Infinity, - y0$2 = x0$2, - x1 = -x0$2, - y1 = x1; - -var boundsStream$1 = { - point: boundsPoint$1, - lineStart: noop$1, - lineEnd: noop$1, - polygonStart: noop$1, - polygonEnd: noop$1, - result: function() { - var bounds = [[x0$2, y0$2], [x1, y1]]; - x1 = y1 = -(y0$2 = x0$2 = Infinity); - return bounds; - } -}; - -function boundsPoint$1(x, y) { - if (x < x0$2) x0$2 = x; - if (x > x1) x1 = x; - if (y < y0$2) y0$2 = y; - if (y > y1) y1 = y; -} - -// TODO Enforce positive area for exterior, negative area for interior? - -var X0$1 = 0, - Y0$1 = 0, - Z0$1 = 0, - X1$1 = 0, - Y1$1 = 0, - Z1$1 = 0, - X2$1 = 0, - Y2$1 = 0, - Z2$1 = 0, - x00$1, - y00$1, - x0$3, - y0$3; - -var centroidStream$1 = { - point: centroidPoint$1, - lineStart: centroidLineStart$1, - lineEnd: centroidLineEnd$1, - polygonStart: function() { - centroidStream$1.lineStart = centroidRingStart$1; - centroidStream$1.lineEnd = centroidRingEnd$1; - }, - polygonEnd: function() { - centroidStream$1.point = centroidPoint$1; - centroidStream$1.lineStart = centroidLineStart$1; - centroidStream$1.lineEnd = centroidLineEnd$1; - }, - result: function() { - var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1] - : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1] - : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1] - : [NaN, NaN]; - X0$1 = Y0$1 = Z0$1 = - X1$1 = Y1$1 = Z1$1 = - X2$1 = Y2$1 = Z2$1 = 0; - return centroid; - } -}; - -function centroidPoint$1(x, y) { - X0$1 += x; - Y0$1 += y; - ++Z0$1; -} - -function centroidLineStart$1() { - centroidStream$1.point = centroidPointFirstLine; -} - -function centroidPointFirstLine(x, y) { - centroidStream$1.point = centroidPointLine; - centroidPoint$1(x0$3 = x, y0$3 = y); -} - -function centroidPointLine(x, y) { - var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy); - X1$1 += z * (x0$3 + x) / 2; - Y1$1 += z * (y0$3 + y) / 2; - Z1$1 += z; - centroidPoint$1(x0$3 = x, y0$3 = y); -} - -function centroidLineEnd$1() { - centroidStream$1.point = centroidPoint$1; -} - -function centroidRingStart$1() { - centroidStream$1.point = centroidPointFirstRing; -} - -function centroidRingEnd$1() { - centroidPointRing(x00$1, y00$1); -} - -function centroidPointFirstRing(x, y) { - centroidStream$1.point = centroidPointRing; - centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y); -} - -function centroidPointRing(x, y) { - var dx = x - x0$3, - dy = y - y0$3, - z = sqrt(dx * dx + dy * dy); - - X1$1 += z * (x0$3 + x) / 2; - Y1$1 += z * (y0$3 + y) / 2; - Z1$1 += z; - - z = y0$3 * x - x0$3 * y; - X2$1 += z * (x0$3 + x); - Y2$1 += z * (y0$3 + y); - Z2$1 += z * 3; - centroidPoint$1(x0$3 = x, y0$3 = y); -} - -function PathContext(context) { - this._context = context; -} - -PathContext.prototype = { - _radius: 4.5, - pointRadius: function(_) { - return this._radius = _, this; - }, - polygonStart: function() { - this._line = 0; - }, - polygonEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._line === 0) this._context.closePath(); - this._point = NaN; - }, - point: function(x, y) { - switch (this._point) { - case 0: { - this._context.moveTo(x, y); - this._point = 1; - break; - } - case 1: { - this._context.lineTo(x, y); - break; - } - default: { - this._context.moveTo(x + this._radius, y); - this._context.arc(x, y, this._radius, 0, tau$3); - break; + alpha += (alphaTarget - alpha) * alphaDecay; + + forces.each(function(force) { + force(alpha); + }); + + for (i = 0; i < n; ++i) { + node = nodes[i]; + if (node.fx == null) node.x += node.vx *= velocityDecay; + else node.x = node.fx, node.vx = 0; + if (node.fy == null) node.y += node.vy *= velocityDecay; + else node.y = node.fy, node.vy = 0; } } - }, - result: noop$1 -}; - -var lengthSum$1 = adder(), - lengthRing, - x00$2, - y00$2, - x0$4, - y0$4; - -var lengthStream$1 = { - point: noop$1, - lineStart: function() { - lengthStream$1.point = lengthPointFirst$1; - }, - lineEnd: function() { - if (lengthRing) lengthPoint$1(x00$2, y00$2); - lengthStream$1.point = noop$1; - }, - polygonStart: function() { - lengthRing = true; - }, - polygonEnd: function() { - lengthRing = null; - }, - result: function() { - var length = +lengthSum$1; - lengthSum$1.reset(); - return length; - } -}; - -function lengthPointFirst$1(x, y) { - lengthStream$1.point = lengthPoint$1; - x00$2 = x0$4 = x, y00$2 = y0$4 = y; -} - -function lengthPoint$1(x, y) { - x0$4 -= x, y0$4 -= y; - lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4)); - x0$4 = x, y0$4 = y; -} - -function PathString() { - this._string = []; -} - -PathString.prototype = { - _radius: 4.5, - _circle: circle$1(4.5), - pointRadius: function(_) { - if ((_ = +_) !== this._radius) this._radius = _, this._circle = null; - return this; - }, - polygonStart: function() { - this._line = 0; - }, - polygonEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._line === 0) this._string.push("Z"); - this._point = NaN; - }, - point: function(x, y) { - switch (this._point) { - case 0: { - this._string.push("M", x, ",", y); - this._point = 1; - break; - } - case 1: { - this._string.push("L", x, ",", y); - break; - } - default: { - if (this._circle == null) this._circle = circle$1(this._radius); - this._string.push("M", x, ",", y, this._circle); - break; + + function initializeNodes() { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.index = i; + if (isNaN(node.x) || isNaN(node.y)) { + var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle; + node.x = radius * Math.cos(angle); + node.y = radius * Math.sin(angle); + } + if (isNaN(node.vx) || isNaN(node.vy)) { + node.vx = node.vy = 0; + } } } - }, - result: function() { - if (this._string.length) { - var result = this._string.join(""); - this._string = []; - return result; - } else { - return null; + + function initializeForce(force) { + if (force.initialize) force.initialize(nodes); + return force; } - } -}; -function circle$1(radius) { - return "m0," + radius - + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius - + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius - + "z"; -} + initializeNodes(); -function d3_geoPath(projection, context) { - var pointRadius = 4.5, - projectionStream, - contextStream; + return simulation = { + tick: tick, - function path(object) { - if (object) { - if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); - d3_geoStream(object, projectionStream(contextStream)); - } - return contextStream.result(); - } + restart: function() { + return stepper.restart(step), simulation; + }, - path.area = function(object) { - d3_geoStream(object, projectionStream(areaStream$1)); - return areaStream$1.result(); - }; + stop: function() { + return stepper.stop(), simulation; + }, - path.measure = function(object) { - d3_geoStream(object, projectionStream(lengthStream$1)); - return lengthStream$1.result(); - }; + nodes: function(_) { + return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes; + }, - path.bounds = function(object) { - d3_geoStream(object, projectionStream(boundsStream$1)); - return boundsStream$1.result(); - }; + alpha: function(_) { + return arguments.length ? (alpha = +_, simulation) : alpha; + }, - path.centroid = function(object) { - d3_geoStream(object, projectionStream(centroidStream$1)); - return centroidStream$1.result(); - }; + alphaMin: function(_) { + return arguments.length ? (alphaMin = +_, simulation) : alphaMin; + }, - path.projection = function(_) { - return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$4) : (projection = _).stream, path) : projection; - }; + alphaDecay: function(_) { + return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; + }, - path.context = function(_) { - if (!arguments.length) return context; - contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _); - if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); - return path; - }; + alphaTarget: function(_) { + return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; + }, - path.pointRadius = function(_) { - if (!arguments.length) return pointRadius; - pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); - return path; - }; + velocityDecay: function(_) { + return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; + }, - return path.projection(projection).context(context); -} + force: function(name, _) { + return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); + }, -function d3_geoTransform(methods) { - return { - stream: transformer(methods) - }; -} + find: function(x, y, radius) { + var i = 0, + n = nodes.length, + dx, + dy, + d2, + node, + closest; + + if (radius == null) radius = Infinity; + else radius *= radius; + + for (i = 0; i < n; ++i) { + node = nodes[i]; + dx = x - node.x; + dy = y - node.y; + d2 = dx * dx + dy * dy; + if (d2 < radius) closest = node, radius = d2; + } -function transformer(methods) { - return function(stream) { - var s = new TransformStream; - for (var key in methods) s[key] = methods[key]; - s.stream = stream; - return s; - }; -} - -function TransformStream() {} - -TransformStream.prototype = { - constructor: TransformStream, - point: function(x, y) { this.stream.point(x, y); }, - sphere: function() { this.stream.sphere(); }, - lineStart: function() { this.stream.lineStart(); }, - lineEnd: function() { this.stream.lineEnd(); }, - polygonStart: function() { this.stream.polygonStart(); }, - polygonEnd: function() { this.stream.polygonEnd(); } -}; - -function fit(projection, fitBounds, object) { - var clip = projection.clipExtent && projection.clipExtent(); - projection.scale(150).translate([0, 0]); - if (clip != null) projection.clipExtent(null); - d3_geoStream(object, projection.stream(boundsStream$1)); - fitBounds(boundsStream$1.result()); - if (clip != null) projection.clipExtent(clip); - return projection; -} - -function fitExtent(projection, extent, object) { - return fit(projection, function(b) { - var w = extent[1][0] - extent[0][0], - h = extent[1][1] - extent[0][1], - k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), - x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, - y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; - projection.scale(150 * k).translate([x, y]); - }, object); -} - -function fitSize(projection, size, object) { - return fitExtent(projection, [[0, 0], size], object); -} - -function fitWidth(projection, width, object) { - return fit(projection, function(b) { - var w = +width, - k = w / (b[1][0] - b[0][0]), - x = (w - k * (b[1][0] + b[0][0])) / 2, - y = -k * b[0][1]; - projection.scale(150 * k).translate([x, y]); - }, object); -} - -function fitHeight(projection, height, object) { - return fit(projection, function(b) { - var h = +height, - k = h / (b[1][1] - b[0][1]), - x = -k * b[0][0], - y = (h - k * (b[1][1] + b[0][1])) / 2; - projection.scale(150 * k).translate([x, y]); - }, object); -} - -var maxDepth = 16, // maximum depth of subdivision - cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance) - -function resample(project, delta2) { - return +delta2 ? resample$1(project, delta2) : resampleNone(project); -} - -function resampleNone(project) { - return transformer({ - point: function(x, y) { - x = project(x, y); - this.stream.point(x[0], x[1]); - } - }); -} - -function resample$1(project, delta2) { - - function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { - var dx = x1 - x0, - dy = y1 - y0, - d2 = dx * dx + dy * dy; - if (d2 > 4 * delta2 && depth--) { - var a = a0 + a1, - b = b0 + b1, - c = c0 + c1, - m = sqrt(a * a + b * b + c * c), - phi2 = asin(c /= m), - lambda2 = abs(abs(c) - 1) < epsilon$2 || abs(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a), - p = project(lambda2, phi2), - x2 = p[0], - y2 = p[1], - dx2 = x2 - x0, - dy2 = y2 - y0, - dz = dy * dx2 - dx * dy2; - if (dz * dz / d2 > delta2 // perpendicular projected distance - || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end - || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance - resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); - stream.point(x2, y2); - resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); - } - } - } - return function(stream) { - var lambda00, x00, y00, a00, b00, c00, // first point - lambda0, x0, y0, a0, b0, c0; // previous point - - var resampleStream = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, - polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } + return closest; + }, + + on: function(name, _) { + return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); + } }; + } - function point(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - } + function manyBody() { + var nodes, + node, + alpha, + strength = constant$6(-30), + strengths, + distanceMin2 = 1, + distanceMax2 = Infinity, + theta2 = 0.81; - function lineStart() { - x0 = NaN; - resampleStream.point = linePoint; - stream.lineStart(); + function force(_) { + var i, n = nodes.length, tree = quadtree(nodes, x$1, y$1).visitAfter(accumulate); + for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); } - function linePoint(lambda, phi) { - var c = cartesian([lambda, phi]), p = project(lambda, phi); - resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); - stream.point(x0, y0); + function initialize() { + if (!nodes) return; + var i, n = nodes.length, node; + strengths = new Array(n); + for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); } - function lineEnd() { - resampleStream.point = point; - stream.lineEnd(); - } + function accumulate(quad) { + var strength = 0, q, c, weight = 0, x, y, i; - function ringStart() { - lineStart(); - resampleStream.point = ringPoint; - resampleStream.lineEnd = ringEnd; - } + // For internal nodes, accumulate forces from child quadrants. + if (quad.length) { + for (x = y = i = 0; i < 4; ++i) { + if ((q = quad[i]) && (c = Math.abs(q.value))) { + strength += q.value, weight += c, x += c * q.x, y += c * q.y; + } + } + quad.x = x / weight; + quad.y = y / weight; + } - function ringPoint(lambda, phi) { - linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; - resampleStream.point = linePoint; - } + // For leaf nodes, accumulate forces from coincident quadrants. + else { + q = quad; + q.x = q.data.x; + q.y = q.data.y; + do strength += strengths[q.data.index]; + while (q = q.next); + } - function ringEnd() { - resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); - resampleStream.lineEnd = lineEnd; - lineEnd(); + quad.value = strength; } - return resampleStream; - }; -} + function apply(quad, x1, _, x2) { + if (!quad.value) return true; -var transformRadians = transformer({ - point: function(x, y) { - this.stream.point(x * radians, y * radians); - } -}); + var x = quad.x - node.x, + y = quad.y - node.y, + w = x2 - x1, + l = x * x + y * y; -function transformRotate(rotate) { - return transformer({ - point: function(x, y) { - var r = rotate(x, y); - return this.stream.point(r[0], r[1]); + // Apply the Barnes-Hut approximation if possible. + // Limit forces for very close nodes; randomize direction if coincident. + if (w * w / theta2 < l) { + if (l < distanceMax2) { + if (x === 0) x = jiggle(), l += x * x; + if (y === 0) y = jiggle(), l += y * y; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + node.vx += x * quad.value * alpha / l; + node.vy += y * quad.value * alpha / l; + } + return true; + } + + // Otherwise, process points directly. + else if (quad.length || l >= distanceMax2) return; + + // Limit forces for very close nodes; randomize direction if coincident. + if (quad.data !== node || quad.next) { + if (x === 0) x = jiggle(), l += x * x; + if (y === 0) y = jiggle(), l += y * y; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + } + + do if (quad.data !== node) { + w = strengths[quad.data.index] * alpha / l; + node.vx += x * w; + node.vy += y * w; + } while (quad = quad.next); } - }); -} -function projection(project) { - return projectionMutator(function() { return project; })(); -} + force.initialize = function(_) { + nodes = _; + initialize(); + }; -function projectionMutator(projectAt) { - var project, - k = 150, // scale - x = 480, y = 250, // translate - dx, dy, lambda = 0, phi = 0, // center - deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate - theta = null, preclip = clipAntimeridian, // clip angle - x0 = null, y0, x1, y1, postclip = identity$4, // clip extent - delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision - cache, - cacheStream; + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; + }; - function projection(point) { - point = projectRotate(point[0] * radians, point[1] * radians); - return [point[0] * k + dx, dy - point[1] * k]; - } + force.distanceMin = function(_) { + return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); + }; - function invert(point) { - point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k); - return point && [point[0] * degrees$1, point[1] * degrees$1]; - } + force.distanceMax = function(_) { + return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); + }; - function projectTransform(x, y) { - return x = project(x, y), [x[0] * k + dx, dy - x[1] * k]; + force.theta = function(_) { + return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); + }; + + return force; } - projection.stream = function(stream) { - return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream))))); - }; + function radial(radius, x, y) { + var nodes, + strength = constant$6(0.1), + strengths, + radiuses; + + if (typeof radius !== "function") radius = constant$6(+radius); + if (x == null) x = 0; + if (y == null) y = 0; + + function force(alpha) { + for (var i = 0, n = nodes.length; i < n; ++i) { + var node = nodes[i], + dx = node.x - x || 1e-6, + dy = node.y - y || 1e-6, + r = Math.sqrt(dx * dx + dy * dy), + k = (radiuses[i] - r) * strengths[i] * alpha / r; + node.vx += dx * k; + node.vy += dy * k; + } + } - projection.preclip = function(_) { - return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip; - }; + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + radiuses = new Array(n); + for (i = 0; i < n; ++i) { + radiuses[i] = +radius(nodes[i], i, nodes); + strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes); + } + } - projection.postclip = function(_) { - return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; - }; + force.initialize = function(_) { + nodes = _, initialize(); + }; - projection.clipAngle = function(_) { - return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1; - }; + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; + }; - projection.clipExtent = function(_) { - return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; - }; + force.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : radius; + }; - projection.scale = function(_) { - return arguments.length ? (k = +_, recenter()) : k; - }; + force.x = function(_) { + return arguments.length ? (x = +_, force) : x; + }; - projection.translate = function(_) { - return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; - }; + force.y = function(_) { + return arguments.length ? (y = +_, force) : y; + }; - projection.center = function(_) { - return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1]; - }; + return force; + } - projection.rotate = function(_) { - return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1]; - }; + function x$2(x) { + var strength = constant$6(0.1), + nodes, + strengths, + xz; - projection.precision = function(_) { - return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2); - }; + if (typeof x !== "function") x = constant$6(x == null ? 0 : +x); - projection.fitExtent = function(extent, object) { - return fitExtent(projection, extent, object); - }; + function force(alpha) { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; + } + } - projection.fitSize = function(size, object) { - return fitSize(projection, size, object); - }; + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + xz = new Array(n); + for (i = 0; i < n; ++i) { + strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + } + } - projection.fitWidth = function(width, object) { - return fitWidth(projection, width, object); - }; + force.initialize = function(_) { + nodes = _; + initialize(); + }; - projection.fitHeight = function(height, object) { - return fitHeight(projection, height, object); - }; + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; + }; - function recenter() { - projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project); - var center = project(lambda, phi); - dx = x - center[0] * k; - dy = y + center[1] * k; - return reset(); - } + force.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : x; + }; - function reset() { - cache = cacheStream = null; - return projection; + return force; } - return function() { - project = projectAt.apply(this, arguments); - projection.invert = project.invert && invert; - return recenter(); - }; -} + function y$2(y) { + var strength = constant$6(0.1), + nodes, + strengths, + yz; -function conicProjection(projectAt) { - var phi0 = 0, - phi1 = pi$3 / 3, - m = projectionMutator(projectAt), - p = m(phi0, phi1); + if (typeof y !== "function") y = constant$6(y == null ? 0 : +y); - p.parallels = function(_) { - return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1]; - }; + function force(alpha) { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + yz = new Array(n); + for (i = 0; i < n; ++i) { + strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + } + } - return p; -} + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; + }; -function cylindricalEqualAreaRaw(phi0) { - var cosPhi0 = cos$1(phi0); + force.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : y; + }; - function forward(lambda, phi) { - return [lambda * cosPhi0, sin$1(phi) / cosPhi0]; + return force; } - forward.invert = function(x, y) { - return [x / cosPhi0, asin(y * cosPhi0)]; - }; + // Computes the decimal coefficient and exponent of the specified number x with + // significant digits p, where x is positive and p is in [1, 21] or undefined. + // For example, formatDecimal(1.23) returns ["123", 0]. + function formatDecimal(x, p) { + if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity + var i, coefficient = x.slice(0, i); - return forward; -} + // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ + // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). + return [ + coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, + +x.slice(i + 1) + ]; + } -function conicEqualAreaRaw(y0, y1) { - var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2; + function exponent$1(x) { + return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN; + } - // Are the parallels symmetrical around the Equator? - if (abs(n) < epsilon$2) return cylindricalEqualAreaRaw(y0); + function formatGroup(grouping, thousands) { + return function(value, width) { + var i = value.length, + t = [], + j = 0, + g = grouping[0], + length = 0; + + while (i > 0 && g > 0) { + if (length + g + 1 > width) g = Math.max(1, width - length); + t.push(value.substring(i -= g, i + g)); + if ((length += g + 1) > width) break; + g = grouping[j = (j + 1) % grouping.length]; + } - var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n; + return t.reverse().join(thousands); + }; + } - function project(x, y) { - var r = sqrt(c - 2 * n * sin$1(y)) / n; - return [r * sin$1(x *= n), r0 - r * cos$1(x)]; + function formatNumerals(numerals) { + return function(value) { + return value.replace(/[0-9]/g, function(i) { + return numerals[+i]; + }); + }; } - project.invert = function(x, y) { - var r0y = r0 - y; - return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; - }; + function formatDefault(x, p) { + x = x.toPrecision(p); - return project; -} - -function conicEqualArea() { - return conicProjection(conicEqualAreaRaw) - .scale(155.424) - .center([0, 33.6442]); -} - -function albers() { - return conicEqualArea() - .parallels([29.5, 45.5]) - .scale(1070) - .translate([480, 250]) - .rotate([96, 0]) - .center([-0.6, 38.7]); -} - -// The projections must have mutually exclusive clip regions on the sphere, -// as this will avoid emitting interleaving lines and polygons. -function multiplex(streams) { - var n = streams.length; - return { - point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, - sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, - lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, - lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, - polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, - polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } - }; -} - -// A composite projection for the United States, configured by default for -// 960×500. The projection also works quite well at 960×600 if you change the -// scale to 1285 and adjust the translate accordingly. The set of standard -// parallels for each region comes from USGS, which is published here: -// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers -function albersUsa() { - var cache, - cacheStream, - lower48 = albers(), lower48Point, - alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 - hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 - point, pointStream = {point: function(x, y) { point = [x, y]; }}; - - function albersUsa(coordinates) { - var x = coordinates[0], y = coordinates[1]; - return point = null, (lower48Point.point(x, y), point) - || (alaskaPoint.point(x, y), point) - || (hawaiiPoint.point(x, y), point); - } - - albersUsa.invert = function(coordinates) { - var k = lower48.scale(), - t = lower48.translate(), - x = (coordinates[0] - t[0]) / k, - y = (coordinates[1] - t[1]) / k; - return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska - : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii - : lower48).invert(coordinates); - }; + out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) { + switch (x[i]) { + case ".": i0 = i1 = i; break; + case "0": if (i0 === 0) i0 = i; i1 = i; break; + case "e": break out; + default: if (i0 > 0) i0 = 0; break; + } + } - albersUsa.stream = function(stream) { - return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); + return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x; + } + + var prefixExponent; + + function formatPrefixAuto(x, p) { + var d = formatDecimal(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1], + i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, + n = coefficient.length; + return i === n ? coefficient + : i > n ? coefficient + new Array(i - n + 1).join("0") + : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) + : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y! + } + + function formatRounded(x, p) { + var d = formatDecimal(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1]; + return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient + : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) + : coefficient + new Array(exponent - coefficient.length + 2).join("0"); + } + + var formatTypes = { + "": formatDefault, + "%": function(x, p) { return (x * 100).toFixed(p); }, + "b": function(x) { return Math.round(x).toString(2); }, + "c": function(x) { return x + ""; }, + "d": function(x) { return Math.round(x).toString(10); }, + "e": function(x, p) { return x.toExponential(p); }, + "f": function(x, p) { return x.toFixed(p); }, + "g": function(x, p) { return x.toPrecision(p); }, + "o": function(x) { return Math.round(x).toString(8); }, + "p": function(x, p) { return formatRounded(x * 100, p); }, + "r": formatRounded, + "s": formatPrefixAuto, + "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, + "x": function(x) { return Math.round(x).toString(16); } }; - albersUsa.precision = function(_) { - if (!arguments.length) return lower48.precision(); - lower48.precision(_), alaska.precision(_), hawaii.precision(_); - return reset(); + // [[fill]align][sign][symbol][0][width][,][.precision][type] + var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i; + + function formatSpecifier(specifier) { + return new FormatSpecifier(specifier); + } + + formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof + + function FormatSpecifier(specifier) { + if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); + + var match, + fill = match[1] || " ", + align = match[2] || ">", + sign = match[3] || "-", + symbol = match[4] || "", + zero = !!match[5], + width = match[6] && +match[6], + comma = !!match[7], + precision = match[8] && +match[8].slice(1), + type = match[9] || ""; + + // The "n" type is an alias for ",g". + if (type === "n") comma = true, type = "g"; + + // Map invalid types to the default format. + else if (!formatTypes[type]) type = ""; + + // If zero fill is specified, padding goes after sign and before digits. + if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; + + this.fill = fill; + this.align = align; + this.sign = sign; + this.symbol = symbol; + this.zero = zero; + this.width = width; + this.comma = comma; + this.precision = precision; + this.type = type; + } + + FormatSpecifier.prototype.toString = function() { + return this.fill + + this.align + + this.sign + + this.symbol + + (this.zero ? "0" : "") + + (this.width == null ? "" : Math.max(1, this.width | 0)) + + (this.comma ? "," : "") + + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0)) + + this.type; }; - albersUsa.scale = function(_) { - if (!arguments.length) return lower48.scale(); - lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); - return albersUsa.translate(lower48.translate()); - }; + function identity$3(x) { + return x; + } - albersUsa.translate = function(_) { - if (!arguments.length) return lower48.translate(); - var k = lower48.scale(), x = +_[0], y = +_[1]; + var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; + + function formatLocale(locale) { + var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3, + currency = locale.currency, + decimal = locale.decimal, + numerals = locale.numerals ? formatNumerals(locale.numerals) : identity$3, + percent = locale.percent || "%"; + + function newFormat(specifier) { + specifier = formatSpecifier(specifier); + + var fill = specifier.fill, + align = specifier.align, + sign = specifier.sign, + symbol = specifier.symbol, + zero = specifier.zero, + width = specifier.width, + comma = specifier.comma, + precision = specifier.precision, + type = specifier.type; + + // Compute the prefix and suffix. + // For SI-prefix, the suffix is lazily computed. + var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", + suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? percent : ""; + + // What format function should we use? + // Is this an integer type? + // Can this type generate exponential notation? + var formatType = formatTypes[type], + maybeSuffix = !type || /[defgprs%]/.test(type); + + // Set the default precision if not specified, + // or clamp the specified precision to the supported range. + // For significant precision, it must be in [1, 21]. + // For fixed precision, it must be in [0, 20]. + precision = precision == null ? (type ? 6 : 12) + : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) + : Math.max(0, Math.min(20, precision)); + + function format(value) { + var valuePrefix = prefix, + valueSuffix = suffix, + i, n, c; + + if (type === "c") { + valueSuffix = formatType(value) + valueSuffix; + value = ""; + } else { + value = +value; + + // Perform the initial formatting. + var valueNegative = value < 0; + value = formatType(Math.abs(value), precision); + + // If a negative value rounds to zero during formatting, treat as positive. + if (valueNegative && +value === 0) valueNegative = false; + + // Compute the prefix and suffix. + valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; + valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); + + // Break the formatted value into the integer “value” part that can be + // grouped, and fractional or exponential “suffix” part that is not. + if (maybeSuffix) { + i = -1, n = value.length; + while (++i < n) { + if (c = value.charCodeAt(i), 48 > c || c > 57) { + valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; + value = value.slice(0, i); + break; + } + } + } + } - lower48Point = lower48 - .translate(_) - .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) - .stream(pointStream); + // If the fill character is not "0", grouping is applied before padding. + if (comma && !zero) value = group(value, Infinity); - alaskaPoint = alaska - .translate([x - 0.307 * k, y + 0.201 * k]) - .clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]]) - .stream(pointStream); + // Compute the padding. + var length = valuePrefix.length + value.length + valueSuffix.length, + padding = length < width ? new Array(width - length + 1).join(fill) : ""; - hawaiiPoint = hawaii - .translate([x - 0.205 * k, y + 0.212 * k]) - .clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]]) - .stream(pointStream); + // If the fill character is "0", grouping is applied after padding. + if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; - return reset(); - }; + // Reconstruct the final output based on the desired alignment. + switch (align) { + case "<": value = valuePrefix + value + valueSuffix + padding; break; + case "=": value = valuePrefix + padding + value + valueSuffix; break; + case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break; + default: value = padding + valuePrefix + value + valueSuffix; break; + } - albersUsa.fitExtent = function(extent, object) { - return fitExtent(albersUsa, extent, object); - }; + return numerals(value); + } - albersUsa.fitSize = function(size, object) { - return fitSize(albersUsa, size, object); - }; + format.toString = function() { + return specifier + ""; + }; - albersUsa.fitWidth = function(width, object) { - return fitWidth(albersUsa, width, object); - }; + return format; + } - albersUsa.fitHeight = function(height, object) { - return fitHeight(albersUsa, height, object); - }; + function formatPrefix(specifier, value) { + var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), + e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3, + k = Math.pow(10, -e), + prefix = prefixes[8 + e / 3]; + return function(value) { + return f(k * value) + prefix; + }; + } - function reset() { - cache = cacheStream = null; - return albersUsa; + return { + format: newFormat, + formatPrefix: formatPrefix + }; } - return albersUsa.scale(1070); -} + var locale; + var format; + var formatPrefix; -function azimuthalRaw(scale) { - return function(x, y) { - var cx = cos$1(x), - cy = cos$1(y), - k = scale(cx * cy); - return [ - k * cy * sin$1(x), - k * sin$1(y) - ]; - } -} + defaultLocale({ + decimal: ".", + thousands: ",", + grouping: [3], + currency: ["$", ""] + }); -function azimuthalInvert(angle) { - return function(x, y) { - var z = sqrt(x * x + y * y), - c = angle(z), - sc = sin$1(c), - cc = cos$1(c); - return [ - atan2(x * sc, z * cc), - asin(z && y * sc / z) - ]; + function defaultLocale(definition) { + locale = formatLocale(definition); + format = locale.format; + formatPrefix = locale.formatPrefix; + return locale; } -} - -var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) { - return sqrt(2 / (1 + cxcy)); -}); - -azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) { - return 2 * asin(z / 2); -}); - -function azimuthalEqualArea() { - return projection(azimuthalEqualAreaRaw) - .scale(124.75) - .clipAngle(180 - 1e-3); -} - -var azimuthalEquidistantRaw = azimuthalRaw(function(c) { - return (c = acos(c)) && c / sin$1(c); -}); - -azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) { - return z; -}); - -function azimuthalEquidistant() { - return projection(azimuthalEquidistantRaw) - .scale(79.4188) - .clipAngle(180 - 1e-3); -} - -function mercatorRaw(lambda, phi) { - return [lambda, log(tan((halfPi$2 + phi) / 2))]; -} - -mercatorRaw.invert = function(x, y) { - return [x, 2 * atan(exp(y)) - halfPi$2]; -}; - -function mercator() { - return mercatorProjection(mercatorRaw) - .scale(961 / tau$3); -} - -function mercatorProjection(project) { - var m = projection(project), - center = m.center, - scale = m.scale, - translate = m.translate, - clipExtent = m.clipExtent, - x0 = null, y0, x1, y1; // clip extent - - m.scale = function(_) { - return arguments.length ? (scale(_), reclip()) : scale(); - }; - - m.translate = function(_) { - return arguments.length ? (translate(_), reclip()) : translate(); - }; - - m.center = function(_) { - return arguments.length ? (center(_), reclip()) : center(); - }; - - m.clipExtent = function(_) { - return arguments.length ? (_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]]; - }; - function reclip() { - var k = pi$3 * scale(), - t = m(rotation(m.rotate()).invert([0, 0])); - return clipExtent(x0 == null - ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw - ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] - : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]); + function precisionFixed(step) { + return Math.max(0, -exponent$1(Math.abs(step))); } - return reclip(); -} + function precisionPrefix(step, value) { + return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step))); + } -function tany(y) { - return tan((halfPi$2 + y) / 2); -} + function precisionRound(step, max) { + step = Math.abs(step), max = Math.abs(max) - step; + return Math.max(0, exponent$1(max) - exponent$1(step)) + 1; + } -function conicConformalRaw(y0, y1) { - var cy0 = cos$1(y0), - n = y0 === y1 ? sin$1(y0) : log(cy0 / cos$1(y1)) / log(tany(y1) / tany(y0)), - f = cy0 * pow(tany(y0), n) / n; + // Adds floating point numbers with twice the normal precision. + // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and + // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) + // 305–363 (1997). + // Code adapted from GeographicLib by Charles F. F. Karney, + // http://geographiclib.sourceforge.net/ - if (!n) return mercatorRaw; + function adder() { + return new Adder; + } - function project(x, y) { - if (f > 0) { if (y < -halfPi$2 + epsilon$2) y = -halfPi$2 + epsilon$2; } - else { if (y > halfPi$2 - epsilon$2) y = halfPi$2 - epsilon$2; } - var r = f / pow(tany(y), n); - return [r * sin$1(n * x), f - r * cos$1(n * x)]; + function Adder() { + this.reset(); } - project.invert = function(x, y) { - var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy); - return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi$2]; + Adder.prototype = { + constructor: Adder, + reset: function() { + this.s = // rounded value + this.t = 0; // exact error + }, + add: function(y) { + add$1(temp, y, this.t); + add$1(this, temp.s, this.s); + if (this.s) this.t += temp.t; + else this.s = temp.t; + }, + valueOf: function() { + return this.s; + } }; - return project; -} - -function conicConformal() { - return conicProjection(conicConformalRaw) - .scale(109.5) - .parallels([30, 30]); -} + var temp = new Adder; -function equirectangularRaw(lambda, phi) { - return [lambda, phi]; -} - -equirectangularRaw.invert = equirectangularRaw; + function add$1(adder, a, b) { + var x = adder.s = a + b, + bv = x - a, + av = x - bv; + adder.t = (a - av) + (b - bv); + } -function equirectangular() { - return projection(equirectangularRaw) - .scale(152.63); -} + var epsilon$2 = 1e-6; + var epsilon2$1 = 1e-12; + var pi$3 = Math.PI; + var halfPi$2 = pi$3 / 2; + var quarterPi = pi$3 / 4; + var tau$3 = pi$3 * 2; -function conicEquidistantRaw(y0, y1) { - var cy0 = cos$1(y0), - n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0), - g = cy0 / n + y0; + var degrees$1 = 180 / pi$3; + var radians = pi$3 / 180; - if (abs(n) < epsilon$2) return equirectangularRaw; + var abs = Math.abs; + var atan = Math.atan; + var atan2 = Math.atan2; + var cos$1 = Math.cos; + var ceil = Math.ceil; + var exp = Math.exp; + var log = Math.log; + var pow = Math.pow; + var sin$1 = Math.sin; + var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; + var sqrt = Math.sqrt; + var tan = Math.tan; - function project(x, y) { - var gy = g - y, nx = n * x; - return [gy * sin$1(nx), g - gy * cos$1(nx)]; + function acos(x) { + return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x); } - project.invert = function(x, y) { - var gy = g - y; - return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)]; - }; - - return project; -} - -function conicEquidistant() { - return conicProjection(conicEquidistantRaw) - .scale(131.154) - .center([0, 13.9389]); -} - -function gnomonicRaw(x, y) { - var cy = cos$1(y), k = cos$1(x) * cy; - return [cy * sin$1(x) / k, sin$1(y) / k]; -} + function asin(x) { + return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x); + } -gnomonicRaw.invert = azimuthalInvert(atan); + function haversin(x) { + return (x = sin$1(x / 2)) * x; + } -function gnomonic() { - return projection(gnomonicRaw) - .scale(144.049) - .clipAngle(60); -} + function noop$1() {} -function scaleTranslate(kx, ky, tx, ty) { - return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$4 : transformer({ - point: function(x, y) { - this.stream.point(x * kx + tx, y * ky + ty); + function streamGeometry(geometry, stream) { + if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { + streamGeometryType[geometry.type](geometry, stream); } - }); -} - -function d3_geoIdentity() { - var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$4, // scale, translate and reflect - x0 = null, y0, x1, y1, // clip extent - postclip = identity$4, - cache, - cacheStream, - projection; - - function reset() { - cache = cacheStream = null; - return projection; } - return projection = { - stream: function(stream) { - return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream)); - }, - postclip: function(_) { - return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; - }, - clipExtent: function(_) { - return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + var streamObjectType = { + Feature: function(object, stream) { + streamGeometry(object.geometry, stream); }, - scale: function(_) { - return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k; + FeatureCollection: function(object, stream) { + var features = object.features, i = -1, n = features.length; + while (++i < n) streamGeometry(features[i].geometry, stream); + } + }; + + var streamGeometryType = { + Sphere: function(object, stream) { + stream.sphere(); }, - translate: function(_) { - return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty]; + Point: function(object, stream) { + object = object.coordinates; + stream.point(object[0], object[1], object[2]); }, - reflectX: function(_) { - return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0; + MultiPoint: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); }, - reflectY: function(_) { - return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0; + LineString: function(object, stream) { + streamLine(object.coordinates, stream, 0); }, - fitExtent: function(extent, object) { - return fitExtent(projection, extent, object); + MultiLineString: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) streamLine(coordinates[i], stream, 0); }, - fitSize: function(size, object) { - return fitSize(projection, size, object); + Polygon: function(object, stream) { + streamPolygon(object.coordinates, stream); }, - fitWidth: function(width, object) { - return fitWidth(projection, width, object); + MultiPolygon: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) streamPolygon(coordinates[i], stream); }, - fitHeight: function(height, object) { - return fitHeight(projection, height, object); + GeometryCollection: function(object, stream) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) streamGeometry(geometries[i], stream); } }; -} -function naturalEarth1Raw(lambda, phi) { - var phi2 = phi * phi, phi4 = phi2 * phi2; - return [ - lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))), - phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - ]; -} + function streamLine(coordinates, stream, closed) { + var i = -1, n = coordinates.length - closed, coordinate; + stream.lineStart(); + while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); + stream.lineEnd(); + } -naturalEarth1Raw.invert = function(x, y) { - var phi = y, i = 25, delta; - do { - var phi2 = phi * phi, phi4 = phi2 * phi2; - phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / - (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4))); - } while (abs(delta) > epsilon$2 && --i > 0); - return [ - x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), - phi - ]; -}; - -function naturalEarth1() { - return projection(naturalEarth1Raw) - .scale(175.295); -} - -function orthographicRaw(x, y) { - return [cos$1(y) * sin$1(x), sin$1(y)]; -} - -orthographicRaw.invert = azimuthalInvert(asin); - -function orthographic() { - return projection(orthographicRaw) - .scale(249.5) - .clipAngle(90 + epsilon$2); -} - -function stereographicRaw(x, y) { - var cy = cos$1(y), k = 1 + cos$1(x) * cy; - return [cy * sin$1(x) / k, sin$1(y) / k]; -} - -stereographicRaw.invert = azimuthalInvert(function(z) { - return 2 * atan(z); -}); - -function stereographic() { - return projection(stereographicRaw) - .scale(250) - .clipAngle(142); -} - -function transverseMercatorRaw(lambda, phi) { - return [log(tan((halfPi$2 + phi) / 2)), -lambda]; -} - -transverseMercatorRaw.invert = function(x, y) { - return [-y, 2 * atan(exp(x)) - halfPi$2]; -}; - -function transverseMercator() { - var m = mercatorProjection(transverseMercatorRaw), - center = m.center, - rotate = m.rotate; - - m.center = function(_) { - return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); - }; + function streamPolygon(coordinates, stream) { + var i = -1, n = coordinates.length; + stream.polygonStart(); + while (++i < n) streamLine(coordinates[i], stream, 1); + stream.polygonEnd(); + } + + function geoStream(object, stream) { + if (object && streamObjectType.hasOwnProperty(object.type)) { + streamObjectType[object.type](object, stream); + } else { + streamGeometry(object, stream); + } + } + + var areaRingSum = adder(); + + var areaSum = adder(), + lambda00, + phi00, + lambda0, + cosPhi0, + sinPhi0; - m.rotate = function(_) { - return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); + var areaStream = { + point: noop$1, + lineStart: noop$1, + lineEnd: noop$1, + polygonStart: function() { + areaRingSum.reset(); + areaStream.lineStart = areaRingStart; + areaStream.lineEnd = areaRingEnd; + }, + polygonEnd: function() { + var areaRing = +areaRingSum; + areaSum.add(areaRing < 0 ? tau$3 + areaRing : areaRing); + this.lineStart = this.lineEnd = this.point = noop$1; + }, + sphere: function() { + areaSum.add(tau$3); + } }; - return rotate([0, 0, 90]) - .scale(159.155); -} - -function defaultSeparation(a, b) { - return a.parent === b.parent ? 1 : 2; -} - -function meanX(children) { - return children.reduce(meanXReduce, 0) / children.length; -} - -function meanXReduce(x, c) { - return x + c.x; -} - -function maxY(children) { - return 1 + children.reduce(maxYReduce, 0); -} - -function maxYReduce(y, c) { - return Math.max(y, c.y); -} - -function leafLeft(node) { - var children; - while (children = node.children) node = children[0]; - return node; -} - -function leafRight(node) { - var children; - while (children = node.children) node = children[children.length - 1]; - return node; -} - -function cluster() { - var separation = defaultSeparation, - dx = 1, - dy = 1, - nodeSize = false; - - function cluster(root) { - var previousNode, - x = 0; + function areaRingStart() { + areaStream.point = areaPointFirst; + } - // First walk, computing the initial x & y values. - root.eachAfter(function(node) { - var children = node.children; - if (children) { - node.x = meanX(children); - node.y = maxY(children); - } else { - node.x = previousNode ? x += separation(node, previousNode) : 0; - node.y = 0; - previousNode = node; - } - }); + function areaRingEnd() { + areaPoint(lambda00, phi00); + } - var left = leafLeft(root), - right = leafRight(root), - x0 = left.x - separation(left, right) / 2, - x1 = right.x + separation(right, left) / 2; - - // Second walk, normalizing x & y to the desired size. - return root.eachAfter(nodeSize ? function(node) { - node.x = (node.x - root.x) * dx; - node.y = (root.y - node.y) * dy; - } : function(node) { - node.x = (node.x - x0) / (x1 - x0) * dx; - node.y = (1 - (root.y ? node.y / root.y : 1)) * dy; - }); + function areaPointFirst(lambda, phi) { + areaStream.point = areaPoint; + lambda00 = lambda, phi00 = phi; + lambda *= radians, phi *= radians; + lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi); } - cluster.separation = function(x) { - return arguments.length ? (separation = x, cluster) : separation; - }; + function areaPoint(lambda, phi) { + lambda *= radians, phi *= radians; + phi = phi / 2 + quarterPi; // half the angular distance from south pole - cluster.size = function(x) { - return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]); - }; + // Spherical excess E for a spherical triangle with vertices: south pole, + // previous point, current point. Uses a formula derived from Cagnoli’s + // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). + var dLambda = lambda - lambda0, + sdLambda = dLambda >= 0 ? 1 : -1, + adLambda = sdLambda * dLambda, + cosPhi = cos$1(phi), + sinPhi = sin$1(phi), + k = sinPhi0 * sinPhi, + u = cosPhi0 * cosPhi + k * cos$1(adLambda), + v = k * sdLambda * sin$1(adLambda); + areaRingSum.add(atan2(v, u)); - cluster.nodeSize = function(x) { - return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null); - }; + // Advance the previous points. + lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi; + } - return cluster; -} - -function count(node) { - var sum = 0, - children = node.children, - i = children && children.length; - if (!i) sum = 1; - else while (--i >= 0) sum += children[i].value; - node.value = sum; -} - -function node_count() { - return this.eachAfter(count); -} - -function node_each(callback) { - var node = this, current, next = [node], children, i, n; - do { - current = next.reverse(), next = []; - while (node = current.pop()) { - callback(node), children = node.children; - if (children) for (i = 0, n = children.length; i < n; ++i) { - next.push(children[i]); - } - } - } while (next.length); - return this; -} + function d3_geoArea(object) { + areaSum.reset(); + geoStream(object, areaStream); + return areaSum * 2; + } -function node_eachBefore(callback) { - var node = this, nodes = [node], children, i; - while (node = nodes.pop()) { - callback(node), children = node.children; - if (children) for (i = children.length - 1; i >= 0; --i) { - nodes.push(children[i]); - } + function spherical(cartesian) { + return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])]; } - return this; -} -function node_eachAfter(callback) { - var node = this, nodes = [node], next = [], children, i, n; - while (node = nodes.pop()) { - next.push(node), children = node.children; - if (children) for (i = 0, n = children.length; i < n; ++i) { - nodes.push(children[i]); - } + function cartesian(spherical) { + var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi); + return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)]; } - while (node = next.pop()) { - callback(node); + + function cartesianDot(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } - return this; -} -function node_sum(value) { - return this.eachAfter(function(node) { - var sum = +value(node.data) || 0, - children = node.children, - i = children && children.length; - while (--i >= 0) sum += children[i].value; - node.value = sum; - }); -} + function cartesianCross(a, b) { + return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; + } -function node_sort(compare) { - return this.eachBefore(function(node) { - if (node.children) { - node.children.sort(compare); - } - }); -} - -function node_path(end) { - var start = this, - ancestor = leastCommonAncestor(start, end), - nodes = [start]; - while (start !== ancestor) { - start = start.parent; - nodes.push(start); - } - var k = nodes.length; - while (end !== ancestor) { - nodes.splice(k, 0, end); - end = end.parent; - } - return nodes; -} - -function leastCommonAncestor(a, b) { - if (a === b) return a; - var aNodes = a.ancestors(), - bNodes = b.ancestors(), - c = null; - a = aNodes.pop(); - b = bNodes.pop(); - while (a === b) { - c = a; - a = aNodes.pop(); - b = bNodes.pop(); + // TODO return a + function cartesianAddInPlace(a, b) { + a[0] += b[0], a[1] += b[1], a[2] += b[2]; } - return c; -} -function node_ancestors() { - var node = this, nodes = [node]; - while (node = node.parent) { - nodes.push(node); + function cartesianScale(vector, k) { + return [vector[0] * k, vector[1] * k, vector[2] * k]; } - return nodes; -} -function node_descendants() { - var nodes = []; - this.each(function(node) { - nodes.push(node); - }); - return nodes; -} + // TODO return d + function cartesianNormalizeInPlace(d) { + var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); + d[0] /= l, d[1] /= l, d[2] /= l; + } -function node_leaves() { - var leaves = []; - this.eachBefore(function(node) { - if (!node.children) { - leaves.push(node); - } - }); - return leaves; -} + var lambda0$1, phi0, lambda1, phi1, // bounds + lambda2, // previous lambda-coordinate + lambda00$1, phi00$1, // first point + p0, // previous 3D point + deltaSum = adder(), + ranges, + range$1; -function node_links() { - var root = this, links = []; - root.each(function(node) { - if (node !== root) { // Don’t include the root’s parent, if any. - links.push({source: node.parent, target: node}); + var boundsStream = { + point: boundsPoint, + lineStart: boundsLineStart, + lineEnd: boundsLineEnd, + polygonStart: function() { + boundsStream.point = boundsRingPoint; + boundsStream.lineStart = boundsRingStart; + boundsStream.lineEnd = boundsRingEnd; + deltaSum.reset(); + areaStream.polygonStart(); + }, + polygonEnd: function() { + areaStream.polygonEnd(); + boundsStream.point = boundsPoint; + boundsStream.lineStart = boundsLineStart; + boundsStream.lineEnd = boundsLineEnd; + if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); + else if (deltaSum > epsilon$2) phi1 = 90; + else if (deltaSum < -epsilon$2) phi0 = -90; + range$1[0] = lambda0$1, range$1[1] = lambda1; } - }); - return links; -} - -function hierarchy(data, children) { - var root = new Node(data), - valued = +data.value && (root.value = data.value), - node, - nodes = [root], - child, - childs, - i, - n; - - if (children == null) children = defaultChildren; + }; - while (node = nodes.pop()) { - if (valued) node.value = +node.data.value; - if ((childs = children(node.data)) && (n = childs.length)) { - node.children = new Array(n); - for (i = n - 1; i >= 0; --i) { - nodes.push(child = node.children[i] = new Node(childs[i])); - child.parent = node; - child.depth = node.depth + 1; + function boundsPoint(lambda, phi) { + ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]); + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; + } + + function linePoint(lambda, phi) { + var p = cartesian([lambda * radians, phi * radians]); + if (p0) { + var normal = cartesianCross(p0, p), + equatorial = [normal[1], -normal[0], 0], + inflection = cartesianCross(equatorial, normal); + cartesianNormalizeInPlace(inflection); + inflection = spherical(inflection); + var delta = lambda - lambda2, + sign$$1 = delta > 0 ? 1 : -1, + lambdai = inflection[0] * degrees$1 * sign$$1, + phii, + antimeridian = abs(delta) > 180; + if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) { + phii = inflection[1] * degrees$1; + if (phii > phi1) phi1 = phii; + } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) { + phii = -inflection[1] * degrees$1; + if (phii < phi0) phi0 = phii; + } else { + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; + } + if (antimeridian) { + if (lambda < lambda2) { + if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; + } else { + if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; + } + } else { + if (lambda1 >= lambda0$1) { + if (lambda < lambda0$1) lambda0$1 = lambda; + if (lambda > lambda1) lambda1 = lambda; + } else { + if (lambda > lambda2) { + if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; + } else { + if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; + } + } } + } else { + ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]); } + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; + p0 = p, lambda2 = lambda; } - return root.eachBefore(computeHeight); -} - -function node_copy() { - return hierarchy(this).eachBefore(copyData); -} - -function defaultChildren(d) { - return d.children; -} - -function copyData(node) { - node.data = node.data.data; -} - -function computeHeight(node) { - var height = 0; - do node.height = height; - while ((node = node.parent) && (node.height < ++height)); -} - -function Node(data) { - this.data = data; - this.depth = - this.height = 0; - this.parent = null; -} + function boundsLineStart() { + boundsStream.point = linePoint; + } -Node.prototype = hierarchy.prototype = { - constructor: Node, - count: node_count, - each: node_each, - eachAfter: node_eachAfter, - eachBefore: node_eachBefore, - sum: node_sum, - sort: node_sort, - path: node_path, - ancestors: node_ancestors, - descendants: node_descendants, - leaves: node_leaves, - links: node_links, - copy: node_copy -}; + function boundsLineEnd() { + range$1[0] = lambda0$1, range$1[1] = lambda1; + boundsStream.point = boundsPoint; + p0 = null; + } -var slice$3 = Array.prototype.slice; + function boundsRingPoint(lambda, phi) { + if (p0) { + var delta = lambda - lambda2; + deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); + } else { + lambda00$1 = lambda, phi00$1 = phi; + } + areaStream.point(lambda, phi); + linePoint(lambda, phi); + } -function shuffle$1(array) { - var m = array.length, - t, - i; + function boundsRingStart() { + areaStream.lineStart(); + } - while (m) { - i = Math.random() * m-- | 0; - t = array[m]; - array[m] = array[i]; - array[i] = t; + function boundsRingEnd() { + boundsRingPoint(lambda00$1, phi00$1); + areaStream.lineEnd(); + if (abs(deltaSum) > epsilon$2) lambda0$1 = -(lambda1 = 180); + range$1[0] = lambda0$1, range$1[1] = lambda1; + p0 = null; } - return array; -} + // Finds the left-right distance between two longitudes. + // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want + // the distance between ±180° to be 360°. + function angle(lambda0, lambda1) { + return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; + } -function enclose(circles) { - var i = 0, n = (circles = shuffle$1(slice$3.call(circles))).length, B = [], p, e; + function rangeCompare(a, b) { + return a[0] - b[0]; + } - while (i < n) { - p = circles[i]; - if (e && enclosesWeak(e, p)) ++i; - else e = encloseBasis(B = extendBasis(B, p)), i = 0; + function rangeContains(range, x) { + return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; } - return e; -} + function d3_geoBounds(feature) { + var i, n, a, b, merged, deltaMax, delta; -function extendBasis(B, p) { - var i, j; + phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity); + ranges = []; + geoStream(feature, boundsStream); - if (enclosesWeakAll(p, B)) return [p]; + // First, sort ranges by their minimum longitudes. + if (n = ranges.length) { + ranges.sort(rangeCompare); - // If we get here then B must have at least one element. - for (i = 0; i < B.length; ++i) { - if (enclosesNot(p, B[i]) - && enclosesWeakAll(encloseBasis2(B[i], p), B)) { - return [B[i], p]; - } - } + // Then, merge any ranges that overlap. + for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { + b = ranges[i]; + if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { + if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; + if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; + } else { + merged.push(a = b); + } + } - // If we get here then B must have at least two elements. - for (i = 0; i < B.length - 1; ++i) { - for (j = i + 1; j < B.length; ++j) { - if (enclosesNot(encloseBasis2(B[i], B[j]), p) - && enclosesNot(encloseBasis2(B[i], p), B[j]) - && enclosesNot(encloseBasis2(B[j], p), B[i]) - && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) { - return [B[i], B[j], p]; + // Finally, find the largest gap between the merged ranges. + // The final bounding box will be the inverse of this gap. + for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { + b = merged[i]; + if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]; } } - } - - // If we get here then something is very wrong. - throw new Error; -} -function enclosesNot(a, b) { - var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y; - return dr < 0 || dr * dr < dx * dx + dy * dy; -} + ranges = range$1 = null; -function enclosesWeak(a, b) { - var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y; - return dr > 0 && dr * dr > dx * dx + dy * dy; -} - -function enclosesWeakAll(a, B) { - for (var i = 0; i < B.length; ++i) { - if (!enclosesWeak(a, B[i])) { - return false; - } + return lambda0$1 === Infinity || phi0 === Infinity + ? [[NaN, NaN], [NaN, NaN]] + : [[lambda0$1, phi0], [lambda1, phi1]]; } - return true; -} -function encloseBasis(B) { - switch (B.length) { - case 1: return encloseBasis1(B[0]); - case 2: return encloseBasis2(B[0], B[1]); - case 3: return encloseBasis3(B[0], B[1], B[2]); - } -} + var W0, W1, + X0, Y0, Z0, + X1, Y1, Z1, + X2, Y2, Z2, + lambda00$2, phi00$2, // first point + x0, y0, z0; // previous point -function encloseBasis1(a) { - return { - x: a.x, - y: a.y, - r: a.r - }; -} - -function encloseBasis2(a, b) { - var x1 = a.x, y1 = a.y, r1 = a.r, - x2 = b.x, y2 = b.y, r2 = b.r, - x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, - l = Math.sqrt(x21 * x21 + y21 * y21); - return { - x: (x1 + x2 + x21 / l * r21) / 2, - y: (y1 + y2 + y21 / l * r21) / 2, - r: (l + r1 + r2) / 2 - }; -} - -function encloseBasis3(a, b, c) { - var x1 = a.x, y1 = a.y, r1 = a.r, - x2 = b.x, y2 = b.y, r2 = b.r, - x3 = c.x, y3 = c.y, r3 = c.r, - a2 = x1 - x2, - a3 = x1 - x3, - b2 = y1 - y2, - b3 = y1 - y3, - c2 = r2 - r1, - c3 = r3 - r1, - d1 = x1 * x1 + y1 * y1 - r1 * r1, - d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2, - d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3, - ab = a3 * b2 - a2 * b3, - xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1, - xb = (b3 * c2 - b2 * c3) / ab, - ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1, - yb = (a2 * c3 - a3 * c2) / ab, - A = xb * xb + yb * yb - 1, - B = 2 * (r1 + xa * xb + ya * yb), - C = xa * xa + ya * ya - r1 * r1, - r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B); - return { - x: x1 + xa + xb * r, - y: y1 + ya + yb * r, - r: r + var centroidStream = { + sphere: noop$1, + point: centroidPoint, + lineStart: centroidLineStart, + lineEnd: centroidLineEnd, + polygonStart: function() { + centroidStream.lineStart = centroidRingStart; + centroidStream.lineEnd = centroidRingEnd; + }, + polygonEnd: function() { + centroidStream.lineStart = centroidLineStart; + centroidStream.lineEnd = centroidLineEnd; + } }; -} - -function place(a, b, c) { - var ax = a.x, - ay = a.y, - da = b.r + c.r, - db = a.r + c.r, - dx = b.x - ax, - dy = b.y - ay, - dc = dx * dx + dy * dy; - if (dc) { - var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc), - y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); - c.x = ax + x * dx + y * dy; - c.y = ay + x * dy - y * dx; - } else { - c.x = ax + db; - c.y = ay; - } -} - -function intersects(a, b) { - var dx = b.x - a.x, - dy = b.y - a.y, - dr = a.r + b.r; - return dr * dr - 1e-6 > dx * dx + dy * dy; -} - -function score(node) { - var a = node._, - b = node.next._, - ab = a.r + b.r, - dx = (a.x * b.r + b.x * a.r) / ab, - dy = (a.y * b.r + b.y * a.r) / ab; - return dx * dx + dy * dy; -} - -function Node$1(circle) { - this._ = circle; - this.next = null; - this.previous = null; -} - -function packEnclose(circles) { - if (!(n = circles.length)) return 0; - - var a, b, c, n, aa, ca, i, j, k, sj, sk; - - // Place the first circle. - a = circles[0], a.x = 0, a.y = 0; - if (!(n > 1)) return a.r; - - // Place the second circle. - b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0; - if (!(n > 2)) return a.r + b.r; - - // Place the third circle. - place(b, a, c = circles[2]); - - // Initialize the front-chain using the first three circles a, b and c. - a = new Node$1(a), b = new Node$1(b), c = new Node$1(c); - a.next = c.previous = b; - b.next = a.previous = c; - c.next = b.previous = a; - - // Attempt to place each remaining circle… - pack: for (i = 3; i < n; ++i) { - place(a._, b._, c = circles[i]), c = new Node$1(c); - - // Find the closest intersecting circle on the front-chain, if any. - // “Closeness” is determined by linear distance along the front-chain. - // “Ahead” or “behind” is likewise determined by linear distance. - j = b.next, k = a.previous, sj = b._.r, sk = a._.r; - do { - if (sj <= sk) { - if (intersects(j._, c._)) { - b = j, a.next = b, b.previous = a, --i; - continue pack; - } - sj += j._.r, j = j.next; - } else { - if (intersects(k._, c._)) { - a = k, a.next = b, b.previous = a, --i; - continue pack; - } - sk += k._.r, k = k.previous; - } - } while (j !== k.next); - // Success! Insert the new circle c between a and b. - c.previous = a, c.next = b, a.next = b.previous = b = c; + // Arithmetic mean of Cartesian vectors. + function centroidPoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi); + centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)); + } - // Compute the new closest circle pair to the centroid. - aa = score(a); - while ((c = c.next) !== b) { - if ((ca = score(c)) < aa) { - a = c, aa = ca; - } - } - b = a.next; + function centroidPointCartesian(x, y, z) { + ++W0; + X0 += (x - X0) / W0; + Y0 += (y - Y0) / W0; + Z0 += (z - Z0) / W0; } - // Compute the enclosing circle of the front chain. - a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a); + function centroidLineStart() { + centroidStream.point = centroidLinePointFirst; + } - // Translate the circles to put the enclosing circle around the origin. - for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y; + function centroidLinePointFirst(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi); + x0 = cosPhi * cos$1(lambda); + y0 = cosPhi * sin$1(lambda); + z0 = sin$1(phi); + centroidStream.point = centroidLinePoint; + centroidPointCartesian(x0, y0, z0); + } - return c.r; -} + function centroidLinePoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi), + x = cosPhi * cos$1(lambda), + y = cosPhi * sin$1(lambda), + z = sin$1(phi), + w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); + W1 += w; + X1 += w * (x0 + (x0 = x)); + Y1 += w * (y0 + (y0 = y)); + Z1 += w * (z0 + (z0 = z)); + centroidPointCartesian(x0, y0, z0); + } -function siblings(circles) { - packEnclose(circles); - return circles; -} + function centroidLineEnd() { + centroidStream.point = centroidPoint; + } -function optional(f) { - return f == null ? null : required(f); -} + // See J. E. Brock, The Inertia Tensor for a Spherical Triangle, + // J. Applied Mechanics 42, 239 (1975). + function centroidRingStart() { + centroidStream.point = centroidRingPointFirst; + } -function required(f) { - if (typeof f !== "function") throw new Error; - return f; -} + function centroidRingEnd() { + centroidRingPoint(lambda00$2, phi00$2); + centroidStream.point = centroidPoint; + } -function constantZero() { - return 0; -} + function centroidRingPointFirst(lambda, phi) { + lambda00$2 = lambda, phi00$2 = phi; + lambda *= radians, phi *= radians; + centroidStream.point = centroidRingPoint; + var cosPhi = cos$1(phi); + x0 = cosPhi * cos$1(lambda); + y0 = cosPhi * sin$1(lambda); + z0 = sin$1(phi); + centroidPointCartesian(x0, y0, z0); + } -function constant$8(x) { - return function() { - return x; - }; -} - -function defaultRadius$1(d) { - return Math.sqrt(d.value); -} - -function index$1() { - var radius = null, - dx = 1, - dy = 1, - padding = constantZero; - - function pack(root) { - root.x = dx / 2, root.y = dy / 2; - if (radius) { - root.eachBefore(radiusLeaf(radius)) - .eachAfter(packChildren(padding, 0.5)) - .eachBefore(translateChild(1)); - } else { - root.eachBefore(radiusLeaf(defaultRadius$1)) - .eachAfter(packChildren(constantZero, 1)) - .eachAfter(packChildren(padding, root.r / Math.min(dx, dy))) - .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); + function centroidRingPoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi), + x = cosPhi * cos$1(lambda), + y = cosPhi * sin$1(lambda), + z = sin$1(phi), + cx = y0 * z - z0 * y, + cy = z0 * x - x0 * z, + cz = x0 * y - y0 * x, + m = sqrt(cx * cx + cy * cy + cz * cz), + w = asin(m), // line weight = angle + v = m && -w / m; // area weight multiplier + X2 += v * cx; + Y2 += v * cy; + Z2 += v * cz; + W1 += w; + X1 += w * (x0 + (x0 = x)); + Y1 += w * (y0 + (y0 = y)); + Z1 += w * (z0 + (z0 = z)); + centroidPointCartesian(x0, y0, z0); + } + + function d3_geoCentroid(object) { + W0 = W1 = + X0 = Y0 = Z0 = + X1 = Y1 = Z1 = + X2 = Y2 = Z2 = 0; + geoStream(object, centroidStream); + + var x = X2, + y = Y2, + z = Z2, + m = x * x + y * y + z * z; + + // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. + if (m < epsilon2$1) { + x = X1, y = Y1, z = Z1; + // If the feature has zero length, fall back to arithmetic mean of point vectors. + if (W1 < epsilon$2) x = X0, y = Y0, z = Z0; + m = x * x + y * y + z * z; + // If the feature still has an undefined ccentroid, then return. + if (m < epsilon2$1) return [NaN, NaN]; } - return root; + + return [atan2(y, x) * degrees$1, asin(z / sqrt(m)) * degrees$1]; } - pack.radius = function(x) { - return arguments.length ? (radius = optional(x), pack) : radius; - }; + function constant$7(x) { + return function() { + return x; + }; + } - pack.size = function(x) { - return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy]; - }; + function compose(a, b) { - pack.padding = function(x) { - return arguments.length ? (padding = typeof x === "function" ? x : constant$8(+x), pack) : padding; - }; + function compose(x, y) { + return x = a(x, y), b(x[0], x[1]); + } - return pack; -} + if (a.invert && b.invert) compose.invert = function(x, y) { + return x = b.invert(x, y), x && a.invert(x[0], x[1]); + }; -function radiusLeaf(radius) { - return function(node) { - if (!node.children) { - node.r = Math.max(0, +radius(node) || 0); - } - }; -} + return compose; + } -function packChildren(padding, k) { - return function(node) { - if (children = node.children) { - var children, - i, - n = children.length, - r = padding(node) * k || 0, - e; + function rotationIdentity(lambda, phi) { + return [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi]; + } - if (r) for (i = 0; i < n; ++i) children[i].r += r; - e = packEnclose(children); - if (r) for (i = 0; i < n; ++i) children[i].r -= r; - node.r = e + r; - } - }; -} + rotationIdentity.invert = rotationIdentity; -function translateChild(k) { - return function(node) { - var parent = node.parent; - node.r *= k; - if (parent) { - node.x = parent.x + k * node.x; - node.y = parent.y + k * node.y; - } - }; -} - -function roundNode(node) { - node.x0 = Math.round(node.x0); - node.y0 = Math.round(node.y0); - node.x1 = Math.round(node.x1); - node.y1 = Math.round(node.y1); -} - -function treemapDice(parent, x0, y0, x1, y1) { - var nodes = parent.children, - node, - i = -1, - n = nodes.length, - k = parent.value && (x1 - x0) / parent.value; - - while (++i < n) { - node = nodes[i], node.y0 = y0, node.y1 = y1; - node.x0 = x0, node.x1 = x0 += node.value * k; - } -} - -function partition() { - var dx = 1, - dy = 1, - padding = 0, - round = false; - - function partition(root) { - var n = root.height + 1; - root.x0 = - root.y0 = padding; - root.x1 = dx; - root.y1 = dy / n; - root.eachBefore(positionNode(dy, n)); - if (round) root.eachBefore(roundNode); - return root; - } - - function positionNode(dy, n) { - return function(node) { - if (node.children) { - treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n); - } - var x0 = node.x0, - y0 = node.y0, - x1 = node.x1 - padding, - y1 = node.y1 - padding; - if (x1 < x0) x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) y0 = y1 = (y0 + y1) / 2; - node.x0 = x0; - node.y0 = y0; - node.x1 = x1; - node.y1 = y1; + function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { + return (deltaLambda %= tau$3) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) + : rotationLambda(deltaLambda)) + : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) + : rotationIdentity); + } + + function forwardRotationLambda(deltaLambda) { + return function(lambda, phi) { + return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi]; }; } - partition.round = function(x) { - return arguments.length ? (round = !!x, partition) : round; - }; + function rotationLambda(deltaLambda) { + var rotation = forwardRotationLambda(deltaLambda); + rotation.invert = forwardRotationLambda(-deltaLambda); + return rotation; + } - partition.size = function(x) { - return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy]; - }; + function rotationPhiGamma(deltaPhi, deltaGamma) { + var cosDeltaPhi = cos$1(deltaPhi), + sinDeltaPhi = sin$1(deltaPhi), + cosDeltaGamma = cos$1(deltaGamma), + sinDeltaGamma = sin$1(deltaGamma); - partition.padding = function(x) { - return arguments.length ? (padding = +x, partition) : padding; - }; + function rotation(lambda, phi) { + var cosPhi = cos$1(phi), + x = cos$1(lambda) * cosPhi, + y = sin$1(lambda) * cosPhi, + z = sin$1(phi), + k = z * cosDeltaPhi + x * sinDeltaPhi; + return [ + atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), + asin(k * cosDeltaGamma + y * sinDeltaGamma) + ]; + } - return partition; -} + rotation.invert = function(lambda, phi) { + var cosPhi = cos$1(phi), + x = cos$1(lambda) * cosPhi, + y = sin$1(lambda) * cosPhi, + z = sin$1(phi), + k = z * cosDeltaGamma - y * sinDeltaGamma; + return [ + atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), + asin(k * cosDeltaPhi - x * sinDeltaPhi) + ]; + }; -var keyPrefix$1 = "$", // Protect against keys like “__proto__”. - preroot = {depth: -1}, - ambiguous = {}; + return rotation; + } -function defaultId(d) { - return d.id; -} + function rotation(rotate) { + rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0); -function defaultParentId(d) { - return d.parentId; -} + function forward(coordinates) { + coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians); + return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates; + } -function stratify() { - var id = defaultId, - parentId = defaultParentId; + forward.invert = function(coordinates) { + coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians); + return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates; + }; - function stratify(data) { - var d, - i, - n = data.length, - root, - parent, - node, - nodes = new Array(n), - nodeId, - nodeKey, - nodeByKey = {}; + return forward; + } - for (i = 0; i < n; ++i) { - d = data[i], node = nodes[i] = new Node(d); - if ((nodeId = id(d, i, data)) != null && (nodeId += "")) { - nodeKey = keyPrefix$1 + (node.id = nodeId); - nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node; - } + // Generates a circle centered at [0°, 0°], with a given radius and precision. + function circleStream(stream, radius, delta, direction, t0, t1) { + if (!delta) return; + var cosRadius = cos$1(radius), + sinRadius = sin$1(radius), + step = direction * delta; + if (t0 == null) { + t0 = radius + direction * tau$3; + t1 = radius - step / 2; + } else { + t0 = circleRadius(cosRadius, t0); + t1 = circleRadius(cosRadius, t1); + if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$3; } - - for (i = 0; i < n; ++i) { - node = nodes[i], nodeId = parentId(data[i], i, data); - if (nodeId == null || !(nodeId += "")) { - if (root) throw new Error("multiple roots"); - root = node; - } else { - parent = nodeByKey[keyPrefix$1 + nodeId]; - if (!parent) throw new Error("missing: " + nodeId); - if (parent === ambiguous) throw new Error("ambiguous: " + nodeId); - if (parent.children) parent.children.push(node); - else parent.children = [node]; - node.parent = parent; - } + for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { + point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]); + stream.point(point[0], point[1]); } + } - if (!root) throw new Error("no root"); - root.parent = preroot; - root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight); - root.parent = null; - if (n > 0) throw new Error("cycle"); - - return root; + // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. + function circleRadius(cosRadius, point) { + point = cartesian(point), point[0] -= cosRadius; + cartesianNormalizeInPlace(point); + var radius = acos(-point[1]); + return ((-point[2] < 0 ? -radius : radius) + tau$3 - epsilon$2) % tau$3; } - stratify.id = function(x) { - return arguments.length ? (id = required(x), stratify) : id; - }; + function circle() { + var center = constant$7([0, 0]), + radius = constant$7(90), + precision = constant$7(6), + ring, + rotate, + stream = {point: point}; - stratify.parentId = function(x) { - return arguments.length ? (parentId = required(x), stratify) : parentId; - }; + function point(x, y) { + ring.push(x = rotate(x, y)); + x[0] *= degrees$1, x[1] *= degrees$1; + } - return stratify; -} - -function defaultSeparation$1(a, b) { - return a.parent === b.parent ? 1 : 2; -} - -// function radialSeparation(a, b) { -// return (a.parent === b.parent ? 1 : 2) / a.depth; -// } - -// This function is used to traverse the left contour of a subtree (or -// subforest). It returns the successor of v on this contour. This successor is -// either given by the leftmost child of v or by the thread of v. The function -// returns null if and only if v is on the highest level of its subtree. -function nextLeft(v) { - var children = v.children; - return children ? children[0] : v.t; -} - -// This function works analogously to nextLeft. -function nextRight(v) { - var children = v.children; - return children ? children[children.length - 1] : v.t; -} - -// Shifts the current subtree rooted at w+. This is done by increasing -// prelim(w+) and mod(w+) by shift. -function moveSubtree(wm, wp, shift) { - var change = shift / (wp.i - wm.i); - wp.c -= change; - wp.s += shift; - wm.c += change; - wp.z += shift; - wp.m += shift; -} - -// All other shifts, applied to the smaller subtrees between w- and w+, are -// performed by this function. To prepare the shifts, we have to adjust -// change(w+), shift(w+), and change(w-). -function executeShifts(v) { - var shift = 0, - change = 0, - children = v.children, - i = children.length, - w; - while (--i >= 0) { - w = children[i]; - w.z += shift; - w.m += shift; - shift += w.s + (change += w.c); - } -} - -// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise, -// returns the specified (default) ancestor. -function nextAncestor(vim, v, ancestor) { - return vim.a.parent === v.parent ? vim.a : ancestor; -} - -function TreeNode(node, i) { - this._ = node; - this.parent = null; - this.children = null; - this.A = null; // default ancestor - this.a = this; // ancestor - this.z = 0; // prelim - this.m = 0; // mod - this.c = 0; // change - this.s = 0; // shift - this.t = null; // thread - this.i = i; // number -} - -TreeNode.prototype = Object.create(Node.prototype); - -function treeRoot(root) { - var tree = new TreeNode(root, 0), - node, - nodes = [tree], - child, - children, - i, - n; - - while (node = nodes.pop()) { - if (children = node._.children) { - node.children = new Array(n = children.length); - for (i = n - 1; i >= 0; --i) { - nodes.push(child = node.children[i] = new TreeNode(children[i], i)); - child.parent = node; - } - } - } - - (tree.parent = new TreeNode(null, 0)).children = [tree]; - return tree; -} - -// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm -function tree() { - var separation = defaultSeparation$1, - dx = 1, - dy = 1, - nodeSize = null; - - function tree(root) { - var t = treeRoot(root); - - // Compute the layout using Buchheim et al.’s algorithm. - t.eachAfter(firstWalk), t.parent.m = -t.z; - t.eachBefore(secondWalk); - - // If a fixed node size is specified, scale x and y. - if (nodeSize) root.eachBefore(sizeNode); - - // If a fixed tree size is specified, scale x and y based on the extent. - // Compute the left-most, right-most, and depth-most nodes for extents. - else { - var left = root, - right = root, - bottom = root; - root.eachBefore(function(node) { - if (node.x < left.x) left = node; - if (node.x > right.x) right = node; - if (node.depth > bottom.depth) bottom = node; - }); - var s = left === right ? 1 : separation(left, right) / 2, - tx = s - left.x, - kx = dx / (right.x + s + tx), - ky = dy / (bottom.depth || 1); - root.eachBefore(function(node) { - node.x = (node.x + tx) * kx; - node.y = node.depth * ky; - }); + function circle() { + var c = center.apply(this, arguments), + r = radius.apply(this, arguments) * radians, + p = precision.apply(this, arguments) * radians; + ring = []; + rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert; + circleStream(stream, r, p, 1); + c = {type: "Polygon", coordinates: [ring]}; + ring = rotate = null; + return c; } - return root; + circle.center = function(_) { + return arguments.length ? (center = typeof _ === "function" ? _ : constant$7([+_[0], +_[1]]), circle) : center; + }; + + circle.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), circle) : radius; + }; + + circle.precision = function(_) { + return arguments.length ? (precision = typeof _ === "function" ? _ : constant$7(+_), circle) : precision; + }; + + return circle; } - // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is - // applied recursively to the children of v, as well as the function - // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the - // node v is placed to the midpoint of its outermost children. - function firstWalk(v) { - var children = v.children, - siblings = v.parent.children, - w = v.i ? siblings[v.i - 1] : null; - if (children) { - executeShifts(v); - var midpoint = (children[0].z + children[children.length - 1].z) / 2; - if (w) { - v.z = w.z + separation(v._, w._); - v.m = v.z - midpoint; - } else { - v.z = midpoint; - } - } else if (w) { - v.z = w.z + separation(v._, w._); - } - v.parent.A = apportion(v, w, v.parent.A || siblings[0]); - } - - // Computes all real x-coordinates by summing up the modifiers recursively. - function secondWalk(v) { - v._.x = v.z + v.parent.m; - v.m += v.parent.m; - } - - // The core of the algorithm. Here, a new subtree is combined with the - // previous subtrees. Threads are used to traverse the inside and outside - // contours of the left and right subtree up to the highest common level. The - // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the - // superscript o means outside and i means inside, the subscript - means left - // subtree and + means right subtree. For summing up the modifiers along the - // contour, we use respective variables si+, si-, so-, and so+. Whenever two - // nodes of the inside contours conflict, we compute the left one of the - // greatest uncommon ancestors using the function ANCESTOR and call MOVE - // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees. - // Finally, we add a new thread (if necessary). - function apportion(v, w, ancestor) { - if (w) { - var vip = v, - vop = v, - vim = w, - vom = vip.parent.children[0], - sip = vip.m, - sop = vop.m, - sim = vim.m, - som = vom.m, - shift; - while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { - vom = nextLeft(vom); - vop = nextRight(vop); - vop.a = v; - shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); - if (shift > 0) { - moveSubtree(nextAncestor(vim, v, ancestor), v, shift); - sip += shift; - sop += shift; - } - sim += vim.m; - sip += vip.m; - som += vom.m; - sop += vop.m; - } - if (vim && !nextRight(vop)) { - vop.t = vim; - vop.m += sim - sop; - } - if (vip && !nextLeft(vom)) { - vom.t = vip; - vom.m += sip - som; - ancestor = v; + function clipBuffer() { + var lines = [], + line; + return { + point: function(x, y) { + line.push([x, y]); + }, + lineStart: function() { + lines.push(line = []); + }, + lineEnd: noop$1, + rejoin: function() { + if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); + }, + result: function() { + var result = lines; + lines = []; + line = null; + return result; } - } - return ancestor; + }; } - function sizeNode(node) { - node.x *= dx; - node.y = node.depth * dy; + function pointEqual(a, b) { + return abs(a[0] - b[0]) < epsilon$2 && abs(a[1] - b[1]) < epsilon$2; } - tree.separation = function(x) { - return arguments.length ? (separation = x, tree) : separation; - }; + function Intersection(point, points, other, entry) { + this.x = point; + this.z = points; + this.o = other; // another intersection + this.e = entry; // is an entry? + this.v = false; // visited + this.n = this.p = null; // next & previous + } - tree.size = function(x) { - return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]); - }; + // A generalized polygon clipping algorithm: given a polygon that has been cut + // into its visible line segments, and rejoins the segments by interpolating + // along the clip edge. + function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) { + var subject = [], + clip = [], + i, + n; - tree.nodeSize = function(x) { - return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null); - }; + segments.forEach(function(segment) { + if ((n = segment.length - 1) <= 0) return; + var n, p0 = segment[0], p1 = segment[n], x; - return tree; -} - -function treemapSlice(parent, x0, y0, x1, y1) { - var nodes = parent.children, - node, - i = -1, - n = nodes.length, - k = parent.value && (y1 - y0) / parent.value; - - while (++i < n) { - node = nodes[i], node.x0 = x0, node.x1 = x1; - node.y0 = y0, node.y1 = y0 += node.value * k; - } -} - -var phi = (1 + Math.sqrt(5)) / 2; - -function squarifyRatio(ratio, parent, x0, y0, x1, y1) { - var rows = [], - nodes = parent.children, - row, - nodeValue, - i0 = 0, - i1 = 0, - n = nodes.length, - dx, dy, - value = parent.value, - sumValue, - minValue, - maxValue, - newRatio, - minRatio, - alpha, - beta; - - while (i0 < n) { - dx = x1 - x0, dy = y1 - y0; - - // Find the next non-empty node. - do sumValue = nodes[i1++].value; while (!sumValue && i1 < n); - minValue = maxValue = sumValue; - alpha = Math.max(dy / dx, dx / dy) / (value * ratio); - beta = sumValue * sumValue * alpha; - minRatio = Math.max(maxValue / beta, beta / minValue); - - // Keep adding nodes while the aspect ratio maintains or improves. - for (; i1 < n; ++i1) { - sumValue += nodeValue = nodes[i1].value; - if (nodeValue < minValue) minValue = nodeValue; - if (nodeValue > maxValue) maxValue = nodeValue; - beta = sumValue * sumValue * alpha; - newRatio = Math.max(maxValue / beta, beta / minValue); - if (newRatio > minRatio) { sumValue -= nodeValue; break; } - minRatio = newRatio; - } + // If the first and last points of a segment are coincident, then treat as a + // closed ring. TODO if all rings are closed, then the winding order of the + // exterior ring should be checked. + if (pointEqual(p0, p1)) { + stream.lineStart(); + for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); + stream.lineEnd(); + return; + } - // Position and record the row orientation. - rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)}); - if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); - else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); - value -= sumValue, i0 = i1; - } + subject.push(x = new Intersection(p0, segment, null, true)); + clip.push(x.o = new Intersection(p0, null, x, false)); + subject.push(x = new Intersection(p1, segment, null, false)); + clip.push(x.o = new Intersection(p1, null, x, true)); + }); - return rows; -} + if (!subject.length) return; -var squarify = (function custom(ratio) { + clip.sort(compareIntersection); + link$1(subject); + link$1(clip); - function squarify(parent, x0, y0, x1, y1) { - squarifyRatio(ratio, parent, x0, y0, x1, y1); - } + for (i = 0, n = clip.length; i < n; ++i) { + clip[i].e = startInside = !startInside; + } - squarify.ratio = function(x) { - return custom((x = +x) > 1 ? x : 1); - }; + var start = subject[0], + points, + point; - return squarify; -})(phi); - -function index$2() { - var tile = squarify, - round = false, - dx = 1, - dy = 1, - paddingStack = [0], - paddingInner = constantZero, - paddingTop = constantZero, - paddingRight = constantZero, - paddingBottom = constantZero, - paddingLeft = constantZero; - - function treemap(root) { - root.x0 = - root.y0 = 0; - root.x1 = dx; - root.y1 = dy; - root.eachBefore(positionNode); - paddingStack = [0]; - if (round) root.eachBefore(roundNode); - return root; - } - - function positionNode(node) { - var p = paddingStack[node.depth], - x0 = node.x0 + p, - y0 = node.y0 + p, - x1 = node.x1 - p, - y1 = node.y1 - p; - if (x1 < x0) x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) y0 = y1 = (y0 + y1) / 2; - node.x0 = x0; - node.y0 = y0; - node.x1 = x1; - node.y1 = y1; - if (node.children) { - p = paddingStack[node.depth + 1] = paddingInner(node) / 2; - x0 += paddingLeft(node) - p; - y0 += paddingTop(node) - p; - x1 -= paddingRight(node) - p; - y1 -= paddingBottom(node) - p; - if (x1 < x0) x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) y0 = y1 = (y0 + y1) / 2; - tile(node, x0, y0, x1, y1); + while (1) { + // Find first unvisited intersection. + var current = start, + isSubject = true; + while (current.v) if ((current = current.n) === start) return; + points = current.z; + stream.lineStart(); + do { + current.v = current.o.v = true; + if (current.e) { + if (isSubject) { + for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.n.x, 1, stream); + } + current = current.n; + } else { + if (isSubject) { + points = current.p.z; + for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.p.x, -1, stream); + } + current = current.p; + } + current = current.o; + points = current.z; + isSubject = !isSubject; + } while (!current.v); + stream.lineEnd(); } } - treemap.round = function(x) { - return arguments.length ? (round = !!x, treemap) : round; - }; + function link$1(array) { + if (!(n = array.length)) return; + var n, + i = 0, + a = array[0], + b; + while (++i < n) { + a.n = b = array[i]; + b.p = a; + a = b; + } + a.n = b = array[0]; + b.p = a; + } - treemap.size = function(x) { - return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy]; - }; + var sum$1 = adder(); - treemap.tile = function(x) { - return arguments.length ? (tile = required(x), treemap) : tile; - }; + function polygonContains(polygon, point) { + var lambda = point[0], + phi = point[1], + normal = [sin$1(lambda), -cos$1(lambda), 0], + angle = 0, + winding = 0; - treemap.padding = function(x) { - return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner(); - }; + sum$1.reset(); - treemap.paddingInner = function(x) { - return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$8(+x), treemap) : paddingInner; - }; + for (var i = 0, n = polygon.length; i < n; ++i) { + if (!(m = (ring = polygon[i]).length)) continue; + var ring, + m, + point0 = ring[m - 1], + lambda0 = point0[0], + phi0 = point0[1] / 2 + quarterPi, + sinPhi0 = sin$1(phi0), + cosPhi0 = cos$1(phi0); + + for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { + var point1 = ring[j], + lambda1 = point1[0], + phi1 = point1[1] / 2 + quarterPi, + sinPhi1 = sin$1(phi1), + cosPhi1 = cos$1(phi1), + delta = lambda1 - lambda0, + sign$$1 = delta >= 0 ? 1 : -1, + absDelta = sign$$1 * delta, + antimeridian = absDelta > pi$3, + k = sinPhi0 * sinPhi1; + + sum$1.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta))); + angle += antimeridian ? delta + sign$$1 * tau$3 : delta; + + // Are the longitudes either side of the point’s meridian (lambda), + // and are the latitudes smaller than the parallel (phi)? + if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { + var arc = cartesianCross(cartesian(point0), cartesian(point1)); + cartesianNormalizeInPlace(arc); + var intersection = cartesianCross(normal, arc); + cartesianNormalizeInPlace(intersection); + var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]); + if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { + winding += antimeridian ^ delta >= 0 ? 1 : -1; + } + } + } + } - treemap.paddingOuter = function(x) { - return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop(); - }; + // First, determine whether the South pole is inside or outside: + // + // It is inside if: + // * the polygon winds around it in a clockwise direction. + // * the polygon does not (cumulatively) wind around it, but has a negative + // (counter-clockwise) area. + // + // Second, count the (signed) number of times a segment crosses a lambda + // from the point to the South pole. If it is zero, then the point is the + // same side as the South pole. + + return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1); + } + + function clip(pointVisible, clipLine, interpolate, start) { + return function(sink) { + var line = clipLine(sink), + ringBuffer = clipBuffer(), + ringSink = clipLine(ringBuffer), + polygonStarted = false, + polygon, + segments, + ring; + + var clip = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + clip.point = pointRing; + clip.lineStart = ringStart; + clip.lineEnd = ringEnd; + segments = []; + polygon = []; + }, + polygonEnd: function() { + clip.point = point; + clip.lineStart = lineStart; + clip.lineEnd = lineEnd; + segments = merge(segments); + var startInside = polygonContains(polygon, start); + if (segments.length) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + clipRejoin(segments, compareIntersection, startInside, interpolate, sink); + } else if (startInside) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + sink.lineStart(); + interpolate(null, null, 1, sink); + sink.lineEnd(); + } + if (polygonStarted) sink.polygonEnd(), polygonStarted = false; + segments = polygon = null; + }, + sphere: function() { + sink.polygonStart(); + sink.lineStart(); + interpolate(null, null, 1, sink); + sink.lineEnd(); + sink.polygonEnd(); + } + }; - treemap.paddingTop = function(x) { - return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$8(+x), treemap) : paddingTop; - }; + function point(lambda, phi) { + if (pointVisible(lambda, phi)) sink.point(lambda, phi); + } - treemap.paddingRight = function(x) { - return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$8(+x), treemap) : paddingRight; - }; + function pointLine(lambda, phi) { + line.point(lambda, phi); + } - treemap.paddingBottom = function(x) { - return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$8(+x), treemap) : paddingBottom; - }; + function lineStart() { + clip.point = pointLine; + line.lineStart(); + } - treemap.paddingLeft = function(x) { - return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$8(+x), treemap) : paddingLeft; - }; + function lineEnd() { + clip.point = point; + line.lineEnd(); + } + + function pointRing(lambda, phi) { + ring.push([lambda, phi]); + ringSink.point(lambda, phi); + } - return treemap; -} + function ringStart() { + ringSink.lineStart(); + ring = []; + } -function binary(parent, x0, y0, x1, y1) { - var nodes = parent.children, - i, n = nodes.length, - sum, sums = new Array(n + 1); + function ringEnd() { + pointRing(ring[0][0], ring[0][1]); + ringSink.lineEnd(); + + var clean = ringSink.clean(), + ringSegments = ringBuffer.result(), + i, n = ringSegments.length, m, + segment, + point; + + ring.pop(); + polygon.push(ring); + ring = null; + + if (!n) return; + + // No intersections. + if (clean & 1) { + segment = ringSegments[0]; + if ((m = segment.length - 1) > 0) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + sink.lineStart(); + for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); + sink.lineEnd(); + } + return; + } - for (sums[0] = sum = i = 0; i < n; ++i) { - sums[i + 1] = sum += nodes[i].value; - } + // Rejoin connected segments. + // TODO reuse ringBuffer.rejoin()? + if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); - partition(0, n, parent.value, x0, y0, x1, y1); + segments.push(ringSegments.filter(validSegment)); + } - function partition(i, j, value, x0, y0, x1, y1) { - if (i >= j - 1) { - var node = nodes[i]; - node.x0 = x0, node.y0 = y0; - node.x1 = x1, node.y1 = y1; - return; - } + return clip; + }; + } - var valueOffset = sums[i], - valueTarget = (value / 2) + valueOffset, - k = i + 1, - hi = j - 1; + function validSegment(segment) { + return segment.length > 1; + } - while (k < hi) { - var mid = k + hi >>> 1; - if (sums[mid] < valueTarget) k = mid + 1; - else hi = mid; - } + // Intersections are sorted along the clip edge. For both antimeridian cutting + // and circle clipping, the same comparison is used. + function compareIntersection(a, b) { + return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1]) + - ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]); + } + + var clipAntimeridian = clip( + function() { return true; }, + clipAntimeridianLine, + clipAntimeridianInterpolate, + [-pi$3, -halfPi$2] + ); - if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k; + // Takes a line and cuts into visible segments. Return values: 0 - there were + // intersections or the line was empty; 1 - no intersections; 2 - there were + // intersections, and the first and last segments should be rejoined. + function clipAntimeridianLine(stream) { + var lambda0 = NaN, + phi0 = NaN, + sign0 = NaN, + clean; // no intersections - var valueLeft = sums[k] - valueOffset, - valueRight = value - valueLeft; + return { + lineStart: function() { + stream.lineStart(); + clean = 1; + }, + point: function(lambda1, phi1) { + var sign1 = lambda1 > 0 ? pi$3 : -pi$3, + delta = abs(lambda1 - lambda0); + if (abs(delta - pi$3) < epsilon$2) { // line crosses a pole + stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2); + stream.point(sign0, phi0); + stream.lineEnd(); + stream.lineStart(); + stream.point(sign1, phi0); + stream.point(lambda1, phi0); + clean = 0; + } else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian + if (abs(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies + if (abs(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2; + phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); + stream.point(sign0, phi0); + stream.lineEnd(); + stream.lineStart(); + stream.point(sign1, phi0); + clean = 0; + } + stream.point(lambda0 = lambda1, phi0 = phi1); + sign0 = sign1; + }, + lineEnd: function() { + stream.lineEnd(); + lambda0 = phi0 = NaN; + }, + clean: function() { + return 2 - clean; // if intersections, rejoin first and last segments + } + }; + } - if ((x1 - x0) > (y1 - y0)) { - var xk = (x0 * valueRight + x1 * valueLeft) / value; - partition(i, k, valueLeft, x0, y0, xk, y1); - partition(k, j, valueRight, xk, y0, x1, y1); + function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { + var cosPhi0, + cosPhi1, + sinLambda0Lambda1 = sin$1(lambda0 - lambda1); + return abs(sinLambda0Lambda1) > epsilon$2 + ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1) + - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0)) + / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) + : (phi0 + phi1) / 2; + } + + function clipAntimeridianInterpolate(from, to, direction, stream) { + var phi; + if (from == null) { + phi = direction * halfPi$2; + stream.point(-pi$3, phi); + stream.point(0, phi); + stream.point(pi$3, phi); + stream.point(pi$3, 0); + stream.point(pi$3, -phi); + stream.point(0, -phi); + stream.point(-pi$3, -phi); + stream.point(-pi$3, 0); + stream.point(-pi$3, phi); + } else if (abs(from[0] - to[0]) > epsilon$2) { + var lambda = from[0] < to[0] ? pi$3 : -pi$3; + phi = direction * lambda / 2; + stream.point(-lambda, phi); + stream.point(0, phi); + stream.point(lambda, phi); } else { - var yk = (y0 * valueRight + y1 * valueLeft) / value; - partition(i, k, valueLeft, x0, y0, x1, yk); - partition(k, j, valueRight, x0, yk, x1, y1); + stream.point(to[0], to[1]); } } -} -function sliceDice(parent, x0, y0, x1, y1) { - (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1); -} + function clipCircle(radius) { + var cr = cos$1(radius), + delta = 6 * radians, + smallRadius = cr > 0, + notHemisphere = abs(cr) > epsilon$2; // TODO optimise for this common case -var resquarify = (function custom(ratio) { + function interpolate(from, to, direction, stream) { + circleStream(stream, radius, delta, direction, from, to); + } - function resquarify(parent, x0, y0, x1, y1) { - if ((rows = parent._squarify) && (rows.ratio === ratio)) { - var rows, - row, - nodes, - i, - j = -1, - n, - m = rows.length, - value = parent.value; - - while (++j < m) { - row = rows[j], nodes = row.children; - for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value; - if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); - else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); - value -= row.value; + function visible(lambda, phi) { + return cos$1(lambda) * cos$1(phi) > cr; + } + + // Takes a line and cuts into visible segments. Return values used for polygon + // clipping: 0 - there were intersections or the line was empty; 1 - no + // intersections 2 - there were intersections, and the first and last segments + // should be rejoined. + function clipLine(stream) { + var point0, // previous point + c0, // code for previous point + v0, // visibility of previous point + v00, // visibility of first point + clean; // no intersections + return { + lineStart: function() { + v00 = v0 = false; + clean = 1; + }, + point: function(lambda, phi) { + var point1 = [lambda, phi], + point2, + v = visible(lambda, phi), + c = smallRadius + ? v ? 0 : code(lambda, phi) + : v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0; + if (!point0 && (v00 = v0 = v)) stream.lineStart(); + // Handle degeneracies. + // TODO ignore if not clipping polygons. + if (v !== v0) { + point2 = intersect(point0, point1); + if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) { + point1[0] += epsilon$2; + point1[1] += epsilon$2; + v = visible(point1[0], point1[1]); + } + } + if (v !== v0) { + clean = 0; + if (v) { + // outside going in + stream.lineStart(); + point2 = intersect(point1, point0); + stream.point(point2[0], point2[1]); + } else { + // inside going out + point2 = intersect(point0, point1); + stream.point(point2[0], point2[1]); + stream.lineEnd(); + } + point0 = point2; + } else if (notHemisphere && point0 && smallRadius ^ v) { + var t; + // If the codes for two points are different, or are both zero, + // and there this segment intersects with the small circle. + if (!(c & c0) && (t = intersect(point1, point0, true))) { + clean = 0; + if (smallRadius) { + stream.lineStart(); + stream.point(t[0][0], t[0][1]); + stream.point(t[1][0], t[1][1]); + stream.lineEnd(); + } else { + stream.point(t[1][0], t[1][1]); + stream.lineEnd(); + stream.lineStart(); + stream.point(t[0][0], t[0][1]); + } + } + } + if (v && (!point0 || !pointEqual(point0, point1))) { + stream.point(point1[0], point1[1]); + } + point0 = point1, v0 = v, c0 = c; + }, + lineEnd: function() { + if (v0) stream.lineEnd(); + point0 = null; + }, + // Rejoin first and last segments if there were intersections and the first + // and last points were visible. + clean: function() { + return clean | ((v00 && v0) << 1); + } + }; + } + + // Intersects the great circle between a and b with the clip circle. + function intersect(a, b, two) { + var pa = cartesian(a), + pb = cartesian(b); + + // We have two planes, n1.p = d1 and n2.p = d2. + // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). + var n1 = [1, 0, 0], // normal + n2 = cartesianCross(pa, pb), + n2n2 = cartesianDot(n2, n2), + n1n2 = n2[0], // cartesianDot(n1, n2), + determinant = n2n2 - n1n2 * n1n2; + + // Two polar points. + if (!determinant) return !two && a; + + var c1 = cr * n2n2 / determinant, + c2 = -cr * n1n2 / determinant, + n1xn2 = cartesianCross(n1, n2), + A = cartesianScale(n1, c1), + B = cartesianScale(n2, c2); + cartesianAddInPlace(A, B); + + // Solve |p(t)|^2 = 1. + var u = n1xn2, + w = cartesianDot(A, u), + uu = cartesianDot(u, u), + t2 = w * w - uu * (cartesianDot(A, A) - 1); + + if (t2 < 0) return; + + var t = sqrt(t2), + q = cartesianScale(u, (-w - t) / uu); + cartesianAddInPlace(q, A); + q = spherical(q); + + if (!two) return q; + + // Two intersection points. + var lambda0 = a[0], + lambda1 = b[0], + phi0 = a[1], + phi1 = b[1], + z; + + if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; + + var delta = lambda1 - lambda0, + polar = abs(delta - pi$3) < epsilon$2, + meridian = polar || delta < epsilon$2; + + if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; + + // Check that the first point is between a and b. + if (meridian + ? polar + ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$2 ? phi0 : phi1) + : phi0 <= q[1] && q[1] <= phi1 + : delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) { + var q1 = cartesianScale(u, (-w + t) / uu); + cartesianAddInPlace(q1, A); + return [q, spherical(q1)]; } - } else { - parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1); - rows.ratio = ratio; } + + // Generates a 4-bit vector representing the location of a point relative to + // the small circle's bounding box. + function code(lambda, phi) { + var r = smallRadius ? radius : pi$3 - radius, + code = 0; + if (lambda < -r) code |= 1; // left + else if (lambda > r) code |= 2; // right + if (phi < -r) code |= 4; // below + else if (phi > r) code |= 8; // above + return code; + } + + return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]); } - resquarify.ratio = function(x) { - return custom((x = +x) > 1 ? x : 1); - }; + function clipLine(a, b, x0, y0, x1, y1) { + var ax = a[0], + ay = a[1], + bx = b[0], + by = b[1], + t0 = 0, + t1 = 1, + dx = bx - ax, + dy = by - ay, + r; - return resquarify; -})(phi); - -function d3_polygonArea(polygon) { - var i = -1, - n = polygon.length, - a, - b = polygon[n - 1], - area = 0; - - while (++i < n) { - a = b; - b = polygon[i]; - area += a[1] * b[0] - a[0] * b[1]; - } - - return area / 2; -} - -function d3_polygonCentroid(polygon) { - var i = -1, - n = polygon.length, - x = 0, - y = 0, - a, - b = polygon[n - 1], - c, - k = 0; - - while (++i < n) { - a = b; - b = polygon[i]; - k += c = a[0] * b[1] - b[0] * a[1]; - x += (a[0] + b[0]) * c; - y += (a[1] + b[1]) * c; - } - - return k *= 3, [x / k, y / k]; -} - -// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of -// the 3D cross product in a quadrant I Cartesian coordinate system (+x is -// right, +y is up). Returns a positive value if ABC is counter-clockwise, -// negative if clockwise, and zero if the points are collinear. -function cross$1(a, b, c) { - return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); -} - -function lexicographicOrder(a, b) { - return a[0] - b[0] || a[1] - b[1]; -} - -// Computes the upper convex hull per the monotone chain algorithm. -// Assumes points.length >= 3, is sorted by x, unique in y. -// Returns an array of indices into points in left-to-right order. -function computeUpperHullIndexes(points) { - var n = points.length, - indexes = [0, 1], - size = 2; - - for (var i = 2; i < n; ++i) { - while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size; - indexes[size++] = i; - } - - return indexes.slice(0, size); // remove popped points -} - -function d3_polygonHull(points) { - if ((n = points.length) < 3) return null; - - var i, - n, - sortedPoints = new Array(n), - flippedPoints = new Array(n); - - for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i]; - sortedPoints.sort(lexicographicOrder); - for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]]; - - var upperIndexes = computeUpperHullIndexes(sortedPoints), - lowerIndexes = computeUpperHullIndexes(flippedPoints); - - // Construct the hull polygon, removing possible duplicate endpoints. - var skipLeft = lowerIndexes[0] === upperIndexes[0], - skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1], - hull = []; - - // Add upper hull in right-to-l order. - // Then add lower hull in left-to-right order. - for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]); - for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]); - - return hull; -} - -function contains$1(polygon, point) { - var n = polygon.length, - p = polygon[n - 1], - x = point[0], y = point[1], - x0 = p[0], y0 = p[1], - x1, y1, - inside = false; - - for (var i = 0; i < n; ++i) { - p = polygon[i], x1 = p[0], y1 = p[1]; - if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside; - x0 = x1, y0 = y1; - } - - return inside; -} - -function length$1(polygon) { - var i = -1, - n = polygon.length, - b = polygon[n - 1], - xa, - ya, - xb = b[0], - yb = b[1], - perimeter = 0; - - while (++i < n) { - xa = xb; - ya = yb; - b = polygon[i]; - xb = b[0]; - yb = b[1]; - xa -= xb; - ya -= yb; - perimeter += Math.sqrt(xa * xa + ya * ya); - } - - return perimeter; -} - -var slice$4 = [].slice; - -var noabort = {}; - -function Queue(size) { - this._size = size; - this._call = - this._error = null; - this._tasks = []; - this._data = []; - this._waiting = - this._active = - this._ended = - this._start = 0; // inside a synchronous task callback? -} - -Queue.prototype = queue.prototype = { - constructor: Queue, - defer: function(callback) { - if (typeof callback !== "function") throw new Error("invalid callback"); - if (this._call) throw new Error("defer after await"); - if (this._error != null) return this; - var t = slice$4.call(arguments, 1); - t.push(callback); - ++this._waiting, this._tasks.push(t); - poke$1(this); - return this; - }, - abort: function() { - if (this._error == null) abort(this, new Error("abort")); - return this; - }, - await: function(callback) { - if (typeof callback !== "function") throw new Error("invalid callback"); - if (this._call) throw new Error("multiple await"); - this._call = function(error, results) { callback.apply(null, [error].concat(results)); }; - maybeNotify(this); - return this; - }, - awaitAll: function(callback) { - if (typeof callback !== "function") throw new Error("invalid callback"); - if (this._call) throw new Error("multiple await"); - this._call = callback; - maybeNotify(this); - return this; + r = x0 - ax; + if (!dx && r > 0) return; + r /= dx; + if (dx < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dx > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = x1 - ax; + if (!dx && r < 0) return; + r /= dx; + if (dx < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dx > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + r = y0 - ay; + if (!dy && r > 0) return; + r /= dy; + if (dy < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dy > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = y1 - ay; + if (!dy && r < 0) return; + r /= dy; + if (dy < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dy > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; + if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; + return true; } -}; - -function poke$1(q) { - if (!q._start) { - try { start$1(q); } // let the current task complete - catch (e) { - if (q._tasks[q._ended + q._active - 1]) abort(q, e); // task errored synchronously - else if (!q._data) throw e; // await callback errored synchronously - } - } -} - -function start$1(q) { - while (q._start = q._waiting && q._active < q._size) { - var i = q._ended + q._active, - t = q._tasks[i], - j = t.length - 1, - c = t[j]; - t[j] = end(q, i); - --q._waiting, ++q._active; - t = c.apply(null, t); - if (!q._tasks[i]) continue; // task finished synchronously - q._tasks[i] = t || noabort; - } -} - -function end(q, i) { - return function(e, r) { - if (!q._tasks[i]) return; // ignore multiple callbacks - --q._active, ++q._ended; - q._tasks[i] = null; - if (q._error != null) return; // ignore secondary errors - if (e != null) { - abort(q, e); - } else { - q._data[i] = r; - if (q._waiting) poke$1(q); - else maybeNotify(q); - } - }; -} -function abort(q, e) { - var i = q._tasks.length, t; - q._error = e; // ignore active callbacks - q._data = undefined; // allow gc - q._waiting = NaN; // prevent starting + var clipMax = 1e9, clipMin = -clipMax; - while (--i >= 0) { - if (t = q._tasks[i]) { - q._tasks[i] = null; - if (t.abort) { - try { t.abort(); } - catch (e) { /* ignore */ } + // TODO Use d3-polygon’s polygonContains here for the ring check? + // TODO Eliminate duplicate buffering in clipBuffer and polygon.push? + + function clipRectangle(x0, y0, x1, y1) { + + function visible(x, y) { + return x0 <= x && x <= x1 && y0 <= y && y <= y1; + } + + function interpolate(from, to, direction, stream) { + var a = 0, a1 = 0; + if (from == null + || (a = corner(from, direction)) !== (a1 = corner(to, direction)) + || comparePoint(from, to) < 0 ^ direction > 0) { + do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); + while ((a = (a + direction + 4) % 4) !== a1); + } else { + stream.point(to[0], to[1]); } } - } - q._active = NaN; // allow notification - maybeNotify(q); -} + function corner(p, direction) { + return abs(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3 + : abs(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1 + : abs(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0 + : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon + } + + function compareIntersection(a, b) { + return comparePoint(a.x, b.x); + } + + function comparePoint(a, b) { + var ca = corner(a, 1), + cb = corner(b, 1); + return ca !== cb ? ca - cb + : ca === 0 ? b[1] - a[1] + : ca === 1 ? a[0] - b[0] + : ca === 2 ? a[1] - b[1] + : b[0] - a[0]; + } + + return function(stream) { + var activeStream = stream, + bufferStream = clipBuffer(), + segments, + polygon, + ring, + x__, y__, v__, // first point + x_, y_, v_, // previous point + first, + clean; + + var clipStream = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: polygonStart, + polygonEnd: polygonEnd + }; -function maybeNotify(q) { - if (!q._active && q._call) { - var d = q._data; - q._data = undefined; // allow gc - q._call(q._error, d); - } -} - -function queue(concurrency) { - if (concurrency == null) concurrency = Infinity; - else if (!((concurrency = +concurrency) >= 1)) throw new Error("invalid concurrency"); - return new Queue(concurrency); -} - -function defaultSource$1() { - return Math.random(); -} - -var uniform = (function sourceRandomUniform(source) { - function randomUniform(min, max) { - min = min == null ? 0 : +min; - max = max == null ? 1 : +max; - if (arguments.length === 1) max = min, min = 0; - else max -= min; - return function() { - return source() * max + min; - }; - } + function point(x, y) { + if (visible(x, y)) activeStream.point(x, y); + } - randomUniform.source = sourceRandomUniform; + function polygonInside() { + var winding = 0; - return randomUniform; -})(defaultSource$1); + for (var i = 0, n = polygon.length; i < n; ++i) { + for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { + a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; + if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } + else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } + } + } -var normal = (function sourceRandomNormal(source) { - function randomNormal(mu, sigma) { - var x, r; - mu = mu == null ? 0 : +mu; - sigma = sigma == null ? 1 : +sigma; - return function() { - var y; + return winding; + } - // If available, use the second previously-generated uniform random. - if (x != null) y = x, x = null; + // Buffer geometry within a polygon and then clip it en masse. + function polygonStart() { + activeStream = bufferStream, segments = [], polygon = [], clean = true; + } - // Otherwise, generate a new x and y. - else do { - x = source() * 2 - 1; - y = source() * 2 - 1; - r = x * x + y * y; - } while (!r || r > 1); + function polygonEnd() { + var startInside = polygonInside(), + cleanInside = clean && startInside, + visible = (segments = merge(segments)).length; + if (cleanInside || visible) { + stream.polygonStart(); + if (cleanInside) { + stream.lineStart(); + interpolate(null, null, 1, stream); + stream.lineEnd(); + } + if (visible) { + clipRejoin(segments, compareIntersection, startInside, interpolate, stream); + } + stream.polygonEnd(); + } + activeStream = stream, segments = polygon = ring = null; + } - return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r); - }; - } + function lineStart() { + clipStream.point = linePoint; + if (polygon) polygon.push(ring = []); + first = true; + v_ = false; + x_ = y_ = NaN; + } - randomNormal.source = sourceRandomNormal; + // TODO rather than special-case polygons, simply handle them separately. + // Ideally, coincident intersection points should be jittered to avoid + // clipping issues. + function lineEnd() { + if (segments) { + linePoint(x__, y__); + if (v__ && v_) bufferStream.rejoin(); + segments.push(bufferStream.result()); + } + clipStream.point = point; + if (v_) activeStream.lineEnd(); + } - return randomNormal; -})(defaultSource$1); + function linePoint(x, y) { + var v = visible(x, y); + if (polygon) ring.push([x, y]); + if (first) { + x__ = x, y__ = y, v__ = v; + first = false; + if (v) { + activeStream.lineStart(); + activeStream.point(x, y); + } + } else { + if (v && v_) activeStream.point(x, y); + else { + var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], + b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; + if (clipLine(a, b, x0, y0, x1, y1)) { + if (!v_) { + activeStream.lineStart(); + activeStream.point(a[0], a[1]); + } + activeStream.point(b[0], b[1]); + if (!v) activeStream.lineEnd(); + clean = false; + } else if (v) { + activeStream.lineStart(); + activeStream.point(x, y); + clean = false; + } + } + } + x_ = x, y_ = y, v_ = v; + } -var logNormal = (function sourceRandomLogNormal(source) { - function randomLogNormal() { - var randomNormal = normal.source(source).apply(this, arguments); - return function() { - return Math.exp(randomNormal()); + return clipStream; }; } - randomLogNormal.source = sourceRandomLogNormal; + function extent$1() { + var x0 = 0, + y0 = 0, + x1 = 960, + y1 = 500, + cache, + cacheStream, + clip; - return randomLogNormal; -})(defaultSource$1); - -var irwinHall = (function sourceRandomIrwinHall(source) { - function randomIrwinHall(n) { - return function() { - for (var sum = 0, i = 0; i < n; ++i) sum += source(); - return sum; + return clip = { + stream: function(stream) { + return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream); + }, + extent: function(_) { + return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]]; + } }; } - randomIrwinHall.source = sourceRandomIrwinHall; + var lengthSum = adder(), + lambda0$2, + sinPhi0$1, + cosPhi0$1; - return randomIrwinHall; -})(defaultSource$1); + var lengthStream = { + sphere: noop$1, + point: noop$1, + lineStart: lengthLineStart, + lineEnd: noop$1, + polygonStart: noop$1, + polygonEnd: noop$1 + }; -var bates = (function sourceRandomBates(source) { - function randomBates(n) { - var randomIrwinHall = irwinHall.source(source)(n); - return function() { - return randomIrwinHall() / n; - }; + function lengthLineStart() { + lengthStream.point = lengthPointFirst; + lengthStream.lineEnd = lengthLineEnd; } - randomBates.source = sourceRandomBates; - - return randomBates; -})(defaultSource$1); + function lengthLineEnd() { + lengthStream.point = lengthStream.lineEnd = noop$1; + } -var exponential$1 = (function sourceRandomExponential(source) { - function randomExponential(lambda) { - return function() { - return -Math.log(1 - source()) / lambda; - }; + function lengthPointFirst(lambda, phi) { + lambda *= radians, phi *= radians; + lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi); + lengthStream.point = lengthPoint; } - randomExponential.source = sourceRandomExponential; - - return randomExponential; -})(defaultSource$1); - -function d3_request(url, callback) { - var request, - event = dispatch("beforesend", "progress", "load", "error"), - mimeType, - headers = map$1(), - xhr = new XMLHttpRequest, - user = null, - password = null, - response, - responseType, - timeout = 0; - - // If IE does not support CORS, use XDomainRequest. - if (typeof XDomainRequest !== "undefined" - && !("withCredentials" in xhr) - && /^(http(s)?:)?\/\//.test(url)) xhr = new XDomainRequest; - - "onload" in xhr - ? xhr.onload = xhr.onerror = xhr.ontimeout = respond - : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); }; - - function respond(o) { - var status = xhr.status, result; - if (!status && hasResponse(xhr) - || status >= 200 && status < 300 - || status === 304) { - if (response) { - try { - result = response.call(request, xhr); - } catch (e) { - event.call("error", request, e); - return; - } - } else { - result = xhr; - } - event.call("load", request, result); - } else { - event.call("error", request, o); - } + function lengthPoint(lambda, phi) { + lambda *= radians, phi *= radians; + var sinPhi = sin$1(phi), + cosPhi = cos$1(phi), + delta = abs(lambda - lambda0$2), + cosDelta = cos$1(delta), + sinDelta = sin$1(delta), + x = cosPhi * sinDelta, + y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta, + z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta; + lengthSum.add(atan2(sqrt(x * x + y * y), z)); + lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi; } - xhr.onprogress = function(e) { - event.call("progress", request, e); - }; + function length$1(object) { + lengthSum.reset(); + geoStream(object, lengthStream); + return +lengthSum; + } - request = { - header: function(name, value) { - name = (name + "").toLowerCase(); - if (arguments.length < 2) return headers.get(name); - if (value == null) headers.remove(name); - else headers.set(name, value + ""); - return request; - }, + var coordinates = [null, null], + object$1 = {type: "LineString", coordinates: coordinates}; - // If mimeType is non-null and no Accept header is set, a default is used. - mimeType: function(value) { - if (!arguments.length) return mimeType; - mimeType = value == null ? null : value + ""; - return request; - }, + function distance(a, b) { + coordinates[0] = a; + coordinates[1] = b; + return length$1(object$1); + } - // Specifies what type the response value should take; - // for instance, arraybuffer, blob, document, or text. - responseType: function(value) { - if (!arguments.length) return responseType; - responseType = value; - return request; + var containsObjectType = { + Feature: function(object, point) { + return containsGeometry(object.geometry, point); }, + FeatureCollection: function(object, point) { + var features = object.features, i = -1, n = features.length; + while (++i < n) if (containsGeometry(features[i].geometry, point)) return true; + return false; + } + }; - timeout: function(value) { - if (!arguments.length) return timeout; - timeout = +value; - return request; + var containsGeometryType = { + Sphere: function() { + return true; }, - - user: function(value) { - return arguments.length < 1 ? user : (user = value == null ? null : value + "", request); + Point: function(object, point) { + return containsPoint(object.coordinates, point); }, - - password: function(value) { - return arguments.length < 1 ? password : (password = value == null ? null : value + "", request); + MultiPoint: function(object, point) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) if (containsPoint(coordinates[i], point)) return true; + return false; }, - - // Specify how to convert the response content to a specific type; - // changes the callback value on "load" events. - response: function(value) { - response = value; - return request; + LineString: function(object, point) { + return containsLine(object.coordinates, point); }, - - // Alias for send("GET", …). - get: function(data, callback) { - return request.send("GET", data, callback); + MultiLineString: function(object, point) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) if (containsLine(coordinates[i], point)) return true; + return false; }, - - // Alias for send("POST", …). - post: function(data, callback) { - return request.send("POST", data, callback); + Polygon: function(object, point) { + return containsPolygon(object.coordinates, point); }, - - // If callback is non-null, it will be used for error and load events. - send: function(method, data, callback) { - xhr.open(method, url, true, user, password); - if (mimeType != null && !headers.has("accept")) headers.set("accept", mimeType + ",*/*"); - if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); }); - if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType); - if (responseType != null) xhr.responseType = responseType; - if (timeout > 0) xhr.timeout = timeout; - if (callback == null && typeof data === "function") callback = data, data = null; - if (callback != null && callback.length === 1) callback = fixCallback(callback); - if (callback != null) request.on("error", callback).on("load", function(xhr) { callback(null, xhr); }); - event.call("beforesend", request, xhr); - xhr.send(data == null ? null : data); - return request; + MultiPolygon: function(object, point) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) if (containsPolygon(coordinates[i], point)) return true; + return false; }, - - abort: function() { - xhr.abort(); - return request; - }, - - on: function() { - var value = event.on.apply(event, arguments); - return value === event ? request : value; + GeometryCollection: function(object, point) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) if (containsGeometry(geometries[i], point)) return true; + return false; } }; - if (callback != null) { - if (typeof callback !== "function") throw new Error("invalid callback: " + callback); - return request.get(callback); + function containsGeometry(geometry, point) { + return geometry && containsGeometryType.hasOwnProperty(geometry.type) + ? containsGeometryType[geometry.type](geometry, point) + : false; } - return request; -} - -function fixCallback(callback) { - return function(error, xhr) { - callback(error == null ? xhr : null); - }; -} - -function hasResponse(xhr) { - var type = xhr.responseType; - return type && type !== "text" - ? xhr.response // null on error - : xhr.responseText; // "" on error -} - -function type$1(defaultMimeType, response) { - return function(url, callback) { - var r = d3_request(url).mimeType(defaultMimeType).response(response); - if (callback != null) { - if (typeof callback !== "function") throw new Error("invalid callback: " + callback); - return r.get(callback); - } - return r; - }; -} - -var html = type$1("text/html", function(xhr) { - return document.createRange().createContextualFragment(xhr.responseText); -}); - -var d3_json = type$1("application/json", function(xhr) { - return JSON.parse(xhr.responseText); -}); - -var d3_text = type$1("text/plain", function(xhr) { - return xhr.responseText; -}); - -var d3_xml = type$1("application/xml", function(xhr) { - var xml = xhr.responseXML; - if (!xml) throw new Error("parse error"); - return xml; -}); - -function dsv$1(defaultMimeType, parse) { - return function(url, row, callback) { - if (arguments.length < 3) callback = row, row = null; - var r = d3_request(url).mimeType(defaultMimeType); - r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; }; - r.row(row); - return callback ? r.get(callback) : r; - }; -} - -function responseOf(parse, row) { - return function(request) { - return parse(request.responseText, row); - }; -} - -var csv$1 = dsv$1("text/csv", csvParse); - -var tsv$1 = dsv$1("text/tab-separated-values", tsvParse); - -var array$2 = Array.prototype; - -var map$2 = array$2.map; -var slice$5 = array$2.slice; + function containsPoint(coordinates, point) { + return distance(coordinates, point) === 0; + } -var implicit = {name: "implicit"}; + function containsLine(coordinates, point) { + var ab = distance(coordinates[0], coordinates[1]), + ao = distance(coordinates[0], point), + ob = distance(point, coordinates[1]); + return ao + ob <= ab + epsilon$2; + } -function ordinal(range) { - var index = map$1(), - domain = [], - unknown = implicit; + function containsPolygon(coordinates, point) { + return !!polygonContains(coordinates.map(ringRadians), pointRadians(point)); + } - range = range == null ? [] : slice$5.call(range); + function ringRadians(ring) { + return ring = ring.map(pointRadians), ring.pop(), ring; + } - function scale(d) { - var key = d + "", i = index.get(key); - if (!i) { - if (unknown !== implicit) return unknown; - index.set(key, i = domain.push(d)); - } - return range[(i - 1) % range.length]; + function pointRadians(point) { + return [point[0] * radians, point[1] * radians]; } - scale.domain = function(_) { - if (!arguments.length) return domain.slice(); - domain = [], index = map$1(); - var i = -1, n = _.length, d, key; - while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d)); - return scale; - }; + function contains(object, point) { + return (object && containsObjectType.hasOwnProperty(object.type) + ? containsObjectType[object.type] + : containsGeometry)(object, point); + } - scale.range = function(_) { - return arguments.length ? (range = slice$5.call(_), scale) : range.slice(); - }; + function graticuleX(y0, y1, dy) { + var y = range(y0, y1 - epsilon$2, dy).concat(y1); + return function(x) { return y.map(function(y) { return [x, y]; }); }; + } - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; + function graticuleY(x0, x1, dx) { + var x = range(x0, x1 - epsilon$2, dx).concat(x1); + return function(y) { return x.map(function(x) { return [x, y]; }); }; + } - scale.copy = function() { - return ordinal() - .domain(domain) - .range(range) - .unknown(unknown); - }; + function graticule() { + var x1, x0, X1, X0, + y1, y0, Y1, Y0, + dx = 10, dy = dx, DX = 90, DY = 360, + x, y, X, Y, + precision = 2.5; - return scale; -} - -function band() { - var scale = ordinal().unknown(undefined), - domain = scale.domain, - ordinalRange = scale.range, - range$$1 = [0, 1], - step, - bandwidth, - round = false, - paddingInner = 0, - paddingOuter = 0, - align = 0.5; - - delete scale.unknown; - - function rescale() { - var n = domain().length, - reverse = range$$1[1] < range$$1[0], - start = range$$1[reverse - 0], - stop = range$$1[1 - reverse]; - step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2); - if (round) step = Math.floor(step); - start += (stop - start - step * (n - paddingInner)) * align; - bandwidth = step * (1 - paddingInner); - if (round) start = Math.round(start), bandwidth = Math.round(bandwidth); - var values = d3_range(n).map(function(i) { return start + step * i; }); - return ordinalRange(reverse ? values.reverse() : values); - } - - scale.domain = function(_) { - return arguments.length ? (domain(_), rescale()) : domain(); - }; + function graticule() { + return {type: "MultiLineString", coordinates: lines()}; + } - scale.range = function(_) { - return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice(); - }; + function lines() { + return range(ceil(X0 / DX) * DX, X1, DX).map(X) + .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y)) + .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$2; }).map(x)) + .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$2; }).map(y)); + } - scale.rangeRound = function(_) { - return range$$1 = [+_[0], +_[1]], round = true, rescale(); - }; + graticule.lines = function() { + return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); + }; - scale.bandwidth = function() { - return bandwidth; - }; + graticule.outline = function() { + return { + type: "Polygon", + coordinates: [ + X(X0).concat( + Y(Y1).slice(1), + X(X1).reverse().slice(1), + Y(Y0).reverse().slice(1)) + ] + }; + }; - scale.step = function() { - return step; - }; + graticule.extent = function(_) { + if (!arguments.length) return graticule.extentMinor(); + return graticule.extentMajor(_).extentMinor(_); + }; - scale.round = function(_) { - return arguments.length ? (round = !!_, rescale()) : round; - }; + graticule.extentMajor = function(_) { + if (!arguments.length) return [[X0, Y0], [X1, Y1]]; + X0 = +_[0][0], X1 = +_[1][0]; + Y0 = +_[0][1], Y1 = +_[1][1]; + if (X0 > X1) _ = X0, X0 = X1, X1 = _; + if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; + return graticule.precision(precision); + }; - scale.padding = function(_) { - return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner; - }; + graticule.extentMinor = function(_) { + if (!arguments.length) return [[x0, y0], [x1, y1]]; + x0 = +_[0][0], x1 = +_[1][0]; + y0 = +_[0][1], y1 = +_[1][1]; + if (x0 > x1) _ = x0, x0 = x1, x1 = _; + if (y0 > y1) _ = y0, y0 = y1, y1 = _; + return graticule.precision(precision); + }; - scale.paddingInner = function(_) { - return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner; - }; + graticule.step = function(_) { + if (!arguments.length) return graticule.stepMinor(); + return graticule.stepMajor(_).stepMinor(_); + }; - scale.paddingOuter = function(_) { - return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter; - }; + graticule.stepMajor = function(_) { + if (!arguments.length) return [DX, DY]; + DX = +_[0], DY = +_[1]; + return graticule; + }; - scale.align = function(_) { - return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align; - }; + graticule.stepMinor = function(_) { + if (!arguments.length) return [dx, dy]; + dx = +_[0], dy = +_[1]; + return graticule; + }; - scale.copy = function() { - return band() - .domain(domain()) - .range(range$$1) - .round(round) - .paddingInner(paddingInner) - .paddingOuter(paddingOuter) - .align(align); - }; + graticule.precision = function(_) { + if (!arguments.length) return precision; + precision = +_; + x = graticuleX(y0, y1, 90); + y = graticuleY(x0, x1, precision); + X = graticuleX(Y0, Y1, 90); + Y = graticuleY(X0, X1, precision); + return graticule; + }; - return rescale(); -} + return graticule + .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]]) + .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]); + } -function pointish(scale) { - var copy = scale.copy; + function graticule10() { + return graticule()(); + } - scale.padding = scale.paddingOuter; - delete scale.paddingInner; - delete scale.paddingOuter; + function interpolate$2(a, b) { + var x0 = a[0] * radians, + y0 = a[1] * radians, + x1 = b[0] * radians, + y1 = b[1] * radians, + cy0 = cos$1(y0), + sy0 = sin$1(y0), + cy1 = cos$1(y1), + sy1 = sin$1(y1), + kx0 = cy0 * cos$1(x0), + ky0 = cy0 * sin$1(x0), + kx1 = cy1 * cos$1(x1), + ky1 = cy1 * sin$1(x1), + d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))), + k = sin$1(d); - scale.copy = function() { - return pointish(copy()); - }; + var interpolate = d ? function(t) { + var B = sin$1(t *= d) / k, + A = sin$1(d - t) / k, + x = A * kx0 + B * kx1, + y = A * ky0 + B * ky1, + z = A * sy0 + B * sy1; + return [ + atan2(y, x) * degrees$1, + atan2(z, sqrt(x * x + y * y)) * degrees$1 + ]; + } : function() { + return [x0 * degrees$1, y0 * degrees$1]; + }; - return scale; -} + interpolate.distance = d; -function point$1() { - return pointish(band().paddingInner(1)); -} + return interpolate; + } -function constant$9(x) { - return function() { + function identity$4(x) { return x; - }; -} - -function number$2(x) { - return +x; -} - -var unit = [0, 1]; - -function deinterpolateLinear(a, b) { - return (b -= (a = +a)) - ? function(x) { return (x - a) / b; } - : constant$9(b); -} + } -function deinterpolateClamp(deinterpolate) { - return function(a, b) { - var d = deinterpolate(a = +a, b = +b); - return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); }; - }; -} + var areaSum$1 = adder(), + areaRingSum$1 = adder(), + x00, + y00, + x0$1, + y0$1; -function reinterpolateClamp(reinterpolate) { - return function(a, b) { - var r = reinterpolate(a = +a, b = +b); - return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); }; + var areaStream$1 = { + point: noop$1, + lineStart: noop$1, + lineEnd: noop$1, + polygonStart: function() { + areaStream$1.lineStart = areaRingStart$1; + areaStream$1.lineEnd = areaRingEnd$1; + }, + polygonEnd: function() { + areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$1; + areaSum$1.add(abs(areaRingSum$1)); + areaRingSum$1.reset(); + }, + result: function() { + var area = areaSum$1 / 2; + areaSum$1.reset(); + return area; + } }; -} - -function bimap(domain, range, deinterpolate, reinterpolate) { - var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1]; - if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0); - else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1); - return function(x) { return r0(d0(x)); }; -} -function polymap(domain, range, deinterpolate, reinterpolate) { - var j = Math.min(domain.length, range.length) - 1, - d = new Array(j), - r = new Array(j), - i = -1; - - // Reverse descending domains. - if (domain[j] < domain[0]) { - domain = domain.slice().reverse(); - range = range.slice().reverse(); + function areaRingStart$1() { + areaStream$1.point = areaPointFirst$1; } - while (++i < j) { - d[i] = deinterpolate(domain[i], domain[i + 1]); - r[i] = reinterpolate(range[i], range[i + 1]); + function areaPointFirst$1(x, y) { + areaStream$1.point = areaPoint$1; + x00 = x0$1 = x, y00 = y0$1 = y; } - return function(x) { - var i = bisectRight(domain, x, 1, j) - 1; - return r[i](d[i](x)); - }; -} - -function copy(source, target) { - return target - .domain(source.domain()) - .range(source.range()) - .interpolate(source.interpolate()) - .clamp(source.clamp()); -} - -// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. -// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b]. -function continuous(deinterpolate, reinterpolate) { - var domain = unit, - range = unit, - interpolate$$1 = d3_interpolate, - clamp = false, - piecewise, - output, - input; - - function rescale() { - piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap; - output = input = null; - return scale; + function areaPoint$1(x, y) { + areaRingSum$1.add(y0$1 * x - x0$1 * y); + x0$1 = x, y0$1 = y; } - function scale(x) { - return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x); + function areaRingEnd$1() { + areaPoint$1(x00, y00); } - scale.invert = function(y) { - return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y); - }; - - scale.domain = function(_) { - return arguments.length ? (domain = map$2.call(_, number$2), rescale()) : domain.slice(); - }; + var x0$2 = Infinity, + y0$2 = x0$2, + x1 = -x0$2, + y1 = x1; - scale.range = function(_) { - return arguments.length ? (range = slice$5.call(_), rescale()) : range.slice(); + var boundsStream$1 = { + point: boundsPoint$1, + lineStart: noop$1, + lineEnd: noop$1, + polygonStart: noop$1, + polygonEnd: noop$1, + result: function() { + var bounds = [[x0$2, y0$2], [x1, y1]]; + x1 = y1 = -(y0$2 = x0$2 = Infinity); + return bounds; + } }; - scale.rangeRound = function(_) { - return range = slice$5.call(_), interpolate$$1 = interpolateRound, rescale(); - }; + function boundsPoint$1(x, y) { + if (x < x0$2) x0$2 = x; + if (x > x1) x1 = x; + if (y < y0$2) y0$2 = y; + if (y > y1) y1 = y; + } - scale.clamp = function(_) { - return arguments.length ? (clamp = !!_, rescale()) : clamp; + // TODO Enforce positive area for exterior, negative area for interior? + + var X0$1 = 0, + Y0$1 = 0, + Z0$1 = 0, + X1$1 = 0, + Y1$1 = 0, + Z1$1 = 0, + X2$1 = 0, + Y2$1 = 0, + Z2$1 = 0, + x00$1, + y00$1, + x0$3, + y0$3; + + var centroidStream$1 = { + point: centroidPoint$1, + lineStart: centroidLineStart$1, + lineEnd: centroidLineEnd$1, + polygonStart: function() { + centroidStream$1.lineStart = centroidRingStart$1; + centroidStream$1.lineEnd = centroidRingEnd$1; + }, + polygonEnd: function() { + centroidStream$1.point = centroidPoint$1; + centroidStream$1.lineStart = centroidLineStart$1; + centroidStream$1.lineEnd = centroidLineEnd$1; + }, + result: function() { + var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1] + : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1] + : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1] + : [NaN, NaN]; + X0$1 = Y0$1 = Z0$1 = + X1$1 = Y1$1 = Z1$1 = + X2$1 = Y2$1 = Z2$1 = 0; + return centroid; + } }; - scale.interpolate = function(_) { - return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1; - }; + function centroidPoint$1(x, y) { + X0$1 += x; + Y0$1 += y; + ++Z0$1; + } - return rescale(); -} - -function tickFormat(domain, count, specifier) { - var start = domain[0], - stop = domain[domain.length - 1], - step = tickStep(start, stop, count == null ? 10 : count), - precision; - specifier = formatSpecifier(specifier == null ? ",f" : specifier); - switch (specifier.type) { - case "s": { - var value = Math.max(Math.abs(start), Math.abs(stop)); - if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision; - return formatPrefix(specifier, value); - } - case "": - case "e": - case "g": - case "p": - case "r": { - if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e"); - break; - } - case "f": - case "%": { - if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2; - break; - } - } - return format(specifier); -} - -function linearish(scale) { - var domain = scale.domain; - - scale.ticks = function(count) { - var d = domain(); - return ticks(d[0], d[d.length - 1], count == null ? 10 : count); - }; + function centroidLineStart$1() { + centroidStream$1.point = centroidPointFirstLine; + } - scale.tickFormat = function(count, specifier) { - return tickFormat(domain(), count, specifier); - }; + function centroidPointFirstLine(x, y) { + centroidStream$1.point = centroidPointLine; + centroidPoint$1(x0$3 = x, y0$3 = y); + } - scale.nice = function(count) { - if (count == null) count = 10; + function centroidPointLine(x, y) { + var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy); + X1$1 += z * (x0$3 + x) / 2; + Y1$1 += z * (y0$3 + y) / 2; + Z1$1 += z; + centroidPoint$1(x0$3 = x, y0$3 = y); + } - var d = domain(), - i0 = 0, - i1 = d.length - 1, - start = d[i0], - stop = d[i1], - step; + function centroidLineEnd$1() { + centroidStream$1.point = centroidPoint$1; + } - if (stop < start) { - step = start, start = stop, stop = step; - step = i0, i0 = i1, i1 = step; - } + function centroidRingStart$1() { + centroidStream$1.point = centroidPointFirstRing; + } - step = tickIncrement(start, stop, count); + function centroidRingEnd$1() { + centroidPointRing(x00$1, y00$1); + } - if (step > 0) { - start = Math.floor(start / step) * step; - stop = Math.ceil(stop / step) * step; - step = tickIncrement(start, stop, count); - } else if (step < 0) { - start = Math.ceil(start * step) / step; - stop = Math.floor(stop * step) / step; - step = tickIncrement(start, stop, count); - } + function centroidPointFirstRing(x, y) { + centroidStream$1.point = centroidPointRing; + centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y); + } - if (step > 0) { - d[i0] = Math.floor(start / step) * step; - d[i1] = Math.ceil(stop / step) * step; - domain(d); - } else if (step < 0) { - d[i0] = Math.ceil(start * step) / step; - d[i1] = Math.floor(stop * step) / step; - domain(d); - } + function centroidPointRing(x, y) { + var dx = x - x0$3, + dy = y - y0$3, + z = sqrt(dx * dx + dy * dy); - return scale; - }; + X1$1 += z * (x0$3 + x) / 2; + Y1$1 += z * (y0$3 + y) / 2; + Z1$1 += z; - return scale; -} + z = y0$3 * x - x0$3 * y; + X2$1 += z * (x0$3 + x); + Y2$1 += z * (y0$3 + y); + Z2$1 += z * 3; + centroidPoint$1(x0$3 = x, y0$3 = y); + } -function linear$2() { - var scale = continuous(deinterpolateLinear, d3_interpolateNumber); + function PathContext(context) { + this._context = context; + } - scale.copy = function() { - return copy(scale, linear$2()); + PathContext.prototype = { + _radius: 4.5, + pointRadius: function(_) { + return this._radius = _, this; + }, + polygonStart: function() { + this._line = 0; + }, + polygonEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line === 0) this._context.closePath(); + this._point = NaN; + }, + point: function(x, y) { + switch (this._point) { + case 0: { + this._context.moveTo(x, y); + this._point = 1; + break; + } + case 1: { + this._context.lineTo(x, y); + break; + } + default: { + this._context.moveTo(x + this._radius, y); + this._context.arc(x, y, this._radius, 0, tau$3); + break; + } + } + }, + result: noop$1 }; - return linearish(scale); -} - -function identity$5() { - var domain = [0, 1]; + var lengthSum$1 = adder(), + lengthRing, + x00$2, + y00$2, + x0$4, + y0$4; - function scale(x) { - return +x; - } - - scale.invert = scale; - - scale.domain = scale.range = function(_) { - return arguments.length ? (domain = map$2.call(_, number$2), scale) : domain.slice(); + var lengthStream$1 = { + point: noop$1, + lineStart: function() { + lengthStream$1.point = lengthPointFirst$1; + }, + lineEnd: function() { + if (lengthRing) lengthPoint$1(x00$2, y00$2); + lengthStream$1.point = noop$1; + }, + polygonStart: function() { + lengthRing = true; + }, + polygonEnd: function() { + lengthRing = null; + }, + result: function() { + var length = +lengthSum$1; + lengthSum$1.reset(); + return length; + } }; - scale.copy = function() { - return identity$5().domain(domain); - }; + function lengthPointFirst$1(x, y) { + lengthStream$1.point = lengthPoint$1; + x00$2 = x0$4 = x, y00$2 = y0$4 = y; + } - return linearish(scale); -} - -function nice(domain, interval) { - domain = domain.slice(); - - var i0 = 0, - i1 = domain.length - 1, - x0 = domain[i0], - x1 = domain[i1], - t; - - if (x1 < x0) { - t = i0, i0 = i1, i1 = t; - t = x0, x0 = x1, x1 = t; - } - - domain[i0] = interval.floor(x0); - domain[i1] = interval.ceil(x1); - return domain; -} - -function deinterpolate(a, b) { - return (b = Math.log(b / a)) - ? function(x) { return Math.log(x / a) / b; } - : constant$9(b); -} - -function reinterpolate(a, b) { - return a < 0 - ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); } - : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); }; -} - -function pow10(x) { - return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x; -} - -function powp(base) { - return base === 10 ? pow10 - : base === Math.E ? Math.exp - : function(x) { return Math.pow(base, x); }; -} - -function logp(base) { - return base === Math.E ? Math.log - : base === 10 && Math.log10 - || base === 2 && Math.log2 - || (base = Math.log(base), function(x) { return Math.log(x) / base; }); -} - -function reflect(f) { - return function(x) { - return -f(-x); - }; -} - -function log$1() { - var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]), - domain = scale.domain, - base = 10, - logs = logp(10), - pows = powp(10); - - function rescale() { - logs = logp(base), pows = powp(base); - if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows); - return scale; + function lengthPoint$1(x, y) { + x0$4 -= x, y0$4 -= y; + lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4)); + x0$4 = x, y0$4 = y; } - scale.base = function(_) { - return arguments.length ? (base = +_, rescale()) : base; - }; + function PathString() { + this._string = []; + } - scale.domain = function(_) { - return arguments.length ? (domain(_), rescale()) : domain(); + PathString.prototype = { + _radius: 4.5, + _circle: circle$1(4.5), + pointRadius: function(_) { + if ((_ = +_) !== this._radius) this._radius = _, this._circle = null; + return this; + }, + polygonStart: function() { + this._line = 0; + }, + polygonEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line === 0) this._string.push("Z"); + this._point = NaN; + }, + point: function(x, y) { + switch (this._point) { + case 0: { + this._string.push("M", x, ",", y); + this._point = 1; + break; + } + case 1: { + this._string.push("L", x, ",", y); + break; + } + default: { + if (this._circle == null) this._circle = circle$1(this._radius); + this._string.push("M", x, ",", y, this._circle); + break; + } + } + }, + result: function() { + if (this._string.length) { + var result = this._string.join(""); + this._string = []; + return result; + } else { + return null; + } + } }; - scale.ticks = function(count) { - var d = domain(), - u = d[0], - v = d[d.length - 1], - r; + function circle$1(radius) { + return "m0," + radius + + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + + "z"; + } - if (r = v < u) i = u, u = v, v = i; + function d3_geoPath(projection, context) { + var pointRadius = 4.5, + projectionStream, + contextStream; - var i = logs(u), - j = logs(v), - p, - k, - t, - n = count == null ? 10 : +count, - z = []; - - if (!(base % 1) && j - i < n) { - i = Math.round(i) - 1, j = Math.round(j) + 1; - if (u > 0) for (; i < j; ++i) { - for (k = 1, p = pows(i); k < base; ++k) { - t = p * k; - if (t < u) continue; - if (t > v) break; - z.push(t); - } - } else for (; i < j; ++i) { - for (k = base - 1, p = pows(i); k >= 1; --k) { - t = p * k; - if (t < u) continue; - if (t > v) break; - z.push(t); - } + function path(object) { + if (object) { + if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); + geoStream(object, projectionStream(contextStream)); } - } else { - z = ticks(i, j, Math.min(j - i, n)).map(pows); + return contextStream.result(); } - return r ? z.reverse() : z; - }; + path.area = function(object) { + geoStream(object, projectionStream(areaStream$1)); + return areaStream$1.result(); + }; - scale.tickFormat = function(count, specifier) { - if (specifier == null) specifier = base === 10 ? ".0e" : ","; - if (typeof specifier !== "function") specifier = format(specifier); - if (count === Infinity) return specifier; - if (count == null) count = 10; - var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? - return function(d) { - var i = d / pows(Math.round(logs(d))); - if (i * base < base - 0.5) i *= base; - return i <= k ? specifier(d) : ""; + path.measure = function(object) { + geoStream(object, projectionStream(lengthStream$1)); + return lengthStream$1.result(); }; - }; - scale.nice = function() { - return domain(nice(domain(), { - floor: function(x) { return pows(Math.floor(logs(x))); }, - ceil: function(x) { return pows(Math.ceil(logs(x))); } - })); - }; + path.bounds = function(object) { + geoStream(object, projectionStream(boundsStream$1)); + return boundsStream$1.result(); + }; - scale.copy = function() { - return copy(scale, log$1().base(base)); - }; + path.centroid = function(object) { + geoStream(object, projectionStream(centroidStream$1)); + return centroidStream$1.result(); + }; - return scale; -} + path.projection = function(_) { + return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$4) : (projection = _).stream, path) : projection; + }; -function raise$1(x, exponent) { - return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); -} + path.context = function(_) { + if (!arguments.length) return context; + contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _); + if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); + return path; + }; -function pow$1() { - var exponent = 1, - scale = continuous(deinterpolate, reinterpolate), - domain = scale.domain; + path.pointRadius = function(_) { + if (!arguments.length) return pointRadius; + pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); + return path; + }; - function deinterpolate(a, b) { - return (b = raise$1(b, exponent) - (a = raise$1(a, exponent))) - ? function(x) { return (raise$1(x, exponent) - a) / b; } - : constant$9(b); + return path.projection(projection).context(context); } - function reinterpolate(a, b) { - b = raise$1(b, exponent) - (a = raise$1(a, exponent)); - return function(t) { return raise$1(a + b * t, 1 / exponent); }; + function d3_geoTransform(methods) { + return { + stream: transformer(methods) + }; } - scale.exponent = function(_) { - return arguments.length ? (exponent = +_, domain(domain())) : exponent; - }; + function transformer(methods) { + return function(stream) { + var s = new TransformStream; + for (var key in methods) s[key] = methods[key]; + s.stream = stream; + return s; + }; + } - scale.copy = function() { - return copy(scale, pow$1().exponent(exponent)); + function TransformStream() {} + + TransformStream.prototype = { + constructor: TransformStream, + point: function(x, y) { this.stream.point(x, y); }, + sphere: function() { this.stream.sphere(); }, + lineStart: function() { this.stream.lineStart(); }, + lineEnd: function() { this.stream.lineEnd(); }, + polygonStart: function() { this.stream.polygonStart(); }, + polygonEnd: function() { this.stream.polygonEnd(); } }; - return linearish(scale); -} + function fit(projection, fitBounds, object) { + var clip = projection.clipExtent && projection.clipExtent(); + projection.scale(150).translate([0, 0]); + if (clip != null) projection.clipExtent(null); + geoStream(object, projection.stream(boundsStream$1)); + fitBounds(boundsStream$1.result()); + if (clip != null) projection.clipExtent(clip); + return projection; + } -function sqrt$1() { - return pow$1().exponent(0.5); -} + function fitExtent(projection, extent, object) { + return fit(projection, function(b) { + var w = extent[1][0] - extent[0][0], + h = extent[1][1] - extent[0][1], + k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), + x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, + y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; + projection.scale(150 * k).translate([x, y]); + }, object); + } -function quantile$$1() { - var domain = [], - range = [], - thresholds = []; + function fitSize(projection, size, object) { + return fitExtent(projection, [[0, 0], size], object); + } - function rescale() { - var i = 0, n = Math.max(1, range.length); - thresholds = new Array(n - 1); - while (++i < n) thresholds[i - 1] = threshold(domain, i / n); - return scale; + function fitWidth(projection, width, object) { + return fit(projection, function(b) { + var w = +width, + k = w / (b[1][0] - b[0][0]), + x = (w - k * (b[1][0] + b[0][0])) / 2, + y = -k * b[0][1]; + projection.scale(150 * k).translate([x, y]); + }, object); } - function scale(x) { - if (!isNaN(x = +x)) return range[bisectRight(thresholds, x)]; + function fitHeight(projection, height, object) { + return fit(projection, function(b) { + var h = +height, + k = h / (b[1][1] - b[0][1]), + x = -k * b[0][0], + y = (h - k * (b[1][1] + b[0][1])) / 2; + projection.scale(150 * k).translate([x, y]); + }, object); } - scale.invertExtent = function(y) { - var i = range.indexOf(y); - return i < 0 ? [NaN, NaN] : [ - i > 0 ? thresholds[i - 1] : domain[0], - i < thresholds.length ? thresholds[i] : domain[domain.length - 1] - ]; - }; + var maxDepth = 16, // maximum depth of subdivision + cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance) - scale.domain = function(_) { - if (!arguments.length) return domain.slice(); - domain = []; - for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d); - domain.sort(d3_ascending); - return rescale(); - }; + function resample(project, delta2) { + return +delta2 ? resample$1(project, delta2) : resampleNone(project); + } - scale.range = function(_) { - return arguments.length ? (range = slice$5.call(_), rescale()) : range.slice(); - }; + function resampleNone(project) { + return transformer({ + point: function(x, y) { + x = project(x, y); + this.stream.point(x[0], x[1]); + } + }); + } - scale.quantiles = function() { - return thresholds.slice(); - }; + function resample$1(project, delta2) { - scale.copy = function() { - return quantile$$1() - .domain(domain) - .range(range); - }; + function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { + var dx = x1 - x0, + dy = y1 - y0, + d2 = dx * dx + dy * dy; + if (d2 > 4 * delta2 && depth--) { + var a = a0 + a1, + b = b0 + b1, + c = c0 + c1, + m = sqrt(a * a + b * b + c * c), + phi2 = asin(c /= m), + lambda2 = abs(abs(c) - 1) < epsilon$2 || abs(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a), + p = project(lambda2, phi2), + x2 = p[0], + y2 = p[1], + dx2 = x2 - x0, + dy2 = y2 - y0, + dz = dy * dx2 - dx * dy2; + if (dz * dz / d2 > delta2 // perpendicular projected distance + || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end + || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); + stream.point(x2, y2); + resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); + } + } + } + return function(stream) { + var lambda00, x00, y00, a00, b00, c00, // first point + lambda0, x0, y0, a0, b0, c0; // previous point - return scale; -} + var resampleStream = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, + polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } + }; -function quantize() { - var x0 = 0, - x1 = 1, - n = 1, - domain = [0.5], - range = [0, 1]; + function point(x, y) { + x = project(x, y); + stream.point(x[0], x[1]); + } - function scale(x) { - if (x <= x) return range[bisectRight(domain, x, 0, n)]; - } + function lineStart() { + x0 = NaN; + resampleStream.point = linePoint; + stream.lineStart(); + } - function rescale() { - var i = -1; - domain = new Array(n); - while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); - return scale; - } + function linePoint(lambda, phi) { + var c = cartesian([lambda, phi]), p = project(lambda, phi); + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); + stream.point(x0, y0); + } - scale.domain = function(_) { - return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1]; - }; + function lineEnd() { + resampleStream.point = point; + stream.lineEnd(); + } - scale.range = function(_) { - return arguments.length ? (n = (range = slice$5.call(_)).length - 1, rescale()) : range.slice(); - }; + function ringStart() { + lineStart(); + resampleStream.point = ringPoint; + resampleStream.lineEnd = ringEnd; + } - scale.invertExtent = function(y) { - var i = range.indexOf(y); - return i < 0 ? [NaN, NaN] - : i < 1 ? [x0, domain[0]] - : i >= n ? [domain[n - 1], x1] - : [domain[i - 1], domain[i]]; - }; + function ringPoint(lambda, phi) { + linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; + resampleStream.point = linePoint; + } - scale.copy = function() { - return quantize() - .domain([x0, x1]) - .range(range); - }; + function ringEnd() { + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); + resampleStream.lineEnd = lineEnd; + lineEnd(); + } - return linearish(scale); -} + return resampleStream; + }; + } -function threshold$1() { - var domain = [0.5], - range = [0, 1], - n = 1; + var transformRadians = transformer({ + point: function(x, y) { + this.stream.point(x * radians, y * radians); + } + }); - function scale(x) { - if (x <= x) return range[bisectRight(domain, x, 0, n)]; + function transformRotate(rotate) { + return transformer({ + point: function(x, y) { + var r = rotate(x, y); + return this.stream.point(r[0], r[1]); + } + }); } - scale.domain = function(_) { - return arguments.length ? (domain = slice$5.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice(); - }; + function projection(project) { + return projectionMutator(function() { return project; })(); + } - scale.range = function(_) { - return arguments.length ? (range = slice$5.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice(); - }; + function projectionMutator(projectAt) { + var project, + k = 150, // scale + x = 480, y = 250, // translate + dx, dy, lambda = 0, phi = 0, // center + deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate + theta = null, preclip = clipAntimeridian, // clip angle + x0 = null, y0, x1, y1, postclip = identity$4, // clip extent + delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision + cache, + cacheStream; - scale.invertExtent = function(y) { - var i = range.indexOf(y); - return [domain[i - 1], domain[i]]; - }; + function projection(point) { + point = projectRotate(point[0] * radians, point[1] * radians); + return [point[0] * k + dx, dy - point[1] * k]; + } - scale.copy = function() { - return threshold$1() - .domain(domain) - .range(range); - }; + function invert(point) { + point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k); + return point && [point[0] * degrees$1, point[1] * degrees$1]; + } - return scale; -} - -var t0$1 = new Date, - t1$1 = new Date; + function projectTransform(x, y) { + return x = project(x, y), [x[0] * k + dx, dy - x[1] * k]; + } -function newInterval(floori, offseti, count, field) { + projection.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream))))); + }; - function interval(date) { - return floori(date = new Date(+date)), date; - } + projection.preclip = function(_) { + return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip; + }; - interval.floor = interval; + projection.postclip = function(_) { + return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; + }; - interval.ceil = function(date) { - return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; - }; + projection.clipAngle = function(_) { + return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1; + }; - interval.round = function(date) { - var d0 = interval(date), - d1 = interval.ceil(date); - return date - d0 < d1 - date ? d0 : d1; - }; + projection.clipExtent = function(_) { + return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }; - interval.offset = function(date, step) { - return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; - }; + projection.scale = function(_) { + return arguments.length ? (k = +_, recenter()) : k; + }; - interval.range = function(start, stop, step) { - var range = [], previous; - start = interval.ceil(start); - step = step == null ? 1 : Math.floor(step); - if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date - do range.push(previous = new Date(+start)), offseti(start, step), floori(start); - while (previous < start && start < stop); - return range; - }; + projection.translate = function(_) { + return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; + }; - interval.filter = function(test) { - return newInterval(function(date) { - if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); - }, function(date, step) { - if (date >= date) { - if (step < 0) while (++step <= 0) { - while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty - } else while (--step >= 0) { - while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty - } - } - }); - }; + projection.center = function(_) { + return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1]; + }; - if (count) { - interval.count = function(start, end) { - t0$1.setTime(+start), t1$1.setTime(+end); - floori(t0$1), floori(t1$1); - return Math.floor(count(t0$1, t1$1)); + projection.rotate = function(_) { + return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1]; }; - interval.every = function(step) { - step = Math.floor(step); - return !isFinite(step) || !(step > 0) ? null - : !(step > 1) ? interval - : interval.filter(field - ? function(d) { return field(d) % step === 0; } - : function(d) { return interval.count(0, d) % step === 0; }); + projection.precision = function(_) { + return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2); }; - } - return interval; -} - -var millisecond = newInterval(function() { - // noop -}, function(date, step) { - date.setTime(+date + step); -}, function(start, end) { - return end - start; -}); - -// An optimized implementation for this simple case. -millisecond.every = function(k) { - k = Math.floor(k); - if (!isFinite(k) || !(k > 0)) return null; - if (!(k > 1)) return millisecond; - return newInterval(function(date) { - date.setTime(Math.floor(date / k) * k); - }, function(date, step) { - date.setTime(+date + step * k); - }, function(start, end) { - return (end - start) / k; - }); -}; -var milliseconds = millisecond.range; - -var durationSecond = 1e3; -var durationMinute = 6e4; -var durationHour = 36e5; -var durationDay = 864e5; -var durationWeek = 6048e5; - -var second = newInterval(function(date) { - date.setTime(Math.floor(date / durationSecond) * durationSecond); -}, function(date, step) { - date.setTime(+date + step * durationSecond); -}, function(start, end) { - return (end - start) / durationSecond; -}, function(date) { - return date.getUTCSeconds(); -}); -var seconds = second.range; - -var minute = newInterval(function(date) { - date.setTime(Math.floor(date / durationMinute) * durationMinute); -}, function(date, step) { - date.setTime(+date + step * durationMinute); -}, function(start, end) { - return (end - start) / durationMinute; -}, function(date) { - return date.getMinutes(); -}); -var minutes = minute.range; - -var hour = newInterval(function(date) { - var offset = date.getTimezoneOffset() * durationMinute % durationHour; - if (offset < 0) offset += durationHour; - date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset); -}, function(date, step) { - date.setTime(+date + step * durationHour); -}, function(start, end) { - return (end - start) / durationHour; -}, function(date) { - return date.getHours(); -}); -var hours = hour.range; - -var day = newInterval(function(date) { - date.setHours(0, 0, 0, 0); -}, function(date, step) { - date.setDate(date.getDate() + step); -}, function(start, end) { - return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay; -}, function(date) { - return date.getDate() - 1; -}); -var days = day.range; - -function weekday(i) { - return newInterval(function(date) { - date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setDate(date.getDate() + step * 7); - }, function(start, end) { - return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek; - }); -} - -var sunday = weekday(0); -var monday = weekday(1); -var tuesday = weekday(2); -var wednesday = weekday(3); -var thursday = weekday(4); -var friday = weekday(5); -var saturday = weekday(6); - -var sundays = sunday.range; -var mondays = monday.range; -var tuesdays = tuesday.range; -var wednesdays = wednesday.range; -var thursdays = thursday.range; -var fridays = friday.range; -var saturdays = saturday.range; - -var month = newInterval(function(date) { - date.setDate(1); - date.setHours(0, 0, 0, 0); -}, function(date, step) { - date.setMonth(date.getMonth() + step); -}, function(start, end) { - return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; -}, function(date) { - return date.getMonth(); -}); -var months = month.range; - -var year = newInterval(function(date) { - date.setMonth(0, 1); - date.setHours(0, 0, 0, 0); -}, function(date, step) { - date.setFullYear(date.getFullYear() + step); -}, function(start, end) { - return end.getFullYear() - start.getFullYear(); -}, function(date) { - return date.getFullYear(); -}); - -// An optimized implementation for this simple case. -year.every = function(k) { - return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { - date.setFullYear(Math.floor(date.getFullYear() / k) * k); - date.setMonth(0, 1); - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setFullYear(date.getFullYear() + step * k); - }); -}; -var years = year.range; - -var utcMinute = newInterval(function(date) { - date.setUTCSeconds(0, 0); -}, function(date, step) { - date.setTime(+date + step * durationMinute); -}, function(start, end) { - return (end - start) / durationMinute; -}, function(date) { - return date.getUTCMinutes(); -}); -var utcMinutes = utcMinute.range; - -var utcHour = newInterval(function(date) { - date.setUTCMinutes(0, 0, 0); -}, function(date, step) { - date.setTime(+date + step * durationHour); -}, function(start, end) { - return (end - start) / durationHour; -}, function(date) { - return date.getUTCHours(); -}); -var utcHours = utcHour.range; - -var utcDay = newInterval(function(date) { - date.setUTCHours(0, 0, 0, 0); -}, function(date, step) { - date.setUTCDate(date.getUTCDate() + step); -}, function(start, end) { - return (end - start) / durationDay; -}, function(date) { - return date.getUTCDate() - 1; -}); -var utcDays = utcDay.range; - -function utcWeekday(i) { - return newInterval(function(date) { - date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCDate(date.getUTCDate() + step * 7); - }, function(start, end) { - return (end - start) / durationWeek; - }); -} - -var utcSunday = utcWeekday(0); -var utcMonday = utcWeekday(1); -var utcTuesday = utcWeekday(2); -var utcWednesday = utcWeekday(3); -var utcThursday = utcWeekday(4); -var utcFriday = utcWeekday(5); -var utcSaturday = utcWeekday(6); - -var utcSundays = utcSunday.range; -var utcMondays = utcMonday.range; -var utcTuesdays = utcTuesday.range; -var utcWednesdays = utcWednesday.range; -var utcThursdays = utcThursday.range; -var utcFridays = utcFriday.range; -var utcSaturdays = utcSaturday.range; - -var utcMonth = newInterval(function(date) { - date.setUTCDate(1); - date.setUTCHours(0, 0, 0, 0); -}, function(date, step) { - date.setUTCMonth(date.getUTCMonth() + step); -}, function(start, end) { - return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; -}, function(date) { - return date.getUTCMonth(); -}); -var utcMonths = utcMonth.range; - -var utcYear = newInterval(function(date) { - date.setUTCMonth(0, 1); - date.setUTCHours(0, 0, 0, 0); -}, function(date, step) { - date.setUTCFullYear(date.getUTCFullYear() + step); -}, function(start, end) { - return end.getUTCFullYear() - start.getUTCFullYear(); -}, function(date) { - return date.getUTCFullYear(); -}); - -// An optimized implementation for this simple case. -utcYear.every = function(k) { - return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { - date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); - date.setUTCMonth(0, 1); - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCFullYear(date.getUTCFullYear() + step * k); - }); -}; -var utcYears = utcYear.range; - -function localDate(d) { - if (0 <= d.y && d.y < 100) { - var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); - date.setFullYear(d.y); - return date; - } - return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); -} - -function utcDate(d) { - if (0 <= d.y && d.y < 100) { - var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); - date.setUTCFullYear(d.y); - return date; - } - return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); -} - -function newYear(y) { - return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0}; -} - -function formatLocale$1(locale) { - var locale_dateTime = locale.dateTime, - locale_date = locale.date, - locale_time = locale.time, - locale_periods = locale.periods, - locale_weekdays = locale.days, - locale_shortWeekdays = locale.shortDays, - locale_months = locale.months, - locale_shortMonths = locale.shortMonths; - - var periodRe = formatRe(locale_periods), - periodLookup = formatLookup(locale_periods), - weekdayRe = formatRe(locale_weekdays), - weekdayLookup = formatLookup(locale_weekdays), - shortWeekdayRe = formatRe(locale_shortWeekdays), - shortWeekdayLookup = formatLookup(locale_shortWeekdays), - monthRe = formatRe(locale_months), - monthLookup = formatLookup(locale_months), - shortMonthRe = formatRe(locale_shortMonths), - shortMonthLookup = formatLookup(locale_shortMonths); - - var formats = { - "a": formatShortWeekday, - "A": formatWeekday, - "b": formatShortMonth, - "B": formatMonth, - "c": null, - "d": formatDayOfMonth, - "e": formatDayOfMonth, - "f": formatMicroseconds, - "H": formatHour24, - "I": formatHour12, - "j": formatDayOfYear, - "L": formatMilliseconds, - "m": formatMonthNumber, - "M": formatMinutes, - "p": formatPeriod, - "Q": formatUnixTimestamp, - "s": formatUnixTimestampSeconds, - "S": formatSeconds, - "u": formatWeekdayNumberMonday, - "U": formatWeekNumberSunday, - "V": formatWeekNumberISO, - "w": formatWeekdayNumberSunday, - "W": formatWeekNumberMonday, - "x": null, - "X": null, - "y": formatYear, - "Y": formatFullYear, - "Z": formatZone, - "%": formatLiteralPercent - }; + projection.fitExtent = function(extent, object) { + return fitExtent(projection, extent, object); + }; - var utcFormats = { - "a": formatUTCShortWeekday, - "A": formatUTCWeekday, - "b": formatUTCShortMonth, - "B": formatUTCMonth, - "c": null, - "d": formatUTCDayOfMonth, - "e": formatUTCDayOfMonth, - "f": formatUTCMicroseconds, - "H": formatUTCHour24, - "I": formatUTCHour12, - "j": formatUTCDayOfYear, - "L": formatUTCMilliseconds, - "m": formatUTCMonthNumber, - "M": formatUTCMinutes, - "p": formatUTCPeriod, - "Q": formatUnixTimestamp, - "s": formatUnixTimestampSeconds, - "S": formatUTCSeconds, - "u": formatUTCWeekdayNumberMonday, - "U": formatUTCWeekNumberSunday, - "V": formatUTCWeekNumberISO, - "w": formatUTCWeekdayNumberSunday, - "W": formatUTCWeekNumberMonday, - "x": null, - "X": null, - "y": formatUTCYear, - "Y": formatUTCFullYear, - "Z": formatUTCZone, - "%": formatLiteralPercent - }; + projection.fitSize = function(size, object) { + return fitSize(projection, size, object); + }; - var parses = { - "a": parseShortWeekday, - "A": parseWeekday, - "b": parseShortMonth, - "B": parseMonth, - "c": parseLocaleDateTime, - "d": parseDayOfMonth, - "e": parseDayOfMonth, - "f": parseMicroseconds, - "H": parseHour24, - "I": parseHour24, - "j": parseDayOfYear, - "L": parseMilliseconds, - "m": parseMonthNumber, - "M": parseMinutes, - "p": parsePeriod, - "Q": parseUnixTimestamp, - "s": parseUnixTimestampSeconds, - "S": parseSeconds, - "u": parseWeekdayNumberMonday, - "U": parseWeekNumberSunday, - "V": parseWeekNumberISO, - "w": parseWeekdayNumberSunday, - "W": parseWeekNumberMonday, - "x": parseLocaleDate, - "X": parseLocaleTime, - "y": parseYear, - "Y": parseFullYear, - "Z": parseZone, - "%": parseLiteralPercent - }; + projection.fitWidth = function(width, object) { + return fitWidth(projection, width, object); + }; - // These recursive directive definitions must be deferred. - formats.x = newFormat(locale_date, formats); - formats.X = newFormat(locale_time, formats); - formats.c = newFormat(locale_dateTime, formats); - utcFormats.x = newFormat(locale_date, utcFormats); - utcFormats.X = newFormat(locale_time, utcFormats); - utcFormats.c = newFormat(locale_dateTime, utcFormats); - - function newFormat(specifier, formats) { - return function(date) { - var string = [], - i = -1, - j = 0, - n = specifier.length, - c, - pad, - format; + projection.fitHeight = function(height, object) { + return fitHeight(projection, height, object); + }; - if (!(date instanceof Date)) date = new Date(+date); + function recenter() { + projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project); + var center = project(lambda, phi); + dx = x - center[0] * k; + dy = y + center[1] * k; + return reset(); + } - while (++i < n) { - if (specifier.charCodeAt(i) === 37) { - string.push(specifier.slice(j, i)); - if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); - else pad = c === "e" ? " " : "0"; - if (format = formats[c]) c = format(date, pad); - string.push(c); - j = i + 1; - } - } + function reset() { + cache = cacheStream = null; + return projection; + } - string.push(specifier.slice(j, i)); - return string.join(""); + return function() { + project = projectAt.apply(this, arguments); + projection.invert = project.invert && invert; + return recenter(); }; } - function newParse(specifier, newDate) { - return function(string) { - var d = newYear(1900), - i = parseSpecifier(d, specifier, string += "", 0), - week, day$$1; - if (i != string.length) return null; + function conicProjection(projectAt) { + var phi0 = 0, + phi1 = pi$3 / 3, + m = projectionMutator(projectAt), + p = m(phi0, phi1); - // If a UNIX timestamp is specified, return it. - if ("Q" in d) return new Date(d.Q); + p.parallels = function(_) { + return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1]; + }; - // The am-pm flag is 0 for AM, and 1 for PM. - if ("p" in d) d.H = d.H % 12 + d.p * 12; + return p; + } - // Convert day-of-week and week-of-year to day-of-year. - if ("V" in d) { - if (d.V < 1 || d.V > 53) return null; - if (!("w" in d)) d.w = 1; - if ("Z" in d) { - week = utcDate(newYear(d.y)), day$$1 = week.getUTCDay(); - week = day$$1 > 4 || day$$1 === 0 ? utcMonday.ceil(week) : utcMonday(week); - week = utcDay.offset(week, (d.V - 1) * 7); - d.y = week.getUTCFullYear(); - d.m = week.getUTCMonth(); - d.d = week.getUTCDate() + (d.w + 6) % 7; - } else { - week = newDate(newYear(d.y)), day$$1 = week.getDay(); - week = day$$1 > 4 || day$$1 === 0 ? monday.ceil(week) : monday(week); - week = day.offset(week, (d.V - 1) * 7); - d.y = week.getFullYear(); - d.m = week.getMonth(); - d.d = week.getDate() + (d.w + 6) % 7; - } - } else if ("W" in d || "U" in d) { - if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; - day$$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay(); - d.m = 0; - d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7; - } + function cylindricalEqualAreaRaw(phi0) { + var cosPhi0 = cos$1(phi0); - // If a time zone is specified, all fields are interpreted as UTC and then - // offset according to the specified time zone. - if ("Z" in d) { - d.H += d.Z / 100 | 0; - d.M += d.Z % 100; - return utcDate(d); - } + function forward(lambda, phi) { + return [lambda * cosPhi0, sin$1(phi) / cosPhi0]; + } - // Otherwise, all fields are in local time. - return newDate(d); + forward.invert = function(x, y) { + return [x / cosPhi0, asin(y * cosPhi0)]; }; + + return forward; } - function parseSpecifier(d, specifier, string, j) { - var i = 0, - n = specifier.length, - m = string.length, - c, - parse; + function conicEqualAreaRaw(y0, y1) { + var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2; - while (i < n) { - if (j >= m) return -1; - c = specifier.charCodeAt(i++); - if (c === 37) { - c = specifier.charAt(i++); - parse = parses[c in pads ? specifier.charAt(i++) : c]; - if (!parse || ((j = parse(d, string, j)) < 0)) return -1; - } else if (c != string.charCodeAt(j++)) { - return -1; - } + // Are the parallels symmetrical around the Equator? + if (abs(n) < epsilon$2) return cylindricalEqualAreaRaw(y0); + + var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n; + + function project(x, y) { + var r = sqrt(c - 2 * n * sin$1(y)) / n; + return [r * sin$1(x *= n), r0 - r * cos$1(x)]; } - return j; - } + project.invert = function(x, y) { + var r0y = r0 - y; + return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; + }; - function parsePeriod(d, string, i) { - var n = periodRe.exec(string.slice(i)); - return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; + return project; } - function parseShortWeekday(d, string, i) { - var n = shortWeekdayRe.exec(string.slice(i)); - return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; + function conicEqualArea() { + return conicProjection(conicEqualAreaRaw) + .scale(155.424) + .center([0, 33.6442]); } - function parseWeekday(d, string, i) { - var n = weekdayRe.exec(string.slice(i)); - return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; + function albers() { + return conicEqualArea() + .parallels([29.5, 45.5]) + .scale(1070) + .translate([480, 250]) + .rotate([96, 0]) + .center([-0.6, 38.7]); } - function parseShortMonth(d, string, i) { - var n = shortMonthRe.exec(string.slice(i)); - return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; + // The projections must have mutually exclusive clip regions on the sphere, + // as this will avoid emitting interleaving lines and polygons. + function multiplex(streams) { + var n = streams.length; + return { + point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, + sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, + lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, + lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, + polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, + polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } + }; } - function parseMonth(d, string, i) { - var n = monthRe.exec(string.slice(i)); - return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } + // A composite projection for the United States, configured by default for + // 960×500. The projection also works quite well at 960×600 if you change the + // scale to 1285 and adjust the translate accordingly. The set of standard + // parallels for each region comes from USGS, which is published here: + // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers + function albersUsa() { + var cache, + cacheStream, + lower48 = albers(), lower48Point, + alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 + hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 + point, pointStream = {point: function(x, y) { point = [x, y]; }}; - function parseLocaleDateTime(d, string, i) { - return parseSpecifier(d, locale_dateTime, string, i); - } + function albersUsa(coordinates) { + var x = coordinates[0], y = coordinates[1]; + return point = null, + (lower48Point.point(x, y), point) + || (alaskaPoint.point(x, y), point) + || (hawaiiPoint.point(x, y), point); + } - function parseLocaleDate(d, string, i) { - return parseSpecifier(d, locale_date, string, i); - } + albersUsa.invert = function(coordinates) { + var k = lower48.scale(), + t = lower48.translate(), + x = (coordinates[0] - t[0]) / k, + y = (coordinates[1] - t[1]) / k; + return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska + : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii + : lower48).invert(coordinates); + }; - function parseLocaleTime(d, string, i) { - return parseSpecifier(d, locale_time, string, i); - } + albersUsa.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); + }; - function formatShortWeekday(d) { - return locale_shortWeekdays[d.getDay()]; - } + albersUsa.precision = function(_) { + if (!arguments.length) return lower48.precision(); + lower48.precision(_), alaska.precision(_), hawaii.precision(_); + return reset(); + }; - function formatWeekday(d) { - return locale_weekdays[d.getDay()]; - } + albersUsa.scale = function(_) { + if (!arguments.length) return lower48.scale(); + lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); + return albersUsa.translate(lower48.translate()); + }; - function formatShortMonth(d) { - return locale_shortMonths[d.getMonth()]; - } + albersUsa.translate = function(_) { + if (!arguments.length) return lower48.translate(); + var k = lower48.scale(), x = +_[0], y = +_[1]; - function formatMonth(d) { - return locale_months[d.getMonth()]; - } + lower48Point = lower48 + .translate(_) + .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) + .stream(pointStream); - function formatPeriod(d) { - return locale_periods[+(d.getHours() >= 12)]; - } + alaskaPoint = alaska + .translate([x - 0.307 * k, y + 0.201 * k]) + .clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]]) + .stream(pointStream); - function formatUTCShortWeekday(d) { - return locale_shortWeekdays[d.getUTCDay()]; - } + hawaiiPoint = hawaii + .translate([x - 0.205 * k, y + 0.212 * k]) + .clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]]) + .stream(pointStream); - function formatUTCWeekday(d) { - return locale_weekdays[d.getUTCDay()]; - } + return reset(); + }; - function formatUTCShortMonth(d) { - return locale_shortMonths[d.getUTCMonth()]; - } + albersUsa.fitExtent = function(extent, object) { + return fitExtent(albersUsa, extent, object); + }; - function formatUTCMonth(d) { - return locale_months[d.getUTCMonth()]; - } + albersUsa.fitSize = function(size, object) { + return fitSize(albersUsa, size, object); + }; - function formatUTCPeriod(d) { - return locale_periods[+(d.getUTCHours() >= 12)]; - } + albersUsa.fitWidth = function(width, object) { + return fitWidth(albersUsa, width, object); + }; - return { - format: function(specifier) { - var f = newFormat(specifier += "", formats); - f.toString = function() { return specifier; }; - return f; - }, - parse: function(specifier) { - var p = newParse(specifier += "", localDate); - p.toString = function() { return specifier; }; - return p; - }, - utcFormat: function(specifier) { - var f = newFormat(specifier += "", utcFormats); - f.toString = function() { return specifier; }; - return f; - }, - utcParse: function(specifier) { - var p = newParse(specifier, utcDate); - p.toString = function() { return specifier; }; - return p; - } - }; -} - -var pads = {"-": "", "_": " ", "0": "0"}, - numberRe = /^\s*\d+/, // note: ignores next directive - percentRe = /^%/, - requoteRe = /[\\^$*+?|[\]().{}]/g; - -function pad(value, fill, width) { - var sign = value < 0 ? "-" : "", - string = (sign ? -value : value) + "", - length = string.length; - return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); -} - -function requote(s) { - return s.replace(requoteRe, "\\$&"); -} - -function formatRe(names) { - return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); -} - -function formatLookup(names) { - var map = {}, i = -1, n = names.length; - while (++i < n) map[names[i].toLowerCase()] = i; - return map; -} - -function parseWeekdayNumberSunday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 1)); - return n ? (d.w = +n[0], i + n[0].length) : -1; -} - -function parseWeekdayNumberMonday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 1)); - return n ? (d.u = +n[0], i + n[0].length) : -1; -} - -function parseWeekNumberSunday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.U = +n[0], i + n[0].length) : -1; -} - -function parseWeekNumberISO(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.V = +n[0], i + n[0].length) : -1; -} - -function parseWeekNumberMonday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.W = +n[0], i + n[0].length) : -1; -} - -function parseFullYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 4)); - return n ? (d.y = +n[0], i + n[0].length) : -1; -} - -function parseYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; -} - -function parseZone(d, string, i) { - var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6)); - return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; -} - -function parseMonthNumber(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.m = n[0] - 1, i + n[0].length) : -1; -} - -function parseDayOfMonth(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.d = +n[0], i + n[0].length) : -1; -} - -function parseDayOfYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 3)); - return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; -} - -function parseHour24(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.H = +n[0], i + n[0].length) : -1; -} - -function parseMinutes(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.M = +n[0], i + n[0].length) : -1; -} - -function parseSeconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.S = +n[0], i + n[0].length) : -1; -} - -function parseMilliseconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 3)); - return n ? (d.L = +n[0], i + n[0].length) : -1; -} - -function parseMicroseconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 6)); - return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1; -} - -function parseLiteralPercent(d, string, i) { - var n = percentRe.exec(string.slice(i, i + 1)); - return n ? i + n[0].length : -1; -} - -function parseUnixTimestamp(d, string, i) { - var n = numberRe.exec(string.slice(i)); - return n ? (d.Q = +n[0], i + n[0].length) : -1; -} - -function parseUnixTimestampSeconds(d, string, i) { - var n = numberRe.exec(string.slice(i)); - return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1; -} - -function formatDayOfMonth(d, p) { - return pad(d.getDate(), p, 2); -} - -function formatHour24(d, p) { - return pad(d.getHours(), p, 2); -} - -function formatHour12(d, p) { - return pad(d.getHours() % 12 || 12, p, 2); -} - -function formatDayOfYear(d, p) { - return pad(1 + day.count(year(d), d), p, 3); -} - -function formatMilliseconds(d, p) { - return pad(d.getMilliseconds(), p, 3); -} - -function formatMicroseconds(d, p) { - return formatMilliseconds(d, p) + "000"; -} - -function formatMonthNumber(d, p) { - return pad(d.getMonth() + 1, p, 2); -} - -function formatMinutes(d, p) { - return pad(d.getMinutes(), p, 2); -} - -function formatSeconds(d, p) { - return pad(d.getSeconds(), p, 2); -} - -function formatWeekdayNumberMonday(d) { - var day$$1 = d.getDay(); - return day$$1 === 0 ? 7 : day$$1; -} - -function formatWeekNumberSunday(d, p) { - return pad(sunday.count(year(d), d), p, 2); -} - -function formatWeekNumberISO(d, p) { - var day$$1 = d.getDay(); - d = (day$$1 >= 4 || day$$1 === 0) ? thursday(d) : thursday.ceil(d); - return pad(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2); -} - -function formatWeekdayNumberSunday(d) { - return d.getDay(); -} - -function formatWeekNumberMonday(d, p) { - return pad(monday.count(year(d), d), p, 2); -} - -function formatYear(d, p) { - return pad(d.getFullYear() % 100, p, 2); -} - -function formatFullYear(d, p) { - return pad(d.getFullYear() % 10000, p, 4); -} - -function formatZone(d) { - var z = d.getTimezoneOffset(); - return (z > 0 ? "-" : (z *= -1, "+")) - + pad(z / 60 | 0, "0", 2) - + pad(z % 60, "0", 2); -} - -function formatUTCDayOfMonth(d, p) { - return pad(d.getUTCDate(), p, 2); -} - -function formatUTCHour24(d, p) { - return pad(d.getUTCHours(), p, 2); -} - -function formatUTCHour12(d, p) { - return pad(d.getUTCHours() % 12 || 12, p, 2); -} - -function formatUTCDayOfYear(d, p) { - return pad(1 + utcDay.count(utcYear(d), d), p, 3); -} - -function formatUTCMilliseconds(d, p) { - return pad(d.getUTCMilliseconds(), p, 3); -} - -function formatUTCMicroseconds(d, p) { - return formatUTCMilliseconds(d, p) + "000"; -} - -function formatUTCMonthNumber(d, p) { - return pad(d.getUTCMonth() + 1, p, 2); -} - -function formatUTCMinutes(d, p) { - return pad(d.getUTCMinutes(), p, 2); -} - -function formatUTCSeconds(d, p) { - return pad(d.getUTCSeconds(), p, 2); -} - -function formatUTCWeekdayNumberMonday(d) { - var dow = d.getUTCDay(); - return dow === 0 ? 7 : dow; -} - -function formatUTCWeekNumberSunday(d, p) { - return pad(utcSunday.count(utcYear(d), d), p, 2); -} - -function formatUTCWeekNumberISO(d, p) { - var day$$1 = d.getUTCDay(); - d = (day$$1 >= 4 || day$$1 === 0) ? utcThursday(d) : utcThursday.ceil(d); - return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2); -} - -function formatUTCWeekdayNumberSunday(d) { - return d.getUTCDay(); -} - -function formatUTCWeekNumberMonday(d, p) { - return pad(utcMonday.count(utcYear(d), d), p, 2); -} - -function formatUTCYear(d, p) { - return pad(d.getUTCFullYear() % 100, p, 2); -} - -function formatUTCFullYear(d, p) { - return pad(d.getUTCFullYear() % 10000, p, 4); -} - -function formatUTCZone() { - return "+0000"; -} - -function formatLiteralPercent() { - return "%"; -} - -function formatUnixTimestamp(d) { - return +d; -} - -function formatUnixTimestampSeconds(d) { - return Math.floor(+d / 1000); -} - -var locale$1; -var timeFormat; -var timeParse; -var utcFormat; -var utcParse; - -defaultLocale$1({ - dateTime: "%x, %X", - date: "%-m/%-d/%Y", - time: "%-I:%M:%S %p", - periods: ["AM", "PM"], - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] -}); - -function defaultLocale$1(definition) { - locale$1 = formatLocale$1(definition); - timeFormat = locale$1.format; - timeParse = locale$1.parse; - utcFormat = locale$1.utcFormat; - utcParse = locale$1.utcParse; - return locale$1; -} - -var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; - -function formatIsoNative(date) { - return date.toISOString(); -} - -var formatIso = Date.prototype.toISOString - ? formatIsoNative - : utcFormat(isoSpecifier); - -function parseIsoNative(string) { - var date = new Date(string); - return isNaN(date) ? null : date; -} - -var parseIso = +new Date("2000-01-01T00:00:00.000Z") - ? parseIsoNative - : utcParse(isoSpecifier); - -var durationSecond$1 = 1000, - durationMinute$1 = durationSecond$1 * 60, - durationHour$1 = durationMinute$1 * 60, - durationDay$1 = durationHour$1 * 24, - durationWeek$1 = durationDay$1 * 7, - durationMonth = durationDay$1 * 30, - durationYear = durationDay$1 * 365; - -function date$1(t) { - return new Date(t); -} - -function number$3(t) { - return t instanceof Date ? +t : +new Date(+t); -} - -function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) { - var scale = continuous(deinterpolateLinear, d3_interpolateNumber), - invert = scale.invert, - domain = scale.domain; - - var formatMillisecond = format(".%L"), - formatSecond = format(":%S"), - formatMinute = format("%I:%M"), - formatHour = format("%I %p"), - formatDay = format("%a %d"), - formatWeek = format("%b %d"), - formatMonth = format("%B"), - formatYear = format("%Y"); - - var tickIntervals = [ - [second$$1, 1, durationSecond$1], - [second$$1, 5, 5 * durationSecond$1], - [second$$1, 15, 15 * durationSecond$1], - [second$$1, 30, 30 * durationSecond$1], - [minute$$1, 1, durationMinute$1], - [minute$$1, 5, 5 * durationMinute$1], - [minute$$1, 15, 15 * durationMinute$1], - [minute$$1, 30, 30 * durationMinute$1], - [ hour$$1, 1, durationHour$1 ], - [ hour$$1, 3, 3 * durationHour$1 ], - [ hour$$1, 6, 6 * durationHour$1 ], - [ hour$$1, 12, 12 * durationHour$1 ], - [ day$$1, 1, durationDay$1 ], - [ day$$1, 2, 2 * durationDay$1 ], - [ week, 1, durationWeek$1 ], - [ month$$1, 1, durationMonth ], - [ month$$1, 3, 3 * durationMonth ], - [ year$$1, 1, durationYear ] - ]; + albersUsa.fitHeight = function(height, object) { + return fitHeight(albersUsa, height, object); + }; - function tickFormat(date$$1) { - return (second$$1(date$$1) < date$$1 ? formatMillisecond - : minute$$1(date$$1) < date$$1 ? formatSecond - : hour$$1(date$$1) < date$$1 ? formatMinute - : day$$1(date$$1) < date$$1 ? formatHour - : month$$1(date$$1) < date$$1 ? (week(date$$1) < date$$1 ? formatDay : formatWeek) - : year$$1(date$$1) < date$$1 ? formatMonth - : formatYear)(date$$1); - } - - function tickInterval(interval, start, stop, step) { - if (interval == null) interval = 10; - - // If a desired tick count is specified, pick a reasonable tick interval - // based on the extent of the domain and a rough estimate of tick size. - // Otherwise, assume interval is already a time interval and use it. - if (typeof interval === "number") { - var target = Math.abs(stop - start) / interval, - i = d3_bisector(function(i) { return i[2]; }).right(tickIntervals, target); - if (i === tickIntervals.length) { - step = tickStep(start / durationYear, stop / durationYear, interval); - interval = year$$1; - } else if (i) { - i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i]; - step = i[1]; - interval = i[0]; - } else { - step = Math.max(tickStep(start, stop, interval), 1); - interval = millisecond$$1; - } + function reset() { + cache = cacheStream = null; + return albersUsa; } - return step == null ? interval : interval.every(step); + return albersUsa.scale(1070); } - scale.invert = function(y) { - return new Date(invert(y)); - }; + function azimuthalRaw(scale) { + return function(x, y) { + var cx = cos$1(x), + cy = cos$1(y), + k = scale(cx * cy); + return [ + k * cy * sin$1(x), + k * sin$1(y) + ]; + } + } - scale.domain = function(_) { - return arguments.length ? domain(map$2.call(_, number$3)) : domain().map(date$1); - }; + function azimuthalInvert(angle) { + return function(x, y) { + var z = sqrt(x * x + y * y), + c = angle(z), + sc = sin$1(c), + cc = cos$1(c); + return [ + atan2(x * sc, z * cc), + asin(z && y * sc / z) + ]; + } + } - scale.ticks = function(interval, step) { - var d = domain(), - t0 = d[0], - t1 = d[d.length - 1], - r = t1 < t0, - t; - if (r) t = t0, t0 = t1, t1 = t; - t = tickInterval(interval, t0, t1, step); - t = t ? t.range(t0, t1 + 1) : []; // inclusive stop - return r ? t.reverse() : t; - }; + var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) { + return sqrt(2 / (1 + cxcy)); + }); - scale.tickFormat = function(count, specifier) { - return specifier == null ? tickFormat : format(specifier); - }; + azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) { + return 2 * asin(z / 2); + }); - scale.nice = function(interval, step) { - var d = domain(); - return (interval = tickInterval(interval, d[0], d[d.length - 1], step)) - ? domain(nice(d, interval)) - : scale; - }; + function azimuthalEqualArea() { + return projection(azimuthalEqualAreaRaw) + .scale(124.75) + .clipAngle(180 - 1e-3); + } - scale.copy = function() { - return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format)); - }; + var azimuthalEquidistantRaw = azimuthalRaw(function(c) { + return (c = acos(c)) && c / sin$1(c); + }); - return scale; -} + azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) { + return z; + }); -function time() { - return calendar(year, month, sunday, day, hour, minute, second, millisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]); -} + function azimuthalEquidistant() { + return projection(azimuthalEquidistantRaw) + .scale(79.4188) + .clipAngle(180 - 1e-3); + } -function utcTime() { - return calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]); -} + function mercatorRaw(lambda, phi) { + return [lambda, log(tan((halfPi$2 + phi) / 2))]; + } -function colors(s) { - return s.match(/.{6}/g).map(function(x) { - return "#" + x; - }); -} + mercatorRaw.invert = function(x, y) { + return [x, 2 * atan(exp(y)) - halfPi$2]; + }; -var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"); + function mercator() { + return mercatorProjection(mercatorRaw) + .scale(961 / tau$3); + } -var category20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"); + function mercatorProjection(project) { + var m = projection(project), + center = m.center, + scale = m.scale, + translate = m.translate, + clipExtent = m.clipExtent, + x0 = null, y0, x1, y1; // clip extent -var category20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"); + m.scale = function(_) { + return arguments.length ? (scale(_), reclip()) : scale(); + }; -var category20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"); + m.translate = function(_) { + return arguments.length ? (translate(_), reclip()) : translate(); + }; -var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0)); + m.center = function(_) { + return arguments.length ? (center(_), reclip()) : center(); + }; -var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8)); + m.clipExtent = function(_) { + return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }; -var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8)); + function reclip() { + var k = pi$3 * scale(), + t = m(rotation(m.rotate()).invert([0, 0])); + return clipExtent(x0 == null + ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw + ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] + : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]); + } -var rainbow = cubehelix(); + return reclip(); + } -function rainbow$1(t) { - if (t < 0 || t > 1) t -= Math.floor(t); - var ts = Math.abs(t - 0.5); - rainbow.h = 360 * t - 100; - rainbow.s = 1.5 - 1.5 * ts; - rainbow.l = 0.8 - 0.9 * ts; - return rainbow + ""; -} + function tany(y) { + return tan((halfPi$2 + y) / 2); + } -function ramp(range) { - var n = range.length; - return function(t) { - return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; - }; -} + function conicConformalRaw(y0, y1) { + var cy0 = cos$1(y0), + n = y0 === y1 ? sin$1(y0) : log(cy0 / cos$1(y1)) / log(tany(y1) / tany(y0)), + f = cy0 * pow(tany(y0), n) / n; -var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")); + if (!n) return mercatorRaw; -var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")); + function project(x, y) { + if (f > 0) { if (y < -halfPi$2 + epsilon$2) y = -halfPi$2 + epsilon$2; } + else { if (y > halfPi$2 - epsilon$2) y = halfPi$2 - epsilon$2; } + var r = f / pow(tany(y), n); + return [r * sin$1(n * x), f - r * cos$1(n * x)]; + } -var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")); + project.invert = function(x, y) { + var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy); + return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi$2]; + }; -var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")); + return project; + } -function sequential(interpolator) { - var x0 = 0, - x1 = 1, - clamp = false; + function conicConformal() { + return conicProjection(conicConformalRaw) + .scale(109.5) + .parallels([30, 30]); + } - function scale(x) { - var t = (x - x0) / (x1 - x0); - return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t); + function equirectangularRaw(lambda, phi) { + return [lambda, phi]; } - scale.domain = function(_) { - return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1]; - }; + equirectangularRaw.invert = equirectangularRaw; - scale.clamp = function(_) { - return arguments.length ? (clamp = !!_, scale) : clamp; - }; + function equirectangular() { + return projection(equirectangularRaw) + .scale(152.63); + } - scale.interpolator = function(_) { - return arguments.length ? (interpolator = _, scale) : interpolator; - }; + function conicEquidistantRaw(y0, y1) { + var cy0 = cos$1(y0), + n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0), + g = cy0 / n + y0; - scale.copy = function() { - return sequential(interpolator).domain([x0, x1]).clamp(clamp); - }; + if (abs(n) < epsilon$2) return equirectangularRaw; - return linearish(scale); -} + function project(x, y) { + var gy = g - y, nx = n * x; + return [gy * sin$1(nx), g - gy * cos$1(nx)]; + } -function constant$10(x) { - return function constant() { - return x; - }; -} - -var abs$1 = Math.abs; -var atan2$1 = Math.atan2; -var cos$2 = Math.cos; -var max$2 = Math.max; -var min$1 = Math.min; -var sin$2 = Math.sin; -var sqrt$2 = Math.sqrt; - -var epsilon$3 = 1e-12; -var pi$4 = Math.PI; -var halfPi$3 = pi$4 / 2; -var tau$4 = 2 * pi$4; - -function acos$1(x) { - return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x); -} - -function asin$1(x) { - return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x); -} - -function arcInnerRadius(d) { - return d.innerRadius; -} - -function arcOuterRadius(d) { - return d.outerRadius; -} - -function arcStartAngle(d) { - return d.startAngle; -} - -function arcEndAngle(d) { - return d.endAngle; -} - -function arcPadAngle(d) { - return d && d.padAngle; // Note: optional! -} - -function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { - var x10 = x1 - x0, y10 = y1 - y0, - x32 = x3 - x2, y32 = y3 - y2, - t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10); - return [x0 + t * x10, y0 + t * y10]; -} - -// Compute perpendicular offset line of length rc. -// http://mathworld.wolfram.com/Circle-LineIntersection.html -function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { - var x01 = x0 - x1, - y01 = y0 - y1, - lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01), - ox = lo * y01, - oy = -lo * x01, - x11 = x0 + ox, - y11 = y0 + oy, - x10 = x1 + ox, - y10 = y1 + oy, - x00 = (x11 + x10) / 2, - y00 = (y11 + y10) / 2, - dx = x10 - x11, - dy = y10 - y11, - d2 = dx * dx + dy * dy, - r = r1 - rc, - D = x11 * y10 - x10 * y11, - d = (dy < 0 ? -1 : 1) * sqrt$2(max$2(0, r * r * d2 - D * D)), - cx0 = (D * dy - dx * d) / d2, - cy0 = (-D * dx - dy * d) / d2, - cx1 = (D * dy + dx * d) / d2, - cy1 = (-D * dx + dy * d) / d2, - dx0 = cx0 - x00, - dy0 = cy0 - y00, - dx1 = cx1 - x00, - dy1 = cy1 - y00; - - // Pick the closer of the two intersection points. - // TODO Is there a faster way to determine which intersection to use? - if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; - - return { - cx: cx0, - cy: cy0, - x01: -ox, - y01: -oy, - x11: cx0 * (r1 / r - 1), - y11: cy0 * (r1 / r - 1) - }; -} - -function arc() { - var innerRadius = arcInnerRadius, - outerRadius = arcOuterRadius, - cornerRadius = constant$10(0), - padRadius = null, - startAngle = arcStartAngle, - endAngle = arcEndAngle, - padAngle = arcPadAngle, - context = null; + project.invert = function(x, y) { + var gy = g - y; + return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)]; + }; - function arc() { - var buffer, - r, - r0 = +innerRadius.apply(this, arguments), - r1 = +outerRadius.apply(this, arguments), - a0 = startAngle.apply(this, arguments) - halfPi$3, - a1 = endAngle.apply(this, arguments) - halfPi$3, - da = abs$1(a1 - a0), - cw = a1 > a0; + return project; + } - if (!context) context = buffer = path(); + function conicEquidistant() { + return conicProjection(conicEquidistantRaw) + .scale(131.154) + .center([0, 13.9389]); + } - // Ensure that the outer radius is always larger than the inner radius. - if (r1 < r0) r = r1, r1 = r0, r0 = r; + function gnomonicRaw(x, y) { + var cy = cos$1(y), k = cos$1(x) * cy; + return [cy * sin$1(x) / k, sin$1(y) / k]; + } - // Is it a point? - if (!(r1 > epsilon$3)) context.moveTo(0, 0); + gnomonicRaw.invert = azimuthalInvert(atan); - // Or is it a circle or annulus? - else if (da > tau$4 - epsilon$3) { - context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0)); - context.arc(0, 0, r1, a0, a1, !cw); - if (r0 > epsilon$3) { - context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1)); - context.arc(0, 0, r0, a1, a0, cw); - } - } + function gnomonic() { + return projection(gnomonicRaw) + .scale(144.049) + .clipAngle(60); + } - // Or is it a circular or annular sector? - else { - var a01 = a0, - a11 = a1, - a00 = a0, - a10 = a1, - da0 = da, - da1 = da, - ap = padAngle.apply(this, arguments) / 2, - rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)), - rc = min$1(abs$1(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), - rc0 = rc, - rc1 = rc, - t0, - t1; - - // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. - if (rp > epsilon$3) { - var p0 = asin$1(rp / r0 * sin$2(ap)), - p1 = asin$1(rp / r1 * sin$2(ap)); - if ((da0 -= p0 * 2) > epsilon$3) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; - else da0 = 0, a00 = a10 = (a0 + a1) / 2; - if ((da1 -= p1 * 2) > epsilon$3) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; - else da1 = 0, a01 = a11 = (a0 + a1) / 2; - } - - var x01 = r1 * cos$2(a01), - y01 = r1 * sin$2(a01), - x10 = r0 * cos$2(a10), - y10 = r0 * sin$2(a10); - - // Apply rounded corners? - if (rc > epsilon$3) { - var x11 = r1 * cos$2(a11), - y11 = r1 * sin$2(a11), - x00 = r0 * cos$2(a00), - y00 = r0 * sin$2(a00); - - // Restrict the corner radius according to the sector angle. - if (da < pi$4) { - var oc = da0 > epsilon$3 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10], - ax = x01 - oc[0], - ay = y01 - oc[1], - bx = x11 - oc[0], - by = y11 - oc[1], - kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2), - lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]); - rc0 = min$1(rc, (r0 - lc) / (kc - 1)); - rc1 = min$1(rc, (r1 - lc) / (kc + 1)); - } + function scaleTranslate(kx, ky, tx, ty) { + return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$4 : transformer({ + point: function(x, y) { + this.stream.point(x * kx + tx, y * ky + ty); } + }); + } - // Is the sector collapsed to a line? - if (!(da1 > epsilon$3)) context.moveTo(x01, y01); - - // Does the sector’s outer ring have rounded corners? - else if (rc1 > epsilon$3) { - t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); - t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); - - context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); + function d3_geoIdentity() { + var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$4, // scale, translate and reflect + x0 = null, y0, x1, y1, // clip extent + postclip = identity$4, + cache, + cacheStream, + projection; - // Have the corners merged? - if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw); + function reset() { + cache = cacheStream = null; + return projection; + } - // Otherwise, draw the two corners and the ring. - else { - context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw); - context.arc(0, 0, r1, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), !cw); - context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw); - } + return projection = { + stream: function(stream) { + return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream)); + }, + postclip: function(_) { + return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; + }, + clipExtent: function(_) { + return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }, + scale: function(_) { + return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k; + }, + translate: function(_) { + return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty]; + }, + reflectX: function(_) { + return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0; + }, + reflectY: function(_) { + return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0; + }, + fitExtent: function(extent, object) { + return fitExtent(projection, extent, object); + }, + fitSize: function(size, object) { + return fitSize(projection, size, object); + }, + fitWidth: function(width, object) { + return fitWidth(projection, width, object); + }, + fitHeight: function(height, object) { + return fitHeight(projection, height, object); } + }; + } - // Or is the outer ring just a circular arc? - else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); + function naturalEarth1Raw(lambda, phi) { + var phi2 = phi * phi, phi4 = phi2 * phi2; + return [ + lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))), + phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) + ]; + } - // Is there no inner ring, and it’s a circular sector? - // Or perhaps it’s an annular sector collapsed due to padding? - if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) context.lineTo(x10, y10); + naturalEarth1Raw.invert = function(x, y) { + var phi = y, i = 25, delta; + do { + var phi2 = phi * phi, phi4 = phi2 * phi2; + phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / + (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4))); + } while (abs(delta) > epsilon$2 && --i > 0); + return [ + x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), + phi + ]; + }; - // Does the sector’s inner ring (or point) have rounded corners? - else if (rc0 > epsilon$3) { - t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); - t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); + function naturalEarth1() { + return projection(naturalEarth1Raw) + .scale(175.295); + } - context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); + function orthographicRaw(x, y) { + return [cos$1(y) * sin$1(x), sin$1(y)]; + } - // Have the corners merged? - if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw); + orthographicRaw.invert = azimuthalInvert(asin); - // Otherwise, draw the two corners and the ring. - else { - context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw); - context.arc(0, 0, r0, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), cw); - context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw); - } - } + function orthographic() { + return projection(orthographicRaw) + .scale(249.5) + .clipAngle(90 + epsilon$2); + } - // Or is the inner ring just a circular arc? - else context.arc(0, 0, r0, a10, a00, cw); - } + function stereographicRaw(x, y) { + var cy = cos$1(y), k = 1 + cos$1(x) * cy; + return [cy * sin$1(x) / k, sin$1(y) / k]; + } - context.closePath(); + stereographicRaw.invert = azimuthalInvert(function(z) { + return 2 * atan(z); + }); - if (buffer) return context = null, buffer + "" || null; + function stereographic() { + return projection(stereographicRaw) + .scale(250) + .clipAngle(142); } - arc.centroid = function() { - var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, - a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2; - return [cos$2(a) * r, sin$2(a) * r]; - }; - - arc.innerRadius = function(_) { - return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$10(+_), arc) : innerRadius; - }; + function transverseMercatorRaw(lambda, phi) { + return [log(tan((halfPi$2 + phi) / 2)), -lambda]; + } - arc.outerRadius = function(_) { - return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$10(+_), arc) : outerRadius; + transverseMercatorRaw.invert = function(x, y) { + return [-y, 2 * atan(exp(x)) - halfPi$2]; }; - arc.cornerRadius = function(_) { - return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$10(+_), arc) : cornerRadius; - }; + function transverseMercator() { + var m = mercatorProjection(transverseMercatorRaw), + center = m.center, + rotate = m.rotate; - arc.padRadius = function(_) { - return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$10(+_), arc) : padRadius; - }; + m.center = function(_) { + return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); + }; - arc.startAngle = function(_) { - return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$10(+_), arc) : startAngle; - }; + m.rotate = function(_) { + return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); + }; - arc.endAngle = function(_) { - return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$10(+_), arc) : endAngle; - }; + return rotate([0, 0, 90]) + .scale(159.155); + } - arc.padAngle = function(_) { - return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$10(+_), arc) : padAngle; - }; + function defaultSeparation(a, b) { + return a.parent === b.parent ? 1 : 2; + } - arc.context = function(_) { - return arguments.length ? (context = _ == null ? null : _, arc) : context; - }; + function meanX(children) { + return children.reduce(meanXReduce, 0) / children.length; + } - return arc; -} - -function Linear(context) { - this._context = context; -} - -Linear.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; // proceed - default: this._context.lineTo(x, y); break; - } - } -}; - -function curveLinear(context) { - return new Linear(context); -} - -function x$3(p) { - return p[0]; -} - -function y$3(p) { - return p[1]; -} - -function line() { - var x$$1 = x$3, - y$$1 = y$3, - defined = constant$10(true), - context = null, - curve = curveLinear, - output = null; - - function line(data) { - var i, - n = data.length, - d, - defined0 = false, - buffer; + function meanXReduce(x, c) { + return x + c.x; + } - if (context == null) output = curve(buffer = path()); + function maxY(children) { + return 1 + children.reduce(maxYReduce, 0); + } - for (i = 0; i <= n; ++i) { - if (!(i < n && defined(d = data[i], i, data)) === defined0) { - if (defined0 = !defined0) output.lineStart(); - else output.lineEnd(); - } - if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data)); - } + function maxYReduce(y, c) { + return Math.max(y, c.y); + } - if (buffer) return output = null, buffer + "" || null; + function leafLeft(node) { + var children; + while (children = node.children) node = children[0]; + return node; } - line.x = function(_) { - return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$10(+_), line) : x$$1; - }; + function leafRight(node) { + var children; + while (children = node.children) node = children[children.length - 1]; + return node; + } - line.y = function(_) { - return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$10(+_), line) : y$$1; - }; + function cluster() { + var separation = defaultSeparation, + dx = 1, + dy = 1, + nodeSize = false; - line.defined = function(_) { - return arguments.length ? (defined = typeof _ === "function" ? _ : constant$10(!!_), line) : defined; - }; + function cluster(root) { + var previousNode, + x = 0; - line.curve = function(_) { - return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; - }; + // First walk, computing the initial x & y values. + root.eachAfter(function(node) { + var children = node.children; + if (children) { + node.x = meanX(children); + node.y = maxY(children); + } else { + node.x = previousNode ? x += separation(node, previousNode) : 0; + node.y = 0; + previousNode = node; + } + }); - line.context = function(_) { - return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; - }; + var left = leafLeft(root), + right = leafRight(root), + x0 = left.x - separation(left, right) / 2, + x1 = right.x + separation(right, left) / 2; + + // Second walk, normalizing x & y to the desired size. + return root.eachAfter(nodeSize ? function(node) { + node.x = (node.x - root.x) * dx; + node.y = (root.y - node.y) * dy; + } : function(node) { + node.x = (node.x - x0) / (x1 - x0) * dx; + node.y = (1 - (root.y ? node.y / root.y : 1)) * dy; + }); + } - return line; -} + cluster.separation = function(x) { + return arguments.length ? (separation = x, cluster) : separation; + }; -function area() { - var x0 = x$3, - x1 = null, - y0 = constant$10(0), - y1 = y$3, - defined = constant$10(true), - context = null, - curve = curveLinear, - output = null; + cluster.size = function(x) { + return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]); + }; - function area(data) { - var i, - j, - k, - n = data.length, - d, - defined0 = false, - buffer, - x0z = new Array(n), - y0z = new Array(n); - - if (context == null) output = curve(buffer = path()); - - for (i = 0; i <= n; ++i) { - if (!(i < n && defined(d = data[i], i, data)) === defined0) { - if (defined0 = !defined0) { - j = i; - output.areaStart(); - output.lineStart(); - } else { - output.lineEnd(); - output.lineStart(); - for (k = i - 1; k >= j; --k) { - output.point(x0z[k], y0z[k]); - } - output.lineEnd(); - output.areaEnd(); - } - } - if (defined0) { - x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); - output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); - } - } + cluster.nodeSize = function(x) { + return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null); + }; - if (buffer) return output = null, buffer + "" || null; + return cluster; } - function arealine() { - return line().defined(defined).curve(curve).context(context); + function count(node) { + var sum = 0, + children = node.children, + i = children && children.length; + if (!i) sum = 1; + else while (--i >= 0) sum += children[i].value; + node.value = sum; } - area.x = function(_) { - return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$10(+_), x1 = null, area) : x0; - }; + function node_count() { + return this.eachAfter(count); + } - area.x0 = function(_) { - return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$10(+_), area) : x0; - }; + function node_each(callback) { + var node = this, current, next = [node], children, i, n; + do { + current = next.reverse(), next = []; + while (node = current.pop()) { + callback(node), children = node.children; + if (children) for (i = 0, n = children.length; i < n; ++i) { + next.push(children[i]); + } + } + } while (next.length); + return this; + } - area.x1 = function(_) { - return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$10(+_), area) : x1; - }; + function node_eachBefore(callback) { + var node = this, nodes = [node], children, i; + while (node = nodes.pop()) { + callback(node), children = node.children; + if (children) for (i = children.length - 1; i >= 0; --i) { + nodes.push(children[i]); + } + } + return this; + } - area.y = function(_) { - return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$10(+_), y1 = null, area) : y0; - }; + function node_eachAfter(callback) { + var node = this, nodes = [node], next = [], children, i, n; + while (node = nodes.pop()) { + next.push(node), children = node.children; + if (children) for (i = 0, n = children.length; i < n; ++i) { + nodes.push(children[i]); + } + } + while (node = next.pop()) { + callback(node); + } + return this; + } - area.y0 = function(_) { - return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$10(+_), area) : y0; - }; + function node_sum(value) { + return this.eachAfter(function(node) { + var sum = +value(node.data) || 0, + children = node.children, + i = children && children.length; + while (--i >= 0) sum += children[i].value; + node.value = sum; + }); + } - area.y1 = function(_) { - return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$10(+_), area) : y1; - }; + function node_sort(compare) { + return this.eachBefore(function(node) { + if (node.children) { + node.children.sort(compare); + } + }); + } - area.lineX0 = - area.lineY0 = function() { - return arealine().x(x0).y(y0); - }; + function node_path(end) { + var start = this, + ancestor = leastCommonAncestor(start, end), + nodes = [start]; + while (start !== ancestor) { + start = start.parent; + nodes.push(start); + } + var k = nodes.length; + while (end !== ancestor) { + nodes.splice(k, 0, end); + end = end.parent; + } + return nodes; + } - area.lineY1 = function() { - return arealine().x(x0).y(y1); - }; + function leastCommonAncestor(a, b) { + if (a === b) return a; + var aNodes = a.ancestors(), + bNodes = b.ancestors(), + c = null; + a = aNodes.pop(); + b = bNodes.pop(); + while (a === b) { + c = a; + a = aNodes.pop(); + b = bNodes.pop(); + } + return c; + } - area.lineX1 = function() { - return arealine().x(x1).y(y0); - }; + function node_ancestors() { + var node = this, nodes = [node]; + while (node = node.parent) { + nodes.push(node); + } + return nodes; + } - area.defined = function(_) { - return arguments.length ? (defined = typeof _ === "function" ? _ : constant$10(!!_), area) : defined; - }; + function node_descendants() { + var nodes = []; + this.each(function(node) { + nodes.push(node); + }); + return nodes; + } - area.curve = function(_) { - return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; - }; + function node_leaves() { + var leaves = []; + this.eachBefore(function(node) { + if (!node.children) { + leaves.push(node); + } + }); + return leaves; + } - area.context = function(_) { - return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; - }; + function node_links() { + var root = this, links = []; + root.each(function(node) { + if (node !== root) { // Don’t include the root’s parent, if any. + links.push({source: node.parent, target: node}); + } + }); + return links; + } - return area; -} + function hierarchy(data, children) { + var root = new Node(data), + valued = +data.value && (root.value = data.value), + node, + nodes = [root], + child, + childs, + i, + n; -function descending(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; -} + if (children == null) children = defaultChildren; -function identity$6(d) { - return d; -} + while (node = nodes.pop()) { + if (valued) node.value = +node.data.value; + if ((childs = children(node.data)) && (n = childs.length)) { + node.children = new Array(n); + for (i = n - 1; i >= 0; --i) { + nodes.push(child = node.children[i] = new Node(childs[i])); + child.parent = node; + child.depth = node.depth + 1; + } + } + } -function pie() { - var value = identity$6, - sortValues = descending, - sort = null, - startAngle = constant$10(0), - endAngle = constant$10(tau$4), - padAngle = constant$10(0); + return root.eachBefore(computeHeight); + } - function pie(data) { - var i, - n = data.length, - j, - k, - sum = 0, - index = new Array(n), - arcs = new Array(n), - a0 = +startAngle.apply(this, arguments), - da = Math.min(tau$4, Math.max(-tau$4, endAngle.apply(this, arguments) - a0)), - a1, - p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)), - pa = p * (da < 0 ? -1 : 1), - v; + function node_copy() { + return hierarchy(this).eachBefore(copyData); + } - for (i = 0; i < n; ++i) { - if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) { - sum += v; - } - } + function defaultChildren(d) { + return d.children; + } - // Optionally sort the arcs by previously-computed values or by data. - if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); - else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); }); + function copyData(node) { + node.data = node.data.data; + } - // Compute the arcs! They are stored in the original data's order. - for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) { - j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = { - data: data[j], - index: i, - value: v, - startAngle: a0, - endAngle: a1, - padAngle: p - }; - } + function computeHeight(node) { + var height = 0; + do node.height = height; + while ((node = node.parent) && (node.height < ++height)); + } - return arcs; + function Node(data) { + this.data = data; + this.depth = + this.height = 0; + this.parent = null; } - pie.value = function(_) { - return arguments.length ? (value = typeof _ === "function" ? _ : constant$10(+_), pie) : value; + Node.prototype = hierarchy.prototype = { + constructor: Node, + count: node_count, + each: node_each, + eachAfter: node_eachAfter, + eachBefore: node_eachBefore, + sum: node_sum, + sort: node_sort, + path: node_path, + ancestors: node_ancestors, + descendants: node_descendants, + leaves: node_leaves, + links: node_links, + copy: node_copy }; - pie.sortValues = function(_) { - return arguments.length ? (sortValues = _, sort = null, pie) : sortValues; - }; + var slice$3 = Array.prototype.slice; - pie.sort = function(_) { - return arguments.length ? (sort = _, sortValues = null, pie) : sort; - }; + function shuffle$1(array) { + var m = array.length, + t, + i; - pie.startAngle = function(_) { - return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$10(+_), pie) : startAngle; - }; + while (m) { + i = Math.random() * m-- | 0; + t = array[m]; + array[m] = array[i]; + array[i] = t; + } - pie.endAngle = function(_) { - return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$10(+_), pie) : endAngle; - }; + return array; + } - pie.padAngle = function(_) { - return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$10(+_), pie) : padAngle; - }; + function enclose(circles) { + var i = 0, n = (circles = shuffle$1(slice$3.call(circles))).length, B = [], p, e; + + while (i < n) { + p = circles[i]; + if (e && enclosesWeak(e, p)) ++i; + else e = encloseBasis(B = extendBasis(B, p)), i = 0; + } + + return e; + } + + function extendBasis(B, p) { + var i, j; - return pie; -} + if (enclosesWeakAll(p, B)) return [p]; -var curveRadialLinear = curveRadial(curveLinear); + // If we get here then B must have at least one element. + for (i = 0; i < B.length; ++i) { + if (enclosesNot(p, B[i]) + && enclosesWeakAll(encloseBasis2(B[i], p), B)) { + return [B[i], p]; + } + } -function Radial(curve) { - this._curve = curve; -} + // If we get here then B must have at least two elements. + for (i = 0; i < B.length - 1; ++i) { + for (j = i + 1; j < B.length; ++j) { + if (enclosesNot(encloseBasis2(B[i], B[j]), p) + && enclosesNot(encloseBasis2(B[i], p), B[j]) + && enclosesNot(encloseBasis2(B[j], p), B[i]) + && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) { + return [B[i], B[j], p]; + } + } + } -Radial.prototype = { - areaStart: function() { - this._curve.areaStart(); - }, - areaEnd: function() { - this._curve.areaEnd(); - }, - lineStart: function() { - this._curve.lineStart(); - }, - lineEnd: function() { - this._curve.lineEnd(); - }, - point: function(a, r) { - this._curve.point(r * Math.sin(a), r * -Math.cos(a)); + // If we get here then something is very wrong. + throw new Error; } -}; -function curveRadial(curve) { + function enclosesNot(a, b) { + var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y; + return dr < 0 || dr * dr < dx * dx + dy * dy; + } - function radial(context) { - return new Radial(curve(context)); + function enclosesWeak(a, b) { + var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y; + return dr > 0 && dr * dr > dx * dx + dy * dy; } - radial._curve = curve; + function enclosesWeakAll(a, B) { + for (var i = 0; i < B.length; ++i) { + if (!enclosesWeak(a, B[i])) { + return false; + } + } + return true; + } - return radial; -} + function encloseBasis(B) { + switch (B.length) { + case 1: return encloseBasis1(B[0]); + case 2: return encloseBasis2(B[0], B[1]); + case 3: return encloseBasis3(B[0], B[1], B[2]); + } + } -function lineRadial(l) { - var c = l.curve; + function encloseBasis1(a) { + return { + x: a.x, + y: a.y, + r: a.r + }; + } - l.angle = l.x, delete l.x; - l.radius = l.y, delete l.y; + function encloseBasis2(a, b) { + var x1 = a.x, y1 = a.y, r1 = a.r, + x2 = b.x, y2 = b.y, r2 = b.r, + x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, + l = Math.sqrt(x21 * x21 + y21 * y21); + return { + x: (x1 + x2 + x21 / l * r21) / 2, + y: (y1 + y2 + y21 / l * r21) / 2, + r: (l + r1 + r2) / 2 + }; + } + + function encloseBasis3(a, b, c) { + var x1 = a.x, y1 = a.y, r1 = a.r, + x2 = b.x, y2 = b.y, r2 = b.r, + x3 = c.x, y3 = c.y, r3 = c.r, + a2 = x1 - x2, + a3 = x1 - x3, + b2 = y1 - y2, + b3 = y1 - y3, + c2 = r2 - r1, + c3 = r3 - r1, + d1 = x1 * x1 + y1 * y1 - r1 * r1, + d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2, + d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3, + ab = a3 * b2 - a2 * b3, + xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1, + xb = (b3 * c2 - b2 * c3) / ab, + ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1, + yb = (a2 * c3 - a3 * c2) / ab, + A = xb * xb + yb * yb - 1, + B = 2 * (r1 + xa * xb + ya * yb), + C = xa * xa + ya * ya - r1 * r1, + r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B); + return { + x: x1 + xa + xb * r, + y: y1 + ya + yb * r, + r: r + }; + } + + function place(a, b, c) { + var ax = a.x, + ay = a.y, + da = b.r + c.r, + db = a.r + c.r, + dx = b.x - ax, + dy = b.y - ay, + dc = dx * dx + dy * dy; + if (dc) { + var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc), + y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); + c.x = ax + x * dx + y * dy; + c.y = ay + x * dy - y * dx; + } else { + c.x = ax + db; + c.y = ay; + } + } - l.curve = function(_) { - return arguments.length ? c(curveRadial(_)) : c()._curve; - }; + function intersects(a, b) { + var dx = b.x - a.x, + dy = b.y - a.y, + dr = a.r + b.r; + return dr * dr - 1e-6 > dx * dx + dy * dy; + } - return l; -} - -function lineRadial$1() { - return lineRadial(line().curve(curveRadialLinear)); -} - -function areaRadial() { - var a = area().curve(curveRadialLinear), - c = a.curve, - x0 = a.lineX0, - x1 = a.lineX1, - y0 = a.lineY0, - y1 = a.lineY1; - - a.angle = a.x, delete a.x; - a.startAngle = a.x0, delete a.x0; - a.endAngle = a.x1, delete a.x1; - a.radius = a.y, delete a.y; - a.innerRadius = a.y0, delete a.y0; - a.outerRadius = a.y1, delete a.y1; - a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0; - a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1; - a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0; - a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1; - - a.curve = function(_) { - return arguments.length ? c(curveRadial(_)) : c()._curve; - }; + function score(node) { + var a = node._, + b = node.next._, + ab = a.r + b.r, + dx = (a.x * b.r + b.x * a.r) / ab, + dy = (a.y * b.r + b.y * a.r) / ab; + return dx * dx + dy * dy; + } - return a; -} + function Node$1(circle) { + this._ = circle; + this.next = null; + this.previous = null; + } -function pointRadial(x, y) { - return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)]; -} + function packEnclose(circles) { + if (!(n = circles.length)) return 0; -var slice$6 = Array.prototype.slice; + var a, b, c, n, aa, ca, i, j, k, sj, sk; -function linkSource(d) { - return d.source; -} + // Place the first circle. + a = circles[0], a.x = 0, a.y = 0; + if (!(n > 1)) return a.r; -function linkTarget(d) { - return d.target; -} + // Place the second circle. + b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0; + if (!(n > 2)) return a.r + b.r; -function link$2(curve) { - var source = linkSource, - target = linkTarget, - x$$1 = x$3, - y$$1 = y$3, - context = null; + // Place the third circle. + place(b, a, c = circles[2]); - function link() { - var buffer, argv = slice$6.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv); - if (!context) context = buffer = path(); - curve(context, +x$$1.apply(this, (argv[0] = s, argv)), +y$$1.apply(this, argv), +x$$1.apply(this, (argv[0] = t, argv)), +y$$1.apply(this, argv)); - if (buffer) return context = null, buffer + "" || null; - } + // Initialize the front-chain using the first three circles a, b and c. + a = new Node$1(a), b = new Node$1(b), c = new Node$1(c); + a.next = c.previous = b; + b.next = a.previous = c; + c.next = b.previous = a; - link.source = function(_) { - return arguments.length ? (source = _, link) : source; - }; + // Attempt to place each remaining circle… + pack: for (i = 3; i < n; ++i) { + place(a._, b._, c = circles[i]), c = new Node$1(c); - link.target = function(_) { - return arguments.length ? (target = _, link) : target; - }; + // Find the closest intersecting circle on the front-chain, if any. + // “Closeness” is determined by linear distance along the front-chain. + // “Ahead” or “behind” is likewise determined by linear distance. + j = b.next, k = a.previous, sj = b._.r, sk = a._.r; + do { + if (sj <= sk) { + if (intersects(j._, c._)) { + b = j, a.next = b, b.previous = a, --i; + continue pack; + } + sj += j._.r, j = j.next; + } else { + if (intersects(k._, c._)) { + a = k, a.next = b, b.previous = a, --i; + continue pack; + } + sk += k._.r, k = k.previous; + } + } while (j !== k.next); - link.x = function(_) { - return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$10(+_), link) : x$$1; - }; + // Success! Insert the new circle c between a and b. + c.previous = a, c.next = b, a.next = b.previous = b = c; - link.y = function(_) { - return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$10(+_), link) : y$$1; - }; + // Compute the new closest circle pair to the centroid. + aa = score(a); + while ((c = c.next) !== b) { + if ((ca = score(c)) < aa) { + a = c, aa = ca; + } + } + b = a.next; + } - link.context = function(_) { - return arguments.length ? (context = _ == null ? null : _, link) : context; - }; + // Compute the enclosing circle of the front chain. + a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a); - return link; -} - -function curveHorizontal(context, x0, y0, x1, y1) { - context.moveTo(x0, y0); - context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1); -} - -function curveVertical(context, x0, y0, x1, y1) { - context.moveTo(x0, y0); - context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1); -} - -function curveRadial$1(context, x0, y0, x1, y1) { - var p0 = pointRadial(x0, y0), - p1 = pointRadial(x0, y0 = (y0 + y1) / 2), - p2 = pointRadial(x1, y0), - p3 = pointRadial(x1, y1); - context.moveTo(p0[0], p0[1]); - context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); -} - -function linkHorizontal() { - return link$2(curveHorizontal); -} - -function linkVertical() { - return link$2(curveVertical); -} - -function linkRadial() { - var l = link$2(curveRadial$1); - l.angle = l.x, delete l.x; - l.radius = l.y, delete l.y; - return l; -} - -var circle$2 = { - draw: function(context, size) { - var r = Math.sqrt(size / pi$4); - context.moveTo(r, 0); - context.arc(0, 0, r, 0, tau$4); - } -}; - -var cross$2 = { - draw: function(context, size) { - var r = Math.sqrt(size / 5) / 2; - context.moveTo(-3 * r, -r); - context.lineTo(-r, -r); - context.lineTo(-r, -3 * r); - context.lineTo(r, -3 * r); - context.lineTo(r, -r); - context.lineTo(3 * r, -r); - context.lineTo(3 * r, r); - context.lineTo(r, r); - context.lineTo(r, 3 * r); - context.lineTo(-r, 3 * r); - context.lineTo(-r, r); - context.lineTo(-3 * r, r); - context.closePath(); - } -}; - -var tan30 = Math.sqrt(1 / 3), - tan30_2 = tan30 * 2; - -var diamond = { - draw: function(context, size) { - var y = Math.sqrt(size / tan30_2), - x = y * tan30; - context.moveTo(0, -y); - context.lineTo(x, 0); - context.lineTo(0, y); - context.lineTo(-x, 0); - context.closePath(); - } -}; - -var ka = 0.89081309152928522810, - kr = Math.sin(pi$4 / 10) / Math.sin(7 * pi$4 / 10), - kx = Math.sin(tau$4 / 10) * kr, - ky = -Math.cos(tau$4 / 10) * kr; - -var star = { - draw: function(context, size) { - var r = Math.sqrt(size * ka), - x = kx * r, - y = ky * r; - context.moveTo(0, -r); - context.lineTo(x, y); - for (var i = 1; i < 5; ++i) { - var a = tau$4 * i / 5, - c = Math.cos(a), - s = Math.sin(a); - context.lineTo(s * r, -c * r); - context.lineTo(c * x - s * y, s * x + c * y); - } - context.closePath(); - } -}; - -var square = { - draw: function(context, size) { - var w = Math.sqrt(size), - x = -w / 2; - context.rect(x, x, w, w); - } -}; - -var sqrt3 = Math.sqrt(3); - -var triangle = { - draw: function(context, size) { - var y = -Math.sqrt(size / (sqrt3 * 3)); - context.moveTo(0, y * 2); - context.lineTo(-sqrt3 * y, -y); - context.lineTo(sqrt3 * y, -y); - context.closePath(); - } -}; - -var c = -0.5, - s = Math.sqrt(3) / 2, - k = 1 / Math.sqrt(12), - a = (k / 2 + 1) * 3; - -var wye = { - draw: function(context, size) { - var r = Math.sqrt(size / a), - x0 = r / 2, - y0 = r * k, - x1 = x0, - y1 = r * k + r, - x2 = -x1, - y2 = y1; - context.moveTo(x0, y0); - context.lineTo(x1, y1); - context.lineTo(x2, y2); - context.lineTo(c * x0 - s * y0, s * x0 + c * y0); - context.lineTo(c * x1 - s * y1, s * x1 + c * y1); - context.lineTo(c * x2 - s * y2, s * x2 + c * y2); - context.lineTo(c * x0 + s * y0, c * y0 - s * x0); - context.lineTo(c * x1 + s * y1, c * y1 - s * x1); - context.lineTo(c * x2 + s * y2, c * y2 - s * x2); - context.closePath(); - } -}; - -var symbols = [ - circle$2, - cross$2, - diamond, - square, - star, - triangle, - wye -]; - -function symbol() { - var type = constant$10(circle$2), - size = constant$10(64), - context = null; + // Translate the circles to put the enclosing circle around the origin. + for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y; - function symbol() { - var buffer; - if (!context) context = buffer = path(); - type.apply(this, arguments).draw(context, +size.apply(this, arguments)); - if (buffer) return context = null, buffer + "" || null; + return c.r; } - symbol.type = function(_) { - return arguments.length ? (type = typeof _ === "function" ? _ : constant$10(_), symbol) : type; - }; + function siblings(circles) { + packEnclose(circles); + return circles; + } - symbol.size = function(_) { - return arguments.length ? (size = typeof _ === "function" ? _ : constant$10(+_), symbol) : size; - }; + function optional(f) { + return f == null ? null : required(f); + } - symbol.context = function(_) { - return arguments.length ? (context = _ == null ? null : _, symbol) : context; - }; + function required(f) { + if (typeof f !== "function") throw new Error; + return f; + } - return symbol; -} + function constantZero() { + return 0; + } -function noop$2() {} + function constant$8(x) { + return function() { + return x; + }; + } -function point$2(that, x, y) { - that._context.bezierCurveTo( - (2 * that._x0 + that._x1) / 3, - (2 * that._y0 + that._y1) / 3, - (that._x0 + 2 * that._x1) / 3, - (that._y0 + 2 * that._y1) / 3, - (that._x0 + 4 * that._x1 + x) / 6, - (that._y0 + 4 * that._y1 + y) / 6 - ); -} - -function Basis(context) { - this._context = context; -} - -Basis.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = - this._y0 = this._y1 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 3: point$2(this, this._x1, this._y1); // proceed - case 2: this._context.lineTo(this._x1, this._y1); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; break; - case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed - default: point$2(this, x, y); break; - } - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - } -}; - -function basis$2(context) { - return new Basis(context); -} - -function BasisClosed(context) { - this._context = context; -} - -BasisClosed.prototype = { - areaStart: noop$2, - areaEnd: noop$2, - lineStart: function() { - this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = - this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 1: { - this._context.moveTo(this._x2, this._y2); - this._context.closePath(); - break; - } - case 2: { - this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); - this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); - this._context.closePath(); - break; - } - case 3: { - this.point(this._x2, this._y2); - this.point(this._x3, this._y3); - this.point(this._x4, this._y4); - break; - } - } - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._x2 = x, this._y2 = y; break; - case 1: this._point = 2; this._x3 = x, this._y3 = y; break; - case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break; - default: point$2(this, x, y); break; - } - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - } -}; - -function basisClosed$1(context) { - return new BasisClosed(context); -} - -function BasisOpen(context) { - this._context = context; -} - -BasisOpen.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = - this._y0 = this._y1 = NaN; - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; break; - case 1: this._point = 2; break; - case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; - case 3: this._point = 4; // proceed - default: point$2(this, x, y); break; - } - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - } -}; - -function basisOpen(context) { - return new BasisOpen(context); -} - -function Bundle(context, beta) { - this._basis = new Basis(context); - this._beta = beta; -} - -Bundle.prototype = { - lineStart: function() { - this._x = []; - this._y = []; - this._basis.lineStart(); - }, - lineEnd: function() { - var x = this._x, - y = this._y, - j = x.length - 1; - - if (j > 0) { - var x0 = x[0], - y0 = y[0], - dx = x[j] - x0, - dy = y[j] - y0, - i = -1, - t; + function defaultRadius$1(d) { + return Math.sqrt(d.value); + } - while (++i <= j) { - t = i / j; - this._basis.point( - this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), - this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) - ); + function index$1() { + var radius = null, + dx = 1, + dy = 1, + padding = constantZero; + + function pack(root) { + root.x = dx / 2, root.y = dy / 2; + if (radius) { + root.eachBefore(radiusLeaf(radius)) + .eachAfter(packChildren(padding, 0.5)) + .eachBefore(translateChild(1)); + } else { + root.eachBefore(radiusLeaf(defaultRadius$1)) + .eachAfter(packChildren(constantZero, 1)) + .eachAfter(packChildren(padding, root.r / Math.min(dx, dy))) + .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); } + return root; } - this._x = this._y = null; - this._basis.lineEnd(); - }, - point: function(x, y) { - this._x.push(+x); - this._y.push(+y); - } -}; - -var bundle = (function custom(beta) { + pack.radius = function(x) { + return arguments.length ? (radius = optional(x), pack) : radius; + }; - function bundle(context) { - return beta === 1 ? new Basis(context) : new Bundle(context, beta); - } + pack.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy]; + }; - bundle.beta = function(beta) { - return custom(+beta); - }; + pack.padding = function(x) { + return arguments.length ? (padding = typeof x === "function" ? x : constant$8(+x), pack) : padding; + }; - return bundle; -})(0.85); - -function point$3(that, x, y) { - that._context.bezierCurveTo( - that._x1 + that._k * (that._x2 - that._x0), - that._y1 + that._k * (that._y2 - that._y0), - that._x2 + that._k * (that._x1 - x), - that._y2 + that._k * (that._y1 - y), - that._x2, - that._y2 - ); -} - -function Cardinal(context, tension) { - this._context = context; - this._k = (1 - tension) / 6; -} - -Cardinal.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 2: this._context.lineTo(this._x2, this._y2); break; - case 3: point$3(this, this._x1, this._y1); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; this._x1 = x, this._y1 = y; break; - case 2: this._point = 3; // proceed - default: point$3(this, x, y); break; - } - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -var cardinal = (function custom(tension) { - - function cardinal(context) { - return new Cardinal(context, tension); - } - - cardinal.tension = function(tension) { - return custom(+tension); - }; + return pack; + } - return cardinal; -})(0); - -function CardinalClosed(context, tension) { - this._context = context; - this._k = (1 - tension) / 6; -} - -CardinalClosed.prototype = { - areaStart: noop$2, - areaEnd: noop$2, - lineStart: function() { - this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = - this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 1: { - this._context.moveTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 2: { - this._context.lineTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 3: { - this.point(this._x3, this._y3); - this.point(this._x4, this._y4); - this.point(this._x5, this._y5); - break; + function radiusLeaf(radius) { + return function(node) { + if (!node.children) { + node.r = Math.max(0, +radius(node) || 0); } - } - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._x3 = x, this._y3 = y; break; - case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; - case 2: this._point = 3; this._x5 = x, this._y5 = y; break; - default: point$3(this, x, y); break; - } - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + }; } -}; -var cardinalClosed = (function custom(tension) { + function packChildren(padding, k) { + return function(node) { + if (children = node.children) { + var children, + i, + n = children.length, + r = padding(node) * k || 0, + e; - function cardinal$$1(context) { - return new CardinalClosed(context, tension); + if (r) for (i = 0; i < n; ++i) children[i].r += r; + e = packEnclose(children); + if (r) for (i = 0; i < n; ++i) children[i].r -= r; + node.r = e + r; + } + }; } - cardinal$$1.tension = function(tension) { - return custom(+tension); - }; + function translateChild(k) { + return function(node) { + var parent = node.parent; + node.r *= k; + if (parent) { + node.x = parent.x + k * node.x; + node.y = parent.y + k * node.y; + } + }; + } - return cardinal$$1; -})(0); - -function CardinalOpen(context, tension) { - this._context = context; - this._k = (1 - tension) / 6; -} - -CardinalOpen.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; break; - case 1: this._point = 2; break; - case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; - case 3: this._point = 4; // proceed - default: point$3(this, x, y); break; - } - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -var cardinalOpen = (function custom(tension) { - - function cardinal$$1(context) { - return new CardinalOpen(context, tension); - } - - cardinal$$1.tension = function(tension) { - return custom(+tension); - }; + function roundNode(node) { + node.x0 = Math.round(node.x0); + node.y0 = Math.round(node.y0); + node.x1 = Math.round(node.x1); + node.y1 = Math.round(node.y1); + } - return cardinal$$1; -})(0); - -function point$4(that, x, y) { - var x1 = that._x1, - y1 = that._y1, - x2 = that._x2, - y2 = that._y2; - - if (that._l01_a > epsilon$3) { - var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, - n = 3 * that._l01_a * (that._l01_a + that._l12_a); - x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; - y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; - } - - if (that._l23_a > epsilon$3) { - var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, - m = 3 * that._l23_a * (that._l23_a + that._l12_a); - x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; - y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; - } - - that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); -} - -function CatmullRom(context, alpha) { - this._context = context; - this._alpha = alpha; -} - -CatmullRom.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._l01_a = this._l12_a = this._l23_a = - this._l01_2a = this._l12_2a = this._l23_2a = - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 2: this._context.lineTo(this._x2, this._y2); break; - case 3: this.point(this._x2, this._y2); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - - if (this._point) { - var x23 = this._x2 - x, - y23 = this._y2 - y; - this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); - } - - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; break; - case 2: this._point = 3; // proceed - default: point$4(this, x, y); break; - } - - this._l01_a = this._l12_a, this._l12_a = this._l23_a; - this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -var catmullRom = (function custom(alpha) { - - function catmullRom(context) { - return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0); - } - - catmullRom.alpha = function(alpha) { - return custom(+alpha); - }; + function treemapDice(parent, x0, y0, x1, y1) { + var nodes = parent.children, + node, + i = -1, + n = nodes.length, + k = parent.value && (x1 - x0) / parent.value; - return catmullRom; -})(0.5); - -function CatmullRomClosed(context, alpha) { - this._context = context; - this._alpha = alpha; -} - -CatmullRomClosed.prototype = { - areaStart: noop$2, - areaEnd: noop$2, - lineStart: function() { - this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = - this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; - this._l01_a = this._l12_a = this._l23_a = - this._l01_2a = this._l12_2a = this._l23_2a = - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 1: { - this._context.moveTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 2: { - this._context.lineTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 3: { - this.point(this._x3, this._y3); - this.point(this._x4, this._y4); - this.point(this._x5, this._y5); - break; - } + while (++i < n) { + node = nodes[i], node.y0 = y0, node.y1 = y1; + node.x0 = x0, node.x1 = x0 += node.value * k; + } + } + + function partition() { + var dx = 1, + dy = 1, + padding = 0, + round = false; + + function partition(root) { + var n = root.height + 1; + root.x0 = + root.y0 = padding; + root.x1 = dx; + root.y1 = dy / n; + root.eachBefore(positionNode(dy, n)); + if (round) root.eachBefore(roundNode); + return root; + } + + function positionNode(dy, n) { + return function(node) { + if (node.children) { + treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n); + } + var x0 = node.x0, + y0 = node.y0, + x1 = node.x1 - padding, + y1 = node.y1 - padding; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + node.x0 = x0; + node.y0 = y0; + node.x1 = x1; + node.y1 = y1; + }; } - }, - point: function(x, y) { - x = +x, y = +y; - if (this._point) { - var x23 = this._x2 - x, - y23 = this._y2 - y; - this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); - } + partition.round = function(x) { + return arguments.length ? (round = !!x, partition) : round; + }; - switch (this._point) { - case 0: this._point = 1; this._x3 = x, this._y3 = y; break; - case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; - case 2: this._point = 3; this._x5 = x, this._y5 = y; break; - default: point$4(this, x, y); break; - } + partition.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy]; + }; + + partition.padding = function(x) { + return arguments.length ? (padding = +x, partition) : padding; + }; - this._l01_a = this._l12_a, this._l12_a = this._l23_a; - this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + return partition; } -}; -var catmullRomClosed = (function custom(alpha) { + var keyPrefix$1 = "$", // Protect against keys like “__proto__”. + preroot = {depth: -1}, + ambiguous = {}; - function catmullRom$$1(context) { - return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0); + function defaultId(d) { + return d.id; } - catmullRom$$1.alpha = function(alpha) { - return custom(+alpha); - }; + function defaultParentId(d) { + return d.parentId; + } - return catmullRom$$1; -})(0.5); - -function CatmullRomOpen(context, alpha) { - this._context = context; - this._alpha = alpha; -} - -CatmullRomOpen.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._l01_a = this._l12_a = this._l23_a = - this._l01_2a = this._l12_2a = this._l23_2a = - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - - if (this._point) { - var x23 = this._x2 - x, - y23 = this._y2 - y; - this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); - } - - switch (this._point) { - case 0: this._point = 1; break; - case 1: this._point = 2; break; - case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; - case 3: this._point = 4; // proceed - default: point$4(this, x, y); break; - } - - this._l01_a = this._l12_a, this._l12_a = this._l23_a; - this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -var catmullRomOpen = (function custom(alpha) { - - function catmullRom$$1(context) { - return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0); - } - - catmullRom$$1.alpha = function(alpha) { - return custom(+alpha); - }; + function stratify() { + var id = defaultId, + parentId = defaultParentId; - return catmullRom$$1; -})(0.5); - -function LinearClosed(context) { - this._context = context; -} - -LinearClosed.prototype = { - areaStart: noop$2, - areaEnd: noop$2, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._point) this._context.closePath(); - }, - point: function(x, y) { - x = +x, y = +y; - if (this._point) this._context.lineTo(x, y); - else this._point = 1, this._context.moveTo(x, y); - } -}; - -function linearClosed(context) { - return new LinearClosed(context); -} - -function sign$1(x) { - return x < 0 ? -1 : 1; -} - -// Calculate the slopes of the tangents (Hermite-type interpolation) based on -// the following paper: Steffen, M. 1990. A Simple Method for Monotonic -// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. -// NOV(II), P. 443, 1990. -function slope3(that, x2, y2) { - var h0 = that._x1 - that._x0, - h1 = x2 - that._x1, - s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), - s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), - p = (s0 * h1 + s1 * h0) / (h0 + h1); - return (sign$1(s0) + sign$1(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; -} - -// Calculate a one-sided slope. -function slope2(that, t) { - var h = that._x1 - that._x0; - return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; -} - -// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations -// "you can express cubic Hermite interpolation in terms of cubic Bézier curves -// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". -function point$5(that, t0, t1) { - var x0 = that._x0, - y0 = that._y0, - x1 = that._x1, - y1 = that._y1, - dx = (x1 - x0) / 3; - that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); -} - -function MonotoneX(context) { - this._context = context; -} - -MonotoneX.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = - this._y0 = this._y1 = - this._t0 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 2: this._context.lineTo(this._x1, this._y1); break; - case 3: point$5(this, this._t0, slope2(this, this._t0)); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - var t1 = NaN; - - x = +x, y = +y; - if (x === this._x1 && y === this._y1) return; // Ignore coincident points. - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; break; - case 2: this._point = 3; point$5(this, slope2(this, t1 = slope3(this, x, y)), t1); break; - default: point$5(this, this._t0, t1 = slope3(this, x, y)); break; - } - - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - this._t0 = t1; - } -}; - -function MonotoneY(context) { - this._context = new ReflectContext(context); -} - -(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { - MonotoneX.prototype.point.call(this, y, x); -}; - -function ReflectContext(context) { - this._context = context; -} - -ReflectContext.prototype = { - moveTo: function(x, y) { this._context.moveTo(y, x); }, - closePath: function() { this._context.closePath(); }, - lineTo: function(x, y) { this._context.lineTo(y, x); }, - bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } -}; - -function monotoneX(context) { - return new MonotoneX(context); -} - -function monotoneY(context) { - return new MonotoneY(context); -} - -function Natural(context) { - this._context = context; -} - -Natural.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x = []; - this._y = []; - }, - lineEnd: function() { - var x = this._x, - y = this._y, - n = x.length; - - if (n) { - this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); - if (n === 2) { - this._context.lineTo(x[1], y[1]); - } else { - var px = controlPoints(x), - py = controlPoints(y); - for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { - this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); + function stratify(data) { + var d, + i, + n = data.length, + root, + parent, + node, + nodes = new Array(n), + nodeId, + nodeKey, + nodeByKey = {}; + + for (i = 0; i < n; ++i) { + d = data[i], node = nodes[i] = new Node(d); + if ((nodeId = id(d, i, data)) != null && (nodeId += "")) { + nodeKey = keyPrefix$1 + (node.id = nodeId); + nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node; } } - } - if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); - this._line = 1 - this._line; - this._x = this._y = null; - }, - point: function(x, y) { - this._x.push(+x); - this._y.push(+y); - } -}; - -// See https://www.particleincell.com/2012/bezier-splines/ for derivation. -function controlPoints(x) { - var i, - n = x.length - 1, - m, - a = new Array(n), - b = new Array(n), - r = new Array(n); - a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; - for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; - a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; - for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; - a[n - 1] = r[n - 1] / b[n - 1]; - for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; - b[n - 1] = (x[n] + a[n - 1]) / 2; - for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; - return [a, b]; -} - -function natural(context) { - return new Natural(context); -} - -function Step(context, t) { - this._context = context; - this._t = t; -} - -Step.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x = this._y = NaN; - this._point = 0; - }, - lineEnd: function() { - if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; // proceed - default: { - if (this._t <= 0) { - this._context.lineTo(this._x, y); - this._context.lineTo(x, y); + for (i = 0; i < n; ++i) { + node = nodes[i], nodeId = parentId(data[i], i, data); + if (nodeId == null || !(nodeId += "")) { + if (root) throw new Error("multiple roots"); + root = node; } else { - var x1 = this._x * (1 - this._t) + x * this._t; - this._context.lineTo(x1, this._y); - this._context.lineTo(x1, y); + parent = nodeByKey[keyPrefix$1 + nodeId]; + if (!parent) throw new Error("missing: " + nodeId); + if (parent === ambiguous) throw new Error("ambiguous: " + nodeId); + if (parent.children) parent.children.push(node); + else parent.children = [node]; + node.parent = parent; } - break; } + + if (!root) throw new Error("no root"); + root.parent = preroot; + root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight); + root.parent = null; + if (n > 0) throw new Error("cycle"); + + return root; } - this._x = x, this._y = y; + + stratify.id = function(x) { + return arguments.length ? (id = required(x), stratify) : id; + }; + + stratify.parentId = function(x) { + return arguments.length ? (parentId = required(x), stratify) : parentId; + }; + + return stratify; } -}; -function step(context) { - return new Step(context, 0.5); -} + function defaultSeparation$1(a, b) { + return a.parent === b.parent ? 1 : 2; + } + + // function radialSeparation(a, b) { + // return (a.parent === b.parent ? 1 : 2) / a.depth; + // } + + // This function is used to traverse the left contour of a subtree (or + // subforest). It returns the successor of v on this contour. This successor is + // either given by the leftmost child of v or by the thread of v. The function + // returns null if and only if v is on the highest level of its subtree. + function nextLeft(v) { + var children = v.children; + return children ? children[0] : v.t; + } -function stepBefore(context) { - return new Step(context, 0); -} + // This function works analogously to nextLeft. + function nextRight(v) { + var children = v.children; + return children ? children[children.length - 1] : v.t; + } -function stepAfter(context) { - return new Step(context, 1); -} + // Shifts the current subtree rooted at w+. This is done by increasing + // prelim(w+) and mod(w+) by shift. + function moveSubtree(wm, wp, shift) { + var change = shift / (wp.i - wm.i); + wp.c -= change; + wp.s += shift; + wm.c += change; + wp.z += shift; + wp.m += shift; + } -function none$1(series, order) { - if (!((n = series.length) > 1)) return; - for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) { - s0 = s1, s1 = series[order[i]]; - for (j = 0; j < m; ++j) { - s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; + // All other shifts, applied to the smaller subtrees between w- and w+, are + // performed by this function. To prepare the shifts, we have to adjust + // change(w+), shift(w+), and change(w-). + function executeShifts(v) { + var shift = 0, + change = 0, + children = v.children, + i = children.length, + w; + while (--i >= 0) { + w = children[i]; + w.z += shift; + w.m += shift; + shift += w.s + (change += w.c); } } -} -function none$2(series) { - var n = series.length, o = new Array(n); - while (--n >= 0) o[n] = n; - return o; -} + // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise, + // returns the specified (default) ancestor. + function nextAncestor(vim, v, ancestor) { + return vim.a.parent === v.parent ? vim.a : ancestor; + } -function stackValue(d, key) { - return d[key]; -} + function TreeNode(node, i) { + this._ = node; + this.parent = null; + this.children = null; + this.A = null; // default ancestor + this.a = this; // ancestor + this.z = 0; // prelim + this.m = 0; // mod + this.c = 0; // change + this.s = 0; // shift + this.t = null; // thread + this.i = i; // number + } -function stack() { - var keys = constant$10([]), - order = none$2, - offset = none$1, - value = stackValue; + TreeNode.prototype = Object.create(Node.prototype); - function stack(data) { - var kz = keys.apply(this, arguments), + function treeRoot(root) { + var tree = new TreeNode(root, 0), + node, + nodes = [tree], + child, + children, i, - m = data.length, - n = kz.length, - sz = new Array(n), - oz; + n; - for (i = 0; i < n; ++i) { - for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) { - si[j] = sij = [0, +value(data[j], ki, j, data)]; - sij.data = data[j]; + while (node = nodes.pop()) { + if (children = node._.children) { + node.children = new Array(n = children.length); + for (i = n - 1; i >= 0; --i) { + nodes.push(child = node.children[i] = new TreeNode(children[i], i)); + child.parent = node; + } } - si.key = ki; - } - - for (i = 0, oz = order(sz); i < n; ++i) { - sz[oz[i]].index = i; } - offset(sz, oz); - return sz; + (tree.parent = new TreeNode(null, 0)).children = [tree]; + return tree; } - stack.keys = function(_) { - return arguments.length ? (keys = typeof _ === "function" ? _ : constant$10(slice$6.call(_)), stack) : keys; - }; + // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm + function tree() { + var separation = defaultSeparation$1, + dx = 1, + dy = 1, + nodeSize = null; - stack.value = function(_) { - return arguments.length ? (value = typeof _ === "function" ? _ : constant$10(+_), stack) : value; - }; + function tree(root) { + var t = treeRoot(root); - stack.order = function(_) { - return arguments.length ? (order = _ == null ? none$2 : typeof _ === "function" ? _ : constant$10(slice$6.call(_)), stack) : order; - }; + // Compute the layout using Buchheim et al.’s algorithm. + t.eachAfter(firstWalk), t.parent.m = -t.z; + t.eachBefore(secondWalk); - stack.offset = function(_) { - return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset; - }; + // If a fixed node size is specified, scale x and y. + if (nodeSize) root.eachBefore(sizeNode); - return stack; -} - -function expand(series, order) { - if (!((n = series.length) > 0)) return; - for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) { - for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0; - if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y; - } - none$1(series, order); -} - -function diverging(series, order) { - if (!((n = series.length) > 1)) return; - for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) { - for (yp = yn = 0, i = 0; i < n; ++i) { - if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) { - d[0] = yp, d[1] = yp += dy; - } else if (dy < 0) { - d[1] = yn, d[0] = yn += dy; - } else { - d[0] = yp; + // If a fixed tree size is specified, scale x and y based on the extent. + // Compute the left-most, right-most, and depth-most nodes for extents. + else { + var left = root, + right = root, + bottom = root; + root.eachBefore(function(node) { + if (node.x < left.x) left = node; + if (node.x > right.x) right = node; + if (node.depth > bottom.depth) bottom = node; + }); + var s = left === right ? 1 : separation(left, right) / 2, + tx = s - left.x, + kx = dx / (right.x + s + tx), + ky = dy / (bottom.depth || 1); + root.eachBefore(function(node) { + node.x = (node.x + tx) * kx; + node.y = node.depth * ky; + }); } - } - } -} -function silhouette(series, order) { - if (!((n = series.length) > 0)) return; - for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) { - for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0; - s0[j][1] += s0[j][0] = -y / 2; - } - none$1(series, order); -} + return root; + } -function wiggle(series, order) { - if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return; - for (var y = 0, j = 1, s0, m, n; j < m; ++j) { - for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) { - var si = series[order[i]], - sij0 = si[j][1] || 0, - sij1 = si[j - 1][1] || 0, - s3 = (sij0 - sij1) / 2; - for (var k = 0; k < i; ++k) { - var sk = series[order[k]], - skj0 = sk[j][1] || 0, - skj1 = sk[j - 1][1] || 0; - s3 += skj0 - skj1; + // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is + // applied recursively to the children of v, as well as the function + // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the + // node v is placed to the midpoint of its outermost children. + function firstWalk(v) { + var children = v.children, + siblings = v.parent.children, + w = v.i ? siblings[v.i - 1] : null; + if (children) { + executeShifts(v); + var midpoint = (children[0].z + children[children.length - 1].z) / 2; + if (w) { + v.z = w.z + separation(v._, w._); + v.m = v.z - midpoint; + } else { + v.z = midpoint; + } + } else if (w) { + v.z = w.z + separation(v._, w._); + } + v.parent.A = apportion(v, w, v.parent.A || siblings[0]); + } + + // Computes all real x-coordinates by summing up the modifiers recursively. + function secondWalk(v) { + v._.x = v.z + v.parent.m; + v.m += v.parent.m; + } + + // The core of the algorithm. Here, a new subtree is combined with the + // previous subtrees. Threads are used to traverse the inside and outside + // contours of the left and right subtree up to the highest common level. The + // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the + // superscript o means outside and i means inside, the subscript - means left + // subtree and + means right subtree. For summing up the modifiers along the + // contour, we use respective variables si+, si-, so-, and so+. Whenever two + // nodes of the inside contours conflict, we compute the left one of the + // greatest uncommon ancestors using the function ANCESTOR and call MOVE + // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees. + // Finally, we add a new thread (if necessary). + function apportion(v, w, ancestor) { + if (w) { + var vip = v, + vop = v, + vim = w, + vom = vip.parent.children[0], + sip = vip.m, + sop = vop.m, + sim = vim.m, + som = vom.m, + shift; + while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { + vom = nextLeft(vom); + vop = nextRight(vop); + vop.a = v; + shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); + if (shift > 0) { + moveSubtree(nextAncestor(vim, v, ancestor), v, shift); + sip += shift; + sop += shift; + } + sim += vim.m; + sip += vip.m; + som += vom.m; + sop += vop.m; + } + if (vim && !nextRight(vop)) { + vop.t = vim; + vop.m += sim - sop; + } + if (vip && !nextLeft(vom)) { + vom.t = vip; + vom.m += sip - som; + ancestor = v; + } } - s1 += sij0, s2 += s3 * sij0; + return ancestor; } - s0[j - 1][1] += s0[j - 1][0] = y; - if (s1) y -= s2 / s1; - } - s0[j - 1][1] += s0[j - 1][0] = y; - none$1(series, order); -} - -function ascending$1(series) { - var sums = series.map(sum$2); - return none$2(series).sort(function(a, b) { return sums[a] - sums[b]; }); -} - -function sum$2(series) { - var s = 0, i = -1, n = series.length, v; - while (++i < n) if (v = +series[i][1]) s += v; - return s; -} - -function descending$1(series) { - return ascending$1(series).reverse(); -} - -function insideOut(series) { - var n = series.length, - i, - j, - sums = series.map(sum$2), - order = none$2(series).sort(function(a, b) { return sums[b] - sums[a]; }), - top = 0, - bottom = 0, - tops = [], - bottoms = []; - - for (i = 0; i < n; ++i) { - j = order[i]; - if (top < bottom) { - top += sums[j]; - tops.push(j); - } else { - bottom += sums[j]; - bottoms.push(j); - } - } - return bottoms.reverse().concat(tops); -} - -function reverse(series) { - return none$2(series).reverse(); -} - -function constant$11(x) { - return function() { - return x; - }; -} - -function x$4(d) { - return d[0]; -} - -function y$4(d) { - return d[1]; -} - -function RedBlackTree() { - this._ = null; // root node -} - -function RedBlackNode(node) { - node.U = // parent node - node.C = // color - true for red, false for black - node.L = // left node - node.R = // right node - node.P = // previous node - node.N = null; // next node -} - -RedBlackTree.prototype = { - constructor: RedBlackTree, - - insert: function(after, node) { - var parent, grandpa, uncle; - - if (after) { - node.P = after; - node.N = after.N; - if (after.N) after.N.P = node; - after.N = node; - if (after.R) { - after = after.R; - while (after.L) after = after.L; - after.L = node; - } else { - after.R = node; - } - parent = after; - } else if (this._) { - after = RedBlackFirst(this._); - node.P = null; - node.N = after; - after.P = after.L = node; - parent = after; - } else { - node.P = node.N = null; - this._ = node; - parent = null; - } - node.L = node.R = null; - node.U = parent; - node.C = true; - - after = node; - while (parent && parent.C) { - grandpa = parent.U; - if (parent === grandpa.L) { - uncle = grandpa.R; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.R) { - RedBlackRotateLeft(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - RedBlackRotateRight(this, grandpa); - } - } else { - uncle = grandpa.L; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.L) { - RedBlackRotateRight(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - RedBlackRotateLeft(this, grandpa); - } - } - parent = after.U; + function sizeNode(node) { + node.x *= dx; + node.y = node.depth * dy; } - this._.C = false; - }, - remove: function(node) { - if (node.N) node.N.P = node.P; - if (node.P) node.P.N = node.N; - node.N = node.P = null; - - var parent = node.U, - sibling, - left = node.L, - right = node.R, - next, - red; - - if (!left) next = right; - else if (!right) next = left; - else next = RedBlackFirst(right); + tree.separation = function(x) { + return arguments.length ? (separation = x, tree) : separation; + }; - if (parent) { - if (parent.L === node) parent.L = next; - else parent.R = next; - } else { - this._ = next; - } - - if (left && right) { - red = next.C; - next.C = node.C; - next.L = left; - left.U = next; - if (next !== right) { - parent = next.U; - next.U = node.U; - node = next.R; - parent.L = node; - next.R = right; - right.U = next; - } else { - next.U = parent; - parent = next; - node = next.R; - } - } else { - red = node.C; - node = next; - } + tree.size = function(x) { + return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]); + }; - if (node) node.U = parent; - if (red) return; - if (node && node.C) { node.C = false; return; } + tree.nodeSize = function(x) { + return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null); + }; - do { - if (node === this._) break; - if (node === parent.L) { - sibling = parent.R; - if (sibling.C) { - sibling.C = false; - parent.C = true; - RedBlackRotateLeft(this, parent); - sibling = parent.R; - } - if ((sibling.L && sibling.L.C) - || (sibling.R && sibling.R.C)) { - if (!sibling.R || !sibling.R.C) { - sibling.L.C = false; - sibling.C = true; - RedBlackRotateRight(this, sibling); - sibling = parent.R; - } - sibling.C = parent.C; - parent.C = sibling.R.C = false; - RedBlackRotateLeft(this, parent); - node = this._; - break; - } - } else { - sibling = parent.L; - if (sibling.C) { - sibling.C = false; - parent.C = true; - RedBlackRotateRight(this, parent); - sibling = parent.L; - } - if ((sibling.L && sibling.L.C) - || (sibling.R && sibling.R.C)) { - if (!sibling.L || !sibling.L.C) { - sibling.R.C = false; - sibling.C = true; - RedBlackRotateLeft(this, sibling); - sibling = parent.L; - } - sibling.C = parent.C; - parent.C = sibling.L.C = false; - RedBlackRotateRight(this, parent); - node = this._; - break; - } - } - sibling.C = true; - node = parent; - parent = parent.U; - } while (!node.C); - - if (node) node.C = false; - } -}; - -function RedBlackRotateLeft(tree, node) { - var p = node, - q = node.R, - parent = p.U; - - if (parent) { - if (parent.L === p) parent.L = q; - else parent.R = q; - } else { - tree._ = q; - } - - q.U = parent; - p.U = q; - p.R = q.L; - if (p.R) p.R.U = p; - q.L = p; -} - -function RedBlackRotateRight(tree, node) { - var p = node, - q = node.L, - parent = p.U; - - if (parent) { - if (parent.L === p) parent.L = q; - else parent.R = q; - } else { - tree._ = q; - } - - q.U = parent; - p.U = q; - p.L = q.R; - if (p.L) p.L.U = p; - q.R = p; -} - -function RedBlackFirst(node) { - while (node.L) node = node.L; - return node; -} - -function createEdge(left, right, v0, v1) { - var edge = [null, null], - index = edges.push(edge) - 1; - edge.left = left; - edge.right = right; - if (v0) setEdgeEnd(edge, left, right, v0); - if (v1) setEdgeEnd(edge, right, left, v1); - cells[left.index].halfedges.push(index); - cells[right.index].halfedges.push(index); - return edge; -} - -function createBorderEdge(left, v0, v1) { - var edge = [v0, v1]; - edge.left = left; - return edge; -} - -function setEdgeEnd(edge, left, right, vertex) { - if (!edge[0] && !edge[1]) { - edge[0] = vertex; - edge.left = left; - edge.right = right; - } else if (edge.left === right) { - edge[1] = vertex; - } else { - edge[0] = vertex; - } -} - -// Liang–Barsky line clipping. -function clipEdge(edge, x0, y0, x1, y1) { - var a = edge[0], - b = edge[1], - ax = a[0], - ay = a[1], - bx = b[0], - by = b[1], - t0 = 0, - t1 = 1, - dx = bx - ax, - dy = by - ay, - r; - - r = x0 - ax; - if (!dx && r > 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check? - - if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy]; - if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy]; - return true; -} - -function connectEdge(edge, x0, y0, x1, y1) { - var v1 = edge[1]; - if (v1) return true; - - var v0 = edge[0], - left = edge.left, - right = edge.right, - lx = left[0], - ly = left[1], - rx = right[0], - ry = right[1], - fx = (lx + rx) / 2, - fy = (ly + ry) / 2, - fm, - fb; - - if (ry === ly) { - if (fx < x0 || fx >= x1) return; - if (lx > rx) { - if (!v0) v0 = [fx, y0]; - else if (v0[1] >= y1) return; - v1 = [fx, y1]; - } else { - if (!v0) v0 = [fx, y1]; - else if (v0[1] < y0) return; - v1 = [fx, y0]; - } - } else { - fm = (lx - rx) / (ry - ly); - fb = fy - fm * fx; - if (fm < -1 || fm > 1) { - if (lx > rx) { - if (!v0) v0 = [(y0 - fb) / fm, y0]; - else if (v0[1] >= y1) return; - v1 = [(y1 - fb) / fm, y1]; - } else { - if (!v0) v0 = [(y1 - fb) / fm, y1]; - else if (v0[1] < y0) return; - v1 = [(y0 - fb) / fm, y0]; - } - } else { - if (ly < ry) { - if (!v0) v0 = [x0, fm * x0 + fb]; - else if (v0[0] >= x1) return; - v1 = [x1, fm * x1 + fb]; - } else { - if (!v0) v0 = [x1, fm * x1 + fb]; - else if (v0[0] < x0) return; - v1 = [x0, fm * x0 + fb]; - } - } + return tree; } - edge[0] = v0; - edge[1] = v1; - return true; -} - -function clipEdges(x0, y0, x1, y1) { - var i = edges.length, - edge; + function treemapSlice(parent, x0, y0, x1, y1) { + var nodes = parent.children, + node, + i = -1, + n = nodes.length, + k = parent.value && (y1 - y0) / parent.value; - while (i--) { - if (!connectEdge(edge = edges[i], x0, y0, x1, y1) - || !clipEdge(edge, x0, y0, x1, y1) - || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$4 - || Math.abs(edge[0][1] - edge[1][1]) > epsilon$4)) { - delete edges[i]; + while (++i < n) { + node = nodes[i], node.x0 = x0, node.x1 = x1; + node.y0 = y0, node.y1 = y0 += node.value * k; } } -} -function createCell(site) { - return cells[site.index] = { - site: site, - halfedges: [] - }; -} - -function cellHalfedgeAngle(cell, edge) { - var site = cell.site, - va = edge.left, - vb = edge.right; - if (site === vb) vb = va, va = site; - if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]); - if (site === va) va = edge[1], vb = edge[0]; - else va = edge[0], vb = edge[1]; - return Math.atan2(va[0] - vb[0], vb[1] - va[1]); -} - -function cellHalfedgeStart(cell, edge) { - return edge[+(edge.left !== cell.site)]; -} - -function cellHalfedgeEnd(cell, edge) { - return edge[+(edge.left === cell.site)]; -} - -function sortCellHalfedges() { - for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) { - if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) { - var index = new Array(m), - array = new Array(m); - for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]); - index.sort(function(i, j) { return array[j] - array[i]; }); - for (j = 0; j < m; ++j) array[j] = halfedges[index[j]]; - for (j = 0; j < m; ++j) halfedges[j] = array[j]; - } - } -} - -function clipCells(x0, y0, x1, y1) { - var nCells = cells.length, - iCell, - cell, - site, - iHalfedge, - halfedges, - nHalfedges, - start, - startX, - startY, - end, - endX, - endY, - cover = true; - - for (iCell = 0; iCell < nCells; ++iCell) { - if (cell = cells[iCell]) { - site = cell.site; - halfedges = cell.halfedges; - iHalfedge = halfedges.length; - - // Remove any dangling clipped edges. - while (iHalfedge--) { - if (!edges[halfedges[iHalfedge]]) { - halfedges.splice(iHalfedge, 1); - } - } + var phi = (1 + Math.sqrt(5)) / 2; - // Insert any border edges as necessary. - iHalfedge = 0, nHalfedges = halfedges.length; - while (iHalfedge < nHalfedges) { - end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1]; - start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1]; - if (Math.abs(endX - startX) > epsilon$4 || Math.abs(endY - startY) > epsilon$4) { - halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end, - Math.abs(endX - x0) < epsilon$4 && y1 - endY > epsilon$4 ? [x0, Math.abs(startX - x0) < epsilon$4 ? startY : y1] - : Math.abs(endY - y1) < epsilon$4 && x1 - endX > epsilon$4 ? [Math.abs(startY - y1) < epsilon$4 ? startX : x1, y1] - : Math.abs(endX - x1) < epsilon$4 && endY - y0 > epsilon$4 ? [x1, Math.abs(startX - x1) < epsilon$4 ? startY : y0] - : Math.abs(endY - y0) < epsilon$4 && endX - x0 > epsilon$4 ? [Math.abs(startY - y0) < epsilon$4 ? startX : x0, y0] - : null)) - 1); - ++nHalfedges; - } + function squarifyRatio(ratio, parent, x0, y0, x1, y1) { + var rows = [], + nodes = parent.children, + row, + nodeValue, + i0 = 0, + i1 = 0, + n = nodes.length, + dx, dy, + value = parent.value, + sumValue, + minValue, + maxValue, + newRatio, + minRatio, + alpha, + beta; + + while (i0 < n) { + dx = x1 - x0, dy = y1 - y0; + + // Find the next non-empty node. + do sumValue = nodes[i1++].value; while (!sumValue && i1 < n); + minValue = maxValue = sumValue; + alpha = Math.max(dy / dx, dx / dy) / (value * ratio); + beta = sumValue * sumValue * alpha; + minRatio = Math.max(maxValue / beta, beta / minValue); + + // Keep adding nodes while the aspect ratio maintains or improves. + for (; i1 < n; ++i1) { + sumValue += nodeValue = nodes[i1].value; + if (nodeValue < minValue) minValue = nodeValue; + if (nodeValue > maxValue) maxValue = nodeValue; + beta = sumValue * sumValue * alpha; + newRatio = Math.max(maxValue / beta, beta / minValue); + if (newRatio > minRatio) { sumValue -= nodeValue; break; } + minRatio = newRatio; } - if (nHalfedges) cover = false; + // Position and record the row orientation. + rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)}); + if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); + else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); + value -= sumValue, i0 = i1; } + + return rows; } - // If there weren’t any edges, have the closest site cover the extent. - // It doesn’t matter which corner of the extent we measure! - if (cover) { - var dx, dy, d2, dc = Infinity; + var squarify = (function custom(ratio) { - for (iCell = 0, cover = null; iCell < nCells; ++iCell) { - if (cell = cells[iCell]) { - site = cell.site; - dx = site[0] - x0; - dy = site[1] - y0; - d2 = dx * dx + dy * dy; - if (d2 < dc) dc = d2, cover = cell; - } + function squarify(parent, x0, y0, x1, y1) { + squarifyRatio(ratio, parent, x0, y0, x1, y1); } - if (cover) { - var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0]; - cover.halfedges.push( - edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1, - edges.push(createBorderEdge(site, v01, v11)) - 1, - edges.push(createBorderEdge(site, v11, v10)) - 1, - edges.push(createBorderEdge(site, v10, v00)) - 1 - ); + squarify.ratio = function(x) { + return custom((x = +x) > 1 ? x : 1); + }; + + return squarify; + })(phi); + + function index$2() { + var tile = squarify, + round = false, + dx = 1, + dy = 1, + paddingStack = [0], + paddingInner = constantZero, + paddingTop = constantZero, + paddingRight = constantZero, + paddingBottom = constantZero, + paddingLeft = constantZero; + + function treemap(root) { + root.x0 = + root.y0 = 0; + root.x1 = dx; + root.y1 = dy; + root.eachBefore(positionNode); + paddingStack = [0]; + if (round) root.eachBefore(roundNode); + return root; } - } - // Lastly delete any cells with no edges; these were entirely clipped. - for (iCell = 0; iCell < nCells; ++iCell) { - if (cell = cells[iCell]) { - if (!cell.halfedges.length) { - delete cells[iCell]; + function positionNode(node) { + var p = paddingStack[node.depth], + x0 = node.x0 + p, + y0 = node.y0 + p, + x1 = node.x1 - p, + y1 = node.y1 - p; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + node.x0 = x0; + node.y0 = y0; + node.x1 = x1; + node.y1 = y1; + if (node.children) { + p = paddingStack[node.depth + 1] = paddingInner(node) / 2; + x0 += paddingLeft(node) - p; + y0 += paddingTop(node) - p; + x1 -= paddingRight(node) - p; + y1 -= paddingBottom(node) - p; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + tile(node, x0, y0, x1, y1); } } - } -} -var circlePool = []; + treemap.round = function(x) { + return arguments.length ? (round = !!x, treemap) : round; + }; + + treemap.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy]; + }; -var firstCircle; + treemap.tile = function(x) { + return arguments.length ? (tile = required(x), treemap) : tile; + }; -function Circle() { - RedBlackNode(this); - this.x = - this.y = - this.arc = - this.site = - this.cy = null; -} + treemap.padding = function(x) { + return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner(); + }; -function attachCircle(arc) { - var lArc = arc.P, - rArc = arc.N; + treemap.paddingInner = function(x) { + return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$8(+x), treemap) : paddingInner; + }; - if (!lArc || !rArc) return; + treemap.paddingOuter = function(x) { + return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop(); + }; - var lSite = lArc.site, - cSite = arc.site, - rSite = rArc.site; + treemap.paddingTop = function(x) { + return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$8(+x), treemap) : paddingTop; + }; - if (lSite === rSite) return; + treemap.paddingRight = function(x) { + return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$8(+x), treemap) : paddingRight; + }; - var bx = cSite[0], - by = cSite[1], - ax = lSite[0] - bx, - ay = lSite[1] - by, - cx = rSite[0] - bx, - cy = rSite[1] - by; + treemap.paddingBottom = function(x) { + return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$8(+x), treemap) : paddingBottom; + }; - var d = 2 * (ax * cy - ay * cx); - if (d >= -epsilon2$2) return; + treemap.paddingLeft = function(x) { + return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$8(+x), treemap) : paddingLeft; + }; - var ha = ax * ax + ay * ay, - hc = cx * cx + cy * cy, - x = (cy * ha - ay * hc) / d, - y = (ax * hc - cx * ha) / d; + return treemap; + } - var circle = circlePool.pop() || new Circle; - circle.arc = arc; - circle.site = cSite; - circle.x = x + bx; - circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom + function binary(parent, x0, y0, x1, y1) { + var nodes = parent.children, + i, n = nodes.length, + sum, sums = new Array(n + 1); - arc.circle = circle; + for (sums[0] = sum = i = 0; i < n; ++i) { + sums[i + 1] = sum += nodes[i].value; + } - var before = null, - node = circles._; + partition(0, n, parent.value, x0, y0, x1, y1); - while (node) { - if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) { - if (node.L) node = node.L; - else { before = node.P; break; } - } else { - if (node.R) node = node.R; - else { before = node; break; } - } - } - - circles.insert(before, circle); - if (!before) firstCircle = circle; -} - -function detachCircle(arc) { - var circle = arc.circle; - if (circle) { - if (!circle.P) firstCircle = circle.N; - circles.remove(circle); - circlePool.push(circle); - RedBlackNode(circle); - arc.circle = null; - } -} - -var beachPool = []; - -function Beach() { - RedBlackNode(this); - this.edge = - this.site = - this.circle = null; -} - -function createBeach(site) { - var beach = beachPool.pop() || new Beach; - beach.site = site; - return beach; -} - -function detachBeach(beach) { - detachCircle(beach); - beaches.remove(beach); - beachPool.push(beach); - RedBlackNode(beach); -} - -function removeBeach(beach) { - var circle = beach.circle, - x = circle.x, - y = circle.cy, - vertex = [x, y], - previous = beach.P, - next = beach.N, - disappearing = [beach]; - - detachBeach(beach); - - var lArc = previous; - while (lArc.circle - && Math.abs(x - lArc.circle.x) < epsilon$4 - && Math.abs(y - lArc.circle.cy) < epsilon$4) { - previous = lArc.P; - disappearing.unshift(lArc); - detachBeach(lArc); - lArc = previous; - } + function partition(i, j, value, x0, y0, x1, y1) { + if (i >= j - 1) { + var node = nodes[i]; + node.x0 = x0, node.y0 = y0; + node.x1 = x1, node.y1 = y1; + return; + } - disappearing.unshift(lArc); - detachCircle(lArc); + var valueOffset = sums[i], + valueTarget = (value / 2) + valueOffset, + k = i + 1, + hi = j - 1; - var rArc = next; - while (rArc.circle - && Math.abs(x - rArc.circle.x) < epsilon$4 - && Math.abs(y - rArc.circle.cy) < epsilon$4) { - next = rArc.N; - disappearing.push(rArc); - detachBeach(rArc); - rArc = next; - } - - disappearing.push(rArc); - detachCircle(rArc); - - var nArcs = disappearing.length, - iArc; - for (iArc = 1; iArc < nArcs; ++iArc) { - rArc = disappearing[iArc]; - lArc = disappearing[iArc - 1]; - setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); - } - - lArc = disappearing[0]; - rArc = disappearing[nArcs - 1]; - rArc.edge = createEdge(lArc.site, rArc.site, null, vertex); - - attachCircle(lArc); - attachCircle(rArc); -} - -function addBeach(site) { - var x = site[0], - directrix = site[1], - lArc, - rArc, - dxl, - dxr, - node = beaches._; - - while (node) { - dxl = leftBreakPoint(node, directrix) - x; - if (dxl > epsilon$4) node = node.L; else { - dxr = x - rightBreakPoint(node, directrix); - if (dxr > epsilon$4) { - if (!node.R) { - lArc = node; - break; - } - node = node.R; - } else { - if (dxl > -epsilon$4) { - lArc = node.P; - rArc = node; - } else if (dxr > -epsilon$4) { - lArc = node; - rArc = node.N; - } else { - lArc = rArc = node; - } - break; + while (k < hi) { + var mid = k + hi >>> 1; + if (sums[mid] < valueTarget) k = mid + 1; + else hi = mid; } - } - } - createCell(site); - var newArc = createBeach(site); - beaches.insert(lArc, newArc); + if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k; - if (!lArc && !rArc) return; + var valueLeft = sums[k] - valueOffset, + valueRight = value - valueLeft; - if (lArc === rArc) { - detachCircle(lArc); - rArc = createBeach(lArc.site); - beaches.insert(newArc, rArc); - newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site); - attachCircle(lArc); - attachCircle(rArc); - return; - } - - if (!rArc) { // && lArc - newArc.edge = createEdge(lArc.site, newArc.site); - return; - } - - // else lArc !== rArc - detachCircle(lArc); - detachCircle(rArc); - - var lSite = lArc.site, - ax = lSite[0], - ay = lSite[1], - bx = site[0] - ax, - by = site[1] - ay, - rSite = rArc.site, - cx = rSite[0] - ax, - cy = rSite[1] - ay, - d = 2 * (bx * cy - by * cx), - hb = bx * bx + by * by, - hc = cx * cx + cy * cy, - vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay]; - - setEdgeEnd(rArc.edge, lSite, rSite, vertex); - newArc.edge = createEdge(lSite, site, null, vertex); - rArc.edge = createEdge(site, rSite, null, vertex); - attachCircle(lArc); - attachCircle(rArc); -} - -function leftBreakPoint(arc, directrix) { - var site = arc.site, - rfocx = site[0], - rfocy = site[1], - pby2 = rfocy - directrix; - - if (!pby2) return rfocx; - - var lArc = arc.P; - if (!lArc) return -Infinity; - - site = lArc.site; - var lfocx = site[0], - lfocy = site[1], - plby2 = lfocy - directrix; - - if (!plby2) return lfocx; - - var hl = lfocx - rfocx, - aby2 = 1 / pby2 - 1 / plby2, - b = hl / plby2; - - if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; - - return (rfocx + lfocx) / 2; -} - -function rightBreakPoint(arc, directrix) { - var rArc = arc.N; - if (rArc) return leftBreakPoint(rArc, directrix); - var site = arc.site; - return site[1] === directrix ? site[0] : Infinity; -} - -var epsilon$4 = 1e-6; -var epsilon2$2 = 1e-12; -var beaches; -var cells; -var circles; -var edges; - -function triangleArea(a, b, c) { - return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]); -} - -function lexicographic(a, b) { - return b[1] - a[1] - || b[0] - a[0]; -} - -function Diagram(sites, extent) { - var site = sites.sort(lexicographic).pop(), - x, - y, - circle; - - edges = []; - cells = new Array(sites.length); - beaches = new RedBlackTree; - circles = new RedBlackTree; - - while (true) { - circle = firstCircle; - if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) { - if (site[0] !== x || site[1] !== y) { - addBeach(site); - x = site[0], y = site[1]; - } - site = sites.pop(); - } else if (circle) { - removeBeach(circle.arc); - } else { - break; + if ((x1 - x0) > (y1 - y0)) { + var xk = (x0 * valueRight + x1 * valueLeft) / value; + partition(i, k, valueLeft, x0, y0, xk, y1); + partition(k, j, valueRight, xk, y0, x1, y1); + } else { + var yk = (y0 * valueRight + y1 * valueLeft) / value; + partition(i, k, valueLeft, x0, y0, x1, yk); + partition(k, j, valueRight, x0, yk, x1, y1); + } } } - sortCellHalfedges(); - - if (extent) { - var x0 = +extent[0][0], - y0 = +extent[0][1], - x1 = +extent[1][0], - y1 = +extent[1][1]; - clipEdges(x0, y0, x1, y1); - clipCells(x0, y0, x1, y1); + function sliceDice(parent, x0, y0, x1, y1) { + (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1); } - this.edges = edges; - this.cells = cells; + var resquarify = (function custom(ratio) { - beaches = - circles = - edges = - cells = null; -} + function resquarify(parent, x0, y0, x1, y1) { + if ((rows = parent._squarify) && (rows.ratio === ratio)) { + var rows, + row, + nodes, + i, + j = -1, + n, + m = rows.length, + value = parent.value; -Diagram.prototype = { - constructor: Diagram, - - polygons: function() { - var edges = this.edges; - - return this.cells.map(function(cell) { - var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); }); - polygon.data = cell.site.data; - return polygon; - }); - }, - - triangles: function() { - var triangles = [], - edges = this.edges; - - this.cells.forEach(function(cell, i) { - if (!(m = (halfedges = cell.halfedges).length)) return; - var site = cell.site, - halfedges, - j = -1, - m, - s0, - e1 = edges[halfedges[m - 1]], - s1 = e1.left === site ? e1.right : e1.left; - - while (++j < m) { - s0 = s1; - e1 = edges[halfedges[j]]; - s1 = e1.left === site ? e1.right : e1.left; - if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) { - triangles.push([site.data, s0.data, s1.data]); + while (++j < m) { + row = rows[j], nodes = row.children; + for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value; + if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); + else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); + value -= row.value; } + } else { + parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1); + rows.ratio = ratio; } - }); - - return triangles; - }, - - links: function() { - return this.edges.filter(function(edge) { - return edge.right; - }).map(function(edge) { - return { - source: edge.left.data, - target: edge.right.data - }; - }); - }, - - find: function(x, y, radius) { - var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell; - - // Use the previously-found cell, or start with an arbitrary one. - while (!(cell = that.cells[i1])) if (++i1 >= n) return null; - var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy; + } - // Traverse the half-edges to find a closer cell, if any. - do { - cell = that.cells[i0 = i1], i1 = null; - cell.halfedges.forEach(function(e) { - var edge = that.edges[e], v = edge.left; - if ((v === cell.site || !v) && !(v = edge.right)) return; - var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy; - if (v2 < d2) d2 = v2, i1 = v.index; - }); - } while (i1 !== null); + resquarify.ratio = function(x) { + return custom((x = +x) > 1 ? x : 1); + }; - that._found = i0; + return resquarify; + })(phi); - return radius == null || d2 <= radius * radius ? cell.site : null; - } -}; + function d3_polygonArea(polygon) { + var i = -1, + n = polygon.length, + a, + b = polygon[n - 1], + area = 0; -function voronoi() { - var x$$1 = x$4, - y$$1 = y$4, - extent = null; + while (++i < n) { + a = b; + b = polygon[i]; + area += a[1] * b[0] - a[0] * b[1]; + } - function voronoi(data) { - return new Diagram(data.map(function(d, i) { - var s = [Math.round(x$$1(d, i, data) / epsilon$4) * epsilon$4, Math.round(y$$1(d, i, data) / epsilon$4) * epsilon$4]; - s.index = i; - s.data = d; - return s; - }), extent); + return area / 2; } - voronoi.polygons = function(data) { - return voronoi(data).polygons(); - }; - - voronoi.links = function(data) { - return voronoi(data).links(); - }; - - voronoi.triangles = function(data) { - return voronoi(data).triangles(); - }; + function d3_polygonCentroid(polygon) { + var i = -1, + n = polygon.length, + x = 0, + y = 0, + a, + b = polygon[n - 1], + c, + k = 0; - voronoi.x = function(_) { - return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$11(+_), voronoi) : x$$1; - }; + while (++i < n) { + a = b; + b = polygon[i]; + k += c = a[0] * b[1] - b[0] * a[1]; + x += (a[0] + b[0]) * c; + y += (a[1] + b[1]) * c; + } - voronoi.y = function(_) { - return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$11(+_), voronoi) : y$$1; - }; + return k *= 3, [x / k, y / k]; + } - voronoi.extent = function(_) { - return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]]; - }; + // Returns the 2D cross product of AB and AC vectors, i.e., the z-component of + // the 3D cross product in a quadrant I Cartesian coordinate system (+x is + // right, +y is up). Returns a positive value if ABC is counter-clockwise, + // negative if clockwise, and zero if the points are collinear. + function cross$1(a, b, c) { + return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); + } - voronoi.size = function(_) { - return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]]; - }; + function lexicographicOrder(a, b) { + return a[0] - b[0] || a[1] - b[1]; + } - return voronoi; -} + // Computes the upper convex hull per the monotone chain algorithm. + // Assumes points.length >= 3, is sorted by x, unique in y. + // Returns an array of indices into points in left-to-right order. + function computeUpperHullIndexes(points) { + var n = points.length, + indexes = [0, 1], + size = 2; -function constant$12(x) { - return function() { - return x; - }; -} - -function ZoomEvent(target, type, transform) { - this.target = target; - this.type = type; - this.transform = transform; -} - -function Transform(k, x, y) { - this.k = k; - this.x = x; - this.y = y; -} - -Transform.prototype = { - constructor: Transform, - scale: function(k) { - return k === 1 ? this : new Transform(this.k * k, this.x, this.y); - }, - translate: function(x, y) { - return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y); - }, - apply: function(point) { - return [point[0] * this.k + this.x, point[1] * this.k + this.y]; - }, - applyX: function(x) { - return x * this.k + this.x; - }, - applyY: function(y) { - return y * this.k + this.y; - }, - invert: function(location) { - return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k]; - }, - invertX: function(x) { - return (x - this.x) / this.k; - }, - invertY: function(y) { - return (y - this.y) / this.k; - }, - rescaleX: function(x) { - return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x)); - }, - rescaleY: function(y) { - return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y)); - }, - toString: function() { - return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")"; - } -}; - -var identity$7 = new Transform(1, 0, 0); - -transform.prototype = Transform.prototype; - -function transform(node) { - return node.__zoom || identity$7; -} - -function nopropagation$2() { - event.stopImmediatePropagation(); -} - -function noevent$2() { - event.preventDefault(); - event.stopImmediatePropagation(); -} - -// Ignore right-click, since that should open the context menu. -function defaultFilter$2() { - return !event.button; -} - -function defaultExtent$1() { - var e = this, w, h; - if (e instanceof SVGElement) { - e = e.ownerSVGElement || e; - w = e.width.baseVal.value; - h = e.height.baseVal.value; - } else { - w = e.clientWidth; - h = e.clientHeight; - } - return [[0, 0], [w, h]]; -} - -function defaultTransform() { - return this.__zoom || identity$7; -} - -function defaultWheelDelta() { - return -event.deltaY * (event.deltaMode ? 120 : 1) / 500; -} - -function defaultTouchable$1() { - return "ontouchstart" in this; -} - -function defaultConstrain(transform$$1, extent, translateExtent) { - var dx0 = transform$$1.invertX(extent[0][0]) - translateExtent[0][0], - dx1 = transform$$1.invertX(extent[1][0]) - translateExtent[1][0], - dy0 = transform$$1.invertY(extent[0][1]) - translateExtent[0][1], - dy1 = transform$$1.invertY(extent[1][1]) - translateExtent[1][1]; - return transform$$1.translate( - dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), - dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1) - ); -} - -function d3_zoom() { - var filter = defaultFilter$2, - extent = defaultExtent$1, - constrain = defaultConstrain, - wheelDelta = defaultWheelDelta, - touchable = defaultTouchable$1, - scaleExtent = [0, Infinity], - translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]], - duration = 250, - interpolate = interpolateZoom, - gestures = [], - listeners = dispatch("start", "zoom", "end"), - touchstarting, - touchending, - touchDelay = 500, - wheelDelay = 150, - clickDistance2 = 0; - - function zoom(selection$$1) { - selection$$1 - .property("__zoom", defaultTransform) - .on("wheel.zoom", wheeled) - .on("mousedown.zoom", mousedowned) - .on("dblclick.zoom", dblclicked) - .filter(touchable) - .on("touchstart.zoom", touchstarted) - .on("touchmove.zoom", touchmoved) - .on("touchend.zoom touchcancel.zoom", touchended) - .style("touch-action", "none") - .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); - } - - zoom.transform = function(collection, transform$$1) { - var selection$$1 = collection.selection ? collection.selection() : collection; - selection$$1.property("__zoom", defaultTransform); - if (collection !== selection$$1) { - schedule(collection, transform$$1); - } else { - selection$$1.interrupt().each(function() { - gesture(this, arguments) - .start() - .zoom(null, typeof transform$$1 === "function" ? transform$$1.apply(this, arguments) : transform$$1) - .end(); - }); + for (var i = 2; i < n; ++i) { + while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size; + indexes[size++] = i; } - }; - zoom.scaleBy = function(selection$$1, k) { - zoom.scaleTo(selection$$1, function() { - var k0 = this.__zoom.k, - k1 = typeof k === "function" ? k.apply(this, arguments) : k; - return k0 * k1; - }); - }; + return indexes.slice(0, size); // remove popped points + } - zoom.scaleTo = function(selection$$1, k) { - zoom.transform(selection$$1, function() { - var e = extent.apply(this, arguments), - t0 = this.__zoom, - p0 = centroid(e), - p1 = t0.invert(p0), - k1 = typeof k === "function" ? k.apply(this, arguments) : k; - return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent); - }); - }; + function d3_polygonHull(points) { + if ((n = points.length) < 3) return null; - zoom.translateBy = function(selection$$1, x, y) { - zoom.transform(selection$$1, function() { - return constrain(this.__zoom.translate( - typeof x === "function" ? x.apply(this, arguments) : x, - typeof y === "function" ? y.apply(this, arguments) : y - ), extent.apply(this, arguments), translateExtent); - }); - }; + var i, + n, + sortedPoints = new Array(n), + flippedPoints = new Array(n); - zoom.translateTo = function(selection$$1, x, y) { - zoom.transform(selection$$1, function() { - var e = extent.apply(this, arguments), - t = this.__zoom, - p = centroid(e); - return constrain(identity$7.translate(p[0], p[1]).scale(t.k).translate( - typeof x === "function" ? -x.apply(this, arguments) : -x, - typeof y === "function" ? -y.apply(this, arguments) : -y - ), e, translateExtent); - }); - }; + for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i]; + sortedPoints.sort(lexicographicOrder); + for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]]; - function scale(transform$$1, k) { - k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k)); - return k === transform$$1.k ? transform$$1 : new Transform(k, transform$$1.x, transform$$1.y); - } + var upperIndexes = computeUpperHullIndexes(sortedPoints), + lowerIndexes = computeUpperHullIndexes(flippedPoints); - function translate(transform$$1, p0, p1) { - var x = p0[0] - p1[0] * transform$$1.k, y = p0[1] - p1[1] * transform$$1.k; - return x === transform$$1.x && y === transform$$1.y ? transform$$1 : new Transform(transform$$1.k, x, y); - } + // Construct the hull polygon, removing possible duplicate endpoints. + var skipLeft = lowerIndexes[0] === upperIndexes[0], + skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1], + hull = []; - function centroid(extent) { - return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2]; - } + // Add upper hull in right-to-l order. + // Then add lower hull in left-to-right order. + for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]); + for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]); - function schedule(transition$$1, transform$$1, center) { - transition$$1 - .on("start.zoom", function() { gesture(this, arguments).start(); }) - .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); }) - .tween("zoom", function() { - var that = this, - args = arguments, - g = gesture(that, args), - e = extent.apply(that, args), - p = center || centroid(e), - w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]), - a = that.__zoom, - b = typeof transform$$1 === "function" ? transform$$1.apply(that, args) : transform$$1, - i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k)); - return function(t) { - if (t === 1) t = b; // Avoid rounding error on end. - else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); } - g.zoom(null, t); - }; - }); + return hull; } - function gesture(that, args) { - for (var i = 0, n = gestures.length, g; i < n; ++i) { - if ((g = gestures[i]).that === that) { - return g; - } + function contains$1(polygon, point) { + var n = polygon.length, + p = polygon[n - 1], + x = point[0], y = point[1], + x0 = p[0], y0 = p[1], + x1, y1, + inside = false; + + for (var i = 0; i < n; ++i) { + p = polygon[i], x1 = p[0], y1 = p[1]; + if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside; + x0 = x1, y0 = y1; } - return new Gesture(that, args); - } - function Gesture(that, args) { - this.that = that; - this.args = args; - this.index = -1; - this.active = 0; - this.extent = extent.apply(that, args); + return inside; } - Gesture.prototype = { - start: function() { - if (++this.active === 1) { - this.index = gestures.push(this) - 1; - this.emit("start"); - } + function length$2(polygon) { + var i = -1, + n = polygon.length, + b = polygon[n - 1], + xa, + ya, + xb = b[0], + yb = b[1], + perimeter = 0; + + while (++i < n) { + xa = xb; + ya = yb; + b = polygon[i]; + xb = b[0]; + yb = b[1]; + xa -= xb; + ya -= yb; + perimeter += Math.sqrt(xa * xa + ya * ya); + } + + return perimeter; + } + + var slice$4 = [].slice; + + var noabort = {}; + + function Queue(size) { + this._size = size; + this._call = + this._error = null; + this._tasks = []; + this._data = []; + this._waiting = + this._active = + this._ended = + this._start = 0; // inside a synchronous task callback? + } + + Queue.prototype = queue.prototype = { + constructor: Queue, + defer: function(callback) { + if (typeof callback !== "function") throw new Error("invalid callback"); + if (this._call) throw new Error("defer after await"); + if (this._error != null) return this; + var t = slice$4.call(arguments, 1); + t.push(callback); + ++this._waiting, this._tasks.push(t); + poke$1(this); return this; }, - zoom: function(key, transform$$1) { - if (this.mouse && key !== "mouse") this.mouse[1] = transform$$1.invert(this.mouse[0]); - if (this.touch0 && key !== "touch") this.touch0[1] = transform$$1.invert(this.touch0[0]); - if (this.touch1 && key !== "touch") this.touch1[1] = transform$$1.invert(this.touch1[0]); - this.that.__zoom = transform$$1; - this.emit("zoom"); + abort: function() { + if (this._error == null) abort(this, new Error("abort")); return this; }, - end: function() { - if (--this.active === 0) { - gestures.splice(this.index, 1); - this.index = -1; - this.emit("end"); - } + await: function(callback) { + if (typeof callback !== "function") throw new Error("invalid callback"); + if (this._call) throw new Error("multiple await"); + this._call = function(error, results) { callback.apply(null, [error].concat(results)); }; + maybeNotify(this); return this; }, - emit: function(type) { - customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]); + awaitAll: function(callback) { + if (typeof callback !== "function") throw new Error("invalid callback"); + if (this._call) throw new Error("multiple await"); + this._call = callback; + maybeNotify(this); + return this; } }; - function wheeled() { - if (!filter.apply(this, arguments)) return; - var g = gesture(this, arguments), - t = this.__zoom, - k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))), - p = d3_mouse(this); - - // If the mouse is in the same location as before, reuse it. - // If there were recent wheel events, reset the wheel idle timeout. - if (g.wheel) { - if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) { - g.mouse[1] = t.invert(g.mouse[0] = p); + function poke$1(q) { + if (!q._start) { + try { start$1(q); } // let the current task complete + catch (e) { + if (q._tasks[q._ended + q._active - 1]) abort(q, e); // task errored synchronously + else if (!q._data) throw e; // await callback errored synchronously } - clearTimeout(g.wheel); } + } - // If this wheel event won’t trigger a transform change, ignore it. - else if (t.k === k) return; - - // Otherwise, capture the mouse point and location at the start. - else { - g.mouse = [p, t.invert(p)]; - interrupt(this); - g.start(); - } - - noevent$2(); - g.wheel = setTimeout(wheelidled, wheelDelay); - g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent)); - - function wheelidled() { - g.wheel = null; - g.end(); + function start$1(q) { + while (q._start = q._waiting && q._active < q._size) { + var i = q._ended + q._active, + t = q._tasks[i], + j = t.length - 1, + c = t[j]; + t[j] = end(q, i); + --q._waiting, ++q._active; + t = c.apply(null, t); + if (!q._tasks[i]) continue; // task finished synchronously + q._tasks[i] = t || noabort; } } - function mousedowned() { - if (touchending || !filter.apply(this, arguments)) return; - var g = gesture(this, arguments), - v = d3_select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), - p = d3_mouse(this), - x0 = event.clientX, - y0 = event.clientY; + function end(q, i) { + return function(e, r) { + if (!q._tasks[i]) return; // ignore multiple callbacks + --q._active, ++q._ended; + q._tasks[i] = null; + if (q._error != null) return; // ignore secondary errors + if (e != null) { + abort(q, e); + } else { + q._data[i] = r; + if (q._waiting) poke$1(q); + else maybeNotify(q); + } + }; + } - dragDisable(event.view); - nopropagation$2(); - g.mouse = [p, this.__zoom.invert(p)]; - interrupt(this); - g.start(); + function abort(q, e) { + var i = q._tasks.length, t; + q._error = e; // ignore active callbacks + q._data = undefined; // allow gc + q._waiting = NaN; // prevent starting - function mousemoved() { - noevent$2(); - if (!g.moved) { - var dx = event.clientX - x0, dy = event.clientY - y0; - g.moved = dx * dx + dy * dy > clickDistance2; + while (--i >= 0) { + if (t = q._tasks[i]) { + q._tasks[i] = null; + if (t.abort) { + try { t.abort(); } + catch (e) { /* ignore */ } + } } - g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = d3_mouse(g.that), g.mouse[1]), g.extent, translateExtent)); } - function mouseupped() { - v.on("mousemove.zoom mouseup.zoom", null); - yesdrag(event.view, g.moved); - noevent$2(); - g.end(); - } + q._active = NaN; // allow notification + maybeNotify(q); } - function dblclicked() { - if (!filter.apply(this, arguments)) return; - var t0 = this.__zoom, - p0 = d3_mouse(this), - p1 = t0.invert(p0), - k1 = t0.k * (event.shiftKey ? 0.5 : 2), - t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent); + function maybeNotify(q) { + if (!q._active && q._call) { + var d = q._data; + q._data = undefined; // allow gc + q._call(q._error, d); + } + } - noevent$2(); - if (duration > 0) d3_select(this).transition().duration(duration).call(schedule, t1, p0); - else d3_select(this).call(zoom.transform, t1); + function queue(concurrency) { + if (concurrency == null) concurrency = Infinity; + else if (!((concurrency = +concurrency) >= 1)) throw new Error("invalid concurrency"); + return new Queue(concurrency); } - function touchstarted() { - if (!filter.apply(this, arguments)) return; - var g = gesture(this, arguments), - touches = event.changedTouches, - started, - n = touches.length, i, t, p; + function defaultSource$1() { + return Math.random(); + } - nopropagation$2(); - for (i = 0; i < n; ++i) { - t = touches[i], p = touch(this, touches, t.identifier); - p = [p, this.__zoom.invert(p), t.identifier]; - if (!g.touch0) g.touch0 = p, started = true; - else if (!g.touch1) g.touch1 = p; + var uniform = (function sourceRandomUniform(source) { + function randomUniform(min, max) { + min = min == null ? 0 : +min; + max = max == null ? 1 : +max; + if (arguments.length === 1) max = min, min = 0; + else max -= min; + return function() { + return source() * max + min; + }; } - // If this is a dbltap, reroute to the (optional) dblclick.zoom handler. - if (touchstarting) { - touchstarting = clearTimeout(touchstarting); - if (!g.touch1) { - g.end(); - p = d3_select(this).on("dblclick.zoom"); - if (p) p.apply(this, arguments); - return; - } - } + randomUniform.source = sourceRandomUniform; - if (started) { - touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); - interrupt(this); - g.start(); - } - } + return randomUniform; + })(defaultSource$1); - function touchmoved() { - var g = gesture(this, arguments), - touches = event.changedTouches, - n = touches.length, i, t, p, l; + var normal = (function sourceRandomNormal(source) { + function randomNormal(mu, sigma) { + var x, r; + mu = mu == null ? 0 : +mu; + sigma = sigma == null ? 1 : +sigma; + return function() { + var y; - noevent$2(); - if (touchstarting) touchstarting = clearTimeout(touchstarting); - for (i = 0; i < n; ++i) { - t = touches[i], p = touch(this, touches, t.identifier); - if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p; - else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p; - } - t = g.that.__zoom; - if (g.touch1) { - var p0 = g.touch0[0], l0 = g.touch0[1], - p1 = g.touch1[0], l1 = g.touch1[1], - dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp, - dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl; - t = scale(t, Math.sqrt(dp / dl)); - p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2]; - l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2]; - } - else if (g.touch0) p = g.touch0[0], l = g.touch0[1]; - else return; - g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent)); - } - - function touchended() { - var g = gesture(this, arguments), - touches = event.changedTouches, - n = touches.length, i, t; - - nopropagation$2(); - if (touchending) clearTimeout(touchending); - touchending = setTimeout(function() { touchending = null; }, touchDelay); - for (i = 0; i < n; ++i) { - t = touches[i]; - if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0; - else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1; + // If available, use the second previously-generated uniform random. + if (x != null) y = x, x = null; + + // Otherwise, generate a new x and y. + else do { + x = source() * 2 - 1; + y = source() * 2 - 1; + r = x * x + y * y; + } while (!r || r > 1); + + return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r); + }; } - if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1; - if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]); - else g.end(); - } - zoom.wheelDelta = function(_) { - return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant$12(+_), zoom) : wheelDelta; - }; + randomNormal.source = sourceRandomNormal; - zoom.filter = function(_) { - return arguments.length ? (filter = typeof _ === "function" ? _ : constant$12(!!_), zoom) : filter; - }; + return randomNormal; + })(defaultSource$1); - zoom.touchable = function(_) { - return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$12(!!_), zoom) : touchable; - }; + var logNormal = (function sourceRandomLogNormal(source) { + function randomLogNormal() { + var randomNormal = normal.source(source).apply(this, arguments); + return function() { + return Math.exp(randomNormal()); + }; + } - zoom.extent = function(_) { - return arguments.length ? (extent = typeof _ === "function" ? _ : constant$12([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent; - }; + randomLogNormal.source = sourceRandomLogNormal; - zoom.scaleExtent = function(_) { - return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]]; - }; + return randomLogNormal; + })(defaultSource$1); - zoom.translateExtent = function(_) { - return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]]; - }; + var irwinHall = (function sourceRandomIrwinHall(source) { + function randomIrwinHall(n) { + return function() { + for (var sum = 0, i = 0; i < n; ++i) sum += source(); + return sum; + }; + } - zoom.constrain = function(_) { - return arguments.length ? (constrain = _, zoom) : constrain; - }; + randomIrwinHall.source = sourceRandomIrwinHall; - zoom.duration = function(_) { - return arguments.length ? (duration = +_, zoom) : duration; - }; + return randomIrwinHall; + })(defaultSource$1); - zoom.interpolate = function(_) { - return arguments.length ? (interpolate = _, zoom) : interpolate; - }; + var bates = (function sourceRandomBates(source) { + function randomBates(n) { + var randomIrwinHall = irwinHall.source(source)(n); + return function() { + return randomIrwinHall() / n; + }; + } - zoom.on = function() { - var value = listeners.on.apply(listeners, arguments); - return value === listeners ? zoom : value; - }; + randomBates.source = sourceRandomBates; - zoom.clickDistance = function(_) { - return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2); - }; + return randomBates; + })(defaultSource$1); - return zoom; -} - - - -var index$3 = Object.freeze({ - version: version, - bisect: bisectRight, - bisectRight: bisectRight, - bisectLeft: bisectLeft, - ascending: d3_ascending, - bisector: d3_bisector, - cross: cross, - descending: d3_descending, - deviation: deviation, - extent: extent, - histogram: histogram, - thresholdFreedmanDiaconis: freedmanDiaconis, - thresholdScott: scott, - thresholdSturges: sturges, - max: max, - mean: mean, - median: d3_median, - merge: merge, - min: min, - pairs: pairs, - permute: permute, - quantile: threshold, - range: d3_range, - scan: scan, - shuffle: shuffle, - sum: sum, - ticks: ticks, - tickIncrement: tickIncrement, - tickStep: tickStep, - transpose: transpose, - variance: variance, - zip: zip, - axisTop: axisTop, - axisRight: axisRight, - axisBottom: axisBottom, - axisLeft: axisLeft, - brush: brush, - brushX: brushX, - brushY: brushY, - brushSelection: brushSelection, - chord: chord, - ribbon: ribbon, - nest: nest, - set: set$2, - map: map$1, - keys: keys, - values: values, - entries: entries, - color: color, - rgb: rgb, - hsl: hsl, - lab: lab, - hcl: hcl, - cubehelix: cubehelix, - dispatch: dispatch, - drag: drag, - dragDisable: dragDisable, - dragEnable: yesdrag, - dsvFormat: dsv, - csvParse: csvParse, - csvParseRows: csvParseRows, - csvFormat: csvFormat, - csvFormatRows: csvFormatRows, - tsvParse: tsvParse, - tsvParseRows: tsvParseRows, - tsvFormat: tsvFormat, - tsvFormatRows: tsvFormatRows, - easeLinear: linear$1, - easeQuad: quadInOut, - easeQuadIn: quadIn, - easeQuadOut: quadOut, - easeQuadInOut: quadInOut, - easeCubic: cubicInOut, - easeCubicIn: cubicIn, - easeCubicOut: cubicOut, - easeCubicInOut: cubicInOut, - easePoly: polyInOut, - easePolyIn: polyIn, - easePolyOut: polyOut, - easePolyInOut: polyInOut, - easeSin: sinInOut, - easeSinIn: sinIn, - easeSinOut: sinOut, - easeSinInOut: sinInOut, - easeExp: expInOut, - easeExpIn: expIn, - easeExpOut: expOut, - easeExpInOut: expInOut, - easeCircle: circleInOut, - easeCircleIn: circleIn, - easeCircleOut: circleOut, - easeCircleInOut: circleInOut, - easeBounce: bounceOut, - easeBounceIn: bounceIn, - easeBounceOut: bounceOut, - easeBounceInOut: bounceInOut, - easeBack: backInOut, - easeBackIn: backIn, - easeBackOut: backOut, - easeBackInOut: backInOut, - easeElastic: elasticOut, - easeElasticIn: elasticIn, - easeElasticOut: elasticOut, - easeElasticInOut: elasticInOut, - forceCenter: center$1, - forceCollide: collide, - forceLink: link, - forceManyBody: manyBody, - forceRadial: radial, - forceSimulation: simulation, - forceX: x$2, - forceY: y$2, - formatDefaultLocale: defaultLocale, - get format () { return format; }, - get formatPrefix () { return formatPrefix; }, - formatLocale: formatLocale, - formatSpecifier: formatSpecifier, - precisionFixed: precisionFixed, - precisionPrefix: precisionPrefix, - precisionRound: precisionRound, - geoArea: d3_geoArea, - geoBounds: d3_geoBounds, - geoCentroid: d3_geoCentroid, - geoCircle: circle, - geoClipAntimeridian: clipAntimeridian, - geoClipCircle: clipCircle, - geoClipExtent: extent$1, - geoClipRectangle: clipRectangle, - geoContains: contains, - geoDistance: distance, - geoGraticule: graticule, - geoGraticule10: graticule10, - geoInterpolate: interpolate$1, - geoLength: d3_geoLength, - geoPath: d3_geoPath, - geoAlbers: albers, - geoAlbersUsa: albersUsa, - geoAzimuthalEqualArea: azimuthalEqualArea, - geoAzimuthalEqualAreaRaw: azimuthalEqualAreaRaw, - geoAzimuthalEquidistant: azimuthalEquidistant, - geoAzimuthalEquidistantRaw: azimuthalEquidistantRaw, - geoConicConformal: conicConformal, - geoConicConformalRaw: conicConformalRaw, - geoConicEqualArea: conicEqualArea, - geoConicEqualAreaRaw: conicEqualAreaRaw, - geoConicEquidistant: conicEquidistant, - geoConicEquidistantRaw: conicEquidistantRaw, - geoEquirectangular: equirectangular, - geoEquirectangularRaw: equirectangularRaw, - geoGnomonic: gnomonic, - geoGnomonicRaw: gnomonicRaw, - geoIdentity: d3_geoIdentity, - geoProjection: projection, - geoProjectionMutator: projectionMutator, - geoMercator: mercator, - geoMercatorRaw: mercatorRaw, - geoNaturalEarth1: naturalEarth1, - geoNaturalEarth1Raw: naturalEarth1Raw, - geoOrthographic: orthographic, - geoOrthographicRaw: orthographicRaw, - geoStereographic: stereographic, - geoStereographicRaw: stereographicRaw, - geoTransverseMercator: transverseMercator, - geoTransverseMercatorRaw: transverseMercatorRaw, - geoRotation: rotation, - geoStream: d3_geoStream, - geoTransform: d3_geoTransform, - cluster: cluster, - hierarchy: hierarchy, - pack: index$1, - packSiblings: siblings, - packEnclose: enclose, - partition: partition, - stratify: stratify, - tree: tree, - treemap: index$2, - treemapBinary: binary, - treemapDice: treemapDice, - treemapSlice: treemapSlice, - treemapSliceDice: sliceDice, - treemapSquarify: squarify, - treemapResquarify: resquarify, - interpolate: d3_interpolate, - interpolateArray: array$1, - interpolateBasis: basis$1, - interpolateBasisClosed: basisClosed, - interpolateDate: date, - interpolateNumber: d3_interpolateNumber, - interpolateObject: object, - interpolateRound: interpolateRound, - interpolateString: interpolateString, - interpolateTransformCss: interpolateTransformCss, - interpolateTransformSvg: interpolateTransformSvg, - interpolateZoom: interpolateZoom, - interpolateRgb: d3_interpolateRgb, - interpolateRgbBasis: rgbBasis, - interpolateRgbBasisClosed: rgbBasisClosed, - interpolateHsl: hsl$2, - interpolateHslLong: hslLong, - interpolateLab: lab$1, - interpolateHcl: hcl$2, - interpolateHclLong: hclLong, - interpolateCubehelix: cubehelix$2, - interpolateCubehelixLong: cubehelixLong, - quantize: d3_quantize, - path: path, - polygonArea: d3_polygonArea, - polygonCentroid: d3_polygonCentroid, - polygonHull: d3_polygonHull, - polygonContains: contains$1, - polygonLength: length$1, - quadtree: quadtree, - queue: queue, - randomUniform: uniform, - randomNormal: normal, - randomLogNormal: logNormal, - randomBates: bates, - randomIrwinHall: irwinHall, - randomExponential: exponential$1, - request: d3_request, - html: html, - json: d3_json, - text: d3_text, - xml: d3_xml, - csv: csv$1, - tsv: tsv$1, - scaleBand: band, - scalePoint: point$1, - scaleIdentity: identity$5, - scaleLinear: linear$2, - scaleLog: log$1, - scaleOrdinal: ordinal, - scaleImplicit: implicit, - scalePow: pow$1, - scaleSqrt: sqrt$1, - scaleQuantile: quantile$$1, - scaleQuantize: quantize, - scaleThreshold: threshold$1, - scaleTime: time, - scaleUtc: utcTime, - schemeCategory10: category10, - schemeCategory20b: category20b, - schemeCategory20c: category20c, - schemeCategory20: category20, - interpolateCubehelixDefault: cubehelix$3, - interpolateRainbow: rainbow$1, - interpolateWarm: warm, - interpolateCool: cool, - interpolateViridis: viridis, - interpolateMagma: magma, - interpolateInferno: inferno, - interpolatePlasma: plasma, - scaleSequential: sequential, - create: create, - creator: creator, - local: local, - matcher: matcher$1, - mouse: d3_mouse, - namespace: namespace, - namespaces: namespaces, - clientPoint: point, - select: d3_select, - selectAll: d3_selectAll, - selection: selection, - selector: selector, - selectorAll: selectorAll, - style: styleValue, - touch: touch, - touches: d3_touches, - window: defaultView, - get event () { return event; }, - customEvent: customEvent, - arc: arc, - area: area, - line: line, - pie: pie, - areaRadial: areaRadial, - radialArea: areaRadial, - lineRadial: lineRadial$1, - radialLine: lineRadial$1, - pointRadial: pointRadial, - linkHorizontal: linkHorizontal, - linkVertical: linkVertical, - linkRadial: linkRadial, - symbol: symbol, - symbols: symbols, - symbolCircle: circle$2, - symbolCross: cross$2, - symbolDiamond: diamond, - symbolSquare: square, - symbolStar: star, - symbolTriangle: triangle, - symbolWye: wye, - curveBasisClosed: basisClosed$1, - curveBasisOpen: basisOpen, - curveBasis: basis$2, - curveBundle: bundle, - curveCardinalClosed: cardinalClosed, - curveCardinalOpen: cardinalOpen, - curveCardinal: cardinal, - curveCatmullRomClosed: catmullRomClosed, - curveCatmullRomOpen: catmullRomOpen, - curveCatmullRom: catmullRom, - curveLinearClosed: linearClosed, - curveLinear: curveLinear, - curveMonotoneX: monotoneX, - curveMonotoneY: monotoneY, - curveNatural: natural, - curveStep: step, - curveStepAfter: stepAfter, - curveStepBefore: stepBefore, - stack: stack, - stackOffsetExpand: expand, - stackOffsetDiverging: diverging, - stackOffsetNone: none$1, - stackOffsetSilhouette: silhouette, - stackOffsetWiggle: wiggle, - stackOrderAscending: ascending$1, - stackOrderDescending: descending$1, - stackOrderInsideOut: insideOut, - stackOrderNone: none$2, - stackOrderReverse: reverse, - timeInterval: newInterval, - timeMillisecond: millisecond, - timeMilliseconds: milliseconds, - utcMillisecond: millisecond, - utcMilliseconds: milliseconds, - timeSecond: second, - timeSeconds: seconds, - utcSecond: second, - utcSeconds: seconds, - timeMinute: minute, - timeMinutes: minutes, - timeHour: hour, - timeHours: hours, - timeDay: day, - timeDays: days, - timeWeek: sunday, - timeWeeks: sundays, - timeSunday: sunday, - timeSundays: sundays, - timeMonday: monday, - timeMondays: mondays, - timeTuesday: tuesday, - timeTuesdays: tuesdays, - timeWednesday: wednesday, - timeWednesdays: wednesdays, - timeThursday: thursday, - timeThursdays: thursdays, - timeFriday: friday, - timeFridays: fridays, - timeSaturday: saturday, - timeSaturdays: saturdays, - timeMonth: month, - timeMonths: months, - timeYear: year, - timeYears: years, - utcMinute: utcMinute, - utcMinutes: utcMinutes, - utcHour: utcHour, - utcHours: utcHours, - utcDay: utcDay, - utcDays: utcDays, - utcWeek: utcSunday, - utcWeeks: utcSundays, - utcSunday: utcSunday, - utcSundays: utcSundays, - utcMonday: utcMonday, - utcMondays: utcMondays, - utcTuesday: utcTuesday, - utcTuesdays: utcTuesdays, - utcWednesday: utcWednesday, - utcWednesdays: utcWednesdays, - utcThursday: utcThursday, - utcThursdays: utcThursdays, - utcFriday: utcFriday, - utcFridays: utcFridays, - utcSaturday: utcSaturday, - utcSaturdays: utcSaturdays, - utcMonth: utcMonth, - utcMonths: utcMonths, - utcYear: utcYear, - utcYears: utcYears, - timeFormatDefaultLocale: defaultLocale$1, - get timeFormat () { return timeFormat; }, - get timeParse () { return timeParse; }, - get utcFormat () { return utcFormat; }, - get utcParse () { return utcParse; }, - timeFormatLocale: formatLocale$1, - isoFormat: formatIso, - isoParse: parseIso, - now: now, - timer: timer, - timerFlush: timerFlush, - timeout: d3_timeout, - interval: interval$1, - transition: transition, - active: active, - interrupt: interrupt, - voronoi: voronoi, - zoom: d3_zoom, - zoomTransform: transform, - zoomIdentity: identity$7 -}); - -function actionAddEntity(way) { - return function(graph) { - return graph.replace(way); - }; -} - -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; - this.size = 0; -} - -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; + var exponential$1 = (function sourceRandomExponential(source) { + function randomExponential(lambda) { + return function() { + return -Math.log(1 - source()) / lambda; + }; } - } - return -1; -} -/** Used for built-in method references. */ -var arrayProto = Array.prototype; + randomExponential.source = sourceRandomExponential; + + return randomExponential; + })(defaultSource$1); + + function request(url, callback) { + var request, + event = dispatch("beforesend", "progress", "load", "error"), + mimeType, + headers = map$1(), + xhr = new XMLHttpRequest, + user = null, + password = null, + response, + responseType, + timeout = 0; + + // If IE does not support CORS, use XDomainRequest. + if (typeof XDomainRequest !== "undefined" + && !("withCredentials" in xhr) + && /^(http(s)?:)?\/\//.test(url)) xhr = new XDomainRequest; + + "onload" in xhr + ? xhr.onload = xhr.onerror = xhr.ontimeout = respond + : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); }; + + function respond(o) { + var status = xhr.status, result; + if (!status && hasResponse(xhr) + || status >= 200 && status < 300 + || status === 304) { + if (response) { + try { + result = response.call(request, xhr); + } catch (e) { + event.call("error", request, e); + return; + } + } else { + result = xhr; + } + event.call("load", request, result); + } else { + event.call("error", request, o); + } + } -/** Built-in value references. */ -var splice = arrayProto.splice; + xhr.onprogress = function(e) { + event.call("progress", request, e); + }; -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); + request = { + header: function(name, value) { + name = (name + "").toLowerCase(); + if (arguments.length < 2) return headers.get(name); + if (value == null) headers.remove(name); + else headers.set(name, value + ""); + return request; + }, - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; -} - -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; -} - -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} - -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -/** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ -function stackClear() { - this.__data__ = new ListCache; - this.size = 0; -} - -/** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; -} - -/** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function stackGet(key) { - return this.__data__.get(key); -} - -/** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function stackHas(key) { - return this.__data__.has(key); -} - -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root$2 = freeGlobal || freeSelf || Function('return this')(); - -/** Built-in value references. */ -var Symbol = root$2.Symbol; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; - -/** Built-in value references. */ -var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - -/** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ -function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; - - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; -} - -/** Used for built-in method references. */ -var objectProto$1 = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString$1 = objectProto$1.toString; - -/** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ -function objectToString(value) { - return nativeObjectToString$1.call(value); -} - -/** `Object#toString` result references. */ -var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - -/** Built-in value references. */ -var symToStringTag$1 = Symbol ? Symbol.toStringTag : undefined; - -/** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag$1 && symToStringTag$1 in Object(value)) - ? getRawTag(value) - : objectToString(value); -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} - -/** `Object#toString` result references. */ -var asyncTag = '[object AsyncFunction]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; -} + // If mimeType is non-null and no Accept header is set, a default is used. + mimeType: function(value) { + if (!arguments.length) return mimeType; + mimeType = value == null ? null : value + ""; + return request; + }, -/** Used to detect overreaching core-js shims. */ -var coreJsData = root$2['__core-js_shared__']; + // Specifies what type the response value should take; + // for instance, arraybuffer, blob, document, or text. + responseType: function(value) { + if (!arguments.length) return responseType; + responseType = value; + return request; + }, -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); + timeout: function(value) { + if (!arguments.length) return timeout; + timeout = +value; + return request; + }, -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -/** Used for built-in method references. */ -var funcProto = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var funcProto$1 = Function.prototype, - objectProto$2 = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString$1 = funcProto$1.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty$1 = objectProto$2.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString$1.call(hasOwnProperty$1).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -/* Built-in method references that are verified to be native. */ -var Map$1 = getNative(root$2, 'Map'); - -/* Built-in method references that are verified to be native. */ -var nativeCreate = getNative(Object, 'create'); - -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; -} - -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; -} - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** Used for built-in method references. */ -var objectProto$3 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$2 = objectProto$3.hasOwnProperty; - -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty$2.call(data, key) ? data[key] : undefined; -} - -/** Used for built-in method references. */ -var objectProto$4 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$3 = objectProto$4.hasOwnProperty; - -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? (data[key] !== undefined) : hasOwnProperty$3.call(data, key); -} - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; - -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED$1 : value; - return this; -} - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map$1 || ListCache), - 'string': new Hash - }; -} - -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} - -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; -} - -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} - -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} - -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; -} - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ -function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map$1 || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; -} - -/** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; -} - -// Add methods to `Stack`. -Stack.prototype.clear = stackClear; -Stack.prototype['delete'] = stackDelete; -Stack.prototype.get = stackGet; -Stack.prototype.has = stackHas; -Stack.prototype.set = stackSet; - -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); + user: function(value) { + return arguments.length < 1 ? user : (user = value == null ? null : value + "", request); + }, -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -/** Used for built-in method references. */ -var objectProto$5 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$4 = objectProto$5.hasOwnProperty; - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; -} - -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]'; - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; -} - -/** Used for built-in method references. */ -var objectProto$6 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$5 = objectProto$6.hasOwnProperty; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto$6.propertyIsEnumerable; - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$5.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -/** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ -function stubFalse() { - return false; -} - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Built-in value references. */ -var Buffer = moduleExports ? root$2.Buffer : undefined; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = nativeIsBuffer || stubFalse; - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER$1 = 9007199254740991; - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; -} - -/** `Object#toString` result references. */ -var argsTag$1 = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag$1 = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag] = -typedArrayTags[setTag] = typedArrayTags[stringTag] = -typedArrayTags[weakMapTag] = false; - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; -} - -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} + password: function(value) { + return arguments.length < 1 ? password : (password = value == null ? null : value + "", request); + }, -/** Detect free variable `exports`. */ -var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + // Specify how to convert the response content to a specific type; + // changes the callback value on "load" events. + response: function(value) { + response = value; + return request; + }, -/** Detect free variable `module`. */ -var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + // Alias for send("GET", …). + get: function(data, callback) { + return request.send("GET", data, callback); + }, -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + // Alias for send("POST", …). + post: function(data, callback) { + return request.send("POST", data, callback); + }, -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports$1 && freeGlobal.process; + // If callback is non-null, it will be used for error and load events. + send: function(method, data, callback) { + xhr.open(method, url, true, user, password); + if (mimeType != null && !headers.has("accept")) headers.set("accept", mimeType + ",*/*"); + if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); }); + if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType); + if (responseType != null) xhr.responseType = responseType; + if (timeout > 0) xhr.timeout = timeout; + if (callback == null && typeof data === "function") callback = data, data = null; + if (callback != null && callback.length === 1) callback = fixCallback(callback); + if (callback != null) request.on("error", callback).on("load", function(xhr) { callback(null, xhr); }); + event.call("beforesend", request, xhr); + xhr.send(data == null ? null : data); + return request; + }, -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); + abort: function() { + xhr.abort(); + return request; + }, -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - -/** Used for built-in method references. */ -var objectProto$7 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$6 = objectProto$7.hasOwnProperty; - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty$6.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} - -/** Used for built-in method references. */ -var objectProto$8 = Object.prototype; - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$8; - - return value === proto; -} - -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object); - -/** Used for built-in method references. */ -var objectProto$9 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$7 = objectProto$9.hasOwnProperty; - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty$7.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys$1(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); -} - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && copyObject(source, keys$1(source), object); -} - -/** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; -} - -/** Used for built-in method references. */ -var objectProto$10 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$8 = objectProto$10.hasOwnProperty; - -/** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty$8.call(object, key)))) { - result.push(key); - } - } - return result; -} - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn$1(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); -} - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && copyObject(source, keysIn$1(source), object); -} - -/** Detect free variable `exports`. */ -var freeExports$2 = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule$2 = freeExports$2 && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2; - -/** Built-in value references. */ -var Buffer$1 = moduleExports$2 ? root$2.Buffer : undefined, - allocUnsafe = Buffer$1 ? Buffer$1.allocUnsafe : undefined; - -/** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ -function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - - buffer.copy(result); - return result; -} - -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -/** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ -function stubArray() { - return []; -} - -/** Used for built-in method references. */ -var objectProto$11 = Object.prototype; - -/** Built-in value references. */ -var propertyIsEnumerable$1 = objectProto$11.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? stubArray : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return arrayFilter(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable$1.call(object, symbol); - }); -}; - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); -} - -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -/** Built-in value references. */ -var getPrototype = overArg(Object.getPrototypeOf, Object); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols$1 = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols$1 ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; -}; - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object); -} - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); -} - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return baseGetAllKeys(object, keys$1, getSymbols); -} - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn$1, getSymbolsIn); -} - -/* Built-in method references that are verified to be native. */ -var DataView = getNative(root$2, 'DataView'); - -/* Built-in method references that are verified to be native. */ -var Promise = getNative(root$2, 'Promise'); - -/* Built-in method references that are verified to be native. */ -var Set$1 = getNative(root$2, 'Set'); - -/* Built-in method references that are verified to be native. */ -var WeakMap = getNative(root$2, 'WeakMap'); - -/** `Object#toString` result references. */ -var mapTag$1 = '[object Map]', - objectTag$1 = '[object Object]', - promiseTag = '[object Promise]', - setTag$1 = '[object Set]', - weakMapTag$1 = '[object WeakMap]'; - -var dataViewTag$1 = '[object DataView]'; - -/** Used to detect maps, sets, and weakmaps. */ -var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map$1), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set$1), - weakMapCtorString = toSource(WeakMap); - -/** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -var getTag = baseGetTag; - -// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. -if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag$1) || - (Map$1 && getTag(new Map$1) != mapTag$1) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set$1 && getTag(new Set$1) != setTag$1) || - (WeakMap && getTag(new WeakMap) != weakMapTag$1)) { - getTag = function(value) { - var result = baseGetTag(value), - Ctor = result == objectTag$1 ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag$1; - case mapCtorString: return mapTag$1; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag$1; - case weakMapCtorString: return weakMapTag$1; + on: function() { + var value = event.on.apply(event, arguments); + return value === event ? request : value; } + }; + + if (callback != null) { + if (typeof callback !== "function") throw new Error("invalid callback: " + callback); + return request.get(callback); } - return result; - }; -} - -var getTag$1 = getTag; - -/** Used for built-in method references. */ -var objectProto$12 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$9 = objectProto$12.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty$9.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/** Built-in value references. */ -var Uint8Array = root$2.Uint8Array; - -/** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ -function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; -} - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -/** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ -function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); -} - -/** `Object#toString` result references. */ -var boolTag$1 = '[object Boolean]', - dateTag$1 = '[object Date]', - mapTag$2 = '[object Map]', - numberTag$1 = '[object Number]', - regexpTag$1 = '[object RegExp]', - setTag$2 = '[object Set]', - stringTag$1 = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag$1 = '[object ArrayBuffer]', - dataViewTag$2 = '[object DataView]', - float32Tag$1 = '[object Float32Array]', - float64Tag$1 = '[object Float64Array]', - int8Tag$1 = '[object Int8Array]', - int16Tag$1 = '[object Int16Array]', - int32Tag$1 = '[object Int32Array]', - uint8Tag$1 = '[object Uint8Array]', - uint8ClampedTag$1 = '[object Uint8ClampedArray]', - uint16Tag$1 = '[object Uint16Array]', - uint32Tag$1 = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag$1: - return cloneArrayBuffer(object); - - case boolTag$1: - case dateTag$1: - return new Ctor(+object); - - case dataViewTag$2: - return cloneDataView(object, isDeep); - - case float32Tag$1: case float64Tag$1: - case int8Tag$1: case int16Tag$1: case int32Tag$1: - case uint8Tag$1: case uint8ClampedTag$1: case uint16Tag$1: case uint32Tag$1: - return cloneTypedArray(object, isDeep); - - case mapTag$2: - return new Ctor; - - case numberTag$1: - case stringTag$1: - return new Ctor(object); - - case regexpTag$1: - return cloneRegExp(object); - - case setTag$2: - return new Ctor; - - case symbolTag: - return cloneSymbol(object); - } -} - -/** Built-in value references. */ -var objectCreate = Object.create; - -/** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ -var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; -}()); -/** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; -} - -/** `Object#toString` result references. */ -var mapTag$3 = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return isObjectLike(value) && getTag$1(value) == mapTag$3; -} - -/* Node.js helper references. */ -var nodeIsMap = nodeUtil && nodeUtil.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - -/** `Object#toString` result references. */ -var setTag$3 = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return isObjectLike(value) && getTag$1(value) == setTag$3; -} - -/* Node.js helper references. */ -var nodeIsSet = nodeUtil && nodeUtil.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var argsTag$2 = '[object Arguments]', - arrayTag$1 = '[object Array]', - boolTag$2 = '[object Boolean]', - dateTag$2 = '[object Date]', - errorTag$1 = '[object Error]', - funcTag$2 = '[object Function]', - genTag$1 = '[object GeneratorFunction]', - mapTag$4 = '[object Map]', - numberTag$2 = '[object Number]', - objectTag$2 = '[object Object]', - regexpTag$2 = '[object RegExp]', - setTag$4 = '[object Set]', - stringTag$2 = '[object String]', - symbolTag$1 = '[object Symbol]', - weakMapTag$2 = '[object WeakMap]'; - -var arrayBufferTag$2 = '[object ArrayBuffer]', - dataViewTag$3 = '[object DataView]', - float32Tag$2 = '[object Float32Array]', - float64Tag$2 = '[object Float64Array]', - int8Tag$2 = '[object Int8Array]', - int16Tag$2 = '[object Int16Array]', - int32Tag$2 = '[object Int32Array]', - uint8Tag$2 = '[object Uint8Array]', - uint8ClampedTag$2 = '[object Uint8ClampedArray]', - uint16Tag$2 = '[object Uint16Array]', - uint32Tag$2 = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag$2] = cloneableTags[arrayTag$1] = -cloneableTags[arrayBufferTag$2] = cloneableTags[dataViewTag$3] = -cloneableTags[boolTag$2] = cloneableTags[dateTag$2] = -cloneableTags[float32Tag$2] = cloneableTags[float64Tag$2] = -cloneableTags[int8Tag$2] = cloneableTags[int16Tag$2] = -cloneableTags[int32Tag$2] = cloneableTags[mapTag$4] = -cloneableTags[numberTag$2] = cloneableTags[objectTag$2] = -cloneableTags[regexpTag$2] = cloneableTags[setTag$4] = -cloneableTags[stringTag$2] = cloneableTags[symbolTag$1] = -cloneableTags[uint8Tag$2] = cloneableTags[uint8ClampedTag$2] = -cloneableTags[uint16Tag$2] = cloneableTags[uint32Tag$2] = true; -cloneableTags[errorTag$1] = cloneableTags[funcTag$2] = -cloneableTags[weakMapTag$2] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; + return request; } - if (!isObject(value)) { - return value; + + function fixCallback(callback) { + return function(error, xhr) { + callback(error == null ? xhr : null); + }; } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag$1(value), - isFunc = tag == funcTag$2 || tag == genTag$1; - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag$2 || tag == argsTag$2 || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat - ? copySymbolsIn(value, baseAssignIn(result, value)) - : copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, isDeep); - } + function hasResponse(xhr) { + var type = xhr.responseType; + return type && type !== "text" + ? xhr.response // null on error + : xhr.responseText; // "" on error } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; + + function type$1(defaultMimeType, response) { + return function(url, callback) { + var r = request(url).mimeType(defaultMimeType).response(response); + if (callback != null) { + if (typeof callback !== "function") throw new Error("invalid callback: " + callback); + return r.get(callback); + } + return r; + }; } - stack.set(value, result); - if (isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); + var html = type$1("text/html", function(xhr) { + return document.createRange().createContextualFragment(xhr.responseText); + }); - return result; - } + var d3_json = type$1("application/json", function(xhr) { + return JSON.parse(xhr.responseText); + }); - if (isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); + var d3_text = type$1("text/plain", function(xhr) { + return xhr.responseText; + }); - return result; + var d3_xml = type$1("application/xml", function(xhr) { + var xml = xhr.responseXML; + if (!xml) throw new Error("parse error"); + return xml; + }); + + function dsv$1(defaultMimeType, parse) { + return function(url, row, callback) { + if (arguments.length < 3) callback = row, row = null; + var r = request(url).mimeType(defaultMimeType); + r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; }; + r.row(row); + return callback ? r.get(callback) : r; + }; } - var keysFunc = isFull - ? (isFlat ? getAllKeysIn : getAllKeys) - : (isFlat ? keysIn : keys$1); + function responseOf(parse, row) { + return function(request$$1) { + return parse(request$$1.responseText, row); + }; + } - var props = isArr ? undefined : keysFunc(value); - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -/** Used to compose bitmasks for cloning. */ -var CLONE_SYMBOLS_FLAG$1 = 4; - -/** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ -function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG$1); -} - -/** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; -} - -/** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; + var csv$1 = dsv$1("text/csv", csvParse); - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} - -/** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseFor = createBaseFor(); - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys$1); -} - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); + var tsv$1 = dsv$1("text/tab-separated-values", tsvParse); - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; + var array$2 = Array.prototype; + + var map$2 = array$2.map; + var slice$5 = array$2.slice; + + var implicit = {name: "implicit"}; + + function ordinal(range) { + var index = map$1(), + domain = [], + unknown = implicit; + + range = range == null ? [] : slice$5.call(range); + + function scale(d) { + var key = d + "", i = index.get(key); + if (!i) { + if (unknown !== implicit) return unknown; + index.set(key, i = domain.push(d)); } + return range[(i - 1) % range.length]; } - return collection; - }; -} - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = createBaseEach(baseForOwn); - -/** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; -} - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED$2 = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED$2); - return this; -} - -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; -SetCache.prototype.has = setCacheHas; - -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked && stack.get(other)) { - return stacked == other; + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = [], index = map$1(); + var i = -1, n = _.length, d, key; + while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d)); + return scale; + }; + + scale.range = function(_) { + return arguments.length ? (range = slice$5.call(_), scale) : range.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return ordinal() + .domain(domain) + .range(range) + .unknown(unknown); + }; + + return scale; } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; - stack.set(array, other); - stack.set(other, array); + function band() { + var scale = ordinal().unknown(undefined), + domain = scale.domain, + ordinalRange = scale.range, + range$$1 = [0, 1], + step, + bandwidth, + round = false, + paddingInner = 0, + paddingOuter = 0, + align = 0.5; - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; + delete scale.unknown; - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; + function rescale() { + var n = domain().length, + reverse = range$$1[1] < range$$1[0], + start = range$$1[reverse - 0], + stop = range$$1[1 - reverse]; + step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2); + if (round) step = Math.floor(step); + start += (stop - start - step * (n - paddingInner)) * align; + bandwidth = step * (1 - paddingInner); + if (round) start = Math.round(start), bandwidth = Math.round(bandwidth); + var values = range(n).map(function(i) { return start + step * i; }); + return ordinalRange(reverse ? values.reverse() : values); } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG$1 = 1, - COMPARE_UNORDERED_FLAG$1 = 2; - -/** `Object#toString` result references. */ -var boolTag$3 = '[object Boolean]', - dateTag$3 = '[object Date]', - errorTag$2 = '[object Error]', - mapTag$5 = '[object Map]', - numberTag$3 = '[object Number]', - regexpTag$3 = '[object RegExp]', - setTag$5 = '[object Set]', - stringTag$3 = '[object String]', - symbolTag$2 = '[object Symbol]'; - -var arrayBufferTag$3 = '[object ArrayBuffer]', - dataViewTag$4 = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto$1 = Symbol ? Symbol.prototype : undefined, - symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag$4: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - case arrayBufferTag$3: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; + scale.domain = function(_) { + return arguments.length ? (domain(_), rescale()) : domain(); + }; - case boolTag$3: - case dateTag$3: - case numberTag$3: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); + scale.range = function(_) { + return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice(); + }; - case errorTag$2: - return object.name == other.name && object.message == other.message; + scale.rangeRound = function(_) { + return range$$1 = [+_[0], +_[1]], round = true, rescale(); + }; - case regexpTag$3: - case stringTag$3: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); + scale.bandwidth = function() { + return bandwidth; + }; - case mapTag$5: - var convert = mapToArray; + scale.step = function() { + return step; + }; - case setTag$5: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG$1; - convert || (convert = setToArray); + scale.round = function(_) { + return arguments.length ? (round = !!_, rescale()) : round; + }; - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG$1; + scale.padding = function(_) { + return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner; + }; - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; + scale.paddingInner = function(_) { + return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner; + }; - case symbolTag$2: - if (symbolValueOf$1) { - return symbolValueOf$1.call(object) == symbolValueOf$1.call(other); - } - } - return false; -} - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG$2 = 1; - -/** Used for built-in method references. */ -var objectProto$13 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$10 = objectProto$13.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG$2, - objProps = getAllKeys(object), - objLength = objProps.length, - othProps = getAllKeys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; + scale.paddingOuter = function(_) { + return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter; + }; + + scale.align = function(_) { + return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align; + }; + + scale.copy = function() { + return band() + .domain(domain()) + .range(range$$1) + .round(round) + .paddingInner(paddingInner) + .paddingOuter(paddingOuter) + .align(align); + }; + + return rescale(); } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty$10.call(other, key))) { - return false; - } + + function pointish(scale) { + var copy = scale.copy; + + scale.padding = scale.paddingOuter; + delete scale.paddingInner; + delete scale.paddingOuter; + + scale.copy = function() { + return pointish(copy()); + }; + + return scale; } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked && stack.get(other)) { - return stacked == other; + + function point$1() { + return pointish(band().paddingInner(1)); } - var result = true; - stack.set(object, other); - stack.set(other, object); - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; + function constant$9(x) { + return function() { + return x; + }; + } - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG$3 = 1; - -/** `Object#toString` result references. */ -var argsTag$3 = '[object Arguments]', - arrayTag$2 = '[object Array]', - objectTag$3 = '[object Object]'; - -/** Used for built-in method references. */ -var objectProto$14 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$11 = objectProto$14.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = objIsArr ? arrayTag$2 : getTag$1(object), - othTag = othIsArr ? arrayTag$2 : getTag$1(other); - - objTag = objTag == argsTag$3 ? objectTag$3 : objTag; - othTag = othTag == argsTag$3 ? objectTag$3 : othTag; - - var objIsObj = objTag == objectTag$3, - othIsObj = othTag == objectTag$3, - isSameTag = objTag == othTag; - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; + function number$2(x) { + return +x; } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + + var unit = [0, 1]; + + function deinterpolateLinear(a, b) { + return (b -= (a = +a)) + ? function(x) { return (x - a) / b; } + : constant$9(b); } - if (!(bitmask & COMPARE_PARTIAL_FLAG$3)) { - var objIsWrapped = objIsObj && hasOwnProperty$11.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty$11.call(other, '__wrapped__'); - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; + function deinterpolateClamp(deinterpolate) { + return function(a, b) { + var d = deinterpolate(a = +a, b = +b); + return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); }; + }; + } - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } + function reinterpolateClamp(reinterpolate) { + return function(a, b) { + var r = reinterpolate(a = +a, b = +b); + return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); }; + }; } - if (!isSameTag) { - return false; + + function bimap(domain, range$$1, deinterpolate, reinterpolate) { + var d0 = domain[0], d1 = domain[1], r0 = range$$1[0], r1 = range$$1[1]; + if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0); + else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1); + return function(x) { return r0(d0(x)); }; } - stack || (stack = new Stack); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; + + function polymap(domain, range$$1, deinterpolate, reinterpolate) { + var j = Math.min(domain.length, range$$1.length) - 1, + d = new Array(j), + r = new Array(j), + i = -1; + + // Reverse descending domains. + if (domain[j] < domain[0]) { + domain = domain.slice().reverse(); + range$$1 = range$$1.slice().reverse(); + } + + while (++i < j) { + d[i] = deinterpolate(domain[i], domain[i + 1]); + r[i] = reinterpolate(range$$1[i], range$$1[i + 1]); + } + + return function(x) { + var i = bisectRight(domain, x, 1, j) - 1; + return r[i](d[i](x)); + }; } - if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG$4 = 1, - COMPARE_UNORDERED_FLAG$2 = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; + + function copy(source, target) { + return target + .domain(source.domain()) + .range(source.range()) + .interpolate(source.interpolate()) + .clamp(source.clamp()); + } + + // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. + // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b]. + function continuous(deinterpolate, reinterpolate) { + var domain = unit, + range$$1 = unit, + interpolate$$1 = interpolate, + clamp = false, + piecewise, + output, + input; + + function rescale() { + piecewise = Math.min(domain.length, range$$1.length) > 2 ? polymap : bimap; + output = input = null; + return scale; } + + function scale(x) { + return (output || (output = piecewise(domain, range$$1, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x); + } + + scale.invert = function(y) { + return (input || (input = piecewise(range$$1, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y); + }; + + scale.domain = function(_) { + return arguments.length ? (domain = map$2.call(_, number$2), rescale()) : domain.slice(); + }; + + scale.range = function(_) { + return arguments.length ? (range$$1 = slice$5.call(_), rescale()) : range$$1.slice(); + }; + + scale.rangeRound = function(_) { + return range$$1 = slice$5.call(_), interpolate$$1 = interpolateRound, rescale(); + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = !!_, rescale()) : clamp; + }; + + scale.interpolate = function(_) { + return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1; + }; + + return rescale(); } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; + function tickFormat(domain, count, specifier) { + var start = domain[0], + stop = domain[domain.length - 1], + step = tickStep(start, stop, count == null ? 10 : count), + precision; + specifier = formatSpecifier(specifier == null ? ",f" : specifier); + switch (specifier.type) { + case "s": { + var value = Math.max(Math.abs(start), Math.abs(stop)); + if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision; + return formatPrefix(specifier, value); } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); + case "": + case "e": + case "g": + case "p": + case "r": { + if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e"); + break; } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$4 | COMPARE_UNORDERED_FLAG$2, customizer, stack) - : result - )) { - return false; + case "f": + case "%": { + if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2; + break; } } + return format(specifier); } - return true; -} - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !isObject(value); -} - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = keys$1(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; -} - -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; -} - -/** `Object#toString` result references. */ -var symbolTag$3 = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag$3); -} - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `clear`, `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ -function memoize(func, resolver) { - if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; -} - -// Expose `MapCache`. -memoize.Cache = MapCache; - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - var cache = result.cache; - return result; -} - -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto$2 = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto$2 ? symbolProto$2.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; + function linearish(scale) { + var domain = scale.domain; + + scale.ticks = function(count) { + var d = domain(); + return ticks(d[0], d[d.length - 1], count == null ? 10 : count); + }; + + scale.tickFormat = function(count, specifier) { + return tickFormat(domain(), count, specifier); + }; + + scale.nice = function(count) { + if (count == null) count = 10; + + var d = domain(), + i0 = 0, + i1 = d.length - 1, + start = d[i0], + stop = d[i1], + step; + + if (stop < start) { + step = start, start = stop, stop = step; + step = i0, i0 = i1, i1 = step; + } + + step = tickIncrement(start, stop, count); + + if (step > 0) { + start = Math.floor(start / step) * step; + stop = Math.ceil(stop / step) * step; + step = tickIncrement(start, stop, count); + } else if (step < 0) { + start = Math.ceil(start * step) / step; + stop = Math.floor(stop * step) / step; + step = tickIncrement(start, stop, count); + } + + if (step > 0) { + d[i0] = Math.floor(start / step) * step; + d[i1] = Math.ceil(stop / step) * step; + domain(d); + } else if (step < 0) { + d[i0] = Math.ceil(start * step) / step; + d[i1] = Math.floor(stop * step) / step; + domain(d); + } + + return scale; + }; + + return scale; } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString(value) { - return value == null ? '' : baseToString(value); -} - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if (isArray(value)) { - return value; + + function linear$2() { + var scale = continuous(deinterpolateLinear, interpolateNumber); + + scale.copy = function() { + return copy(scale, linear$2()); + }; + + return linearish(scale); } - return isKey(value, object) ? [value] : stringToPath(toString(value)); -} - -/** Used as references for various `Number` constants. */ -var INFINITY$1 = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; + + function identity$5() { + var domain = [0, 1]; + + function scale(x) { + return +x; + } + + scale.invert = scale; + + scale.domain = scale.range = function(_) { + return arguments.length ? (domain = map$2.call(_, number$2), scale) : domain.slice(); + }; + + scale.copy = function() { + return identity$5().domain(domain); + }; + + return linearish(scale); } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; -} - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = castPath(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get$2(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; -} - -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = castPath(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; + + function nice(domain, interval) { + domain = domain.slice(); + + var i0 = 0, + i1 = domain.length - 1, + x0 = domain[i0], + x1 = domain[i1], + t; + + if (x1 < x0) { + t = i0, i0 = i1, i1 = t; + t = x0, x0 = x1, x1 = t; + } + + domain[i0] = interval.floor(x0); + domain[i1] = interval.ceil(x1); + return domain; } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); -} - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); -} - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG$5 = 1, - COMPARE_UNORDERED_FLAG$3 = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get$2(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$5 | COMPARE_UNORDERED_FLAG$3); - }; -} - -/** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity$8(value) { - return value; -} - -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; -} - -/** - * Creates a function that returns the value at `path` of a given object. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - * @example - * - * var objects = [ - * { 'a': { 'b': 2 } }, - * { 'a': { 'b': 1 } } - * ]; - * - * _.map(objects, _.property('a.b')); - * // => [2, 1] - * - * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); - * // => [1, 2] - */ -function property(path) { - return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); -} - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; + + function deinterpolate(a, b) { + return (b = Math.log(b / a)) + ? function(x) { return Math.log(x / a) / b; } + : constant$9(b); } - if (value == null) { - return identity$8; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); -} - -/** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ -function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, baseIteratee(iteratee, 2), accumulator); - }; -} - -/** Used for built-in method references. */ -var objectProto$15 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$12 = objectProto$15.hasOwnProperty; - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ -var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty$12.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } -}); - -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; -} - -/** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ -function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; -} - -/** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ -function parent(object, path) { - return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); -} - -/** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The property path to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ -function baseUnset(object, path) { - path = castPath(path, object); - object = parent(object, path); - return object == null || delete object[toKey(last(path))]; -} - -/** `Object#toString` result references. */ -var objectTag$4 = '[object Object]'; - -/** Used for built-in method references. */ -var funcProto$2 = Function.prototype, - objectProto$16 = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString$2 = funcProto$2.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty$13 = objectProto$16.hasOwnProperty; - -/** Used to infer the `Object` constructor. */ -var objectCtorString = funcToString$2.call(Object); - -/** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ -function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag$4) { - return false; + + function reinterpolate(a, b) { + return a < 0 + ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); } + : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); }; } - var proto = getPrototype(value); - if (proto === null) { - return true; + + function pow10(x) { + return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x; + } + + function powp(base) { + return base === 10 ? pow10 + : base === Math.E ? Math.exp + : function(x) { return Math.pow(base, x); }; + } + + function logp(base) { + return base === Math.E ? Math.log + : base === 10 && Math.log10 + || base === 2 && Math.log2 + || (base = Math.log(base), function(x) { return Math.log(x) / base; }); + } + + function reflect(f) { + return function(x) { + return -f(-x); + }; } - var Ctor = hasOwnProperty$13.call(proto, 'constructor') && proto.constructor; - return typeof Ctor == 'function' && Ctor instanceof Ctor && - funcToString$2.call(Ctor) == objectCtorString; -} - -/** - * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain - * objects. - * - * @private - * @param {*} value The value to inspect. - * @param {string} key The key of the property to inspect. - * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. - */ -function customOmitClone(value) { - return isPlainObject(value) ? undefined : value; -} - -/** Built-in value references. */ -var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); + + function log$1() { + var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]), + domain = scale.domain, + base = 10, + logs = logp(10), + pows = powp(10); + + function rescale() { + logs = logp(base), pows = powp(base); + if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows); + return scale; + } + + scale.base = function(_) { + return arguments.length ? (base = +_, rescale()) : base; + }; + + scale.domain = function(_) { + return arguments.length ? (domain(_), rescale()) : domain(); + }; + + scale.ticks = function(count) { + var d = domain(), + u = d[0], + v = d[d.length - 1], + r; + + if (r = v < u) i = u, u = v, v = i; + + var i = logs(u), + j = logs(v), + p, + k, + t, + n = count == null ? 10 : +count, + z = []; + + if (!(base % 1) && j - i < n) { + i = Math.round(i) - 1, j = Math.round(j) + 1; + if (u > 0) for (; i < j; ++i) { + for (k = 1, p = pows(i); k < base; ++k) { + t = p * k; + if (t < u) continue; + if (t > v) break; + z.push(t); + } + } else for (; i < j; ++i) { + for (k = base - 1, p = pows(i); k >= 1; --k) { + t = p * k; + if (t < u) continue; + if (t > v) break; + z.push(t); + } + } } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, 1) : []; -} - -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ -function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); + z = ticks(i, j, Math.min(j - i, n)).map(pows); + } - while (++index < length) { - array[index] = args[start + index]; + return r ? z.reverse() : z; + }; + + scale.tickFormat = function(count, specifier) { + if (specifier == null) specifier = base === 10 ? ".0e" : ","; + if (typeof specifier !== "function") specifier = format(specifier); + if (count === Infinity) return specifier; + if (count == null) count = 10; + var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? + return function(d) { + var i = d / pows(Math.round(logs(d))); + if (i * base < base - 0.5) i *= base; + return i <= k ? specifier(d) : ""; + }; + }; + + scale.nice = function() { + return domain(nice(domain(), { + floor: function(x) { return pows(Math.floor(logs(x))); }, + ceil: function(x) { return pows(Math.ceil(logs(x))); } + })); + }; + + scale.copy = function() { + return copy(scale, log$1().base(base)); + }; + + return scale; + } + + function raise$1(x, exponent) { + return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); + } + + function pow$1() { + var exponent = 1, + scale = continuous(deinterpolate, reinterpolate), + domain = scale.domain; + + function deinterpolate(a, b) { + return (b = raise$1(b, exponent) - (a = raise$1(a, exponent))) + ? function(x) { return (raise$1(x, exponent) - a) / b; } + : constant$9(b); } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; + + function reinterpolate(a, b) { + b = raise$1(b, exponent) - (a = raise$1(a, exponent)); + return function(t) { return raise$1(a + b * t, 1 / exponent); }; } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; -} - -/** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ -function constant$13(value) { - return function() { - return value; - }; -} - -/** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var baseSetToString = !defineProperty ? identity$8 : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant$13(string), - 'writable': true - }); -}; - -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 800, - HOT_SPAN = 16; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeNow = Date.now; - -/** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ -function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; + + scale.exponent = function(_) { + return arguments.length ? (exponent = +_, domain(domain())) : exponent; + }; + + scale.copy = function() { + return copy(scale, pow$1().exponent(exponent)); + }; + + return linearish(scale); + } + + function sqrt$1() { + return pow$1().exponent(0.5); + } + + function quantile$$1() { + var domain = [], + range$$1 = [], + thresholds = []; + + function rescale() { + var i = 0, n = Math.max(1, range$$1.length); + thresholds = new Array(n - 1); + while (++i < n) thresholds[i - 1] = threshold(domain, i / n); + return scale; } - return func.apply(undefined, arguments); - }; -} - -/** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var setToString = shortOut(baseSetToString); - -/** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); -} - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG$1 = 1, - CLONE_FLAT_FLAG$1 = 2, - CLONE_SYMBOLS_FLAG$2 = 4; - -/** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable property paths of `object` that are not omitted. - * - * **Note:** This method is considerably slower than `_.pick`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to omit. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omit(object, ['a', 'c']); - * // => { 'b': '2' } - */ -var omit = flatRest(function(object, paths) { - var result = {}; - if (object == null) { - return result; + + function scale(x) { + if (!isNaN(x = +x)) return range$$1[bisectRight(thresholds, x)]; + } + + scale.invertExtent = function(y) { + var i = range$$1.indexOf(y); + return i < 0 ? [NaN, NaN] : [ + i > 0 ? thresholds[i - 1] : domain[0], + i < thresholds.length ? thresholds[i] : domain[domain.length - 1] + ]; + }; + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = []; + for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d); + domain.sort(ascending); + return rescale(); + }; + + scale.range = function(_) { + return arguments.length ? (range$$1 = slice$5.call(_), rescale()) : range$$1.slice(); + }; + + scale.quantiles = function() { + return thresholds.slice(); + }; + + scale.copy = function() { + return quantile$$1() + .domain(domain) + .range(range$$1); + }; + + return scale; } - var isDeep = false; - paths = arrayMap(paths, function(path) { - path = castPath(path, object); - isDeep || (isDeep = path.length > 1); - return path; - }); - copyObject(object, getAllKeysIn(object), result); - if (isDeep) { - result = baseClone(result, CLONE_DEEP_FLAG$1 | CLONE_FLAT_FLAG$1 | CLONE_SYMBOLS_FLAG$2, customOmitClone); - } - var length = paths.length; - while (length--) { - baseUnset(result, paths[length]); - } - return result; -}); - -/** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ -function compact(array) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; -} - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - return setToString(overRest(func, start, identity$8), func + ''); -} - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; + + function quantize() { + var x0 = 0, + x1 = 1, + n = 1, + domain = [0.5], + range$$1 = [0, 1]; + + function scale(x) { + if (x <= x) return range$$1[bisectRight(domain, x, 0, n)]; + } + + function rescale() { + var i = -1; + domain = new Array(n); + while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); + return scale; + } + + scale.domain = function(_) { + return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1]; + }; + + scale.range = function(_) { + return arguments.length ? (n = (range$$1 = slice$5.call(_)).length - 1, rescale()) : range$$1.slice(); + }; + + scale.invertExtent = function(y) { + var i = range$$1.indexOf(y); + return i < 0 ? [NaN, NaN] + : i < 1 ? [x0, domain[0]] + : i >= n ? [domain[n - 1], x1] + : [domain[i - 1], domain[i]]; + }; + + scale.copy = function() { + return quantize() + .domain([x0, x1]) + .range(range$$1); + }; + + return linearish(scale); } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; -} - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; + function threshold$1() { + var domain = [0.5], + range$$1 = [0, 1], + n = 1; - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; + function scale(x) { + if (x <= x) return range$$1[bisectRight(domain, x, 0, n)]; } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } + + scale.domain = function(_) { + return arguments.length ? (domain = slice$5.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice(); + }; + + scale.range = function(_) { + return arguments.length ? (range$$1 = slice$5.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice(); + }; + + scale.invertExtent = function(y) { + var i = range$$1.indexOf(y); + return [domain[i - 1], domain[i]]; + }; + + scale.copy = function() { + return threshold$1() + .domain(domain) + .range(range$$1); + }; + + return scale; + } + + var t0$1 = new Date, + t1$1 = new Date; + + function newInterval(floori, offseti, count, field) { + + function interval(date) { + return floori(date = new Date(+date)), date; } - return object; - }); -} - -/** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ -var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn$1(source), object); -}); - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); + + interval.floor = interval; + + interval.ceil = function(date) { + return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; + }; + + interval.round = function(date) { + var d0 = interval(date), + d1 = interval.ceil(date); + return date - d0 < d1 - date ? d0 : d1; + }; + + interval.offset = function(date, step) { + return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; + }; + + interval.range = function(start, stop, step) { + var range = [], previous; + start = interval.ceil(start); + step = step == null ? 1 : Math.floor(step); + if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date + do range.push(previous = new Date(+start)), offseti(start, step), floori(start); + while (previous < start && start < stop); + return range; + }; + + interval.filter = function(test) { + return newInterval(function(date) { + if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); + }, function(date, step) { + if (date >= date) { + if (step < 0) while (++step <= 0) { + while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty + } else while (--step >= 0) { + while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty + } + } + }); + }; + + if (count) { + interval.count = function(start, end) { + t0$1.setTime(+start), t1$1.setTime(+end); + floori(t0$1), floori(t1$1); + return Math.floor(count(t0$1, t1$1)); + }; + + interval.every = function(step) { + step = Math.floor(step); + return !isFinite(step) || !(step > 0) ? null + : !(step > 1) ? interval + : interval.filter(field + ? function(d) { return field(d) % step === 0; } + : function(d) { return interval.count(0, d) % step === 0; }); + }; } + + return interval; + } + + var millisecond = newInterval(function() { + // noop + }, function(date, step) { + date.setTime(+date + step); + }, function(start, end) { + return end - start; }); - return result; -} - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ -function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, baseIteratee(predicate, 3)); -} - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = baseIteratee(predicate, 3); - collection = keys$1(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + + // An optimized implementation for this simple case. + millisecond.every = function(k) { + k = Math.floor(k); + if (!isFinite(k) || !(k > 0)) return null; + if (!(k > 1)) return millisecond; + return newInterval(function(date) { + date.setTime(Math.floor(date / k) * k); + }, function(date, step) { + date.setTime(+date + step * k); + }, function(start, end) { + return (end - start) / k; + }); }; -} - -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to match leading and trailing whitespace. */ -var reTrim = /^\s+|\s+$/g; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = value.replace(reTrim, ''); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/** Used as references for various `Number` constants. */ -var INFINITY$2 = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY$2 || value === -INFINITY$2) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ -function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax$1 = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax$1(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index); -} - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find$1 = createFind(findIndex); - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); + var milliseconds = millisecond.range; + + var durationSecond = 1e3; + var durationMinute = 6e4; + var durationHour = 36e5; + var durationDay = 864e5; + var durationWeek = 6048e5; + + var second = newInterval(function(date) { + date.setTime(Math.floor(date / durationSecond) * durationSecond); + }, function(date, step) { + date.setTime(+date + step * durationSecond); + }, function(start, end) { + return (end - start) / durationSecond; + }, function(date) { + return date.getUTCSeconds(); }); - return result; -} - -/** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ -function map$3(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, baseIteratee(iteratee, 3)); -} - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; + var seconds = second.range; + + var minute = newInterval(function(date) { + date.setTime(Math.floor(date / durationMinute) * durationMinute); + }, function(date, step) { + date.setTime(+date + step * durationMinute); + }, function(start, end) { + return (end - start) / durationMinute; + }, function(date) { + return date.getMinutes(); }); -} - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values$1(object) { - return object == null ? [] : baseValues(object, keys$1(object)); -} - -/** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ -function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; + var minutes = minute.range; + + var hour = newInterval(function(date) { + var offset = date.getTimezoneOffset() * durationMinute % durationHour; + if (offset < 0) offset += durationHour; + date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset); + }, function(date, step) { + date.setTime(+date + step * durationHour); + }, function(start, end) { + return (end - start) / durationHour; + }, function(date) { + return date.getHours(); }); -} - -/** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ -function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = [value, value]; + var hours = hour.range; + + var day = newInterval(function(date) { + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setDate(date.getDate() + step); + }, function(start, end) { + return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay; + }, function(date) { + return date.getDate() - 1; }); - return result; -} - -/** `Object#toString` result references. */ -var mapTag$6 = '[object Map]', - setTag$6 = '[object Set]'; - -/** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ -function createToPairs(keysFunc) { - return function(object) { - var tag = getTag$1(object); - if (tag == mapTag$6) { - return mapToArray(object); - } - if (tag == setTag$6) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; -} - -/** - * Creates an array of own enumerable string keyed-value pairs for `object` - * which can be consumed by `_.fromPairs`. If `object` is a map or set, its - * entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entries - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairs(new Foo); - * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) - */ -var toPairs = createToPairs(keys$1); - -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex); -} - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && baseIndexOf(array, value, 0) > -1; -} - -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } + var days = day.range; + + function weekday(i) { + return newInterval(function(date) { + date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setDate(date.getDate() + step * 7); + }, function(start, end) { + return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek; + }); } - return false; -} - -/** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ -function noop$3() { - // No operation performed. -} - -/** Used as references for various `Number` constants. */ -var INFINITY$3 = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(Set$1 && (1 / setToArray(new Set$1([,-0]))[1]) == INFINITY$3) ? noop$3 : function(values) { - return new Set$1(values); -}; - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE$1 = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE$1) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -/** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ -function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); -} - -/** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ -var union = baseRest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); -}); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE$2 = 200; - -/** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ -function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; + + var sunday = weekday(0); + var monday = weekday(1); + var tuesday = weekday(2); + var wednesday = weekday(3); + var thursday = weekday(4); + var friday = weekday(5); + var saturday = weekday(6); + + var sundays = sunday.range; + var mondays = monday.range; + var tuesdays = tuesday.range; + var wednesdays = wednesday.range; + var thursdays = thursday.range; + var fridays = friday.range; + var saturdays = saturday.range; + + var month = newInterval(function(date) { + date.setDate(1); + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setMonth(date.getMonth() + step); + }, function(start, end) { + return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; + }, function(date) { + return date.getMonth(); + }); + var months = month.range; + + var year = newInterval(function(date) { + date.setMonth(0, 1); + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setFullYear(date.getFullYear() + step); + }, function(start, end) { + return end.getFullYear() - start.getFullYear(); + }, function(date) { + return date.getFullYear(); + }); + + // An optimized implementation for this simple case. + year.every = function(k) { + return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { + date.setFullYear(Math.floor(date.getFullYear() / k) * k); + date.setMonth(0, 1); + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setFullYear(date.getFullYear() + step * k); + }); + }; + var years = year.range; + + var utcMinute = newInterval(function(date) { + date.setUTCSeconds(0, 0); + }, function(date, step) { + date.setTime(+date + step * durationMinute); + }, function(start, end) { + return (end - start) / durationMinute; + }, function(date) { + return date.getUTCMinutes(); + }); + var utcMinutes = utcMinute.range; + + var utcHour = newInterval(function(date) { + date.setUTCMinutes(0, 0, 0); + }, function(date, step) { + date.setTime(+date + step * durationHour); + }, function(start, end) { + return (end - start) / durationHour; + }, function(date) { + return date.getUTCHours(); + }); + var utcHours = utcHour.range; + + var utcDay = newInterval(function(date) { + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCDate(date.getUTCDate() + step); + }, function(start, end) { + return (end - start) / durationDay; + }, function(date) { + return date.getUTCDate() - 1; + }); + var utcDays = utcDay.range; + + function utcWeekday(i) { + return newInterval(function(date) { + date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCDate(date.getUTCDate() + step * 7); + }, function(start, end) { + return (end - start) / durationWeek; + }); } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE$2) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee == null ? value : iteratee(value); - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; -} - -/** - * Creates an array excluding all given values using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.pull`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...*} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.xor - * @example - * - * _.without([2, 1, 2, 3], 1, 2); - * // => [3] - */ -var without = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, values) - : []; -}); - -function osmIsInterestingTag(key) { - return key !== 'attribution' && - key !== 'created_by' && - key !== 'source' && - key !== 'odbl' && - key.indexOf('tiger:') !== 0; - -} - - -var osmOneWayTags = { - 'aerialway': { - 'chair_lift': true, - 'mixed_lift': true, - 't-bar': true, - 'j-bar': true, - 'platter': true, - 'rope_tow': true, - 'magic_carpet': true, - 'yes': true - }, - 'highway': { - 'motorway': true + + var utcSunday = utcWeekday(0); + var utcMonday = utcWeekday(1); + var utcTuesday = utcWeekday(2); + var utcWednesday = utcWeekday(3); + var utcThursday = utcWeekday(4); + var utcFriday = utcWeekday(5); + var utcSaturday = utcWeekday(6); + + var utcSundays = utcSunday.range; + var utcMondays = utcMonday.range; + var utcTuesdays = utcTuesday.range; + var utcWednesdays = utcWednesday.range; + var utcThursdays = utcThursday.range; + var utcFridays = utcFriday.range; + var utcSaturdays = utcSaturday.range; + + var utcMonth = newInterval(function(date) { + date.setUTCDate(1); + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCMonth(date.getUTCMonth() + step); + }, function(start, end) { + return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; + }, function(date) { + return date.getUTCMonth(); + }); + var utcMonths = utcMonth.range; + + var utcYear = newInterval(function(date) { + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCFullYear(date.getUTCFullYear() + step); + }, function(start, end) { + return end.getUTCFullYear() - start.getUTCFullYear(); + }, function(date) { + return date.getUTCFullYear(); + }); + + // An optimized implementation for this simple case. + utcYear.every = function(k) { + return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { + date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCFullYear(date.getUTCFullYear() + step * k); + }); + }; + var utcYears = utcYear.range; + + function localDate(d) { + if (0 <= d.y && d.y < 100) { + var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); + date.setFullYear(d.y); + return date; + } + return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); + } + + function utcDate(d) { + if (0 <= d.y && d.y < 100) { + var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); + date.setUTCFullYear(d.y); + return date; + } + return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); + } + + function newYear(y) { + return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0}; + } + + function formatLocale$1(locale) { + var locale_dateTime = locale.dateTime, + locale_date = locale.date, + locale_time = locale.time, + locale_periods = locale.periods, + locale_weekdays = locale.days, + locale_shortWeekdays = locale.shortDays, + locale_months = locale.months, + locale_shortMonths = locale.shortMonths; + + var periodRe = formatRe(locale_periods), + periodLookup = formatLookup(locale_periods), + weekdayRe = formatRe(locale_weekdays), + weekdayLookup = formatLookup(locale_weekdays), + shortWeekdayRe = formatRe(locale_shortWeekdays), + shortWeekdayLookup = formatLookup(locale_shortWeekdays), + monthRe = formatRe(locale_months), + monthLookup = formatLookup(locale_months), + shortMonthRe = formatRe(locale_shortMonths), + shortMonthLookup = formatLookup(locale_shortMonths); + + var formats = { + "a": formatShortWeekday, + "A": formatWeekday, + "b": formatShortMonth, + "B": formatMonth, + "c": null, + "d": formatDayOfMonth, + "e": formatDayOfMonth, + "f": formatMicroseconds, + "H": formatHour24, + "I": formatHour12, + "j": formatDayOfYear, + "L": formatMilliseconds, + "m": formatMonthNumber, + "M": formatMinutes, + "p": formatPeriod, + "Q": formatUnixTimestamp, + "s": formatUnixTimestampSeconds, + "S": formatSeconds, + "u": formatWeekdayNumberMonday, + "U": formatWeekNumberSunday, + "V": formatWeekNumberISO, + "w": formatWeekdayNumberSunday, + "W": formatWeekNumberMonday, + "x": null, + "X": null, + "y": formatYear, + "Y": formatFullYear, + "Z": formatZone, + "%": formatLiteralPercent + }; + + var utcFormats = { + "a": formatUTCShortWeekday, + "A": formatUTCWeekday, + "b": formatUTCShortMonth, + "B": formatUTCMonth, + "c": null, + "d": formatUTCDayOfMonth, + "e": formatUTCDayOfMonth, + "f": formatUTCMicroseconds, + "H": formatUTCHour24, + "I": formatUTCHour12, + "j": formatUTCDayOfYear, + "L": formatUTCMilliseconds, + "m": formatUTCMonthNumber, + "M": formatUTCMinutes, + "p": formatUTCPeriod, + "Q": formatUnixTimestamp, + "s": formatUnixTimestampSeconds, + "S": formatUTCSeconds, + "u": formatUTCWeekdayNumberMonday, + "U": formatUTCWeekNumberSunday, + "V": formatUTCWeekNumberISO, + "w": formatUTCWeekdayNumberSunday, + "W": formatUTCWeekNumberMonday, + "x": null, + "X": null, + "y": formatUTCYear, + "Y": formatUTCFullYear, + "Z": formatUTCZone, + "%": formatLiteralPercent + }; + + var parses = { + "a": parseShortWeekday, + "A": parseWeekday, + "b": parseShortMonth, + "B": parseMonth, + "c": parseLocaleDateTime, + "d": parseDayOfMonth, + "e": parseDayOfMonth, + "f": parseMicroseconds, + "H": parseHour24, + "I": parseHour24, + "j": parseDayOfYear, + "L": parseMilliseconds, + "m": parseMonthNumber, + "M": parseMinutes, + "p": parsePeriod, + "Q": parseUnixTimestamp, + "s": parseUnixTimestampSeconds, + "S": parseSeconds, + "u": parseWeekdayNumberMonday, + "U": parseWeekNumberSunday, + "V": parseWeekNumberISO, + "w": parseWeekdayNumberSunday, + "W": parseWeekNumberMonday, + "x": parseLocaleDate, + "X": parseLocaleTime, + "y": parseYear, + "Y": parseFullYear, + "Z": parseZone, + "%": parseLiteralPercent + }; + + // These recursive directive definitions must be deferred. + formats.x = newFormat(locale_date, formats); + formats.X = newFormat(locale_time, formats); + formats.c = newFormat(locale_dateTime, formats); + utcFormats.x = newFormat(locale_date, utcFormats); + utcFormats.X = newFormat(locale_time, utcFormats); + utcFormats.c = newFormat(locale_dateTime, utcFormats); + + function newFormat(specifier, formats) { + return function(date) { + var string = [], + i = -1, + j = 0, + n = specifier.length, + c, + pad, + format; + + if (!(date instanceof Date)) date = new Date(+date); + + while (++i < n) { + if (specifier.charCodeAt(i) === 37) { + string.push(specifier.slice(j, i)); + if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); + else pad = c === "e" ? " " : "0"; + if (format = formats[c]) c = format(date, pad); + string.push(c); + j = i + 1; + } + } + + string.push(specifier.slice(j, i)); + return string.join(""); + }; + } + + function newParse(specifier, newDate) { + return function(string) { + var d = newYear(1900), + i = parseSpecifier(d, specifier, string += "", 0), + week, day$$1; + if (i != string.length) return null; + + // If a UNIX timestamp is specified, return it. + if ("Q" in d) return new Date(d.Q); + + // The am-pm flag is 0 for AM, and 1 for PM. + if ("p" in d) d.H = d.H % 12 + d.p * 12; + + // Convert day-of-week and week-of-year to day-of-year. + if ("V" in d) { + if (d.V < 1 || d.V > 53) return null; + if (!("w" in d)) d.w = 1; + if ("Z" in d) { + week = utcDate(newYear(d.y)), day$$1 = week.getUTCDay(); + week = day$$1 > 4 || day$$1 === 0 ? utcMonday.ceil(week) : utcMonday(week); + week = utcDay.offset(week, (d.V - 1) * 7); + d.y = week.getUTCFullYear(); + d.m = week.getUTCMonth(); + d.d = week.getUTCDate() + (d.w + 6) % 7; + } else { + week = newDate(newYear(d.y)), day$$1 = week.getDay(); + week = day$$1 > 4 || day$$1 === 0 ? monday.ceil(week) : monday(week); + week = day.offset(week, (d.V - 1) * 7); + d.y = week.getFullYear(); + d.m = week.getMonth(); + d.d = week.getDate() + (d.w + 6) % 7; + } + } else if ("W" in d || "U" in d) { + if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; + day$$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay(); + d.m = 0; + d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7; + } + + // If a time zone is specified, all fields are interpreted as UTC and then + // offset according to the specified time zone. + if ("Z" in d) { + d.H += d.Z / 100 | 0; + d.M += d.Z % 100; + return utcDate(d); + } + + // Otherwise, all fields are in local time. + return newDate(d); + }; + } + + function parseSpecifier(d, specifier, string, j) { + var i = 0, + n = specifier.length, + m = string.length, + c, + parse; + + while (i < n) { + if (j >= m) return -1; + c = specifier.charCodeAt(i++); + if (c === 37) { + c = specifier.charAt(i++); + parse = parses[c in pads ? specifier.charAt(i++) : c]; + if (!parse || ((j = parse(d, string, j)) < 0)) return -1; + } else if (c != string.charCodeAt(j++)) { + return -1; + } + } + + return j; + } + + function parsePeriod(d, string, i) { + var n = periodRe.exec(string.slice(i)); + return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseShortWeekday(d, string, i) { + var n = shortWeekdayRe.exec(string.slice(i)); + return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseWeekday(d, string, i) { + var n = weekdayRe.exec(string.slice(i)); + return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseShortMonth(d, string, i) { + var n = shortMonthRe.exec(string.slice(i)); + return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseMonth(d, string, i) { + var n = monthRe.exec(string.slice(i)); + return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseLocaleDateTime(d, string, i) { + return parseSpecifier(d, locale_dateTime, string, i); + } + + function parseLocaleDate(d, string, i) { + return parseSpecifier(d, locale_date, string, i); + } + + function parseLocaleTime(d, string, i) { + return parseSpecifier(d, locale_time, string, i); + } + + function formatShortWeekday(d) { + return locale_shortWeekdays[d.getDay()]; + } + + function formatWeekday(d) { + return locale_weekdays[d.getDay()]; + } + + function formatShortMonth(d) { + return locale_shortMonths[d.getMonth()]; + } + + function formatMonth(d) { + return locale_months[d.getMonth()]; + } + + function formatPeriod(d) { + return locale_periods[+(d.getHours() >= 12)]; + } + + function formatUTCShortWeekday(d) { + return locale_shortWeekdays[d.getUTCDay()]; + } + + function formatUTCWeekday(d) { + return locale_weekdays[d.getUTCDay()]; + } + + function formatUTCShortMonth(d) { + return locale_shortMonths[d.getUTCMonth()]; + } + + function formatUTCMonth(d) { + return locale_months[d.getUTCMonth()]; + } + + function formatUTCPeriod(d) { + return locale_periods[+(d.getUTCHours() >= 12)]; + } + + return { + format: function(specifier) { + var f = newFormat(specifier += "", formats); + f.toString = function() { return specifier; }; + return f; + }, + parse: function(specifier) { + var p = newParse(specifier += "", localDate); + p.toString = function() { return specifier; }; + return p; + }, + utcFormat: function(specifier) { + var f = newFormat(specifier += "", utcFormats); + f.toString = function() { return specifier; }; + return f; + }, + utcParse: function(specifier) { + var p = newParse(specifier, utcDate); + p.toString = function() { return specifier; }; + return p; + } + }; + } + + var pads = {"-": "", "_": " ", "0": "0"}, + numberRe = /^\s*\d+/, // note: ignores next directive + percentRe = /^%/, + requoteRe = /[\\^$*+?|[\]().{}]/g; + + function pad(value, fill, width) { + var sign = value < 0 ? "-" : "", + string = (sign ? -value : value) + "", + length = string.length; + return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); + } + + function requote(s) { + return s.replace(requoteRe, "\\$&"); + } + + function formatRe(names) { + return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); + } + + function formatLookup(names) { + var map = {}, i = -1, n = names.length; + while (++i < n) map[names[i].toLowerCase()] = i; + return map; + } + + function parseWeekdayNumberSunday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 1)); + return n ? (d.w = +n[0], i + n[0].length) : -1; + } + + function parseWeekdayNumberMonday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 1)); + return n ? (d.u = +n[0], i + n[0].length) : -1; + } + + function parseWeekNumberSunday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.U = +n[0], i + n[0].length) : -1; + } + + function parseWeekNumberISO(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.V = +n[0], i + n[0].length) : -1; + } + + function parseWeekNumberMonday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.W = +n[0], i + n[0].length) : -1; + } + + function parseFullYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 4)); + return n ? (d.y = +n[0], i + n[0].length) : -1; + } + + function parseYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; + } + + function parseZone(d, string, i) { + var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6)); + return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; + } + + function parseMonthNumber(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.m = n[0] - 1, i + n[0].length) : -1; + } + + function parseDayOfMonth(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.d = +n[0], i + n[0].length) : -1; + } + + function parseDayOfYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 3)); + return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; + } + + function parseHour24(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.H = +n[0], i + n[0].length) : -1; + } + + function parseMinutes(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.M = +n[0], i + n[0].length) : -1; + } + + function parseSeconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.S = +n[0], i + n[0].length) : -1; + } + + function parseMilliseconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 3)); + return n ? (d.L = +n[0], i + n[0].length) : -1; + } + + function parseMicroseconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 6)); + return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1; + } + + function parseLiteralPercent(d, string, i) { + var n = percentRe.exec(string.slice(i, i + 1)); + return n ? i + n[0].length : -1; + } + + function parseUnixTimestamp(d, string, i) { + var n = numberRe.exec(string.slice(i)); + return n ? (d.Q = +n[0], i + n[0].length) : -1; + } + + function parseUnixTimestampSeconds(d, string, i) { + var n = numberRe.exec(string.slice(i)); + return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1; + } + + function formatDayOfMonth(d, p) { + return pad(d.getDate(), p, 2); + } + + function formatHour24(d, p) { + return pad(d.getHours(), p, 2); + } + + function formatHour12(d, p) { + return pad(d.getHours() % 12 || 12, p, 2); + } + + function formatDayOfYear(d, p) { + return pad(1 + day.count(year(d), d), p, 3); + } + + function formatMilliseconds(d, p) { + return pad(d.getMilliseconds(), p, 3); + } + + function formatMicroseconds(d, p) { + return formatMilliseconds(d, p) + "000"; + } + + function formatMonthNumber(d, p) { + return pad(d.getMonth() + 1, p, 2); + } + + function formatMinutes(d, p) { + return pad(d.getMinutes(), p, 2); + } + + function formatSeconds(d, p) { + return pad(d.getSeconds(), p, 2); + } + + function formatWeekdayNumberMonday(d) { + var day$$1 = d.getDay(); + return day$$1 === 0 ? 7 : day$$1; + } + + function formatWeekNumberSunday(d, p) { + return pad(sunday.count(year(d), d), p, 2); + } + + function formatWeekNumberISO(d, p) { + var day$$1 = d.getDay(); + d = (day$$1 >= 4 || day$$1 === 0) ? thursday(d) : thursday.ceil(d); + return pad(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2); + } + + function formatWeekdayNumberSunday(d) { + return d.getDay(); + } + + function formatWeekNumberMonday(d, p) { + return pad(monday.count(year(d), d), p, 2); + } + + function formatYear(d, p) { + return pad(d.getFullYear() % 100, p, 2); + } + + function formatFullYear(d, p) { + return pad(d.getFullYear() % 10000, p, 4); + } + + function formatZone(d) { + var z = d.getTimezoneOffset(); + return (z > 0 ? "-" : (z *= -1, "+")) + + pad(z / 60 | 0, "0", 2) + + pad(z % 60, "0", 2); + } + + function formatUTCDayOfMonth(d, p) { + return pad(d.getUTCDate(), p, 2); + } + + function formatUTCHour24(d, p) { + return pad(d.getUTCHours(), p, 2); + } + + function formatUTCHour12(d, p) { + return pad(d.getUTCHours() % 12 || 12, p, 2); + } + + function formatUTCDayOfYear(d, p) { + return pad(1 + utcDay.count(utcYear(d), d), p, 3); + } + + function formatUTCMilliseconds(d, p) { + return pad(d.getUTCMilliseconds(), p, 3); + } + + function formatUTCMicroseconds(d, p) { + return formatUTCMilliseconds(d, p) + "000"; + } + + function formatUTCMonthNumber(d, p) { + return pad(d.getUTCMonth() + 1, p, 2); + } + + function formatUTCMinutes(d, p) { + return pad(d.getUTCMinutes(), p, 2); + } + + function formatUTCSeconds(d, p) { + return pad(d.getUTCSeconds(), p, 2); + } + + function formatUTCWeekdayNumberMonday(d) { + var dow = d.getUTCDay(); + return dow === 0 ? 7 : dow; + } + + function formatUTCWeekNumberSunday(d, p) { + return pad(utcSunday.count(utcYear(d), d), p, 2); + } + + function formatUTCWeekNumberISO(d, p) { + var day$$1 = d.getUTCDay(); + d = (day$$1 >= 4 || day$$1 === 0) ? utcThursday(d) : utcThursday.ceil(d); + return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2); + } + + function formatUTCWeekdayNumberSunday(d) { + return d.getUTCDay(); + } + + function formatUTCWeekNumberMonday(d, p) { + return pad(utcMonday.count(utcYear(d), d), p, 2); + } + + function formatUTCYear(d, p) { + return pad(d.getUTCFullYear() % 100, p, 2); + } + + function formatUTCFullYear(d, p) { + return pad(d.getUTCFullYear() % 10000, p, 4); + } + + function formatUTCZone() { + return "+0000"; + } + + function formatLiteralPercent() { + return "%"; + } + + function formatUnixTimestamp(d) { + return +d; + } + + function formatUnixTimestampSeconds(d) { + return Math.floor(+d / 1000); + } + + var locale$1; + var timeFormat; + var timeParse; + var utcFormat; + var utcParse; + + defaultLocale$1({ + dateTime: "%x, %X", + date: "%-m/%-d/%Y", + time: "%-I:%M:%S %p", + periods: ["AM", "PM"], + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + }); + + function defaultLocale$1(definition) { + locale$1 = formatLocale$1(definition); + timeFormat = locale$1.format; + timeParse = locale$1.parse; + utcFormat = locale$1.utcFormat; + utcParse = locale$1.utcParse; + return locale$1; + } + + var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; + + function formatIsoNative(date) { + return date.toISOString(); + } + + var formatIso = Date.prototype.toISOString + ? formatIsoNative + : utcFormat(isoSpecifier); + + function parseIsoNative(string) { + var date = new Date(string); + return isNaN(date) ? null : date; + } + + var parseIso = +new Date("2000-01-01T00:00:00.000Z") + ? parseIsoNative + : utcParse(isoSpecifier); + + var durationSecond$1 = 1000, + durationMinute$1 = durationSecond$1 * 60, + durationHour$1 = durationMinute$1 * 60, + durationDay$1 = durationHour$1 * 24, + durationWeek$1 = durationDay$1 * 7, + durationMonth = durationDay$1 * 30, + durationYear = durationDay$1 * 365; + + function date$1(t) { + return new Date(t); + } + + function number$3(t) { + return t instanceof Date ? +t : +new Date(+t); + } + + function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) { + var scale = continuous(deinterpolateLinear, interpolateNumber), + invert = scale.invert, + domain = scale.domain; + + var formatMillisecond = format(".%L"), + formatSecond = format(":%S"), + formatMinute = format("%I:%M"), + formatHour = format("%I %p"), + formatDay = format("%a %d"), + formatWeek = format("%b %d"), + formatMonth = format("%B"), + formatYear = format("%Y"); + + var tickIntervals = [ + [second$$1, 1, durationSecond$1], + [second$$1, 5, 5 * durationSecond$1], + [second$$1, 15, 15 * durationSecond$1], + [second$$1, 30, 30 * durationSecond$1], + [minute$$1, 1, durationMinute$1], + [minute$$1, 5, 5 * durationMinute$1], + [minute$$1, 15, 15 * durationMinute$1], + [minute$$1, 30, 30 * durationMinute$1], + [ hour$$1, 1, durationHour$1 ], + [ hour$$1, 3, 3 * durationHour$1 ], + [ hour$$1, 6, 6 * durationHour$1 ], + [ hour$$1, 12, 12 * durationHour$1 ], + [ day$$1, 1, durationDay$1 ], + [ day$$1, 2, 2 * durationDay$1 ], + [ week, 1, durationWeek$1 ], + [ month$$1, 1, durationMonth ], + [ month$$1, 3, 3 * durationMonth ], + [ year$$1, 1, durationYear ] + ]; + + function tickFormat(date$$1) { + return (second$$1(date$$1) < date$$1 ? formatMillisecond + : minute$$1(date$$1) < date$$1 ? formatSecond + : hour$$1(date$$1) < date$$1 ? formatMinute + : day$$1(date$$1) < date$$1 ? formatHour + : month$$1(date$$1) < date$$1 ? (week(date$$1) < date$$1 ? formatDay : formatWeek) + : year$$1(date$$1) < date$$1 ? formatMonth + : formatYear)(date$$1); + } + + function tickInterval(interval, start, stop, step) { + if (interval == null) interval = 10; + + // If a desired tick count is specified, pick a reasonable tick interval + // based on the extent of the domain and a rough estimate of tick size. + // Otherwise, assume interval is already a time interval and use it. + if (typeof interval === "number") { + var target = Math.abs(stop - start) / interval, + i = bisector(function(i) { return i[2]; }).right(tickIntervals, target); + if (i === tickIntervals.length) { + step = tickStep(start / durationYear, stop / durationYear, interval); + interval = year$$1; + } else if (i) { + i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i]; + step = i[1]; + interval = i[0]; + } else { + step = Math.max(tickStep(start, stop, interval), 1); + interval = millisecond$$1; + } + } + + return step == null ? interval : interval.every(step); + } + + scale.invert = function(y) { + return new Date(invert(y)); + }; + + scale.domain = function(_) { + return arguments.length ? domain(map$2.call(_, number$3)) : domain().map(date$1); + }; + + scale.ticks = function(interval, step) { + var d = domain(), + t0 = d[0], + t1 = d[d.length - 1], + r = t1 < t0, + t; + if (r) t = t0, t0 = t1, t1 = t; + t = tickInterval(interval, t0, t1, step); + t = t ? t.range(t0, t1 + 1) : []; // inclusive stop + return r ? t.reverse() : t; + }; + + scale.tickFormat = function(count, specifier) { + return specifier == null ? tickFormat : format(specifier); + }; + + scale.nice = function(interval, step) { + var d = domain(); + return (interval = tickInterval(interval, d[0], d[d.length - 1], step)) + ? domain(nice(d, interval)) + : scale; + }; + + scale.copy = function() { + return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format)); + }; + + return scale; + } + + function time() { + return calendar(year, month, sunday, day, hour, minute, second, millisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]); + } + + function utcTime() { + return calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]); + } + + function colors(s) { + return s.match(/.{6}/g).map(function(x) { + return "#" + x; + }); + } + + var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"); + + var category20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"); + + var category20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"); + + var category20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"); + + var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0)); + + var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8)); + + var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8)); + + var rainbow = cubehelix(); + + function rainbow$1(t) { + if (t < 0 || t > 1) t -= Math.floor(t); + var ts = Math.abs(t - 0.5); + rainbow.h = 360 * t - 100; + rainbow.s = 1.5 - 1.5 * ts; + rainbow.l = 0.8 - 0.9 * ts; + return rainbow + ""; + } + + function ramp(range) { + var n = range.length; + return function(t) { + return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; + }; + } + + var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")); + + var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")); + + var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")); + + var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")); + + function sequential(interpolator) { + var x0 = 0, + x1 = 1, + clamp = false; + + function scale(x) { + var t = (x - x0) / (x1 - x0); + return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t); + } + + scale.domain = function(_) { + return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1]; + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = !!_, scale) : clamp; + }; + + scale.interpolator = function(_) { + return arguments.length ? (interpolator = _, scale) : interpolator; + }; + + scale.copy = function() { + return sequential(interpolator).domain([x0, x1]).clamp(clamp); + }; + + return linearish(scale); + } + + function constant$10(x) { + return function constant() { + return x; + }; + } + + var abs$1 = Math.abs; + var atan2$1 = Math.atan2; + var cos$2 = Math.cos; + var max$2 = Math.max; + var min$1 = Math.min; + var sin$2 = Math.sin; + var sqrt$2 = Math.sqrt; + + var epsilon$3 = 1e-12; + var pi$4 = Math.PI; + var halfPi$3 = pi$4 / 2; + var tau$4 = 2 * pi$4; + + function acos$1(x) { + return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x); + } + + function asin$1(x) { + return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x); + } + + function arcInnerRadius(d) { + return d.innerRadius; + } + + function arcOuterRadius(d) { + return d.outerRadius; + } + + function arcStartAngle(d) { + return d.startAngle; + } + + function arcEndAngle(d) { + return d.endAngle; + } + + function arcPadAngle(d) { + return d && d.padAngle; // Note: optional! + } + + function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { + var x10 = x1 - x0, y10 = y1 - y0, + x32 = x3 - x2, y32 = y3 - y2, + t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10); + return [x0 + t * x10, y0 + t * y10]; + } + + // Compute perpendicular offset line of length rc. + // http://mathworld.wolfram.com/Circle-LineIntersection.html + function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { + var x01 = x0 - x1, + y01 = y0 - y1, + lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01), + ox = lo * y01, + oy = -lo * x01, + x11 = x0 + ox, + y11 = y0 + oy, + x10 = x1 + ox, + y10 = y1 + oy, + x00 = (x11 + x10) / 2, + y00 = (y11 + y10) / 2, + dx = x10 - x11, + dy = y10 - y11, + d2 = dx * dx + dy * dy, + r = r1 - rc, + D = x11 * y10 - x10 * y11, + d = (dy < 0 ? -1 : 1) * sqrt$2(max$2(0, r * r * d2 - D * D)), + cx0 = (D * dy - dx * d) / d2, + cy0 = (-D * dx - dy * d) / d2, + cx1 = (D * dy + dx * d) / d2, + cy1 = (-D * dx + dy * d) / d2, + dx0 = cx0 - x00, + dy0 = cy0 - y00, + dx1 = cx1 - x00, + dy1 = cy1 - y00; + + // Pick the closer of the two intersection points. + // TODO Is there a faster way to determine which intersection to use? + if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; + + return { + cx: cx0, + cy: cy0, + x01: -ox, + y01: -oy, + x11: cx0 * (r1 / r - 1), + y11: cy0 * (r1 / r - 1) + }; + } + + function arc() { + var innerRadius = arcInnerRadius, + outerRadius = arcOuterRadius, + cornerRadius = constant$10(0), + padRadius = null, + startAngle = arcStartAngle, + endAngle = arcEndAngle, + padAngle = arcPadAngle, + context = null; + + function arc() { + var buffer, + r, + r0 = +innerRadius.apply(this, arguments), + r1 = +outerRadius.apply(this, arguments), + a0 = startAngle.apply(this, arguments) - halfPi$3, + a1 = endAngle.apply(this, arguments) - halfPi$3, + da = abs$1(a1 - a0), + cw = a1 > a0; + + if (!context) context = buffer = path(); + + // Ensure that the outer radius is always larger than the inner radius. + if (r1 < r0) r = r1, r1 = r0, r0 = r; + + // Is it a point? + if (!(r1 > epsilon$3)) context.moveTo(0, 0); + + // Or is it a circle or annulus? + else if (da > tau$4 - epsilon$3) { + context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0)); + context.arc(0, 0, r1, a0, a1, !cw); + if (r0 > epsilon$3) { + context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1)); + context.arc(0, 0, r0, a1, a0, cw); + } + } + + // Or is it a circular or annular sector? + else { + var a01 = a0, + a11 = a1, + a00 = a0, + a10 = a1, + da0 = da, + da1 = da, + ap = padAngle.apply(this, arguments) / 2, + rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)), + rc = min$1(abs$1(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), + rc0 = rc, + rc1 = rc, + t0, + t1; + + // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. + if (rp > epsilon$3) { + var p0 = asin$1(rp / r0 * sin$2(ap)), + p1 = asin$1(rp / r1 * sin$2(ap)); + if ((da0 -= p0 * 2) > epsilon$3) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; + else da0 = 0, a00 = a10 = (a0 + a1) / 2; + if ((da1 -= p1 * 2) > epsilon$3) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; + else da1 = 0, a01 = a11 = (a0 + a1) / 2; + } + + var x01 = r1 * cos$2(a01), + y01 = r1 * sin$2(a01), + x10 = r0 * cos$2(a10), + y10 = r0 * sin$2(a10); + + // Apply rounded corners? + if (rc > epsilon$3) { + var x11 = r1 * cos$2(a11), + y11 = r1 * sin$2(a11), + x00 = r0 * cos$2(a00), + y00 = r0 * sin$2(a00); + + // Restrict the corner radius according to the sector angle. + if (da < pi$4) { + var oc = da0 > epsilon$3 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10], + ax = x01 - oc[0], + ay = y01 - oc[1], + bx = x11 - oc[0], + by = y11 - oc[1], + kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2), + lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]); + rc0 = min$1(rc, (r0 - lc) / (kc - 1)); + rc1 = min$1(rc, (r1 - lc) / (kc + 1)); + } + } + + // Is the sector collapsed to a line? + if (!(da1 > epsilon$3)) context.moveTo(x01, y01); + + // Does the sector’s outer ring have rounded corners? + else if (rc1 > epsilon$3) { + t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); + t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); + + context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); + + // Have the corners merged? + if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw); + + // Otherwise, draw the two corners and the ring. + else { + context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw); + context.arc(0, 0, r1, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), !cw); + context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw); + } + } + + // Or is the outer ring just a circular arc? + else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); + + // Is there no inner ring, and it’s a circular sector? + // Or perhaps it’s an annular sector collapsed due to padding? + if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) context.lineTo(x10, y10); + + // Does the sector’s inner ring (or point) have rounded corners? + else if (rc0 > epsilon$3) { + t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); + t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); + + context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); + + // Have the corners merged? + if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw); + + // Otherwise, draw the two corners and the ring. + else { + context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw); + context.arc(0, 0, r0, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), cw); + context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw); + } + } + + // Or is the inner ring just a circular arc? + else context.arc(0, 0, r0, a10, a00, cw); + } + + context.closePath(); + + if (buffer) return context = null, buffer + "" || null; + } + + arc.centroid = function() { + var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, + a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2; + return [cos$2(a) * r, sin$2(a) * r]; + }; + + arc.innerRadius = function(_) { + return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$10(+_), arc) : innerRadius; + }; + + arc.outerRadius = function(_) { + return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$10(+_), arc) : outerRadius; + }; + + arc.cornerRadius = function(_) { + return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$10(+_), arc) : cornerRadius; + }; + + arc.padRadius = function(_) { + return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$10(+_), arc) : padRadius; + }; + + arc.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$10(+_), arc) : startAngle; + }; + + arc.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$10(+_), arc) : endAngle; + }; + + arc.padAngle = function(_) { + return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$10(+_), arc) : padAngle; + }; + + arc.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), arc) : context; + }; + + return arc; + } + + function Linear(context) { + this._context = context; + } + + Linear.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; // proceed + default: this._context.lineTo(x, y); break; + } + } + }; + + function curveLinear(context) { + return new Linear(context); + } + + function x$3(p) { + return p[0]; + } + + function y$3(p) { + return p[1]; + } + + function line() { + var x$$1 = x$3, + y$$1 = y$3, + defined = constant$10(true), + context = null, + curve = curveLinear, + output = null; + + function line(data) { + var i, + n = data.length, + d, + defined0 = false, + buffer; + + if (context == null) output = curve(buffer = path()); + + for (i = 0; i <= n; ++i) { + if (!(i < n && defined(d = data[i], i, data)) === defined0) { + if (defined0 = !defined0) output.lineStart(); + else output.lineEnd(); + } + if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data)); + } + + if (buffer) return output = null, buffer + "" || null; + } + + line.x = function(_) { + return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$10(+_), line) : x$$1; + }; + + line.y = function(_) { + return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$10(+_), line) : y$$1; + }; + + line.defined = function(_) { + return arguments.length ? (defined = typeof _ === "function" ? _ : constant$10(!!_), line) : defined; + }; + + line.curve = function(_) { + return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; + }; + + line.context = function(_) { + return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; + }; + + return line; + } + + function area() { + var x0 = x$3, + x1 = null, + y0 = constant$10(0), + y1 = y$3, + defined = constant$10(true), + context = null, + curve = curveLinear, + output = null; + + function area(data) { + var i, + j, + k, + n = data.length, + d, + defined0 = false, + buffer, + x0z = new Array(n), + y0z = new Array(n); + + if (context == null) output = curve(buffer = path()); + + for (i = 0; i <= n; ++i) { + if (!(i < n && defined(d = data[i], i, data)) === defined0) { + if (defined0 = !defined0) { + j = i; + output.areaStart(); + output.lineStart(); + } else { + output.lineEnd(); + output.lineStart(); + for (k = i - 1; k >= j; --k) { + output.point(x0z[k], y0z[k]); + } + output.lineEnd(); + output.areaEnd(); + } + } + if (defined0) { + x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); + output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); + } + } + + if (buffer) return output = null, buffer + "" || null; + } + + function arealine() { + return line().defined(defined).curve(curve).context(context); + } + + area.x = function(_) { + return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$10(+_), x1 = null, area) : x0; + }; + + area.x0 = function(_) { + return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$10(+_), area) : x0; + }; + + area.x1 = function(_) { + return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$10(+_), area) : x1; + }; + + area.y = function(_) { + return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$10(+_), y1 = null, area) : y0; + }; + + area.y0 = function(_) { + return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$10(+_), area) : y0; + }; + + area.y1 = function(_) { + return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$10(+_), area) : y1; + }; + + area.lineX0 = + area.lineY0 = function() { + return arealine().x(x0).y(y0); + }; + + area.lineY1 = function() { + return arealine().x(x0).y(y1); + }; + + area.lineX1 = function() { + return arealine().x(x1).y(y0); + }; + + area.defined = function(_) { + return arguments.length ? (defined = typeof _ === "function" ? _ : constant$10(!!_), area) : defined; + }; + + area.curve = function(_) { + return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; + }; + + area.context = function(_) { + return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; + }; + + return area; + } + + function descending(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; + } + + function identity$6(d) { + return d; + } + + function pie() { + var value = identity$6, + sortValues = descending, + sort = null, + startAngle = constant$10(0), + endAngle = constant$10(tau$4), + padAngle = constant$10(0); + + function pie(data) { + var i, + n = data.length, + j, + k, + sum = 0, + index = new Array(n), + arcs = new Array(n), + a0 = +startAngle.apply(this, arguments), + da = Math.min(tau$4, Math.max(-tau$4, endAngle.apply(this, arguments) - a0)), + a1, + p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)), + pa = p * (da < 0 ? -1 : 1), + v; + + for (i = 0; i < n; ++i) { + if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) { + sum += v; + } + } + + // Optionally sort the arcs by previously-computed values or by data. + if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); + else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); }); + + // Compute the arcs! They are stored in the original data's order. + for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) { + j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = { + data: data[j], + index: i, + value: v, + startAngle: a0, + endAngle: a1, + padAngle: p + }; + } + + return arcs; + } + + pie.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : constant$10(+_), pie) : value; + }; + + pie.sortValues = function(_) { + return arguments.length ? (sortValues = _, sort = null, pie) : sortValues; + }; + + pie.sort = function(_) { + return arguments.length ? (sort = _, sortValues = null, pie) : sort; + }; + + pie.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$10(+_), pie) : startAngle; + }; + + pie.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$10(+_), pie) : endAngle; + }; + + pie.padAngle = function(_) { + return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$10(+_), pie) : padAngle; + }; + + return pie; + } + + var curveRadialLinear = curveRadial(curveLinear); + + function Radial(curve) { + this._curve = curve; + } + + Radial.prototype = { + areaStart: function() { + this._curve.areaStart(); + }, + areaEnd: function() { + this._curve.areaEnd(); + }, + lineStart: function() { + this._curve.lineStart(); + }, + lineEnd: function() { + this._curve.lineEnd(); + }, + point: function(a, r) { + this._curve.point(r * Math.sin(a), r * -Math.cos(a)); + } + }; + + function curveRadial(curve) { + + function radial(context) { + return new Radial(curve(context)); + } + + radial._curve = curve; + + return radial; + } + + function lineRadial(l) { + var c = l.curve; + + l.angle = l.x, delete l.x; + l.radius = l.y, delete l.y; + + l.curve = function(_) { + return arguments.length ? c(curveRadial(_)) : c()._curve; + }; + + return l; + } + + function lineRadial$1() { + return lineRadial(line().curve(curveRadialLinear)); + } + + function areaRadial() { + var a = area().curve(curveRadialLinear), + c = a.curve, + x0 = a.lineX0, + x1 = a.lineX1, + y0 = a.lineY0, + y1 = a.lineY1; + + a.angle = a.x, delete a.x; + a.startAngle = a.x0, delete a.x0; + a.endAngle = a.x1, delete a.x1; + a.radius = a.y, delete a.y; + a.innerRadius = a.y0, delete a.y0; + a.outerRadius = a.y1, delete a.y1; + a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0; + a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1; + a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0; + a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1; + + a.curve = function(_) { + return arguments.length ? c(curveRadial(_)) : c()._curve; + }; + + return a; + } + + function pointRadial(x, y) { + return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)]; + } + + var slice$6 = Array.prototype.slice; + + function linkSource(d) { + return d.source; + } + + function linkTarget(d) { + return d.target; + } + + function link$2(curve) { + var source = linkSource, + target = linkTarget, + x$$1 = x$3, + y$$1 = y$3, + context = null; + + function link() { + var buffer, argv = slice$6.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv); + if (!context) context = buffer = path(); + curve(context, +x$$1.apply(this, (argv[0] = s, argv)), +y$$1.apply(this, argv), +x$$1.apply(this, (argv[0] = t, argv)), +y$$1.apply(this, argv)); + if (buffer) return context = null, buffer + "" || null; + } + + link.source = function(_) { + return arguments.length ? (source = _, link) : source; + }; + + link.target = function(_) { + return arguments.length ? (target = _, link) : target; + }; + + link.x = function(_) { + return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$10(+_), link) : x$$1; + }; + + link.y = function(_) { + return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$10(+_), link) : y$$1; + }; + + link.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), link) : context; + }; + + return link; + } + + function curveHorizontal(context, x0, y0, x1, y1) { + context.moveTo(x0, y0); + context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1); + } + + function curveVertical(context, x0, y0, x1, y1) { + context.moveTo(x0, y0); + context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1); + } + + function curveRadial$1(context, x0, y0, x1, y1) { + var p0 = pointRadial(x0, y0), + p1 = pointRadial(x0, y0 = (y0 + y1) / 2), + p2 = pointRadial(x1, y0), + p3 = pointRadial(x1, y1); + context.moveTo(p0[0], p0[1]); + context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); + } + + function linkHorizontal() { + return link$2(curveHorizontal); + } + + function linkVertical() { + return link$2(curveVertical); + } + + function linkRadial() { + var l = link$2(curveRadial$1); + l.angle = l.x, delete l.x; + l.radius = l.y, delete l.y; + return l; + } + + var circle$2 = { + draw: function(context, size) { + var r = Math.sqrt(size / pi$4); + context.moveTo(r, 0); + context.arc(0, 0, r, 0, tau$4); + } + }; + + var cross$2 = { + draw: function(context, size) { + var r = Math.sqrt(size / 5) / 2; + context.moveTo(-3 * r, -r); + context.lineTo(-r, -r); + context.lineTo(-r, -3 * r); + context.lineTo(r, -3 * r); + context.lineTo(r, -r); + context.lineTo(3 * r, -r); + context.lineTo(3 * r, r); + context.lineTo(r, r); + context.lineTo(r, 3 * r); + context.lineTo(-r, 3 * r); + context.lineTo(-r, r); + context.lineTo(-3 * r, r); + context.closePath(); + } + }; + + var tan30 = Math.sqrt(1 / 3), + tan30_2 = tan30 * 2; + + var diamond = { + draw: function(context, size) { + var y = Math.sqrt(size / tan30_2), + x = y * tan30; + context.moveTo(0, -y); + context.lineTo(x, 0); + context.lineTo(0, y); + context.lineTo(-x, 0); + context.closePath(); + } + }; + + var ka = 0.89081309152928522810, + kr = Math.sin(pi$4 / 10) / Math.sin(7 * pi$4 / 10), + kx = Math.sin(tau$4 / 10) * kr, + ky = -Math.cos(tau$4 / 10) * kr; + + var star = { + draw: function(context, size) { + var r = Math.sqrt(size * ka), + x = kx * r, + y = ky * r; + context.moveTo(0, -r); + context.lineTo(x, y); + for (var i = 1; i < 5; ++i) { + var a = tau$4 * i / 5, + c = Math.cos(a), + s = Math.sin(a); + context.lineTo(s * r, -c * r); + context.lineTo(c * x - s * y, s * x + c * y); + } + context.closePath(); + } + }; + + var square = { + draw: function(context, size) { + var w = Math.sqrt(size), + x = -w / 2; + context.rect(x, x, w, w); + } + }; + + var sqrt3 = Math.sqrt(3); + + var triangle = { + draw: function(context, size) { + var y = -Math.sqrt(size / (sqrt3 * 3)); + context.moveTo(0, y * 2); + context.lineTo(-sqrt3 * y, -y); + context.lineTo(sqrt3 * y, -y); + context.closePath(); + } + }; + + var c = -0.5, + s = Math.sqrt(3) / 2, + k = 1 / Math.sqrt(12), + a = (k / 2 + 1) * 3; + + var wye = { + draw: function(context, size) { + var r = Math.sqrt(size / a), + x0 = r / 2, + y0 = r * k, + x1 = x0, + y1 = r * k + r, + x2 = -x1, + y2 = y1; + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.lineTo(c * x0 - s * y0, s * x0 + c * y0); + context.lineTo(c * x1 - s * y1, s * x1 + c * y1); + context.lineTo(c * x2 - s * y2, s * x2 + c * y2); + context.lineTo(c * x0 + s * y0, c * y0 - s * x0); + context.lineTo(c * x1 + s * y1, c * y1 - s * x1); + context.lineTo(c * x2 + s * y2, c * y2 - s * x2); + context.closePath(); + } + }; + + var symbols = [ + circle$2, + cross$2, + diamond, + square, + star, + triangle, + wye + ]; + + function symbol() { + var type = constant$10(circle$2), + size = constant$10(64), + context = null; + + function symbol() { + var buffer; + if (!context) context = buffer = path(); + type.apply(this, arguments).draw(context, +size.apply(this, arguments)); + if (buffer) return context = null, buffer + "" || null; + } + + symbol.type = function(_) { + return arguments.length ? (type = typeof _ === "function" ? _ : constant$10(_), symbol) : type; + }; + + symbol.size = function(_) { + return arguments.length ? (size = typeof _ === "function" ? _ : constant$10(+_), symbol) : size; + }; + + symbol.context = function(_) { + return arguments.length ? (context = _ == null ? null : _, symbol) : context; + }; + + return symbol; + } + + function noop$2() {} + + function point$2(that, x, y) { + that._context.bezierCurveTo( + (2 * that._x0 + that._x1) / 3, + (2 * that._y0 + that._y1) / 3, + (that._x0 + 2 * that._x1) / 3, + (that._y0 + 2 * that._y1) / 3, + (that._x0 + 4 * that._x1 + x) / 6, + (that._y0 + 4 * that._y1 + y) / 6 + ); + } + + function Basis(context) { + this._context = context; + } + + Basis.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 3: point$2(this, this._x1, this._y1); // proceed + case 2: this._context.lineTo(this._x1, this._y1); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed + default: point$2(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } + }; + + function basis$2(context) { + return new Basis(context); + } + + function BasisClosed(context) { + this._context = context; + } + + BasisClosed.prototype = { + areaStart: noop$2, + areaEnd: noop$2, + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x2, this._y2); + this._context.closePath(); + break; + } + case 2: { + this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); + this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x2, this._y2); + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._x2 = x, this._y2 = y; break; + case 1: this._point = 2; this._x3 = x, this._y3 = y; break; + case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break; + default: point$2(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } + }; + + function basisClosed$1(context) { + return new BasisClosed(context); + } + + function BasisOpen(context) { + this._context = context; + } + + BasisOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = NaN; + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; + case 3: this._point = 4; // proceed + default: point$2(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } + }; + + function basisOpen(context) { + return new BasisOpen(context); + } + + function Bundle(context, beta) { + this._basis = new Basis(context); + this._beta = beta; + } + + Bundle.prototype = { + lineStart: function() { + this._x = []; + this._y = []; + this._basis.lineStart(); + }, + lineEnd: function() { + var x = this._x, + y = this._y, + j = x.length - 1; + + if (j > 0) { + var x0 = x[0], + y0 = y[0], + dx = x[j] - x0, + dy = y[j] - y0, + i = -1, + t; + + while (++i <= j) { + t = i / j; + this._basis.point( + this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), + this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) + ); + } + } + + this._x = this._y = null; + this._basis.lineEnd(); + }, + point: function(x, y) { + this._x.push(+x); + this._y.push(+y); + } + }; + + var bundle = (function custom(beta) { + + function bundle(context) { + return beta === 1 ? new Basis(context) : new Bundle(context, beta); + } + + bundle.beta = function(beta) { + return custom(+beta); + }; + + return bundle; + })(0.85); + + function point$3(that, x, y) { + that._context.bezierCurveTo( + that._x1 + that._k * (that._x2 - that._x0), + that._y1 + that._k * (that._y2 - that._y0), + that._x2 + that._k * (that._x1 - x), + that._y2 + that._k * (that._y1 - y), + that._x2, + that._y2 + ); + } + + function Cardinal(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; + } + + Cardinal.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x2, this._y2); break; + case 3: point$3(this, this._x1, this._y1); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; this._x1 = x, this._y1 = y; break; + case 2: this._point = 3; // proceed + default: point$3(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } + }; + + var cardinal = (function custom(tension) { + + function cardinal(context) { + return new Cardinal(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; + })(0); + + function CardinalClosed(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; + } + + CardinalClosed.prototype = { + areaStart: noop$2, + areaEnd: noop$2, + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 2: { + this._context.lineTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + this.point(this._x5, this._y5); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._x3 = x, this._y3 = y; break; + case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; + case 2: this._point = 3; this._x5 = x, this._y5 = y; break; + default: point$3(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } + }; + + var cardinalClosed = (function custom(tension) { + + function cardinal$$1(context) { + return new CardinalClosed(context, tension); + } + + cardinal$$1.tension = function(tension) { + return custom(+tension); + }; + + return cardinal$$1; + })(0); + + function CardinalOpen(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; + } + + CardinalOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; + case 3: this._point = 4; // proceed + default: point$3(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } + }; + + var cardinalOpen = (function custom(tension) { + + function cardinal$$1(context) { + return new CardinalOpen(context, tension); + } + + cardinal$$1.tension = function(tension) { + return custom(+tension); + }; + + return cardinal$$1; + })(0); + + function point$4(that, x, y) { + var x1 = that._x1, + y1 = that._y1, + x2 = that._x2, + y2 = that._y2; + + if (that._l01_a > epsilon$3) { + var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, + n = 3 * that._l01_a * (that._l01_a + that._l12_a); + x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; + y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; + } + + if (that._l23_a > epsilon$3) { + var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, + m = 3 * that._l23_a * (that._l23_a + that._l12_a); + x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; + y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; + } + + that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); + } + + function CatmullRom(context, alpha) { + this._context = context; + this._alpha = alpha; + } + + CatmullRom.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x2, this._y2); break; + case 3: this.point(this._x2, this._y2); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; // proceed + default: point$4(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } + }; + + var catmullRom = (function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; + })(0.5); + + function CatmullRomClosed(context, alpha) { + this._context = context; + this._alpha = alpha; + } + + CatmullRomClosed.prototype = { + areaStart: noop$2, + areaEnd: noop$2, + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 2: { + this._context.lineTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + this.point(this._x5, this._y5); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; this._x3 = x, this._y3 = y; break; + case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; + case 2: this._point = 3; this._x5 = x, this._y5 = y; break; + default: point$4(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } + }; + + var catmullRomClosed = (function custom(alpha) { + + function catmullRom$$1(context) { + return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0); + } + + catmullRom$$1.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom$$1; + })(0.5); + + function CatmullRomOpen(context, alpha) { + this._context = context; + this._alpha = alpha; + } + + CatmullRomOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; + case 3: this._point = 4; // proceed + default: point$4(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } + }; + + var catmullRomOpen = (function custom(alpha) { + + function catmullRom$$1(context) { + return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0); + } + + catmullRom$$1.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom$$1; + })(0.5); + + function LinearClosed(context) { + this._context = context; + } + + LinearClosed.prototype = { + areaStart: noop$2, + areaEnd: noop$2, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._point) this._context.closePath(); + }, + point: function(x, y) { + x = +x, y = +y; + if (this._point) this._context.lineTo(x, y); + else this._point = 1, this._context.moveTo(x, y); + } + }; + + function linearClosed(context) { + return new LinearClosed(context); + } + + function sign$1(x) { + return x < 0 ? -1 : 1; + } + + // Calculate the slopes of the tangents (Hermite-type interpolation) based on + // the following paper: Steffen, M. 1990. A Simple Method for Monotonic + // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. + // NOV(II), P. 443, 1990. + function slope3(that, x2, y2) { + var h0 = that._x1 - that._x0, + h1 = x2 - that._x1, + s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), + s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), + p = (s0 * h1 + s1 * h0) / (h0 + h1); + return (sign$1(s0) + sign$1(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; + } + + // Calculate a one-sided slope. + function slope2(that, t) { + var h = that._x1 - that._x0; + return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; + } + + // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations + // "you can express cubic Hermite interpolation in terms of cubic Bézier curves + // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". + function point$5(that, t0, t1) { + var x0 = that._x0, + y0 = that._y0, + x1 = that._x1, + y1 = that._y1, + dx = (x1 - x0) / 3; + that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); + } + + function MonotoneX(context) { + this._context = context; + } + + MonotoneX.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = + this._t0 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x1, this._y1); break; + case 3: point$5(this, this._t0, slope2(this, this._t0)); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + var t1 = NaN; + + x = +x, y = +y; + if (x === this._x1 && y === this._y1) return; // Ignore coincident points. + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; point$5(this, slope2(this, t1 = slope3(this, x, y)), t1); break; + default: point$5(this, this._t0, t1 = slope3(this, x, y)); break; + } + + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + this._t0 = t1; + } + }; + + function MonotoneY(context) { + this._context = new ReflectContext(context); + } + + (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { + MonotoneX.prototype.point.call(this, y, x); + }; + + function ReflectContext(context) { + this._context = context; + } + + ReflectContext.prototype = { + moveTo: function(x, y) { this._context.moveTo(y, x); }, + closePath: function() { this._context.closePath(); }, + lineTo: function(x, y) { this._context.lineTo(y, x); }, + bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } + }; + + function monotoneX(context) { + return new MonotoneX(context); + } + + function monotoneY(context) { + return new MonotoneY(context); + } + + function Natural(context) { + this._context = context; + } + + Natural.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x = []; + this._y = []; + }, + lineEnd: function() { + var x = this._x, + y = this._y, + n = x.length; + + if (n) { + this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); + if (n === 2) { + this._context.lineTo(x[1], y[1]); + } else { + var px = controlPoints(x), + py = controlPoints(y); + for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { + this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); + } + } + } + + if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); + this._line = 1 - this._line; + this._x = this._y = null; + }, + point: function(x, y) { + this._x.push(+x); + this._y.push(+y); + } + }; + + // See https://www.particleincell.com/2012/bezier-splines/ for derivation. + function controlPoints(x) { + var i, + n = x.length - 1, + m, + a = new Array(n), + b = new Array(n), + r = new Array(n); + a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; + for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; + a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; + for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; + a[n - 1] = r[n - 1] / b[n - 1]; + for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; + b[n - 1] = (x[n] + a[n - 1]) / 2; + for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; + return [a, b]; + } + + function natural(context) { + return new Natural(context); + } + + function Step(context, t) { + this._context = context; + this._t = t; + } + + Step.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x = this._y = NaN; + this._point = 0; + }, + lineEnd: function() { + if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; // proceed + default: { + if (this._t <= 0) { + this._context.lineTo(this._x, y); + this._context.lineTo(x, y); + } else { + var x1 = this._x * (1 - this._t) + x * this._t; + this._context.lineTo(x1, this._y); + this._context.lineTo(x1, y); + } + break; + } + } + this._x = x, this._y = y; + } + }; + + function step(context) { + return new Step(context, 0.5); + } + + function stepBefore(context) { + return new Step(context, 0); + } + + function stepAfter(context) { + return new Step(context, 1); + } + + function none$1(series, order) { + if (!((n = series.length) > 1)) return; + for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) { + s0 = s1, s1 = series[order[i]]; + for (j = 0; j < m; ++j) { + s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; + } + } + } + + function none$2(series) { + var n = series.length, o = new Array(n); + while (--n >= 0) o[n] = n; + return o; + } + + function stackValue(d, key) { + return d[key]; + } + + function stack() { + var keys = constant$10([]), + order = none$2, + offset = none$1, + value = stackValue; + + function stack(data) { + var kz = keys.apply(this, arguments), + i, + m = data.length, + n = kz.length, + sz = new Array(n), + oz; + + for (i = 0; i < n; ++i) { + for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) { + si[j] = sij = [0, +value(data[j], ki, j, data)]; + sij.data = data[j]; + } + si.key = ki; + } + + for (i = 0, oz = order(sz); i < n; ++i) { + sz[oz[i]].index = i; + } + + offset(sz, oz); + return sz; + } + + stack.keys = function(_) { + return arguments.length ? (keys = typeof _ === "function" ? _ : constant$10(slice$6.call(_)), stack) : keys; + }; + + stack.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : constant$10(+_), stack) : value; + }; + + stack.order = function(_) { + return arguments.length ? (order = _ == null ? none$2 : typeof _ === "function" ? _ : constant$10(slice$6.call(_)), stack) : order; + }; + + stack.offset = function(_) { + return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset; + }; + + return stack; + } + + function expand(series, order) { + if (!((n = series.length) > 0)) return; + for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) { + for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0; + if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y; + } + none$1(series, order); + } + + function diverging(series, order) { + if (!((n = series.length) > 1)) return; + for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) { + for (yp = yn = 0, i = 0; i < n; ++i) { + if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) { + d[0] = yp, d[1] = yp += dy; + } else if (dy < 0) { + d[1] = yn, d[0] = yn += dy; + } else { + d[0] = yp; + } + } + } + } + + function silhouette(series, order) { + if (!((n = series.length) > 0)) return; + for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) { + for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0; + s0[j][1] += s0[j][0] = -y / 2; + } + none$1(series, order); + } + + function wiggle(series, order) { + if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return; + for (var y = 0, j = 1, s0, m, n; j < m; ++j) { + for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) { + var si = series[order[i]], + sij0 = si[j][1] || 0, + sij1 = si[j - 1][1] || 0, + s3 = (sij0 - sij1) / 2; + for (var k = 0; k < i; ++k) { + var sk = series[order[k]], + skj0 = sk[j][1] || 0, + skj1 = sk[j - 1][1] || 0; + s3 += skj0 - skj1; + } + s1 += sij0, s2 += s3 * sij0; + } + s0[j - 1][1] += s0[j - 1][0] = y; + if (s1) y -= s2 / s1; + } + s0[j - 1][1] += s0[j - 1][0] = y; + none$1(series, order); + } + + function ascending$2(series) { + var sums = series.map(sum$2); + return none$2(series).sort(function(a, b) { return sums[a] - sums[b]; }); + } + + function sum$2(series) { + var s = 0, i = -1, n = series.length, v; + while (++i < n) if (v = +series[i][1]) s += v; + return s; + } + + function descending$1(series) { + return ascending$2(series).reverse(); + } + + function insideOut(series) { + var n = series.length, + i, + j, + sums = series.map(sum$2), + order = none$2(series).sort(function(a, b) { return sums[b] - sums[a]; }), + top = 0, + bottom = 0, + tops = [], + bottoms = []; + + for (i = 0; i < n; ++i) { + j = order[i]; + if (top < bottom) { + top += sums[j]; + tops.push(j); + } else { + bottom += sums[j]; + bottoms.push(j); + } + } + + return bottoms.reverse().concat(tops); + } + + function reverse(series) { + return none$2(series).reverse(); + } + + function constant$11(x) { + return function() { + return x; + }; + } + + function x$4(d) { + return d[0]; + } + + function y$4(d) { + return d[1]; + } + + function RedBlackTree() { + this._ = null; // root node + } + + function RedBlackNode(node) { + node.U = // parent node + node.C = // color - true for red, false for black + node.L = // left node + node.R = // right node + node.P = // previous node + node.N = null; // next node + } + + RedBlackTree.prototype = { + constructor: RedBlackTree, + + insert: function(after, node) { + var parent, grandpa, uncle; + + if (after) { + node.P = after; + node.N = after.N; + if (after.N) after.N.P = node; + after.N = node; + if (after.R) { + after = after.R; + while (after.L) after = after.L; + after.L = node; + } else { + after.R = node; + } + parent = after; + } else if (this._) { + after = RedBlackFirst(this._); + node.P = null; + node.N = after; + after.P = after.L = node; + parent = after; + } else { + node.P = node.N = null; + this._ = node; + parent = null; + } + node.L = node.R = null; + node.U = parent; + node.C = true; + + after = node; + while (parent && parent.C) { + grandpa = parent.U; + if (parent === grandpa.L) { + uncle = grandpa.R; + if (uncle && uncle.C) { + parent.C = uncle.C = false; + grandpa.C = true; + after = grandpa; + } else { + if (after === parent.R) { + RedBlackRotateLeft(this, parent); + after = parent; + parent = after.U; + } + parent.C = false; + grandpa.C = true; + RedBlackRotateRight(this, grandpa); + } + } else { + uncle = grandpa.L; + if (uncle && uncle.C) { + parent.C = uncle.C = false; + grandpa.C = true; + after = grandpa; + } else { + if (after === parent.L) { + RedBlackRotateRight(this, parent); + after = parent; + parent = after.U; + } + parent.C = false; + grandpa.C = true; + RedBlackRotateLeft(this, grandpa); + } + } + parent = after.U; + } + this._.C = false; + }, + + remove: function(node) { + if (node.N) node.N.P = node.P; + if (node.P) node.P.N = node.N; + node.N = node.P = null; + + var parent = node.U, + sibling, + left = node.L, + right = node.R, + next, + red; + + if (!left) next = right; + else if (!right) next = left; + else next = RedBlackFirst(right); + + if (parent) { + if (parent.L === node) parent.L = next; + else parent.R = next; + } else { + this._ = next; + } + + if (left && right) { + red = next.C; + next.C = node.C; + next.L = left; + left.U = next; + if (next !== right) { + parent = next.U; + next.U = node.U; + node = next.R; + parent.L = node; + next.R = right; + right.U = next; + } else { + next.U = parent; + parent = next; + node = next.R; + } + } else { + red = node.C; + node = next; + } + + if (node) node.U = parent; + if (red) return; + if (node && node.C) { node.C = false; return; } + + do { + if (node === this._) break; + if (node === parent.L) { + sibling = parent.R; + if (sibling.C) { + sibling.C = false; + parent.C = true; + RedBlackRotateLeft(this, parent); + sibling = parent.R; + } + if ((sibling.L && sibling.L.C) + || (sibling.R && sibling.R.C)) { + if (!sibling.R || !sibling.R.C) { + sibling.L.C = false; + sibling.C = true; + RedBlackRotateRight(this, sibling); + sibling = parent.R; + } + sibling.C = parent.C; + parent.C = sibling.R.C = false; + RedBlackRotateLeft(this, parent); + node = this._; + break; + } + } else { + sibling = parent.L; + if (sibling.C) { + sibling.C = false; + parent.C = true; + RedBlackRotateRight(this, parent); + sibling = parent.L; + } + if ((sibling.L && sibling.L.C) + || (sibling.R && sibling.R.C)) { + if (!sibling.L || !sibling.L.C) { + sibling.R.C = false; + sibling.C = true; + RedBlackRotateLeft(this, sibling); + sibling = parent.L; + } + sibling.C = parent.C; + parent.C = sibling.L.C = false; + RedBlackRotateRight(this, parent); + node = this._; + break; + } + } + sibling.C = true; + node = parent; + parent = parent.U; + } while (!node.C); + + if (node) node.C = false; + } + }; + + function RedBlackRotateLeft(tree, node) { + var p = node, + q = node.R, + parent = p.U; + + if (parent) { + if (parent.L === p) parent.L = q; + else parent.R = q; + } else { + tree._ = q; + } + + q.U = parent; + p.U = q; + p.R = q.L; + if (p.R) p.R.U = p; + q.L = p; + } + + function RedBlackRotateRight(tree, node) { + var p = node, + q = node.L, + parent = p.U; + + if (parent) { + if (parent.L === p) parent.L = q; + else parent.R = q; + } else { + tree._ = q; + } + + q.U = parent; + p.U = q; + p.L = q.R; + if (p.L) p.L.U = p; + q.R = p; + } + + function RedBlackFirst(node) { + while (node.L) node = node.L; + return node; + } + + function createEdge(left, right, v0, v1) { + var edge = [null, null], + index = edges.push(edge) - 1; + edge.left = left; + edge.right = right; + if (v0) setEdgeEnd(edge, left, right, v0); + if (v1) setEdgeEnd(edge, right, left, v1); + cells[left.index].halfedges.push(index); + cells[right.index].halfedges.push(index); + return edge; + } + + function createBorderEdge(left, v0, v1) { + var edge = [v0, v1]; + edge.left = left; + return edge; + } + + function setEdgeEnd(edge, left, right, vertex) { + if (!edge[0] && !edge[1]) { + edge[0] = vertex; + edge.left = left; + edge.right = right; + } else if (edge.left === right) { + edge[1] = vertex; + } else { + edge[0] = vertex; + } + } + + // Liang–Barsky line clipping. + function clipEdge(edge, x0, y0, x1, y1) { + var a = edge[0], + b = edge[1], + ax = a[0], + ay = a[1], + bx = b[0], + by = b[1], + t0 = 0, + t1 = 1, + dx = bx - ax, + dy = by - ay, + r; + + r = x0 - ax; + if (!dx && r > 0) return; + r /= dx; + if (dx < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dx > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = x1 - ax; + if (!dx && r < 0) return; + r /= dx; + if (dx < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dx > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + r = y0 - ay; + if (!dy && r > 0) return; + r /= dy; + if (dy < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dy > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = y1 - ay; + if (!dy && r < 0) return; + r /= dy; + if (dy < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dy > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check? + + if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy]; + if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy]; + return true; + } + + function connectEdge(edge, x0, y0, x1, y1) { + var v1 = edge[1]; + if (v1) return true; + + var v0 = edge[0], + left = edge.left, + right = edge.right, + lx = left[0], + ly = left[1], + rx = right[0], + ry = right[1], + fx = (lx + rx) / 2, + fy = (ly + ry) / 2, + fm, + fb; + + if (ry === ly) { + if (fx < x0 || fx >= x1) return; + if (lx > rx) { + if (!v0) v0 = [fx, y0]; + else if (v0[1] >= y1) return; + v1 = [fx, y1]; + } else { + if (!v0) v0 = [fx, y1]; + else if (v0[1] < y0) return; + v1 = [fx, y0]; + } + } else { + fm = (lx - rx) / (ry - ly); + fb = fy - fm * fx; + if (fm < -1 || fm > 1) { + if (lx > rx) { + if (!v0) v0 = [(y0 - fb) / fm, y0]; + else if (v0[1] >= y1) return; + v1 = [(y1 - fb) / fm, y1]; + } else { + if (!v0) v0 = [(y1 - fb) / fm, y1]; + else if (v0[1] < y0) return; + v1 = [(y0 - fb) / fm, y0]; + } + } else { + if (ly < ry) { + if (!v0) v0 = [x0, fm * x0 + fb]; + else if (v0[0] >= x1) return; + v1 = [x1, fm * x1 + fb]; + } else { + if (!v0) v0 = [x1, fm * x1 + fb]; + else if (v0[0] < x0) return; + v1 = [x0, fm * x0 + fb]; + } + } + } + + edge[0] = v0; + edge[1] = v1; + return true; + } + + function clipEdges(x0, y0, x1, y1) { + var i = edges.length, + edge; + + while (i--) { + if (!connectEdge(edge = edges[i], x0, y0, x1, y1) + || !clipEdge(edge, x0, y0, x1, y1) + || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$4 + || Math.abs(edge[0][1] - edge[1][1]) > epsilon$4)) { + delete edges[i]; + } + } + } + + function createCell(site) { + return cells[site.index] = { + site: site, + halfedges: [] + }; + } + + function cellHalfedgeAngle(cell, edge) { + var site = cell.site, + va = edge.left, + vb = edge.right; + if (site === vb) vb = va, va = site; + if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]); + if (site === va) va = edge[1], vb = edge[0]; + else va = edge[0], vb = edge[1]; + return Math.atan2(va[0] - vb[0], vb[1] - va[1]); + } + + function cellHalfedgeStart(cell, edge) { + return edge[+(edge.left !== cell.site)]; + } + + function cellHalfedgeEnd(cell, edge) { + return edge[+(edge.left === cell.site)]; + } + + function sortCellHalfedges() { + for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) { + if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) { + var index = new Array(m), + array = new Array(m); + for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]); + index.sort(function(i, j) { return array[j] - array[i]; }); + for (j = 0; j < m; ++j) array[j] = halfedges[index[j]]; + for (j = 0; j < m; ++j) halfedges[j] = array[j]; + } + } + } + + function clipCells(x0, y0, x1, y1) { + var nCells = cells.length, + iCell, + cell, + site, + iHalfedge, + halfedges, + nHalfedges, + start, + startX, + startY, + end, + endX, + endY, + cover = true; + + for (iCell = 0; iCell < nCells; ++iCell) { + if (cell = cells[iCell]) { + site = cell.site; + halfedges = cell.halfedges; + iHalfedge = halfedges.length; + + // Remove any dangling clipped edges. + while (iHalfedge--) { + if (!edges[halfedges[iHalfedge]]) { + halfedges.splice(iHalfedge, 1); + } + } + + // Insert any border edges as necessary. + iHalfedge = 0, nHalfedges = halfedges.length; + while (iHalfedge < nHalfedges) { + end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1]; + start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1]; + if (Math.abs(endX - startX) > epsilon$4 || Math.abs(endY - startY) > epsilon$4) { + halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end, + Math.abs(endX - x0) < epsilon$4 && y1 - endY > epsilon$4 ? [x0, Math.abs(startX - x0) < epsilon$4 ? startY : y1] + : Math.abs(endY - y1) < epsilon$4 && x1 - endX > epsilon$4 ? [Math.abs(startY - y1) < epsilon$4 ? startX : x1, y1] + : Math.abs(endX - x1) < epsilon$4 && endY - y0 > epsilon$4 ? [x1, Math.abs(startX - x1) < epsilon$4 ? startY : y0] + : Math.abs(endY - y0) < epsilon$4 && endX - x0 > epsilon$4 ? [Math.abs(startY - y0) < epsilon$4 ? startX : x0, y0] + : null)) - 1); + ++nHalfedges; + } + } + + if (nHalfedges) cover = false; + } + } + + // If there weren’t any edges, have the closest site cover the extent. + // It doesn’t matter which corner of the extent we measure! + if (cover) { + var dx, dy, d2, dc = Infinity; + + for (iCell = 0, cover = null; iCell < nCells; ++iCell) { + if (cell = cells[iCell]) { + site = cell.site; + dx = site[0] - x0; + dy = site[1] - y0; + d2 = dx * dx + dy * dy; + if (d2 < dc) dc = d2, cover = cell; + } + } + + if (cover) { + var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0]; + cover.halfedges.push( + edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1, + edges.push(createBorderEdge(site, v01, v11)) - 1, + edges.push(createBorderEdge(site, v11, v10)) - 1, + edges.push(createBorderEdge(site, v10, v00)) - 1 + ); + } + } + + // Lastly delete any cells with no edges; these were entirely clipped. + for (iCell = 0; iCell < nCells; ++iCell) { + if (cell = cells[iCell]) { + if (!cell.halfedges.length) { + delete cells[iCell]; + } + } + } + } + + var circlePool = []; + + var firstCircle; + + function Circle() { + RedBlackNode(this); + this.x = + this.y = + this.arc = + this.site = + this.cy = null; + } + + function attachCircle(arc) { + var lArc = arc.P, + rArc = arc.N; + + if (!lArc || !rArc) return; + + var lSite = lArc.site, + cSite = arc.site, + rSite = rArc.site; + + if (lSite === rSite) return; + + var bx = cSite[0], + by = cSite[1], + ax = lSite[0] - bx, + ay = lSite[1] - by, + cx = rSite[0] - bx, + cy = rSite[1] - by; + + var d = 2 * (ax * cy - ay * cx); + if (d >= -epsilon2$2) return; + + var ha = ax * ax + ay * ay, + hc = cx * cx + cy * cy, + x = (cy * ha - ay * hc) / d, + y = (ax * hc - cx * ha) / d; + + var circle = circlePool.pop() || new Circle; + circle.arc = arc; + circle.site = cSite; + circle.x = x + bx; + circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom + + arc.circle = circle; + + var before = null, + node = circles._; + + while (node) { + if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) { + if (node.L) node = node.L; + else { before = node.P; break; } + } else { + if (node.R) node = node.R; + else { before = node; break; } + } + } + + circles.insert(before, circle); + if (!before) firstCircle = circle; + } + + function detachCircle(arc) { + var circle = arc.circle; + if (circle) { + if (!circle.P) firstCircle = circle.N; + circles.remove(circle); + circlePool.push(circle); + RedBlackNode(circle); + arc.circle = null; + } + } + + var beachPool = []; + + function Beach() { + RedBlackNode(this); + this.edge = + this.site = + this.circle = null; + } + + function createBeach(site) { + var beach = beachPool.pop() || new Beach; + beach.site = site; + return beach; + } + + function detachBeach(beach) { + detachCircle(beach); + beaches.remove(beach); + beachPool.push(beach); + RedBlackNode(beach); + } + + function removeBeach(beach) { + var circle = beach.circle, + x = circle.x, + y = circle.cy, + vertex = [x, y], + previous = beach.P, + next = beach.N, + disappearing = [beach]; + + detachBeach(beach); + + var lArc = previous; + while (lArc.circle + && Math.abs(x - lArc.circle.x) < epsilon$4 + && Math.abs(y - lArc.circle.cy) < epsilon$4) { + previous = lArc.P; + disappearing.unshift(lArc); + detachBeach(lArc); + lArc = previous; + } + + disappearing.unshift(lArc); + detachCircle(lArc); + + var rArc = next; + while (rArc.circle + && Math.abs(x - rArc.circle.x) < epsilon$4 + && Math.abs(y - rArc.circle.cy) < epsilon$4) { + next = rArc.N; + disappearing.push(rArc); + detachBeach(rArc); + rArc = next; + } + + disappearing.push(rArc); + detachCircle(rArc); + + var nArcs = disappearing.length, + iArc; + for (iArc = 1; iArc < nArcs; ++iArc) { + rArc = disappearing[iArc]; + lArc = disappearing[iArc - 1]; + setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); + } + + lArc = disappearing[0]; + rArc = disappearing[nArcs - 1]; + rArc.edge = createEdge(lArc.site, rArc.site, null, vertex); + + attachCircle(lArc); + attachCircle(rArc); + } + + function addBeach(site) { + var x = site[0], + directrix = site[1], + lArc, + rArc, + dxl, + dxr, + node = beaches._; + + while (node) { + dxl = leftBreakPoint(node, directrix) - x; + if (dxl > epsilon$4) node = node.L; else { + dxr = x - rightBreakPoint(node, directrix); + if (dxr > epsilon$4) { + if (!node.R) { + lArc = node; + break; + } + node = node.R; + } else { + if (dxl > -epsilon$4) { + lArc = node.P; + rArc = node; + } else if (dxr > -epsilon$4) { + lArc = node; + rArc = node.N; + } else { + lArc = rArc = node; + } + break; + } + } + } + + createCell(site); + var newArc = createBeach(site); + beaches.insert(lArc, newArc); + + if (!lArc && !rArc) return; + + if (lArc === rArc) { + detachCircle(lArc); + rArc = createBeach(lArc.site); + beaches.insert(newArc, rArc); + newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site); + attachCircle(lArc); + attachCircle(rArc); + return; + } + + if (!rArc) { // && lArc + newArc.edge = createEdge(lArc.site, newArc.site); + return; + } + + // else lArc !== rArc + detachCircle(lArc); + detachCircle(rArc); + + var lSite = lArc.site, + ax = lSite[0], + ay = lSite[1], + bx = site[0] - ax, + by = site[1] - ay, + rSite = rArc.site, + cx = rSite[0] - ax, + cy = rSite[1] - ay, + d = 2 * (bx * cy - by * cx), + hb = bx * bx + by * by, + hc = cx * cx + cy * cy, + vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay]; + + setEdgeEnd(rArc.edge, lSite, rSite, vertex); + newArc.edge = createEdge(lSite, site, null, vertex); + rArc.edge = createEdge(site, rSite, null, vertex); + attachCircle(lArc); + attachCircle(rArc); + } + + function leftBreakPoint(arc, directrix) { + var site = arc.site, + rfocx = site[0], + rfocy = site[1], + pby2 = rfocy - directrix; + + if (!pby2) return rfocx; + + var lArc = arc.P; + if (!lArc) return -Infinity; + + site = lArc.site; + var lfocx = site[0], + lfocy = site[1], + plby2 = lfocy - directrix; + + if (!plby2) return lfocx; + + var hl = lfocx - rfocx, + aby2 = 1 / pby2 - 1 / plby2, + b = hl / plby2; + + if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; + + return (rfocx + lfocx) / 2; + } + + function rightBreakPoint(arc, directrix) { + var rArc = arc.N; + if (rArc) return leftBreakPoint(rArc, directrix); + var site = arc.site; + return site[1] === directrix ? site[0] : Infinity; + } + + var epsilon$4 = 1e-6; + var epsilon2$2 = 1e-12; + var beaches; + var cells; + var circles; + var edges; + + function triangleArea(a, b, c) { + return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]); + } + + function lexicographic(a, b) { + return b[1] - a[1] + || b[0] - a[0]; + } + + function Diagram(sites, extent) { + var site = sites.sort(lexicographic).pop(), + x, + y, + circle; + + edges = []; + cells = new Array(sites.length); + beaches = new RedBlackTree; + circles = new RedBlackTree; + + while (true) { + circle = firstCircle; + if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) { + if (site[0] !== x || site[1] !== y) { + addBeach(site); + x = site[0], y = site[1]; + } + site = sites.pop(); + } else if (circle) { + removeBeach(circle.arc); + } else { + break; + } + } + + sortCellHalfedges(); + + if (extent) { + var x0 = +extent[0][0], + y0 = +extent[0][1], + x1 = +extent[1][0], + y1 = +extent[1][1]; + clipEdges(x0, y0, x1, y1); + clipCells(x0, y0, x1, y1); + } + + this.edges = edges; + this.cells = cells; + + beaches = + circles = + edges = + cells = null; + } + + Diagram.prototype = { + constructor: Diagram, + + polygons: function() { + var edges = this.edges; + + return this.cells.map(function(cell) { + var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); }); + polygon.data = cell.site.data; + return polygon; + }); + }, + + triangles: function() { + var triangles = [], + edges = this.edges; + + this.cells.forEach(function(cell, i) { + if (!(m = (halfedges = cell.halfedges).length)) return; + var site = cell.site, + halfedges, + j = -1, + m, + s0, + e1 = edges[halfedges[m - 1]], + s1 = e1.left === site ? e1.right : e1.left; + + while (++j < m) { + s0 = s1; + e1 = edges[halfedges[j]]; + s1 = e1.left === site ? e1.right : e1.left; + if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) { + triangles.push([site.data, s0.data, s1.data]); + } + } + }); + + return triangles; + }, + + links: function() { + return this.edges.filter(function(edge) { + return edge.right; + }).map(function(edge) { + return { + source: edge.left.data, + target: edge.right.data + }; + }); + }, + + find: function(x, y, radius) { + var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell; + + // Use the previously-found cell, or start with an arbitrary one. + while (!(cell = that.cells[i1])) if (++i1 >= n) return null; + var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy; + + // Traverse the half-edges to find a closer cell, if any. + do { + cell = that.cells[i0 = i1], i1 = null; + cell.halfedges.forEach(function(e) { + var edge = that.edges[e], v = edge.left; + if ((v === cell.site || !v) && !(v = edge.right)) return; + var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy; + if (v2 < d2) d2 = v2, i1 = v.index; + }); + } while (i1 !== null); + + that._found = i0; + + return radius == null || d2 <= radius * radius ? cell.site : null; + } + }; + + function voronoi() { + var x$$1 = x$4, + y$$1 = y$4, + extent = null; + + function voronoi(data) { + return new Diagram(data.map(function(d, i) { + var s = [Math.round(x$$1(d, i, data) / epsilon$4) * epsilon$4, Math.round(y$$1(d, i, data) / epsilon$4) * epsilon$4]; + s.index = i; + s.data = d; + return s; + }), extent); + } + + voronoi.polygons = function(data) { + return voronoi(data).polygons(); + }; + + voronoi.links = function(data) { + return voronoi(data).links(); + }; + + voronoi.triangles = function(data) { + return voronoi(data).triangles(); + }; + + voronoi.x = function(_) { + return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$11(+_), voronoi) : x$$1; + }; + + voronoi.y = function(_) { + return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$11(+_), voronoi) : y$$1; + }; + + voronoi.extent = function(_) { + return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]]; + }; + + voronoi.size = function(_) { + return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]]; + }; + + return voronoi; + } + + function constant$12(x) { + return function() { + return x; + }; + } + + function ZoomEvent(target, type, transform) { + this.target = target; + this.type = type; + this.transform = transform; + } + + function Transform(k, x, y) { + this.k = k; + this.x = x; + this.y = y; + } + + Transform.prototype = { + constructor: Transform, + scale: function(k) { + return k === 1 ? this : new Transform(this.k * k, this.x, this.y); + }, + translate: function(x, y) { + return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y); + }, + apply: function(point) { + return [point[0] * this.k + this.x, point[1] * this.k + this.y]; }, - 'junction': { - 'circular': true, - 'roundabout': true + applyX: function(x) { + return x * this.k + this.x; }, - 'man_made': { - 'piste:halfpipe': true + applyY: function(y) { + return y * this.k + this.y; }, - 'piste:type': { - 'downhill': true, - 'sled': true, - 'yes': true + invert: function(location) { + return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k]; }, - 'waterway': { - 'canal': true, - 'ditch': true, - 'drain': true, - 'river': true, - 'stream': true - } -}; - - -var osmPavedTags = { - 'surface': { - 'paved': true, - 'asphalt': true, - 'concrete': true, - 'concrete:lanes': true, - 'concrete:plates': true + invertX: function(x) { + return (x - this.x) / this.k; }, - 'tracktype': { - 'grade1': true - } -}; - -var wikipedia = [ - [ - "Abkhazian", - "Аҧсшәа", - "ab" - ], - [ - "Achinese", - "Acèh", - "ace" - ], - [ - "Adyghe", - "адыгабзэ", - "ady" - ], - [ - "Afrikaans", - "Afrikaans", - "af" - ], - [ - "Akan", - "Akan", - "ak" - ], - [ - "Alemannisch", - "Alemannisch", - "als" - ], - [ - "Amharic", - "አማርኛ", - "am" - ], - [ - "Aragonese", - "aragonés", - "an" - ], - [ - "Old English", - "Ænglisc", - "ang" - ], - [ - "Arabic", - "العربية", - "ar" - ], - [ - "Aramaic", - "ܐܪܡܝܐ", - "arc" - ], - [ - "Egyptian Arabic", - "مصرى", - "arz" - ], - [ - "Assamese", - "অসমীয়া", - "as" - ], - [ - "Asturian", - "asturianu", - "ast" - ], - [ - "Avaric", - "авар", - "av" - ], - [ - "Aymara", - "Aymar aru", - "ay" - ], - [ - "Azerbaijani", - "azərbaycanca", - "az" - ], - [ - "تۆرکجه", - "تۆرکجه", - "azb" - ], - [ - "Bashkir", - "башҡортса", - "ba" - ], - [ - "Bavarian", - "Boarisch", - "bar" - ], - [ - "Samogitian", - "žemaitėška", - "bat-smg" - ], - [ - "Bikol Central", - "Bikol Central", - "bcl" - ], - [ - "Belarusian", - "беларуская", - "be" - ], - [ - "беларуская (тарашкевіца)‎", - "беларуская (тарашкевіца)‎", - "be-x-old" - ], - [ - "Bulgarian", - "български", - "bg" - ], - [ - "भोजपुरी", - "भोजपुरी", - "bh" - ], - [ - "Bislama", - "Bislama", - "bi" - ], - [ - "Banjar", - "Bahasa Banjar", - "bjn" - ], - [ - "Bambara", - "bamanankan", - "bm" - ], - [ - "Bangla", - "বাংলা", - "bn" - ], - [ - "Tibetan", - "བོད་ཡིག", - "bo" - ], - [ - "Bishnupriya", - "বিষ্ণুপ্রিয়া মণিপুরী", - "bpy" - ], - [ - "Breton", - "brezhoneg", - "br" - ], - [ - "Bosnian", - "bosanski", - "bs" - ], - [ - "Buginese", - "ᨅᨔ ᨕᨘᨁᨗ", - "bug" - ], - [ - "буряад", - "буряад", - "bxr" - ], - [ - "Catalan", - "català", - "ca" - ], - [ - "Chavacano de Zamboanga", - "Chavacano de Zamboanga", - "cbk-zam" - ], - [ - "Min Dong Chinese", - "Mìng-dĕ̤ng-ngṳ̄", - "cdo" - ], - [ - "Chechen", - "нохчийн", - "ce" - ], - [ - "Cebuano", - "Cebuano", - "ceb" - ], - [ - "Chamorro", - "Chamoru", - "ch" - ], - [ - "Cherokee", - "ᏣᎳᎩ", - "chr" - ], - [ - "Cheyenne", - "Tsetsêhestâhese", - "chy" - ], - [ - "Central Kurdish", - "کوردیی ناوەندی", - "ckb" - ], - [ - "Corsican", - "corsu", - "co" - ], - [ - "Cree", - "Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ", - "cr" - ], - [ - "Crimean Turkish", - "qırımtatarca", - "crh" - ], - [ - "Czech", - "čeština", - "cs" - ], - [ - "Kashubian", - "kaszëbsczi", - "csb" - ], - [ - "Church Slavic", - "словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ", - "cu" - ], - [ - "Chuvash", - "Чӑвашла", - "cv" - ], - [ - "Welsh", - "Cymraeg", - "cy" - ], - [ - "Danish", - "dansk", - "da" - ], - [ - "German", - "Deutsch", - "de" - ], - [ - "Zazaki", - "Zazaki", - "diq" - ], - [ - "Lower Sorbian", - "dolnoserbski", - "dsb" - ], - [ - "Divehi", - "ދިވެހިބަސް", - "dv" - ], - [ - "Dzongkha", - "ཇོང་ཁ", - "dz" - ], - [ - "Ewe", - "eʋegbe", - "ee" - ], - [ - "Greek", - "Ελληνικά", - "el" - ], - [ - "Emiliano-Romagnolo", - "emiliàn e rumagnòl", - "eml" - ], - [ - "English", - "English", - "en" - ], - [ - "Esperanto", - "Esperanto", - "eo" - ], - [ - "Spanish", - "español", - "es" - ], - [ - "Estonian", - "eesti", - "et" - ], - [ - "Basque", - "euskara", - "eu" - ], - [ - "Extremaduran", - "estremeñu", - "ext" - ], - [ - "Persian", - "فارسی", - "fa" - ], - [ - "Fulah", - "Fulfulde", - "ff" - ], - [ - "Finnish", - "suomi", - "fi" - ], - [ - "Võro", - "Võro", - "fiu-vro" - ], - [ - "Fijian", - "Na Vosa Vakaviti", - "fj" - ], - [ - "Faroese", - "føroyskt", - "fo" - ], - [ - "French", - "français", - "fr" - ], - [ - "Arpitan", - "arpetan", - "frp" - ], - [ - "Northern Frisian", - "Nordfriisk", - "frr" - ], - [ - "Friulian", - "furlan", - "fur" - ], - [ - "Western Frisian", - "Frysk", - "fy" - ], - [ - "Irish", - "Gaeilge", - "ga" - ], - [ - "Gagauz", - "Gagauz", - "gag" - ], - [ - "Gan Chinese", - "贛語", - "gan" - ], - [ - "Scottish Gaelic", - "Gàidhlig", - "gd" - ], - [ - "Galician", - "galego", - "gl" - ], - [ - "Gilaki", - "گیلکی", - "glk" - ], - [ - "Guarani", - "Avañe'ẽ", - "gn" - ], - [ - "Goan Konkani", - "गोंयची कोंकणी / Gõychi Konknni", - "gom" - ], - [ - "Gothic", - "𐌲𐌿𐍄𐌹𐍃𐌺", - "got" - ], - [ - "Gujarati", - "ગુજરાતી", - "gu" - ], - [ - "Manx", - "Gaelg", - "gv" - ], - [ - "Hausa", - "Hausa", - "ha" - ], - [ - "Hakka Chinese", - "客家語/Hak-kâ-ngî", - "hak" - ], - [ - "Hawaiian", - "Hawaiʻi", - "haw" - ], - [ - "Hebrew", - "עברית", - "he" - ], - [ - "Hindi", - "हिन्दी", - "hi" - ], - [ - "Fiji Hindi", - "Fiji Hindi", - "hif" - ], - [ - "Croatian", - "hrvatski", - "hr" - ], - [ - "Upper Sorbian", - "hornjoserbsce", - "hsb" - ], - [ - "Haitian Creole", - "Kreyòl ayisyen", - "ht" - ], - [ - "Hungarian", - "magyar", - "hu" - ], - [ - "Armenian", - "Հայերեն", - "hy" - ], - [ - "Interlingua", - "interlingua", - "ia" - ], - [ - "Indonesian", - "Bahasa Indonesia", - "id" - ], - [ - "Interlingue", - "Interlingue", - "ie" - ], - [ - "Igbo", - "Igbo", - "ig" - ], - [ - "Inupiaq", - "Iñupiak", - "ik" - ], - [ - "Iloko", - "Ilokano", - "ilo" - ], - [ - "Ido", - "Ido", - "io" - ], - [ - "Icelandic", - "íslenska", - "is" - ], - [ - "Italian", - "italiano", - "it" - ], - [ - "Inuktitut", - "ᐃᓄᒃᑎᑐᑦ/inuktitut", - "iu" - ], - [ - "Japanese", - "日本語", - "ja" - ], - [ - "Jamaican Creole English", - "Patois", - "jam" - ], - [ - "Lojban", - "la .lojban.", - "jbo" - ], - [ - "Javanese", - "Basa Jawa", - "jv" - ], - [ - "Georgian", - "ქართული", - "ka" - ], - [ - "Kara-Kalpak", - "Qaraqalpaqsha", - "kaa" - ], - [ - "Kabyle", - "Taqbaylit", - "kab" - ], - [ - "Kabardian", - "Адыгэбзэ", - "kbd" - ], - [ - "Kongo", - "Kongo", - "kg" - ], - [ - "Kikuyu", - "Gĩkũyũ", - "ki" - ], - [ - "Kazakh", - "қазақша", - "kk" - ], - [ - "Kalaallisut", - "kalaallisut", - "kl" - ], - [ - "Khmer", - "ភាសាខ្មែរ", - "km" - ], - [ - "Kannada", - "ಕನ್ನಡ", - "kn" - ], - [ - "Korean", - "한국어", - "ko" - ], - [ - "Komi-Permyak", - "Перем Коми", - "koi" - ], - [ - "Karachay-Balkar", - "къарачай-малкъар", - "krc" - ], - [ - "Kashmiri", - "कॉशुर / کٲشُر", - "ks" - ], - [ - "Colognian", - "Ripoarisch", - "ksh" - ], - [ - "Kurdish", - "Kurdî", - "ku" - ], - [ - "Komi", - "коми", - "kv" - ], - [ - "Cornish", - "kernowek", - "kw" - ], - [ - "Kyrgyz", - "Кыргызча", - "ky" - ], - [ - "Latin", - "Latina", - "la" - ], - [ - "Ladino", - "Ladino", - "lad" - ], - [ - "Luxembourgish", - "Lëtzebuergesch", - "lb" - ], - [ - "лакку", - "лакку", - "lbe" - ], - [ - "Lezghian", - "лезги", - "lez" - ], - [ - "Ganda", - "Luganda", - "lg" - ], - [ - "Limburgish", - "Limburgs", - "li" - ], - [ - "Ligurian", - "Ligure", - "lij" - ], - [ - "Lombard", - "lumbaart", - "lmo" - ], - [ - "Lingala", - "lingála", - "ln" - ], - [ - "Lao", - "ລາວ", - "lo" - ], - [ - "Northern Luri", - "لۊری شومالی", - "lrc" - ], - [ - "Lithuanian", - "lietuvių", - "lt" - ], - [ - "Latgalian", - "latgaļu", - "ltg" - ], - [ - "Latvian", - "latviešu", - "lv" - ], - [ - "Maithili", - "मैथिली", - "mai" - ], - [ - "Basa Banyumasan", - "Basa Banyumasan", - "map-bms" - ], - [ - "Moksha", - "мокшень", - "mdf" - ], - [ - "Malagasy", - "Malagasy", - "mg" - ], - [ - "Eastern Mari", - "олык марий", - "mhr" - ], - [ - "Maori", - "Māori", - "mi" - ], - [ - "Minangkabau", - "Baso Minangkabau", - "min" - ], - [ - "Macedonian", - "македонски", - "mk" - ], - [ - "Malayalam", - "മലയാളം", - "ml" - ], - [ - "Mongolian", - "монгол", - "mn" - ], - [ - "Marathi", - "मराठी", - "mr" - ], - [ - "Western Mari", - "кырык мары", - "mrj" - ], - [ - "Malay", - "Bahasa Melayu", - "ms" - ], - [ - "Maltese", - "Malti", - "mt" - ], - [ - "Mirandese", - "Mirandés", - "mwl" - ], - [ - "Burmese", - "မြန်မာဘာသာ", - "my" - ], - [ - "Erzya", - "эрзянь", - "myv" - ], - [ - "Mazanderani", - "مازِرونی", - "mzn" - ], - [ - "Nauru", - "Dorerin Naoero", - "na" - ], - [ - "Nāhuatl", - "Nāhuatl", - "nah" - ], - [ - "Neapolitan", - "Napulitano", - "nap" - ], - [ - "Low German", - "Plattdüütsch", - "nds" - ], - [ - "Low Saxon", - "Nedersaksies", - "nds-nl" - ], - [ - "Nepali", - "नेपाली", - "ne" - ], - [ - "Newari", - "नेपाल भाषा", - "new" - ], - [ - "Dutch", - "Nederlands", - "nl" - ], - [ - "Norwegian Nynorsk", - "norsk nynorsk", - "nn" - ], - [ - "Norwegian", - "norsk bokmål", - "no" - ], - [ - "Novial", - "Novial", - "nov" - ], - [ - "Nouormand", - "Nouormand", - "nrm" - ], - [ - "Northern Sotho", - "Sesotho sa Leboa", - "nso" - ], - [ - "Navajo", - "Diné bizaad", - "nv" - ], - [ - "Nyanja", - "Chi-Chewa", - "ny" - ], - [ - "Occitan", - "occitan", - "oc" - ], - [ - "Livvi-Karelian", - "Livvinkarjala", - "olo" - ], - [ - "Oromo", - "Oromoo", - "om" - ], - [ - "Odia", - "ଓଡ଼ିଆ", - "or" - ], - [ - "Ossetic", - "Ирон", - "os" - ], - [ - "Punjabi", - "ਪੰਜਾਬੀ", - "pa" - ], - [ - "Pangasinan", - "Pangasinan", - "pag" - ], - [ - "Pampanga", - "Kapampangan", - "pam" - ], - [ - "Papiamento", - "Papiamentu", - "pap" - ], - [ - "Picard", - "Picard", - "pcd" - ], - [ - "Pennsylvania German", - "Deitsch", - "pdc" - ], - [ - "Palatine German", - "Pälzisch", - "pfl" - ], - [ - "Pali", - "पालि", - "pi" - ], - [ - "Norfuk / Pitkern", - "Norfuk / Pitkern", - "pih" - ], - [ - "Polish", - "polski", - "pl" - ], - [ - "Piedmontese", - "Piemontèis", - "pms" - ], - [ - "Western Punjabi", - "پنجابی", - "pnb" - ], - [ - "Pontic", - "Ποντιακά", - "pnt" - ], - [ - "Pashto", - "پښتو", - "ps" - ], - [ - "Portuguese", - "português", - "pt" - ], - [ - "Quechua", - "Runa Simi", - "qu" - ], - [ - "Romansh", - "rumantsch", - "rm" - ], - [ - "Romani", - "Romani", - "rmy" - ], - [ - "Rundi", - "Kirundi", - "rn" - ], - [ - "Romanian", - "română", - "ro" - ], - [ - "Aromanian", - "armãneashti", - "roa-rup" - ], - [ - "tarandíne", - "tarandíne", - "roa-tara" - ], - [ - "Russian", - "русский", - "ru" - ], - [ - "Rusyn", - "русиньскый", - "rue" - ], - [ - "Kinyarwanda", - "Kinyarwanda", - "rw" - ], - [ - "Sanskrit", - "संस्कृतम्", - "sa" - ], - [ - "Sakha", - "саха тыла", - "sah" - ], - [ - "Sardinian", - "sardu", - "sc" - ], - [ - "Sicilian", - "sicilianu", - "scn" - ], - [ - "Scots", - "Scots", - "sco" - ], - [ - "Sindhi", - "سنڌي", - "sd" - ], - [ - "Northern Sami", - "sámegiella", - "se" - ], - [ - "Sango", - "Sängö", - "sg" - ], - [ - "Serbo-Croatian", - "srpskohrvatski / српскохрватски", - "sh" - ], - [ - "Sinhala", - "සිංහල", - "si" - ], - [ - "Simple English", - "Simple English", - "simple" - ], - [ - "Slovak", - "slovenčina", - "sk" - ], - [ - "Slovenian", - "slovenščina", - "sl" - ], - [ - "Samoan", - "Gagana Samoa", - "sm" - ], - [ - "Shona", - "chiShona", - "sn" - ], - [ - "Somali", - "Soomaaliga", - "so" - ], - [ - "Albanian", - "shqip", - "sq" - ], - [ - "Serbian", - "српски / srpski", - "sr" - ], - [ - "Sranan Tongo", - "Sranantongo", - "srn" - ], - [ - "Swati", - "SiSwati", - "ss" - ], - [ - "Southern Sotho", - "Sesotho", - "st" - ], - [ - "Saterland Frisian", - "Seeltersk", - "stq" - ], - [ - "Sundanese", - "Basa Sunda", - "su" - ], - [ - "Swedish", - "svenska", - "sv" - ], - [ - "Swahili", - "Kiswahili", - "sw" - ], - [ - "Silesian", - "ślůnski", - "szl" - ], - [ - "Tamil", - "தமிழ்", - "ta" - ], - [ - "Tulu", - "ತುಳು", - "tcy" - ], - [ - "Telugu", - "తెలుగు", - "te" - ], - [ - "Tetum", - "tetun", - "tet" - ], - [ - "Tajik", - "тоҷикӣ", - "tg" - ], - [ - "Thai", - "ไทย", - "th" - ], - [ - "Tigrinya", - "ትግርኛ", - "ti" - ], - [ - "Turkmen", - "Türkmençe", - "tk" - ], - [ - "Tagalog", - "Tagalog", - "tl" - ], - [ - "Tswana", - "Setswana", - "tn" - ], - [ - "Tongan", - "lea faka-Tonga", - "to" - ], - [ - "Tok Pisin", - "Tok Pisin", - "tpi" - ], - [ - "Turkish", - "Türkçe", - "tr" - ], - [ - "Tsonga", - "Xitsonga", - "ts" - ], - [ - "Tatar", - "татарча/tatarça", - "tt" - ], - [ - "Tumbuka", - "chiTumbuka", - "tum" - ], - [ - "Twi", - "Twi", - "tw" - ], - [ - "Tahitian", - "reo tahiti", - "ty" - ], - [ - "Tuvinian", - "тыва дыл", - "tyv" - ], - [ - "Udmurt", - "удмурт", - "udm" - ], - [ - "Uyghur", - "ئۇيغۇرچە / Uyghurche", - "ug" - ], - [ - "Ukrainian", - "українська", - "uk" - ], - [ - "Urdu", - "اردو", - "ur" - ], - [ - "Uzbek", - "oʻzbekcha/ўзбекча", - "uz" - ], - [ - "Venda", - "Tshivenda", - "ve" - ], - [ - "Venetian", - "vèneto", - "vec" - ], - [ - "Veps", - "vepsän kel’", - "vep" - ], - [ - "Vietnamese", - "Tiếng Việt", - "vi" - ], - [ - "West Flemish", - "West-Vlams", - "vls" - ], - [ - "Volapük", - "Volapük", - "vo" - ], - [ - "Walloon", - "walon", - "wa" - ], - [ - "Waray", - "Winaray", - "war" - ], - [ - "Wolof", - "Wolof", - "wo" - ], - [ - "Wu Chinese", - "吴语", - "wuu" - ], - [ - "Kalmyk", - "хальмг", - "xal" - ], - [ - "Xhosa", - "isiXhosa", - "xh" - ], - [ - "Mingrelian", - "მარგალური", - "xmf" - ], - [ - "Yiddish", - "ייִדיש", - "yi" - ], - [ - "Yoruba", - "Yorùbá", - "yo" - ], - [ - "Zhuang", - "Vahcuengh", - "za" - ], - [ - "Zeelandic", - "Zeêuws", - "zea" - ], - [ - "Chinese", - "中文", - "zh" - ], - [ - "Classical Chinese", - "文言", - "zh-classical" - ], - [ - "Chinese (Min Nan)", - "Bân-lâm-gú", - "zh-min-nan" - ], - [ - "Cantonese", - "粵語", - "zh-yue" - ], - [ - "Zulu", - "isiZulu", - "zu" - ] -]; - -var wikipedia$1 = Object.freeze({ - default: wikipedia -}); - -var require$$6 = ( wikipedia$1 && wikipedia ) || wikipedia$1; - -var wikipedia$2 = require$$6; - -var amenity = {"arts_centre":{"Świetlica wiejska":{"count":62},"Дом культуры":{"count":182}},"bank":{"ABANCA":{"count":83},"ABN AMRO":{"count":152},"ABSA":{"count":105},"AIB":{"count":85},"ANZ":{"count":378},"ASB Bank":{"count":51},"ATB Financial":{"count":68},"AXA":{"count":106},"Agribank":{"count":58},"Akbank":{"count":129},"Alior Bank":{"count":180},"Allahabad Bank":{"count":52},"Allied Bank":{"count":67},"Alpha Bank":{"count":329},"Andhra Bank":{"count":97},"Antonveneta":{"count":56},"Argenta":{"count":125},"Asia United Bank":{"count":57},"Askari Bank":{"count":71},"Associated Bank":{"count":55},"Axis Bank":{"count":198},"BAC":{"count":77},"BAWAG PSK":{"count":97},"BB&T":{"count":418},"BBBank":{"count":58},"BBK":{"count":122},"BBVA":{"count":1445},"BBVA Bancomer":{"count":157},"BBVA Compass":{"count":80},"BBVA Continental":{"count":74},"BBVA Francés":{"count":158},"BCA":{"count":135},"BCI":{"count":140},"BCP":{"count":226},"BCR":{"count":232},"BDO":{"count":538},"BGŻ BNP Paribas":{"count":74},"BMCE":{"count":53},"BMN":{"count":88},"BMO":{"count":339},"BMO Harris Bank":{"count":72},"BNA":{"count":70},"BNI":{"count":136},"BNL":{"count":159},"BNP Paribas":{"count":1165},"BNP Paribas Fortis":{"count":303},"BOC":{"count":95},"BPH":{"count":63},"BPI":{"count":579},"BPI Family Savings Bank":{"count":54},"BRD":{"count":276},"BRED":{"count":70},"BRI":{"count":209},"BW-Bank":{"count":95},"BZ WBK":{"count":156},"Banamex":{"count":356},"Banc Sabadell":{"count":175},"Banca Intesa":{"count":92},"Banca March":{"count":51},"Banca Popolare di Milano":{"count":99},"Banca Popolare di Novara":{"count":79},"Banca Popolare di Sondrio":{"count":105},"Banca Popolare di Verona":{"count":59},"Banca Popolare di Vicenza":{"count":119},"Banca Românească":{"count":61},"Banca Sella":{"count":56},"Banca Transilvania":{"count":167},"Banco Agrario":{"count":58},"Banco Azteca":{"count":119},"Banco BCI":{"count":74},"Banco Bradesco":{"count":226},"Banco Continental":{"count":64},"Banco Estado":{"count":153},"Banco Fassil":{"count":59},"Banco G&T Continental":{"count":84},"Banco General":{"count":53},"Banco Industrial":{"count":91},"Banco Internacional":{"count":62},"Banco Itaú":{"count":351},"Banco Nacional":{"count":143},"Banco Nación":{"count":149},"Banco Pastor":{"count":74},"Banco Pichincha":{"count":109},"Banco Popular":{"count":619},"Banco Provincia":{"count":138},"Banco Sabadell":{"count":189},"Banco Santander":{"count":112},"Banco Sol":{"count":74},"Banco de Bogotá":{"count":74},"Banco de Chile":{"count":175},"Banco de Costa Rica":{"count":123},"Banco de Desarrollo Banrural":{"count":85},"Banco de Occidente":{"count":67},"Banco de Venezuela":{"count":76},"Banco de la Nación":{"count":156},"Banco de la Nación Argentina":{"count":166},"Banco di Napoli":{"count":79},"Banco di Sardegna":{"count":79},"Banco do Brasil":{"count":1313},"Banco do Nordeste":{"count":56},"BancoEstado":{"count":121},"Bancolombia":{"count":170},"Bancomer":{"count":227},"Bancpost":{"count":77},"Banesco":{"count":209},"Bangkok Bank":{"count":69},"Bank Al Habib":{"count":52},"Bank Alfalah":{"count":63},"Bank Austria":{"count":123},"Bank BCA":{"count":71},"Bank BNI":{"count":67},"Bank BPH":{"count":56},"Bank BRI":{"count":196},"Bank Danamon":{"count":60},"Bank Mandiri":{"count":232},"Bank Mega":{"count":54},"Bank Spółdzielczy":{"count":395},"Bank Zachodni WBK":{"count":103},"Bank of Africa":{"count":59},"Bank of America":{"count":1787},"Bank of Baroda":{"count":122},"Bank of Ceylon":{"count":74},"Bank of China":{"count":152},"Bank of Commerce":{"count":69},"Bank of India":{"count":113},"Bank of Ireland":{"count":151},"Bank of Montreal":{"count":157},"Bank of New Zealand":{"count":63},"Bank of Scotland":{"count":122},"Bank of the West":{"count":173},"Bankia":{"count":613},"Bankinter":{"count":139},"Banner Bank":{"count":53},"Banorte":{"count":260},"Banque Atlantique":{"count":57},"Banque Nationale":{"count":137},"Banque Populaire":{"count":919},"Banrisul":{"count":101},"Banrural":{"count":84},"Barclays":{"count":1243},"Bcc":{"count":54},"Belfius":{"count":285},"Bendigo Bank":{"count":140},"Berliner Volksbank":{"count":73},"Bicentenario":{"count":173},"Bradesco":{"count":751},"Budapest Bank":{"count":56},"CBAO":{"count":53},"CEC Bank":{"count":121},"CGD":{"count":52},"CIB Bank":{"count":64},"CIBC":{"count":574},"CIC":{"count":742},"CIMB Bank":{"count":64},"CNEP":{"count":52},"Caisse Desjardins":{"count":69},"Caisse d'Épargne":{"count":1607},"Caixa":{"count":239},"Caixa Econômica Federal":{"count":573},"Caixa Geral de Depósitos":{"count":231},"CaixaBank":{"count":343},"Caja Círculo":{"count":68},"Caja Duero":{"count":90},"Caja España":{"count":74},"Caja Rural":{"count":216},"Caja Rural de Jaén":{"count":55},"CajaSur":{"count":73},"Cajamar":{"count":216},"Cajero Automatico Bancared":{"count":123},"Canara Bank":{"count":270},"Capital One":{"count":199},"Carige":{"count":57},"Cariparma":{"count":69},"Cassa di Risparmio del Veneto":{"count":102},"CatalunyaCaixa":{"count":107},"Central Bank of India":{"count":60},"Chase":{"count":1658},"China Bank":{"count":156},"China Bank Savings":{"count":54},"China Construction Bank":{"count":68},"Citibank":{"count":485},"Citizens Bank":{"count":248},"Clydesdale Bank":{"count":55},"Columbia Bank":{"count":79},"Comerica Bank":{"count":67},"Commerce Bank":{"count":61},"Commercial Bank":{"count":75},"Commercial Bank of Ceylon PLC":{"count":100},"Commerzbank":{"count":879},"Commonwealth Bank":{"count":376},"Corporation Bank":{"count":92},"Credem":{"count":77},"Credicoop":{"count":111},"Credit Agricole":{"count":104},"Credit Suisse":{"count":93},"Crelan":{"count":53},"Crédit Agricole":{"count":2544},"Crédit Mutuel":{"count":1129},"Crédit Mutuel de Bretagne":{"count":368},"Crédit du Nord":{"count":148},"Crédito Agrícola":{"count":87},"Cбербанк":{"count":74},"Danske Bank":{"count":157},"Davivienda":{"count":172},"De Venezuela":{"count":87},"Denizbank":{"count":58},"Desjardins":{"count":80},"Deutsche Bank":{"count":995},"Dubai Islamic Bank":{"count":71},"EastWest Bank":{"count":127},"Ecobank":{"count":197},"Erste Bank":{"count":200},"Eurobank":{"count":261},"Express Union":{"count":58},"FNB":{"count":143},"Federal Bank":{"count":88},"Fifth Third Bank":{"count":234},"Finansbank":{"count":68},"First Bank":{"count":91},"First Citizens Bank":{"count":88},"First National Bank":{"count":209},"Galicia":{"count":179},"Garanti":{"count":58},"Garanti Bankası":{"count":82},"Getin Bank":{"count":112},"Groupama":{"count":61},"HDFC Bank":{"count":219},"HNB":{"count":67},"HSBC":{"count":1748},"Halifax":{"count":367},"Halkbank":{"count":74},"Hamburger Sparkasse":{"count":159},"Handelsbanken":{"count":250},"Hong Leong Bank":{"count":51},"Hrvatska poštanska banka":{"count":54},"Huntington Bank":{"count":110},"HypoVereinsbank":{"count":408},"ICBC":{"count":158},"ICICI Bank":{"count":224},"IDBI Bank":{"count":73},"ING":{"count":654},"ING Bank Śląski":{"count":128},"IberCaja":{"count":209},"Indian Bank":{"count":98},"Indian Overseas Bank":{"count":108},"Interbank":{"count":131},"Intesa San Paolo":{"count":257},"Itaú":{"count":726},"K&H Bank":{"count":75},"KBC":{"count":273},"Kasa Stefczyka":{"count":65},"Key Bank":{"count":382},"Komerční banka":{"count":180},"Kreissparkasse":{"count":600},"Kreissparkasse Köln":{"count":69},"Kutxabank":{"count":68},"LCL":{"count":903},"La Banque Postale":{"count":124},"La Caixa":{"count":1144},"Laboral Kutxa":{"count":66},"Landbank":{"count":115},"Liberbank":{"count":164},"Lloyds Bank":{"count":612},"M&T Bank":{"count":184},"MCB":{"count":62},"MCB Bank":{"count":54},"MONETA Money Bank":{"count":92},"Macro":{"count":174},"Maybank":{"count":234},"Meezan Bank":{"count":63},"Mercantil":{"count":132},"Metro Bank":{"count":57},"Metrobank":{"count":434},"Millennium BCP":{"count":119},"Millennium Bank":{"count":386},"Monte dei Paschi di Siena":{"count":265},"Montepio":{"count":113},"NAB":{"count":205},"NSB":{"count":51},"NatWest":{"count":800},"National Bank":{"count":147},"Nationwide":{"count":337},"Nedbank":{"count":100},"Nordea":{"count":331},"Novo Banco":{"count":101},"OLB":{"count":57},"OTP":{"count":362},"Oberbank":{"count":103},"Occidental de Descuento":{"count":68},"Oldenburgische Landesbank":{"count":68},"One Network Bank":{"count":91},"Osuuspankki":{"count":89},"PBZ":{"count":65},"PKO":{"count":58},"PKO BP":{"count":561},"PNB":{"count":323},"PNC":{"count":52},"PNC Bank":{"count":639},"PSBank":{"count":108},"Patagonia":{"count":94},"Pekao SA":{"count":155},"Peoples Bank":{"count":254},"Philippine National Bank":{"count":69},"Piraeus Bank":{"count":96},"Popular":{"count":104},"Postbank":{"count":567},"Postbank Finanzcenter":{"count":65},"Provincial":{"count":135},"Public Bank":{"count":90},"Punjab National Bank":{"count":134},"RBC":{"count":487},"RBC Financial Group":{"count":59},"RBS":{"count":190},"RCBC":{"count":144},"RCBC Savings Bank":{"count":84},"Rabobank":{"count":557},"Raiffeisen Polbank":{"count":78},"Raiffeisenbank":{"count":2705},"Regions Bank":{"count":204},"Republic Bank":{"count":85},"Royal Bank":{"count":90},"Royal Bank of Canada":{"count":56},"Royal Bank of Scotland":{"count":129},"SEB":{"count":129},"SNS Bank":{"count":58},"Sabadell":{"count":97},"Sampath Bank":{"count":87},"Santander":{"count":3268},"Santander Consumer Bank":{"count":109},"Santander Río":{"count":239},"Santander Totta":{"count":201},"Sberbank":{"count":135},"Scotiabank":{"count":1144},"Security Bank":{"count":171},"Sicredi":{"count":94},"Slovenská sporiteľňa":{"count":165},"Société Générale":{"count":1136},"Sparda-Bank":{"count":277},"Sparkasse":{"count":4667},"Sparkasse Aachen":{"count":56},"Sparkasse KölnBonn":{"count":76},"Stadtsparkasse":{"count":68},"Stanbic Bank":{"count":63},"Standard Bank":{"count":165},"Standard Chartered":{"count":95},"Standard Chartered Bank":{"count":74},"State Bank of India":{"count":1013},"SunTrust":{"count":322},"Supervielle":{"count":72},"Swedbank":{"count":252},"Syndicate Bank":{"count":118},"TCF Bank":{"count":85},"TD Bank":{"count":425},"TD Canada Trust":{"count":675},"TEB":{"count":56},"TSB":{"count":259},"Takarékszövetkezet":{"count":120},"Targobank":{"count":279},"Tatra banka":{"count":70},"Türkiye İş Bankası":{"count":53},"UBS":{"count":169},"UCO Bank":{"count":51},"UCPB":{"count":122},"UOB":{"count":126},"US Bank":{"count":723},"Ulster Bank":{"count":100},"Umpqua Bank":{"count":103},"UniCredit Bank":{"count":548},"Unicaja Banco":{"count":182},"Unicredit Banca":{"count":496},"Union Bank":{"count":304},"United Bank":{"count":68},"VR-Bank":{"count":506},"Vakıfbank":{"count":85},"Veneto Banca":{"count":73},"Vijaya Bank":{"count":56},"Volks- und Raiffeisenbank":{"count":53},"Volksbank":{"count":2665},"Volksbank Mittelhessen":{"count":53},"Volksbank Raiffeisenbank":{"count":63},"VÚB":{"count":105},"Washington Federal":{"count":65},"Wells Fargo":{"count":1947},"Western Union":{"count":440},"Westpac":{"count":322},"Yorkshire Bank":{"count":95},"Yorkshire Building Society":{"count":69},"Zagrebačka banka":{"count":54},"Ziraat Bankası":{"count":172},"mBank":{"count":70},"ČSOB":{"count":211},"Česká spořitelna":{"count":243},"İş Bankası":{"count":112},"Εθνική Τράπεζα":{"count":103},"Πειραιώς":{"count":120},"Τράπεζα Πειραιώς":{"count":104},"Авангард":{"count":76},"Альфа-Банк":{"count":301},"Банк Москвы":{"count":176},"Банка ДСК":{"count":63},"Белагропромбанк":{"count":184},"Беларусбанк":{"count":570},"Белинвестбанк":{"count":78},"Бинбанк":{"count":114},"ВТБ":{"count":80},"ВТБ24":{"count":545},"Возрождение":{"count":81},"Газпромбанк":{"count":161},"Генбанк":{"count":83},"Казкоммерцбанк":{"count":74},"МДМ Банк":{"count":52},"Московский индустриальный банк":{"count":53},"Мособлбанк":{"count":54},"Народный банк":{"count":63},"ОТП Банк":{"count":54},"Открытие":{"count":92},"Ощадбанк":{"count":883},"ПУМБ":{"count":78},"Почта Банк":{"count":65},"ПриватБанк":{"count":1018},"Приватбанк":{"count":76},"Приднестровский Сбербанк":{"count":59},"Приорбанк":{"count":69},"Промсвязьбанк":{"count":133},"РНКБ":{"count":124},"Райффайзен":{"count":65},"Райффайзен Банк Аваль":{"count":125},"Райффайзенбанк":{"count":52},"Росбанк":{"count":218},"Россельхозбанк":{"count":374},"Русский стандарт":{"count":55},"Сбербанк":{"count":6921},"Совкомбанк":{"count":186},"УкрСиббанк":{"count":213},"Укрсоцбанк":{"count":57},"Уралсиб":{"count":130},"Хоум Кредит":{"count":53},"בנק הפועלים":{"count":112},"בנק לאומי":{"count":83},"بانک":{"count":219},"بانک آینده":{"count":58},"بانک اقتصاد نوین":{"count":78},"بانک انصار":{"count":99},"بانک تجارت":{"count":365},"بانک رفاه":{"count":138},"بانک رفاه کارگران":{"count":72},"بانک سپه":{"count":348},"بانک شهر":{"count":93},"بانک صادرات":{"count":492},"بانک قوامین":{"count":110},"بانک مسکن":{"count":263},"بانک ملت":{"count":428},"بانک ملی":{"count":561},"بانک ملی ایران":{"count":80},"بانک مهر اقتصاد":{"count":92},"بانک پارسیان":{"count":103},"بانک پاسارگاد":{"count":107},"بانک کشاورزی":{"count":277},"صادرات":{"count":85},"ملی":{"count":67},"پست بانک":{"count":71},"ธนาคารกรุงเทพ":{"count":121},"ธนาคารกรุงไทย":{"count":85},"ธนาคารกสิกรไทย":{"count":108},"ธนาคารออมสิน":{"count":71},"ธนาคารไทยพาณิชย์":{"count":95},"みずほ銀行":{"count":255},"りそな銀行":{"count":135},"三井住友銀行":{"count":204},"三菱東京UFJ銀行":{"count":235},"中国农业银行":{"count":198},"中国工商银行":{"count":181},"中国建设银行":{"count":158},"中国邮政储蓄银行":{"count":76},"中国银行":{"count":275},"交通银行":{"count":68},"京都中央信用金庫":{"count":53},"京都銀行":{"count":66},"农业银行":{"count":78},"北海道銀行":{"count":51},"合作金庫銀行":{"count":55},"土地銀行":{"count":54},"工商银行":{"count":160},"建设银行":{"count":89},"彰化銀行":{"count":53},"招商银行":{"count":94},"横浜銀行":{"count":92},"第一銀行":{"count":78},"華南銀行":{"count":52},"국민은행":{"count":199,"tags":{"name:en":"Gungmin Bank"}},"기업은행":{"count":53},"농협":{"count":148},"새마을금고":{"count":102},"신한은행":{"count":245,"tags":{"name:en":"Sinhan Bank"}},"우리은행":{"count":316,"tags":{"name:en":"Uri Bank"}},"하나은행":{"count":85}},"bar":{"Bar Centrale":{"count":141},"Bar Sport":{"count":90},"Beach Bar":{"count":80},"Pool Bar":{"count":54}},"bicycle_rental":{"Bicing":{"count":130},"Call a Bike":{"count":95},"Grid":{"count":51},"Mibici":{"count":116},"metropolradruhr":{"count":91}},"bureau_de_change":{"Abitab":{"count":55},"Change":{"count":51},"Travelex":{"count":75},"Western Union":{"count":189}},"cafe":{"85度C":{"count":128},"Bar Centrale":{"count":77},"Bar Kafe":{"count":253},"Barista":{"count":65},"Bistro":{"count":60},"Bonafide":{"count":63},"Cafe Coffee Day":{"count":239},"Cafe Nero":{"count":52},"Cafeteria":{"count":579},"Cafetería":{"count":61},"Caffè Nero":{"count":316},"Café Amazon":{"count":241},"Café Central":{"count":115},"Café de la Place":{"count":55},"Café des Sports":{"count":71},"Caribou Coffee":{"count":184},"Coffee Fellows":{"count":77},"Coffee House":{"count":71},"Coffee Island":{"count":51},"Coffee Time":{"count":133},"Costa":{"count":1403},"Country Style":{"count":58},"Dolce Vita":{"count":55},"Dunkin' Donuts":{"count":1662,"tags":{"cuisine":"donut"}},"Eiscafe Dolomiti":{"count":51},"Eiscafe Venezia":{"count":237},"Espresso House":{"count":122},"Havanna":{"count":81},"Internet Cafe":{"count":95},"Jamba Juice":{"count":86},"Kafe":{"count":55},"Krispy Kreme":{"count":63},"Le Pain Quotidien":{"count":59},"McCafé":{"count":72,"tags":{"amenity":"cafe","cuisine":"coffee_shop"}},"Peet's Coffee & Tea":{"count":82},"Pret A Manger":{"count":174},"Prime":{"count":51},"Second Cup":{"count":234},"Segafredo":{"count":103},"Starbucks":{"count":8463,"tags":{"cuisine":"coffee_shop"}},"Subway":{"count":114},"Tchibo":{"count":168},"The Coffee Bean & Tea Leaf":{"count":93},"The Coffee Club":{"count":81},"Tim Hortons":{"count":1945},"Traveler's Coffee":{"count":70},"Venezia":{"count":55},"Wayne's Coffee":{"count":52},"Берёзка":{"count":52},"Бистро":{"count":84},"Буфет":{"count":56},"Встреча":{"count":83},"Даблби":{"count":59},"Закусочная":{"count":101},"Кофе Хауз":{"count":119},"Кофейня":{"count":78},"Лакомка":{"count":62},"Летнее кафе":{"count":61},"Оазис":{"count":54},"Пельменная":{"count":63},"Пиццерия":{"count":60},"Рандеву":{"count":54},"Сказка":{"count":66},"Смак":{"count":62},"Старбакс":{"count":55},"Столовая":{"count":1181},"Теремок":{"count":64},"Уют":{"count":115},"Хуторок":{"count":59},"Шашлычная":{"count":153},"Шоколад":{"count":54},"Шоколадница":{"count":252},"ארומה":{"count":64},"مقهى":{"count":136},"คาเฟ่ อเมซอน":{"count":59},"エクセルシオール カフェ":{"count":61},"カフェ・ド・クリエ":{"count":80,"tags":{"name:en":"Cafe de CRIE"}},"カフェ・ベローチェ":{"count":105},"コメダ珈琲店":{"count":179},"サンマルクカフェ":{"count":156},"スターバックス":{"count":558,"tags":{"name:en":"Starbucks"}},"タリーズコーヒー":{"count":243},"ドトールコーヒーショップ":{"count":489},"星巴克":{"count":146},"스타벅스":{"count":52}},"car_rental":{"Alamo":{"count":57},"Avis":{"count":604},"Budget":{"count":218},"Enterprise":{"count":594},"Enterprise Rent-a-Car":{"count":51},"Europcar":{"count":611},"Hertz":{"count":654},"Localiza":{"count":59},"Sixt":{"count":323},"Thrifty":{"count":81},"U-Haul":{"count":94},"オリックスレンタカー":{"count":54},"トヨタレンタカー":{"count":57},"トヨタレンタリース":{"count":63},"ニッポンレンタカー":{"count":113}},"car_wash":{"Aral":{"count":88},"Autolavaggio":{"count":52},"BP":{"count":63},"Esso":{"count":55},"H-E-B Car Wash":{"count":71},"Intermarché":{"count":60},"Lavage Auto":{"count":60},"Lavazh":{"count":52},"Myjnia":{"count":54},"Myjnia bezdotykowa":{"count":93},"Myjnia samochodowa":{"count":66},"Shell":{"count":162},"Spălătorie Auto":{"count":69},"Spălătorie auto":{"count":52},"Автомийка":{"count":63}},"cinema":{"Cinema City":{"count":61},"Cinemark":{"count":87},"Cinemex":{"count":70},"Cinepolis":{"count":59},"Cineworld":{"count":64},"Odeon":{"count":81}},"clinic":{"ФАП":{"count":162}},"dentist":{"Aspen Dental":{"count":73},"Family Dentistry":{"count":51},"Vitaldent":{"count":54},"Стоматолог":{"count":72},"Стоматологія":{"count":66}},"doctors":{"Háziorvosi rendelő":{"count":54},"Инвитро":{"count":115},"ФАП":{"count":147}},"driving_school":{"Автодром":{"count":55}},"fast_food":{"A&W":{"count":614},"Ali Baba":{"count":101},"Angel's Burger":{"count":66},"Antalya":{"count":53},"Arby's":{"count":1432},"Asia Bistro":{"count":53},"Asia Wok":{"count":53},"Baskin-Robbins":{"count":262,"tags":{"amenity":"ice_cream"}},"Bistro":{"count":80},"Bob's":{"count":83},"Bojangles":{"count":89},"Booster Juice":{"count":76},"Boston Market":{"count":107},"Braum's":{"count":58},"Burger King":{"count":6601,"tags":{"cuisine":"burger"}},"Burger Machine":{"count":55},"Büfé":{"count":72},"Captain D's":{"count":56},"Carl's Jr.":{"count":593,"tags":{"cuisine":"burger"}},"Checkers":{"count":102},"Chick-fil-A":{"count":906,"tags":{"cuisine":"chicken"}},"Chicken Express":{"count":67},"Chipotle":{"count":688,"tags":{"cuisine":"mexican"}},"Chowking":{"count":250},"Church's Chicken":{"count":249},"CoCo壱番屋":{"count":218},"Cold Stone Creamery":{"count":72},"Cook Out":{"count":81},"Culver's":{"count":541},"DQ":{"count":66},"Dairy Queen":{"count":1485},"Del Taco":{"count":244},"Ditsch":{"count":55},"Domino's Pizza":{"count":2577,"tags":{"cuisine":"pizza"}},"Dunkin' Donuts":{"count":747,"tags":{"cuisine":"donut"}},"El Pollo Loco":{"count":132},"Everest":{"count":59},"Extreme Pita":{"count":58},"Fazoli's":{"count":53},"Firehouse Subs":{"count":147},"Fish & Chips":{"count":185},"Fish and Chips":{"count":55},"Five Guys":{"count":457},"Greenwich":{"count":83},"Habib's":{"count":87},"Hallo Pizza":{"count":98},"Hardee's":{"count":634,"tags":{"cuisine":"burger"}},"Harvey's":{"count":158},"Hesburger":{"count":164},"Hungry Jacks":{"count":261,"tags":{"cuisine":"burger"}},"In-N-Out Burger":{"count":211},"Istanbul":{"count":96},"Istanbul Kebab":{"count":59},"Jack in the Box":{"count":951,"tags":{"cuisine":"burger"}},"Jamba Juice":{"count":148},"Jersey Mike's Subs":{"count":88},"Jimmy John's":{"count":519,"tags":{"cuisine":"sandwich"}},"Jollibee":{"count":740},"KFC":{"count":6003,"tags":{"cuisine":"chicken"}},"KFC/Taco Bell":{"count":70},"Kebab House":{"count":74},"Kebabai":{"count":64},"Kochlöffel":{"count":78},"Kotipizza":{"count":89},"Krispy Kreme":{"count":63},"Krystal":{"count":53},"Little Caesars":{"count":567},"Little Caesars Pizza":{"count":82},"Long John Silver's":{"count":200},"Lotteria":{"count":67},"Max":{"count":54},"McDonald's":{"count":18327,"tags":{"cuisine":"burger"}},"Minute Burger":{"count":53},"Mr. Sub":{"count":153},"New York Pizza":{"count":65},"Nordsee":{"count":198},"Panda Express":{"count":593,"tags":{"cuisine":"chinese"}},"Panera Bread":{"count":120},"Papa John's":{"count":820,"tags":{"cuisine":"pizza"}},"Papa Murphy's":{"count":100},"Pinulito":{"count":58},"Pita Pit":{"count":150},"Pizza Hut":{"count":1503,"tags":{"cuisine":"pizza"}},"Pizza Hut Delivery":{"count":70},"Pizza King":{"count":56},"Pizza Nova":{"count":90},"Pizza Pizza":{"count":411},"Pollo Campero":{"count":134},"Pollo Granjero":{"count":66},"Popeye's":{"count":521,"tags":{"cuisine":"chicken"}},"Popeyes Louisiana Kitchen":{"count":51},"Qdoba":{"count":91},"Quick":{"count":434},"Quiznos":{"count":401},"Rally's":{"count":68},"Red Rooster":{"count":192},"Sbarro":{"count":65},"Schlotzsky's Deli":{"count":348},"Sibylla":{"count":74},"Sonic":{"count":1166,"tags":{"cuisine":"burger"}},"Starbucks":{"count":60,"tags":{"cuisine":"coffee_shop"}},"Steers":{"count":190},"Subway":{"count":11431},"Taco Bell":{"count":2947,"tags":{"cuisine":"mexican"}},"Taco Bueno":{"count":59},"Taco Cabana":{"count":57},"Taco Del Mar":{"count":57},"Taco John's":{"count":141},"Taco Time":{"count":171},"Telepizza":{"count":323},"Thai Express":{"count":63},"The Pizza Company":{"count":62},"Waffle House":{"count":86},"Wendy's":{"count":3036,"tags":{"cuisine":"burger"}},"Whataburger":{"count":815},"White Castle":{"count":149},"Wienerschnitzel":{"count":61},"Wimpy":{"count":168},"Zaxby's":{"count":185},"Γρηγόρης":{"count":59},"Бистро":{"count":61},"Бургер Кинг":{"count":181},"Крошка Картошка":{"count":77},"Макдоналдс":{"count":469,"tags":{"name:en":"McDonald's"}},"Робин Сдобин":{"count":131},"Русский Аппетит":{"count":129},"Сабвэй":{"count":73},"Стардог!s":{"count":66},"Теремок":{"count":155},"Шаверма":{"count":93},"Шаурма":{"count":265},"かっぱ寿司":{"count":84},"かつや":{"count":58},"くら寿司":{"count":99},"すき家":{"count":571,"tags":{"name:en":"SUKIYA"}},"なか卯":{"count":180},"ほっかほっか亭":{"count":57},"ほっともっと":{"count":168},"オリジン弁当":{"count":93},"ケンタッキーフライドチキン":{"count":334,"tags":{"cuisine":"chicken","name:en":"KFC"}},"サブウェイ":{"count":74},"スシロー":{"count":94},"マクドナルド":{"count":1261,"tags":{"cuisine":"burger","name:en":"McDonald's"}},"ミスタードーナツ":{"count":188},"モスバーガー":{"count":507,"tags":{"name:en":"MOS BURGER"}},"ロッテリア":{"count":97},"丸亀製麺":{"count":57},"吉野家":{"count":461},"幸楽苑":{"count":80},"摩斯漢堡":{"count":86},"松屋":{"count":574,"tags":{"name:en":"Matsuya"}},"肯德基":{"count":197},"麥當勞":{"count":224},"麦当劳":{"count":97},"롯데리아":{"count":83}},"fuel":{"76":{"count":603},"1-2-3":{"count":75},"7-Eleven":{"count":1013},"ABC":{"count":83},"ADNOC":{"count":76},"ANP":{"count":202},"ARAL":{"count":68},"Aegean":{"count":56},"Afriquia":{"count":134},"Agip":{"count":2348},"Agrola":{"count":99},"Alon":{"count":54},"Alpet":{"count":61},"Api":{"count":234},"Aral":{"count":1708},"Arco":{"count":585},"Asda":{"count":51},"Auchan":{"count":84},"Avanti":{"count":112},"Avia":{"count":1061},"BEBECO":{"count":77},"BFT":{"count":102},"BHPetrol":{"count":60},"BP":{"count":4069},"BR":{"count":165},"Bangchak":{"count":106},"Benzina":{"count":167},"Bharat Petroleum":{"count":230},"Bliska":{"count":141},"CAMPSA":{"count":420},"CARREFOUR":{"count":61},"CEPSA":{"count":892},"CNG":{"count":373},"Caltex":{"count":1574},"Campsa":{"count":64},"Canadian Tire":{"count":97},"Carrefour":{"count":372},"Casey's General Store":{"count":385},"Cenex":{"count":222},"Cepsa":{"count":305},"Ceypetco":{"count":70},"Chevron":{"count":1781},"Circle K":{"count":730},"Citgo":{"count":692},"Clark":{"count":56},"Co-op":{"count":52},"Coles Express":{"count":305},"Conoco":{"count":398},"Coop":{"count":71},"Copec":{"count":566},"Copetrol":{"count":119},"Cosmo":{"count":68},"Costco Gasoline":{"count":203},"Couche-Tard":{"count":54},"Crodux":{"count":51},"Cumberland Farms":{"count":93},"Delta":{"count":157},"Diamond Shamrock":{"count":51},"Drummed Fuel":{"count":178},"E. Leclerc":{"count":136},"EKO":{"count":224},"ENEOS":{"count":1600},"ENI":{"count":92},"ERG":{"count":71},"Elan":{"count":208},"Eneos":{"count":130},"Engen":{"count":383},"Eni":{"count":681},"Erg":{"count":469},"Esso":{"count":4742},"Esso Express":{"count":176},"EuroOil":{"count":52},"Exxon":{"count":1064},"F24":{"count":67},"Firezone":{"count":66},"Flying V":{"count":175},"GALP":{"count":788},"Gazprom":{"count":68},"GetGo":{"count":54},"Goil":{"count":78},"Gulf":{"count":416},"H-E-B Fuel":{"count":51},"H-E-B Gas":{"count":155},"HEM":{"count":276},"HP":{"count":163},"HP Petrol Pump":{"count":53},"Helios":{"count":63},"Hess":{"count":195},"Hindustan Petroleum":{"count":82},"Holiday":{"count":156},"Husky":{"count":244},"IES":{"count":57},"IP":{"count":993},"Independent Fuel Station":{"count":52},"Indian Oil":{"count":416},"Indipend.":{"count":129},"Ingo":{"count":62},"Intermarché":{"count":556},"Intermarché Super":{"count":102},"Ipiranga":{"count":173},"Irving":{"count":194},"JA-SS":{"count":74},"JOMO":{"count":51},"Jet":{"count":707},"Jetti":{"count":61},"Kangaroo":{"count":115},"Kobil":{"count":87},"Kroger":{"count":59},"Kroger Fuel":{"count":68},"Kum & Go":{"count":136},"Kwik Trip":{"count":210},"LPG":{"count":349},"LPG Station":{"count":51},"LUKOIL":{"count":61},"Liberty":{"count":93},"Lotos":{"count":284},"Lotos Optima":{"count":71},"Love's":{"count":52},"Lukoil":{"count":908},"MEROIL":{"count":70},"MOL":{"count":436},"MRS":{"count":65},"Marathon":{"count":694},"Maverik":{"count":66},"Maxol":{"count":57},"Metano":{"count":248},"Migrol":{"count":71},"Minipump":{"count":140},"Mobil":{"count":1387},"Mobile":{"count":62},"Mol":{"count":64},"Morrisons":{"count":128},"Moya":{"count":62},"Murphy USA":{"count":190},"NP":{"count":63},"Neste":{"count":166},"OIL!":{"count":110},"OK":{"count":269},"OKQ8":{"count":218},"OMV":{"count":936},"Oilibya":{"count":127},"Opet":{"count":117},"Orlen":{"count":1185},"PETRONOR":{"count":182},"PSO":{"count":121},"PSO Petrol Pump":{"count":56},"PT":{"count":306},"PTT":{"count":423},"PV Oil":{"count":100},"Pacific Pride":{"count":54},"Pecsa":{"count":130},"Pemex":{"count":2023},"Pertamina":{"count":324},"Petro":{"count":54},"Petro-Canada":{"count":893},"Petrobras":{"count":487},"Petrochina":{"count":116},"Petroecuador":{"count":64},"Petrol Ofisi":{"count":237},"Petrolimex":{"count":325},"Petrom":{"count":381},"Petron":{"count":1485},"Petronas":{"count":387},"Petroperu":{"count":110},"Phillips 66":{"count":424},"Phoenix":{"count":210},"Pilot":{"count":69},"Pioneer":{"count":104},"Posto":{"count":52},"Posto Atem":{"count":68},"Posto BR":{"count":222},"Posto Ipiranga":{"count":177},"Posto Shell":{"count":104},"Primax":{"count":288},"Prio":{"count":52},"Puma":{"count":442},"Q1":{"count":53},"Q8":{"count":1467},"Q8 Easy":{"count":66},"QuikTrip":{"count":251},"REPSOL":{"count":1380},"RaceTrac":{"count":80},"Raiffeisenbank":{"count":130},"Repsol":{"count":1099},"Rompetrol":{"count":234},"Royal Farms":{"count":79},"Rubis":{"count":108},"SB Tank":{"count":62},"SPBU":{"count":203},"Safeway":{"count":74},"Sainsbury's":{"count":75},"Sam's Club":{"count":57},"Sasol":{"count":90},"Sea Oil":{"count":142},"Sheetz":{"count":304},"Shell":{"count":12317},"Shell Express":{"count":135},"Sinclair":{"count":201},"Sinopec":{"count":106},"Sinopec Fuel":{"count":116},"Slovnaft":{"count":259},"Socar":{"count":86},"Sokimex":{"count":85},"Speedway":{"count":556},"St1":{"count":141},"Star":{"count":419},"Star Oil":{"count":100},"Station Service E. Leclerc":{"count":423},"Statoil":{"count":495},"Stewart's":{"count":72},"Sunoco":{"count":853},"Super U":{"count":174},"Tamoil":{"count":959},"Tango":{"count":146},"Teboil":{"count":100},"Tela":{"count":191},"Terpel":{"count":367},"Tesco":{"count":218},"Texaco":{"count":1167},"Tinq":{"count":219},"Topaz":{"count":111},"Total":{"count":3591},"Total Access":{"count":226},"Total Erg":{"count":59},"TotalErg":{"count":267},"Turkey Hill":{"count":80},"Turmöl":{"count":80},"Ultramar":{"count":372},"United":{"count":197},"Uno":{"count":134},"Uno-X":{"count":69},"Valero":{"count":778},"Vito":{"count":91},"WOG":{"count":350},"Wawa":{"count":173},"Westfalen":{"count":94},"Woolworths Petrol":{"count":187},"Z":{"count":98},"bft":{"count":202},"eni":{"count":71},"ΕΚΟ":{"count":58},"АГЗС":{"count":1020},"АЗС":{"count":86},"Авіас":{"count":116},"БРСМ-Нафта":{"count":64},"Башнефть":{"count":272},"Белоруснефть":{"count":71},"Газовая заправка":{"count":57},"Газпромнефть":{"count":1242},"Гелиос":{"count":61},"ЕКА":{"count":78},"Заправка":{"count":63},"КазМунайГаз":{"count":150},"Лукойл":{"count":2327},"Макпетрол":{"count":108},"НК Альянс":{"count":105},"Нефтьмагистраль":{"count":66},"ОККО":{"count":316},"ОМВ":{"count":55},"Октан":{"count":53},"ПТК":{"count":104},"Петрол":{"count":124},"Пропан":{"count":83},"Роснефть":{"count":957},"Сибнефть":{"count":51},"Сургутнефтегаз":{"count":95},"ТНК":{"count":588},"Татнефтепродукт":{"count":58},"Татнефть":{"count":331},"Укрнафта":{"count":228},"דור אלון":{"count":126},"דלק":{"count":160},"סונול":{"count":159},"פז":{"count":209},"محطة وقود":{"count":221},"محطه وقود":{"count":98},"پمپ بنزین":{"count":559},"پمپ گاز":{"count":152},"บางจาก":{"count":214},"ป.ต.ท.":{"count":414},"เชลล์":{"count":90},"เอสโซ่":{"count":82},"エッソ":{"count":70},"エネオス":{"count":301},"コスモ石油":{"count":415},"ゼネラル":{"count":75},"中国石化":{"count":104},"中国石化 Sinopec":{"count":61},"中国石油":{"count":82},"中油":{"count":64},"出光":{"count":620,"tags":{"name:en":"IDEMITSU"}},"加油站":{"count":60},"台灣中油":{"count":257},"昭和シェル":{"count":274}},"hospital":{"Cruz Roja":{"count":93},"IMSS":{"count":64},"Инфекционное отделение":{"count":91},"Кожно-венерологический диспансер":{"count":57},"Районная больница":{"count":88},"Роддом":{"count":133},"Родильный дом":{"count":75},"Скорая помощь":{"count":75},"ФАП":{"count":108},"ЦРБ":{"count":122},"Центральная районная больница":{"count":144},"โรงพยาบาลส่งเสริมสุขภาพตำบล":{"count":69}},"ice_cream":{"Baskin-Robbins":{"count":69,"tags":{"amenity":"ice_cream"}},"Cold Stone Creamery":{"count":66},"Grido":{"count":163}},"kindergarten":{"Amado Nervo":{"count":64},"Anganwadi":{"count":85},"Arche Noah":{"count":67},"Benito Juarez":{"count":89},"CONAFE Preescolar":{"count":90},"Cuauhtemoc":{"count":54},"Cursos Comunitarios":{"count":74},"Educacion Inicial de CONAFE No Escolarizado":{"count":184},"Emiliano Zapata":{"count":60},"Estefania Casta�eda":{"count":53},"Evangelischer Kindergarten":{"count":320},"Federico Froebel":{"count":88},"Gabriela Mistral":{"count":129},"Jean Piaget":{"count":82},"Jose Vasconcelos":{"count":71},"Juan Escutia":{"count":82},"Katholischer Kindergarten":{"count":99},"Kindergarten Regenbogen":{"count":62},"Kindergarten St. Josef":{"count":55},"Kindergarten St. Martin":{"count":55},"Maria Montessori":{"count":93},"Miguel Hidalgo Y Costilla":{"count":57},"Ni�os Heroes":{"count":68},"PAUD":{"count":82},"Pusteblume":{"count":54},"Rosaura Zapata":{"count":68},"Sor Juana Ines De La Cruz":{"count":76},"Spatzennest":{"count":54},"Städtischer Kindergarten":{"count":103},"Villa Kunterbunt":{"count":88},"Waldkindergarten":{"count":111},"Waldorfkindergarten":{"count":71},"Óvoda":{"count":72},"Детсад":{"count":65},"Детский сад \"Солнышко\"":{"count":83},"Детский сад № 1":{"count":54},"Детский сад №1":{"count":150},"Детский сад №10":{"count":77},"Детский сад №11":{"count":81},"Детский сад №12":{"count":57},"Детский сад №13":{"count":57},"Детский сад №14":{"count":76},"Детский сад №15":{"count":72},"Детский сад №16":{"count":58},"Детский сад №17":{"count":67},"Детский сад №18":{"count":77},"Детский сад №19":{"count":62},"Детский сад №2":{"count":155},"Детский сад №22":{"count":60},"Детский сад №24":{"count":53},"Детский сад №25":{"count":56},"Детский сад №27":{"count":54},"Детский сад №29":{"count":57},"Детский сад №3":{"count":129},"Детский сад №33":{"count":55},"Детский сад №4":{"count":86},"Детский сад №5":{"count":106},"Детский сад №6":{"count":93},"Детский сад №7":{"count":98},"Детский сад №8":{"count":80},"Детский сад №9":{"count":80},"Дитячий садок":{"count":58},"Сказка":{"count":52},"Солнышко":{"count":99},"Теремок":{"count":59},"საბავშვო ბაღი":{"count":69},"中央保育所":{"count":56}},"library":{"Biblioteca Comunale":{"count":212},"Biblioteca comunale":{"count":187},"Biblioteka Publiczna":{"count":78},"Bibliothèque Municipale":{"count":299},"Bibliothèque municipale":{"count":247},"Bücherei":{"count":113},"Central Library":{"count":65},"Gemeindebücherei":{"count":150},"Gminna Biblioteka Publiczna":{"count":71},"Miejska Biblioteka Publiczna":{"count":66},"Médiathèque":{"count":287},"Městská knihovna":{"count":60},"Public Library":{"count":91},"Stadtbibliothek":{"count":232},"Stadtbücherei":{"count":289},"Городская библиотека":{"count":69},"Детская библиотека":{"count":260},"Центральная библиотека":{"count":83},"Центральная городская библиотека":{"count":61},"图书馆":{"count":65}},"pharmacy":{"36.6":{"count":57},"Adler-Apotheke":{"count":375},"Alte Apotheke":{"count":99},"Apollo Pharmacy":{"count":87},"Apotek":{"count":62},"Apotek Hjärtat":{"count":51},"Apotheke am Markt":{"count":83},"Bahnhof Apotheke":{"count":51},"Bahnhof-Apotheke":{"count":90},"Bartell Drugs":{"count":53},"Benavides":{"count":83},"Benu":{"count":61},"Boots":{"count":1348},"Botica":{"count":118},"Brunnen-Apotheke":{"count":77},"Burg-Apotheke":{"count":76},"Bären-Apotheke":{"count":111},"CVS":{"count":3228},"Camelia":{"count":54},"Catena":{"count":112},"Chemist Warehouse":{"count":82},"Clicks":{"count":123},"Cruz Azul":{"count":97},"Cruz Verde":{"count":223},"Dbam o Zdrowie":{"count":68},"Dr. Max":{"count":324},"Droga Raia":{"count":152},"Drogaria São Paulo":{"count":87},"Drogasil":{"count":157},"Duane Reade":{"count":91},"Eczane":{"count":88},"Engel-Apotheke":{"count":143},"Eurovaistinė":{"count":89},"Familiprix":{"count":70},"Farmacenter":{"count":65},"Farmacia Centrale":{"count":61},"Farmacia Comunale":{"count":196},"Farmacia Guadalajara":{"count":146},"Farmacia del Ahorro":{"count":65},"Farmacias Ahumada":{"count":182},"Farmacias Cruz Azul":{"count":134},"Farmacias Cruz Verde":{"count":162},"Farmacias Económicas":{"count":63},"Farmacias Guadalajara":{"count":107},"Farmacias SalcoBrand":{"count":140},"Farmacias Sana Sana":{"count":111},"Farmacias Similares":{"count":137},"Farmacias del Ahorro":{"count":187},"Farmacity":{"count":191},"Farmahorro":{"count":53},"Farmatodo":{"count":165},"Felicia":{"count":56},"Fybeca":{"count":52},"Generika Drugstore":{"count":52},"Gintarinė vaistinė":{"count":121},"Guardian":{"count":71},"Gyógyszertár":{"count":59},"H-E-B Pharmacy":{"count":239},"Hirsch-Apotheke":{"count":180},"Hubertus Apotheke":{"count":120},"Inkafarma":{"count":234},"Jean Coutu":{"count":132},"Kinney Drugs":{"count":74},"Kur-Apotheke":{"count":52},"Linden-Apotheke":{"count":224},"Ljekarna":{"count":77},"Lloyds Pharmacy":{"count":539},"Lékárna":{"count":52},"Löwen-Apotheke":{"count":397},"Marien-Apotheke":{"count":370},"Markt-Apotheke":{"count":207},"Mercury Drug":{"count":584},"Mifarma":{"count":195},"Mēness aptieka":{"count":64},"Neue Apotheke":{"count":129},"Pague Menos":{"count":74},"Panvel":{"count":77},"Park-Apotheke":{"count":54},"Pharmacie Centrale":{"count":218},"Pharmacie Principale":{"count":62},"Pharmacie de l'Hôtel de Ville":{"count":52},"Pharmacie de la Gare":{"count":114},"Pharmacie de la Mairie":{"count":71},"Pharmacie de la Poste":{"count":68},"Pharmacie du Centre":{"count":154},"Pharmacie du Marché":{"count":110},"Pharmacie du Parc":{"count":60},"Pharmaprix":{"count":99},"Pharmasave":{"count":129},"Punkt Apteczny":{"count":53},"Rathaus-Apotheke":{"count":181},"Rats-Apotheke":{"count":126},"Rexall":{"count":109},"Rite Aid":{"count":1481},"Rose Pharmacy":{"count":99},"Rosen-Apotheke":{"count":205},"Rowlands Pharmacy":{"count":127},"SalcoBrand":{"count":112},"Sana Sana":{"count":95},"Schloss-Apotheke":{"count":62},"Sensiblu":{"count":115},"Shoppers Drug Mart":{"count":713},"Sonnen-Apotheke":{"count":372},"South Star Drug":{"count":69},"Stadt-Apotheke":{"count":397},"Stern-Apotheke":{"count":83},"Superdrug":{"count":177},"São João":{"count":54},"The Generics Pharmacy":{"count":211},"Uniprix":{"count":63},"Walgreens":{"count":3314},"Walgreens Pharmacy":{"count":76},"Walmart Pharmacy":{"count":99},"Watsons":{"count":110},"Well Pharmacy":{"count":61},"centro naturista":{"count":123},"А5":{"count":94},"Айболит":{"count":88},"Аптека 36,6":{"count":285},"Аптека низких цен":{"count":65},"Аптека низьких цін":{"count":88},"Аптека от склада":{"count":83},"Аптека №1":{"count":92},"Аптечный пункт":{"count":285},"Арніка":{"count":124},"Бережная аптека":{"count":67},"Будь здоров":{"count":63},"Вита":{"count":140},"Горздрав":{"count":395},"Живика":{"count":105},"Здоровье":{"count":87},"Имплозия":{"count":84},"Классика":{"count":102},"Ладушка":{"count":53},"Мед-сервіс":{"count":59},"Мелодия здоровья":{"count":60},"Невис":{"count":151},"Норма":{"count":89},"Озерки":{"count":54},"Панацея":{"count":68},"Первая помощь":{"count":132},"Планета здоровья":{"count":140},"Радуга":{"count":139},"Ригла":{"count":215},"Семейная":{"count":52},"Социальная аптека":{"count":62},"Столички":{"count":83},"Фармакопейка":{"count":85},"Фармакор":{"count":106},"Фармация":{"count":187},"Фармленд":{"count":108},"Центральная аптека":{"count":57},"סופר-פארם":{"count":93},"داروخانه":{"count":264},"داروخانه شبانه روزی":{"count":54},"صيدلية":{"count":148},"くすりの福太郎":{"count":51},"さくら薬局":{"count":52},"ウエルシア":{"count":84},"カワチ薬品":{"count":52},"クリエイト":{"count":53},"サンドラッグ":{"count":130},"スギ薬局":{"count":134},"セイジョー":{"count":58},"ツルハドラッグ":{"count":185},"ドラッグてらしま (Drug Terashima)":{"count":58},"マツモトキヨシ":{"count":221},"丁丁藥局":{"count":75}},"pub":{"Black Bull":{"count":55},"Commercial Hotel":{"count":62},"Cross Keys":{"count":64},"Irish Pub":{"count":107},"Kings Arms":{"count":81},"Kings Head":{"count":65},"New Inn":{"count":100},"Prince of Wales":{"count":89},"Queens Head":{"count":55},"Red Lion":{"count":201},"Rose & Crown":{"count":63},"Rose and Crown":{"count":82},"Royal Hotel":{"count":64},"Royal Oak":{"count":172},"The Albion":{"count":51},"The Anchor":{"count":68},"The Angel":{"count":55},"The Beehive":{"count":52},"The Bell":{"count":128},"The Bell Inn":{"count":58},"The Black Horse":{"count":100},"The Bull":{"count":82},"The Castle":{"count":63},"The Chequers":{"count":74},"The Cricketers":{"count":56},"The Cross Keys":{"count":58},"The Crown":{"count":252},"The Crown Inn":{"count":88},"The Fox":{"count":76},"The George":{"count":119},"The Green Man":{"count":59},"The Greyhound":{"count":99},"The Kings Arms":{"count":65},"The Kings Head":{"count":68},"The New Inn":{"count":126},"The Plough":{"count":182},"The Plough Inn":{"count":57},"The Queens Head":{"count":61},"The Railway":{"count":112},"The Red Lion":{"count":271},"The Rising Sun":{"count":74},"The Royal Oak":{"count":223},"The Ship":{"count":92},"The Ship Inn":{"count":98},"The Star":{"count":72},"The Star Inn":{"count":53},"The Sun Inn":{"count":51},"The Swan":{"count":155},"The Swan Inn":{"count":59},"The Victoria":{"count":72},"The Wheatsheaf":{"count":126},"The White Hart":{"count":247},"The White Horse":{"count":234},"The White Lion":{"count":75},"The White Swan":{"count":55},"魚民":{"count":119},"鳥貴族":{"count":57}},"restaurant":{"Adler":{"count":228},"Adria":{"count":60},"Adyar Ananda Bhavan":{"count":60},"Akropolis":{"count":212},"Ali Baba":{"count":59},"Alte Post":{"count":68},"Applebee's":{"count":977},"Asia":{"count":78},"Athen":{"count":75},"Athos":{"count":61},"Autogrill":{"count":60},"Bahnhof":{"count":56},"Bella Italia":{"count":194},"Bella Napoli":{"count":88},"Big Boy":{"count":58},"Bistro":{"count":64},"Bob Evans":{"count":269},"Bonefish Grill":{"count":73},"Boston Market":{"count":91},"Boston Pizza":{"count":278},"Buffalo Grill":{"count":282},"Buffalo Wild Wings":{"count":454},"Bären":{"count":75},"Cafeteria":{"count":65},"California Pizza Kitchen":{"count":116},"Campanile":{"count":55},"Canteen":{"count":91},"Capri":{"count":56},"Captain D's":{"count":54},"Carluccio's":{"count":57},"Carpe Diem":{"count":60},"Carrabba's Italian Grill":{"count":62},"Casa Mia":{"count":64},"Casablanca":{"count":61},"Cheesecake Factory":{"count":52},"Chifa":{"count":86},"Chili's":{"count":698},"China Buffet":{"count":54},"China Garden":{"count":114},"China House":{"count":72},"China Town":{"count":117},"China Wok":{"count":100},"Chiquito":{"count":55},"Chuck E. Cheese's":{"count":54},"Cici's Pizza":{"count":51},"CoCo壱番屋":{"count":77},"Cold Stone Creamery":{"count":67},"Comedor":{"count":60},"Comida China":{"count":52},"Courtepaille":{"count":170},"Cracker Barrel":{"count":392},"Da Grasso":{"count":63},"Da Vinci":{"count":88},"Delphi":{"count":105},"Denny's":{"count":850},"Deutsches Haus":{"count":93},"Dionysos":{"count":75},"Dolce Vita":{"count":121},"Dorfkrug":{"count":60},"Dunkin' Donuts":{"count":94,"tags":{"cuisine":"donut"}},"East Side Mario's":{"count":53},"El Greco":{"count":112},"El Paso":{"count":60},"El Rancho":{"count":82},"Europa":{"count":61},"Famous Dave's":{"count":62},"Firehouse Subs":{"count":85},"Five Guys":{"count":91},"Flunch":{"count":179},"Frankie & Benny's":{"count":151},"Friendly's":{"count":113},"Gasthaus Krone":{"count":93},"Gasthaus zur Linde":{"count":59},"Gasthof zur Post":{"count":109},"Golden Corral":{"count":209},"Golden Dragon":{"count":62},"Great Wall":{"count":54},"Grüner Baum":{"count":122},"Gusto":{"count":74},"Hard Rock Cafe":{"count":96},"Hardee's":{"count":56,"tags":{"cuisine":"burger"}},"Harvester":{"count":75},"Hellas":{"count":66},"Hippopotamus":{"count":115},"Hirsch":{"count":83},"Hirschen":{"count":86},"Hong Kong":{"count":126},"Hooters":{"count":190},"IHOP":{"count":758},"IL Патио":{"count":51},"Jason's Deli":{"count":73},"Jimmy John's":{"count":150,"tags":{"cuisine":"sandwich"}},"Joe's Crab Shack":{"count":70},"Jägerhof":{"count":54},"Kantine":{"count":104},"Kelsey's":{"count":66},"Kirchenwirt":{"count":94},"Kreta":{"count":70},"Kreuz":{"count":85},"Krone":{"count":179},"Kudu":{"count":172},"L'Escale":{"count":66},"L'Osteria":{"count":80},"La Bodega":{"count":55},"La Boucherie":{"count":80},"La Cantina":{"count":105},"La Casa":{"count":66},"La Casona":{"count":62},"La Dolce Vita":{"count":129},"La Fontana":{"count":62},"La Gondola":{"count":60},"La Hacienda":{"count":54},"La Pataterie":{"count":116},"La Pergola":{"count":87},"La Perla":{"count":85},"La Piazza":{"count":123},"La Piazzetta":{"count":77},"La Place":{"count":55},"La Scala":{"count":62},"La Strada":{"count":74},"La Tagliatella":{"count":69},"La Tasca":{"count":56},"La Taverna":{"count":58},"La Terrasse":{"count":82},"La Terraza":{"count":56},"La Terrazza":{"count":57},"La Trattoria":{"count":91},"Lamm":{"count":69},"Linde":{"count":114},"Lindenhof":{"count":95},"Little Caesars":{"count":80},"Little Chef":{"count":62},"Little Italy":{"count":90},"Logan's Roadhouse":{"count":89},"LongHorn Steakhouse":{"count":183},"Lotus":{"count":87},"Léon de Bruxelles":{"count":63},"Löwen":{"count":141},"MK Restaurants":{"count":65},"Maharaja":{"count":52},"Mamma Mia":{"count":130},"Mandarin":{"count":90},"Mang Inasal":{"count":128},"Marco Polo":{"count":62},"Marco's Pizza":{"count":53},"McAlister's Deli":{"count":51},"Mediterraneo":{"count":55},"Mellow Mushroom":{"count":73},"Mensa":{"count":148},"Milano":{"count":77},"Mimi's Cafe":{"count":52},"Moe's Southwest Grill":{"count":79},"Mykonos":{"count":89},"Mythos":{"count":61},"Nando's":{"count":412},"Noodles & Company":{"count":106},"O'Charley's":{"count":61},"Oasis":{"count":73},"Ocean Basket":{"count":71},"Ochsen":{"count":94},"Old Chicago":{"count":54},"Olive Garden":{"count":504},"Olympia":{"count":86},"Osaka":{"count":52},"Outback Steakhouse":{"count":399},"P.F. Chang's":{"count":53},"Pancake House":{"count":79},"Panda":{"count":52},"Panera Bread":{"count":582},"Panorama":{"count":102},"Papa Murphy's":{"count":66},"Parrilla":{"count":62},"Peking":{"count":68},"Perkins":{"count":157},"Pinocchio":{"count":63},"Pizza Express":{"count":417},"Pizza Factory":{"count":59},"Pizza House":{"count":56},"Pizza Hut":{"count":2688,"tags":{"cuisine":"pizza"}},"Pizza Ranch":{"count":77},"Pizzeria Italia":{"count":65},"Pizzeria Milano":{"count":51},"Pizzeria Napoli":{"count":53},"Pizzeria Roma":{"count":86},"Pizzeria Venezia":{"count":54},"Poivre Rouge":{"count":56},"Pollo Campero":{"count":53},"Pomodoro":{"count":62},"Portofino":{"count":67},"Poseidon":{"count":145},"Prezzo":{"count":147},"Qdoba":{"count":81},"Qdoba Mexican Grill":{"count":54},"Ratskeller":{"count":161},"Red Lobster":{"count":419},"Red Robin":{"count":312},"Restaurante Universitário":{"count":53},"Rhodos":{"count":94},"Ristorante Del Arte":{"count":160},"Roma":{"count":85},"Rose":{"count":51},"Round Table Pizza":{"count":100},"Ruby Tuesday":{"count":303},"Rössle":{"count":54},"Rössli":{"count":93},"Saigon":{"count":51},"Sakura":{"count":139},"San Marco":{"count":88},"Santorini":{"count":59},"Schwarzer Adler":{"count":65},"Schützenhaus":{"count":151},"Shakey's":{"count":64},"Shalimar":{"count":53},"Shanghai":{"count":96},"Shari's":{"count":75},"Shoney's":{"count":55},"Sizzler":{"count":90},"Sonic":{"count":80,"tags":{"cuisine":"burger"}},"Sonne":{"count":121},"Sphinx":{"count":66},"Sportheim":{"count":113},"Spur":{"count":70},"Starbucks":{"count":54,"tags":{"cuisine":"coffee_shop"}},"Steak 'n Shake":{"count":86,"tags":{"cuisine":"burger"}},"Sternen":{"count":85},"Subway":{"count":1108},"Sunset Grill":{"count":55},"Sushi":{"count":88},"Sushi Bar":{"count":68},"Swiss Chalet":{"count":162},"Syrtaki":{"count":65},"TGI Friday's":{"count":364},"Taj Mahal":{"count":183},"Taste of India":{"count":68},"Taverna":{"count":69},"Telepizza":{"count":109},"Texas Roadhouse":{"count":232},"The Cheesecake Factory":{"count":52},"Tim Hortons":{"count":61},"Toby Carvery":{"count":51},"Tony Roma's":{"count":63},"Toscana":{"count":76},"Trattoria":{"count":70},"Traube":{"count":68},"Vapiano":{"count":136},"Venezia":{"count":68},"Village Inn":{"count":149},"Vips":{"count":109},"Waffle House":{"count":521},"Wagamama":{"count":111},"Waldschänke":{"count":52},"Warung":{"count":73},"Wasabi":{"count":70},"Wimpy":{"count":66},"Zaxby's":{"count":60},"Zizzi":{"count":102},"Zorbas":{"count":62},"Zum Hirschen":{"count":52},"Zum Löwen":{"count":80},"Zur Krone":{"count":96},"Zur Linde":{"count":228},"Zur Post":{"count":125},"Zur Sonne":{"count":77},"Евразия":{"count":93},"Ресторан":{"count":60},"Тануки":{"count":62},"Якитория":{"count":84},"رستوران":{"count":72},"مطعم":{"count":52},"すき家":{"count":61,"tags":{"name:en":"SUKIYA"}},"はま寿司":{"count":67},"びっくりドンキー":{"count":120},"やよい軒":{"count":71},"ガスト":{"count":512,"tags":{"name:en":"Gusto"}},"ココス":{"count":142},"サイゼリア":{"count":54},"サイゼリヤ":{"count":285},"ジョイフル":{"count":83},"ジョナサン":{"count":139},"ジョリーパスタ":{"count":75},"デニーズ":{"count":199},"バーミヤン":{"count":130},"ロイヤルホスト":{"count":108},"丸亀製麺":{"count":98},"八方雲集":{"count":145},"吉野家":{"count":61},"夢庵":{"count":67},"大戸屋":{"count":68},"大阪王将":{"count":68},"天下一品":{"count":70},"安楽亭":{"count":60},"牛角":{"count":107},"食堂":{"count":63},"餃子の王将":{"count":212},"바다횟집 (Bada Fish Restaurant)":{"count":52}},"school":{"Adolfo Lopez Mateos":{"count":137},"Agustin Ya�ez":{"count":57},"Albert-Schweitzer-Schule":{"count":81},"Amado Nervo":{"count":85},"Astrid-Lindgren-Schule":{"count":77},"Benito Juarez":{"count":294},"Brown School":{"count":54},"CEM":{"count":215},"Center School":{"count":115},"Central Elementary School":{"count":179},"Central High School":{"count":130},"Central School":{"count":215},"Colegio San José":{"count":74},"Collège Jean Moulin":{"count":68},"Collège privé Saint-Joseph":{"count":60},"Cuauhtemoc":{"count":152},"Curso Comunitario":{"count":57},"Cursos Comunitarios":{"count":116},"EPP":{"count":112},"Emiliano Zapata":{"count":286},"Fairview Elementary School":{"count":64},"Fairview School":{"count":164},"Francisco I Madero":{"count":86},"Francisco I. Madero":{"count":52},"Francisco Villa":{"count":116},"Franklin Elementary School":{"count":96},"Franklin School":{"count":126},"Garfield Elementary School":{"count":69},"Garfield School":{"count":58},"Gimnazjum nr 1":{"count":59},"Government School":{"count":60},"Gregorio Torres Quintero":{"count":53},"Groupe Scolaire":{"count":57},"Guadalupe Victoria":{"count":58},"Highland School":{"count":71},"Hillcrest Elementary School":{"count":63},"Holy Cross School":{"count":68},"Holy Family School":{"count":77},"Holy Trinity School":{"count":59},"Ignacio Allende":{"count":51},"Ignacio Zaragoza":{"count":98},"Immaculate Conception School":{"count":83},"Jackson Elementary School":{"count":53},"Jackson School":{"count":56},"Jefferson Elementary School":{"count":177},"Jefferson School":{"count":108},"Jose Clemente Orozco":{"count":59},"Jose Ma Morelos Y Pavon":{"count":120},"Jose Vasconcelos":{"count":73},"Josefa Ortiz De Dominguez":{"count":78},"Juan Escutia":{"count":121},"Justo Sierra":{"count":118},"Kumon":{"count":66},"Lazaro Cardenas":{"count":68},"Lazaro Cardenas Del Rio":{"count":153},"Leona Vicario":{"count":64},"Liberty Elementary School":{"count":56},"Liberty School":{"count":84},"Lincoln Elementary School":{"count":264},"Lincoln School":{"count":269},"Longfellow Elementary School":{"count":55},"Longfellow School":{"count":53},"Madison Elementary School":{"count":55},"Manuel Lopez Cotilla":{"count":107},"Maple Grove School":{"count":51},"McKinley Elementary School":{"count":62},"McKinley School":{"count":63},"Miguel Hidalgo":{"count":86},"Miguel Hidalgo Y Costilla":{"count":213},"Miller School":{"count":66},"Mount Pleasant School":{"count":61},"Mount Zion School":{"count":53},"Mountain View Elementary School":{"count":52},"New Hope School":{"count":51},"Nicolas Bravo":{"count":58},"Ni�os Heroes":{"count":155},"Nombre En Tramite":{"count":126},"North Elementary School":{"count":57},"Oak Grove School":{"count":148},"Pedro Moreno":{"count":69},"Pestalozzischule":{"count":84},"Pine Grove School":{"count":63},"Pleasant Hill School":{"count":110},"Pleasant Valley School":{"count":85},"Pleasant View School":{"count":61},"Primaria Comunitaria":{"count":59},"Ramon Corona":{"count":54},"Ricardo Flores Magon":{"count":91},"Riverside School":{"count":76},"Roosevelt Elementary School":{"count":112},"Roosevelt School":{"count":114},"SD":{"count":76},"SDN":{"count":290},"Sacred Heart School":{"count":206},"Saint Francis School":{"count":56},"Saint James School":{"count":83},"Saint Johns School":{"count":173},"Saint Joseph School":{"count":147},"Saint Josephs School":{"count":157},"Saint Kizito Primary School":{"count":61},"Saint Mary School":{"count":54},"Saint Marys School":{"count":256},"Saint Patricks School":{"count":80},"Saint Paul School":{"count":53},"Saint Pauls School":{"count":74},"Saint Peters School":{"count":81},"Schillerschule":{"count":61},"School Number 1":{"count":233},"School Number 2":{"count":206},"School Number 3":{"count":184},"School Number 4":{"count":126},"Smith School":{"count":60},"Sor Juana Ines De La Cruz":{"count":56},"South Elementary School":{"count":53},"Sunnyside School":{"count":60},"Szkoła Podstawowa nr 1":{"count":78},"Szkoła Podstawowa nr 2":{"count":75},"Szkoła Podstawowa nr 3":{"count":60},"Trinity School":{"count":85},"UNIDAD EDUCATIVA":{"count":106},"Union School":{"count":128},"Valentin Gomez Farias":{"count":71},"Venustiano Carranza":{"count":64},"Vicente Guerrero":{"count":159},"Volkshochschule":{"count":105},"Volksschule":{"count":366},"Washington Elementary School":{"count":192},"Washington School":{"count":213},"West Elementary School":{"count":58},"White School":{"count":51},"Wilson Elementary School":{"count":66},"Wilson School":{"count":80},"Általános iskola":{"count":105},"École Jules Ferry":{"count":51},"École Notre-Dame":{"count":61},"École Saint-Joseph":{"count":96},"École primaire Jean Jaurès":{"count":71},"École primaire Jules Ferry":{"count":82},"École primaire privée Notre-Dame":{"count":69},"École primaire privée Saint-Joseph":{"count":132},"École primaire privée Sainte-Marie":{"count":63},"École élémentaire Jules Ferry":{"count":52},"Școala Generală":{"count":51},"Școală":{"count":53},"Вечерняя школа":{"count":53},"Гимназия №1":{"count":96},"ДЮСШ":{"count":63},"Средняя школа №1":{"count":80},"Средняя школа №2":{"count":86},"Средняя школа №3":{"count":58},"Школа № 1":{"count":130},"Школа № 2":{"count":117},"Школа № 3":{"count":80},"Школа № 4":{"count":77},"Школа № 5":{"count":55},"Школа №1":{"count":576},"Школа №10":{"count":167},"Школа №11":{"count":148},"Школа №12":{"count":136},"Школа №13":{"count":129},"Школа №14":{"count":123},"Школа №15":{"count":129},"Школа №16":{"count":99},"Школа №17":{"count":117},"Школа №18":{"count":111},"Школа №19":{"count":98},"Школа №2":{"count":509},"Школа №20":{"count":100},"Школа №21":{"count":72},"Школа №22":{"count":72},"Школа №23":{"count":75},"Школа №24":{"count":78},"Школа №25":{"count":57},"Школа №26":{"count":64},"Школа №27":{"count":58},"Школа №28":{"count":53},"Школа №3":{"count":393},"Школа №31":{"count":55},"Школа №35":{"count":54},"Школа №4":{"count":281},"Школа №5":{"count":275},"Школа №6":{"count":217},"Школа №7":{"count":215},"Школа №8":{"count":188},"Школа №9":{"count":183},"مدرسة":{"count":92},"مدرسه":{"count":500},"市立南中学校":{"count":53},"市立南小学校":{"count":56},"市立東中学校":{"count":54}},"social_facility":{"Safe Haven":{"count":92},"Детский дом":{"count":70},"Социальный участковый":{"count":195}},"theatre":{"Amfiteatr":{"count":97},"Amphitheater":{"count":110},"Amphitheatre":{"count":109},"Freilichtbühne":{"count":78},"Teatro Comunale":{"count":56}}}; -var leisure = {"fitness_centre":{"Anytime Fitness":{"count":143},"Gold's Gym":{"count":61},"LA Fitness":{"count":126},"Planet Fitness":{"count":106},"Snap Fitness":{"count":67}},"playground":{"Çocuk Parkı":{"count":60},"놀이터":{"count":292}},"sports_centre":{"Anytime Fitness":{"count":152},"Complejo Municipal de Deportes":{"count":88},"Complexe Sportif":{"count":51},"Curves":{"count":91},"Fitness First":{"count":70},"Gold's Gym":{"count":82},"Kieser Training":{"count":90},"LA Fitness":{"count":72},"Life Time Fitness":{"count":76},"McFit":{"count":60},"Mrs. Sporty":{"count":76},"Orlik":{"count":82},"Pabellón Municipal de Deportes":{"count":109},"Palestra Comunale":{"count":81},"Planet Fitness":{"count":106},"Salle Omnisport":{"count":57},"Schützenhaus":{"count":79},"Snap Fitness":{"count":51},"Virgin Active":{"count":69},"YMCA":{"count":174},"ДЮСШ":{"count":82},"Ледовый дворец":{"count":54},"体育館":{"count":80}},"swimming_pool":{"Schwimmerbecken":{"count":57},"Yüzme Havuzu":{"count":51},"プール":{"count":56},"游泳池":{"count":55}}}; -var man_made = {"windmill":{"De Hoop":{"count":57}}}; -var shop = {"alcohol":{"Alko":{"count":170},"BC Liquor Store":{"count":66},"BWS":{"count":157},"Bargain Booze":{"count":140},"Beer Store":{"count":66},"Botilleria":{"count":121},"Dan Murphy's":{"count":61},"Gall & Gall":{"count":511},"LCBO":{"count":430},"Liquor Depot":{"count":53},"Liquor Store":{"count":72},"Liquorland":{"count":112},"Mitra":{"count":60},"Nicolas":{"count":253},"SAQ":{"count":169},"Systembolaget":{"count":271},"The Beer Store":{"count":231},"Vinmonopolet":{"count":66},"Алкомаркет":{"count":67},"Ароматный мир":{"count":196},"Бристоль":{"count":329},"Градус":{"count":52},"Живое пиво":{"count":182},"Красное & Белое":{"count":989},"Кристалл":{"count":56},"Норман":{"count":146},"Отдохни":{"count":75},"Пиво":{"count":73},"Разливное пиво":{"count":143}},"baby_goods":{"Aubert":{"count":56},"Babies R Us":{"count":80},"BabyOne":{"count":52},"西松屋":{"count":53}},"bakery":{"AILI":{"count":53},"Anker":{"count":85},"Awiteks":{"count":53},"Backshop":{"count":57},"Backwerk":{"count":161},"Baguette":{"count":72},"Bakers Delight":{"count":75},"Bakker Bart":{"count":97},"Banette":{"count":111},"Bäckerei Fuchs":{"count":62},"Bäckerei Grimminger":{"count":51},"Bäckerei Müller":{"count":68},"Bäckerei Schmidt":{"count":103},"Bäckerei Schneider":{"count":52},"Cooplands":{"count":63},"Dat Backhus":{"count":81},"Der Beck":{"count":114},"Der Mann":{"count":53},"Ditsch":{"count":70},"Dunkin' Donuts":{"count":55,"tags":{"cuisine":"donut"}},"Fornetti":{"count":113},"Goeken backen":{"count":53},"Goldilocks":{"count":124},"Greggs":{"count":613},"Hofpfisterei":{"count":134},"Ihle":{"count":108},"Julie's Bakeshop":{"count":57},"K&U":{"count":117},"K&U Bäckerei":{"count":54},"Kamps":{"count":268},"La Mie Câline":{"count":56},"Le Crobag":{"count":54},"Le Fournil":{"count":57},"Lila Bäcker":{"count":107},"Lipóti Pékség":{"count":54},"Marie Blachère":{"count":89},"Mlinar":{"count":80},"Musmanni":{"count":81},"Oebel":{"count":65},"Paul":{"count":186},"Red Ribbon":{"count":72},"Schäfer's":{"count":146},"Sehne":{"count":91},"Stadtbäckerei":{"count":60},"Steinecke":{"count":268},"Sternenbäck":{"count":89},"Ströck":{"count":62},"Wiener Feinbäcker":{"count":55},"von Allwörden":{"count":65},"Булочная":{"count":71},"Горячий хлеб":{"count":54},"Каравай":{"count":56},"Кулиничи":{"count":121},"Кулиничі":{"count":59},"Свежий хлеб":{"count":68},"Хлеб":{"count":177},"مخبز":{"count":72},"مخبزة":{"count":55},"نان لواش":{"count":54},"نانوایی":{"count":665},"نانوایی بربری":{"count":140},"نانوایی سنگک":{"count":68},"نانوایی سنگکی":{"count":52},"نانوایی لواش":{"count":63}},"beauty":{"Marionnaud":{"count":54},"Sally Beauty Supply":{"count":151},"Yves Rocher":{"count":654}},"bed":{"Dänisches Bettenlager":{"count":157},"Matratzen Concord":{"count":361},"Mattress Firm":{"count":173},"Sleepy's":{"count":52}},"beverages":{"50嵐":{"count":101},"Dursty":{"count":77},"Edeka Getränkemarkt":{"count":69},"Fristo":{"count":88},"Getränke Hoffmann":{"count":187},"Getränkeland":{"count":81},"Getränkemarkt":{"count":110},"Orterer Getränkemarkt":{"count":64},"Rewe Getränkemarkt":{"count":256},"Trinkgut":{"count":112},"茶湯會":{"count":56}},"bicycle":{"Giant":{"count":52},"Halfords":{"count":158},"Веломарка":{"count":51},"サイクルベースあさひ":{"count":87}},"bookmaker":{"Betfred":{"count":320},"Coral":{"count":466},"Ladbrokes":{"count":629},"Paddy Power":{"count":127},"William Hill":{"count":634},"ΟΠΑΠ":{"count":102}},"butcher":{"Boucherie Charcuterie":{"count":51},"Carnicería":{"count":78},"Fleischerei Richter":{"count":51},"Húsbolt":{"count":52},"Macelleria":{"count":84},"Vinzenzmurr":{"count":55},"Ариант":{"count":84},"Великолукский мясокомбинат":{"count":173},"Мясная лавка":{"count":226},"Мясницкий ряд":{"count":64},"Мясной":{"count":53},"Мясо":{"count":156},"Наша Ряба":{"count":60},"Свежее мясо":{"count":111}},"car":{"Audi":{"count":191},"BMW":{"count":216},"Chevrolet":{"count":259},"Citroën":{"count":445},"Dacia":{"count":56},"Fiat":{"count":167},"Ford":{"count":446},"Honda":{"count":348},"Hyundai":{"count":421},"Isuzu":{"count":66},"Kia":{"count":456},"Land Rover":{"count":54},"Lexus":{"count":76},"Mazda":{"count":193},"Mercedes-Benz":{"count":447},"Mitsubishi":{"count":176},"Mitsubishi Motors":{"count":60},"NISSAN":{"count":51},"Nissan":{"count":424},"Opel":{"count":218},"Peugeot":{"count":527},"Porsche":{"count":97},"Renault":{"count":701},"Seat":{"count":90},"Skoda":{"count":143},"Subaru":{"count":118},"Suzuki":{"count":178},"Toyota":{"count":597},"Volkswagen":{"count":371},"Volvo":{"count":180}},"car_parts":{"Advance Auto Parts":{"count":306},"AutoZone":{"count":759},"Brezan":{"count":95},"Halfords":{"count":95},"NAPA Auto Parts":{"count":250},"Napa Auto Parts":{"count":61},"O'Reilly Auto Parts":{"count":374},"Repco":{"count":77},"Tokić":{"count":61},"repuestos automotrices":{"count":56},"Автозапчастини":{"count":61},"Автомир":{"count":53},"イエローハット":{"count":80},"オートバックス":{"count":91},"タイヤ館":{"count":83}},"car_repair":{"A.T.U":{"count":457},"Advance Auto Parts":{"count":290},"Borracharia":{"count":56},"Bosch Car Service":{"count":65},"Carglass":{"count":234},"Citroën":{"count":108},"Euromaster":{"count":142},"Feu Vert":{"count":178},"Firestone":{"count":224},"Firestone Complete Auto Care":{"count":73},"Ford":{"count":61},"Garage Renault":{"count":84},"Gomeria":{"count":153},"Gomería":{"count":107},"Goodyear":{"count":97},"Grease Monkey":{"count":57},"Halfords":{"count":56},"Jiffy Lube":{"count":464},"Kwik Fit":{"count":249},"Lubricentro":{"count":83},"Meineke":{"count":52},"Mekonomen":{"count":59},"Midas":{"count":462},"Mr. Lube":{"count":56},"NAPA Auto Parts":{"count":82},"Norauto":{"count":257},"O'Reilly Auto Parts":{"count":227},"Pep Boys":{"count":79},"Peugeot":{"count":152},"Pit Stop":{"count":84},"Point S":{"count":59},"Renault":{"count":294},"Roady":{"count":82},"Sears Auto Center":{"count":59},"Speedy":{"count":192},"Stacja Kontroli Pojazdów":{"count":70},"Taller":{"count":63},"Toyota":{"count":63},"Valvoline":{"count":52},"Valvoline Instant Oil Change":{"count":92},"Wulkanizacja":{"count":84},"ÖAMTC":{"count":52},"Автомастерская":{"count":93},"Авторемонт":{"count":57},"Автосервис":{"count":799},"Автосервис+шиномонтаж":{"count":66},"Вулканизация":{"count":72},"Замена масла":{"count":98},"СТО":{"count":1058},"Шиномонтаж":{"count":3591},"шиномонтаж":{"count":173}},"carpet":{"Carpet Right":{"count":111},"Carpetright":{"count":53}},"charity":{"Age UK":{"count":116},"Barnardo's":{"count":56},"British Heart Foundation":{"count":189},"Cancer Research UK":{"count":129},"Goodwill":{"count":120},"Oxfam":{"count":216},"Salvation Army":{"count":63},"Scope":{"count":74},"Sue Ryder":{"count":83}},"chemist":{"7 Дней":{"count":55},"Bipa":{"count":485},"Budnikowsky":{"count":114},"CVS":{"count":58},"Etos":{"count":486},"Kruidvat":{"count":1169},"Matas":{"count":74},"Müller":{"count":350},"Rossmann":{"count":2516},"Schlecker":{"count":51},"Teta":{"count":120},"Trekpleister":{"count":185},"Walgreens":{"count":142},"Watsons":{"count":123},"dm":{"count":1877},"Бытовая химия":{"count":73},"Магнит Косметик":{"count":233},"Мила":{"count":70},"Остров чистоты":{"count":110},"Рубль Бум":{"count":68},"Улыбка радуги":{"count":110},"スギ薬局":{"count":51},"丁丁藥局":{"count":72},"屈臣氏":{"count":134},"康是美":{"count":81}},"clothes":{"AOKI":{"count":119},"AWG":{"count":95},"Ackermans":{"count":98},"Adidas":{"count":224},"Adler":{"count":83},"American Apparel":{"count":89},"American Eagle Outfitters":{"count":93},"Anthropologie":{"count":55},"Ardene":{"count":55},"Armand Thiery":{"count":89},"Banana Republic":{"count":120},"Benetton":{"count":190},"Bershka":{"count":166},"Bonita":{"count":315},"Bonobo":{"count":59},"Brooks Brothers":{"count":55},"Burberry":{"count":63},"Burlington Coat Factory":{"count":104},"Burton":{"count":94},"C&A":{"count":860},"Cache Cache":{"count":59},"Calvin Klein":{"count":78},"Calzedonia":{"count":264},"Camaïeu":{"count":167},"Caroll":{"count":75},"Carter's":{"count":64},"Cecil":{"count":119},"Celio":{"count":206},"Charles Vögele":{"count":133},"Chico's":{"count":96},"Cropp":{"count":68},"Cubus":{"count":65},"Desigual":{"count":175},"Devred":{"count":59},"Didi":{"count":72},"Diesel":{"count":77},"Dorothy Perkins":{"count":85},"Dress Barn":{"count":135},"Dressmann":{"count":67},"Eddie Bauer":{"count":54},"Edgars":{"count":117},"Engbers":{"count":64},"Ernsting's family":{"count":720},"Esprit":{"count":404},"Etam":{"count":121},"Express":{"count":56},"Fat Face":{"count":82},"Forever 21":{"count":124},"Gant":{"count":78},"Gap":{"count":258},"Gerry Weber":{"count":220},"Gina Laura":{"count":80},"Goodwill":{"count":65},"Guess":{"count":146},"Gymboree":{"count":60},"Gémo":{"count":99},"H&M":{"count":1467},"Hallhuber":{"count":63},"House":{"count":67},"Hugo Boss":{"count":109},"Humana":{"count":83},"Hunkemöller":{"count":224},"Intimissimi":{"count":173},"JBC":{"count":54},"Jack & Jones":{"count":174},"Jack Wolfskin":{"count":68},"Jeans Fritz":{"count":110},"Jennyfer":{"count":81},"Jet":{"count":68},"Jigsaw":{"count":51},"Jules":{"count":120},"Justice":{"count":81},"KappAhl":{"count":68},"KiK":{"count":1862},"Kiabi":{"count":276},"La Halle":{"count":148},"Lacoste":{"count":193},"Lane Bryant":{"count":86},"Levi's":{"count":197},"Lindex":{"count":120},"Loft":{"count":62},"Mango":{"count":339},"Marc O'Polo":{"count":82},"Mark's":{"count":76},"Marks & Spencer":{"count":53},"Marshalls":{"count":218},"Massimo Dutti":{"count":109},"Matalan":{"count":144},"Maurices":{"count":70},"Max Mara":{"count":55},"Men's Wearhouse":{"count":128},"Mexx":{"count":68},"Michael Kors":{"count":55},"Mim":{"count":57},"Monsoon":{"count":75},"Mr Price":{"count":99},"NKD":{"count":783},"New Look":{"count":280},"New Yorker":{"count":350},"NewYorker":{"count":54},"Next":{"count":313},"Nike":{"count":122},"Nordstrom Rack":{"count":57},"OVS":{"count":92},"Okaïdi":{"count":63},"Old Navy":{"count":361},"Only":{"count":94},"Orchestra":{"count":117},"Original Marines":{"count":60},"Orsay":{"count":168},"Outfit":{"count":51},"Outlet":{"count":63},"Palmers":{"count":78},"Peacocks":{"count":178},"Peek & Cloppenburg":{"count":69},"Pep":{"count":139},"Pepco":{"count":153},"Petit Bateau":{"count":67},"Pimkie":{"count":163},"Plato's Closet":{"count":53},"Primark":{"count":177},"Promod":{"count":195},"Pull & Bear":{"count":63},"Puma":{"count":65},"Reitmans":{"count":71},"Reserved":{"count":150},"River Island":{"count":125},"Ross":{"count":363},"Sela":{"count":58},"Sergent Major":{"count":77},"Shoeby":{"count":109},"Sisley":{"count":82},"Springfield":{"count":83},"Stefanel":{"count":63},"Steps":{"count":56},"Stradivarius":{"count":103},"Street One":{"count":153},"Superdry":{"count":82},"TJ Maxx":{"count":200},"TK Maxx":{"count":209},"Takko":{"count":843},"Talbots":{"count":54},"Tally Weijl":{"count":151},"Tati":{"count":64},"Terranova":{"count":63},"Tesha":{"count":76},"Tezenis":{"count":98},"The Children's Place":{"count":71},"The North Face":{"count":56},"The Sting":{"count":53},"Timberland":{"count":87},"Toko Pakaian":{"count":72},"Tom Tailor":{"count":120},"Tommy Hilfiger":{"count":206},"Topshop":{"count":62},"Triumph":{"count":132},"Truworths":{"count":72},"Ulla Popken":{"count":117},"Uniqlo":{"count":63},"United Colors of Benetton":{"count":210},"Urban Outfitters":{"count":130},"Vero Moda":{"count":222},"Victoria's Secret":{"count":143},"Vögele":{"count":191},"WE":{"count":68},"Wibra":{"count":99},"Winners":{"count":112},"Woolworths":{"count":119},"Yamamay":{"count":65},"Zara":{"count":540},"Zeeman":{"count":379},"mister*lady":{"count":59},"s.Oliver":{"count":103},"Детская одежда":{"count":59},"Женская одежда":{"count":65},"Липненски":{"count":81},"Московская ярмарка":{"count":51},"Одежда":{"count":163},"Смешные цены":{"count":86},"Спецодежда":{"count":85},"しまむら":{"count":213},"ユニクロ":{"count":201},"ワークマン":{"count":65},"洋服の青山":{"count":242},"西松屋":{"count":113}},"coffee":{"Café Amazon":{"count":212},"Nespresso":{"count":74},"Starbucks":{"count":264,"tags":{"cuisine":"coffee_shop"}},"Tchibo":{"count":197}},"computer":{"Apple Store":{"count":75},"DNS":{"count":234},"PC World":{"count":59},"ДНС":{"count":55}},"confectionery":{"Fagyizó":{"count":58},"Hussel":{"count":78},"Leonidas":{"count":84},"T. SN":{"count":77},"Thorntons":{"count":66}},"convenience":{"711":{"count":64},"777":{"count":58},"24 часа":{"count":85},"7-Eleven":{"count":11418},"8 à Huit":{"count":82},"99 Speedmart":{"count":85},"ABC":{"count":716},"AMPM":{"count":125},"Aibė":{"count":112},"Alepa":{"count":60},"Alfamart":{"count":427},"Alimentara":{"count":63},"Almacen":{"count":405},"Almacén":{"count":94},"Aral":{"count":93},"BP":{"count":273},"BP Shop":{"count":70},"Baqala":{"count":181},"Best One":{"count":57},"Best-One":{"count":63},"Biedronka":{"count":98},"Bodega":{"count":83},"Bonjour":{"count":71},"CBA":{"count":299},"COOP":{"count":470},"COOP Jednota":{"count":381},"CU":{"count":324},"Carrefour City":{"count":91},"Carrefour Express":{"count":255},"Casey's General Store":{"count":225},"Casino Shop":{"count":56},"Centra":{"count":139},"Central Convenience Store":{"count":69},"Chevron":{"count":110},"Circle K":{"count":790},"Citgo":{"count":73},"Co-Op":{"count":54},"Co-op":{"count":161},"Coles Express":{"count":217},"Coop":{"count":492},"Coop Jednota":{"count":128},"Corner Store":{"count":109},"Costcutter":{"count":435},"Couche-Tard":{"count":139},"Cumberland Farms":{"count":109},"Daisy Mart":{"count":57},"Delikatesy":{"count":148},"Delikatesy Centrum":{"count":182},"Dollar General":{"count":646},"Dollar Tree":{"count":67},"Dépanneur":{"count":53},"Esso":{"count":143},"Express":{"count":53},"Extra":{"count":86},"Exxon":{"count":51},"Family Dollar":{"count":85},"FamilyMart":{"count":919},"Food Mart":{"count":512},"Four Square":{"count":99},"Franprix":{"count":96},"Fresh":{"count":67},"Freshmarket":{"count":224},"GS25":{"count":343},"Groszek":{"count":254},"Hasty Market":{"count":87},"Holiday":{"count":67},"Hruška":{"count":89},"Indomaret":{"count":483},"Jednota":{"count":66},"Joker":{"count":56},"K-Market":{"count":104},"Kangaroo":{"count":54},"Kangaroo Express":{"count":51},"Kisbolt":{"count":94},"Konzum":{"count":229},"Kum & Go":{"count":127},"Kwik Trip":{"count":134},"Lawson":{"count":311},"Lewiatan":{"count":565},"Lifestyle Express":{"count":114},"Londis":{"count":505},"M&S Simply Food":{"count":72},"Mac's":{"count":295},"Mace":{"count":166},"Magazin":{"count":81},"Magazin Mixt":{"count":139},"Magazin Non-Stop":{"count":62},"Magazin mixt":{"count":57},"Marathon":{"count":59},"Maxikiosco":{"count":86},"Małpka Express":{"count":71},"McColl's":{"count":289},"Mercator":{"count":122},"Migrolino":{"count":63},"Mini ABC":{"count":77},"Mini Market":{"count":1312},"Mini Market Non-Stop":{"count":134},"Mini Mart":{"count":78},"Mini Stop":{"count":466},"Minimercado":{"count":77},"Mlin i pekare":{"count":63},"Mobil":{"count":82},"Nasz Sklep":{"count":92},"Nisa":{"count":70},"Nisa Local":{"count":164},"OK":{"count":107},"OK-Mart":{"count":51},"OK便利商店":{"count":96},"OK便利店 Circle K":{"count":92},"Odido":{"count":148},"On The Run":{"count":53},"On the Run":{"count":111},"One Stop":{"count":294},"Oxxo":{"count":2261},"Parduotuvė":{"count":102},"Petit Casino":{"count":297},"Plaid Pantry":{"count":69},"Potraviny":{"count":438},"Prehrana":{"count":88},"Premier":{"count":321},"Proxi":{"count":249},"Proxy":{"count":53},"Pulperia":{"count":56},"Pulpería":{"count":51},"QuikTrip":{"count":161},"Rite Aid":{"count":72},"Royal Farms":{"count":90},"Sainsbury's Local":{"count":208},"Sale":{"count":89},"Sari-sari Store":{"count":82},"Select":{"count":133},"Sheetz":{"count":137},"Shell":{"count":479},"Shell Select":{"count":71},"Shop & Go":{"count":80},"Siwa":{"count":157},"Sklep spożywczy":{"count":151},"Smíšené zboží":{"count":57},"Spar":{"count":1472},"Speedway":{"count":108},"Społem":{"count":199},"Spätkauf":{"count":60},"Statoil":{"count":62},"Stewart's":{"count":255},"Stores":{"count":70},"Stripes":{"count":63},"Studenac":{"count":113},"Sunkus":{"count":51},"Sunoco":{"count":65},"Słoneczko":{"count":61},"TESCO Lotus Express":{"count":55},"Tchibo":{"count":75},"Tesco":{"count":54},"Tesco Express":{"count":661},"Tesco Lotus Express":{"count":107},"The Co-operative Food":{"count":341},"Tom Market 89":{"count":232},"Total":{"count":172},"United Dairy Farmers":{"count":55},"Utile":{"count":63},"Valero":{"count":71},"Vegyesbolt":{"count":391},"Večerka":{"count":131},"Vival":{"count":381},"Volg":{"count":149},"Wawa":{"count":279},"Weltladen":{"count":64},"Woolworths Petrol":{"count":97},"abc":{"count":374},"ampm":{"count":152},"best-one":{"count":52},"odido":{"count":77},"Élelmiszer":{"count":59},"Élelmiszerbolt":{"count":65},"Żabka":{"count":1656},"Žabka":{"count":61},"АТБ":{"count":56},"Августина":{"count":52},"Авоська":{"count":115},"Агрокомплекс":{"count":79},"Альянс":{"count":51},"Апельсин":{"count":72},"Ассорти":{"count":118},"Белорусские продукты":{"count":58},"Берёзка":{"count":193},"Везунчик":{"count":66},"Верный":{"count":61},"Весна":{"count":101},"Ветеран":{"count":56},"Визит":{"count":99},"Виктория":{"count":164},"ВкусВилл":{"count":131},"Гастроном":{"count":383},"Гермес":{"count":68},"Гроздь":{"count":52},"Гурман":{"count":92},"Дикси":{"count":270},"Домашний":{"count":77},"Евроопт":{"count":152},"Елена":{"count":68},"Ермолино":{"count":51},"КазМунайГаз":{"count":117},"Калинка":{"count":61},"Каравай":{"count":52},"Квартал":{"count":57},"Кировский":{"count":86},"Колобок":{"count":51},"Колосок":{"count":58},"Копеечка":{"count":99},"Копейка":{"count":65},"Корзинка":{"count":54},"Крамниця":{"count":64},"Кристалл":{"count":57},"Кулинария":{"count":134},"Купец":{"count":64},"Ласточка":{"count":51},"Лидер":{"count":60},"Любимый":{"count":84},"Люкс":{"count":59},"Магазин при АЗС":{"count":54},"Магнит":{"count":1991},"Магнолия":{"count":88},"Мария-Ра":{"count":197},"Маяк":{"count":76},"Меркурий":{"count":77},"Мечта":{"count":103},"Минимаркет":{"count":424},"Мираж":{"count":56},"Монетка":{"count":165},"Надежда":{"count":115},"Ника":{"count":57},"Оазис":{"count":57},"Олимп":{"count":51},"Перекресток":{"count":157},"Подсолнух":{"count":69},"Престиж":{"count":58},"Продукти":{"count":1446},"Продуктовый":{"count":307},"Продуктовый магазин":{"count":803},"Продукты":{"count":8416},"Продукты 24":{"count":65},"Пятёрочка":{"count":1324},"Радуга":{"count":165},"Родны кут":{"count":90},"Ромашка":{"count":83},"Русь":{"count":61},"Светлана":{"count":96},"Сказка":{"count":62},"Смак":{"count":151},"Солнечный":{"count":54},"Солнышко":{"count":54},"Татьяна":{"count":68},"Теремок":{"count":105},"Тройка":{"count":62},"У Палыча":{"count":69},"Универсам":{"count":153},"Фортуна":{"count":97},"Хороший":{"count":55},"Центральный":{"count":73},"Чайка":{"count":57},"Шанс":{"count":60},"Эконом":{"count":72},"Юбилейный":{"count":56},"Юлия":{"count":58},"продукты":{"count":157},"მარკეტი":{"count":134},"მარკეტი (Market)":{"count":71},"サンクス":{"count":970,"tags":{"name:en":"sunkus"}},"サークルK":{"count":1109,"tags":{"name:en":"Circle K"}},"スリーエフ":{"count":228},"セイコーマート":{"count":449},"セブンイレブン":{"count":7859,"tags":{"name:en":"7-Eleven"}},"セブンイレブン(Seven-Eleven)":{"count":332},"セーブオン":{"count":71},"デイリーヤマザキ":{"count":421},"ファミリーマート":{"count":4457,"tags":{"name:en":"FamilyMart"}},"ポプラ":{"count":101},"ミニストップ":{"count":773,"tags":{"name:en":"MINISTOP"}},"ヤマザキショップ":{"count":106},"ローソン":{"count":4247,"tags":{"name:en":"LAWSON"}},"ローソンストア100":{"count":272},"全家":{"count":482},"全家便利商店":{"count":833},"萊爾富":{"count":405},"세븐일레븐":{"count":157}},"copyshop":{"FedEx Office":{"count":53},"FedEx Office Print and Ship Center":{"count":170}},"cosmetics":{"Douglas":{"count":58},"Lush":{"count":80},"Marionnaud":{"count":55},"Sephora":{"count":184},"The Body Shop":{"count":95},"Yves Rocher":{"count":111},"Л'Этуаль":{"count":111},"Магнит Косметик":{"count":116},"Магнит косметик":{"count":63},"Магнит-Косметик":{"count":55},"Мила":{"count":68},"Подружка":{"count":51}},"craft":{"Hobby Lobby":{"count":96},"Michaels":{"count":222}},"deli":{"ほっともっと":{"count":58}},"department_store":{"Argos":{"count":90},"Bed Bath & Beyond":{"count":72},"Big Lots":{"count":142},"Big W":{"count":120},"Canadian Tire":{"count":176},"Coppel":{"count":55},"Debenhams":{"count":118},"Dillard's":{"count":86},"Dollar General":{"count":62},"Dollar Tree":{"count":64},"El Corte Inglés":{"count":61},"Family Dollar":{"count":76},"Fred Meyer":{"count":51},"Galeria Kaufhof":{"count":60},"HEMA":{"count":248},"Harvey Norman":{"count":62},"JCPenney":{"count":365},"Karstadt":{"count":66},"Kmart":{"count":390},"Kohl's":{"count":371},"Lojas Americanas":{"count":63},"Macy's":{"count":292},"Marks & Spencer":{"count":136},"Marshalls":{"count":58},"Myer":{"count":51},"Nordstrom":{"count":54},"Sam's Club":{"count":103},"Sears":{"count":462},"Shopko":{"count":65},"Target":{"count":1104},"The Warehouse":{"count":68},"Walmart":{"count":847},"Walmart Supercenter":{"count":234},"Woolworth":{"count":153},"Магнит":{"count":88},"Универмаг":{"count":170}},"doityourself":{"Ace Hardware":{"count":300},"B&Q":{"count":229},"Bauhaus":{"count":223},"Biltema":{"count":64},"Brico":{"count":126},"Bricomarché":{"count":425},"Bricorama":{"count":117},"Bunnings Warehouse":{"count":210},"Canadian Tire":{"count":138},"Castorama":{"count":168},"Easy":{"count":53},"Gamma":{"count":133},"Globus Baumarkt":{"count":52},"Hagebaumarkt":{"count":132},"Hellweg":{"count":70},"Home Depot":{"count":1345},"Home Hardware":{"count":172},"Homebase":{"count":205},"Hornbach":{"count":134},"Hubo":{"count":107},"Karwei":{"count":77},"Lagerhaus":{"count":116},"Leroy Merlin":{"count":285},"Lowe's":{"count":1236},"Lowes":{"count":95},"Menards":{"count":132},"Mr Bricolage":{"count":112},"Mr.Bricolage":{"count":139},"OBI":{"count":501},"Point P":{"count":125},"Praktiker":{"count":54},"Praxis":{"count":61},"Rona":{"count":77},"Screwfix":{"count":80},"Sonderpreis Baumarkt":{"count":68},"Tekzen":{"count":112},"Toom Baumarkt":{"count":155},"Weldom":{"count":110},"Wickes":{"count":159},"Леруа Мерлен":{"count":54},"Мастер":{"count":59},"Сантехника":{"count":51},"Строитель":{"count":67},"Стройматериалы":{"count":506},"Хозтовары":{"count":137},"カインズホーム":{"count":51},"コメリ":{"count":137},"コーナン":{"count":77}},"dry_cleaning":{"Cleaners":{"count":103},"Pressing":{"count":58},"Диана":{"count":88},"Химчистка":{"count":73},"ホワイト急便":{"count":136}},"electronics":{"Apple Store":{"count":63},"BCC":{"count":54},"Batteries Plus Bulbs":{"count":74},"Bell":{"count":73},"Best Buy":{"count":706},"Boulanger":{"count":71},"Currys":{"count":109},"Currys PC World":{"count":70},"DNS":{"count":111},"Darty":{"count":168},"Elektra":{"count":64},"Elgiganten":{"count":67},"Euronics":{"count":247},"Expert":{"count":224},"Hartlauer":{"count":64},"Interdiscount":{"count":57},"La Curacao":{"count":69},"Maplin":{"count":114},"Media Expert":{"count":163},"Media Markt":{"count":422},"Musimundo":{"count":53},"Neonet":{"count":97},"RTV Euro AGD":{"count":68},"Radio Shack":{"count":485},"Rogers":{"count":61},"Samsung":{"count":164},"Saturn":{"count":155},"Sony":{"count":51},"The Source":{"count":91},"Unieuro":{"count":66},"М.Видео":{"count":121},"Фокстрот":{"count":76},"Эксперт":{"count":70},"Эльдорадо":{"count":313},"エディオン":{"count":74},"ケーズデンキ":{"count":136},"コジマ":{"count":53},"ヤマダ電機":{"count":162},"全國電子":{"count":72},"燦坤3C":{"count":52}},"erotic":{"Orion":{"count":85}},"fabric":{"Ткани":{"count":121}},"farm":{"Hofladen":{"count":63}},"florist":{"Blume 2000":{"count":94},"Blumen Risse":{"count":69},"Fleuriste":{"count":54},"Interflora":{"count":78},"Monceau Fleurs":{"count":69},"Virágbolt":{"count":64},"Квіти":{"count":86},"Цветочный магазин":{"count":57},"Цветы":{"count":1098}},"frame":{"rumah penduduk":{"count":316}},"funeral_directors":{"The Co-operative Funeralcare":{"count":82},"Ритуальные услуги":{"count":133}},"furniture":{"Aaron's":{"count":57},"Black Red White":{"count":79},"Bodzio":{"count":61},"But":{"count":162},"Casa":{"count":62},"Conforama":{"count":174},"DFS":{"count":52},"Dänisches Bettenlager":{"count":464},"Fly":{"count":53},"Harveys":{"count":58},"IKEA":{"count":234},"JYSK":{"count":431},"Kwantum":{"count":54},"Leen Bakker":{"count":72},"Pier 1 Imports":{"count":95},"Roller":{"count":99},"The Brick":{"count":68},"Меблі":{"count":70},"ニトリ":{"count":93}},"garden_centre":{"Dehner":{"count":59},"Gamm Vert":{"count":210},"Jardiland":{"count":124},"Point Vert":{"count":68},"Welkoop":{"count":97},"Семена":{"count":53}},"gift":{"Card Factory":{"count":116},"Hallmark":{"count":163},"Подарки":{"count":56}},"greengrocer":{"Frutería":{"count":60},"Овощи и фрукты":{"count":71}},"hairdresser":{"Berber":{"count":71},"Cost Cutters":{"count":69},"Fantastic Sams":{"count":53},"Figaro":{"count":79},"First Choice Haircutters":{"count":51},"Franck Provost":{"count":136},"Frizerie":{"count":59},"Great Clips":{"count":578},"Haarmonie":{"count":79},"Haarscharf":{"count":59},"Hair Cuttery":{"count":121},"Hairkiller":{"count":73},"Jean Louis David":{"count":90},"Jean-Louis David":{"count":59},"Klier":{"count":239},"Klipp":{"count":76},"Le Salon":{"count":55},"Marco Aldany":{"count":55},"Peluquería":{"count":165},"Salon fryzjerski":{"count":52},"Sport Clips":{"count":114},"Super Cuts":{"count":55},"Supercuts":{"count":359},"Tchip":{"count":62},"The Barber Shop":{"count":130},"Toni & Guy":{"count":77},"Top Hair":{"count":74},"Виктория":{"count":53},"Елена":{"count":53},"Локон":{"count":67},"Парикмахерская":{"count":798},"Перукарня":{"count":119},"Салон красоты":{"count":58},"Стиль":{"count":94},"Шарм":{"count":79},"حلاق":{"count":65}},"hardware":{"1000 мелочей":{"count":125},"Ferretería":{"count":295},"Harbor Freight Tools":{"count":57},"Home Hardware":{"count":94},"Lowe's":{"count":74},"Quincaillerie":{"count":105},"True Value":{"count":52},"Würth":{"count":51},"Промтовары":{"count":67},"Сантехника":{"count":87},"Стройматериалы":{"count":142},"Товары для дома":{"count":69},"Хозтовары":{"count":477}},"hearing_aids":{"Amplifon":{"count":124},"Geers":{"count":66},"Kind Hörgeräte":{"count":74},"amplifon":{"count":52}},"hifi":{"Bang & Olufsen":{"count":51}},"houseware":{"Blokker":{"count":264},"Marskramer":{"count":72},"Xenos":{"count":119}},"interior_decoration":{"Casa":{"count":65},"Depot":{"count":97}},"jewelry":{"585":{"count":94},"Apart":{"count":53},"Bijou Brigitte":{"count":172},"Christ":{"count":116},"Claire's":{"count":99},"Ernest Jones":{"count":53},"H Samuel":{"count":55},"James Avery Jewelry":{"count":99},"Julien d'Orcel":{"count":123},"Kay Jewelers":{"count":78},"Pandora":{"count":280},"Swarovski":{"count":240},"Адамас":{"count":60},"Золото":{"count":51}},"kiosk":{"Aral":{"count":76},"Edicola":{"count":94},"Esso":{"count":51},"KIOS":{"count":288},"Kiosko":{"count":62},"Kiosque":{"count":68},"Kolporter":{"count":88},"Lietuvos spauda":{"count":62},"Narvesen":{"count":188},"Pressbyrån":{"count":117},"Pulpería":{"count":61},"R-Kioski":{"count":352},"Relay":{"count":61},"Ruch":{"count":187},"Shell":{"count":122},"Tabak Trafik":{"count":83},"Tisak":{"count":245},"Trafik":{"count":221},"Trafika":{"count":64},"Trinkhalle":{"count":98},"Warung":{"count":73},"Белсоюзпечать":{"count":59},"Киоск":{"count":143},"Продукты":{"count":212},"Роспечать":{"count":233},"Союзпечать":{"count":94},"მარკეტი (Market)":{"count":94}},"kitchen":{"Cuisinella":{"count":60},"Home Utensils":{"count":65}},"laundry":{"Launderette":{"count":51},"Lavandería":{"count":84},"コインランドリー":{"count":64}},"lottery":{"Loteria de la Provincia":{"count":63},"Lotería Nacional":{"count":221},"Lotería de la Provincia":{"count":349},"Lotto":{"count":192},"Lottózó":{"count":69},"ONCE":{"count":91}},"mall":{"Торговый центр":{"count":57}},"massage":{"Massage Envy":{"count":80}},"medical_supply":{"Pofam-Poznań":{"count":61}},"mobile_phone":{"3 Store":{"count":90},"AT&T":{"count":558},"Bell":{"count":140},"Bitė":{"count":66},"Boost Mobile":{"count":151},"Carphone Warehouse":{"count":357},"Claro":{"count":446},"Cricket Wireless":{"count":73},"Digicel":{"count":152},"EE":{"count":190},"MetroPCS":{"count":201},"Movistar":{"count":411},"O2":{"count":527},"Orange":{"count":730},"Personal":{"count":54},"Play":{"count":150},"Plus":{"count":122},"Rogers":{"count":52},"SFR":{"count":156},"Samsung":{"count":71},"Sprint":{"count":394},"T-Mobile":{"count":665},"TIM":{"count":67},"Telcel":{"count":52},"Tele2":{"count":186},"Telekom":{"count":148},"Telekom Shop":{"count":99},"Telenor":{"count":99},"Telus":{"count":69},"The Phone House":{"count":137},"Three":{"count":57},"Tim":{"count":51},"Télécentre":{"count":76},"Verizon":{"count":152},"Verizon Wireless":{"count":629},"Vodafone":{"count":1168},"Vodafone Shop":{"count":52},"Wind":{"count":156},"Yoigo":{"count":61},"au":{"count":136},"auショップ":{"count":340},"mobilcom debitel":{"count":63},"Алло":{"count":86},"Билайн":{"count":441},"Евросеть":{"count":1020},"Київстар":{"count":57},"МТС":{"count":1012},"Мегафон":{"count":687},"Связной":{"count":842},"Теле2":{"count":70},"ソフトバンクショップ":{"count":482},"ドコモショップ":{"count":426}},"money_lender":{"Money Mart":{"count":95}},"motorcycle":{"Harley Davidson":{"count":81},"Honda":{"count":238},"Suzuki":{"count":90},"Yamaha":{"count":235}},"music":{"HMV":{"count":81},"TSUTAYA":{"count":53}},"musical_instrument":{"Guitar Center":{"count":51}},"newsagent":{"Edicola":{"count":111},"Kolporter":{"count":56},"Maison de la Presse":{"count":132},"Relay":{"count":246},"Tabac Presse":{"count":82},"Trafika":{"count":60},"WHSmith":{"count":160},"Белсоюзпечать":{"count":52},"Витебскоблсоюзпечать":{"count":56},"Первая полоса":{"count":57},"Печать":{"count":74},"Роспечать":{"count":371},"Союзпечать":{"count":130}},"optician":{"Alain Afflelou":{"count":204},"Apollo":{"count":441},"Atol":{"count":124},"Boots Opticians":{"count":101},"Fielmann":{"count":477},"General Óptica":{"count":53},"Grand Optical":{"count":57},"Générale d'Optique":{"count":94},"Hakim Optical":{"count":73},"Hans Anders":{"count":105},"Krys":{"count":192},"Les Opticiens Mutualistes":{"count":103},"Optic 2000":{"count":281},"Optical Center":{"count":125},"Pearle":{"count":199},"Pearle Vision":{"count":52},"Specsavers":{"count":384},"Sunglass Hut":{"count":61},"Synoptik":{"count":55},"Vision Express":{"count":183},"แว่นท็อปเจริญ":{"count":97},"メガネスーパー":{"count":62},"眼鏡市場":{"count":206}},"outdoor":{"Jack Wolfskin":{"count":51},"Mountain Warehouse":{"count":74},"REI":{"count":77},"Рыболов":{"count":70}},"paint":{"Benjamin Moore":{"count":58},"Comex":{"count":68},"Jotun":{"count":51},"National Paints":{"count":53},"Sherwin Williams":{"count":323},"Sherwin-Williams Paints":{"count":59}},"pawnbroker":{"Cash Converters":{"count":83},"Lombard":{"count":55},"Palawan Pawnshop":{"count":52}},"pet":{"Das Futterhaus":{"count":158},"Fressnapf":{"count":620},"Global Pet Foods":{"count":54},"Maxi Zoo":{"count":65},"Pet Valu":{"count":112},"PetSmart":{"count":491},"Petco":{"count":377},"Pets at Home":{"count":170},"Бетховен":{"count":60},"Зоотовары":{"count":79},"Четыре лапы":{"count":56}},"second_hand":{"Goodwill":{"count":235},"Value Village":{"count":53}},"shoes":{"Adidas":{"count":51},"Aldo":{"count":74},"Bata":{"count":281},"Besson Chaussures":{"count":124},"Brantano":{"count":132},"CCC":{"count":245},"Camper":{"count":51},"Chaussea":{"count":102},"Clarks":{"count":268},"Converse":{"count":58},"Crocs":{"count":64},"DSW":{"count":52},"Deichmann":{"count":1231},"Dosenbach":{"count":58},"Ecco":{"count":185},"Famous Footwear":{"count":178},"Foot Locker":{"count":240},"Geox":{"count":151},"Kari":{"count":66},"La Halle aux Chaussures":{"count":158},"Mephisto":{"count":57},"Minelli":{"count":55},"New Balance":{"count":52},"Payless":{"count":56},"Payless Shoe Source":{"count":316},"Payless ShoeSource":{"count":133},"Quick Schuh":{"count":116},"Rack Room Shoes":{"count":51},"Reno":{"count":233},"Rieker":{"count":83},"Salamander":{"count":103},"San Marina":{"count":54},"Scapino":{"count":67},"Shoe Carnival":{"count":66},"Shoe Zone":{"count":161},"Siemes Schuhcenter":{"count":69},"Skechers":{"count":83},"Tamaris":{"count":99},"Timberland":{"count":51},"vanHaren":{"count":98},"Éram":{"count":88},"Ремонт обуви":{"count":71},"ЦентрОбувь":{"count":76},"Юничел":{"count":73},"東京靴流通センター":{"count":81}},"sports":{"Adidas":{"count":132},"Aktiesport":{"count":61},"Big 5 Sporting Goods":{"count":93},"Decathlon":{"count":409},"Dick's Sporting Goods":{"count":222},"Hervis":{"count":66},"Intersport":{"count":737},"JD Sports":{"count":58},"Nike":{"count":95},"Sport 2000":{"count":209},"Sports Authority":{"count":108},"Sports Direct":{"count":217},"Спортмастер":{"count":208},"Спорттовары":{"count":68}},"stationery":{"Bureau Vallée":{"count":64},"Libro":{"count":73},"McPaper":{"count":158},"Office Depot":{"count":378},"Office Max":{"count":169},"Officeworks":{"count":73},"Pagro":{"count":64},"Paperchase":{"count":54},"Ryman":{"count":85},"Staples":{"count":671},"Канцтовары":{"count":140}},"supermarket":{"7-Eleven":{"count":60},"A&O":{"count":67},"A101":{"count":388},"AD Delhaize":{"count":80},"ADEG":{"count":85},"Ahorramás":{"count":66},"Albert":{"count":245},"Albert Heijn":{"count":766},"Albertsons":{"count":316},"Aldi":{"count":6323},"Aldi Nord":{"count":356},"Aldi Süd":{"count":916},"Alfamart":{"count":109},"Alimerka":{"count":96},"Alnatura":{"count":97},"Asda":{"count":474},"Atac":{"count":53},"Atacadão":{"count":80},"Auchan":{"count":229},"BM":{"count":52},"Biedronka":{"count":2348},"Big C":{"count":53},"Billa":{"count":1592},"Bim":{"count":678},"Biocoop":{"count":159},"Bodega Aurrera":{"count":264},"Budgens":{"count":77},"Bulk Barn":{"count":54},"Bunnpris":{"count":69},"CBA":{"count":236},"CONAD":{"count":67},"COOP":{"count":255},"COOP Jednota":{"count":177},"CRAI":{"count":66},"CU":{"count":64},"Caprabo":{"count":144},"Cargills Food City":{"count":79},"Carrefour":{"count":2544},"Carrefour City":{"count":349},"Carrefour Contact":{"count":270},"Carrefour Express":{"count":921},"Centra":{"count":63},"Centre Commercial E. Leclerc":{"count":385},"Checkers":{"count":140},"Chedraui":{"count":80},"Co-Op":{"count":62},"Co-op":{"count":352},"Co-operative":{"count":51},"Coles":{"count":583},"Colmado":{"count":103},"Colruyt":{"count":212},"Combi":{"count":127},"Comercial Mexicana":{"count":59},"Conad":{"count":560},"Conad City":{"count":95},"Condis":{"count":126},"Consum":{"count":236},"Continente":{"count":111},"Coop":{"count":1665},"Coop Extra":{"count":88},"Coop Jednota":{"count":101},"Coop Konsum":{"count":96},"Costco Gasoline":{"count":295},"Costcutter":{"count":93},"Coto":{"count":65},"Countdown":{"count":135},"Coviran":{"count":124},"Covirán":{"count":51},"Crai":{"count":119},"Cub Foods":{"count":57},"Dagli'Brugsen":{"count":135},"Deen":{"count":55},"Delhaize":{"count":228},"Delikatesy Centrum":{"count":209},"Denner":{"count":412},"Despar":{"count":209},"Despensa Familiar":{"count":81},"Dia":{"count":1329},"Dia %":{"count":181},"Dia Market":{"count":60},"Dino":{"count":298},"Dirk van den Broek":{"count":66},"Disco":{"count":74},"Diska":{"count":68},"Dollar General":{"count":106},"Dollar Tree":{"count":52},"Dunnes Stores":{"count":72},"E-Center":{"count":66},"E. Leclerc":{"count":186},"E. Leclerc Drive":{"count":97},"EKO":{"count":78},"EMTÉ":{"count":74},"Edeka":{"count":2231},"Ekom":{"count":64},"Ekono":{"count":68},"El Árbol":{"count":86},"Eroski":{"count":351},"Esselunga":{"count":106},"EuroSpin":{"count":81},"Eurospar":{"count":340},"Eurospin":{"count":328},"Extra":{"count":149},"Famiglia Cooperativa":{"count":89},"Famila":{"count":167},"Family Dollar":{"count":72},"Fareway":{"count":51},"Farmfoods":{"count":141},"Feneberg":{"count":64},"Food Basics":{"count":116},"Food Lion":{"count":425},"Foodland":{"count":192},"Foodworks":{"count":90},"Franprix":{"count":401},"Fred Meyer":{"count":70},"Freshmarket":{"count":86},"Froiz":{"count":97},"Føtex":{"count":74},"G20":{"count":71},"GS25":{"count":72},"Gadis":{"count":126},"Game":{"count":59},"Giant":{"count":276},"Giant Eagle":{"count":134},"Grand Frais":{"count":70},"Grocery Outlet":{"count":128},"Géant Casino":{"count":75},"H-E-B":{"count":274},"HIT":{"count":64},"Hannaford":{"count":95},"Harris Teeter":{"count":158},"Hemköp":{"count":87},"Heron Foods":{"count":55},"Hofer":{"count":484},"Hoogvliet":{"count":66},"Hruška":{"count":54},"Hy-Vee":{"count":121},"ICA":{"count":255},"ICA Kvantum":{"count":51},"IDEA":{"count":52},"IGA":{"count":568},"Iceland":{"count":538},"Indomaret":{"count":124},"Intermarché":{"count":1477},"Intermarché Contact":{"count":122},"Intermarché Super":{"count":261},"Interspar":{"count":117},"Irma":{"count":69},"Jewel-Osco":{"count":72},"Jumbo":{"count":476},"K+K":{"count":119},"Kaufland":{"count":1172},"King Soopers":{"count":99},"Kiwi":{"count":178},"Konsum":{"count":144},"Konzum":{"count":370},"Kroger":{"count":627},"Kvickly":{"count":60},"La Vie Claire":{"count":65},"Landi":{"count":54},"Leader Price":{"count":502},"Leclerc Drive":{"count":120},"Lewiatan":{"count":255},"Lider":{"count":78},"Lidl":{"count":8927},"Londis":{"count":52},"Lupa":{"count":79},"M&S Simply Food":{"count":52},"MPREIS":{"count":187},"Makro":{"count":226},"Markant":{"count":98},"Market Basket":{"count":57},"Marktkauf":{"count":117},"Match":{"count":139},"Maxi":{"count":198},"Maxi Dia":{"count":52},"Maxima":{"count":111},"Maxima X":{"count":158},"Maxima XX":{"count":69},"Mega Image":{"count":97},"Mego":{"count":52},"Meijer":{"count":129},"Meny":{"count":105},"Mercado Municipal":{"count":52},"Mercado de Abastos":{"count":57},"Mercadona":{"count":1228},"Mercator":{"count":155},"Merkur":{"count":132},"Metro":{"count":395},"Migros":{"count":641},"Mila":{"count":90},"Mini Market":{"count":81},"Minipreço":{"count":213},"Mix Markt":{"count":60},"Monoprix":{"count":283},"More":{"count":61},"Morrisons":{"count":443},"NORMA":{"count":144},"NP":{"count":251},"Nah & Frisch":{"count":107},"Nahkauf":{"count":324},"Netto":{"count":4429},"Netto Marken-Discount":{"count":706},"New World":{"count":89},"No Frills":{"count":177},"Norfa XL":{"count":66},"Norma":{"count":1162},"Oxxo":{"count":278},"PENNY":{"count":89},"PLUS":{"count":92},"POLOmarket":{"count":172},"Palí":{"count":69},"Pam":{"count":77},"Penny":{"count":2819},"Penny Markt":{"count":77},"Petit Casino":{"count":146},"Pick n Pay":{"count":268},"Piggly Wiggly":{"count":103},"Pingo Doce":{"count":308},"Piotr i Paweł":{"count":112},"Plaza Vea":{"count":68},"Plodine":{"count":67},"Poiesz":{"count":53},"Price Chopper":{"count":132},"Prix":{"count":53},"Profi":{"count":203},"Proxi":{"count":75},"Proxy Delhaize":{"count":63},"Publix":{"count":645},"Punto Simply":{"count":54},"Puregold":{"count":75},"Pão de Açúcar":{"count":76},"QFC":{"count":54},"REMA 1000":{"count":89},"Ralphs":{"count":81},"Real":{"count":210},"Real Canadian Superstore":{"count":69},"Reliance Fresh":{"count":95},"Rema 1000":{"count":394},"Rewe":{"count":2808},"Rewe City":{"count":78},"Rimi":{"count":115},"S-Market":{"count":110},"Safeway":{"count":619},"Sainsbury's":{"count":595},"Sainsbury's Local":{"count":248},"Sam's Club":{"count":303},"Santa Isabel":{"count":174},"Save-A-Lot":{"count":100,"tags":{"shop":"supermarket"}},"ShopRite":{"count":53},"Shoprite":{"count":337},"Sigma":{"count":107},"Simply Market":{"count":541},"Sky":{"count":113},"Smith's":{"count":56},"Sobeys":{"count":186},"Soriana":{"count":194},"Spar":{"count":3381},"Społem":{"count":120},"Sprouts Farmers Market":{"count":71},"Stokrotka":{"count":227},"Stop & Shop":{"count":147},"Super C":{"count":57},"Super U":{"count":654},"SuperBrugsen":{"count":183},"SuperValu":{"count":80},"Superama":{"count":51},"Supersol":{"count":51},"Superspar":{"count":54},"Tegut":{"count":118},"Tengelmann":{"count":155},"Tesco":{"count":1373},"Tesco Express":{"count":566},"Tesco Extra":{"count":200},"Tesco Lotus":{"count":95},"Tesco Metro":{"count":153},"The Co-operative":{"count":79},"The Co-operative Food":{"count":1261},"Tommy":{"count":56},"Tottus":{"count":82},"Trader Joe's":{"count":345},"Treff 3000":{"count":134},"U Express":{"count":129},"Unimarc":{"count":256},"Unimarkt":{"count":104},"Utile":{"count":68},"Vea":{"count":67},"Vival":{"count":80},"Volg":{"count":231},"Waitrose":{"count":301},"Walmart":{"count":1164},"Walmart Neighborhood Market":{"count":171},"Walmart Supercenter":{"count":688},"Wasgau":{"count":51},"Wegmans":{"count":89},"Wellcome":{"count":51},"Whole Foods Market":{"count":379,"tags":{"shop":"supermarket"}},"Willys":{"count":89},"WinCo Foods":{"count":53},"Winn Dixie":{"count":168},"Woolworths":{"count":816},"denn's Biomarkt":{"count":147},"fakta":{"count":296},"real":{"count":58},"tegut":{"count":89},"Şok":{"count":271},"Żabka":{"count":88},"ΑΒ Βασιλόπουλος":{"count":82},"Γαλαξίας":{"count":54},"Μασούτης":{"count":85},"Σκλαβενίτης":{"count":92},"АТБ":{"count":618},"Абсолют":{"count":51},"Авоська":{"count":60},"Азбука Вкуса":{"count":66},"Атак":{"count":85},"Ашан":{"count":80},"Верный":{"count":226},"Виктория":{"count":74},"Вопак":{"count":59},"Гастроном":{"count":54},"Гроздь":{"count":63},"Десяточка":{"count":52},"Дикси":{"count":1670},"Евроопт":{"count":201},"Карусель":{"count":68},"Квартал":{"count":77},"Кировский":{"count":54},"Командор":{"count":75},"Красный Яр":{"count":58},"Лента":{"count":165},"Магнит":{"count":4289},"Магнолия":{"count":121},"Мария-Ра":{"count":159},"Монетка":{"count":363},"Народная 7Я семьЯ":{"count":199},"Перекресток":{"count":501},"Покупочка":{"count":73},"Полушка":{"count":213},"Пятёрочка":{"count":3622},"Радеж":{"count":64},"Рукавичка":{"count":78},"Светофор":{"count":73},"Седьмой континент":{"count":69},"Семейный":{"count":52},"Семья":{"count":85},"Супермаркет":{"count":65},"Сільпо":{"count":203},"Таврія‑В":{"count":66},"Универсам":{"count":77},"Фора":{"count":162},"Фуршет":{"count":86},"Хүнсний дэлгүүр":{"count":63},"Эдельвейс":{"count":55},"хүнсний дэлгүүр":{"count":73},"بقالة":{"count":74},"سوپر مارکت":{"count":75},"سوپرمارکت":{"count":79},"いなげや":{"count":66},"まいばすけっと":{"count":162},"イオン":{"count":95},"イトーヨーカドー":{"count":67},"カスミ":{"count":56},"マックスバリュ":{"count":143},"マルエツ":{"count":99},"ライフ":{"count":125},"全聯":{"count":74},"全聯福利中心":{"count":241},"惠康 Wellcome":{"count":57},"業務スーパー":{"count":176},"美廉社":{"count":74},"西友":{"count":137}},"tailor":{"Atelier de couture":{"count":63}},"ticket":{"Boutique Grandes Lignes":{"count":60},"Guichet Transilien":{"count":243},"Касса":{"count":61},"Проездные билеты":{"count":65}},"tobacco":{"Dohánybolt":{"count":109},"Estanco":{"count":134},"Nemzeti Dohánybolt":{"count":926},"Tabacos":{"count":62},"Табакерка":{"count":73}},"toys":{"Dráčik":{"count":63},"Intertoys":{"count":242},"King Jouet":{"count":102},"La Grande Récré":{"count":112},"Maxi Toys":{"count":63},"Toys R Us":{"count":410,"tags":{"shop":"toys"}},"Детский мир":{"count":186},"Игрушки":{"count":95}},"travel_agency":{"D-reizen":{"count":64},"DER Reisebüro":{"count":52},"First Reisebüro":{"count":57},"Flight Centre":{"count":159},"Reiseland":{"count":52},"TUI":{"count":262},"The Co-operative Travel":{"count":58},"Thomas Cook":{"count":298},"Thomson":{"count":144}},"tyres":{"Borracharia":{"count":98},"Bridgestone":{"count":65},"Discount Tire":{"count":94},"Euromaster":{"count":76},"Firestone":{"count":57},"Gomeria":{"count":71},"Les Schwab Tire Center":{"count":59},"Vianor":{"count":52},"Вулканизация":{"count":113},"Шиномонтаж":{"count":419}},"variety_store":{"Action":{"count":147},"Bazar":{"count":56},"Big Bazar":{"count":60},"Big Lots":{"count":65},"Dollar General":{"count":345},"Dollar Tree":{"count":753},"Dollarama":{"count":404},"EuroShop":{"count":59},"Family Dollar":{"count":590},"Fix Price":{"count":97},"Fix price":{"count":127},"FixPrice":{"count":62},"GiFi":{"count":229},"Home Bargains":{"count":68},"Mäc-Geiz":{"count":59},"NOZ":{"count":82},"Poundland":{"count":197},"Poundworld":{"count":70},"Tedi":{"count":611},"ダイソー":{"count":226}},"video":{"Blockbuster":{"count":75},"Family Video":{"count":113},"TSUTAYA":{"count":122},"World of Video":{"count":53},"ゲオ":{"count":81}},"video_games":{"EB Games":{"count":101},"Game":{"count":76},"GameStop":{"count":676},"Micromania":{"count":83}}}; -var tourism = {"alpine_hut":{"КОШ":{"count":105}},"apartment":{"Двухкомнатная квартира на сутки":{"count":52}},"attraction":{"Arch":{"count":51},"Kursächsische Postmeilensäule":{"count":54},"Maibaum":{"count":52},"Moab trail":{"count":55},"Moai":{"count":702},"OWŚ":{"count":102},"Sommerrodelbahn":{"count":54},"path contiunes":{"count":75},"white blaze":{"count":53},"Кладбище еврейское":{"count":89},"Колесо обозрения":{"count":69},"Приусадебный парк":{"count":69},"Усадьба":{"count":53},"Хозяйственный двор":{"count":72},"Часовня":{"count":64},"дольмен":{"count":86}},"camp_site":{"Camping Municipal":{"count":198},"Camping municipal":{"count":80}},"guest_house":{"Casa":{"count":61},"Home":{"count":68},"OW \"Bielanka\"":{"count":54}},"hostel":{"Albergue de Peregrinos":{"count":67},"Hospedaje":{"count":70},"Hostal":{"count":124}},"hotel":{"B&B Hôtel":{"count":104},"B&b Hôtel":{"count":78},"Best Western":{"count":242},"Campanile":{"count":145},"Central Hotel":{"count":51},"City Hotel":{"count":74},"Comfort Inn":{"count":283},"Comfort Inn & Suites":{"count":67},"Comfort Suites":{"count":148},"Country Inn & Suites":{"count":83},"Courtyard by Marriott":{"count":155},"Crowne Plaza":{"count":85},"Days Inn":{"count":245},"Econo Lodge":{"count":70},"Embassy Suites":{"count":68},"Extended Stay America":{"count":102},"Fairfield Inn":{"count":60},"Fairfield Inn & Suites":{"count":67},"Formule 1":{"count":74},"Grand Hotel":{"count":90},"Hampton Inn":{"count":376},"Hampton Inn & Suites":{"count":96},"Hilton Garden Inn":{"count":183},"Holiday Inn":{"count":411},"Holiday Inn Express":{"count":479},"Holiday Inn Express & Suites":{"count":72},"Homewood Suites":{"count":61},"Hotel Central":{"count":92},"Hotel Europa":{"count":91},"Hotel Ibis":{"count":67},"Hotel Krone":{"count":58},"Hotel Panorama":{"count":61},"Hotel Plaza":{"count":62},"Hotel Post":{"count":60},"Hotel Royal":{"count":62},"Hotel Victoria":{"count":71},"Hotel zur Post":{"count":60},"Hôtel Ibis":{"count":70},"Hôtel de France":{"count":61},"Ibis":{"count":215},"Ibis Budget":{"count":188},"Ibis Styles":{"count":53},"Krone":{"count":68},"Kyriad":{"count":65},"La Quinta":{"count":54},"Marriott":{"count":57},"Mercure":{"count":109},"Motel 6":{"count":83},"Novotel":{"count":180},"Palace Hotel":{"count":54},"Park Hotel":{"count":88},"Parkhotel":{"count":64},"Premier Inn":{"count":400},"Première Classe":{"count":62},"Quality Inn":{"count":178},"Quality Inn & Suites":{"count":80},"Ramada":{"count":97},"Residence Inn":{"count":89},"Royal Hotel":{"count":94},"Sheraton":{"count":56},"Sleep Inn":{"count":68},"Staybridge Suites":{"count":54},"Super 8":{"count":229},"Travelodge":{"count":284},"Гостиница":{"count":166},"Уют":{"count":58},"東横イン":{"count":57}},"motel":{"Best Western":{"count":59},"Budget Inn":{"count":76},"Comfort Inn":{"count":131},"Days Inn":{"count":103},"Econo Lodge":{"count":117},"Motel 6":{"count":214},"Quality Inn":{"count":113},"Rodeway Inn":{"count":102},"Super 8":{"count":173},"Travelodge":{"count":68}},"museum":{"Heimatmuseum":{"count":336},"Stadtmuseum":{"count":86},"Tájház":{"count":93},"Краеведческий музей":{"count":247},"Музей":{"count":99}}}; -var dataSuggestions = { - amenity: amenity, - leisure: leisure, - man_made: man_made, - shop: shop, - tourism: tourism -}; - -var dataAddressFormats = [{"format":[["housenumber","street"],["city","postcode"]]},{"countryCodes":["gb"],"format":[["housename"],["housenumber","street"],["city","postcode"]]},{"countryCodes":["ie"],"format":[["housename"],["housenumber","street"],["city"],["postcode"]]},{"countryCodes":["at","ch","de","si","pl"],"format":[["street","housenumber"],["postcode","city"]]},{"countryCodes":["ad","ba","be","cz","dk","es","fi","gr","hr","is","it","li","nl","no","pt","se","sk","sm","va"],"format":[["street","housenumber","unit"],["postcode","city"]]},{"countryCodes":["fr","lu","mo"],"format":[["housenumber","street"],["postcode","city"]]},{"countryCodes":["br"],"format":[["street"],["housenumber","suburb"],["city","postcode"]]},{"countryCodes":["vn"],"format":[["housenumber","street"],["subdistrict"],["district"],["city"],["province","postcode"]]},{"countryCodes":["au","ca"],"format":[["housenumber","street","unit"],["city","province","postcode"]]},{"countryCodes":["us"],"format":[["housenumber","street","unit"],["city","state","postcode"]]},{"countryCodes":["tw"],"format":[["postcode","city","district"],["place","street"],["housenumber","floor","unit"]]},{"countryCodes":["jp"],"format":[["postcode","province","county"],["city","suburb"],["quarter","neighbourhood"],["block_number","housenumber"]],"dropdowns":["postcode","province","county","city","suburb","quarter","neighbourhood","block_number"],"widths":{"postcode":0.3,"province":0.35,"county":0.35,"city":0.65,"suburb":0.35,"quarter":0.5,"neighbourhood":0.5,"block_number":0.5,"housenumber":0.5}},{"countryCodes":["tr"],"format":[["neighbourhood"],["street","housenumber"],["postcode","district","city"]]},{"countryCodes":["ua"],"format":[["housenumber","postcode"],["street"]]},{"countryCodes":["cn"],"format":[["postcode","province"],["city","district"],["street","housenumber"]]}]; - -var dataDeprecated = [{"old":{"amenity":"firepit"},"replace":{"leisure":"firepit"}},{"old":{"barrier":"wire_fence"},"replace":{"barrier":"fence","fence_type":"chain"}},{"old":{"barrier":"wood_fence"},"replace":{"barrier":"fence","fence_type":"wood"}},{"old":{"highway":"ford"},"replace":{"ford":"yes"}},{"old":{"highway":"stile"},"replace":{"barrier":"stile"}},{"old":{"highway":"incline"},"replace":{"highway":"road","incline":"up"}},{"old":{"highway":"incline_steep"},"replace":{"highway":"road","incline":"up"}},{"old":{"highway":"unsurfaced"},"replace":{"highway":"road","incline":"unpaved"}},{"old":{"landuse":"wood"},"replace":{"landuse":"forest","natural":"wood"}},{"old":{"natural":"marsh"},"replace":{"natural":"wetland","wetland":"marsh"}},{"old":{"power_source":"*"},"replace":{"generator:source":"$1"}},{"old":{"power_rating":"*"},"replace":{"generator:output":"$1"}},{"old":{"shop":"organic"},"replace":{"shop":"supermarket","organic":"only"}}]; - -var dataDiscarded = {"created_by":true,"odbl":true,"odbl:note":true,"tiger:upload_uuid":true,"tiger:tlid":true,"tiger:source":true,"tiger:separated":true,"geobase:datasetName":true,"geobase:uuid":true,"sub_sea:type":true,"KSJ2:ADS":true,"KSJ2:ARE":true,"KSJ2:AdminArea":true,"KSJ2:COP_label":true,"KSJ2:DFD":true,"KSJ2:INT":true,"KSJ2:INT_label":true,"KSJ2:LOC":true,"KSJ2:LPN":true,"KSJ2:OPC":true,"KSJ2:PubFacAdmin":true,"KSJ2:RAC":true,"KSJ2:RAC_label":true,"KSJ2:RIC":true,"KSJ2:RIN":true,"KSJ2:WSC":true,"KSJ2:coordinate":true,"KSJ2:curve_id":true,"KSJ2:curve_type":true,"KSJ2:filename":true,"KSJ2:lake_id":true,"KSJ2:lat":true,"KSJ2:long":true,"KSJ2:river_id":true,"yh:LINE_NAME":true,"yh:LINE_NUM":true,"yh:STRUCTURE":true,"yh:TOTYUMONO":true,"yh:TYPE":true,"yh:WIDTH":true,"yh:WIDTH_RANK":true,"SK53_bulk:load":true}; - -var dataLocales = {"af":{"rtl":false},"ar":{"rtl":true},"ar-AA":{"rtl":true},"ast":{"rtl":false},"be":{"rtl":false},"bg":{"rtl":false},"bn":{"rtl":false},"bs":{"rtl":false},"ca":{"rtl":false},"ckb":{"rtl":true},"cs":{"rtl":false},"cy":{"rtl":false},"da":{"rtl":false},"de":{"rtl":false},"dv":{"rtl":true},"el":{"rtl":false},"en-GB":{"rtl":false},"eo":{"rtl":false},"es":{"rtl":false},"et":{"rtl":false},"eu":{"rtl":false},"fa":{"rtl":true},"fi":{"rtl":false},"fr":{"rtl":false},"gan":{"rtl":false},"gl":{"rtl":false},"gu":{"rtl":false},"he":{"rtl":true},"hi":{"rtl":false},"hr":{"rtl":false},"hu":{"rtl":false},"hy":{"rtl":false},"ia":{"rtl":false},"id":{"rtl":false},"is":{"rtl":false},"it":{"rtl":false},"ja":{"rtl":false},"jv":{"rtl":false},"km":{"rtl":false},"kn":{"rtl":false},"ko":{"rtl":false},"ku":{"rtl":false},"lij":{},"lt":{"rtl":false},"lv":{"rtl":false},"mg":{"rtl":false},"mk":{"rtl":false},"ml":{"rtl":false},"mn":{"rtl":false},"ms":{"rtl":false},"ne":{"rtl":false},"nl":{"rtl":false},"nn":{"rtl":false},"no":{"rtl":false},"nv":{"rtl":false},"pl":{"rtl":false},"pt":{"rtl":false},"pt-BR":{"rtl":false},"rm":{"rtl":false},"ro":{"rtl":false},"ru":{"rtl":false},"sc":{"rtl":false},"si":{"rtl":false},"sk":{"rtl":false},"sl":{"rtl":false},"so":{"rtl":false},"sq":{"rtl":false},"sr":{"rtl":false},"sv":{"rtl":false},"ta":{"rtl":false},"te":{"rtl":false},"th":{"rtl":false},"tl":{"rtl":false},"tr":{"rtl":false},"uk":{"rtl":false},"ur":{"rtl":true},"vi":{"rtl":false},"yue":{"rtl":false},"zh":{"rtl":false},"zh-CN":{"rtl":false},"zh-HK":{"rtl":false},"zh-TW":{"rtl":false}}; - -var dataPhoneFormats = {"us":"+1-202-555-1234","ca":"+1-226-555-1234","bs":"+1-242-555-1234","bb":"+1-246-555-1234","ai":"+1-264-555-1234","ag":"+1-268-555-1234","vg":"+1-284-555-1234","vi":"+1-340-555-1234","ky":"+1-345-555-1234","bm":"+1-441-555-1234","gd":"+1-473-555-1234","tc":"+1-649-555-1234","ms":"+1-664-555-1234","mp":"+1-670-555-1234","gu":"+1-671-555-1234","as":"+1-684-555-1234","sx":"+1-721-555-1234","lc":"+1-758-555-1234","dm":"+1-767-555-1234","vc":"+1-784-555-1234","pr":"+1-787-555-1234","do":"+1-809-555-1234","tt":"+1-868-555-1234","kn":"+1-869-555-1234","jm":"+1-876-555-1234","za":"+27 11 907 1111","nl":"+31 42 123 4567","fr":"+33 1 23 45 67 89","es":"+34 989 12 34 56","pt":"+351 211 123456","ie":"+353 20 912 3456","fi":"+358 40 123 4567","hu":"+36 1 123 45 67","hr":"+385 01 123 4567","si":"+386 31 123 4567","it":"+39 01 123 456","va":"+39 01 123 456","gb":"+44 1632 961234","gg":"+44 1632 961234","im":"+44 1632 961234","je":"+44 1632 961234","se":"+46 31 123 4567","no":"+47 22 12 34 56","sj":"+47 22 12 34 56","pl":"+48 42 123 4567","de":"+49 89 1234567","br":"+55 11 0982 1098","ru":"+7 495 1234567","kz":"+7 495 1234567","vn":"+84 1 234 5678","hk":"+852 1234 5678","cn":"+86 10 12345678","tw":"+886 1 2345 6789","tr":"+90 312 123 4567","ua":"+380 44 123 4567","at":"+43 1 123 45 67","ci":"+225 20 12 34 56","bj":"+229 20 12 34 56"}; - -var dataShortcuts = [{"tab":"browsing","text":"shortcuts.browsing.title","columns":[{"rows":[{"section":"navigation","text":"shortcuts.browsing.navigation.title"},{"shortcuts":["↓","↑","←","→"],"text":"shortcuts.browsing.navigation.pan","separator":","},{"modifiers":["⌘"],"shortcuts":["↓","↑","←","→"],"text":"shortcuts.browsing.navigation.pan_more","separator":","},{"shortcuts":["+","-"],"text":"shortcuts.browsing.navigation.zoom","separator":","},{"modifiers":["⌘"],"shortcuts":["+","-"],"text":"shortcuts.browsing.navigation.zoom_more","separator":","},{"section":"help","text":"shortcuts.browsing.help.title"},{"shortcuts":["help.key"],"text":"shortcuts.browsing.help.help"},{"shortcuts":["shortcuts.toggle.key"],"text":"shortcuts.browsing.help.keyboard"},{"section":"display_options","text":"shortcuts.browsing.display_options.title"},{"shortcuts":["background.key"],"text":"shortcuts.browsing.display_options.background"},{"modifiers":["⌘"],"shortcuts":["background.key"],"text":"shortcuts.browsing.display_options.background_switch"},{"shortcuts":["map_data.key"],"text":"shortcuts.browsing.display_options.map_data"},{"modifiers":["⌃","⌘"],"shortcuts":["F","F11"],"text":"shortcuts.browsing.display_options.fullscreen"},{"shortcuts":["area_fill.wireframe.key"],"text":"shortcuts.browsing.display_options.wireframe"},{"shortcuts":["background.minimap.key"],"text":"shortcuts.browsing.display_options.minimap"}]},{"rows":[{"section":"selecting","text":"shortcuts.browsing.selecting.title"},{"shortcuts":["Left-click"],"text":"shortcuts.browsing.selecting.select_one"},{"modifiers":["⇧"],"shortcuts":["Left-click"],"text":"shortcuts.browsing.selecting.select_multi"},{"modifiers":["⇧"],"shortcuts":["Left-click"],"gesture":"shortcuts.gesture.drag","text":"shortcuts.browsing.selecting.lasso"},{"modifiers":["⌘"],"shortcuts":["F"],"text":"shortcuts.browsing.selecting.search"},{"section":"with_selected","text":"shortcuts.browsing.with_selected.title"},{"shortcuts":["Right-click","shortcuts.key.space"],"text":"shortcuts.browsing.with_selected.edit_menu"},{"shortcuts":[],"text":""},{"section":"vertex_selected","text":"shortcuts.browsing.vertex_selected.title"},{"shortcuts":["[","↖"],"text":"shortcuts.browsing.vertex_selected.previous"},{"shortcuts":["]","↘"],"text":"shortcuts.browsing.vertex_selected.next"},{"shortcuts":["{","⇞"],"text":"shortcuts.browsing.vertex_selected.first"},{"shortcuts":["}","⇟"],"text":"shortcuts.browsing.vertex_selected.last"},{"shortcuts":["\\","shortcuts.key.pause"],"text":"shortcuts.browsing.vertex_selected.change_parent"}]}]},{"tab":"editing","text":"shortcuts.editing.title","columns":[{"rows":[{"section":"drawing","text":"shortcuts.editing.drawing.title"},{"shortcuts":["1"],"text":"shortcuts.editing.drawing.add_point"},{"shortcuts":["2"],"text":"shortcuts.editing.drawing.add_line"},{"shortcuts":["3"],"text":"shortcuts.editing.drawing.add_area"},{"shortcuts":["Left-click","shortcuts.key.space"],"text":"shortcuts.editing.drawing.place_point"},{"shortcuts":["⌥"],"text":"shortcuts.editing.drawing.disable_snap"},{"shortcuts":["↵","⎋"],"text":"shortcuts.editing.drawing.stop_line"},{"section":"commands","text":"shortcuts.editing.commands.title"},{"modifiers":["⌘"],"shortcuts":["C"],"text":"shortcuts.editing.commands.copy"},{"modifiers":["⌘"],"shortcuts":["V"],"text":"shortcuts.editing.commands.paste"},{"modifiers":["⌘"],"shortcuts":["Z"],"text":"shortcuts.editing.commands.undo"},{"modifiers":["⌘","⇧"],"shortcuts":["Z"],"text":"shortcuts.editing.commands.redo"},{"modifiers":["⌘"],"shortcuts":["S"],"text":"shortcuts.editing.commands.save"}]},{"rows":[{"section":"operations","text":"shortcuts.editing.operations.title"},{"shortcuts":["operations.continue.key"],"text":"shortcuts.editing.operations.continue_line"},{"shortcuts":["operations.merge.key"],"text":"shortcuts.editing.operations.merge"},{"shortcuts":["operations.disconnect.key"],"text":"shortcuts.editing.operations.disconnect"},{"shortcuts":["operations.split.key"],"text":"shortcuts.editing.operations.split"},{"shortcuts":["operations.reverse.key"],"text":"shortcuts.editing.operations.reverse"},{"shortcuts":["operations.move.key"],"text":"shortcuts.editing.operations.move"},{"shortcuts":["operations.rotate.key"],"text":"shortcuts.editing.operations.rotate"},{"shortcuts":["operations.orthogonalize.key"],"text":"shortcuts.editing.operations.orthogonalize"},{"shortcuts":["operations.circularize.key"],"text":"shortcuts.editing.operations.circularize"},{"shortcuts":["operations.reflect.key.long"],"text":"shortcuts.editing.operations.reflect_long"},{"shortcuts":["operations.reflect.key.short"],"text":"shortcuts.editing.operations.reflect_short"},{"modifiers":["⌘"],"shortcuts":["⌫"],"text":"shortcuts.editing.operations.delete"}]}]},{"tab":"tools","text":"shortcuts.tools.title","columns":[{"rows":[{"section":"info","text":"shortcuts.tools.info.title"},{"modifiers":["⌘"],"shortcuts":["info_panels.key"],"text":"shortcuts.tools.info.all"},{"modifiers":["⌘","⇧"],"shortcuts":["info_panels.background.key"],"text":"shortcuts.tools.info.background"},{"modifiers":["⌘","⇧"],"shortcuts":["info_panels.history.key"],"text":"shortcuts.tools.info.history"},{"modifiers":["⌘","⇧"],"shortcuts":["info_panels.location.key"],"text":"shortcuts.tools.info.location"},{"modifiers":["⌘","⇧"],"shortcuts":["info_panels.measurement.key"],"text":"shortcuts.tools.info.measurement"}]}]}]; - -var type$2 = "FeatureCollection"; -var features = [{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[1.97754,51.13111],[1.8457,63.45051],[-10.45898,57.01681],[-6.82251,55.26503],[-7.25583,55.06525],[-7.26546,55.0665],[-7.26992,55.06419],[-7.2725,55.06346],[-7.27818,55.05362],[-7.2893,55.04735],[-7.29939,55.0561],[-7.31835,55.04475],[-7.3447,55.05079],[-7.38831,55.02389],[-7.40547,55.00292],[-7.39157,54.99507],[-7.40075,54.98892],[-7.40706,54.98291],[-7.40363,54.97963],[-7.40633,54.97813],[-7.39835,54.97013],[-7.40745,54.96357],[-7.40178,54.95961],[-7.40727,54.95515],[-7.3944,54.94376],[-7.44444,54.93858],[-7.45216,54.89793],[-7.44204,54.87532],[-7.4713,54.83431],[-7.48092,54.83093],[-7.49216,54.82185],[-7.55121,54.79054],[-7.5443,54.78609],[-7.54958,54.75653],[-7.5349,54.74917],[-7.54881,54.74068],[-7.55941,54.74556],[-7.57894,54.74221],[-7.57507,54.7494],[-7.58606,54.75039],[-7.58872,54.74377],[-7.60031,54.74603],[-7.60632,54.74405],[-7.61662,54.74459],[-7.63593,54.75108],[-7.68854,54.72968],[-7.72064,54.72155],[-7.75094,54.70469],[-7.79094,54.71942],[-7.8051,54.71932],[-7.83497,54.73632],[-7.85419,54.72745],[-7.91496,54.67582],[-7.90174,54.66182],[-7.83832,54.63401],[-7.7433,54.6188],[-7.70863,54.63485],[-7.70682,54.6189],[-7.69386,54.6188],[-7.69631,54.61125],[-7.75845,54.59509],[-7.78708,54.58],[-7.79446,54.58141],[-7.79969,54.57704],[-7.79673,54.56915],[-7.8184,54.56315],[-7.83334,54.55227],[-7.82737,54.54299],[-7.85007,54.53363],[-7.90741,54.53722],[-7.93213,54.53388],[-8.00487,54.54568],[-8.03727,54.51162],[-8.04285,54.48759],[-8.08027,54.48829],[-8.09988,54.48395],[-8.09126,54.4765],[-8.111,54.47807],[-8.11512,54.46904],[-8.16542,54.46914],[-8.1776,54.46485],[-8.14293,54.45003],[-8.16284,54.4413],[-8.08731,54.4002],[-8.06062,54.37051],[-8.03289,54.35711],[-8.00054,54.34835],[-7.93333,54.30561],[-7.85849,54.29151],[-7.87067,54.28794],[-7.87265,54.26648],[-7.86123,54.25931],[-7.85917,54.21256],[-7.71043,54.20307],[-7.70193,54.20776],[-7.68828,54.202],[-7.67644,54.18906],[-7.66082,54.1871],[-7.62554,54.16545],[-7.62541,54.15319],[-7.61026,54.14353],[-7.57421,54.14142],[-7.57181,54.13287],[-7.56228,54.12704],[-7.51379,54.12998],[-7.47944,54.122],[-7.47169,54.12665],[-7.47075,54.13318],[-7.44684,54.15168],[-7.40792,54.156],[-7.42579,54.14092],[-7.41903,54.13629],[-7.3744,54.14172],[-7.37234,54.13881],[-7.39509,54.12624],[-7.39182,54.12017],[-7.36341,54.13157],[-7.34518,54.11577],[-7.32471,54.12123],[-7.32003,54.11379],[-7.3078,54.11718],[-7.30548,54.12347],[-7.31591,54.12697],[-7.31213,54.13162],[-7.3187,54.13411],[-7.31857,54.13745],[-7.32222,54.13836],[-7.32737,54.13544],[-7.3399,54.14585],[-7.30827,54.16716],[-7.30024,54.16625],[-7.29029,54.1715],[-7.28158,54.16839],[-7.2863,54.14919],[-7.29874,54.14904],[-7.30162,54.14411],[-7.28411,54.13971],[-7.29192,54.13071],[-7.29737,54.133],[-7.30883,54.13242],[-7.30333,54.12251],[-7.29218,54.11929],[-7.27844,54.12282],[-7.27707,54.12986],[-7.26613,54.13624],[-7.2566,54.16354],[-7.24015,54.17125],[-7.2575,54.17678],[-7.2581,54.19257],[-7.25179,54.19403],[-7.23608,54.1935],[-7.23338,54.19792],[-7.24317,54.20076],[-7.24892,54.1977],[-7.25183,54.20201],[-7.24119,54.20623],[-7.23094,54.20578],[-7.23269,54.20912],[-7.22188,54.21607],[-7.20643,54.2117],[-7.18506,54.22485],[-7.17055,54.21742],[-7.14721,54.22488],[-7.14633,54.23008],[-7.15051,54.23165],[-7.14613,54.23983],[-7.15802,54.24434],[-7.13985,54.25298],[-7.15255,54.26235],[-7.16064,54.27405],[-7.17991,54.27144],[-7.17201,54.28627],[-7.21252,54.2985],[-7.19888,54.31117],[-7.17918,54.30946],[-7.1812,54.3397],[-7.15339,54.33514],[-7.10253,54.35811],[-7.10811,54.36677],[-7.06927,54.3899],[-7.05593,54.41056],[-7.02898,54.42135],[-7.00198,54.40832],[-6.98683,54.40829],[-6.97562,54.40014],[-6.96774,54.40145],[-6.90682,54.36966],[-6.89772,54.35075],[-6.87527,54.33853],[-6.86512,54.32568],[-6.85163,54.29137],[-6.87452,54.28677],[-6.87791,54.27918],[-6.86673,54.27522],[-6.85177,54.26489],[-6.83693,54.26658],[-6.82165,54.24346],[-6.81633,54.22299],[-6.80045,54.22108],[-6.80122,54.21338],[-6.77599,54.19965],[-6.75573,54.1987],[-6.74316,54.18258],[-6.73406,54.18566],[-6.72445,54.18127],[-6.70295,54.20036],[-6.69166,54.20018],[-6.68673,54.19398],[-6.669,54.19584],[-6.65248,54.18102],[-6.6433,54.17801],[-6.63467,54.16449],[-6.63179,54.14766],[-6.64081,54.14238],[-6.63935,54.13599],[-6.66149,54.1205],[-6.6481,54.10153],[-6.66119,54.0934],[-6.66458,54.06629],[-6.64681,54.05873],[-6.62501,54.03737],[-6.59291,54.04755],[-6.58905,54.05808],[-6.5597,54.0481],[-6.52897,54.05888],[-6.50442,54.05566],[-6.47824,54.07004],[-6.47919,54.07762],[-6.43601,54.05959],[-6.36314,54.07057],[-6.36589,54.09338],[-6.36293,54.09758],[-6.37104,54.11497],[-6.3522,54.11084],[-6.34242,54.1114],[-6.33589,54.10833],[-6.33636,54.09469],[-6.31808,54.09096],[-6.30903,54.10463],[-6.29165,54.11235],[-6.28246,54.11145],[-6.26272,54.09786],[-5.35583,53.72597],[-7.0752,49.23912],[-1.83472,49.02346],[-2.12036,49.94415],[1.97754,51.13111]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.2,18.7],[-65,16.3],[-63.7,19.2],[-65.2,18.7]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-63,-50.5],[-55,-51],[-60,-54],[-63,-50.5]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-139.19952,60.08402],[-141,60.30621],[-141,76],[-169,68.63655],[-169,65.20147],[-180,61],[-180,-4],[-154,9],[-133.76404,54.54021],[-130.73868,54.71986],[-129.96277,55.29163],[-130.15228,55.7758],[-130.01787,55.90688],[-130.00362,56.00798],[-130.10284,56.12336],[-130.24498,56.09656],[-130.42625,56.14249],[-131.87439,56.79787],[-135.02884,59.56285],[-135.11759,59.62306],[-135.15827,59.6261],[-135.47928,59.79822],[-136.28677,59.57955],[-136.30531,59.46462],[-136.36836,59.44898],[-136.47697,59.46558],[-137.19727,59.01935],[-139.19952,60.08402]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.96064,48.99841],[-121.22623,49.00049],[-122.26513,49.00246],[-122.7565,49.00208],[-123.32218,49.00218],[-122.97821,48.76524],[-123.2666,48.69821],[-123.21991,48.21186],[-125.80444,48.60749],[-124.32129,31.54109],[-117.125,32.53429],[-116.82417,32.55996],[-115.88036,32.63735],[-115.49738,32.66486],[-114.71984,32.71877],[-114.7649,32.64602],[-114.80885,32.60959],[-114.81481,32.49451],[-112.81743,31.88004],[-111.07481,31.33224],[-109.56051,31.33402],[-108.20847,31.33384],[-108.20838,31.78363],[-106.52847,31.78391],[-106.52781,31.78086],[-106.52249,31.77501],[-106.51249,31.76933],[-106.50988,31.7612],[-106.50709,31.76123],[-106.48896,31.74806],[-106.48473,31.74769],[-106.4719,31.75101],[-106.46816,31.75897],[-106.45434,31.76466],[-106.45035,31.76426],[-106.43516,31.75492],[-106.41484,31.75101],[-106.37864,31.73021],[-106.37225,31.71174],[-106.34924,31.69633],[-106.33289,31.66178],[-106.3068,31.62459],[-106.28079,31.56179],[-106.24775,31.54226],[-106.2329,31.49982],[-106.2105,31.46857],[-106.08201,31.39863],[-106.00554,31.39233],[-105.76401,31.17051],[-105.58548,31.06117],[-105.56419,30.98526],[-104.99153,30.6639],[-104.97162,30.60896],[-104.90639,30.57822],[-104.83772,30.38117],[-104.70177,30.20567],[-104.68048,29.92399],[-104.57611,29.77838],[-104.51157,29.63674],[-104.39758,29.57047],[-104.39278,29.55293],[-104.05769,29.32173],[-103.79883,29.2581],[-103.78196,29.26555],[-103.76759,29.22799],[-103.14102,28.93666],[-102.86087,29.2217],[-102.65076,29.79418],[-101.41068,29.73457],[-101.26511,29.51372],[-101.05997,29.452],[-101.04083,29.38038],[-100.96303,29.34735],[-100.94406,29.34369],[-100.94071,29.33351],[-100.92775,29.32663],[-100.89814,29.30957],[-100.87818,29.28086],[-100.80076,29.2238],[-100.76437,29.15981],[-100.67047,29.08663],[-100.6412,28.91299],[-100.63236,28.90255],[-100.61296,28.89939],[-100.534,28.75622],[-100.51495,28.74531],[-100.50705,28.7143],[-100.51203,28.70666],[-100.51014,28.69127],[-100.50048,28.66186],[-100.45547,28.6381],[-100.44697,28.60743],[-100.35599,28.45239],[-100.34946,28.39653],[-100.29488,28.31315],[-100.29591,28.27324],[-100.17197,28.17493],[-99.93645,27.9568],[-99.87722,27.80173],[-99.79671,27.73338],[-99.772,27.72532],[-99.74556,27.69979],[-99.71947,27.65981],[-99.5957,27.59974],[-99.54094,27.60537],[-99.53055,27.57973],[-99.52034,27.55782],[-99.52802,27.49773],[-99.50141,27.49986],[-99.48755,27.49518],[-99.47897,27.48421],[-99.48661,27.46453],[-99.49534,27.44861],[-99.48927,27.40941],[-99.53957,27.31565],[-99.43588,27.19678],[-99.46404,27.01968],[-99.16698,26.56039],[-99.17474,26.53939],[-99.12698,26.51958],[-99.1135,26.42954],[-99.08355,26.39625],[-99.06007,26.39737],[-99.03634,26.41255],[-99.02042,26.40598],[-99.01291,26.39364],[-98.95686,26.38641],[-98.9566,26.37365],[-98.94523,26.36949],[-98.90013,26.36419],[-98.89905,26.35454],[-98.80305,26.36626],[-98.78254,26.30511],[-98.66667,26.23457],[-98.58496,26.24647],[-98.57951,26.23434],[-98.56519,26.23987],[-98.56294,26.22464],[-98.50599,26.20858],[-98.44806,26.21236],[-98.38617,26.15721],[-98.34176,26.15278],[-98.33579,26.1388],[-98.30626,26.10003],[-98.28841,26.10512],[-98.26524,26.0914],[-98.19898,26.06411],[-98.09577,26.05698],[-98.07568,26.06667],[-98.08302,26.03396],[-97.9771,26.04136],[-97.9532,26.06179],[-97.81643,26.04475],[-97.77017,26.02439],[-97.73884,26.02902],[-97.5289,25.90648],[-97.52151,25.88625],[-97.50615,25.89031],[-97.49851,25.89903],[-97.49637,25.89641],[-97.49748,25.88008],[-97.49422,25.87981],[-97.48847,25.88564],[-97.46409,25.88174],[-97.42607,25.842],[-97.36856,25.8396],[-97.26231,25.94724],[-80.81543,24.00633],[-66.87378,44.77794],[-67.16148,45.16715],[-67.2286,45.16739],[-67.26246,45.18797],[-67.28311,45.19175],[-67.28959,45.18784],[-67.29332,45.17568],[-67.29049,45.17317],[-67.3001,45.16776],[-67.3025,45.16122],[-67.29761,45.14766],[-67.33975,45.1255],[-67.40524,45.16122],[-67.40387,45.17139],[-67.4818,45.27682],[-67.42172,45.38543],[-67.45262,45.41008],[-67.50498,45.4889],[-67.41623,45.50105],[-67.42219,45.55661],[-67.42902,45.56833],[-67.42331,45.57154],[-67.42498,45.57836],[-67.45193,45.60323],[-67.77981,45.6738],[-67.79019,47.06776],[-67.88006,47.1067],[-67.91319,47.14793],[-67.92598,47.15418],[-67.95181,47.1875],[-68.02374,47.23915],[-68.13017,47.29309],[-68.17669,47.32893],[-68.24046,47.35354],[-68.32809,47.36005],[-68.36363,47.35476],[-68.38054,47.34167],[-68.38509,47.30321],[-68.37367,47.28796],[-68.4377,47.28232],[-68.47916,47.29623],[-68.51074,47.29885],[-68.54593,47.28441],[-68.58408,47.28482],[-68.59777,47.27134],[-68.59271,47.25762],[-68.61889,47.24148],[-68.68936,47.24125],[-68.71768,47.23676],[-68.80128,47.21423],[-68.89629,47.17676],[-69.05354,47.24847],[-69.04924,47.41798],[-69.22425,47.45961],[-69.99729,46.69558],[-70.0569,46.4149],[-70.25551,46.10871],[-70.29001,46.09431],[-70.39919,45.80667],[-70.83229,45.40062],[-70.80794,45.37878],[-70.82663,45.2367],[-70.87538,45.23453],[-70.92138,45.28099],[-70.90645,45.30918],[-71.0109,45.34798],[-71.08429,45.30556],[-71.1454,45.24226],[-71.20525,45.25278],[-71.28925,45.30097],[-71.41405,45.23513],[-71.43044,45.12381],[-71.49692,45.06991],[-71.50623,45.04878],[-71.49284,45.03629],[-71.50027,45.01372],[-71.79359,45.01075],[-72.08774,45.00581],[-72.14155,45.00568],[-72.15282,45.00609],[-72.17142,45.00584],[-72.25847,45.00436],[-72.38795,45.00626],[-72.4496,45.00863],[-72.5356,45.00936],[-72.66257,45.01523],[-72.82537,45.01642],[-73.08466,45.01561],[-73.45219,45.00875],[-74.14699,44.99145],[-74.33753,44.9923],[-74.50786,44.99798],[-74.66158,44.99949],[-74.71244,44.99734],[-74.75887,44.98708],[-74.76368,45.00632],[-74.78977,45.00365],[-74.82376,45.01773],[-74.94186,44.98229],[-75.30098,44.83883],[-75.30304,44.82836],[-75.59418,44.6457],[-75.97269,44.33502],[-75.97295,44.34595],[-76.00059,44.34797],[-76.17645,44.2865],[-76.18744,44.22158],[-76.88782,43.82759],[-79.16851,43.32168],[-79.05487,43.25371],[-79.05092,43.169],[-79.04603,43.16093],[-79.04208,43.13942],[-79.07002,43.12038],[-79.06015,43.114],[-79.0568,43.10474],[-79.0774,43.07861],[-78.9996,43.05484],[-79.02311,43.02071],[-79.02552,42.99473],[-78.96235,42.9573],[-78.91188,42.9426],[-78.90398,42.89181],[-82.42767,41.47978],[-83.14316,42.03807],[-83.12805,42.23843],[-83.09715,42.29052],[-83.07252,42.31515],[-82.94575,42.34332],[-82.59676,42.5479],[-82.51368,42.61785],[-82.5108,42.66464],[-82.4675,42.76415],[-82.48055,42.80573],[-82.45497,42.9284],[-82.41334,42.97099],[-82.42596,42.99536],[-82.15851,43.39507],[-83.53729,46.098],[-83.96301,46.05036],[-84.11021,46.23851],[-84.09794,46.25656],[-84.11613,46.26878],[-84.11905,46.31516],[-84.10721,46.3218],[-84.14394,46.41076],[-84.11682,46.51576],[-84.13536,46.53218],[-84.16162,46.5284],[-84.21621,46.53891],[-84.26994,46.49189],[-84.36092,46.50997],[-84.55284,46.4407],[-84.95178,46.77185],[-89.59179,48.00307],[-89.67547,48.00371],[-90.87204,48.25943],[-91.41312,48.06753],[-92.99377,48.62474],[-93.34877,48.62604],[-93.35529,48.61124],[-93.37074,48.60584],[-93.39812,48.60369],[-93.40542,48.61089],[-93.43846,48.59478],[-93.46859,48.59205],[-93.45735,48.56667],[-93.46533,48.54593],[-93.64763,48.51751],[-93.80625,48.51888],[-93.80642,48.58047],[-93.83328,48.62582],[-93.84865,48.63064],[-93.93388,48.6326],[-94.01327,48.64471],[-94.16176,48.64697],[-94.25025,48.65463],[-94.24931,48.67827],[-94.26046,48.69816],[-94.30578,48.71073],[-94.32758,48.70433],[-94.36123,48.70478],[-94.38406,48.71135],[-94.41629,48.71067],[-94.44294,48.69266],[-94.53615,48.7024],[-94.55031,48.71419],[-94.58894,48.71928],[-94.69425,48.77938],[-94.70129,48.83376],[-94.68996,48.83953],[-94.68395,48.99914],[-111.96064,48.99841]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[180,55],[170,53],[180,49],[180,55]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[143,22],[147,22],[147,12],[143,12],[143,22]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-171.5,-10],[-171,-15],[-167,-15],[-171.5,-10]]]}}]; -var dataImperial = { - type: type$2, - features: features -}; - -var type$3 = "FeatureCollection"; -var features$1 = [{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[113.573,22.186],[114,22.5],[114.05534,22.503],[114.0595,22.51422],[114.07345,22.51934],[114.0786,22.53012],[114.08512,22.53228],[114.09034,22.53717],[114.09611,22.53486],[114.10602,22.53472],[114.1115,22.52929],[114.11522,22.5308],[114.11649,22.53418],[114.11979,22.53511],[114.1244,22.5393],[114.12729,22.53947],[114.13018,22.54132],[114.13807,22.5432],[114.14429,22.54176],[114.14441,22.54114],[114.14846,22.54179],[114.14855,22.54397],[114.15042,22.54593],[114.14964,22.54954],[114.15166,22.55168],[114.15192,22.55438],[114.15642,22.55495],[114.15841,22.55909],[114.16032,22.56153],[114.16162,22.56187],[114.1634,22.55931],[114.16553,22.5593],[114.16733,22.56119],[114.16934,22.56093],[114.17061,22.5597],[114.17702,22.56],[114.17798,22.55546],[114.18401,22.5552],[114.18673,22.55468],[114.1878,22.55545],[114.18979,22.55446],[114.1955,22.55564],[114.19674,22.55691],[114.20005,22.55717],[114.20376,22.55623],[114.20884,22.55672],[114.22438,22.55055],[114.2264,22.5476],[114.22545,22.54528],[114.22661,22.54339],[114.32,22.576],[114.45,22.43],[114.45,22.14],[113.9,22.14],[113.75,22.22],[113.553,22.095],[113.54678,22.1207],[113.5456,22.1207],[113.54076,22.12373],[113.54016,22.13618],[113.54701,22.13651],[113.5475,22.14583],[113.52456,22.17978],[113.53623,22.20191],[113.53299,22.21232],[113.53497,22.21351],[113.53735,22.21377],[113.54156,22.21315],[113.54385,22.21709],[113.55849,22.21565],[113.573,22.186]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75,18],[-80,20.5],[-83,19],[-77,16],[-75,18]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-64.33594,32.86113],[-79.39819,27.21067],[-80.63965,23.71998],[-73.39966,20.40642],[-65.1709,19.20743],[-65.09399,16.23577],[-59.13391,16.80454],[-62.64404,15.16228],[-59.43054,14.85985],[-62.83081,13.64599],[-61.80359,10.73752],[-62.08649,10.04729],[-61.06201,9.85522],[-59.81369,8.31274],[-59.8027,8.27469],[-59.83498,8.22712],[-59.94141,8.21149],[-59.99771,8.15576],[-59.97986,8.13265],[-59.99771,8.12041],[-60.00183,8.07147],[-60.05127,8.02524],[-60.09933,8.03747],[-60.12268,8.02388],[-60.14053,7.98988],[-60.36163,7.83345],[-60.53467,7.81713],[-60.5896,7.6375],[-60.72144,7.54493],[-60.5896,7.31888],[-60.63904,7.24532],[-60.54703,7.12542],[-60.46875,7.20309],[-60.37262,7.18401],[-60.29984,7.1445],[-60.2916,7.06819],[-60.39871,6.95097],[-60.66513,6.83235],[-60.71869,6.75053],[-60.91232,6.81735],[-60.94254,6.72053],[-61.14441,6.72326],[-61.23093,6.5773],[-61.1554,6.45314],[-61.14441,6.20199],[-61.39709,5.95619],[-60.71045,5.20036],[-60.21606,5.23319],[-59.99634,5.06906],[-60.13916,4.51071],[-59.69971,4.40118],[-59.5459,3.93002],[-59.87549,3.56825],[-59.7876,3.37086],[-60.01831,2.83332],[-59.90845,2.38335],[-59.69971,2.2626],[-59.77661,1.87833],[-59.65302,1.85087],[-59.69147,1.75754],[-59.61456,1.71361],[-59.55139,1.73283],[-59.36188,1.49123],[-59.26575,1.39238],[-58.92242,1.30726],[-58.83728,1.17271],[-58.71918,1.23037],[-58.71094,1.29902],[-58.49121,1.26058],[-58.461,1.37591],[-58.50494,1.38689],[-58.51044,1.46102],[-58.38135,1.4775],[-58.32642,1.57359],[-58.00507,1.49946],[-57.99133,1.65321],[-57.79907,1.69165],[-57.70844,1.71087],[-57.54364,1.68341],[-57.41455,1.94421],[-57.10693,1.97715],[-56.8103,1.85636],[-56.48071,1.92225],[-55.90942,1.81244],[-55.90942,2.04302],[-56.14014,2.26534],[-55.94788,2.53701],[-55.70892,2.39981],[-55.37933,2.43274],[-55.19257,2.53976],[-54.98108,2.57268],[-54.88495,2.43548],[-54.71191,2.46293],[-54.69543,2.34767],[-54.58832,2.32846],[-54.43451,2.43548],[-54.20654,2.76748],[-54.17358,3.12955],[-53.96484,3.57921],[-54.33838,4.00674],[-54.44412,4.52577],[-54.46884,4.91036],[-54.36653,5.13061],[-54.27727,5.26191],[-54.19968,5.3084],[-54.01222,5.54457],[-54.0239,5.64605],[-53.86322,5.94936],[-64.33594,32.86113]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-14.5,-6],[11.79657,-17.27197],[12.03415,-17.14866],[12.38159,-17.22213],[12.58484,-17.22476],[13.01193,-16.97405],[13.24951,-17.00098],[13.38135,-16.98522],[13.93341,-17.38734],[18.42476,-17.38996],[18.47763,-17.46857],[18.62663,-17.64599],[18.79211,-17.76177],[18.92944,-17.82061],[19.33044,-17.84806],[19.66278,-17.8644],[19.74792,-17.90557],[19.85161,-17.87486],[20.10361,-17.90296],[20.18394,-17.88401],[20.34737,-17.88466],[20.44693,-17.91733],[20.51697,-17.96698],[20.83008,-18.03032],[20.95711,-17.97285],[21.16997,-17.93497],[21.42677,-18.0264],[23.45032,-17.63879],[22.00012,-16.38866],[21.99944,-13.00523],[24.03809,-12.99118],[24.03809,-10.91962],[24.43359,-11.09217],[24.45557,-11.48002],[25.37842,-11.19996],[25.42236,-11.60919],[26.96045,-11.97484],[27.18018,-11.60919],[28.125,-12.42048],[29.11377,-13.36824],[29.1687,-13.43771],[29.55872,-13.19716],[29.68506,-13.2239],[29.62463,-13.41099],[29.80591,-13.44305],[29.81415,-12.14809],[29.31152,-12.55456],[28.41064,-11.78133],[28.63037,-10.70379],[28.65234,-9.73071],[28.37219,-9.24309],[28.89748,-8.47916],[30.78644,-8.26857],[29.39941,-6.05316],[29.4873,-4.45595],[29.75922,-4.46759],[29.81415,-4.36421],[29.88007,-4.36832],[30.04074,-4.26699],[30.07919,-4.1629],[30.18356,-4.08311],[30.1918,-4.05126],[30.21566,-4.04595],[30.22923,-4.01136],[30.21326,-3.99612],[30.25978,-3.88755],[30.29274,-3.86288],[30.34424,-3.77245],[30.39848,-3.79095],[30.40878,-3.76765],[30.39548,-3.7304],[30.39054,-3.72821],[30.3896,-3.71918],[30.39093,-3.7101],[30.39514,-3.70444],[30.42028,-3.64963],[30.46886,-3.53501],[30.67108,-3.41335],[30.63297,-3.34892],[30.84206,-3.25535],[30.84549,-3.16108],[30.83485,-3.09698],[30.7933,-3.06235],[30.82111,-3.02258],[30.84515,-2.9739],[30.74764,-2.99618],[30.7037,-2.97013],[30.66422,-2.98967],[30.57632,-2.90738],[30.49393,-2.94441],[30.41016,-2.87172],[30.52002,-2.39432],[30.77545,-2.38883],[30.8606,-2.31199],[30.84961,-2.19398],[30.89081,-2.07322],[30.81116,-1.96068],[30.83862,-1.6587],[30.73425,-1.4418],[30.56259,-1.33884],[30.4541,-1.05737],[30.35797,-1.06287],[30.34149,-1.13152],[30.16571,-1.34296],[29.91852,-1.48024],[29.83887,-1.31824],[29.58344,-1.39238],[29.729,0.05493],[29.96796,0.5136],[29.9707,0.8569],[30.22339,0.92281],[30.24536,1.15349],[30.47745,1.20772],[31.30966,2.15693],[31.20255,2.22211],[31.20255,2.29278],[31.16409,2.27906],[31.13937,2.28318],[31.13113,2.26534],[31.07826,2.30033],[31.0714,2.34767],[31.00479,2.4005],[30.97183,2.40461],[30.94711,2.38746],[30.94849,2.36276],[30.9375,2.33532],[30.88531,2.34012],[30.83038,2.42176],[30.74112,2.43274],[30.76035,2.5864],[30.90179,2.88132],[30.76447,3.04178],[30.93613,3.40239],[30.94059,3.50588],[30.85236,3.48601],[30.90866,3.5936],[30.95055,3.63918],[30.94677,3.65391],[30.9866,3.70187],[31.00582,3.70701],[31.02058,3.69708],[31.16547,3.7954],[31.28838,3.79643],[31.52699,3.66282],[31.7038,3.72449],[31.82671,3.82794],[31.96198,3.65596],[31.95854,3.57099],[32.04987,3.59155],[32.07733,3.57099],[32.0842,3.53672],[32.20093,3.50657],[32.21672,3.56448],[32.19578,3.59977],[32.41516,3.74504],[32.72055,3.76782],[32.89307,3.81219],[33.02782,3.89371],[33.18146,3.7793],[33.51173,3.75258],[33.98758,4.23309],[34.05762,4.28342],[34.38721,4.61065],[35.94452,4.62023],[35.95688,4.53467],[36.04134,4.44568],[36.89621,4.4491],[38.14728,3.62992],[38.55927,3.62033],[38.92181,3.51068],[39.56039,3.43392],[39.87076,3.87522],[40.76752,4.28753],[41.16371,3.94372],[41.89774,3.97797],[41.31271,3.14463],[40.98896,2.82869],[40.99548,-0.84042],[41.7,-1.8],[41.7,-49],[-27,-60],[-65.7,-52.5],[-14.5,-6]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[31.33301,35.47856],[33.0249,33.75175],[35.44189,36.02245],[31.33301,35.47856]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[14,36.5],[15,36],[14,35],[14,36.5]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[0,62],[2.5,51.3],[-2,50],[-1.9,49],[-20,53],[0,62]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[180,-35],[161,-19],[167,-12],[180,-22],[180,4],[170,3.7],[127,5.7],[118,2.7],[119.5,5.4],[117.2,7.5],[102.6,8],[102.9158,11.74099],[102.76268,12.07357],[102.70226,12.17158],[102.74139,12.46474],[102.53128,12.68857],[102.49557,12.9256],[102.49763,13.0064],[102.4597,13.08199],[102.43412,13.09026],[102.39155,13.16407],[102.35481,13.29341],[102.35893,13.30945],[102.34503,13.34837],[102.35928,13.39797],[102.3567,13.48095],[102.36168,13.50582],[102.33559,13.53787],[102.33971,13.56023],[102.35498,13.5649],[102.36511,13.5785],[102.40047,13.5679],[102.42537,13.56891],[102.44614,13.56123],[102.48047,13.57091],[102.53849,13.56757],[102.5699,13.58526],[102.57806,13.60486],[102.62501,13.60845],[102.62132,13.61295],[102.60767,13.61562],[102.57231,13.63331],[102.56922,13.64082],[102.54879,13.658],[102.56252,13.68552],[102.5972,13.70803],[102.67084,13.74472],[102.68818,13.75172],[102.7014,13.7684],[102.73161,13.77082],[102.76543,13.85541],[102.78397,13.93207],[102.80388,13.94406],[102.81607,13.96639],[102.90705,14.02119],[102.89726,14.0535],[102.90095,14.0838],[102.92421,14.10744],[102.92378,14.12838],[102.94147,14.15035],[102.92953,14.17952],[103.17535,14.33774],[103.19939,14.32992],[103.68553,14.44],[103.94508,14.34157],[104.05756,14.34589],[104.06636,14.3419],[104.26025,14.37749],[104.50058,14.36984],[104.57817,14.36019],[104.6422,14.42387],[104.66632,14.40234],[104.68357,14.39877],[104.71138,14.43169],[104.72305,14.42188],[104.71687,14.40043],[104.75344,14.40459],[104.80408,14.43867],[104.83429,14.41573],[104.99239,14.3838],[105.05402,14.19783],[105.47905,14.49186],[105.60883,15.0005],[105.46703,15.13005],[105.48866,15.20237],[105.59269,15.2716],[105.58617,15.32823],[105.50308,15.31912],[105.46703,15.33948],[105.49175,15.37921],[105.59372,15.42869],[105.59372,15.50927],[105.60986,15.54871],[105.62616,15.56492],[105.62702,15.59129],[105.63518,15.62742],[105.63612,15.66056],[105.5975,15.72088],[105.49965,15.76681],[105.46291,15.74517],[105.43819,15.75459],[105.40489,15.79424],[105.34241,15.92039],[105.37811,15.98344],[105.39167,15.99136],[105.41931,15.98608],[105.42652,15.99764],[105.41468,16.01661],[105.21263,16.05076],[105.04955,16.10552],[105.01316,16.24401],[104.88235,16.37812],[104.8391,16.45782],[104.77936,16.49041],[104.73919,16.53287],[104.74228,16.62205],[104.76391,16.70953],[104.73953,16.80323],[104.76425,16.85088],[104.73782,16.90968],[104.744,17.0128],[104.81266,17.21853],[104.79841,17.39274],[104.70348,17.52833],[104.46384,17.65515],[104.34368,17.83564],[104.27776,17.8559],[104.22661,17.98069],[104.1116,18.10735],[104.06525,18.21174],[103.97392,18.33823],[103.9286,18.33237],[103.88809,18.29456],[103.85582,18.28673],[103.83659,18.32715],[103.79128,18.3467],[103.70201,18.34214],[103.60931,18.40405],[103.57292,18.40437],[103.51593,18.42978],[103.45963,18.42587],[103.41568,18.44802],[103.30479,18.43206],[103.24265,18.37082],[103.24333,18.34133],[103.29123,18.32357],[103.28899,18.29521],[103.23595,18.28299],[103.16608,18.25511],[103.02429,17.98135],[102.6535,17.83237],[102.40631,17.99963],[102.10968,18.22413],[101.548,17.81538],[101.30493,17.64991],[101.14563,17.46595],[100.95886,17.61654],[101.01757,17.88858],[101.18752,18.05121],[101.16863,18.10409],[101.18134,18.33595],[101.08727,18.38287],[101.05499,18.43988],[101.23215,18.73015],[101.35265,19.04524],[101.25927,19.12733],[101.2373,19.32637],[101.25824,19.58438],[101.11954,19.56836],[101.08898,19.58777],[101.08624,19.59715],[101.03165,19.6185],[100.89844,19.62125],[100.77827,19.49249],[100.63751,19.56432],[100.58258,19.49313],[100.47478,19.5944],[100.42929,19.67152],[100.43341,19.7024],[100.4147,19.7255],[100.40525,19.7646],[100.43907,19.80345],[100.45555,19.84843],[100.50636,19.87264],[100.51709,19.93027],[100.58653,20.1599],[100.56576,20.1757],[100.54945,20.17473],[100.52731,20.14379],[100.51065,20.14895],[100.48697,20.17956],[100.46774,20.196],[100.45246,20.20147],[100.45521,20.22129],[100.44783,20.23546],[100.41607,20.25286],[100.40594,20.28184],[100.38397,20.31082],[100.37556,20.35187],[100.36165,20.35638],[100.35736,20.37408],[100.33195,20.39902],[100.27805,20.40224],[100.25917,20.39677],[100.2475,20.37263],[100.22535,20.35509],[100.22346,20.31839],[100.16579,20.29988],[100.17162,20.24545],[100.10845,20.25221],[100.09266,20.2696],[100.09798,20.31485],[100.07961,20.3678],[99.9567,20.46417],[99.91636,20.44925],[99.90765,20.44977],[99.89121,20.44511],[99.87276,20.44406],[99.86212,20.44326],[99.80186,20.33948],[99.46472,20.3884],[99.56085,20.20035],[99.43691,20.08882],[99.27727,20.11623],[99.06921,20.1101],[98.97789,19.74538],[98.24387,19.68656],[97.85934,19.57014],[97.76733,18.57336],[97.39655,18.47179],[97.62451,18.30238],[97.73849,17.97743],[97.66502,17.87943],[97.90947,17.56745],[98.52951,16.82557],[98.51303,16.69276],[98.69293,16.26873],[98.87421,16.43609],[98.93394,16.3353],[98.84743,16.13356],[98.74512,16.12037],[98.58307,16.07287],[98.5762,15.79754],[98.54736,15.37557],[98.17383,15.15167],[98.3606,14.63674],[99.08295,13.89208],[99.16534,13.72204],[99.18182,13.00723],[99.39331,12.56797],[99.64153,11.78973],[99.32156,11.30266],[98.77859,10.67849],[98.80597,10.47642],[98.76657,10.40459],[98.74924,10.34194],[96.85547,6.40265],[92.42523,20.54794],[92.2728,20.96272],[92.187,21.16],[92.26,21.36],[92.27,21.4328],[92.62,21.43],[92.6,22],[93.22,22.25],[93.4,23.7],[93.34,23.95],[94.155,23.847],[94.17,23.92],[94.25171,24.07405],[94.28,24.23],[94.30175,24.2371],[94.3256,24.2731],[94.6,24.7],[94.78,25.47],[95.2,26],[95.1,26.6],[97.3,27.9],[96.14,29.38],[95.4,29.1],[94.8,29.2],[92.5,27.8],[91.64,27.76],[91.4,28],[89.58,28.18],[88.9,27.32],[88.74,27.47],[88.9,27.86],[88.7,28.1],[88.1,27.87],[85.93,27.942],[81.6,30.5],[81.2,30],[78.73,31.5],[78.77,31.99],[78.4,32.5],[79.3,32.5],[79,34.3],[78.3,34.6],[78,35.5],[76.1,35.8],[76,36.55],[75.15,37],[72.5,36.9],[71.1,36.1],[71.65,35.44],[71.45,35],[70.985,34.54],[71.18,34.36],[71.092,34.118],[70.88,33.97],[70.5,33.94],[69.908,34.04],[69.869,33.96],[70,33.75],[70.13,33.73],[70.34,33.34],[70.013,33.14],[69.57,33.09],[69.24,32.45],[69.3,31.9],[68.1,31.6],[66.393,30.934],[66.2,29.8],[62.5,29.4],[60.87,29.86],[61.53,29.0165],[61.66,28.77],[61.96,28.54],[62.43,28.42],[62.6,28.25],[62.795,28.28],[62.86,27.25],[63.24,27.25],[63.327,27.13],[63.25,27.1],[63.25,26.84],[63.18,26.83],[63.18,26.65],[62.3,26.5],[62.2,26.28],[61.85,26.22],[61.84,25.75],[61.68,25.67],[56.5,-21],[180,-65],[180,-35]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[138.7,46.7],[145.5,44.5],[145.2,43.7],[146,43.3],[142,18],[122,24.3],[138.7,46.7]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-180,7],[-148,7],[-151,-12],[-171.5,-10.75],[-171,-16],[-152,-19],[-180,-55],[-180,7]]]}}]; -var dataDriveLeft = { - type: type$3, - features: features$1 -}; - -var en = {"modes":{"add_area":{"title":"Area","description":"Add parks, buildings, lakes or other areas to the map.","tail":"Click on the map to start drawing an area, like a park, lake, or building."},"add_line":{"title":"Line","description":"Add highways, streets, pedestrian paths, canals or other lines to the map.","tail":"Click on the map to start drawing a road, path, or route."},"add_point":{"title":"Point","description":"Add restaurants, monuments, postal boxes or other points to the map.","tail":"Click on the map to add a point."},"browse":{"title":"Browse","description":"Pan and zoom the map."},"draw_area":{"tail":"Click to add nodes to your area. Click the first node to finish the area."},"draw_line":{"tail":"Click to add more nodes to the line. Click on other lines to connect to them, and double-click to end the line."},"drag_node":{"connected_to_hidden":"This can't be edited because it is connected to a hidden feature."}},"operations":{"add":{"annotation":{"point":"Added a point.","vertex":"Added a node to a way.","relation":"Added a relation."}},"start":{"annotation":{"line":"Started a line.","area":"Started an area."}},"continue":{"key":"A","title":"Continue","description":"Continue this line.","not_eligible":"No line can be continued here.","multiple":"Several lines can be continued here. To choose a line, press the Shift key and click on it to select it.","annotation":{"line":"Continued a line.","area":"Continued an area."}},"cancel_draw":{"annotation":"Canceled drawing."},"change_role":{"annotation":"Changed the role of a relation member."},"change_tags":{"annotation":"Changed tags."},"circularize":{"title":"Circularize","description":{"line":"Make this line circular.","area":"Make this area circular."},"key":"O","annotation":{"line":"Made a line circular.","area":"Made an area circular."},"not_closed":"This can't be made circular because it's not a loop.","too_large":"This can't be made circular because not enough of it is currently visible.","connected_to_hidden":"This can't be made circular because it is connected to a hidden feature."},"orthogonalize":{"title":"Square","description":{"line":"Square the corners of this line.","area":"Square the corners of this area."},"key":"S","annotation":{"line":"Squared the corners of a line.","area":"Squared the corners of an area."},"not_squarish":"This can't be made square because it is not squarish.","too_large":"This can't be made square because not enough of it is currently visible.","connected_to_hidden":"This can't be made square because it is connected to a hidden feature."},"straighten":{"title":"Straighten","description":"Straighten this line.","key":"S","annotation":"Straightened a line.","too_bendy":"This can't be straightened because it bends too much.","connected_to_hidden":"This line can't be straightened because it is connected to a hidden feature."},"delete":{"title":"Delete","description":{"single":"Delete this feature permanently.","multiple":"Delete these features permanently."},"annotation":{"point":"Deleted a point.","vertex":"Deleted a node from a way.","line":"Deleted a line.","area":"Deleted an area.","relation":"Deleted a relation.","multiple":"Deleted {n} features."},"too_large":{"single":"This feature can't be deleted because not enough of it is currently visible.","multiple":"These features can't be deleted because not enough of them are currently visible."},"incomplete_relation":{"single":"This feature can't be deleted because it hasn't been fully downloaded.","multiple":"These features can't be deleted because they haven't been fully downloaded."},"part_of_relation":{"single":"This feature can't be deleted because it is part of a larger relation. You must remove it from the relation first.","multiple":"These features can't be deleted because they are part of larger relations. You must remove them from the relations first."},"connected_to_hidden":{"single":"This feature can't be deleted because it is connected to a hidden feature.","multiple":"These features can't be deleted because some are connected to hidden features."}},"add_member":{"annotation":"Added a member to a relation."},"delete_member":{"annotation":"Removed a member from a relation."},"connect":{"annotation":{"point":"Connected a way to a point.","vertex":"Connected a way to another.","line":"Connected a way to a line.","area":"Connected a way to an area."}},"disconnect":{"title":"Disconnect","description":"Disconnect these lines/areas from each other.","key":"D","annotation":"Disconnected lines/areas.","not_connected":"There aren't enough lines/areas here to disconnect.","connected_to_hidden":"This can't be disconnected because it is connected to a hidden feature.","relation":"This can't be disconnected because it connects members of a relation."},"merge":{"title":"Merge","description":"Merge these features.","key":"C","annotation":"Merged {n} features.","not_eligible":"These features can't be merged.","not_adjacent":"These features can't be merged because their endpoints aren't connected.","restriction":"These features can't be merged because at least one is a member of a \"{relation}\" relation.","incomplete_relation":"These features can't be merged because at least one hasn't been fully downloaded.","conflicting_tags":"These features can't be merged because some of their tags have conflicting values."},"move":{"title":"Move","description":{"single":"Move this feature to a different location.","multiple":"Move these features to a different location."},"key":"M","annotation":{"point":"Moved a point.","vertex":"Moved a node in a way.","line":"Moved a line.","area":"Moved an area.","multiple":"Moved multiple features."},"incomplete_relation":{"single":"This feature can't be moved because it hasn't been fully downloaded.","multiple":"These features can't be moved because they haven't been fully downloaded."},"too_large":{"single":"This feature can't be moved because not enough of it is currently visible.","multiple":"These features can't be moved because not enough of them are currently visible."},"connected_to_hidden":{"single":"This feature can't be moved because it is connected to a hidden feature.","multiple":"These features can't be moved because some are connected to hidden features."}},"reflect":{"title":{"long":"Reflect Long","short":"Reflect Short"},"description":{"long":{"single":"Reflect this feature across its long axis.","multiple":"Reflect these features across their long axis."},"short":{"single":"Reflect this feature across its short axis.","multiple":"Reflect these features across their short axis."}},"key":{"long":"T","short":"Y"},"annotation":{"long":{"single":"Reflected a feature across its long axis.","multiple":"Reflected multiple features across their long axis."},"short":{"single":"Reflected a feature across its short axis.","multiple":"Reflected multiple features across their short axis."}},"incomplete_relation":{"single":"This feature can't be reflected because it hasn't been fully downloaded.","multiple":"These features can't be reflected because they haven't been fully downloaded."},"too_large":{"single":"This feature can't be reflected because not enough of it is currently visible.","multiple":"These features can't be reflected because not enough of them are currently visible."},"connected_to_hidden":{"single":"This feature can't be reflected because it is connected to a hidden feature.","multiple":"These features can't be reflected because some are connected to hidden features."}},"rotate":{"title":"Rotate","description":{"single":"Rotate this feature around its center point.","multiple":"Rotate these features around their center point."},"key":"R","annotation":{"line":"Rotated a line.","area":"Rotated an area.","multiple":"Rotated multiple features."},"incomplete_relation":{"single":"This feature can't be rotated because it hasn't been fully downloaded.","multiple":"These features can't be rotated because they haven't been fully downloaded."},"too_large":{"single":"This feature can't be rotated because not enough of it is currently visible.","multiple":"These features can't be rotated because not enough of them are currently visible."},"connected_to_hidden":{"single":"This feature can't be rotated because it is connected to a hidden feature.","multiple":"These features can't be rotated because some are connected to hidden features."}},"reverse":{"title":"Reverse","description":"Make this line go in the opposite direction.","key":"V","annotation":"Reversed a line."},"split":{"title":"Split","description":{"line":"Split this line into two at this node.","area":"Split the boundary of this area into two.","multiple":"Split the lines/area boundaries at this node into two."},"key":"X","annotation":{"line":"Split a line.","area":"Split an area boundary.","multiple":"Split {n} lines/area boundaries."},"not_eligible":"Lines can't be split at their beginning or end.","multiple_ways":"There are too many lines here to split.","connected_to_hidden":"This can't be split because it is connected to a hidden feature."},"restriction":{"annotation":{"create":"Added a turn restriction","delete":"Deleted a turn restriction"}}},"restriction":{"controls":{"distance":"Distance","distance_up_to":"Up to {distance}","via":"Via","via_node_only":"Node only","via_up_to_one":"Up to 1 way","via_up_to_two":"Up to 2 ways"},"help":{"indirect":"(indirect)","turn":{"no_left_turn":"NO Left Turn {indirect}","no_right_turn":"NO Right Turn {indirect}","no_u_turn":"NO U-Turn {indirect}","no_straight_on":"NO Straight On {indirect}","only_left_turn":"ONLY Left Turn {indirect}","only_right_turn":"ONLY Right Turn {indirect}","only_u_turn":"ONLY U-Turn {indirect}","only_straight_on":"ONLY Straight On {indirect}","allowed_left_turn":"Left Turn Allowed {indirect}","allowed_right_turn":"Right Turn Allowed {indirect}","allowed_u_turn":"U-Turn Allowed {indirect}","allowed_straight_on":"Straight On Allowed {indirect}"},"from":"FROM","via":"VIA","to":"TO","from_name":"{from} {fromName}","from_name_to_name":"{from} {fromName} {to} {toName}","via_names":"{via} {viaNames}","select_from":"Click to select a {from} segment","select_from_name":"Click to select {from} {fromName}","toggle":"Click for \"{turn}\""}},"undo":{"tooltip":"Undo: {action}","nothing":"Nothing to undo."},"redo":{"tooltip":"Redo: {action}","nothing":"Nothing to redo."},"tooltip_keyhint":"Shortcut:","browser_notice":"This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 11 and above. Please upgrade your browser or use Potlatch 2 to edit the map.","translate":{"translate":"Translate","localized_translation_label":"Multilingual name","localized_translation_language":"Choose language","localized_translation_name":"Name"},"zoom_in_edit":"Zoom in to edit","login":"login","logout":"logout","loading_auth":"Connecting to OpenStreetMap...","report_a_bug":"Report a bug","help_translate":"Help translate","feature_info":{"hidden_warning":"{count} hidden features","hidden_details":"These features are currently hidden: {details}"},"status":{"error":"Unable to connect to API.","offline":"The API is offline. Please try editing later.","readonly":"The API is read-only. You will need to wait to save your changes.","rateLimit":"The API is limiting anonymous connections. You can fix this by logging in."},"commit":{"title":"Upload to OpenStreetMap","upload_explanation":"The changes you upload will be visible on all maps that use OpenStreetMap data.","upload_explanation_with_user":"The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.","request_review":"I would like someone to review my edits.","save":"Upload","cancel":"Cancel","changes":"{count} Changes","download_changes":"Download osmChange file","warnings":"Warnings","modified":"Modified","deleted":"Deleted","created":"Created","about_changeset_comments":"About changeset comments","about_changeset_comments_link":"//wiki.openstreetmap.org/wiki/Good_changeset_comments","google_warning":"You mentioned Google in this comment: remember that copying from Google Maps is strictly forbidden.","google_warning_link":"https://www.openstreetmap.org/copyright"},"contributors":{"list":"Edits by {users}","truncated_list":"Edits by {users} and {count} others"},"info_panels":{"key":"I","background":{"key":"B","title":"Background","zoom":"Zoom","vintage":"Vintage","source":"Source","description":"Description","resolution":"Resolution","accuracy":"Accuracy","unknown":"Unknown","show_tiles":"Show Tiles","hide_tiles":"Hide Tiles","show_vintage":"Show Vintage","hide_vintage":"Hide Vintage"},"history":{"key":"H","title":"History","selected":"{n} selected","version":"Version","last_edit":"Last Edit","edited_by":"Edited By","changeset":"Changeset","unknown":"Unknown","link_text":"History on openstreetmap.org"},"location":{"key":"L","title":"Location","unknown_location":"Unknown Location"},"measurement":{"key":"M","title":"Measurement","selected":"{n} selected","geometry":"Geometry","closed_line":"closed line","closed_area":"closed area","center":"Center","perimeter":"Perimeter","length":"Length","area":"Area","centroid":"Centroid","location":"Location","metric":"Metric","imperial":"Imperial","node_count":"Number of nodes"}},"geometry":{"point":"point","vertex":"vertex","line":"line","area":"area","relation":"relation"},"geocoder":{"search":"Search worldwide...","no_results_visible":"No results in visible map area","no_results_worldwide":"No results found"},"geolocate":{"title":"Show My Location","locating":"Locating, please wait..."},"inspector":{"no_documentation_combination":"There is no documentation available for this tag combination","no_documentation_key":"There is no documentation available for this key","documentation_redirect":"This documentation has been redirected to a new page","show_more":"Show More","view_on_osm":"View on openstreetmap.org","all_fields":"All fields","all_tags":"All tags","all_members":"All members","all_relations":"All relations","new_relation":"New relation...","role":"Role","choose":"Select feature type","results":"{n} results for {search}","reference":"View on OpenStreetMap Wiki","back_tooltip":"Change feature","remove":"Remove","search":"Search","multiselect":"Selected features","unknown":"Unknown","incomplete":"","feature_list":"Search features","edit":"Edit feature","check":{"yes":"Yes","no":"No","reverser":"Change Direction"},"radio":{"structure":{"type":"Type","default":"Default","layer":"Layer"}},"add":"Add","none":"None","node":"Node","way":"Way","relation":"Relation","location":"Location","add_fields":"Add field:"},"background":{"title":"Background","description":"Background settings","key":"B","backgrounds":"Backgrounds","none":"None","best_imagery":"Best known imagery source for this location","switch":"Switch back to this background","custom":"Custom","custom_button":"Edit custom background","custom_prompt":"Enter a tile URL template. Valid tokens are:\n - {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme\n - {-y} or {ty} for flipped TMS-style Y coordinates\n - {u} for quadtile scheme\n - {switch:a,b,c} for DNS server multiplexing\n\nExample:\n{example}","overlays":"Overlays","imagery_source_faq":"Imagery Info / Report a Problem","reset":"reset","display_options":"Display Options","brightness":"Brightness","contrast":"Contrast","saturation":"Saturation","sharpness":"Sharpness","minimap":{"description":"Show Minimap","tooltip":"Show a zoomed out map to help locate the area currently displayed.","key":"/"},"fix_misalignment":"Adjust imagery offset","offset":"Drag anywhere in the gray area below to adjust the imagery offset, or enter the offset values in meters."},"map_data":{"title":"Map Data","description":"Map Data","key":"F","data_layers":"Data Layers","layers":{"osm":{"tooltip":"Map data from OpenStreetMap","title":"OpenStreetMap data"}},"fill_area":"Fill Areas","map_features":"Map Features","autohidden":"These features have been automatically hidden because too many would be shown on the screen. You can zoom in to edit them.","osmhidden":"These features have been automatically hidden because the OpenStreetMap layer is hidden."},"feature":{"points":{"description":"Points","tooltip":"Points of Interest"},"traffic_roads":{"description":"Traffic Roads","tooltip":"Highways, Streets, etc."},"service_roads":{"description":"Service Roads","tooltip":"Service Roads, Parking Aisles, Tracks, etc."},"paths":{"description":"Paths","tooltip":"Sidewalks, Foot Paths, Cycle Paths, etc."},"buildings":{"description":"Buildings","tooltip":"Buildings, Shelters, Garages, etc."},"landuse":{"description":"Landuse Features","tooltip":"Forests, Farmland, Parks, Residential, Commercial, etc."},"boundaries":{"description":"Boundaries","tooltip":"Administrative Boundaries"},"water":{"description":"Water Features","tooltip":"Rivers, Lakes, Ponds, Basins, etc."},"rail":{"description":"Rail Features","tooltip":"Railways"},"power":{"description":"Power Features","tooltip":"Power Lines, Power Plants, Substations, etc."},"past_future":{"description":"Past/Future","tooltip":"Proposed, Construction, Abandoned, Demolished, etc."},"others":{"description":"Others","tooltip":"Everything Else"}},"area_fill":{"wireframe":{"description":"No Fill (Wireframe)","tooltip":"Enabling wireframe mode makes it easy to see the background imagery.","key":"W"},"partial":{"description":"Partial Fill","tooltip":"Areas are drawn with fill only around their inner edges. (Recommended for beginner mappers)"},"full":{"description":"Full Fill","tooltip":"Areas are drawn fully filled."}},"restore":{"heading":"You have unsaved changes","description":"Do you wish to restore unsaved changes from a previous editing session?","restore":"Restore my changes","reset":"Discard my changes"},"save":{"title":"Save","help":"Review your changes and upload them to OpenStreetMap, making them visible to other users.","no_changes":"No changes to save.","error":"Errors occurred while trying to save","status_code":"Server returned status code {code}","unknown_error_details":"Please ensure you are connected to the internet.","uploading":"Uploading changes to OpenStreetMap...","conflict_progress":"Checking for conflicts: {num} of {total}","unsaved_changes":"You have unsaved changes","conflict":{"header":"Resolve conflicting edits","count":"Conflict {num} of {total}","previous":"< Previous","next":"Next >","keep_local":"Keep mine","keep_remote":"Use theirs","restore":"Restore","delete":"Leave Deleted","download_changes":"Or download osmChange file","done":"All conflicts resolved!","help":"Another user changed some of the same map features you changed.\nClick on each feature below for more details about the conflict, and choose whether to keep\nyour changes or the other user's changes.\n"}},"merge_remote_changes":{"conflict":{"deleted":"This feature has been deleted by {user}.","location":"This feature was moved by both you and {user}.","nodelist":"Nodes were changed by both you and {user}.","memberlist":"Relation members were changed by both you and {user}.","tags":"You changed the {tag} tag to \"{local}\" and {user} changed it to \"{remote}\"."}},"success":{"edited_osm":"Edited OSM!","just_edited":"You just edited OpenStreetMap!","view_on_osm":"View on OSM","facebook":"Share on Facebook","twitter":"Share on Twitter","google":"Share on Google+","help_html":"Your changes should appear in the \"Standard\" layer in a few minutes. Other layers, and certain features, may take longer.","help_link_text":"Details","help_link_url":"https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F"},"confirm":{"okay":"OK","cancel":"Cancel"},"splash":{"welcome":"Welcome to the iD OpenStreetMap editor","text":"iD is a friendly but powerful tool for contributing to the world's best free world map. This is version {version}. For more information see {website} and report bugs at {github}.","walkthrough":"Start the Walkthrough","start":"Edit now"},"source_switch":{"live":"live","lose_changes":"You have unsaved changes. Switching the map server will discard them. Are you sure you want to switch servers?","dev":"dev"},"version":{"whats_new":"What's new in iD {version}"},"tag_reference":{"description":"Description","on_wiki":"{tag} on wiki.osm.org","used_with":"used with {type}"},"validations":{"disconnected_highway":"Disconnected highway","disconnected_highway_tooltip":"Roads should be connected to other roads or building entrances.","old_multipolygon":"Multipolygon tags on outer way","old_multipolygon_tooltip":"This style of multipolygon is deprecated. Please assign the tags to the parent multipolygon instead of the outer way.","untagged_point":"Untagged point","untagged_point_tooltip":"Select a feature type that describes what this point is.","untagged_line":"Untagged line","untagged_line_tooltip":"Select a feature type that describes what this line is.","untagged_area":"Untagged area","untagged_area_tooltip":"Select a feature type that describes what this area is.","untagged_relation":"Untagged relation","untagged_relation_tooltip":"Select a feature type that describes what this relation is.","many_deletions":"You're deleting {n} features: {p} nodes, {l} lines, {a} areas, {r} relations. Are you sure you want to do this? This will delete them from the map that everyone else sees on openstreetmap.org.","tag_suggests_area":"The tag {tag} suggests line should be area, but it is not an area","deprecated_tags":"Deprecated tags: {tags}"},"zoom":{"in":"Zoom in","out":"Zoom out"},"cannot_zoom":"Cannot zoom out further in current mode.","full_screen":"Toggle Full Screen","gpx":{"local_layer":"Local file","drag_drop":"Drag and drop a .gpx, .geojson or .kml file on the page, or click the button to the right to browse","zoom":"Zoom to layer","browse":"Browse for a file"},"mapillary_images":{"tooltip":"Street-level photos from Mapillary","title":"Photo Overlay (Mapillary)"},"mapillary_signs":{"tooltip":"Traffic signs from Mapillary (must enable Photo Overlay)","title":"Traffic Sign Overlay (Mapillary)"},"mapillary":{"view_on_mapillary":"View this image on Mapillary"},"openstreetcam_images":{"tooltip":"Street-level photos from OpenStreetCam","title":"Photo Overlay (OpenStreetCam)"},"openstreetcam":{"view_on_openstreetcam":"View this image on OpenStreetCam"},"help":{"title":"Help","key":"H","help":{"title":"Help","welcome":"Welcome to the iD editor for [OpenStreetMap](https://www.openstreetmap.org/). With this editor you can update OpenStreetMap right from your web browser.","open_data_h":"Open Data","open_data":"Edits that you make on this map will be visible to everyone who uses OpenStreetMap. Your edits can be based on personal knowledge, on-the-ground surveying, or imagery collected from aerial or street level photos. Copying from commercial sources, like Google Maps, [is strictly forbidden](https://www.openstreetmap.org/copyright).","before_start_h":"Before you start","before_start":"You should be familiar with OpenStreetMap and this editor before you start editing. iD contains a walkthrough to teach you the basics of editing OpenStreetMap. Click \"Start the Walkthrough\" on this screen to take the tutorial - it takes only about 15 minutes.","open_source_h":"Open Source","open_source":"The iD editor is a collaborative open source project, and you are using version {version} now. The source code is available [on GitHub](https://github.com/openstreetmap/iD).","open_source_help":"You can help iD by [translating](https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating) or [reporting bugs](https://github.com/openstreetmap/iD/issues)."},"overview":{"title":"Overview","navigation_h":"Navigation","navigation_drag":"You can drag the map by pressing and holding down the {leftclick} left mouse button and moving the mouse around. You can also use the `↓`, `↑`, `←`, `→` arrow keys on your keyboard.","navigation_zoom":"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons along the side of the map. You can also use the `+`, `-` keys on your keyboard.","features_h":"Map Features","features":"We use the word *features* to describe things that appear on the map, such as roads, buildings, or points of interest. Anything in the real world can be mapped as a feature on OpenStreetMap. Map features are represented on the map using *points*, *lines*, or *areas*.","nodes_ways":"In OpenStreetmap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*."},"editing":{"title":"Editing & Saving","select_h":"Select","select_left_click":"{leftclick} Left-click on a feature to select it. This will highlight it with a pulsing glow, and the sidebar will display details about that feature, such as its name or address.","select_right_click":"{rightclick} Right-click on a feature to display the editing menu, which shows the commands that are available, such as rotating, moving, and deleting.","multiselect_h":"Multiselect","multiselect_shift_click":"`{shift}`+{leftclick} left-click to select several features together. This makes it easier to move or delete multiple items.","multiselect_lasso":"Another way to select multiple features is to hold down the `{shift}` key, then press and hold down the {leftclick} left mouse button and drag the mouse to draw a selection lasso. All of the points inside the lasso area will be selected.","undo_redo_h":"Undo & Redo","undo_redo":"Your edits are stored locally in your browser until you choose to save them to the OpenStreetMap server. You can undo edits by clicking the {undo} **Undo** button, and redo them by clicking the {redo} **Redo** button.","save_h":"Save","save":"Click {save} **Save** to finish your edits and send them to OpenStreetMap. You should remember to save your work frequently!","save_validation":"On the save screen, you'll have a chance to review what you've done. iD will also perform some basic checks for missing data and may offer helpful suggestions and warnings if something doesn't seem right.","upload_h":"Upload","upload":"Before uploading your changes you must enter a [changeset comment](https://wiki.openstreetmap.org/wiki/Good_changeset_comments). Then click **Upload** to send your changes to OpenStreetMap, where they will be merged into the map and publicly visible to everyone.","backups_h":"Automatic Backups","backups":"If you can't finish your edits in one sitting, for example if your computer crashes or you close the browser tab, your edits are still saved in your browser's storage. You can come back later (on the same browser and computer), and iD will offer to restore your work.","keyboard_h":"Keyboard Shortcuts","keyboard":"You can view a list of keyboard shortcuts by pressing the `?` key."},"feature_editor":{"title":"Feature Editor","intro":"The *feature editor* appears alongside the map, and allows you to see and edit all of the information for the selected feature.","definitions":"The top section displays the feature's type. The middle section contains *fields* showing the feature's attributes, such as its name or address.","type_h":"Feature Type","type":"You can click on the feature type to change the feature to a different type. Everything that exists in the real world can be added to OpenStreetMap, so there are thousands of feature types to choose from.","type_picker":"The type picker displays the most common feature types, such as parks, hospitals, restaurants, roads, and buildings. You can search for anything by typing what you're looking for in the search box. You can also click the {inspect} **Info** icon next to the feature type to learn more about it.","fields_h":"Fields","fields_all_fields":"The \"All fields\" section contains all of the feature's details that you may edit. In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.","fields_example":"Each feature type will display different fields. For example, a road may display fields for its surface and speed limit, but a restaurant may display fields for the type of food it serves and the hours it is open.","fields_add_field":"You can also click the \"Add field\" dropdown to add more fields, such as a description, Wikipedia link, wheelchair access, and more.","tags_h":"Tags","tags_all_tags":"Below the fields section, you can expand the \"All tags\" section to edit any of the OpenStreetMap *tags* for the selected feature. Each tag consists of a *key* and *value*, data elements that define all of the features stored in OpenStreetMap.","tags_resources":"Editing a feature's tags requires intermediate knowledge about OpenStreetMap. You should consult resources like the [OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Main_Page) or [Taginfo](https://taginfo.openstreetmap.org/) to learn more about accepted OpenStreetMap tagging practices."},"points":{"title":"Points","intro":"*Points* can be used to represent features such as shops, restaurants, and monuments. They mark a specific location, and describe what's there.","add_point_h":"Adding Points","add_point":"To add a point, click the {point} **Point** button on the toolbar above the map, or press the shortcut key `1`. This will change the mouse cursor to a cross symbol.","add_point_finish":"To place the new point on the map, position the mouse cursor where the point should go, then {leftclick} left-click or press `Space`.","move_point_h":"Moving Points","move_point":"To move a point, place the mouse cursor over the point, then press and hold the {leftclick} left mouse button while dragging the point to its new location.","delete_point_h":"Deleting Points","delete_point":"It's OK to delete features that don't exist in the real world. Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it.","delete_point_command":"To delete a point, {rightclick} right-click on the point to select it and show the edit menu, then use the {delete} **Delete** command."},"lines":{"title":"Lines","intro":"*Lines* are used to represent features such as roads, railroads, and rivers. Lines should be drawn down the center of the feature that they represent.","add_line_h":"Adding Lines","add_line":"To add a line, click the {line} **Line** button on the toolbar above the map, or press the shortcut key `2`. This will change the mouse cursor to a cross symbol.","add_line_draw":"Next, position the mouse cursor where the line should begin and {leftclick} left-click or press `Space` to begin placing nodes along the line. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.","add_line_finish":"To finish a line, press `{return}` or click again on the last node.","modify_line_h":"Modifying Lines","modify_line_dragnode":"Often you'll see lines that aren't shaped correctly, for example a road that does not match up with the background imagery. To adjust the shape of a line, first {leftclick} left-click to select it. All nodes of the line will be drawn as small circles. You can then drag the nodes to better locations.","modify_line_addnode":"You can also create new nodes along a line either by {leftclick}**x2** double-clicking on the line or by dragging the small triangles at the midpoints between nodes.","connect_line_h":"Connecting Lines","connect_line":"Having roads connected properly is important for the map and essential for providing driving directions.","connect_line_display":"The connections between roads are drawn with gray circles. The endpoints of a line are drawn with larger white circles if they don't connect to anything.","connect_line_drag":"To connect a line to another feature, drag one of the line's nodes onto the other feature until both features snap together. Tip: You can hold down the `{alt}` key to prevent nodes from connecting to other features.","connect_line_tag":"If you know that the connection has traffic lights or crosswalks, you can add them by selecting the connecting node and using the feature editor to select the correct feature's type.","disconnect_line_h":"Disconnecting Lines","disconnect_line_command":"To disconnect a road from another feature, {rightclick} right-click the connecting node and select the {disconnect} **Disconnect** command from the editing menu.","move_line_h":"Moving Lines","move_line_command":"To move an entire line, {rightclick} right-click the line and select the {move} **Move** command from the editing menu. Then move the mouse, and {leftclick} left-click to place the line in a new location.","move_line_connected":"Lines that are connected to other features will stay connected as you move the line to a new location. iD may prevent you from moving a line across another connected line.","delete_line_h":"Deleting Lines","delete_line":"If a line is entirely incorrect, for example a road that doesn't exist in the real world, it's OK to delete it. Be careful when deleting features: the background imagery you are using might be outdated, and a road that looks wrong could simply be newly built.","delete_line_command":"To delete a line, {rightclick} right-click on the line to select it and show the edit menu, then use the {delete} **Delete** command."},"areas":{"title":"Areas","intro":"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas. Areas should be traced around the edge of the feature that they represent, for example, around the base of a building.","point_or_area_h":"Points or Areas?","point_or_area":"Many features can be represented as points or areas. You should map buildings and property outlines as areas whenever possible. Place points inside a building area to represent businesses, amenities, and other features located inside the building.","add_area_h":"Adding Areas","add_area_command":"To add an area, click the {area} **Area** button on the toolbar above the map, or press the shortcut key `3`. This will change the mouse cursor to a cross symbol.","add_area_draw":"Next, position the mouse cursor at one of the corners of the feature and {leftclick} left-click or press `Space` to begin placing nodes around the outer edge of the area. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.","add_area_finish":"To finish an area, press `{return}` or click again on either the first or last node.","square_area_h":"Square Corners","square_area_command":"Many area features like buildings have square corners. To square the corners of an area, {rightclick} right-click the edge of the area and select the {orthogonalize} **Square** command from the editing menu.","modify_area_h":"Modifying Areas","modify_area_dragnode":"Often you'll see areas that aren't shaped correctly, for example a building that does not match up with the background imagery. To adjust the shape of an area, first {leftclick} left-click to select it. All nodes of the area will be drawn as small circles. You can then drag the nodes to better locations.","modify_area_addnode":"You can also create new nodes along an area either by {leftclick}**x2** double-clicking on the edge of the area or by dragging the small triangles at the midpoints between nodes.","delete_area_h":"Deleting Areas","delete_area":"If an area is entirely incorrect, for example a building that doesn't exist in the real world, it's OK to delete it. Be cautious when deleting features - the background imagery you are using might be outdated, and a building that looks wrong could simply be newly built.","delete_area_command":"To delete an area, {rightclick} right-click on the area to select it and show the edit menu, then use the {delete} **Delete** command."},"relations":{"title":"Relations","intro":"A *relation* is a special type of feature in OpenStreetMap that groups together other features. The features that belong to a relation are called *members*, and each member can have a *role* in the relation.","edit_relation_h":"Editing Relations","edit_relation":"At the bottom of the feature editor, you can expand the \"All relations\" section to see if the selected feature is a member of any relations. You can then click on the relation to select and edit it.","edit_relation_add":"To add a feature to a relation, select the feature, then click the {plus} add button in the \"All relations\" section of the feature editor. You can choose from a list of nearby relations, or choose the \"New relation...\" option.","edit_relation_delete":"You can also click the {delete} **Delete** button to remove the selected feature from the relation. If you remove all of the members from a relation, the relation will be deleted automatically.","maintain_relation_h":"Maintaining Relations","maintain_relation":"For the most part, iD will maintain relations automatically as you edit. You should take care when replacing features that might be members of relations. For example if you delete a section of road and draw a new section of road to replace it, you should add the new section to the same relations (routes, turn restrictions, etc.) as the original.","relation_types_h":"Relation Types","multipolygon_h":"Multipolygons","multipolygon":"A *multipolygon* relation is a group of one or more *outer* features and one or more inner features. The outer features define the outer edges of the multipolygon, and the inner features define sub-areas or holes cut out from the inside of the multipolygon.","multipolygon_create":"To create a multipolygon, for example a building with a hole in it, draw the outer edge as an area and the inner edge as a line or different kind of area. Then `{shift}`+{leftclick} left-click to select both features, {rightclick} right-click to show the edit menu, and select the {merge} **Merge** command.","multipolygon_merge":"Merging several lines or areas will create a new multipolygon relation with all selected areas as members. iD will choose the inner and outer roles automatically, based on which features are contained inside other features.","turn_restriction_h":"Turn restrictions","turn_restriction":"A *turn restriction* relation is a group of several road segments in an intersection. Turn restrictions consist of a *from* road, *via* node or roads, and a *to* road.","turn_restriction_field":"To edit turn restrictions, select a junction node where two or more roads meet. The feature editor will display a special \"Turn Restrictions\" field containing a model of the intersection.","turn_restriction_editing":"In the \"Turn Restrictions\" field, click to select a \"from\" road, and see whether turns are allowed or restricted to any of the \"to\" roads. You can click on the turn icons to toggle them between allowed and restricted. iD will create relations automatically and set the from, via, and to roles based on your choices.","route_h":"Routes","route":"A *route* relation is a group of one or more line features that together form a route network, like a bus route, train route, or highway route.","route_add":"To add a feature to a route relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation.","boundary_h":"Boundaries","boundary":"A *boundary* relation is a group of one or more line features that together form an administrative boundary.","boundary_add":"To add a feature to a boundary relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation."},"imagery":{"title":"Background Imagery","intro":"The background imagery that appears beneath the map data is an important resource for mapping. This imagery can be aerial photos collected from satellites, airplanes, and drones, or it can be scanned historical maps or other freely available source data.","sources_h":"Imagery Sources","choosing":"To see which imagery sources are available for editing, click the {layers} **Background settings** button on the side of the map.","sources":"By default, a [Bing Maps](https://www.bing.com/maps/) satellite layer is chosen as the background image. Depending on where you are editing, other imagery sources will be available. Some may be newer or have higher resolution, so it is always useful to check and see which layer is the best one to use as a mapping reference.","offsets_h":"Adjusting Imagery Offset","offset":"Imagery is sometimes offset slightly from accurate map data. If you see a lot of roads or buildings shifted from the background imagery, it may be the imagery that's incorrect, so don't move them all to match the background. Instead, you can adjust the background so that it matches the existing data by expanding the \"Adjust Imagery Offset\" section at the bottom of the Background Settings pane.","offset_change":"Click on the small triangles to adjust the imagery offset in small steps, or hold the left mouse button and drag within the gray square to slide the imagery into alignment."},"streetlevel":{"title":"Street Level Photos","intro":"Street level photos are useful for mapping traffic signs, businesses, and other details that you can't see from satellite and aerial images. The iD editor supports street level photos from [Mapillary](https://www.mapillary.com) and [OpenStreetCam](https://www.openstreetcam.org).","using_h":"Using Street Level Photos","using":"To use street level photos for mapping, click the {data} **Map data** panel on the side of the map to enable or disable the available photo layers.","photos":"When enabled, the photo layer displays a line along the sequence of photos. At higher zoom levels, a circle marks at each photo location, and at even higher zoom levels, a cone indicates the direction the camera was facing when the photo was taken.","viewer":"When you click on one of the photo locations, a photo viewer appears in the bottom corner of the map. The photo viewer contains controls to step forward and backward in the image sequence. It also shows the username of the person who captured the image, the date it was captured, and a link to view the image on the original site."},"gps":{"title":"GPS Traces","intro":"Collected GPS traces are a valuable source of data for OpenStreetMap. This editor supports *.gpx*, *.geojson*, and *.kml* files on your local computer. You can collect GPS traces with a smartphone, sports watch, or other GPS device.","survey":"For information on how to perform a GPS survey, read [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).","using_h":"Using GPS Traces","using":"To use a GPS trace for mapping, drag and drop the data file onto the map editor. If it's recognized, it will be drawn on the map as a bright purple line. Click the {data} **Map data** panel on the side of the map to enable, disable, or zoom to your GPS data.","tracing":"The GPS track isn't sent to OpenStreetMap - the best way to use it is to draw on the map, using it as a guide for the new features that you add.","upload":"You can also [upload your GPS data to OpenStreetMap](https://www.openstreetmap.org/trace/create) for other users to use."},"field":{"restrictions":{"title":"Turn Restrictions Help","about":{"title":"About","about":"This field allows you to inspect and modify turn restrictions. It displays a model of the selected intersection including other nearby connected roads.","from_via_to":"A turn restriction always contains: one **FROM way**, one **TO way**, and either one **VIA node** or one or more **VIA ways**.","maxdist":"The \"{distField}\" slider controls how far to search for additional connected roads.","maxvia":"The \"{viaField}\" slider adjusts how many via ways may be included in the search. (Tip: simple is better)"},"inspecting":{"title":"Inspecting","about":"Hover over any **FROM** segment to see whether it has any turn restrictions. Each possible **TO** destination will be drawn with a colored shadow showing whether a restriction exists.","from_shadow":"{fromShadow} **FROM segment**","allow_shadow":"{allowShadow} **TO Allowed**","restrict_shadow":"{restrictShadow} **TO Restricted**","only_shadow":"{onlyShadow} **TO Only**","restricted":"\"Restricted\" means that there is a turn restriction, for example \"No Left Turn\".","only":"\"Only\" means that a vehicle taking that path may only make that choice, for example \"Only Straight On\"."},"modifying":{"title":"Modifying","about":"To modify turn restrictions, first click on any starting **FROM** segment to select it. The selected segment will pulse, and all possible **TO** destinations will appear as turn symbols.","indicators":"Then, click on a turn symbol to toggle it between \"Allowed\", \"Restricted\", and \"Only\".","allow_turn":"{allowTurn} **TO Allowed**","restrict_turn":"{restrictTurn} **TO Restricted**","only_turn":"{onlyTurn} **TO Only**"},"tips":{"title":"Tips","simple":"**Prefer simple restrictions over complex ones.**","simple_example":"For example, avoid creating a via-way restriction if a simpler via-node turn restriction will do.","indirect":"**Some restrictions display the text \"(indirect)\" and are drawn lighter.**","indirect_example":"These restrictions exist because of another nearby restriction. For example, an \"Only Straight On\" restriction will indirectly create \"No Turn\" restrictions for all other paths through the intersection.","indirect_noedit":"You may not edit indirect restrictions. Instead, edit the nearby direct restriction."}}}},"intro":{"done":"done","ok":"OK","graph":{"block_number":"","city":"Three Rivers","county":"","district":"","hamlet":"","neighbourhood":"","postcode":"49093","province":"","quarter":"","state":"MI","subdistrict":"","suburb":"","countrycode":"us","name":{"1st-avenue":"1st Avenue","2nd-avenue":"2nd Avenue","4th-avenue":"4th Avenue","5th-avenue":"5th Avenue","6th-avenue":"6th Avenue","6th-street":"6th Street","7th-avenue":"7th Avenue","8th-avenue":"8th Avenue","9th-avenue":"9th Avenue","10th-avenue":"10th Avenue","11th-avenue":"11th Avenue","12th-avenue":"12th Avenue","access-point-employment":"Access Point Employment","adams-street":"Adams Street","andrews-elementary-school":"Andrews Elementary School","andrews-street":"Andrews Street","armitage-street":"Armitage Street","barrows-school":"Barrows School","battle-street":"Battle Street","bennett-street":"Bennett Street","bowman-park":"Bowman Park","collins-drive":"Collins Drive","conrail-railroad":"Conrail Railroad","conservation-park":"Conservation Park","constantine-street":"Constantine Street","cushman-street":"Cushman Street","dollar-tree":"Dollar Tree","douglas-avenue":"Douglas Avenue","east-street":"East Street","elm-street":"Elm Street","flower-street":"Flower Street","foster-street":"Foster Street","french-street":"French Street","garden-street":"Garden Street","gem-pawnbroker":"Gem Pawnbroker","golden-finch-framing":"Golden Finch Framing","grant-avenue":"Grant Avenue","hoffman-pond":"Hoffman Pond","hoffman-street":"Hoffman Street","hook-avenue":"Hook Avenue","jefferson-street":"Jefferson Street","kelsey-street":"Kelsey Street","lafayette-park":"LaFayette Park","las-coffee-cafe":"L.A.'s Coffee Cafe","lincoln-avenue":"Lincoln Avenue","lowrys-books":"Lowry's Books","lynns-garage":"Lynn's Garage","main-street-barbell":"Main Street Barbell","main-street-cafe":"Main Street Cafe","main-street-fitness":"Main Street Fitness","main-street":"Main Street","maple-street":"Maple Street","marina-park":"Marina Park","market-street":"Market Street","memory-isle-park":"Memory Isle Park","memory-isle":"Memory Isle","michigan-avenue":"Michigan Avenue","middle-street":"Middle Street","millard-street":"Millard Street","moore-street":"Moore Street","morris-avenue":"Morris Avenue","mural-mall":"Mural Mall","paisanos-bar-and-grill":"Paisano's Bar and Grill","paisley-emporium":"Paisley Emporium","paparazzi-tattoo":"Paparazzi Tattoo","pealer-street":"Pealer Street","pine-street":"Pine Street","pizza-hut":"Pizza Hut","portage-avenue":"Portage Avenue","portage-river":"Portage River","preferred-insurance-services":"Preferred Insurance Services","railroad-drive":"Railroad Drive","river-city-appliance":"River City Appliance","river-drive":"River Drive","river-road":"River Road","river-street":"River Street","riverside-cemetery":"Riverside Cemetery","riverwalk-trail":"Riverwalk Trail","riviera-theatre":"Riviera Theatre","rocky-river":"Rocky River","saint-joseph-river":"Saint Joseph River","scidmore-park-petting-zoo":"Scidmore Park Petting Zoo","scidmore-park":"Scidmore Park","scouter-park":"Scouter Park","sherwin-williams":"Sherwin-Williams","south-street":"South Street","southern-michigan-bank":"Southern Michigan Bank","spring-street":"Spring Street","sturgeon-river-road":"Sturgeon River Road","three-rivers-city-hall":"Three Rivers City Hall","three-rivers-elementary-school":"Three Rivers Elementary School","three-rivers-fire-department":"Three Rivers Fire Department","three-rivers-high-school":"Three Rivers High School","three-rivers-middle-school":"Three Rivers Middle School","three-rivers-municipal-airport":"Three Rivers Municipal Airport","three-rivers-post-office":"Three Rivers Post Office","three-rivers-public-library":"Three Rivers Public Library","three-rivers":"Three Rivers","unique-jewelry":"Unique Jewelry","walnut-street":"Walnut Street","washington-street":"Washington Street","water-street":"Water Street","west-street":"West Street","wheeler-street":"Wheeler Street","william-towing":"William Towing","willow-drive":"Willow Drive","wood-street":"Wood Street","world-fare":"World Fare"}},"welcome":{"title":"Welcome","welcome":"Welcome! This walkthrough will teach you the basics of editing on OpenStreetMap.","practice":"All of the data in this walkthrough is just for practicing, and any edits that you make in the walkthrough will not be saved.","words":"This walkthrough will introduce some new words and concepts. When we introduce a new word, we'll use *italics*.","mouse":"You can use any input device to edit the map, but this walkthrough assumes you have a mouse with left and right buttons. **If you want to attach a mouse, do so now, then click OK.**","leftclick":"When this tutorial asks you to click or double-click, we mean with the left button. On a trackpad it might be a single-click or single-finger tap. **Left-click {num} times.**","rightclick":"Sometimes we'll also ask you to right-click. This might be the same as control-click, or two-finger tap on a trackpad. Your keyboard might even have a 'menu' key that works like right-click. **Right-click {num} times.**","chapters":"So far, so good! You can use the buttons below to skip chapters at any time or to restart a chapter if you get stuck. Let's begin! **Click '{next}' to continue.**"},"navigation":{"title":"Navigation","drag":"The main map area shows OpenStreetMap data on top of a background.{br}You can drag the map by pressing and holding the left mouse button while moving the mouse around. You can also use the arrow keys on your keyboard. **Drag the map!**","zoom":"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons. **Zoom the map!**","features":"We use the word *features* to describe the things that appear on the map. Anything in the real world can be mapped as a feature on OpenStreetMap.","points_lines_areas":"Map features are represented using *points, lines, or areas.*","nodes_ways":"In OpenStreetMap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*.","click_townhall":"All features on the map can be selected by clicking on them. **Click on the point to select it.**","selected_townhall":"Great! The point is now selected. Selected features are drawn with a pulsing glow.","editor_townhall":"When a feature is selected, the *feature editor* is displayed alongside the map.","preset_townhall":"The top part of the feature editor shows the feature's type. This point is a {preset}.","fields_townhall":"The middle part of the feature editor contains *fields* showing the feature's attributes, such as its name and address.","close_townhall":"**Close the feature editor by hitting escape or pressing the {button} button in the upper corner.**","search_street":"You can also search for features in the current view, or worldwide. **Search for '{name}'.**","choose_street":"**Choose {name} from the list to select it.**","selected_street":"Great! {name} is now selected.","editor_street":"The fields shown for a street are different than the fields that were shown for the town hall.{br}For this selected street, the feature editor shows fields like '{field1}' and '{field2}'. **Close the feature editor by hitting escape or pressing the {button} button.**","play":"Try moving the map and clicking on some other features to see what kinds of things can be added to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},"points":{"title":"Points","add_point":"*Points* can be used to represent features such as shops, restaurants, and monuments.{br}They mark a specific location, and describe what's there. **Click the {button} Point button to add a new point.**","place_point":"To place the new point on the map, position your mouse cursor where the point should go, then left-click or press the spacebar. **Move the mouse pointer over this building, then left-click or press the spacebar.**","search_cafe":"There are many different features that can be represented by points. The point you just added is a cafe. **Search for '{preset}'.**","choose_cafe":"**Choose {preset} from the list.**","feature_editor":"The point is now marked as a cafe. Using the feature editor, we can add more information about the cafe.","add_name":"In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.{br}Let's pretend that you have local knowledge of this cafe, and you know its name. **Add a name for the cafe.**","add_close":"The feature editor will remember all of your changes automatically. **When you are finished adding the name, hit escape, enter, or click the {button} button to close the feature editor.**","reselect":"Often points will already exist, but have mistakes or be incomplete. We can edit existing points. **Click to select the cafe you just created.**","update":"Let's fill in some more details for this cafe. You can change its name, add a cuisine, or add an address. **Change the cafe details.**","update_close":"**When you are finished updating the cafe, hit escape, enter, or click the {button} button to close the feature editor.**","rightclick":"You can right-click on any feature to see the *edit menu*, which shows a list of editing operations that can be performed. **Right-click to select the point you created and show the edit menu.**","delete":"It's OK to delete features that don't exist in the real world.{br}Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it. **Click on the {button} button to delete the point.**","undo":"You can always undo any changes up until you save your edits to OpenStreetMap. **Click on the {button} button to undo the delete and get the point back.**","play":"Now that you know how to create and edit points, try creating a few more points for practice! **When you are ready to continue to the next chapter, click '{next}'.**"},"areas":{"title":"Areas","add_playground":"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas.{br}They can also be used for more detailed mapping of many features you might normally map as points. **Click the {button} Area button to add a new area.**","start_playground":"Let's add this playground to the map by drawing an area. Areas are drawn by placing *nodes* along the outer edge of the feature. **Click or press spacebar to place a starting node on one of the corners of the playground.**","continue_playground":"Continue drawing the area by placing more nodes along the playground's edge. It is OK to connect the area to the existing walking paths.{br}Tip: You can hold down the '{alt}' key to prevent nodes from connecting to other features. **Continue drawing an area for the playground.**","finish_playground":"Finish the area by pressing enter, or clicking again on either the first or last node. **Finish drawing an area for the playground.**","search_playground":"**Search for '{preset}'.**","choose_playground":"**Choose {preset} from the list.**","add_field":"This playground doesn't have an official name, so we won't add anything in the Name field.{br}Instead let's add some additional details about the playground to the Description field. **Open the Add Field list.**","choose_field":"**Choose {field} from the list.**","retry_add_field":"You didn't select the {field} field. Let's try again.","describe_playground":"**Add a description, then click the {button} button to close the feature editor.**","play":"Good job! Try drawing a few more areas, and see what other kinds of area features you can add to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},"lines":{"title":"Lines","add_line":"*Lines* are used to represent features such as roads, railroads, and rivers. **Click the {button} Line button to add a new line.**","start_line":"Here is a road that is missing. Let's add it!{br}In OpenStreetMap, lines should be drawn down the center of the road. You can drag and zoom the map while drawing if necessary. **Start a new line by clicking at the top end of this missing road.**","intersect":"Click or press spacebar to add more nodes to the line.{br}Roads, and many other types of lines, are part of a larger network. It is important for these lines to be connected properly in order for routing applications to work. **Click on {name} to create an intersection connecting the two lines.**","retry_intersect":"The road needs to intersect {name}. Let's try again!","continue_line":"Continue drawing the line for the new road. Remember that you can drag and zoom the map if needed.{br}When you are finished drawing, click on the last node again. **Finish drawing the road.**","choose_category_road":"**Select {category} from the list.**","choose_preset_residential":"There are many different types of roads, but this one is a residential road. **Choose the {preset} type.**","retry_preset_residential":"You didn't select the {preset} type. **Click here to choose again.**","name_road":"**Give this road a name, then hit escape, enter, or click the {button} button to close the feature editor.**","did_name_road":"Looks good! Next we will learn how to update the shape of a line.","update_line":"Sometimes you will need to change the shape of an existing line. Here is a road that doesn't look quite right.","add_node":"We can add some nodes to this line to improve its shape. One way to add a node is to double-click the line where you want to add a node. **Double-click on the line to create a new node.**","start_drag_endpoint":"When a line is selected, you can drag any of its nodes by clicking and holding down the left mouse button while you drag. **Drag the endpoint to the place where these roads should intersect.**","finish_drag_endpoint":"This spot looks good. **Release the left mouse button to finish dragging.**","start_drag_midpoint":"Small triangles are drawn at the *midpoints* between nodes. Another way to create a new node is to drag a midpoint to a new location. **Drag the midpoint triangle to create a new node along the curve of the road.**","continue_drag_midpoint":"This line is looking much better! Continue to adjust this line by double-clicking or dragging midpoints until the curve matches the road shape. **When you're happy with how the line looks, click OK.**","delete_lines":"It's OK to delete lines for roads that don't exist in the real world.{br}Here's an example where the city planned a {street} but never built it. We can improve this part of the map by deleting the extra lines.","rightclick_intersection":"The last real street is {street1}, so we will *split* {street2} at this intersection and remove everything above it. **Right click on the intersection node.**","split_intersection":"**Click on the {button} button to split {street}.**","retry_split":"You didn't click the Split button. Try again.","did_split_multi":"Good job! {street1} is now split into two pieces. The top part can be removed. **Click the top part of {street2} to select it.**","did_split_single":"**Click the top part of {street2} to select it.**","multi_select":"{selected} is now selected. Let's also select {other1}. You can shift-click to select multiple things. **Shift-click on {other2}.**","multi_rightclick":"Good! Both lines to delete are now selected. **Right-click on one of the lines to show the edit menu.**","multi_delete":"**Click on the {button} button to delete the extra lines.**","retry_delete":"You didn't click the Delete button. Try again.","play":"Great! Use the skills that you've learned in this chapter to practice editing some more lines. **When you are ready to continue to the next chapter, click '{next}'.**"},"buildings":{"title":"Buildings","add_building":"OpenStreetMap is the world's largest database of buildings.{br}You can help improve this database by tracing buildings that aren't already mapped. **Click the {button} Area button to add a new area.**","start_building":"Let's add this house to the map by tracing its outline.{br}Buildings should be traced around their footprint as accurately as possible. **Click or press spacebar to place a starting node on one of the corners of the building.**","continue_building":"Continue adding more nodes to trace the outline of the building. Remember that you can zoom in if you want to add more details.{br}Finish the building by pressing enter, or clicking again on either the first or last node. **Finish tracing the building.**","retry_building":"It looks like you had some trouble placing the nodes at the building corners. Try again!","choose_category_building":"**Choose {category} from the list.**","choose_preset_house":"There are many different types of buildings, but this one is clearly a house.{br}If you're not sure of the type, it's OK to just choose the generic Building type. **Choose the {preset} type.**","close":"**Hit escape or click the {button} button to close the feature editor.**","rightclick_building":"**Right-click to select the building you created and show the edit menu.**","square_building":"The house that you just added will look even better with perfectly square corners. **Click on the {button} button to square the building shape.**","retry_square":"You didn't click the Square button. Try again.","done_square":"See how the corners of the building moved into place? Let's learn another useful trick.","add_tank":"Next we'll trace this circular storage tank. **Click the {button} Area button to add a new area.**","start_tank":"Don't worry, you won't need to draw a perfect circle. Just draw an area inside the tank that touches its edge. **Click or press spacebar to place a starting node on the edge of the tank.**","continue_tank":"Add a few more nodes around the edge. The circle will be created outside the nodes that you draw.{br}Finish the area by pressing enter, or clicking again on either the first or last node. **Finish tracing the tank.**","search_tank":"**Search for '{preset}'.**","choose_tank":"**Choose {preset} from the list.**","rightclick_tank":"**Right-click to select the storage tank you created and show the edit menu.**","circle_tank":"**Click on the {button} button to make the tank a circle.**","retry_circle":"You didn't click the Circularize button. Try again.","play":"Great Job! Practice tracing a few more buildings, and try some of the other commands on the edit menu. **When you are ready to continue to the next chapter, click '{next}'.**"},"startediting":{"title":"Start Editing","help":"You're now ready to edit OpenStreetMap!{br}You can replay this walkthrough anytime or view more documentation by clicking the {button} Help button or pressing the '{key}' key.","shortcuts":"You can view a list of commands along with their keyboard shortcuts by pressing the '{key}' key.","save":"Don't forget to regularly save your changes!","start":"Start mapping!"}},"shortcuts":{"title":"Keyboard shortcuts","tooltip":"Show the keyboard shortcuts screen.","toggle":{"key":"?"},"key":{"alt":"Alt","backspace":"Backspace","cmd":"Cmd","ctrl":"Ctrl","delete":"Delete","del":"Del","end":"End","enter":"Enter","esc":"Esc","home":"Home","option":"Option","pause":"Pause","pgdn":"PgDn","pgup":"PgUp","return":"Return","shift":"Shift","space":"Space"},"gesture":{"drag":"drag"},"or":"-or-","browsing":{"title":"Browsing","navigation":{"title":"Navigation","pan":"Pan map","pan_more":"Pan map by one screenful","zoom":"Zoom in / Zoom out","zoom_more":"Zoom in / Zoom out by a lot"},"help":{"title":"Help","help":"Show help/documentation","keyboard":"Show keyboard shortcuts"},"display_options":{"title":"Display options","background":"Show background options","background_switch":"Switch back to last background","map_data":"Show map data options","fullscreen":"Enter full screen mode","wireframe":"Toggle wireframe mode","minimap":"Toggle minimap"},"selecting":{"title":"Selecting features","select_one":"Select a single feature","select_multi":"Select multiple features","lasso":"Draw a selection lasso around features","search":"Find features matching search text"},"with_selected":{"title":"With feature selected","edit_menu":"Toggle edit menu"},"vertex_selected":{"title":"With node selected","previous":"Jump to previous node","next":"Jump to next node","first":"Jump to first node","last":"Jump to last node","change_parent":"Switch parent way"}},"editing":{"title":"Editing","drawing":{"title":"Drawing","add_point":"'Add point' mode","add_line":"'Add line' mode","add_area":"'Add area' mode","place_point":"Place a point","disable_snap":"Hold to disable point snapping","stop_line":"Finish drawing a line or area"},"operations":{"title":"Operations","continue_line":"Continue a line at the selected node","merge":"Combine (merge) selected features","disconnect":"Disconnect features at the selected node","split":"Split a line into two at the selected node","reverse":"Reverse a line","move":"Move selected features","rotate":"Rotate selected features","orthogonalize":"Straighten line / Square area corners","circularize":"Circularize a closed line or area","reflect_long":"Reflect features across the longer axis","reflect_short":"Reflect features across the shorter axis","delete":"Delete selected features"},"commands":{"title":"Commands","copy":"Copy selected features","paste":"Paste copied features","undo":"Undo last action","redo":"Redo last action","save":"Save changes"}},"tools":{"title":"Tools","info":{"title":"Information","all":"Toggle all information panels","background":"Toggle background panel","history":"Toggle history panel","location":"Toggle location panel","measurement":"Toggle measurement panel"}}},"units":{"feet":"{quantity} ft","miles":"{quantity} mi","square_feet":"{quantity} sq ft","square_miles":"{quantity} sq mi","acres":"{quantity} ac","meters":"{quantity} m","kilometers":"{quantity} km","square_meters":"{quantity} m²","square_kilometers":"{quantity} km²","hectares":"{quantity} ha","area_pair":"{area1} ({area2})","arcdegrees":"{quantity}°","arcminutes":"{quantity}′","arcseconds":"{quantity}″","north":"N","south":"S","east":"E","west":"W","coordinate":"{coordinate}{direction}","coordinate_pair":"{latitude}, {longitude}"},"presets":{"categories":{"category-barrier":{"name":"Barrier Features"},"category-building":{"name":"Building Features"},"category-golf":{"name":"Golf Features"},"category-landuse":{"name":"Land Use Features"},"category-natural-area":{"name":"Natural Features"},"category-natural-line":{"name":"Natural Features"},"category-natural-point":{"name":"Natural Features"},"category-path":{"name":"Path Features"},"category-rail":{"name":"Rail Features"},"category-restriction":{"name":"Restriction Features"},"category-road":{"name":"Road Features"},"category-route":{"name":"Route Features"},"category-water-area":{"name":"Water Features"},"category-water-line":{"name":"Water Features"}},"fields":{"access_simple":{"label":"Allowed Access"},"access":{"label":"Allowed Access","placeholder":"Not Specified","types":{"access":"All","foot":"Foot","motor_vehicle":"Motor Vehicles","bicycle":"Bicycles","horse":"Horses"},"options":{"yes":{"title":"Allowed","description":"Access permitted by law; a right of way"},"no":{"title":"Prohibited","description":"Access not permitted to the general public"},"permissive":{"title":"Permissive","description":"Access permitted until such time as the owner revokes the permission"},"private":{"title":"Private","description":"Access permitted only with permission of the owner on an individual basis"},"designated":{"title":"Designated","description":"Access permitted according to signs or specific local laws"},"destination":{"title":"Destination","description":"Access permitted only to reach a destination"},"dismount":{"title":"Dismount","description":"Access permitted but rider must dismount"}}},"address":{"label":"Address","placeholders":{"block_number":"Block Number","block_number!jp":"Block No.","city":"City","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town","conscriptionnumber":"123","country":"Country","county":"County","county!jp":"District","district":"District","district!vn":"Arrondissement/Town/District","floor":"Floor","hamlet":"Hamlet","housename":"Housename","housenumber":"123","housenumber!jp":"Building No./Lot No.","neighbourhood":"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza","place":"Place","postcode":"Postcode","province":"Province","province!jp":"Prefecture","quarter":"Quarter","quarter!jp":"Ōaza/Machi","state":"State","street":"Street","subdistrict":"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet","suburb":"Suburb","suburb!jp":"Ward","unit":"Unit"}},"admin_level":{"label":"Admin Level"},"aerialway":{"label":"Type"},"aerialway/access":{"label":"Access","options":{"entry":"Entry","exit":"Exit","both":"Both"}},"aerialway/bubble":{"label":"Bubble"},"aerialway/capacity":{"label":"Capacity (per hour)","placeholder":"500, 2500, 5000..."},"aerialway/duration":{"label":"Duration (minutes)","placeholder":"1, 2, 3..."},"aerialway/heating":{"label":"Heated"},"aerialway/occupancy":{"label":"Occupancy","placeholder":"2, 4, 8..."},"aerialway/summer/access":{"label":"Access (summer)","options":{"entry":"Entry","exit":"Exit","both":"Both"}},"aeroway":{"label":"Type"},"agrarian":{"label":"Products"},"amenity":{"label":"Type"},"animal_boarding":{"label":"For Animals"},"animal_breeding":{"label":"For Animals"},"animal_shelter":{"label":"For Animals"},"area/highway":{"label":"Type"},"artist":{"label":"Artist"},"artwork_type":{"label":"Type"},"atm":{"label":"ATM"},"backrest":{"label":"Backrest"},"barrier":{"label":"Type"},"bath/open_air":{"label":"Open Air"},"bath/sand_bath":{"label":"Sand Bath"},"bath/type":{"label":"Specialty","options":{"onsen":"Japanese Onsen","foot_bath":"Foot Bath","hot_spring":"Hot Spring"}},"beauty":{"label":"Shop Type"},"bench":{"label":"Bench"},"bicycle_parking":{"label":"Type"},"bin":{"label":"Waste Bin"},"blood_components":{"label":"Blood Components","options":{"whole":"whole blood","plasma":"plasma","platelets":"platelets","stemcells":"stem cell samples"}},"board_type":{"label":"Type"},"boules":{"label":"Type"},"boundary":{"label":"Type"},"brand":{"label":"Brand"},"brewery":{"label":"Draft Beers"},"bridge":{"label":"Type","placeholder":"Default"},"building_area":{"label":"Building"},"building":{"label":"Building"},"bunker_type":{"label":"Type"},"cables":{"label":"Cables","placeholder":"1, 2, 3..."},"camera/direction":{"label":"Direction (Degrees Clockwise)","placeholder":"45, 90, 180, 270"},"camera/mount":{"label":"Camera Mount"},"camera/type":{"label":"Camera Type","options":{"fixed":"Fixed","panning":"Panning","dome":"Dome"}},"capacity":{"label":"Capacity","placeholder":"50, 100, 200..."},"castle_type":{"label":"Type"},"clothes":{"label":"Clothes"},"club":{"label":"Type"},"collection_times":{"label":"Collection Times"},"comment":{"label":"Changeset Comment","placeholder":"Brief description of your contributions (required)"},"communication_multi":{"label":"Communication Types"},"construction":{"label":"Type"},"contact/webcam":{"label":"Webcam URL","placeholder":"http://example.com/"},"content":{"label":"Content"},"country":{"label":"Country"},"covered":{"label":"Covered"},"craft":{"label":"Type"},"crane/type":{"label":"Crane Type","options":{"portal_crane":"Portal Crane","floor-mounted_crane":"Floor-mounted Crane","travel_lift":"Travel Lift"}},"crop":{"label":"Crops"},"crossing":{"label":"Type"},"cuisine":{"label":"Cuisines"},"currency_multi":{"label":"Currency Types"},"cutting":{"label":"Type","placeholder":"Default"},"cycle_network":{"label":"Network"},"cycleway":{"label":"Bike Lanes","placeholder":"none","types":{"cycleway:left":"Left side","cycleway:right":"Right side"},"options":{"none":{"title":"None","description":"No bike lane"},"lane":{"title":"Standard bike lane","description":"A bike lane separated from auto traffic by a painted line"},"shared_lane":{"title":"Shared bike lane","description":"A bike lane with no separation from auto traffic"},"track":{"title":"Bike track","description":"A bike lane separated from traffic by a physical barrier"},"share_busway":{"title":"Bike lane shared with bus","description":"A bike lane shared with a bus lane"},"opposite_lane":{"title":"Opposite bike lane","description":"A bike lane that travels in the opposite direction of traffic"},"opposite":{"title":"Contraflow bike lane","description":"A bike lane that travels in both directions on a one-way street"}}},"dance/style":{"label":"Dance Styles"},"date":{"label":"Date"},"delivery":{"label":"Delivery"},"denomination":{"label":"Denomination"},"denotation":{"label":"Denotation"},"description":{"label":"Description"},"devices":{"label":"Devices","placeholder":"1, 2, 3..."},"diaper":{"label":"Diaper Changing Available"},"direction_cardinal":{"label":"Direction","options":{"N":"North","E":"East","S":"South","W":"West","NE":"Northeast","SE":"Southeast","SW":"Southwest","NW":"Northwest","NNE":"North-northeast","ENE":"East-northeast","ESE":"East-southeast","SSE":"South-southeast","SSW":"South-southwest","WSW":"West-southwest","WNW":"West-northwest","NNW":"North-northwest"}},"direction_clock":{"label":"Direction","options":{"clockwise":"Clockwise","anticlockwise":"Counterclockwise"}},"direction_vertex":{"label":"Direction","options":{"forward":"Forward","backward":"Backward","both":"Both / All"}},"direction":{"label":"Direction (Degrees Clockwise)","placeholder":"45, 90, 180, 270"},"dispensing":{"label":"Dispenses Prescriptions"},"display":{"label":"Display"},"dock":{"label":"Type"},"drive_through":{"label":"Drive-Through"},"duration":{"label":"Duration","placeholder":"00:00"},"electrified":{"label":"Electrification","placeholder":"Contact Line, Electrified Rail...","options":{"contact_line":"Contact Line","rail":"Electrified Rail","yes":"Yes (unspecified)","no":"No"}},"elevation":{"label":"Elevation"},"email":{"label":"Email","placeholder":"example@example.com"},"embankment":{"label":"Type","placeholder":"Default"},"emergency":{"label":"Emergency"},"entrance":{"label":"Type"},"except":{"label":"Exceptions"},"fax":{"label":"Fax","placeholder":"+31 42 123 4567"},"fee":{"label":"Fee"},"fence_type":{"label":"Type"},"fire_hydrant/position":{"label":"Position","options":{"lane":"Lane","parking_lot":"Parking Lot","sidewalk":"Sidewalk","green":"Green"}},"fire_hydrant/type":{"label":"Type","options":{"pillar":"Pillar/Aboveground","underground":"Underground","wall":"Wall","pond":"Pond"}},"fitness_station":{"label":"Equipment Type"},"fixme":{"label":"Fix Me"},"ford":{"label":"Type","placeholder":"Default"},"frequency":{"label":"Operating Frequency"},"fuel_multi":{"label":"Fuel Types"},"fuel":{"label":"Fuel"},"gauge":{"label":"Gauge"},"gender":{"label":"Gender","placeholder":"Unknown","options":{"male":"Male","female":"Female","unisex":"Unisex"}},"generator/method":{"label":"Method"},"generator/output/electricity":{"label":"Power Output","placeholder":"50 MW, 100 MW, 200 MW..."},"generator/source":{"label":"Source"},"generator/type":{"label":"Type"},"government":{"label":"Type"},"grape_variety":{"label":"Grape Varieties"},"handicap":{"label":"Handicap","placeholder":"1-18"},"handrail":{"label":"Handrail"},"hashtags":{"label":"Suggested Hashtags","placeholder":"#example"},"healthcare":{"label":"Type"},"healthcare/speciality":{"label":"Specialties"},"height":{"label":"Height (Meters)"},"highway":{"label":"Type"},"historic":{"label":"Type"},"historic/civilization":{"label":"Historic Civilization"},"hoops":{"label":"Hoops","placeholder":"1, 2, 4..."},"iata":{"label":"IATA"},"icao":{"label":"ICAO"},"incline_steps":{"label":"Incline","options":{"up":"Up","down":"Down"}},"incline":{"label":"Incline"},"indoor":{"label":"Indoor"},"information":{"label":"Type"},"inscription":{"label":"Inscription"},"intermittent":{"label":"Intermittent"},"internet_access":{"label":"Internet Access","options":{"yes":"Yes","no":"No","wlan":"Wifi","wired":"Wired","terminal":"Terminal"}},"internet_access/fee":{"label":"Internet Access Fee"},"internet_access/ssid":{"label":"SSID (Network Name)"},"kerb":{"label":"Curb"},"label":{"label":"Label"},"lamp_type":{"label":"Type"},"landuse":{"label":"Type"},"lanes":{"label":"Lanes","placeholder":"1, 2, 3..."},"layer":{"label":"Layer","placeholder":"0"},"leaf_cycle_singular":{"label":"Leaf Cycle","options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous"}},"leaf_cycle":{"label":"Leaf Cycle","options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous","mixed":"Mixed"}},"leaf_type_singular":{"label":"Leaf Type","options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","leafless":"Leafless"}},"leaf_type":{"label":"Leaf Type","options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","mixed":"Mixed","leafless":"Leafless"}},"leisure":{"label":"Type"},"length":{"label":"Length (Meters)"},"level":{"label":"Level"},"levels":{"label":"Levels","placeholder":"2, 4, 6..."},"lit":{"label":"Lit"},"location":{"label":"Location"},"man_made":{"label":"Type"},"manhole":{"label":"Type"},"map_size":{"label":"Coverage"},"map_type":{"label":"Type"},"maxheight":{"label":"Max Height","placeholder":"4, 4.5, 5, 14'0\", 14'6\", 15'0\""},"maxspeed":{"label":"Speed Limit","placeholder":"40, 50, 60..."},"maxstay":{"label":"Max Stay"},"maxweight":{"label":"Max Weight"},"memorial":{"label":"Type"},"monitoring_multi":{"label":"Monitoring"},"mtb/scale":{"label":"Mountain Biking Difficulty","placeholder":"0, 1, 2, 3...","options":{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}},"mtb/scale/imba":{"label":"IMBA Trail Difficulty","placeholder":"Easy, Medium, Difficult...","options":{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}},"mtb/scale/uphill":{"label":"Mountain Biking Uphill Difficulty","placeholder":"0, 1, 2, 3...","options":{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}},"name":{"label":"Name","placeholder":"Common name (if any)"},"natural":{"label":"Natural"},"network_bicycle":{"label":"Network Type","placeholder":"Local, Regional, National, International","options":{"lcn":"Local","rcn":"Regional","ncn":"National","icn":"International"}},"network_foot":{"label":"Network Type","placeholder":"Local, Regional, National, International","options":{"lwn":"Local","rwn":"Regional","nwn":"National","iwn":"International"}},"network_horse":{"label":"Network Type","placeholder":"Local, Regional, National, International","options":{"lhn":"Local","rhn":"Regional","nhn":"National","ihn":"International"}},"network_road":{"label":"Network"},"network":{"label":"Network"},"note":{"label":"Note"},"office":{"label":"Type"},"oneway_yes":{"label":"One Way","options":{"undefined":"Assumed to be Yes","yes":"Yes","no":"No","reversible":"Reversible","alternating":"Alternating"}},"oneway":{"label":"One Way","options":{"undefined":"Assumed to be No","yes":"Yes","no":"No","reversible":"Reversible","alternating":"Alternating"}},"opening_hours":{"label":"Hours"},"operator":{"label":"Operator"},"outdoor_seating":{"label":"Outdoor Seating"},"par":{"label":"Par","placeholder":"3, 4, 5..."},"park_ride":{"label":"Park and Ride"},"parking":{"label":"Type","options":{"surface":"Surface","multi-storey":"Multilevel","underground":"Underground","sheds":"Sheds","carports":"Carports","garage_boxes":"Garage Boxes","lane":"Roadside Lane"}},"payment_multi":{"label":"Payment Types"},"phases":{"label":"Phases","placeholder":"1, 2, 3..."},"phone":{"label":"Phone","placeholder":"+31 42 123 4567"},"piste/difficulty":{"label":"Difficulty","placeholder":"Easy, Intermediate, Advanced...","options":{"novice":"Novice (instructional)","easy":"Easy (green circle)","intermediate":"Intermediate (blue square)","advanced":"Advanced (black diamond)","expert":"Expert (double black diamond)","freeride":"Freeride (off-piste)","extreme":"Extreme (climbing equipment required)"}},"piste/grooming":{"label":"Grooming","options":{"classic":"Classic","mogul":"Mogul","backcountry":"Backcountry","classic+skating":"Classic and Skating","scooter":"Scooter/Snowmobile","skating":"Skating"}},"piste/type":{"label":"Type","options":{"downhill":"Downhill","nordic":"Nordic","skitour":"Skitour","sled":"Sled","hike":"Hike","sleigh":"Sleigh","ice_skate":"Ice Skate","snow_park":"Snow Park","playground":"Playground"}},"place":{"label":"Type"},"plant":{"label":"Plant"},"plant/output/electricity":{"label":"Power Output","placeholder":"500 MW, 1000 MW, 2000 MW..."},"playground/baby":{"label":"Baby Seat"},"playground/max_age":{"label":"Maximum Age"},"playground/min_age":{"label":"Minimum Age"},"population":{"label":"Population"},"power_supply":{"label":"Power Supply"},"power":{"label":"Type"},"produce":{"label":"Produce"},"product":{"label":"Products"},"railway":{"label":"Type"},"railway/position":{"label":"Milestone Position","placeholder":"Distance to one decimal (123.4)"},"railway/signal/direction":{"label":"Direction","options":{"forward":"Forward","backward":"Backward","both":"Both / All"}},"rating":{"label":"Power Rating"},"recycling_accepts":{"label":"Accepts"},"ref_aeroway_gate":{"label":"Gate Number"},"ref_golf_hole":{"label":"Hole Number","placeholder":"1-18"},"ref_highway_junction":{"label":"Junction Number"},"ref_platform":{"label":"Platform Number"},"ref_road_number":{"label":"Road Number"},"ref_route":{"label":"Route Number"},"ref_runway":{"label":"Runway Number","placeholder":"e.g. 01L/19R"},"ref_stop_position":{"label":"Stop Number"},"ref_taxiway":{"label":"Taxiway Name","placeholder":"e.g. A5"},"ref":{"label":"Reference Code"},"ref/isil":{"label":"ISIL Code"},"relation":{"label":"Type"},"religion":{"label":"Religion"},"restriction":{"label":"Type"},"restrictions":{"label":"Turn Restrictions"},"rooms":{"label":"Rooms"},"route_master":{"label":"Type"},"route":{"label":"Type"},"sac_scale":{"label":"Hiking Difficulty","placeholder":"Mountain Hiking, Alpine Hiking...","options":{"hiking":"T1: Hiking","mountain_hiking":"T2: Mountain Hiking","demanding_mountain_hiking":"T3: Demanding Mountain Hiking","alpine_hiking":"T4: Alpine Hiking","demanding_alpine_hiking":"T5: Demanding Alpine Hiking","difficult_alpine_hiking":"T6: Difficult Alpine Hiking"}},"sanitary_dump_station":{"label":"Toilet Disposal"},"seasonal":{"label":"Seasonal"},"second_hand":{"label":"Sells Used","placeholder":"Yes, No, Only","options":{"yes":"Yes","no":"No","only":"Only"}},"service_rail":{"label":"Service Type","options":{"spur":"Spur","yard":"Yard","siding":"Siding","crossover":"Crossover"}},"service_times":{"label":"Service Times"},"service":{"label":"Type"},"service/bicycle":{"label":"Services"},"service/vehicle":{"label":"Services"},"shelter_type":{"label":"Type"},"shelter":{"label":"Shelter"},"shop":{"label":"Type"},"site":{"label":"Type"},"smoking":{"label":"Smoking","placeholder":"No, Separated, Yes...","options":{"no":"No smoking anywhere","separated":"In smoking areas, not physically isolated","isolated":"In smoking areas, physically isolated","outside":"Allowed outside","yes":"Allowed everywhere","dedicated":"Dedicated to smokers (e.g. smokers' club)"}},"smoothness":{"label":"Smoothness","placeholder":"Thin Rollers, Wheels, Off-Road...","options":{"excellent":"Thin Rollers: rollerblade, skateboard","good":"Thin Wheels: racing bike","intermediate":"Wheels: city bike, wheelchair, scooter","bad":"Robust Wheels: trekking bike, car, rickshaw","very_bad":"High Clearance: light duty off-road vehicle","horrible":"Off-Road: heavy duty off-road vehicle","very_horrible":"Specialized off-road: tractor, ATV","impassable":"Impassable / No wheeled vehicle"}},"social_facility_for":{"label":"People Served"},"social_facility":{"label":"Type"},"source":{"label":"Sources"},"sport_ice":{"label":"Sports"},"sport_racing_motor":{"label":"Sports"},"sport_racing_nonmotor":{"label":"Sports"},"sport":{"label":"Sports"},"stars":{"label":"Stars"},"start_date":{"label":"Start Date"},"step_count":{"label":"Number of Steps"},"stop":{"label":"Stop Type","options":{"all":"All Ways","minor":"Minor Road"}},"structure_waterway":{"label":"Structure","placeholder":"Unknown","options":{"tunnel":"Tunnel"}},"structure":{"label":"Structure","placeholder":"Unknown","options":{"bridge":"Bridge","tunnel":"Tunnel","embankment":"Embankment","cutting":"Cutting","ford":"Ford"}},"studio":{"label":"Type"},"substance":{"label":"Substance"},"substation":{"label":"Type"},"supervised":{"label":"Supervised"},"support":{"label":"Support"},"surface":{"label":"Surface"},"surveillance":{"label":"Surveillance Kind"},"surveillance/type":{"label":"Surveillance Type","options":{"camera":"Camera","guard":"Guard","ALPR":"Automatic License Plate Reader"}},"surveillance/zone":{"label":"Surveillance Zone"},"switch":{"label":"Type","options":{"mechanical":"Mechanical","circuit_breaker":"Circuit Breaker","disconnector":"Disconnector","earthing":"Earthing"}},"tactile_paving":{"label":"Tactile Paving"},"takeaway":{"label":"Takeaway","placeholder":"Yes, No, Takeaway Only...","options":{"yes":"Yes","no":"No","only":"Takeaway Only"}},"toilets/disposal":{"label":"Disposal","options":{"flush":"Flush","pitlatrine":"Pit/Latrine","chemical":"Chemical","bucket":"Bucket"}},"toll":{"label":"Toll"},"tomb":{"label":"Type"},"tourism_attraction":{"label":"Tourism"},"tourism":{"label":"Type"},"tower/construction":{"label":"Construction","placeholder":"Guyed, Lattice, Concealed, ..."},"tower/type":{"label":"Type"},"tracktype":{"label":"Track Type","placeholder":"Solid, Mostly Solid, Soft...","options":{"grade1":"Solid: paved or heavily compacted hardcore surface","grade2":"Mostly Solid: gravel/rock with some soft material mixed in","grade3":"Even mixture of hard and soft materials","grade4":"Mostly Soft: soil/sand/grass with some hard material mixed in","grade5":"Soft: soil/sand/grass"}},"trade":{"label":"Type"},"traffic_calming":{"label":"Type"},"traffic_signals":{"label":"Type"},"traffic_signals/direction":{"label":"Direction","options":{"forward":"Forward","backward":"Backward","both":"Both / All"}},"trail_visibility":{"label":"Trail Visibility","placeholder":"Excellent, Good, Bad...","options":{"excellent":"Excellent: unambiguous path or markers everywhere","good":"Good: markers visible, sometimes require searching","intermediate":"Intermediate: few markers, path mostly visible","bad":"Bad: no markers, path sometimes invisible/pathless","horrible":"Horrible: often pathless, some orientation skills required","no":"No: pathless, excellent orientation skills required"}},"transformer":{"label":"Type","options":{"distribution":"Distribution","generator":"Generator","converter":"Converter","traction":"Traction","auto":"Autotransformer","phase_angle_regulator":"Phase Angle Regulator","auxiliary":"Auxiliary","yes":"Unknown"}},"trees":{"label":"Trees"},"tunnel":{"label":"Type","placeholder":"Default"},"vending":{"label":"Type of Goods"},"visibility":{"label":"Visibility","options":{"house":"Up to 5m (16ft)","street":"5 to 20m (16 to 65ft)","area":"Over 20m (65ft)"}},"volcano/status":{"label":"Volcano Status","options":{"active":"Active","dormant":"Dormant","extinct":"Extinct"}},"volcano/type":{"label":"Volcano Type","options":{"stratovolcano":"Stratovolcano","shield":"Shield","scoria":"Scoria"}},"voltage":{"label":"Voltage"},"voltage/primary":{"label":"Primary Voltage"},"voltage/secondary":{"label":"Secondary Voltage"},"voltage/tertiary":{"label":"Tertiary Voltage"},"wall":{"label":"Type"},"water_point":{"label":"Water Point"},"water":{"label":"Type"},"waterway":{"label":"Type"},"website":{"label":"Website","placeholder":"http://example.com/"},"wetland":{"label":"Type"},"wheelchair":{"label":"Wheelchair Access"},"wholesale":{"label":"Wholesale"},"width":{"label":"Width (Meters)"},"wikipedia":{"label":"Wikipedia"},"windings":{"label":"Windings","placeholder":"1, 2, 3..."},"windings/configuration":{"label":"Windings Configuration","options":{"star":"Star / Wye","delta":"Delta","open-delta":"Open Delta","zigzag":"Zig Zag","open":"Open","scott":"Scott","leblanc":"Leblanc"}}},"presets":{"aerialway":{"name":"Aerialway","terms":"ski lift,funifor,funitel"},"aeroway":{"name":"Aeroway","terms":""},"amenity":{"name":"Amenity","terms":""},"circular":{"name":"Traffic Circle","terms":""},"highway":{"name":"Highway","terms":""},"place":{"name":"Place","terms":""},"power":{"name":"Power","terms":""},"railway":{"name":"Railway","terms":""},"roundabout":{"name":"Roundabout","terms":""},"waterway":{"name":"Waterway","terms":""},"address":{"name":"Address","terms":""},"advertising/billboard":{"name":"Billboard","terms":""},"aerialway/station":{"name":"Aerialway Station","terms":""},"aerialway/cable_car":{"name":"Cable Car","terms":"tramway,ropeway"},"aerialway/chair_lift":{"name":"Chair Lift","terms":""},"aerialway/drag_lift":{"name":"Drag Lift","terms":""},"aerialway/gondola":{"name":"Gondola","terms":""},"aerialway/goods":{"name":"Goods Aerialway","terms":""},"aerialway/magic_carpet":{"name":"Magic Carpet Lift","terms":""},"aerialway/mixed_lift":{"name":"Mixed Lift","terms":""},"aerialway/platter":{"name":"Platter Lift","terms":"button lift,poma lift"},"aerialway/pylon":{"name":"Aerialway Pylon","terms":""},"aerialway/rope_tow":{"name":"Rope Tow Lift","terms":"handle tow,bugel lift"},"aerialway/t-bar":{"name":"T-bar Lift","terms":"tbar"},"aeroway/aerodrome":{"name":"Airport","terms":"airplane,airport,aerodrome"},"aeroway/apron":{"name":"Apron","terms":"ramp"},"aeroway/gate":{"name":"Airport Gate","terms":""},"aeroway/hangar":{"name":"Hangar","terms":""},"aeroway/helipad":{"name":"Helipad","terms":"helicopter,helipad,heliport"},"aeroway/runway":{"name":"Runway","terms":"landing strip"},"aeroway/taxiway":{"name":"Taxiway","terms":""},"aeroway/terminal":{"name":"Airport Terminal","terms":"airport,aerodrome"},"amenity/bus_station":{"name":"Bus Station / Terminal","terms":""},"amenity/coworking_space":{"name":"Coworking Space","terms":""},"amenity/ferry_terminal":{"name":"Ferry Station / Terminal","terms":""},"amenity/nursing_home":{"name":"Nursing Home","terms":""},"amenity/register_office":{"name":"Register Office","terms":""},"amenity/scrapyard":{"name":"Scrap Yard","terms":""},"amenity/swimming_pool":{"name":"Swimming Pool","terms":""},"amenity/animal_boarding":{"name":"Animal Boarding Facility","terms":"boarding,cat,cattery,dog,horse,kennel,kitten,pet,pet boarding,pet care,pet hotel,puppy,reptile"},"amenity/animal_breeding":{"name":"Animal Breeding Facility","terms":"breeding,bull,cat,cow,dog,horse,husbandry,kitten,livestock,pet breeding,puppy,reptile"},"amenity/animal_shelter":{"name":"Animal Shelter","terms":"adoption,aspca,cat,dog,horse,kitten,pet care,pet rescue,puppy,raptor,reptile,rescue,spca"},"amenity/arts_centre":{"name":"Arts Center","terms":""},"amenity/atm":{"name":"ATM","terms":"money,cash,machine"},"amenity/bank":{"name":"Bank","terms":"credit union,check,deposit,fund,investment,repository,reserve,safe,savings,stock,treasury,trust,vault"},"amenity/bar":{"name":"Bar","terms":"dive,beer,bier,booze"},"amenity/bbq":{"name":"Barbecue/Grill","terms":"bbq,grill"},"amenity/bench":{"name":"Bench","terms":"seat"},"amenity/bicycle_parking":{"name":"Bicycle Parking","terms":"bike"},"amenity/bicycle_rental":{"name":"Bicycle Rental","terms":"bike"},"amenity/bicycle_repair_station":{"name":"Bicycle Repair Tool Stand","terms":"bike,repair,chain,pump"},"amenity/biergarten":{"name":"Beer Garden","terms":"beer,bier,booze"},"amenity/boat_rental":{"name":"Boat Rental","terms":""},"amenity/bureau_de_change":{"name":"Currency Exchange","terms":"bureau de change,money changer"},"amenity/cafe":{"name":"Cafe","terms":"bistro,coffee,tea"},"amenity/car_pooling":{"name":"Car Pooling","terms":""},"amenity/car_rental":{"name":"Car Rental","terms":""},"amenity/car_sharing":{"name":"Car Sharing","terms":""},"amenity/car_wash":{"name":"Car Wash","terms":""},"amenity/casino":{"name":"Casino","terms":"gambling,roulette,craps,poker,blackjack"},"amenity/charging_station":{"name":"Charging Station","terms":"EV,Electric Vehicle,Supercharger"},"amenity/childcare":{"name":"Nursery/Childcare","terms":"daycare,orphanage,playgroup"},"amenity/cinema":{"name":"Cinema","terms":"drive-in,film,flick,movie,theater,picture,show,screen"},"amenity/clinic":{"name":"Clinic","terms":"medical,urgentcare"},"amenity/clinic/abortion":{"name":"Abortion Clinic","terms":""},"amenity/clinic/fertility":{"name":"Fertility Clinic","terms":"egg,fertility,reproductive,sperm,ovulation"},"amenity/clock":{"name":"Clock","terms":""},"amenity/college":{"name":"College Grounds","terms":"university"},"amenity/community_centre":{"name":"Community Center","terms":"event,hall"},"amenity/compressed_air":{"name":"Compressed Air","terms":""},"amenity/courthouse":{"name":"Courthouse","terms":""},"amenity/crematorium":{"name":"Crematorium","terms":"cemetery,funeral"},"amenity/dentist":{"name":"Dentist","terms":"tooth,teeth"},"amenity/doctors":{"name":"Doctor","terms":"medic*,physician"},"amenity/dojo":{"name":"Dojo / Martial Arts Academy","terms":"martial arts,dojang"},"amenity/drinking_water":{"name":"Drinking Water","terms":"fountain,potable"},"amenity/driving_school":{"name":"Driving School","terms":""},"amenity/embassy":{"name":"Embassy","terms":""},"amenity/fast_food":{"name":"Fast Food","terms":"restaurant,takeaway"},"amenity/fire_station":{"name":"Fire Station","terms":""},"amenity/food_court":{"name":"Food Court","terms":"fast food,restaurant,food"},"amenity/fountain":{"name":"Fountain","terms":""},"amenity/fuel":{"name":"Gas Station","terms":"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/grave_yard":{"name":"Graveyard","terms":""},"amenity/grit_bin":{"name":"Grit Bin","terms":"salt,sand"},"amenity/hospital":{"name":"Hospital Grounds","terms":"clinic,doctor,emergency room,health,infirmary,institution,sanatorium,sanitarium,sick,surgery,ward"},"amenity/hunting_stand":{"name":"Hunting Stand","terms":"game,gun,lookout,rifle,shoot*,wild,watch"},"amenity/ice_cream":{"name":"Ice Cream Shop","terms":"gelato,sorbet,sherbet,frozen,yogurt"},"amenity/internet_cafe":{"name":"Internet Cafe","terms":"cybercafe,taxiphone,teleboutique,coffee,cafe,net,lanhouse"},"amenity/kindergarten":{"name":"Preschool/Kindergarten Grounds","terms":"kindergarden,pre-school"},"amenity/library":{"name":"Library","terms":"book"},"amenity/love_hotel":{"name":"Love Hotel","terms":""},"amenity/marketplace":{"name":"Marketplace","terms":""},"amenity/motorcycle_parking":{"name":"Motorcycle Parking","terms":""},"amenity/music_school":{"name":"Music School","terms":"school of music"},"amenity/nightclub":{"name":"Nightclub","terms":"disco*,night club,dancing,dance club"},"amenity/parking_entrance":{"name":"Parking Garage Entrance/Exit","terms":""},"amenity/parking_space":{"name":"Parking Space","terms":""},"amenity/parking":{"name":"Car Parking","terms":""},"amenity/pavilion":{"name":"Pavilion","terms":""},"amenity/pharmacy":{"name":"Pharmacy","terms":"drug*,med*,prescription"},"amenity/place_of_worship":{"name":"Place of Worship","terms":"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/place_of_worship/buddhist":{"name":"Buddhist Temple","terms":"stupa,vihara,monastery,temple,pagoda,zendo,dojo"},"amenity/place_of_worship/christian":{"name":"Church","terms":"christian,abbey,basilica,bethel,cathedral,chancel,chantry,chapel,fold,house of God,house of prayer,house of worship,minster,mission,oratory,parish,sacellum,sanctuary,shrine,tabernacle,temple"},"amenity/place_of_worship/hindu":{"name":"Hindu Temple","terms":"kovil,devasthana,mandir,kshetram,alayam,shrine,temple"},"amenity/place_of_worship/jewish":{"name":"Synagogue","terms":"jewish"},"amenity/place_of_worship/muslim":{"name":"Mosque","terms":"muslim"},"amenity/place_of_worship/shinto":{"name":"Shinto Shrine","terms":"kami,torii"},"amenity/place_of_worship/sikh":{"name":"Sikh Temple","terms":"gurudwara,temple"},"amenity/place_of_worship/taoist":{"name":"Taoist Temple","terms":"daoist,monastery,temple"},"amenity/planetarium":{"name":"Planetarium","terms":"museum,astronomy,observatory"},"amenity/police":{"name":"Police","terms":"badge,constable,constabulary,cop,detective,fed,law,enforcement,officer,patrol"},"amenity/post_box":{"name":"Mailbox","terms":"letter,post"},"amenity/post_office":{"name":"Post Office","terms":"letter,mail"},"amenity/prison":{"name":"Prison Grounds","terms":"cell,jail"},"amenity/pub":{"name":"Pub","terms":"alcohol,drink,dive,beer,bier,booze"},"amenity/public_bath":{"name":"Public Bath","terms":"onsen,foot bath,hot springs"},"amenity/public_bookcase":{"name":"Public Bookcase","terms":"library,bookcrossing"},"amenity/ranger_station":{"name":"Ranger Station","terms":"visitor center,visitor centre,permit center,permit centre,backcountry office,warden office,warden center"},"amenity/recycling_centre":{"name":"Recycling Center","terms":"bottle,can,dump,glass,garbage,rubbish,scrap,trash"},"amenity/recycling":{"name":"Recycling Container","terms":"bin,can,bottle,glass,garbage,rubbish,scrap,trash"},"amenity/restaurant":{"name":"Restaurant","terms":"bar,breakfast,cafe,café,canteen,coffee,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/sanitary_dump_station":{"name":"RV Toilet Disposal","terms":"Motor Home,Camper,Sanitary,Dump Station,Elsan,CDP,CTDP,Chemical Toilet"},"amenity/school":{"name":"School Grounds","terms":"academy,elementary school,middle school,high school"},"amenity/shelter":{"name":"Shelter","terms":"lean-to,gazebo,picnic"},"amenity/shower":{"name":"Shower","terms":"rain closet"},"amenity/smoking_area":{"name":"Smoking Area","terms":""},"amenity/social_facility":{"name":"Social Facility","terms":""},"amenity/social_facility/food_bank":{"name":"Food Bank","terms":""},"amenity/social_facility/group_home":{"name":"Elderly Group Home","terms":"old,senior,living,care home,assisted living"},"amenity/social_facility/homeless_shelter":{"name":"Homeless Shelter","terms":"houseless,unhoused,displaced"},"amenity/social_facility/nursing_home":{"name":"Nursing Home","terms":"elderly,living,nursing,old,senior,assisted living"},"amenity/studio":{"name":"Studio","terms":"recording,radio,television"},"amenity/taxi":{"name":"Taxi Stand","terms":"cab"},"amenity/telephone":{"name":"Telephone","terms":"phone"},"amenity/theatre":{"name":"Theater","terms":"theatre,performance,play,musical"},"amenity/toilets":{"name":"Toilets","terms":"bathroom,restroom,outhouse,privy,head,lavatory,latrine,water closet,WC,W.C."},"amenity/townhall":{"name":"Town Hall","terms":"village,city,government,courthouse,municipal"},"amenity/university":{"name":"University Grounds","terms":"college"},"amenity/vending_machine":{"name":"Vending Machine","terms":""},"amenity/vending_machine/news_papers":{"name":"Newspaper Vending Machine","terms":"newspaper"},"amenity/vending_machine/cigarettes":{"name":"Cigarette Vending Machine","terms":"cigarette"},"amenity/vending_machine/condoms":{"name":"Condom Vending Machine","terms":"condom"},"amenity/vending_machine/drinks":{"name":"Drink Vending Machine","terms":"drink,soda,beverage,juice,pop"},"amenity/vending_machine/excrement_bags":{"name":"Excrement Bag Vending Machine","terms":"excrement bags,poop,dog,animal"},"amenity/vending_machine/feminine_hygiene":{"name":"Feminine Hygiene Vending Machine","terms":"condom,tampon,pad,woman,women,menstrual hygiene products,personal care"},"amenity/vending_machine/newspapers":{"name":"Newspaper Vending Machine","terms":"newspaper"},"amenity/vending_machine/parcel_pickup_dropoff":{"name":"Parcel Pickup/Dropoff Vending Machine","terms":"parcel,mail,pickup"},"amenity/vending_machine/parking_tickets":{"name":"Parking Ticket Vending Machine","terms":"parking,ticket"},"amenity/vending_machine/public_transport_tickets":{"name":"Transit Ticket Vending Machine","terms":"bus,train,ferry,rail,ticket,transportation"},"amenity/vending_machine/sweets":{"name":"Snack Vending Machine","terms":"candy,gum,chip,pretzel,cookie,cracker"},"amenity/veterinary":{"name":"Veterinary","terms":"pet clinic,veterinarian,animal hospital,pet doctor"},"amenity/waste_basket":{"name":"Waste Basket","terms":"bin,garbage,rubbish,litter,trash"},"amenity/waste_disposal":{"name":"Garbage Dumpster","terms":"garbage,rubbish,litter,trash"},"amenity/waste_transfer_station":{"name":"Waste Transfer Station","terms":"dump,garbage,recycling,rubbish,scrap,trash"},"amenity/waste/dog_excrement":{"name":"Dog Excrement Bin","terms":"bin,garbage,rubbish,litter,trash,poo,dog"},"amenity/water_point":{"name":"RV Drinking Water","terms":""},"amenity/watering_place":{"name":"Animal Watering Place","terms":""},"area":{"name":"Area","terms":""},"area/highway":{"name":"Road Surface","terms":""},"attraction/amusement_ride":{"name":"Amusement Ride","terms":"theme park,carnival ride"},"attraction/animal":{"name":"Animal","terms":"zoo,theme park,animal park,lion,tiger,bear"},"attraction/big_wheel":{"name":"Big Wheel","terms":"ferris wheel,theme park,amusement ride"},"attraction/bumper_car":{"name":"Bumper Car","terms":"theme park,dodgem cars,autoscooter"},"attraction/bungee_jumping":{"name":"Bungee Jumping","terms":"theme park,bungy jumping,jumping platform"},"attraction/carousel":{"name":"Carousel","terms":"theme park,roundabout,merry-go-round,galloper,jumper,horseabout,flying horses"},"attraction/dark_ride":{"name":"Dark Ride","terms":"theme park,ghost train"},"attraction/drop_tower":{"name":"Drop Tower","terms":"theme park,amusement ride,gondola,tower,big drop"},"attraction/pirate_ship":{"name":"Pirate Ship","terms":"theme park,carnival ride,amusement ride"},"attraction/river_rafting":{"name":"River Rafting","terms":"theme park,aquatic park,water park,rafting simulator,river rafting ride,river rapids ride"},"attraction/roller_coaster":{"name":"Roller Coaster","terms":"theme park,amusement ride"},"attraction/train":{"name":"Tourist Train","terms":"theme park,rackless train,road train,Tschu-Tschu train,dotto train,park train"},"attraction/water_slide":{"name":"Water Slide","terms":"theme park,aquatic park,water park,flumes,water chutes,hydroslides"},"barrier":{"name":"Barrier","terms":""},"barrier/entrance":{"name":"Entrance","terms":""},"barrier/block":{"name":"Block","terms":""},"barrier/bollard":{"name":"Bollard","terms":""},"barrier/border_control":{"name":"Border Control","terms":""},"barrier/cattle_grid":{"name":"Cattle Grid","terms":""},"barrier/city_wall":{"name":"City Wall","terms":""},"barrier/cycle_barrier":{"name":"Cycle Barrier","terms":""},"barrier/ditch":{"name":"Trench","terms":""},"barrier/fence":{"name":"Fence","terms":""},"barrier/gate":{"name":"Gate","terms":""},"barrier/hedge":{"name":"Hedge","terms":""},"barrier/kerb":{"name":"Kerb","terms":""},"barrier/kissing_gate":{"name":"Kissing Gate","terms":""},"barrier/lift_gate":{"name":"Lift Gate","terms":""},"barrier/retaining_wall":{"name":"Retaining Wall","terms":""},"barrier/stile":{"name":"Stile","terms":""},"barrier/toll_booth":{"name":"Toll Booth","terms":""},"barrier/wall":{"name":"Wall","terms":""},"boundary/administrative":{"name":"Administrative Boundary","terms":""},"building":{"name":"Building","terms":""},"building/bunker":{"name":"Bunker","terms":""},"building/entrance":{"name":"Entrance/Exit","terms":""},"building/train_station":{"name":"Train Station","terms":""},"building/apartments":{"name":"Apartments","terms":""},"building/barn":{"name":"Barn","terms":""},"building/boathouse":{"name":"Boathouse","terms":""},"building/bungalow":{"name":"Bungalow","terms":"home,detached"},"building/cabin":{"name":"Cabin","terms":""},"building/cathedral":{"name":"Cathedral Building","terms":""},"building/chapel":{"name":"Chapel Building","terms":""},"building/church":{"name":"Church Building","terms":""},"building/civic":{"name":"Civic Building","terms":""},"building/college":{"name":"College Building","terms":"university"},"building/commercial":{"name":"Commercial Building","terms":""},"building/construction":{"name":"Building Under Construction","terms":""},"building/detached":{"name":"Detached House","terms":"home,single,family,residence,dwelling"},"building/dormitory":{"name":"Dormitory","terms":""},"building/farm_auxiliary":{"name":"Farm Building","terms":""},"building/farm":{"name":"Farm House","terms":""},"building/garage":{"name":"Garage","terms":""},"building/garages":{"name":"Garages","terms":""},"building/greenhouse":{"name":"Greenhouse","terms":""},"building/hospital":{"name":"Hospital Building","terms":""},"building/hotel":{"name":"Hotel Building","terms":""},"building/house":{"name":"House","terms":"home,family,residence,dwelling"},"building/hut":{"name":"Hut","terms":""},"building/industrial":{"name":"Industrial Building","terms":""},"building/kindergarten":{"name":"Preschool/Kindergarten Building","terms":"kindergarden,pre-school"},"building/mosque":{"name":"Mosque Building","terms":""},"building/public":{"name":"Public Building","terms":""},"building/residential":{"name":"Residential Building","terms":""},"building/retail":{"name":"Retail Building","terms":""},"building/roof":{"name":"Roof","terms":""},"building/ruins":{"name":"Building Ruins","terms":""},"building/school":{"name":"School Building","terms":"academy,elementary school,middle school,high school"},"building/semidetached_house":{"name":"Semi-Detached House","terms":"home,double,duplex,twin,family,residence,dwelling"},"building/service":{"name":"Service Building","terms":""},"building/shed":{"name":"Shed","terms":""},"building/stable":{"name":"Stable","terms":""},"building/stadium":{"name":"Stadium Building","terms":""},"building/static_caravan":{"name":"Static Mobile Home","terms":""},"building/temple":{"name":"Temple Building","terms":""},"building/terrace":{"name":"Row Houses","terms":"home,terrace,brownstone,family,residence,dwelling"},"building/transportation":{"name":"Transportation Building","terms":""},"building/university":{"name":"University Building","terms":"college"},"building/warehouse":{"name":"Warehouse","terms":""},"camp_site/camp_pitch":{"name":"Camp Pitch","terms":"tent,rv"},"club":{"name":"Club","terms":"social"},"craft":{"name":"Craft","terms":""},"craft/jeweler":{"name":"Jeweler","terms":""},"craft/locksmith":{"name":"Locksmith","terms":""},"craft/optician":{"name":"Optician","terms":""},"craft/tailor":{"name":"Tailor","terms":"clothes,suit"},"craft/basket_maker":{"name":"Basket Maker","terms":""},"craft/beekeeper":{"name":"Beekeeper","terms":""},"craft/blacksmith":{"name":"Blacksmith","terms":""},"craft/boatbuilder":{"name":"Boat Builder","terms":""},"craft/bookbinder":{"name":"Bookbinder","terms":"book repair"},"craft/brewery":{"name":"Brewery","terms":"alcohol,beer,beverage,bier,booze,cider"},"craft/carpenter":{"name":"Carpenter","terms":"woodworker"},"craft/carpet_layer":{"name":"Carpet Layer","terms":""},"craft/caterer":{"name":"Caterer","terms":""},"craft/chimney_sweeper":{"name":"Chimney Sweeper","terms":""},"craft/clockmaker":{"name":"Clockmaker","terms":""},"craft/confectionery":{"name":"Candy Maker","terms":"sweet,candy"},"craft/distillery":{"name":"Distillery","terms":"alcohol,beverage,bourbon,booze,brandy,gin,hooch,liquor,mezcal,moonshine,rum,scotch,spirits,still,tequila,vodka,whiskey,whisky"},"craft/dressmaker":{"name":"Dressmaker","terms":"seamstress"},"craft/electrician":{"name":"Electrician","terms":"power,wire"},"craft/electronics_repair":{"name":"Electronics Repair Shop","terms":""},"craft/gardener":{"name":"Gardener","terms":"landscaper,grounds keeper"},"craft/glaziery":{"name":"Glaziery","terms":"glass,stained-glass,window"},"craft/handicraft":{"name":"Handicraft","terms":""},"craft/hvac":{"name":"HVAC","terms":"heat*,vent*,air conditioning"},"craft/insulator":{"name":"Insulator","terms":""},"craft/key_cutter":{"name":"Key Cutter","terms":""},"craft/metal_construction":{"name":"Metal Construction","terms":""},"craft/painter":{"name":"Painter","terms":""},"craft/photographer":{"name":"Photographer","terms":""},"craft/photographic_laboratory":{"name":"Photographic Laboratory","terms":"film"},"craft/plasterer":{"name":"Plasterer","terms":""},"craft/plumber":{"name":"Plumber","terms":"pipe"},"craft/pottery":{"name":"Pottery","terms":"ceramic"},"craft/rigger":{"name":"Rigger","terms":""},"craft/roofer":{"name":"Roofer","terms":""},"craft/saddler":{"name":"Saddler","terms":""},"craft/sailmaker":{"name":"Sailmaker","terms":""},"craft/sawmill":{"name":"Sawmill","terms":"lumber"},"craft/scaffolder":{"name":"Scaffolder","terms":""},"craft/sculptor":{"name":"Sculptor","terms":""},"craft/shoemaker":{"name":"Shoemaker","terms":"cobbler"},"craft/stonemason":{"name":"Stonemason","terms":"masonry"},"craft/tiler":{"name":"Tiler","terms":""},"craft/tinsmith":{"name":"Tinsmith","terms":""},"craft/upholsterer":{"name":"Upholsterer","terms":""},"craft/watchmaker":{"name":"Watchmaker","terms":""},"craft/window_construction":{"name":"Window Construction","terms":"glass"},"craft/winery":{"name":"Winery","terms":""},"embankment":{"name":"Embankment","terms":""},"emergency/designated":{"name":"Emergency Access Designated","terms":""},"emergency/destination":{"name":"Emergency Access Destination","terms":""},"emergency/no":{"name":"Emergency Access No","terms":""},"emergency/official":{"name":"Emergency Access Official","terms":""},"emergency/private":{"name":"Emergency Access Private","terms":""},"emergency/yes":{"name":"Emergency Access Yes","terms":""},"emergency/ambulance_station":{"name":"Ambulance Station","terms":"EMS,EMT,rescue"},"emergency/defibrillator":{"name":"Defibrillator","terms":"AED"},"emergency/fire_hydrant":{"name":"Fire Hydrant","terms":"fire plug"},"emergency/life_ring":{"name":"Life Ring","terms":"life buoy,kisby ring,kisbie ring,perry buoy"},"emergency/phone":{"name":"Emergency Phone","terms":""},"emergency/water_tank":{"name":"Emergency Water Tank","terms":"water tank,cistern,reservoir"},"entrance":{"name":"Entrance/Exit","terms":""},"footway/crossing-raised":{"name":"Raised Street Crossing","terms":"flat top,hump,speed,slow"},"footway/crossing":{"name":"Street Crossing","terms":""},"footway/crosswalk-raised":{"name":"Raised Pedestrian Crosswalk","terms":"zebra crossing,flat top,hump,speed,slow"},"footway/crosswalk":{"name":"Pedestrian Crosswalk","terms":"zebra crossing"},"footway/sidewalk":{"name":"Sidewalk","terms":""},"ford":{"name":"Ford","terms":""},"golf/bunker":{"name":"Sand Trap","terms":"hazard,bunker"},"golf/fairway":{"name":"Fairway","terms":""},"golf/green":{"name":"Putting Green","terms":""},"golf/hole":{"name":"Golf Hole","terms":""},"golf/lateral_water_hazard_area":{"name":"Lateral Water Hazard","terms":""},"golf/lateral_water_hazard_line":{"name":"Lateral Water Hazard","terms":""},"golf/rough":{"name":"Rough","terms":""},"golf/tee":{"name":"Tee Box","terms":"teeing ground"},"golf/water_hazard_area":{"name":"Water Hazard","terms":""},"golf/water_hazard_line":{"name":"Water Hazard","terms":""},"healthcare":{"name":"Healthcare Facility","terms":"clinic,doctor,disease,health,institution,sick,surgery,wellness"},"healthcare/alternative":{"name":"Alternative Medicine","terms":"acupuncture,anthroposophical,applied kinesiology,aromatherapy,ayurveda,herbalism,homeopathy,hydrotherapy,hypnosis,naturopathy,osteopathy,reflexology,reiki,shiatsu,traditional,tuina,unani"},"healthcare/alternative/chiropractic":{"name":"Chiropractor","terms":"back,pain,spine"},"healthcare/audiologist":{"name":"Audiologist","terms":"ear,hearing,sound"},"healthcare/birthing_center":{"name":"Birthing Center","terms":"baby,childbirth,delivery,labour,labor,pregnancy"},"healthcare/blood_donation":{"name":"Blood Donor Center","terms":"blood bank,blood donation,blood transfusion,apheresis,plasmapheresis,plateletpheresis,stem cell donation"},"healthcare/hospice":{"name":"Hospice","terms":"terminal,illness"},"healthcare/midwife":{"name":"Midwife","terms":"baby,childbirth,delivery,labour,labor,pregnancy"},"healthcare/occupational_therapist":{"name":"Occupational Therapist","terms":"therapist,therapy"},"healthcare/optometrist":{"name":"Optometrist","terms":"eye,glasses,lasik,lenses,vision"},"healthcare/physiotherapist":{"name":"Physiotherapist","terms":"physical,therapist,therapy"},"healthcare/podiatrist":{"name":"Podiatrist","terms":"foot,feet,nails"},"healthcare/psychotherapist":{"name":"Psychotherapist","terms":"anxiety,counselor,depression,mental health,mind,suicide,therapist,therapy"},"healthcare/rehabilitation":{"name":"Rehabilitation Facility","terms":"rehab,therapist,therapy"},"healthcare/speech_therapist":{"name":"Speech Therapist","terms":"speech,therapist,therapy,voice"},"highway/bus_stop":{"name":"Bus Stop / Platform","terms":""},"highway/bridleway":{"name":"Bridle Path","terms":"bridleway,equestrian,horse"},"highway/bus_guideway":{"name":"Bus Guideway","terms":""},"highway/corridor":{"name":"Indoor Corridor","terms":"gallery,hall,hallway,indoor,passage,passageway"},"highway/crossing-raised":{"name":"Raised Street Crossing","terms":"flat top,hump,speed,slow"},"highway/crossing":{"name":"Street Crossing","terms":""},"highway/crosswalk-raised":{"name":"Raised Pedestrian Crosswalk","terms":"zebra crossing,flat top,hump,speed,slow"},"highway/crosswalk":{"name":"Pedestrian Crosswalk","terms":"zebra crossing"},"highway/cycleway":{"name":"Cycle Path","terms":"bike"},"highway/elevator":{"name":"Elevator","terms":"lift"},"highway/footway":{"name":"Foot Path","terms":"hike,hiking,trackway,trail,walk"},"highway/give_way":{"name":"Yield Sign","terms":"give way,yield,sign"},"highway/living_street":{"name":"Living Street","terms":""},"highway/mini_roundabout":{"name":"Mini-Roundabout","terms":""},"highway/motorway_junction":{"name":"Motorway Junction / Exit","terms":""},"highway/motorway_link":{"name":"Motorway Link","terms":"ramp,on ramp,off ramp"},"highway/motorway":{"name":"Motorway","terms":"autobahn,expressway,freeway,highway,interstate,parkway,thruway,turnpike"},"highway/path":{"name":"Path","terms":"hike,hiking,trackway,trail,walk"},"highway/pedestrian_area":{"name":"Pedestrian Area","terms":"center,centre,plaza,quad,square,walkway"},"highway/pedestrian_line":{"name":"Pedestrian Street","terms":"center,centre,plaza,quad,square,walkway"},"highway/primary_link":{"name":"Primary Link","terms":"ramp,on ramp,off ramp"},"highway/primary":{"name":"Primary Road","terms":""},"highway/raceway":{"name":"Racetrack (Motorsport)","terms":"auto*,formula one,kart,motocross,nascar,race*,track"},"highway/residential":{"name":"Residential Road","terms":""},"highway/rest_area":{"name":"Rest Area","terms":"rest stop"},"highway/road":{"name":"Unknown Road","terms":""},"highway/secondary_link":{"name":"Secondary Link","terms":"ramp,on ramp,off ramp"},"highway/secondary":{"name":"Secondary Road","terms":""},"highway/service":{"name":"Service Road","terms":""},"highway/service/alley":{"name":"Alley","terms":""},"highway/service/drive-through":{"name":"Drive-Through","terms":""},"highway/service/driveway":{"name":"Driveway","terms":""},"highway/service/emergency_access":{"name":"Emergency Access","terms":""},"highway/service/parking_aisle":{"name":"Parking Aisle","terms":""},"highway/services":{"name":"Service Area","terms":"services,travel plaza,service station"},"highway/speed_camera":{"name":"Speed Camera","terms":""},"highway/steps":{"name":"Steps","terms":"stairs,staircase"},"highway/stop":{"name":"Stop Sign","terms":"stop,halt,sign"},"highway/street_lamp":{"name":"Street Lamp","terms":"streetlight,street light,lamp,light,gaslight"},"highway/tertiary_link":{"name":"Tertiary Link","terms":"ramp,on ramp,off ramp"},"highway/tertiary":{"name":"Tertiary Road","terms":""},"highway/track":{"name":"Unmaintained Track Road","terms":"woods road,forest road,logging road,fire road,farm road,agricultural road,ranch road,carriage road,primitive,unmaintained,rut,offroad,4wd,4x4,four wheel drive,atv,quad,jeep,double track,two track"},"highway/traffic_mirror":{"name":"Traffic Mirror","terms":"blind spot,convex,corner,curved,roadside,round,safety,sphere,visibility"},"highway/traffic_signals":{"name":"Traffic Signals","terms":"light,stoplight,traffic light"},"highway/trunk_link":{"name":"Trunk Link","terms":"ramp,on ramp,off ramp"},"highway/trunk":{"name":"Trunk Road","terms":""},"highway/turning_circle":{"name":"Turning Circle","terms":"cul-de-sac"},"highway/turning_loop":{"name":"Turning Loop (Island)","terms":"cul-de-sac"},"highway/unclassified":{"name":"Minor/Unclassified Road","terms":""},"historic":{"name":"Historic Site","terms":""},"historic/archaeological_site":{"name":"Archaeological Site","terms":""},"historic/boundary_stone":{"name":"Boundary Stone","terms":""},"historic/castle":{"name":"Castle","terms":""},"historic/memorial":{"name":"Memorial","terms":""},"historic/monument":{"name":"Monument","terms":""},"historic/ruins":{"name":"Ruins","terms":""},"historic/tomb":{"name":"Tomb","terms":""},"historic/wayside_cross":{"name":"Wayside Cross","terms":""},"historic/wayside_shrine":{"name":"Wayside Shrine","terms":""},"junction":{"name":"Junction","terms":""},"landuse":{"name":"Land Use","terms":""},"landuse/farm":{"name":"Farmland","terms":""},"landuse/allotments":{"name":"Community Garden","terms":"allotment,garden"},"landuse/aquaculture":{"name":"Aquaculture","terms":"fish farm,crustacean,algae,aquafarming,shrimp farm,oyster farm,mariculture,algaculture"},"landuse/basin":{"name":"Basin","terms":""},"landuse/brownfield":{"name":"Brownfield","terms":""},"landuse/cemetery":{"name":"Cemetery","terms":""},"landuse/churchyard":{"name":"Churchyard","terms":""},"landuse/commercial":{"name":"Commercial Area","terms":""},"landuse/construction":{"name":"Construction","terms":""},"landuse/farmland":{"name":"Farmland","terms":"crop,grow,plant"},"landuse/farmyard":{"name":"Farmyard","terms":"crop,grow,plant"},"landuse/forest":{"name":"Forest","terms":"tree"},"landuse/garages":{"name":"Garage Landuse","terms":""},"landuse/grass":{"name":"Grass","terms":""},"landuse/greenfield":{"name":"Greenfield","terms":""},"landuse/greenhouse_horticulture":{"name":"Greenhouse Horticulture","terms":"flower,greenhouse,horticulture,grow,vivero"},"landuse/harbour":{"name":"Harbor","terms":"boat"},"landuse/industrial":{"name":"Industrial Area","terms":""},"landuse/industrial/scrap_yard":{"name":"Scrap Yard","terms":"car,junk,metal,salvage,scrap,u-pull-it,vehicle,wreck,yard"},"landuse/industrial/slaughterhouse":{"name":"Slaughterhouse","terms":"abattoir,beef,butchery,calf,chicken,cow,killing house,meat,pig,pork,poultry,shambles,stockyard"},"landuse/landfill":{"name":"Landfill","terms":"dump"},"landuse/meadow":{"name":"Meadow","terms":""},"landuse/military":{"name":"Military Area","terms":""},"landuse/military/airfield":{"name":"Military Airfield","terms":"air force,army,base,bomb,fight,force,guard,heli*,jet,marine,navy,plane,troop,war"},"landuse/military/barracks":{"name":"Barracks","terms":"air force,army,base,fight,force,guard,marine,navy,troop,war"},"landuse/military/bunker":{"name":"Military Bunker","terms":"air force,army,base,fight,force,guard,marine,navy,troop,war"},"landuse/military/checkpoint":{"name":"Checkpoint","terms":"air force,army,base,force,guard,marine,navy,troop,war"},"landuse/military/danger_area":{"name":"Danger Area","terms":"air force,army,base,blast,bomb,explo*,force,guard,mine,marine,navy,troop,war"},"landuse/military/naval_base":{"name":"Naval Base","terms":"base,fight,force,guard,marine,navy,ship,sub,troop,war"},"landuse/military/nuclear_explosion_site":{"name":"Nuclear Explosion Site","terms":"atom,blast,bomb,detonat*,nuke,site,test"},"landuse/military/obstacle_course":{"name":"Obstacle Course","terms":"army,base,force,guard,marine,navy,troop,war"},"landuse/military/office":{"name":"Military Office","terms":"air force,army,base,enlist,fight,force,guard,marine,navy,recruit,troop,war"},"landuse/military/range":{"name":"Military Range","terms":"air force,army,base,fight,fire,force,guard,gun,marine,navy,rifle,shoot*,snip*,train,troop,war"},"landuse/military/training_area":{"name":"Training Area","terms":"air force,army,base,fight,fire,force,guard,gun,marine,navy,rifle,shoot*,snip*,train,troop,war"},"landuse/orchard":{"name":"Orchard","terms":"fruit"},"landuse/plant_nursery":{"name":"Plant Nursery","terms":"flower,garden,grow,vivero"},"landuse/quarry":{"name":"Quarry","terms":""},"landuse/railway":{"name":"Railway Corridor","terms":"rail,train,track"},"landuse/recreation_ground":{"name":"Recreation Ground","terms":"playing fields"},"landuse/religious":{"name":"Religious Area","terms":""},"landuse/residential":{"name":"Residential Area","terms":""},"landuse/retail":{"name":"Retail Area","terms":""},"landuse/vineyard":{"name":"Vineyard","terms":"grape,wine"},"leisure":{"name":"Leisure","terms":""},"leisure/adult_gaming_centre":{"name":"Adult Gaming Center","terms":"gambling,slot machine"},"leisure/amusement_arcade":{"name":"Amusement Arcade","terms":"pay-to-play games,video games,driving simulators,pinball machines"},"leisure/bird_hide":{"name":"Bird Hide","terms":"machan,ornithology"},"leisure/bowling_alley":{"name":"Bowling Alley","terms":"bowling center"},"leisure/common":{"name":"Common","terms":"open space"},"leisure/dance":{"name":"Dance Hall","terms":"ballroom,jive,swing,tango,waltz"},"leisure/dancing_school":{"name":"Dance School","terms":"jive,swing,tango,waltz,dance teaching"},"leisure/dog_park":{"name":"Dog Park","terms":""},"leisure/firepit":{"name":"Firepit","terms":"fireplace,campfire"},"leisure/fitness_centre":{"name":"Gym / Fitness Center","terms":"health,gym,leisure,studio"},"leisure/fitness_centre/yoga":{"name":"Yoga Studio","terms":"studio"},"leisure/fitness_station":{"name":"Outdoor Fitness Station","terms":"exercise,fitness,gym,trim trail"},"leisure/fitness_station/balance_beam":{"name":"Exercise Balance Beam","terms":"balance,exercise,fitness,gym,trim trail"},"leisure/fitness_station/box":{"name":"Exercise Box","terms":"box,exercise,fitness,gym,jump,trim trail"},"leisure/fitness_station/horizontal_bar":{"name":"Exercise Horizontal Bar","terms":"bar,chinup,chin up,exercise,fitness,gym,pullup,pull up,trim trail"},"leisure/fitness_station/horizontal_ladder":{"name":"Exercise Monkey Bars","terms":"bar,chinup,chin up,exercise,fitness,gym,ladder,monkey bars,pullup,pull up,trim trail"},"leisure/fitness_station/hyperextension":{"name":"Hyperextension Station","terms":"back,exercise,extension,fitness,gym,roman chair,trim trail"},"leisure/fitness_station/parallel_bars":{"name":"Parallel Bars","terms":"bar,dip,exercise,fitness,gym,trim trail"},"leisure/fitness_station/push-up":{"name":"Push-Up Station","terms":"bar,exercise,fitness,gym,pushup,push up,trim trail"},"leisure/fitness_station/rings":{"name":"Exercise Rings","terms":"exercise,fitness,gym,muscle up,pullup,pull up,trim trail"},"leisure/fitness_station/sign":{"name":"Exercise Instruction Sign","terms":"exercise,fitness,gym,trim trail"},"leisure/fitness_station/sit-up":{"name":"Sit-Up Station","terms":"crunch,exercise,fitness,gym,situp,sit up,trim trail"},"leisure/fitness_station/stairs":{"name":"Exercise Stairs","terms":"exercise,fitness,gym,steps,trim trail"},"leisure/garden":{"name":"Garden","terms":""},"leisure/golf_course":{"name":"Golf Course","terms":"links"},"leisure/hackerspace":{"name":"Hackerspace","terms":"makerspace,hackspace,hacklab"},"leisure/horse_riding":{"name":"Horseback Riding Facility","terms":"equestrian,stable"},"leisure/ice_rink":{"name":"Ice Rink","terms":"hockey,skating,curling"},"leisure/marina":{"name":"Marina","terms":"boat"},"leisure/miniature_golf":{"name":"Miniature Golf","terms":"crazy golf,mini golf,putt-putt"},"leisure/nature_reserve":{"name":"Nature Reserve","terms":"protected,wildlife"},"leisure/park":{"name":"Park","terms":"esplanade,estate,forest,garden,grass,green,grounds,lawn,lot,meadow,parkland,place,playground,plaza,pleasure garden,recreation area,square,tract,village green,woodland"},"leisure/picnic_table":{"name":"Picnic Table","terms":"bench"},"leisure/pitch":{"name":"Sport Pitch","terms":"field"},"leisure/pitch/american_football":{"name":"American Football Field","terms":""},"leisure/pitch/baseball":{"name":"Baseball Diamond","terms":""},"leisure/pitch/basketball":{"name":"Basketball Court","terms":""},"leisure/pitch/beachvolleyball":{"name":"Beach Volleyball Court","terms":"volleyball"},"leisure/pitch/boules":{"name":"Boules/Bocce Court","terms":"bocce,lyonnaise,pétanque"},"leisure/pitch/bowls":{"name":"Bowling Green","terms":""},"leisure/pitch/cricket":{"name":"Cricket Field","terms":""},"leisure/pitch/equestrian":{"name":"Riding Arena","terms":"dressage,equestrian,horse,horseback,riding"},"leisure/pitch/rugby_league":{"name":"Rugby League Field","terms":""},"leisure/pitch/rugby_union":{"name":"Rugby Union Field","terms":""},"leisure/pitch/skateboard":{"name":"Skate Park","terms":""},"leisure/pitch/soccer":{"name":"Soccer Field","terms":"football"},"leisure/pitch/table_tennis":{"name":"Ping Pong Table","terms":"table tennis,ping pong"},"leisure/pitch/tennis":{"name":"Tennis Court","terms":""},"leisure/pitch/volleyball":{"name":"Volleyball Court","terms":""},"leisure/playground":{"name":"Playground","terms":"jungle gym,play area"},"leisure/resort":{"name":"Resort","terms":""},"leisure/running_track":{"name":"Racetrack (Running)","terms":"race*,running,sprint,track"},"leisure/sauna":{"name":"Sauna","terms":""},"leisure/slipway":{"name":"Slipway","terms":"boat launch,boat ramp"},"leisure/sports_centre":{"name":"Sports Center / Complex","terms":""},"leisure/sports_centre/swimming":{"name":"Swimming Pool Facility","terms":"dive,water"},"leisure/stadium":{"name":"Stadium","terms":""},"leisure/swimming_pool":{"name":"Swimming Pool","terms":"dive,water"},"leisure/track":{"name":"Racetrack (Non-Motorsport)","terms":"cycle,dog,greyhound,horse,race*,track"},"leisure/water_park":{"name":"Water Park","terms":"swim,pool,dive"},"line":{"name":"Line","terms":""},"man_made":{"name":"Man Made","terms":""},"man_made/embankment":{"name":"Embankment","terms":""},"man_made/adit":{"name":"Adit","terms":"entrance,underground,mine,cave"},"man_made/breakwater":{"name":"Breakwater","terms":""},"man_made/bridge":{"name":"Bridge","terms":""},"man_made/chimney":{"name":"Chimney","terms":""},"man_made/crane":{"name":"Crane","terms":""},"man_made/cutline":{"name":"Cut line","terms":""},"man_made/flagpole":{"name":"Flagpole","terms":""},"man_made/gasometer":{"name":"Gasometer","terms":"gas holder"},"man_made/groyne":{"name":"Groyne","terms":""},"man_made/lighthouse":{"name":"Lighthouse","terms":""},"man_made/mast":{"name":"Mast","terms":"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/monitoring_station":{"name":"Monitoring Station","terms":"weather,earthquake,seismology,air,gps"},"man_made/observation":{"name":"Observation Tower","terms":"lookout tower,fire tower"},"man_made/petroleum_well":{"name":"Oil Well","terms":"drilling rig,oil derrick,oil drill,oil horse,oil rig,oil pump,petroleum well,pumpjack"},"man_made/pier":{"name":"Pier","terms":"dock,jetty"},"man_made/pipeline":{"name":"Pipeline","terms":""},"man_made/pumping_station":{"name":"Pumping Station","terms":""},"man_made/silo":{"name":"Silo","terms":"grain,corn,wheat"},"man_made/storage_tank":{"name":"Storage Tank","terms":"water,oil,gas,petrol"},"man_made/surveillance_camera":{"name":"Surveillance Camera","terms":"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/surveillance":{"name":"Surveillance","terms":"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/survey_point":{"name":"Survey Point","terms":"trig point,triangulation pillar,trigonometrical station"},"man_made/tower":{"name":"Tower","terms":""},"man_made/wastewater_plant":{"name":"Wastewater Plant","terms":"sewage*,water treatment plant,reclamation plant"},"man_made/water_tower":{"name":"Water Tower","terms":""},"man_made/water_well":{"name":"Water Well","terms":""},"man_made/water_works":{"name":"Water Works","terms":""},"man_made/watermill":{"name":"Watermill","terms":"water,wheel,mill"},"man_made/windmill":{"name":"Windmill","terms":"wind,wheel,mill"},"man_made/works":{"name":"Factory","terms":"assembly,build,brewery,car,plant,plastic,processing,manufacture,refinery"},"manhole":{"name":"Manhole","terms":"cover,hole,sewer,sewage,telecom"},"manhole/drain":{"name":"Storm Drain","terms":"cover,drain,hole,rain,sewer,sewage,storm"},"manhole/telecom":{"name":"Telecom Manhole","terms":"cover,phone,hole,telecom,telephone,bt"},"natural":{"name":"Natural","terms":""},"natural/bare_rock":{"name":"Bare Rock","terms":"rock"},"natural/bay":{"name":"Bay","terms":""},"natural/beach":{"name":"Beach","terms":"shore"},"natural/cave_entrance":{"name":"Cave Entrance","terms":"cavern,hollow,grotto,shelter,cavity"},"natural/cliff":{"name":"Cliff","terms":"escarpment"},"natural/coastline":{"name":"Coastline","terms":"shore"},"natural/fell":{"name":"Fell","terms":""},"natural/glacier":{"name":"Glacier","terms":""},"natural/grassland":{"name":"Grassland","terms":"prairie,savanna"},"natural/heath":{"name":"Heath","terms":""},"natural/peak":{"name":"Peak","terms":"acme,aiguille,alp,climax,crest,crown,hill,mount,mountain,pinnacle,summit,tip,top"},"natural/ridge":{"name":"Ridge","terms":"crest"},"natural/saddle":{"name":"Saddle","terms":"pass,mountain pass,top"},"natural/sand":{"name":"Sand","terms":"desert"},"natural/scree":{"name":"Scree","terms":"loose rocks"},"natural/scrub":{"name":"Scrub","terms":"bush,shrubs"},"natural/spring":{"name":"Spring","terms":""},"natural/tree_row":{"name":"Tree row","terms":""},"natural/tree":{"name":"Tree","terms":""},"natural/volcano":{"name":"Volcano","terms":"mountain,crater"},"natural/water":{"name":"Water","terms":""},"natural/water/lake":{"name":"Lake","terms":"lakelet,loch,mere"},"natural/water/pond":{"name":"Pond","terms":"lakelet,millpond,tarn,pool,mere"},"natural/water/reservoir":{"name":"Reservoir","terms":""},"natural/wetland":{"name":"Wetland","terms":"bog,marsh,reedbed,swamp,tidalflat"},"natural/wood":{"name":"Wood","terms":"tree"},"noexit/yes":{"name":"No Exit","terms":"no exit,road end,dead end"},"office":{"name":"Office","terms":""},"office/administrative":{"name":"Administrative Office","terms":""},"office/physician":{"name":"Physician","terms":""},"office/travel_agent":{"name":"Travel Agency","terms":""},"office/accountant":{"name":"Accountant Office","terms":""},"office/adoption_agency":{"name":"Adoption Agency","terms":""},"office/advertising_agency":{"name":"Advertising Agency","terms":"ad,ad agency,advert agency,advertising,marketing"},"office/architect":{"name":"Architect Office","terms":""},"office/association":{"name":"Nonprofit Organization Office","terms":"association,non-profit,nonprofit,organization,society"},"office/charity":{"name":"Charity Office","terms":"charitable organization"},"office/company":{"name":"Corporate Office","terms":""},"office/coworking":{"name":"Coworking Space","terms":"coworking,office"},"office/educational_institution":{"name":"Educational Institution","terms":""},"office/employment_agency":{"name":"Employment Agency","terms":"job"},"office/energy_supplier":{"name":"Energy Supplier Office","terms":"electricity,energy company,energy utility,gas utility"},"office/estate_agent":{"name":"Real Estate Office","terms":""},"office/financial":{"name":"Financial Office","terms":""},"office/forestry":{"name":"Forestry Office","terms":"forest,ranger"},"office/foundation":{"name":"Foundation Office","terms":""},"office/government":{"name":"Government Office","terms":""},"office/government/register_office":{"name":"Register Office","terms":"clerk,marriage,death,birth,certificate"},"office/government/tax":{"name":"Tax and Revenue Office","terms":"fiscal authorities,revenue office,tax office"},"office/guide":{"name":"Tour Guide Office","terms":"dive guide,mountain guide,tour guide"},"office/insurance":{"name":"Insurance Office","terms":""},"office/it":{"name":"Information Technology Office","terms":"computer,information,software,technology"},"office/lawyer":{"name":"Law Office","terms":""},"office/lawyer/notary":{"name":"Notary Office","terms":""},"office/moving_company":{"name":"Moving Company Office","terms":"relocation"},"office/newspaper":{"name":"Newspaper Office","terms":""},"office/ngo":{"name":"NGO Office","terms":"ngo,non government,non-government,organization,organisation"},"office/notary":{"name":"Notary Office","terms":"clerk,deeds,estate,signature,wills"},"office/political_party":{"name":"Political Party","terms":""},"office/private_investigator":{"name":"Private Investigator Office","terms":"PI,private eye,private detective"},"office/quango":{"name":"Quasi-NGO Office","terms":"ngo,non government,non-government,organization,organisation,quasi autonomous,quasi-autonomous"},"office/research":{"name":"Research Office","terms":""},"office/surveyor":{"name":"Surveyor Office","terms":""},"office/tax_advisor":{"name":"Tax Advisor Office","terms":"tax,tax consultant"},"office/telecommunication":{"name":"Telecom Office","terms":"communication,internet,phone,voice"},"office/therapist":{"name":"Therapist Office","terms":"therapy"},"office/water_utility":{"name":"Water Utility Office","terms":"water board,utility"},"piste":{"name":"Piste/Ski Trail","terms":"ski,sled,sleigh,snowboard,nordic,downhill,snowmobile"},"place/farm":{"name":"Farm","terms":""},"place/city":{"name":"City","terms":""},"place/hamlet":{"name":"Hamlet","terms":""},"place/island":{"name":"Island","terms":"archipelago,atoll,bar,cay,isle,islet,key,reef"},"place/islet":{"name":"Islet","terms":"archipelago,atoll,bar,cay,isle,islet,key,reef"},"place/isolated_dwelling":{"name":"Isolated Dwelling","terms":""},"place/locality":{"name":"Locality","terms":""},"place/neighbourhood":{"name":"Neighborhood","terms":"neighbourhood"},"place/plot":{"name":"Plot","terms":"tract,land,lot,parcel"},"place/quarter":{"name":"Sub-Borough / Quarter","terms":"boro,borough,quarter"},"place/square":{"name":"Square","terms":""},"place/suburb":{"name":"Borough / Suburb","terms":"boro,borough,quarter"},"place/town":{"name":"Town","terms":""},"place/village":{"name":"Village","terms":""},"playground/balance_beam":{"name":"Play Balance Beam","terms":""},"playground/basket_spinner":{"name":"Basket Spinner","terms":"basket rotator"},"playground/basket_swing":{"name":"Basket Swing","terms":""},"playground/climbing_frame":{"name":"Climbing Frame","terms":""},"playground/cushion":{"name":"Bouncy Cushion","terms":""},"playground/horizontal_bar":{"name":"Play Horizontal Bar","terms":"high bar"},"playground/rocker":{"name":"Spring Rider","terms":"spring rocker,springy rocker"},"playground/roundabout":{"name":"Play Roundabout","terms":"merry-go-round"},"playground/sandpit":{"name":"Sandpit","terms":""},"playground/seesaw":{"name":"Seesaw","terms":""},"playground/slide":{"name":"Slide","terms":""},"playground/structure":{"name":"Play Structure","terms":""},"playground/swing":{"name":"Swing","terms":""},"playground/zipwire":{"name":"Zip Wire","terms":""},"point":{"name":"Point","terms":""},"power/sub_station":{"name":"Substation","terms":""},"power/generator":{"name":"Power Generator","terms":"hydro,solar,turbine,wind"},"power/generator/source_nuclear":{"name":"Nuclear Reactor","terms":"fission,generator,nuclear,nuke,reactor"},"power/generator/source_wind":{"name":"Wind Turbine","terms":"generator,turbine,windmill,wind"},"power/line":{"name":"Power Line","terms":""},"power/minor_line":{"name":"Minor Power Line","terms":""},"power/plant":{"name":"Power Station Grounds","terms":"coal,gas,generat*,hydro,nuclear,power,station"},"power/pole":{"name":"Power Pole","terms":""},"power/substation":{"name":"Substation","terms":""},"power/switch":{"name":"Power Switch","terms":""},"power/tower":{"name":"High-Voltage Tower","terms":""},"power/transformer":{"name":"Transformer","terms":""},"public_transport/linear_platform_aerialway":{"name":"Aerialway Stop / Platform","terms":"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/linear_platform_bus":{"name":"Bus Stop / Platform","terms":"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/linear_platform_ferry":{"name":"Ferry Stop / Platform","terms":"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/linear_platform_light_rail":{"name":"Light Rail Stop / Platform","terms":"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/linear_platform_monorail":{"name":"Monorail Stop / Platform","terms":"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/linear_platform_subway":{"name":"Subway Stop / Platform","terms":"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/linear_platform_train":{"name":"Train Stop / Platform","terms":"platform,public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/linear_platform_tram":{"name":"Tram Stop / Platform","terms":"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/linear_platform_trolleybus":{"name":"Trolleybus Stop / Platform","terms":"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/linear_platform":{"name":"Transit Stop / Platform","terms":"platform,public transit,public transportation,transit,transportation"},"public_transport/platform_aerialway":{"name":"Aerialway Stop / Platform","terms":"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/platform_bus":{"name":"Bus Stop / Platform","terms":"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/platform_ferry":{"name":"Ferry Stop / Platform","terms":"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/platform_light_rail":{"name":"Light Rail Stop / Platform","terms":"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/platform_monorail":{"name":"Monorail Stop / Platform","terms":"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/platform_subway":{"name":"Subway Stop / Platform","terms":"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/platform_train":{"name":"Train Stop / Platform","terms":"platform,public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/platform_tram":{"name":"Tram Stop / Platform","terms":"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/platform_trolleybus":{"name":"Trolleybus Stop / Platform","terms":"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/platform":{"name":"Transit Stop / Platform","terms":"platform,public transit,public transportation,transit,transportation"},"public_transport/station_aerialway":{"name":"Aerialway Station","terms":"aerialway,cable car,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_bus":{"name":"Bus Station / Terminal","terms":"bus,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_ferry":{"name":"Ferry Station / Terminal","terms":"boat,dock,ferry,pier,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_light_rail":{"name":"Light Rail Station","terms":"electric,light rail,public transit,public transportation,rail,station,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_monorail":{"name":"Monorail Station","terms":"monorail,public transit,public transportation,rail,station,terminal,transit,transportation"},"public_transport/station_subway":{"name":"Subway Station","terms":"metro,public transit,public transportation,rail,station,subway,terminal,track,transit,transportation,underground"},"public_transport/station_train_halt":{"name":"Train Station (Halt / Request)","terms":"halt,public transit,public transportation,rail,station,track,train,transit,transportation,whistle stop"},"public_transport/station_train":{"name":"Train Station","terms":"public transit,public transportation,rail,station,terminal,track,train,transit,transportation"},"public_transport/station_tram":{"name":"Tram Station","terms":"electric,light rail,public transit,public transportation,rail,station,streetcar,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_trolleybus":{"name":"Trolleybus Station / Terminal","terms":"bus,electric,public transit,public transportation,station,streetcar,terminal,trackless,tram,trolley,transit,transportation"},"public_transport/station":{"name":"Transit Station","terms":"public transit,public transportation,station,terminal,transit,transportation"},"public_transport/stop_area":{"name":"Transit Stop Area","terms":""},"public_transport/stop_position_aerialway":{"name":"Aerialway Stopping Location","terms":"aerialway,cable car,public transit,public transportation,transit,transportation"},"public_transport/stop_position_bus":{"name":"Bus Stopping Location","terms":"bus,public transit,public transportation,transit,transportation"},"public_transport/stop_position_ferry":{"name":"Ferry Stopping Location","terms":"boat,dock,ferry,pier,public transit,public transportation,transit,transportation"},"public_transport/stop_position_light_rail":{"name":"Light Rail Stopping Location","terms":"electric,light rail,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/stop_position_monorail":{"name":"Monorail Stopping Location","terms":"monorail,public transit,public transportation,rail,transit,transportation"},"public_transport/stop_position_subway":{"name":"Subway Stopping Location","terms":"metro,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/stop_position_train":{"name":"Train Stopping Location","terms":"public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/stop_position_tram":{"name":"Tram Stopping Location","terms":"electric,light rail,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/stop_position_trolleybus":{"name":"Trolleybus Stopping Location","terms":"bus,electric,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/stop_position":{"name":"Transit Stopping Location","terms":"public transit,public transportation,transit,transportation"},"railway/halt":{"name":"Train Station (Halt / Request)","terms":"break,interrupt,rest,wait,interruption"},"railway/platform":{"name":"Train Stop / Platform","terms":""},"railway/station":{"name":"Train Station","terms":"train station,station"},"railway/tram_stop":{"name":"Tram Stopping Position","terms":"light rail,streetcar,tram,trolley"},"railway/abandoned":{"name":"Abandoned Railway","terms":""},"railway/buffer_stop":{"name":"Buffer Stop","terms":"stop,halt,buffer"},"railway/crossing":{"name":"Railway Crossing (Path)","terms":"crossing,pedestrian crossing,railroad crossing,level crossing,grade crossing,path through railroad,train crossing"},"railway/derail":{"name":"Railway Derailer","terms":"derailer"},"railway/disused":{"name":"Disused Railway","terms":""},"railway/funicular":{"name":"Funicular","terms":"venicular,cliff railway,cable car,cable railway,funicular railway"},"railway/level_crossing":{"name":"Railway Crossing (Road)","terms":"crossing,railroad crossing,level crossing,grade crossing,road through railroad,train crossing"},"railway/light_rail":{"name":"Light Rail","terms":"light rail,streetcar,trolley"},"railway/milestone":{"name":"Railway Milestone","terms":"milestone,marker"},"railway/miniature":{"name":"Miniature Railway","terms":"rideable miniature railway,narrow gauge railway,minimum gauge railway"},"railway/monorail":{"name":"Monorail","terms":""},"railway/narrow_gauge":{"name":"Narrow Gauge Rail","terms":"narrow gauge railway,narrow gauge railroad"},"railway/rail":{"name":"Rail","terms":""},"railway/signal":{"name":"Railway Signal","terms":"signal,lights"},"railway/subway_entrance":{"name":"Subway Entrance","terms":"metro,transit"},"railway/subway":{"name":"Subway","terms":"metro,transit"},"railway/switch":{"name":"Railway Switch","terms":"switch,points"},"railway/train_wash":{"name":"Train Wash","terms":"wash,clean"},"railway/tram":{"name":"Tram","terms":"light rail,streetcar,tram,trolley"},"relation":{"name":"Relation","terms":""},"route/ferry":{"name":"Ferry Route","terms":""},"shop":{"name":"Shop","terms":""},"shop/fishmonger":{"name":"Fishmonger","terms":""},"shop/furnace":{"name":"Furnace Store","terms":"oven,stove"},"shop/vacant":{"name":"Vacant Shop","terms":""},"shop/agrarian":{"name":"Farm Supply Shop","terms":"agricultural inputs,agricultural machines,seeds,pesticides,fertilizer,agricultural tools"},"shop/alcohol":{"name":"Liquor Store","terms":"alcohol,beer,booze,wine"},"shop/anime":{"name":"Anime Shop","terms":"manga,japan,cosplay,figurine,dakimakura"},"shop/antiques":{"name":"Antiques Shop","terms":""},"shop/appliance":{"name":"Appliance Store","terms":"air conditioner,appliance,dishwasher,dryer,freezer,fridge,grill,kitchen,oven,refrigerator,stove,washer,washing machine"},"shop/art":{"name":"Art Store","terms":"art*,exhibit*,gallery"},"shop/baby_goods":{"name":"Baby Goods Store","terms":""},"shop/bag":{"name":"Bag/Luggage Store","terms":"handbag,purse"},"shop/bakery":{"name":"Bakery","terms":""},"shop/bathroom_furnishing":{"name":"Bathroom Furnishing Store","terms":""},"shop/beauty":{"name":"Beauty Shop","terms":"spa,salon,tanning"},"shop/beauty/nails":{"name":"Nail Salon","terms":"manicure,pedicure"},"shop/beauty/tanning":{"name":"Tanning Salon","terms":""},"shop/bed":{"name":"Bedding/Mattress Store","terms":""},"shop/beverages":{"name":"Beverage Store","terms":""},"shop/bicycle":{"name":"Bicycle Shop","terms":"bike,repair"},"shop/bookmaker":{"name":"Bookmaker","terms":"betting"},"shop/books":{"name":"Book Store","terms":""},"shop/boutique":{"name":"Boutique","terms":""},"shop/butcher":{"name":"Butcher","terms":"meat"},"shop/candles":{"name":"Candle Shop","terms":""},"shop/car_parts":{"name":"Car Parts Store","terms":"auto"},"shop/car_repair":{"name":"Car Repair Shop","terms":"auto,garage,service"},"shop/car":{"name":"Car Dealership","terms":"auto"},"shop/carpet":{"name":"Carpet Store","terms":"rug"},"shop/charity":{"name":"Charity Store","terms":"thrift,op shop,nonprofit"},"shop/cheese":{"name":"Cheese Store","terms":""},"shop/chemist":{"name":"Drugstore","terms":"med*,drug*,gift"},"shop/chocolate":{"name":"Chocolate Store","terms":""},"shop/clothes":{"name":"Clothing Store","terms":""},"shop/coffee":{"name":"Coffee Store","terms":""},"shop/computer":{"name":"Computer Store","terms":""},"shop/confectionery":{"name":"Candy Store","terms":"sweet"},"shop/convenience":{"name":"Convenience Store","terms":""},"shop/copyshop":{"name":"Copy Store","terms":""},"shop/cosmetics":{"name":"Cosmetics Store","terms":""},"shop/craft":{"name":"Arts and Crafts Store","terms":"art*,paint*,frame"},"shop/curtain":{"name":"Curtain Store","terms":"drape*,window"},"shop/dairy":{"name":"Dairy Store","terms":"milk,egg,cheese"},"shop/deli":{"name":"Deli","terms":"lunch,meat,sandwich"},"shop/department_store":{"name":"Department Store","terms":""},"shop/doityourself":{"name":"DIY Store","terms":""},"shop/dry_cleaning":{"name":"Dry Cleaner","terms":""},"shop/e-cigarette":{"name":"E-Cigarette Shop","terms":"electronic,vapor"},"shop/electronics":{"name":"Electronics Store","terms":"appliance,audio,blueray,camera,computer,dvd,home theater,radio,speaker,tv,video"},"shop/erotic":{"name":"Erotic Store","terms":"sex,porn"},"shop/fabric":{"name":"Fabric Store","terms":"sew"},"shop/farm":{"name":"Produce Stand","terms":"farm shop,farm stand"},"shop/fashion":{"name":"Fashion Store","terms":""},"shop/florist":{"name":"Florist","terms":"flower"},"shop/frame":{"name":"Framing Shop","terms":"art*,paint*,photo*,frame"},"shop/funeral_directors":{"name":"Funeral Home","terms":"undertaker,memorial home"},"shop/furniture":{"name":"Furniture Store","terms":"chair,sofa,table"},"shop/garden_centre":{"name":"Garden Center","terms":"landscape,mulch,shrub,tree"},"shop/gas":{"name":"Bottled Gas Shop","terms":"cng,lpg,natural gas,propane,refill,tank"},"shop/gift":{"name":"Gift Shop","terms":"souvenir"},"shop/greengrocer":{"name":"Greengrocer","terms":"fruit,vegetable"},"shop/hairdresser":{"name":"Hairdresser","terms":"barber"},"shop/hardware":{"name":"Hardware Store","terms":""},"shop/health_food":{"name":"Health Food Shop","terms":"wholefood,vitamins,vegetarian,vegan"},"shop/hearing_aids":{"name":"Hearing Aids Store","terms":""},"shop/herbalist":{"name":"Herbalist","terms":""},"shop/hifi":{"name":"Hifi Store","terms":"stereo,video"},"shop/houseware":{"name":"Houseware Store","terms":"home,household"},"shop/interior_decoration":{"name":"Interior Decoration Store","terms":""},"shop/jewelry":{"name":"Jeweler","terms":"diamond,gem,ring"},"shop/kiosk":{"name":"Kiosk","terms":""},"shop/kitchen":{"name":"Kitchen Design Store","terms":""},"shop/laundry":{"name":"Laundry","terms":""},"shop/leather":{"name":"Leather Store","terms":""},"shop/locksmith":{"name":"Locksmith","terms":"key,lockpick"},"shop/lottery":{"name":"Lottery Shop","terms":""},"shop/mall":{"name":"Mall","terms":"shopping"},"shop/massage":{"name":"Massage Shop","terms":""},"shop/medical_supply":{"name":"Medical Supply Store","terms":""},"shop/mobile_phone":{"name":"Mobile Phone Store","terms":""},"shop/money_lender":{"name":"Money Lender","terms":""},"shop/motorcycle":{"name":"Motorcycle Dealership","terms":"bike"},"shop/music":{"name":"Music Store","terms":"CD,vinyl"},"shop/musical_instrument":{"name":"Musical Instrument Store","terms":"guitar"},"shop/newsagent":{"name":"Newspaper/Magazine Shop","terms":""},"shop/nutrition_supplements":{"name":"Nutrition Supplements Store","terms":""},"shop/optician":{"name":"Optician","terms":"eye,glasses"},"shop/organic":{"name":"Organic Goods Store","terms":""},"shop/outdoor":{"name":"Outdoors Store","terms":"camping,climbing,hiking"},"shop/paint":{"name":"Paint Store","terms":""},"shop/pastry":{"name":"Pastry Shop","terms":"patisserie,cake shop,cakery"},"shop/pawnbroker":{"name":"Pawn Shop","terms":""},"shop/perfumery":{"name":"Perfume Store","terms":""},"shop/pet":{"name":"Pet Store","terms":"animal,cat,dog,fish,kitten,puppy,reptile"},"shop/photo":{"name":"Photography Store","terms":"camera,film"},"shop/pyrotechnics":{"name":"Fireworks Store","terms":""},"shop/radiotechnics":{"name":"Radio/Electronic Component Store","terms":""},"shop/religion":{"name":"Religious Store","terms":""},"shop/scuba_diving":{"name":"Scuba Diving Shop","terms":""},"shop/seafood":{"name":"Seafood Shop","terms":"fishmonger"},"shop/second_hand":{"name":"Consignment/Thrift Store","terms":"secondhand,second hand,resale,thrift,used"},"shop/shoes":{"name":"Shoe Store","terms":""},"shop/sports":{"name":"Sporting Goods Store","terms":""},"shop/stationery":{"name":"Stationery Store","terms":"card,paper"},"shop/storage_rental":{"name":"Storage Rental","terms":""},"shop/supermarket":{"name":"Supermarket","terms":"grocery,store,shop"},"shop/tailor":{"name":"Tailor","terms":"clothes,suit"},"shop/tattoo":{"name":"Tattoo Parlor","terms":""},"shop/tea":{"name":"Tea Store","terms":""},"shop/ticket":{"name":"Ticket Seller","terms":""},"shop/tiles":{"name":"Tile Shop","terms":""},"shop/tobacco":{"name":"Tobacco Shop","terms":""},"shop/toys":{"name":"Toy Store","terms":""},"shop/trade":{"name":"Trade Shop","terms":""},"shop/travel_agency":{"name":"Travel Agency","terms":""},"shop/tyres":{"name":"Tire Store","terms":""},"shop/vacuum_cleaner":{"name":"Vacuum Cleaner Store","terms":""},"shop/variety_store":{"name":"Variety Store","terms":""},"shop/video_games":{"name":"Video Game Store","terms":""},"shop/video":{"name":"Video Store","terms":"DVD"},"shop/watches":{"name":"Watches Shop","terms":""},"shop/water_sports":{"name":"Watersport/Swim Shop","terms":""},"shop/weapons":{"name":"Weapon Shop","terms":"ammo,gun,knife,knives"},"shop/wholesale":{"name":"Wholesale Store","terms":"warehouse club,cash and carry"},"shop/window_blind":{"name":"Window Blind Store","terms":""},"shop/wine":{"name":"Wine Shop","terms":""},"tourism":{"name":"Tourism","terms":""},"tourism/alpine_hut":{"name":"Alpine Hut","terms":"climbing hut"},"tourism/apartment":{"name":"Guest Apartment / Condo","terms":""},"tourism/aquarium":{"name":"Aquarium","terms":"fish,sea,water"},"tourism/artwork":{"name":"Artwork","terms":"mural,sculpture,statue"},"tourism/attraction":{"name":"Tourist Attraction","terms":""},"tourism/camp_site":{"name":"Campground","terms":"tent,rv"},"tourism/caravan_site":{"name":"RV Park","terms":"Motor Home,Camper"},"tourism/chalet":{"name":"Holiday Cottage","terms":"holiday,holiday cottage,holiday home,vacation,vacation home"},"tourism/gallery":{"name":"Art Gallery","terms":"art*,exhibit*,paint*,photo*,sculpt*"},"tourism/guest_house":{"name":"Guest House","terms":"B&B,Bed and Breakfast"},"tourism/hostel":{"name":"Hostel","terms":""},"tourism/hotel":{"name":"Hotel","terms":""},"tourism/information":{"name":"Information","terms":""},"tourism/information/board":{"name":"Information Board","terms":""},"tourism/information/guidepost":{"name":"Guidepost","terms":"signpost"},"tourism/information/map":{"name":"Map","terms":""},"tourism/information/office":{"name":"Tourist Information Office","terms":""},"tourism/motel":{"name":"Motel","terms":""},"tourism/museum":{"name":"Museum","terms":"art*,exhibit*,gallery,foundation,hall,institution,paint*,photo*,sculpt*"},"tourism/picnic_site":{"name":"Picnic Site","terms":"camp"},"tourism/theme_park":{"name":"Theme Park","terms":""},"tourism/viewpoint":{"name":"Viewpoint","terms":""},"tourism/wilderness_hut":{"name":"Wilderness Hut","terms":"wilderness hut,backcountry hut,bothy"},"tourism/zoo":{"name":"Zoo","terms":"animal"},"traffic_calming":{"name":"Traffic Calming","terms":"bump,hump,slow,speed"},"traffic_calming/bump":{"name":"Speed Bump","terms":"hump,speed,slow"},"traffic_calming/chicane":{"name":"Traffic Chicane","terms":"driveway link,speed,slow"},"traffic_calming/choker":{"name":"Traffic Choker","terms":"speed,slow"},"traffic_calming/cushion":{"name":"Speed Cushion","terms":"bump,hump,speed,slow"},"traffic_calming/dip":{"name":"Dip","terms":"speed,slow"},"traffic_calming/hump":{"name":"Speed Hump","terms":"bump,speed,slow"},"traffic_calming/island":{"name":"Traffic Island","terms":"circle,roundabout,slow"},"traffic_calming/rumble_strip":{"name":"Rumble Strip","terms":"audible lines,sleeper lines,growlers"},"traffic_calming/table":{"name":"Speed Table","terms":"flat top,hump,speed,slow"},"type/multipolygon":{"name":"Multipolygon","terms":""},"type/boundary":{"name":"Boundary","terms":""},"type/boundary/administrative":{"name":"Administrative Boundary","terms":""},"type/restriction":{"name":"Restriction","terms":""},"type/restriction/no_left_turn":{"name":"No Left Turn","terms":""},"type/restriction/no_right_turn":{"name":"No Right Turn","terms":""},"type/restriction/no_straight_on":{"name":"No Straight On","terms":""},"type/restriction/no_u_turn":{"name":"No U-turn","terms":""},"type/restriction/only_left_turn":{"name":"Left Turn Only","terms":""},"type/restriction/only_right_turn":{"name":"Right Turn Only","terms":""},"type/restriction/only_straight_on":{"name":"No Turns","terms":""},"type/route_master":{"name":"Route Master","terms":""},"type/route":{"name":"Route","terms":""},"type/route/bicycle":{"name":"Cycle Route","terms":""},"type/route/bus":{"name":"Bus Route","terms":""},"type/route/detour":{"name":"Detour Route","terms":""},"type/route/ferry":{"name":"Ferry Route","terms":""},"type/route/foot":{"name":"Foot Route","terms":""},"type/route/hiking":{"name":"Hiking Route","terms":""},"type/route/horse":{"name":"Riding Route","terms":""},"type/route/light_rail":{"name":"Light Rail Route","terms":""},"type/route/pipeline":{"name":"Pipeline Route","terms":""},"type/route/piste":{"name":"Piste/Ski Route","terms":""},"type/route/power":{"name":"Power Route","terms":""},"type/route/road":{"name":"Road Route","terms":""},"type/route/subway":{"name":"Subway Route","terms":""},"type/route/train":{"name":"Train Route","terms":""},"type/route/tram":{"name":"Tram Route","terms":""},"type/site":{"name":"Site","terms":""},"type/waterway":{"name":"Waterway","terms":""},"vertex":{"name":"Other","terms":""},"waterway/boatyard":{"name":"Boatyard","terms":""},"waterway/canal":{"name":"Canal","terms":""},"waterway/dam":{"name":"Dam","terms":""},"waterway/ditch":{"name":"Ditch","terms":""},"waterway/dock":{"name":"Wet Dock / Dry Dock","terms":"boat,ship,vessel,marine"},"waterway/drain":{"name":"Drain","terms":""},"waterway/fuel":{"name":"Marine Fuel Station","terms":"petrol,gas,diesel,boat"},"waterway/river":{"name":"River","terms":"beck,branch,brook,course,creek,estuary,rill,rivulet,run,runnel,stream,tributary,watercourse"},"waterway/riverbank":{"name":"Riverbank","terms":""},"waterway/sanitary_dump_station":{"name":"Marine Toilet Disposal","terms":"Boat,Watercraft,Sanitary,Dump Station,Pumpout,Pump out,Elsan,CDP,CTDP,Chemical Toilet"},"waterway/stream_intermittent":{"name":"Intermittent Stream","terms":"arroyo,beck,branch,brook,burn,course,creek,drift,flood,flow,gully,run,runnel,rush,spate,spritz,tributary,wadi,wash,watercourse"},"waterway/stream":{"name":"Stream","terms":"beck,branch,brook,burn,course,creek,current,drift,flood,flow,freshet,race,rill,rindle,rivulet,run,runnel,rush,spate,spritz,surge,tide,torrent,tributary,watercourse"},"waterway/water_point":{"name":"Marine Drinking Water","terms":""},"waterway/waterfall":{"name":"Waterfall","terms":"fall"},"waterway/weir":{"name":"Weir","terms":""}}},"imagery":{"Bing":{"description":"Satellite and aerial imagery.","name":"Bing aerial imagery"},"DigitalGlobe-Premium":{"attribution":{"text":"Terms & Feedback"},"description":"Premium DigitalGlobe satellite imagery.","name":"DigitalGlobe Premium Imagery"},"DigitalGlobe-Premium-vintage":{"attribution":{"text":"Terms & Feedback"},"description":"Imagery boundaries and capture dates. Labels appear at zoom level 14 and higher.","name":"DigitalGlobe Premium Imagery Vintage"},"DigitalGlobe-Standard":{"attribution":{"text":"Terms & Feedback"},"description":"Standard DigitalGlobe satellite imagery.","name":"DigitalGlobe Standard Imagery"},"DigitalGlobe-Standard-vintage":{"attribution":{"text":"Terms & Feedback"},"description":"Imagery boundaries and capture dates. Labels appear at zoom level 14 and higher.","name":"DigitalGlobe Standard Imagery Vintage"},"EsriWorldImagery":{"attribution":{"text":"Terms & Feedback"},"description":"Esri world imagery.","name":"Esri World Imagery"},"EsriWorldImageryClarity":{"attribution":{"text":"Terms & Feedback"},"description":"Esri archive imagery that may be clearer and more accurate than the default layer.","name":"Esri World Imagery (Clarity) Beta"},"MAPNIK":{"attribution":{"text":"© OpenStreetMap contributors, CC-BY-SA"},"description":"The default OpenStreetMap layer.","name":"OpenStreetMap (Standard)"},"Mapbox":{"attribution":{"text":"Terms & Feedback"},"description":"Satellite and aerial imagery.","name":"Mapbox Satellite"},"OSM_Inspector-Addresses":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Addresses"},"OSM_Inspector-Geometry":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Geometry"},"OSM_Inspector-Highways":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Highways"},"OSM_Inspector-Multipolygon":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Area"},"OSM_Inspector-Places":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Places"},"OSM_Inspector-Routing":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Routing"},"OSM_Inspector-Tagging":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Tagging"},"US-TIGER-Roads-2012":{"name":"TIGER Roads 2012"},"US-TIGER-Roads-2014":{"description":"At zoom level 16+, public domain map data from the US Census. At lower zooms, only changes since 2006 minus changes already incorporated into OpenStreetMap","name":"TIGER Roads 2014"},"US-TIGER-Roads-2017":{"description":"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap","name":"TIGER Roads 2017"},"Waymarked_Trails-Cycling":{"attribution":{"text":"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},"name":"Waymarked Trails: Cycling"},"Waymarked_Trails-Hiking":{"attribution":{"text":"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},"name":"Waymarked Trails: Hiking"},"Waymarked_Trails-MTB":{"attribution":{"text":"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},"name":"Waymarked Trails: MTB"},"Waymarked_Trails-Skating":{"attribution":{"text":"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},"name":"Waymarked Trails: Skating"},"Waymarked_Trails-Winter_Sports":{"attribution":{"text":"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},"name":"Waymarked Trails: Winter Sports"},"basemap.at":{"attribution":{"text":"basemap.at"},"description":"Basemap of Austria, based on goverment data.","name":"basemap.at"},"basemap.at-orthofoto":{"attribution":{"text":"basemap.at"},"description":"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.","name":"basemap.at Orthofoto"},"hike_n_bike":{"attribution":{"text":"© OpenStreetMap contributors"},"name":"Hike & Bike"},"mapbox_locator_overlay":{"attribution":{"text":"Terms & Feedback"},"description":"Shows major features to help orient you.","name":"Locator Overlay"},"openpt_map":{"attribution":{"text":"© OpenStreetMap contributors, CC-BY-SA"},"name":"OpenPT Map (overlay)"},"osm-gps":{"attribution":{"text":"© OpenStreetMap contributors"},"description":"Public GPS traces uploaded to OpenStreetMap.","name":"OpenStreetMap GPS traces"},"osm-mapnik-black_and_white":{"attribution":{"text":"© OpenStreetMap contributors, CC-BY-SA"},"name":"OpenStreetMap (Standard Black & White)"},"osm-mapnik-german_style":{"attribution":{"text":"© OpenStreetMap contributors, CC-BY-SA"},"name":"OpenStreetMap (German Style)"},"qa_no_address":{"attribution":{"text":"Simon Poole, Data ©OpenStreetMap contributors"},"name":"QA No Address"},"skobbler":{"attribution":{"text":"© Tiles: skobbler Map data: OpenStreetMap contributors"},"name":"skobbler"},"stamen-terrain-background":{"attribution":{"text":"Map tiles by Stamen Design, under CC BY 3.0"},"name":"Stamen Terrain"},"tf-cycle":{"attribution":{"text":"Maps © Thunderforest, Data © OpenStreetMap contributors"},"name":"Thunderforest OpenCycleMap"},"tf-landscape":{"attribution":{"text":"Maps © Thunderforest, Data © OpenStreetMap contributors"},"name":"Thunderforest Landscape"}}}; - -var dataImagery = [{"id":"sjcgis.org-Aerials_2013_WM","name":"2013 aerial imagery for San Juan County WA","type":"tms","template":"http://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2013_WM/MapServer/tile/{zoom}/{y}/{x}","endDate":"2013-06-01T00:00:00.000Z","startDate":"2013-05-01T00:00:00.000Z","scaleExtent":[0,19],"polygon":[[[-123.02167396992,48.44667085335],[-122.9466579482,48.44780949945],[-122.90151100606,48.41306930778],[-122.80263405293,48.40771378918],[-122.79199104756,48.44279926564],[-122.8088138625,48.47865708877],[-122.73911934346,48.49572334021],[-122.78546791524,48.62160819278],[-122.73087959737,48.6361306644],[-122.75559883565,48.71207854113],[-122.95747261494,48.71592956034],[-122.97086220235,48.695765074],[-122.99970131367,48.69780454658],[-123.00347786397,48.73427448605],[-123.04330330342,48.74310484148],[-123.0762622878,48.70528190578],[-123.08484535664,48.66334903433],[-123.12844734639,48.66380254936],[-123.22698097676,48.70301615666],[-123.24655037373,48.68352650341],[-123.17445259541,48.64701977542],[-123.21513634175,48.60106537642],[-123.21393471211,48.57335906966],[-123.18080406636,48.56574853208],[-123.16621284932,48.52006125122],[-123.10235481709,48.47683634964],[-123.02167396992,48.44667085335]],[[-122.98339348286,48.78214357977],[-122.93498497456,48.76653172572],[-122.91181068867,48.73857664785],[-122.80229073018,48.73982194177],[-122.81945686787,48.75498940888],[-122.93429832906,48.79571515892],[-122.98373680562,48.79435816618],[-122.98339348286,48.78214357977]]],"terms_url":"https://www.arcgis.com/home/item.html?id=7bf69831861d438d8365cf9f46662523","terms_text":"Pictometry Inc, San Juan County GIS","description":"Public domain aerial imagery taken in May/June 2013 from San Juan County, WA. Resolution is 9 inch."},{"id":"sjcgis.org-Aerials_2016_WM","name":"2016 aerial imagery for San Juan County WA","type":"tms","template":"http://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2016_WM/MapServer/tile/{zoom}/{y}/{x}","endDate":"2016-07-01T00:00:00.000Z","startDate":"2016-05-01T00:00:00.000Z","scaleExtent":[0,19],"polygon":[[[-123.02167396992,48.44667085335],[-122.9466579482,48.44780949945],[-122.90151100606,48.41306930778],[-122.80263405293,48.40771378918],[-122.79199104756,48.44279926564],[-122.8088138625,48.47865708877],[-122.73911934346,48.49572334021],[-122.78546791524,48.62160819278],[-122.73087959737,48.6361306644],[-122.75559883565,48.71207854113],[-122.95747261494,48.71592956034],[-122.97086220235,48.695765074],[-122.99970131367,48.69780454658],[-123.00347786397,48.73427448605],[-123.04330330342,48.74310484148],[-123.0762622878,48.70528190578],[-123.08484535664,48.66334903433],[-123.12844734639,48.66380254936],[-123.22698097676,48.70301615666],[-123.24655037373,48.68352650341],[-123.17445259541,48.64701977542],[-123.21513634175,48.60106537642],[-123.21393471211,48.57335906966],[-123.18080406636,48.56574853208],[-123.16621284932,48.52006125122],[-123.10235481709,48.47683634964],[-123.02167396992,48.44667085335]],[[-122.98339348286,48.78214357977],[-122.93498497456,48.76653172572],[-122.91181068867,48.73857664785],[-122.80229073018,48.73982194177],[-122.81945686787,48.75498940888],[-122.93429832906,48.79571515892],[-122.98373680562,48.79435816618],[-122.98339348286,48.78214357977]]],"best":true,"description":"Public domain aerial imagery taken in May, June, and July from San Juan County, WA. Resolution is 6 inch countywide."},{"id":"OS7","name":"7th Series (OS7)","type":"tms","template":"https://ooc.openstreetmap.org/os7/{zoom}/{x}/{y}.jpg","polygon":[[[-3.046968,54.839473],[-3.058641,55.2415704],[-4.0446639,55.2329572],[-4.0707564,55.6365416],[-4.6190429,55.6253005],[-4.6492553,56.0283381],[-4.4896102,56.0321747],[-4.5239425,56.4367031],[-3.8675094,56.4458128],[-3.8417602,56.049435],[-3.445909,56.0498185],[-3.4349227,55.6442923],[-2.7949691,55.6504917],[-2.8080153,56.0574872],[-3.2066131,56.0532696],[-3.2141662,56.4568175],[-3.7380767,56.4507463],[-3.7418532,56.8617541],[-5.0766921,56.8317131],[-5.0365233,56.4294897],[-5.1601195,56.4249331],[-5.1299071,56.0179772],[-5.9260726,55.994559],[-5.8551764,55.2333487],[-5.2280974,55.2513559],[-5.2102447,55.027647],[-4.659555,55.0418131],[-4.6454787,54.8163344],[-3.046968,54.839473]],[[-1.7483497,57.7642809],[-1.7406468,57.3599979],[-2.5802193,57.3553698],[-2.5743689,57.0452643],[-2.0840782,57.0479899],[-2.0765057,56.6427564],[-2.734497,56.6390587],[-2.737815,56.8171751],[-3.2388513,56.8143725],[-3.2489563,57.351683],[-3.7562947,57.3488858],[-3.7621877,57.6586785],[-4.7658688,57.6447324],[-4.810078,58.2698422],[-5.2511001,58.2654711],[-5.2737594,58.6676722],[-3.5581778,58.6988712],[-3.566072,58.9316035],[-3.3765578,58.9344382],[-3.3858372,59.2017095],[-3.187134,59.2021481],[-3.1874677,59.2417623],[-3.0675673,59.2420266],[-3.0785537,59.4213467],[-2.3713088,59.4276337],[-2.3685622,59.0221982],[-2.678926,59.0207845],[-2.6734328,58.8393493],[-2.8656936,58.8365068],[-2.8602004,58.5353109],[-3.0346084,58.5331604],[-3.0195022,58.1315879],[-3.6155983,58.1198177],[-3.6127639,57.9775439],[-3.7109154,57.9756153],[-3.699316,57.7536442],[-1.7483497,57.7642809]],[[-7.0749164,56.7631857],[-7.7347099,56.7356573],[-7.7911007,57.1399384],[-7.7066243,57.1434261],[-7.7629881,57.5431114],[-7.6021787,57.5496778],[-7.6213373,57.6845215],[-7.724988,57.6803049],[-7.7301746,57.7167278],[-7.6026437,57.7219106],[-7.5996413,57.7008338],[-7.4863439,57.7054402],[-7.49528,57.7681282],[-7.3749316,57.7730121],[-7.3933722,57.9020139],[-7.2359063,57.9083804],[-7.2432312,57.9594843],[-7.1391571,57.9636854],[-7.1450794,58.0049464],[-7.2374247,58.001223],[-7.2329687,57.9701789],[-7.3113276,57.9670164],[-7.3153794,57.9952475],[-7.2490415,57.9979228],[-7.2808211,58.218564],[-7.0735459,58.2268701],[-7.0827038,58.2901845],[-6.807432,58.3011927],[-6.8276802,58.4407359],[-6.5030498,58.4536624],[-6.5153194,58.5379206],[-6.1647379,58.5518417],[-6.1063084,58.1489361],[-6.3346892,58.139764],[-6.2775862,57.7414459],[-6.9613783,57.7136632],[-6.9333168,57.5161471],[-7.100168,57.5093277],[-7.0521806,57.169002],[-7.1311072,57.1657457],[-7.0749164,56.7631857]],[[0.4107642,50.8208689],[0.9810233,50.8061178],[0.9943731,51.0117337],[1.4506241,50.9999804],[1.4771216,51.4055151],[0.8961869,51.4203486],[0.882435,51.2103932],[0.5050041,51.2200721],[0.5227271,51.4904202],[-0.6339669,51.5106322],[-0.6367135,51.4456291],[-1.0995126,51.4524759],[-1.1148479,51.0481357],[-0.5298744,51.0394048],[-0.5275085,51.10203],[0.4280611,51.0877836],[0.4107642,50.8208689]],[[-5.3945661,51.9618998],[-4.7958112,51.9805124],[-4.7887332,51.8940308],[-4.2026458,51.9122773],[-4.2294099,52.2382823],[-3.6551984,52.2560218],[-3.6222764,51.8548323],[-4.2134157,51.836405],[-4.1855134,51.4934202],[-4.776615,51.4748465],[-4.7847576,51.5752482],[-5.0879928,51.5657379],[-5.0942224,51.6424172],[-5.3678001,51.6338498],[-5.3945661,51.9618998]],[[-1.2389016,54.0353696],[-0.6277871,54.0281103],[-0.6200376,54.2525704],[-0.5726819,54.2520109],[-0.5586479,54.6554165],[-1.17998,54.6626853],[-1.1878192,54.4378771],[-1.2322093,54.4383992],[-1.2389016,54.0353696]],[[-2.6722741,50.9767709],[-2.0996118,50.9802295],[-2.1057212,51.3794917],[-1.5887659,51.3825866],[-1.594992,51.7858908],[-2.1756313,51.7889106],[-2.1715392,51.3839176],[-2.6784576,51.3808828],[-2.6722741,50.9767709]],[[-2.6015496,53.2715461],[-3.2297251,53.2685042],[-3.2352183,53.6723131],[-2.6070428,53.6753262],[-2.6015496,53.2715461]],[[-0.0394177,51.7727994],[-0.6156335,51.7757705],[-0.6046472,52.5841377],[-0.0284314,52.5812201],[-0.0394177,51.7727994]],[[-2.9152892,54.0352257],[-3.5322877,54.0286638],[-3.5448438,54.4339736],[-2.9278454,54.4404713],[-2.9152892,54.0352257]],[[-6.3058305,57.1968949],[-6.3538957,57.6001458],[-5.6911121,57.6229455],[-5.643047,57.2199469],[-6.3058305,57.1968949]],[[1.171145,52.5723589],[1.1986505,52.9759408],[1.7978754,52.9610616],[1.7703699,52.5573411],[1.171145,52.5723589]],[[-2.4022508,55.5631737],[-2.4008775,55.9656986],[-1.7608445,55.965011],[-1.7622178,55.562479],[-2.4022508,55.5631737]],[[-6.3257432,56.3853727],[-7.0196021,56.3574652],[-7.0731605,56.7638392],[-6.3793015,56.7914485],[-6.3257432,56.3853727]],[[-2.422577,54.4430983],[-2.4257397,54.841885],[-1.7993058,54.8435404],[-1.7961431,54.4447701],[-2.422577,54.4430983]],[[-3.0270123,51.3793548],[-3.6058877,51.370168],[-3.6223672,51.7730401],[-3.0434918,51.7821458],[-3.0270123,51.3793548]],[[-3.0537915,52.1897924],[-3.0661511,52.5937352],[-2.4836401,52.600342],[-2.4712805,52.1964599],[-3.0537915,52.1897924]],[[-5.676726,51.7042466],[-5.6788616,51.731006],[-5.4635982,51.7375973],[-5.4614627,51.7108418],[-5.676726,51.7042466]],[[-5.8442675,59.1088192],[-5.8469031,59.1357806],[-5.7955763,59.1371015],[-5.7929408,59.1101412],[-5.8442675,59.1088192]],[[-8.648442,57.7786066],[-8.6659651,57.87717],[-8.4664946,57.8872093],[-8.4489714,57.7886733],[-8.648442,57.7786066]],[[-4.5271098,59.0153156],[-4.5285904,59.0331938],[-4.4762337,59.034342],[-4.4747531,59.0164644],[-4.5271098,59.0153156]],[[-7.6806151,58.2583811],[-7.6865455,58.2938023],[-7.5344535,58.3008387],[-7.5285231,58.2654246],[-7.6806151,58.2583811]],[[-6.1910235,59.080087],[-6.1954619,59.1158563],[-6.125424,59.1181472],[-6.1209857,59.0823803],[-6.1910235,59.080087]],[[-4.4266879,59.0711219],[-4.4280472,59.0886998],[-4.3762055,59.089758],[-4.3748462,59.0721806],[-4.4266879,59.0711219]]]},{"id":"AGIV10cm","name":"AGIV Flanders 2013-2015 aerial imagery 10cm","type":"wms","template":"https://geoservices.informatievlaanderen.be/raadpleegdiensten/OGW/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OGWRGB13_15VL&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","polygon":[[[5.9849448,50.7072276],[5.9849448,50.7671973],[5.9107871,50.8227527],[5.7556052,50.8353303],[5.7542319,50.8626424],[5.8331961,50.9332328],[5.8551688,51.026611],[5.9094138,51.0775439],[5.9121604,51.1822548],[5.8785147,51.2080728],[5.7741446,51.2368858],[5.684194,51.2407548],[5.6230826,51.2699769],[5.6230826,51.2978925],[5.5399985,51.34724],[5.4473013,51.3485267],[5.3985495,51.321071],[5.3120322,51.3232166],[5.2667136,51.3618196],[5.1994223,51.3725369],[5.1829428,51.3961061],[5.1589102,51.4923992],[5.0833792,51.5308596],[5.0325675,51.539829],[4.9556632,51.5052229],[4.9014182,51.5056503],[4.8382468,51.5436725],[4.7709555,51.5586163],[4.711904,51.5470886],[4.6404929,51.4966741],[4.6144003,51.4971016],[4.5656485,51.5317139],[4.4825644,51.5304324],[4.4262595,51.5218884],[4.3006034,51.4697351],[4.2951102,51.4256575],[4.181127,51.4243731],[4.1371817,51.3952492],[4.138555,51.3506709],[4.0520377,51.3004685],[3.933248,51.272984],[3.8652701,51.2708361],[3.8632102,51.2901637],[3.7629599,51.3240748],[3.5933585,51.359247],[3.4773154,51.3313688],[3.425817,51.3973913],[3.2356162,51.3515286],[3.2260031,51.3656781],[3.1779379,51.3618196],[3.1600852,51.3322268],[3.0625815,51.3021857],[2.7508444,51.1702014],[2.4700064,51.0745241],[2.4926657,50.9937771],[2.5311179,50.9557299],[2.5091452,50.9115907],[2.5304312,50.8214514],[2.5990958,50.7641572],[2.6650138,50.7645915],[2.7700705,50.66677],[2.8970999,50.6589354],[2.991857,50.7254874],[3.1133933,50.7263567],[3.2369895,50.7059231],[3.3626456,50.6585001],[3.4711356,50.7020092],[3.6393637,50.6672052],[3.6984152,50.681565],[3.727941,50.7124454],[3.8185782,50.6841754],[3.8748831,50.6415206],[4.0925498,50.642827],[4.150228,50.6632881],[4.2065329,50.6441333],[4.3136496,50.642827],[4.452352,50.6876557],[4.5347495,50.6780842],[4.6130271,50.6954855],[4.6768851,50.6959204],[4.7270102,50.732007],[4.7805686,50.732007],[4.7997946,50.7128802],[4.8622794,50.7128802],[4.8856253,50.6954855],[4.9611563,50.6954855],[5.0311942,50.6576295],[5.1074118,50.6502288],[5.2007956,50.6489227],[5.2358145,50.6654643],[5.3250784,50.6658995],[5.3669638,50.6820001],[5.4212088,50.6641586],[5.5221457,50.6746032],[5.622396,50.7241834],[5.6752677,50.69853],[5.7398123,50.6972252],[5.7727713,50.6719923],[5.8125968,50.6602413],[5.9080405,50.659806],[5.9849448,50.7072276]]],"terms_text":"Orthophoto Flanders © AGIV","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAABm0lEQVQ4y6WTPUgCYRjHf5oFJVfRUZKVHYFBoBAUFLZE0FBD0NQHRENESzS019LSFNHWx1DQEhGRg0JFREM11FJuLWem4GB5HULdwdkgHprn5LO97/O8v+fj/7y2bDabpQKzFx5S6ntlgE81xvHtclHAbuSNloNT5q/uywP021cAvO4hAPYu5/hI5e6GWpsBCEfjxNSMNUALPvJ7eA3AQPcML3KIzbNhlvdEWmu+6RCcAISiCWtA3fosPztBfrYvAGgX/QCIggdR8DDe6Qbg5E0uAdjyKhhykq+uBeySi9qVCfSAB61HRBQ8RFJpRs6vALiZHMUnNpYO0Ujn+jPkJJnVfbTBNeqfFQB8YqP56H8VJqBKcuHcWsQuuXIOyUX1sN8MnPJKlnOwWS2SIScx0hkcvV3mXUzN0HcSAuBoNMBYZxsADittVXcT/XcPKE/PltqHowkTYLcMkOMoml52+wr9jnIZAJZ8XjYGe0vaUDSdsBxnulsqrUDRdMLReNHg8tYhOAs2M2HdQiSVBqChprpI7/9q5JPYKv3OfxL1n52ATYYBAAAAAElFTkSuQmCC"},{"id":"AGRI-black_and_white-2.5m","name":"AGRI black-and-white 2.5m","type":"tms","template":"https://{switch:a,b,c}.agri.openstreetmap.org/layer/au_ga_agri/{zoom}/{x}/{y}.png","polygon":[[[112.28778,-28.784589],[112.71488,-31.13894],[114.11263,-34.178287],[113.60788,-37.39012],[117.17992,-37.451794],[119.31538,-37.42096],[121.72262,-36.708394],[123.81925,-35.76893],[125.9547,-34.3066],[127.97368,-33.727398],[130.07031,-33.24166],[130.10913,-33.888704],[131.00214,-34.049705],[131.0798,-34.72257],[132.28342,-35.39],[134.18591,-35.61126],[133.8753,-37.1119],[134.8459,-37.6365],[139.7769,-37.82075],[139.93223,-39.4283],[141.6017,-39.8767],[142.3783,-39.368294],[142.3783,-40.64702],[142.49478,-42.074874],[144.009,-44.060127],[147.23161,-44.03222],[149.05645,-42.534313],[149.52237,-40.99959],[149.9494,-40.852921],[150.8036,-38.09627],[151.81313,-38.12682],[156.20052,-22.667706],[156.20052,-20.10109],[156.62761,-17.417627],[155.26869,-17.19521],[154.14272,-19.51662],[153.5215,-18.34139],[153.05558,-16.5636],[152.78379,-15.256768],[152.27905,-13.4135],[151.3472,-12.391767],[149.48354,-12.05024],[146.9598,-9.992408],[135.9719,-9.992408],[130.3032,-10.33636],[128.09016,-12.164136],[125.91588,-12.315912],[124.3239,-11.860326],[122.03323,-11.974295],[118.26706,-16.9353],[115.93747,-19.11357],[114.0738,-21.11863],[113.49141,-22.596033],[112.28778,-28.784589]]],"terms_text":"AGRI"},{"id":"alagoas_litoral","name":"Alagoas Litoral 2006","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Ortofotos%202006&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-35.523842344,-9.48089222803],[-35.52360077082,-9.44514935417],[-35.51571944592,-9.44517914145],[-35.51584023251,-9.44228976382],[-35.50542238925,-9.44237912638],[-35.50518081607,-9.43064264549],[-35.4933437304,-9.43073201107],[-35.49304176392,-9.39820141319],[-35.48929737968,-9.39817162186],[-35.48920678974,-9.38628467767],[-35.4854020122,-9.38634426236],[-35.48525102896,-9.37809168429],[-35.48126507154,-9.37812147735],[-35.48114428495,-9.36986870367],[-35.47697714765,-9.36995808494],[-35.47685636106,-9.36385031181],[-35.47459161253,-9.36388010609],[-35.47447082594,-9.36152635042],[-35.47211548746,-9.36140717249],[-35.47205509417,-9.35917257881],[-35.46976014899,-9.35920237349],[-35.46966955904,-9.35681879126],[-35.46652910774,-9.3567592015],[-35.46640832115,-9.35288584487],[-35.46387180279,-9.35276666399],[-35.46387180279,-9.35118751337],[-35.44134510403,-9.3513066948],[-35.44125451409,-9.34540716508],[-35.43177276689,-9.34537736922],[-35.4317123736,-9.33602134361],[-35.39463089092,-9.33631931008],[-35.39441951439,-9.30124690873],[-35.38164633265,-9.30142570645],[-35.38146515277,-9.28637657868],[-35.37799253835,-9.28625737508],[-35.3779623417,-9.28110178087],[-35.36941669056,-9.28122098621],[-35.36920531403,-9.27260829561],[-35.35966317354,-9.2727573059],[-35.35969337019,-9.2646510545],[-35.35051358946,-9.26474046271],[-35.35036260622,-9.25562070859],[-35.34115262885,-9.25565051209],[-35.34118282549,-9.24501050089],[-35.31775022732,-9.24518932726],[-35.31759924408,-9.22566691185],[-35.30292367358,-9.22578613599],[-35.30283308363,-9.2113001083],[-35.307936317,-9.2113597228],[-35.30784572706,-9.19979432149],[-35.29102619461,-9.19988374615],[-35.29090540802,-9.19660482728],[-35.29018068849,-9.19669425274],[-35.28996931196,-9.16515547298],[-35.27758868663,-9.16521509525],[-35.27749809669,-9.16417170413],[-35.27541452804,-9.16420151535],[-35.27535413474,-9.16151849576],[-35.27375371245,-9.16148868432],[-35.2736631225,-9.15838828064],[-35.27182112703,-9.15841809234],[-35.27185132368,-9.15728524588],[-35.27148896391,-9.15728524588],[-35.27142857062,-9.15469161013],[-35.26964696844,-9.1546319861],[-35.26958657514,-9.15361837601],[-35.26919401873,-9.15361837601],[-35.26907323214,-9.13158654923],[-35.26403039207,-9.13164617712],[-35.26400019542,-9.12317891652],[-35.26055777765,-9.12320873117],[-35.260527581,-9.11781223884],[-35.25599808393,-9.11784205394],[-35.25572631411,-9.08945695375],[-35.25113642374,-9.08954640613],[-35.25107603045,-9.08650501259],[-35.25026072098,-9.08647519487],[-35.25029091762,-9.08474576336],[-35.24449316137,-9.08477558121],[-35.24449316137,-9.07988541975],[-35.24092995701,-9.07997487452],[-35.24080917042,-9.0731166106],[-35.237336556,-9.0731166106],[-35.23718557277,-9.06321662455],[-35.23655144318,-9.06321662455],[-35.23652124653,-9.04654705576],[-35.23322981199,-9.04651723473],[-35.23332040193,-9.04344565539],[-35.23060270369,-9.04347547668],[-35.23060270369,-9.04013547745],[-35.22897208475,-9.04007583433],[-35.22900228139,-9.03834617941],[-35.22504652062,-9.03825671427],[-35.22501632397,-9.03166605486],[-35.22229862573,-9.03160641033],[-35.22232882238,-9.02012465516],[-35.21834286496,-9.02009483194],[-35.21831266831,-9.01341436936],[-35.21671224601,-9.01341436936],[-35.21668204936,-9.00998461959],[-35.21175999588,-9.00998461959],[-35.21172979923,-9.00646536424],[-35.20970662388,-9.00652501292],[-35.20973682052,-9.00437765419],[-35.20765325187,-9.00431800516],[-35.20768344852,-9.00226010741],[-35.20566027316,-9.00226010741],[-35.20563007651,-8.99987412434],[-35.20390886763,-8.99987412434],[-35.20393906427,-8.99784602637],[-35.20212726545,-8.99790567647],[-35.20212726545,-8.9957880918],[-35.1984432745,-8.99581791702],[-35.1984432745,-8.99361084394],[-35.19433653049,-8.99361084394],[-35.19427613719,-8.99122480384],[-35.19065253954,-8.99131428063],[-35.19062234289,-8.98833170914],[-35.18766307147,-8.98842118664],[-35.18763287482,-8.98543859134],[-35.1847339967,-8.98540876526],[-35.1846736034,-8.98254545043],[-35.18237865822,-8.98251562411],[-35.18234846157,-8.9805172554],[-35.17950997674,-8.98060673484],[-35.1794797801,-8.97741528813],[-35.17809073433,-8.97744511486],[-35.17803034103,-8.97306055853],[-35.17558441262,-8.97303073144],[-35.17549382268,-8.96912336076],[-35.17292710767,-8.96909353334],[-35.17283651773,-8.96291920489],[-35.17063216249,-8.96288937697],[-35.17048117925,-8.95579026036],[-35.16851839719,-8.95564111777],[-35.16851839719,-8.94806459361],[-35.16794466089,-8.94800493531],[-35.16791446424,-8.9399509755],[-35.16244887111,-8.9399509755],[-35.16241867447,-8.92977886806],[-35.15870448687,-8.9298086987],[-35.15873468352,-8.92661680615],[-35.15547344563,-8.92667646795],[-35.15550364227,-8.92378285946],[-35.15348046692,-8.92381269059],[-35.15338987697,-8.92065057698],[-35.15130630832,-8.92062074559],[-35.15121571838,-8.91193970728],[-35.1526349608,-8.91193970728],[-35.1526349608,-8.90821067559],[-35.15438636633,-8.908240508],[-35.15429577639,-8.90215464709],[-35.15592639533,-8.90212481419],[-35.15592639533,-8.90051383392],[-35.15767780087,-8.90048400089],[-35.15773819416,-8.89905201236],[-35.15958018964,-8.89908184551],[-35.15954999299,-8.89747085185],[-35.16139198846,-8.89750068513],[-35.16133159517,-8.89624768526],[-35.16362654035,-8.89624768526],[-35.1635963437,-8.89526318235],[-35.16552892912,-8.89526318235],[-35.16549873247,-8.89314500045],[-35.16794466089,-8.89314500045],[-35.16791446424,-8.89147431313],[-35.17023960607,-8.89153398066],[-35.17026980272,-8.89040029582],[-35.17301769761,-8.89043012968],[-35.17301769761,-8.88875942997],[-35.17790955445,-8.88875942997],[-35.17793975109,-8.88795391132],[-35.17893624045,-8.88792407726],[-35.17893624045,-8.8889085999],[-35.17966095998,-8.88893843387],[-35.17978174657,-8.88858042598],[-35.18098961245,-8.88861025998],[-35.18098961245,-8.88816274965],[-35.1851869464,-8.88816274965],[-35.1851869464,-8.88896826785],[-35.18591166594,-8.88899810182],[-35.18591166594,-8.88971411645],[-35.18932388706,-8.88971411645],[-35.1894748703,-8.88929644142],[-35.19013919653,-8.88926660747],[-35.19016939318,-8.88831191982],[-35.19071293283,-8.88831191982],[-35.19077332612,-8.8878942432],[-35.1915282423,-8.88792407726],[-35.19155843895,-8.88619369772],[-35.19753737508,-8.8860743609],[-35.19756757173,-8.88729756147],[-35.19968133703,-8.88729756147],[-35.19974173032,-8.88777490693],[-35.20079861297,-8.88777490693],[-35.20079861297,-8.88822241773],[-35.20330493468,-8.88822241773],[-35.20336532798,-8.88869976198],[-35.20563007651,-8.88861025998],[-35.20556968322,-8.88983345208],[-35.20741167869,-8.88980361818],[-35.20744187534,-8.89022129263],[-35.21124665288,-8.8902511265],[-35.21127684953,-8.8876854047],[-35.21245451877,-8.88777490693],[-35.21248471541,-8.88861025998],[-35.21622909966,-8.88858042598],[-35.21622909966,-8.88747656609],[-35.21870522472,-8.887446732],[-35.21870522472,-8.88896826785],[-35.22136252967,-8.88896826785],[-35.22263078885,-8.88792407726],[-35.22401983462,-8.88747656609],[-35.22453317762,-8.88762573654],[-35.22643556639,-8.88717822501],[-35.22706969598,-8.88598485826],[-35.2331090254,-8.88446331002],[-35.23932953471,-8.88338927217],[-35.24129231678,-8.88416496649],[-35.25010973774,-8.88514949923],[-35.25623965711,-8.88505999636],[-35.26167505359,-8.88294175546],[-35.2616146603,-8.88094284086],[-35.26406058872,-8.88109201397],[-35.26877126567,-8.87930193267],[-35.27420666215,-8.87748200772],[-35.27810202963,-8.87518471252],[-35.28498686518,-8.87506537212],[-35.28501706183,-8.875811249],[-35.28809711983,-8.87578141395],[-35.29404585932,-8.87545322829],[-35.30781553041,-8.87208184942],[-35.31756904744,-8.86960550716],[-35.32783590746,-8.86715898394],[-35.33206343806,-8.8661445671],[-35.34103184226,-8.86375769289],[-35.34710136833,-8.86244490546],[-35.3522046017,-8.86113211335],[-35.35256696146,-8.86390687298],[-35.34903395375,-8.86611473127],[-35.34495740639,-8.87205201407],[-35.34326639415,-8.87488636144],[-35.3431758042,-8.8756919088],[-35.34380993379,-8.87667646429],[-35.34480642315,-8.87679580417],[-35.34888297051,-8.87721349344],[-35.35042299952,-8.87781019157],[-35.35253676482,-8.87891408057],[-35.35398620388,-8.88010747033],[-35.35576780606,-8.88252407272],[-35.35754940824,-8.88395612587],[-35.36035769642,-8.88511966494],[-35.36114280925,-8.88508983065],[-35.36120320254,-8.88586552137],[-35.36174674219,-8.8858953556],[-35.36177693884,-8.88777490693],[-35.36253185502,-8.88783457507],[-35.36247146172,-8.89099697249],[-35.36310559131,-8.89111630771],[-35.36310559131,-8.89481568015],[-35.36440404714,-8.89487534714],[-35.36506837338,-8.8966951857],[-35.3663668292,-8.90021550347],[-35.36754449844,-8.90427277684],[-35.36793705485,-8.90782285411],[-35.36863157774,-8.90916531133],[-35.37207399551,-8.91155188976],[-35.37409717087,-8.91349097325],[-35.37276851839,-8.91599685052],[-35.37261753516,-8.91817456324],[-35.37083593298,-8.92229129973],[-35.37062455645,-8.92485677869],[-35.37234576533,-8.93037548043],[-35.37153045586,-8.93192666805],[-35.37153045586,-8.93362700074],[-35.37171163574,-8.93386564329],[-35.37171163574,-8.94362002373],[-35.36817862803,-8.94376917125],[-35.36814843138,-8.9450518374],[-35.36926570733,-8.94511149618],[-35.36920531403,-8.94863134694],[-35.37077553968,-8.94872083423],[-35.37080573633,-8.95182304658],[-35.3721947821,-8.9517633889],[-35.37222497875,-8.9552831753],[-35.37319127145,-8.95531300385],[-35.37313087816,-8.95737116808],[-35.37439913734,-8.95737116808],[-35.37445953063,-8.96011536892],[-35.37566739652,-8.96017502523],[-35.37569759317,-8.96205419397],[-35.3768752624,-8.96208402197],[-35.3769356557,-8.964440426],[-35.37781135847,-8.964440426],[-35.37775096517,-8.96617043441],[-35.38074043324,-8.96617043441],[-35.38074043324,-8.96330696774],[-35.38288439518,-8.96327713984],[-35.38291459183,-8.95981708722],[-35.38542091354,-8.9598469154],[-35.38542091354,-8.95722202613],[-35.38723271237,-8.95722202613],[-35.38720251572,-8.95406020253],[-35.38946726426,-8.95409003118],[-35.38946726426,-8.9508386936],[-35.39158102956,-8.95086852252],[-35.39158102956,-8.94791544785],[-35.39586895345,-8.94791544785],[-35.39580856016,-8.94651347472],[-35.39719760593,-8.94654330399],[-35.39710701598,-8.94472371393],[-35.39837527516,-8.94469388451],[-35.39837527516,-8.93914556972],[-35.4010741005,-8.93915302719],[-35.40106277676,-8.93895167547],[-35.4016667097,-8.93893676052],[-35.40172710299,-8.93687849204],[-35.40236123258,-8.93687849204],[-35.40236123258,-8.9362818903],[-35.40323693535,-8.93640121073],[-35.40329732865,-8.93583443836],[-35.40426362135,-8.93580460821],[-35.40420322806,-8.93362700074],[-35.40574325706,-8.93359717041],[-35.40577345371,-8.93124056665],[-35.40809859554,-8.93133005821],[-35.40803820225,-8.92927174677],[-35.40936685472,-8.92930157745],[-35.40927626478,-8.92739240878],[-35.41084649043,-8.92742223962],[-35.41084649043,-8.92542356812],[-35.41238651943,-8.92545339912],[-35.41235632279,-8.92390218397],[-35.41335281214,-8.92387235285],[-35.41329241885,-8.92193332448],[-35.41522500426,-8.92196315577],[-35.41522500426,-8.91999428582],[-35.41655365674,-8.92002411726],[-35.41655365674,-8.91754809927],[-35.4196035181,-8.91754809927],[-35.41966391139,-8.91963630832],[-35.42183806999,-8.91963630832],[-35.42186826663,-8.92264927462],[-35.42389144199,-8.92267910584],[-35.42392163864,-8.92512525801],[-35.4253710777,-8.92512525801],[-35.4253710777,-8.92766088623],[-35.42724326982,-8.92766088623],[-35.42727346647,-8.92986835998],[-35.42814916924,-8.92983852934],[-35.42817936588,-8.93159853276],[-35.42987037812,-8.93153887177],[-35.42990057477,-8.93407445539],[-35.43141040713,-8.93407445539],[-35.43141040713,-8.9355957971],[-35.43225591325,-8.93556596693],[-35.43228610989,-8.93586426851],[-35.43340338584,-8.93583443836],[-35.43340338584,-8.94001063511],[-35.4343394819,-8.94004046492],[-35.4343394819,-8.94096518765],[-35.43530577461,-8.94096518765],[-35.43533597125,-8.94260581897],[-35.43566813437,-8.94263564856],[-35.43569833102,-8.94329189897],[-35.43627206732,-8.94332172851],[-35.43624187067,-8.94421661344],[-35.43729875332,-8.94421661344],[-35.43726855667,-8.94520098434],[-35.43823484938,-8.94520098434],[-35.43826504603,-8.94684159657],[-35.4390199622,-8.94687142582],[-35.4390199622,-8.94797510616],[-35.44025802474,-8.94797510616],[-35.44031841803,-8.94952621882],[-35.44158667721,-8.94955604785],[-35.4416470705,-8.95152475808],[-35.4427341498,-8.95152475808],[-35.4427341498,-8.95334431412],[-35.44436476875,-8.95334431412],[-35.44436476875,-8.95498488964],[-35.44569342122,-8.95501471821],[-35.44563302793,-8.9567447715],[-35.44720325358,-8.95680442836],[-35.44717305693,-8.95865378627],[-35.44895465911,-8.95871344282],[-35.44892446246,-8.95999605627],[-35.45100803112,-8.95993639993],[-35.45097783447,-8.96101021254],[-35.45469202207,-8.96095055636],[-35.45466182542,-8.96235247383],[-35.46048977832,-8.96235247383],[-35.46055017161,-8.96557388071],[-35.46652910774,-8.96548439758],[-35.46658950104,-8.9688549139],[-35.46770677698,-8.96882508646],[-35.46773697363,-8.97052524668],[-35.47389708964,-8.97052524668],[-35.47398767958,-8.97529758369],[-35.47791324371,-8.97520810295],[-35.47797363701,-8.97816095576],[-35.48410355637,-8.97813112908],[-35.48416394967,-8.98200857638],[-35.49083740868,-8.98194892366],[-35.49083740868,-8.98561754775],[-35.49720890123,-8.98561754775],[-35.49720890123,-8.99068794266],[-35.5022517413,-8.99056864006],[-35.50234233124,-8.99566879088],[-35.5064792719,-8.99566879088],[-35.50650946855,-8.99856182695],[-35.51203545497,-8.99850217696],[-35.51206565162,-9.00163378838],[-35.51662534534,-9.00166361312],[-35.51665554198,-9.00616712068],[-35.52118503905,-9.00613729631],[-35.5212152357,-9.00738991769],[-35.5312707192,-9.00733026915],[-35.5312707192,-9.01064074815],[-35.54818084159,-9.01049162813],[-35.54818084159,-9.01359331193],[-35.56968085435,-9.01344419313],[-35.56974124764,-9.01738090893],[-35.58574547062,-9.01732126204],[-35.58577566727,-9.01994571582],[-35.60957062521,-9.01982642288],[-35.60954042856,-9.02301749544],[-35.62910785591,-9.02286838053],[-35.62904746261,-9.02507527493],[-35.65220829096,-9.02489633805],[-35.65223848761,-9.02758038195],[-35.67552010255,-9.02740144631],[-35.6755502992,-9.03056262951],[-35.68294847774,-9.03056262951],[-35.68297867439,-9.03435004835],[-35.69128275235,-9.03432022631],[-35.69128275235,-9.03766027947],[-35.69949624037,-9.03760063593],[-35.69949624037,-9.04034422831],[-35.70668304239,-9.04031440677],[-35.70671323904,-9.04517528582],[-35.71115214617,-9.04517528582],[-35.71133332605,-9.06691424164],[-35.70870621775,-9.06691424164],[-35.70876661104,-9.07869268732],[-35.7065622558,-9.07872250568],[-35.7065622558,-9.08653483029],[-35.70429750727,-9.08653483029],[-35.70432770391,-9.09103727588],[-35.69991899343,-9.09106709321],[-35.69988879679,-9.09559929877],[-35.69535929972,-9.09556948181],[-35.69541969301,-9.1000121806],[-35.69092039259,-9.10013144692],[-35.69101098253,-9.10206951907],[-35.63366754962,-9.10245713224],[-35.63369774627,-9.10540894182],[-35.62584661802,-9.10552820634],[-35.62590701131,-9.10964280796],[-35.6223136103,-9.10964280796],[-35.62234380695,-9.11202806257],[-35.61989787853,-9.11199824698],[-35.61989787853,-9.11500960843],[-35.61473425187,-9.11506923909],[-35.61473425187,-9.11706686056],[-35.61177498045,-9.11700723023],[-35.6118051771,-9.11819983493],[-35.60960082186,-9.11825946506],[-35.60963101851,-9.12571315292],[-35.59975671489,-9.12583241066],[-35.59978691154,-9.12923123948],[-35.59634449377,-9.12926105363],[-35.59640488706,-9.13501513686],[-35.59196597993,-9.13507476418],[-35.59208676652,-9.14899746988],[-35.59018437775,-9.14896765739],[-35.5901541811,-9.15108433815],[-35.60159871037,-9.15105452583],[-35.60153831707,-9.14911671983],[-35.60552427449,-9.14911671983],[-35.60549407785,-9.14556901687],[-35.61183537375,-9.14553920409],[-35.61183537375,-9.14234922223],[-35.61760293335,-9.14237903528],[-35.6175727367,-9.13853313161],[-35.62400462254,-9.13853313161],[-35.62397442589,-9.13465737274],[-35.63176516085,-9.13465737274],[-35.63164437426,-9.13063250159],[-35.6392237327,-9.13060268756],[-35.63919353605,-9.12878402702],[-35.66386419676,-9.12869458446],[-35.66380380346,-9.12610074043],[-35.71278276511,-9.12577278179],[-35.71275256846,-9.12407335495],[-35.72425749102,-9.12401372579],[-35.71963740401,-9.15323081845],[-35.72111703972,-9.15320100631],[-35.72123782631,-9.17257836825],[-35.72066409001,-9.17254855774],[-35.72081507325,-9.18557551362],[-35.71211843887,-9.18566494187],[-35.71329610811,-9.34415573683],[-35.69040704959,-9.34433451257],[-35.69064862276,-9.3718946735],[-35.68898780717,-9.3718946735],[-35.68901800382,-9.37597637093],[-35.68756856476,-9.37597637093],[-35.6876591547,-9.38232227231],[-35.6849716531,-9.38235206501],[-35.6850320464,-9.39093225328],[-35.68168021856,-9.39099183718],[-35.68177080851,-9.39936327296],[-35.67715072149,-9.39933348173],[-35.67724131144,-9.40889633403],[-35.6729231909,-9.40892612443],[-35.67301378084,-9.41753544361],[-35.6697223463,-9.41759502292],[-35.66978273959,-9.42498277846],[-35.66721602459,-9.42498277846],[-35.66727641788,-9.43269804791],[-35.6607539421,-9.43287677797],[-35.6607539421,-9.43704711987],[-35.65130239155,-9.43707690785],[-35.65142317814,-9.44211103864],[-35.64514227553,-9.44217061371],[-35.64523286547,-9.44651956613],[-35.63644564116,-9.44660892759],[-35.63644564116,-9.44991528532],[-35.62711487719,-9.4500046459],[-35.62726586043,-9.46504667925],[-35.62086417124,-9.46510625035],[-35.62092456453,-9.47219513764],[-35.60938944533,-9.47222492257],[-35.60938944533,-9.47529275674],[-35.59673705018,-9.47535232607],[-35.59673705018,-9.47350567221],[-35.57843788202,-9.47371416589],[-35.57846807866,-9.47594801874],[-35.57267032241,-9.47603737255],[-35.57270051906,-9.48041568084],[-35.56823141529,-9.48047524927],[-35.56826161193,-9.48881472807],[-35.54168856246,-9.48893386201],[-35.54162816916,-9.48071352291],[-35.523842344,-9.48089222803]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"arapiraca_al","name":"Arapiraca AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Arapiraca&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.60875162133,-9.83071802463],[-36.60783704041,-9.74047303963],[-36.61718167158,-9.74051223078],[-36.61630685505,-9.65075247124],[-36.70736730351,-9.64977242883],[-36.70832164882,-9.74043384847],[-36.69897701764,-9.74047303963],[-36.69997112734,-9.82967973955],[-36.60875162133,-9.83071802463]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"CRAIG-Auvergne-2013","name":"Auvergne 2013 25cm CRAIG","type":"tms","template":"http://tiles.craig.fr/osm/tms/1.0.0/ortho_2013/webmercator/{zoom-1}/{x}/{-y}.jpeg","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","polygon":[[[2.9401192,44.6338837],[2.9971896,44.633931],[2.9971676,44.6473385],[3.0159744,44.6473541],[3.0159305,44.6741168],[3.0349486,44.6741326],[3.0349036,44.7015216],[3.0536338,44.7015371],[3.0535675,44.7418954],[3.0723301,44.741911],[3.0722196,44.8091687],[3.0921583,44.8091852],[3.092137,44.8221252],[3.1301398,44.8221567],[3.1300495,44.8770722],[3.1485587,44.8770875],[3.1485807,44.8636964],[3.1682313,44.8637126],[3.1682538,44.8500261],[3.2064,44.8500576],[3.2063789,44.8628393],[3.2439492,44.8628704],[3.2439263,44.8767893],[3.2631452,44.8768052],[3.2630782,44.9175197],[3.3200437,44.9175667],[3.3200227,44.9303336],[3.3390815,44.9303493],[3.3390586,44.9441978],[3.3769989,44.9442292],[3.3770218,44.9302879],[3.396031,44.9303036],[3.39612,44.8762713],[3.4148252,44.8762867],[3.4148923,44.8355255],[3.4333371,44.8355408],[3.4333819,44.8082784],[3.4525549,44.8082943],[3.4525774,44.7946344],[3.5089262,44.7946811],[3.508904,44.8081469],[3.604265,44.8082258],[3.6042213,44.8348239],[3.6236136,44.83484],[3.6235695,44.8616583],[3.6424823,44.8616739],[3.642549,44.821102],[3.6610055,44.8211172],[3.6610275,44.8077696],[3.6992999,44.8078013],[3.6992782,44.820994],[3.7361139,44.8210245],[3.7361819,44.7797075],[3.7751058,44.7797397],[3.775151,44.7522344],[3.8118352,44.7522648],[3.8118567,44.7392021],[3.8311822,44.7392181],[3.8312061,44.7246766],[3.887824,44.7247235],[3.8878019,44.7381833],[3.925626,44.7382146],[3.9256039,44.7516682],[3.9454097,44.7516846],[3.9453656,44.7784691],[3.9643737,44.7784848],[3.9643516,44.7919273],[4.0033183,44.7919596],[4.0032964,44.8052575],[4.0216937,44.8052727],[4.0216718,44.8185687],[4.0596515,44.8186001],[4.0596082,44.8449216],[4.0798132,44.8449383],[4.0797928,44.8573502],[4.173882,44.857428],[4.1738604,44.8705468],[4.1932576,44.8705628],[4.193235,44.8842744],[4.2140385,44.8842916],[4.2139961,44.9100242],[4.2324138,44.9100394],[4.2323689,44.9373093],[4.2715486,44.9373416],[4.2715273,44.9502971],[4.3288672,44.9503445],[4.3287793,45.0036659],[4.3489259,45.0036825],[4.3489038,45.0170656],[4.4060793,45.0171127],[4.4059904,45.0710024],[4.3884707,45.0709879],[4.3884482,45.0845976],[4.407943,45.0846137],[4.4079231,45.09663],[4.4843608,45.0966929],[4.4842941,45.1370472],[4.4663631,45.1370324],[4.4663413,45.1502035],[4.4864469,45.15022],[4.4864022,45.1772415],[4.5065524,45.177258],[4.5064402,45.2450058],[4.4881342,45.2449908],[4.4881106,45.2592077],[4.4698588,45.2591927],[4.469836,45.2729835],[4.4508849,45.2729679],[4.4508626,45.2864203],[4.3936753,45.2863733],[4.3936303,45.3135182],[4.3750893,45.3135029],[4.3750662,45.3274054],[4.3950734,45.3274218],[4.3950283,45.3545849],[4.3767871,45.35457],[4.3767639,45.3685486],[4.3576564,45.3685329],[4.3576335,45.3823359],[4.2814576,45.3822734],[4.2814334,45.3968834],[4.2444556,45.3968531],[4.2444325,45.4107893],[4.1481178,45.4107104],[4.1481388,45.3980659],[4.1291913,45.3980504],[4.1292145,45.3840899],[4.0902138,45.3840579],[4.0902351,45.3712093],[4.0135507,45.3711464],[4.0135259,45.3860975],[3.9170932,45.3860185],[3.9170704,45.3997355],[3.9375703,45.3997523],[3.9375481,45.4131142],[3.975277,45.4131451],[3.9752552,45.4262061],[3.9953725,45.4262226],[3.9956999,45.5209568],[3.9777821,45.5209421],[3.977693,45.5743873],[3.9581755,45.5743714],[3.9581522,45.5883658],[3.9396019,45.5883506],[3.9395781,45.6026212],[3.9202279,45.6026054],[3.9202048,45.6164603],[3.8818916,45.616429],[3.8818468,45.643276],[3.8441329,45.6432453],[3.8441098,45.6570896],[3.8261689,45.657075],[3.8261241,45.6838865],[3.8072175,45.6838711],[3.8071277,45.7375802],[3.7882101,45.7375648],[3.7881863,45.7517966],[3.7688482,45.7517809],[3.7688028,45.7789651],[3.750719,45.7789504],[3.7505822,45.8606554],[3.7696692,45.8606709],[3.7695793,45.914333],[3.751661,45.9143185],[3.7516379,45.9280879],[3.7328974,45.9280727],[3.7328527,45.9547155],[3.8101795,45.9547782],[3.8101569,45.9682278],[3.8495994,45.9682598],[3.8495098,46.0216192],[3.8318849,46.0216049],[3.8317936,46.0759058],[3.8505037,46.0759209],[3.8504583,46.1029545],[3.8324727,46.10294],[3.8323353,46.1845598],[3.8142194,46.1845452],[3.8141522,46.2244234],[3.8336864,46.2244392],[3.8336634,46.2381001],[3.8528929,46.2381156],[3.8528703,46.2514729],[3.8931424,46.2515054],[3.8931205,46.2644677],[3.9130562,46.2644838],[3.9130335,46.2779317],[3.9518926,46.2779631],[3.9518709,46.2908227],[3.971523,46.2908386],[3.9715012,46.3036947],[4.0105021,46.3037261],[4.0104784,46.3177638],[4.0298278,46.3177794],[4.029783,46.3442827],[4.0116018,46.344268],[4.0114647,46.4253437],[4.031532,46.4253598],[4.0314635,46.4657978],[4.0132435,46.4657832],[4.0132204,46.479378],[3.9943703,46.4793629],[3.9943461,46.4936113],[3.9745971,46.4935955],[3.9745735,46.5075278],[3.8775423,46.5074499],[3.8774959,46.5347758],[3.8583577,46.5347605],[3.8583347,46.5483156],[3.8186897,46.5482838],[3.8187114,46.5355316],[3.7992386,46.535516],[3.7992156,46.5490706],[3.7610377,46.5490399],[3.7609226,46.6168059],[3.7423295,46.616791],[3.7422834,46.6439624],[3.7228558,46.6439468],[3.7228098,46.6710357],[3.7038706,46.6710206],[3.7038474,46.6846709],[3.6841096,46.6846551],[3.6840631,46.711998],[3.6648359,46.7119826],[3.6647898,46.7390375],[3.6457623,46.7390222],[3.6457158,46.7663375],[3.6257542,46.7663216],[3.6257314,46.7797093],[3.5672301,46.7796626],[3.5672528,46.7663082],[3.5471462,46.7662922],[3.5471922,46.7392824],[3.5271621,46.7392664],[3.5272308,46.6988967],[3.4877399,46.6988651],[3.4877618,46.685943],[3.4679636,46.6859272],[3.4679407,46.6994059],[3.4679179,46.7127907],[3.4486497,46.7127753],[3.4486258,46.7267878],[3.350433,46.7267092],[3.3504786,46.6999004],[3.3303913,46.6998843],[3.3303448,46.7271984],[3.2327174,46.7271203],[3.2327406,46.7135148],[3.2129042,46.7134989],[3.212927,46.7001302],[3.1735446,46.7000987],[3.173498,46.7275094],[3.1541227,46.7274939],[3.1541002,46.7407271],[3.1147772,46.7406957],[3.114754,46.7542756],[3.0753432,46.7542441],[3.0752971,46.7813548],[3.05597,46.7813394],[3.055924,46.8083069],[2.99704,46.8082598],[2.9970166,46.8219593],[2.9379443,46.8219121],[2.9379675,46.8082604],[2.8986634,46.808229],[2.8986872,46.7942392],[2.878991,46.7942234],[2.8790134,46.7810427],[2.8594188,46.781027],[2.8594415,46.7677056],[2.8400446,46.7676901],[2.8400671,46.754466],[2.7414032,46.7543871],[2.741382,46.7668245],[2.7023351,46.7667932],[2.7023571,46.7538869],[2.6826621,46.7538711],[2.6826849,46.7404752],[2.6634875,46.7404599],[2.6635123,46.7258966],[2.6434164,46.7258805],[2.6434382,46.7130938],[2.6241432,46.7130784],[2.6241658,46.6998093],[2.6039699,46.6997931],[2.6039936,46.6858433],[2.5651245,46.6858122],[2.5651469,46.6726126],[2.5459278,46.6725972],[2.5459966,46.6321534],[2.5659222,46.6321694],[2.565946,46.6181104],[2.5456397,46.6180941],[2.5456862,46.5907192],[2.5664225,46.5907358],[2.5664449,46.5775417],[2.5854963,46.577557],[2.5855181,46.5647199],[2.5661318,46.5647044],[2.5661557,46.5506246],[2.468279,46.5505461],[2.4683039,46.5358205],[2.3321246,46.5357112],[2.3321701,46.5088566],[2.3126474,46.5088409],[2.3126703,46.4953444],[2.2928767,46.4953285],[2.2928996,46.4818182],[2.2748687,46.4818037],[2.2749151,46.4544154],[2.2553921,46.4543997],[2.255529,46.3734888],[2.275948,46.3735052],[2.276037,46.3208741],[2.3145615,46.3209052],[2.3145849,46.3070421],[2.3537075,46.3070737],[2.3537313,46.2929669],[2.3938428,46.2929992],[2.3938862,46.2672854],[2.4515727,46.267332],[2.451596,46.2534921],[2.4709353,46.2535077],[2.4709807,46.2265552],[2.4915062,46.2265718],[2.4915521,46.199329],[2.5108806,46.1993446],[2.5109254,46.1727799],[2.5311728,46.1727963],[2.5313772,46.051352],[2.5516349,46.0513684],[2.5516577,46.0377665],[2.5705635,46.0377818],[2.5706774,45.9699434],[2.5514356,45.9699278],[2.551458,45.9566151],[2.5322621,45.9565995],[2.5322849,45.9430066],[2.5130653,45.942991],[2.513134,45.9020279],[2.4749412,45.9019969],[2.4749633,45.8888235],[2.4361947,45.888792],[2.4362172,45.8753288],[2.417209,45.8753133],[2.4172548,45.8479368],[2.3784736,45.8479053],[2.378497,45.8339746],[2.3595157,45.8339592],[2.3595606,45.8070849],[2.3787254,45.8071005],[2.3787481,45.7935783],[2.3986981,45.7935945],[2.3987203,45.7803477],[2.4182486,45.7803636],[2.4183161,45.7400007],[2.4572171,45.7400324],[2.4572394,45.7266956],[2.4758919,45.7267107],[2.4759144,45.7132391],[2.49533,45.7132549],[2.4954204,45.6591268],[2.4576942,45.659096],[2.4577622,45.618343],[2.4391188,45.6183278],[2.4391866,45.5776619],[2.4585044,45.5776777],[2.4585496,45.5505348],[2.4780887,45.5505508],[2.4781108,45.5372464],[2.4975506,45.5372623],[2.4975949,45.5106757],[2.4785536,45.5106601],[2.4786444,45.4561337],[2.4597798,45.4561183],[2.4598701,45.401757],[2.4224876,45.4017264],[2.4224651,45.4152816],[2.4023154,45.4152651],[2.4022929,45.4288193],[2.3256006,45.4287565],[2.3256684,45.3879609],[2.3456182,45.3879773],[2.3456629,45.3611091],[2.326256,45.3610932],[2.326279,45.3472146],[2.3073819,45.3471991],[2.3074045,45.3335972],[2.2881095,45.3335813],[2.2881307,45.3208191],[2.2696332,45.3208039],[2.2696574,45.306212],[2.2506602,45.3061964],[2.2506828,45.2925147],[2.2316866,45.2924992],[2.2317086,45.2792355],[2.2130009,45.2792202],[2.213046,45.2520355],[2.1937387,45.2520197],[2.1937617,45.2381134],[2.1756091,45.2380985],[2.1757423,45.1576822],[2.1573543,45.157667],[2.1574448,45.1029478],[2.1202408,45.1029172],[2.1202629,45.0895468],[2.1006669,45.0895306],[2.1006902,45.0754441],[2.0824591,45.0754291],[2.082548,45.0215961],[2.1025534,45.0216126],[2.1025982,44.994453],[2.0457406,44.9944061],[2.0458508,44.9275321],[2.0657794,44.9275486],[2.0658912,44.8596881],[2.0856964,44.8597044],[2.0857193,44.8458126],[2.1055593,44.8458291],[2.1056029,44.8193264],[2.124743,44.8193422],[2.1247657,44.805512],[2.1435067,44.8055275],[2.143551,44.778597],[2.1256091,44.7785822],[2.1256984,44.7242739],[2.1066459,44.7242581],[2.1067116,44.6842263],[2.1263414,44.6842426],[2.1263635,44.670735],[2.14598,44.6707513],[2.146069,44.6164441],[2.1839622,44.6164756],[2.183983,44.6037819],[2.2404173,44.6038288],[2.2403728,44.6309515],[2.25948,44.6309674],[2.2594571,44.644934],[2.316678,44.6449815],[2.3167011,44.6308801],[2.3361516,44.6308963],[2.3361734,44.6175824],[2.3724238,44.6176125],[2.3724009,44.6315823],[2.4110495,44.6316144],[2.4110701,44.6190741],[2.4492173,44.6191058],[2.4491956,44.6323197],[2.5048575,44.6323659],[2.5048126,44.6597555],[2.5246119,44.6597719],[2.524567,44.6871739],[2.5422544,44.6871886],[2.5422313,44.70122],[2.5807101,44.701252],[2.5805999,44.7683374],[2.61769,44.7683681],[2.6176235,44.808838],[2.6367564,44.8088539],[2.6366899,44.8492948],[2.6733105,44.8493251],[2.6732888,44.8625164],[2.6933766,44.862533],[2.6933323,44.8894303],[2.7305201,44.8894611],[2.7304757,44.9164461],[2.7499202,44.9164622],[2.7500519,44.8364688],[2.8073346,44.8365162],[2.8073139,44.8491017],[2.8263796,44.8491175],[2.8264007,44.8362845],[2.8457039,44.8363004],[2.8457707,44.7957107],[2.8642166,44.795726],[2.8642611,44.7686452],[2.8839885,44.7686615],[2.8840323,44.7419697],[2.9020315,44.7419846],[2.9021426,44.6743192],[2.9219777,44.6743357],[2.9220221,44.6472986],[2.9400972,44.6473136],[2.9401192,44.6338837]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/CRAIG","terms_text":"Orthophotographie CRAIG/Sintegra/IGN 2013"},{"id":"CRAIG-Auvergne-2016","name":"Auvergne 2016 25cm CRAIG","type":"tms","template":"http://tiles.craig.fr/ortho/tms/1.0.0/ortho_2016/webmercator/{zoom-1}/{x}/{-y}.jpeg","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","polygon":[[[2.493891,46.6682909],[2.7136176,46.8414109],[3.6474555,46.8075834],[4.0484565,46.4832686],[4.0374701,46.2482538],[4.4604438,46.2596487],[4.4934028,46.1455925],[4.3835395,46.0922853],[4.4549506,45.6908367],[4.7625678,45.5717589],[4.8120063,45.344428],[4.2242377,44.8441895],[3.8616889,44.6959969],[3.3782905,44.8052283],[3.3343451,44.8909082],[3.1805365,44.8247122],[3.0322211,44.6061167],[2.927851,44.6022057],[2.7191108,44.8519786],[2.5103705,44.6022057],[2.125849,44.5826468],[2.0049994,44.9725746],[2.3071235,45.4678399],[2.4334662,45.4408666],[2.4114936,45.7291949],[2.3455756,45.8240183],[2.5488227,45.9797905],[2.4609321,46.2216563],[2.2137397,46.3393472],[2.2782844,46.5390305],[2.5488227,46.5664179],[2.493891,46.6682909]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/CRAIG","terms_text":"CRAIG - IGN -TopoGEODIS - Feder Auvergne-Rhône-Alpes 2016"},{"id":"BANO","name":"BANO","type":"tms","template":"http://{switch:a,b,c}.layers.openstreetmap.fr/bano/{zoom}/{x}/{y}.png","scaleExtent":[12,20],"polygon":[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.358164,51.32937],[2.548804,51.09759],[2.570482,51.07409],[2.587412,51.01763],[2.598448,51.0051],[2.615575,50.99749],[2.639859,50.95766],[2.642247,50.94578],[2.624519,50.9256],[2.61962,50.91067],[2.623964,50.86071],[2.627811,50.85054],[2.637859,50.83696],[2.651102,50.82906],[2.732666,50.81738],[2.79995,50.73795],[2.816552,50.73092],[2.852648,50.73335],[2.890719,50.7162],[2.904925,50.71536],[2.916096,50.72418],[2.935084,50.75592],[3.007184,50.78377],[3.082183,50.78749],[3.092439,50.79092],[3.114119,50.80566],[3.148768,50.80195],[3.215401,50.73111],[3.221487,50.7267],[3.270507,50.70375],[3.275448,50.67757],[3.265761,50.6604],[3.265877,50.64054],[3.289219,50.60028],[3.292195,50.55037],[3.305598,50.53267],[3.375514,50.50839],[3.389804,50.50884],[3.474798,50.54445],[3.52173,50.53459],[3.532662,50.51873],[3.547788,50.51012],[3.615234,50.50558],[3.673778,50.45642],[3.684152,50.35277],[3.690097,50.34044],[3.702583,50.33482],[3.715758,50.33854],[3.749349,50.36279],[3.841089,50.36558],[3.901887,50.3436],[3.913173,50.34291],[4.026717,50.36904],[4.13761,50.29984],[4.143881,50.29727],[4.214438,50.28167],[4.229037,50.26664],[4.230782,50.25233],[4.170843,50.18579],[4.166015,50.16888],[4.176401,50.1547],[4.211948,50.13602],[4.240742,50.07102],[4.231934,50.05551],[4.181645,50.03436],[4.17177,50.02537],[4.169755,50.01217],[4.176498,50.00065],[4.206331,49.97546],[4.221639,49.97089],[4.308774,49.98145],[4.445423,49.9523],[4.454691,49.95251],[4.658098,50.00609],[4.669358,50.01392],[4.672929,50.02716],[4.66924,50.06972],[4.695168,50.10472],[4.831227,50.17941],[4.881497,50.16436],[4.904786,50.14451],[4.904264,50.12639],[4.880762,50.0815],[4.862772,50.0745],[4.851037,50.06216],[4.843307,50.03884],[4.843307,50.03883],[4.843295,50.03881],[4.826781,49.989],[4.826618,49.97692],[4.833433,49.96696],[4.896542,49.91753],[4.897546,49.89424],[4.879134,49.86942],[4.876249,49.85111],[4.889238,49.81266],[4.897691,49.80204],[4.910979,49.79926],[4.995343,49.81116],[5.01867,49.79272],[5.026862,49.78886],[5.099438,49.77323],[5.134584,49.73462],[5.141201,49.72984],[5.187609,49.70906],[5.196025,49.70732],[5.281572,49.70836],[5.333628,49.67308],[5.343996,49.65049],[5.354398,49.64041],[5.431412,49.60791],[5.482051,49.52815],[5.492943,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.607602,49.53761],[5.640997,49.56095],[5.706759,49.55267],[5.715782,49.55361],[5.775261,49.57414],[5.839902,49.55321],[5.861263,49.52038],[5.875997,49.5114],[5.975162,49.50129],[5.998015,49.47317],[6.016266,49.46597],[6.08635,49.47562],[6.093186,49.47787],[6.173966,49.52187],[6.246435,49.52511],[6.333999,49.48235],[6.344229,49.48037],[6.435145,49.487],[6.5451,49.44384],[6.606389,49.37868],[6.604972,49.33739],[6.616267,49.31869],[6.670133,49.29269],[6.729955,49.22917],[6.743276,49.19086],[6.760259,49.17752],[6.809042,49.17284],[6.824733,49.17826],[6.830928,49.19366],[6.829819,49.21802],[6.851186,49.23136],[6.884528,49.2239],[6.893221,49.22389],[6.937527,49.23369],[7.040549,49.19794],[7.046296,49.17503],[7.054777,49.16313],[7.069081,49.16018],[7.104945,49.16634],[7.143153,49.14159],[7.153499,49.13839],[7.286827,49.13488],[7.29893,49.13856],[7.360948,49.18259],[7.450116,49.19517],[7.50113,49.17672],[7.543788,49.10572],[7.557903,49.09626],[7.629604,49.08527],[7.647217,49.06722],[7.661197,49.06119],[7.754008,49.05963],[7.760731,49.06067],[7.802913,49.07489],[7.855253,49.05329],[7.867297,49.05227],[7.93826,49.06832],[8.080685,49.00688],[8.222498,48.98787],[8.23704,48.97683],[8.235894,48.95817],[8.208878,48.94863],[8.200888,48.94339],[8.158243,48.89753],[8.100873,48.7993],[7.990709,48.74478],[7.985341,48.7409],[7.904217,48.65865],[7.856051,48.63606],[7.848405,48.62977],[7.818424,48.58883],[7.81456,48.57704],[7.814491,48.50968],[7.785465,48.48337],[7.780554,48.47652],[7.745059,48.39484],[7.743573,48.38427],[7.751593,48.32322],[7.71085,48.29841],[7.702411,48.28803],[7.676613,48.21555],[7.596051,48.11698],[7.591652,48.10648],[7.585216,48.04694],[7.591268,48.03035],[7.624373,47.99865],[7.632049,47.97081],[7.575545,47.87436],[7.572802,47.86435],[7.572673,47.83631],[7.545808,47.78793],[7.544185,47.77232],[7.557581,47.72899],[7.535257,47.6989],[7.531364,47.68564],[7.536998,47.67302],[7.600164,47.60822],[7.589675,47.56755],[7.554237,47.55128],[7.54511,47.54283],[7.512557,47.48439],[7.387471,47.42111],[7.326527,47.4273],[7.244354,47.40939],[7.167083,47.4335],[7.152115,47.47612],[7.14279,47.48707],[7.128529,47.48893],[7.080105,47.47718],[7.035575,47.48695],[7.021019,47.48458],[7.012048,47.47287],[7.002995,47.44095],[6.955099,47.40808],[6.947157,47.39698],[6.94818,47.38337],[6.957691,47.37359],[6.971263,47.37218],[7.018004,47.38386],[7.05623,47.37035],[7.070073,47.35005],[7.05958,47.32257],[6.974243,47.27856],[6.963469,47.26233],[6.961339,47.23479],[6.89443,47.19393],[6.889128,47.18922],[6.855453,47.14636],[6.769073,47.10751],[6.760108,47.09953],[6.725613,47.0418],[6.623551,46.9811],[6.481204,46.9445],[6.46892,46.93522],[6.466862,46.91997],[6.475476,46.88771],[6.453496,46.8239],[6.45644,46.80534],[6.467224,46.79104],[6.460984,46.76887],[6.15817,46.59343],[6.148724,46.58069],[6.15152,46.56508],[6.165489,46.54399],[6.158111,46.52456],[6.101739,46.46979],[6.095717,46.45418],[6.097044,46.43317],[6.108289,46.41643],[6.166216,46.38839],[6.178173,46.36922],[6.137482,46.31297],[6.133713,46.30227],[6.130383,46.23737],[6.110298,46.22344],[6.088648,46.23081],[6.077173,46.23123],[6.018573,46.21601],[6.006813,46.20752],[6.003882,46.19332],[6.007866,46.16977],[6.017834,46.15564],[6.03509,46.15456],[6.055639,46.16288],[6.124683,46.15415],[6.137776,46.15702],[6.240258,46.22094],[6.249058,46.23299],[6.247073,46.24777],[6.21148,46.31057],[6.212186,46.32485],[6.239462,46.36705],[6.316478,46.41557],[6.410826,46.42495],[6.417483,46.42682],[6.504978,46.46871],[6.630473,46.47435],[6.746646,46.45695],[6.822442,46.42925],[6.818324,46.38181],[6.804843,46.36179],[6.801885,46.34639],[6.810949,46.33359],[6.864911,46.30038],[6.875036,46.28007],[6.860917,46.2439],[6.826978,46.21188],[6.820746,46.19862],[6.818627,46.16592],[6.822593,46.15261],[6.834266,46.14509],[6.903819,46.12971],[6.904911,46.09595],[6.909323,46.08406],[6.920006,46.07721],[6.948976,46.0699],[7.015561,46.00883],[7.051911,45.93066],[7.045335,45.92217],[7.044967,45.92064],[7.043936,45.92036],[6.995822,45.85822],[6.940965,45.83551],[6.843757,45.82387],[6.831016,45.81711],[6.826141,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.841405,45.71373],[6.907294,45.69124],[6.92419,45.66935],[6.942468,45.66172],[6.971313,45.66528],[7.00597,45.64945],[7.011511,45.63652],[6.997797,45.60877],[6.996431,45.59465],[7.015803,45.52354],[7.027743,45.5102],[7.107198,45.47877],[7.122797,45.44924],[7.13304,45.44001],[7.185604,45.41894],[7.19515,45.40409],[7.170749,45.35069],[7.142319,45.32298],[7.136488,45.30576],[7.14458,45.25048],[7.084166,45.20279],[6.992792,45.19823],[6.981064,45.19368],[6.900091,45.12689],[6.85843,45.11699],[6.782826,45.14228],[6.770557,45.14242],[6.677507,45.11356],[6.665295,45.10289],[6.665008,45.08667],[6.68237,45.04558],[6.696016,45.03395],[6.757442,45.01884],[6.783751,44.9146],[6.794195,44.90161],[6.866981,44.86519],[6.879801,44.86346],[6.936325,44.87461],[7.017954,44.84402],[7.034535,44.82282],[7.037114,44.75009],[7.049604,44.73226],[7.072236,44.72311],[7.086508,44.6968],[7.086656,44.68085],[7.07671,44.67134],[6.990071,44.67203],[6.974128,44.66431],[6.970564,44.64696],[6.978189,44.61784],[6.94659,44.57124],[6.882347,44.53479],[6.872327,44.5195],[6.878925,44.50245],[6.958945,44.43129],[6.958723,44.42908],[6.921668,44.41436],[6.912225,44.40659],[6.909075,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.999091,44.29414],[7.011806,44.256],[7.019835,44.24558],[7.032595,44.2424],[7.073117,44.2461],[7.165097,44.22112],[7.245331,44.18544],[7.260526,44.16682],[7.275371,44.15947],[7.338779,44.1574],[7.362775,44.13834],[7.377763,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.564785,44.15817],[7.605476,44.1634],[7.616198,44.16827],[7.639891,44.18928],[7.686079,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.694448,44.12276],[7.727862,44.08615],[7.724032,44.05704],[7.686028,44.02371],[7.680769,44.0164],[7.660161,43.9672],[7.596244,43.94466],[7.584187,43.93287],[7.568576,43.89159],[7.527096,43.87434],[7.516489,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.369681,41.35052],[9.273114,41.29196],[8.941857,41.27688],[5.8,41.64],[3.173576,42.41768],[3.160814,42.42757],[3.094399,42.41457],[3.034016,42.45331],[3.022142,42.45645],[2.878221,42.4487],[2.870188,42.44653],[2.784238,42.40256],[2.741304,42.41128],[2.729276,42.40998],[2.693308,42.39417],[2.683779,42.3854],[2.681621,42.37263],[2.685852,42.34679],[2.66719,42.33008],[2.581057,42.34418],[2.567769,42.34173],[2.533803,42.32197],[2.477948,42.32986],[2.419327,42.37658],[2.41222,42.38021],[2.267193,42.42055],[2.259731,42.42117],[2.206944,42.41558],[2.206525,42.41526],[2.205257,42.41541],[2.160278,42.41065],[2.148808,42.40545],[2.093931,42.35474],[2.008614,42.33818],[1.964998,42.36473],[1.930762,42.42442],[1.920889,42.43302],[1.884665,42.44761],[1.884588,42.44762],[1.884444,42.4477],[1.827736,42.47056],[1.725668,42.48452],[1.715606,42.50125],[1.727195,42.56103],[1.724794,42.57499],[1.710109,42.59992],[1.69377,42.60975],[1.602827,42.61382],[1.560687,42.6392],[1.546365,42.64166],[1.504443,42.6331],[1.492096,42.62502],[1.472384,42.59703],[1.437922,42.59264],[1.419356,42.60643],[1.38032,42.67415],[1.373353,42.68127],[1.333134,42.70563],[1.323642,42.7085],[1.232212,42.71248],[1.165543,42.69928],[1.085465,42.76635],[1.075637,42.77079],[0.9593748,42.78852],[0.9507323,42.78794],[0.9226515,42.7797],[0.8460624,42.8157],[0.7151135,42.8464],[0.7001699,42.84402],[0.6911674,42.83186],[0.6740937,42.76479],[0.6747382,42.75286],[0.6919171,42.70684],[0.6689955,42.67901],[0.4302428,42.67863],[0.3715037,42.70308],[0.3595376,42.70415],[0.3491168,42.69817],[0.3256688,42.67274],[0.2957095,42.66388],[0.2459353,42.70175],[0.2397249,42.70494],[0.189669,42.72039],[0.1791886,42.72075],[-0.01993262,42.67389],[-0.06725834,42.6848],[-0.1694885,42.77157],[-0.2998662,42.82697],[-0.3168349,42.82635],[-0.3920752,42.78766],[-0.4435404,42.78453],[-0.488418,42.80255],[-0.508683,42.79935],[-0.5449894,42.76906],[-0.5672068,42.76937],[-0.6744552,42.86392],[-0.6809365,42.86775],[-0.7337233,42.88666],[-0.747598,42.93879],[-0.757105,42.95107],[-0.7725328,42.95284],[-0.8211401,42.93865],[-0.9450847,42.94192],[-1.023131,42.98206],[-1.108517,43.00409],[-1.115597,43.00461],[-1.147753,43.00124],[-1.158452,43.01452],[-1.167362,43.02083],[-1.216216,43.0381],[-1.226121,43.03898],[-1.262362,43.03303],[-1.306428,43.05531],[-1.319918,43.05696],[-1.331346,43.0496],[-1.354196,43.0197],[-1.438684,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.476407,43.10248],[-1.434786,43.13087],[-1.427318,43.1404],[-1.394112,43.22935],[-1.395313,43.24596],[-1.408677,43.25591],[-1.526287,43.28099],[-1.546257,43.2737],[-1.571485,43.2412],[-1.610526,43.24223],[-1.650003,43.29323],[-1.669527,43.30065],[-1.733594,43.28856],[-1.756061,43.31966],[-1.762973,43.32565],[-1.791557,43.34067],[-1.800991,43.37017],[-1.785091,43.39037],[-1.783502,43.39686],[-2.7,43.9]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/WikiProject_Base_Adresses_Nationale_Ouverte_(BANO)","terms_text":"Tiles © cquest@Openstreetmap France, data © OpenStreetMap contributors, ODBL","description":"French address registry or Base Adresses Nationale Ouverte","overlay":true},{"id":"lu.geoportail.opendata.basemap","name":"Basemap geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/basemap/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png","endDate":"2010-07-20T00:00:00.000Z","startDate":"2013-07-19T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/carte-de-base-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"basemap.at","name":"basemap.at","type":"tms","template":"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/geolandbasemap/normal/google3857/{zoom}/{y}/{x}.png","scaleExtent":[0,19],"polygon":[[[16.5073284,46.9929304],[16.283417,46.9929304],[16.135839,46.8713046],[15.9831722,46.8190947],[16.0493278,46.655175],[15.8610387,46.7180116],[15.7592608,46.6900933],[15.5607938,46.6796202],[15.5760605,46.6342132],[15.4793715,46.6027553],[15.4335715,46.6516819],[15.2249267,46.6342132],[15.0468154,46.6481886],[14.9908376,46.5887681],[14.9603042,46.6237293],[14.8534374,46.6027553],[14.8330818,46.5012666],[14.7516595,46.4977636],[14.6804149,46.4381781],[14.6142593,46.4381781],[14.578637,46.3785275],[14.4412369,46.4311638],[14.1613476,46.4276563],[14.1257253,46.4767409],[14.0188585,46.4767409],[13.9119917,46.5257813],[13.8254805,46.5047694],[13.4438134,46.560783],[13.3064132,46.5502848],[13.1283019,46.5887681],[12.8433237,46.6132433],[12.7262791,46.6412014],[12.5125455,46.6656529],[12.3598787,46.7040543],[12.3649676,46.7703197],[12.2886341,46.7772902],[12.2733674,46.8852187],[12.2072118,46.8747835],[12.1308784,46.9026062],[12.1156117,46.9998721],[12.2530119,47.0657733],[12.2123007,47.0934969],[11.9833004,47.0449712],[11.7339445,46.9616816],[11.6321666,47.010283],[11.5405665,46.9755722],[11.4998553,47.0068129],[11.418433,46.9651546],[11.2555884,46.9755722],[11.1130993,46.913036],[11.0418548,46.7633482],[10.8891879,46.7598621],[10.7416099,46.7842599],[10.7059877,46.8643462],[10.5787653,46.8399847],[10.4566318,46.8504267],[10.4769874,46.9269392],[10.3853873,46.9894592],[10.2327204,46.8643462],[10.1207647,46.8330223],[9.8663199,46.9408389],[9.9019422,47.0033426],[9.6831197,47.0588402],[9.6118752,47.0380354],[9.6322307,47.128131],[9.5813418,47.1662025],[9.5406306,47.2664422],[9.6067863,47.3492559],[9.6729419,47.369939],[9.6424085,47.4457079],[9.5660751,47.4801122],[9.7136531,47.5282405],[9.7848976,47.5969187],[9.8357866,47.5454185],[9.9477423,47.538548],[10.0902313,47.4491493],[10.1105869,47.3664924],[10.2428982,47.3871688],[10.1869203,47.2698953],[10.3243205,47.2975125],[10.4820763,47.4491493],[10.4311873,47.4869904],[10.4413651,47.5900549],[10.4871652,47.5522881],[10.5482319,47.5351124],[10.5991209,47.5660246],[10.7568766,47.5316766],[10.8891879,47.5454185],[10.9400769,47.4869904],[10.9960547,47.3906141],[11.2352328,47.4422662],[11.2810328,47.3975039],[11.4235219,47.5144941],[11.5761888,47.5076195],[11.6067221,47.5900549],[11.8357224,47.5866227],[12.003656,47.6243647],[12.2072118,47.6037815],[12.1614117,47.6963421],[12.2581008,47.7442718],[12.2530119,47.6792136],[12.4311232,47.7100408],[12.4921899,47.631224],[12.5685234,47.6277944],[12.6295901,47.6894913],[12.7720792,47.6689338],[12.8331459,47.5419833],[12.975635,47.4732332],[13.0417906,47.4938677],[13.0367017,47.5557226],[13.0977685,47.6415112],[13.0316128,47.7100408],[12.9043905,47.7203125],[13.0061684,47.84683],[12.9451016,47.9355501],[12.8636793,47.9594103],[12.8636793,48.0036929],[12.7517236,48.0989418],[12.8738571,48.2109733],[12.9603683,48.2109733],[13.0417906,48.2652035],[13.1842797,48.2990682],[13.2606131,48.2922971],[13.3980133,48.3565867],[13.4438134,48.417418],[13.4387245,48.5523383],[13.509969,48.5860123],[13.6117469,48.5725454],[13.7287915,48.5118999],[13.7847694,48.5725454],[13.8203916,48.6263915],[13.7949471,48.7171267],[13.850925,48.7741724],[14.0595697,48.6633774],[14.0137696,48.6331182],[14.0748364,48.5927444],[14.2173255,48.5961101],[14.3649034,48.5489696],[14.4666813,48.6499311],[14.5582815,48.5961101],[14.5989926,48.6263915],[14.7211261,48.5759124],[14.7211261,48.6868997],[14.822904,48.7271983],[14.8178151,48.777526],[14.9647227,48.7851754],[14.9893637,49.0126611],[15.1485933,48.9950306],[15.1943934,48.9315502],[15.3063491,48.9850128],[15.3928603,48.9850128],[15.4844604,48.9282069],[15.749083,48.8545973],[15.8406831,48.8880697],[16.0086166,48.7808794],[16.2070835,48.7339115],[16.3953727,48.7372678],[16.4920617,48.8110498],[16.6905286,48.7741724],[16.7057953,48.7339115],[16.8991733,48.713769],[16.9755067,48.515271],[16.8482844,48.4511817],[16.8533733,48.3464411],[16.9551512,48.2516513],[16.9907734,48.1498955],[17.0925513,48.1397088],[17.0823736,48.0241182],[17.1739737,48.0207146],[17.0823736,47.8741447],[16.9856845,47.8673174],[17.0823736,47.8092489],[17.0925513,47.7031919],[16.7414176,47.6792136],[16.7057953,47.7511153],[16.5378617,47.7545368],[16.5480395,47.7066164],[16.4208172,47.6689338],[16.573484,47.6175045],[16.670173,47.631224],[16.7108842,47.538548],[16.6599952,47.4491493],[16.5429506,47.3940591],[16.4615283,47.3940591],[16.4920617,47.276801],[16.425906,47.1973317],[16.4717061,47.1489007],[16.5480395,47.1489007],[16.476795,47.0796369],[16.527684,47.0588402],[16.5073284,46.9929304]]],"terms_url":"http://basemap.at/","terms_text":"basemap.at","description":"Basemap of Austria, based on goverment data.","icon":"https://www.basemap.at/images/logo_basemap.jpg"},{"id":"basemap.at-orthofoto","name":"basemap.at Orthofoto","type":"tms","template":"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmaporthofoto30cm/normal/google3857/{zoom}/{y}/{x}.jpeg","scaleExtent":[0,19],"polygon":[[[16.5073284,46.9929304],[16.283417,46.9929304],[16.135839,46.8713046],[15.9831722,46.8190947],[16.0493278,46.655175],[15.8610387,46.7180116],[15.7592608,46.6900933],[15.5607938,46.6796202],[15.5760605,46.6342132],[15.4793715,46.6027553],[15.4335715,46.6516819],[15.2249267,46.6342132],[15.0468154,46.6481886],[14.9908376,46.5887681],[14.9603042,46.6237293],[14.8534374,46.6027553],[14.8330818,46.5012666],[14.7516595,46.4977636],[14.6804149,46.4381781],[14.6142593,46.4381781],[14.578637,46.3785275],[14.4412369,46.4311638],[14.1613476,46.4276563],[14.1257253,46.4767409],[14.0188585,46.4767409],[13.9119917,46.5257813],[13.8254805,46.5047694],[13.4438134,46.560783],[13.3064132,46.5502848],[13.1283019,46.5887681],[12.8433237,46.6132433],[12.7262791,46.6412014],[12.5125455,46.6656529],[12.3598787,46.7040543],[12.3649676,46.7703197],[12.2886341,46.7772902],[12.2733674,46.8852187],[12.2072118,46.8747835],[12.1308784,46.9026062],[12.1156117,46.9998721],[12.2530119,47.0657733],[12.2123007,47.0934969],[11.9833004,47.0449712],[11.7339445,46.9616816],[11.6321666,47.010283],[11.5405665,46.9755722],[11.4998553,47.0068129],[11.418433,46.9651546],[11.2555884,46.9755722],[11.1130993,46.913036],[11.0418548,46.7633482],[10.8891879,46.7598621],[10.7416099,46.7842599],[10.7059877,46.8643462],[10.5787653,46.8399847],[10.4566318,46.8504267],[10.4769874,46.9269392],[10.3853873,46.9894592],[10.2327204,46.8643462],[10.1207647,46.8330223],[9.8663199,46.9408389],[9.9019422,47.0033426],[9.6831197,47.0588402],[9.6118752,47.0380354],[9.6322307,47.128131],[9.5813418,47.1662025],[9.5406306,47.2664422],[9.6067863,47.3492559],[9.6729419,47.369939],[9.6424085,47.4457079],[9.5660751,47.4801122],[9.7136531,47.5282405],[9.7848976,47.5969187],[9.8357866,47.5454185],[9.9477423,47.538548],[10.0902313,47.4491493],[10.1105869,47.3664924],[10.2428982,47.3871688],[10.1869203,47.2698953],[10.3243205,47.2975125],[10.4820763,47.4491493],[10.4311873,47.4869904],[10.4413651,47.5900549],[10.4871652,47.5522881],[10.5482319,47.5351124],[10.5991209,47.5660246],[10.7568766,47.5316766],[10.8891879,47.5454185],[10.9400769,47.4869904],[10.9960547,47.3906141],[11.2352328,47.4422662],[11.2810328,47.3975039],[11.4235219,47.5144941],[11.5761888,47.5076195],[11.6067221,47.5900549],[11.8357224,47.5866227],[12.003656,47.6243647],[12.2072118,47.6037815],[12.1614117,47.6963421],[12.2581008,47.7442718],[12.2530119,47.6792136],[12.4311232,47.7100408],[12.4921899,47.631224],[12.5685234,47.6277944],[12.6295901,47.6894913],[12.7720792,47.6689338],[12.8331459,47.5419833],[12.975635,47.4732332],[13.0417906,47.4938677],[13.0367017,47.5557226],[13.0977685,47.6415112],[13.0316128,47.7100408],[12.9043905,47.7203125],[13.0061684,47.84683],[12.9451016,47.9355501],[12.8636793,47.9594103],[12.8636793,48.0036929],[12.7517236,48.0989418],[12.8738571,48.2109733],[12.9603683,48.2109733],[13.0417906,48.2652035],[13.1842797,48.2990682],[13.2606131,48.2922971],[13.3980133,48.3565867],[13.4438134,48.417418],[13.4387245,48.5523383],[13.509969,48.5860123],[13.6117469,48.5725454],[13.7287915,48.5118999],[13.7847694,48.5725454],[13.8203916,48.6263915],[13.7949471,48.7171267],[13.850925,48.7741724],[14.0595697,48.6633774],[14.0137696,48.6331182],[14.0748364,48.5927444],[14.2173255,48.5961101],[14.3649034,48.5489696],[14.4666813,48.6499311],[14.5582815,48.5961101],[14.5989926,48.6263915],[14.7211261,48.5759124],[14.7211261,48.6868997],[14.822904,48.7271983],[14.8178151,48.777526],[14.9647227,48.7851754],[14.9893637,49.0126611],[15.1485933,48.9950306],[15.1943934,48.9315502],[15.3063491,48.9850128],[15.3928603,48.9850128],[15.4844604,48.9282069],[15.749083,48.8545973],[15.8406831,48.8880697],[16.0086166,48.7808794],[16.2070835,48.7339115],[16.3953727,48.7372678],[16.4920617,48.8110498],[16.6905286,48.7741724],[16.7057953,48.7339115],[16.8991733,48.713769],[16.9755067,48.515271],[16.8482844,48.4511817],[16.8533733,48.3464411],[16.9551512,48.2516513],[16.9907734,48.1498955],[17.0925513,48.1397088],[17.0823736,48.0241182],[17.1739737,48.0207146],[17.0823736,47.8741447],[16.9856845,47.8673174],[17.0823736,47.8092489],[17.0925513,47.7031919],[16.7414176,47.6792136],[16.7057953,47.7511153],[16.5378617,47.7545368],[16.5480395,47.7066164],[16.4208172,47.6689338],[16.573484,47.6175045],[16.670173,47.631224],[16.7108842,47.538548],[16.6599952,47.4491493],[16.5429506,47.3940591],[16.4615283,47.3940591],[16.4920617,47.276801],[16.425906,47.1973317],[16.4717061,47.1489007],[16.5480395,47.1489007],[16.476795,47.0796369],[16.527684,47.0588402],[16.5073284,46.9929304]]],"terms_url":"http://basemap.at/","terms_text":"basemap.at","best":true,"description":"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.","icon":"https://www.basemap.at/images/logo_basemap.jpg"},{"id":"bavaria-2m","name":"Bavaria (2 m)","type":"wms","template":"http://geodaten.bayern.de/ogc/ogc_dop200_oa.cgi?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=adv_dop200c&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","scaleExtent":[8,18],"polygon":[[[10.1235886,50.568462],[10.1428576,50.5507804],[10.2028056,50.5574195],[10.2520485,50.5179575],[10.3269835,50.4934473],[10.4104825,50.4184762],[10.6031724,50.3310874],[10.6224414,50.2271041],[10.7252093,50.2106649],[10.7294913,50.2476451],[10.8515282,50.2435376],[10.7187863,50.3201525],[10.7123633,50.3652428],[10.8558102,50.3966441],[10.9371682,50.3966441],[10.9906932,50.3666085],[11.1277171,50.3666085],[11.1791011,50.3133169],[11.1619731,50.294172],[11.24119,50.2928042],[11.249754,50.3734364],[11.24119,50.479825],[11.358945,50.5234025],[11.4381619,50.5097889],[11.4424439,50.4893611],[11.425316,50.4771001],[11.425316,50.4416618],[11.4895459,50.4225686],[11.4916869,50.3980089],[11.5195199,50.3980089],[11.5259429,50.3761673],[11.5987369,50.4034677],[11.6372748,50.3884544],[11.7935678,50.4212045],[11.8363877,50.3925494],[11.9220277,50.4280246],[11.9862577,50.3870894],[11.9841167,50.3570478],[12.0483466,50.3310874],[12.0933076,50.3297207],[12.1297046,50.2982751],[12.1404096,50.2722826],[12.1061536,50.255859],[12.1125766,50.2353216],[12.1489736,50.236691],[12.1982166,50.2010728],[12.2239086,50.1640565],[12.2046396,50.1434795],[12.2067806,50.1077916],[12.2431775,50.0995522],[12.2774335,50.0720772],[12.4936744,49.985428],[12.4979564,49.9413559],[12.5557634,49.9220616],[12.5493404,49.8682726],[12.4808284,49.7881677],[12.4101755,49.7577484],[12.4615594,49.7065456],[12.5471994,49.6802313],[12.5878784,49.552613],[12.6542493,49.534553],[12.6628133,49.4330153],[12.7527353,49.4107323],[12.7976963,49.3466124],[12.9047462,49.3563752],[12.9968092,49.3368477],[13.0546161,49.2754251],[13.1316921,49.2195199],[13.1916401,49.1439475],[13.236601,49.1215335],[13.296549,49.1229347],[13.371484,49.0808823],[13.414304,49.0289687],[13.414304,48.9798112],[13.5791609,48.9699739],[13.6348268,48.9432629],[13.6776468,48.8869823],[13.7375948,48.8926132],[13.7846968,48.8334571],[13.8403627,48.774231],[13.8168118,48.7064584],[13.8446447,48.7008065],[13.8425037,48.6003807],[13.7654278,48.5422972],[13.7525818,48.5040106],[13.6712238,48.5054291],[13.6433908,48.5437146],[13.4571239,48.5508013],[13.4571239,48.4159838],[13.40574,48.3605338],[13.283703,48.2751083],[13.0931541,48.2694081],[12.9582712,48.1909669],[12.8769132,48.1852574],[12.7720043,48.0938188],[12.8640672,48.0136764],[12.8983232,47.9549216],[12.9454252,47.9563555],[12.9968092,47.8846147],[13.0139372,47.834337],[12.9347202,47.7321953],[13.0588981,47.7249947],[13.1188461,47.6385093],[13.0653211,47.5692178],[13.0567571,47.473792],[13.0032322,47.4520801],[12.7677223,47.5504355],[12.7698633,47.6327385],[12.7398893,47.6731207],[12.6670953,47.6702373],[12.5750324,47.621195],[12.4808284,47.6197519],[12.4144575,47.6702373],[12.2431775,47.6774455],[12.2132036,47.6918589],[12.1917936,47.6817699],[12.2132036,47.6659119],[12.2110626,47.603875],[12.1746656,47.5952129],[12.1382686,47.603875],[11.8920537,47.603875],[11.8513747,47.5793285],[11.6394158,47.5822169],[11.5944549,47.5489905],[11.5901729,47.5128508],[11.5173789,47.498388],[11.4403029,47.5041736],[11.395342,47.4752392],[11.427457,47.4448409],[11.346099,47.4433929],[11.279728,47.3955873],[11.2133571,47.3883402],[11.247613,47.4318076],[11.1020251,47.3926886],[10.9650012,47.3897897],[10.9778472,47.4361524],[10.9178992,47.4752392],[10.8707972,47.4752392],[10.8558102,47.4940484],[10.9007712,47.5142969],[10.8729382,47.5359831],[10.8108493,47.5128508],[10.6438513,47.5489905],[10.5946084,47.5547705],[10.5796214,47.5287553],[10.4618664,47.5403192],[10.4661484,47.4839212],[10.4875584,47.4781333],[10.4875584,47.4129762],[10.4597254,47.4028333],[10.4597254,47.375293],[10.4104825,47.3738431],[10.4083415,47.3433862],[10.3205605,47.2867768],[10.2820225,47.2780622],[10.2841635,47.2620819],[10.1471396,47.2620819],[10.1921006,47.3027497],[10.1942416,47.3738431],[10.1664086,47.3738431],[10.1664086,47.3462876],[10.1000376,47.3433862],[10.0614996,47.3636928],[10.0679226,47.4187712],[10.0936146,47.426014],[10.0957556,47.4419449],[9.9780007,47.485368],[9.9565907,47.5273097],[9.8945017,47.5287553],[9.8559637,47.5085124],[9.8174258,47.544655],[9.8217078,47.5764399],[9.7746058,47.5822169],[9.7382088,47.525864],[9.6739788,47.5345376],[9.5840569,47.564884],[9.6397228,47.6053186],[9.7167988,47.603875],[9.8559637,47.6760039],[9.9780007,47.6558179],[10.0293846,47.6817699],[10.1000376,47.6673537],[10.1321526,47.6760039],[10.1428576,47.7019459],[10.0614996,47.7725005],[10.1128836,47.8098988],[10.0829096,47.8530173],[10.1086016,47.9090177],[10.0764866,47.9649577],[10.1300116,48.020837],[10.1342936,48.1066872],[10.1000376,48.1281274],[10.0550766,48.2622821],[9.9694367,48.3676462],[10.0315256,48.4259299],[10.0293846,48.461436],[10.1235886,48.4770509],[10.1535626,48.4514968],[10.2349205,48.5125212],[10.3162785,48.516776],[10.2991505,48.6187835],[10.2456255,48.6682961],[10.2734585,48.7064584],[10.3698035,48.6838472],[10.4318924,48.6993935],[10.4511614,48.7276471],[10.4019185,48.7460035],[10.4404564,48.8489571],[10.4340334,48.9587289],[10.3376885,49.0205451],[10.2499075,49.0359872],[10.2499075,49.0738701],[10.2006646,49.1033147],[10.2520485,49.1327418],[10.1235886,49.1971401],[10.1193066,49.2628519],[10.1514216,49.2893915],[10.1043196,49.3452175],[10.1407166,49.3940134],[10.1086016,49.445545],[10.1107426,49.5053651],[10.0722046,49.5331635],[10.0165387,49.4761598],[9.9266167,49.478942],[9.9244757,49.5567797],[9.8987837,49.5817727],[9.8559637,49.5387213],[9.8067208,49.5567797],[9.8666687,49.6067529],[9.8538227,49.6441991],[9.8174258,49.6608327],[9.8345537,49.6899277],[9.7960158,49.7203895],[9.7574778,49.7079302],[9.7403498,49.6857723],[9.7060938,49.7162368],[9.6782608,49.7162368],[9.6825428,49.6885426],[9.6204539,49.6913127],[9.6461458,49.78955],[9.5583649,49.7743431],[9.5712109,49.7356133],[9.5069809,49.7522156],[9.4919939,49.7798735],[9.4684429,49.7605146],[9.425623,49.7784909],[9.404213,49.7646636],[9.33356,49.770195],[9.329278,49.7342295],[9.408495,49.725926],[9.427764,49.6982374],[9.414918,49.6441991],[9.380662,49.6386533],[9.359252,49.6497443],[9.339983,49.6372668],[9.31215,49.648358],[9.277894,49.626173],[9.284317,49.6081403],[9.241497,49.5748315],[9.0980501,49.5720547],[9.0659351,49.6081403],[9.1001911,49.6511305],[9.0916271,49.6926978],[9.1301651,49.7120837],[9.1387291,49.7425316],[9.1087551,49.7563653],[9.1365881,49.7909322],[9.1001911,49.78955],[9.0723581,49.8282367],[9.0359611,49.8351418],[9.0166922,50.0267091],[8.9631672,50.0308352],[8.9567442,50.0597083],[9.0017052,50.0707031],[9.0209742,50.1105378],[9.1216011,50.1228936],[9.1558571,50.1132838],[9.1965361,50.1187753],[9.1858311,50.1352462],[9.235074,50.1475956],[9.37638,50.1270115],[9.408495,50.0816953],[9.5219679,50.095432],[9.5048399,50.1421073],[9.5326729,50.1640565],[9.4898529,50.1695422],[9.4941349,50.2435376],[9.6140309,50.221625],[9.6654148,50.2353216],[9.6354408,50.2490142],[9.6675558,50.2722826],[9.7424908,50.3092151],[9.7296448,50.3584137],[9.7703238,50.4293885],[9.8688097,50.4007384],[9.9180527,50.4089259],[10.0358076,50.479825],[10.0379486,50.5111504],[10.1235886,50.568462]]],"terms_url":"www.geodaten.bayern.de","terms_text":"Bayerische Vermessungsverwaltung"},{"id":"bavaria-DOP80","name":"Bavaria DOP 80cm","type":"tms","template":"https://mapproxy.osm.ch/tiles/BAYERNDOP80/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[7,18],"polygon":[[[10.1235886,50.568462],[10.1428576,50.5507804],[10.2028056,50.5574195],[10.2520485,50.5179575],[10.3269835,50.4934473],[10.4104825,50.4184762],[10.6031724,50.3310874],[10.6224414,50.2271041],[10.7252093,50.2106649],[10.7294913,50.2476451],[10.8515282,50.2435376],[10.7187863,50.3201525],[10.7123633,50.3652428],[10.8558102,50.3966441],[10.9371682,50.3966441],[10.9906932,50.3666085],[11.1277171,50.3666085],[11.1791011,50.3133169],[11.1619731,50.294172],[11.24119,50.2928042],[11.249754,50.3734364],[11.24119,50.479825],[11.358945,50.5234025],[11.4381619,50.5097889],[11.4424439,50.4893611],[11.425316,50.4771001],[11.425316,50.4416618],[11.4895459,50.4225686],[11.4916869,50.3980089],[11.5195199,50.3980089],[11.5259429,50.3761673],[11.5987369,50.4034677],[11.6372748,50.3884544],[11.7935678,50.4212045],[11.8363877,50.3925494],[11.9220277,50.4280246],[11.9862577,50.3870894],[11.9841167,50.3570478],[12.0483466,50.3310874],[12.0933076,50.3297207],[12.1297046,50.2982751],[12.1404096,50.2722826],[12.1061536,50.255859],[12.1125766,50.2353216],[12.1489736,50.236691],[12.1982166,50.2010728],[12.2239086,50.1640565],[12.2046396,50.1434795],[12.2067806,50.1077916],[12.2431775,50.0995522],[12.2774335,50.0720772],[12.4936744,49.985428],[12.4979564,49.9413559],[12.5557634,49.9220616],[12.5493404,49.8682726],[12.4808284,49.7881677],[12.4101755,49.7577484],[12.4615594,49.7065456],[12.5471994,49.6802313],[12.5878784,49.552613],[12.6542493,49.534553],[12.6628133,49.4330153],[12.7527353,49.4107323],[12.7976963,49.3466124],[12.9047462,49.3563752],[12.9968092,49.3368477],[13.0546161,49.2754251],[13.1316921,49.2195199],[13.1916401,49.1439475],[13.236601,49.1215335],[13.296549,49.1229347],[13.371484,49.0808823],[13.414304,49.0289687],[13.414304,48.9798112],[13.5791609,48.9699739],[13.6348268,48.9432629],[13.6776468,48.8869823],[13.7375948,48.8926132],[13.7846968,48.8334571],[13.8403627,48.774231],[13.8168118,48.7064584],[13.8446447,48.7008065],[13.8425037,48.6003807],[13.7654278,48.5422972],[13.7525818,48.5040106],[13.6712238,48.5054291],[13.6433908,48.5437146],[13.4571239,48.5508013],[13.4571239,48.4159838],[13.40574,48.3605338],[13.283703,48.2751083],[13.0931541,48.2694081],[12.9582712,48.1909669],[12.8769132,48.1852574],[12.7720043,48.0938188],[12.8640672,48.0136764],[12.8983232,47.9549216],[12.9454252,47.9563555],[12.9968092,47.8846147],[13.0139372,47.834337],[12.9347202,47.7321953],[13.0588981,47.7249947],[13.1188461,47.6385093],[13.0653211,47.5692178],[13.0567571,47.473792],[13.0032322,47.4520801],[12.7677223,47.5504355],[12.7698633,47.6327385],[12.7398893,47.6731207],[12.6670953,47.6702373],[12.5750324,47.621195],[12.4808284,47.6197519],[12.4144575,47.6702373],[12.2431775,47.6774455],[12.2132036,47.6918589],[12.1917936,47.6817699],[12.2132036,47.6659119],[12.2110626,47.603875],[12.1746656,47.5952129],[12.1382686,47.603875],[11.8920537,47.603875],[11.8513747,47.5793285],[11.6394158,47.5822169],[11.5944549,47.5489905],[11.5901729,47.5128508],[11.5173789,47.498388],[11.4403029,47.5041736],[11.395342,47.4752392],[11.427457,47.4448409],[11.346099,47.4433929],[11.279728,47.3955873],[11.2133571,47.3883402],[11.247613,47.4318076],[11.1020251,47.3926886],[10.9650012,47.3897897],[10.9778472,47.4361524],[10.9178992,47.4752392],[10.8707972,47.4752392],[10.8558102,47.4940484],[10.9007712,47.5142969],[10.8729382,47.5359831],[10.8108493,47.5128508],[10.6438513,47.5489905],[10.5946084,47.5547705],[10.5796214,47.5287553],[10.4618664,47.5403192],[10.4661484,47.4839212],[10.4875584,47.4781333],[10.4875584,47.4129762],[10.4597254,47.4028333],[10.4597254,47.375293],[10.4104825,47.3738431],[10.4083415,47.3433862],[10.3205605,47.2867768],[10.2820225,47.2780622],[10.2841635,47.2620819],[10.1471396,47.2620819],[10.1921006,47.3027497],[10.1942416,47.3738431],[10.1664086,47.3738431],[10.1664086,47.3462876],[10.1000376,47.3433862],[10.0614996,47.3636928],[10.0679226,47.4187712],[10.0936146,47.426014],[10.0957556,47.4419449],[9.9780007,47.485368],[9.9565907,47.5273097],[9.8945017,47.5287553],[9.8559637,47.5085124],[9.8174258,47.544655],[9.8217078,47.5764399],[9.7746058,47.5822169],[9.7382088,47.525864],[9.6739788,47.5345376],[9.5840569,47.564884],[9.6397228,47.6053186],[9.7167988,47.603875],[9.8559637,47.6760039],[9.9780007,47.6558179],[10.0293846,47.6817699],[10.1000376,47.6673537],[10.1321526,47.6760039],[10.1428576,47.7019459],[10.0614996,47.7725005],[10.1128836,47.8098988],[10.0829096,47.8530173],[10.1086016,47.9090177],[10.0764866,47.9649577],[10.1300116,48.020837],[10.1342936,48.1066872],[10.1000376,48.1281274],[10.0550766,48.2622821],[9.9694367,48.3676462],[10.0315256,48.4259299],[10.0293846,48.461436],[10.1235886,48.4770509],[10.1535626,48.4514968],[10.2349205,48.5125212],[10.3162785,48.516776],[10.2991505,48.6187835],[10.2456255,48.6682961],[10.2734585,48.7064584],[10.3698035,48.6838472],[10.4318924,48.6993935],[10.4511614,48.7276471],[10.4019185,48.7460035],[10.4404564,48.8489571],[10.4340334,48.9587289],[10.3376885,49.0205451],[10.2499075,49.0359872],[10.2499075,49.0738701],[10.2006646,49.1033147],[10.2520485,49.1327418],[10.1235886,49.1971401],[10.1193066,49.2628519],[10.1514216,49.2893915],[10.1043196,49.3452175],[10.1407166,49.3940134],[10.1086016,49.445545],[10.1107426,49.5053651],[10.0722046,49.5331635],[10.0165387,49.4761598],[9.9266167,49.478942],[9.9244757,49.5567797],[9.8987837,49.5817727],[9.8559637,49.5387213],[9.8067208,49.5567797],[9.8666687,49.6067529],[9.8538227,49.6441991],[9.8174258,49.6608327],[9.8345537,49.6899277],[9.7960158,49.7203895],[9.7574778,49.7079302],[9.7403498,49.6857723],[9.7060938,49.7162368],[9.6782608,49.7162368],[9.6825428,49.6885426],[9.6204539,49.6913127],[9.6461458,49.78955],[9.5583649,49.7743431],[9.5712109,49.7356133],[9.5069809,49.7522156],[9.4919939,49.7798735],[9.4684429,49.7605146],[9.425623,49.7784909],[9.404213,49.7646636],[9.33356,49.770195],[9.329278,49.7342295],[9.408495,49.725926],[9.427764,49.6982374],[9.414918,49.6441991],[9.380662,49.6386533],[9.359252,49.6497443],[9.339983,49.6372668],[9.31215,49.648358],[9.277894,49.626173],[9.284317,49.6081403],[9.241497,49.5748315],[9.0980501,49.5720547],[9.0659351,49.6081403],[9.1001911,49.6511305],[9.0916271,49.6926978],[9.1301651,49.7120837],[9.1387291,49.7425316],[9.1087551,49.7563653],[9.1365881,49.7909322],[9.1001911,49.78955],[9.0723581,49.8282367],[9.0359611,49.8351418],[9.0166922,50.0267091],[8.9631672,50.0308352],[8.9567442,50.0597083],[9.0017052,50.0707031],[9.0209742,50.1105378],[9.1216011,50.1228936],[9.1558571,50.1132838],[9.1965361,50.1187753],[9.1858311,50.1352462],[9.235074,50.1475956],[9.37638,50.1270115],[9.408495,50.0816953],[9.5219679,50.095432],[9.5048399,50.1421073],[9.5326729,50.1640565],[9.4898529,50.1695422],[9.4941349,50.2435376],[9.6140309,50.221625],[9.6654148,50.2353216],[9.6354408,50.2490142],[9.6675558,50.2722826],[9.7424908,50.3092151],[9.7296448,50.3584137],[9.7703238,50.4293885],[9.8688097,50.4007384],[9.9180527,50.4089259],[10.0358076,50.479825],[10.0379486,50.5111504],[10.1235886,50.568462]]],"terms_url":"www.geodaten.bayern.de","terms_text":"Bayerische Vermessungsverwaltung","best":true},{"id":"route500hydro","name":"BD Carthage","type":"tms","template":"http://{switch:a,b,c}.tile.openstreetmap.fr/route500hydro/{zoom}/{x}/{y}.png","scaleExtent":[6,20],"polygon":[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.358164,51.32937],[2.548804,51.09759],[2.570482,51.07409],[2.587412,51.01763],[2.598448,51.0051],[2.615575,50.99749],[2.639859,50.95766],[2.642247,50.94578],[2.624519,50.9256],[2.61962,50.91067],[2.623964,50.86071],[2.627811,50.85054],[2.637859,50.83696],[2.651102,50.82906],[2.732666,50.81738],[2.79995,50.73795],[2.816552,50.73092],[2.852648,50.73335],[2.890719,50.7162],[2.904925,50.71536],[2.916096,50.72418],[2.935084,50.75592],[3.007184,50.78377],[3.082183,50.78749],[3.092439,50.79092],[3.114119,50.80566],[3.148768,50.80195],[3.215401,50.73111],[3.221487,50.7267],[3.270507,50.70375],[3.275448,50.67757],[3.265761,50.6604],[3.265877,50.64054],[3.289219,50.60028],[3.292195,50.55037],[3.305598,50.53267],[3.375514,50.50839],[3.389804,50.50884],[3.474798,50.54445],[3.52173,50.53459],[3.532662,50.51873],[3.547788,50.51012],[3.615234,50.50558],[3.673778,50.45642],[3.684152,50.35277],[3.690097,50.34044],[3.702583,50.33482],[3.715758,50.33854],[3.749349,50.36279],[3.841089,50.36558],[3.901887,50.3436],[3.913173,50.34291],[4.026717,50.36904],[4.13761,50.29984],[4.143881,50.29727],[4.214438,50.28167],[4.229037,50.26664],[4.230782,50.25233],[4.170843,50.18579],[4.166015,50.16888],[4.176401,50.1547],[4.211948,50.13602],[4.240742,50.07102],[4.231934,50.05551],[4.181645,50.03436],[4.17177,50.02537],[4.169755,50.01217],[4.176498,50.00065],[4.206331,49.97546],[4.221639,49.97089],[4.308774,49.98145],[4.445423,49.9523],[4.454691,49.95251],[4.658098,50.00609],[4.669358,50.01392],[4.672929,50.02716],[4.66924,50.06972],[4.695168,50.10472],[4.831227,50.17941],[4.881497,50.16436],[4.904786,50.14451],[4.904264,50.12639],[4.880762,50.0815],[4.862772,50.0745],[4.851037,50.06216],[4.843307,50.03884],[4.843307,50.03883],[4.843295,50.03881],[4.826781,49.989],[4.826618,49.97692],[4.833433,49.96696],[4.896542,49.91753],[4.897546,49.89424],[4.879134,49.86942],[4.876249,49.85111],[4.889238,49.81266],[4.897691,49.80204],[4.910979,49.79926],[4.995343,49.81116],[5.01867,49.79272],[5.026862,49.78886],[5.099438,49.77323],[5.134584,49.73462],[5.141201,49.72984],[5.187609,49.70906],[5.196025,49.70732],[5.281572,49.70836],[5.333628,49.67308],[5.343996,49.65049],[5.354398,49.64041],[5.431412,49.60791],[5.482051,49.52815],[5.492943,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.607602,49.53761],[5.640997,49.56095],[5.706759,49.55267],[5.715782,49.55361],[5.775261,49.57414],[5.839902,49.55321],[5.861263,49.52038],[5.875997,49.5114],[5.975162,49.50129],[5.998015,49.47317],[6.016266,49.46597],[6.08635,49.47562],[6.093186,49.47787],[6.173966,49.52187],[6.246435,49.52511],[6.333999,49.48235],[6.344229,49.48037],[6.435145,49.487],[6.5451,49.44384],[6.606389,49.37868],[6.604972,49.33739],[6.616267,49.31869],[6.670133,49.29269],[6.729955,49.22917],[6.743276,49.19086],[6.760259,49.17752],[6.809042,49.17284],[6.824733,49.17826],[6.830928,49.19366],[6.829819,49.21802],[6.851186,49.23136],[6.884528,49.2239],[6.893221,49.22389],[6.937527,49.23369],[7.040549,49.19794],[7.046296,49.17503],[7.054777,49.16313],[7.069081,49.16018],[7.104945,49.16634],[7.143153,49.14159],[7.153499,49.13839],[7.286827,49.13488],[7.29893,49.13856],[7.360948,49.18259],[7.450116,49.19517],[7.50113,49.17672],[7.543788,49.10572],[7.557903,49.09626],[7.629604,49.08527],[7.647217,49.06722],[7.661197,49.06119],[7.754008,49.05963],[7.760731,49.06067],[7.802913,49.07489],[7.855253,49.05329],[7.867297,49.05227],[7.93826,49.06832],[8.080685,49.00688],[8.222498,48.98787],[8.23704,48.97683],[8.235894,48.95817],[8.208878,48.94863],[8.200888,48.94339],[8.158243,48.89753],[8.100873,48.7993],[7.990709,48.74478],[7.985341,48.7409],[7.904217,48.65865],[7.856051,48.63606],[7.848405,48.62977],[7.818424,48.58883],[7.81456,48.57704],[7.814491,48.50968],[7.785465,48.48337],[7.780554,48.47652],[7.745059,48.39484],[7.743573,48.38427],[7.751593,48.32322],[7.71085,48.29841],[7.702411,48.28803],[7.676613,48.21555],[7.596051,48.11698],[7.591652,48.10648],[7.585216,48.04694],[7.591268,48.03035],[7.624373,47.99865],[7.632049,47.97081],[7.575545,47.87436],[7.572802,47.86435],[7.572673,47.83631],[7.545808,47.78793],[7.544185,47.77232],[7.557581,47.72899],[7.535257,47.6989],[7.531364,47.68564],[7.536998,47.67302],[7.600164,47.60822],[7.589675,47.56755],[7.554237,47.55128],[7.54511,47.54283],[7.512557,47.48439],[7.387471,47.42111],[7.326527,47.4273],[7.244354,47.40939],[7.167083,47.4335],[7.152115,47.47612],[7.14279,47.48707],[7.128529,47.48893],[7.080105,47.47718],[7.035575,47.48695],[7.021019,47.48458],[7.012048,47.47287],[7.002995,47.44095],[6.955099,47.40808],[6.947157,47.39698],[6.94818,47.38337],[6.957691,47.37359],[6.971263,47.37218],[7.018004,47.38386],[7.05623,47.37035],[7.070073,47.35005],[7.05958,47.32257],[6.974243,47.27856],[6.963469,47.26233],[6.961339,47.23479],[6.89443,47.19393],[6.889128,47.18922],[6.855453,47.14636],[6.769073,47.10751],[6.760108,47.09953],[6.725613,47.0418],[6.623551,46.9811],[6.481204,46.9445],[6.46892,46.93522],[6.466862,46.91997],[6.475476,46.88771],[6.453496,46.8239],[6.45644,46.80534],[6.467224,46.79104],[6.460984,46.76887],[6.15817,46.59343],[6.148724,46.58069],[6.15152,46.56508],[6.165489,46.54399],[6.158111,46.52456],[6.101739,46.46979],[6.095717,46.45418],[6.097044,46.43317],[6.108289,46.41643],[6.166216,46.38839],[6.178173,46.36922],[6.137482,46.31297],[6.133713,46.30227],[6.130383,46.23737],[6.110298,46.22344],[6.088648,46.23081],[6.077173,46.23123],[6.018573,46.21601],[6.006813,46.20752],[6.003882,46.19332],[6.007866,46.16977],[6.017834,46.15564],[6.03509,46.15456],[6.055639,46.16288],[6.124683,46.15415],[6.137776,46.15702],[6.240258,46.22094],[6.249058,46.23299],[6.247073,46.24777],[6.21148,46.31057],[6.212186,46.32485],[6.239462,46.36705],[6.316478,46.41557],[6.410826,46.42495],[6.417483,46.42682],[6.504978,46.46871],[6.630473,46.47435],[6.746646,46.45695],[6.822442,46.42925],[6.818324,46.38181],[6.804843,46.36179],[6.801885,46.34639],[6.810949,46.33359],[6.864911,46.30038],[6.875036,46.28007],[6.860917,46.2439],[6.826978,46.21188],[6.820746,46.19862],[6.818627,46.16592],[6.822593,46.15261],[6.834266,46.14509],[6.903819,46.12971],[6.904911,46.09595],[6.909323,46.08406],[6.920006,46.07721],[6.948976,46.0699],[7.015561,46.00883],[7.051911,45.93066],[7.045335,45.92217],[7.044967,45.92064],[7.043936,45.92036],[6.995822,45.85822],[6.940965,45.83551],[6.843757,45.82387],[6.831016,45.81711],[6.826141,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.841405,45.71373],[6.907294,45.69124],[6.92419,45.66935],[6.942468,45.66172],[6.971313,45.66528],[7.00597,45.64945],[7.011511,45.63652],[6.997797,45.60877],[6.996431,45.59465],[7.015803,45.52354],[7.027743,45.5102],[7.107198,45.47877],[7.122797,45.44924],[7.13304,45.44001],[7.185604,45.41894],[7.19515,45.40409],[7.170749,45.35069],[7.142319,45.32298],[7.136488,45.30576],[7.14458,45.25048],[7.084166,45.20279],[6.992792,45.19823],[6.981064,45.19368],[6.900091,45.12689],[6.85843,45.11699],[6.782826,45.14228],[6.770557,45.14242],[6.677507,45.11356],[6.665295,45.10289],[6.665008,45.08667],[6.68237,45.04558],[6.696016,45.03395],[6.757442,45.01884],[6.783751,44.9146],[6.794195,44.90161],[6.866981,44.86519],[6.879801,44.86346],[6.936325,44.87461],[7.017954,44.84402],[7.034535,44.82282],[7.037114,44.75009],[7.049604,44.73226],[7.072236,44.72311],[7.086508,44.6968],[7.086656,44.68085],[7.07671,44.67134],[6.990071,44.67203],[6.974128,44.66431],[6.970564,44.64696],[6.978189,44.61784],[6.94659,44.57124],[6.882347,44.53479],[6.872327,44.5195],[6.878925,44.50245],[6.958945,44.43129],[6.958723,44.42908],[6.921668,44.41436],[6.912225,44.40659],[6.909075,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.999091,44.29414],[7.011806,44.256],[7.019835,44.24558],[7.032595,44.2424],[7.073117,44.2461],[7.165097,44.22112],[7.245331,44.18544],[7.260526,44.16682],[7.275371,44.15947],[7.338779,44.1574],[7.362775,44.13834],[7.377763,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.564785,44.15817],[7.605476,44.1634],[7.616198,44.16827],[7.639891,44.18928],[7.686079,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.694448,44.12276],[7.727862,44.08615],[7.724032,44.05704],[7.686028,44.02371],[7.680769,44.0164],[7.660161,43.9672],[7.596244,43.94466],[7.584187,43.93287],[7.568576,43.89159],[7.527096,43.87434],[7.516489,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.369681,41.35052],[9.273114,41.29196],[8.941857,41.27688],[5.8,41.64],[3.173576,42.41768],[3.160814,42.42757],[3.094399,42.41457],[3.034016,42.45331],[3.022142,42.45645],[2.878221,42.4487],[2.870188,42.44653],[2.784238,42.40256],[2.741304,42.41128],[2.729276,42.40998],[2.693308,42.39417],[2.683779,42.3854],[2.681621,42.37263],[2.685852,42.34679],[2.66719,42.33008],[2.581057,42.34418],[2.567769,42.34173],[2.533803,42.32197],[2.477948,42.32986],[2.419327,42.37658],[2.41222,42.38021],[2.267193,42.42055],[2.259731,42.42117],[2.206944,42.41558],[2.206525,42.41526],[2.205257,42.41541],[2.160278,42.41065],[2.148808,42.40545],[2.093931,42.35474],[2.008614,42.33818],[1.964998,42.36473],[1.930762,42.42442],[1.920889,42.43302],[1.884665,42.44761],[1.884588,42.44762],[1.884444,42.4477],[1.827736,42.47056],[1.725668,42.48452],[1.715606,42.50125],[1.727195,42.56103],[1.724794,42.57499],[1.710109,42.59992],[1.69377,42.60975],[1.602827,42.61382],[1.560687,42.6392],[1.546365,42.64166],[1.504443,42.6331],[1.492096,42.62502],[1.472384,42.59703],[1.437922,42.59264],[1.419356,42.60643],[1.38032,42.67415],[1.373353,42.68127],[1.333134,42.70563],[1.323642,42.7085],[1.232212,42.71248],[1.165543,42.69928],[1.085465,42.76635],[1.075637,42.77079],[0.9593748,42.78852],[0.9507323,42.78794],[0.9226515,42.7797],[0.8460624,42.8157],[0.7151135,42.8464],[0.7001699,42.84402],[0.6911674,42.83186],[0.6740937,42.76479],[0.6747382,42.75286],[0.6919171,42.70684],[0.6689955,42.67901],[0.4302428,42.67863],[0.3715037,42.70308],[0.3595376,42.70415],[0.3491168,42.69817],[0.3256688,42.67274],[0.2957095,42.66388],[0.2459353,42.70175],[0.2397249,42.70494],[0.189669,42.72039],[0.1791886,42.72075],[-0.01993262,42.67389],[-0.06725834,42.6848],[-0.1694885,42.77157],[-0.2998662,42.82697],[-0.3168349,42.82635],[-0.3920752,42.78766],[-0.4435404,42.78453],[-0.488418,42.80255],[-0.508683,42.79935],[-0.5449894,42.76906],[-0.5672068,42.76937],[-0.6744552,42.86392],[-0.6809365,42.86775],[-0.7337233,42.88666],[-0.747598,42.93879],[-0.757105,42.95107],[-0.7725328,42.95284],[-0.8211401,42.93865],[-0.9450847,42.94192],[-1.023131,42.98206],[-1.108517,43.00409],[-1.115597,43.00461],[-1.147753,43.00124],[-1.158452,43.01452],[-1.167362,43.02083],[-1.216216,43.0381],[-1.226121,43.03898],[-1.262362,43.03303],[-1.306428,43.05531],[-1.319918,43.05696],[-1.331346,43.0496],[-1.354196,43.0197],[-1.438684,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.476407,43.10248],[-1.434786,43.13087],[-1.427318,43.1404],[-1.394112,43.22935],[-1.395313,43.24596],[-1.408677,43.25591],[-1.526287,43.28099],[-1.546257,43.2737],[-1.571485,43.2412],[-1.610526,43.24223],[-1.650003,43.29323],[-1.669527,43.30065],[-1.733594,43.28856],[-1.756061,43.31966],[-1.762973,43.32565],[-1.791557,43.34067],[-1.800991,43.37017],[-1.785091,43.39037],[-1.783502,43.39686],[-2.7,43.9]]],"terms_url":"http://www.sandre.eaufrance.fr/actualite/la-bd-carthage-en-licence-ouverte-open-licence","terms_text":"Tiles © cquest@Openstreetmap France, data © Onema - IGN, LO/OL","description":"Réseau hydrographique: cours et plans d'eau et POI","overlay":true},{"id":"fr.ign.bdortho","name":"BDOrtho IGN","type":"tms","template":"https://proxy-ign.openstreetmap.fr/94GjiyqD/bdortho/{zoom}/{x}/{y}.jpg","scaleExtent":[2,21],"polygon":[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.358164,51.32937],[2.548804,51.09759],[2.570482,51.07409],[2.587412,51.01763],[2.598448,51.0051],[2.615575,50.99749],[2.639859,50.95766],[2.642247,50.94578],[2.624519,50.9256],[2.61962,50.91067],[2.623964,50.86071],[2.627811,50.85054],[2.637859,50.83696],[2.651102,50.82906],[2.732666,50.81738],[2.79995,50.73795],[2.816552,50.73092],[2.852648,50.73335],[2.890719,50.7162],[2.904925,50.71536],[2.916096,50.72418],[2.935084,50.75592],[3.007184,50.78377],[3.082183,50.78749],[3.092439,50.79092],[3.114119,50.80566],[3.148768,50.80195],[3.215401,50.73111],[3.221487,50.7267],[3.270507,50.70375],[3.275448,50.67757],[3.265761,50.6604],[3.265877,50.64054],[3.289219,50.60028],[3.292195,50.55037],[3.305598,50.53267],[3.375514,50.50839],[3.389804,50.50884],[3.474798,50.54445],[3.52173,50.53459],[3.532662,50.51873],[3.547788,50.51012],[3.615234,50.50558],[3.673778,50.45642],[3.684152,50.35277],[3.690097,50.34044],[3.702583,50.33482],[3.715758,50.33854],[3.749349,50.36279],[3.841089,50.36558],[3.901887,50.3436],[3.913173,50.34291],[4.026717,50.36904],[4.13761,50.29984],[4.143881,50.29727],[4.214438,50.28167],[4.229037,50.26664],[4.230782,50.25233],[4.170843,50.18579],[4.166015,50.16888],[4.176401,50.1547],[4.211948,50.13602],[4.240742,50.07102],[4.231934,50.05551],[4.181645,50.03436],[4.17177,50.02537],[4.169755,50.01217],[4.176498,50.00065],[4.206331,49.97546],[4.221639,49.97089],[4.308774,49.98145],[4.445423,49.9523],[4.454691,49.95251],[4.658098,50.00609],[4.669358,50.01392],[4.672929,50.02716],[4.66924,50.06972],[4.695168,50.10472],[4.831227,50.17941],[4.881497,50.16436],[4.904786,50.14451],[4.904264,50.12639],[4.880762,50.0815],[4.862772,50.0745],[4.851037,50.06216],[4.843307,50.03884],[4.843307,50.03883],[4.843295,50.03881],[4.826781,49.989],[4.826618,49.97692],[4.833433,49.96696],[4.896542,49.91753],[4.897546,49.89424],[4.879134,49.86942],[4.876249,49.85111],[4.889238,49.81266],[4.897691,49.80204],[4.910979,49.79926],[4.995343,49.81116],[5.01867,49.79272],[5.026862,49.78886],[5.099438,49.77323],[5.134584,49.73462],[5.141201,49.72984],[5.187609,49.70906],[5.196025,49.70732],[5.281572,49.70836],[5.333628,49.67308],[5.343996,49.65049],[5.354398,49.64041],[5.431412,49.60791],[5.482051,49.52815],[5.492943,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.607602,49.53761],[5.640997,49.56095],[5.706759,49.55267],[5.715782,49.55361],[5.775261,49.57414],[5.839902,49.55321],[5.861263,49.52038],[5.875997,49.5114],[5.975162,49.50129],[5.998015,49.47317],[6.016266,49.46597],[6.08635,49.47562],[6.093186,49.47787],[6.173966,49.52187],[6.246435,49.52511],[6.333999,49.48235],[6.344229,49.48037],[6.435145,49.487],[6.5451,49.44384],[6.606389,49.37868],[6.604972,49.33739],[6.616267,49.31869],[6.670133,49.29269],[6.729955,49.22917],[6.743276,49.19086],[6.760259,49.17752],[6.809042,49.17284],[6.824733,49.17826],[6.830928,49.19366],[6.829819,49.21802],[6.851186,49.23136],[6.884528,49.2239],[6.893221,49.22389],[6.937527,49.23369],[7.040549,49.19794],[7.046296,49.17503],[7.054777,49.16313],[7.069081,49.16018],[7.104945,49.16634],[7.143153,49.14159],[7.153499,49.13839],[7.286827,49.13488],[7.29893,49.13856],[7.360948,49.18259],[7.450116,49.19517],[7.50113,49.17672],[7.543788,49.10572],[7.557903,49.09626],[7.629604,49.08527],[7.647217,49.06722],[7.661197,49.06119],[7.754008,49.05963],[7.760731,49.06067],[7.802913,49.07489],[7.855253,49.05329],[7.867297,49.05227],[7.93826,49.06832],[8.080685,49.00688],[8.222498,48.98787],[8.23704,48.97683],[8.235894,48.95817],[8.208878,48.94863],[8.200888,48.94339],[8.158243,48.89753],[8.100873,48.7993],[7.990709,48.74478],[7.985341,48.7409],[7.904217,48.65865],[7.856051,48.63606],[7.848405,48.62977],[7.818424,48.58883],[7.81456,48.57704],[7.814491,48.50968],[7.785465,48.48337],[7.780554,48.47652],[7.745059,48.39484],[7.743573,48.38427],[7.751593,48.32322],[7.71085,48.29841],[7.702411,48.28803],[7.676613,48.21555],[7.596051,48.11698],[7.591652,48.10648],[7.585216,48.04694],[7.591268,48.03035],[7.624373,47.99865],[7.632049,47.97081],[7.575545,47.87436],[7.572802,47.86435],[7.572673,47.83631],[7.545808,47.78793],[7.544185,47.77232],[7.557581,47.72899],[7.535257,47.6989],[7.531364,47.68564],[7.536998,47.67302],[7.600164,47.60822],[7.589675,47.56755],[7.554237,47.55128],[7.54511,47.54283],[7.512557,47.48439],[7.387471,47.42111],[7.326527,47.4273],[7.244354,47.40939],[7.167083,47.4335],[7.152115,47.47612],[7.14279,47.48707],[7.128529,47.48893],[7.080105,47.47718],[7.035575,47.48695],[7.021019,47.48458],[7.012048,47.47287],[7.002995,47.44095],[6.955099,47.40808],[6.947157,47.39698],[6.94818,47.38337],[6.957691,47.37359],[6.971263,47.37218],[7.018004,47.38386],[7.05623,47.37035],[7.070073,47.35005],[7.05958,47.32257],[6.974243,47.27856],[6.963469,47.26233],[6.961339,47.23479],[6.89443,47.19393],[6.889128,47.18922],[6.855453,47.14636],[6.769073,47.10751],[6.760108,47.09953],[6.725613,47.0418],[6.623551,46.9811],[6.481204,46.9445],[6.46892,46.93522],[6.466862,46.91997],[6.475476,46.88771],[6.453496,46.8239],[6.45644,46.80534],[6.467224,46.79104],[6.460984,46.76887],[6.15817,46.59343],[6.148724,46.58069],[6.15152,46.56508],[6.165489,46.54399],[6.158111,46.52456],[6.101739,46.46979],[6.095717,46.45418],[6.097044,46.43317],[6.108289,46.41643],[6.166216,46.38839],[6.178173,46.36922],[6.137482,46.31297],[6.133713,46.30227],[6.130383,46.23737],[6.110298,46.22344],[6.088648,46.23081],[6.077173,46.23123],[6.018573,46.21601],[6.006813,46.20752],[6.003882,46.19332],[6.007866,46.16977],[6.017834,46.15564],[6.03509,46.15456],[6.055639,46.16288],[6.124683,46.15415],[6.137776,46.15702],[6.240258,46.22094],[6.249058,46.23299],[6.247073,46.24777],[6.21148,46.31057],[6.212186,46.32485],[6.239462,46.36705],[6.316478,46.41557],[6.410826,46.42495],[6.417483,46.42682],[6.504978,46.46871],[6.630473,46.47435],[6.746646,46.45695],[6.822442,46.42925],[6.818324,46.38181],[6.804843,46.36179],[6.801885,46.34639],[6.810949,46.33359],[6.864911,46.30038],[6.875036,46.28007],[6.860917,46.2439],[6.826978,46.21188],[6.820746,46.19862],[6.818627,46.16592],[6.822593,46.15261],[6.834266,46.14509],[6.903819,46.12971],[6.904911,46.09595],[6.909323,46.08406],[6.920006,46.07721],[6.948976,46.0699],[7.015561,46.00883],[7.051911,45.93066],[7.045335,45.92217],[7.044967,45.92064],[7.043936,45.92036],[6.995822,45.85822],[6.940965,45.83551],[6.843757,45.82387],[6.831016,45.81711],[6.826141,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.841405,45.71373],[6.907294,45.69124],[6.92419,45.66935],[6.942468,45.66172],[6.971313,45.66528],[7.00597,45.64945],[7.011511,45.63652],[6.997797,45.60877],[6.996431,45.59465],[7.015803,45.52354],[7.027743,45.5102],[7.107198,45.47877],[7.122797,45.44924],[7.13304,45.44001],[7.185604,45.41894],[7.19515,45.40409],[7.170749,45.35069],[7.142319,45.32298],[7.136488,45.30576],[7.14458,45.25048],[7.084166,45.20279],[6.992792,45.19823],[6.981064,45.19368],[6.900091,45.12689],[6.85843,45.11699],[6.782826,45.14228],[6.770557,45.14242],[6.677507,45.11356],[6.665295,45.10289],[6.665008,45.08667],[6.68237,45.04558],[6.696016,45.03395],[6.757442,45.01884],[6.783751,44.9146],[6.794195,44.90161],[6.866981,44.86519],[6.879801,44.86346],[6.936325,44.87461],[7.017954,44.84402],[7.034535,44.82282],[7.037114,44.75009],[7.049604,44.73226],[7.072236,44.72311],[7.086508,44.6968],[7.086656,44.68085],[7.07671,44.67134],[6.990071,44.67203],[6.974128,44.66431],[6.970564,44.64696],[6.978189,44.61784],[6.94659,44.57124],[6.882347,44.53479],[6.872327,44.5195],[6.878925,44.50245],[6.958945,44.43129],[6.958723,44.42908],[6.921668,44.41436],[6.912225,44.40659],[6.909075,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.999091,44.29414],[7.011806,44.256],[7.019835,44.24558],[7.032595,44.2424],[7.073117,44.2461],[7.165097,44.22112],[7.245331,44.18544],[7.260526,44.16682],[7.275371,44.15947],[7.338779,44.1574],[7.362775,44.13834],[7.377763,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.564785,44.15817],[7.605476,44.1634],[7.616198,44.16827],[7.639891,44.18928],[7.686079,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.694448,44.12276],[7.727862,44.08615],[7.724032,44.05704],[7.686028,44.02371],[7.680769,44.0164],[7.660161,43.9672],[7.596244,43.94466],[7.584187,43.93287],[7.568576,43.89159],[7.527096,43.87434],[7.516489,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.369681,41.35052],[9.273114,41.29196],[8.941857,41.27688],[5.8,41.64],[3.173576,42.41768],[3.160814,42.42757],[3.094399,42.41457],[3.034016,42.45331],[3.022142,42.45645],[2.878221,42.4487],[2.870188,42.44653],[2.784238,42.40256],[2.741304,42.41128],[2.729276,42.40998],[2.693308,42.39417],[2.683779,42.3854],[2.681621,42.37263],[2.685852,42.34679],[2.66719,42.33008],[2.581057,42.34418],[2.567769,42.34173],[2.533803,42.32197],[2.477948,42.32986],[2.419327,42.37658],[2.41222,42.38021],[2.267193,42.42055],[2.259731,42.42117],[2.206944,42.41558],[2.206525,42.41526],[2.205257,42.41541],[2.160278,42.41065],[2.148808,42.40545],[2.093931,42.35474],[2.008614,42.33818],[1.964998,42.36473],[1.930762,42.42442],[1.920889,42.43302],[1.884665,42.44761],[1.884588,42.44762],[1.884444,42.4477],[1.827736,42.47056],[1.725668,42.48452],[1.715606,42.50125],[1.727195,42.56103],[1.724794,42.57499],[1.710109,42.59992],[1.69377,42.60975],[1.602827,42.61382],[1.560687,42.6392],[1.546365,42.64166],[1.504443,42.6331],[1.492096,42.62502],[1.472384,42.59703],[1.437922,42.59264],[1.419356,42.60643],[1.38032,42.67415],[1.373353,42.68127],[1.333134,42.70563],[1.323642,42.7085],[1.232212,42.71248],[1.165543,42.69928],[1.085465,42.76635],[1.075637,42.77079],[0.9593748,42.78852],[0.9507323,42.78794],[0.9226515,42.7797],[0.8460624,42.8157],[0.7151135,42.8464],[0.7001699,42.84402],[0.6911674,42.83186],[0.6740937,42.76479],[0.6747382,42.75286],[0.6919171,42.70684],[0.6689955,42.67901],[0.4302428,42.67863],[0.3715037,42.70308],[0.3595376,42.70415],[0.3491168,42.69817],[0.3256688,42.67274],[0.2957095,42.66388],[0.2459353,42.70175],[0.2397249,42.70494],[0.189669,42.72039],[0.1791886,42.72075],[-0.01993262,42.67389],[-0.06725834,42.6848],[-0.1694885,42.77157],[-0.2998662,42.82697],[-0.3168349,42.82635],[-0.3920752,42.78766],[-0.4435404,42.78453],[-0.488418,42.80255],[-0.508683,42.79935],[-0.5449894,42.76906],[-0.5672068,42.76937],[-0.6744552,42.86392],[-0.6809365,42.86775],[-0.7337233,42.88666],[-0.747598,42.93879],[-0.757105,42.95107],[-0.7725328,42.95284],[-0.8211401,42.93865],[-0.9450847,42.94192],[-1.023131,42.98206],[-1.108517,43.00409],[-1.115597,43.00461],[-1.147753,43.00124],[-1.158452,43.01452],[-1.167362,43.02083],[-1.216216,43.0381],[-1.226121,43.03898],[-1.262362,43.03303],[-1.306428,43.05531],[-1.319918,43.05696],[-1.331346,43.0496],[-1.354196,43.0197],[-1.438684,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.476407,43.10248],[-1.434786,43.13087],[-1.427318,43.1404],[-1.394112,43.22935],[-1.395313,43.24596],[-1.408677,43.25591],[-1.526287,43.28099],[-1.546257,43.2737],[-1.571485,43.2412],[-1.610526,43.24223],[-1.650003,43.29323],[-1.669527,43.30065],[-1.733594,43.28856],[-1.756061,43.31966],[-1.762973,43.32565],[-1.791557,43.34067],[-1.800991,43.37017],[-1.785091,43.39037],[-1.783502,43.39686],[-2.7,43.9]],[[-61.2750098,14.9021787],[-60.7236843,14.9010106],[-60.7248947,14.3668637],[-61.2762202,14.3680347],[-61.2750098,14.9021787]],[[-61.9280191,16.5861824],[-61.9268639,15.7393966],[-60.8812792,15.7407152],[-60.8824344,16.5874955],[-61.9280191,16.5861824]],[[-53.8934381,6.0040017],[-52.4652154,5.4464962],[-51.5203912,4.5107197],[-51.5368707,4.1163329],[-52.2345025,3.1021265],[-52.6409967,2.251623],[-52.9266412,2.0759672],[-53.7286431,2.2186891],[-54.2010552,2.0320501],[-54.8053033,2.2735786],[-54.3109185,2.8058902],[-54.3164117,3.2008539],[-54.124151,3.4640797],[-54.1296441,3.5956655],[-54.4207818,4.0012658],[-54.5800836,4.9596205],[-53.8934381,6.0040017]],[[55.088162,-20.7793549],[55.9595858,-20.7728126],[55.9657599,-21.4900002],[55.0943361,-21.496511],[55.088162,-20.7793549]],[[44.9205447,-12.5736261],[45.3482619,-12.5702887],[45.3527389,-13.116298],[44.9250218,-13.1196281],[44.9205447,-12.5736261]],[[-178.577276,-14.7058162],[-178.4256804,-14.0033368],[-176.3415582,-12.8385765],[-175.7153375,-12.9189012],[-175.9185845,-13.587255],[-177.8463838,-14.6498253],[-178.577276,-14.7058162]]],"terms_url":"http://openstreetmap.fr/bdortho","terms_text":"BDOrtho IGN","best":true,"icon":"http://www.ign.fr/institut/sites/all/themes/ign_institut/logo.png"},{"id":"GRB","name":"Belgium AGIV GRB Flanders","type":"tms","template":"http://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=grb_bsk&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,21],"polygon":[[[5.9849448,50.7072276],[5.9849448,50.7671973],[5.9107871,50.8227527],[5.7556052,50.8353303],[5.7542319,50.8626424],[5.8331961,50.9332328],[5.8551688,51.026611],[5.9094138,51.0775439],[5.9121604,51.1822548],[5.8785147,51.2080728],[5.7741446,51.2368858],[5.684194,51.2407548],[5.6230826,51.2699769],[5.6230826,51.2978925],[5.5399985,51.34724],[5.4473013,51.3485267],[5.3985495,51.321071],[5.3120322,51.3232166],[5.2667136,51.3618196],[5.1994223,51.3725369],[5.1829428,51.3961061],[5.1589102,51.4923992],[5.0833792,51.5308596],[5.0325675,51.539829],[4.9556632,51.5052229],[4.9014182,51.5056503],[4.8382468,51.5436725],[4.7709555,51.5586163],[4.711904,51.5470886],[4.6404929,51.4966741],[4.6144003,51.4971016],[4.5656485,51.5317139],[4.4825644,51.5304324],[4.4262595,51.5218884],[4.3006034,51.4697351],[4.2951102,51.4256575],[4.181127,51.4243731],[4.1371817,51.3952492],[4.138555,51.3506709],[4.0520377,51.3004685],[3.933248,51.272984],[3.8652701,51.2708361],[3.8632102,51.2901637],[3.7629599,51.3240748],[3.5933585,51.359247],[3.4773154,51.3313688],[3.425817,51.3973913],[3.2356162,51.3515286],[3.2260031,51.3656781],[3.1779379,51.3618196],[3.1600852,51.3322268],[3.0625815,51.3021857],[2.7508444,51.1702014],[2.4700064,51.0745241],[2.4926657,50.9937771],[2.5311179,50.9557299],[2.5091452,50.9115907],[2.5304312,50.8214514],[2.5990958,50.7641572],[2.6650138,50.7645915],[2.7700705,50.66677],[2.8970999,50.6589354],[2.991857,50.7254874],[3.1133933,50.7263567],[3.2369895,50.7059231],[3.3626456,50.6585001],[3.4711356,50.7020092],[3.6393637,50.6672052],[3.6984152,50.681565],[3.727941,50.7124454],[3.8185782,50.6841754],[3.8748831,50.6415206],[4.0925498,50.642827],[4.150228,50.6632881],[4.2065329,50.6441333],[4.3136496,50.642827],[4.452352,50.6876557],[4.5347495,50.6780842],[4.6130271,50.6954855],[4.6768851,50.6959204],[4.7270102,50.732007],[4.7805686,50.732007],[4.7997946,50.7128802],[4.8622794,50.7128802],[4.8856253,50.6954855],[4.9611563,50.6954855],[5.0311942,50.6576295],[5.1074118,50.6502288],[5.2007956,50.6489227],[5.2358145,50.6654643],[5.3250784,50.6658995],[5.3669638,50.6820001],[5.4212088,50.6641586],[5.5221457,50.6746032],[5.622396,50.7241834],[5.6752677,50.69853],[5.7398123,50.6972252],[5.7727713,50.6719923],[5.8125968,50.6602413],[5.9080405,50.659806],[5.9849448,50.7072276]]],"terms_text":"GRB Flanders © AGIV","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAABm0lEQVQ4y6WTPUgCYRjHf5oFJVfRUZKVHYFBoBAUFLZE0FBD0NQHRENESzS019LSFNHWx1DQEhGRg0JFREM11FJuLWem4GB5HULdwdkgHprn5LO97/O8v+fj/7y2bDabpQKzFx5S6ntlgE81xvHtclHAbuSNloNT5q/uywP021cAvO4hAPYu5/hI5e6GWpsBCEfjxNSMNUALPvJ7eA3AQPcML3KIzbNhlvdEWmu+6RCcAISiCWtA3fosPztBfrYvAGgX/QCIggdR8DDe6Qbg5E0uAdjyKhhykq+uBeySi9qVCfSAB61HRBQ8RFJpRs6vALiZHMUnNpYO0Ujn+jPkJJnVfbTBNeqfFQB8YqP56H8VJqBKcuHcWsQuuXIOyUX1sN8MnPJKlnOwWS2SIScx0hkcvV3mXUzN0HcSAuBoNMBYZxsADittVXcT/XcPKE/PltqHowkTYLcMkOMoml52+wr9jnIZAJZ8XjYGe0vaUDSdsBxnulsqrUDRdMLReNHg8tYhOAs2M2HdQiSVBqChprpI7/9q5JPYKv3OfxL1n52ATYYBAAAAAElFTkSuQmCC"},{"id":"AGIV","name":"Belgium AGIV Orthophoto Flanders","type":"tms","template":"http://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=omwrgbmrvl&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,21],"polygon":[[[2.522393220658428,51.101723961331],[3.1260610915867457,51.34117672029327],[3.174929443042849,51.382459567439525],[3.3761520666856217,51.38784154353026],[3.410647373595811,51.33040116175589],[3.4020235468682634,51.28547573497245],[3.4911364230529203,51.256700377228974],[3.4825125963253734,51.30345118353617],[3.5773746903283947,51.323216048914524],[3.813092620881357,51.27288873325703],[3.8217164476089045,51.236906864834886],[3.9309515861578386,51.236906864834886],[4.054559769252684,51.27468708752057],[4.20116482362099,51.35194974615148],[4.169544125619984,51.38066543475199],[4.342020660170932,51.395016527087456],[4.3650175314443915,51.46491366130351],[4.5374940659953396,51.50071687469512],[4.571989372905529,51.479238319799464],[4.560490937268798,51.44879304380801],[4.638105377816725,51.45058450468522],[4.750215125274841,51.5239738914927],[4.8364533925503155,51.507874144493115],[5.080795149830825,51.49892738159079],[5.135412719105292,51.447001512638565],[5.106666630013469,51.391429175957505],[5.264770120018504,51.31782647548482],[5.264770120018504,51.28727359653538],[5.4085005654776275,51.292666758936925],[5.486115006025553,51.325012432665545],[5.5809771000285755,51.28367780302667],[5.583851708937758,51.23510703218069],[5.767826679125435,51.20449910348059],[5.8770618176743685,51.161253258857485],[5.704585283123422,50.80292546633848],[5.905807906766195,50.7865720955422],[5.9374286047672005,50.732019528192964],[5.902933297857012,50.70107817444857],[5.8138204216723555,50.69379488717487],[5.615472406938765,50.761122144578216],[5.500488050571466,50.71200098472672],[5.204403332925673,50.70289881954383],[5.164158808197117,50.67558172042608],[5.037676016193088,50.70107817444857],[4.988807664736986,50.750210783384084],[4.916942442007425,50.72656077355532],[4.790459650003396,50.766576871275696],[4.681224511454462,50.77021300246129],[4.6697260758177315,50.73565834458533],[4.287403090896464,50.67922491935501],[3.91082932379356,50.677403355240585],[3.718230526878334,50.752029520237265],[3.6549891308763196,50.71200098472672],[3.5342555566906557,50.710180693059606],[3.514133294326379,50.741116039142966],[3.45664111614273,50.74384464791457],[3.373277457776438,50.69561581502901],[3.310036061774423,50.70745012302645],[3.2899137994101473,50.7365680045137],[3.1648683118607086,50.742935129324266],[3.1318103094051106,50.77203096207303],[3.080067349039826,50.76021296163662],[2.8745328120332805,50.73929687829333],[2.8960923788521487,50.71109084772858],[2.8745328120332805,50.69561581502901],[2.796918371485353,50.70289881954383],[2.699181668573149,50.80020030189157],[2.6201299235706315,50.79747497850781],[2.5698242676599374,50.85830267681076],[2.5669496587507554,50.923581424665855],[2.6028822701155367,50.94984841176044],[2.549702005295661,50.996006093918574],[2.522393220658428,51.101723961331]]],"terms_text":"Orthophoto Flanders most recent © AGIV","best":true,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAABm0lEQVQ4y6WTPUgCYRjHf5oFJVfRUZKVHYFBoBAUFLZE0FBD0NQHRENESzS019LSFNHWx1DQEhGRg0JFREM11FJuLWem4GB5HULdwdkgHprn5LO97/O8v+fj/7y2bDabpQKzFx5S6ntlgE81xvHtclHAbuSNloNT5q/uywP021cAvO4hAPYu5/hI5e6GWpsBCEfjxNSMNUALPvJ7eA3AQPcML3KIzbNhlvdEWmu+6RCcAISiCWtA3fosPztBfrYvAGgX/QCIggdR8DDe6Qbg5E0uAdjyKhhykq+uBeySi9qVCfSAB61HRBQ8RFJpRs6vALiZHMUnNpYO0Ujn+jPkJJnVfbTBNeqfFQB8YqP56H8VJqBKcuHcWsQuuXIOyUX1sN8MnPJKlnOwWS2SIScx0hkcvV3mXUzN0HcSAuBoNMBYZxsADittVXcT/XcPKE/PltqHowkTYLcMkOMoml52+wr9jnIZAJZ8XjYGe0vaUDSdsBxnulsqrUDRdMLReNHg8tYhOAs2M2HdQiSVBqChprpI7/9q5JPYKv3OfxL1n52ATYYBAAAAAElFTkSuQmCC"},{"id":"Benin_cotonou_pleiade_2016","name":"Benin: Cotonou Pleiade 2016","type":"tms","template":"http://geoxxx.agrocampus-ouest.fr/owsifl/gwc/service/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Benin:cotonou_pleiade_2016&STYLE=&FORMAT=image/jpeg&tileMatrixSet=EPSG:3857&tileMatrix=EPSG:3857:{zoom}&tileRow={y}&tileCol={x}","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","scaleExtent":[0,21],"polygon":[[[2.31953818544,6.55745092536],[2.33645249928,6.56023631702],[2.36377172444,6.56211241002],[2.36737717181,6.56067658005],[2.37777373205,6.54939665325],[2.3777926612,6.53484752744],[2.36994151563,6.4933195729],[2.37038356708,6.45527010853],[2.36958186167,6.45269435578],[2.36188103586,6.44177160245],[2.35391742884,6.40545220189],[2.3674929737,6.40149524022],[2.39525870424,6.40071623744],[2.40128040262,6.40374371884],[2.40587684694,6.40340733291],[2.42045897749,6.39382909301],[2.42485054154,6.3979366042],[2.42949152505,6.39887495342],[2.43625257397,6.39628121034],[2.43958410532,6.40041525877],[2.44439433776,6.40189359345],[2.45375647532,6.39899446003],[2.47144744127,6.3963166199],[2.48162019208,6.3910582748],[2.49453210303,6.38739776192],[2.50893162289,6.38888498676],[2.50719014059,6.39228876781],[2.50120407357,6.39162040687],[2.4963025358,6.39521449649],[2.49509997769,6.40123077776],[2.49543290813,6.40400928653],[2.49830345887,6.41022131795],[2.50191336015,6.41281720321],[2.5108701911,6.41321333458],[2.52218648559,6.40849403999],[2.53352059576,6.4051656109],[2.53809922441,6.40960941297],[2.5411100736,6.41090182623],[2.54650822333,6.41099034757],[2.54654385468,6.40651114868],[2.57638511144,6.40723702943],[2.57642074279,6.41176933466],[2.58575615684,6.41196408125],[2.58867792765,6.41095493903],[2.60877400982,6.39413560832],[2.62569890171,6.39487921149],[2.64554556441,6.39728706193],[2.65039142819,6.39339200408],[2.6536650586,6.36823275735],[2.6431181786,6.3665949733],[2.61251084779,6.3628944474],[2.56867983171,6.3607044406],[2.54682890549,6.36055393954],[2.54687344468,6.35546343647],[2.50206702036,6.35461353888],[2.47064016846,6.35595920942],[2.46777184468,6.35202842507],[2.46422652522,6.35020467258],[2.45253944198,6.35006302163],[2.4511320036,6.34813302357],[2.44737289603,6.34629155079],[2.43757427441,6.34653944174],[2.43297783009,6.33841209773],[2.43016295333,6.33706638135],[2.42244876576,6.33706638135],[2.39236031651,6.34114999999],[2.39315311407,6.34114999999],[2.3652849434,6.34445228474],[2.35386064137,6.34529777247],[2.34377474198,6.34457844399],[2.34093759563,6.34533982549],[2.31086028117,6.36567095094],[2.28434610184,6.37465215648],[2.28146887022,6.37761782314],[2.27599054995,6.39517244756],[2.27611525968,6.39819996182],[2.31528747657,6.4926104105],[2.31579967725,6.5530659484],[2.31953818544,6.55745092536]],[[1.69563043958,6.25076170066],[1.70009994721,6.24711901182],[1.70417862346,6.24697179839],[1.75874803806,6.25835802546],[1.77079143482,6.25995187823],[1.81712109941,6.27161341959],[1.84456614779,6.27656750346],[1.85767848509,6.27944518918],[1.88843363033,6.28325588467],[1.90481876292,6.28594870029],[1.90617692982,6.29435189983],[1.90083111364,6.29721233234],[1.89880903445,6.29953873942],[1.89404334121,6.30085024405],[1.89047742238,6.29969866569],[1.88747882146,6.29636150888],[1.88344050885,6.29622344016],[1.86969682855,6.29226563906],[1.8564007671,6.29198230539],[1.85206654725,6.28674503171],[1.84991419093,6.28906373821],[1.84691224958,6.29202989661],[1.8435272712,6.29332703219],[1.84040507404,6.29315437611],[1.83626738336,6.29129499924],[1.83409832485,6.28733273348],[1.83416513363,6.2851988527],[1.83229560117,6.28456355663],[1.82785949792,6.28644177291],[1.82182443779,6.2908379014],[1.81562903657,6.28997904337],[1.81211044063,6.29143113241],[1.80757635117,6.29570768815],[1.80471693522,6.29692955475],[1.80073513171,6.29709778253],[1.79775991387,6.29612383144],[1.79625448928,6.29491967121],[1.79490049792,6.28965143736],[1.79641483036,6.28608317469],[1.80097564333,6.28338261222],[1.79566657198,6.28013306439],[1.79156005874,6.28174455931],[1.78498607441,6.28122215216],[1.78092410036,6.27752986974],[1.77588226414,6.27550220232],[1.76744654171,6.27696318619],[1.75653444036,6.27496207997],[1.74833032171,6.27238985028],[1.74761769468,6.27726423691],[1.74572477914,6.27938486862],[1.73948038482,6.27984972411],[1.73680357955,6.27761398678],[1.73572127725,6.27891558552],[1.72901812928,6.27911038233],[1.72435487617,6.27422273126],[1.72449294765,6.2678607472],[1.72555966124,6.26683029328],[1.69933944056,6.26159387355],[1.69572953928,6.25725948175],[1.69563043958,6.25076170066]]],"best":true},{"id":"Bing","name":"Bing aerial imagery","type":"bing","template":"http://www.bing.com/maps/","scaleExtent":[0,22],"default":true,"description":"Satellite and aerial imagery.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAGsklEQVR4Xu2aa2wUZRSG393Z3VKhW0AjQgvhjhRMxVoFSkTSVhJEGqUkECkXQSyoiBCJicYYo+GPiAS1MQREMI2GhGI0UQilJJSCFcWqoDYol0ChEG6lLdu9et5vu01ZWpg0nZ3dMM9msrAz03SenHO+c76tDe+tDMHittijP7C4FUuSDixJOrAk6cCSpANLkg4sSTqwJOnAkqQDS5IOLEk6MEySzWaDLfrDBMUwSaFAgKag2e0JL8sQSYyi+1PcSlSguQmhUFB9bpfPeSSaNEMkiRWsHP8kKua/jFdycjHA3RsI+BH0eeXwKYmUlSjYDNlPEkmbC+ZgYWa2+u81zw3sO/kvvvrzF1SfOYXTVy6pa+Byhd/jHGMiSfAx1YJB+OVI7ZGMggfHYnvhfFQteg2fF8zGQ2kDYfP7kQjJZ5gkplSkaDNWghIxAalNaSmpWPLIBOQNGYWQ3we7/S6W1B5qYA3SbHYlyxcMwCOCEoWYSGoPZTntWkIV7phLSkQsSTqwJOnAkqQD0yWxfMd7CTddkp8dt6x0Dlnx4rWxNF2S25Wkmkp/03U1CLOXirdtFtMkUQSH3mF97sXXsxagKDsHfZJ7IuBpRkiG4JCMM21du8k9lWmSFPLwJ69eRlb/dGx9di6qZa77UoTljhiNlKQeSlbgRrMSZmYDapqkEGuRw4krDdew/qf96rPhfe/DvMxs7JlbjCNLVuH9/GcwZdRY9JSU9DU1hLdZEO7aY7kvZZokhRKlYfeJWpxvbFBzHXcNyDAR9takPOwtWordz7+ENU/PwmODhqqoCu9LeZVoh6SjZnCEmS7JJVFSW3caFSePh6Oj9XkpgML4PnHgYLyZk4vyomIcfnEVVoq8Ef0GwOlwwN/ciIAIMxJzJaE17ewObPqtGiF5cXUjLNaMElrjvhS3WXqJ0KwB6VibPwPHildjR+ECLMvJQ8YD6YamnumSmGJwOlFx4jhqzteJjFBYXCt8eK5wlEeJPMd7KHD6yAx8Om0m9kiEPTl4ONDiUdd2N93/E7sAo4Y1ZrNEE+sL95vai2q7jq/Wok0YYR6/H/17udGvZ4oYDxgSUfEhSaWcHduP1eD3+jq4NEdbb8Q0u1VXGEYNIyqykWfUgBMXktR6JkX4vCzzeVs/w+Lvv8Ef9efUOdWB33T1rYTbgTtd1XXiQpJCokESCRebGrGpuhKPblqHeTtLsfu/f3CZDSUvib4nRsSPJFCCrG7SYDqTkuGVxnFb1V68XfEDmlubyI7qVCyIK0msMSzGPk8T+qWkYt3MItV9p7tT1fm7bixpT2TM4JyWpGkonjAFh15YjhWPT4abM1z0DVGoNsJATJWkpnx+zSTpxGN6xsMon7cUJdMKMbh3X/XwfHUWPzzPIyzZuEcx7iffAdUcBgLwttxARv80lMr0XzZ7EXIGDlHLfuThO1u1mJY875LI+1nGmqMX6lRTakRQmSbpmteDVGkA1zxVgIMLX8WcseNUz0NBFNhR/Yl8E0xYv7jNsvzHMkzasgFH68/C5nSp+7sbUyRx9JgzZhwqFq9Qg6tbVrO2h+8kbfjw1EZ5LdJlf1hVgclbPsGGyj3w+qXTdjCKDAgjmCSJo8fUYaMwTib5yKTfUeQQPnYkush3tUcxYfN6vCERdPrqJTiS71G1zShBxBRJhAU5Mqh2tD3Lh2bEqQFXBLHuPLf9C8wo3YgjZ0/B5nLBLtGjJEff3M0YJimyMnUGC3Jn0cOiHF75bLggHfjru3Yif2sJymoOS1o5VO2J7AbEAsMkce+HIu4kqz3qWjlYlNlllxyuQtbGtfj4QLkq9EwtLl9GplZHdLsklTryEDv+qkF903U4tfD3abdLi/b9Du9n3cnbVoJl35bizNUrsLt6wGbXbvszjMSQPwdUc5b0QGnSEK6eOAXzM7ORqjpnRsHN4wVTK7JRduxiPd7dtwtlf9fA7/NCEznUEuvIicYQSYTRE+Iej9+H7EFDsXpSLgpHZ6pz0bLONTZgQ/V+OSrR2NwIOFzQtPAcFw8YJomovoYNYksL/4GpIzLwzhP5mChdNQnK0r7x10P46OA+1J47CyQlqesZOYb9Ul3AUEkRmE5B1hOvV4IkCYuzxmPGyDH4oLIcB07Ugr+Gw8Vu2fzU6oiYSCKRblmlEP9eku+aQ+1I8vNYLeddodtXt86gAkYKvyKySzRp7JRlICXxLIjETFJ7KIURFY+p1RGmSEo0LEk6sCTpwJKkA0uSDixJOrAk6cCSpANLkg4sSTqwJOnAkqQDS5IOLEk6sCTp4H8Lf75Du1VW7QAAAABJRU5ErkJggiAgICAgICAgICAgICAgICAgICAgICAg"},{"id":"Bordeaux_2012","name":"Bordeaux - 2012","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/bordeaux_2012/{zoom}/{x}/{y}","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[-0.5992269128228901,45.041932410852176],[-0.542312560140509,45.02756808640373],[-0.509790072893434,45.006014839274926],[-0.4772675856463589,45.002062530648324],[-0.47066145542429677,44.97366975755017],[-0.4554165395272304,44.95101733966983],[-0.4645634890654702,44.91792155099146],[-0.47320227474047455,44.91936089493768],[-0.48793902677430534,44.90928473014602],[-0.49810230403901634,44.89056716544938],[-0.48946351836401203,44.87796537368711],[-0.46659614451841236,44.87076311041642],[-0.4762512579198878,44.84734952959955],[-0.4950533208596031,44.839783107079846],[-0.4909880099537187,44.83185531284354],[-0.46964512769782574,44.825368124499924],[-0.4970859763125452,44.80445999547304],[-0.5245268249272648,44.80013322923096],[-0.5102982367566694,44.76767213918935],[-0.5346901021919757,44.76514662270613],[-0.5621309508066953,44.75107386670688],[-0.5600982953537531,44.7416901252491],[-0.5728023919346418,44.741329181695264],[-0.5946534380537702,44.760095258488434],[-0.6342902193861429,44.73988538494593],[-0.650043299146445,44.7770516622697],[-0.6790086393508712,44.77488729214841],[-0.688155588889111,44.779215951267936],[-0.7150882736405949,44.76839369504671],[-0.7516760717935543,44.74710400814933],[-0.7633638406479719,44.755765166198834],[-0.7384638113494302,44.77560875786918],[-0.7420209583920789,44.785708331523864],[-0.7277923702214837,44.81239155746571],[-0.7399883029391369,44.828611809936305],[-0.7643801683744431,44.82933260413425],[-0.8030006219803447,44.821763815493405],[-0.8400965839965395,44.82753060173851],[-0.8390802562700685,44.840143435448645],[-0.875668054423028,44.8502317148731],[-0.8853231678245034,44.85851719417739],[-0.88684765941421,44.887686999278294],[-0.8660129410215526,44.88696693520083],[-0.8456863864921306,44.8966870397005],[-0.8334904537744775,44.92763642292355],[-0.818245537877411,44.92763642292355],[-0.8019842942538735,44.92223947466319],[-0.7984271472112248,44.94849985224626],[-0.7872475422200427,44.948140202171814],[-0.7557413826994388,44.97007473283782],[-0.7216944038626572,44.95784996320919],[-0.6957780468376442,44.930874348504034],[-0.6886637527523465,44.93447182951288],[-0.6713861814023379,44.93267311717697],[-0.6693535259493957,44.940946727451696],[-0.6251432698479031,44.95065770536977],[-0.6322575639332009,44.95892872413991],[-0.6312412362067297,44.96719855081702],[-0.6002432405493613,44.967558081456815],[-0.5514595096787488,44.97834295278015],[-0.5407880685508023,44.97726455691398],[-0.5545084928581621,44.99739126890938],[-0.5936371103272993,45.01751091397198],[-0.6078656984978945,45.0340324785955],[-0.5992269128228901,45.041932410852176]]],"terms_text":"Communauté urbaine de Bordeaux - 2012"},{"id":"Bordeaux_2016","name":"Bordeaux 2016","type":"tms","template":"http://tms.bordeaux.inria.fr/bdx2016/{zoom}/{x}/{y}.jpg","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","scaleExtent":[14,20],"polygon":[[[-0.5992269128228901,45.041932410852176],[-0.542312560140509,45.02756808640373],[-0.509790072893434,45.006014839274926],[-0.4772675856463589,45.002062530648324],[-0.47066145542429677,44.97366975755017],[-0.4554165395272304,44.95101733966983],[-0.4645634890654702,44.91792155099146],[-0.47320227474047455,44.91936089493768],[-0.48793902677430534,44.90928473014602],[-0.49810230403901634,44.89056716544938],[-0.48946351836401203,44.87796537368711],[-0.46659614451841236,44.87076311041642],[-0.4762512579198878,44.84734952959955],[-0.4950533208596031,44.839783107079846],[-0.4909880099537187,44.83185531284354],[-0.46964512769782574,44.825368124499924],[-0.4970859763125452,44.80445999547304],[-0.5245268249272648,44.80013322923096],[-0.5102982367566694,44.76767213918935],[-0.5346901021919757,44.76514662270613],[-0.5621309508066953,44.75107386670688],[-0.5600982953537531,44.7416901252491],[-0.5728023919346418,44.741329181695264],[-0.5946534380537702,44.760095258488434],[-0.6342902193861429,44.73988538494593],[-0.650043299146445,44.7770516622697],[-0.6790086393508712,44.77488729214841],[-0.688155588889111,44.779215951267936],[-0.7150882736405949,44.76839369504671],[-0.7516760717935543,44.74710400814933],[-0.7633638406479719,44.755765166198834],[-0.7384638113494302,44.77560875786918],[-0.7420209583920789,44.785708331523864],[-0.7277923702214837,44.81239155746571],[-0.7399883029391369,44.828611809936305],[-0.7643801683744431,44.82933260413425],[-0.8030006219803447,44.821763815493405],[-0.8400965839965395,44.82753060173851],[-0.8390802562700685,44.840143435448645],[-0.875668054423028,44.8502317148731],[-0.8853231678245034,44.85851719417739],[-0.88684765941421,44.887686999278294],[-0.8660129410215526,44.88696693520083],[-0.8456863864921306,44.8966870397005],[-0.8334904537744775,44.92763642292355],[-0.818245537877411,44.92763642292355],[-0.8019842942538735,44.92223947466319],[-0.7984271472112248,44.94849985224626],[-0.7872475422200427,44.948140202171814],[-0.7557413826994388,44.97007473283782],[-0.7216944038626572,44.95784996320919],[-0.6957780468376442,44.930874348504034],[-0.6886637527523465,44.93447182951288],[-0.6713861814023379,44.93267311717697],[-0.6693535259493957,44.940946727451696],[-0.6251432698479031,44.95065770536977],[-0.6322575639332009,44.95892872413991],[-0.6312412362067297,44.96719855081702],[-0.6002432405493613,44.967558081456815],[-0.5514595096787488,44.97834295278015],[-0.5407880685508023,44.97726455691398],[-0.5545084928581621,44.99739126890938],[-0.5936371103272993,45.01751091397198],[-0.6078656984978945,45.0340324785955],[-0.5992269128228901,45.041932410852176]]],"terms_text":"Bordeaux Métropole - 2016"},{"id":"branquinha_al","name":"Branquinha AL","type":"wms","template":"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?service=WMS&version=1.1.0&request=GetMap&layers=Branquinha&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-35.96968237108,-9.29279539826],[-35.97062650865,-9.20260556139],[-35.97726765817,-9.20263733363],[-35.98365131562,-9.20270087809],[-35.98765317147,-9.20265851512],[-35.99159065431,-9.20274324105],[-36.00498024171,-9.20283855771],[-36.01473275369,-9.20293387434],[-36.01651374048,-9.20295505581],[-36.01871315187,-9.20293387434],[-36.02487150377,-9.20285973919],[-36.02891627496,-9.20296564655],[-36.03307906335,-9.2028915114],[-36.03769246286,-9.20294446508],[-36.04581419175,-9.20299741875],[-36.05160776323,-9.20305037241],[-36.05456892198,-9.20300800948],[-36.06022301858,-9.20303978168],[-36.06190744584,-9.20303978168],[-36.06180015748,-9.21318555747],[-36.06167141145,-9.21805712081],[-36.06156412309,-9.21914791817],[-36.06162849611,-9.22156248675],[-36.06143537706,-9.22276976485],[-36.06139246171,-9.22716464584],[-36.06133881753,-9.23226899309],[-36.06140319055,-9.23391041686],[-36.06144610589,-9.23493762655],[-36.06130663102,-9.23646255088],[-36.0613280887,-9.23773331611],[-36.06142464822,-9.23904643537],[-36.06144610589,-9.24133379272],[-36.0613602752,-9.24229744345],[-36.06141391938,-9.24357877714],[-36.06139246171,-9.24530486392],[-36.06126371568,-9.24726390922],[-36.06123152917,-9.24948767715],[-36.06127444452,-9.25106548492],[-36.0612100715,-9.25517410549],[-36.06118861383,-9.25794845615],[-36.06107059663,-9.2594521027],[-36.0610920543,-9.26183462807],[-36.06105986779,-9.26492659247],[-36.06085601991,-9.27145986606],[-36.06083456224,-9.27510235154],[-36.06073800271,-9.28273662427],[-36.06080237573,-9.29234011263],[-36.06073800271,-9.29363185173],[-36.05477276986,-9.29356832368],[-36.04621115869,-9.29349420762],[-36.03940907663,-9.29348361961],[-36.03501025384,-9.29338832751],[-36.02978531068,-9.29340950353],[-36.02167431062,-9.29332479942],[-36.01278010553,-9.29328244736],[-36.0046798343,-9.29320833124],[-35.99678341096,-9.29314480312],[-35.98969165033,-9.29312362708],[-35.98483148759,-9.29304951092],[-35.98305050081,-9.29289069053],[-35.98173085397,-9.29294363067],[-35.97884479707,-9.29281657433],[-35.96968237108,-9.29279539826]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"British_Columbia_Mosaic","name":"British Columbia Mosaic","type":"tms","template":"http://{switch:a,b,c,d}.imagery.paulnorman.ca/tiles/bc_mosaic/{zoom}/{x}/{y}.png","endDate":"2013-06-01T00:00:00.000Z","startDate":"2009-01-01T00:00:00.000Z","scaleExtent":[9,20],"polygon":[[[-123.3176032,49.3272567],[-123.4405258,49.3268222],[-123.440717,49.3384429],[-123.4398375,49.3430357],[-123.4401258,49.3435398],[-123.4401106,49.3439946],[-123.4406265,49.3444493],[-123.4404747,49.3455762],[-123.4397768,49.3460606],[-123.4389726,49.3461298],[-123.4372904,49.3567236],[-123.4374774,49.3710843],[-123.4335292,49.3709446],[-123.4330357,49.373725],[-123.4332717,49.3751221],[-123.4322847,49.3761001],[-123.4317482,49.3791736],[-123.4314264,49.3795927],[-123.4307826,49.3823866],[-123.4313405,49.3827358],[-123.4312118,49.3838533],[-123.4300415,49.3845883],[-123.4189858,49.3847087],[-123.4192235,49.4135198],[-123.3972532,49.4135691],[-123.3972758,49.4243473],[-123.4006929,49.4243314],[-123.4007741,49.5703491],[-123.4000812,49.570345],[-123.4010761,49.5933838],[-123.3760399,49.5932848],[-123.3769811,49.6756063],[-123.3507288,49.6756396],[-123.3507969,49.7086751],[-123.332887,49.708722],[-123.3327888,49.7256288],[-123.3007111,49.7255625],[-123.3009164,49.7375384],[-123.2885986,49.737638],[-123.2887823,49.8249207],[-123.2997955,49.8249207],[-123.3011721,49.8497814],[-123.3218218,49.850669],[-123.3273284,49.8577696],[-123.3276726,49.9758852],[-123.3008279,49.9752212],[-123.3007204,50.0997002],[-123.2501716,50.100735],[-123.25091,50.2754901],[-123.0224338,50.2755598],[-123.0224879,50.3254853],[-123.0009318,50.3254689],[-123.0007778,50.3423899],[-122.9775023,50.3423408],[-122.9774766,50.3504306],[-122.9508137,50.3504961],[-122.950795,50.3711984],[-122.9325221,50.3711521],[-122.9321048,50.399793],[-122.8874234,50.3999748],[-122.8873385,50.4256108],[-122.6620152,50.4256959],[-122.6623083,50.3994506],[-122.5990316,50.3992413],[-122.5988274,50.3755206],[-122.5724832,50.3753706],[-122.5735621,50.2493891],[-122.5990415,50.2494643],[-122.5991504,50.2265663],[-122.6185016,50.2266359],[-122.6185741,50.2244081],[-122.6490609,50.2245126],[-122.6492181,50.1993528],[-122.7308575,50.1993758],[-122.7311583,50.1244287],[-122.7490352,50.1245109],[-122.7490541,50.0903032],[-122.7687806,50.0903435],[-122.7689801,49.9494546],[-122.999047,49.9494706],[-122.9991199,49.8754553],[-122.9775894,49.8754553],[-122.9778145,49.6995098],[-122.9992362,49.6994781],[-122.9992524,49.6516526],[-123.0221525,49.6516526],[-123.0221162,49.5995096],[-123.0491898,49.5994625],[-123.0491898,49.5940523],[-123.0664647,49.5940405],[-123.0663594,49.5451868],[-123.0699906,49.5451202],[-123.0699008,49.5413153],[-123.0706835,49.5392837],[-123.0708888,49.5379931],[-123.0711454,49.5368773],[-123.0711069,49.5358115],[-123.0713764,49.532822],[-123.0716458,49.5321141],[-123.07171,49.5313896],[-123.0720308,49.5304153],[-123.0739554,49.5303486],[-123.0748023,49.5294992],[-123.0748151,49.5288079],[-123.0743403,49.5280584],[-123.073532,49.5274588],[-123.0733652,49.5270423],[-123.0732882,49.5255932],[-123.0737116,49.5249602],[-123.0736218,49.5244938],[-123.0992583,49.5244854],[-123.0991649,49.4754502],[-123.071052,49.4755252],[-123.071088,49.4663034],[-123.0739204,49.4663054],[-123.07422,49.4505028],[-123.0746319,49.4500858],[-123.074651,49.449329],[-123.0745999,49.449018],[-123.0744619,49.4486927],[-123.0743336,49.4479899],[-123.0742427,49.4477688],[-123.0743061,49.4447473],[-123.0747103,49.4447556],[-123.0746384,49.4377306],[-122.9996506,49.4377363],[-122.9996506,49.4369214],[-122.8606163,49.4415314],[-122.8102616,49.4423972],[-122.8098984,49.3766739],[-122.4036093,49.3766617],[-122.4036341,49.3771944],[-122.264739,49.3773028],[-122.263542,49.2360088],[-122.2155742,49.236139],[-122.0580956,49.235878],[-121.9538274,49.2966525],[-121.9400911,49.3045389],[-121.9235761,49.3142257],[-121.8990871,49.3225436],[-121.8883447,49.3259752],[-121.8552982,49.3363575],[-121.832697,49.3441519],[-121.7671336,49.3654361],[-121.6736683,49.3654589],[-121.6404153,49.3743775],[-121.5961976,49.3860493],[-121.5861178,49.3879193],[-121.5213684,49.3994649],[-121.5117375,49.4038378],[-121.4679302,49.4229024],[-121.4416803,49.4345607],[-121.422429,49.4345788],[-121.3462885,49.3932312],[-121.3480144,49.3412388],[-121.5135035,49.320577],[-121.6031683,49.2771727],[-121.6584065,49.1856125],[-121.679953,49.1654109],[-121.7815793,49.0702559],[-121.8076228,49.0622471],[-121.9393997,49.0636219],[-121.9725524,49.0424179],[-121.9921394,49.0332869],[-122.0035289,49.0273413],[-122.0178564,49.0241067],[-122.1108634,48.9992786],[-122.1493067,48.9995305],[-122.1492705,48.9991498],[-122.1991447,48.9996019],[-122.199181,48.9991974],[-122.234365,48.9994829],[-122.234365,49.000173],[-122.3994722,49.0012385],[-122.4521338,49.0016326],[-122.4521338,49.000883],[-122.4584089,49.0009306],[-122.4584814,48.9993124],[-122.4992458,48.9995022],[-122.4992458,48.9992906],[-122.5492618,48.9995107],[-122.5492564,48.9993206],[-122.6580785,48.9994212],[-122.6581061,48.9954007],[-122.7067604,48.9955344],[-122.7519761,48.9956392],[-122.7922063,48.9957204],[-122.7921907,48.9994331],[-123.0350417,48.9995724],[-123.0350437,49.0000958],[-123.0397091,49.0000536],[-123.0397444,49.0001812],[-123.0485506,49.0001348],[-123.0485329,49.0004712],[-123.0557122,49.000448],[-123.0556324,49.0002284],[-123.0641365,49.0001293],[-123.064158,48.9999421],[-123.074899,48.9996928],[-123.0750717,49.0006218],[-123.0899573,49.0003726],[-123.109229,48.9999421],[-123.1271193,49.0003046],[-123.1359953,48.9998741],[-123.1362716,49.0005765],[-123.153851,48.9998061],[-123.1540533,49.0006806],[-123.1710015,49.0001274],[-123.2000916,48.9996849],[-123.2003446,49.0497785],[-123.2108845,49.0497232],[-123.2112218,49.051989],[-123.2070479,49.0520857],[-123.2078911,49.0607884],[-123.2191688,49.0600978],[-123.218958,49.0612719],[-123.2251766,49.0612719],[-123.2253874,49.0622388],[-123.2297088,49.0620316],[-123.2298142,49.068592],[-123.2331869,49.0687301],[-123.2335031,49.0705945],[-123.249313,49.0702493],[-123.2497346,49.0802606],[-123.2751358,49.0803986],[-123.2751358,49.0870947],[-123.299483,49.0873018],[-123.29944,49.080253],[-123.3254508,49.0803944],[-123.3254353,49.1154662],[-123.2750966,49.1503341],[-123.275181,49.1873267],[-123.2788067,49.1871063],[-123.278891,49.1910741],[-123.3004767,49.1910741],[-123.3004186,49.2622933],[-123.3126185,49.2622416],[-123.3125958,49.2714948],[-123.3154251,49.2714727],[-123.3156628,49.2818906],[-123.3174735,49.2818832],[-123.3174961,49.2918488],[-123.3190353,49.2918488],[-123.3190692,49.298602],[-123.3202349,49.2985651],[-123.3202786,49.3019749],[-123.3222679,49.3019605],[-123.3223943,49.3118263],[-123.3254002,49.3118086],[-123.3253898,49.3201721],[-123.3192695,49.3201957],[-123.3192242,49.3246748],[-123.3179437,49.3246596],[-123.3179861,49.3254065],[-123.3176032,49.3272567]]],"terms_url":"http://imagery.paulnorman.ca/tiles/about.html","terms_text":"Copyright Province of British Columbia, City of Surrey"},{"id":"Budapest_XI_2015","name":"Budapest district XI orthophoto 2015","type":"wms","template":"http://terinfo.ujbuda.hu/mapproxy/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orto2015_20160304&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","startDate":"2015-01-01T00:00:00.000Z","polygon":[[[19.047674,47.487889],[19.051565,47.489898],[19.064336,47.479203],[19.066498,47.476323],[19.067662,47.473428],[19.068374,47.470774],[19.06846,47.468765],[19.067223,47.465006],[19.056829,47.452588],[19.054896,47.449065],[19.05176,47.434991],[19.048625,47.428997],[19.043844,47.429684],[19.040234,47.429319],[19.035087,47.438181],[19.032205,47.437794],[19.025205,47.442004],[19.020705,47.445763],[19.019153,47.446579],[19.015447,47.447588],[19.01347,47.443613],[19.012663,47.44271],[19.011776,47.442473],[19.011903,47.441883],[19.009799,47.439443],[19.005705,47.431105],[19.000464,47.430974],[18.995338,47.428211],[18.975454,47.428179],[18.973426,47.429037],[18.973615,47.429982],[18.975482,47.430671],[18.977187,47.434024],[18.978227,47.438171],[18.977329,47.446572],[18.970039,47.449876],[18.968611,47.451422],[18.975678,47.455063],[18.975859,47.455563],[18.976247,47.455842],[18.97658,47.455945],[18.977633,47.455967],[18.980167,47.456049],[18.981619,47.460669],[18.977933,47.468574],[18.968669,47.476431],[18.977448,47.481943],[18.980348,47.481687],[18.985653,47.478204],[18.989075,47.478377],[18.991166,47.47898],[18.991766,47.481021],[18.992875,47.481817],[18.998357,47.482378],[18.999022,47.483001],[19.003999,47.481886],[19.004156,47.483992],[19.010272,47.485348],[19.012373,47.484043],[19.0138,47.483506],[19.016739,47.484651],[19.016303,47.485392],[19.016889,47.485946],[19.018085,47.486054],[19.021081,47.484921],[19.021239,47.486124],[19.023013,47.487414],[19.026373,47.488854],[19.029954,47.489037],[19.031349,47.488554],[19.031889,47.487587],[19.032855,47.48712],[19.03364,47.487018],[19.035138,47.487249],[19.035851,47.487292],[19.03616,47.487507],[19.036651,47.487668],[19.037475,47.487738],[19.038474,47.487368],[19.039179,47.486793],[19.041049,47.486492],[19.04181,47.487373],[19.04387,47.488104],[19.045423,47.488169],[19.046945,47.488104],[19.047674,47.487889]]],"terms_url":"http://terinfo.ujbuda.hu/","terms_text":"Budapest XI. kerület önkormányzata","description":"5 cm resolution bald image"},{"id":"Budapest_XI_2017","name":"Budapest district XI orthophoto 2017","type":"wms","template":"http://terinfo.ujbuda.hu/mapproxy/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orto_2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","startDate":"2017-03-01T00:00:00.000Z","polygon":[[[19.047674,47.487889],[19.051565,47.489898],[19.064336,47.479203],[19.066498,47.476323],[19.067662,47.473428],[19.068374,47.470774],[19.06846,47.468765],[19.067223,47.465006],[19.056829,47.452588],[19.054896,47.449065],[19.05176,47.434991],[19.048625,47.428997],[19.043844,47.429684],[19.040234,47.429319],[19.035087,47.438181],[19.032205,47.437794],[19.025205,47.442004],[19.020705,47.445763],[19.019153,47.446579],[19.015447,47.447588],[19.01347,47.443613],[19.012663,47.44271],[19.011776,47.442473],[19.011903,47.441883],[19.009799,47.439443],[19.005705,47.431105],[19.000464,47.430974],[18.995338,47.428211],[18.975454,47.428179],[18.973426,47.429037],[18.973615,47.429982],[18.975482,47.430671],[18.977187,47.434024],[18.978227,47.438171],[18.977329,47.446572],[18.970039,47.449876],[18.968611,47.451422],[18.975678,47.455063],[18.975859,47.455563],[18.976247,47.455842],[18.97658,47.455945],[18.977633,47.455967],[18.980167,47.456049],[18.981619,47.460669],[18.977933,47.468574],[18.968669,47.476431],[18.977448,47.481943],[18.980348,47.481687],[18.985653,47.478204],[18.989075,47.478377],[18.991166,47.47898],[18.991766,47.481021],[18.992875,47.481817],[18.998357,47.482378],[18.999022,47.483001],[19.003999,47.481886],[19.004156,47.483992],[19.010272,47.485348],[19.012373,47.484043],[19.0138,47.483506],[19.016739,47.484651],[19.016303,47.485392],[19.016889,47.485946],[19.018085,47.486054],[19.021081,47.484921],[19.021239,47.486124],[19.023013,47.487414],[19.026373,47.488854],[19.029954,47.489037],[19.031349,47.488554],[19.031889,47.487587],[19.032855,47.48712],[19.03364,47.487018],[19.035138,47.487249],[19.035851,47.487292],[19.03616,47.487507],[19.036651,47.487668],[19.037475,47.487738],[19.038474,47.487368],[19.039179,47.486793],[19.041049,47.486492],[19.04181,47.487373],[19.04387,47.488104],[19.045423,47.488169],[19.046945,47.488104],[19.047674,47.487889]]],"terms_url":"http://terinfo.ujbuda.hu/","terms_text":"Budapest XI. kerület önkormányzata","best":true,"description":"5 cm resolution bald image"},{"id":"Cadastre","name":"Cadastre","type":"tms","template":"http://tms.cadastre.openstreetmap.fr/*/tout/{zoom}/{x}/{y}.png","scaleExtent":[12,22],"polygon":[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.358164,51.32937],[2.548804,51.09759],[2.570482,51.07409],[2.587412,51.01763],[2.598448,51.0051],[2.615575,50.99749],[2.639859,50.95766],[2.642247,50.94578],[2.624519,50.9256],[2.61962,50.91067],[2.623964,50.86071],[2.627811,50.85054],[2.637859,50.83696],[2.651102,50.82906],[2.732666,50.81738],[2.79995,50.73795],[2.816552,50.73092],[2.852648,50.73335],[2.890719,50.7162],[2.904925,50.71536],[2.916096,50.72418],[2.935084,50.75592],[3.007184,50.78377],[3.082183,50.78749],[3.092439,50.79092],[3.114119,50.80566],[3.148768,50.80195],[3.215401,50.73111],[3.221487,50.7267],[3.270507,50.70375],[3.275448,50.67757],[3.265761,50.6604],[3.265877,50.64054],[3.289219,50.60028],[3.292195,50.55037],[3.305598,50.53267],[3.375514,50.50839],[3.389804,50.50884],[3.474798,50.54445],[3.52173,50.53459],[3.532662,50.51873],[3.547788,50.51012],[3.615234,50.50558],[3.673778,50.45642],[3.684152,50.35277],[3.690097,50.34044],[3.702583,50.33482],[3.715758,50.33854],[3.749349,50.36279],[3.841089,50.36558],[3.901887,50.3436],[3.913173,50.34291],[4.026717,50.36904],[4.13761,50.29984],[4.143881,50.29727],[4.214438,50.28167],[4.229037,50.26664],[4.230782,50.25233],[4.170843,50.18579],[4.166015,50.16888],[4.176401,50.1547],[4.211948,50.13602],[4.240742,50.07102],[4.231934,50.05551],[4.181645,50.03436],[4.17177,50.02537],[4.169755,50.01217],[4.176498,50.00065],[4.206331,49.97546],[4.221639,49.97089],[4.308774,49.98145],[4.445423,49.9523],[4.454691,49.95251],[4.658098,50.00609],[4.669358,50.01392],[4.672929,50.02716],[4.66924,50.06972],[4.695168,50.10472],[4.831227,50.17941],[4.881497,50.16436],[4.904786,50.14451],[4.904264,50.12639],[4.880762,50.0815],[4.862772,50.0745],[4.851037,50.06216],[4.843307,50.03884],[4.843307,50.03883],[4.843295,50.03881],[4.826781,49.989],[4.826618,49.97692],[4.833433,49.96696],[4.896542,49.91753],[4.897546,49.89424],[4.879134,49.86942],[4.876249,49.85111],[4.889238,49.81266],[4.897691,49.80204],[4.910979,49.79926],[4.995343,49.81116],[5.01867,49.79272],[5.026862,49.78886],[5.099438,49.77323],[5.134584,49.73462],[5.141201,49.72984],[5.187609,49.70906],[5.196025,49.70732],[5.281572,49.70836],[5.333628,49.67308],[5.343996,49.65049],[5.354398,49.64041],[5.431412,49.60791],[5.482051,49.52815],[5.492943,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.607602,49.53761],[5.640997,49.56095],[5.706759,49.55267],[5.715782,49.55361],[5.775261,49.57414],[5.839902,49.55321],[5.861263,49.52038],[5.875997,49.5114],[5.975162,49.50129],[5.998015,49.47317],[6.016266,49.46597],[6.08635,49.47562],[6.093186,49.47787],[6.173966,49.52187],[6.246435,49.52511],[6.333999,49.48235],[6.344229,49.48037],[6.435145,49.487],[6.5451,49.44384],[6.606389,49.37868],[6.604972,49.33739],[6.616267,49.31869],[6.670133,49.29269],[6.729955,49.22917],[6.743276,49.19086],[6.760259,49.17752],[6.809042,49.17284],[6.824733,49.17826],[6.830928,49.19366],[6.829819,49.21802],[6.851186,49.23136],[6.884528,49.2239],[6.893221,49.22389],[6.937527,49.23369],[7.040549,49.19794],[7.046296,49.17503],[7.054777,49.16313],[7.069081,49.16018],[7.104945,49.16634],[7.143153,49.14159],[7.153499,49.13839],[7.286827,49.13488],[7.29893,49.13856],[7.360948,49.18259],[7.450116,49.19517],[7.50113,49.17672],[7.543788,49.10572],[7.557903,49.09626],[7.629604,49.08527],[7.647217,49.06722],[7.661197,49.06119],[7.754008,49.05963],[7.760731,49.06067],[7.802913,49.07489],[7.855253,49.05329],[7.867297,49.05227],[7.93826,49.06832],[8.080685,49.00688],[8.222498,48.98787],[8.23704,48.97683],[8.235894,48.95817],[8.208878,48.94863],[8.200888,48.94339],[8.158243,48.89753],[8.100873,48.7993],[7.990709,48.74478],[7.985341,48.7409],[7.904217,48.65865],[7.856051,48.63606],[7.848405,48.62977],[7.818424,48.58883],[7.81456,48.57704],[7.814491,48.50968],[7.785465,48.48337],[7.780554,48.47652],[7.745059,48.39484],[7.743573,48.38427],[7.751593,48.32322],[7.71085,48.29841],[7.702411,48.28803],[7.676613,48.21555],[7.596051,48.11698],[7.591652,48.10648],[7.585216,48.04694],[7.591268,48.03035],[7.624373,47.99865],[7.632049,47.97081],[7.575545,47.87436],[7.572802,47.86435],[7.572673,47.83631],[7.545808,47.78793],[7.544185,47.77232],[7.557581,47.72899],[7.535257,47.6989],[7.531364,47.68564],[7.536998,47.67302],[7.600164,47.60822],[7.589675,47.56755],[7.554237,47.55128],[7.54511,47.54283],[7.512557,47.48439],[7.387471,47.42111],[7.326527,47.4273],[7.244354,47.40939],[7.167083,47.4335],[7.152115,47.47612],[7.14279,47.48707],[7.128529,47.48893],[7.080105,47.47718],[7.035575,47.48695],[7.021019,47.48458],[7.012048,47.47287],[7.002995,47.44095],[6.955099,47.40808],[6.947157,47.39698],[6.94818,47.38337],[6.957691,47.37359],[6.971263,47.37218],[7.018004,47.38386],[7.05623,47.37035],[7.070073,47.35005],[7.05958,47.32257],[6.974243,47.27856],[6.963469,47.26233],[6.961339,47.23479],[6.89443,47.19393],[6.889128,47.18922],[6.855453,47.14636],[6.769073,47.10751],[6.760108,47.09953],[6.725613,47.0418],[6.623551,46.9811],[6.481204,46.9445],[6.46892,46.93522],[6.466862,46.91997],[6.475476,46.88771],[6.453496,46.8239],[6.45644,46.80534],[6.467224,46.79104],[6.460984,46.76887],[6.15817,46.59343],[6.148724,46.58069],[6.15152,46.56508],[6.165489,46.54399],[6.158111,46.52456],[6.101739,46.46979],[6.095717,46.45418],[6.097044,46.43317],[6.108289,46.41643],[6.166216,46.38839],[6.178173,46.36922],[6.137482,46.31297],[6.133713,46.30227],[6.130383,46.23737],[6.110298,46.22344],[6.088648,46.23081],[6.077173,46.23123],[6.018573,46.21601],[6.006813,46.20752],[6.003882,46.19332],[6.007866,46.16977],[6.017834,46.15564],[6.03509,46.15456],[6.055639,46.16288],[6.124683,46.15415],[6.137776,46.15702],[6.240258,46.22094],[6.249058,46.23299],[6.247073,46.24777],[6.21148,46.31057],[6.212186,46.32485],[6.239462,46.36705],[6.316478,46.41557],[6.410826,46.42495],[6.417483,46.42682],[6.504978,46.46871],[6.630473,46.47435],[6.746646,46.45695],[6.822442,46.42925],[6.818324,46.38181],[6.804843,46.36179],[6.801885,46.34639],[6.810949,46.33359],[6.864911,46.30038],[6.875036,46.28007],[6.860917,46.2439],[6.826978,46.21188],[6.820746,46.19862],[6.818627,46.16592],[6.822593,46.15261],[6.834266,46.14509],[6.903819,46.12971],[6.904911,46.09595],[6.909323,46.08406],[6.920006,46.07721],[6.948976,46.0699],[7.015561,46.00883],[7.051911,45.93066],[7.045335,45.92217],[7.044967,45.92064],[7.043936,45.92036],[6.995822,45.85822],[6.940965,45.83551],[6.843757,45.82387],[6.831016,45.81711],[6.826141,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.841405,45.71373],[6.907294,45.69124],[6.92419,45.66935],[6.942468,45.66172],[6.971313,45.66528],[7.00597,45.64945],[7.011511,45.63652],[6.997797,45.60877],[6.996431,45.59465],[7.015803,45.52354],[7.027743,45.5102],[7.107198,45.47877],[7.122797,45.44924],[7.13304,45.44001],[7.185604,45.41894],[7.19515,45.40409],[7.170749,45.35069],[7.142319,45.32298],[7.136488,45.30576],[7.14458,45.25048],[7.084166,45.20279],[6.992792,45.19823],[6.981064,45.19368],[6.900091,45.12689],[6.85843,45.11699],[6.782826,45.14228],[6.770557,45.14242],[6.677507,45.11356],[6.665295,45.10289],[6.665008,45.08667],[6.68237,45.04558],[6.696016,45.03395],[6.757442,45.01884],[6.783751,44.9146],[6.794195,44.90161],[6.866981,44.86519],[6.879801,44.86346],[6.936325,44.87461],[7.017954,44.84402],[7.034535,44.82282],[7.037114,44.75009],[7.049604,44.73226],[7.072236,44.72311],[7.086508,44.6968],[7.086656,44.68085],[7.07671,44.67134],[6.990071,44.67203],[6.974128,44.66431],[6.970564,44.64696],[6.978189,44.61784],[6.94659,44.57124],[6.882347,44.53479],[6.872327,44.5195],[6.878925,44.50245],[6.958945,44.43129],[6.958723,44.42908],[6.921668,44.41436],[6.912225,44.40659],[6.909075,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.999091,44.29414],[7.011806,44.256],[7.019835,44.24558],[7.032595,44.2424],[7.073117,44.2461],[7.165097,44.22112],[7.245331,44.18544],[7.260526,44.16682],[7.275371,44.15947],[7.338779,44.1574],[7.362775,44.13834],[7.377763,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.564785,44.15817],[7.605476,44.1634],[7.616198,44.16827],[7.639891,44.18928],[7.686079,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.694448,44.12276],[7.727862,44.08615],[7.724032,44.05704],[7.686028,44.02371],[7.680769,44.0164],[7.660161,43.9672],[7.596244,43.94466],[7.584187,43.93287],[7.568576,43.89159],[7.527096,43.87434],[7.516489,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.369681,41.35052],[9.273114,41.29196],[8.941857,41.27688],[5.8,41.64],[3.173576,42.41768],[3.160814,42.42757],[3.094399,42.41457],[3.034016,42.45331],[3.022142,42.45645],[2.878221,42.4487],[2.870188,42.44653],[2.784238,42.40256],[2.741304,42.41128],[2.729276,42.40998],[2.693308,42.39417],[2.683779,42.3854],[2.681621,42.37263],[2.685852,42.34679],[2.66719,42.33008],[2.581057,42.34418],[2.567769,42.34173],[2.533803,42.32197],[2.477948,42.32986],[2.419327,42.37658],[2.41222,42.38021],[2.267193,42.42055],[2.259731,42.42117],[2.206944,42.41558],[2.206525,42.41526],[2.205257,42.41541],[2.160278,42.41065],[2.148808,42.40545],[2.093931,42.35474],[2.008614,42.33818],[1.964998,42.36473],[1.930762,42.42442],[1.920889,42.43302],[1.884665,42.44761],[1.884588,42.44762],[1.884444,42.4477],[1.827736,42.47056],[1.725668,42.48452],[1.715606,42.50125],[1.727195,42.56103],[1.724794,42.57499],[1.710109,42.59992],[1.69377,42.60975],[1.602827,42.61382],[1.560687,42.6392],[1.546365,42.64166],[1.504443,42.6331],[1.492096,42.62502],[1.472384,42.59703],[1.437922,42.59264],[1.419356,42.60643],[1.38032,42.67415],[1.373353,42.68127],[1.333134,42.70563],[1.323642,42.7085],[1.232212,42.71248],[1.165543,42.69928],[1.085465,42.76635],[1.075637,42.77079],[0.9593748,42.78852],[0.9507323,42.78794],[0.9226515,42.7797],[0.8460624,42.8157],[0.7151135,42.8464],[0.7001699,42.84402],[0.6911674,42.83186],[0.6740937,42.76479],[0.6747382,42.75286],[0.6919171,42.70684],[0.6689955,42.67901],[0.4302428,42.67863],[0.3715037,42.70308],[0.3595376,42.70415],[0.3491168,42.69817],[0.3256688,42.67274],[0.2957095,42.66388],[0.2459353,42.70175],[0.2397249,42.70494],[0.189669,42.72039],[0.1791886,42.72075],[-0.01993262,42.67389],[-0.06725834,42.6848],[-0.1694885,42.77157],[-0.2998662,42.82697],[-0.3168349,42.82635],[-0.3920752,42.78766],[-0.4435404,42.78453],[-0.488418,42.80255],[-0.508683,42.79935],[-0.5449894,42.76906],[-0.5672068,42.76937],[-0.6744552,42.86392],[-0.6809365,42.86775],[-0.7337233,42.88666],[-0.747598,42.93879],[-0.757105,42.95107],[-0.7725328,42.95284],[-0.8211401,42.93865],[-0.9450847,42.94192],[-1.023131,42.98206],[-1.108517,43.00409],[-1.115597,43.00461],[-1.147753,43.00124],[-1.158452,43.01452],[-1.167362,43.02083],[-1.216216,43.0381],[-1.226121,43.03898],[-1.262362,43.03303],[-1.306428,43.05531],[-1.319918,43.05696],[-1.331346,43.0496],[-1.354196,43.0197],[-1.438684,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.476407,43.10248],[-1.434786,43.13087],[-1.427318,43.1404],[-1.394112,43.22935],[-1.395313,43.24596],[-1.408677,43.25591],[-1.526287,43.28099],[-1.546257,43.2737],[-1.571485,43.2412],[-1.610526,43.24223],[-1.650003,43.29323],[-1.669527,43.30065],[-1.733594,43.28856],[-1.756061,43.31966],[-1.762973,43.32565],[-1.791557,43.34067],[-1.800991,43.37017],[-1.785091,43.39037],[-1.783502,43.39686],[-2.7,43.9]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_Cadastre_Fran%C3%A7ais/Conditions_d%27utilisation","terms_text":"cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2015","description":"French land registry","icon":"https://svn.openstreetmap.org/applications/editors/josm/plugins/cadastre-fr/images/cadastre_small.png"},{"id":"lu.geoportail.opendata.cadastre","name":"Cadastre geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/cadastre/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/plan-cadastral-numerise-pcn-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"cajueiro_al","name":"Cajueiro AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Cajueiro&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.10752645677,-9.43884254591],[-36.10751572793,-9.43420690643],[-36.10766593164,-9.42959237236],[-36.10779467767,-9.42361243708],[-36.10768738931,-9.41927295015],[-36.10780540651,-9.41390672873],[-36.10803071206,-9.41094309933],[-36.10809508508,-9.40965179571],[-36.10810581392,-9.40747138685],[-36.1081594581,-9.40693157477],[-36.1081916446,-9.4041795785],[-36.10810581392,-9.40175568673],[-36.10817018693,-9.40001978874],[-36.10826674646,-9.39952230418],[-36.10826674646,-9.39646328763],[-36.10833111947,-9.39474853296],[-36.10832039064,-9.39272680513],[-36.10836330598,-9.39039809877],[-36.10840622133,-9.38447041196],[-36.10847059434,-9.38165472521],[-36.10845986551,-9.37767461773],[-36.10835257714,-9.37572688892],[-36.10844913667,-9.37431901292],[-36.10849205201,-9.37233950842],[-36.10844913667,-9.36970368011],[-36.10867444223,-9.36278056588],[-36.10863152688,-9.36102330087],[-36.10872808641,-9.35927661299],[-36.10873881524,-9.35736053922],[-36.10854569619,-9.35478811418],[-36.1086958999,-9.35230035993],[-36.10870662873,-9.34996079609],[-36.10872808641,-9.34893392374],[-36.11268702691,-9.34908213231],[-36.11725751107,-9.3491244776],[-36.12137738412,-9.34905037333],[-36.12806144899,-9.34910330495],[-36.1321705932,-9.34906095966],[-36.13694492524,-9.34914565024],[-36.14024940675,-9.34913506392],[-36.14134374803,-9.34931503136],[-36.14458385652,-9.34915623657],[-36.14683691209,-9.34913506392],[-36.14842477983,-9.34905037333],[-36.1527592296,-9.34907154598],[-36.15400377458,-9.34921975449],[-36.15626755899,-9.34923034081],[-36.160258686,-9.34920916817],[-36.16085950082,-9.34929385872],[-36.16599861329,-9.34932561767],[-36.16937819665,-9.34942089451],[-36.17175999826,-9.34935737662],[-36.17627683824,-9.34945265345],[-36.18027869409,-9.34936796294],[-36.1822742576,-9.34946323976],[-36.18826094812,-9.34937854925],[-36.19038525766,-9.34945265345],[-36.19353953546,-9.34946323976],[-36.19552437013,-9.3494103082],[-36.19918290323,-9.34950558501],[-36.19925800508,-9.35146404706],[-36.19912925904,-9.35234270483],[-36.19911853021,-9.35352836],[-36.19919363206,-9.35646072192],[-36.19921508973,-9.35770987942],[-36.19930092042,-9.35832387044],[-36.19933310693,-9.3611185745],[-36.19921508973,-9.36177490326],[-36.19918290323,-9.36257943359],[-36.19931164926,-9.36399794306],[-36.19925800508,-9.36499301341],[-36.19921508973,-9.36562816321],[-36.19927946275,-9.36660205731],[-36.19917217439,-9.36795703586],[-36.19917217439,-9.36867686607],[-36.19921508973,-9.36911088062],[-36.19911853021,-9.37016945042],[-36.19887176698,-9.37149265813],[-36.19886103814,-9.37263590554],[-36.19902197068,-9.37321811341],[-36.19915071672,-9.37503882993],[-36.19910780137,-9.37688070785],[-36.19895759767,-9.37747349407],[-36.19898978418,-9.37914599257],[-36.19917217439,-9.38053267826],[-36.19919363206,-9.38124189704],[-36.19925800508,-9.38174999318],[-36.19927946275,-9.38302023029],[-36.19912925904,-9.38374002925],[-36.19907561486,-9.38592058756],[-36.19878593629,-9.38786825912],[-36.19880739396,-9.3893501758],[-36.19902197068,-9.39091676655],[-36.19904342836,-9.39199643982],[-36.19898978418,-9.39347833885],[-36.19879666513,-9.39450507945],[-36.19866791909,-9.39704545549],[-36.19845334237,-9.39949054982],[-36.19863573259,-9.40313169724],[-36.19865719026,-9.40476173338],[-36.19864646142,-9.40836048727],[-36.19875374978,-9.40901672659],[-36.19857135957,-9.41058322831],[-36.19859281724,-9.4127318644],[-36.19874302095,-9.41445711425],[-36.19867864793,-9.41711377049],[-36.19860354608,-9.41901892972],[-36.19846407121,-9.41965398046],[-36.19849625772,-9.42235293308],[-36.19871083444,-9.42428981548],[-36.19858208841,-9.42696756397],[-36.19839969819,-9.42894675602],[-36.19857135957,-9.43412223664],[-36.19871083444,-9.43470434105],[-36.19864646142,-9.43595321629],[-36.19857135957,-9.43626014256],[-36.19859281724,-9.43667290505],[-36.19876447862,-9.43748784493],[-36.19889322465,-9.43905421746],[-36.1988181228,-9.43995382008],[-36.1784977073,-9.43977389974],[-36.17717806047,-9.43967864776],[-36.17265049165,-9.43966806421],[-36.17098752206,-9.43971039843],[-36.16396013444,-9.43962572998],[-36.15386429971,-9.43949872728],[-36.13983098214,-9.43929763957],[-36.12874809449,-9.43912830247],[-36.11497226899,-9.43891663097],[-36.10752645677,-9.43884254591]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"osm-cambodia_laos_thailand_vietnam-bilingual","name":"Cambodia, Laos, Thailand, Vietnam, Malaysia, Myanmar bilingual","type":"tms","template":"http://{switch:a,b,c,d}.tile.osm-tools.org/osm/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[92.1023798,20.8135629],[93.5690546,24.0975527],[94.1733026,23.9269484],[95.1950312,26.707274],[96.7550898,27.5286657],[97.5845575,28.5805966],[98.738122,27.514051],[98.7436151,25.8799151],[97.6779413,24.7577376],[97.9635858,24.042382],[98.8205194,24.1627239],[99.5236444,22.9593356],[100.3695917,21.5051376],[101.7923212,22.4830518],[105.3628778,23.3331079],[106.8185663,22.8480137],[108.1973505,21.3619661],[107.4389505,18.8539792],[117.1453714,7.4656173],[119.6172953,5.2875389],[118.1231546,4.0502277],[117.2552347,4.3624942],[115.8654642,4.3460623],[115.5084085,3.0249771],[114.552598,1.5100953],[113.5418558,1.2574836],[112.9650736,1.5704982],[112.2454691,1.5100953],[111.67418,1.0158321],[110.4546976,0.9004918],[109.4988871,1.9218969],[103.2256937,1.1256762],[100.4626322,3.2388904],[97.6721048,8.0588831],[93.892808,15.9398659],[92.1023798,20.8135629]]],"terms_url":"http://www.osm-tools.org/","terms_text":"© osm-tools.org & OpenStreetMap contributors, CC-BY-SA"},{"id":"campo_alegre_al","name":"Campo Alegre AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Campo%20Alegre&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.30642834848,-9.82332496055],[-36.30602585634,-9.78597356977],[-36.30602065271,-9.78263262201],[-36.30608502572,-9.7816810657],[-36.30604211038,-9.78081408979],[-36.30590263551,-9.77530556809],[-36.30585972017,-9.76496494896],[-36.3054520244,-9.73335957439],[-36.39633599466,-9.73248189831],[-36.39627162164,-9.73744126654],[-36.39635745233,-9.74336280376],[-36.39644328302,-9.7553535947],[-36.39660421556,-9.75855741026],[-36.3966471309,-9.75979451892],[-36.39655057138,-9.76243789809],[-36.39661494439,-9.76489093519],[-36.39658275789,-9.76647694093],[-36.39661494439,-9.76683643452],[-36.39659348672,-9.76959606352],[-36.39670077508,-9.77896382877],[-36.39675441926,-9.78464145418],[-36.39684024995,-9.7906678778],[-36.39692608064,-9.79681048826],[-36.397033369,-9.80298470156],[-36.39719430154,-9.82033320249],[-36.39721575921,-9.82234180629],[-36.39392200654,-9.82233123473],[-36.35375324434,-9.8227858118],[-36.34821716493,-9.82285981267],[-36.31697479432,-9.82316638748],[-36.3119107837,-9.82324038826],[-36.30878869241,-9.82327210287],[-36.30642834848,-9.82332496055]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"Geneve-SITG-2011","name":"Canton de Génève 5cm (SITG 2011)","type":"wms","template":"http://etat.geneve.ch/ags2/services/Orthophotos_2011/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","polygon":[[[6.126755,46.140923],[6.137654,46.141979],[6.143259,46.146112],[6.146397,46.145461],[6.150278,46.150561],[6.179239,46.16006],[6.19068,46.167201],[6.188283,46.176608],[6.189304,46.180941],[6.199386,46.183905],[6.207892,46.192481],[6.213824,46.193335],[6.219192,46.198334],[6.223522,46.199301],[6.223947,46.201286],[6.229577,46.202887],[6.234054,46.206246],[6.243581,46.204849],[6.250976,46.205426],[6.257218,46.210407],[6.27856,46.216044],[6.296258,46.225677],[6.311314,46.243494],[6.311526,46.251427],[6.308503,46.253043],[6.311779,46.25767],[6.309369,46.258698],[6.303094,46.257032],[6.297211,46.258037],[6.296141,46.259574],[6.298698,46.264455],[6.297309,46.266398],[6.29208,46.265404],[6.28949,46.261738],[6.283231,46.257845],[6.283958,46.256179],[6.268083,46.25019],[6.262682,46.253393],[6.263327,46.256461],[6.251851,46.26392],[6.240021,46.278615],[6.240599,46.28224],[6.243996,46.285534],[6.25049,46.287004],[6.255025,46.291635],[6.251397,46.295795],[6.250494,46.303987],[6.245616,46.306228],[6.240885,46.306036],[6.241482,46.299003],[6.235141,46.290823],[6.22845,46.287853],[6.21,46.267619],[6.201241,46.266946],[6.197483,46.26476],[6.193593,46.258897],[6.191105,46.246299],[6.193034,46.24105],[6.190084,46.234562],[6.181586,46.22644],[6.175418,46.217192],[6.164591,46.210825],[6.157743,46.212251],[6.154675,46.214794],[6.153646,46.218593],[6.155639,46.222746],[6.151095,46.227975],[6.155884,46.246685],[6.153735,46.25231],[6.163857,46.263563],[6.168381,46.263711],[6.172824,46.27372],[6.173199,46.276216],[6.169149,46.282836],[6.171033,46.286509],[6.173558,46.28752],[6.172275,46.29639],[6.154827,46.301212],[6.142821,46.306545],[6.126372,46.319634],[6.115664,46.316386],[6.010923,46.247101],[5.979715,46.219401],[5.972945,46.215415],[5.9687,46.208214],[5.972311,46.20425],[5.965603,46.20153],[5.963283,46.197831],[5.981455,46.191643],[5.983876,46.189335],[5.990526,46.188139],[5.994304,46.183363],[5.990734,46.180491],[5.988186,46.174182],[5.983853,46.176298],[5.980843,46.17465],[5.979577,46.168441],[5.964504,46.147603],[5.963805,46.143652],[5.965833,46.139681],[5.956025,46.134032],[5.956731,46.129325],[5.974342,46.132072],[5.983657,46.138085],[5.985233,46.143589],[5.988073,46.14294],[5.994177,46.144445],[6.003944,46.142112],[6.017712,46.143144],[6.030847,46.13943],[6.036377,46.134682],[6.040866,46.140179],[6.043575,46.141312],[6.046297,46.140367],[6.049486,46.142973],[6.050433,46.147997],[6.053703,46.151663],[6.075433,46.149173],[6.092211,46.152187],[6.098635,46.144226],[6.12516,46.141824],[6.126755,46.140923]],[[6.1883445,46.3490083],[6.1869587,46.3486226],[6.1819521,46.35015],[6.1796053,46.3520013],[6.1714248,46.3544387],[6.1702178,46.3591128],[6.1741516,46.3603622],[6.1727212,46.3618892],[6.1734811,46.3628764],[6.1799852,46.3654676],[6.1876963,46.3613185],[6.1944686,46.3617504],[6.1990506,46.3608558],[6.2011339,46.3563388],[6.202582,46.3556728],[6.2079112,46.3558251],[6.213743,46.3537853],[6.2124652,46.3508462],[6.2084644,46.3466497],[6.2085985,46.3399069],[6.2065869,46.3379163],[6.2049329,46.3386107],[6.2034801,46.3379318],[6.1918129,46.3433324],[6.1931763,46.3478686],[6.1907624,46.3476988],[6.1883445,46.3490083]],[[6.181818,46.3428059],[6.180164,46.3431762],[6.1752021,46.3453209],[6.173414,46.3439785],[6.1732352,46.3405377],[6.1714024,46.3395192],[6.1658818,46.3425436],[6.1656359,46.3433922],[6.1709107,46.3505357],[6.173414,46.3502888],[6.1745763,46.3519241],[6.1758726,46.3520476],[6.1857942,46.345934],[6.181818,46.3428059]]],"terms_text":"Orthophotos du SITG 2011"},{"id":"Canvec","name":"Canvec","type":"wms","template":"http://wms.sst-sw.rncan.gc.ca/wms/toporama_fr?REQUEST=GetMap&SERVICE=wms&VERSION=1.1.1&EXCEPTIONS=application/vnd.ogc.se_inimage&SRS={proj}&FORMAT=image/png&transparent=true&layers=SCW-Toporama&WIDTH={width}&height={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.1923701,48.6550408],[-122.9958159,48.5106543],[-122.4868966,48.4098005],[-122.3291531,48.4527983],[-122.229391,48.5064943],[-122.1790836,48.5296509],[-122.1841996,48.566905],[-121.7783298,48.5759321],[-121.6657777,48.4279093],[-121.3306793,48.3571354],[-121.0271296,48.3497692],[-121.0305403,48.4940645],[-120.6979999,48.5149675],[-120.510413,48.8718034],[-119.9757904,48.8813368],[-119.9544737,48.5149675],[-119.907577,48.2942056],[-119.7319275,48.1550316],[-119.7438648,48.0741943],[-119.622786,48.1095051],[-119.602322,48.1470674],[-119.2527283,48.1624259],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{"id":"capela_al","name":"Capela AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Capela&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.03320780938,-9.4574082918],[-36.03321853822,-9.45581025359],[-36.03335801309,-9.45482602768],[-36.03340092843,-9.45291048318],[-36.0332721824,-9.45140767284],[-36.03335801309,-9.44286692894],[-36.03349748796,-9.43821017639],[-36.03352967447,-9.42881181147],[-36.03362623399,-9.42027050777],[-36.03389445489,-9.41091399212],[-36.03389445489,-9.40031880838],[-36.03401247209,-9.38880239663],[-36.03413048928,-9.38527753599],[-36.03428069299,-9.38265239127],[-36.03417340463,-9.37849234301],[-36.03444162553,-9.3668799342],[-36.05245534127,-9.36710223556],[-36.05790558999,-9.36711282133],[-36.0715955848,-9.36727160792],[-36.08621898835,-9.367313951],[-36.10299888795,-9.36750449479],[-36.11651722139,-9.36754683784],[-36.12515393441,-9.36768445271],[-36.12521830743,-9.37473449571],[-36.12520757859,-9.37721150385],[-36.12511101907,-9.38037654408],[-36.12514320558,-9.38528812121],[-36.12504664605,-9.39026313917],[-36.12503591722,-9.39477234906],[-36.12505737489,-9.40171599404],[-36.12499300187,-9.40382234661],[-36.12479988282,-9.40678603705],[-36.12462822145,-9.41123152509],[-36.12473550981,-9.41360242867],[-36.12456384843,-9.41630142857],[-36.1245853061,-9.42460998216],[-36.12466040796,-9.42690670628],[-36.12464967912,-9.42924575062],[-36.12457457727,-9.42970085695],[-36.12463895028,-9.4353843436],[-36.12438145822,-9.44108890357],[-36.12445656007,-9.44387235589],[-36.12452093309,-9.44578795069],[-36.12438145822,-9.4473648688],[-36.12447801774,-9.44856078174],[-36.12447801774,-9.45095259517],[-36.12436000055,-9.45391588079],[-36.12433854287,-9.45790569291],[-36.11757937616,-9.45783161194],[-36.10889974778,-9.45777869695],[-36.10418978875,-9.45779986294],[-36.10116425699,-9.45772578195],[-36.09529558366,-9.45772578195],[-36.08460966295,-9.45767286695],[-36.07361260598,-9.45756703691],[-36.05726185983,-9.4574082918],[-36.04816380685,-9.45747178985],[-36.04176942056,-9.45738712578],[-36.03767100518,-9.45738712578],[-36.03320780938,-9.4574082918]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"Catastro-Spain","name":"Catastro Spain","type":"wms","template":"http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Catastro&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-17.8846298,28.4460601],[-17.8939535,28.5225529],[-18.0212548,28.7481927],[-18.0224091,28.8038375],[-17.9424017,28.8726124],[-17.8911792,28.8737099],[-17.8903302,28.8515102],[-17.7675902,28.8537764],[-17.7669837,28.8312183],[-17.7412714,28.8319975],[-17.7394926,28.7642235],[-17.7139824,28.7649677],[-17.7129312,28.7303731],[-17.7574427,28.6931782],[-17.7570788,28.6741254],[-17.7457913,28.6743524],[-17.7457266,28.6165627],[-17.7519687,28.5833675],[-17.7622536,28.5591958],[-17.7833086,28.541667],[-17.7831575,28.4936643],[-17.808611,28.4925024],[-17.8060072,28.4468974],[-17.8846298,28.4460601]],[[-18.1661033,27.7851643],[-18.163494,27.6949247],[-18.0889827,27.6963366],[-18.0873398,27.6738724],[-18.0364092,27.6753701],[-18.0350079,27.6302571],[-17.9589987,27.6323976],[-17.8603269,27.7926025],[-17.8630328,27.8368793],[-17.8884015,27.8364947],[-17.8891263,27.8590536],[-17.9906491,27.8567467],[-18.0386803,27.7655831],[-18.1146412,27.7637873],[-18.1154627,27.7863613],[-18.1661033,27.7851643]],[[-17.36038,28.0639801],[-17.3629657,28.1757247],[-17.3375583,28.1763688],[-17.3384577,28.2213012],[-17.1857883,28.2238767],[-17.0820788,28.1351849],[-17.0808422,28.0679977],[-17.1315446,28.0668073],[-17.1563337,28.0214628],[-17.2321063,28.0203711],[-17.2319938,27.9980388],[-17.2576823,27.9978403],[-17.257851,28.0199741],[-17.3086658,28.0192298],[-17.36038,28.0639801]],[[-16.9278171,28.3275779],[-16.9286591,28.3721879],[-16.8776666,28.3729288],[-16.8780707,28.3954191],[-16.5214259,28.4226146],[-16.4457117,28.491135],[-16.4462506,28.535972],[-16.4205859,28.5362679],[-16.4209227,28.5588419],[-16.3443329,28.5597589],[-16.3446023,28.5822095],[-16.1912541,28.5837179],[-16.1916246,28.6068435],[-16.1279344,28.6078193],[-16.1277997,28.5921762],[-16.0995079,28.5925015],[-16.0993395,28.5163822],[-16.1648148,28.5161158],[-16.1647474,28.4938583],[-16.2385755,28.4484704],[-16.2653516,28.4476116],[-16.2658569,28.4030038],[-16.3167484,28.4017594],[-16.3163105,28.380189],[-16.3420763,28.3795075],[-16.3408301,28.2892963],[-16.415837,28.1976134],[-16.415096,28.1311312],[-16.5153297,28.0164796],[-16.6168433,28.01532],[-16.6168096,27.9930469],[-16.7184243,27.9919168],[-16.7190979,28.0371426],[-16.7446952,28.0367859],[-16.7453351,28.0818146],[-16.7706967,28.0816065],[-16.8223966,28.1259036],[-16.8231712,28.1708652],[-16.8487012,28.1707464],[-16.8502842,28.260791],[-16.8756457,28.2605537],[-16.8760836,28.2832162],[-16.9015125,28.2827713],[-16.9023882,28.3279337],[-16.9278171,28.3275779]],[[-15.8537427,27.9008901],[-15.8542032,27.9901812],[-15.828953,27.9906555],[-15.8291065,28.035578],[-15.7782992,28.0363232],[-15.7532793,28.0814298],[-15.7278756,28.0815652],[-15.7282593,28.1718567],[-15.4989741,28.1728039],[-15.4987438,28.1504075],[-15.4497785,28.1507459],[-15.4501622,28.1961425],[-15.3972827,28.1961425],[-15.3964385,28.0383554],[-15.3710348,28.0380167],[-15.3706511,28.0153212],[-15.3457847,28.0153212],[-15.3454777,27.9254406],[-15.3708046,27.9252372],[-15.3705743,27.8352137],[-15.395978,27.8347387],[-15.4209979,27.7879673],[-15.4718052,27.7893932],[-15.471882,27.7666454],[-15.522766,27.7667813],[-15.5477092,27.7216112],[-15.6236132,27.7213395],[-15.6241504,27.741991],[-15.7007451,27.7433495],[-15.801669,27.8110501],[-15.8537427,27.9008901]],[[-14.5215621,28.0467778],[-14.5224358,28.1184131],[-14.4157526,28.1156076],[-14.2168794,28.2278805],[-14.2153651,28.33903],[-14.1641672,28.4528287],[-14.1115132,28.4747955],[-14.0335806,28.7226671],[-13.9565217,28.7449351],[-13.9561722,28.7665857],[-13.8290221,28.7664325],[-13.8289639,28.7879765],[-13.8000741,28.7879255],[-13.8012972,28.7189894],[-13.827566,28.719347],[-13.8278572,28.6517968],[-13.8025786,28.651899],[-13.8033941,28.5384172],[-13.8288474,28.5384684],[-13.8315061,28.3970177],[-13.9158189,28.2241438],[-13.9856445,28.2235696],[-14.0369588,28.1795787],[-14.1387139,28.1799894],[-14.1386556,28.1579103],[-14.2153651,28.1578076],[-14.2147244,28.1118888],[-14.2913173,28.0452356],[-14.3319673,28.0368713],[-14.4457846,28.0469834],[-14.4466583,28.0657961],[-14.4962835,28.0682631],[-14.495934,28.0458525],[-14.5215621,28.0467778]],[[-13.800662,28.8456579],[-13.8009273,28.8231121],[-13.775688,28.8230539],[-13.69729,28.8898184],[-13.69729,28.9127744],[-13.6072498,28.9117991],[-13.4388551,29.0002417],[-13.4374559,29.1351289],[-13.4117005,29.1349931],[-13.4105556,29.2229789],[-13.4592801,29.255586],[-13.4597392,29.2942023],[-13.5091254,29.2945638],[-13.5100581,29.3163453],[-13.5635382,29.3172941],[-13.5640564,29.2713764],[-13.5389228,29.2711956],[-13.5389747,29.2500375],[-13.5661293,29.2501279],[-13.5665956,29.2030039],[-13.5156549,29.2022349],[-13.5156549,29.1820579],[-13.5398038,29.1827819],[-13.5408921,29.137528],[-13.65782,29.1368528],[-13.713222,29.0935079],[-13.7663353,29.0934533],[-13.8502463,29.0165937],[-13.8518224,28.983425],[-13.8524443,28.914861],[-13.9013122,28.89245],[-13.9024005,28.8469779],[-13.800662,28.8456579]],[[1.6479916,38.9990693],[1.7321668,38.9993635],[1.7314703,39.0441733],[1.6489512,39.0431944],[1.6481552,39.1276358],[1.3948608,39.1265691],[1.3954412,39.0864199],[1.2281145,39.0852615],[1.2291095,39.0028958],[1.1448657,39.0018003],[1.1452803,38.8319988],[1.3113632,38.8331615],[1.3121924,38.7906483],[1.3946949,38.7916178],[1.3951924,38.7529597],[1.3112803,38.7519251],[1.3125919,38.6238804],[1.6489036,38.6251112],[1.6480745,38.7111504],[1.58456,38.7101152],[1.5811604,38.7005387],[1.5491544,38.7002798],[1.5197188,38.7092094],[1.50355,38.7253185],[1.4813282,38.9155064],[1.5518906,38.9254411],[1.5667328,38.9566554],[1.6487378,38.9583318],[1.6479916,38.9990693]],[[2.5450749,39.4166673],[2.43933,39.4161122],[2.438714,39.4846853],[2.439022,39.4993424],[2.3122308,39.4993424],[2.3119228,39.5417911],[2.2290722,39.5409994],[2.2283536,39.6260571],[2.3460076,39.6270851],[2.9270445,39.9601558],[3.1456647,39.9600498],[3.1460753,40.0019797],[3.2313899,40.0019797],[3.2312872,39.8329231],[3.1482313,39.8331596],[3.1484366,39.7935717],[3.4814817,39.7931773],[3.4803472,39.5959027],[3.3150618,39.4784606],[3.3146179,39.3785504],[3.0830178,39.2499355],[2.9798608,39.2501482],[2.9790395,39.3334971],[2.7287424,39.3334177],[2.7288451,39.4581361],[2.6456865,39.4577397],[2.6453785,39.4996593],[2.5452802,39.4994216],[2.5450749,39.4166673]],[[3.8120402,40.0434431],[3.729082,40.0437979],[3.7286185,39.9584155],[3.8126633,39.9576011],[3.8122771,39.9164393],[3.9608975,39.9159813],[4.1938142,39.791308],[4.3150279,39.7905799],[4.3159934,39.8329294],[4.3987393,39.8320396],[4.3973664,39.9185834],[4.3158003,39.9193274],[4.3161865,40.0433985],[4.2318959,40.0443594],[4.2324752,40.0847793],[4.1491501,40.086109],[4.1490623,40.1255157],[4.0627981,40.1272166],[4.0624217,40.0849941],[3.8128687,40.085294],[3.8120402,40.0434431]],[[-8.8910646,41.8228891],[-9.1092038,42.5751065],[-9.0365469,42.730656],[-9.0883419,42.7269569],[-9.1466113,42.7750272],[-9.2185488,42.9016271],[-9.2760988,42.8605106],[-9.3099094,42.9311297],[-9.2789763,42.9821991],[-9.3099094,43.0600377],[-9.2523594,43.1041725],[-9.2314975,43.1703151],[-9.1473307,43.210176],[-9.06748,43.1991644],[-9.0336694,43.2426748],[-8.99842,43.2447709],[-8.9998588,43.2955793],[-8.9372732,43.3055265],[-8.92936,43.326986],[-8.8638969,43.3290792],[-8.8761263,43.3740655],[-8.8221732,43.3735426],[-8.785485,43.3191358],[-8.7063538,43.305003],[-8.6099575,43.3296025],[-8.5509688,43.3233227],[-8.5243519,43.3364048],[-8.5250713,43.3646525],[-8.45745,43.3918416],[-8.3610538,43.4111803],[-8.3603344,43.4634161],[-8.3344369,43.5797394],[-8.2776063,43.5708796],[-8.0646713,43.7239184],[-7.9992081,43.7233986],[-7.9171994,43.7826357],[-7.8560525,43.7914643],[-7.83591,43.7374337],[-7.6628443,43.809819],[-7.3188932,43.6782695],[-7.1997467,43.5830817],[-6.2488228,43.6075032],[-6.1229322,43.5790105],[-5.8520425,43.6798953],[-5.6036334,43.5708672],[-5.2855347,43.5619084],[-5.1787525,43.4991591],[-4.9089869,43.4836655],[-4.6156167,43.4192021],[-4.1839917,43.4249168],[-3.8029478,43.5195394],[-3.7400025,43.4869277],[-3.5612827,43.5423572],[-3.1083013,43.3816347],[-2.9385737,43.4624573],[-2.7452417,43.4755094],[-2.3046245,43.3170625],[-1.9854018,43.3563045],[-1.8552841,43.3972545],[-1.769802,43.3964383],[-1.7700492,43.3760501],[-1.7100474,43.3756908],[-1.7113451,43.3312527],[-1.7225915,43.3131806],[-1.6890375,43.3129108],[-1.6881106,43.3341294],[-1.6446695,43.3337248],[-1.6449785,43.3133155],[-1.6029903,43.3129528],[-1.6034352,43.2926624],[-1.5635905,43.2921227],[-1.5630468,43.3133844],[-1.4779905,43.3128355],[-1.3667723,43.2761368],[-1.3568809,43.2381533],[-1.3703692,43.1712972],[-1.4423067,43.0833554],[-1.4198262,43.0603647],[-1.3730668,43.051166],[-1.3640746,43.1115893],[-1.3020285,43.135217],[-1.2354864,43.1332484],[-1.2795481,43.0774443],[-1.1923239,43.0649635],[-1.0061856,43.0077821],[-0.942341,42.9748951],[-0.7562028,42.9821318],[-0.7148387,42.9610774],[-0.6968543,42.9031405],[-0.5511809,42.8220693],[-0.5044215,42.8484456],[-0.4288871,42.8200906],[-0.3164848,42.8655842],[-0.1456332,42.810856],[-0.0314324,42.7124874],[0.1861785,42.7540985],[0.3021777,42.7177729],[0.3642238,42.7428729],[0.4487504,42.7144695],[0.6276949,42.7223973],[0.6411832,42.8576747],[0.7149192,42.882718],[0.9675996,42.8181119],[1.108777,42.7989808],[1.1753192,42.7342872],[1.3632559,42.7415521],[1.4113736,42.7093914],[1.4806054,42.7103407],[1.4813006,42.5010664],[1.6443591,42.5020345],[1.6432777,42.5424539],[1.730407,42.5434214],[1.7316429,42.5011803],[2.0638621,42.5016359],[2.0645572,42.4590247],[2.3969309,42.4599364],[2.3976786,42.4178363],[2.4804823,42.4179732],[2.4809767,42.3759441],[2.6447922,42.3762636],[2.6444832,42.4592447],[2.8113266,42.4596094],[2.8112648,42.5010358],[3.063878,42.5008535],[3.063878,42.4591535],[3.2307832,42.4593359],[3.2304935,42.3764363],[3.3141469,42.3760369],[3.3141243,42.3339864],[3.397855,42.3340435],[3.3973912,42.290094],[3.3138923,42.2908368],[3.3139695,42.2070151],[3.1475896,42.2073012],[3.1475896,42.1260612],[3.2305478,42.1260039],[3.2466753,41.9529359],[3.1945206,41.8558943],[3.060537,41.7647419],[2.7835777,41.6371796],[2.26293,41.4271601],[2.1649151,41.2989297],[1.86008,41.2232228],[1.3763003,41.116273],[1.1793714,41.0464585],[1.0858526,41.048493],[0.758537,40.8195599],[0.9114042,40.733761],[0.8781331,40.6751363],[0.6650182,40.5358666],[0.5580112,40.5502166],[0.433919,40.3757589],[0.2675635,40.1919192],[0.1641534,40.0647234],[0.0751307,40.0144671],[0.010387,39.8952188],[-0.0939224,39.8116904],[-0.1847435,39.6311716],[-0.2908513,39.5036254],[-0.2863552,39.333431],[-0.1856427,39.1774612],[-0.2135185,39.1558487],[-0.1110076,38.9722246],[0.0094878,38.8826835],[0.1218901,38.872183],[0.2342925,38.798636],[0.2558737,38.7264162],[0.0958128,38.6133825],[-0.0022021,38.6070586],[-0.0570544,38.5269073],[-0.2719677,38.4762395],[-0.379874,38.3931234],[-0.3834708,38.3381297],[-0.4509122,38.3310763],[-0.5048654,38.2830943],[-0.4823849,38.1948095],[-0.429331,38.1658287],[-0.4545091,38.148859],[-0.5839966,38.1721913],[-0.6136708,38.1198599],[-0.6370505,37.9612228],[-0.6811123,37.9456238],[-0.7323677,37.8810656],[-0.7215771,37.7830562],[-0.688306,37.7340026],[-0.6641461,37.6231485],[-0.7193941,37.5878413],[-0.9196258,37.5375806],[-1.1107098,37.5164093],[-1.3383246,37.5286671],[-1.4408917,37.3903714],[-1.6766966,37.2765189],[-1.8540816,36.9122889],[-2.0683486,36.6929117],[-2.2158766,36.6619233],[-2.3721861,36.7801753],[-2.6812926,36.6591056],[-2.9201476,36.6675585],[-3.09402,36.712625],[-3.4610839,36.6548788],[-3.7280395,36.6929117],[-4.3743529,36.6633322],[-4.6571151,36.4404171],[-4.9188018,36.4531321],[-5.1699508,36.3513541],[-5.2841094,36.1970201],[-5.2680911,36.1241812],[-5.3524784,36.1224654],[-5.3516094,36.0401413],[-5.4365759,36.0388921],[-5.4353207,36.0034384],[-5.6888562,36.0036518],[-5.6899635,36.0405317],[-5.85506,36.0385595],[-5.8566821,36.1242077],[-5.9384817,36.1221487],[-5.9400265,36.1655625],[-5.9983445,36.1645024],[-6.0357297,36.1780957],[-6.0775178,36.2224132],[-6.1506113,36.2864561],[-6.231541,36.3770075],[-6.3358504,36.5310643],[-6.3214629,36.5816265],[-6.404191,36.6234958],[-6.4743301,36.7489673],[-6.4158808,36.7993866],[-6.490516,36.9173818],[-6.6298949,37.0194012],[-6.8744824,37.1083766],[-7.0426363,37.1850699],[-7.2647434,37.1843535],[-7.3753473,37.1535419],[-7.408316,37.1682196],[-7.4202886,37.2118318],[-7.4249231,37.2350505],[-7.4380543,37.2451969],[-7.4459717,37.3326142],[-7.4480958,37.3909382],[-7.4696271,37.4075829],[-7.4647029,37.4530494],[-7.5019723,37.516411],[-7.5191587,37.5229203],[-7.5219588,37.5723727],[-7.4501271,37.6695835],[-7.4249019,37.7599222],[-7.316662,37.839974],[-7.268329,37.988952],[-7.1536786,38.0155235],[-7.1177098,38.0553626],[-7.0142997,38.0243785],[-6.9963153,38.1075633],[-6.9614706,38.201254],[-7.080617,38.1570753],[-7.3402665,38.4402363],[-7.2638329,38.7380741],[-7.0435243,38.8729667],[-7.0615086,38.907962],[-6.9693387,39.0198308],[-7.0008114,39.0887867],[-7.1536786,39.0957658],[-7.1525545,39.1602899],[-7.2447245,39.1968854],[-7.2559647,39.2813308],[-7.3368944,39.3535074],[-7.3279022,39.4559917],[-7.5144901,39.5886496],[-7.5527069,39.6795427],[-7.0502684,39.6752171],[-6.9951913,39.8195433],[-6.9221297,39.8790868],[-6.886161,40.0229854],[-7.0412762,40.1347927],[-7.0176717,40.266146],[-6.8086034,40.3450071],[-6.8681766,40.4451649],[-6.8535643,40.6066433],[-6.837828,40.8757589],[-6.9536024,41.0370445],[-6.8018592,41.0395879],[-6.7681385,41.138706],[-6.6411239,41.2655616],[-6.5624422,41.2630269],[-6.217367,41.5791017],[-6.3162811,41.644652],[-6.5152332,41.6412921],[-6.5871707,41.6883151],[-6.5478299,41.8559743],[-6.6298836,41.9112057],[-7.1334461,41.9404756],[-7.1682909,41.8718791],[-7.4256922,41.7847727],[-7.9539833,41.8459271],[-8.130455,41.7805819],[-8.2518495,41.9078597],[-8.1293309,42.0348842],[-8.2484774,42.1008034],[-8.3676239,42.0557521],[-8.6070409,42.0340493],[-8.8910646,41.8228891]]]},{"id":"South_Africa-CapeTown-Aerial-2013","name":"City of Cape Town 2013 Aerial","type":"tms","template":"https://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2013/{zoom}/{x}/{y}.jpg","endDate":"2015-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[1,21],"polygon":[[[18.4486565,-33.893623],[18.4485868,-33.902644],[18.4702,-33.9027665],[18.4813902,-33.8472383],[18.4492466,-33.801069],[18.4281537,-33.7356408],[18.43914,-33.7177232],[18.4071895,-33.6589917],[18.3322379,-33.5775191],[18.3324525,-33.5504487],[18.353996,-33.5505918],[18.3542535,-33.5236025],[18.3652398,-33.5236561],[18.3650252,-33.5148009],[18.3760115,-33.5147652],[18.3760545,-33.5058017],[18.4296557,-33.5059449],[18.4296986,-33.4878541],[18.4404919,-33.4878899],[18.4405991,-33.4698849],[18.4943721,-33.4700997],[18.4943292,-33.4791564],[18.5158297,-33.4791743],[18.5157439,-33.4881941],[18.5264727,-33.4883015],[18.5263225,-33.5243538],[18.5479304,-33.5244253],[18.5479519,-33.5153913],[18.5693666,-33.5154987],[18.5693666,-33.524479],[18.5801169,-33.5245327],[18.580074,-33.5425978],[18.5907814,-33.5425978],[18.5907385,-33.5606413],[18.5799453,-33.5605341],[18.5798809,-33.569617],[18.5906956,-33.569617],[18.5906526,-33.5786811],[18.6230108,-33.5787347],[18.622925,-33.5877264],[18.6659691,-33.5878872],[18.6659262,-33.614928],[18.6767194,-33.6149726],[18.6765772,-33.6510279],[18.687298,-33.6510167],[18.6873409,-33.6600365],[18.6980697,-33.6600901],[18.6980697,-33.6690733],[18.7520358,-33.6692519],[18.7520787,-33.6421924],[18.7736437,-33.642246],[18.773708,-33.6331886],[18.8274595,-33.6332958],[18.8275239,-33.6603044],[18.8166663,-33.6602866],[18.8166019,-33.6783233],[18.8058087,-33.6783055],[18.8058087,-33.7053892],[18.8273951,-33.7054428],[18.8273308,-33.7234701],[18.838124,-33.7234344],[18.8380381,-33.7413865],[18.8165161,-33.7413687],[18.8163659,-33.7955057],[18.8055941,-33.7955057],[18.8055083,-33.8135675],[18.794758,-33.8135497],[18.7947151,-33.8315364],[18.7731072,-33.8315186],[18.7731287,-33.8405194],[18.7623569,-33.8405194],[18.7622711,-33.903588],[18.7514564,-33.9035167],[18.7510809,-33.9847823],[18.7619063,-33.9848001],[18.7617776,-34.0298785],[18.772603,-34.0298963],[18.7725815,-34.0389073],[18.7940338,-34.0389406],[18.7938756,-34.0406987],[18.7984461,-34.0411855],[18.8032445,-34.0411788],[18.8034055,-34.0389206],[18.8159367,-34.038974],[18.8163444,-34.0299318],[18.8379845,-34.0316479],[18.8380006,-34.030003],[18.8484183,-34.0300074],[18.8484666,-34.0218491],[18.859925,-34.0234675],[18.8598606,-34.0210132],[18.868272,-34.0220803],[18.8681862,-34.0211733],[18.8854596,-34.0234319],[18.8851806,-34.0213156],[18.9025184,-34.021031],[18.9025828,-34.0119958],[18.9134189,-34.0119958],[18.9134833,-33.9939582],[18.9458844,-33.9940294],[18.9458629,-34.003102],[18.9674279,-34.0029953],[18.9674708,-34.0120848],[18.9782211,-34.0120848],[18.9783284,-34.0211377],[18.9891431,-34.0211377],[18.9891645,-34.039134],[19.0000167,-34.0391251],[19.0000221,-34.0571798],[19.0108368,-34.0572509],[19.0107939,-34.0841436],[19.0000007,-34.0841258],[19.0000221,-34.0931977],[18.9891538,-34.0931711],[18.9891753,-34.1021976],[18.9783177,-34.1021798],[18.9783177,-34.111232],[18.967503,-34.1112143],[18.9674923,-34.1292536],[18.9566025,-34.1292358],[18.9565596,-34.1382408],[18.9674172,-34.1383118],[18.9674172,-34.1473157],[18.9891753,-34.147298],[18.9891753,-34.165303],[18.9782748,-34.1652852],[18.9783177,-34.1742863],[18.9674172,-34.1742685],[18.9674601,-34.1833042],[18.9565596,-34.1833219],[18.9565596,-34.1923565],[18.9457449,-34.192321],[18.945702,-34.2013192],[18.9348659,-34.2013725],[18.9348873,-34.2193305],[18.9023575,-34.2193482],[18.9017567,-34.2362557],[18.8878414,-34.2373467],[18.8894185,-34.2554123],[18.8805887,-34.2553414],[18.8792744,-34.2644348],[18.8696882,-34.2644126],[18.8697097,-34.2734386],[18.8371369,-34.2734208],[18.8371155,-34.2643771],[18.848016,-34.2644037],[18.8480267,-34.237391],[18.8154861,-34.210281],[18.8156471,-34.1741265],[18.8548824,-34.1562743],[18.7617561,-34.0840547],[18.6533734,-34.077479],[18.4797433,-34.1101217],[18.4463713,-34.1342269],[18.4444508,-34.1640868],[18.4359965,-34.1640513],[18.435975,-34.1820172],[18.4468111,-34.182106],[18.4467253,-34.1911052],[18.4659299,-34.1912117],[18.4866151,-34.2453911],[18.4788904,-34.2543659],[18.4860036,-34.2543748],[18.4677109,-34.2994116],[18.4892222,-34.3445792],[18.500112,-34.3445837],[18.4999189,-34.3626174],[18.467432,-34.3625111],[18.4673676,-34.3534947],[18.3916005,-34.3170651],[18.3917722,-34.2900161],[18.3701643,-34.2808678],[18.370682,-34.2178866],[18.3492324,-34.1816178],[18.3274743,-34.1814936],[18.3276674,-34.1634565],[18.3118746,-34.1543832],[18.3114025,-34.1435331],[18.3236656,-34.1346886],[18.3499297,-34.1042053],[18.3393189,-34.0882843],[18.3612487,-34.0597219],[18.3550474,-34.0553843],[18.3427522,-34.064326],[18.3199963,-34.0644326],[18.296071,-34.045126],[18.3068213,-34.0252637],[18.3287725,-34.0191992],[18.3289227,-34.001252],[18.3397374,-34.0012698],[18.3398017,-33.9866282],[18.3628687,-33.9735145],[18.3638129,-33.9292474],[18.3726212,-33.9292741],[18.3728358,-33.917763],[18.3977267,-33.8933469],[18.4486565,-33.893623]]],"terms_url":"https://www.capetown.gov.za","terms_text":"City of Cape Town Aerial - OPENSTREETMAP USE ONLY","description":"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 12cm ground sample distance"},{"id":"South_Africa-CapeTown-Aerial","name":"City of Cape Town 2015 Aerial","type":"tms","template":"https://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2015/{zoom}/{x}/{y}.jpg","endDate":"2016-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[1,21],"polygon":[[[18.4486565,-33.893623],[18.4485868,-33.902644],[18.4702,-33.9027665],[18.4813902,-33.8472383],[18.4492466,-33.801069],[18.4281537,-33.7356408],[18.43914,-33.7177232],[18.4071895,-33.6589917],[18.3322379,-33.5775191],[18.3324525,-33.5504487],[18.353996,-33.5505918],[18.3542535,-33.5236025],[18.3652398,-33.5236561],[18.3650252,-33.5148009],[18.3760115,-33.5147652],[18.3760545,-33.5058017],[18.4296557,-33.5059449],[18.4296986,-33.4878541],[18.4404919,-33.4878899],[18.4405991,-33.4698849],[18.4943721,-33.4700997],[18.4943292,-33.4791564],[18.5158297,-33.4791743],[18.5157439,-33.4881941],[18.5264727,-33.4883015],[18.5263225,-33.5243538],[18.5479304,-33.5244253],[18.5479519,-33.5153913],[18.5693666,-33.5154987],[18.5693666,-33.524479],[18.5801169,-33.5245327],[18.580074,-33.5425978],[18.5907814,-33.5425978],[18.5907385,-33.5606413],[18.5799453,-33.5605341],[18.5798809,-33.569617],[18.5906956,-33.569617],[18.5906526,-33.5786811],[18.6230108,-33.5787347],[18.622925,-33.5877264],[18.6659691,-33.5878872],[18.6659262,-33.614928],[18.6767194,-33.6149726],[18.6765772,-33.6510279],[18.687298,-33.6510167],[18.6873409,-33.6600365],[18.6980697,-33.6600901],[18.6980697,-33.6690733],[18.7520358,-33.6692519],[18.7520787,-33.6421924],[18.7736437,-33.642246],[18.773708,-33.6331886],[18.8274595,-33.6332958],[18.8275239,-33.6603044],[18.8166663,-33.6602866],[18.8166019,-33.6783233],[18.8058087,-33.6783055],[18.8058087,-33.7053892],[18.8273951,-33.7054428],[18.8273308,-33.7234701],[18.838124,-33.7234344],[18.8380381,-33.7413865],[18.8165161,-33.7413687],[18.8163659,-33.7955057],[18.8055941,-33.7955057],[18.8055083,-33.8135675],[18.794758,-33.8135497],[18.7947151,-33.8315364],[18.7731072,-33.8315186],[18.7731287,-33.8405194],[18.7623569,-33.8405194],[18.7622711,-33.903588],[18.7514564,-33.9035167],[18.7510809,-33.9847823],[18.7619063,-33.9848001],[18.7617776,-34.0298785],[18.772603,-34.0298963],[18.7725815,-34.0389073],[18.7940338,-34.0389406],[18.7938756,-34.0406987],[18.7984461,-34.0411855],[18.8032445,-34.0411788],[18.8034055,-34.0389206],[18.8159367,-34.038974],[18.8163444,-34.0299318],[18.8379845,-34.0316479],[18.8380006,-34.030003],[18.8484183,-34.0300074],[18.8484666,-34.0218491],[18.859925,-34.0234675],[18.8598606,-34.0210132],[18.868272,-34.0220803],[18.8681862,-34.0211733],[18.8854596,-34.0234319],[18.8851806,-34.0213156],[18.9025184,-34.021031],[18.9025828,-34.0119958],[18.9134189,-34.0119958],[18.9134833,-33.9939582],[18.9458844,-33.9940294],[18.9458629,-34.003102],[18.9674279,-34.0029953],[18.9674708,-34.0120848],[18.9782211,-34.0120848],[18.9783284,-34.0211377],[18.9891431,-34.0211377],[18.9891645,-34.039134],[19.0000167,-34.0391251],[19.0000221,-34.0571798],[19.0108368,-34.0572509],[19.0107939,-34.0841436],[19.0000007,-34.0841258],[19.0000221,-34.0931977],[18.9891538,-34.0931711],[18.9891753,-34.1021976],[18.9783177,-34.1021798],[18.9783177,-34.111232],[18.967503,-34.1112143],[18.9674923,-34.1292536],[18.9566025,-34.1292358],[18.9565596,-34.1382408],[18.9674172,-34.1383118],[18.9674172,-34.1473157],[18.9891753,-34.147298],[18.9891753,-34.165303],[18.9782748,-34.1652852],[18.9783177,-34.1742863],[18.9674172,-34.1742685],[18.9674601,-34.1833042],[18.9565596,-34.1833219],[18.9565596,-34.1923565],[18.9457449,-34.192321],[18.945702,-34.2013192],[18.9348659,-34.2013725],[18.9348873,-34.2193305],[18.9023575,-34.2193482],[18.9017567,-34.2362557],[18.8878414,-34.2373467],[18.8894185,-34.2554123],[18.8805887,-34.2553414],[18.8792744,-34.2644348],[18.8696882,-34.2644126],[18.8697097,-34.2734386],[18.8371369,-34.2734208],[18.8371155,-34.2643771],[18.848016,-34.2644037],[18.8480267,-34.237391],[18.8154861,-34.210281],[18.8156471,-34.1741265],[18.8548824,-34.1562743],[18.7617561,-34.0840547],[18.6533734,-34.077479],[18.4797433,-34.1101217],[18.4463713,-34.1342269],[18.4444508,-34.1640868],[18.4359965,-34.1640513],[18.435975,-34.1820172],[18.4468111,-34.182106],[18.4467253,-34.1911052],[18.4659299,-34.1912117],[18.4866151,-34.2453911],[18.4788904,-34.2543659],[18.4860036,-34.2543748],[18.4677109,-34.2994116],[18.4892222,-34.3445792],[18.500112,-34.3445837],[18.4999189,-34.3626174],[18.467432,-34.3625111],[18.4673676,-34.3534947],[18.3916005,-34.3170651],[18.3917722,-34.2900161],[18.3701643,-34.2808678],[18.370682,-34.2178866],[18.3492324,-34.1816178],[18.3274743,-34.1814936],[18.3276674,-34.1634565],[18.3118746,-34.1543832],[18.3114025,-34.1435331],[18.3236656,-34.1346886],[18.3499297,-34.1042053],[18.3393189,-34.0882843],[18.3612487,-34.0597219],[18.3550474,-34.0553843],[18.3427522,-34.064326],[18.3199963,-34.0644326],[18.296071,-34.045126],[18.3068213,-34.0252637],[18.3287725,-34.0191992],[18.3289227,-34.001252],[18.3397374,-34.0012698],[18.3398017,-33.9866282],[18.3628687,-33.9735145],[18.3638129,-33.9292474],[18.3726212,-33.9292741],[18.3728358,-33.917763],[18.3977267,-33.8933469],[18.4486565,-33.893623]]],"terms_url":"https://www.capetown.gov.za","terms_text":"City of Cape Town Aerial - OPENSTREETMAP USE ONLY","best":true,"description":"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 8cm ground sample distance"},{"id":"Czech_CUZK-KM","name":"Czech CUZK:KM","type":"wms","template":"http://wms.cuzk.cz/wms.asp?service=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&LAYERS=parcelni_cisla_i,obrazy_parcel_i,RST_KMD_I,hranice_parcel_i,DEF_BUDOVY,RST_KN_I,dalsi_p_mapy_i,prehledka_kat_prac,prehledka_kat_uz,prehledka_kraju-linie&FORMAT=image/png&transparent=TRUE&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]]},{"id":"Czech_CUZK-KM-tms","name":"Czech CUZK:KM tiles proxy","type":"tms","template":"http://osm-{switch:a,b,c}.zby.cz/tiles_cuzk.php/{zoom}/{x}/{y}.png","scaleExtent":[13,18],"polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"overlay":true},{"id":"Czech_RUIAN-budovy","name":"Czech RUIAN budovy","type":"tms","template":"http://tile.poloha.net/budovy/{zoom}/{x}/{y}.png","scaleExtent":[12,20],"polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"terms_url":"http://poloha.net/","terms_text":"Czech RUIAN"},{"id":"Czech_RUIAN-parcely","name":"Czech RUIAN parcely","type":"tms","template":"http://tile.poloha.net/parcely/{zoom}/{x}/{y}.png","scaleExtent":[12,20],"polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"terms_url":"http://poloha.net/","terms_text":"Czech RUIAN"},{"id":"Duna_2013","name":"Danube flood orthophoto 2013","type":"tms","template":"http://e.tile.openstreetmap.hu/dunai-arviz-2013/{zoom}/{x}/{y}.jpg","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[10,20],"polygon":[[[19.0773152,47.6959718],[19.0779881,47.6959835],[19.0946205,47.6944562],[19.0805603,47.595874],[19.0743376,47.5890907],[19.0795196,47.5888284],[19.07717,47.5724109],[19.0577884,47.5720924],[19.0773152,47.6959718]]],"terms_url":"http://fototerkep.hu/","terms_text":"Fotótérkép.hu","description":"Riverbank of Danube at Budapest, Szentendre and Szigetmonostor"},{"id":"Delaware2012Orthophotography","name":"Delaware 2012 Orthophotography","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/0/https://firstmap.delaware.gov/arcgis/services/DE_Imagery/DE_Imagery_2012/ImageServer/WMSServer","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","polygon":[[[-75.01770587603,38.45188674427],[-75.74173524589,38.4499581145],[-75.80699639658,39.73907123636],[-75.75558784863,39.80106251053],[-75.64692187603,39.8563815616],[-75.47114773904,39.84645578141],[-75.37725787603,39.81477822231],[-75.48746302671,39.6718115509],[-75.50901151986,39.43446011595],[-75.39326532808,39.27784018498],[-75.30707135548,39.01666513594],[-75.1931721774,38.82218696272],[-75.05341480753,38.80875503297],[-75.01770587603,38.45188674427]]],"terms_url":"https://firstmap.delaware.gov/arcgis/rest/services/DE_Imagery/DE_Imagery_2012/ImageServer","terms_text":"Digital Aerial Solutions, LLC","description":"This data set consists of 0.3-meter pixel resolution (approximately 1-foot), 4-band true color and near infrared (R, G, B, IR) orthoimages covering New Castle, Kent and Sussex Counties in Delaware."},{"id":"delmiro_gouveia","name":"Delmiro Gouveia AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Delmiro%20Gouveia&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.94962469285,-9.42956855866],[-37.94833723253,-9.33972104942],[-38.03902808374,-9.33834478757],[-38.04033700174,-9.42845725102],[-37.94962469285,-9.42956855866]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"der-es","name":"DER-ES","type":"wms","template":"http://portal.der.es.gov.br/geoserver/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=deres-ext:TRECHOINFO&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-40.94577071764,-21.31403802661],[-40.62309586758,-20.86277859527],[-40.38881524148,-20.65176928183],[-40.22208792475,-20.29831315792],[-39.80383232847,-19.66412347768],[-39.69603449437,-19.42573412636],[-39.6730376231,-19.30437313323],[-39.70537697333,-18.61383779319],[-39.65291536073,-18.33096390659],[-40.22280657698,-17.97586605847],[-40.34282149894,-17.91980423648],[-40.45277528971,-17.91501764849],[-40.46499237758,-17.92048802421],[-40.48367733549,-17.90407639054],[-40.50164364117,-17.90681176832],[-40.51601668572,-17.8890310587],[-40.53326433917,-17.8890310587],[-40.54548142703,-17.90134097056],[-40.5893192129,-17.91501764849],[-40.5893192129,-17.93211201178],[-40.61519069308,-17.9341632245],[-40.62956373763,-17.98680287756],[-40.64609273886,-17.98680287756],[-40.65902847895,-18.00730758632],[-40.68777456804,-18.00594067991],[-40.70574087372,-18.01755904646],[-40.71364604822,-18.00183989709],[-40.72155122272,-17.9977390189],[-40.75101596404,-18.00252336752],[-40.76754496527,-17.99842250522],[-40.76754496527,-17.98133455271],[-40.80922679445,-17.94852104795],[-40.82431849123,-17.96014319437],[-40.8315050135,-17.94988839894],[-40.86528166818,-17.9827016498],[-40.88396662609,-17.9676629996],[-40.90911945405,-17.98475227559],[-40.77760609645,-18.1077461392],[-40.77832474868,-18.15145652556],[-40.79054183654,-18.15350518192],[-40.83509827463,-18.14531041238],[-40.89546506173,-18.10364773093],[-40.93283497755,-18.12755376077],[-40.95583184882,-18.12550480038],[-40.95295723991,-18.14462749757],[-40.96014376218,-18.1500907413],[-40.96373702332,-18.14326165996],[-40.97954737232,-18.13643231189],[-40.99248311241,-18.1500907413],[-40.99104580796,-18.16306526069],[-41.00901211364,-18.16306526069],[-41.0578804651,-18.16579661567],[-41.0578804651,-18.17535602159],[-41.09596903314,-18.19242508686],[-41.09596903314,-18.20539645898],[-41.10890477323,-18.21290575936],[-41.09812498982,-18.22997114669],[-41.1053115121,-18.23270145336],[-41.09884364205,-18.25590732904],[-41.1290270356,-18.27501572272],[-41.16136638583,-18.30572123183],[-41.15058660242,-18.37393619787],[-41.16424099474,-18.3793922314],[-41.16424099474,-18.40189654461],[-41.15058660242,-18.407351693],[-41.15849177692,-18.41144294087],[-41.17358347369,-18.41144294087],[-41.18867517046,-18.44485115689],[-41.0212292015,-18.46666526175],[-41.04638202946,-18.60362157901],[-41.03775820273,-18.61451885232],[-41.0578804651,-18.6267774504],[-41.04710068169,-18.64856833073],[-41.03488359382,-18.65401561396],[-40.99895098246,-18.67716461675],[-40.94505206541,-18.69418392578],[-40.94433341318,-18.76972898283],[-40.92133654191,-18.81055006856],[-40.93714689091,-18.82347468178],[-40.94720802209,-18.82143401943],[-40.97092354559,-18.83571813552],[-41.08375194528,-18.83231726565],[-41.10674881655,-18.83571813552],[-41.11752859996,-18.80782897078],[-41.13118299228,-18.79286214638],[-41.23610621747,-18.79490315535],[-41.25119791424,-18.81667237761],[-41.2476046531,-18.85544182257],[-41.22029586847,-18.8799231739],[-41.2080787806,-18.8799231739],[-41.20664147615,-18.86632286449],[-41.16424099474,-18.86700290617],[-41.15633582024,-18.88876278307],[-41.1290270356,-18.90440094845],[-41.1211218611,-18.92411655188],[-41.03919550719,-18.98664720231],[-41.07584677078,-19.00567361403],[-41.06506698737,-19.06341902698],[-40.96876758891,-19.12725524781],[-40.96158106664,-19.15101775756],[-40.92996036864,-19.20599786475],[-40.94648936987,-19.2229633254],[-40.94792667432,-19.24264106543],[-40.92564845527,-19.262994866],[-40.94936397877,-19.27859773554],[-40.92277384636,-19.31047723804],[-40.94361476096,-19.352521543],[-40.934272282,-19.38099701507],[-40.95726915327,-19.39184350499],[-40.9737981545,-19.42641186672],[-40.95439454437,-19.46165046782],[-40.97882872009,-19.50297829748],[-41.013324027,-19.50297829748],[-41.04638202946,-19.48333195583],[-41.05428720396,-19.48400945558],[-41.04135146387,-19.56664313353],[-41.09237577201,-19.58966465422],[-41.14627468905,-19.6560023745],[-41.16495964696,-19.65870945459],[-41.17933269151,-19.69389733589],[-41.19658034496,-19.74598826039],[-41.16999021255,-19.80617607525],[-41.18939382269,-19.82375473895],[-41.18867517046,-19.88526474348],[-41.21239069396,-19.89742873112],[-41.22963834742,-19.90215891837],[-41.24688600088,-19.93323948769],[-41.25479117538,-19.92918584689],[-41.26988287215,-19.93796860383],[-41.30653413574,-19.93391508438],[-41.31515796247,-19.9697175726],[-41.32450044142,-19.97647184801],[-41.31300200579,-20.01226467389],[-41.33671752929,-20.05547534637],[-41.34821596492,-20.08652567207],[-41.3554024872,-20.12094384129],[-41.37768070624,-20.1580529872],[-41.3870231852,-20.1863849412],[-41.4107387087,-20.19447883957],[-41.42079983988,-20.2025723174],[-41.7635969523,-20.20459562113],[-41.78515651912,-20.28483210523],[-41.8505538718,-20.32459783588],[-41.86348961189,-20.37513273815],[-41.85127252403,-20.38186947551],[-41.84336734953,-20.40948702116],[-41.80887204262,-20.4249776227],[-41.80671608594,-20.47211333219],[-41.83115026167,-20.4788458242],[-41.8110279993,-20.54211679742],[-41.83115026167,-20.55086497994],[-41.86205230744,-20.61814193832],[-41.82108913048,-20.64437190401],[-41.85342848071,-20.68068284947],[-41.87139478639,-20.72101815833],[-41.86780152526,-20.73849345818],[-41.88001861312,-20.73983762845],[-41.88289322203,-20.76739048664],[-41.85414713294,-20.77478186241],[-41.83330621835,-20.79829746931],[-41.80887204262,-20.80904624047],[-41.78443786689,-20.80568733178],[-41.75137986444,-20.82382454951],[-41.74706795107,-20.87486573082],[-41.72335242757,-20.87553720984],[-41.74131873325,-20.92723207622],[-41.72335242757,-20.97756707786],[-41.74347468994,-21.09763138917],[-41.72910164539,-21.12578887114],[-41.59399502666,-21.16332386392],[-41.57243545984,-21.18677840236],[-41.49050910593,-21.18878861828],[-41.48332258366,-21.20084933958],[-41.43948479779,-21.22094835332],[-41.41289466538,-21.20955924815],[-41.34965326938,-21.21290907619],[-41.27994400333,-21.24640317418],[-41.24473004419,-21.2323365795],[-41.17717673483,-21.25511039335],[-41.09237577201,-21.22429792287],[-41.04853798614,-21.25912893631],[-41.01547998369,-21.25578015812],[-41.00254424359,-21.28725566578],[-40.94577071764,-21.31403802661]]],"terms_url":"https://der.es.gov.br/","terms_text":"Departamento de Estradas de Rodagem do Estado do Espírito Santo"},{"id":"DigitalGlobe-Premium","name":"DigitalGlobe Premium Imagery","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.316c9a2e/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqZGFrZ2c2dzFlMWgyd2x0ZHdmMDB6NzYifQ.9Pl3XOO82ArX94fHV289Pg","scaleExtent":[0,22],"terms_url":"https://wiki.openstreetmap.org/wiki/DigitalGlobe","terms_text":"Terms & Feedback","default":true,"description":"Premium DigitalGlobe satellite imagery.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMQAAADECAYAAADApo5rAAAgAElEQVR4nMy9a7Bl2VEm9uU5595bt6puvd9dVa1+6k3rgRCSQLKMEDCBAHsEGptAGE948Bgz88Nhw0w4bBzjmBl7HDE2EzM4PGZgAIMNNkYEDKDBIARIAoQeLSG1uumu7uqq7nq/bt1b9738Y6/M/DL32vdWYzw6u6PrnLP2Wrkyc2V+meux95WFd31fAQR6FdRfRYuF7ujvAhSpdQsgUusLSikQ6e6hfkcpKOJ9AIBo/VBaINRfqd8jd17Lf8HqgspCy8pm6K0Km4pNCYUqimQukHrs/mn1kcuoi979QNsGo02rRNVXjTGf3e9ePRoj2bZe/Oz1a+0j41omLR53+vwqyzBqDoR9casohe6WTmrroPiHVKcA3BkgYgMsXN9csXT3itBNN+lKDp37CUSZLahKIPrGp1FGIQYLeaBIdWhSQnGmjIoqXukYYIQr4IoXCfVPl8oQnaEow/qBUoZl0KZhHKoM3QAL3S9WjwGro+P1CtHLn8a7lhMfYgXFxqtU+mx83m0JKpsWGUadSZCFEdNqHGrodk+otoj9dmSQrhK5paKx+5WQkmpLikjqG2agQrwpkmQEQHHe2AZL11c22FJxxepKsahVTCvFBpadjEe4pHtqyPpbqtu5casuitdXPs2r6XNABuOwqB7EeFMDLUX5T9G4Wg3zqarOZd0n91VcBi1HB2gWu4WjqttXMGiZPhlGqKFGUFCKCyAiHpoCDyV0CL1vdat5mGEWQ0o1GTKrDvOLO5wyZ3XFfN946OxCjK7dFa/p5WpYETn0rnQj6b/pm1LreCjkky6Dyizqt8Y3NJDaIIoAUgqhktQ2xXkWgXDvso0M4nX0vusZNeIqx8S/RnCAxpiN1cdd6Qn15WMSy9lQAv8SywKETJkMk5hjVRhns0ioChLUWfLymJu5ZCWTMWQWiFDmKNRAnaT+o4KZaTBzAsCpIJp48Win6Z71UarlKiB4lLDhU4dlRDNnrTWlmMyayypN0xWlj2Te1BOXlV55loGCB1AEnnGqx1XaharTgMd8Xex3Yd2bIgsNIkd3Zlvp+fxS4dZl6I/rNMkwcu+IA9NLkY2MG4Xxqy0FYaA6BZFwxjQRkxgzDHlpzAOuEGOOIqlOjxUx5HUfLarnwEPEMUIym8go0zQIhdsb/Ft/wTlrbsCmnl2CuShlWIYuChVjS5iizduU7443Q0YNYdXZu2o+mKZ7YVmE+CpG3/otfSlQXIZSaXCEmDYZRoZVRf9hB+w80OYTNFg296Q2yrCFd2png671henVT8rVJd9TmpQWmYqkjbU6Go5Z8b4k/LKQa23E5dGvqkDTDzwkB9rcR5WNUjPWSXFzCXqSUjq5t5FB5xYEZZZmaWTLE0udbzEGampDawrk28XLRdOSKoP4yo5Uw7ZITuUC1R8h+BTKYKtMKkkpahQgb4rLjm4QnYGqpxvcWhsaPpvEqNc7dGqELKpFSih4IspCRkT2ZVZH1IhIpVBkMqJdiFXa6mxhibhEgCqmJ5gzMYqXGgVsUqd9WB4pKFJCVGFJTIaqVNVZUwYwcKH+Fr8tcOmMp84xi8lF4FV1qfM+BzafT6LWs/FnHmiQOHXuutE2KoMvVkyTDKMSDN4N33cB1IPcpW0gCQn4N4qia/XsoqHKL7M581oPaW4c7mgWlUqxfsycKFTHeYaVOu8WSqSmZVrbhikglcGOMSz24askhfrs2nB+avMY0g3zWSyOaAPPi/uxkgyFFV89t6gMjmqdsYlYWqxjY3pQjy/eq42H9ekg5cjqJQrVtjonJcmPYEM2J5syGUYRo/qmFASAV+N1cSgSFL4PsrPCTcElTFZv6GpXCDpmbtFhlIYqMfCMzoEUDTxgEYxBEUNqyiaOOEazGMq7IzJzTK/v0DbxE6mG4sut+VI0DMg6IIONiVYW3aPxSMLqdYMszrJryhkm3hQ9LdoTYLJh6Vexwff83xYTGFegwDBdMozisPiASs9SYzWhQVPyERWJxwaDlnblcsDnC7nfZI0c/qIRuw8VQ66WECHOOF3h+s4k79h0BbTsB5UzqjnL7OimDFbdpVUM5mBIhhYIUG91jNjJ8yyk2DiE4RbltY+ongsGwRAm10a+OOFk5NMqwygyuY0TmIwlerkEetYDCxrNqLImbQQw9Gv3Hipq2NXvITwCKGqw3LqDXRRDsk4IM2jaLbfAbJM6Rxb3Tv9lfIU7ceIehyajq0vOSdiQDApMEXQKdFM0c6a0HECkjkMySbMXDvV8n1d6SC8+cTK9NuNgBbEyhTKMAAR0yrt5bOh+fqREaIeGP0Vm6Q94ECcJV0os5VyzytIJ5hl//xSU/6tteMXfB6nUsOwrRVJ14ImMt2N9eE+KVjqgJEN1Nkc1501qOqD27BtuQm2K67UgGlWSgcvVSHgu6I7E+XgloTNKINSzjnuLJUzH2WmOMKcKTRkqSEyhDJPKghOtlX0y7MR0ct1tu9OGCC8poMTJqtIA7ECf1hfycFUSlBNykpBiwI1KlIdKz42sJnSlqkngxk8TNRRXjq4C2dyuis9Xgdkv2NhNbwWkbFqxA+lSvF8bDLYLEK/meEMyIPZJ48TpikCoHf2GL5Z0KYeYg3fD6vf4CnagSGv5ry5FU59hMk1gS4qdFhkmmiJ4B13rEoh42NKczp0BPriiNWB1IWREDSYy/dI1NCq+XOdKcxRxLWuZGxn3VZXFDieaNhVXoonEjuIDqW3jwIRRNd2oUUBTA9aMpD6MHsU06q+r05ehN80Lk7ioK0/FGJ2ZHnenoMjjg6BzIZ2bBnjcuD7zZW3b0eWrLcOo1I51EIq4Y5TCDWH/x3CoaFaoAoECexYZta1G8ESp1ChSnBaZMBSS2U+L1SeH5rbkqFFvDWcoZJwqOzm+NstoZgfPDNW5K4kIWmnyGR2PBLX/kvodkqHE76IRmnL5YCwl9uX0qQ316X0orOvvalwl0Tb5uu/OB3oOzuM0TTJMzJDrgHW8q3cxQXY8CUKyxxeUcFjPxjVHhhbipggTCEgXxzR6ZMTkf912I6VSFcHHVTzb0xUjR6EYJt1xWmkjy6e5a754taSjI2ZF8QiN1yWw68sgPAg+dlL54fSMQ2Bh/iTYh6vcEIpQXulqDKzMBTWpjJnxMA5VR0L1p0SGUVjXr0ZJm8gKvh1fZNwaGbRO1IdE5uBe3ZtwgYRtas/BQFR1hOjR6xEmyZkOO5A5jRq4Cql1FdmpXx8TdT93Q04PRPlKl9HT9Eg6hMoRx/pv6KKX+lX5ewsTia9sK1wQ+lJ65rwNGRRxVX5C8yBDQwdBNp0fTZEMI5+EOsfOrA5AqeWOZiV80vhz7s36qRZVQA4n1huCYyK3C/rkc3UdTa5j6V9r74F0o6mWsiyqwNin7266VzqPHDqJrvhCxaCfD5T3mjRAtvCXCmIZg3oT72wYLcsDbPyCEWZeqzUWBSIzAGfE7K3Rl+tNpk6GkU4EAfXQevCKiOlqfqE1ehWMHSmuDFX9FAqKhdA2y6TGWb3bEKCzL6vTob/fK+m3nXy1eVB0MQdyGgE9MUmIzwos6bvzTu21TOrxNfOHfqQyPgY81lPVTqghGdhYfKmbeVZhQYPQl6krCK1DX7pnEOYEKqNUYpryhlUdIXouT9z0nS4ZRqUaQuibBSNezMq1I3o8zQzMmGX0zIwkQzUjU8VGYYLnp/xMuB/Wv02WJbZlhWnqh9SWUsJOLHcudlTSq7djnjhFrPcTplg9k0sSbcg2MqheiKSlLamepEmnokkYJ74dx9ZWdUrdrymBUlsfPQajjUyjDCPPodnAkbxYx6pGEsVSRgcgGD0vKVrHAlrGdJwtBou8LR8PSjgjOnFFdR4x46WmVR/eXidofOSsOMlqs+ogQn11ii1Eu1iY8s/urJOOJaVt6lyVX2G+jF4ylDTRHpTBQ4mnGyZ/to40nhV4er6pdAmEijpy/S2apjqxRneJttlmNvLpkmGkDGjeTOAXPiv29dmixE/YWC3C6OS0sxZFWkZNLevSbw6vsO9k2jBjJmczUOI0g0jYRDilN0pSKq8qktLU1a9uIsby1whEOpGKgJL5B3yiXWhlSu/RDwcEFd3ptGTwianSIR6pbdz3MYoISQrpP0d0j4wlTn5LvMdAp+mvH8UGRcw4vtMiw0jqAEk1om7JVIeluoE2AJ1R4vFmcOPwXu8xoheNHooCInasVxT1a8QIKzcmoLj1JxTwaEVr/6QY0jvpz4TrnBLFxoAn1CYD1K4L0Sr0DEXplmNpYqf9AtJ41qLmtpoOEK8UfJsyFK5Ao2uRjuVXsGJoSemnRd00fnEJXaJRMqrniybL4b6O+xTKMPKQxSZvFkffNa0q4GdfC+gTBNrFBzEwD0UNr1MfCqtlvoPMwUIdSesrWxpZzEGoXzVcR5Dq6IRaira2Np4XDkpdkoWQPLobXWz5Lk7soyOaMwt9NyeJ0ckjriZeMihDb9OQZeD5DhTcQDpNR28YKUrUUbhYPYy8yjvivaa3aLsplGESYAjKIFm1OUUnQVe9cwodYAhoj6gyKR2tOJjuqRL6Ux6Ll9gEUoKee5uAhMwdAhNNZY77LtqONeSbakX7oPDMRyvCBqOpwXWoBh/2F1QXLR0oLeXBb7j2ZUgGBzGmxX1wvZ4e69h0m1yk/WoCvGcUj6TY4JEKq7FqyiiIdYmG/RYnMS0y+MZcHYnOMWtoV19wCHAES14WpzbulTx54V1dUyDrM+XGcYUGFiqE7nsIlfCKF4cRNC5R9dc6XT8BqTMf1Fblstq0mlHUEYKiCVqKn6lFGPhKl6KK7CBD1FMCNdJ/0AdTEJcb7MBE3iISAZeWR4rKfyppoHnxwqmTYWTVhb1PjZWbDoyLtVXGggc5AylF4HsepFibEtpUqKTyaJgx4YYjTXXcODllXXnMZBeNS50g1GLmqW0htri/KkOvWYrMgTnlIoFPlqEHwaaugjQE/bHbLo3I/Aw5JBuojk+jGrfvrUROmQwjHizDLhGfqWcmaweWsqWOdKy7ex4JIrPRadz2KCIAPYVsf5G3MT27GySgPF7MsIMzs1wKFiyPokgH9dVXnYe0xeQfNtGMqBd0NSB6lsFCTykRmgldUSftnlmW2FblilbbY9159Dp5JznS074rR5YmUkpVpk+GiaU7EpevSs3hLa9VJvUbAajnA95JXiLzTS06chuciaAQ/bmHy196xmQQbLLAJruJbeO3lQbZ1xKL2JDtd2Y5kbJ8Wagwy2aWQQ7UAoPET4gOpXWT6SQttpJnpaOG1Uo7LK2h/lTHNvbUyLEzGCA4onPfUyLDSOoSoR67tYsMWgBbetXVFHVIB8pmTEqCed+mo0rY7ZcMT6lm+dWhk8N1VZIismFltAi3KZplvnPkUpmDszjS9M7daEN1RpIxfOf+e/f7MvSuHs8llvMKFw8EA1RJ9cN9GgyVOfdpPJMiVU9KPwHwtMhgz1T31t8pl+UVraIELM1wx+z6VCeKhtmtODkjfsbJETLn3bWUFBIjFkcBTifiUpySLCa8v7GyrixVBTt6kFDZESyVjKtQOsiuq+Kf8HEYBI5kG8YXO31DBq4fELLUPRXTiwth53rI2YbAoYTvRN/KxAGtqMwtRyAa+j28WnI6ZBgVtXjx5c2wTAp3LIsQqN5tRwzMghEkpN8MEF0jPz3rfYl3wiRp8qU2oqtL5hPVUPRepm6IzeG3OqIeAbC+WAoybr5v+xXhUVoHHMeN6Jw5jQS19Rk5bE4SJtJZBgJEPUtmTiQqG92nurrzHiJrMOaOZ4HLEPZKbFGjFqlta66vv3WsGCjD9+mSYeSTwaLwH84A+WDwD/UuX/ktwYI8ghiCZ0RzK3aDtifwJTJODNguehXIJ1pQTzFZbU+lKkaRwXfOWTAyTFYc8lyoIQPTUTLkpMYvXyWVKaspP95WBtMDkxG3RENCEsxoIfKl/h1AMSM98x/R3dpQ2uLgEA20ycOUyDCyAGHeFVFL2TdWFJqqE+QdVN9ijx3ZikKt23qAhyJiaktHd/VhCiNVopUab4kYrQKECSzT4r7ZUVRxvNLBY9jHD6sfIDAPQBqgFhkLBYMylL7uMkiYHCCDdecKvFi+rf9XfbJT9mQtbjucPzMdTgHDK2amS4aRepTzUpHJA4a3ScR6E3k2mEqH1+/dJwzCqePqSNy8oomFR+Yk8ZatU+h7trQwea7/G29NqwQpNtZTcZx4od3yGD1CXUFPBmG+8tWSgVILNzquS0wGI/BBD/oGnB4ciLrhChoN9bxIGJ6TgcSde9fldMkw4pTDowXgB4zgKJyXswKyqjLEfpqSgsJUcBeiM8bYzq2HvVUFSBAk6TfxY2RKUkQSQYyFDOE9pgJbmd14yM+bFNLFkM+1+OqQdECGnIZZCpn4FlJnKu+fHnUG7IAkMRwWHlywaLBZhbn+gMzTIEO3U615NwoxI2TjbojBZhIqUwjoyV9SoUWb0k1/g/Fk+k3kMDZjGy3XlaPqxxDEoxBm2wWmg6rxcLKUaPX7oAiokUnbSN3crLoXk82PnvQUY8qiY/IiO8rg7VWxcTLeHARKU/LqjOrV5Jfcno7fSywP85xalFIQ02VzafqrLMOoupEnGgXwZa4Y612ubLnsvbWtGkr67OrSQS4A/uggSc1OXK1BI5f7nRtHXNkofhYLdTxsblOYTZMZVNY/8yJNJOrGWnXEh9Iqz1VhFjirEcRz+j6oLoA6DkfXhgzspUX1qTzQ2CnvOvDqXToWDYSNfWjfrvLQQuh/Lub5nQFX8aCu6DpFMozsL3gqkfAjrKJbWaQCtV9CUjZ+ekbb0NStNxpn7Mr2IFLqIxX6zcNjb66wMN8RN8geLHX3I/gUioyRryy+fudTluavqY4PrETHVSStHpSf5WjLoJbFXaR2dDssNBhYcIUkl2IFg4Hpg1GoUFuXwdLWLEPob7pkGPHNXjiPEFsdmB7sIBE6XhxJGWW1zyBZNYieIL3Y6Chb2DmgfTCK+KOb3gcp0pSUFMh6ykiXVNFL5/hSxIOjWS+UpwbSE5d1RKjYkMEm1tq35mbqnKD+C53b0fEgtAzyljrONUo1ZWD0Ntm1P7pX8rJ1ROtpk2FkD1FUVFKj5/r8Q9GeD0VZiOtxxZ+NSyOH0tD+w71i/bqDM2wXBEMEbE7Eodj3NRCNsGXYpIPsIHl+DfCAaQdep3kgL3Tkn81B20YGizShWUJbvc8gwaz0nM2dTp2xy/Wpk2CEhPAlK9SQjOZaDpp23m2KZBjxfQD2HKz2JkW3n+p3YVruOBYAijqIxNQhyZmPJbgTqkEJ2YLuQDf0NbBKUYICB/TdNG7c1xXjI4cYBHmZ5QAbDVQLObMWbyNDqQgc0FJlqIah38NCAUqilx7cIb0rOxne/BxXR7szm7hRanUVbIsnq/6g1XTJMOpNSETozX3xpKuegAVNTIM8OmFS6YQNPFpA79yQLgeUAl6CtajYq6sMdL8La5J9zWQurhUjlTyWvvPgNaMBj7jxTcNT+zGwoDHvGOI+QTfrPeW7lEEZnLYWCoIe2Q1DaPN6hesVgzJLny3a1ojrWCLGp4534I/SYZtcSycDR/Bpk2ESxgHKt1uUljmw5eMS8Lpq5DQhFPUcuuydqBw2mSSFQJtIpuhiP4lPb0+/RFenYpiNEzZHYT5saAQp4tncKIFIEAB9HdpgWIiVrBbYkfH0eK7TSP0Ui9EU9fisFh+zr7qgMTKg0TEjz9WJe++wJhmc/7kEehpOXAZjV5QCjQd59DTJMCoiYW7byeKRQZ9VJV7JoPTgFC2FshakDq4RrrymP5Log0zr7wUWZv12MVRBQT0tqf/3nanniLUPjVy9B5LYUVgfZJUWZun/EL1IUYVpW//0q1R61pWfPA4MDMhg/XC0Cs5OTw1SdM+TyVL1FZ5TKToZJZ6FAIfmd5pHM99NGeKLkCKfUyLDKCjXWQUnS0UZJvn8ZCKi1yeF8F/q7ISqTIV8EMGa3UkIUVkIQ1AVipDY0i3d4whsU3iufHUeHerASXY8sNEqP/5uHpqAE5xTWhnb0shI6MaaSh6QIRkYnWmlIJgd6aEYSOnNrm04GmM4QjoVI03znFrRuuXnalyG5pyMZJ02GUaWtgSOg0UYAkuwXlAuaJybBoSplK6kt3zGvlgrWmsp5CwJPah/NYze3kIpMfIZi65cD6FkyJUvo+0e7H3mNrmfojKgEXXyEqAPSMt2WlfYM+EUTPlVVLVxc3bcWFwGm0sR+DB7irYuX1/XjuTZSULFXptpk6H7+xCS+kj0bE6gPznH3elqGT8LxUbvXbnBJuNS+fgzf7c2vRtEt9WY7D/MIXSwwNEg1u9dxGQ8/kw0Ut/SEmw7GXIdGsTm+Z4Buj1aua6kgh7thm5aHYb7A31+lWWoZ5mk37ZGBAH8fI5ZZAPLCqInZaVIHxE03bJq4nR0ky8YHD9uamhANDV6iNcNPLEMneDhXj7dG1CiFQkSOaMnhFitq6T/h8qH6lhISZ8ptS0DiBhPEmxfp3meSOsWqltiu4DIOUoy31MmQ3d0QyJvHWPwyCC6/+DWoRtpsT4o1A3FLWdMArMS6nCkUOZKoWcwFMBT6BOG2awIlcmQiKIAWilWLmgolsUiffhDV8k5JP0PKqfv/LjooAy9VSd+ei894iqx3HhSEEn+a1rkFIhTVdMjrRJSNhD5o5Q8dCJTJ4O9l8n5rwY5AG9qxGE7nI23MmDg5jI0nKSfTlhksN/FFMe2bO3DBKt3sxmZO290BPA+ksxJrmi09IBLi746nCAsDOx4tdKFIRnIEWn1PVTRFI1XbYykvmAipzyFnnwmskENJStFDdZaBgRucB+/TIkMtlOt8xld+rNXwMONVjuQXF58a96cApRugVdq/IENV0oxzo21sPpVggaNVtGmSfHKz+CAMDz7+ZhCfXTtVG5SnGq4PubqJyi5L4mpHcKXZjpV8g+mNSBDDxjS6HCEiZtaSpfRN3ZvGiL75NU0f7dv1bMZLK8IMRG4AYogczMtMoxCWKY3aWRUir4Ub9qafqClN3XrnY6YO0/xbyWke4qytthjYU7ApDIChzdsZ3Qt9BkmVvREV8vYggLExiIiV+6LB0mNoh0xJNlBAIMBGRgYepfRct7D3kztg3dzDY1zfqD8FC6i6GdddZXSUKrQQQe2ejRlMozoOB2UPR7fHBUKw14spBDEX4WMprpEjym6b/MF91xbbWoZnHKoLAi1oWXgoJjC7ROsULXQTwPS1P87A6AHi7TcJvrUlg09d5SNQiF2SIa8UsLOyZNCs5+E1NQuGG++1Cgk3y6RDwsJjHguQ3x0tzEPnQIZRuAOdFVJq5rHuRdLdf94jJeF8+MYPMvvHXVgpFbjUSOGb7LEpbzUjuobf/W/YDQWYViBDT4k3S+JRsspSR47IsD9CfqTdTMS/p14DDg1IAMqaATVkjHmCWsDcfubioSabIyBFjPMekD/oj5DZOQJ8xTJ4KddOXSIGzpPZEXLKxO8TR5PfLqB8GZNb23fGE1oaQNfFUZKbMzLo0FZe61LqBA2+9AwPpoLwdt2MsRB8zCgfXLo0DQxh4cUYbVAfboketZ8QAbA/o6CAxfP50rsg4U3HZdYbmzpuCVQBAKKN7A4ysZ1mBYZ6zTJMFIi9clmvymehXFOrl4eUD84np8s9MN5yZh6Rk1LaFxHyZvx5a35fl0WOKRE1VF1IzLkO+KEFLOcRm2lDhQMPDHBkdRoFOvbAxohfiBBgKH1sY0MUHQV7wOUOiQdFPhvT1EZhb1/G30RhAmO+H1jg4ytUB1fDSrOByN1iBDTIUN9c5+Ews7+tFMfM7aFkAKZcw6sN3NRAMdin/FZgELAoF+ov14kQZhQRfQv8Tsty4W5S7jvz2Ko0YpGsjTYQRZDsDq49of7GMG0n6QTcqawJKw0WzJA7aXKIFSoxGwxI93TdCQMo9IpJoIpgfzdHFnIAcz4VReK9PDHCUj1maVpkWEU6NUOunuMSuQU6mgl/SZGfQlMgvMIE9I+SupLUVC92FCE+kS6tB4J2clPCmODU4O2uQ7xr8CeQ28IWR09jmqdLDxA0fHYiIvRhB2DMefUtmE+MiCDsk23HBAqoGlBKfZL7SU4GhSX6aEd5V95DYNOjxwnnoQGQcE5bt6hd02LDHVjjislgyPgDVmCxApWR9iYK+2A2J0xhIN5GTIKIy7YPkh5JTbolcHbV74MJeBlIa0D8SuUxjEd0wNN3uH8NnlACgCipwNKiAZhNS5EiG1kqMoJ8z9VPjoDcbDQZ0OKO2HvT/4ouDAKq2YqOIkbe5in8XcGlIDMDW+YIhlGoCsgedfMaOmR8K6tDpojMz8zUYqYUKIMJ4O2VSXusSgWpCMADYdpT+JB6BJJ9xE1V0BFIDdye8DEcSnwwIYb6XBHSaeUAjKSGm/aRp2V+MkyqO96uaJgalDQjU4SwfXI9dCoJ4Gqv9jY9ocZEa2NITm1zdFt2mSYpGbqP7UCISBAE2RRkHSWS56wVkqKnFo/5cCo5YrUliIU9efqjmoc1N7QXdubAYPaWMfejhyOZfDl2u5XRGcfAG/o/bEM7sk6Qq7H2ZkJ9szvwu5ds9g1N4tdszOYnUwwOzPBaCwYjwJGYWNjE+ubm1hb38Dq6jrura1j6d4KFpdWsLG5GfVp6VfUc6k89PRpoOPgIqEdbEGjO/NWaMC0H9ZHGl8CNNNv/Wa0s018lWWYlIryMUWR+uyDBCQNTqGVzUkqNzRBNgWExyWpPdlO76ivsD87j2ZmMejYXMAcgJSl69zCfamm9Cg7O0vlzZ0J/pRfRXDlpXfmiAZHRLBv724cP7wfxw/tx9GD+3Dy6EGcPn4Yxw/tx7FD+3Fo317sX9iN/Xt3Y25mBrMzY0qdgOWVNSzdW8Htu8u4fmsRV27ewYXLN/D8S1dw8coNvHT1Ji5cuY5rNxexubkJc9IG6LCTmj7JgS2iV7KCoAIAACAASURBVB2oYal90bE7T4fpOx/lsYd1qo34imUPMxOvkZd/4zLsfdeHLbiQL8IP70kz7cvOHRA6NTC8TOhRyEj1d6c/RliiQ5PgZirauhKjtixsYQsRaTTKhZDAaK/ao3K6PRoJzp48gtc/cgaPnT2Bhx44jjPHD+P08UM4eeQg9u2ZDwPJ+zosp17haAj9LgW4fnsRL7x8Fc9duIKnnr+IJ595AX/8xWdx685dOOAwaKVPICrS9JH0m9tU2iGlS2qygc3loH45umhGwOVfBRlk4V0fpiBAiGn0C6UN6TGMYLcaUeC5PN8zhKUb7rbGYzA0oK/MjO5wdGo5I3kjNBqG28EZaFAyz+at3Lj7MR6P8ODJI/j6r3kcb3/Do3j07AmcPnYYxw7tw+5dc1V1ET25fxN1B0cZai8iWLq3ipev3sTT51/G7/3pl/Cbn/gczl28Qipgvesw96zYPxuo47UJGJDGK9VseESjfm7t9A3h/w3JIAvv+nBx4s5yvrhZZIGDUGJLo4b06wywuKOqeqhjsvEmYGOgMrqwg7RCzsA48qrU/PwcvvUdb8Jf+cY344nHH8Th/QvYv3c3ZibjQUPOBs9XdoTtIsVQm61ScHtxGecvXcNv/OFn8bO/9nG8ePl6xZN6CM5S4ipUAoy88hbycdYPkCJB/g4Dku4OWViKEHG+Z0qzMSvW5v9fGWqEiA9ihGO2wYu6zpv2QxHO+gopUk1VdAWK65NDo3q9T40d4XT1Slj5QcjOsz31YqUysYwAKVKxtshhxqMR5nfN4uEHjuM73/u1+ND734ljB/djZjLGaCRxIAau7VKkncq0vNVP6/fG5iZeunoTP/l//w5+9tc/jpt3lrC1teUyqYY5MrPOSA0Y1GWqn0Gr9YlS3+aSaIbyRr9AGq+/fBlsDmHi0LyhKLWC6DCcf3VuHUBB7+mAhs2PAaMxupw7Bp5SYBwwulC34bWGVA0gag9swczMBKePH8YTjz2ID37z1+Pf+trXYd+e3YP9b5WC5XurWF5Zw73VNayur2N9fQPrG5vY3Nqq41gwGo0wHo0wOzPB3OwM5udmsXd+Drvn52y1qSVnC8CGHEivT3z+K/iHP/UR/OmXn8Pi0r0eLQMVS1EKJCILoW9SbQI+vhmzhTgm8WgPT3xbGYWCWD+P+MuUQRbe+WENSKFG6LKUupFRzYkDB/OqdTHUKRHP34fK0PiO9r0mOmcmGBG0Ye67tpuZmeDRMyfwjq95HP/Ov/02fN0bHsP83GzPIDc2t3D99iIuXbuFKzdu4/L123j+pat46eoNvHz9Fq7fWsStxSXcuXsPK2vr2CrdxuRcdYQDC3tw7NB+nDh8AK86dRSvOnUUZ44fxgPHD+HBk0dDnzmNGrpa6dWl67fwz3/5d/BL//qTOH/pGspWhTx7e51RjspS8Kv3THNCOuf0Q42jVOMWpjk0NH1Dh1umy2vOwznEX54MXcrkHLgXVqE8ykUUyBGj8SI6kiudVcrGTLQH07eck21ztRyxE0uRIwKNTqK0zWQ8wmNnT+J9b38j3vf2N+IdX/M45mZnOlXWwdjcKjh38TK+8Mx5PPPiJTz74iWcu3gFL16+jsvXb2Nza6sOqLj6ydHDipnyaf2PceroATx65iSeePxBvPV1D+Mtr3kYp44dhCA6wk6rVXnecmfpHn7zDz+Hf/ZLv4Unnz6Pjc1NbDfPy7qJem4vYoTFjWTn3c+G8de+JBuSB+qQ6TCImpb/EmToJtWJ78yurdX2cva2UnwuFFFqO0QLMvLEqVWhWZAhvk28Nf9hMiePHsR3v+/r8a3vfBPe+NhZWyYFgK2tgpev3cQffu4pfPILz+Arz7+E51+6iis3bmNtfQNu3cLCpDSsfrMBasjg4Rbj0Rinjx/C6x4+jfe+7Q34wLvfgpNHD/UcY7srg8zq+gb++IvP4L/957+MP/7in3fzCqAPSjx+5lhWUMXNluogGRxf0yC1tpbNAGbk0QBLpVU31uj1kwTzfyky0KS6VjBeQtyAu0M1dAFjH9WtocvCGjOfoEIVELSZlBK9D70osZ0ftICoNyBdpZEI/uo3vR1/44Pvw+MPnsL+vbut6dZWwWeeOodf/b1P49kXL2EyGWN+bhazMzNY2D2HmZkJNje3sLh8D9duLuLFy9fwzPlLWFpejaGoxWwzYvbLRiLYv7Abj589iR/4zvfiQ+9/Z5jIA20HGUqxNja38PQLL+GH/sFP4k+/9Fy7X/2itqF2YmKk1ZzGJDbMDXPUCJNgpHFNWYMSbNlEa5L8F5RBFt75fV13Tafrp0mWbljwYzQgL4crI55NYg9XZiUpp4E6Gk5b9bEDraDI2n+tOzszwRsfPYv//Pu/A+9+y2uxe34uoO+txSV8+dxFjEcjPPTAMczNTDAajcwYdUe2VHm3tgq2trawsrqOL527gI99+s/wrz/1JJ67eAX3VtY8lRLeRaUJp90D6dRlEAC75mbxTW9/I/7e3/wQHjx5BJPJuBephybeXAYAz128gu/9u/8TvnzuooFprBdMQG0IoGHs3SNVN8A70WzxqcPPu9+ASNxLslSJMpJWuv1KZLCUycg3vI/2ru2bSh3cIgFFW2BULVUCNFnvXQyozTmE9g7oHzgcCAm98pnJGA+fPo7v+eZ34Ps/8B4cO7Q/IO2wctvLniyv0tBrdW0dn3ryafzMr/8+PvH5r+DStVudYzSvFC0BhOU7uh49cwI/8gPfiW9955vCDjj3v90ycKmT1s98+Rz+03/4k/jScxeo36jP3jywkSol7uOEWwZ4sQaZULJikXbV1oQx2Ncrk2E8d/aJH+tuCd3XyQ1beOeNlgeKE9FORGJ7neToPN2VUw07CBKVUZSuFuv3hlY6e5EgvIfLyijB1aEDC/j2b3wLfvQHvgsffN/XY+/uXY72acBaZVreQlytz/fGoxEePHUU3/7ut+LR0yewvLKKa7cWcW91NcqeE2nOvZMMgODGnbv49Jeeg4jg0TMnsXvXbBiPIV6VX/199OACjh7ch888dQ637y4bDx7FdOxKHA8ethAFKmwGJFe+ksNXsOOIyRmCITjfB0fRWD/y9cplMIfo2rulK/2eoREdpSK1vjuP/nYmwiD1jIlWAKpQjCw8iDDFMj30eHShI9Ovf+QM/ta/9234oQ99C1770OlgwEo7G8/a+gaWllewvLKGra2Cydg34vjiti0nGo1GeOTMCXz9Gx/Dnvk5vHjpOm4tLpsxdYsIrJPSBwX9rIh7d3kFf/bsi9jc2sIbHj2D+bnZZqTIcvHneDzGyaMHsbq+ji88cx6ra+s07Ix89Z9WxNFqbJSA20ArfaAUyCe2DgpFCJihZbU+20Y2bOLplcoge9/1YTrl7KFZiu49sAN5wpSdWZsbhTpgzhDcwNsZgNfJ93JG1cqwBrIuvTe/axZ/5RvejO//wHvwDW96DcZj3/jiiefa+gaeu3gFT527iOcuXsFLV2/g5p0lrK6vo2wVTCZj7J3fhRNHDuB1D5/G217/KM6eONx0qtal9xaX7uGjn3oS//1PfwRfeeElbG01ji6wXKQXB0q/eWj/An7wg+/Df/Z9H8DMZNzjY2gjj/l67sJl/J1/8vP46Cef9JQu9NtaJOEUBcjGYbOAEElq9CuAsIBiHXkDjSCmGonGF/gB4goU2d19yjDpjLjUkAR/BqAnaxTcwSoyn49V8CDElIeYM8H7/TgRroOe0uywRzim3dU5fmQ//sa/+z78tW95J04dPYTRKKJmKQVfPncRv/WJz+H3P/sULl65gTtL97C4vIJ7K6vY2NwKChYRzM/NYP/e3Thx5CDe/ZbX4nu/7Rvw6ledMnbz+j+XAcC+vbvx7e9+K/btmcff/kc/hYuXb9DgkLwWqt0INHr62Auu317ET/zSR/HQA8fwofe/c7DfIScBgAdPHcWHv/09+LNnL+D8pWuuR+WKkY9Qmz/8e7UpHj7L+CSIpjJA55jqLNq3RhDEVE/nrTDeiqeYIRLdvww+qQ4cgwinAaKzSCkyordEHATevj77Qet3ITQISqbvaixaPh6N8IZHTuO//I/+Kt7zta/H3Iw/D7WxuYVbi0v4vT/9Ev63f/X7+PzTL+Du8gpW1zfMQLbLu0Eyzc5McOb4Yfwn3/Mt+J73v2PwiHc3HtEIN7e28Nt/9AV879/9J1hbX6/jMiCk8mAIFysUAU4fO4Rf+Ad/G088/uC2c4fWZ6eXTfwX/+PP4Wd+7eNY29iMOg1RQNmrWYOBXFcqPQHiOSU7hZGE7D0SUO/nyTk48hi9hORQgL9/GWwOYcXqupa7SuycvFeXZbsJc2RSEjM0JAE5OGJp1CxUbnTEnpOq9+MhsI5lH+Ddu2bxgfe8Ff/07/x1vOW1D2My7k6grq6t49kXL+MXfvMP8KM//vP4F7/yuzh38QqWV9a6J9BQHMFMc9oHo7Ub9+bWFm7eXsLvfvqLWFlbxxOPP4g9837sO0/YGaFHoxEeOX0cm1ub3SaZOQ8hSAA1RULiSXVeCpbureL5l6/im77uDdi9a645z8m/ed4zrvz8qz/4LG4tLpsOGEwLj7fEHWAR7oO92eeV5jBSgTfJECIlCCDMJ6TSgNkkPyUH4cUIvCIZfJVJFH39OIHlqVVZ3bJsDLeBYUY2gYW53sTQ0D9utaty8nqzIYSoYApHLKAP6qmjB/G93/aN+Ps//O/jyMF9ALq5wVdeeAkf+b1P47/+iV/EL/32p3D91iKFKphCu76IuD1qV+tayIavdADYKgV/+qXnMDs7wdvf+BjGo1ETpbP+AOCxsyfx2aeexwsvX4sRwRyfQ25d7zPU8M8tFNy6s4y9e3bhra99uDf5z6thmZdSCg4fWMDl67fxqSefqRYe01MIz3dSCFPNkJGXSoMNO+g6yWDpr9ldxAZzCrbwBB5qL8bnfcoQIoS/EsVRnNE9e5p1KpJWikrfeBGI1FSJFaS8SRVXqJwhKAumX7v+X/vQA/hbf+3b8B9/9/sNpV++dgu/8rt/gh//hd/Az/76x3Hp+q3EDynUcj6JitTbKme9L2mkCgq+8Mx5vPHRB/HomROmpyGnUAPdNTeD3bvm8PHPfBkrK2vQKG1zMhFyClqWzqNTBCtr67i3soY3v+YhHD+8f9t+W1GrlIIHjh/G//HRT2B1dc3pk65rQk56IzbC6xXdjmpHrnMbyr4MsT+OGrwiFfkyPrRqKLw/GcazZ574MdeXe6kwKbZBNpYwyJyTspB6mweRBiN0EB0kC8cPAZlDVdqj8Qhve/2j+JH/4Dvxgfe8FXt378LG5ib+4HNfwT/+uV/Hz/767+NLz13A5qZuiFlCGs9MBcCIkSPPw+y5c/1eeVtb38DVW3fw/nd8DfbM72ou6ea5xWg0wt7du/Dsi5fwlRdeMn1pNOhFiGTk2bZuLS7jxJH9ePNrHsIM7WSHyD4QtUQEC7vn8fmnX8BTz79kwBdiAUf9CgQRkf2TT0KDnTibCMtA/YVnJMQNuAjZn84j2LeYzn3KMJ4788SPcZixNWFowqMUnFQ3Ln4swxzIBhru0RVRCw8Gh8LAGFmc5SN+3x0oDuZ4PMa73vQa/L2/+SG884lXY37XHNbWN/Dj//tv4B/99K/ij77w51hc7p4BiMck9DPvk+jg+X3jMa83G4YQPQB3l1fwyOkTeP0jZzB0ZYPcM78LtxaX8AefewrrG5vdWFg/bkThbA/xyyt2axsbEABve90jOHpwXz9SN/jgaDESwWQyxq987NM2HgE0tNBSOG0v4CgQeXV9mS63kUEIBHryAnGCrPXIwGHzWhqnHWQYuYeQIWpHpf4oXSN7UxocnS2lqgauxiHKCssQwlgEiELG5AqSVEvZdF5FBO/92tfjn/7of4i3vu5hzEzGOHfxCv76f/MT+B/+5a/i2QuX62QZxm9mIEwCTcleVmwUOTfWsoRKVV83F5fw23/8JDY2Nl1PZHit/H1mMsYTjz+I17zqFIoNRN+QQ5rGMoiOV1f2J196Fl+sm3YAkFe7hvjQ8jc+9iBe//Dp2Fd1SN8DIH0ofYoC5iQ8lCzSdjIYb9Q3G5ECRTU8yXRzJLoPGbrdKeqjgDbkROz1KzaprQwURnBzktpex5Jva1gtyowOkHlfbeOfKrwvgypqdD92zc3gO979Vvzc3/9hPHjyKO6trOEjH/s0PvQj/xi/+rFPY/neGsmWFElXVE5kqUKVjkYiRUZAI1FEsLm5hecuXMFzFy83c3aWiw3zsbMn8dqHTlekSvw0ZXAdaYqlBrC0vILf/8xTuHnnblhezZty/Ju/H9q3B9/wltdAB9PtncBCUdB4SuNZ1eSpcd/gt5PB9evgU8wAsy6inkr45/5kmACIa7jEiwrjWxGFwlREb8tRMwFKR3wZTMOgp02dQxMi2hvVuF3XbynAvj3z+K73fh3+qx/8IObnZnHlxm38/G/8If6X/+u3cfHqDeN9POqOJkzG3eOak/EY4/GoLsN2uXu33NgtgWo/o9Goe/HtwFXQPSnH8uvjoVtbW9jcKhiPRrh8/TYeO3sy1At0Urp2YGEPHjlzArvn57B0T8866QA0+BHSjemumFF96ovP4Pqtuzi8f6Fp+EPzChHB3vldePOrH8LMZIL1jQ0aLR8HUSQ2oIJH99bR9/BiJq2/vQyhndlFcWMPqRrJYt1XMJOyowyTYny62ZX6r62oaDoEn0DGJyFooAw0+4jo3qoi6e6yKyWTnZ1MsGtuBrvmZrF71yzm52axZ34O73zi1fjBD34zjh3ch43NLZx76Squ3LyNb3r7GzA7M8FkPMbszAQzkzFmZ2YwOzPB7GSM2dlJfVPeDEYjsTdkTMYjTCZjzTgxmYx7b9Hja6tOnu33VsH65ga2tgo2N7ewvrGJPfNzOHPiSGiXI0SeXAPAQ6eO4uC+vVhaXonoVyNj0+BCPVfgsy9ewsUrN/DY2ZO2Q5+voZO94/HIHmd97uIVQ0YDsVb/wSR4nlj/oWHubHlnGQBa+HCD4Y5C8HR6zKz2v70Mky73klCpJGq9yAdaK2YlBFmkn03UupPxCAt75nFg7x7s2zuP/Xt3Y2FP97lvzzz27ZnH3t27sGd+zl73ODc7g12z7hgPnjyKIwcW0G1uCV7zqlN4/MPfgcl4hJnJGOPxuHmmJ//mlZ+h3duh7zu1B/pG3/qdaZ062r3QLM5X4AgYUBgIA6RXrbu+voEnnzmPb3jzazAj48DXTvoQERw5sICHTx/HcxevOGhrBlnISFPKqRhnLKUjDMb2fciAQk5F9VwGW96h/rq2eYVrJxnCu125P95BbPHrIlGgK4CMBAu7d+HowX04dmgfjh06gOOH9uHoof04dnAfjhxYwMKe+e6dprMzmJvp3ms6OzOpr3Lsvs/MjDEzHlsas90xivFohAMLezB0DR20Yzr3m1e3aA0ZfMv4duJHRHDk4D7bQ2nyjLih6WkDaEgU5ASfe/p5bGxuYnam9yrfkCJlOUUEBxb24Mzxw1o5ZiqBExobA0vSQwDNjsmYZWwvg4T9IOWZ+xX2t65cv+f5xjYymIaMUK0UcjGdfUvX7cxkjGOH9uPsySM4c/wwzhw/3IXWE0dw/PB+7J3fFXL1yXhk38fjLjffbhmwtYmVr53u57o7bYy9EuTfbud5J4dp8Z7bHNi7G7tmZ2LIFgdTJwRHYwBsX/4cQcFTz18M850hPlrLrwcW9uDsySOYjEfY2ip2HCd1FxjrltSLPwNjgsL3j1KavJMMMWPRJf8IC6kTZoj4gftVrirARFOODqkdoXfNzuDgwh686oGjeNWp43jo1FGcPXkED548ipNHDmB2ZrJjemDKafweyltNrFSWDa6F6kOhP/++n4gx9LvVT67XcpydUjFuNzc7g8lkHEMz3JACbUF6ETN8wGvRs+cvY70eWmxFhBa46L3JeITv//b34G2vfwTnLl7F8y9dxbMXLuH8pWu4dWepeyv5+gbW1jewsraONe2ndq5THmXGncF5vR8ZisntfuTpkf8IizrUj0WpMC+gtL/Wn7z3a1+PwwcWcPrYITxw7BBOHz+M08cP48yJwzi0b29zgIcMaicDZlpDAzB0DQ3ekLFu53D3K8PQvfuJYENXlqNlmDOTMcZSJ/T1nJUvcCQ+C1kD2Dbc2lbW1nDt1iIOH1gIfOwEQnodObgP7z74Onzjm11nW6Xg9t1lXLxyAy9euo4XL1/H8xev4MKV67h5ZwmLy/ewuLSCxaV7uL20jJXV9ZiGsCnehwy9NKtQWp9DS/3p8QT0ehvNl2DpE+VWmPzLv/dD3RsmtjFgWPv2IO5kfFw+ZEhDqy9D9bcb0KE5wU5OkXloyTfE63ZX5qulKy7b2NzqTr3aDDClSiHWx5vOSuT38o3bvec1WjLsFN31Govg0L69OLRvL97wyBmru7VVcGtxCZeu38Kla7fw8rWb3buqbtzGtZuLuHbrDq7dWsSVG3dwa3HJeb0PGcJNjTYmg6dDfTpULgQuWk4OMhlyhmzA2Ui3SxWyoltovNPKzv2kTPy7xfeQwfHvITocaTLPuT7T2e7aLr1kvtbWN7rddYsC6AGqcOznJVjli8cBwG0zvj4/2+k51891sq7HY8HhAws4tH+vHVsppWB1bR3Xb9/F9VuLuH57EVdvLnbOcuk6Xrx8DRcud1Hm9t17KOk9UaYCRf0QZDr5exHT6qR5Rj6EahGo+02T6riTOZT7Dxla/p7bDA3CTpEgXztFnJ2Q/H6ixJCxb5d3D0XS3H/upyX30soq1jf0xWce6v1JM4I10wenVH2ad5b8LFfms+Xo243vTo6Uo7RINy964NghnDp60O5tbG7hztIy7ty91z2huHQPL1+7iaeefwlPnbuIr7zwEs6/fA0ra+uqxdq2ZjthbtAV6n7FUHbmtl9Ijx59zCGyIQylLa9kPrFT6tNCmFZakem26AwNTL7WNzaxurqOLRSs1ZcQbxVgeWWVHs6J1+bmFpZXVu0FZXyNRLB71xzinpdgftcsxqPuZQRzsxOMR6NtUVd5L6VLOe6trvOow/JnLrMg4cuc/gwwrK6ge0IwZwCtyf0QKA6loUPtW/1wO5FuM/Tw/oWwi765tYWVtXWsrq5jZW0dtxeX8PT5S3jymRfwmS8/h89+5XncvH3X9VGq3CSrRQX2HNJHbVGZqf/UexNmcMgpwlDvEAVy9FCF6Juvu2MNW9jcLPZ9a6vQvYLNzU0srazi7vIKFpdXcHf5Hu4ur2Dp3hqWV1Zwt74BY3llFYtLK1heXcPK6hpW19a7z/UN3Ftdw8raOlZWut8ra+sum2UXldeMIr3ftLTBk7lUv0mP2s7vmsVkNMbs7BhzM91G4/zcbPcsxPwc5ma6TcfFpXv2x05aaI8ez5w4138KgkHkB4XuN7L+Rept157LWvUm4zH2zncvcgCAB44dwuseOYPveu/bAHSAdv7SVXzmy+fwmafO4bNPncOFyzewvLJqY94d8c/gwU6Zogrtm0xaqZFeGUXyvdW1dayub/jn6jpW17ult7X1DaxtbGJtfR13l1dwa3EZt+8u487dZQuPd5bv4e6SGz1/bm2RAMq45s4BHXv6jsbYMW88c4g1JwbiI4hu4XD06crtfUC1mr331vLY6E0FWr/g3spaJ8Ny7MYndeg7F8d/Bh8ba9YNqQwsn+DQ/r1h7IZSvu0i8P2mta1rp1Rzp371+8xkjEdOn8DDDxzHd3/zOwAAl67dwpPPvIAvPHMeXzp3ERcuX8eNO3dx4/Zd3LyzhI3NzToOPMaw77bJzCkTMwDA0Hfp3gru3lvB0vIqFu+tVKRexfK9FdxZ6nK/29XIby8u1+W2zqiXlleweG8Fm5tbPmBsc8aYl9mkyX5zxAG6P3hIdbINBroRxYUJ50STjVnrJf+wolq31MHqoXX4Y45RyDDuLd4tndWIFKMTy6CH7F1ZtW9dfyE8OFLTEga2oblgjvhL91bx9PmXsbK6hoXd81jYM4+F3buwZ/cuzG2zHzVEL/c31G4oTcsynDhyACeOHMD73/EENje3cPXWHTz74mU88+LLePr5l3H+Ujdpv3DlBq7fWrTXiZpy1OhKweSzT53D9epJN+/cxc3FJdxedBS/W52gS1/umUOsrK13qwFZmIH0w+zNxq4OaEn12AgEvmFDuZ6kNi1lRi0C8SQtaqiMWB6QGoD9DTuzs2TN4s3cv1iQyhchUFz37vjKewymAlCfLRlQ+uCgOk3R7uihfT3D3W7Sz2WXrt/C//x/fhRfevYCFupZM3WKfXt248C+PTi4sAeH9u/FwYU9OLCwBwf3dZ+75+fCqeGhifzQ2LXmotvJMB6PcOLwARw/tB/vetOrsbm5hSs3buPFuor1wstX8ecvXsKXn7uIZy9c7pZ+TX+CyQ//d//C/tLNvfqp+TYPtCNkh0T6+J7eMsbyoLKP5IHrlZkaYsoAOOrGao6CLW2qEYUUq58aSeYF0ab8KIsbrw0OSq0X4d6QjOmaw0lMA82xHFQiiwMymLMR6706wMzMGPvTXzxqrSYNIfTS8gqev3gVTz79gvdUnXMyHmHXXHcKeb6eRub/9y/sxqmjB3HqyEGcOHIAJ+3zQO8PUjJvOaLcT5rXkmE8HlkE+bo3PIq19Q3cvHMXV27cweUbt/HM+ZdtLvLshcuYPPn0+QoqES+FJhqsbQ/UA2icr6YhDhhwrd+etLJzUH1Btt50T9Rja5nE+4AjLzt+M5WRHhk6t+nshkFRRJfEm2rX+ZZ+h7FtUwaNSBkwvO6pIwftDeHefXsPpHUtr3ZAaWouzuL6xiY2Nldwd2nF+SHHH4lgRg9wTsbd90l3LP/owX148NRRnD1+GKdPHMHZekLiwZNH7WhQyzH+IjJo+cxkjOOHD+DYof14A87gG978GnzP+9+BpXuruHTtFiaWtRRf1iuaUpQSUmyzaRo3ixfxjQAAIABJREFU71+Nygv9XU3dZy9MQvrGT8yHteLmKwp3+E5lsW8dWDVSlbm7achPRmVSGkk3ZJ/z9j02/LkAVh3pUtMj1UXvD8WYWFkGvYEAGGYcteDxV53CZNx/tqO1qtjSv6bJlhGwzhKPqGOKKsNWKd0S6upaL+159sJl/NEXnrG6CgqTyRhnTxzBI6eP49EzJ/Dw6eN49MxxPHjyKHbNzWCmOpR+smxDMgztr8zNTDA3sxeH9y/gzPHDvA/hw6UpgaOYvu5ePCcWGuyA0LTioYxIiio0mPkYeXA2TT9UYSW+/a0fDkwYqstpkW9u6byaJ54aJ01hltZ4WtRLZdBfXRKbF7B+SvdG9KpPm2/xokFI/2pqWus3ZTD+NToUVyPx/+jZE/aOqE6N2+8xuRq7OjcXl2xjzzfElUYfkX2cq/6IH6kIIDRG2NLHhQXAFja3NvH0Cy/hmfMvB3DTP3559sSR7v962vqBY4ewsHsX9u7unqNZ2L3L5i7ZCXu8JmeZqFYLGaYasw1HUlJPeRzdG5Mlcy6ztr4K2dFyHX43kRmxstukh16EsJSHw1pehrNopmmImGN2/HF/Ka3hUFHUiI35Ss9cpt9ceTbStX6cwPVkCBFWn39nLy8Fr37wFMbj+Cqa7XLzXH7j9l3cvrvkPChYBVBh4ycZlB8FsBBd718GQLC+sYnnLlzBuQuXHagAzM7O4NSRg3jgeHc49czxwzh19CCOHNiHowcXcGj/Ag7v34uD+/ZgZuILq61oUh8hFe8X1WvTpI/MJCC8DyAqAlBZVjIQF0oyUhWvFCavEIQcnD8ZsVqeoQZV+cvOwOgfUyyE9NBQO0dEUq5oH50lxzQP6PUddAJSNB3ayc+79+ZiQn1TlFaNz++aw+MPntw2rWhdOi4ra+u4dvMOVtc2+ilzYMdcnXQKFNPBMA7tJEPIOtCvs7a+gedfvornX75qdMajMQ7u24Pjhw/4w2oH9+P4kf04deQQTh/vjpEcP3QAc7MTk3li3kwdSOjUPwoLY4ZIvGsYNAOXlB5FZfqKSuxLHdTuFQRn6oFrdlCl0vqbTyxrcEgtQ7U976WHotUwLZ6K85nCSCMKKaBWtA7zGO3H+Q7LvT0ZAjsIY1kN6aEHjuHYwf1RL9I/umGt0qT17vIKrty8XfvhQdcP5c15YmDK0QJZl1GlTRkskS1qh93SewAp00X3ZWNzE9dudidrVW+j0Qi75+ewf+9uHFjYg/17d+PIgQWcPXkEj545gUdPH69HN2wuQGGPeLI0kW+kCvZ8h6ZalvoV30vQ6lVAdbyewRUKoyyvAi2ykXaV2oZbP4lWnuOE+QKK/ZGOkMax7HWAt412zAN8sAvUAIs7otJj5wwRYhsZQiqm95yH1z18Gvv2ztvYMK/6PadSnFLdubuMl6/dAlmJzeNEFBTY6RNiAvwn/XrgYExvI4MEA9CU3pSCuACCIGv9AaBgq2xhcanbU7tw5UaVoXs4TpeM4zPV2RmQjc64rUZCp1YDotZ0B2nFhgzaBpel0ElWcoYeyjIyVT7CODDZzL6RJDQ2unEeI6Ts3nPMmuYY+qV7WqQ71tQHavRsmga16e3FJBkUrNwx1WDqmIjgTa9+VXjeRctb3/U3G+O124v1XJXza9mgHaWmsbRI4M7cS69NgJ1lcAQA+I9RMr2wqNGjp/XiONgq9VaXFq6sreNmWcKIw154k0bgGjUXFEsVAvRph6XUkJiE5xDISjOBnI4oP6VUbWkOqf3U8nqv1N/FQlm9Vw0qDgClAyA0Np7Y+Ao8/LszGB/VEGIGlp2mgP4IQmBD38xnLBYVraYIhbQ/IEP3J6cQh8LsouDE4f143cOneyd0+eLUKciH7tU6V2/ewYXL16uhueydVorx7gAAu6O+oiXGG/3NkZ1kIHRKWy26vFtl6NVzeyk6DvchQ91VVxOnQWclATaw+pC4MmNOot8buaLPEYQEd8P1e0KoLoGegTD3UcO8fap35TlLQq+Od17ZoI+MdMYLyUQ278unhFSEdIaeJqeSc7nMF2s7IT2UbWSIcyR40K2g8vpHzuDsiSPB6PkzO0JO91bX1vDn5y9heWUt8FwbOI6Tgau+LA1Vsya9iYKnYEcZHAi7fhyvGHw8TbdxKWruyrfclwyjbgGDI4GPmr2WEoCuiXsa43Qtn/bKwTGYuKK2GnKeKJozEt8qtAeGiLqwNmmtWX8T6quCmNXCfLJsJX3PUQIl0kcXS7r77DgUzYo6COuF+lGnKj6UQzJwxDBIq2M/Ho3w+kfO4IFjB3tzB54zdF1K7zcA3L23iiefOe86rvKajYS3DSONmY5H3jOpsguB6oAMzIuNS0nlqjLWN4GqgeJ9yjBSm+zstASCYvHHOQlKC06hCqgEegPcFzbMNANbEo3EtFWIL1eQKrK1ps65KAGYGwlo0w1sfL3OrUOPqr5ZFmTIjlkVapNpLSM8UHWYM9HNIRmCxsRrlFJw7NB+vPGxs9i9a8544bEbWnplvheX7+GzT51ToaCbs6IvJO4hI+tL+wqwHe8FC+7LwEBFOG1dsBshfDd0DWB/PzKMNH2IhsaRwRGkQ6fIhpNyoQhM/R55LTNoTQWInVJZL73Sf4oZd3/+k5XkCMhRSRIPbiDMs94X+BvJGaEdnXQ+FBYjWBbhMSKAqOXRzolGSwYCKuekq/PomeN486tfZfc4Slj9bdKnrVJw7sIVPP/yVWjEEusXidHsFGbZSYZk0UpvQAZWgdC/+pXLSt/oEhjfnwwj3fSye+YAyl004LhrG3M65UztpKdwZYQHgCa+xYRoISz7ixpDXU9H6Rl7aJ+912RTfTkDOvkrlrbQmJXSTcqonoV+7iOMuVhbcyiWQ+tlmxr6TTJYpAECIMzNTPDE4w/ikdPHuxoS9x2Gdqf52trcwv/zx1+sf0qg81Y7cSDxyEaMcmzcpV0HBXa0fkAGjRLBFgqXw8a+k5H74zZSJ9L3J8Oo71geHYrob2ebJzMhVqTQUNKIsjN2dkSQKkQ3h/JqcGZnGkprOxFaopN68KJQtAiwS3k8Iz9ttNhGm8lEBwy1L6nRlK0z0dNVJCsLwOK89TKkHDW3kcEnri5DQcGBfXvwxOOvsjebuyo8wuT9hlxvZX0dv/XJz9NUJxp3S5zed5FoBZwCivPQkkGjhPPmNhjmPgE8HRQ1awDwimRovA9ald8NqJhnwTw2CFzHXcObejCnWb77KrVuRHNLXSoRS8tq9GDlQLIh8P/Urw52I5e39EXbG7k+X4Y2lfcQDXj+o11pWsS5USGabCKFNuGgEV5hhhxqQAaPqDwsgl2zMzha/9jk0NWaO7CTfOXcS/jzF18OVuOGmHRkTgYDJaXpsrFTe9mQDA2O3cisM71D9etYFbWzBEY7yWB/MIUn1DpGPJnjXNcGw8KPh0pbPXIOXEadsErrnt9XRDD5ya5cERLpsQ6rI/TSAmOthL6lkHzGlxhdtmveuOtM1vkUU35yRFdjdCKw/ORo2k/LMEiGgMYqcyXFfzUor8pxCtU8RiGCj/zen0Q/DIMARCOOiY+rUdwUeqkI7VU0ZGhdeQUxsGagLL3br0SGkZWXdAISDrxxvZfpO1KHkEsiY6B+MAAzbPZ0CQ5QkhCc92uY8s0Zdkrqk1Mc66c4X3n+QXOVbqC8vKA6EvHgrGj/VYNFzSTqI8ggAgjJEAx5exks1aqGvryyiguXrweDbx3VyJc6yp2le/joJ58kXfAYlF676Nhtc+63kmBNWYZ+OzpuYv+ShTVwKGQa9ynDKDqdo5c1LLRuS/870LJxpb7UUFoCcghlCNbONVJomiWRv4jilIsTHVeEuG2bWG5YXa3YOGaHHj2JYp0fOw+O6dkRAAnL0nVWZOlF1bOlQsXlM3p9GfhytQhuLS7js1953l883EgZWt9VJ3/4uadw8coNQ3WXAT5WKkO+xO+GYjLY3j5SQwaOOmHH2r51+jENWpVC9eQVy2DPf/v5cw11aoidUYqktImEN2nqvSAYTeRcWFQDSKMr8HydL4l1TAP0PcwrOBJWxzOHIhkrzHtwqgJ6qKdIo/dMhg7hnFXqm+ZMHRkfUO1HFxCcx1q3+KKFB7m2DNpvTs83NjfxR194Bn/wuafQsj1OmfLkenF5BT/9qx/r/mqr+jrLZ18jwvPVO8JiHaso+V5fBgYDyVEnoHzUFTuT9fkKZBgZmqoxJvTUfwutAESiXtUnwVSFo0PKAdWDC71tTm1fJ6i8fEaEGtGifrYmxMEoCGaF6CbZObQ627QCp/WtTuQvKj/zpewK0VKemE7sqykDUopRZXjq3EX81Ec+hqfPv2TzCb56x2oALC7dwz/7xd/CJ598uvtbEAQ6wbEkF3AGEE/SBq4TYDGWt2Swytl/xP4Z6EPi71cgw3ju7BM/1t2n80AV+UQiU+YenNL0+CRm4IOsyBqX2pQiRQXhk6USaRppUlKOEgES4pKpt1UZ6F79HlbG7N1KXl+q4/vEnzYFqV4XfMT4cLlMUTZgvCKl49T5Ox+xaMhg6gjZOHT179zFy7h+6y5OHD6AE4cPhEcqQeOxtVXw4uXr+Jlf+zh+6iO/i6s3F+l+jEw2NpR26DKzL4EXlMaL29xRLOjtKEOI9hGnK510ZF0i5r9SGcazZ77mx/pr1dy3H+y29WEVrpTGA/GBnY6eEfBjEkrRjJEQ0pboLO/mdiQQnEzPadjgA8oQErvlwVMdgwSiVT+qLIEXNQIy1vhXacjZrJ4DgsoaJsCge8RRTwaI69SONzt4bdVI8eVzF7C4dA+j0cj+Xp+I4O69FTx74TI++qnP43/95d/BL370E7h6azH0SaLqiBILOn7phLMIgVwETVUJO8p2MnTqKaCz5M6bDjnpN/wRxb+ADLLwrg97QsBGWb0cTKzhgUrYdwzj3TAlKOyd3ie5I8AGC/+Zy7O9Oy1xmNX6itq9VAvu1MWNLm8Y2Z+BSnriyNHRQd0EUjrMIzOK/n0g9k31WGCWwV72RlWHVpD2zM/h8bMncfLoQezdvQsjEaysruPyjdt49sIlXLlxp9emf20jA3xsG2xvQ/H+ZeiXF4sSodP/DzLI3nd+uKiXSB1U1DdGlAB12hrJ4xInNPi8fNsa5DD5MsPYRjI2Hq5nhtTx7nU9tjUjQsdE/MlDqjQkaa034jB0i/WobYg4mR929pL6ENdLkkEdQuc7OSVxMoXK+3W0Jt/PV8xWdrK+lNtoi+2caEpkGFlupWlHcYOgPUc73h2ioKKh/rQJTFemO5F9VIbdDzwJyFWJtADdiweKl1taBfhEzstMHvZeyzOJX7oHDcPMl0j8ZJGL0mT5WVYSoNemhE/7rsZRx8L7a8hQYH7CV4g6SrPq24/hlNAmIC031fo5khePlP25qZ9gsPZ+M2DAtMkw8omvHpKDDXLRmrpJVo2Ppedfzc0ejgAmfcmVTPpS0spwANtOk72d10Y603O0nObAfMD5FpWpVLm9n6T6rp7ZqCSbTyPCY2RdOWgoRZ9DSKg7JIMBSolyMbfS6y8QNB5baYeBQ3b02rxPsy9fhPmke2DqZBjxLrReBsRkKLb2zl6llWu4S1YDMy77qZBejUDblu6en4Hi5Vak3JEmm9oWzpMhSCmk26wMktl4pwHIiK4R0groJvGpfYRJWzXkjAHB2EkOu6cyWJ0hGTTi1YhjAKfNIkgVe0CJ+2s4oMneL7dzVsKVUkMCwG54lS9ptJkeGUZsEJwkOappaNF2FHREU4xangcZtggXmcroUBt4OJS+MwbQJXr9oARdzXHspTZkfeG4MDHnswodPKGoRo4Z2vltllezMgMP/nSJ4Gd6lQ5HnWEZQscqe/Rm78VSXpalYZyBZAk+b+lLzzG5OUeHsIAe09Te9dWXYeRnxfkWD5yGiwpQtLKRiTVkIwGDVPETMA/vpV0kt+bO2UEs3DZ5qM5BYbYAPqGvCgtTBNa19dWgX2K7JArUyTsHJxoc4fS3tHZ+yaMaMiRm0DcMbePR0wWjZrnPHg2B60iavbeb+zh7BNeigcjyVZZhZA+sFH3YBoij7J5qUSI7bzBOQuA8H9D7QgNdKqImA++jKDlWsX+cRc35M09UZkvDAHTDplRjj7vBjGaxr4D0pCc+qOe1SVEqbuCTz4glkChVfyZbX4augA2E+eFrCJGBlkeHVJNoOLj7KYPW5e3FPvI5OeHUaIpkGHnK45MSe7WistUwlmFeXSjJqFeYeYpKkuvAkbkVEUH3+Xcjj7TDd+A0TPpNaorCq1D+qXGTdqR77Hjfvoxod8mQpXv3VJXR9J9407+/YWnZgAz9yUk9n9TjcOjqt2+BMHcZVvu4ZYoCnnXwuDjie/n0yDDqA3E9xcnHFhCF5By+F/okO2U/n4uM0m8yRvfkUgMJG6pGssw59VfpSeXRAbh4XU4srZl7oL7KxCrxKww5eBAa5eClSO+beCpWmjAnvgy9tpEhCE6A1Vt14+jDbVmJQY4h2soPDRIvRgyUc8rUzJSmSIZRH+z0aAZ15GEkZkvFQ2F4loIdJYeuxHDmW5m3rEpXn8jTSpH4FpcqVLcCRsqx5ckqAuX84Z2p6njGAB/LVnqUd3LkEpATikVXIceMO9qdcxdqVitFvgzBhmXwts5PSaPfpSY0jmGyxGQUcDxy+x9q6WTyY+muBj8bSYsCzqzrhXL4/sR6emQYmYOQcbgxeJ+F7nX0S2SG0qSAZBziszNoWLRQSwZKUOu5XnRKdx4xJdxXmK20+6dMnV+jwxGnR7w4+oQFCHJKks9JSjLqjo+SdToIpwj6ccJVV4F4HqcGzYygzcsxW6uKeGkvPa5tnKw7gW7YlimUYWQHs2gC2f0U9+aS7EGSddSfnkrRKc2wkqRtiyPngMfb7jN5dukZJykqfzJaqYeR43j+LlE7pCyWU11TyztkUf4k6YT4VDpCO8wZxer9cO4/TnDaMqSXSLcdKJup81hCUTYV7TLS7J89S22SVca6hh4QpKM2UyLDyCaAhGoWtdWrq12bQwf6bipuk25kVp3bNKJFXCHKB9zo1CyovvZTFRnStJQLFnpE1pd2OsH07SIWqUhxhctKFD7jYWG+VGm1rPmcQP5kUGmBYJaBnN9eJbrttSOEwgBAuwkAwydw+238+1A/UlNaspYpk2Hkh+L8hqgRBEsmYyCn6qVHhraApjO9E7mZDzVgRszIpwkTbrBuOWRzNeMnnpnnpT6xRhLaSFVeId2oE0qgDQpWZPQilrPynxf2JUcKa9SnpU4ZNLIM9V7J/ISmTMRXu3rPtKkzcmBlfhpPrTUW1Y1YbyndWGg4/BTJMPLB6AtnL/yundFH/eFOwKsoXWrug2pr6dxLBhKOFDm8VAYcgVUa1l5sZ4oxhvt89jqngGPyAQYYPhBRJ+Gqssq2ilM3pHmDReS4gBDbJhn0HqWhyp8al+MJuWvpq98E1ZdahzRDAv+2QdpUAFwGSXQk6WMKZRjp5JiXVwv8vKt2K/U/fdS01MGueKhD2+vb1u7tVjXk4J1uhsW15cZS21jgaOSEdLPjtyrY5kDk9IUjmTmR9+yrSTFSeSxhmYLXeuWKhj6YfVm7moYgDQOjgW3JoHpJ9UX7MwNk+FWLK15U25q5FWpnLQaiQSvnb1atvAY1TZ8Mo0Lhmu+pA9dxJaE0lVD6tOWkS4QmLLsMG664ExYVg+rzfEJpVdpstqGNKcLr2nKfVa/OXVxn1jfDjdCufTEx3cs5pbPoxQ5Z6VOaVFjvjBxAGqZ+2aAMpIP4PfEY6jAd5bPEtnQ7PNuMHZ43UBwhWqEmp8VgutMjg0WIGF7IK9A9UdYZCB/m00+NHYnxEn92/JPVUUrTY01XXRKtojQkF6KBVKLg4yRKHqwSx8eBpy4jFopwDf3QIMRxrjOErCceRIoUEgioCsQdcxsZ+srrX1E1HImpr9C5ddQzSl15LLbMLNZHWrk2WmysDgzTKcNI/+Qup0w6kewMxjfqWnwra4yiKm+Qga2D6hjzbNQhIhWrFx80UufSB4eIweI0CURq18X7yqgf9eMRxin0v/NtUn4+PCbWJ0dJoZsS6Vk72UaGoCzXRY7oTJPz8HzFAauglG7yCqAxMXRUolMwPxseMMHITo8MI5vsMnBXBpSvYuV0GK3S7wZJHOXcfvu6oY6CcZtxZqOQpAmmp07AkYQjG9NmRxOqJ+keOUtuG8INaZ1lCJEqy0eOkHQReSR+cvssQy+0UIqoPGT1bYfG2yI1Oy+SQQ01vI/Op0yGkWJZv/9quGZjxFhGf/7FyMWD3HuegNux0NnbqNRWsTrjCs8dIJXB67mjMZ/Jbf11GgiC6rJrP1eMUSkpe7i/ThqnqW29fS8dHpLBFNO/WnPdXv/tW7X9tgR27OM+mnsfUyTDyHKtXkbgnuqhWqB/UcgdO4U3wF5UYHMPEQtzQ0YeURscluBHLPiVNAiRgXcTzJmFf+lddRzqmxkr4C2K+qFPfUGzgEQXJkNRGYJeOCrRfaNSXJdofbZl4J+hot7OixP5fhaiAPpXfuIDPdSwRSxfZaDcbqd7UyTDyGy6xNwtrrnX/9TwhDNkQi/O7UTHPjtCsf6sNqFlYcfQlIjyQDu3xDKaE6V0g/rxA2POo5FgpUt9eo11ojYYDLfYBqbzofG2epVFLD7Z2v3T26dQApbfOgAMyWBOJ6y3TgZzzPqdj9X4+LWBkN+20t9ENCEgZAeFv4S5l/atPbolCwPHlMgwKsoYI3fp0LeYkVUjpLxfghYQDCdczC8bgCElQruwEgX+SuWFfppOVdHqSPpViAePKODfgEU+fe5bakTU5xFC+0pc9zNURYVDS0CvtMMQutd1LBu9yqIbzaAMKndWeon9BTMIE1KKioUYsy7UuTMltgPlk7CWh88c3HvMupgmGUZ+uyJxPezn3ldXmUKaZDxUBdCsXbysJwl5Ru+YRagXVKYe2peJwkQ8KdtwVCYn+koT7Y6MMfNrRdnT4Ue9A9s+QMZXdv4knySerYwHtSGDB2d3mn5dQmNKN4kSySD1e0VPbpuNtuHh0rvHqzmpPYHCNMlgDwj5J0UGSlWK9B6D91QmpFDJc5MCwmSyxHuxjMOnCuk04+50oseRzOYR3taOzRty1MhgPBYbmJzvhoUndQApoW04tsL8soxGW0zXxlKhz21kMI9VGYTq9v3X9BjvV4sUP30A8Pur3LRMa73VNuILfKuPLv5cQyyfFhlGvPrJ3sfnZYxudtzgbKkD4QpKx+nzA0XZd1TwwDS/GS/xF5mk7/l+YtvzTD3OrTx2zm/pSuWHWGPBPatUvjj9IX55/AokGjojo0YmH/tBGQIjVq30avicqCGDkabTvazf1C/z3Z8gS39MVTai1V4B+urLMLIxyGHdEnTUQXdDgTLFzpRzn9IoS6L3lki9IUkJNxJNnZJGQtwytovfKxF19DxVNGydJHuIVbRnRYfgxtHABYFOyp2Os6X0uG+xl8RRbLUIUoZlYGUG3fWPOEt2cKptB90kPeSTwJEswnTROgLhiyA+pp7uiP0OIz0lMtgjpIbY8AeEzNtoMHSVKfiOcafeGG/oIb2wgSYShGsHCY0KVb3CivKcQkTSyV49d099atBUxw/KLvXV9d0cysqMx65zRhxhGXJqkMjXaG68ijk1Db7mWNRID1cOykBlgDuu/1Fyr6JL4FRUAaAkGUrQLe/1BJtlYGrEq3gpcjIM9g/0TYMM9gipnbMvjq0a/jWtKghtA7Phh9lrCfeLMaJIR+FTktIs0hUimw2PQhQz6CxQqKTwSeVhqY8iRH5bnK5tW58JvdzAC2zDwuErKqm4bv25AR0hqPK6n7r61ZIh9A2jSSHVVNOEHU7vlI7Ee3xwktmIz4oM6QI12+WTywJ7g+MUymCvoTE1K2IHhE+MS/qtdRJzIapYLTfEsJipEhsaI7ZNAJqYolyfBKayMHD0vSPbNzSxZdgqYxhEOsKiiOad+sA7tQbfJTp5SAPEfIrl78tQNSTOQRSD9F5S1NK6xI85KYFBCfe3RUIirpNnH/+Ox5gu8inUaZFhxMQ19+sMVKB5NvtrHo+wmx0koe9sq5xLsiezzWRbEnVEQkvVhgDIzmAhqdTB6fkq7Ub7SlmIOGTc4diKtlH0Vk9uIYiSUx4LfWeaNrJebH1W5lsyeF+esxu4qPxA1HUoZ3oMZE48qCQgZ+038xNcodIiHmMqGQFqGmTo/iwvR3Nul4zfUL0o02R42og0YdEfjUuRlzqwsJmUYZs7ahw0qdZjHbbbXNMeT8NKz4Yg8F3mzJykMnW60hdEeOhLqm8RINNpKUM7zn3D+m7JED5hovedJl09FhppGBPnf6O1Zrqe2DR5HWJsimQILyrrP93mZHSeoTN1oxzy/xIZY2NiSRh586AnZ9Bowmv25oyDSkhtmB/ro708GAT2H1BnD8c8ihoB/F4ICyURtUbkyH1c8T5y2yjD4HPLqPdS1OKoblPbUs+ahXrOEO/0lsRPUVswFbgd9PdvSuRtSmWoq0zFBTLmnctufGvn1ZBtkqROot89QfQ5hKU0HkGMSY6tnJ9ZyiJ2G7kPXaWy1aoS2+g/hfowRdO8g/0k1XVeSKYc9gt9N5kI6tgvRcm5XJZB1XZCegi+lWTwP+rooqsMAoqkBeDHWXn+pqPJRqlvLCygKEg8VyKw6Sq/OKDqy1fk9GEp51X0r7IKpk6GLkLwhM5GoO5MGxp6CtQL/SL2F4aCZOAyuLcWmCFH1CZn7IVMMcDtbepYm7RRJCkKFFcQs1qYT5atpO8MGLWwt8gAikzipS67OgjrhfpRpyo+lEMycEg1SDNAYSCKffC6u7DDa101ahfZjbvQbnA+0h/GTMdDghq6evVeAI/pkGGkNlk4nDCK2US2BEYYGYOQ2lFvgPvCxnSL2ZJoJKatQny5glSRfpCM6Tn8EIBZvW5DzGu68fU6tw49qtI0ejibAAAPLklEQVT+QfDDvIMrMNQ0LXcy5AzT0zy/OSRD0Jh4DU8DyNCC3qMJ9mWEj40LBd1dF15MCDSYlvIVYDveCxY8HTKMNH2IhsaRAfATl36aKXUdhCIw9XvktcygNRUXXg3fynrplf5TzLjz/KevJNrhpKgkiQd3KOZZ7wt8+ZUR2tFJKs/hUBvLIjxGBBC1PNo50WjJQEDlnOhmoTcXMC1mV0gdSXsByLq+xPpFYjQ7hVl2kiFZtHU+PTJ0f1IrhTXfnVWi3oHmdYqvDvYuoNoJb7xZKlQAn+gQc6a/Tml9hGV/UWPQlx+UnrH3DtPxp8mm+nIGdJKnR1SMpPItJdSz0M99hDEXa2sOxXJovWxTQ79JBos0QAAERdigx8LlML0BCmJO2NsI/A/q0MqdDK3zR73HozmI5Xr6YMpkGPUdi3aJRX872zyZCbEihYZwvoi7ELUjglQhutoX3Vex1bsLtQtb9lIP6RWKFgF2KY9n5KfX3GuUFJOJHtjRvgSIRy369ApbuUaXrAxNMStwhvmcxHotGeLhNTYqOhIjzqeQXlVvvDmGql9ewYl/W8+qNMXpfZd0XolTQB3zKZNhxALYLYV4MxBJ+S0JXMddw5t6MKdZth1fnUaIceXTVyHicprWZweJSuT/qV9Fg0YuXz3b2xu5Pl+GNpX3EA14/qNdaVqk8hqPGeKVXy8S4is41IAMBgzEei9t0DKhe0Qvr7roWFv6HCavaohJRzofs4ip5ArJJj3WzGGmSIaRFuQDUCV0VEKua4Nh4cdDpa0eOQcuo05YpXXP79uJSL1HduWKkEiPdVgdoXcS01groW8pJJ/xJUaX7Zp3rTuTdT7FlJ8c0dUYnQgsPzma9tMyDJIhoLHK3G9RVcLEEzQaoEnvdk8IBgMrjomPq5F2gXupSAkp0rTIMLJyerO0phyKUXG9l+k7UodlMBIZA/WDAZhhs6dLcICShOC8X8OUP3zCTkl9copj/RTnK88/aK7SDZSXF8CfIixe1rGi/VcNFjWTqI8ggwi6Z4cdAUMqsI0MlmqJIObw/s1X1Yzh6JfJh0OUtu+Rql/s2G1z7reSYE3TIkPYqealVGtYaN2W/negZeNKfamhtATkEMoQrJ1rpNA0SyJ/EcUpFyc6rghhe69iuWF1tWLjmB169CSKdX7sPDimZ0cAJCxL11mRpRdVz5YKFZfP6PVl4MvV4o4nUKPIYNXRlp6sheqproVk0H9IhnyJ3w3FZLC9faQpkmHiUaNSFI8DOhcofL8hvEkj8WvrWQdeDSrWl/fd2ktwQcmJeFakfFIKZ80CD37Dj434RBqsNK8I88gWzeA0kY7/dOVIvS8gWYkey+9Bri2D9tvTFzlS2Ak2Nm2EQj9uiMR/CQ3pa8oWuIvWGCo9oBFFpkeGkaFpNcaMnvpvoRWAwBjx75NgqsLRIeWAapT6MJL1qEjI0SX8pRk67Be14RCqyJBy8xBXhegm2Tm0FlKoZ1MaAbRO5C90+v82dyYLEtsgEBX9//9MDlYVDyRPcov70tO2xCYo0GJPTrkkbgFPyUQ6nddVhzVKjDl+Vz8DX1LtaXFxh/yY17cL4M/S5kp/NZ/8mg6/CqQ4oqs9tQTU9PrvDcjbeLog2PTmc9KmWB2Dm2xvKHS5mtWnvrBkyr4MHAsR1V6TbLwKRjk5WhZ70CvH/MKlEJEpuBTbQYIrUhynWmN/0cE/O3xq9a9xmjGafTycXcnFJR6Ct9lrE8b8Uxlf9JvbO1Csxed0+M0I08pA8S53laOGFM9rFUlqDz37XkLebaxY5aAyqsoe193JvLfa0qcM1VYMbC3dHI2zeF4yjZ0Z9uL1MfdvDt3DewSb20nf0pXjoINqbbf7poNsCnvwhHKAVr1qRDaWaCVbHEa9gTPgXWis/1PozEVaJ3gF5PiaDj/WbtpRTgsRQKutb5cEJc4ZHEa7ll1Wja+cnenx+K3gW4sBk2ZQ9I/SwsyBICtWHbDbQS1BBwhLltyBqQzolB6xn61eGxwe5fSKmKTh+dm8iXyct3ke5AZ3HTj5rmdXJvyGZe43Rjk603vLtBScTfj4Ze0p0Ede5s8m/DUdfhpc+9UlO5tQTx24rswitK3BCwptNF24v3EghiIHn2j853HfZPZhxshG4f4D5ZNLTtCIPhqrbRQWw0IefxXdPpHM835DvQ0Kl//HduLt8nzr6R/NCfdIuNSrPtzslO6v3qtQr1+FiZBN9pr6NLe4BslXdPjFduZCTKWdaAOm493K+CVpzzCMUq9QtbKkDHPsXgakI59Y63kJVSKPhv+uiVxdsz5EDZdfkLdZRYftIBcn7JRT+mPwuKPd+8SlT7Zv/60susei+F10EDiMKGmlu2guOdoMxmo2TzA3J83EUIWrglVNSj9WAubnm+cU7kM6/Co96ZDc8iCnWmqTLJDOtjYtmUytVqFGwS6QD7Ixq8zE0JU9UaBv8GTr5785P8kaGGU3yuGDfUSjxvHRw/66AwiJHE3TCY9yGU0xb6ll6p5p3nQwoGTXi9LGwa8RtIwFiqv3vc21dveT5qlfSxHT9mt9ToffPJO+aW8QroERAgejSo2VD49sNTY+dHRaS7hcRtBqTTxn1dsJRykrs9DIROcFBMmEbacxoLNlxwBMRFeG9AXc5CRr82iTtu3Ix8se6ETQw/ekg9u86aCMtzOOAU7dOkil50/kdwlA635e92pZsNHoCAB8hldyxaXPd3T40SHaHN22V2pRPySdwHl+OtGqtmHm6DrRYXeodBhnMDbQBb0zKS2t5hT2og+8rx0XhnA1o9LgBbIaArP1q9vU13PgRwgpMCTecy0q2bLOuw6NsXTv0VxcXPJSl4tzNpLZYt7lyxGY7M7sIIkAgrdB+4gOvzorzlscOKWLDVDa2V0nsYtuULBp1b/XcoQfZRf0Vu08A8Tp9irDDg6k2VyrJvTbYG2KQFub14V+9n5DlaUgfwIcNOaEPxTAkxgi6qLDEGadjqE+lT1LMXSbPA8ascpGc2nzr+41zpXBdekls/zPOvy8BJnacFurj3JFqrPEDN7mnEDgOR/Q/cBA50bU4eC3pYhWikwUUM0/ZcI1b3St5ZWM3M7el2yJZp1XQ3rYiQf1qjUMJXWbnDwjNkAit/2s26nDc4EOQnn4eUPktW4R3UpN0Chwr1MGt0/1D3/Nc3J8XuFLOvjNfUazFELCGS7O8i5rKRUT9ZLCIyvFbLMKmW8ZceE+f1/qSB++WyzD4uyySxSuQtW38qaOep82aCVeS8fPxXLk8P92MOpLX/LabwVxWfaiwzk52c+jHBK+fc7+NxAmy7bax54jC1TVwXEpxK/r39HhdwLxPsW5NzrOg2ZATv69eJ+/z3quC4rfcMaK5NyJhI6qTDYlB79NL7aMBcBZbVlYultFoF5l4kZ4sq5lIqDRTF5Ceq+gyLfnhHnIxc3INx2a4gCsY9WN2Yd9acSmxxttyYNB4mLEy3WWTNdK6UM6/E6wCwAW0WgHBvllpUKeJ9EANsGO33e5JbyrKp8VqkjLjBZnMtizAgbjeHlyq4CaP5itFHgWgMeyRQ91JzNXLARhOLsGArOCYdtq6XmKsrmzFuSuTHnXofqWPDlG/ylNMI5tskQyApzK3N793fapXeUyQ52NxKJACVt2QQ1/Tqy/o4Pf/k3nKGconol7D/3swqBMakjGFD+DQWnRqRYOCqjlufZmAwdP2Aj/Kc1u2ucp05LXdJhxDuJZ6NMWIBCU0K9IxnDqR47jwOQrnK5mnyK8bdWIz3G60JwIev0UZqtpRF09yuPdp8hWEGjDNj+ow88HszCBfH7WyU6P8wIVSrh/VinVn6nu7eR425FfIt67z4jsPJwThprfRCtFGAKn6vfo1oGxqKdCU9cfZJF8MWwCOUUnsMM8UWzfD6639wnOXYd25Hy9BNB005Ix26XpKmLZafba/tJneGVva/RYsfqJ4q/o8PMEEKjmrK2o3n7tgG70y1XKJ8vJ3Jx9LtmirxCxxltLKbfNvbBKJUO2Mm3UgokjyrW08yimt4s4U8FwyWvZlZ94mJRLRtvXrs8JzG+Cyg0Epw4Ifr9K9M/Pv0LoMgCITQOYeYar96m/3/jELmnhLR/T4eeNDoSa3ox9rDZN5EuOaQ60XUvlDB4YO/URb6PtumYMplzfoG2ZstnM8oyn6rDUF+4UrY8O8SVsoyCMRnshWcHpo06kBuY2teSItAaeLp0maEwd9r2c8rSuJFKrXXM3ycHIxEp55lNu2fB5fNRnXM61jGojqXxFh18NxqmcnpXPzQxf+0cFAVdRntK8BtVr6eQygYSZYqaXLUAhsLSh9Xo/G8YCn3IezJFwrN9aBgw+8ESbtM/WNf40nMIQ8wZn5L6A0PsOHXQPZajkk3MVniBc8zS/FdVLrVuZEU1+b5BeDbBKhxh0Ytjjgzr8NDnm8qqe/6otdD18EX7UNPdgbzzU0B686+k33dqO3KKz3DDLWuUsu48Tx6UmxM1H3m1gz4EQ9MlM5iAqzrWa1DMVjzfXnRa11XijYQ3mqevT0ghycTAM7E0H2WW0D/GzAxJ+5XFZl3Zfu1uin3u8ZINbzX9tumVtZvqeDr9EuuY9BfAeVyilUkL0seWkJUIry5Ch40YFYUoNtOd8QrQ2bbpt62NDVFsv97n5Du4sm5k34Sawa59Ws6KcJZ2zFwNy00eZlLQ7kWOtMUzntVcdYIP+95CxtSEdyZm9L24XygpgCjznp6Y/db+1ZFm8SPc7OjhD9PSCqFjp//6YCoQmm3LHEDz7z0d+eB1KmkM0rboMWikaMS+uC1KFwKdI5Bys7ONTwLOXERMZ7mIfDEIf5z1DmHbiICJTRCMgE0QF5h86nMY7P900zMTg1Zib0eGUWnlMLzOHeYyVa9OisxYwfFOHn/7zCksmTSQfh6mNupvcEo0oKn2bDvQOtLHwdOqWkdLt+oNGCi49OAQBs2gCRDbrLF4T9bt9KsMUhfNv3obx5+GxME9mycDN6PTcL/7QoRmrbDEzOmmyDp+fPmAblMZNrgBaiLejEo+B+Wx4wwST/Y4OP092CdxbAMmVvo7DaJv+M0hRKFf+e9oGjJpz2zmnU8SwBOkpCJhJmNlIm4EWaBfjHoJl9m3pBlanDi1TTf0QCMMWXUbIM/tPHY7UghJRMkzz/YXGfyI1g3cNh3rr+B+Yf0yHfwAjBO4Lyccm/wAAAABJRU5ErkJggg=="},{"id":"DigitalGlobe-Premium-vintage","name":"DigitalGlobe Premium Imagery Vintage","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.2850d66c/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqOTBkcmZjNzJ5ZnozNHF6NnVkOGd6ODYifQ.grAnqgpCjOaeq-ozqt4QNw","scaleExtent":[0,22],"terms_url":"https://wiki.openstreetmap.org/wiki/DigitalGlobe","terms_text":"Terms & Feedback","description":"Imagery boundaries and capture dates. Labels appear at zoom level 14 and higher.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMQAAADECAYAAADApo5rAAAgAElEQVR4nMy9a7Bl2VEm9uU5595bt6puvd9dVa1+6k3rgRCSQLKMEDCBAHsEGptAGE948Bgz88Nhw0w4bBzjmBl7HDE2EzM4PGZgAIMNNkYEDKDBIARIAoQeLSG1uumu7uqq7nq/bt1b9738Y6/M/DL32vdWYzw6u6PrnLP2Wrkyc2V+meux95WFd31fAQR6FdRfRYuF7ujvAhSpdQsgUusLSikQ6e6hfkcpKOJ9AIBo/VBaINRfqd8jd17Lf8HqgspCy8pm6K0Km4pNCYUqimQukHrs/mn1kcuoi979QNsGo02rRNVXjTGf3e9ePRoj2bZe/Oz1a+0j41omLR53+vwqyzBqDoR9casohe6WTmrroPiHVKcA3BkgYgMsXN9csXT3itBNN+lKDp37CUSZLahKIPrGp1FGIQYLeaBIdWhSQnGmjIoqXukYYIQr4IoXCfVPl8oQnaEow/qBUoZl0KZhHKoM3QAL3S9WjwGro+P1CtHLn8a7lhMfYgXFxqtU+mx83m0JKpsWGUadSZCFEdNqHGrodk+otoj9dmSQrhK5paKx+5WQkmpLikjqG2agQrwpkmQEQHHe2AZL11c22FJxxepKsahVTCvFBpadjEe4pHtqyPpbqtu5casuitdXPs2r6XNABuOwqB7EeFMDLUX5T9G4Wg3zqarOZd0n91VcBi1HB2gWu4WjqttXMGiZPhlGqKFGUFCKCyAiHpoCDyV0CL1vdat5mGEWQ0o1GTKrDvOLO5wyZ3XFfN946OxCjK7dFa/p5WpYETn0rnQj6b/pm1LreCjkky6Dyizqt8Y3NJDaIIoAUgqhktQ2xXkWgXDvso0M4nX0vusZNeIqx8S/RnCAxpiN1cdd6Qn15WMSy9lQAv8SywKETJkMk5hjVRhns0ioChLUWfLymJu5ZCWTMWQWiFDmKNRAnaT+o4KZaTBzAsCpIJp48Win6Z71UarlKiB4lLDhU4dlRDNnrTWlmMyayypN0xWlj2Te1BOXlV55loGCB1AEnnGqx1XaharTgMd8Xex3Yd2bIgsNIkd3Zlvp+fxS4dZl6I/rNMkwcu+IA9NLkY2MG4Xxqy0FYaA6BZFwxjQRkxgzDHlpzAOuEGOOIqlOjxUx5HUfLarnwEPEMUIym8go0zQIhdsb/Ft/wTlrbsCmnl2CuShlWIYuChVjS5iizduU7443Q0YNYdXZu2o+mKZ7YVmE+CpG3/otfSlQXIZSaXCEmDYZRoZVRf9hB+w80OYTNFg296Q2yrCFd2png671henVT8rVJd9TmpQWmYqkjbU6Go5Z8b4k/LKQa23E5dGvqkDTDzwkB9rcR5WNUjPWSXFzCXqSUjq5t5FB5xYEZZZmaWTLE0udbzEGampDawrk28XLRdOSKoP4yo5Uw7ZITuUC1R8h+BTKYKtMKkkpahQgb4rLjm4QnYGqpxvcWhsaPpvEqNc7dGqELKpFSih4IspCRkT2ZVZH1IhIpVBkMqJdiFXa6mxhibhEgCqmJ5gzMYqXGgVsUqd9WB4pKFJCVGFJTIaqVNVZUwYwcKH+Fr8tcOmMp84xi8lF4FV1qfM+BzafT6LWs/FnHmiQOHXuutE2KoMvVkyTDKMSDN4N33cB1IPcpW0gCQn4N4qia/XsoqHKL7M581oPaW4c7mgWlUqxfsycKFTHeYaVOu8WSqSmZVrbhikglcGOMSz24askhfrs2nB+avMY0g3zWSyOaAPPi/uxkgyFFV89t6gMjmqdsYlYWqxjY3pQjy/eq42H9ekg5cjqJQrVtjonJcmPYEM2J5syGUYRo/qmFASAV+N1cSgSFL4PsrPCTcElTFZv6GpXCDpmbtFhlIYqMfCMzoEUDTxgEYxBEUNqyiaOOEazGMq7IzJzTK/v0DbxE6mG4sut+VI0DMg6IIONiVYW3aPxSMLqdYMszrJryhkm3hQ9LdoTYLJh6Vexwff83xYTGFegwDBdMozisPiASs9SYzWhQVPyERWJxwaDlnblcsDnC7nfZI0c/qIRuw8VQ66WECHOOF3h+s4k79h0BbTsB5UzqjnL7OimDFbdpVUM5mBIhhYIUG91jNjJ8yyk2DiE4RbltY+ongsGwRAm10a+OOFk5NMqwygyuY0TmIwlerkEetYDCxrNqLImbQQw9Gv3Hipq2NXvITwCKGqw3LqDXRRDsk4IM2jaLbfAbJM6Rxb3Tv9lfIU7ceIehyajq0vOSdiQDApMEXQKdFM0c6a0HECkjkMySbMXDvV8n1d6SC8+cTK9NuNgBbEyhTKMAAR0yrt5bOh+fqREaIeGP0Vm6Q94ECcJV0os5VyzytIJ5hl//xSU/6tteMXfB6nUsOwrRVJ14ImMt2N9eE+KVjqgJEN1Nkc1501qOqD27BtuQm2K67UgGlWSgcvVSHgu6I7E+XgloTNKINSzjnuLJUzH2WmOMKcKTRkqSEyhDJPKghOtlX0y7MR0ct1tu9OGCC8poMTJqtIA7ECf1hfycFUSlBNykpBiwI1KlIdKz42sJnSlqkngxk8TNRRXjq4C2dyuis9Xgdkv2NhNbwWkbFqxA+lSvF8bDLYLEK/meEMyIPZJ48TpikCoHf2GL5Z0KYeYg3fD6vf4CnagSGv5ry5FU59hMk1gS4qdFhkmmiJ4B13rEoh42NKczp0BPriiNWB1IWREDSYy/dI1NCq+XOdKcxRxLWuZGxn3VZXFDieaNhVXoonEjuIDqW3jwIRRNd2oUUBTA9aMpD6MHsU06q+r05ehN80Lk7ioK0/FGJ2ZHnenoMjjg6BzIZ2bBnjcuD7zZW3b0eWrLcOo1I51EIq4Y5TCDWH/x3CoaFaoAoECexYZta1G8ESp1ChSnBaZMBSS2U+L1SeH5rbkqFFvDWcoZJwqOzm+NstoZgfPDNW5K4kIWmnyGR2PBLX/kvodkqHE76IRmnL5YCwl9uX0qQ316X0orOvvalwl0Tb5uu/OB3oOzuM0TTJMzJDrgHW8q3cxQXY8CUKyxxeUcFjPxjVHhhbipggTCEgXxzR6ZMTkf912I6VSFcHHVTzb0xUjR6EYJt1xWmkjy6e5a754taSjI2ZF8QiN1yWw68sgPAg+dlL54fSMQ2Bh/iTYh6vcEIpQXulqDKzMBTWpjJnxMA5VR0L1p0SGUVjXr0ZJm8gKvh1fZNwaGbRO1IdE5uBe3ZtwgYRtas/BQFR1hOjR6xEmyZkOO5A5jRq4Cql1FdmpXx8TdT93Q04PRPlKl9HT9Eg6hMoRx/pv6KKX+lX5ewsTia9sK1wQ+lJ65rwNGRRxVX5C8yBDQwdBNp0fTZEMI5+EOsfOrA5AqeWOZiV80vhz7s36qRZVQA4n1huCYyK3C/rkc3UdTa5j6V9r74F0o6mWsiyqwNin7266VzqPHDqJrvhCxaCfD5T3mjRAtvCXCmIZg3oT72wYLcsDbPyCEWZeqzUWBSIzAGfE7K3Rl+tNpk6GkU4EAfXQevCKiOlqfqE1ehWMHSmuDFX9FAqKhdA2y6TGWb3bEKCzL6vTob/fK+m3nXy1eVB0MQdyGgE9MUmIzwos6bvzTu21TOrxNfOHfqQyPgY81lPVTqghGdhYfKmbeVZhQYPQl6krCK1DX7pnEOYEKqNUYpryhlUdIXouT9z0nS4ZRqUaQuibBSNezMq1I3o8zQzMmGX0zIwkQzUjU8VGYYLnp/xMuB/Wv02WJbZlhWnqh9SWUsJOLHcudlTSq7djnjhFrPcTplg9k0sSbcg2MqheiKSlLamepEmnokkYJ74dx9ZWdUrdrymBUlsfPQajjUyjDCPPodnAkbxYx6pGEsVSRgcgGD0vKVrHAlrGdJwtBou8LR8PSjgjOnFFdR4x46WmVR/eXidofOSsOMlqs+ogQn11ii1Eu1iY8s/urJOOJaVt6lyVX2G+jF4ylDTRHpTBQ4mnGyZ/to40nhV4er6pdAmEijpy/S2apjqxRneJttlmNvLpkmGkDGjeTOAXPiv29dmixE/YWC3C6OS0sxZFWkZNLevSbw6vsO9k2jBjJmczUOI0g0jYRDilN0pSKq8qktLU1a9uIsby1whEOpGKgJL5B3yiXWhlSu/RDwcEFd3ptGTwianSIR6pbdz3MYoISQrpP0d0j4wlTn5LvMdAp+mvH8UGRcw4vtMiw0jqAEk1om7JVIeluoE2AJ1R4vFmcOPwXu8xoheNHooCInasVxT1a8QIKzcmoLj1JxTwaEVr/6QY0jvpz4TrnBLFxoAn1CYD1K4L0Sr0DEXplmNpYqf9AtJ41qLmtpoOEK8UfJsyFK5Ao2uRjuVXsGJoSemnRd00fnEJXaJRMqrniybL4b6O+xTKMPKQxSZvFkffNa0q4GdfC+gTBNrFBzEwD0UNr1MfCqtlvoPMwUIdSesrWxpZzEGoXzVcR5Dq6IRaira2Np4XDkpdkoWQPLobXWz5Lk7soyOaMwt9NyeJ0ckjriZeMihDb9OQZeD5DhTcQDpNR28YKUrUUbhYPYy8yjvivaa3aLsplGESYAjKIFm1OUUnQVe9cwodYAhoj6gyKR2tOJjuqRL6Ux6Ll9gEUoKee5uAhMwdAhNNZY77LtqONeSbakX7oPDMRyvCBqOpwXWoBh/2F1QXLR0oLeXBb7j2ZUgGBzGmxX1wvZ4e69h0m1yk/WoCvGcUj6TY4JEKq7FqyiiIdYmG/RYnMS0y+MZcHYnOMWtoV19wCHAES14WpzbulTx54V1dUyDrM+XGcYUGFiqE7nsIlfCKF4cRNC5R9dc6XT8BqTMf1Fblstq0mlHUEYKiCVqKn6lFGPhKl6KK7CBD1FMCNdJ/0AdTEJcb7MBE3iISAZeWR4rKfyppoHnxwqmTYWTVhb1PjZWbDoyLtVXGggc5AylF4HsepFibEtpUqKTyaJgx4YYjTXXcODllXXnMZBeNS50g1GLmqW0htri/KkOvWYrMgTnlIoFPlqEHwaaugjQE/bHbLo3I/Aw5JBuojk+jGrfvrUROmQwjHizDLhGfqWcmaweWsqWOdKy7ex4JIrPRadz2KCIAPYVsf5G3MT27GySgPF7MsIMzs1wKFiyPokgH9dVXnYe0xeQfNtGMqBd0NSB6lsFCTykRmgldUSftnlmW2FblilbbY9159Dp5JznS074rR5YmUkpVpk+GiaU7EpevSs3hLa9VJvUbAajnA95JXiLzTS06chuciaAQ/bmHy196xmQQbLLAJruJbeO3lQbZ1xKL2JDtd2Y5kbJ8Wagwy2aWQQ7UAoPET4gOpXWT6SQttpJnpaOG1Uo7LK2h/lTHNvbUyLEzGCA4onPfUyLDSOoSoR67tYsMWgBbetXVFHVIB8pmTEqCed+mo0rY7ZcMT6lm+dWhk8N1VZIismFltAi3KZplvnPkUpmDszjS9M7daEN1RpIxfOf+e/f7MvSuHs8llvMKFw8EA1RJ9cN9GgyVOfdpPJMiVU9KPwHwtMhgz1T31t8pl+UVraIELM1wx+z6VCeKhtmtODkjfsbJETLn3bWUFBIjFkcBTifiUpySLCa8v7GyrixVBTt6kFDZESyVjKtQOsiuq+Kf8HEYBI5kG8YXO31DBq4fELLUPRXTiwth53rI2YbAoYTvRN/KxAGtqMwtRyAa+j28WnI6ZBgVtXjx5c2wTAp3LIsQqN5tRwzMghEkpN8MEF0jPz3rfYl3wiRp8qU2oqtL5hPVUPRepm6IzeG3OqIeAbC+WAoybr5v+xXhUVoHHMeN6Jw5jQS19Rk5bE4SJtJZBgJEPUtmTiQqG92nurrzHiJrMOaOZ4HLEPZKbFGjFqlta66vv3WsGCjD9+mSYeSTwaLwH84A+WDwD/UuX/ktwYI8ghiCZ0RzK3aDtifwJTJODNguehXIJ1pQTzFZbU+lKkaRwXfOWTAyTFYc8lyoIQPTUTLkpMYvXyWVKaspP95WBtMDkxG3RENCEsxoIfKl/h1AMSM98x/R3dpQ2uLgEA20ycOUyDCyAGHeFVFL2TdWFJqqE+QdVN9ijx3ZikKt23qAhyJiaktHd/VhCiNVopUab4kYrQKECSzT4r7ZUVRxvNLBY9jHD6sfIDAPQBqgFhkLBYMylL7uMkiYHCCDdecKvFi+rf9XfbJT9mQtbjucPzMdTgHDK2amS4aRepTzUpHJA4a3ScR6E3k2mEqH1+/dJwzCqePqSNy8oomFR+Yk8ZatU+h7trQwea7/G29NqwQpNtZTcZx4od3yGD1CXUFPBmG+8tWSgVILNzquS0wGI/BBD/oGnB4ciLrhChoN9bxIGJ6TgcSde9fldMkw4pTDowXgB4zgKJyXswKyqjLEfpqSgsJUcBeiM8bYzq2HvVUFSBAk6TfxY2RKUkQSQYyFDOE9pgJbmd14yM+bFNLFkM+1+OqQdECGnIZZCpn4FlJnKu+fHnUG7IAkMRwWHlywaLBZhbn+gMzTIEO3U615NwoxI2TjbojBZhIqUwjoyV9SoUWb0k1/g/Fk+k3kMDZjGy3XlaPqxxDEoxBm2wWmg6rxcLKUaPX7oAiokUnbSN3crLoXk82PnvQUY8qiY/IiO8rg7VWxcTLeHARKU/LqjOrV5Jfcno7fSywP85xalFIQ02VzafqrLMOoupEnGgXwZa4Y612ubLnsvbWtGkr67OrSQS4A/uggSc1OXK1BI5f7nRtHXNkofhYLdTxsblOYTZMZVNY/8yJNJOrGWnXEh9Iqz1VhFjirEcRz+j6oLoA6DkfXhgzspUX1qTzQ2CnvOvDqXToWDYSNfWjfrvLQQuh/Lub5nQFX8aCu6DpFMozsL3gqkfAjrKJbWaQCtV9CUjZ+ekbb0NStNxpn7Mr2IFLqIxX6zcNjb66wMN8RN8geLHX3I/gUioyRryy+fudTluavqY4PrETHVSStHpSf5WjLoJbFXaR2dDssNBhYcIUkl2IFg4Hpg1GoUFuXwdLWLEPob7pkGPHNXjiPEFsdmB7sIBE6XhxJGWW1zyBZNYieIL3Y6Chb2DmgfTCK+KOb3gcp0pSUFMh6ykiXVNFL5/hSxIOjWS+UpwbSE5d1RKjYkMEm1tq35mbqnKD+C53b0fEgtAzyljrONUo1ZWD0Ntm1P7pX8rJ1ROtpk2FkD1FUVFKj5/r8Q9GeD0VZiOtxxZ+NSyOH0tD+w71i/bqDM2wXBEMEbE7Eodj3NRCNsGXYpIPsIHl+DfCAaQdep3kgL3Tkn81B20YGizShWUJbvc8gwaz0nM2dTp2xy/Wpk2CEhPAlK9SQjOZaDpp23m2KZBjxfQD2HKz2JkW3n+p3YVruOBYAijqIxNQhyZmPJbgTqkEJ2YLuQDf0NbBKUYICB/TdNG7c1xXjI4cYBHmZ5QAbDVQLObMWbyNDqQgc0FJlqIah38NCAUqilx7cIb0rOxne/BxXR7szm7hRanUVbIsnq/6g1XTJMOpNSETozX3xpKuegAVNTIM8OmFS6YQNPFpA79yQLgeUAl6CtajYq6sMdL8La5J9zWQurhUjlTyWvvPgNaMBj7jxTcNT+zGwoDHvGOI+QTfrPeW7lEEZnLYWCoIe2Q1DaPN6hesVgzJLny3a1ojrWCLGp4534I/SYZtcSycDR/Bpk2ESxgHKt1uUljmw5eMS8Lpq5DQhFPUcuuydqBw2mSSFQJtIpuhiP4lPb0+/RFenYpiNEzZHYT5saAQp4tncKIFIEAB9HdpgWIiVrBbYkfH0eK7TSP0Ui9EU9fisFh+zr7qgMTKg0TEjz9WJe++wJhmc/7kEehpOXAZjV5QCjQd59DTJMCoiYW7byeKRQZ9VJV7JoPTgFC2FshakDq4RrrymP5Log0zr7wUWZv12MVRBQT0tqf/3nanniLUPjVy9B5LYUVgfZJUWZun/EL1IUYVpW//0q1R61pWfPA4MDMhg/XC0Cs5OTw1SdM+TyVL1FZ5TKToZJZ6FAIfmd5pHM99NGeKLkCKfUyLDKCjXWQUnS0UZJvn8ZCKi1yeF8F/q7ISqTIV8EMGa3UkIUVkIQ1AVipDY0i3d4whsU3iufHUeHerASXY8sNEqP/5uHpqAE5xTWhnb0shI6MaaSh6QIRkYnWmlIJgd6aEYSOnNrm04GmM4QjoVI03znFrRuuXnalyG5pyMZJ02GUaWtgSOg0UYAkuwXlAuaJybBoSplK6kt3zGvlgrWmsp5CwJPah/NYze3kIpMfIZi65cD6FkyJUvo+0e7H3mNrmfojKgEXXyEqAPSMt2WlfYM+EUTPlVVLVxc3bcWFwGm0sR+DB7irYuX1/XjuTZSULFXptpk6H7+xCS+kj0bE6gPznH3elqGT8LxUbvXbnBJuNS+fgzf7c2vRtEt9WY7D/MIXSwwNEg1u9dxGQ8/kw0Ut/SEmw7GXIdGsTm+Z4Buj1aua6kgh7thm5aHYb7A31+lWWoZ5mk37ZGBAH8fI5ZZAPLCqInZaVIHxE03bJq4nR0ky8YHD9uamhANDV6iNcNPLEMneDhXj7dG1CiFQkSOaMnhFitq6T/h8qH6lhISZ8ptS0DiBhPEmxfp3meSOsWqltiu4DIOUoy31MmQ3d0QyJvHWPwyCC6/+DWoRtpsT4o1A3FLWdMArMS6nCkUOZKoWcwFMBT6BOG2awIlcmQiKIAWilWLmgolsUiffhDV8k5JP0PKqfv/LjooAy9VSd+ei894iqx3HhSEEn+a1rkFIhTVdMjrRJSNhD5o5Q8dCJTJ4O9l8n5rwY5AG9qxGE7nI23MmDg5jI0nKSfTlhksN/FFMe2bO3DBKt3sxmZO290BPA+ksxJrmi09IBLi746nCAsDOx4tdKFIRnIEWn1PVTRFI1XbYykvmAipzyFnnwmskENJStFDdZaBgRucB+/TIkMtlOt8xld+rNXwMONVjuQXF58a96cApRugVdq/IENV0oxzo21sPpVggaNVtGmSfHKz+CAMDz7+ZhCfXTtVG5SnGq4PubqJyi5L4mpHcKXZjpV8g+mNSBDDxjS6HCEiZtaSpfRN3ZvGiL75NU0f7dv1bMZLK8IMRG4AYogczMtMoxCWKY3aWRUir4Ub9qafqClN3XrnY6YO0/xbyWke4qytthjYU7ApDIChzdsZ3Qt9BkmVvREV8vYggLExiIiV+6LB0mNoh0xJNlBAIMBGRgYepfRct7D3kztg3dzDY1zfqD8FC6i6GdddZXSUKrQQQe2ejRlMozoOB2UPR7fHBUKw14spBDEX4WMprpEjym6b/MF91xbbWoZnHKoLAi1oWXgoJjC7ROsULXQTwPS1P87A6AHi7TcJvrUlg09d5SNQiF2SIa8UsLOyZNCs5+E1NQuGG++1Cgk3y6RDwsJjHguQ3x0tzEPnQIZRuAOdFVJq5rHuRdLdf94jJeF8+MYPMvvHXVgpFbjUSOGb7LEpbzUjuobf/W/YDQWYViBDT4k3S+JRsspSR47IsD9CfqTdTMS/p14DDg1IAMqaATVkjHmCWsDcfubioSabIyBFjPMekD/oj5DZOQJ8xTJ4KddOXSIGzpPZEXLKxO8TR5PfLqB8GZNb23fGE1oaQNfFUZKbMzLo0FZe61LqBA2+9AwPpoLwdt2MsRB8zCgfXLo0DQxh4cUYbVAfboketZ8QAbA/o6CAxfP50rsg4U3HZdYbmzpuCVQBAKKN7A4ysZ1mBYZ6zTJMFIi9clmvymehXFOrl4eUD84np8s9MN5yZh6Rk1LaFxHyZvx5a35fl0WOKRE1VF1IzLkO+KEFLOcRm2lDhQMPDHBkdRoFOvbAxohfiBBgKH1sY0MUHQV7wOUOiQdFPhvT1EZhb1/G30RhAmO+H1jg4ytUB1fDSrOByN1iBDTIUN9c5+Ews7+tFMfM7aFkAKZcw6sN3NRAMdin/FZgELAoF+ov14kQZhQRfQv8Tsty4W5S7jvz2Ko0YpGsjTYQRZDsDq49of7GMG0n6QTcqawJKw0WzJA7aXKIFSoxGwxI93TdCQMo9IpJoIpgfzdHFnIAcz4VReK9PDHCUj1maVpkWEU6NUOunuMSuQU6mgl/SZGfQlMgvMIE9I+SupLUVC92FCE+kS6tB4J2clPCmODU4O2uQ7xr8CeQ28IWR09jmqdLDxA0fHYiIvRhB2DMefUtmE+MiCDsk23HBAqoGlBKfZL7SU4GhSX6aEd5V95DYNOjxwnnoQGQcE5bt6hd02LDHVjjislgyPgDVmCxApWR9iYK+2A2J0xhIN5GTIKIy7YPkh5JTbolcHbV74MJeBlIa0D8SuUxjEd0wNN3uH8NnlACgCipwNKiAZhNS5EiG1kqMoJ8z9VPjoDcbDQZ0OKO2HvT/4ouDAKq2YqOIkbe5in8XcGlIDMDW+YIhlGoCsgedfMaOmR8K6tDpojMz8zUYqYUKIMJ4O2VSXusSgWpCMADYdpT+JB6BJJ9xE1V0BFIDdye8DEcSnwwIYb6XBHSaeUAjKSGm/aRp2V+MkyqO96uaJgalDQjU4SwfXI9dCoJ4Gqv9jY9ocZEa2NITm1zdFt2mSYpGbqP7UCISBAE2RRkHSWS56wVkqKnFo/5cCo5YrUliIU9efqjmoc1N7QXdubAYPaWMfejhyOZfDl2u5XRGcfAG/o/bEM7sk6Qq7H2ZkJ9szvwu5ds9g1N4tdszOYnUwwOzPBaCwYjwJGYWNjE+ubm1hb38Dq6jrura1j6d4KFpdWsLG5GfVp6VfUc6k89PRpoOPgIqEdbEGjO/NWaMC0H9ZHGl8CNNNv/Wa0s018lWWYlIryMUWR+uyDBCQNTqGVzUkqNzRBNgWExyWpPdlO76ivsD87j2ZmMejYXMAcgJSl69zCfamm9Cg7O0vlzZ0J/pRfRXDlpXfmiAZHRLBv724cP7wfxw/tx9GD+3Dy6EGcPn4Yxw/tx7FD+3Fo317sX9iN/Xt3Y25mBrMzY0qdgOWVNSzdW8Htu8u4fmsRV27ewYXLN/D8S1dw8coNvHT1Ji5cuY5rNxexubkJc9IG6LCTmj7JgS2iV7KCoAIAACAASURBVB2oYal90bE7T4fpOx/lsYd1qo34imUPMxOvkZd/4zLsfdeHLbiQL8IP70kz7cvOHRA6NTC8TOhRyEj1d6c/RliiQ5PgZirauhKjtixsYQsRaTTKhZDAaK/ao3K6PRoJzp48gtc/cgaPnT2Bhx44jjPHD+P08UM4eeQg9u2ZDwPJ+zosp17haAj9LgW4fnsRL7x8Fc9duIKnnr+IJ595AX/8xWdx685dOOAwaKVPICrS9JH0m9tU2iGlS2qygc3loH45umhGwOVfBRlk4V0fpiBAiGn0C6UN6TGMYLcaUeC5PN8zhKUb7rbGYzA0oK/MjO5wdGo5I3kjNBqG28EZaFAyz+at3Lj7MR6P8ODJI/j6r3kcb3/Do3j07AmcPnYYxw7tw+5dc1V1ET25fxN1B0cZai8iWLq3ipev3sTT51/G7/3pl/Cbn/gczl28Qipgvesw96zYPxuo47UJGJDGK9VseESjfm7t9A3h/w3JIAvv+nBx4s5yvrhZZIGDUGJLo4b06wywuKOqeqhjsvEmYGOgMrqwg7RCzsA48qrU/PwcvvUdb8Jf+cY344nHH8Th/QvYv3c3ZibjQUPOBs9XdoTtIsVQm61ScHtxGecvXcNv/OFn8bO/9nG8ePl6xZN6CM5S4ipUAoy88hbycdYPkCJB/g4Dku4OWViKEHG+Z0qzMSvW5v9fGWqEiA9ihGO2wYu6zpv2QxHO+gopUk1VdAWK65NDo3q9T40d4XT1Slj5QcjOsz31YqUysYwAKVKxtshhxqMR5nfN4uEHjuM73/u1+ND734ljB/djZjLGaCRxIAau7VKkncq0vNVP6/fG5iZeunoTP/l//w5+9tc/jpt3lrC1teUyqYY5MrPOSA0Y1GWqn0Gr9YlS3+aSaIbyRr9AGq+/fBlsDmHi0LyhKLWC6DCcf3VuHUBB7+mAhs2PAaMxupw7Bp5SYBwwulC34bWGVA0gag9swczMBKePH8YTjz2ID37z1+Pf+trXYd+e3YP9b5WC5XurWF5Zw73VNayur2N9fQPrG5vY3Nqq41gwGo0wHo0wOzPB3OwM5udmsXd+Drvn52y1qSVnC8CGHEivT3z+K/iHP/UR/OmXn8Pi0r0eLQMVS1EKJCILoW9SbQI+vhmzhTgm8WgPT3xbGYWCWD+P+MuUQRbe+WENSKFG6LKUupFRzYkDB/OqdTHUKRHP34fK0PiO9r0mOmcmGBG0Ye67tpuZmeDRMyfwjq95HP/Ov/02fN0bHsP83GzPIDc2t3D99iIuXbuFKzdu4/L123j+pat46eoNvHz9Fq7fWsStxSXcuXsPK2vr2CrdxuRcdYQDC3tw7NB+nDh8AK86dRSvOnUUZ44fxgPHD+HBk0dDnzmNGrpa6dWl67fwz3/5d/BL//qTOH/pGspWhTx7e51RjspS8Kv3THNCOuf0Q42jVOMWpjk0NH1Dh1umy2vOwznEX54MXcrkHLgXVqE8ykUUyBGj8SI6kiudVcrGTLQH07eck21ztRyxE0uRIwKNTqK0zWQ8wmNnT+J9b38j3vf2N+IdX/M45mZnOlXWwdjcKjh38TK+8Mx5PPPiJTz74iWcu3gFL16+jsvXb2Nza6sOqLj6ydHDipnyaf2PceroATx65iSeePxBvPV1D+Mtr3kYp44dhCA6wk6rVXnecmfpHn7zDz+Hf/ZLv4Unnz6Pjc1NbDfPy7qJem4vYoTFjWTn3c+G8de+JBuSB+qQ6TCImpb/EmToJtWJ78yurdX2cva2UnwuFFFqO0QLMvLEqVWhWZAhvk28Nf9hMiePHsR3v+/r8a3vfBPe+NhZWyYFgK2tgpev3cQffu4pfPILz+Arz7+E51+6iis3bmNtfQNu3cLCpDSsfrMBasjg4Rbj0Rinjx/C6x4+jfe+7Q34wLvfgpNHD/UcY7srg8zq+gb++IvP4L/957+MP/7in3fzCqAPSjx+5lhWUMXNluogGRxf0yC1tpbNAGbk0QBLpVU31uj1kwTzfyky0KS6VjBeQtyAu0M1dAFjH9WtocvCGjOfoEIVELSZlBK9D70osZ0ftICoNyBdpZEI/uo3vR1/44Pvw+MPnsL+vbut6dZWwWeeOodf/b1P49kXL2EyGWN+bhazMzNY2D2HmZkJNje3sLh8D9duLuLFy9fwzPlLWFpejaGoxWwzYvbLRiLYv7Abj589iR/4zvfiQ+9/Z5jIA20HGUqxNja38PQLL+GH/sFP4k+/9Fy7X/2itqF2YmKk1ZzGJDbMDXPUCJNgpHFNWYMSbNlEa5L8F5RBFt75fV13Tafrp0mWbljwYzQgL4crI55NYg9XZiUpp4E6Gk5b9bEDraDI2n+tOzszwRsfPYv//Pu/A+9+y2uxe34uoO+txSV8+dxFjEcjPPTAMczNTDAajcwYdUe2VHm3tgq2trawsrqOL527gI99+s/wrz/1JJ67eAX3VtY8lRLeRaUJp90D6dRlEAC75mbxTW9/I/7e3/wQHjx5BJPJuBephybeXAYAz128gu/9u/8TvnzuooFprBdMQG0IoGHs3SNVN8A70WzxqcPPu9+ASNxLslSJMpJWuv1KZLCUycg3vI/2ru2bSh3cIgFFW2BULVUCNFnvXQyozTmE9g7oHzgcCAm98pnJGA+fPo7v+eZ34Ps/8B4cO7Q/IO2wctvLniyv0tBrdW0dn3ryafzMr/8+PvH5r+DStVudYzSvFC0BhOU7uh49cwI/8gPfiW9955vCDjj3v90ycKmT1s98+Rz+03/4k/jScxeo36jP3jywkSol7uOEWwZ4sQaZULJikXbV1oQx2Ncrk2E8d/aJH+tuCd3XyQ1beOeNlgeKE9FORGJ7neToPN2VUw07CBKVUZSuFuv3hlY6e5EgvIfLyijB1aEDC/j2b3wLfvQHvgsffN/XY+/uXY72acBaZVreQlytz/fGoxEePHUU3/7ut+LR0yewvLKKa7cWcW91NcqeE2nOvZMMgODGnbv49Jeeg4jg0TMnsXvXbBiPIV6VX/199OACjh7ch888dQ637y4bDx7FdOxKHA8ethAFKmwGJFe+ksNXsOOIyRmCITjfB0fRWD/y9cplMIfo2rulK/2eoREdpSK1vjuP/nYmwiD1jIlWAKpQjCw8iDDFMj30eHShI9Ovf+QM/ta/9234oQ99C1770OlgwEo7G8/a+gaWllewvLKGra2Cydg34vjiti0nGo1GeOTMCXz9Gx/Dnvk5vHjpOm4tLpsxdYsIrJPSBwX9rIh7d3kFf/bsi9jc2sIbHj2D+bnZZqTIcvHneDzGyaMHsbq+ji88cx6ra+s07Ix89Z9WxNFqbJSA20ArfaAUyCe2DgpFCJihZbU+20Y2bOLplcoge9/1YTrl7KFZiu49sAN5wpSdWZsbhTpgzhDcwNsZgNfJ93JG1cqwBrIuvTe/axZ/5RvejO//wHvwDW96DcZj3/jiiefa+gaeu3gFT527iOcuXsFLV2/g5p0lrK6vo2wVTCZj7J3fhRNHDuB1D5/G217/KM6eONx0qtal9xaX7uGjn3oS//1PfwRfeeElbG01ji6wXKQXB0q/eWj/An7wg+/Df/Z9H8DMZNzjY2gjj/l67sJl/J1/8vP46Cef9JQu9NtaJOEUBcjGYbOAEElq9CuAsIBiHXkDjSCmGonGF/gB4goU2d19yjDpjLjUkAR/BqAnaxTcwSoyn49V8CDElIeYM8H7/TgRroOe0uywRzim3dU5fmQ//sa/+z78tW95J04dPYTRKKJmKQVfPncRv/WJz+H3P/sULl65gTtL97C4vIJ7K6vY2NwKChYRzM/NYP/e3Thx5CDe/ZbX4nu/7Rvw6ledMnbz+j+XAcC+vbvx7e9+K/btmcff/kc/hYuXb9DgkLwWqt0INHr62Auu317ET/zSR/HQA8fwofe/c7DfIScBgAdPHcWHv/09+LNnL+D8pWuuR+WKkY9Qmz/8e7UpHj7L+CSIpjJA55jqLNq3RhDEVE/nrTDeiqeYIRLdvww+qQ4cgwinAaKzSCkyordEHATevj77Qet3ITQISqbvaixaPh6N8IZHTuO//I/+Kt7zta/H3Iw/D7WxuYVbi0v4vT/9Ev63f/X7+PzTL+Du8gpW1zfMQLbLu0Eyzc5McOb4Yfwn3/Mt+J73v2PwiHc3HtEIN7e28Nt/9AV879/9J1hbX6/jMiCk8mAIFysUAU4fO4Rf+Ad/G088/uC2c4fWZ6eXTfwX/+PP4Wd+7eNY29iMOg1RQNmrWYOBXFcqPQHiOSU7hZGE7D0SUO/nyTk48hi9hORQgL9/GWwOYcXqupa7SuycvFeXZbsJc2RSEjM0JAE5OGJp1CxUbnTEnpOq9+MhsI5lH+Ddu2bxgfe8Ff/07/x1vOW1D2My7k6grq6t49kXL+MXfvMP8KM//vP4F7/yuzh38QqWV9a6J9BQHMFMc9oHo7Ub9+bWFm7eXsLvfvqLWFlbxxOPP4g9837sO0/YGaFHoxEeOX0cm1ub3SaZOQ8hSAA1RULiSXVeCpbureL5l6/im77uDdi9a645z8m/ed4zrvz8qz/4LG4tLpsOGEwLj7fEHWAR7oO92eeV5jBSgTfJECIlCCDMJ6TSgNkkPyUH4cUIvCIZfJVJFH39OIHlqVVZ3bJsDLeBYUY2gYW53sTQ0D9utaty8nqzIYSoYApHLKAP6qmjB/G93/aN+Ps//O/jyMF9ALq5wVdeeAkf+b1P47/+iV/EL/32p3D91iKFKphCu76IuD1qV+tayIavdADYKgV/+qXnMDs7wdvf+BjGo1ETpbP+AOCxsyfx2aeexwsvX4sRwRyfQ25d7zPU8M8tFNy6s4y9e3bhra99uDf5z6thmZdSCg4fWMDl67fxqSefqRYe01MIz3dSCFPNkJGXSoMNO+g6yWDpr9ldxAZzCrbwBB5qL8bnfcoQIoS/EsVRnNE9e5p1KpJWikrfeBGI1FSJFaS8SRVXqJwhKAumX7v+X/vQA/hbf+3b8B9/9/sNpV++dgu/8rt/gh//hd/Az/76x3Hp+q3EDynUcj6JitTbKme9L2mkCgq+8Mx5vPHRB/HomROmpyGnUAPdNTeD3bvm8PHPfBkrK2vQKG1zMhFyClqWzqNTBCtr67i3soY3v+YhHD+8f9t+W1GrlIIHjh/G//HRT2B1dc3pk65rQk56IzbC6xXdjmpHrnMbyr4MsT+OGrwiFfkyPrRqKLw/GcazZ574MdeXe6kwKbZBNpYwyJyTspB6mweRBiN0EB0kC8cPAZlDVdqj8Qhve/2j+JH/4Dvxgfe8FXt378LG5ib+4HNfwT/+uV/Hz/767+NLz13A5qZuiFlCGs9MBcCIkSPPw+y5c/1eeVtb38DVW3fw/nd8DfbM72ou6ea5xWg0wt7du/Dsi5fwlRdeMn1pNOhFiGTk2bZuLS7jxJH9ePNrHsIM7WSHyD4QtUQEC7vn8fmnX8BTz79kwBdiAUf9CgQRkf2TT0KDnTibCMtA/YVnJMQNuAjZn84j2LeYzn3KMJ4788SPcZixNWFowqMUnFQ3Ln4swxzIBhru0RVRCw8Gh8LAGFmc5SN+3x0oDuZ4PMa73vQa/L2/+SG884lXY37XHNbWN/Dj//tv4B/99K/ij77w51hc7p4BiMck9DPvk+jg+X3jMa83G4YQPQB3l1fwyOkTeP0jZzB0ZYPcM78LtxaX8AefewrrG5vdWFg/bkThbA/xyyt2axsbEABve90jOHpwXz9SN/jgaDESwWQyxq987NM2HgE0tNBSOG0v4CgQeXV9mS63kUEIBHryAnGCrPXIwGHzWhqnHWQYuYeQIWpHpf4oXSN7UxocnS2lqgauxiHKCssQwlgEiELG5AqSVEvZdF5FBO/92tfjn/7of4i3vu5hzEzGOHfxCv76f/MT+B/+5a/i2QuX62QZxm9mIEwCTcleVmwUOTfWsoRKVV83F5fw23/8JDY2Nl1PZHit/H1mMsYTjz+I17zqFIoNRN+QQ5rGMoiOV1f2J196Fl+sm3YAkFe7hvjQ8jc+9iBe//Dp2Fd1SN8DIH0ofYoC5iQ8lCzSdjIYb9Q3G5ECRTU8yXRzJLoPGbrdKeqjgDbkROz1KzaprQwURnBzktpex5Jva1gtyowOkHlfbeOfKrwvgypqdD92zc3gO979Vvzc3/9hPHjyKO6trOEjH/s0PvQj/xi/+rFPY/neGsmWFElXVE5kqUKVjkYiRUZAI1FEsLm5hecuXMFzFy83c3aWiw3zsbMn8dqHTlekSvw0ZXAdaYqlBrC0vILf/8xTuHnnblhezZty/Ju/H9q3B9/wltdAB9PtncBCUdB4SuNZ1eSpcd/gt5PB9evgU8wAsy6inkr45/5kmACIa7jEiwrjWxGFwlREb8tRMwFKR3wZTMOgp02dQxMi2hvVuF3XbynAvj3z+K73fh3+qx/8IObnZnHlxm38/G/8If6X/+u3cfHqDeN9POqOJkzG3eOak/EY4/GoLsN2uXu33NgtgWo/o9Goe/HtwFXQPSnH8uvjoVtbW9jcKhiPRrh8/TYeO3sy1At0Urp2YGEPHjlzArvn57B0T8866QA0+BHSjemumFF96ovP4Pqtuzi8f6Fp+EPzChHB3vldePOrH8LMZIL1jQ0aLR8HUSQ2oIJH99bR9/BiJq2/vQyhndlFcWMPqRrJYt1XMJOyowyTYny62ZX6r62oaDoEn0DGJyFooAw0+4jo3qoi6e6yKyWTnZ1MsGtuBrvmZrF71yzm52axZ34O73zi1fjBD34zjh3ch43NLZx76Squ3LyNb3r7GzA7M8FkPMbszAQzkzFmZ2YwOzPB7GSM2dlJfVPeDEYjsTdkTMYjTCZjzTgxmYx7b9Hja6tOnu33VsH65ga2tgo2N7ewvrGJPfNzOHPiSGiXI0SeXAPAQ6eO4uC+vVhaXonoVyNj0+BCPVfgsy9ewsUrN/DY2ZO2Q5+voZO94/HIHmd97uIVQ0YDsVb/wSR4nlj/oWHubHlnGQBa+HCD4Y5C8HR6zKz2v70Mky73klCpJGq9yAdaK2YlBFmkn03UupPxCAt75nFg7x7s2zuP/Xt3Y2FP97lvzzz27ZnH3t27sGd+zl73ODc7g12z7hgPnjyKIwcW0G1uCV7zqlN4/MPfgcl4hJnJGOPxuHmmJ//mlZ+h3duh7zu1B/pG3/qdaZ062r3QLM5X4AgYUBgIA6RXrbu+voEnnzmPb3jzazAj48DXTvoQERw5sICHTx/HcxevOGhrBlnISFPKqRhnLKUjDMb2fciAQk5F9VwGW96h/rq2eYVrJxnCu125P95BbPHrIlGgK4CMBAu7d+HowX04dmgfjh06gOOH9uHoof04dnAfjhxYwMKe+e6dprMzmJvp3ms6OzOpr3Lsvs/MjDEzHlsas90xivFohAMLezB0DR20Yzr3m1e3aA0ZfMv4duJHRHDk4D7bQ2nyjLih6WkDaEgU5ASfe/p5bGxuYnam9yrfkCJlOUUEBxb24Mzxw1o5ZiqBExobA0vSQwDNjsmYZWwvg4T9IOWZ+xX2t65cv+f5xjYymIaMUK0UcjGdfUvX7cxkjGOH9uPsySM4c/wwzhw/3IXWE0dw/PB+7J3fFXL1yXhk38fjLjffbhmwtYmVr53u57o7bYy9EuTfbud5J4dp8Z7bHNi7G7tmZ2LIFgdTJwRHYwBsX/4cQcFTz18M850hPlrLrwcW9uDsySOYjEfY2ip2HCd1FxjrltSLPwNjgsL3j1KavJMMMWPRJf8IC6kTZoj4gftVrirARFOODqkdoXfNzuDgwh686oGjeNWp43jo1FGcPXkED548ipNHDmB2ZrJjemDKafweyltNrFSWDa6F6kOhP/++n4gx9LvVT67XcpydUjFuNzc7g8lkHEMz3JACbUF6ETN8wGvRs+cvY70eWmxFhBa46L3JeITv//b34G2vfwTnLl7F8y9dxbMXLuH8pWu4dWepeyv5+gbW1jewsraONe2ndq5THmXGncF5vR8ZisntfuTpkf8IizrUj0WpMC+gtL/Wn7z3a1+PwwcWcPrYITxw7BBOHz+M08cP48yJwzi0b29zgIcMaicDZlpDAzB0DQ3ekLFu53D3K8PQvfuJYENXlqNlmDOTMcZSJ/T1nJUvcCQ+C1kD2Dbc2lbW1nDt1iIOH1gIfOwEQnodObgP7z74Onzjm11nW6Xg9t1lXLxyAy9euo4XL1/H8xev4MKV67h5ZwmLy/ewuLSCxaV7uL20jJXV9ZiGsCnehwy9NKtQWp9DS/3p8QT0ehvNl2DpE+VWmPzLv/dD3RsmtjFgWPv2IO5kfFw+ZEhDqy9D9bcb0KE5wU5OkXloyTfE63ZX5qulKy7b2NzqTr3aDDClSiHWx5vOSuT38o3bvec1WjLsFN31Govg0L69OLRvL97wyBmru7VVcGtxCZeu38Kla7fw8rWb3buqbtzGtZuLuHbrDq7dWsSVG3dwa3HJeb0PGcJNjTYmg6dDfTpULgQuWk4OMhlyhmzA2Ui3SxWyoltovNPKzv2kTPy7xfeQwfHvITocaTLPuT7T2e7aLr1kvtbWN7rddYsC6AGqcOznJVjli8cBwG0zvj4/2+k51891sq7HY8HhAws4tH+vHVsppWB1bR3Xb9/F9VuLuH57EVdvLnbOcuk6Xrx8DRcud1Hm9t17KOk9UaYCRf0QZDr5exHT6qR5Rj6EahGo+02T6riTOZT7Dxla/p7bDA3CTpEgXztFnJ2Q/H6ixJCxb5d3D0XS3H/upyX30soq1jf0xWce6v1JM4I10wenVH2ad5b8LFfms+Xo243vTo6Uo7RINy964NghnDp60O5tbG7hztIy7ty91z2huHQPL1+7iaeefwlPnbuIr7zwEs6/fA0ra+uqxdq2ZjthbtAV6n7FUHbmtl9Ijx59zCGyIQylLa9kPrFT6tNCmFZakem26AwNTL7WNzaxurqOLRSs1ZcQbxVgeWWVHs6J1+bmFpZXVu0FZXyNRLB71xzinpdgftcsxqPuZQRzsxOMR6NtUVd5L6VLOe6trvOow/JnLrMg4cuc/gwwrK6ge0IwZwCtyf0QKA6loUPtW/1wO5FuM/Tw/oWwi765tYWVtXWsrq5jZW0dtxeX8PT5S3jymRfwmS8/h89+5XncvH3X9VGq3CSrRQX2HNJHbVGZqf/UexNmcMgpwlDvEAVy9FCF6Juvu2MNW9jcLPZ9a6vQvYLNzU0srazi7vIKFpdXcHf5Hu4ur2Dp3hqWV1Zwt74BY3llFYtLK1heXcPK6hpW19a7z/UN3Ftdw8raOlZWut8ra+sum2UXldeMIr3ftLTBk7lUv0mP2s7vmsVkNMbs7BhzM91G4/zcbPcsxPwc5ma6TcfFpXv2x05aaI8ez5w4138KgkHkB4XuN7L+Rept157LWvUm4zH2zncvcgCAB44dwuseOYPveu/bAHSAdv7SVXzmy+fwmafO4bNPncOFyzewvLJqY94d8c/gwU6Zogrtm0xaqZFeGUXyvdW1dayub/jn6jpW17ult7X1DaxtbGJtfR13l1dwa3EZt+8u487dZQuPd5bv4e6SGz1/bm2RAMq45s4BHXv6jsbYMW88c4g1JwbiI4hu4XD06crtfUC1mr331vLY6E0FWr/g3spaJ8Ny7MYndeg7F8d/Bh8ba9YNqQwsn+DQ/r1h7IZSvu0i8P2mta1rp1Rzp371+8xkjEdOn8DDDxzHd3/zOwAAl67dwpPPvIAvPHMeXzp3ERcuX8eNO3dx4/Zd3LyzhI3NzToOPMaw77bJzCkTMwDA0Hfp3gru3lvB0vIqFu+tVKRexfK9FdxZ6nK/29XIby8u1+W2zqiXlleweG8Fm5tbPmBsc8aYl9mkyX5zxAG6P3hIdbINBroRxYUJ50STjVnrJf+wolq31MHqoXX4Y45RyDDuLd4tndWIFKMTy6CH7F1ZtW9dfyE8OFLTEga2oblgjvhL91bx9PmXsbK6hoXd81jYM4+F3buwZ/cuzG2zHzVEL/c31G4oTcsynDhyACeOHMD73/EENje3cPXWHTz74mU88+LLePr5l3H+Ujdpv3DlBq7fWrTXiZpy1OhKweSzT53D9epJN+/cxc3FJdxedBS/W52gS1/umUOsrK13qwFZmIH0w+zNxq4OaEn12AgEvmFDuZ6kNi1lRi0C8SQtaqiMWB6QGoD9DTuzs2TN4s3cv1iQyhchUFz37vjKewymAlCfLRlQ+uCgOk3R7uihfT3D3W7Sz2WXrt/C//x/fhRfevYCFupZM3WKfXt248C+PTi4sAeH9u/FwYU9OLCwBwf3dZ+75+fCqeGhifzQ2LXmotvJMB6PcOLwARw/tB/vetOrsbm5hSs3buPFuor1wstX8ecvXsKXn7uIZy9c7pZ+TX+CyQ//d//C/tLNvfqp+TYPtCNkh0T6+J7eMsbyoLKP5IHrlZkaYsoAOOrGao6CLW2qEYUUq58aSeYF0ab8KIsbrw0OSq0X4d6QjOmaw0lMA82xHFQiiwMymLMR6706wMzMGPvTXzxqrSYNIfTS8gqev3gVTz79gvdUnXMyHmHXXHcKeb6eRub/9y/sxqmjB3HqyEGcOHIAJ+3zQO8PUjJvOaLcT5rXkmE8HlkE+bo3PIq19Q3cvHMXV27cweUbt/HM+ZdtLvLshcuYPPn0+QoqES+FJhqsbQ/UA2icr6YhDhhwrd+etLJzUH1Btt50T9Rja5nE+4AjLzt+M5WRHhk6t+nshkFRRJfEm2rX+ZZ+h7FtUwaNSBkwvO6pIwftDeHefXsPpHUtr3ZAaWouzuL6xiY2Nldwd2nF+SHHH4lgRg9wTsbd90l3LP/owX148NRRnD1+GKdPHMHZekLiwZNH7WhQyzH+IjJo+cxkjOOHD+DYof14A87gG978GnzP+9+BpXuruHTtFiaWtRRf1iuaUpQSUmyzaRo3ixfxjQAAIABJREFU71+Nygv9XU3dZy9MQvrGT8yHteLmKwp3+E5lsW8dWDVSlbm7achPRmVSGkk3ZJ/z9j02/LkAVh3pUtMj1UXvD8WYWFkGvYEAGGYcteDxV53CZNx/tqO1qtjSv6bJlhGwzhKPqGOKKsNWKd0S6upaL+159sJl/NEXnrG6CgqTyRhnTxzBI6eP49EzJ/Dw6eN49MxxPHjyKHbNzWCmOpR+smxDMgztr8zNTDA3sxeH9y/gzPHDvA/hw6UpgaOYvu5ePCcWGuyA0LTioYxIiio0mPkYeXA2TT9UYSW+/a0fDkwYqstpkW9u6byaJ54aJ01hltZ4WtRLZdBfXRKbF7B+SvdG9KpPm2/xokFI/2pqWus3ZTD+NToUVyPx/+jZE/aOqE6N2+8xuRq7OjcXl2xjzzfElUYfkX2cq/6IH6kIIDRG2NLHhQXAFja3NvH0Cy/hmfMvB3DTP3559sSR7v962vqBY4ewsHsX9u7unqNZ2L3L5i7ZCXu8JmeZqFYLGaYasw1HUlJPeRzdG5Mlcy6ztr4K2dFyHX43kRmxstukh16EsJSHw1pehrNopmmImGN2/HF/Ka3hUFHUiI35Ss9cpt9ceTbStX6cwPVkCBFWn39nLy8Fr37wFMbj+Cqa7XLzXH7j9l3cvrvkPChYBVBh4ycZlB8FsBBd718GQLC+sYnnLlzBuQuXHagAzM7O4NSRg3jgeHc49czxwzh19CCOHNiHowcXcGj/Ag7v34uD+/ZgZuILq61oUh8hFe8X1WvTpI/MJCC8DyAqAlBZVjIQF0oyUhWvFCavEIQcnD8ZsVqeoQZV+cvOwOgfUyyE9NBQO0dEUq5oH50lxzQP6PUddAJSNB3ayc+79+ZiQn1TlFaNz++aw+MPntw2rWhdOi4ra+u4dvMOVtc2+ilzYMdcnXQKFNPBMA7tJEPIOtCvs7a+gedfvornX75qdMajMQ7u24Pjhw/4w2oH9+P4kf04deQQTh/vjpEcP3QAc7MTk3li3kwdSOjUPwoLY4ZIvGsYNAOXlB5FZfqKSuxLHdTuFQRn6oFrdlCl0vqbTyxrcEgtQ7U976WHotUwLZ6K85nCSCMKKaBWtA7zGO3H+Q7LvT0ZAjsIY1kN6aEHjuHYwf1RL9I/umGt0qT17vIKrty8XfvhQdcP5c15YmDK0QJZl1GlTRkskS1qh93SewAp00X3ZWNzE9dudidrVW+j0Qi75+ewf+9uHFjYg/17d+PIgQWcPXkEj545gUdPH69HN2wuQGGPeLI0kW+kCvZ8h6ZalvoV30vQ6lVAdbyewRUKoyyvAi2ykXaV2oZbP4lWnuOE+QKK/ZGOkMax7HWAt412zAN8sAvUAIs7otJj5wwRYhsZQiqm95yH1z18Gvv2ztvYMK/6PadSnFLdubuMl6/dAlmJzeNEFBTY6RNiAvwn/XrgYExvI4MEA9CU3pSCuACCIGv9AaBgq2xhcanbU7tw5UaVoXs4TpeM4zPV2RmQjc64rUZCp1YDotZ0B2nFhgzaBpel0ElWcoYeyjIyVT7CODDZzL6RJDQ2unEeI6Ts3nPMmuYY+qV7WqQ71tQHavRsmga16e3FJBkUrNwx1WDqmIjgTa9+VXjeRctb3/U3G+O124v1XJXza9mgHaWmsbRI4M7cS69NgJ1lcAQA+I9RMr2wqNGjp/XiONgq9VaXFq6sreNmWcKIw154k0bgGjUXFEsVAvRph6XUkJiE5xDISjOBnI4oP6VUbWkOqf3U8nqv1N/FQlm9Vw0qDgClAyA0Np7Y+Ao8/LszGB/VEGIGlp2mgP4IQmBD38xnLBYVraYIhbQ/IEP3J6cQh8LsouDE4f143cOneyd0+eLUKciH7tU6V2/ewYXL16uhueydVorx7gAAu6O+oiXGG/3NkZ1kIHRKWy26vFtl6NVzeyk6DvchQ91VVxOnQWclATaw+pC4MmNOot8buaLPEYQEd8P1e0KoLoGegTD3UcO8fap35TlLQq+Od17ZoI+MdMYLyUQ278unhFSEdIaeJqeSc7nMF2s7IT2UbWSIcyR40K2g8vpHzuDsiSPB6PkzO0JO91bX1vDn5y9heWUt8FwbOI6Tgau+LA1Vsya9iYKnYEcZHAi7fhyvGHw8TbdxKWruyrfclwyjbgGDI4GPmr2WEoCuiXsa43Qtn/bKwTGYuKK2GnKeKJozEt8qtAeGiLqwNmmtWX8T6quCmNXCfLJsJX3PUQIl0kcXS7r77DgUzYo6COuF+lGnKj6UQzJwxDBIq2M/Ho3w+kfO4IFjB3tzB54zdF1K7zcA3L23iiefOe86rvKajYS3DSONmY5H3jOpsguB6oAMzIuNS0nlqjLWN4GqgeJ9yjBSm+zstASCYvHHOQlKC06hCqgEegPcFzbMNANbEo3EtFWIL1eQKrK1ps65KAGYGwlo0w1sfL3OrUOPqr5ZFmTIjlkVapNpLSM8UHWYM9HNIRmCxsRrlFJw7NB+vPGxs9i9a8544bEbWnplvheX7+GzT51ToaCbs6IvJO4hI+tL+wqwHe8FC+7LwEBFOG1dsBshfDd0DWB/PzKMNH2IhsaRwRGkQ6fIhpNyoQhM/R55LTNoTQWInVJZL73Sf4oZd3/+k5XkCMhRSRIPbiDMs94X+BvJGaEdnXQ+FBYjWBbhMSKAqOXRzolGSwYCKuekq/PomeN486tfZfc4Slj9bdKnrVJw7sIVPP/yVWjEEusXidHsFGbZSYZk0UpvQAZWgdC/+pXLSt/oEhjfnwwj3fSye+YAyl004LhrG3M65UztpKdwZYQHgCa+xYRoISz7ixpDXU9H6Rl7aJ+912RTfTkDOvkrlrbQmJXSTcqonoV+7iOMuVhbcyiWQ+tlmxr6TTJYpAECIMzNTPDE4w/ikdPHuxoS9x2Gdqf52trcwv/zx1+sf0qg81Y7cSDxyEaMcmzcpV0HBXa0fkAGjRLBFgqXw8a+k5H74zZSJ9L3J8Oo71geHYrob2ebJzMhVqTQUNKIsjN2dkSQKkQ3h/JqcGZnGkprOxFaopN68KJQtAiwS3k8Iz9ttNhGm8lEBwy1L6nRlK0z0dNVJCsLwOK89TKkHDW3kcEnri5DQcGBfXvwxOOvsjebuyo8wuT9hlxvZX0dv/XJz9NUJxp3S5zed5FoBZwCivPQkkGjhPPmNhjmPgE8HRQ1awDwimRovA9ald8NqJhnwTw2CFzHXcObejCnWb77KrVuRHNLXSoRS8tq9GDlQLIh8P/Urw52I5e39EXbG7k+X4Y2lfcQDXj+o11pWsS5USGabCKFNuGgEV5hhhxqQAaPqDwsgl2zMzha/9jk0NWaO7CTfOXcS/jzF18OVuOGmHRkTgYDJaXpsrFTe9mQDA2O3cisM71D9etYFbWzBEY7yWB/MIUn1DpGPJnjXNcGw8KPh0pbPXIOXEadsErrnt9XRDD5ya5cERLpsQ6rI/TSAmOthL6lkHzGlxhdtmveuOtM1vkUU35yRFdjdCKw/ORo2k/LMEiGgMYqcyXFfzUor8pxCtU8RiGCj/zen0Q/DIMARCOOiY+rUdwUeqkI7VU0ZGhdeQUxsGagLL3br0SGkZWXdAISDrxxvZfpO1KHkEsiY6B+MAAzbPZ0CQ5QkhCc92uY8s0Zdkrqk1Mc66c4X3n+QXOVbqC8vKA6EvHgrGj/VYNFzSTqI8ggAgjJEAx5exks1aqGvryyiguXrweDbx3VyJc6yp2le/joJ58kXfAYlF676Nhtc+63kmBNWYZ+OzpuYv+ShTVwKGQa9ynDKDqdo5c1LLRuS/870LJxpb7UUFoCcghlCNbONVJomiWRv4jilIsTHVeEuG2bWG5YXa3YOGaHHj2JYp0fOw+O6dkRAAnL0nVWZOlF1bOlQsXlM3p9GfhytQhuLS7js1953l883EgZWt9VJ3/4uadw8coNQ3WXAT5WKkO+xO+GYjLY3j5SQwaOOmHH2r51+jENWpVC9eQVy2DPf/v5cw11aoidUYqktImEN2nqvSAYTeRcWFQDSKMr8HydL4l1TAP0PcwrOBJWxzOHIhkrzHtwqgJ6qKdIo/dMhg7hnFXqm+ZMHRkfUO1HFxCcx1q3+KKFB7m2DNpvTs83NjfxR194Bn/wuafQsj1OmfLkenF5BT/9qx/r/mqr+jrLZ18jwvPVO8JiHaso+V5fBgYDyVEnoHzUFTuT9fkKZBgZmqoxJvTUfwutAESiXtUnwVSFo0PKAdWDC71tTm1fJ6i8fEaEGtGifrYmxMEoCGaF6CbZObQ627QCp/WtTuQvKj/zpewK0VKemE7sqykDUopRZXjq3EX81Ec+hqfPv2TzCb56x2oALC7dwz/7xd/CJ598uvtbEAQ6wbEkF3AGEE/SBq4TYDGWt2Swytl/xP4Z6EPi71cgw3ju7BM/1t2n80AV+UQiU+YenNL0+CRm4IOsyBqX2pQiRQXhk6USaRppUlKOEgES4pKpt1UZ6F79HlbG7N1KXl+q4/vEnzYFqV4XfMT4cLlMUTZgvCKl49T5Ox+xaMhg6gjZOHT179zFy7h+6y5OHD6AE4cPhEcqQeOxtVXw4uXr+Jlf+zh+6iO/i6s3F+l+jEw2NpR26DKzL4EXlMaL29xRLOjtKEOI9hGnK510ZF0i5r9SGcazZ77mx/pr1dy3H+y29WEVrpTGA/GBnY6eEfBjEkrRjJEQ0pboLO/mdiQQnEzPadjgA8oQErvlwVMdgwSiVT+qLIEXNQIy1vhXacjZrJ4DgsoaJsCge8RRTwaI69SONzt4bdVI8eVzF7C4dA+j0cj+Xp+I4O69FTx74TI++qnP43/95d/BL370E7h6azH0SaLqiBILOn7phLMIgVwETVUJO8p2MnTqKaCz5M6bDjnpN/wRxb+ADLLwrg97QsBGWb0cTKzhgUrYdwzj3TAlKOyd3ie5I8AGC/+Zy7O9Oy1xmNX6itq9VAvu1MWNLm8Y2Z+BSnriyNHRQd0EUjrMIzOK/n0g9k31WGCWwV72RlWHVpD2zM/h8bMncfLoQezdvQsjEaysruPyjdt49sIlXLlxp9emf20jA3xsG2xvQ/H+ZeiXF4sSodP/DzLI3nd+uKiXSB1U1DdGlAB12hrJ4xInNPi8fNsa5DD5MsPYRjI2Hq5nhtTx7nU9tjUjQsdE/MlDqjQkaa034jB0i/WobYg4mR929pL6ENdLkkEdQuc7OSVxMoXK+3W0Jt/PV8xWdrK+lNtoi+2caEpkGFlupWlHcYOgPUc73h2ioKKh/rQJTFemO5F9VIbdDzwJyFWJtADdiweKl1taBfhEzstMHvZeyzOJX7oHDcPMl0j8ZJGL0mT5WVYSoNemhE/7rsZRx8L7a8hQYH7CV4g6SrPq24/hlNAmIC031fo5khePlP25qZ9gsPZ+M2DAtMkw8omvHpKDDXLRmrpJVo2Ppedfzc0ejgAmfcmVTPpS0spwANtOk72d10Y603O0nObAfMD5FpWpVLm9n6T6rp7ZqCSbTyPCY2RdOWgoRZ9DSKg7JIMBSolyMbfS6y8QNB5baYeBQ3b02rxPsy9fhPmke2DqZBjxLrReBsRkKLb2zl6llWu4S1YDMy77qZBejUDblu6en4Hi5Vak3JEmm9oWzpMhSCmk26wMktl4pwHIiK4R0groJvGpfYRJWzXkjAHB2EkOu6cyWJ0hGTTi1YhjAKfNIkgVe0CJ+2s4oMneL7dzVsKVUkMCwG54lS9ptJkeGUZsEJwkOappaNF2FHREU4xangcZtggXmcroUBt4OJS+MwbQJXr9oARdzXHspTZkfeG4MDHnswodPKGoRo4Z2vltllezMgMP/nSJ4Gd6lQ5HnWEZQscqe/Rm78VSXpalYZyBZAk+b+lLzzG5OUeHsIAe09Te9dWXYeRnxfkWD5yGiwpQtLKRiTVkIwGDVPETMA/vpV0kt+bO2UEs3DZ5qM5BYbYAPqGvCgtTBNa19dWgX2K7JArUyTsHJxoc4fS3tHZ+yaMaMiRm0DcMbePR0wWjZrnPHg2B60iavbeb+zh7BNeigcjyVZZhZA+sFH3YBoij7J5qUSI7bzBOQuA8H9D7QgNdKqImA++jKDlWsX+cRc35M09UZkvDAHTDplRjj7vBjGaxr4D0pCc+qOe1SVEqbuCTz4glkChVfyZbX4augA2E+eFrCJGBlkeHVJNoOLj7KYPW5e3FPvI5OeHUaIpkGHnK45MSe7WistUwlmFeXSjJqFeYeYpKkuvAkbkVEUH3+Xcjj7TDd+A0TPpNaorCq1D+qXGTdqR77Hjfvoxod8mQpXv3VJXR9J9407+/YWnZgAz9yUk9n9TjcOjqt2+BMHcZVvu4ZYoCnnXwuDjie/n0yDDqA3E9xcnHFhCF5By+F/okO2U/n4uM0m8yRvfkUgMJG6pGssw59VfpSeXRAbh4XU4srZl7oL7KxCrxKww5eBAa5eClSO+beCpWmjAnvgy9tpEhCE6A1Vt14+jDbVmJQY4h2soPDRIvRgyUc8rUzJSmSIZRH+z0aAZ15GEkZkvFQ2F4loIdJYeuxHDmW5m3rEpXn8jTSpH4FpcqVLcCRsqx5ckqAuX84Z2p6njGAB/LVnqUd3LkEpATikVXIceMO9qdcxdqVitFvgzBhmXwts5PSaPfpSY0jmGyxGQUcDxy+x9q6WTyY+muBj8bSYsCzqzrhXL4/sR6emQYmYOQcbgxeJ+F7nX0S2SG0qSAZBziszNoWLRQSwZKUOu5XnRKdx4xJdxXmK20+6dMnV+jwxGnR7w4+oQFCHJKks9JSjLqjo+SdToIpwj6ccJVV4F4HqcGzYygzcsxW6uKeGkvPa5tnKw7gW7YlimUYWQHs2gC2f0U9+aS7EGSddSfnkrRKc2wkqRtiyPngMfb7jN5dukZJykqfzJaqYeR43j+LlE7pCyWU11TyztkUf4k6YT4VDpCO8wZxer9cO4/TnDaMqSXSLcdKJup81hCUTYV7TLS7J89S22SVca6hh4QpKM2UyLDyCaAhGoWtdWrq12bQwf6bipuk25kVp3bNKJFXCHKB9zo1CyovvZTFRnStJQLFnpE1pd2OsH07SIWqUhxhctKFD7jYWG+VGm1rPmcQP5kUGmBYJaBnN9eJbrttSOEwgBAuwkAwydw+238+1A/UlNaspYpk2Hkh+L8hqgRBEsmYyCn6qVHhraApjO9E7mZDzVgRszIpwkTbrBuOWRzNeMnnpnnpT6xRhLaSFVeId2oE0qgDQpWZPQilrPynxf2JUcKa9SnpU4ZNLIM9V7J/ISmTMRXu3rPtKkzcmBlfhpPrTUW1Y1YbyndWGg4/BTJMPLB6AtnL/yundFH/eFOwKsoXWrug2pr6dxLBhKOFDm8VAYcgVUa1l5sZ4oxhvt89jqngGPyAQYYPhBRJ+Gqssq2ilM3pHmDReS4gBDbJhn0HqWhyp8al+MJuWvpq98E1ZdahzRDAv+2QdpUAFwGSXQk6WMKZRjp5JiXVwv8vKt2K/U/fdS01MGueKhD2+vb1u7tVjXk4J1uhsW15cZS21jgaOSEdLPjtyrY5kDk9IUjmTmR9+yrSTFSeSxhmYLXeuWKhj6YfVm7moYgDQOjgW3JoHpJ9UX7MwNk+FWLK15U25q5FWpnLQaiQSvnb1atvAY1TZ8Mo0Lhmu+pA9dxJaE0lVD6tOWkS4QmLLsMG664ExYVg+rzfEJpVdpstqGNKcLr2nKfVa/OXVxn1jfDjdCufTEx3cs5pbPoxQ5Z6VOaVFjvjBxAGqZ+2aAMpIP4PfEY6jAd5bPEtnQ7PNuMHZ43UBwhWqEmp8VgutMjg0WIGF7IK9A9UdYZCB/m00+NHYnxEn92/JPVUUrTY01XXRKtojQkF6KBVKLg4yRKHqwSx8eBpy4jFopwDf3QIMRxrjOErCceRIoUEgioCsQdcxsZ+srrX1E1HImpr9C5ddQzSl15LLbMLNZHWrk2WmysDgzTKcNI/+Qup0w6kewMxjfqWnwra4yiKm+Qga2D6hjzbNQhIhWrFx80UufSB4eIweI0CURq18X7yqgf9eMRxin0v/NtUn4+PCbWJ0dJoZsS6Vk72UaGoCzXRY7oTJPz8HzFAauglG7yCqAxMXRUolMwPxseMMHITo8MI5vsMnBXBpSvYuV0GK3S7wZJHOXcfvu6oY6CcZtxZqOQpAmmp07AkYQjG9NmRxOqJ+keOUtuG8INaZ1lCJEqy0eOkHQReSR+cvssQy+0UIqoPGT1bYfG2yI1Oy+SQQ01vI/Op0yGkWJZv/9quGZjxFhGf/7FyMWD3HuegNux0NnbqNRWsTrjCs8dIJXB67mjMZ/Jbf11GgiC6rJrP1eMUSkpe7i/ThqnqW29fS8dHpLBFNO/WnPdXv/tW7X9tgR27OM+mnsfUyTDyHKtXkbgnuqhWqB/UcgdO4U3wF5UYHMPEQtzQ0YeURscluBHLPiVNAiRgXcTzJmFf+lddRzqmxkr4C2K+qFPfUGzgEQXJkNRGYJeOCrRfaNSXJdofbZl4J+hot7OixP5fhaiAPpXfuIDPdSwRSxfZaDcbqd7UyTDyGy6xNwtrrnX/9TwhDNkQi/O7UTHPjtCsf6sNqFlYcfQlIjyQDu3xDKaE6V0g/rxA2POo5FgpUt9eo11ojYYDLfYBqbzofG2epVFLD7Z2v3T26dQApbfOgAMyWBOJ6y3TgZzzPqdj9X4+LWBkN+20t9ENCEgZAeFv4S5l/atPbolCwPHlMgwKsoYI3fp0LeYkVUjpLxfghYQDCdczC8bgCElQruwEgX+SuWFfppOVdHqSPpViAePKODfgEU+fe5bakTU5xFC+0pc9zNURYVDS0CvtMMQutd1LBu9yqIbzaAMKndWeon9BTMIE1KKioUYsy7UuTMltgPlk7CWh88c3HvMupgmGUZ+uyJxPezn3ldXmUKaZDxUBdCsXbysJwl5Ru+YRagXVKYe2peJwkQ8KdtwVCYn+koT7Y6MMfNrRdnT4Ue9A9s+QMZXdv4knySerYwHtSGDB2d3mn5dQmNKN4kSySD1e0VPbpuNtuHh0rvHqzmpPYHCNMlgDwj5J0UGSlWK9B6D91QmpFDJc5MCwmSyxHuxjMOnCuk04+50oseRzOYR3taOzRty1MhgPBYbmJzvhoUndQApoW04tsL8soxGW0zXxlKhz21kMI9VGYTq9v3X9BjvV4sUP30A8Pur3LRMa73VNuILfKuPLv5cQyyfFhlGvPrJ3sfnZYxudtzgbKkD4QpKx+nzA0XZd1TwwDS/GS/xF5mk7/l+YtvzTD3OrTx2zm/pSuWHWGPBPatUvjj9IX55/AokGjojo0YmH/tBGQIjVq30avicqCGDkabTvazf1C/z3Z8gS39MVTai1V4B+urLMLIxyGHdEnTUQXdDgTLFzpRzn9IoS6L3lki9IUkJNxJNnZJGQtwytovfKxF19DxVNGydJHuIVbRnRYfgxtHABYFOyp2Os6X0uG+xl8RRbLUIUoZlYGUG3fWPOEt2cKptB90kPeSTwJEswnTROgLhiyA+pp7uiP0OIz0lMtgjpIbY8AeEzNtoMHSVKfiOcafeGG/oIb2wgSYShGsHCY0KVb3CivKcQkTSyV49d099atBUxw/KLvXV9d0cysqMx65zRhxhGXJqkMjXaG68ijk1Db7mWNRID1cOykBlgDuu/1Fyr6JL4FRUAaAkGUrQLe/1BJtlYGrEq3gpcjIM9g/0TYMM9gipnbMvjq0a/jWtKghtA7Phh9lrCfeLMaJIR+FTktIs0hUimw2PQhQz6CxQqKTwSeVhqY8iRH5bnK5tW58JvdzAC2zDwuErKqm4bv25AR0hqPK6n7r61ZIh9A2jSSHVVNOEHU7vlI7Ee3xwktmIz4oM6QI12+WTywJ7g+MUymCvoTE1K2IHhE+MS/qtdRJzIapYLTfEsJipEhsaI7ZNAJqYolyfBKayMHD0vSPbNzSxZdgqYxhEOsKiiOad+sA7tQbfJTp5SAPEfIrl78tQNSTOQRSD9F5S1NK6xI85KYFBCfe3RUIirpNnH/+Ox5gu8inUaZFhxMQ19+sMVKB5NvtrHo+wmx0koe9sq5xLsiezzWRbEnVEQkvVhgDIzmAhqdTB6fkq7Ub7SlmIOGTc4diKtlH0Vk9uIYiSUx4LfWeaNrJebH1W5lsyeF+esxu4qPxA1HUoZ3oMZE48qCQgZ+038xNcodIiHmMqGQFqGmTo/iwvR3Nul4zfUL0o02R42og0YdEfjUuRlzqwsJmUYZs7ahw0qdZjHbbbXNMeT8NKz4Yg8F3mzJykMnW60hdEeOhLqm8RINNpKUM7zn3D+m7JED5hovedJl09FhppGBPnf6O1Zrqe2DR5HWJsimQILyrrP93mZHSeoTN1oxzy/xIZY2NiSRh586AnZ9Bowmv25oyDSkhtmB/ro708GAT2H1BnD8c8ihoB/F4ICyURtUbkyH1c8T5y2yjD4HPLqPdS1OKoblPbUs+ahXrOEO/0lsRPUVswFbgd9PdvSuRtSmWoq0zFBTLmnctufGvn1ZBtkqROot89QfQ5hKU0HkGMSY6tnJ9ZyiJ2G7kPXaWy1aoS2+g/hfowRdO8g/0k1XVeSKYc9gt9N5kI6tgvRcm5XJZB1XZCegi+lWTwP+rooqsMAoqkBeDHWXn+pqPJRqlvLCygKEg8VyKw6Sq/OKDqy1fk9GEp51X0r7IKpk6GLkLwhM5GoO5MGxp6CtQL/SL2F4aCZOAyuLcWmCFH1CZn7IVMMcDtbepYm7RRJCkKFFcQs1qYT5atpO8MGLWwt8gAikzipS67OgjrhfpRpyo+lEMycEg1SDNAYSCKffC6u7DDa101ahfZjbvQbnA+0h/GTMdDghq6evVeAI/pkGGkNlk4nDCK2US2BEYYGYOQ2lFvgPvCxnSL2ZJoJKatQny5glSRfpCM6Tn8EIBZvW5DzGu68fU6tw49qtI0ejibAAAPLklEQVT+QfDDvIMrMNQ0LXcy5AzT0zy/OSRD0Jh4DU8DyNCC3qMJ9mWEj40LBd1dF15MCDSYlvIVYDveCxY8HTKMNH2IhsaRAfATl36aKXUdhCIw9XvktcygNRUXXg3fynrplf5TzLjz/KevJNrhpKgkiQd3KOZZ7wt8+ZUR2tFJKs/hUBvLIjxGBBC1PNo50WjJQEDlnOhmoTcXMC1mV0gdSXsByLq+xPpFYjQ7hVl2kiFZtHU+PTJ0f1IrhTXfnVWi3oHmdYqvDvYuoNoJb7xZKlQAn+gQc6a/Tml9hGV/UWPQlx+UnrH3DtPxp8mm+nIGdJKnR1SMpPItJdSz0M99hDEXa2sOxXJovWxTQ79JBos0QAAERdigx8LlML0BCmJO2NsI/A/q0MqdDK3zR73HozmI5Xr6YMpkGPUdi3aJRX872zyZCbEihYZwvoi7ELUjglQhutoX3Vex1bsLtQtb9lIP6RWKFgF2KY9n5KfX3GuUFJOJHtjRvgSIRy369ApbuUaXrAxNMStwhvmcxHotGeLhNTYqOhIjzqeQXlVvvDmGql9ewYl/W8+qNMXpfZd0XolTQB3zKZNhxALYLYV4MxBJ+S0JXMddw5t6MKdZth1fnUaIceXTVyHicprWZweJSuT/qV9Fg0YuXz3b2xu5Pl+GNpX3EA14/qNdaVqk8hqPGeKVXy8S4is41IAMBgzEei9t0DKhe0Qvr7roWFv6HCavaohJRzofs4ip5ArJJj3WzGGmSIaRFuQDUCV0VEKua4Nh4cdDpa0eOQcuo05YpXXP79uJSL1HduWKkEiPdVgdoXcS01groW8pJJ/xJUaX7Zp3rTuTdT7FlJ8c0dUYnQgsPzma9tMyDJIhoLHK3G9RVcLEEzQaoEnvdk8IBgMrjomPq5F2gXupSAkp0rTIMLJyerO0phyKUXG9l+k7UodlMBIZA/WDAZhhs6dLcICShOC8X8OUP3zCTkl9copj/RTnK88/aK7SDZSXF8CfIixe1rGi/VcNFjWTqI8ggwi6Z4cdAUMqsI0MlmqJIObw/s1X1Yzh6JfJh0OUtu+Rql/s2G1z7reSYE3TIkPYqealVGtYaN2W/negZeNKfamhtATkEMoQrJ1rpNA0SyJ/EcUpFyc6rghhe69iuWF1tWLjmB169CSKdX7sPDimZ0cAJCxL11mRpRdVz5YKFZfP6PVl4MvV4o4nUKPIYNXRlp6sheqproVk0H9IhnyJ3w3FZLC9faQpkmHiUaNSFI8DOhcofL8hvEkj8WvrWQdeDSrWl/fd2ktwQcmJeFakfFIKZ80CD37Dj434RBqsNK8I88gWzeA0kY7/dOVIvS8gWYkey+9Bri2D9tvTFzlS2Ak2Nm2EQj9uiMR/CQ3pa8oWuIvWGCo9oBFFpkeGkaFpNcaMnvpvoRWAwBjx75NgqsLRIeWAapT6MJL1qEjI0SX8pRk67Be14RCqyJBy8xBXhegm2Tm0FlKoZ1MaAbRO5C90+v82dyYLEtsgEBX9//9MDlYVDyRPcov70tO2xCYo0GJPTrkkbgFPyUQ6nddVhzVKjDl+Vz8DX1LtaXFxh/yY17cL4M/S5kp/NZ/8mg6/CqQ4oqs9tQTU9PrvDcjbeLog2PTmc9KmWB2Dm2xvKHS5mtWnvrBkyr4MHAsR1V6TbLwKRjk5WhZ70CvH/MKlEJEpuBTbQYIrUhynWmN/0cE/O3xq9a9xmjGafTycXcnFJR6Ct9lrE8b8Uxlf9JvbO1Csxed0+M0I08pA8S53laOGFM9rFUlqDz37XkLebaxY5aAyqsoe193JvLfa0qcM1VYMbC3dHI2zeF4yjZ0Z9uL1MfdvDt3DewSb20nf0pXjoINqbbf7poNsCnvwhHKAVr1qRDaWaCVbHEa9gTPgXWis/1PozEVaJ3gF5PiaDj/WbtpRTgsRQKutb5cEJc4ZHEa7ll1Wja+cnenx+K3gW4sBk2ZQ9I/SwsyBICtWHbDbQS1BBwhLltyBqQzolB6xn61eGxwe5fSKmKTh+dm8iXyct3ke5AZ3HTj5rmdXJvyGZe43Rjk603vLtBScTfj4Ze0p0Ede5s8m/DUdfhpc+9UlO5tQTx24rswitK3BCwptNF24v3EghiIHn2j853HfZPZhxshG4f4D5ZNLTtCIPhqrbRQWw0IefxXdPpHM835DvQ0Kl//HduLt8nzr6R/NCfdIuNSrPtzslO6v3qtQr1+FiZBN9pr6NLe4BslXdPjFduZCTKWdaAOm493K+CVpzzCMUq9QtbKkDHPsXgakI59Y63kJVSKPhv+uiVxdsz5EDZdfkLdZRYftIBcn7JRT+mPwuKPd+8SlT7Zv/60susei+F10EDiMKGmlu2guOdoMxmo2TzA3J83EUIWrglVNSj9WAubnm+cU7kM6/Co96ZDc8iCnWmqTLJDOtjYtmUytVqFGwS6QD7Ixq8zE0JU9UaBv8GTr5785P8kaGGU3yuGDfUSjxvHRw/66AwiJHE3TCY9yGU0xb6ll6p5p3nQwoGTXi9LGwa8RtIwFiqv3vc21dveT5qlfSxHT9mt9ToffPJO+aW8QroERAgejSo2VD49sNTY+dHRaS7hcRtBqTTxn1dsJRykrs9DIROcFBMmEbacxoLNlxwBMRFeG9AXc5CRr82iTtu3Ix8se6ETQw/ekg9u86aCMtzOOAU7dOkil50/kdwlA635e92pZsNHoCAB8hldyxaXPd3T40SHaHN22V2pRPySdwHl+OtGqtmHm6DrRYXeodBhnMDbQBb0zKS2t5hT2og+8rx0XhnA1o9LgBbIaArP1q9vU13PgRwgpMCTecy0q2bLOuw6NsXTv0VxcXPJSl4tzNpLZYt7lyxGY7M7sIIkAgrdB+4gOvzorzlscOKWLDVDa2V0nsYtuULBp1b/XcoQfZRf0Vu08A8Tp9irDDg6k2VyrJvTbYG2KQFub14V+9n5DlaUgfwIcNOaEPxTAkxgi6qLDEGadjqE+lT1LMXSbPA8ascpGc2nzr+41zpXBdekls/zPOvy8BJnacFurj3JFqrPEDN7mnEDgOR/Q/cBA50bU4eC3pYhWikwUUM0/ZcI1b3St5ZWM3M7el2yJZp1XQ3rYiQf1qjUMJXWbnDwjNkAit/2s26nDc4EOQnn4eUPktW4R3UpN0Chwr1MGt0/1D3/Nc3J8XuFLOvjNfUazFELCGS7O8i5rKRUT9ZLCIyvFbLMKmW8ZceE+f1/qSB++WyzD4uyySxSuQtW38qaOep82aCVeS8fPxXLk8P92MOpLX/LabwVxWfaiwzk52c+jHBK+fc7+NxAmy7bax54jC1TVwXEpxK/r39HhdwLxPsW5NzrOg2ZATv69eJ+/z3quC4rfcMaK5NyJhI6qTDYlB79NL7aMBcBZbVlYultFoF5l4kZ4sq5lIqDRTF5Ceq+gyLfnhHnIxc3INx2a4gCsY9WN2Yd9acSmxxttyYNB4mLEy3WWTNdK6UM6/E6wCwAW0WgHBvllpUKeJ9EANsGO33e5JbyrKp8VqkjLjBZnMtizAgbjeHlyq4CaP5itFHgWgMeyRQ91JzNXLARhOLsGArOCYdtq6XmKsrmzFuSuTHnXofqWPDlG/ylNMI5tskQyApzK3N793fapXeUyQ52NxKJACVt2QQ1/Tqy/o4Pf/k3nKGconol7D/3swqBMakjGFD+DQWnRqRYOCqjlufZmAwdP2Aj/Kc1u2ucp05LXdJhxDuJZ6NMWIBCU0K9IxnDqR47jwOQrnK5mnyK8bdWIz3G60JwIev0UZqtpRF09yuPdp8hWEGjDNj+ow88HszCBfH7WyU6P8wIVSrh/VinVn6nu7eR425FfIt67z4jsPJwThprfRCtFGAKn6vfo1oGxqKdCU9cfZJF8MWwCOUUnsMM8UWzfD6639wnOXYd25Hy9BNB005Ix26XpKmLZafba/tJneGVva/RYsfqJ4q/o8PMEEKjmrK2o3n7tgG70y1XKJ8vJ3Jx9LtmirxCxxltLKbfNvbBKJUO2Mm3UgokjyrW08yimt4s4U8FwyWvZlZ94mJRLRtvXrs8JzG+Cyg0Epw4Ifr9K9M/Pv0LoMgCITQOYeYar96m/3/jELmnhLR/T4eeNDoSa3ox9rDZN5EuOaQ60XUvlDB4YO/URb6PtumYMplzfoG2ZstnM8oyn6rDUF+4UrY8O8SVsoyCMRnshWcHpo06kBuY2teSItAaeLp0maEwd9r2c8rSuJFKrXXM3ycHIxEp55lNu2fB5fNRnXM61jGojqXxFh18NxqmcnpXPzQxf+0cFAVdRntK8BtVr6eQygYSZYqaXLUAhsLSh9Xo/G8YCn3IezJFwrN9aBgw+8ESbtM/WNf40nMIQ8wZn5L6A0PsOHXQPZajkk3MVniBc8zS/FdVLrVuZEU1+b5BeDbBKhxh0Ytjjgzr8NDnm8qqe/6otdD18EX7UNPdgbzzU0B686+k33dqO3KKz3DDLWuUsu48Tx6UmxM1H3m1gz4EQ9MlM5iAqzrWa1DMVjzfXnRa11XijYQ3mqevT0ghycTAM7E0H2WW0D/GzAxJ+5XFZl3Zfu1uin3u8ZINbzX9tumVtZvqeDr9EuuY9BfAeVyilUkL0seWkJUIry5Ch40YFYUoNtOd8QrQ2bbpt62NDVFsv97n5Du4sm5k34Sawa59Ws6KcJZ2zFwNy00eZlLQ7kWOtMUzntVcdYIP+95CxtSEdyZm9L24XygpgCjznp6Y/db+1ZFm8SPc7OjhD9PSCqFjp//6YCoQmm3LHEDz7z0d+eB1KmkM0rboMWikaMS+uC1KFwKdI5Bys7ONTwLOXERMZ7mIfDEIf5z1DmHbiICJTRCMgE0QF5h86nMY7P900zMTg1Zib0eGUWnlMLzOHeYyVa9OisxYwfFOHn/7zCksmTSQfh6mNupvcEo0oKn2bDvQOtLHwdOqWkdLt+oNGCi49OAQBs2gCRDbrLF4T9bt9KsMUhfNv3obx5+GxME9mycDN6PTcL/7QoRmrbDEzOmmyDp+fPmAblMZNrgBaiLejEo+B+Wx4wwST/Y4OP092CdxbAMmVvo7DaJv+M0hRKFf+e9oGjJpz2zmnU8SwBOkpCJhJmNlIm4EWaBfjHoJl9m3pBlanDi1TTf0QCMMWXUbIM/tPHY7UghJRMkzz/YXGfyI1g3cNh3rr+B+Yf0yHfwAjBO4Lyccm/wAAAABJRU5ErkJggg==","overlay":true},{"id":"DigitalGlobe-Standard","name":"DigitalGlobe Standard Imagery","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.0a8e44ba/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqZGFrZ3pjczNpaHYycXFyMGo0djY3N2IifQ.90uebT4-ow1uqZKTUrf6RQ","scaleExtent":[0,22],"terms_url":"https://wiki.openstreetmap.org/wiki/DigitalGlobe","terms_text":"Terms & Feedback","default":true,"description":"Standard DigitalGlobe satellite imagery.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMQAAADECAYAAADApo5rAAAgAElEQVR4nMy9a7Bl2VEm9uU5595bt6puvd9dVa1+6k3rgRCSQLKMEDCBAHsEGptAGE948Bgz88Nhw0w4bBzjmBl7HDE2EzM4PGZgAIMNNkYEDKDBIARIAoQeLSG1uumu7uqq7nq/bt1b9738Y6/M/DL32vdWYzw6u6PrnLP2Wrkyc2V+meux95WFd31fAQR6FdRfRYuF7ujvAhSpdQsgUusLSikQ6e6hfkcpKOJ9AIBo/VBaINRfqd8jd17Lf8HqgspCy8pm6K0Km4pNCYUqimQukHrs/mn1kcuoi979QNsGo02rRNVXjTGf3e9ePRoj2bZe/Oz1a+0j41omLR53+vwqyzBqDoR9casohe6WTmrroPiHVKcA3BkgYgMsXN9csXT3itBNN+lKDp37CUSZLahKIPrGp1FGIQYLeaBIdWhSQnGmjIoqXukYYIQr4IoXCfVPl8oQnaEow/qBUoZl0KZhHKoM3QAL3S9WjwGro+P1CtHLn8a7lhMfYgXFxqtU+mx83m0JKpsWGUadSZCFEdNqHGrodk+otoj9dmSQrhK5paKx+5WQkmpLikjqG2agQrwpkmQEQHHe2AZL11c22FJxxepKsahVTCvFBpadjEe4pHtqyPpbqtu5casuitdXPs2r6XNABuOwqB7EeFMDLUX5T9G4Wg3zqarOZd0n91VcBi1HB2gWu4WjqttXMGiZPhlGqKFGUFCKCyAiHpoCDyV0CL1vdat5mGEWQ0o1GTKrDvOLO5wyZ3XFfN946OxCjK7dFa/p5WpYETn0rnQj6b/pm1LreCjkky6Dyizqt8Y3NJDaIIoAUgqhktQ2xXkWgXDvso0M4nX0vusZNeIqx8S/RnCAxpiN1cdd6Qn15WMSy9lQAv8SywKETJkMk5hjVRhns0ioChLUWfLymJu5ZCWTMWQWiFDmKNRAnaT+o4KZaTBzAsCpIJp48Win6Z71UarlKiB4lLDhU4dlRDNnrTWlmMyayypN0xWlj2Te1BOXlV55loGCB1AEnnGqx1XaharTgMd8Xex3Yd2bIgsNIkd3Zlvp+fxS4dZl6I/rNMkwcu+IA9NLkY2MG4Xxqy0FYaA6BZFwxjQRkxgzDHlpzAOuEGOOIqlOjxUx5HUfLarnwEPEMUIym8go0zQIhdsb/Ft/wTlrbsCmnl2CuShlWIYuChVjS5iizduU7443Q0YNYdXZu2o+mKZ7YVmE+CpG3/otfSlQXIZSaXCEmDYZRoZVRf9hB+w80OYTNFg296Q2yrCFd2png671henVT8rVJd9TmpQWmYqkjbU6Go5Z8b4k/LKQa23E5dGvqkDTDzwkB9rcR5WNUjPWSXFzCXqSUjq5t5FB5xYEZZZmaWTLE0udbzEGampDawrk28XLRdOSKoP4yo5Uw7ZITuUC1R8h+BTKYKtMKkkpahQgb4rLjm4QnYGqpxvcWhsaPpvEqNc7dGqELKpFSih4IspCRkT2ZVZH1IhIpVBkMqJdiFXa6mxhibhEgCqmJ5gzMYqXGgVsUqd9WB4pKFJCVGFJTIaqVNVZUwYwcKH+Fr8tcOmMp84xi8lF4FV1qfM+BzafT6LWs/FnHmiQOHXuutE2KoMvVkyTDKMSDN4N33cB1IPcpW0gCQn4N4qia/XsoqHKL7M581oPaW4c7mgWlUqxfsycKFTHeYaVOu8WSqSmZVrbhikglcGOMSz24askhfrs2nB+avMY0g3zWSyOaAPPi/uxkgyFFV89t6gMjmqdsYlYWqxjY3pQjy/eq42H9ekg5cjqJQrVtjonJcmPYEM2J5syGUYRo/qmFASAV+N1cSgSFL4PsrPCTcElTFZv6GpXCDpmbtFhlIYqMfCMzoEUDTxgEYxBEUNqyiaOOEazGMq7IzJzTK/v0DbxE6mG4sut+VI0DMg6IIONiVYW3aPxSMLqdYMszrJryhkm3hQ9LdoTYLJh6Vexwff83xYTGFegwDBdMozisPiASs9SYzWhQVPyERWJxwaDlnblcsDnC7nfZI0c/qIRuw8VQ66WECHOOF3h+s4k79h0BbTsB5UzqjnL7OimDFbdpVUM5mBIhhYIUG91jNjJ8yyk2DiE4RbltY+ongsGwRAm10a+OOFk5NMqwygyuY0TmIwlerkEetYDCxrNqLImbQQw9Gv3Hipq2NXvITwCKGqw3LqDXRRDsk4IM2jaLbfAbJM6Rxb3Tv9lfIU7ceIehyajq0vOSdiQDApMEXQKdFM0c6a0HECkjkMySbMXDvV8n1d6SC8+cTK9NuNgBbEyhTKMAAR0yrt5bOh+fqREaIeGP0Vm6Q94ECcJV0os5VyzytIJ5hl//xSU/6tteMXfB6nUsOwrRVJ14ImMt2N9eE+KVjqgJEN1Nkc1501qOqD27BtuQm2K67UgGlWSgcvVSHgu6I7E+XgloTNKINSzjnuLJUzH2WmOMKcKTRkqSEyhDJPKghOtlX0y7MR0ct1tu9OGCC8poMTJqtIA7ECf1hfycFUSlBNykpBiwI1KlIdKz42sJnSlqkngxk8TNRRXjq4C2dyuis9Xgdkv2NhNbwWkbFqxA+lSvF8bDLYLEK/meEMyIPZJ48TpikCoHf2GL5Z0KYeYg3fD6vf4CnagSGv5ry5FU59hMk1gS4qdFhkmmiJ4B13rEoh42NKczp0BPriiNWB1IWREDSYy/dI1NCq+XOdKcxRxLWuZGxn3VZXFDieaNhVXoonEjuIDqW3jwIRRNd2oUUBTA9aMpD6MHsU06q+r05ehN80Lk7ioK0/FGJ2ZHnenoMjjg6BzIZ2bBnjcuD7zZW3b0eWrLcOo1I51EIq4Y5TCDWH/x3CoaFaoAoECexYZta1G8ESp1ChSnBaZMBSS2U+L1SeH5rbkqFFvDWcoZJwqOzm+NstoZgfPDNW5K4kIWmnyGR2PBLX/kvodkqHE76IRmnL5YCwl9uX0qQ316X0orOvvalwl0Tb5uu/OB3oOzuM0TTJMzJDrgHW8q3cxQXY8CUKyxxeUcFjPxjVHhhbipggTCEgXxzR6ZMTkf912I6VSFcHHVTzb0xUjR6EYJt1xWmkjy6e5a754taSjI2ZF8QiN1yWw68sgPAg+dlL54fSMQ2Bh/iTYh6vcEIpQXulqDKzMBTWpjJnxMA5VR0L1p0SGUVjXr0ZJm8gKvh1fZNwaGbRO1IdE5uBe3ZtwgYRtas/BQFR1hOjR6xEmyZkOO5A5jRq4Cql1FdmpXx8TdT93Q04PRPlKl9HT9Eg6hMoRx/pv6KKX+lX5ewsTia9sK1wQ+lJ65rwNGRRxVX5C8yBDQwdBNp0fTZEMI5+EOsfOrA5AqeWOZiV80vhz7s36qRZVQA4n1huCYyK3C/rkc3UdTa5j6V9r74F0o6mWsiyqwNin7266VzqPHDqJrvhCxaCfD5T3mjRAtvCXCmIZg3oT72wYLcsDbPyCEWZeqzUWBSIzAGfE7K3Rl+tNpk6GkU4EAfXQevCKiOlqfqE1ehWMHSmuDFX9FAqKhdA2y6TGWb3bEKCzL6vTob/fK+m3nXy1eVB0MQdyGgE9MUmIzwos6bvzTu21TOrxNfOHfqQyPgY81lPVTqghGdhYfKmbeVZhQYPQl6krCK1DX7pnEOYEKqNUYpryhlUdIXouT9z0nS4ZRqUaQuibBSNezMq1I3o8zQzMmGX0zIwkQzUjU8VGYYLnp/xMuB/Wv02WJbZlhWnqh9SWUsJOLHcudlTSq7djnjhFrPcTplg9k0sSbcg2MqheiKSlLamepEmnokkYJ74dx9ZWdUrdrymBUlsfPQajjUyjDCPPodnAkbxYx6pGEsVSRgcgGD0vKVrHAlrGdJwtBou8LR8PSjgjOnFFdR4x46WmVR/eXidofOSsOMlqs+ogQn11ii1Eu1iY8s/urJOOJaVt6lyVX2G+jF4ylDTRHpTBQ4mnGyZ/to40nhV4er6pdAmEijpy/S2apjqxRneJttlmNvLpkmGkDGjeTOAXPiv29dmixE/YWC3C6OS0sxZFWkZNLevSbw6vsO9k2jBjJmczUOI0g0jYRDilN0pSKq8qktLU1a9uIsby1whEOpGKgJL5B3yiXWhlSu/RDwcEFd3ptGTwianSIR6pbdz3MYoISQrpP0d0j4wlTn5LvMdAp+mvH8UGRcw4vtMiw0jqAEk1om7JVIeluoE2AJ1R4vFmcOPwXu8xoheNHooCInasVxT1a8QIKzcmoLj1JxTwaEVr/6QY0jvpz4TrnBLFxoAn1CYD1K4L0Sr0DEXplmNpYqf9AtJ41qLmtpoOEK8UfJsyFK5Ao2uRjuVXsGJoSemnRd00fnEJXaJRMqrniybL4b6O+xTKMPKQxSZvFkffNa0q4GdfC+gTBNrFBzEwD0UNr1MfCqtlvoPMwUIdSesrWxpZzEGoXzVcR5Dq6IRaira2Np4XDkpdkoWQPLobXWz5Lk7soyOaMwt9NyeJ0ckjriZeMihDb9OQZeD5DhTcQDpNR28YKUrUUbhYPYy8yjvivaa3aLsplGESYAjKIFm1OUUnQVe9cwodYAhoj6gyKR2tOJjuqRL6Ux6Ll9gEUoKee5uAhMwdAhNNZY77LtqONeSbakX7oPDMRyvCBqOpwXWoBh/2F1QXLR0oLeXBb7j2ZUgGBzGmxX1wvZ4e69h0m1yk/WoCvGcUj6TY4JEKq7FqyiiIdYmG/RYnMS0y+MZcHYnOMWtoV19wCHAES14WpzbulTx54V1dUyDrM+XGcYUGFiqE7nsIlfCKF4cRNC5R9dc6XT8BqTMf1Fblstq0mlHUEYKiCVqKn6lFGPhKl6KK7CBD1FMCNdJ/0AdTEJcb7MBE3iISAZeWR4rKfyppoHnxwqmTYWTVhb1PjZWbDoyLtVXGggc5AylF4HsepFibEtpUqKTyaJgx4YYjTXXcODllXXnMZBeNS50g1GLmqW0htri/KkOvWYrMgTnlIoFPlqEHwaaugjQE/bHbLo3I/Aw5JBuojk+jGrfvrUROmQwjHizDLhGfqWcmaweWsqWOdKy7ex4JIrPRadz2KCIAPYVsf5G3MT27GySgPF7MsIMzs1wKFiyPokgH9dVXnYe0xeQfNtGMqBd0NSB6lsFCTykRmgldUSftnlmW2FblilbbY9159Dp5JznS074rR5YmUkpVpk+GiaU7EpevSs3hLa9VJvUbAajnA95JXiLzTS06chuciaAQ/bmHy196xmQQbLLAJruJbeO3lQbZ1xKL2JDtd2Y5kbJ8Wagwy2aWQQ7UAoPET4gOpXWT6SQttpJnpaOG1Uo7LK2h/lTHNvbUyLEzGCA4onPfUyLDSOoSoR67tYsMWgBbetXVFHVIB8pmTEqCed+mo0rY7ZcMT6lm+dWhk8N1VZIismFltAi3KZplvnPkUpmDszjS9M7daEN1RpIxfOf+e/f7MvSuHs8llvMKFw8EA1RJ9cN9GgyVOfdpPJMiVU9KPwHwtMhgz1T31t8pl+UVraIELM1wx+z6VCeKhtmtODkjfsbJETLn3bWUFBIjFkcBTifiUpySLCa8v7GyrixVBTt6kFDZESyVjKtQOsiuq+Kf8HEYBI5kG8YXO31DBq4fELLUPRXTiwth53rI2YbAoYTvRN/KxAGtqMwtRyAa+j28WnI6ZBgVtXjx5c2wTAp3LIsQqN5tRwzMghEkpN8MEF0jPz3rfYl3wiRp8qU2oqtL5hPVUPRepm6IzeG3OqIeAbC+WAoybr5v+xXhUVoHHMeN6Jw5jQS19Rk5bE4SJtJZBgJEPUtmTiQqG92nurrzHiJrMOaOZ4HLEPZKbFGjFqlta66vv3WsGCjD9+mSYeSTwaLwH84A+WDwD/UuX/ktwYI8ghiCZ0RzK3aDtifwJTJODNguehXIJ1pQTzFZbU+lKkaRwXfOWTAyTFYc8lyoIQPTUTLkpMYvXyWVKaspP95WBtMDkxG3RENCEsxoIfKl/h1AMSM98x/R3dpQ2uLgEA20ycOUyDCyAGHeFVFL2TdWFJqqE+QdVN9ijx3ZikKt23qAhyJiaktHd/VhCiNVopUab4kYrQKECSzT4r7ZUVRxvNLBY9jHD6sfIDAPQBqgFhkLBYMylL7uMkiYHCCDdecKvFi+rf9XfbJT9mQtbjucPzMdTgHDK2amS4aRepTzUpHJA4a3ScR6E3k2mEqH1+/dJwzCqePqSNy8oomFR+Yk8ZatU+h7trQwea7/G29NqwQpNtZTcZx4od3yGD1CXUFPBmG+8tWSgVILNzquS0wGI/BBD/oGnB4ciLrhChoN9bxIGJ6TgcSde9fldMkw4pTDowXgB4zgKJyXswKyqjLEfpqSgsJUcBeiM8bYzq2HvVUFSBAk6TfxY2RKUkQSQYyFDOE9pgJbmd14yM+bFNLFkM+1+OqQdECGnIZZCpn4FlJnKu+fHnUG7IAkMRwWHlywaLBZhbn+gMzTIEO3U615NwoxI2TjbojBZhIqUwjoyV9SoUWb0k1/g/Fk+k3kMDZjGy3XlaPqxxDEoxBm2wWmg6rxcLKUaPX7oAiokUnbSN3crLoXk82PnvQUY8qiY/IiO8rg7VWxcTLeHARKU/LqjOrV5Jfcno7fSywP85xalFIQ02VzafqrLMOoupEnGgXwZa4Y612ubLnsvbWtGkr67OrSQS4A/uggSc1OXK1BI5f7nRtHXNkofhYLdTxsblOYTZMZVNY/8yJNJOrGWnXEh9Iqz1VhFjirEcRz+j6oLoA6DkfXhgzspUX1qTzQ2CnvOvDqXToWDYSNfWjfrvLQQuh/Lub5nQFX8aCu6DpFMozsL3gqkfAjrKJbWaQCtV9CUjZ+ekbb0NStNxpn7Mr2IFLqIxX6zcNjb66wMN8RN8geLHX3I/gUioyRryy+fudTluavqY4PrETHVSStHpSf5WjLoJbFXaR2dDssNBhYcIUkl2IFg4Hpg1GoUFuXwdLWLEPob7pkGPHNXjiPEFsdmB7sIBE6XhxJGWW1zyBZNYieIL3Y6Chb2DmgfTCK+KOb3gcp0pSUFMh6ykiXVNFL5/hSxIOjWS+UpwbSE5d1RKjYkMEm1tq35mbqnKD+C53b0fEgtAzyljrONUo1ZWD0Ntm1P7pX8rJ1ROtpk2FkD1FUVFKj5/r8Q9GeD0VZiOtxxZ+NSyOH0tD+w71i/bqDM2wXBEMEbE7Eodj3NRCNsGXYpIPsIHl+DfCAaQdep3kgL3Tkn81B20YGizShWUJbvc8gwaz0nM2dTp2xy/Wpk2CEhPAlK9SQjOZaDpp23m2KZBjxfQD2HKz2JkW3n+p3YVruOBYAijqIxNQhyZmPJbgTqkEJ2YLuQDf0NbBKUYICB/TdNG7c1xXjI4cYBHmZ5QAbDVQLObMWbyNDqQgc0FJlqIah38NCAUqilx7cIb0rOxne/BxXR7szm7hRanUVbIsnq/6g1XTJMOpNSETozX3xpKuegAVNTIM8OmFS6YQNPFpA79yQLgeUAl6CtajYq6sMdL8La5J9zWQurhUjlTyWvvPgNaMBj7jxTcNT+zGwoDHvGOI+QTfrPeW7lEEZnLYWCoIe2Q1DaPN6hesVgzJLny3a1ojrWCLGp4534I/SYZtcSycDR/Bpk2ESxgHKt1uUljmw5eMS8Lpq5DQhFPUcuuydqBw2mSSFQJtIpuhiP4lPb0+/RFenYpiNEzZHYT5saAQp4tncKIFIEAB9HdpgWIiVrBbYkfH0eK7TSP0Ui9EU9fisFh+zr7qgMTKg0TEjz9WJe++wJhmc/7kEehpOXAZjV5QCjQd59DTJMCoiYW7byeKRQZ9VJV7JoPTgFC2FshakDq4RrrymP5Log0zr7wUWZv12MVRBQT0tqf/3nanniLUPjVy9B5LYUVgfZJUWZun/EL1IUYVpW//0q1R61pWfPA4MDMhg/XC0Cs5OTw1SdM+TyVL1FZ5TKToZJZ6FAIfmd5pHM99NGeKLkCKfUyLDKCjXWQUnS0UZJvn8ZCKi1yeF8F/q7ISqTIV8EMGa3UkIUVkIQ1AVipDY0i3d4whsU3iufHUeHerASXY8sNEqP/5uHpqAE5xTWhnb0shI6MaaSh6QIRkYnWmlIJgd6aEYSOnNrm04GmM4QjoVI03znFrRuuXnalyG5pyMZJ02GUaWtgSOg0UYAkuwXlAuaJybBoSplK6kt3zGvlgrWmsp5CwJPah/NYze3kIpMfIZi65cD6FkyJUvo+0e7H3mNrmfojKgEXXyEqAPSMt2WlfYM+EUTPlVVLVxc3bcWFwGm0sR+DB7irYuX1/XjuTZSULFXptpk6H7+xCS+kj0bE6gPznH3elqGT8LxUbvXbnBJuNS+fgzf7c2vRtEt9WY7D/MIXSwwNEg1u9dxGQ8/kw0Ut/SEmw7GXIdGsTm+Z4Buj1aua6kgh7thm5aHYb7A31+lWWoZ5mk37ZGBAH8fI5ZZAPLCqInZaVIHxE03bJq4nR0ky8YHD9uamhANDV6iNcNPLEMneDhXj7dG1CiFQkSOaMnhFitq6T/h8qH6lhISZ8ptS0DiBhPEmxfp3meSOsWqltiu4DIOUoy31MmQ3d0QyJvHWPwyCC6/+DWoRtpsT4o1A3FLWdMArMS6nCkUOZKoWcwFMBT6BOG2awIlcmQiKIAWilWLmgolsUiffhDV8k5JP0PKqfv/LjooAy9VSd+ei894iqx3HhSEEn+a1rkFIhTVdMjrRJSNhD5o5Q8dCJTJ4O9l8n5rwY5AG9qxGE7nI23MmDg5jI0nKSfTlhksN/FFMe2bO3DBKt3sxmZO290BPA+ksxJrmi09IBLi746nCAsDOx4tdKFIRnIEWn1PVTRFI1XbYykvmAipzyFnnwmskENJStFDdZaBgRucB+/TIkMtlOt8xld+rNXwMONVjuQXF58a96cApRugVdq/IENV0oxzo21sPpVggaNVtGmSfHKz+CAMDz7+ZhCfXTtVG5SnGq4PubqJyi5L4mpHcKXZjpV8g+mNSBDDxjS6HCEiZtaSpfRN3ZvGiL75NU0f7dv1bMZLK8IMRG4AYogczMtMoxCWKY3aWRUir4Ub9qafqClN3XrnY6YO0/xbyWke4qytthjYU7ApDIChzdsZ3Qt9BkmVvREV8vYggLExiIiV+6LB0mNoh0xJNlBAIMBGRgYepfRct7D3kztg3dzDY1zfqD8FC6i6GdddZXSUKrQQQe2ejRlMozoOB2UPR7fHBUKw14spBDEX4WMprpEjym6b/MF91xbbWoZnHKoLAi1oWXgoJjC7ROsULXQTwPS1P87A6AHi7TcJvrUlg09d5SNQiF2SIa8UsLOyZNCs5+E1NQuGG++1Cgk3y6RDwsJjHguQ3x0tzEPnQIZRuAOdFVJq5rHuRdLdf94jJeF8+MYPMvvHXVgpFbjUSOGb7LEpbzUjuobf/W/YDQWYViBDT4k3S+JRsspSR47IsD9CfqTdTMS/p14DDg1IAMqaATVkjHmCWsDcfubioSabIyBFjPMekD/oj5DZOQJ8xTJ4KddOXSIGzpPZEXLKxO8TR5PfLqB8GZNb23fGE1oaQNfFUZKbMzLo0FZe61LqBA2+9AwPpoLwdt2MsRB8zCgfXLo0DQxh4cUYbVAfboketZ8QAbA/o6CAxfP50rsg4U3HZdYbmzpuCVQBAKKN7A4ysZ1mBYZ6zTJMFIi9clmvymehXFOrl4eUD84np8s9MN5yZh6Rk1LaFxHyZvx5a35fl0WOKRE1VF1IzLkO+KEFLOcRm2lDhQMPDHBkdRoFOvbAxohfiBBgKH1sY0MUHQV7wOUOiQdFPhvT1EZhb1/G30RhAmO+H1jg4ytUB1fDSrOByN1iBDTIUN9c5+Ews7+tFMfM7aFkAKZcw6sN3NRAMdin/FZgELAoF+ov14kQZhQRfQv8Tsty4W5S7jvz2Ko0YpGsjTYQRZDsDq49of7GMG0n6QTcqawJKw0WzJA7aXKIFSoxGwxI93TdCQMo9IpJoIpgfzdHFnIAcz4VReK9PDHCUj1maVpkWEU6NUOunuMSuQU6mgl/SZGfQlMgvMIE9I+SupLUVC92FCE+kS6tB4J2clPCmODU4O2uQ7xr8CeQ28IWR09jmqdLDxA0fHYiIvRhB2DMefUtmE+MiCDsk23HBAqoGlBKfZL7SU4GhSX6aEd5V95DYNOjxwnnoQGQcE5bt6hd02LDHVjjislgyPgDVmCxApWR9iYK+2A2J0xhIN5GTIKIy7YPkh5JTbolcHbV74MJeBlIa0D8SuUxjEd0wNN3uH8NnlACgCipwNKiAZhNS5EiG1kqMoJ8z9VPjoDcbDQZ0OKO2HvT/4ouDAKq2YqOIkbe5in8XcGlIDMDW+YIhlGoCsgedfMaOmR8K6tDpojMz8zUYqYUKIMJ4O2VSXusSgWpCMADYdpT+JB6BJJ9xE1V0BFIDdye8DEcSnwwIYb6XBHSaeUAjKSGm/aRp2V+MkyqO96uaJgalDQjU4SwfXI9dCoJ4Gqv9jY9ocZEa2NITm1zdFt2mSYpGbqP7UCISBAE2RRkHSWS56wVkqKnFo/5cCo5YrUliIU9efqjmoc1N7QXdubAYPaWMfejhyOZfDl2u5XRGcfAG/o/bEM7sk6Qq7H2ZkJ9szvwu5ds9g1N4tdszOYnUwwOzPBaCwYjwJGYWNjE+ubm1hb38Dq6jrura1j6d4KFpdWsLG5GfVp6VfUc6k89PRpoOPgIqEdbEGjO/NWaMC0H9ZHGl8CNNNv/Wa0s018lWWYlIryMUWR+uyDBCQNTqGVzUkqNzRBNgWExyWpPdlO76ivsD87j2ZmMejYXMAcgJSl69zCfamm9Cg7O0vlzZ0J/pRfRXDlpXfmiAZHRLBv724cP7wfxw/tx9GD+3Dy6EGcPn4Yxw/tx7FD+3Fo317sX9iN/Xt3Y25mBrMzY0qdgOWVNSzdW8Htu8u4fmsRV27ewYXLN/D8S1dw8coNvHT1Ji5cuY5rNxexubkJc9IG6LCTmj7JgS2iV7KCoAIAACAASURBVB2oYal90bE7T4fpOx/lsYd1qo34imUPMxOvkZd/4zLsfdeHLbiQL8IP70kz7cvOHRA6NTC8TOhRyEj1d6c/RliiQ5PgZirauhKjtixsYQsRaTTKhZDAaK/ao3K6PRoJzp48gtc/cgaPnT2Bhx44jjPHD+P08UM4eeQg9u2ZDwPJ+zosp17haAj9LgW4fnsRL7x8Fc9duIKnnr+IJ595AX/8xWdx685dOOAwaKVPICrS9JH0m9tU2iGlS2qygc3loH45umhGwOVfBRlk4V0fpiBAiGn0C6UN6TGMYLcaUeC5PN8zhKUb7rbGYzA0oK/MjO5wdGo5I3kjNBqG28EZaFAyz+at3Lj7MR6P8ODJI/j6r3kcb3/Do3j07AmcPnYYxw7tw+5dc1V1ET25fxN1B0cZai8iWLq3ipev3sTT51/G7/3pl/Cbn/gczl28Qipgvesw96zYPxuo47UJGJDGK9VseESjfm7t9A3h/w3JIAvv+nBx4s5yvrhZZIGDUGJLo4b06wywuKOqeqhjsvEmYGOgMrqwg7RCzsA48qrU/PwcvvUdb8Jf+cY344nHH8Th/QvYv3c3ZibjQUPOBs9XdoTtIsVQm61ScHtxGecvXcNv/OFn8bO/9nG8ePl6xZN6CM5S4ipUAoy88hbycdYPkCJB/g4Dku4OWViKEHG+Z0qzMSvW5v9fGWqEiA9ihGO2wYu6zpv2QxHO+gopUk1VdAWK65NDo3q9T40d4XT1Slj5QcjOsz31YqUysYwAKVKxtshhxqMR5nfN4uEHjuM73/u1+ND734ljB/djZjLGaCRxIAau7VKkncq0vNVP6/fG5iZeunoTP/l//w5+9tc/jpt3lrC1teUyqYY5MrPOSA0Y1GWqn0Gr9YlS3+aSaIbyRr9AGq+/fBlsDmHi0LyhKLWC6DCcf3VuHUBB7+mAhs2PAaMxupw7Bp5SYBwwulC34bWGVA0gag9swczMBKePH8YTjz2ID37z1+Pf+trXYd+e3YP9b5WC5XurWF5Zw73VNayur2N9fQPrG5vY3Nqq41gwGo0wHo0wOzPB3OwM5udmsXd+Drvn52y1qSVnC8CGHEivT3z+K/iHP/UR/OmXn8Pi0r0eLQMVS1EKJCILoW9SbQI+vhmzhTgm8WgPT3xbGYWCWD+P+MuUQRbe+WENSKFG6LKUupFRzYkDB/OqdTHUKRHP34fK0PiO9r0mOmcmGBG0Ye67tpuZmeDRMyfwjq95HP/Ov/02fN0bHsP83GzPIDc2t3D99iIuXbuFKzdu4/L123j+pat46eoNvHz9Fq7fWsStxSXcuXsPK2vr2CrdxuRcdYQDC3tw7NB+nDh8AK86dRSvOnUUZ44fxgPHD+HBk0dDnzmNGrpa6dWl67fwz3/5d/BL//qTOH/pGspWhTx7e51RjspS8Kv3THNCOuf0Q42jVOMWpjk0NH1Dh1umy2vOwznEX54MXcrkHLgXVqE8ykUUyBGj8SI6kiudVcrGTLQH07eck21ztRyxE0uRIwKNTqK0zWQ8wmNnT+J9b38j3vf2N+IdX/M45mZnOlXWwdjcKjh38TK+8Mx5PPPiJTz74iWcu3gFL16+jsvXb2Nza6sOqLj6ydHDipnyaf2PceroATx65iSeePxBvPV1D+Mtr3kYp44dhCA6wk6rVXnecmfpHn7zDz+Hf/ZLv4Unnz6Pjc1NbDfPy7qJem4vYoTFjWTn3c+G8de+JBuSB+qQ6TCImpb/EmToJtWJ78yurdX2cva2UnwuFFFqO0QLMvLEqVWhWZAhvk28Nf9hMiePHsR3v+/r8a3vfBPe+NhZWyYFgK2tgpev3cQffu4pfPILz+Arz7+E51+6iis3bmNtfQNu3cLCpDSsfrMBasjg4Rbj0Rinjx/C6x4+jfe+7Q34wLvfgpNHD/UcY7srg8zq+gb++IvP4L/957+MP/7in3fzCqAPSjx+5lhWUMXNluogGRxf0yC1tpbNAGbk0QBLpVU31uj1kwTzfyky0KS6VjBeQtyAu0M1dAFjH9WtocvCGjOfoEIVELSZlBK9D70osZ0ftICoNyBdpZEI/uo3vR1/44Pvw+MPnsL+vbut6dZWwWeeOodf/b1P49kXL2EyGWN+bhazMzNY2D2HmZkJNje3sLh8D9duLuLFy9fwzPlLWFpejaGoxWwzYvbLRiLYv7Abj589iR/4zvfiQ+9/Z5jIA20HGUqxNja38PQLL+GH/sFP4k+/9Fy7X/2itqF2YmKk1ZzGJDbMDXPUCJNgpHFNWYMSbNlEa5L8F5RBFt75fV13Tafrp0mWbljwYzQgL4crI55NYg9XZiUpp4E6Gk5b9bEDraDI2n+tOzszwRsfPYv//Pu/A+9+y2uxe34uoO+txSV8+dxFjEcjPPTAMczNTDAajcwYdUe2VHm3tgq2trawsrqOL527gI99+s/wrz/1JJ67eAX3VtY8lRLeRaUJp90D6dRlEAC75mbxTW9/I/7e3/wQHjx5BJPJuBephybeXAYAz128gu/9u/8TvnzuooFprBdMQG0IoGHs3SNVN8A70WzxqcPPu9+ASNxLslSJMpJWuv1KZLCUycg3vI/2ru2bSh3cIgFFW2BULVUCNFnvXQyozTmE9g7oHzgcCAm98pnJGA+fPo7v+eZ34Ps/8B4cO7Q/IO2wctvLniyv0tBrdW0dn3ryafzMr/8+PvH5r+DStVudYzSvFC0BhOU7uh49cwI/8gPfiW9955vCDjj3v90ycKmT1s98+Rz+03/4k/jScxeo36jP3jywkSol7uOEWwZ4sQaZULJikXbV1oQx2Ncrk2E8d/aJH+tuCd3XyQ1beOeNlgeKE9FORGJ7neToPN2VUw07CBKVUZSuFuv3hlY6e5EgvIfLyijB1aEDC/j2b3wLfvQHvgsffN/XY+/uXY72acBaZVreQlytz/fGoxEePHUU3/7ut+LR0yewvLKKa7cWcW91NcqeE2nOvZMMgODGnbv49Jeeg4jg0TMnsXvXbBiPIV6VX/199OACjh7ch888dQ637y4bDx7FdOxKHA8ethAFKmwGJFe+ksNXsOOIyRmCITjfB0fRWD/y9cplMIfo2rulK/2eoREdpSK1vjuP/nYmwiD1jIlWAKpQjCw8iDDFMj30eHShI9Ovf+QM/ta/9234oQ99C1770OlgwEo7G8/a+gaWllewvLKGra2Cydg34vjiti0nGo1GeOTMCXz9Gx/Dnvk5vHjpOm4tLpsxdYsIrJPSBwX9rIh7d3kFf/bsi9jc2sIbHj2D+bnZZqTIcvHneDzGyaMHsbq+ji88cx6ra+s07Ix89Z9WxNFqbJSA20ArfaAUyCe2DgpFCJihZbU+20Y2bOLplcoge9/1YTrl7KFZiu49sAN5wpSdWZsbhTpgzhDcwNsZgNfJ93JG1cqwBrIuvTe/axZ/5RvejO//wHvwDW96DcZj3/jiiefa+gaeu3gFT527iOcuXsFLV2/g5p0lrK6vo2wVTCZj7J3fhRNHDuB1D5/G217/KM6eONx0qtal9xaX7uGjn3oS//1PfwRfeeElbG01ji6wXKQXB0q/eWj/An7wg+/Df/Z9H8DMZNzjY2gjj/l67sJl/J1/8vP46Cef9JQu9NtaJOEUBcjGYbOAEElq9CuAsIBiHXkDjSCmGonGF/gB4goU2d19yjDpjLjUkAR/BqAnaxTcwSoyn49V8CDElIeYM8H7/TgRroOe0uywRzim3dU5fmQ//sa/+z78tW95J04dPYTRKKJmKQVfPncRv/WJz+H3P/sULl65gTtL97C4vIJ7K6vY2NwKChYRzM/NYP/e3Thx5CDe/ZbX4nu/7Rvw6ledMnbz+j+XAcC+vbvx7e9+K/btmcff/kc/hYuXb9DgkLwWqt0INHr62Auu317ET/zSR/HQA8fwofe/c7DfIScBgAdPHcWHv/09+LNnL+D8pWuuR+WKkY9Qmz/8e7UpHj7L+CSIpjJA55jqLNq3RhDEVE/nrTDeiqeYIRLdvww+qQ4cgwinAaKzSCkyordEHATevj77Qet3ITQISqbvaixaPh6N8IZHTuO//I/+Kt7zta/H3Iw/D7WxuYVbi0v4vT/9Ev63f/X7+PzTL+Du8gpW1zfMQLbLu0Eyzc5McOb4Yfwn3/Mt+J73v2PwiHc3HtEIN7e28Nt/9AV879/9J1hbX6/jMiCk8mAIFysUAU4fO4Rf+Ad/G088/uC2c4fWZ6eXTfwX/+PP4Wd+7eNY29iMOg1RQNmrWYOBXFcqPQHiOSU7hZGE7D0SUO/nyTk48hi9hORQgL9/GWwOYcXqupa7SuycvFeXZbsJc2RSEjM0JAE5OGJp1CxUbnTEnpOq9+MhsI5lH+Ddu2bxgfe8Ff/07/x1vOW1D2My7k6grq6t49kXL+MXfvMP8KM//vP4F7/yuzh38QqWV9a6J9BQHMFMc9oHo7Ub9+bWFm7eXsLvfvqLWFlbxxOPP4g9837sO0/YGaFHoxEeOX0cm1ub3SaZOQ8hSAA1RULiSXVeCpbureL5l6/im77uDdi9a645z8m/ed4zrvz8qz/4LG4tLpsOGEwLj7fEHWAR7oO92eeV5jBSgTfJECIlCCDMJ6TSgNkkPyUH4cUIvCIZfJVJFH39OIHlqVVZ3bJsDLeBYUY2gYW53sTQ0D9utaty8nqzIYSoYApHLKAP6qmjB/G93/aN+Ps//O/jyMF9ALq5wVdeeAkf+b1P47/+iV/EL/32p3D91iKFKphCu76IuD1qV+tayIavdADYKgV/+qXnMDs7wdvf+BjGo1ETpbP+AOCxsyfx2aeexwsvX4sRwRyfQ25d7zPU8M8tFNy6s4y9e3bhra99uDf5z6thmZdSCg4fWMDl67fxqSefqRYe01MIz3dSCFPNkJGXSoMNO+g6yWDpr9ldxAZzCrbwBB5qL8bnfcoQIoS/EsVRnNE9e5p1KpJWikrfeBGI1FSJFaS8SRVXqJwhKAumX7v+X/vQA/hbf+3b8B9/9/sNpV++dgu/8rt/gh//hd/Az/76x3Hp+q3EDynUcj6JitTbKme9L2mkCgq+8Mx5vPHRB/HomROmpyGnUAPdNTeD3bvm8PHPfBkrK2vQKG1zMhFyClqWzqNTBCtr67i3soY3v+YhHD+8f9t+W1GrlIIHjh/G//HRT2B1dc3pk65rQk56IzbC6xXdjmpHrnMbyr4MsT+OGrwiFfkyPrRqKLw/GcazZ574MdeXe6kwKbZBNpYwyJyTspB6mweRBiN0EB0kC8cPAZlDVdqj8Qhve/2j+JH/4Dvxgfe8FXt378LG5ib+4HNfwT/+uV/Hz/767+NLz13A5qZuiFlCGs9MBcCIkSPPw+y5c/1eeVtb38DVW3fw/nd8DfbM72ou6ea5xWg0wt7du/Dsi5fwlRdeMn1pNOhFiGTk2bZuLS7jxJH9ePNrHsIM7WSHyD4QtUQEC7vn8fmnX8BTz79kwBdiAUf9CgQRkf2TT0KDnTibCMtA/YVnJMQNuAjZn84j2LeYzn3KMJ4788SPcZixNWFowqMUnFQ3Ln4swxzIBhru0RVRCw8Gh8LAGFmc5SN+3x0oDuZ4PMa73vQa/L2/+SG884lXY37XHNbWN/Dj//tv4B/99K/ij77w51hc7p4BiMck9DPvk+jg+X3jMa83G4YQPQB3l1fwyOkTeP0jZzB0ZYPcM78LtxaX8AefewrrG5vdWFg/bkThbA/xyyt2axsbEABve90jOHpwXz9SN/jgaDESwWQyxq987NM2HgE0tNBSOG0v4CgQeXV9mS63kUEIBHryAnGCrPXIwGHzWhqnHWQYuYeQIWpHpf4oXSN7UxocnS2lqgauxiHKCssQwlgEiELG5AqSVEvZdF5FBO/92tfjn/7of4i3vu5hzEzGOHfxCv76f/MT+B/+5a/i2QuX62QZxm9mIEwCTcleVmwUOTfWsoRKVV83F5fw23/8JDY2Nl1PZHit/H1mMsYTjz+I17zqFIoNRN+QQ5rGMoiOV1f2J196Fl+sm3YAkFe7hvjQ8jc+9iBe//Dp2Fd1SN8DIH0ofYoC5iQ8lCzSdjIYb9Q3G5ECRTU8yXRzJLoPGbrdKeqjgDbkROz1KzaprQwURnBzktpex5Jva1gtyowOkHlfbeOfKrwvgypqdD92zc3gO979Vvzc3/9hPHjyKO6trOEjH/s0PvQj/xi/+rFPY/neGsmWFElXVE5kqUKVjkYiRUZAI1FEsLm5hecuXMFzFy83c3aWiw3zsbMn8dqHTlekSvw0ZXAdaYqlBrC0vILf/8xTuHnnblhezZty/Ju/H9q3B9/wltdAB9PtncBCUdB4SuNZ1eSpcd/gt5PB9evgU8wAsy6inkr45/5kmACIa7jEiwrjWxGFwlREb8tRMwFKR3wZTMOgp02dQxMi2hvVuF3XbynAvj3z+K73fh3+qx/8IObnZnHlxm38/G/8If6X/+u3cfHqDeN9POqOJkzG3eOak/EY4/GoLsN2uXu33NgtgWo/o9Goe/HtwFXQPSnH8uvjoVtbW9jcKhiPRrh8/TYeO3sy1At0Urp2YGEPHjlzArvn57B0T8866QA0+BHSjemumFF96ovP4Pqtuzi8f6Fp+EPzChHB3vldePOrH8LMZIL1jQ0aLR8HUSQ2oIJH99bR9/BiJq2/vQyhndlFcWMPqRrJYt1XMJOyowyTYny62ZX6r62oaDoEn0DGJyFooAw0+4jo3qoi6e6yKyWTnZ1MsGtuBrvmZrF71yzm52axZ34O73zi1fjBD34zjh3ch43NLZx76Squ3LyNb3r7GzA7M8FkPMbszAQzkzFmZ2YwOzPB7GSM2dlJfVPeDEYjsTdkTMYjTCZjzTgxmYx7b9Hja6tOnu33VsH65ga2tgo2N7ewvrGJPfNzOHPiSGiXI0SeXAPAQ6eO4uC+vVhaXonoVyNj0+BCPVfgsy9ewsUrN/DY2ZO2Q5+voZO94/HIHmd97uIVQ0YDsVb/wSR4nlj/oWHubHlnGQBa+HCD4Y5C8HR6zKz2v70Mky73klCpJGq9yAdaK2YlBFmkn03UupPxCAt75nFg7x7s2zuP/Xt3Y2FP97lvzzz27ZnH3t27sGd+zl73ODc7g12z7hgPnjyKIwcW0G1uCV7zqlN4/MPfgcl4hJnJGOPxuHmmJ//mlZ+h3duh7zu1B/pG3/qdaZ062r3QLM5X4AgYUBgIA6RXrbu+voEnnzmPb3jzazAj48DXTvoQERw5sICHTx/HcxevOGhrBlnISFPKqRhnLKUjDMb2fciAQk5F9VwGW96h/rq2eYVrJxnCu125P95BbPHrIlGgK4CMBAu7d+HowX04dmgfjh06gOOH9uHoof04dnAfjhxYwMKe+e6dprMzmJvp3ms6OzOpr3Lsvs/MjDEzHlsas90xivFohAMLezB0DR20Yzr3m1e3aA0ZfMv4duJHRHDk4D7bQ2nyjLih6WkDaEgU5ASfe/p5bGxuYnam9yrfkCJlOUUEBxb24Mzxw1o5ZiqBExobA0vSQwDNjsmYZWwvg4T9IOWZ+xX2t65cv+f5xjYymIaMUK0UcjGdfUvX7cxkjGOH9uPsySM4c/wwzhw/3IXWE0dw/PB+7J3fFXL1yXhk38fjLjffbhmwtYmVr53u57o7bYy9EuTfbud5J4dp8Z7bHNi7G7tmZ2LIFgdTJwRHYwBsX/4cQcFTz18M850hPlrLrwcW9uDsySOYjEfY2ip2HCd1FxjrltSLPwNjgsL3j1KavJMMMWPRJf8IC6kTZoj4gftVrirARFOODqkdoXfNzuDgwh686oGjeNWp43jo1FGcPXkED548ipNHDmB2ZrJjemDKafweyltNrFSWDa6F6kOhP/++n4gx9LvVT67XcpydUjFuNzc7g8lkHEMz3JACbUF6ETN8wGvRs+cvY70eWmxFhBa46L3JeITv//b34G2vfwTnLl7F8y9dxbMXLuH8pWu4dWepeyv5+gbW1jewsraONe2ndq5THmXGncF5vR8ZisntfuTpkf8IizrUj0WpMC+gtL/Wn7z3a1+PwwcWcPrYITxw7BBOHz+M08cP48yJwzi0b29zgIcMaicDZlpDAzB0DQ3ekLFu53D3K8PQvfuJYENXlqNlmDOTMcZSJ/T1nJUvcCQ+C1kD2Dbc2lbW1nDt1iIOH1gIfOwEQnodObgP7z74Onzjm11nW6Xg9t1lXLxyAy9euo4XL1/H8xev4MKV67h5ZwmLy/ewuLSCxaV7uL20jJXV9ZiGsCnehwy9NKtQWp9DS/3p8QT0ehvNl2DpE+VWmPzLv/dD3RsmtjFgWPv2IO5kfFw+ZEhDqy9D9bcb0KE5wU5OkXloyTfE63ZX5qulKy7b2NzqTr3aDDClSiHWx5vOSuT38o3bvec1WjLsFN31Govg0L69OLRvL97wyBmru7VVcGtxCZeu38Kla7fw8rWb3buqbtzGtZuLuHbrDq7dWsSVG3dwa3HJeb0PGcJNjTYmg6dDfTpULgQuWk4OMhlyhmzA2Ui3SxWyoltovNPKzv2kTPy7xfeQwfHvITocaTLPuT7T2e7aLr1kvtbWN7rddYsC6AGqcOznJVjli8cBwG0zvj4/2+k51891sq7HY8HhAws4tH+vHVsppWB1bR3Xb9/F9VuLuH57EVdvLnbOcuk6Xrx8DRcud1Hm9t17KOk9UaYCRf0QZDr5exHT6qR5Rj6EahGo+02T6riTOZT7Dxla/p7bDA3CTpEgXztFnJ2Q/H6ixJCxb5d3D0XS3H/upyX30soq1jf0xWce6v1JM4I10wenVH2ad5b8LFfms+Xo243vTo6Uo7RINy964NghnDp60O5tbG7hztIy7ty91z2huHQPL1+7iaeefwlPnbuIr7zwEs6/fA0ra+uqxdq2ZjthbtAV6n7FUHbmtl9Ijx59zCGyIQylLa9kPrFT6tNCmFZakem26AwNTL7WNzaxurqOLRSs1ZcQbxVgeWWVHs6J1+bmFpZXVu0FZXyNRLB71xzinpdgftcsxqPuZQRzsxOMR6NtUVd5L6VLOe6trvOow/JnLrMg4cuc/gwwrK6ge0IwZwCtyf0QKA6loUPtW/1wO5FuM/Tw/oWwi765tYWVtXWsrq5jZW0dtxeX8PT5S3jymRfwmS8/h89+5XncvH3X9VGq3CSrRQX2HNJHbVGZqf/UexNmcMgpwlDvEAVy9FCF6Juvu2MNW9jcLPZ9a6vQvYLNzU0srazi7vIKFpdXcHf5Hu4ur2Dp3hqWV1Zwt74BY3llFYtLK1heXcPK6hpW19a7z/UN3Ftdw8raOlZWut8ra+sum2UXldeMIr3ftLTBk7lUv0mP2s7vmsVkNMbs7BhzM91G4/zcbPcsxPwc5ma6TcfFpXv2x05aaI8ez5w4138KgkHkB4XuN7L+Rept157LWvUm4zH2zncvcgCAB44dwuseOYPveu/bAHSAdv7SVXzmy+fwmafO4bNPncOFyzewvLJqY94d8c/gwU6Zogrtm0xaqZFeGUXyvdW1dayub/jn6jpW17ult7X1DaxtbGJtfR13l1dwa3EZt+8u487dZQuPd5bv4e6SGz1/bm2RAMq45s4BHXv6jsbYMW88c4g1JwbiI4hu4XD06crtfUC1mr331vLY6E0FWr/g3spaJ8Ny7MYndeg7F8d/Bh8ba9YNqQwsn+DQ/r1h7IZSvu0i8P2mta1rp1Rzp371+8xkjEdOn8DDDxzHd3/zOwAAl67dwpPPvIAvPHMeXzp3ERcuX8eNO3dx4/Zd3LyzhI3NzToOPMaw77bJzCkTMwDA0Hfp3gru3lvB0vIqFu+tVKRexfK9FdxZ6nK/29XIby8u1+W2zqiXlleweG8Fm5tbPmBsc8aYl9mkyX5zxAG6P3hIdbINBroRxYUJ50STjVnrJf+wolq31MHqoXX4Y45RyDDuLd4tndWIFKMTy6CH7F1ZtW9dfyE8OFLTEga2oblgjvhL91bx9PmXsbK6hoXd81jYM4+F3buwZ/cuzG2zHzVEL/c31G4oTcsynDhyACeOHMD73/EENje3cPXWHTz74mU88+LLePr5l3H+Ujdpv3DlBq7fWrTXiZpy1OhKweSzT53D9epJN+/cxc3FJdxedBS/W52gS1/umUOsrK13qwFZmIH0w+zNxq4OaEn12AgEvmFDuZ6kNi1lRi0C8SQtaqiMWB6QGoD9DTuzs2TN4s3cv1iQyhchUFz37vjKewymAlCfLRlQ+uCgOk3R7uihfT3D3W7Sz2WXrt/C//x/fhRfevYCFupZM3WKfXt248C+PTi4sAeH9u/FwYU9OLCwBwf3dZ+75+fCqeGhifzQ2LXmotvJMB6PcOLwARw/tB/vetOrsbm5hSs3buPFuor1wstX8ecvXsKXn7uIZy9c7pZ+TX+CyQ//d//C/tLNvfqp+TYPtCNkh0T6+J7eMsbyoLKP5IHrlZkaYsoAOOrGao6CLW2qEYUUq58aSeYF0ab8KIsbrw0OSq0X4d6QjOmaw0lMA82xHFQiiwMymLMR6706wMzMGPvTXzxqrSYNIfTS8gqev3gVTz79gvdUnXMyHmHXXHcKeb6eRub/9y/sxqmjB3HqyEGcOHIAJ+3zQO8PUjJvOaLcT5rXkmE8HlkE+bo3PIq19Q3cvHMXV27cweUbt/HM+ZdtLvLshcuYPPn0+QoqES+FJhqsbQ/UA2icr6YhDhhwrd+etLJzUH1Btt50T9Rja5nE+4AjLzt+M5WRHhk6t+nshkFRRJfEm2rX+ZZ+h7FtUwaNSBkwvO6pIwftDeHefXsPpHUtr3ZAaWouzuL6xiY2Nldwd2nF+SHHH4lgRg9wTsbd90l3LP/owX148NRRnD1+GKdPHMHZekLiwZNH7WhQyzH+IjJo+cxkjOOHD+DYof14A87gG978GnzP+9+BpXuruHTtFiaWtRRf1iuaUpQSUmyzaRo3ixfxjQAAIABJREFU71+Nygv9XU3dZy9MQvrGT8yHteLmKwp3+E5lsW8dWDVSlbm7achPRmVSGkk3ZJ/z9j02/LkAVh3pUtMj1UXvD8WYWFkGvYEAGGYcteDxV53CZNx/tqO1qtjSv6bJlhGwzhKPqGOKKsNWKd0S6upaL+159sJl/NEXnrG6CgqTyRhnTxzBI6eP49EzJ/Dw6eN49MxxPHjyKHbNzWCmOpR+smxDMgztr8zNTDA3sxeH9y/gzPHDvA/hw6UpgaOYvu5ePCcWGuyA0LTioYxIiio0mPkYeXA2TT9UYSW+/a0fDkwYqstpkW9u6byaJ54aJ01hltZ4WtRLZdBfXRKbF7B+SvdG9KpPm2/xokFI/2pqWus3ZTD+NToUVyPx/+jZE/aOqE6N2+8xuRq7OjcXl2xjzzfElUYfkX2cq/6IH6kIIDRG2NLHhQXAFja3NvH0Cy/hmfMvB3DTP3559sSR7v962vqBY4ewsHsX9u7unqNZ2L3L5i7ZCXu8JmeZqFYLGaYasw1HUlJPeRzdG5Mlcy6ztr4K2dFyHX43kRmxstukh16EsJSHw1pehrNopmmImGN2/HF/Ka3hUFHUiI35Ss9cpt9ceTbStX6cwPVkCBFWn39nLy8Fr37wFMbj+Cqa7XLzXH7j9l3cvrvkPChYBVBh4ycZlB8FsBBd718GQLC+sYnnLlzBuQuXHagAzM7O4NSRg3jgeHc49czxwzh19CCOHNiHowcXcGj/Ag7v34uD+/ZgZuILq61oUh8hFe8X1WvTpI/MJCC8DyAqAlBZVjIQF0oyUhWvFCavEIQcnD8ZsVqeoQZV+cvOwOgfUyyE9NBQO0dEUq5oH50lxzQP6PUddAJSNB3ayc+79+ZiQn1TlFaNz++aw+MPntw2rWhdOi4ra+u4dvMOVtc2+ilzYMdcnXQKFNPBMA7tJEPIOtCvs7a+gedfvornX75qdMajMQ7u24Pjhw/4w2oH9+P4kf04deQQTh/vjpEcP3QAc7MTk3li3kwdSOjUPwoLY4ZIvGsYNAOXlB5FZfqKSuxLHdTuFQRn6oFrdlCl0vqbTyxrcEgtQ7U976WHotUwLZ6K85nCSCMKKaBWtA7zGO3H+Q7LvT0ZAjsIY1kN6aEHjuHYwf1RL9I/umGt0qT17vIKrty8XfvhQdcP5c15YmDK0QJZl1GlTRkskS1qh93SewAp00X3ZWNzE9dudidrVW+j0Qi75+ewf+9uHFjYg/17d+PIgQWcPXkEj545gUdPH69HN2wuQGGPeLI0kW+kCvZ8h6ZalvoV30vQ6lVAdbyewRUKoyyvAi2ykXaV2oZbP4lWnuOE+QKK/ZGOkMax7HWAt412zAN8sAvUAIs7otJj5wwRYhsZQiqm95yH1z18Gvv2ztvYMK/6PadSnFLdubuMl6/dAlmJzeNEFBTY6RNiAvwn/XrgYExvI4MEA9CU3pSCuACCIGv9AaBgq2xhcanbU7tw5UaVoXs4TpeM4zPV2RmQjc64rUZCp1YDotZ0B2nFhgzaBpel0ElWcoYeyjIyVT7CODDZzL6RJDQ2unEeI6Ts3nPMmuYY+qV7WqQ71tQHavRsmga16e3FJBkUrNwx1WDqmIjgTa9+VXjeRctb3/U3G+O124v1XJXza9mgHaWmsbRI4M7cS69NgJ1lcAQA+I9RMr2wqNGjp/XiONgq9VaXFq6sreNmWcKIw154k0bgGjUXFEsVAvRph6XUkJiE5xDISjOBnI4oP6VUbWkOqf3U8nqv1N/FQlm9Vw0qDgClAyA0Np7Y+Ao8/LszGB/VEGIGlp2mgP4IQmBD38xnLBYVraYIhbQ/IEP3J6cQh8LsouDE4f143cOneyd0+eLUKciH7tU6V2/ewYXL16uhueydVorx7gAAu6O+oiXGG/3NkZ1kIHRKWy26vFtl6NVzeyk6DvchQ91VVxOnQWclATaw+pC4MmNOot8buaLPEYQEd8P1e0KoLoGegTD3UcO8fap35TlLQq+Od17ZoI+MdMYLyUQ278unhFSEdIaeJqeSc7nMF2s7IT2UbWSIcyR40K2g8vpHzuDsiSPB6PkzO0JO91bX1vDn5y9heWUt8FwbOI6Tgau+LA1Vsya9iYKnYEcZHAi7fhyvGHw8TbdxKWruyrfclwyjbgGDI4GPmr2WEoCuiXsa43Qtn/bKwTGYuKK2GnKeKJozEt8qtAeGiLqwNmmtWX8T6quCmNXCfLJsJX3PUQIl0kcXS7r77DgUzYo6COuF+lGnKj6UQzJwxDBIq2M/Ho3w+kfO4IFjB3tzB54zdF1K7zcA3L23iiefOe86rvKajYS3DSONmY5H3jOpsguB6oAMzIuNS0nlqjLWN4GqgeJ9yjBSm+zstASCYvHHOQlKC06hCqgEegPcFzbMNANbEo3EtFWIL1eQKrK1ps65KAGYGwlo0w1sfL3OrUOPqr5ZFmTIjlkVapNpLSM8UHWYM9HNIRmCxsRrlFJw7NB+vPGxs9i9a8544bEbWnplvheX7+GzT51ToaCbs6IvJO4hI+tL+wqwHe8FC+7LwEBFOG1dsBshfDd0DWB/PzKMNH2IhsaRwRGkQ6fIhpNyoQhM/R55LTNoTQWInVJZL73Sf4oZd3/+k5XkCMhRSRIPbiDMs94X+BvJGaEdnXQ+FBYjWBbhMSKAqOXRzolGSwYCKuekq/PomeN486tfZfc4Slj9bdKnrVJw7sIVPP/yVWjEEusXidHsFGbZSYZk0UpvQAZWgdC/+pXLSt/oEhjfnwwj3fSye+YAyl004LhrG3M65UztpKdwZYQHgCa+xYRoISz7ixpDXU9H6Rl7aJ+912RTfTkDOvkrlrbQmJXSTcqonoV+7iOMuVhbcyiWQ+tlmxr6TTJYpAECIMzNTPDE4w/ikdPHuxoS9x2Gdqf52trcwv/zx1+sf0qg81Y7cSDxyEaMcmzcpV0HBXa0fkAGjRLBFgqXw8a+k5H74zZSJ9L3J8Oo71geHYrob2ebJzMhVqTQUNKIsjN2dkSQKkQ3h/JqcGZnGkprOxFaopN68KJQtAiwS3k8Iz9ttNhGm8lEBwy1L6nRlK0z0dNVJCsLwOK89TKkHDW3kcEnri5DQcGBfXvwxOOvsjebuyo8wuT9hlxvZX0dv/XJz9NUJxp3S5zed5FoBZwCivPQkkGjhPPmNhjmPgE8HRQ1awDwimRovA9ald8NqJhnwTw2CFzHXcObejCnWb77KrVuRHNLXSoRS8tq9GDlQLIh8P/Urw52I5e39EXbG7k+X4Y2lfcQDXj+o11pWsS5USGabCKFNuGgEV5hhhxqQAaPqDwsgl2zMzha/9jk0NWaO7CTfOXcS/jzF18OVuOGmHRkTgYDJaXpsrFTe9mQDA2O3cisM71D9etYFbWzBEY7yWB/MIUn1DpGPJnjXNcGw8KPh0pbPXIOXEadsErrnt9XRDD5ya5cERLpsQ6rI/TSAmOthL6lkHzGlxhdtmveuOtM1vkUU35yRFdjdCKw/ORo2k/LMEiGgMYqcyXFfzUor8pxCtU8RiGCj/zen0Q/DIMARCOOiY+rUdwUeqkI7VU0ZGhdeQUxsGagLL3br0SGkZWXdAISDrxxvZfpO1KHkEsiY6B+MAAzbPZ0CQ5QkhCc92uY8s0Zdkrqk1Mc66c4X3n+QXOVbqC8vKA6EvHgrGj/VYNFzSTqI8ggAgjJEAx5exks1aqGvryyiguXrweDbx3VyJc6yp2le/joJ58kXfAYlF676Nhtc+63kmBNWYZ+OzpuYv+ShTVwKGQa9ynDKDqdo5c1LLRuS/870LJxpb7UUFoCcghlCNbONVJomiWRv4jilIsTHVeEuG2bWG5YXa3YOGaHHj2JYp0fOw+O6dkRAAnL0nVWZOlF1bOlQsXlM3p9GfhytQhuLS7js1953l883EgZWt9VJ3/4uadw8coNQ3WXAT5WKkO+xO+GYjLY3j5SQwaOOmHH2r51+jENWpVC9eQVy2DPf/v5cw11aoidUYqktImEN2nqvSAYTeRcWFQDSKMr8HydL4l1TAP0PcwrOBJWxzOHIhkrzHtwqgJ6qKdIo/dMhg7hnFXqm+ZMHRkfUO1HFxCcx1q3+KKFB7m2DNpvTs83NjfxR194Bn/wuafQsj1OmfLkenF5BT/9qx/r/mqr+jrLZ18jwvPVO8JiHaso+V5fBgYDyVEnoHzUFTuT9fkKZBgZmqoxJvTUfwutAESiXtUnwVSFo0PKAdWDC71tTm1fJ6i8fEaEGtGifrYmxMEoCGaF6CbZObQ627QCp/WtTuQvKj/zpewK0VKemE7sqykDUopRZXjq3EX81Ec+hqfPv2TzCb56x2oALC7dwz/7xd/CJ598uvtbEAQ6wbEkF3AGEE/SBq4TYDGWt2Swytl/xP4Z6EPi71cgw3ju7BM/1t2n80AV+UQiU+YenNL0+CRm4IOsyBqX2pQiRQXhk6USaRppUlKOEgES4pKpt1UZ6F79HlbG7N1KXl+q4/vEnzYFqV4XfMT4cLlMUTZgvCKl49T5Ox+xaMhg6gjZOHT179zFy7h+6y5OHD6AE4cPhEcqQeOxtVXw4uXr+Jlf+zh+6iO/i6s3F+l+jEw2NpR26DKzL4EXlMaL29xRLOjtKEOI9hGnK510ZF0i5r9SGcazZ77mx/pr1dy3H+y29WEVrpTGA/GBnY6eEfBjEkrRjJEQ0pboLO/mdiQQnEzPadjgA8oQErvlwVMdgwSiVT+qLIEXNQIy1vhXacjZrJ4DgsoaJsCge8RRTwaI69SONzt4bdVI8eVzF7C4dA+j0cj+Xp+I4O69FTx74TI++qnP43/95d/BL370E7h6azH0SaLqiBILOn7phLMIgVwETVUJO8p2MnTqKaCz5M6bDjnpN/wRxb+ADLLwrg97QsBGWb0cTKzhgUrYdwzj3TAlKOyd3ie5I8AGC/+Zy7O9Oy1xmNX6itq9VAvu1MWNLm8Y2Z+BSnriyNHRQd0EUjrMIzOK/n0g9k31WGCWwV72RlWHVpD2zM/h8bMncfLoQezdvQsjEaysruPyjdt49sIlXLlxp9emf20jA3xsG2xvQ/H+ZeiXF4sSodP/DzLI3nd+uKiXSB1U1DdGlAB12hrJ4xInNPi8fNsa5DD5MsPYRjI2Hq5nhtTx7nU9tjUjQsdE/MlDqjQkaa034jB0i/WobYg4mR929pL6ENdLkkEdQuc7OSVxMoXK+3W0Jt/PV8xWdrK+lNtoi+2caEpkGFlupWlHcYOgPUc73h2ioKKh/rQJTFemO5F9VIbdDzwJyFWJtADdiweKl1taBfhEzstMHvZeyzOJX7oHDcPMl0j8ZJGL0mT5WVYSoNemhE/7rsZRx8L7a8hQYH7CV4g6SrPq24/hlNAmIC031fo5khePlP25qZ9gsPZ+M2DAtMkw8omvHpKDDXLRmrpJVo2Ppedfzc0ejgAmfcmVTPpS0spwANtOk72d10Y603O0nObAfMD5FpWpVLm9n6T6rp7ZqCSbTyPCY2RdOWgoRZ9DSKg7JIMBSolyMbfS6y8QNB5baYeBQ3b02rxPsy9fhPmke2DqZBjxLrReBsRkKLb2zl6llWu4S1YDMy77qZBejUDblu6en4Hi5Vak3JEmm9oWzpMhSCmk26wMktl4pwHIiK4R0groJvGpfYRJWzXkjAHB2EkOu6cyWJ0hGTTi1YhjAKfNIkgVe0CJ+2s4oMneL7dzVsKVUkMCwG54lS9ptJkeGUZsEJwkOappaNF2FHREU4xangcZtggXmcroUBt4OJS+MwbQJXr9oARdzXHspTZkfeG4MDHnswodPKGoRo4Z2vltllezMgMP/nSJ4Gd6lQ5HnWEZQscqe/Rm78VSXpalYZyBZAk+b+lLzzG5OUeHsIAe09Te9dWXYeRnxfkWD5yGiwpQtLKRiTVkIwGDVPETMA/vpV0kt+bO2UEs3DZ5qM5BYbYAPqGvCgtTBNa19dWgX2K7JArUyTsHJxoc4fS3tHZ+yaMaMiRm0DcMbePR0wWjZrnPHg2B60iavbeb+zh7BNeigcjyVZZhZA+sFH3YBoij7J5qUSI7bzBOQuA8H9D7QgNdKqImA++jKDlWsX+cRc35M09UZkvDAHTDplRjj7vBjGaxr4D0pCc+qOe1SVEqbuCTz4glkChVfyZbX4augA2E+eFrCJGBlkeHVJNoOLj7KYPW5e3FPvI5OeHUaIpkGHnK45MSe7WistUwlmFeXSjJqFeYeYpKkuvAkbkVEUH3+Xcjj7TDd+A0TPpNaorCq1D+qXGTdqR77Hjfvoxod8mQpXv3VJXR9J9407+/YWnZgAz9yUk9n9TjcOjqt2+BMHcZVvu4ZYoCnnXwuDjie/n0yDDqA3E9xcnHFhCF5By+F/okO2U/n4uM0m8yRvfkUgMJG6pGssw59VfpSeXRAbh4XU4srZl7oL7KxCrxKww5eBAa5eClSO+beCpWmjAnvgy9tpEhCE6A1Vt14+jDbVmJQY4h2soPDRIvRgyUc8rUzJSmSIZRH+z0aAZ15GEkZkvFQ2F4loIdJYeuxHDmW5m3rEpXn8jTSpH4FpcqVLcCRsqx5ckqAuX84Z2p6njGAB/LVnqUd3LkEpATikVXIceMO9qdcxdqVitFvgzBhmXwts5PSaPfpSY0jmGyxGQUcDxy+x9q6WTyY+muBj8bSYsCzqzrhXL4/sR6emQYmYOQcbgxeJ+F7nX0S2SG0qSAZBziszNoWLRQSwZKUOu5XnRKdx4xJdxXmK20+6dMnV+jwxGnR7w4+oQFCHJKks9JSjLqjo+SdToIpwj6ccJVV4F4HqcGzYygzcsxW6uKeGkvPa5tnKw7gW7YlimUYWQHs2gC2f0U9+aS7EGSddSfnkrRKc2wkqRtiyPngMfb7jN5dukZJykqfzJaqYeR43j+LlE7pCyWU11TyztkUf4k6YT4VDpCO8wZxer9cO4/TnDaMqSXSLcdKJup81hCUTYV7TLS7J89S22SVca6hh4QpKM2UyLDyCaAhGoWtdWrq12bQwf6bipuk25kVp3bNKJFXCHKB9zo1CyovvZTFRnStJQLFnpE1pd2OsH07SIWqUhxhctKFD7jYWG+VGm1rPmcQP5kUGmBYJaBnN9eJbrttSOEwgBAuwkAwydw+238+1A/UlNaspYpk2Hkh+L8hqgRBEsmYyCn6qVHhraApjO9E7mZDzVgRszIpwkTbrBuOWRzNeMnnpnnpT6xRhLaSFVeId2oE0qgDQpWZPQilrPynxf2JUcKa9SnpU4ZNLIM9V7J/ISmTMRXu3rPtKkzcmBlfhpPrTUW1Y1YbyndWGg4/BTJMPLB6AtnL/yundFH/eFOwKsoXWrug2pr6dxLBhKOFDm8VAYcgVUa1l5sZ4oxhvt89jqngGPyAQYYPhBRJ+Gqssq2ilM3pHmDReS4gBDbJhn0HqWhyp8al+MJuWvpq98E1ZdahzRDAv+2QdpUAFwGSXQk6WMKZRjp5JiXVwv8vKt2K/U/fdS01MGueKhD2+vb1u7tVjXk4J1uhsW15cZS21jgaOSEdLPjtyrY5kDk9IUjmTmR9+yrSTFSeSxhmYLXeuWKhj6YfVm7moYgDQOjgW3JoHpJ9UX7MwNk+FWLK15U25q5FWpnLQaiQSvnb1atvAY1TZ8Mo0Lhmu+pA9dxJaE0lVD6tOWkS4QmLLsMG664ExYVg+rzfEJpVdpstqGNKcLr2nKfVa/OXVxn1jfDjdCufTEx3cs5pbPoxQ5Z6VOaVFjvjBxAGqZ+2aAMpIP4PfEY6jAd5bPEtnQ7PNuMHZ43UBwhWqEmp8VgutMjg0WIGF7IK9A9UdYZCB/m00+NHYnxEn92/JPVUUrTY01XXRKtojQkF6KBVKLg4yRKHqwSx8eBpy4jFopwDf3QIMRxrjOErCceRIoUEgioCsQdcxsZ+srrX1E1HImpr9C5ddQzSl15LLbMLNZHWrk2WmysDgzTKcNI/+Qup0w6kewMxjfqWnwra4yiKm+Qga2D6hjzbNQhIhWrFx80UufSB4eIweI0CURq18X7yqgf9eMRxin0v/NtUn4+PCbWJ0dJoZsS6Vk72UaGoCzXRY7oTJPz8HzFAauglG7yCqAxMXRUolMwPxseMMHITo8MI5vsMnBXBpSvYuV0GK3S7wZJHOXcfvu6oY6CcZtxZqOQpAmmp07AkYQjG9NmRxOqJ+keOUtuG8INaZ1lCJEqy0eOkHQReSR+cvssQy+0UIqoPGT1bYfG2yI1Oy+SQQ01vI/Op0yGkWJZv/9quGZjxFhGf/7FyMWD3HuegNux0NnbqNRWsTrjCs8dIJXB67mjMZ/Jbf11GgiC6rJrP1eMUSkpe7i/ThqnqW29fS8dHpLBFNO/WnPdXv/tW7X9tgR27OM+mnsfUyTDyHKtXkbgnuqhWqB/UcgdO4U3wF5UYHMPEQtzQ0YeURscluBHLPiVNAiRgXcTzJmFf+lddRzqmxkr4C2K+qFPfUGzgEQXJkNRGYJeOCrRfaNSXJdofbZl4J+hot7OixP5fhaiAPpXfuIDPdSwRSxfZaDcbqd7UyTDyGy6xNwtrrnX/9TwhDNkQi/O7UTHPjtCsf6sNqFlYcfQlIjyQDu3xDKaE6V0g/rxA2POo5FgpUt9eo11ojYYDLfYBqbzofG2epVFLD7Z2v3T26dQApbfOgAMyWBOJ6y3TgZzzPqdj9X4+LWBkN+20t9ENCEgZAeFv4S5l/atPbolCwPHlMgwKsoYI3fp0LeYkVUjpLxfghYQDCdczC8bgCElQruwEgX+SuWFfppOVdHqSPpViAePKODfgEU+fe5bakTU5xFC+0pc9zNURYVDS0CvtMMQutd1LBu9yqIbzaAMKndWeon9BTMIE1KKioUYsy7UuTMltgPlk7CWh88c3HvMupgmGUZ+uyJxPezn3ldXmUKaZDxUBdCsXbysJwl5Ru+YRagXVKYe2peJwkQ8KdtwVCYn+koT7Y6MMfNrRdnT4Ue9A9s+QMZXdv4knySerYwHtSGDB2d3mn5dQmNKN4kSySD1e0VPbpuNtuHh0rvHqzmpPYHCNMlgDwj5J0UGSlWK9B6D91QmpFDJc5MCwmSyxHuxjMOnCuk04+50oseRzOYR3taOzRty1MhgPBYbmJzvhoUndQApoW04tsL8soxGW0zXxlKhz21kMI9VGYTq9v3X9BjvV4sUP30A8Pur3LRMa73VNuILfKuPLv5cQyyfFhlGvPrJ3sfnZYxudtzgbKkD4QpKx+nzA0XZd1TwwDS/GS/xF5mk7/l+YtvzTD3OrTx2zm/pSuWHWGPBPatUvjj9IX55/AokGjojo0YmH/tBGQIjVq30avicqCGDkabTvazf1C/z3Z8gS39MVTai1V4B+urLMLIxyGHdEnTUQXdDgTLFzpRzn9IoS6L3lki9IUkJNxJNnZJGQtwytovfKxF19DxVNGydJHuIVbRnRYfgxtHABYFOyp2Os6X0uG+xl8RRbLUIUoZlYGUG3fWPOEt2cKptB90kPeSTwJEswnTROgLhiyA+pp7uiP0OIz0lMtgjpIbY8AeEzNtoMHSVKfiOcafeGG/oIb2wgSYShGsHCY0KVb3CivKcQkTSyV49d099atBUxw/KLvXV9d0cysqMx65zRhxhGXJqkMjXaG68ijk1Db7mWNRID1cOykBlgDuu/1Fyr6JL4FRUAaAkGUrQLe/1BJtlYGrEq3gpcjIM9g/0TYMM9gipnbMvjq0a/jWtKghtA7Phh9lrCfeLMaJIR+FTktIs0hUimw2PQhQz6CxQqKTwSeVhqY8iRH5bnK5tW58JvdzAC2zDwuErKqm4bv25AR0hqPK6n7r61ZIh9A2jSSHVVNOEHU7vlI7Ee3xwktmIz4oM6QI12+WTywJ7g+MUymCvoTE1K2IHhE+MS/qtdRJzIapYLTfEsJipEhsaI7ZNAJqYolyfBKayMHD0vSPbNzSxZdgqYxhEOsKiiOad+sA7tQbfJTp5SAPEfIrl78tQNSTOQRSD9F5S1NK6xI85KYFBCfe3RUIirpNnH/+Ox5gu8inUaZFhxMQ19+sMVKB5NvtrHo+wmx0koe9sq5xLsiezzWRbEnVEQkvVhgDIzmAhqdTB6fkq7Ub7SlmIOGTc4diKtlH0Vk9uIYiSUx4LfWeaNrJebH1W5lsyeF+esxu4qPxA1HUoZ3oMZE48qCQgZ+038xNcodIiHmMqGQFqGmTo/iwvR3Nul4zfUL0o02R42og0YdEfjUuRlzqwsJmUYZs7ahw0qdZjHbbbXNMeT8NKz4Yg8F3mzJykMnW60hdEeOhLqm8RINNpKUM7zn3D+m7JED5hovedJl09FhppGBPnf6O1Zrqe2DR5HWJsimQILyrrP93mZHSeoTN1oxzy/xIZY2NiSRh586AnZ9Bowmv25oyDSkhtmB/ro708GAT2H1BnD8c8ihoB/F4ICyURtUbkyH1c8T5y2yjD4HPLqPdS1OKoblPbUs+ahXrOEO/0lsRPUVswFbgd9PdvSuRtSmWoq0zFBTLmnctufGvn1ZBtkqROot89QfQ5hKU0HkGMSY6tnJ9ZyiJ2G7kPXaWy1aoS2+g/hfowRdO8g/0k1XVeSKYc9gt9N5kI6tgvRcm5XJZB1XZCegi+lWTwP+rooqsMAoqkBeDHWXn+pqPJRqlvLCygKEg8VyKw6Sq/OKDqy1fk9GEp51X0r7IKpk6GLkLwhM5GoO5MGxp6CtQL/SL2F4aCZOAyuLcWmCFH1CZn7IVMMcDtbepYm7RRJCkKFFcQs1qYT5atpO8MGLWwt8gAikzipS67OgjrhfpRpyo+lEMycEg1SDNAYSCKffC6u7DDa101ahfZjbvQbnA+0h/GTMdDghq6evVeAI/pkGGkNlk4nDCK2US2BEYYGYOQ2lFvgPvCxnSL2ZJoJKatQny5glSRfpCM6Tn8EIBZvW5DzGu68fU6tw49qtI0ejibAAAPLklEQVT+QfDDvIMrMNQ0LXcy5AzT0zy/OSRD0Jh4DU8DyNCC3qMJ9mWEj40LBd1dF15MCDSYlvIVYDveCxY8HTKMNH2IhsaRAfATl36aKXUdhCIw9XvktcygNRUXXg3fynrplf5TzLjz/KevJNrhpKgkiQd3KOZZ7wt8+ZUR2tFJKs/hUBvLIjxGBBC1PNo50WjJQEDlnOhmoTcXMC1mV0gdSXsByLq+xPpFYjQ7hVl2kiFZtHU+PTJ0f1IrhTXfnVWi3oHmdYqvDvYuoNoJb7xZKlQAn+gQc6a/Tml9hGV/UWPQlx+UnrH3DtPxp8mm+nIGdJKnR1SMpPItJdSz0M99hDEXa2sOxXJovWxTQ79JBos0QAAERdigx8LlML0BCmJO2NsI/A/q0MqdDK3zR73HozmI5Xr6YMpkGPUdi3aJRX872zyZCbEihYZwvoi7ELUjglQhutoX3Vex1bsLtQtb9lIP6RWKFgF2KY9n5KfX3GuUFJOJHtjRvgSIRy369ApbuUaXrAxNMStwhvmcxHotGeLhNTYqOhIjzqeQXlVvvDmGql9ewYl/W8+qNMXpfZd0XolTQB3zKZNhxALYLYV4MxBJ+S0JXMddw5t6MKdZth1fnUaIceXTVyHicprWZweJSuT/qV9Fg0YuXz3b2xu5Pl+GNpX3EA14/qNdaVqk8hqPGeKVXy8S4is41IAMBgzEei9t0DKhe0Qvr7roWFv6HCavaohJRzofs4ip5ArJJj3WzGGmSIaRFuQDUCV0VEKua4Nh4cdDpa0eOQcuo05YpXXP79uJSL1HduWKkEiPdVgdoXcS01groW8pJJ/xJUaX7Zp3rTuTdT7FlJ8c0dUYnQgsPzma9tMyDJIhoLHK3G9RVcLEEzQaoEnvdk8IBgMrjomPq5F2gXupSAkp0rTIMLJyerO0phyKUXG9l+k7UodlMBIZA/WDAZhhs6dLcICShOC8X8OUP3zCTkl9copj/RTnK88/aK7SDZSXF8CfIixe1rGi/VcNFjWTqI8ggwi6Z4cdAUMqsI0MlmqJIObw/s1X1Yzh6JfJh0OUtu+Rql/s2G1z7reSYE3TIkPYqealVGtYaN2W/negZeNKfamhtATkEMoQrJ1rpNA0SyJ/EcUpFyc6rghhe69iuWF1tWLjmB169CSKdX7sPDimZ0cAJCxL11mRpRdVz5YKFZfP6PVl4MvV4o4nUKPIYNXRlp6sheqproVk0H9IhnyJ3w3FZLC9faQpkmHiUaNSFI8DOhcofL8hvEkj8WvrWQdeDSrWl/fd2ktwQcmJeFakfFIKZ80CD37Dj434RBqsNK8I88gWzeA0kY7/dOVIvS8gWYkey+9Bri2D9tvTFzlS2Ak2Nm2EQj9uiMR/CQ3pa8oWuIvWGCo9oBFFpkeGkaFpNcaMnvpvoRWAwBjx75NgqsLRIeWAapT6MJL1qEjI0SX8pRk67Be14RCqyJBy8xBXhegm2Tm0FlKoZ1MaAbRO5C90+v82dyYLEtsgEBX9//9MDlYVDyRPcov70tO2xCYo0GJPTrkkbgFPyUQ6nddVhzVKjDl+Vz8DX1LtaXFxh/yY17cL4M/S5kp/NZ/8mg6/CqQ4oqs9tQTU9PrvDcjbeLog2PTmc9KmWB2Dm2xvKHS5mtWnvrBkyr4MHAsR1V6TbLwKRjk5WhZ70CvH/MKlEJEpuBTbQYIrUhynWmN/0cE/O3xq9a9xmjGafTycXcnFJR6Ct9lrE8b8Uxlf9JvbO1Csxed0+M0I08pA8S53laOGFM9rFUlqDz37XkLebaxY5aAyqsoe193JvLfa0qcM1VYMbC3dHI2zeF4yjZ0Z9uL1MfdvDt3DewSb20nf0pXjoINqbbf7poNsCnvwhHKAVr1qRDaWaCVbHEa9gTPgXWis/1PozEVaJ3gF5PiaDj/WbtpRTgsRQKutb5cEJc4ZHEa7ll1Wja+cnenx+K3gW4sBk2ZQ9I/SwsyBICtWHbDbQS1BBwhLltyBqQzolB6xn61eGxwe5fSKmKTh+dm8iXyct3ke5AZ3HTj5rmdXJvyGZe43Rjk603vLtBScTfj4Ze0p0Ede5s8m/DUdfhpc+9UlO5tQTx24rswitK3BCwptNF24v3EghiIHn2j853HfZPZhxshG4f4D5ZNLTtCIPhqrbRQWw0IefxXdPpHM835DvQ0Kl//HduLt8nzr6R/NCfdIuNSrPtzslO6v3qtQr1+FiZBN9pr6NLe4BslXdPjFduZCTKWdaAOm493K+CVpzzCMUq9QtbKkDHPsXgakI59Y63kJVSKPhv+uiVxdsz5EDZdfkLdZRYftIBcn7JRT+mPwuKPd+8SlT7Zv/60susei+F10EDiMKGmlu2guOdoMxmo2TzA3J83EUIWrglVNSj9WAubnm+cU7kM6/Co96ZDc8iCnWmqTLJDOtjYtmUytVqFGwS6QD7Ixq8zE0JU9UaBv8GTr5785P8kaGGU3yuGDfUSjxvHRw/66AwiJHE3TCY9yGU0xb6ll6p5p3nQwoGTXi9LGwa8RtIwFiqv3vc21dveT5qlfSxHT9mt9ToffPJO+aW8QroERAgejSo2VD49sNTY+dHRaS7hcRtBqTTxn1dsJRykrs9DIROcFBMmEbacxoLNlxwBMRFeG9AXc5CRr82iTtu3Ix8se6ETQw/ekg9u86aCMtzOOAU7dOkil50/kdwlA635e92pZsNHoCAB8hldyxaXPd3T40SHaHN22V2pRPySdwHl+OtGqtmHm6DrRYXeodBhnMDbQBb0zKS2t5hT2og+8rx0XhnA1o9LgBbIaArP1q9vU13PgRwgpMCTecy0q2bLOuw6NsXTv0VxcXPJSl4tzNpLZYt7lyxGY7M7sIIkAgrdB+4gOvzorzlscOKWLDVDa2V0nsYtuULBp1b/XcoQfZRf0Vu08A8Tp9irDDg6k2VyrJvTbYG2KQFub14V+9n5DlaUgfwIcNOaEPxTAkxgi6qLDEGadjqE+lT1LMXSbPA8ascpGc2nzr+41zpXBdekls/zPOvy8BJnacFurj3JFqrPEDN7mnEDgOR/Q/cBA50bU4eC3pYhWikwUUM0/ZcI1b3St5ZWM3M7el2yJZp1XQ3rYiQf1qjUMJXWbnDwjNkAit/2s26nDc4EOQnn4eUPktW4R3UpN0Chwr1MGt0/1D3/Nc3J8XuFLOvjNfUazFELCGS7O8i5rKRUT9ZLCIyvFbLMKmW8ZceE+f1/qSB++WyzD4uyySxSuQtW38qaOep82aCVeS8fPxXLk8P92MOpLX/LabwVxWfaiwzk52c+jHBK+fc7+NxAmy7bax54jC1TVwXEpxK/r39HhdwLxPsW5NzrOg2ZATv69eJ+/z3quC4rfcMaK5NyJhI6qTDYlB79NL7aMBcBZbVlYultFoF5l4kZ4sq5lIqDRTF5Ceq+gyLfnhHnIxc3INx2a4gCsY9WN2Yd9acSmxxttyYNB4mLEy3WWTNdK6UM6/E6wCwAW0WgHBvllpUKeJ9EANsGO33e5JbyrKp8VqkjLjBZnMtizAgbjeHlyq4CaP5itFHgWgMeyRQ91JzNXLARhOLsGArOCYdtq6XmKsrmzFuSuTHnXofqWPDlG/ylNMI5tskQyApzK3N793fapXeUyQ52NxKJACVt2QQ1/Tqy/o4Pf/k3nKGconol7D/3swqBMakjGFD+DQWnRqRYOCqjlufZmAwdP2Aj/Kc1u2ucp05LXdJhxDuJZ6NMWIBCU0K9IxnDqR47jwOQrnK5mnyK8bdWIz3G60JwIev0UZqtpRF09yuPdp8hWEGjDNj+ow88HszCBfH7WyU6P8wIVSrh/VinVn6nu7eR425FfIt67z4jsPJwThprfRCtFGAKn6vfo1oGxqKdCU9cfZJF8MWwCOUUnsMM8UWzfD6639wnOXYd25Hy9BNB005Ix26XpKmLZafba/tJneGVva/RYsfqJ4q/o8PMEEKjmrK2o3n7tgG70y1XKJ8vJ3Jx9LtmirxCxxltLKbfNvbBKJUO2Mm3UgokjyrW08yimt4s4U8FwyWvZlZ94mJRLRtvXrs8JzG+Cyg0Epw4Ifr9K9M/Pv0LoMgCITQOYeYar96m/3/jELmnhLR/T4eeNDoSa3ox9rDZN5EuOaQ60XUvlDB4YO/URb6PtumYMplzfoG2ZstnM8oyn6rDUF+4UrY8O8SVsoyCMRnshWcHpo06kBuY2teSItAaeLp0maEwd9r2c8rSuJFKrXXM3ycHIxEp55lNu2fB5fNRnXM61jGojqXxFh18NxqmcnpXPzQxf+0cFAVdRntK8BtVr6eQygYSZYqaXLUAhsLSh9Xo/G8YCn3IezJFwrN9aBgw+8ESbtM/WNf40nMIQ8wZn5L6A0PsOHXQPZajkk3MVniBc8zS/FdVLrVuZEU1+b5BeDbBKhxh0Ytjjgzr8NDnm8qqe/6otdD18EX7UNPdgbzzU0B686+k33dqO3KKz3DDLWuUsu48Tx6UmxM1H3m1gz4EQ9MlM5iAqzrWa1DMVjzfXnRa11XijYQ3mqevT0ghycTAM7E0H2WW0D/GzAxJ+5XFZl3Zfu1uin3u8ZINbzX9tumVtZvqeDr9EuuY9BfAeVyilUkL0seWkJUIry5Ch40YFYUoNtOd8QrQ2bbpt62NDVFsv97n5Du4sm5k34Sawa59Ws6KcJZ2zFwNy00eZlLQ7kWOtMUzntVcdYIP+95CxtSEdyZm9L24XygpgCjznp6Y/db+1ZFm8SPc7OjhD9PSCqFjp//6YCoQmm3LHEDz7z0d+eB1KmkM0rboMWikaMS+uC1KFwKdI5Bys7ONTwLOXERMZ7mIfDEIf5z1DmHbiICJTRCMgE0QF5h86nMY7P900zMTg1Zib0eGUWnlMLzOHeYyVa9OisxYwfFOHn/7zCksmTSQfh6mNupvcEo0oKn2bDvQOtLHwdOqWkdLt+oNGCi49OAQBs2gCRDbrLF4T9bt9KsMUhfNv3obx5+GxME9mycDN6PTcL/7QoRmrbDEzOmmyDp+fPmAblMZNrgBaiLejEo+B+Wx4wwST/Y4OP092CdxbAMmVvo7DaJv+M0hRKFf+e9oGjJpz2zmnU8SwBOkpCJhJmNlIm4EWaBfjHoJl9m3pBlanDi1TTf0QCMMWXUbIM/tPHY7UghJRMkzz/YXGfyI1g3cNh3rr+B+Yf0yHfwAjBO4Lyccm/wAAAABJRU5ErkJggg=="},{"id":"DigitalGlobe-Standard-vintage","name":"DigitalGlobe Standard Imagery Vintage","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.1412531a/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqOTBlYWJ1ZDAza2YyeG14NWVodTA4OWUifQ.wVc8ZOuPuYVw39lhS2j3_g","scaleExtent":[0,22],"terms_url":"https://wiki.openstreetmap.org/wiki/DigitalGlobe","terms_text":"Terms & Feedback","description":"Imagery boundaries and capture dates. Labels appear at zoom level 14 and higher.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMQAAADECAYAAADApo5rAAAgAElEQVR4nMy9a7Bl2VEm9uU5595bt6puvd9dVa1+6k3rgRCSQLKMEDCBAHsEGptAGE948Bgz88Nhw0w4bBzjmBl7HDE2EzM4PGZgAIMNNkYEDKDBIARIAoQeLSG1uumu7uqq7nq/bt1b9738Y6/M/DL32vdWYzw6u6PrnLP2Wrkyc2V+meux95WFd31fAQR6FdRfRYuF7ujvAhSpdQsgUusLSikQ6e6hfkcpKOJ9AIBo/VBaINRfqd8jd17Lf8HqgspCy8pm6K0Km4pNCYUqimQukHrs/mn1kcuoi979QNsGo02rRNVXjTGf3e9ePRoj2bZe/Oz1a+0j41omLR53+vwqyzBqDoR9casohe6WTmrroPiHVKcA3BkgYgMsXN9csXT3itBNN+lKDp37CUSZLahKIPrGp1FGIQYLeaBIdWhSQnGmjIoqXukYYIQr4IoXCfVPl8oQnaEow/qBUoZl0KZhHKoM3QAL3S9WjwGro+P1CtHLn8a7lhMfYgXFxqtU+mx83m0JKpsWGUadSZCFEdNqHGrodk+otoj9dmSQrhK5paKx+5WQkmpLikjqG2agQrwpkmQEQHHe2AZL11c22FJxxepKsahVTCvFBpadjEe4pHtqyPpbqtu5casuitdXPs2r6XNABuOwqB7EeFMDLUX5T9G4Wg3zqarOZd0n91VcBi1HB2gWu4WjqttXMGiZPhlGqKFGUFCKCyAiHpoCDyV0CL1vdat5mGEWQ0o1GTKrDvOLO5wyZ3XFfN946OxCjK7dFa/p5WpYETn0rnQj6b/pm1LreCjkky6Dyizqt8Y3NJDaIIoAUgqhktQ2xXkWgXDvso0M4nX0vusZNeIqx8S/RnCAxpiN1cdd6Qn15WMSy9lQAv8SywKETJkMk5hjVRhns0ioChLUWfLymJu5ZCWTMWQWiFDmKNRAnaT+o4KZaTBzAsCpIJp48Win6Z71UarlKiB4lLDhU4dlRDNnrTWlmMyayypN0xWlj2Te1BOXlV55loGCB1AEnnGqx1XaharTgMd8Xex3Yd2bIgsNIkd3Zlvp+fxS4dZl6I/rNMkwcu+IA9NLkY2MG4Xxqy0FYaA6BZFwxjQRkxgzDHlpzAOuEGOOIqlOjxUx5HUfLarnwEPEMUIym8go0zQIhdsb/Ft/wTlrbsCmnl2CuShlWIYuChVjS5iizduU7443Q0YNYdXZu2o+mKZ7YVmE+CpG3/otfSlQXIZSaXCEmDYZRoZVRf9hB+w80OYTNFg296Q2yrCFd2png671henVT8rVJd9TmpQWmYqkjbU6Go5Z8b4k/LKQa23E5dGvqkDTDzwkB9rcR5WNUjPWSXFzCXqSUjq5t5FB5xYEZZZmaWTLE0udbzEGampDawrk28XLRdOSKoP4yo5Uw7ZITuUC1R8h+BTKYKtMKkkpahQgb4rLjm4QnYGqpxvcWhsaPpvEqNc7dGqELKpFSih4IspCRkT2ZVZH1IhIpVBkMqJdiFXa6mxhibhEgCqmJ5gzMYqXGgVsUqd9WB4pKFJCVGFJTIaqVNVZUwYwcKH+Fr8tcOmMp84xi8lF4FV1qfM+BzafT6LWs/FnHmiQOHXuutE2KoMvVkyTDKMSDN4N33cB1IPcpW0gCQn4N4qia/XsoqHKL7M581oPaW4c7mgWlUqxfsycKFTHeYaVOu8WSqSmZVrbhikglcGOMSz24askhfrs2nB+avMY0g3zWSyOaAPPi/uxkgyFFV89t6gMjmqdsYlYWqxjY3pQjy/eq42H9ekg5cjqJQrVtjonJcmPYEM2J5syGUYRo/qmFASAV+N1cSgSFL4PsrPCTcElTFZv6GpXCDpmbtFhlIYqMfCMzoEUDTxgEYxBEUNqyiaOOEazGMq7IzJzTK/v0DbxE6mG4sut+VI0DMg6IIONiVYW3aPxSMLqdYMszrJryhkm3hQ9LdoTYLJh6Vexwff83xYTGFegwDBdMozisPiASs9SYzWhQVPyERWJxwaDlnblcsDnC7nfZI0c/qIRuw8VQ66WECHOOF3h+s4k79h0BbTsB5UzqjnL7OimDFbdpVUM5mBIhhYIUG91jNjJ8yyk2DiE4RbltY+ongsGwRAm10a+OOFk5NMqwygyuY0TmIwlerkEetYDCxrNqLImbQQw9Gv3Hipq2NXvITwCKGqw3LqDXRRDsk4IM2jaLbfAbJM6Rxb3Tv9lfIU7ceIehyajq0vOSdiQDApMEXQKdFM0c6a0HECkjkMySbMXDvV8n1d6SC8+cTK9NuNgBbEyhTKMAAR0yrt5bOh+fqREaIeGP0Vm6Q94ECcJV0os5VyzytIJ5hl//xSU/6tteMXfB6nUsOwrRVJ14ImMt2N9eE+KVjqgJEN1Nkc1501qOqD27BtuQm2K67UgGlWSgcvVSHgu6I7E+XgloTNKINSzjnuLJUzH2WmOMKcKTRkqSEyhDJPKghOtlX0y7MR0ct1tu9OGCC8poMTJqtIA7ECf1hfycFUSlBNykpBiwI1KlIdKz42sJnSlqkngxk8TNRRXjq4C2dyuis9Xgdkv2NhNbwWkbFqxA+lSvF8bDLYLEK/meEMyIPZJ48TpikCoHf2GL5Z0KYeYg3fD6vf4CnagSGv5ry5FU59hMk1gS4qdFhkmmiJ4B13rEoh42NKczp0BPriiNWB1IWREDSYy/dI1NCq+XOdKcxRxLWuZGxn3VZXFDieaNhVXoonEjuIDqW3jwIRRNd2oUUBTA9aMpD6MHsU06q+r05ehN80Lk7ioK0/FGJ2ZHnenoMjjg6BzIZ2bBnjcuD7zZW3b0eWrLcOo1I51EIq4Y5TCDWH/x3CoaFaoAoECexYZta1G8ESp1ChSnBaZMBSS2U+L1SeH5rbkqFFvDWcoZJwqOzm+NstoZgfPDNW5K4kIWmnyGR2PBLX/kvodkqHE76IRmnL5YCwl9uX0qQ316X0orOvvalwl0Tb5uu/OB3oOzuM0TTJMzJDrgHW8q3cxQXY8CUKyxxeUcFjPxjVHhhbipggTCEgXxzR6ZMTkf912I6VSFcHHVTzb0xUjR6EYJt1xWmkjy6e5a754taSjI2ZF8QiN1yWw68sgPAg+dlL54fSMQ2Bh/iTYh6vcEIpQXulqDKzMBTWpjJnxMA5VR0L1p0SGUVjXr0ZJm8gKvh1fZNwaGbRO1IdE5uBe3ZtwgYRtas/BQFR1hOjR6xEmyZkOO5A5jRq4Cql1FdmpXx8TdT93Q04PRPlKl9HT9Eg6hMoRx/pv6KKX+lX5ewsTia9sK1wQ+lJ65rwNGRRxVX5C8yBDQwdBNp0fTZEMI5+EOsfOrA5AqeWOZiV80vhz7s36qRZVQA4n1huCYyK3C/rkc3UdTa5j6V9r74F0o6mWsiyqwNin7266VzqPHDqJrvhCxaCfD5T3mjRAtvCXCmIZg3oT72wYLcsDbPyCEWZeqzUWBSIzAGfE7K3Rl+tNpk6GkU4EAfXQevCKiOlqfqE1ehWMHSmuDFX9FAqKhdA2y6TGWb3bEKCzL6vTob/fK+m3nXy1eVB0MQdyGgE9MUmIzwos6bvzTu21TOrxNfOHfqQyPgY81lPVTqghGdhYfKmbeVZhQYPQl6krCK1DX7pnEOYEKqNUYpryhlUdIXouT9z0nS4ZRqUaQuibBSNezMq1I3o8zQzMmGX0zIwkQzUjU8VGYYLnp/xMuB/Wv02WJbZlhWnqh9SWUsJOLHcudlTSq7djnjhFrPcTplg9k0sSbcg2MqheiKSlLamepEmnokkYJ74dx9ZWdUrdrymBUlsfPQajjUyjDCPPodnAkbxYx6pGEsVSRgcgGD0vKVrHAlrGdJwtBou8LR8PSjgjOnFFdR4x46WmVR/eXidofOSsOMlqs+ogQn11ii1Eu1iY8s/urJOOJaVt6lyVX2G+jF4ylDTRHpTBQ4mnGyZ/to40nhV4er6pdAmEijpy/S2apjqxRneJttlmNvLpkmGkDGjeTOAXPiv29dmixE/YWC3C6OS0sxZFWkZNLevSbw6vsO9k2jBjJmczUOI0g0jYRDilN0pSKq8qktLU1a9uIsby1whEOpGKgJL5B3yiXWhlSu/RDwcEFd3ptGTwianSIR6pbdz3MYoISQrpP0d0j4wlTn5LvMdAp+mvH8UGRcw4vtMiw0jqAEk1om7JVIeluoE2AJ1R4vFmcOPwXu8xoheNHooCInasVxT1a8QIKzcmoLj1JxTwaEVr/6QY0jvpz4TrnBLFxoAn1CYD1K4L0Sr0DEXplmNpYqf9AtJ41qLmtpoOEK8UfJsyFK5Ao2uRjuVXsGJoSemnRd00fnEJXaJRMqrniybL4b6O+xTKMPKQxSZvFkffNa0q4GdfC+gTBNrFBzEwD0UNr1MfCqtlvoPMwUIdSesrWxpZzEGoXzVcR5Dq6IRaira2Np4XDkpdkoWQPLobXWz5Lk7soyOaMwt9NyeJ0ckjriZeMihDb9OQZeD5DhTcQDpNR28YKUrUUbhYPYy8yjvivaa3aLsplGESYAjKIFm1OUUnQVe9cwodYAhoj6gyKR2tOJjuqRL6Ux6Ll9gEUoKee5uAhMwdAhNNZY77LtqONeSbakX7oPDMRyvCBqOpwXWoBh/2F1QXLR0oLeXBb7j2ZUgGBzGmxX1wvZ4e69h0m1yk/WoCvGcUj6TY4JEKq7FqyiiIdYmG/RYnMS0y+MZcHYnOMWtoV19wCHAES14WpzbulTx54V1dUyDrM+XGcYUGFiqE7nsIlfCKF4cRNC5R9dc6XT8BqTMf1Fblstq0mlHUEYKiCVqKn6lFGPhKl6KK7CBD1FMCNdJ/0AdTEJcb7MBE3iISAZeWR4rKfyppoHnxwqmTYWTVhb1PjZWbDoyLtVXGggc5AylF4HsepFibEtpUqKTyaJgx4YYjTXXcODllXXnMZBeNS50g1GLmqW0htri/KkOvWYrMgTnlIoFPlqEHwaaugjQE/bHbLo3I/Aw5JBuojk+jGrfvrUROmQwjHizDLhGfqWcmaweWsqWOdKy7ex4JIrPRadz2KCIAPYVsf5G3MT27GySgPF7MsIMzs1wKFiyPokgH9dVXnYe0xeQfNtGMqBd0NSB6lsFCTykRmgldUSftnlmW2FblilbbY9159Dp5JznS074rR5YmUkpVpk+GiaU7EpevSs3hLa9VJvUbAajnA95JXiLzTS06chuciaAQ/bmHy196xmQQbLLAJruJbeO3lQbZ1xKL2JDtd2Y5kbJ8Wagwy2aWQQ7UAoPET4gOpXWT6SQttpJnpaOG1Uo7LK2h/lTHNvbUyLEzGCA4onPfUyLDSOoSoR67tYsMWgBbetXVFHVIB8pmTEqCed+mo0rY7ZcMT6lm+dWhk8N1VZIismFltAi3KZplvnPkUpmDszjS9M7daEN1RpIxfOf+e/f7MvSuHs8llvMKFw8EA1RJ9cN9GgyVOfdpPJMiVU9KPwHwtMhgz1T31t8pl+UVraIELM1wx+z6VCeKhtmtODkjfsbJETLn3bWUFBIjFkcBTifiUpySLCa8v7GyrixVBTt6kFDZESyVjKtQOsiuq+Kf8HEYBI5kG8YXO31DBq4fELLUPRXTiwth53rI2YbAoYTvRN/KxAGtqMwtRyAa+j28WnI6ZBgVtXjx5c2wTAp3LIsQqN5tRwzMghEkpN8MEF0jPz3rfYl3wiRp8qU2oqtL5hPVUPRepm6IzeG3OqIeAbC+WAoybr5v+xXhUVoHHMeN6Jw5jQS19Rk5bE4SJtJZBgJEPUtmTiQqG92nurrzHiJrMOaOZ4HLEPZKbFGjFqlta66vv3WsGCjD9+mSYeSTwaLwH84A+WDwD/UuX/ktwYI8ghiCZ0RzK3aDtifwJTJODNguehXIJ1pQTzFZbU+lKkaRwXfOWTAyTFYc8lyoIQPTUTLkpMYvXyWVKaspP95WBtMDkxG3RENCEsxoIfKl/h1AMSM98x/R3dpQ2uLgEA20ycOUyDCyAGHeFVFL2TdWFJqqE+QdVN9ijx3ZikKt23qAhyJiaktHd/VhCiNVopUab4kYrQKECSzT4r7ZUVRxvNLBY9jHD6sfIDAPQBqgFhkLBYMylL7uMkiYHCCDdecKvFi+rf9XfbJT9mQtbjucPzMdTgHDK2amS4aRepTzUpHJA4a3ScR6E3k2mEqH1+/dJwzCqePqSNy8oomFR+Yk8ZatU+h7trQwea7/G29NqwQpNtZTcZx4od3yGD1CXUFPBmG+8tWSgVILNzquS0wGI/BBD/oGnB4ciLrhChoN9bxIGJ6TgcSde9fldMkw4pTDowXgB4zgKJyXswKyqjLEfpqSgsJUcBeiM8bYzq2HvVUFSBAk6TfxY2RKUkQSQYyFDOE9pgJbmd14yM+bFNLFkM+1+OqQdECGnIZZCpn4FlJnKu+fHnUG7IAkMRwWHlywaLBZhbn+gMzTIEO3U615NwoxI2TjbojBZhIqUwjoyV9SoUWb0k1/g/Fk+k3kMDZjGy3XlaPqxxDEoxBm2wWmg6rxcLKUaPX7oAiokUnbSN3crLoXk82PnvQUY8qiY/IiO8rg7VWxcTLeHARKU/LqjOrV5Jfcno7fSywP85xalFIQ02VzafqrLMOoupEnGgXwZa4Y612ubLnsvbWtGkr67OrSQS4A/uggSc1OXK1BI5f7nRtHXNkofhYLdTxsblOYTZMZVNY/8yJNJOrGWnXEh9Iqz1VhFjirEcRz+j6oLoA6DkfXhgzspUX1qTzQ2CnvOvDqXToWDYSNfWjfrvLQQuh/Lub5nQFX8aCu6DpFMozsL3gqkfAjrKJbWaQCtV9CUjZ+ekbb0NStNxpn7Mr2IFLqIxX6zcNjb66wMN8RN8geLHX3I/gUioyRryy+fudTluavqY4PrETHVSStHpSf5WjLoJbFXaR2dDssNBhYcIUkl2IFg4Hpg1GoUFuXwdLWLEPob7pkGPHNXjiPEFsdmB7sIBE6XhxJGWW1zyBZNYieIL3Y6Chb2DmgfTCK+KOb3gcp0pSUFMh6ykiXVNFL5/hSxIOjWS+UpwbSE5d1RKjYkMEm1tq35mbqnKD+C53b0fEgtAzyljrONUo1ZWD0Ntm1P7pX8rJ1ROtpk2FkD1FUVFKj5/r8Q9GeD0VZiOtxxZ+NSyOH0tD+w71i/bqDM2wXBEMEbE7Eodj3NRCNsGXYpIPsIHl+DfCAaQdep3kgL3Tkn81B20YGizShWUJbvc8gwaz0nM2dTp2xy/Wpk2CEhPAlK9SQjOZaDpp23m2KZBjxfQD2HKz2JkW3n+p3YVruOBYAijqIxNQhyZmPJbgTqkEJ2YLuQDf0NbBKUYICB/TdNG7c1xXjI4cYBHmZ5QAbDVQLObMWbyNDqQgc0FJlqIah38NCAUqilx7cIb0rOxne/BxXR7szm7hRanUVbIsnq/6g1XTJMOpNSETozX3xpKuegAVNTIM8OmFS6YQNPFpA79yQLgeUAl6CtajYq6sMdL8La5J9zWQurhUjlTyWvvPgNaMBj7jxTcNT+zGwoDHvGOI+QTfrPeW7lEEZnLYWCoIe2Q1DaPN6hesVgzJLny3a1ojrWCLGp4534I/SYZtcSycDR/Bpk2ESxgHKt1uUljmw5eMS8Lpq5DQhFPUcuuydqBw2mSSFQJtIpuhiP4lPb0+/RFenYpiNEzZHYT5saAQp4tncKIFIEAB9HdpgWIiVrBbYkfH0eK7TSP0Ui9EU9fisFh+zr7qgMTKg0TEjz9WJe++wJhmc/7kEehpOXAZjV5QCjQd59DTJMCoiYW7byeKRQZ9VJV7JoPTgFC2FshakDq4RrrymP5Log0zr7wUWZv12MVRBQT0tqf/3nanniLUPjVy9B5LYUVgfZJUWZun/EL1IUYVpW//0q1R61pWfPA4MDMhg/XC0Cs5OTw1SdM+TyVL1FZ5TKToZJZ6FAIfmd5pHM99NGeKLkCKfUyLDKCjXWQUnS0UZJvn8ZCKi1yeF8F/q7ISqTIV8EMGa3UkIUVkIQ1AVipDY0i3d4whsU3iufHUeHerASXY8sNEqP/5uHpqAE5xTWhnb0shI6MaaSh6QIRkYnWmlIJgd6aEYSOnNrm04GmM4QjoVI03znFrRuuXnalyG5pyMZJ02GUaWtgSOg0UYAkuwXlAuaJybBoSplK6kt3zGvlgrWmsp5CwJPah/NYze3kIpMfIZi65cD6FkyJUvo+0e7H3mNrmfojKgEXXyEqAPSMt2WlfYM+EUTPlVVLVxc3bcWFwGm0sR+DB7irYuX1/XjuTZSULFXptpk6H7+xCS+kj0bE6gPznH3elqGT8LxUbvXbnBJuNS+fgzf7c2vRtEt9WY7D/MIXSwwNEg1u9dxGQ8/kw0Ut/SEmw7GXIdGsTm+Z4Buj1aua6kgh7thm5aHYb7A31+lWWoZ5mk37ZGBAH8fI5ZZAPLCqInZaVIHxE03bJq4nR0ky8YHD9uamhANDV6iNcNPLEMneDhXj7dG1CiFQkSOaMnhFitq6T/h8qH6lhISZ8ptS0DiBhPEmxfp3meSOsWqltiu4DIOUoy31MmQ3d0QyJvHWPwyCC6/+DWoRtpsT4o1A3FLWdMArMS6nCkUOZKoWcwFMBT6BOG2awIlcmQiKIAWilWLmgolsUiffhDV8k5JP0PKqfv/LjooAy9VSd+ei894iqx3HhSEEn+a1rkFIhTVdMjrRJSNhD5o5Q8dCJTJ4O9l8n5rwY5AG9qxGE7nI23MmDg5jI0nKSfTlhksN/FFMe2bO3DBKt3sxmZO290BPA+ksxJrmi09IBLi746nCAsDOx4tdKFIRnIEWn1PVTRFI1XbYykvmAipzyFnnwmskENJStFDdZaBgRucB+/TIkMtlOt8xld+rNXwMONVjuQXF58a96cApRugVdq/IENV0oxzo21sPpVggaNVtGmSfHKz+CAMDz7+ZhCfXTtVG5SnGq4PubqJyi5L4mpHcKXZjpV8g+mNSBDDxjS6HCEiZtaSpfRN3ZvGiL75NU0f7dv1bMZLK8IMRG4AYogczMtMoxCWKY3aWRUir4Ub9qafqClN3XrnY6YO0/xbyWke4qytthjYU7ApDIChzdsZ3Qt9BkmVvREV8vYggLExiIiV+6LB0mNoh0xJNlBAIMBGRgYepfRct7D3kztg3dzDY1zfqD8FC6i6GdddZXSUKrQQQe2ejRlMozoOB2UPR7fHBUKw14spBDEX4WMprpEjym6b/MF91xbbWoZnHKoLAi1oWXgoJjC7ROsULXQTwPS1P87A6AHi7TcJvrUlg09d5SNQiF2SIa8UsLOyZNCs5+E1NQuGG++1Cgk3y6RDwsJjHguQ3x0tzEPnQIZRuAOdFVJq5rHuRdLdf94jJeF8+MYPMvvHXVgpFbjUSOGb7LEpbzUjuobf/W/YDQWYViBDT4k3S+JRsspSR47IsD9CfqTdTMS/p14DDg1IAMqaATVkjHmCWsDcfubioSabIyBFjPMekD/oj5DZOQJ8xTJ4KddOXSIGzpPZEXLKxO8TR5PfLqB8GZNb23fGE1oaQNfFUZKbMzLo0FZe61LqBA2+9AwPpoLwdt2MsRB8zCgfXLo0DQxh4cUYbVAfboketZ8QAbA/o6CAxfP50rsg4U3HZdYbmzpuCVQBAKKN7A4ysZ1mBYZ6zTJMFIi9clmvymehXFOrl4eUD84np8s9MN5yZh6Rk1LaFxHyZvx5a35fl0WOKRE1VF1IzLkO+KEFLOcRm2lDhQMPDHBkdRoFOvbAxohfiBBgKH1sY0MUHQV7wOUOiQdFPhvT1EZhb1/G30RhAmO+H1jg4ytUB1fDSrOByN1iBDTIUN9c5+Ews7+tFMfM7aFkAKZcw6sN3NRAMdin/FZgELAoF+ov14kQZhQRfQv8Tsty4W5S7jvz2Ko0YpGsjTYQRZDsDq49of7GMG0n6QTcqawJKw0WzJA7aXKIFSoxGwxI93TdCQMo9IpJoIpgfzdHFnIAcz4VReK9PDHCUj1maVpkWEU6NUOunuMSuQU6mgl/SZGfQlMgvMIE9I+SupLUVC92FCE+kS6tB4J2clPCmODU4O2uQ7xr8CeQ28IWR09jmqdLDxA0fHYiIvRhB2DMefUtmE+MiCDsk23HBAqoGlBKfZL7SU4GhSX6aEd5V95DYNOjxwnnoQGQcE5bt6hd02LDHVjjislgyPgDVmCxApWR9iYK+2A2J0xhIN5GTIKIy7YPkh5JTbolcHbV74MJeBlIa0D8SuUxjEd0wNN3uH8NnlACgCipwNKiAZhNS5EiG1kqMoJ8z9VPjoDcbDQZ0OKO2HvT/4ouDAKq2YqOIkbe5in8XcGlIDMDW+YIhlGoCsgedfMaOmR8K6tDpojMz8zUYqYUKIMJ4O2VSXusSgWpCMADYdpT+JB6BJJ9xE1V0BFIDdye8DEcSnwwIYb6XBHSaeUAjKSGm/aRp2V+MkyqO96uaJgalDQjU4SwfXI9dCoJ4Gqv9jY9ocZEa2NITm1zdFt2mSYpGbqP7UCISBAE2RRkHSWS56wVkqKnFo/5cCo5YrUliIU9efqjmoc1N7QXdubAYPaWMfejhyOZfDl2u5XRGcfAG/o/bEM7sk6Qq7H2ZkJ9szvwu5ds9g1N4tdszOYnUwwOzPBaCwYjwJGYWNjE+ubm1hb38Dq6jrura1j6d4KFpdWsLG5GfVp6VfUc6k89PRpoOPgIqEdbEGjO/NWaMC0H9ZHGl8CNNNv/Wa0s018lWWYlIryMUWR+uyDBCQNTqGVzUkqNzRBNgWExyWpPdlO76ivsD87j2ZmMejYXMAcgJSl69zCfamm9Cg7O0vlzZ0J/pRfRXDlpXfmiAZHRLBv724cP7wfxw/tx9GD+3Dy6EGcPn4Yxw/tx7FD+3Fo317sX9iN/Xt3Y25mBrMzY0qdgOWVNSzdW8Htu8u4fmsRV27ewYXLN/D8S1dw8coNvHT1Ji5cuY5rNxexubkJc9IG6LCTmj7JgS2iV7KCoAIAACAASURBVB2oYal90bE7T4fpOx/lsYd1qo34imUPMxOvkZd/4zLsfdeHLbiQL8IP70kz7cvOHRA6NTC8TOhRyEj1d6c/RliiQ5PgZirauhKjtixsYQsRaTTKhZDAaK/ao3K6PRoJzp48gtc/cgaPnT2Bhx44jjPHD+P08UM4eeQg9u2ZDwPJ+zosp17haAj9LgW4fnsRL7x8Fc9duIKnnr+IJ595AX/8xWdx685dOOAwaKVPICrS9JH0m9tU2iGlS2qygc3loH45umhGwOVfBRlk4V0fpiBAiGn0C6UN6TGMYLcaUeC5PN8zhKUb7rbGYzA0oK/MjO5wdGo5I3kjNBqG28EZaFAyz+at3Lj7MR6P8ODJI/j6r3kcb3/Do3j07AmcPnYYxw7tw+5dc1V1ET25fxN1B0cZai8iWLq3ipev3sTT51/G7/3pl/Cbn/gczl28Qipgvesw96zYPxuo47UJGJDGK9VseESjfm7t9A3h/w3JIAvv+nBx4s5yvrhZZIGDUGJLo4b06wywuKOqeqhjsvEmYGOgMrqwg7RCzsA48qrU/PwcvvUdb8Jf+cY344nHH8Th/QvYv3c3ZibjQUPOBs9XdoTtIsVQm61ScHtxGecvXcNv/OFn8bO/9nG8ePl6xZN6CM5S4ipUAoy88hbycdYPkCJB/g4Dku4OWViKEHG+Z0qzMSvW5v9fGWqEiA9ihGO2wYu6zpv2QxHO+gopUk1VdAWK65NDo3q9T40d4XT1Slj5QcjOsz31YqUysYwAKVKxtshhxqMR5nfN4uEHjuM73/u1+ND734ljB/djZjLGaCRxIAau7VKkncq0vNVP6/fG5iZeunoTP/l//w5+9tc/jpt3lrC1teUyqYY5MrPOSA0Y1GWqn0Gr9YlS3+aSaIbyRr9AGq+/fBlsDmHi0LyhKLWC6DCcf3VuHUBB7+mAhs2PAaMxupw7Bp5SYBwwulC34bWGVA0gag9swczMBKePH8YTjz2ID37z1+Pf+trXYd+e3YP9b5WC5XurWF5Zw73VNayur2N9fQPrG5vY3Nqq41gwGo0wHo0wOzPB3OwM5udmsXd+Drvn52y1qSVnC8CGHEivT3z+K/iHP/UR/OmXn8Pi0r0eLQMVS1EKJCILoW9SbQI+vhmzhTgm8WgPT3xbGYWCWD+P+MuUQRbe+WENSKFG6LKUupFRzYkDB/OqdTHUKRHP34fK0PiO9r0mOmcmGBG0Ye67tpuZmeDRMyfwjq95HP/Ov/02fN0bHsP83GzPIDc2t3D99iIuXbuFKzdu4/L123j+pat46eoNvHz9Fq7fWsStxSXcuXsPK2vr2CrdxuRcdYQDC3tw7NB+nDh8AK86dRSvOnUUZ44fxgPHD+HBk0dDnzmNGrpa6dWl67fwz3/5d/BL//qTOH/pGspWhTx7e51RjspS8Kv3THNCOuf0Q42jVOMWpjk0NH1Dh1umy2vOwznEX54MXcrkHLgXVqE8ykUUyBGj8SI6kiudVcrGTLQH07eck21ztRyxE0uRIwKNTqK0zWQ8wmNnT+J9b38j3vf2N+IdX/M45mZnOlXWwdjcKjh38TK+8Mx5PPPiJTz74iWcu3gFL16+jsvXb2Nza6sOqLj6ydHDipnyaf2PceroATx65iSeePxBvPV1D+Mtr3kYp44dhCA6wk6rVXnecmfpHn7zDz+Hf/ZLv4Unnz6Pjc1NbDfPy7qJem4vYoTFjWTn3c+G8de+JBuSB+qQ6TCImpb/EmToJtWJ78yurdX2cva2UnwuFFFqO0QLMvLEqVWhWZAhvk28Nf9hMiePHsR3v+/r8a3vfBPe+NhZWyYFgK2tgpev3cQffu4pfPILz+Arz7+E51+6iis3bmNtfQNu3cLCpDSsfrMBasjg4Rbj0Rinjx/C6x4+jfe+7Q34wLvfgpNHD/UcY7srg8zq+gb++IvP4L/957+MP/7in3fzCqAPSjx+5lhWUMXNluogGRxf0yC1tpbNAGbk0QBLpVU31uj1kwTzfyky0KS6VjBeQtyAu0M1dAFjH9WtocvCGjOfoEIVELSZlBK9D70osZ0ftICoNyBdpZEI/uo3vR1/44Pvw+MPnsL+vbut6dZWwWeeOodf/b1P49kXL2EyGWN+bhazMzNY2D2HmZkJNje3sLh8D9duLuLFy9fwzPlLWFpejaGoxWwzYvbLRiLYv7Abj589iR/4zvfiQ+9/Z5jIA20HGUqxNja38PQLL+GH/sFP4k+/9Fy7X/2itqF2YmKk1ZzGJDbMDXPUCJNgpHFNWYMSbNlEa5L8F5RBFt75fV13Tafrp0mWbljwYzQgL4crI55NYg9XZiUpp4E6Gk5b9bEDraDI2n+tOzszwRsfPYv//Pu/A+9+y2uxe34uoO+txSV8+dxFjEcjPPTAMczNTDAajcwYdUe2VHm3tgq2trawsrqOL527gI99+s/wrz/1JJ67eAX3VtY8lRLeRaUJp90D6dRlEAC75mbxTW9/I/7e3/wQHjx5BJPJuBephybeXAYAz128gu/9u/8TvnzuooFprBdMQG0IoGHs3SNVN8A70WzxqcPPu9+ASNxLslSJMpJWuv1KZLCUycg3vI/2ru2bSh3cIgFFW2BULVUCNFnvXQyozTmE9g7oHzgcCAm98pnJGA+fPo7v+eZ34Ps/8B4cO7Q/IO2wctvLniyv0tBrdW0dn3ryafzMr/8+PvH5r+DStVudYzSvFC0BhOU7uh49cwI/8gPfiW9955vCDjj3v90ycKmT1s98+Rz+03/4k/jScxeo36jP3jywkSol7uOEWwZ4sQaZULJikXbV1oQx2Ncrk2E8d/aJH+tuCd3XyQ1beOeNlgeKE9FORGJ7neToPN2VUw07CBKVUZSuFuv3hlY6e5EgvIfLyijB1aEDC/j2b3wLfvQHvgsffN/XY+/uXY72acBaZVreQlytz/fGoxEePHUU3/7ut+LR0yewvLKKa7cWcW91NcqeE2nOvZMMgODGnbv49Jeeg4jg0TMnsXvXbBiPIV6VX/199OACjh7ch888dQ637y4bDx7FdOxKHA8ethAFKmwGJFe+ksNXsOOIyRmCITjfB0fRWD/y9cplMIfo2rulK/2eoREdpSK1vjuP/nYmwiD1jIlWAKpQjCw8iDDFMj30eHShI9Ovf+QM/ta/9234oQ99C1770OlgwEo7G8/a+gaWllewvLKGra2Cydg34vjiti0nGo1GeOTMCXz9Gx/Dnvk5vHjpOm4tLpsxdYsIrJPSBwX9rIh7d3kFf/bsi9jc2sIbHj2D+bnZZqTIcvHneDzGyaMHsbq+ji88cx6ra+s07Ix89Z9WxNFqbJSA20ArfaAUyCe2DgpFCJihZbU+20Y2bOLplcoge9/1YTrl7KFZiu49sAN5wpSdWZsbhTpgzhDcwNsZgNfJ93JG1cqwBrIuvTe/axZ/5RvejO//wHvwDW96DcZj3/jiiefa+gaeu3gFT527iOcuXsFLV2/g5p0lrK6vo2wVTCZj7J3fhRNHDuB1D5/G217/KM6eONx0qtal9xaX7uGjn3oS//1PfwRfeeElbG01ji6wXKQXB0q/eWj/An7wg+/Df/Z9H8DMZNzjY2gjj/l67sJl/J1/8vP46Cef9JQu9NtaJOEUBcjGYbOAEElq9CuAsIBiHXkDjSCmGonGF/gB4goU2d19yjDpjLjUkAR/BqAnaxTcwSoyn49V8CDElIeYM8H7/TgRroOe0uywRzim3dU5fmQ//sa/+z78tW95J04dPYTRKKJmKQVfPncRv/WJz+H3P/sULl65gTtL97C4vIJ7K6vY2NwKChYRzM/NYP/e3Thx5CDe/ZbX4nu/7Rvw6ledMnbz+j+XAcC+vbvx7e9+K/btmcff/kc/hYuXb9DgkLwWqt0INHr62Auu317ET/zSR/HQA8fwofe/c7DfIScBgAdPHcWHv/09+LNnL+D8pWuuR+WKkY9Qmz/8e7UpHj7L+CSIpjJA55jqLNq3RhDEVE/nrTDeiqeYIRLdvww+qQ4cgwinAaKzSCkyordEHATevj77Qet3ITQISqbvaixaPh6N8IZHTuO//I/+Kt7zta/H3Iw/D7WxuYVbi0v4vT/9Ev63f/X7+PzTL+Du8gpW1zfMQLbLu0Eyzc5McOb4Yfwn3/Mt+J73v2PwiHc3HtEIN7e28Nt/9AV879/9J1hbX6/jMiCk8mAIFysUAU4fO4Rf+Ad/G088/uC2c4fWZ6eXTfwX/+PP4Wd+7eNY29iMOg1RQNmrWYOBXFcqPQHiOSU7hZGE7D0SUO/nyTk48hi9hORQgL9/GWwOYcXqupa7SuycvFeXZbsJc2RSEjM0JAE5OGJp1CxUbnTEnpOq9+MhsI5lH+Ddu2bxgfe8Ff/07/x1vOW1D2My7k6grq6t49kXL+MXfvMP8KM//vP4F7/yuzh38QqWV9a6J9BQHMFMc9oHo7Ub9+bWFm7eXsLvfvqLWFlbxxOPP4g9837sO0/YGaFHoxEeOX0cm1ub3SaZOQ8hSAA1RULiSXVeCpbureL5l6/im77uDdi9a645z8m/ed4zrvz8qz/4LG4tLpsOGEwLj7fEHWAR7oO92eeV5jBSgTfJECIlCCDMJ6TSgNkkPyUH4cUIvCIZfJVJFH39OIHlqVVZ3bJsDLeBYUY2gYW53sTQ0D9utaty8nqzIYSoYApHLKAP6qmjB/G93/aN+Ps//O/jyMF9ALq5wVdeeAkf+b1P47/+iV/EL/32p3D91iKFKphCu76IuD1qV+tayIavdADYKgV/+qXnMDs7wdvf+BjGo1ETpbP+AOCxsyfx2aeexwsvX4sRwRyfQ25d7zPU8M8tFNy6s4y9e3bhra99uDf5z6thmZdSCg4fWMDl67fxqSefqRYe01MIz3dSCFPNkJGXSoMNO+g6yWDpr9ldxAZzCrbwBB5qL8bnfcoQIoS/EsVRnNE9e5p1KpJWikrfeBGI1FSJFaS8SRVXqJwhKAumX7v+X/vQA/hbf+3b8B9/9/sNpV++dgu/8rt/gh//hd/Az/76x3Hp+q3EDynUcj6JitTbKme9L2mkCgq+8Mx5vPHRB/HomROmpyGnUAPdNTeD3bvm8PHPfBkrK2vQKG1zMhFyClqWzqNTBCtr67i3soY3v+YhHD+8f9t+W1GrlIIHjh/G//HRT2B1dc3pk65rQk56IzbC6xXdjmpHrnMbyr4MsT+OGrwiFfkyPrRqKLw/GcazZ574MdeXe6kwKbZBNpYwyJyTspB6mweRBiN0EB0kC8cPAZlDVdqj8Qhve/2j+JH/4Dvxgfe8FXt378LG5ib+4HNfwT/+uV/Hz/767+NLz13A5qZuiFlCGs9MBcCIkSPPw+y5c/1eeVtb38DVW3fw/nd8DfbM72ou6ea5xWg0wt7du/Dsi5fwlRdeMn1pNOhFiGTk2bZuLS7jxJH9ePNrHsIM7WSHyD4QtUQEC7vn8fmnX8BTz79kwBdiAUf9CgQRkf2TT0KDnTibCMtA/YVnJMQNuAjZn84j2LeYzn3KMJ4788SPcZixNWFowqMUnFQ3Ln4swxzIBhru0RVRCw8Gh8LAGFmc5SN+3x0oDuZ4PMa73vQa/L2/+SG884lXY37XHNbWN/Dj//tv4B/99K/ij77w51hc7p4BiMck9DPvk+jg+X3jMa83G4YQPQB3l1fwyOkTeP0jZzB0ZYPcM78LtxaX8AefewrrG5vdWFg/bkThbA/xyyt2axsbEABve90jOHpwXz9SN/jgaDESwWQyxq987NM2HgE0tNBSOG0v4CgQeXV9mS63kUEIBHryAnGCrPXIwGHzWhqnHWQYuYeQIWpHpf4oXSN7UxocnS2lqgauxiHKCssQwlgEiELG5AqSVEvZdF5FBO/92tfjn/7of4i3vu5hzEzGOHfxCv76f/MT+B/+5a/i2QuX62QZxm9mIEwCTcleVmwUOTfWsoRKVV83F5fw23/8JDY2Nl1PZHit/H1mMsYTjz+I17zqFIoNRN+QQ5rGMoiOV1f2J196Fl+sm3YAkFe7hvjQ8jc+9iBe//Dp2Fd1SN8DIH0ofYoC5iQ8lCzSdjIYb9Q3G5ECRTU8yXRzJLoPGbrdKeqjgDbkROz1KzaprQwURnBzktpex5Jva1gtyowOkHlfbeOfKrwvgypqdD92zc3gO979Vvzc3/9hPHjyKO6trOEjH/s0PvQj/xi/+rFPY/neGsmWFElXVE5kqUKVjkYiRUZAI1FEsLm5hecuXMFzFy83c3aWiw3zsbMn8dqHTlekSvw0ZXAdaYqlBrC0vILf/8xTuHnnblhezZty/Ju/H9q3B9/wltdAB9PtncBCUdB4SuNZ1eSpcd/gt5PB9evgU8wAsy6inkr45/5kmACIa7jEiwrjWxGFwlREb8tRMwFKR3wZTMOgp02dQxMi2hvVuF3XbynAvj3z+K73fh3+qx/8IObnZnHlxm38/G/8If6X/+u3cfHqDeN9POqOJkzG3eOak/EY4/GoLsN2uXu33NgtgWo/o9Goe/HtwFXQPSnH8uvjoVtbW9jcKhiPRrh8/TYeO3sy1At0Urp2YGEPHjlzArvn57B0T8866QA0+BHSjemumFF96ovP4Pqtuzi8f6Fp+EPzChHB3vldePOrH8LMZIL1jQ0aLR8HUSQ2oIJH99bR9/BiJq2/vQyhndlFcWMPqRrJYt1XMJOyowyTYny62ZX6r62oaDoEn0DGJyFooAw0+4jo3qoi6e6yKyWTnZ1MsGtuBrvmZrF71yzm52axZ34O73zi1fjBD34zjh3ch43NLZx76Squ3LyNb3r7GzA7M8FkPMbszAQzkzFmZ2YwOzPB7GSM2dlJfVPeDEYjsTdkTMYjTCZjzTgxmYx7b9Hja6tOnu33VsH65ga2tgo2N7ewvrGJPfNzOHPiSGiXI0SeXAPAQ6eO4uC+vVhaXonoVyNj0+BCPVfgsy9ewsUrN/DY2ZO2Q5+voZO94/HIHmd97uIVQ0YDsVb/wSR4nlj/oWHubHlnGQBa+HCD4Y5C8HR6zKz2v70Mky73klCpJGq9yAdaK2YlBFmkn03UupPxCAt75nFg7x7s2zuP/Xt3Y2FP97lvzzz27ZnH3t27sGd+zl73ODc7g12z7hgPnjyKIwcW0G1uCV7zqlN4/MPfgcl4hJnJGOPxuHmmJ//mlZ+h3duh7zu1B/pG3/qdaZ062r3QLM5X4AgYUBgIA6RXrbu+voEnnzmPb3jzazAj48DXTvoQERw5sICHTx/HcxevOGhrBlnISFPKqRhnLKUjDMb2fciAQk5F9VwGW96h/rq2eYVrJxnCu125P95BbPHrIlGgK4CMBAu7d+HowX04dmgfjh06gOOH9uHoof04dnAfjhxYwMKe+e6dprMzmJvp3ms6OzOpr3Lsvs/MjDEzHlsas90xivFohAMLezB0DR20Yzr3m1e3aA0ZfMv4duJHRHDk4D7bQ2nyjLih6WkDaEgU5ASfe/p5bGxuYnam9yrfkCJlOUUEBxb24Mzxw1o5ZiqBExobA0vSQwDNjsmYZWwvg4T9IOWZ+xX2t65cv+f5xjYymIaMUK0UcjGdfUvX7cxkjGOH9uPsySM4c/wwzhw/3IXWE0dw/PB+7J3fFXL1yXhk38fjLjffbhmwtYmVr53u57o7bYy9EuTfbud5J4dp8Z7bHNi7G7tmZ2LIFgdTJwRHYwBsX/4cQcFTz18M850hPlrLrwcW9uDsySOYjEfY2ip2HCd1FxjrltSLPwNjgsL3j1KavJMMMWPRJf8IC6kTZoj4gftVrirARFOODqkdoXfNzuDgwh686oGjeNWp43jo1FGcPXkED548ipNHDmB2ZrJjemDKafweyltNrFSWDa6F6kOhP/++n4gx9LvVT67XcpydUjFuNzc7g8lkHEMz3JACbUF6ETN8wGvRs+cvY70eWmxFhBa46L3JeITv//b34G2vfwTnLl7F8y9dxbMXLuH8pWu4dWepeyv5+gbW1jewsraONe2ndq5THmXGncF5vR8ZisntfuTpkf8IizrUj0WpMC+gtL/Wn7z3a1+PwwcWcPrYITxw7BBOHz+M08cP48yJwzi0b29zgIcMaicDZlpDAzB0DQ3ekLFu53D3K8PQvfuJYENXlqNlmDOTMcZSJ/T1nJUvcCQ+C1kD2Dbc2lbW1nDt1iIOH1gIfOwEQnodObgP7z74Onzjm11nW6Xg9t1lXLxyAy9euo4XL1/H8xev4MKV67h5ZwmLy/ewuLSCxaV7uL20jJXV9ZiGsCnehwy9NKtQWp9DS/3p8QT0ehvNl2DpE+VWmPzLv/dD3RsmtjFgWPv2IO5kfFw+ZEhDqy9D9bcb0KE5wU5OkXloyTfE63ZX5qulKy7b2NzqTr3aDDClSiHWx5vOSuT38o3bvec1WjLsFN31Govg0L69OLRvL97wyBmru7VVcGtxCZeu38Kla7fw8rWb3buqbtzGtZuLuHbrDq7dWsSVG3dwa3HJeb0PGcJNjTYmg6dDfTpULgQuWk4OMhlyhmzA2Ui3SxWyoltovNPKzv2kTPy7xfeQwfHvITocaTLPuT7T2e7aLr1kvtbWN7rddYsC6AGqcOznJVjli8cBwG0zvj4/2+k51891sq7HY8HhAws4tH+vHVsppWB1bR3Xb9/F9VuLuH57EVdvLnbOcuk6Xrx8DRcud1Hm9t17KOk9UaYCRf0QZDr5exHT6qR5Rj6EahGo+02T6riTOZT7Dxla/p7bDA3CTpEgXztFnJ2Q/H6ixJCxb5d3D0XS3H/upyX30soq1jf0xWce6v1JM4I10wenVH2ad5b8LFfms+Xo243vTo6Uo7RINy964NghnDp60O5tbG7hztIy7ty91z2huHQPL1+7iaeefwlPnbuIr7zwEs6/fA0ra+uqxdq2ZjthbtAV6n7FUHbmtl9Ijx59zCGyIQylLa9kPrFT6tNCmFZakem26AwNTL7WNzaxurqOLRSs1ZcQbxVgeWWVHs6J1+bmFpZXVu0FZXyNRLB71xzinpdgftcsxqPuZQRzsxOMR6NtUVd5L6VLOe6trvOow/JnLrMg4cuc/gwwrK6ge0IwZwCtyf0QKA6loUPtW/1wO5FuM/Tw/oWwi765tYWVtXWsrq5jZW0dtxeX8PT5S3jymRfwmS8/h89+5XncvH3X9VGq3CSrRQX2HNJHbVGZqf/UexNmcMgpwlDvEAVy9FCF6Juvu2MNW9jcLPZ9a6vQvYLNzU0srazi7vIKFpdXcHf5Hu4ur2Dp3hqWV1Zwt74BY3llFYtLK1heXcPK6hpW19a7z/UN3Ftdw8raOlZWut8ra+sum2UXldeMIr3ftLTBk7lUv0mP2s7vmsVkNMbs7BhzM91G4/zcbPcsxPwc5ma6TcfFpXv2x05aaI8ez5w4138KgkHkB4XuN7L+Rept157LWvUm4zH2zncvcgCAB44dwuseOYPveu/bAHSAdv7SVXzmy+fwmafO4bNPncOFyzewvLJqY94d8c/gwU6Zogrtm0xaqZFeGUXyvdW1dayub/jn6jpW17ult7X1DaxtbGJtfR13l1dwa3EZt+8u487dZQuPd5bv4e6SGz1/bm2RAMq45s4BHXv6jsbYMW88c4g1JwbiI4hu4XD06crtfUC1mr331vLY6E0FWr/g3spaJ8Ny7MYndeg7F8d/Bh8ba9YNqQwsn+DQ/r1h7IZSvu0i8P2mta1rp1Rzp371+8xkjEdOn8DDDxzHd3/zOwAAl67dwpPPvIAvPHMeXzp3ERcuX8eNO3dx4/Zd3LyzhI3NzToOPMaw77bJzCkTMwDA0Hfp3gru3lvB0vIqFu+tVKRexfK9FdxZ6nK/29XIby8u1+W2zqiXlleweG8Fm5tbPmBsc8aYl9mkyX5zxAG6P3hIdbINBroRxYUJ50STjVnrJf+wolq31MHqoXX4Y45RyDDuLd4tndWIFKMTy6CH7F1ZtW9dfyE8OFLTEga2oblgjvhL91bx9PmXsbK6hoXd81jYM4+F3buwZ/cuzG2zHzVEL/c31G4oTcsynDhyACeOHMD73/EENje3cPXWHTz74mU88+LLePr5l3H+Ujdpv3DlBq7fWrTXiZpy1OhKweSzT53D9epJN+/cxc3FJdxedBS/W52gS1/umUOsrK13qwFZmIH0w+zNxq4OaEn12AgEvmFDuZ6kNi1lRi0C8SQtaqiMWB6QGoD9DTuzs2TN4s3cv1iQyhchUFz37vjKewymAlCfLRlQ+uCgOk3R7uihfT3D3W7Sz2WXrt/C//x/fhRfevYCFupZM3WKfXt248C+PTi4sAeH9u/FwYU9OLCwBwf3dZ+75+fCqeGhifzQ2LXmotvJMB6PcOLwARw/tB/vetOrsbm5hSs3buPFuor1wstX8ecvXsKXn7uIZy9c7pZ+TX+CyQ//d//C/tLNvfqp+TYPtCNkh0T6+J7eMsbyoLKP5IHrlZkaYsoAOOrGao6CLW2qEYUUq58aSeYF0ab8KIsbrw0OSq0X4d6QjOmaw0lMA82xHFQiiwMymLMR6706wMzMGPvTXzxqrSYNIfTS8gqev3gVTz79gvdUnXMyHmHXXHcKeb6eRub/9y/sxqmjB3HqyEGcOHIAJ+3zQO8PUjJvOaLcT5rXkmE8HlkE+bo3PIq19Q3cvHMXV27cweUbt/HM+ZdtLvLshcuYPPn0+QoqES+FJhqsbQ/UA2icr6YhDhhwrd+etLJzUH1Btt50T9Rja5nE+4AjLzt+M5WRHhk6t+nshkFRRJfEm2rX+ZZ+h7FtUwaNSBkwvO6pIwftDeHefXsPpHUtr3ZAaWouzuL6xiY2Nldwd2nF+SHHH4lgRg9wTsbd90l3LP/owX148NRRnD1+GKdPHMHZekLiwZNH7WhQyzH+IjJo+cxkjOOHD+DYof14A87gG978GnzP+9+BpXuruHTtFiaWtRRf1iuaUpQSUmyzaRo3ixfxjQAAIABJREFU71+Nygv9XU3dZy9MQvrGT8yHteLmKwp3+E5lsW8dWDVSlbm7achPRmVSGkk3ZJ/z9j02/LkAVh3pUtMj1UXvD8WYWFkGvYEAGGYcteDxV53CZNx/tqO1qtjSv6bJlhGwzhKPqGOKKsNWKd0S6upaL+159sJl/NEXnrG6CgqTyRhnTxzBI6eP49EzJ/Dw6eN49MxxPHjyKHbNzWCmOpR+smxDMgztr8zNTDA3sxeH9y/gzPHDvA/hw6UpgaOYvu5ePCcWGuyA0LTioYxIiio0mPkYeXA2TT9UYSW+/a0fDkwYqstpkW9u6byaJ54aJ01hltZ4WtRLZdBfXRKbF7B+SvdG9KpPm2/xokFI/2pqWus3ZTD+NToUVyPx/+jZE/aOqE6N2+8xuRq7OjcXl2xjzzfElUYfkX2cq/6IH6kIIDRG2NLHhQXAFja3NvH0Cy/hmfMvB3DTP3559sSR7v962vqBY4ewsHsX9u7unqNZ2L3L5i7ZCXu8JmeZqFYLGaYasw1HUlJPeRzdG5Mlcy6ztr4K2dFyHX43kRmxstukh16EsJSHw1pehrNopmmImGN2/HF/Ka3hUFHUiI35Ss9cpt9ceTbStX6cwPVkCBFWn39nLy8Fr37wFMbj+Cqa7XLzXH7j9l3cvrvkPChYBVBh4ycZlB8FsBBd718GQLC+sYnnLlzBuQuXHagAzM7O4NSRg3jgeHc49czxwzh19CCOHNiHowcXcGj/Ag7v34uD+/ZgZuILq61oUh8hFe8X1WvTpI/MJCC8DyAqAlBZVjIQF0oyUhWvFCavEIQcnD8ZsVqeoQZV+cvOwOgfUyyE9NBQO0dEUq5oH50lxzQP6PUddAJSNB3ayc+79+ZiQn1TlFaNz++aw+MPntw2rWhdOi4ra+u4dvMOVtc2+ilzYMdcnXQKFNPBMA7tJEPIOtCvs7a+gedfvornX75qdMajMQ7u24Pjhw/4w2oH9+P4kf04deQQTh/vjpEcP3QAc7MTk3li3kwdSOjUPwoLY4ZIvGsYNAOXlB5FZfqKSuxLHdTuFQRn6oFrdlCl0vqbTyxrcEgtQ7U976WHotUwLZ6K85nCSCMKKaBWtA7zGO3H+Q7LvT0ZAjsIY1kN6aEHjuHYwf1RL9I/umGt0qT17vIKrty8XfvhQdcP5c15YmDK0QJZl1GlTRkskS1qh93SewAp00X3ZWNzE9dudidrVW+j0Qi75+ewf+9uHFjYg/17d+PIgQWcPXkEj545gUdPH69HN2wuQGGPeLI0kW+kCvZ8h6ZalvoV30vQ6lVAdbyewRUKoyyvAi2ykXaV2oZbP4lWnuOE+QKK/ZGOkMax7HWAt412zAN8sAvUAIs7otJj5wwRYhsZQiqm95yH1z18Gvv2ztvYMK/6PadSnFLdubuMl6/dAlmJzeNEFBTY6RNiAvwn/XrgYExvI4MEA9CU3pSCuACCIGv9AaBgq2xhcanbU7tw5UaVoXs4TpeM4zPV2RmQjc64rUZCp1YDotZ0B2nFhgzaBpel0ElWcoYeyjIyVT7CODDZzL6RJDQ2unEeI6Ts3nPMmuYY+qV7WqQ71tQHavRsmga16e3FJBkUrNwx1WDqmIjgTa9+VXjeRctb3/U3G+O124v1XJXza9mgHaWmsbRI4M7cS69NgJ1lcAQA+I9RMr2wqNGjp/XiONgq9VaXFq6sreNmWcKIw154k0bgGjUXFEsVAvRph6XUkJiE5xDISjOBnI4oP6VUbWkOqf3U8nqv1N/FQlm9Vw0qDgClAyA0Np7Y+Ao8/LszGB/VEGIGlp2mgP4IQmBD38xnLBYVraYIhbQ/IEP3J6cQh8LsouDE4f143cOneyd0+eLUKciH7tU6V2/ewYXL16uhueydVorx7gAAu6O+oiXGG/3NkZ1kIHRKWy26vFtl6NVzeyk6DvchQ91VVxOnQWclATaw+pC4MmNOot8buaLPEYQEd8P1e0KoLoGegTD3UcO8fap35TlLQq+Od17ZoI+MdMYLyUQ278unhFSEdIaeJqeSc7nMF2s7IT2UbWSIcyR40K2g8vpHzuDsiSPB6PkzO0JO91bX1vDn5y9heWUt8FwbOI6Tgau+LA1Vsya9iYKnYEcZHAi7fhyvGHw8TbdxKWruyrfclwyjbgGDI4GPmr2WEoCuiXsa43Qtn/bKwTGYuKK2GnKeKJozEt8qtAeGiLqwNmmtWX8T6quCmNXCfLJsJX3PUQIl0kcXS7r77DgUzYo6COuF+lGnKj6UQzJwxDBIq2M/Ho3w+kfO4IFjB3tzB54zdF1K7zcA3L23iiefOe86rvKajYS3DSONmY5H3jOpsguB6oAMzIuNS0nlqjLWN4GqgeJ9yjBSm+zstASCYvHHOQlKC06hCqgEegPcFzbMNANbEo3EtFWIL1eQKrK1ps65KAGYGwlo0w1sfL3OrUOPqr5ZFmTIjlkVapNpLSM8UHWYM9HNIRmCxsRrlFJw7NB+vPGxs9i9a8544bEbWnplvheX7+GzT51ToaCbs6IvJO4hI+tL+wqwHe8FC+7LwEBFOG1dsBshfDd0DWB/PzKMNH2IhsaRwRGkQ6fIhpNyoQhM/R55LTNoTQWInVJZL73Sf4oZd3/+k5XkCMhRSRIPbiDMs94X+BvJGaEdnXQ+FBYjWBbhMSKAqOXRzolGSwYCKuekq/PomeN486tfZfc4Slj9bdKnrVJw7sIVPP/yVWjEEusXidHsFGbZSYZk0UpvQAZWgdC/+pXLSt/oEhjfnwwj3fSye+YAyl004LhrG3M65UztpKdwZYQHgCa+xYRoISz7ixpDXU9H6Rl7aJ+912RTfTkDOvkrlrbQmJXSTcqonoV+7iOMuVhbcyiWQ+tlmxr6TTJYpAECIMzNTPDE4w/ikdPHuxoS9x2Gdqf52trcwv/zx1+sf0qg81Y7cSDxyEaMcmzcpV0HBXa0fkAGjRLBFgqXw8a+k5H74zZSJ9L3J8Oo71geHYrob2ebJzMhVqTQUNKIsjN2dkSQKkQ3h/JqcGZnGkprOxFaopN68KJQtAiwS3k8Iz9ttNhGm8lEBwy1L6nRlK0z0dNVJCsLwOK89TKkHDW3kcEnri5DQcGBfXvwxOOvsjebuyo8wuT9hlxvZX0dv/XJz9NUJxp3S5zed5FoBZwCivPQkkGjhPPmNhjmPgE8HRQ1awDwimRovA9ald8NqJhnwTw2CFzHXcObejCnWb77KrVuRHNLXSoRS8tq9GDlQLIh8P/Urw52I5e39EXbG7k+X4Y2lfcQDXj+o11pWsS5USGabCKFNuGgEV5hhhxqQAaPqDwsgl2zMzha/9jk0NWaO7CTfOXcS/jzF18OVuOGmHRkTgYDJaXpsrFTe9mQDA2O3cisM71D9etYFbWzBEY7yWB/MIUn1DpGPJnjXNcGw8KPh0pbPXIOXEadsErrnt9XRDD5ya5cERLpsQ6rI/TSAmOthL6lkHzGlxhdtmveuOtM1vkUU35yRFdjdCKw/ORo2k/LMEiGgMYqcyXFfzUor8pxCtU8RiGCj/zen0Q/DIMARCOOiY+rUdwUeqkI7VU0ZGhdeQUxsGagLL3br0SGkZWXdAISDrxxvZfpO1KHkEsiY6B+MAAzbPZ0CQ5QkhCc92uY8s0Zdkrqk1Mc66c4X3n+QXOVbqC8vKA6EvHgrGj/VYNFzSTqI8ggAgjJEAx5exks1aqGvryyiguXrweDbx3VyJc6yp2le/joJ58kXfAYlF676Nhtc+63kmBNWYZ+OzpuYv+ShTVwKGQa9ynDKDqdo5c1LLRuS/870LJxpb7UUFoCcghlCNbONVJomiWRv4jilIsTHVeEuG2bWG5YXa3YOGaHHj2JYp0fOw+O6dkRAAnL0nVWZOlF1bOlQsXlM3p9GfhytQhuLS7js1953l883EgZWt9VJ3/4uadw8coNQ3WXAT5WKkO+xO+GYjLY3j5SQwaOOmHH2r51+jENWpVC9eQVy2DPf/v5cw11aoidUYqktImEN2nqvSAYTeRcWFQDSKMr8HydL4l1TAP0PcwrOBJWxzOHIhkrzHtwqgJ6qKdIo/dMhg7hnFXqm+ZMHRkfUO1HFxCcx1q3+KKFB7m2DNpvTs83NjfxR194Bn/wuafQsj1OmfLkenF5BT/9qx/r/mqr+jrLZ18jwvPVO8JiHaso+V5fBgYDyVEnoHzUFTuT9fkKZBgZmqoxJvTUfwutAESiXtUnwVSFo0PKAdWDC71tTm1fJ6i8fEaEGtGifrYmxMEoCGaF6CbZObQ627QCp/WtTuQvKj/zpewK0VKemE7sqykDUopRZXjq3EX81Ec+hqfPv2TzCb56x2oALC7dwz/7xd/CJ598uvtbEAQ6wbEkF3AGEE/SBq4TYDGWt2Swytl/xP4Z6EPi71cgw3ju7BM/1t2n80AV+UQiU+YenNL0+CRm4IOsyBqX2pQiRQXhk6USaRppUlKOEgES4pKpt1UZ6F79HlbG7N1KXl+q4/vEnzYFqV4XfMT4cLlMUTZgvCKl49T5Ox+xaMhg6gjZOHT179zFy7h+6y5OHD6AE4cPhEcqQeOxtVXw4uXr+Jlf+zh+6iO/i6s3F+l+jEw2NpR26DKzL4EXlMaL29xRLOjtKEOI9hGnK510ZF0i5r9SGcazZ77mx/pr1dy3H+y29WEVrpTGA/GBnY6eEfBjEkrRjJEQ0pboLO/mdiQQnEzPadjgA8oQErvlwVMdgwSiVT+qLIEXNQIy1vhXacjZrJ4DgsoaJsCge8RRTwaI69SONzt4bdVI8eVzF7C4dA+j0cj+Xp+I4O69FTx74TI++qnP43/95d/BL370E7h6azH0SaLqiBILOn7phLMIgVwETVUJO8p2MnTqKaCz5M6bDjnpN/wRxb+ADLLwrg97QsBGWb0cTKzhgUrYdwzj3TAlKOyd3ie5I8AGC/+Zy7O9Oy1xmNX6itq9VAvu1MWNLm8Y2Z+BSnriyNHRQd0EUjrMIzOK/n0g9k31WGCWwV72RlWHVpD2zM/h8bMncfLoQezdvQsjEaysruPyjdt49sIlXLlxp9emf20jA3xsG2xvQ/H+ZeiXF4sSodP/DzLI3nd+uKiXSB1U1DdGlAB12hrJ4xInNPi8fNsa5DD5MsPYRjI2Hq5nhtTx7nU9tjUjQsdE/MlDqjQkaa034jB0i/WobYg4mR929pL6ENdLkkEdQuc7OSVxMoXK+3W0Jt/PV8xWdrK+lNtoi+2caEpkGFlupWlHcYOgPUc73h2ioKKh/rQJTFemO5F9VIbdDzwJyFWJtADdiweKl1taBfhEzstMHvZeyzOJX7oHDcPMl0j8ZJGL0mT5WVYSoNemhE/7rsZRx8L7a8hQYH7CV4g6SrPq24/hlNAmIC031fo5khePlP25qZ9gsPZ+M2DAtMkw8omvHpKDDXLRmrpJVo2Ppedfzc0ejgAmfcmVTPpS0spwANtOk72d10Y603O0nObAfMD5FpWpVLm9n6T6rp7ZqCSbTyPCY2RdOWgoRZ9DSKg7JIMBSolyMbfS6y8QNB5baYeBQ3b02rxPsy9fhPmke2DqZBjxLrReBsRkKLb2zl6llWu4S1YDMy77qZBejUDblu6en4Hi5Vak3JEmm9oWzpMhSCmk26wMktl4pwHIiK4R0groJvGpfYRJWzXkjAHB2EkOu6cyWJ0hGTTi1YhjAKfNIkgVe0CJ+2s4oMneL7dzVsKVUkMCwG54lS9ptJkeGUZsEJwkOappaNF2FHREU4xangcZtggXmcroUBt4OJS+MwbQJXr9oARdzXHspTZkfeG4MDHnswodPKGoRo4Z2vltllezMgMP/nSJ4Gd6lQ5HnWEZQscqe/Rm78VSXpalYZyBZAk+b+lLzzG5OUeHsIAe09Te9dWXYeRnxfkWD5yGiwpQtLKRiTVkIwGDVPETMA/vpV0kt+bO2UEs3DZ5qM5BYbYAPqGvCgtTBNa19dWgX2K7JArUyTsHJxoc4fS3tHZ+yaMaMiRm0DcMbePR0wWjZrnPHg2B60iavbeb+zh7BNeigcjyVZZhZA+sFH3YBoij7J5qUSI7bzBOQuA8H9D7QgNdKqImA++jKDlWsX+cRc35M09UZkvDAHTDplRjj7vBjGaxr4D0pCc+qOe1SVEqbuCTz4glkChVfyZbX4augA2E+eFrCJGBlkeHVJNoOLj7KYPW5e3FPvI5OeHUaIpkGHnK45MSe7WistUwlmFeXSjJqFeYeYpKkuvAkbkVEUH3+Xcjj7TDd+A0TPpNaorCq1D+qXGTdqR77Hjfvoxod8mQpXv3VJXR9J9407+/YWnZgAz9yUk9n9TjcOjqt2+BMHcZVvu4ZYoCnnXwuDjie/n0yDDqA3E9xcnHFhCF5By+F/okO2U/n4uM0m8yRvfkUgMJG6pGssw59VfpSeXRAbh4XU4srZl7oL7KxCrxKww5eBAa5eClSO+beCpWmjAnvgy9tpEhCE6A1Vt14+jDbVmJQY4h2soPDRIvRgyUc8rUzJSmSIZRH+z0aAZ15GEkZkvFQ2F4loIdJYeuxHDmW5m3rEpXn8jTSpH4FpcqVLcCRsqx5ckqAuX84Z2p6njGAB/LVnqUd3LkEpATikVXIceMO9qdcxdqVitFvgzBhmXwts5PSaPfpSY0jmGyxGQUcDxy+x9q6WTyY+muBj8bSYsCzqzrhXL4/sR6emQYmYOQcbgxeJ+F7nX0S2SG0qSAZBziszNoWLRQSwZKUOu5XnRKdx4xJdxXmK20+6dMnV+jwxGnR7w4+oQFCHJKks9JSjLqjo+SdToIpwj6ccJVV4F4HqcGzYygzcsxW6uKeGkvPa5tnKw7gW7YlimUYWQHs2gC2f0U9+aS7EGSddSfnkrRKc2wkqRtiyPngMfb7jN5dukZJykqfzJaqYeR43j+LlE7pCyWU11TyztkUf4k6YT4VDpCO8wZxer9cO4/TnDaMqSXSLcdKJup81hCUTYV7TLS7J89S22SVca6hh4QpKM2UyLDyCaAhGoWtdWrq12bQwf6bipuk25kVp3bNKJFXCHKB9zo1CyovvZTFRnStJQLFnpE1pd2OsH07SIWqUhxhctKFD7jYWG+VGm1rPmcQP5kUGmBYJaBnN9eJbrttSOEwgBAuwkAwydw+238+1A/UlNaspYpk2Hkh+L8hqgRBEsmYyCn6qVHhraApjO9E7mZDzVgRszIpwkTbrBuOWRzNeMnnpnnpT6xRhLaSFVeId2oE0qgDQpWZPQilrPynxf2JUcKa9SnpU4ZNLIM9V7J/ISmTMRXu3rPtKkzcmBlfhpPrTUW1Y1YbyndWGg4/BTJMPLB6AtnL/yundFH/eFOwKsoXWrug2pr6dxLBhKOFDm8VAYcgVUa1l5sZ4oxhvt89jqngGPyAQYYPhBRJ+Gqssq2ilM3pHmDReS4gBDbJhn0HqWhyp8al+MJuWvpq98E1ZdahzRDAv+2QdpUAFwGSXQk6WMKZRjp5JiXVwv8vKt2K/U/fdS01MGueKhD2+vb1u7tVjXk4J1uhsW15cZS21jgaOSEdLPjtyrY5kDk9IUjmTmR9+yrSTFSeSxhmYLXeuWKhj6YfVm7moYgDQOjgW3JoHpJ9UX7MwNk+FWLK15U25q5FWpnLQaiQSvnb1atvAY1TZ8Mo0Lhmu+pA9dxJaE0lVD6tOWkS4QmLLsMG664ExYVg+rzfEJpVdpstqGNKcLr2nKfVa/OXVxn1jfDjdCufTEx3cs5pbPoxQ5Z6VOaVFjvjBxAGqZ+2aAMpIP4PfEY6jAd5bPEtnQ7PNuMHZ43UBwhWqEmp8VgutMjg0WIGF7IK9A9UdYZCB/m00+NHYnxEn92/JPVUUrTY01XXRKtojQkF6KBVKLg4yRKHqwSx8eBpy4jFopwDf3QIMRxrjOErCceRIoUEgioCsQdcxsZ+srrX1E1HImpr9C5ddQzSl15LLbMLNZHWrk2WmysDgzTKcNI/+Qup0w6kewMxjfqWnwra4yiKm+Qga2D6hjzbNQhIhWrFx80UufSB4eIweI0CURq18X7yqgf9eMRxin0v/NtUn4+PCbWJ0dJoZsS6Vk72UaGoCzXRY7oTJPz8HzFAauglG7yCqAxMXRUolMwPxseMMHITo8MI5vsMnBXBpSvYuV0GK3S7wZJHOXcfvu6oY6CcZtxZqOQpAmmp07AkYQjG9NmRxOqJ+keOUtuG8INaZ1lCJEqy0eOkHQReSR+cvssQy+0UIqoPGT1bYfG2yI1Oy+SQQ01vI/Op0yGkWJZv/9quGZjxFhGf/7FyMWD3HuegNux0NnbqNRWsTrjCs8dIJXB67mjMZ/Jbf11GgiC6rJrP1eMUSkpe7i/ThqnqW29fS8dHpLBFNO/WnPdXv/tW7X9tgR27OM+mnsfUyTDyHKtXkbgnuqhWqB/UcgdO4U3wF5UYHMPEQtzQ0YeURscluBHLPiVNAiRgXcTzJmFf+lddRzqmxkr4C2K+qFPfUGzgEQXJkNRGYJeOCrRfaNSXJdofbZl4J+hot7OixP5fhaiAPpXfuIDPdSwRSxfZaDcbqd7UyTDyGy6xNwtrrnX/9TwhDNkQi/O7UTHPjtCsf6sNqFlYcfQlIjyQDu3xDKaE6V0g/rxA2POo5FgpUt9eo11ojYYDLfYBqbzofG2epVFLD7Z2v3T26dQApbfOgAMyWBOJ6y3TgZzzPqdj9X4+LWBkN+20t9ENCEgZAeFv4S5l/atPbolCwPHlMgwKsoYI3fp0LeYkVUjpLxfghYQDCdczC8bgCElQruwEgX+SuWFfppOVdHqSPpViAePKODfgEU+fe5bakTU5xFC+0pc9zNURYVDS0CvtMMQutd1LBu9yqIbzaAMKndWeon9BTMIE1KKioUYsy7UuTMltgPlk7CWh88c3HvMupgmGUZ+uyJxPezn3ldXmUKaZDxUBdCsXbysJwl5Ru+YRagXVKYe2peJwkQ8KdtwVCYn+koT7Y6MMfNrRdnT4Ue9A9s+QMZXdv4knySerYwHtSGDB2d3mn5dQmNKN4kSySD1e0VPbpuNtuHh0rvHqzmpPYHCNMlgDwj5J0UGSlWK9B6D91QmpFDJc5MCwmSyxHuxjMOnCuk04+50oseRzOYR3taOzRty1MhgPBYbmJzvhoUndQApoW04tsL8soxGW0zXxlKhz21kMI9VGYTq9v3X9BjvV4sUP30A8Pur3LRMa73VNuILfKuPLv5cQyyfFhlGvPrJ3sfnZYxudtzgbKkD4QpKx+nzA0XZd1TwwDS/GS/xF5mk7/l+YtvzTD3OrTx2zm/pSuWHWGPBPatUvjj9IX55/AokGjojo0YmH/tBGQIjVq30avicqCGDkabTvazf1C/z3Z8gS39MVTai1V4B+urLMLIxyGHdEnTUQXdDgTLFzpRzn9IoS6L3lki9IUkJNxJNnZJGQtwytovfKxF19DxVNGydJHuIVbRnRYfgxtHABYFOyp2Os6X0uG+xl8RRbLUIUoZlYGUG3fWPOEt2cKptB90kPeSTwJEswnTROgLhiyA+pp7uiP0OIz0lMtgjpIbY8AeEzNtoMHSVKfiOcafeGG/oIb2wgSYShGsHCY0KVb3CivKcQkTSyV49d099atBUxw/KLvXV9d0cysqMx65zRhxhGXJqkMjXaG68ijk1Db7mWNRID1cOykBlgDuu/1Fyr6JL4FRUAaAkGUrQLe/1BJtlYGrEq3gpcjIM9g/0TYMM9gipnbMvjq0a/jWtKghtA7Phh9lrCfeLMaJIR+FTktIs0hUimw2PQhQz6CxQqKTwSeVhqY8iRH5bnK5tW58JvdzAC2zDwuErKqm4bv25AR0hqPK6n7r61ZIh9A2jSSHVVNOEHU7vlI7Ee3xwktmIz4oM6QI12+WTywJ7g+MUymCvoTE1K2IHhE+MS/qtdRJzIapYLTfEsJipEhsaI7ZNAJqYolyfBKayMHD0vSPbNzSxZdgqYxhEOsKiiOad+sA7tQbfJTp5SAPEfIrl78tQNSTOQRSD9F5S1NK6xI85KYFBCfe3RUIirpNnH/+Ox5gu8inUaZFhxMQ19+sMVKB5NvtrHo+wmx0koe9sq5xLsiezzWRbEnVEQkvVhgDIzmAhqdTB6fkq7Ub7SlmIOGTc4diKtlH0Vk9uIYiSUx4LfWeaNrJebH1W5lsyeF+esxu4qPxA1HUoZ3oMZE48qCQgZ+038xNcodIiHmMqGQFqGmTo/iwvR3Nul4zfUL0o02R42og0YdEfjUuRlzqwsJmUYZs7ahw0qdZjHbbbXNMeT8NKz4Yg8F3mzJykMnW60hdEeOhLqm8RINNpKUM7zn3D+m7JED5hovedJl09FhppGBPnf6O1Zrqe2DR5HWJsimQILyrrP93mZHSeoTN1oxzy/xIZY2NiSRh586AnZ9Bowmv25oyDSkhtmB/ro708GAT2H1BnD8c8ihoB/F4ICyURtUbkyH1c8T5y2yjD4HPLqPdS1OKoblPbUs+ahXrOEO/0lsRPUVswFbgd9PdvSuRtSmWoq0zFBTLmnctufGvn1ZBtkqROot89QfQ5hKU0HkGMSY6tnJ9ZyiJ2G7kPXaWy1aoS2+g/hfowRdO8g/0k1XVeSKYc9gt9N5kI6tgvRcm5XJZB1XZCegi+lWTwP+rooqsMAoqkBeDHWXn+pqPJRqlvLCygKEg8VyKw6Sq/OKDqy1fk9GEp51X0r7IKpk6GLkLwhM5GoO5MGxp6CtQL/SL2F4aCZOAyuLcWmCFH1CZn7IVMMcDtbepYm7RRJCkKFFcQs1qYT5atpO8MGLWwt8gAikzipS67OgjrhfpRpyo+lEMycEg1SDNAYSCKffC6u7DDa101ahfZjbvQbnA+0h/GTMdDghq6evVeAI/pkGGkNlk4nDCK2US2BEYYGYOQ2lFvgPvCxnSL2ZJoJKatQny5glSRfpCM6Tn8EIBZvW5DzGu68fU6tw49qtI0ejibAAAPLklEQVT+QfDDvIMrMNQ0LXcy5AzT0zy/OSRD0Jh4DU8DyNCC3qMJ9mWEj40LBd1dF15MCDSYlvIVYDveCxY8HTKMNH2IhsaRAfATl36aKXUdhCIw9XvktcygNRUXXg3fynrplf5TzLjz/KevJNrhpKgkiQd3KOZZ7wt8+ZUR2tFJKs/hUBvLIjxGBBC1PNo50WjJQEDlnOhmoTcXMC1mV0gdSXsByLq+xPpFYjQ7hVl2kiFZtHU+PTJ0f1IrhTXfnVWi3oHmdYqvDvYuoNoJb7xZKlQAn+gQc6a/Tml9hGV/UWPQlx+UnrH3DtPxp8mm+nIGdJKnR1SMpPItJdSz0M99hDEXa2sOxXJovWxTQ79JBos0QAAERdigx8LlML0BCmJO2NsI/A/q0MqdDK3zR73HozmI5Xr6YMpkGPUdi3aJRX872zyZCbEihYZwvoi7ELUjglQhutoX3Vex1bsLtQtb9lIP6RWKFgF2KY9n5KfX3GuUFJOJHtjRvgSIRy369ApbuUaXrAxNMStwhvmcxHotGeLhNTYqOhIjzqeQXlVvvDmGql9ewYl/W8+qNMXpfZd0XolTQB3zKZNhxALYLYV4MxBJ+S0JXMddw5t6MKdZth1fnUaIceXTVyHicprWZweJSuT/qV9Fg0YuXz3b2xu5Pl+GNpX3EA14/qNdaVqk8hqPGeKVXy8S4is41IAMBgzEei9t0DKhe0Qvr7roWFv6HCavaohJRzofs4ip5ArJJj3WzGGmSIaRFuQDUCV0VEKua4Nh4cdDpa0eOQcuo05YpXXP79uJSL1HduWKkEiPdVgdoXcS01groW8pJJ/xJUaX7Zp3rTuTdT7FlJ8c0dUYnQgsPzma9tMyDJIhoLHK3G9RVcLEEzQaoEnvdk8IBgMrjomPq5F2gXupSAkp0rTIMLJyerO0phyKUXG9l+k7UodlMBIZA/WDAZhhs6dLcICShOC8X8OUP3zCTkl9copj/RTnK88/aK7SDZSXF8CfIixe1rGi/VcNFjWTqI8ggwi6Z4cdAUMqsI0MlmqJIObw/s1X1Yzh6JfJh0OUtu+Rql/s2G1z7reSYE3TIkPYqealVGtYaN2W/negZeNKfamhtATkEMoQrJ1rpNA0SyJ/EcUpFyc6rghhe69iuWF1tWLjmB169CSKdX7sPDimZ0cAJCxL11mRpRdVz5YKFZfP6PVl4MvV4o4nUKPIYNXRlp6sheqproVk0H9IhnyJ3w3FZLC9faQpkmHiUaNSFI8DOhcofL8hvEkj8WvrWQdeDSrWl/fd2ktwQcmJeFakfFIKZ80CD37Dj434RBqsNK8I88gWzeA0kY7/dOVIvS8gWYkey+9Bri2D9tvTFzlS2Ak2Nm2EQj9uiMR/CQ3pa8oWuIvWGCo9oBFFpkeGkaFpNcaMnvpvoRWAwBjx75NgqsLRIeWAapT6MJL1qEjI0SX8pRk67Be14RCqyJBy8xBXhegm2Tm0FlKoZ1MaAbRO5C90+v82dyYLEtsgEBX9//9MDlYVDyRPcov70tO2xCYo0GJPTrkkbgFPyUQ6nddVhzVKjDl+Vz8DX1LtaXFxh/yY17cL4M/S5kp/NZ/8mg6/CqQ4oqs9tQTU9PrvDcjbeLog2PTmc9KmWB2Dm2xvKHS5mtWnvrBkyr4MHAsR1V6TbLwKRjk5WhZ70CvH/MKlEJEpuBTbQYIrUhynWmN/0cE/O3xq9a9xmjGafTycXcnFJR6Ct9lrE8b8Uxlf9JvbO1Csxed0+M0I08pA8S53laOGFM9rFUlqDz37XkLebaxY5aAyqsoe193JvLfa0qcM1VYMbC3dHI2zeF4yjZ0Z9uL1MfdvDt3DewSb20nf0pXjoINqbbf7poNsCnvwhHKAVr1qRDaWaCVbHEa9gTPgXWis/1PozEVaJ3gF5PiaDj/WbtpRTgsRQKutb5cEJc4ZHEa7ll1Wja+cnenx+K3gW4sBk2ZQ9I/SwsyBICtWHbDbQS1BBwhLltyBqQzolB6xn61eGxwe5fSKmKTh+dm8iXyct3ke5AZ3HTj5rmdXJvyGZe43Rjk603vLtBScTfj4Ze0p0Ede5s8m/DUdfhpc+9UlO5tQTx24rswitK3BCwptNF24v3EghiIHn2j853HfZPZhxshG4f4D5ZNLTtCIPhqrbRQWw0IefxXdPpHM835DvQ0Kl//HduLt8nzr6R/NCfdIuNSrPtzslO6v3qtQr1+FiZBN9pr6NLe4BslXdPjFduZCTKWdaAOm493K+CVpzzCMUq9QtbKkDHPsXgakI59Y63kJVSKPhv+uiVxdsz5EDZdfkLdZRYftIBcn7JRT+mPwuKPd+8SlT7Zv/60susei+F10EDiMKGmlu2guOdoMxmo2TzA3J83EUIWrglVNSj9WAubnm+cU7kM6/Co96ZDc8iCnWmqTLJDOtjYtmUytVqFGwS6QD7Ixq8zE0JU9UaBv8GTr5785P8kaGGU3yuGDfUSjxvHRw/66AwiJHE3TCY9yGU0xb6ll6p5p3nQwoGTXi9LGwa8RtIwFiqv3vc21dveT5qlfSxHT9mt9ToffPJO+aW8QroERAgejSo2VD49sNTY+dHRaS7hcRtBqTTxn1dsJRykrs9DIROcFBMmEbacxoLNlxwBMRFeG9AXc5CRr82iTtu3Ix8se6ETQw/ekg9u86aCMtzOOAU7dOkil50/kdwlA635e92pZsNHoCAB8hldyxaXPd3T40SHaHN22V2pRPySdwHl+OtGqtmHm6DrRYXeodBhnMDbQBb0zKS2t5hT2og+8rx0XhnA1o9LgBbIaArP1q9vU13PgRwgpMCTecy0q2bLOuw6NsXTv0VxcXPJSl4tzNpLZYt7lyxGY7M7sIIkAgrdB+4gOvzorzlscOKWLDVDa2V0nsYtuULBp1b/XcoQfZRf0Vu08A8Tp9irDDg6k2VyrJvTbYG2KQFub14V+9n5DlaUgfwIcNOaEPxTAkxgi6qLDEGadjqE+lT1LMXSbPA8ascpGc2nzr+41zpXBdekls/zPOvy8BJnacFurj3JFqrPEDN7mnEDgOR/Q/cBA50bU4eC3pYhWikwUUM0/ZcI1b3St5ZWM3M7el2yJZp1XQ3rYiQf1qjUMJXWbnDwjNkAit/2s26nDc4EOQnn4eUPktW4R3UpN0Chwr1MGt0/1D3/Nc3J8XuFLOvjNfUazFELCGS7O8i5rKRUT9ZLCIyvFbLMKmW8ZceE+f1/qSB++WyzD4uyySxSuQtW38qaOep82aCVeS8fPxXLk8P92MOpLX/LabwVxWfaiwzk52c+jHBK+fc7+NxAmy7bax54jC1TVwXEpxK/r39HhdwLxPsW5NzrOg2ZATv69eJ+/z3quC4rfcMaK5NyJhI6qTDYlB79NL7aMBcBZbVlYultFoF5l4kZ4sq5lIqDRTF5Ceq+gyLfnhHnIxc3INx2a4gCsY9WN2Yd9acSmxxttyYNB4mLEy3WWTNdK6UM6/E6wCwAW0WgHBvllpUKeJ9EANsGO33e5JbyrKp8VqkjLjBZnMtizAgbjeHlyq4CaP5itFHgWgMeyRQ91JzNXLARhOLsGArOCYdtq6XmKsrmzFuSuTHnXofqWPDlG/ylNMI5tskQyApzK3N793fapXeUyQ52NxKJACVt2QQ1/Tqy/o4Pf/k3nKGconol7D/3swqBMakjGFD+DQWnRqRYOCqjlufZmAwdP2Aj/Kc1u2ucp05LXdJhxDuJZ6NMWIBCU0K9IxnDqR47jwOQrnK5mnyK8bdWIz3G60JwIev0UZqtpRF09yuPdp8hWEGjDNj+ow88HszCBfH7WyU6P8wIVSrh/VinVn6nu7eR425FfIt67z4jsPJwThprfRCtFGAKn6vfo1oGxqKdCU9cfZJF8MWwCOUUnsMM8UWzfD6639wnOXYd25Hy9BNB005Ix26XpKmLZafba/tJneGVva/RYsfqJ4q/o8PMEEKjmrK2o3n7tgG70y1XKJ8vJ3Jx9LtmirxCxxltLKbfNvbBKJUO2Mm3UgokjyrW08yimt4s4U8FwyWvZlZ94mJRLRtvXrs8JzG+Cyg0Epw4Ifr9K9M/Pv0LoMgCITQOYeYar96m/3/jELmnhLR/T4eeNDoSa3ox9rDZN5EuOaQ60XUvlDB4YO/URb6PtumYMplzfoG2ZstnM8oyn6rDUF+4UrY8O8SVsoyCMRnshWcHpo06kBuY2teSItAaeLp0maEwd9r2c8rSuJFKrXXM3ycHIxEp55lNu2fB5fNRnXM61jGojqXxFh18NxqmcnpXPzQxf+0cFAVdRntK8BtVr6eQygYSZYqaXLUAhsLSh9Xo/G8YCn3IezJFwrN9aBgw+8ESbtM/WNf40nMIQ8wZn5L6A0PsOHXQPZajkk3MVniBc8zS/FdVLrVuZEU1+b5BeDbBKhxh0Ytjjgzr8NDnm8qqe/6otdD18EX7UNPdgbzzU0B686+k33dqO3KKz3DDLWuUsu48Tx6UmxM1H3m1gz4EQ9MlM5iAqzrWa1DMVjzfXnRa11XijYQ3mqevT0ghycTAM7E0H2WW0D/GzAxJ+5XFZl3Zfu1uin3u8ZINbzX9tumVtZvqeDr9EuuY9BfAeVyilUkL0seWkJUIry5Ch40YFYUoNtOd8QrQ2bbpt62NDVFsv97n5Du4sm5k34Sawa59Ws6KcJZ2zFwNy00eZlLQ7kWOtMUzntVcdYIP+95CxtSEdyZm9L24XygpgCjznp6Y/db+1ZFm8SPc7OjhD9PSCqFjp//6YCoQmm3LHEDz7z0d+eB1KmkM0rboMWikaMS+uC1KFwKdI5Bys7ONTwLOXERMZ7mIfDEIf5z1DmHbiICJTRCMgE0QF5h86nMY7P900zMTg1Zib0eGUWnlMLzOHeYyVa9OisxYwfFOHn/7zCksmTSQfh6mNupvcEo0oKn2bDvQOtLHwdOqWkdLt+oNGCi49OAQBs2gCRDbrLF4T9bt9KsMUhfNv3obx5+GxME9mycDN6PTcL/7QoRmrbDEzOmmyDp+fPmAblMZNrgBaiLejEo+B+Wx4wwST/Y4OP092CdxbAMmVvo7DaJv+M0hRKFf+e9oGjJpz2zmnU8SwBOkpCJhJmNlIm4EWaBfjHoJl9m3pBlanDi1TTf0QCMMWXUbIM/tPHY7UghJRMkzz/YXGfyI1g3cNh3rr+B+Yf0yHfwAjBO4Lyccm/wAAAABJRU5ErkJggg==","overlay":true},{"id":"Erlangen-2011","name":"Erlangen Luftbild (2011 5,0 cm)","type":"wms","template":"https://secure.erlangen.de/arcgiser/services/Luftbilder2011/MapServer/WmsServer?FORMAT=image/bmp&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Erlangen_ratio10_5cm_gk4.jp2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","polygon":[[[10.909347,49.529292],[10.909347,49.65211],[11.077808,49.65211],[11.077808,49.529292],[10.909347,49.529292]]],"terms_text":"© Stadt Erlangen | © Aerowest GmbH"},{"id":"Erlangen-2013","name":"Erlangen Luftbild (2013 6,25 cm)","type":"wms","template":"https://secure.erlangen.de/arcgiser/services/Luftbilder2013/MapServer/WmsServer?FORMAT=image/bmp&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Erlangen_ratio5_6.25cm.jp2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","polygon":[[[10.905885,49.529259],[10.905885,49.65197],[11.060541,49.65197],[11.060541,49.529259],[10.905885,49.529259]]],"terms_text":"© Stadt Erlangen | © Aerowest GmbH"},{"id":"Erlangen-2016","name":"Erlangen Luftbild (2016 5,0 cm)","type":"wms","template":"https://secure.erlangen.de/arcgiser/services/Luftbild2016/MapServer/WmsServer?FORMAT=image/bmp&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2016-03-18T00:00:00.000Z","startDate":"2016-03-18T00:00:00.000Z","polygon":[[[10.97664,49.537646],[10.9910133,49.5339157],[10.9938879,49.538346],[11.0278442,49.532545],[11.034604,49.5346153],[11.034065,49.537588],[11.0431829,49.543213],[11.035569,49.5530346],[11.0383994,49.5584249],[11.0350756,49.569291],[11.037905,49.5865909],[11.047966,49.5902015],[11.0492241,49.5936954],[11.0574886,49.595209],[11.056231,49.5990522],[11.0512678,49.600304],[11.053513,49.609036],[11.043093,49.613809],[11.040757,49.618232],[11.0284955,49.61735],[11.0192878,49.6189603],[11.0152,49.613722],[11.005813,49.6144788],[11.00639,49.6193095],[11.0008274,49.622103],[10.9856009,49.616515],[10.978369,49.617534],[10.973698,49.6249544],[10.9653888,49.6255654],[10.9606278,49.6285622],[10.9638168,49.6317624],[10.9547438,49.6379],[10.9483658,49.636998],[10.941853,49.643775],[10.9273003,49.648371],[10.9206303,49.639631],[10.9113552,49.6377259],[10.9242909,49.6050488],[10.9220451,49.580038],[10.9122086,49.5700778],[10.914409,49.5618046],[10.9235273,49.5584249],[10.9271206,49.559765],[10.9334537,49.55892],[10.9307139,49.544671],[10.930669,49.5322541],[10.9405953,49.533245],[10.9548785,49.5302135],[10.9719915,49.531263],[10.97664,49.537646]]],"terms_text":"© Stadt Erlangen | © Geocart GmbH"},{"id":"EsriWorldImagery","name":"Esri World Imagery","type":"tms","template":"https://{switch:services,server}.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,22],"terms_url":"https://wiki.openstreetmap.org/wiki/Esri","terms_text":"Terms & Feedback","default":true,"description":"Esri world imagery.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAXEYAAFxGAHswbAIAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAP5klEQVRYCcVYCXRUVbbd772aU6lUqiojIQEykUBCEoYgIEIYTaKAyNChaUVaW/9yQNeXxpb+jf3boXEAJwYRtYXYjoAiIGEIKEISIRCGIJCJjCSppJKqpOaq+88tCCvYSNu//1r/rDrv3Tfdu98Z9jmvBPz7ItIUXAVSdk1pBx/f/H8IByJOmjRJxhjj45sKv/bpp59Kt7rnpg/+myelVatWcWv1Fz0dpJNOI72LdCZpGml/keiA68++UP+b+49/6QN9LuxzWxhNMpl06sOPPJo6ZvSokJCQYDcZzaxUqdq1QUGX0tMziwyG4POCIHT1W5Cvx4HyeXg4/FP5JQD7JuSTxZIuffiR/1gwbdq05NGjRiJIo2JV1TUeCKJXpZD5nfYe9Np7WWtrG3M47E1mc/eJ8jOX9nxc+MN+4HRbP0QyGnv7Hd90yBe/lfBJ+qz22/nzF76Xn58/a+UfVphGjhwJMpvP3O3AsJRkmRwOeWTSOEWXV6fwMJUySGdShhqMYYbQoHSNwje3pb74rlZzD39BbtFmUj8pn/+WlryVBQNvuHjx4qAtW7a8/sabbyz99aIClJYc86SmjRR7vGqx6IcGlDW48fmFOnh2vwLRNBCh0x5Boj4Eg9UCG2xSsaERSjY4TJRClC6h8kw5nnr0d7Zms+3jtLS0l86cOVNDALnwEOKA/0F+DmAAXF5eXuiuXbv+vrVw64xFBYv4BP517xTKtlWF4IA4AOjoBowM2mAN7DY7/PvepTvIIJOWUDooASd5UJAwKFzDfpca4ssdEQy92if7csd2PP7444003wrSwmuobgryZi4OxBxRhOKFF174uPCjj3IXFRR4HB6fuGFvhfTYjiOo1doxeJgPyQmViIwsI1AV8HXooPSroTq0FsHMA6O3GybLOWh6a9BQ2ywc2F4tblj1vnjb7XG+e+bc5Z8xbYr+Um3NPS2NjX4/Y98SSO5qDvIGl/8UILdowNSfffbZK+s3rP/NkvuXeLtd3dLKopfEVdb1GKarxmDtUej036P1/Ba0nyyF42wZ/JcZfDIN3Jn5sBW/BytTwJI0HjZfCIZF9OCOnE9hHLUfrz7+odjZ2SOmpiZ6QjQhUtH+oskpKSl+s9nMQXK5was3HNDFgPVoP3fZU8s+f+kvL8EvZ76nDzwjvW1fi3zZ7aj9vgVVRe0Ii+mGLjwRqgG/ArRZ8Mii4KKYd0COnprT8B98Dd1Tn8eQSANyM76AJuQAnH49rB1efLDiMHAH8Ma4td59HxyU7Sz+ClkjshaWV5R/0g8DDa+aNDCgTQDcM888Y6Txqntnz4VSrfS8efxt6W3LWkyuyUHZunq0HnAjPqUHWfOfRlLuJkSnFsAUlQpDCMWXSga95IZu8HB0x84Ctn+EqYl7YNSvhtupInVBMgDzV0wF3IA6RS1bX7jO/eyKZ0Hgnn/ooYeiaG3OGtc9e31AJ7k1WX1L42Pdlq5FS+57wFcvb5QVHFiIhL2JMJdfwojZ8UiZfg5Oy0xExD2FIMVAyH0+KAQGiZ6WKIKcXglOJiF9iALC+Q0YkrET6vDJcLh88DAGl4cWodoja5Sw6eyHWDJliTQ9e7qn+Lti084vd3Je3E/KJeDdPoA8OHnsheXn5725YM58U5Oz2V90Zp9Y8dxJAhWJYQuGIGqInUDNQuvJOJhM8QiLDCWH+iCXSQSQwUvAjGorJgzch5FpXyE4shele0QMGqODoBIJIFcBbkoDrcmICztrYdFbMX/MvUiMSRS3FG5JmH3n7B0/Vv3YSVg4NpqRhAq/VFdXxwHm/3757x8elT2aLZyzUGxh9cL4ZZkYMCocwYoOqDwi1OJz6GljUAoWxAwZSrP4oZDLIJNrIFcISI4shF7zJ9hsSjidIko+aYI2WkkrSbDbffAJBJKS1R8ih0kZjj2n9mBmVq6QGZfh/77sex0lTR3hKCHl2Pyc7zhA/6FDh/hwQmxcLMrLyjlYcdTSUdAYXZB7aqGSXYDo/wwaZSJi4trRfPoojFMIniYU7ZYudF5pQGvtKbRZPkJ7UyS6LTaIcguUwQxfrbyAxBlGMJG8ppAg1yuhGBgErTIUqAZ2V+4Vxk7NZvct+A2+O/QdbzrWkHJ3E4sSEALHAcmyMrKe1hv1g1pbW1lreKeoHWFHsNwDJUuA5H8OgmcMQrVyhBl0qK8ogcFgQFNVJfYXrsPFI3vhcfZCE+1CTLobg8fqMWRCOCJS9Wi/bEXmfQmIzA6jrNdCCFLAanaht8aBztIOlMsu474x85hKUomb39usmD59+hfV1dVWwiRxCwaCkfaRnS0dsXm5ebCgGy+OfhGxd+bCLiyhhRMoQ0MRplcHEsFuMaPh4lmU7ipEZs5sjJo8E5qYEfBqeiDT/hfNaIfHF0zR6UOwSg5jvBZdbU5ExeugCVJCFiNQBhvR6/IjPSkUp/9Ugv2TD2J0fBaSk5NNRUVFMYSngVTsDzB09PgxusSERHxTtQ/oBRw1efBIGTAoKQmUMtjMLTi9Yydqju6hYJcwJvdXyH/wabhlKrRbGTodx2B1lID5M+GjjPXymkAVz5huQF1ZB4KHGeGiJHHRBbdfgE8uQRGnA+4BDPF6ISIqAtER0UEXLlyIoCcDwrO3z4I6QYCmp6cXFm+3AKIx6/keCm6qEH47qo4VofCJ2aivrcE9z67D4j++jo4rLTBbumGzO9HT00MUoiUAJrjFg/CItUR1LXASDWlidehp6iWSdsMn9mWyAKeHIkspJ26igLNTAgZpEB5m4sA0AXSUxYEkuXag7HVaJK+HwWOLB+jnLy9BZ1Uy6o7vRHPZXsz4z9cwNHMsVMFaiD43mFqHsyePI/62aXDQscMVgV7nn+GTTpBz6b2lVohiNcRwDYLigmFpdkAfEQSX3w8PNRVuWl4lcwFB5K0WApZOIDUEGJTo16Q/QHd7u9nn9ToQ7B1MZltNjcly/Pjf2xE95zFMef5zGKMGwEZM63R3QKsNRtSIcagsPYyQlLGwkzV6vQJ6PLeh25kBS48DbrcZEaZdUOkPQW4MRSfFvSLJQNYVKHQkeP0ivQwBkhuItogRCLjVZiXE6LiGT+AA+7qH7rKyUw7qhtVa4ja8/i2vRlBPXISoyQ/Bo9TC3NlDNKOEiiZ1MuI/KnFXqt5BfV0tJUkyurqaYWltRMflalgaa2FrsKLOVwtD9Ck42hRwdctgb3VA1KsgmHQQicgVYVOBzgcRFS5nXq8HtbWXqYcLNLQcY8DFfQDNdMLS1NRi6Ki7xK9BtuBlOI7sht19CipVL2SyNrjECPh8UXA4wyAGGxAx7k6cK94BfexQ1BRthbX6PKTht9PiSZBnxlEyEa3FzUZ0+AY0fdoEYYgJQogMvU1OsNpqyF0JwDfEKCvvgrmtDScrzjTS4k2kXAJEzTmQSwtpVX1dVfzYiTMxfOVQnPV3Irz8r3CYFwMpqfB6u6ikuSFpTBClWPQ2p6G70YG6nesgpIyDMXsuomcnw6MORa9PRt0Lg0Cz2+VDoDPYoI5/DpIpCKp0ApnSTZXlXsguzgO+O8KqL51H65VWjqOc1MY/V0koCK66mBM2l6OHDx9GmFEnLE0fwKCpgWmOhPovB8LWRVZjw+EQMylrw1F9oALFv30VQvA6DKKPTW1KHoJGTIdbS1WEiq3dSRZyuyD4HHB2SejqGQBG34Lc7b12geK1C2pPMuqVlI3zspGaOkysr7/MMRzgGwIXwMQBXhedTv3N5vc/dDTUXRSnZJoYHAZYk6Kg7WqA+YwZThlxHVWFU69V4twBqrsvZiNh0QwMuDsNjrK30VRzCV0ONyUHfeQRZ/FEpj6HapSXmoUW+PUiqNGGgxJKRat22EOQSDS0YUa039zeKhwr+eEinT54DVDAs32WC5xzubzc96Pi4mKHzpw+0Ss1K6SvW4MQm2pHw/42MOZD7bsV0I2PImCDoY6iHs9LJKYNh89rQ9e35NKhw2gKmpaSCNThwC/RFymFRcRxeDzt8FYRyEQ9wuVudDdFY0XaWEwZofVt3rRRKizctp4Y8Wv+5wCV30Bu9FmQHwTAJiQkrF3xzEpP1YUz8gdzE3ywjEON+ATCOhiuvFqBsAeyoZ8RR64mt/VKsLltsLr06I1eBZw/B3b5JNGGgooUtxzZSU4Zq6B4JGbwyNVg1BdGUhWqpwIwPS4MS/OSvArRL3/vg61No9MS3yccIIBkezI+SR9APg6YtKqq6jCN31616i8IVbv9RfcOZL7nv4A2biLC02bB1nmCAFHZIw6y+wRq8T2wdMXBQg0FCubD/y2tYSNCIE5Dex11K1T6KvbCu+84fAebEXyZesrSdmDHCczQqplGcgolZSf4+mt/uPoZyjEFsPCTN7h43rx5UmVlJdu4cWPJy6+8khMWFhGbNyXLEz9MK31oHoHexDTEvVmJzoFVcMUMJLrxUr11EegcuHti6Ls4HGi9TJY8BJhpX/ENmNdOrg4jzgxBbEwXWlvrYDE1YtOs9zEyOtXzwZa/yZctW3aQsDxB6iO9bj0a31Rk/OysWbP4H0DNm9/dxLx+5tpd2sLw6GGGhe+xOEM8S1gxjhk/ymXyD8cw2cufMCyjmLn7WYakadw1DJMeZXjqG6b7wyEW/8fjbMCarxjeymTIBdtZvpdYhLkqz1byeznvpZByCax9dXh1e4MFr13g5pVRR3GF/t4o37BxY36EyRA8Z0a2e3FmlGBzKoTDOjM63/oSjmgJ0QMHw1ujguKTnYgIsUM34T4Ykscj/MoJ4r1xaBfVsJitsHWokRc6AHMjU9j9ufe7T506pczIyrDRWgWkpXxNUt6k3iA3A8hv4CCllpaWmjvuGPfduvWbxlOdjpiQnSrMnzjcMzUtSdCOpqbzQB1qS78V3Bc9cGfMgnXQFFjlOnTJjOjYVgrriVKkT7gNs4YE4835Q9mScVne02XlOFZSKi9YVMBZmYMr4muRcvf+g3B//5zwazxgfU8++eSANWvWvETjX7+/+R3k5EyDIjTI99a763BuezHaosciKONuYVhYCHrsZEVtEOINPhzdtpoNSh2P5Y8vhc/VJRYXFwtz713A1zuYnp7+xOnTp8/SmK9xNSz4lf+F9I+LfHp+t9EUbl++7Gk2ecJktmv3LrZ161Y2r+ABdrSsgtU1trPq2kbW0trOtm3bzrIzItmaV//KcnKmchC8jD28e/duamMDwi13KyPd+uK1Sfjuuguu1chsOkddAMbmTMpJ1BtCDARGN/G2NPnw9NGwWq240tzs73X7u48dK+F/tfEY+3r58uX7V69ezeOOy/U5rx7efHtL9D95hLuC3//TWOHteRhCkiLQfZH/K0EsHXAZb5sa8iZMqN915IiFxn3CgXFrXue6vgv/V3sOki/C9ZcKf4aHCn/Jf0n+FQvebGL+fJ9l+Zhbpk/6jvm5n1q9755/uv8fW8aYEPr77KEAAAAASUVORK5CYII="},{"id":"EsriWorldImageryClarity","name":"Esri World Imagery (Clarity) Beta","type":"tms","template":"https://clarity.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,22],"terms_url":"https://wiki.openstreetmap.org/wiki/Esri","terms_text":"Terms & Feedback","default":true,"description":"Esri archive imagery that may be clearer and more accurate than the default layer.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAXEYAAFxGAHswbAIAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAP5klEQVRYCcVYCXRUVbbd772aU6lUqiojIQEykUBCEoYgIEIYTaKAyNChaUVaW/9yQNeXxpb+jf3boXEAJwYRtYXYjoAiIGEIKEISIRCGIJCJjCSppJKqpOaq+88tCCvYSNu//1r/rDrv3Tfdu98Z9jmvBPz7ItIUXAVSdk1pBx/f/H8IByJOmjRJxhjj45sKv/bpp59Kt7rnpg/+myelVatWcWv1Fz0dpJNOI72LdCZpGml/keiA68++UP+b+49/6QN9LuxzWxhNMpl06sOPPJo6ZvSokJCQYDcZzaxUqdq1QUGX0tMziwyG4POCIHT1W5Cvx4HyeXg4/FP5JQD7JuSTxZIuffiR/1gwbdq05NGjRiJIo2JV1TUeCKJXpZD5nfYe9Np7WWtrG3M47E1mc/eJ8jOX9nxc+MN+4HRbP0QyGnv7Hd90yBe/lfBJ+qz22/nzF76Xn58/a+UfVphGjhwJMpvP3O3AsJRkmRwOeWTSOEWXV6fwMJUySGdShhqMYYbQoHSNwje3pb74rlZzD39BbtFmUj8pn/+WlryVBQNvuHjx4qAtW7a8/sabbyz99aIClJYc86SmjRR7vGqx6IcGlDW48fmFOnh2vwLRNBCh0x5Boj4Eg9UCG2xSsaERSjY4TJRClC6h8kw5nnr0d7Zms+3jtLS0l86cOVNDALnwEOKA/0F+DmAAXF5eXuiuXbv+vrVw64xFBYv4BP517xTKtlWF4IA4AOjoBowM2mAN7DY7/PvepTvIIJOWUDooASd5UJAwKFzDfpca4ssdEQy92if7csd2PP7444003wrSwmuobgryZi4OxBxRhOKFF174uPCjj3IXFRR4HB6fuGFvhfTYjiOo1doxeJgPyQmViIwsI1AV8HXooPSroTq0FsHMA6O3GybLOWh6a9BQ2ywc2F4tblj1vnjb7XG+e+bc5Z8xbYr+Um3NPS2NjX4/Y98SSO5qDvIGl/8UILdowNSfffbZK+s3rP/NkvuXeLtd3dLKopfEVdb1GKarxmDtUej036P1/Ba0nyyF42wZ/JcZfDIN3Jn5sBW/BytTwJI0HjZfCIZF9OCOnE9hHLUfrz7+odjZ2SOmpiZ6QjQhUtH+oskpKSl+s9nMQXK5was3HNDFgPVoP3fZU8s+f+kvL8EvZ76nDzwjvW1fi3zZ7aj9vgVVRe0Ii+mGLjwRqgG/ArRZ8Mii4KKYd0COnprT8B98Dd1Tn8eQSANyM76AJuQAnH49rB1efLDiMHAH8Ma4td59HxyU7Sz+ClkjshaWV5R/0g8DDa+aNDCgTQDcM888Y6Txqntnz4VSrfS8efxt6W3LWkyuyUHZunq0HnAjPqUHWfOfRlLuJkSnFsAUlQpDCMWXSga95IZu8HB0x84Ctn+EqYl7YNSvhtupInVBMgDzV0wF3IA6RS1bX7jO/eyKZ0Hgnn/ooYeiaG3OGtc9e31AJ7k1WX1L42Pdlq5FS+57wFcvb5QVHFiIhL2JMJdfwojZ8UiZfg5Oy0xExD2FIMVAyH0+KAQGiZ6WKIKcXglOJiF9iALC+Q0YkrET6vDJcLh88DAGl4cWodoja5Sw6eyHWDJliTQ9e7qn+Lti084vd3Je3E/KJeDdPoA8OHnsheXn5725YM58U5Oz2V90Zp9Y8dxJAhWJYQuGIGqInUDNQuvJOJhM8QiLDCWH+iCXSQSQwUvAjGorJgzch5FpXyE4shele0QMGqODoBIJIFcBbkoDrcmICztrYdFbMX/MvUiMSRS3FG5JmH3n7B0/Vv3YSVg4NpqRhAq/VFdXxwHm/3757x8elT2aLZyzUGxh9cL4ZZkYMCocwYoOqDwi1OJz6GljUAoWxAwZSrP4oZDLIJNrIFcISI4shF7zJ9hsSjidIko+aYI2WkkrSbDbffAJBJKS1R8ih0kZjj2n9mBmVq6QGZfh/77sex0lTR3hKCHl2Pyc7zhA/6FDh/hwQmxcLMrLyjlYcdTSUdAYXZB7aqGSXYDo/wwaZSJi4trRfPoojFMIniYU7ZYudF5pQGvtKbRZPkJ7UyS6LTaIcguUwQxfrbyAxBlGMJG8ppAg1yuhGBgErTIUqAZ2V+4Vxk7NZvct+A2+O/QdbzrWkHJ3E4sSEALHAcmyMrKe1hv1g1pbW1lreKeoHWFHsNwDJUuA5H8OgmcMQrVyhBl0qK8ogcFgQFNVJfYXrsPFI3vhcfZCE+1CTLobg8fqMWRCOCJS9Wi/bEXmfQmIzA6jrNdCCFLAanaht8aBztIOlMsu474x85hKUomb39usmD59+hfV1dVWwiRxCwaCkfaRnS0dsXm5ebCgGy+OfhGxd+bCLiyhhRMoQ0MRplcHEsFuMaPh4lmU7ipEZs5sjJo8E5qYEfBqeiDT/hfNaIfHF0zR6UOwSg5jvBZdbU5ExeugCVJCFiNQBhvR6/IjPSkUp/9Ugv2TD2J0fBaSk5NNRUVFMYSngVTsDzB09PgxusSERHxTtQ/oBRw1efBIGTAoKQmUMtjMLTi9Yydqju6hYJcwJvdXyH/wabhlKrRbGTodx2B1lID5M+GjjPXymkAVz5huQF1ZB4KHGeGiJHHRBbdfgE8uQRGnA+4BDPF6ISIqAtER0UEXLlyIoCcDwrO3z4I6QYCmp6cXFm+3AKIx6/keCm6qEH47qo4VofCJ2aivrcE9z67D4j++jo4rLTBbumGzO9HT00MUoiUAJrjFg/CItUR1LXASDWlidehp6iWSdsMn9mWyAKeHIkspJ26igLNTAgZpEB5m4sA0AXSUxYEkuXag7HVaJK+HwWOLB+jnLy9BZ1Uy6o7vRHPZXsz4z9cwNHMsVMFaiD43mFqHsyePI/62aXDQscMVgV7nn+GTTpBz6b2lVohiNcRwDYLigmFpdkAfEQSX3w8PNRVuWl4lcwFB5K0WApZOIDUEGJTo16Q/QHd7u9nn9ToQ7B1MZltNjcly/Pjf2xE95zFMef5zGKMGwEZM63R3QKsNRtSIcagsPYyQlLGwkzV6vQJ6PLeh25kBS48DbrcZEaZdUOkPQW4MRSfFvSLJQNYVKHQkeP0ivQwBkhuItogRCLjVZiXE6LiGT+AA+7qH7rKyUw7qhtVa4ja8/i2vRlBPXISoyQ/Bo9TC3NlDNKOEiiZ1MuI/KnFXqt5BfV0tJUkyurqaYWltRMflalgaa2FrsKLOVwtD9Ck42hRwdctgb3VA1KsgmHQQicgVYVOBzgcRFS5nXq8HtbWXqYcLNLQcY8DFfQDNdMLS1NRi6Ki7xK9BtuBlOI7sht19CipVL2SyNrjECPh8UXA4wyAGGxAx7k6cK94BfexQ1BRthbX6PKTht9PiSZBnxlEyEa3FzUZ0+AY0fdoEYYgJQogMvU1OsNpqyF0JwDfEKCvvgrmtDScrzjTS4k2kXAJEzTmQSwtpVX1dVfzYiTMxfOVQnPV3Irz8r3CYFwMpqfB6u6ikuSFpTBClWPQ2p6G70YG6nesgpIyDMXsuomcnw6MORa9PRt0Lg0Cz2+VDoDPYoI5/DpIpCKp0ApnSTZXlXsguzgO+O8KqL51H65VWjqOc1MY/V0koCK66mBM2l6OHDx9GmFEnLE0fwKCpgWmOhPovB8LWRVZjw+EQMylrw1F9oALFv30VQvA6DKKPTW1KHoJGTIdbS1WEiq3dSRZyuyD4HHB2SejqGQBG34Lc7b12geK1C2pPMuqVlI3zspGaOkysr7/MMRzgGwIXwMQBXhedTv3N5vc/dDTUXRSnZJoYHAZYk6Kg7WqA+YwZThlxHVWFU69V4twBqrsvZiNh0QwMuDsNjrK30VRzCV0ONyUHfeQRZ/FEpj6HapSXmoUW+PUiqNGGgxJKRat22EOQSDS0YUa039zeKhwr+eEinT54DVDAs32WC5xzubzc96Pi4mKHzpw+0Ss1K6SvW4MQm2pHw/42MOZD7bsV0I2PImCDoY6iHs9LJKYNh89rQ9e35NKhw2gKmpaSCNThwC/RFymFRcRxeDzt8FYRyEQ9wuVudDdFY0XaWEwZofVt3rRRKizctp4Y8Wv+5wCV30Bu9FmQHwTAJiQkrF3xzEpP1YUz8gdzE3ywjEON+ATCOhiuvFqBsAeyoZ8RR64mt/VKsLltsLr06I1eBZw/B3b5JNGGgooUtxzZSU4Zq6B4JGbwyNVg1BdGUhWqpwIwPS4MS/OSvArRL3/vg61No9MS3yccIIBkezI+SR9APg6YtKqq6jCN31616i8IVbv9RfcOZL7nv4A2biLC02bB1nmCAFHZIw6y+wRq8T2wdMXBQg0FCubD/y2tYSNCIE5Dex11K1T6KvbCu+84fAebEXyZesrSdmDHCczQqplGcgolZSf4+mt/uPoZyjEFsPCTN7h43rx5UmVlJdu4cWPJy6+8khMWFhGbNyXLEz9MK31oHoHexDTEvVmJzoFVcMUMJLrxUr11EegcuHti6Ls4HGi9TJY8BJhpX/ENmNdOrg4jzgxBbEwXWlvrYDE1YtOs9zEyOtXzwZa/yZctW3aQsDxB6iO9bj0a31Rk/OysWbP4H0DNm9/dxLx+5tpd2sLw6GGGhe+xOEM8S1gxjhk/ymXyD8cw2cufMCyjmLn7WYakadw1DJMeZXjqG6b7wyEW/8fjbMCarxjeymTIBdtZvpdYhLkqz1byeznvpZByCax9dXh1e4MFr13g5pVRR3GF/t4o37BxY36EyRA8Z0a2e3FmlGBzKoTDOjM63/oSjmgJ0QMHw1ujguKTnYgIsUM34T4Ykscj/MoJ4r1xaBfVsJitsHWokRc6AHMjU9j9ufe7T506pczIyrDRWgWkpXxNUt6k3iA3A8hv4CCllpaWmjvuGPfduvWbxlOdjpiQnSrMnzjcMzUtSdCOpqbzQB1qS78V3Bc9cGfMgnXQFFjlOnTJjOjYVgrriVKkT7gNs4YE4835Q9mScVne02XlOFZSKi9YVMBZmYMr4muRcvf+g3B//5zwazxgfU8++eSANWvWvETjX7+/+R3k5EyDIjTI99a763BuezHaosciKONuYVhYCHrsZEVtEOINPhzdtpoNSh2P5Y8vhc/VJRYXFwtz713A1zuYnp7+xOnTp8/SmK9xNSz4lf+F9I+LfHp+t9EUbl++7Gk2ecJktmv3LrZ161Y2r+ABdrSsgtU1trPq2kbW0trOtm3bzrIzItmaV//KcnKmchC8jD28e/duamMDwi13KyPd+uK1Sfjuuguu1chsOkddAMbmTMpJ1BtCDARGN/G2NPnw9NGwWq240tzs73X7u48dK+F/tfEY+3r58uX7V69ezeOOy/U5rx7efHtL9D95hLuC3//TWOHteRhCkiLQfZH/K0EsHXAZb5sa8iZMqN915IiFxn3CgXFrXue6vgv/V3sOki/C9ZcKf4aHCn/Jf0n+FQvebGL+fJ9l+Zhbpk/6jvm5n1q9755/uv8fW8aYEPr77KEAAAAASUVORK5CYII="},{"id":"maaamet.ee-pohi_vr2","name":"Estonia Basemap (Maaamet)","type":"wms","template":"http://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=pohi_vr2&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","polygon":[[[22.3536433,58.8538478],[22.0941083,58.8503765],[22.09179,58.8950979],[22.0050343,58.8937111],[21.9997875,58.9837386],[22.3475423,58.9884539],[22.3453459,59.0333735],[22.5193454,59.0353825],[22.5155628,59.1251033],[22.6901723,59.1268565],[22.6921246,59.0821845],[22.7791243,59.0829995],[22.7808326,59.0381447],[22.8680763,59.0387725],[22.8692965,58.9939856],[22.9562963,58.9948656],[22.954954,59.0395885],[23.1289535,59.0409695],[23.1278553,59.0858205],[23.4767083,59.0877011],[23.4741459,59.2672589],[23.6492435,59.2678824],[23.6488774,59.3128106],[23.7369753,59.3129974],[23.7364872,59.3578039],[23.9115848,59.3578661],[23.9120729,59.4027997],[24.1760005,59.4027997],[24.1763666,59.4477979],[24.2644645,59.4476738],[24.2647085,59.4923646],[24.7060521,59.490816],[24.7089805,59.6255274],[24.7974445,59.6249721],[24.7965903,59.5800862],[24.9732742,59.5788506],[24.9746164,59.6238615],[24.8860304,59.6247253],[24.8872506,59.6691818],[24.9762027,59.6686273],[24.9773008,59.7134564],[25.0660088,59.7125949],[25.0632024,59.6230593],[25.2403743,59.621455],[25.2418385,59.6664705],[25.3305465,59.6654845],[25.3288383,59.6207762],[25.4175462,59.6197889],[25.4193765,59.6646834],[25.6855005,59.6614786],[25.6875748,59.7061327],[25.8651128,59.7038552],[25.8627944,59.6590132],[26.1285523,59.6550682],[26.1257459,59.6100991],[26.3911377,59.6056544],[26.3880872,59.5609901],[26.8296748,59.552149],[26.8262583,59.5072897],[26.9142342,59.5054941],[26.9105736,59.4605107],[27.9668941,59.4330327],[27.9718969,59.4778048],[28.0366891,59.4756977],[28.0437662,59.472227],[28.0476708,59.4657804],[28.0518195,59.4634246],[28.0691462,59.4625567],[28.0845206,59.4593946],[28.1217365,59.4409124],[28.1357687,59.4276958],[28.1371109,59.4226684],[28.1416256,59.419006],[28.1665176,59.4120525],[28.1722525,59.4078922],[28.1927517,59.4014954],[28.2106885,59.383603],[28.2106885,59.3799364],[28.2038555,59.3745911],[28.2105665,59.3723533],[28.2110546,59.3693693],[28.2067839,59.3671933],[28.207028,59.3637736],[28.1997068,59.3609133],[28.2020252,59.3573064],[28.1926297,59.3522685],[28.1939719,59.3464212],[28.1696901,59.3335411],[28.1362568,59.2924414],[28.1251531,59.2890141],[28.1172218,59.2889518],[28.1099006,59.2906343],[28.0535278,59.2901981],[28.0202165,59.2833429],[27.998253,59.2753018],[27.9798281,59.2729328],[27.9643317,59.2726834],[27.95335,59.2686307],[27.9492013,59.2653258],[27.9056404,59.2404352],[27.9011257,59.2348807],[27.9010037,59.2263912],[27.8978312,59.2174624],[27.9023459,59.207282],[27.8923404,59.1922244],[27.8897779,59.1837868],[27.8764779,59.1737214],[27.8718411,59.1684062],[27.8681805,59.161589],[27.8441428,59.1481382],[27.8320629,59.1440081],[27.820349,59.133618],[27.8098553,59.1290479],[27.8059507,59.1216592],[27.8053406,59.1127031],[27.8107095,59.1081928],[27.8100994,59.1060627],[27.8020461,59.1028047],[27.788868,59.0908979],[27.7906983,59.0811186],[27.7937488,59.0784226],[27.7941149,59.0756636],[27.7927727,59.0729044],[27.7930167,59.069267],[27.788502,59.06657],[27.7826451,59.0650019],[27.7750799,59.0581013],[27.7731276,59.0510739],[27.7766661,59.0474341],[27.769833,59.0332479],[27.7660504,59.0315527],[27.7515302,59.0301714],[27.7462833,59.0271573],[27.7456732,59.0170459],[27.7416466,59.0095074],[27.7478696,58.9926656],[27.7427448,58.9884539],[27.7321291,58.9854991],[27.6544028,58.9878252],[27.6550129,58.9924142],[27.3941358,58.9996422],[27.3897431,58.9547414],[27.1293541,58.9613481],[27.1255715,58.9163975],[27.0388158,58.9184133],[27.027102,58.784103],[27.1136136,58.7818263],[27.1093429,58.7370852],[27.1953665,58.7351221],[27.1873132,58.6453349],[27.2730927,58.6430491],[27.2525935,58.4188307],[27.5339699,58.4114172],[27.5552012,58.3657519],[27.5176193,58.3326492],[27.5140807,58.322142],[27.4999265,58.3224624],[27.4868704,58.1880305],[27.528723,58.1868727],[27.592051,58.1187543],[27.6369541,58.0973519],[27.6093777,58.053992],[27.6226778,58.0057957],[27.6448853,58.0020458],[27.6529386,58.0064422],[27.6478138,58.0142638],[27.6478138,58.020856],[27.661724,58.0186587],[27.6685571,58.0104502],[27.6839315,58.0084463],[27.6964995,58.0045027],[27.7006481,57.9986189],[27.6988178,57.9882713],[27.6912527,57.9854899],[27.680637,57.9744915],[27.6821012,57.9719031],[27.6889343,57.9718384],[27.6858838,57.9592823],[27.6589176,57.955398],[27.6675809,57.9509954],[27.6716076,57.9462684],[27.6691672,57.9417351],[27.6764883,57.9355171],[27.6824673,57.9365535],[27.6861278,57.9279374],[27.6824673,57.9243737],[27.7107757,57.9239202],[27.7202932,57.9203561],[27.7205373,57.9117361],[27.7083353,57.9061612],[27.6988178,57.9061612],[27.706139,57.9013635],[27.7289566,57.9073929],[27.7467714,57.9016877],[27.7536045,57.9040866],[27.7573871,57.9031789],[27.7559228,57.8980566],[27.769589,57.8956572],[27.7809368,57.8983159],[27.7989956,57.8996128],[27.8185187,57.8957869],[27.8209591,57.890469],[27.8194949,57.8880043],[27.8105875,57.8861232],[27.8182747,57.8824905],[27.8116856,57.8720446],[27.8158343,57.8716552],[27.8183967,57.8651005],[27.8163224,57.8613359],[27.7987516,57.8520525],[27.7946029,57.8463384],[27.8005819,57.8441954],[27.7957011,57.8401688],[27.788624,57.8418575],[27.7841093,57.837246],[27.7771542,57.8325041],[27.7584853,57.8353623],[27.7416466,57.8267869],[27.7238318,57.8317895],[27.7054069,57.8419224],[27.6877141,57.8341931],[27.6663607,57.8365315],[27.6602598,57.8389348],[27.6481799,57.8377007],[27.636344,57.8397792],[27.6248742,57.8375058],[27.6220677,57.8387399],[27.5979079,57.8332836],[27.5625224,57.8302303],[27.5562994,57.8312698],[27.5522727,57.8211338],[27.5444635,57.8220436],[27.5451956,57.8180795],[27.5505645,57.8176896],[27.5566654,57.81366],[27.5408029,57.81288],[27.5447076,57.8080049],[27.5372644,57.8064447],[27.5395827,57.8014386],[27.5359222,57.7966269],[27.5386066,57.7939607],[27.5292111,57.7885626],[27.5174973,57.7887577],[27.5184734,57.7920097],[27.502977,57.7879772],[27.5000485,57.7897333],[27.4958999,57.7886927],[27.5077357,57.783489],[27.5145688,57.7751615],[27.5081018,57.7715827],[27.5111523,57.7641637],[27.515911,57.7639034],[27.5201817,57.7599329],[27.5281129,57.7581753],[27.5300652,57.7536834],[27.5311634,57.7407253],[27.5480021,57.7332999],[27.5419011,57.7303684],[27.5279909,57.7294564],[27.5235982,57.7161637],[27.5276249,57.708994],[27.5235982,57.7080162],[27.5165211,57.7087333],[27.5106642,57.7110147],[27.5085899,57.707234],[27.4999265,57.7049523],[27.4952898,57.7074947],[27.4871145,57.7190963],[27.4735703,57.7154468],[27.4706419,57.7080162],[27.4614904,57.706191],[27.4480683,57.7161637],[27.4308636,57.7075599],[27.4281792,57.6990193],[27.4134149,57.6991498],[27.4164653,57.6952374],[27.4074359,57.6927593],[27.4023111,57.6849328],[27.3913294,57.6853894],[27.3937698,57.679127],[27.3914514,57.676713],[27.3819339,57.6733202],[27.3777852,57.668361],[27.3836422,57.6605944],[27.3801036,57.658832],[27.3875468,57.6555028],[27.3804697,57.6494964],[27.3835201,57.6479947],[27.3815678,57.643685],[27.3907193,57.6430972],[27.3881569,57.6400931],[27.4008469,57.6374154],[27.4031652,57.6290542],[27.401823,57.6237622],[27.3959661,57.6211486],[27.3902312,57.6203644],[27.3908413,57.616901],[27.401945,57.6177506],[27.4063377,57.6154633],[27.4068258,57.6124569],[27.3857165,57.603044],[27.3782733,57.5951327],[27.35692,57.5969636],[27.3413015,57.5898357],[27.3417896,57.5853883],[27.3288555,57.5796974],[27.3214124,57.5789778],[27.3341024,57.5659571],[27.331784,57.5606559],[27.3377629,57.5600668],[27.3388611,57.5467119],[27.3438639,57.5454024],[27.3547236,57.5257533],[27.3513071,57.516318],[27.3456942,57.5210359],[27.3244628,57.5227395],[27.2966424,57.5385919],[27.2801699,57.5364306],[27.2737028,57.5431105],[27.2643074,57.5437654],[27.2636973,57.5484143],[27.2577183,57.5497892],[27.2479568,57.5476941],[27.2248951,57.5538482],[27.1932922,57.5496583],[27.1614451,57.5592159],[27.1165421,57.5611795],[27.1009236,57.5653027],[27.0850611,57.5753796],[27.0726151,57.5773423],[27.0722491,57.5798936],[27.0558985,57.5825102],[27.052848,57.5808749],[27.0468691,57.5804824],[27.0449168,57.5825102],[27.0332029,57.5853229],[27.0412562,57.5876121],[27.0441847,57.596702],[27.0310066,57.604613],[26.9951329,57.604613],[26.9923265,57.6107575],[26.9869576,57.6086659],[26.9836631,57.6117379],[26.9754878,57.6119994],[26.9709731,57.6044822],[26.9595033,57.6062473],[26.957795,57.6046784],[26.9459592,57.6027171],[26.9396142,57.6093195],[26.951328,57.61579],[26.9499858,57.6205605],[26.9405903,57.6197763],[26.9296086,57.6237622],[26.9264361,57.6331044],[26.906791,57.6330391],[26.8997139,57.6305568],[26.900568,57.6291849],[26.8958093,57.6257223],[26.8884881,57.6235662],[26.8889762,57.6219327],[26.8745779,57.6190575],[26.8727476,57.6173585],[26.8655485,57.6159207],[26.8578613,57.6099732],[26.8646944,57.6084044],[26.8581053,57.6004943],[26.8599356,57.5959828],[26.8643283,57.5941518],[26.8617659,57.5910783],[26.8468795,57.5883969],[26.8350437,57.5824448],[26.8158867,57.581529],[26.8095417,57.5847342],[26.7968517,57.5817907],[26.799292,57.5800245],[26.792947,57.573155],[26.7868461,57.5752487],[26.7765965,57.5599359],[26.7691533,57.5603941],[26.7635404,57.563143],[26.7536569,57.5624885],[26.7581716,57.5653027],[26.7689093,57.5704069],[26.77379,57.5747253],[26.7676891,57.5775385],[26.748044,57.5778002],[26.7531688,57.5800899],[26.7381604,57.5877429],[26.729009,57.5801553],[26.7382824,57.5758375],[26.7307172,57.5690328],[26.7238842,57.5724353],[26.7110721,57.5659571],[26.6997244,57.5710612],[26.697528,57.5706032],[26.697406,57.5673314],[26.6915491,57.5661534],[26.6756866,57.5666769],[26.6710498,57.5632739],[26.671904,57.5538482],[26.6653149,57.5528663],[26.646524,57.5539137],[26.6426194,57.546581],[26.6344441,57.5435689],[26.6144329,57.5290944],[26.6171173,57.5088466],[26.6046714,57.5121237],[26.6047934,57.5144175],[26.5953979,57.5137621],[26.5947878,57.5159248],[26.5880768,57.5161869],[26.5901511,57.5251637],[26.5869786,57.5262119],[26.5877107,57.537806],[26.5838061,57.5395743],[26.5797794,57.5369546],[26.5796574,57.5337452],[26.5612325,57.5285048],[26.5618426,57.5226085],[26.5666014,57.5194633],[26.557938,57.5136966],[26.5258469,57.5161869],[26.4996128,57.5245085],[26.4909494,57.5453369],[26.4699621,57.5755104],[26.4015093,57.5723699],[26.3448924,57.5840801],[26.3347648,57.5796974],[26.3278097,57.579632],[26.3263455,57.5827719],[26.3117032,57.5847342],[26.3085307,57.5929094],[26.3005994,57.5934325],[26.2929122,57.5911437],[26.2835167,57.5923208],[26.2821745,57.5951981],[26.2775378,57.5950019],[26.2703387,57.600102],[26.2702166,57.604613],[26.2542321,57.6138294],[26.247155,57.6208219],[26.2481312,57.6277476],[26.2394678,57.6340842],[26.2420302,57.6353906],[26.2466669,57.6355865],[26.2395898,57.6464929],[26.2323907,57.6461011],[26.2311705,57.6490394],[26.2421522,57.6514551],[26.2362953,57.6575265],[26.2303164,57.6580487],[26.2104272,57.6660116],[26.2137217,57.668883],[26.2109153,57.6707102],[26.2101832,57.6790617],[26.2007877,57.6810188],[26.1989574,57.6835629],[26.1944427,57.6851937],[26.1854133,57.6845414],[26.177116,57.687607],[26.1887078,57.6947157],[26.1985914,57.7090592],[26.2056685,57.7148602],[26.1726013,57.7286746],[26.1409983,57.7327788],[26.1356294,57.7392273],[26.139046,57.7454793],[26.1355074,57.7502978],[26.1053687,57.7570036],[26.0803547,57.7654654],[26.0797446,57.7638383],[26.0732776,57.7637081],[26.0704712,57.7655956],[26.0591234,57.7598678],[26.0489958,57.7611046],[26.0435049,57.7670274],[26.0332553,57.7705416],[26.0237378,57.7676131],[26.0177589,57.7722985],[26.0245919,57.7751615],[26.024958,57.7816025],[26.0225176,57.7835541],[26.0277644,57.7897984],[26.0308149,57.7909691],[26.0333773,57.8010485],[26.0367939,57.8059246],[26.0360617,57.8108],[26.0485077,57.8228883],[26.057049,57.8384152],[26.0555848,57.8476372],[26.0366718,57.8492605],[26.0200772,57.8451696],[26.0095836,57.8573112],[25.9984798,57.8581552],[25.9627282,57.8449098],[25.9310032,57.8524421],[25.8953736,57.849715],[25.8882964,57.8459488],[25.8808533,57.8494553],[25.885734,57.8527667],[25.8842698,57.8559479],[25.8756064,57.8579604],[25.8747523,57.8632183],[25.8594999,57.8561427],[25.8192336,57.8641919],[25.7831159,57.8994831],[25.7862884,57.9042811],[25.7716461,57.9120602],[25.7510248,57.9169213],[25.7372366,57.9229482],[25.7283292,57.9213281],[25.7224723,57.9124491],[25.7035593,57.9033086],[25.6791555,57.9046052],[25.6754949,57.9127732],[25.6620728,57.9151066],[25.6560938,57.9143936],[25.6488947,57.9166621],[25.6498709,57.9184119],[25.638279,57.9305937],[25.5798318,57.9441961],[25.593986,57.9596059],[25.5893493,57.9650431],[25.5823942,57.9678261],[25.5804419,57.9720973],[25.574829,57.9741033],[25.5655556,57.9671789],[25.5660436,57.9625835],[25.5571362,57.9603827],[25.555672,57.9671142],[25.5507912,57.9725502],[25.5372471,57.9713855],[25.5256553,57.9718384],[25.5226048,57.9680203],[25.5163818,57.9673731],[25.5121111,57.9697676],[25.5221167,57.9748797],[25.5194323,57.9803146],[25.4853889,57.9747503],[25.4784338,57.9800558],[25.4784338,57.9826436],[25.4421941,57.9961616],[25.4481731,58.0011406],[25.4664759,58.0051492],[25.4481731,58.0169784],[25.4069306,58.0289329],[25.371545,58.0292559],[25.3637358,58.0317109],[25.3533641,58.0433376],[25.3448228,58.0467603],[25.3360374,58.0570909],[25.3292043,58.0585757],[25.3266419,58.0638042],[25.3198088,58.0659987],[25.3190767,58.0692901],[25.295527,58.0816142],[25.2868636,58.0814852],[25.2811287,58.0701936],[25.2659983,58.0671604],[25.2650222,58.0599959],[25.2799085,58.0506346],[25.2930866,58.0466957],[25.3043124,58.0344888],[25.3011399,58.0150395],[25.2974793,58.014587],[25.3028482,58.0001061],[25.295771,57.9997181],[25.2973573,57.9966143],[25.3035803,57.9939628],[25.3013839,57.9927341],[25.2918664,57.9928634],[25.283081,57.9896296],[25.2672185,57.9945449],[25.2561148,57.9938982],[25.2550166,58.0034682],[25.2454991,58.0030157],[25.2276843,58.0178186],[25.2458652,58.0187234],[25.2356156,58.0228592],[25.2363477,58.02441],[25.2273182,58.0243454],[25.2253659,58.0219545],[25.2190209,58.0297728],[25.2165806,58.0408834],[25.2269522,58.0479872],[25.2281724,58.0534755],[25.2212173,58.0530236],[25.2214613,58.0505055],[25.2178007,58.0490849],[25.2159705,58.059544],[25.2121879,58.0622551],[25.2052328,58.0612223],[25.2038906,58.0650951],[25.2162145,58.07413],[25.2120658,58.0805175],[25.1996199,58.0853558],[25.1894923,58.0800659],[25.1916886,58.0761302],[25.1534966,58.0747752],[25.1515443,58.0770335],[25.1339735,58.0797433],[25.1057871,58.0774852],[25.105177,58.0664505],[25.0766245,58.0664505],[25.0203736,58.0176893],[24.9951156,58.010838],[24.9486263,58.0094159],[24.832342,57.9717737],[24.8080602,57.9906644],[24.7422918,57.9818673],[24.74339,57.9649137],[24.7328963,57.9623894],[24.7150815,57.962713],[24.6918978,57.9465274],[24.6733509,57.9589586],[24.6446764,57.9588939],[24.64187,57.9542327],[24.6457746,57.9526788],[24.6286919,57.9419294],[24.6161239,57.943678],[24.6089248,57.9512544],[24.5846429,57.9617421],[24.5731731,57.9543622],[24.5479151,57.9493766],[24.5435225,57.9447789],[24.5301003,57.9470455],[24.5207049,57.9430304],[24.5183865,57.9367478],[24.5096011,57.9344158],[24.5132617,57.9306585],[24.4625017,57.9249569],[24.445785,57.9079764],[24.4601833,57.906615],[24.4522521,57.8994183],[24.4600613,57.8797658],[24.4113756,57.8649058],[24.4090573,57.8719148],[24.3370659,57.8739264],[24.3382861,58.0109027],[24.4227234,58.0109673],[24.42614,58.280018],[24.5115534,58.2796972],[24.5121635,58.324705],[24.426384,58.3250254],[24.4271161,58.3697196],[24.3418247,58.3701675],[24.3404825,58.2354672],[24.1701436,58.2357242],[24.1701436,58.1907961],[24.0848522,58.1909248],[24.0850962,58.2360454],[24.0006589,58.2357884],[23.9999268,58.2809162],[23.8297099,58.2804671],[23.8294659,58.325538],[23.658639,58.3249613],[23.6579069,58.4149324],[23.5722493,58.4146768],[23.5712732,58.5043556],[23.3993481,58.5035906],[23.4010564,58.4139098],[23.1442059,58.4123759],[23.1456701,58.3673518],[23.0598906,58.3670318],[23.0617209,58.3222061],[22.9756973,58.3215653],[22.9771615,58.2768102],[22.8918701,58.2759761],[22.8935784,58.2310348],[22.808653,58.2301996],[22.8101172,58.1853932],[22.8952866,58.1861008],[22.8966288,58.1413032],[22.726412,58.1398218],[22.7249478,58.18475],[22.555219,58.1827558],[22.5569273,58.1374387],[22.6417307,58.1388557],[22.6434389,58.0939986],[22.3890288,58.0909029],[22.3852462,58.1806329],[22.2999548,58.1796678],[22.3067879,58.045275],[22.2219845,58.0435959],[22.2262552,57.9540384],[22.1420619,57.9528083],[22.1445023,57.9080412],[22.060065,57.9068095],[22.0626274,57.8618552],[21.978068,57.8604272],[21.9683065,58.0400438],[22.0527438,58.0413355],[22.0450566,58.1758075],[21.9603753,58.1747137],[21.9578129,58.219405],[21.78723,58.2163845],[21.7821052,58.3063113],[21.6968137,58.304901],[21.6940073,58.3497486],[21.7794207,58.3512212],[21.7679509,58.5307369],[22.0256555,58.5348771],[22.0279739,58.4900096],[22.1137534,58.4916676],[22.1114351,58.5362146],[22.1970926,58.5374247],[22.1945302,58.5822952],[22.4523568,58.5857297],[22.4463779,58.7203003],[22.3602323,58.7191599],[22.3536433,58.8538478]],[[23.4741459,59.2672589],[23.2986822,59.2663235],[23.2979501,59.3113783],[23.4729257,59.3119388],[23.4741459,59.2672589]],[[24.1701436,58.1907961],[24.255069,58.1907318],[24.2545809,58.1458112],[24.1700216,58.1458756],[24.1701436,58.1907961]],[[24.0848522,58.1909248],[24.0849742,58.1012852],[23.9996827,58.1011563],[23.9999268,58.0563162],[23.9152454,58.0561225],[23.9150014,58.1461332],[23.83032,58.1460044],[23.8297099,58.2357242],[23.9145133,58.2358527],[23.9147573,58.1909891],[24.0848522,58.1909248]],[[24.6185366,59.5361187],[24.4418254,59.5367966],[24.4430922,59.6265878],[24.6201552,59.6258049],[24.6185366,59.5361187]],[[26.4040316,59.7851966],[26.3150064,59.7866741],[26.3181415,59.8315183],[26.4073159,59.8299428],[26.4040316,59.7851966]],[[26.4830816,59.6490028],[26.4864655,59.6938311],[26.5751422,59.692023],[26.5716589,59.6471923],[26.4830816,59.6490028]],[[23.1594369,57.784083],[23.2434645,57.7846083],[23.2444497,57.73971],[23.3284773,57.740311],[23.3267883,57.8299754],[23.1584517,57.8288513],[23.1594369,57.784083]]],"terms_text":"Maa-Ameti põhikaart"},{"id":"maaamet.ee-cir_ngr","name":"Estonia Forestry (Maaamet)","type":"wms","template":"http://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=cir_ngr&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","polygon":[[[21.6940073,57.5025466],[21.6940073,59.8274564],[28.2110546,59.8274564],[28.2110546,57.5025466],[21.6940073,57.5025466]]],"terms_text":"Maa-Ameti metsanduslik ortofoto"},{"id":"maaamet.ee-reljeef","name":"Estonia Hillshading (Maaamet)","type":"wms","template":"http://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=reljeef&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","polygon":[[[21.6940073,57.5025466],[21.6940073,59.8274564],[28.2110546,59.8274564],[28.2110546,57.5025466],[21.6940073,57.5025466]]],"terms_text":"Maa-Ameti reljeefikaart"},{"id":"maaamet.ee-orto","name":"Estonia Ortho (Maaamet)","type":"tms","template":"http://tiles.maaamet.ee/tm/tms/1.0.0/foto@GMC/{zoom}/{x}/{-y}.png","scaleExtent":[14,18],"polygon":[[[21.6940073,57.5025466],[21.6940073,59.8274564],[28.2110546,59.8274564],[28.2110546,57.5025466],[21.6940073,57.5025466]]],"terms_text":"Maa-Ameti ortofoto"},{"id":"estrela_de_alagoas","name":"Estrela de Alagoas","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Estrela%20de%20Alagoas&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.71382371133,-9.43475990551],[-36.7147678489,-9.34442676518],[-36.80585566705,-9.34497726095],[-36.80525485223,-9.43541609465],[-36.71382371133,-9.43475990551]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"FOMI_2000","name":"FÖMI orthophoto 2000","type":"tms","template":"http://e.tile.openstreetmap.hu/ortofoto2000/{zoom}/{x}/{y}.jpg","endDate":"2000-01-01T00:00:00.000Z","startDate":"2000-01-01T00:00:00.000Z","scaleExtent":[0,17],"polygon":[[[16.1139147,46.8691038],[16.1789749,46.90662],[16.2000429,46.9415079],[16.2217547,46.9355441],[16.2462784,46.9463851],[16.2553226,46.9642125],[16.2764694,46.9626082],[16.290583,47.0139849],[16.3016199,46.9992329],[16.3414618,46.9965225],[16.3505162,47.0106313],[16.3734016,46.9985929],[16.412765,47.00475],[16.4332705,46.9927417],[16.4478119,47.003893],[16.479997,46.9941169],[16.5121988,47.0011695],[16.4635584,47.0322699],[16.4478586,47.0227481],[16.439123,47.029663],[16.445673,47.038872],[16.520323,47.056103],[16.473213,47.0736169],[16.4637199,47.09392],[16.500798,47.110058],[16.500035,47.123295],[16.5295349,47.1287419],[16.5171609,47.1496938],[16.454951,47.1425878],[16.4648728,47.1683349],[16.4555643,47.1875584],[16.4305559,47.1847022],[16.4195013,47.1949147],[16.4189215,47.2107114],[16.4371293,47.2097043],[16.4426335,47.2337117],[16.4313127,47.2527554],[16.4671512,47.2531652],[16.4892319,47.2798885],[16.4646338,47.3338455],[16.4337002,47.3528101],[16.458513,47.3670496],[16.4454619,47.4070195],[16.4831657,47.4093628],[16.4963821,47.3892659],[16.5170941,47.4100218],[16.5749054,47.4054243],[16.5807291,47.4191699],[16.661847,47.455595],[16.6706419,47.47422],[16.6523395,47.500342],[16.6895619,47.510161],[16.7147797,47.540199],[16.663545,47.567733],[16.673199,47.6049544],[16.6595343,47.6061018],[16.652758,47.622852],[16.6314207,47.6283176],[16.5739108,47.619667],[16.5147382,47.6461964],[16.4967504,47.6393149],[16.425464,47.6621679],[16.4437449,47.674205],[16.4480507,47.6964725],[16.4746984,47.6811576],[16.4872245,47.6979767],[16.5521729,47.7225519],[16.5363779,47.736785],[16.5479799,47.751544],[16.6095193,47.7603722],[16.6344148,47.7590843],[16.65729,47.7414879],[16.7209405,47.7353565],[16.7534062,47.6828165],[16.8301587,47.681058],[16.8394284,47.7045139],[16.8668943,47.7211462],[16.876679,47.6876452],[17.0937421,47.7077706],[17.0706562,47.7285366],[17.0516019,47.7938499],[17.0749479,47.8084997],[17.047139,47.8285635],[17.0519452,47.8377691],[17.0105513,47.8581765],[17.0163878,47.8673325],[17.0857537,47.8746239],[17.113171,47.9271605],[17.0917133,47.9342916],[17.1183782,47.9601083],[17.094657,47.9708775],[17.2010289,48.019992],[17.241769,48.0224651],[17.257955,47.998655],[17.334651,47.993125],[17.4029929,47.947849],[17.4539199,47.8852579],[17.5267369,47.865509],[17.5675779,47.8151289],[17.608402,47.8218859],[17.7085789,47.756678],[17.7798739,47.739487],[17.8660959,47.74575],[17.9001292,47.7392633],[17.946867,47.744668],[17.9708709,47.7578392],[18.0044103,47.7463402],[18.0380583,47.7576812],[18.2958774,47.7314616],[18.4540681,47.7651226],[18.4931553,47.7527552],[18.5590761,47.7659963],[18.6460866,47.7590921],[18.7260691,47.7890411],[18.7411784,47.8138245],[18.7920013,47.8230869],[18.8485417,47.8167221],[18.855876,47.826077],[18.828014,47.834291],[18.8135749,47.85555],[18.76353,47.8716049],[18.756858,47.896838],[18.776746,47.955092],[18.7552499,47.9763469],[18.8157429,47.993442],[18.819998,48.039676],[18.833268,48.048239],[18.8749364,48.0470707],[18.886674,48.058682],[18.9089819,48.051139],[18.9439039,48.058865],[18.9816099,48.0536009],[19.0148639,48.078179],[19.0585249,48.0573529],[19.0843619,48.072781],[19.107402,48.065596],[19.1352889,48.074146],[19.2413679,48.0536529],[19.2557819,48.0715559],[19.3031119,48.088711],[19.3865969,48.091914],[19.400018,48.082304],[19.454053,48.101436],[19.467354,48.083933],[19.4944199,48.109906],[19.492377,48.1396639],[19.5128219,48.154663],[19.504518,48.173443],[19.528967,48.190358],[19.526044,48.20313],[19.577502,48.2160149],[19.6308263,48.2500725],[19.6445239,48.2391719],[19.669857,48.239212],[19.691219,48.203894],[19.721125,48.201473],[19.74618,48.2165119],[19.7871629,48.19253],[19.7987329,48.19482],[19.8052829,48.183733],[19.782415,48.165039],[19.794812,48.153529],[19.821331,48.169081],[19.8452819,48.162742],[19.8551729,48.178431],[19.8601309,48.169409],[19.898745,48.1663119],[19.9145359,48.146863],[19.898298,48.1249019],[19.937383,48.131118],[19.9743939,48.1660049],[19.988706,48.1621679],[20.029038,48.1776849],[20.049449,48.1671999],[20.0729859,48.179606],[20.0700369,48.1917019],[20.1340909,48.225182],[20.1331879,48.253982],[20.206162,48.250979],[20.2038299,48.261906],[20.228466,48.262779],[20.2349469,48.279933],[20.286858,48.26164],[20.3257109,48.272794],[20.3374649,48.301667],[20.3656579,48.316606],[20.384077,48.3511809],[20.4098349,48.365857],[20.402532,48.382565],[20.4205349,48.403858],[20.416228,48.418536],[20.507929,48.489363],[20.5065069,48.534415],[20.537471,48.527878],[20.5464939,48.544292],[20.586595,48.535759],[20.6538739,48.561413],[20.836359,48.58284],[20.8378,48.57421],[20.8504359,48.5816329],[20.8453301,48.5665046],[20.8681549,48.551818],[20.922323,48.559453],[20.9346349,48.538341],[20.955882,48.533963],[20.9561979,48.521666],[20.9815849,48.5177669],[21.0151139,48.532313],[21.0663209,48.525894],[21.1174479,48.4910549],[21.1608749,48.521499],[21.179634,48.518232],[21.221061,48.537497],[21.305488,48.5222489],[21.313377,48.550841],[21.326875,48.554129],[21.319384,48.561201],[21.4154499,48.558951],[21.4226649,48.578821],[21.4406099,48.585104],[21.514091,48.551065],[21.5420199,48.508395],[21.6139329,48.509416],[21.6201879,48.469826],[21.663549,48.417961],[21.6645609,48.392164],[21.7017409,48.380695],[21.711871,48.357617],[21.8174139,48.332787],[21.8352029,48.3346409],[21.837213,48.363253],[21.8842979,48.356047],[21.8848429,48.367539],[21.897883,48.36256],[21.8997959,48.3702229],[21.9281859,48.3615969],[21.9268059,48.370899],[21.949198,48.378728],[21.994463,48.377323],[22.0213259,48.392749],[22.0546049,48.377528],[22.0764859,48.387241],[22.086743,48.371564],[22.1359089,48.380519],[22.131056,48.3912329],[22.152768,48.3962409],[22.1561913,48.4093076],[22.2125722,48.4256468],[22.2371405,48.4100396],[22.2654858,48.4098675],[22.2398761,48.3870055],[22.2675722,48.3611612],[22.3178106,48.3545437],[22.3132861,48.3250712],[22.3372944,48.3079113],[22.3384267,48.2792074],[22.3847547,48.2339632],[22.4006407,48.249198],[22.4328384,48.2525166],[22.456386,48.2423109],[22.4899029,48.2534237],[22.4972201,48.2395546],[22.5161491,48.237965],[22.5311088,48.2094282],[22.5711442,48.1961428],[22.5616362,48.1816066],[22.5982449,48.144756],[22.5902763,48.1073414],[22.6754492,48.091997],[22.7347192,48.119848],[22.7576242,48.1200599],[22.7703914,48.1090162],[22.772319,48.1218742],[22.8027688,48.1221112],[22.8025285,48.1070813],[22.8254256,48.1175119],[22.8364365,48.080249],[22.8611284,48.0750312],[22.8677955,48.0524256],[22.8820424,48.0548053],[22.8659692,48.0113165],[22.835562,47.9905988],[22.8407599,47.9813636],[22.8725729,47.9752683],[22.8697274,47.9659593],[22.8915652,47.9672446],[22.897435,47.9540629],[22.8473299,47.9077579],[22.7928135,47.8908586],[22.7586924,47.8941446],[22.77775,47.8422508],[22.7136344,47.8360928],[22.6801938,47.7877527],[22.6111171,47.7717455],[22.5490018,47.7722246],[22.4812121,47.8108886],[22.4513078,47.803389],[22.4313319,47.7398119],[22.3566167,47.7486206],[22.3177714,47.7660887],[22.3176236,47.7433657],[22.2851369,47.7292757],[22.264325,47.7310675],[22.2589955,47.6979057],[22.2306796,47.693196],[22.1796501,47.5916115],[22.1289245,47.5978984],[22.0942787,47.5583628],[22.0782587,47.5621299],[22.0534529,47.5474795],[22.0712176,47.5380742],[22.0617872,47.5288029],[22.0451278,47.5398919],[22.0367222,47.5326653],[22.0071886,47.48362],[22.0327909,47.4508372],[22.0238835,47.3908631],[22.0119849,47.3758016],[21.9627373,47.381053],[21.9382461,47.3725317],[21.8777922,47.2857763],[21.8872845,47.2730473],[21.8534909,47.2397622],[21.8580662,47.1873597],[21.8124804,47.1667511],[21.7924092,47.1059751],[21.7268258,47.0983882],[21.6976037,47.057915],[21.6504151,47.0408303],[21.6888701,47.0019977],[21.6678744,46.9712337],[21.6814917,46.9652089],[21.6381964,46.9330487],[21.5984455,46.9274708],[21.6142857,46.8867275],[21.6016694,46.8668202],[21.520328,46.8373749],[21.5186086,46.8000703],[21.4831761,46.7650246],[21.5263389,46.7393249],[21.529369,46.7209721],[21.4923253,46.6859652],[21.4728438,46.6959075],[21.4299047,46.693937],[21.4309553,46.6781367],[21.4546661,46.660863],[21.4162375,46.6426231],[21.4097959,46.6218052],[21.3657038,46.6379501],[21.3300499,46.6318155],[21.3139733,46.617666],[21.3012351,46.5908672],[21.3207905,46.5828562],[21.2743045,46.5407362],[21.2600254,46.5021583],[21.2744188,46.4767333],[21.2964506,46.4762973],[21.3174343,46.4507288],[21.2895176,46.4154784],[21.2963256,46.4069601],[21.2250116,46.4136899],[21.2064214,46.4033825],[21.1992563,46.3479034],[21.1762269,46.3357664],[21.180497,46.3044494],[21.1155437,46.3018529],[21.1030549,46.2624637],[21.0708792,46.2539014],[21.0660827,46.2429394],[21.0366237,46.2480392],[21.0246723,46.2665329],[20.960817,46.2623039],[20.9465849,46.2793024],[20.9250701,46.2766191],[20.9218133,46.2618129],[20.8732713,46.2877555],[20.7756538,46.2759602],[20.7490474,46.2508489],[20.7618619,46.204563],[20.727401,46.2077485],[20.7341052,46.1939355],[20.7140487,46.1660531],[20.6843592,46.1447802],[20.6549178,46.1497739],[20.6394471,46.1267602],[20.5450486,46.1790935],[20.5014839,46.190334],[20.4949436,46.1709908],[20.4592293,46.1428837],[20.3975133,46.1574709],[20.3685325,46.1528554],[20.3557074,46.1696256],[20.2968136,46.1521542],[20.2549024,46.1158522],[20.2484757,46.1300956],[20.2330132,46.1241668],[20.1817362,46.1601137],[20.1364966,46.1449476],[20.1009667,46.1772756],[20.0636156,46.1437275],[20.0346142,46.1458888],[20.0158072,46.1768354],[19.9354075,46.1764243],[19.8533469,46.1500005],[19.8179747,46.1281652],[19.7585403,46.1479754],[19.6982054,46.1879317],[19.6827672,46.1800388],[19.661508,46.1904394],[19.6317396,46.1692993],[19.5676482,46.179106],[19.5604013,46.1665762],[19.5026585,46.1424492],[19.5271208,46.1210269],[19.4645033,46.0953827],[19.4665828,46.0820437],[19.4160037,46.0460453],[19.3803957,46.0358749],[19.3640923,46.0522965],[19.2819012,46.0148048],[19.2965348,45.9881173],[19.2856472,45.9968981],[19.1479857,45.9963445],[19.1338422,46.0370993],[19.104873,46.0401673],[19.0660427,46.0001999],[19.0796791,45.9636376],[19.0059803,45.9590674],[19.0092745,45.9236559],[18.9061334,45.9353801],[18.8794572,45.9166827],[18.8647137,45.9208493],[18.8685629,45.9113361],[18.8276792,45.9051714],[18.8220041,45.9145893],[18.8075092,45.9036055],[18.809247,45.8796189],[18.7956242,45.8784488],[18.7048857,45.9181883],[18.6700246,45.9108439],[18.6596602,45.9168934],[18.6651348,45.899279],[18.6412808,45.8890396],[18.6550179,45.8742393],[18.6277704,45.8733782],[18.6148449,45.8531438],[18.6236656,45.8398531],[18.5732391,45.8137578],[18.5749849,45.8004344],[18.559716,45.8037961],[18.5223504,45.7826858],[18.4906706,45.7947167],[18.4821905,45.7655032],[18.4562828,45.7695229],[18.4450763,45.7605195],[18.446853,45.737128],[18.40763,45.7397119],[18.3918949,45.7616983],[18.3642257,45.7729364],[18.3394214,45.7471605],[18.2968157,45.7612196],[18.2440473,45.7612305],[18.2307311,45.7790328],[18.1908702,45.7878759],[18.1681939,45.7762712],[18.1246514,45.7896277],[18.1068067,45.7708256],[18.0818922,45.7645205],[17.9958808,45.7957311],[17.9302095,45.7863301],[17.9066757,45.7925692],[17.8653145,45.7670064],[17.8262748,45.8099957],[17.8089784,45.8040989],[17.7809054,45.8174884],[17.7603399,45.811923],[17.7408624,45.8295975],[17.6632915,45.8381849],[17.6276211,45.8979446],[17.5700676,45.9358204],[17.4378254,45.9503823],[17.4258964,45.9272681],[17.4108059,45.9399665],[17.392149,45.9302149],[17.3828713,45.9475733],[17.3476208,45.9423413],[17.3438769,45.9605329],[17.3537711,45.9525011],[17.3905375,45.9581914],[17.387423,45.9661823],[17.3583539,45.9642737],[17.3754852,45.9686921],[17.3751895,45.9881054],[17.3635685,45.9915442],[17.3567202,45.9735836],[17.3339583,45.9960781],[17.3319847,45.9728948],[17.3129974,45.9665347],[17.323647,45.9887776],[17.2987653,45.9838652],[17.3041996,46.0021128],[17.2579726,46.0110256],[17.29632,46.0285169],[17.2541514,46.030005],[17.270955,46.0567055],[17.2324767,46.0592034],[17.2525145,46.0664725],[17.2313144,46.0790345],[17.2019916,46.0765488],[17.2331299,46.0989644],[17.2104017,46.1001693],[17.2129734,46.113855],[17.175927,46.1084583],[17.1743424,46.1287608],[17.1865197,46.1332308],[17.1810983,46.1505485],[17.1562307,46.1585819],[17.1592857,46.1696818],[17.1261012,46.1684495],[17.1227409,46.1789791],[17.0752482,46.1889531],[17.0661614,46.2022984],[16.9735401,46.2251982],[16.973954,46.2431113],[16.9504085,46.2415285],[16.8862356,46.2814598],[16.8713682,46.3252767],[16.8802109,46.3356966],[16.8615374,46.3452401],[16.8656232,46.3556489],[16.8521959,46.3517189],[16.8498589,46.3626245],[16.8352859,46.3638195],[16.8376499,46.3748032],[16.8261732,46.3670994],[16.7933444,46.387385],[16.7592072,46.3776563],[16.7298672,46.40149],[16.7182119,46.3898704],[16.6772872,46.4494536],[16.6631785,46.4486958],[16.6663732,46.4582995],[16.6187915,46.4619875],[16.604468,46.4760773],[16.5235997,46.5053761],[16.5325768,46.5314027],[16.5176728,46.5363516],[16.5084107,46.5652692],[16.4829969,46.5660383],[16.4834008,46.5786011],[16.4455713,46.610952],[16.4248583,46.6131645],[16.385941,46.6442485],[16.3915424,46.6637257],[16.4198454,46.6584771],[16.4286335,46.6939737],[16.3689211,46.7040082],[16.3798266,46.7153869],[16.3710856,46.7222945],[16.3570587,46.7142387],[16.3185954,46.7541449],[16.3305417,46.7752119],[16.3121626,46.7780033],[16.3127666,46.797314],[16.3406373,46.8051851],[16.3508404,46.8300552],[16.3403309,46.8468762],[16.3015007,46.8595142],[16.2913867,46.8728341],[16.2332296,46.8766702],[16.1560866,46.8537074],[16.126571,46.8569079],[16.1139147,46.8691038]]],"terms_url":"http://www.fomi.hu/","terms_text":"Földmérési és Távérzékelési Intézet"},{"id":"FOMI_2005","name":"FÖMI orthophoto 2005","type":"tms","template":"http://e.tile.openstreetmap.hu/ortofoto2005/{zoom}/{x}/{y}.jpg","endDate":"2005-01-01T00:00:00.000Z","startDate":"2005-01-01T00:00:00.000Z","scaleExtent":[0,17],"polygon":[[[16.1139147,46.8691038],[16.1789749,46.90662],[16.2000429,46.9415079],[16.2217547,46.9355441],[16.2462784,46.9463851],[16.2553226,46.9642125],[16.2764694,46.9626082],[16.290583,47.0139849],[16.3016199,46.9992329],[16.3414618,46.9965225],[16.3505162,47.0106313],[16.3734016,46.9985929],[16.412765,47.00475],[16.4332705,46.9927417],[16.4478119,47.003893],[16.479997,46.9941169],[16.5121988,47.0011695],[16.4635584,47.0322699],[16.4478586,47.0227481],[16.439123,47.029663],[16.445673,47.038872],[16.520323,47.056103],[16.473213,47.0736169],[16.4637199,47.09392],[16.500798,47.110058],[16.500035,47.123295],[16.5295349,47.1287419],[16.5171609,47.1496938],[16.454951,47.1425878],[16.4648728,47.1683349],[16.4555643,47.1875584],[16.4305559,47.1847022],[16.4195013,47.1949147],[16.4189215,47.2107114],[16.4371293,47.2097043],[16.4426335,47.2337117],[16.4313127,47.2527554],[16.4671512,47.2531652],[16.4892319,47.2798885],[16.4646338,47.3338455],[16.4337002,47.3528101],[16.458513,47.3670496],[16.4454619,47.4070195],[16.4831657,47.4093628],[16.4963821,47.3892659],[16.5170941,47.4100218],[16.5749054,47.4054243],[16.5807291,47.4191699],[16.661847,47.455595],[16.6706419,47.47422],[16.6523395,47.500342],[16.6895619,47.510161],[16.7147797,47.540199],[16.663545,47.567733],[16.673199,47.6049544],[16.6595343,47.6061018],[16.652758,47.622852],[16.6314207,47.6283176],[16.5739108,47.619667],[16.5147382,47.6461964],[16.4967504,47.6393149],[16.425464,47.6621679],[16.4437449,47.674205],[16.4480507,47.6964725],[16.4746984,47.6811576],[16.4872245,47.6979767],[16.5521729,47.7225519],[16.5363779,47.736785],[16.5479799,47.751544],[16.6095193,47.7603722],[16.6344148,47.7590843],[16.65729,47.7414879],[16.7209405,47.7353565],[16.7534062,47.6828165],[16.8301587,47.681058],[16.8394284,47.7045139],[16.8668943,47.7211462],[16.876679,47.6876452],[17.0937421,47.7077706],[17.0706562,47.7285366],[17.0516019,47.7938499],[17.0749479,47.8084997],[17.047139,47.8285635],[17.0519452,47.8377691],[17.0105513,47.8581765],[17.0163878,47.8673325],[17.0857537,47.8746239],[17.113171,47.9271605],[17.0917133,47.9342916],[17.1183782,47.9601083],[17.094657,47.9708775],[17.2010289,48.019992],[17.241769,48.0224651],[17.257955,47.998655],[17.334651,47.993125],[17.4029929,47.947849],[17.4539199,47.8852579],[17.5267369,47.865509],[17.5675779,47.8151289],[17.608402,47.8218859],[17.7085789,47.756678],[17.7798739,47.739487],[17.8660959,47.74575],[17.9001292,47.7392633],[17.946867,47.744668],[17.9708709,47.7578392],[18.0044103,47.7463402],[18.0380583,47.7576812],[18.2958774,47.7314616],[18.4540681,47.7651226],[18.4931553,47.7527552],[18.5590761,47.7659963],[18.6460866,47.7590921],[18.7260691,47.7890411],[18.7411784,47.8138245],[18.7920013,47.8230869],[18.8485417,47.8167221],[18.855876,47.826077],[18.828014,47.834291],[18.8135749,47.85555],[18.76353,47.8716049],[18.756858,47.896838],[18.776746,47.955092],[18.7552499,47.9763469],[18.8157429,47.993442],[18.819998,48.039676],[18.833268,48.048239],[18.8749364,48.0470707],[18.886674,48.058682],[18.9089819,48.051139],[18.9439039,48.058865],[18.9816099,48.0536009],[19.0148639,48.078179],[19.0585249,48.0573529],[19.0843619,48.072781],[19.107402,48.065596],[19.1352889,48.074146],[19.2413679,48.0536529],[19.2557819,48.0715559],[19.3031119,48.088711],[19.3865969,48.091914],[19.400018,48.082304],[19.454053,48.101436],[19.467354,48.083933],[19.4944199,48.109906],[19.492377,48.1396639],[19.5128219,48.154663],[19.504518,48.173443],[19.528967,48.190358],[19.526044,48.20313],[19.577502,48.2160149],[19.6308263,48.2500725],[19.6445239,48.2391719],[19.669857,48.239212],[19.691219,48.203894],[19.721125,48.201473],[19.74618,48.2165119],[19.7871629,48.19253],[19.7987329,48.19482],[19.8052829,48.183733],[19.782415,48.165039],[19.794812,48.153529],[19.821331,48.169081],[19.8452819,48.162742],[19.8551729,48.178431],[19.8601309,48.169409],[19.898745,48.1663119],[19.9145359,48.146863],[19.898298,48.1249019],[19.937383,48.131118],[19.9743939,48.1660049],[19.988706,48.1621679],[20.029038,48.1776849],[20.049449,48.1671999],[20.0729859,48.179606],[20.0700369,48.1917019],[20.1340909,48.225182],[20.1331879,48.253982],[20.206162,48.250979],[20.2038299,48.261906],[20.228466,48.262779],[20.2349469,48.279933],[20.286858,48.26164],[20.3257109,48.272794],[20.3374649,48.301667],[20.3656579,48.316606],[20.384077,48.3511809],[20.4098349,48.365857],[20.402532,48.382565],[20.4205349,48.403858],[20.416228,48.418536],[20.507929,48.489363],[20.5065069,48.534415],[20.537471,48.527878],[20.5464939,48.544292],[20.586595,48.535759],[20.6538739,48.561413],[20.836359,48.58284],[20.8378,48.57421],[20.8504359,48.5816329],[20.8453301,48.5665046],[20.8681549,48.551818],[20.922323,48.559453],[20.9346349,48.538341],[20.955882,48.533963],[20.9561979,48.521666],[20.9815849,48.5177669],[21.0151139,48.532313],[21.0663209,48.525894],[21.1174479,48.4910549],[21.1608749,48.521499],[21.179634,48.518232],[21.221061,48.537497],[21.305488,48.5222489],[21.313377,48.550841],[21.326875,48.554129],[21.319384,48.561201],[21.4154499,48.558951],[21.4226649,48.578821],[21.4406099,48.585104],[21.514091,48.551065],[21.5420199,48.508395],[21.6139329,48.509416],[21.6201879,48.469826],[21.663549,48.417961],[21.6645609,48.392164],[21.7017409,48.380695],[21.711871,48.357617],[21.8174139,48.332787],[21.8352029,48.3346409],[21.837213,48.363253],[21.8842979,48.356047],[21.8848429,48.367539],[21.897883,48.36256],[21.8997959,48.3702229],[21.9281859,48.3615969],[21.9268059,48.370899],[21.949198,48.378728],[21.994463,48.377323],[22.0213259,48.392749],[22.0546049,48.377528],[22.0764859,48.387241],[22.086743,48.371564],[22.1359089,48.380519],[22.131056,48.3912329],[22.152768,48.3962409],[22.1561913,48.4093076],[22.2125722,48.4256468],[22.2371405,48.4100396],[22.2654858,48.4098675],[22.2398761,48.3870055],[22.2675722,48.3611612],[22.3178106,48.3545437],[22.3132861,48.3250712],[22.3372944,48.3079113],[22.3384267,48.2792074],[22.3847547,48.2339632],[22.4006407,48.249198],[22.4328384,48.2525166],[22.456386,48.2423109],[22.4899029,48.2534237],[22.4972201,48.2395546],[22.5161491,48.237965],[22.5311088,48.2094282],[22.5711442,48.1961428],[22.5616362,48.1816066],[22.5982449,48.144756],[22.5902763,48.1073414],[22.6754492,48.091997],[22.7347192,48.119848],[22.7576242,48.1200599],[22.7703914,48.1090162],[22.772319,48.1218742],[22.8027688,48.1221112],[22.8025285,48.1070813],[22.8254256,48.1175119],[22.8364365,48.080249],[22.8611284,48.0750312],[22.8677955,48.0524256],[22.8820424,48.0548053],[22.8659692,48.0113165],[22.835562,47.9905988],[22.8407599,47.9813636],[22.8725729,47.9752683],[22.8697274,47.9659593],[22.8915652,47.9672446],[22.897435,47.9540629],[22.8473299,47.9077579],[22.7928135,47.8908586],[22.7586924,47.8941446],[22.77775,47.8422508],[22.7136344,47.8360928],[22.6801938,47.7877527],[22.6111171,47.7717455],[22.5490018,47.7722246],[22.4812121,47.8108886],[22.4513078,47.803389],[22.4313319,47.7398119],[22.3566167,47.7486206],[22.3177714,47.7660887],[22.3176236,47.7433657],[22.2851369,47.7292757],[22.264325,47.7310675],[22.2589955,47.6979057],[22.2306796,47.693196],[22.1796501,47.5916115],[22.1289245,47.5978984],[22.0942787,47.5583628],[22.0782587,47.5621299],[22.0534529,47.5474795],[22.0712176,47.5380742],[22.0617872,47.5288029],[22.0451278,47.5398919],[22.0367222,47.5326653],[22.0071886,47.48362],[22.0327909,47.4508372],[22.0238835,47.3908631],[22.0119849,47.3758016],[21.9627373,47.381053],[21.9382461,47.3725317],[21.8777922,47.2857763],[21.8872845,47.2730473],[21.8534909,47.2397622],[21.8580662,47.1873597],[21.8124804,47.1667511],[21.7924092,47.1059751],[21.7268258,47.0983882],[21.6976037,47.057915],[21.6504151,47.0408303],[21.6888701,47.0019977],[21.6678744,46.9712337],[21.6814917,46.9652089],[21.6381964,46.9330487],[21.5984455,46.9274708],[21.6142857,46.8867275],[21.6016694,46.8668202],[21.520328,46.8373749],[21.5186086,46.8000703],[21.4831761,46.7650246],[21.5263389,46.7393249],[21.529369,46.7209721],[21.4923253,46.6859652],[21.4728438,46.6959075],[21.4299047,46.693937],[21.4309553,46.6781367],[21.4546661,46.660863],[21.4162375,46.6426231],[21.4097959,46.6218052],[21.3657038,46.6379501],[21.3300499,46.6318155],[21.3139733,46.617666],[21.3012351,46.5908672],[21.3207905,46.5828562],[21.2743045,46.5407362],[21.2600254,46.5021583],[21.2744188,46.4767333],[21.2964506,46.4762973],[21.3174343,46.4507288],[21.2895176,46.4154784],[21.2963256,46.4069601],[21.2250116,46.4136899],[21.2064214,46.4033825],[21.1992563,46.3479034],[21.1762269,46.3357664],[21.180497,46.3044494],[21.1155437,46.3018529],[21.1030549,46.2624637],[21.0708792,46.2539014],[21.0660827,46.2429394],[21.0366237,46.2480392],[21.0246723,46.2665329],[20.960817,46.2623039],[20.9465849,46.2793024],[20.9250701,46.2766191],[20.9218133,46.2618129],[20.8732713,46.2877555],[20.7756538,46.2759602],[20.7490474,46.2508489],[20.7618619,46.204563],[20.727401,46.2077485],[20.7341052,46.1939355],[20.7140487,46.1660531],[20.6843592,46.1447802],[20.6549178,46.1497739],[20.6394471,46.1267602],[20.5450486,46.1790935],[20.5014839,46.190334],[20.4949436,46.1709908],[20.4592293,46.1428837],[20.3975133,46.1574709],[20.3685325,46.1528554],[20.3557074,46.1696256],[20.2968136,46.1521542],[20.2549024,46.1158522],[20.2484757,46.1300956],[20.2330132,46.1241668],[20.1817362,46.1601137],[20.1364966,46.1449476],[20.1009667,46.1772756],[20.0636156,46.1437275],[20.0346142,46.1458888],[20.0158072,46.1768354],[19.9354075,46.1764243],[19.8533469,46.1500005],[19.8179747,46.1281652],[19.7585403,46.1479754],[19.6982054,46.1879317],[19.6827672,46.1800388],[19.661508,46.1904394],[19.6317396,46.1692993],[19.5676482,46.179106],[19.5604013,46.1665762],[19.5026585,46.1424492],[19.5271208,46.1210269],[19.4645033,46.0953827],[19.4665828,46.0820437],[19.4160037,46.0460453],[19.3803957,46.0358749],[19.3640923,46.0522965],[19.2819012,46.0148048],[19.2965348,45.9881173],[19.2856472,45.9968981],[19.1479857,45.9963445],[19.1338422,46.0370993],[19.104873,46.0401673],[19.0660427,46.0001999],[19.0796791,45.9636376],[19.0059803,45.9590674],[19.0092745,45.9236559],[18.9061334,45.9353801],[18.8794572,45.9166827],[18.8647137,45.9208493],[18.8685629,45.9113361],[18.8276792,45.9051714],[18.8220041,45.9145893],[18.8075092,45.9036055],[18.809247,45.8796189],[18.7956242,45.8784488],[18.7048857,45.9181883],[18.6700246,45.9108439],[18.6596602,45.9168934],[18.6651348,45.899279],[18.6412808,45.8890396],[18.6550179,45.8742393],[18.6277704,45.8733782],[18.6148449,45.8531438],[18.6236656,45.8398531],[18.5732391,45.8137578],[18.5749849,45.8004344],[18.559716,45.8037961],[18.5223504,45.7826858],[18.4906706,45.7947167],[18.4821905,45.7655032],[18.4562828,45.7695229],[18.4450763,45.7605195],[18.446853,45.737128],[18.40763,45.7397119],[18.3918949,45.7616983],[18.3642257,45.7729364],[18.3394214,45.7471605],[18.2968157,45.7612196],[18.2440473,45.7612305],[18.2307311,45.7790328],[18.1908702,45.7878759],[18.1681939,45.7762712],[18.1246514,45.7896277],[18.1068067,45.7708256],[18.0818922,45.7645205],[17.9958808,45.7957311],[17.9302095,45.7863301],[17.9066757,45.7925692],[17.8653145,45.7670064],[17.8262748,45.8099957],[17.8089784,45.8040989],[17.7809054,45.8174884],[17.7603399,45.811923],[17.7408624,45.8295975],[17.6632915,45.8381849],[17.6276211,45.8979446],[17.5700676,45.9358204],[17.4378254,45.9503823],[17.4258964,45.9272681],[17.4108059,45.9399665],[17.392149,45.9302149],[17.3828713,45.9475733],[17.3476208,45.9423413],[17.3438769,45.9605329],[17.3537711,45.9525011],[17.3905375,45.9581914],[17.387423,45.9661823],[17.3583539,45.9642737],[17.3754852,45.9686921],[17.3751895,45.9881054],[17.3635685,45.9915442],[17.3567202,45.9735836],[17.3339583,45.9960781],[17.3319847,45.9728948],[17.3129974,45.9665347],[17.323647,45.9887776],[17.2987653,45.9838652],[17.3041996,46.0021128],[17.2579726,46.0110256],[17.29632,46.0285169],[17.2541514,46.030005],[17.270955,46.0567055],[17.2324767,46.0592034],[17.2525145,46.0664725],[17.2313144,46.0790345],[17.2019916,46.0765488],[17.2331299,46.0989644],[17.2104017,46.1001693],[17.2129734,46.113855],[17.175927,46.1084583],[17.1743424,46.1287608],[17.1865197,46.1332308],[17.1810983,46.1505485],[17.1562307,46.1585819],[17.1592857,46.1696818],[17.1261012,46.1684495],[17.1227409,46.1789791],[17.0752482,46.1889531],[17.0661614,46.2022984],[16.9735401,46.2251982],[16.973954,46.2431113],[16.9504085,46.2415285],[16.8862356,46.2814598],[16.8713682,46.3252767],[16.8802109,46.3356966],[16.8615374,46.3452401],[16.8656232,46.3556489],[16.8521959,46.3517189],[16.8498589,46.3626245],[16.8352859,46.3638195],[16.8376499,46.3748032],[16.8261732,46.3670994],[16.7933444,46.387385],[16.7592072,46.3776563],[16.7298672,46.40149],[16.7182119,46.3898704],[16.6772872,46.4494536],[16.6631785,46.4486958],[16.6663732,46.4582995],[16.6187915,46.4619875],[16.604468,46.4760773],[16.5235997,46.5053761],[16.5325768,46.5314027],[16.5176728,46.5363516],[16.5084107,46.5652692],[16.4829969,46.5660383],[16.4834008,46.5786011],[16.4455713,46.610952],[16.4248583,46.6131645],[16.385941,46.6442485],[16.3915424,46.6637257],[16.4198454,46.6584771],[16.4286335,46.6939737],[16.3689211,46.7040082],[16.3798266,46.7153869],[16.3710856,46.7222945],[16.3570587,46.7142387],[16.3185954,46.7541449],[16.3305417,46.7752119],[16.3121626,46.7780033],[16.3127666,46.797314],[16.3406373,46.8051851],[16.3508404,46.8300552],[16.3403309,46.8468762],[16.3015007,46.8595142],[16.2913867,46.8728341],[16.2332296,46.8766702],[16.1560866,46.8537074],[16.126571,46.8569079],[16.1139147,46.8691038]]],"terms_url":"http://www.fomi.hu/","terms_text":"Földmérési és Távérzékelési Intézet"},{"id":"Freemap.sk-Car","name":"Freemap.sk Car","type":"tms","template":"http://t{switch:1,2,3,4}.freemap.sk/A/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved.","icon":"http://www.freemap.sk/index.php?c=core.download&filename=/JOSM/freemap.png"},{"id":"Freemap.sk-Cyclo","name":"Freemap.sk Cyclo","type":"tms","template":"http://t{switch:1,2,3,4}.freemap.sk/C/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved.","icon":"http://www.freemap.sk/index.php?c=core.download&filename=/JOSM/freemap.png"},{"id":"Freemap.sk-Hiking","name":"Freemap.sk Hiking","type":"tms","template":"http://t{switch:1,2,3,4}.freemap.sk/T/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved.","icon":"http://www.freemap.sk/index.php?c=core.download&filename=/JOSM/freemap.png"},{"id":"Freemap.sk-Ski","name":"Freemap.sk Ski","type":"tms","template":"http://t{switch:1,2,3,4}.freemap.sk/K/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved.","icon":"http://www.freemap.sk/index.php?c=core.download&filename=/JOSM/freemap.png"},{"id":"Geobase_Hydrography","name":"Geobase Hydrography","type":"wms","template":"http://ows.geobase.ca/wms/geobase_en?service=wms&request=GetMap&version=1.1.1&SRS={proj}&style=&format=image/png&transparent=true&layers=nhn:hydrography,nhn:network&WIDTH={width}&height={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.1923701,48.6550408],[-122.9958159,48.5106543],[-122.4868966,48.4098005],[-122.3291531,48.4527983],[-122.229391,48.5064943],[-122.1790836,48.5296509],[-122.1841996,48.566905],[-121.7783298,48.5759321],[-121.6657777,48.4279093],[-121.3306793,48.3571354],[-121.0271296,48.3497692],[-121.0305403,48.4940645],[-120.6979999,48.5149675],[-120.510413,48.8718034],[-119.9757904,48.8813368],[-119.9544737,48.5149675],[-119.907577,48.2942056],[-119.7319275,48.1550316],[-119.7438648,48.0741943],[-119.622786,48.1095051],[-119.602322,48.1470674],[-119.2527283,48.1624259],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{"id":"Geobase_Roads","name":"Geobase Roads","type":"wms","template":"http://ows.geobase.ca/wms/geobase_en?service=wms&request=GetMap&version=1.1.1&SRS={proj}&style=&format=image/png&transparent=true&layers=nrn:addressrange,nrn:streetnames,nrn:streetnames:streetnames_primary,nrn:streetnames:streetnames_secondary,nrn:streetnames:streetnames_other,nhn:hydrography,nrn:roadnetwork&WIDTH={width}&height={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.1923701,48.6550408],[-122.9958159,48.5106543],[-122.4868966,48.4098005],[-122.3291531,48.4527983],[-122.229391,48.5064943],[-122.1790836,48.5296509],[-122.1841996,48.566905],[-121.7783298,48.5759321],[-121.6657777,48.4279093],[-121.3306793,48.3571354],[-121.0271296,48.3497692],[-121.0305403,48.4940645],[-120.6979999,48.5149675],[-120.510413,48.8718034],[-119.9757904,48.8813368],[-119.9544737,48.5149675],[-119.907577,48.2942056],[-119.7319275,48.1550316],[-119.7438648,48.0741943],[-119.622786,48.1095051],[-119.602322,48.1470674],[-119.2527283,48.1624259],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{"id":"geoimage.at","name":"Geoimage.at MaxRes","type":"wms","template":"http://gis.lebensministerium.at/wmsgw/?key=4d80de696cd562a63ce463a58a61488d&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Luftbild_MR,Luftbild_1m,Luftbild_8m,Satellitenbild_30m&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[16.5073284,46.9929304],[16.283417,46.9929304],[16.135839,46.8713046],[15.9831722,46.8190947],[16.0493278,46.655175],[15.8610387,46.7180116],[15.7592608,46.6900933],[15.5607938,46.6796202],[15.5760605,46.6342132],[15.4793715,46.6027553],[15.4335715,46.6516819],[15.2249267,46.6342132],[15.0468154,46.6481886],[14.9908376,46.5887681],[14.9603042,46.6237293],[14.8534374,46.6027553],[14.8330818,46.5012666],[14.7516595,46.4977636],[14.6804149,46.4381781],[14.6142593,46.4381781],[14.578637,46.3785275],[14.4412369,46.4311638],[14.1613476,46.4276563],[14.1257253,46.4767409],[14.0188585,46.4767409],[13.9119917,46.5257813],[13.8254805,46.5047694],[13.4438134,46.560783],[13.3064132,46.5502848],[13.1283019,46.5887681],[12.8433237,46.6132433],[12.7262791,46.6412014],[12.5125455,46.6656529],[12.3598787,46.7040543],[12.3649676,46.7703197],[12.2886341,46.7772902],[12.2733674,46.8852187],[12.2072118,46.8747835],[12.1308784,46.9026062],[12.1156117,46.9998721],[12.2530119,47.0657733],[12.2123007,47.0934969],[11.9833004,47.0449712],[11.7339445,46.9616816],[11.6321666,47.010283],[11.5405665,46.9755722],[11.4998553,47.0068129],[11.418433,46.9651546],[11.2555884,46.9755722],[11.1130993,46.913036],[11.0418548,46.7633482],[10.8891879,46.7598621],[10.7416099,46.7842599],[10.7059877,46.8643462],[10.5787653,46.8399847],[10.4566318,46.8504267],[10.4769874,46.9269392],[10.3853873,46.9894592],[10.2327204,46.8643462],[10.1207647,46.8330223],[9.8663199,46.9408389],[9.9019422,47.0033426],[9.6831197,47.0588402],[9.6118752,47.0380354],[9.6322307,47.128131],[9.5813418,47.1662025],[9.5406306,47.2664422],[9.6067863,47.3492559],[9.6729419,47.369939],[9.6424085,47.4457079],[9.5660751,47.4801122],[9.7136531,47.5282405],[9.7848976,47.5969187],[9.8357866,47.5454185],[9.9477423,47.538548],[10.0902313,47.4491493],[10.1105869,47.3664924],[10.2428982,47.3871688],[10.1869203,47.2698953],[10.3243205,47.2975125],[10.4820763,47.4491493],[10.4311873,47.4869904],[10.4413651,47.5900549],[10.4871652,47.5522881],[10.5482319,47.5351124],[10.5991209,47.5660246],[10.7568766,47.5316766],[10.8891879,47.5454185],[10.9400769,47.4869904],[10.9960547,47.3906141],[11.2352328,47.4422662],[11.2810328,47.3975039],[11.4235219,47.5144941],[11.5761888,47.5076195],[11.6067221,47.5900549],[11.8357224,47.5866227],[12.003656,47.6243647],[12.2072118,47.6037815],[12.1614117,47.6963421],[12.2581008,47.7442718],[12.2530119,47.6792136],[12.4311232,47.7100408],[12.4921899,47.631224],[12.5685234,47.6277944],[12.6295901,47.6894913],[12.7720792,47.6689338],[12.8331459,47.5419833],[12.975635,47.4732332],[13.0417906,47.4938677],[13.0367017,47.5557226],[13.0977685,47.6415112],[13.0316128,47.7100408],[12.9043905,47.7203125],[13.0061684,47.84683],[12.9451016,47.9355501],[12.8636793,47.9594103],[12.8636793,48.0036929],[12.7517236,48.0989418],[12.8738571,48.2109733],[12.9603683,48.2109733],[13.0417906,48.2652035],[13.1842797,48.2990682],[13.2606131,48.2922971],[13.3980133,48.3565867],[13.4438134,48.417418],[13.4387245,48.5523383],[13.509969,48.5860123],[13.6117469,48.5725454],[13.7287915,48.5118999],[13.7847694,48.5725454],[13.8203916,48.6263915],[13.7949471,48.7171267],[13.850925,48.7741724],[14.0595697,48.6633774],[14.0137696,48.6331182],[14.0748364,48.5927444],[14.2173255,48.5961101],[14.3649034,48.5489696],[14.4666813,48.6499311],[14.5582815,48.5961101],[14.5989926,48.6263915],[14.7211261,48.5759124],[14.7211261,48.6868997],[14.822904,48.7271983],[14.8178151,48.777526],[14.9647227,48.7851754],[14.9893637,49.0126611],[15.1485933,48.9950306],[15.1943934,48.9315502],[15.3063491,48.9850128],[15.3928603,48.9850128],[15.4844604,48.9282069],[15.749083,48.8545973],[15.8406831,48.8880697],[16.0086166,48.7808794],[16.2070835,48.7339115],[16.3953727,48.7372678],[16.4920617,48.8110498],[16.6905286,48.7741724],[16.7057953,48.7339115],[16.8991733,48.713769],[16.9755067,48.515271],[16.8482844,48.4511817],[16.8533733,48.3464411],[16.9551512,48.2516513],[16.9907734,48.1498955],[17.0925513,48.1397088],[17.0823736,48.0241182],[17.1739737,48.0207146],[17.0823736,47.8741447],[16.9856845,47.8673174],[17.0823736,47.8092489],[17.0925513,47.7031919],[16.7414176,47.6792136],[16.7057953,47.7511153],[16.5378617,47.7545368],[16.5480395,47.7066164],[16.4208172,47.6689338],[16.573484,47.6175045],[16.670173,47.631224],[16.7108842,47.538548],[16.6599952,47.4491493],[16.5429506,47.3940591],[16.4615283,47.3940591],[16.4920617,47.276801],[16.425906,47.1973317],[16.4717061,47.1489007],[16.5480395,47.1489007],[16.476795,47.0796369],[16.527684,47.0588402],[16.5073284,46.9929304]]],"terms_text":"geoimage.at","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QwTFA8gQvGHigAAAwtJREFUOMvtk19oW1Ucx7/nnntukpvGtF2btHG1o52bYxULOp99sYggiM7pVKbbQNCH+SYOFMHCHhR88g9jjPmgm32YMpGNTbpp1W5D7NyfJnYLTdNm3ZI0SZPc5N5zzz3n+CIiCtM9+KQf+D39+H74Pfy+wH8Ocqvlh4enyblMO7JpKHl/X080sbhcnH3r3eNXkR1XtyU8cHiS2Hakf+iuxJ7enq7n4x12ijFDtz3fW11tzBZL1YMnpjKfvrN3m/O3ws+OTRnxmP1gsrf7g2RizUbGLCtkGdSkBnigtPCFaLXc1ZvF8vfZXOG1HdvGcn/M0z8Ln9nx8vBAas0ngwN9dzPGmGlSCkIMrTQxQABCSDjE2B2xyJ2E0A0d/Q+cPP/tMb7v0Kwx+tBz5PcL9350mXZFVuzR4b73Nm3o326HQpYdNonWMEAIgdZQWmvP8yECpZptKetNtzqTLkz8UpBfKmJ1tJo1SgBgfP8V2mhVn2JYet0Osc09Xabp+DFdbpgkV7SQ6jbRdCXaHAgU4AsFj0sQAFGbgguNhsPRqiyeM/d/PkezS4WxRilzpLM5ga5EEu5qGJvXDZFDuXvA4sO4b30MXCi4XCLRGYZhaFQaEtTQ6I5bKNV8HJ3ML1cLM+Pm1fnCaNFZmLhRORkkUltIpl2mI/duxMW8Rk0N4okRG3OLDtb2RlB3AthhgXI9QLbgIp13QQ0CrQSEU57JnX3/OBnbfWBfpVIZjEb7DClb8WRv50jMDqesSNzwpU+UFAiZFIGmaHsKFjNAKNOub8LhkC6XbiD4wvXLR19dOH/wzF9+8McL6Uev31jJNlrc8Xjg+4GSvlBKSKXaLpfFUk3kl5bddOZa7dTk1PTT2194DED3LfqxlZz+7qc35uZvXitXHdf1ROALKX+boO353nKpXr2UyU9/deLMzn9aPfLNDz+/NLC2/0WDhgZNxnqYSUzOA0f4vMg9J33xytzHz2595Ivb6vKet48kHx/b8mQ40vFwNMKS9UbzQmWleHrXK29+XZs/1cD//Cv8CriEgFStQ2K4AAAAAElFTkSuQmCC"},{"id":"Geolittoral-Orthophotos2000","name":"Géolittoral - Orthophotos 2000","type":"wms","template":"http://geolittoral.application.developpement-durable.gouv.fr/wms2/metropole?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortholittorale&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2000-01-01T00:00:00.000Z","startDate":"2000-01-01T00:00:00.000Z","polygon":[[[-1.0796243,46.1095893],[-0.9411452,46.0147437],[-0.5630573,45.1517801],[-0.7265951,45.0842493],[-0.8790355,45.340936],[-0.9979449,45.3377907],[-0.9555838,44.6998247],[-1.1586189,44.1986482],[-1.2151202,44.2055773],[-1.2465448,44.1162047],[-1.2790262,44.0393718],[-1.2882474,44.0230397],[-1.3211693,43.9409384],[-1.321506,43.922956],[-1.3092024,43.9233665],[-1.308503,43.914392],[-1.2836627,43.9151384],[-1.2830152,43.9062373],[-1.2760964,43.9065485],[-1.2821086,43.8925378],[-1.3010173,43.8515886],[-1.3038406,43.8423978],[-1.3092283,43.8349806],[-1.3347421,43.7694562],[-1.3440669,43.7487464],[-1.3455951,43.742141],[-1.3467348,43.7368823],[-1.432844,43.53152],[-1.4280594,43.4681233],[-1.6062745,43.4059107],[-1.6060955,43.3601202],[-1.7744064,43.3035717],[-1.8299531,43.384841],[-1.5855116,43.4685563],[-1.3570598,44.0337366],[-1.4021655,44.0646122],[-1.3358385,44.2283161],[-1.218361,44.2303255],[-1.1679453,44.4109713],[-1.3074387,44.418472],[-1.1697949,45.5910689],[-1.486847,46.0604176],[-1.3636417,46.0914593],[-1.601759,46.1701852],[-1.6444184,46.2237487],[-1.5859481,46.304264],[-1.5100772,46.3388783],[-1.756428,46.4221446],[-2.1871988,46.8185697],[-2.1642284,46.8553436],[-2.2365406,46.9337048],[-2.3976918,46.9671834],[-2.2820042,47.0763113],[-2.1256261,47.018745],[-2.0901262,47.065624],[-2.184872,47.1069799],[-2.2647018,47.1076296],[-2.2448935,47.1856218],[-2.5677926,47.2446686],[-2.6672667,47.4668599],[-2.7478721,47.4712158],[-2.7577135,47.4346122],[-2.8932063,47.4629031],[-2.9036899,47.5090529],[-3.0338252,47.5383308],[-3.0711295,47.5118452],[-3.0165289,47.4987314],[-3.1250228,47.4269256],[-3.1880328,47.4844142],[-3.2279087,47.6113186],[-3.2966969,47.6316051],[-3.2875957,47.6715415],[-3.3407355,47.6689257],[-3.3891187,47.5947342],[-3.55087,47.6382724],[-3.5338384,47.724884],[-3.7657669,47.7647571],[-3.7759528,47.737096],[-3.9116771,47.7591549],[-3.8959022,47.7991129],[-3.9723628,47.8152607],[-3.9972201,47.7975006],[-3.97956,47.7626769],[-3.8945008,47.7219346],[-3.9161956,47.6783103],[-4.1016259,47.7092072],[-4.0898857,47.7894357],[-4.0379763,47.7990868],[-4.0412502,47.8310926],[-4.0876491,47.8422143],[-4.1478057,47.8252534],[-4.1431427,47.7884708],[-4.3516237,47.7414997],[-4.4796232,47.9776016],[-4.9856536,47.9989633],[-4.9693825,48.0897202],[-4.63576,48.0779844],[-4.6014717,48.1146852],[-4.3850007,48.1096154],[-4.3895513,48.1454286],[-4.3092543,48.1500888],[-4.3126821,48.1769373],[-4.4636854,48.1846773],[-4.4974841,48.1453035],[-4.5921009,48.1475763],[-4.5753669,48.22488],[-4.6710089,48.2330974],[-4.654341,48.3104921],[-4.8424298,48.3004956],[-5.1986731,48.4492607],[-5.103461,48.5172155],[-4.81465,48.3941286],[-4.8351542,48.5431896],[-4.6338697,48.6637334],[-3.9669223,48.7797813],[-3.9493945,48.7471474],[-3.6501973,48.7535602],[-3.6585313,48.8252653],[-3.539314,48.8583372],[-3.5444401,48.9029653],[-3.4095425,48.9186584],[-3.4075537,48.8736644],[-3.0276871,48.9275037],[-2.6786137,48.5884071],[-2.2847486,48.7190877],[-2.1754283,48.650163],[-2.0136968,48.7322121],[-1.8095282,48.7317759],[-1.8039194,48.6612609],[-1.6116146,48.6858177],[-1.7164548,49.2478104],[-1.8026014,49.3272144],[-1.8574757,49.3253007],[-1.9262013,49.6557284],[-2.03908,49.6787215],[-2.0044546,49.7608677],[-1.6175855,49.6849834],[-1.2837344,49.7606702],[-1.1492009,49.6350423],[-1.1713375,49.5541159],[-1.2735291,49.5524476],[-1.1327984,49.3933982],[-0.930595,49.4080413],[-0.7482671,49.3597647],[-0.3893456,49.34167],[-0.2470445,49.2999494],[-0.1245368,49.2935335],[0.0273095,49.3761879],[0.0180063,49.5465556],[0.1221093,49.6929183],[0.5171306,49.8646551],[1.057268,49.9490353],[1.4390814,50.1181936],[1.5317687,50.4643666],[1.5254895,50.8586668],[1.6411818,50.9591925],[2.452105,51.1214375],[2.5928557,51.1212359],[2.6068264,51.0577932],[1.7975971,50.8990562],[1.6645759,50.8237878],[1.7078633,50.1282048],[1.0593618,49.85],[0.6160689,49.7906207],[0.2473107,49.6502699],[0.1709048,49.5317374],[0.5706464,49.496223],[0.4111492,49.3395965],[0.1950421,49.3573571],[0.0171786,49.2547917],[-0.2445265,49.2631234],[-0.3840751,49.3049516],[-0.7409079,49.3243829],[-0.995405,49.3713264],[-1.0545337,49.2517481],[-1.27704,49.2902182],[-1.2596644,49.4346254],[-1.3914123,49.5398482],[-1.2753453,49.6205575],[-1.2977482,49.6594602],[-1.490498,49.5713903],[-1.77517,49.6339843],[-1.7460051,49.4815523],[-1.5129407,49.2469097],[-1.4826149,48.7260698],[-1.3057444,48.725312],[-1.283234,48.5973085],[-2.7611439,48.4347142],[-3.0017371,48.6764625],[-3.210615,48.7209691],[-3.9540369,48.5605102],[-4.1564328,48.6079181],[-4.4447478,48.5585184],[-4.6368255,48.482991],[-4.6318979,48.4472691],[-4.2502228,48.43088],[-4.0614098,48.2180466],[-4.1757039,48.0516486],[-4.3190366,48.0140984],[-4.2678092,47.8997734],[-3.8848444,47.9817224],[-3.7637481,47.8640348],[-2.3272701,47.5263402],[-2.3691075,47.3338959],[-1.7406713,47.3350685],[-1.7706224,47.204506],[-2.0367815,47.2194206],[-2.096803,47.1554772],[-1.8878613,47.0123909],[-2.0879728,46.8300739],[-2.0121404,46.8343598],[-1.8407867,46.6965096],[-1.873184,46.654836],[-1.688585,46.5039205],[-1.6211652,46.5151306],[-1.4242755,46.4167482],[-1.0176087,46.3591735],[-1.0796243,46.1095893]],[[-2.4123238,46.6924223],[-2.3719717,46.676112],[-2.2674923,46.680326],[-2.270068,46.7070521],[-2.2982682,46.7328597],[-2.4165505,46.7371145],[-2.4123238,46.6924223]],[[-3.06018,47.4054194],[-2.8258703,47.2963471],[-2.7878715,47.3341715],[-3.0243638,47.4456259],[-3.06018,47.4054194]],[[-3.2648203,47.4295047],[-3.334303,47.3592752],[-3.2961388,47.3413278],[-3.3148902,47.3005706],[-3.1994054,47.2449216],[-3.1656728,47.2775103],[-3.086864,47.2361201],[-3.0063687,47.3085541],[-3.2648203,47.4295047]],[[-1.939663,48.8634633],[-1.9399349,48.9117889],[-1.7009983,48.9110507],[-1.6972613,48.8617305],[-1.939663,48.8634633]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral","terms_text":"Ortho littorale 2000"},{"id":"Geolittoral-Sentiers","name":"Géolittoral - Sentiers","type":"wms","template":"http://geolittoral.application.developpement-durable.gouv.fr/wms2/metropole?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=n_sentier_littoral_l&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-0.9838474,46.1880746],[-0.8949679,46.156277],[-0.934552,46.1016299],[-0.843878,46.0694893],[-0.8824065,46.0163689],[-0.5378663,45.8955775],[-0.6349793,45.7644353],[-0.8666589,45.8479032],[-0.7626356,45.6245041],[-0.6969519,45.6265921],[-0.6939663,45.6018445],[-0.6875472,45.6017401],[-0.6879951,45.5098594],[-0.6379859,45.5089178],[-0.6397773,45.4474748],[-0.615743,45.4469511],[-0.6161909,45.3858599],[-0.585439,45.3859647],[-0.5852897,45.3233381],[-0.5537914,45.323443],[-0.5527464,45.1966145],[-0.490944,45.195773],[-0.4918397,45.1331467],[-0.4566094,45.133252],[-0.4551166,45.0716113],[-0.4161067,45.0708893],[-0.4162123,45.0269636],[-0.2907042,44.9827801],[-0.2199988,45.0677104],[-0.1225183,45.0256272],[-0.1892469,44.9459114],[-0.0926621,44.9101881],[-0.145209,44.8392042],[-0.1549123,44.8423797],[-0.1938747,44.7867829],[-0.4354115,44.8731731],[-0.3904779,44.6841324],[-0.5879767,44.6601403],[-0.6662784,44.9912911],[-0.7783806,44.9926348],[-0.7776417,45.0538898],[-0.8158437,45.0532114],[-0.818377,45.1196158],[-0.8839284,45.1205096],[-0.8817117,45.1808092],[-0.9343849,45.1818509],[-0.9328016,45.2448356],[-1.0016252,45.2443896],[-1.0024696,45.3082702],[-1.0523984,45.3101261],[-1.0482817,45.3691125],[-1.0641153,45.3691125],[-1.0503928,45.1825205],[-1.1076051,44.8078702],[-1.0151366,44.8011296],[-1.0194644,44.7691388],[-0.933646,44.7614944],[-0.9404017,44.7018029],[-0.9603521,44.5643388],[-1.014081,44.5676478],[-1.0991605,44.1456002],[-1.2268852,44.140222],[-1.2185281,44.0324931],[-1.3076188,44.029002],[-1.3957164,43.7430052],[-1.3129592,43.7295057],[-1.3743937,43.5310863],[-1.3458932,43.506056],[-1.599642,43.3542258],[-1.7654877,43.255483],[-1.7928061,43.2803753],[-1.8028079,43.4042503],[-1.7283167,43.4503267],[-1.5853054,43.4890037],[-1.3358385,44.2283161],[-1.3074387,44.418472],[-1.2251061,45.4441615],[-1.486847,46.0604176],[-1.601759,46.1701852],[-1.6444184,46.2237487],[-1.756428,46.4221446],[-2.0348287,46.6189544],[-2.3465983,46.6238164],[-2.4656134,46.7119647],[-2.3232967,46.8381171],[-2.4528645,46.9385605],[-2.3173318,47.1621397],[-2.9284827,47.2841337],[-2.967417,47.2214691],[-3.3560228,47.3247359],[-3.1880328,47.4844142],[-3.2279087,47.6113186],[-3.3891187,47.5947342],[-3.9161956,47.6783103],[-4.1016259,47.7092072],[-4.1431427,47.7884708],[-4.3761893,47.7106674],[-4.4796232,47.9776016],[-4.9856536,47.9989633],[-4.9693825,48.0897202],[-4.6014717,48.1146852],[-4.5921009,48.1475763],[-4.6710089,48.2330974],[-4.8424298,48.3004956],[-5.1986731,48.4492607],[-5.103461,48.5172155],[-4.8351542,48.5431896],[-4.6311736,48.6612896],[-3.9669223,48.7797813],[-3.9493945,48.7471474],[-3.6701315,48.895078],[-3.5444401,48.9029653],[-3.4095425,48.9186584],[-3.3334381,48.904579],[-3.0276871,48.9275037],[-2.8020731,48.7979285],[-2.6935289,48.7672208],[-2.4578583,48.7089607],[-2.2847486,48.7190877],[-2.1754283,48.650163],[-2.0136968,48.7322121],[-1.8095282,48.7317759],[-1.7243003,48.7582771],[-1.7055705,48.8451195],[-1.9030442,48.8628775],[-1.9102707,48.9234787],[-1.6871357,48.9324898],[-1.7427683,49.244734],[-1.8574757,49.3253007],[-1.9262013,49.6557284],[-2.03908,49.6787215],[-2.0044546,49.7608677],[-1.6175855,49.6849834],[-1.2837344,49.7606702],[-1.1492009,49.6350423],[-1.1854462,49.5483609],[-0.9646323,49.4250945],[-0.7442883,49.3680181],[-0.3901362,49.3621973],[-0.2497648,49.3157973],[-0.1334235,49.3129316],[0.0273095,49.3761879],[0.0180063,49.5465556],[0.1221093,49.6929183],[0.5171306,49.8646551],[1.057268,49.9490353],[1.4390814,50.1181936],[1.5317687,50.4643666],[1.5254895,50.8586668],[1.6411818,50.9591925],[2.5971186,51.1735455],[2.6607107,51.0195972],[2.0712386,50.9202211],[2.05937,50.9470929],[1.7975971,50.8990562],[1.6808947,50.8717016],[1.6556923,50.5972904],[1.7535714,50.5931978],[1.7229475,50.2470239],[1.8215592,50.2426198],[1.8014852,50.0511647],[1.5456517,50.063112],[1.541549,50.0126688],[1.4246216,50.0174707],[1.426673,50.0527642],[1.0383804,49.8460945],[0.9827008,49.8891609],[0.5796091,49.8213328],[0.420629,49.76297],[0.4281018,49.7544509],[0.2083136,49.6726862],[0.147652,49.5776743],[0.1346112,49.5809045],[0.1111672,49.543649],[0.5659823,49.520445],[0.5631983,49.4998946],[0.6300139,49.496659],[0.6147753,49.3744072],[0.5482527,49.3785094],[0.5425382,49.3346073],[0.4574069,49.3393812],[0.4584326,49.3449183],[0.3259735,49.354559],[0.3284645,49.3812758],[0.280111,49.3843283],[0.2768875,49.363339],[0.210951,49.3665834],[0.208167,49.3508366],[0.1432562,49.3553225],[0.1376883,49.3114953],[0.0720449,49.3153162],[0.0675026,49.2871299],[0.0027383,49.2907616],[0.0050827,49.2571106],[-0.0202662,49.260362],[-0.0349188,49.1973043],[-0.194485,49.2146316],[-0.389657,49.127263],[-0.4536886,49.1879201],[-0.3561026,49.2321443],[-0.8208815,49.2833068],[-0.9977772,49.3014908],[-1.1672818,49.2454506],[-1.1951526,49.2818265],[-1.2676791,49.2409863],[-1.341138,49.2975045],[-1.2476825,49.3502459],[-1.4458287,49.6068946],[-1.8110511,49.6175689],[-1.7747878,49.4433325],[-1.7277493,49.4650871],[-1.5338965,49.2909826],[-1.4790873,49.2923341],[-1.4760826,49.2402747],[-1.4355714,49.2032589],[-1.4722491,49.182201],[-1.4509056,48.7572466],[-1.3115513,48.7640766],[-1.3053347,48.7021631],[-1.2583998,48.7042144],[-1.2522868,48.6435279],[-1.2351913,48.6443494],[-1.2269026,48.5682354],[-1.8521839,48.5308559],[-1.8490756,48.4974996],[-1.9232598,48.4918694],[-1.9281294,48.4409635],[-2.0427212,48.4360144],[-2.0388876,48.4819121],[-2.2895011,48.4610214],[-2.3021023,48.5243337],[-2.4086263,48.5161813],[-2.4203484,48.5695361],[-2.4308411,48.5785185],[-2.4908308,48.5492405],[-2.4735281,48.5332572],[-2.5497844,48.4964697],[-2.5400451,48.4874747],[-2.7068057,48.4074551],[-3.0297895,48.6911498],[-4.0103381,48.5317872],[-4.0534166,48.6441199],[-4.3828059,48.5734929],[-4.3548195,48.5117951],[-4.3885293,48.5047279],[-4.1349543,48.4486809],[-4.1641129,48.389361],[-4.01832,48.3568516],[-4.0473321,48.2991791],[-3.9881358,48.2867008],[-4.0213971,48.216063],[-4.0363427,48.2195777],[-4.0662339,48.160284],[-4.1667504,48.1824662],[-4.1833077,48.149336],[-4.1723183,48.106499],[-4.2011062,48.1028546],[-4.1864321,48.0438867],[-4.1880639,48.0406137],[-4.3568595,48.0230513],[-4.2565705,47.9399726],[-4.2336349,47.9349658],[-4.2137074,47.9759839],[-4.2185428,47.977259],[-4.1805957,48.0556897],[-3.6172022,47.9312353],[-2.1799085,47.5864218],[-2.25449,47.4450059],[-2.3018177,47.4567969],[-2.3204265,47.4209203],[-2.3037225,47.4175495],[-2.3475337,47.3349949],[-2.3621862,47.3383711],[-2.380795,47.3039043],[-2.3585231,47.2985385],[-2.2996198,47.297843],[-2.297422,47.3617996],[-2.1319947,47.3585242],[-2.1347787,47.3910707],[-2.0156534,47.3962286],[-2.0140417,47.3809517],[-1.9286173,47.3825391],[-1.9289103,47.3795626],[-1.8322035,47.3818446],[-1.8298591,47.3416477],[-1.7360828,47.3430378],[-1.734178,47.3049972],[-1.6408412,47.3063882],[-1.6401086,47.2942654],[-1.5835498,47.2956567],[-1.5853081,47.3370802],[-1.461201,47.3396619],[-1.4600288,47.3292351],[-1.3721135,47.3322144],[-1.360538,47.1123893],[-1.4856707,47.1114918],[-1.4858173,47.1187709],[-1.6689741,47.1168765],[-1.6697068,47.1286411],[-1.725533,47.1276442],[-1.7261191,47.1376124],[-1.9397532,47.1326285],[-1.9401928,47.1421971],[-1.9925024,47.1430941],[-1.8106643,47.0058819],[-1.947226,46.9207831],[-1.9289103,46.9067703],[-1.9952864,46.8646098],[-1.7365224,46.6683945],[-1.7753516,46.643855],[-1.8267821,46.6417425],[-1.8247307,46.6207134],[-1.1819234,46.399869],[-0.9126096,46.3048021],[-0.9548089,46.2488984],[-0.9423542,46.2442372],[-0.9838474,46.1880746]],[[3.1476937,42.4007197],[3.1494906,42.4001543],[3.1530531,42.4005236],[3.1580376,42.4024274],[3.1876974,42.4280509],[3.142265,42.5247964],[3.0683711,42.5463547],[3.0488369,42.6941959],[3.0798953,43.0307277],[3.226405,43.1872688],[3.4091582,43.2603206],[3.5210352,43.258773],[3.6642877,43.3762765],[3.738414,43.3905396],[4.0097937,43.536068],[4.1769217,43.4563611],[4.5435531,43.4334906],[4.5494282,43.3540119],[4.8350582,43.3089126],[4.9750606,43.3830905],[5.0321866,43.3192811],[5.2591906,43.3192811],[5.3108165,43.2050388],[5.3568173,43.1864485],[5.3688175,43.1678525],[5.4023181,43.1621085],[5.4138183,43.1712257],[5.4091932,43.1992072],[5.5423205,43.1882713],[5.6058216,43.1479741],[5.6196969,43.1528987],[5.6383222,43.1715904],[5.6715728,43.1673966],[5.6909481,43.13411],[5.7760746,43.1063726],[5.7761996,43.0943247],[5.7540742,43.0832788],[5.7570743,43.0725048],[5.7703245,43.0646514],[5.8593261,43.0346897],[5.8877016,43.0627336],[5.9567028,43.0610897],[5.9638279,43.092773],[6.0003285,43.0918601],[6.0174538,43.068487],[6.1023303,43.0741485],[6.1048304,43.0525954],[6.0665981,43.0431845],[6.0672168,43.0378549],[6.1427018,43.0092284],[6.1567558,42.9871518],[6.1963544,42.9733134],[6.2222085,42.9801037],[6.2689052,42.996508],[6.2551549,43.0362655],[6.201904,43.0271281],[6.1837787,43.0918826],[6.3015307,43.0990937],[6.3247811,43.0797407],[6.3777821,43.0801059],[6.3886572,43.1339501],[6.5134094,43.1460813],[6.5770355,43.1788145],[6.6229113,43.1456253],[6.6977876,43.1996853],[6.6801623,43.2335736],[6.7211631,43.26007],[6.7224131,43.2747245],[6.6705372,43.2919232],[6.6874125,43.3311252],[6.7241631,43.3426718],[6.7529136,43.4089993],[6.7910393,43.3967387],[6.9062913,43.4167176],[6.9676674,43.5027333],[6.9661673,43.5281154],[7.006168,43.5384464],[7.0355435,43.4981997],[7.0689191,43.5001038],[7.0907945,43.5164228],[7.062669,43.5367247],[7.0825444,43.5456046],[7.1237951,43.5307436],[7.1557957,43.5437019],[7.1432954,43.622841],[7.1686709,43.6463635],[7.2137967,43.6346939],[7.2541724,43.6849746],[7.3402989,43.6674354],[7.3644243,43.6894038],[7.3530491,43.7082017],[7.4163002,43.7109124],[7.4540509,43.7450573],[7.4943016,43.7452379],[7.5794281,43.7842366],[7.6055156,43.7860269],[7.6036815,43.7889781],[7.5958811,43.7952788],[7.5962789,43.7954862],[7.5385252,43.8419488],[7.4599632,43.7998784],[7.4478096,43.8093355],[7.3235339,43.7480609],[7.3082211,43.7635679],[6.6487795,43.3885012],[6.6686548,43.3717842],[6.510027,43.2780293],[6.5658405,43.2250863],[6.1268057,43.105272],[5.4822945,43.2493904],[5.4726693,43.2309046],[5.4156683,43.2465678],[5.4526689,43.3450985],[4.8019076,43.4815759],[4.7641569,43.3924419],[4.657155,43.423681],[4.6722803,43.4560836],[4.4320261,43.5241904],[4.4145258,43.4925498],[4.1610214,43.5643292],[4.1445211,43.5706693],[4.141646,43.5739296],[4.1867718,43.5994627],[4.1056454,43.6819639],[3.79689,43.5216525],[3.7785147,43.5131316],[3.7646394,43.5059696],[3.7620144,43.5033403],[3.7422641,43.4932752],[3.7160136,43.5207461],[3.2621307,43.2814311],[3.2463804,43.2973542],[3.1838793,43.2805211],[3.1067529,43.2408312],[3.1547538,43.1941898],[2.9062494,43.1938252],[2.9067495,42.761892],[2.9461251,42.7620755],[2.9465001,42.6151551],[2.992376,42.6149711],[2.992376,42.5125003],[3.0410018,42.5125924],[3.0412052,42.5009317],[3.0908647,42.5008187],[3.1476937,42.4007197]],[[6.3594494,43.0232125],[6.4247695,43.0244403],[6.4524356,43.0350368],[6.4698484,43.0546098],[6.5112149,43.0576453],[6.5215565,43.0431768],[6.4836372,43.0244403],[6.471793,43.0072494],[6.4117762,42.9917993],[6.3985177,42.980484],[6.3517753,42.9990494],[6.3594494,43.0232125]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral","terms_text":"Ortho littorale 2000"},{"id":"GeolittoralV2-Orthophotos","name":"Géolittoral V2 - Orthophotos 2011-2014","type":"wms","template":"http://geolittoral.application.developpement-durable.gouv.fr/wms2/metropole?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortholittorale_v2_rvb&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2014-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","polygon":[[[-0.9838474,46.1880746],[-0.8949679,46.156277],[-0.934552,46.1016299],[-0.843878,46.0694893],[-0.8824065,46.0163689],[-0.5378663,45.8955775],[-0.6349793,45.7644353],[-0.8666589,45.8479032],[-0.7626356,45.6245041],[-0.6969519,45.6265921],[-0.6939663,45.6018445],[-0.6875472,45.6017401],[-0.6879951,45.5098594],[-0.6379859,45.5089178],[-0.6397773,45.4474748],[-0.615743,45.4469511],[-0.6161909,45.3858599],[-0.585439,45.3859647],[-0.5852897,45.3233381],[-0.5537914,45.323443],[-0.5527464,45.1966145],[-0.490944,45.195773],[-0.4918397,45.1331467],[-0.4566094,45.133252],[-0.4551166,45.0716113],[-0.4161067,45.0708893],[-0.4162123,45.0269636],[-0.2907042,44.9827801],[-0.2199988,45.0677104],[-0.1225183,45.0256272],[-0.1892469,44.9459114],[-0.0926621,44.9101881],[-0.145209,44.8392042],[-0.1549123,44.8423797],[-0.1938747,44.7867829],[-0.4354115,44.8731731],[-0.3904779,44.6841324],[-0.5879767,44.6601403],[-0.6662784,44.9912911],[-0.7783806,44.9926348],[-0.7776417,45.0538898],[-0.8158437,45.0532114],[-0.818377,45.1196158],[-0.8839284,45.1205096],[-0.8817117,45.1808092],[-0.9343849,45.1818509],[-0.9328016,45.2448356],[-1.0016252,45.2443896],[-1.0024696,45.3082702],[-1.0523984,45.3101261],[-1.0482817,45.3691125],[-1.0641153,45.3691125],[-1.0503928,45.1825205],[-1.1076051,44.8078702],[-1.0151366,44.8011296],[-1.0194644,44.7691388],[-0.933646,44.7614944],[-0.9404017,44.7018029],[-0.9603521,44.5643388],[-1.014081,44.5676478],[-1.0991605,44.1456002],[-1.2268852,44.140222],[-1.2185281,44.0324931],[-1.3076188,44.029002],[-1.3957164,43.7430052],[-1.3129592,43.7295057],[-1.3743937,43.5310863],[-1.3458932,43.506056],[-1.599642,43.3542258],[-1.7654877,43.255483],[-1.7928061,43.2803753],[-1.8028079,43.4042503],[-1.7283167,43.4503267],[-1.5853054,43.4890037],[-1.3358385,44.2283161],[-1.3074387,44.418472],[-1.2251061,45.4441615],[-1.486847,46.0604176],[-1.601759,46.1701852],[-1.6444184,46.2237487],[-1.756428,46.4221446],[-2.0348287,46.6189544],[-2.3465983,46.6238164],[-2.4656134,46.7119647],[-2.3232967,46.8381171],[-2.4528645,46.9385605],[-2.3173318,47.1621397],[-2.9284827,47.2841337],[-2.967417,47.2214691],[-3.3560228,47.3247359],[-3.1880328,47.4844142],[-3.2279087,47.6113186],[-3.3891187,47.5947342],[-3.9161956,47.6783103],[-4.1016259,47.7092072],[-4.1431427,47.7884708],[-4.3761893,47.7106674],[-4.4796232,47.9776016],[-4.9856536,47.9989633],[-4.9693825,48.0897202],[-4.6014717,48.1146852],[-4.5921009,48.1475763],[-4.6710089,48.2330974],[-4.8424298,48.3004956],[-5.1986731,48.4492607],[-5.103461,48.5172155],[-4.8351542,48.5431896],[-4.6311736,48.6612896],[-3.9669223,48.7797813],[-3.9493945,48.7471474],[-3.6701315,48.895078],[-3.5444401,48.9029653],[-3.4095425,48.9186584],[-3.3334381,48.904579],[-3.0276871,48.9275037],[-2.8020731,48.7979285],[-2.6935289,48.7672208],[-2.4578583,48.7089607],[-2.2847486,48.7190877],[-2.1754283,48.650163],[-2.0136968,48.7322121],[-1.8095282,48.7317759],[-1.7243003,48.7582771],[-1.7055705,48.8451195],[-1.9030442,48.8628775],[-1.9102707,48.9234787],[-1.6871357,48.9324898],[-1.7427683,49.244734],[-1.8574757,49.3253007],[-1.9262013,49.6557284],[-2.03908,49.6787215],[-2.0044546,49.7608677],[-1.6175855,49.6849834],[-1.2837344,49.7606702],[-1.1492009,49.6350423],[-1.1854462,49.5483609],[-0.9646323,49.4250945],[-0.7442883,49.3680181],[-0.3901362,49.3621973],[-0.2497648,49.3157973],[-0.1334235,49.3129316],[0.0273095,49.3761879],[0.0180063,49.5465556],[0.1221093,49.6929183],[0.5171306,49.8646551],[1.057268,49.9490353],[1.4390814,50.1181936],[1.5317687,50.4643666],[1.5254895,50.8586668],[1.6411818,50.9591925],[2.5971186,51.1735455],[2.6607107,51.0195972],[2.0712386,50.9202211],[2.05937,50.9470929],[1.7975971,50.8990562],[1.6808947,50.8717016],[1.6556923,50.5972904],[1.7535714,50.5931978],[1.7229475,50.2470239],[1.8215592,50.2426198],[1.8014852,50.0511647],[1.5456517,50.063112],[1.541549,50.0126688],[1.4246216,50.0174707],[1.426673,50.0527642],[1.0383804,49.8460945],[0.9827008,49.8891609],[0.5796091,49.8213328],[0.420629,49.76297],[0.4281018,49.7544509],[0.2083136,49.6726862],[0.147652,49.5776743],[0.1346112,49.5809045],[0.1111672,49.543649],[0.5659823,49.520445],[0.5631983,49.4998946],[0.6300139,49.496659],[0.6147753,49.3744072],[0.5482527,49.3785094],[0.5425382,49.3346073],[0.4574069,49.3393812],[0.4584326,49.3449183],[0.3259735,49.354559],[0.3284645,49.3812758],[0.280111,49.3843283],[0.2768875,49.363339],[0.210951,49.3665834],[0.208167,49.3508366],[0.1432562,49.3553225],[0.1376883,49.3114953],[0.0720449,49.3153162],[0.0675026,49.2871299],[0.0027383,49.2907616],[0.0050827,49.2571106],[-0.0202662,49.260362],[-0.0349188,49.1973043],[-0.194485,49.2146316],[-0.389657,49.127263],[-0.4536886,49.1879201],[-0.3561026,49.2321443],[-0.8208815,49.2833068],[-0.9977772,49.3014908],[-1.1672818,49.2454506],[-1.1951526,49.2818265],[-1.2676791,49.2409863],[-1.341138,49.2975045],[-1.2476825,49.3502459],[-1.4458287,49.6068946],[-1.8110511,49.6175689],[-1.7747878,49.4433325],[-1.7277493,49.4650871],[-1.5338965,49.2909826],[-1.4790873,49.2923341],[-1.4760826,49.2402747],[-1.4355714,49.2032589],[-1.4722491,49.182201],[-1.4509056,48.7572466],[-1.3115513,48.7640766],[-1.3053347,48.7021631],[-1.2583998,48.7042144],[-1.2522868,48.6435279],[-1.2351913,48.6443494],[-1.2269026,48.5682354],[-1.8521839,48.5308559],[-1.8490756,48.4974996],[-1.9232598,48.4918694],[-1.9281294,48.4409635],[-2.0427212,48.4360144],[-2.0388876,48.4819121],[-2.2895011,48.4610214],[-2.3021023,48.5243337],[-2.4086263,48.5161813],[-2.4203484,48.5695361],[-2.4308411,48.5785185],[-2.4908308,48.5492405],[-2.4735281,48.5332572],[-2.5497844,48.4964697],[-2.5400451,48.4874747],[-2.7068057,48.4074551],[-3.0297895,48.6911498],[-4.0103381,48.5317872],[-4.0534166,48.6441199],[-4.3828059,48.5734929],[-4.3548195,48.5117951],[-4.3885293,48.5047279],[-4.1349543,48.4486809],[-4.1641129,48.389361],[-4.01832,48.3568516],[-4.0473321,48.2991791],[-3.9881358,48.2867008],[-4.0213971,48.216063],[-4.0363427,48.2195777],[-4.0662339,48.160284],[-4.1667504,48.1824662],[-4.1833077,48.149336],[-4.1723183,48.106499],[-4.2011062,48.1028546],[-4.1864321,48.0438867],[-4.1880639,48.0406137],[-4.3568595,48.0230513],[-4.2565705,47.9399726],[-4.2336349,47.9349658],[-4.2137074,47.9759839],[-4.2185428,47.977259],[-4.1805957,48.0556897],[-3.6172022,47.9312353],[-2.1799085,47.5864218],[-2.25449,47.4450059],[-2.3018177,47.4567969],[-2.3204265,47.4209203],[-2.3037225,47.4175495],[-2.3475337,47.3349949],[-2.3621862,47.3383711],[-2.380795,47.3039043],[-2.3585231,47.2985385],[-2.2996198,47.297843],[-2.297422,47.3617996],[-2.1319947,47.3585242],[-2.1347787,47.3910707],[-2.0156534,47.3962286],[-2.0140417,47.3809517],[-1.9286173,47.3825391],[-1.9289103,47.3795626],[-1.8322035,47.3818446],[-1.8298591,47.3416477],[-1.7360828,47.3430378],[-1.734178,47.3049972],[-1.6408412,47.3063882],[-1.6401086,47.2942654],[-1.5835498,47.2956567],[-1.5853081,47.3370802],[-1.461201,47.3396619],[-1.4600288,47.3292351],[-1.3721135,47.3322144],[-1.360538,47.1123893],[-1.4856707,47.1114918],[-1.4858173,47.1187709],[-1.6689741,47.1168765],[-1.6697068,47.1286411],[-1.725533,47.1276442],[-1.7261191,47.1376124],[-1.9397532,47.1326285],[-1.9401928,47.1421971],[-1.9925024,47.1430941],[-1.8106643,47.0058819],[-1.947226,46.9207831],[-1.9289103,46.9067703],[-1.9952864,46.8646098],[-1.7365224,46.6683945],[-1.7753516,46.643855],[-1.8267821,46.6417425],[-1.8247307,46.6207134],[-1.1819234,46.399869],[-0.9126096,46.3048021],[-0.9548089,46.2488984],[-0.9423542,46.2442372],[-0.9838474,46.1880746]],[[3.1476937,42.4007197],[3.1494906,42.4001543],[3.1530531,42.4005236],[3.1580376,42.4024274],[3.1876974,42.4280509],[3.142265,42.5247964],[3.0683711,42.5463547],[3.0488369,42.6941959],[3.0798953,43.0307277],[3.226405,43.1872688],[3.4091582,43.2603206],[3.5210352,43.258773],[3.6642877,43.3762765],[3.738414,43.3905396],[4.0097937,43.536068],[4.1769217,43.4563611],[4.5435531,43.4334906],[4.5494282,43.3540119],[4.8350582,43.3089126],[4.9750606,43.3830905],[5.0321866,43.3192811],[5.2591906,43.3192811],[5.3108165,43.2050388],[5.3568173,43.1864485],[5.3688175,43.1678525],[5.4023181,43.1621085],[5.4138183,43.1712257],[5.4091932,43.1992072],[5.5423205,43.1882713],[5.6058216,43.1479741],[5.6196969,43.1528987],[5.6383222,43.1715904],[5.6715728,43.1673966],[5.6909481,43.13411],[5.7760746,43.1063726],[5.7761996,43.0943247],[5.7540742,43.0832788],[5.7570743,43.0725048],[5.7703245,43.0646514],[5.8593261,43.0346897],[5.8877016,43.0627336],[5.9567028,43.0610897],[5.9638279,43.092773],[6.0003285,43.0918601],[6.0174538,43.068487],[6.1023303,43.0741485],[6.1048304,43.0525954],[6.0665981,43.0431845],[6.0672168,43.0378549],[6.1427018,43.0092284],[6.1567558,42.9871518],[6.1963544,42.9733134],[6.2222085,42.9801037],[6.2689052,42.996508],[6.2551549,43.0362655],[6.201904,43.0271281],[6.1837787,43.0918826],[6.3015307,43.0990937],[6.3247811,43.0797407],[6.3777821,43.0801059],[6.3886572,43.1339501],[6.5134094,43.1460813],[6.5770355,43.1788145],[6.6229113,43.1456253],[6.6977876,43.1996853],[6.6801623,43.2335736],[6.7211631,43.26007],[6.7224131,43.2747245],[6.6705372,43.2919232],[6.6874125,43.3311252],[6.7241631,43.3426718],[6.7529136,43.4089993],[6.7910393,43.3967387],[6.9062913,43.4167176],[6.9676674,43.5027333],[6.9661673,43.5281154],[7.006168,43.5384464],[7.0355435,43.4981997],[7.0689191,43.5001038],[7.0907945,43.5164228],[7.062669,43.5367247],[7.0825444,43.5456046],[7.1237951,43.5307436],[7.1557957,43.5437019],[7.1432954,43.622841],[7.1686709,43.6463635],[7.2137967,43.6346939],[7.2541724,43.6849746],[7.3402989,43.6674354],[7.3644243,43.6894038],[7.3530491,43.7082017],[7.4163002,43.7109124],[7.4540509,43.7450573],[7.4943016,43.7452379],[7.5794281,43.7842366],[7.6055156,43.7860269],[7.6036815,43.7889781],[7.5958811,43.7952788],[7.5962789,43.7954862],[7.5385252,43.8419488],[7.4599632,43.7998784],[7.4478096,43.8093355],[7.3235339,43.7480609],[7.3082211,43.7635679],[6.6487795,43.3885012],[6.6686548,43.3717842],[6.510027,43.2780293],[6.5658405,43.2250863],[6.1268057,43.105272],[5.4822945,43.2493904],[5.4726693,43.2309046],[5.4156683,43.2465678],[5.4526689,43.3450985],[4.8019076,43.4815759],[4.7641569,43.3924419],[4.657155,43.423681],[4.6722803,43.4560836],[4.4320261,43.5241904],[4.4145258,43.4925498],[4.1610214,43.5643292],[4.1445211,43.5706693],[4.141646,43.5739296],[4.1867718,43.5994627],[4.1056454,43.6819639],[3.79689,43.5216525],[3.7785147,43.5131316],[3.7646394,43.5059696],[3.7620144,43.5033403],[3.7422641,43.4932752],[3.7160136,43.5207461],[3.2621307,43.2814311],[3.2463804,43.2973542],[3.1838793,43.2805211],[3.1067529,43.2408312],[3.1547538,43.1941898],[2.9062494,43.1938252],[2.9067495,42.761892],[2.9461251,42.7620755],[2.9465001,42.6151551],[2.992376,42.6149711],[2.992376,42.5125003],[3.0410018,42.5125924],[3.0412052,42.5009317],[3.0908647,42.5008187],[3.1476937,42.4007197]],[[6.3594494,43.0232125],[6.4247695,43.0244403],[6.4524356,43.0350368],[6.4698484,43.0546098],[6.5112149,43.0576453],[6.5215565,43.0431768],[6.4836372,43.0244403],[6.471793,43.0072494],[6.4117762,42.9917993],[6.3985177,42.980484],[6.3517753,42.9990494],[6.3594494,43.0232125]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral","terms_text":"Ortho Littorale V2 - MEDDE"},{"id":"lu.geoportail.opendata.ortho_10cm_proto_lidar","name":"geoportail.lu LIDAR prototype Nordstad 2017","type":"tms","template":"http://{switch:wmts1,wmts2}.geoportail.lu/opendata/wmts/ortho_10cm_proto_lidar/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","endDate":"2017-04-09T00:00:00.000Z","startDate":"2017-04-09T00:00:00.000Z","scaleExtent":[0,21],"polygon":[[[6.050007108761704,49.82175399016297],[6.049789364226169,49.91165980309075],[6.18901175543688,49.91171720394339],[6.188971338193781,49.821811209128995],[6.050007108761704,49.82175399016297]]],"terms_url":"https://act.public.lu/fr/cartographie/lidar/","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"Geoportal-PL-aerial_image","name":"Geoportal.gov.pl (Orthophotomap)","type":"tms","template":"http://wms.misek.pl/geoportal.orto/tms/{zoom}/{x}/{y}","scaleExtent":[6,24],"polygon":[[[15.9751041,54.3709213],[16.311164,54.5561775],[17.1391878,54.7845723],[18.3448458,54.9022727],[19.6613689,54.4737213],[20.2815206,54.4213456],[21.4663914,54.3406369],[22.7759855,54.3769755],[22.8625989,54.4233613],[23.2956657,54.2678633],[23.5347186,54.0955258],[23.5208604,53.9775182],[23.7183389,53.4629603],[23.9296755,53.1856735],[23.9296755,52.6887269],[23.732197,52.6067497],[23.5658994,52.5878101],[23.2090523,52.3302642],[23.1951942,52.2370089],[23.5035377,52.1860596],[23.6906226,52.0030113],[23.5970802,51.739903],[23.6629063,51.3888562],[23.9366046,50.9827781],[24.1687284,50.8604752],[24.0197534,50.8035823],[24.1098313,50.6610467],[24.0578633,50.4188439],[23.6178674,50.3083403],[22.6824431,49.5163532],[22.7378756,49.2094935],[22.9041733,49.0780441],[22.8625989,48.9940062],[22.6096878,49.0371785],[22.0761495,49.2004392],[21.8474902,49.3721872],[21.3763135,49.4488281],[21.1026153,49.3721872],[20.9120659,49.3022043],[20.6452967,49.3902311],[20.1845136,49.3315641],[20.1186875,49.2004392],[19.9419962,49.1302123],[19.765305,49.2117568],[19.7479823,49.3992506],[19.6024718,49.4150307],[19.5089294,49.5815389],[19.4292451,49.5905232],[19.2317666,49.4150307],[18.9961783,49.387976],[18.9338167,49.4916048],[18.8368097,49.4938552],[18.8021643,49.6623381],[18.6427958,49.7094091],[18.521537,49.8994693],[18.0815412,50.0109209],[17.8875272,49.9886512],[17.7385522,50.0687739],[17.6068999,50.1709584],[17.7454813,50.2153184],[17.710836,50.3017019],[17.4163505,50.2640668],[16.9486384,50.4453265],[16.8932058,50.4033889],[17.0006064,50.3105529],[17.017929,50.2241854],[16.8135215,50.186489],[16.6402948,50.0976742],[16.4324227,50.2862087],[16.1968344,50.4276731],[16.4220291,50.5885165],[16.3388803,50.6632429],[16.2280152,50.6368824],[16.0547884,50.6127057],[15.5732181,50.7641544],[15.2683391,50.8976368],[15.2440873,50.980597],[15.0292862,51.0133036],[15.0015699,50.8582883],[14.8110205,50.8735944],[14.956531,51.0721176],[15.0188926,51.2914636],[14.9392083,51.4601459],[14.7209426,51.5571799],[14.7521234,51.6260562],[14.5996839,51.8427626],[14.70362,52.0733396],[14.5581095,52.2497371],[14.5165351,52.425436],[14.6031485,52.5878101],[14.1146491,52.8208272],[14.152759,52.9733951],[14.3502374,53.0734212],[14.4229927,53.2665624],[14.1977979,53.8734759],[14.2220497,53.9958517],[15.9751041,54.3709213]]],"terms_text":"Copyright © Główny Urząd Geodezji i Kartografii.","best":true,"icon":"http://i.imgur.com/aFlvMpM.png"},{"id":"girau_do_pnciano","name":"Girau do Ponciano","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Girau%20do%20Ponciano&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.78012791818,-9.92939325541],[-36.78086820787,-9.83891760784],[-36.87233153527,-9.83917131263],[-36.87173072046,-9.90542386241],[-36.87036815828,-9.92988995709],[-36.86155978387,-9.92994279765],[-36.85565892404,-9.92980541218],[-36.85146394914,-9.92973143536],[-36.84574547952,-9.92977370783],[-36.83213058656,-9.92966802665],[-36.81455675309,-9.92960461792],[-36.78012791818,-9.92939325541]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"GRAFCAN-Canary_Islands","name":"GRAFCAN - Canary Islands","type":"wms","template":"http://idecan1.grafcan.es/ServicioWMS/OrtoUrb?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OU&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","polygon":[[[-17.9291733,28.8910589],[-18.0333424,28.7998146],[-18.0374275,28.7317767],[-17.87811,28.4322434],[-17.8311317,28.4178731],[-17.7269626,28.5632821],[-17.7310476,28.6798232],[-17.6840694,28.7371497],[-17.7535155,28.8678081],[-17.8576846,28.860653],[-17.9291733,28.8910589]],[[-18.0781762,27.7721138],[-18.1370743,27.7875098],[-18.1705392,27.7644149],[-18.1779014,27.7069523],[-18.1578225,27.687989],[-18.0580973,27.6790988],[-18.0065614,27.6257423],[-17.9610492,27.6221843],[-17.9389624,27.7081374],[-17.9075054,27.7193953],[-17.8619932,27.8046798],[-17.872702,27.8407872],[-17.9255764,27.8680077],[-18.0052228,27.8360525],[-18.0139237,27.8034958],[-18.0781762,27.7721138]],[[-17.2687764,28.2399643],[-17.3340329,28.2193251],[-17.3633146,28.1536956],[-17.3666611,28.0880258],[-17.3306864,28.0474233],[-17.2729595,28.0068054],[-17.2001735,28.0053281],[-17.1441199,28.0289625],[-17.0780268,28.0835972],[-17.0872296,28.1536956],[-17.1826044,28.2149019],[-17.2687764,28.2399643]],[[-16.9358012,28.3762297],[-16.945004,28.3357366],[-16.7199529,27.9831662],[-16.6254147,27.9831662],[-16.52753,28.0164074],[-16.3995269,28.146319],[-16.3359437,28.3092236],[-16.3300873,28.3644515],[-16.1025263,28.524082],[-16.0983432,28.5814018],[-16.1426842,28.6254727],[-16.3392902,28.5960942],[-16.4380115,28.5314325],[-16.5392427,28.4402508],[-16.8395897,28.4122923],[-16.9358012,28.3762297]],[[-15.6883306,28.2058483],[-15.4739464,28.1643685],[-15.424272,28.2104562],[-15.3628326,28.1724353],[-15.3837481,28.0559841],[-15.3314593,27.9844367],[-15.3576037,27.8042042],[-15.5915962,27.6977727],[-15.7000956,27.7336471],[-15.7994443,27.8030479],[-15.8713415,27.9243925],[-15.8478115,28.036371],[-15.7471555,28.0894335],[-15.7314689,28.1839582],[-15.6883306,28.2058483]],[[-14.5088179,28.1344754],[-14.4107763,28.1344754],[-14.248681,28.2427804],[-14.2382232,28.3463737],[-14.0395256,28.7391056],[-13.8944241,28.7826519],[-13.7859248,28.7769232],[-13.8212198,28.3843326],[-13.9153397,28.190946],[-14.1859344,28.1356282],[-14.3088131,28.0052882],[-14.5401912,28.0514443],[-14.5088179,28.1344754]],[[-13.5524989,29.3772716],[-13.5086799,29.3682409],[-13.4795521,29.3872775],[-13.4754312,29.4096331],[-13.5003013,29.4280698],[-13.5504986,29.4071183],[-13.5524989,29.3772716]],[[-13.3976004,29.1610205],[-13.4281427,29.1215664],[-13.4417378,28.9908417],[-13.538995,28.9194675],[-13.7084109,28.8846777],[-13.7711575,28.8086488],[-13.9008338,28.8352194],[-13.9071084,28.8892559],[-13.8579569,28.936858],[-13.8569111,29.0365684],[-13.6759918,29.1498834],[-13.567231,29.1571898],[-13.5542776,29.3507259],[-13.399879,29.2180634],[-13.3976004,29.1610205]],[[-13.3379231,29.2866715],[-13.3503484,29.2743558],[-13.3385966,29.2653346],[-13.3261713,29.2776514],[-13.3379231,29.2866715]]],"terms_text":"GRAFCAN OrtoExpress Urbana 2009"},{"id":"GrandNancy_Orthophotographie_2012","name":"GrandNancy - Orthophoto - 2012","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/nancy_2012/{zoom}/{x}/{y}","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[6.06066031366,48.60554459242],[6.29717112787,48.59922593248],[6.30611158204,48.74076820528],[6.06896018357,48.74710338225],[6.06066031366,48.60554459242]]],"terms_url":"http://wiki.openstreetmap.org/wiki/Nancy/Orthophotographie","terms_text":"GrandNancy Orthophotographie 2012"},{"id":"hamburg-40cm","name":"Hamburg (40 cm)","type":"wms","template":"http://geodienste.hamburg.de/HH_WMS_DOP40?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[8.4825961,53.9356013],[8.4827386,53.9092447],[8.5274957,53.9094126],[8.5279233,53.9357691],[8.4825961,53.9356013]],[[9.7723167,53.543523],[9.7743354,53.5543296],[9.7631359,53.5552115],[9.7304736,53.5578689],[9.7346453,53.5653605],[9.7579266,53.6182757],[9.7712877,53.6313071],[9.770699,53.6160708],[9.7963361,53.6102995],[9.7899342,53.6038562],[9.8181678,53.5859147],[9.8377278,53.5919808],[9.8449827,53.5949795],[9.8541578,53.5980542],[9.8681371,53.6092959],[9.8693051,53.6132263],[9.885052,53.6219916],[9.8869663,53.6252015],[9.8935594,53.6302636],[9.8963672,53.6312186],[9.8968811,53.6349162],[9.9067823,53.6523063],[9.9311454,53.6526154],[9.9455232,53.6527604],[9.9502445,53.6508457],[9.9515493,53.6506547],[9.9779541,53.6488699],[9.9849181,53.6482971],[9.9873906,53.6507159],[9.9995963,53.6815314],[10.0228185,53.6815708],[10.0433756,53.6819823],[10.0514778,53.6775926],[10.0692494,53.679547],[10.0604009,53.6883344],[10.0709998,53.6958498],[10.0707046,53.7099642],[10.0819849,53.7204444],[10.1190792,53.7132448],[10.1693902,53.7389576],[10.1936896,53.7310028],[10.1779029,53.7099228],[10.1569421,53.7045133],[10.1582858,53.6894414],[10.1434248,53.6805732],[10.1417595,53.6774354],[10.144728,53.6761294],[10.1464311,53.6758841],[10.1495537,53.6754497],[10.1715323,53.6686937],[10.1988496,53.6467523],[10.1897268,53.6383796],[10.2220152,53.6334888],[10.1888726,53.6131597],[10.1923583,53.5947431],[10.2011737,53.5839226],[10.1516942,53.5761904],[10.1506692,53.5697309],[10.1479994,53.5639032],[10.1530759,53.5624246],[10.1594205,53.5609125],[10.1518903,53.5416987],[10.154649,53.5365725],[10.1687379,53.5374002],[10.1632659,53.5218549],[10.1661094,53.5201314],[10.169185,53.5196505],[10.1895059,53.5114835],[10.2104308,53.5199588],[10.218276,53.4992345],[10.2366988,53.4962928],[10.2500849,53.4789784],[10.2659161,53.4707878],[10.2904343,53.4551223],[10.3096151,53.4430928],[10.3122326,53.4522908],[10.3251401,53.4497898],[10.3079865,53.4333199],[10.2559794,53.4162256],[10.2508909,53.4102422],[10.2457816,53.402611],[10.2415493,53.3979725],[10.1655462,53.399327],[10.1450604,53.416136],[10.1094899,53.4264876],[10.1067973,53.4265817],[10.075805,53.4543638],[10.0515477,53.4639369],[10.0351698,53.446896],[10.0144851,53.4420285],[10.0229369,53.4322826],[9.9975402,53.4254609],[9.9824345,53.4147804],[9.9787266,53.4142015],[9.958105,53.4270802],[9.9295317,53.4200676],[9.92552,53.4192417],[9.9066683,53.4159559],[9.9230535,53.4363147],[9.9170421,53.4466391],[9.9043636,53.4570665],[9.8949316,53.4558313],[9.8688468,53.4446225],[9.8621101,53.4294212],[9.8487204,53.4411135],[9.806634,53.4664838],[9.8002119,53.4737243],[9.8028025,53.4938287],[9.7820338,53.4923568],[9.7688507,53.5053032],[9.7710683,53.5218512],[9.7810509,53.5183751],[9.773523,53.527956],[9.7723167,53.543523]]]},{"id":"Hamburg-DK5","name":"Hamburg (DK5)","type":"wms","template":"http://geodienste.hamburg.de/HH_WMS_Geobasisdaten?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=13&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","polygon":[[[8.4825961,53.9356013],[8.4827386,53.9092447],[8.5274957,53.9094126],[8.5279233,53.9357691],[8.4825961,53.9356013]],[[9.7723167,53.543523],[9.7743354,53.5543296],[9.7631359,53.5552115],[9.7304736,53.5578689],[9.7346453,53.5653605],[9.7579266,53.6182757],[9.7712877,53.6313071],[9.770699,53.6160708],[9.7963361,53.6102995],[9.7899342,53.6038562],[9.8181678,53.5859147],[9.8377278,53.5919808],[9.8449827,53.5949795],[9.8541578,53.5980542],[9.8681371,53.6092959],[9.8693051,53.6132263],[9.885052,53.6219916],[9.8869663,53.6252015],[9.8935594,53.6302636],[9.8963672,53.6312186],[9.8968811,53.6349162],[9.9067823,53.6523063],[9.9311454,53.6526154],[9.9455232,53.6527604],[9.9502445,53.6508457],[9.9515493,53.6506547],[9.9779541,53.6488699],[9.9849181,53.6482971],[9.9873906,53.6507159],[9.9995963,53.6815314],[10.0228185,53.6815708],[10.0433756,53.6819823],[10.0514778,53.6775926],[10.0692494,53.679547],[10.0604009,53.6883344],[10.0709998,53.6958498],[10.0707046,53.7099642],[10.0819849,53.7204444],[10.1190792,53.7132448],[10.1693902,53.7389576],[10.1936896,53.7310028],[10.1779029,53.7099228],[10.1569421,53.7045133],[10.1582858,53.6894414],[10.1434248,53.6805732],[10.1417595,53.6774354],[10.144728,53.6761294],[10.1464311,53.6758841],[10.1495537,53.6754497],[10.1715323,53.6686937],[10.1988496,53.6467523],[10.1897268,53.6383796],[10.2220152,53.6334888],[10.1888726,53.6131597],[10.1923583,53.5947431],[10.2011737,53.5839226],[10.1516942,53.5761904],[10.1506692,53.5697309],[10.1479994,53.5639032],[10.1530759,53.5624246],[10.1594205,53.5609125],[10.1518903,53.5416987],[10.154649,53.5365725],[10.1687379,53.5374002],[10.1632659,53.5218549],[10.1661094,53.5201314],[10.169185,53.5196505],[10.1895059,53.5114835],[10.2104308,53.5199588],[10.218276,53.4992345],[10.2366988,53.4962928],[10.2500849,53.4789784],[10.2659161,53.4707878],[10.2904343,53.4551223],[10.3096151,53.4430928],[10.3122326,53.4522908],[10.3251401,53.4497898],[10.3079865,53.4333199],[10.2559794,53.4162256],[10.2508909,53.4102422],[10.2457816,53.402611],[10.2415493,53.3979725],[10.1655462,53.399327],[10.1450604,53.416136],[10.1094899,53.4264876],[10.1067973,53.4265817],[10.075805,53.4543638],[10.0515477,53.4639369],[10.0351698,53.446896],[10.0144851,53.4420285],[10.0229369,53.4322826],[9.9975402,53.4254609],[9.9824345,53.4147804],[9.9787266,53.4142015],[9.958105,53.4270802],[9.9295317,53.4200676],[9.92552,53.4192417],[9.9066683,53.4159559],[9.9230535,53.4363147],[9.9170421,53.4466391],[9.9043636,53.4570665],[9.8949316,53.4558313],[9.8688468,53.4446225],[9.8621101,53.4294212],[9.8487204,53.4411135],[9.806634,53.4664838],[9.8002119,53.4737243],[9.8028025,53.4938287],[9.7820338,53.4923568],[9.7688507,53.5053032],[9.7710683,53.5218512],[9.7810509,53.5183751],[9.773523,53.527956],[9.7723167,53.543523]]]},{"id":"Hampshire-Aerial-FCIR","name":"Hampshire Aerial FCIR","type":"tms","template":"https://{switch:a,b,c}.hampshire.aerial.openstreetmap.org.uk/layer/gb_hampshire_aerial_fcir/{zoom}/{x}/{y}.png","endDate":"2014-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[8,20],"polygon":[[[-1.315673,50.77809],[-1.491387,50.73027],[-1.57113,50.69041],[-1.680953,50.71748],[-1.693378,50.73484],[-1.695277,50.74065],[-1.686891,50.74999],[-1.710684,50.74812],[-1.719504,50.75261],[-1.746001,50.74452],[-1.748452,50.75675],[-1.742869,50.76397],[-1.751012,50.77577],[-1.78525,50.76177],[-1.799108,50.77236],[-1.822565,50.77225],[-1.826778,50.78077],[-1.822497,50.79933],[-1.807317,50.80074],[-1.81566,50.80752],[-1.808894,50.81358],[-1.805787,50.83249],[-1.798157,50.83535],[-1.806491,50.84414],[-1.809882,50.86189],[-1.813783,50.85591],[-1.830516,50.85261],[-1.852711,50.85651],[-1.85655,50.86684],[-1.849205,50.87802],[-1.85082,50.89178],[-1.84077,50.90051],[-1.826931,50.89939],[-1.820062,50.90492],[-1.821513,50.91691],[-1.816889,50.92412],[-1.841137,50.92886],[-1.874458,50.91441],[-1.911294,50.9439],[-1.923386,50.95917],[-1.95751,50.97575],[-1.959101,50.99152],[-1.949071,50.98649],[-1.928787,51.00055],[-1.887094,51.0026],[-1.87393,51.0097],[-1.871695,50.99083],[-1.854331,51.00786],[-1.835675,51.01238],[-1.815019,50.9899],[-1.800312,50.99457],[-1.751838,50.98133],[-1.719271,50.98047],[-1.691416,50.95943],[-1.66829,50.95041],[-1.652596,50.95029],[-1.635362,50.96269],[-1.623972,50.95903],[-1.608898,50.97686],[-1.621721,50.98099],[-1.631149,50.99984],[-1.609836,51.01225],[-1.601734,51.01042],[-1.607874,51.01582],[-1.605696,51.02271],[-1.635423,51.03176],[-1.638583,51.04126],[-1.631067,51.07819],[-1.640253,51.09201],[-1.630602,51.10359],[-1.634078,51.11099],[-1.630674,51.11652],[-1.641093,51.12237],[-1.665249,51.12546],[-1.657236,51.15539],[-1.674737,51.177],[-1.67213,51.18708],[-1.696792,51.20233],[-1.69247,51.21617],[-1.652877,51.22301],[-1.635643,51.22019],[-1.623947,51.24136],[-1.614024,51.24467],[-1.607408,51.25513],[-1.577168,51.25863],[-1.544434,51.24826],[-1.538396,51.25085],[-1.534359,51.25919],[-1.543446,51.25957],[-1.540068,51.27602],[-1.545961,51.28095],[-1.535908,51.28978],[-1.525949,51.28975],[-1.530933,51.29948],[-1.530081,51.3111],[-1.536275,51.31596],[-1.529857,51.34057],[-1.515522,51.34219],[-1.494983,51.33228],[-1.435991,51.33861],[-1.447589,51.3464],[-1.446305,51.35699],[-1.430556,51.35941],[-1.416077,51.37517],[-1.348989,51.37045],[-1.314724,51.37627],[-1.275549,51.3707],[-1.251156,51.37511],[-1.241179,51.36938],[-1.222093,51.37271],[-1.176023,51.36102],[-1.143212,51.36028],[-1.118753,51.36156],[-1.120961,51.36859],[-1.116785,51.3767],[-1.083632,51.38712],[-1.047537,51.36122],[-0.990405,51.36619],[-0.972636,51.36297],[-0.92376,51.36937],[-0.876809,51.3555],[-0.86549,51.35947],[-0.82728,51.35574],[-0.811219,51.34418],[-0.783225,51.34084],[-0.763252,51.32721],[-0.760048,51.32013],[-0.741834,51.31112],[-0.728423,51.28238],[-0.726306,51.25653],[-0.737128,51.23126],[-0.748978,51.2277],[-0.777122,51.23901],[-0.801926,51.23628],[-0.806106,51.24056],[-0.824914,51.23137],[-0.827009,51.22315],[-0.844932,51.20998],[-0.822682,51.18268],[-0.830416,51.15022],[-0.819518,51.15047],[-0.805037,51.15847],[-0.793819,51.15491],[-0.788794,51.14141],[-0.77846,51.13664],[-0.778131,51.13063],[-0.766544,51.11946],[-0.743652,51.11491],[-0.747146,51.10131],[-0.754112,51.10116],[-0.751217,51.09547],[-0.75506,51.08987],[-0.750757,51.0852],[-0.778501,51.07715],[-0.786448,51.06467],[-0.799544,51.06078],[-0.826446,51.05881],[-0.836458,51.0664],[-0.845193,51.06052],[-0.849904,51.0436],[-0.894853,51.01978],[-0.890651,51.00194],[-0.904614,50.99327],[-0.914614,50.97806],[-0.912784,50.9708],[-0.932457,50.94278],[-0.921188,50.9232],[-0.93793,50.91615],[-0.951325,50.89178],[-0.923681,50.86513],[-0.929757,50.85365],[-0.929033,50.84245],[-0.943419,50.82191],[-0.929902,50.78445],[-0.932748,50.77435],[-0.953469,50.73682],[-1.315673,50.77809]]]},{"id":"Hampshire-Aerial-RGB","name":"Hampshire Aerial RGB","type":"tms","template":"https://{switch:a,b,c}.hampshire.aerial.openstreetmap.org.uk/layer/gb_hampshire_aerial_rgb/{zoom}/{x}/{y}.png","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[8,20],"polygon":[[[-1.315673,50.77809],[-1.491387,50.73027],[-1.57113,50.69041],[-1.680953,50.71748],[-1.693378,50.73484],[-1.695277,50.74065],[-1.686891,50.74999],[-1.710684,50.74812],[-1.719504,50.75261],[-1.746001,50.74452],[-1.748452,50.75675],[-1.742869,50.76397],[-1.751012,50.77577],[-1.78525,50.76177],[-1.799108,50.77236],[-1.822565,50.77225],[-1.826778,50.78077],[-1.822497,50.79933],[-1.807317,50.80074],[-1.81566,50.80752],[-1.808894,50.81358],[-1.805787,50.83249],[-1.798157,50.83535],[-1.806491,50.84414],[-1.809882,50.86189],[-1.813783,50.85591],[-1.830516,50.85261],[-1.852711,50.85651],[-1.85655,50.86684],[-1.849205,50.87802],[-1.85082,50.89178],[-1.84077,50.90051],[-1.826931,50.89939],[-1.820062,50.90492],[-1.821513,50.91691],[-1.816889,50.92412],[-1.841137,50.92886],[-1.874458,50.91441],[-1.911294,50.9439],[-1.923386,50.95917],[-1.95751,50.97575],[-1.959101,50.99152],[-1.949071,50.98649],[-1.928787,51.00055],[-1.887094,51.0026],[-1.87393,51.0097],[-1.871695,50.99083],[-1.854331,51.00786],[-1.835675,51.01238],[-1.815019,50.9899],[-1.800312,50.99457],[-1.751838,50.98133],[-1.719271,50.98047],[-1.691416,50.95943],[-1.66829,50.95041],[-1.652596,50.95029],[-1.635362,50.96269],[-1.623972,50.95903],[-1.608898,50.97686],[-1.621721,50.98099],[-1.631149,50.99984],[-1.609836,51.01225],[-1.601734,51.01042],[-1.607874,51.01582],[-1.605696,51.02271],[-1.635423,51.03176],[-1.638583,51.04126],[-1.631067,51.07819],[-1.640253,51.09201],[-1.630602,51.10359],[-1.634078,51.11099],[-1.630674,51.11652],[-1.641093,51.12237],[-1.665249,51.12546],[-1.657236,51.15539],[-1.674737,51.177],[-1.67213,51.18708],[-1.696792,51.20233],[-1.69247,51.21617],[-1.652877,51.22301],[-1.635643,51.22019],[-1.623947,51.24136],[-1.614024,51.24467],[-1.607408,51.25513],[-1.577168,51.25863],[-1.544434,51.24826],[-1.538396,51.25085],[-1.534359,51.25919],[-1.543446,51.25957],[-1.540068,51.27602],[-1.545961,51.28095],[-1.535908,51.28978],[-1.525949,51.28975],[-1.530933,51.29948],[-1.530081,51.3111],[-1.536275,51.31596],[-1.529857,51.34057],[-1.515522,51.34219],[-1.494983,51.33228],[-1.435991,51.33861],[-1.447589,51.3464],[-1.446305,51.35699],[-1.430556,51.35941],[-1.416077,51.37517],[-1.348989,51.37045],[-1.314724,51.37627],[-1.275549,51.3707],[-1.251156,51.37511],[-1.241179,51.36938],[-1.222093,51.37271],[-1.176023,51.36102],[-1.143212,51.36028],[-1.118753,51.36156],[-1.120961,51.36859],[-1.116785,51.3767],[-1.083632,51.38712],[-1.047537,51.36122],[-0.990405,51.36619],[-0.972636,51.36297],[-0.92376,51.36937],[-0.876809,51.3555],[-0.86549,51.35947],[-0.82728,51.35574],[-0.811219,51.34418],[-0.783225,51.34084],[-0.763252,51.32721],[-0.760048,51.32013],[-0.741834,51.31112],[-0.728423,51.28238],[-0.726306,51.25653],[-0.737128,51.23126],[-0.748978,51.2277],[-0.777122,51.23901],[-0.801926,51.23628],[-0.806106,51.24056],[-0.824914,51.23137],[-0.827009,51.22315],[-0.844932,51.20998],[-0.822682,51.18268],[-0.830416,51.15022],[-0.819518,51.15047],[-0.805037,51.15847],[-0.793819,51.15491],[-0.788794,51.14141],[-0.77846,51.13664],[-0.778131,51.13063],[-0.766544,51.11946],[-0.743652,51.11491],[-0.747146,51.10131],[-0.754112,51.10116],[-0.751217,51.09547],[-0.75506,51.08987],[-0.750757,51.0852],[-0.778501,51.07715],[-0.786448,51.06467],[-0.799544,51.06078],[-0.826446,51.05881],[-0.836458,51.0664],[-0.845193,51.06052],[-0.849904,51.0436],[-0.894853,51.01978],[-0.890651,51.00194],[-0.904614,50.99327],[-0.914614,50.97806],[-0.912784,50.9708],[-0.932457,50.94278],[-0.921188,50.9232],[-0.93793,50.91615],[-0.951325,50.89178],[-0.923681,50.86513],[-0.929757,50.85365],[-0.929033,50.84245],[-0.943419,50.82191],[-0.929902,50.78445],[-0.932748,50.77435],[-0.953469,50.73682],[-1.315673,50.77809]]]},{"id":"Yverdon_les_Bains-HEIG_VD-2007","name":"HEIG-VD / Orthophoto Yverdon-les-Bains 25cm (2007)","type":"wms","template":"http://ogc.heig-vd.ch/mapserver/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=orthophoto_yverdon&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2007-01-01T00:00:00.000Z","startDate":"2007-01-01T00:00:00.000Z","polygon":[[[6.6620704,46.7757613],[6.6593637,46.7749931],[6.6604976,46.7745171],[6.6596563,46.7733731],[6.658242,46.7710934],[6.6580469,46.7705088],[6.6573276,46.7693898],[6.6554865,46.7697656],[6.6548159,46.7700412],[6.6536333,46.7702917],[6.6488782,46.7683208],[6.6473176,46.7700579],[6.6461837,46.7696153],[6.6454034,46.7704838],[6.645001,46.7703251],[6.6435257,46.7718115],[6.6422821,46.7712771],[6.6406239,46.7729556],[6.6403191,46.7728303],[6.6387097,46.7744336],[6.6373929,46.7738407],[6.6355275,46.7756778],[6.6349057,46.7753772],[6.6327598,46.777473],[6.6314308,46.776947],[6.6286875,46.7798025],[6.6241398,46.7808713],[6.6244202,46.7813138],[6.6207868,46.7823825],[6.6210185,46.7825995],[6.6192872,46.7832006],[6.6208722,46.7847786],[6.6188239,46.7855216],[6.6247738,46.7909228],[6.625993,46.7903385],[6.6261271,46.7904971],[6.6306139,46.7880344],[6.6287729,46.7912985],[6.6362834,46.7938695],[6.6373198,46.7924838],[6.6380087,46.7927176],[6.6387158,46.7917993],[6.6396546,46.7909187],[6.6411238,46.7892533],[6.6414896,46.7894119],[6.6443548,46.7867321],[6.6458057,46.7875169],[6.6468543,46.7866737],[6.6473176,46.7869158],[6.6507923,46.7842933],[6.6511115,46.7844456],[6.6533285,46.7824158],[6.6544349,46.7828427],[6.6560687,46.7809766],[6.6567332,46.7812522],[6.6583609,46.7793736],[6.6589722,46.7796176],[6.6620704,46.7757613]]],"terms_text":"Orthophoto Yverdon 2007 / HEIG-VD"},{"id":"IBGE_DF_Addresses","name":"IBGE Distrito Federal","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/wille/cirnnxni1000jg8nfppc8g7pm/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoid2lsbGUiLCJhIjoicFNVWk5VWSJ9.hluCd0YGvYHNlFi_utWe2g","scaleExtent":[0,20],"polygon":[[[-48.2444,-16.0508],[-48.2444,-15.5005],[-47.5695,-15.5005],[-47.5695,-16.0508],[-48.2444,-16.0508]]],"terms_text":"IBGE","description":"Addresses data from IBGE","overlay":true},{"id":"IBGE_Setores_Rurais","name":"IBGE Mapa de Setores Rurais","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/tmpsantos.i00mo1kj/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","scaleExtent":[0,14],"polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]]},{"id":"IBGE_Setores_Urbanos","name":"IBGE Mapa de Setores Urbanos","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/tmpsantos.hgda0m6h/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","scaleExtent":[0,19],"polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]]},{"id":"IBGE_BC250_Aglomerado_Rural","name":"IBGE-BC250-Aglomerado Rural Isolado","type":"wms","template":"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Aglomerado_Rural_Isolado_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BC250_Pista_Pouso","name":"IBGE-BC250-Pista de Pouso","type":"wms","template":"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Pista_Ponto_Pouso_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BC250_Rios_Drenagem","name":"IBGE-BC250-Rios Drenagem","type":"wms","template":"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Trecho_Drenagem_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BC250_Terra_Indegina","name":"IBGE-BC250-Terra Indigena","type":"wms","template":"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Terra_Indigena_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BC250_Rodoviario","name":"IBGE-BC250-Trecho Rodoviario","type":"wms","template":"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Trecho_Rodoviario_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image/png&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BC250_Uso_Sustentavel","name":"IBGE-BC250-Unidade de Uso Sistentável - APA","type":"wms","template":"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Unidade_Uso_Sustentavel_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BC250_Villa","name":"IBGE-BC250-Villa","type":"wms","template":"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Vila_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BCIM_Gerador_Eletrica","name":"IBGE-BCIM-Estações Geradora de Energia Elétrica","type":"wms","template":"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BCIM_Est_Gerad_Energia_Eletrica_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BCIM_Municipio","name":"IBGE-BCIM-Município","type":"wms","template":"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BCIM_Municipio_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"Haiti-Drone","name":"Imagerie Drone (Haiti)","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/iomhaiti/{zoom}/{x}/{y}","polygon":[[[-72.1547401,19.6878969],[-72.162234,19.689011],[-72.164995,19.6932445],[-72.1657838,19.6979977],[-72.161603,19.7035677],[-72.1487449,19.7028993],[-72.1477194,19.7026765],[-72.1485082,19.7001514],[-72.1436963,19.7011169],[-72.1410143,19.7000029],[-72.139476,19.6973664],[-72.1382533,19.6927617],[-72.1386872,19.6923161],[-72.1380561,19.6896423],[-72.1385294,19.6894938],[-72.1388055,19.6901251],[-72.1388844,19.6876741],[-72.1378195,19.6872656],[-72.13778,19.6850003],[-72.1369517,19.6855945],[-72.136794,19.6840719],[-72.135729,19.6835148],[-72.1355713,19.6740817],[-72.1366362,19.6708133],[-72.1487843,19.6710733],[-72.1534779,19.6763843],[-72.1530835,19.6769414],[-72.1533251,19.6769768],[-72.1532807,19.6796525],[-72.1523834,19.6797175],[-72.1522749,19.6803488],[-72.1519101,19.6803395],[-72.1518608,19.6805067],[-72.1528173,19.6806552],[-72.1522299,19.6833011],[-72.1507801,19.6831499],[-72.1504457,19.6847862],[-72.1508591,19.6843492],[-72.1530087,19.6849898],[-72.1546258,19.6854354],[-72.1543103,19.6870694],[-72.1547244,19.6868466],[-72.1548501,19.6877564],[-72.1545814,19.6877982],[-72.1547401,19.6878969]],[[-72.1310601,19.6718929],[-72.1259842,19.6772765],[-72.1255379,19.6776179],[-72.1216891,19.6776442],[-72.1149677,19.672602],[-72.1152745,19.6687152],[-72.1198205,19.6627535],[-72.1227768,19.6625696],[-72.1248965,19.662701],[-72.1285779,19.6645394],[-72.1308091,19.6661677],[-72.1316737,19.668794],[-72.1315621,19.671],[-72.1310601,19.6718929]],[[-71.845795,19.6709758],[-71.8429354,19.6759525],[-71.8410027,19.6759525],[-71.8380249,19.6755254],[-71.8378671,19.6745041],[-71.8390504,19.6743927],[-71.8390109,19.6741141],[-71.8398392,19.673947],[-71.8389123,19.6736127],[-71.8380249,19.67209],[-71.8380052,19.6726285],[-71.8376699,19.6727214],[-71.8376305,19.672545],[-71.8354414,19.6732135],[-71.835333,19.6729999],[-71.8331242,19.6734642],[-71.8326706,19.6716815],[-71.8321579,19.67209],[-71.8307183,19.6694902],[-71.8306009,19.6697594],[-71.8302174,19.6698907],[-71.8291833,19.6672095],[-71.8290749,19.6672095],[-71.8289122,19.6667916],[-71.8289516,19.6666199],[-71.8288333,19.6663506],[-71.8285572,19.6664759],[-71.8288678,19.6672466],[-71.8287593,19.6674138],[-71.8277979,19.6678177],[-71.8277112,19.6678586],[-71.8278263,19.6679637],[-71.8271831,19.6681212],[-71.8271761,19.6680917],[-71.8264405,19.6683921],[-71.8264074,19.6683231],[-71.8261954,19.6684253],[-71.8261806,19.6683556],[-71.8258946,19.6684206],[-71.8258897,19.6686574],[-71.8251551,19.6687549],[-71.8254509,19.6691588],[-71.8229332,19.6695739],[-71.822713,19.6696658],[-71.8227688,19.6697577],[-71.8201751,19.6709855],[-71.8198474,19.6704537],[-71.8197985,19.6706014],[-71.8194674,19.6707557],[-71.8182472,19.6713433],[-71.8181426,19.6711431],[-71.8175813,19.6714254],[-71.816959,19.6707672],[-71.8176388,19.6718965],[-71.8171403,19.6720376],[-71.8158225,19.6718045],[-71.8138354,19.6711874],[-71.8123259,19.6706982],[-71.8121759,19.6704258],[-71.8124304,19.6701467],[-71.8119184,19.6700141],[-71.8118765,19.6705828],[-71.811169,19.6703483],[-71.8095938,19.6698516],[-71.8077992,19.6692829],[-71.8056028,19.668612],[-71.8051443,19.6668942],[-71.8051196,19.6652322],[-71.8052315,19.661979],[-71.8065603,19.6523921],[-71.8073412,19.6482946],[-71.8099686,19.6468292],[-71.8147517,19.6454502],[-71.8147726,19.6455619],[-71.8150027,19.6455093],[-71.8149469,19.6453846],[-71.8159928,19.6450234],[-71.8158882,19.6448855],[-71.8165854,19.6446097],[-71.8190119,19.643802],[-71.8211524,19.643454],[-71.8221564,19.6433292],[-71.8269046,19.643211],[-71.8280481,19.6432241],[-71.8304466,19.6440778],[-71.8306419,19.6448592],[-71.8295263,19.6450365],[-71.8296064,19.6456111],[-71.8299411,19.6455651],[-71.8303699,19.6451744],[-71.830471,19.6453452],[-71.8308092,19.6451974],[-71.8310184,19.6451088],[-71.8312519,19.6458541],[-71.8311125,19.6458245],[-71.831367,19.6465862],[-71.8328939,19.646189],[-71.8344566,19.6457062],[-71.8344664,19.6463052],[-71.834215,19.6461938],[-71.8342002,19.6465513],[-71.8346702,19.6463],[-71.8349118,19.6463905],[-71.8347984,19.6462187],[-71.8354393,19.6458496],[-71.8355034,19.6458032],[-71.8364747,19.6461328],[-71.8376382,19.6472658],[-71.8379143,19.647888],[-71.8390483,19.6508039],[-71.8456942,19.6696203],[-71.845795,19.6709758]],[[-72.098878,18.54843],[-72.096993,18.5501994],[-72.0972888,18.5503209],[-72.0968451,18.5503489],[-72.0955632,18.551854],[-72.0956428,18.5526742],[-72.0959914,18.5533748],[-72.0962145,18.553203],[-72.0962842,18.5535665],[-72.0964446,18.5535533],[-72.0965352,18.5539764],[-72.0965056,18.554173],[-72.0966085,18.5541747],[-72.0965178,18.5542127],[-72.0968769,18.5546588],[-72.0979018,18.5552141],[-72.1006211,18.5555875],[-72.1014926,18.5556206],[-72.1024339,18.5555016],[-72.103417,18.5543515],[-72.1034798,18.5516215],[-72.1030789,18.5516149],[-72.1033752,18.5515224],[-72.1035042,18.5515224],[-72.1035239,18.5502417],[-72.1028701,18.5503062],[-72.1029015,18.55025],[-72.1028457,18.5501773],[-72.1035081,18.5500252],[-72.103491,18.5497396],[-72.1035181,18.5497361],[-72.1035398,18.5489039],[-72.1034317,18.5487056],[-72.102717,18.5481437],[-72.1025601,18.5481536],[-72.10229,18.5482751],[-72.1022891,18.5482569],[-72.1025201,18.5481396],[-72.1023388,18.5481321],[-72.0999082,18.5480901],[-72.09907,18.5483799],[-72.098878,18.54843]],[[-72.2542503,18.568262],[-72.2560252,18.5717765],[-72.2557886,18.5748049],[-72.2535009,18.5755526],[-72.2522782,18.5755526],[-72.2499906,18.5740945],[-72.2473874,18.5698323],[-72.2460069,18.566729],[-72.2458492,18.5629527],[-72.2479396,18.5625414],[-72.2501483,18.5628031],[-72.2519232,18.5650839],[-72.2542503,18.568262]],[[-72.303145,18.5332749],[-72.3031275,18.5331799],[-72.3048311,18.5311081],[-72.3097397,18.5311081],[-72.3164332,18.5324302],[-72.3234056,18.5366083],[-72.3261388,18.5387765],[-72.3261946,18.5426371],[-72.3170468,18.5540596],[-72.3130864,18.5540596],[-72.2987511,18.5453342],[-72.2988627,18.5407333],[-72.2962969,18.5404689],[-72.2954602,18.5395169],[-72.2961853,18.5338582],[-72.2971893,18.5332235],[-72.3007034,18.5332764],[-72.3022652,18.5342284],[-72.3028486,18.5335189],[-72.303104,18.5333361],[-72.303181,18.5334007],[-72.3035793,18.5335614],[-72.3030793,18.5346463],[-72.303715,18.5339873],[-72.3045286,18.5344052],[-72.3044015,18.5345097],[-72.3062747,18.5352571],[-72.3063107,18.5352741],[-72.3061219,18.5357628],[-72.3061219,18.5358196],[-72.30637,18.5358928],[-72.3062726,18.5354869],[-72.3066688,18.5350891],[-72.3061963,18.5349706],[-72.3058869,18.5349385],[-72.3055373,18.5346833],[-72.3054864,18.534613],[-72.3055585,18.5345065],[-72.3046749,18.5342293],[-72.3047617,18.5338817],[-72.3043252,18.5337511],[-72.3042595,18.5336346],[-72.303145,18.5332749]],[[-72.2981405,18.477502],[-72.2935652,18.4948587],[-72.2922242,18.4964297],[-72.2931708,18.4972526],[-72.2892266,18.5057058],[-72.2878067,18.5080996],[-72.2850458,18.5119893],[-72.2840203,18.5113161],[-72.2808649,18.515879],[-72.2773151,18.5175994],[-72.2723454,18.5175246],[-72.2662714,18.5144578],[-72.2665869,18.5066783],[-72.2692643,18.5046154],[-72.2661965,18.5029756],[-72.2688181,18.4965222],[-72.2691528,18.4959403],[-72.2702684,18.4961519],[-72.2702684,18.4955964],[-72.2690691,18.49557],[-72.2692922,18.4937714],[-72.2736988,18.4859951],[-72.2746749,18.4850429],[-72.2751769,18.483403],[-72.2765435,18.4813398],[-72.2773523,18.4814985],[-72.2783006,18.4809694],[-72.2778544,18.4807049],[-72.2771013,18.480123],[-72.2789978,18.4775836],[-72.279723,18.4772927],[-72.2806433,18.4776365],[-72.2813685,18.4771604],[-72.2808386,18.4769752],[-72.2812848,18.4758378],[-72.2823167,18.4751765],[-72.2851615,18.4750971],[-72.2849941,18.4763668],[-72.2854404,18.4769752],[-72.286277,18.4756262],[-72.2869325,18.4754675],[-72.2865978,18.4751897],[-72.2865978,18.4750046],[-72.2909765,18.4747268],[-72.2946579,18.4749384],[-72.2973911,18.476843],[-72.2981405,18.477502]],[[-72.3466657,18.5222375],[-72.346833,18.5244325],[-72.3475303,18.5277645],[-72.3455501,18.5291131],[-72.3403069,18.5292189],[-72.3383267,18.5280289],[-72.3369043,18.530118],[-72.3338086,18.5296684],[-72.3289279,18.5270769],[-72.328649,18.5253316],[-72.3292068,18.5232689],[-72.330406,18.5220524],[-72.3321631,18.5221847],[-72.3322467,18.5191963],[-72.3369183,18.5183633],[-72.3382012,18.5184691],[-72.3381454,18.5181782],[-72.3411993,18.5177947],[-72.3454943,18.5171997],[-72.3492595,18.517279],[-72.3504308,18.5188922],[-72.3503472,18.5206112],[-72.3496778,18.5220392],[-72.3466657,18.5222375]],[[-72.3303078,18.5486462],[-72.3429687,18.5508149],[-72.3433236,18.5530585],[-72.3413121,18.5614341],[-72.3390639,18.5613593],[-72.3384723,18.5638271],[-72.3375257,18.5654348],[-72.3348436,18.5650609],[-72.3311755,18.5638271],[-72.3312149,18.5616211],[-72.3232082,18.5606863],[-72.3212361,18.559602],[-72.3208023,18.5587046],[-72.3208811,18.557882],[-72.3259493,18.5580274],[-72.3266186,18.5581993],[-72.3259214,18.5577498],[-72.3250986,18.5573797],[-72.3233767,18.552263],[-72.3245994,18.5478507],[-72.3288986,18.5483742],[-72.329979,18.5489548],[-72.3303078,18.5486462]],[[-72.3231383,18.5269828],[-72.3223434,18.528067],[-72.3209629,18.5279745],[-72.3207816,18.5271282],[-72.3208513,18.5253697],[-72.3214649,18.5249598],[-72.3225666,18.5248937],[-72.3228454,18.52533],[-72.3232359,18.5264804],[-72.3231383,18.5269828]],[[-72.2160832,18.6457752],[-72.2159649,18.6553795],[-72.2030279,18.6558279],[-72.1947057,18.6553421],[-72.1922208,18.6545573],[-72.1920631,18.6521283],[-72.193483,18.6477559],[-72.201253,18.6385249],[-72.2069327,18.6388239],[-72.2120996,18.6424117],[-72.2118068,18.6430591],[-72.2121693,18.6426892],[-72.2127968,18.6427552],[-72.2134662,18.6431252],[-72.2135638,18.6437462],[-72.2154176,18.6443947],[-72.2158909,18.6450301],[-72.2160832,18.6457752]],[[-72.2867654,18.6482017],[-72.2900977,18.6527446],[-72.28981,18.6536532],[-72.2900738,18.6542664],[-72.290721,18.6537667],[-72.2910327,18.6544709],[-72.2912485,18.654221],[-72.29168,18.6558905],[-72.2912245,18.656606],[-72.2922673,18.65597],[-72.2926869,18.6567536],[-72.2930705,18.6567309],[-72.2941253,18.6581846],[-72.2960192,18.6608421],[-72.2959713,18.6619096],[-72.2932862,18.664567],[-72.2906731,18.6659979],[-72.2895943,18.6661342],[-72.2895943,18.6665657],[-72.2877004,18.6664749],[-72.2875805,18.6676559],[-72.2831214,18.6697227],[-72.2796453,18.6696546],[-72.2784311,18.6690787],[-72.2783972,18.6687736],[-72.277736,18.6691671],[-72.2774394,18.669143],[-72.2770071,18.6683159],[-72.2765575,18.6681125],[-72.2765385,18.6680583],[-72.2752319,18.6685239],[-72.2749292,18.6674649],[-72.2746416,18.6674309],[-72.2734668,18.6682145],[-72.2732271,18.6682712],[-72.2726757,18.6671583],[-72.2719147,18.6674288],[-72.2718808,18.6673405],[-72.2688149,18.6681868],[-72.2688269,18.6671761],[-72.2690786,18.6668241],[-72.2688149,18.66679],[-72.2681077,18.6670739],[-72.2676282,18.6673805],[-72.2675563,18.6666878],[-72.266861,18.666949],[-72.2655904,18.6673578],[-72.2654466,18.6670058],[-72.2647514,18.6674146],[-72.2629893,18.6681868],[-72.2628455,18.6681754],[-72.2626537,18.6676076],[-72.2623001,18.6677098],[-72.2624799,18.6679199],[-72.2624799,18.6682322],[-72.262306,18.6682606],[-72.2620963,18.6679654],[-72.2622761,18.6689193],[-72.2601484,18.6688966],[-72.2542749,18.6687944],[-72.2505388,18.6683476],[-72.2504371,18.669536],[-72.2477926,18.6698893],[-72.2415204,18.669793],[-72.2414187,18.6741933],[-72.2389167,18.6739759],[-72.2387249,18.6734649],[-72.2383653,18.6733059],[-72.2387009,18.6739532],[-72.2375502,18.6738964],[-72.2374183,18.6735103],[-72.237742,18.67334],[-72.2375142,18.6732605],[-72.236843,18.6734876],[-72.2364354,18.6724088],[-72.2355124,18.6726019],[-72.2354045,18.6724202],[-72.2353027,18.6729028],[-72.2345475,18.6726871],[-72.2343077,18.6724599],[-72.2342358,18.6734706],[-72.2334087,18.6734592],[-72.2332889,18.6733003],[-72.2327375,18.6732889],[-72.2327135,18.6735047],[-72.227703,18.6725281],[-72.2265283,18.6716537],[-72.226804,18.6715742],[-72.2274993,18.6715855],[-72.2274873,18.6714493],[-72.2272899,18.6714623],[-72.2272814,18.6712977],[-72.2272094,18.671358],[-72.2261785,18.6713693],[-72.2256032,18.670881],[-72.2255073,18.6694502],[-72.2261066,18.6696886],[-72.2261785,18.6695949],[-72.2259837,18.6695495],[-72.225777,18.6691379],[-72.2253335,18.6694643],[-72.2249739,18.66947],[-72.2245783,18.6678802],[-72.2235525,18.6677046],[-72.2235907,18.6675921],[-72.2224634,18.6676283],[-72.2223659,18.667022],[-72.2223277,18.6670943],[-72.2219209,18.667026],[-72.2208105,18.6669015],[-72.220809,18.6665325],[-72.2208705,18.6663593],[-72.2206023,18.6668107],[-72.2203895,18.6666361],[-72.2184341,18.6650535],[-72.21829,18.6640979],[-72.2183493,18.6608376],[-72.2187223,18.6606541],[-72.2186894,18.660603],[-72.2187253,18.6604525],[-72.2189771,18.6603247],[-72.2187823,18.6601998],[-72.2186984,18.6602367],[-72.2185815,18.6600352],[-72.2186085,18.6600039],[-72.2187823,18.6601345],[-72.218995,18.6600181],[-72.2189111,18.6599131],[-72.2189681,18.6597938],[-72.2183807,18.6595837],[-72.2184728,18.6539662],[-72.2201001,18.6511554],[-72.225796,18.6469472],[-72.2283048,18.6457265],[-72.2379335,18.645855],[-72.237764,18.6446985],[-72.2400355,18.6432529],[-72.2455958,18.6433493],[-72.2482742,18.6450358],[-72.2487488,18.6436705],[-72.2511067,18.6429775],[-72.2512385,18.6433409],[-72.2512625,18.6431592],[-72.2514843,18.6431365],[-72.2513284,18.6429718],[-72.2533602,18.6423471],[-72.253516,18.6426765],[-72.2539535,18.6425402],[-72.2541453,18.642932],[-72.2543851,18.6428696],[-72.2543791,18.6427503],[-72.2564168,18.6423244],[-72.2566925,18.6431365],[-72.2568783,18.6428582],[-72.2568184,18.6425288],[-72.258843,18.6420991],[-72.258885,18.6422467],[-72.2592626,18.6422297],[-72.2596461,18.6424057],[-72.2592206,18.6406907],[-72.2599545,18.6404815],[-72.2601156,18.6406341],[-72.2601156,18.6399393],[-72.2615268,18.6394669],[-72.2626056,18.6391034],[-72.2654465,18.6387286],[-72.2719433,18.6386832],[-72.272201,18.6388649],[-72.2730341,18.6394158],[-72.273166,18.6412558],[-72.2738732,18.6410286],[-72.2742208,18.6416079],[-72.2752187,18.6416987],[-72.2754524,18.6415738],[-72.2755513,18.6416874],[-72.2755394,18.6417527],[-72.2764713,18.6418634],[-72.276753,18.6418975],[-72.2762953,18.6426002],[-72.2774226,18.6429978],[-72.277982,18.6427247],[-72.2785796,18.6431303],[-72.2785669,18.6432307],[-72.2789017,18.6433471],[-72.279851,18.6439655],[-72.2858703,18.6469651],[-72.2867654,18.6482017]],[[-72.5557247,18.5305893],[-72.5555866,18.5367036],[-72.554995,18.537975],[-72.5488026,18.537919],[-72.5486646,18.5372832],[-72.548842,18.5306267],[-72.5493745,18.5301031],[-72.555133,18.5301218],[-72.5557247,18.5305893]],[[-72.6235278,18.5079877],[-72.6234441,18.5095217],[-72.6226074,18.5104341],[-72.6204878,18.511849],[-72.6183403,18.5107514],[-72.6162207,18.5083183],[-72.6162625,18.506467],[-72.618661,18.5044438],[-72.6204041,18.5044967],[-72.6228305,18.506996],[-72.6235278,18.5079877]]]},{"id":"osmim-imagicode-S2A_R119_N09_20160327T050917","name":"imagico.de: Adams Bridge","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R119_N09_20160327T050917&z={zoom}&x={x}&y={-y}","endDate":"2016-03-27T00:00:00.000Z","startDate":"2016-03-27T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[79.01779174804685,8.827572266651268],[79.01401519775389,9.64678471986339],[80.17642021179198,9.650423231331946],[80.17727851867674,8.831304063493132],[79.01779174804685,8.827572266651268]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Supplementing incomplete coverage in other sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80700162014211LGN00","name":"imagico.de: Alaska Range","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80700162014211LGN00&z={zoom}&x={x}&y={-y}","endDate":"2014-07-31T00:00:00.000Z","startDate":"2014-07-31T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[-152.70872943147867,62.30357443926811],[-152.70838610872474,62.58153176976553],[-152.00835101350992,63.54645538851267],[-148.99432055696695,63.53329945446586],[-148.99432055696695,62.30357443926811],[-152.70872943147867,62.30357443926811]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Recent summer image of the Alaska Range for mapping natural features (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-aral2","name":"imagico.de: Aral Sea (high water level)","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=aral2&z={zoom}&x={x}&y={-y}","endDate":"2016-03-03T00:00:00.000Z","startDate":"2016-03-03T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[58.049,43.2623],[58.049,46.7189],[58.1014,46.8645],[61.5524,46.8629],[61.5524,46.3896],[61.4675,45.3416],[60.6317,43.2623],[58.049,43.2623]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Water and wetland extents, dams etc. - some remaining winter ice in the north (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-aral1","name":"imagico.de: Aral Sea (low water level)","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=aral1&z={zoom}&x={x}&y={-y}","endDate":"2016-09-09T00:00:00.000Z","startDate":"2016-09-09T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[58.049,43.2623],[58.049,46.7334],[58.096,46.8645],[61.5524,46.8629],[61.5524,46.3896],[61.4685,45.3544],[60.6267,43.2623],[58.049,43.2623]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Water and wetland extents, dams etc. (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R067_S40_20170417T140051","name":"imagico.de: Bahía Blanca (high tide)","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R067_S40_20170417T140051&z={zoom}&x={x}&y={-y}","endDate":"2017-04-17T00:00:00.000Z","startDate":"2017-04-17T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-62.9988,-40.7327],[-62.9988,-37.9476],[-61.7505,-37.9474],[-61.7501,-40.7322],[-62.9988,-40.7327]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Tidal flats and islands at the coast (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R067_S40_20170127T140051","name":"imagico.de: Bahía Blanca (low tide)","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R067_S40_20170127T140051&z={zoom}&x={x}&y={-y}","endDate":"2017-01-27T00:00:00.000Z","startDate":"2017-01-27T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-62.9988,-40.7327],[-62.9988,-37.9476],[-61.7505,-37.9474],[-61.7501,-40.7322],[-62.9988,-40.7327]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Tidal flats and islands at the coast (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81190582014075LGN00","name":"imagico.de: Bakun Reservoir","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81190582014075LGN00&z={zoom}&x={x}&y={-y}","endDate":"2014-03-16T00:00:00.000Z","startDate":"2014-03-16T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[114.35999506049737,2.028456548619032],[113.5344754987298,2.030000532161949],[113.53619211249934,3.070767124420059],[114.76511591010677,3.067510236472651],[114.76254098945248,2.088156161702156],[114.35999506049737,2.028456548619032]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing in older pre-2011 images (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81250592016107LGN00","name":"imagico.de: Batam","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81250592016107LGN00&z={zoom}&x={x}&y={-y}","endDate":"2016-01-01T00:00:00.000Z","startDate":"2014-01-01T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[104.00154570197358,-0.000078769115171],[104.00137404059662,1.45099139170518],[104.91014937018647,1.451162998032411],[104.91014937018647,-0.000078769115171],[104.00154570197358,-0.000078769115171]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing Islands in OSM (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80770232017156LGN00","name":"imagico.de: Bogoslof Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80770232017156LGN00&z={zoom}&x={x}&y={-y}","endDate":"2017-06-05T00:00:00.000Z","startDate":"2017-06-05T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-168.2544,53.8749],[-168.2544,54.0213],[-167.8591,54.0213],[-167.8591,53.8749],[-168.2544,53.8749]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Recent image from after the eruption (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81800982013291LGN00","name":"imagico.de: Bouvet Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81800982013291LGN00&z={zoom}&x={x}&y={-y}","endDate":"2013-10-18T00:00:00.000Z","startDate":"2013-10-18T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[3.246529403113632,-54.47046993167111],[3.246529403113632,-54.375391687979096],[3.463852706336288,-54.375391687979096],[3.463852706336288,-54.47046993167111],[3.246529403113632,-54.47046993167111]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","best":true,"description":"For more accurate coastline and glacier mapping (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R017_S67_20170223T022551","name":"imagico.de: Bunger Hills","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R017_S67_20170223T022551&z={zoom}&x={x}&y={-y}","endDate":"2017-02-23T00:00:00.000Z","startDate":"2017-02-23T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[96.1197,-67.6542],[96.1201,-67.1899],[98.7331,-65.044],[105.1028,-65.044],[105.1028,-65.7224],[103.3017,-67.6542],[96.1197,-67.6542]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Largest ice free area at the East Antarctic coast - shows considerable amounts of non-permanent ice. (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R065_N47_20160929T102022","name":"imagico.de: Central Alps in late September 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R065_N47_20160929T102022&z={zoom}&x={x}&y={-y}","endDate":"2016-09-29T00:00:00.000Z","startDate":"2016-09-29T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[10.559062957763668,45.95484945195885],[7.473964691162107,45.95532682303484],[7.555847167968747,46.27080015119853],[8.05469512939453,47.66469371011084],[11.752452850341793,47.664809318453564],[11.752452850341793,46.813336457338615],[11.38423919677734,45.955088138010865],[10.559062957763668,45.95484945195885]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date image for glacier mapping - beware of some fresh snow at higher altitudes (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC82050982015344LGN00","name":"imagico.de: Clerke Rocks","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82050982015344LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-12-10T00:00:00.000Z","startDate":"2015-12-10T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-34.17701089820909,-55.29692751183208],[-35.19599283180284,-55.282851769908206],[-35.16663873634385,-54.7209735214882],[-34.12516916236925,-54.73465315976587],[-34.14010370216417,-55.29692751183208],[-34.17701089820909,-55.29692751183208]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing in other image sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R086_N60_20160831T213532","name":"imagico.de: Cook Inlet","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R086_N60_20160831T213532&z={zoom}&x={x}&y={-y}","endDate":"2016-08-31T00:00:00.000Z","startDate":"2016-08-31T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-154.5102,59.4577],[-154.5097,60.6888],[-153.5403,62.1718],[-148.0423,62.1718],[-148.0445,61.5342],[-149.7291,59.4584],[-154.5102,59.4577]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Tidal flats and glaciers in surrounding mountains (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-EO1A0040712016264110KF","name":"imagico.de: Coropuna","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=EO1A0040712016264110KF&z={zoom}&x={x}&y={-y}","endDate":"2016-09-21T00:00:00.000Z","startDate":"2016-09-21T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-72.7594470977783,-15.68684010813036],[-72.7594470977783,-15.49570157136026],[-72.74434089660643,-15.426295586903299],[-72.41286277770995,-15.426295586903299],[-72.41286277770995,-15.652957427428944],[-72.42410659790038,-15.686674840407827],[-72.7594470977783,-15.68684010813036]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date image for glacier mapping (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R022_N06_20151221T103009","name":"imagico.de: Cotonou","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R022_N06_20151221T103009&z={zoom}&x={x}&y={-y}","endDate":"2015-12-21T00:00:00.000Z","startDate":"2015-12-21T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[1.839749701876779,6.257803795151386],[1.839749701876779,7.114271792431897],[2.549397834200998,7.114271792431897],[2.549397834200998,6.489052510574106],[2.497813590426584,6.258059752887941],[1.839749701876779,6.257803795151386]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Patchy and partly cloudy coverage in usual sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R040_N01_20160311T164128","name":"imagico.de: Darwin and Wolf islands, Galapagos","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R040_N01_20160311T164128&z={zoom}&x={x}&y={-y}","endDate":"2016-03-11T00:00:00.000Z","startDate":"2016-03-11T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-92.05216379429558,1.321295617717369],[-92.05216379429558,1.72181118585353],[-91.74849481846549,1.72181118585353],[-91.74849481846549,1.321295617717369],[-92.05216379429558,1.321295617717369]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Recent image, only old and poor images in other sources currently (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80360072014245LGN00","name":"imagico.de: Eastern Devon Island coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80360072014245LGN00&z={zoom}&x={x}&y={-y}","endDate":"2014-09-02T00:00:00.000Z","startDate":"2014-09-02T00:00:00.000Z","scaleExtent":[0,11],"polygon":[[[-84.34798733886554,74.38945823827667],[-84.34798733886554,75.89030323920836],[-79.14870755370929,75.89030323920836],[-79.14870755370929,74.38945823827667],[-84.34798733886554,74.38945823827667]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Coastline mostly mapped meanwhile (false color IR)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC82160152013239LGN00","name":"imagico.de: Eastern Iceland","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82160152013239LGN00&z={zoom}&x={x}&y={-y}","endDate":"2013-08-27T00:00:00.000Z","startDate":"2013-08-27T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[-13.047005598725303,64.2110895294821],[-15.164963667572959,64.22408122727819],[-15.168053572358117,64.81572800422087],[-13.043572371186242,64.80359943673454],[-13.047005598725303,64.2110895294821]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing islets and inaccurate coast (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-AST_L1T_00302052007154424_20150518041444_91492","name":"imagico.de: El Altar","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00302052007154424_20150518041444_91492&z={zoom}&x={x}&y={-y}","endDate":"2012-02-05T00:00:00.000Z","startDate":"2012-02-05T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-78.531997745432,-1.805085317123331],[-78.531997745432,-1.608105565001241],[-78.33561713019762,-1.608105565001241],[-78.33561713019762,-1.805085317123331],[-78.531997745432,-1.805085317123331]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"2007 ASTER image offering better glacier coverage than common sources (true color with estimated blue)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R009_S61_20160109","name":"imagico.de: Elephant Island/Clarence Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R009_S61_20160109&z={zoom}&x={x}&y={-y}","endDate":"2016-01-09T00:00:00.000Z","startDate":"2016-01-09T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-56.13476090727487,-61.63471600102006],[-56.13476090727487,-61.199363166283845],[-55.83263688383738,-60.84015069906498],[-53.72343354521433,-60.83981613078141],[-53.72343354521433,-61.63471600102006],[-56.13476090727487,-61.63471600102006]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Fairly clear up-to-date image for updating glacier edges (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-enderby","name":"imagico.de: Enderby Land and Kemp Coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=enderby&z={zoom}&x={x}&y={-y}","endDate":"2017-03-27T00:00:00.000Z","startDate":"2017-01-25T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[45.4547,-68.5091],[45.4547,-67.5724],[49.7155,-65.7176],[59.2693,-65.7176],[67.3735,-67.3449],[67.3735,-68.2581],[67.088,-68.5091],[45.4547,-68.5091]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Sentinel-2 images of Enderby Land and Kemp Coast (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC82100502015347LGN00","name":"imagico.de: Fogo, Cape Verde","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82100502015347LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-12-13T00:00:00.000Z","startDate":"2015-12-13T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-24.758781955967567,14.748140156641956],[-24.758781955967567,15.092493544965103],[-24.267057941685337,15.092493544965103],[-24.267057941685337,14.748140156641956],[-24.758781955967567,14.748140156641956]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Image from after the 2014/2015 eruption (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-greenland","name":"imagico.de: Greenland mosaic","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=greenland&z={zoom}&x={x}&y={-y}","endDate":"2015-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[-43.9774,59.7171],[-44.545,59.7302],[-44.9203,59.7672],[-45.3587,59.8218],[-45.763,59.8848],[-46.0859,59.9827],[-46.3381,60.119],[-46.577,60.2652],[-46.8114,60.4418],[-47.2635,60.5314],[-47.6937,60.5549],[-48.1457,60.6192],[-48.5771,60.7015],[-48.8689,60.8506],[-49.0578,61.0555],[-49.396,61.2957],[-49.7601,61.4934],[-50.2064,61.7324],[-50.4699,61.9539],[-50.8647,62.1596],[-51.0631,62.3869],[-51.2121,62.6001],[-51.3005,62.8389],[-51.4238,62.9979],[-51.6767,63.1944],[-51.9465,63.4079],[-52.0253,63.6377],[-52.2255,63.8378],[-52.3658,64.0705],[-52.4829,64.3792],[-52.4988,64.6788],[-52.789,64.9063],[-53.2046,65.1321],[-53.6649,65.4753],[-53.9977,65.8019],[-54.1348,66.1568],[-54.1441,66.5235],[-54.2285,66.8319],[-54.4519,67.303],[-54.5141,67.7648],[-54.604,68.2021],[-54.568,68.5698],[-54.598,68.8347],[-54.7606,69.1207],[-55.0028,69.4125],[-55.2735,69.6187],[-55.3808,69.8283],[-55.3945,70.0838],[-55.3094,70.2573],[-55.4307,70.479],[-55.5501,70.6707],[-55.7654,70.861],[-56.2489,71.2343],[-56.5018,71.5429],[-56.5867,71.9015],[-56.5189,72.2355],[-56.5085,72.5258],[-56.8923,72.8144],[-57.4027,73.1054],[-57.8066,73.4566],[-58.1461,73.7696],[-58.3554,74.0972],[-58.5125,74.3783],[-58.7336,74.6328],[-59.3551,74.8869],[-60.1412,75.102],[-61.0067,75.2763],[-61.911,75.3886],[-62.4706,75.5595],[-62.9776,75.7454],[-64.1463,75.779],[-65.4481,75.7235],[-66.7068,75.6792],[-67.8379,75.6525],[-69.0456,75.6195],[-70.055,75.5344],[-71.0898,75.4705],[-72.1119,75.4476],[-74.2311,76.4102],[-74.5601,76.5328],[-74.5601,82.6959],[-14.4462,82.6959],[-14.3994,82.5997],[-13.5339,82.4379],[-12.0312,82.3426],[-10.7796,82.3196],[-10.7796,80.1902],[-11.2123,80.069],[-11.136,79.8103],[-10.7796,79.5176],[-10.7796,79.0441],[-11.2626,78.7128],[-12.2579,78.3558],[-13.2398,78.1272],[-13.7649,77.9279],[-14.1169,77.6779],[-14.7129,77.5278],[-15.5507,77.3655],[-16.0936,77.0771],[-16.0586,76.5548],[-15.838,75.9611],[-15.6879,75.4726],[-16.253,75.058],[-17.0427,74.6425],[-18.3155,74.2702],[-19.4463,73.9378],[-19.8329,73.632],[-20.2938,73.3524],[-20.7831,73.0446],[-21.01,72.6766],[-20.8774,72.2926],[-20.7672,71.8726],[-20.7765,71.4304],[-20.9411,70.9802],[-21.219,70.6126],[-21.5326,70.3001],[-21.8039,70.0911],[-22.166,69.8947],[-22.4831,69.7539],[-22.9027,69.6585],[-23.3545,69.544],[-23.9177,69.4036],[-24.1794,69.3088],[-24.6745,69.1084],[-25.1222,68.9555],[-25.6659,68.7995],[-26.0994,68.583],[-26.6316,68.4043],[-27.7638,68.2813],[-28.4575,68.0023],[-29.353,67.8135],[-30.6456,67.4911],[-31.7673,67.0005],[-32.9783,66.2596],[-33.9313,66.0156],[-34.8956,65.7403],[-35.5914,65.5208],[-36.1483,65.372],[-36.7532,65.2559],[-37.1858,65.1349],[-37.6032,64.9727],[-38.0624,64.4901],[-38.5304,64.1244],[-39.0545,63.7213],[-39.3131,63.4405],[-39.5739,62.7506],[-39.9532,62.2739],[-40.2757,61.8547],[-40.714,61.3365],[-41.2091,60.8495],[-41.821,60.5526],[-42.4368,60.3264],[-42.8643,60.0299],[-43.1131,59.9147],[-43.3282,59.83],[-43.5459,59.7695],[-43.797,59.7284],[-43.9774,59.7171]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Landsat mosaic of Greenland (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R047_S54_20160411T044330","name":"imagico.de: Heard Island coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R047_S54_20160411T044330&z={zoom}&x={x}&y={-y}","endDate":"2016-04-12T00:00:00.000Z","startDate":"2016-04-12T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[73.06896521028185,-53.270590689700434],[73.06896521028185,-52.875489636268725],[73.67338491853381,-52.87673289134188],[74.08863378938341,-52.94950473139763],[74.08863378938341,-53.270590689700434],[73.06896521028185,-53.270590689700434]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Recent image of Heard island with interior mostly cloud covered but mostly well visible coast (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC82280982013259LGN00","name":"imagico.de: Isla Londonderry","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82280982013259LGN00&z={zoom}&x={x}&y={-y}","endDate":"2013-09-16T00:00:00.000Z","startDate":"2013-09-16T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[-69.85679747431641,-55.55949231551995],[-72.26520659296875,-55.149427383391455],[-72.26520659296875,-54.51089432315929],[-72.08530546992188,-54.17909103768387],[-69.49115874140625,-54.17889010631196],[-69.49150206416016,-55.28378528847367],[-69.62230803339844,-55.55910398108892],[-69.85679747431641,-55.55949231551995]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"A lot of very coarse coastlines could be improved here, much snow cover though so no use for glacier mapping (false color IR)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-dms_kangerlussuaq_20151008","name":"imagico.de: Kangerlussuaq Autumn","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_kangerlussuaq_20151008&z={zoom}&x={x}&y={-y}","endDate":"2015-10-08T00:00:00.000Z","startDate":"2015-10-08T00:00:00.000Z","scaleExtent":[0,17],"polygon":[[[-50.6992,66.9888],[-50.721,67.0017],[-50.7341,67.0125],[-50.7396,67.0193],[-50.7396,67.0212],[-50.7158,67.0265],[-50.7017,67.0265],[-50.6829,67.0176],[-50.6686,67.0077],[-50.6638,66.998],[-50.6642,66.9946],[-50.6891,66.9888],[-50.6992,66.9888]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS image of the airport and settlement - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-dms_kangerlussuaq_20160518","name":"imagico.de: Kangerlussuaq Spring","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_kangerlussuaq_20160518&z={zoom}&x={x}&y={-y}","endDate":"2016-05-18T00:00:00.000Z","startDate":"2016-05-18T00:00:00.000Z","scaleExtent":[0,18],"polygon":[[[-50.7519,66.9996],[-50.7555,67.0023],[-50.7555,67.0033],[-50.6395,67.0297],[-50.6162,67.0339],[-50.6097,67.0281],[-50.6331,67.022],[-50.7323,66.9996],[-50.7519,66.9996]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS image of the airport and roads - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R021_N44_20160807T083013","name":"imagico.de: Kerch Strait","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R021_N44_20160807T083013&z={zoom}&x={x}&y={-y}","endDate":"2016-08-07T00:00:00.000Z","startDate":"2016-08-07T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[35.932588577270494,44.96236872935039],[35.932588577270494,45.559256426515695],[37.369909286499016,45.559256426515695],[37.369909286499016,44.96236872935039],[35.932588577270494,44.96236872935039]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"State of bridge construction in August 2016 (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-ls_polar2","name":"imagico.de: Landsat off-nadir July 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ls_polar2&z={zoom}&x={x}&y={-y}","endDate":"2016-07-17T00:00:00.000Z","startDate":"2016-07-17T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[-79.05174500251786,81.91484289044183],[-79.05174500251786,83.43338556749623],[-73.60389956385866,83.80224987787145],[-26.424486898081835,83.80224987787145],[-21.492998879371186,83.50352415480617],[-16.888354121159868,83.15094632775453],[-16.888354121159868,81.91484289044183],[-79.05174500251786,81.91484289044183]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Latest images north of the regular Landsat limit (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-larsen_2018","name":"imagico.de: Larsen C ice shelf after calving","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=larsen_2018&z={zoom}&x={x}&y={-y}","endDate":"2018-01-06T00:00:00.000Z","startDate":"2018-01-06T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[-62.7282,-68.9652],[-64.0489,-68.7318],[-64.0486,-68.5373],[-60.8845,-65.9399],[-59.9187,-65.9389],[-59.1088,-66.0775],[-59.1088,-68.8359],[-59.2544,-68.9652],[-62.7282,-68.9652]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"For updating the ice edge after the 2017 iceberg calving (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-AST_L1T_00311162013112731_20150618142416_109190","name":"imagico.de: Leskov Island ASTER","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00311162013112731_20150618142416_109190&z={zoom}&x={x}&y={-y}","endDate":"2013-11-16T00:00:00.000Z","startDate":"2013-11-16T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-28.210747081406492,-56.72108048139938],[-28.210747081406492,-56.624975043089115],[-27.96956284678735,-56.624975043089115],[-27.96956284678735,-56.72108048139938],[-28.210747081406492,-56.72108048139938]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing in other image sources (true color with estimated blue)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81991002015286LGN00","name":"imagico.de: Leskov Island Landsat","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81991002015286LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-10-13T00:00:00.000Z","startDate":"2015-10-13T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-27.992928409215843,-56.73479060902333],[-28.227761172887714,-56.732624892496354],[-28.2241562839717,-56.600752537318456],[-27.969754123327167,-56.60283135691063],[-27.97318735086623,-56.73479060902333],[-27.992928409215843,-56.73479060902333]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing in other image sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-ls_polar","name":"imagico.de: May 2013 off-nadir Landsat","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ls_polar&z={zoom}&x={x}&y={-y}","endDate":"2013-05-17T00:00:00.000Z","startDate":"2013-05-17T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[-85.76109385682587,81.39333391115835],[-89.83015512094161,82.14951616258433],[-89.83152841195212,82.24404688557661],[-84.99342418195555,82.73098798225534],[-79.95207288240479,83.13107965605444],[-74.55641250214465,83.46266728201661],[-69.35850602739671,83.70450775086888],[-28.207840897721187,83.70450775086888],[-23.06623935440381,83.46532469372944],[-17.96583654140148,83.15518123848051],[-17.96720983241198,82.72386035102944],[-22.781968115230015,81.44190408358111],[-85.76109385682587,81.39333391115835]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"First available image north of the regular Landsat limit, mostly with seasonal snow cover so difficult to interpret (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R042_S78_20170214T202521","name":"imagico.de: McMurdo Sound and Dry Valleys","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R042_S78_20170214T202521&z={zoom}&x={x}&y={-y}","endDate":"2017-02-14T00:00:00.000Z","startDate":"2017-02-14T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[162.9125,-78.4514],[162.6595,-78.4257],[159.2712,-77.6013],[159.2712,-77.4108],[164.157,-76.477],[169.7813,-76.4764],[169.7813,-78.4514],[162.9125,-78.4514]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date late season image - not ice minimum, be careful with distinguishing sea ice from ice shelves. (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R092_S02_20160613T075613","name":"imagico.de: Mount Kenya 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S02_20160613T075613&z={zoom}&x={x}&y={-y}","endDate":"2016-06-13T00:00:00.000Z","startDate":"2016-06-13T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[37.20665931701659,-0.266846645776291],[37.20665931701659,-0.011930465612033],[37.5655174255371,-0.011930465612033],[37.5655174255371,-0.266846645776291],[37.20665931701659,-0.266846645776291]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date image for glacier mapping (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R092_S05_20160802T075556","name":"imagico.de: Mount Kilimanjaro 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S05_20160802T075556&z={zoom}&x={x}&y={-y}","endDate":"2016-08-02T00:00:00.000Z","startDate":"2016-08-02T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[37.24768638610839,-3.229213650135676],[37.24768638610839,-2.968155849006605],[37.61581420898436,-2.968155849006605],[37.61581420898436,-3.229213650135676],[37.24768638610839,-3.229213650135676]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date image for glacier mapping (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80940622015159LGN00","name":"imagico.de: New Ireland","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80940622015159LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-06-08T00:00:00.000Z","startDate":"2015-06-08T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[150.38853376619625,-2.800534349432724],[150.38853376619625,-2.383396178206425],[150.83348005525875,-2.383396178206425],[150.83348005525875,-2.800534349432724],[150.38853376619625,-2.800534349432724]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Many missing islands in OSM (mostly mapped meanwhile) (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-northsea_s2_2016","name":"imagico.de: North Sea Coast 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2016&z={zoom}&x={x}&y={-y}","endDate":"2016-09-25T00:00:00.000Z","startDate":"2016-09-25T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[5.1562,52.8755],[5.1615,53.0325],[6.4155,55.7379],[9.8813,55.7459],[9.8813,53.2428],[9.6846,52.8877],[5.1562,52.8755]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-northsea_s2_2017","name":"imagico.de: North Sea Coast 2017","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2017&z={zoom}&x={x}&y={-y}","endDate":"2017-06-02T00:00:00.000Z","startDate":"2017-06-02T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[5.1713,53.0918],[6.477,55.8973],[9.8813,55.8973],[9.8813,53.2761],[9.7789,53.0918],[5.1713,53.0918]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-ural_s2_2016","name":"imagico.de: Northern and Polar Ural mountains August 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ural_s2_2016&z={zoom}&x={x}&y={-y}","endDate":"2016-08-12T00:00:00.000Z","startDate":"2016-08-12T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[59.198977223476454,64.8920468958533],[59.198977223476454,66.91656046303187],[60.733286610683486,68.44289182710118],[67.7329509173241,68.44327026354412],[67.7329509173241,67.748828729217],[64.21646761043934,64.9195663902952],[59.198977223476454,64.8920468958533]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date late summer imagery with few clouds - caution: not all visible snow is glaciers (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-ndvina","name":"imagico.de: Northern Dvina delta at low tide","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ndvina&z={zoom}&x={x}&y={-y}","endDate":"2015-09-13T00:00:00.000Z","startDate":"2015-09-13T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[37.7291,64.1971],[37.7291,65.1161],[37.8592,65.2705],[41.3223,65.2705],[41.3223,64.3142],[41.2114,64.1973],[37.7291,64.1971]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Beaches, tidal flats and other costal forms (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-nellesmere_ast","name":"imagico.de: Northern Ellesmere Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast&z={zoom}&x={x}&y={-y}","endDate":"2012-07-09T00:00:00.000Z","startDate":"2012-07-09T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[-81.62923243782096,82.45969864814401],[-83.03136255954291,82.47985512217643],[-83.03136255954291,83.05876272004272],[-72.80309111332822,83.09567468670448],[-65.65785798568925,83.03232446260982],[-65.8116665788654,82.45969864814401],[-81.62923243782096,82.45969864814401]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Assembled from July 2012 ASTER imagery (true color with estimated blue)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-nellesmere_ast_2016","name":"imagico.de: Northern Ellesmere Island July 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast_2016&z={zoom}&x={x}&y={-y}","endDate":"2012-07-15T00:00:00.000Z","startDate":"2012-07-08T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[-78.89729497133754,82.17577067162792],[-82.64500613899595,82.19425721404356],[-82.64500613899595,83.08067098163464],[-66.58986093522367,83.08497116318647],[-63.78010752773773,82.98907949583335],[-63.78010752773773,82.72198178031782],[-65.0092029821365,82.17577067162792],[-78.89729497133754,82.17577067162792]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Assembled from July 2016 ASTER imagery (true color with estimated blue)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81960222015233LGN00vis","name":"imagico.de: Northern German west coast tidalflats","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00vis&z={zoom}&x={x}&y={-y}","endDate":"2015-08-21T00:00:00.000Z","startDate":"2015-08-21T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[7.63567991501593,53.28027339774928],[7.63567991501593,53.66770140276793],[8.49433012253546,55.502457780526],[9.207754805152648,55.48106268908912],[9.207754805152648,53.28027339774928],[7.63567991501593,53.28027339774928]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81960222015233LGN00ir","name":"imagico.de: Northern German west coast tidalflats (infrared)","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00ir&z={zoom}&x={x}&y={-y}","endDate":"2015-08-21T00:00:00.000Z","startDate":"2015-08-21T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[7.63567991501593,53.28027339774928],[7.63567991501593,53.66810821588294],[8.49433012253546,55.502457780526],[9.207754805152648,55.48106268908912],[9.207754805152648,53.28027339774928],[7.63567991501593,53.28027339774928]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (false color IR)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-ngreenland_ast","name":"imagico.de: Northern Greenland ASTER","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ngreenland_ast&z={zoom}&x={x}&y={-y}","endDate":"2012-08-13T00:00:00.000Z","startDate":"2005-06-21T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[-52.49221819430999,82.48971755550389],[-52.49221819430999,82.94294978186194],[-49.28695697579964,83.47311821807558],[-44.52850362441216,83.7321400994933],[-29.525299334683975,83.7321400994933],[-25.263977329098022,83.58271128961059],[-21.183929736898254,83.39775984253468],[-21.183929736898254,82.74312310369845],[-23.404541300879075,82.48971755550389],[-52.49221819430999,82.48971755550389]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Assembled from mostly 2012 ASTER imagery, some 2005 images mainly in the northeast (true color with estimated blue)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-EO1A1350972013086110KF","name":"imagico.de: Northwest Heard Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=EO1A1350972013086110KF&z={zoom}&x={x}&y={-y}","endDate":"2013-03-13T00:00:00.000Z","startDate":"2013-03-13T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[73.22790413350113,-53.20333324999222],[73.22790413350113,-53.01072925838941],[73.2594898268605,-52.94943913810479],[73.78992348164566,-52.94943913810479],[73.78992348164566,-53.06048282358537],[73.71782570332533,-53.20333324999222],[73.22790413350113,-53.20333324999222]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Glaciers of Northwest Heard Island (mapped meanwhile) (false color IR)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R111_N09_20160604T154554","name":"imagico.de: Panama Canal","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R111_N09_20160604T154554&z={zoom}&x={x}&y={-y}","endDate":"2016-06-07T00:00:00.000Z","startDate":"2016-06-07T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-80.01653561766223,8.848981570244637],[-80.01653561766223,9.41480707574399],[-79.46859250242785,9.41480707574399],[-79.46859250242785,8.848981570244637],[-80.01653561766223,8.848981570244637]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Images of the new locks (but partly cloudy) (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-EO1A0120532016364110KF","name":"imagico.de: Panama Canal - Pacific side","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=EO1A0120532016364110KF&z={zoom}&x={x}&y={-y}","endDate":"2016-12-30T00:00:00.000Z","startDate":"2016-12-30T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-79.62538719177245,8.770827350748924],[-79.68684196472167,8.821974500616129],[-79.6866703033447,8.93705081902936],[-79.65362548828124,9.0929436313527],[-79.268159866333,9.0929436313527],[-79.32832717895505,8.770827350748924],[-79.62538719177245,8.770827350748924]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"New locks with less clouds than in the Sentinel-2 image - make sure to check image alignment (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R078_N68_20160930T081002","name":"imagico.de: Pechora Sea Coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N68_20160930T081002&z={zoom}&x={x}&y={-y}","endDate":"2016-09-30T00:00:00.000Z","startDate":"2016-09-30T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[53.1802,67.5344],[53.1821,68.414],[54.2107,69.3367],[55.3584,70.2786],[59.004,70.2786],[60.6947,69.977],[61.9837,69.7161],[61.9823,68.9395],[59.9153,67.5344],[53.1802,67.5344]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Sentinel-2 image of the Pechora Sea coast in autumn 2016 (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81511242016033LGN00","name":"imagico.de: Pensacola Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81511242016033LGN00&z={zoom}&x={x}&y={-y}","endDate":"2016-02-02T00:00:00.000Z","startDate":"2016-02-02T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[-53.20921946177197,-84.12524693598144],[-60.615377881406225,-83.78609327915953],[-60.615377881406225,-82.29968785439104],[-48.72405102147429,-82.29987186164387],[-44.52178052933989,-82.43683433550413],[-44.51354078327688,-84.12524693598144],[-53.20921946177197,-84.12524693598144]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R136_N41_20150831T093006","name":"imagico.de: Prokletije Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R136_N41_20150831T093006&z={zoom}&x={x}&y={-y}","endDate":"2015-08-31T00:00:00.000Z","startDate":"2015-08-31T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[19.112325688609005,42.1531576323006],[19.08425905347717,43.08073531915633],[20.63298799634826,43.09602978090892],[20.637880345591427,42.167791043253985],[19.112325688609005,42.1531576323006]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Late summer imagery where usual sources are severely limited by clouds and snow (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-DMS_1142622_03746_20110415_17533956","name":"imagico.de: Qasigiannguit","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142622_03746_20110415_17533956&z={zoom}&x={x}&y={-y}","endDate":"2011-04-15T00:00:00.000Z","startDate":"2011-04-15T00:00:00.000Z","scaleExtent":[0,15],"polygon":[[[-51.238571767352376,68.79971882076842],[-51.243335370562825,68.85302612951142],[-51.151668195269856,68.85302612951142],[-51.14038145973519,68.80116208175376],[-51.238571767352376,68.79971882076842]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS image of the settlement - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81510432015030LGN00","name":"imagico.de: Rann of Kutch","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81510432015030LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[67.96839858817646,22.36264542957619],[67.86231185721942,22.38391650007107],[67.86231185721942,24.886930816927297],[71.48986007499286,24.886930816927297],[71.48986007499286,22.36264542957619],[67.96839858817646,22.36264542957619]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Land/water distinction difficult to properly map based on Bing/Mapbox images (false color IR)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R093_N41_20150828T092005","name":"imagico.de: Rila and Pirin Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R093_N41_20150828T092005&z={zoom}&x={x}&y={-y}","endDate":"2015-08-28T00:00:00.000Z","startDate":"2015-08-28T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[23.808114560320394,41.584878805945024],[22.992379697039144,41.6019534981177],[23.011863263323328,42.29983747360261],[23.99402383156063,42.283393175568236],[23.965613873674886,41.584878805945024],[23.808114560320394,41.584878805945024]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Late summer imagery where usual sources are severely limited by clouds and snow (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81730602015040LGN00","name":"imagico.de: Rwenzori Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81730602015040LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-02-09T00:00:00.000Z","startDate":"2015-02-09T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[29.766296776846374,0.206886934953159],[29.766296776846374,0.509176367154027],[30.034603509024116,0.509176367154027],[30.034603509024116,0.206886934953159],[29.766296776846374,0.206886934953159]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Recent image of most of the remaining Rwenzori Mountains glaciers (false color IR)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R078_N01_20160702T082522","name":"imagico.de: Rwenzori Mountains 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N01_20160702T082522&z={zoom}&x={x}&y={-y}","endDate":"2016-07-02T00:00:00.000Z","startDate":"2016-07-02T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[29.8051357269287,0.235862065771959],[29.8051357269287,0.467085433008179],[30.02503395080565,0.467085433008179],[30.02503395080565,0.235862065771959],[29.8051357269287,0.235862065771959]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date image for glacier mapping (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80611072014036LGN00","name":"imagico.de: Scott Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80611072014036LGN00&z={zoom}&x={x}&y={-y}","endDate":"2014-02-05T00:00:00.000Z","startDate":"2014-02-05T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-180,-67.4263452007858],[-180,-67.32544337276457],[-179.8247337341308,-67.3253771978419],[-179.8247337341308,-67.4263452007858],[-180,-67.4263452007858]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing in other image sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC82100972015347LGN00","name":"imagico.de: Shag Rocks","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82100972015347LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-12-13T00:00:00.000Z","startDate":"2015-12-13T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-42.12874872458635,-53.72050213468143],[-42.14625818503558,-53.45782244664258],[-41.67573435080706,-53.445862233424414],[-41.6558216310805,-53.70871763480476],[-42.12874872458635,-53.72050213468143]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing in other image sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81130622013270LGN00","name":"imagico.de: Southeastern Sulawesi","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81130622013270LGN00&z={zoom}&x={x}&y={-y}","endDate":"2013-09-27T00:00:00.000Z","startDate":"2013-09-27T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[120.84382442048364,-3.595452324350203],[120.84382442048364,-3.159848173206955],[120.98184016755395,-2.514681686347053],[122.62618449738794,-2.514681686347053],[122.62618449738794,-3.002148034113534],[122.5007000308352,-3.595452324350203],[120.84382442048364,-3.595452324350203]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing islands and coarse coastline due to cloud cover in Bing, lakes could also use additional detail (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80281222016035LGN00","name":"imagico.de: Southern Transantarctic Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80281222016035LGN00&z={zoom}&x={x}&y={-y}","endDate":"2016-02-04T00:00:00.000Z","startDate":"2016-02-04T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[156.96951345925345,-84.50097988272655],[154.50857596843485,-84.46255082580927],[154.50857596843485,-82.60681485793681],[175.46774337070775,-82.58504749645738],[177.00582930246938,-83.52806548607914],[177.00582930246938,-84.19262083779002],[171.93838547371908,-84.34632646581997],[166.83798266071676,-84.44370142483508],[161.67028858819987,-84.50045345467909],[156.96951345925345,-84.50097988272655]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81030632015286LGN00","name":"imagico.de: Sudirman Range 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81030632015286LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-10-13T00:00:00.000Z","startDate":"2015-10-13T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[136.4226,-4.2853],[136.4226,-3.6447],[137.7971,-3.6447],[137.7971,-4.2853],[136.4226,-4.2853]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Older image of the Sudirman Range with no fresh snow showing glacier extent (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R088_S05_20160812T011732","name":"imagico.de: Sudirman Range 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R088_S05_20160812T011732&z={zoom}&x={x}&y={-y}","endDate":"2016-08-12T00:00:00.000Z","startDate":"2016-08-12T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[136.8044,-4.2585],[136.8044,-3.7836],[137.7701,-3.7836],[137.7701,-4.2585],[136.8044,-4.2585]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Cloud free image of the Sudirman Range but with fresh snow (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-s2sval","name":"imagico.de: Svalbard mosaic","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=s2sval&z={zoom}&x={x}&y={-y}","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[16.6108,76.4137],[16.4731,76.4268],[16.3788,76.4589],[14.4124,77.1324],[14.0784,77.2536],[10.9875,78.4054],[10.631,78.5605],[10.2314,78.8392],[10.3952,79.6074],[10.516,79.7731],[10.9632,79.8707],[20.2294,80.849],[20.4702,80.8493],[25.1752,80.6817],[33.4391,80.3438],[33.7809,80.3016],[34.0395,80.239],[33.977,80.1527],[25.5722,76.5917],[25.2739,76.481],[25.1416,76.4327],[24.937,76.4176],[16.6108,76.4137]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Sentinel-2 mosaic of Svalbard (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-DMS_1142636_160xx_20110507_1822xxxx","name":"imagico.de: Thule Air Base","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142636_160xx_20110507_1822xxxx&z={zoom}&x={x}&y={-y}","endDate":"2011-05-07T00:00:00.000Z","startDate":"2011-05-07T00:00:00.000Z","scaleExtent":[0,15],"polygon":[[[-68.93976917529807,76.51132557714853],[-68.93976917529807,76.54990046497333],[-68.76634826923117,76.55175699880375],[-68.50992908740743,76.55175699880375],[-68.50743999744161,76.51611959755911],[-68.67897262836203,76.51193618208278],[-68.93976917529807,76.51132557714853]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS image - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-dms_thule2_2015.09.25","name":"imagico.de: Thule Airbase DMS low altitude overflight September 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_thule2_2015.09.25&z={zoom}&x={x}&y={-y}","endDate":"2015-09-25T00:00:00.000Z","startDate":"2015-09-25T00:00:00.000Z","scaleExtent":[0,17],"polygon":[[[-68.74291885235837,76.52635852412212],[-68.74446380475094,76.52840070669755],[-68.74806869366695,76.54938731810256],[-68.7461482320123,76.56016657973251],[-68.72275936940244,76.56022393334496],[-68.72017371991207,76.5577475347327],[-68.71853220799495,76.5292079974043],[-68.71977675297786,76.52636602351234],[-68.74291885235837,76.52635852412212]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS aerial images from Thule Airbase - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-dms_thule_2015.10.06","name":"imagico.de: Thule Airbase DMS overflight October 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_thule_2015.10.06&z={zoom}&x={x}&y={-y}","endDate":"2015-10-06T00:00:00.000Z","startDate":"2015-10-06T00:00:00.000Z","scaleExtent":[0,16],"polygon":[[[-68.81923965911197,76.52510098413808],[-68.82651380996036,76.54176603738404],[-68.77344898680974,76.5439032956252],[-68.7021022270136,76.54544610909097],[-68.59176687697696,76.54560088014632],[-68.59183124999333,76.52793072237704],[-68.65970186690618,76.52510098413808],[-68.81923965911197,76.52510098413808]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS aerial images from Thule Airbase - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-dms_thule_2015.09.25","name":"imagico.de: Thule Airbase DMS overflight September 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_thule_2015.09.25&z={zoom}&x={x}&y={-y}","endDate":"2015-09-25T00:00:00.000Z","startDate":"2015-09-25T00:00:00.000Z","scaleExtent":[0,16],"polygon":[[[-68.7777130980429,76.50687742381471],[-68.77661875676482,76.57064446843503],[-68.68115357350676,76.57065443536027],[-68.67630413960784,76.55384487076157],[-68.67619685124725,76.5307435998188],[-68.6852305312094,76.50688243050337],[-68.7777130980429,76.50687742381471]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS aerial images from Thule Airbase - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R094_N79_20160812T105622","name":"imagico.de: Ushakov Island August 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R094_N79_20160812T105622&z={zoom}&x={x}&y={-y}","endDate":"2016-08-12T00:00:00.000Z","startDate":"2016-08-12T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[78.45885691499899,80.72643412860921],[78.45885691499899,80.9098976404357],[80.48892435884663,80.9098976404357],[80.48892435884663,80.72643412860921],[78.45885691499899,80.72643412860921]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date late summer imagery with few clouds (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80910682014358LGN00","name":"imagico.de: Vanatinai","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80910682014358LGN00&z={zoom}&x={x}&y={-y}","endDate":"2014-12-24T00:00:00.000Z","startDate":"2014-12-24T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[153.0613810625655,-11.789228234021259],[153.0613810625655,-11.288690822294749],[153.10927458673538,-11.072292520575749],[154.41201277643268,-11.072292520575749],[154.41201277643268,-11.789228234021259],[153.0613810625655,-11.789228234021259]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Coarse coastline due to cloud cover in Bing/Mapbox (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC82330892016031LGN00","name":"imagico.de: Volcán Calbuco","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82330892016031LGN00&z={zoom}&x={x}&y={-y}","endDate":"2016-01-31T00:00:00.000Z","startDate":"2016-01-31T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-72.8669610523419,-41.51741123877955],[-72.8669610523419,-41.045274923011036],[-72.23181395761533,-41.045274923011036],[-71.87510161630674,-41.10829439141359],[-72.00007109872861,-41.51741123877955],[-72.8669610523419,-41.51741123877955]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Image from after the 2015 eruption (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R089_N52_20160623T024048","name":"imagico.de: Vostochny Cosmodrome","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R089_N52_20160623T024048&z={zoom}&x={x}&y={-y}","endDate":"2016-06-23T00:00:00.000Z","startDate":"2016-06-23T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[126.36143429881301,51.375528375017275],[126.34804471141064,52.33932231282816],[128.60762341624462,52.340895519845674],[128.6117432892915,51.375528375017275],[126.36143429881301,51.375528375017275]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Recent image showing newest features (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-walps_autumn_2017","name":"imagico.de: Western Alps autumn colors 2017","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=walps_autumn_2017&z={zoom}&x={x}&y={-y}","endDate":"2017-10-17T00:00:00.000Z","startDate":"2017-10-17T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[4.6412,43.2493],[4.3118,43.2653],[4.3118,44.2167],[5.2562,46.965],[5.9151,48.7177],[7.3866,48.7467],[10.088,48.7467],[10.088,48.7032],[7.7819,43.2813],[7.76,43.2653],[7.3646,43.2493],[4.6412,43.2493]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Autumn colors in the Alps, Jura and southwestern Germany (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81490352013282LGN00","name":"imagico.de: Western Karakoram","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81490352013282LGN00&z={zoom}&x={x}&y={-y}","endDate":"2013-10-09T00:00:00.000Z","startDate":"2013-10-09T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[75.98364343730569,34.97850982318471],[73.96164407817483,35.36957188964085],[74.44281091777444,37.09391400468158],[76.50600900737405,36.7026732100855],[75.98364343730569,34.97850982318471]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Represents approximately minimum snow cover so can be well used for glacier mapping (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R039_S15_20160510T145731","name":"imagico.de: Willkanuta Mountains and Quelccaya Ice Cap","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R039_S15_20160510T145731&z={zoom}&x={x}&y={-y}","endDate":"2016-05-10T00:00:00.000Z","startDate":"2016-05-10T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-71.18070648306262,-14.4978507264954],[-71.17976234548938,-13.710292880050797],[-70.5563740550841,-13.71262765059222],[-70.5563740550841,-14.4978507264954],[-71.18070648306262,-14.4978507264954]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Poor and outdated imagery in other sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"IPR-orotofoto-last-tms","name":"IPR ortofoto LAST (tmsproxy)","type":"tms","template":"http://osm-{switch:a,b,c}.zby.cz/tiles_ipr_last.php/{zoom}/{x}/{y}.jpg","scaleExtent":[1,18],"polygon":[[[14.81231552124,49.93089301941],[14.18754582291,49.87687266984],[14.12025456314,50.19881542327],[14.74502426147,50.25247461226],[14.81231552124,49.93089301941]]]},{"id":"IPR-orotofoto-vege-tms","name":"IPR ortofoto Low-Vegetation (tmsproxy)","type":"tms","template":"http://osm-{switch:a,b,c}.zby.cz/tiles_ipr_vege.php/{zoom}/{x}/{y}.jpg","scaleExtent":[1,20],"polygon":[[[14.30454236984,49.99538124382],[14.3160436821,49.94205148763],[14.3499983888,49.94508261663],[14.35383872175,49.92726356386],[14.42385321818,49.93351545169],[14.4200902288,49.95097343212],[14.48865449494,49.95709281879],[14.48479036398,49.9750111737],[14.55385989188,49.98117257481],[14.55011770159,49.99851689993],[14.58455395868,50.0015874108],[14.58829614897,49.98424419323],[14.69168128485,49.99346468175],[14.67633637226,50.06452744171],[14.71278864961,50.06777324036],[14.70115373952,50.12158114828],[14.66470146217,50.11833899243],[14.6610031918,50.13543086714],[14.62755290441,50.13245658485],[14.61965341283,50.16894659259],[14.58542741996,50.16590546732],[14.58162921725,50.18344165464],[14.40776267983,50.167995553],[14.41156088254,50.15045369625],[14.37764851321,50.14743927281],[14.37379555571,50.16523508727],[14.33892816423,50.16213672855],[14.34278112173,50.14433976066],[14.27367931007,50.13819641038],[14.27749028245,50.12058459573],[14.20879964298,50.11447476994],[14.21288816219,50.09557069695],[14.24656290855,50.09856724424],[14.25417384067,50.06335893014],[14.21987061144,50.0603042129],[14.22369648177,50.04259477081],[14.257999711,50.04565061557],[14.26952647673,49.99225864496],[14.30454236984,49.99538124382]]]},{"id":"GSGS3906","name":"Ireland British War Office 1:25k GSGS 3906","type":"tms","template":"http://mapwarper.net/layers/tile/101/{zoom}/{x}/{y}.png","scaleExtent":[0,18],"polygon":[[[-10.71,51.32],[-10.71,55.46],[-5.37,55.46],[-5.37,51.32],[-10.71,51.32]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_Ireland#Trinity_College_Dublin","terms_text":"Glucksman Map Library, Trinity College Dublin","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAB3RJTUUH3gQOFR0YB1KT3QAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAARnQU1BAACxjwv8YQUAAAS/SURBVHjandN7TFNXHAfwzrn/lm3ZHy7LYrJkybK5zMw9fCEoPjbeChoHTtBVRF7l1ZZSaG8flCtvsFVpoZZHC5Y6jDM+UScDaxF5lIfSAaMIlVKBS8EZN4d+d9voZpbMFX/JN7nnnvM7n5xzcxmM5wrPlX1yFmP2adgmXKHc78bsU+j9ZRT3HzzE+D0n7tjuYdo5h38X47/q+UWD1nE0tw/gktEC66gdN/tG0Dc4hnEHhdG7DujOdqGHxi4ae2AZti8ccJXZYoOxawRPnjzGwcpmzM8//ntOe86MickZTEw7ka+99nJAZ/8YWjqs7ufc6ibM/fbQ/fzHo0eoOduJ8UkKljt2nLhk9hj4/Wlm6VA9A2NUa/ew6wNQE1OzVGvPEGUZvkvZHVNUo2mA6ugfpvoGrNT8/Dz1tMfd/yJgKZ13h6zjzFbzvbwO8wDZaR4kzeZbZG/fIHnTbCOvdzrI9h472dnVT97oociO23NkW+9M3pDVsc/V69rjRYA7Su11/dvbfkRJvDeOcMORuj8CpelLkJO6BVs4vQhj3QD5fTQS2PXYndQAblw2yrUt9c/6/xeoqzulK+VEoCTtawgSM5HCr0Nsmg48ngJhYiukonNIybeg8MQEFIZBFBWIoa4z1XoMaOrbtbHci2BtW4RachnOlO/GZW0SjuZEY2eWGYVEFfYJ+kDo/4ThdDPExadQcbxb5zmgb6/xYZlAxPtDmByFS2U+EHM5yBOyEZZ8HkzeZaQmyxFZROGkgUQIMQSNvkPrMXBM31YdFqNDJK8ZHE4FYgSt2Jl0GpKUGAhFjTiQ2QJDgRBGdSTIvEJ8IXDSQJvngEbfWrWacGJDzn1sJ34FkSqFQbgWTcUrcLWIATlnBzYSE8hOOIBQzk9YK56jgRs1CzlBVXD6bcijCYSwTYjhXUFD7nrUlHyFc6pPUCL4BpskUwhn6iGPSMYG3igN3KxeCKDZyulGddReBKV3YbNkGidkIWhQLMeFiuUoE3ths8iOfXFnoQ5nwTt9xHVFVZ5f0XGjxks0A++sIWyNqYM0TYp6qS9+UHxOn+BjqMQfwF8wgg2x5+ErccCboKA5bloAUGc8tk40i2CmGuGhgQhjX0MZwUY5uRJVuX6QcpPhm2TErlBfBLAa4S2epYHrlZ5fke4K6SVyIjRejz1REfhO2Ab2wavgZJ8EU9gEUek1MDMvIIa5DUFpzVhHzECtbRR4DJRrDP5f8h04ILwAmTQLAkEWCgsLIJVIIcwS4uhRBSQSCfi8FGzP6sbKjLsoV+tWewwolUfe+pR1y7GD1YDd4cGIi4uFgM/HulWr4LdpI5ITE5EQH49dOwMRmtmND/ebLMoy+WueA2VyBmO9opSTcx6HimWQHypGBicF+6MjwdzzLSQEH6UlBSjKFyNS1AnGMm6Csuwww2NApVK6hkv2JMptmTkGiPNqEcc+jFiuGsy0SrD4lciQ1kJW3ICAqJIWeu1ilUq1EEDlHr/6vr/XxozBuQD6jw6UUXRm6DgRQCeQfIA1iaZ+BuP191xrXwpw1RtL16zwSfi5PVg2hZAcyp0gqQOr9548TU+/82zdywGvLH429eZnO8rPBNMbB4ps+MhPpvyna9ELgb8ASvKZeuq+E9sAAAAASUVORK5CYII="},{"id":"ITACyL-Castile-and-Leon","name":"ITACyL - Castile and León","type":"wms","template":"http://orto.wms.itacyl.es/WMS?REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=Ortofoto_CyL&SRS={proj}&FORMAT=image/jpeg&STYLES=Default&TRANSPARENT=TRUE&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","polygon":[[[-1.9357991,41.4383441],[-1.8960064,41.438692],[-1.895356,41.3968709],[-1.9767014,41.3961593],[-1.9763916,41.376229],[-2.0620081,41.3754798],[-2.0626179,41.4147091],[-2.104577,41.4143421],[-2.103634,41.3536716],[-2.1444816,41.353314],[-2.1418984,41.1868282],[-2.0620415,41.1875291],[-2.0617117,41.1662438],[-2.0204638,41.1666059],[-2.0188653,41.0633378],[-2.100826,41.0626171],[-2.1011407,41.0829596],[-2.2273263,41.0818503],[-2.2270424,41.0634991],[-2.2691206,41.0631291],[-2.2688026,41.0425666],[-2.3532519,41.0418238],[-2.3535559,41.0614821],[-2.3948686,41.0611188],[-2.3945738,41.0420594],[-2.4372246,41.0416842],[-2.4375565,41.0631457],[-2.4792811,41.0627788],[-2.4799141,41.1036906],[-2.5207759,41.1033316],[-2.5211004,41.1242948],[-2.6041532,41.1235652],[-2.6048148,41.1662833],[-2.6470964,41.1659121],[-2.6480789,41.2293052],[-2.728739,41.2285978],[-2.7290669,41.2497401],[-2.8955197,41.2482806],[-2.8964873,41.3106325],[-2.9363011,41.3102838],[-2.9357117,41.2723089],[-3.1469203,41.2704576],[-3.1472307,41.2904534],[-3.2282807,41.2897432],[-3.2276653,41.2500782],[-3.3958112,41.2486039],[-3.3951828,41.2080777],[-3.4349215,41.207729],[-3.4342897,41.166962],[-3.4787658,41.1665716],[-3.4784403,41.1455556],[-3.6033615,41.1444585],[-3.6026994,41.1016871],[-3.6453878,41.101312],[-3.6450826,41.0815903],[-3.6873474,41.0812188],[-3.6867259,41.0410356],[-3.7286604,41.0406667],[-3.7280287,40.9997997],[-3.7689605,40.9994394],[-3.7686426,40.9788648],[-3.8547306,40.9781068],[-3.8543974,40.9565345],[-3.8985743,40.9561454],[-3.8976421,40.8957522],[-3.9390572,40.8953871],[-3.9371558,40.7720359],[-4.061976,40.7709334],[-4.0613345,40.7292585],[-4.1037236,40.7288838],[-4.1031129,40.6891834],[-4.146278,40.6888017],[-4.1449778,40.6042134],[-4.1902455,40.6038125],[-4.1899353,40.5836167],[-4.2294603,40.5832666],[-4.2297921,40.604873],[-4.2705425,40.6045122],[-4.2695844,40.5421064],[-4.3138364,40.5417142],[-4.3116268,40.397575],[-4.3937599,40.3968455],[-4.3934525,40.3767688],[-4.4372265,40.3763799],[-4.4362295,40.3112251],[-4.5219173,40.3104631],[-4.5203662,40.2089652],[-4.5613148,40.2086005],[-4.5609947,40.1876316],[-4.6889523,40.1864916],[-4.6893267,40.2110086],[-4.7319244,40.2106292],[-4.7325206,40.2496574],[-4.7683768,40.2493382],[-4.7680867,40.2303451],[-4.8110432,40.2299626],[-4.8114661,40.2072641],[-4.8542024,40.1841364],[-4.8526373,40.1256293],[-4.9369855,40.1248771],[-4.9363819,40.0852905],[-5.3553832,40.0815518],[-5.3560552,40.1256221],[-5.4402699,40.1248711],[-5.4409085,40.1667265],[-5.6038169,40.1652746],[-5.6044816,40.2088137],[-5.6864643,40.2080835],[-5.6871247,40.2513133],[-6.0216585,40.2483356],[-6.0229464,40.3325684],[-6.1043332,40.3318449],[-6.1055986,40.4145069],[-6.1895128,40.4137618],[-6.1901823,40.4574544],[-6.2697076,40.4567487],[-6.2690913,40.4165255],[-6.35192,40.41579],[-6.3512834,40.374216],[-6.4332493,40.3734877],[-6.4326391,40.3336127],[-6.5224541,40.3328142],[-6.5211648,40.2484909],[-6.599422,40.2477943],[-6.5988642,40.2112799],[-6.8556786,40.2089926],[-6.8563443,40.2525719],[-6.9362181,40.2518609],[-6.9375132,40.3365682],[-6.8511064,40.3373363],[-6.8600092,40.9167165],[-6.9354421,40.9160518],[-6.9374109,41.0435015],[-6.8548179,41.0442279],[-6.8554804,41.0870562],[-6.7701541,41.0878063],[-6.7724533,41.2362299],[-6.6837886,41.2370075],[-6.6043553,41.2377041],[-6.6052401,41.2947359],[-6.5193011,41.295489],[-6.5199114,41.3347937],[-6.4367251,41.3355221],[-6.4380091,41.4181379],[-6.3531841,41.4188797],[-6.3544684,41.501409],[-6.2688882,41.5021564],[-6.2707951,41.6245018],[-6.3566149,41.6237537],[-6.3572432,41.6640106],[-6.435477,41.663329],[-6.4349024,41.6265132],[-6.5227923,41.625747],[-6.523426,41.6663463],[-6.6034046,41.6656495],[-6.60733,41.9166043],[-7.0220912,41.9130049],[-7.0240633,42.0387169],[-7.1054035,42.0380124],[-7.1061291,42.0842081],[-7.0207976,42.0849466],[-7.0227551,42.2093958],[-6.9369897,42.2101367],[-6.9376312,42.25087],[-6.8547973,42.2515851],[-6.8554546,42.2932892],[-6.7734213,42.2939969],[-6.7740277,42.3324438],[-6.853255,42.3317608],[-6.8552311,42.4569007],[-7.1034126,42.4547653],[-7.1081086,42.7511487],[-7.0219933,42.7518861],[-7.0224121,42.7782497],[-6.9397569,42.7789573],[-6.9419944,42.9196184],[-6.7730194,42.9210615],[-6.7736331,42.959583],[-6.5232855,42.9617196],[-6.5239109,43.0009499],[-6.4389317,43.0016747],[-6.4402391,43.0836074],[-5.9378159,43.0878866],[-5.9370816,43.0418887],[-5.854205,43.0425951],[-5.8535667,43.0025804],[-5.7723612,43.003273],[-5.7736346,43.0830757],[-5.6026996,43.0845317],[-5.6020243,43.0422247],[-5.5216051,43.0429102],[-5.5222624,43.0840869],[-5.4375994,43.084808],[-5.4382655,43.1265078],[-5.1044441,43.1293491],[-5.1057321,43.2099008],[-5.0238581,43.2105967],[-5.0245075,43.2511672],[-4.9001667,43.2522234],[-4.899411,43.2050092],[-4.8112607,43.2057585],[-4.8096559,43.105375],[-4.7697514,43.1057148],[-4.7693676,43.0816804],[-4.7294463,43.0820204],[-4.7288105,43.0421933],[-4.5632192,43.0436047],[-4.5635281,43.0629569],[-4.3959936,43.0643843],[-4.395658,43.0433568],[-4.3537016,43.0437144],[-4.3526592,42.978357],[-4.2301346,42.9794024],[-4.2291284,42.9162469],[-4.1877354,42.9166004],[-4.1870583,42.8740657],[-4.1055199,42.8747626],[-4.1048632,42.8334825],[-3.978008,42.8345674],[-3.9773335,42.7921387],[-3.9374989,42.7924796],[-3.9378064,42.8118263],[-3.853966,42.8125436],[-3.8542743,42.8319306],[-3.8957255,42.831576],[-3.8960731,42.8534282],[-3.9382057,42.853068],[-3.9388853,42.8957718],[-3.9805995,42.8954154],[-3.9809315,42.916265],[-4.0221962,42.9159125],[-4.0229008,42.9601447],[-3.9785114,42.9605236],[-3.9794595,43.0199892],[-3.938827,43.0203357],[-3.9391788,43.042387],[-3.8970383,43.0427461],[-3.8973798,43.0641401],[-3.8542367,43.0645077],[-3.8548965,43.1058288],[-3.7708592,43.1065444],[-3.7711564,43.1251478],[-3.7281894,43.1255135],[-3.7285258,43.1465582],[-3.6871289,43.1469104],[-3.6877837,43.1878633],[-3.6036492,43.1885787],[-3.6033117,43.16747],[-3.5227798,43.168155],[-3.5224286,43.1461867],[-3.3966874,43.1472567],[-3.3969871,43.1660054],[-3.3544386,43.1663674],[-3.3547905,43.1883699],[-3.312676,43.188728],[-3.3129888,43.2082817],[-3.2299295,43.2089878],[-3.2295886,43.1876784],[-3.1034303,43.1887511],[-3.1027407,43.1456249],[-3.145455,43.1452614],[-3.1451648,43.1271],[-3.1061749,43.1274319],[-3.1044462,43.0191538],[-3.0207548,43.0198674],[-3.0201036,42.9790294],[-2.9811034,42.9793622],[-2.9797722,42.8957965],[-3.1047595,42.8947286],[-3.1027646,42.7692834],[-3.0219949,42.7699749],[-3.021675,42.7498344],[-2.9802357,42.7501893],[-2.9798754,42.7275008],[-2.8961284,42.7282183],[-2.8967866,42.7696661],[-2.853397,42.7700376],[-2.854046,42.8108748],[-2.6857742,42.8123144],[-2.6854448,42.7915941],[-2.645233,42.7919382],[-2.6448881,42.7702354],[-2.5200461,42.7713042],[-2.5193626,42.7282661],[-2.5607021,42.7279119],[-2.5603797,42.7075982],[-2.5194387,42.7079491],[-2.5181004,42.6235669],[-2.6040367,42.6228294],[-2.6043876,42.6449665],[-2.7715364,42.6435327],[-2.7718838,42.6654388],[-2.8117632,42.6650968],[-2.8120986,42.6862446],[-2.8546876,42.6858795],[-2.853374,42.6030248],[-2.8941263,42.602675],[-2.8937924,42.581594],[-3.0618985,42.5801504],[-3.0603059,42.4795203],[-3.0219106,42.4798505],[-3.0198987,42.3524957],[-3.0625473,42.3521282],[-3.0602922,42.20906],[-3.101203,42.2087066],[-3.1008585,42.1868215],[-3.0617541,42.1871594],[-3.0611,42.1455897],[-3.02029,42.1459425],[-3.0196265,42.1037456],[-2.8960202,42.1048151],[-2.8950131,42.0407115],[-2.8122232,42.0414286],[-2.8135302,42.1246034],[-2.7687117,42.1249911],[-2.7690537,42.1467421],[-2.7269484,42.1471061],[-2.7265985,42.1248518],[-2.6870598,42.1251938],[-2.6860524,42.0610919],[-2.7280396,42.0607283],[-2.7273889,42.0192954],[-2.6034263,42.0203694],[-2.6037558,42.0413549],[-2.561002,42.0417251],[-2.561982,42.1041055],[-2.5226586,42.1044458],[-2.5229938,42.1257676],[-2.4793313,42.1261453],[-2.4796279,42.1450019],[-2.3551669,42.1460781],[-2.3555034,42.1674688],[-2.3118382,42.1678462],[-2.3114953,42.1460516],[-2.2698957,42.1464113],[-2.2692414,42.1048011],[-2.2295004,42.105145],[-2.2298147,42.1251384],[-2.1446652,42.1258749],[-2.1443191,42.1038592],[-2.1038544,42.1042093],[-2.1015605,41.958109],[-1.9768889,41.9591902],[-1.9765512,41.9376488],[-1.9347344,41.9380116],[-1.9350441,41.9577593],[-1.8945308,41.9581106],[-1.8948295,41.9771541],[-1.8540002,41.9775081],[-1.8530417,41.9163796],[-1.8138054,41.9167201],[-1.8115061,41.7698387],[-1.7705981,41.7701945],[-1.7686552,41.6458221],[-1.8533513,41.645084],[-1.8530483,41.6256663],[-1.8947057,41.6253032],[-1.8940326,41.5821499],[-1.9771633,41.5814247],[-1.9768326,41.5602127],[-1.9377021,41.5605541],[-1.9357991,41.4383441]]],"terms_text":"ITACyL"},{"id":"gsi.go.jp","name":"Japan GSI ortho Imagery","type":"tms","template":"https://cyberjapandata.gsi.go.jp/xyz/ort/{zoom}/{x}/{y}.jpg","scaleExtent":[5,19],"polygon":[[[141.85546875,44.64911632343077],[140.2294921875,43.96909818325174],[138.955078125,41.80407814427237],[139.482421875,40.17887331434696],[138.8671875,38.30718056188316],[136.31835937499997,37.19533058280065],[132.1435546875,35.137879119634185],[128.935546875,33.35806161277885],[129.5068359375,32.47269502206151],[129.77050781249997,31.690781806136822],[130.2099609375,30.90222470517144],[131.220703125,30.78903675126116],[131.66015625,32.32427558887655],[132.71484375,32.879587173066305],[133.76953125,33.17434155100208],[136.7578125,33.87041555094183],[139.306640625,35.06597313798418],[140.888671875,35.17380831799959],[141.15234374999997,36.56260003738548],[142.11914062499997,39.9434364619742],[141.767578125,42.68243539838623],[141.85546875,44.64911632343077]]],"terms_url":"http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html","terms_text":"GSI Japan"},{"id":"Aargau-AGIS-2011","name":"Kanton Aargau 25cm (AGIS 2011)","type":"tms","template":"http://tiles.poole.ch/AGIS/OF2011/{zoom}/{x}/{y}.png","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","scaleExtent":[14,19],"polygon":[[[8.222923278808594,47.604774168947614],[8.244209289550781,47.613569753973955],[8.294334411621094,47.60986653003798],[8.300857543945312,47.58625231278527],[8.329353332519531,47.569808674020344],[8.382568359375,47.56702895728551],[8.398017883300781,47.57490443821351],[8.424797058105469,47.56795554592218],[8.415184020996094,47.54663986006874],[8.389778137207031,47.5262428287156],[8.372268676757812,47.51233121261258],[8.358535766601562,47.503286684046664],[8.36402893066406,47.48078455918],[8.371238708496094,47.481016589036074],[8.373985290527344,47.47011007802331],[8.368148803710938,47.46825342516445],[8.387031555175781,47.44852243794931],[8.380851745605469,47.447593738482304],[8.384284973144531,47.4355191531953],[8.376388549804688,47.431803338643334],[8.377761840820312,47.42808726171425],[8.389434814453125,47.42739046807988],[8.391494750976562,47.41902822496511],[8.380165100097656,47.40462347023052],[8.364715576171875,47.4016026187529],[8.367118835449219,47.39881398671558],[8.380851745605469,47.39788440990287],[8.39424133300781,47.39439835079049],[8.399734497070312,47.372314620566925],[8.40728759765625,47.37068703239024],[8.404197692871094,47.34417352612498],[8.416213989257812,47.33416935720614],[8.414497375488281,47.32602502961836],[8.452606201171875,47.33254059215931],[8.444023132324219,47.31927592106609],[8.427543640136719,47.29925625338924],[8.390121459960938,47.28854494625744],[8.41175079345703,47.247076403108416],[8.393898010253906,47.227728840642065],[8.404884338378906,47.194845099780174],[8.401451110839844,47.17757880776958],[8.409690856933594,47.17314466448546],[8.412437438964844,47.13976002139446],[8.379478454589844,47.13929295458033],[8.361968994140625,47.14559801038333],[8.342742919921875,47.177112073280966],[8.3056640625,47.24987305653909],[8.295021057128906,47.26268916206698],[8.300514221191406,47.26991141830738],[8.278884887695312,47.28225686421767],[8.259315490722656,47.285983225286174],[8.243522644042969,47.280859411143915],[8.240432739257812,47.27130916053537],[8.228759765625,47.27270686584952],[8.219146728515625,47.25336866567523],[8.204727172851562,47.245444953748034],[8.203353881835938,47.22679624955806],[8.180007934570312,47.22143353240336],[8.171768188476562,47.2279619858493],[8.155975341796875,47.23961793870555],[8.175888061523436,47.24218190428504],[8.17657470703125,47.25406775981567],[8.136062622070312,47.24730946320093],[8.12164306640625,47.24218190428504],[8.10791015625,47.2447457457832],[8.097267150878906,47.259427174956194],[8.077354431152344,47.2603591917818],[8.059844970703125,47.25569894358661],[8.062591552734375,47.24614415248379],[8.016586303710938,47.242881146090085],[8.015899658203125,47.258961160390896],[7.997016906738281,47.2796948387185],[7.951698303222655,47.274337475394645],[7.960968017578125,47.25430078914495],[7.933845520019531,47.237053849043896],[7.911529541015624,47.24381345414034],[7.859344482421875,47.23425651880584],[7.83977508544922,47.23425651880584],[7.826042175292968,47.24427960201268],[7.828102111816407,47.25966018070071],[7.82398223876953,47.26548499105541],[7.8408050537109375,47.273405704663965],[7.848701477050781,47.28551744450745],[7.860374450683594,47.30461109337307],[7.871704101562499,47.31136207506936],[7.8888702392578125,47.31136207506936],[7.897453308105469,47.31904317780638],[7.895393371582031,47.327653995607086],[7.908439636230469,47.340451266106996],[7.9259490966796875,47.332773275955894],[7.94757843017578,47.331609846720866],[7.94757843017578,47.316715688820764],[8.007316589355467,47.33905535093827],[8.004913330078125,47.34533667855891],[8.011093139648438,47.35719936945847],[8.024139404296875,47.36719917429931],[8.032722473144531,47.38393878966209],[8.026885986328125,47.39602520707679],[8.010749816894531,47.3955603961201],[8.004570007324219,47.40671472747142],[7.975730895996094,47.41507892620099],[7.9657745361328125,47.42181578692778],[7.985343933105469,47.425764580393924],[7.971954345703124,47.46105827584221],[7.957534790039062,47.457344265054225],[7.940711975097656,47.46221885041022],[7.946891784667968,47.48403288391224],[7.907066345214844,47.48588897929538],[7.8936767578125,47.50653361720931],[7.873420715332031,47.51325876844644],[7.875480651855468,47.52253342509336],[7.865180969238281,47.51975120023913],[7.856254577636718,47.533660849056794],[7.833251953125,47.5325018525392],[7.834281921386719,47.51465007145751],[7.789649963378906,47.49377665301097],[7.789649963378906,47.518128167602484],[7.7515411376953125,47.52461999690649],[7.731285095214843,47.53203824675999],[7.708969116210937,47.54015075619555],[7.740898132324219,47.54362716173679],[7.761497497558593,47.54895720250044],[7.781410217285156,47.55289644950155],[7.797546386718749,47.55915229204993],[7.805442810058593,47.56563904359584],[7.814369201660155,47.575136052077276],[7.819175720214843,47.58648387645128],[7.8325653076171875,47.586715439092906],[7.843208312988281,47.581620824334166],[7.859344482421875,47.58602074809481],[7.8847503662109375,47.58764167941513],[7.903633117675781,47.58092606572345],[7.911872863769532,47.56749225365282],[7.90740966796875,47.55776216936179],[7.917709350585938,47.545712894408624],[7.929382324218749,47.54640812019053],[7.941741943359374,47.54432241518175],[7.9520416259765625,47.54965238525127],[7.9561614990234375,47.55683540041267],[7.9767608642578125,47.55544521625339],[7.997360229492187,47.556603705614094],[8.019676208496094,47.54965238525127],[8.049888610839844,47.55637200979099],[8.058815002441406,47.56285910557121],[8.072891235351562,47.56355410390809],[8.086967468261719,47.557067094186735],[8.100700378417969,47.56216409801383],[8.105506896972656,47.57976811421671],[8.113059997558594,47.583473468887405],[8.133659362792969,47.58301031389572],[8.138809204101562,47.59042030203756],[8.15185546875,47.59551406038282],[8.166275024414062,47.5941249027327],[8.177261352539062,47.6017648134425],[8.193740844726562,47.616346999837226],[8.2012939453125,47.62120682516921],[8.219490051269531,47.61958693358351],[8.223953247070312,47.61102381568743],[8.222923278808594,47.604774168947614]]],"terms_text":"AGIS OF2011"},{"id":"Aargau-AGIS-2014","name":"Kanton Aargau 25cm (AGIS 2014)","type":"tms","template":"https://mapproxy.osm.ch/tiles/AGIS2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2014-01-01T00:00:00.000Z","startDate":"2014-01-01T00:00:00.000Z","scaleExtent":[8,19],"polygon":[[[8.222923278808594,47.604774168947614],[8.244209289550781,47.613569753973955],[8.294334411621094,47.60986653003798],[8.300857543945312,47.58625231278527],[8.329353332519531,47.569808674020344],[8.382568359375,47.56702895728551],[8.398017883300781,47.57490443821351],[8.424797058105469,47.56795554592218],[8.415184020996094,47.54663986006874],[8.389778137207031,47.5262428287156],[8.372268676757812,47.51233121261258],[8.358535766601562,47.503286684046664],[8.36402893066406,47.48078455918],[8.371238708496094,47.481016589036074],[8.373985290527344,47.47011007802331],[8.368148803710938,47.46825342516445],[8.387031555175781,47.44852243794931],[8.380851745605469,47.447593738482304],[8.384284973144531,47.4355191531953],[8.376388549804688,47.431803338643334],[8.377761840820312,47.42808726171425],[8.389434814453125,47.42739046807988],[8.391494750976562,47.41902822496511],[8.380165100097656,47.40462347023052],[8.364715576171875,47.4016026187529],[8.367118835449219,47.39881398671558],[8.380851745605469,47.39788440990287],[8.39424133300781,47.39439835079049],[8.399734497070312,47.372314620566925],[8.40728759765625,47.37068703239024],[8.404197692871094,47.34417352612498],[8.416213989257812,47.33416935720614],[8.414497375488281,47.32602502961836],[8.452606201171875,47.33254059215931],[8.444023132324219,47.31927592106609],[8.427543640136719,47.29925625338924],[8.390121459960938,47.28854494625744],[8.41175079345703,47.247076403108416],[8.393898010253906,47.227728840642065],[8.404884338378906,47.194845099780174],[8.401451110839844,47.17757880776958],[8.409690856933594,47.17314466448546],[8.412437438964844,47.13976002139446],[8.379478454589844,47.13929295458033],[8.361968994140625,47.14559801038333],[8.342742919921875,47.177112073280966],[8.3056640625,47.24987305653909],[8.295021057128906,47.26268916206698],[8.300514221191406,47.26991141830738],[8.278884887695312,47.28225686421767],[8.259315490722656,47.285983225286174],[8.243522644042969,47.280859411143915],[8.240432739257812,47.27130916053537],[8.228759765625,47.27270686584952],[8.219146728515625,47.25336866567523],[8.204727172851562,47.245444953748034],[8.203353881835938,47.22679624955806],[8.180007934570312,47.22143353240336],[8.171768188476562,47.2279619858493],[8.155975341796875,47.23961793870555],[8.175888061523436,47.24218190428504],[8.17657470703125,47.25406775981567],[8.136062622070312,47.24730946320093],[8.12164306640625,47.24218190428504],[8.10791015625,47.2447457457832],[8.097267150878906,47.259427174956194],[8.077354431152344,47.2603591917818],[8.059844970703125,47.25569894358661],[8.062591552734375,47.24614415248379],[8.016586303710938,47.242881146090085],[8.015899658203125,47.258961160390896],[7.997016906738281,47.2796948387185],[7.951698303222655,47.274337475394645],[7.960968017578125,47.25430078914495],[7.933845520019531,47.237053849043896],[7.911529541015624,47.24381345414034],[7.859344482421875,47.23425651880584],[7.83977508544922,47.23425651880584],[7.826042175292968,47.24427960201268],[7.828102111816407,47.25966018070071],[7.82398223876953,47.26548499105541],[7.8408050537109375,47.273405704663965],[7.848701477050781,47.28551744450745],[7.860374450683594,47.30461109337307],[7.871704101562499,47.31136207506936],[7.8888702392578125,47.31136207506936],[7.897453308105469,47.31904317780638],[7.895393371582031,47.327653995607086],[7.908439636230469,47.340451266106996],[7.9259490966796875,47.332773275955894],[7.94757843017578,47.331609846720866],[7.94757843017578,47.316715688820764],[8.007316589355467,47.33905535093827],[8.004913330078125,47.34533667855891],[8.011093139648438,47.35719936945847],[8.024139404296875,47.36719917429931],[8.032722473144531,47.38393878966209],[8.026885986328125,47.39602520707679],[8.010749816894531,47.3955603961201],[8.004570007324219,47.40671472747142],[7.975730895996094,47.41507892620099],[7.9657745361328125,47.42181578692778],[7.985343933105469,47.425764580393924],[7.971954345703124,47.46105827584221],[7.957534790039062,47.457344265054225],[7.940711975097656,47.46221885041022],[7.946891784667968,47.48403288391224],[7.907066345214844,47.48588897929538],[7.8936767578125,47.50653361720931],[7.873420715332031,47.51325876844644],[7.875480651855468,47.52253342509336],[7.865180969238281,47.51975120023913],[7.856254577636718,47.533660849056794],[7.833251953125,47.5325018525392],[7.834281921386719,47.51465007145751],[7.789649963378906,47.49377665301097],[7.789649963378906,47.518128167602484],[7.7515411376953125,47.52461999690649],[7.731285095214843,47.53203824675999],[7.708969116210937,47.54015075619555],[7.740898132324219,47.54362716173679],[7.761497497558593,47.54895720250044],[7.781410217285156,47.55289644950155],[7.797546386718749,47.55915229204993],[7.805442810058593,47.56563904359584],[7.814369201660155,47.575136052077276],[7.819175720214843,47.58648387645128],[7.8325653076171875,47.586715439092906],[7.843208312988281,47.581620824334166],[7.859344482421875,47.58602074809481],[7.8847503662109375,47.58764167941513],[7.903633117675781,47.58092606572345],[7.911872863769532,47.56749225365282],[7.90740966796875,47.55776216936179],[7.917709350585938,47.545712894408624],[7.929382324218749,47.54640812019053],[7.941741943359374,47.54432241518175],[7.9520416259765625,47.54965238525127],[7.9561614990234375,47.55683540041267],[7.9767608642578125,47.55544521625339],[7.997360229492187,47.556603705614094],[8.019676208496094,47.54965238525127],[8.049888610839844,47.55637200979099],[8.058815002441406,47.56285910557121],[8.072891235351562,47.56355410390809],[8.086967468261719,47.557067094186735],[8.100700378417969,47.56216409801383],[8.105506896972656,47.57976811421671],[8.113059997558594,47.583473468887405],[8.133659362792969,47.58301031389572],[8.138809204101562,47.59042030203756],[8.15185546875,47.59551406038282],[8.166275024414062,47.5941249027327],[8.177261352539062,47.6017648134425],[8.193740844726562,47.616346999837226],[8.2012939453125,47.62120682516921],[8.219490051269531,47.61958693358351],[8.223953247070312,47.61102381568743],[8.222923278808594,47.604774168947614]]],"terms_text":"AGIS OF2014"},{"id":"Aargau-AGIS-2016","name":"Kanton Aargau 25cm (AGIS 2016)","type":"tms","template":"https://mapproxy.osm.ch/tiles/AGIS2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","scaleExtent":[8,19],"polygon":[[[8.222923278808594,47.604774168947614],[8.244209289550781,47.613569753973955],[8.294334411621094,47.60986653003798],[8.300857543945312,47.58625231278527],[8.329353332519531,47.569808674020344],[8.382568359375,47.56702895728551],[8.398017883300781,47.57490443821351],[8.424797058105469,47.56795554592218],[8.415184020996094,47.54663986006874],[8.389778137207031,47.5262428287156],[8.372268676757812,47.51233121261258],[8.358535766601562,47.503286684046664],[8.36402893066406,47.48078455918],[8.371238708496094,47.481016589036074],[8.373985290527344,47.47011007802331],[8.368148803710938,47.46825342516445],[8.387031555175781,47.44852243794931],[8.380851745605469,47.447593738482304],[8.384284973144531,47.4355191531953],[8.376388549804688,47.431803338643334],[8.377761840820312,47.42808726171425],[8.389434814453125,47.42739046807988],[8.391494750976562,47.41902822496511],[8.380165100097656,47.40462347023052],[8.364715576171875,47.4016026187529],[8.367118835449219,47.39881398671558],[8.380851745605469,47.39788440990287],[8.39424133300781,47.39439835079049],[8.399734497070312,47.372314620566925],[8.40728759765625,47.37068703239024],[8.404197692871094,47.34417352612498],[8.416213989257812,47.33416935720614],[8.414497375488281,47.32602502961836],[8.452606201171875,47.33254059215931],[8.444023132324219,47.31927592106609],[8.427543640136719,47.29925625338924],[8.390121459960938,47.28854494625744],[8.41175079345703,47.247076403108416],[8.393898010253906,47.227728840642065],[8.404884338378906,47.194845099780174],[8.401451110839844,47.17757880776958],[8.409690856933594,47.17314466448546],[8.412437438964844,47.13976002139446],[8.379478454589844,47.13929295458033],[8.361968994140625,47.14559801038333],[8.342742919921875,47.177112073280966],[8.3056640625,47.24987305653909],[8.295021057128906,47.26268916206698],[8.300514221191406,47.26991141830738],[8.278884887695312,47.28225686421767],[8.259315490722656,47.285983225286174],[8.243522644042969,47.280859411143915],[8.240432739257812,47.27130916053537],[8.228759765625,47.27270686584952],[8.219146728515625,47.25336866567523],[8.204727172851562,47.245444953748034],[8.203353881835938,47.22679624955806],[8.180007934570312,47.22143353240336],[8.171768188476562,47.2279619858493],[8.155975341796875,47.23961793870555],[8.175888061523436,47.24218190428504],[8.17657470703125,47.25406775981567],[8.136062622070312,47.24730946320093],[8.12164306640625,47.24218190428504],[8.10791015625,47.2447457457832],[8.097267150878906,47.259427174956194],[8.077354431152344,47.2603591917818],[8.059844970703125,47.25569894358661],[8.062591552734375,47.24614415248379],[8.016586303710938,47.242881146090085],[8.015899658203125,47.258961160390896],[7.997016906738281,47.2796948387185],[7.951698303222655,47.274337475394645],[7.960968017578125,47.25430078914495],[7.933845520019531,47.237053849043896],[7.911529541015624,47.24381345414034],[7.859344482421875,47.23425651880584],[7.83977508544922,47.23425651880584],[7.826042175292968,47.24427960201268],[7.828102111816407,47.25966018070071],[7.82398223876953,47.26548499105541],[7.8408050537109375,47.273405704663965],[7.848701477050781,47.28551744450745],[7.860374450683594,47.30461109337307],[7.871704101562499,47.31136207506936],[7.8888702392578125,47.31136207506936],[7.897453308105469,47.31904317780638],[7.895393371582031,47.327653995607086],[7.908439636230469,47.340451266106996],[7.9259490966796875,47.332773275955894],[7.94757843017578,47.331609846720866],[7.94757843017578,47.316715688820764],[8.007316589355467,47.33905535093827],[8.004913330078125,47.34533667855891],[8.011093139648438,47.35719936945847],[8.024139404296875,47.36719917429931],[8.032722473144531,47.38393878966209],[8.026885986328125,47.39602520707679],[8.010749816894531,47.3955603961201],[8.004570007324219,47.40671472747142],[7.975730895996094,47.41507892620099],[7.9657745361328125,47.42181578692778],[7.985343933105469,47.425764580393924],[7.971954345703124,47.46105827584221],[7.957534790039062,47.457344265054225],[7.940711975097656,47.46221885041022],[7.946891784667968,47.48403288391224],[7.907066345214844,47.48588897929538],[7.8936767578125,47.50653361720931],[7.873420715332031,47.51325876844644],[7.875480651855468,47.52253342509336],[7.865180969238281,47.51975120023913],[7.856254577636718,47.533660849056794],[7.833251953125,47.5325018525392],[7.834281921386719,47.51465007145751],[7.789649963378906,47.49377665301097],[7.789649963378906,47.518128167602484],[7.7515411376953125,47.52461999690649],[7.731285095214843,47.53203824675999],[7.708969116210937,47.54015075619555],[7.740898132324219,47.54362716173679],[7.761497497558593,47.54895720250044],[7.781410217285156,47.55289644950155],[7.797546386718749,47.55915229204993],[7.805442810058593,47.56563904359584],[7.814369201660155,47.575136052077276],[7.819175720214843,47.58648387645128],[7.8325653076171875,47.586715439092906],[7.843208312988281,47.581620824334166],[7.859344482421875,47.58602074809481],[7.8847503662109375,47.58764167941513],[7.903633117675781,47.58092606572345],[7.911872863769532,47.56749225365282],[7.90740966796875,47.55776216936179],[7.917709350585938,47.545712894408624],[7.929382324218749,47.54640812019053],[7.941741943359374,47.54432241518175],[7.9520416259765625,47.54965238525127],[7.9561614990234375,47.55683540041267],[7.9767608642578125,47.55544521625339],[7.997360229492187,47.556603705614094],[8.019676208496094,47.54965238525127],[8.049888610839844,47.55637200979099],[8.058815002441406,47.56285910557121],[8.072891235351562,47.56355410390809],[8.086967468261719,47.557067094186735],[8.100700378417969,47.56216409801383],[8.105506896972656,47.57976811421671],[8.113059997558594,47.583473468887405],[8.133659362792969,47.58301031389572],[8.138809204101562,47.59042030203756],[8.15185546875,47.59551406038282],[8.166275024414062,47.5941249027327],[8.177261352539062,47.6017648134425],[8.193740844726562,47.616346999837226],[8.2012939453125,47.62120682516921],[8.219490051269531,47.61958693358351],[8.223953247070312,47.61102381568743],[8.222923278808594,47.604774168947614]]],"terms_text":"AGIS OF2016","best":true},{"id":"Basel-Landschaft-2015","name":"Kanton Basel-Landschaft 10cm (2015)","type":"tms","template":"https://mapproxy.osm.ch/tiles/KTBASELLANDSCHAFT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[18,21],"polygon":[[[7.370281219482422,47.413684985326796],[7.357578277587891,47.41507892620101],[7.357921600341797,47.41827323486739],[7.353544235229492,47.4196089792119],[7.344875335693359,47.42402250214274],[7.339725494384765,47.42971307765559],[7.332687377929687,47.430235650685475],[7.32685089111328,47.4319194618196],[7.325280543317693,47.43489176778178],[7.33050406703179,47.44175856152086],[7.338990092194756,47.44109169292469],[7.344964876980962,47.43607806019703],[7.352656881264292,47.43435807026775],[7.38119797480828,47.432081698142134],[7.375988960266113,47.414309359238985],[7.378145456314087,47.41399717320828],[7.382040023803711,47.41330745332341],[7.388391494750976,47.41397539271845],[7.413708184603623,47.410929293287566],[7.420743520414262,47.411098781635985],[7.427483310496426,47.41448047082256],[7.438105529405026,47.412739349590474],[7.448396898794484,47.41507114537187],[7.455576414208223,47.42792319548619],[7.45061852232364,47.43534476535272],[7.437842682352891,47.446323188615104],[7.425422575234655,47.443283894442736],[7.420904049355535,47.44594415975335],[7.422417620777747,47.45071647996838],[7.428795928789581,47.45387944195848],[7.430028776685507,47.459491697398036],[7.445765194338128,47.46197276972992],[7.44717015944249,47.456958090215814],[7.456512189239691,47.44925575541638],[7.492356675875099,47.458972279610066],[7.530679075390223,47.46118857622267],[7.527445320030451,47.473906165741866],[7.536326693749955,47.48383279861684],[7.536231113003725,47.49105266753894],[7.532603895549507,47.490968962664795],[7.531789123586811,47.49739885661967],[7.520038351186771,47.49678264400428],[7.512226152318425,47.49891674929323],[7.509348758631863,47.508884893812876],[7.499082452238831,47.51627805213703],[7.497870355425969,47.52124757864722],[7.502278119030558,47.514906577969604],[7.517459288006065,47.51728104695845],[7.522200236749534,47.514091442409054],[7.530955756497733,47.52904526885427],[7.519353655277215,47.53471778813415],[7.510751927105658,47.528989768842564],[7.50229842095598,47.52840455858729],[7.4980383403841,47.536152181750076],[7.505454651706732,47.54438188661593],[7.516758242758337,47.545408295649786],[7.527317399933993,47.552778846515565],[7.554658254426867,47.564368052237306],[7.5645783501094,47.55703599040843],[7.561243624111692,47.55172275211291],[7.558752685660356,47.55235329499035],[7.555882119169953,47.54433555917895],[7.564785321950861,47.54568625396918],[7.587263056821628,47.54190064304111],[7.582688476068778,47.53246814131337],[7.589482524394103,47.5279230654027],[7.590248428005343,47.51978966346127],[7.594781326929009,47.51929395578897],[7.613780785019665,47.53925099543145],[7.622303281783164,47.53977428916004],[7.622854488041502,47.550040256825795],[7.617740918118178,47.554366555487356],[7.617617220103555,47.558648485827725],[7.632727781497729,47.5614887674157],[7.639973682410965,47.55816478484801],[7.648995462809379,47.548295861439875],[7.661308760240334,47.544832242956765],[7.665860164458853,47.53745814872834],[7.674674254363578,47.5337535789565],[7.694938989531916,47.532496041115465],[7.71346844906592,47.53978344629896],[7.715956243413761,47.53582195507857],[7.723622825374551,47.536754165368905],[7.727157067196862,47.53293048764033],[7.733221863174538,47.53275465944404],[7.737974130690588,47.52732498381306],[7.749022330706917,47.5249849998809],[7.757861753102653,47.52605097450287],[7.787633628417415,47.52011695778467],[7.790143521321244,47.51864117486466],[7.788870069574476,47.50682929074843],[7.792799480290271,47.500684271209245],[7.786625359342518,47.49312139201968],[7.798890147748131,47.49565149600841],[7.798162871694108,47.49939947973339],[7.799400121334925,47.497477088945935],[7.807418124234862,47.4971384859743],[7.814709929059118,47.504801278976316],[7.831976267472122,47.51473657456054],[7.833207588232065,47.53382387257594],[7.846527268275818,47.53266095290337],[7.852330295179702,47.53523506225097],[7.862569292788096,47.52692027402488],[7.86395674074442,47.519309183202445],[7.876658649367283,47.52269034821798],[7.87567113137545,47.51319304945735],[7.893993798731052,47.50605656803392],[7.904769180395594,47.49217505264052],[7.904821911502771,47.48490926161113],[7.93328835504665,47.48140776210853],[7.947015241408695,47.48488995686335],[7.940027875634228,47.462021295570224],[7.948854362289874,47.46377967418039],[7.957614193951437,47.45880646812721],[7.957849013566705,47.451279351685564],[7.946784554043733,47.44319336966537],[7.950032053627354,47.431716361052416],[7.96183169437885,47.421834282667845],[7.956570351591289,47.41968057428149],[7.955037646053525,47.415605646331336],[7.948388855309641,47.4162657867356],[7.934927870271696,47.41176694218953],[7.936722434714782,47.408057452805856],[7.932661510641391,47.40527495151619],[7.909737672400531,47.398520997340924],[7.890221593189976,47.407141074214024],[7.883331964118422,47.40609724771633],[7.883443085719068,47.4012049891245],[7.877702761222016,47.401257097623],[7.869136696167237,47.3955142728722],[7.879434713089799,47.38799354849815],[7.878812180597903,47.38351047538804],[7.862650230995195,47.38198499163919],[7.840119046365023,47.374763282921705],[7.830547227518145,47.36512144155488],[7.80216648325237,47.36109584064414],[7.796366151294341,47.3534705803715],[7.793560892325092,47.33905227137494],[7.78528803737905,47.3378822997136],[7.768963133383802,47.33891408469915],[7.766419194330703,47.342734660857005],[7.751518928544542,47.3443274446774],[7.734153146629586,47.35776074638933],[7.727913718160677,47.36885889855421],[7.701953574259492,47.37244716296033],[7.644203220263186,47.36720838530677],[7.641761060331779,47.38046937860509],[7.635580022356337,47.38059279713257],[7.633316986492583,47.38291397270416],[7.633305398225418,47.38533959871929],[7.637251158279386,47.38606854199808],[7.63272275093214,47.41003108104519],[7.664054730400831,47.41001995588381],[7.679802017668389,47.41751395224505],[7.686578998003315,47.43366406703297],[7.682972441800632,47.43872228466388],[7.684853783500164,47.447843589969715],[7.692273418589347,47.45421309996921],[7.698831030331891,47.45585888435835],[7.699930658071183,47.46190517358485],[7.709877972706822,47.469384739707586],[7.699760966314013,47.48063247960835],[7.668326578902932,47.48634665620256],[7.666120855554305,47.49686816039971],[7.65217109717027,47.49581439933043],[7.648646287658441,47.49183004211102],[7.655389581170213,47.49020559719241],[7.650513795302598,47.48826095607083],[7.655925875394832,47.48739459757455],[7.644422678687097,47.485637798180356],[7.640965961473804,47.482734093980326],[7.607299799570857,47.48939839412024],[7.608850381582776,47.48352506892989],[7.605631268762133,47.47935909729055],[7.608148977008936,47.475213682276376],[7.604494899927722,47.47044546774548],[7.618872436050056,47.4674530520825],[7.626072253389216,47.462913883669614],[7.62217338539308,47.46195224188912],[7.616464591762502,47.445234574416695],[7.615798850305441,47.432747890966844],[7.592069133423196,47.43271179535717],[7.581206884670679,47.42878068945942],[7.578423275099778,47.434906655087865],[7.568904367023134,47.43689695884281],[7.56829539909203,47.42233486107083],[7.58074128785892,47.414703988151935],[7.525235194936931,47.41163289737562],[7.531172340312734,47.40352507464003],[7.518616677418122,47.38822295597742],[7.511295677347134,47.38974369796625],[7.502255661148456,47.384806980223004],[7.492327480628366,47.385231761698726],[7.478410241257615,47.39055778320416],[7.47746817801916,47.401277162725364],[7.464484018734026,47.40251498235377],[7.460919593518167,47.40068414452088],[7.450020783333588,47.40392739156406],[7.44951323519806,47.39975827367453],[7.443401098004909,47.40231427489849],[7.441311347159463,47.40017886074712],[7.443566657511773,47.38890284041263],[7.437324174770898,47.3808884773088],[7.411692544769116,47.38057235919037],[7.416276198506335,47.384788794341716],[7.414494030814171,47.39429988358522],[7.398935569419335,47.39683906243558],[7.395920463999715,47.40338304393273],[7.388693876865087,47.403019088497395],[7.384054886906365,47.4123601395877],[7.379679679870605,47.4128137535428],[7.375844120979309,47.41401169352981],[7.370281219482422,47.413684985326796]]],"terms_url":"http://www.geo.bl.ch/fileadmin/user_upload/Geodaten/Nutzungsbedingungen_GBD_BL_V3p1.pdf","terms_text":"Geodaten des Kantons Basel-Landschaft 2015","best":true},{"id":"KTBASELSTADT2015","name":"Kanton Basel-Stadt 2015","type":"tms","template":"https://mapproxy.osm.ch/tiles/KTBASELSTADT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[8,21],"polygon":[[[7.492,47.4817],[7.492,47.6342],[7.784,47.6342],[7.784,47.4817],[7.492,47.4817]]],"terms_text":"Kanton Basel-Stadt OF 2015"},{"id":"KTBASELSTADT2017","name":"Kanton Basel-Stadt 2017","type":"tms","template":"https://mapproxy.osm.ch/tiles/KTBASELSTADT2017/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2017-01-01T00:00:00.000Z","startDate":"2017-01-01T00:00:00.000Z","scaleExtent":[8,21],"polygon":[[[7.6713752,47.5952248],[7.6799583,47.6007811],[7.6845073,47.6018228],[7.6943779,47.601707],[7.6939487,47.5966718],[7.6870823,47.5935462],[7.6788425,47.5871208],[7.685709,47.585384],[7.6890564,47.5761205],[7.6941204,47.573399],[7.6924038,47.5669132],[7.6847005,47.5617009],[7.6642513,47.5616429],[7.6487159,47.5568934],[7.6303482,47.558689],[7.6235675,47.5566617],[7.6278591,47.5514483],[7.6273763,47.5365801],[7.6183319,47.5366163],[7.6133537,47.5326179],[7.5996208,47.5191137],[7.5850296,47.5191717],[7.5840854,47.5263589],[7.5771331,47.5316327],[7.581253,47.5398612],[7.5718975,47.5414835],[7.553873,47.5414835],[7.5537872,47.5512166],[7.5565338,47.5582836],[7.5537014,47.5603108],[7.5537872,47.5747308],[7.5643444,47.5812157],[7.5793647,47.579884],[7.583313,47.5901889],[7.5856304,47.5923306],[7.5920677,47.5923885],[7.598505,47.5907098],[7.609148,47.5864261],[7.6092338,47.5810999],[7.6191043,47.580463],[7.6368713,47.593141],[7.6378154,47.595572],[7.6416778,47.5988711],[7.6452827,47.6002602],[7.664938,47.5961798],[7.6713752,47.5952248]]],"terms_text":"Kanton Basel-Stadt OF 2017","best":true},{"id":"Solothurn-sogis2014-tms","name":"Kanton Solothurn (SOGIS)","type":"tms","template":"https://mapproxy.osm.ch/tiles/sogis2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2017-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[15,19],"polygon":[[[7.9559502,47.4716195],[7.9823893,47.4715536],[7.9823893,47.453533],[7.9955263,47.453533],[7.995209,47.4174733],[8.0218003,47.4174304],[8.0215465,47.3993483],[8.0345565,47.3992624],[8.0346835,47.3902835],[8.0478839,47.3902236],[8.0476936,47.3722351],[8.0345565,47.372321],[8.0343661,47.3543954],[8.0211657,47.3542664],[8.0207214,47.3273881],[7.9944474,47.3274741],[7.994257,47.318569],[7.9677291,47.3186551],[7.9676656,47.3096624],[7.9412227,47.3097751],[7.9413282,47.3277752],[7.9148637,47.3278613],[7.9146733,47.3098775],[7.9015998,47.3100497],[7.9014015,47.3009748],[7.8750084,47.3010986],[7.8750084,47.2922321],[7.861655,47.292122],[7.8615371,47.2740879],[7.8483207,47.2741634],[7.8482988,47.2652268],[7.8350156,47.2651964],[7.8350156,47.2562425],[7.7953454,47.2563643],[7.7953005,47.2474089],[7.7292435,47.2475612],[7.7292884,47.2565166],[7.7162295,47.2566689],[7.7161847,47.2655923],[7.7030361,47.2655923],[7.7030361,47.2746055],[7.6897529,47.2746664],[7.6898875,47.2836781],[7.6634108,47.2837085],[7.6633211,47.2746968],[7.6105472,47.2747577],[7.6104126,47.2478658],[7.6235163,47.2477691],[7.6235612,47.2387871],[7.6498584,47.2387566],[7.649993,47.2297678],[7.6499025,47.2208313],[7.6630766,47.220732],[7.6631044,47.2117803],[7.6629675,47.2027317],[7.6761677,47.2026985],[7.6762267,47.1937182],[7.6893753,47.1936878],[7.6892406,47.1757237],[7.7024341,47.1756017],[7.7023444,47.14869],[7.6626742,47.1488121],[7.6628088,47.1397774],[7.6363322,47.1398995],[7.6364668,47.14869],[7.5967967,47.1489341],[7.5968415,47.1399606],[7.5704098,47.1399911],[7.5704216,47.1579174],[7.5573628,47.1579479],[7.5573179,47.1488843],[7.5442142,47.1489453],[7.5441693,47.1399107],[7.5309759,47.1399107],[7.5309535,47.1309652],[7.5176703,47.1309652],[7.5176478,47.121959],[7.5176927,47.1129198],[7.4913057,47.1130114],[7.4913506,47.1040318],[7.478202,47.1040013],[7.4781282,47.0770534],[7.4649349,47.0770839],[7.4649797,47.0680676],[7.4255179,47.0680065],[7.4254282,47.0860069],[7.372789,47.0859763],[7.3728787,47.1040318],[7.3595955,47.1040318],[7.3595506,47.1309967],[7.4122796,47.1309967],[7.4122347,47.1490064],[7.4253833,47.1490064],[7.4255179,47.1580089],[7.3726992,47.157965],[7.3726992,47.1849769],[7.3462674,47.1849159],[7.3463572,47.2028721],[7.333074,47.2029026],[7.333074,47.2209598],[7.346142,47.2209598],[7.346142,47.2299135],[7.3725646,47.2299135],[7.3726992,47.2389023],[7.3989964,47.2389632],[7.399131,47.2479201],[7.4122796,47.2479201],[7.4122796,47.2659206],[7.45186,47.2658901],[7.4519497,47.2749033],[7.4650534,47.2749337],[7.4650983,47.2838541],[7.4782918,47.2838541],[7.4783367,47.2929251],[7.504596,47.2928845],[7.5047307,47.3018322],[7.5312002,47.3018119],[7.53129,47.3197941],[7.5444835,47.3198549],[7.5445283,47.3287981],[7.5576769,47.3288285],[7.5576769,47.3378614],[7.5312451,47.3378614],[7.5313349,47.3558617],[7.5180068,47.3558313],[7.5180965,47.3648291],[7.3987991,47.3648373],[7.3988853,47.3918171],[7.3856422,47.391813],[7.3856361,47.4008028],[7.3723427,47.4007987],[7.3723427,47.4097769],[7.3458375,47.4097769],[7.3458375,47.4187804],[7.3192515,47.4187804],[7.3192515,47.4457788],[7.4121035,47.4457788],[7.4121035,47.4907816],[7.4253513,47.4907816],[7.4253513,47.4998066],[7.4385572,47.4998066],[7.4385572,47.5087647],[7.4917722,47.5087647],[7.4917832,47.6346827],[7.7844981,47.6342779],[7.7841548,47.5712255],[7.8107408,47.5711386],[7.8107408,47.5621621],[7.8239482,47.5620566],[7.8238715,47.5441362],[7.8636799,47.5439699],[7.8636317,47.5349751],[7.8767918,47.5349474],[7.8767504,47.5259917],[7.8900971,47.5259637],[7.8900555,47.5169501],[7.9031858,47.5169225],[7.9031025,47.4988609],[7.9164877,47.4988327],[7.9164458,47.4897557],[7.9561223,47.4896722],[7.9559502,47.4716195]]],"terms_text":"Orthofoto WMS Solothurn","best":true,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAIVBMVEX///+LKCbMAABycnL+/v7v7+9sbGz39/fz8/Pw8PD8/Pz60siYAAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AIGAsXN84mS+sAAAA4SURBVAjXY2AUBAMBBkYlMCCXwcwABgZYGCwGIJo5AMQGAjYgLgYxLICY05iBwRisjsvY2IGBAQAGpQmjMKkg/wAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wOC0yNFQxMToyMzo1NS0wNDowMLEFqzIAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDgtMjRUMTE6MjM6NTUtMDQ6MDDAWBOOAAAAAElFTkSuQmCC"},{"id":"Solothurn-infrared-SOGIS","name":"Kanton Solothurn Infrarot (SOGIS)","type":"wms","template":"http://geoweb.so.ch/wms/sogis_orthofoto.wms?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Orthofoto_CIR_SO&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","endDate":"2017-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[15,19],"polygon":[[[7.5704216,47.1579174],[7.5573628,47.1579479],[7.5573179,47.1488843],[7.5442142,47.1489453],[7.5441693,47.1399107],[7.5309759,47.1399107],[7.530931,47.121959],[7.5176478,47.121959],[7.5176927,47.1129198],[7.4913057,47.1130114],[7.4913506,47.1040318],[7.478202,47.1040013],[7.4781572,47.094959],[7.4914404,47.0949896],[7.4913955,47.0770227],[7.4781572,47.0770533],[7.478202,47.068037],[7.4255179,47.0680065],[7.4254282,47.0860069],[7.372789,47.0859763],[7.3728787,47.1040318],[7.3595955,47.1040318],[7.3595506,47.1309967],[7.4122796,47.1309967],[7.4122347,47.1490064],[7.4253833,47.1490064],[7.4255179,47.1580089],[7.399131,47.1580394],[7.399131,47.1490064],[7.3726992,47.1489758],[7.3726992,47.1849769],[7.3462674,47.1849159],[7.3463572,47.1939124],[7.333074,47.1939429],[7.333074,47.2299135],[7.3725646,47.2299135],[7.3726992,47.2389023],[7.3989964,47.2389632],[7.399131,47.2479201],[7.4122796,47.2479201],[7.4122796,47.2659206],[7.45186,47.2658901],[7.4519497,47.2749033],[7.4650534,47.2749337],[7.4650983,47.2838541],[7.4782918,47.2838541],[7.4783367,47.2929251],[7.4914852,47.2928946],[7.4916199,47.3018423],[7.5312002,47.3018119],[7.53129,47.3197941],[7.5444835,47.3198549],[7.5445283,47.3287981],[7.5576769,47.3288285],[7.5576769,47.3378614],[7.5312451,47.3378614],[7.5313349,47.3558617],[7.5180068,47.3558313],[7.5180965,47.3648291],[7.4386216,47.3649203],[7.4386665,47.3738862],[7.4253833,47.373947],[7.4254282,47.4008052],[7.3855786,47.4008963],[7.3856683,47.4097954],[7.3591468,47.4097954],[7.3591468,47.418784],[7.3723851,47.4188447],[7.3724748,47.4368174],[7.3857132,47.4368174],[7.3857132,47.4410365],[7.3956307,47.4401563],[7.3963039,47.4425844],[7.4076125,47.4410972],[7.4079267,47.4422505],[7.403125,47.442463],[7.3973809,47.4433128],[7.3983233,47.4458318],[7.412145,47.4458318],[7.4122796,47.4547839],[7.4386665,47.454875],[7.4388012,47.47053],[7.450065,47.4694076],[7.450065,47.4722287],[7.4464749,47.4722287],[7.4464749,47.473806],[7.4429297,47.473897],[7.4428848,47.4755349],[7.439205,47.4755956],[7.439205,47.4772032],[7.4355701,47.4772941],[7.4354803,47.4789926],[7.4173954,47.4789623],[7.4174403,47.4857254],[7.4209855,47.4857254],[7.4210752,47.4908199],[7.4276271,47.4907289],[7.4285246,47.4934882],[7.4309928,47.4964293],[7.4348521,47.4988852],[7.4418976,47.4955197],[7.4466544,47.4945495],[7.4501098,47.4917599],[7.4508727,47.4906986],[7.4645149,47.4907289],[7.4645598,47.4890308],[7.4681947,47.4890005],[7.4681947,47.4856648],[7.4718746,47.4857254],[7.4719194,47.4823288],[7.4826896,47.4823895],[7.4826447,47.4838755],[7.4862348,47.4839665],[7.4863694,47.4856648],[7.4899146,47.4856648],[7.4900043,47.4906986],[7.4996975,47.4907289],[7.4996526,47.491396],[7.4917545,47.4919418],[7.4917545,47.4951256],[7.4982166,47.494792],[7.4988897,47.4958533],[7.4956587,47.4962777],[7.4917096,47.4962474],[7.4917994,47.4997341],[7.5050377,47.4997038],[7.5050377,47.5087377],[7.5447976,47.5087074],[7.5447426,47.4548204],[7.4916868,47.4546917],[7.4917503,47.445808],[7.4652859,47.4457651],[7.4652224,47.409829],[7.4915599,47.409786],[7.4917503,47.3919161],[7.5048873,47.3918302],[7.5048873,47.40068],[7.5182147,47.4007659],[7.5183416,47.4187616],[7.5579431,47.4187187],[7.5581335,47.445808],[7.5845344,47.4457222],[7.5844075,47.4366653],[7.6109354,47.4366224],[7.6109988,47.4637025],[7.5976714,47.4637025],[7.5979253,47.4996448],[7.6243263,47.4996877],[7.6244532,47.4905972],[7.6377806,47.4905543],[7.6378441,47.4996019],[7.6775724,47.4994733],[7.6774455,47.4904686],[7.7038465,47.4904257],[7.7039099,47.4814623],[7.7171104,47.4812907],[7.7171104,47.45452],[7.7039734,47.45452],[7.7038465,47.4455934],[7.6904556,47.4455076],[7.6903287,47.4095713],[7.6771282,47.4094854],[7.6771282,47.40068],[7.6506638,47.40068],[7.6504734,47.3736534],[7.6770647,47.3735674],[7.6770647,47.3825062],[7.7166661,47.3825062],[7.7167931,47.3734385],[7.7430671,47.3733955],[7.7430671,47.3553843],[7.7562041,47.3553413],[7.7563311,47.3463979],[7.7826051,47.3462689],[7.7829224,47.3643262],[7.7961229,47.3642832],[7.7961863,47.3732666],[7.8226508,47.3731376],[7.8227142,47.3822914],[7.8491152,47.3821195],[7.8492421,47.3910568],[7.8625061,47.3909709],[7.862633,47.4090559],[7.8758969,47.40897],[7.8760239,47.4180316],[7.9024248,47.4179457],[7.9024248,47.40897],[7.9288892,47.4087982],[7.9291431,47.4178169],[7.9421532,47.4176881],[7.9426609,47.4627586],[7.9559248,47.462587],[7.9561152,47.4716394],[7.9823893,47.4715536],[7.9823893,47.453533],[7.9955263,47.453533],[7.995209,47.4174733],[8.0218003,47.4174304],[8.0215465,47.3993483],[8.0345565,47.3992624],[8.0346835,47.3902835],[8.0478839,47.3901546],[8.0476936,47.3722351],[8.0345565,47.372321],[8.0343661,47.3543954],[8.0211657,47.3542664],[8.0207214,47.3273881],[7.9944474,47.3274741],[7.994257,47.318569],[7.9677291,47.3186551],[7.9676656,47.3096624],[7.9412012,47.3099206],[7.9413282,47.3277752],[7.9148637,47.3278613],[7.9146733,47.3098775],[7.9015998,47.3100497],[7.9014015,47.3009748],[7.8750084,47.3010986],[7.8750084,47.2922321],[7.861655,47.292122],[7.8615371,47.2740879],[7.8484334,47.2741488],[7.8482988,47.2652268],[7.8350156,47.2651964],[7.8350156,47.2562425],[7.7953454,47.2563643],[7.7953005,47.2474089],[7.7292435,47.2475612],[7.7292884,47.2565166],[7.7162295,47.2566689],[7.7161847,47.2655923],[7.7030361,47.2655923],[7.7030361,47.2746055],[7.6897529,47.2746664],[7.6898875,47.2836781],[7.6634108,47.2837085],[7.6633211,47.2746968],[7.6105472,47.2747577],[7.6104126,47.2478658],[7.6235163,47.2476526],[7.6235612,47.2387871],[7.6498584,47.2387566],[7.649993,47.2297678],[7.6630518,47.2297068],[7.6631044,47.2117803],[7.6762081,47.2116888],[7.6762267,47.1937182],[7.6893753,47.1936878],[7.6892406,47.1757237],[7.7024341,47.1756017],[7.702479,47.1666326],[7.7156724,47.1666326],[7.7155827,47.1576926],[7.7023892,47.1576621],[7.7023444,47.14869],[7.6626742,47.1488121],[7.6628088,47.1397774],[7.6363322,47.1398995],[7.6364668,47.14869],[7.5967967,47.1489341],[7.5968415,47.1399606],[7.5704098,47.1399911],[7.5704216,47.1579174]]],"terms_text":"Orthofoto WMS Solothurn","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAIVBMVEX///+LKCbMAABycnL+/v7v7+9sbGz39/fz8/Pw8PD8/Pz60siYAAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AIGAsXN84mS+sAAAA4SURBVAjXY2AUBAMBBkYlMCCXwcwABgZYGCwGIJo5AMQGAjYgLgYxLICY05iBwRisjsvY2IGBAQAGpQmjMKkg/wAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wOC0yNFQxMToyMzo1NS0wNDowMLEFqzIAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDgtMjRUMTE6MjM6NTUtMDQ6MDDAWBOOAAAAAElFTkSuQmCC"},{"id":"KTTHURGAU2017","name":"Kanton Thurgau OF 2017","type":"tms","template":"https://mapproxy.osm.ch/tiles/KTTHURGAU2017/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[8,21],"polygon":[[[8.63768410076,47.7004145356],[8.78327839646,47.69879895418],[8.78303977274,47.68533252804],[8.87027412213,47.68426691888],[8.8699714813,47.67089514045],[8.89900814897,47.67047199109],[8.89866777324,47.65698230742],[8.92770444091,47.65661195321],[8.92828046137,47.67015462681],[8.95726476355,47.66973147144],[8.95773605301,47.68327074156],[9.19060541482,47.6799391377],[9.1902650391,47.66645190099],[9.21922315852,47.6660287156],[9.21898751379,47.65255552096],[9.24784090222,47.65209694793],[9.24747434375,47.63863780005],[9.30570477557,47.63764983607],[9.30525966885,47.62420461255],[9.33416542278,47.62371049645],[9.33348467133,47.59673879302],[9.39150564117,47.59576769355],[9.3911390827,47.58234701941],[9.42007101938,47.58176420165],[9.41860478548,47.54139270755],[9.44753672216,47.5408447841],[9.44717016368,47.52730395336],[9.47604973486,47.52680892203],[9.47518570418,47.49985802607],[9.5041438236,47.49934504674],[9.50309651368,47.47241544181],[9.41596032792,47.47391975877],[9.41554140395,47.46045016443],[9.35759898235,47.4614060707],[9.35817500281,47.47498160364],[9.32895505591,47.47533554716],[9.32864086293,47.46188401733],[9.18361462107,47.46420288184],[9.18411209329,47.47768921094],[9.15491832913,47.47809622481],[9.15465650165,47.4646277009],[9.0673632194,47.46583133624],[9.06717994017,47.45234196418],[9.0960856941,47.45193475084],[9.09582386661,47.43853036098],[9.06663010246,47.43883142176],[9.06642064047,47.42537055101],[9.00829493964,47.42620309948],[9.00714289872,47.385729558],[8.97810623105,47.38615501083],[8.97739929685,47.3591319418],[8.91940450976,47.35989459356],[8.92032090594,47.38697045248],[8.89136278652,47.38725408141],[8.89285520316,47.44116901155],[8.86397563198,47.44148776574],[8.86604406908,47.52251256102],[8.80783982,47.52316676216],[8.80893949543,47.56372896753],[8.77985046226,47.56402931121],[8.78024320348,47.57750766919],[8.7220913199,47.57814352175],[8.72337427456,47.63212747913],[8.66519620823,47.63272738003],[8.66579841143,47.65980396746],[8.63673556102,47.65999795099],[8.63768410076,47.7004145356]]],"terms_text":"Kanton Thurgau OF 2017","best":true},{"id":"KTZUERICH2015","name":"Kanton Zürich 2015 10cm","type":"tms","template":"https://mapproxy.osm.ch/tiles/KTZUERICH2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2015-01-01T00:00:00.000Z","startDate":"2014-01-01T00:00:00.000Z","scaleExtent":[8,21],"polygon":[[[8.807601928710938,47.66608099332474],[8.808631896972656,47.65475043477393],[8.830604553222656,47.648506014952225],[8.805885314941406,47.597597727711346],[8.749580383300781,47.61565270219988],[8.751983642578125,47.59505101193038],[8.807945251464844,47.585789182379905],[8.811721801757812,47.57467282332527],[8.840904235839844,47.57467282332527],[8.854637145996094,47.56216409801383],[8.8330078125,47.55382328811835],[8.845024108886719,47.53458802782819],[8.899612426757812,47.52786561031842],[8.895835876464844,47.491224888201955],[8.902702331542969,47.48588897929538],[8.887252807617188,47.475911695481756],[8.911285400390625,47.43969913094723],[8.934288024902344,47.43807362350206],[8.935317993164062,47.43017758727173],[8.917121887207031,47.42808726171425],[8.909912109375,47.404855836246135],[8.944587707519531,47.38905261221537],[8.945274353027344,47.379521907289295],[8.963127136230469,47.357664518690434],[8.973083496093748,47.35580389715929],[8.989906311035156,47.31857768821123],[8.973426818847656,47.30367985581531],[8.9593505859375,47.300653220457775],[8.941154479980469,47.2873805430142],[8.950080871582031,47.28458587064588],[8.940467834472656,47.259194168186234],[8.876266479492188,47.24847474828181],[8.876609802246092,47.243114224640834],[8.850173950195312,47.23961793870555],[8.849830627441406,47.247076403108416],[8.825111389160156,47.24824169331652],[8.800048828125,47.24031721435106],[8.804855346679688,47.23425651880584],[8.815155029296875,47.217702626593784],[8.793525695800781,47.21886856286133],[8.71490478515625,47.20021050593422],[8.685722351074219,47.18154588528182],[8.697395324707031,47.163108130899104],[8.660659790039062,47.15633823511178],[8.6572265625,47.16684287656919],[8.618087768554688,47.172444502751944],[8.622550964355469,47.17991241867412],[8.607101440429688,47.201376826785406],[8.595085144042969,47.19834433924206],[8.575859069824219,47.21513747655813],[8.541183471679688,47.2186353776589],[8.471488952636719,47.2053421258966],[8.441619873046875,47.22120035848172],[8.417243957519531,47.22120035848172],[8.383941650390625,47.292270864380086],[8.422050476074219,47.302282968719936],[8.442306518554688,47.32439601339355],[8.413810729980469,47.32299967378833],[8.408660888671875,47.33067908487908],[8.378448486328125,47.39718721653071],[8.360939025878906,47.39695481668995],[8.359222412109375,47.4053205652024],[8.379135131835938,47.40764414848437],[8.377418518066406,47.41624051540972],[8.384284973144531,47.42274494145051],[8.372611999511719,47.42808726171425],[8.372955322265625,47.437376962080776],[8.379478454589844,47.45037978769006],[8.36402893066406,47.46198673754625],[8.352012634277344,47.5079250985124],[8.373985290527344,47.517200697839414],[8.392181396484375,47.5366741201253],[8.417587280273436,47.56610235225701],[8.430290222167967,47.5693453981427],[8.491744995117188,47.581620824334166],[8.487625122070312,47.58648387645128],[8.463935852050781,47.58301031389572],[8.453292846679688,47.60315376826432],[8.479385375976562,47.617504142079596],[8.505821228027344,47.61958693358351],[8.513717651367188,47.635783590864854],[8.542213439941406,47.632776019724375],[8.545646667480469,47.627685889602006],[8.564186096191406,47.6256034207548],[8.566932678222656,47.61935551640258],[8.576202392578125,47.613569753973955],[8.564872741699219,47.60037582174319],[8.535346984863281,47.586715439092906],[8.550109863281248,47.5714301073211],[8.555259704589844,47.55498181333744],[8.581008911132812,47.59551406038282],[8.598861694335936,47.61449551898437],[8.59130859375,47.64642437575518],[8.609848022460938,47.65521295468833],[8.620834350585938,47.646886969413],[8.618431091308594,47.65660048985082],[8.602981567382812,47.666312203609145],[8.610877990722656,47.67856488312544],[8.62323760986328,47.67856488312544],[8.621864318847656,47.69312564683551],[8.64898681640625,47.697516190510555],[8.667526245117188,47.68665469810477],[8.671646118164062,47.67602211074509],[8.692245483398438,47.65197522925437],[8.734817504882812,47.64526787368664],[8.777389526367188,47.65313158281113],[8.785629272460938,47.667930646923494],[8.807601928710938,47.66608099332474]]],"terms_text":"Kanton Zürich OF 2015","best":true},{"id":"kartverket-friluft","name":"Kartverket Hiking Trails","type":"wms","template":"https://wms.geonorge.no/skwms1/wms.friluftsruter2?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Fotrute&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[6,24],"polygon":[[[31.904253,70.4368136],[28.4765186,71.3289643],[23.6865015,71.2514263],[16.8090601,70.0730823],[11.1620655,67.5253903],[9.975542,64.811576],[4.2187061,62.1449966],[4.3725367,59.1871966],[6.1743055,57.8915032],[7.932118,57.7393554],[10.777577,58.8649103],[11.7224012,58.762509],[12.722157,60.1141506],[13.0517469,61.3493518],[12.5243921,63.6169922],[14.2382593,63.9856094],[15.1171656,65.9016624],[18.6987085,68.3749083],[20.0610132,68.2612583],[21.0058375,68.7841518],[25.2465601,68.3506025],[26.9384546,69.8472011],[28.7621851,69.6112133],[28.5864039,68.8556004],[31.069314,69.5191547],[31.904253,70.4368136]]],"terms_url":"https://kartverket.no/geodataarbeid/temadata/nasjonal-database-for-tur--og-friluftsruter/","terms_text":"© Kartverket","description":"Hiking trails from the Norwegian database `Tur- og Friluftsruter´, including DNT routes.","icon":"https://www.kartverket.no/Content/Images/logo-graphic-512.png","overlay":true},{"id":"kartverket-topo4","name":"Kartverket N50 topo","type":"tms","template":"http://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom={zoom}&x={x}&y={y}","scaleExtent":[3,15],"polygon":[[[31.904253,70.4368136],[28.4765186,71.3289643],[23.6865015,71.2514263],[16.8090601,70.0730823],[11.1620655,67.5253903],[9.975542,64.811576],[4.2187061,62.1449966],[4.3725367,59.1871966],[6.1743055,57.8915032],[7.932118,57.7393554],[10.777577,58.8649103],[11.7224012,58.762509],[12.722157,60.1141506],[13.0517469,61.3493518],[12.5243921,63.6169922],[14.2382593,63.9856094],[15.1171656,65.9016624],[18.6987085,68.3749083],[20.0610132,68.2612583],[21.0058375,68.7841518],[25.2465601,68.3506025],[26.9384546,69.8472011],[28.7621851,69.6112133],[28.5864039,68.8556004],[31.069314,69.5191547],[31.904253,70.4368136]]],"terms_url":"https://wiki.openstreetmap.org/wiki/No:Kartverket_import","terms_text":"© Kartverket","description":"Topographic map N50, equivalent to Norway 1:50.000 paper map series.","icon":"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{"id":"kartverket-vegnett","name":"Kartverket Road Network","type":"wms","template":"http://openwms.statkart.no/skwms1/wms.vegnett?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=all&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[3,24],"polygon":[[[31.904253,70.4368136],[28.4765186,71.3289643],[23.6865015,71.2514263],[16.8090601,70.0730823],[11.1620655,67.5253903],[9.975542,64.811576],[4.2187061,62.1449966],[4.3725367,59.1871966],[6.1743055,57.8915032],[7.932118,57.7393554],[10.777577,58.8649103],[11.7224012,58.762509],[12.722157,60.1141506],[13.0517469,61.3493518],[12.5243921,63.6169922],[14.2382593,63.9856094],[15.1171656,65.9016624],[18.6987085,68.3749083],[20.0610132,68.2612583],[21.0058375,68.7841518],[25.2465601,68.3506025],[26.9384546,69.8472011],[28.7621851,69.6112133],[28.5864039,68.8556004],[31.069314,69.5191547],[31.904253,70.4368136]]],"terms_url":"https://www.kartverket.no/data/kartdata/vegdata/","terms_text":"© Kartverket","description":"Norwegian road network from the National Road database (NVDB). Colours represent national, county, municipal, private and forest roads + footways/cycleways.","icon":"https://www.kartverket.no/Content/Images/logo-graphic-512.png","overlay":true},{"id":"kelowna_2012","name":"Kelowna 2012","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna2012/{zoom}/{x}/{y}.png","endDate":"2012-05-14T00:00:00.000Z","startDate":"2012-05-13T00:00:00.000Z","scaleExtent":[9,20],"polygon":[[[-119.5867318,49.7928087],[-119.5465655,49.7928097],[-119.5465661,49.8013837],[-119.5343374,49.8013841],[-119.5343376,49.8047321],[-119.5296211,49.8047322],[-119.5296216,49.8119555],[-119.5104463,49.811956],[-119.5115683,49.8744325],[-119.5108946,49.8744904],[-119.5114111,49.8843312],[-119.5114115,49.9221763],[-119.49386,49.9223477],[-119.4940505,49.9313031],[-119.4803936,49.9317529],[-119.4804572,49.9407474],[-119.4666732,49.9409927],[-119.4692775,49.9913717],[-119.4551337,49.9916078],[-119.4556736,50.0121242],[-119.4416673,50.0123895],[-119.4417308,50.0136345],[-119.4221492,50.0140377],[-119.4221042,50.0119306],[-119.4121303,50.012165],[-119.4126082,50.0216913],[-119.4123387,50.0216913],[-119.4124772,50.0250773],[-119.4120917,50.0250821],[-119.4121954,50.0270769],[-119.4126083,50.0270718],[-119.4128328,50.0321946],[-119.3936313,50.0326418],[-119.393529,50.0307781],[-119.3795727,50.0310116],[-119.3795377,50.0287584],[-119.3735764,50.0288621],[-119.371544,49.9793618],[-119.3573506,49.9793618],[-119.3548353,49.9256081],[-119.3268079,49.9257238],[-119.3256573,49.8804068],[-119.3138893,49.8806528],[-119.3137097,49.8771651],[-119.3132156,49.877223],[-119.3131482,49.8749652],[-119.312452,49.8749073],[-119.3122275,49.87236],[-119.3117558,49.872331],[-119.3115986,49.8696098],[-119.3112169,49.8694217],[-119.3109199,49.8632417],[-119.3103721,49.8632724],[-119.3095139,49.8512388],[-119.3106368,49.8512316],[-119.3103859,49.8462564],[-119.3245344,49.8459957],[-119.3246018,49.8450689],[-119.3367018,49.844875],[-119.3367467,49.8435136],[-119.337937,49.8434702],[-119.3378023,49.8382055],[-119.3383637,49.8381041],[-119.3383749,49.8351202],[-119.3390936,49.8351058],[-119.3388016,49.8321217],[-119.3391497,49.8320565],[-119.3391722,49.8293331],[-119.3394641,49.8293331],[-119.3395879,49.8267878],[-119.3500053,49.8265829],[-119.3493701,49.8180588],[-119.4046964,49.8163785],[-119.4045694,49.8099022],[-119.4101592,49.8099022],[-119.4102862,49.8072787],[-119.4319467,49.8069098],[-119.4322643,49.7907965],[-119.4459847,49.7905504],[-119.445286,49.7820201],[-119.4967376,49.7811587],[-119.4966105,49.7784927],[-119.5418371,49.7775082],[-119.5415892,49.7718277],[-119.5560296,49.7714941],[-119.5561194,49.7718422],[-119.5715704,49.7715086],[-119.5716153,49.7717262],[-119.5819235,49.7714941],[-119.5820133,49.7717697],[-119.5922991,49.7715231],[-119.592344,49.7718132],[-119.6003839,49.7715957],[-119.6011924,49.7839081],[-119.5864365,49.7843863],[-119.5867318,49.7928087]]],"description":"High quality aerial imagery taken for the City of Kelowna"},{"id":"kelowna_roads","name":"Kelowna Roads overlay","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna_overlay/{zoom}/{x}/{y}.png","scaleExtent":[9,20],"polygon":[[[-119.5867318,49.7928087],[-119.5465655,49.7928097],[-119.5465661,49.8013837],[-119.5343374,49.8013841],[-119.5343376,49.8047321],[-119.5296211,49.8047322],[-119.5296216,49.8119555],[-119.5104463,49.811956],[-119.5115683,49.8744325],[-119.5108946,49.8744904],[-119.5114111,49.8843312],[-119.5114115,49.9221763],[-119.49386,49.9223477],[-119.4940505,49.9313031],[-119.4803936,49.9317529],[-119.4804572,49.9407474],[-119.4666732,49.9409927],[-119.4692775,49.9913717],[-119.4551337,49.9916078],[-119.4556736,50.0121242],[-119.4416673,50.0123895],[-119.4417308,50.0136345],[-119.4221492,50.0140377],[-119.4221042,50.0119306],[-119.4121303,50.012165],[-119.4126082,50.0216913],[-119.4123387,50.0216913],[-119.4124772,50.0250773],[-119.4120917,50.0250821],[-119.4121954,50.0270769],[-119.4126083,50.0270718],[-119.4128328,50.0321946],[-119.3936313,50.0326418],[-119.393529,50.0307781],[-119.3795727,50.0310116],[-119.3795377,50.0287584],[-119.3735764,50.0288621],[-119.371544,49.9793618],[-119.3573506,49.9793618],[-119.3548353,49.9256081],[-119.3268079,49.9257238],[-119.3256573,49.8804068],[-119.3138893,49.8806528],[-119.3137097,49.8771651],[-119.3132156,49.877223],[-119.3131482,49.8749652],[-119.312452,49.8749073],[-119.3122275,49.87236],[-119.3117558,49.872331],[-119.3115986,49.8696098],[-119.3112169,49.8694217],[-119.3109199,49.8632417],[-119.3103721,49.8632724],[-119.3095139,49.8512388],[-119.3106368,49.8512316],[-119.3103859,49.8462564],[-119.3245344,49.8459957],[-119.3246018,49.8450689],[-119.3367018,49.844875],[-119.3367467,49.8435136],[-119.337937,49.8434702],[-119.3378023,49.8382055],[-119.3383637,49.8381041],[-119.3383749,49.8351202],[-119.3390936,49.8351058],[-119.3388016,49.8321217],[-119.3391497,49.8320565],[-119.3391722,49.8293331],[-119.3394641,49.8293331],[-119.3395879,49.8267878],[-119.3500053,49.8265829],[-119.3493701,49.8180588],[-119.4046964,49.8163785],[-119.4045694,49.8099022],[-119.4101592,49.8099022],[-119.4102862,49.8072787],[-119.4319467,49.8069098],[-119.4322643,49.7907965],[-119.4459847,49.7905504],[-119.445286,49.7820201],[-119.4967376,49.7811587],[-119.4966105,49.7784927],[-119.5418371,49.7775082],[-119.5415892,49.7718277],[-119.5560296,49.7714941],[-119.5561194,49.7718422],[-119.5715704,49.7715086],[-119.5716153,49.7717262],[-119.5819235,49.7714941],[-119.5820133,49.7717697],[-119.5922991,49.7715231],[-119.592344,49.7718132],[-119.6003839,49.7715957],[-119.6011924,49.7839081],[-119.5864365,49.7843863],[-119.5867318,49.7928087]]],"overlay":true},{"id":"landsat_233055","name":"Landsat 233055","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_233055/{zoom}/{x}/{y}.png","endDate":"2013-09-03T00:00:00.000Z","startDate":"2013-09-03T00:00:00.000Z","scaleExtent":[5,14],"polygon":[[[-60.8550011,6.1765004],[-60.4762612,7.9188291],[-62.161689,8.2778675],[-62.5322549,6.5375488],[-60.8550011,6.1765004]]],"description":"Recent Landsat imagery"},{"id":"lu.geoportail.opendata.ortholatest","name":"Latest available ortho geoportail.lu","type":"tms","template":"http://{switch:wmts1,wmts2}.geoportail.lu/opendata/wmts/ortho_latest/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","endDate":"2017-06-22T00:00:00.000Z","startDate":"2017-06-14T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie","best":true,"icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"landsat_047026","name":"Latest southwest British Columbia Landsat","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_047026/{zoom}/{x}/{y}.png","endDate":"2013-09-12T00:00:00.000Z","startDate":"2013-09-12T00:00:00.000Z","scaleExtent":[5,13],"polygon":[[[-121.9355512,47.7820648],[-121.5720582,48.6410125],[-121.2015461,49.4846247],[-121.8375516,49.6023246],[-122.4767046,49.7161735],[-123.118912,49.8268824],[-123.760228,49.9335836],[-124.0887706,49.0870469],[-124.4128889,48.2252567],[-123.792772,48.1197334],[-123.1727942,48.0109592],[-122.553553,47.8982299],[-121.9355512,47.7820648]]],"description":"Recent lower-resolution landsat imagery for southwest British Columbia"},{"id":"LINZ_NZ_Aerial_Imagery","name":"LINZ NZ Aerial Imagery","type":"tms","template":"https://tiles-a.data-cdn.linz.govt.nz/services;key=3197c6d0e5cb494a95d58dc2de3216c2/tiles/v4/set=2/EPSG:3857/{zoom}/{x}/{y}.png","scaleExtent":[0,21],"polygon":[[[167.2503662109375,-47.21956811231548],[167.244873046875,-47.28016067076474],[167.5030517578125,-47.37975438400816],[168.2501220703125,-47.15610477504402],[168.7445068359375,-46.79629898997744],[169.3267822265625,-46.75491661928188],[169.78271484375,-46.604167162931844],[170.4254150390625,-46.11132565729794],[170.804443359375,-45.95114968669139],[170.9527587890625,-45.440862671781744],[171.309814453125,-44.91035917458493],[171.40869140625,-44.39061697878681],[172.562255859375,-43.92954993561458],[172.90283203125,-43.96909818325171],[173.1610107421875,-43.90976594390799],[173.2598876953125,-43.69567969789881],[172.9742431640625,-43.53660274231031],[172.760009765625,-43.37710501700071],[173.1500244140625,-43.17714134663171],[173.704833984375,-42.63395872267314],[174.36401367187497,-41.78360106648077],[174.320068359375,-41.409775832009544],[174.84741210937497,-41.52914198872309],[175.0726318359375,-41.70572851523751],[175.506591796875,-41.672911819602085],[176.2261962890625,-41.10832999732831],[176.8304443359375,-40.42604212826493],[177.17102050781247,-39.67337039176559],[177.0391845703125,-39.39375459224347],[177.4456787109375,-39.18117526158747],[177.60498046875,-39.3300485529424],[177.978515625,-39.368279149160124],[178.3355712890625,-38.65977773071253],[178.7091064453125,-37.74465712069938],[178.626708984375,-37.54457732085582],[178.3135986328125,-37.43125050179357],[177.6214599609375,-37.37888785004525],[177.0391845703125,-37.39634613318924],[176.561279296875,-37.37015718405751],[176.3360595703125,-37.05956083025124],[176.0064697265625,-36.29741818650809],[175.6768798828125,-36.05354012833974],[174.671630859375,-35.1782983520012],[173.1939697265625,-34.28445325435288],[172.6776123046875,-34.234512362369856],[172.386474609375,-34.40237742424137],[172.4798583984375,-34.71903991764788],[172.9852294921875,-35.32184842037683],[173.56201171875,-36.142310873529986],[174.30908203125,-37.077093191754415],[174.5562744140625,-38.052416771864834],[174.4793701171875,-38.655488159952995],[174.3255615234375,-38.865374851611634],[173.7982177734375,-38.95940879245421],[173.60595703125,-39.232253141714885],[173.6993408203125,-39.56335316582929],[174.5892333984375,-39.95606977009003],[174.9847412109375,-40.216635475391215],[174.9847412109375,-40.49291502689579],[174.7210693359375,-40.805493843894155],[174.1497802734375,-40.65147128144056],[173.2818603515625,-40.43440488077009],[172.5897216796875,-40.350730565917885],[172.0843505859375,-40.534676780615406],[171.7657470703125,-40.826280356677124],[171.57348632812497,-41.3974150664646],[171.2823486328125,-41.652392884268124],[170.8758544921875,-42.53284428171312],[170.35400390625,-42.87193842444846],[168.277587890625,-43.92954993561458],[167.6239013671875,-44.47691085722324],[166.55273437499997,-45.38687734827038],[166.27258300781247,-45.916765867649],[166.4813232421875,-46.22545288226937],[167.6788330078125,-46.471916320870406],[167.2503662109375,-47.21956811231548]]],"terms_url":"http://www.linz.govt.nz/data/licensing-and-using-data/attributing-elevation-or-aerial-imagery-data","terms_text":"Sourced from LINZ CC-BY 3.0","best":true},{"id":"LINZ_NZ_Topo50_Gridless_Maps","name":"LINZ NZ Topo50 Gridless Maps","type":"tms","template":"https://tiles-a.data-cdn.linz.govt.nz/services;key=3197c6d0e5cb494a95d58dc2de3216c2/tiles/v4/layer=2343/EPSG:3857/{zoom}/{x}/{y}.png","scaleExtent":[0,21],"polygon":[[[167.2503662109375,-47.21956811231548],[167.244873046875,-47.28016067076474],[167.5030517578125,-47.37975438400816],[168.2501220703125,-47.15610477504402],[168.7445068359375,-46.79629898997744],[169.3267822265625,-46.75491661928188],[169.78271484375,-46.604167162931844],[170.4254150390625,-46.11132565729794],[170.804443359375,-45.95114968669139],[170.9527587890625,-45.440862671781744],[171.309814453125,-44.91035917458493],[171.40869140625,-44.39061697878681],[172.562255859375,-43.92954993561458],[172.90283203125,-43.96909818325171],[173.1610107421875,-43.90976594390799],[173.2598876953125,-43.69567969789881],[172.9742431640625,-43.53660274231031],[172.760009765625,-43.37710501700071],[173.1500244140625,-43.17714134663171],[173.704833984375,-42.63395872267314],[174.36401367187497,-41.78360106648077],[174.320068359375,-41.409775832009544],[174.84741210937497,-41.52914198872309],[175.0726318359375,-41.70572851523751],[175.506591796875,-41.672911819602085],[176.2261962890625,-41.10832999732831],[176.8304443359375,-40.42604212826493],[177.17102050781247,-39.67337039176559],[177.0391845703125,-39.39375459224347],[177.4456787109375,-39.18117526158747],[177.60498046875,-39.3300485529424],[177.978515625,-39.368279149160124],[178.3355712890625,-38.65977773071253],[178.7091064453125,-37.74465712069938],[178.626708984375,-37.54457732085582],[178.3135986328125,-37.43125050179357],[177.6214599609375,-37.37888785004525],[177.0391845703125,-37.39634613318924],[176.561279296875,-37.37015718405751],[176.3360595703125,-37.05956083025124],[176.0064697265625,-36.29741818650809],[175.6768798828125,-36.05354012833974],[174.671630859375,-35.1782983520012],[173.1939697265625,-34.28445325435288],[172.6776123046875,-34.234512362369856],[172.386474609375,-34.40237742424137],[172.4798583984375,-34.71903991764788],[172.9852294921875,-35.32184842037683],[173.56201171875,-36.142310873529986],[174.30908203125,-37.077093191754415],[174.5562744140625,-38.052416771864834],[174.4793701171875,-38.655488159952995],[174.3255615234375,-38.865374851611634],[173.7982177734375,-38.95940879245421],[173.60595703125,-39.232253141714885],[173.6993408203125,-39.56335316582929],[174.5892333984375,-39.95606977009003],[174.9847412109375,-40.216635475391215],[174.9847412109375,-40.49291502689579],[174.7210693359375,-40.805493843894155],[174.1497802734375,-40.65147128144056],[173.2818603515625,-40.43440488077009],[172.5897216796875,-40.350730565917885],[172.0843505859375,-40.534676780615406],[171.7657470703125,-40.826280356677124],[171.57348632812497,-41.3974150664646],[171.2823486328125,-41.652392884268124],[170.8758544921875,-42.53284428171312],[170.35400390625,-42.87193842444846],[168.277587890625,-43.92954993561458],[167.6239013671875,-44.47691085722324],[166.55273437499997,-45.38687734827038],[166.27258300781247,-45.916765867649],[166.4813232421875,-46.22545288226937],[167.6788330078125,-46.471916320870406],[167.2503662109375,-47.21956811231548]]],"terms_url":"https://data.linz.govt.nz/layer/2343-nz-mainland-topo50-gridless-maps/","terms_text":"Sourced from the LINZ Data Service and licensed by LINZ for re-use under the Creative Commons Attribution 3.0 New Zealand licence."},{"id":"ORT10LT","name":"Lithuania - NŽT ORT10LT","type":"tms","template":"http://ort10lt.openmap.lt/g16/{zoom}/{x}/{y}.jpeg","endDate":"2016-01-01T00:00:00.000Z","startDate":"2010-01-01T00:00:00.000Z","scaleExtent":[4,18],"polygon":[[[26.2138385,55.850748],[26.3858298,55.7045315],[26.6303618,55.6806692],[26.6205349,55.5689227],[26.5242191,55.5099228],[26.5541476,55.388833],[26.4399286,55.3479351],[26.7919694,55.3212027],[26.8291304,55.2763488],[26.7434625,55.2539863],[26.6764846,55.158828],[26.4611191,55.1285624],[26.3577434,55.1505399],[26.2296342,55.1073177],[26.2713814,55.0775905],[26.2085126,54.997414],[26.0619117,54.9416094],[25.8578176,54.9276001],[25.7429827,54.8150641],[25.7626083,54.5769013],[25.5319352,54.3418175],[25.6771618,54.3238109],[25.7857293,54.2336242],[25.7858844,54.1550594],[25.5550843,54.1461918],[25.5109462,54.1750267],[25.5896725,54.2285838],[25.5136246,54.3078472],[25.2689287,54.2744706],[25.0705963,54.1336282],[24.9573726,54.1720575],[24.8133801,54.144862],[24.7790172,54.0999054],[24.8712786,54.034904],[24.819568,53.9977218],[24.6845912,53.9621091],[24.697865,54.0171421],[24.6259068,54.0105048],[24.4342619,53.9014424],[24.3520594,53.8967893],[24.2016059,53.9700069],[23.9683341,53.9266977],[23.9130177,53.9696842],[23.7781192,53.8989169],[23.7097655,53.9394502],[23.5370435,53.9430702],[23.4822428,53.9893848],[23.5273356,54.0473482],[23.4858579,54.1532339],[23.3867851,54.224838],[23.0421216,54.3159745],[23.0102115,54.3827959],[22.8546899,54.4104029],[22.7919963,54.3633227],[22.7023421,54.4528985],[22.6838586,54.585972],[22.7489713,54.6319792],[22.7429727,54.7268221],[22.8866837,54.8135001],[22.8204005,54.9119829],[22.6424041,54.9713362],[22.5892361,55.070243],[22.080597,55.0244812],[22.0324081,55.084098],[21.9130671,55.0816838],[21.6491949,55.1808113],[21.5015124,55.1868198],[21.3843708,55.2936996],[21.2709829,55.2450059],[21.0983616,55.2563884],[20.9421741,55.282453],[21.0863466,55.5618266],[21.0399547,55.8363584],[21.0640261,56.0699542],[21.2047804,56.0811668],[21.2307958,56.1623302],[21.5021038,56.2954952],[21.7235874,56.3138211],[21.8356623,56.37162],[21.9695397,56.3766515],[22.0153001,56.4242811],[22.4372717,56.406405],[22.6800028,56.3515884],[22.9191739,56.3790184],[22.9466759,56.4146477],[23.0932498,56.3046383],[23.1703443,56.3667721],[23.3064522,56.3830535],[23.5571715,56.3338187],[23.7647953,56.3733238],[23.7666897,56.3238079],[24.0189971,56.3297615],[24.1214631,56.2488984],[24.2857421,56.3006367],[24.4541496,56.2581579],[24.5794651,56.2882389],[24.6284061,56.3753322],[24.9023767,56.4805317],[25.1277405,56.2059091],[25.5771398,56.182414],[25.6731232,56.1493667],[26.2138385,55.850748]]],"terms_url":"http://www.geoportal.lt","terms_text":"NŽT ORT10LT","best":true},{"id":"mapbox_locator_overlay","name":"Locator Overlay","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/openstreetmap.map-inh76ba2/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","scaleExtent":[0,16],"overzoom":false,"terms_url":"http://www.mapbox.com/about/maps/","terms_text":"Terms & Feedback","default":true,"description":"Shows major features to help orient you.","overlay":true},{"id":"Loire_Atlantique-Orthophotos-2012","name":"Loire-Atlantique - Orthophotos 2012 - 20 cm","type":"tms","template":"http://{switch:a,b,c,d,e,f,g,h}.tiles.cg44.makina-corpus.net/ortho-2012/{zoom}/{x}/{-y}.jpg","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","scaleExtent":[0,19],"polygon":[[[-1.4863838,46.8769078],[-1.5443674,46.8487272],[-1.7346797,46.8724645],[-1.8927568,46.9423436],[-1.9547478,46.980844],[-2.070671,47.0852054],[-2.2678023,47.1265555],[-2.2262684,47.1712448],[-2.1921733,47.1691377],[-2.1934131,47.2554621],[-2.2969381,47.2276852],[-2.4165807,47.2533583],[-2.5486216,47.2857476],[-2.6391284,47.4167844],[-2.5057256,47.5081195],[-2.3106273,47.5302088],[-2.2483636,47.5238409],[-2.2322311,47.5149928],[-2.1210893,47.5467415],[-2.117832,47.6012606],[-2.1001019,47.6112276],[-2.099813,47.6200473],[-2.1114061,47.6287298],[-2.1005485,47.6514139],[-2.0812094,47.6657768],[-1.9801641,47.7075082],[-1.8307658,47.7241914],[-1.6745485,47.7254424],[-1.6373539,47.7746256],[-1.4960144,47.8175187],[-1.499114,47.8416565],[-1.3813311,47.8441529],[-1.3459962,47.810858],[-1.230073,47.7858729],[-1.216435,47.7583753],[-1.2263536,47.7362834],[-1.2108558,47.7316971],[-1.1866793,47.7346157],[-1.1519644,47.6933233],[-1.1315073,47.6365449],[-1.0912132,47.6332031],[-0.9926475,47.6026991],[-0.9845887,47.585977],[-1.0317018,47.5500064],[-1.1358467,47.5562822],[-1.1327472,47.5161046],[-1.0317018,47.5177793],[-0.9486339,47.5010301],[-0.9368556,47.4771532],[-0.9337561,47.4385923],[-0.9009008,47.3987442],[-0.926937,47.3748209],[-0.9715706,47.358446],[-1.2833853,47.3273618],[-1.2337925,47.2609316],[-1.2003173,47.2693451],[-1.1649825,47.2495712],[-1.1414259,47.1763017],[-1.1563037,47.1581792],[-1.2065164,47.1240248],[-1.2083762,47.1096818],[-1.1556838,47.1050406],[-1.140806,47.0805621],[-1.0943127,47.0716964],[-1.0998919,47.0319939],[-1.1445254,47.0163582],[-1.2158151,47.0290362],[-1.2672676,47.0632516],[-1.285245,47.0218524],[-1.3497157,47.0239654],[-1.3391772,46.9690007],[-1.3490957,46.9444597],[-1.4501411,46.9118621],[-1.4750393,46.9176026],[-1.4877512,46.9306253],[-1.4923538,46.9843293],[-1.4864362,46.9994285],[-1.4921346,47.0272238],[-1.5276404,47.0054072],[-1.5296129,46.9725161],[-1.5050657,46.944393],[-1.5022165,46.9297273],[-1.5114217,46.9137101],[-1.486217,46.8972388],[-1.4863838,46.8769078]]],"terms_url":"http://data.loire-atlantique.fr/licence/","terms_text":"Département de Loire-Atlantique"},{"id":"Lombardia-Italy-CTR-DBT","name":"Lombardia - Italy (CTR DBT)","type":"wms","template":"http://www.cartografia.servizirl.it/arcgis/services/wms/ctr_wms/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Sfondo%20C.T.R.%2010000&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[8.4815995,45.2893842],[8.6308463,45.0137199],[8.7800932,44.9818911],[8.8677461,45.0271162],[9.0714799,44.8006338],[9.1496568,44.7905472],[9.1946678,44.6710553],[9.3154866,44.6575759],[9.3699736,44.6980046],[9.3794496,44.8275228],[9.3320696,44.9148254],[9.4102465,45.0371613],[9.7869171,45.0438571],[9.7869171,45.0003204],[9.938533,45.0019955],[9.933795,45.0890333],[10.0001269,45.0907058],[10.0001269,44.9969701],[10.2014917,45.0019955],[10.2014917,44.9500447],[10.4052255,44.9533977],[10.4052255,44.9047588],[10.4928784,44.9030808],[10.4928784,44.8627956],[10.6516012,44.8577579],[10.6468633,44.9030808],[11.3528245,44.8946904],[11.3551935,44.9366303],[11.4570604,44.9332763],[11.4475844,44.9735122],[11.3623005,45.0003204],[11.3528245,45.0923782],[11.2580646,45.095723],[11.2580646,45.137516],[11.1609357,45.1425291],[11.1609357,45.1826181],[11.0519618,45.1909664],[11.0519618,45.234358],[10.9572019,45.2326897],[10.9572019,45.2860508],[10.857704,45.284384],[10.855335,45.3227074],[10.7463612,45.3293697],[10.7534681,45.4740809],[10.6468633,45.4807254],[10.6030084,45.5107366],[10.5763572,45.4737864],[10.535492,45.5003598],[10.5911634,45.5314845],[10.6166585,45.613036],[10.874287,45.840014],[10.8221691,45.8598152],[10.6752912,45.8581654],[10.5734243,45.8102989],[10.5862444,46.0077329],[10.5016004,46.015957],[10.593248,46.1152934],[10.6089593,46.3558255],[10.6563392,46.3868822],[10.6468633,46.4603672],[10.4147015,46.5728517],[10.3270486,46.5679659],[10.2512407,46.6542168],[10.0735658,46.6249395],[10.0238169,46.5321233],[10.0285549,46.4358832],[10.0735658,46.3983197],[10.1209458,46.3966859],[10.0783038,46.3280229],[10.1446358,46.2658249],[10.1043628,46.247807],[9.9740679,46.4081214],[9.7111092,46.3689041],[9.6874192,46.3231151],[9.6187183,46.3067526],[9.5571244,46.3247511],[9.5026374,46.3901503],[9.4789475,46.525604],[9.2562617,46.5158234],[9.2254647,46.4407808],[9.2728447,46.3443791],[9.1709778,46.190438],[9.0430519,46.1280838],[9.0620039,46.0919516],[8.974351,46.0459311],[8.988565,46.0015177],[8.938816,45.9735355],[9.0406829,45.8960992],[9.0193619,45.8482654],[8.8487941,46.0080997],[8.8985431,46.0705897],[8.8251041,46.1182319],[8.7090233,46.1165897],[8.6782263,46.0755201],[8.7184992,46.014681],[8.5550384,45.9043422],[8.5976804,45.8383636],[8.5337174,45.7937837],[8.6877023,45.4923513],[8.7800932,45.4159083],[8.6853333,45.379312],[8.7113923,45.3410269],[8.6948093,45.3210417],[8.6284773,45.377648],[8.5123965,45.3576757],[8.4815995,45.2893842]]],"terms_url":"http://www.dati.gov.it/iodl/2.0","terms_text":"CTR DBT 10000 Regione Lombardia"},{"id":"Lombardia-Italy-CTR","name":"Lombardia - Italy (CTR)","type":"wms","template":"http://www.cartografia.regione.lombardia.it/ArcGIS10/services/wms/ctr_wms/MapServer/WMSServer?STYLES=&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[8.4815995,45.2893842],[8.6308463,45.0137199],[8.7800932,44.9818911],[8.8677461,45.0271162],[9.0714799,44.8006338],[9.1496568,44.7905472],[9.1946678,44.6710553],[9.3154866,44.6575759],[9.3699736,44.6980046],[9.3794496,44.8275228],[9.3320696,44.9148254],[9.4102465,45.0371613],[9.7869171,45.0438571],[9.7869171,45.0003204],[9.938533,45.0019955],[9.933795,45.0890333],[10.0001269,45.0907058],[10.0001269,44.9969701],[10.2014917,45.0019955],[10.2014917,44.9500447],[10.4052255,44.9533977],[10.4052255,44.9047588],[10.4928784,44.9030808],[10.4928784,44.8627956],[10.6516012,44.8577579],[10.6468633,44.9030808],[11.3528245,44.8946904],[11.3551935,44.9366303],[11.4570604,44.9332763],[11.4475844,44.9735122],[11.3623005,45.0003204],[11.3528245,45.0923782],[11.2580646,45.095723],[11.2580646,45.137516],[11.1609357,45.1425291],[11.1609357,45.1826181],[11.0519618,45.1909664],[11.0519618,45.234358],[10.9572019,45.2326897],[10.9572019,45.2860508],[10.857704,45.284384],[10.855335,45.3227074],[10.7463612,45.3293697],[10.7534681,45.4740809],[10.6468633,45.4807254],[10.6030084,45.5107366],[10.5763572,45.4737864],[10.535492,45.5003598],[10.5911634,45.5314845],[10.6166585,45.613036],[10.874287,45.840014],[10.8221691,45.8598152],[10.6752912,45.8581654],[10.5734243,45.8102989],[10.5862444,46.0077329],[10.5016004,46.015957],[10.593248,46.1152934],[10.6089593,46.3558255],[10.6563392,46.3868822],[10.6468633,46.4603672],[10.4147015,46.5728517],[10.3270486,46.5679659],[10.2512407,46.6542168],[10.0735658,46.6249395],[10.0238169,46.5321233],[10.0285549,46.4358832],[10.0735658,46.3983197],[10.1209458,46.3966859],[10.0783038,46.3280229],[10.1446358,46.2658249],[10.1043628,46.247807],[9.9740679,46.4081214],[9.7111092,46.3689041],[9.6874192,46.3231151],[9.6187183,46.3067526],[9.5571244,46.3247511],[9.5026374,46.3901503],[9.4789475,46.525604],[9.2562617,46.5158234],[9.2254647,46.4407808],[9.2728447,46.3443791],[9.1709778,46.190438],[9.0430519,46.1280838],[9.0620039,46.0919516],[8.974351,46.0459311],[8.988565,46.0015177],[8.938816,45.9735355],[9.0406829,45.8960992],[9.0193619,45.8482654],[8.8487941,46.0080997],[8.8985431,46.0705897],[8.8251041,46.1182319],[8.7090233,46.1165897],[8.6782263,46.0755201],[8.7184992,46.014681],[8.5550384,45.9043422],[8.5976804,45.8383636],[8.5337174,45.7937837],[8.6877023,45.4923513],[8.7800932,45.4159083],[8.6853333,45.379312],[8.7113923,45.3410269],[8.6948093,45.3210417],[8.6284773,45.377648],[8.5123965,45.3576757],[8.4815995,45.2893842]]],"terms_url":"http://www.dati.gov.it/iodl/2.0","terms_text":"Regione Lombardia - Infrastruttura per l'informazione territoriale"},{"id":"londrina2011","name":"Londrina Ortofoto 2011","type":"tms","template":"https://siglon.londrina.pr.gov.br/arcgis/rest/services/Imagens/Ortofotos_2011_Paranacidade/MapServer/WMTS/tile/1.0.0/Imagens_Ortofotos_2011_Paranacidade/default/GoogleMapsCompatible/{zoom}/{y}/{x}","polygon":[[[-51.10903142008701,-23.392750890870328],[-51.110147219037096,-23.39111628244602],[-51.111981850003126,-23.389599820448623],[-51.11358044657587,-23.38976722295012],[-51.120999436701226,-23.38592675938185],[-51.12224934611127,-23.385109415587607],[-51.12483499560139,-23.383504255873166],[-51.12538216624037,-23.38186953335707],[-51.12482426676533,-23.37770385409619],[-51.12445948633935,-23.375054689723584],[-51.124373655650885,-23.372297138974446],[-51.12244246516032,-23.37032742475139],[-51.12302182230749,-23.366427304263887],[-51.128557901713755,-23.36548180323493],[-51.12832186732048,-23.358843408308623],[-51.12477062258506,-23.35475580404945],[-51.12703440699343,-23.35091432623551],[-51.12411616358548,-23.34679692655685],[-51.12025378260435,-23.347811512977742],[-51.1176466754421,-23.33969460448754],[-51.11264703783877,-23.341290443649072],[-51.109396200513004,-23.33488726938344],[-51.10756156954697,-23.334089313725826],[-51.10485790286019,-23.333980949007543],[-51.10252974543546,-23.334187827029368],[-51.09986899409291,-23.331015661953632],[-51.09801290545476,-23.329360589233605],[-51.09998701128955,-23.32830645478855],[-51.10322711977927,-23.325321337105603],[-51.10472915682748,-23.323193291476684],[-51.104664783811145,-23.321291814470847],[-51.10514758143378,-23.318444474199904],[-51.1063599399084,-23.3157547161216],[-51.10660670313775,-23.31467091543279],[-51.11050127062705,-23.311665785493048],[-51.111584883068964,-23.30842411016493],[-51.099504213666904,-23.309468549142686],[-51.09740136179941,-23.308631027972474],[-51.09511611971892,-23.307448636164267],[-51.09201548609798,-23.3049360186679],[-51.09036324534495,-23.3037141796735],[-51.09204767260616,-23.29874787986134],[-51.09269140276969,-23.297496421894902],[-51.09407542262125,-23.292953629109174],[-51.10073802981369,-23.293318240761657],[-51.10101697955121,-23.28870632248831],[-51.10068438563339,-23.28837126237015],[-51.10084531817427,-23.28777997775132],[-51.09937546763423,-23.28663682004102],[-51.09631774935752,-23.277914991984613],[-51.10285161051725,-23.273016720553397],[-51.10835550341534,-23.27033590016574],[-51.11309764895328,-23.268404099092194],[-51.13160489115448,-23.265338785827712],[-51.13188384089201,-23.262007272160396],[-51.1317336371872,-23.255058136908826],[-51.13290308031759,-23.254683563301587],[-51.132956724497895,-23.250750476893938],[-51.13473771128364,-23.2512729236245],[-51.13533852610292,-23.25133206840842],[-51.13516686472599,-23.24359373640034],[-51.13534925493897,-23.24117849627157],[-51.137516479822814,-23.24219388826517],[-51.13884685549409,-23.243495156026544],[-51.14108918223035,-23.24521044413634],[-51.1471724322756,-23.243179698340864],[-51.14761231455401,-23.23828015040167],[-51.149082165094036,-23.235884531292832],[-51.14976881060179,-23.236811236789336],[-51.15138886484666,-23.23853646924079],[-51.15289090189487,-23.238842079520833],[-51.15383503946804,-23.238950521710013],[-51.15820167574391,-23.238142132361276],[-51.16045473131624,-23.238161849232945],[-51.160347442955654,-23.24658068718069],[-51.15912435564498,-23.2478326235554],[-51.16131303820094,-23.247773477219496],[-51.166591625541805,-23.245939927797],[-51.17193458589902,-23.245821633420345],[-51.17205260309565,-23.249557713480034],[-51.174241285651625,-23.248404370116877],[-51.17514250788055,-23.2493211310392],[-51.176859121649926,-23.248157927934038],[-51.179466228812196,-23.251686936561047],[-51.18135450395853,-23.253806268366073],[-51.18273852381009,-23.253628837227893],[-51.18378994974384,-23.253264116924615],[-51.18495939287424,-23.253303546194683],[-51.18626831087339,-23.252150235227905],[-51.18665454897149,-23.247477745146526],[-51.191182117788244,-23.249143693933142],[-51.19141815218154,-23.252859966234126],[-51.19369266542598,-23.252781107419985],[-51.1938428691308,-23.26073575534214],[-51.20096681627374,-23.26054847664639],[-51.20126722368338,-23.24259807127726],[-51.209936123218775,-23.242775517090898],[-51.21090171846407,-23.26988252079656],[-51.21968863519614,-23.27221839365197],[-51.225965004290465,-23.2745345140599],[-51.22934458764894,-23.27860487489667],[-51.234515886629225,-23.28160089636689],[-51.23497722657975,-23.283246708422755],[-51.235073786104266,-23.285444377831148],[-51.23371122392482,-23.285897704227196],[-51.232155542696304,-23.28801649191402],[-51.22870085748543,-23.292293383844925],[-51.227402668322334,-23.294599300809004],[-51.22679112466699,-23.295476327114592],[-51.225600223864475,-23.29657013833941],[-51.22392652543933,-23.297210654251764],[-51.220482569064515,-23.30072850975029],[-51.21863720926242,-23.301300029310937],[-51.21668456109974,-23.30211788923888],[-51.21423838647836,-23.30441378240661],[-51.210966091480465,-23.306965823153238],[-51.22328279527583,-23.318296686707587],[-51.224387865389886,-23.31459209321986],[-51.22521398576639,-23.312887551432937],[-51.22511742624187,-23.312582111000477],[-51.22521398576639,-23.312513140483127],[-51.2255251220121,-23.312532846348883],[-51.22595427545445,-23.312385052284572],[-51.22616885217561,-23.31183328632629],[-51.22935531648505,-23.314887676277397],[-51.22802494081377,-23.31661189768144],[-51.227885465945,-23.31901591762422],[-51.22767088922384,-23.320227763653186],[-51.22723100694544,-23.321508564518947],[-51.2273919394863,-23.322227778055023],[-51.22725246461755,-23.322848466059934],[-51.230331640566384,-23.325577488448165],[-51.23046038659909,-23.326710459617892],[-51.229537706698046,-23.32789268010374],[-51.229162197436,-23.330503379743732],[-51.229290943468705,-23.33178408156439],[-51.22681258233914,-23.334473515196468],[-51.2260186484708,-23.336571826694826],[-51.22473118814376,-23.33839427691611],[-51.22210262330938,-23.340226553005806],[-51.22257469209598,-23.34196029634743],[-51.22380850824271,-23.343388647432523],[-51.22384069475089,-23.345309509145306],[-51.22440932306201,-23.347003784611864],[-51.2245380690947,-23.348294177581966],[-51.22404454263601,-23.34968305981433],[-51.22350810083308,-23.35010661675208],[-51.22381923707877,-23.35076657486812],[-51.22304676088255,-23.35174173085325],[-51.22259614976809,-23.35296312824164],[-51.22586844476598,-23.35480505304304],[-51.22650144609346,-23.36705763453823],[-51.22354028734128,-23.369145582171885],[-51.22366903337377,-23.37968330666716],[-51.220375280703756,-23.381633186264455],[-51.216469984378406,-23.38170212087667],[-51.21416328462579,-23.379949201028825],[-51.2092816642191,-23.37395167630701],[-51.20738266023672,-23.368141007697016],[-51.20628831895872,-23.36723491438801],[-51.20472190889416,-23.366269721227162],[-51.198230963078665,-23.366683376299132],[-51.19297383340994,-23.366506095711998],[-51.18986247095292,-23.3654424072124],[-51.18806002649507,-23.36464463523902],[-51.18718026193825,-23.3645264463904],[-51.18579624208668,-23.363738518041337],[-51.183038931219606,-23.36359078095478],[-51.18071077379488,-23.3637582163071],[-51.179069261877906,-23.361581540240305],[-51.177642326682125,-23.35836078207346],[-51.16683838877106,-23.356262814974126],[-51.166141014427254,-23.358538073547532],[-51.16475699457568,-23.360389770338585],[-51.16076586756186,-23.359217688669915],[-51.15983245882475,-23.36660458495632],[-51.162042599052846,-23.36861374957437],[-51.16276143106877,-23.374158492021696],[-51.158448438973174,-23.37580315788644],[-51.155047397942575,-23.376305417047273],[-51.15396378550066,-23.37903334042617],[-51.15298746141932,-23.381052164536694],[-51.15118501696147,-23.382076336717283],[-51.149167995782435,-23.382509637949354],[-51.14721534761976,-23.382155118864866],[-51.14517686876862,-23.382588419839323],[-51.14410398516276,-23.38376029492248],[-51.14512322458833,-23.388083341091015],[-51.141797285410156,-23.389402876058366],[-51.14030597719799,-23.38880219385971],[-51.14068148646006,-23.391608636504017],[-51.14127157244328,-23.393538646762796],[-51.14093897852546,-23.394434713394368],[-51.140456180902824,-23.39536031431835],[-51.13939402613302,-23.395104297688697],[-51.13738773379004,-23.393154616350518],[-51.13608954462695,-23.389796764546077],[-51.13428710016909,-23.389757375749994],[-51.132162790629465,-23.390072485790583],[-51.13172290835106,-23.39285920758337],[-51.12259266886514,-23.38864463742227],[-51.12228153261944,-23.391657871809155],[-51.11882684740854,-23.393174310244916],[-51.115683298443365,-23.393351555162592],[-51.10903142008701,-23.392750890870328]],[[-51.13829432042955,-23.41600741009485],[-51.133310776080314,-23.418665600378624],[-51.132087688769644,-23.416440600302334],[-51.13002238782791,-23.418291487939495],[-51.12868664773901,-23.419010176689888],[-51.12824140104259,-23.42102839134528],[-51.12696466955051,-23.421860280620358],[-51.12532852205271,-23.422692164660027],[-51.1244541219139,-23.420969322085504],[-51.1215144208339,-23.424109801147612],[-51.12063465627703,-23.423268081315832],[-51.11970661195797,-23.423120410617486],[-51.11977098497433,-23.42156985833077],[-51.1188000253111,-23.421545246243184],[-51.11643431696008,-23.420836416154565],[-51.11942766222045,-23.419167696990424],[-51.11787198099193,-23.416775337218567],[-51.116546969738685,-23.41730697646229],[-51.115699391690086,-23.415702207051474],[-51.115120034542905,-23.413088261827834],[-51.119078975048524,-23.411114231305813],[-51.119599323597356,-23.41169512115064],[-51.12052200349841,-23.41489489238112],[-51.12147686990764,-23.417139608782644],[-51.12308619531643,-23.418626220171642],[-51.12754939111684,-23.41653905242448],[-51.12803218873949,-23.417395582795194],[-51.13119719537679,-23.415574218468866],[-51.13080022844262,-23.414766903017576],[-51.13278506311348,-23.41264029239725],[-51.13521514448077,-23.411055157619415],[-51.13585887464424,-23.410956701416854],[-51.13682446988958,-23.411188073376714],[-51.137205343569626,-23.411576974270133],[-51.13730190309418,-23.41324086645236],[-51.137430649126884,-23.414707830961888],[-51.13829432042955,-23.41600741009485]],[[-51.18929065852,-23.61469318354],[-51.18868716149,-23.61385268133],[-51.18817754178,-23.61338573333],[-51.18731118826,-23.61301708899],[-51.18628926663,-23.61314488581],[-51.18401743559,-23.61395590119],[-51.18348904042,-23.61396573165],[-51.18183143525,-23.61283522407],[-51.18140496401,-23.61344471632],[-51.18062980561,-23.61313505529],[-51.18001021533,-23.61409352754],[-51.17865838198,-23.61328742827],[-51.18064589886,-23.61060367181],[-51.17972321896,-23.61018095058],[-51.18061639456,-23.60849005203],[-51.1821157494,-23.60850479833],[-51.18260927586,-23.60775273479],[-51.18319936184,-23.60804274673],[-51.18415154605,-23.60627808786],[-51.18511177687,-23.60666149766],[-51.18649043231,-23.60469528171],[-51.18902243762,-23.60610112912],[-51.18821241049,-23.60741848294],[-51.18918873458,-23.60801816947],[-51.188899056,-23.60953211999],[-51.18962325244,-23.60992535103],[-51.1911896625,-23.6111935131],[-51.1901489654,-23.61244691705],[-51.19054056792,-23.6127565797],[-51.19029380469,-23.61377895281],[-51.18929065852,-23.61469318354]],[[-51.08005769639,-23.52984412096],[-51.07962317853,-23.52205317842],[-51.08468182473,-23.52194496764],[-51.08581908135,-23.52404030606],[-51.0858941832,-23.52703569673],[-51.08579494147,-23.52777346722],[-51.08530141501,-23.52806365581],[-51.08513511805,-23.52856533627],[-51.08512438922,-23.52981952906],[-51.08470864682,-23.53023759067],[-51.08343459754,-23.53023759067],[-51.08329512267,-23.52978018202],[-51.08005769639,-23.52984412096]]],"terms_url":"http://siglon.londrina.pr.gov.br/","terms_text":"Prefeitura do Londrinas, PR"},{"id":"LPI_NSW_Administrative_Boundaries_County","name":"LPI NSW Administrative Boundaries County","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=4&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[159.0033934,-31.4876656],[159.0378887,-31.7055793],[159.3109766,-31.8595241],[159.3727807,-31.7789183],[159.1744327,-31.4373999],[159.0033934,-31.4876656]],[[140.998648,-28.9989332],[148.9451961,-28.9948656],[149.4856226,-28.5615019],[150.2991369,-28.5337256],[151.0954036,-28.7179218],[151.3943629,-28.9797786],[151.9894069,-28.7355674],[151.9290401,-28.4983634],[152.4924635,-28.2353023],[153.5790657,-28.1415563],[153.6969246,-28.6498321],[153.2584694,-30.9735401],[152.7543708,-32.508492],[151.9087862,-33.0553457],[151.2583364,-34.3808144],[151.0144178,-35.1156752],[150.4615355,-36.1202975],[150.4127518,-36.6178579],[149.9784687,-37.5069984],[148.2013511,-36.805656],[148.0791803,-36.8171632],[147.8854228,-36.0901856],[147.6902879,-36.0441802],[146.828442,-36.188678],[145.2348401,-35.9849909],[144.8445703,-36.2149218],[144.5193454,-36.1295974],[143.2021846,-35.1317425],[142.4785593,-34.811943],[140.9937045,-34.070169],[141.0025961,-34.0197399],[140.998648,-28.9989332]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"LPI_NSW_Administrative_Boundaries_LGA","name":"LPI NSW Administrative Boundaries LGA","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=6&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[159.0033934,-31.4876656],[159.0378887,-31.7055793],[159.3109766,-31.8595241],[159.3727807,-31.7789183],[159.1744327,-31.4373999],[159.0033934,-31.4876656]],[[140.998648,-28.9989332],[148.9451961,-28.9948656],[149.4856226,-28.5615019],[150.2991369,-28.5337256],[151.0954036,-28.7179218],[151.3943629,-28.9797786],[151.9894069,-28.7355674],[151.9290401,-28.4983634],[152.4924635,-28.2353023],[153.5790657,-28.1415563],[153.6969246,-28.6498321],[153.2584694,-30.9735401],[152.7543708,-32.508492],[151.9087862,-33.0553457],[151.2583364,-34.3808144],[151.0144178,-35.1156752],[150.4615355,-36.1202975],[150.4127518,-36.6178579],[149.9784687,-37.5069984],[148.2013511,-36.805656],[148.0791803,-36.8171632],[147.8854228,-36.0901856],[147.6902879,-36.0441802],[146.828442,-36.188678],[145.2348401,-35.9849909],[144.8445703,-36.2149218],[144.5193454,-36.1295974],[143.2021846,-35.1317425],[142.4785593,-34.811943],[140.9937045,-34.070169],[141.0025961,-34.0197399],[140.998648,-28.9989332]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"LPI_NSW_Administrative_Boundaries_NPWS_Reserve","name":"LPI NSW Administrative Boundaries NPWS Reserve","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=1&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[159.0033934,-31.4876656],[159.0378887,-31.7055793],[159.3109766,-31.8595241],[159.3727807,-31.7789183],[159.1744327,-31.4373999],[159.0033934,-31.4876656]],[[140.998648,-28.9989332],[148.9451961,-28.9948656],[149.4856226,-28.5615019],[150.2991369,-28.5337256],[151.0954036,-28.7179218],[151.3943629,-28.9797786],[151.9894069,-28.7355674],[151.9290401,-28.4983634],[152.4924635,-28.2353023],[153.5790657,-28.1415563],[153.6969246,-28.6498321],[153.2584694,-30.9735401],[152.7543708,-32.508492],[151.9087862,-33.0553457],[151.2583364,-34.3808144],[151.0144178,-35.1156752],[150.4615355,-36.1202975],[150.4127518,-36.6178579],[149.9784687,-37.5069984],[148.2013511,-36.805656],[148.0791803,-36.8171632],[147.8854228,-36.0901856],[147.6902879,-36.0441802],[146.828442,-36.188678],[145.2348401,-35.9849909],[144.8445703,-36.2149218],[144.5193454,-36.1295974],[143.2021846,-35.1317425],[142.4785593,-34.811943],[140.9937045,-34.070169],[141.0025961,-34.0197399],[140.998648,-28.9989332]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"LPI_NSW_Administrative_Boundaries_Parish","name":"LPI NSW Administrative Boundaries Parish","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=3&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[159.0033934,-31.4876656],[159.0378887,-31.7055793],[159.3109766,-31.8595241],[159.3727807,-31.7789183],[159.1744327,-31.4373999],[159.0033934,-31.4876656]],[[140.998648,-28.9989332],[148.9451961,-28.9948656],[149.4856226,-28.5615019],[150.2991369,-28.5337256],[151.0954036,-28.7179218],[151.3943629,-28.9797786],[151.9894069,-28.7355674],[151.9290401,-28.4983634],[152.4924635,-28.2353023],[153.5790657,-28.1415563],[153.6969246,-28.6498321],[153.2584694,-30.9735401],[152.7543708,-32.508492],[151.9087862,-33.0553457],[151.2583364,-34.3808144],[151.0144178,-35.1156752],[150.4615355,-36.1202975],[150.4127518,-36.6178579],[149.9784687,-37.5069984],[148.2013511,-36.805656],[148.0791803,-36.8171632],[147.8854228,-36.0901856],[147.6902879,-36.0441802],[146.828442,-36.188678],[145.2348401,-35.9849909],[144.8445703,-36.2149218],[144.5193454,-36.1295974],[143.2021846,-35.1317425],[142.4785593,-34.811943],[140.9937045,-34.070169],[141.0025961,-34.0197399],[140.998648,-28.9989332]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"LPI_NSW_Administrative_Boundaries_StateForest","name":"LPI NSW Administrative Boundaries State Forest","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=2&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[159.0033934,-31.4876656],[159.0378887,-31.7055793],[159.3109766,-31.8595241],[159.3727807,-31.7789183],[159.1744327,-31.4373999],[159.0033934,-31.4876656]],[[140.998648,-28.9989332],[148.9451961,-28.9948656],[149.4856226,-28.5615019],[150.2991369,-28.5337256],[151.0954036,-28.7179218],[151.3943629,-28.9797786],[151.9894069,-28.7355674],[151.9290401,-28.4983634],[152.4924635,-28.2353023],[153.5790657,-28.1415563],[153.6969246,-28.6498321],[153.2584694,-30.9735401],[152.7543708,-32.508492],[151.9087862,-33.0553457],[151.2583364,-34.3808144],[151.0144178,-35.1156752],[150.4615355,-36.1202975],[150.4127518,-36.6178579],[149.9784687,-37.5069984],[148.2013511,-36.805656],[148.0791803,-36.8171632],[147.8854228,-36.0901856],[147.6902879,-36.0441802],[146.828442,-36.188678],[145.2348401,-35.9849909],[144.8445703,-36.2149218],[144.5193454,-36.1295974],[143.2021846,-35.1317425],[142.4785593,-34.811943],[140.9937045,-34.070169],[141.0025961,-34.0197399],[140.998648,-28.9989332]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"LPI_NSW_Administrative_Boundaries_Suburb","name":"LPI NSW Administrative Boundaries Suburb","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=7&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[159.0033934,-31.4876656],[159.0378887,-31.7055793],[159.3109766,-31.8595241],[159.3727807,-31.7789183],[159.1744327,-31.4373999],[159.0033934,-31.4876656]],[[140.998648,-28.9989332],[148.9451961,-28.9948656],[149.4856226,-28.5615019],[150.2991369,-28.5337256],[151.0954036,-28.7179218],[151.3943629,-28.9797786],[151.9894069,-28.7355674],[151.9290401,-28.4983634],[152.4924635,-28.2353023],[153.5790657,-28.1415563],[153.6969246,-28.6498321],[153.2584694,-30.9735401],[152.7543708,-32.508492],[151.9087862,-33.0553457],[151.2583364,-34.3808144],[151.0144178,-35.1156752],[150.4615355,-36.1202975],[150.4127518,-36.6178579],[149.9784687,-37.5069984],[148.2013511,-36.805656],[148.0791803,-36.8171632],[147.8854228,-36.0901856],[147.6902879,-36.0441802],[146.828442,-36.188678],[145.2348401,-35.9849909],[144.8445703,-36.2149218],[144.5193454,-36.1295974],[143.2021846,-35.1317425],[142.4785593,-34.811943],[140.9937045,-34.070169],[141.0025961,-34.0197399],[140.998648,-28.9989332]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"NSW_LPI_BaseMap","name":"LPI NSW Base Map","type":"tms","template":"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Base_Map/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,19],"polygon":[[[140.9948644,-28.952966],[148.9611382,-28.8997729],[148.9870097,-28.4862285],[151.013609,-28.4786485],[151.1084711,-28.7032909],[151.8759917,-28.683118],[151.9334839,-28.4078753],[152.25544,-28.2332683],[153.0660798,-28.2104723],[153.1408196,-28.1090981],[153.4735137,-28.1164808],[153.3576523,-27.693606],[159.4938303,-27.699252],[159.4856997,-37.8474137],[149.5256879,-37.8281502],[149.9159578,-37.4869999],[148.0485886,-36.8131741],[147.9680996,-36.1567945],[146.7147701,-36.2866613],[145.3004625,-36.1567945],[144.5300673,-36.1475101],[142.8397973,-35.0254303],[142.356863,-34.7802471],[141.9774146,-34.4016159],[140.9950258,-34.1371824],[140.9948644,-28.952966]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017"},{"id":"NSW_LPI_Imagery","name":"LPI NSW Imagery","type":"tms","template":"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Imagery/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,21],"polygon":[[[140.9868688,-28.9887829],[148.9951472,-28.9727491],[148.9966717,-28.4915066],[151.0029027,-28.4930697],[151.0029027,-28.7261663],[151.4915093,-28.7323921],[151.4918687,-28.7155337],[151.9228213,-28.719635],[151.9251607,-28.4897139],[151.9955886,-28.4898718],[151.9989947,-28.1192742],[152.4967606,-28.122091],[152.4968241,-28.1146398],[153.0044563,-28.1154389],[153.0044563,-28.120397],[153.5038629,-28.119345],[153.5039264,-28.1227063],[153.5919395,-28.1223619],[153.5926582,-28.1776872],[153.6111186,-28.1757867],[153.6113881,-28.1825173],[153.7426846,-28.2162084],[153.7787253,-28.710911],[152.6237954,-32.5877239],[152.3123961,-32.6328837],[151.4141942,-33.5790388],[150.8929925,-35.2648721],[150.4620695,-35.7777256],[150.0156501,-37.5103569],[149.9918121,-37.5126787],[149.519778,-37.5130704],[149.5199577,-37.5216919],[149.4462958,-37.5353701],[149.063344,-37.5357975],[148.9836635,-37.5217631],[148.9816872,-37.5191982],[148.9863847,-37.2584972],[148.4875376,-37.265846],[148.4824774,-37.0092669],[147.994386,-37.014339],[147.988288,-36.5332184],[147.9529707,-36.5260725],[147.9486513,-36.0685992],[147.5034997,-36.0716798],[147.5047701,-36.2651047],[146.4919996,-36.266129],[146.4922536,-36.2565],[145.9929826,-36.2534267],[145.9965866,-36.0188147],[145.9831568,-36.0187058],[145.9624506,-36.0219026],[145.946236,-36.0120936],[145.9454275,-36.0060259],[145.5041534,-36.0013564],[145.5037941,-36.0109125],[145.0072008,-36.0036213],[145.0035404,-36.1520424],[144.4860806,-36.1423149],[144.4874127,-36.0137522],[143.9874676,-36.0024134],[143.9932853,-35.5723753],[143.4971691,-35.5837101],[143.4917967,-35.4065648],[143.4613438,-35.3674934],[143.4585591,-35.3555888],[143.4897755,-35.3396522],[143.4895509,-35.332214],[143.4316994,-35.2570613],[143.2505542,-35.2606556],[143.2438356,-35.0132729],[142.9933305,-35.0177207],[142.9919767,-34.7961882],[142.4971375,-34.8032323],[142.4973172,-34.8007613],[142.4211401,-34.8017571],[142.4209155,-34.7838306],[142.2330892,-34.7859191],[142.2307707,-34.7807542],[142.2269959,-34.5061271],[141.9975302,-34.5083733],[141.9945959,-34.2526687],[141.4982345,-34.2556921],[141.498171,-34.2522794],[140.9945397,-34.2528411],[140.9868688,-28.9887829]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","best":true},{"id":"NSW_LPI_Imagery_Dates","name":"LPI NSW Imagery Dates","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Imagery_Dates/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=0&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[140.9868688,-28.9887829],[148.9951472,-28.9727491],[148.9966717,-28.4915066],[151.0029027,-28.4930697],[151.0029027,-28.7261663],[151.4915093,-28.7323921],[151.4918687,-28.7155337],[151.9228213,-28.719635],[151.9251607,-28.4897139],[151.9955886,-28.4898718],[151.9989947,-28.1192742],[152.4967606,-28.122091],[152.4968241,-28.1146398],[153.0044563,-28.1154389],[153.0044563,-28.120397],[153.5038629,-28.119345],[153.5039264,-28.1227063],[153.5919395,-28.1223619],[153.5926582,-28.1776872],[153.6111186,-28.1757867],[153.6113881,-28.1825173],[153.7426846,-28.2162084],[153.7787253,-28.710911],[152.6237954,-32.5877239],[152.3123961,-32.6328837],[151.4141942,-33.5790388],[150.8929925,-35.2648721],[150.4620695,-35.7777256],[150.0156501,-37.5103569],[149.9918121,-37.5126787],[149.519778,-37.5130704],[149.5199577,-37.5216919],[149.4462958,-37.5353701],[149.063344,-37.5357975],[148.9836635,-37.5217631],[148.9816872,-37.5191982],[148.9863847,-37.2584972],[148.4875376,-37.265846],[148.4824774,-37.0092669],[147.994386,-37.014339],[147.988288,-36.5332184],[147.9529707,-36.5260725],[147.9486513,-36.0685992],[147.5034997,-36.0716798],[147.5047701,-36.2651047],[146.4919996,-36.266129],[146.4922536,-36.2565],[145.9929826,-36.2534267],[145.9965866,-36.0188147],[145.9831568,-36.0187058],[145.9624506,-36.0219026],[145.946236,-36.0120936],[145.9454275,-36.0060259],[145.5041534,-36.0013564],[145.5037941,-36.0109125],[145.0072008,-36.0036213],[145.0035404,-36.1520424],[144.4860806,-36.1423149],[144.4874127,-36.0137522],[143.9874676,-36.0024134],[143.9932853,-35.5723753],[143.4971691,-35.5837101],[143.4917967,-35.4065648],[143.4613438,-35.3674934],[143.4585591,-35.3555888],[143.4897755,-35.3396522],[143.4895509,-35.332214],[143.4316994,-35.2570613],[143.2505542,-35.2606556],[143.2438356,-35.0132729],[142.9933305,-35.0177207],[142.9919767,-34.7961882],[142.4971375,-34.8032323],[142.4973172,-34.8007613],[142.4211401,-34.8017571],[142.4209155,-34.7838306],[142.2330892,-34.7859191],[142.2307707,-34.7807542],[142.2269959,-34.5061271],[141.9975302,-34.5083733],[141.9945959,-34.2526687],[141.4982345,-34.2556921],[141.498171,-34.2522794],[140.9945397,-34.2528411],[140.9868688,-28.9887829]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"NSW_LPI_TopographicMap","name":"LPI NSW Topographic Map","type":"tms","template":"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Topo_Map/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,16],"polygon":[[[140.9988422,-28.9992444],[148.9502438,-28.9993736],[148.9498845,-28.9665265],[148.9998308,-28.9665265],[149.0000917,-28.8165829],[149.1000729,-28.8165829],[149.0997046,-28.7488533],[148.9998504,-28.7497444],[148.9998169,-28.5000304],[151.0000514,-28.5005192],[151.0005904,-28.7325849],[151.0239466,-28.7327424],[151.0241262,-28.7418794],[151.0329297,-28.7418794],[151.033828,-28.7505431],[151.999984,-28.7495314],[151.999984,-28.7164478],[152.0334014,-28.7166053],[152.0332217,-28.683196],[152.0000739,-28.6833537],[151.9998769,-28.6416273],[151.9829886,-28.6413908],[151.9831683,-28.624912],[151.9331321,-28.6247543],[151.9334122,-28.500071],[151.9998875,-28.5002289],[151.9998556,-28.3749591],[152.2499739,-28.3750718],[152.2499356,-28.2500066],[152.9997192,-28.2498563],[152.9998989,-28.2832447],[153.1165002,-28.2834029],[153.11659,-28.2498563],[153.1666262,-28.2500146],[153.166716,-28.2331582],[153.2499898,-28.2332373],[153.2500265,-28.1249689],[153.6249628,-28.1250833],[153.6248398,-28.4999134],[153.7497955,-28.4999924],[153.7495877,-28.7497976],[153.6248117,-28.7501127],[153.6249745,-28.9999333],[153.4997672,-29.0000612],[153.4998417,-29.4995077],[153.3747962,-29.500055],[153.3754111,-29.8750302],[153.4999113,-29.8751403],[153.4999113,-30.0000922],[153.2498947,-29.9997621],[153.250025,-30.1917704],[153.2748185,-30.1916151],[153.2748185,-30.2168467],[153.2166077,-30.2166139],[153.2166077,-30.250065],[153.250025,-30.250065],[153.2497502,-30.3751935],[153.1243608,-30.3749743],[153.1246457,-30.6250359],[153.0331676,-30.6250482],[153.0333884,-30.8750837],[153.1249214,-30.8750291],[153.1249344,-31.1250505],[153.0082433,-31.1249736],[153.0082914,-31.2499759],[153.0000019,-31.250003],[152.9999392,-31.6249919],[152.8749386,-31.6250491],[152.8749572,-31.749954],[152.7832899,-31.7500034],[152.7831966,-31.8748579],[152.749914,-31.8750105],[152.7500397,-32.0000207],[152.6249044,-31.9999446],[152.6249078,-32.5000047],[152.4999757,-32.4999569],[152.5000336,-32.5666443],[152.4166699,-32.5663415],[152.4167598,-32.6249954],[152.3498477,-32.624991],[152.3498477,-32.6332294],[152.2830786,-32.6332218],[152.2832583,-32.6249755],[152.2494816,-32.6249755],[152.2498101,-32.874906],[151.8745693,-32.8750443],[151.8748535,-33.0000091],[151.7497706,-33.0001533],[151.7504669,-33.2500398],[151.6252418,-33.2497393],[151.6250828,-33.3751621],[151.499585,-33.3751442],[151.5003127,-33.6249385],[151.3741466,-33.6243658],[151.3727902,-34.001962],[151.2477819,-34.0011194],[151.2477819,-34.2493114],[150.9957327,-34.2501515],[151.0008143,-34.62483],[150.8717407,-34.6265026],[150.872757,-35.1242738],[150.7670589,-35.1234425],[150.7690916,-35.2463774],[150.6257894,-35.2496974],[150.6280314,-35.3751485],[150.4999742,-35.3751485],[150.4959088,-35.6275034],[150.3719169,-35.6250251],[150.3749658,-35.7537957],[150.2672351,-35.7513213],[150.2652024,-35.8741232],[150.2479249,-35.870829],[150.2458922,-36.374885],[150.1229166,-36.374885],[150.1259656,-36.6224345],[150.0253491,-36.6240658],[150.0283981,-36.7471337],[149.9928266,-36.7495768],[150.0040062,-37.1224477],[150.0588879,-37.1273097],[150.0568553,-37.37809],[149.9979083,-37.3732441],[149.9999409,-37.4830073],[149.987745,-37.4846202],[149.9857123,-37.5080043],[148.0684571,-36.80624],[147.9930603,-36.1379955],[147.8148345,-36.0055567],[147.3893924,-36.0113701],[147.3822059,-36.1310306],[146.9972549,-36.1275479],[146.9886311,-36.2528271],[146.4956356,-36.2447132],[146.5042595,-36.126387],[145.0011817,-36.0079505],[145.0154103,-36.2542074],[144.5072465,-36.2476506],[144.4991158,-36.0211037],[143.9965422,-35.9810531],[143.3382568,-35.2331794],[142.4097581,-34.7669434],[142.0361436,-34.3758837],[140.9965216,-34.1385805],[140.9988422,-28.9992444]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017"},{"id":"orthophoto_lyon_2012","name":"Lyon Orthophoto 2012-03 10cm","type":"wms","template":"https://download.data.grandlyon.com/wms/grandlyon?language=fre&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1830_5150_10cm_CC46,1830_5155_10cm_CC46,1830_5160_10cm_CC46,1830_5165_10cm_CC46,1830_5170_10cm_CC46,1830_5175_10cm_CC46,1830_5180_10cm_CC46,1830_5185_10cm_CC46,1830_5190_10cm_CC46,1835_5150_10cm_CC46,1835_5155_10cm_CC46,1835_5160_10cm_CC46,1835_5165_10cm_CC46,1835_5170_10cm_CC46,1835_5175_10cm_CC46,1835_5180_10cm_CC46,1835_5185_10cm_CC46,1835_5190_10cm_CC46,1840_5150_10cm_CC46,1840_5155_10cm_CC46,1840_5160_10cm_CC46,1840_5165_10cm_CC46,1840_5170_10cm_CC46,1840_5175_10cm_CC46,1840_5180_10cm_CC46,1840_5185_10cm_CC46,1840_5190_10cm_CC46,1845_5150_10cm_CC46,1845_5155_10cm_CC46,1845_5160_10cm_CC46,1845_5165_10cm_CC46,1845_5170_10cm_CC46,1845_5175_10cm_CC46,1845_5180_10cm_CC46,1845_5185_10cm_CC46,1845_5190_10cm_CC46,1850_5155_10cm_CC46,1850_5160_10cm_CC46,1850_5165_10cm_CC46,1850_5170_10cm_CC46,1850_5175_10cm_CC46,1850_5180_10cm_CC46,1850_5185_10cm_CC46,1855_5155_10cm_CC46,1855_5165_10cm_CC46,1855_5170_10cm_CC46,1855_5175_10cm_CC46,1855_5180_10cm_CC46,1855_5185_10cm_CC46,1860_5155_10cm_CC46,1860_5160_10cm_CC46,1860_5165_10cm_CC46,1860_5170_10cm_CC46,1860_5175_10cm_CC46,1860_5180_10cm_CC46,1860_5185_10cm_CC46,1865_5155_10cm_CC46,1865_5160_10cm_CC46,1865_5165_10cm_CC46,1865_5170_10cm_CC46&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2012-03-01T00:00:00.000Z","startDate":"2012-03-01T00:00:00.000Z","polygon":[[[4.690486,45.546522],[4.831309,45.546522],[4.831309,45.571307],[4.883437,45.571307],[4.883437,45.59745],[5.166222,45.59745],[5.166222,45.745327],[5.107934,45.745327],[5.107934,45.881452],[4.906982,45.881452],[4.906982,45.92107],[4.84377,45.92107],[4.84377,45.940115],[4.715432,45.940115],[4.715432,45.870179],[4.674581,45.870179],[4.674581,45.717805],[4.695675,45.717805],[4.690486,45.546522]]],"terms_url":"http://smartdata.grandlyon.com/imagerie/orthophotographie-2012-du-grand-lyon/","terms_text":"Grand Lyon Smart Data DSIT"},{"id":"orthophoto_lyon_2015_8cm","name":"Lyon Orthophoto 2015-05 8cm","type":"wms","template":"https://download.data.grandlyon.com/wms/grandlyon?language=fre&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1835_5155_8cm_CC46,1835_5160_8cm_CC46,1835_5165_8cm_CC46,1835_5170_8cm_CC46,1835_5180_8cm_CC46,1835_5175_8cm_CC46,1845_5175_8cm_CC46,1845_5180_8cm_CC46,1845_5185_8cm_CC46,1845_5190_8cm_CC46,1850_5165_8cm_CC46,1850_5160_8cm_CC46,1850_5155_8cm_CC46,1850_5170_8cm_CC46,1850_5175_8cm_CC46,1850_5180_8cm_CC46,1850_5185_8cm_CC46,1855_5155_8cm_CC46,1855_5160_8cm_CC46,1855_5185_8cm_CC46,1855_5180_8cm_CC46,1855_5175_8cm_CC46,1855_5170_8cm_CC46,1855_5165_8cm_CC46,1860_5160_8cm_CC46,1860_5155_8cm_CC46,1860_5165_8cm_CC46,1835_5185_8cm_CC46,1835_5190_8cm_CC46,1835_5195_8cm_CC46,1840_5160_8cm_CC46,1840_5155_8cm_CC46,1840_5150_8cm_CC46,1830_5195_8cm_CC46,1830_5190_8cm_CC46,1830_5175_8cm_CC46,1830_5170_8cm_CC46,1830_5165_8cm_CC46,1830_5160_8cm_CC46,1830_5155_8cm_CC46,1830_5180_8cm_CC46,1830_5185_8cm_CC46,1835_5150_8cm_CC46,1860_5170_8cm_CC46,1860_5175_8cm_CC46,1840_5180_8cm_CC46,1840_5175_8cm_CC46,1840_5185_8cm_CC46,1840_5190_8cm_CC46,1840_5195_8cm_CC46,1845_5150_8cm_CC46,1845_5155_8cm_CC46,1845_5160_8cm_CC46,1845_5170_8cm_CC46,1845_5165_8cm_CC46,1840_5170_8cm_CC46,1840_5165_8cm_CC46,1860_5180_8cm_CC46,1860_5185_8cm_CC46,1865_5155_8cm_CC46,1865_5160_8cm_CC46,1865_5165_8cm_CC46,1865_5170_8cm_CC46,1830_5150_8cm_CC46&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-05-01T00:00:00.000Z","startDate":"2015-05-01T00:00:00.000Z","polygon":[[[4.664889,45.546882],[4.882528,45.543476],[4.884346,45.597449],[5.166229,45.592416],[5.17217,45.745324],[5.107932,45.746531],[5.113048,45.88145],[4.906978,45.885083],[4.908215,45.921064],[4.84377,45.922124],[4.844965,45.958104],[4.677293,45.96069],[4.664889,45.546882]]],"terms_url":"http://data.grandlyon.com/imagerie/orthophotographie-2015-du-grand-lyon/","terms_text":"Métropole de Lyon DINSI","best":true},{"id":"major_isidoro","name":"Major Isidoro AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Major%20Isidoro&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.94048110193,-9.57587518044],[-36.94106045907,-9.48535688436],[-37.03214827722,-9.48605530547],[-37.03164402192,-9.57639356782],[-36.94048110193,-9.57587518044]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"Mapbox","name":"Mapbox Satellite","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmap/cj8gojt0i1eau2rnn7q4mdgu7/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJhNVlHd29ZIn0.ti6wATGDWOmCnCYen-Ip7Q","scaleExtent":[0,22],"terms_url":"http://www.mapbox.com/about/maps/","terms_text":"Terms & Feedback","default":true,"description":"Satellite and aerial imagery.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAC0CAYAAABsb0igAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAJhxJREFUeNrsnf9VG0kSx9u8/X91EawcwcoRMERgEYFFBEAEiAiACCRHgBwB4wgsR4A2ArQRcFOm5m6WRWgkdfdU93w+782T7x4r9VT/qm9XdbdzAAAAAAAAkfiACcLy/Pw8qD5GLf98+eHDhzVWAwAAAAAECLwlLobVx1AFhgiNP/Wz/v8PYaWP8L16RJgs5f+rRMoK6wMAAAAAAiR/sVGoyBg1REdXlCpIfrqXyMmSWgIAAAAABEjagmNcPccqPAbGi7xWUSLRkhJBAgAAAAAIEPuiQwTHZxUcw8RfZ6WC5FslRhbULgAAAAAgQGyJDvkcZPqaEh1ZIEYAAAAAAAHSjeiQ/RtfqmeSsejYJkbuSNMCAAAAAARIWOEhguPctT8WN3eWKkTmmAIAAAAAECB+RIdEOC5UeAyo8jeRqMhd9dxyDwkAAAAAIED2Ex7D6uPK5b23IwTz6rnmrhEAAAAAQIDsJjwmVC9CBAAAAAAQIKGEB6lWYbh2pGYBAAAAAALkH+JjUn3cIDyCIeJDoiG3mAIAAAAAeitAKuFRqPDgVKs4yKlZl5UQKTEFAAAAAPRGgGi6lezzuKAKO2GuQoS0LAAAAADIW4DozeUzR7pV14j4OONmdQAAAADIUoBo1EPSrSZUmykWKkSIhgAAAABAHgKkEh+yx+O+eoZUmUlWKkJKTAEAAAAASQuQSnzIPo8bqioJ5KSsKWYAAAAAgOQEiKZcyV6PMdWUFGX1nJKSBQAAAADJCBBNuRLxwfG6abJSEbLEFAAAsKcfcMgCZElaMAACZJdBp3Av+z045SptOCULAAD28QOG1cejh686QYQA2OTI2KAzqT4eEB9ZIHV4r3UKAADQFl/zRoEpARAg28SHbDSfUSXZMavqlnoFAAAAgF/8ZkR8iIM6oTqyZVLVsfvw4cMZpgAAAADoN51HQBAfvRIhREIAAAAAECCID0CEAAAAAEDmAgTxgQgBAAAAAAQI4gMQIQAAAACQjwBBfAAiBAAAAAABEkt8TBEf8EqE3GAGAAAAAARICPEhwuMKk8MrLrisEAAAAAAB4lt8jByXDMJm5LLCAjMAAAAAIEB8iI9h9fGAqWEL9ypUAQAAAAABsrf4GIhjWT0DTA1bkDYy0zYDAAAAAJnyW+Dvlw3GrGq/z7J61tWzqp6/NvzN7w07Fhnbok7VO6VZAAAAACBAdkI3Fk8w8b/ERlk9P+XfHz58WO5p24E66yJG/tTPXCIH4+r9Lirb3NJcAAAAABAgbR1kcY45XvWFRfV8E+FROdUrH19Yfc9ahUz5yuZfxIGvnmHiNrup3qfcV6ABAAAAgF1C7QGRNJo+5/KL0Lisnv9UTvRp9cx9iY93RIlEVC6r52P1Pz9Vj0QQ1gnbkP0gAAAAAAiQ7ejFcn3d91FWz4mIAEkh0khFdGoxUv1TxMiZCqLUkDbEvTEAAAAACJB3xUdRfVz00I5LFR7ylFYKJQJIoy+pCpEL7gcBAAAAQIC8R98uG5QIx1nl4H+yJDw2iJFaiFy6tFKzSMUCAAAAQID8m8pJnLr0Nz/vgmwul1SreUqF1tOlRIikUm5pU6RiAQAAACBA/iE++uQkSvTgVDeXJ7nJW1OzJCXrxKWRlnXBLekAAAAACJAmfUm9qvd6LHJ4GU0bkxOzUngfjnUGAAAAQID8in7IvRNFD2y1UPGR1d0UGg2Rm8cvjRe10MstAQAAAKDPAsT1Y2V6nnLKVUshIntDJCXL8juyFwQAAACgzwJEV6SHPRAfZ31oDJqSZVmEDPWwAwAAAADomwDRo1Fzj370Rnw0RMjS2d6cfs6xvAAAAADp8tsB/61cOJizI9g78dEUIZWTL5vTHw3W8UDb3pTu6w89yU6e0Tt1XlbP2uo+KD0prX6HtxBRvbJ+Z09kmxX6z+KdP1vps8w5DZU6gx3GmUFL+8t4s8Jqrew6aMw/7516Ke15qb4KY3nKvuYBDcWic+qLUm41Z0D4NdA+GKxnGYA+MrEePNjLARKfdSLdtY5l4P9WPYuuJlgVTc132IVV4x3KPrSlRp0f6wQ/2rPvyeT/Xet+SW8K3saLvtWZptr62PN3Xb3vlD5jciwq1J7H7v2FrzZjeW3fEvvmL0B8DQ4WqY/axbm1LUIOmlgM2nh8SJttezS0rp5+qZ6J5z5zp5PrOoK9JvoOhaevlDKL/b7mtqKmE31trxB36Rxku0b5Bgf8/jxEu9O+ckgbK/e0SS2sQ9VZLb7vDEczOxMg1vtMBmPR8YHzXVv7fuvyygQPY1uTeeyFPh2HJp7qw98YXRXs8TlPntTo1jpt12UYG62rQQaD8lDf5VDG20RO9TxEqJNpqHoR4RFh7HlopLgkLWqrZxa5T0rdXOxS/57a5CyA/QpPNhnu+Jv3kevsh8XjzXUc8cF0R/t30WcmOe9rVP/hvkM/4aYLv87zOz/FvIxZ548nn/OqTycgVwpjHbcIMbl2PCH4ZJLB4HzhyRb3mwSsDsCxB/2x58HwIfI7PFhbjDBsq72FqK8fTNkB1nG+6zp7tDSe9tD+T7md8BhpwWinOTKmjxeojw4ild17vb31O/ucgnWeqVC/NhgOlRD0xIIjpGFsi/ZJnUGo79EVkx/uZdN+7He610n9oPcTgabvEHtxQH7vMRWnQIXmrCNbvVX/V2q/iYNNdTbUlcEHA3Umc8xMHY+iR/a/N2L/X31G7T9O3K4S8ZA9wjNn65oGseuDCpEY5VoE6KMXEepvGqDeyoMFiA5MI5cfpbX9BK/yj6042nJjuqW9McO+TJZ7tJ+JOqNdTgC1Ez/ao/y1Q931Ud9XPoRU6AnfvRwKYs3ZH6hTm2Q0KcIk/2jA8X3LyamdtJzTguqFjbFB+9+naP+GoL53tu+HG+u8NA1s48sA/tJ5yLFUv/s8kC0OEyDuZVNWbkgDsXjcblN0WImCWLRVrhG5Q8XHzEhxZIDfKc9cJ4UHQw51oe8wMlbPA13BvXe2TyQsdm0DGfdNcdJ+OPvR29pJKzKz/0Cd5Bvjfaa2/zgRu1oV1Nt8rB+h2rhuGr8LMJ+GXJQL0S+uNx12cbRLx3X2Vth8cGbtnO7G0YubBEmXIkTCigtD5hqzumpWfDSZtXFAG+LDWqRV2tiDFRHSSK9LJV2jjobMetw3C62zUUJ19qDRghzsP0rMSa5TWW8M27SOeqSaDl2P69NA/pJ8r++T5sYhRJN+p+/5ZPledtEuEZCk8xI3UHZ5TNsWZf6aiSFHO0Ro8aAOifQwLT52ESEWxcdrh2zUcT2P1U4pCu+Jnrw06GHftHiceRtuUheOjZTUFO1/YTElqyGoiwy6aMhU2xBZIyH6403sd99FgOSW6mIy9WrL2ctWoiAr5z+0eAg5pgbuytC4+GiKkPGGtj9z9leH61XJQUfjg4wN1lOutjFSIdcLEaIRhNQjPxPre6G29JnU7T+21GcSF9Sb+CWofC8wafrRte/53mfURsco33Pv9bZ7ho5aFm7o8tt8fmct9aqFyBgbmgBunZ0oyMhafn5HAiQVZq+jeSpKJgnZ+h5H6nAR0oN+KQt3N5m8S5GgcPycW5/p2v7q+OaaSjl0AaLcgVKxvGxI1/bke3F72eZgp7YRkNxSXFYWb9FucfOkNBQT+bi6IZ0oCOzDoOnA6wCY2oRWxDyiNzPx0XSo+tDWc6uze9pYP0WIRqmvetBnQ6TangUop4/FjRAbzy/b/FFbAZKbc3dttFxtOvY5UZBeiOTcGTUceOsn0mzsrzEib/obM5oMGBLftMduRUh0++t4PemJjb2LkECpWAdtSNf/1ned3ra9U++oRQGHma0iyMbzubVCtYh+NDsGUZB/M+Q0rOQ4DzQAxuQmwrjwQFMBY0xyu7k7McYxT8fSCOxVz2xcixBvfkWgVKxDxKjvNrTaRWS1iYDktrKccvSj6bhZWTG2JOaIgiQ4wCf+DkXguxJS33AO+XLFRbCdchHjnhCt475GvEIcOuI7FWuvDemBNp6f6cJ0K35r8TfHGTWmsm1oKCY7RD+anUIaz7TrsstG/qr8CyPOv2w4vGVeat8f3MuKxV/6v/9wL5vwUnEqZKCT1aTvjf/vT32HmFHbK7Wl73HhxnUbfS5fjTkjuowJVvr8zwFx3R1CIc7Zx12cjgyoxx0L9pcDPZahDtRR3+S+53auU95OPflMy8qut85vJossSs/btoNAG89vd/Wv2wiQnFaVrUY/zvdscLdGBv6vRtpJ4aCNUyn1tXiv7ejK2mdnMz1q7l5OsVtuGWDH2rdCO84SBRltO3Jwx4m/cHFTLaXs37R9LDe1DbXrSPvaZ0RJFCdsoSJ7uaXNj7Q+jrXtx4icDXw6Z9h/b/ufhBI4Ll4EtrZzucXOQ7XzZx2HYogSSXm7qMrla4HzWtvI0GM7uNmhH/red7ny7l/LJPicD48WRzeZ0Kvnac93mhp6jycj9ZyUYJY6jNX+90mX0JtuZ0bq9n6ffFwdx34ELtvMc7t4jNQmpofkOGv7uOm6/yfcLzfxcOhYJv+9fk9y464R+0882P8+UnknifYBGZcnh6Q46fgeY4568rkfJJB/XVj93RQHAdMd1ICNnwxdTGTFSU3qzP1IfWx2aDvRQasrJ/PJR/8NbOunhNrEk+b/+l5ImXbVRjKa+x58T+bad0MLkUefc1Fm9h9GsP+TZ/sPLS6ItShzaMH34LnMN7EX2gMsxt2Eco4envPgyRnkwOiHKWGlqxgWSGpTc4SJ9sLzAP8jdt999ngUYuB2OjIyJmyLIg0CtudhF/NGBgLk6Tlw9Fbbfsi2NU3c/heB7T9OyP4PKZTzHcH9mMJito73j7HsK23c8sLD68LmgslVcU+DbLgGYGvFpDNnJGEBMg1Q3sFznPQg7+Ijggi58FC2WUBbTiK264uU+3xkB1hE/TDiOP0jYBsbYP+t42dI537ooYzjgFGPUUQ731tv5w3B5Lt8w0iLWwctmhy9Y5ScNhdaurG7doAkVObjFAJpaI86YHcmRPT0hZUR+xYOFnrmuO96lk2ZstEtxuEHZz43djfeYe7CHEhxfGC7lb4cQiRIXZ3EvP9IN2vGaicpIyfXfAp1itFb47T8ngtzfLqZO6p2GSe1b8Sy/7p6Tly44+t9+BQhFmxlHP8UYjx/x84y/txab+d6ctSt5/JdbahXnz6i+BiLIALE5XO6SRlrcNlBeMyc35Mb6gb3qDmFw65sbaTO+34yjzh9Z6G+PNCNrq+5PXRw2/IO0wDt9dB+F1J8LGM3Qq2/E0TIu+LjrIsf1t8N4QRbuqOqjf1PuzhJMqD9x8+HbeieOP+nSi11DOrCzpeB5kLf7VzmU59+6qS5EPvs/8JfLz7GewLkz0wG+a8ZC49NyvxRUzliC5GfRuo8l7a7L5ehB3td4Q4lONcuzpHZviemQ4XveQA7diI+XonVUwdmxEdgJ7g+/to6Zcb2P8TR9D0GdSY+GnYWG98as/PrMoZYNLzZ8G8vc6ePOu1DBGTR1Q9HFB5vKuAOhMjSSJ0PXX9ZRky1CSUS7mJMWBoZnVuoNF159L1yfNql+GjYuXQBI3Ip9lFZJLCyWBFg3D5PwP4mRLGKkNKC/XWV3Kfft+5afDTsfBnAFzz3XMbS83w00r14vm88X/jKTshdgCxiN37d6HPRofDoUohYESBFj52baPuddMBcef5a6a+3OdprC599i8Ndb6UN3FbmrsPFIEOsVRiujdRLiD1dow7TgNtwZuzmdt/2H+65h/eL7/cyZuczz/PVMMDJdZee28KV83vjuddIzXsCJJU8zvf4Fll4TMXZdy/hLmsDcHAhYmmwSSgP2atzE3OjcSAHPuqigUYIVgbaqs+JbBniAAJPDkDf94NcW9mT2OgDUh7f0cyxYfsvjdk/RPrNTmIiwBh0a2kBJKCdPxsv48CzL+9VvB9taIxFJoN98BW3V8LjKgHhVguRh0D1bGVy7eNG9C5WmH1PMl97YreQztqlxcapE9el6y+l7p2yWDe+93R9MfiaK6PCvD6wwaf9x3v8vS/fJYSg9WVnsfHcstDWtmAxWrzwfTDM0TuqKXlnLORKaoLC4zUiPh4CCBErAmTYQwfnW+wf9LyauO5o1ex7x/XmcxVtYW3l8VV7kcl/6frJdY/KZzENy7r49bnyvWsa1rHPdmQs9SpkOx8EukDUWrQ4yMmamwRIDqvHwZwKddhTFR6bhMh9ZpN9HwVImfjvduWYrgz0wb44ucJdH/umZWGo4rD0PIYUhl5vFfJYb0/2l3Fo0ZH9xx7tPE/Azj7LeBygjEGP0rciKo9wxvYeqE+dnXsvDnW+zvTSnpz4vWcOzsr4qlOniwZb+nNnK/K6SulrEaO0lt++wd5zZydSiuj6Jz5TIC0dh37dw3bSyjH2PAZ9TcTOPttDEKFtKBUrWOroUQIDx77OWNCJWESI3mga8lbTGMLjo/UViz3p2x6Qvjl0tNN0J3/n+nUi1tr66vsrcbg22LZ70d48nyzY1v4+Heh5InYWG/vyEUcBD73pOhUraCQm1z0gZcwBQ8/y/phI58tdeACkxLCnTv3XHtXxoqflLay8T2LRYV/2bzu2/OHp95bWTniLOAYFEdsGUrGCntqXawpW9FQOqSTjQqRvwqOPx/BCevjKHy5TcrIsHH8ckW99La+Rjeh9tn8bETjqqZ1L6wJEx0rfJ6TtMqcEPbXv6EDl3IeGlboQKV0/Ix59PIYX+sv3BMvcl9Owyh6Xd0g729mH8Gn/Ngtxoz62c10EWUe08yHETsWKEnnJUYCsLYQBDQgRGQxOZJ9KZOFB5AGgPUWPnfmfPajf5A6H0PL6mkOHBt4nxb7hbX9CrDnb+ilvge18HLgNS3+MeZBClAtTc0zBsnbLaS1E/qMNKPRk1BQeXQwIRB4AOnB0EyxzSb1kX+4hbcxuu/GYIpdqO09GnAa4LHRjn4l1YWqOAuS70caz1ltYPwYSIl0LDxfwJAgAeH98WWIFHByEUzbEig72XYD8nVh5Y6RiRdv0TgSkWyHi47SLddfCowHRD4D2gn3YcxP0QTT9nWi5/6KNZcEfDmIIpyhjeYRUrOuYWxgQIB0Kkerj0sNX3RnKvUSAABibtIyPgQAIQMYYBEj7cfPWhYk41Yvj0chOgKR0DrWWdX5Ig6meW0Ov9KcDAAAAAO88Pz+PAwmegX43AmRPygTLfEg47c7YKiIREICWJHpqjM+JlPECQtP3RbHvNIF3KTx9T5TMG91nOwv4E7OYe3lzEyCrBJ0QKfN8z//cTPRDGy0OBUB3/S81+nBoRaoO8HEm9k+1jf3OqJYUsRaCbwK36dACJ2sBkurGuX2iIHNj0Y+xA4CuSFH8D3tQL5wMSBsz2589RmGLRO2czCZ9vdV+EsOXi5WKlZsASfLEiz2jINfGXuPYAfQcnSR2wdciAgLEJkXPy13Sxjrtz9EWKRM91c+XnVeBbRs1MuEipWId5eTIu7hX1fvmboe/nRvcbD+mLQDsjK+xNsVUn14sWqS21yW3vTl7LAp0XV5x5H05f0tPfxPTmU9RgITOvrmKLKajCJ6jzJy3ZM/81ovEypZ/bir6UQ2YE2cv1YCL2SAFfC0kFAm+e9GTOi76Wl4jBy0UPW4vbcYXX/7e58SEns9F02XAckp7uOjAROPQ4j2rFKwMzpVvIywsRj8+OwDYB18rZ8OUVq5jH/fI+LgTX4yJ677Z31t5W/oKvk7KKnrcL4O09Q5Sr14TNBXryPjAYUKBRhRQpdseBbEW/Rg6mxvQScGCFCg9fteXhN77S4/quEglP17L6UvIWpmTR6mIc3X2fM2nZeR6GiaW7ubLzmvNYAlB7NSrf9WpliGqAEnxNKlcHM73BIbF6MeVUTv+xLeFBPA5cU0ScnL7dmrepIfltDQGn/fQ/m3HltLjbyaxsOA5bXwZqIwi5i4MmOsilLDMbQ9I8myJgliLfgwSmlgBLPb3tccJbKATK864Pc6t39Wi5fPpqJeGXm+cyF05Pu3fKrXK8xg0SSTa59PO3wL1xZkhewVJxcrpFKycbvx8S2gsDEY/bgzbsHQAaeCzrV5ZftEATm4qyHtfGC/jhfO3Krw2sgE9Gfvr4oFP570M9Lepj0ESfR11ZOdd+qIlITcMUa857QHJhg1RkDtjnVga5ITaAjgYnytokoc9NfyuoW/ytYzZKIiO57lGP/7nGFtdndd24XNBr9zxUJ6vHn97YnwviE87r3zv/9D9ShZFnPdUrKMNDjACpHuuXw0m1gb0mWXjGbQXwHtt1Wfa67nFTbcRb/K1irW0ipDC8JvR98T+b49B4kSvPL+PRaE3dX4jC1971EZ/lc3nIsp7x/CmloaV1b4VdUqWb4gRC51YQpiFYfMhoCE15jk7ugZzmrtibG2fTlUeSffweSiAzMULo/Yv9H2tzae+28Q+44nPLAs5eezGmJ3FZ7kyYOdtAsnn4tG1Z/9x6NOGRxk5cTlePCcDgqnoRyKOBAIEUsP3Spo4AJb66b2zldPcJTMrESoth29HcWH8Tq4bKylCav+ZEfvPPZfjworY1tS7+wB2XnluCz4FkpTtVp+V53r1Mn69J0A4xrRjqsYtA8KZtcnT2c/h/k7rgcT6uiyg+F5omFjYD6JCqKCW/8FD1yJEf/8hwFffJWD/ewP2H6j9Bxbsr6LFtwiZGbHzvRU7b/GtfHItdar1emmxrO8JkNKBBcdkZaUsAUL1oVjSciBBQuQTX3UpQlR8TKjafzHoUoQ0xIdvp6wMeCkb9t/O6sCMiRDp3l3auRZ5owDtvPRYzqnnMpa6gF37kQvPPv3Ix7yS0x4QCNuRC2f72F3aLqS+2CATRogFh6vY6Vgy8VfPPeKjlRNcdDCWh3B+Qzmwoe0/jmz/USCn+GD764LnPICdf8ROx1I7/7Bo5zfK6XtvylsRD9/ZNFeHCsujdxri2pFLD//vIPeJFHfFKW6QMKEcOEnH+hHjGNKGgzWmOls7wdNIY/k0oPgoEzx98Fd6TkT7X6hTHML+q+aq94FjUIg9PJKONYtxFLWKHWnnwwTaue/Fodu3opDqF/meXw4q+9E2QzM/9F58hMpTDQXRD0gWdSBCteFfK4KhTgHSqMfUhVt1zJkrFYijQHUjKRNSLyHvF7jOwP5FIPvL/Twyj4bMIvCS56+Oaqh9PBMdg0La+d6F3at65rG8F57HyvWWfuh7Q/pBqVjbBAibeREfKYkP2izkwGXA7/514VnVtx99pUSo8JDvenTGb0E2Ti0QZ74iVeqQzSKIwkUGdy/9ityJA+vLQW7YX/pGEbDspeb5+1oImQZcCBmqnR8C2Tlk5PXaV4aF9nHvqVfvnYAWaEP63qlYREBgU+cImacaEtosJI06creBf0YmP3F0n+S8/n0mEHEeGpN+CqfjpcIvMacO2mTXlJVaEOqK+6MLvw9HnJqzjOw/Vgf5h9pxuKf97xO3f+g6LRp2vkjAzksVZr7wPWaWbVLwAmxIr99lZ37bUtBVVbkrx/ntfRUfqTkUq0ROYAHYxrU6QqHHXunjkgYgDsBaJyY5gn3l/h2qH+pzrAsTCI7wDlqhQlHGNXn+2uA8yN/9ofUSe9Ho0vi9H/vyvzs6Wtr/d/2Mbf/rEPseZS6t3ltWy28i2PnXfTTqb5Zq56X7916UUaOdFxFt7FXkaeqV7/LvEtk4U9HmrQ4lFWtXgfZbi79Z6AQF/RAf0ilCnJkdg5IahBwQh67qi2cuzD0N74mRsWPzuFVnuHZsLaW5LTxtfMb+e855lf2DRUvlu6tx6DjimCALHBOD9X/pa3EzUOrV7S7l0+DCtedynFffOd9FDB+1+Bty6vsjPiYuzchHzTdqETISISKor7EEGEUcjTPM0BmyKn8a4XekjvucWXDrWWT7Tr3atvF843s5vxvSB27HVKytAkTzxdb09ezFx8z5Pw4uNiU1CZmJkKl7iUIDmHN+M029SoWTGPbX3zjtqR8oK/reNm2HSr3apx0E2pBe7HLK4lHLv2MCzFd4DPV4xknir7JgMoRM6fsKJNjjlP123Y4JMe2vaTUnPRMhIj587vsYOv+pV+Uh0ZlAG9Kv2h4o0FaAkNqSp/ioL0XK4cx+2ihkiQrrE0QIGHJ+S8zQqf3nsX9UBU9fRIhX8aGEOCnQRwTD93u2TsU6atnwUkjDGjpoKzwGenTdjcvnJBuidIAIScyR6kHV5ZbCfJbYpvPb3PpMl/ZviJAV4mMnn0s28Re+27aPKFigG9JbpWId7fCF1h08BEi7jiCNIvRlPV0MGKRfASIER8oaPzNy2FKss7/pM0FEyCeXZ0T2OoD42Hlzdgv23Xj+nlD3PUZtTcXaRYB8xQVIWngUutcjp6hHDelX0DcRkqrzvu6R+MjFYZM6+5RqnTX6TJmw/U8s2V9sWj2fEh6H3rLxqeeLBmuCpF75XHQNtCF9q/A62qGApcs77Jar8BjqCVcp3mrehpWmCAL0RoToKl1qR/SurDlSOGxbWar4WGZgfxEhtwna/8Tqnhsdh1I/Iatu4979CE298p1tUoYYQwNtSH83Fetoxy+7M9yI/sQ1eVN4SLrVJONXJTIHfRUiU5dOes8iB0e2Zw6bpKN8CnHLdof2v0zI/rcqPpbGbfqrb7v09mGuQ7bxQKlXwmVAm4TYl3eltjhYgMwNN6bc0ooQHum3SYDQk3+pk7/VlV2Z2CW1gTsj/umwfTTssNWr7tPM7T833GfE/pep9Blx4KWPq7hLQbDWCyIh23iI1KvbkII00Ib0jULsaMfCrXH4zAqPomfC45f4yGl1DmDPSWOtK7siREojxao3SX4iRXJjnYmzZmmD9K88cF0RLntg/zNna29IvSL/MVX7S1+X8ruXlXSL4qlUcXca0nfQzdfjEO0jgo1CbEgfVzYZHSRAFKt5x0UPRYccpzvRzeUPPRIeNTmkXy2Nfc8+fPc4wHbFytj37DP5LzXPvUunqp4kxYmatljBXSfebg6ts1L3hnR52WSzzqxE0tYxvkftb6rPZCLwZHHwP9quVwaKtFDhcZKwuI4SEQu0Id2r4/vwbJAeCQ9Rk7PnfvOQUX0eWpc/NuVYRhTCPxJ/B+lTTwe+w9RYuxpp23qK0B+l/i52rUNdQDkEebdJANtNPdlluuPvFhHH9h8hbOdxTHmIPaY07B+rz0y6HPci1mdMu9Y8aj8eJjqvN8e4aQfln3isrzdTsD7s25jcy4q7NbLd5KinKXx2L2E99rsYPhlkz/qVQXKfgXJlJQ1NQ6z7tM21lX6rY9s+LC3na6ujeex5/JA6kyOwF4fUnzpge53QF2oM0An/ysNXXe+zqq02qcf8wnOdfdU6WznjdDWmNOwfqs/0Nn244csUzv/9bTIefD90TDIwr5uZGw/og1t9lA8HFOrB2Ut7ysYpbeQQ1gMgNAYZDZsDwH4Tijx/6mebSVLGVRFYP/Xfy5w3lXctQDbUmcy3f1Bn9JmM7DpUe9a2rRcjtjm8K33EOf9LbVti0bT47ZCB1aAAGblELxtqDHDHgVYGcuIaEwDsh66oLbEEdQbYv2O71kKCgyoQIDs1nLJymktjIiSJ1KSG2Biq4Bg50qraUrLSAQAAANBDAaLITvkfht7nvHLuxaGXlYq/3f+jIdFDn41c8vrz2P0/vAj7Q/QDAAAAoK8CRMKSlaM9d3aOfx2ow187/VcNQSAfa/fPMGotVDaxbCEYjhv/JpIRlgXRDwAAAIAeCxBFVqRTOZlp4P6ZMlbQBJLiEhMAAAAApM3RoV+gm4juMCUE5ppbzwEAAAAQILUImTpOiIBwiPC4xQwAAAAACJAmpMdAKM44Px0AAAAAAfIPdHMwq9TgmzkbzwEAAAAQIJuQDekrzAqekKgHkTUAAAAABMjbaJrMGWYFT5ySegUAAACAANkmQkpHKhYczi2pVwAAAAAIkLYiRNJmOBUL9kXaDjeeAwAAACBAduLUveTwA+zCrzQ+Uq8AAAAAECA7oZfGsR8EduWyajtEzwAAAAAQIHuJkIUjlQbaI/s+5pgBAAAAAAFyiAiZVh8LTA1bKHXvEAAAAAAgQA5GUrFIq4FNSNs4xQwAAAAACBAv6IbiE8emdPg30ia47wMAAAAAAYIIgSji40QPLAAAAAAABIh3EbJEhECDE068AgAAAECAxBIh0G/OEB8AAAAACJCYIoQ7QvotPuaYAQAAAAABElOEzFWEkI6F+AAAAAAABEg0EcKekH6wRnwAAAAAwFHXBWBjem/ExwniAwAAAACOLBSiIUJWVEm24oMN5wAAAABgQ4A0RMgnx43pOSF1+RHxAQCJsTb2PQAAWfHBWoGen58H1cdN9UyonqRZuJc9H0zAAJAUOg89VM/ogK8pq+eUMRAAIAEB0pgALlSIQHpcV5PuFDMAQOJCRATIYI//dFWNgSssCACQmADRwb+oPu73nAAgPvVJVwtMAQAAAADJCRAVIQMVIQXVZRrZ53HKqh8AAAAAvMeR9QJK/mz1yAlZ11SXWSTl6hPiAwAAAAC2+vcpFVbzcWfusI2B4A8RHKeccgUAAAAAbTlKqbDi6MpKuyMaYoHb6vmE+AAAAACAnXz6VAuu0RA5JaugGqMiguMM4QEAAAAAvRIgDSEyUSHCSVlhkROuZK/HLaYAAAAAgN4KEBUhIj7k3pArqjQItyo+uFALAAAAABAgDSEyVBEyoWq9MFfhscIUAAAAAIAAQYggPAAAAAAAAYIQQXgAAAAAAPROgDSESL1H5NyxWf01sq/jTsQHwgMAAAAAECD+xcik+vjiOL63rJ6vleiY0w0AAAAAAAESXogM3UtqloiRYU9ee1U9i+q5I9oBAAAAAAiQ7sTISIXIOEMxUouOr1weCAAAAAAIEHtiZKhC5Fg/U6Ssnm8iPIh0AAAAAAACJC1BUriX/SJ/6qe1TeyyiVwiG99FeFSCo6TWAAAAAAABko8gGVYfI31ElNT/OwYiNFbV81P/vSTCAQAAAAAIkH4Kk4EKkUFDkPy+hzgRYfF3498S4VghNAAAAAAgB/4rwAB4xMkVHiVS4wAAAABJRU5ErkJggg=="},{"id":"mar_vermelho_al","name":"Mar Vermelho AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Mar%20Vermelho&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.34201321548,-9.49288996873],[-36.34219560569,-9.47533412032],[-36.34275350517,-9.4029001574],[-36.344727611,-9.4029001574],[-36.34537134116,-9.40279431056],[-36.34702358192,-9.40293191144],[-36.35080013221,-9.40291074208],[-36.35899696296,-9.40306951227],[-36.36108908599,-9.40299541952],[-36.36289153045,-9.40306951227],[-36.36589560455,-9.40304834292],[-36.36712942069,-9.4030060042],[-36.37571248954,-9.40306951227],[-36.38048682159,-9.40308009695],[-36.38663444465,-9.40319652837],[-36.3885227198,-9.40312243565],[-36.39285716956,-9.40324945173],[-36.396558618,-9.40321769772],[-36.40309247916,-9.40327062108],[-36.41973290389,-9.40337646777],[-36.43368039077,-9.4033976371],[-36.43355164474,-9.41685048724],[-36.43344435638,-9.4238571931],[-36.43337998336,-9.43753150237],[-36.43329415267,-9.45011519778],[-36.4330044741,-9.49358837449],[-36.40839252418,-9.49350371932],[-36.40442285484,-9.49353546501],[-36.40007767623,-9.49351430122],[-36.397867536,-9.49341906413],[-36.3916769976,-9.49328149941],[-36.38756785339,-9.49331324512],[-36.38535771316,-9.49340848223],[-36.37673172897,-9.49331324512],[-36.37427482551,-9.49318626226],[-36.36706504768,-9.49298520596],[-36.36501583999,-9.49299578788],[-36.36043462699,-9.49298520596],[-36.35955486243,-9.49295346022],[-36.35895404762,-9.49303811553],[-36.35703358596,-9.49294287831],[-36.35664734786,-9.49299578788],[-36.35260257667,-9.49299578788],[-36.34766731208,-9.49297462405],[-36.34201321548,-9.49288996873]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"geodata.md.gov-MD_SixInchImagery","name":"MD Latest 6 Inch Aerial Imagery","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/MD_SixInchImagery/http://geodata.md.gov/imap/services/Imagery/MD_SixInchImagery/MapServer/WmsServer","endDate":"2016-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[-76.234131,37.920368],[-76.598053,38.158317],[-76.940002,38.270532],[-77.038193,38.413786],[-77.23526,38.33627],[-77.312164,38.410558],[-77.262726,38.566422],[-77.042999,38.713376],[-77.049866,38.793697],[-76.92627,38.892503],[-77.040939,38.984499],[-77.12162,38.925229],[-77.150116,38.955137],[-77.252426,38.975425],[-77.259293,39.024252],[-77.34581,39.054918],[-77.461853,39.070379],[-77.537384,39.139647],[-77.474213,39.224807],[-77.572746,39.304284],[-77.723465,39.328986],[-77.777023,39.463234],[-77.861481,39.516225],[-77.840881,39.608862],[-77.956238,39.59299],[-78.166351,39.695564],[-78.270035,39.621557],[-78.338699,39.640066],[-78.466415,39.523641],[-78.662796,39.540058],[-78.798752,39.606217],[-78.9814,39.446799],[-79.06723,39.476486],[-79.485054,39.199536],[-79.485569,39.72158],[-75.788359,39.721811],[-75.690994,38.460579],[-75.049238,38.458159],[-75.049839,38.402218],[-75.081511,38.323208],[-75.097733,38.309066],[-75.186996,38.097551],[-75.23798,38.022402],[-75.61821,37.989669],[-75.863686,37.909534],[-76.234131,37.920368]]],"terms_url":"http://imap.maryland.gov/Pages/imagery-products.aspx","terms_text":"DoIT, MD iMap, MDP","description":"Six Inch resolution aerial imagery for the State of Maryland"},{"id":"geodata.md.gov-MD_ThreeInchImagery","name":"MD Three Inch Aerial Imagery","type":"wms","template":"http://geodata.md.gov/imap/services/Imagery/MD_ThreeInchImagery/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=MD_ThreeInchImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[0,20],"polygon":[[[-76.46298868788,38.98080463627],[-76.46325795583,38.94779459044],[-76.49498669632,38.93690418359],[-76.51616910865,38.93697399921],[-76.54762858119,38.95910208849],[-76.54744906922,38.98666527704],[-76.51558569475,39.0030585399],[-76.48390183225,39.00291903879],[-76.46298868788,38.98080463627]],[[-76.09548280964,38.8413320581],[-76.04279604678,38.84089512141],[-76.04288580276,38.82980476995],[-76.0322945966,38.8296998884],[-76.03276581552,38.79667199901],[-76.02545070279,38.79663702224],[-76.0254058248,38.7746157424],[-76.03307996147,38.77472070505],[-76.03366337536,38.7307278267],[-76.05462139773,38.73093788097],[-76.0548009097,38.72004925436],[-76.10753255055,38.72043441094],[-76.10713709241,38.75338442343],[-76.11753984459,38.75346037077],[-76.11701334711,38.79730508527],[-76.09601366219,38.79715186708],[-76.09548280964,38.8413320581]],[[-77.23397015511,39.16838491616],[-77.25516378693,39.14647458509],[-77.25496183597,39.11342872174],[-77.18093418537,39.05337051467],[-77.14907221334,39.04769565692],[-77.12797815456,39.04779422613],[-77.10683080317,39.05325234984],[-77.1068770836,39.09169503464],[-77.11774597234,39.10827342699],[-77.16011079699,39.12484737677],[-77.15975177305,39.15213714767],[-77.17047901562,39.16302432313],[-77.21284384027,39.17271658577],[-77.23397015511,39.16838491616]]],"terms_url":"http://imap.maryland.gov/Pages/imagery-products.aspx","terms_text":"DoIT, MD iMap, MDP","description":"Three Inch Resolution Imagery for the cities of Rockville, Gaithersburg and Annapolis"},{"id":"geodata.md.gov-MD_ColorBasemap","name":"MD Transportation Basemap","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/MD_ColorBasemap/http://geodata.md.gov/imap/services/Transportation/MD_ColorBasemap/MapServer/WmsServer","polygon":[[[-76.234131,37.920368],[-76.598053,38.158317],[-76.940002,38.270532],[-77.038193,38.413786],[-77.23526,38.33627],[-77.312164,38.410558],[-77.262726,38.566422],[-77.042999,38.713376],[-77.049866,38.793697],[-76.92627,38.892503],[-77.040939,38.984499],[-77.12162,38.925229],[-77.150116,38.955137],[-77.252426,38.975425],[-77.259293,39.024252],[-77.34581,39.054918],[-77.461853,39.070379],[-77.537384,39.139647],[-77.474213,39.224807],[-77.572746,39.304284],[-77.723465,39.328986],[-77.777023,39.463234],[-77.861481,39.516225],[-77.840881,39.608862],[-77.956238,39.59299],[-78.166351,39.695564],[-78.270035,39.621557],[-78.338699,39.640066],[-78.466415,39.523641],[-78.662796,39.540058],[-78.798752,39.606217],[-78.9814,39.446799],[-79.06723,39.476486],[-79.485054,39.199536],[-79.485569,39.72158],[-75.788359,39.721811],[-75.690994,38.460579],[-75.049238,38.458159],[-75.049839,38.402218],[-75.081511,38.323208],[-75.097733,38.309066],[-75.186996,38.097551],[-75.23798,38.022402],[-75.61821,37.989669],[-75.863686,37.909534],[-76.234131,37.920368]]],"terms_url":"http://imap.maryland.gov/Pages/imagery-products.aspx","terms_text":"DoIT, MD iMap, MDP","description":"Maryland State Highway Administration road features and additional Maryland focused landmarks"},{"id":"minador_do_negrao","name":"Minador do Negrão","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Minador%20do%20Negrao&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.81960228856,-9.35174057847],[-36.82016893109,-9.26141767312],[-36.82465236584,-9.26132936954],[-36.83063690623,-9.26146673066],[-36.83673079868,-9.26149616517],[-36.84227793081,-9.26147654216],[-36.8456181394,-9.26160409172],[-36.85563876517,-9.26160409172],[-36.8621402426,-9.26159428022],[-36.86589797726,-9.26146673066],[-36.86724002536,-9.26149616517],[-36.86951653657,-9.26148635367],[-36.87126616964,-9.26157465721],[-36.87475549468,-9.26152559969],[-36.87815534986,-9.26163352623],[-36.88320542713,-9.26170220674],[-36.88565093699,-9.26167277223],[-36.88857361951,-9.26147654216],[-36.89217229662,-9.26150597668],[-36.89383245981,-9.26163352623],[-36.89740131364,-9.26175126423],[-36.91121943846,-9.26182975621],[-36.91110014529,-9.26650980886],[-36.91112002749,-9.28541580138],[-36.91120949736,-9.29066455986],[-36.91117967407,-9.29367642875],[-36.91099079323,-9.2992880502],[-36.91091126445,-9.30729328446],[-36.91090132335,-9.3122964628],[-36.91083173567,-9.31596541472],[-36.91084167677,-9.32013463149],[-36.91098085213,-9.32395064743],[-36.91099079323,-9.3258733543],[-36.91079197129,-9.32964025951],[-36.91079197129,-9.33523168439],[-36.9107422658,-9.33943990818],[-36.91092120555,-9.34310857462],[-36.91084167677,-9.3447074733],[-36.91066273702,-9.35228988056],[-36.89276876244,-9.35225064472],[-36.877350121,-9.35212312823],[-36.86462551685,-9.35203484755],[-36.85760710237,-9.35193675789],[-36.84344103915,-9.35190733098],[-36.83115384327,-9.3517994323],[-36.81960228856,-9.35174057847]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"NC-US","name":"NC Latest Orthoimagery","type":"wms","template":"https://services.nconemap.gov/secure/services/Imagery/Orthoimagery_All/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2013-01-01T00:00:00.000Z","startDate":"1995-01-01T00:00:00.000Z","polygon":[[[-81.6792,36.5974],[-80.2535886,36.5479298],[-75.8409,36.5671],[-75.4323,35.6441],[-75.5047482,35.1880648],[-75.7052487,35.1768406],[-76.1474484,34.9407747],[-76.5347165,34.5548667],[-76.6967648,34.6678918],[-77.2790402,34.5322432],[-77.688281,34.2648225],[-77.9435,33.8269],[-78.2128781,33.8940169],[-78.5301,33.8304],[-79.6693,34.7916],[-80.8122,34.8085],[-80.8468503,34.9632866],[-80.9512204,35.0555205],[-81.0638303,35.0172898],[-81.0748166,35.1341745],[-82.3632,35.1805],[-82.9989,34.9919],[-84.3333,34.9767],[-84.2718381,35.2822869],[-84.0905637,35.2733181],[-83.9147824,35.53301],[-83.5549802,35.591102],[-83.2556027,35.7339181],[-82.9864377,35.8141398],[-82.9232663,35.9676717],[-82.6788205,36.0853997],[-82.6019162,36.0898388],[-82.5359982,35.9698946],[-82.3547238,36.1475245],[-82.0443601,36.1430887],[-81.9042844,36.3380291],[-81.742236,36.3734205],[-81.6792,36.5974]]],"description":"Most recent true color imagery for the state of North Carolina. The imagery has a pixel resolution of 6 inches and is comprised of imagery flown in 2010, 2012, 2013, and 2014"},{"id":"geodata.state.nj.us-Infrared2015","name":"NJ 2015 Aerial Imagery (Infrared)","type":"wms","template":"http://geodata.state.nj.us/imagerywms/Infrared2015?FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&WIDTH={width}&HEIGHT={height}&LAYERS=Infrared2015&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-05-03T00:00:00.000Z","startDate":"2015-03-29T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[-74.86599,40.085427],[-74.840927,40.107225],[-74.822903,40.130329],[-74.788055,40.124685],[-74.726086,40.149488],[-74.729176,40.16392],[-74.763336,40.191725],[-74.775524,40.214276],[-74.844017,40.247957],[-74.868393,40.291573],[-74.944611,40.33817],[-74.967098,40.395195],[-75.002632,40.406046],[-75.026836,40.402516],[-75.06134,40.416502],[-75.074215,40.455046],[-75.069065,40.536503],[-75.102367,40.567024],[-75.135927,40.573609],[-75.16777,40.559069],[-75.197639,40.573674],[-75.203733,40.618318],[-75.205064,40.691312],[-75.198326,40.753889],[-75.172405,40.780671],[-75.1367,40.777292],[-75.090179,40.822383],[-75.100994,40.839269],[-75.096874,40.850956],[-75.068464,40.850372],[-75.057049,40.867574],[-75.13773,40.973094],[-75.135155,40.994411],[-75.039024,41.03819],[-74.981518,41.112598],[-74.905472,41.170384],[-74.84024,41.278645],[-74.798012,41.322685],[-74.757156,41.347691],[-74.695702,41.360576],[-74.041054,41.059088],[-74.041051,41.059087],[-74.04105,41.059087],[-74.04105,41.059086],[-74.041049,41.059086],[-73.890266,40.998039],[-73.933406,40.882078],[-73.933407,40.882077],[-73.933408,40.882076],[-73.933408,40.882075],[-74.011459,40.75558],[-74.024543,40.709436],[-74.066048,40.651732],[-74.152222,40.638967],[-74.183121,40.644568],[-74.200459,40.631281],[-74.199257,40.598444],[-74.21505,40.558026],[-74.246807,40.548113],[-74.24715,40.519541],[-74.267578,40.489651],[-74.26054,40.469282],[-74.199257,40.445641],[-74.181061,40.460401],[-74.136429,40.459095],[-73.997555,40.413496],[-74.026566,40.47777],[-74.003906,40.484037],[-73.977814,40.452042],[-73.964767,40.33189],[-74.088364,39.756824],[-74.356842,39.383406],[-74.609528,39.215231],[-74.776382,38.998909],[-74.863586,38.931639],[-74.931221,38.920688],[-74.980316,38.930304],[-74.960747,39.00798],[-74.905472,39.100226],[-74.899979,39.164141],[-75.101166,39.201398],[-75.135498,39.171062],[-75.425949,39.378099],[-75.475044,39.43195],[-75.543365,39.457403],[-75.552292,39.482845],[-75.538902,39.541911],[-75.519676,39.56997],[-75.571175,39.608069],[-75.577698,39.625524],[-75.539932,39.656456],[-75.472984,39.747454],[-75.466253,39.750761],[-75.466252,39.750762],[-75.466252,39.750763],[-75.466251,39.750764],[-75.466251,39.750765],[-75.46625,39.750767],[-75.466249,39.750768],[-75.466249,39.750769],[-75.465088,39.764478],[-75.415041,39.801786],[-75.324669,39.858891],[-75.246048,39.864689],[-75.143738,39.900255],[-75.142365,39.957912],[-75.07061,39.987117],[-75.056534,40.008683],[-74.935341,40.072555],[-74.86599,40.085427]]],"terms_url":"https://njgin.state.nj.us/NJ_NJGINExplorer/ShowMetadata.jsp?docId={E30775F2-6370-4525-8E68-C371ED29BBB3}","terms_text":"NJ Office of Information Technology (NJOIT), Office of Geographic Information Systems (OGIS)","description":"Digital orthophotography of New Jersey, Near Infrared, 1 foot resolution"},{"id":"geodata.state.nj.us-Natural2015","name":"NJ 2015 Aerial Imagery (Natural Color)","type":"wms","template":"http://geodata.state.nj.us/imagerywms/Natural2015?FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&WIDTH={width}&HEIGHT={height}&LAYERS=Natural2015&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-05-03T00:00:00.000Z","startDate":"2015-03-29T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[-74.86599,40.085427],[-74.840927,40.107225],[-74.822903,40.130329],[-74.788055,40.124685],[-74.726086,40.149488],[-74.729176,40.16392],[-74.763336,40.191725],[-74.775524,40.214276],[-74.844017,40.247957],[-74.868393,40.291573],[-74.944611,40.33817],[-74.967098,40.395195],[-75.002632,40.406046],[-75.026836,40.402516],[-75.06134,40.416502],[-75.074215,40.455046],[-75.069065,40.536503],[-75.102367,40.567024],[-75.135927,40.573609],[-75.16777,40.559069],[-75.197639,40.573674],[-75.203733,40.618318],[-75.205064,40.691312],[-75.198326,40.753889],[-75.172405,40.780671],[-75.1367,40.777292],[-75.090179,40.822383],[-75.100994,40.839269],[-75.096874,40.850956],[-75.068464,40.850372],[-75.057049,40.867574],[-75.13773,40.973094],[-75.135155,40.994411],[-75.039024,41.03819],[-74.981518,41.112598],[-74.905472,41.170384],[-74.84024,41.278645],[-74.798012,41.322685],[-74.757156,41.347691],[-74.695702,41.360576],[-74.041054,41.059088],[-74.041051,41.059087],[-74.04105,41.059087],[-74.04105,41.059086],[-74.041049,41.059086],[-73.890266,40.998039],[-73.933406,40.882078],[-73.933407,40.882077],[-73.933408,40.882076],[-73.933408,40.882075],[-74.011459,40.75558],[-74.024543,40.709436],[-74.066048,40.651732],[-74.152222,40.638967],[-74.183121,40.644568],[-74.200459,40.631281],[-74.199257,40.598444],[-74.21505,40.558026],[-74.246807,40.548113],[-74.24715,40.519541],[-74.267578,40.489651],[-74.26054,40.469282],[-74.199257,40.445641],[-74.181061,40.460401],[-74.136429,40.459095],[-73.997555,40.413496],[-74.026566,40.47777],[-74.003906,40.484037],[-73.977814,40.452042],[-73.964767,40.33189],[-74.088364,39.756824],[-74.356842,39.383406],[-74.609528,39.215231],[-74.776382,38.998909],[-74.863586,38.931639],[-74.931221,38.920688],[-74.980316,38.930304],[-74.960747,39.00798],[-74.905472,39.100226],[-74.899979,39.164141],[-75.101166,39.201398],[-75.135498,39.171062],[-75.425949,39.378099],[-75.475044,39.43195],[-75.543365,39.457403],[-75.552292,39.482845],[-75.538902,39.541911],[-75.519676,39.56997],[-75.571175,39.608069],[-75.577698,39.625524],[-75.539932,39.656456],[-75.472984,39.747454],[-75.466253,39.750761],[-75.466252,39.750762],[-75.466252,39.750763],[-75.466251,39.750764],[-75.466251,39.750765],[-75.46625,39.750767],[-75.466249,39.750768],[-75.466249,39.750769],[-75.465088,39.764478],[-75.415041,39.801786],[-75.324669,39.858891],[-75.246048,39.864689],[-75.143738,39.900255],[-75.142365,39.957912],[-75.07061,39.987117],[-75.056534,40.008683],[-74.935341,40.072555],[-74.86599,40.085427]]],"terms_url":"https://njgin.state.nj.us/NJ_NJGINExplorer/ShowMetadata.jsp?docId={CDC67AB8-ADA1-4B4B-9087-67A82CB9151C}","terms_text":"NJ Office of Information Technology (NJOIT), Office of Geographic Information Systems (OGIS)","description":"Digital orthophotography of New Jersey, Natural Color, 1 foot resolution"},{"id":"NLSC-EMAP5","name":"NLSC General Map with Contour line","type":"tms","template":"http://wmts.nlsc.gov.tw/wmts/EMAP5_OPENDATA/default/EPSG:3857/{zoom}/{y}/{x}","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[0,15],"polygon":[[[120.4570579,26.3970586],[120.44256,26.3708009],[120.44713,26.3531513],[120.4673009,26.3405831],[120.4978723,26.3340866],[120.5141036,26.3401594],[120.5341168,26.3641649],[120.5297045,26.3842128],[120.4956661,26.4015754],[120.4570579,26.3970586]],[[119.9007221,25.9858609],[119.8960071,25.9648902],[119.9131301,25.9470399],[119.9503542,25.9278478],[119.9905563,25.9260623],[120.0198392,25.9363284],[120.0277804,25.9557423],[120.0275322,25.9845224],[119.9989937,26.0010288],[119.9404278,26.0028131],[119.9007221,25.9858609]],[[122.089,24.5485],[121.709,23.4541],[121.717,22.698],[121.818,21.95],[121.803,21.8735],[121.759,21.8087],[121.694,21.7653],[120.861,21.5631],[120.815,21.5576],[120.739,21.5728],[120.661,21.6296],[120.202,22.1809],[119.27,23.0542],[119.153,23.2049],[119.128,23.2485],[119.103,23.4],[119.118,23.4765],[119.137,23.512],[119.361,23.8885],[119.406,23.9407],[120.968,25.2284],[121.408,25.4687],[121.989,25.8147],[122.065,25.8299],[122.141,25.8147],[122.216,25.7663],[122.26,25.7015],[122.297,25.48],[122.196,24.9696],[122.089,24.5485]],[[116.6855033,20.8547596],[116.6309071,20.8149565],[116.5941695,20.7600846],[116.5797214,20.6967501],[116.5893056,20.6325865],[116.621766,20.5753367],[116.6731874,20.5319171],[116.7373678,20.5075783],[116.8065659,20.5052653],[116.8724354,20.5252581],[116.9270316,20.5651373],[116.9637692,20.6200797],[116.9782173,20.6834462],[116.9686331,20.7475883],[116.9361727,20.8047732],[116.8847512,20.8481147],[116.8205709,20.872399],[116.7513728,20.8747063],[116.6855033,20.8547596]],[[118.2261504,24.4563345],[118.2936439,24.4538527],[118.2851467,24.4751026],[118.3097372,24.4916821],[118.3767709,24.4729348],[118.4100947,24.5332285],[118.4479031,24.5284069],[118.4746394,24.4599272],[118.512992,24.4315479],[118.5065839,24.4202318],[118.4811625,24.4332439],[118.4610567,24.4089192],[118.426145,24.3970385],[118.3970055,24.4284184],[118.3765564,24.4258395],[118.3397565,24.3814628],[118.3031926,24.3705764],[118.2574234,24.4139213],[118.1381276,24.3724838],[118.1617342,24.4022433],[118.2094226,24.4139604],[118.1895784,24.4352201],[118.2176338,24.430205],[118.2261504,24.4563345]],[[120.2234496,26.30045],[120.2550843,26.3100412],[120.269888,26.3368716],[120.2591889,26.3652192],[120.2292544,26.3784823],[120.1976197,26.3688968],[120.182816,26.3420738],[120.1935151,26.3137205],[120.2234496,26.30045]],[[119.4374461,25.0047541],[119.4342024,24.9886249],[119.4541901,24.9722553],[119.4827444,24.9718376],[119.4898402,24.9937882],[119.4715877,25.0069239],[119.4374461,25.0047541]],[[119.8869914,26.180381],[119.893227,26.1203128],[119.9285109,26.1080224],[119.9779388,26.1223611],[120.0366775,26.151728],[120.1098054,26.2134921],[120.119269,26.2713663],[120.0629175,26.3172592],[119.9923706,26.3164881],[119.9467732,26.2898799],[119.9020362,26.2439761],[119.8869914,26.180381]]],"terms_url":"http://maps.nlsc.gov.tw/","terms_text":"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0","description":"The emap from Taiwan National Land Surveying and Mapping Center","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAxJJREFUOI3tlF9oW2UYxn9f4nKW2ixfjJGYMnuctRUZ5mhEpjdJEEaHtmsZaKHq0qt6ZdtZL3Zhk3ilIKS9Ui806UStE7Edjln8kwzEwaB6IshsmJIqK1ttZ7Qlzel2eryQhqZrsDC8EHyuvu993+/53j+8D/yPfxtip4GqH1X1owLkdHI3RSwbkbFu1yAPdx4t3hpSS6YLAM05i/vCqcmzZwpj9T6pIZYOZNArNADhsQj3RVNjtyS1DcKtiHlPIb96PTn67nJiq8++cRgJicTpQ7Yz0oHc7cQZeakzPbTyqr9iKXUr0lfbqOx7LHJgbXrux5/X9M0+G0C8SySeeWTPQPSLxu4jn1vd4tE7m4euDNclrCEvt6E+25/e6H+VuKen57vEe1b8I29b8cKyo6j6Uece6I/VK387jC70crgjMFBDPDEx8aA5aOPkG+f7FhcX9YhGZLIUBSD7VAtSsZOKNpGKNgFU710tbiJ7G0lFm9DucCL2R7uCXjTpQFZbMV6wMu+EbWnpQOIJVKcvFTuDIR+az4nmc1Zt6h4HuV9XGHjIx1D2EvrCKtLnUgE+Pig+kQ6kDeDFc9YQwJdP2rLuBlfzRjklw7yh7JJh0vfZL6Tb70IqdqRSnT/5JfQTBcZfDom4HaBiUjn5k/Xh0VYRe85ztZ11QX53K4ZQyPxwFcO0yP+2Ste9bi6XrxPbfxuvnV9g6uIfPK/dTskwURbOFfPTM2PSIeTT99Bzw4KMhERi5ICIl667OOHuYNzdQV5p/ccBxi89kUmm5vveDou06kLddvNSibasbvZGXvj9fYJGgbldAaYaI+SVVoq7ApxtCNXEH7ZyhL8+Nho00YJeoT3+6Xp0W2KtBU07NpzNlHulem2ecHmGzpUcmlGg+dp83aynitbkK99ayfwSel2tiLUTo3M4lSn3ys12ub5MsFL4O4GGWZq/fyszfvrPsfwSNZtnpw70i+jMfjPdf//MfXf7UYtrASqWQkUoeNzLtHumS0buzePJD4zjV1a5vPX9jmRT9aNGNCKbZXMn0vnfwl+e9BTflqrxKAAAAABJRU5ErkJggg=="},{"id":"IBGE_Salvador_Streets","name":"Nomes de Ruas IBGE Salvador-BA","type":"tms","template":"https://api.mapbox.com/styles/v1/wille/cj8lp78dn62wl2rquim47qo0g/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoid2lsbGUiLCJhIjoicFNVWk5VWSJ9.hluCd0YGvYHNlFi_utWe2g","scaleExtent":[0,20],"polygon":[[[-38.489742279052734,-12.811131765117107],[-38.54484558105469,-13.013924052026558],[-38.47755432128906,-13.034662471471638],[-38.33473205566406,-12.946846814654444],[-38.30005645751953,-12.906692193510644],[-38.33953857421875,-12.904349641337422],[-38.35481643676758,-12.830213284310222],[-38.38090896606445,-12.821844374997415],[-38.40717315673828,-12.867535227819912],[-38.46536636352539,-12.815985972925704],[-38.489742279052734,-12.811131765117107]]],"description":"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - IBGE.","overlay":true},{"id":"orthos.dhses.ny.gov_latest","name":"NYS Orthos Online","type":"wms","template":"http://www.orthos.dhses.ny.gov/arcgis/services/Latest/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0,1,2,3,4&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2018-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[0,19],"polygon":[[[-74.91231104790405,45.036060871422514],[-73.47787904626531,45.02996489601911],[-73.33846123282218,45.03098119095642],[-73.31977627491248,45.005581106608915],[-73.32265088382167,44.98525292658083],[-73.34852236400432,44.92829565917409],[-73.36720732191401,44.83969633391092],[-73.34277314618596,44.81727029165119],[-73.34564775509514,44.7764733152644],[-73.37295653973237,44.73462648007473],[-73.37008193082319,44.6794648966887],[-73.39739071546042,44.64470656126996],[-73.39307880209665,44.60276438225357],[-73.39739071546042,44.54542854468756],[-73.34995966845892,44.512639828752185],[-73.34564775509514,44.49521331585934],[-73.37870575755073,44.47060231167881],[-73.30827783927576,44.43571894999882],[-73.30396592591198,44.4182694555537],[-73.3327120150038,44.3391682816244],[-73.30827783927576,44.27128222420617],[-73.30827783927576,44.25172471526754],[-73.38014306200533,44.14868323115224],[-73.40457723773338,44.0413289327325],[-73.33989853727677,43.79595697288363],[-73.28096905463853,43.642215731803084],[-73.20910383190896,43.549573305004984],[-73.21341574527274,43.51205945175996],[-73.24647374772834,42.6755714070924],[-73.45919480700785,42.142839357113225],[-73.47069324264457,42.03937970922349],[-73.48794089609967,41.737642097452465],[-73.4994393317364,41.643191171126794],[-73.47787976491753,41.62707774888845],[-73.4318860223706,41.57978847312145],[-73.42613680455224,41.56365920821005],[-73.42685473812732,41.45925887814987],[-73.43979047821864,41.403222667065656],[-73.44985160940078,41.383275042836544],[-73.43835317376404,41.37033277045519],[-73.42757339035461,41.35900616964153],[-73.41751225917248,41.34390096839462],[-73.41894956362707,41.27642429018757],[-73.43044799926379,41.24455103927662],[-73.46566195840128,41.19752312226992],[-73.52962200663059,41.145049831455864],[-73.55477483458594,41.133684100459654],[-73.61586027390607,41.13530789690045],[-73.6266400573155,41.1087808553827],[-73.62735870954279,41.054068843422385],[-73.63957579740682,40.99117509837295],[-73.61873488281525,40.98195286582785],[-73.59933127267827,40.96567519162947],[-73.59933127267827,40.93473654650821],[-73.63454523181575,40.91681807360894],[-73.68053897436268,40.89183270232195],[-73.69850528004507,40.8798798402391],[-73.68628819218104,40.87064205907731],[-73.66257266868028,40.87933647703018],[-73.63813849295222,40.90541287946855],[-73.59789396822369,40.91193037416514],[-73.57561574917752,40.91790417996723],[-73.52674739772141,40.92387744595259],[-73.50159456976607,40.9428797007417],[-73.49009613412935,40.953735678064604],[-73.41751225917248,40.960791106211715],[-73.38373560448959,40.9613338002184],[-73.33702320971537,40.95590665935183],[-73.30827712062354,40.93636525766628],[-73.27090720480417,40.92659238839886],[-73.20910311325675,40.91953330604491],[-73.18682489421059,40.92713536350369],[-73.16813993630089,40.93147900372728],[-73.165983979619,40.95970570481162],[-73.1688585885282,40.970016297449746],[-73.12933271602694,40.98195286582785],[-73.10777314920807,40.98195286582785],[-73.06680997225222,40.97489970011966],[-72.85840082633648,40.97435711767307],[-72.71826364201384,40.98195286582785],[-72.65574089823912,41.00527719453338],[-72.64424246260239,41.004734862008505],[-72.62627615692,40.99225998211336],[-72.54147519409912,41.03889309392365],[-72.47679649364251,41.063280983759014],[-72.45811153573283,41.08928476815911],[-72.41858566323157,41.093076127227],[-72.36612405063899,41.138555369199075],[-72.36037483282063,41.14180268071838],[-72.32228626477396,41.15479031895286],[-72.29066556677296,41.16398833949227],[-72.21448843067962,41.182380507948444],[-72.20083403836101,41.19157465575383],[-72.04847976617432,41.25913903369694],[-72.02548289490088,41.29370497046782],[-71.9392446276254,41.30774215335454],[-71.9234342786249,41.30666247732331],[-71.90259336403332,41.299104244517785],[-71.90187471180603,41.2893852294372],[-71.99458084912716,41.24509139345555],[-72.10453463990339,41.19806386514946],[-72.1828677326786,41.16723439148816],[-72.18933560272427,41.16236525319468],[-72.25185834649899,41.12231639996208],[-72.30431995909157,41.10444889166786],[-72.3158183947283,41.09524251989042],[-72.27916713113622,41.08440984216064],[-72.27269926109055,41.080617983013646],[-72.26838734772679,41.04973327212589],[-72.2173630395888,41.04810735923019],[-72.19652212499723,41.04214533487485],[-72.18646099381509,41.05298497738375],[-72.17136929704188,41.05840412900452],[-72.14980973022301,41.058946019612705],[-72.15627760026867,41.09632568943114],[-72.1526843391322,41.10769789124652],[-72.1490910779957,41.146673346530676],[-72.13399938122251,41.145049831455864],[-72.07075798522048,41.10553190938901],[-72.07435124635697,41.05677843039375],[-72.086568334221,41.0318460205672],[-72.10956520549446,41.006904165328564],[-72.08728698644829,41.01286938123731],[-72.06213415849294,41.02534036020521],[-72.04560515726514,41.03238812991624],[-72.01901502485521,41.03293023480147],[-72.00895389367307,41.04214533487485],[-72.00176737140012,41.05135914484385],[-71.96367880335345,41.07736764390088],[-71.9219969741703,41.088743127574865],[-71.889657623942,41.08765983301127],[-71.8558809692591,41.080617983013646],[-71.84581983807696,41.07465890519177],[-71.8558809692591,41.05298497738375],[-71.89037627616929,41.03726691318444],[-71.91624775635194,41.03021966573728],[-71.99098758799067,41.00365018356915],[-72.07938181194804,40.97272934355811],[-72.31941165586478,40.88205324847025],[-72.44230118673232,40.84020260474275],[-72.6277134613746,40.78689990926171],[-72.76569468901535,40.75043362643005],[-72.88499095874643,40.71285788340029],[-72.95973079038517,40.68670572169275],[-73.0373452309331,40.65999813364621],[-73.08118301679814,40.64854874971067],[-73.22994402784832,40.616370919338586],[-73.32193151294216,40.61309772897009],[-73.35211490648857,40.61855295716485],[-73.55477483458594,40.56943986927557],[-73.75959071936519,40.57708205228237],[-73.88248025023275,40.548146328651804],[-73.93350455837073,40.53449306094386],[-73.94500299400745,40.533946872353866],[-73.94572164623476,40.56288873200082],[-74.08226556942093,40.562342774949634],[-74.08010961273904,40.5492384698493],[-74.12251009414948,40.52083701052971],[-74.15772405328697,40.51373476465814],[-74.18718879460609,40.50116740969577],[-74.22887062378922,40.48695799891573],[-74.26120997401753,40.48531825788795],[-74.27630167079074,40.49570260781157],[-74.27917627969993,40.54377758575639],[-74.26983380074509,40.56671030667376],[-74.25833536510835,40.57216932054787],[-74.22527736265275,40.57216932054787],[-74.22599601488004,40.58308601230896],[-74.25114884283539,40.59563800556682],[-74.25258614728999,40.622371351867315],[-74.24324366833514,40.64091473558487],[-74.23390118938029,40.64909400302126],[-74.2022804913793,40.65400108233582],[-74.12538470305866,40.65672708157882],[-74.11532357187652,40.691065128306576],[-74.09951322287603,40.68997530338939],[-74.07795365605716,40.71067892875261],[-74.06286195928395,40.71830495805569],[-74.0520821758745,40.743900238938934],[-74.02549204346457,40.79288499840126],[-73.98093560537225,40.869011728592994],[-73.96225064746255,40.92550642480473],[-73.94931490737123,40.964589870550604],[-73.94644029846205,40.99876890966543],[-73.98165425759954,41.01612290773734],[-74.04561430582885,41.04322937947981],[-74.18072092456043,41.09524251989042],[-74.30792236879175,41.14937911566324],[-74.44087303084143,41.215365278476916],[-74.5278299503442,41.25913903369694],[-74.61334956539238,41.30234359441648],[-74.65790600348473,41.310981074177676],[-74.70246244157704,41.33580745460507],[-74.76714114203365,41.38974521327815],[-74.79660588335277,41.41022983858581],[-74.85337940930913,41.42262529077297],[-74.90727832635629,41.431785626305874],[-74.99782850699555,41.471106493417004],[-75.04166629286057,41.527084094166106],[-75.08478542649831,41.593225913275326],[-75.08406677427102,41.61848173934118],[-75.07328699086159,41.664668930702504],[-75.0876600354075,41.70277526731324],[-75.0876600354075,41.71350537258048],[-75.12143669009038,41.76176868230114],[-75.1192807334085,41.792316684103675],[-75.13077916904523,41.816958847412266],[-75.18755269500159,41.838379111347166],[-75.25295004768549,41.84962188079648],[-75.28744535459568,41.85497488617851],[-75.29822513800511,41.88226824503906],[-75.30613031250536,41.93040456765947],[-75.34062561941555,41.940027476740525],[-75.36649709959819,41.95659686103546],[-75.37224631741655,41.97743609810382],[-75.58065546333229,41.97957307031645],[-75.58137411555958,41.923988488332995],[-75.78906460924802,41.92666193313772],[-75.78690865256613,41.98277839417683],[-79.7768658185114,41.98117575241552],[-79.7818971027547,42.20994439336295],[-79.77183597157256,42.28016852623668],[-79.72153031566185,42.29824389979878],[-79.57348795683896,42.367307788746416],[-79.42975751137983,42.46599037989962],[-79.37370263765078,42.499909767684656],[-79.2572809768289,42.54545998533663],[-79.1897276674631,42.56240042582576],[-79.16529349173506,42.56981042255861],[-79.12073705364273,42.62482855594211],[-79.09630287791468,42.64597644140587],[-79.06899409327744,42.696702043447694],[-79.03162417745807,42.7104331026147],[-78.98850504382034,42.723105230911976],[-78.88358181863518,42.776932904700104],[-78.88645642754436,42.814900763418876],[-78.93963669236422,42.88655426672713],[-78.93963669236422,42.93603089533893],[-79.04887183091316,42.96969438273069],[-79.04743452645856,43.05167198470151],[-79.09342826900549,43.05272226918912],[-79.0919909645509,43.09261975149211],[-79.08624174673254,43.265557535860246],[-79.06468217991367,43.27602287004617],[-78.84908651172498,43.33041359857192],[-78.72979024199391,43.35236529048099],[-78.63924006135466,43.370129894376525],[-78.54868988071541,43.379532578835416],[-78.47826196244044,43.38788929664161],[-77.95508314096922,43.38475566245842],[-77.73158157962807,43.34713889446963],[-77.7114593172638,43.340344586318594],[-77.66259096580768,43.311591022674435],[-77.61515991880619,43.28387016659478],[-77.55335582725876,43.25299623609951],[-77.52820299930342,43.25508987878669],[-77.45633777657385,43.27863839921907],[-77.42256112189095,43.28491646608342],[-77.16384632006454,43.29433235167476],[-77.05029926815182,43.29380928516081],[-76.94178278183018,43.29328621414787],[-76.91447399719296,43.3079305018789],[-76.85051394896364,43.31629708261557],[-76.80236424973484,43.328322024532355],[-76.7599637683244,43.35184220081927],[-76.64785402086628,43.42808936716575],[-76.545086752363,43.4802581022461],[-76.51993392440767,43.49485728312425],[-76.44303813608703,43.52717148354531],[-76.42219722149545,43.538112693359565],[-76.28206003717281,43.538633653838865],[-76.23822225130777,43.55686443488524],[-76.24037820798966,43.74146501378322],[-76.30649421290086,43.82914593255031],[-76.31152477849193,43.86749827350751],[-76.34602008540212,43.861798810265746],[-76.40063765467659,43.8612806502232],[-76.47178422517885,43.8840754318208],[-76.46675365958778,43.90893252243542],[-76.41860396035898,43.93119152129071],[-76.37189156558476,43.93222662089228],[-76.36973560890287,43.90271922256843],[-76.33308434531081,43.92963883810956],[-76.27846677603632,43.92963883810956],[-76.27846677603632,43.90427260833489],[-76.2669683403996,43.8959874158668],[-76.2360662946259,43.91203892916922],[-76.19294716098815,43.93326170247849],[-76.19007255207897,43.95085533306909],[-76.21522538003431,43.96016750024623],[-76.2504393391718,43.94982055774786],[-76.31224343071922,43.94775095305809],[-76.30577556067355,43.97620170069497],[-76.33092838862892,44.004638823445866],[-76.39560708908552,44.024795072402476],[-76.3984816979947,44.06250502187776],[-76.37548482672123,44.064570626786484],[-76.37620347894854,44.090900771655065],[-76.47106557295156,44.0929653855436],[-76.46603500736049,44.109479701923],[-76.44231948385973,44.129600288113295],[-76.3984816979947,44.13217935491029],[-76.3977630457674,44.2043474993423],[-76.37620347894854,44.21671031511876],[-76.23965955576237,44.2192855751065],[-76.23965955576237,44.2280406165722],[-76.2173813367162,44.228555578463435],[-76.21522538003431,44.34790496257489],[-76.1189259815767,44.37102654591561],[-76.04634210661985,44.39157140443917],[-75.93423235916174,44.43417898509957],[-75.83721430847683,44.50341416416661],[-75.76822369465644,44.558231111426025],[-75.69923308083607,44.60378721108942],[-75.63167977147027,44.64828507610631],[-75.56772044189319,44.70500920154141],[-75.50447904589117,44.7458566542504],[-75.4527360855259,44.78157451471142],[-75.31762946679432,44.872300455880584],[-75.15377675897092,44.937453318614374],[-75.0905353629689,44.973052557209364],[-74.97411370214701,45.027933775754924],[-74.91985438100785,45.03682085482298],[-74.91231104790405,45.036060871422514]]],"terms_url":"https://gis.ny.gov/gateway/orthoprogram/index.cfm","terms_text":"New York State Statewide Digital Orthoimagery Program","description":"New York State High Resolution Digital Orthoimagery, 1 foot resolution","icon":"data:image/png:base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAABCCAYAAABdAli1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTA1Nzc1NjVGNjM2MTFFMzk5NkFGRERGMEYyODU3RTciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTA1Nzc1NjZGNjM2MTFFMzk5NkFGRERGMEYyODU3RTciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBMDU3NzU2M0Y2MzYxMUUzOTk2QUZEREYwRjI4NTdFNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBMDU3NzU2NEY2MzYxMUUzOTk2QUZEREYwRjI4NTdFNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhMlZyIAAA02SURBVHja7F1djNxWFb7XyRMvYyQUUbHJeBuoeJtpkUAg0Dj9gYS22dmgIkVUXW+aFvoD8Sr8CRDrVAVFRTSzgBRImuysCEUqauNt0lDSVplFQgiBqPcNNSTrSaMk5CXeF56oL+fYx7t3bzy/2Z3Mz17Ja8/19b32+XzOPX/Xy1mflI//wjMF547QeIExzpjGmODwR+PReY57zqM9j85zFuJvHrfldIx1msbnzn81a3brs/JeB+sTh/6ZB7BK8CQFBAVAW4TfXhpwuOfpwPlwnQ4/dTjOQ10GgLsbgPO68Zk39jJgd/38H0UWijKAkxGMLwJEzoVn86Vb4tiXLwYAMwtD5nfrc/csaHe98HcLAJuORFvIZmBvn7fvCW6131Aggwp2Yfdw0K3PrvUiYJ88+LcyD8NpoC1SeeK9/Z+yzk/cszpEFsJD4IDj8uuctgpl6/N/1TWNuaEQBQ3nIiHG//XdT5dXdZBQFPBV/vfXtnrroK0OG7igWRQEE4shY+Z73//MqhNWE2IWONjvZir0jPaYfe4vFjDANGh1oPSBZvfDz3psQEvvcJoQqIpHc9iFH39uVQD77+832rArwobzofOh3f/zpHOoheK85tM5H+oqdbqzYLPVa6gvi8bxoM6hOh3bpLXvC9CGJv/swDy2DzhtEYBbzTkMCVmg4zwQMg+ESxSafbTH82UibKFOX0h8NMhz1M4nULDgC5CBbQTGKBM4pjQGjmv1Bafd8aOKrjFeBm1uBNVwmMfs9yc/v1aqeJY4xWmy/TxxaFKQSysEWvJCOPgiEGBJMeklKEp1lb5Q+Tf94JwtQuGHTIzwEBQPwUbfd75QXuNhJ4nIzRQbuMOUNuQeVzqfIxFoKteZyp4p1/Ump2363jtgh4mxEJUO0OZCzqyrzxU6ZeyWUgidOocBKEm7SOTBVoG6RYmzzJS+8vRiZNvltK4D7SPfecsCMTgGYFV5yKxrB++tdPgWCqSgNCpj0rFPIi8BYEQSkSpoOUU0zjergHSteNTwocMQ56+sEMLq4NBz0rHT4rV+DVFXlLhuURbD7XJZV4J2/WcP+HBTs8BpCNwYiEq7Q0Mj8aboONNE+23AIZy2Sg0QMorYTStuz4NGwBXBLjtAwOkdHNpROKLlQqJuvsZcqfa9qADew4rI/rM6gGbTW1Xq1Lhoo5EhfLJFRSTiMAkAWfVP5q2AjPORWxGNXQsaF6IoGAfRImaA6zoaIgHiukDcWYW4jRQRLIYEgisZzjI4KmhuO/eodSdozADgWAcct56kJMhj2ZKIqypGdENlhDhOvt6VQKtKik9bnNaVDuOP2m+ajPNzgrO5/7z4JZOtl+4Wj3d8648GqPp5Eb1RfB2hbgZt6Jk3dOCuKMAZCwCBgek1E48wb6ENlZc9GtI52ZPhJt5/UlLytAUkXl0lOqCTfWZIffhSW3kcFMOJdlxKnNVQj9cmNip6WspdJx6Hnj5two24goPywXk15KwMxwHTePlqaXuwRqCVJGWhCoQxJIItyPYYAeQqrie5zCReegL8XJ2hxxMQoK1Q7L4Kge5JY82hb7MtTht65OU8QGxhihmMVEjyBAWPcwYxfS16CzQ+D+c9qKtUZ75Srtfn8Ndfx1xFE8Th5Adx+kDkZ7zyywc7oTE69DajAZzFtx6IU5LcUVhmiYCeAtg8cVJiPI/B9X4SK0vxtMie/mlU/eu4rkrSWIsSxzXPaZt3/c4BYCxomY2AIZAAmHnYB7DpBFwAf6Kbw7zCaE7iHNpEHGTADyNKP+TxTIXgw0EmpARROJ6qHn7Y7iSHk7iblrQ8S+GSYRJx0yqnEEeUJRUeDWVd5TT0mFDbG1Ifo2RaCIWjDWWsqF1Lc9rm0RM2GLmTSGYRPZQog/3kXn5ld83I8ZZH/2CIUFgAHBBA5ITgOR7PTyyEfjAuJng8Z3HB5+A3qr2VhV/vrHRaLBPxbTKEswqXHaBotezcnUtEGxnLtgRaRjG21bLYwD1mKK6uqTTAGotHIfQoa5eJ8cuvPlpuhhCXTjyCbO8AeKUIOC5A/PEKj8HRE+AuvjTacZBqFFviDFksJQTUa3kwCFQZDEOx95CbZTGs2oeqWMxI4tdpT3sU8R/gtNLQrhPs8mvNAUfgBXQjJdbFhSZ/1QNiS2kHzRjVuVqgsZUe/YSD0uazjMJ17XlEQDEoA2ZV4LgM7K0+Nn1Kqtis0S7NeZ1rwZeIPsha8/aMAmC5LdAuvf6YD8DlkeMit9JgFlmUFUmpkBWZVFeWomAsAazMkXIpK8CN1ArGNvQ9AnAB+QGNAQVNfuNxzkNxWiSClhQlxU8Tv2Q6LHG1DHzK/CqHdZy0nJWmHMaRei9EdvPIb/ODhhh5O6YUcYihm0NsZVTabqDsyMDbNcYKFLssVUw2BG3LQzMmFywn4jlO71NsAkU1V4mJRB5nyx56phjgpuTKuqkv4sAJWcymjBVIL8l4PZFa17jOPli2waY6FLfk85dOPTZwnJZikOuJ71H2OXay1ATN2DGNadjvoh0MwB24dHrMYeulK0oqaMb2aUvgJMtZBgCbunTGsvucc4qKbeQl3gjF41+rLKUaUH8WmQdyCkJiaDdjfuTrjFlZAZrxwDGdadxNHMKwn6u+OW72MWB5sq3S3EuJLxHPFxp0teSJV6IHWIbJc4JjvdvEbY3TCzRZa6wlRcS4/5jBo5xDUYB9VQgx2s+AUXFZbX9gpo7txerYZ1YNzdFv8p4atfMjN5Zx30s2LjIXgmeAweZDwczq2T1BP6NFYk8Ot9yNigVpamZiVFOczKJrZK47oIZiyNhWXwKsS9xiXGp7UyxNubebuDgpG4fvPVqJxCHaz1zMAnBW9a3+BqzWXILLkFgcXXbb7MNK41gEs45rrFHRJRAxZudjPigAJqqA2Tb/7b1F/+3HBwUwT7GTkIMwlnUDiOQ2CLPUmh8Liv1WD8xmCxrz52grLxnXAJzvv7O3MmCejqCOFwM9/ufq+AkbeT0wWi2LzgKlMaxK0QbYEZx484fJTZWWyu00yWU6W7kSJvF6LNYAtZWC97WNtohjN5J7Km9sOypix0dkTMf5UMupBXFdnG2QpAcs1VFqQdQeTwhKK2DJnjqO65fPJX3XyTeRzsfj4QFUz1Hagg/nSheOjrTlmaC3P0jCJfTbZcvhllyTXRUVBaSQYiZYbQIXqPn+qD1OAWH2IcchUZDxOKUERMoJBkEjikVH8SenooURcRJCFCKNTou4hkdpBJRgEKcVUAO6IhLIcV/UtyBuX+6RQAY1NvoQGdaK5GyUtlCgtAUgjBjb+sTsBADXTrA1MmRxDiOwDMXInm9DNNYq7SokujK/Bhv9ypP2LbDubSvZPSfzAJwJsB6Ct+QQAIfJR8ULR0b8FrgsiVbvUwxi2Y5rRgHJqca0dB5BGpPAbRW0RBFZntN6dT6qHh/1Fo6NloAFRzG6DnyXg33TigMR9gBLX9q0mGaHsfScfkuxqfw682KuhTXdrfkee60MP37SADG7AE8ze/Fosdjq9URIXQK00qAtU7KKE6+/X0dRySd2Vq06RQrU0jb7xyQD4MSde922VeFNE3/SN+0/6/TCs2r9AhroLIuo0ABwbRmyG5hwoJNJAM5cB61DBbRfFz/5B8A5AFzLEXbAO78BddNQrHNapwqQ2gbg5uEAv4pwA4Dz7nyiefB4KCJzB4Dz10HrlDY5vSsAmuNijikWi0rUJp0WQI/Y7eqh7V0PWl+u2jP2vGaAKb5AXhdcKGKD8V2pd83Hvnmm8gEa65x9+NrUjmCd0zpc/OO7fBB2sf0mcBGIOAfGd3nrk7N6nTkt2IBemx7IpO5L0Ag4d+H4qAHAHQDQUFyO4cJ7AG6F92fLU6f1zU+fdjQhRnBO03ogTXAgFjUP7zlpwJOWQEyOxA5pNh9ybi38Zqe35alTMO/xSRE7pKeg3rnyqy/XFI+bvn22CDIXNzOMndcV6NPTYIsd3pp39fm1/fjaQK1EH97rFuGBEbwsPjkQfVxEixox+MlnLh1+yBp65g0jjBc85kUcedCjxZLxMdZlkugGS/5jBkUntDhaMXHlJ2ZpHbTVBU7naB5wPglPX8UvtQIIkwAcfrU14PghteXVqYyAozBUdDwLxxXYXPiJn86YlkNNANzo1Z9uc9dBW4OCdhwQOUccx4jj8LiKWWnw2wcUPKgLJODwGjNezsxHQonjMAMb+nKuH7zPXet73ziooAkMeVCMjz61O6MxXgIRuSKgOvTsGSNkIg+o5AGbcihENonsgRY3FzLgOCbc6y/c3zH7biBBAzvOZHHQFxdMlgGE8sKRnRHRjW+cKgInmWCz5YF/ELCsBhUhwgTIahqvAnAOXONee/GLt8WeG0jQ0M8oIntHBNF/gBLCAjsOlQ8TAMF/NoTuLIafydBCUQ015gNwFQDOu1La4d7u+x/IOc2wXg3oQzNs6TMZnD7rFJsDLmwVOPaqhx/uOu/IoHIaaIkCE3GqMCd5wHEecBeAJLyLR4pdH2T8vwADANA824ekci98AAAAAElFTkSuQmCC"},{"id":"olho_dagua_do_casado","name":"Olho d'Agua do Casado AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Olho%20Dagua%20do%20Casado&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.78219871045,-9.54444051839],[-37.78259635433,-9.45388353571],[-37.8114653,-9.45411888151],[-37.81735042942,-9.45451112414],[-37.82057134484,-9.45415810579],[-37.8739351535,-9.45427577861],[-37.87357727401,-9.54475422977],[-37.78219871045,-9.54444051839]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"MAPNIK","name":"OpenStreetMap (Standard)","type":"tms","template":"https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png","scaleExtent":[0,19],"terms_url":"https://www.openstreetmap.org/","terms_text":"© OpenStreetMap contributors, CC-BY-SA","default":true,"description":"The default OpenStreetMap layer.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAGb0lEQVR4Xq3MS2xcVx3H8e855z7m3vH1jMdjO43zshIrtpM0SZ3WFEcRVFFKoRWPBYtAHwgWCFUsQN100QeCsqAhCESrirRASdWWIkoUqgKFJm3UZ5o2oW2akrR5uXbi2ON4PPfOfZ17iERW2bCAz1/f3V8/cfDC02UEj4OxKHjdFMUfmUzOlAeXZFZuuVIKN8zi1dPh7Hcn5091G2EOB5b//NplA28/9tAT4bq111jD64ZKHR2VQWPEbULI0aHqZz7NZeLNmSeVMOJu4AfGgNEGLsR/95YuetcRzprcFJvaaVxrpm2mmqfp8FxKSYk8ck+0pt1nykFp0A/k9Tnt/lq3T2dHEOmi2DxSu+EdAAFwcPqp640xe42h26Qa2hqnXsFVHs04pNFuYgvbtOWCmD3aMj2VNaLi1+jwyxgpCKOQRCdMN6ZMd5Bmw1cPfG+5O/7LeX0ECyBppx9Zrn0c6BbNHJNr4qhFYWtsJCWpSFUm3ntxips2bxe+p1BKIJQECpRbkCQ2wu0XzbnIeemvhzYCVNR6JMDm5bdNF9qcwhiKbpvMg2KujZDmUgX1jgqT719gy+iX6QxsPM9F2YqclHbRRpUEXmCRZTGFlZGKxSMbR6+uA0gu863OzLc7cVUZN6jgKI8kicl0ykzjAiW5lGrVAWUwokApSa3UTY/XR2B3UlDgVy1sB8od7tgt2++4AcACOHL+uRW2bW8QQiCxcUoS6XssyBbnF6Y5+8kci8vjlJwqjnQwWpDlgtRYZDpHmxJzWUyk26gOYXxK0g+8G4bXX/snC0DZcmVh9EoQ5DpDSIVJYmIiGvkCurAQpkLU9kkTEEJeCjxbURSCZgTkfVjOApoM6Qtc3109Nj7uWO9M70EbPQT4YMhNjrWQEdHmTPs8SgfUisUgDLoAgcGyEjJtEaeaVlKQ5gVSGYwBhETaEmVJcemQaZ44aRpvyLIEnedGoNHNkNTTeI5DT2kRljeJziVhnKNlE1GaJFfnuRi3SXMDxmA7IUqCI20qdifkxfED+/dlanzb1cYL3BFhsTXPU4Ep0FGKUVALegCb1oLN7FlNpd5HIUNQLYxIsO0EKcByWljuAmXbp7fcIwgVb7xyaNeep3YfUnt272PLjaP1em/lZqmEk4cJQoMKfBxVIcwjlAp47okX6ap3XaoP221CIREyx7La2E6O7/h0eTXK+Bw+8uHrP7znvocXLe6flwCHXj06kab5hJAS6dhQFOgiJ2qXsKLVuHqAgdVD7HrwXibPTKJzFyMMAgECHGXTJTqxE4t3T5xMD7y29+mFRjgpLSUlYJ793T9ORWF0Lk1StCzQNqTTAle30flbzJ/bx6n3Xsa2Fb9/5Eccfu19wnlNFBniWJA3JecbDfa/8y5nJg7bW7ZeuyYKZwyF0QIAkC988Ogzfof6SppapHGZqgNTExPsfngfgaXpqyWk9QF6lwWk7YJlK1fQaTysqk8sE6LwIq4OEMql1DH3/O03PnBHUCk3JMCeA7/q6u1a0ltiNZ1eL719cPrcWR752d+Yn2lx/HSDY40qY2Pb2PapjYxv3YBX1syZ88weP3bp90Omw3PMOxNUe9FTn9gn5uemQqfk5BbAisHBlVo7g7PFx9TdgDMnZvjtzheI51qkWY5xYWxTLxXfJ5IVevIZ6gMDxCYnPjWDXZ0nSiOkEmYqO5l8cGT6FSD6+NhRJMCF1sWV88VkX6f3n/FHd+xl9uwsrTDEOIbPfWEj120eorw0JEzLhGWfop3ixxKrP0CTIQSAEVmhw5/f94uXAANg3b/r+1YrnV1T86ucPDzBrp3PcvHcHGmaUekL+OKtm9m0ailOUEe4FrXyWaKFblM4HmUvElNzF4jTxFiOhRRSJO34JHCOy6RU0i60uepfx07nO+593FycapAkCbX+Kl+/cxvXfXYIU3GjN/Yf2vPPg2/9JVxoNYNqQ+hcilznlKWDcpSwlCWiZrtx/O3Tf+AKClj88I9v/9aD99/aHBkaLlYNDTXuvPubH/3kN3e9vP3bn78HGAP6gSXA6K3fufnOXz+/888vHH3i9O4XH3j1roe+8dDo1pGvAeuAClfa/+aTQH35Yztuenz7l4aPLB9c81O/3H3L5VHFlUACZaAH6AQc/pv1o9cEiwbWbRlev+mrazeOblg3usnj/6nWV2fVyFp71fCa0sDgkOKyq5av4H/xb0Ky8po5hQEuAAAAAElFTkSuQmCC"},{"id":"OpenStreetMap-turistautak","name":"OpenStreetMap (turistautak)","type":"tms","template":"http://{switch:h,i,j}.tile.openstreetmap.hu/turistautak/{zoom}/{x}/{y}.png","scaleExtent":[0,18],"polygon":[[[16.1139147,46.8691038],[16.1789749,46.90662],[16.2000429,46.9415079],[16.2217547,46.9355441],[16.2462784,46.9463851],[16.2553226,46.9642125],[16.2764694,46.9626082],[16.290583,47.0139849],[16.3016199,46.9992329],[16.3414618,46.9965225],[16.3505162,47.0106313],[16.3734016,46.9985929],[16.412765,47.00475],[16.4332705,46.9927417],[16.4478119,47.003893],[16.479997,46.9941169],[16.5121988,47.0011695],[16.4635584,47.0322699],[16.4478586,47.0227481],[16.439123,47.029663],[16.445673,47.038872],[16.520323,47.056103],[16.473213,47.0736169],[16.4637199,47.09392],[16.500798,47.110058],[16.500035,47.123295],[16.5295349,47.1287419],[16.5171609,47.1496938],[16.454951,47.1425878],[16.4648728,47.1683349],[16.4555643,47.1875584],[16.4305559,47.1847022],[16.4195013,47.1949147],[16.4189215,47.2107114],[16.4371293,47.2097043],[16.4426335,47.2337117],[16.4313127,47.2527554],[16.4671512,47.2531652],[16.4892319,47.2798885],[16.4646338,47.3338455],[16.4337002,47.3528101],[16.458513,47.3670496],[16.4454619,47.4070195],[16.4831657,47.4093628],[16.4963821,47.3892659],[16.5170941,47.4100218],[16.5749054,47.4054243],[16.5807291,47.4191699],[16.661847,47.455595],[16.6706419,47.47422],[16.6523395,47.500342],[16.6895619,47.510161],[16.7147797,47.540199],[16.663545,47.567733],[16.673199,47.6049544],[16.6595343,47.6061018],[16.652758,47.622852],[16.6314207,47.6283176],[16.5739108,47.619667],[16.5147382,47.6461964],[16.4967504,47.6393149],[16.425464,47.6621679],[16.4437449,47.674205],[16.4480507,47.6964725],[16.4746984,47.6811576],[16.4872245,47.6979767],[16.5521729,47.7225519],[16.5363779,47.736785],[16.5479799,47.751544],[16.6095193,47.7603722],[16.6344148,47.7590843],[16.65729,47.7414879],[16.7209405,47.7353565],[16.7534062,47.6828165],[16.8301587,47.681058],[16.8394284,47.7045139],[16.8668943,47.7211462],[16.876679,47.6876452],[17.0937421,47.7077706],[17.0706562,47.7285366],[17.0516019,47.7938499],[17.0749479,47.8084997],[17.047139,47.8285635],[17.0519452,47.8377691],[17.0105513,47.8581765],[17.0163878,47.8673325],[17.0857537,47.8746239],[17.113171,47.9271605],[17.0917133,47.9342916],[17.1183782,47.9601083],[17.094657,47.9708775],[17.2010289,48.019992],[17.241769,48.0224651],[17.257955,47.998655],[17.334651,47.993125],[17.4029929,47.947849],[17.4539199,47.8852579],[17.5267369,47.865509],[17.5675779,47.8151289],[17.608402,47.8218859],[17.7085789,47.756678],[17.7798739,47.739487],[17.8660959,47.74575],[17.9001292,47.7392633],[17.946867,47.744668],[17.9708709,47.7578392],[18.0044103,47.7463402],[18.0380583,47.7576812],[18.2958774,47.7314616],[18.4540681,47.7651226],[18.4931553,47.7527552],[18.5590761,47.7659963],[18.6460866,47.7590921],[18.7260691,47.7890411],[18.7411784,47.8138245],[18.7920013,47.8230869],[18.8485417,47.8167221],[18.855876,47.826077],[18.828014,47.834291],[18.8135749,47.85555],[18.76353,47.8716049],[18.756858,47.896838],[18.776746,47.955092],[18.7552499,47.9763469],[18.8157429,47.993442],[18.819998,48.039676],[18.833268,48.048239],[18.8749364,48.0470707],[18.886674,48.058682],[18.9089819,48.051139],[18.9439039,48.058865],[18.9816099,48.0536009],[19.0148639,48.078179],[19.0585249,48.0573529],[19.0843619,48.072781],[19.107402,48.065596],[19.1352889,48.074146],[19.2413679,48.0536529],[19.2557819,48.0715559],[19.3031119,48.088711],[19.3865969,48.091914],[19.400018,48.082304],[19.454053,48.101436],[19.467354,48.083933],[19.4944199,48.109906],[19.492377,48.1396639],[19.5128219,48.154663],[19.504518,48.173443],[19.528967,48.190358],[19.526044,48.20313],[19.577502,48.2160149],[19.6308263,48.2500725],[19.6445239,48.2391719],[19.669857,48.239212],[19.691219,48.203894],[19.721125,48.201473],[19.74618,48.2165119],[19.7871629,48.19253],[19.7987329,48.19482],[19.8052829,48.183733],[19.782415,48.165039],[19.794812,48.153529],[19.821331,48.169081],[19.8452819,48.162742],[19.8551729,48.178431],[19.8601309,48.169409],[19.898745,48.1663119],[19.9145359,48.146863],[19.898298,48.1249019],[19.937383,48.131118],[19.9743939,48.1660049],[19.988706,48.1621679],[20.029038,48.1776849],[20.049449,48.1671999],[20.0729859,48.179606],[20.0700369,48.1917019],[20.1340909,48.225182],[20.1331879,48.253982],[20.206162,48.250979],[20.2038299,48.261906],[20.228466,48.262779],[20.2349469,48.279933],[20.286858,48.26164],[20.3257109,48.272794],[20.3374649,48.301667],[20.3656579,48.316606],[20.384077,48.3511809],[20.4098349,48.365857],[20.402532,48.382565],[20.4205349,48.403858],[20.416228,48.418536],[20.507929,48.489363],[20.5065069,48.534415],[20.537471,48.527878],[20.5464939,48.544292],[20.586595,48.535759],[20.6538739,48.561413],[20.836359,48.58284],[20.8378,48.57421],[20.8504359,48.5816329],[20.8453301,48.5665046],[20.8681549,48.551818],[20.922323,48.559453],[20.9346349,48.538341],[20.955882,48.533963],[20.9561979,48.521666],[20.9815849,48.5177669],[21.0151139,48.532313],[21.0663209,48.525894],[21.1174479,48.4910549],[21.1608749,48.521499],[21.179634,48.518232],[21.221061,48.537497],[21.305488,48.5222489],[21.313377,48.550841],[21.326875,48.554129],[21.319384,48.561201],[21.4154499,48.558951],[21.4226649,48.578821],[21.4406099,48.585104],[21.514091,48.551065],[21.5420199,48.508395],[21.6139329,48.509416],[21.6201879,48.469826],[21.663549,48.417961],[21.6645609,48.392164],[21.7017409,48.380695],[21.711871,48.357617],[21.8174139,48.332787],[21.8352029,48.3346409],[21.837213,48.363253],[21.8842979,48.356047],[21.8848429,48.367539],[21.897883,48.36256],[21.8997959,48.3702229],[21.9281859,48.3615969],[21.9268059,48.370899],[21.949198,48.378728],[21.994463,48.377323],[22.0213259,48.392749],[22.0546049,48.377528],[22.0764859,48.387241],[22.086743,48.371564],[22.1359089,48.380519],[22.131056,48.3912329],[22.152768,48.3962409],[22.1561913,48.4093076],[22.2125722,48.4256468],[22.2371405,48.4100396],[22.2654858,48.4098675],[22.2398761,48.3870055],[22.2675722,48.3611612],[22.3178106,48.3545437],[22.3132861,48.3250712],[22.3372944,48.3079113],[22.3384267,48.2792074],[22.3847547,48.2339632],[22.4006407,48.249198],[22.4328384,48.2525166],[22.456386,48.2423109],[22.4899029,48.2534237],[22.4972201,48.2395546],[22.5161491,48.237965],[22.5311088,48.2094282],[22.5711442,48.1961428],[22.5616362,48.1816066],[22.5982449,48.144756],[22.5902763,48.1073414],[22.6754492,48.091997],[22.7347192,48.119848],[22.7576242,48.1200599],[22.7703914,48.1090162],[22.772319,48.1218742],[22.8027688,48.1221112],[22.8025285,48.1070813],[22.8254256,48.1175119],[22.8364365,48.080249],[22.8611284,48.0750312],[22.8677955,48.0524256],[22.8820424,48.0548053],[22.8659692,48.0113165],[22.835562,47.9905988],[22.8407599,47.9813636],[22.8725729,47.9752683],[22.8697274,47.9659593],[22.8915652,47.9672446],[22.897435,47.9540629],[22.8473299,47.9077579],[22.7928135,47.8908586],[22.7586924,47.8941446],[22.77775,47.8422508],[22.7136344,47.8360928],[22.6801938,47.7877527],[22.6111171,47.7717455],[22.5490018,47.7722246],[22.4812121,47.8108886],[22.4513078,47.803389],[22.4313319,47.7398119],[22.3566167,47.7486206],[22.3177714,47.7660887],[22.3176236,47.7433657],[22.2851369,47.7292757],[22.264325,47.7310675],[22.2589955,47.6979057],[22.2306796,47.693196],[22.1796501,47.5916115],[22.1289245,47.5978984],[22.0942787,47.5583628],[22.0782587,47.5621299],[22.0534529,47.5474795],[22.0712176,47.5380742],[22.0617872,47.5288029],[22.0451278,47.5398919],[22.0367222,47.5326653],[22.0071886,47.48362],[22.0327909,47.4508372],[22.0238835,47.3908631],[22.0119849,47.3758016],[21.9627373,47.381053],[21.9382461,47.3725317],[21.8777922,47.2857763],[21.8872845,47.2730473],[21.8534909,47.2397622],[21.8580662,47.1873597],[21.8124804,47.1667511],[21.7924092,47.1059751],[21.7268258,47.0983882],[21.6976037,47.057915],[21.6504151,47.0408303],[21.6888701,47.0019977],[21.6678744,46.9712337],[21.6814917,46.9652089],[21.6381964,46.9330487],[21.5984455,46.9274708],[21.6142857,46.8867275],[21.6016694,46.8668202],[21.520328,46.8373749],[21.5186086,46.8000703],[21.4831761,46.7650246],[21.5263389,46.7393249],[21.529369,46.7209721],[21.4923253,46.6859652],[21.4728438,46.6959075],[21.4299047,46.693937],[21.4309553,46.6781367],[21.4546661,46.660863],[21.4162375,46.6426231],[21.4097959,46.6218052],[21.3657038,46.6379501],[21.3300499,46.6318155],[21.3139733,46.617666],[21.3012351,46.5908672],[21.3207905,46.5828562],[21.2743045,46.5407362],[21.2600254,46.5021583],[21.2744188,46.4767333],[21.2964506,46.4762973],[21.3174343,46.4507288],[21.2895176,46.4154784],[21.2963256,46.4069601],[21.2250116,46.4136899],[21.2064214,46.4033825],[21.1992563,46.3479034],[21.1762269,46.3357664],[21.180497,46.3044494],[21.1155437,46.3018529],[21.1030549,46.2624637],[21.0708792,46.2539014],[21.0660827,46.2429394],[21.0366237,46.2480392],[21.0246723,46.2665329],[20.960817,46.2623039],[20.9465849,46.2793024],[20.9250701,46.2766191],[20.9218133,46.2618129],[20.8732713,46.2877555],[20.7756538,46.2759602],[20.7490474,46.2508489],[20.7618619,46.204563],[20.727401,46.2077485],[20.7341052,46.1939355],[20.7140487,46.1660531],[20.6843592,46.1447802],[20.6549178,46.1497739],[20.6394471,46.1267602],[20.5450486,46.1790935],[20.5014839,46.190334],[20.4949436,46.1709908],[20.4592293,46.1428837],[20.3975133,46.1574709],[20.3685325,46.1528554],[20.3557074,46.1696256],[20.2968136,46.1521542],[20.2549024,46.1158522],[20.2484757,46.1300956],[20.2330132,46.1241668],[20.1817362,46.1601137],[20.1364966,46.1449476],[20.1009667,46.1772756],[20.0636156,46.1437275],[20.0346142,46.1458888],[20.0158072,46.1768354],[19.9354075,46.1764243],[19.8533469,46.1500005],[19.8179747,46.1281652],[19.7585403,46.1479754],[19.6982054,46.1879317],[19.6827672,46.1800388],[19.661508,46.1904394],[19.6317396,46.1692993],[19.5676482,46.179106],[19.5604013,46.1665762],[19.5026585,46.1424492],[19.5271208,46.1210269],[19.4645033,46.0953827],[19.4665828,46.0820437],[19.4160037,46.0460453],[19.3803957,46.0358749],[19.3640923,46.0522965],[19.2819012,46.0148048],[19.2965348,45.9881173],[19.2856472,45.9968981],[19.1479857,45.9963445],[19.1338422,46.0370993],[19.104873,46.0401673],[19.0660427,46.0001999],[19.0796791,45.9636376],[19.0059803,45.9590674],[19.0092745,45.9236559],[18.9061334,45.9353801],[18.8794572,45.9166827],[18.8647137,45.9208493],[18.8685629,45.9113361],[18.8276792,45.9051714],[18.8220041,45.9145893],[18.8075092,45.9036055],[18.809247,45.8796189],[18.7956242,45.8784488],[18.7048857,45.9181883],[18.6700246,45.9108439],[18.6596602,45.9168934],[18.6651348,45.899279],[18.6412808,45.8890396],[18.6550179,45.8742393],[18.6277704,45.8733782],[18.6148449,45.8531438],[18.6236656,45.8398531],[18.5732391,45.8137578],[18.5749849,45.8004344],[18.559716,45.8037961],[18.5223504,45.7826858],[18.4906706,45.7947167],[18.4821905,45.7655032],[18.4562828,45.7695229],[18.4450763,45.7605195],[18.446853,45.737128],[18.40763,45.7397119],[18.3918949,45.7616983],[18.3642257,45.7729364],[18.3394214,45.7471605],[18.2968157,45.7612196],[18.2440473,45.7612305],[18.2307311,45.7790328],[18.1908702,45.7878759],[18.1681939,45.7762712],[18.1246514,45.7896277],[18.1068067,45.7708256],[18.0818922,45.7645205],[17.9958808,45.7957311],[17.9302095,45.7863301],[17.9066757,45.7925692],[17.8653145,45.7670064],[17.8262748,45.8099957],[17.8089784,45.8040989],[17.7809054,45.8174884],[17.7603399,45.811923],[17.7408624,45.8295975],[17.6632915,45.8381849],[17.6276211,45.8979446],[17.5700676,45.9358204],[17.4378254,45.9503823],[17.4258964,45.9272681],[17.4108059,45.9399665],[17.392149,45.9302149],[17.3828713,45.9475733],[17.3476208,45.9423413],[17.3438769,45.9605329],[17.3537711,45.9525011],[17.3905375,45.9581914],[17.387423,45.9661823],[17.3583539,45.9642737],[17.3754852,45.9686921],[17.3751895,45.9881054],[17.3635685,45.9915442],[17.3567202,45.9735836],[17.3339583,45.9960781],[17.3319847,45.9728948],[17.3129974,45.9665347],[17.323647,45.9887776],[17.2987653,45.9838652],[17.3041996,46.0021128],[17.2579726,46.0110256],[17.29632,46.0285169],[17.2541514,46.030005],[17.270955,46.0567055],[17.2324767,46.0592034],[17.2525145,46.0664725],[17.2313144,46.0790345],[17.2019916,46.0765488],[17.2331299,46.0989644],[17.2104017,46.1001693],[17.2129734,46.113855],[17.175927,46.1084583],[17.1743424,46.1287608],[17.1865197,46.1332308],[17.1810983,46.1505485],[17.1562307,46.1585819],[17.1592857,46.1696818],[17.1261012,46.1684495],[17.1227409,46.1789791],[17.0752482,46.1889531],[17.0661614,46.2022984],[16.9735401,46.2251982],[16.973954,46.2431113],[16.9504085,46.2415285],[16.8862356,46.2814598],[16.8713682,46.3252767],[16.8802109,46.3356966],[16.8615374,46.3452401],[16.8656232,46.3556489],[16.8521959,46.3517189],[16.8498589,46.3626245],[16.8352859,46.3638195],[16.8376499,46.3748032],[16.8261732,46.3670994],[16.7933444,46.387385],[16.7592072,46.3776563],[16.7298672,46.40149],[16.7182119,46.3898704],[16.6772872,46.4494536],[16.6631785,46.4486958],[16.6663732,46.4582995],[16.6187915,46.4619875],[16.604468,46.4760773],[16.5235997,46.5053761],[16.5325768,46.5314027],[16.5176728,46.5363516],[16.5084107,46.5652692],[16.4829969,46.5660383],[16.4834008,46.5786011],[16.4455713,46.610952],[16.4248583,46.6131645],[16.385941,46.6442485],[16.3915424,46.6637257],[16.4198454,46.6584771],[16.4286335,46.6939737],[16.3689211,46.7040082],[16.3798266,46.7153869],[16.3710856,46.7222945],[16.3570587,46.7142387],[16.3185954,46.7541449],[16.3305417,46.7752119],[16.3121626,46.7780033],[16.3127666,46.797314],[16.3406373,46.8051851],[16.3508404,46.8300552],[16.3403309,46.8468762],[16.3015007,46.8595142],[16.2913867,46.8728341],[16.2332296,46.8766702],[16.1560866,46.8537074],[16.126571,46.8569079],[16.1139147,46.8691038]]],"terms_url":"https://www.openstreetmap.org/","terms_text":"© OpenStreetMap contributors"},{"id":"osm-gps","name":"OpenStreetMap GPS traces","type":"tms","template":"https://{switch:a,b,c}.gps-tile.openstreetmap.org/lines/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"terms_url":"https://www.openstreetmap.org/copyright","terms_text":"© OpenStreetMap contributors","terms_html":"GPS Direction: © OpenStreetMap contributors.","description":"Public GPS traces uploaded to OpenStreetMap.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAGb0lEQVR4Xq3MS2xcVx3H8e855z7m3vH1jMdjO43zshIrtpM0SZ3WFEcRVFFKoRWPBYtAHwgWCFUsQN100QeCsqAhCESrirRASdWWIkoUqgKFJm3UZ5o2oW2akrR5uXbi2ON4PPfOfZ17iERW2bCAz1/f3V8/cfDC02UEj4OxKHjdFMUfmUzOlAeXZFZuuVIKN8zi1dPh7Hcn5091G2EOB5b//NplA28/9tAT4bq111jD64ZKHR2VQWPEbULI0aHqZz7NZeLNmSeVMOJu4AfGgNEGLsR/95YuetcRzprcFJvaaVxrpm2mmqfp8FxKSYk8ck+0pt1nykFp0A/k9Tnt/lq3T2dHEOmi2DxSu+EdAAFwcPqp640xe42h26Qa2hqnXsFVHs04pNFuYgvbtOWCmD3aMj2VNaLi1+jwyxgpCKOQRCdMN6ZMd5Bmw1cPfG+5O/7LeX0ECyBppx9Zrn0c6BbNHJNr4qhFYWtsJCWpSFUm3ntxips2bxe+p1BKIJQECpRbkCQ2wu0XzbnIeemvhzYCVNR6JMDm5bdNF9qcwhiKbpvMg2KujZDmUgX1jgqT719gy+iX6QxsPM9F2YqclHbRRpUEXmCRZTGFlZGKxSMbR6+uA0gu863OzLc7cVUZN6jgKI8kicl0ykzjAiW5lGrVAWUwokApSa3UTY/XR2B3UlDgVy1sB8od7tgt2++4AcACOHL+uRW2bW8QQiCxcUoS6XssyBbnF6Y5+8kci8vjlJwqjnQwWpDlgtRYZDpHmxJzWUyk26gOYXxK0g+8G4bXX/snC0DZcmVh9EoQ5DpDSIVJYmIiGvkCurAQpkLU9kkTEEJeCjxbURSCZgTkfVjOApoM6Qtc3109Nj7uWO9M70EbPQT4YMhNjrWQEdHmTPs8SgfUisUgDLoAgcGyEjJtEaeaVlKQ5gVSGYwBhETaEmVJcemQaZ44aRpvyLIEnedGoNHNkNTTeI5DT2kRljeJziVhnKNlE1GaJFfnuRi3SXMDxmA7IUqCI20qdifkxfED+/dlanzb1cYL3BFhsTXPU4Ep0FGKUVALegCb1oLN7FlNpd5HIUNQLYxIsO0EKcByWljuAmXbp7fcIwgVb7xyaNeep3YfUnt272PLjaP1em/lZqmEk4cJQoMKfBxVIcwjlAp47okX6ap3XaoP221CIREyx7La2E6O7/h0eTXK+Bw+8uHrP7znvocXLe6flwCHXj06kab5hJAS6dhQFOgiJ2qXsKLVuHqAgdVD7HrwXibPTKJzFyMMAgECHGXTJTqxE4t3T5xMD7y29+mFRjgpLSUlYJ793T9ORWF0Lk1StCzQNqTTAle30flbzJ/bx6n3Xsa2Fb9/5Eccfu19wnlNFBniWJA3JecbDfa/8y5nJg7bW7ZeuyYKZwyF0QIAkC988Ogzfof6SppapHGZqgNTExPsfngfgaXpqyWk9QF6lwWk7YJlK1fQaTysqk8sE6LwIq4OEMql1DH3/O03PnBHUCk3JMCeA7/q6u1a0ltiNZ1eL719cPrcWR752d+Yn2lx/HSDY40qY2Pb2PapjYxv3YBX1syZ88weP3bp90Omw3PMOxNUe9FTn9gn5uemQqfk5BbAisHBlVo7g7PFx9TdgDMnZvjtzheI51qkWY5xYWxTLxXfJ5IVevIZ6gMDxCYnPjWDXZ0nSiOkEmYqO5l8cGT6FSD6+NhRJMCF1sWV88VkX6f3n/FHd+xl9uwsrTDEOIbPfWEj120eorw0JEzLhGWfop3ixxKrP0CTIQSAEVmhw5/f94uXAANg3b/r+1YrnV1T86ucPDzBrp3PcvHcHGmaUekL+OKtm9m0ailOUEe4FrXyWaKFblM4HmUvElNzF4jTxFiOhRRSJO34JHCOy6RU0i60uepfx07nO+593FycapAkCbX+Kl+/cxvXfXYIU3GjN/Yf2vPPg2/9JVxoNYNqQ+hcilznlKWDcpSwlCWiZrtx/O3Tf+AKClj88I9v/9aD99/aHBkaLlYNDTXuvPubH/3kN3e9vP3bn78HGAP6gSXA6K3fufnOXz+/888vHH3i9O4XH3j1roe+8dDo1pGvAeuAClfa/+aTQH35Yztuenz7l4aPLB9c81O/3H3L5VHFlUACZaAH6AQc/pv1o9cEiwbWbRlev+mrazeOblg3usnj/6nWV2fVyFp71fCa0sDgkOKyq5av4H/xb0Ky8po5hQEuAAAAAElFTkSuQmCC","overlay":true},{"id":"lu.geoportail.opendata.ortho2010","name":"Ortho 2010 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2010/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","endDate":"2010-07-02T00:00:00.000Z","startDate":"2010-06-24T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"lu.geoportail.opendata.ortho2013","name":"Ortho 2013 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2013/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","endDate":"2013-07-20T00:00:00.000Z","startDate":"2013-07-19T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"lu.geoportail.opendata.ortho2016","name":"Ortho 2016 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2016/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","endDate":"2016-08-16T00:00:00.000Z","startDate":"2013-08-30T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"lu.geoportail.opendata.ortho2017","name":"Ortho 2017 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2017/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","endDate":"2017-06-22T00:00:00.000Z","startDate":"2017-06-14T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"OS-historic-25k-OSM_Limited","name":"OS 1:25k historic (OSM)","type":"tms","template":"https://ooc.openstreetmap.org/os1/{zoom}/{x}/{y}.jpg","scaleExtent":[6,17],"polygon":[[[-6.4585407,49.9044128],[-6.3872009,49.9841116],[-6.2296827,49.9896159],[-6.2171269,49.8680087],[-6.4551164,49.8591793],[-6.4585407,49.9044128]],[[-1.4495137,60.8634056],[-0.7167114,60.8545122],[-0.7349744,60.4359756],[-0.6938826,60.4168218],[-0.7258429,60.3942735],[-0.7395401,60.0484714],[-0.9267357,60.0461918],[-0.9381501,59.8266157],[-1.4586452,59.831205],[-1.4455187,60.0535999],[-1.463211,60.0535999],[-1.4643524,60.0630002],[-1.5716475,60.0638546],[-1.5693646,60.1790005],[-1.643558,60.1807033],[-1.643558,60.1892162],[-1.8216221,60.1894999],[-1.8204807,60.3615507],[-1.8415973,60.3697345],[-1.8216221,60.3832755],[-1.8179852,60.5934321],[-1.453168,60.5934321],[-1.4495137,60.8634056]],[[-4.9089213,54.4242078],[-4.282598,54.4429861],[-4.2535417,54.029769],[-4.8766366,54.0221831],[-4.9089213,54.4242078]],[[-5.8667408,59.1444603],[-5.7759966,59.1470945],[-5.7720016,59.1014052],[-5.8621751,59.0990605],[-5.8667408,59.1444603]],[[-1.7065887,59.5703599],[-1.5579165,59.5693481],[-1.5564897,59.4965695],[-1.7054472,59.4975834],[-1.7065887,59.5703599]],[[-7.6865827,58.2940975],[-7.5330594,58.3006957],[-7.5256401,58.2646905],[-7.6797341,58.2577853],[-7.6865827,58.2940975]],[[-4.5338281,59.0359871],[-4.481322,59.0371616],[-4.4796099,59.0186583],[-4.5332574,59.0180707],[-4.5338281,59.0359871]],[[-8.6710698,57.8769896],[-8.4673234,57.8897332],[-8.4467775,57.7907],[-8.6510947,57.7779213],[-8.6710698,57.8769896]],[[-5.2395519,50.3530581],[-5.7920073,50.3384899],[-5.760047,49.9317027],[-4.6551363,49.9581461],[-4.677965,50.2860073],[-4.244219,50.2801723],[-4.2487848,50.2042525],[-3.3812929,50.2042525],[-3.4223846,50.5188201],[-3.1164796,50.5246258],[-3.1210453,50.6579592],[-2.6736357,50.6619495],[-2.5953453,50.6394325],[-2.5905026,50.5728419],[-2.4791203,50.5733545],[-2.4758919,50.5066704],[-2.3967943,50.5056438],[-2.401637,50.5723293],[-1.0400296,50.5718167],[-1.0335726,50.7059289],[-0.549302,50.7038843],[-0.5460736,50.7886618],[-0.0924734,50.7856002],[-0.0876307,50.7181949],[0.4789659,50.7120623],[0.487037,50.8182467],[0.9761503,50.8049868],[0.9922927,51.0126311],[1.4491213,51.0004424],[1.4781775,51.4090372],[1.0229632,51.4271576],[1.035877,51.7640881],[1.6105448,51.7500992],[1.646058,52.1560003],[1.7267698,52.1540195],[1.749369,52.4481811],[1.7870672,52.4811624],[1.759102,52.522505],[1.7933451,52.9602749],[0.3798147,52.9958468],[0.3895238,53.2511239],[0.3478614,53.2511239],[0.3238912,53.282186],[0.3461492,53.6538501],[0.128487,53.6575466],[0.116582,53.6674703],[0.1350586,54.0655731],[-0.0609831,54.065908],[-0.0414249,54.4709448],[-0.5662701,54.4771794],[-0.5592078,54.6565127],[-1.1665638,54.6623485],[-1.1637389,54.842611],[-1.3316194,54.843909],[-1.3257065,55.2470842],[-1.529453,55.2487108],[-1.524178,55.6540122],[-1.7638798,55.6540122],[-1.7733693,55.9719116],[-2.1607858,55.9682981],[-2.1543289,56.0621387],[-2.4578051,56.0585337],[-2.4190635,56.641717],[-2.0962164,56.641717],[-2.0833025,57.0021322],[-1.9283359,57.0126802],[-1.9180966,57.3590895],[-1.7502161,57.3625721],[-1.7695869,57.7608634],[-3.6937554,57.7574187],[-3.7066693,57.9806386],[-3.5969013,57.9772149],[-3.6033582,58.1207277],[-3.0222335,58.1309566],[-3.0286905,58.5410788],[-2.8478961,58.530968],[-2.86081,58.8430508],[-2.679624,58.8414991],[-2.6841897,58.885175],[-2.6339665,58.9052239],[-2.679624,58.9335083],[-2.6887555,59.0229231],[-2.3668703,59.0229231],[-2.3702946,59.2652861],[-2.3429001,59.2821989],[-2.3714361,59.2996861],[-2.3737189,59.3707083],[-2.3429001,59.385825],[-2.3725775,59.400354],[-2.3714361,59.4259098],[-3.0734196,59.4230067],[-3.0711368,59.3433649],[-3.103097,59.3311405],[-3.0745611,59.3136695],[-3.0722782,59.232603],[-3.3850319,59.1484167],[-3.3747589,58.9352753],[-3.5653789,58.9323303],[-3.554829,58.69759],[-5.2808579,58.6667732],[-5.2534159,58.3514125],[-5.5068508,58.3437887],[-5.4761804,58.0323557],[-5.8974958,58.0212436],[-5.8522972,57.6171758],[-6.1396311,57.6137174],[-6.1541592,57.7423183],[-6.2913692,57.7380102],[-6.3365678,58.1398784],[-6.1121891,58.1466944],[-6.1473778,58.5106285],[-6.2934817,58.5416182],[-6.8413713,58.2977321],[-7.0057382,58.2929331],[-7.1016189,58.2064403],[-7.2573132,58.1793148],[-7.2531092,58.1004928],[-7.4070698,58.0905566],[-7.391347,57.7911354],[-7.790991,57.7733151],[-7.7624215,57.5444165],[-7.698501,57.1453194],[-7.7943817,57.1304547],[-7.716764,56.7368628],[-7.0122067,56.7654359],[-6.979922,56.5453858],[-7.0638622,56.5453858],[-7.0444914,56.3562587],[-6.500676,56.3812917],[-6.4491433,55.9793649],[-6.563287,55.9691456],[-6.5393742,55.7030135],[-6.5595521,55.6907321],[-6.5345315,55.6761713],[-6.5216176,55.5704434],[-5.8912587,55.5923416],[-5.8560127,55.2320733],[-5.2293639,55.2515958],[-5.1837064,54.6254139],[-3.6655956,54.6518373],[-3.6496155,54.4320023],[-3.5400375,54.4306744],[-3.530906,54.0290181],[-3.0697656,54.030359],[-3.0675737,53.8221388],[-3.0804876,53.7739911],[-3.0619239,53.7477488],[-3.0611168,53.6737049],[-3.2144691,53.6708361],[-3.2057699,53.4226163],[-3.2799632,53.355224],[-3.2896655,53.3608441],[-3.3327547,53.364931],[-3.3761293,53.3540318],[-4.0888976,53.3433102],[-4.0945474,53.4612036],[-4.697412,53.4448624],[-4.6882805,53.3318598],[-4.7202407,53.2895771],[-4.6837148,53.2486184],[-4.6768661,53.1542644],[-4.8480816,53.1446807],[-4.8178336,52.7440299],[-4.2545751,52.7558939],[-4.228876,52.254876],[-4.2607571,52.2536408],[-4.2724603,52.2432637],[-4.8136263,52.230095],[-4.8079191,52.1138892],[-5.3889104,52.0991668],[-5.3717888,51.9129667],[-5.4208706,51.9101502],[-5.414022,51.8453218],[-5.3683645,51.8474373],[-5.3466772,51.5595332],[-4.773676,51.5758518],[-4.7656859,51.4885146],[-4.1915432,51.4970427],[-4.1869775,51.4344663],[-3.6151177,51.4444274],[-3.6105519,51.3746543],[-3.1494115,51.3789292],[-3.1494115,51.2919281],[-4.3038735,51.2745907],[-4.2861169,51.0508721],[-4.8543277,51.0366633],[-4.8372201,50.7212787],[-5.2618345,50.7082694],[-5.2395519,50.3530581]],[[-2.1502671,60.171318],[-2.0030218,60.1696146],[-2.0013096,60.0997023],[-2.148555,60.1011247],[-2.1502671,60.171318]],[[-6.2086011,59.1163488],[-6.1229934,59.1166418],[-6.121852,59.0714985],[-6.2097426,59.0714985],[-6.2086011,59.1163488]],[[-4.4159559,59.0889036],[-4.4212022,59.0770848],[-4.3971904,59.0779143],[-4.3913388,59.0897328],[-4.4159559,59.0889036]]]},{"id":"OS-New_Popular_Edition-historic","name":"OS New Popular Edition historic","type":"tms","template":"https://ooc.openstreetmap.org/npe/{zoom}/{x}/{y}.png","scaleExtent":[6,22],"polygon":[[[-5.8,49.8],[-5.8,55.8],[1.9,55.8],[1.9,49.8],[-5.8,49.8]]]},{"id":"OS-OpenData_Locator","name":"OS OpenData Locator","type":"tms","template":"http://tiles.itoworld.com/os_locator/{zoom}/{x}/{y}.png","polygon":[[[-9,49.8],[-9,61.1],[1.9,61.1],[1.9,49.8],[-9,49.8]]],"overlay":true},{"id":"OS-OpenData_StreetView","name":"OS OpenData StreetView","type":"tms","template":"https://{switch:a,b,c}.os.openstreetmap.org/sv/{zoom}/{x}/{y}.png","scaleExtent":[1,18],"polygon":[[[-5.8292886,50.0229734],[-5.8292886,50.254819],[-5.373356,50.254819],[-5.373356,50.3530588],[-5.1756021,50.3530588],[-5.1756021,50.5925406],[-4.9970743,50.5925406],[-4.9970743,50.6935617],[-4.7965738,50.6935617],[-4.7965738,50.7822112],[-4.6949503,50.7822112],[-4.6949503,50.9607371],[-4.6043131,50.9607371],[-4.6043131,51.0692066],[-4.3792215,51.0692066],[-4.3792215,51.2521782],[-3.9039346,51.2521782],[-3.9039346,51.2916998],[-3.7171671,51.2916998],[-3.7171671,51.2453014],[-3.1486246,51.2453014],[-3.1486246,51.362067],[-3.7446329,51.362067],[-3.7446329,51.4340386],[-3.8297769,51.4340386],[-3.8297769,51.5298246],[-4.0852091,51.5298246],[-4.0852091,51.4939284],[-4.3792215,51.4939284],[-4.3792215,51.5427168],[-5.1444195,51.5427168],[-5.1444195,51.6296003],[-5.7387103,51.6296003],[-5.7387103,51.774037],[-5.5095393,51.774037],[-5.5095393,51.9802596],[-5.198799,51.9802596],[-5.198799,52.0973358],[-4.8880588,52.0973358],[-4.8880588,52.1831557],[-4.4957492,52.1831557],[-4.4957492,52.2925739],[-4.3015365,52.2925739],[-4.3015365,52.3685318],[-4.1811246,52.3685318],[-4.1811246,52.7933685],[-4.4413696,52.7933685],[-4.4413696,52.7369614],[-4.8569847,52.7369614],[-4.8569847,52.9317255],[-4.7288044,52.9317255],[-4.7288044,53.5038599],[-4.1578191,53.5038599],[-4.1578191,53.4113498],[-3.3110518,53.4113498],[-3.3110518,53.5038599],[-3.2333667,53.5038599],[-3.2333667,54.0159169],[-3.3926211,54.0159169],[-3.3926211,54.1980953],[-3.559644,54.1980953],[-3.559644,54.433732],[-3.7188984,54.433732],[-3.7188984,54.721897],[-4.3015365,54.721897],[-4.3015365,54.6140739],[-5.0473132,54.6140739],[-5.0473132,54.7532915],[-5.2298731,54.7532915],[-5.2298731,55.2190799],[-5.6532567,55.2190799],[-5.6532567,55.250088],[-5.8979647,55.250088],[-5.8979647,55.4822462],[-6.5933212,55.4822462],[-6.5933212,56.3013441],[-7.1727691,56.3013441],[-7.1727691,56.5601822],[-6.8171722,56.5601822],[-6.8171722,56.6991713],[-6.5315276,56.6991713],[-6.5315276,56.9066964],[-6.811679,56.9066964],[-6.811679,57.3716613],[-6.8721038,57.3716613],[-6.8721038,57.5518893],[-7.0973235,57.5518893],[-7.0973235,57.2411085],[-7.1742278,57.2411085],[-7.1742278,56.9066964],[-7.3719817,56.9066964],[-7.3719817,56.8075885],[-7.5202972,56.8075885],[-7.5202972,56.7142479],[-7.8306806,56.7142479],[-7.8306806,56.8994605],[-7.6494061,56.8994605],[-7.6494061,57.4739617],[-7.8306806,57.4739617],[-7.8306806,57.7915584],[-7.4736249,57.7915584],[-7.4736249,58.086063],[-7.1879804,58.086063],[-7.1879804,58.367197],[-6.8034589,58.367197],[-6.8034589,58.4155786],[-6.638664,58.4155786],[-6.638664,58.4673277],[-6.5178143,58.4673277],[-6.5178143,58.5625632],[-6.0536224,58.5625632],[-6.0536224,58.1568843],[-6.1470062,58.1568843],[-6.1470062,58.1105865],[-6.2799798,58.1105865],[-6.2799798,57.7122664],[-6.1591302,57.7122664],[-6.1591302,57.6667563],[-5.9339104,57.6667563],[-5.9339104,57.8892524],[-5.80643,57.8892524],[-5.80643,57.9621767],[-5.6141692,57.9621767],[-5.6141692,58.0911236],[-5.490819,58.0911236],[-5.490819,58.3733281],[-5.3199118,58.3733281],[-5.3199118,58.75015],[-3.5719977,58.75015],[-3.5719977,59.2091788],[-3.1944501,59.2091788],[-3.1944501,59.4759216],[-2.243583,59.4759216],[-2.243583,59.1388749],[-2.4611012,59.1388749],[-2.4611012,58.8185938],[-2.7407675,58.8185938],[-2.7407675,58.5804743],[-2.9116746,58.5804743],[-2.9116746,58.1157523],[-3.4865441,58.1157523],[-3.4865441,57.740386],[-1.7153245,57.740386],[-1.7153245,57.2225558],[-1.9794538,57.2225558],[-1.9794538,56.8760742],[-2.1658979,56.8760742],[-2.1658979,56.6333186],[-2.3601106,56.6333186],[-2.3601106,56.0477521],[-1.9794538,56.0477521],[-1.9794538,55.8650949],[-1.4745008,55.8650949],[-1.4745008,55.2499926],[-1.3221997,55.2499926],[-1.3221997,54.8221737],[-1.0550014,54.8221737],[-1.0550014,54.6746628],[-0.6618765,54.6746628],[-0.6618765,54.5527463],[-0.3247617,54.5527463],[-0.3247617,54.2865195],[0.0092841,54.2865195],[0.0092841,53.7938518],[0.2081962,53.7938518],[0.2081962,53.5217726],[0.4163548,53.5217726],[0.4163548,53.0298851],[1.4273388,53.0298851],[1.4273388,52.92021],[1.8333912,52.92021],[1.8333912,52.042488],[1.5235504,52.042488],[1.5235504,51.8261335],[1.2697049,51.8261335],[1.2697049,51.6967453],[1.116651,51.6967453],[1.116651,51.440346],[1.5235504,51.440346],[1.5235504,51.3331831],[1.4507565,51.3331831],[1.4507565,51.0207553],[1.0699883,51.0207553],[1.0699883,50.9008416],[0.7788126,50.9008416],[0.7788126,50.729843],[-0.7255952,50.729843],[-0.7255952,50.7038437],[-1.0074383,50.7038437],[-1.0074383,50.5736307],[-2.3625252,50.5736307],[-2.3625252,50.4846421],[-2.4987805,50.4846421],[-2.4987805,50.5736307],[-3.4096378,50.5736307],[-3.4096378,50.2057837],[-3.6922446,50.2057837],[-3.6922446,50.1347737],[-5.005468,50.1347737],[-5.005468,49.9474456],[-5.2839506,49.9474456],[-5.2839506,50.0229734],[-5.8292886,50.0229734]],[[-6.4580707,49.8673563],[-6.4580707,49.9499935],[-6.3978807,49.9499935],[-6.3978807,50.0053797],[-6.1799606,50.0053797],[-6.1799606,49.9168614],[-6.2540201,49.9168614],[-6.2540201,49.8673563],[-6.4580707,49.8673563]],[[-5.8343165,49.932156],[-5.8343165,49.9754641],[-5.7683254,49.9754641],[-5.7683254,49.932156],[-5.8343165,49.932156]],[[-1.9483797,60.6885737],[-1.9483797,60.3058841],[-1.7543149,60.3058841],[-1.7543149,60.1284428],[-1.5754914,60.1284428],[-1.5754914,59.797917],[-1.0316959,59.797917],[-1.0316959,60.0354518],[-0.6626918,60.0354518],[-0.6626918,60.9103862],[-1.1034395,60.9103862],[-1.1034395,60.8040022],[-1.3506319,60.8040022],[-1.3506319,60.6885737],[-1.9483797,60.6885737]],[[-2.203381,60.1968568],[-2.203381,60.0929443],[-1.9864011,60.0929443],[-1.9864011,60.1968568],[-2.203381,60.1968568]],[[-1.7543149,59.5698289],[-1.7543149,59.4639383],[-1.5373349,59.4639383],[-1.5373349,59.5698289],[-1.7543149,59.5698289]],[[-4.5585981,59.1370518],[-4.5585981,58.9569099],[-4.2867004,58.9569099],[-4.2867004,59.1370518],[-4.5585981,59.1370518]],[[-6.2787732,59.2025744],[-6.2787732,59.0227769],[-5.6650612,59.0227769],[-5.6650612,59.2025744],[-6.2787732,59.2025744]],[[-8.7163482,57.9440556],[-8.7163482,57.7305936],[-8.3592926,57.7305936],[-8.3592926,57.9440556],[-8.7163482,57.9440556]],[[-7.6077005,50.4021026],[-7.6077005,50.2688657],[-7.3907205,50.2688657],[-7.3907205,50.4021026],[-7.6077005,50.4021026]],[[-7.7304303,58.3579902],[-7.7304303,58.248313],[-7.5134503,58.248313],[-7.5134503,58.3579902],[-7.7304303,58.3579902]]]},{"id":"OS-Scottish_Popular-historic","name":"OS Scottish Popular historic","type":"tms","template":"https://ooc.openstreetmap.org/npescotland/{zoom}/{x}/{y}.jpg","scaleExtent":[6,15],"polygon":[[[-7.8,54.5],[-7.8,61.1],[-1.1,61.1],[-1.1,54.5],[-7.8,54.5]]]},{"id":"al_palestina","name":"Palestina AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Palestina&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.28906746617,-9.71915617946],[-37.28903527966,-9.71114035022],[-37.28911038151,-9.70220427214],[-37.28915329685,-9.69174505681],[-37.28918548336,-9.68885787521],[-37.28927131405,-9.68069325658],[-37.28926058521,-9.67731947667],[-37.28935714474,-9.66999011394],[-37.28935714474,-9.66599221238],[-37.28931422939,-9.66132793384],[-37.28941078892,-9.6552568713],[-37.2894644331,-9.64555775166],[-37.28949661961,-9.6348852245],[-37.28953953495,-9.62925794841],[-37.29639526119,-9.62884541884],[-37.31187697163,-9.62897235107],[-37.32761617413,-9.62914159397],[-37.33181114903,-9.62919448235],[-37.3433768343,-9.629173327],[-37.35876198521,-9.62922621538],[-37.37175460568,-9.6293002591],[-37.37838502636,-9.62913101629],[-37.3805093359,-9.62921563771],[-37.38060589543,-9.63142636478],[-37.38054152241,-9.63784691108],[-37.38043423405,-9.63894695947],[-37.38053079357,-9.64147494171],[-37.3805093359,-9.64876261706],[-37.38049860706,-9.65430495262],[-37.38043423405,-9.65599725065],[-37.380241115,-9.66028084202],[-37.38021965733,-9.66550569201],[-37.38018747082,-9.6705400861],[-37.38015528431,-9.67895877835],[-37.38013382664,-9.68781086916],[-37.38009091129,-9.70115730775],[-37.38002653828,-9.7105269939],[-37.38010164013,-9.71743247513],[-37.38004799595,-9.71958974786],[-37.3793184351,-9.7195368737],[-37.37392183056,-9.71955802336],[-37.36582155934,-9.71945227502],[-37.35849376431,-9.71946284985],[-37.353343923,-9.71937825115],[-37.34413858166,-9.71936767631],[-37.33422513714,-9.71923020337],[-37.3293327879,-9.71927250275],[-37.32180114498,-9.71924077822],[-37.31982703915,-9.71927250275],[-37.31094356289,-9.71919847884],[-37.2958910059,-9.71920905369],[-37.28906746617,-9.71915617946]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"palmeira_dos_indios","name":"Palmeira dos Indios AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Palmeira%20dos%20Indios&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.58663984051,-9.46124293173],[-36.58665056935,-9.45851253477],[-36.58618922939,-9.41968140694],[-36.58603902569,-9.41451629413],[-36.58596392384,-9.4059322986],[-36.58584590664,-9.3950935092],[-36.58579226246,-9.39163222273],[-36.58565278759,-9.38983276351],[-36.58549185505,-9.3824866389],[-36.58528800717,-9.37964976527],[-36.58510561695,-9.37743741114],[-36.5850305151,-9.3705885508],[-36.58890362492,-9.37057796513],[-36.59064169636,-9.37065206481],[-36.59389253369,-9.37059913647],[-36.60037275067,-9.37072616447],[-36.61045785656,-9.37049327977],[-36.62288184872,-9.37020746651],[-36.63377161732,-9.3700169242],[-36.63835283032,-9.36985813887],[-36.64742942562,-9.36997458145],[-36.6514098238,-9.36994282439],[-36.6553365778,-9.36972052485],[-36.65647383442,-9.36974169624],[-36.6611086916,-9.37023922355],[-36.66276093235,-9.37026039491],[-36.66704173794,-9.36973111055],[-36.67051788082,-9.36965701067],[-36.67325373402,-9.36965701067],[-36.67602177372,-9.36986872456],[-36.6759252142,-9.3725998221],[-36.67596812954,-9.37679169746],[-36.67638655415,-9.38137517998],[-36.67653675785,-9.38463544939],[-36.67663331738,-9.39264838381],[-36.67675133457,-9.39829014058],[-36.67689080944,-9.40874778795],[-36.67707319966,-9.41886642501],[-36.67716975918,-9.43178948329],[-36.67724486103,-9.43394857114],[-36.67718048802,-9.43752585362],[-36.67727704754,-9.44311396022],[-36.67729850521,-9.449326389],[-36.67740579357,-9.45528471196],[-36.67739506474,-9.4593803377],[-36.67735214939,-9.46017405798],[-36.67567845097,-9.46020580675],[-36.66624780407,-9.46030105305],[-36.66223521938,-9.46030105305],[-36.65736432781,-9.46041746516],[-36.65040131321,-9.46047037975],[-36.63543458691,-9.46065028927],[-36.61979194393,-9.46083019869],[-36.61433096638,-9.46083019869],[-36.61028619518,-9.46096777643],[-36.60646672955,-9.46096777643],[-36.60186405888,-9.46098894223],[-36.59425731411,-9.461115937],[-36.58663984051,-9.46124293173]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"Pangasinan_Bulacan_HiRes","name":"Pangasinán/Bulacan (Philippines HiRes)","type":"tms","template":"http://gravitystorm.dev.openstreetmap.org/imagery/philippines/{zoom}/{x}/{y}.png","scaleExtent":[12,19],"polygon":[[[120.336593,15.985768],[120.445995,15.984],[120.446134,15.974459],[120.476464,15.974592],[120.594247,15.946832],[120.598064,16.090795],[120.596537,16.197999],[120.368537,16.218527],[120.347576,16.042308],[120.336593,15.985768]],[[120.8268,15.3658],[121.2684,15.2602],[121.2699,14.7025],[120.695,14.8423],[120.8268,15.3658]]]},{"id":"pao_de_acucar","name":"Pão de Açucar AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Pao%20de%20Acucar&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.39002812509,-9.78589413544],[-37.39018686777,-9.77619515195],[-37.38992540924,-9.76575048432],[-37.38990673363,-9.75256304825],[-37.39014951655,-9.7410224633],[-37.39002812509,-9.73201243097],[-37.39012150314,-9.72254197161],[-37.39014951655,-9.71288716505],[-37.39018686777,-9.7034069601],[-37.39019620557,-9.69548203924],[-37.40377337333,-9.6955004481],[-37.41727583865,-9.69560169682],[-37.43223500148,-9.69569374108],[-37.44318824617,-9.69573055877],[-37.44723151552,-9.69582260299],[-37.45682144076,-9.69585021626],[-37.47062271582,-9.69591464719],[-37.47373220472,-9.69590544277],[-37.47586122415,-9.69604350903],[-37.48127715077,-9.69605271344],[-37.48131450199,-9.69889686551],[-37.48122112394,-9.70086658775],[-37.48121178614,-9.70238529092],[-37.48135185321,-9.70545028909],[-37.48137986662,-9.71045731285],[-37.4813425154,-9.71617295985],[-37.48120244833,-9.71875003124],[-37.48124913736,-9.72035148703],[-37.48136119101,-9.7213362865],[-37.4813425154,-9.72409739103],[-37.48129582638,-9.72506377223],[-37.48103436785,-9.72731865083],[-37.48101569224,-9.73088040767],[-37.48126781296,-9.73461699032],[-37.48130516418,-9.73638402962],[-37.48131450199,-9.73893333547],[-37.48131450199,-9.74387543612],[-37.48129582638,-9.7498850055],[-37.48122112394,-9.75315203071],[-37.48101569224,-9.75855405565],[-37.48083827396,-9.76419525907],[-37.48084761176,-9.76526275174],[-37.48094098981,-9.76675355473],[-37.480931652,-9.76881490096],[-37.48083827396,-9.77210014513],[-37.48086628737,-9.77486082942],[-37.48076357152,-9.77993122654],[-37.48081026054,-9.78629902044],[-37.46381545633,-9.78622540502],[-37.45353453357,-9.78619779924],[-37.43978928533,-9.78610577993],[-37.42997525279,-9.78606897221],[-37.42079619096,-9.78600455867],[-37.40852631583,-9.785958549],[-37.39545338951,-9.78593094319],[-37.39002812509,-9.78589413544]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"PCN-Italy-2006","name":"PCN 2006 - Italy","type":"wms","template":"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_06.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OI.ORTOIMMAGINI.2006.33,OI.ORTOIMMAGINI.2006.32&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2006-01-01T00:00:00.000Z","startDate":"2006-01-01T00:00:00.000Z","polygon":[[[7.5479525,43.731183],[8.106966,43.86700730000001],[8.7359333,44.389436700000005],[10.183382,43.85116399999999],[9.5501637,43.13604889999999],[10.2772473,42.27514580000001],[11.6974829,42.08117770000001],[12.900592000000001,40.84896839999998],[14.9746632,40.208691200000004],[16.0477306,38.895298899999986],[13.1085959,38.74113290000001],[11.7771711,37.9360538],[14.406238300000002,36.74298800000001],[15.134669000000002,36.59363599999999],[15.428667100000002,37.0270026],[15.2199268,37.43375560000001],[15.483598700000002,37.929356000000006],[16.0164356,37.8035964],[17.216692,38.87424630000002],[17.216692,39.40468200000001],[16.5547657,39.7877476],[17.0546436,40.451437900000016],[18.3290577,39.70538770000001],[18.687732,40.05870289999999],[18.0496375,40.67064450000001],[16.005449300000002,41.5212225],[16.3844776,41.85963759999999],[15.5183696,42.15369720000001],[14.5799732,42.246104100000004],[13.5609913,43.65127720000002],[12.5788936,44.08670100000001],[12.2879505,44.6220446],[12.563982,44.9709164],[12.3415089,45.1745803],[12.4169596,45.4055695],[13.092517900000002,45.6282626],[13.6954906,45.70805899999999],[13.78445,45.5825],[13.919100000000002,45.63220000000001],[13.8235,45.717600000000004],[13.59784,45.807199999999995],[13.64307,45.98326],[13.52963,45.965879999999984],[13.47474,46.00546],[13.66472,46.17392000000001],[13.47587,46.22724999999999],[13.42218,46.20758],[13.37671,46.296679999999995],[13.59777,46.441370000000006],[13.68684,46.43880999999999],[13.7148,46.522200000000005],[12.9151,46.60953],[12.38708,46.715289999999996],[12.27591,46.88651],[12.17486,46.908950000000004],[12.11675,47.01240999999999],[12.21781,47.039959999999994],[12.19254,47.09331000000001],[11.74789,46.984840000000005],[11.33355,46.99862000000002],[11.10618,46.92966000000001],[11.00764,46.76896],[10.72974,46.78972],[10.75753,46.82258000000001],[10.66405,46.87613999999999],[10.47197,46.85698000000001],[10.38659,46.678470000000004],[10.49375,46.620490000000004],[10.46136,46.53164],[10.25309,46.574319999999986],[10.23674,46.634840000000004],[10.10307,46.610030000000016],[10.03715,46.44479],[10.165,46.410509999999995],[10.10506,46.33719999999999],[10.17862,46.25625999999999],[10.07055,46.216680000000004],[9.95249,46.38045000000001],[9.73086,46.35071],[9.71273,46.292660000000005],[9.57015,46.29580000000001],[9.46117,46.374810000000004],[9.459360000000002,46.50873],[9.40487,46.46620999999998],[9.36128,46.5081],[9.28136,46.496849999999995],[9.24503,46.236160000000005],[8.9560061,45.96502739999999],[9.09065,45.89905999999999],[9.0298,45.821270000000005],[8.90992,45.833299999999994],[8.9408,45.86681999999999],[8.88904,45.95465000000001],[8.78551,45.99063000000001],[8.85617,46.07480000000001],[8.62242,46.121120000000005],[8.45032,46.26869000000001],[8.42464,46.46366999999999],[8.08814,46.266920000000006],[8.15493,46.183399999999985],[8.11383,46.11577],[8.02906,46.10330999999999],[7.98881,45.99867],[7.9049000000000005,45.99945],[7.859490000000001,45.91485000000001],[7.563430000000001,45.97421],[7.10685,45.85652999999999],[7.04151,45.92434999999999],[6.95315,45.85163000000001],[6.80785,45.832649999999994],[6.80785,45.71864],[6.98948,45.63869],[7.00037,45.50900000000001],[7.18019,45.40070999999998],[7.10572,45.32924],[7.13115,45.25386],[6.851440000000001,45.132259999999995],[6.7697,45.16044],[6.62803,45.111749999999994],[6.66981,45.02324000000001],[6.74791,45.01939],[6.75518,44.899150000000006],[7.022170000000001,44.82519],[7.07484,44.680730000000004],[6.9513300000000005,44.66264],[6.85507,44.53072],[6.94504,44.431119999999986],[6.88784,44.42043],[6.891710000000001,44.36637000000001],[7.007640000000001,44.23735999999999],[7.363640000000001,44.11881999999999],[7.68694,44.17487],[7.725079999999999,44.07578000000001],[7.493549999999999,43.86551],[7.5479525,43.731183]],[[8.171339,39.148484300000014],[8.6245251,38.75118870000001],[9.0983105,39.037636700000014],[9.0310192,39.13144220000001],[9.265852000000002,39.1857496],[9.6407604,39.0227016],[9.8989391,40.6799061],[9.5006847,41.392570299999996],[8.303175,40.91070760000001],[8.4130383,41.16138739999999],[8.2125378,41.1386378],[8.0752087,40.598623299999986],[8.3615398,40.34999509999999],[8.2791424,39.985851200000006],[8.3828259,39.65359839999999],[8.171339,39.148484300000014]],[[12.514886900000002,35.53423470000001],[12.640543,35.5306027],[12.6386149,35.486413600000006],[12.512958700000002,35.4900477],[12.514886900000002,35.53423470000001]],[[11.9121838,36.8568754],[12.081785200000002,36.8552271],[12.0795789,36.7097361],[11.9099774,36.71138750000001],[11.9121838,36.8568754]],[[12.8401852,35.881314200000006],[12.8918552,35.8814533],[12.891984,35.850033999999994],[12.840314,35.8498949],[12.8401852,35.881314200000006]]]},{"id":"PCN-Lazio_Umbria-2008","name":"PCN 2008 - IT Lazio+Umbria","type":"wms","template":"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_08.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OI.ORTOIMMAGINI.2008.33&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2008-01-01T00:00:00.000Z","startDate":"2008-01-01T00:00:00.000Z","polygon":[[[12.3314895,41.6463669],[12.4117815,41.6479098],[12.4149931,41.5463482],[12.4957439,41.5478934],[12.4984968,41.4961949],[12.5794769,41.4984285],[12.580624,41.4293206],[12.6063174,41.4288046],[12.6074644,41.396632],[12.8292996,41.3981807],[12.8315936,41.3468793],[12.9128032,41.3484293],[12.9150973,41.297261],[12.995848,41.2982951],[12.9979127,41.1963575],[13.1679022,41.1980837],[13.167214,41.246915],[13.4133661,41.2482949],[13.4152014,41.197048],[13.8340959,41.1980837],[13.8334077,41.2476049],[13.9173702,41.2484673],[13.916682,41.3974924],[14.0011032,41.3978366],[13.9999562,41.4977413],[14.084148,41.4982567],[14.0834598,41.6501382],[14.0008738,41.6497954],[13.9997268,41.7505095],[13.8343254,41.7496537],[13.8336371,41.8004653],[13.7515099,41.7997813],[13.7499041,41.8498696],[13.4184131,41.8496988],[13.4168072,41.95027],[13.3344506,41.9495876],[13.3333036,42.000411],[13.2514058,41.9997291],[13.2500294,42.0505125],[13.0850868,42.0496608],[13.0839398,42.097],[13.3339918,42.0981915],[13.3337624,42.1471955],[13.4177249,42.148216],[13.4163484,42.2505237],[13.3339918,42.2498444],[13.333533,42.3009367],[13.2514058,42.2999186],[13.2500294,42.5469887],[13.4179543,42.5481718],[13.4158896,42.7506484],[13.33468,42.7494692],[13.3330742,42.9005609],[13.168361,42.8993846],[13.167214,42.9507867],[12.9641901,42.9501151],[12.9625842,43.0003005],[12.9187678,42.9997972],[12.9160149,43.2507803],[12.8352641,43.2499449],[12.8322819,43.5010663],[12.66321,43.4994022],[12.6648158,43.451125],[12.5856709,43.4499593],[12.5824592,43.5508],[12.5017084,43.5498024],[12.4998732,43.6513062],[12.1624176,43.6491484],[12.1649411,43.6013233],[12.078914,43.5994959],[12.0818963,43.4519577],[11.9954104,43.4491265],[11.9986221,43.3466146],[12.078914,43.3479492],[12.0807492,43.3018885],[11.9960986,43.2995511],[11.9986221,43.2021377],[11.9123656,43.1992948],[11.9146596,43.1521173],[11.8320736,43.1494395],[11.832303,43.0965284],[11.9109891,43.098371],[11.9146596,42.9019053],[11.8290913,42.8992165],[11.8313854,42.8523123],[11.7458171,42.8494532],[11.7481112,42.6523609],[11.6730956,42.6496612],[11.6749308,42.6105035],[11.4948474,42.5993593],[11.4985179,42.4959273],[11.5781217,42.4979571],[11.5815627,42.4524416],[11.4122614,42.4487177],[11.4152437,42.3465622],[11.4959945,42.3479186],[11.4992061,42.2963554],[11.5783511,42.2982219],[11.582251,42.2462783],[11.6618547,42.2483161],[11.6662134,42.0964893],[11.7453583,42.0981915],[11.7490288,41.9966603],[11.9144302,41.9992176],[11.9153478,41.9862596],[11.9940339,41.9874532],[11.9986221,41.8968453],[12.0786846,41.8990651],[12.0814375,41.8459392],[12.1631058,41.8479899],[12.1656293,41.6964038],[12.3291955,41.6986306],[12.3314895,41.6463669]]]},{"id":"Actueel_ortho25_WMTS","name":"PDOK Luchtfoto Beeldmateriaal 25cm","type":"tms","template":"https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts?FORMAT=image/jpeg&SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=2016_ortho25&STYLE=&FORMAT=image/jpeg&tileMatrixSet=OGC:1.0:GoogleMapsCompatible&tileMatrix={zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,18],"polygon":[[[3.1437689,51.3598403],[3.1575018,51.2411346],[3.3387762,51.1154412],[3.9128119,51.0585083],[4.6571356,51.2806657],[4.8933416,51.2634825],[5.1789862,51.1257851],[5.3849798,51.1309561],[5.5442816,51.056782],[5.4206854,50.8595581],[5.4673773,50.7032633],[5.6568914,50.6192567],[6.1485296,50.6214349],[6.3023382,50.8578243],[6.2995916,50.9543819],[6.2638861,51.0183545],[6.3723761,51.0925902],[6.4012152,51.2011393],[6.3737494,51.2510206],[6.4451605,51.3158713],[6.4204413,51.5496009],[6.343537,51.6792182],[6.796723,51.7642909],[7.046662,51.9102418],[7.0713812,52.0455856],[7.2718817,52.1704147],[7.3075872,52.3855111],[7.2059637,52.5319494],[7.282868,52.614576],[7.2993475,52.7785318],[7.4421698,52.9782705],[7.43393,53.2831352],[7.0439154,53.5515877],[6.7829901,53.6363531],[6.2391668,53.5401639],[5.6871039,53.5124077],[5.173493,53.4388477],[4.8164373,53.2338445],[4.6516424,53.0658312],[4.5417791,52.4859784],[4.3220526,52.1956753],[4.08104,52.0136897],[4.0219885,52.0162253],[3.9368445,51.9637937],[3.9519507,51.8807927],[3.844834,51.8494157],[3.6237341,51.7075226],[3.6553198,51.6606936],[3.6333471,51.6274583],[3.5468298,51.622343],[3.3957678,51.5609145],[3.3820349,51.5173524],[3.4987646,51.4326715],[3.3298498,51.3855587],[3.1437689,51.3598403]]],"terms_url":"https://www.nationaalgeoregister.nl/geonetwork/srv/dut/catalog.search#/search?facet.q=license%2FCC-BY&isChild=%27false%27&resultType=details&any_OR_title_OR_keyword=luchtfoto&fast=index&_content_type=json&from=1&to=20&sortBy=relevance","terms_text":"Kadaster / Beeldmateriaal.nl, CC BY 4.0","best":true,"description":"Landsdekkende dataset 25cm resolutie kleuren luchtfotos van de meest recente jaargang.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGYAAABpCAMAAAD/V6aFAAABQVBMVEVHcEzFxcUIjtE3quLGxsYMlNMxseXFxcXFxcXGxsY3qeC82+c4qeA4quEcod3FxcXGxsbGxsbKysrHx8cGkdLGxsYPl9fExMTGxsbGxsbGxsYGjtDGxsYLlNXFxcXKysrGxsY3qeDFxcXGxsbFxcXGxsY3qeHGxsbIyMjGxsbGxsbFxcXFxcXFxcXGxsYBi883quHExMTGxsbGxsYgpdkYntoeqtXGxsYko93FxcXFxcUio97GxsYDjdAcn9rGxsbGxsbGxsYQmdjGxsYCjdAAis0IktM1qODGxsbHx8fGxsY3quHFxcUco93GxsbGxsbFxcUmotw3q+E4quE3quE3quACjtEKl9XGxsbFxcUZoNkBi883qeHGxsYAis44quEAic0AiM08rOIcnNk6q+IspN4Mk9QFj9EXmdclodzGxsbX17u1AAAAXnRSTlMA7d4ItK8KTHw//QHerC31nSgFHsszjQ5Bw23d6qMYFFmUZtVH78rkCTn4uIZUdvqAFKxPDUAEozao2iLQ5V39lLF/y+z+wd1he76y+hGNgC1uQO7BUNR6mYRR96TdoavfmwAABLhJREFUeF7s08Fqg0AQBuApCC0IBBtCYpBVbMQmNoF4CfGykV5aKKbXAn2B//0foOLspQF0xhQokO80/2l2WH66xnNx18vz6S+c0K+ha8TukQn62RWNFxzfeY2J0K96pLH2zSSf81hjwIHGevsG7nncYkhC45gDgNKdlWOA/Uo7MemsnwBkAYcGQtmcVJINWi8cZhZCR1JZWrSiKacSUkvSeEBnx2llIWQ/Vbegk8UcQ0i9asqTgJ05biF2Jrn1BJ2J0R6DKmzJGmSq371eWOgsSKK8+M4COrmoOimckHPwAR2PBPbRRQUaKKU0zK/hRHy72UDHTmmYqT1nx2tnhadz8ulfuLn5YazseRMEwjhuJDCIOhkXw8DiagchJkQGInZoHKxWk7Y5nkO09ft/gTb3Sjg4nt/4T7jf5XnhIlcR8SRzbUxaeO/XBFQCGxasd7QToLeyMBglvZZ4AUSw9VjyCcTCvTI1Z0TNciIAlydziwZ+ihZe+jUZVUekPNlbNPS3LEwQrXHVoblozdZas7KqmmU7rXstjm7N7sCSaW7TPO//yM4vOYiaJV9EADOfJUcgVoDK/ix9/NaQ5gQEQOzQh+hPOECTgdJkLPBnfRoQqzPa4DUBJZLImAD76ow9vEZP7yrhzVr11kxM2gTr0HfXgxa1t12jVucDr5mqu8MlZkkKLZbHrYao2eg7DEOkSh8Ke55c2zTPskZRI0VOgNYEMulqukl1SlAWb6s1884/GjyKDt4GKDY5UVxZEl9MjXhjTKojTjOnIKGpfNPAQNTMBLegzn4xVPBPDrNhk8XwddzOGbeg/trT+DxyPAOni/ivXfNbbRSIwvgpLCQiYIyIRmAT1hS1RCEJICmCgjdtKKmXe+ML+P4PsCmzG6Y96zczFO/yu3WGzxnPmTl/JCV37gTFXKb4m6e9zk2JQPWBp5cirfMHY1YoJOi+5MqOkHFrY5kXoLL8WsV4c4XMk6lK7QKZiI326QPPMZWJwafx+UtnojL8aCqzAFZWDYyjeJIYbdgVUIkuB04hvllsoJL4bueO79kclOFbA5mSEHkN5hwMZI4ECP9vs2fx9F1fxfGQX47YUiyc+UVfprWBSjIw5OLTVl/mAlT6QYYfA12NDDhZSLhIZRThAOuHAfBKOviJss5rx98ubGfwTQ+gZ2PSFdriY7EShrMDiyn12hmQx71wK3i1qLCjQUWmKqc6P9UyVmhhwrUYmI0NDH0C3LnjzTTZCicPjnhYh+NLNZbofyiim4IYZi2fnU733hm5ACrT0A5fbSti6AQryWm++9HXUhCRPquXzDnABWwCupJ20VlcBsq4Y0YM5aRyTzfC07+uUlcrD3KOpR01hGexI/ZI1/Nhk+cWjbBsoYqMbYm77TjWSkcpU24cnKYJCDMNl7NKaZR3YO8oA+T0Hu6EcnbqLi3D8YmDTyg2Qz3raUYQ7/NynLZtFzYpKT7vW50TgAdSDWkye5Z9bEMq1rKxvfmkS9DcwsEqIzUROC4BNrmXjxOyjn8FpEHagn9PMEEXht2S9NiyvGwaSmYAEyD9N3Zumma6BdkbyXH2NB2nm8xvmpB9L1WOJiRzWHI+CRHLbafh0l+p1Hb2B2WwRgDiX0fTAAAAAElFTkSuQmCC"},{"id":"al_piranhas","name":"Piranhas AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Piranhas&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.71917577496,-9.65235879937],[-37.71917577496,-9.63873541198],[-37.71914358845,-9.63210333094],[-37.71924014797,-9.62114477442],[-37.71929379215,-9.61022817566],[-37.7193367075,-9.59988246925],[-37.71940108051,-9.58891229023],[-37.71945472469,-9.57801581129],[-37.71944399586,-9.57173166346],[-37.71951909771,-9.56684391256],[-37.71956201306,-9.56225232497],[-37.71998043766,-9.5621782666],[-37.72257681599,-9.56194551161],[-37.72817726841,-9.56203014981],[-37.73254390469,-9.56199841049],[-37.74107332935,-9.56206188913],[-37.74845476856,-9.56201957003],[-37.75925870648,-9.56215710706],[-37.76971932163,-9.56227348451],[-37.78036232701,-9.56244276071],[-37.78537269344,-9.56235812262],[-37.78907414189,-9.56232638333],[-37.79561873188,-9.56245334047],[-37.79771085491,-9.56236870238],[-37.81005974522,-9.56243218095],[-37.81060691586,-9.56241102143],[-37.810531814,-9.5653098637],[-37.81048889866,-9.57629138499],[-37.81045671215,-9.58742065699],[-37.8103816103,-9.59756574935],[-37.81030650845,-9.61798195891],[-37.81017776241,-9.65196745198],[-37.81017776241,-9.65229533767],[-37.81024213543,-9.6525914922],[-37.80663724651,-9.65245399191],[-37.80205603352,-9.65252803054],[-37.79597278347,-9.65236937632],[-37.79178853741,-9.65251745359],[-37.78815146198,-9.65246456886],[-37.78722878208,-9.65242226107],[-37.78035159817,-9.65241168412],[-37.77864571324,-9.65223187594],[-37.77625318279,-9.65229533767],[-37.77475114575,-9.65218956812],[-37.77233715763,-9.65223187594],[-37.76960130444,-9.65245399191],[-37.76623244991,-9.65250687665],[-37.76345368138,-9.65246456886],[-37.7603959631,-9.6524962997],[-37.75101896038,-9.65236937632],[-37.75011773815,-9.65248572275],[-37.74154539814,-9.65247514581],[-37.74030085316,-9.65239053022],[-37.73785467854,-9.65246456886],[-37.73443217983,-9.65237995327],[-37.73106332531,-9.65243283802],[-37.72651429882,-9.65236937632],[-37.7219545435,-9.65225302985],[-37.71991606465,-9.65228476071],[-37.71917577496,-9.65235879937]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"PNOA-Spain-TMS","name":"PNOA Spain","type":"tms","template":"http://www.ign.es/wmts/pnoa-ma?request=GetTile&service=WMTS&VERSION=1.0.0&Layer=OI.OrthoimageCoverage&Style=default&Format=image/png&TileMatrixSet=GoogleMapsCompatible&TileMatrix={zoom}&TileRow={y}&TileCol={x}","polygon":[[[-17.8846298,28.4460601],[-17.8939535,28.5225529],[-18.0212548,28.7481927],[-18.0224091,28.8038375],[-17.9424017,28.8726124],[-17.8911792,28.8737099],[-17.8903302,28.8515102],[-17.7675902,28.8537764],[-17.7669837,28.8312183],[-17.7412714,28.8319975],[-17.7394926,28.7642235],[-17.7139824,28.7649677],[-17.7129312,28.7303731],[-17.7574427,28.6931782],[-17.7570788,28.6741254],[-17.7457913,28.6743524],[-17.7457266,28.6165627],[-17.7519687,28.5833675],[-17.7622536,28.5591958],[-17.7833086,28.541667],[-17.7831575,28.4936643],[-17.808611,28.4925024],[-17.8060072,28.4468974],[-17.8846298,28.4460601]],[[-18.1661033,27.7851643],[-18.163494,27.6949247],[-18.0889827,27.6963366],[-18.0873398,27.6738724],[-18.0364092,27.6753701],[-18.0350079,27.6302571],[-17.9589987,27.6323976],[-17.8603269,27.7926025],[-17.8630328,27.8368793],[-17.8884015,27.8364947],[-17.8891263,27.8590536],[-17.9906491,27.8567467],[-18.0386803,27.7655831],[-18.1146412,27.7637873],[-18.1154627,27.7863613],[-18.1661033,27.7851643]],[[-17.36038,28.0639801],[-17.3629657,28.1757247],[-17.3375583,28.1763688],[-17.3384577,28.2213012],[-17.1857883,28.2238767],[-17.0820788,28.1351849],[-17.0808422,28.0679977],[-17.1315446,28.0668073],[-17.1563337,28.0214628],[-17.2321063,28.0203711],[-17.2319938,27.9980388],[-17.2576823,27.9978403],[-17.257851,28.0199741],[-17.3086658,28.0192298],[-17.36038,28.0639801]],[[-16.9278171,28.3275779],[-16.9286591,28.3721879],[-16.8776666,28.3729288],[-16.8780707,28.3954191],[-16.5214259,28.4226146],[-16.4457117,28.491135],[-16.4462506,28.535972],[-16.4205859,28.5362679],[-16.4209227,28.5588419],[-16.3443329,28.5597589],[-16.3446023,28.5822095],[-16.1912541,28.5837179],[-16.1916246,28.6068435],[-16.1279344,28.6078193],[-16.1277997,28.5921762],[-16.0995079,28.5925015],[-16.0993395,28.5163822],[-16.1648148,28.5161158],[-16.1647474,28.4938583],[-16.2385755,28.4484704],[-16.2653516,28.4476116],[-16.2658569,28.4030038],[-16.3167484,28.4017594],[-16.3163105,28.380189],[-16.3420763,28.3795075],[-16.3408301,28.2892963],[-16.415837,28.1976134],[-16.415096,28.1311312],[-16.5153297,28.0164796],[-16.6168433,28.01532],[-16.6168096,27.9930469],[-16.7184243,27.9919168],[-16.7190979,28.0371426],[-16.7446952,28.0367859],[-16.7453351,28.0818146],[-16.7706967,28.0816065],[-16.8223966,28.1259036],[-16.8231712,28.1708652],[-16.8487012,28.1707464],[-16.8502842,28.260791],[-16.8756457,28.2605537],[-16.8760836,28.2832162],[-16.9015125,28.2827713],[-16.9023882,28.3279337],[-16.9278171,28.3275779]],[[-15.8537427,27.9008901],[-15.8542032,27.9901812],[-15.828953,27.9906555],[-15.8291065,28.035578],[-15.7782992,28.0363232],[-15.7532793,28.0814298],[-15.7278756,28.0815652],[-15.7282593,28.1718567],[-15.4989741,28.1728039],[-15.4987438,28.1504075],[-15.4497785,28.1507459],[-15.4501622,28.1961425],[-15.3972827,28.1961425],[-15.3964385,28.0383554],[-15.3710348,28.0380167],[-15.3706511,28.0153212],[-15.3457847,28.0153212],[-15.3454777,27.9254406],[-15.3708046,27.9252372],[-15.3705743,27.8352137],[-15.395978,27.8347387],[-15.4209979,27.7879673],[-15.4718052,27.7893932],[-15.471882,27.7666454],[-15.522766,27.7667813],[-15.5477092,27.7216112],[-15.6236132,27.7213395],[-15.6241504,27.741991],[-15.7007451,27.7433495],[-15.801669,27.8110501],[-15.8537427,27.9008901]],[[-14.5215621,28.0467778],[-14.5224358,28.1184131],[-14.4157526,28.1156076],[-14.2168794,28.2278805],[-14.2153651,28.33903],[-14.1641672,28.4528287],[-14.1115132,28.4747955],[-14.0335806,28.7226671],[-13.9565217,28.7449351],[-13.9561722,28.7665857],[-13.8290221,28.7664325],[-13.8289639,28.7879765],[-13.8000741,28.7879255],[-13.8012972,28.7189894],[-13.827566,28.719347],[-13.8278572,28.6517968],[-13.8025786,28.651899],[-13.8033941,28.5384172],[-13.8288474,28.5384684],[-13.8315061,28.3970177],[-13.9158189,28.2241438],[-13.9856445,28.2235696],[-14.0369588,28.1795787],[-14.1387139,28.1799894],[-14.1386556,28.1579103],[-14.2153651,28.1578076],[-14.2147244,28.1118888],[-14.2913173,28.0452356],[-14.3319673,28.0368713],[-14.4457846,28.0469834],[-14.4466583,28.0657961],[-14.4962835,28.0682631],[-14.495934,28.0458525],[-14.5215621,28.0467778]],[[-13.800662,28.8456579],[-13.8009273,28.8231121],[-13.775688,28.8230539],[-13.69729,28.8898184],[-13.69729,28.9127744],[-13.6072498,28.9117991],[-13.4388551,29.0002417],[-13.4374559,29.1351289],[-13.4117005,29.1349931],[-13.4105556,29.2229789],[-13.4592801,29.255586],[-13.4597392,29.2942023],[-13.5091254,29.2945638],[-13.5100581,29.3163453],[-13.5635382,29.3172941],[-13.5640564,29.2713764],[-13.5389228,29.2711956],[-13.5389747,29.2500375],[-13.5661293,29.2501279],[-13.5665956,29.2030039],[-13.5156549,29.2022349],[-13.5156549,29.1820579],[-13.5398038,29.1827819],[-13.5408921,29.137528],[-13.65782,29.1368528],[-13.713222,29.0935079],[-13.7663353,29.0934533],[-13.8502463,29.0165937],[-13.8518224,28.983425],[-13.8524443,28.914861],[-13.9013122,28.89245],[-13.9024005,28.8469779],[-13.800662,28.8456579]],[[1.6479916,38.9990693],[1.7321668,38.9993635],[1.7314703,39.0441733],[1.6489512,39.0431944],[1.6481552,39.1276358],[1.3948608,39.1265691],[1.3954412,39.0864199],[1.2281145,39.0852615],[1.2291095,39.0028958],[1.1448657,39.0018003],[1.1452803,38.8319988],[1.3113632,38.8331615],[1.3121924,38.7906483],[1.3946949,38.7916178],[1.3951924,38.7529597],[1.3112803,38.7519251],[1.3125919,38.6238804],[1.6489036,38.6251112],[1.6480745,38.7111504],[1.58456,38.7101152],[1.5811604,38.7005387],[1.5491544,38.7002798],[1.5197188,38.7092094],[1.50355,38.7253185],[1.4813282,38.9155064],[1.5518906,38.9254411],[1.5667328,38.9566554],[1.6487378,38.9583318],[1.6479916,38.9990693]],[[2.5450749,39.4166673],[2.43933,39.4161122],[2.438714,39.4846853],[2.439022,39.4993424],[2.3122308,39.4993424],[2.3119228,39.5417911],[2.2290722,39.5409994],[2.2283536,39.6260571],[2.3460076,39.6270851],[2.9270445,39.9601558],[3.1456647,39.9600498],[3.1460753,40.0019797],[3.2313899,40.0019797],[3.2312872,39.8329231],[3.1482313,39.8331596],[3.1484366,39.7935717],[3.4814817,39.7931773],[3.4803472,39.5959027],[3.3150618,39.4784606],[3.3146179,39.3785504],[3.0830178,39.2499355],[2.9798608,39.2501482],[2.9790395,39.3334971],[2.7287424,39.3334177],[2.7288451,39.4581361],[2.6456865,39.4577397],[2.6453785,39.4996593],[2.5452802,39.4994216],[2.5450749,39.4166673]],[[3.8120402,40.0434431],[3.729082,40.0437979],[3.7286185,39.9584155],[3.8126633,39.9576011],[3.8122771,39.9164393],[3.9608975,39.9159813],[4.1938142,39.791308],[4.3150279,39.7905799],[4.3159934,39.8329294],[4.3987393,39.8320396],[4.3973664,39.9185834],[4.3158003,39.9193274],[4.3161865,40.0433985],[4.2318959,40.0443594],[4.2324752,40.0847793],[4.1491501,40.086109],[4.1490623,40.1255157],[4.0627981,40.1272166],[4.0624217,40.0849941],[3.8128687,40.085294],[3.8120402,40.0434431]],[[-8.8910646,41.8228891],[-9.1092038,42.5751065],[-9.0365469,42.730656],[-9.0883419,42.7269569],[-9.1466113,42.7750272],[-9.2185488,42.9016271],[-9.2760988,42.8605106],[-9.3099094,42.9311297],[-9.2789763,42.9821991],[-9.3099094,43.0600377],[-9.2523594,43.1041725],[-9.2314975,43.1703151],[-9.1473307,43.210176],[-9.06748,43.1991644],[-9.0336694,43.2426748],[-8.99842,43.2447709],[-8.9998588,43.2955793],[-8.9372732,43.3055265],[-8.92936,43.326986],[-8.8638969,43.3290792],[-8.8761263,43.3740655],[-8.8221732,43.3735426],[-8.785485,43.3191358],[-8.7063538,43.305003],[-8.6099575,43.3296025],[-8.5509688,43.3233227],[-8.5243519,43.3364048],[-8.5250713,43.3646525],[-8.45745,43.3918416],[-8.3610538,43.4111803],[-8.3603344,43.4634161],[-8.3344369,43.5797394],[-8.2776063,43.5708796],[-8.0646713,43.7239184],[-7.9992081,43.7233986],[-7.9171994,43.7826357],[-7.8560525,43.7914643],[-7.83591,43.7374337],[-7.6628443,43.809819],[-7.3188932,43.6782695],[-7.1997467,43.5830817],[-6.2488228,43.6075032],[-6.1229322,43.5790105],[-5.8520425,43.6798953],[-5.6036334,43.5708672],[-5.2855347,43.5619084],[-5.1787525,43.4991591],[-4.9089869,43.4836655],[-4.6156167,43.4192021],[-4.1839917,43.4249168],[-3.8029478,43.5195394],[-3.7400025,43.4869277],[-3.5612827,43.5423572],[-3.1083013,43.3816347],[-2.9385737,43.4624573],[-2.7452417,43.4755094],[-2.3046245,43.3170625],[-1.9854018,43.3563045],[-1.8552841,43.3972545],[-1.769802,43.3964383],[-1.7700492,43.3760501],[-1.7100474,43.3756908],[-1.7113451,43.3312527],[-1.7225915,43.3131806],[-1.6890375,43.3129108],[-1.6881106,43.3341294],[-1.6446695,43.3337248],[-1.6449785,43.3133155],[-1.6029903,43.3129528],[-1.6034352,43.2926624],[-1.5635905,43.2921227],[-1.5630468,43.3133844],[-1.4779905,43.3128355],[-1.3667723,43.2761368],[-1.3568809,43.2381533],[-1.3703692,43.1712972],[-1.4423067,43.0833554],[-1.4198262,43.0603647],[-1.3730668,43.051166],[-1.3640746,43.1115893],[-1.3020285,43.135217],[-1.2354864,43.1332484],[-1.2795481,43.0774443],[-1.1923239,43.0649635],[-1.0061856,43.0077821],[-0.942341,42.9748951],[-0.7562028,42.9821318],[-0.7148387,42.9610774],[-0.6968543,42.9031405],[-0.5511809,42.8220693],[-0.5044215,42.8484456],[-0.4288871,42.8200906],[-0.3164848,42.8655842],[-0.1456332,42.810856],[-0.0314324,42.7124874],[0.1861785,42.7540985],[0.3021777,42.7177729],[0.3642238,42.7428729],[0.4487504,42.7144695],[0.6276949,42.7223973],[0.6411832,42.8576747],[0.7149192,42.882718],[0.9675996,42.8181119],[1.108777,42.7989808],[1.1753192,42.7342872],[1.3632559,42.7415521],[1.4113736,42.7093914],[1.4806054,42.7103407],[1.4813006,42.5010664],[1.6443591,42.5020345],[1.6432777,42.5424539],[1.730407,42.5434214],[1.7316429,42.5011803],[2.0638621,42.5016359],[2.0645572,42.4590247],[2.3969309,42.4599364],[2.3976786,42.4178363],[2.4804823,42.4179732],[2.4809767,42.3759441],[2.6447922,42.3762636],[2.6444832,42.4592447],[2.8113266,42.4596094],[2.8112648,42.5010358],[3.063878,42.5008535],[3.063878,42.4591535],[3.2307832,42.4593359],[3.2304935,42.3764363],[3.3141469,42.3760369],[3.3141243,42.3339864],[3.397855,42.3340435],[3.3973912,42.290094],[3.3138923,42.2908368],[3.3139695,42.2070151],[3.1475896,42.2073012],[3.1475896,42.1260612],[3.2305478,42.1260039],[3.2466753,41.9529359],[3.1945206,41.8558943],[3.060537,41.7647419],[2.7835777,41.6371796],[2.26293,41.4271601],[2.1649151,41.2989297],[1.86008,41.2232228],[1.3763003,41.116273],[1.1793714,41.0464585],[1.0858526,41.048493],[0.758537,40.8195599],[0.9114042,40.733761],[0.8781331,40.6751363],[0.6650182,40.5358666],[0.5580112,40.5502166],[0.433919,40.3757589],[0.2675635,40.1919192],[0.1641534,40.0647234],[0.0751307,40.0144671],[0.010387,39.8952188],[-0.0939224,39.8116904],[-0.1847435,39.6311716],[-0.2908513,39.5036254],[-0.2863552,39.333431],[-0.1856427,39.1774612],[-0.2135185,39.1558487],[-0.1110076,38.9722246],[0.0094878,38.8826835],[0.1218901,38.872183],[0.2342925,38.798636],[0.2558737,38.7264162],[0.0958128,38.6133825],[-0.0022021,38.6070586],[-0.0570544,38.5269073],[-0.2719677,38.4762395],[-0.379874,38.3931234],[-0.3834708,38.3381297],[-0.4509122,38.3310763],[-0.5048654,38.2830943],[-0.4823849,38.1948095],[-0.429331,38.1658287],[-0.4545091,38.148859],[-0.5839966,38.1721913],[-0.6136708,38.1198599],[-0.6370505,37.9612228],[-0.6811123,37.9456238],[-0.7323677,37.8810656],[-0.7215771,37.7830562],[-0.688306,37.7340026],[-0.6641461,37.6231485],[-0.7193941,37.5878413],[-0.9196258,37.5375806],[-1.1107098,37.5164093],[-1.3383246,37.5286671],[-1.4408917,37.3903714],[-1.6766966,37.2765189],[-1.8540816,36.9122889],[-2.0683486,36.6929117],[-2.2158766,36.6619233],[-2.3721861,36.7801753],[-2.6812926,36.6591056],[-2.9201476,36.6675585],[-3.09402,36.712625],[-3.4610839,36.6548788],[-3.7280395,36.6929117],[-4.3743529,36.6633322],[-4.6571151,36.4404171],[-4.9188018,36.4531321],[-5.1699508,36.3513541],[-5.2841094,36.1970201],[-5.2680911,36.1241812],[-5.3524784,36.1224654],[-5.3516094,36.0401413],[-5.4365759,36.0388921],[-5.4353207,36.0034384],[-5.6888562,36.0036518],[-5.6899635,36.0405317],[-5.85506,36.0385595],[-5.8566821,36.1242077],[-5.9384817,36.1221487],[-5.9400265,36.1655625],[-5.9983445,36.1645024],[-6.0357297,36.1780957],[-6.0775178,36.2224132],[-6.1506113,36.2864561],[-6.231541,36.3770075],[-6.3358504,36.5310643],[-6.3214629,36.5816265],[-6.404191,36.6234958],[-6.4743301,36.7489673],[-6.4158808,36.7993866],[-6.490516,36.9173818],[-6.6298949,37.0194012],[-6.8744824,37.1083766],[-7.0426363,37.1850699],[-7.2647434,37.1843535],[-7.3753473,37.1535419],[-7.408316,37.1682196],[-7.4202886,37.2118318],[-7.4249231,37.2350505],[-7.4380543,37.2451969],[-7.4459717,37.3326142],[-7.4480958,37.3909382],[-7.4696271,37.4075829],[-7.4647029,37.4530494],[-7.5019723,37.516411],[-7.5191587,37.5229203],[-7.5219588,37.5723727],[-7.4501271,37.6695835],[-7.4249019,37.7599222],[-7.316662,37.839974],[-7.268329,37.988952],[-7.1536786,38.0155235],[-7.1177098,38.0553626],[-7.0142997,38.0243785],[-6.9963153,38.1075633],[-6.9614706,38.201254],[-7.080617,38.1570753],[-7.3402665,38.4402363],[-7.2638329,38.7380741],[-7.0435243,38.8729667],[-7.0615086,38.907962],[-6.9693387,39.0198308],[-7.0008114,39.0887867],[-7.1536786,39.0957658],[-7.1525545,39.1602899],[-7.2447245,39.1968854],[-7.2559647,39.2813308],[-7.3368944,39.3535074],[-7.3279022,39.4559917],[-7.5144901,39.5886496],[-7.5527069,39.6795427],[-7.0502684,39.6752171],[-6.9951913,39.8195433],[-6.9221297,39.8790868],[-6.886161,40.0229854],[-7.0412762,40.1347927],[-7.0176717,40.266146],[-6.8086034,40.3450071],[-6.8681766,40.4451649],[-6.8535643,40.6066433],[-6.837828,40.8757589],[-6.9536024,41.0370445],[-6.8018592,41.0395879],[-6.7681385,41.138706],[-6.6411239,41.2655616],[-6.5624422,41.2630269],[-6.217367,41.5791017],[-6.3162811,41.644652],[-6.5152332,41.6412921],[-6.5871707,41.6883151],[-6.5478299,41.8559743],[-6.6298836,41.9112057],[-7.1334461,41.9404756],[-7.1682909,41.8718791],[-7.4256922,41.7847727],[-7.9539833,41.8459271],[-8.130455,41.7805819],[-8.2518495,41.9078597],[-8.1293309,42.0348842],[-8.2484774,42.1008034],[-8.3676239,42.0557521],[-8.6070409,42.0340493],[-8.8910646,41.8228891]]],"terms_text":"PNOA","best":true},{"id":"poco_das_trincheiras","name":"Poço das Trincheiras AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Poco%20das%20Trincheiras&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.23941602841,-9.35156513689],[-37.23946967259,-9.34386884913],[-37.23941602841,-9.3379191951],[-37.23954477444,-9.33022260582],[-37.23972716465,-9.32791465461],[-37.23973789349,-9.32280111197],[-37.23964133396,-9.32085307601],[-37.23970570698,-9.31864034808],[-37.2398022665,-9.31706284448],[-37.23982372418,-9.31561238186],[-37.24053182736,-9.30933403261],[-37.24051036968,-9.30003805717],[-37.24008121624,-9.29687228705],[-37.23998465672,-9.29546409248],[-37.2399202837,-9.29318767574],[-37.23988809719,-9.28977831694],[-37.23995247021,-9.28817950681],[-37.24008121624,-9.28641127785],[-37.24036016598,-9.28212302085],[-37.24038162365,-9.27896767726],[-37.24051036968,-9.27556876869],[-37.2400383009,-9.26978737192],[-37.24017777577,-9.26721430207],[-37.24017777577,-9.26612365361],[-37.23995247021,-9.26454591343],[-37.23983445301,-9.26150689057],[-37.24333205357,-9.26135864488],[-37.24936165943,-9.26146453466],[-37.26444640293,-9.26161278031],[-37.28016414776,-9.26171867001],[-37.2829429163,-9.26170808105],[-37.29580679074,-9.26178220382],[-37.30684676304,-9.26178220382],[-37.31418528691,-9.26188809348],[-37.32436695233,-9.26191986037],[-37.33078279629,-9.26175043692],[-37.33056821957,-9.27275220267],[-37.33048238888,-9.28006887422],[-37.33053603306,-9.28117006773],[-37.33068623677,-9.28427245005],[-37.3306969656,-9.28535245384],[-37.33064332142,-9.28616774861],[-37.33070769444,-9.28717362916],[-37.33064332142,-9.28769245062],[-37.33062186375,-9.29026537022],[-37.3304287447,-9.29308179553],[-37.33037510052,-9.29655464967],[-37.33034291401,-9.3059142435],[-37.33039655819,-9.31203384249],[-37.33037510052,-9.321943554],[-37.33040728703,-9.33420325643],[-37.33035364285,-9.34184682509],[-37.33029999867,-9.3478281711],[-37.33035364285,-9.35202034528],[-37.31508650913,-9.35193565539],[-37.300109054,-9.35190389668],[-37.29531326428,-9.351829793],[-37.28899397984,-9.35171334434],[-37.28497066632,-9.35181920676],[-37.27851190701,-9.35173451683],[-37.27430620327,-9.35180862052],[-37.27115192547,-9.35170275809],[-37.2635129942,-9.3516815856],[-37.26045527592,-9.35163924062],[-37.25401797428,-9.35176627555],[-37.24705495968,-9.35162865438],[-37.23941602841,-9.35156513689]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"rio2013","name":"Rio Mosaic 2013","type":"wms","template":"http://geo.rio.rj.gov.br/ArcGIS/services/Imagens/Mosaico_2013/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","polygon":[[[-43.17709320917647,-22.969707888781738],[-43.14585740870588,-22.969588308044617],[-43.14605222658823,-22.927190274347275],[-43.156247695764705,-22.92730989255725],[-43.15647498329411,-22.87556516592966],[-43.177385435999994,-22.8749369295143],[-43.177417905647054,-22.88552681203441],[-43.1980361315294,-22.885706294449527],[-43.198036131529406,-22.854293259693964],[-43.21875176635292,-22.85444286278469],[-43.2190115235294,-22.833646454489337],[-43.22936934094117,-22.833646454489337],[-43.2293368712941,-22.82371093306296],[-43.19868552447057,-22.823531368775274],[-43.19855564588234,-22.834125256479705],[-43.18826276776469,-22.8339756310387],[-43.18803548023528,-22.844478937331477],[-43.16667045247057,-22.844419091729687],[-43.166832800705855,-22.83403548123485],[-43.156377574352916,-22.83406540632306],[-43.1565399225882,-22.813355672227665],[-43.104361199764675,-22.813056375525143],[-43.10445860870584,-22.802879896393364],[-43.09387350376466,-22.80276016858602],[-43.094100791294075,-22.73997839409261],[-43.13598663599996,-22.739918502607807],[-43.13569440917644,-22.750668603713393],[-43.12572622752938,-22.750548830086732],[-43.12556387929409,-22.771178288335854],[-43.14595481764702,-22.7710884716159],[-43.14611716588231,-22.760549566225578],[-43.17771013247056,-22.760878919332278],[-43.17758025388233,-22.77114834943578],[-43.188067949882324,-22.771298043870523],[-43.188067949882324,-22.781656499945914],[-43.25066942941175,-22.78162656334464],[-43.25057202047057,-22.791984235249323],[-43.28054150470587,-22.792822393946437],[-43.30343260588235,-22.793121735089624],[-43.33353196870588,-22.792972064600175],[-43.33346702941175,-22.802580576677798],[-43.38574316117646,-22.8024009845329],[-43.38541846470588,-22.812547569621618],[-43.41691402235293,-22.81284686744212],[-43.41675167411763,-22.823411659118616],[-43.42717443082351,-22.82335180425081],[-43.42740171835291,-22.833736229990887],[-43.45844270094114,-22.833616529309033],[-43.45863751882349,-22.81275707816501],[-43.48984084964701,-22.812996516105756],[-43.48993825858821,-22.796504244335274],[-43.5020819065882,-22.797462107811715],[-43.515426931529376,-22.797372308396717],[-43.52078442329409,-22.795905576244728],[-43.54169487599998,-22.796025310073155],[-43.54179228494115,-22.802341120431993],[-43.54653285341174,-22.802460848607485],[-43.54666273199997,-22.811889112101724],[-43.55250726847058,-22.81278700793061],[-43.5699109992941,-22.812936656660003],[-43.56997593858822,-22.819700607555284],[-43.57361253905883,-22.823262021899716],[-43.583483311764695,-22.823291949356644],[-43.583515781411776,-22.833466903308615],[-43.59390606847059,-22.83373622999088],[-43.59393853811765,-22.854682227387414],[-43.66098835929414,-22.854592465710777],[-43.66098835929414,-22.859828464394095],[-43.708523922588235,-22.860187496913827],[-43.70836157435295,-22.865034343090006],[-43.72206376541177,-22.864884751657844],[-43.72212870470588,-22.86847490057084],[-43.75015001011764,-22.86859457056733],[-43.75008507082353,-22.87529592210752],[-43.76037794894117,-22.87526600609435],[-43.759923373882344,-22.87849689743878],[-43.759761025647045,-22.884569568478902],[-43.76131956870587,-22.885855862947494],[-43.78128840164704,-22.8857960355681],[-43.781255932,-22.895906488289704],[-43.802133915058825,-22.896205602636037],[-43.8013546435294,-22.911369835519228],[-43.80119229529411,-22.927579033143484],[-43.7921332637647,-22.927758459903885],[-43.7921982030588,-22.93822460957403],[-43.78190532494115,-22.93798539232952],[-43.78184038564702,-22.94868995021093],[-43.75066952447056,-22.94845075146181],[-43.75060458517645,-22.95909468650586],[-43.72985648070586,-22.958855506152936],[-43.72966166282351,-22.979841971833356],[-43.709043436941144,-22.97966261413784],[-43.70891355835292,-22.99033398260527],[-43.69845833199996,-22.990064966868836],[-43.698360923058786,-23.000645848451164],[-43.667352410117616,-23.000436630016143],[-43.66725500117644,-23.011166128679353],[-43.631246162588184,-23.00937295708379],[-43.631311101882304,-23.02078907569042],[-43.63585685247054,-23.020908611087243],[-43.636019200705846,-23.031636481368604],[-43.67771022752937,-23.031636481368604],[-43.67764528823524,-23.04233361870472],[-43.67085913199995,-23.04230373961572],[-43.67108641952936,-23.063097982243804],[-43.64598738235289,-23.06303823327472],[-43.646052321647005,-23.052761015940998],[-43.60475093058818,-23.052551878372743],[-43.60452364305876,-23.063068107762582],[-43.58380800823524,-23.06288886073593],[-43.583678129647005,-23.08403836134171],[-43.54185722423525,-23.083829272389394],[-43.54195463317643,-23.06318760564771],[-43.521466285882305,-23.06300835878022],[-43.52130393764702,-23.0735237710834],[-43.500425954588195,-23.073374410186133],[-43.500425954588195,-23.042184223193427],[-43.45876739741171,-23.042214102308932],[-43.45870245811759,-23.03193529561677],[-43.43782447505876,-23.031815769997003],[-43.43775953576465,-23.021536170182088],[-43.32349884776465,-23.021207449115728],[-43.32330402988229,-23.04212446494251],[-43.31291374282347,-23.041945190030685],[-43.31275139458817,-23.052671385594376],[-43.30239357717642,-23.052581755188086],[-43.30236110752935,-23.042273860520083],[-43.291938350823465,-23.042154344071257],[-43.291970820470524,-23.031935295616755],[-43.27109283741169,-23.031815769997003],[-43.27119024635288,-23.010927040510325],[-43.260605141411716,-23.01086726840187],[-43.26067008070583,-23.000586071788522],[-43.25057202047053,-23.000466518383856],[-43.25053955082347,-23.01125578663348],[-43.23988950658817,-23.01101669862337],[-43.23985703694111,-23.00061596012315],[-43.21907646282347,-23.000496406744954],[-43.21904399317641,-22.990214420121887],[-43.20901087223524,-22.99009485753265],[-43.20862123647049,-23.083889012123244],[-43.187678314117555,-23.083769532629013],[-43.18761337482344,-23.07334453798677],[-43.135824287764606,-23.073374410186123],[-43.135889227058726,-23.052492124722143],[-43.17732049670579,-23.052551878372732],[-43.17709320917647,-22.969707888781738]]],"terms_url":"http://pgeo3.rio.rj.gov.br/arcgis/rest/services/Imagens/Mosaico_2013_UTM/MapServer","terms_text":"Instituto Pereira Passos - Prefeitura da Cidade do Rio de Janeiro."},{"id":"rio2015","name":"Rio Mosaic 2015","type":"wms","template":"http://pgeo3.rio.rj.gov.br/arcgis/services/Imagens/Mosaico_2015_UTM/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-42.30362723364694,-22.436982955891427],[-44.10842009576469,-22.06578551470817],[-44.53130477905882,-23.786301394919743],[-42.70469231411757,-24.161784722114145],[-42.30362723364694,-22.436982955891427]]],"terms_url":"http://pgeo3.rio.rj.gov.br/arcgis/rest/services/Imagens/Mosaico_2015_UTM/MapServer","terms_text":"Instituto Pereira Passos - Prefeitura da Cidade do Rio de Janeiro."},{"id":"route500","name":"Route 500","type":"tms","template":"http://{switch:a,b,c}.tile.openstreetmap.fr/route500/{zoom}/{x}/{y}.png","scaleExtent":[12,20],"polygon":[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.358164,51.32937],[2.548804,51.09759],[2.570482,51.07409],[2.587412,51.01763],[2.598448,51.0051],[2.615575,50.99749],[2.639859,50.95766],[2.642247,50.94578],[2.624519,50.9256],[2.61962,50.91067],[2.623964,50.86071],[2.627811,50.85054],[2.637859,50.83696],[2.651102,50.82906],[2.732666,50.81738],[2.79995,50.73795],[2.816552,50.73092],[2.852648,50.73335],[2.890719,50.7162],[2.904925,50.71536],[2.916096,50.72418],[2.935084,50.75592],[3.007184,50.78377],[3.082183,50.78749],[3.092439,50.79092],[3.114119,50.80566],[3.148768,50.80195],[3.215401,50.73111],[3.221487,50.7267],[3.270507,50.70375],[3.275448,50.67757],[3.265761,50.6604],[3.265877,50.64054],[3.289219,50.60028],[3.292195,50.55037],[3.305598,50.53267],[3.375514,50.50839],[3.389804,50.50884],[3.474798,50.54445],[3.52173,50.53459],[3.532662,50.51873],[3.547788,50.51012],[3.615234,50.50558],[3.673778,50.45642],[3.684152,50.35277],[3.690097,50.34044],[3.702583,50.33482],[3.715758,50.33854],[3.749349,50.36279],[3.841089,50.36558],[3.901887,50.3436],[3.913173,50.34291],[4.026717,50.36904],[4.13761,50.29984],[4.143881,50.29727],[4.214438,50.28167],[4.229037,50.26664],[4.230782,50.25233],[4.170843,50.18579],[4.166015,50.16888],[4.176401,50.1547],[4.211948,50.13602],[4.240742,50.07102],[4.231934,50.05551],[4.181645,50.03436],[4.17177,50.02537],[4.169755,50.01217],[4.176498,50.00065],[4.206331,49.97546],[4.221639,49.97089],[4.308774,49.98145],[4.445423,49.9523],[4.454691,49.95251],[4.658098,50.00609],[4.669358,50.01392],[4.672929,50.02716],[4.66924,50.06972],[4.695168,50.10472],[4.831227,50.17941],[4.881497,50.16436],[4.904786,50.14451],[4.904264,50.12639],[4.880762,50.0815],[4.862772,50.0745],[4.851037,50.06216],[4.843307,50.03884],[4.843307,50.03883],[4.843295,50.03881],[4.826781,49.989],[4.826618,49.97692],[4.833433,49.96696],[4.896542,49.91753],[4.897546,49.89424],[4.879134,49.86942],[4.876249,49.85111],[4.889238,49.81266],[4.897691,49.80204],[4.910979,49.79926],[4.995343,49.81116],[5.01867,49.79272],[5.026862,49.78886],[5.099438,49.77323],[5.134584,49.73462],[5.141201,49.72984],[5.187609,49.70906],[5.196025,49.70732],[5.281572,49.70836],[5.333628,49.67308],[5.343996,49.65049],[5.354398,49.64041],[5.431412,49.60791],[5.482051,49.52815],[5.492943,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.607602,49.53761],[5.640997,49.56095],[5.706759,49.55267],[5.715782,49.55361],[5.775261,49.57414],[5.839902,49.55321],[5.861263,49.52038],[5.875997,49.5114],[5.975162,49.50129],[5.998015,49.47317],[6.016266,49.46597],[6.08635,49.47562],[6.093186,49.47787],[6.173966,49.52187],[6.246435,49.52511],[6.333999,49.48235],[6.344229,49.48037],[6.435145,49.487],[6.5451,49.44384],[6.606389,49.37868],[6.604972,49.33739],[6.616267,49.31869],[6.670133,49.29269],[6.729955,49.22917],[6.743276,49.19086],[6.760259,49.17752],[6.809042,49.17284],[6.824733,49.17826],[6.830928,49.19366],[6.829819,49.21802],[6.851186,49.23136],[6.884528,49.2239],[6.893221,49.22389],[6.937527,49.23369],[7.040549,49.19794],[7.046296,49.17503],[7.054777,49.16313],[7.069081,49.16018],[7.104945,49.16634],[7.143153,49.14159],[7.153499,49.13839],[7.286827,49.13488],[7.29893,49.13856],[7.360948,49.18259],[7.450116,49.19517],[7.50113,49.17672],[7.543788,49.10572],[7.557903,49.09626],[7.629604,49.08527],[7.647217,49.06722],[7.661197,49.06119],[7.754008,49.05963],[7.760731,49.06067],[7.802913,49.07489],[7.855253,49.05329],[7.867297,49.05227],[7.93826,49.06832],[8.080685,49.00688],[8.222498,48.98787],[8.23704,48.97683],[8.235894,48.95817],[8.208878,48.94863],[8.200888,48.94339],[8.158243,48.89753],[8.100873,48.7993],[7.990709,48.74478],[7.985341,48.7409],[7.904217,48.65865],[7.856051,48.63606],[7.848405,48.62977],[7.818424,48.58883],[7.81456,48.57704],[7.814491,48.50968],[7.785465,48.48337],[7.780554,48.47652],[7.745059,48.39484],[7.743573,48.38427],[7.751593,48.32322],[7.71085,48.29841],[7.702411,48.28803],[7.676613,48.21555],[7.596051,48.11698],[7.591652,48.10648],[7.585216,48.04694],[7.591268,48.03035],[7.624373,47.99865],[7.632049,47.97081],[7.575545,47.87436],[7.572802,47.86435],[7.572673,47.83631],[7.545808,47.78793],[7.544185,47.77232],[7.557581,47.72899],[7.535257,47.6989],[7.531364,47.68564],[7.536998,47.67302],[7.600164,47.60822],[7.589675,47.56755],[7.554237,47.55128],[7.54511,47.54283],[7.512557,47.48439],[7.387471,47.42111],[7.326527,47.4273],[7.244354,47.40939],[7.167083,47.4335],[7.152115,47.47612],[7.14279,47.48707],[7.128529,47.48893],[7.080105,47.47718],[7.035575,47.48695],[7.021019,47.48458],[7.012048,47.47287],[7.002995,47.44095],[6.955099,47.40808],[6.947157,47.39698],[6.94818,47.38337],[6.957691,47.37359],[6.971263,47.37218],[7.018004,47.38386],[7.05623,47.37035],[7.070073,47.35005],[7.05958,47.32257],[6.974243,47.27856],[6.963469,47.26233],[6.961339,47.23479],[6.89443,47.19393],[6.889128,47.18922],[6.855453,47.14636],[6.769073,47.10751],[6.760108,47.09953],[6.725613,47.0418],[6.623551,46.9811],[6.481204,46.9445],[6.46892,46.93522],[6.466862,46.91997],[6.475476,46.88771],[6.453496,46.8239],[6.45644,46.80534],[6.467224,46.79104],[6.460984,46.76887],[6.15817,46.59343],[6.148724,46.58069],[6.15152,46.56508],[6.165489,46.54399],[6.158111,46.52456],[6.101739,46.46979],[6.095717,46.45418],[6.097044,46.43317],[6.108289,46.41643],[6.166216,46.38839],[6.178173,46.36922],[6.137482,46.31297],[6.133713,46.30227],[6.130383,46.23737],[6.110298,46.22344],[6.088648,46.23081],[6.077173,46.23123],[6.018573,46.21601],[6.006813,46.20752],[6.003882,46.19332],[6.007866,46.16977],[6.017834,46.15564],[6.03509,46.15456],[6.055639,46.16288],[6.124683,46.15415],[6.137776,46.15702],[6.240258,46.22094],[6.249058,46.23299],[6.247073,46.24777],[6.21148,46.31057],[6.212186,46.32485],[6.239462,46.36705],[6.316478,46.41557],[6.410826,46.42495],[6.417483,46.42682],[6.504978,46.46871],[6.630473,46.47435],[6.746646,46.45695],[6.822442,46.42925],[6.818324,46.38181],[6.804843,46.36179],[6.801885,46.34639],[6.810949,46.33359],[6.864911,46.30038],[6.875036,46.28007],[6.860917,46.2439],[6.826978,46.21188],[6.820746,46.19862],[6.818627,46.16592],[6.822593,46.15261],[6.834266,46.14509],[6.903819,46.12971],[6.904911,46.09595],[6.909323,46.08406],[6.920006,46.07721],[6.948976,46.0699],[7.015561,46.00883],[7.051911,45.93066],[7.045335,45.92217],[7.044967,45.92064],[7.043936,45.92036],[6.995822,45.85822],[6.940965,45.83551],[6.843757,45.82387],[6.831016,45.81711],[6.826141,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.841405,45.71373],[6.907294,45.69124],[6.92419,45.66935],[6.942468,45.66172],[6.971313,45.66528],[7.00597,45.64945],[7.011511,45.63652],[6.997797,45.60877],[6.996431,45.59465],[7.015803,45.52354],[7.027743,45.5102],[7.107198,45.47877],[7.122797,45.44924],[7.13304,45.44001],[7.185604,45.41894],[7.19515,45.40409],[7.170749,45.35069],[7.142319,45.32298],[7.136488,45.30576],[7.14458,45.25048],[7.084166,45.20279],[6.992792,45.19823],[6.981064,45.19368],[6.900091,45.12689],[6.85843,45.11699],[6.782826,45.14228],[6.770557,45.14242],[6.677507,45.11356],[6.665295,45.10289],[6.665008,45.08667],[6.68237,45.04558],[6.696016,45.03395],[6.757442,45.01884],[6.783751,44.9146],[6.794195,44.90161],[6.866981,44.86519],[6.879801,44.86346],[6.936325,44.87461],[7.017954,44.84402],[7.034535,44.82282],[7.037114,44.75009],[7.049604,44.73226],[7.072236,44.72311],[7.086508,44.6968],[7.086656,44.68085],[7.07671,44.67134],[6.990071,44.67203],[6.974128,44.66431],[6.970564,44.64696],[6.978189,44.61784],[6.94659,44.57124],[6.882347,44.53479],[6.872327,44.5195],[6.878925,44.50245],[6.958945,44.43129],[6.958723,44.42908],[6.921668,44.41436],[6.912225,44.40659],[6.909075,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.999091,44.29414],[7.011806,44.256],[7.019835,44.24558],[7.032595,44.2424],[7.073117,44.2461],[7.165097,44.22112],[7.245331,44.18544],[7.260526,44.16682],[7.275371,44.15947],[7.338779,44.1574],[7.362775,44.13834],[7.377763,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.564785,44.15817],[7.605476,44.1634],[7.616198,44.16827],[7.639891,44.18928],[7.686079,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.694448,44.12276],[7.727862,44.08615],[7.724032,44.05704],[7.686028,44.02371],[7.680769,44.0164],[7.660161,43.9672],[7.596244,43.94466],[7.584187,43.93287],[7.568576,43.89159],[7.527096,43.87434],[7.516489,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.369681,41.35052],[9.273114,41.29196],[8.941857,41.27688],[5.8,41.64],[3.173576,42.41768],[3.160814,42.42757],[3.094399,42.41457],[3.034016,42.45331],[3.022142,42.45645],[2.878221,42.4487],[2.870188,42.44653],[2.784238,42.40256],[2.741304,42.41128],[2.729276,42.40998],[2.693308,42.39417],[2.683779,42.3854],[2.681621,42.37263],[2.685852,42.34679],[2.66719,42.33008],[2.581057,42.34418],[2.567769,42.34173],[2.533803,42.32197],[2.477948,42.32986],[2.419327,42.37658],[2.41222,42.38021],[2.267193,42.42055],[2.259731,42.42117],[2.206944,42.41558],[2.206525,42.41526],[2.205257,42.41541],[2.160278,42.41065],[2.148808,42.40545],[2.093931,42.35474],[2.008614,42.33818],[1.964998,42.36473],[1.930762,42.42442],[1.920889,42.43302],[1.884665,42.44761],[1.884588,42.44762],[1.884444,42.4477],[1.827736,42.47056],[1.725668,42.48452],[1.715606,42.50125],[1.727195,42.56103],[1.724794,42.57499],[1.710109,42.59992],[1.69377,42.60975],[1.602827,42.61382],[1.560687,42.6392],[1.546365,42.64166],[1.504443,42.6331],[1.492096,42.62502],[1.472384,42.59703],[1.437922,42.59264],[1.419356,42.60643],[1.38032,42.67415],[1.373353,42.68127],[1.333134,42.70563],[1.323642,42.7085],[1.232212,42.71248],[1.165543,42.69928],[1.085465,42.76635],[1.075637,42.77079],[0.9593748,42.78852],[0.9507323,42.78794],[0.9226515,42.7797],[0.8460624,42.8157],[0.7151135,42.8464],[0.7001699,42.84402],[0.6911674,42.83186],[0.6740937,42.76479],[0.6747382,42.75286],[0.6919171,42.70684],[0.6689955,42.67901],[0.4302428,42.67863],[0.3715037,42.70308],[0.3595376,42.70415],[0.3491168,42.69817],[0.3256688,42.67274],[0.2957095,42.66388],[0.2459353,42.70175],[0.2397249,42.70494],[0.189669,42.72039],[0.1791886,42.72075],[-0.01993262,42.67389],[-0.06725834,42.6848],[-0.1694885,42.77157],[-0.2998662,42.82697],[-0.3168349,42.82635],[-0.3920752,42.78766],[-0.4435404,42.78453],[-0.488418,42.80255],[-0.508683,42.79935],[-0.5449894,42.76906],[-0.5672068,42.76937],[-0.6744552,42.86392],[-0.6809365,42.86775],[-0.7337233,42.88666],[-0.747598,42.93879],[-0.757105,42.95107],[-0.7725328,42.95284],[-0.8211401,42.93865],[-0.9450847,42.94192],[-1.023131,42.98206],[-1.108517,43.00409],[-1.115597,43.00461],[-1.147753,43.00124],[-1.158452,43.01452],[-1.167362,43.02083],[-1.216216,43.0381],[-1.226121,43.03898],[-1.262362,43.03303],[-1.306428,43.05531],[-1.319918,43.05696],[-1.331346,43.0496],[-1.354196,43.0197],[-1.438684,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.476407,43.10248],[-1.434786,43.13087],[-1.427318,43.1404],[-1.394112,43.22935],[-1.395313,43.24596],[-1.408677,43.25591],[-1.526287,43.28099],[-1.546257,43.2737],[-1.571485,43.2412],[-1.610526,43.24223],[-1.650003,43.29323],[-1.669527,43.30065],[-1.733594,43.28856],[-1.756061,43.31966],[-1.762973,43.32565],[-1.791557,43.34067],[-1.800991,43.37017],[-1.785091,43.39037],[-1.783502,43.39686],[-2.7,43.9]]],"terms_url":"http://wiki.openstreetmap.org/wiki/FR:Servers/tile.openstreetmap.fr#Route500.E2.84.A2.C2.A9.C2.AE","terms_text":"Tiles © cquest@Openstreetmap France, data © IGN, LO/OL","description":"Routes du réseau classé (autoroutes, nationales, départementales)","overlay":true},{"id":"santana_do_ipanema","name":"Santana do Ipanema AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Santana%20do%20Ipanema&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.20224124741,-9.41355941666],[-37.20188336806,-9.37768274195],[-37.20208218992,-9.37455390013],[-37.20192313243,-9.36732508877],[-37.20169448729,-9.36044924119],[-37.20172431057,-9.35500535669],[-37.20195295571,-9.35101312056],[-37.20191319134,-9.34772709331],[-37.20175413385,-9.3383494838],[-37.20170442839,-9.33505352761],[-37.20171436948,-9.33301315816],[-37.20141613669,-9.32833399659],[-37.20120737373,-9.3246946053],[-37.20116760936,-9.32350762581],[-37.21425008782,-9.32345857698],[-37.21537343133,-9.32339971838],[-37.22078138595,-9.32328200115],[-37.23727365933,-9.32313485456],[-37.25180753737,-9.32292884922],[-37.26559583344,-9.32276208291],[-37.28029871006,-9.32258550672],[-37.29190990675,-9.32244816963],[-37.29204908205,-9.33522028804],[-37.29304319135,-9.41219621023],[-37.28356932967,-9.41235312635],[-37.27789296554,-9.41250023515],[-37.27160025364,-9.4124904279],[-37.26505901441,-9.41261792215],[-37.26164921949,-9.4127356091],[-37.25498868715,-9.41275522359],[-37.2499087886,-9.41296117565],[-37.24616099652,-9.41297098289],[-37.24108109797,-9.41302982631],[-37.23460944639,-9.41320635652],[-37.22839626323,-9.41324558544],[-37.22164626105,-9.41335346495],[-37.21686459529,-9.41346134443],[-37.21291798135,-9.41343192276],[-37.20224124741,-9.41355941666]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"Sao_miguel_dos_campos","name":"São Miguel dos Campos AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Sao_miguel_dos_campos&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.14150176596,-9.83171289603],[-36.05047117688,-9.8324573223],[-36.04958641959,-9.74245778891],[-36.1405871854,-9.74166417216],[-36.14150176596,-9.83171289603]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"GEOSN-DOP-RGB","name":"Saxony latest aerial imagery","type":"wms","template":"https://geodienste.sachsen.de/wms_geosn_dop-rgb/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dop_020&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[13.549014,50.697922],[13.842514,50.711263],[13.93239,50.745042],[14.046138,50.79389],[14.252571,50.859532],[14.400023,50.889661],[14.426705,50.935703],[14.35649,50.971973],[14.325595,50.993191],[14.27504,50.990539],[14.315765,51.042662],[14.415471,51.012633],[14.519389,51.003797],[14.5882,50.981699],[14.544667,50.91977],[14.579775,50.906489],[14.647181,50.922426],[14.644373,50.909146],[14.605052,50.856873],[14.720205,50.817851],[14.810081,50.813415],[14.856423,50.890547],[14.912595,50.947206],[14.996853,51.086789],[15.053026,51.247932],[15.055834,51.292741],[14.99264,51.344524],[14.988427,51.398],[14.977193,51.45754],[14.909786,51.496025],[14.739865,51.537097],[14.739865,51.591221],[14.700545,51.60605],[14.67948,51.5982],[14.683693,51.578133],[14.673863,51.558056],[14.617691,51.557183],[14.583987,51.590349],[14.519389,51.569405],[14.435131,51.559802],[14.326999,51.52574],[14.13461,51.555437],[14.067203,51.499522],[14.027882,51.478536],[14.04333,51.45229],[13.995583,51.392743],[13.957667,51.405885],[13.888856,51.388362],[13.724552,51.374338],[13.554631,51.392743],[13.404371,51.45929],[13.352411,51.439161],[13.315899,51.443538],[13.286409,51.418147],[13.226024,51.400629],[13.213385,51.46104],[13.219002,51.526614],[13.174064,51.5982],[13.002739,51.677512],[12.905842,51.653123],[12.903033,51.66619],[12.853883,51.693183],[12.764007,51.659221],[12.688175,51.670545],[12.643237,51.629593],[12.577235,51.630464],[12.425569,51.610411],[12.230371,51.570278],[12.177007,51.530109],[12.139091,51.460165],[12.167177,51.417272],[12.174199,51.334874],[12.13207,51.318201],[12.186838,51.213637],[12.158751,51.188119],[12.220541,51.092963],[12.490168,51.054139],[12.521062,50.993191],[12.605321,50.972857],[12.626385,50.918885],[12.502806,50.910917],[12.237393,50.818738],[12.213519,50.729933],[12.286543,50.664999],[12.217732,50.646303],[12.133474,50.627599],[12.053428,50.563416],[12.019725,50.647193],[11.859634,50.548248],[11.876486,50.508076],[11.927041,50.505397],[11.936871,50.486637],[11.870869,50.441941],[11.934062,50.399888],[11.96917,50.339875],[12.120835,50.297732],[12.172794,50.306702],[12.185433,50.260938],[12.212115,50.253755],[12.257053,50.216029],[12.28233,50.156684],[12.355354,50.158483],[12.355354,50.22142],[12.414335,50.281582],[12.511232,50.347045],[12.537914,50.387354],[12.678345,50.402573],[12.712048,50.386459],[12.7289,50.396307],[12.756986,50.42584],[12.786476,50.433891],[12.817371,50.417787],[12.846861,50.436574],[12.947971,50.387354],[13.009761,50.414208],[13.046273,50.449989],[13.056103,50.48753],[13.214789,50.492891],[13.275174,50.566092],[13.341177,50.568768],[13.391732,50.613344],[13.477394,50.585711],[13.54761,50.634725],[13.568674,50.67212],[13.549014,50.697922]]],"terms_url":"https://geoportal.sachsen.de/md/cd01c334-7e32-482f-bd43-af286707178a","terms_text":"Staatsbetrieb Geobasisinformation und Vermessung Sachsen","best":true,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHIAAABVCAMAAACiqkDBAAAA51BMVEWxs7T////a29oAaUD+/f6tr7CusLH8/P3t7e67vb76+fr29fXP0NHq6urn5+fe3t/h4eHS0tPLzMz3+PjMz87z8/Lw8PDV1taqrK0Ab0UEcUe0trcnfFzX19cAYDbFxscbd1QSckzHy8rCw8S+wcG3uboAbEPl5OQMcUoGbEXj4+NWm4CkyryTqqGXwrLN49qdsalBj3FZi3hwmInc4N6zwLtNiXI2fmN8nJBDhGuIpJmJuqe31sp+s54zhmau0cTq9PDd7edwqpPk8exjo4vm6OepubNikX+vvLfX6eLB3NLz9vW9x8PQldiEAAAK6ElEQVR4Xr2Z53LjuBKFdcCcM5VzDs4554n7/s9zGxDplThcz1Rdec4PF8mi8KEDumGwgjKldgInZjI+QyXIqBpY2sETADf2/gaSBRae7lrS/P75VuO3n4yc2g5+7h9JnbV6zwfAov15SN32gYfljFjz5Wq17NOFtPwBVJ1PQVpBGzh47nHM/c0LEguPqyMB/Q4r2DlSZoGJl5t7KXOmyQxVNQJLvuXQ/g1g7xbpxTq01dGcRp8tHyK43UpNUZVaTRkmWPU6Umf5CBbtDukvgNt13I72X6CHlVqt0jS6cdt3UhN4XBKzdQDP2hkyivHEI9jiDvW6w7C9cCwNXLKlW+YU+5LU6f+AZ+7Oscx9XC5vNY6IZABm4ixYEA6NcVOJ5WYXt/0OZwa7Q6IKQHehL7xq3CVQRVVIqlqpqAbimqEdcOYB7B0hme1AD4zaEMMaBxFpU9ZCUQzzoE/xfATbDTIAQkrQylhuK5VfpCwsbqt8S/E8gp7sBImFgwHB1NRRS5AxDLWijLBPeXsDezdIWAxtGtbXmkXgOpiKINNakQ7g7QYJ2JhWajaGJWZWIl8RDv5JK+kIPv5QsqaZpgYuLTI1TS4gEUCvGAjKgukm6wvzgVy7wsdtRdOZTUs79L2pScJadGV5jA3DYdzWcySYZhmRW4a0ZYMbrwywpHqh+ShX4tlhmFeon08HPx5W+/s3d3c3N/ur1e2P748ahOx3JKZ6lFhlwRxhoAq2/p2ydr8kmk41DKYmAO3pdv95edTqzejNLUnSrHd/9Hr3Yqb/IuE6kEclwWxqTMkS6ZXM3K5BCYsDh8O+r+6W932pwJEK6PlPGxtIOA5spcRMXVezqD7Npc6Dlubv2+FCJtrB/ut9T8oxc7Jm+UzefLj9wXVLDr7hpvfpx3dY5MicaTV/NVNhWjNfL0uetLbAxS6Al4fno9w0qX+/vFv9ePopy7JpJbo79UkL16HWwGf2+NqZP/rYRmIq6yX5MwD3t0oN1D2QpPkLC2yOe9pftuYZrXf0vDoglunosPMiLZQV6+aYodV5RVBEgmFRcK2q1pqyXauMqYFWddx3OjcZLjNudv+8+h7B1L3QaKo1A91apURKSmvsIDWLSCBAoKxJfJ40O2MYBpqli6YmW/JNp3O/es1x/aO72xfIqTcwKuJ1SjZeqUvz/kjEpIgUzFGN+2E0sNlCX7dqGfqC2YPRWPUogd6tu7t9hOYEo6bKXZcrccuQCsWkcyvrZUjTtZizth9m6njVcDhua00RkfVcCSm1Xh9eAATcOLUwtlUp0ZgW2D3aKEPCAxJ9KoxqVkTwlSG6+bjmHXlz/7uGtG34kVqS3215XCl5+jijKsLKkQhg5HmWaSznxVfxnh4eYfpdcmaNXixBDkqbg3bT6UULlCNhWdNiNJL8ido19cCg2IlrMr6k2ZXUEyXUWlQG4v9C4pfZK9Pk/ZqiqhYGL9ZH/1dk8tCZv1jJfyIjq/AjJaD4lA3ulSDVVN+eMIWAZ90rYvwnEiG2O0q5C8t3LpubC762K+Oh7VtUtQ4w/QA5RZhNv5g/BX+XrQdFxIVgatMYVKeJDMi0Qo7A8AESrlMgWIsyZLXM37UhQoVM85wI4HUwNtgLlQFUP0SGKNaOtMyeEHl/zd1IfhwFSIRp6bQ6MJrcXOv73T4c7UMk983v17dqkD05TKWgxczhMGguC0fjvOoqXZD0GB8iFwi3kOoA5fuFdo0MaxrdwNcjzkoIZugWn8JGlvGemeJjZGpVlQ/X97rPNBM9ZG6iiZj53I3cspq35SPVyKL4MTLSCyuuafIHOYrbZbO3VLBSl8VDHrPcMsXeWlLKVNf+BJkWi4Gur104DKu+Y2WstqtlrE2vq8PN/bA6Row/stLfbtRj16x6TiI2jhb5MBR21cJCmmUQ2a+9b0FqVTP9E2RqspogjbrvjVq2eEvrUrze7VJH6BZWiUhd0+raVeZTzliRiQB/gvThthdkVPYvtd8ObQzUDFVWlUSKUuJ64kemGfn+dBqGth1Uu+4fIQPIWrLefKytqmWDF0UNgNPGXeZEsqZPgyC0A8/VI5Tp4+rTrWT+U98HL0Eqjq4YtqMh8eKYuR+Afu9YrbiFVp1CSxLerLjQoFdtL/p/D0ddvBXHVzyzWeQNHFjteLGT89gYgVJE2tslRTE8gNn6ro6AXdn4xYlil5fz1a4OJ3R2d+rchpuNXtqlVbWbwrM1YHdIhlAtPzIQLh3p8Nq7PehuQxeM0pRVxj4cG9gt0i0/pfAi7tMQmq1hx0gbYOWnFOPa2BVn3jtGppZW+r+T2oUxlE0b2DmSod1Oy2JpaDo8F7tHBkgrgdkscexYgw3sHkkNf1gbyIZa3OjUDCuy8QlI2UegqEMMCanm/XFsDEObQffxGcgAHvW/phzy8/zRwOYH+pHY4cNPAWe0d7139ofxPP2yd304MMGlvb29pRCy3t6cyibRGRvdsC2n2d7DTPSpF4QjD7YG96Rf55p9Zfit2PlMvHzxBSS/1++3dHAd0tW/SCZD4yRNNl2/bXdH2flNrYoqEPfqkjSp0596/x/8RnG/zt+d0J89bjH/1Qm49upS/x3paKbH7MHQqOjO5iG7yhACpz36/ez85JjIk/4pPlTUopcvTr5ecNQAOG1IktRgGbKXI1NHM9Ykxbc289WDDeC8LtWvGADnmK6+5vmmYUNafvcPvXIt3NiQ6scZsn5eQEYeRvkZRFtrbhKrAGKyrZWCS2s1GjN+meydt1oXl5nFzvUVv8tNmSWAmGm9FwnkRKqfbSGTtjxUtk7w82qONkiXNO9DrDXY2zsk5OlFfUKq98+EYb313exwPe5c5A2mg9jWOHJ+TnM2N5Ee/FrJ/+lEDMB1NZFmLjZlUaDqfRFhBlRnE7rr89h9IT7PtKvrQQohQpKJV5RKGbLwL2X+0UAQGaqZMydijojYWiYOiXipW2d9iqwIdWPP0b/1pEkvgXm1zu7e+d4iR/5jE8zZROqms3G0xJSM2M5M6k0mFyBVG3OumU+Q9ZPr+qRn+o1sEXyhiXwD9K8NWiESd/uJlVmJ4zq9s4GEjYGSM6OFwoliPQqZ3EoNQMAjRgnvgz85IZ1PpLl7RqQYpLRPtou5XV9QMeCvHufI09mk4R9uIDXH2j66UQIEyHUxkfo6ANYi0TgLjUexQaqTGA00Fy6kx+8raHF2KRZmNUNSDk6ON5FgqOarxI3EzjXGu77WKRrCXlP7Vs+tPM7kcORpjjwBG8QM4vaaZ3qOTHuT+ZW0gUSAsZplDW06QgyQS8RocgXk2UvIC25OLu7YM2HZjBeB40a9BaGE7vdyJE+5yRZSzz/NKAQfFj5OkB/rJwkAjZao1DjFCaVNyoc5P/9q6TOakQzQU17hyLbJISAgHJYjZYrPFhL5Ry8lRBsMW/rGo9I6ub7kBYAjqw0qo98G141644qjiHl4yIshof2ZJFHYvuxRbvGJ5UgMGgWk7CcCqY6AAAVdi75ASVi/OJ8QEpcNfk+MHt2kF1nrkPoMwJ5EzDqJUuwbcqTIiW0kFrDF6hiVfer+0qoLXb0dNjgS1+v+ec4AvhJFg5ws/XVwW521LkYAPKkjEZnk8y/Mm0i05SYZOTZdq6wlnV0eH5+cAfogjkByv1xeHtrI5B1u3pkxfWO7WVVlcXPKWAIhl7HTLWRq+vwEydXxmdpCwoah6pqLv4jEQndNH38V6UFu4+8iUa3is/U/e1Y2pAhuIKYAAAAASUVORK5CYII="},{"id":"Geodatastyrelsen_Denmark","name":"SDFE aerial imagery","type":"tms","template":"http://osmtools.septima.dk/mapproxy/tiles/1.0.0/kortforsyningen_ortoforaar/EPSG3857/{zoom}/{x}/{y}.jpeg","scaleExtent":[0,21],"polygon":[[[8.3743941,54.9551655],[8.3683809,55.4042149],[8.2103997,55.4039795],[8.2087314,55.4937345],[8.0502655,55.4924731],[8.0185123,56.7501399],[8.1819161,56.7509948],[8.1763274,57.0208898],[8.3413329,57.0219872],[8.3392467,57.1119574],[8.5054433,57.1123212],[8.5033923,57.2020499],[9.3316304,57.2027636],[9.3319079,57.2924835],[9.4978864,57.2919578],[9.4988593,57.3820608],[9.6649749,57.3811615],[9.6687295,57.5605591],[9.8351961,57.5596265],[9.8374896,57.6493322],[10.1725726,57.6462818],[10.1754245,57.7367768],[10.5118282,57.7330269],[10.5152095,57.8228945],[10.6834853,57.8207722],[10.6751613,57.6412021],[10.5077045,57.6433097],[10.5039992,57.5535088],[10.671038,57.5514113],[10.6507805,57.1024538],[10.4857673,57.1045138],[10.4786236,56.9249051],[10.3143981,56.9267573],[10.3112341,56.8369269],[10.4750295,56.83509],[10.4649016,56.5656681],[10.9524239,56.5589761],[10.9479249,56.4692243],[11.1099335,56.4664675],[11.1052639,56.376833],[10.9429901,56.3795284],[10.9341235,56.1994768],[10.7719685,56.2020244],[10.7694751,56.1120103],[10.6079695,56.1150259],[10.4466742,56.116717],[10.2865948,56.118675],[10.2831527,56.0281851],[10.4439274,56.0270388],[10.4417713,55.7579243],[10.4334961,55.6693533],[10.743814,55.6646861],[10.743814,55.5712253],[10.8969041,55.5712253],[10.9051793,55.3953852],[11.0613726,55.3812841],[11.0593038,55.1124061],[11.0458567,55.0318621],[11.2030844,55.0247474],[11.2030844,55.117139],[11.0593038,55.1124061],[11.0613726,55.3812841],[11.0789572,55.5712253],[10.8969041,55.5712253],[10.9258671,55.6670198],[10.743814,55.6646861],[10.7562267,55.7579243],[10.4417713,55.7579243],[10.4439274,56.0270388],[10.4466742,56.116717],[10.6079695,56.1150259],[10.6052053,56.0247462],[10.9258671,56.0201215],[10.9197132,55.9309388],[11.0802782,55.92792],[11.0858066,56.0178284],[11.7265047,56.005058],[11.7319981,56.0952142],[12.0540333,56.0871256],[12.0608477,56.1762576],[12.7023469,56.1594405],[12.6611131,55.7114318],[12.9792318,55.7014026],[12.9612912,55.5217294],[12.3268659,55.5412096],[12.3206071,55.4513655],[12.4778226,55.447067],[12.4702432,55.3570479],[12.6269738,55.3523837],[12.6200898,55.2632576],[12.4627339,55.26722],[12.4552949,55.1778223],[12.2987046,55.1822303],[12.2897344,55.0923641],[12.6048608,55.0832904],[12.5872011,54.9036285],[12.2766618,54.9119031],[12.2610181,54.7331602],[12.1070691,54.7378161],[12.0858621,54.4681655],[11.7794953,54.4753579],[11.7837381,54.5654783],[11.1658525,54.5782155],[11.1706443,54.6686508],[10.8617173,54.6733956],[10.8651245,54.7634667],[10.7713646,54.7643888],[10.7707276,54.7372807],[10.7551428,54.7375776],[10.7544039,54.7195666],[10.7389074,54.7197588],[10.7384368,54.7108482],[10.7074486,54.7113045],[10.7041094,54.6756741],[10.5510973,54.6781698],[10.5547184,54.7670245],[10.2423994,54.7705935],[10.2459845,54.8604673],[10.0902268,54.8622134],[10.0873731,54.7723851],[9.1555798,54.7769557],[9.1562752,54.8675369],[8.5321973,54.8663765],[8.531432,54.95516],[8.3743941,54.9551655]],[[11.4577738,56.819554],[11.7849181,56.8127385],[11.7716715,56.6332796],[11.4459621,56.6401087],[11.4577738,56.819554]],[[11.3274736,57.3612962],[11.3161808,57.1818004],[11.1508692,57.1847276],[11.1456628,57.094962],[10.8157703,57.1001693],[10.8290599,57.3695272],[11.3274736,57.3612962]],[[11.5843266,56.2777928],[11.5782882,56.1880397],[11.7392309,56.1845765],[11.7456428,56.2743186],[11.5843266,56.2777928]],[[14.6825922,55.3639405],[14.8395247,55.3565231],[14.8263755,55.2671261],[15.1393406,55.2517359],[15.1532015,55.3410836],[15.309925,55.3330556],[15.295719,55.2437356],[15.1393406,55.2517359],[15.1255631,55.1623802],[15.2815819,55.1544167],[15.2535578,54.9757646],[14.6317464,55.0062496],[14.6825922,55.3639405]]],"terms_url":"http://download.kortforsyningen.dk/content/vilkaar-og-betingelser","terms_text":"Geodatastyrelsen og Danske Kommuner","best":true,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAABGlBMVEX///+y4OQAAAAKCgrL6ezI6exHs8AdorE/sL0FBQX+/v78/v4RERH5/PzS7fC64+chpLLt+Pm95Og+Pj4mprQYGBgAkaLM6u3D5+oAlabc8fMVn671+/wAjp/Y7/EmJiY4ODg4rbsgICBgYGBLtcHk5OT29vYyMjJqamoNnKtISEhYu8aamppMTEzy+vpycnLg8/S/5emjo6NSUlJfvsgsLCzs7Oxsw81NtsKsrKyu3uPo9vd+ytODzdXk9PaEhISBgYFVVVWe193P7O95yNGPj4/x8fGk2uB7e3vd3d3Hx8cuqbfW1tZnwctRuMOxsbG7u7vQ0NB2dnYAl6dzxs+14eWW1NtRUVGZ1dxwxc6r3eKx3+ON0NiR0tk4C4avAAAG00lEQVR4XtzY5Y4qSxQF4JVqV9zdXcfd3Y/Lve//GrcDdTPQyjDnNMl8PyBAUnuxa1c3Ae8S3l9fP/+KFVG24rm4IZfraFiBRCqX+jyRiscD8F1yUp5K5Xbhs36K1qcJ4ofwVzVuChCFr4a0/swmJOCn/dxnk/g6/FSKmwOkovBTMGUJ0FLgI8EmgAYfRa0BMvBTxzIDcRF+2s1ZjuE3+KplDvBZw58la5rbklfzLUjlDuAim8Ub7ekJlmXP8n04qc7fjEpwFF4v3d2Vtk/fEKJ/xrETHKfDiThJQOvfwUmilBGCBiETXHhKQkmWTUwZETQ4OMjFUxPx3BacfGsFo1Qw87hw/cQrllPgQD5v5eLxXOvBubmnreiMxRIoHK1PcTpcpNMynOUz0TmZf+AtzSXmsFwfy3oUonOCQe+1ZLr/r7g8lpTORE0yP+Clz5kDsAkZy/lhCSDw8HLIJUxYTsNyHoSoSfDOc62hJcDyQ9ARombB0FsCUFz2jwUIRvvwELLpgILlbNlsgedaWesQ6ljSlXUIH+FJtxzDIZYUEoLmY3gFTyFTC1hWwbIeMuYRgDc5z81PwB6Wppla0PqKRZxx7Ez9NN5Bb80maJ1jMTrHsrT93CHe5UwQopSQOcCiQmfclN7HO2XXhYwgBIVMRkzgDbKHw/xwT8MfsHe6zvOdgzw+posCVmsgYbU+MVitJsFqvXSxMkexQrkJ3BpPG1iFcXutdwHct9e+V7AyzxWs1oBgta4ZrNRLhBljhS7IRoREsDI3ZADckmv4bKfSUNWNyhhjBoZKEbefIjG13Lu4hA+eGMJE1tYiDJEaMRia5RiRCmvf2zFCfDiUR6TwTAewwkhHwIvKFHcwUTshDSxNUWR4e5mduVqEFNtSbAcU0CUDLEDLmmuFdC45SnJpBR6+q3XMOJbU4tzGn0h1eEiedx63O1u7M7X6XCA8EQjn4S7WxCy5wpg79ARXXEfk+WqV58Xqb1B7RvnRVDiQhLNuQ2We3K+E9bJaHtzA0Y8SX92eqor7tP0BWt49gVyLkUJFevb4RdRo9Ai5gIOrEi0/k0Ax6s8K6LBVV9VbbBKPAFpsALlHdmBrSOtT1dJvAHpgNO+rAjvH5B64JEeuAeQa6QJolGFrnd+eU+UB0Aa8CuRhZ6MNQ6Po3oExuZk83sNGurRtIo6wFxiZhEf2O3A97UPNNUCkAEONjGHjVDQH4A8wtAYIKLC6ZI5hqElNtwD30/nblGwDfOHNAaod5MPWAFlY1WMDGFAhdZcAJ6oGw4391aBjDVBdOADaZUxbUHEO8EIP4LW06TmDNIDtFsDODj2BTVJzDFCIYULtwc6+NcA6+tYASdgqTFugqUWnAGM6e8fkFnaurEP4LxC2HMM0bD2RI1qmax+gzkyjbZIebGXpdehVSQfSAfMOyLAXoc0vMpu2AXpk+n6Dfm51zpsa8AjDKDxffwgHdWmDfsOIXYAx7dAx6cJBVjRdinUYtPmbkQ5Hz/QnV5dcWANsMg16EtpwlKA3Q1r/F801+j9COBzIw0WTfrk2ubcEKDKXMFyqMbhI8CJNUOXFX6DkfDgQNgQCyRBcRabzXY+VzQEG9A7YkG7gpr8virxBFB+GeKUd6mwike7DQ72sTta/ldrzf9HskCYMWKM5XIR2z3/+/HI1xFLqtemEX9boazrwm9NnhX78gR2XN1wVIgr+qqONoqtGW8bHdh0ruCoXZfxV3d6Jq7WKjI+tSRhXUlnBX7XTHLi7/q89u1txFIbiAH6EzZV0xd6shNJHKM1VIFoBd6BXuYshn+//GluWma5qN1od4sD09wDJnyTnHEF45OXl5eXp/nw6IkIQPsAn2BX+8nZxWf7E9oUx7MYwlMJaieZUa005b+Yuhg2zyV+WsRzWqbgW76iYt9jR2OSOmXUJ3qj4h9ITTMuNTTos28FynosuWsG0liU9rIDFzlz08T1MqY1NeixbXguSij5dwRTEkgGDYaGd0GKAlzAhux/A+jsouRjiCMLSdhxgDwsdHwQgXz0APAhAYl4BEDYK8DPqI8SjMlzRC9WCMkztIADLPrMRkTmjyA4PYLlmQSuGopvAmt+BsY1Y0zAUSlj1h9EBZib4GMeh/U/GeXnj3TUQ4XIfx5rrA8yDrWH2hpmkhv85OqneSRcolPbjg4Q2MFuKSXtTnCGwv+pwvwLFiNSlqnyWw1PS8K/c3EvV5UqIy0jVI68QVe7VgK8hJjQOkEFMTCq16R1cxwGa9FsFMFtfAfGjAC3EVI6rAMOmr1A2EFfpVI/DEBnqDyMC0f3ojuMCNlArJ6VSUjqJYRs1MUpd92dY4Q9//EnbIq9ZogAAAABJRU5ErkJggg=="},{"id":"Sicily-ATA2007","name":"Sicily - Italy","type":"wms","template":"http://map.sitr.regione.sicilia.it/ArcGIS/services/WGS84_F33/Ortofoto_ATA20072008_f33/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&STYLES=default&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[15.711650848388677,38.25894105289697],[15.237178802490236,38.81938114846882],[14.271240234375,38.55246141354153],[13.150634765625,38.75408327579141],[11.964111328125,37.97451499202459],[12.5244140625,37.54022177661216],[11.87896728515625,36.796089518731506],[12.496948242187498,35.47409160773029],[12.689208984375,35.46961797120201],[14.5733642578125,36.6640126988417],[15.297088623046873,36.62875385775956],[15.398540496826199,37.42170795425973],[15.711650848388677,38.25894105289697]]]},{"id":"sc2012","name":"SIG Santa Catarina OrtoRGB 2012","type":"wms","template":"http://sigsc.sc.gov.br:80/sigserver/SIGSC/wms?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OrtoRGB-Landsat-2012&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","polygon":[[[-48.62488448156965,-26.916236931410996],[-48.624164193144196,-26.83408805760915],[-48.5616254665196,-26.83412188528322],[-48.5616507397977,-26.749193916956184],[-48.626754704148055,-26.74918263262303],[-48.627146439958395,-26.73276274152515],[-48.6412615657696,-26.732999746505616],[-48.641741758053236,-26.709116191945647],[-48.624138919866105,-26.709127480253297],[-48.624176829783245,-26.500792500209887],[-48.570989216050585,-26.500769882438657],[-48.57154522816848,-26.474145680246586],[-48.55418248612319,-26.47380633457661],[-48.55449840209926,-26.45735818142214],[-48.56154964668535,-26.457471312923715],[-48.56161282988055,-26.41746108634898],[-48.49909937653404,-26.417472403421797],[-48.49908673989502,-26.250810301340856],[-48.43663646974372,-26.250787634582515],[-48.43661119646563,-26.207520071408148],[-48.460102708446854,-26.20750873380981],[-48.46194765774716,-26.124204304592393],[-48.56161282988057,-26.12419295889107],[-48.56162546651964,-25.95753087401021],[-48.624113646588064,-25.95753087401021],[-48.624113646588064,-25.945066276881477],[-48.688383592761575,-25.94606622032166],[-48.68839622940061,-25.9575195121708],[-49.25089094312879,-25.9575195121708],[-49.25090357976782,-25.999198717680073],[-49.31339175983624,-25.999198717680073],[-49.31337912319721,-26.0825014166478],[-49.37590521318276,-26.082501416647776],[-49.37590521318275,-26.124192958891047],[-49.50093211987576,-26.124181613188597],[-49.50091948323672,-26.16585828693744],[-49.68661489397596,-26.165846945284223],[-49.68661489397595,-26.12417026748506],[-49.74906516412725,-26.082456017648312],[-49.74907780076631,-26.04084043378188],[-49.81160389075186,-26.040851787565785],[-49.811591254112805,-25.999176002051062],[-49.93656761424967,-25.99915328641767],[-49.9366055241668,-25.98244474858429],[-50.000913380257444,-25.982876406234503],[-50.00093865353552,-25.99915328641767],[-50.313379553877645,-25.999164644234927],[-50.313417463794764,-26.040829079996882],[-50.37411124111907,-26.04084043378188],[-50.374098604480025,-25.999198717680073],[-50.49913814781211,-25.999176002051062],[-50.49911287453402,-25.984137291872997],[-50.62593418397117,-25.984523506389962],[-50.62594682061022,-26.04084043378188],[-50.6883970907615,-26.041612488584164],[-50.68844763731769,-26.124158921780424],[-50.75093581738611,-26.124136230367803],[-50.750948454025156,-26.207520071408148],[-51.12595335426997,-26.207474721008193],[-51.12595335426997,-26.249132949280156],[-51.18847944425552,-26.249178283438034],[-51.31344316775333,-26.33244989854678],[-51.31346844103143,-26.624140013763412],[-51.436599851867975,-26.62415131048226],[-51.43658721522893,-26.56476034464233],[-51.62408966535135,-26.564104792996805],[-51.62411493862942,-26.540796365619084],[-51.99906929231806,-26.540796365619084],[-52.06158274566456,-26.49910746406482],[-52.06158274566456,-26.457471312923687],[-52.12408356237202,-26.457493939210668],[-52.12405828909395,-26.41578614733],[-52.374074192562865,-26.41579746456714],[-52.37408682920191,-26.391327004376254],[-52.56156400604623,-26.389402650121472],[-52.561576642685274,-26.374153838977676],[-52.624077459392744,-26.37416516029677],[-52.62409009603178,-26.332472549349774],[-53.124083993052494,-26.332472549349752],[-53.12409662969154,-26.317068980284002],[-53.16180436059632,-26.31650263355217],[-53.161362078229814,-26.290821564697215],[-53.18655953648188,-26.29083289416888],[-53.24907298982837,-26.24911028219455],[-53.24906035318934,-26.23919300812073],[-53.31158644317491,-26.23824090528976],[-53.374099896521415,-26.22882146785218],[-53.43844566252919,-26.227767259506184],[-53.43843302589015,-26.249144282821256],[-53.5616023466438,-26.249155616361257],[-53.56158971000477,-26.239827739008902],[-53.655012382450856,-26.238138893809616],[-53.656225499799,-26.292634266082075],[-53.67011316610744,-26.316842441923516],[-53.68846156599812,-26.33241592233391],[-53.70322116040052,-26.374097232365553],[-53.70928674714123,-26.384489741468975],[-53.70980484934199,-26.395684982214643],[-53.70619077057565,-26.407218680242053],[-53.70721433833813,-26.459270088862837],[-53.714379312675604,-26.461679725793857],[-53.714758411846894,-26.48118122161117],[-53.73046575417756,-26.49913008216322],[-53.73146404866198,-26.54080767056338],[-53.750962382705566,-26.540796365619055],[-53.75094974606652,-26.624173903916578],[-53.76019976584611,-26.624140013763338],[-53.761248606886696,-26.667499888848678],[-53.75097501934461,-26.66751118127877],[-53.75096238270559,-26.742976079662007],[-53.727369777612,-26.743404906944193],[-53.72132946414936,-26.749047220537665],[-53.72140528398363,-26.750931690893374],[-53.745705540863625,-26.759428345833868],[-53.746122549952055,-26.777040237532006],[-53.71948451484907,-26.77754790691426],[-53.720836635226696,-26.834155712947112],[-53.700466373089114,-26.834144437060257],[-53.70276624139493,-26.931075520284146],[-53.71167507192037,-26.930906526843206],[-53.712243720677314,-26.955565624612287],[-53.751000292622685,-26.954788421555175],[-53.75092447278844,-26.999147992456276],[-53.764673136067394,-26.999147992456276],[-53.80369507743266,-27.037513523530937],[-53.80454173224855,-27.0725803974359],[-53.80809262781969,-27.07249038098803],[-53.8086233666595,-27.09612846681215],[-53.82689594671591,-27.095768476254833],[-53.82761623514137,-27.124136682787803],[-53.846444827315686,-27.124125435915396],[-53.84764530802479,-27.170138168249487],[-53.8350592155378,-27.18931578625989],[-53.83536249487484,-27.200544291231996],[-53.688474202637146,-27.202837060128804],[-53.688486839276194,-27.227885858850012],[-53.43653753003366,-27.23245898831079],[-53.43655016667271,-27.167507452480596],[-53.37598275573884,-27.167507452480574],[-53.376008029016916,-27.233515163499888],[-53.24904771655028,-27.235638719456546],[-53.24904771655028,-27.209220599589166],[-53.06344076228435,-27.209175646364237],[-53.06345339892339,-27.233402804913485],[-52.8134754053716,-27.23685216181505],[-52.81346276873256,-27.276528928524463],[-52.750961952025094,-27.277315131338465],[-52.750961952025094,-27.292487755808434],[-52.438495778404864,-27.292521445488386],[-52.438483141765836,-27.326890821722227],[-52.37603287161454,-27.327530725463642],[-52.3759949616974,-27.33419897625023],[-52.25098069164342,-27.33417652490038],[-52.25099332828246,-27.346692446966557],[-52.18654646916235,-27.34727611465991],[-52.18657174244043,-27.334187750575865],[-52.12597905822849,-27.33419897625023],[-52.12599169486754,-27.364133804119422],[-52.02978896183197,-27.364885718492065],[-52.03035761058891,-27.424416622283772],[-51.97533768419499,-27.42478676693274],[-51.97603269934236,-27.50087558818674],[-51.93845133482801,-27.500853170691318],[-51.93845133482801,-27.54251940627202],[-51.688460704637194,-27.542474588252876],[-51.68847334127622,-27.55742038383185],[-51.599031210128736,-27.557902111020763],[-51.599233396353426,-27.59480956901105],[-51.563509617778415,-27.594977556358298],[-51.563484344500324,-27.625860453692134],[-51.500882434680506,-27.62586045369211],[-51.50094561787572,-27.667535190923896],[-51.43936727581839,-27.667501615740118],[-51.439544188765,-27.709317103607006],[-51.37596925773886,-27.70949610256912],[-51.376007167655985,-27.750892905814947],[-51.31349371430947,-27.750904088992016],[-51.313455804392355,-27.792531093204254],[-51.18846680761643,-27.792508735404642],[-51.1884794442555,-27.875860156488773],[-51.12597862754804,-27.875860156488773],[-51.12596599090898,-27.91751742532308],[-51.06347781084055,-27.91749509328296],[-51.06346517420149,-27.959192137382583],[-51.000951720854985,-28.00086192326361],[-50.93850145070369,-28.00086192326361],[-50.93848881406464,-28.16754693055966],[-50.813461907371625,-28.167524650369067],[-50.813449270732576,-28.292532475134653],[-50.750961090664134,-28.29251022102188],[-50.68844763731762,-28.334184014870516],[-50.68848554723476,-28.417538143267095],[-50.625997367166335,-28.4175159153423],[-50.56352182373695,-28.44094155830843],[-50.43848228040489,-28.44050820876798],[-50.438469643765856,-28.459173964550686],[-50.37596882705837,-28.459207293310225],[-50.37598146369743,-28.475537121198975],[-50.188441103657894,-28.474537408344325],[-50.188491650214054,-28.51143164845026],[-50.12398160789872,-28.51104300453612],[-50.124019517815846,-28.5008600237691],[-49.87597493003768,-28.500848918564397],[-49.876012839954804,-28.514196530962266],[-49.813474113330216,-28.513685754912284],[-49.813474113330194,-28.58255155550104],[-49.830028110476746,-28.582507169109398],[-49.829510008275975,-28.625974659050915],[-49.87589911020343,-28.66572089511971],[-50.0010018367307,-28.749145575544063],[-50.00100183673066,-29.04083327722487],[-50.03318735637359,-29.04081118145324],[-50.0321890618892,-29.147114336184],[-50.12601610678465,-29.14774341401082],[-50.12597819686752,-29.165786374753505],[-50.13612541801917,-29.16580844371222],[-50.18850428685308,-29.19622599157441],[-50.18850428685309,-29.31905095330294],[-50.14220364139895,-29.31873143173735],[-50.14207727500852,-29.334221566678927],[-50.126003470145626,-29.334177501353437],[-50.125990833506584,-29.362375414604447],[-49.99905579431803,-29.361527388076844],[-49.99904315767897,-29.24030824385708],[-49.9384757467451,-29.239856157941617],[-49.93851365666223,-29.25087104871457],[-49.87601283995477,-29.25087104871457],[-49.876000203315726,-29.300979886173586],[-49.82262303999743,-29.30051704853271],[-49.82226921410422,-29.3341885176866],[-49.81347411333018,-29.334221566678927],[-49.81353729652554,-29.34109552421944],[-49.6865390741418,-29.339905833968423],[-49.6865138008637,-29.29254930022262],[-49.62398771087813,-29.292516237731153],[-49.6239750742391,-29.2508489980658],[-49.56148689417066,-29.2508269474122],[-49.561448984253516,-29.167485670694504],[-49.49901135074126,-29.167463602096316],[-49.49902398738031,-29.0841871105079],[-49.43649789739473,-29.084176067267432],[-49.43651053403379,-29.04251254202398],[-49.374047627243456,-29.04247939890416],[-49.37402235396536,-28.959201357408347],[-49.31153417389693,-28.959168187563616],[-49.311521537257896,-28.9174874156231],[-49.248982810633294,-28.917498476687246],[-49.24897017399424,-28.875823083095714],[-49.18654517712104,-28.875845214103762],[-49.18653254048198,-28.83414203544581],[-49.12401908713548,-28.834175245265325],[-49.12400645049644,-28.79249965988945],[-49.06149299714994,-28.79246643678005],[-49.06145508723281,-28.750840644227264],[-48.99903009035959,-28.75085172301705],[-48.999030090359604,-28.709187170256886],[-48.936579820208316,-28.709176087050047],[-48.936579820208316,-28.667517104639387],[-48.87405373022276,-28.667506017020735],[-48.874041093583735,-28.625852646864526],[-48.74911528000304,-28.625852646864555],[-48.749115280003025,-28.54254072237745],[-48.68656391673939,-28.54252962156217],[-48.68657655337841,-28.33417289217185],[-48.62407573667094,-28.334161769471883],[-48.62406310003189,-28.08417545272023],[-48.561600193241524,-28.08417545272023],[-48.56158755660246,-27.959192137382715],[-48.49904882997788,-27.959158652239882],[-48.49903619333884,-27.915809010935423],[-48.56157491996342,-27.915797844739515],[-48.561600193241524,-27.875837815851458],[-48.4990235566998,-27.875860156488873],[-48.49902355669978,-27.834220385416636],[-48.4365732865485,-27.83417568697334],[-48.43661119646565,-27.62582686571355],[-48.374059833202004,-27.625849257700484],[-48.374047196562984,-27.50086437943969],[-48.3115716531336,-27.50086437943969],[-48.311533743216444,-27.24913190347051],[-48.43657328654852,-27.24913190347051],[-48.4365353766314,-27.209164408055255],[-48.374021923284864,-27.20919812297907],[-48.37404719656297,-27.16579857825554],[-48.43656064990947,-27.16579857825554],[-48.43656064990947,-27.12414792965919],[-48.49906146661692,-27.124125435915495],[-48.49907031973662,-27.086668577138795],[-48.500216139509774,-27.08666004891293],[-48.5003124938822,-27.082470514310543],[-48.561600193241524,-27.082481765368538],[-48.56158755660248,-27.04252214011793],[-48.49906146661693,-27.04252214011793],[-48.49906146661693,-26.999125473627824],[-48.56156228332439,-26.999125473627824],[-48.56157491996343,-26.915786222397905],[-48.62488448156965,-26.916236931410996]]],"terms_url":"http://sigsc.sds.sc.gov.br/download/termo_sigsc.pdf","terms_text":"Sistema de Informações Geográficas - Governo de Santa Catarina"},{"id":"Slovakia-Historic-Maps","name":"Slovakia Historic Maps","type":"tms","template":"http://tms.freemap.sk/historicke/{zoom}/{x}/{y}.png","scaleExtent":[0,12],"polygon":[[[16.8196949,47.4927236],[16.8196949,49.5030322],[22.8388318,49.5030322],[22.8388318,47.4927236],[16.8196949,47.4927236]]]},{"id":"Soskut_Pusztazamor_Tarnok_Diosd_orto_2017","name":"Sóskút, Pusztazámor, Tárnok, Diósd ortophoto 2017","type":"tms","template":"http://adam.openstreetmap.hu/mapproxy/tiles/1.0.0/Soskut-Tarnok-Pusztazamor-Diosd/mercator/{zoom}/{x}/{y}.png","startDate":"2017-03-01T00:00:00.000Z","scaleExtent":[11,20],"polygon":[[[18.79273330201,47.37078533804],[18.791936169,47.37048036201],[18.79139114593,47.37063268281],[18.7901097,47.3717614],[18.7891647,47.3734529],[18.78721506824,47.37566027041],[18.7860339,47.37764910001],[18.7849824,47.3790513],[18.783695,47.3803226],[18.782665,47.3819499],[18.781399,47.3836789],[18.7793426,47.3871257],[18.776657,47.3893959],[18.764716,47.396699],[18.7616966,47.3996569],[18.7563102,47.4032821],[18.7583737,47.4065272],[18.75879657883,47.40776342073],[18.76199554897,47.41217224817],[18.7630394973,47.41315137445],[18.7659298,47.4147108],[18.7704058,47.4176575],[18.77247285488,47.41808545272],[18.7724806,47.4202978],[18.8086021,47.4404108],[18.8174212,47.435389],[18.8209188,47.4357228],[18.8280427,47.4375516],[18.8302099,47.4352584],[18.8358533,47.4375371],[18.8404882,47.4334586],[18.847655,47.4357228],[18.8510024,47.4328054],[18.8689996,47.4396086],[18.87361350924,47.43597176329],[18.87499181607,47.43342149293],[18.87386045593,47.43248349864],[18.8760377,47.4279677],[18.8605023,47.4230028],[18.8662101,47.4179794],[18.8724328,47.4108645],[18.8662959,47.4077278],[18.8696433,47.4047072],[18.86776892261,47.40207457802],[18.86509430105,47.40052438512],[18.87081279074,47.3983820654],[18.86772375423,47.39699336542],[18.86992005424,47.39655168559],[18.87648610191,47.39477958954],[18.87748924808,47.39494663392],[18.87866942005,47.39462343887],[18.88358322696,47.3899604942],[18.88290731029,47.3896699544],[18.88538567142,47.38530440107],[18.87747851924,47.38339390377],[18.88181296901,47.37604910406],[18.87914148883,47.37392756692],[18.88638345317,47.36922645965],[18.88205973224,47.36772957402],[18.87973157482,47.36640704749],[18.8746997507,47.36252284243],[18.87282220439,47.36136733615],[18.87027947025,47.36062605465],[18.86687842922,47.3585329683],[18.86234013156,47.35637438604],[18.85566679554,47.35199153827],[18.84873596744,47.34728120653],[18.83192388134,47.3384118486],[18.82497159557,47.34257772442],[18.81619540767,47.34925116493],[18.8107880743,47.35356882392],[18.80823461132,47.35599644336],[18.80645362453,47.35854023611],[18.80707589702,47.359019909],[18.80634633617,47.36021180457],[18.80465118007,47.36175250772],[18.80381433086,47.36335130305],[18.80054616504,47.36544732015],[18.79988097721,47.36617355102],[18.79416204336,47.36974865444],[18.79273330201,47.37078533804]],[[18.91871480064,47.4093812629],[18.91826418952,47.40997664498],[18.9206674488,47.41155945729],[18.92509845809,47.41372304121],[18.93473295288,47.41916790937],[18.94063381271,47.42241278301],[18.94981769638,47.41937843296],[18.95154503898,47.41749820965],[18.95689872818,47.41922598493],[18.95770339088,47.41877589767],[18.95755318717,47.41435467478],[18.9621129425,47.40506817222],[18.96266011314,47.40117592194],[18.96316436843,47.39903360927],[18.95446328239,47.3967314338],[18.95275739746,47.39526437993],[18.95201710777,47.39362297422],[18.95119098739,47.39356487042],[18.94692091064,47.39798783856],[18.94410995559,47.3984526281],[18.94161013679,47.39868502134],[18.93735078887,47.39633199249],[18.93617061691,47.39682584676],[18.93122462348,47.39999947627],[18.93120316581,47.40023186269],[18.92923978881,47.40204734624],[18.92561344223,47.40604845111],[18.92465857582,47.40635342305],[18.92293123321,47.40925782918],[18.91871480064,47.4093812629]]],"terms_url":"http://fototerkep.hu/","terms_text":"Fototerkep.hu","best":true,"description":"5 cm resolution bald image of 4 settlement"},{"id":"South_Africa-CD_NGI-Aerial","name":"South Africa CD:NGI Aerial","type":"tms","template":"http://{switch:a,b,c}.aerial.openstreetmap.org.za/ngi-aerial/{zoom}/{x}/{y}.jpg","scaleExtent":[1,22],"polygon":[[[17.8396817,-32.7983384],[17.8893509,-32.6972835],[18.00364,-32.6982187],[18.0991679,-32.7485251],[18.2898747,-32.5526645],[18.2930182,-32.0487089],[18.105455,-31.6454966],[17.8529257,-31.3443951],[17.5480046,-30.902171],[17.4044506,-30.6374731],[17.2493704,-30.3991663],[16.9936977,-29.6543552],[16.7987996,-29.19437],[16.5494139,-28.8415949],[16.4498691,-28.691876],[16.4491046,-28.5515766],[16.6002551,-28.4825663],[16.7514057,-28.4486958],[16.7462192,-28.2458973],[16.8855148,-28.04729],[16.9929502,-28.0244005],[17.0529659,-28.0257086],[17.1007562,-28.0338839],[17.2011527,-28.0930546],[17.2026346,-28.2328424],[17.2474611,-28.2338215],[17.2507953,-28.198892],[17.3511919,-28.1975861],[17.3515624,-28.2442655],[17.4015754,-28.2452446],[17.4149122,-28.3489751],[17.4008345,-28.547997],[17.4526999,-28.5489733],[17.4512071,-28.6495106],[17.4983599,-28.6872054],[17.6028204,-28.6830048],[17.6499732,-28.6967928],[17.6525928,-28.7381457],[17.801386,-28.7381457],[17.9994276,-28.7560602],[18.0002748,-28.7956172],[18.1574507,-28.8718055],[18.5063811,-28.8718055],[18.6153564,-28.8295875],[18.9087513,-28.8277516],[19.1046973,-28.9488548],[19.1969071,-28.9378513],[19.243012,-28.8516164],[19.2314858,-28.802963],[19.2587296,-28.7009928],[19.4431493,-28.6973163],[19.5500289,-28.4958332],[19.6967264,-28.4939914],[19.698822,-28.4479358],[19.8507587,-28.4433291],[19.8497109,-28.4027818],[19.9953605,-28.399095],[19.9893671,-24.7497859],[20.2916682,-24.9192346],[20.4724562,-25.1501701],[20.6532441,-25.4529449],[20.733265,-25.6801957],[20.8281046,-25.8963498],[20.8429232,-26.215851],[20.6502804,-26.4840868],[20.6532441,-26.8204869],[21.0889134,-26.846933],[21.6727695,-26.8389998],[21.7765003,-26.6696268],[21.9721069,-26.6431395],[22.2803355,-26.3274702],[22.5707817,-26.1333967],[22.7752795,-25.6775246],[23.0005235,-25.2761948],[23.4658301,-25.2735148],[23.883717,-25.597366],[24.2364017,-25.613402],[24.603905,-25.7896563],[25.110704,-25.7389432],[25.5078447,-25.6855376],[25.6441766,-25.4823781],[25.8419267,-24.7805437],[25.846641,-24.7538456],[26.3928487,-24.6332894],[26.4739066,-24.5653312],[26.5089966,-24.4842437],[26.5861946,-24.4075775],[26.7300635,-24.3014458],[26.8567384,-24.2499463],[26.8574402,-24.1026901],[26.9215471,-23.8990957],[26.931831,-23.8461891],[26.9714827,-23.6994344],[27.0006074,-23.6367644],[27.0578041,-23.6052574],[27.1360547,-23.5203437],[27.3339623,-23.3973792],[27.5144057,-23.3593929],[27.5958145,-23.2085465],[27.8098634,-23.0994957],[27.8828506,-23.0620496],[27.9382928,-22.9496487],[28.0407556,-22.8255118],[28.2056786,-22.6552861],[28.3397223,-22.5639374],[28.4906093,-22.560697],[28.6108769,-22.5400248],[28.828175,-22.4550173],[28.9285324,-22.4232328],[28.9594116,-22.3090081],[29.0162574,-22.208335],[29.2324117,-22.1693453],[29.3531213,-22.1842926],[29.6548952,-22.1186426],[29.7777102,-22.1361956],[29.9292989,-22.1849425],[30.1166795,-22.2830348],[30.2563377,-22.2914767],[30.3033582,-22.3395204],[30.5061784,-22.3057617],[30.8374279,-22.284983],[31.0058599,-22.3077095],[31.1834152,-22.3232913],[31.2930586,-22.3674647],[31.5680579,-23.1903385],[31.5568311,-23.4430809],[31.6931122,-23.6175209],[31.7119696,-23.741136],[31.7774743,-23.8800628],[31.8886337,-23.9481098],[31.9144386,-24.1746736],[31.9948307,-24.3040878],[32.0166656,-24.4405988],[32.0077331,-24.6536578],[32.019643,-24.9140701],[32.035523,-25.0849767],[32.019643,-25.3821442],[31.9928457,-25.4493771],[31.9997931,-25.5165725],[32.0057481,-25.6078978],[32.0057481,-25.6624806],[31.9362735,-25.8403721],[31.9809357,-25.9546537],[31.8687838,-26.0037251],[31.4162062,-25.7277683],[31.3229117,-25.7438611],[31.2504595,-25.8296526],[31.1393001,-25.9162746],[31.1164727,-25.9912361],[30.9656135,-26.2665756],[30.8921689,-26.3279703],[30.8534616,-26.4035568],[30.8226943,-26.4488849],[30.8022583,-26.5240694],[30.8038369,-26.8082089],[30.9020939,-26.7807451],[30.9100338,-26.8489495],[30.9824859,-26.9082627],[30.976531,-27.0029222],[31.0034434,-27.0441587],[31.1543322,-27.1980416],[31.5015607,-27.311117],[31.9700183,-27.311117],[31.9700183,-27.120472],[31.9769658,-27.050664],[32.0002464,-26.7983892],[32.1069826,-26.7984645],[32.3114546,-26.8479493],[32.899986,-26.8516059],[32.886091,-26.9816971],[32.709427,-27.4785436],[32.6240724,-27.7775144],[32.5813951,-28.07479],[32.5387178,-28.2288046],[32.4275584,-28.5021568],[32.3640388,-28.5945699],[32.0702603,-28.8469827],[31.9878832,-28.9069497],[31.7764818,-28.969487],[31.4638459,-29.2859343],[31.359634,-29.3854348],[31.1680825,-29.6307408],[31.064863,-29.7893535],[31.0534493,-29.8470469],[31.0669933,-29.8640319],[31.0455459,-29.9502017],[30.9518556,-30.0033946],[30.8651833,-30.1024093],[30.7244725,-30.392502],[30.3556256,-30.9308873],[30.0972364,-31.2458274],[29.8673136,-31.4304296],[29.7409393,-31.5014699],[29.481312,-31.6978686],[28.8943171,-32.2898903],[28.5497137,-32.5894641],[28.1436499,-32.8320732],[28.0748735,-32.941689],[27.8450942,-33.082869],[27.3757956,-33.3860685],[26.8805407,-33.6458951],[26.5916871,-33.7480756],[26.4527308,-33.7935795],[26.206754,-33.7548943],[26.0077897,-33.7223961],[25.8055494,-33.7524272],[25.7511073,-33.8006512],[25.6529079,-33.8543597],[25.6529079,-33.9469768],[25.7195789,-34.0040115],[25.7202807,-34.0511235],[25.5508915,-34.063151],[25.3504571,-34.0502627],[25.2810609,-34.0020322],[25.0476316,-33.9994588],[24.954724,-34.0043594],[24.9496586,-34.1010363],[24.8770358,-34.1506456],[24.8762914,-34.2005281],[24.8532574,-34.2189562],[24.7645287,-34.2017946],[24.5001356,-34.2003254],[24.3486733,-34.1163824],[24.1988819,-34.1019039],[23.9963377,-34.0514443],[23.8017509,-34.0524332],[23.7493589,-34.0111855],[23.4973536,-34.009014],[23.4155191,-34.0434586],[23.4154284,-34.1140433],[22.9000853,-34.0993009],[22.8412418,-34.0547911],[22.6470321,-34.0502627],[22.6459843,-34.0072768],[22.570016,-34.0064081],[22.5050499,-34.0645866],[22.2519968,-34.0645866],[22.2221334,-34.1014701],[22.1621197,-34.1057019],[22.1712431,-34.1521766],[22.1576913,-34.2180897],[22.0015632,-34.2172232],[21.9496952,-34.3220009],[21.8611528,-34.4007145],[21.5614708,-34.4020114],[21.5468011,-34.3661242],[21.501744,-34.3669892],[21.5006961,-34.4020114],[21.4194886,-34.4465247],[21.1978706,-34.4478208],[21.0988193,-34.3991325],[21.0033746,-34.3753872],[20.893192,-34.3997115],[20.8976647,-34.4854003],[20.7446802,-34.4828092],[20.5042011,-34.486264],[20.2527197,-34.701477],[20.0803502,-34.8361855],[19.9923317,-34.8379056],[19.899074,-34.8275845],[19.8938348,-34.7936018],[19.5972963,-34.7961833],[19.3929677,-34.642015],[19.2877095,-34.6404784],[19.2861377,-34.5986563],[19.3474363,-34.5244458],[19.3285256,-34.4534372],[19.098001,-34.449981],[19.0725583,-34.3802371],[19.0023531,-34.3525593],[18.9520568,-34.3949373],[18.7975006,-34.3936403],[18.7984174,-34.1016376],[18.501748,-34.1015292],[18.4999545,-34.3616945],[18.4477325,-34.3620007],[18.4479944,-34.3522691],[18.3974362,-34.3514041],[18.3971742,-34.3022959],[18.3565705,-34.3005647],[18.3479258,-34.2020436],[18.2972095,-34.1950274],[18.2951139,-33.9937138],[18.3374474,-33.9914079],[18.3476638,-33.8492427],[18.3479258,-33.781555],[18.4124718,-33.7448849],[18.3615477,-33.6501624],[18.2992013,-33.585591],[18.2166839,-33.448872],[18.1389858,-33.3974083],[17.9473472,-33.1602647],[17.8855247,-33.0575732],[17.8485884,-32.9668505],[17.8396817,-32.8507302],[17.8396817,-32.7983384]]],"best":true},{"id":"South-Tyrol-Orthofoto2011","name":"South Tyrol Orthofoto 2011","type":"tms","template":"http://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2011_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","scaleExtent":[0,18],"polygon":[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],"terms_url":"http://geoservices.buergernetz.bz.it/geokatalog/","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0"},{"id":"South-Tyrol-Orthofoto2011-20cm","name":"South Tyrol Orthofoto 2011 (highres)","type":"wms","template":"http://geoservices.buergernetz.bz.it/geoserver/ows?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=P_BZ_OF_2011_EPSG3857,P_BZ_OF_2011_20cm_EPSG3857&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","polygon":[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],"terms_url":"http://geoservices.buergernetz.bz.it/geokatalog/","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0","description":"Orthophoto of South Tyrol from 2011 with up to 20cm resolution (larger valleys)"},{"id":"South-Tyrol-Orthofoto-2014-2015","name":"South Tyrol Orthofoto 2014/2015","type":"tms","template":"http://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2014_2015_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg","endDate":"2015-11-01T00:00:00.000Z","startDate":"2014-07-01T00:00:00.000Z","scaleExtent":[0,18],"polygon":[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],"terms_url":"http://geoservices.buergernetz.bz.it/geokatalog/","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 4.0","best":true},{"id":"South-Tyrol-Topomap","name":"South Tyrol Topomap","type":"tms","template":"http://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_BASEMAP_TOPO&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg","scaleExtent":[0,20],"polygon":[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],"terms_url":"http://geoservices.buergernetz.bz.it/geokatalog/","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano","description":"Topographical basemap of South Tyrol"},{"id":"Bern-bern2016-tms","name":"Stadt Bern 10cm (2016)","type":"tms","template":"https://mapproxy.osm.ch/tiles/bern2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","scaleExtent":[8,21],"polygon":[[[7.2943145,46.9237564],[7.2982665,46.9274715],[7.3061586,46.9309487],[7.3043338,46.9362344],[7.3068603,46.9403709],[7.3246431,46.9432765],[7.3284525,46.946409],[7.3414051,46.9460797],[7.3438454,46.9473713],[7.3434554,46.9487937],[7.3513567,46.9485481],[7.3505628,46.950213],[7.3530901,46.9519266],[7.3582028,46.9511773],[7.3685031,46.9566244],[7.3715097,46.9607339],[7.37503,46.959835],[7.3785111,46.9614686],[7.3806232,46.9654741],[7.3832097,46.9663014],[7.3937998,46.9669268],[7.4000528,46.9691779],[7.4082922,46.9686857],[7.4281713,46.9738041],[7.4327053,46.972689],[7.4353602,46.9684345],[7.4378522,46.9684302],[7.4412474,46.9767865],[7.4456893,46.9747939],[7.4483835,46.9756393],[7.4477006,46.9790125],[7.4440468,46.9780682],[7.4412738,46.9798224],[7.4506732,46.9901527],[7.4522112,46.9896803],[7.454649,46.9778182],[7.4680382,46.9758258],[7.4707923,46.969998],[7.4701907,46.9674116],[7.4781618,46.9711823],[7.4845237,46.9701571],[7.4861275,46.9679018],[7.4857945,46.9646828],[7.4784708,46.9629043],[7.4802865,46.9606768],[7.4789304,46.9587841],[7.4797786,46.9566019],[7.4770135,46.9544586],[7.4840504,46.9499938],[7.4833925,46.9451977],[7.4955563,46.9396169],[7.4935119,46.9376594],[7.4908036,46.9387617],[7.4894997,46.9368667],[7.4766667,46.9369496],[7.4781093,46.9362489],[7.4746986,46.9339187],[7.4753537,46.9329898],[7.4691047,46.9292427],[7.4707683,46.9255044],[7.4585674,46.934836],[7.4476373,46.9304297],[7.435418,46.9349668],[7.4338022,46.9331237],[7.4376403,46.9307415],[7.4146941,46.9368183],[7.413844,46.9315682],[7.4070798,46.9303824],[7.408065,46.9256296],[7.4021268,46.9241992],[7.4014835,46.9211927],[7.3875736,46.9304506],[7.3823129,46.927282],[7.3800187,46.9298929],[7.3808694,46.9324085],[7.3748669,46.9314306],[7.3748901,46.9327104],[7.368066,46.9323929],[7.3683058,46.930426],[7.3604074,46.9285884],[7.3605592,46.9272018],[7.338783,46.9245357],[7.3393683,46.9196675],[7.3274574,46.9190326],[7.3269178,46.9235974],[7.324374,46.9251891],[7.3082264,46.9222857],[7.2943145,46.9237564]]],"terms_text":"Orthophoto 2016, Vermessungsamt Stadt Bern","best":true},{"id":"Uster-2008","name":"Stadt Uster Orthophoto 2008 10cm","type":"tms","template":"https://mapproxy.osm.ch/tiles/uster/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2008-01-01T00:00:00.000Z","startDate":"2008-01-01T00:00:00.000Z","polygon":[[[8.6,47.31],[8.6,47.39],[8.77,47.39],[8.77,47.31],[8.6,47.31]]],"terms_text":"Stadt Uster Vermessung Orthophoto 2008"},{"id":"Zuerich-zh_luftbild2011-tms","name":"Stadt Zürich Luftbild 2011","type":"tms","template":"https://mapproxy.osm.ch/tiles/zh_luftbild2011/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","polygon":[[[8.4441,47.3141],[8.4441,47.4411],[8.6284,47.4411],[8.6284,47.3141],[8.4441,47.3141]]],"terms_text":"Stadt Zürich Luftbild 2011"},{"id":"Zuerich-city_map","name":"Stadtplan Zürich","type":"tms","template":"https://mapproxy.osm.ch/tiles/zh_stadtplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","polygon":[[[8.4482,47.321],[8.4482,47.4339],[8.6248,47.4339],[8.6248,47.321],[8.4482,47.321]]],"terms_text":"Stadt Zürich Open Government Data"},{"id":"stamen-terrain-background","name":"Stamen Terrain","type":"tms","template":"http://{switch:a,b,c,d}.tile.stamen.com/terrain-background/{zoom}/{x}/{y}.jpg","scaleExtent":[4,18],"terms_url":"http://maps.stamen.com/#terrain","terms_text":"Map tiles by Stamen Design, under CC BY 3.0"},{"id":"Stevns_Denmark","name":"Stevns","type":"tms","template":"http://{switch:a,b,c}.tile.openstreetmap.dk/stevns/2009/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[12.0913942,55.3491574],[12.0943104,55.3842256],[12.1573875,55.3833103],[12.1587287,55.4013326],[12.1903468,55.400558],[12.1931411,55.4364665],[12.2564251,55.4347995],[12.2547073,55.4168882],[12.3822489,55.4134349],[12.3795942,55.3954143],[12.4109213,55.3946958],[12.409403,55.3766417],[12.4407807,55.375779],[12.4394142,55.3578314],[12.4707413,55.3569971],[12.4629475,55.2672214],[12.4315633,55.2681491],[12.430045,55.2502103],[12.3672011,55.2519673],[12.3656858,55.2340267],[12.2714604,55.2366031],[12.2744467,55.272476],[12.2115654,55.2741475],[12.2130078,55.2920322],[12.1815665,55.2928638],[12.183141,55.3107091],[12.2144897,55.3100981],[12.2159927,55.3279764],[12.1214458,55.3303379],[12.1229489,55.3483291],[12.0913942,55.3491574]]],"terms_text":"Stevns Kommune"},{"id":"Surrey-Air_Survey","name":"Surrey Air Survey","type":"tms","template":"https://{switch:a,b,c}.surrey.aerial.openstreetmap.org.uk/layer/gb_surrey_aerial/{zoom}/{x}/{y}.png","endDate":"2009-01-01T00:00:00.000Z","startDate":"2007-01-01T00:00:00.000Z","scaleExtent":[8,21],"polygon":[[[-0.752478,51.0821941],[-0.7595183,51.0856254],[-0.8014342,51.1457917],[-0.8398864,51.1440686],[-0.8357665,51.1802397],[-0.8529549,51.2011266],[-0.8522683,51.2096231],[-0.8495217,51.217903],[-0.8266907,51.2403696],[-0.8120995,51.2469248],[-0.7736474,51.2459577],[-0.7544213,51.2381127],[-0.754078,51.233921],[-0.7446366,51.2333836],[-0.7430693,51.2847178],[-0.751503,51.3069524],[-0.7664376,51.3121032],[-0.7820588,51.3270157],[-0.7815438,51.3388135],[-0.7374268,51.3720456],[-0.7192307,51.3769748],[-0.6795769,51.3847961],[-0.6807786,51.3901523],[-0.6531411,51.3917591],[-0.6301385,51.3905808],[-0.6291085,51.3970074],[-0.6234437,51.3977572],[-0.613144,51.4295552],[-0.6002471,51.4459121],[-0.5867081,51.4445365],[-0.5762368,51.453202],[-0.5626755,51.4523462],[-0.547741,51.4469972],[-0.5372697,51.4448575],[-0.537098,51.4526671],[-0.5439644,51.4545926],[-0.5405312,51.4698865],[-0.5309182,51.4760881],[-0.5091172,51.4744843],[-0.5086022,51.4695657],[-0.4900628,51.4682825],[-0.4526406,51.4606894],[-0.4486924,51.4429316],[-0.4414826,51.4418616],[-0.4418259,51.4369394],[-0.4112702,51.4380095],[-0.4014855,51.4279498],[-0.3807145,51.4262372],[-0.3805428,51.4161749],[-0.3491288,51.4138195],[-0.3274994,51.4037544],[-0.3039818,51.3990424],[-0.3019219,51.3754747],[-0.309475,51.369688],[-0.3111916,51.3529669],[-0.2955704,51.3541462],[-0.2923089,51.3673303],[-0.2850991,51.3680805],[-0.2787476,51.3771891],[-0.2655297,51.3837247],[-0.2411538,51.3847961],[-0.2123147,51.3628288],[-0.2107697,51.3498578],[-0.190857,51.3502867],[-0.1542931,51.3338802],[-0.1496583,51.3057719],[-0.1074296,51.2966491],[-0.0887185,51.3099571],[-0.0878602,51.3220811],[-0.0652009,51.3215448],[-0.0641709,51.3264793],[-0.0519829,51.3263721],[-0.0528412,51.334631],[-0.0330779,51.3430876],[0.0019187,51.3376339],[0.0118751,51.3281956],[0.013935,51.2994398],[0.0202865,51.2994398],[0.0240631,51.3072743],[0.0331611,51.3086694],[0.0455207,51.30545],[0.0523872,51.2877392],[0.0616569,51.2577764],[0.0640602,51.2415518],[0.0462074,51.2126342],[0.0407142,51.2109136],[0.0448341,51.1989753],[0.0494689,51.1997283],[0.0558204,51.1944573],[0.0611419,51.1790713],[0.0623435,51.1542061],[0.0577087,51.1417146],[0.0204582,51.1365447],[-0.0446015,51.1336364],[-0.1566964,51.1352522],[-0.1572114,51.1290043],[-0.2287942,51.1183379],[-0.2473336,51.1183379],[-0.2500802,51.1211394],[-0.299347,51.1137042],[-0.3221779,51.1119799],[-0.3223496,51.1058367],[-0.3596001,51.1019563],[-0.3589135,51.1113333],[-0.3863793,51.1117644],[-0.3869014,51.1062516],[-0.4281001,51.0947174],[-0.4856784,51.0951554],[-0.487135,51.0872266],[-0.5297404,51.0865404],[-0.5302259,51.0789914],[-0.61046,51.076551],[-0.6099745,51.080669],[-0.6577994,51.0792202],[-0.6582849,51.0743394],[-0.6836539,51.0707547],[-0.6997979,51.070831],[-0.7296581,51.0744919],[-0.752478,51.0821941]]]},{"id":"Szeged_2011","name":"Szeged orthophoto 2011","type":"tms","template":"http://e.tile.openstreetmap.hu/szeged-2011-10cm/{zoom}/{x}/{y}.png","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","scaleExtent":[10,22],"polygon":[[[20.1459914,46.2281144],[20.1332261,46.2290431],[20.1258373,46.2298686],[20.122329,46.2309893],[20.1208484,46.2317537],[20.1189709,46.2335126],[20.1131237,46.2413638],[20.1120293,46.2433005],[20.1115733,46.2449996],[20.1111871,46.247092],[20.1112944,46.2487725],[20.1115948,46.2509686],[20.1122171,46.2528047],[20.1129949,46.2542681],[20.1135421,46.2553549],[20.1147705,46.2567977],[20.1352251,46.2768529],[20.1366386,46.2775055],[20.1378939,46.2780301],[20.1393932,46.2783508],[20.1408818,46.2784583],[20.1611494,46.278159],[20.1621093,46.2781579],[20.1635894,46.277702],[20.1661777,46.2761484],[20.1687795,46.2738569],[20.1696108,46.2714413],[20.1695895,46.2704465],[20.1700871,46.2704418],[20.1739897,46.2643295],[20.1766182,46.2582878],[20.1947983,46.25492],[20.1858719,46.2448077],[20.1846595,46.2453122],[20.1780371,46.2383112],[20.1781766,46.2377101],[20.1795258,46.2370961],[20.1725666,46.2300241],[20.1698349,46.2350404],[20.1687701,46.2362946],[20.1670262,46.2378475],[20.1659431,46.2387342],[20.1654408,46.2389988],[20.1654837,46.2389988],[20.1635177,46.2401383],[20.1602051,46.2412003],[20.1592684,46.241531],[20.1592684,46.2415751],[20.1583504,46.2418505],[20.1549473,46.2422869],[20.1510796,46.2351538],[20.1493804,46.232459],[20.1459914,46.2281144]]],"terms_url":"http://www.geo.u-szeged.hu/","terms_text":"SZTE TFGT - University of Szeged","best":true,"description":"Inner part of Szeged"},{"id":"teotonio_vilela","name":"Teotonio Vilela AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Teotonio%20Vilela&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.31163860301,-9.95467712399],[-36.31157895645,-9.94381824983],[-36.31144972224,-9.93197001342],[-36.31127078257,-9.92436145686],[-36.31123101819,-9.91847621012],[-36.31119125382,-9.91637081332],[-36.31140995787,-9.91323717443],[-36.31110178398,-9.90922215583],[-36.3110819018,-9.90317994983],[-36.31099243196,-9.8937883586],[-36.31089302103,-9.88420062824],[-36.31078366901,-9.87412292696],[-36.31068425808,-9.86457379995],[-36.33179913972,-9.86431915278],[-36.34001048258,-9.8643681234],[-36.34780429953,-9.86425059389],[-36.35916696889,-9.86420162324],[-36.37046999169,-9.86404491714],[-36.38447699181,-9.86385882853],[-36.40163531841,-9.86364335739],[-36.40221190181,-9.92250090776],[-36.40249025242,-9.9317741712],[-36.40258966335,-9.94183051783],[-36.40248031132,-9.94803846834],[-36.402659251,-9.95369797972],[-36.38550092439,-9.95384485155],[-36.38282677036,-9.95392318316],[-36.37095710525,-9.95399172331],[-36.36231829539,-9.95422671799],[-36.34746630237,-9.95421692655],[-36.33287277777,-9.9544617125],[-36.32909516241,-9.95455962683],[-36.32089376064,-9.95458900112],[-36.31163860301,-9.95467712399]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"tnris.org","name":"Texas Orthophoto","type":"tms","template":"https://txgi.tnris.org/login/path/ecology-fiona-poem-romeo/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=texas&STYLE=&FORMAT=image/png&tileMatrixSet=0to20&tileMatrix=0to20:{zoom}&tileRow={y}&tileCol={x}","startDate":"2012-01-01T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[-99.9985439,34.5601834],[-95.55654502453,33.99257450647],[-93.89679027134,33.61039304449],[-93.98468089634,32.04103124103],[-93.41613841587,31.02505269211],[-93.74531484297,29.57268254375],[-96.50492070332,28.23158511753],[-97.36942054453,26.95467452634],[-97.04866958924,25.80530249434],[-99.0734177889,26.32559221139],[-100.76599193149,29.02531904433],[-102.3315436893,29.8433892263],[-103.13354564242,28.88112103669],[-104.2887874222,29.28831477845],[-104.7269783935,29.94815782859],[-104.72696778796,30.23535241761],[-106.53450082091,31.78456647831],[-106.75767043939,31.78457253947],[-106.75766067978,32.04385536686],[-106.61848436611,32.04385159755],[-103.11949492759,32.04375683439],[-103.09544343487,36.50045758762],[-103.05798056071,36.54268645422],[-100.00042146824,36.54222227302],[-99.9985439,34.5601834]]],"terms_url":"https://tnris.org/maps-and-data/online-mapping-services/","terms_text":"Texas Natural Resources Information System"},{"id":"tf-landscape","name":"Thunderforest Landscape","type":"tms","template":"https://{switch:a,b,c}.tile.thunderforest.com/landscape/{zoom}/{x}/{y}.png","scaleExtent":[0,22],"terms_url":"http://www.thunderforest.com/terms/","terms_text":"Maps © Thunderforest, Data © OpenStreetMap contributors"},{"id":"US-TIGER-Roads-2017","name":"TIGER Roads 2017","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmapus/cj8dftc3q1ecn2tnx9qhwyj0c/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcHVzIiwiYSI6ImNpcnF4Ym43dDBoOXZmYW04bWhlNWdrY2EifQ.4SFexuTUuKkZeerO3dgtmw","endDate":"2017-01-01T00:00:00.000Z","startDate":"2017-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[-124.7617886,48.4130148],[-124.6059492,45.90245],[-124.9934269,40.0557614],[-122.5369737,36.8566086],[-119.9775867,33.0064099],[-117.675935,32.4630223],[-114.8612307,32.4799891],[-111.0089311,31.336015],[-108.1992687,31.3260016],[-108.1871123,31.7755116],[-106.5307225,31.7820947],[-106.4842052,31.7464455],[-106.429317,31.7520583],[-106.2868855,31.5613291],[-106.205248,31.446704],[-105.0205259,30.5360988],[-104.5881916,29.6997856],[-103.2518856,28.8908685],[-102.7173632,29.3920567],[-102.1513983,29.7475702],[-101.2552871,29.4810523],[-100.0062436,28.0082173],[-99.2351068,26.4475962],[-98.0109067,25.9928035],[-97.435024,25.8266009],[-96.9555259,25.9821589],[-96.8061741,27.7978168],[-95.5563349,28.5876066],[-93.7405308,29.4742093],[-90.9028456,28.8564513],[-88.0156706,28.9944338],[-88.0162494,30.0038862],[-86.0277506,30.0047454],[-84.0187909,28.9961781],[-81.9971976,25.9826768],[-81.9966618,25.0134917],[-84.0165592,25.0125783],[-84.0160068,24.0052745],[-80.0199985,24.007096],[-79.8901116,26.8550713],[-80.0245309,32.0161282],[-75.4147385,35.0531894],[-74.0211163,39.5727927],[-72.002019,40.9912464],[-69.8797398,40.9920457],[-69.8489304,43.2619916],[-66.9452845,44.7104937],[-67.7596632,47.0990024],[-69.2505131,47.5122328],[-70.4614886,46.2176574],[-71.412273,45.254878],[-72.0222508,45.0059846],[-75.0798841,44.9802854],[-76.9023061,43.8024568],[-78.7623935,43.6249578],[-79.15798,43.4462589],[-79.0060087,42.8005317],[-82.662475,41.6889458],[-82.1761642,43.588535],[-83.2813977,46.138853],[-87.5064535,48.0142702],[-88.3492194,48.2963271],[-89.4353148,47.9837822],[-93.9981078,49.0067142],[-95.1105379,49.412004],[-96.0131199,49.0060547],[-123.3228926,49.0042878],[-123.2275233,48.1849927],[-124.7617886,48.4130148]],[[-160.5787616,22.5062947],[-160.5782192,21.4984647],[-158.7470604,21.2439843],[-157.5083185,20.995803],[-155.9961942,18.7790194],[-154.6217803,18.7586966],[-154.6890176,19.8805722],[-156.2927622,21.2225888],[-157.5047384,21.9984962],[-159.0093692,22.5070181],[-160.5787616,22.5062947]],[[-167.1572,68.722],[-164.8554,67.0255],[-168.0022,66.0018],[-169.0087,66.0015],[-169.0075,64.9988],[-172.5143,63.8767],[-173.8197,59.7401],[-178.0001,52.2446],[-177.9993,51.2554],[-171.4689,51.8215],[-162.4025,53.9567],[-159.0076,55.0025],[-158.0191,55.0028],[-151.9963,55.9992],[-151.5003,57.9988],[-151.5013,58.992],[-138.516,58.9953],[-138.515,57.9986],[-133.9948,54.0032],[-130.0044,54.0043],[-130.0071,57.0001],[-131.9759,56.9995],[-135.123,59.7566],[-138.0072,59.9918],[-139.1716,60.4127],[-140.9874,61.0119],[-140.9684,69.9535],[-156.1769,71.5633],[-160.4136,70.7398],[-163.0218,69.9707],[-164.9717,68.9947],[-167.1572,68.722]],[[-68.2,17.8],[-64.32,17.38],[-64.64,18.36],[-65.33,18.57],[-67.9,18.67],[-68.2,17.8]],[[146.2,15.4],[145.7,15.6],[144.2,13.2],[144.8,12.9],[146.2,15.4]],[[179.99,52.2],[172,53.5],[172,52.5],[179.99,51],[179.99,52.2]]],"description":"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAABLCAMAAAAf8MQEAAAAAXNSR0IArs4c6QAAAt9QTFRF////q6ytVFplAAAB0owMmWYJRS4EZWx3o6OjYmNl7JoE/agGdE0GBgUA9aQOzIkMKhwCFA0BJBQBNBUAdHV15OXpUlVYGhECkWEJ5ZkOsXYKbkoH/64Qu30LgVYImpqbSTEEa0gG8qIOVTkFEgwBHhQCqnEKMSEE/80So20Kck0HCQYB/7IOMzM0uru+Q0tYRCQA/8ER/9oT/+EUlGMJflUI3ZQN/7kQ/60PaUYGZUMG/7EQ/8oSJhkCil0IOiYDMB8CfH1+yYYM4pcOiFsI2ZIN1Y4N/8URIRYCi4uLa3B5NSQD/74RzooM7qAO/7YQ6+vsiloD+6gP/aoP6p0OrnQLnWkKm2kJWz0FUjYFMSED/9QTjV4JdHZ69ff77J4ODAkBX0AGAAEL+fr7S1BVBQIAtXkLhVkIPikExIMMTjUEFhYXysrLxcXF+qcPwYEM1pENHSIqPSkDLR4Dck0I/qoQRzAEe1MH/+gVWzQAg4SFJCQlelIIDgkBYUEGQiwESElLLSADSi0B/9ESDAIArrS9v4ALTDIEDAwMxsvVklsAHRMBjmAJP0JHAAETdEUAhVcISVRlxoUMd1AI/7sOz9HW1IoChFkHomwK/+UUYj4D96UQZjYAGiQ4OURXg4eMk5mm/6wJwH8M3uHmp3AK/90UNDtJLhQAFxABGQ0Bg1gIglUEJjNJl14FsnMBlmUJ0YcA2drbi5WmFQIAi1MAa2trbHaHW1tck5KS8fL0fEoAOxwAJCw7/7YFUiwAgU0AJQwA6ZcCJy9BDRcrsLCx/8oU2t3j7/H2ChEfu73DAAAA1NXXAAAGWmJtEx42qWoAVDkEzIQAa0YEo2QAAw4lfIGNhY2bdnyIm2QCp6y2eoWXLTA5w34AjZKbRE1hdn+RrHEFxoAAu8DGY26BAQocnZ+kvHkB5JQB/8QOhIqVORcATCYA24wA+6YK8JsCJQYAn6Wu0YsMnai8hY+hU2B4tSvHUAAACMpJREFUWMO1mP9TFPcZx2nfd9do7xutySG3dznuzuOOQ8PCwd65C2eFY69h6ya7CMuXBDRzcNDksOJhUwkYz5IYLFaKDco41qqNEztmnMwk1aaNbZN0MtpYG5O06ZdfajWTpJl2pn9An4WxxS9HhZl+fgBm9/P6fJ7P87yf5/ksBQX/j/E50DAY9Z/4wuLQe+8jxlFYVOwE44LZvRK4fxE0UAJ4jb5VAVtpMIRwuQNYfdf4AxVsFRtBdU00hmJeqEVdHOvwlbvFMTciBpRI+Bo20EEgVzcAd0U/9HAgpMhqzcZwK6CF29pLw52wqc0mPPLoXdD6zqu0Lo5d3yKDQRws6oH1XZuAzY/dheWmysyACSFRllaVJlsAPlMOxB1xxPA/PLDmG/BstUr127IZUzIqbkHNkAN1omzXTdqeRiG+tQC9A0/CJBfpcwetoVR9R6Kp0/dUWuiKAz79aWv+/XfO+jsZ634asK30AKSWGIaJ4HZhDo/kENv9UJ5TN40lakK9ydFamvgMsToPsAPgurdRDPQlWlBU+Owd+T3PiUILbWGvNgHjsPSjv2+EoLJKcP4e3RB91O4FvnMHej84toxeGyabBmwDGN+O70HzFfP0yMbCC4SAUYDWmdp9u34O4PtsDI5Jrvr5Mne1PIyw3eEaD/T1kT1sJQ4msRFwYogM6ANuM39iX/AQDgXZ5JxgOZu/xj+JtK21jk7ct7EqiRkfRsIRwNMP5+Fb6B8cFYubpawv1uCtslVSlsHLS05vO1iWLDY3lg/C20+OYIF2IHOL+ccg8TKbjZaJuaJqOHs6arR6JSqFGFg3TQNlW8rjsJrQDwm9FoycmIv+ih3ACh3/0QucxCckZkCKztoeEiSecEkoMWKMnG7LJuAdRRoyRANkfdKNzNRNxxTsibWIqYzqCoTpYXuQEeowkPG3wwRXW5VpAwKmMFxuFAWRQjc7TdufrmRnrdj8XE4TONYFWZ4k9iXydkDowTQnMZ0mlPKdnMeKuMmPlSrSHTRjYwA49phZrMQZ3Qq2R5YVhn1KDFJ4kNAVMoi1ckYN1rGFEbfEdgv2dE0EouQARy9FoOKBFXAU60X02NEOcw3NVQV6czCTHG94CbBwIqdGpZFOuFGbA59ubx4eFYm14ZEClEntN05e8MoJN+rlDLmKzErANxwv1fOjbEyWZlAMirVs92IwGlo/QMapqVcL8MWDNGHvLH52ohOeRjnDFgPFlXDSU8/W0XEqM8nK7RYh7Ca8uhnJDm+jx5jE6Ln9FKkAUvaD53T8CaDzRE8Hh0ZPMAq+3oxefqMJRoajpG335ygBrblxnAxuiCD94m7fdjxesAbdghdJHV/2c8jBcc0yXtUiaJCmqK4OdoqbMCC6KfMwSllirQFacj1j8KeQntRt3nnoYN/c2Ze9PtrB+4GwVeCc9TwH11DEmFMQiDbDjG46ETZQs1rZ0S7BCL/mmqXO/+JLc5p79s1YM47XFrfqxUhkfWVubHAIAd2xiZawNQuxT49kLob29iJKWnLRbMG+94nH9V+OSbcBdm0wRXNKmnPF6ouUGV3f1PGUrKsgJIdR18UgPBLTO0aVpr01L18KzU4NTc7C7tI2ItLTQoikYTXPxvU4EOwZPlkNC6uhpQso7EXQq/36psrOhtHkKBn0wYO3d+qaonlvXEDWAj/6EqK+zo7XUEa1IDXW6xAaNl38zXxcgik+UtpmxKqKX94DE2ewUkK/E49SW4NdFB06f2a2DDcLZs1VFrv0zs34KLzr0hFYfovVGFYZxoz7cBprSRHoEeM6eXbN/fcgIAvlI/EILuO/3WoZHTUONY3Y8+lEEGAURYnYZYx4U0X4Lorm6tcOPUbANjzdNIKjeGsezrqTiAyhtgpolBElfEuTEKqxj44QN2rpJdXPXg/owvK7cX2td6/Mv8XkfjgUqd1KSUJvZnFV1mSqkW6kZutmrpky8Kbe/948178/xaiiw4zCetP2QjtkJZORIj0Ry0mEbaU011pt6V7obnBJUrkQbgyOZaVgnZX+Mpav6ySbPP9J7TzdbYrhRa3Jjlg1ySzV0BKZJnUHOlnomyvU32Ilnrfz4h9gisVYTSkqu1BtmN2rl0qHik4KhLvDI5QrM9xC2/+exyRrRS8LbWiY6G7VYxwMIkR4WWWTOKOoDB7Mi/8BDZDkLXpLHtyme8EWccOZ8AVyJPtck0ixmLk0sdCVxs7yzRjWW2wf07+3z0ZZ7YGLcEZO8KQERXz5lfz4xGmJb4wX+Xyo9ett3I2v6yHrgka9S9VxaaHtJ96lLicaSTU9VYZG24k/oWD16r+8vAsBSZkb5c0LOO8ClgciHMcxYhqXL5/CH+cer97K6xpmIryiqsG/5udfO+8KScqMKrXiytWrf7ux6jVRt5zr4fSfFxdw3ubGEZuiKswUblGUDgbKyQge+aVTsCc446SdGEH74GZFkd9ln6GcVtl1eAFclHyMzPNad2rzvAVwSlLUzFopS0tfX8B5+1nOx/cG3M8EPzo0b9oeXCeTtGyUlJMfP4Bz/EqXjeMMgotjH56fzuD6tspRNRpVy/F+Pse9LnBBF8sFj7O8N7j8zHzv5VrAz6iGAT748Yd58Cv7xOo6p1RnGJaCYJ+c/+rwiTaQ+6ZbZSEv/m0IljdlH0JO/fr451uu+BGKmllWrl/M/w3xCfYJWuq0Gdd+9cYt6VQoU+wMvPJpfs8f+fyDmz/efceylGI4ync+OlPx48V/TuKnnKpEmSwF7tzEEvCfZenkdQlS3WdYNP0e5BlFifbLC8om7zg7UcHyKlPPqNHs3/GPRfOP4vQ/ZTWqMusZ4csfLv7wB64Osnrf8qjiUvCCf73AKiov+fjMYr/k53x/jVNVmTUW18SxFPwzWcnKnDIsn1oSvlzqoc+FrNzF7l4K/hF9PNazHNtbWbEU/Px1tLjlkYSx45Ol/R+lQpROYoDjtKXhn0qyBQPeNiwNPxeUUFupYYn4q37/ha8eOfKTs7e9+TeLgDxdoqv76wAAAABJRU5ErkJggg==","overlay":true},{"id":"tirol.gv.at-contourlines","name":"Tiris: contour lines","type":"wms","template":"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Hoehenschichtlinien 20m&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[15,22],"polygon":[[[10.4399766,47.5976781],[10.4788646,47.5992486],[10.5027725,47.5865589],[10.4837986,47.5597936],[10.513122,47.5434951],[10.5717689,47.5458237],[10.570044,47.5621216],[10.6010923,47.5807415],[10.6390403,47.5691048],[10.7080366,47.5702686],[10.7114864,47.5493166],[10.7684083,47.5504808],[10.7856574,47.5260267],[10.8960515,47.5504808],[10.9357244,47.5236971],[10.9339995,47.5050569],[10.8908768,47.4957344],[10.9512486,47.4910724],[10.9546984,47.4677567],[11.0029958,47.4327637],[10.9909215,47.4082547],[11.1030405,47.4047525],[11.1151148,47.4199271],[11.2099847,47.4455971],[11.2686316,47.4409308],[11.2669067,47.4105894],[11.2945052,47.4420974],[11.3307283,47.4607599],[11.3824755,47.4584275],[11.3704012,47.4759184],[11.4393975,47.5306855],[11.466996,47.5178728],[11.5739403,47.5236971],[11.5756652,47.5586296],[11.598089,47.5912123],[11.6343121,47.6063331],[11.6688102,47.5947021],[11.7930036,47.602844],[11.8395761,47.5923756],[11.8499255,47.6109847],[12.0068922,47.6365615],[12.0362156,47.6249373],[12.0776134,47.6272623],[12.1086617,47.6191242],[12.1949071,47.6226121],[12.1535093,47.6876775],[12.158684,47.7166984],[12.1811078,47.7120562],[12.2190558,47.7248214],[12.2414796,47.7538216],[12.272528,47.7515022],[12.2846023,47.7317829],[12.2656283,47.695805],[12.3363495,47.7108955],[12.3760224,47.695805],[12.4432938,47.7027704],[12.4536433,47.692322],[12.4536433,47.6749032],[12.5105652,47.6319121],[12.5312641,47.6458591],[12.589911,47.6342369],[12.5795615,47.6109847],[12.6658069,47.5947021],[12.6796062,47.5749235],[12.645108,47.5504808],[12.6675318,47.5318501],[12.6847809,47.5038917],[12.7123795,47.4817474],[12.6675318,47.4560949],[12.6416582,47.4595937],[12.6502828,47.443264],[12.6209593,47.4070873],[12.5743868,47.3860701],[12.5502381,47.3965797],[12.4915913,47.3720539],[12.5088403,47.3510227],[12.4881414,47.3206295],[12.4346693,47.322968],[12.4139704,47.3042567],[12.3639481,47.3089351],[12.3122008,47.3276449],[12.2708031,47.298408],[12.177658,47.2937286],[12.1483346,47.2843686],[12.1172863,47.2995778],[12.0983123,47.2750069],[12.1259108,47.2504245],[12.0965874,47.1977096],[12.1103866,47.1484618],[12.141435,47.109735],[12.1379852,47.0897738],[12.1500595,47.0756791],[12.0051672,47.0439523],[11.9206468,47.0298454],[11.8309516,46.9910324],[11.7878289,46.9863258],[11.7740296,46.9674955],[11.7309069,46.9651413],[11.7067582,46.9898558],[11.6429366,46.994562],[11.6118883,47.0051495],[11.5325425,46.9780884],[11.4928696,47.0086782],[11.4445722,46.9674955],[11.4048993,46.9616097],[11.3445276,46.9863258],[11.2030851,46.9569006],[11.1754866,46.9616097],[11.1772115,46.9439484],[11.1461632,46.922747],[11.1254643,46.922747],[11.1082152,46.9038944],[11.1151148,46.8885717],[11.0823416,46.853195],[11.0961408,46.8236966],[11.0512932,46.8024477],[11.0236947,46.762288],[10.9184753,46.7705586],[10.8839772,46.7575613],[10.8408545,46.7729214],[10.8236054,46.7693772],[10.7908322,46.7894581],[10.756334,46.778828],[10.7252857,46.7906391],[10.7477095,46.8272372],[10.6942373,46.8449371],[10.6735384,46.869707],[10.6079919,46.853195],[10.5545198,46.8272372],[10.5200216,46.8390378],[10.4682744,46.8366779],[10.4510253,46.8814982],[10.475174,46.9321709],[10.4130773,46.9557232],[10.3941034,46.9886791],[10.3665048,46.9804421],[10.3389063,46.9474811],[10.3285569,46.9180345],[10.2975085,46.9133215],[10.2595605,46.9251032],[10.2388617,46.8626311],[10.1664155,46.8390378],[10.1353672,46.8472966],[10.1319174,46.8720655],[10.1060438,46.886214],[10.0922445,46.9274592],[10.1250177,46.952191],[10.1457166,47.0004442],[10.1129434,47.0251423],[10.1526163,47.0498291],[10.1301925,47.0627556],[10.1336423,47.0909482],[10.1595159,47.126168],[10.2009137,47.1425959],[10.1922891,47.2000536],[10.2095382,47.2129438],[10.1871144,47.2398857],[10.2009137,47.2562785],[10.1681404,47.2633024],[10.1681404,47.2808581],[10.2026386,47.2913887],[10.2440364,47.2890488],[10.3337316,47.3206295],[10.3889286,47.3907413],[10.4148022,47.3942444],[10.4562,47.436264],[10.4475755,47.4817474],[10.419977,47.5050569],[10.4424008,47.5551374],[10.4130773,47.5714324],[10.4399766,47.5976781]],[[12.401896,47.1601916],[12.3570484,47.1390761],[12.3501488,47.1120829],[12.3104759,47.107387],[12.2552789,47.0721548],[12.2138811,47.0592305],[12.2000818,47.0263181],[12.1448848,47.0310212],[12.1155613,47.007502],[12.1362602,46.9592552],[12.1673086,46.9357044],[12.1431599,46.9109649],[12.1897324,46.9003588],[12.2173309,46.8661692],[12.2552789,46.8838562],[12.2742529,46.8826772],[12.2984016,46.8343179],[12.2759778,46.8201557],[12.2794276,46.7776467],[12.3501488,46.77174],[12.3811972,46.7150029],[12.4432938,46.6842454],[12.5140151,46.6700437],[12.5657623,46.6487342],[12.6295839,46.6534704],[12.70203,46.6534704],[12.7037549,46.6984434],[12.7296285,46.7008093],[12.7227289,46.7374685],[12.8020747,46.7492887],[12.8538219,46.744561],[12.9038442,46.77174],[12.9279929,46.7599247],[12.9573164,46.7764654],[12.9797402,46.7977246],[12.8952197,46.8331378],[12.8952197,46.8484763],[12.8451974,46.8638104],[12.8469223,46.9156781],[12.7968999,46.930993],[12.7882754,46.9474811],[12.7486025,46.9686726],[12.7365282,46.9969149],[12.7813758,47.0416014],[12.7624018,47.0510043],[12.7141044,47.0451277],[12.7106545,47.0780285],[12.6226842,47.126168],[12.5692121,47.1414227],[12.551963,47.1332091],[12.5260894,47.154327],[12.4829667,47.1648828],[12.4605429,47.1484618],[12.4346693,47.1578459],[12.4191451,47.1437691],[12.401896,47.1601916]]],"terms_text":"tiris.tirol.gv.at","icon":"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{"id":"tirol.gv.at-DGM","name":"Tiris: DGM (Terrain model)","type":"wms","template":"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image Schummerung_Gelaendemodell&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[10.4399766,47.5976781],[10.4788646,47.5992486],[10.5027725,47.5865589],[10.4837986,47.5597936],[10.513122,47.5434951],[10.5717689,47.5458237],[10.570044,47.5621216],[10.6010923,47.5807415],[10.6390403,47.5691048],[10.7080366,47.5702686],[10.7114864,47.5493166],[10.7684083,47.5504808],[10.7856574,47.5260267],[10.8960515,47.5504808],[10.9357244,47.5236971],[10.9339995,47.5050569],[10.8908768,47.4957344],[10.9512486,47.4910724],[10.9546984,47.4677567],[11.0029958,47.4327637],[10.9909215,47.4082547],[11.1030405,47.4047525],[11.1151148,47.4199271],[11.2099847,47.4455971],[11.2686316,47.4409308],[11.2669067,47.4105894],[11.2945052,47.4420974],[11.3307283,47.4607599],[11.3824755,47.4584275],[11.3704012,47.4759184],[11.4393975,47.5306855],[11.466996,47.5178728],[11.5739403,47.5236971],[11.5756652,47.5586296],[11.598089,47.5912123],[11.6343121,47.6063331],[11.6688102,47.5947021],[11.7930036,47.602844],[11.8395761,47.5923756],[11.8499255,47.6109847],[12.0068922,47.6365615],[12.0362156,47.6249373],[12.0776134,47.6272623],[12.1086617,47.6191242],[12.1949071,47.6226121],[12.1535093,47.6876775],[12.158684,47.7166984],[12.1811078,47.7120562],[12.2190558,47.7248214],[12.2414796,47.7538216],[12.272528,47.7515022],[12.2846023,47.7317829],[12.2656283,47.695805],[12.3363495,47.7108955],[12.3760224,47.695805],[12.4432938,47.7027704],[12.4536433,47.692322],[12.4536433,47.6749032],[12.5105652,47.6319121],[12.5312641,47.6458591],[12.589911,47.6342369],[12.5795615,47.6109847],[12.6658069,47.5947021],[12.6796062,47.5749235],[12.645108,47.5504808],[12.6675318,47.5318501],[12.6847809,47.5038917],[12.7123795,47.4817474],[12.6675318,47.4560949],[12.6416582,47.4595937],[12.6502828,47.443264],[12.6209593,47.4070873],[12.5743868,47.3860701],[12.5502381,47.3965797],[12.4915913,47.3720539],[12.5088403,47.3510227],[12.4881414,47.3206295],[12.4346693,47.322968],[12.4139704,47.3042567],[12.3639481,47.3089351],[12.3122008,47.3276449],[12.2708031,47.298408],[12.177658,47.2937286],[12.1483346,47.2843686],[12.1172863,47.2995778],[12.0983123,47.2750069],[12.1259108,47.2504245],[12.0965874,47.1977096],[12.1103866,47.1484618],[12.141435,47.109735],[12.1379852,47.0897738],[12.1500595,47.0756791],[12.0051672,47.0439523],[11.9206468,47.0298454],[11.8309516,46.9910324],[11.7878289,46.9863258],[11.7740296,46.9674955],[11.7309069,46.9651413],[11.7067582,46.9898558],[11.6429366,46.994562],[11.6118883,47.0051495],[11.5325425,46.9780884],[11.4928696,47.0086782],[11.4445722,46.9674955],[11.4048993,46.9616097],[11.3445276,46.9863258],[11.2030851,46.9569006],[11.1754866,46.9616097],[11.1772115,46.9439484],[11.1461632,46.922747],[11.1254643,46.922747],[11.1082152,46.9038944],[11.1151148,46.8885717],[11.0823416,46.853195],[11.0961408,46.8236966],[11.0512932,46.8024477],[11.0236947,46.762288],[10.9184753,46.7705586],[10.8839772,46.7575613],[10.8408545,46.7729214],[10.8236054,46.7693772],[10.7908322,46.7894581],[10.756334,46.778828],[10.7252857,46.7906391],[10.7477095,46.8272372],[10.6942373,46.8449371],[10.6735384,46.869707],[10.6079919,46.853195],[10.5545198,46.8272372],[10.5200216,46.8390378],[10.4682744,46.8366779],[10.4510253,46.8814982],[10.475174,46.9321709],[10.4130773,46.9557232],[10.3941034,46.9886791],[10.3665048,46.9804421],[10.3389063,46.9474811],[10.3285569,46.9180345],[10.2975085,46.9133215],[10.2595605,46.9251032],[10.2388617,46.8626311],[10.1664155,46.8390378],[10.1353672,46.8472966],[10.1319174,46.8720655],[10.1060438,46.886214],[10.0922445,46.9274592],[10.1250177,46.952191],[10.1457166,47.0004442],[10.1129434,47.0251423],[10.1526163,47.0498291],[10.1301925,47.0627556],[10.1336423,47.0909482],[10.1595159,47.126168],[10.2009137,47.1425959],[10.1922891,47.2000536],[10.2095382,47.2129438],[10.1871144,47.2398857],[10.2009137,47.2562785],[10.1681404,47.2633024],[10.1681404,47.2808581],[10.2026386,47.2913887],[10.2440364,47.2890488],[10.3337316,47.3206295],[10.3889286,47.3907413],[10.4148022,47.3942444],[10.4562,47.436264],[10.4475755,47.4817474],[10.419977,47.5050569],[10.4424008,47.5551374],[10.4130773,47.5714324],[10.4399766,47.5976781]],[[12.401896,47.1601916],[12.3570484,47.1390761],[12.3501488,47.1120829],[12.3104759,47.107387],[12.2552789,47.0721548],[12.2138811,47.0592305],[12.2000818,47.0263181],[12.1448848,47.0310212],[12.1155613,47.007502],[12.1362602,46.9592552],[12.1673086,46.9357044],[12.1431599,46.9109649],[12.1897324,46.9003588],[12.2173309,46.8661692],[12.2552789,46.8838562],[12.2742529,46.8826772],[12.2984016,46.8343179],[12.2759778,46.8201557],[12.2794276,46.7776467],[12.3501488,46.77174],[12.3811972,46.7150029],[12.4432938,46.6842454],[12.5140151,46.6700437],[12.5657623,46.6487342],[12.6295839,46.6534704],[12.70203,46.6534704],[12.7037549,46.6984434],[12.7296285,46.7008093],[12.7227289,46.7374685],[12.8020747,46.7492887],[12.8538219,46.744561],[12.9038442,46.77174],[12.9279929,46.7599247],[12.9573164,46.7764654],[12.9797402,46.7977246],[12.8952197,46.8331378],[12.8952197,46.8484763],[12.8451974,46.8638104],[12.8469223,46.9156781],[12.7968999,46.930993],[12.7882754,46.9474811],[12.7486025,46.9686726],[12.7365282,46.9969149],[12.7813758,47.0416014],[12.7624018,47.0510043],[12.7141044,47.0451277],[12.7106545,47.0780285],[12.6226842,47.126168],[12.5692121,47.1414227],[12.551963,47.1332091],[12.5260894,47.154327],[12.4829667,47.1648828],[12.4605429,47.1484618],[12.4346693,47.1578459],[12.4191451,47.1437691],[12.401896,47.1601916]]],"terms_text":"tiris.tirol.gv.at","icon":"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{"id":"tirol.gv.at-DOM","name":"Tiris: DOM (Surface model)","type":"wms","template":"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image Schummerung_Oberflaechenmodell&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[10.4399766,47.5976781],[10.4788646,47.5992486],[10.5027725,47.5865589],[10.4837986,47.5597936],[10.513122,47.5434951],[10.5717689,47.5458237],[10.570044,47.5621216],[10.6010923,47.5807415],[10.6390403,47.5691048],[10.7080366,47.5702686],[10.7114864,47.5493166],[10.7684083,47.5504808],[10.7856574,47.5260267],[10.8960515,47.5504808],[10.9357244,47.5236971],[10.9339995,47.5050569],[10.8908768,47.4957344],[10.9512486,47.4910724],[10.9546984,47.4677567],[11.0029958,47.4327637],[10.9909215,47.4082547],[11.1030405,47.4047525],[11.1151148,47.4199271],[11.2099847,47.4455971],[11.2686316,47.4409308],[11.2669067,47.4105894],[11.2945052,47.4420974],[11.3307283,47.4607599],[11.3824755,47.4584275],[11.3704012,47.4759184],[11.4393975,47.5306855],[11.466996,47.5178728],[11.5739403,47.5236971],[11.5756652,47.5586296],[11.598089,47.5912123],[11.6343121,47.6063331],[11.6688102,47.5947021],[11.7930036,47.602844],[11.8395761,47.5923756],[11.8499255,47.6109847],[12.0068922,47.6365615],[12.0362156,47.6249373],[12.0776134,47.6272623],[12.1086617,47.6191242],[12.1949071,47.6226121],[12.1535093,47.6876775],[12.158684,47.7166984],[12.1811078,47.7120562],[12.2190558,47.7248214],[12.2414796,47.7538216],[12.272528,47.7515022],[12.2846023,47.7317829],[12.2656283,47.695805],[12.3363495,47.7108955],[12.3760224,47.695805],[12.4432938,47.7027704],[12.4536433,47.692322],[12.4536433,47.6749032],[12.5105652,47.6319121],[12.5312641,47.6458591],[12.589911,47.6342369],[12.5795615,47.6109847],[12.6658069,47.5947021],[12.6796062,47.5749235],[12.645108,47.5504808],[12.6675318,47.5318501],[12.6847809,47.5038917],[12.7123795,47.4817474],[12.6675318,47.4560949],[12.6416582,47.4595937],[12.6502828,47.443264],[12.6209593,47.4070873],[12.5743868,47.3860701],[12.5502381,47.3965797],[12.4915913,47.3720539],[12.5088403,47.3510227],[12.4881414,47.3206295],[12.4346693,47.322968],[12.4139704,47.3042567],[12.3639481,47.3089351],[12.3122008,47.3276449],[12.2708031,47.298408],[12.177658,47.2937286],[12.1483346,47.2843686],[12.1172863,47.2995778],[12.0983123,47.2750069],[12.1259108,47.2504245],[12.0965874,47.1977096],[12.1103866,47.1484618],[12.141435,47.109735],[12.1379852,47.0897738],[12.1500595,47.0756791],[12.0051672,47.0439523],[11.9206468,47.0298454],[11.8309516,46.9910324],[11.7878289,46.9863258],[11.7740296,46.9674955],[11.7309069,46.9651413],[11.7067582,46.9898558],[11.6429366,46.994562],[11.6118883,47.0051495],[11.5325425,46.9780884],[11.4928696,47.0086782],[11.4445722,46.9674955],[11.4048993,46.9616097],[11.3445276,46.9863258],[11.2030851,46.9569006],[11.1754866,46.9616097],[11.1772115,46.9439484],[11.1461632,46.922747],[11.1254643,46.922747],[11.1082152,46.9038944],[11.1151148,46.8885717],[11.0823416,46.853195],[11.0961408,46.8236966],[11.0512932,46.8024477],[11.0236947,46.762288],[10.9184753,46.7705586],[10.8839772,46.7575613],[10.8408545,46.7729214],[10.8236054,46.7693772],[10.7908322,46.7894581],[10.756334,46.778828],[10.7252857,46.7906391],[10.7477095,46.8272372],[10.6942373,46.8449371],[10.6735384,46.869707],[10.6079919,46.853195],[10.5545198,46.8272372],[10.5200216,46.8390378],[10.4682744,46.8366779],[10.4510253,46.8814982],[10.475174,46.9321709],[10.4130773,46.9557232],[10.3941034,46.9886791],[10.3665048,46.9804421],[10.3389063,46.9474811],[10.3285569,46.9180345],[10.2975085,46.9133215],[10.2595605,46.9251032],[10.2388617,46.8626311],[10.1664155,46.8390378],[10.1353672,46.8472966],[10.1319174,46.8720655],[10.1060438,46.886214],[10.0922445,46.9274592],[10.1250177,46.952191],[10.1457166,47.0004442],[10.1129434,47.0251423],[10.1526163,47.0498291],[10.1301925,47.0627556],[10.1336423,47.0909482],[10.1595159,47.126168],[10.2009137,47.1425959],[10.1922891,47.2000536],[10.2095382,47.2129438],[10.1871144,47.2398857],[10.2009137,47.2562785],[10.1681404,47.2633024],[10.1681404,47.2808581],[10.2026386,47.2913887],[10.2440364,47.2890488],[10.3337316,47.3206295],[10.3889286,47.3907413],[10.4148022,47.3942444],[10.4562,47.436264],[10.4475755,47.4817474],[10.419977,47.5050569],[10.4424008,47.5551374],[10.4130773,47.5714324],[10.4399766,47.5976781]],[[12.401896,47.1601916],[12.3570484,47.1390761],[12.3501488,47.1120829],[12.3104759,47.107387],[12.2552789,47.0721548],[12.2138811,47.0592305],[12.2000818,47.0263181],[12.1448848,47.0310212],[12.1155613,47.007502],[12.1362602,46.9592552],[12.1673086,46.9357044],[12.1431599,46.9109649],[12.1897324,46.9003588],[12.2173309,46.8661692],[12.2552789,46.8838562],[12.2742529,46.8826772],[12.2984016,46.8343179],[12.2759778,46.8201557],[12.2794276,46.7776467],[12.3501488,46.77174],[12.3811972,46.7150029],[12.4432938,46.6842454],[12.5140151,46.6700437],[12.5657623,46.6487342],[12.6295839,46.6534704],[12.70203,46.6534704],[12.7037549,46.6984434],[12.7296285,46.7008093],[12.7227289,46.7374685],[12.8020747,46.7492887],[12.8538219,46.744561],[12.9038442,46.77174],[12.9279929,46.7599247],[12.9573164,46.7764654],[12.9797402,46.7977246],[12.8952197,46.8331378],[12.8952197,46.8484763],[12.8451974,46.8638104],[12.8469223,46.9156781],[12.7968999,46.930993],[12.7882754,46.9474811],[12.7486025,46.9686726],[12.7365282,46.9969149],[12.7813758,47.0416014],[12.7624018,47.0510043],[12.7141044,47.0451277],[12.7106545,47.0780285],[12.6226842,47.126168],[12.5692121,47.1414227],[12.551963,47.1332091],[12.5260894,47.154327],[12.4829667,47.1648828],[12.4605429,47.1484618],[12.4346693,47.1578459],[12.4191451,47.1437691],[12.401896,47.1601916]]],"terms_text":"tiris.tirol.gv.at","icon":"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{"id":"tirol.gv.at-orthofoto","name":"Tiris: orthophoto","type":"wms","template":"https://gis.tirol.gv.at/arcgis/services/Service_Public/orthofoto/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Aktuell_RGB&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[10.4399766,47.5976781],[10.4788646,47.5992486],[10.5027725,47.5865589],[10.4837986,47.5597936],[10.513122,47.5434951],[10.5717689,47.5458237],[10.570044,47.5621216],[10.6010923,47.5807415],[10.6390403,47.5691048],[10.7080366,47.5702686],[10.7114864,47.5493166],[10.7684083,47.5504808],[10.7856574,47.5260267],[10.8960515,47.5504808],[10.9357244,47.5236971],[10.9339995,47.5050569],[10.8908768,47.4957344],[10.9512486,47.4910724],[10.9546984,47.4677567],[11.0029958,47.4327637],[10.9909215,47.4082547],[11.1030405,47.4047525],[11.1151148,47.4199271],[11.2099847,47.4455971],[11.2686316,47.4409308],[11.2669067,47.4105894],[11.2945052,47.4420974],[11.3307283,47.4607599],[11.3824755,47.4584275],[11.3704012,47.4759184],[11.4393975,47.5306855],[11.466996,47.5178728],[11.5739403,47.5236971],[11.5756652,47.5586296],[11.598089,47.5912123],[11.6343121,47.6063331],[11.6688102,47.5947021],[11.7930036,47.602844],[11.8395761,47.5923756],[11.8499255,47.6109847],[12.0068922,47.6365615],[12.0362156,47.6249373],[12.0776134,47.6272623],[12.1086617,47.6191242],[12.1949071,47.6226121],[12.1535093,47.6876775],[12.158684,47.7166984],[12.1811078,47.7120562],[12.2190558,47.7248214],[12.2414796,47.7538216],[12.272528,47.7515022],[12.2846023,47.7317829],[12.2656283,47.695805],[12.3363495,47.7108955],[12.3760224,47.695805],[12.4432938,47.7027704],[12.4536433,47.692322],[12.4536433,47.6749032],[12.5105652,47.6319121],[12.5312641,47.6458591],[12.589911,47.6342369],[12.5795615,47.6109847],[12.6658069,47.5947021],[12.6796062,47.5749235],[12.645108,47.5504808],[12.6675318,47.5318501],[12.6847809,47.5038917],[12.7123795,47.4817474],[12.6675318,47.4560949],[12.6416582,47.4595937],[12.6502828,47.443264],[12.6209593,47.4070873],[12.5743868,47.3860701],[12.5502381,47.3965797],[12.4915913,47.3720539],[12.5088403,47.3510227],[12.4881414,47.3206295],[12.4346693,47.322968],[12.4139704,47.3042567],[12.3639481,47.3089351],[12.3122008,47.3276449],[12.2708031,47.298408],[12.177658,47.2937286],[12.1483346,47.2843686],[12.1172863,47.2995778],[12.0983123,47.2750069],[12.1259108,47.2504245],[12.0965874,47.1977096],[12.1103866,47.1484618],[12.141435,47.109735],[12.1379852,47.0897738],[12.1500595,47.0756791],[12.0051672,47.0439523],[11.9206468,47.0298454],[11.8309516,46.9910324],[11.7878289,46.9863258],[11.7740296,46.9674955],[11.7309069,46.9651413],[11.7067582,46.9898558],[11.6429366,46.994562],[11.6118883,47.0051495],[11.5325425,46.9780884],[11.4928696,47.0086782],[11.4445722,46.9674955],[11.4048993,46.9616097],[11.3445276,46.9863258],[11.2030851,46.9569006],[11.1754866,46.9616097],[11.1772115,46.9439484],[11.1461632,46.922747],[11.1254643,46.922747],[11.1082152,46.9038944],[11.1151148,46.8885717],[11.0823416,46.853195],[11.0961408,46.8236966],[11.0512932,46.8024477],[11.0236947,46.762288],[10.9184753,46.7705586],[10.8839772,46.7575613],[10.8408545,46.7729214],[10.8236054,46.7693772],[10.7908322,46.7894581],[10.756334,46.778828],[10.7252857,46.7906391],[10.7477095,46.8272372],[10.6942373,46.8449371],[10.6735384,46.869707],[10.6079919,46.853195],[10.5545198,46.8272372],[10.5200216,46.8390378],[10.4682744,46.8366779],[10.4510253,46.8814982],[10.475174,46.9321709],[10.4130773,46.9557232],[10.3941034,46.9886791],[10.3665048,46.9804421],[10.3389063,46.9474811],[10.3285569,46.9180345],[10.2975085,46.9133215],[10.2595605,46.9251032],[10.2388617,46.8626311],[10.1664155,46.8390378],[10.1353672,46.8472966],[10.1319174,46.8720655],[10.1060438,46.886214],[10.0922445,46.9274592],[10.1250177,46.952191],[10.1457166,47.0004442],[10.1129434,47.0251423],[10.1526163,47.0498291],[10.1301925,47.0627556],[10.1336423,47.0909482],[10.1595159,47.126168],[10.2009137,47.1425959],[10.1922891,47.2000536],[10.2095382,47.2129438],[10.1871144,47.2398857],[10.2009137,47.2562785],[10.1681404,47.2633024],[10.1681404,47.2808581],[10.2026386,47.2913887],[10.2440364,47.2890488],[10.3337316,47.3206295],[10.3889286,47.3907413],[10.4148022,47.3942444],[10.4562,47.436264],[10.4475755,47.4817474],[10.419977,47.5050569],[10.4424008,47.5551374],[10.4130773,47.5714324],[10.4399766,47.5976781]],[[12.401896,47.1601916],[12.3570484,47.1390761],[12.3501488,47.1120829],[12.3104759,47.107387],[12.2552789,47.0721548],[12.2138811,47.0592305],[12.2000818,47.0263181],[12.1448848,47.0310212],[12.1155613,47.007502],[12.1362602,46.9592552],[12.1673086,46.9357044],[12.1431599,46.9109649],[12.1897324,46.9003588],[12.2173309,46.8661692],[12.2552789,46.8838562],[12.2742529,46.8826772],[12.2984016,46.8343179],[12.2759778,46.8201557],[12.2794276,46.7776467],[12.3501488,46.77174],[12.3811972,46.7150029],[12.4432938,46.6842454],[12.5140151,46.6700437],[12.5657623,46.6487342],[12.6295839,46.6534704],[12.70203,46.6534704],[12.7037549,46.6984434],[12.7296285,46.7008093],[12.7227289,46.7374685],[12.8020747,46.7492887],[12.8538219,46.744561],[12.9038442,46.77174],[12.9279929,46.7599247],[12.9573164,46.7764654],[12.9797402,46.7977246],[12.8952197,46.8331378],[12.8952197,46.8484763],[12.8451974,46.8638104],[12.8469223,46.9156781],[12.7968999,46.930993],[12.7882754,46.9474811],[12.7486025,46.9686726],[12.7365282,46.9969149],[12.7813758,47.0416014],[12.7624018,47.0510043],[12.7141044,47.0451277],[12.7106545,47.0780285],[12.6226842,47.126168],[12.5692121,47.1414227],[12.551963,47.1332091],[12.5260894,47.154327],[12.4829667,47.1648828],[12.4605429,47.1484618],[12.4346693,47.1578459],[12.4191451,47.1437691],[12.401896,47.1601916]]],"terms_text":"tiris.tirol.gv.at","icon":"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{"id":"tirol.gv.at-orthofoto-cir","name":"Tiris: orthophoto infrared","type":"wms","template":"https://gis.tirol.gv.at/arcgis/services/Service_Public/orthofoto/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Aktuell_CIR&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[10.4399766,47.5976781],[10.4788646,47.5992486],[10.5027725,47.5865589],[10.4837986,47.5597936],[10.513122,47.5434951],[10.5717689,47.5458237],[10.570044,47.5621216],[10.6010923,47.5807415],[10.6390403,47.5691048],[10.7080366,47.5702686],[10.7114864,47.5493166],[10.7684083,47.5504808],[10.7856574,47.5260267],[10.8960515,47.5504808],[10.9357244,47.5236971],[10.9339995,47.5050569],[10.8908768,47.4957344],[10.9512486,47.4910724],[10.9546984,47.4677567],[11.0029958,47.4327637],[10.9909215,47.4082547],[11.1030405,47.4047525],[11.1151148,47.4199271],[11.2099847,47.4455971],[11.2686316,47.4409308],[11.2669067,47.4105894],[11.2945052,47.4420974],[11.3307283,47.4607599],[11.3824755,47.4584275],[11.3704012,47.4759184],[11.4393975,47.5306855],[11.466996,47.5178728],[11.5739403,47.5236971],[11.5756652,47.5586296],[11.598089,47.5912123],[11.6343121,47.6063331],[11.6688102,47.5947021],[11.7930036,47.602844],[11.8395761,47.5923756],[11.8499255,47.6109847],[12.0068922,47.6365615],[12.0362156,47.6249373],[12.0776134,47.6272623],[12.1086617,47.6191242],[12.1949071,47.6226121],[12.1535093,47.6876775],[12.158684,47.7166984],[12.1811078,47.7120562],[12.2190558,47.7248214],[12.2414796,47.7538216],[12.272528,47.7515022],[12.2846023,47.7317829],[12.2656283,47.695805],[12.3363495,47.7108955],[12.3760224,47.695805],[12.4432938,47.7027704],[12.4536433,47.692322],[12.4536433,47.6749032],[12.5105652,47.6319121],[12.5312641,47.6458591],[12.589911,47.6342369],[12.5795615,47.6109847],[12.6658069,47.5947021],[12.6796062,47.5749235],[12.645108,47.5504808],[12.6675318,47.5318501],[12.6847809,47.5038917],[12.7123795,47.4817474],[12.6675318,47.4560949],[12.6416582,47.4595937],[12.6502828,47.443264],[12.6209593,47.4070873],[12.5743868,47.3860701],[12.5502381,47.3965797],[12.4915913,47.3720539],[12.5088403,47.3510227],[12.4881414,47.3206295],[12.4346693,47.322968],[12.4139704,47.3042567],[12.3639481,47.3089351],[12.3122008,47.3276449],[12.2708031,47.298408],[12.177658,47.2937286],[12.1483346,47.2843686],[12.1172863,47.2995778],[12.0983123,47.2750069],[12.1259108,47.2504245],[12.0965874,47.1977096],[12.1103866,47.1484618],[12.141435,47.109735],[12.1379852,47.0897738],[12.1500595,47.0756791],[12.0051672,47.0439523],[11.9206468,47.0298454],[11.8309516,46.9910324],[11.7878289,46.9863258],[11.7740296,46.9674955],[11.7309069,46.9651413],[11.7067582,46.9898558],[11.6429366,46.994562],[11.6118883,47.0051495],[11.5325425,46.9780884],[11.4928696,47.0086782],[11.4445722,46.9674955],[11.4048993,46.9616097],[11.3445276,46.9863258],[11.2030851,46.9569006],[11.1754866,46.9616097],[11.1772115,46.9439484],[11.1461632,46.922747],[11.1254643,46.922747],[11.1082152,46.9038944],[11.1151148,46.8885717],[11.0823416,46.853195],[11.0961408,46.8236966],[11.0512932,46.8024477],[11.0236947,46.762288],[10.9184753,46.7705586],[10.8839772,46.7575613],[10.8408545,46.7729214],[10.8236054,46.7693772],[10.7908322,46.7894581],[10.756334,46.778828],[10.7252857,46.7906391],[10.7477095,46.8272372],[10.6942373,46.8449371],[10.6735384,46.869707],[10.6079919,46.853195],[10.5545198,46.8272372],[10.5200216,46.8390378],[10.4682744,46.8366779],[10.4510253,46.8814982],[10.475174,46.9321709],[10.4130773,46.9557232],[10.3941034,46.9886791],[10.3665048,46.9804421],[10.3389063,46.9474811],[10.3285569,46.9180345],[10.2975085,46.9133215],[10.2595605,46.9251032],[10.2388617,46.8626311],[10.1664155,46.8390378],[10.1353672,46.8472966],[10.1319174,46.8720655],[10.1060438,46.886214],[10.0922445,46.9274592],[10.1250177,46.952191],[10.1457166,47.0004442],[10.1129434,47.0251423],[10.1526163,47.0498291],[10.1301925,47.0627556],[10.1336423,47.0909482],[10.1595159,47.126168],[10.2009137,47.1425959],[10.1922891,47.2000536],[10.2095382,47.2129438],[10.1871144,47.2398857],[10.2009137,47.2562785],[10.1681404,47.2633024],[10.1681404,47.2808581],[10.2026386,47.2913887],[10.2440364,47.2890488],[10.3337316,47.3206295],[10.3889286,47.3907413],[10.4148022,47.3942444],[10.4562,47.436264],[10.4475755,47.4817474],[10.419977,47.5050569],[10.4424008,47.5551374],[10.4130773,47.5714324],[10.4399766,47.5976781]],[[12.401896,47.1601916],[12.3570484,47.1390761],[12.3501488,47.1120829],[12.3104759,47.107387],[12.2552789,47.0721548],[12.2138811,47.0592305],[12.2000818,47.0263181],[12.1448848,47.0310212],[12.1155613,47.007502],[12.1362602,46.9592552],[12.1673086,46.9357044],[12.1431599,46.9109649],[12.1897324,46.9003588],[12.2173309,46.8661692],[12.2552789,46.8838562],[12.2742529,46.8826772],[12.2984016,46.8343179],[12.2759778,46.8201557],[12.2794276,46.7776467],[12.3501488,46.77174],[12.3811972,46.7150029],[12.4432938,46.6842454],[12.5140151,46.6700437],[12.5657623,46.6487342],[12.6295839,46.6534704],[12.70203,46.6534704],[12.7037549,46.6984434],[12.7296285,46.7008093],[12.7227289,46.7374685],[12.8020747,46.7492887],[12.8538219,46.744561],[12.9038442,46.77174],[12.9279929,46.7599247],[12.9573164,46.7764654],[12.9797402,46.7977246],[12.8952197,46.8331378],[12.8952197,46.8484763],[12.8451974,46.8638104],[12.8469223,46.9156781],[12.7968999,46.930993],[12.7882754,46.9474811],[12.7486025,46.9686726],[12.7365282,46.9969149],[12.7813758,47.0416014],[12.7624018,47.0510043],[12.7141044,47.0451277],[12.7106545,47.0780285],[12.6226842,47.126168],[12.5692121,47.1414227],[12.551963,47.1332091],[12.5260894,47.154327],[12.4829667,47.1648828],[12.4605429,47.1484618],[12.4346693,47.1578459],[12.4191451,47.1437691],[12.401896,47.1601916]]],"terms_text":"tiris.tirol.gv.at","icon":"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{"id":"lu.geoportail.opendata.topo","name":"Topographical Map geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/topo/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png","endDate":"2010-07-20T00:00:00.000Z","startDate":"2013-07-19T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/cartes-topographiques-services-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"Torokbalint-orthophoto-2013","name":"Törökbálint orthophoto 2013","type":"wms","template":"http://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ORTO_2013_5CM_2013SZEPT_TAKARASSAL_512_512&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true","projection":"EPSG:3857","startDate":"2013-09-01T00:00:00.000Z","polygon":[[[18.9173064,47.4085354],[18.9169121,47.4084901],[18.9160618,47.4088477],[18.9156514,47.4090528],[18.9145812,47.4093813],[18.913849,47.4097008],[18.9137605,47.4097607],[18.9131436,47.4103815],[18.9122048,47.4109805],[18.9104104,47.4117465],[18.9093161,47.4125778],[18.9084095,47.4131731],[18.9067599,47.4144328],[18.90481,47.4156797],[18.9036191,47.4159737],[18.9031738,47.4161643],[18.9006203,47.417422],[18.9004192,47.4175527],[18.8996789,47.4179738],[18.8988796,47.4181843],[18.898142,47.4183495],[18.897517,47.4185509],[18.896656,47.4190083],[18.8958004,47.4195436],[18.8942072,47.4205001],[18.8905513,47.4220862],[18.8874319,47.4233166],[18.8855383,47.4242421],[18.8843554,47.4247611],[18.8818851,47.4255287],[18.8808498,47.4259805],[18.8801014,47.4262872],[18.879557,47.4264922],[18.8774098,47.4273787],[18.8760151,47.4278868],[18.8750763,47.4283585],[18.8728072,47.4293384],[18.8716377,47.4296795],[18.8713963,47.4300061],[18.8725872,47.4323032],[18.8727321,47.4327822],[18.8727374,47.4332431],[18.872437,47.4348216],[18.8720562,47.4352642],[18.8689126,47.4371221],[18.8656135,47.4374994],[18.864664,47.4377353],[18.8640364,47.4380909],[18.8637762,47.4379113],[18.8634034,47.4378423],[18.8630037,47.437982],[18.8519503,47.4471521],[18.8521703,47.4484689],[18.8592969,47.4538685],[18.8583876,47.4551181],[18.857768,47.4556839],[18.8571779,47.4559977],[18.8571967,47.456355],[18.860151,47.4583903],[18.8619415,47.4594978],[18.8609867,47.4607128],[18.8597904,47.4620076],[18.8592862,47.4623594],[18.8585941,47.4627221],[18.8571297,47.4633313],[18.8563411,47.4636033],[18.8562821,47.4640277],[18.857194,47.4652825],[18.8566254,47.4655073],[18.8565288,47.4658047],[18.8569285,47.4665563],[18.8583635,47.4695253],[18.8582641,47.4698029],[18.8582669,47.4699079],[18.8583834,47.4701931],[18.8584438,47.4702729],[18.8585189,47.4703264],[18.8586221,47.4703609],[18.8587348,47.4703763],[18.8589011,47.4703609],[18.8614614,47.469732],[18.8627677,47.469286],[18.8661674,47.4678491],[18.8679403,47.4665581],[18.8699654,47.4652435],[18.8708009,47.4645698],[18.8726784,47.4633259],[18.8753606,47.4611281],[18.8768734,47.4592711],[18.8894261,47.4598659],[18.8902415,47.4598804],[18.9037116,47.4553357],[18.9042733,47.455203],[18.9049332,47.4550579],[18.9054213,47.4551014],[18.9056735,47.4550543],[18.9062877,47.4547659],[18.9064835,47.4545301],[18.9065968,47.4544712],[18.9067819,47.454395],[18.9081149,47.4539888],[18.9083731,47.4539507],[18.9089048,47.4538437],[18.9095419,47.4536959],[18.9132587,47.4531717],[18.9135296,47.4532043],[18.9137201,47.4531717],[18.9138649,47.4530738],[18.9143117,47.4529381],[18.9159773,47.4529961],[18.9180668,47.4531666],[18.9184637,47.4529997],[18.9190324,47.4516141],[18.9217253,47.4508015],[18.9224602,47.450689],[18.9241768,47.4502537],[18.9275564,47.4498946],[18.9297237,47.4495064],[18.9322127,47.4492199],[18.9334694,47.4493242],[18.9392093,47.4493532],[18.9422885,47.4490339],[18.945491,47.4488961],[18.9482617,47.4487002],[18.9500347,47.4482413],[18.954699,47.4472183],[18.9574899,47.4469162],[18.958025,47.4471475],[18.9584434,47.4470822],[18.9587666,47.4466623],[18.9614488,47.4393046],[18.9636804,47.4357995],[18.9659764,47.432882],[18.9689912,47.4296958],[18.9701003,47.4270366],[18.9700922,47.4267935],[18.9669541,47.424605],[18.9573531,47.4184193],[18.9567603,47.4184012],[18.9560576,47.418129],[18.9538513,47.4173936],[18.9514447,47.4166549],[18.9513133,47.4166426],[18.9326981,47.4170333],[18.9325733,47.4169625],[18.9320101,47.4167393],[18.9314857,47.4163972],[18.9311357,47.4161158],[18.9212291,47.4109106],[18.9195742,47.4098705],[18.9192684,47.4096109],[18.9173064,47.4085354]]],"terms_url":"http://www.torokbalint.hu/","terms_text":"Törökbálint","description":"5 cm resolution bald image"},{"id":"Torokbalint-orthophoto-2015","name":"Törökbálint orthophoto 2015","type":"wms","template":"http://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=TBORTO_2015_20160218&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true","projection":"EPSG:3857","startDate":"2015-01-01T00:00:00.000Z","polygon":[[[18.9173064,47.4085354],[18.9169121,47.4084901],[18.9160618,47.4088477],[18.9156514,47.4090528],[18.9145812,47.4093813],[18.913849,47.4097008],[18.9137605,47.4097607],[18.9131436,47.4103815],[18.9122048,47.4109805],[18.9104104,47.4117465],[18.9093161,47.4125778],[18.9084095,47.4131731],[18.9067599,47.4144328],[18.90481,47.4156797],[18.9036191,47.4159737],[18.9031738,47.4161643],[18.9006203,47.417422],[18.9004192,47.4175527],[18.8996789,47.4179738],[18.8988796,47.4181843],[18.898142,47.4183495],[18.897517,47.4185509],[18.896656,47.4190083],[18.8958004,47.4195436],[18.8942072,47.4205001],[18.8905513,47.4220862],[18.8874319,47.4233166],[18.8855383,47.4242421],[18.8843554,47.4247611],[18.8818851,47.4255287],[18.8808498,47.4259805],[18.8801014,47.4262872],[18.879557,47.4264922],[18.8774098,47.4273787],[18.8760151,47.4278868],[18.8750763,47.4283585],[18.8728072,47.4293384],[18.8716377,47.4296795],[18.8713963,47.4300061],[18.8725872,47.4323032],[18.8727321,47.4327822],[18.8727374,47.4332431],[18.872437,47.4348216],[18.8720562,47.4352642],[18.8689126,47.4371221],[18.8656135,47.4374994],[18.864664,47.4377353],[18.8640364,47.4380909],[18.8637762,47.4379113],[18.8634034,47.4378423],[18.8630037,47.437982],[18.8519503,47.4471521],[18.8521703,47.4484689],[18.8592969,47.4538685],[18.8583876,47.4551181],[18.857768,47.4556839],[18.8571779,47.4559977],[18.8571967,47.456355],[18.860151,47.4583903],[18.8619415,47.4594978],[18.8609867,47.4607128],[18.8597904,47.4620076],[18.8592862,47.4623594],[18.8585941,47.4627221],[18.8571297,47.4633313],[18.8563411,47.4636033],[18.8562821,47.4640277],[18.857194,47.4652825],[18.8566254,47.4655073],[18.8565288,47.4658047],[18.8569285,47.4665563],[18.8583635,47.4695253],[18.8582641,47.4698029],[18.8582669,47.4699079],[18.8583834,47.4701931],[18.8584438,47.4702729],[18.8585189,47.4703264],[18.8586221,47.4703609],[18.8587348,47.4703763],[18.8589011,47.4703609],[18.8614614,47.469732],[18.8627677,47.469286],[18.8661674,47.4678491],[18.8679403,47.4665581],[18.8699654,47.4652435],[18.8708009,47.4645698],[18.8726784,47.4633259],[18.8753606,47.4611281],[18.8768734,47.4592711],[18.8894261,47.4598659],[18.8902415,47.4598804],[18.9037116,47.4553357],[18.9042733,47.455203],[18.9049332,47.4550579],[18.9054213,47.4551014],[18.9056735,47.4550543],[18.9062877,47.4547659],[18.9064835,47.4545301],[18.9065968,47.4544712],[18.9067819,47.454395],[18.9081149,47.4539888],[18.9083731,47.4539507],[18.9089048,47.4538437],[18.9095419,47.4536959],[18.9132587,47.4531717],[18.9135296,47.4532043],[18.9137201,47.4531717],[18.9138649,47.4530738],[18.9143117,47.4529381],[18.9159773,47.4529961],[18.9180668,47.4531666],[18.9184637,47.4529997],[18.9190324,47.4516141],[18.9217253,47.4508015],[18.9224602,47.450689],[18.9241768,47.4502537],[18.9275564,47.4498946],[18.9297237,47.4495064],[18.9322127,47.4492199],[18.9334694,47.4493242],[18.9392093,47.4493532],[18.9422885,47.4490339],[18.945491,47.4488961],[18.9482617,47.4487002],[18.9500347,47.4482413],[18.954699,47.4472183],[18.9574899,47.4469162],[18.958025,47.4471475],[18.9584434,47.4470822],[18.9587666,47.4466623],[18.9614488,47.4393046],[18.9636804,47.4357995],[18.9659764,47.432882],[18.9689912,47.4296958],[18.9701003,47.4270366],[18.9700922,47.4267935],[18.9669541,47.424605],[18.9573531,47.4184193],[18.9567603,47.4184012],[18.9560576,47.418129],[18.9538513,47.4173936],[18.9514447,47.4166549],[18.9513133,47.4166426],[18.9326981,47.4170333],[18.9325733,47.4169625],[18.9320101,47.4167393],[18.9314857,47.4163972],[18.9311357,47.4161158],[18.9212291,47.4109106],[18.9195742,47.4098705],[18.9192684,47.4096109],[18.9173064,47.4085354]]],"terms_url":"http://fototerkep.hu/","terms_text":"Fototerkep.hu","best":true,"description":"5 cm resolution bald image"},{"id":"Toulouse-Orthophotoplan-2007","name":"Toulouse - Orthophotoplan 2007","type":"wms","template":"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2007&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2007-01-01T00:00:00.000Z","startDate":"2007-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[1.1919978,43.6328791],[1.2015377,43.6329729],[1.2011107,43.6554932],[1.2227985,43.6557029],[1.2226231,43.6653353],[1.2275341,43.6653849],[1.2275417,43.6656387],[1.2337568,43.6656883],[1.2337644,43.6650153],[1.2351218,43.6650319],[1.2350913,43.6670729],[1.2443566,43.6671556],[1.2441584,43.6743925],[1.2493973,43.6744256],[1.2493973,43.6746628],[1.2555666,43.6747234],[1.2555742,43.6744532],[1.2569545,43.6744697],[1.2568782,43.678529],[1.2874873,43.6788257],[1.2870803,43.7013229],[1.3088219,43.7014632],[1.3086493,43.7127673],[1.3303262,43.7129544],[1.3300242,43.7305221],[1.3367106,43.7305845],[1.3367322,43.7312235],[1.3734338,43.7310456],[1.3735848,43.7245772],[1.4604504,43.7252947],[1.4607783,43.7028034],[1.4824875,43.7029516],[1.4829828,43.6692071],[1.5046832,43.6693616],[1.5048383,43.6581174],[1.5265475,43.6582656],[1.5266945,43.6470298],[1.548368,43.6471633],[1.5485357,43.6359385],[1.5702172,43.636082],[1.5705123,43.6135777],[1.5488166,43.6134276],[1.549097,43.5909479],[1.5707695,43.5910694],[1.5709373,43.5798341],[1.5793714,43.5798894],[1.5794782,43.5737682],[1.5809119,43.5737792],[1.5810859,43.5573794],[1.5712334,43.5573131],[1.5716504,43.5235497],[1.3984804,43.5222618],[1.3986509,43.5110113],[1.3120959,43.5102543],[1.3118968,43.5215192],[1.2902569,43.5213126],[1.2898637,43.5438168],[1.311517,43.5440133],[1.3113271,43.5552596],[1.3036924,43.5551924],[1.3036117,43.5595099],[1.2955449,43.5594317],[1.2955449,43.5595489],[1.2895595,43.5594473],[1.2892899,43.5775366],[1.2675698,43.5773647],[1.2673973,43.5886141],[1.25355,43.5885047],[1.2533774,43.5956282],[1.2518029,43.5956282],[1.2518029,43.5949409],[1.2350437,43.5947847],[1.2350437,43.5945972],[1.2239572,43.5945972],[1.2239357,43.5994708],[1.2139708,43.599299],[1.2138845,43.6046408],[1.2020647,43.6044846],[1.2019464,43.61048],[1.1924294,43.6103695],[1.1919978,43.6328791]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Toulouse-Orthophotoplan-2011","name":"Toulouse - Orthophotoplan 2011","type":"wms","template":"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2011&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[1.1135067,43.6867566],[1.1351836,43.6870842],[1.1348907,43.6983471],[1.1782867,43.6990338],[1.1779903,43.7102786],[1.1996591,43.7106144],[1.1993387,43.7218722],[1.2427356,43.7225269],[1.2424336,43.7337491],[1.2641536,43.734092],[1.2638301,43.7453588],[1.2855285,43.7456548],[1.2852481,43.756935],[1.306925,43.757231],[1.3066446,43.7684779],[1.3283431,43.7687894],[1.3280842,43.780034],[1.4367275,43.7815757],[1.4373098,43.7591004],[1.4590083,43.7593653],[1.4593318,43.7481479],[1.4810303,43.7483972],[1.4813322,43.7371777],[1.5030307,43.7374115],[1.5035915,43.7149664],[1.5253115,43.7151846],[1.5256135,43.7040057],[1.5472688,43.7042552],[1.5475708,43.6930431],[1.5692045,43.6932926],[1.5695712,43.6820316],[1.5912049,43.6822656],[1.5917441,43.6597998],[1.613421,43.6600339],[1.613723,43.6488291],[1.6353783,43.6490788],[1.6384146,43.5140731],[1.2921649,43.5094658],[1.2918629,43.5206966],[1.2702076,43.5203994],[1.2698841,43.5316437],[1.2482288,43.531331],[1.2476048,43.5537788],[1.2259628,43.5534914],[1.2256819,43.564716],[1.2039835,43.564419],[1.2033148,43.5869049],[1.1816164,43.5865611],[1.1810237,43.6090368],[1.1592821,43.6086932],[1.1589585,43.6199523],[1.1372601,43.6196244],[1.1365933,43.642094],[1.1149055,43.6417629],[1.1135067,43.6867566]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Toulouse-Orthophotoplan-2013","name":"Toulouse - Orthophotoplan 2013","type":"wms","template":"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2013&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[1.1135067,43.6867566],[1.1351836,43.6870842],[1.1348907,43.6983471],[1.1782867,43.6990338],[1.1779903,43.7102786],[1.1996591,43.7106144],[1.1993387,43.7218722],[1.2427356,43.7225269],[1.2424336,43.7337491],[1.2641536,43.734092],[1.2638301,43.7453588],[1.2855285,43.7456548],[1.2852481,43.756935],[1.306925,43.757231],[1.3066446,43.7684779],[1.3283431,43.7687894],[1.3280842,43.780034],[1.4367275,43.7815757],[1.4373098,43.7591004],[1.4590083,43.7593653],[1.4593318,43.7481479],[1.4810303,43.7483972],[1.4813322,43.7371777],[1.5030307,43.7374115],[1.5035915,43.7149664],[1.5253115,43.7151846],[1.5256135,43.7040057],[1.5472688,43.7042552],[1.5475708,43.6930431],[1.5692045,43.6932926],[1.5695712,43.6820316],[1.5912049,43.6822656],[1.5917441,43.6597998],[1.613421,43.6600339],[1.613723,43.6488291],[1.6353783,43.6490788],[1.6384146,43.5140731],[1.2921649,43.5094658],[1.2918629,43.5206966],[1.2702076,43.5203994],[1.2698841,43.5316437],[1.2482288,43.531331],[1.2476048,43.5537788],[1.2259628,43.5534914],[1.2256819,43.564716],[1.2039835,43.564419],[1.2033148,43.5869049],[1.1816164,43.5865611],[1.1810237,43.6090368],[1.1592821,43.6086932],[1.1589585,43.6199523],[1.1372601,43.6196244],[1.1365933,43.642094],[1.1149055,43.6417629],[1.1135067,43.6867566]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Toulouse-Orthophotoplan-2015","name":"Toulouse - Orthophotoplan 2015","type":"wms","template":"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2015&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[1.1135067,43.6867566],[1.1351836,43.6870842],[1.1348907,43.6983471],[1.1782867,43.6990338],[1.1779903,43.7102786],[1.1996591,43.7106144],[1.1993387,43.7218722],[1.2427356,43.7225269],[1.2424336,43.7337491],[1.2641536,43.734092],[1.2638301,43.7453588],[1.2855285,43.7456548],[1.2852481,43.756935],[1.306925,43.757231],[1.3066446,43.7684779],[1.3283431,43.7687894],[1.3280842,43.780034],[1.4367275,43.7815757],[1.4373098,43.7591004],[1.4590083,43.7593653],[1.4593318,43.7481479],[1.4810303,43.7483972],[1.4813322,43.7371777],[1.5030307,43.7374115],[1.5035915,43.7149664],[1.5253115,43.7151846],[1.5256135,43.7040057],[1.5472688,43.7042552],[1.5475708,43.6930431],[1.5692045,43.6932926],[1.5695712,43.6820316],[1.5912049,43.6822656],[1.5917441,43.6597998],[1.613421,43.6600339],[1.613723,43.6488291],[1.6353783,43.6490788],[1.6384146,43.5140731],[1.2921649,43.5094658],[1.2918629,43.5206966],[1.2702076,43.5203994],[1.2698841,43.5316437],[1.2482288,43.531331],[1.2476048,43.5537788],[1.2259628,43.5534914],[1.2256819,43.564716],[1.2039835,43.564419],[1.2033148,43.5869049],[1.1816164,43.5865611],[1.1810237,43.6090368],[1.1592821,43.6086932],[1.1589585,43.6199523],[1.1372601,43.6196244],[1.1365933,43.642094],[1.1149055,43.6417629],[1.1135067,43.6867566]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Tours-Orthophoto-2008_2010","name":"Tours - Orthophotos 2008-2010","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/tours/{zoom}/{x}/{y}","endDate":"2011-01-01T00:00:00.000Z","startDate":"2008-01-01T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[0.5457462,47.465264],[0.54585,47.4608163],[0.5392188,47.4606983],[0.5393484,47.456243],[0.5327959,47.4561003],[0.5329011,47.451565],[0.52619,47.4514013],[0.5265854,47.4424884],[0.5000941,47.4420739],[0.5002357,47.4375835],[0.4936014,47.4374324],[0.4937,47.4329285],[0.4606141,47.4324593],[0.4607248,47.4279827],[0.4541016,47.4278125],[0.454932,47.4053921],[0.4615431,47.4054476],[0.4619097,47.3964924],[0.4684346,47.3966005],[0.4691319,47.3786415],[0.4757125,47.3787609],[0.4762116,47.3652018],[0.4828297,47.3653499],[0.4829611,47.3608321],[0.4763543,47.360743],[0.476654,47.3517263],[0.4700497,47.3516186],[0.4701971,47.3471313],[0.4637503,47.3470104],[0.4571425,47.3424146],[0.4572922,47.3379061],[0.4506741,47.3378081],[0.4508379,47.3333051],[0.4442212,47.3332032],[0.4443809,47.328711],[0.4311392,47.3284977],[0.4316262,47.3150004],[0.4382432,47.3151136],[0.4383815,47.3106174],[0.4714487,47.3111374],[0.4713096,47.3156565],[0.477888,47.3157542],[0.4780733,47.3112802],[0.4846826,47.3113639],[0.4848576,47.3068686],[0.4914359,47.3069803],[0.491745,47.2979733],[0.4851578,47.2978722],[0.4854269,47.2888744],[0.4788485,47.2887697],[0.4791574,47.2797818],[0.4857769,47.2799005],[0.4859107,47.2753885],[0.492539,47.2755029],[0.4926669,47.2710127],[0.4992986,47.2711066],[0.4994296,47.2666116],[0.5192658,47.2669245],[0.5194225,47.2624231],[0.5260186,47.2625205],[0.5258735,47.2670183],[0.5456972,47.2673383],[0.5455537,47.2718283],[0.5587737,47.2720366],[0.5586259,47.2765185],[0.5652252,47.2766278],[0.5650848,47.2811206],[0.5716753,47.2812285],[0.5715223,47.2857217],[0.5781436,47.2858299],[0.5779914,47.2903294],[0.5846023,47.2904263],[0.5843076,47.2994231],[0.597499,47.2996094],[0.5976637,47.2951375],[0.6571596,47.2960036],[0.6572988,47.2915091],[0.6705019,47.2917186],[0.6703475,47.2962082],[0.6836175,47.2963688],[0.6834322,47.3008929],[0.690062,47.3009558],[0.6899241,47.3054703],[0.7362019,47.3061157],[0.7360848,47.3106063],[0.7559022,47.3108935],[0.7557718,47.315392],[0.7623755,47.3154716],[0.7622314,47.3199941],[0.7754911,47.3201546],[0.77497,47.3388218],[0.7745786,47.351628],[0.7680363,47.3515901],[0.767589,47.3605298],[0.7742443,47.3606238],[0.7733465,47.3921266],[0.7667434,47.3920195],[0.7664411,47.4010837],[0.7730647,47.4011115],[0.7728868,47.4101297],[0.7661849,47.4100226],[0.7660267,47.4145044],[0.7527613,47.4143038],[0.7529788,47.4098086],[0.7462373,47.4097016],[0.7459424,47.4232208],[0.7392324,47.4231451],[0.738869,47.4366116],[0.7323267,47.4365171],[0.7321869,47.4410556],[0.7255048,47.44098],[0.7254209,47.4453479],[0.7318793,47.4454803],[0.7318514,47.4501126],[0.7384496,47.450226],[0.7383098,47.454631],[0.7449359,47.4547444],[0.7443209,47.4771985],[0.7310685,47.4769717],[0.7309008,47.4815445],[0.7176205,47.4812611],[0.7177883,47.4768394],[0.69777,47.4764993],[0.6980496,47.4719827],[0.6914514,47.4718882],[0.6917309,47.4630241],[0.6851048,47.4629295],[0.684937,47.4673524],[0.678255,47.4673335],[0.6779754,47.4762158],[0.6714051,47.4761592],[0.6710417,47.4881952],[0.6577334,47.4879685],[0.6578173,47.48504],[0.6511911,47.4848322],[0.6514707,47.4758568],[0.6448166,47.4757245],[0.6449284,47.4712646],[0.6117976,47.4707543],[0.6118815,47.4663129],[0.6052833,47.4661239],[0.6054231,47.4616631],[0.5988808,47.4615497],[0.5990206,47.4570886],[0.572488,47.4566916],[0.5721805,47.4656513],[0.5457462,47.465264]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Tours/Orthophoto","terms_text":"Orthophoto Tour(s) Plus 2008"},{"id":"Tours-Orthophoto-2013","name":"Tours - Orthophotos 2013","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/tours_2013/{zoom}/{x}/{y}","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[0.7751199,47.3298327],[0.7742685,47.356166],[0.7705338,47.3561106],[0.7702424,47.3651192],[0.7739772,47.3651747],[0.7728024,47.4014836],[0.7903977,47.4014691],[0.7898827,47.4102988],[0.7911702,47.410473],[0.7910844,47.4194174],[0.7939168,47.4194174],[0.7931872,47.4373306],[0.7983371,47.4374177],[0.7980796,47.4554408],[0.8004399,47.4554118],[0.8013841,47.4642615],[0.8007403,47.4689904],[0.7939597,47.4733127],[0.7840463,47.4732257],[0.7838746,47.4787079],[0.776064,47.4785919],[0.7758494,47.4820434],[0.7706567,47.4821884],[0.7704421,47.4859006],[0.7609578,47.4909176],[0.7571813,47.4909176],[0.737526,47.5033563],[0.725896,47.5058785],[0.7111331,47.5057626],[0.7041808,47.5040811],[0.6910916,47.5003846],[0.6904479,47.4971808],[0.6775733,47.4968329],[0.6775733,47.4935273],[0.6642695,47.4930054],[0.6634971,47.4895256],[0.6508799,47.4895836],[0.6513306,47.4803177],[0.6473394,47.4803032],[0.6474682,47.4785194],[0.6447431,47.4784614],[0.644786,47.4757493],[0.6423827,47.4757783],[0.642254,47.4730226],[0.6383487,47.4729356],[0.6379195,47.4713111],[0.6051322,47.470789],[0.6051322,47.4663213],[0.5985232,47.4660312],[0.5987807,47.4615632],[0.5920001,47.4615632],[0.5922576,47.4597643],[0.5808421,47.4597062],[0.5800696,47.4614471],[0.5723449,47.4613891],[0.5722161,47.4651173],[0.5587407,47.4648852],[0.5465957,47.4605187],[0.5326911,47.4535546],[0.5267688,47.4531483],[0.5267688,47.4515233],[0.5223056,47.4512331],[0.5225631,47.4480407],[0.5197736,47.447765],[0.520074,47.4424682],[0.4975005,47.4415975],[0.4971572,47.4404945],[0.4935523,47.4401462],[0.4935523,47.435734],[0.4794331,47.4357485],[0.4617091,47.428186],[0.4564305,47.4208838],[0.4548856,47.4122882],[0.4550572,47.4021807],[0.4614945,47.4019338],[0.4616662,47.3964145],[0.4687901,47.3960224],[0.4701634,47.3517307],[0.4567738,47.3514981],[0.4572888,47.3425422],[0.430853,47.3419606],[0.431958,47.3060196],[0.4715367,47.3067035],[0.4725667,47.2800414],[0.4852696,47.2800414],[0.4857846,47.2708404],[0.4993459,47.2710734],[0.4991742,47.2624533],[0.5527326,47.2630358],[0.5522176,47.2720052],[0.5656072,47.2722381],[0.5652638,47.2815553],[0.5911847,47.2815553],[0.5906697,47.2909873],[0.669119,47.2916859],[0.6831952,47.2956444],[0.6831952,47.3007668],[0.6965848,47.3012324],[0.6964131,47.3023965],[0.7100602,47.3024547],[0.7229348,47.3058887],[0.722849,47.3104281],[0.7416459,47.3108355],[0.754263,47.3139197],[0.7625028,47.318153],[0.7620736,47.3201313],[0.7661935,47.3200877],[0.7695623,47.3220659],[0.7723304,47.3250768],[0.7733603,47.3266985],[0.7751199,47.3298327]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Tours/Orthophoto","terms_text":"Orthophoto Tour(s)plus 2013"},{"id":"US_Forest_Service_roads","name":"U.S. Forest Service roads","type":"tms","template":"https://osm.cycle.travel/forest/{zoom}/{x}/{y}.png","scaleExtent":[0,19],"polygon":[[[-124.7617886,48.4130148],[-124.6059492,45.90245],[-124.9934269,40.0557614],[-122.5369737,36.8566086],[-119.9775867,33.0064099],[-117.675935,32.4630223],[-114.8612307,32.4799891],[-111.0089311,31.336015],[-108.1992687,31.3260016],[-108.1871123,31.7755116],[-106.5307225,31.7820947],[-106.4842052,31.7464455],[-106.429317,31.7520583],[-106.2868855,31.5613291],[-106.205248,31.446704],[-105.0205259,30.5360988],[-104.5881916,29.6997856],[-103.2518856,28.8908685],[-102.7173632,29.3920567],[-102.1513983,29.7475702],[-101.2552871,29.4810523],[-100.0062436,28.0082173],[-99.2351068,26.4475962],[-98.0109067,25.9928035],[-97.435024,25.8266009],[-96.9555259,25.9821589],[-96.8061741,27.7978168],[-95.5563349,28.5876066],[-93.7405308,29.4742093],[-90.9028456,28.8564513],[-88.0156706,28.9944338],[-88.0162494,30.0038862],[-86.0277506,30.0047454],[-84.0187909,28.9961781],[-81.9971976,25.9826768],[-81.9966618,25.0134917],[-84.0165592,25.0125783],[-84.0160068,24.0052745],[-80.0199985,24.007096],[-79.8901116,26.8550713],[-80.0245309,32.0161282],[-75.4147385,35.0531894],[-74.0211163,39.5727927],[-72.002019,40.9912464],[-69.8797398,40.9920457],[-69.8489304,43.2619916],[-66.9452845,44.7104937],[-67.7596632,47.0990024],[-69.2505131,47.5122328],[-70.4614886,46.2176574],[-71.412273,45.254878],[-72.0222508,45.0059846],[-75.0798841,44.9802854],[-76.9023061,43.8024568],[-78.7623935,43.6249578],[-79.15798,43.4462589],[-79.0060087,42.8005317],[-82.662475,41.6889458],[-82.1761642,43.588535],[-83.2813977,46.138853],[-87.5064535,48.0142702],[-88.3492194,48.2963271],[-89.4353148,47.9837822],[-93.9981078,49.0067142],[-95.1105379,49.412004],[-96.0131199,49.0060547],[-123.3228926,49.0042878],[-123.2275233,48.1849927],[-124.7617886,48.4130148]],[[-160.5787616,22.5062947],[-160.5782192,21.4984647],[-158.7470604,21.2439843],[-157.5083185,20.995803],[-155.9961942,18.7790194],[-154.6217803,18.7586966],[-154.6890176,19.8805722],[-156.2927622,21.2225888],[-157.5047384,21.9984962],[-159.0093692,22.5070181],[-160.5787616,22.5062947]],[[-167.1571546,68.721974],[-164.8553982,67.0255078],[-168.002195,66.0017503],[-169.0087448,66.001546],[-169.0075381,64.9987675],[-172.5143281,63.8767267],[-173.8197023,59.74014],[-162.5018149,58.0005815],[-160.0159024,58.0012389],[-160.0149725,57.000035],[-160.5054788,56.9999017],[-165.8092575,54.824847],[-178.000097,52.2446469],[-177.9992996,51.2554252],[-171.4689067,51.8215329],[-162.40251,53.956664],[-159.0075717,55.002502],[-158.0190709,55.0027849],[-151.9963213,55.9991902],[-151.500341,57.9987853],[-151.5012894,58.9919816],[-138.5159989,58.9953194],[-138.5150471,57.9986434],[-133.9948193,54.0031685],[-130.0044418,54.0043387],[-130.0070826,57.0000507],[-131.975877,56.9995156],[-135.1229873,59.756601],[-138.0071813,59.991805],[-139.1715881,60.4127229],[-140.9874011,61.0118551],[-140.9683975,69.9535069],[-156.176891,71.5633329],[-160.413634,70.7397728],[-163.0218273,69.9707435],[-164.9717003,68.994689],[-167.1571546,68.721974]]]},{"id":"Zuerich-zh_uebersichtsplan-tms","name":"Übersichtsplan Zürich","type":"tms","template":"https://mapproxy.osm.ch/tiles/zh_uebersichtsplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[0,21],"polygon":[[[8.4482,47.321],[8.4482,47.4339],[8.6248,47.4339],[8.6248,47.321],[8.4482,47.321]]],"terms_text":"Stadt Zürich Open Government Data"},{"id":"uniao_dos_palmares","name":"União dos Palmares AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Uniao%20dos%20Palmares&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-35.97724708197,-9.20751562713],[-35.97719915169,-9.19398393291],[-35.97694352353,-9.19052995603],[-35.97678375594,-9.18606654789],[-35.97702340733,-9.18207624495],[-35.97703938409,-9.17967888719],[-35.97681570946,-9.17734460222],[-35.9766399651,-9.17516802537],[-35.97700743057,-9.17518379771],[-35.97695950029,-9.17070442381],[-35.97673582566,-9.17065710618],[-35.97660801158,-9.16644581169],[-35.97617663907,-9.16221869434],[-35.97609675527,-9.1602628469],[-35.97660801158,-9.1602628469],[-35.9767198489,-9.14608263113],[-35.97654410454,-9.1412243182],[-35.97665594186,-9.13319533758],[-35.97652812778,-9.12183772804],[-35.9764801975,-9.11748388185],[-35.98617809061,-9.11754698145],[-35.9894693031,-9.1173261328],[-36.00560583036,-9.1173261328],[-36.01859493596,-9.11735768262],[-36.04601105553,-9.11721570843],[-36.06734002967,-9.11697908465],[-36.0675637043,-9.16133540973],[-36.06770749514,-9.16404834833],[-36.06745186698,-9.164079894],[-36.0675637043,-9.16657199353],[-36.06777140218,-9.16654044807],[-36.06797910005,-9.20701095785],[-36.04979754756,-9.2071055834],[-36.04671403295,-9.206979416],[-36.02941120224,-9.20708981247],[-36.0135462799,-9.207184438],[-35.99317591134,-9.20732637623],[-35.97724708197,-9.20751562713]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"UrbISOrtho2016","name":"UrbIS-Ortho 2016","type":"wms","template":"https://geoservices-urbis.irisnet.be/geoserver/ows/?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2016&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}","projection":"EPSG:3857","endDate":"2017-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","polygon":[[[4.3797288,50.7638205],[4.3891701,50.7637662],[4.430283,50.7751656],[4.4350037,50.7750028],[4.464272,50.7864537],[4.4816956,50.7913372],[4.4823823,50.7961658],[4.459208,50.8062556],[4.4594655,50.8166144],[4.4797215,50.8203559],[4.4695935,50.8353735],[4.4689927,50.8457258],[4.4623837,50.8539626],[4.4496808,50.8559133],[4.4459901,50.8599226],[4.4253049,50.8661526],[4.431828,50.8762815],[4.4400677,50.8784478],[4.4310555,50.8901441],[4.4359479,50.8950167],[4.4295964,50.9010255],[4.4165501,50.9075748],[4.4154343,50.9134197],[4.3957791,50.914069],[4.3846211,50.9109303],[4.3811879,50.9031907],[4.3726048,50.9003218],[4.3621335,50.9032989],[4.3485722,50.9034072],[4.3402467,50.9041108],[4.328917,50.902487],[4.3164716,50.8960453],[4.3063435,50.8927429],[4.2900357,50.8898192],[4.2914948,50.8849461],[4.2955289,50.8826176],[4.2956147,50.8809389],[4.2827401,50.8722735],[4.2769894,50.8671277],[4.2780194,50.8591099],[4.2804227,50.8572136],[4.2809376,50.8421489],[4.2719254,50.8403603],[4.2546735,50.8369455],[4.2510686,50.83288],[4.2522702,50.8269708],[4.2434296,50.82182],[4.2440305,50.8154755],[4.2551884,50.8150959],[4.2580209,50.8093472],[4.2721829,50.8101065],[4.2757878,50.8069607],[4.2854008,50.8050623],[4.2890057,50.8069065],[4.298018,50.8059302],[4.3028245,50.7970881],[4.3145833,50.7945382],[4.3162141,50.7862367],[4.3295178,50.7738087],[4.3420491,50.7716375],[4.3452248,50.7733745],[4.3785271,50.7681092],[4.3797288,50.7638205]]],"terms_text":"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsSAAALEgHS3X78AAACnUlEQVQoz11SXUiTYRh93ndz06YMNWcpRmWRSpgO+0EUDYwQ6sZ+oAyti8y6yCyKxOimILqQsLKbukmHSpFFLYlMqSkUmi3/pjZ/Zmv+Tec2bU237z1dfFHSc/HcPOc5HM45DAAREREgGOM217BpzDjs7PEHfNGa2PT47KxN+RFqrYDgjBMRE0JijBMRAKOlzmgxhChDN0cla1ThM0uTE65vsRFxRRkXk3TpMiMBkEQQQFPvw0LDnoYvVStBNwAhBIApj+X6m5OlT/dbnX0AJCHxkbl+zhTWub6XA4ZDqcd3JJTl1to7HV7G2E3TxOU2zaWcKm1YZKO5RlaliNknBma6Bqe7V6SVc5mVrmVFxSvLu1G3bSlwy2jVaXE6IzE0JLzV+jxJlxYTvp5X5j3Qx2ePzPcn6VJVysiUaHXX+d2zy8HqlrE8/bq3xXoiStalr1Fpxl1DRMQ547s27NWGRikVKtmuju9e34pEYcrhWV/f7E8iUinDQrjaH/AREQfAmSJGEzc6P0Qkvbd5ymt7DqfEmEr0Tre/4PFXInK4R7z+hXjtRiIi2aKPtpbi+qxue6vHj5ou+8KvAIBPP7yG3mkAd9sry18ULPrdAAgQAIJS4EZLacXrwqVlDwBJiKAkJCEB+Gz/UNyQ1TxY/8dWIiYgFFx5JPXM7JLjWe8jIgKBM3DGXT5no7lmy9rteVsLiIjJGXPGBcQ2XdqBlKJWa1PHeLOCcRAEhKH7zuKy+4T+QohCDQhGjLBqJBGsNl0teZI3OGMG0GiuKarPNI0aZTEyhq0qHxhjXv/C7bYyASkjIddoqctPOnY07ezf5hHRvwcikg+TXtv9jmsOjy0n8eCpnVeIESMiecnE/6kC0D/Vea+90h/wARAQqwG/AaEjsUbwLtXdAAAAAElFTkSuQmCC"},{"id":"UrbISOrtho2017","name":"UrbIS-Ortho 2017","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/Urbis:Ortho2017/https://geoservices-urbis.irisnet.be/geoserver/ows","endDate":"2018-01-01T00:00:00.000Z","startDate":"2017-01-01T00:00:00.000Z","polygon":[[[4.3797288,50.7638205],[4.3891701,50.7637662],[4.430283,50.7751656],[4.4350037,50.7750028],[4.464272,50.7864537],[4.4816956,50.7913372],[4.4823823,50.7961658],[4.459208,50.8062556],[4.4594655,50.8166144],[4.4797215,50.8203559],[4.4695935,50.8353735],[4.4689927,50.8457258],[4.4623837,50.8539626],[4.4496808,50.8559133],[4.4459901,50.8599226],[4.4253049,50.8661526],[4.431828,50.8762815],[4.4400677,50.8784478],[4.4310555,50.8901441],[4.4359479,50.8950167],[4.4295964,50.9010255],[4.4165501,50.9075748],[4.4154343,50.9134197],[4.3957791,50.914069],[4.3846211,50.9109303],[4.3811879,50.9031907],[4.3726048,50.9003218],[4.3621335,50.9032989],[4.3485722,50.9034072],[4.3402467,50.9041108],[4.328917,50.902487],[4.3164716,50.8960453],[4.3063435,50.8927429],[4.2900357,50.8898192],[4.2914948,50.8849461],[4.2955289,50.8826176],[4.2956147,50.8809389],[4.2827401,50.8722735],[4.2769894,50.8671277],[4.2780194,50.8591099],[4.2804227,50.8572136],[4.2809376,50.8421489],[4.2719254,50.8403603],[4.2546735,50.8369455],[4.2510686,50.83288],[4.2522702,50.8269708],[4.2434296,50.82182],[4.2440305,50.8154755],[4.2551884,50.8150959],[4.2580209,50.8093472],[4.2721829,50.8101065],[4.2757878,50.8069607],[4.2854008,50.8050623],[4.2890057,50.8069065],[4.298018,50.8059302],[4.3028245,50.7970881],[4.3145833,50.7945382],[4.3162141,50.7862367],[4.3295178,50.7738087],[4.3420491,50.7716375],[4.3452248,50.7733745],[4.3785271,50.7681092],[4.3797288,50.7638205]]],"terms_text":"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB","best":true,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsSAAALEgHS3X78AAACnUlEQVQoz11SXUiTYRh93ndz06YMNWcpRmWRSpgO+0EUDYwQ6sZ+oAyti8y6yCyKxOimILqQsLKbukmHSpFFLYlMqSkUmi3/pjZ/Zmv+Tec2bU237z1dfFHSc/HcPOc5HM45DAAREREgGOM217BpzDjs7PEHfNGa2PT47KxN+RFqrYDgjBMRE0JijBMRAKOlzmgxhChDN0cla1ThM0uTE65vsRFxRRkXk3TpMiMBkEQQQFPvw0LDnoYvVStBNwAhBIApj+X6m5OlT/dbnX0AJCHxkbl+zhTWub6XA4ZDqcd3JJTl1to7HV7G2E3TxOU2zaWcKm1YZKO5RlaliNknBma6Bqe7V6SVc5mVrmVFxSvLu1G3bSlwy2jVaXE6IzE0JLzV+jxJlxYTvp5X5j3Qx2ePzPcn6VJVysiUaHXX+d2zy8HqlrE8/bq3xXoiStalr1Fpxl1DRMQ547s27NWGRikVKtmuju9e34pEYcrhWV/f7E8iUinDQrjaH/AREQfAmSJGEzc6P0Qkvbd5ymt7DqfEmEr0Tre/4PFXInK4R7z+hXjtRiIi2aKPtpbi+qxue6vHj5ou+8KvAIBPP7yG3mkAd9sry18ULPrdAAgQAIJS4EZLacXrwqVlDwBJiKAkJCEB+Gz/UNyQ1TxY/8dWIiYgFFx5JPXM7JLjWe8jIgKBM3DGXT5no7lmy9rteVsLiIjJGXPGBcQ2XdqBlKJWa1PHeLOCcRAEhKH7zuKy+4T+QohCDQhGjLBqJBGsNl0teZI3OGMG0GiuKarPNI0aZTEyhq0qHxhjXv/C7bYyASkjIddoqctPOnY07ezf5hHRvwcikg+TXtv9jmsOjy0n8eCpnVeIESMiecnE/6kC0D/Vea+90h/wARAQqwG/AaEjsUbwLtXdAAAAAElFTkSuQmCC"},{"id":"UrbisAdmFR","name":"UrbisAdm FR","type":"wms","template":"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=urbisFR&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[4.3797288,50.7638205],[4.3891701,50.7637662],[4.430283,50.7751656],[4.4350037,50.7750028],[4.464272,50.7864537],[4.4816956,50.7913372],[4.4823823,50.7961658],[4.459208,50.8062556],[4.4594655,50.8166144],[4.4797215,50.8203559],[4.4695935,50.8353735],[4.4689927,50.8457258],[4.4623837,50.8539626],[4.4496808,50.8559133],[4.4459901,50.8599226],[4.4253049,50.8661526],[4.431828,50.8762815],[4.4400677,50.8784478],[4.4310555,50.8901441],[4.4359479,50.8950167],[4.4295964,50.9010255],[4.4165501,50.9075748],[4.4154343,50.9134197],[4.3957791,50.914069],[4.3846211,50.9109303],[4.3811879,50.9031907],[4.3726048,50.9003218],[4.3621335,50.9032989],[4.3485722,50.9034072],[4.3402467,50.9041108],[4.328917,50.902487],[4.3164716,50.8960453],[4.3063435,50.8927429],[4.2900357,50.8898192],[4.2914948,50.8849461],[4.2955289,50.8826176],[4.2956147,50.8809389],[4.2827401,50.8722735],[4.2769894,50.8671277],[4.2780194,50.8591099],[4.2804227,50.8572136],[4.2809376,50.8421489],[4.2719254,50.8403603],[4.2546735,50.8369455],[4.2510686,50.83288],[4.2522702,50.8269708],[4.2434296,50.82182],[4.2440305,50.8154755],[4.2551884,50.8150959],[4.2580209,50.8093472],[4.2721829,50.8101065],[4.2757878,50.8069607],[4.2854008,50.8050623],[4.2890057,50.8069065],[4.298018,50.8059302],[4.3028245,50.7970881],[4.3145833,50.7945382],[4.3162141,50.7862367],[4.3295178,50.7738087],[4.3420491,50.7716375],[4.3452248,50.7733745],[4.3785271,50.7681092],[4.3797288,50.7638205]]],"terms_text":"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsSAAALEgHS3X78AAACnUlEQVQoz11SXUiTYRh93ndz06YMNWcpRmWRSpgO+0EUDYwQ6sZ+oAyti8y6yCyKxOimILqQsLKbukmHSpFFLYlMqSkUmi3/pjZ/Zmv+Tec2bU237z1dfFHSc/HcPOc5HM45DAAREREgGOM217BpzDjs7PEHfNGa2PT47KxN+RFqrYDgjBMRE0JijBMRAKOlzmgxhChDN0cla1ThM0uTE65vsRFxRRkXk3TpMiMBkEQQQFPvw0LDnoYvVStBNwAhBIApj+X6m5OlT/dbnX0AJCHxkbl+zhTWub6XA4ZDqcd3JJTl1to7HV7G2E3TxOU2zaWcKm1YZKO5RlaliNknBma6Bqe7V6SVc5mVrmVFxSvLu1G3bSlwy2jVaXE6IzE0JLzV+jxJlxYTvp5X5j3Qx2ePzPcn6VJVysiUaHXX+d2zy8HqlrE8/bq3xXoiStalr1Fpxl1DRMQ547s27NWGRikVKtmuju9e34pEYcrhWV/f7E8iUinDQrjaH/AREQfAmSJGEzc6P0Qkvbd5ymt7DqfEmEr0Tre/4PFXInK4R7z+hXjtRiIi2aKPtpbi+qxue6vHj5ou+8KvAIBPP7yG3mkAd9sry18ULPrdAAgQAIJS4EZLacXrwqVlDwBJiKAkJCEB+Gz/UNyQ1TxY/8dWIiYgFFx5JPXM7JLjWe8jIgKBM3DGXT5no7lmy9rteVsLiIjJGXPGBcQ2XdqBlKJWa1PHeLOCcRAEhKH7zuKy+4T+QohCDQhGjLBqJBGsNl0teZI3OGMG0GiuKarPNI0aZTEyhq0qHxhjXv/C7bYyASkjIddoqctPOnY07ezf5hHRvwcikg+TXtv9jmsOjy0n8eCpnVeIESMiecnE/6kC0D/Vea+90h/wARAQqwG/AaEjsUbwLtXdAAAAAElFTkSuQmCC"},{"id":"UrbisAdmNL","name":"UrbisAdm NL","type":"wms","template":"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=urbisNL&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[4.3797288,50.7638205],[4.3891701,50.7637662],[4.430283,50.7751656],[4.4350037,50.7750028],[4.464272,50.7864537],[4.4816956,50.7913372],[4.4823823,50.7961658],[4.459208,50.8062556],[4.4594655,50.8166144],[4.4797215,50.8203559],[4.4695935,50.8353735],[4.4689927,50.8457258],[4.4623837,50.8539626],[4.4496808,50.8559133],[4.4459901,50.8599226],[4.4253049,50.8661526],[4.431828,50.8762815],[4.4400677,50.8784478],[4.4310555,50.8901441],[4.4359479,50.8950167],[4.4295964,50.9010255],[4.4165501,50.9075748],[4.4154343,50.9134197],[4.3957791,50.914069],[4.3846211,50.9109303],[4.3811879,50.9031907],[4.3726048,50.9003218],[4.3621335,50.9032989],[4.3485722,50.9034072],[4.3402467,50.9041108],[4.328917,50.902487],[4.3164716,50.8960453],[4.3063435,50.8927429],[4.2900357,50.8898192],[4.2914948,50.8849461],[4.2955289,50.8826176],[4.2956147,50.8809389],[4.2827401,50.8722735],[4.2769894,50.8671277],[4.2780194,50.8591099],[4.2804227,50.8572136],[4.2809376,50.8421489],[4.2719254,50.8403603],[4.2546735,50.8369455],[4.2510686,50.83288],[4.2522702,50.8269708],[4.2434296,50.82182],[4.2440305,50.8154755],[4.2551884,50.8150959],[4.2580209,50.8093472],[4.2721829,50.8101065],[4.2757878,50.8069607],[4.2854008,50.8050623],[4.2890057,50.8069065],[4.298018,50.8059302],[4.3028245,50.7970881],[4.3145833,50.7945382],[4.3162141,50.7862367],[4.3295178,50.7738087],[4.3420491,50.7716375],[4.3452248,50.7733745],[4.3785271,50.7681092],[4.3797288,50.7638205]]],"terms_text":"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsSAAALEgHS3X78AAACnUlEQVQoz11SXUiTYRh93ndz06YMNWcpRmWRSpgO+0EUDYwQ6sZ+oAyti8y6yCyKxOimILqQsLKbukmHSpFFLYlMqSkUmi3/pjZ/Zmv+Tec2bU237z1dfFHSc/HcPOc5HM45DAAREREgGOM217BpzDjs7PEHfNGa2PT47KxN+RFqrYDgjBMRE0JijBMRAKOlzmgxhChDN0cla1ThM0uTE65vsRFxRRkXk3TpMiMBkEQQQFPvw0LDnoYvVStBNwAhBIApj+X6m5OlT/dbnX0AJCHxkbl+zhTWub6XA4ZDqcd3JJTl1to7HV7G2E3TxOU2zaWcKm1YZKO5RlaliNknBma6Bqe7V6SVc5mVrmVFxSvLu1G3bSlwy2jVaXE6IzE0JLzV+jxJlxYTvp5X5j3Qx2ePzPcn6VJVysiUaHXX+d2zy8HqlrE8/bq3xXoiStalr1Fpxl1DRMQ547s27NWGRikVKtmuju9e34pEYcrhWV/f7E8iUinDQrjaH/AREQfAmSJGEzc6P0Qkvbd5ymt7DqfEmEr0Tre/4PFXInK4R7z+hXjtRiIi2aKPtpbi+qxue6vHj5ou+8KvAIBPP7yG3mkAd9sry18ULPrdAAgQAIJS4EZLacXrwqVlDwBJiKAkJCEB+Gz/UNyQ1TxY/8dWIiYgFFx5JPXM7JLjWe8jIgKBM3DGXT5no7lmy9rteVsLiIjJGXPGBcQ2XdqBlKJWa1PHeLOCcRAEhKH7zuKy+4T+QohCDQhGjLBqJBGsNl0teZI3OGMG0GiuKarPNI0aZTEyhq0qHxhjXv/C7bYyASkjIddoqctPOnY07ezf5hHRvwcikg+TXtv9jmsOjy0n8eCpnVeIESMiecnE/6kC0D/Vea+90h/wARAQqwG/AaEjsUbwLtXdAAAAAElFTkSuQmCC"},{"id":"USGS-Large_Scale","name":"USGS Large Scale Imagery","type":"tms","template":"http://{switch:a,b,c}.tile.openstreetmap.us/usgs_large_scale/{zoom}/{x}/{y}.jpg","scaleExtent":[12,20],"polygon":[[[-123.2549305,48.7529029],[-123.2549305,48.5592263],[-123.192224,48.5592263],[-123.192224,48.4348366],[-122.9419646,48.4348366],[-122.9419646,48.3720812],[-122.8806229,48.3720812],[-122.8806229,48.3094763],[-122.8167566,48.3094763],[-122.8167566,48.1904587],[-123.0041133,48.1904587],[-123.0041133,48.1275918],[-123.058416,48.1275918],[-123.058416,48.190514],[-123.254113,48.190514],[-123.254113,48.1274982],[-123.3706593,48.1274982],[-123.3706593,48.1908403],[-124.0582632,48.1908403],[-124.0582632,48.253442],[-124.1815163,48.253442],[-124.1815163,48.3164666],[-124.4319117,48.3164666],[-124.4319117,48.3782613],[-124.5564618,48.3782613],[-124.5564618,48.4408305],[-124.7555107,48.4408305],[-124.7555107,48.1914986],[-124.8185282,48.1914986],[-124.8185282,48.1228381],[-124.7552951,48.1228381],[-124.7552951,47.5535253],[-124.3812108,47.5535253],[-124.3812108,47.1218696],[-124.1928897,47.1218696],[-124.1928897,43.7569431],[-124.4443382,43.7569431],[-124.4443382,43.1425556],[-124.6398855,43.1425556],[-124.6398855,42.6194503],[-124.4438525,42.6194503],[-124.4438525,39.8080662],[-123.8815685,39.8080662],[-123.8815685,39.1102825],[-123.75805,39.1102825],[-123.75805,38.4968799],[-123.2702803,38.4968799],[-123.2702803,37.9331905],[-122.8148084,37.9331905],[-122.8148084,37.8019606],[-122.5664316,37.8019606],[-122.5664316,36.9319611],[-121.8784026,36.9319611],[-121.8784026,36.6897596],[-122.0034748,36.6897596],[-122.0034748,36.4341056],[-121.9414159,36.4341056],[-121.9414159,35.9297636],[-121.5040977,35.9297636],[-121.5040977,35.8100273],[-121.3790276,35.8100273],[-121.3790276,35.4239164],[-120.9426515,35.4239164],[-120.9426515,35.1849683],[-120.8171978,35.1849683],[-120.8171978,35.1219894],[-120.6918447,35.1219894],[-120.6918447,34.4966794],[-120.5045898,34.4966794],[-120.5045898,34.4339651],[-120.0078775,34.4339651],[-120.0078775,34.3682626],[-119.5283517,34.3682626],[-119.5283517,34.0576434],[-119.0060985,34.0576434],[-119.0060985,33.9975267],[-118.5046259,33.9975267],[-118.5046259,33.8694631],[-118.4413209,33.8694631],[-118.4413209,33.6865253],[-118.066912,33.6865253],[-118.066912,33.3063832],[-117.5030045,33.3063832],[-117.5030045,33.0500337],[-117.3188195,33.0500337],[-117.3188195,32.6205888],[-117.1917023,32.6205888],[-117.1917023,32.4974566],[-116.746496,32.4974566],[-116.746496,32.5609161],[-115.9970138,32.5609161],[-115.9970138,32.6264942],[-114.8808125,32.6264942],[-114.8808125,32.4340796],[-114.6294474,32.4340796],[-114.6294474,32.3731636],[-114.4447437,32.3731636],[-114.4447437,32.3075418],[-114.2557628,32.3075418],[-114.2557628,32.2444561],[-114.0680274,32.2444561],[-114.0680274,32.1829113],[-113.8166499,32.1829113],[-113.8166499,32.1207622],[-113.6307421,32.1207622],[-113.6307421,32.0565099],[-113.4417495,32.0565099],[-113.4417495,31.9984372],[-113.2546027,31.9984372],[-113.2546027,31.9325434],[-113.068072,31.9325434],[-113.068072,31.8718062],[-112.8161105,31.8718062],[-112.8161105,31.8104171],[-112.6308756,31.8104171],[-112.6308756,31.7464723],[-112.4418918,31.7464723],[-112.4418918,31.6856001],[-112.257192,31.6856001],[-112.257192,31.6210352],[-112.0033787,31.6210352],[-112.0033787,31.559584],[-111.815619,31.559584],[-111.815619,31.4970238],[-111.6278586,31.4970238],[-111.6278586,31.4339867],[-111.4418978,31.4339867],[-111.4418978,31.3733859],[-111.2559708,31.3733859],[-111.2559708,31.3113225],[-108.1845822,31.3113225],[-108.1845822,31.7459502],[-106.5065055,31.7459502],[-106.5065055,31.6842308],[-106.3797265,31.6842308],[-106.3797265,31.621752],[-106.317434,31.621752],[-106.317434,31.4968167],[-106.2551769,31.4968167],[-106.2551769,31.4344889],[-106.1924698,31.4344889],[-106.1924698,31.3721296],[-106.0039212,31.3721296],[-106.0039212,31.309328],[-105.9416582,31.309328],[-105.9416582,31.2457547],[-105.8798174,31.2457547],[-105.8798174,31.1836194],[-105.8162349,31.1836194],[-105.8162349,31.1207155],[-105.6921198,31.1207155],[-105.6921198,31.0584835],[-105.6302881,31.0584835],[-105.6302881,30.9328271],[-105.5044418,30.9328271],[-105.5044418,30.8715864],[-105.4412973,30.8715864],[-105.4412973,30.808463],[-105.3781497,30.808463],[-105.3781497,30.7471828],[-105.1904658,30.7471828],[-105.1904658,30.6843231],[-105.1286244,30.6843231],[-105.1286244,30.6199737],[-105.0036504,30.6199737],[-105.0036504,30.5589058],[-104.9417962,30.5589058],[-104.9417962,30.4963236],[-104.8782018,30.4963236],[-104.8782018,30.3098261],[-104.8155257,30.3098261],[-104.8155257,30.2478305],[-104.7536079,30.2478305],[-104.7536079,29.9353916],[-104.690949,29.9353916],[-104.690949,29.8090156],[-104.6291301,29.8090156],[-104.6291301,29.6843577],[-104.5659869,29.6843577],[-104.5659869,29.6223459],[-104.5037188,29.6223459],[-104.5037188,29.5595436],[-104.4410072,29.5595436],[-104.4410072,29.4974832],[-104.2537551,29.4974832],[-104.2537551,29.3716718],[-104.1291984,29.3716718],[-104.1291984,29.3091621],[-104.0688737,29.3091621],[-104.0688737,29.2467276],[-103.8187309,29.2467276],[-103.8187309,29.1843076],[-103.755736,29.1843076],[-103.755736,29.1223174],[-103.5667542,29.1223174],[-103.5667542,29.0598119],[-103.5049819,29.0598119],[-103.5049819,28.9967506],[-103.3165753,28.9967506],[-103.3165753,28.9346923],[-103.0597572,28.9346923],[-103.0597572,29.0592965],[-102.9979694,29.0592965],[-102.9979694,29.1212855],[-102.9331397,29.1212855],[-102.9331397,29.1848575],[-102.8095989,29.1848575],[-102.8095989,29.2526154],[-102.8701345,29.2526154],[-102.8701345,29.308096],[-102.8096681,29.308096],[-102.8096681,29.3715484],[-102.7475655,29.3715484],[-102.7475655,29.5581899],[-102.684554,29.5581899],[-102.684554,29.6847655],[-102.4967764,29.6847655],[-102.4967764,29.7457694],[-102.3086647,29.7457694],[-102.3086647,29.8086627],[-102.1909323,29.8086627],[-102.1909323,29.7460097],[-101.5049914,29.7460097],[-101.5049914,29.6846777],[-101.3805796,29.6846777],[-101.3805796,29.5594459],[-101.3175057,29.5594459],[-101.3175057,29.4958934],[-101.1910075,29.4958934],[-101.1910075,29.4326115],[-101.067501,29.4326115],[-101.067501,29.308808],[-100.9418897,29.308808],[-100.9418897,29.2456231],[-100.8167271,29.2456231],[-100.8167271,29.1190449],[-100.7522672,29.1190449],[-100.7522672,29.0578214],[-100.6925358,29.0578214],[-100.6925358,28.8720431],[-100.6290158,28.8720431],[-100.6290158,28.8095363],[-100.5679901,28.8095363],[-100.5679901,28.622554],[-100.5040411,28.622554],[-100.5040411,28.5583804],[-100.4421832,28.5583804],[-100.4421832,28.4968266],[-100.379434,28.4968266],[-100.379434,28.3092865],[-100.3171942,28.3092865],[-100.3171942,28.1835681],[-100.254483,28.1835681],[-100.254483,28.1213885],[-100.1282282,28.1213885],[-100.1282282,28.059215],[-100.0659537,28.059215],[-100.0659537,27.9966087],[-100.0023855,27.9966087],[-100.0023855,27.9332152],[-99.9426497,27.9332152],[-99.9426497,27.7454658],[-99.816851,27.7454658],[-99.816851,27.6834301],[-99.7541346,27.6834301],[-99.7541346,27.6221543],[-99.6291629,27.6221543],[-99.6291629,27.5588977],[-99.5672838,27.5588977],[-99.5672838,27.4353752],[-99.5041798,27.4353752],[-99.5041798,27.3774021],[-99.5671796,27.3774021],[-99.5671796,27.2463726],[-99.504975,27.2463726],[-99.504975,26.9965649],[-99.4427427,26.9965649],[-99.4427427,26.872803],[-99.3800633,26.872803],[-99.3800633,26.8068179],[-99.3190684,26.8068179],[-99.3190684,26.7473614],[-99.2537541,26.7473614],[-99.2537541,26.6210068],[-99.1910617,26.6210068],[-99.1910617,26.4956737],[-99.1300639,26.4956737],[-99.1300639,26.3713808],[-99.0029473,26.3713808],[-99.0029473,26.3093836],[-98.816572,26.3093836],[-98.816572,26.2457762],[-98.6920082,26.2457762],[-98.6920082,26.1837096],[-98.4440896,26.1837096],[-98.4440896,26.1217217],[-98.3823181,26.1217217],[-98.3823181,26.0596488],[-98.2532707,26.0596488],[-98.2532707,25.9986871],[-98.0109084,25.9986871],[-98.0109084,25.9932255],[-97.6932319,25.9932255],[-97.6932319,25.9334103],[-97.6313904,25.9334103],[-97.6313904,25.8695893],[-97.5046779,25.8695893],[-97.5046779,25.8073488],[-97.3083401,25.8073488],[-97.3083401,25.8731159],[-97.2456326,25.8731159],[-97.2456326,25.9353731],[-97.1138939,25.9353731],[-97.1138939,27.6809179],[-97.0571035,27.6809179],[-97.0571035,27.8108242],[-95.5810766,27.8108242],[-95.5810766,28.7468827],[-94.271041,28.7468827],[-94.271041,29.5594076],[-92.5029947,29.5594076],[-92.5029947,29.4974754],[-91.8776216,29.4974754],[-91.8776216,29.3727013],[-91.378418,29.3727013],[-91.378418,29.2468326],[-91.3153953,29.2468326],[-91.3153953,29.1844301],[-91.1294702,29.1844301],[-91.1294702,29.1232559],[-91.0052632,29.1232559],[-91.0052632,28.9968437],[-89.4500159,28.9968437],[-89.4500159,28.8677422],[-88.8104309,28.8677422],[-88.8104309,30.1841864],[-85.8791527,30.1841864],[-85.8791527,29.5455038],[-84.8368083,29.5455038],[-84.8368083,29.6225158],[-84.7482786,29.6225158],[-84.7482786,29.683624],[-84.685894,29.683624],[-84.685894,29.7468386],[-83.6296975,29.7468386],[-83.6296975,29.4324361],[-83.3174937,29.4324361],[-83.3174937,29.0579442],[-82.879659,29.0579442],[-82.879659,27.7453529],[-82.8182822,27.7453529],[-82.8182822,26.9290868],[-82.3796782,26.9290868],[-82.3796782,26.3694183],[-81.8777106,26.3694183],[-81.8777106,25.805971],[-81.5036862,25.805971],[-81.5036862,25.7474753],[-81.4405462,25.7474753],[-81.4405462,25.6851489],[-81.3155883,25.6851489],[-81.3155883,25.5600985],[-81.2538534,25.5600985],[-81.2538534,25.4342361],[-81.1902012,25.4342361],[-81.1902012,25.1234341],[-81.1288133,25.1234341],[-81.1288133,25.0619389],[-81.0649231,25.0619389],[-81.0649231,24.8157807],[-81.6289469,24.8157807],[-81.6289469,24.7538367],[-81.6907173,24.7538367],[-81.6907173,24.6899374],[-81.8173189,24.6899374],[-81.8173189,24.6279161],[-82.1910041,24.6279161],[-82.1910041,24.496294],[-81.6216596,24.496294],[-81.6216596,24.559484],[-81.372006,24.559484],[-81.372006,24.6220687],[-81.0593278,24.6220687],[-81.0593278,24.684826],[-80.9347147,24.684826],[-80.9347147,24.7474828],[-80.7471081,24.7474828],[-80.7471081,24.8100618],[-80.3629898,24.8100618],[-80.3629898,25.1175858],[-80.122344,25.1175858],[-80.122344,25.7472357],[-80.0588458,25.7472357],[-80.0588458,26.3708251],[-79.995837,26.3708251],[-79.995837,26.9398003],[-80.0587265,26.9398003],[-80.0587265,27.1277466],[-80.1226251,27.1277466],[-80.1226251,27.2534279],[-80.1846956,27.2534279],[-80.1846956,27.3781229],[-80.246175,27.3781229],[-80.246175,27.5658729],[-80.3094768,27.5658729],[-80.3094768,27.7530311],[-80.3721485,27.7530311],[-80.3721485,27.8774451],[-80.4351457,27.8774451],[-80.4351457,28.0033366],[-80.4966078,28.0033366],[-80.4966078,28.1277326],[-80.5587159,28.1277326],[-80.5587159,28.3723509],[-80.4966335,28.3723509],[-80.4966335,29.5160326],[-81.1213644,29.5160326],[-81.1213644,31.6846966],[-80.6018723,31.6846966],[-80.6018723,32.2475309],[-79.4921024,32.2475309],[-79.4921024,32.9970261],[-79.1116488,32.9970261],[-79.1116488,33.3729457],[-78.6153621,33.3729457],[-78.6153621,33.8097638],[-77.9316963,33.8097638],[-77.9316963,33.8718243],[-77.8692252,33.8718243],[-77.8692252,34.0552454],[-77.6826392,34.0552454],[-77.6826392,34.2974598],[-77.2453509,34.2974598],[-77.2453509,34.5598585],[-76.4973277,34.5598585],[-76.4973277,34.622796],[-76.4337602,34.622796],[-76.4337602,34.6849285],[-76.373212,34.6849285],[-76.373212,34.7467674],[-76.3059364,34.7467674],[-76.3059364,34.808551],[-76.2468017,34.808551],[-76.2468017,34.8728418],[-76.1825922,34.8728418],[-76.1825922,34.9335332],[-76.120814,34.9335332],[-76.120814,34.9952359],[-75.9979015,34.9952359],[-75.9979015,35.0578182],[-75.870338,35.0578182],[-75.870338,35.1219097],[-75.7462194,35.1219097],[-75.7462194,35.1818911],[-75.4929694,35.1818911],[-75.4929694,35.3082988],[-75.4325662,35.3082988],[-75.4325662,35.7542495],[-75.4969907,35.7542495],[-75.4969907,37.8105602],[-75.3082972,37.8105602],[-75.3082972,37.8720088],[-75.245601,37.8720088],[-75.245601,37.9954849],[-75.1828751,37.9954849],[-75.1828751,38.0585079],[-75.1184793,38.0585079],[-75.1184793,38.2469091],[-75.0592098,38.2469091],[-75.0592098,38.3704316],[-74.9948111,38.3704316],[-74.9948111,38.8718417],[-74.4878252,38.8718417],[-74.4878252,39.3089428],[-74.1766317,39.3089428],[-74.1766317,39.6224653],[-74.0567045,39.6224653],[-74.0567045,39.933178],[-73.9959035,39.933178],[-73.9959035,40.1854852],[-73.9341593,40.1854852],[-73.9341593,40.4959486],[-73.8723024,40.4959486],[-73.8723024,40.5527135],[-71.8074506,40.5527135],[-71.8074506,41.3088005],[-70.882512,41.3088005],[-70.882512,41.184978],[-70.7461947,41.184978],[-70.7461947,41.3091865],[-70.4337553,41.3091865],[-70.4337553,41.4963885],[-69.9334281,41.4963885],[-69.9334281,41.6230802],[-69.869857,41.6230802],[-69.869857,41.8776895],[-69.935791,41.8776895],[-69.935791,42.0032342],[-69.9975823,42.0032342],[-69.9975823,42.0650191],[-70.0606103,42.0650191],[-70.0606103,42.1294348],[-70.5572884,42.1294348],[-70.5572884,43.2487079],[-70.4974097,43.2487079],[-70.4974097,43.3092194],[-70.3704249,43.3092194],[-70.3704249,43.371963],[-70.3085701,43.371963],[-70.3085701,43.4969879],[-70.183921,43.4969879],[-70.183921,43.6223531],[-70.057583,43.6223531],[-70.057583,43.6850173],[-69.7455247,43.6850173],[-69.7455247,43.7476571],[-69.2472845,43.7476571],[-69.2472845,43.8107035],[-69.0560701,43.8107035],[-69.0560701,43.8717247],[-68.9950522,43.8717247],[-68.9950522,43.9982022],[-68.4963672,43.9982022],[-68.4963672,44.0597368],[-68.3081038,44.0597368],[-68.3081038,44.122137],[-68.1851802,44.122137],[-68.1851802,44.3081382],[-67.9956019,44.3081382],[-67.9956019,44.3727489],[-67.8103041,44.3727489],[-67.8103041,44.435178],[-67.4965289,44.435178],[-67.4965289,44.4968776],[-67.37102,44.4968776],[-67.37102,44.5600642],[-67.1848753,44.5600642],[-67.1848753,44.6213345],[-67.1221208,44.6213345],[-67.1221208,44.6867918],[-67.059365,44.6867918],[-67.059365,44.7473657],[-66.9311098,44.7473657],[-66.9311098,44.9406566],[-66.994683,44.9406566],[-66.994683,45.0024514],[-67.0595847,45.0024514],[-67.0595847,45.1273377],[-67.1201974,45.1273377],[-67.1201974,45.1910115],[-67.2469811,45.1910115],[-67.2469811,45.253442],[-67.3177546,45.253442],[-67.3177546,45.1898369],[-67.370749,45.1898369],[-67.370749,45.2534001],[-67.4326888,45.2534001],[-67.4326888,45.3083409],[-67.3708571,45.3083409],[-67.3708571,45.4396986],[-67.4305573,45.4396986],[-67.4305573,45.4950095],[-67.37099,45.4950095],[-67.37099,45.6264543],[-67.6214982,45.6264543],[-67.6214982,45.6896133],[-67.683828,45.6896133],[-67.683828,45.753259],[-67.7462097,45.753259],[-67.7462097,47.1268165],[-67.8700141,47.1268165],[-67.8700141,47.1900278],[-67.9323803,47.1900278],[-67.9323803,47.2539678],[-67.9959387,47.2539678],[-67.9959387,47.3149737],[-68.1206676,47.3149737],[-68.1206676,47.3780823],[-68.4423175,47.3780823],[-68.4423175,47.3166082],[-68.6314305,47.3166082],[-68.6314305,47.2544676],[-68.9978037,47.2544676],[-68.9978037,47.439895],[-69.0607223,47.439895],[-69.0607223,47.5047558],[-69.2538122,47.5047558],[-69.2538122,47.4398084],[-69.3179284,47.4398084],[-69.3179284,47.378601],[-69.4438546,47.378601],[-69.4438546,47.3156274],[-69.5038204,47.3156274],[-69.5038204,47.2525839],[-69.5667838,47.2525839],[-69.5667838,47.1910884],[-69.6303478,47.1910884],[-69.6303478,47.128701],[-69.6933103,47.128701],[-69.6933103,47.0654307],[-69.7557063,47.0654307],[-69.7557063,47.0042751],[-69.8180391,47.0042751],[-69.8180391,46.9415344],[-69.8804023,46.9415344],[-69.8804023,46.8792519],[-69.9421674,46.8792519],[-69.9421674,46.8177399],[-70.0063088,46.8177399],[-70.0063088,46.6920295],[-70.0704265,46.6920295],[-70.0704265,46.4425926],[-70.1945902,46.4425926],[-70.1945902,46.3785887],[-70.2562047,46.3785887],[-70.2562047,46.3152628],[-70.3203651,46.3152628],[-70.3203651,46.0651209],[-70.3814988,46.0651209],[-70.3814988,45.93552],[-70.3201618,45.93552],[-70.3201618,45.879479],[-70.4493131,45.879479],[-70.4493131,45.7538713],[-70.5070021,45.7538713],[-70.5070021,45.6916912],[-70.6316642,45.6916912],[-70.6316642,45.6291619],[-70.7575538,45.6291619],[-70.7575538,45.4414685],[-70.8809878,45.4414685],[-70.8809878,45.3780612],[-71.13328,45.3780612],[-71.13328,45.3151452],[-71.3830282,45.3151452],[-71.3830282,45.253416],[-71.5076448,45.253416],[-71.5076448,45.0655726],[-73.9418929,45.0655726],[-73.9418929,45.0031242],[-74.7469725,45.0031242],[-74.7469725,45.0649003],[-74.8800964,45.0649003],[-74.8800964,45.0029023],[-75.0662455,45.0029023],[-75.0662455,44.9415167],[-75.2539363,44.9415167],[-75.2539363,44.8776043],[-75.3789648,44.8776043],[-75.3789648,44.8153462],[-75.4431283,44.8153462],[-75.4431283,44.7536053],[-75.5666566,44.7536053],[-75.5666566,44.6909879],[-75.6290205,44.6909879],[-75.6290205,44.6284958],[-75.7540484,44.6284958],[-75.7540484,44.566385],[-75.817312,44.566385],[-75.817312,44.5028932],[-75.8799549,44.5028932],[-75.8799549,44.3784946],[-76.1300319,44.3784946],[-76.1300319,44.3159227],[-76.1926961,44.3159227],[-76.1926961,44.2534378],[-76.3182619,44.2534378],[-76.3182619,44.1916726],[-76.3792975,44.1916726],[-76.3792975,44.0653733],[-76.4427584,44.0653733],[-76.4427584,43.9963825],[-76.317027,43.9963825],[-76.317027,43.9414581],[-76.5076611,43.9414581],[-76.5076611,43.8723335],[-76.3829974,43.8723335],[-76.3829974,43.8091872],[-76.2534102,43.8091872],[-76.2534102,43.5665222],[-76.5064833,43.5665222],[-76.5064833,43.5033881],[-76.6331208,43.5033881],[-76.6331208,43.4432252],[-76.6951085,43.4432252],[-76.6951085,43.3786858],[-76.8177798,43.3786858],[-76.8177798,43.318066],[-77.682,43.318066],[-77.682,43.3789376],[-78.0565883,43.3789376],[-78.0565883,43.4396918],[-78.4389748,43.4396918],[-78.4389748,43.3794382],[-78.8803396,43.3794382],[-78.8803396,43.3149724],[-79.1298858,43.3149724],[-79.1298858,43.2429286],[-79.0669615,43.2429286],[-79.0669615,43.1299931],[-79.1298858,43.1299931],[-79.1298858,43.0577305],[-79.071264,43.0577305],[-79.071264,42.9294906],[-78.943264,42.9294906],[-78.943264,42.7542165],[-79.069439,42.7542165],[-79.069439,42.6941622],[-79.133439,42.6941622],[-79.133439,42.6296973],[-79.1947499,42.6296973],[-79.1947499,42.5663538],[-79.3786827,42.5663538],[-79.3786827,42.5033425],[-79.4442961,42.5033425],[-79.4442961,42.4410614],[-79.5679936,42.4410614],[-79.5679936,42.3775264],[-79.6906154,42.3775264],[-79.6906154,42.3171086],[-79.8164642,42.3171086],[-79.8164642,42.2534481],[-80.0052373,42.2534481],[-80.0052373,42.1909188],[-80.1916829,42.1909188],[-80.1916829,42.1272555],[-80.3167992,42.1272555],[-80.3167992,42.0669857],[-80.5063234,42.0669857],[-80.5063234,42.0034331],[-80.6930471,42.0034331],[-80.6930471,41.9415141],[-80.9440403,41.9415141],[-80.9440403,41.8781193],[-81.1942729,41.8781193],[-81.1942729,41.8166455],[-81.3190089,41.8166455],[-81.3190089,41.7545453],[-81.4418435,41.7545453],[-81.4418435,41.690965],[-81.5053523,41.690965],[-81.5053523,41.6301643],[-82.7470081,41.6301643],[-82.7470081,41.7536942],[-82.8839135,41.7536942],[-82.8839135,41.5656075],[-82.9957195,41.5656075],[-82.9957195,41.6270375],[-83.1257796,41.6270375],[-83.1257796,41.6878411],[-83.2474733,41.6878411],[-83.2474733,41.7536942],[-83.3737305,41.7536942],[-83.3737305,41.809276],[-83.3106019,41.809276],[-83.3106019,41.8716064],[-83.2474733,41.8716064],[-83.2474733,41.9361393],[-83.1843447,41.9361393],[-83.1843447,41.9960851],[-83.1207681,41.9960851],[-83.1207681,42.2464812],[-83.0589194,42.2464812],[-83.0589194,42.3089555],[-82.8685328,42.3089555],[-82.8685328,42.3717652],[-82.8072219,42.3717652],[-82.8072219,42.558553],[-82.7553745,42.558553],[-82.7553745,42.4954945],[-82.5599041,42.4954945],[-82.5599041,42.558553],[-82.4967755,42.558553],[-82.4967755,42.6833607],[-82.4328863,42.6833607],[-82.4328863,42.9342196],[-82.3700552,42.9342196],[-82.3700552,43.0648071],[-82.4328863,43.0648071],[-82.4328863,43.1917566],[-82.4947464,43.1917566],[-82.4947464,43.5034627],[-82.557133,43.5034627],[-82.557133,43.8160901],[-82.6197884,43.8160901],[-82.6197884,43.9422098],[-82.6839499,43.9422098],[-82.6839499,44.0022641],[-82.7465346,44.0022641],[-82.7465346,44.0670545],[-82.8708696,44.0670545],[-82.8708696,44.1291935],[-83.008517,44.1291935],[-83.008517,44.0664786],[-83.1336086,44.0664786],[-83.1336086,44.0053949],[-83.2414522,44.0053949],[-83.2414522,44.9962034],[-83.1806112,44.9962034],[-83.1806112,45.067302],[-83.2455172,45.067302],[-83.2455172,45.1287382],[-83.3065878,45.1287382],[-83.3065878,45.2551509],[-83.3706087,45.2551509],[-83.3706087,45.3165923],[-83.4325644,45.3165923],[-83.4325644,45.3792105],[-83.6178415,45.3792105],[-83.6178415,45.4419665],[-83.8084291,45.4419665],[-83.8084291,45.5036189],[-84.0550718,45.5036189],[-84.0550718,45.5647907],[-84.1235181,45.5647907],[-84.1235181,45.6287845],[-84.1807534,45.6287845],[-84.1807534,45.6914688],[-84.3111554,45.6914688],[-84.3111554,45.9337076],[-83.8209974,45.9337076],[-83.8209974,45.8725113],[-83.4968086,45.8725113],[-83.4968086,45.9337076],[-83.4338066,45.9337076],[-83.4338066,46.0016863],[-83.4962697,46.0016863],[-83.4962697,46.0668178],[-83.5599956,46.0668178],[-83.5599956,46.1261576],[-83.9954558,46.1261576],[-83.9954558,46.1931747],[-84.0591816,46.1931747],[-84.0591816,46.3814972],[-84.1152614,46.3814972],[-84.1152614,46.4953584],[-84.0591816,46.4953584],[-84.0591816,46.5682653],[-84.2579545,46.5682653],[-84.2579545,46.5051232],[-84.3071879,46.5051232],[-84.3071879,46.5682653],[-84.4415364,46.5682653],[-84.4415364,46.504525],[-84.9965729,46.504525],[-84.9965729,46.6842882],[-84.9298158,46.6842882],[-84.9298158,46.818077],[-85.3165894,46.818077],[-85.3165894,46.7535825],[-87.5562645,46.7535825],[-87.5562645,47.4407371],[-87.6825361,47.4407371],[-87.6825361,47.5035554],[-88.2560738,47.5035554],[-88.2560738,47.4433716],[-88.4417419,47.4433716],[-88.4417419,47.3789949],[-88.50683,47.3789949],[-88.50683,47.3153881],[-88.6312821,47.3153881],[-88.6312821,47.2539782],[-88.7569636,47.2539782],[-88.7569636,47.1934682],[-88.8838253,47.1934682],[-88.8838253,47.1284735],[-88.9434208,47.1284735],[-88.9434208,47.0662127],[-89.0708726,47.0662127],[-89.0708726,47.0026826],[-89.2565553,47.0026826],[-89.2565553,46.9410806],[-90.3677669,46.9410806],[-90.3677669,47.6844827],[-90.3069978,47.6844827],[-90.3069978,47.7460174],[-89.994859,47.7460174],[-89.994859,47.8082719],[-89.8048615,47.8082719],[-89.8048615,47.8700562],[-89.6797699,47.8700562],[-89.6797699,47.9339637],[-89.4933757,47.9339637],[-89.4933757,47.9957956],[-89.4284697,47.9957956],[-89.4284697,48.0656377],[-89.9932739,48.0656377],[-89.9932739,48.1282966],[-90.7455933,48.1282966],[-90.7455933,48.1893056],[-90.8087291,48.1893056],[-90.8087291,48.2522065],[-91.067763,48.2522065],[-91.067763,48.1916658],[-91.1946247,48.1916658],[-91.1946247,48.1279027],[-91.6814196,48.1279027],[-91.6814196,48.2525994],[-91.9321927,48.2525994],[-91.9321927,48.3142454],[-91.9929683,48.3142454],[-91.9929683,48.3780845],[-92.3189383,48.3780845],[-92.3189383,48.2529081],[-92.3732233,48.2529081],[-92.3732233,48.3153385],[-92.4322288,48.3153385],[-92.4322288,48.4411448],[-92.4977248,48.4411448],[-92.4977248,48.501781],[-92.5679413,48.501781],[-92.5679413,48.439579],[-92.6210462,48.439579],[-92.6210462,48.5650783],[-92.8086835,48.5650783],[-92.8086835,48.6286865],[-92.8086835,48.6267365],[-92.933185,48.6267365],[-92.933185,48.6922145],[-93.0051716,48.6922145],[-93.0051716,48.6282965],[-93.1225924,48.6282965],[-93.1225924,48.6922145],[-93.3190806,48.6922145],[-93.3190806,48.6267365],[-93.5049477,48.6267365],[-93.5049477,48.5635164],[-93.7474601,48.5635164],[-93.7474601,48.6267365],[-93.8135461,48.6267365],[-93.8135461,48.6898775],[-94.2453121,48.6898775],[-94.2453121,48.7554327],[-94.6183171,48.7554327],[-94.6183171,48.941036],[-94.6809018,48.941036],[-94.6809018,49.0029737],[-94.7441532,49.0029737],[-94.7441532,49.2536079],[-94.8084069,49.2536079],[-94.8084069,49.3784134],[-95.1192391,49.3784134],[-95.1192391,49.4425264],[-95.1934341,49.4425264],[-95.1934341,49.0035292],[-96.87069,49.0035292],[-96.87069,49.0656063],[-99.0049312,49.0656063],[-99.0049312,49.0050714],[-109.3699257,49.0050714],[-109.3699257,49.0668231],[-109.5058746,49.0668231],[-109.5058746,49.0050714],[-114.1830014,49.0050714],[-114.1830014,49.0687317],[-114.7578709,49.0687317],[-114.7578709,49.0050714],[-115.433731,49.0050714],[-115.433731,49.0671412],[-116.5062706,49.0671412],[-116.5062706,49.0050714],[-117.3089504,49.0050714],[-117.3089504,49.0659803],[-119.882945,49.0659803],[-119.882945,49.0050714],[-120.1208555,49.0050714],[-120.1208555,49.0678367],[-121.4451636,49.0678367],[-121.4451636,49.0050714],[-121.9311808,49.0050714],[-121.9311808,49.0656099],[-122.817484,49.0656099],[-122.817484,49.0029143],[-122.8795155,49.0029143],[-122.8795155,48.9347018],[-122.8174629,48.9347018],[-122.8174629,48.8101998],[-122.7538859,48.8101998],[-122.7538859,48.7533758],[-122.8712937,48.7533758],[-122.8712937,48.8153948],[-123.0055391,48.8153948],[-123.0055391,48.7529529],[-123.1296926,48.7529529],[-123.1296926,48.6902201],[-123.1838197,48.6902201],[-123.1838197,48.7529029],[-123.2549305,48.7529029]],[[-122.9341743,37.7521547],[-122.9347457,37.6842013],[-123.0679013,37.6849023],[-123.0673747,37.7475251],[-123.1292603,37.7478506],[-123.1286894,37.815685],[-123.0590687,37.8153192],[-123.0595947,37.7528143],[-122.9341743,37.7521547]],[[-71.6299464,41.2540893],[-71.4966465,41.2541393],[-71.4965596,41.122965],[-71.6298594,41.1229149],[-71.6299464,41.2540893]],[[-70.3184265,41.3775196],[-70.3183384,41.2448243],[-70.1906612,41.2448722],[-70.1906239,41.1886019],[-69.9336025,41.1886984],[-69.933729,41.3791941],[-69.9950664,41.3791712],[-69.995109,41.443159],[-70.0707828,41.4431307],[-70.0706972,41.3144915],[-70.2461667,41.3144258],[-70.2462087,41.3775467],[-70.3184265,41.3775196]],[[-68.9403374,43.9404062],[-68.6856948,43.9404977],[-68.6856475,43.8721797],[-68.7465405,43.8721577],[-68.7464976,43.8102529],[-68.8090782,43.8102304],[-68.8090343,43.746728],[-68.8773094,43.7467034],[-68.8773544,43.8117826],[-68.9402483,43.8117599],[-68.9403374,43.9404062]],[[-123.1291466,49.0645144],[-122.9954224,49.0645144],[-122.9954224,48.9343243],[-123.1291466,48.9343243],[-123.1291466,49.0645144]],[[-82.9407144,24.7535913],[-82.8719398,24.7535913],[-82.8719398,24.6905653],[-82.7446233,24.6905653],[-82.7446233,24.6214593],[-82.8088038,24.6214593],[-82.8088038,24.5594908],[-82.9407144,24.5594908],[-82.9407144,24.7535913]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAA2CAYAAACCwNb3AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAcppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGFpbnQuTkVUIHYzLjMwPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgofPyfmAABAAElEQVR4AeW9B4AURfY/Xt3TEzdHYMk5I7KICKILhwE8DCe7eieiomRByRmGjKCAIHhgjl+PNUc4UVZEggKSdsmwsMuyOU0O3f3/vJqZZcPMgnfeHf5/BbMz3V3hVdVL9erVa6HNhEciCxS7VtBJKvsDJlWUxCjFa8tdk+6oD/zU1ZOMhyttYXYmK1EhMlbgfnudQWgd161y8+jRnhDZgt6+ZdIkY0nU71N/ijlFyjBneAMNTX/3lSZH8k51u1RR0i3KFHZTvrUy9qy13NWvVbtebkWJ0agq0yusdH9+zv5u0Ym4YgfCw0wHY6Lj93zw5Iw8fz2C2WymjxKo91q/U8xmwGOugufhDUuaFpcV9XJ53T0kSUo+VFooJIaHxSXGxifbnE4lwWASL5cUHRA1YmmEVn/Crsjfx2gjD26f+dzFQJu16wzcv4ZvAWU1AXhUVRWGvrSwvdNj73uxorhNpGTofryiSDIJGm2HpOZ9y1wOKdxoYnar9ezlyuKzbSITbSqTf0mMitvfuVW7febBwyp5mykpEtuxQ2aCUIMOhEaTH/qkQHEOEgShHE801wDg9ZNFELwiY4lhXmFWxbqPVzIgFquGWARoYCJ6zRsz/YS9eLmLqYUCE6SanVDQcZHZFK/S0RQZ0a998p2bhz+zK3XLFk16WppcM2+tK3+bzab9dXqx4lmuoH7G6yc8BHQ8+euXPUq3sNiI/sm33vniX54MVr/AUlNFlp4uY+LFQatn/i2nrDDV7XGnWEQlslRRmFslcFSmEUQmW0DSCtEDkkYjaMIjQP4K00sSixAEZnSzypjwyB/ijNEv7pix8jvKVpv46F49qQY8dzw3+eFiS8UTZV5H3wqmGB3AFpfHwzSihsn4ZjYrANMIzOtVWUSEwACHiH9hBItXsbUMiz5q0Bs3Z8x68U3gG8Etms1mhs81EW31+Xj2/15u8ePJQ0MdLucjFtndzY4JLGcKk71eJogiU1VUSeMjAEhZVpnBIIh6I3IoLAxwxSoahju5kTrjBze37v76xuHjj9M4ABaCqQoeSRZZnKLX6ZnL24CJAo29L+HndZcCsAUAAzKoJgNTLe5wfivPUgdqS14ev2cTvOF2o1b02uwNGQawdhIxcEzxMlmnZS7Fq6/9POS1v02rIKN+CVTmRP0BMK7QFq9f9TJFr2Gq7KlbPzghZhP/0+XUF+c/0Hn248suM1eHMsDE3G7MiwAABUUEshHXlAVZNRjCNRgS0Dv+qEx1uj2YTgFI62Iuqk9kkTkO75A4Z+WQ3gvHfZPcptPYDY88fSGllkQI2jcqj7aIWAmeboDnEuAplQGLB/3i8DBFgzyyCiIBxmvDIjWEWVoUdCqKrLhloKnMLCB2C+ik0F7SO8yl7d1yxrBpf14zd/6Xk5Z8CGRk1RE/KCy4mboltYpZ3WoeN/Orw7tm54tyhMXtBAFgFDAk6LpK40NEIAJ+ozFSQ2oApgMPMbser0Izb0MZG7IC6CaS4J5qObFv8i2Lx5n3zNu4mIgjNRVtod8EC8ZTcDMvuqUyD2c/CrCOPsSKrrdPADb/N6bPrQHsXoFh1pCSImqTEItISuL38Ac4RdOH/tII1voncJYjYAyIO0uU8dqSv01JEWWR1w9YatVN17x+jLEqY9xFQvZqyYeMKk1wj/mjVu68fPrjLE9lhzK73Su4vV5R0CjAP8J9AKZKQF2S9JJTVQQXUNCFqaLfdI+eUz4BhVBEofIlDoey11Yw6LvMX44OXD+vawbUJSKSahDU/AkuCrygcVP7LRy7cmfB6Y+PeiwdSh12r+hRILUFFXjI4ZH97eFbAxgg4RRmg5Sja9As2uDwiETAohe6sNPpzVbtHQ8VZ6cPWDZpM4idIz4RSU0grlz5iCNdNn/9bpOOsx//6ainbPlppyXCYnd60EMZRKFidDSB8aE2MRoamx8eECvzKIpI8ND4YCwlEWJGVETF63B7TtnKxJ/txYtuXTx+16a8/SYiDhAK56KiqoCSiFOAygHSH+OjchkAWAXZi5HHyISUIIFhJlGPAaREncVFrQ/q5GPgyxMo9tu+r1a/jyHVrRMzRjdbTRu2MdNbOa3Abge5qSAMkRaGErQoTO5vSxy7feWADCAXj+w+4ayIyL6UvWfEO2vbE5EQ4gWpVWBmM2+uzYxhG391l00rsNkUjax4UQ1xDvpw6glSNuQtVEhcAcQrSBr0Ldda6f3eljdyyJrZu8+rqoFU2QBSVq8kQBxzvtjS+Lv9Px077i7vU2FzeCTONJgWCE9S6zfBQ51DGXw4zmslUaPKDrd7l62g73tvvfVPah+wUBbQXSCBewV+Xu/fYAHgCYpXlURje8HA+sY32U0wpw5sRZ2qJ/072F9PtVWPfnv9yaNGaVFc6b1o/OwigzLW5XC4RfB+dIS4YNBEtykLvmX6gMNx1SFoZtykjJhcHRiJ+4xiDTt5/uR7lDc9jasRVF31RDih3r746XVnRPdYq9XhAa8lFSWkFYeLs2rw0PxcQazqVft+Q0hLQEqJWR2ub0rO9Rr13OS36AmQ0pfhyl/BDyP7cu/WLT9WXI4CIC6wE60XyB0KYYn7EQw0NvTxDeeVSmv/ghILDsJ0zOlxHbQW9U1Z9sxMypMCY8CVfpCAv84TAQiAsQT0irHGMKlnWMLOlHY9222d9+LnGF0xMJjXeTeqgZelObB5s2fYaytuyLWVLbVUWsHSBHDF0HMBJIdAgaKmyiIYhEbVajRQHkRonRwhqlVe5yfK6Zhbdp/3WJL/+tKSxygDIUEgI36T2iU//PKSBy54LROY3eEFonGJEchT+5sQELCAW3lFgoVggiYlKqqCZTDRVfAEBGfIqpdtDvdhW3HavS/MHoacih8GXigA213PTZ+RLTj7QP11oz19KMLw4wcWBjLDarIKHhLG0A5kiJlQRblE0Yii1upwsNPlhdOe/eSN6AxI2dB6aPB+/c/ukjLrRSdVrSS1l6K8rWIbzPxm6soX9hNEWFQxsznkZPzPgL5Kw+lZmTzHpYL853NVF1mDvNDdSaIETdBPyIwgJphMrLFoLHeJ4gmnwJwGr9zIpnrbX3TbgZIYI6gdwSog8QrVRJPnsLELxbljcPkWkKBK6hJCULn9F08ty3ZZAI8kAJEJ7+okugkVX1Z1oqa9IYpFSYZLxbLnrB4EHmEQOhaqzuhsu4X0GBkaJBkT6iQiEp0gSYXWCnZe0ax87cSJz57s0AFrelriMJYBK+XML9+L2fLj19MrXDbAI0qygppqQRTQr/AE+CFqWmjDWEPJdKlYkc/qYTvQKkrHE15rtBPGDqjaCqmstesg4GA6BCEJHouWxR7OPDwCt1Zf9wTCRRwZDmVFig8Ll9rronZ1btd95Oa/jT5BnRq1aZQ26XKSbE5Pp8s/VjKnu4dvfqHdj2cPDmQON1iqJjRxQGUgztwjIrG8fVKLme2bdP/IPGRIMXV4h6pKmzetGCiez1ybrdrai2ReCWGy53q3W2aXHRW9xr2zoc3GR8efMUP6ZkA4E4H0mDd6WKantAMQ2wOWGxQejp/YTGBaQXNrRMN9PVp0WnRrcv+daZ07WwmeV7Zvb7Dn3C99ThfmLdxrKejqcblBJCwokcCiAQOf4AGDaPRO+ktpKP5a/4ULNSn4kQFt4fDpQ8PKtUoscwIeFfDUIg5k4wnEoej1Ok0PU/zOlo2bzRvcJeXQsN69+R7H6q1bY7cf3fH40aILz+W4HbQmA20HrwmcRayElatMqHwQFfsIhNokkiUqp8/1kgJSA7JY6qCPltvEN5n15eRlq34CgKS7D/lrkmrub/Zt6AUsQfUC/5/u3W+v/1LZpbuLNaThk/SAhTRIIh3aq8hi1/D40sE33d5zyb3Dz1fLJvQHp8X11nFbNqTsPPLz6WPW0nDsitCOSR10AoSwP4leu8Sky2X5t6HcmQw/cVCdHtU93eXlZlsxlEhGHV4Rmy3Jxrivds3f+OddKLeOCvvaU0cOHFiA35/Qp8u8EVuOqRWpqkcmGIMyZEgGsczlZOWSnbj2ayBUhaX6YL9YVDiwFGZrvi4LNbywNGNRpmkhmf6xZ8HGh/egkvfxQaL+q5PvvrsU36v/vHZ2sT3/3FslDrsCI1ZQgqXRYW4vc0ieHpM/fb2pCAEKoSzTfhN2d1RYKtB5iPI6I0vN/ZcStc23m2A4iQsPl26LarL7js59uhFxEAijNm3SHkg6RcThXfPrjugR61bcAAoH+MHVgf8S2GjmGkat1iTLLvdtFtlDa6ughekmdhOUOKhVLWOT5hBxtDA/biCu72+Q97vJpFTjxrTx+S1ik9ZqDUZSF4Lit695US2DmeNs8eVmNDbG2BKukt29fOZNpR5nV5j98TS4moaMqEKR2jJ95Z9vuYsQGnsUZh2pRfhJ1dNuvTho3QS+1zPqnqFPddSGV0Ifk3xlqUTNhA5AiiisyGG/cdimpY3wVGHpTF51eFsYiLkP9AcMTjWDUrXiGAQY6BVNG63JPbB///H0KNVcAx5mVvlYSV8+u+ztFrqwnxnUMN/WSLWK/D99kkWQKwXFcPLsmTaiVhCiI8LDWJTRqDcYjRLp+DDaY59FhewTvFho1ZrSupX+nncg/kCrEKeiIHU0xSm3xbecuXPu+r7rh43JIqlh3mGWuBsIdswnvb2+Z/rnW07+cPEILfBY8ujRQTnUFfiC4uCVx/+1X1fALHDbmnOFiMvwugAAYiIAKRrbHs0aNfyccjzOWriBhJhLv8AHc7jlFt9eUKwx8uNGfPtBqWaBqVkvYQd251miKbwjPfnm4Bd8YByCc+glEYxegCG2ZpGqKzzwag0G1jKu4Wvmu/5S2NmcqktPM7uxzggUUQm2byaud9Gzib0HV0YbIzYzgx5snv7XTT6kZF6HRjWWlFfcHMhx+Kefm5TarTGcJEMxP5IeOokl6iP+uWHgYyUshUnp5hrwMLNgVoA7vI/Nw+K+MWFfHAyAxq9O4p3ARnIxNkTPFeVqxJYxCa8PiG258e5mXV9INias6qgJ/6CjIfJiQ/jTKFBtZOw0wJ6GvTj/ZNSp8ve5QdDjQ7wLi9Bw7W3RTffendy32yfPLnmOWiDCOHDKJzWIWw1dM3fZtuO//LLbXZJ41mUnNypGUoW+r+uETmKfkLqLPn0RD4W4DXFIrA5JItRJWhp94EDTsJiKOwbegVUvYwsWLKjTz/TULXzCW7VsfSFaZ6gAvRHL5WzdP7ZcRPGGaaihKlR63MStGXszmyOuxW4Dt5ZDwsIBVGVNM1HPGic2+YiKduqUGhTp6VkCK/IhocC2x3DvHp+ptDY8PpgE1QmI7R7XjVSWUqGlvJlghHWa1jscPfjtGn+wZlc1ko5l2yy/0IPkdj5CqJEJF60GlnFYPFpxN8QSRkbl/hTBYVHVaK2O9WzV8SZp9+z1L9eubMOOHeGf/rqtTwerdVShtvLBLNkmwRUFLEmEiST4RNau47dck+kSSp7CtDqpoSxYbghLmLdtzpoXd6ISkhqtBg5UzP3TSIdlE7as63X7kgmvHnaWdK2wV3r0hjCtEXtP5b+lwesk78nLeczicQFryD2i/kRbfY3j24dERtTBicZ8d1pph1mPncL1TbASkYcBV5+q187VL1XQFNtt8NPgyUPqzKtb3msDoy2KYlfA7+JVvRzNE0hbjBT1l4Y9dv+B1x6fxNJTU0OCnsJSlAwstVtFJOWcLy30YIqx5Q3vD/ytqpegpiswYbvi1f5QcM4VeJZVVuAppi6AcOpwhECmQHHsi9OtgOdEtcf+n6n4TmftW7TzZlcUsSK53KtIZDEOUrOqeuxeWSorq9BLJAYzs4tE9mYGLXb5BIzv35+sEbSj+M9Rb6+92XQua062UDmk2GmHSijC2hp60whlri0BLr9hwItFkBRpNIpNmWFr1+ZtR30wfm4OVZICuzwGWD2QtpnDdf+auQt2HP3VfMyONZfMPEbRoDqAFxoRmiClIL5Y/P51+kfr8cCRgSboCr7UBhXrDzwUWYndEvvl1+mReG6vnSdwHdh1LrDZ5YjYKKY4XXpy3KudYMORnGDMsaIp6pz/4eG9+9s7ZW9DqHtggcH1fWCgQlt8UcawrP5CSyIu0EzovQ7zArPKzIyVll7OpU6YwsM0vt29uv3FxolUqZfYPbFN+37lhwlrC0g6/0WIL/RO8GIN1zYirttl5MnIMAfN2TkrSyU7p+xwZju8biZEROrDMa5ByANbRbIUGxnGEqIidFImTI1UI9QWcep7mzpl5meHaXUaTaw+qqilLuGSefgT+/D43j+vmzv0QkHeO0edZQb4FcENglwgqOS/lrA5S3tbCqzUUhuN0ZNgjHp69/yXNtPOQDJMt61iBip+T1p15JurO2deOPvmpwWnejJs5EgaiXQSER1VI/SRLNotlnOsCeKL9a9B9x8sVW3M4JKtMYq+tWsoTABnAIoI3suy0/TrmaMDANn7PTfztZbPelcNVJ+aJbBBbbq+ZxO9hyEGHGguCIUAqWUlXK8z7uT7SKijwFYebyfsBcLj75VFUrX6AQtOF8CZk6kH+G1zCtxSMqrlqPXTj9w3J9/pjck5+LzV6w6DixgEGCRILajgOgDlmpliJOPeQC1hBqNY7oF/F19ehaQUDbwzWaFUOYg299Y+8EQ51kA1PHKpPtzjI7/m0w25D/T7y7LOTIgig5RaXZoFGobjI9xOw+Ni476Q0jYt7X+5KO+xtnOHJ+tVsVO54hG14DqwbFX8qjMU9l024ecoKfyDLycu+XDjkR+/e/3Dd77b7yi+UXV7PXzjhtTKkLAHWrzyzRUBAIbdGikcA9CM6bcP7N570rqHxx5DLhFOa0JR1kY1fbRPavRbOnHCP7N+eeECc2NmvF6dRivCIQ6dVaRWkdGsbXiDtU927vViGvsHRiGDS5orrV2HvzBWWHLwdHO/uyt/PLWvCEgZidUC+lRN9fCDTrNKfodFLuzwFufM26+q6T0FwROQFv5svi+fmiW8P3H+SzXu13NBKizt5oczqYeH89N6fI4g7eJFibWIiLOSKTUF/yDh66ndx6CxX0P8a2Z9Gas/C7jkd4lvarPmnYTnLVc2gnJ7SDVohKL3hNcerj/00wzUM+vdkn1kLq9S1fx1cwJh6ZnuT9Iz51Rvr77f0i/ZJ5df0Mk3K9hdhTM9VQKbGlZUWimKuZ1RTHC2jWKlj7SfOfzEt//8buT+RZt79F487h8XvZa0vLJyGdwc2g55btafiIZASVho4D9O2TRmOkfTsPgpe+etfzmLveWXGmUkNUiXVB9at7j1iaLzmw/biwZUum1ctQNBCm7sBxhNRrGLLvJs15btR77+2JQd26hp4kpXLCl057pNosYne59o2dLZc9HYo8xjaa14sLdHDpNBEje5Kqr3nNveYeayKaQp3E9uNVwF9e9+VyumEvGc2x4jhtbHcVQCxwBo4VqU5fN2/i7/vNbJFVUSI6FmUxXhjsysLvtBai+hU2aojNXA8f0kWKnN+mDKwPNUrDexrpFhemK9OnY6fvzyubI8puJQmIA9iBCsmPxVXV52Xq2Y2X3+qIOHFm1OB+1K5hSzAslB+FQjEQFa8trVCwvBOiQpSZZK3A6rip1VLHHsilZnitPpJZOXlUZodBcahkcVV7isF42SvvsFe2nDS56SH/ssHL9+97wND/35hZn5Lpd7YokHqijWAzjAQ6ZhLqQDfJATBawMWPPBWwfre0HRRhtNYpKo294uvuXITyeZswG5iMETMy5jrTHaJwFSVkwcvzc3a/UFwaNDx2F4kDRwV1YVDXbT4U6UHNVk7UvTV81sKwguNipZyzbtJ6K+5smqMVr/44sG+oi9Ea6y+y0uaDb1SGLghuR0ueTtpefu67vw6S3PjJjxWFrTpo5giOD3SbuqND2wGZ1PSefqVK+Yhk22l+fysxN1MArZCDTMLzOCITpNOv86KBV3iV6vnjLqEnLQQumbCSiexJl3pFXcMO/Jg2Cof1Khc+BuHYODPy9QTFQqvR4x2162ZfDKaU9/PX3VBjPWI34JSTK7Cj8y+KG6DH/R0F+kR4pGYmfovU6vM7XWhh3pG9vs2ZQuPTpmLX+rx/dz1t15YNHrT+2a/3LPnOf/0aR1XEIXtOKcuOkF85dTVjzTPizhTzeYYs4nhIdpZQ3cjqHPYQwhJEio0F4VllmgDxCHGGnSa1vrwktuDEscn7X0rTuIOAh4UqkweOAYGd5H317Vsvu8kd8eqix66YLHphPdMihE1Higk5hMBm1yWMLJGxu2uHHbjOcnEXGQmwkrgwfvdUMcVXMQetRrZenYqPFXTRRoBIoXi5HQFELFyKcJ29vyT47C1FWbF2U++eoLf4KG4+Vckk42htorCA0NVrU+xDHpjB3JggUOFxQILtowuZGilrU2RIZC1Ppa+k3PiGlSAb3W8EGEXgeEAlaFSIS/tHdHG9zlXhc7UJn3Um/z6A9mbX8rjtRHFFNRX9B1VYgqq25LDqZGNtaHsWbayAV7zBsWna16xAdKYljNsEzfJtT/jZpPa+jpw7ZsCB+1aUXU5tEzv9+Wn991yRsr/tpEY32yzGnvbmFeg42GGDMaBmNIGCY0wRBxLjLC9O7tbZL/bv7LcBxJZQIAxiBnqOl+C9WdK6eN3Z15ZM1Z1a7HVr8Hbj4i7II43SSL7SJjWfuoRi+Pnbpi0mAQBhEWierNo7lzXQDl/K1e6cB//1dQ3KoJRrUsgyZM0D8//JljtywY8yFTHEMVl0Im0KDuJlQJ7ygdlsLRwV/chS0rsj3b+5jHru/TqtuS54ePLSS1hBAh4xq5NQfMLwTyLGXw5MOGNqFi0OQbXnj3gpmaAmMeNOfvcRN94IAM7nD723n7P55nEYVmIF5iuJxwgrVBzyBJ1AKrRS4yeh4q2Lat/4DlExd8N/PFTWAuJEWwxk2tcqEPVkfte1JnQ/SeyPCoWdtmrNxBD8nsa2gUA3WHU54HxMGwMNQ+vH6i2KTUIjRt1VkzPm08d0qj/Hc1bGjD16v0eeL1F5rm5l+68bylNAq2W2+rqDhvUmzMkXfGzj1LAFID5AZQBIL3D4A6/r2Xmu8/dXTzLxW5d5ZhrQFB5KFVlwdrDZPJKNxgiM7u1qrjqE2PPvvtF9Oe4wiAatQAEvQyjx5ThrPHp1/44O/cq9d/VBJ5rvsU3i9OZesZ69C8zYKi07ahZ9RyrQYjgEMM1cioZjf8RKKVVFE+VVEinjLpJ1hP7XtyyJqZyx59dvmKNB8iCECE3+T+X+ay+4REzeaqrgIAgUszA/uXmHFVXdf4g3N9c1qa+5aF4xYVOYteddnh9EgUUE8FEDOURVIdHs95wZnocAovd5r72JN3rZw5b9v0FVuhfgIJmcbcGQ4oQdYntauW9izeNInfhIhO7TQOHJ1vyCk7zp83rP1403155cUDxywa3T+3olS4ALNsg2MHNL0WjKqINoXtjo+I/eT9cfO2+yvVvDFiSg5+04enbP/3u+PmCeQ/FNdIJ6ePNnOzMj26Z83MUd9m7nvxlGw3wFTn1SFCCYIS0FxoEnRGlhzXbMP8KSun9REErmunpJhZRiYWhiCCOV+81XjfsV83HXCX3lMhO5fzpmLO0SSHYoE8y/X1pxNUS7P0xoipWXesmjolX/C8YLU5vHBO1F6tE9gE1GgkEBPU0CPuUlOmbFuSPWfEiLSXFi3d8vT81/k6JCUFC9WUoAvVK+PgEyFwhvSLqCtP6v7CBhi0AoPBRyB+4VM32+90hzNBMxPhgPhaz3kj0341Vtwpk886HW6qJ3FdDJIY/otKfrlVzteKPa2Vl77pYR71TZQhZtqOmc9hd8PMGKmlCzL4WfZQ1VFPObcpyuqME2a+CB7DXl7+4PS3lq3K8dpb5sOTEvv/IEuYfoG6uR4Hy1UdQEND94YVheNaz3jkwI3N2i77cLz5Y2pk5OZVD2c7Cg98+8yq09UaVbPNbzqzcWMLDu289vy0O3LKC6fvK7pwW7EDm4+QGhKOCUOzwqLIIPUNS8xp3bTF8DefmJaxdeoq7tJ+6nJSldS4dcnEB9L3fPfqKa89FuCzSFjEuF/zH2EfpNqg8J8+dUj8dtrzq29bMrHPLjX/QdnhcsMnTcdtXQHWXbscroHSeEqIICmywysf1ZS3ys8/8doN80c80alhm7n/N272D+aMjGtSu7Bg5LUFaYbf4mAgCzaKoePVI0Fo7ZCZWQ/UoVrw3Td37lyDs5uZ798dXe8YVrb/i1/O6rzNNR4VuyOqtj5JQrWhT3QYEschVTmnsoLl6G2Dmjosg25fOuHNbm1vnL4+bUQRqvcHhPAFafBBceWvBDEjcGpKT+eesVu3f7Pup0vHHz1vh/OGLHi02PsENKBHURuF8C4NdAa3Tqu7iGNblXbVo4nQSD1OluR9NHDZM1+2a9Pur0qlO8dl83zUY8EoS5Sg2WbXas7FR0brC4sKaQvjxkXzRtxazjwdc3G4B34/Xh1UCjc6gnMBmg7RcayhKfr5V2asmUuLcFprkJvJZh/hKrTo+ipj55oTtuJHi5028liwa416k12mg2Z/3ARjBk4ICWzn3HVDsbj8PEuqHFJpteE0G05Q1Yu2vj5jt500H5hbBLnIalOKdK5biy4ey+i9ZPwbKd37TFnx50fKSK0Adwpp0OC+v/UtvfkIKwzno5hJbwiVk86zh1xMX8sM+c/1UGsc/4Gf/JTh8rS0oj8tnX2zq+LCz7kaWzOsKMBEmO5qjfmf4ywahggHanJUm5RjcT+e/2vZ0LQX5y/b8syi5fWYzBkRCK9j+N+X3PfuZ+9vOuCqaICzwrIRZ3dcGHEEsdA2NUWwhobIH2D23ZwQ3XDv3U8MvZwmwMSINPOnbYk/HdjXqMBe8UR5acXrI/9y34jPM/akZJ069tkptXJhCaQCKyghxzjf1o0b1wocbMCJsOTSubUia2g0MhgKDndq1PaZd0ZN/6HtzLVVUiMg1R57ZdmT2zJ+WHPEUxkBdUzWI96RCwEt3NiCbaLXm3IJGNi2ySzzR0sgDuKafPd3r3nTvbctfvrVXTrvk16ckQC3plOG9bDsK72l/ShIHg04midPsUn5gvxE5U9bBz+wes7oTyYv/QxmMOCvr50rpa7tF5kkmUarKbBUuAut5eepVBbcN6pKQxUCN1ZaTXlwZoHKegC9wQFDL6iryvl/kJ9XpaKYUlt1OZj+zOIVuE3qMsfNDEhZ8q74bvSygtQNK2/OKTq/e6+jqKUKtRwqH/yPr96On1AomomKmETek4IlvKTo7LIBSyfe36lt14dfSht5nqtcteKqSbM+fitu/5nDz+/KPfn4ORu5/Ekeg06rcXghNySdlGyIq+zStO2Et0bOfNvfF/b6CL5sIS4ij+17F1ml6PPs6i1bjF9+uyNxDWIv4brfk68+f1tW7pkxFcw5yCZqoitxZsapk5heo9HpoB800Ohko1b/U1xY5GvfTF/1Nvdf8G3wMPNobsVQEOol8suff1z//cXjw3Os5RSSB3suGhGxq3CQQW+41ZhwuXPrlp9tYh8wMzZ2zGj4j5iAuLRW4ESyc95LT93/wsyzZ8oLlx2zlUp04g4UIiGCC+fj9fXPhwiQ97QtBX09izkaOMtzP+23ZMKyH+eun1O9nbr1hK6elAjEWRDOuu2Vq1aNJrcnhrquEEhmKgqnMxxxHGqL1CULDuzLExO8xsT1JY0Gu9RqKxQhAqkBDBmNUrBeSx8/PX+Hqnaas3jsO2c05UMLrdhEhusRtttCBpWoDgLGByYQHOpgGqXYavV+77T1unyo8vi9G+c/+Pm4RV8hL8frQBlp+6+73vmV2Qd5Ky0eHRzRPJD2cFoTm4RHiV0iGnwx4OYBo6b3vyefCsICpUlvlKcyn4WLryM3wcIFWzPLcbnEyWlpJFUuBCp/7ampO/F7J4VsuVSc0+d0fk4UNnLcjQzhUuPwuLJ2DRofWfXw6LOB/HQQ6tTly8RNgf2M3bl6zpD3f9y2+bTqaqg6XF69Ros4UAhvBXWsdUQ06xjd5I3RUyY8PURIslOwL5TjMAXq+6N9A354CkLb6i9oPp2yYvnYd9ftMJ469topT0WnChvWajh1CM5MQRSumqCjE4LpcAZdPldRouaHu2YPWD65+/ezVt9D7eDDibFmRVfwveZ9UCcQy4v16A0RCfFpc99rN+eBRw5hDwuWspqRJ+HcVMps8NaSVSdgDaWK1a4ePADTqnoN2KmEJ2rwlAG8IC+B/ohLhxypd6+c9vhlofiVw+4KCYGvEL0E0SYhRYOXrnkXIfywPBF0Gq/gOe4p0dsvyV8O37hkztvj5i7j6igObFEJKctaZvLCUcQAlcopexDkFYsKfYKla6M2z7w1bvYbW9kL1Z0HuQVqxpa3m2XmZD3icrvuenH+iKRchxXAwUQ873FNpNZ4IiI8Ymuflh2/Nj/wRDY1snRI2iV8VW250kXASY4lM23KELMmg2V4A/FwZ3y7JerggT2vZpZeHHrJSctv0aMXtBqXjHPbBkg1Y3Rej2YdR78yYsqXX05dzhehOCTDiQqZ/9CJ1C10wEseAi8Pm7gXBNN10Mpp888qebNPq07ovbKMdSGc2eDeU4PHBu82XK/BVrSqHdFDvpdzB6csfebrjDkvDiYi4RuLaWm+gldh9tDO4KSlyCYj9tJFIYEKBbNiIZPE1Wevl/ZzrglZqS70Gu6nAAIMgK5DJVov+ImbbZ2+6s2ZH723M/zEnjVnbaX35mNdCkqDFVDEfirWZVdJxGiwwajVCpJ8wVIu7C45v/S+tXNLPnt2ySZS6UhqSVhky3YEFHTKLm3DiEjWJTzhq3v63jZy0m0PkhjVpGAR73MD2UxqqHD3qqkrth3NmHpCtotONyxcZP3wi9IyWthLlrZRrvIhRaXFnsHPT3uvS8sb5q18cFjulPdevivfXlnx3sgZVd6aHP4DzJNxwHeufNn2j+P2Hz847ssdX0/K9FTGMI9X1mKMPThgROuNZmGRrH1kwlsjn3jq6bREBAhIYVLquC2qz3fHzKv7/82fzQe4SgGCIcI3j3tn9btJF86vPucoH5Jjo/Nh/LQnnWa/Kpl4oJoBaXSy0+k6oi0e9Kflk5d9N2v1bLawPxA4gYsNEIB/WRx8BGmaaVnghprsUOA++z9MnLjRPhlxVjz4yDn8vO/B9eb7z5fkrTzqKGvr4dFL+Lhdk7SFMqiBe6ByprhArbRY/566aUlm+ui5PHayZCcvKZwN6KpPqOjQoOmU9AmLXtvOXqwuNThnfnjtopt7zB/x+iHZ1km1Yv0lYi1AthOSjdxNhoYPo4x4rBVOh/qrYtX+Klsfz6soSRu6fuHQTs27Hs7c/dkbty8a34BpNf+AC8HppOg4I4hMLrNaYnCm//Z/7PzqT5dke2yx3Y44DdgSod10FQxBpxe6aSPzOzdpNeb9MXM/+3bGmurw+dQqEO/143Ly+2BPBklF9KvzwjTtxkcnn0Gt9963zjywSenltSfcFZ0RmhQaCc7ngC1x/K2nWTLjgtnoSysq5FOKOCv15cXb08fO+56fB4I6gRMOJLfqT5heLwxhdrfPalilEtQsRZIJxAbrSbUNT0gWEo1XJeaaVdV/RW4kFLIUah77aIL5U+T+9J4XZs44W3pp9gmPLRJ+fDIPrH0NahckLTRYrbdQcUsnLpx5B5vj7chrWmokGSJv0IfvfvCuB//ybG8ejUKE1PA7D/qkBiLNLd1bcHJWtgciTIbfuUarBdVp+cFlrhH4OoKR4T+gClIgEgrn6DmkFphckvC1Z89Xz0Ak3pVsfup5l1dYVuq1shOWQkhthZXhAIsVh16YCxJJ0DgwjIicx3TwKGZNEDmxbUTCG08O/NuzPIxLQGrAJR4iUDZ/9UbDvYcyE7cKwhGuMlw3fln1T+41P0V/MsF2Aojw2UTzdpTtAheKMZfUklUnZWc4XHMowNtVTcKQJPD706o5TguLz7+4CvUkY8eML2midXAf8SKuFlA4GLHxe+BBFAe4POCvH6QTWEHpcWCHifAWwsGrqhyqh/xJiUyqbv0uPwJrIOCsRAzlqykrnpvx7aa/h/34y+JKg3fCaUsZ9tkgTXhc4/qbBJFI4ADu0zpnixFznhqH3C+Kt7boOPnHBS/3JeIgvcvvPOgl58GHNiy6CQh9ZJ+tYFa2rVLVyFxs6UAc9XaTBpPy4DyYTo/gecdLCuT91twX+yG85gHzq1MHt+/doYGsec5jd2RX2KzYDoEQQCER0TjC4F/SQGeUmkv6gt7h8R8MaNejz46560YQcXD4xqXSbj93bhyx6flbv96/98KhoouPUtevHrSBcv0xkx8RZEIE6sH3s9b9/b6eKR1vj2i4tQGiTMLED74U+nRfoNeQJBKcEr3FXluPxzYvuxf3udyINYSDrZGtKpCz5jesRGBeAuYVgbK9tEaulbDBR3ewu5kt2Oz5WK6cZF7PGRUfGKpPJUo6B2EN6g/RQq36fuMlEQcxSFK7nrtjdMWBRa9O7JnU9s52hqhTEtatiLZIx06v2jZUUcnpdLIKr2Pq6t1bjNJrY2f/RLBwCrxMLue+g0p9lk1YvDv35FzspmMIFbdGo4H7Awb3NyZEH8f+oFa9VF4h2yLkpZ3mjtCuTHtyIaqZad7/xaIjew/0PF5woV3bqPi2JoMp+uDFcwd6tOhwqVF82+/XwCrGFyxwCUjBgqO6S/zN5vGL/3n2wNxcyBpJ8ZJ9+o8RtKHa+BVlZdXLaKplrfoZQARSu1Y+ODIXDwYNXTt39LGCi38/4ayEoiSA3YS25BCG4AAWy4HX65niy3/DJY+Ugqg2dh8NEImEwCNAi0PCDO/jqAs3LfqRytd89Bh9V6XUVMmTnu6Om/vUykK5YhpzQJSEiP9VVeZf/QFpi60Cj5ksdBlm8f/GzPkW6+aOt+CIRo7WOu5SZbkKAvDFC6vbA94qtCB4bOJMupY1+Xrnz0MkMpvBzYRczjkn+duLi5KPFWW/ftBa3M1ps9ELnOigAm1b/MuJFonQlcVyq022GGUziETIWvK62dyTnzTbiYp3Hq9W+6nA79TOukH9BgjffHxUzsjwwXf/i/OSzxbmvH7IXdLN5bLDumXQGplG4hQSKPdH+b6dAxpiqup04grWVqld9M6MdPVDWF0e2bRid/7JA9vKBU+j+iIrUq1YGsAM5mVFtoqe606f1k9s29Z1oPjiL6JWNxjnu9HOlaYCUPjuCMyBRfqlcgRg4CnoKoQTSqAcvjnqFLuslZIWR0mrPbiGn799bFApCIRgUOg4BNQ6gnV86npzznfOzOWl2LCGeZdi/gStm/qJMkIRwv5UOiz9xfSsoiri6L/kmYV78k/sP+Io6+a0O0lqgJiuvgBEnVdNBBAAE+FnJJ9V7AtwqOUNKjRwxqgoWMa6Ba0AxyMpvhJO4nuf3vJKy9uXPrNx36XT+4+6Ld1cDic24TUKLO6snP37QRsCKBH4DgpP/TeDDnh9RTIQ+A7Pqcmrf8gIUStxh0QgQpsJg/TvjZ55tH+rzilttOEUdoFiYoXsCp1hg64NhwRP84O7PmtJ1eKkOL0bCqWCF+N3cfANbkEsUdUnURlirPRdK9G9K5+YGICCcx2wEwWvuVbpmpdU5Fo+NUv5rzbDTEvShLYS0ieYVwxo1nF+NNR4jA9FwgiZoKpifBAFWfX2kGit8bfNS7tn5Z5/42d7QXebDS7nElRaQf23pEaw1olIMAmiy2b37NPkPX7nc5Oj/zlj9QMDVky596aFY17D+ZGPEsKj9uBo6fksp4PdGRkTVVZp61rutQ/YdvCH4Rc1Xi2kBkUFR9xYbI5gbZpoDGdt9XFlpCemJA1RM5gvnkCw9q/lHhkayKx8LXmr5yGWdfWEajHdsF7z/QEwibWI6j4EngEkAPm9GnUAkzGXWq0olCgLRw9Cz6DvcuSrgWtn1n/jIiL55Gnzqd6Lxj11TnG9objJgy5Inb4GCBAKuCbZ7I4WuHWiS2xjZ0nZRTCbGlX7cgf+whAFWwA5rnamW4G3dwUe+79rVuB/gREd5GCcVGrlDnH57BtrIg7lZ3+Bl/bE4Kg1SYE6c4Ib8C9XI+OMph3fzVo7EqJDxKfGVIBA6Fplo5j2wwmLFicvHH3zAcVzD/kB4m7QJQNwVCPDYKSJ0PaUbl3y9LifL5zYcAaWDZCMb61BC7n/UIK8hfFWoy2ptLh2qMr9nec9+eH3M18YetO8kbkXZfsbZxi8hUsraFfU/ZOlXEch9UsU7E86ET9Kg/NdoqD14ugu0+lYG0OEvY0xcdrWGS9spAHM8KuJQUEn9KtHvvsWoSJzgHMUl5f+Zo3SAGdnpKBNX7kJZRV7RuRgSvfKnY5bj7jKWuG1TGQjD56gDDSTTCwtuX+DA2zzeUw4hfas0xCIBIPE2J55G97qPPexRVleN+LKIpJ5ED8ljkHQsophPTx2+TwflUK7dT+PhYH8fE8wGDSAugIuPjDdc/z4TwTq49INbR+6kCsdt+b1KhDgz1pXePqgo/HWSayBq7KI38g01yEifzfUlCQzmKeZdUxq8Xz+ecs9l9xWKFLBw/7AmwTzIbGLzkpRPF5e9MQZOqiEN3lh3khqhGrE39a//4VFJIX613vwcpZMV9mDPcwjd/6y+JU3zy17W4h0CevaGcLcsUadsViUNSWykwMk0EsYdVpjpM4gtdSFFSXrY1endElu5ScOAqoO0lSH1IAOh8LBqsKQrOWke1rKTL6yQXXs6tUylpnB270hvmkPFUwJ3Cfo+Pluko6psHCNBHs231OoBFMCG1PcuE+vcKvx0eMcP0OM0MTwSPKgbUNlOnXqFLR+PFLJ2Q6zjoA08lcM71oEstXgplS+eiKmHkhNo+Id0UAYVINRCJ7AYwQVOnyUwdSL5zD7+h489793N1/nhFIp4IAqXoCqIKx9rbHh1yoYOliA1ePlpx3gbhSy0YwFCzjTS+7Z+xDOGkFQQqUMabOjakgLRegddLocHA0rKQVnmkPW/7s/ICLBTGjheerOclb26zZ/REG3xq0HvTt6zjPPvP/KsovFF+9xOO39LtrKowvwuq4GEVHaaJ3xAhag27u167ADgZqtXJmCWY9t2nTVoA2t4hsJ53LLKaYT73zwDgmKBpRr0uop/OU3Ph37KkSS7hu1M+UF8fQLa7ag+AVkBFfAe5FdjspThbknqH2OoDAaYY7hN11XHaLlMuQtK8a7MbIunee21fqhSUGBDHbSZb+gMdI5bh6lBvdqJgKQqsZ5f/h7mjgRNUhqdlxbcKYc0Ef7H9fpB6S6KEPquF3ODrtV1cgPstHaCERZs4Xf5wqijS8HaHyoldq10k0ZDKe5MTI+Cw/9a7La2fg1H0r8eqh7ivvzrZ9CXcqPxsE0eudMnXqxVgbfUtQ4nUmQaNr4CAVqCFr9f+amv0kdPCDcR9zOxPILzgN9Fo5b+OLfRprR4uv+D2+8hP/1/dlFXzgaPApHgzdvR8zVa5ggMOpDfJVIfAkDEGxGcVuwwD3/QllRO2oiA//qTT7kUO5fY47+Je9kJ4prC4wOKqi45QRrw0amiNIR9/3Z+slYM8P+hYBXwBKjCJp8BISYtTDcwr2/LTL9WL9pOIPX0ys6MelnRylhVFDMpeawtmHxiD/buXFzdhDXdHio3exHT4OIbyLswK06ayJflEcBUditjd9/86XmyHPCvHChYPbRGy5/j+QbjFvatBf3HbFpSq2kVeM100GrhkkWBILJbEMv2uHnXkIQbGCIvz+zT8L5IWgIcAIJQhzUDM708mPPyISQo//jxBEVG4rQl+WLeCPREVfpgi6zHzvdc+GYBzft3+9XdfxAwhpBrhHUB4aIkGSloOO35i1b6F7QlEKMGinCqM+MxFtNMSoSDUCwzBhEDb1yGd9/mfX16wlkwIC+H3KMkn0RDuFt40q1aBTivMSyA3NRowkgO2IPSyxSMh4fktTTTg8dbtchAZEKMflB4eEVgPhLsHgqtpT2oOsQC2OeFfDyvkIjuJXhveWc/fqe1P5LiyGN1+Vx4A3gVVb1MFF/hHbBOcrVLoFrwAnTiOi9iDXz8ZKcAZTli0Z5dQipZtGMwGXQcQk8DHwjEx+L4akTynASMAcEi0f0ysa6CTdpa14pl12RedkXOlCO1PT0oPNFhEzP9/16qElhZWUsFSUtJljC6l2maPQOj/tQ0MqCFfpP3wMCYSgkuHm5PMecFW3Ouys+XP/JhsNweFz9wJpZt9C5FRioPP5QqcqYj19OTF236HacXPxoy77PJhB8FBCsNpxAcD64bz4x/TT0+CxCALDsegZc9FwQnBG7Dx2ZSXWZM83YK6r5imIsxoWAtyflKagsm0NvJSIVhK6DJVotR2v1LCoi6rvAc63eeDYacaZI+wqVyIXEA4vKZUvpPWiXv9MwxbebXh3hBP/7OJS/vrK0W7a17EZy90WTQeEB4cCipLJYU1jhpEcmFKJtni9WF5YR53vJVV29ww8gHVByIMig02mfSrewsQwX9Jrj489KX8Kg2K4+AiJuHbqbV4r4c/WHkybeGJVNBAKLatCS/CZWdQVwIMipLHiUKkn/cbZUm6nRfG2ryNTT82MXztxXqgMsGFZOYHSzVvLXy8K1xmNBB7BW/v/aJV75RWtMLXRLuQTvCD/mKG2zszRn0vZLp3d//vN35xtPf+hAzLSH9yZNf/jA97/sOrszNzPjsOj4S5bbRtybZYQIXk3uB/Qca4vPyfqFQGBBCYTyYDYlJ4KeHyvNm4wACGlw0nf73TxwHI8jEqlogagvrN/ipz/YZy1qDsswArkER0i+GFQUbQNZ8uD1YB9SO5RwqOknHU0TEL86tvue+v6Cm5GpxXvBa2/xp+emrKC7GT5rHRblgMcHk8r3i/DsRE72y/mw+kGK0JH2oNXiPrR6iUVrTfs7C4IbUhlUythNbTvsivEiGJ8iY0svODrzPuKN58dsxS0HrJg0F8V8rj90pJc8Hoh4fYyKcKsKLpMGr3XnumRQkKh5X6q2hovQGX7G62qIf3CcDWSp/o3BgTu6W71QUTT2kb8v/RNbf8ZlDph6q83XnjXpjmkfvdn3YvHleRVWKxlTeJ+r13Xlt8pM0JQVJu64rgiEAKSRIFcJkDh2lkTFipfFWxAFPdNRHnEJGzdlzHtznuLpccphDS9wO1wqkDkSHq28cyGCNgTeDdGzWYdPuujCIUA9eD1l8ImikDv08tgSBKc4XHD2H7eteHbtpC2bunLQzKR9MPXVzN2xaX9fPLinedSBXZb8h+AsSJEx6hlw+LDptaxpZOzHLzz41AU/ArHnJy/PbKIPzwVq0e5CSKIlkCrsDnVXSc7UWxaPfRMB9rp8rZ7WgzgU+mQiEMbjr6xKgTXwp1/txX1w9loOtuinMaJe005iks7EmkQlfkb3Elhn1JMirfjr2OxYbfg38KCj29Co6iaaH6ynJBzgUg+V5i0euOzZdUu3v98AjIT7x2UQ8UI1RTYO1/gPXupx7+qZY6DQPKa4oL4GMUbUbcV3J8Jg3BpLQW7grhR8ttAIuiTh5brnnFZ2MPvkt/esnTV75idvtOA10Pig9LKdWxIeXDd37PeHf9px1mM3IrQSef8FrRIMEuSoSs2Z3jage999QsKUh74v0sj9/ZPsE4c++K6rvxLUAnSqKtAHNAR6fRwhntZk95qt6z5eyBHPNznBYKe+yX0Wj3t3t6XgERy2h5EodJA2ag97SWAlBrGLFg6zsnwEQZmsOrjdRGh17bJdlZGF8GeiDSdIFDJ2BE2+ejxq5+hEcUCnXt3XPzzmMLn3kAcDIRJUyJe/Ljo/RnDBxwPSM2gluEnrJqhM2JKWhFZaE4LySWdtslxA+Y1MbOiU1FZn8R4hsIqQxEF5dZAsbq9L7B3bpHj+hKmtB8e1rSQVJC09jcfRunet+bb9+ad+wJtwZRy58xlwqGCtBM4KR2xVjQg3io0UbWUDY9SvFYr7V6siu6IlSR+nDbuxyF7RDIH/WuYqTlYJB0BIWcxfcCmLccI5VlXzQPOuOz6ZuHgAmuPz1WbWsENnPNYbcN4YAx3axwwMT4HTK+LDG9gNYhh6JByrVBWLgak6k6jpeEaxhyEQBqQ2XpRbj68aYrZ4FBxd7W2Ie3Wv+eWR9XC9WiPyP76EqkEUzwmYSxlc0Y2gbCAIrBC7dJSX9Wpxw7SKrN1Dsf+ih0U3pGMftYfAU4KMwADH7IUaqGbd+MEwLCaYFXtyOIUGwgDKhiYOIDUoWPHow8J07WKTniPiYCkpEsyRfPFvhpWsSXzT5zuWFIw5rpRCm9AGNTtSdyAR0Bp6ixNLODSlwXv2WmMzqzUXuXQ+H/sEeG0zAtGERiIaKwT/9iZGRunaxCetJOJIgUqEfhDHl+mo6efPmnfetuTpr/KY6x7EbHaj/qAGEOLcdGbVYoOEZ/bIU17r7UzS3q7DNuM5sk/jKAOFMgUDASvD3i7WUqGIg/pXJ01oI0FdklvGN3qlqOTSSxWynWRJyCDpdJ6Dv+DJ6ZIP0wuftNquPoMiTQI24nEaAJoBnVkOKQRADKrX69a20UWpXTp1WkaOstedilVnoH6nGyAOHj5m7aOjL7dNaDw8zmAir28EsRHoBfNBk9/KIUka8F2EUBUgRohD60Ss8viE+wi2TmHUR3vl4FQuptPoeoc12IVXyfFFP/zKuOpC8JDE2/z4xLOtYxqtZGFGrKvx7okQsFAb9AgfmmewdpFWPTiAgLe9QBUFZ8TpwtCTT8QBu78b9kJdB130j+8+vWAV1ZlRzfuAog3SvQG9+o7qKoWDAas6vAKOjpEETaS/gGphmwPrx7gITo/HbXN5ELDBQ9cUGIHGDnSNmAzBJUfQiunm+jNEtMK3U1ZtaC6a9oMh6DDmQdyIr9TgU5ugmmt0FCgaY0MbrwwLKgoJIeClMqH5KbYAEB9b9SThxUM3JDWf/WrahPMpYB7/zxAIDSNHBizYP528bEvzsKhHm0RGwZKIE/kCYixhgK4Mdc1f4DqE7JQP465qwFZD4QyfASAi+LniCQ8z6nuExf3ytznDSWVgZp/J+Eo7/veZfDn9uRm3GhJ2MYNWh/pdYHFX8tQEhV8RYoIYiJY4TIAP9uvQRQAPqaZuvL5Y110fc/yhB1MHU0V+eHid/mswkRTJfOdf82IiYnonavRWnP/Q0viEgolapdcSEHFiCOk95siPw3S4Jq5OY3ctKZAL39Q9nih8Kv24qUWnv7ZkRhvsckRt9RIJ5UebPnhovgBHfeeXiHEAaCjTqhIRYdI1lcI2fPTMUjKGiBlgHv9PEQgNHsMxTbJqHZy/6d1bGnV4uEtYvJsjJikx8CMkXfa3DgrnzlizwHwKIw/eCI5VYKzRpO0Z1vC9d+ZvvnW00JMfDQVCVk0+hwWEEEDS2X+bNLCPMXGXZNDrQV2kTnnAmTlQ/rzX/EXw4AMKIjzBG4NVWYwIN+l6hifu6nfL0BvHd+5v9UeBqQ0PmEiGl8Zn54y1x/u17NI7OSKxGOs8Hb3MFdVymLiZ+JqhCZ6RKqNxJsIjKQ5tjd5hSBKpSqWjnfEUcPHXnpp8pkNis16djNEWhcQ3TmOhLCFvgK6CNxLiLuBH23yeiS68cE7VNDCaNLfFNH5u37xNT/NimEj6Js85qMkYJ+43r0IK/RE+ONgGONEDwE79AAP9DYmHxAenTB8/9x+De/yp9Y2aqNcaSHpZi4BgOJkHDz+qlN7XwieBVDBZDwLAAl3l31joYmowqWgfSEPSWaZhhk4RH2bSdtZFHu+X2PovGbPXDiMzKl+U1wqPEwCXiIaIZDDOZOxesLFfL0P83Jb6CNiltDgKJotQc0gl8xAsvE0IDz3ZwgELfQgeIswqeOh99/QuEQlPSAAABIhJREFUFsyoAkfPCKNR294YVXp7fPMZ+82b+q0fPNhFxJFeT5BvGh8iko+enp85avioNnfEtni1rSlaNtL4oDmMD8AhPBE8/jHwQhVD9wkWvlikBSP/0D16FoAdY4l+0FILwRAUkC7qQi9pgWCQwmFhdHvy+dj43aoywMUJlm+mLs964JYBHfuaEr6J0Rs1IBS8AjAAB/PBgTkhIwSNCW8X3/Sb5g/w0Dhy/Ab8ZMgQFaz66DRmn+jGx3sltkj5asrzpAaT2yn4k09JEBpMfXh/UZiYTO95I/L9IyVSHARYLYxljpWWtR/OYBhIkhDX2gfiTjQBlP+BF8ztLlhynwJtPISXlTYrAc7RC0KxJ4BxwbTjBaY+nkeoh3HSG4ACWMFiP8EEjpSEo9haSfy2QXjMa/+cvhrvg0PCglzdsYMW8yhUfyIiwYcT+rBXV7e5XHBxWrGjckiB19moDIo03j7na5eYGSIucpgIDqIfHWChPUo8o32DCKCpzqtURmr1P7eNa7y13w09XqWX0RAE1dupH6KaMWsnf7y53dEzJ54stVTcU+yyd7Tg2Hk52saaH21DDmCjlCtHBEd1PKLxo6SH6Zhgx3hFYDx1GJFoBbYGrbbEIGnOmzTaIxjLHexSwacZG9OtICggKf76U0q1uRq4fGqKxVU5qcRh718seCNssJB7uOEW40FjQ/yN4OBCAL9xBoT/xj0sZFgcjOp6D7sUExa5Jykq+s2vJj33FW8GTNNvog40y4R2sx59tMLjbo8KsJFDS8s/TsILtIkzhWPBujV3zf/9gNnHxlkdNabeDpkJMVkGymVwQvlaVfVvrF3Y8UxxTle9TroJQVs6ny4rEpITmnaxed0Son+Q/0/5wdLLZzvFNihzOpyHGsfEH+/cqtORVUOfOB1oLKXahAbuXcM3TL8p2HDzwfJFXp7p9Y82984pyE02GAwdL1sqWoAgjE1jEjva3E5IDXQeEF22lJ0oV7zWznFJlYUVJXtjImMPtWrY6Ai8B3zcGA0TF+aS8xqAqJ6FTMAChQfyw0TPiIArKgpvvVRe3DbMaOyxJ/+idHN847Y2xRtd5nLIThAzaSi01xRvCNOEa3Xlh8vyT/dq0EK+WFr4c+voBLsqSQdbN2ha1LB9m7Pm3oO5N261dgkPq4gjcJ/PFbm0+4O6jXn77cQzuYdvvVxZ1DnCFHbDibKimBtiGrSGq3i0TfaQBiCGSTpvZtGlY4mRMSoOph/DnsnJxlHxh3t0v/EwXi1e9RoPf1AMPzUHWgStX/n5B/9VTSz+Kz2pTSi16/i6pCSy4OJFURerEfo06+po6YvuVzubCMIQM6pZhmpnuJbrq8Hy3oULMVZvEcLBMBaeoBMfad4Nv4IkmG1TOiOuGbl6X4MUC1JD1S2CCQTLXV2qblb7cV5VDR/s+sp4/vIlpfDSZaEczxJMBrVHpy7iw7feE2q8AjVwxpDCUsiQQkhahzgCGembq6wb0wVYyTlTq/6M4Nh98agRb9RV7JUaoX2zcIXM2dXzVP2GhE8dx1/5QZI7aJv/H+y6kJy2/hwbAAAAAElFTkSuQmCC"},{"id":"USGS-Scanned_Topographic","name":"USGS Topographic Maps","type":"tms","template":"https://caltopo.s3.amazonaws.com/topo/{zoom}/{x}/{y}.png","scaleExtent":[0,16],"polygon":[[[-55.9959409871,52.00107125754],[-112.02896100663,52.00107125754],[-112.03994733476,56.01308253302],[-120.0049439862,56.00592357111],[-120.01711631014,60.01202439709],[-132.00196823895,60.00239237126],[-132.01208445818,63.00193292546],[-133.96882922149,63.00050478005],[-133.97240257168,63.9922484722],[-141.04429430438,63.98726254018],[-141.06879354491,69.92045693283],[-156.24893170976,71.51583202984],[-160.44570905351,70.83527373985],[-167.08145124101,68.42906280103],[-164.08218366288,67.03913532024],[-169.01504499101,65.68268604273],[-166.57608014726,64.50777504773],[-161.82998639726,64.0500622981],[-165.08193952226,63.26030016403],[-168.02627545976,59.7862264253],[-162.53311139726,59.73089435789],[-162.35733014726,58.55904663221],[-157.83096295976,58.31752983705],[-158.00674420976,57.52404350658],[-168.22402936601,53.51022153947],[-166.55410749101,53.14277307072],[-158.77578717851,54.88541314654],[-158.68240338944,55.7496444805],[-156.55105573319,56.00847621073],[-156.15554792069,56.7746616888],[-154.70535260819,56.14336689443],[-152.07412702226,57.37034511851],[-151.62918073319,58.22653323066],[-152.00820905351,58.98055685754],[-145.98770124101,60.24740887373],[-140.38467389726,59.48634241018],[-136.53945905351,57.80610084736],[-133.79287702226,54.83482554482],[-133.33145124101,53.14277307072],[-131.46377545976,51.69838238021],[-128.52493268632,51.74602265442],[-129.79385358476,50.90159054062],[-124.56436139726,47.49785657441],[-124.03701764726,45.48627362525],[-124.69619733476,42.90428451679],[-124.49844342851,40.3414647251],[-122.80654889726,37.53929308709],[-119.99404889726,33.37084692374],[-117.24746686601,32.54119524801],[-111.13906842851,31.19770451575],[-106.70059186601,31.23528720858],[-103.20693952226,28.64618215851],[-101.84463483476,29.81580068657],[-99.20791608476,26.28743998885],[-96.79092389726,25.75431753335],[-96.92275983476,27.96911213371],[-93.47305280351,29.68226300815],[-88.94668561601,28.87732407469],[-88.61709577226,30.17736083469],[-86.20010358476,30.3671253082],[-84.96963483476,29.43379356715],[-84.09072858476,30.06332630046],[-82.97012311601,28.95425748047],[-82.97012311601,27.26823750278],[-81.25625592851,25.07956298739],[-82.09121686601,24.5610471236],[-80.06973249101,24.76073298597],[-79.85000592851,27.11188091684],[-81.27822858476,30.70777424386],[-78.99307233476,33.20554049136],[-75.03799420976,35.59830000028],[-75.85098249101,37.2425160052],[-73.74160749101,40.4585957587],[-69.89639264726,41.60224497127],[-70.68740827226,43.17628724449],[-66.93008405351,44.69516042167],[-66.53457624101,43.08006996122],[-64.20547467851,43.35229243812],[-59.50332624101,45.73220792131],[-59.51431256913,46.24761804024],[-60.00320417069,46.25901313529],[-59.99221784257,47.24505773341],[-59.00894147538,47.23759898478],[-58.99795514726,47.50266941922],[-56.51504499101,47.50266941922],[-56.52603131913,46.74770404019],[-53.99917585038,46.74770404019],[-53.97720319413,46.48358117386],[-52.49404889726,46.46354265729],[-52.50503522538,48.75360583388],[-52.99667340898,48.75451123442],[-53.01315290116,49.99551104004],[-55.00167829179,50.00610367548],[-55.03738385819,53.74720613495],[-56.00418073319,53.73421061801],[-55.9959409871,52.00107125754]],[[-59.50126630448,43.7495431608],[-60.50239545487,43.7495431608],[-60.50239545487,43.99999882251],[-59.99839765214,43.99999882251],[-59.99839765214,44.2494016836],[-59.50126630448,44.2494016836],[-59.50126630448,43.7495431608]],[[-155.95024091386,20.49523373356],[-157.3267518687,20.49153389084],[-157.32902509355,21.23181053727],[-155.95251413871,21.23549220541],[-155.95024091386,20.49523373356]],[[-157.64488202714,21.24845058596],[-158.28534362719,21.24673774522],[-158.28689557694,21.7499618541],[-157.6464339769,21.75166877943],[-157.64488202714,21.24845058596]],[[-156.12602216386,20.32469602374],[-154.7461696274,20.3284088686],[-154.74174482011,18.87578125335],[-156.12159735656,18.87203473488],[-156.12602216386,20.32469602374]],[[-159.29077130937,22.24504086823],[-159.2892966564,21.76857042389],[-160.28916841131,21.76590592196],[-160.29064306428,22.24238530626],[-159.29077130937,22.24504086823]]],"terms_url":"https://caltopo.com/","terms_text":"© Caltopo","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAA2CAYAAACCwNb3AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAcppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGFpbnQuTkVUIHYzLjMwPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgofPyfmAABAAElEQVR4AeW9B4AURfY/Xt3TEzdHYMk5I7KICKILhwE8DCe7eieiomRByRmGjKCAIHhgjl+PNUc4UVZEggKSdsmwsMuyOU0O3f3/vJqZZcPMgnfeHf5/BbMz3V3hVdVL9erVa6HNhEciCxS7VtBJKvsDJlWUxCjFa8tdk+6oD/zU1ZOMhyttYXYmK1EhMlbgfnudQWgd161y8+jRnhDZgt6+ZdIkY0nU71N/ijlFyjBneAMNTX/3lSZH8k51u1RR0i3KFHZTvrUy9qy13NWvVbtebkWJ0agq0yusdH9+zv5u0Ym4YgfCw0wHY6Lj93zw5Iw8fz2C2WymjxKo91q/U8xmwGOugufhDUuaFpcV9XJ53T0kSUo+VFooJIaHxSXGxifbnE4lwWASL5cUHRA1YmmEVn/Crsjfx2gjD26f+dzFQJu16wzcv4ZvAWU1AXhUVRWGvrSwvdNj73uxorhNpGTofryiSDIJGm2HpOZ9y1wOKdxoYnar9ezlyuKzbSITbSqTf0mMitvfuVW7febBwyp5mykpEtuxQ2aCUIMOhEaTH/qkQHEOEgShHE801wDg9ZNFELwiY4lhXmFWxbqPVzIgFquGWARoYCJ6zRsz/YS9eLmLqYUCE6SanVDQcZHZFK/S0RQZ0a998p2bhz+zK3XLFk16WppcM2+tK3+bzab9dXqx4lmuoH7G6yc8BHQ8+euXPUq3sNiI/sm33vniX54MVr/AUlNFlp4uY+LFQatn/i2nrDDV7XGnWEQlslRRmFslcFSmEUQmW0DSCtEDkkYjaMIjQP4K00sSixAEZnSzypjwyB/ijNEv7pix8jvKVpv46F49qQY8dzw3+eFiS8UTZV5H3wqmGB3AFpfHwzSihsn4ZjYrANMIzOtVWUSEwACHiH9hBItXsbUMiz5q0Bs3Z8x68U3gG8Etms1mhs81EW31+Xj2/15u8ePJQ0MdLucjFtndzY4JLGcKk71eJogiU1VUSeMjAEhZVpnBIIh6I3IoLAxwxSoahju5kTrjBze37v76xuHjj9M4ABaCqQoeSRZZnKLX6ZnL24CJAo29L+HndZcCsAUAAzKoJgNTLe5wfivPUgdqS14ev2cTvOF2o1b02uwNGQawdhIxcEzxMlmnZS7Fq6/9POS1v02rIKN+CVTmRP0BMK7QFq9f9TJFr2Gq7KlbPzghZhP/0+XUF+c/0Hn248suM1eHMsDE3G7MiwAABUUEshHXlAVZNRjCNRgS0Dv+qEx1uj2YTgFI62Iuqk9kkTkO75A4Z+WQ3gvHfZPcptPYDY88fSGllkQI2jcqj7aIWAmeboDnEuAplQGLB/3i8DBFgzyyCiIBxmvDIjWEWVoUdCqKrLhloKnMLCB2C+ik0F7SO8yl7d1yxrBpf14zd/6Xk5Z8CGRk1RE/KCy4mboltYpZ3WoeN/Orw7tm54tyhMXtBAFgFDAk6LpK40NEIAJ+ozFSQ2oApgMPMbser0Izb0MZG7IC6CaS4J5qObFv8i2Lx5n3zNu4mIgjNRVtod8EC8ZTcDMvuqUyD2c/CrCOPsSKrrdPADb/N6bPrQHsXoFh1pCSImqTEItISuL38Ac4RdOH/tII1voncJYjYAyIO0uU8dqSv01JEWWR1w9YatVN17x+jLEqY9xFQvZqyYeMKk1wj/mjVu68fPrjLE9lhzK73Su4vV5R0CjAP8J9AKZKQF2S9JJTVQQXUNCFqaLfdI+eUz4BhVBEofIlDoey11Yw6LvMX44OXD+vawbUJSKSahDU/AkuCrygcVP7LRy7cmfB6Y+PeiwdSh12r+hRILUFFXjI4ZH97eFbAxgg4RRmg5Sja9As2uDwiETAohe6sNPpzVbtHQ8VZ6cPWDZpM4idIz4RSU0grlz5iCNdNn/9bpOOsx//6ainbPlppyXCYnd60EMZRKFidDSB8aE2MRoamx8eECvzKIpI8ND4YCwlEWJGVETF63B7TtnKxJ/txYtuXTx+16a8/SYiDhAK56KiqoCSiFOAygHSH+OjchkAWAXZi5HHyISUIIFhJlGPAaREncVFrQ/q5GPgyxMo9tu+r1a/jyHVrRMzRjdbTRu2MdNbOa3Abge5qSAMkRaGErQoTO5vSxy7feWADCAXj+w+4ayIyL6UvWfEO2vbE5EQ4gWpVWBmM2+uzYxhG391l00rsNkUjax4UQ1xDvpw6glSNuQtVEhcAcQrSBr0Ldda6f3eljdyyJrZu8+rqoFU2QBSVq8kQBxzvtjS+Lv9Px077i7vU2FzeCTONJgWCE9S6zfBQ51DGXw4zmslUaPKDrd7l62g73tvvfVPah+wUBbQXSCBewV+Xu/fYAHgCYpXlURje8HA+sY32U0wpw5sRZ2qJ/072F9PtVWPfnv9yaNGaVFc6b1o/OwigzLW5XC4RfB+dIS4YNBEtykLvmX6gMNx1SFoZtykjJhcHRiJ+4xiDTt5/uR7lDc9jasRVF31RDih3r746XVnRPdYq9XhAa8lFSWkFYeLs2rw0PxcQazqVft+Q0hLQEqJWR2ub0rO9Rr13OS36AmQ0pfhyl/BDyP7cu/WLT9WXI4CIC6wE60XyB0KYYn7EQw0NvTxDeeVSmv/ghILDsJ0zOlxHbQW9U1Z9sxMypMCY8CVfpCAv84TAQiAsQT0irHGMKlnWMLOlHY9222d9+LnGF0xMJjXeTeqgZelObB5s2fYaytuyLWVLbVUWsHSBHDF0HMBJIdAgaKmyiIYhEbVajRQHkRonRwhqlVe5yfK6Zhbdp/3WJL/+tKSxygDIUEgI36T2iU//PKSBy54LROY3eEFonGJEchT+5sQELCAW3lFgoVggiYlKqqCZTDRVfAEBGfIqpdtDvdhW3HavS/MHoacih8GXigA213PTZ+RLTj7QP11oz19KMLw4wcWBjLDarIKHhLG0A5kiJlQRblE0Yii1upwsNPlhdOe/eSN6AxI2dB6aPB+/c/ukjLrRSdVrSS1l6K8rWIbzPxm6soX9hNEWFQxsznkZPzPgL5Kw+lZmTzHpYL853NVF1mDvNDdSaIETdBPyIwgJphMrLFoLHeJ4gmnwJwGr9zIpnrbX3TbgZIYI6gdwSog8QrVRJPnsLELxbljcPkWkKBK6hJCULn9F08ty3ZZAI8kAJEJ7+okugkVX1Z1oqa9IYpFSYZLxbLnrB4EHmEQOhaqzuhsu4X0GBkaJBkT6iQiEp0gSYXWCnZe0ax87cSJz57s0AFrelriMJYBK+XML9+L2fLj19MrXDbAI0qygppqQRTQr/AE+CFqWmjDWEPJdKlYkc/qYTvQKkrHE15rtBPGDqjaCqmstesg4GA6BCEJHouWxR7OPDwCt1Zf9wTCRRwZDmVFig8Ll9rronZ1btd95Oa/jT5BnRq1aZQ26XKSbE5Pp8s/VjKnu4dvfqHdj2cPDmQON1iqJjRxQGUgztwjIrG8fVKLme2bdP/IPGRIMXV4h6pKmzetGCiez1ybrdrai2ReCWGy53q3W2aXHRW9xr2zoc3GR8efMUP6ZkA4E4H0mDd6WKantAMQ2wOWGxQejp/YTGBaQXNrRMN9PVp0WnRrcv+daZ07WwmeV7Zvb7Dn3C99ThfmLdxrKejqcblBJCwokcCiAQOf4AGDaPRO+ktpKP5a/4ULNSn4kQFt4fDpQ8PKtUoscwIeFfDUIg5k4wnEoej1Ok0PU/zOlo2bzRvcJeXQsN69+R7H6q1bY7cf3fH40aILz+W4HbQmA20HrwmcRayElatMqHwQFfsIhNokkiUqp8/1kgJSA7JY6qCPltvEN5n15eRlq34CgKS7D/lrkmrub/Zt6AUsQfUC/5/u3W+v/1LZpbuLNaThk/SAhTRIIh3aq8hi1/D40sE33d5zyb3Dz1fLJvQHp8X11nFbNqTsPPLz6WPW0nDsitCOSR10AoSwP4leu8Sky2X5t6HcmQw/cVCdHtU93eXlZlsxlEhGHV4Rmy3Jxrivds3f+OddKLeOCvvaU0cOHFiA35/Qp8u8EVuOqRWpqkcmGIMyZEgGsczlZOWSnbj2ayBUhaX6YL9YVDiwFGZrvi4LNbywNGNRpmkhmf6xZ8HGh/egkvfxQaL+q5PvvrsU36v/vHZ2sT3/3FslDrsCI1ZQgqXRYW4vc0ieHpM/fb2pCAEKoSzTfhN2d1RYKtB5iPI6I0vN/ZcStc23m2A4iQsPl26LarL7js59uhFxEAijNm3SHkg6RcThXfPrjugR61bcAAoH+MHVgf8S2GjmGkat1iTLLvdtFtlDa6ughekmdhOUOKhVLWOT5hBxtDA/biCu72+Q97vJpFTjxrTx+S1ik9ZqDUZSF4Lit695US2DmeNs8eVmNDbG2BKukt29fOZNpR5nV5j98TS4moaMqEKR2jJ95Z9vuYsQGnsUZh2pRfhJ1dNuvTho3QS+1zPqnqFPddSGV0Ifk3xlqUTNhA5AiiisyGG/cdimpY3wVGHpTF51eFsYiLkP9AcMTjWDUrXiGAQY6BVNG63JPbB///H0KNVcAx5mVvlYSV8+u+ztFrqwnxnUMN/WSLWK/D99kkWQKwXFcPLsmTaiVhCiI8LDWJTRqDcYjRLp+DDaY59FhewTvFho1ZrSupX+nncg/kCrEKeiIHU0xSm3xbecuXPu+r7rh43JIqlh3mGWuBsIdswnvb2+Z/rnW07+cPEILfBY8ujRQTnUFfiC4uCVx/+1X1fALHDbmnOFiMvwugAAYiIAKRrbHs0aNfyccjzOWriBhJhLv8AHc7jlFt9eUKwx8uNGfPtBqWaBqVkvYQd251miKbwjPfnm4Bd8YByCc+glEYxegCG2ZpGqKzzwag0G1jKu4Wvmu/5S2NmcqktPM7uxzggUUQm2byaud9Gzib0HV0YbIzYzgx5snv7XTT6kZF6HRjWWlFfcHMhx+Kefm5TarTGcJEMxP5IeOokl6iP+uWHgYyUshUnp5hrwMLNgVoA7vI/Nw+K+MWFfHAyAxq9O4p3ARnIxNkTPFeVqxJYxCa8PiG258e5mXV9INias6qgJ/6CjIfJiQ/jTKFBtZOw0wJ6GvTj/ZNSp8ve5QdDjQ7wLi9Bw7W3RTffendy32yfPLnmOWiDCOHDKJzWIWw1dM3fZtuO//LLbXZJ41mUnNypGUoW+r+uETmKfkLqLPn0RD4W4DXFIrA5JItRJWhp94EDTsJiKOwbegVUvYwsWLKjTz/TULXzCW7VsfSFaZ6gAvRHL5WzdP7ZcRPGGaaihKlR63MStGXszmyOuxW4Dt5ZDwsIBVGVNM1HPGic2+YiKduqUGhTp6VkCK/IhocC2x3DvHp+ptDY8PpgE1QmI7R7XjVSWUqGlvJlghHWa1jscPfjtGn+wZlc1ko5l2yy/0IPkdj5CqJEJF60GlnFYPFpxN8QSRkbl/hTBYVHVaK2O9WzV8SZp9+z1L9eubMOOHeGf/rqtTwerdVShtvLBLNkmwRUFLEmEiST4RNau47dck+kSSp7CtDqpoSxYbghLmLdtzpoXd6ISkhqtBg5UzP3TSIdlE7as63X7kgmvHnaWdK2wV3r0hjCtEXtP5b+lwesk78nLeczicQFryD2i/kRbfY3j24dERtTBicZ8d1pph1mPncL1TbASkYcBV5+q187VL1XQFNtt8NPgyUPqzKtb3msDoy2KYlfA7+JVvRzNE0hbjBT1l4Y9dv+B1x6fxNJTU0OCnsJSlAwstVtFJOWcLy30YIqx5Q3vD/ytqpegpiswYbvi1f5QcM4VeJZVVuAppi6AcOpwhECmQHHsi9OtgOdEtcf+n6n4TmftW7TzZlcUsSK53KtIZDEOUrOqeuxeWSorq9BLJAYzs4tE9mYGLXb5BIzv35+sEbSj+M9Rb6+92XQua062UDmk2GmHSijC2hp60whlri0BLr9hwItFkBRpNIpNmWFr1+ZtR30wfm4OVZICuzwGWD2QtpnDdf+auQt2HP3VfMyONZfMPEbRoDqAFxoRmiClIL5Y/P51+kfr8cCRgSboCr7UBhXrDzwUWYndEvvl1+mReG6vnSdwHdh1LrDZ5YjYKKY4XXpy3KudYMORnGDMsaIp6pz/4eG9+9s7ZW9DqHtggcH1fWCgQlt8UcawrP5CSyIu0EzovQ7zArPKzIyVll7OpU6YwsM0vt29uv3FxolUqZfYPbFN+37lhwlrC0g6/0WIL/RO8GIN1zYirttl5MnIMAfN2TkrSyU7p+xwZju8biZEROrDMa5ByANbRbIUGxnGEqIidFImTI1UI9QWcep7mzpl5meHaXUaTaw+qqilLuGSefgT+/D43j+vmzv0QkHeO0edZQb4FcENglwgqOS/lrA5S3tbCqzUUhuN0ZNgjHp69/yXNtPOQDJMt61iBip+T1p15JurO2deOPvmpwWnejJs5EgaiXQSER1VI/SRLNotlnOsCeKL9a9B9x8sVW3M4JKtMYq+tWsoTABnAIoI3suy0/TrmaMDANn7PTfztZbPelcNVJ+aJbBBbbq+ZxO9hyEGHGguCIUAqWUlXK8z7uT7SKijwFYebyfsBcLj75VFUrX6AQtOF8CZk6kH+G1zCtxSMqrlqPXTj9w3J9/pjck5+LzV6w6DixgEGCRILajgOgDlmpliJOPeQC1hBqNY7oF/F19ehaQUDbwzWaFUOYg299Y+8EQ51kA1PHKpPtzjI7/m0w25D/T7y7LOTIgig5RaXZoFGobjI9xOw+Ni476Q0jYt7X+5KO+xtnOHJ+tVsVO54hG14DqwbFX8qjMU9l024ecoKfyDLycu+XDjkR+/e/3Dd77b7yi+UXV7PXzjhtTKkLAHWrzyzRUBAIbdGikcA9CM6bcP7N570rqHxx5DLhFOa0JR1kY1fbRPavRbOnHCP7N+eeECc2NmvF6dRivCIQ6dVaRWkdGsbXiDtU927vViGvsHRiGDS5orrV2HvzBWWHLwdHO/uyt/PLWvCEgZidUC+lRN9fCDTrNKfodFLuzwFufM26+q6T0FwROQFv5svi+fmiW8P3H+SzXu13NBKizt5oczqYeH89N6fI4g7eJFibWIiLOSKTUF/yDh66ndx6CxX0P8a2Z9Gas/C7jkd4lvarPmnYTnLVc2gnJ7SDVohKL3hNcerj/00wzUM+vdkn1kLq9S1fx1cwJh6ZnuT9Iz51Rvr77f0i/ZJ5df0Mk3K9hdhTM9VQKbGlZUWimKuZ1RTHC2jWKlj7SfOfzEt//8buT+RZt79F487h8XvZa0vLJyGdwc2g55btafiIZASVho4D9O2TRmOkfTsPgpe+etfzmLveWXGmUkNUiXVB9at7j1iaLzmw/biwZUum1ctQNBCm7sBxhNRrGLLvJs15btR77+2JQd26hp4kpXLCl057pNosYne59o2dLZc9HYo8xjaa14sLdHDpNBEje5Kqr3nNveYeayKaQp3E9uNVwF9e9+VyumEvGc2x4jhtbHcVQCxwBo4VqU5fN2/i7/vNbJFVUSI6FmUxXhjsysLvtBai+hU2aojNXA8f0kWKnN+mDKwPNUrDexrpFhemK9OnY6fvzyubI8puJQmIA9iBCsmPxVXV52Xq2Y2X3+qIOHFm1OB+1K5hSzAslB+FQjEQFa8trVCwvBOiQpSZZK3A6rip1VLHHsilZnitPpJZOXlUZodBcahkcVV7isF42SvvsFe2nDS56SH/ssHL9+97wND/35hZn5Lpd7YokHqijWAzjAQ6ZhLqQDfJATBawMWPPBWwfre0HRRhtNYpKo294uvuXITyeZswG5iMETMy5jrTHaJwFSVkwcvzc3a/UFwaNDx2F4kDRwV1YVDXbT4U6UHNVk7UvTV81sKwguNipZyzbtJ6K+5smqMVr/44sG+oi9Ea6y+y0uaDb1SGLghuR0ueTtpefu67vw6S3PjJjxWFrTpo5giOD3SbuqND2wGZ1PSefqVK+Yhk22l+fysxN1MArZCDTMLzOCITpNOv86KBV3iV6vnjLqEnLQQumbCSiexJl3pFXcMO/Jg2Cof1Khc+BuHYODPy9QTFQqvR4x2162ZfDKaU9/PX3VBjPWI34JSTK7Cj8y+KG6DH/R0F+kR4pGYmfovU6vM7XWhh3pG9vs2ZQuPTpmLX+rx/dz1t15YNHrT+2a/3LPnOf/0aR1XEIXtOKcuOkF85dTVjzTPizhTzeYYs4nhIdpZQ3cjqHPYQwhJEio0F4VllmgDxCHGGnSa1vrwktuDEscn7X0rTuIOAh4UqkweOAYGd5H317Vsvu8kd8eqix66YLHphPdMihE1Higk5hMBm1yWMLJGxu2uHHbjOcnEXGQmwkrgwfvdUMcVXMQetRrZenYqPFXTRRoBIoXi5HQFELFyKcJ29vyT47C1FWbF2U++eoLf4KG4+Vckk42htorCA0NVrU+xDHpjB3JggUOFxQILtowuZGilrU2RIZC1Ppa+k3PiGlSAb3W8EGEXgeEAlaFSIS/tHdHG9zlXhc7UJn3Um/z6A9mbX8rjtRHFFNRX9B1VYgqq25LDqZGNtaHsWbayAV7zBsWna16xAdKYljNsEzfJtT/jZpPa+jpw7ZsCB+1aUXU5tEzv9+Wn991yRsr/tpEY32yzGnvbmFeg42GGDMaBmNIGCY0wRBxLjLC9O7tbZL/bv7LcBxJZQIAxiBnqOl+C9WdK6eN3Z15ZM1Z1a7HVr8Hbj4i7II43SSL7SJjWfuoRi+Pnbpi0mAQBhEWierNo7lzXQDl/K1e6cB//1dQ3KoJRrUsgyZM0D8//JljtywY8yFTHEMVl0Im0KDuJlQJ7ygdlsLRwV/chS0rsj3b+5jHru/TqtuS54ePLSS1hBAh4xq5NQfMLwTyLGXw5MOGNqFi0OQbXnj3gpmaAmMeNOfvcRN94IAM7nD723n7P55nEYVmIF5iuJxwgrVBzyBJ1AKrRS4yeh4q2Lat/4DlExd8N/PFTWAuJEWwxk2tcqEPVkfte1JnQ/SeyPCoWdtmrNxBD8nsa2gUA3WHU54HxMGwMNQ+vH6i2KTUIjRt1VkzPm08d0qj/Hc1bGjD16v0eeL1F5rm5l+68bylNAq2W2+rqDhvUmzMkXfGzj1LAFID5AZQBIL3D4A6/r2Xmu8/dXTzLxW5d5ZhrQFB5KFVlwdrDZPJKNxgiM7u1qrjqE2PPvvtF9Oe4wiAatQAEvQyjx5ThrPHp1/44O/cq9d/VBJ5rvsU3i9OZesZ69C8zYKi07ahZ9RyrQYjgEMM1cioZjf8RKKVVFE+VVEinjLpJ1hP7XtyyJqZyx59dvmKNB8iCECE3+T+X+ay+4REzeaqrgIAgUszA/uXmHFVXdf4g3N9c1qa+5aF4xYVOYteddnh9EgUUE8FEDOURVIdHs95wZnocAovd5r72JN3rZw5b9v0FVuhfgIJmcbcGQ4oQdYntauW9izeNInfhIhO7TQOHJ1vyCk7zp83rP1403155cUDxywa3T+3olS4ALNsg2MHNL0WjKqINoXtjo+I/eT9cfO2+yvVvDFiSg5+04enbP/3u+PmCeQ/FNdIJ6ePNnOzMj26Z83MUd9m7nvxlGw3wFTn1SFCCYIS0FxoEnRGlhzXbMP8KSun9REErmunpJhZRiYWhiCCOV+81XjfsV83HXCX3lMhO5fzpmLO0SSHYoE8y/X1pxNUS7P0xoipWXesmjolX/C8YLU5vHBO1F6tE9gE1GgkEBPU0CPuUlOmbFuSPWfEiLSXFi3d8vT81/k6JCUFC9WUoAvVK+PgEyFwhvSLqCtP6v7CBhi0AoPBRyB+4VM32+90hzNBMxPhgPhaz3kj0341Vtwpk886HW6qJ3FdDJIY/otKfrlVzteKPa2Vl77pYR71TZQhZtqOmc9hd8PMGKmlCzL4WfZQ1VFPObcpyuqME2a+CB7DXl7+4PS3lq3K8dpb5sOTEvv/IEuYfoG6uR4Hy1UdQEND94YVheNaz3jkwI3N2i77cLz5Y2pk5OZVD2c7Cg98+8yq09UaVbPNbzqzcWMLDu289vy0O3LKC6fvK7pwW7EDm4+QGhKOCUOzwqLIIPUNS8xp3bTF8DefmJaxdeoq7tJ+6nJSldS4dcnEB9L3fPfqKa89FuCzSFjEuF/zH2EfpNqg8J8+dUj8dtrzq29bMrHPLjX/QdnhcsMnTcdtXQHWXbscroHSeEqIICmywysf1ZS3ys8/8doN80c80alhm7n/N272D+aMjGtSu7Bg5LUFaYbf4mAgCzaKoePVI0Fo7ZCZWQ/UoVrw3Td37lyDs5uZ798dXe8YVrb/i1/O6rzNNR4VuyOqtj5JQrWhT3QYEschVTmnsoLl6G2Dmjosg25fOuHNbm1vnL4+bUQRqvcHhPAFafBBceWvBDEjcGpKT+eesVu3f7Pup0vHHz1vh/OGLHi02PsENKBHURuF8C4NdAa3Tqu7iGNblXbVo4nQSD1OluR9NHDZM1+2a9Pur0qlO8dl83zUY8EoS5Sg2WbXas7FR0brC4sKaQvjxkXzRtxazjwdc3G4B34/Xh1UCjc6gnMBmg7RcayhKfr5V2asmUuLcFprkJvJZh/hKrTo+ipj55oTtuJHi5028liwa416k12mg2Z/3ARjBk4ICWzn3HVDsbj8PEuqHFJpteE0G05Q1Yu2vj5jt500H5hbBLnIalOKdK5biy4ey+i9ZPwbKd37TFnx50fKSK0Adwpp0OC+v/UtvfkIKwzno5hJbwiVk86zh1xMX8sM+c/1UGsc/4Gf/JTh8rS0oj8tnX2zq+LCz7kaWzOsKMBEmO5qjfmf4ywahggHanJUm5RjcT+e/2vZ0LQX5y/b8syi5fWYzBkRCK9j+N+X3PfuZ+9vOuCqaICzwrIRZ3dcGHEEsdA2NUWwhobIH2D23ZwQ3XDv3U8MvZwmwMSINPOnbYk/HdjXqMBe8UR5acXrI/9y34jPM/akZJ069tkptXJhCaQCKyghxzjf1o0b1wocbMCJsOTSubUia2g0MhgKDndq1PaZd0ZN/6HtzLVVUiMg1R57ZdmT2zJ+WHPEUxkBdUzWI96RCwEt3NiCbaLXm3IJGNi2ySzzR0sgDuKafPd3r3nTvbctfvrVXTrvk16ckQC3plOG9bDsK72l/ShIHg04midPsUn5gvxE5U9bBz+wes7oTyYv/QxmMOCvr50rpa7tF5kkmUarKbBUuAut5eepVBbcN6pKQxUCN1ZaTXlwZoHKegC9wQFDL6iryvl/kJ9XpaKYUlt1OZj+zOIVuE3qMsfNDEhZ8q74bvSygtQNK2/OKTq/e6+jqKUKtRwqH/yPr96On1AomomKmETek4IlvKTo7LIBSyfe36lt14dfSht5nqtcteKqSbM+fitu/5nDz+/KPfn4ORu5/Ekeg06rcXghNySdlGyIq+zStO2Et0bOfNvfF/b6CL5sIS4ij+17F1ml6PPs6i1bjF9+uyNxDWIv4brfk68+f1tW7pkxFcw5yCZqoitxZsapk5heo9HpoB800Ohko1b/U1xY5GvfTF/1Nvdf8G3wMPNobsVQEOol8suff1z//cXjw3Os5RSSB3suGhGxq3CQQW+41ZhwuXPrlp9tYh8wMzZ2zGj4j5iAuLRW4ESyc95LT93/wsyzZ8oLlx2zlUp04g4UIiGCC+fj9fXPhwiQ97QtBX09izkaOMtzP+23ZMKyH+eun1O9nbr1hK6elAjEWRDOuu2Vq1aNJrcnhrquEEhmKgqnMxxxHGqL1CULDuzLExO8xsT1JY0Gu9RqKxQhAqkBDBmNUrBeSx8/PX+Hqnaas3jsO2c05UMLrdhEhusRtttCBpWoDgLGByYQHOpgGqXYavV+77T1unyo8vi9G+c/+Pm4RV8hL8frQBlp+6+73vmV2Qd5Ky0eHRzRPJD2cFoTm4RHiV0iGnwx4OYBo6b3vyefCsICpUlvlKcyn4WLryM3wcIFWzPLcbnEyWlpJFUuBCp/7ampO/F7J4VsuVSc0+d0fk4UNnLcjQzhUuPwuLJ2DRofWfXw6LOB/HQQ6tTly8RNgf2M3bl6zpD3f9y2+bTqaqg6XF69Ros4UAhvBXWsdUQ06xjd5I3RUyY8PURIslOwL5TjMAXq+6N9A354CkLb6i9oPp2yYvnYd9ftMJ469topT0WnChvWajh1CM5MQRSumqCjE4LpcAZdPldRouaHu2YPWD65+/ezVt9D7eDDibFmRVfwveZ9UCcQy4v16A0RCfFpc99rN+eBRw5hDwuWspqRJ+HcVMps8NaSVSdgDaWK1a4ePADTqnoN2KmEJ2rwlAG8IC+B/ohLhxypd6+c9vhlofiVw+4KCYGvEL0E0SYhRYOXrnkXIfywPBF0Gq/gOe4p0dsvyV8O37hkztvj5i7j6igObFEJKctaZvLCUcQAlcopexDkFYsKfYKla6M2z7w1bvYbW9kL1Z0HuQVqxpa3m2XmZD3icrvuenH+iKRchxXAwUQ873FNpNZ4IiI8Ymuflh2/Nj/wRDY1snRI2iV8VW250kXASY4lM23KELMmg2V4A/FwZ3y7JerggT2vZpZeHHrJSctv0aMXtBqXjHPbBkg1Y3Rej2YdR78yYsqXX05dzhehOCTDiQqZ/9CJ1C10wEseAi8Pm7gXBNN10Mpp888qebNPq07ovbKMdSGc2eDeU4PHBu82XK/BVrSqHdFDvpdzB6csfebrjDkvDiYi4RuLaWm+gldh9tDO4KSlyCYj9tJFIYEKBbNiIZPE1Wevl/ZzrglZqS70Gu6nAAIMgK5DJVov+ImbbZ2+6s2ZH723M/zEnjVnbaX35mNdCkqDFVDEfirWZVdJxGiwwajVCpJ8wVIu7C45v/S+tXNLPnt2ySZS6UhqSVhky3YEFHTKLm3DiEjWJTzhq3v63jZy0m0PkhjVpGAR73MD2UxqqHD3qqkrth3NmHpCtotONyxcZP3wi9IyWthLlrZRrvIhRaXFnsHPT3uvS8sb5q18cFjulPdevivfXlnx3sgZVd6aHP4DzJNxwHeufNn2j+P2Hz847ssdX0/K9FTGMI9X1mKMPThgROuNZmGRrH1kwlsjn3jq6bREBAhIYVLquC2qz3fHzKv7/82fzQe4SgGCIcI3j3tn9btJF86vPucoH5Jjo/Nh/LQnnWa/Kpl4oJoBaXSy0+k6oi0e9Kflk5d9N2v1bLawPxA4gYsNEIB/WRx8BGmaaVnghprsUOA++z9MnLjRPhlxVjz4yDn8vO/B9eb7z5fkrTzqKGvr4dFL+Lhdk7SFMqiBe6ByprhArbRY/566aUlm+ui5PHayZCcvKZwN6KpPqOjQoOmU9AmLXtvOXqwuNThnfnjtopt7zB/x+iHZ1km1Yv0lYi1AthOSjdxNhoYPo4x4rBVOh/qrYtX+Klsfz6soSRu6fuHQTs27Hs7c/dkbty8a34BpNf+AC8HppOg4I4hMLrNaYnCm//Z/7PzqT5dke2yx3Y44DdgSod10FQxBpxe6aSPzOzdpNeb9MXM/+3bGmurw+dQqEO/143Ly+2BPBklF9KvzwjTtxkcnn0Gt9963zjywSenltSfcFZ0RmhQaCc7ngC1x/K2nWTLjgtnoSysq5FOKOCv15cXb08fO+56fB4I6gRMOJLfqT5heLwxhdrfPalilEtQsRZIJxAbrSbUNT0gWEo1XJeaaVdV/RW4kFLIUah77aIL5U+T+9J4XZs44W3pp9gmPLRJ+fDIPrH0NahckLTRYrbdQcUsnLpx5B5vj7chrWmokGSJv0IfvfvCuB//ybG8ejUKE1PA7D/qkBiLNLd1bcHJWtgciTIbfuUarBdVp+cFlrhH4OoKR4T+gClIgEgrn6DmkFphckvC1Z89Xz0Ak3pVsfup5l1dYVuq1shOWQkhthZXhAIsVh16YCxJJ0DgwjIicx3TwKGZNEDmxbUTCG08O/NuzPIxLQGrAJR4iUDZ/9UbDvYcyE7cKwhGuMlw3fln1T+41P0V/MsF2Aojw2UTzdpTtAheKMZfUklUnZWc4XHMowNtVTcKQJPD706o5TguLz7+4CvUkY8eML2midXAf8SKuFlA4GLHxe+BBFAe4POCvH6QTWEHpcWCHifAWwsGrqhyqh/xJiUyqbv0uPwJrIOCsRAzlqykrnpvx7aa/h/34y+JKg3fCaUsZ9tkgTXhc4/qbBJFI4ADu0zpnixFznhqH3C+Kt7boOPnHBS/3JeIgvcvvPOgl58GHNiy6CQh9ZJ+tYFa2rVLVyFxs6UAc9XaTBpPy4DyYTo/gecdLCuT91twX+yG85gHzq1MHt+/doYGsec5jd2RX2KzYDoEQQCER0TjC4F/SQGeUmkv6gt7h8R8MaNejz46560YQcXD4xqXSbj93bhyx6flbv96/98KhoouPUtevHrSBcv0xkx8RZEIE6sH3s9b9/b6eKR1vj2i4tQGiTMLED74U+nRfoNeQJBKcEr3FXluPxzYvuxf3udyINYSDrZGtKpCz5jesRGBeAuYVgbK9tEaulbDBR3ewu5kt2Oz5WK6cZF7PGRUfGKpPJUo6B2EN6g/RQq36fuMlEQcxSFK7nrtjdMWBRa9O7JnU9s52hqhTEtatiLZIx06v2jZUUcnpdLIKr2Pq6t1bjNJrY2f/RLBwCrxMLue+g0p9lk1YvDv35FzspmMIFbdGo4H7Awb3NyZEH8f+oFa9VF4h2yLkpZ3mjtCuTHtyIaqZad7/xaIjew/0PF5woV3bqPi2JoMp+uDFcwd6tOhwqVF82+/XwCrGFyxwCUjBgqO6S/zN5vGL/3n2wNxcyBpJ8ZJ9+o8RtKHa+BVlZdXLaKplrfoZQARSu1Y+ODIXDwYNXTt39LGCi38/4ayEoiSA3YS25BCG4AAWy4HX65niy3/DJY+Ugqg2dh8NEImEwCNAi0PCDO/jqAs3LfqRytd89Bh9V6XUVMmTnu6Om/vUykK5YhpzQJSEiP9VVeZf/QFpi60Cj5ksdBlm8f/GzPkW6+aOt+CIRo7WOu5SZbkKAvDFC6vbA94qtCB4bOJMupY1+Xrnz0MkMpvBzYRczjkn+duLi5KPFWW/ftBa3M1ps9ELnOigAm1b/MuJFonQlcVyq022GGUziETIWvK62dyTnzTbiYp3Hq9W+6nA79TOukH9BgjffHxUzsjwwXf/i/OSzxbmvH7IXdLN5bLDumXQGplG4hQSKPdH+b6dAxpiqup04grWVqld9M6MdPVDWF0e2bRid/7JA9vKBU+j+iIrUq1YGsAM5mVFtoqe606f1k9s29Z1oPjiL6JWNxjnu9HOlaYCUPjuCMyBRfqlcgRg4CnoKoQTSqAcvjnqFLuslZIWR0mrPbiGn799bFApCIRgUOg4BNQ6gnV86npzznfOzOWl2LCGeZdi/gStm/qJMkIRwv5UOiz9xfSsoiri6L/kmYV78k/sP+Io6+a0O0lqgJiuvgBEnVdNBBAAE+FnJJ9V7AtwqOUNKjRwxqgoWMa6Ba0AxyMpvhJO4nuf3vJKy9uXPrNx36XT+4+6Ld1cDic24TUKLO6snP37QRsCKBH4DgpP/TeDDnh9RTIQ+A7Pqcmrf8gIUStxh0QgQpsJg/TvjZ55tH+rzilttOEUdoFiYoXsCp1hg64NhwRP84O7PmtJ1eKkOL0bCqWCF+N3cfANbkEsUdUnURlirPRdK9G9K5+YGICCcx2wEwWvuVbpmpdU5Fo+NUv5rzbDTEvShLYS0ieYVwxo1nF+NNR4jA9FwgiZoKpifBAFWfX2kGit8bfNS7tn5Z5/42d7QXebDS7nElRaQf23pEaw1olIMAmiy2b37NPkPX7nc5Oj/zlj9QMDVky596aFY17D+ZGPEsKj9uBo6fksp4PdGRkTVVZp61rutQ/YdvCH4Rc1Xi2kBkUFR9xYbI5gbZpoDGdt9XFlpCemJA1RM5gvnkCw9q/lHhkayKx8LXmr5yGWdfWEajHdsF7z/QEwibWI6j4EngEkAPm9GnUAkzGXWq0olCgLRw9Cz6DvcuSrgWtn1n/jIiL55Gnzqd6Lxj11TnG9objJgy5Inb4GCBAKuCbZ7I4WuHWiS2xjZ0nZRTCbGlX7cgf+whAFWwA5rnamW4G3dwUe+79rVuB/gREd5GCcVGrlDnH57BtrIg7lZ3+Bl/bE4Kg1SYE6c4Ib8C9XI+OMph3fzVo7EqJDxKfGVIBA6Fplo5j2wwmLFicvHH3zAcVzD/kB4m7QJQNwVCPDYKSJ0PaUbl3y9LifL5zYcAaWDZCMb61BC7n/UIK8hfFWoy2ptLh2qMr9nec9+eH3M18YetO8kbkXZfsbZxi8hUsraFfU/ZOlXEch9UsU7E86ET9Kg/NdoqD14ugu0+lYG0OEvY0xcdrWGS9spAHM8KuJQUEn9KtHvvsWoSJzgHMUl5f+Zo3SAGdnpKBNX7kJZRV7RuRgSvfKnY5bj7jKWuG1TGQjD56gDDSTTCwtuX+DA2zzeUw4hfas0xCIBIPE2J55G97qPPexRVleN+LKIpJ5ED8ljkHQsophPTx2+TwflUK7dT+PhYH8fE8wGDSAugIuPjDdc/z4TwTq49INbR+6kCsdt+b1KhDgz1pXePqgo/HWSayBq7KI38g01yEifzfUlCQzmKeZdUxq8Xz+ecs9l9xWKFLBw/7AmwTzIbGLzkpRPF5e9MQZOqiEN3lh3khqhGrE39a//4VFJIX613vwcpZMV9mDPcwjd/6y+JU3zy17W4h0CevaGcLcsUadsViUNSWykwMk0EsYdVpjpM4gtdSFFSXrY1endElu5ScOAqoO0lSH1IAOh8LBqsKQrOWke1rKTL6yQXXs6tUylpnB270hvmkPFUwJ3Cfo+Pluko6psHCNBHs231OoBFMCG1PcuE+vcKvx0eMcP0OM0MTwSPKgbUNlOnXqFLR+PFLJ2Q6zjoA08lcM71oEstXgplS+eiKmHkhNo+Id0UAYVINRCJ7AYwQVOnyUwdSL5zD7+h489793N1/nhFIp4IAqXoCqIKx9rbHh1yoYOliA1ePlpx3gbhSy0YwFCzjTS+7Z+xDOGkFQQqUMabOjakgLRegddLocHA0rKQVnmkPW/7s/ICLBTGjheerOclb26zZ/REG3xq0HvTt6zjPPvP/KsovFF+9xOO39LtrKowvwuq4GEVHaaJ3xAhag27u167ADgZqtXJmCWY9t2nTVoA2t4hsJ53LLKaYT73zwDgmKBpRr0uop/OU3Ph37KkSS7hu1M+UF8fQLa7ag+AVkBFfAe5FdjspThbknqH2OoDAaYY7hN11XHaLlMuQtK8a7MbIunee21fqhSUGBDHbSZb+gMdI5bh6lBvdqJgKQqsZ5f/h7mjgRNUhqdlxbcKYc0Ef7H9fpB6S6KEPquF3ODrtV1cgPstHaCERZs4Xf5wqijS8HaHyoldq10k0ZDKe5MTI+Cw/9a7La2fg1H0r8eqh7ivvzrZ9CXcqPxsE0eudMnXqxVgbfUtQ4nUmQaNr4CAVqCFr9f+amv0kdPCDcR9zOxPILzgN9Fo5b+OLfRprR4uv+D2+8hP/1/dlFXzgaPApHgzdvR8zVa5ggMOpDfJVIfAkDEGxGcVuwwD3/QllRO2oiA//qTT7kUO5fY47+Je9kJ4prC4wOKqi45QRrw0amiNIR9/3Z+slYM8P+hYBXwBKjCJp8BISYtTDcwr2/LTL9WL9pOIPX0ys6MelnRylhVFDMpeawtmHxiD/buXFzdhDXdHio3exHT4OIbyLswK06ayJflEcBUditjd9/86XmyHPCvHChYPbRGy5/j+QbjFvatBf3HbFpSq2kVeM100GrhkkWBILJbEMv2uHnXkIQbGCIvz+zT8L5IWgIcAIJQhzUDM708mPPyISQo//jxBEVG4rQl+WLeCPREVfpgi6zHzvdc+GYBzft3+9XdfxAwhpBrhHUB4aIkGSloOO35i1b6F7QlEKMGinCqM+MxFtNMSoSDUCwzBhEDb1yGd9/mfX16wlkwIC+H3KMkn0RDuFt40q1aBTivMSyA3NRowkgO2IPSyxSMh4fktTTTg8dbtchAZEKMflB4eEVgPhLsHgqtpT2oOsQC2OeFfDyvkIjuJXhveWc/fqe1P5LiyGN1+Vx4A3gVVb1MFF/hHbBOcrVLoFrwAnTiOi9iDXz8ZKcAZTli0Z5dQipZtGMwGXQcQk8DHwjEx+L4akTynASMAcEi0f0ysa6CTdpa14pl12RedkXOlCO1PT0oPNFhEzP9/16qElhZWUsFSUtJljC6l2maPQOj/tQ0MqCFfpP3wMCYSgkuHm5PMecFW3Ouys+XP/JhsNweFz9wJpZt9C5FRioPP5QqcqYj19OTF236HacXPxoy77PJhB8FBCsNpxAcD64bz4x/TT0+CxCALDsegZc9FwQnBG7Dx2ZSXWZM83YK6r5imIsxoWAtyflKagsm0NvJSIVhK6DJVotR2v1LCoi6rvAc63eeDYacaZI+wqVyIXEA4vKZUvpPWiXv9MwxbebXh3hBP/7OJS/vrK0W7a17EZy90WTQeEB4cCipLJYU1jhpEcmFKJtni9WF5YR53vJVV29ww8gHVByIMig02mfSrewsQwX9Jrj489KX8Kg2K4+AiJuHbqbV4r4c/WHkybeGJVNBAKLatCS/CZWdQVwIMipLHiUKkn/cbZUm6nRfG2ryNTT82MXztxXqgMsGFZOYHSzVvLXy8K1xmNBB7BW/v/aJV75RWtMLXRLuQTvCD/mKG2zszRn0vZLp3d//vN35xtPf+hAzLSH9yZNf/jA97/sOrszNzPjsOj4S5bbRtybZYQIXk3uB/Qca4vPyfqFQGBBCYTyYDYlJ4KeHyvNm4wACGlw0nf73TxwHI8jEqlogagvrN/ipz/YZy1qDsswArkER0i+GFQUbQNZ8uD1YB9SO5RwqOknHU0TEL86tvue+v6Cm5GpxXvBa2/xp+emrKC7GT5rHRblgMcHk8r3i/DsRE72y/mw+kGK0JH2oNXiPrR6iUVrTfs7C4IbUhlUythNbTvsivEiGJ8iY0svODrzPuKN58dsxS0HrJg0F8V8rj90pJc8Hoh4fYyKcKsKLpMGr3XnumRQkKh5X6q2hovQGX7G62qIf3CcDWSp/o3BgTu6W71QUTT2kb8v/RNbf8ZlDph6q83XnjXpjmkfvdn3YvHleRVWKxlTeJ+r13Xlt8pM0JQVJu64rgiEAKSRIFcJkDh2lkTFipfFWxAFPdNRHnEJGzdlzHtznuLpccphDS9wO1wqkDkSHq28cyGCNgTeDdGzWYdPuujCIUA9eD1l8ImikDv08tgSBKc4XHD2H7eteHbtpC2bunLQzKR9MPXVzN2xaX9fPLinedSBXZb8h+AsSJEx6hlw+LDptaxpZOzHLzz41AU/ArHnJy/PbKIPzwVq0e5CSKIlkCrsDnVXSc7UWxaPfRMB9rp8rZ7WgzgU+mQiEMbjr6xKgTXwp1/txX1w9loOtuinMaJe005iks7EmkQlfkb3Elhn1JMirfjr2OxYbfg38KCj29Co6iaaH6ynJBzgUg+V5i0euOzZdUu3v98AjIT7x2UQ8UI1RTYO1/gPXupx7+qZY6DQPKa4oL4GMUbUbcV3J8Jg3BpLQW7grhR8ttAIuiTh5brnnFZ2MPvkt/esnTV75idvtOA10Pig9LKdWxIeXDd37PeHf9px1mM3IrQSef8FrRIMEuSoSs2Z3jage999QsKUh74v0sj9/ZPsE4c++K6rvxLUAnSqKtAHNAR6fRwhntZk95qt6z5eyBHPNznBYKe+yX0Wj3t3t6XgERy2h5EodJA2ag97SWAlBrGLFg6zsnwEQZmsOrjdRGh17bJdlZGF8GeiDSdIFDJ2BE2+ejxq5+hEcUCnXt3XPzzmMLn3kAcDIRJUyJe/Ljo/RnDBxwPSM2gluEnrJqhM2JKWhFZaE4LySWdtslxA+Y1MbOiU1FZn8R4hsIqQxEF5dZAsbq9L7B3bpHj+hKmtB8e1rSQVJC09jcfRunet+bb9+ad+wJtwZRy58xlwqGCtBM4KR2xVjQg3io0UbWUDY9SvFYr7V6siu6IlSR+nDbuxyF7RDIH/WuYqTlYJB0BIWcxfcCmLccI5VlXzQPOuOz6ZuHgAmuPz1WbWsENnPNYbcN4YAx3axwwMT4HTK+LDG9gNYhh6JByrVBWLgak6k6jpeEaxhyEQBqQ2XpRbj68aYrZ4FBxd7W2Ie3Wv+eWR9XC9WiPyP76EqkEUzwmYSxlc0Y2gbCAIrBC7dJSX9Wpxw7SKrN1Dsf+ih0U3pGMftYfAU4KMwADH7IUaqGbd+MEwLCaYFXtyOIUGwgDKhiYOIDUoWPHow8J07WKTniPiYCkpEsyRfPFvhpWsSXzT5zuWFIw5rpRCm9AGNTtSdyAR0Bp6ixNLODSlwXv2WmMzqzUXuXQ+H/sEeG0zAtGERiIaKwT/9iZGRunaxCetJOJIgUqEfhDHl+mo6efPmnfetuTpr/KY6x7EbHaj/qAGEOLcdGbVYoOEZ/bIU17r7UzS3q7DNuM5sk/jKAOFMgUDASvD3i7WUqGIg/pXJ01oI0FdklvGN3qlqOTSSxWynWRJyCDpdJ6Dv+DJ6ZIP0wuftNquPoMiTQI24nEaAJoBnVkOKQRADKrX69a20UWpXTp1WkaOstedilVnoH6nGyAOHj5m7aOjL7dNaDw8zmAir28EsRHoBfNBk9/KIUka8F2EUBUgRohD60Ss8viE+wi2TmHUR3vl4FQuptPoeoc12IVXyfFFP/zKuOpC8JDE2/z4xLOtYxqtZGFGrKvx7okQsFAb9AgfmmewdpFWPTiAgLe9QBUFZ8TpwtCTT8QBu78b9kJdB130j+8+vWAV1ZlRzfuAog3SvQG9+o7qKoWDAas6vAKOjpEETaS/gGphmwPrx7gITo/HbXN5ELDBQ9cUGIHGDnSNmAzBJUfQiunm+jNEtMK3U1ZtaC6a9oMh6DDmQdyIr9TgU5ugmmt0FCgaY0MbrwwLKgoJIeClMqH5KbYAEB9b9SThxUM3JDWf/WrahPMpYB7/zxAIDSNHBizYP528bEvzsKhHm0RGwZKIE/kCYixhgK4Mdc1f4DqE7JQP465qwFZD4QyfASAi+LniCQ8z6nuExf3ytznDSWVgZp/J+Eo7/veZfDn9uRm3GhJ2MYNWh/pdYHFX8tQEhV8RYoIYiJY4TIAP9uvQRQAPqaZuvL5Y110fc/yhB1MHU0V+eHid/mswkRTJfOdf82IiYnonavRWnP/Q0viEgolapdcSEHFiCOk95siPw3S4Jq5OY3ctKZAL39Q9nih8Kv24qUWnv7ZkRhvsckRt9RIJ5UebPnhovgBHfeeXiHEAaCjTqhIRYdI1lcI2fPTMUjKGiBlgHv9PEQgNHsMxTbJqHZy/6d1bGnV4uEtYvJsjJikx8CMkXfa3DgrnzlizwHwKIw/eCI5VYKzRpO0Z1vC9d+ZvvnW00JMfDQVCVk0+hwWEEEDS2X+bNLCPMXGXZNDrQV2kTnnAmTlQ/rzX/EXw4AMKIjzBG4NVWYwIN+l6hifu6nfL0BvHd+5v9UeBqQ0PmEiGl8Zn54y1x/u17NI7OSKxGOs8Hb3MFdVymLiZ+JqhCZ6RKqNxJsIjKQ5tjd5hSBKpSqWjnfEUcPHXnpp8pkNis16djNEWhcQ3TmOhLCFvgK6CNxLiLuBH23yeiS68cE7VNDCaNLfFNH5u37xNT/NimEj6Js85qMkYJ+43r0IK/RE+ONgGONEDwE79AAP9DYmHxAenTB8/9x+De/yp9Y2aqNcaSHpZi4BgOJkHDz+qlN7XwieBVDBZDwLAAl3l31joYmowqWgfSEPSWaZhhk4RH2bSdtZFHu+X2PovGbPXDiMzKl+U1wqPEwCXiIaIZDDOZOxesLFfL0P83Jb6CNiltDgKJotQc0gl8xAsvE0IDz3ZwgELfQgeIswqeOh99/QuEQlPSAAABIhJREFUFsyoAkfPCKNR294YVXp7fPMZ+82b+q0fPNhFxJFeT5BvGh8iko+enp85avioNnfEtni1rSlaNtL4oDmMD8AhPBE8/jHwQhVD9wkWvlikBSP/0D16FoAdY4l+0FILwRAUkC7qQi9pgWCQwmFhdHvy+dj43aoywMUJlm+mLs964JYBHfuaEr6J0Rs1IBS8AjAAB/PBgTkhIwSNCW8X3/Sb5g/w0Dhy/Ab8ZMgQFaz66DRmn+jGx3sltkj5asrzpAaT2yn4k09JEBpMfXh/UZiYTO95I/L9IyVSHARYLYxljpWWtR/OYBhIkhDX2gfiTjQBlP+BF8ztLlhynwJtPISXlTYrAc7RC0KxJ4BxwbTjBaY+nkeoh3HSG4ACWMFiP8EEjpSEo9haSfy2QXjMa/+cvhrvg0PCglzdsYMW8yhUfyIiwYcT+rBXV7e5XHBxWrGjckiB19moDIo03j7na5eYGSIucpgIDqIfHWChPUo8o32DCKCpzqtURmr1P7eNa7y13w09XqWX0RAE1dupH6KaMWsnf7y53dEzJ54stVTcU+yyd7Tg2Hk52saaH21DDmCjlCtHBEd1PKLxo6SH6Zhgx3hFYDx1GJFoBbYGrbbEIGnOmzTaIxjLHexSwacZG9OtICggKf76U0q1uRq4fGqKxVU5qcRh718seCNssJB7uOEW40FjQ/yN4OBCAL9xBoT/xj0sZFgcjOp6D7sUExa5Jykq+s2vJj33FW8GTNNvog40y4R2sx59tMLjbo8KsJFDS8s/TsILtIkzhWPBujV3zf/9gNnHxlkdNabeDpkJMVkGymVwQvlaVfVvrF3Y8UxxTle9TroJQVs6ny4rEpITmnaxed0Son+Q/0/5wdLLZzvFNihzOpyHGsfEH+/cqtORVUOfOB1oLKXahAbuXcM3TL8p2HDzwfJFXp7p9Y82984pyE02GAwdL1sqWoAgjE1jEjva3E5IDXQeEF22lJ0oV7zWznFJlYUVJXtjImMPtWrY6Ai8B3zcGA0TF+aS8xqAqJ6FTMAChQfyw0TPiIArKgpvvVRe3DbMaOyxJ/+idHN847Y2xRtd5nLIThAzaSi01xRvCNOEa3Xlh8vyT/dq0EK+WFr4c+voBLsqSQdbN2ha1LB9m7Pm3oO5N261dgkPq4gjcJ/PFbm0+4O6jXn77cQzuYdvvVxZ1DnCFHbDibKimBtiGrSGq3i0TfaQBiCGSTpvZtGlY4mRMSoOph/DnsnJxlHxh3t0v/EwXi1e9RoPf1AMPzUHWgStX/n5B/9VTSz+Kz2pTSi16/i6pCSy4OJFURerEfo06+po6YvuVzubCMIQM6pZhmpnuJbrq8Hy3oULMVZvEcLBMBaeoBMfad4Nv4IkmG1TOiOuGbl6X4MUC1JD1S2CCQTLXV2qblb7cV5VDR/s+sp4/vIlpfDSZaEczxJMBrVHpy7iw7feE2q8AjVwxpDCUsiQQkhahzgCGembq6wb0wVYyTlTq/6M4Nh98agRb9RV7JUaoX2zcIXM2dXzVP2GhE8dx1/5QZI7aJv/H+y6kJy2/hwbAAAAAElFTkSuQmCC"},{"id":"USSR-Latvia","name":"USSR - Latvia","type":"wms","template":"http://www.gisnet.lv/cgi-bin/topo?FORMAT=image/jpeg&VERSION=1.1.1&service=WMS&REQUEST=GetMap&LAYERS=DTO,DTC,DIVDPTC,PD,VS,DS,PS,M&SRS={proj}&WIDTH={width}&height={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[26.630859375,57.56888774130087],[25.169677734375,58.048818457936505],[22.543945312499996,57.76865857271793],[21.544189453124996,57.53351974347291],[21.016845703125,56.81892067431724],[21.016845703125,56.03522578369872],[22.03857421875,56.389583525613055],[24.719238281249996,56.33481154165235],[26.751708984375,55.665193184436035],[28.19091796875,56.139428693863266],[27.784423828125,57.40946113558119],[26.630859375,57.56888774130087]]]},{"id":"sjcgis.org-General_Basemap_WM","name":"Vector Streetmap for San Juan County WA","type":"tms","template":"http://sjcgis.org/arcgis/rest/services/Basemaps/General_Basemap_WM/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,19],"polygon":[[[-123.274024,48.692975],[-123.007726,48.767256],[-123.007619,48.831577],[-122.783495,48.758416],[-122.693402,48.658522],[-122.767451,48.603606],[-122.744842,48.387083],[-123.248221,48.283531],[-123.114524,48.422614],[-123.219035,48.548575],[-123.274024,48.692975]]],"best":true,"description":"Public domain street and address data from the San Juan County, WA. Updated at least quarterly."},{"id":"Vejmidte_Denmark","name":"Vejmidte","type":"tms","template":"http://{switch:a,b,c}.tile.openstreetmap.dk/danmark/vejmidte/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[8.3743941,54.9551655],[8.3683809,55.4042149],[8.2103997,55.4039795],[8.2087314,55.4937345],[8.0502655,55.4924731],[8.0185123,56.7501399],[8.1819161,56.7509948],[8.1763274,57.0208898],[8.3413329,57.0219872],[8.3392467,57.1119574],[8.5054433,57.1123212],[8.5033923,57.2020499],[9.3316304,57.2027636],[9.3319079,57.2924835],[9.4978864,57.2919578],[9.4988593,57.3820608],[9.6649749,57.3811615],[9.6687295,57.5605591],[9.8351961,57.5596265],[9.8374896,57.6493322],[10.1725726,57.6462818],[10.1754245,57.7367768],[10.5118282,57.7330269],[10.5152095,57.8228945],[10.6834853,57.8207722],[10.6751613,57.6412021],[10.5077045,57.6433097],[10.5039992,57.5535088],[10.671038,57.5514113],[10.6507805,57.1024538],[10.4857673,57.1045138],[10.4786236,56.9249051],[10.3143981,56.9267573],[10.3112341,56.8369269],[10.4750295,56.83509],[10.4649016,56.5656681],[10.9524239,56.5589761],[10.9479249,56.4692243],[11.1099335,56.4664675],[11.1052639,56.376833],[10.9429901,56.3795284],[10.9341235,56.1994768],[10.7719685,56.2020244],[10.7694751,56.1120103],[10.6079695,56.1150259],[10.4466742,56.116717],[10.2865948,56.118675],[10.2831527,56.0281851],[10.4439274,56.0270388],[10.4417713,55.7579243],[10.4334961,55.6693533],[10.743814,55.6646861],[10.743814,55.5712253],[10.8969041,55.5712253],[10.9051793,55.3953852],[11.0613726,55.3812841],[11.0593038,55.1124061],[11.0458567,55.0318621],[11.2030844,55.0247474],[11.2030844,55.117139],[11.0593038,55.1124061],[11.0613726,55.3812841],[11.0789572,55.5712253],[10.8969041,55.5712253],[10.9258671,55.6670198],[10.743814,55.6646861],[10.7562267,55.7579243],[10.4417713,55.7579243],[10.4439274,56.0270388],[10.4466742,56.116717],[10.6079695,56.1150259],[10.6052053,56.0247462],[10.9258671,56.0201215],[10.9197132,55.9309388],[11.0802782,55.92792],[11.0858066,56.0178284],[11.7265047,56.005058],[11.7319981,56.0952142],[12.0540333,56.0871256],[12.0608477,56.1762576],[12.7023469,56.1594405],[12.6611131,55.7114318],[12.9792318,55.7014026],[12.9612912,55.5217294],[12.3268659,55.5412096],[12.3206071,55.4513655],[12.4778226,55.447067],[12.4702432,55.3570479],[12.6269738,55.3523837],[12.6200898,55.2632576],[12.4627339,55.26722],[12.4552949,55.1778223],[12.2987046,55.1822303],[12.2897344,55.0923641],[12.6048608,55.0832904],[12.5872011,54.9036285],[12.2766618,54.9119031],[12.2610181,54.7331602],[12.1070691,54.7378161],[12.0858621,54.4681655],[11.7794953,54.4753579],[11.7837381,54.5654783],[11.1658525,54.5782155],[11.1706443,54.6686508],[10.8617173,54.6733956],[10.8651245,54.7634667],[10.7713646,54.7643888],[10.7707276,54.7372807],[10.7551428,54.7375776],[10.7544039,54.7195666],[10.7389074,54.7197588],[10.7384368,54.7108482],[10.7074486,54.7113045],[10.7041094,54.6756741],[10.5510973,54.6781698],[10.5547184,54.7670245],[10.2423994,54.7705935],[10.2459845,54.8604673],[10.0902268,54.8622134],[10.0873731,54.7723851],[9.1555798,54.7769557],[9.1562752,54.8675369],[8.5321973,54.8663765],[8.531432,54.95516],[8.3743941,54.9551655]],[[11.4577738,56.819554],[11.7849181,56.8127385],[11.7716715,56.6332796],[11.4459621,56.6401087],[11.4577738,56.819554]],[[11.3274736,57.3612962],[11.3161808,57.1818004],[11.1508692,57.1847276],[11.1456628,57.094962],[10.8157703,57.1001693],[10.8290599,57.3695272],[11.3274736,57.3612962]],[[11.5843266,56.2777928],[11.5782882,56.1880397],[11.7392309,56.1845765],[11.7456428,56.2743186],[11.5843266,56.2777928]],[[14.6825922,55.3639405],[14.8395247,55.3565231],[14.8263755,55.2671261],[15.1393406,55.2517359],[15.1532015,55.3410836],[15.309925,55.3330556],[15.295719,55.2437356],[15.1393406,55.2517359],[15.1255631,55.1623802],[15.2815819,55.1544167],[15.2535578,54.9757646],[14.6317464,55.0062496],[14.6825922,55.3639405]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Vejmidte","terms_text":"Danish municipalities"},{"id":"Vercors-Orthophotos-1999","name":"Vercors (Réserve naturelle des Hauts-Plateaux du Vercors) - Orthophoto - 1999 - 1 m","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/PNRVercors-RHP-1999/{zoom}/{x}/{y}","endDate":"1999-01-01T00:00:00.000Z","startDate":"1999-01-01T00:00:00.000Z","scaleExtent":[0,19],"polygon":[[[5.4356493,44.9991755],[5.4319266,44.9229046],[5.4362415,44.9228447],[5.4347186,44.8900063],[5.4330265,44.8899463],[5.4306544,44.8502562],[5.4338694,44.8501362],[5.4328541,44.8263781],[5.435477,44.8262581],[5.4349693,44.8138952],[5.4410611,44.8137151],[5.4371691,44.7409842],[5.4545983,44.7404433],[5.4528215,44.7042536],[5.5210998,44.7024496],[5.5232996,44.7385803],[5.5890397,44.7368374],[5.5929812,44.8126305],[5.5879047,44.8129906],[5.5897661,44.8494722],[5.588228,44.8493765],[5.5897237,44.8735055],[5.5386318,44.8750318],[5.5394694,44.886859],[5.5283416,44.8873253],[5.5300168,44.9201234],[5.5331876,44.9201234],[5.5376148,44.996241],[5.4356493,44.9991755]]],"terms_text":"Parc Naturel du Vercors"},{"id":"vicosa_al","name":"Viçosa AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Vicosa&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.19799506289,-9.42067411388],[-36.19777392167,-9.41788790418],[-36.19779919496,-9.41528243495],[-36.19801401785,-9.41074463302],[-36.19789396976,-9.4085692096],[-36.19792556136,-9.40636883904],[-36.1979697896,-9.40560836777],[-36.19793187968,-9.40405001978],[-36.19798874457,-9.40311500762],[-36.19827306898,-9.40027878861],[-36.19829202394,-9.39495536094],[-36.19788765144,-9.39168895497],[-36.19844366363,-9.38932016801],[-36.19836784379,-9.3862033184],[-36.197938198,-9.38166513525],[-36.19801401785,-9.37972018144],[-36.1983425705,-9.37867289409],[-36.19831729722,-9.37697727931],[-36.19816565754,-9.37585517674],[-36.19851948347,-9.37139166614],[-36.1982162041,-9.36238966295],[-36.1986205766,-9.35318792839],[-36.19849421019,-9.35096850339],[-36.19857003004,-9.34852462578],[-36.19879748957,-9.34667923744],[-36.19859530332,-9.34348719127],[-36.19877221629,-9.34084375588],[-36.19894912926,-9.33301308429],[-36.19877221629,-9.33039450836],[-36.28957911612,-9.33114267492],[-36.28937692987,-9.33318765532],[-36.28950329627,-9.33538225508],[-36.28925056346,-9.34124276628],[-36.28945274971,-9.34291361737],[-36.28927583674,-9.34520790729],[-36.28897255737,-9.37311224406],[-36.28914947033,-9.37480787773],[-36.2889220108,-9.37707702159],[-36.28889673752,-9.38540540039],[-36.28871982455,-9.38632799292],[-36.28871982455,-9.39343436657],[-36.28887146424,-9.39557871736],[-36.28877037111,-9.40128860991],[-36.28861873143,-9.40652467311],[-36.28871982455,-9.40714800869],[-36.28877037111,-9.4213348225],[-36.19799506289,-9.42067411388]]],"terms_url":"http://www.seplande.al.gov.br/","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"wien.gv.at-labels","name":"Vienna: Beschriftungen (annotations)","type":"tms","template":"https://maps.wien.gv.at/wmts/beschriftung/normal/google3857/{zoom}/{y}/{x}.png","scaleExtent":[12,19],"polygon":[[[16.17,48.1],[16.17,48.33],[16.58,48.33],[16.58,48.1],[16.17,48.1]]],"terms_url":"https://data.wien.gv.at/","terms_text":"Stadt Wien","icon":"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif"},{"id":"wien.gv.at-gp","name":"Vienna: Mehrzweckkarte (general purpose)","type":"tms","template":"https://maps.wien.gv.at/wmts/fmzk/pastell/google3857/{zoom}/{y}/{x}.jpeg","scaleExtent":[10,19],"polygon":[[[16.17,48.1],[16.17,48.33],[16.58,48.33],[16.58,48.1],[16.17,48.1]]],"terms_url":"https://data.wien.gv.at/","terms_text":"Stadt Wien","icon":"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif"},{"id":"wien.gv.at-aerial_image","name":"Vienna: Orthofoto (aerial image)","type":"tms","template":"https://maps.wien.gv.at/wmts/lb/farbe/google3857/{zoom}/{y}/{x}.jpeg","scaleExtent":[10,19],"polygon":[[[16.17,48.1],[16.17,48.33],[16.58,48.33],[16.58,48.1],[16.17,48.1]]],"terms_url":"https://data.wien.gv.at/","terms_text":"Stadt Wien","icon":"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif"},{"id":"vogis.cnv.at-DGM","name":"VoGIS: DGM (Terrain model)","type":"wms","template":"http://vogis.cnv.at/mapserver/mapserv?map=i_hoehen_und_gelaende_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=schummerung_50cm_terrain&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[9.9680512,47.5463081],[9.9680895,47.5462689],[9.9712464,47.544249],[9.9648355,47.538031],[9.9683952,47.5280172],[9.965262,47.5208928],[9.9956949,47.5027787],[9.9873585,47.4984652],[10.0007641,47.4821056],[10.023014,47.4841071],[10.0374328,47.4891775],[10.0447745,47.4876222],[10.0541256,47.4758854],[10.0534684,47.4668571],[10.064681,47.4636357],[10.0699906,47.4559503],[10.0805676,47.4553604],[10.0885672,47.4602924],[10.091638,47.4589276],[10.0938486,47.4404644],[10.1055856,47.4287167],[10.0937374,47.4168811],[10.07418,47.4147226],[10.0691405,47.410176],[10.0862396,47.3995221],[10.0828437,47.3938062],[10.0998387,47.3547604],[10.1193354,47.375613],[10.1416871,47.36718],[10.1658749,47.3688749],[10.1695804,47.3712997],[10.1693975,47.3858299],[10.1813043,47.3872516],[10.181849,47.3924258],[10.1950843,47.3893456],[10.1998763,47.3833352],[10.2125912,47.3803897],[10.227051,47.388895],[10.2361856,47.3819213],[10.2316784,47.3789694],[10.2371623,47.3735651],[10.2169885,47.3543552],[10.2171047,47.3498849],[10.2042369,47.3367531],[10.2074173,47.3323161],[10.1995092,47.3264601],[10.2111311,47.3189838],[10.2159718,47.311064],[10.2123593,47.3112242],[10.1991314,47.2975423],[10.1896365,47.2939449],[10.1796106,47.2960256],[10.172077,47.2790762],[10.1740416,47.2702482],[10.1783421,47.2701114],[10.174493,47.263697],[10.218842,47.255327],[10.223433,47.249833],[10.210873,47.247805],[10.1977606,47.236662],[10.207913,47.232802],[10.214282,47.216842],[10.21269,47.204315],[10.1996265,47.195388],[10.1995066,47.1852535],[10.2115119,47.1712368],[10.2091987,47.1653713],[10.20851,47.159483],[10.213206,47.1576984],[10.222203,47.15323],[10.2216565,47.1492513],[10.214808,47.143515],[10.203327,47.142152],[10.208868,47.131643],[10.186295,47.12886],[10.186525,47.119455],[10.172877,47.120333],[10.162993,47.113607],[10.157657,47.114262],[10.154415,47.105778],[10.132428,47.081218],[10.1345877,47.0639183],[10.1508456,47.0618412],[10.156932,47.048827],[10.1441816,47.0335527],[10.1232555,47.0220943],[10.1328399,47.0120428],[10.1544702,47.0054497],[10.159614,46.9988153],[10.1544222,46.9929855],[10.1600074,46.9839969],[10.1446293,46.9830135],[10.1349173,46.9658398],[10.1350134,46.9548285],[10.1268364,46.9434986],[10.0977188,46.9267603],[10.0995372,46.9171215],[10.1092134,46.908337],[10.1090833,46.8943061],[10.1249668,46.8801373],[10.1414741,46.8746789],[10.1396666,46.8621658],[10.1450621,46.8510986],[10.1394105,46.8473781],[10.1230851,46.8484838],[10.1191237,46.8441698],[10.1051833,46.8408981],[10.0919546,46.851426],[10.0926536,46.8581775],[10.087123,46.861277],[10.0548814,46.8617049],[10.0508964,46.8644202],[10.0519245,46.8740502],[10.0389144,46.8861128],[10.0322055,46.8880172],[10.0178184,46.9016148],[10.0049435,46.8988926],[9.9824336,46.9061986],[9.9779314,46.9160343],[9.9665663,46.9122226],[9.9590704,46.9160246],[9.946121,46.9123495],[9.9375809,46.9132426],[9.9215303,46.918824],[9.9123097,46.9260554],[9.9063207,46.9253006],[9.8944853,46.9316447],[9.8761296,46.9346278],[9.8807063,46.9401115],[9.8765706,46.9407057],[9.8748781,46.9503903],[9.8787197,46.9570665],[9.8707312,46.9632091],[9.8848165,46.9854648],[9.8923039,46.9903589],[9.8887771,47.0007231],[9.870696,47.0096514],[9.8711507,47.0130577],[9.8803497,47.0172237],[9.8777935,47.0205525],[9.8597449,47.0232098],[9.8527287,47.0164129],[9.8361195,47.012531],[9.8235302,47.0198587],[9.8075641,47.0235627],[9.7849142,47.0384853],[9.7480774,47.0369227],[9.7418488,47.042675],[9.718211,47.0433745],[9.7070102,47.0480458],[9.7075964,47.0538077],[9.69756,47.0523884],[9.6839177,47.0576471],[9.6818398,47.0620979],[9.6774319,47.061409],[9.6582148,47.0581823],[9.6450573,47.059775],[9.6415752,47.0559826],[9.6365412,47.051703],[9.6263272,47.0513274],[9.6070544,47.0607725],[9.6133977,47.0694958],[9.6115341,47.0794024],[9.6186894,47.0781689],[9.6233873,47.0825788],[9.6334608,47.0834395],[9.6356428,47.0955277],[9.6285845,47.1075584],[9.6208286,47.1103155],[9.6350298,47.1281316],[9.6246665,47.1326485],[9.6225823,47.1413535],[9.6258673,47.1458981],[9.6205943,47.1516392],[9.6089021,47.1477494],[9.5967871,47.1629415],[9.5794635,47.1711566],[9.5645583,47.1702904],[9.5730168,47.1755955],[9.5725939,47.1907921],[9.5803175,47.1957775],[9.5847667,47.2053225],[9.5687023,47.2196758],[9.5585129,47.2241649],[9.5517611,47.2237671],[9.5667871,47.2428808],[9.5307265,47.2705781],[9.5461876,47.2800507],[9.556344,47.2982863],[9.588051,47.3173029],[9.5996599,47.3454983],[9.6107327,47.355706],[9.6244598,47.3661451],[9.6587582,47.369461],[9.6725468,47.3802057],[9.673111,47.3919406],[9.6516178,47.404626],[9.6455139,47.4311951],[9.6451212,47.4378008],[9.6579866,47.4477909],[9.6589756,47.4522045],[9.6223413,47.457472],[9.609044,47.4705422],[9.6029186,47.4619769],[9.5951426,47.4633095],[9.5821741,47.4827585],[9.562202,47.4959175],[9.550566,47.5371757],[9.5827036,47.5359236],[9.6046496,47.5295205],[9.7347836,47.5339558],[9.7351711,47.5466141],[9.7416436,47.5549858],[9.7471037,47.5556923],[9.7433711,47.5586655],[9.7520662,47.5674668],[9.7480649,47.5705239],[9.7563218,47.5726206],[9.7563266,47.5796315],[9.7619689,47.5809636],[9.7655314,47.5891166],[9.7693306,47.5873852],[9.7769663,47.5954393],[9.7915143,47.5935211],[9.7999911,47.5961057],[9.81414,47.5880685],[9.8238141,47.5871045],[9.8272819,47.579972],[9.8207906,47.5707624],[9.8256191,47.5592156],[9.8171007,47.5533268],[9.8157872,47.5476661],[9.8502301,47.5416393],[9.8583884,47.5338767],[9.8745052,47.5285372],[9.8780368,47.5387569],[9.8751486,47.543427],[9.8812471,47.5481426],[9.8891039,47.5439867],[9.8993513,47.54475],[9.9066603,47.5421716],[9.913579,47.532546],[9.9218947,47.5296364],[9.9335226,47.5326499],[9.9410791,47.5382227],[9.9636997,47.5347198],[9.9588294,47.5431278],[9.9631795,47.54229],[9.9680512,47.5463081]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAD1BMVEUAAACEAgT8AgQEAgSEgoTQjzHEAAAAAXRSTlMAQObYZgAAAHJJREFUeF6ljVEKgzAQRCftBUQv0KwXML7cwPvfqQwJtIVqi76fHR7DrKSUJY1DD84xKEVuwcT40C1HC18bqQDTBKWosUZn+VvQ4UTjkoCYWd/Eco9ZLwEWggsNC9CPL3C0UauFz44wFh941Bw0tm1PPAGCUydahBcw6wAAAABJRU5ErkJggg=="},{"id":"vogis.cnv.at-DOM","name":"VoGIS: DOM (Surface model)","type":"wms","template":"http://vogis.cnv.at/mapserver/mapserv?map=i_hoehen_und_gelaende_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=schummerung_50cm_surface&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[9.9680512,47.5463081],[9.9680895,47.5462689],[9.9712464,47.544249],[9.9648355,47.538031],[9.9683952,47.5280172],[9.965262,47.5208928],[9.9956949,47.5027787],[9.9873585,47.4984652],[10.0007641,47.4821056],[10.023014,47.4841071],[10.0374328,47.4891775],[10.0447745,47.4876222],[10.0541256,47.4758854],[10.0534684,47.4668571],[10.064681,47.4636357],[10.0699906,47.4559503],[10.0805676,47.4553604],[10.0885672,47.4602924],[10.091638,47.4589276],[10.0938486,47.4404644],[10.1055856,47.4287167],[10.0937374,47.4168811],[10.07418,47.4147226],[10.0691405,47.410176],[10.0862396,47.3995221],[10.0828437,47.3938062],[10.0998387,47.3547604],[10.1193354,47.375613],[10.1416871,47.36718],[10.1658749,47.3688749],[10.1695804,47.3712997],[10.1693975,47.3858299],[10.1813043,47.3872516],[10.181849,47.3924258],[10.1950843,47.3893456],[10.1998763,47.3833352],[10.2125912,47.3803897],[10.227051,47.388895],[10.2361856,47.3819213],[10.2316784,47.3789694],[10.2371623,47.3735651],[10.2169885,47.3543552],[10.2171047,47.3498849],[10.2042369,47.3367531],[10.2074173,47.3323161],[10.1995092,47.3264601],[10.2111311,47.3189838],[10.2159718,47.311064],[10.2123593,47.3112242],[10.1991314,47.2975423],[10.1896365,47.2939449],[10.1796106,47.2960256],[10.172077,47.2790762],[10.1740416,47.2702482],[10.1783421,47.2701114],[10.174493,47.263697],[10.218842,47.255327],[10.223433,47.249833],[10.210873,47.247805],[10.1977606,47.236662],[10.207913,47.232802],[10.214282,47.216842],[10.21269,47.204315],[10.1996265,47.195388],[10.1995066,47.1852535],[10.2115119,47.1712368],[10.2091987,47.1653713],[10.20851,47.159483],[10.213206,47.1576984],[10.222203,47.15323],[10.2216565,47.1492513],[10.214808,47.143515],[10.203327,47.142152],[10.208868,47.131643],[10.186295,47.12886],[10.186525,47.119455],[10.172877,47.120333],[10.162993,47.113607],[10.157657,47.114262],[10.154415,47.105778],[10.132428,47.081218],[10.1345877,47.0639183],[10.1508456,47.0618412],[10.156932,47.048827],[10.1441816,47.0335527],[10.1232555,47.0220943],[10.1328399,47.0120428],[10.1544702,47.0054497],[10.159614,46.9988153],[10.1544222,46.9929855],[10.1600074,46.9839969],[10.1446293,46.9830135],[10.1349173,46.9658398],[10.1350134,46.9548285],[10.1268364,46.9434986],[10.0977188,46.9267603],[10.0995372,46.9171215],[10.1092134,46.908337],[10.1090833,46.8943061],[10.1249668,46.8801373],[10.1414741,46.8746789],[10.1396666,46.8621658],[10.1450621,46.8510986],[10.1394105,46.8473781],[10.1230851,46.8484838],[10.1191237,46.8441698],[10.1051833,46.8408981],[10.0919546,46.851426],[10.0926536,46.8581775],[10.087123,46.861277],[10.0548814,46.8617049],[10.0508964,46.8644202],[10.0519245,46.8740502],[10.0389144,46.8861128],[10.0322055,46.8880172],[10.0178184,46.9016148],[10.0049435,46.8988926],[9.9824336,46.9061986],[9.9779314,46.9160343],[9.9665663,46.9122226],[9.9590704,46.9160246],[9.946121,46.9123495],[9.9375809,46.9132426],[9.9215303,46.918824],[9.9123097,46.9260554],[9.9063207,46.9253006],[9.8944853,46.9316447],[9.8761296,46.9346278],[9.8807063,46.9401115],[9.8765706,46.9407057],[9.8748781,46.9503903],[9.8787197,46.9570665],[9.8707312,46.9632091],[9.8848165,46.9854648],[9.8923039,46.9903589],[9.8887771,47.0007231],[9.870696,47.0096514],[9.8711507,47.0130577],[9.8803497,47.0172237],[9.8777935,47.0205525],[9.8597449,47.0232098],[9.8527287,47.0164129],[9.8361195,47.012531],[9.8235302,47.0198587],[9.8075641,47.0235627],[9.7849142,47.0384853],[9.7480774,47.0369227],[9.7418488,47.042675],[9.718211,47.0433745],[9.7070102,47.0480458],[9.7075964,47.0538077],[9.69756,47.0523884],[9.6839177,47.0576471],[9.6818398,47.0620979],[9.6774319,47.061409],[9.6582148,47.0581823],[9.6450573,47.059775],[9.6415752,47.0559826],[9.6365412,47.051703],[9.6263272,47.0513274],[9.6070544,47.0607725],[9.6133977,47.0694958],[9.6115341,47.0794024],[9.6186894,47.0781689],[9.6233873,47.0825788],[9.6334608,47.0834395],[9.6356428,47.0955277],[9.6285845,47.1075584],[9.6208286,47.1103155],[9.6350298,47.1281316],[9.6246665,47.1326485],[9.6225823,47.1413535],[9.6258673,47.1458981],[9.6205943,47.1516392],[9.6089021,47.1477494],[9.5967871,47.1629415],[9.5794635,47.1711566],[9.5645583,47.1702904],[9.5730168,47.1755955],[9.5725939,47.1907921],[9.5803175,47.1957775],[9.5847667,47.2053225],[9.5687023,47.2196758],[9.5585129,47.2241649],[9.5517611,47.2237671],[9.5667871,47.2428808],[9.5307265,47.2705781],[9.5461876,47.2800507],[9.556344,47.2982863],[9.588051,47.3173029],[9.5996599,47.3454983],[9.6107327,47.355706],[9.6244598,47.3661451],[9.6587582,47.369461],[9.6725468,47.3802057],[9.673111,47.3919406],[9.6516178,47.404626],[9.6455139,47.4311951],[9.6451212,47.4378008],[9.6579866,47.4477909],[9.6589756,47.4522045],[9.6223413,47.457472],[9.609044,47.4705422],[9.6029186,47.4619769],[9.5951426,47.4633095],[9.5821741,47.4827585],[9.562202,47.4959175],[9.550566,47.5371757],[9.5827036,47.5359236],[9.6046496,47.5295205],[9.7347836,47.5339558],[9.7351711,47.5466141],[9.7416436,47.5549858],[9.7471037,47.5556923],[9.7433711,47.5586655],[9.7520662,47.5674668],[9.7480649,47.5705239],[9.7563218,47.5726206],[9.7563266,47.5796315],[9.7619689,47.5809636],[9.7655314,47.5891166],[9.7693306,47.5873852],[9.7769663,47.5954393],[9.7915143,47.5935211],[9.7999911,47.5961057],[9.81414,47.5880685],[9.8238141,47.5871045],[9.8272819,47.579972],[9.8207906,47.5707624],[9.8256191,47.5592156],[9.8171007,47.5533268],[9.8157872,47.5476661],[9.8502301,47.5416393],[9.8583884,47.5338767],[9.8745052,47.5285372],[9.8780368,47.5387569],[9.8751486,47.543427],[9.8812471,47.5481426],[9.8891039,47.5439867],[9.8993513,47.54475],[9.9066603,47.5421716],[9.913579,47.532546],[9.9218947,47.5296364],[9.9335226,47.5326499],[9.9410791,47.5382227],[9.9636997,47.5347198],[9.9588294,47.5431278],[9.9631795,47.54229],[9.9680512,47.5463081]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAD1BMVEUAAACEAgT8AgQEAgSEgoTQjzHEAAAAAXRSTlMAQObYZgAAAHJJREFUeF6ljVEKgzAQRCftBUQv0KwXML7cwPvfqQwJtIVqi76fHR7DrKSUJY1DD84xKEVuwcT40C1HC18bqQDTBKWosUZn+VvQ4UTjkoCYWd/Eco9ZLwEWggsNC9CPL3C0UauFz44wFh941Bw0tm1PPAGCUydahBcw6wAAAABJRU5ErkJggg=="},{"id":"vogis.cnv.at-ef2012_12cm","name":"VoGIS: Echtfarbenbild 2012 (12cm)","type":"wms","template":"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ef2012_12cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","polygon":[[[9.5436683,47.4847893],[9.6145139,47.4505807],[9.6135938,47.3827196],[9.4424603,47.2479843],[9.4461405,47.0959963],[9.4286592,47.0891059],[9.4249789,47.0151345],[9.8528128,47.0019594],[9.8574132,46.898956],[9.9669019,46.889525],[10.0451081,46.849897],[10.1582771,46.833534],[10.1591972,46.8920401],[10.1471804,46.8924787],[10.1511549,46.9433055],[10.1631717,46.9428673],[10.1646986,46.9623816],[10.1785187,46.9668098],[10.1757585,47.1035121],[10.2291227,47.1022595],[10.2208421,47.2436121],[10.2613253,47.4126142],[10.1242344,47.4057648],[10.093872,47.4779493],[10.0046249,47.5071683],[9.9862234,47.5612116],[9.8436121,47.5624533],[9.8408519,47.6071356],[9.539988,47.6065153],[9.5436683,47.4847893]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAD1BMVEUAAACEAgT8AgQEAgSEgoTQjzHEAAAAAXRSTlMAQObYZgAAAHJJREFUeF6ljVEKgzAQRCftBUQv0KwXML7cwPvfqQwJtIVqi76fHR7DrKSUJY1DD84xKEVuwcT40C1HC18bqQDTBKWosUZn+VvQ4UTjkoCYWd/Eco9ZLwEWggsNC9CPL3C0UauFz44wFh941Bw0tm1PPAGCUydahBcw6wAAAABJRU5ErkJggg=="},{"id":"vogis.cnv.at-ef2015_10cm","name":"VoGIS: Echtfarbenbild 2015 (10cm)","type":"wms","template":"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ef2015_10cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","polygon":[[[9.5436683,47.4847893],[9.6145139,47.4505807],[9.6135938,47.3827196],[9.4424603,47.2479843],[9.4461405,47.0959963],[9.4286592,47.0891059],[9.4249789,47.0151345],[9.8528128,47.0019594],[9.8574132,46.898956],[9.9669019,46.889525],[10.0451081,46.849897],[10.1582771,46.833534],[10.1591972,46.8920401],[10.1471804,46.8924787],[10.1511549,46.9433055],[10.1631717,46.9428673],[10.1646986,46.9623816],[10.1785187,46.9668098],[10.1757585,47.1035121],[10.2291227,47.1022595],[10.2208421,47.2436121],[10.2613253,47.4126142],[10.1242344,47.4057648],[10.093872,47.4779493],[10.0046249,47.5071683],[9.9862234,47.5612116],[9.8436121,47.5624533],[9.8408519,47.6071356],[9.539988,47.6065153],[9.5436683,47.4847893]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAD1BMVEUAAACEAgT8AgQEAgSEgoTQjzHEAAAAAXRSTlMAQObYZgAAAHJJREFUeF6ljVEKgzAQRCftBUQv0KwXML7cwPvfqQwJtIVqi76fHR7DrKSUJY1DD84xKEVuwcT40C1HC18bqQDTBKWosUZn+VvQ4UTjkoCYWd/Eco9ZLwEWggsNC9CPL3C0UauFz44wFh941Bw0tm1PPAGCUydahBcw6wAAAABJRU5ErkJggg=="},{"id":"vogis.cnv.at-wi2015_20cm","name":"VoGIS: Echtfarbenbild Winter 2015 (20cm)","type":"wms","template":"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=wi2015_20cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","polygon":[[[10.1703925,46.8297883],[10.1710791,46.93644],[10.1841254,46.9411282],[10.1854987,47.1015707],[10.239057,47.104375],[10.2428336,47.1561117],[10.2569098,47.1870362],[10.2455802,47.2759749],[10.2531333,47.323472],[10.2689261,47.3262646],[10.2644629,47.41102],[10.1319403,47.4086966],[10.1343436,47.4610652],[10.1175208,47.4615294],[10.1188941,47.4733659],[10.0873084,47.4742942],[10.0849051,47.5072362],[10.0684256,47.5070043],[10.0673956,47.521497],[10.0234503,47.5242791],[10.000791,47.5794276],[9.8490424,47.5775748],[9.8504157,47.6146181],[9.7275061,47.6127666],[9.7202963,47.5908903],[9.7034735,47.5891536],[9.7031302,47.5449087],[9.6821875,47.5449087],[9.6804709,47.5534826],[9.5639128,47.5493117],[9.5620246,47.5395782],[9.5517249,47.5395782],[9.5517249,47.5340154],[9.5216841,47.5347108],[9.5270056,47.3049672],[9.505033,47.3026391],[9.5009131,47.2336806],[9.5235724,47.2322819],[9.5242591,47.165566],[9.5448584,47.1640488],[9.5438284,47.1544774],[9.5723242,47.1540105],[9.5702643,47.128089],[9.590177,47.128673],[9.5918936,47.1002853],[9.5723242,47.1001685],[9.5771308,47.0286063],[9.7240729,47.0304785],[9.7230429,47.0174892],[9.7745413,47.0156166],[9.776258,47.0055504],[9.7927374,47.0039115],[9.7947974,46.9912671],[9.8387427,46.9931405],[9.840116,46.9034933],[9.8902411,46.9072462],[9.8854346,46.887071],[9.959249,46.8914116],[9.9619956,46.8767458],[10.0001044,46.8786233],[9.9966712,46.857146],[10.0186438,46.8565591],[10.0234503,46.8307278],[10.1703925,46.8297883]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAD1BMVEUAAACEAgT8AgQEAgSEgoTQjzHEAAAAAXRSTlMAQObYZgAAAHJJREFUeF6ljVEKgzAQRCftBUQv0KwXML7cwPvfqQwJtIVqi76fHR7DrKSUJY1DD84xKEVuwcT40C1HC18bqQDTBKWosUZn+VvQ4UTjkoCYWd/Eco9ZLwEWggsNC9CPL3C0UauFz44wFh941Bw0tm1PPAGCUydahBcw6wAAAABJRU5ErkJggg=="}]; - -var presets = {"aerialway":{"fields":["aerialway"],"geometry":["point","vertex","line"],"tags":{"aerialway":"*"},"terms":["ski lift","funifor","funitel"],"searchable":false,"name":"Aerialway"},"aeroway":{"icon":"airport","fields":["aeroway"],"geometry":["point","vertex","line","area"],"tags":{"aeroway":"*"},"searchable":false,"name":"Aeroway"},"amenity":{"fields":["amenity"],"geometry":["point","vertex","area"],"tags":{"amenity":"*"},"searchable":false,"name":"Amenity"},"circular":{"geometry":["vertex","line"],"fields":["name"],"tags":{"junction":"circular"},"name":"Traffic Circle","searchable":false},"highway":{"fields":["name","highway"],"geometry":["point","vertex","line","area"],"tags":{"highway":"*"},"searchable":false,"name":"Highway"},"place":{"fields":["name","place"],"geometry":["point","vertex","area"],"tags":{"place":"*"},"searchable":false,"name":"Place"},"power":{"geometry":["point","vertex","line","area"],"tags":{"power":"*"},"fields":["power"],"searchable":false,"name":"Power"},"railway":{"fields":["railway"],"geometry":["point","vertex","line","area"],"tags":{"railway":"*"},"searchable":false,"name":"Railway"},"roundabout":{"geometry":["vertex","line"],"fields":["name"],"tags":{"junction":"roundabout"},"name":"Roundabout","searchable":false},"waterway":{"fields":["name","waterway"],"geometry":["point","vertex","line","area"],"tags":{"waterway":"*"},"searchable":false,"name":"Waterway"},"address":{"fields":["address"],"geometry":["point","vertex","area"],"tags":{"addr:*":"*"},"addTags":{},"removeTags":{},"reference":{"key":"addr"},"name":"Address","matchScore":0.15},"advertising/billboard":{"fields":["direction","lit"],"geometry":["point","vertex","line"],"tags":{"advertising":"billboard"},"name":"Billboard"},"aerialway/station":{"icon":"aerialway","geometry":["point","vertex","area"],"fields":["aerialway/access","aerialway/summer/access","elevation","building_area"],"tags":{"aerialway":"station"},"name":"Aerialway Station","searchable":false},"aerialway/cable_car":{"geometry":["line"],"terms":["tramway","ropeway"],"fields":["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/heating"],"tags":{"aerialway":"cable_car"},"name":"Cable Car"},"aerialway/chair_lift":{"geometry":["line"],"fields":["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],"tags":{"aerialway":"chair_lift"},"name":"Chair Lift"},"aerialway/drag_lift":{"geometry":["line"],"fields":["name","aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"drag_lift"},"name":"Drag Lift"},"aerialway/gondola":{"geometry":["line"],"fields":["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],"tags":{"aerialway":"gondola"},"name":"Gondola"},"aerialway/goods":{"geometry":["line"],"fields":["name","aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"goods"},"name":"Goods Aerialway"},"aerialway/magic_carpet":{"geometry":["line"],"fields":["name","aerialway/capacity","aerialway/duration","aerialway/heating"],"tags":{"aerialway":"magic_carpet"},"name":"Magic Carpet Lift"},"aerialway/mixed_lift":{"geometry":["line"],"fields":["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],"tags":{"aerialway":"mixed_lift"},"name":"Mixed Lift"},"aerialway/platter":{"geometry":["line"],"terms":["button lift","poma lift"],"fields":["name","aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"platter"},"name":"Platter Lift"},"aerialway/pylon":{"geometry":["point","vertex"],"fields":["ref"],"tags":{"aerialway":"pylon"},"name":"Aerialway Pylon"},"aerialway/rope_tow":{"geometry":["line"],"terms":["handle tow","bugel lift"],"fields":["name","aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"rope_tow"},"name":"Rope Tow Lift"},"aerialway/t-bar":{"geometry":["line"],"fields":["name","aerialway/capacity","aerialway/duration"],"terms":["tbar"],"tags":{"aerialway":"t-bar"},"name":"T-bar Lift"},"aeroway/aerodrome":{"icon":"airport","geometry":["point","area"],"fields":["name","iata","icao","operator","internet_access","internet_access/fee","internet_access/ssid"],"terms":["airplane","airport","aerodrome"],"tags":{"aeroway":"aerodrome"},"name":"Airport"},"aeroway/apron":{"icon":"airport","geometry":["area"],"terms":["ramp"],"fields":["ref","surface"],"tags":{"aeroway":"apron"},"name":"Apron"},"aeroway/gate":{"icon":"airport","geometry":["point"],"fields":["ref_aeroway_gate"],"tags":{"aeroway":"gate"},"name":"Airport Gate"},"aeroway/hangar":{"geometry":["area"],"fields":["name","building_area"],"tags":{"aeroway":"hangar"},"name":"Hangar"},"aeroway/helipad":{"icon":"heliport","geometry":["point","area"],"fields":["ref"],"terms":["helicopter","helipad","heliport"],"tags":{"aeroway":"helipad"},"name":"Helipad"},"aeroway/runway":{"geometry":["line","area"],"terms":["landing strip"],"fields":["ref_runway","surface","length","width"],"tags":{"aeroway":"runway"},"name":"Runway"},"aeroway/taxiway":{"geometry":["line"],"fields":["ref_taxiway","surface"],"tags":{"aeroway":"taxiway"},"name":"Taxiway"},"aeroway/terminal":{"icon":"airport","geometry":["point","area"],"terms":["airport","aerodrome"],"fields":["name","operator","building_area"],"tags":{"aeroway":"terminal"},"name":"Airport Terminal"},"amenity/bus_station":{"icon":"bus","fields":["name","building_area","operator","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"amenity":"bus_station"},"name":"Bus Station / Terminal","searchable":false},"amenity/coworking_space":{"icon":"commercial","fields":["name","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"amenity":"coworking_space"},"name":"Coworking Space","searchable":false},"amenity/ferry_terminal":{"icon":"ferry","fields":["name","network","operator","address","building_area"],"geometry":["point","vertex","area"],"terms":[],"tags":{"amenity":"ferry_terminal"},"name":"Ferry Station / Terminal","searchable":false},"amenity/nursing_home":{"icon":"wheelchair","fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"tags":{"amenity":"nursing_home"},"reference":{"key":"social_facility","value":"nursing_home"},"name":"Nursing Home","searchable":false},"amenity/register_office":{"icon":"town-hall","fields":["name","address","building_area","opening_hours","operator"],"geometry":["point","area"],"tags":{"amenity":"register_office"},"reference":{"key":"government","value":"register_office"},"name":"Register Office","searchable":false},"amenity/scrapyard":{"icon":"car","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"scrapyard"},"reference":{"key":"industrial","value":"scrap_yard"},"name":"Scrap Yard","searchable":false},"amenity/swimming_pool":{"icon":"swimming","geometry":["point","vertex","area"],"tags":{"amenity":"swimming_pool"},"reference":{"key":"leisure","value":"swimming_pool"},"name":"Swimming Pool","searchable":false},"amenity/animal_boarding":{"icon":"veterinary","fields":["name","operator","address","building_area","opening_hours","animal_boarding"],"geometry":["point","area"],"terms":["boarding","cat","cattery","dog","horse","kennel","kitten","pet","pet boarding","pet care","pet hotel","puppy","reptile"],"tags":{"amenity":"animal_boarding"},"name":"Animal Boarding Facility"},"amenity/animal_breeding":{"icon":"veterinary","fields":["name","operator","address","building_area","opening_hours","animal_breeding"],"geometry":["point","area"],"terms":["breeding","bull","cat","cow","dog","horse","husbandry","kitten","livestock","pet breeding","puppy","reptile"],"tags":{"amenity":"animal_breeding"},"name":"Animal Breeding Facility"},"amenity/animal_shelter":{"icon":"veterinary","fields":["name","operator","address","building_area","opening_hours","animal_shelter"],"geometry":["point","area"],"terms":["adoption","aspca","cat","dog","horse","kitten","pet care","pet rescue","puppy","raptor","reptile","rescue","spca"],"tags":{"amenity":"animal_shelter"},"name":"Animal Shelter"},"amenity/arts_centre":{"icon":"theatre","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"arts_centre"},"name":"Arts Center"},"amenity/atm":{"icon":"bank","fields":["operator","currency_multi","drive_through"],"geometry":["point","vertex"],"terms":["money","cash","machine"],"tags":{"amenity":"atm"},"name":"ATM"},"amenity/bank":{"icon":"bank","fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"geometry":["point","area"],"terms":["credit union","check","deposit","fund","investment","repository","reserve","safe","savings","stock","treasury","trust","vault"],"tags":{"amenity":"bank"},"name":"Bank"},"amenity/bar":{"icon":"bar","fields":["name","operator","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"geometry":["point","area"],"terms":["dive","beer","bier","booze"],"tags":{"amenity":"bar"},"name":"Bar"},"amenity/bbq":{"icon":"bbq","fields":["covered","fuel"],"geometry":["point"],"terms":["bbq","grill"],"tags":{"amenity":"bbq"},"name":"Barbecue/Grill"},"amenity/bench":{"icon":"poi-bench","fields":["backrest"],"geometry":["point","vertex","line"],"terms":["seat"],"tags":{"amenity":"bench"},"name":"Bench"},"amenity/bicycle_parking":{"icon":"bicycle","fields":["bicycle_parking","capacity","operator","covered","access_simple"],"geometry":["point","vertex","area"],"terms":["bike"],"tags":{"amenity":"bicycle_parking"},"name":"Bicycle Parking"},"amenity/bicycle_rental":{"icon":"bicycle","fields":["capacity","network","operator","payment_multi"],"geometry":["point","vertex","area"],"terms":["bike"],"tags":{"amenity":"bicycle_rental"},"name":"Bicycle Rental"},"amenity/bicycle_repair_station":{"icon":"bicycle","fields":["operator","brand","opening_hours","fee","service/bicycle"],"geometry":["point","vertex"],"terms":["bike","repair","chain","pump"],"tags":{"amenity":"bicycle_repair_station"},"name":"Bicycle Repair Tool Stand"},"amenity/biergarten":{"icon":"beer","fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"geometry":["point","area"],"tags":{"amenity":"biergarten"},"terms":["beer","bier","booze"],"name":"Beer Garden"},"amenity/boat_rental":{"fields":["name","operator","payment_multi"],"geometry":["point","area"],"tags":{"amenity":"boat_rental"},"name":"Boat Rental"},"amenity/bureau_de_change":{"icon":"bank","fields":["name","operator","currency_multi"],"geometry":["point","vertex"],"terms":["bureau de change","money changer"],"tags":{"amenity":"bureau_de_change"},"name":"Currency Exchange"},"amenity/cafe":{"icon":"cafe","fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["bistro","coffee","tea"],"tags":{"amenity":"cafe"},"name":"Cafe"},"amenity/car_pooling":{"icon":"car","fields":["name","operator","capacity"],"geometry":["point","area"],"tags":{"amenity":"car_pooling"},"name":"Car Pooling"},"amenity/car_rental":{"icon":"car","fields":["name","operator","payment_multi"],"geometry":["point","area"],"tags":{"amenity":"car_rental"},"name":"Car Rental"},"amenity/car_sharing":{"icon":"car","fields":["name","operator","capacity","payment_multi"],"geometry":["point","area"],"tags":{"amenity":"car_sharing"},"name":"Car Sharing"},"amenity/car_wash":{"icon":"car","fields":["address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"amenity":"car_wash"},"name":"Car Wash"},"amenity/casino":{"icon":"poi-dice","fields":["name","operator","address","building_area","opening_hours","payment_multi","smoking"],"geometry":["point","area"],"terms":["gambling","roulette","craps","poker","blackjack"],"tags":{"amenity":"casino"},"name":"Casino"},"amenity/charging_station":{"icon":"car","fields":["operator","capacity"],"geometry":["point"],"tags":{"amenity":"charging_station"},"terms":["EV","Electric Vehicle","Supercharger"],"name":"Charging Station"},"amenity/childcare":{"icon":"school","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["daycare","orphanage","playgroup"],"tags":{"amenity":"childcare"},"name":"Nursery/Childcare"},"amenity/cinema":{"icon":"cinema","fields":["name","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["drive-in","film","flick","movie","theater","picture","show","screen"],"tags":{"amenity":"cinema"},"name":"Cinema"},"amenity/clinic":{"icon":"hospital","fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["medical","urgentcare"],"tags":{"amenity":"clinic"},"addTags":{"amenity":"clinic","healthcare":"clinic"},"removeTags":{"amenity":"clinic","healthcare":"clinic"},"reference":{"key":"amenity","value":"clinic"},"name":"Clinic"},"amenity/clinic/abortion":{"icon":"hospital","fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"clinic","healthcare":"clinic","healthcare:speciality":"abortion"},"reference":{"key":"amenity","value":"clinic"},"name":"Abortion Clinic"},"amenity/clinic/fertility":{"icon":"hospital","fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["egg","fertility","reproductive","sperm","ovulation"],"tags":{"amenity":"clinic","healthcare":"clinic","healthcare:speciality":"fertility"},"reference":{"key":"amenity","value":"clinic"},"name":"Fertility Clinic"},"amenity/clock":{"icon":"poi-clock","fields":["name","support","display","visibility","date"],"geometry":["point","vertex"],"tags":{"amenity":"clock"},"name":"Clock"},"amenity/college":{"icon":"college","fields":["name","operator","address","internet_access","internet_access/ssid"],"geometry":["point","area"],"terms":["university"],"tags":{"amenity":"college"},"name":"College Grounds"},"amenity/community_centre":{"icon":"town-hall","fields":["name","operator","address","building_area"],"geometry":["point","area"],"terms":["event","hall"],"tags":{"amenity":"community_centre"},"name":"Community Center"},"amenity/compressed_air":{"icon":"car","geometry":["point","area"],"tags":{"amenity":"compressed_air"},"name":"Compressed Air"},"amenity/courthouse":{"icon":"town-hall","fields":["name","operator","address","building_area"],"geometry":["point","area"],"tags":{"amenity":"courthouse"},"name":"Courthouse"},"amenity/crematorium":{"icon":"cemetery","fields":["name","website","phone","opening_hours","wheelchair"],"geometry":["area","point"],"tags":{"amenity":"crematorium"},"terms":["cemetery","funeral"],"name":"Crematorium"},"amenity/dentist":{"icon":"dentist","fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["tooth","teeth"],"tags":{"amenity":"dentist"},"addTags":{"amenity":"dentist","healthcare":"dentist"},"removeTags":{"amenity":"dentist","healthcare":"dentist"},"reference":{"key":"amenity","value":"dentist"},"name":"Dentist"},"amenity/doctors":{"icon":"hospital","fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["medic*","physician"],"tags":{"amenity":"doctors"},"addTags":{"amenity":"doctors","healthcare":"doctor"},"removeTags":{"amenity":"doctors","healthcare":"doctor"},"reference":{"key":"amenity","value":"doctors"},"name":"Doctor"},"amenity/dojo":{"icon":"pitch","fields":["name","sport","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["martial arts","dojang"],"tags":{"amenity":"dojo"},"name":"Dojo / Martial Arts Academy"},"amenity/drinking_water":{"icon":"drinking-water","geometry":["point"],"tags":{"amenity":"drinking_water"},"terms":["fountain","potable"],"name":"Drinking Water"},"amenity/driving_school":{"icon":"car","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"amenity":"driving_school"},"name":"Driving School"},"amenity/embassy":{"icon":"embassy","fields":["name","country","address","building_area"],"geometry":["point","area"],"tags":{"amenity":"embassy"},"name":"Embassy"},"amenity/fast_food":{"icon":"fast-food","fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"geometry":["point","area"],"tags":{"amenity":"fast_food"},"terms":["restaurant","takeaway"],"name":"Fast Food"},"amenity/fire_station":{"icon":"fire-station","fields":["name","operator","address","building_area"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"fire_station"},"name":"Fire Station"},"amenity/food_court":{"icon":"restaurant","fields":["name","operator","address","building_area","opening_hours","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["fast food","restaurant","food"],"tags":{"amenity":"food_court"},"name":"Food Court"},"amenity/fountain":{"icon":"poi-fountain","geometry":["point","area"],"tags":{"amenity":"fountain"},"name":"Fountain"},"amenity/fuel":{"icon":"fuel","fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],"tags":{"amenity":"fuel"},"name":"Gas Station"},"amenity/grave_yard":{"icon":"cemetery","fields":["religion","denomination"],"geometry":["point","area"],"tags":{"amenity":"grave_yard"},"name":"Graveyard"},"amenity/grit_bin":{"fields":["access_simple"],"geometry":["point","vertex"],"tags":{"amenity":"grit_bin"},"terms":["salt","sand"],"name":"Grit Bin"},"amenity/hospital":{"icon":"hospital","fields":["name","operator","healthcare/speciality","address","emergency"],"geometry":["point","area"],"terms":["clinic","doctor","emergency room","health","infirmary","institution","sanatorium","sanitarium","sick","surgery","ward"],"tags":{"amenity":"hospital"},"addTags":{"amenity":"hospital","healthcare":"hospital"},"removeTags":{"amenity":"hospital","healthcare":"hospital"},"reference":{"key":"amenity","value":"hospital"},"name":"Hospital Grounds"},"amenity/hunting_stand":{"icon":"poi-binoculars","geometry":["point","vertex","area"],"terms":["game","gun","lookout","rifle","shoot*","wild","watch"],"tags":{"amenity":"hunting_stand"},"name":"Hunting Stand"},"amenity/ice_cream":{"icon":"ice-cream","fields":["name","address","building_area","opening_hours","takeaway","delivery","outdoor_seating"],"geometry":["point","area"],"terms":["gelato","sorbet","sherbet","frozen","yogurt"],"tags":{"amenity":"ice_cream"},"name":"Ice Cream Shop"},"amenity/internet_cafe":{"icon":"poi-mast","fields":["name","operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["cybercafe","taxiphone","teleboutique","coffee","cafe","net","lanhouse"],"tags":{"amenity":"internet_cafe"},"name":"Internet Cafe"},"amenity/kindergarten":{"icon":"school","fields":["name","operator","address"],"geometry":["point","area"],"terms":["kindergarden","pre-school"],"tags":{"amenity":"kindergarten"},"name":"Preschool/Kindergarten Grounds"},"amenity/library":{"icon":"library","fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"geometry":["point","area"],"terms":["book"],"tags":{"amenity":"library"},"name":"Library"},"amenity/love_hotel":{"icon":"heart","fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"amenity":"love_hotel"},"name":"Love Hotel"},"amenity/marketplace":{"icon":"shop","fields":["name","operator","address","building","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"marketplace"},"name":"Marketplace"},"amenity/motorcycle_parking":{"icon":"scooter","fields":["capacity","operator","covered","access_simple"],"geometry":["point","vertex","area"],"tags":{"amenity":"motorcycle_parking"},"name":"Motorcycle Parking"},"amenity/music_school":{"icon":"school","fields":["name","operator","address"],"geometry":["point","area"],"terms":["school of music"],"tags":{"amenity":"music_school"},"name":"Music School"},"amenity/nightclub":{"icon":"bar","fields":["name","operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"tags":{"amenity":"nightclub"},"terms":["disco*","night club","dancing","dance club"],"name":"Nightclub"},"amenity/parking_entrance":{"icon":"entrance-alt1","fields":["access_simple","ref"],"geometry":["vertex"],"tags":{"amenity":"parking_entrance"},"name":"Parking Garage Entrance/Exit"},"amenity/parking_space":{"fields":["capacity"],"geometry":["point","vertex","area"],"terms":[],"tags":{"amenity":"parking_space"},"matchScore":0.95,"name":"Parking Space"},"amenity/parking":{"icon":"parking","fields":["name","operator","parking","capacity","fee","access_simple","supervised","park_ride","surface","maxstay"],"geometry":["point","vertex","area"],"tags":{"amenity":"parking"},"terms":[],"name":"Car Parking"},"amenity/pavilion":{"icon":"shelter","fields":["bin","bench"],"geometry":["point","vertex","area"],"tags":{"amenity":"shelter","shelter_type":"pavilion"},"name":"Pavilion"},"amenity/pharmacy":{"icon":"pharmacy","fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"geometry":["point","area"],"tags":{"amenity":"pharmacy"},"addTags":{"amenity":"pharmacy","healthcare":"pharmacy"},"removeTags":{"amenity":"pharmacy","healthcare":"pharmacy"},"reference":{"key":"amenity","value":"pharmacy"},"terms":["drug*","med*","prescription"],"name":"Pharmacy"},"amenity/place_of_worship":{"icon":"place-of-worship","fields":["name","religion","denomination","address","building_area","service_times"],"geometry":["point","area"],"terms":["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],"tags":{"amenity":"place_of_worship"},"name":"Place of Worship"},"amenity/place_of_worship/buddhist":{"icon":"buddhism","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["stupa","vihara","monastery","temple","pagoda","zendo","dojo"],"tags":{"amenity":"place_of_worship","religion":"buddhist"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Buddhist Temple"},"amenity/place_of_worship/christian":{"icon":"religious-christian","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["christian","abbey","basilica","bethel","cathedral","chancel","chantry","chapel","fold","house of God","house of prayer","house of worship","minster","mission","oratory","parish","sacellum","sanctuary","shrine","tabernacle","temple"],"tags":{"amenity":"place_of_worship","religion":"christian"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Church"},"amenity/place_of_worship/hindu":{"icon":"poi-hinduist","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["kovil","devasthana","mandir","kshetram","alayam","shrine","temple"],"tags":{"amenity":"place_of_worship","religion":"hindu"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Hindu Temple"},"amenity/place_of_worship/jewish":{"icon":"religious-jewish","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["jewish"],"tags":{"amenity":"place_of_worship","religion":"jewish"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Synagogue"},"amenity/place_of_worship/muslim":{"icon":"religious-muslim","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["muslim"],"tags":{"amenity":"place_of_worship","religion":"muslim"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Mosque"},"amenity/place_of_worship/shinto":{"icon":"poi-shintoist","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["kami","torii"],"tags":{"amenity":"place_of_worship","religion":"shinto"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Shinto Shrine"},"amenity/place_of_worship/sikh":{"icon":"poi-sikhist","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["gurudwara","temple"],"tags":{"amenity":"place_of_worship","religion":"sikh"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Sikh Temple"},"amenity/place_of_worship/taoist":{"icon":"poi-taoist","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["daoist","monastery","temple"],"tags":{"amenity":"place_of_worship","religion":"taoist"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Taoist Temple"},"amenity/planetarium":{"icon":"museum","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["museum","astronomy","observatory"],"tags":{"amenity":"planetarium"},"name":"Planetarium"},"amenity/police":{"icon":"police","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["badge","constable","constabulary","cop","detective","fed","law","enforcement","officer","patrol"],"tags":{"amenity":"police"},"name":"Police"},"amenity/post_box":{"icon":"post","fields":["operator","collection_times","drive_through","ref"],"geometry":["point","vertex"],"tags":{"amenity":"post_box"},"terms":["letter","post"],"name":"Mailbox"},"amenity/post_office":{"icon":"post","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["letter","mail"],"tags":{"amenity":"post_office"},"name":"Post Office"},"amenity/prison":{"icon":"prison","fields":["name","operator","address"],"geometry":["point","area"],"terms":["cell","jail"],"tags":{"amenity":"prison"},"name":"Prison Grounds"},"amenity/pub":{"icon":"beer","fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"geometry":["point","area"],"tags":{"amenity":"pub"},"terms":["alcohol","drink","dive","beer","bier","booze"],"name":"Pub"},"amenity/public_bath":{"icon":"water","fields":["name","bath/type","bath/open_air","bath/sand_bath","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"public_bath"},"terms":["onsen","foot bath","hot springs"],"name":"Public Bath"},"amenity/public_bookcase":{"icon":"library","fields":["name","operator","capacity","website"],"geometry":["point","area"],"terms":["library","bookcrossing"],"tags":{"amenity":"public_bookcase"},"name":"Public Bookcase"},"amenity/ranger_station":{"fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["visitor center","visitor centre","permit center","permit centre","backcountry office","warden office","warden center"],"tags":{"amenity":"ranger_station"},"name":"Ranger Station"},"amenity/recycling_centre":{"icon":"recycling","fields":["name","operator","address","building","opening_hours","recycling_accepts"],"geometry":["point","area"],"terms":["bottle","can","dump","glass","garbage","rubbish","scrap","trash"],"tags":{"amenity":"recycling","recycling_type":"centre"},"reference":{"key":"recycling_type","value":"*"},"name":"Recycling Center"},"amenity/recycling":{"icon":"recycling","fields":["recycling_accepts","collection_times"],"geometry":["point","area"],"terms":["bin","can","bottle","glass","garbage","rubbish","scrap","trash"],"tags":{"amenity":"recycling"},"addTags":{"amenity":"recycling","recycling_type":"container"},"removeTags":{"amenity":"recycling","recycling_type":"container"},"reference":{"key":"amenity","value":"recycling"},"name":"Recycling Container"},"amenity/restaurant":{"icon":"restaurant","fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["bar","breakfast","cafe","café","canteen","coffee","dine","dining","dinner","drive-in","eat","grill","lunch","table"],"tags":{"amenity":"restaurant"},"name":"Restaurant"},"amenity/sanitary_dump_station":{"icon":"poi-storage-tank","fields":["operator","access_simple","fee","water_point"],"geometry":["point","vertex","area"],"terms":["Motor Home","Camper","Sanitary","Dump Station","Elsan","CDP","CTDP","Chemical Toilet"],"tags":{"amenity":"sanitary_dump_station"},"name":"RV Toilet Disposal"},"amenity/school":{"icon":"school","fields":["name","operator","address","religion","denomination"],"geometry":["point","area"],"terms":["academy","elementary school","middle school","high school"],"tags":{"amenity":"school"},"name":"School Grounds"},"amenity/shelter":{"icon":"shelter","fields":["name","shelter_type","bin"],"geometry":["point","vertex","area"],"terms":["lean-to","gazebo","picnic"],"tags":{"amenity":"shelter"},"name":"Shelter"},"amenity/shower":{"icon":"poi-shower","fields":["operator","opening_hours","fee","supervised","building_area"],"geometry":["point","vertex","area"],"terms":["rain closet"],"tags":{"amenity":"shower"},"name":"Shower"},"amenity/smoking_area":{"fields":["name","shelter","bin","bench","opening_hours"],"geometry":["point","vertex","area"],"terms":[],"tags":{"amenity":"smoking_area"},"name":"Smoking Area"},"amenity/social_facility":{"icon":"poi-social-facility","fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"social_facility"},"name":"Social Facility"},"amenity/social_facility/food_bank":{"icon":"poi-social-facility","fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"social_facility","social_facility":"food_bank"},"reference":{"key":"social_facility","value":"food_bank"},"name":"Food Bank"},"amenity/social_facility/group_home":{"icon":"wheelchair","fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"terms":["old","senior","living","care home","assisted living"],"tags":{"amenity":"social_facility","social_facility":"group_home","social_facility:for":"senior"},"reference":{"key":"social_facility","value":"group_home"},"name":"Elderly Group Home"},"amenity/social_facility/homeless_shelter":{"icon":"poi-social-facility","fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["houseless","unhoused","displaced"],"tags":{"amenity":"social_facility","social_facility":"shelter","social_facility:for":"homeless"},"reference":{"key":"social_facility","value":"shelter"},"name":"Homeless Shelter"},"amenity/social_facility/nursing_home":{"icon":"wheelchair","fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"terms":["elderly","living","nursing","old","senior","assisted living"],"tags":{"amenity":"social_facility","social_facility":"nursing_home","social_facility:for":"senior"},"reference":{"key":"social_facility","value":"nursing_home"},"name":"Nursing Home"},"amenity/studio":{"icon":"karaoke","fields":["name","studio","address","building_area"],"geometry":["point","area"],"terms":["recording","radio","television"],"tags":{"amenity":"studio"},"name":"Studio"},"amenity/taxi":{"icon":"car","fields":["name","operator","capacity"],"geometry":["point","vertex","area"],"terms":["cab"],"tags":{"amenity":"taxi"},"name":"Taxi Stand"},"amenity/telephone":{"icon":"telephone","fields":["operator","phone","fee","payment_multi","covered","indoor"],"geometry":["point","vertex"],"tags":{"amenity":"telephone"},"terms":["phone"],"name":"Telephone"},"amenity/theatre":{"icon":"theatre","fields":["name","operator","address","building_area"],"geometry":["point","area"],"terms":["theatre","performance","play","musical"],"tags":{"amenity":"theatre"},"name":"Theater"},"amenity/toilets":{"icon":"toilet","fields":["toilets/disposal","operator","building_area","access_simple","gender","fee","diaper"],"geometry":["point","vertex","area"],"terms":["bathroom","restroom","outhouse","privy","head","lavatory","latrine","water closet","WC","W.C."],"tags":{"amenity":"toilets"},"name":"Toilets"},"amenity/townhall":{"icon":"town-hall","fields":["name","operator","address","building_area"],"geometry":["point","area"],"terms":["village","city","government","courthouse","municipal"],"tags":{"amenity":"townhall"},"name":"Town Hall"},"amenity/university":{"icon":"college","fields":["name","operator","address","internet_access","internet_access/ssid"],"geometry":["point","area"],"terms":["college"],"tags":{"amenity":"university"},"name":"University Grounds"},"amenity/vending_machine":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":[],"tags":{"amenity":"vending_machine"},"name":"Vending Machine"},"amenity/vending_machine/news_papers":{"icon":"poi-vending-machine","fields":["operator","fee","payment_multi","currency_multi"],"geometry":["point"],"terms":["newspaper"],"tags":{"amenity":"vending_machine","vending":"news_papers"},"reference":{"key":"vending","value":"newspapers"},"name":"Newspaper Vending Machine","searchable":false},"amenity/vending_machine/cigarettes":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["cigarette"],"tags":{"amenity":"vending_machine","vending":"cigarettes"},"reference":{"key":"vending","value":"cigarettes"},"name":"Cigarette Vending Machine"},"amenity/vending_machine/condoms":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["condom"],"tags":{"amenity":"vending_machine","vending":"condoms"},"reference":{"key":"vending","value":"condoms"},"name":"Condom Vending Machine"},"amenity/vending_machine/drinks":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["drink","soda","beverage","juice","pop"],"tags":{"amenity":"vending_machine","vending":"drinks"},"reference":{"key":"vending","value":"drinks"},"name":"Drink Vending Machine"},"amenity/vending_machine/excrement_bags":{"icon":"poi-vending-machine","fields":["operator","fee","payment_multi","currency_multi"],"geometry":["point"],"terms":["excrement bags","poop","dog","animal"],"tags":{"amenity":"vending_machine","vending":"excrement_bags"},"reference":{"key":"vending","value":"excrement_bags"},"name":"Excrement Bag Vending Machine"},"amenity/vending_machine/feminine_hygiene":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["condom","tampon","pad","woman","women","menstrual hygiene products","personal care"],"tags":{"amenity":"vending_machine","vending":"feminine_hygiene"},"reference":{"key":"vending","value":"feminine_hygiene"},"name":"Feminine Hygiene Vending Machine"},"amenity/vending_machine/newspapers":{"icon":"poi-vending-machine","fields":["operator","fee","payment_multi","currency_multi"],"geometry":["point"],"terms":["newspaper"],"tags":{"amenity":"vending_machine","vending":"newspapers"},"reference":{"key":"vending","value":"newspapers"},"name":"Newspaper Vending Machine"},"amenity/vending_machine/parcel_pickup_dropoff":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["parcel","mail","pickup"],"tags":{"amenity":"vending_machine","vending":"parcel_pickup;parcel_mail_in"},"reference":{"key":"vending","value":"parcel_pickup;parcel_mail_in"},"name":"Parcel Pickup/Dropoff Vending Machine"},"amenity/vending_machine/parking_tickets":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["parking","ticket"],"tags":{"amenity":"vending_machine","vending":"parking_tickets"},"reference":{"key":"vending","value":"parking_tickets"},"matchScore":0.94,"name":"Parking Ticket Vending Machine"},"amenity/vending_machine/public_transport_tickets":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["bus","train","ferry","rail","ticket","transportation"],"tags":{"amenity":"vending_machine","vending":"public_transport_tickets"},"reference":{"key":"vending","value":"public_transport_tickets"},"name":"Transit Ticket Vending Machine"},"amenity/vending_machine/sweets":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["candy","gum","chip","pretzel","cookie","cracker"],"tags":{"amenity":"vending_machine","vending":"sweets"},"reference":{"key":"vending","value":"sweets"},"name":"Snack Vending Machine"},"amenity/veterinary":{"icon":"veterinary","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["pet clinic","veterinarian","animal hospital","pet doctor"],"tags":{"amenity":"veterinary"},"name":"Veterinary"},"amenity/waste_basket":{"icon":"waste-basket","fields":["collection_times"],"geometry":["point","vertex"],"tags":{"amenity":"waste_basket"},"terms":["bin","garbage","rubbish","litter","trash"],"name":"Waste Basket"},"amenity/waste_disposal":{"icon":"waste-basket","fields":["collection_times"],"geometry":["point","vertex","area"],"tags":{"amenity":"waste_disposal"},"terms":["garbage","rubbish","litter","trash"],"name":"Garbage Dumpster"},"amenity/waste_transfer_station":{"icon":"waste-basket","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"terms":["dump","garbage","recycling","rubbish","scrap","trash"],"tags":{"amenity":"waste_transfer_station"},"name":"Waste Transfer Station"},"amenity/waste/dog_excrement":{"icon":"waste-basket","fields":["collection_times"],"geometry":["point","vertex","area"],"tags":{"amenity":"waste_basket","waste":"dog_excrement"},"reference":{"key":"waste","value":"dog_excrement"},"terms":["bin","garbage","rubbish","litter","trash","poo","dog"],"name":"Dog Excrement Bin"},"amenity/water_point":{"icon":"drinking-water","geometry":["area","vertex","point"],"tags":{"amenity":"water_point"},"name":"RV Drinking Water"},"amenity/watering_place":{"icon":"drinking-water","geometry":["area","vertex","point"],"tags":{"amenity":"watering_place"},"name":"Animal Watering Place"},"area":{"fields":["name"],"geometry":["area"],"tags":{"area":"yes"},"name":"Area","matchScore":0.1},"area/highway":{"fields":["name","area/highway"],"geometry":["area"],"tags":{"area:highway":"*"},"name":"Road Surface"},"attraction/amusement_ride":{"icon":"amusement-park","fields":["name","operator","opening_hours"],"geometry":["point","area"],"terms":["theme park","carnival ride"],"tags":{"attraction":"amusement_ride"},"name":"Amusement Ride"},"attraction/animal":{"icon":"zoo","fields":["name","operator"],"geometry":["point","area"],"terms":["zoo","theme park","animal park","lion","tiger","bear"],"tags":{"attraction":"animal"},"name":"Animal"},"attraction/big_wheel":{"icon":"amusement-park","fields":["name","operator","height","opening_hours"],"geometry":["point"],"terms":["ferris wheel","theme park","amusement ride"],"tags":{"attraction":"big_wheel"},"name":"Big Wheel"},"attraction/bumper_car":{"icon":"car","fields":["name","operator","opening_hours"],"geometry":["point","area"],"terms":["theme park","dodgem cars","autoscooter"],"tags":{"attraction":"bumper_car"},"name":"Bumper Car"},"attraction/bungee_jumping":{"icon":"pitch","fields":["name","operator","height","opening_hours"],"geometry":["point","area"],"terms":["theme park","bungy jumping","jumping platform"],"tags":{"attraction":"bungee_jumping"},"name":"Bungee Jumping"},"attraction/carousel":{"icon":"horse-riding","fields":["name","operator","opening_hours"],"geometry":["point","area"],"terms":["theme park","roundabout","merry-go-round","galloper","jumper","horseabout","flying horses"],"tags":{"attraction":"carousel"},"name":"Carousel"},"attraction/dark_ride":{"icon":"rail-metro","fields":["name","operator","opening_hours"],"geometry":["point","line","area"],"terms":["theme park","ghost train"],"tags":{"attraction":"dark_ride"},"name":"Dark Ride"},"attraction/drop_tower":{"icon":"poi-tower","fields":["name","operator","height","opening_hours"],"geometry":["point","area"],"terms":["theme park","amusement ride","gondola","tower","big drop"],"tags":{"attraction":"drop_tower"},"name":"Drop Tower"},"attraction/pirate_ship":{"icon":"amusement-park","fields":["name","operator","opening_hours"],"geometry":["point"],"terms":["theme park","carnival ride","amusement ride"],"tags":{"attraction":"pirate_ship"},"name":"Pirate Ship"},"attraction/river_rafting":{"icon":"ferry","fields":["name","operator","opening_hours"],"geometry":["point","line"],"terms":["theme park","aquatic park","water park","rafting simulator","river rafting ride","river rapids ride"],"tags":{"attraction":"river_rafting"},"name":"River Rafting"},"attraction/roller_coaster":{"icon":"amusement-park","fields":["name","operator","opening_hours"],"geometry":["point","area"],"terms":["theme park","amusement ride"],"tags":{"attraction":"roller_coaster"},"name":"Roller Coaster"},"attraction/train":{"icon":"rail","fields":["name","operator","fee","opening_hours"],"geometry":["point","line"],"terms":["theme park","rackless train","road train","Tschu-Tschu train","dotto train","park train"],"tags":{"attraction":"train"},"name":"Tourist Train"},"attraction/water_slide":{"icon":"swimming","fields":["name","operator","opening_hours"],"geometry":["line","area"],"terms":["theme park","aquatic park","water park","flumes","water chutes","hydroslides"],"tags":{"attraction":"water_slide"},"name":"Water Slide"},"barrier":{"icon":"roadblock","geometry":["point","vertex","line","area"],"tags":{"barrier":"*"},"fields":["barrier"],"name":"Barrier","matchScore":0.4},"barrier/entrance":{"icon":"entrance-alt1","geometry":["vertex"],"tags":{"barrier":"entrance"},"name":"Entrance","searchable":false},"barrier/block":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex"],"tags":{"barrier":"block"},"name":"Block"},"barrier/bollard":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex","line"],"tags":{"barrier":"bollard"},"name":"Bollard"},"barrier/border_control":{"icon":"roadblock","fields":["access","building_area"],"geometry":["vertex","area"],"tags":{"barrier":"border_control"},"name":"Border Control"},"barrier/cattle_grid":{"icon":"barrier","geometry":["vertex"],"tags":{"barrier":"cattle_grid"},"name":"Cattle Grid"},"barrier/city_wall":{"icon":"barrier","fields":["height"],"geometry":["line","area"],"tags":{"barrier":"city_wall"},"name":"City Wall"},"barrier/cycle_barrier":{"icon":"roadblock","fields":["access"],"geometry":["vertex"],"tags":{"barrier":"cycle_barrier"},"name":"Cycle Barrier"},"barrier/ditch":{"icon":"roadblock","geometry":["line","area"],"tags":{"barrier":"ditch"},"name":"Trench","matchScore":0.25},"barrier/fence":{"icon":"fence","fields":["fence_type","height"],"geometry":["line"],"tags":{"barrier":"fence"},"name":"Fence","matchScore":0.25},"barrier/gate":{"icon":"barrier","fields":["access"],"geometry":["point","vertex","line"],"tags":{"barrier":"gate"},"name":"Gate"},"barrier/hedge":{"fields":["height"],"geometry":["line","area"],"tags":{"barrier":"hedge"},"name":"Hedge","matchScore":0.25},"barrier/kerb":{"icon":"wheelchair","fields":["kerb","tactile_paving"],"geometry":["vertex","line"],"tags":{"barrier":"kerb"},"name":"Kerb"},"barrier/kissing_gate":{"icon":"barrier","fields":["access"],"geometry":["vertex"],"tags":{"barrier":"kissing_gate"},"name":"Kissing Gate"},"barrier/lift_gate":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex"],"tags":{"barrier":"lift_gate"},"name":"Lift Gate"},"barrier/retaining_wall":{"geometry":["line","area"],"tags":{"barrier":"retaining_wall"},"name":"Retaining Wall"},"barrier/stile":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex"],"tags":{"barrier":"stile"},"name":"Stile"},"barrier/toll_booth":{"icon":"roadblock","fields":["access","building_area"],"geometry":["vertex","area"],"tags":{"barrier":"toll_booth"},"name":"Toll Booth"},"barrier/wall":{"icon":"barrier","fields":["wall","height"],"geometry":["line","area"],"tags":{"barrier":"wall"},"name":"Wall","matchScore":0.25},"boundary/administrative":{"name":"Administrative Boundary","geometry":["line"],"tags":{"boundary":"administrative"},"fields":["name","admin_level"]},"building":{"icon":"home","fields":["name","building","levels","address"],"geometry":["point","area"],"tags":{"building":"*"},"matchScore":0.6,"terms":[],"name":"Building"},"building/bunker":{"fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"bunker"},"matchScore":0.5,"name":"Bunker","searchable":false},"building/entrance":{"icon":"entrance-alt1","geometry":["vertex"],"tags":{"building":"entrance"},"name":"Entrance/Exit","searchable":false},"building/train_station":{"icon":"building","fields":["name","address","levels"],"geometry":["point","vertex","area"],"tags":{"building":"train_station"},"matchScore":0.5,"name":"Train Station","searchable":false},"building/apartments":{"icon":"building","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"apartments"},"matchScore":0.5,"name":"Apartments"},"building/barn":{"icon":"farm","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"barn"},"matchScore":0.5,"name":"Barn"},"building/boathouse":{"icon":"harbor","fields":["name","levels","address"],"geometry":["area"],"tags":{"building":"boathouse"},"matchScore":0.5,"terms":[],"name":"Boathouse"},"building/bungalow":{"icon":"home","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"bungalow"},"terms":["home","detached"],"matchScore":0.5,"name":"Bungalow"},"building/cabin":{"icon":"home","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"cabin"},"matchScore":0.5,"name":"Cabin"},"building/cathedral":{"icon":"place-of-worship","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"cathedral"},"matchScore":0.5,"name":"Cathedral Building"},"building/chapel":{"icon":"place-of-worship","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"chapel"},"matchScore":0.5,"name":"Chapel Building"},"building/church":{"icon":"place-of-worship","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"church"},"matchScore":0.5,"name":"Church Building"},"building/civic":{"icon":"building","fields":["name","address","levels","smoking"],"geometry":["area"],"tags":{"building":"civic"},"matchScore":0.5,"name":"Civic Building"},"building/college":{"icon":"building","fields":["name","address","levels"],"geometry":["area"],"terms":["university"],"tags":{"building":"college"},"matchScore":0.5,"name":"College Building"},"building/commercial":{"icon":"suitcase","fields":["name","address","levels","smoking"],"geometry":["area"],"tags":{"building":"commercial"},"matchScore":0.5,"name":"Commercial Building"},"building/construction":{"icon":"building","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"construction"},"matchScore":0.5,"name":"Building Under Construction"},"building/detached":{"icon":"home","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"detached"},"terms":["home","single","family","residence","dwelling"],"matchScore":0.5,"name":"Detached House"},"building/dormitory":{"icon":"building","fields":["name","address","levels","smoking"],"geometry":["area"],"tags":{"building":"dormitory"},"matchScore":0.5,"name":"Dormitory"},"building/farm_auxiliary":{"icon":"farm","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"farm_auxiliary"},"matchScore":0.5,"name":"Farm Building"},"building/farm":{"icon":"farm","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"farm"},"matchScore":0.5,"name":"Farm House"},"building/garage":{"icon":"warehouse","fields":["name","capacity"],"geometry":["area"],"tags":{"building":"garage"},"matchScore":0.5,"name":"Garage"},"building/garages":{"icon":"warehouse","fields":["name","capacity"],"geometry":["area"],"tags":{"building":"garages"},"matchScore":0.5,"name":"Garages"},"building/greenhouse":{"icon":"garden-center","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"greenhouse"},"matchScore":0.5,"name":"Greenhouse"},"building/hospital":{"icon":"building","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"hospital"},"matchScore":0.5,"name":"Hospital Building"},"building/hotel":{"icon":"building","fields":["name","address","levels","smoking"],"geometry":["area"],"tags":{"building":"hotel"},"matchScore":0.5,"name":"Hotel Building"},"building/house":{"icon":"home","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"house"},"terms":["home","family","residence","dwelling"],"matchScore":0.5,"name":"House"},"building/hut":{"geometry":["area"],"fields":["name"],"tags":{"building":"hut"},"matchScore":0.5,"name":"Hut"},"building/industrial":{"icon":"industry","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"industrial"},"matchScore":0.5,"name":"Industrial Building"},"building/kindergarten":{"icon":"building","fields":["name","address","levels"],"geometry":["area"],"terms":["kindergarden","pre-school"],"tags":{"building":"kindergarten"},"matchScore":0.5,"name":"Preschool/Kindergarten Building"},"building/mosque":{"icon":"place-of-worship","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"mosque"},"matchScore":0.5,"name":"Mosque Building"},"building/public":{"icon":"building","fields":["name","address","levels","smoking"],"geometry":["area"],"tags":{"building":"public"},"matchScore":0.5,"name":"Public Building"},"building/residential":{"icon":"residential-community","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"residential"},"matchScore":0.5,"name":"Residential Building"},"building/retail":{"icon":"commercial","fields":["name","address","levels","smoking"],"geometry":["area"],"tags":{"building":"retail"},"matchScore":0.5,"name":"Retail Building"},"building/roof":{"icon":"shelter","fields":["name","address"],"geometry":["area"],"tags":{"building":"roof"},"matchScore":0.5,"name":"Roof"},"building/ruins":{"icon":"poi-ruins","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"ruins"},"matchScore":0.5,"name":"Building Ruins"},"building/school":{"icon":"building","fields":["name","address","levels"],"geometry":["area"],"terms":["academy","elementary school","middle school","high school"],"tags":{"building":"school"},"matchScore":0.5,"name":"School Building"},"building/semidetached_house":{"icon":"home","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"semidetached_house"},"terms":["home","double","duplex","twin","family","residence","dwelling"],"matchScore":0.5,"name":"Semi-Detached House"},"building/service":{"icon":"home","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"service"},"matchScore":0.5,"name":"Service Building"},"building/shed":{"icon":"home","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"shed"},"matchScore":0.5,"name":"Shed"},"building/stable":{"icon":"horse-riding","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"stable"},"matchScore":0.5,"name":"Stable"},"building/stadium":{"icon":"stadium","fields":["name","address","levels","smoking"],"geometry":["area"],"tags":{"building":"stadium"},"matchScore":0.5,"name":"Stadium Building"},"building/static_caravan":{"icon":"home","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"static_caravan"},"matchScore":0.5,"name":"Static Mobile Home"},"building/temple":{"icon":"place-of-worship","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"temple"},"matchScore":0.5,"name":"Temple Building"},"building/terrace":{"icon":"building","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"terrace"},"terms":["home","terrace","brownstone","family","residence","dwelling"],"matchScore":0.5,"name":"Row Houses"},"building/transportation":{"icon":"building","fields":["name","address","levels","smoking"],"geometry":["area"],"tags":{"building":"transportation"},"matchScore":0.5,"name":"Transportation Building"},"building/university":{"icon":"building","fields":["name","address","levels"],"geometry":["area"],"terms":["college"],"tags":{"building":"university"},"matchScore":0.5,"name":"University Building"},"building/warehouse":{"icon":"warehouse","fields":["name","address","levels"],"geometry":["area"],"tags":{"building":"warehouse"},"matchScore":0.5,"name":"Warehouse"},"camp_site/camp_pitch":{"icon":"campsite","fields":["name","ref"],"geometry":["point","area"],"terms":["tent","rv"],"tags":{"camp_site":"camp_pitch"},"name":"Camp Pitch"},"club":{"icon":"heart","fields":["name","club","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"club":"*"},"terms":["social"],"name":"Club"},"craft":{"icon":"poi-tool","fields":["name","craft","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"*"},"terms":[],"name":"Craft"},"craft/jeweler":{"icon":"marker-stroked","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"jeweler"},"reference":{"key":"shop","value":"jewelry"},"name":"Jeweler","searchable":false},"craft/locksmith":{"icon":"marker-stroked","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"locksmith"},"reference":{"key":"shop","value":"locksmith"},"name":"Locksmith","searchable":false},"craft/optician":{"icon":"marker-stroked","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"optician"},"reference":{"key":"shop","value":"optician"},"name":"Optician","searchable":false},"craft/tailor":{"icon":"clothing-store","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["clothes","suit"],"tags":{"craft":"tailor"},"reference":{"key":"shop","value":"tailor"},"name":"Tailor","searchable":false},"craft/basket_maker":{"icon":"art-gallery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"basket_maker"},"name":"Basket Maker"},"craft/beekeeper":{"icon":"farm","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"beekeeper"},"name":"Beekeeper"},"craft/blacksmith":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"blacksmith"},"name":"Blacksmith"},"craft/boatbuilder":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"boatbuilder"},"matchScore":0.4,"name":"Boat Builder"},"craft/bookbinder":{"icon":"library","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["book repair"],"tags":{"craft":"bookbinder"},"name":"Bookbinder"},"craft/brewery":{"icon":"poi-storage-tank","fields":["name","operator","address","building_area","opening_hours","product"],"geometry":["point","area"],"terms":["alcohol","beer","beverage","bier","booze","cider"],"tags":{"craft":"brewery"},"name":"Brewery"},"craft/carpenter":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["woodworker"],"tags":{"craft":"carpenter"},"name":"Carpenter"},"craft/carpet_layer":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"carpet_layer"},"name":"Carpet Layer"},"craft/caterer":{"icon":"restaurant","fields":["name","cuisine","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"caterer"},"name":"Caterer"},"craft/chimney_sweeper":{"icon":"poi-chimney","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"chimney_sweeper"},"name":"Chimney Sweeper"},"craft/clockmaker":{"icon":"poi-clock","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"clockmaker"},"name":"Clockmaker"},"craft/confectionery":{"icon":"bakery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["sweet","candy"],"tags":{"craft":"confectionery"},"name":"Candy Maker"},"craft/distillery":{"icon":"poi-storage-tank","fields":["name","operator","address","building_area","opening_hours","product"],"geometry":["point","area"],"terms":["alcohol","beverage","bourbon","booze","brandy","gin","hooch","liquor","mezcal","moonshine","rum","scotch","spirits","still","tequila","vodka","whiskey","whisky"],"tags":{"craft":"distillery"},"name":"Distillery"},"craft/dressmaker":{"icon":"clothing-store","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["seamstress"],"tags":{"craft":"dressmaker"},"name":"Dressmaker"},"craft/electrician":{"icon":"poi-power","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["power","wire"],"tags":{"craft":"electrician"},"name":"Electrician"},"craft/electronics_repair":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"electronics_repair"},"name":"Electronics Repair Shop"},"craft/gardener":{"icon":"garden","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["landscaper","grounds keeper"],"tags":{"craft":"gardener"},"name":"Gardener"},"craft/glaziery":{"icon":"fire-station","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["glass","stained-glass","window"],"tags":{"craft":"glaziery"},"name":"Glaziery"},"craft/handicraft":{"icon":"art-gallery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"handicraft"},"name":"Handicraft"},"craft/hvac":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["heat*","vent*","air conditioning"],"tags":{"craft":"hvac"},"name":"HVAC"},"craft/insulator":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"insulation"},"name":"Insulator"},"craft/key_cutter":{"icon":"marker-stroked","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"key_cutter"},"name":"Key Cutter"},"craft/metal_construction":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"metal_construction"},"name":"Metal Construction"},"craft/painter":{"icon":"art-gallery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"painter"},"name":"Painter"},"craft/photographer":{"icon":"attraction","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"photographer"},"name":"Photographer"},"craft/photographic_laboratory":{"icon":"attraction","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["film"],"tags":{"craft":"photographic_laboratory"},"name":"Photographic Laboratory"},"craft/plasterer":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"plasterer"},"name":"Plasterer"},"craft/plumber":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["pipe"],"tags":{"craft":"plumber"},"name":"Plumber"},"craft/pottery":{"icon":"art-gallery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["ceramic"],"tags":{"craft":"pottery"},"name":"Pottery"},"craft/rigger":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"rigger"},"name":"Rigger"},"craft/roofer":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"roofer"},"name":"Roofer"},"craft/saddler":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"saddler"},"name":"Saddler"},"craft/sailmaker":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"sailmaker"},"name":"Sailmaker"},"craft/sawmill":{"icon":"logging","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["lumber"],"tags":{"craft":"sawmill"},"name":"Sawmill"},"craft/scaffolder":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"scaffolder"},"name":"Scaffolder"},"craft/sculptor":{"icon":"art-gallery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"sculptor"},"name":"Sculptor"},"craft/shoemaker":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["cobbler"],"tags":{"craft":"shoemaker"},"name":"Shoemaker"},"craft/stonemason":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["masonry"],"tags":{"craft":"stonemason"},"name":"Stonemason"},"craft/tiler":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"tiler"},"name":"Tiler"},"craft/tinsmith":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"tinsmith"},"name":"Tinsmith"},"craft/upholsterer":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"upholsterer"},"name":"Upholsterer"},"craft/watchmaker":{"icon":"poi-clock","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"watchmaker"},"name":"Watchmaker"},"craft/window_construction":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["glass"],"tags":{"craft":"window_construction"},"name":"Window Construction"},"craft/winery":{"icon":"alcohol-shop","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"winery"},"name":"Winery"},"embankment":{"geometry":["line"],"tags":{"embankment":"yes"},"name":"Embankment","matchScore":0.2},"emergency/designated":{"fields":[],"geometry":["line"],"tags":{"emergency":"designated"},"terms":[],"name":"Emergency Access Designated","searchable":false,"matchScore":0.01},"emergency/destination":{"fields":[],"geometry":["line"],"tags":{"emergency":"destination"},"terms":[],"name":"Emergency Access Destination","searchable":false,"matchScore":0.01},"emergency/no":{"fields":[],"geometry":["line"],"tags":{"emergency":"no"},"terms":[],"name":"Emergency Access No","searchable":false,"matchScore":0.01},"emergency/official":{"fields":[],"geometry":["line"],"tags":{"emergency":"official"},"terms":[],"name":"Emergency Access Official","searchable":false,"matchScore":0.01},"emergency/private":{"fields":[],"geometry":["line"],"tags":{"emergency":"private"},"terms":[],"name":"Emergency Access Private","searchable":false,"matchScore":0.01},"emergency/yes":{"fields":[],"geometry":["line"],"tags":{"emergency":"yes"},"terms":[],"name":"Emergency Access Yes","searchable":false,"matchScore":0.01},"emergency/ambulance_station":{"icon":"hospital","fields":["name","operator","building_area","address"],"geometry":["point","area"],"terms":["EMS","EMT","rescue"],"tags":{"emergency":"ambulance_station"},"name":"Ambulance Station"},"emergency/defibrillator":{"icon":"defibrillator","fields":["ref","access","opening_hours","indoor","phone"],"geometry":["point","vertex"],"terms":["AED"],"tags":{"emergency":"defibrillator"},"name":"Defibrillator"},"emergency/fire_hydrant":{"icon":"poi-fire-hydrant","fields":["fire_hydrant/type","fire_hydrant/position","ref","operator"],"geometry":["point","vertex"],"terms":["fire plug"],"tags":{"emergency":"fire_hydrant"},"name":"Fire Hydrant"},"emergency/life_ring":{"icon":"circle-stroked","fields":["ref","operator"],"geometry":["point","vertex"],"terms":["life buoy","kisby ring","kisbie ring","perry buoy"],"tags":{"emergency":"life_ring"},"name":"Life Ring"},"emergency/phone":{"icon":"emergency-phone","fields":["operator"],"geometry":["point","vertex"],"tags":{"emergency":"phone"},"name":"Emergency Phone"},"emergency/water_tank":{"icon":"water","fields":["name","operator","ref"],"geometry":["point","vertex"],"terms":["water tank","cistern","reservoir"],"tags":{"emergency":"water_tank"},"name":"Emergency Water Tank"},"entrance":{"icon":"entrance-alt1","geometry":["vertex"],"tags":{"entrance":"*"},"fields":["entrance","access_simple","address"],"name":"Entrance/Exit"},"footway/crossing-raised":{"fields":["crossing","access","surface","kerb","tactile_paving"],"geometry":["line"],"tags":{"highway":"footway","footway":"crossing","traffic_calming":"table"},"reference":{"key":"traffic_calming","value":"table"},"terms":["flat top","hump","speed","slow"],"name":"Raised Street Crossing"},"footway/crossing":{"fields":["crossing","access","surface","kerb","tactile_paving"],"geometry":["line"],"tags":{"highway":"footway","footway":"crossing"},"reference":{"key":"footway","value":"crossing"},"terms":[],"name":"Street Crossing"},"footway/crosswalk-raised":{"icon":"highway-footway","fields":["crossing","access","surface","kerb","tactile_paving"],"geometry":["line"],"tags":{"highway":"footway","footway":"crossing","crossing":"zebra","traffic_calming":"table"},"reference":{"key":"traffic_calming","value":"table"},"terms":["zebra crossing","flat top","hump","speed","slow"],"name":"Raised Pedestrian Crosswalk"},"footway/crosswalk":{"icon":"highway-footway","fields":["crossing","access","surface","kerb","tactile_paving"],"geometry":["line"],"tags":{"highway":"footway","footway":"crossing","crossing":"zebra"},"reference":{"key":"footway","value":"crossing"},"terms":["zebra crossing"],"name":"Pedestrian Crosswalk"},"footway/sidewalk":{"icon":"highway-footway","fields":["surface","lit","width","structure","access"],"geometry":["line"],"tags":{"highway":"footway","footway":"sidewalk"},"reference":{"key":"footway","value":"sidewalk"},"terms":[],"name":"Sidewalk"},"ford":{"geometry":["vertex"],"tags":{"ford":"yes"},"name":"Ford"},"golf/bunker":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"bunker","natural":"sand"},"terms":["hazard","bunker"],"reference":{"key":"golf","value":"bunker"},"name":"Sand Trap"},"golf/fairway":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"fairway","landuse":"grass"},"reference":{"key":"golf","value":"fairway"},"name":"Fairway"},"golf/green":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"green","landuse":"grass","leisure":"pitch","sport":"golf"},"reference":{"key":"golf","value":"green"},"name":"Putting Green"},"golf/hole":{"icon":"golf","fields":["name","ref_golf_hole","par","handicap"],"geometry":["line"],"tags":{"golf":"hole"},"name":"Golf Hole"},"golf/lateral_water_hazard_area":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"lateral_water_hazard","natural":"water"},"reference":{"key":"golf","value":"lateral_water_hazard"},"name":"Lateral Water Hazard"},"golf/lateral_water_hazard_line":{"icon":"golf","fields":["name"],"geometry":["line"],"tags":{"golf":"lateral_water_hazard"},"name":"Lateral Water Hazard"},"golf/rough":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"rough","landuse":"grass"},"reference":{"key":"golf","value":"rough"},"name":"Rough"},"golf/tee":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"tee","landuse":"grass"},"terms":["teeing ground"],"reference":{"key":"golf","value":"tee"},"name":"Tee Box"},"golf/water_hazard_area":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"water_hazard","natural":"water"},"reference":{"key":"golf","value":"water_hazard"},"name":"Water Hazard"},"golf/water_hazard_line":{"icon":"golf","fields":["name"],"geometry":["line"],"tags":{"golf":"water_hazard"},"name":"Water Hazard"},"healthcare":{"icon":"hospital","fields":["name","healthcare","operator","healthcare/speciality","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"healthcare":"*"},"terms":["clinic","doctor","disease","health","institution","sick","surgery","wellness"],"name":"Healthcare Facility"},"healthcare/alternative":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["acupuncture","anthroposophical","applied kinesiology","aromatherapy","ayurveda","herbalism","homeopathy","hydrotherapy","hypnosis","naturopathy","osteopathy","reflexology","reiki","shiatsu","traditional","tuina","unani"],"tags":{"healthcare":"alternative"},"name":"Alternative Medicine"},"healthcare/alternative/chiropractic":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["back","pain","spine"],"tags":{"healthcare":"alternative","healthcare:speciality":"chiropractic"},"name":"Chiropractor"},"healthcare/audiologist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["ear","hearing","sound"],"tags":{"healthcare":"audiologist"},"name":"Audiologist"},"healthcare/birthing_center":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["baby","childbirth","delivery","labour","labor","pregnancy"],"tags":{"healthcare":"birthing_center"},"name":"Birthing Center"},"healthcare/blood_donation":{"icon":"blood-bank","fields":["name","operator","healthcare/speciality","blood_components","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["blood bank","blood donation","blood transfusion","apheresis","plasmapheresis","plateletpheresis","stem cell donation"],"tags":{"healthcare":"blood_donation"},"name":"Blood Donor Center"},"healthcare/hospice":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["terminal","illness"],"tags":{"healthcare":"hospice"},"name":"Hospice"},"healthcare/midwife":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["baby","childbirth","delivery","labour","labor","pregnancy"],"tags":{"healthcare":"midwife"},"name":"Midwife"},"healthcare/occupational_therapist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["therapist","therapy"],"tags":{"healthcare":"occupational_therapist"},"name":"Occupational Therapist"},"healthcare/optometrist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["eye","glasses","lasik","lenses","vision"],"tags":{"healthcare":"optometrist"},"name":"Optometrist"},"healthcare/physiotherapist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["physical","therapist","therapy"],"tags":{"healthcare":"physiotherapist"},"name":"Physiotherapist"},"healthcare/podiatrist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["foot","feet","nails"],"tags":{"healthcare":"podiatrist"},"name":"Podiatrist"},"healthcare/psychotherapist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["anxiety","counselor","depression","mental health","mind","suicide","therapist","therapy"],"tags":{"healthcare":"psychotherapist"},"name":"Psychotherapist"},"healthcare/rehabilitation":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["rehab","therapist","therapy"],"tags":{"healthcare":"rehabilitation"},"name":"Rehabilitation Facility"},"healthcare/speech_therapist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["speech","therapist","therapy","voice"],"tags":{"healthcare":"speech_therapist"},"name":"Speech Therapist"},"highway/bus_stop":{"icon":"bus","fields":["name","network","operator","bench","shelter"],"geometry":["point","vertex"],"tags":{"highway":"bus_stop"},"name":"Bus Stop / Platform","searchable":false},"highway/bridleway":{"fields":["name","surface","width","structure","access"],"icon":"highway-bridleway","geometry":["line"],"tags":{"highway":"bridleway"},"terms":["bridleway","equestrian","horse"],"name":"Bridle Path"},"highway/bus_guideway":{"icon":"highway-bus_guideway","fields":["name","operator","oneway"],"geometry":["line"],"tags":{"highway":"bus_guideway"},"addTags":{"highway":"bus_guideway","access":"no","bus":"designated"},"removeTags":{"highway":"bus_guideway","access":"no","bus":"designated"},"terms":[],"name":"Bus Guideway"},"highway/corridor":{"icon":"highway-footway","fields":["name","width","level","access_simple"],"geometry":["line"],"tags":{"highway":"corridor"},"terms":["gallery","hall","hallway","indoor","passage","passageway"],"name":"Indoor Corridor"},"highway/crossing-raised":{"fields":["crossing","kerb","tactile_paving"],"geometry":["vertex"],"tags":{"highway":"crossing","traffic_calming":"table"},"reference":{"key":"traffic_calming","value":"table"},"terms":["flat top","hump","speed","slow"],"name":"Raised Street Crossing"},"highway/crossing":{"fields":["crossing","kerb","tactile_paving"],"geometry":["vertex"],"tags":{"highway":"crossing"},"reference":{"key":"highway","value":"crossing"},"terms":[],"name":"Street Crossing"},"highway/crosswalk-raised":{"icon":"poi-foot","fields":["crossing","kerb","tactile_paving"],"geometry":["vertex"],"tags":{"highway":"crossing","crossing":"zebra","traffic_calming":"table"},"reference":{"key":"traffic_calming","value":"table"},"terms":["zebra crossing","flat top","hump","speed","slow"],"name":"Raised Pedestrian Crosswalk"},"highway/crosswalk":{"icon":"poi-foot","fields":["crossing","kerb","tactile_paving"],"geometry":["vertex"],"tags":{"highway":"crossing","crossing":"zebra"},"reference":{"key":"highway","value":"crossing"},"terms":["zebra crossing"],"name":"Pedestrian Crosswalk"},"highway/cycleway":{"icon":"highway-cycleway","fields":["name","oneway","surface","lit","width","structure","access"],"geometry":["line"],"tags":{"highway":"cycleway"},"terms":["bike"],"name":"Cycle Path"},"highway/elevator":{"icon":"poi-elevator","fields":["access_simple","opening_hours","maxweight","ref"],"geometry":["vertex"],"tags":{"highway":"elevator"},"terms":["lift"],"name":"Elevator"},"highway/footway":{"icon":"highway-footway","fields":["name","surface","lit","width","structure","access"],"geometry":["line"],"terms":["hike","hiking","trackway","trail","walk"],"tags":{"highway":"footway"},"name":"Foot Path"},"highway/give_way":{"icon":"poi-yield","fields":["direction_vertex"],"geometry":["vertex"],"tags":{"highway":"give_way"},"terms":["give way","yield","sign"],"name":"Yield Sign"},"highway/living_street":{"icon":"highway-living-street","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","access","cycleway"],"geometry":["line"],"tags":{"highway":"living_street"},"name":"Living Street"},"highway/mini_roundabout":{"icon":"circle-stroked","geometry":["vertex"],"tags":{"highway":"mini_roundabout"},"fields":["direction_clock"],"name":"Mini-Roundabout"},"highway/motorway_junction":{"icon":"poi-junction","geometry":["vertex"],"tags":{"highway":"motorway_junction"},"fields":["ref_highway_junction"],"name":"Motorway Junction / Exit"},"highway/motorway_link":{"icon":"highway-motorway-link","fields":["name","ref_road_number","oneway","maxspeed","lanes","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"motorway_link"},"addTags":{"highway":"motorway_link","oneway":"yes"},"removeTags":{"highway":"motorway_link","oneway":"yes"},"terms":["ramp","on ramp","off ramp"],"name":"Motorway Link"},"highway/motorway":{"icon":"highway-motorway","fields":["name","ref_road_number","oneway_yes","maxspeed","lanes","surface","structure","maxheight","toll","access"],"geometry":["line"],"tags":{"highway":"motorway"},"terms":["autobahn","expressway","freeway","highway","interstate","parkway","thruway","turnpike"],"name":"Motorway"},"highway/path":{"icon":"highway-path","fields":["name","surface","width","structure","access","incline","sac_scale","trail_visibility","mtb/scale","mtb/scale/uphill","mtb/scale/imba","ref"],"geometry":["line"],"terms":["hike","hiking","trackway","trail","walk"],"tags":{"highway":"path"},"name":"Path"},"highway/pedestrian_area":{"icon":"poi-foot","fields":["name","surface","lit","width","structure","access"],"geometry":["area"],"tags":{"highway":"pedestrian","area":"yes"},"terms":["center","centre","plaza","quad","square","walkway"],"name":"Pedestrian Area"},"highway/pedestrian_line":{"icon":"highway-footway","fields":["name","surface","lit","width","oneway","structure","access"],"geometry":["line"],"tags":{"highway":"pedestrian"},"terms":["center","centre","plaza","quad","square","walkway"],"name":"Pedestrian Street"},"highway/primary_link":{"icon":"highway-primary-link","fields":["name","oneway","maxspeed","lanes","surface","maxheight","ref_road_number","cycleway","structure","access"],"geometry":["line"],"tags":{"highway":"primary_link"},"terms":["ramp","on ramp","off ramp"],"name":"Primary Link"},"highway/primary":{"icon":"highway-primary","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","ref_road_number","cycleway","access"],"geometry":["line"],"tags":{"highway":"primary"},"terms":[],"name":"Primary Road"},"highway/raceway":{"icon":"highway-unclassified","fields":["name","oneway","surface","sport_racing_motor","lit","width","lanes","structure"],"geometry":["point","line","area"],"tags":{"highway":"raceway"},"addTags":{"highway":"raceway","sport":"motor"},"terms":["auto*","formula one","kart","motocross","nascar","race*","track"],"name":"Racetrack (Motorsport)"},"highway/residential":{"icon":"highway-residential","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","cycleway","access"],"geometry":["line"],"tags":{"highway":"residential"},"terms":[],"name":"Residential Road"},"highway/rest_area":{"icon":"car","fields":["name"],"geometry":["point","vertex","area"],"tags":{"highway":"rest_area"},"terms":["rest stop"],"name":"Rest Area"},"highway/road":{"icon":"highway-road","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"road"},"terms":[],"name":"Unknown Road"},"highway/secondary_link":{"icon":"highway-secondary-link","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","ref_road_number","cycleway","access"],"geometry":["line"],"tags":{"highway":"secondary_link"},"terms":["ramp","on ramp","off ramp"],"name":"Secondary Link"},"highway/secondary":{"icon":"highway-secondary","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","ref_road_number","cycleway","access"],"geometry":["line"],"tags":{"highway":"secondary"},"terms":[],"name":"Secondary Road"},"highway/service":{"icon":"highway-service","fields":["name","service","oneway","maxspeed","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"service"},"terms":[],"name":"Service Road"},"highway/service/alley":{"icon":"highway-service","fields":["name","oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"alley"},"reference":{"key":"service","value":"alley"},"name":"Alley"},"highway/service/drive-through":{"icon":"highway-service","fields":["name","oneway","covered","maxheight","maxspeed","structure","access","surface"],"geometry":["line"],"tags":{"highway":"service","service":"drive-through"},"reference":{"key":"service","value":"drive-through"},"name":"Drive-Through"},"highway/service/driveway":{"icon":"highway-service","fields":["name","oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"driveway"},"reference":{"key":"service","value":"driveway"},"name":"Driveway"},"highway/service/emergency_access":{"icon":"highway-service","fields":["name","oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"emergency_access"},"reference":{"key":"service","value":"emergency_access"},"name":"Emergency Access"},"highway/service/parking_aisle":{"icon":"highway-service","fields":["name","oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"parking_aisle"},"reference":{"key":"service","value":"parking_aisle"},"name":"Parking Aisle"},"highway/services":{"icon":"car","fields":["name"],"geometry":["point","vertex","area"],"tags":{"highway":"services"},"terms":["services","travel plaza","service station"],"name":"Service Area"},"highway/speed_camera":{"icon":"attraction","geometry":["point","vertex"],"fields":["direction","ref"],"tags":{"highway":"speed_camera"},"terms":[],"name":"Speed Camera"},"highway/steps":{"icon":"highway-steps","fields":["surface","lit","width","incline_steps","handrail","step_count"],"geometry":["line"],"tags":{"highway":"steps"},"terms":["stairs","staircase"],"name":"Steps"},"highway/stop":{"icon":"poi-stop","fields":["stop","direction_vertex"],"geometry":["vertex"],"tags":{"highway":"stop"},"terms":["stop","halt","sign"],"name":"Stop Sign"},"highway/street_lamp":{"icon":"poi-bulb","geometry":["point","vertex"],"tags":{"highway":"street_lamp"},"fields":["lamp_type","direction","ref"],"terms":["streetlight","street light","lamp","light","gaslight"],"name":"Street Lamp"},"highway/tertiary_link":{"icon":"highway-tertiary-link","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","ref_road_number","cycleway","access"],"geometry":["line"],"tags":{"highway":"tertiary_link"},"terms":["ramp","on ramp","off ramp"],"name":"Tertiary Link"},"highway/tertiary":{"icon":"highway-tertiary","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","ref_road_number","cycleway","access"],"geometry":["line"],"tags":{"highway":"tertiary"},"terms":[],"name":"Tertiary Road"},"highway/track":{"icon":"highway-track","fields":["name","tracktype","surface","width","structure","access","incline","smoothness","mtb/scale","mtb/scale/uphill","mtb/scale/imba"],"geometry":["line"],"tags":{"highway":"track"},"terms":["woods road","forest road","logging road","fire road","farm road","agricultural road","ranch road","carriage road","primitive","unmaintained","rut","offroad","4wd","4x4","four wheel drive","atv","quad","jeep","double track","two track"],"name":"Unmaintained Track Road"},"highway/traffic_mirror":{"geometry":["point","vertex"],"fields":["direction"],"tags":{"highway":"traffic_mirror"},"terms":["blind spot","convex","corner","curved","roadside","round","safety","sphere","visibility"],"name":"Traffic Mirror"},"highway/traffic_signals":{"icon":"poi-traffic-signals","geometry":["vertex"],"tags":{"highway":"traffic_signals"},"fields":["traffic_signals","traffic_signals/direction"],"terms":["light","stoplight","traffic light"],"name":"Traffic Signals"},"highway/trunk_link":{"icon":"highway-trunk-link","fields":["name","ref_road_number","oneway","maxspeed","lanes","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"trunk_link"},"terms":["ramp","on ramp","off ramp"],"name":"Trunk Link"},"highway/trunk":{"icon":"highway-trunk","fields":["name","ref_road_number","oneway","maxspeed","lanes","surface","structure","maxheight","toll","access"],"geometry":["line"],"tags":{"highway":"trunk"},"terms":[],"name":"Trunk Road"},"highway/turning_circle":{"icon":"circle-stroked","geometry":["vertex"],"tags":{"highway":"turning_circle"},"terms":["cul-de-sac"],"name":"Turning Circle"},"highway/turning_loop":{"icon":"circle","geometry":["vertex"],"tags":{"highway":"turning_loop"},"terms":["cul-de-sac"],"name":"Turning Loop (Island)"},"highway/unclassified":{"icon":"highway-unclassified","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","cycleway","access"],"geometry":["line"],"tags":{"highway":"unclassified"},"terms":[],"name":"Minor/Unclassified Road"},"historic":{"icon":"poi-ruins","fields":["historic","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"*"},"name":"Historic Site"},"historic/archaeological_site":{"icon":"poi-ruins","fields":["name","historic/civilization","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"archaeological_site"},"name":"Archaeological Site"},"historic/boundary_stone":{"icon":"poi-milestone","fields":["name","inscription"],"geometry":["point","vertex"],"tags":{"historic":"boundary_stone"},"name":"Boundary Stone"},"historic/castle":{"icon":"castle","fields":["name","castle_type","building_area","historic/civilization"],"geometry":["point","area"],"tags":{"historic":"castle"},"name":"Castle"},"historic/memorial":{"icon":"monument","fields":["name","memorial","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"memorial"},"name":"Memorial"},"historic/monument":{"icon":"monument","fields":["name","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"monument"},"name":"Monument"},"historic/ruins":{"icon":"poi-ruins","fields":["name","historic/civilization","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"ruins"},"name":"Ruins"},"historic/tomb":{"icon":"cemetery","fields":["name","tomb","building_area","inscription"],"geometry":["point","area"],"tags":{"historic":"tomb"},"name":"Tomb"},"historic/wayside_cross":{"icon":"religious-christian","fields":["name","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"wayside_cross"},"name":"Wayside Cross"},"historic/wayside_shrine":{"icon":"landmark","fields":["name","religion","denomination","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"wayside_shrine"},"name":"Wayside Shrine"},"junction":{"icon":"poi-junction","fields":["name"],"geometry":["vertex","area"],"tags":{"junction":"yes"},"name":"Junction"},"landuse":{"fields":["name","landuse"],"geometry":["area"],"tags":{"landuse":"*"},"matchScore":0.9,"name":"Land Use"},"landuse/farm":{"icon":"farm","fields":["name","operator","crop"],"geometry":["point","area"],"tags":{"landuse":"farm"},"terms":[],"name":"Farmland","searchable":false},"landuse/allotments":{"geometry":["area"],"fields":["name"],"tags":{"landuse":"allotments"},"terms":["allotment","garden"],"name":"Community Garden"},"landuse/aquaculture":{"icon":"aquarium","fields":["name","operator","produce"],"geometry":["area"],"tags":{"landuse":"aquaculture"},"terms":["fish farm","crustacean","algae","aquafarming","shrimp farm","oyster farm","mariculture","algaculture"],"name":"Aquaculture"},"landuse/basin":{"icon":"water","fields":["name"],"geometry":["area"],"tags":{"landuse":"basin"},"terms":[],"name":"Basin"},"landuse/brownfield":{"geometry":["area"],"fields":["name"],"tags":{"landuse":"brownfield"},"terms":[],"matchScore":0.9,"name":"Brownfield"},"landuse/cemetery":{"icon":"cemetery","fields":["name","religion","denomination"],"geometry":["area"],"tags":{"landuse":"cemetery"},"terms":[],"name":"Cemetery"},"landuse/churchyard":{"fields":["name","religion","denomination"],"geometry":["area"],"tags":{"landuse":"churchyard"},"terms":[],"name":"Churchyard"},"landuse/commercial":{"icon":"suitcase","fields":["name"],"geometry":["area"],"tags":{"landuse":"commercial"},"terms":[],"matchScore":0.9,"name":"Commercial Area"},"landuse/construction":{"fields":["name","construction","operator"],"geometry":["area"],"tags":{"landuse":"construction"},"terms":[],"name":"Construction"},"landuse/farmland":{"icon":"farm","fields":["name","operator","crop","produce"],"geometry":["area"],"tags":{"landuse":"farmland"},"terms":["crop","grow","plant"],"name":"Farmland"},"landuse/farmyard":{"icon":"farm","fields":["name","operator","crop"],"geometry":["area"],"tags":{"landuse":"farmyard"},"terms":["crop","grow","plant"],"name":"Farmyard"},"landuse/forest":{"icon":"park-alt1","fields":["name","leaf_type","leaf_cycle","produce"],"geometry":["area"],"tags":{"landuse":"forest"},"terms":["tree"],"name":"Forest"},"landuse/garages":{"geometry":["area"],"fields":["name"],"tags":{"landuse":"garages"},"terms":[],"name":"Garage Landuse"},"landuse/grass":{"geometry":["area"],"tags":{"landuse":"grass"},"terms":[],"name":"Grass"},"landuse/greenfield":{"geometry":["area"],"fields":["name"],"tags":{"landuse":"greenfield"},"terms":[],"matchScore":0.9,"name":"Greenfield"},"landuse/greenhouse_horticulture":{"icon":"garden","fields":["name","operator"],"geometry":["area"],"terms":["flower","greenhouse","horticulture","grow","vivero"],"tags":{"landuse":"greenhouse_horticulture"},"matchScore":0.9,"name":"Greenhouse Horticulture"},"landuse/harbour":{"icon":"harbor","fields":["name","operator"],"geometry":["area"],"terms":["boat"],"tags":{"landuse":"harbour"},"name":"Harbor"},"landuse/industrial":{"icon":"industry","fields":["name"],"geometry":["area"],"tags":{"landuse":"industrial"},"terms":[],"matchScore":0.9,"name":"Industrial Area"},"landuse/industrial/scrap_yard":{"icon":"car","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"tags":{"industrial":"scrap_yard"},"addTags":{"landuse":"industrial","industrial":"scrap_yard"},"removeTags":{"landuse":"industrial","industrial":"scrap_yard"},"reference":{"key":"industrial","value":"scrap_yard"},"terms":["car","junk","metal","salvage","scrap","u-pull-it","vehicle","wreck","yard"],"name":"Scrap Yard"},"landuse/industrial/slaughterhouse":{"icon":"slaughterhouse","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"industrial":"slaughterhouse"},"addTags":{"landuse":"industrial","industrial":"slaughterhouse"},"removeTags":{"landuse":"industrial","industrial":"slaughterhouse"},"reference":{"key":"industrial","value":"slaughterhouse"},"terms":["abattoir","beef","butchery","calf","chicken","cow","killing house","meat","pig","pork","poultry","shambles","stockyard"],"name":"Slaughterhouse"},"landuse/landfill":{"geometry":["area"],"fields":["name"],"tags":{"landuse":"landfill"},"terms":["dump"],"name":"Landfill"},"landuse/meadow":{"icon":"garden","geometry":["area"],"fields":["name"],"tags":{"landuse":"meadow"},"terms":[],"name":"Meadow"},"landuse/military":{"icon":"poi-military","fields":["name"],"geometry":["area"],"tags":{"landuse":"military"},"terms":[],"matchScore":0.9,"name":"Military Area"},"landuse/military/airfield":{"icon":"airfield","fields":["name","iata","icao"],"geometry":["point","area"],"tags":{"military":"airfield"},"addTags":{"landuse":"military","military":"airfield"},"removeTags":{"landuse":"military","military":"airfield"},"terms":["air force","army","base","bomb","fight","force","guard","heli*","jet","marine","navy","plane","troop","war"],"name":"Military Airfield"},"landuse/military/barracks":{"icon":"poi-military","fields":["name","building_area"],"geometry":["point","area"],"tags":{"military":"barracks"},"addTags":{"landuse":"military","military":"barracks"},"removeTags":{"landuse":"military","military":"barracks"},"terms":["air force","army","base","fight","force","guard","marine","navy","troop","war"],"name":"Barracks"},"landuse/military/bunker":{"icon":"poi-military","fields":["name","bunker_type","building_area"],"geometry":["point","area"],"tags":{"military":"bunker"},"addTags":{"building":"bunker","landuse":"military","military":"bunker"},"removeTags":{"building":"bunker","landuse":"military","military":"bunker"},"terms":["air force","army","base","fight","force","guard","marine","navy","troop","war"],"name":"Military Bunker"},"landuse/military/checkpoint":{"icon":"barrier","fields":["name"],"geometry":["point","vertex","area"],"tags":{"military":"checkpoint"},"addTags":{"landuse":"military","military":"checkpoint"},"removeTags":{"landuse":"military","military":"checkpoint"},"terms":["air force","army","base","force","guard","marine","navy","troop","war"],"name":"Checkpoint"},"landuse/military/danger_area":{"icon":"danger","fields":["name"],"geometry":["point","vertex","area"],"tags":{"military":"danger_area"},"addTags":{"landuse":"military","military":"danger_area"},"removeTags":{"landuse":"military","military":"danger_area"},"terms":["air force","army","base","blast","bomb","explo*","force","guard","mine","marine","navy","troop","war"],"name":"Danger Area"},"landuse/military/naval_base":{"icon":"poi-military","fields":["name"],"geometry":["point","area"],"tags":{"military":"naval_base"},"addTags":{"landuse":"military","military":"naval_base"},"removeTags":{"landuse":"military","military":"naval_base"},"terms":["base","fight","force","guard","marine","navy","ship","sub","troop","war"],"name":"Naval Base"},"landuse/military/nuclear_explosion_site":{"icon":"danger","fields":["name"],"geometry":["point","vertex","area"],"tags":{"military":"nuclear_explosion_site"},"addTags":{"landuse":"military","military":"nuclear_explosion_site"},"removeTags":{"landuse":"military","military":"nuclear_explosion_site"},"terms":["atom","blast","bomb","detonat*","nuke","site","test"],"name":"Nuclear Explosion Site"},"landuse/military/obstacle_course":{"icon":"poi-military","geometry":["point","area"],"tags":{"military":"obstacle_course"},"addTags":{"landuse":"military","military":"obstacle_course"},"removeTags":{"landuse":"military","military":"obstacle_course"},"terms":["army","base","force","guard","marine","navy","troop","war"],"name":"Obstacle Course"},"landuse/military/office":{"icon":"poi-military","fields":["name","building_area"],"geometry":["point","area"],"tags":{"military":"office"},"addTags":{"landuse":"military","military":"office"},"removeTags":{"landuse":"military","military":"office"},"terms":["air force","army","base","enlist","fight","force","guard","marine","navy","recruit","troop","war"],"name":"Military Office"},"landuse/military/range":{"icon":"poi-military","fields":["name"],"geometry":["point","area"],"tags":{"military":"range"},"addTags":{"landuse":"military","military":"range"},"removeTags":{"landuse":"military","military":"range"},"terms":["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],"name":"Military Range"},"landuse/military/training_area":{"icon":"poi-military","fields":["name"],"geometry":["point","area"],"tags":{"military":"training_area"},"addTags":{"landuse":"military","military":"training_area"},"removeTags":{"landuse":"military","military":"training_area"},"terms":["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],"name":"Training Area"},"landuse/orchard":{"icon":"park-alt1","fields":["name","operator","trees"],"geometry":["area"],"tags":{"landuse":"orchard"},"terms":["fruit"],"name":"Orchard"},"landuse/plant_nursery":{"icon":"garden","fields":["name","operator","plant"],"geometry":["area"],"tags":{"landuse":"plant_nursery"},"terms":["flower","garden","grow","vivero"],"name":"Plant Nursery"},"landuse/quarry":{"geometry":["area"],"fields":["name"],"tags":{"landuse":"quarry"},"terms":[],"name":"Quarry"},"landuse/railway":{"icon":"rail","fields":["operator"],"geometry":["area"],"tags":{"landuse":"railway"},"terms":["rail","train","track"],"name":"Railway Corridor"},"landuse/recreation_ground":{"icon":"pitch","geometry":["area"],"fields":["name"],"tags":{"landuse":"recreation_ground"},"terms":["playing fields"],"name":"Recreation Ground"},"landuse/religious":{"geometry":["area"],"fields":["name","religion","denomination"],"tags":{"landuse":"religious"},"terms":[],"name":"Religious Area"},"landuse/residential":{"icon":"building","geometry":["area"],"tags":{"landuse":"residential"},"terms":[],"matchScore":0.9,"name":"Residential Area"},"landuse/retail":{"icon":"commercial","geometry":["area"],"fields":["name"],"tags":{"landuse":"retail"},"matchScore":0.9,"name":"Retail Area"},"landuse/vineyard":{"fields":["name","operator","grape_variety"],"geometry":["area"],"tags":{"landuse":"vineyard"},"addTags":{"landuse":"vineyard","crop":"grape"},"removeTags":{"landuse":"vineyard","crop":"grape","grape_variety":"*"},"terms":["grape","wine"],"name":"Vineyard"},"leisure":{"icon":"pitch","fields":["name","leisure"],"geometry":["point","vertex","area"],"tags":{"leisure":"*"},"name":"Leisure"},"leisure/adult_gaming_centre":{"icon":"poi-dice","fields":["name","operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"terms":["gambling","slot machine"],"tags":{"leisure":"adult_gaming_centre"},"name":"Adult Gaming Center"},"leisure/amusement_arcade":{"icon":"gaming","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["pay-to-play games","video games","driving simulators","pinball machines"],"tags":{"leisure":"amusement_arcade"},"name":"Amusement Arcade"},"leisure/bird_hide":{"icon":"poi-binoculars","fields":["building_area"],"geometry":["point","area"],"tags":{"leisure":"bird_hide"},"terms":["machan","ornithology"],"name":"Bird Hide"},"leisure/bowling_alley":{"icon":"poi-bowling","fields":["name","operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"terms":["bowling center"],"tags":{"leisure":"bowling_alley"},"name":"Bowling Alley"},"leisure/common":{"icon":"poi-foot","geometry":["point","area"],"fields":["name"],"terms":["open space"],"tags":{"leisure":"common"},"name":"Common"},"leisure/dance":{"icon":"music","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["ballroom","jive","swing","tango","waltz"],"tags":{"leisure":"dance"},"name":"Dance Hall"},"leisure/dancing_school":{"icon":"music","fields":["name","operator","address","opening_hours","dance/style"],"geometry":["point","area"],"terms":["jive","swing","tango","waltz","dance teaching"],"tags":{"leisure":"dance","dance:teaching":"yes"},"reference":{"key":"leisure","value":"dance"},"name":"Dance School"},"leisure/dog_park":{"icon":"dog-park","geometry":["point","area"],"fields":["name"],"terms":[],"tags":{"leisure":"dog_park"},"name":"Dog Park"},"leisure/firepit":{"icon":"fire-station","geometry":["point","area"],"tags":{"leisure":"firepit"},"terms":["fireplace","campfire"],"name":"Firepit"},"leisure/fitness_centre":{"icon":"pitch","fields":["name","sport","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_centre"},"terms":["health","gym","leisure","studio"],"name":"Gym / Fitness Center"},"leisure/fitness_centre/yoga":{"icon":"pitch","fields":["name","sport","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["studio"],"tags":{"leisure":"fitness_centre","sport":"yoga"},"reference":{"key":"sport","value":"yoga"},"name":"Yoga Studio"},"leisure/fitness_station":{"icon":"pitch","fields":["fitness_station","ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station"},"addTags":{"leisure":"fitness_station","sport":"fitness"},"removeTags":{"leisure":"fitness_station","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["exercise","fitness","gym","trim trail"],"name":"Outdoor Fitness Station"},"leisure/fitness_station/balance_beam":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"balance_beam"},"addTags":{"leisure":"fitness_station","fitness_station":"balance_beam","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"balance_beam","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["balance","exercise","fitness","gym","trim trail"],"name":"Exercise Balance Beam"},"leisure/fitness_station/box":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"box"},"addTags":{"leisure":"fitness_station","fitness_station":"box","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"box","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["box","exercise","fitness","gym","jump","trim trail"],"name":"Exercise Box"},"leisure/fitness_station/horizontal_bar":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"horizontal_bar"},"addTags":{"leisure":"fitness_station","fitness_station":"horizontal_bar","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"horizontal_bar","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["bar","chinup","chin up","exercise","fitness","gym","pullup","pull up","trim trail"],"name":"Exercise Horizontal Bar"},"leisure/fitness_station/horizontal_ladder":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"horizontal_ladder"},"addTags":{"leisure":"fitness_station","fitness_station":"horizontal_ladder","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"horizontal_ladder","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["bar","chinup","chin up","exercise","fitness","gym","ladder","monkey bars","pullup","pull up","trim trail"],"name":"Exercise Monkey Bars"},"leisure/fitness_station/hyperextension":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"hyperextension"},"addTags":{"leisure":"fitness_station","fitness_station":"hyperextension","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"hyperextension","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["back","exercise","extension","fitness","gym","roman chair","trim trail"],"name":"Hyperextension Station"},"leisure/fitness_station/parallel_bars":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"parallel_bars"},"addTags":{"leisure":"fitness_station","fitness_station":"parallel_bars","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"parallel_bars","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["bar","dip","exercise","fitness","gym","trim trail"],"name":"Parallel Bars"},"leisure/fitness_station/push-up":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"push-up"},"addTags":{"leisure":"fitness_station","fitness_station":"push-up","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"push-up","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["bar","exercise","fitness","gym","pushup","push up","trim trail"],"name":"Push-Up Station"},"leisure/fitness_station/rings":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"rings"},"addTags":{"leisure":"fitness_station","fitness_station":"rings","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"rings","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["exercise","fitness","gym","muscle up","pullup","pull up","trim trail"],"name":"Exercise Rings"},"leisure/fitness_station/sign":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"sign"},"addTags":{"leisure":"fitness_station","fitness_station":"sign","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"sign","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["exercise","fitness","gym","trim trail"],"name":"Exercise Instruction Sign"},"leisure/fitness_station/sit-up":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"sit-up"},"addTags":{"leisure":"fitness_station","fitness_station":"sit-up","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"sit-up","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["crunch","exercise","fitness","gym","situp","sit up","trim trail"],"name":"Sit-Up Station"},"leisure/fitness_station/stairs":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"stairs"},"addTags":{"leisure":"fitness_station","fitness_station":"stairs","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"stairs","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["exercise","fitness","gym","steps","trim trail"],"name":"Exercise Stairs"},"leisure/garden":{"icon":"garden","fields":["name","access_simple"],"geometry":["point","vertex","area"],"tags":{"leisure":"garden"},"name":"Garden"},"leisure/golf_course":{"icon":"golf","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"terms":["links"],"tags":{"leisure":"golf_course"},"name":"Golf Course"},"leisure/hackerspace":{"icon":"commercial","fields":["name","address","building_area","opening_hours","website"],"geometry":["point","area"],"terms":["makerspace","hackspace","hacklab"],"tags":{"leisure":"hackerspace"},"name":"Hackerspace"},"leisure/horse_riding":{"icon":"horse-riding","fields":["name","access_simple","operator","address","building"],"geometry":["point","area"],"terms":["equestrian","stable"],"tags":{"leisure":"horse_riding"},"name":"Horseback Riding Facility"},"leisure/ice_rink":{"icon":"pitch","fields":["name","seasonal","sport_ice","operator","address","building","opening_hours"],"geometry":["point","area"],"terms":["hockey","skating","curling"],"tags":{"leisure":"ice_rink"},"name":"Ice Rink"},"leisure/marina":{"icon":"harbor","fields":["name","operator","address","capacity","fee","sanitary_dump_station","power_supply","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"terms":["boat"],"tags":{"leisure":"marina"},"name":"Marina"},"leisure/miniature_golf":{"icon":"golf","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"terms":["crazy golf","mini golf","putt-putt"],"tags":{"leisure":"miniature_golf"},"name":"Miniature Golf"},"leisure/nature_reserve":{"icon":"park","geometry":["point","area"],"fields":["name"],"tags":{"leisure":"nature_reserve"},"terms":["protected","wildlife"],"name":"Nature Reserve"},"leisure/park":{"icon":"park","geometry":["point","area"],"fields":["name"],"terms":["esplanade","estate","forest","garden","grass","green","grounds","lawn","lot","meadow","parkland","place","playground","plaza","pleasure garden","recreation area","square","tract","village green","woodland"],"tags":{"leisure":"park"},"name":"Park"},"leisure/picnic_table":{"icon":"picnic-site","geometry":["point"],"tags":{"leisure":"picnic_table"},"terms":["bench"],"name":"Picnic Table"},"leisure/pitch":{"icon":"pitch","fields":["name","sport","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch"},"terms":["field"],"name":"Sport Pitch"},"leisure/pitch/american_football":{"icon":"america-football","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"american_football"},"reference":{"key":"sport","value":"american_football"},"terms":[],"name":"American Football Field"},"leisure/pitch/baseball":{"icon":"baseball","fields":["lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"baseball"},"reference":{"key":"sport","value":"baseball"},"terms":[],"name":"Baseball Diamond"},"leisure/pitch/basketball":{"icon":"basketball","fields":["surface","hoops","lit","access_simple"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"basketball"},"reference":{"key":"sport","value":"basketball"},"terms":[],"name":"Basketball Court"},"leisure/pitch/beachvolleyball":{"icon":"basketball","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"beachvolleyball"},"addTags":{"leisure":"pitch","sport":"beachvolleyball","surface":"sand"},"removeTags":{"leisure":"pitch","sport":"beachvolleyball","surface":"sand"},"reference":{"key":"sport","value":"beachvolleyball"},"terms":["volleyball"],"name":"Beach Volleyball Court"},"leisure/pitch/boules":{"icon":"pitch","fields":["boules","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"boules"},"reference":{"key":"sport","value":"boules"},"terms":["bocce","lyonnaise","pétanque"],"name":"Boules/Bocce Court"},"leisure/pitch/bowls":{"icon":"pitch","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"bowls"},"reference":{"key":"sport","value":"bowls"},"terms":[],"name":"Bowling Green"},"leisure/pitch/cricket":{"icon":"cricket","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"cricket"},"reference":{"key":"sport","value":"cricket"},"terms":[],"name":"Cricket Field"},"leisure/pitch/equestrian":{"icon":"horse-riding","fields":["surface","lit","building"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"equestrian"},"reference":{"key":"sport","value":"equestrian"},"terms":["dressage","equestrian","horse","horseback","riding"],"name":"Riding Arena"},"leisure/pitch/rugby_league":{"icon":"america-football","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"rugby_league"},"reference":{"key":"sport","value":"rugby_league"},"terms":[],"name":"Rugby League Field"},"leisure/pitch/rugby_union":{"icon":"america-football","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"rugby_union"},"reference":{"key":"sport","value":"rugby_union"},"terms":[],"name":"Rugby Union Field"},"leisure/pitch/skateboard":{"icon":"pitch","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"skateboard"},"reference":{"key":"sport","value":"skateboard"},"terms":[],"name":"Skate Park"},"leisure/pitch/soccer":{"icon":"soccer","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"soccer"},"reference":{"key":"sport","value":"soccer"},"terms":["football"],"name":"Soccer Field"},"leisure/pitch/table_tennis":{"icon":"tennis","fields":["lit","access_simple"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"table_tennis"},"reference":{"key":"sport","value":"table_tennis"},"terms":["table tennis","ping pong"],"name":"Ping Pong Table"},"leisure/pitch/tennis":{"icon":"tennis","fields":["surface","lit","access_simple"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"tennis"},"reference":{"key":"sport","value":"tennis"},"terms":[],"name":"Tennis Court"},"leisure/pitch/volleyball":{"icon":"basketball","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"volleyball"},"reference":{"key":"sport","value":"volleyball"},"terms":[],"name":"Volleyball Court"},"leisure/playground":{"icon":"playground","fields":["name","operator","surface","playground/max_age","playground/min_age","access_simple"],"geometry":["point","area"],"terms":["jungle gym","play area"],"tags":{"leisure":"playground"},"name":"Playground"},"leisure/resort":{"icon":"lodging","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"resort"},"name":"Resort"},"leisure/running_track":{"icon":"pitch","fields":["surface","sport_racing_nonmotor","lit","width","lanes"],"geometry":["point","line","area"],"tags":{"leisure":"track","sport":"running"},"terms":["race*","running","sprint","track"],"name":"Racetrack (Running)"},"leisure/sauna":{"fields":["name","operator","address","opening_hours","access_simple","fee"],"geometry":["point","area"],"tags":{"leisure":"sauna"},"name":"Sauna"},"leisure/slipway":{"icon":"poi-beach","geometry":["point","line"],"terms":["boat launch","boat ramp"],"tags":{"leisure":"slipway"},"name":"Slipway"},"leisure/sports_centre":{"icon":"pitch","fields":["name","sport","building","address","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"sports_centre"},"terms":[],"name":"Sports Center / Complex"},"leisure/sports_centre/swimming":{"icon":"swimming","fields":["name","access_simple","operator","address","building"],"geometry":["point","area"],"terms":["dive","water"],"tags":{"leisure":"sports_centre","sport":"swimming"},"reference":{"key":"sport","value":"swimming"},"name":"Swimming Pool Facility"},"leisure/stadium":{"icon":"pitch","fields":["name","sport","address"],"geometry":["point","area"],"tags":{"leisure":"stadium"},"name":"Stadium"},"leisure/swimming_pool":{"icon":"swimming","fields":["name","access_simple","operator","address"],"geometry":["point","area"],"terms":["dive","water"],"tags":{"leisure":"swimming_pool"},"name":"Swimming Pool"},"leisure/track":{"icon":"highway-road","fields":["surface","sport_racing_nonmotor","lit","width","lanes"],"geometry":["point","line","area"],"tags":{"leisure":"track"},"terms":["cycle","dog","greyhound","horse","race*","track"],"name":"Racetrack (Non-Motorsport)"},"leisure/water_park":{"icon":"swimming","fields":["name","operator","address"],"geometry":["point","area"],"terms":["swim","pool","dive"],"tags":{"leisure":"water_park"},"name":"Water Park"},"line":{"fields":["name"],"geometry":["line"],"tags":{},"name":"Line","matchScore":0.1},"man_made":{"icon":"poi-storage-tank","fields":["name","man_made"],"geometry":["point","vertex","line","area"],"tags":{"man_made":"*"},"name":"Man Made"},"man_made/embankment":{"geometry":["line"],"tags":{"man_made":"embankment"},"name":"Embankment","searchable":false},"man_made/adit":{"icon":"triangle","geometry":["point","area"],"fields":["operator","direction"],"terms":["entrance","underground","mine","cave"],"tags":{"man_made":"adit"},"name":"Adit"},"man_made/breakwater":{"geometry":["line","area"],"tags":{"man_made":"breakwater"},"name":"Breakwater"},"man_made/bridge":{"geometry":["area"],"tags":{"man_made":"bridge"},"name":"Bridge"},"man_made/chimney":{"icon":"poi-chimney","geometry":["point","area"],"tags":{"man_made":"chimney"},"name":"Chimney"},"man_made/crane":{"icon":"poi-crane","fields":["operator","height","crane/type"],"geometry":["point","line","vertex","area"],"tags":{"man_made":"crane"},"name":"Crane"},"man_made/cutline":{"geometry":["line"],"tags":{"man_made":"cutline"},"name":"Cut line"},"man_made/flagpole":{"icon":"embassy","geometry":["point"],"tags":{"man_made":"flagpole"},"name":"Flagpole"},"man_made/gasometer":{"icon":"poi-storage-tank","geometry":["point","area"],"terms":["gas holder"],"tags":{"man_made":"gasometer"},"name":"Gasometer"},"man_made/groyne":{"geometry":["line","area"],"tags":{"man_made":"groyne"},"name":"Groyne"},"man_made/lighthouse":{"icon":"lighthouse","fields":["building_area"],"geometry":["point","area"],"tags":{"man_made":"lighthouse"},"name":"Lighthouse"},"man_made/mast":{"icon":"poi-mast","fields":["tower/type","tower/construction","height","communication_multi"],"geometry":["point"],"terms":["antenna","broadcast tower","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","radio mast","radio tower","television tower","transmission mast","transmission tower","tv tower"],"tags":{"man_made":"mast"},"name":"Mast"},"man_made/monitoring_station":{"icon":"poi-mast","geometry":["point","area"],"fields":["monitoring_multi","operator"],"terms":["weather","earthquake","seismology","air","gps"],"tags":{"man_made":"monitoring_station"},"name":"Monitoring Station"},"man_made/observation":{"icon":"poi-tower","geometry":["point","area"],"terms":["lookout tower","fire tower"],"tags":{"man_made":"tower","tower:type":"observation"},"name":"Observation Tower"},"man_made/petroleum_well":{"icon":"poi-storage-tank","geometry":["point"],"terms":["drilling rig","oil derrick","oil drill","oil horse","oil rig","oil pump","petroleum well","pumpjack"],"tags":{"man_made":"petroleum_well"},"name":"Oil Well"},"man_made/pier":{"geometry":["line","area"],"terms":["dock","jetty"],"tags":{"man_made":"pier"},"name":"Pier"},"man_made/pipeline":{"icon":"pipeline-line","fields":["location","operator","substance"],"geometry":["line"],"tags":{"man_made":"pipeline"},"name":"Pipeline"},"man_made/pumping_station":{"icon":"water","geometry":["point","area"],"tags":{"man_made":"pumping_station"},"name":"Pumping Station"},"man_made/silo":{"icon":"poi-silo","fields":["building_area","crop"],"geometry":["point","area"],"terms":["grain","corn","wheat"],"tags":{"man_made":"silo"},"name":"Silo"},"man_made/storage_tank":{"icon":"poi-storage-tank","fields":["building_area","content"],"geometry":["point","area"],"terms":["water","oil","gas","petrol"],"tags":{"man_made":"storage_tank"},"name":"Storage Tank"},"man_made/surveillance_camera":{"icon":"attraction","geometry":["point","vertex"],"fields":["surveillance","surveillance/type","camera/type","camera/mount","camera/direction","surveillance/zone","contact/webcam"],"terms":["anpr","alpr","camera","car plate recognition","cctv","guard","license plate recognition","monitoring","number plate recognition","security","video","webcam"],"tags":{"man_made":"surveillance","surveillance:type":"camera"},"name":"Surveillance Camera"},"man_made/surveillance":{"icon":"attraction","geometry":["point","vertex"],"fields":["surveillance","surveillance/type","surveillance/zone","direction"],"terms":["anpr","alpr","camera","car plate recognition","cctv","guard","license plate recognition","monitoring","number plate recognition","security","video","webcam"],"tags":{"man_made":"surveillance"},"name":"Surveillance"},"man_made/survey_point":{"icon":"monument","fields":["ref"],"geometry":["point","vertex"],"terms":["trig point","triangulation pillar","trigonometrical station"],"tags":{"man_made":"survey_point"},"name":"Survey Point"},"man_made/tower":{"icon":"poi-tower","fields":["tower/type","tower/construction","height"],"geometry":["point","area"],"tags":{"man_made":"tower"},"name":"Tower"},"man_made/wastewater_plant":{"icon":"water","fields":["name","operator","address"],"geometry":["point","area"],"terms":["sewage*","water treatment plant","reclamation plant"],"tags":{"man_made":"wastewater_plant"},"name":"Wastewater Plant"},"man_made/water_tower":{"icon":"water","fields":["operator"],"geometry":["point","area"],"tags":{"man_made":"water_tower"},"name":"Water Tower"},"man_made/water_well":{"icon":"water","fields":["operator"],"geometry":["point","area"],"tags":{"man_made":"water_well"},"name":"Water Well"},"man_made/water_works":{"icon":"water","fields":["name","operator","address"],"geometry":["point","area"],"tags":{"man_made":"water_works"},"name":"Water Works"},"man_made/watermill":{"icon":"buddhism","fields":["building_area"],"geometry":["point","area"],"terms":["water","wheel","mill"],"tags":{"man_made":"watermill"},"name":"Watermill"},"man_made/windmill":{"icon":"poi-windmill","fields":["building_area"],"geometry":["point","area"],"terms":["wind","wheel","mill"],"tags":{"man_made":"windmill"},"name":"Windmill"},"man_made/works":{"icon":"industry","fields":["name","operator","address","building_area","product"],"geometry":["point","area"],"terms":["assembly","build","brewery","car","plant","plastic","processing","manufacture","refinery"],"tags":{"man_made":"works"},"name":"Factory"},"manhole":{"icon":"circle-stroked","fields":["manhole","operator","label","ref"],"geometry":["point","vertex"],"tags":{"manhole":"*"},"terms":["cover","hole","sewer","sewage","telecom"],"name":"Manhole"},"manhole/drain":{"icon":"water","fields":["operator","ref"],"geometry":["point","vertex"],"tags":{"manhole":"drain"},"terms":["cover","drain","hole","rain","sewer","sewage","storm"],"name":"Storm Drain"},"manhole/telecom":{"icon":"circle-stroked","fields":["operator","ref"],"geometry":["point","vertex"],"tags":{"manhole":"telecom"},"terms":["cover","phone","hole","telecom","telephone","bt"],"name":"Telecom Manhole"},"natural":{"icon":"natural","fields":["name","natural"],"geometry":["point","vertex","area"],"tags":{"natural":"*"},"name":"Natural"},"natural/bare_rock":{"geometry":["area"],"tags":{"natural":"bare_rock"},"terms":["rock"],"name":"Bare Rock"},"natural/bay":{"icon":"poi-beach","geometry":["point","area"],"fields":["name"],"tags":{"natural":"bay"},"terms":[],"name":"Bay"},"natural/beach":{"icon":"poi-beach","fields":["surface"],"geometry":["point","area"],"tags":{"natural":"beach"},"terms":["shore"],"name":"Beach"},"natural/cave_entrance":{"icon":"triangle","geometry":["point","area"],"fields":["fee","access_simple","direction"],"tags":{"natural":"cave_entrance"},"terms":["cavern","hollow","grotto","shelter","cavity"],"name":"Cave Entrance"},"natural/cliff":{"icon":"triangle","geometry":["point","vertex","line","area"],"tags":{"natural":"cliff"},"terms":["escarpment"],"name":"Cliff"},"natural/coastline":{"geometry":["line"],"tags":{"natural":"coastline"},"terms":["shore"],"name":"Coastline"},"natural/fell":{"geometry":["area"],"tags":{"natural":"fell"},"terms":[],"name":"Fell"},"natural/glacier":{"geometry":["area"],"tags":{"natural":"glacier"},"terms":[],"name":"Glacier"},"natural/grassland":{"geometry":["area"],"tags":{"natural":"grassland"},"terms":["prairie","savanna"],"name":"Grassland"},"natural/heath":{"geometry":["area"],"tags":{"natural":"heath"},"terms":[],"name":"Heath"},"natural/peak":{"icon":"mountain","fields":["name","elevation"],"geometry":["point","vertex"],"tags":{"natural":"peak"},"terms":["acme","aiguille","alp","climax","crest","crown","hill","mount","mountain","pinnacle","summit","tip","top"],"name":"Peak"},"natural/ridge":{"geometry":["line"],"tags":{"natural":"ridge"},"terms":["crest"],"name":"Ridge"},"natural/saddle":{"icon":"triangle-stroked","fields":["elevation"],"geometry":["point","vertex"],"tags":{"natural":"saddle"},"terms":["pass","mountain pass","top"],"name":"Saddle"},"natural/sand":{"geometry":["area"],"tags":{"natural":"sand"},"terms":["desert"],"name":"Sand"},"natural/scree":{"geometry":["area"],"tags":{"natural":"scree"},"terms":["loose rocks"],"name":"Scree"},"natural/scrub":{"geometry":["area"],"tags":{"natural":"scrub"},"terms":["bush","shrubs"],"name":"Scrub"},"natural/spring":{"icon":"water","fields":["name","intermittent"],"geometry":["point","vertex"],"tags":{"natural":"spring"},"terms":[],"name":"Spring"},"natural/tree_row":{"icon":"park","fields":["leaf_type","leaf_cycle","denotation"],"geometry":["line"],"tags":{"natural":"tree_row"},"terms":[],"name":"Tree row"},"natural/tree":{"icon":"park","fields":["leaf_type_singular","leaf_cycle_singular","denotation"],"geometry":["point","vertex"],"tags":{"natural":"tree"},"terms":[],"name":"Tree"},"natural/volcano":{"icon":"volcano","fields":["name","elevation","volcano/status","volcano/type"],"geometry":["point","vertex"],"tags":{"natural":"volcano"},"terms":["mountain","crater"],"name":"Volcano"},"natural/water":{"icon":"water","fields":["water"],"geometry":["area"],"tags":{"natural":"water"},"name":"Water"},"natural/water/lake":{"icon":"water","fields":["name","intermittent"],"geometry":["area"],"tags":{"natural":"water","water":"lake"},"reference":{"key":"natural","value":"water"},"terms":["lakelet","loch","mere"],"name":"Lake"},"natural/water/pond":{"icon":"water","fields":["name","intermittent"],"geometry":["area"],"tags":{"natural":"water","water":"pond"},"reference":{"key":"natural","value":"water"},"terms":["lakelet","millpond","tarn","pool","mere"],"name":"Pond"},"natural/water/reservoir":{"icon":"water","fields":["name","intermittent"],"geometry":["area"],"tags":{"natural":"water","water":"reservoir"},"reference":{"key":"natural","value":"water"},"name":"Reservoir"},"natural/wetland":{"icon":"wetland","fields":["wetland"],"geometry":["point","area"],"tags":{"natural":"wetland"},"terms":["bog","marsh","reedbed","swamp","tidalflat"],"name":"Wetland"},"natural/wood":{"icon":"park-alt1","fields":["name","leaf_type","leaf_cycle"],"geometry":["point","area"],"tags":{"natural":"wood"},"terms":["tree"],"name":"Wood"},"noexit/yes":{"icon":"barrier","geometry":["vertex"],"terms":["no exit","road end","dead end"],"tags":{"noexit":"yes"},"reference":{"key":"noexit","value":"*"},"name":"No Exit"},"office":{"icon":"suitcase","fields":["name","office","address","building_area","opening_hours","smoking"],"geometry":["point","vertex","area"],"tags":{"office":"*"},"terms":[],"name":"Office"},"office/administrative":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"administrative"},"terms":[],"searchable":false,"name":"Administrative Office"},"office/physician":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"physician"},"searchable":false,"name":"Physician"},"office/travel_agent":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"travel_agent"},"reference":{"key":"shop","value":"travel_agency"},"terms":[],"name":"Travel Agency","searchable":false},"office/accountant":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"accountant"},"terms":[],"name":"Accountant Office"},"office/adoption_agency":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"adoption_agency"},"terms":[],"name":"Adoption Agency"},"office/advertising_agency":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"advertising_agency"},"terms":["ad","ad agency","advert agency","advertising","marketing"],"name":"Advertising Agency"},"office/architect":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"architect"},"terms":[],"name":"Architect Office"},"office/association":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"association"},"terms":["association","non-profit","nonprofit","organization","society"],"name":"Nonprofit Organization Office"},"office/charity":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"charity"},"terms":["charitable organization"],"name":"Charity Office"},"office/company":{"icon":"suitcase","fields":["name","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"tags":{"office":"company"},"terms":[],"name":"Corporate Office"},"office/coworking":{"icon":"suitcase","fields":["name","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["coworking","office"],"tags":{"office":"coworking"},"reference":{"key":"amenity","value":"coworking_space"},"name":"Coworking Space"},"office/educational_institution":{"icon":"school","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"educational_institution"},"terms":[],"name":"Educational Institution"},"office/employment_agency":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"employment_agency"},"terms":["job"],"name":"Employment Agency"},"office/energy_supplier":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"energy_supplier"},"terms":["electricity","energy company","energy utility","gas utility"],"name":"Energy Supplier Office"},"office/estate_agent":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"estate_agent"},"terms":[],"name":"Real Estate Office"},"office/financial":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"financial"},"terms":[],"name":"Financial Office"},"office/forestry":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"forestry"},"terms":["forest","ranger"],"name":"Forestry Office"},"office/foundation":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"foundation"},"terms":[],"name":"Foundation Office"},"office/government":{"icon":"town-hall","fields":["name","government","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"government"},"terms":[],"name":"Government Office"},"office/government/register_office":{"icon":"town-hall","fields":["name","address","building_area","opening_hours","operator"],"geometry":["point","area"],"terms":["clerk","marriage","death","birth","certificate"],"tags":{"office":"government","government":"register_office"},"reference":{"key":"government","value":"register_office"},"name":"Register Office"},"office/government/tax":{"icon":"town-hall","fields":["name","address","building_area","opening_hours","operator"],"geometry":["point","area"],"terms":["fiscal authorities","revenue office","tax office"],"tags":{"office":"government","government":"tax"},"reference":{"key":"government","value":"tax"},"name":"Tax and Revenue Office"},"office/guide":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"guide"},"terms":["dive guide","mountain guide","tour guide"],"name":"Tour Guide Office"},"office/insurance":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"insurance"},"terms":[],"name":"Insurance Office"},"office/it":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"it"},"terms":["computer","information","software","technology"],"name":"Information Technology Office"},"office/lawyer":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"lawyer"},"terms":[],"name":"Law Office"},"office/lawyer/notary":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"lawyer","lawyer":"notary"},"reference":{"key":"office","value":"notary"},"searchable":false,"name":"Notary Office"},"office/moving_company":{"icon":"warehouse","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"moving_company"},"terms":["relocation"],"name":"Moving Company Office"},"office/newspaper":{"icon":"library","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"newspaper"},"terms":[],"name":"Newspaper Office"},"office/ngo":{"icon":"suitcase","fields":["name","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"tags":{"office":"ngo"},"terms":["ngo","non government","non-government","organization","organisation"],"name":"NGO Office"},"office/notary":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"notary"},"terms":["clerk","deeds","estate","signature","wills"],"name":"Notary Office"},"office/political_party":{"icon":"town-hall","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"political_party"},"terms":[],"name":"Political Party"},"office/private_investigator":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"private_investigator"},"terms":["PI","private eye","private detective"],"name":"Private Investigator Office"},"office/quango":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"quango"},"terms":["ngo","non government","non-government","organization","organisation","quasi autonomous","quasi-autonomous"],"name":"Quasi-NGO Office"},"office/research":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"research"},"terms":[],"name":"Research Office"},"office/surveyor":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"surveyor"},"terms":[],"name":"Surveyor Office"},"office/tax_advisor":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"tax_advisor"},"terms":["tax","tax consultant"],"name":"Tax Advisor Office"},"office/telecommunication":{"icon":"telephone","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"telecommunication"},"terms":["communication","internet","phone","voice"],"name":"Telecom Office"},"office/therapist":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"therapist"},"terms":["therapy"],"name":"Therapist Office"},"office/water_utility":{"icon":"suitcase","fields":["name","address","building_area","opening_hours","operator"],"geometry":["point","area"],"tags":{"office":"water_utility"},"terms":["water board","utility"],"name":"Water Utility Office"},"piste":{"icon":"skiing","fields":["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],"geometry":["point","line","area"],"terms":["ski","sled","sleigh","snowboard","nordic","downhill","snowmobile"],"tags":{"piste:type":"*"},"name":"Piste/Ski Trail"},"place/farm":{"icon":"farm","geometry":["point","area"],"fields":["name"],"tags":{"place":"farm"},"name":"Farm","searchable":false},"place/city":{"icon":"city","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"city"},"name":"City"},"place/hamlet":{"icon":"triangle-stroked","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"hamlet"},"name":"Hamlet"},"place/island":{"icon":"mountain","geometry":["point","area"],"fields":["name"],"terms":["archipelago","atoll","bar","cay","isle","islet","key","reef"],"tags":{"place":"island"},"name":"Island"},"place/islet":{"icon":"mountain","geometry":["point","area"],"fields":["name"],"terms":["archipelago","atoll","bar","cay","isle","islet","key","reef"],"tags":{"place":"islet"},"name":"Islet"},"place/isolated_dwelling":{"icon":"home","geometry":["point","area"],"fields":["name"],"tags":{"place":"isolated_dwelling"},"name":"Isolated Dwelling"},"place/locality":{"icon":"triangle-stroked","geometry":["point","area"],"fields":["name"],"tags":{"place":"locality"},"name":"Locality"},"place/neighbourhood":{"icon":"triangle-stroked","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"neighbourhood"},"terms":["neighbourhood"],"name":"Neighborhood"},"place/plot":{"icon":"triangle-stroked","fields":["name"],"geometry":["point","area"],"tags":{"place":"plot"},"terms":["tract","land","lot","parcel"],"name":"Plot"},"place/quarter":{"icon":"triangle-stroked","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"quarter"},"terms":["boro","borough","quarter"],"name":"Sub-Borough / Quarter"},"place/square":{"geometry":["point","area"],"fields":["name"],"tags":{"place":"square"},"name":"Square"},"place/suburb":{"icon":"triangle-stroked","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"suburb"},"terms":["boro","borough","quarter"],"name":"Borough / Suburb"},"place/town":{"icon":"town","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"town"},"name":"Town"},"place/village":{"icon":"village","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"village"},"name":"Village"},"playground/balance_beam":{"icon":"playground","geometry":["point","line"],"tags":{"playground":"balancebeam"},"name":"Play Balance Beam"},"playground/basket_spinner":{"icon":"playground","geometry":["point"],"terms":["basket rotator"],"tags":{"playground":"basketrotator"},"name":"Basket Spinner"},"playground/basket_swing":{"icon":"playground","geometry":["point"],"tags":{"playground":"basketswing"},"name":"Basket Swing"},"playground/climbing_frame":{"icon":"playground","geometry":["point","area"],"tags":{"playground":"climbingframe"},"name":"Climbing Frame"},"playground/cushion":{"icon":"playground","geometry":["point","area"],"tags":{"playground":"cushion"},"name":"Bouncy Cushion"},"playground/horizontal_bar":{"icon":"pitch","fields":["height"],"geometry":["point"],"terms":["high bar"],"tags":{"playground":"horizontal_bar"},"name":"Play Horizontal Bar"},"playground/rocker":{"icon":"playground","geometry":["point"],"tags":{"playground":"springy"},"name":"Spring Rider","terms":["spring rocker","springy rocker"]},"playground/roundabout":{"icon":"stadium","fields":["bench"],"geometry":["point","area"],"tags":{"playground":"roundabout"},"name":"Play Roundabout","terms":["merry-go-round"]},"playground/sandpit":{"icon":"playground","geometry":["point","area"],"tags":{"playground":"sandpit"},"name":"Sandpit"},"playground/seesaw":{"icon":"playground","geometry":["point"],"tags":{"playground":"seesaw"},"name":"Seesaw"},"playground/slide":{"icon":"playground","geometry":["point","line"],"tags":{"playground":"slide"},"name":"Slide"},"playground/structure":{"icon":"pitch","geometry":["point","area"],"tags":{"playground":"structure"},"name":"Play Structure"},"playground/swing":{"icon":"playground","fields":["playground/baby","wheelchair"],"geometry":["point"],"tags":{"playground":"swing"},"name":"Swing"},"playground/zipwire":{"icon":"playground","geometry":["point","line"],"tags":{"playground":"zipwire"},"name":"Zip Wire"},"point":{"fields":["name"],"geometry":["point"],"tags":{},"name":"Point","matchScore":0.1},"power/sub_station":{"icon":"poi-power","fields":["substation","operator","building","ref"],"geometry":["point","area"],"tags":{"power":"sub_station"},"reference":{"key":"power","value":"substation"},"name":"Substation","searchable":false},"power/generator":{"icon":"poi-power","fields":["operator","generator/source","generator/method","generator/type","generator/output/electricity","ref"],"geometry":["point","vertex","area"],"terms":["hydro","solar","turbine","wind"],"tags":{"power":"generator"},"name":"Power Generator"},"power/generator/source_nuclear":{"icon":"poi-nuclear","fields":["operator","generator/source","generator/method","generator/type","generator/output/electricity","ref"],"geometry":["point","vertex","area"],"terms":["fission","generator","nuclear","nuke","reactor"],"tags":{"power":"generator","generator:source":"nuclear","generator:method":"fission"},"reference":{"key":"generator:source","value":"nuclear"},"name":"Nuclear Reactor"},"power/generator/source_wind":{"icon":"poi-wind","fields":["operator","generator/source","generator/method","generator/type","generator/output/electricity","height","ref"],"geometry":["point","vertex","area"],"terms":["generator","turbine","windmill","wind"],"tags":{"power":"generator","generator:source":"wind","generator:method":"wind_turbine"},"reference":{"key":"generator:source","value":"wind"},"name":"Wind Turbine"},"power/line":{"icon":"power-line","fields":["name","operator","voltage","ref"],"geometry":["line"],"tags":{"power":"line"},"name":"Power Line"},"power/minor_line":{"icon":"power-line","fields":["name","operator","voltage","ref"],"geometry":["line"],"tags":{"power":"minor_line"},"name":"Minor Power Line"},"power/plant":{"icon":"industry","fields":["name","operator","address","plant/output/electricity","start_date"],"geometry":["area"],"tags":{"power":"plant"},"addTags":{"power":"plant","landuse":"industrial"},"removeTags":{"power":"plant","landuse":"industrial"},"terms":["coal","gas","generat*","hydro","nuclear","power","station"],"name":"Power Station Grounds"},"power/pole":{"fields":["ref"],"geometry":["vertex"],"tags":{"power":"pole"},"name":"Power Pole"},"power/substation":{"icon":"poi-power","fields":["substation","operator","building","ref"],"geometry":["point","area"],"tags":{"power":"substation"},"name":"Substation"},"power/switch":{"icon":"poi-power","fields":["switch","operator","location","cables","voltage","ref"],"geometry":["point","vertex","area"],"tags":{"power":"switch"},"name":"Power Switch"},"power/tower":{"fields":["ref"],"geometry":["vertex"],"tags":{"power":"tower"},"name":"High-Voltage Tower"},"power/transformer":{"icon":"poi-power","fields":["transformer","operator","location","rating","devices","phases","frequency","voltage/primary","voltage/secondary","voltage/tertiary","windings","windings/configuration","ref"],"geometry":["point","vertex","area"],"tags":{"power":"transformer"},"name":"Transformer"},"public_transport/linear_platform_aerialway":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","aerialway":"yes"},"reference":{"key":"public_transport","value":"platform"},"terms":["aerialway","cable car","platform","public transit","public transportation","transit","transportation"],"name":"Aerialway Stop / Platform"},"public_transport/linear_platform_bus":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","bus":"yes"},"addTags":{"public_transport":"platform","bus":"yes","highway":"bus_stop"},"removeTags":{"public_transport":"platform","bus":"yes","highway":"bus_stop"},"reference":{"key":"public_transport","value":"platform"},"terms":["bus","platform","public transit","public transportation","transit","transportation"],"name":"Bus Stop / Platform"},"public_transport/linear_platform_ferry":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","ferry":"yes"},"reference":{"key":"public_transport","value":"platform"},"terms":["boat","dock","ferry","pier","platform","public transit","public transportation","transit","transportation"],"name":"Ferry Stop / Platform"},"public_transport/linear_platform_light_rail":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","light_rail":"yes"},"addTags":{"public_transport":"platform","light_rail":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","light_rail":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["electric","light rail","platform","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],"name":"Light Rail Stop / Platform"},"public_transport/linear_platform_monorail":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","monorail":"yes"},"addTags":{"public_transport":"platform","monorail":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","monorail":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["monorail","platform","public transit","public transportation","rail","transit","transportation"],"name":"Monorail Stop / Platform"},"public_transport/linear_platform_subway":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","subway":"yes"},"addTags":{"public_transport":"platform","subway":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","subway":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["metro","platform","public transit","public transportation","rail","subway","track","transit","transportation","underground"],"name":"Subway Stop / Platform"},"public_transport/linear_platform_train":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","train":"yes"},"addTags":{"public_transport":"platform","train":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","train":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["platform","public transit","public transportation","rail","track","train","transit","transportation"],"name":"Train Stop / Platform"},"public_transport/linear_platform_tram":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","tram":"yes"},"addTags":{"public_transport":"platform","tram":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","tram":"yes","railway":"platform"},"reference":{"key":"public_transport","value":"platform"},"terms":["electric","light rail","platform","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],"name":"Tram Stop / Platform"},"public_transport/linear_platform_trolleybus":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","trolleybus":"yes"},"addTags":{"public_transport":"platform","trolleybus":"yes","highway":"bus_stop"},"removeTags":{"public_transport":"platform","trolleybus":"yes","highway":"bus_stop"},"reference":{"key":"public_transport","value":"platform"},"terms":["bus","electric","platform","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],"name":"Trolleybus Stop / Platform"},"public_transport/linear_platform":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform"},"terms":["platform","public transit","public transportation","transit","transportation"],"name":"Transit Stop / Platform","matchScore":0.2},"public_transport/platform_aerialway":{"icon":"aerialway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","aerialway":"yes"},"reference":{"key":"public_transport","value":"platform"},"terms":["aerialway","cable car","platform","public transit","public transportation","transit","transportation"],"name":"Aerialway Stop / Platform"},"public_transport/platform_bus":{"icon":"bus","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","bus":"yes"},"addTags":{"public_transport":"platform","bus":"yes","highway":"bus_stop"},"removeTags":{"public_transport":"platform","bus":"yes","highway":"bus_stop"},"reference":{"key":"public_transport","value":"platform"},"terms":["bus","platform","public transit","public transportation","transit","transportation"],"name":"Bus Stop / Platform"},"public_transport/platform_ferry":{"icon":"ferry","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","ferry":"yes"},"reference":{"key":"public_transport","value":"platform"},"terms":["boat","dock","ferry","pier","platform","public transit","public transportation","transit","transportation"],"name":"Ferry Stop / Platform"},"public_transport/platform_light_rail":{"icon":"poi-light-rail","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","light_rail":"yes"},"addTags":{"public_transport":"platform","light_rail":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","light_rail":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["electric","light rail","platform","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],"name":"Light Rail Stop / Platform"},"public_transport/platform_monorail":{"icon":"poi-monorail","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","monorail":"yes"},"addTags":{"public_transport":"platform","monorail":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","monorail":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["monorail","platform","public transit","public transportation","rail","transit","transportation"],"name":"Monorail Stop / Platform"},"public_transport/platform_subway":{"icon":"poi-subway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","subway":"yes"},"addTags":{"public_transport":"platform","subway":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","subway":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["metro","platform","public transit","public transportation","rail","subway","track","transit","transportation","underground"],"name":"Subway Stop / Platform"},"public_transport/platform_train":{"icon":"rail","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","train":"yes"},"addTags":{"public_transport":"platform","train":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","train":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["platform","public transit","public transportation","rail","track","train","transit","transportation"],"name":"Train Stop / Platform"},"public_transport/platform_tram":{"icon":"poi-tram","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","tram":"yes"},"addTags":{"public_transport":"platform","tram":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","tram":"yes","railway":"platform"},"reference":{"key":"public_transport","value":"platform"},"terms":["electric","light rail","platform","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],"name":"Tram Stop / Platform"},"public_transport/platform_trolleybus":{"icon":"poi-trolleybus","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","trolleybus":"yes"},"addTags":{"public_transport":"platform","trolleybus":"yes","highway":"bus_stop"},"removeTags":{"public_transport":"platform","trolleybus":"yes","highway":"bus_stop"},"reference":{"key":"public_transport","value":"platform"},"terms":["bus","electric","platform","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],"name":"Trolleybus Stop / Platform"},"public_transport/platform":{"icon":"bus","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform"},"terms":["platform","public transit","public transportation","transit","transportation"],"name":"Transit Stop / Platform","matchScore":0.2},"public_transport/station_aerialway":{"icon":"aerialway","fields":["name","network","operator","aerialway/access","aerialway/summer/access","elevation","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","aerialway":"yes"},"reference":{"key":"aerialway","value":"station"},"terms":["aerialway","cable car","public transit","public transportation","station","terminal","transit","transportation"],"name":"Aerialway Station"},"public_transport/station_bus":{"icon":"bus","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","bus":"yes"},"addTags":{"public_transport":"station","bus":"yes","amenity":"bus_station"},"removeTags":{"public_transport":"station","bus":"yes","amenity":"bus_station"},"reference":{"key":"amenity","value":"bus_station"},"terms":["bus","public transit","public transportation","station","terminal","transit","transportation"],"name":"Bus Station / Terminal"},"public_transport/station_ferry":{"icon":"ferry","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","ferry":"yes"},"addTags":{"public_transport":"station","ferry":"yes","amenity":"ferry_terminal"},"removeTags":{"public_transport":"station","ferry":"yes","amenity":"ferry_terminal"},"reference":{"key":"amenity","value":"ferry_terminal"},"terms":["boat","dock","ferry","pier","public transit","public transportation","station","terminal","transit","transportation"],"name":"Ferry Station / Terminal"},"public_transport/station_light_rail":{"icon":"poi-light-rail","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","light_rail":"yes"},"addTags":{"public_transport":"station","light_rail":"yes","railway":"station","station":"light_rail"},"removeTags":{"public_transport":"station","light_rail":"yes","railway":"station","station":"light_rail"},"reference":{"key":"station","value":"light_rail"},"terms":["electric","light rail","public transit","public transportation","rail","station","terminal","track","tram","trolley","transit","transportation"],"name":"Light Rail Station"},"public_transport/station_monorail":{"icon":"poi-monorail","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","monorail":"yes"},"addTags":{"public_transport":"station","monorail":"yes","railway":"station"},"removeTags":{"public_transport":"station","monorail":"yes","railway":"station"},"reference":{"key":"railway","value":"station"},"terms":["monorail","public transit","public transportation","rail","station","terminal","transit","transportation"],"name":"Monorail Station"},"public_transport/station_subway":{"icon":"poi-subway","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","subway":"yes"},"addTags":{"public_transport":"station","subway":"yes","railway":"station","station":"subway"},"removeTags":{"public_transport":"station","subway":"yes","railway":"station","station":"subway"},"reference":{"key":"station","value":"subway"},"terms":["metro","public transit","public transportation","rail","station","subway","terminal","track","transit","transportation","underground"],"name":"Subway Station"},"public_transport/station_train_halt":{"icon":"rail","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","train":"yes","railway":"halt"},"reference":{"key":"railway","value":"halt"},"terms":["halt","public transit","public transportation","rail","station","track","train","transit","transportation","whistle stop"],"name":"Train Station (Halt / Request)"},"public_transport/station_train":{"icon":"rail","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","train":"yes"},"addTags":{"public_transport":"station","train":"yes","railway":"station"},"removeTags":{"public_transport":"station","train":"yes","railway":"station"},"reference":{"key":"railway","value":"station"},"terms":["public transit","public transportation","rail","station","terminal","track","train","transit","transportation"],"name":"Train Station"},"public_transport/station_tram":{"icon":"poi-tram","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","tram":"yes"},"reference":{"key":"public_transport","value":"station"},"terms":["electric","light rail","public transit","public transportation","rail","station","streetcar","terminal","track","tram","trolley","transit","transportation"],"name":"Tram Station"},"public_transport/station_trolleybus":{"icon":"poi-trolleybus","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","trolleybus":"yes"},"addTags":{"public_transport":"station","trolleybus":"yes","amenity":"bus_station"},"removeTags":{"public_transport":"station","trolleybus":"yes","amenity":"bus_station"},"reference":{"key":"amenity","value":"bus_station"},"terms":["bus","electric","public transit","public transportation","station","streetcar","terminal","trackless","tram","trolley","transit","transportation"],"name":"Trolleybus Station / Terminal"},"public_transport/station":{"icon":"rail","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station"},"terms":["public transit","public transportation","station","terminal","transit","transportation"],"name":"Transit Station","matchScore":0.2},"public_transport/stop_area":{"icon":"bus","fields":["name","ref","network","operator"],"geometry":["relation"],"tags":{"type":"public_transport","public_transport":"stop_area"},"addTags":{"type":"public_transport","public_transport":"stop_area","public_transport:version":"2"},"removeTags":{"type":"public_transport","public_transport":"stop_area","public_transport:version":"2"},"reference":{"key":"public_transport","value":"stop_area"},"name":"Transit Stop Area"},"public_transport/stop_position_aerialway":{"icon":"aerialway","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","aerialway":"yes"},"reference":{"key":"public_transport","value":"stop_position"},"terms":["aerialway","cable car","public transit","public transportation","transit","transportation"],"name":"Aerialway Stopping Location"},"public_transport/stop_position_bus":{"icon":"bus","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","bus":"yes"},"reference":{"key":"public_transport","value":"stop_position"},"terms":["bus","public transit","public transportation","transit","transportation"],"name":"Bus Stopping Location"},"public_transport/stop_position_ferry":{"icon":"ferry","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","ferry":"yes"},"reference":{"key":"public_transport","value":"stop_position"},"terms":["boat","dock","ferry","pier","public transit","public transportation","transit","transportation"],"name":"Ferry Stopping Location"},"public_transport/stop_position_light_rail":{"icon":"poi-light-rail","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","light_rail":"yes"},"addTags":{"public_transport":"stop_position","light_rail":"yes","railway":"stop"},"removeTags":{"public_transport":"stop_position","light_rail":"yes","railway":"stop"},"reference":{"key":"railway","value":"stop"},"terms":["electric","light rail","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],"name":"Light Rail Stopping Location"},"public_transport/stop_position_monorail":{"icon":"poi-monorail","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","monorail":"yes"},"addTags":{"public_transport":"stop_position","monorail":"yes","railway":"stop"},"removeTags":{"public_transport":"stop_position","monorail":"yes","railway":"stop"},"reference":{"key":"railway","value":"stop"},"terms":["monorail","public transit","public transportation","rail","transit","transportation"],"name":"Monorail Stopping Location"},"public_transport/stop_position_subway":{"icon":"poi-subway","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","subway":"yes"},"addTags":{"public_transport":"stop_position","subway":"yes","railway":"stop"},"removeTags":{"public_transport":"stop_position","subway":"yes","railway":"stop"},"reference":{"key":"railway","value":"stop"},"terms":["metro","public transit","public transportation","rail","subway","track","transit","transportation","underground"],"name":"Subway Stopping Location"},"public_transport/stop_position_train":{"icon":"rail","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","train":"yes"},"addTags":{"public_transport":"stop_position","train":"yes","railway":"stop"},"removeTags":{"public_transport":"stop_position","train":"yes","railway":"stop"},"reference":{"key":"railway","value":"stop"},"terms":["public transit","public transportation","rail","track","train","transit","transportation"],"name":"Train Stopping Location"},"public_transport/stop_position_tram":{"icon":"poi-tram","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","tram":"yes"},"addTags":{"public_transport":"stop_position","tram":"yes","railway":"tram_stop"},"removeTags":{"public_transport":"stop_position","tram":"yes","railway":"tram_stop"},"reference":{"key":"public_transport","value":"stop_position"},"terms":["electric","light rail","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],"name":"Tram Stopping Location"},"public_transport/stop_position_trolleybus":{"icon":"poi-trolleybus","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","trolleybus":"yes"},"reference":{"key":"public_transport","value":"stop_position"},"terms":["bus","electric","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],"name":"Trolleybus Stopping Location"},"public_transport/stop_position":{"icon":"bus","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position"},"terms":["public transit","public transportation","transit","transportation"],"name":"Transit Stopping Location","matchScore":0.2},"railway/halt":{"icon":"rail","geometry":["point","vertex"],"tags":{"railway":"halt"},"terms":["break","interrupt","rest","wait","interruption"],"name":"Train Station (Halt / Request)","searchable":false},"railway/platform":{"icon":"highway-footway","fields":["name","ref_platform","surface","lit","shelter"],"geometry":["line","area"],"tags":{"railway":"platform"},"name":"Train Stop / Platform","searchable":false},"railway/station":{"icon":"rail","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"tags":{"railway":"station"},"terms":["train station","station"],"name":"Train Station","searchable":false},"railway/tram_stop":{"icon":"poi-tram","fields":["name","network","operator"],"geometry":["vertex"],"tags":{"railway":"tram_stop"},"terms":["light rail","streetcar","tram","trolley"],"name":"Tram Stopping Position","searchable":false},"railway/abandoned":{"icon":"railway-abandoned","geometry":["line"],"tags":{"railway":"abandoned"},"fields":["name","structure","service_rail"],"terms":[],"name":"Abandoned Railway"},"railway/buffer_stop":{"icon":"poi-buffer-stop","geometry":["vertex"],"tags":{"railway":"buffer_stop"},"terms":["stop","halt","buffer"],"name":"Buffer Stop"},"railway/crossing":{"icon":"cross","geometry":["vertex"],"tags":{"railway":"crossing"},"terms":["crossing","pedestrian crossing","railroad crossing","level crossing","grade crossing","path through railroad","train crossing"],"name":"Railway Crossing (Path)"},"railway/derail":{"icon":"roadblock","geometry":["vertex"],"tags":{"railway":"derail"},"terms":["derailer"],"name":"Railway Derailer"},"railway/disused":{"icon":"railway-disused","geometry":["line"],"tags":{"railway":"disused"},"fields":["structure","service_rail"],"terms":[],"name":"Disused Railway"},"railway/funicular":{"icon":"railway-rail","geometry":["line"],"terms":["venicular","cliff railway","cable car","cable railway","funicular railway"],"fields":["structure","gauge","service_rail"],"tags":{"railway":"funicular"},"name":"Funicular"},"railway/level_crossing":{"icon":"cross","geometry":["vertex"],"tags":{"railway":"level_crossing"},"terms":["crossing","railroad crossing","level crossing","grade crossing","road through railroad","train crossing"],"name":"Railway Crossing (Road)"},"railway/light_rail":{"icon":"railway-light-rail","geometry":["line"],"tags":{"railway":"light_rail"},"fields":["name","structure","gauge","electrified","service_rail"],"terms":["light rail","streetcar","trolley"],"name":"Light Rail"},"railway/milestone":{"icon":"poi-milestone","geometry":["point","vertex"],"fields":["railway/position"],"tags":{"railway":"milestone"},"terms":["milestone","marker"],"name":"Railway Milestone"},"railway/miniature":{"icon":"railway-rail","geometry":["line"],"tags":{"railway":"miniature"},"fields":["name","structure","gauge","electrified","service_rail"],"terms":["rideable miniature railway","narrow gauge railway","minimum gauge railway"],"name":"Miniature Railway"},"railway/monorail":{"icon":"railway-monorail","geometry":["line"],"tags":{"railway":"monorail"},"fields":["name","structure","electrified","service_rail"],"terms":[],"name":"Monorail"},"railway/narrow_gauge":{"icon":"railway-rail","geometry":["line"],"tags":{"railway":"narrow_gauge"},"fields":["name","structure","gauge","electrified","service_rail"],"terms":["narrow gauge railway","narrow gauge railroad"],"name":"Narrow Gauge Rail"},"railway/rail":{"icon":"railway-rail","geometry":["line"],"tags":{"railway":"rail"},"fields":["name","structure","gauge","electrified","maxspeed","service_rail"],"terms":[],"name":"Rail"},"railway/signal":{"icon":"poi-railway-signals","geometry":["point","vertex"],"fields":["railway/position","railway/signal/direction","ref"],"tags":{"railway":"signal"},"terms":["signal","lights"],"name":"Railway Signal"},"railway/subway_entrance":{"icon":"entrance","geometry":["point","vertex"],"fields":["name"],"tags":{"railway":"subway_entrance"},"terms":["metro","transit"],"name":"Subway Entrance"},"railway/subway":{"icon":"railway-subway","geometry":["line"],"tags":{"railway":"subway"},"fields":["name","structure","gauge","electrified","service_rail"],"terms":["metro","transit"],"name":"Subway"},"railway/switch":{"icon":"poi-junction","geometry":["vertex"],"tags":{"railway":"switch"},"terms":["switch","points"],"name":"Railway Switch"},"railway/train_wash":{"icon":"rail","geometry":["point","vertex","area"],"fields":["operator","building_area"],"tags":{"railway":"wash"},"terms":["wash","clean"],"name":"Train Wash"},"railway/tram":{"icon":"railway-light-rail","geometry":["line"],"tags":{"railway":"tram"},"fields":["name","structure","gauge","electrified","service_rail"],"terms":["light rail","streetcar","tram","trolley"],"name":"Tram"},"relation":{"icon":"relation","fields":["name","relation"],"geometry":["relation"],"tags":{},"name":"Relation"},"route/ferry":{"icon":"ferry-line","geometry":["line"],"fields":["name","operator","duration","access"],"tags":{"route":"ferry"},"name":"Ferry Route"},"shop":{"icon":"shop","fields":["name","shop","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"*"},"terms":[],"name":"Shop"},"shop/fishmonger":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"fishmonger"},"reference":{"key":"shop","value":"seafood"},"name":"Fishmonger","searchable":false},"shop/furnace":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["oven","stove"],"tags":{"shop":"furnace"},"name":"Furnace Store","searchable":false},"shop/vacant":{"icon":"shop","fields":["name","address","building_area"],"geometry":["point","area"],"tags":{"shop":"vacant"},"name":"Vacant Shop","searchable":false},"shop/agrarian":{"icon":"shop","fields":["name","operator","agrarian","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["agricultural inputs","agricultural machines","seeds","pesticides","fertilizer","agricultural tools"],"tags":{"shop":"agrarian"},"name":"Farm Supply Shop"},"shop/alcohol":{"icon":"alcohol-shop","fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"geometry":["point","area"],"terms":["alcohol","beer","booze","wine"],"tags":{"shop":"alcohol"},"name":"Liquor Store"},"shop/anime":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"anime"},"terms":["manga","japan","cosplay","figurine","dakimakura"],"name":"Anime Shop"},"shop/antiques":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"antiques"},"name":"Antiques Shop"},"shop/appliance":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["air conditioner","appliance","dishwasher","dryer","freezer","fridge","grill","kitchen","oven","refrigerator","stove","washer","washing machine"],"tags":{"shop":"appliance"},"name":"Appliance Store"},"shop/art":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["art*","exhibit*","gallery"],"tags":{"shop":"art"},"name":"Art Store"},"shop/baby_goods":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"baby_goods"},"name":"Baby Goods Store"},"shop/bag":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["handbag","purse"],"tags":{"shop":"bag"},"name":"Bag/Luggage Store"},"shop/bakery":{"icon":"bakery","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"bakery"},"name":"Bakery"},"shop/bathroom_furnishing":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"bathroom_furnishing"},"name":"Bathroom Furnishing Store"},"shop/beauty":{"icon":"shop","fields":["name","operator","address","building_area","beauty","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["spa","salon","tanning"],"tags":{"shop":"beauty"},"name":"Beauty Shop"},"shop/beauty/nails":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["manicure","pedicure"],"tags":{"shop":"beauty","beauty":"nails"},"reference":{"key":"shop","value":"beauty"},"name":"Nail Salon"},"shop/beauty/tanning":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"beauty","beauty":"tanning"},"reference":{"key":"leisure","value":"tanning_salon"},"name":"Tanning Salon"},"shop/bed":{"icon":"lodging","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"bed"},"name":"Bedding/Mattress Store"},"shop/beverages":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"beverages"},"name":"Beverage Store"},"shop/bicycle":{"icon":"bicycle","fields":["name","operator","address","building_area","service/bicycle","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["bike","repair"],"tags":{"shop":"bicycle"},"name":"Bicycle Shop"},"shop/bookmaker":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["betting"],"tags":{"shop":"bookmaker"},"name":"Bookmaker"},"shop/books":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"shop":"books"},"name":"Book Store"},"shop/boutique":{"icon":"shop","fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"boutique"},"name":"Boutique"},"shop/butcher":{"icon":"slaughterhouse","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["meat"],"tags":{"shop":"butcher"},"name":"Butcher"},"shop/candles":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"candles"},"name":"Candle Shop"},"shop/car_parts":{"icon":"car","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["auto"],"tags":{"shop":"car_parts"},"name":"Car Parts Store"},"shop/car_repair":{"icon":"car","fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["auto","garage","service"],"tags":{"shop":"car_repair"},"name":"Car Repair Shop"},"shop/car":{"icon":"car","fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["auto"],"tags":{"shop":"car"},"name":"Car Dealership"},"shop/carpet":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["rug"],"tags":{"shop":"carpet"},"name":"Carpet Store"},"shop/charity":{"icon":"shop","fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["thrift","op shop","nonprofit"],"tags":{"shop":"charity"},"name":"Charity Store"},"shop/cheese":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"cheese"},"name":"Cheese Store"},"shop/chemist":{"icon":"grocery","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"chemist"},"terms":["med*","drug*","gift"],"name":"Drugstore"},"shop/chocolate":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"chocolate"},"name":"Chocolate Store"},"shop/clothes":{"icon":"clothing-store","fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"clothes"},"name":"Clothing Store"},"shop/coffee":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"coffee"},"name":"Coffee Store"},"shop/computer":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"computer"},"name":"Computer Store"},"shop/confectionery":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["sweet"],"tags":{"shop":"confectionery"},"name":"Candy Store"},"shop/convenience":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"convenience"},"name":"Convenience Store"},"shop/copyshop":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"copyshop"},"name":"Copy Store"},"shop/cosmetics":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"cosmetics"},"name":"Cosmetics Store"},"shop/craft":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"craft"},"terms":["art*","paint*","frame"],"name":"Arts and Crafts Store"},"shop/curtain":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["drape*","window"],"tags":{"shop":"curtain"},"name":"Curtain Store"},"shop/dairy":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["milk","egg","cheese"],"tags":{"shop":"dairy"},"name":"Dairy Store"},"shop/deli":{"icon":"restaurant","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["lunch","meat","sandwich"],"tags":{"shop":"deli"},"name":"Deli"},"shop/department_store":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"department_store"},"name":"Department Store"},"shop/doityourself":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"doityourself"},"name":"DIY Store"},"shop/dry_cleaning":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"dry_cleaning"},"name":"Dry Cleaner"},"shop/e-cigarette":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"e-cigarette"},"terms":["electronic","vapor"],"name":"E-Cigarette Shop"},"shop/electronics":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["appliance","audio","blueray","camera","computer","dvd","home theater","radio","speaker","tv","video"],"tags":{"shop":"electronics"},"name":"Electronics Store"},"shop/erotic":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["sex","porn"],"tags":{"shop":"erotic"},"name":"Erotic Store"},"shop/fabric":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["sew"],"tags":{"shop":"fabric"},"name":"Fabric Store"},"shop/farm":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["farm shop","farm stand"],"tags":{"shop":"farm"},"name":"Produce Stand"},"shop/fashion":{"icon":"shop","fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"fashion"},"name":"Fashion Store"},"shop/florist":{"icon":"florist","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["flower"],"tags":{"shop":"florist"},"name":"Florist"},"shop/frame":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"frame"},"terms":["art*","paint*","photo*","frame"],"name":"Framing Shop"},"shop/funeral_directors":{"icon":"cemetery","fields":["name","operator","address","building_area","religion","denomination"],"geometry":["point","area"],"terms":["undertaker","memorial home"],"tags":{"shop":"funeral_directors"},"name":"Funeral Home"},"shop/furniture":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["chair","sofa","table"],"tags":{"shop":"furniture"},"name":"Furniture Store"},"shop/garden_centre":{"icon":"garden-center","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["landscape","mulch","shrub","tree"],"tags":{"shop":"garden_centre"},"name":"Garden Center"},"shop/gas":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["cng","lpg","natural gas","propane","refill","tank"],"tags":{"shop":"gas"},"name":"Bottled Gas Shop"},"shop/gift":{"icon":"gift","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["souvenir"],"tags":{"shop":"gift"},"name":"Gift Shop"},"shop/greengrocer":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["fruit","vegetable"],"tags":{"shop":"greengrocer"},"name":"Greengrocer"},"shop/hairdresser":{"icon":"hairdresser","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["barber"],"tags":{"shop":"hairdresser"},"name":"Hairdresser"},"shop/hardware":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"hardware"},"name":"Hardware Store"},"shop/health_food":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["wholefood","vitamins","vegetarian","vegan"],"tags":{"shop":"health_food "},"name":"Health Food Shop"},"shop/hearing_aids":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"hearing_aids"},"name":"Hearing Aids Store"},"shop/herbalist":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"herbalist"},"name":"Herbalist"},"shop/hifi":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["stereo","video"],"tags":{"shop":"hifi"},"name":"Hifi Store"},"shop/houseware":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["home","household"],"tags":{"shop":"houseware"},"name":"Houseware Store"},"shop/interior_decoration":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"interior_decoration"},"name":"Interior Decoration Store"},"shop/jewelry":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["diamond","gem","ring"],"tags":{"shop":"jewelry"},"name":"Jeweler"},"shop/kiosk":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"kiosk"},"name":"Kiosk"},"shop/kitchen":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"kitchen"},"name":"Kitchen Design Store"},"shop/laundry":{"icon":"laundry","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"laundry"},"name":"Laundry"},"shop/leather":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"leather"},"name":"Leather Store"},"shop/locksmith":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["key","lockpick"],"tags":{"shop":"locksmith"},"name":"Locksmith"},"shop/lottery":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"lottery"},"name":"Lottery Shop"},"shop/mall":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["shopping"],"tags":{"shop":"mall"},"name":"Mall"},"shop/massage":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"massage"},"name":"Massage Shop"},"shop/medical_supply":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"medical_supply"},"name":"Medical Supply Store"},"shop/mobile_phone":{"icon":"mobile-phone","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"mobile_phone"},"name":"Mobile Phone Store"},"shop/money_lender":{"icon":"bank","fields":["name","operator","address","building_area","opening_hours","currency_multi"],"geometry":["point","area"],"tags":{"shop":"money_lender"},"name":"Money Lender"},"shop/motorcycle":{"icon":"scooter","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["bike"],"tags":{"shop":"motorcycle"},"name":"Motorcycle Dealership"},"shop/music":{"icon":"music","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["CD","vinyl"],"tags":{"shop":"music"},"name":"Music Store"},"shop/musical_instrument":{"icon":"music","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["guitar"],"tags":{"shop":"musical_instrument"},"name":"Musical Instrument Store"},"shop/newsagent":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"newsagent"},"name":"Newspaper/Magazine Shop"},"shop/nutrition_supplements":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"nutrition_supplements"},"name":"Nutrition Supplements Store"},"shop/optician":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["eye","glasses"],"tags":{"shop":"optician"},"name":"Optician"},"shop/organic":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"supermarket","organic":"only"},"name":"Organic Goods Store"},"shop/outdoor":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["camping","climbing","hiking"],"tags":{"shop":"outdoor"},"name":"Outdoors Store"},"shop/paint":{"icon":"water","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"paint"},"name":"Paint Store"},"shop/pastry":{"icon":"bakery","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"pastry"},"terms":["patisserie","cake shop","cakery"],"name":"Pastry Shop"},"shop/pawnbroker":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"pawnbroker"},"name":"Pawn Shop"},"shop/perfumery":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"perfumery"},"name":"Perfume Store"},"shop/pet":{"icon":"dog-park","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["animal","cat","dog","fish","kitten","puppy","reptile"],"tags":{"shop":"pet"},"name":"Pet Store"},"shop/photo":{"icon":"attraction","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["camera","film"],"tags":{"shop":"photo"},"name":"Photography Store"},"shop/pyrotechnics":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"pyrotechnics"},"name":"Fireworks Store"},"shop/radiotechnics":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"radiotechnics"},"name":"Radio/Electronic Component Store"},"shop/religion":{"icon":"shop","fields":["name","operator","address","building_area","religion","denomination","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"religion"},"name":"Religious Store"},"shop/scuba_diving":{"icon":"swimming","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"scuba_diving"},"name":"Scuba Diving Shop"},"shop/seafood":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["fishmonger"],"tags":{"shop":"seafood"},"name":"Seafood Shop"},"shop/second_hand":{"icon":"shop","fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["secondhand","second hand","resale","thrift","used"],"tags":{"shop":"second_hand"},"name":"Consignment/Thrift Store"},"shop/shoes":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"shoes"},"name":"Shoe Store"},"shop/sports":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"sports"},"name":"Sporting Goods Store"},"shop/stationery":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["card","paper"],"tags":{"shop":"stationery"},"name":"Stationery Store"},"shop/storage_rental":{"icon":"shop","fields":["name","operator","address","building","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"storage_rental"},"name":"Storage Rental"},"shop/supermarket":{"icon":"grocery","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["grocery","store","shop"],"tags":{"shop":"supermarket"},"name":"Supermarket"},"shop/tailor":{"icon":"clothing-store","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["clothes","suit"],"tags":{"shop":"tailor"},"name":"Tailor"},"shop/tattoo":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"tattoo"},"name":"Tattoo Parlor"},"shop/tea":{"icon":"teahouse","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"tea"},"name":"Tea Store"},"shop/ticket":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"ticket"},"name":"Ticket Seller"},"shop/tiles":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"tiles"},"name":"Tile Shop"},"shop/tobacco":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"tobacco"},"name":"Tobacco Shop"},"shop/toys":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"toys"},"name":"Toy Store"},"shop/trade":{"icon":"shop","fields":["name","trade","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"trade"},"name":"Trade Shop"},"shop/travel_agency":{"icon":"suitcase","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"travel_agency"},"name":"Travel Agency"},"shop/tyres":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"tyres"},"name":"Tire Store"},"shop/vacuum_cleaner":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"vacuum_cleaner"},"name":"Vacuum Cleaner Store"},"shop/variety_store":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"variety_store"},"name":"Variety Store"},"shop/video_games":{"icon":"gaming","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"video_games"},"name":"Video Game Store"},"shop/video":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["DVD"],"tags":{"shop":"video"},"name":"Video Store"},"shop/watches":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"watches"},"name":"Watches Shop"},"shop/water_sports":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"water_sports"},"name":"Watersport/Swim Shop"},"shop/weapons":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["ammo","gun","knife","knives"],"tags":{"shop":"weapons"},"name":"Weapon Shop"},"shop/wholesale":{"icon":"warehouse","fields":["name","operator","wholesale","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["warehouse club","cash and carry"],"tags":{"shop":"wholesale"},"name":"Wholesale Store"},"shop/window_blind":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"window_blind"},"name":"Window Blind Store"},"shop/wine":{"icon":"alcohol-shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"wine"},"name":"Wine Shop"},"tourism":{"icon":"attraction","fields":["name","tourism"],"geometry":["point","vertex","area"],"tags":{"tourism":"*"},"name":"Tourism"},"tourism/alpine_hut":{"icon":"lodging","fields":["name","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["climbing hut"],"tags":{"tourism":"alpine_hut"},"name":"Alpine Hut"},"tourism/apartment":{"icon":"lodging","fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"apartment"},"name":"Guest Apartment / Condo"},"tourism/aquarium":{"icon":"aquarium","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["fish","sea","water"],"tags":{"tourism":"aquarium"},"name":"Aquarium"},"tourism/artwork":{"icon":"art-gallery","fields":["name","artwork_type","artist"],"geometry":["point","vertex","area"],"tags":{"tourism":"artwork"},"terms":["mural","sculpture","statue"],"name":"Artwork"},"tourism/attraction":{"icon":"star","fields":["name","operator","address"],"geometry":["point","vertex","area"],"tags":{"tourism":"attraction"},"name":"Tourist Attraction"},"tourism/camp_site":{"icon":"campsite","fields":["name","operator","address","capacity","fee","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"terms":["tent","rv"],"tags":{"tourism":"camp_site"},"name":"Campground"},"tourism/caravan_site":{"icon":"bus","fields":["name","operator","address","capacity","fee","sanitary_dump_station","power_supply","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"terms":["Motor Home","Camper"],"tags":{"tourism":"caravan_site"},"name":"RV Park"},"tourism/chalet":{"icon":"lodging","fields":["name","operator","address","building_area","smoking","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["holiday","holiday cottage","holiday home","vacation","vacation home"],"tags":{"tourism":"chalet"},"name":"Holiday Cottage"},"tourism/gallery":{"icon":"art-gallery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["art*","exhibit*","paint*","photo*","sculpt*"],"tags":{"tourism":"gallery"},"name":"Art Gallery"},"tourism/guest_house":{"icon":"lodging","fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"guest_house"},"terms":["B&B","Bed and Breakfast"],"name":"Guest House"},"tourism/hostel":{"icon":"lodging","fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"hostel"},"name":"Hostel"},"tourism/hotel":{"icon":"lodging","fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"hotel"},"name":"Hotel"},"tourism/information":{"icon":"information","fields":["information","operator","address","building_area"],"geometry":["point","vertex","area"],"tags":{"tourism":"information"},"name":"Information"},"tourism/information/board":{"icon":"information","fields":["name","operator","board_type","direction"],"geometry":["point","vertex"],"tags":{"tourism":"information","information":"board"},"reference":{"key":"information","value":"board"},"name":"Information Board"},"tourism/information/guidepost":{"icon":"information","fields":["name","elevation","operator","ref"],"geometry":["point","vertex"],"terms":["signpost"],"tags":{"tourism":"information","information":"guidepost"},"reference":{"key":"information","value":"guidepost"},"name":"Guidepost"},"tourism/information/map":{"icon":"information","fields":["operator","map_type","map_size","direction"],"geometry":["point","vertex"],"tags":{"tourism":"information","information":"map"},"reference":{"key":"information","value":"map"},"name":"Map"},"tourism/information/office":{"icon":"information","fields":["name","operator","address","building_area"],"geometry":["point","vertex","area"],"tags":{"tourism":"information","information":"office"},"reference":{"key":"information","value":"office"},"name":"Tourist Information Office"},"tourism/motel":{"icon":"lodging","fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"motel"},"name":"Motel"},"tourism/museum":{"icon":"museum","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["art*","exhibit*","gallery","foundation","hall","institution","paint*","photo*","sculpt*"],"tags":{"tourism":"museum"},"name":"Museum"},"tourism/picnic_site":{"icon":"picnic-site","fields":["name","operator","address","smoking"],"geometry":["point","vertex","area"],"terms":["camp"],"tags":{"tourism":"picnic_site"},"name":"Picnic Site"},"tourism/theme_park":{"icon":"amusement-park","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"tags":{"tourism":"theme_park"},"name":"Theme Park"},"tourism/viewpoint":{"icon":"poi-binoculars","geometry":["point","vertex"],"fields":["direction"],"tags":{"tourism":"viewpoint"},"name":"Viewpoint"},"tourism/wilderness_hut":{"icon":"lodging","fields":["name","operator","address","building_area"],"geometry":["point","area"],"terms":["wilderness hut","backcountry hut","bothy"],"tags":{"tourism":"wilderness_hut"},"name":"Wilderness Hut"},"tourism/zoo":{"icon":"zoo","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"terms":["animal"],"tags":{"tourism":"zoo"},"name":"Zoo"},"traffic_calming":{"icon":"poi-warning","fields":["traffic_calming","direction_vertex"],"geometry":["vertex","line"],"tags":{"traffic_calming":"*"},"terms":["bump","hump","slow","speed"],"name":"Traffic Calming"},"traffic_calming/bump":{"icon":"poi-warning","fields":["surface","direction_vertex"],"geometry":["vertex","line"],"terms":["hump","speed","slow"],"tags":{"traffic_calming":"bump"},"name":"Speed Bump"},"traffic_calming/chicane":{"icon":"poi-warning","fields":["direction_vertex"],"geometry":["vertex","line"],"terms":["driveway link","speed","slow"],"tags":{"traffic_calming":"chicane"},"name":"Traffic Chicane"},"traffic_calming/choker":{"icon":"poi-warning","fields":["direction_vertex"],"geometry":["vertex","line"],"terms":["speed","slow"],"tags":{"traffic_calming":"choker"},"name":"Traffic Choker"},"traffic_calming/cushion":{"icon":"poi-warning","fields":["surface","direction_vertex"],"geometry":["vertex","line"],"terms":["bump","hump","speed","slow"],"tags":{"traffic_calming":"cushion"},"name":"Speed Cushion"},"traffic_calming/dip":{"icon":"poi-warning","fields":["surface","direction_vertex"],"geometry":["vertex","line"],"terms":["speed","slow"],"tags":{"traffic_calming":"dip"},"name":"Dip"},"traffic_calming/hump":{"icon":"poi-warning","fields":["surface","direction_vertex"],"geometry":["vertex","line"],"terms":["bump","speed","slow"],"tags":{"traffic_calming":"hump"},"name":"Speed Hump"},"traffic_calming/island":{"icon":"poi-warning","geometry":["vertex"],"terms":["circle","roundabout","slow"],"tags":{"traffic_calming":"island"},"name":"Traffic Island"},"traffic_calming/rumble_strip":{"icon":"poi-warning","fields":["direction_vertex"],"geometry":["vertex","line"],"terms":["audible lines","sleeper lines","growlers"],"tags":{"traffic_calming":"rumble_strip"},"name":"Rumble Strip"},"traffic_calming/table":{"icon":"poi-warning","fields":["surface"],"geometry":["vertex"],"tags":{"traffic_calming":"table"},"terms":["flat top","hump","speed","slow"],"name":"Speed Table"},"type/multipolygon":{"icon":"multipolygon","geometry":["area","relation"],"tags":{"type":"multipolygon"},"removeTags":{},"name":"Multipolygon","searchable":false,"matchScore":0.1},"type/boundary":{"icon":"boundary","fields":["name","boundary"],"geometry":["relation"],"tags":{"type":"boundary"},"name":"Boundary"},"type/boundary/administrative":{"icon":"boundary","fields":["name","admin_level"],"geometry":["relation"],"tags":{"type":"boundary","boundary":"administrative"},"reference":{"key":"boundary","value":"administrative"},"name":"Administrative Boundary"},"type/restriction":{"icon":"restriction","fields":["name","restriction","except"],"geometry":["relation"],"tags":{"type":"restriction"},"name":"Restriction"},"type/restriction/no_left_turn":{"icon":"restriction-no-left-turn","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"no_left_turn"},"name":"No Left Turn"},"type/restriction/no_right_turn":{"icon":"restriction-no-right-turn","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"no_right_turn"},"name":"No Right Turn"},"type/restriction/no_straight_on":{"icon":"restriction-no-straight-on","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"no_straight_on"},"name":"No Straight On"},"type/restriction/no_u_turn":{"icon":"restriction-no-u-turn","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"no_u_turn"},"name":"No U-turn"},"type/restriction/only_left_turn":{"icon":"restriction-only-left-turn","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"only_left_turn"},"name":"Left Turn Only"},"type/restriction/only_right_turn":{"icon":"restriction-only-right-turn","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"only_right_turn"},"name":"Right Turn Only"},"type/restriction/only_straight_on":{"icon":"restriction-only-straight-on","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"only_straight_on"},"name":"No Turns"},"type/route_master":{"icon":"route-master","fields":["name","route_master","ref","operator","network"],"geometry":["relation"],"tags":{"type":"route_master"},"name":"Route Master"},"type/route":{"icon":"route","fields":["name","route","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route"},"name":"Route"},"type/route/bicycle":{"icon":"route-bicycle","fields":["name","ref_route","network_bicycle","cycle_network"],"geometry":["relation"],"tags":{"type":"route","route":"bicycle"},"name":"Cycle Route"},"type/route/bus":{"icon":"route-bus","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"bus"},"name":"Bus Route"},"type/route/detour":{"icon":"route-detour","fields":["name","ref_route"],"geometry":["relation"],"tags":{"type":"route","route":"detour"},"name":"Detour Route"},"type/route/ferry":{"icon":"route-ferry","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"ferry"},"name":"Ferry Route"},"type/route/foot":{"icon":"route-foot","fields":["name","ref_route","operator","network_foot"],"geometry":["relation"],"tags":{"type":"route","route":"foot"},"name":"Foot Route"},"type/route/hiking":{"icon":"route-foot","fields":["name","ref_route","operator","network_foot"],"geometry":["relation"],"tags":{"type":"route","route":"hiking"},"name":"Hiking Route"},"type/route/horse":{"icon":"route-horse","fields":["name","ref_route","operator","network_horse"],"geometry":["relation"],"tags":{"type":"route","route":"horse"},"name":"Riding Route"},"type/route/light_rail":{"icon":"route-light-rail","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"light_rail"},"name":"Light Rail Route"},"type/route/pipeline":{"icon":"route-pipeline","fields":["name","ref_route","operator"],"geometry":["relation"],"tags":{"type":"route","route":"pipeline"},"name":"Pipeline Route"},"type/route/piste":{"icon":"route-piste","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"piste"},"name":"Piste/Ski Route"},"type/route/power":{"icon":"route-power","fields":["name","ref_route","operator"],"geometry":["relation"],"tags":{"type":"route","route":"power"},"name":"Power Route"},"type/route/road":{"icon":"route-road","fields":["name","ref_route","network_road"],"geometry":["relation"],"tags":{"type":"route","route":"road"},"name":"Road Route"},"type/route/subway":{"icon":"route-subway","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"subway"},"name":"Subway Route"},"type/route/train":{"icon":"route-train","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"train"},"name":"Train Route"},"type/route/tram":{"icon":"route-tram","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"tram"},"name":"Tram Route"},"type/site":{"icon":"relation","fields":["name","site"],"geometry":["relation"],"tags":{"type":"site"},"name":"Site"},"type/waterway":{"icon":"route-water","fields":["name","waterway","ref"],"geometry":["relation"],"tags":{"type":"waterway"},"name":"Waterway"},"vertex":{"fields":["name"],"geometry":["vertex"],"tags":{},"name":"Other","matchScore":0.1},"waterway/boatyard":{"icon":"harbor","fields":["name","operator"],"geometry":["area","vertex","point"],"tags":{"waterway":"boatyard"},"name":"Boatyard"},"waterway/canal":{"icon":"waterway-canal","fields":["name","width","intermittent"],"geometry":["line"],"tags":{"waterway":"canal"},"name":"Canal"},"waterway/dam":{"icon":"dam","geometry":["point","vertex","line","area"],"fields":["name"],"tags":{"waterway":"dam"},"name":"Dam"},"waterway/ditch":{"icon":"waterway-ditch","fields":["structure_waterway","intermittent"],"geometry":["line"],"tags":{"waterway":"ditch"},"name":"Ditch"},"waterway/dock":{"icon":"harbor","fields":["name","dock","operator"],"geometry":["area","vertex","point"],"terms":["boat","ship","vessel","marine"],"tags":{"waterway":"dock"},"name":"Wet Dock / Dry Dock"},"waterway/drain":{"icon":"waterway-ditch","fields":["structure_waterway","intermittent"],"geometry":["line"],"tags":{"waterway":"drain"},"name":"Drain"},"waterway/fuel":{"icon":"fuel","fields":["name","operator","address","opening_hours","fuel_multi"],"geometry":["point","area"],"terms":["petrol","gas","diesel","boat"],"tags":{"waterway":"fuel"},"name":"Marine Fuel Station"},"waterway/river":{"icon":"waterway-river","fields":["name","structure_waterway","width","intermittent"],"geometry":["line"],"terms":["beck","branch","brook","course","creek","estuary","rill","rivulet","run","runnel","stream","tributary","watercourse"],"tags":{"waterway":"river"},"name":"River"},"waterway/riverbank":{"icon":"water","geometry":["area"],"tags":{"waterway":"riverbank"},"name":"Riverbank"},"waterway/sanitary_dump_station":{"icon":"poi-storage-tank","fields":["name","operator","access_simple","fee","water_point"],"geometry":["point","vertex","area"],"terms":["Boat","Watercraft","Sanitary","Dump Station","Pumpout","Pump out","Elsan","CDP","CTDP","Chemical Toilet"],"tags":{"waterway":"sanitary_dump_station"},"name":"Marine Toilet Disposal"},"waterway/stream_intermittent":{"icon":"waterway-stream","fields":["name","structure_waterway","width","intermittent"],"geometry":["line"],"terms":["arroyo","beck","branch","brook","burn","course","creek","drift","flood","flow","gully","run","runnel","rush","spate","spritz","tributary","wadi","wash","watercourse"],"tags":{"waterway":"stream","intermittent":"yes"},"reference":{"key":"waterway","value":"stream"},"name":"Intermittent Stream"},"waterway/stream":{"icon":"waterway-stream","fields":["name","structure_waterway","width","intermittent"],"geometry":["line"],"terms":["beck","branch","brook","burn","course","creek","current","drift","flood","flow","freshet","race","rill","rindle","rivulet","run","runnel","rush","spate","spritz","surge","tide","torrent","tributary","watercourse"],"tags":{"waterway":"stream"},"name":"Stream"},"waterway/water_point":{"icon":"drinking-water","geometry":["area","vertex","point"],"tags":{"waterway":"water_point"},"name":"Marine Drinking Water"},"waterway/waterfall":{"icon":"water","fields":["name","height","width","intermittent"],"geometry":["vertex"],"terms":["fall"],"tags":{"waterway":"waterfall"},"name":"Waterfall"},"waterway/weir":{"icon":"dam","geometry":["vertex","line"],"tags":{"waterway":"weir"},"name":"Weir"},"amenity/arts_centre/Świetlica wiejska":{"tags":{"name":"Świetlica wiejska","amenity":"arts_centre"},"name":"Świetlica wiejska","icon":"theatre","geometry":["point","area"],"fields":["name","address","building_area","opening_hours"],"suggestion":true},"amenity/arts_centre/Дом культуры":{"tags":{"name":"Дом культуры","amenity":"arts_centre"},"name":"Дом культуры","icon":"theatre","geometry":["point","area"],"fields":["name","address","building_area","opening_hours"],"suggestion":true},"amenity/bank/ABANCA":{"tags":{"name":"ABANCA","amenity":"bank"},"name":"ABANCA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ABN AMRO":{"tags":{"name":"ABN AMRO","amenity":"bank"},"name":"ABN AMRO","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ABSA":{"tags":{"name":"ABSA","amenity":"bank"},"name":"ABSA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/AIB":{"tags":{"name":"AIB","amenity":"bank"},"name":"AIB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ANZ":{"tags":{"name":"ANZ","amenity":"bank"},"name":"ANZ","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ASB Bank":{"tags":{"name":"ASB Bank","amenity":"bank"},"name":"ASB Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ATB Financial":{"tags":{"name":"ATB Financial","amenity":"bank"},"name":"ATB Financial","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/AXA":{"tags":{"name":"AXA","amenity":"bank"},"name":"AXA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Agribank":{"tags":{"name":"Agribank","amenity":"bank"},"name":"Agribank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Akbank":{"tags":{"name":"Akbank","amenity":"bank"},"name":"Akbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Alior Bank":{"tags":{"name":"Alior Bank","amenity":"bank"},"name":"Alior Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Allahabad Bank":{"tags":{"name":"Allahabad Bank","amenity":"bank"},"name":"Allahabad Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Allied Bank":{"tags":{"name":"Allied Bank","amenity":"bank"},"name":"Allied Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Alpha Bank":{"tags":{"name":"Alpha Bank","amenity":"bank"},"name":"Alpha Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Andhra Bank":{"tags":{"name":"Andhra Bank","amenity":"bank"},"name":"Andhra Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Antonveneta":{"tags":{"name":"Antonveneta","amenity":"bank"},"name":"Antonveneta","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Argenta":{"tags":{"name":"Argenta","amenity":"bank"},"name":"Argenta","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Asia United Bank":{"tags":{"name":"Asia United Bank","amenity":"bank"},"name":"Asia United Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Askari Bank":{"tags":{"name":"Askari Bank","amenity":"bank"},"name":"Askari Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Associated Bank":{"tags":{"name":"Associated Bank","amenity":"bank"},"name":"Associated Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Axis Bank":{"tags":{"name":"Axis Bank","amenity":"bank"},"name":"Axis Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BAC":{"tags":{"name":"BAC","amenity":"bank"},"name":"BAC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BAWAG PSK":{"tags":{"name":"BAWAG PSK","amenity":"bank"},"name":"BAWAG PSK","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BB&T":{"tags":{"name":"BB&T","amenity":"bank"},"name":"BB&T","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBBank":{"tags":{"name":"BBBank","amenity":"bank"},"name":"BBBank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBK":{"tags":{"name":"BBK","amenity":"bank"},"name":"BBK","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBVA":{"tags":{"name":"BBVA","amenity":"bank"},"name":"BBVA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBVA Bancomer":{"tags":{"name":"BBVA Bancomer","amenity":"bank"},"name":"BBVA Bancomer","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBVA Compass":{"tags":{"name":"BBVA Compass","amenity":"bank"},"name":"BBVA Compass","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBVA Continental":{"tags":{"name":"BBVA Continental","amenity":"bank"},"name":"BBVA Continental","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBVA Francés":{"tags":{"name":"BBVA Francés","amenity":"bank"},"name":"BBVA Francés","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BCA":{"tags":{"name":"BCA","amenity":"bank"},"name":"BCA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BCI":{"tags":{"name":"BCI","amenity":"bank"},"name":"BCI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BCP":{"tags":{"name":"BCP","amenity":"bank"},"name":"BCP","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BCR":{"tags":{"name":"BCR","amenity":"bank"},"name":"BCR","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BDO":{"tags":{"name":"BDO","amenity":"bank"},"name":"BDO","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BGŻ BNP Paribas":{"tags":{"name":"BGŻ BNP Paribas","amenity":"bank"},"name":"BGŻ BNP Paribas","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BMCE":{"tags":{"name":"BMCE","amenity":"bank"},"name":"BMCE","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BMN":{"tags":{"name":"BMN","amenity":"bank"},"name":"BMN","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BMO":{"tags":{"name":"BMO","amenity":"bank"},"name":"BMO","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BMO Harris Bank":{"tags":{"name":"BMO Harris Bank","amenity":"bank"},"name":"BMO Harris Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNA":{"tags":{"name":"BNA","amenity":"bank"},"name":"BNA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNI":{"tags":{"name":"BNI","amenity":"bank"},"name":"BNI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNL":{"tags":{"name":"BNL","amenity":"bank"},"name":"BNL","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNP Paribas":{"tags":{"name":"BNP Paribas","amenity":"bank"},"name":"BNP Paribas","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNP Paribas Fortis":{"tags":{"name":"BNP Paribas Fortis","amenity":"bank"},"name":"BNP Paribas Fortis","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BOC":{"tags":{"name":"BOC","amenity":"bank"},"name":"BOC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BPH":{"tags":{"name":"BPH","amenity":"bank"},"name":"BPH","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BPI":{"tags":{"name":"BPI","amenity":"bank"},"name":"BPI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BPI Family Savings Bank":{"tags":{"name":"BPI Family Savings Bank","amenity":"bank"},"name":"BPI Family Savings Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BRD":{"tags":{"name":"BRD","amenity":"bank"},"name":"BRD","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BRED":{"tags":{"name":"BRED","amenity":"bank"},"name":"BRED","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BRI":{"tags":{"name":"BRI","amenity":"bank"},"name":"BRI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BW-Bank":{"tags":{"name":"BW-Bank","amenity":"bank"},"name":"BW-Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BZ WBK":{"tags":{"name":"BZ WBK","amenity":"bank"},"name":"BZ WBK","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banamex":{"tags":{"name":"Banamex","amenity":"bank"},"name":"Banamex","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banc Sabadell":{"tags":{"name":"Banc Sabadell","amenity":"bank"},"name":"Banc Sabadell","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Intesa":{"tags":{"name":"Banca Intesa","amenity":"bank"},"name":"Banca Intesa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca March":{"tags":{"name":"Banca March","amenity":"bank"},"name":"Banca March","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Popolare di Milano":{"tags":{"name":"Banca Popolare di Milano","amenity":"bank"},"name":"Banca Popolare di Milano","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Popolare di Novara":{"tags":{"name":"Banca Popolare di Novara","amenity":"bank"},"name":"Banca Popolare di Novara","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Popolare di Sondrio":{"tags":{"name":"Banca Popolare di Sondrio","amenity":"bank"},"name":"Banca Popolare di Sondrio","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Popolare di Verona":{"tags":{"name":"Banca Popolare di Verona","amenity":"bank"},"name":"Banca Popolare di Verona","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Popolare di Vicenza":{"tags":{"name":"Banca Popolare di Vicenza","amenity":"bank"},"name":"Banca Popolare di Vicenza","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Românească":{"tags":{"name":"Banca Românească","amenity":"bank"},"name":"Banca Românească","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Sella":{"tags":{"name":"Banca Sella","amenity":"bank"},"name":"Banca Sella","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Transilvania":{"tags":{"name":"Banca Transilvania","amenity":"bank"},"name":"Banca Transilvania","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Agrario":{"tags":{"name":"Banco Agrario","amenity":"bank"},"name":"Banco Agrario","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Azteca":{"tags":{"name":"Banco Azteca","amenity":"bank"},"name":"Banco Azteca","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco BCI":{"tags":{"name":"Banco BCI","amenity":"bank"},"name":"Banco BCI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Bradesco":{"tags":{"name":"Banco Bradesco","amenity":"bank"},"name":"Banco Bradesco","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Continental":{"tags":{"name":"Banco Continental","amenity":"bank"},"name":"Banco Continental","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Estado":{"tags":{"name":"Banco Estado","amenity":"bank"},"name":"Banco Estado","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Fassil":{"tags":{"name":"Banco Fassil","amenity":"bank"},"name":"Banco Fassil","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco G&T Continental":{"tags":{"name":"Banco G&T Continental","amenity":"bank"},"name":"Banco G&T Continental","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco General":{"tags":{"name":"Banco General","amenity":"bank"},"name":"Banco General","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Industrial":{"tags":{"name":"Banco Industrial","amenity":"bank"},"name":"Banco Industrial","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Internacional":{"tags":{"name":"Banco Internacional","amenity":"bank"},"name":"Banco Internacional","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Itaú":{"tags":{"name":"Banco Itaú","amenity":"bank"},"name":"Banco Itaú","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Nacional":{"tags":{"name":"Banco Nacional","amenity":"bank"},"name":"Banco Nacional","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Nación":{"tags":{"name":"Banco Nación","amenity":"bank"},"name":"Banco Nación","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Pastor":{"tags":{"name":"Banco Pastor","amenity":"bank"},"name":"Banco Pastor","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Pichincha":{"tags":{"name":"Banco Pichincha","amenity":"bank"},"name":"Banco Pichincha","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Popular":{"tags":{"name":"Banco Popular","amenity":"bank"},"name":"Banco Popular","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Provincia":{"tags":{"name":"Banco Provincia","amenity":"bank"},"name":"Banco Provincia","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Sabadell":{"tags":{"name":"Banco Sabadell","amenity":"bank"},"name":"Banco Sabadell","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Santander":{"tags":{"name":"Banco Santander","amenity":"bank"},"name":"Banco Santander","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Sol":{"tags":{"name":"Banco Sol","amenity":"bank"},"name":"Banco Sol","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Bogotá":{"tags":{"name":"Banco de Bogotá","amenity":"bank"},"name":"Banco de Bogotá","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Chile":{"tags":{"name":"Banco de Chile","amenity":"bank"},"name":"Banco de Chile","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Costa Rica":{"tags":{"name":"Banco de Costa Rica","amenity":"bank"},"name":"Banco de Costa Rica","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Desarrollo Banrural":{"tags":{"name":"Banco de Desarrollo Banrural","amenity":"bank"},"name":"Banco de Desarrollo Banrural","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Occidente":{"tags":{"name":"Banco de Occidente","amenity":"bank"},"name":"Banco de Occidente","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Venezuela":{"tags":{"name":"Banco de Venezuela","amenity":"bank"},"name":"Banco de Venezuela","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de la Nación":{"tags":{"name":"Banco de la Nación","amenity":"bank"},"name":"Banco de la Nación","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de la Nación Argentina":{"tags":{"name":"Banco de la Nación Argentina","amenity":"bank"},"name":"Banco de la Nación Argentina","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco di Napoli":{"tags":{"name":"Banco di Napoli","amenity":"bank"},"name":"Banco di Napoli","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco di Sardegna":{"tags":{"name":"Banco di Sardegna","amenity":"bank"},"name":"Banco di Sardegna","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco do Brasil":{"tags":{"name":"Banco do Brasil","amenity":"bank"},"name":"Banco do Brasil","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco do Nordeste":{"tags":{"name":"Banco do Nordeste","amenity":"bank"},"name":"Banco do Nordeste","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BancoEstado":{"tags":{"name":"BancoEstado","amenity":"bank"},"name":"BancoEstado","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancolombia":{"tags":{"name":"Bancolombia","amenity":"bank"},"name":"Bancolombia","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancomer":{"tags":{"name":"Bancomer","amenity":"bank"},"name":"Bancomer","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancpost":{"tags":{"name":"Bancpost","amenity":"bank"},"name":"Bancpost","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banesco":{"tags":{"name":"Banesco","amenity":"bank"},"name":"Banesco","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bangkok Bank":{"tags":{"name":"Bangkok Bank","amenity":"bank"},"name":"Bangkok Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Al Habib":{"tags":{"name":"Bank Al Habib","amenity":"bank"},"name":"Bank Al Habib","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Alfalah":{"tags":{"name":"Bank Alfalah","amenity":"bank"},"name":"Bank Alfalah","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Austria":{"tags":{"name":"Bank Austria","amenity":"bank"},"name":"Bank Austria","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank BCA":{"tags":{"name":"Bank BCA","amenity":"bank"},"name":"Bank BCA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank BNI":{"tags":{"name":"Bank BNI","amenity":"bank"},"name":"Bank BNI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank BPH":{"tags":{"name":"Bank BPH","amenity":"bank"},"name":"Bank BPH","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank BRI":{"tags":{"name":"Bank BRI","amenity":"bank"},"name":"Bank BRI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Danamon":{"tags":{"name":"Bank Danamon","amenity":"bank"},"name":"Bank Danamon","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Mandiri":{"tags":{"name":"Bank Mandiri","amenity":"bank"},"name":"Bank Mandiri","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Mega":{"tags":{"name":"Bank Mega","amenity":"bank"},"name":"Bank Mega","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Spółdzielczy":{"tags":{"name":"Bank Spółdzielczy","amenity":"bank"},"name":"Bank Spółdzielczy","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Zachodni WBK":{"tags":{"name":"Bank Zachodni WBK","amenity":"bank"},"name":"Bank Zachodni WBK","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Africa":{"tags":{"name":"Bank of Africa","amenity":"bank"},"name":"Bank of Africa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of America":{"tags":{"name":"Bank of America","amenity":"bank"},"name":"Bank of America","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Baroda":{"tags":{"name":"Bank of Baroda","amenity":"bank"},"name":"Bank of Baroda","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Ceylon":{"tags":{"name":"Bank of Ceylon","amenity":"bank"},"name":"Bank of Ceylon","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of China":{"tags":{"name":"Bank of China","amenity":"bank"},"name":"Bank of China","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Commerce":{"tags":{"name":"Bank of Commerce","amenity":"bank"},"name":"Bank of Commerce","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of India":{"tags":{"name":"Bank of India","amenity":"bank"},"name":"Bank of India","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Ireland":{"tags":{"name":"Bank of Ireland","amenity":"bank"},"name":"Bank of Ireland","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Montreal":{"tags":{"name":"Bank of Montreal","amenity":"bank"},"name":"Bank of Montreal","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of New Zealand":{"tags":{"name":"Bank of New Zealand","amenity":"bank"},"name":"Bank of New Zealand","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Scotland":{"tags":{"name":"Bank of Scotland","amenity":"bank"},"name":"Bank of Scotland","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of the West":{"tags":{"name":"Bank of the West","amenity":"bank"},"name":"Bank of the West","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bankia":{"tags":{"name":"Bankia","amenity":"bank"},"name":"Bankia","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bankinter":{"tags":{"name":"Bankinter","amenity":"bank"},"name":"Bankinter","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banner Bank":{"tags":{"name":"Banner Bank","amenity":"bank"},"name":"Banner Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banorte":{"tags":{"name":"Banorte","amenity":"bank"},"name":"Banorte","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banque Atlantique":{"tags":{"name":"Banque Atlantique","amenity":"bank"},"name":"Banque Atlantique","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banque Nationale":{"tags":{"name":"Banque Nationale","amenity":"bank"},"name":"Banque Nationale","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banque Populaire":{"tags":{"name":"Banque Populaire","amenity":"bank"},"name":"Banque Populaire","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banrisul":{"tags":{"name":"Banrisul","amenity":"bank"},"name":"Banrisul","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banrural":{"tags":{"name":"Banrural","amenity":"bank"},"name":"Banrural","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Barclays":{"tags":{"name":"Barclays","amenity":"bank"},"name":"Barclays","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bcc":{"tags":{"name":"Bcc","amenity":"bank"},"name":"Bcc","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Belfius":{"tags":{"name":"Belfius","amenity":"bank"},"name":"Belfius","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bendigo Bank":{"tags":{"name":"Bendigo Bank","amenity":"bank"},"name":"Bendigo Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Berliner Volksbank":{"tags":{"name":"Berliner Volksbank","amenity":"bank"},"name":"Berliner Volksbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bicentenario":{"tags":{"name":"Bicentenario","amenity":"bank"},"name":"Bicentenario","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bradesco":{"tags":{"name":"Bradesco","amenity":"bank"},"name":"Bradesco","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Budapest Bank":{"tags":{"name":"Budapest Bank","amenity":"bank"},"name":"Budapest Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CBAO":{"tags":{"name":"CBAO","amenity":"bank"},"name":"CBAO","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CEC Bank":{"tags":{"name":"CEC Bank","amenity":"bank"},"name":"CEC Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CGD":{"tags":{"name":"CGD","amenity":"bank"},"name":"CGD","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CIB Bank":{"tags":{"name":"CIB Bank","amenity":"bank"},"name":"CIB Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CIBC":{"tags":{"name":"CIBC","amenity":"bank"},"name":"CIBC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CIC":{"tags":{"name":"CIC","amenity":"bank"},"name":"CIC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CIMB Bank":{"tags":{"name":"CIMB Bank","amenity":"bank"},"name":"CIMB Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CNEP":{"tags":{"name":"CNEP","amenity":"bank"},"name":"CNEP","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caisse Desjardins":{"tags":{"name":"Caisse Desjardins","amenity":"bank"},"name":"Caisse Desjardins","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caisse d'Épargne":{"tags":{"name":"Caisse d'Épargne","amenity":"bank"},"name":"Caisse d'Épargne","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caixa":{"tags":{"name":"Caixa","amenity":"bank"},"name":"Caixa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caixa Econômica Federal":{"tags":{"name":"Caixa Econômica Federal","amenity":"bank"},"name":"Caixa Econômica Federal","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caixa Geral de Depósitos":{"tags":{"name":"Caixa Geral de Depósitos","amenity":"bank"},"name":"Caixa Geral de Depósitos","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CaixaBank":{"tags":{"name":"CaixaBank","amenity":"bank"},"name":"CaixaBank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Círculo":{"tags":{"name":"Caja Círculo","amenity":"bank"},"name":"Caja Círculo","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Duero":{"tags":{"name":"Caja Duero","amenity":"bank"},"name":"Caja Duero","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja España":{"tags":{"name":"Caja España","amenity":"bank"},"name":"Caja España","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Rural":{"tags":{"name":"Caja Rural","amenity":"bank"},"name":"Caja Rural","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Rural de Jaén":{"tags":{"name":"Caja Rural de Jaén","amenity":"bank"},"name":"Caja Rural de Jaén","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CajaSur":{"tags":{"name":"CajaSur","amenity":"bank"},"name":"CajaSur","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cajamar":{"tags":{"name":"Cajamar","amenity":"bank"},"name":"Cajamar","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cajero Automatico Bancared":{"tags":{"name":"Cajero Automatico Bancared","amenity":"bank"},"name":"Cajero Automatico Bancared","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Canara Bank":{"tags":{"name":"Canara Bank","amenity":"bank"},"name":"Canara Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Capital One":{"tags":{"name":"Capital One","amenity":"bank"},"name":"Capital One","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Carige":{"tags":{"name":"Carige","amenity":"bank"},"name":"Carige","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cariparma":{"tags":{"name":"Cariparma","amenity":"bank"},"name":"Cariparma","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cassa di Risparmio del Veneto":{"tags":{"name":"Cassa di Risparmio del Veneto","amenity":"bank"},"name":"Cassa di Risparmio del Veneto","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CatalunyaCaixa":{"tags":{"name":"CatalunyaCaixa","amenity":"bank"},"name":"CatalunyaCaixa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Central Bank of India":{"tags":{"name":"Central Bank of India","amenity":"bank"},"name":"Central Bank of India","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Chase":{"tags":{"name":"Chase","amenity":"bank"},"name":"Chase","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/China Bank":{"tags":{"name":"China Bank","amenity":"bank"},"name":"China Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/China Bank Savings":{"tags":{"name":"China Bank Savings","amenity":"bank"},"name":"China Bank Savings","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/China Construction Bank":{"tags":{"name":"China Construction Bank","amenity":"bank"},"name":"China Construction Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Citibank":{"tags":{"name":"Citibank","amenity":"bank"},"name":"Citibank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Citizens Bank":{"tags":{"name":"Citizens Bank","amenity":"bank"},"name":"Citizens Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Clydesdale Bank":{"tags":{"name":"Clydesdale Bank","amenity":"bank"},"name":"Clydesdale Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Columbia Bank":{"tags":{"name":"Columbia Bank","amenity":"bank"},"name":"Columbia Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Comerica Bank":{"tags":{"name":"Comerica Bank","amenity":"bank"},"name":"Comerica Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commerce Bank":{"tags":{"name":"Commerce Bank","amenity":"bank"},"name":"Commerce Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commercial Bank":{"tags":{"name":"Commercial Bank","amenity":"bank"},"name":"Commercial Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commercial Bank of Ceylon PLC":{"tags":{"name":"Commercial Bank of Ceylon PLC","amenity":"bank"},"name":"Commercial Bank of Ceylon PLC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commerzbank":{"tags":{"name":"Commerzbank","amenity":"bank"},"name":"Commerzbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commonwealth Bank":{"tags":{"name":"Commonwealth Bank","amenity":"bank"},"name":"Commonwealth Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Corporation Bank":{"tags":{"name":"Corporation Bank","amenity":"bank"},"name":"Corporation Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Credem":{"tags":{"name":"Credem","amenity":"bank"},"name":"Credem","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Credicoop":{"tags":{"name":"Credicoop","amenity":"bank"},"name":"Credicoop","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Credit Agricole":{"tags":{"name":"Credit Agricole","amenity":"bank"},"name":"Credit Agricole","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Credit Suisse":{"tags":{"name":"Credit Suisse","amenity":"bank"},"name":"Credit Suisse","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crelan":{"tags":{"name":"Crelan","amenity":"bank"},"name":"Crelan","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit Agricole":{"tags":{"name":"Crédit Agricole","amenity":"bank"},"name":"Crédit Agricole","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit Mutuel":{"tags":{"name":"Crédit Mutuel","amenity":"bank"},"name":"Crédit Mutuel","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit Mutuel de Bretagne":{"tags":{"name":"Crédit Mutuel de Bretagne","amenity":"bank"},"name":"Crédit Mutuel de Bretagne","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit du Nord":{"tags":{"name":"Crédit du Nord","amenity":"bank"},"name":"Crédit du Nord","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédito Agrícola":{"tags":{"name":"Crédito Agrícola","amenity":"bank"},"name":"Crédito Agrícola","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cбербанк":{"tags":{"name":"Cбербанк","amenity":"bank"},"name":"Cбербанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Danske Bank":{"tags":{"name":"Danske Bank","amenity":"bank"},"name":"Danske Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Davivienda":{"tags":{"name":"Davivienda","amenity":"bank"},"name":"Davivienda","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/De Venezuela":{"tags":{"name":"De Venezuela","amenity":"bank"},"name":"De Venezuela","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Denizbank":{"tags":{"name":"Denizbank","amenity":"bank"},"name":"Denizbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Desjardins":{"tags":{"name":"Desjardins","amenity":"bank"},"name":"Desjardins","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Deutsche Bank":{"tags":{"name":"Deutsche Bank","amenity":"bank"},"name":"Deutsche Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Dubai Islamic Bank":{"tags":{"name":"Dubai Islamic Bank","amenity":"bank"},"name":"Dubai Islamic Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/EastWest Bank":{"tags":{"name":"EastWest Bank","amenity":"bank"},"name":"EastWest Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ecobank":{"tags":{"name":"Ecobank","amenity":"bank"},"name":"Ecobank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Erste Bank":{"tags":{"name":"Erste Bank","amenity":"bank"},"name":"Erste Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Eurobank":{"tags":{"name":"Eurobank","amenity":"bank"},"name":"Eurobank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Express Union":{"tags":{"name":"Express Union","amenity":"bank"},"name":"Express Union","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/FNB":{"tags":{"name":"FNB","amenity":"bank"},"name":"FNB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Federal Bank":{"tags":{"name":"Federal Bank","amenity":"bank"},"name":"Federal Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Fifth Third Bank":{"tags":{"name":"Fifth Third Bank","amenity":"bank"},"name":"Fifth Third Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Finansbank":{"tags":{"name":"Finansbank","amenity":"bank"},"name":"Finansbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/First Bank":{"tags":{"name":"First Bank","amenity":"bank"},"name":"First Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/First Citizens Bank":{"tags":{"name":"First Citizens Bank","amenity":"bank"},"name":"First Citizens Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/First National Bank":{"tags":{"name":"First National Bank","amenity":"bank"},"name":"First National Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Galicia":{"tags":{"name":"Galicia","amenity":"bank"},"name":"Galicia","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Garanti":{"tags":{"name":"Garanti","amenity":"bank"},"name":"Garanti","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Garanti Bankası":{"tags":{"name":"Garanti Bankası","amenity":"bank"},"name":"Garanti Bankası","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Getin Bank":{"tags":{"name":"Getin Bank","amenity":"bank"},"name":"Getin Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Groupama":{"tags":{"name":"Groupama","amenity":"bank"},"name":"Groupama","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HDFC Bank":{"tags":{"name":"HDFC Bank","amenity":"bank"},"name":"HDFC Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HNB":{"tags":{"name":"HNB","amenity":"bank"},"name":"HNB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HSBC":{"tags":{"name":"HSBC","amenity":"bank"},"name":"HSBC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Halifax":{"tags":{"name":"Halifax","amenity":"bank"},"name":"Halifax","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Halkbank":{"tags":{"name":"Halkbank","amenity":"bank"},"name":"Halkbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Hamburger Sparkasse":{"tags":{"name":"Hamburger Sparkasse","amenity":"bank"},"name":"Hamburger Sparkasse","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Handelsbanken":{"tags":{"name":"Handelsbanken","amenity":"bank"},"name":"Handelsbanken","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Hong Leong Bank":{"tags":{"name":"Hong Leong Bank","amenity":"bank"},"name":"Hong Leong Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Hrvatska poštanska banka":{"tags":{"name":"Hrvatska poštanska banka","amenity":"bank"},"name":"Hrvatska poštanska banka","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Huntington Bank":{"tags":{"name":"Huntington Bank","amenity":"bank"},"name":"Huntington Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HypoVereinsbank":{"tags":{"name":"HypoVereinsbank","amenity":"bank"},"name":"HypoVereinsbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ICBC":{"tags":{"name":"ICBC","amenity":"bank"},"name":"ICBC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ICICI Bank":{"tags":{"name":"ICICI Bank","amenity":"bank"},"name":"ICICI Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/IDBI Bank":{"tags":{"name":"IDBI Bank","amenity":"bank"},"name":"IDBI Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ING":{"tags":{"name":"ING","amenity":"bank"},"name":"ING","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ING Bank Śląski":{"tags":{"name":"ING Bank Śląski","amenity":"bank"},"name":"ING Bank Śląski","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/IberCaja":{"tags":{"name":"IberCaja","amenity":"bank"},"name":"IberCaja","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Indian Bank":{"tags":{"name":"Indian Bank","amenity":"bank"},"name":"Indian Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Indian Overseas Bank":{"tags":{"name":"Indian Overseas Bank","amenity":"bank"},"name":"Indian Overseas Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Interbank":{"tags":{"name":"Interbank","amenity":"bank"},"name":"Interbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Intesa San Paolo":{"tags":{"name":"Intesa San Paolo","amenity":"bank"},"name":"Intesa San Paolo","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Itaú":{"tags":{"name":"Itaú","amenity":"bank"},"name":"Itaú","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/K&H Bank":{"tags":{"name":"K&H Bank","amenity":"bank"},"name":"K&H Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/KBC":{"tags":{"name":"KBC","amenity":"bank"},"name":"KBC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Kasa Stefczyka":{"tags":{"name":"Kasa Stefczyka","amenity":"bank"},"name":"Kasa Stefczyka","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Key Bank":{"tags":{"name":"Key Bank","amenity":"bank"},"name":"Key Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Komerční banka":{"tags":{"name":"Komerční banka","amenity":"bank"},"name":"Komerční banka","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Kreissparkasse":{"tags":{"name":"Kreissparkasse","amenity":"bank"},"name":"Kreissparkasse","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Kreissparkasse Köln":{"tags":{"name":"Kreissparkasse Köln","amenity":"bank"},"name":"Kreissparkasse Köln","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Kutxabank":{"tags":{"name":"Kutxabank","amenity":"bank"},"name":"Kutxabank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/LCL":{"tags":{"name":"LCL","amenity":"bank"},"name":"LCL","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/La Banque Postale":{"tags":{"name":"La Banque Postale","amenity":"bank"},"name":"La Banque Postale","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/La Caixa":{"tags":{"name":"La Caixa","amenity":"bank"},"name":"La Caixa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Laboral Kutxa":{"tags":{"name":"Laboral Kutxa","amenity":"bank"},"name":"Laboral Kutxa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Landbank":{"tags":{"name":"Landbank","amenity":"bank"},"name":"Landbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Liberbank":{"tags":{"name":"Liberbank","amenity":"bank"},"name":"Liberbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Lloyds Bank":{"tags":{"name":"Lloyds Bank","amenity":"bank"},"name":"Lloyds Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/M&T Bank":{"tags":{"name":"M&T Bank","amenity":"bank"},"name":"M&T Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/MCB":{"tags":{"name":"MCB","amenity":"bank"},"name":"MCB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/MCB Bank":{"tags":{"name":"MCB Bank","amenity":"bank"},"name":"MCB Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/MONETA Money Bank":{"tags":{"name":"MONETA Money Bank","amenity":"bank"},"name":"MONETA Money Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Macro":{"tags":{"name":"Macro","amenity":"bank"},"name":"Macro","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Maybank":{"tags":{"name":"Maybank","amenity":"bank"},"name":"Maybank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Meezan Bank":{"tags":{"name":"Meezan Bank","amenity":"bank"},"name":"Meezan Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Mercantil":{"tags":{"name":"Mercantil","amenity":"bank"},"name":"Mercantil","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Metro Bank":{"tags":{"name":"Metro Bank","amenity":"bank"},"name":"Metro Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Metrobank":{"tags":{"name":"Metrobank","amenity":"bank"},"name":"Metrobank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Millennium BCP":{"tags":{"name":"Millennium BCP","amenity":"bank"},"name":"Millennium BCP","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Millennium Bank":{"tags":{"name":"Millennium Bank","amenity":"bank"},"name":"Millennium Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Monte dei Paschi di Siena":{"tags":{"name":"Monte dei Paschi di Siena","amenity":"bank"},"name":"Monte dei Paschi di Siena","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Montepio":{"tags":{"name":"Montepio","amenity":"bank"},"name":"Montepio","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/NAB":{"tags":{"name":"NAB","amenity":"bank"},"name":"NAB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/NSB":{"tags":{"name":"NSB","amenity":"bank"},"name":"NSB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/NatWest":{"tags":{"name":"NatWest","amenity":"bank"},"name":"NatWest","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/National Bank":{"tags":{"name":"National Bank","amenity":"bank"},"name":"National Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Nationwide":{"tags":{"name":"Nationwide","amenity":"bank"},"name":"Nationwide","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Nedbank":{"tags":{"name":"Nedbank","amenity":"bank"},"name":"Nedbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Nordea":{"tags":{"name":"Nordea","amenity":"bank"},"name":"Nordea","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Novo Banco":{"tags":{"name":"Novo Banco","amenity":"bank"},"name":"Novo Banco","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/OLB":{"tags":{"name":"OLB","amenity":"bank"},"name":"OLB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/OTP":{"tags":{"name":"OTP","amenity":"bank"},"name":"OTP","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Oberbank":{"tags":{"name":"Oberbank","amenity":"bank"},"name":"Oberbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Occidental de Descuento":{"tags":{"name":"Occidental de Descuento","amenity":"bank"},"name":"Occidental de Descuento","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Oldenburgische Landesbank":{"tags":{"name":"Oldenburgische Landesbank","amenity":"bank"},"name":"Oldenburgische Landesbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/One Network Bank":{"tags":{"name":"One Network Bank","amenity":"bank"},"name":"One Network Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Osuuspankki":{"tags":{"name":"Osuuspankki","amenity":"bank"},"name":"Osuuspankki","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PBZ":{"tags":{"name":"PBZ","amenity":"bank"},"name":"PBZ","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PKO":{"tags":{"name":"PKO","amenity":"bank"},"name":"PKO","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PKO BP":{"tags":{"name":"PKO BP","amenity":"bank"},"name":"PKO BP","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PNB":{"tags":{"name":"PNB","amenity":"bank"},"name":"PNB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PNC":{"tags":{"name":"PNC","amenity":"bank"},"name":"PNC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PNC Bank":{"tags":{"name":"PNC Bank","amenity":"bank"},"name":"PNC Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PSBank":{"tags":{"name":"PSBank","amenity":"bank"},"name":"PSBank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Patagonia":{"tags":{"name":"Patagonia","amenity":"bank"},"name":"Patagonia","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Pekao SA":{"tags":{"name":"Pekao SA","amenity":"bank"},"name":"Pekao SA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Peoples Bank":{"tags":{"name":"Peoples Bank","amenity":"bank"},"name":"Peoples Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Philippine National Bank":{"tags":{"name":"Philippine National Bank","amenity":"bank"},"name":"Philippine National Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Piraeus Bank":{"tags":{"name":"Piraeus Bank","amenity":"bank"},"name":"Piraeus Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Popular":{"tags":{"name":"Popular","amenity":"bank"},"name":"Popular","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Postbank":{"tags":{"name":"Postbank","amenity":"bank"},"name":"Postbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Postbank Finanzcenter":{"tags":{"name":"Postbank Finanzcenter","amenity":"bank"},"name":"Postbank Finanzcenter","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Provincial":{"tags":{"name":"Provincial","amenity":"bank"},"name":"Provincial","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Public Bank":{"tags":{"name":"Public Bank","amenity":"bank"},"name":"Public Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Punjab National Bank":{"tags":{"name":"Punjab National Bank","amenity":"bank"},"name":"Punjab National Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RBC":{"tags":{"name":"RBC","amenity":"bank"},"name":"RBC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RBC Financial Group":{"tags":{"name":"RBC Financial Group","amenity":"bank"},"name":"RBC Financial Group","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RBS":{"tags":{"name":"RBS","amenity":"bank"},"name":"RBS","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RCBC":{"tags":{"name":"RCBC","amenity":"bank"},"name":"RCBC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RCBC Savings Bank":{"tags":{"name":"RCBC Savings Bank","amenity":"bank"},"name":"RCBC Savings Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Rabobank":{"tags":{"name":"Rabobank","amenity":"bank"},"name":"Rabobank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Raiffeisen Polbank":{"tags":{"name":"Raiffeisen Polbank","amenity":"bank"},"name":"Raiffeisen Polbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Raiffeisenbank":{"tags":{"name":"Raiffeisenbank","amenity":"bank"},"name":"Raiffeisenbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Regions Bank":{"tags":{"name":"Regions Bank","amenity":"bank"},"name":"Regions Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Republic Bank":{"tags":{"name":"Republic Bank","amenity":"bank"},"name":"Republic Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Royal Bank":{"tags":{"name":"Royal Bank","amenity":"bank"},"name":"Royal Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Royal Bank of Canada":{"tags":{"name":"Royal Bank of Canada","amenity":"bank"},"name":"Royal Bank of Canada","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Royal Bank of Scotland":{"tags":{"name":"Royal Bank of Scotland","amenity":"bank"},"name":"Royal Bank of Scotland","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/SEB":{"tags":{"name":"SEB","amenity":"bank"},"name":"SEB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/SNS Bank":{"tags":{"name":"SNS Bank","amenity":"bank"},"name":"SNS Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sabadell":{"tags":{"name":"Sabadell","amenity":"bank"},"name":"Sabadell","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sampath Bank":{"tags":{"name":"Sampath Bank","amenity":"bank"},"name":"Sampath Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander":{"tags":{"name":"Santander","amenity":"bank"},"name":"Santander","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander Consumer Bank":{"tags":{"name":"Santander Consumer Bank","amenity":"bank"},"name":"Santander Consumer Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander Río":{"tags":{"name":"Santander Río","amenity":"bank"},"name":"Santander Río","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander Totta":{"tags":{"name":"Santander Totta","amenity":"bank"},"name":"Santander Totta","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sberbank":{"tags":{"name":"Sberbank","amenity":"bank"},"name":"Sberbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Scotiabank":{"tags":{"name":"Scotiabank","amenity":"bank"},"name":"Scotiabank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Security Bank":{"tags":{"name":"Security Bank","amenity":"bank"},"name":"Security Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sicredi":{"tags":{"name":"Sicredi","amenity":"bank"},"name":"Sicredi","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Slovenská sporiteľňa":{"tags":{"name":"Slovenská sporiteľňa","amenity":"bank"},"name":"Slovenská sporiteľňa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Société Générale":{"tags":{"name":"Société Générale","amenity":"bank"},"name":"Société Générale","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparda-Bank":{"tags":{"name":"Sparda-Bank","amenity":"bank"},"name":"Sparda-Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparkasse":{"tags":{"name":"Sparkasse","amenity":"bank"},"name":"Sparkasse","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparkasse Aachen":{"tags":{"name":"Sparkasse Aachen","amenity":"bank"},"name":"Sparkasse Aachen","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparkasse KölnBonn":{"tags":{"name":"Sparkasse KölnBonn","amenity":"bank"},"name":"Sparkasse KölnBonn","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Stadtsparkasse":{"tags":{"name":"Stadtsparkasse","amenity":"bank"},"name":"Stadtsparkasse","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Stanbic Bank":{"tags":{"name":"Stanbic Bank","amenity":"bank"},"name":"Stanbic Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Standard Bank":{"tags":{"name":"Standard Bank","amenity":"bank"},"name":"Standard Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Standard Chartered":{"tags":{"name":"Standard Chartered","amenity":"bank"},"name":"Standard Chartered","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Standard Chartered Bank":{"tags":{"name":"Standard Chartered Bank","amenity":"bank"},"name":"Standard Chartered Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/State Bank of India":{"tags":{"name":"State Bank of India","amenity":"bank"},"name":"State Bank of India","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/SunTrust":{"tags":{"name":"SunTrust","amenity":"bank"},"name":"SunTrust","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Supervielle":{"tags":{"name":"Supervielle","amenity":"bank"},"name":"Supervielle","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Swedbank":{"tags":{"name":"Swedbank","amenity":"bank"},"name":"Swedbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Syndicate Bank":{"tags":{"name":"Syndicate Bank","amenity":"bank"},"name":"Syndicate Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TCF Bank":{"tags":{"name":"TCF Bank","amenity":"bank"},"name":"TCF Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TD Bank":{"tags":{"name":"TD Bank","amenity":"bank"},"name":"TD Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TD Canada Trust":{"tags":{"name":"TD Canada Trust","amenity":"bank"},"name":"TD Canada Trust","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TEB":{"tags":{"name":"TEB","amenity":"bank"},"name":"TEB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TSB":{"tags":{"name":"TSB","amenity":"bank"},"name":"TSB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Takarékszövetkezet":{"tags":{"name":"Takarékszövetkezet","amenity":"bank"},"name":"Takarékszövetkezet","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Targobank":{"tags":{"name":"Targobank","amenity":"bank"},"name":"Targobank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Tatra banka":{"tags":{"name":"Tatra banka","amenity":"bank"},"name":"Tatra banka","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Türkiye İş Bankası":{"tags":{"name":"Türkiye İş Bankası","amenity":"bank"},"name":"Türkiye İş Bankası","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UBS":{"tags":{"name":"UBS","amenity":"bank"},"name":"UBS","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UCO Bank":{"tags":{"name":"UCO Bank","amenity":"bank"},"name":"UCO Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UCPB":{"tags":{"name":"UCPB","amenity":"bank"},"name":"UCPB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UOB":{"tags":{"name":"UOB","amenity":"bank"},"name":"UOB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/US Bank":{"tags":{"name":"US Bank","amenity":"bank"},"name":"US Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ulster Bank":{"tags":{"name":"Ulster Bank","amenity":"bank"},"name":"Ulster Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Umpqua Bank":{"tags":{"name":"Umpqua Bank","amenity":"bank"},"name":"Umpqua Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UniCredit Bank":{"tags":{"name":"UniCredit Bank","amenity":"bank"},"name":"UniCredit Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Unicaja Banco":{"tags":{"name":"Unicaja Banco","amenity":"bank"},"name":"Unicaja Banco","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Unicredit Banca":{"tags":{"name":"Unicredit Banca","amenity":"bank"},"name":"Unicredit Banca","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Union Bank":{"tags":{"name":"Union Bank","amenity":"bank"},"name":"Union Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/United Bank":{"tags":{"name":"United Bank","amenity":"bank"},"name":"United Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/VR-Bank":{"tags":{"name":"VR-Bank","amenity":"bank"},"name":"VR-Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Vakıfbank":{"tags":{"name":"Vakıfbank","amenity":"bank"},"name":"Vakıfbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Veneto Banca":{"tags":{"name":"Veneto Banca","amenity":"bank"},"name":"Veneto Banca","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Vijaya Bank":{"tags":{"name":"Vijaya Bank","amenity":"bank"},"name":"Vijaya Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Volks- und Raiffeisenbank":{"tags":{"name":"Volks- und Raiffeisenbank","amenity":"bank"},"name":"Volks- und Raiffeisenbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Volksbank":{"tags":{"name":"Volksbank","amenity":"bank"},"name":"Volksbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Volksbank Mittelhessen":{"tags":{"name":"Volksbank Mittelhessen","amenity":"bank"},"name":"Volksbank Mittelhessen","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Volksbank Raiffeisenbank":{"tags":{"name":"Volksbank Raiffeisenbank","amenity":"bank"},"name":"Volksbank Raiffeisenbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/VÚB":{"tags":{"name":"VÚB","amenity":"bank"},"name":"VÚB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Washington Federal":{"tags":{"name":"Washington Federal","amenity":"bank"},"name":"Washington Federal","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Wells Fargo":{"tags":{"name":"Wells Fargo","amenity":"bank"},"name":"Wells Fargo","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Western Union":{"tags":{"name":"Western Union","amenity":"bank"},"name":"Western Union","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Westpac":{"tags":{"name":"Westpac","amenity":"bank"},"name":"Westpac","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Yorkshire Bank":{"tags":{"name":"Yorkshire Bank","amenity":"bank"},"name":"Yorkshire Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Yorkshire Building Society":{"tags":{"name":"Yorkshire Building Society","amenity":"bank"},"name":"Yorkshire Building Society","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Zagrebačka banka":{"tags":{"name":"Zagrebačka banka","amenity":"bank"},"name":"Zagrebačka banka","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ziraat Bankası":{"tags":{"name":"Ziraat Bankası","amenity":"bank"},"name":"Ziraat Bankası","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/mBank":{"tags":{"name":"mBank","amenity":"bank"},"name":"mBank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ČSOB":{"tags":{"name":"ČSOB","amenity":"bank"},"name":"ČSOB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Česká spořitelna":{"tags":{"name":"Česká spořitelna","amenity":"bank"},"name":"Česká spořitelna","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/İş Bankası":{"tags":{"name":"İş Bankası","amenity":"bank"},"name":"İş Bankası","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Εθνική Τράπεζα":{"tags":{"name":"Εθνική Τράπεζα","amenity":"bank"},"name":"Εθνική Τράπεζα","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Πειραιώς":{"tags":{"name":"Πειραιώς","amenity":"bank"},"name":"Πειραιώς","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Τράπεζα Πειραιώς":{"tags":{"name":"Τράπεζα Πειραιώς","amenity":"bank"},"name":"Τράπεζα Πειραιώς","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Авангард":{"tags":{"name":"Авангард","amenity":"bank"},"name":"Авангард","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Альфа-Банк":{"tags":{"name":"Альфа-Банк","amenity":"bank"},"name":"Альфа-Банк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Банк Москвы":{"tags":{"name":"Банк Москвы","amenity":"bank"},"name":"Банк Москвы","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Банка ДСК":{"tags":{"name":"Банка ДСК","amenity":"bank"},"name":"Банка ДСК","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Белагропромбанк":{"tags":{"name":"Белагропромбанк","amenity":"bank"},"name":"Белагропромбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Беларусбанк":{"tags":{"name":"Беларусбанк","amenity":"bank"},"name":"Беларусбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Белинвестбанк":{"tags":{"name":"Белинвестбанк","amenity":"bank"},"name":"Белинвестбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Бинбанк":{"tags":{"name":"Бинбанк","amenity":"bank"},"name":"Бинбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ВТБ":{"tags":{"name":"ВТБ","amenity":"bank"},"name":"ВТБ","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ВТБ24":{"tags":{"name":"ВТБ24","amenity":"bank"},"name":"ВТБ24","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Возрождение":{"tags":{"name":"Возрождение","amenity":"bank"},"name":"Возрождение","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Газпромбанк":{"tags":{"name":"Газпромбанк","amenity":"bank"},"name":"Газпромбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Генбанк":{"tags":{"name":"Генбанк","amenity":"bank"},"name":"Генбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Казкоммерцбанк":{"tags":{"name":"Казкоммерцбанк","amenity":"bank"},"name":"Казкоммерцбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/МДМ Банк":{"tags":{"name":"МДМ Банк","amenity":"bank"},"name":"МДМ Банк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Московский индустриальный банк":{"tags":{"name":"Московский индустриальный банк","amenity":"bank"},"name":"Московский индустриальный банк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Мособлбанк":{"tags":{"name":"Мособлбанк","amenity":"bank"},"name":"Мособлбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Народный банк":{"tags":{"name":"Народный банк","amenity":"bank"},"name":"Народный банк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ОТП Банк":{"tags":{"name":"ОТП Банк","amenity":"bank"},"name":"ОТП Банк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Открытие":{"tags":{"name":"Открытие","amenity":"bank"},"name":"Открытие","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ощадбанк":{"tags":{"name":"Ощадбанк","amenity":"bank"},"name":"Ощадбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ПУМБ":{"tags":{"name":"ПУМБ","amenity":"bank"},"name":"ПУМБ","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Почта Банк":{"tags":{"name":"Почта Банк","amenity":"bank"},"name":"Почта Банк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ПриватБанк":{"tags":{"name":"ПриватБанк","amenity":"bank"},"name":"ПриватБанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Приватбанк":{"tags":{"name":"Приватбанк","amenity":"bank"},"name":"Приватбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Приднестровский Сбербанк":{"tags":{"name":"Приднестровский Сбербанк","amenity":"bank"},"name":"Приднестровский Сбербанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Приорбанк":{"tags":{"name":"Приорбанк","amenity":"bank"},"name":"Приорбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Промсвязьбанк":{"tags":{"name":"Промсвязьбанк","amenity":"bank"},"name":"Промсвязьбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/РНКБ":{"tags":{"name":"РНКБ","amenity":"bank"},"name":"РНКБ","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Райффайзен":{"tags":{"name":"Райффайзен","amenity":"bank"},"name":"Райффайзен","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Райффайзен Банк Аваль":{"tags":{"name":"Райффайзен Банк Аваль","amenity":"bank"},"name":"Райффайзен Банк Аваль","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Райффайзенбанк":{"tags":{"name":"Райффайзенбанк","amenity":"bank"},"name":"Райффайзенбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Росбанк":{"tags":{"name":"Росбанк","amenity":"bank"},"name":"Росбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Россельхозбанк":{"tags":{"name":"Россельхозбанк","amenity":"bank"},"name":"Россельхозбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Русский стандарт":{"tags":{"name":"Русский стандарт","amenity":"bank"},"name":"Русский стандарт","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Сбербанк":{"tags":{"name":"Сбербанк","amenity":"bank"},"name":"Сбербанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Совкомбанк":{"tags":{"name":"Совкомбанк","amenity":"bank"},"name":"Совкомбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/УкрСиббанк":{"tags":{"name":"УкрСиббанк","amenity":"bank"},"name":"УкрСиббанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Укрсоцбанк":{"tags":{"name":"Укрсоцбанк","amenity":"bank"},"name":"Укрсоцбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Уралсиб":{"tags":{"name":"Уралсиб","amenity":"bank"},"name":"Уралсиб","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Хоум Кредит":{"tags":{"name":"Хоум Кредит","amenity":"bank"},"name":"Хоум Кредит","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/בנק הפועלים":{"tags":{"name":"בנק הפועלים","amenity":"bank"},"name":"בנק הפועלים","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/בנק לאומי":{"tags":{"name":"בנק לאומי","amenity":"bank"},"name":"בנק לאומי","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک":{"tags":{"name":"بانک","amenity":"bank"},"name":"بانک","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک آینده":{"tags":{"name":"بانک آینده","amenity":"bank"},"name":"بانک آینده","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک اقتصاد نوین":{"tags":{"name":"بانک اقتصاد نوین","amenity":"bank"},"name":"بانک اقتصاد نوین","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک انصار":{"tags":{"name":"بانک انصار","amenity":"bank"},"name":"بانک انصار","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک تجارت":{"tags":{"name":"بانک تجارت","amenity":"bank"},"name":"بانک تجارت","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک رفاه":{"tags":{"name":"بانک رفاه","amenity":"bank"},"name":"بانک رفاه","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک رفاه کارگران":{"tags":{"name":"بانک رفاه کارگران","amenity":"bank"},"name":"بانک رفاه کارگران","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک سپه":{"tags":{"name":"بانک سپه","amenity":"bank"},"name":"بانک سپه","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک شهر":{"tags":{"name":"بانک شهر","amenity":"bank"},"name":"بانک شهر","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک صادرات":{"tags":{"name":"بانک صادرات","amenity":"bank"},"name":"بانک صادرات","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک قوامین":{"tags":{"name":"بانک قوامین","amenity":"bank"},"name":"بانک قوامین","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک مسکن":{"tags":{"name":"بانک مسکن","amenity":"bank"},"name":"بانک مسکن","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک ملت":{"tags":{"name":"بانک ملت","amenity":"bank"},"name":"بانک ملت","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک ملی":{"tags":{"name":"بانک ملی","amenity":"bank"},"name":"بانک ملی","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک ملی ایران":{"tags":{"name":"بانک ملی ایران","amenity":"bank"},"name":"بانک ملی ایران","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک مهر اقتصاد":{"tags":{"name":"بانک مهر اقتصاد","amenity":"bank"},"name":"بانک مهر اقتصاد","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک پارسیان":{"tags":{"name":"بانک پارسیان","amenity":"bank"},"name":"بانک پارسیان","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک پاسارگاد":{"tags":{"name":"بانک پاسارگاد","amenity":"bank"},"name":"بانک پاسارگاد","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک کشاورزی":{"tags":{"name":"بانک کشاورزی","amenity":"bank"},"name":"بانک کشاورزی","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/صادرات":{"tags":{"name":"صادرات","amenity":"bank"},"name":"صادرات","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ملی":{"tags":{"name":"ملی","amenity":"bank"},"name":"ملی","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/پست بانک":{"tags":{"name":"پست بانک","amenity":"bank"},"name":"پست بانک","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ธนาคารกรุงเทพ":{"tags":{"name":"ธนาคารกรุงเทพ","amenity":"bank"},"name":"ธนาคารกรุงเทพ","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ธนาคารกรุงไทย":{"tags":{"name":"ธนาคารกรุงไทย","amenity":"bank"},"name":"ธนาคารกรุงไทย","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ธนาคารกสิกรไทย":{"tags":{"name":"ธนาคารกสิกรไทย","amenity":"bank"},"name":"ธนาคารกสิกรไทย","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ธนาคารออมสิน":{"tags":{"name":"ธนาคารออมสิน","amenity":"bank"},"name":"ธนาคารออมสิน","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ธนาคารไทยพาณิชย์":{"tags":{"name":"ธนาคารไทยพาณิชย์","amenity":"bank"},"name":"ธนาคารไทยพาณิชย์","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/みずほ銀行":{"tags":{"name":"みずほ銀行","amenity":"bank"},"name":"みずほ銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/りそな銀行":{"tags":{"name":"りそな銀行","amenity":"bank"},"name":"りそな銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/三井住友銀行":{"tags":{"name":"三井住友銀行","amenity":"bank"},"name":"三井住友銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/三菱東京UFJ銀行":{"tags":{"name":"三菱東京UFJ銀行","amenity":"bank"},"name":"三菱東京UFJ銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国农业银行":{"tags":{"name":"中国农业银行","amenity":"bank"},"name":"中国农业银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国工商银行":{"tags":{"name":"中国工商银行","amenity":"bank"},"name":"中国工商银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国建设银行":{"tags":{"name":"中国建设银行","amenity":"bank"},"name":"中国建设银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国邮政储蓄银行":{"tags":{"name":"中国邮政储蓄银行","amenity":"bank"},"name":"中国邮政储蓄银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国银行":{"tags":{"name":"中国银行","amenity":"bank"},"name":"中国银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/交通银行":{"tags":{"name":"交通银行","amenity":"bank"},"name":"交通银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/京都中央信用金庫":{"tags":{"name":"京都中央信用金庫","amenity":"bank"},"name":"京都中央信用金庫","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/京都銀行":{"tags":{"name":"京都銀行","amenity":"bank"},"name":"京都銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/农业银行":{"tags":{"name":"农业银行","amenity":"bank"},"name":"农业银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/北海道銀行":{"tags":{"name":"北海道銀行","amenity":"bank"},"name":"北海道銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/合作金庫銀行":{"tags":{"name":"合作金庫銀行","amenity":"bank"},"name":"合作金庫銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/土地銀行":{"tags":{"name":"土地銀行","amenity":"bank"},"name":"土地銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/工商银行":{"tags":{"name":"工商银行","amenity":"bank"},"name":"工商银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/建设银行":{"tags":{"name":"建设银行","amenity":"bank"},"name":"建设银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/彰化銀行":{"tags":{"name":"彰化銀行","amenity":"bank"},"name":"彰化銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/招商银行":{"tags":{"name":"招商银行","amenity":"bank"},"name":"招商银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/横浜銀行":{"tags":{"name":"横浜銀行","amenity":"bank"},"name":"横浜銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/第一銀行":{"tags":{"name":"第一銀行","amenity":"bank"},"name":"第一銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/華南銀行":{"tags":{"name":"華南銀行","amenity":"bank"},"name":"華南銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/국민은행":{"tags":{"name":"국민은행","name:en":"Gungmin Bank","amenity":"bank"},"name":"국민은행","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/기업은행":{"tags":{"name":"기업은행","amenity":"bank"},"name":"기업은행","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/농협":{"tags":{"name":"농협","amenity":"bank"},"name":"농협","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/새마을금고":{"tags":{"name":"새마을금고","amenity":"bank"},"name":"새마을금고","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/신한은행":{"tags":{"name":"신한은행","name:en":"Sinhan Bank","amenity":"bank"},"name":"신한은행","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/우리은행":{"tags":{"name":"우리은행","name:en":"Uri Bank","amenity":"bank"},"name":"우리은행","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/하나은행":{"tags":{"name":"하나은행","amenity":"bank"},"name":"하나은행","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bar/Bar Centrale":{"tags":{"name":"Bar Centrale","amenity":"bar"},"name":"Bar Centrale","icon":"bar","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/bar/Bar Sport":{"tags":{"name":"Bar Sport","amenity":"bar"},"name":"Bar Sport","icon":"bar","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/bar/Beach Bar":{"tags":{"name":"Beach Bar","amenity":"bar"},"name":"Beach Bar","icon":"bar","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/bar/Pool Bar":{"tags":{"name":"Pool Bar","amenity":"bar"},"name":"Pool Bar","icon":"bar","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/bicycle_rental/Bicing":{"tags":{"name":"Bicing","amenity":"bicycle_rental"},"name":"Bicing","icon":"bicycle","geometry":["point","vertex","area"],"fields":["capacity","network","operator","payment_multi"],"suggestion":true},"amenity/bicycle_rental/Call a Bike":{"tags":{"name":"Call a Bike","amenity":"bicycle_rental"},"name":"Call a Bike","icon":"bicycle","geometry":["point","vertex","area"],"fields":["capacity","network","operator","payment_multi"],"suggestion":true},"amenity/bicycle_rental/Grid":{"tags":{"name":"Grid","amenity":"bicycle_rental"},"name":"Grid","icon":"bicycle","geometry":["point","vertex","area"],"fields":["capacity","network","operator","payment_multi"],"suggestion":true},"amenity/bicycle_rental/Mibici":{"tags":{"name":"Mibici","amenity":"bicycle_rental"},"name":"Mibici","icon":"bicycle","geometry":["point","vertex","area"],"fields":["capacity","network","operator","payment_multi"],"suggestion":true},"amenity/bicycle_rental/metropolradruhr":{"tags":{"name":"metropolradruhr","amenity":"bicycle_rental"},"name":"metropolradruhr","icon":"bicycle","geometry":["point","vertex","area"],"fields":["capacity","network","operator","payment_multi"],"suggestion":true},"amenity/bureau_de_change/Abitab":{"tags":{"name":"Abitab","amenity":"bureau_de_change"},"name":"Abitab","icon":"bank","geometry":["point","vertex"],"fields":["name","operator","currency_multi"],"suggestion":true},"amenity/bureau_de_change/Change":{"tags":{"name":"Change","amenity":"bureau_de_change"},"name":"Change","icon":"bank","geometry":["point","vertex"],"fields":["name","operator","currency_multi"],"suggestion":true},"amenity/bureau_de_change/Travelex":{"tags":{"name":"Travelex","amenity":"bureau_de_change"},"name":"Travelex","icon":"bank","geometry":["point","vertex"],"fields":["name","operator","currency_multi"],"suggestion":true},"amenity/cafe/85度C":{"tags":{"name":"85度C","amenity":"cafe"},"name":"85度C","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Bar Kafe":{"tags":{"name":"Bar Kafe","amenity":"cafe"},"name":"Bar Kafe","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Barista":{"tags":{"name":"Barista","amenity":"cafe"},"name":"Barista","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Bonafide":{"tags":{"name":"Bonafide","amenity":"cafe"},"name":"Bonafide","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafe Coffee Day":{"tags":{"name":"Cafe Coffee Day","amenity":"cafe"},"name":"Cafe Coffee Day","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafe Nero":{"tags":{"name":"Cafe Nero","amenity":"cafe"},"name":"Cafe Nero","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafeteria":{"tags":{"name":"Cafeteria","amenity":"cafe"},"name":"Cafeteria","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafetería":{"tags":{"name":"Cafetería","amenity":"cafe"},"name":"Cafetería","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Caffè Nero":{"tags":{"name":"Caffè Nero","amenity":"cafe"},"name":"Caffè Nero","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Café Amazon":{"tags":{"name":"Café Amazon","amenity":"cafe"},"name":"Café Amazon","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Café Central":{"tags":{"name":"Café Central","amenity":"cafe"},"name":"Café Central","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Café de la Place":{"tags":{"name":"Café de la Place","amenity":"cafe"},"name":"Café de la Place","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Café des Sports":{"tags":{"name":"Café des Sports","amenity":"cafe"},"name":"Café des Sports","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Caribou Coffee":{"tags":{"name":"Caribou Coffee","amenity":"cafe"},"name":"Caribou Coffee","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Coffee Fellows":{"tags":{"name":"Coffee Fellows","amenity":"cafe"},"name":"Coffee Fellows","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Coffee House":{"tags":{"name":"Coffee House","amenity":"cafe"},"name":"Coffee House","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Coffee Island":{"tags":{"name":"Coffee Island","amenity":"cafe"},"name":"Coffee Island","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Coffee Time":{"tags":{"name":"Coffee Time","amenity":"cafe"},"name":"Coffee Time","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Costa":{"tags":{"name":"Costa","amenity":"cafe"},"name":"Costa","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Country Style":{"tags":{"name":"Country Style","amenity":"cafe"},"name":"Country Style","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Dunkin' Donuts":{"tags":{"name":"Dunkin' Donuts","cuisine":"donut","amenity":"cafe"},"name":"Dunkin' Donuts","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Eiscafe Dolomiti":{"tags":{"name":"Eiscafe Dolomiti","amenity":"cafe"},"name":"Eiscafe Dolomiti","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Eiscafe Venezia":{"tags":{"name":"Eiscafe Venezia","amenity":"cafe"},"name":"Eiscafe Venezia","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Espresso House":{"tags":{"name":"Espresso House","amenity":"cafe"},"name":"Espresso House","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Havanna":{"tags":{"name":"Havanna","amenity":"cafe"},"name":"Havanna","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Internet Cafe":{"tags":{"name":"Internet Cafe","amenity":"cafe"},"name":"Internet Cafe","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Kafe":{"tags":{"name":"Kafe","amenity":"cafe"},"name":"Kafe","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Krispy Kreme":{"tags":{"name":"Krispy Kreme","amenity":"cafe"},"name":"Krispy Kreme","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Le Pain Quotidien":{"tags":{"name":"Le Pain Quotidien","amenity":"cafe"},"name":"Le Pain Quotidien","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/McCafé":{"tags":{"name":"McCafé","amenity":"cafe","cuisine":"coffee_shop"},"name":"McCafé","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Peet's Coffee & Tea":{"tags":{"name":"Peet's Coffee & Tea","amenity":"cafe"},"name":"Peet's Coffee & Tea","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Pret A Manger":{"tags":{"name":"Pret A Manger","amenity":"cafe"},"name":"Pret A Manger","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Prime":{"tags":{"name":"Prime","amenity":"cafe"},"name":"Prime","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Second Cup":{"tags":{"name":"Second Cup","amenity":"cafe"},"name":"Second Cup","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Segafredo":{"tags":{"name":"Segafredo","amenity":"cafe"},"name":"Segafredo","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Starbucks":{"tags":{"name":"Starbucks","cuisine":"coffee_shop","amenity":"cafe"},"name":"Starbucks","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/The Coffee Bean & Tea Leaf":{"tags":{"name":"The Coffee Bean & Tea Leaf","amenity":"cafe"},"name":"The Coffee Bean & Tea Leaf","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/The Coffee Club":{"tags":{"name":"The Coffee Club","amenity":"cafe"},"name":"The Coffee Club","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Tim Hortons":{"tags":{"name":"Tim Hortons","amenity":"cafe"},"name":"Tim Hortons","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Traveler's Coffee":{"tags":{"name":"Traveler's Coffee","amenity":"cafe"},"name":"Traveler's Coffee","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Wayne's Coffee":{"tags":{"name":"Wayne's Coffee","amenity":"cafe"},"name":"Wayne's Coffee","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Бистро":{"tags":{"name":"Бистро","amenity":"cafe"},"name":"Бистро","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Буфет":{"tags":{"name":"Буфет","amenity":"cafe"},"name":"Буфет","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Встреча":{"tags":{"name":"Встреча","amenity":"cafe"},"name":"Встреча","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Даблби":{"tags":{"name":"Даблби","amenity":"cafe"},"name":"Даблби","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Закусочная":{"tags":{"name":"Закусочная","amenity":"cafe"},"name":"Закусочная","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Кофе Хауз":{"tags":{"name":"Кофе Хауз","amenity":"cafe"},"name":"Кофе Хауз","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Кофейня":{"tags":{"name":"Кофейня","amenity":"cafe"},"name":"Кофейня","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Лакомка":{"tags":{"name":"Лакомка","amenity":"cafe"},"name":"Лакомка","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Летнее кафе":{"tags":{"name":"Летнее кафе","amenity":"cafe"},"name":"Летнее кафе","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Пельменная":{"tags":{"name":"Пельменная","amenity":"cafe"},"name":"Пельменная","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Пиццерия":{"tags":{"name":"Пиццерия","amenity":"cafe"},"name":"Пиццерия","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Рандеву":{"tags":{"name":"Рандеву","amenity":"cafe"},"name":"Рандеву","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Сказка":{"tags":{"name":"Сказка","amenity":"cafe"},"name":"Сказка","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Старбакс":{"tags":{"name":"Старбакс","amenity":"cafe"},"name":"Старбакс","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Столовая":{"tags":{"name":"Столовая","amenity":"cafe"},"name":"Столовая","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Уют":{"tags":{"name":"Уют","amenity":"cafe"},"name":"Уют","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Хуторок":{"tags":{"name":"Хуторок","amenity":"cafe"},"name":"Хуторок","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Шашлычная":{"tags":{"name":"Шашлычная","amenity":"cafe"},"name":"Шашлычная","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Шоколад":{"tags":{"name":"Шоколад","amenity":"cafe"},"name":"Шоколад","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Шоколадница":{"tags":{"name":"Шоколадница","amenity":"cafe"},"name":"Шоколадница","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/ארומה":{"tags":{"name":"ארומה","amenity":"cafe"},"name":"ארומה","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/مقهى":{"tags":{"name":"مقهى","amenity":"cafe"},"name":"مقهى","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/คาเฟ่ อเมซอน":{"tags":{"name":"คาเฟ่ อเมซอน","amenity":"cafe"},"name":"คาเฟ่ อเมซอน","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/エクセルシオール カフェ":{"tags":{"name":"エクセルシオール カフェ","amenity":"cafe"},"name":"エクセルシオール カフェ","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/カフェ・ド・クリエ":{"tags":{"name":"カフェ・ド・クリエ","name:en":"Cafe de CRIE","amenity":"cafe"},"name":"カフェ・ド・クリエ","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/カフェ・ベローチェ":{"tags":{"name":"カフェ・ベローチェ","amenity":"cafe"},"name":"カフェ・ベローチェ","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/コメダ珈琲店":{"tags":{"name":"コメダ珈琲店","amenity":"cafe"},"name":"コメダ珈琲店","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/サンマルクカフェ":{"tags":{"name":"サンマルクカフェ","amenity":"cafe"},"name":"サンマルクカフェ","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/スターバックス":{"tags":{"name":"スターバックス","name:en":"Starbucks","amenity":"cafe"},"name":"スターバックス","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/タリーズコーヒー":{"tags":{"name":"タリーズコーヒー","amenity":"cafe"},"name":"タリーズコーヒー","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/ドトールコーヒーショップ":{"tags":{"name":"ドトールコーヒーショップ","amenity":"cafe"},"name":"ドトールコーヒーショップ","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/星巴克":{"tags":{"name":"星巴克","amenity":"cafe"},"name":"星巴克","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/스타벅스":{"tags":{"name":"스타벅스","amenity":"cafe"},"name":"스타벅스","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/car_rental/Alamo":{"tags":{"name":"Alamo","amenity":"car_rental"},"name":"Alamo","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Avis":{"tags":{"name":"Avis","amenity":"car_rental"},"name":"Avis","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Budget":{"tags":{"name":"Budget","amenity":"car_rental"},"name":"Budget","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Enterprise":{"tags":{"name":"Enterprise","amenity":"car_rental"},"name":"Enterprise","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Enterprise Rent-a-Car":{"tags":{"name":"Enterprise Rent-a-Car","amenity":"car_rental"},"name":"Enterprise Rent-a-Car","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Europcar":{"tags":{"name":"Europcar","amenity":"car_rental"},"name":"Europcar","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Hertz":{"tags":{"name":"Hertz","amenity":"car_rental"},"name":"Hertz","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Localiza":{"tags":{"name":"Localiza","amenity":"car_rental"},"name":"Localiza","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Sixt":{"tags":{"name":"Sixt","amenity":"car_rental"},"name":"Sixt","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Thrifty":{"tags":{"name":"Thrifty","amenity":"car_rental"},"name":"Thrifty","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/U-Haul":{"tags":{"name":"U-Haul","amenity":"car_rental"},"name":"U-Haul","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/オリックスレンタカー":{"tags":{"name":"オリックスレンタカー","amenity":"car_rental"},"name":"オリックスレンタカー","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/トヨタレンタカー":{"tags":{"name":"トヨタレンタカー","amenity":"car_rental"},"name":"トヨタレンタカー","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/トヨタレンタリース":{"tags":{"name":"トヨタレンタリース","amenity":"car_rental"},"name":"トヨタレンタリース","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/ニッポンレンタカー":{"tags":{"name":"ニッポンレンタカー","amenity":"car_rental"},"name":"ニッポンレンタカー","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_wash/Autolavaggio":{"tags":{"name":"Autolavaggio","amenity":"car_wash"},"name":"Autolavaggio","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/H-E-B Car Wash":{"tags":{"name":"H-E-B Car Wash","amenity":"car_wash"},"name":"H-E-B Car Wash","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Lavage Auto":{"tags":{"name":"Lavage Auto","amenity":"car_wash"},"name":"Lavage Auto","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Lavazh":{"tags":{"name":"Lavazh","amenity":"car_wash"},"name":"Lavazh","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Myjnia":{"tags":{"name":"Myjnia","amenity":"car_wash"},"name":"Myjnia","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Myjnia bezdotykowa":{"tags":{"name":"Myjnia bezdotykowa","amenity":"car_wash"},"name":"Myjnia bezdotykowa","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Myjnia samochodowa":{"tags":{"name":"Myjnia samochodowa","amenity":"car_wash"},"name":"Myjnia samochodowa","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Spălătorie Auto":{"tags":{"name":"Spălătorie Auto","amenity":"car_wash"},"name":"Spălătorie Auto","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Spălătorie auto":{"tags":{"name":"Spălătorie auto","amenity":"car_wash"},"name":"Spălătorie auto","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Автомийка":{"tags":{"name":"Автомийка","amenity":"car_wash"},"name":"Автомийка","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/cinema/Cinema City":{"tags":{"name":"Cinema City","amenity":"cinema"},"name":"Cinema City","icon":"cinema","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/cinema/Cinemark":{"tags":{"name":"Cinemark","amenity":"cinema"},"name":"Cinemark","icon":"cinema","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/cinema/Cinemex":{"tags":{"name":"Cinemex","amenity":"cinema"},"name":"Cinemex","icon":"cinema","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/cinema/Cinepolis":{"tags":{"name":"Cinepolis","amenity":"cinema"},"name":"Cinepolis","icon":"cinema","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/cinema/Cineworld":{"tags":{"name":"Cineworld","amenity":"cinema"},"name":"Cineworld","icon":"cinema","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/cinema/Odeon":{"tags":{"name":"Odeon","amenity":"cinema"},"name":"Odeon","icon":"cinema","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/clinic/ФАП":{"tags":{"name":"ФАП","healthcare":"clinic","amenity":"clinic"},"name":"ФАП","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/dentist/Aspen Dental":{"tags":{"name":"Aspen Dental","healthcare":"dentist","amenity":"dentist"},"name":"Aspen Dental","icon":"dentist","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/dentist/Family Dentistry":{"tags":{"name":"Family Dentistry","healthcare":"dentist","amenity":"dentist"},"name":"Family Dentistry","icon":"dentist","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/dentist/Vitaldent":{"tags":{"name":"Vitaldent","healthcare":"dentist","amenity":"dentist"},"name":"Vitaldent","icon":"dentist","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/dentist/Стоматолог":{"tags":{"name":"Стоматолог","healthcare":"dentist","amenity":"dentist"},"name":"Стоматолог","icon":"dentist","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/dentist/Стоматологія":{"tags":{"name":"Стоматологія","healthcare":"dentist","amenity":"dentist"},"name":"Стоматологія","icon":"dentist","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/doctors/Háziorvosi rendelő":{"tags":{"name":"Háziorvosi rendelő","healthcare":"doctor","amenity":"doctors"},"name":"Háziorvosi rendelő","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/doctors/Инвитро":{"tags":{"name":"Инвитро","healthcare":"doctor","amenity":"doctors"},"name":"Инвитро","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/driving_school/Автодром":{"tags":{"name":"Автодром","amenity":"driving_school"},"name":"Автодром","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/fast_food/A&W":{"tags":{"name":"A&W","amenity":"fast_food"},"name":"A&W","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Ali Baba":{"tags":{"name":"Ali Baba","amenity":"fast_food"},"name":"Ali Baba","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Angel's Burger":{"tags":{"name":"Angel's Burger","amenity":"fast_food"},"name":"Angel's Burger","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Antalya":{"tags":{"name":"Antalya","amenity":"fast_food"},"name":"Antalya","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Arby's":{"tags":{"name":"Arby's","amenity":"fast_food"},"name":"Arby's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Asia Bistro":{"tags":{"name":"Asia Bistro","amenity":"fast_food"},"name":"Asia Bistro","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Asia Wok":{"tags":{"name":"Asia Wok","amenity":"fast_food"},"name":"Asia Wok","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Baskin-Robbins":{"tags":{"name":"Baskin-Robbins","amenity":"fast_food"},"name":"Baskin-Robbins","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Bistro":{"tags":{"name":"Bistro","amenity":"fast_food"},"name":"Bistro","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Bob's":{"tags":{"name":"Bob's","amenity":"fast_food"},"name":"Bob's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Bojangles":{"tags":{"name":"Bojangles","amenity":"fast_food"},"name":"Bojangles","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Booster Juice":{"tags":{"name":"Booster Juice","amenity":"fast_food"},"name":"Booster Juice","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Boston Market":{"tags":{"name":"Boston Market","amenity":"fast_food"},"name":"Boston Market","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Braum's":{"tags":{"name":"Braum's","amenity":"fast_food"},"name":"Braum's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Burger King":{"tags":{"name":"Burger King","cuisine":"burger","amenity":"fast_food"},"name":"Burger King","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Burger Machine":{"tags":{"name":"Burger Machine","amenity":"fast_food"},"name":"Burger Machine","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Büfé":{"tags":{"name":"Büfé","amenity":"fast_food"},"name":"Büfé","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Captain D's":{"tags":{"name":"Captain D's","amenity":"fast_food"},"name":"Captain D's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Carl's Jr.":{"tags":{"name":"Carl's Jr.","cuisine":"burger","amenity":"fast_food"},"name":"Carl's Jr.","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chick-fil-A":{"tags":{"name":"Chick-fil-A","cuisine":"chicken","amenity":"fast_food"},"name":"Chick-fil-A","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chicken Express":{"tags":{"name":"Chicken Express","amenity":"fast_food"},"name":"Chicken Express","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chipotle":{"tags":{"name":"Chipotle","cuisine":"mexican","amenity":"fast_food"},"name":"Chipotle","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chowking":{"tags":{"name":"Chowking","amenity":"fast_food"},"name":"Chowking","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Church's Chicken":{"tags":{"name":"Church's Chicken","amenity":"fast_food"},"name":"Church's Chicken","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/CoCo壱番屋":{"tags":{"name":"CoCo壱番屋","amenity":"fast_food"},"name":"CoCo壱番屋","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Cold Stone Creamery":{"tags":{"name":"Cold Stone Creamery","amenity":"fast_food"},"name":"Cold Stone Creamery","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Cook Out":{"tags":{"name":"Cook Out","amenity":"fast_food"},"name":"Cook Out","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Culver's":{"tags":{"name":"Culver's","amenity":"fast_food"},"name":"Culver's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/DQ":{"tags":{"name":"DQ","amenity":"fast_food"},"name":"DQ","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Dairy Queen":{"tags":{"name":"Dairy Queen","amenity":"fast_food"},"name":"Dairy Queen","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Del Taco":{"tags":{"name":"Del Taco","amenity":"fast_food"},"name":"Del Taco","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Domino's Pizza":{"tags":{"name":"Domino's Pizza","cuisine":"pizza","amenity":"fast_food"},"name":"Domino's Pizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/El Pollo Loco":{"tags":{"name":"El Pollo Loco","amenity":"fast_food"},"name":"El Pollo Loco","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Everest":{"tags":{"name":"Everest","amenity":"fast_food"},"name":"Everest","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Extreme Pita":{"tags":{"name":"Extreme Pita","amenity":"fast_food"},"name":"Extreme Pita","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Fazoli's":{"tags":{"name":"Fazoli's","amenity":"fast_food"},"name":"Fazoli's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Firehouse Subs":{"tags":{"name":"Firehouse Subs","amenity":"fast_food"},"name":"Firehouse Subs","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Fish & Chips":{"tags":{"name":"Fish & Chips","amenity":"fast_food"},"name":"Fish & Chips","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Fish and Chips":{"tags":{"name":"Fish and Chips","amenity":"fast_food"},"name":"Fish and Chips","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Five Guys":{"tags":{"name":"Five Guys","amenity":"fast_food"},"name":"Five Guys","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Greenwich":{"tags":{"name":"Greenwich","amenity":"fast_food"},"name":"Greenwich","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Habib's":{"tags":{"name":"Habib's","amenity":"fast_food"},"name":"Habib's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hallo Pizza":{"tags":{"name":"Hallo Pizza","amenity":"fast_food"},"name":"Hallo Pizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hardee's":{"tags":{"name":"Hardee's","cuisine":"burger","amenity":"fast_food"},"name":"Hardee's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Harvey's":{"tags":{"name":"Harvey's","amenity":"fast_food"},"name":"Harvey's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hesburger":{"tags":{"name":"Hesburger","amenity":"fast_food"},"name":"Hesburger","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hungry Jacks":{"tags":{"name":"Hungry Jacks","cuisine":"burger","amenity":"fast_food"},"name":"Hungry Jacks","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/In-N-Out Burger":{"tags":{"name":"In-N-Out Burger","amenity":"fast_food"},"name":"In-N-Out Burger","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Istanbul":{"tags":{"name":"Istanbul","amenity":"fast_food"},"name":"Istanbul","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Istanbul Kebab":{"tags":{"name":"Istanbul Kebab","amenity":"fast_food"},"name":"Istanbul Kebab","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jack in the Box":{"tags":{"name":"Jack in the Box","cuisine":"burger","amenity":"fast_food"},"name":"Jack in the Box","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jamba Juice":{"tags":{"name":"Jamba Juice","amenity":"fast_food"},"name":"Jamba Juice","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jersey Mike's Subs":{"tags":{"name":"Jersey Mike's Subs","amenity":"fast_food"},"name":"Jersey Mike's Subs","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jimmy John's":{"tags":{"name":"Jimmy John's","cuisine":"sandwich","amenity":"fast_food"},"name":"Jimmy John's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jollibee":{"tags":{"name":"Jollibee","amenity":"fast_food"},"name":"Jollibee","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/KFC":{"tags":{"name":"KFC","cuisine":"chicken","amenity":"fast_food"},"name":"KFC","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/KFC/Taco Bell":{"tags":{"name":"KFC/Taco Bell","amenity":"fast_food"},"name":"KFC/Taco Bell","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Kebab House":{"tags":{"name":"Kebab House","amenity":"fast_food"},"name":"Kebab House","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Kebabai":{"tags":{"name":"Kebabai","amenity":"fast_food"},"name":"Kebabai","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Kochlöffel":{"tags":{"name":"Kochlöffel","amenity":"fast_food"},"name":"Kochlöffel","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Kotipizza":{"tags":{"name":"Kotipizza","amenity":"fast_food"},"name":"Kotipizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Krystal":{"tags":{"name":"Krystal","amenity":"fast_food"},"name":"Krystal","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Little Caesars":{"tags":{"name":"Little Caesars","amenity":"fast_food"},"name":"Little Caesars","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Little Caesars Pizza":{"tags":{"name":"Little Caesars Pizza","amenity":"fast_food"},"name":"Little Caesars Pizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Long John Silver's":{"tags":{"name":"Long John Silver's","amenity":"fast_food"},"name":"Long John Silver's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Lotteria":{"tags":{"name":"Lotteria","amenity":"fast_food"},"name":"Lotteria","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Max":{"tags":{"name":"Max","amenity":"fast_food"},"name":"Max","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/McDonald's":{"tags":{"name":"McDonald's","cuisine":"burger","amenity":"fast_food"},"name":"McDonald's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Minute Burger":{"tags":{"name":"Minute Burger","amenity":"fast_food"},"name":"Minute Burger","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Mr. Sub":{"tags":{"name":"Mr. Sub","amenity":"fast_food"},"name":"Mr. Sub","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/New York Pizza":{"tags":{"name":"New York Pizza","amenity":"fast_food"},"name":"New York Pizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Nordsee":{"tags":{"name":"Nordsee","amenity":"fast_food"},"name":"Nordsee","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Panda Express":{"tags":{"name":"Panda Express","cuisine":"chinese","amenity":"fast_food"},"name":"Panda Express","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Papa John's":{"tags":{"name":"Papa John's","cuisine":"pizza","amenity":"fast_food"},"name":"Papa John's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Papa Murphy's":{"tags":{"name":"Papa Murphy's","amenity":"fast_food"},"name":"Papa Murphy's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pinulito":{"tags":{"name":"Pinulito","amenity":"fast_food"},"name":"Pinulito","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pita Pit":{"tags":{"name":"Pita Pit","amenity":"fast_food"},"name":"Pita Pit","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pizza Hut Delivery":{"tags":{"name":"Pizza Hut Delivery","amenity":"fast_food"},"name":"Pizza Hut Delivery","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pizza King":{"tags":{"name":"Pizza King","amenity":"fast_food"},"name":"Pizza King","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pizza Nova":{"tags":{"name":"Pizza Nova","amenity":"fast_food"},"name":"Pizza Nova","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pizza Pizza":{"tags":{"name":"Pizza Pizza","amenity":"fast_food"},"name":"Pizza Pizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pollo Campero":{"tags":{"name":"Pollo Campero","amenity":"fast_food"},"name":"Pollo Campero","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pollo Granjero":{"tags":{"name":"Pollo Granjero","amenity":"fast_food"},"name":"Pollo Granjero","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Popeye's":{"tags":{"name":"Popeye's","cuisine":"chicken","amenity":"fast_food"},"name":"Popeye's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Popeyes Louisiana Kitchen":{"tags":{"name":"Popeyes Louisiana Kitchen","amenity":"fast_food"},"name":"Popeyes Louisiana Kitchen","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Qdoba":{"tags":{"name":"Qdoba","amenity":"fast_food"},"name":"Qdoba","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Quick":{"tags":{"name":"Quick","amenity":"fast_food"},"name":"Quick","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Quiznos":{"tags":{"name":"Quiznos","amenity":"fast_food"},"name":"Quiznos","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Rally's":{"tags":{"name":"Rally's","amenity":"fast_food"},"name":"Rally's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Red Rooster":{"tags":{"name":"Red Rooster","amenity":"fast_food"},"name":"Red Rooster","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Sbarro":{"tags":{"name":"Sbarro","amenity":"fast_food"},"name":"Sbarro","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Schlotzsky's Deli":{"tags":{"name":"Schlotzsky's Deli","amenity":"fast_food"},"name":"Schlotzsky's Deli","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Sibylla":{"tags":{"name":"Sibylla","amenity":"fast_food"},"name":"Sibylla","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Sonic":{"tags":{"name":"Sonic","cuisine":"burger","amenity":"fast_food"},"name":"Sonic","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Steers":{"tags":{"name":"Steers","amenity":"fast_food"},"name":"Steers","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Subway":{"tags":{"name":"Subway","amenity":"fast_food"},"name":"Subway","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Bell":{"tags":{"name":"Taco Bell","cuisine":"mexican","amenity":"fast_food"},"name":"Taco Bell","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Bueno":{"tags":{"name":"Taco Bueno","amenity":"fast_food"},"name":"Taco Bueno","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Cabana":{"tags":{"name":"Taco Cabana","amenity":"fast_food"},"name":"Taco Cabana","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Del Mar":{"tags":{"name":"Taco Del Mar","amenity":"fast_food"},"name":"Taco Del Mar","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco John's":{"tags":{"name":"Taco John's","amenity":"fast_food"},"name":"Taco John's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Time":{"tags":{"name":"Taco Time","amenity":"fast_food"},"name":"Taco Time","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Telepizza":{"tags":{"name":"Telepizza","amenity":"fast_food"},"name":"Telepizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Thai Express":{"tags":{"name":"Thai Express","amenity":"fast_food"},"name":"Thai Express","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/The Pizza Company":{"tags":{"name":"The Pizza Company","amenity":"fast_food"},"name":"The Pizza Company","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Wendy's":{"tags":{"name":"Wendy's","cuisine":"burger","amenity":"fast_food"},"name":"Wendy's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Whataburger":{"tags":{"name":"Whataburger","amenity":"fast_food"},"name":"Whataburger","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/White Castle":{"tags":{"name":"White Castle","amenity":"fast_food"},"name":"White Castle","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Wienerschnitzel":{"tags":{"name":"Wienerschnitzel","amenity":"fast_food"},"name":"Wienerschnitzel","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Wimpy":{"tags":{"name":"Wimpy","amenity":"fast_food"},"name":"Wimpy","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Zaxby's":{"tags":{"name":"Zaxby's","amenity":"fast_food"},"name":"Zaxby's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Γρηγόρης":{"tags":{"name":"Γρηγόρης","amenity":"fast_food"},"name":"Γρηγόρης","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Бургер Кинг":{"tags":{"name":"Бургер Кинг","amenity":"fast_food"},"name":"Бургер Кинг","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Крошка Картошка":{"tags":{"name":"Крошка Картошка","amenity":"fast_food"},"name":"Крошка Картошка","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Макдоналдс":{"tags":{"name":"Макдоналдс","name:en":"McDonald's","amenity":"fast_food"},"name":"Макдоналдс","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Робин Сдобин":{"tags":{"name":"Робин Сдобин","amenity":"fast_food"},"name":"Робин Сдобин","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Русский Аппетит":{"tags":{"name":"Русский Аппетит","amenity":"fast_food"},"name":"Русский Аппетит","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Сабвэй":{"tags":{"name":"Сабвэй","amenity":"fast_food"},"name":"Сабвэй","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Стардог!s":{"tags":{"name":"Стардог!s","amenity":"fast_food"},"name":"Стардог!s","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Теремок":{"tags":{"name":"Теремок","amenity":"fast_food"},"name":"Теремок","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Шаверма":{"tags":{"name":"Шаверма","amenity":"fast_food"},"name":"Шаверма","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Шаурма":{"tags":{"name":"Шаурма","amenity":"fast_food"},"name":"Шаурма","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/かっぱ寿司":{"tags":{"name":"かっぱ寿司","amenity":"fast_food"},"name":"かっぱ寿司","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/かつや":{"tags":{"name":"かつや","amenity":"fast_food"},"name":"かつや","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/くら寿司":{"tags":{"name":"くら寿司","amenity":"fast_food"},"name":"くら寿司","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/すき家":{"tags":{"name":"すき家","name:en":"SUKIYA","amenity":"fast_food"},"name":"すき家","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/なか卯":{"tags":{"name":"なか卯","amenity":"fast_food"},"name":"なか卯","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/ほっかほっか亭":{"tags":{"name":"ほっかほっか亭","amenity":"fast_food"},"name":"ほっかほっか亭","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/ほっともっと":{"tags":{"name":"ほっともっと","amenity":"fast_food"},"name":"ほっともっと","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/オリジン弁当":{"tags":{"name":"オリジン弁当","amenity":"fast_food"},"name":"オリジン弁当","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/ケンタッキーフライドチキン":{"tags":{"name":"ケンタッキーフライドチキン","cuisine":"chicken","name:en":"KFC","amenity":"fast_food"},"name":"ケンタッキーフライドチキン","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/サブウェイ":{"tags":{"name":"サブウェイ","amenity":"fast_food"},"name":"サブウェイ","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/スシロー":{"tags":{"name":"スシロー","amenity":"fast_food"},"name":"スシロー","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/マクドナルド":{"tags":{"name":"マクドナルド","cuisine":"burger","name:en":"McDonald's","amenity":"fast_food"},"name":"マクドナルド","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/ミスタードーナツ":{"tags":{"name":"ミスタードーナツ","amenity":"fast_food"},"name":"ミスタードーナツ","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/モスバーガー":{"tags":{"name":"モスバーガー","name:en":"MOS BURGER","amenity":"fast_food"},"name":"モスバーガー","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/ロッテリア":{"tags":{"name":"ロッテリア","amenity":"fast_food"},"name":"ロッテリア","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/吉野家":{"tags":{"name":"吉野家","amenity":"fast_food"},"name":"吉野家","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/幸楽苑":{"tags":{"name":"幸楽苑","amenity":"fast_food"},"name":"幸楽苑","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/摩斯漢堡":{"tags":{"name":"摩斯漢堡","amenity":"fast_food"},"name":"摩斯漢堡","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/松屋":{"tags":{"name":"松屋","name:en":"Matsuya","amenity":"fast_food"},"name":"松屋","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/肯德基":{"tags":{"name":"肯德基","amenity":"fast_food"},"name":"肯德基","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/麥當勞":{"tags":{"name":"麥當勞","amenity":"fast_food"},"name":"麥當勞","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/麦当劳":{"tags":{"name":"麦当劳","amenity":"fast_food"},"name":"麦当劳","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/롯데리아":{"tags":{"name":"롯데리아","amenity":"fast_food"},"name":"롯데리아","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fuel/76":{"tags":{"name":"76","amenity":"fuel"},"name":"76","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/1-2-3":{"tags":{"name":"1-2-3","amenity":"fuel"},"name":"1-2-3","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ADNOC":{"tags":{"name":"ADNOC","amenity":"fuel"},"name":"ADNOC","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ANP":{"tags":{"name":"ANP","amenity":"fuel"},"name":"ANP","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ARAL":{"tags":{"name":"ARAL","amenity":"fuel"},"name":"ARAL","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Aegean":{"tags":{"name":"Aegean","amenity":"fuel"},"name":"Aegean","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Afriquia":{"tags":{"name":"Afriquia","amenity":"fuel"},"name":"Afriquia","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Agip":{"tags":{"name":"Agip","amenity":"fuel"},"name":"Agip","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Agrola":{"tags":{"name":"Agrola","amenity":"fuel"},"name":"Agrola","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Alon":{"tags":{"name":"Alon","amenity":"fuel"},"name":"Alon","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Alpet":{"tags":{"name":"Alpet","amenity":"fuel"},"name":"Alpet","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Api":{"tags":{"name":"Api","amenity":"fuel"},"name":"Api","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Aral":{"tags":{"name":"Aral","amenity":"fuel"},"name":"Aral","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Arco":{"tags":{"name":"Arco","amenity":"fuel"},"name":"Arco","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Avanti":{"tags":{"name":"Avanti","amenity":"fuel"},"name":"Avanti","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Avia":{"tags":{"name":"Avia","amenity":"fuel"},"name":"Avia","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/BEBECO":{"tags":{"name":"BEBECO","amenity":"fuel"},"name":"BEBECO","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/BFT":{"tags":{"name":"BFT","amenity":"fuel"},"name":"BFT","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/BHPetrol":{"tags":{"name":"BHPetrol","amenity":"fuel"},"name":"BHPetrol","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/BP":{"tags":{"name":"BP","amenity":"fuel"},"name":"BP","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/BR":{"tags":{"name":"BR","amenity":"fuel"},"name":"BR","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Bangchak":{"tags":{"name":"Bangchak","amenity":"fuel"},"name":"Bangchak","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Benzina":{"tags":{"name":"Benzina","amenity":"fuel"},"name":"Benzina","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Bharat Petroleum":{"tags":{"name":"Bharat Petroleum","amenity":"fuel"},"name":"Bharat Petroleum","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Bliska":{"tags":{"name":"Bliska","amenity":"fuel"},"name":"Bliska","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/CAMPSA":{"tags":{"name":"CAMPSA","amenity":"fuel"},"name":"CAMPSA","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/CARREFOUR":{"tags":{"name":"CARREFOUR","amenity":"fuel"},"name":"CARREFOUR","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/CEPSA":{"tags":{"name":"CEPSA","amenity":"fuel"},"name":"CEPSA","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/CNG":{"tags":{"name":"CNG","amenity":"fuel"},"name":"CNG","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Caltex":{"tags":{"name":"Caltex","amenity":"fuel"},"name":"Caltex","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Campsa":{"tags":{"name":"Campsa","amenity":"fuel"},"name":"Campsa","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Casey's General Store":{"tags":{"name":"Casey's General Store","amenity":"fuel"},"name":"Casey's General Store","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Cenex":{"tags":{"name":"Cenex","amenity":"fuel"},"name":"Cenex","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Cepsa":{"tags":{"name":"Cepsa","amenity":"fuel"},"name":"Cepsa","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Ceypetco":{"tags":{"name":"Ceypetco","amenity":"fuel"},"name":"Ceypetco","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Chevron":{"tags":{"name":"Chevron","amenity":"fuel"},"name":"Chevron","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Citgo":{"tags":{"name":"Citgo","amenity":"fuel"},"name":"Citgo","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Clark":{"tags":{"name":"Clark","amenity":"fuel"},"name":"Clark","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Coles Express":{"tags":{"name":"Coles Express","amenity":"fuel"},"name":"Coles Express","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Conoco":{"tags":{"name":"Conoco","amenity":"fuel"},"name":"Conoco","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Copec":{"tags":{"name":"Copec","amenity":"fuel"},"name":"Copec","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Copetrol":{"tags":{"name":"Copetrol","amenity":"fuel"},"name":"Copetrol","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Cosmo":{"tags":{"name":"Cosmo","amenity":"fuel"},"name":"Cosmo","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Crodux":{"tags":{"name":"Crodux","amenity":"fuel"},"name":"Crodux","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Delta":{"tags":{"name":"Delta","amenity":"fuel"},"name":"Delta","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Diamond Shamrock":{"tags":{"name":"Diamond Shamrock","amenity":"fuel"},"name":"Diamond Shamrock","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Drummed Fuel":{"tags":{"name":"Drummed Fuel","amenity":"fuel"},"name":"Drummed Fuel","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/EKO":{"tags":{"name":"EKO","amenity":"fuel"},"name":"EKO","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ENEOS":{"tags":{"name":"ENEOS","amenity":"fuel"},"name":"ENEOS","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ENI":{"tags":{"name":"ENI","amenity":"fuel"},"name":"ENI","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ERG":{"tags":{"name":"ERG","amenity":"fuel"},"name":"ERG","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Elan":{"tags":{"name":"Elan","amenity":"fuel"},"name":"Elan","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Eneos":{"tags":{"name":"Eneos","amenity":"fuel"},"name":"Eneos","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Engen":{"tags":{"name":"Engen","amenity":"fuel"},"name":"Engen","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Eni":{"tags":{"name":"Eni","amenity":"fuel"},"name":"Eni","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Erg":{"tags":{"name":"Erg","amenity":"fuel"},"name":"Erg","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Esso":{"tags":{"name":"Esso","amenity":"fuel"},"name":"Esso","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Esso Express":{"tags":{"name":"Esso Express","amenity":"fuel"},"name":"Esso Express","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/EuroOil":{"tags":{"name":"EuroOil","amenity":"fuel"},"name":"EuroOil","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Exxon":{"tags":{"name":"Exxon","amenity":"fuel"},"name":"Exxon","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/F24":{"tags":{"name":"F24","amenity":"fuel"},"name":"F24","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Firezone":{"tags":{"name":"Firezone","amenity":"fuel"},"name":"Firezone","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Flying V":{"tags":{"name":"Flying V","amenity":"fuel"},"name":"Flying V","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/GALP":{"tags":{"name":"GALP","amenity":"fuel"},"name":"GALP","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Gazprom":{"tags":{"name":"Gazprom","amenity":"fuel"},"name":"Gazprom","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/GetGo":{"tags":{"name":"GetGo","amenity":"fuel"},"name":"GetGo","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Goil":{"tags":{"name":"Goil","amenity":"fuel"},"name":"Goil","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Gulf":{"tags":{"name":"Gulf","amenity":"fuel"},"name":"Gulf","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/H-E-B Fuel":{"tags":{"name":"H-E-B Fuel","amenity":"fuel"},"name":"H-E-B Fuel","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/H-E-B Gas":{"tags":{"name":"H-E-B Gas","amenity":"fuel"},"name":"H-E-B Gas","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/HEM":{"tags":{"name":"HEM","amenity":"fuel"},"name":"HEM","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/HP":{"tags":{"name":"HP","amenity":"fuel"},"name":"HP","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/HP Petrol Pump":{"tags":{"name":"HP Petrol Pump","amenity":"fuel"},"name":"HP Petrol Pump","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Helios":{"tags":{"name":"Helios","amenity":"fuel"},"name":"Helios","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Hess":{"tags":{"name":"Hess","amenity":"fuel"},"name":"Hess","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Hindustan Petroleum":{"tags":{"name":"Hindustan Petroleum","amenity":"fuel"},"name":"Hindustan Petroleum","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Holiday":{"tags":{"name":"Holiday","amenity":"fuel"},"name":"Holiday","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Husky":{"tags":{"name":"Husky","amenity":"fuel"},"name":"Husky","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/IES":{"tags":{"name":"IES","amenity":"fuel"},"name":"IES","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/IP":{"tags":{"name":"IP","amenity":"fuel"},"name":"IP","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Independent Fuel Station":{"tags":{"name":"Independent Fuel Station","amenity":"fuel"},"name":"Independent Fuel Station","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Indian Oil":{"tags":{"name":"Indian Oil","amenity":"fuel"},"name":"Indian Oil","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Indipend.":{"tags":{"name":"Indipend.","amenity":"fuel"},"name":"Indipend.","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Ingo":{"tags":{"name":"Ingo","amenity":"fuel"},"name":"Ingo","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Ipiranga":{"tags":{"name":"Ipiranga","amenity":"fuel"},"name":"Ipiranga","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Irving":{"tags":{"name":"Irving","amenity":"fuel"},"name":"Irving","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/JA-SS":{"tags":{"name":"JA-SS","amenity":"fuel"},"name":"JA-SS","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/JOMO":{"tags":{"name":"JOMO","amenity":"fuel"},"name":"JOMO","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Jet":{"tags":{"name":"Jet","amenity":"fuel"},"name":"Jet","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Jetti":{"tags":{"name":"Jetti","amenity":"fuel"},"name":"Jetti","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Kangaroo":{"tags":{"name":"Kangaroo","amenity":"fuel"},"name":"Kangaroo","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Kobil":{"tags":{"name":"Kobil","amenity":"fuel"},"name":"Kobil","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Kroger Fuel":{"tags":{"name":"Kroger Fuel","amenity":"fuel"},"name":"Kroger Fuel","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Kum & Go":{"tags":{"name":"Kum & Go","amenity":"fuel"},"name":"Kum & Go","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Kwik Trip":{"tags":{"name":"Kwik Trip","amenity":"fuel"},"name":"Kwik Trip","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/LPG":{"tags":{"name":"LPG","amenity":"fuel"},"name":"LPG","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/LPG Station":{"tags":{"name":"LPG Station","amenity":"fuel"},"name":"LPG Station","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/LUKOIL":{"tags":{"name":"LUKOIL","amenity":"fuel"},"name":"LUKOIL","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Liberty":{"tags":{"name":"Liberty","amenity":"fuel"},"name":"Liberty","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Lotos":{"tags":{"name":"Lotos","amenity":"fuel"},"name":"Lotos","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Lotos Optima":{"tags":{"name":"Lotos Optima","amenity":"fuel"},"name":"Lotos Optima","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Love's":{"tags":{"name":"Love's","amenity":"fuel"},"name":"Love's","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Lukoil":{"tags":{"name":"Lukoil","amenity":"fuel"},"name":"Lukoil","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/MEROIL":{"tags":{"name":"MEROIL","amenity":"fuel"},"name":"MEROIL","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/MOL":{"tags":{"name":"MOL","amenity":"fuel"},"name":"MOL","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/MRS":{"tags":{"name":"MRS","amenity":"fuel"},"name":"MRS","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Marathon":{"tags":{"name":"Marathon","amenity":"fuel"},"name":"Marathon","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Maverik":{"tags":{"name":"Maverik","amenity":"fuel"},"name":"Maverik","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Maxol":{"tags":{"name":"Maxol","amenity":"fuel"},"name":"Maxol","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Metano":{"tags":{"name":"Metano","amenity":"fuel"},"name":"Metano","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Migrol":{"tags":{"name":"Migrol","amenity":"fuel"},"name":"Migrol","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Minipump":{"tags":{"name":"Minipump","amenity":"fuel"},"name":"Minipump","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Mobil":{"tags":{"name":"Mobil","amenity":"fuel"},"name":"Mobil","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Mobile":{"tags":{"name":"Mobile","amenity":"fuel"},"name":"Mobile","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Mol":{"tags":{"name":"Mol","amenity":"fuel"},"name":"Mol","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Moya":{"tags":{"name":"Moya","amenity":"fuel"},"name":"Moya","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Murphy USA":{"tags":{"name":"Murphy USA","amenity":"fuel"},"name":"Murphy USA","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Neste":{"tags":{"name":"Neste","amenity":"fuel"},"name":"Neste","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/OIL!":{"tags":{"name":"OIL!","amenity":"fuel"},"name":"OIL!","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/OK":{"tags":{"name":"OK","amenity":"fuel"},"name":"OK","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/OKQ8":{"tags":{"name":"OKQ8","amenity":"fuel"},"name":"OKQ8","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/OMV":{"tags":{"name":"OMV","amenity":"fuel"},"name":"OMV","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Oilibya":{"tags":{"name":"Oilibya","amenity":"fuel"},"name":"Oilibya","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Opet":{"tags":{"name":"Opet","amenity":"fuel"},"name":"Opet","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Orlen":{"tags":{"name":"Orlen","amenity":"fuel"},"name":"Orlen","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/PETRONOR":{"tags":{"name":"PETRONOR","amenity":"fuel"},"name":"PETRONOR","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/PSO":{"tags":{"name":"PSO","amenity":"fuel"},"name":"PSO","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/PSO Petrol Pump":{"tags":{"name":"PSO Petrol Pump","amenity":"fuel"},"name":"PSO Petrol Pump","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/PT":{"tags":{"name":"PT","amenity":"fuel"},"name":"PT","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/PTT":{"tags":{"name":"PTT","amenity":"fuel"},"name":"PTT","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/PV Oil":{"tags":{"name":"PV Oil","amenity":"fuel"},"name":"PV Oil","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Pacific Pride":{"tags":{"name":"Pacific Pride","amenity":"fuel"},"name":"Pacific Pride","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Pecsa":{"tags":{"name":"Pecsa","amenity":"fuel"},"name":"Pecsa","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Pemex":{"tags":{"name":"Pemex","amenity":"fuel"},"name":"Pemex","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Pertamina":{"tags":{"name":"Pertamina","amenity":"fuel"},"name":"Pertamina","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petro":{"tags":{"name":"Petro","amenity":"fuel"},"name":"Petro","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petro-Canada":{"tags":{"name":"Petro-Canada","amenity":"fuel"},"name":"Petro-Canada","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petrobras":{"tags":{"name":"Petrobras","amenity":"fuel"},"name":"Petrobras","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petrochina":{"tags":{"name":"Petrochina","amenity":"fuel"},"name":"Petrochina","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petroecuador":{"tags":{"name":"Petroecuador","amenity":"fuel"},"name":"Petroecuador","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petrol Ofisi":{"tags":{"name":"Petrol Ofisi","amenity":"fuel"},"name":"Petrol Ofisi","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petrolimex":{"tags":{"name":"Petrolimex","amenity":"fuel"},"name":"Petrolimex","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petrom":{"tags":{"name":"Petrom","amenity":"fuel"},"name":"Petrom","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petron":{"tags":{"name":"Petron","amenity":"fuel"},"name":"Petron","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petronas":{"tags":{"name":"Petronas","amenity":"fuel"},"name":"Petronas","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petroperu":{"tags":{"name":"Petroperu","amenity":"fuel"},"name":"Petroperu","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Phillips 66":{"tags":{"name":"Phillips 66","amenity":"fuel"},"name":"Phillips 66","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Phoenix":{"tags":{"name":"Phoenix","amenity":"fuel"},"name":"Phoenix","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Pilot":{"tags":{"name":"Pilot","amenity":"fuel"},"name":"Pilot","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Pioneer":{"tags":{"name":"Pioneer","amenity":"fuel"},"name":"Pioneer","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Posto":{"tags":{"name":"Posto","amenity":"fuel"},"name":"Posto","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Posto Atem":{"tags":{"name":"Posto Atem","amenity":"fuel"},"name":"Posto Atem","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Posto BR":{"tags":{"name":"Posto BR","amenity":"fuel"},"name":"Posto BR","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Posto Ipiranga":{"tags":{"name":"Posto Ipiranga","amenity":"fuel"},"name":"Posto Ipiranga","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Posto Shell":{"tags":{"name":"Posto Shell","amenity":"fuel"},"name":"Posto Shell","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Primax":{"tags":{"name":"Primax","amenity":"fuel"},"name":"Primax","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Prio":{"tags":{"name":"Prio","amenity":"fuel"},"name":"Prio","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Puma":{"tags":{"name":"Puma","amenity":"fuel"},"name":"Puma","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Q1":{"tags":{"name":"Q1","amenity":"fuel"},"name":"Q1","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Q8":{"tags":{"name":"Q8","amenity":"fuel"},"name":"Q8","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Q8 Easy":{"tags":{"name":"Q8 Easy","amenity":"fuel"},"name":"Q8 Easy","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/QuikTrip":{"tags":{"name":"QuikTrip","amenity":"fuel"},"name":"QuikTrip","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/REPSOL":{"tags":{"name":"REPSOL","amenity":"fuel"},"name":"REPSOL","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/RaceTrac":{"tags":{"name":"RaceTrac","amenity":"fuel"},"name":"RaceTrac","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Repsol":{"tags":{"name":"Repsol","amenity":"fuel"},"name":"Repsol","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Rompetrol":{"tags":{"name":"Rompetrol","amenity":"fuel"},"name":"Rompetrol","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Rubis":{"tags":{"name":"Rubis","amenity":"fuel"},"name":"Rubis","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/SB Tank":{"tags":{"name":"SB Tank","amenity":"fuel"},"name":"SB Tank","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/SPBU":{"tags":{"name":"SPBU","amenity":"fuel"},"name":"SPBU","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sasol":{"tags":{"name":"Sasol","amenity":"fuel"},"name":"Sasol","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sea Oil":{"tags":{"name":"Sea Oil","amenity":"fuel"},"name":"Sea Oil","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sheetz":{"tags":{"name":"Sheetz","amenity":"fuel"},"name":"Sheetz","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Shell":{"tags":{"name":"Shell","amenity":"fuel"},"name":"Shell","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Shell Express":{"tags":{"name":"Shell Express","amenity":"fuel"},"name":"Shell Express","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sinclair":{"tags":{"name":"Sinclair","amenity":"fuel"},"name":"Sinclair","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sinopec":{"tags":{"name":"Sinopec","amenity":"fuel"},"name":"Sinopec","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sinopec Fuel":{"tags":{"name":"Sinopec Fuel","amenity":"fuel"},"name":"Sinopec Fuel","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Slovnaft":{"tags":{"name":"Slovnaft","amenity":"fuel"},"name":"Slovnaft","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Socar":{"tags":{"name":"Socar","amenity":"fuel"},"name":"Socar","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sokimex":{"tags":{"name":"Sokimex","amenity":"fuel"},"name":"Sokimex","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Speedway":{"tags":{"name":"Speedway","amenity":"fuel"},"name":"Speedway","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/St1":{"tags":{"name":"St1","amenity":"fuel"},"name":"St1","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Star":{"tags":{"name":"Star","amenity":"fuel"},"name":"Star","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Star Oil":{"tags":{"name":"Star Oil","amenity":"fuel"},"name":"Star Oil","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Station Service E. Leclerc":{"tags":{"name":"Station Service E. Leclerc","amenity":"fuel"},"name":"Station Service E. Leclerc","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Statoil":{"tags":{"name":"Statoil","amenity":"fuel"},"name":"Statoil","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sunoco":{"tags":{"name":"Sunoco","amenity":"fuel"},"name":"Sunoco","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Tamoil":{"tags":{"name":"Tamoil","amenity":"fuel"},"name":"Tamoil","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Tango":{"tags":{"name":"Tango","amenity":"fuel"},"name":"Tango","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Teboil":{"tags":{"name":"Teboil","amenity":"fuel"},"name":"Teboil","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Tela":{"tags":{"name":"Tela","amenity":"fuel"},"name":"Tela","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Terpel":{"tags":{"name":"Terpel","amenity":"fuel"},"name":"Terpel","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Texaco":{"tags":{"name":"Texaco","amenity":"fuel"},"name":"Texaco","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Tinq":{"tags":{"name":"Tinq","amenity":"fuel"},"name":"Tinq","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Topaz":{"tags":{"name":"Topaz","amenity":"fuel"},"name":"Topaz","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Total":{"tags":{"name":"Total","amenity":"fuel"},"name":"Total","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Total Access":{"tags":{"name":"Total Access","amenity":"fuel"},"name":"Total Access","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Total Erg":{"tags":{"name":"Total Erg","amenity":"fuel"},"name":"Total Erg","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/TotalErg":{"tags":{"name":"TotalErg","amenity":"fuel"},"name":"TotalErg","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Turkey Hill":{"tags":{"name":"Turkey Hill","amenity":"fuel"},"name":"Turkey Hill","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Turmöl":{"tags":{"name":"Turmöl","amenity":"fuel"},"name":"Turmöl","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Ultramar":{"tags":{"name":"Ultramar","amenity":"fuel"},"name":"Ultramar","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/United":{"tags":{"name":"United","amenity":"fuel"},"name":"United","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Uno":{"tags":{"name":"Uno","amenity":"fuel"},"name":"Uno","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Uno-X":{"tags":{"name":"Uno-X","amenity":"fuel"},"name":"Uno-X","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Valero":{"tags":{"name":"Valero","amenity":"fuel"},"name":"Valero","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Vito":{"tags":{"name":"Vito","amenity":"fuel"},"name":"Vito","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/WOG":{"tags":{"name":"WOG","amenity":"fuel"},"name":"WOG","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Westfalen":{"tags":{"name":"Westfalen","amenity":"fuel"},"name":"Westfalen","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Woolworths Petrol":{"tags":{"name":"Woolworths Petrol","amenity":"fuel"},"name":"Woolworths Petrol","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Z":{"tags":{"name":"Z","amenity":"fuel"},"name":"Z","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/bft":{"tags":{"name":"bft","amenity":"fuel"},"name":"bft","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/eni":{"tags":{"name":"eni","amenity":"fuel"},"name":"eni","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ΕΚΟ":{"tags":{"name":"ΕΚΟ","amenity":"fuel"},"name":"ΕΚΟ","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/АГЗС":{"tags":{"name":"АГЗС","amenity":"fuel"},"name":"АГЗС","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/АЗС":{"tags":{"name":"АЗС","amenity":"fuel"},"name":"АЗС","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Авіас":{"tags":{"name":"Авіас","amenity":"fuel"},"name":"Авіас","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/БРСМ-Нафта":{"tags":{"name":"БРСМ-Нафта","amenity":"fuel"},"name":"БРСМ-Нафта","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Башнефть":{"tags":{"name":"Башнефть","amenity":"fuel"},"name":"Башнефть","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Белоруснефть":{"tags":{"name":"Белоруснефть","amenity":"fuel"},"name":"Белоруснефть","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Газовая заправка":{"tags":{"name":"Газовая заправка","amenity":"fuel"},"name":"Газовая заправка","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Газпромнефть":{"tags":{"name":"Газпромнефть","amenity":"fuel"},"name":"Газпромнефть","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Гелиос":{"tags":{"name":"Гелиос","amenity":"fuel"},"name":"Гелиос","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ЕКА":{"tags":{"name":"ЕКА","amenity":"fuel"},"name":"ЕКА","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Заправка":{"tags":{"name":"Заправка","amenity":"fuel"},"name":"Заправка","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/КазМунайГаз":{"tags":{"name":"КазМунайГаз","amenity":"fuel"},"name":"КазМунайГаз","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Лукойл":{"tags":{"name":"Лукойл","amenity":"fuel"},"name":"Лукойл","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Макпетрол":{"tags":{"name":"Макпетрол","amenity":"fuel"},"name":"Макпетрол","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/НК Альянс":{"tags":{"name":"НК Альянс","amenity":"fuel"},"name":"НК Альянс","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Нефтьмагистраль":{"tags":{"name":"Нефтьмагистраль","amenity":"fuel"},"name":"Нефтьмагистраль","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ОККО":{"tags":{"name":"ОККО","amenity":"fuel"},"name":"ОККО","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ОМВ":{"tags":{"name":"ОМВ","amenity":"fuel"},"name":"ОМВ","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Октан":{"tags":{"name":"Октан","amenity":"fuel"},"name":"Октан","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ПТК":{"tags":{"name":"ПТК","amenity":"fuel"},"name":"ПТК","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Петрол":{"tags":{"name":"Петрол","amenity":"fuel"},"name":"Петрол","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Пропан":{"tags":{"name":"Пропан","amenity":"fuel"},"name":"Пропан","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Роснефть":{"tags":{"name":"Роснефть","amenity":"fuel"},"name":"Роснефть","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Сибнефть":{"tags":{"name":"Сибнефть","amenity":"fuel"},"name":"Сибнефть","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Сургутнефтегаз":{"tags":{"name":"Сургутнефтегаз","amenity":"fuel"},"name":"Сургутнефтегаз","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ТНК":{"tags":{"name":"ТНК","amenity":"fuel"},"name":"ТНК","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Татнефтепродукт":{"tags":{"name":"Татнефтепродукт","amenity":"fuel"},"name":"Татнефтепродукт","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Татнефть":{"tags":{"name":"Татнефть","amenity":"fuel"},"name":"Татнефть","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Укрнафта":{"tags":{"name":"Укрнафта","amenity":"fuel"},"name":"Укрнафта","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/דור אלון":{"tags":{"name":"דור אלון","amenity":"fuel"},"name":"דור אלון","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/דלק":{"tags":{"name":"דלק","amenity":"fuel"},"name":"דלק","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/סונול":{"tags":{"name":"סונול","amenity":"fuel"},"name":"סונול","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/פז":{"tags":{"name":"פז","amenity":"fuel"},"name":"פז","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/محطة وقود":{"tags":{"name":"محطة وقود","amenity":"fuel"},"name":"محطة وقود","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/محطه وقود":{"tags":{"name":"محطه وقود","amenity":"fuel"},"name":"محطه وقود","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/پمپ بنزین":{"tags":{"name":"پمپ بنزین","amenity":"fuel"},"name":"پمپ بنزین","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/پمپ گاز":{"tags":{"name":"پمپ گاز","amenity":"fuel"},"name":"پمپ گاز","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/บางจาก":{"tags":{"name":"บางจาก","amenity":"fuel"},"name":"บางจาก","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ป.ต.ท.":{"tags":{"name":"ป.ต.ท.","amenity":"fuel"},"name":"ป.ต.ท.","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/เชลล์":{"tags":{"name":"เชลล์","amenity":"fuel"},"name":"เชลล์","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/เอสโซ่":{"tags":{"name":"เอสโซ่","amenity":"fuel"},"name":"เอสโซ่","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/エッソ":{"tags":{"name":"エッソ","amenity":"fuel"},"name":"エッソ","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/エネオス":{"tags":{"name":"エネオス","amenity":"fuel"},"name":"エネオス","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/コスモ石油":{"tags":{"name":"コスモ石油","amenity":"fuel"},"name":"コスモ石油","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ゼネラル":{"tags":{"name":"ゼネラル","amenity":"fuel"},"name":"ゼネラル","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/中国石化":{"tags":{"name":"中国石化","amenity":"fuel"},"name":"中国石化","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/中国石化 Sinopec":{"tags":{"name":"中国石化 Sinopec","amenity":"fuel"},"name":"中国石化 Sinopec","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/中国石油":{"tags":{"name":"中国石油","amenity":"fuel"},"name":"中国石油","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/中油":{"tags":{"name":"中油","amenity":"fuel"},"name":"中油","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/出光":{"tags":{"name":"出光","name:en":"IDEMITSU","amenity":"fuel"},"name":"出光","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/加油站":{"tags":{"name":"加油站","amenity":"fuel"},"name":"加油站","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/台灣中油":{"tags":{"name":"台灣中油","amenity":"fuel"},"name":"台灣中油","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/昭和シェル":{"tags":{"name":"昭和シェル","amenity":"fuel"},"name":"昭和シェル","icon":"fuel","geometry":["point","area"],"fields":["name","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/hospital/Cruz Roja":{"tags":{"name":"Cruz Roja","healthcare":"hospital","amenity":"hospital"},"name":"Cruz Roja","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/IMSS":{"tags":{"name":"IMSS","healthcare":"hospital","amenity":"hospital"},"name":"IMSS","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Инфекционное отделение":{"tags":{"name":"Инфекционное отделение","healthcare":"hospital","amenity":"hospital"},"name":"Инфекционное отделение","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Кожно-венерологический диспансер":{"tags":{"name":"Кожно-венерологический диспансер","healthcare":"hospital","amenity":"hospital"},"name":"Кожно-венерологический диспансер","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Районная больница":{"tags":{"name":"Районная больница","healthcare":"hospital","amenity":"hospital"},"name":"Районная больница","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Роддом":{"tags":{"name":"Роддом","healthcare":"hospital","amenity":"hospital"},"name":"Роддом","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Родильный дом":{"tags":{"name":"Родильный дом","healthcare":"hospital","amenity":"hospital"},"name":"Родильный дом","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Скорая помощь":{"tags":{"name":"Скорая помощь","healthcare":"hospital","amenity":"hospital"},"name":"Скорая помощь","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/ЦРБ":{"tags":{"name":"ЦРБ","healthcare":"hospital","amenity":"hospital"},"name":"ЦРБ","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Центральная районная больница":{"tags":{"name":"Центральная районная больница","healthcare":"hospital","amenity":"hospital"},"name":"Центральная районная больница","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/โรงพยาบาลส่งเสริมสุขภาพตำบล":{"tags":{"name":"โรงพยาบาลส่งเสริมสุขภาพตำบล","healthcare":"hospital","amenity":"hospital"},"name":"โรงพยาบาลส่งเสริมสุขภาพตำบล","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/ice_cream/Grido":{"tags":{"name":"Grido","amenity":"ice_cream"},"name":"Grido","icon":"ice-cream","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","takeaway","delivery","outdoor_seating"],"suggestion":true},"amenity/kindergarten/Anganwadi":{"tags":{"name":"Anganwadi","amenity":"kindergarten"},"name":"Anganwadi","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Arche Noah":{"tags":{"name":"Arche Noah","amenity":"kindergarten"},"name":"Arche Noah","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/CONAFE Preescolar":{"tags":{"name":"CONAFE Preescolar","amenity":"kindergarten"},"name":"CONAFE Preescolar","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Educacion Inicial de CONAFE No Escolarizado":{"tags":{"name":"Educacion Inicial de CONAFE No Escolarizado","amenity":"kindergarten"},"name":"Educacion Inicial de CONAFE No Escolarizado","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Estefania Casta�eda":{"tags":{"name":"Estefania Casta�eda","amenity":"kindergarten"},"name":"Estefania Casta�eda","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Evangelischer Kindergarten":{"tags":{"name":"Evangelischer Kindergarten","amenity":"kindergarten"},"name":"Evangelischer Kindergarten","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Federico Froebel":{"tags":{"name":"Federico Froebel","amenity":"kindergarten"},"name":"Federico Froebel","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Gabriela Mistral":{"tags":{"name":"Gabriela Mistral","amenity":"kindergarten"},"name":"Gabriela Mistral","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Jean Piaget":{"tags":{"name":"Jean Piaget","amenity":"kindergarten"},"name":"Jean Piaget","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Katholischer Kindergarten":{"tags":{"name":"Katholischer Kindergarten","amenity":"kindergarten"},"name":"Katholischer Kindergarten","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Kindergarten Regenbogen":{"tags":{"name":"Kindergarten Regenbogen","amenity":"kindergarten"},"name":"Kindergarten Regenbogen","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Kindergarten St. Josef":{"tags":{"name":"Kindergarten St. Josef","amenity":"kindergarten"},"name":"Kindergarten St. Josef","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Kindergarten St. Martin":{"tags":{"name":"Kindergarten St. Martin","amenity":"kindergarten"},"name":"Kindergarten St. Martin","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Maria Montessori":{"tags":{"name":"Maria Montessori","amenity":"kindergarten"},"name":"Maria Montessori","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/PAUD":{"tags":{"name":"PAUD","amenity":"kindergarten"},"name":"PAUD","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Pusteblume":{"tags":{"name":"Pusteblume","amenity":"kindergarten"},"name":"Pusteblume","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Rosaura Zapata":{"tags":{"name":"Rosaura Zapata","amenity":"kindergarten"},"name":"Rosaura Zapata","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Sor Juana Ines De La Cruz":{"tags":{"name":"Sor Juana Ines De La Cruz","amenity":"kindergarten"},"name":"Sor Juana Ines De La Cruz","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Spatzennest":{"tags":{"name":"Spatzennest","amenity":"kindergarten"},"name":"Spatzennest","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Städtischer Kindergarten":{"tags":{"name":"Städtischer Kindergarten","amenity":"kindergarten"},"name":"Städtischer Kindergarten","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Villa Kunterbunt":{"tags":{"name":"Villa Kunterbunt","amenity":"kindergarten"},"name":"Villa Kunterbunt","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Waldkindergarten":{"tags":{"name":"Waldkindergarten","amenity":"kindergarten"},"name":"Waldkindergarten","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Waldorfkindergarten":{"tags":{"name":"Waldorfkindergarten","amenity":"kindergarten"},"name":"Waldorfkindergarten","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Óvoda":{"tags":{"name":"Óvoda","amenity":"kindergarten"},"name":"Óvoda","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детсад":{"tags":{"name":"Детсад","amenity":"kindergarten"},"name":"Детсад","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад Солнышко":{"tags":{"name":"Детский сад Солнышко","amenity":"kindergarten"},"name":"Детский сад Солнышко","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад № 1":{"tags":{"name":"Детский сад № 1","amenity":"kindergarten"},"name":"Детский сад № 1","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №1":{"tags":{"name":"Детский сад №1","amenity":"kindergarten"},"name":"Детский сад №1","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №10":{"tags":{"name":"Детский сад №10","amenity":"kindergarten"},"name":"Детский сад №10","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №11":{"tags":{"name":"Детский сад №11","amenity":"kindergarten"},"name":"Детский сад №11","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №12":{"tags":{"name":"Детский сад №12","amenity":"kindergarten"},"name":"Детский сад №12","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №13":{"tags":{"name":"Детский сад №13","amenity":"kindergarten"},"name":"Детский сад №13","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №14":{"tags":{"name":"Детский сад №14","amenity":"kindergarten"},"name":"Детский сад №14","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №15":{"tags":{"name":"Детский сад №15","amenity":"kindergarten"},"name":"Детский сад №15","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №16":{"tags":{"name":"Детский сад №16","amenity":"kindergarten"},"name":"Детский сад №16","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №17":{"tags":{"name":"Детский сад №17","amenity":"kindergarten"},"name":"Детский сад №17","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №18":{"tags":{"name":"Детский сад №18","amenity":"kindergarten"},"name":"Детский сад №18","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №19":{"tags":{"name":"Детский сад №19","amenity":"kindergarten"},"name":"Детский сад №19","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №2":{"tags":{"name":"Детский сад №2","amenity":"kindergarten"},"name":"Детский сад №2","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №22":{"tags":{"name":"Детский сад №22","amenity":"kindergarten"},"name":"Детский сад №22","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №24":{"tags":{"name":"Детский сад №24","amenity":"kindergarten"},"name":"Детский сад №24","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №25":{"tags":{"name":"Детский сад №25","amenity":"kindergarten"},"name":"Детский сад №25","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №27":{"tags":{"name":"Детский сад №27","amenity":"kindergarten"},"name":"Детский сад №27","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №29":{"tags":{"name":"Детский сад №29","amenity":"kindergarten"},"name":"Детский сад №29","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №3":{"tags":{"name":"Детский сад №3","amenity":"kindergarten"},"name":"Детский сад №3","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №33":{"tags":{"name":"Детский сад №33","amenity":"kindergarten"},"name":"Детский сад №33","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №4":{"tags":{"name":"Детский сад №4","amenity":"kindergarten"},"name":"Детский сад №4","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №5":{"tags":{"name":"Детский сад №5","amenity":"kindergarten"},"name":"Детский сад №5","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №6":{"tags":{"name":"Детский сад №6","amenity":"kindergarten"},"name":"Детский сад №6","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №7":{"tags":{"name":"Детский сад №7","amenity":"kindergarten"},"name":"Детский сад №7","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №8":{"tags":{"name":"Детский сад №8","amenity":"kindergarten"},"name":"Детский сад №8","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №9":{"tags":{"name":"Детский сад №9","amenity":"kindergarten"},"name":"Детский сад №9","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Дитячий садок":{"tags":{"name":"Дитячий садок","amenity":"kindergarten"},"name":"Дитячий садок","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Солнышко":{"tags":{"name":"Солнышко","amenity":"kindergarten"},"name":"Солнышко","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/საბავშვო ბაღი":{"tags":{"name":"საბავშვო ბაღი","amenity":"kindergarten"},"name":"საბავშვო ბაღი","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/中央保育所":{"tags":{"name":"中央保育所","amenity":"kindergarten"},"name":"中央保育所","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/library/Biblioteca Comunale":{"tags":{"name":"Biblioteca Comunale","amenity":"library"},"name":"Biblioteca Comunale","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Biblioteca comunale":{"tags":{"name":"Biblioteca comunale","amenity":"library"},"name":"Biblioteca comunale","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Biblioteka Publiczna":{"tags":{"name":"Biblioteka Publiczna","amenity":"library"},"name":"Biblioteka Publiczna","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Bibliothèque Municipale":{"tags":{"name":"Bibliothèque Municipale","amenity":"library"},"name":"Bibliothèque Municipale","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Bibliothèque municipale":{"tags":{"name":"Bibliothèque municipale","amenity":"library"},"name":"Bibliothèque municipale","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Bücherei":{"tags":{"name":"Bücherei","amenity":"library"},"name":"Bücherei","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Central Library":{"tags":{"name":"Central Library","amenity":"library"},"name":"Central Library","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Gemeindebücherei":{"tags":{"name":"Gemeindebücherei","amenity":"library"},"name":"Gemeindebücherei","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Gminna Biblioteka Publiczna":{"tags":{"name":"Gminna Biblioteka Publiczna","amenity":"library"},"name":"Gminna Biblioteka Publiczna","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Miejska Biblioteka Publiczna":{"tags":{"name":"Miejska Biblioteka Publiczna","amenity":"library"},"name":"Miejska Biblioteka Publiczna","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Médiathèque":{"tags":{"name":"Médiathèque","amenity":"library"},"name":"Médiathèque","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Městská knihovna":{"tags":{"name":"Městská knihovna","amenity":"library"},"name":"Městská knihovna","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Public Library":{"tags":{"name":"Public Library","amenity":"library"},"name":"Public Library","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Stadtbibliothek":{"tags":{"name":"Stadtbibliothek","amenity":"library"},"name":"Stadtbibliothek","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Stadtbücherei":{"tags":{"name":"Stadtbücherei","amenity":"library"},"name":"Stadtbücherei","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Городская библиотека":{"tags":{"name":"Городская библиотека","amenity":"library"},"name":"Городская библиотека","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Детская библиотека":{"tags":{"name":"Детская библиотека","amenity":"library"},"name":"Детская библиотека","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Центральная библиотека":{"tags":{"name":"Центральная библиотека","amenity":"library"},"name":"Центральная библиотека","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Центральная городская библиотека":{"tags":{"name":"Центральная городская библиотека","amenity":"library"},"name":"Центральная городская библиотека","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/图书馆":{"tags":{"name":"图书馆","amenity":"library"},"name":"图书馆","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/pharmacy/36.6":{"tags":{"name":"36.6","healthcare":"pharmacy","amenity":"pharmacy"},"name":"36.6","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Adler-Apotheke":{"tags":{"name":"Adler-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Adler-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Alte Apotheke":{"tags":{"name":"Alte Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Alte Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Apollo Pharmacy":{"tags":{"name":"Apollo Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Apollo Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Apotek":{"tags":{"name":"Apotek","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Apotek","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Apotek Hjärtat":{"tags":{"name":"Apotek Hjärtat","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Apotek Hjärtat","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Apotheke am Markt":{"tags":{"name":"Apotheke am Markt","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Apotheke am Markt","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Bahnhof Apotheke":{"tags":{"name":"Bahnhof Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Bahnhof Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Bahnhof-Apotheke":{"tags":{"name":"Bahnhof-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Bahnhof-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Bartell Drugs":{"tags":{"name":"Bartell Drugs","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Bartell Drugs","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Benavides":{"tags":{"name":"Benavides","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Benavides","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Benu":{"tags":{"name":"Benu","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Benu","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Boots":{"tags":{"name":"Boots","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Boots","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Botica":{"tags":{"name":"Botica","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Botica","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Brunnen-Apotheke":{"tags":{"name":"Brunnen-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Brunnen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Burg-Apotheke":{"tags":{"name":"Burg-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Burg-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Bären-Apotheke":{"tags":{"name":"Bären-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Bären-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/CVS":{"tags":{"name":"CVS","healthcare":"pharmacy","amenity":"pharmacy"},"name":"CVS","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Camelia":{"tags":{"name":"Camelia","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Camelia","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Catena":{"tags":{"name":"Catena","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Catena","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Chemist Warehouse":{"tags":{"name":"Chemist Warehouse","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Chemist Warehouse","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Clicks":{"tags":{"name":"Clicks","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Clicks","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Cruz Azul":{"tags":{"name":"Cruz Azul","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Cruz Azul","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Cruz Verde":{"tags":{"name":"Cruz Verde","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Cruz Verde","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Dbam o Zdrowie":{"tags":{"name":"Dbam o Zdrowie","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Dbam o Zdrowie","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Dr. Max":{"tags":{"name":"Dr. Max","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Dr. Max","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Droga Raia":{"tags":{"name":"Droga Raia","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Droga Raia","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Drogaria São Paulo":{"tags":{"name":"Drogaria São Paulo","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Drogaria São Paulo","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Drogasil":{"tags":{"name":"Drogasil","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Drogasil","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Duane Reade":{"tags":{"name":"Duane Reade","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Duane Reade","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Eczane":{"tags":{"name":"Eczane","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Eczane","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Engel-Apotheke":{"tags":{"name":"Engel-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Engel-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Eurovaistinė":{"tags":{"name":"Eurovaistinė","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Eurovaistinė","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Familiprix":{"tags":{"name":"Familiprix","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Familiprix","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacenter":{"tags":{"name":"Farmacenter","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacenter","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacia Centrale":{"tags":{"name":"Farmacia Centrale","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacia Centrale","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacia Comunale":{"tags":{"name":"Farmacia Comunale","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacia Comunale","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacia Guadalajara":{"tags":{"name":"Farmacia Guadalajara","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacia Guadalajara","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacia del Ahorro":{"tags":{"name":"Farmacia del Ahorro","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacia del Ahorro","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Ahumada":{"tags":{"name":"Farmacias Ahumada","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Ahumada","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Cruz Azul":{"tags":{"name":"Farmacias Cruz Azul","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Cruz Azul","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Cruz Verde":{"tags":{"name":"Farmacias Cruz Verde","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Cruz Verde","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Económicas":{"tags":{"name":"Farmacias Económicas","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Económicas","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Guadalajara":{"tags":{"name":"Farmacias Guadalajara","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Guadalajara","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias SalcoBrand":{"tags":{"name":"Farmacias SalcoBrand","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias SalcoBrand","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Sana Sana":{"tags":{"name":"Farmacias Sana Sana","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Sana Sana","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Similares":{"tags":{"name":"Farmacias Similares","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Similares","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias del Ahorro":{"tags":{"name":"Farmacias del Ahorro","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias del Ahorro","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacity":{"tags":{"name":"Farmacity","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacity","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmahorro":{"tags":{"name":"Farmahorro","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmahorro","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmatodo":{"tags":{"name":"Farmatodo","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmatodo","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Felicia":{"tags":{"name":"Felicia","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Felicia","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Fybeca":{"tags":{"name":"Fybeca","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Fybeca","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Generika Drugstore":{"tags":{"name":"Generika Drugstore","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Generika Drugstore","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Gintarinė vaistinė":{"tags":{"name":"Gintarinė vaistinė","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Gintarinė vaistinė","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Guardian":{"tags":{"name":"Guardian","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Guardian","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Gyógyszertár":{"tags":{"name":"Gyógyszertár","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Gyógyszertár","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/H-E-B Pharmacy":{"tags":{"name":"H-E-B Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"H-E-B Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Hirsch-Apotheke":{"tags":{"name":"Hirsch-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Hirsch-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Hubertus Apotheke":{"tags":{"name":"Hubertus Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Hubertus Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Inkafarma":{"tags":{"name":"Inkafarma","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Inkafarma","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Jean Coutu":{"tags":{"name":"Jean Coutu","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Jean Coutu","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Kinney Drugs":{"tags":{"name":"Kinney Drugs","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Kinney Drugs","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Kur-Apotheke":{"tags":{"name":"Kur-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Kur-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Linden-Apotheke":{"tags":{"name":"Linden-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Linden-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Ljekarna":{"tags":{"name":"Ljekarna","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Ljekarna","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Lloyds Pharmacy":{"tags":{"name":"Lloyds Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Lloyds Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Lékárna":{"tags":{"name":"Lékárna","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Lékárna","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Löwen-Apotheke":{"tags":{"name":"Löwen-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Löwen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Marien-Apotheke":{"tags":{"name":"Marien-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Marien-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Markt-Apotheke":{"tags":{"name":"Markt-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Markt-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Mercury Drug":{"tags":{"name":"Mercury Drug","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Mercury Drug","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Mifarma":{"tags":{"name":"Mifarma","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Mifarma","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Mēness aptieka":{"tags":{"name":"Mēness aptieka","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Mēness aptieka","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Neue Apotheke":{"tags":{"name":"Neue Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Neue Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pague Menos":{"tags":{"name":"Pague Menos","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pague Menos","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Panvel":{"tags":{"name":"Panvel","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Panvel","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Park-Apotheke":{"tags":{"name":"Park-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Park-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie Centrale":{"tags":{"name":"Pharmacie Centrale","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie Centrale","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie Principale":{"tags":{"name":"Pharmacie Principale","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie Principale","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie de l'Hôtel de Ville":{"tags":{"name":"Pharmacie de l'Hôtel de Ville","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie de l'Hôtel de Ville","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie de la Gare":{"tags":{"name":"Pharmacie de la Gare","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie de la Gare","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie de la Mairie":{"tags":{"name":"Pharmacie de la Mairie","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie de la Mairie","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie de la Poste":{"tags":{"name":"Pharmacie de la Poste","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie de la Poste","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie du Centre":{"tags":{"name":"Pharmacie du Centre","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie du Centre","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie du Marché":{"tags":{"name":"Pharmacie du Marché","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie du Marché","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie du Parc":{"tags":{"name":"Pharmacie du Parc","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie du Parc","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmaprix":{"tags":{"name":"Pharmaprix","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmaprix","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmasave":{"tags":{"name":"Pharmasave","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmasave","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Punkt Apteczny":{"tags":{"name":"Punkt Apteczny","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Punkt Apteczny","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rathaus-Apotheke":{"tags":{"name":"Rathaus-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rathaus-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rats-Apotheke":{"tags":{"name":"Rats-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rats-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rexall":{"tags":{"name":"Rexall","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rexall","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rite Aid":{"tags":{"name":"Rite Aid","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rite Aid","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rose Pharmacy":{"tags":{"name":"Rose Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rose Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rosen-Apotheke":{"tags":{"name":"Rosen-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rosen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rowlands Pharmacy":{"tags":{"name":"Rowlands Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rowlands Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/SalcoBrand":{"tags":{"name":"SalcoBrand","healthcare":"pharmacy","amenity":"pharmacy"},"name":"SalcoBrand","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Sana Sana":{"tags":{"name":"Sana Sana","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Sana Sana","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Schloss-Apotheke":{"tags":{"name":"Schloss-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Schloss-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Sensiblu":{"tags":{"name":"Sensiblu","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Sensiblu","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Shoppers Drug Mart":{"tags":{"name":"Shoppers Drug Mart","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Shoppers Drug Mart","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Sonnen-Apotheke":{"tags":{"name":"Sonnen-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Sonnen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/South Star Drug":{"tags":{"name":"South Star Drug","healthcare":"pharmacy","amenity":"pharmacy"},"name":"South Star Drug","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Stadt-Apotheke":{"tags":{"name":"Stadt-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Stadt-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Stern-Apotheke":{"tags":{"name":"Stern-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Stern-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Superdrug":{"tags":{"name":"Superdrug","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Superdrug","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/São João":{"tags":{"name":"São João","healthcare":"pharmacy","amenity":"pharmacy"},"name":"São João","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/The Generics Pharmacy":{"tags":{"name":"The Generics Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"The Generics Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Uniprix":{"tags":{"name":"Uniprix","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Uniprix","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Walgreens":{"tags":{"name":"Walgreens","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Walgreens","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Walgreens Pharmacy":{"tags":{"name":"Walgreens Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Walgreens Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Walmart Pharmacy":{"tags":{"name":"Walmart Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Walmart Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Well Pharmacy":{"tags":{"name":"Well Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Well Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/centro naturista":{"tags":{"name":"centro naturista","healthcare":"pharmacy","amenity":"pharmacy"},"name":"centro naturista","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/А5":{"tags":{"name":"А5","healthcare":"pharmacy","amenity":"pharmacy"},"name":"А5","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Айболит":{"tags":{"name":"Айболит","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Айболит","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Аптека 36,6":{"tags":{"name":"Аптека 36,6","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Аптека 36,6","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Аптека низких цен":{"tags":{"name":"Аптека низких цен","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Аптека низких цен","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Аптека низьких цін":{"tags":{"name":"Аптека низьких цін","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Аптека низьких цін","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Аптека от склада":{"tags":{"name":"Аптека от склада","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Аптека от склада","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Аптека №1":{"tags":{"name":"Аптека №1","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Аптека №1","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Аптечный пункт":{"tags":{"name":"Аптечный пункт","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Аптечный пункт","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Арніка":{"tags":{"name":"Арніка","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Арніка","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Бережная аптека":{"tags":{"name":"Бережная аптека","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Бережная аптека","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Будь здоров":{"tags":{"name":"Будь здоров","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Будь здоров","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Вита":{"tags":{"name":"Вита","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Вита","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Горздрав":{"tags":{"name":"Горздрав","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Горздрав","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Живика":{"tags":{"name":"Живика","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Живика","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Здоровье":{"tags":{"name":"Здоровье","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Здоровье","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Имплозия":{"tags":{"name":"Имплозия","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Имплозия","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Классика":{"tags":{"name":"Классика","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Классика","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Ладушка":{"tags":{"name":"Ладушка","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Ладушка","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Мед-сервіс":{"tags":{"name":"Мед-сервіс","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Мед-сервіс","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Мелодия здоровья":{"tags":{"name":"Мелодия здоровья","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Мелодия здоровья","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Невис":{"tags":{"name":"Невис","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Невис","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Норма":{"tags":{"name":"Норма","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Норма","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Озерки":{"tags":{"name":"Озерки","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Озерки","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Панацея":{"tags":{"name":"Панацея","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Панацея","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Первая помощь":{"tags":{"name":"Первая помощь","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Первая помощь","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Планета здоровья":{"tags":{"name":"Планета здоровья","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Планета здоровья","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Ригла":{"tags":{"name":"Ригла","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Ригла","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Семейная":{"tags":{"name":"Семейная","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Семейная","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Социальная аптека":{"tags":{"name":"Социальная аптека","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Социальная аптека","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Столички":{"tags":{"name":"Столички","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Столички","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Фармакопейка":{"tags":{"name":"Фармакопейка","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Фармакопейка","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Фармакор":{"tags":{"name":"Фармакор","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Фармакор","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Фармация":{"tags":{"name":"Фармация","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Фармация","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Фармленд":{"tags":{"name":"Фармленд","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Фармленд","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Центральная аптека":{"tags":{"name":"Центральная аптека","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Центральная аптека","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/סופר-פארם":{"tags":{"name":"סופר-פארם","healthcare":"pharmacy","amenity":"pharmacy"},"name":"סופר-פארם","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/داروخانه":{"tags":{"name":"داروخانه","healthcare":"pharmacy","amenity":"pharmacy"},"name":"داروخانه","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/داروخانه شبانه روزی":{"tags":{"name":"داروخانه شبانه روزی","healthcare":"pharmacy","amenity":"pharmacy"},"name":"داروخانه شبانه روزی","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/صيدلية":{"tags":{"name":"صيدلية","healthcare":"pharmacy","amenity":"pharmacy"},"name":"صيدلية","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/くすりの福太郎":{"tags":{"name":"くすりの福太郎","healthcare":"pharmacy","amenity":"pharmacy"},"name":"くすりの福太郎","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/さくら薬局":{"tags":{"name":"さくら薬局","healthcare":"pharmacy","amenity":"pharmacy"},"name":"さくら薬局","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/ウエルシア":{"tags":{"name":"ウエルシア","healthcare":"pharmacy","amenity":"pharmacy"},"name":"ウエルシア","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/カワチ薬品":{"tags":{"name":"カワチ薬品","healthcare":"pharmacy","amenity":"pharmacy"},"name":"カワチ薬品","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/クリエイト":{"tags":{"name":"クリエイト","healthcare":"pharmacy","amenity":"pharmacy"},"name":"クリエイト","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/サンドラッグ":{"tags":{"name":"サンドラッグ","healthcare":"pharmacy","amenity":"pharmacy"},"name":"サンドラッグ","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/スギ薬局":{"tags":{"name":"スギ薬局","healthcare":"pharmacy","amenity":"pharmacy"},"name":"スギ薬局","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/セイジョー":{"tags":{"name":"セイジョー","healthcare":"pharmacy","amenity":"pharmacy"},"name":"セイジョー","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/ツルハドラッグ":{"tags":{"name":"ツルハドラッグ","healthcare":"pharmacy","amenity":"pharmacy"},"name":"ツルハドラッグ","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/ドラッグてらしま (Drug Terashima)":{"tags":{"name":"ドラッグてらしま (Drug Terashima)","healthcare":"pharmacy","amenity":"pharmacy"},"name":"ドラッグてらしま (Drug Terashima)","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/マツモトキヨシ":{"tags":{"name":"マツモトキヨシ","healthcare":"pharmacy","amenity":"pharmacy"},"name":"マツモトキヨシ","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/丁丁藥局":{"tags":{"name":"丁丁藥局","healthcare":"pharmacy","amenity":"pharmacy"},"name":"丁丁藥局","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pub/Black Bull":{"tags":{"name":"Black Bull","amenity":"pub"},"name":"Black Bull","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Commercial Hotel":{"tags":{"name":"Commercial Hotel","amenity":"pub"},"name":"Commercial Hotel","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Cross Keys":{"tags":{"name":"Cross Keys","amenity":"pub"},"name":"Cross Keys","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Irish Pub":{"tags":{"name":"Irish Pub","amenity":"pub"},"name":"Irish Pub","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Kings Arms":{"tags":{"name":"Kings Arms","amenity":"pub"},"name":"Kings Arms","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Kings Head":{"tags":{"name":"Kings Head","amenity":"pub"},"name":"Kings Head","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/New Inn":{"tags":{"name":"New Inn","amenity":"pub"},"name":"New Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Prince of Wales":{"tags":{"name":"Prince of Wales","amenity":"pub"},"name":"Prince of Wales","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Queens Head":{"tags":{"name":"Queens Head","amenity":"pub"},"name":"Queens Head","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Red Lion":{"tags":{"name":"Red Lion","amenity":"pub"},"name":"Red Lion","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Rose & Crown":{"tags":{"name":"Rose & Crown","amenity":"pub"},"name":"Rose & Crown","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Rose and Crown":{"tags":{"name":"Rose and Crown","amenity":"pub"},"name":"Rose and Crown","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Royal Oak":{"tags":{"name":"Royal Oak","amenity":"pub"},"name":"Royal Oak","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Albion":{"tags":{"name":"The Albion","amenity":"pub"},"name":"The Albion","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Anchor":{"tags":{"name":"The Anchor","amenity":"pub"},"name":"The Anchor","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Angel":{"tags":{"name":"The Angel","amenity":"pub"},"name":"The Angel","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Beehive":{"tags":{"name":"The Beehive","amenity":"pub"},"name":"The Beehive","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Bell":{"tags":{"name":"The Bell","amenity":"pub"},"name":"The Bell","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Bell Inn":{"tags":{"name":"The Bell Inn","amenity":"pub"},"name":"The Bell Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Black Horse":{"tags":{"name":"The Black Horse","amenity":"pub"},"name":"The Black Horse","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Bull":{"tags":{"name":"The Bull","amenity":"pub"},"name":"The Bull","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Castle":{"tags":{"name":"The Castle","amenity":"pub"},"name":"The Castle","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Chequers":{"tags":{"name":"The Chequers","amenity":"pub"},"name":"The Chequers","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Cricketers":{"tags":{"name":"The Cricketers","amenity":"pub"},"name":"The Cricketers","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Cross Keys":{"tags":{"name":"The Cross Keys","amenity":"pub"},"name":"The Cross Keys","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Crown":{"tags":{"name":"The Crown","amenity":"pub"},"name":"The Crown","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Crown Inn":{"tags":{"name":"The Crown Inn","amenity":"pub"},"name":"The Crown Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Fox":{"tags":{"name":"The Fox","amenity":"pub"},"name":"The Fox","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The George":{"tags":{"name":"The George","amenity":"pub"},"name":"The George","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Green Man":{"tags":{"name":"The Green Man","amenity":"pub"},"name":"The Green Man","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Greyhound":{"tags":{"name":"The Greyhound","amenity":"pub"},"name":"The Greyhound","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Kings Arms":{"tags":{"name":"The Kings Arms","amenity":"pub"},"name":"The Kings Arms","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Kings Head":{"tags":{"name":"The Kings Head","amenity":"pub"},"name":"The Kings Head","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The New Inn":{"tags":{"name":"The New Inn","amenity":"pub"},"name":"The New Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Plough":{"tags":{"name":"The Plough","amenity":"pub"},"name":"The Plough","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Plough Inn":{"tags":{"name":"The Plough Inn","amenity":"pub"},"name":"The Plough Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Queens Head":{"tags":{"name":"The Queens Head","amenity":"pub"},"name":"The Queens Head","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Railway":{"tags":{"name":"The Railway","amenity":"pub"},"name":"The Railway","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Red Lion":{"tags":{"name":"The Red Lion","amenity":"pub"},"name":"The Red Lion","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Rising Sun":{"tags":{"name":"The Rising Sun","amenity":"pub"},"name":"The Rising Sun","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Royal Oak":{"tags":{"name":"The Royal Oak","amenity":"pub"},"name":"The Royal Oak","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Ship":{"tags":{"name":"The Ship","amenity":"pub"},"name":"The Ship","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Ship Inn":{"tags":{"name":"The Ship Inn","amenity":"pub"},"name":"The Ship Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Star":{"tags":{"name":"The Star","amenity":"pub"},"name":"The Star","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Star Inn":{"tags":{"name":"The Star Inn","amenity":"pub"},"name":"The Star Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Sun Inn":{"tags":{"name":"The Sun Inn","amenity":"pub"},"name":"The Sun Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Swan":{"tags":{"name":"The Swan","amenity":"pub"},"name":"The Swan","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Swan Inn":{"tags":{"name":"The Swan Inn","amenity":"pub"},"name":"The Swan Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Victoria":{"tags":{"name":"The Victoria","amenity":"pub"},"name":"The Victoria","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Wheatsheaf":{"tags":{"name":"The Wheatsheaf","amenity":"pub"},"name":"The Wheatsheaf","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The White Hart":{"tags":{"name":"The White Hart","amenity":"pub"},"name":"The White Hart","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The White Horse":{"tags":{"name":"The White Horse","amenity":"pub"},"name":"The White Horse","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The White Lion":{"tags":{"name":"The White Lion","amenity":"pub"},"name":"The White Lion","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The White Swan":{"tags":{"name":"The White Swan","amenity":"pub"},"name":"The White Swan","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/魚民":{"tags":{"name":"魚民","amenity":"pub"},"name":"魚民","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/鳥貴族":{"tags":{"name":"鳥貴族","amenity":"pub"},"name":"鳥貴族","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/restaurant/Adler":{"tags":{"name":"Adler","amenity":"restaurant"},"name":"Adler","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Adria":{"tags":{"name":"Adria","amenity":"restaurant"},"name":"Adria","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Adyar Ananda Bhavan":{"tags":{"name":"Adyar Ananda Bhavan","amenity":"restaurant"},"name":"Adyar Ananda Bhavan","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Akropolis":{"tags":{"name":"Akropolis","amenity":"restaurant"},"name":"Akropolis","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Alte Post":{"tags":{"name":"Alte Post","amenity":"restaurant"},"name":"Alte Post","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Applebee's":{"tags":{"name":"Applebee's","amenity":"restaurant"},"name":"Applebee's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Asia":{"tags":{"name":"Asia","amenity":"restaurant"},"name":"Asia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Athen":{"tags":{"name":"Athen","amenity":"restaurant"},"name":"Athen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Athos":{"tags":{"name":"Athos","amenity":"restaurant"},"name":"Athos","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Autogrill":{"tags":{"name":"Autogrill","amenity":"restaurant"},"name":"Autogrill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bahnhof":{"tags":{"name":"Bahnhof","amenity":"restaurant"},"name":"Bahnhof","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bella Italia":{"tags":{"name":"Bella Italia","amenity":"restaurant"},"name":"Bella Italia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bella Napoli":{"tags":{"name":"Bella Napoli","amenity":"restaurant"},"name":"Bella Napoli","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Big Boy":{"tags":{"name":"Big Boy","amenity":"restaurant"},"name":"Big Boy","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bob Evans":{"tags":{"name":"Bob Evans","amenity":"restaurant"},"name":"Bob Evans","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bonefish Grill":{"tags":{"name":"Bonefish Grill","amenity":"restaurant"},"name":"Bonefish Grill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Boston Pizza":{"tags":{"name":"Boston Pizza","amenity":"restaurant"},"name":"Boston Pizza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Buffalo Grill":{"tags":{"name":"Buffalo Grill","amenity":"restaurant"},"name":"Buffalo Grill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Buffalo Wild Wings":{"tags":{"name":"Buffalo Wild Wings","amenity":"restaurant"},"name":"Buffalo Wild Wings","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bären":{"tags":{"name":"Bären","amenity":"restaurant"},"name":"Bären","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/California Pizza Kitchen":{"tags":{"name":"California Pizza Kitchen","amenity":"restaurant"},"name":"California Pizza Kitchen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Canteen":{"tags":{"name":"Canteen","amenity":"restaurant"},"name":"Canteen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Capri":{"tags":{"name":"Capri","amenity":"restaurant"},"name":"Capri","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Carluccio's":{"tags":{"name":"Carluccio's","amenity":"restaurant"},"name":"Carluccio's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Carpe Diem":{"tags":{"name":"Carpe Diem","amenity":"restaurant"},"name":"Carpe Diem","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Carrabba's Italian Grill":{"tags":{"name":"Carrabba's Italian Grill","amenity":"restaurant"},"name":"Carrabba's Italian Grill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Casa Mia":{"tags":{"name":"Casa Mia","amenity":"restaurant"},"name":"Casa Mia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Casablanca":{"tags":{"name":"Casablanca","amenity":"restaurant"},"name":"Casablanca","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Cheesecake Factory":{"tags":{"name":"Cheesecake Factory","amenity":"restaurant"},"name":"Cheesecake Factory","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Chifa":{"tags":{"name":"Chifa","amenity":"restaurant"},"name":"Chifa","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Chili's":{"tags":{"name":"Chili's","amenity":"restaurant"},"name":"Chili's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China Buffet":{"tags":{"name":"China Buffet","amenity":"restaurant"},"name":"China Buffet","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China Garden":{"tags":{"name":"China Garden","amenity":"restaurant"},"name":"China Garden","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China House":{"tags":{"name":"China House","amenity":"restaurant"},"name":"China House","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China Town":{"tags":{"name":"China Town","amenity":"restaurant"},"name":"China Town","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China Wok":{"tags":{"name":"China Wok","amenity":"restaurant"},"name":"China Wok","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Chiquito":{"tags":{"name":"Chiquito","amenity":"restaurant"},"name":"Chiquito","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Chuck E. Cheese's":{"tags":{"name":"Chuck E. Cheese's","amenity":"restaurant"},"name":"Chuck E. Cheese's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Cici's Pizza":{"tags":{"name":"Cici's Pizza","amenity":"restaurant"},"name":"Cici's Pizza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Comedor":{"tags":{"name":"Comedor","amenity":"restaurant"},"name":"Comedor","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Comida China":{"tags":{"name":"Comida China","amenity":"restaurant"},"name":"Comida China","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Courtepaille":{"tags":{"name":"Courtepaille","amenity":"restaurant"},"name":"Courtepaille","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Cracker Barrel":{"tags":{"name":"Cracker Barrel","amenity":"restaurant"},"name":"Cracker Barrel","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Da Grasso":{"tags":{"name":"Da Grasso","amenity":"restaurant"},"name":"Da Grasso","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Da Vinci":{"tags":{"name":"Da Vinci","amenity":"restaurant"},"name":"Da Vinci","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Delphi":{"tags":{"name":"Delphi","amenity":"restaurant"},"name":"Delphi","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Denny's":{"tags":{"name":"Denny's","amenity":"restaurant"},"name":"Denny's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Deutsches Haus":{"tags":{"name":"Deutsches Haus","amenity":"restaurant"},"name":"Deutsches Haus","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Dionysos":{"tags":{"name":"Dionysos","amenity":"restaurant"},"name":"Dionysos","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Dolce Vita":{"tags":{"name":"Dolce Vita","amenity":"restaurant"},"name":"Dolce Vita","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Dorfkrug":{"tags":{"name":"Dorfkrug","amenity":"restaurant"},"name":"Dorfkrug","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/East Side Mario's":{"tags":{"name":"East Side Mario's","amenity":"restaurant"},"name":"East Side Mario's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/El Greco":{"tags":{"name":"El Greco","amenity":"restaurant"},"name":"El Greco","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/El Paso":{"tags":{"name":"El Paso","amenity":"restaurant"},"name":"El Paso","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/El Rancho":{"tags":{"name":"El Rancho","amenity":"restaurant"},"name":"El Rancho","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Europa":{"tags":{"name":"Europa","amenity":"restaurant"},"name":"Europa","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Famous Dave's":{"tags":{"name":"Famous Dave's","amenity":"restaurant"},"name":"Famous Dave's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Flunch":{"tags":{"name":"Flunch","amenity":"restaurant"},"name":"Flunch","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Frankie & Benny's":{"tags":{"name":"Frankie & Benny's","amenity":"restaurant"},"name":"Frankie & Benny's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Friendly's":{"tags":{"name":"Friendly's","amenity":"restaurant"},"name":"Friendly's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Gasthaus Krone":{"tags":{"name":"Gasthaus Krone","amenity":"restaurant"},"name":"Gasthaus Krone","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Gasthaus zur Linde":{"tags":{"name":"Gasthaus zur Linde","amenity":"restaurant"},"name":"Gasthaus zur Linde","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Gasthof zur Post":{"tags":{"name":"Gasthof zur Post","amenity":"restaurant"},"name":"Gasthof zur Post","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Golden Corral":{"tags":{"name":"Golden Corral","amenity":"restaurant"},"name":"Golden Corral","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Golden Dragon":{"tags":{"name":"Golden Dragon","amenity":"restaurant"},"name":"Golden Dragon","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Great Wall":{"tags":{"name":"Great Wall","amenity":"restaurant"},"name":"Great Wall","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Grüner Baum":{"tags":{"name":"Grüner Baum","amenity":"restaurant"},"name":"Grüner Baum","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Gusto":{"tags":{"name":"Gusto","amenity":"restaurant"},"name":"Gusto","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hard Rock Cafe":{"tags":{"name":"Hard Rock Cafe","amenity":"restaurant"},"name":"Hard Rock Cafe","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Harvester":{"tags":{"name":"Harvester","amenity":"restaurant"},"name":"Harvester","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hellas":{"tags":{"name":"Hellas","amenity":"restaurant"},"name":"Hellas","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hippopotamus":{"tags":{"name":"Hippopotamus","amenity":"restaurant"},"name":"Hippopotamus","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hirsch":{"tags":{"name":"Hirsch","amenity":"restaurant"},"name":"Hirsch","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hirschen":{"tags":{"name":"Hirschen","amenity":"restaurant"},"name":"Hirschen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hong Kong":{"tags":{"name":"Hong Kong","amenity":"restaurant"},"name":"Hong Kong","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hooters":{"tags":{"name":"Hooters","amenity":"restaurant"},"name":"Hooters","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/IHOP":{"tags":{"name":"IHOP","amenity":"restaurant"},"name":"IHOP","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/IL Патио":{"tags":{"name":"IL Патио","amenity":"restaurant"},"name":"IL Патио","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Jason's Deli":{"tags":{"name":"Jason's Deli","amenity":"restaurant"},"name":"Jason's Deli","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Joe's Crab Shack":{"tags":{"name":"Joe's Crab Shack","amenity":"restaurant"},"name":"Joe's Crab Shack","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Jägerhof":{"tags":{"name":"Jägerhof","amenity":"restaurant"},"name":"Jägerhof","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kantine":{"tags":{"name":"Kantine","amenity":"restaurant"},"name":"Kantine","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kelsey's":{"tags":{"name":"Kelsey's","amenity":"restaurant"},"name":"Kelsey's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kirchenwirt":{"tags":{"name":"Kirchenwirt","amenity":"restaurant"},"name":"Kirchenwirt","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kreta":{"tags":{"name":"Kreta","amenity":"restaurant"},"name":"Kreta","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kreuz":{"tags":{"name":"Kreuz","amenity":"restaurant"},"name":"Kreuz","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Krone":{"tags":{"name":"Krone","amenity":"restaurant"},"name":"Krone","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kudu":{"tags":{"name":"Kudu","amenity":"restaurant"},"name":"Kudu","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/L'Escale":{"tags":{"name":"L'Escale","amenity":"restaurant"},"name":"L'Escale","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/L'Osteria":{"tags":{"name":"L'Osteria","amenity":"restaurant"},"name":"L'Osteria","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Bodega":{"tags":{"name":"La Bodega","amenity":"restaurant"},"name":"La Bodega","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Boucherie":{"tags":{"name":"La Boucherie","amenity":"restaurant"},"name":"La Boucherie","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Cantina":{"tags":{"name":"La Cantina","amenity":"restaurant"},"name":"La Cantina","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Casa":{"tags":{"name":"La Casa","amenity":"restaurant"},"name":"La Casa","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Casona":{"tags":{"name":"La Casona","amenity":"restaurant"},"name":"La Casona","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Dolce Vita":{"tags":{"name":"La Dolce Vita","amenity":"restaurant"},"name":"La Dolce Vita","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Fontana":{"tags":{"name":"La Fontana","amenity":"restaurant"},"name":"La Fontana","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Gondola":{"tags":{"name":"La Gondola","amenity":"restaurant"},"name":"La Gondola","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Hacienda":{"tags":{"name":"La Hacienda","amenity":"restaurant"},"name":"La Hacienda","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Pataterie":{"tags":{"name":"La Pataterie","amenity":"restaurant"},"name":"La Pataterie","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Pergola":{"tags":{"name":"La Pergola","amenity":"restaurant"},"name":"La Pergola","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Perla":{"tags":{"name":"La Perla","amenity":"restaurant"},"name":"La Perla","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Piazza":{"tags":{"name":"La Piazza","amenity":"restaurant"},"name":"La Piazza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Piazzetta":{"tags":{"name":"La Piazzetta","amenity":"restaurant"},"name":"La Piazzetta","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Place":{"tags":{"name":"La Place","amenity":"restaurant"},"name":"La Place","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Scala":{"tags":{"name":"La Scala","amenity":"restaurant"},"name":"La Scala","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Strada":{"tags":{"name":"La Strada","amenity":"restaurant"},"name":"La Strada","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Tagliatella":{"tags":{"name":"La Tagliatella","amenity":"restaurant"},"name":"La Tagliatella","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Tasca":{"tags":{"name":"La Tasca","amenity":"restaurant"},"name":"La Tasca","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Taverna":{"tags":{"name":"La Taverna","amenity":"restaurant"},"name":"La Taverna","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Terrasse":{"tags":{"name":"La Terrasse","amenity":"restaurant"},"name":"La Terrasse","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Terraza":{"tags":{"name":"La Terraza","amenity":"restaurant"},"name":"La Terraza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Terrazza":{"tags":{"name":"La Terrazza","amenity":"restaurant"},"name":"La Terrazza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Trattoria":{"tags":{"name":"La Trattoria","amenity":"restaurant"},"name":"La Trattoria","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Lamm":{"tags":{"name":"Lamm","amenity":"restaurant"},"name":"Lamm","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Linde":{"tags":{"name":"Linde","amenity":"restaurant"},"name":"Linde","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Lindenhof":{"tags":{"name":"Lindenhof","amenity":"restaurant"},"name":"Lindenhof","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Little Chef":{"tags":{"name":"Little Chef","amenity":"restaurant"},"name":"Little Chef","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Little Italy":{"tags":{"name":"Little Italy","amenity":"restaurant"},"name":"Little Italy","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Logan's Roadhouse":{"tags":{"name":"Logan's Roadhouse","amenity":"restaurant"},"name":"Logan's Roadhouse","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/LongHorn Steakhouse":{"tags":{"name":"LongHorn Steakhouse","amenity":"restaurant"},"name":"LongHorn Steakhouse","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Lotus":{"tags":{"name":"Lotus","amenity":"restaurant"},"name":"Lotus","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Léon de Bruxelles":{"tags":{"name":"Léon de Bruxelles","amenity":"restaurant"},"name":"Léon de Bruxelles","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Löwen":{"tags":{"name":"Löwen","amenity":"restaurant"},"name":"Löwen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/MK Restaurants":{"tags":{"name":"MK Restaurants","amenity":"restaurant"},"name":"MK Restaurants","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Maharaja":{"tags":{"name":"Maharaja","amenity":"restaurant"},"name":"Maharaja","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mamma Mia":{"tags":{"name":"Mamma Mia","amenity":"restaurant"},"name":"Mamma Mia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mandarin":{"tags":{"name":"Mandarin","amenity":"restaurant"},"name":"Mandarin","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mang Inasal":{"tags":{"name":"Mang Inasal","amenity":"restaurant"},"name":"Mang Inasal","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Marco Polo":{"tags":{"name":"Marco Polo","amenity":"restaurant"},"name":"Marco Polo","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Marco's Pizza":{"tags":{"name":"Marco's Pizza","amenity":"restaurant"},"name":"Marco's Pizza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/McAlister's Deli":{"tags":{"name":"McAlister's Deli","amenity":"restaurant"},"name":"McAlister's Deli","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mediterraneo":{"tags":{"name":"Mediterraneo","amenity":"restaurant"},"name":"Mediterraneo","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mellow Mushroom":{"tags":{"name":"Mellow Mushroom","amenity":"restaurant"},"name":"Mellow Mushroom","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mensa":{"tags":{"name":"Mensa","amenity":"restaurant"},"name":"Mensa","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Milano":{"tags":{"name":"Milano","amenity":"restaurant"},"name":"Milano","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mimi's Cafe":{"tags":{"name":"Mimi's Cafe","amenity":"restaurant"},"name":"Mimi's Cafe","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Moe's Southwest Grill":{"tags":{"name":"Moe's Southwest Grill","amenity":"restaurant"},"name":"Moe's Southwest Grill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mykonos":{"tags":{"name":"Mykonos","amenity":"restaurant"},"name":"Mykonos","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mythos":{"tags":{"name":"Mythos","amenity":"restaurant"},"name":"Mythos","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Nando's":{"tags":{"name":"Nando's","amenity":"restaurant"},"name":"Nando's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Noodles & Company":{"tags":{"name":"Noodles & Company","amenity":"restaurant"},"name":"Noodles & Company","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/O'Charley's":{"tags":{"name":"O'Charley's","amenity":"restaurant"},"name":"O'Charley's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Oasis":{"tags":{"name":"Oasis","amenity":"restaurant"},"name":"Oasis","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ocean Basket":{"tags":{"name":"Ocean Basket","amenity":"restaurant"},"name":"Ocean Basket","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ochsen":{"tags":{"name":"Ochsen","amenity":"restaurant"},"name":"Ochsen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Old Chicago":{"tags":{"name":"Old Chicago","amenity":"restaurant"},"name":"Old Chicago","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Olive Garden":{"tags":{"name":"Olive Garden","amenity":"restaurant"},"name":"Olive Garden","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Olympia":{"tags":{"name":"Olympia","amenity":"restaurant"},"name":"Olympia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Osaka":{"tags":{"name":"Osaka","amenity":"restaurant"},"name":"Osaka","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Outback Steakhouse":{"tags":{"name":"Outback Steakhouse","amenity":"restaurant"},"name":"Outback Steakhouse","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/P.F. Chang's":{"tags":{"name":"P.F. Chang's","amenity":"restaurant"},"name":"P.F. Chang's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pancake House":{"tags":{"name":"Pancake House","amenity":"restaurant"},"name":"Pancake House","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Panda":{"tags":{"name":"Panda","amenity":"restaurant"},"name":"Panda","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Panera Bread":{"tags":{"name":"Panera Bread","amenity":"restaurant"},"name":"Panera Bread","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Panorama":{"tags":{"name":"Panorama","amenity":"restaurant"},"name":"Panorama","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Parrilla":{"tags":{"name":"Parrilla","amenity":"restaurant"},"name":"Parrilla","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Peking":{"tags":{"name":"Peking","amenity":"restaurant"},"name":"Peking","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Perkins":{"tags":{"name":"Perkins","amenity":"restaurant"},"name":"Perkins","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pinocchio":{"tags":{"name":"Pinocchio","amenity":"restaurant"},"name":"Pinocchio","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza Express":{"tags":{"name":"Pizza Express","amenity":"restaurant"},"name":"Pizza Express","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza Factory":{"tags":{"name":"Pizza Factory","amenity":"restaurant"},"name":"Pizza Factory","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza House":{"tags":{"name":"Pizza House","amenity":"restaurant"},"name":"Pizza House","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza Hut":{"tags":{"name":"Pizza Hut","cuisine":"pizza","amenity":"restaurant"},"name":"Pizza Hut","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza Ranch":{"tags":{"name":"Pizza Ranch","amenity":"restaurant"},"name":"Pizza Ranch","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizzeria Italia":{"tags":{"name":"Pizzeria Italia","amenity":"restaurant"},"name":"Pizzeria Italia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizzeria Milano":{"tags":{"name":"Pizzeria Milano","amenity":"restaurant"},"name":"Pizzeria Milano","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizzeria Napoli":{"tags":{"name":"Pizzeria Napoli","amenity":"restaurant"},"name":"Pizzeria Napoli","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizzeria Roma":{"tags":{"name":"Pizzeria Roma","amenity":"restaurant"},"name":"Pizzeria Roma","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizzeria Venezia":{"tags":{"name":"Pizzeria Venezia","amenity":"restaurant"},"name":"Pizzeria Venezia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Poivre Rouge":{"tags":{"name":"Poivre Rouge","amenity":"restaurant"},"name":"Poivre Rouge","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pomodoro":{"tags":{"name":"Pomodoro","amenity":"restaurant"},"name":"Pomodoro","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Portofino":{"tags":{"name":"Portofino","amenity":"restaurant"},"name":"Portofino","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Poseidon":{"tags":{"name":"Poseidon","amenity":"restaurant"},"name":"Poseidon","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Prezzo":{"tags":{"name":"Prezzo","amenity":"restaurant"},"name":"Prezzo","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Qdoba Mexican Grill":{"tags":{"name":"Qdoba Mexican Grill","amenity":"restaurant"},"name":"Qdoba Mexican Grill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ratskeller":{"tags":{"name":"Ratskeller","amenity":"restaurant"},"name":"Ratskeller","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Red Lobster":{"tags":{"name":"Red Lobster","amenity":"restaurant"},"name":"Red Lobster","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Red Robin":{"tags":{"name":"Red Robin","amenity":"restaurant"},"name":"Red Robin","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Restaurante Universitário":{"tags":{"name":"Restaurante Universitário","amenity":"restaurant"},"name":"Restaurante Universitário","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Rhodos":{"tags":{"name":"Rhodos","amenity":"restaurant"},"name":"Rhodos","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ristorante Del Arte":{"tags":{"name":"Ristorante Del Arte","amenity":"restaurant"},"name":"Ristorante Del Arte","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Roma":{"tags":{"name":"Roma","amenity":"restaurant"},"name":"Roma","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Rose":{"tags":{"name":"Rose","amenity":"restaurant"},"name":"Rose","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Round Table Pizza":{"tags":{"name":"Round Table Pizza","amenity":"restaurant"},"name":"Round Table Pizza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ruby Tuesday":{"tags":{"name":"Ruby Tuesday","amenity":"restaurant"},"name":"Ruby Tuesday","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Rössle":{"tags":{"name":"Rössle","amenity":"restaurant"},"name":"Rössle","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Rössli":{"tags":{"name":"Rössli","amenity":"restaurant"},"name":"Rössli","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Saigon":{"tags":{"name":"Saigon","amenity":"restaurant"},"name":"Saigon","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sakura":{"tags":{"name":"Sakura","amenity":"restaurant"},"name":"Sakura","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/San Marco":{"tags":{"name":"San Marco","amenity":"restaurant"},"name":"San Marco","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Santorini":{"tags":{"name":"Santorini","amenity":"restaurant"},"name":"Santorini","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Schwarzer Adler":{"tags":{"name":"Schwarzer Adler","amenity":"restaurant"},"name":"Schwarzer Adler","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Schützenhaus":{"tags":{"name":"Schützenhaus","amenity":"restaurant"},"name":"Schützenhaus","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shakey's":{"tags":{"name":"Shakey's","amenity":"restaurant"},"name":"Shakey's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shalimar":{"tags":{"name":"Shalimar","amenity":"restaurant"},"name":"Shalimar","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shanghai":{"tags":{"name":"Shanghai","amenity":"restaurant"},"name":"Shanghai","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shari's":{"tags":{"name":"Shari's","amenity":"restaurant"},"name":"Shari's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shoney's":{"tags":{"name":"Shoney's","amenity":"restaurant"},"name":"Shoney's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sizzler":{"tags":{"name":"Sizzler","amenity":"restaurant"},"name":"Sizzler","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sonne":{"tags":{"name":"Sonne","amenity":"restaurant"},"name":"Sonne","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sphinx":{"tags":{"name":"Sphinx","amenity":"restaurant"},"name":"Sphinx","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sportheim":{"tags":{"name":"Sportheim","amenity":"restaurant"},"name":"Sportheim","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Spur":{"tags":{"name":"Spur","amenity":"restaurant"},"name":"Spur","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Steak 'n Shake":{"tags":{"name":"Steak 'n Shake","cuisine":"burger","amenity":"restaurant"},"name":"Steak 'n Shake","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sternen":{"tags":{"name":"Sternen","amenity":"restaurant"},"name":"Sternen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sunset Grill":{"tags":{"name":"Sunset Grill","amenity":"restaurant"},"name":"Sunset Grill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sushi":{"tags":{"name":"Sushi","amenity":"restaurant"},"name":"Sushi","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sushi Bar":{"tags":{"name":"Sushi Bar","amenity":"restaurant"},"name":"Sushi Bar","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Swiss Chalet":{"tags":{"name":"Swiss Chalet","amenity":"restaurant"},"name":"Swiss Chalet","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Syrtaki":{"tags":{"name":"Syrtaki","amenity":"restaurant"},"name":"Syrtaki","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/TGI Friday's":{"tags":{"name":"TGI Friday's","amenity":"restaurant"},"name":"TGI Friday's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Taj Mahal":{"tags":{"name":"Taj Mahal","amenity":"restaurant"},"name":"Taj Mahal","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Taste of India":{"tags":{"name":"Taste of India","amenity":"restaurant"},"name":"Taste of India","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Taverna":{"tags":{"name":"Taverna","amenity":"restaurant"},"name":"Taverna","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Texas Roadhouse":{"tags":{"name":"Texas Roadhouse","amenity":"restaurant"},"name":"Texas Roadhouse","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/The Cheesecake Factory":{"tags":{"name":"The Cheesecake Factory","amenity":"restaurant"},"name":"The Cheesecake Factory","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Toby Carvery":{"tags":{"name":"Toby Carvery","amenity":"restaurant"},"name":"Toby Carvery","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Tony Roma's":{"tags":{"name":"Tony Roma's","amenity":"restaurant"},"name":"Tony Roma's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Toscana":{"tags":{"name":"Toscana","amenity":"restaurant"},"name":"Toscana","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Trattoria":{"tags":{"name":"Trattoria","amenity":"restaurant"},"name":"Trattoria","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Traube":{"tags":{"name":"Traube","amenity":"restaurant"},"name":"Traube","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Vapiano":{"tags":{"name":"Vapiano","amenity":"restaurant"},"name":"Vapiano","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Venezia":{"tags":{"name":"Venezia","amenity":"restaurant"},"name":"Venezia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Village Inn":{"tags":{"name":"Village Inn","amenity":"restaurant"},"name":"Village Inn","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Vips":{"tags":{"name":"Vips","amenity":"restaurant"},"name":"Vips","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Waffle House":{"tags":{"name":"Waffle House","amenity":"restaurant"},"name":"Waffle House","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Wagamama":{"tags":{"name":"Wagamama","amenity":"restaurant"},"name":"Wagamama","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Waldschänke":{"tags":{"name":"Waldschänke","amenity":"restaurant"},"name":"Waldschänke","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Warung":{"tags":{"name":"Warung","amenity":"restaurant"},"name":"Warung","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Wasabi":{"tags":{"name":"Wasabi","amenity":"restaurant"},"name":"Wasabi","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zizzi":{"tags":{"name":"Zizzi","amenity":"restaurant"},"name":"Zizzi","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zorbas":{"tags":{"name":"Zorbas","amenity":"restaurant"},"name":"Zorbas","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zum Hirschen":{"tags":{"name":"Zum Hirschen","amenity":"restaurant"},"name":"Zum Hirschen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zum Löwen":{"tags":{"name":"Zum Löwen","amenity":"restaurant"},"name":"Zum Löwen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Krone":{"tags":{"name":"Zur Krone","amenity":"restaurant"},"name":"Zur Krone","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Linde":{"tags":{"name":"Zur Linde","amenity":"restaurant"},"name":"Zur Linde","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Post":{"tags":{"name":"Zur Post","amenity":"restaurant"},"name":"Zur Post","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Sonne":{"tags":{"name":"Zur Sonne","amenity":"restaurant"},"name":"Zur Sonne","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Евразия":{"tags":{"name":"Евразия","amenity":"restaurant"},"name":"Евразия","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ресторан":{"tags":{"name":"Ресторан","amenity":"restaurant"},"name":"Ресторан","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Тануки":{"tags":{"name":"Тануки","amenity":"restaurant"},"name":"Тануки","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Якитория":{"tags":{"name":"Якитория","amenity":"restaurant"},"name":"Якитория","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/رستوران":{"tags":{"name":"رستوران","amenity":"restaurant"},"name":"رستوران","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/مطعم":{"tags":{"name":"مطعم","amenity":"restaurant"},"name":"مطعم","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/はま寿司":{"tags":{"name":"はま寿司","amenity":"restaurant"},"name":"はま寿司","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/びっくりドンキー":{"tags":{"name":"びっくりドンキー","amenity":"restaurant"},"name":"びっくりドンキー","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/やよい軒":{"tags":{"name":"やよい軒","amenity":"restaurant"},"name":"やよい軒","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ガスト":{"tags":{"name":"ガスト","name:en":"Gusto","amenity":"restaurant"},"name":"ガスト","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ココス":{"tags":{"name":"ココス","amenity":"restaurant"},"name":"ココス","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/サイゼリア":{"tags":{"name":"サイゼリア","amenity":"restaurant"},"name":"サイゼリア","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/サイゼリヤ":{"tags":{"name":"サイゼリヤ","amenity":"restaurant"},"name":"サイゼリヤ","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ジョイフル":{"tags":{"name":"ジョイフル","amenity":"restaurant"},"name":"ジョイフル","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ジョナサン":{"tags":{"name":"ジョナサン","amenity":"restaurant"},"name":"ジョナサン","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ジョリーパスタ":{"tags":{"name":"ジョリーパスタ","amenity":"restaurant"},"name":"ジョリーパスタ","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/デニーズ":{"tags":{"name":"デニーズ","amenity":"restaurant"},"name":"デニーズ","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/バーミヤン":{"tags":{"name":"バーミヤン","amenity":"restaurant"},"name":"バーミヤン","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ロイヤルホスト":{"tags":{"name":"ロイヤルホスト","amenity":"restaurant"},"name":"ロイヤルホスト","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/丸亀製麺":{"tags":{"name":"丸亀製麺","amenity":"restaurant"},"name":"丸亀製麺","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/八方雲集":{"tags":{"name":"八方雲集","amenity":"restaurant"},"name":"八方雲集","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/夢庵":{"tags":{"name":"夢庵","amenity":"restaurant"},"name":"夢庵","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/大戸屋":{"tags":{"name":"大戸屋","amenity":"restaurant"},"name":"大戸屋","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/大阪王将":{"tags":{"name":"大阪王将","amenity":"restaurant"},"name":"大阪王将","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/天下一品":{"tags":{"name":"天下一品","amenity":"restaurant"},"name":"天下一品","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/安楽亭":{"tags":{"name":"安楽亭","amenity":"restaurant"},"name":"安楽亭","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/牛角":{"tags":{"name":"牛角","amenity":"restaurant"},"name":"牛角","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/食堂":{"tags":{"name":"食堂","amenity":"restaurant"},"name":"食堂","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/餃子の王将":{"tags":{"name":"餃子の王将","amenity":"restaurant"},"name":"餃子の王将","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/바다횟집 (Bada Fish Restaurant)":{"tags":{"name":"바다횟집 (Bada Fish Restaurant)","amenity":"restaurant"},"name":"바다횟집 (Bada Fish Restaurant)","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/school/Adolfo Lopez Mateos":{"tags":{"name":"Adolfo Lopez Mateos","amenity":"school"},"name":"Adolfo Lopez Mateos","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Agustin Ya�ez":{"tags":{"name":"Agustin Ya�ez","amenity":"school"},"name":"Agustin Ya�ez","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Albert-Schweitzer-Schule":{"tags":{"name":"Albert-Schweitzer-Schule","amenity":"school"},"name":"Albert-Schweitzer-Schule","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Amado Nervo":{"tags":{"name":"Amado Nervo","amenity":"school"},"name":"Amado Nervo","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Astrid-Lindgren-Schule":{"tags":{"name":"Astrid-Lindgren-Schule","amenity":"school"},"name":"Astrid-Lindgren-Schule","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Benito Juarez":{"tags":{"name":"Benito Juarez","amenity":"school"},"name":"Benito Juarez","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Brown School":{"tags":{"name":"Brown School","amenity":"school"},"name":"Brown School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/CEM":{"tags":{"name":"CEM","amenity":"school"},"name":"CEM","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Center School":{"tags":{"name":"Center School","amenity":"school"},"name":"Center School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Central Elementary School":{"tags":{"name":"Central Elementary School","amenity":"school"},"name":"Central Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Central High School":{"tags":{"name":"Central High School","amenity":"school"},"name":"Central High School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Central School":{"tags":{"name":"Central School","amenity":"school"},"name":"Central School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Colegio San José":{"tags":{"name":"Colegio San José","amenity":"school"},"name":"Colegio San José","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Collège Jean Moulin":{"tags":{"name":"Collège Jean Moulin","amenity":"school"},"name":"Collège Jean Moulin","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Collège privé Saint-Joseph":{"tags":{"name":"Collège privé Saint-Joseph","amenity":"school"},"name":"Collège privé Saint-Joseph","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Cuauhtemoc":{"tags":{"name":"Cuauhtemoc","amenity":"school"},"name":"Cuauhtemoc","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Curso Comunitario":{"tags":{"name":"Curso Comunitario","amenity":"school"},"name":"Curso Comunitario","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Cursos Comunitarios":{"tags":{"name":"Cursos Comunitarios","amenity":"school"},"name":"Cursos Comunitarios","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/EPP":{"tags":{"name":"EPP","amenity":"school"},"name":"EPP","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Emiliano Zapata":{"tags":{"name":"Emiliano Zapata","amenity":"school"},"name":"Emiliano Zapata","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Fairview Elementary School":{"tags":{"name":"Fairview Elementary School","amenity":"school"},"name":"Fairview Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Fairview School":{"tags":{"name":"Fairview School","amenity":"school"},"name":"Fairview School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Francisco I Madero":{"tags":{"name":"Francisco I Madero","amenity":"school"},"name":"Francisco I Madero","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Francisco I. Madero":{"tags":{"name":"Francisco I. Madero","amenity":"school"},"name":"Francisco I. Madero","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Francisco Villa":{"tags":{"name":"Francisco Villa","amenity":"school"},"name":"Francisco Villa","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Franklin Elementary School":{"tags":{"name":"Franklin Elementary School","amenity":"school"},"name":"Franklin Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Franklin School":{"tags":{"name":"Franklin School","amenity":"school"},"name":"Franklin School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Garfield Elementary School":{"tags":{"name":"Garfield Elementary School","amenity":"school"},"name":"Garfield Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Garfield School":{"tags":{"name":"Garfield School","amenity":"school"},"name":"Garfield School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Gimnazjum nr 1":{"tags":{"name":"Gimnazjum nr 1","amenity":"school"},"name":"Gimnazjum nr 1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Government School":{"tags":{"name":"Government School","amenity":"school"},"name":"Government School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Gregorio Torres Quintero":{"tags":{"name":"Gregorio Torres Quintero","amenity":"school"},"name":"Gregorio Torres Quintero","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Groupe Scolaire":{"tags":{"name":"Groupe Scolaire","amenity":"school"},"name":"Groupe Scolaire","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Guadalupe Victoria":{"tags":{"name":"Guadalupe Victoria","amenity":"school"},"name":"Guadalupe Victoria","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Highland School":{"tags":{"name":"Highland School","amenity":"school"},"name":"Highland School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Hillcrest Elementary School":{"tags":{"name":"Hillcrest Elementary School","amenity":"school"},"name":"Hillcrest Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Holy Cross School":{"tags":{"name":"Holy Cross School","amenity":"school"},"name":"Holy Cross School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Holy Family School":{"tags":{"name":"Holy Family School","amenity":"school"},"name":"Holy Family School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Holy Trinity School":{"tags":{"name":"Holy Trinity School","amenity":"school"},"name":"Holy Trinity School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Ignacio Allende":{"tags":{"name":"Ignacio Allende","amenity":"school"},"name":"Ignacio Allende","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Ignacio Zaragoza":{"tags":{"name":"Ignacio Zaragoza","amenity":"school"},"name":"Ignacio Zaragoza","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Immaculate Conception School":{"tags":{"name":"Immaculate Conception School","amenity":"school"},"name":"Immaculate Conception School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jackson Elementary School":{"tags":{"name":"Jackson Elementary School","amenity":"school"},"name":"Jackson Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jackson School":{"tags":{"name":"Jackson School","amenity":"school"},"name":"Jackson School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jefferson Elementary School":{"tags":{"name":"Jefferson Elementary School","amenity":"school"},"name":"Jefferson Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jefferson School":{"tags":{"name":"Jefferson School","amenity":"school"},"name":"Jefferson School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jose Clemente Orozco":{"tags":{"name":"Jose Clemente Orozco","amenity":"school"},"name":"Jose Clemente Orozco","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jose Ma Morelos Y Pavon":{"tags":{"name":"Jose Ma Morelos Y Pavon","amenity":"school"},"name":"Jose Ma Morelos Y Pavon","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jose Vasconcelos":{"tags":{"name":"Jose Vasconcelos","amenity":"school"},"name":"Jose Vasconcelos","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Josefa Ortiz De Dominguez":{"tags":{"name":"Josefa Ortiz De Dominguez","amenity":"school"},"name":"Josefa Ortiz De Dominguez","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Juan Escutia":{"tags":{"name":"Juan Escutia","amenity":"school"},"name":"Juan Escutia","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Justo Sierra":{"tags":{"name":"Justo Sierra","amenity":"school"},"name":"Justo Sierra","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Kumon":{"tags":{"name":"Kumon","amenity":"school"},"name":"Kumon","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Lazaro Cardenas":{"tags":{"name":"Lazaro Cardenas","amenity":"school"},"name":"Lazaro Cardenas","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Lazaro Cardenas Del Rio":{"tags":{"name":"Lazaro Cardenas Del Rio","amenity":"school"},"name":"Lazaro Cardenas Del Rio","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Leona Vicario":{"tags":{"name":"Leona Vicario","amenity":"school"},"name":"Leona Vicario","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Liberty Elementary School":{"tags":{"name":"Liberty Elementary School","amenity":"school"},"name":"Liberty Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Liberty School":{"tags":{"name":"Liberty School","amenity":"school"},"name":"Liberty School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Lincoln Elementary School":{"tags":{"name":"Lincoln Elementary School","amenity":"school"},"name":"Lincoln Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Lincoln School":{"tags":{"name":"Lincoln School","amenity":"school"},"name":"Lincoln School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Longfellow Elementary School":{"tags":{"name":"Longfellow Elementary School","amenity":"school"},"name":"Longfellow Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Longfellow School":{"tags":{"name":"Longfellow School","amenity":"school"},"name":"Longfellow School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Madison Elementary School":{"tags":{"name":"Madison Elementary School","amenity":"school"},"name":"Madison Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Manuel Lopez Cotilla":{"tags":{"name":"Manuel Lopez Cotilla","amenity":"school"},"name":"Manuel Lopez Cotilla","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Maple Grove School":{"tags":{"name":"Maple Grove School","amenity":"school"},"name":"Maple Grove School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/McKinley Elementary School":{"tags":{"name":"McKinley Elementary School","amenity":"school"},"name":"McKinley Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/McKinley School":{"tags":{"name":"McKinley School","amenity":"school"},"name":"McKinley School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Miguel Hidalgo":{"tags":{"name":"Miguel Hidalgo","amenity":"school"},"name":"Miguel Hidalgo","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Miguel Hidalgo Y Costilla":{"tags":{"name":"Miguel Hidalgo Y Costilla","amenity":"school"},"name":"Miguel Hidalgo Y Costilla","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Miller School":{"tags":{"name":"Miller School","amenity":"school"},"name":"Miller School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Mount Pleasant School":{"tags":{"name":"Mount Pleasant School","amenity":"school"},"name":"Mount Pleasant School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Mount Zion School":{"tags":{"name":"Mount Zion School","amenity":"school"},"name":"Mount Zion School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Mountain View Elementary School":{"tags":{"name":"Mountain View Elementary School","amenity":"school"},"name":"Mountain View Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/New Hope School":{"tags":{"name":"New Hope School","amenity":"school"},"name":"New Hope School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Nicolas Bravo":{"tags":{"name":"Nicolas Bravo","amenity":"school"},"name":"Nicolas Bravo","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Ni�os Heroes":{"tags":{"name":"Ni�os Heroes","amenity":"school"},"name":"Ni�os Heroes","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Nombre En Tramite":{"tags":{"name":"Nombre En Tramite","amenity":"school"},"name":"Nombre En Tramite","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/North Elementary School":{"tags":{"name":"North Elementary School","amenity":"school"},"name":"North Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Oak Grove School":{"tags":{"name":"Oak Grove School","amenity":"school"},"name":"Oak Grove School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Pedro Moreno":{"tags":{"name":"Pedro Moreno","amenity":"school"},"name":"Pedro Moreno","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Pestalozzischule":{"tags":{"name":"Pestalozzischule","amenity":"school"},"name":"Pestalozzischule","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Pine Grove School":{"tags":{"name":"Pine Grove School","amenity":"school"},"name":"Pine Grove School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Pleasant Hill School":{"tags":{"name":"Pleasant Hill School","amenity":"school"},"name":"Pleasant Hill School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Pleasant Valley School":{"tags":{"name":"Pleasant Valley School","amenity":"school"},"name":"Pleasant Valley School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Pleasant View School":{"tags":{"name":"Pleasant View School","amenity":"school"},"name":"Pleasant View School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Primaria Comunitaria":{"tags":{"name":"Primaria Comunitaria","amenity":"school"},"name":"Primaria Comunitaria","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Ramon Corona":{"tags":{"name":"Ramon Corona","amenity":"school"},"name":"Ramon Corona","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Ricardo Flores Magon":{"tags":{"name":"Ricardo Flores Magon","amenity":"school"},"name":"Ricardo Flores Magon","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Riverside School":{"tags":{"name":"Riverside School","amenity":"school"},"name":"Riverside School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Roosevelt Elementary School":{"tags":{"name":"Roosevelt Elementary School","amenity":"school"},"name":"Roosevelt Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Roosevelt School":{"tags":{"name":"Roosevelt School","amenity":"school"},"name":"Roosevelt School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/SD":{"tags":{"name":"SD","amenity":"school"},"name":"SD","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/SDN":{"tags":{"name":"SDN","amenity":"school"},"name":"SDN","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Sacred Heart School":{"tags":{"name":"Sacred Heart School","amenity":"school"},"name":"Sacred Heart School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Francis School":{"tags":{"name":"Saint Francis School","amenity":"school"},"name":"Saint Francis School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint James School":{"tags":{"name":"Saint James School","amenity":"school"},"name":"Saint James School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Johns School":{"tags":{"name":"Saint Johns School","amenity":"school"},"name":"Saint Johns School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Joseph School":{"tags":{"name":"Saint Joseph School","amenity":"school"},"name":"Saint Joseph School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Josephs School":{"tags":{"name":"Saint Josephs School","amenity":"school"},"name":"Saint Josephs School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Kizito Primary School":{"tags":{"name":"Saint Kizito Primary School","amenity":"school"},"name":"Saint Kizito Primary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Mary School":{"tags":{"name":"Saint Mary School","amenity":"school"},"name":"Saint Mary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Marys School":{"tags":{"name":"Saint Marys School","amenity":"school"},"name":"Saint Marys School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Patricks School":{"tags":{"name":"Saint Patricks School","amenity":"school"},"name":"Saint Patricks School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Paul School":{"tags":{"name":"Saint Paul School","amenity":"school"},"name":"Saint Paul School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Pauls School":{"tags":{"name":"Saint Pauls School","amenity":"school"},"name":"Saint Pauls School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Peters School":{"tags":{"name":"Saint Peters School","amenity":"school"},"name":"Saint Peters School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Schillerschule":{"tags":{"name":"Schillerschule","amenity":"school"},"name":"Schillerschule","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/School Number 1":{"tags":{"name":"School Number 1","amenity":"school"},"name":"School Number 1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/School Number 2":{"tags":{"name":"School Number 2","amenity":"school"},"name":"School Number 2","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/School Number 3":{"tags":{"name":"School Number 3","amenity":"school"},"name":"School Number 3","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/School Number 4":{"tags":{"name":"School Number 4","amenity":"school"},"name":"School Number 4","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Smith School":{"tags":{"name":"Smith School","amenity":"school"},"name":"Smith School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/South Elementary School":{"tags":{"name":"South Elementary School","amenity":"school"},"name":"South Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Sunnyside School":{"tags":{"name":"Sunnyside School","amenity":"school"},"name":"Sunnyside School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Szkoła Podstawowa nr 1":{"tags":{"name":"Szkoła Podstawowa nr 1","amenity":"school"},"name":"Szkoła Podstawowa nr 1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Szkoła Podstawowa nr 2":{"tags":{"name":"Szkoła Podstawowa nr 2","amenity":"school"},"name":"Szkoła Podstawowa nr 2","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Szkoła Podstawowa nr 3":{"tags":{"name":"Szkoła Podstawowa nr 3","amenity":"school"},"name":"Szkoła Podstawowa nr 3","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Trinity School":{"tags":{"name":"Trinity School","amenity":"school"},"name":"Trinity School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/UNIDAD EDUCATIVA":{"tags":{"name":"UNIDAD EDUCATIVA","amenity":"school"},"name":"UNIDAD EDUCATIVA","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Union School":{"tags":{"name":"Union School","amenity":"school"},"name":"Union School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Valentin Gomez Farias":{"tags":{"name":"Valentin Gomez Farias","amenity":"school"},"name":"Valentin Gomez Farias","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Venustiano Carranza":{"tags":{"name":"Venustiano Carranza","amenity":"school"},"name":"Venustiano Carranza","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Vicente Guerrero":{"tags":{"name":"Vicente Guerrero","amenity":"school"},"name":"Vicente Guerrero","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Volkshochschule":{"tags":{"name":"Volkshochschule","amenity":"school"},"name":"Volkshochschule","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Volksschule":{"tags":{"name":"Volksschule","amenity":"school"},"name":"Volksschule","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Washington Elementary School":{"tags":{"name":"Washington Elementary School","amenity":"school"},"name":"Washington Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Washington School":{"tags":{"name":"Washington School","amenity":"school"},"name":"Washington School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/West Elementary School":{"tags":{"name":"West Elementary School","amenity":"school"},"name":"West Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/White School":{"tags":{"name":"White School","amenity":"school"},"name":"White School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Wilson Elementary School":{"tags":{"name":"Wilson Elementary School","amenity":"school"},"name":"Wilson Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Wilson School":{"tags":{"name":"Wilson School","amenity":"school"},"name":"Wilson School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Általános iskola":{"tags":{"name":"Általános iskola","amenity":"school"},"name":"Általános iskola","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École Jules Ferry":{"tags":{"name":"École Jules Ferry","amenity":"school"},"name":"École Jules Ferry","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École Notre-Dame":{"tags":{"name":"École Notre-Dame","amenity":"school"},"name":"École Notre-Dame","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École Saint-Joseph":{"tags":{"name":"École Saint-Joseph","amenity":"school"},"name":"École Saint-Joseph","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École primaire Jean Jaurès":{"tags":{"name":"École primaire Jean Jaurès","amenity":"school"},"name":"École primaire Jean Jaurès","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École primaire Jules Ferry":{"tags":{"name":"École primaire Jules Ferry","amenity":"school"},"name":"École primaire Jules Ferry","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École primaire privée Notre-Dame":{"tags":{"name":"École primaire privée Notre-Dame","amenity":"school"},"name":"École primaire privée Notre-Dame","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École primaire privée Saint-Joseph":{"tags":{"name":"École primaire privée Saint-Joseph","amenity":"school"},"name":"École primaire privée Saint-Joseph","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École primaire privée Sainte-Marie":{"tags":{"name":"École primaire privée Sainte-Marie","amenity":"school"},"name":"École primaire privée Sainte-Marie","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École élémentaire Jules Ferry":{"tags":{"name":"École élémentaire Jules Ferry","amenity":"school"},"name":"École élémentaire Jules Ferry","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Școala Generală":{"tags":{"name":"Școala Generală","amenity":"school"},"name":"Școala Generală","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Școală":{"tags":{"name":"Școală","amenity":"school"},"name":"Școală","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Вечерняя школа":{"tags":{"name":"Вечерняя школа","amenity":"school"},"name":"Вечерняя школа","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Гимназия №1":{"tags":{"name":"Гимназия №1","amenity":"school"},"name":"Гимназия №1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Средняя школа №1":{"tags":{"name":"Средняя школа №1","amenity":"school"},"name":"Средняя школа №1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Средняя школа №2":{"tags":{"name":"Средняя школа №2","amenity":"school"},"name":"Средняя школа №2","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Средняя школа №3":{"tags":{"name":"Средняя школа №3","amenity":"school"},"name":"Средняя школа №3","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа № 1":{"tags":{"name":"Школа № 1","amenity":"school"},"name":"Школа № 1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа № 2":{"tags":{"name":"Школа № 2","amenity":"school"},"name":"Школа № 2","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа № 3":{"tags":{"name":"Школа № 3","amenity":"school"},"name":"Школа № 3","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа № 4":{"tags":{"name":"Школа № 4","amenity":"school"},"name":"Школа № 4","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа № 5":{"tags":{"name":"Школа № 5","amenity":"school"},"name":"Школа № 5","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №1":{"tags":{"name":"Школа №1","amenity":"school"},"name":"Школа №1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №10":{"tags":{"name":"Школа №10","amenity":"school"},"name":"Школа №10","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №11":{"tags":{"name":"Школа №11","amenity":"school"},"name":"Школа №11","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №12":{"tags":{"name":"Школа №12","amenity":"school"},"name":"Школа №12","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №13":{"tags":{"name":"Школа №13","amenity":"school"},"name":"Школа №13","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №14":{"tags":{"name":"Школа №14","amenity":"school"},"name":"Школа №14","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №15":{"tags":{"name":"Школа №15","amenity":"school"},"name":"Школа №15","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №16":{"tags":{"name":"Школа №16","amenity":"school"},"name":"Школа №16","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №17":{"tags":{"name":"Школа №17","amenity":"school"},"name":"Школа №17","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №18":{"tags":{"name":"Школа №18","amenity":"school"},"name":"Школа №18","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №19":{"tags":{"name":"Школа №19","amenity":"school"},"name":"Школа №19","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №2":{"tags":{"name":"Школа №2","amenity":"school"},"name":"Школа №2","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №20":{"tags":{"name":"Школа №20","amenity":"school"},"name":"Школа №20","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №21":{"tags":{"name":"Школа №21","amenity":"school"},"name":"Школа №21","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №22":{"tags":{"name":"Школа №22","amenity":"school"},"name":"Школа №22","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №23":{"tags":{"name":"Школа №23","amenity":"school"},"name":"Школа №23","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №24":{"tags":{"name":"Школа №24","amenity":"school"},"name":"Школа №24","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №25":{"tags":{"name":"Школа №25","amenity":"school"},"name":"Школа №25","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №26":{"tags":{"name":"Школа №26","amenity":"school"},"name":"Школа №26","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №27":{"tags":{"name":"Школа №27","amenity":"school"},"name":"Школа №27","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №28":{"tags":{"name":"Школа №28","amenity":"school"},"name":"Школа №28","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №3":{"tags":{"name":"Школа №3","amenity":"school"},"name":"Школа №3","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №31":{"tags":{"name":"Школа №31","amenity":"school"},"name":"Школа №31","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №35":{"tags":{"name":"Школа №35","amenity":"school"},"name":"Школа №35","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №4":{"tags":{"name":"Школа №4","amenity":"school"},"name":"Школа №4","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №5":{"tags":{"name":"Школа №5","amenity":"school"},"name":"Школа №5","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №6":{"tags":{"name":"Школа №6","amenity":"school"},"name":"Школа №6","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №7":{"tags":{"name":"Школа №7","amenity":"school"},"name":"Школа №7","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №8":{"tags":{"name":"Школа №8","amenity":"school"},"name":"Школа №8","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №9":{"tags":{"name":"Школа №9","amenity":"school"},"name":"Школа №9","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/مدرسة":{"tags":{"name":"مدرسة","amenity":"school"},"name":"مدرسة","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/مدرسه":{"tags":{"name":"مدرسه","amenity":"school"},"name":"مدرسه","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/市立南中学校":{"tags":{"name":"市立南中学校","amenity":"school"},"name":"市立南中学校","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/市立南小学校":{"tags":{"name":"市立南小学校","amenity":"school"},"name":"市立南小学校","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/市立東中学校":{"tags":{"name":"市立東中学校","amenity":"school"},"name":"市立東中学校","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/social_facility/Safe Haven":{"tags":{"name":"Safe Haven","amenity":"social_facility"},"name":"Safe Haven","icon":"poi-social-facility","geometry":["point","area"],"fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"suggestion":true},"amenity/social_facility/Детский дом":{"tags":{"name":"Детский дом","amenity":"social_facility"},"name":"Детский дом","icon":"poi-social-facility","geometry":["point","area"],"fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"suggestion":true},"amenity/social_facility/Социальный участковый":{"tags":{"name":"Социальный участковый","amenity":"social_facility"},"name":"Социальный участковый","icon":"poi-social-facility","geometry":["point","area"],"fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"suggestion":true},"amenity/theatre/Amfiteatr":{"tags":{"name":"Amfiteatr","amenity":"theatre"},"name":"Amfiteatr","icon":"theatre","geometry":["point","area"],"fields":["name","operator","address","building_area"],"suggestion":true},"amenity/theatre/Amphitheater":{"tags":{"name":"Amphitheater","amenity":"theatre"},"name":"Amphitheater","icon":"theatre","geometry":["point","area"],"fields":["name","operator","address","building_area"],"suggestion":true},"amenity/theatre/Amphitheatre":{"tags":{"name":"Amphitheatre","amenity":"theatre"},"name":"Amphitheatre","icon":"theatre","geometry":["point","area"],"fields":["name","operator","address","building_area"],"suggestion":true},"amenity/theatre/Freilichtbühne":{"tags":{"name":"Freilichtbühne","amenity":"theatre"},"name":"Freilichtbühne","icon":"theatre","geometry":["point","area"],"fields":["name","operator","address","building_area"],"suggestion":true},"amenity/theatre/Teatro Comunale":{"tags":{"name":"Teatro Comunale","amenity":"theatre"},"name":"Teatro Comunale","icon":"theatre","geometry":["point","area"],"fields":["name","operator","address","building_area"],"suggestion":true},"leisure/fitness_centre/LA Fitness":{"tags":{"name":"LA Fitness","leisure":"fitness_centre"},"name":"LA Fitness","icon":"pitch","geometry":["point","area"],"fields":["name","sport","address","building_area","opening_hours"],"suggestion":true},"leisure/fitness_centre/Planet Fitness":{"tags":{"name":"Planet Fitness","leisure":"fitness_centre"},"name":"Planet Fitness","icon":"pitch","geometry":["point","area"],"fields":["name","sport","address","building_area","opening_hours"],"suggestion":true},"leisure/fitness_centre/Snap Fitness":{"tags":{"name":"Snap Fitness","leisure":"fitness_centre"},"name":"Snap Fitness","icon":"pitch","geometry":["point","area"],"fields":["name","sport","address","building_area","opening_hours"],"suggestion":true},"leisure/playground/Çocuk Parkı":{"tags":{"name":"Çocuk Parkı","leisure":"playground"},"name":"Çocuk Parkı","icon":"playground","geometry":["point","area"],"fields":["name","operator","surface","playground/max_age","playground/min_age","access_simple"],"suggestion":true},"leisure/playground/놀이터":{"tags":{"name":"놀이터","leisure":"playground"},"name":"놀이터","icon":"playground","geometry":["point","area"],"fields":["name","operator","surface","playground/max_age","playground/min_age","access_simple"],"suggestion":true},"leisure/sports_centre/Anytime Fitness":{"tags":{"name":"Anytime Fitness","leisure":"sports_centre"},"name":"Anytime Fitness","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Complejo Municipal de Deportes":{"tags":{"name":"Complejo Municipal de Deportes","leisure":"sports_centre"},"name":"Complejo Municipal de Deportes","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Complexe Sportif":{"tags":{"name":"Complexe Sportif","leisure":"sports_centre"},"name":"Complexe Sportif","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Curves":{"tags":{"name":"Curves","leisure":"sports_centre"},"name":"Curves","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Fitness First":{"tags":{"name":"Fitness First","leisure":"sports_centre"},"name":"Fitness First","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Gold's Gym":{"tags":{"name":"Gold's Gym","leisure":"sports_centre"},"name":"Gold's Gym","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Kieser Training":{"tags":{"name":"Kieser Training","leisure":"sports_centre"},"name":"Kieser Training","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Life Time Fitness":{"tags":{"name":"Life Time Fitness","leisure":"sports_centre"},"name":"Life Time Fitness","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/McFit":{"tags":{"name":"McFit","leisure":"sports_centre"},"name":"McFit","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Mrs. Sporty":{"tags":{"name":"Mrs. Sporty","leisure":"sports_centre"},"name":"Mrs. Sporty","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Orlik":{"tags":{"name":"Orlik","leisure":"sports_centre"},"name":"Orlik","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Pabellón Municipal de Deportes":{"tags":{"name":"Pabellón Municipal de Deportes","leisure":"sports_centre"},"name":"Pabellón Municipal de Deportes","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Palestra Comunale":{"tags":{"name":"Palestra Comunale","leisure":"sports_centre"},"name":"Palestra Comunale","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Salle Omnisport":{"tags":{"name":"Salle Omnisport","leisure":"sports_centre"},"name":"Salle Omnisport","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Virgin Active":{"tags":{"name":"Virgin Active","leisure":"sports_centre"},"name":"Virgin Active","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/YMCA":{"tags":{"name":"YMCA","leisure":"sports_centre"},"name":"YMCA","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/ДЮСШ":{"tags":{"name":"ДЮСШ","leisure":"sports_centre"},"name":"ДЮСШ","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Ледовый дворец":{"tags":{"name":"Ледовый дворец","leisure":"sports_centre"},"name":"Ледовый дворец","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/体育館":{"tags":{"name":"体育館","leisure":"sports_centre"},"name":"体育館","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/swimming_pool/Schwimmerbecken":{"tags":{"name":"Schwimmerbecken","leisure":"swimming_pool"},"name":"Schwimmerbecken","icon":"swimming","geometry":["point","area"],"fields":["name","access_simple","operator","address"],"suggestion":true},"leisure/swimming_pool/Yüzme Havuzu":{"tags":{"name":"Yüzme Havuzu","leisure":"swimming_pool"},"name":"Yüzme Havuzu","icon":"swimming","geometry":["point","area"],"fields":["name","access_simple","operator","address"],"suggestion":true},"leisure/swimming_pool/プール":{"tags":{"name":"プール","leisure":"swimming_pool"},"name":"プール","icon":"swimming","geometry":["point","area"],"fields":["name","access_simple","operator","address"],"suggestion":true},"leisure/swimming_pool/游泳池":{"tags":{"name":"游泳池","leisure":"swimming_pool"},"name":"游泳池","icon":"swimming","geometry":["point","area"],"fields":["name","access_simple","operator","address"],"suggestion":true},"man_made/windmill/De Hoop":{"tags":{"name":"De Hoop","man_made":"windmill"},"name":"De Hoop","icon":"poi-windmill","geometry":["point","area"],"fields":["building_area"],"suggestion":true},"shop/alcohol/Alko":{"tags":{"name":"Alko","shop":"alcohol"},"name":"Alko","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/BC Liquor Store":{"tags":{"name":"BC Liquor Store","shop":"alcohol"},"name":"BC Liquor Store","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/BWS":{"tags":{"name":"BWS","shop":"alcohol"},"name":"BWS","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Bargain Booze":{"tags":{"name":"Bargain Booze","shop":"alcohol"},"name":"Bargain Booze","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Beer Store":{"tags":{"name":"Beer Store","shop":"alcohol"},"name":"Beer Store","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Botilleria":{"tags":{"name":"Botilleria","shop":"alcohol"},"name":"Botilleria","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Dan Murphy's":{"tags":{"name":"Dan Murphy's","shop":"alcohol"},"name":"Dan Murphy's","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Gall & Gall":{"tags":{"name":"Gall & Gall","shop":"alcohol"},"name":"Gall & Gall","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/LCBO":{"tags":{"name":"LCBO","shop":"alcohol"},"name":"LCBO","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Liquor Depot":{"tags":{"name":"Liquor Depot","shop":"alcohol"},"name":"Liquor Depot","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Liquor Store":{"tags":{"name":"Liquor Store","shop":"alcohol"},"name":"Liquor Store","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Liquorland":{"tags":{"name":"Liquorland","shop":"alcohol"},"name":"Liquorland","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Mitra":{"tags":{"name":"Mitra","shop":"alcohol"},"name":"Mitra","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Nicolas":{"tags":{"name":"Nicolas","shop":"alcohol"},"name":"Nicolas","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/SAQ":{"tags":{"name":"SAQ","shop":"alcohol"},"name":"SAQ","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Systembolaget":{"tags":{"name":"Systembolaget","shop":"alcohol"},"name":"Systembolaget","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/The Beer Store":{"tags":{"name":"The Beer Store","shop":"alcohol"},"name":"The Beer Store","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Vinmonopolet":{"tags":{"name":"Vinmonopolet","shop":"alcohol"},"name":"Vinmonopolet","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Алкомаркет":{"tags":{"name":"Алкомаркет","shop":"alcohol"},"name":"Алкомаркет","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Ароматный мир":{"tags":{"name":"Ароматный мир","shop":"alcohol"},"name":"Ароматный мир","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Бристоль":{"tags":{"name":"Бристоль","shop":"alcohol"},"name":"Бристоль","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Градус":{"tags":{"name":"Градус","shop":"alcohol"},"name":"Градус","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Живое пиво":{"tags":{"name":"Живое пиво","shop":"alcohol"},"name":"Живое пиво","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Красное & Белое":{"tags":{"name":"Красное & Белое","shop":"alcohol"},"name":"Красное & Белое","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Норман":{"tags":{"name":"Норман","shop":"alcohol"},"name":"Норман","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Отдохни":{"tags":{"name":"Отдохни","shop":"alcohol"},"name":"Отдохни","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Пиво":{"tags":{"name":"Пиво","shop":"alcohol"},"name":"Пиво","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Разливное пиво":{"tags":{"name":"Разливное пиво","shop":"alcohol"},"name":"Разливное пиво","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/baby_goods/Aubert":{"tags":{"name":"Aubert","shop":"baby_goods"},"name":"Aubert","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/baby_goods/Babies R Us":{"tags":{"name":"Babies R Us","shop":"baby_goods"},"name":"Babies R Us","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/baby_goods/BabyOne":{"tags":{"name":"BabyOne","shop":"baby_goods"},"name":"BabyOne","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/AILI":{"tags":{"name":"AILI","shop":"bakery"},"name":"AILI","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Anker":{"tags":{"name":"Anker","shop":"bakery"},"name":"Anker","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Awiteks":{"tags":{"name":"Awiteks","shop":"bakery"},"name":"Awiteks","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Backshop":{"tags":{"name":"Backshop","shop":"bakery"},"name":"Backshop","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Backwerk":{"tags":{"name":"Backwerk","shop":"bakery"},"name":"Backwerk","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Baguette":{"tags":{"name":"Baguette","shop":"bakery"},"name":"Baguette","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bakers Delight":{"tags":{"name":"Bakers Delight","shop":"bakery"},"name":"Bakers Delight","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bakker Bart":{"tags":{"name":"Bakker Bart","shop":"bakery"},"name":"Bakker Bart","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Banette":{"tags":{"name":"Banette","shop":"bakery"},"name":"Banette","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bäckerei Fuchs":{"tags":{"name":"Bäckerei Fuchs","shop":"bakery"},"name":"Bäckerei Fuchs","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bäckerei Grimminger":{"tags":{"name":"Bäckerei Grimminger","shop":"bakery"},"name":"Bäckerei Grimminger","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bäckerei Müller":{"tags":{"name":"Bäckerei Müller","shop":"bakery"},"name":"Bäckerei Müller","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bäckerei Schmidt":{"tags":{"name":"Bäckerei Schmidt","shop":"bakery"},"name":"Bäckerei Schmidt","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bäckerei Schneider":{"tags":{"name":"Bäckerei Schneider","shop":"bakery"},"name":"Bäckerei Schneider","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Cooplands":{"tags":{"name":"Cooplands","shop":"bakery"},"name":"Cooplands","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Dat Backhus":{"tags":{"name":"Dat Backhus","shop":"bakery"},"name":"Dat Backhus","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Der Beck":{"tags":{"name":"Der Beck","shop":"bakery"},"name":"Der Beck","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Der Mann":{"tags":{"name":"Der Mann","shop":"bakery"},"name":"Der Mann","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Ditsch":{"tags":{"name":"Ditsch","shop":"bakery"},"name":"Ditsch","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Fornetti":{"tags":{"name":"Fornetti","shop":"bakery"},"name":"Fornetti","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Goeken backen":{"tags":{"name":"Goeken backen","shop":"bakery"},"name":"Goeken backen","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Goldilocks":{"tags":{"name":"Goldilocks","shop":"bakery"},"name":"Goldilocks","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Greggs":{"tags":{"name":"Greggs","shop":"bakery"},"name":"Greggs","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Hofpfisterei":{"tags":{"name":"Hofpfisterei","shop":"bakery"},"name":"Hofpfisterei","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Ihle":{"tags":{"name":"Ihle","shop":"bakery"},"name":"Ihle","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Julie's Bakeshop":{"tags":{"name":"Julie's Bakeshop","shop":"bakery"},"name":"Julie's Bakeshop","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/K&U":{"tags":{"name":"K&U","shop":"bakery"},"name":"K&U","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/K&U Bäckerei":{"tags":{"name":"K&U Bäckerei","shop":"bakery"},"name":"K&U Bäckerei","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Kamps":{"tags":{"name":"Kamps","shop":"bakery"},"name":"Kamps","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/La Mie Câline":{"tags":{"name":"La Mie Câline","shop":"bakery"},"name":"La Mie Câline","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Le Crobag":{"tags":{"name":"Le Crobag","shop":"bakery"},"name":"Le Crobag","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Le Fournil":{"tags":{"name":"Le Fournil","shop":"bakery"},"name":"Le Fournil","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Lila Bäcker":{"tags":{"name":"Lila Bäcker","shop":"bakery"},"name":"Lila Bäcker","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Lipóti Pékség":{"tags":{"name":"Lipóti Pékség","shop":"bakery"},"name":"Lipóti Pékség","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Marie Blachère":{"tags":{"name":"Marie Blachère","shop":"bakery"},"name":"Marie Blachère","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Mlinar":{"tags":{"name":"Mlinar","shop":"bakery"},"name":"Mlinar","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Musmanni":{"tags":{"name":"Musmanni","shop":"bakery"},"name":"Musmanni","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Oebel":{"tags":{"name":"Oebel","shop":"bakery"},"name":"Oebel","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Paul":{"tags":{"name":"Paul","shop":"bakery"},"name":"Paul","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Red Ribbon":{"tags":{"name":"Red Ribbon","shop":"bakery"},"name":"Red Ribbon","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Schäfer's":{"tags":{"name":"Schäfer's","shop":"bakery"},"name":"Schäfer's","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Sehne":{"tags":{"name":"Sehne","shop":"bakery"},"name":"Sehne","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Stadtbäckerei":{"tags":{"name":"Stadtbäckerei","shop":"bakery"},"name":"Stadtbäckerei","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Steinecke":{"tags":{"name":"Steinecke","shop":"bakery"},"name":"Steinecke","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Sternenbäck":{"tags":{"name":"Sternenbäck","shop":"bakery"},"name":"Sternenbäck","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Ströck":{"tags":{"name":"Ströck","shop":"bakery"},"name":"Ströck","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Wiener Feinbäcker":{"tags":{"name":"Wiener Feinbäcker","shop":"bakery"},"name":"Wiener Feinbäcker","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/von Allwörden":{"tags":{"name":"von Allwörden","shop":"bakery"},"name":"von Allwörden","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Булочная":{"tags":{"name":"Булочная","shop":"bakery"},"name":"Булочная","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Горячий хлеб":{"tags":{"name":"Горячий хлеб","shop":"bakery"},"name":"Горячий хлеб","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Каравай":{"tags":{"name":"Каравай","shop":"bakery"},"name":"Каравай","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Кулиничи":{"tags":{"name":"Кулиничи","shop":"bakery"},"name":"Кулиничи","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Кулиничі":{"tags":{"name":"Кулиничі","shop":"bakery"},"name":"Кулиничі","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Свежий хлеб":{"tags":{"name":"Свежий хлеб","shop":"bakery"},"name":"Свежий хлеб","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Хлеб":{"tags":{"name":"Хлеб","shop":"bakery"},"name":"Хлеб","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/مخبز":{"tags":{"name":"مخبز","shop":"bakery"},"name":"مخبز","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/مخبزة":{"tags":{"name":"مخبزة","shop":"bakery"},"name":"مخبزة","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/نان لواش":{"tags":{"name":"نان لواش","shop":"bakery"},"name":"نان لواش","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/نانوایی":{"tags":{"name":"نانوایی","shop":"bakery"},"name":"نانوایی","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/نانوایی بربری":{"tags":{"name":"نانوایی بربری","shop":"bakery"},"name":"نانوایی بربری","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/نانوایی سنگک":{"tags":{"name":"نانوایی سنگک","shop":"bakery"},"name":"نانوایی سنگک","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/نانوایی سنگکی":{"tags":{"name":"نانوایی سنگکی","shop":"bakery"},"name":"نانوایی سنگکی","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/نانوایی لواش":{"tags":{"name":"نانوایی لواش","shop":"bakery"},"name":"نانوایی لواش","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beauty/Sally Beauty Supply":{"tags":{"name":"Sally Beauty Supply","shop":"beauty"},"name":"Sally Beauty Supply","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","beauty","opening_hours","payment_multi"],"suggestion":true},"shop/beauty/Yves Rocher":{"tags":{"name":"Yves Rocher","shop":"beauty"},"name":"Yves Rocher","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","beauty","opening_hours","payment_multi"],"suggestion":true},"shop/bed/Matratzen Concord":{"tags":{"name":"Matratzen Concord","shop":"bed"},"name":"Matratzen Concord","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bed/Mattress Firm":{"tags":{"name":"Mattress Firm","shop":"bed"},"name":"Mattress Firm","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bed/Sleepy's":{"tags":{"name":"Sleepy's","shop":"bed"},"name":"Sleepy's","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/50嵐":{"tags":{"name":"50嵐","shop":"beverages"},"name":"50嵐","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Dursty":{"tags":{"name":"Dursty","shop":"beverages"},"name":"Dursty","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Edeka Getränkemarkt":{"tags":{"name":"Edeka Getränkemarkt","shop":"beverages"},"name":"Edeka Getränkemarkt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Fristo":{"tags":{"name":"Fristo","shop":"beverages"},"name":"Fristo","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Getränke Hoffmann":{"tags":{"name":"Getränke Hoffmann","shop":"beverages"},"name":"Getränke Hoffmann","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Getränkeland":{"tags":{"name":"Getränkeland","shop":"beverages"},"name":"Getränkeland","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Getränkemarkt":{"tags":{"name":"Getränkemarkt","shop":"beverages"},"name":"Getränkemarkt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Orterer Getränkemarkt":{"tags":{"name":"Orterer Getränkemarkt","shop":"beverages"},"name":"Orterer Getränkemarkt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Rewe Getränkemarkt":{"tags":{"name":"Rewe Getränkemarkt","shop":"beverages"},"name":"Rewe Getränkemarkt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Trinkgut":{"tags":{"name":"Trinkgut","shop":"beverages"},"name":"Trinkgut","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/茶湯會":{"tags":{"name":"茶湯會","shop":"beverages"},"name":"茶湯會","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bicycle/Halfords":{"tags":{"name":"Halfords","shop":"bicycle"},"name":"Halfords","icon":"bicycle","geometry":["point","area"],"fields":["name","operator","address","building_area","service/bicycle","opening_hours","payment_multi"],"suggestion":true},"shop/bicycle/Веломарка":{"tags":{"name":"Веломарка","shop":"bicycle"},"name":"Веломарка","icon":"bicycle","geometry":["point","area"],"fields":["name","operator","address","building_area","service/bicycle","opening_hours","payment_multi"],"suggestion":true},"shop/bicycle/サイクルベースあさひ":{"tags":{"name":"サイクルベースあさひ","shop":"bicycle"},"name":"サイクルベースあさひ","icon":"bicycle","geometry":["point","area"],"fields":["name","operator","address","building_area","service/bicycle","opening_hours","payment_multi"],"suggestion":true},"shop/bookmaker/Betfred":{"tags":{"name":"Betfred","shop":"bookmaker"},"name":"Betfred","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bookmaker/Coral":{"tags":{"name":"Coral","shop":"bookmaker"},"name":"Coral","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bookmaker/Ladbrokes":{"tags":{"name":"Ladbrokes","shop":"bookmaker"},"name":"Ladbrokes","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bookmaker/Paddy Power":{"tags":{"name":"Paddy Power","shop":"bookmaker"},"name":"Paddy Power","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bookmaker/William Hill":{"tags":{"name":"William Hill","shop":"bookmaker"},"name":"William Hill","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bookmaker/ΟΠΑΠ":{"tags":{"name":"ΟΠΑΠ","shop":"bookmaker"},"name":"ΟΠΑΠ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Boucherie Charcuterie":{"tags":{"name":"Boucherie Charcuterie","shop":"butcher"},"name":"Boucherie Charcuterie","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Carnicería":{"tags":{"name":"Carnicería","shop":"butcher"},"name":"Carnicería","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Fleischerei Richter":{"tags":{"name":"Fleischerei Richter","shop":"butcher"},"name":"Fleischerei Richter","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Húsbolt":{"tags":{"name":"Húsbolt","shop":"butcher"},"name":"Húsbolt","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Macelleria":{"tags":{"name":"Macelleria","shop":"butcher"},"name":"Macelleria","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Vinzenzmurr":{"tags":{"name":"Vinzenzmurr","shop":"butcher"},"name":"Vinzenzmurr","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Ариант":{"tags":{"name":"Ариант","shop":"butcher"},"name":"Ариант","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Великолукский мясокомбинат":{"tags":{"name":"Великолукский мясокомбинат","shop":"butcher"},"name":"Великолукский мясокомбинат","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Мясная лавка":{"tags":{"name":"Мясная лавка","shop":"butcher"},"name":"Мясная лавка","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Мясницкий ряд":{"tags":{"name":"Мясницкий ряд","shop":"butcher"},"name":"Мясницкий ряд","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Мясной":{"tags":{"name":"Мясной","shop":"butcher"},"name":"Мясной","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Мясо":{"tags":{"name":"Мясо","shop":"butcher"},"name":"Мясо","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Наша Ряба":{"tags":{"name":"Наша Ряба","shop":"butcher"},"name":"Наша Ряба","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Свежее мясо":{"tags":{"name":"Свежее мясо","shop":"butcher"},"name":"Свежее мясо","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car/Audi":{"tags":{"name":"Audi","shop":"car"},"name":"Audi","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/BMW":{"tags":{"name":"BMW","shop":"car"},"name":"BMW","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Chevrolet":{"tags":{"name":"Chevrolet","shop":"car"},"name":"Chevrolet","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Citroën":{"tags":{"name":"Citroën","shop":"car"},"name":"Citroën","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Dacia":{"tags":{"name":"Dacia","shop":"car"},"name":"Dacia","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Fiat":{"tags":{"name":"Fiat","shop":"car"},"name":"Fiat","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Ford":{"tags":{"name":"Ford","shop":"car"},"name":"Ford","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Honda":{"tags":{"name":"Honda","shop":"car"},"name":"Honda","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Hyundai":{"tags":{"name":"Hyundai","shop":"car"},"name":"Hyundai","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Isuzu":{"tags":{"name":"Isuzu","shop":"car"},"name":"Isuzu","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Kia":{"tags":{"name":"Kia","shop":"car"},"name":"Kia","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Land Rover":{"tags":{"name":"Land Rover","shop":"car"},"name":"Land Rover","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Lexus":{"tags":{"name":"Lexus","shop":"car"},"name":"Lexus","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Mazda":{"tags":{"name":"Mazda","shop":"car"},"name":"Mazda","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Mercedes-Benz":{"tags":{"name":"Mercedes-Benz","shop":"car"},"name":"Mercedes-Benz","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Mitsubishi":{"tags":{"name":"Mitsubishi","shop":"car"},"name":"Mitsubishi","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Mitsubishi Motors":{"tags":{"name":"Mitsubishi Motors","shop":"car"},"name":"Mitsubishi Motors","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/NISSAN":{"tags":{"name":"NISSAN","shop":"car"},"name":"NISSAN","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Nissan":{"tags":{"name":"Nissan","shop":"car"},"name":"Nissan","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Opel":{"tags":{"name":"Opel","shop":"car"},"name":"Opel","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Peugeot":{"tags":{"name":"Peugeot","shop":"car"},"name":"Peugeot","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Porsche":{"tags":{"name":"Porsche","shop":"car"},"name":"Porsche","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Renault":{"tags":{"name":"Renault","shop":"car"},"name":"Renault","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Seat":{"tags":{"name":"Seat","shop":"car"},"name":"Seat","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Skoda":{"tags":{"name":"Skoda","shop":"car"},"name":"Skoda","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Subaru":{"tags":{"name":"Subaru","shop":"car"},"name":"Subaru","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Suzuki":{"tags":{"name":"Suzuki","shop":"car"},"name":"Suzuki","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Toyota":{"tags":{"name":"Toyota","shop":"car"},"name":"Toyota","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Volkswagen":{"tags":{"name":"Volkswagen","shop":"car"},"name":"Volkswagen","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Volvo":{"tags":{"name":"Volvo","shop":"car"},"name":"Volvo","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Advance Auto Parts":{"tags":{"name":"Advance Auto Parts","shop":"car_parts"},"name":"Advance Auto Parts","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/AutoZone":{"tags":{"name":"AutoZone","shop":"car_parts"},"name":"AutoZone","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Brezan":{"tags":{"name":"Brezan","shop":"car_parts"},"name":"Brezan","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/NAPA Auto Parts":{"tags":{"name":"NAPA Auto Parts","shop":"car_parts"},"name":"NAPA Auto Parts","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Napa Auto Parts":{"tags":{"name":"Napa Auto Parts","shop":"car_parts"},"name":"Napa Auto Parts","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/O'Reilly Auto Parts":{"tags":{"name":"O'Reilly Auto Parts","shop":"car_parts"},"name":"O'Reilly Auto Parts","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Repco":{"tags":{"name":"Repco","shop":"car_parts"},"name":"Repco","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Tokić":{"tags":{"name":"Tokić","shop":"car_parts"},"name":"Tokić","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/repuestos automotrices":{"tags":{"name":"repuestos automotrices","shop":"car_parts"},"name":"repuestos automotrices","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Автозапчастини":{"tags":{"name":"Автозапчастини","shop":"car_parts"},"name":"Автозапчастини","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Автомир":{"tags":{"name":"Автомир","shop":"car_parts"},"name":"Автомир","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/イエローハット":{"tags":{"name":"イエローハット","shop":"car_parts"},"name":"イエローハット","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/オートバックス":{"tags":{"name":"オートバックス","shop":"car_parts"},"name":"オートバックス","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/タイヤ館":{"tags":{"name":"タイヤ館","shop":"car_parts"},"name":"タイヤ館","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/A.T.U":{"tags":{"name":"A.T.U","shop":"car_repair"},"name":"A.T.U","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Bosch Car Service":{"tags":{"name":"Bosch Car Service","shop":"car_repair"},"name":"Bosch Car Service","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Carglass":{"tags":{"name":"Carglass","shop":"car_repair"},"name":"Carglass","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Euromaster":{"tags":{"name":"Euromaster","shop":"car_repair"},"name":"Euromaster","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Feu Vert":{"tags":{"name":"Feu Vert","shop":"car_repair"},"name":"Feu Vert","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Firestone":{"tags":{"name":"Firestone","shop":"car_repair"},"name":"Firestone","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Firestone Complete Auto Care":{"tags":{"name":"Firestone Complete Auto Care","shop":"car_repair"},"name":"Firestone Complete Auto Care","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Garage Renault":{"tags":{"name":"Garage Renault","shop":"car_repair"},"name":"Garage Renault","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Gomeria":{"tags":{"name":"Gomeria","shop":"car_repair"},"name":"Gomeria","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Gomería":{"tags":{"name":"Gomería","shop":"car_repair"},"name":"Gomería","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Goodyear":{"tags":{"name":"Goodyear","shop":"car_repair"},"name":"Goodyear","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Grease Monkey":{"tags":{"name":"Grease Monkey","shop":"car_repair"},"name":"Grease Monkey","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Jiffy Lube":{"tags":{"name":"Jiffy Lube","shop":"car_repair"},"name":"Jiffy Lube","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Kwik Fit":{"tags":{"name":"Kwik Fit","shop":"car_repair"},"name":"Kwik Fit","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Lubricentro":{"tags":{"name":"Lubricentro","shop":"car_repair"},"name":"Lubricentro","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Meineke":{"tags":{"name":"Meineke","shop":"car_repair"},"name":"Meineke","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Mekonomen":{"tags":{"name":"Mekonomen","shop":"car_repair"},"name":"Mekonomen","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Midas":{"tags":{"name":"Midas","shop":"car_repair"},"name":"Midas","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Mr. Lube":{"tags":{"name":"Mr. Lube","shop":"car_repair"},"name":"Mr. Lube","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Norauto":{"tags":{"name":"Norauto","shop":"car_repair"},"name":"Norauto","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Pep Boys":{"tags":{"name":"Pep Boys","shop":"car_repair"},"name":"Pep Boys","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Pit Stop":{"tags":{"name":"Pit Stop","shop":"car_repair"},"name":"Pit Stop","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Point S":{"tags":{"name":"Point S","shop":"car_repair"},"name":"Point S","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Roady":{"tags":{"name":"Roady","shop":"car_repair"},"name":"Roady","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Sears Auto Center":{"tags":{"name":"Sears Auto Center","shop":"car_repair"},"name":"Sears Auto Center","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Speedy":{"tags":{"name":"Speedy","shop":"car_repair"},"name":"Speedy","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Stacja Kontroli Pojazdów":{"tags":{"name":"Stacja Kontroli Pojazdów","shop":"car_repair"},"name":"Stacja Kontroli Pojazdów","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Taller":{"tags":{"name":"Taller","shop":"car_repair"},"name":"Taller","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Valvoline":{"tags":{"name":"Valvoline","shop":"car_repair"},"name":"Valvoline","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Valvoline Instant Oil Change":{"tags":{"name":"Valvoline Instant Oil Change","shop":"car_repair"},"name":"Valvoline Instant Oil Change","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Wulkanizacja":{"tags":{"name":"Wulkanizacja","shop":"car_repair"},"name":"Wulkanizacja","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/ÖAMTC":{"tags":{"name":"ÖAMTC","shop":"car_repair"},"name":"ÖAMTC","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Автомастерская":{"tags":{"name":"Автомастерская","shop":"car_repair"},"name":"Автомастерская","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Авторемонт":{"tags":{"name":"Авторемонт","shop":"car_repair"},"name":"Авторемонт","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Автосервис":{"tags":{"name":"Автосервис","shop":"car_repair"},"name":"Автосервис","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Автосервис+шиномонтаж":{"tags":{"name":"Автосервис+шиномонтаж","shop":"car_repair"},"name":"Автосервис+шиномонтаж","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Замена масла":{"tags":{"name":"Замена масла","shop":"car_repair"},"name":"Замена масла","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/СТО":{"tags":{"name":"СТО","shop":"car_repair"},"name":"СТО","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Шиномонтаж":{"tags":{"name":"Шиномонтаж","shop":"car_repair"},"name":"Шиномонтаж","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/шиномонтаж":{"tags":{"name":"шиномонтаж","shop":"car_repair"},"name":"шиномонтаж","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/carpet/Carpet Right":{"tags":{"name":"Carpet Right","shop":"carpet"},"name":"Carpet Right","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/carpet/Carpetright":{"tags":{"name":"Carpetright","shop":"carpet"},"name":"Carpetright","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Age UK":{"tags":{"name":"Age UK","shop":"charity"},"name":"Age UK","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Barnardo's":{"tags":{"name":"Barnardo's","shop":"charity"},"name":"Barnardo's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/British Heart Foundation":{"tags":{"name":"British Heart Foundation","shop":"charity"},"name":"British Heart Foundation","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Cancer Research UK":{"tags":{"name":"Cancer Research UK","shop":"charity"},"name":"Cancer Research UK","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Oxfam":{"tags":{"name":"Oxfam","shop":"charity"},"name":"Oxfam","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Salvation Army":{"tags":{"name":"Salvation Army","shop":"charity"},"name":"Salvation Army","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Scope":{"tags":{"name":"Scope","shop":"charity"},"name":"Scope","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Sue Ryder":{"tags":{"name":"Sue Ryder","shop":"charity"},"name":"Sue Ryder","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/7 Дней":{"tags":{"name":"7 Дней","shop":"chemist"},"name":"7 Дней","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Bipa":{"tags":{"name":"Bipa","shop":"chemist"},"name":"Bipa","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Budnikowsky":{"tags":{"name":"Budnikowsky","shop":"chemist"},"name":"Budnikowsky","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Etos":{"tags":{"name":"Etos","shop":"chemist"},"name":"Etos","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Kruidvat":{"tags":{"name":"Kruidvat","shop":"chemist"},"name":"Kruidvat","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Matas":{"tags":{"name":"Matas","shop":"chemist"},"name":"Matas","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Müller":{"tags":{"name":"Müller","shop":"chemist"},"name":"Müller","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Rossmann":{"tags":{"name":"Rossmann","shop":"chemist"},"name":"Rossmann","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Schlecker":{"tags":{"name":"Schlecker","shop":"chemist"},"name":"Schlecker","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Teta":{"tags":{"name":"Teta","shop":"chemist"},"name":"Teta","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Trekpleister":{"tags":{"name":"Trekpleister","shop":"chemist"},"name":"Trekpleister","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Watsons":{"tags":{"name":"Watsons","shop":"chemist"},"name":"Watsons","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/dm":{"tags":{"name":"dm","shop":"chemist"},"name":"dm","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Бытовая химия":{"tags":{"name":"Бытовая химия","shop":"chemist"},"name":"Бытовая химия","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Магнит Косметик":{"tags":{"name":"Магнит Косметик","shop":"chemist"},"name":"Магнит Косметик","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Мила":{"tags":{"name":"Мила","shop":"chemist"},"name":"Мила","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Остров чистоты":{"tags":{"name":"Остров чистоты","shop":"chemist"},"name":"Остров чистоты","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Рубль Бум":{"tags":{"name":"Рубль Бум","shop":"chemist"},"name":"Рубль Бум","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Улыбка радуги":{"tags":{"name":"Улыбка радуги","shop":"chemist"},"name":"Улыбка радуги","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/屈臣氏":{"tags":{"name":"屈臣氏","shop":"chemist"},"name":"屈臣氏","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/康是美":{"tags":{"name":"康是美","shop":"chemist"},"name":"康是美","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/AOKI":{"tags":{"name":"AOKI","shop":"clothes"},"name":"AOKI","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/AWG":{"tags":{"name":"AWG","shop":"clothes"},"name":"AWG","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Ackermans":{"tags":{"name":"Ackermans","shop":"clothes"},"name":"Ackermans","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Adidas":{"tags":{"name":"Adidas","shop":"clothes"},"name":"Adidas","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/American Apparel":{"tags":{"name":"American Apparel","shop":"clothes"},"name":"American Apparel","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/American Eagle Outfitters":{"tags":{"name":"American Eagle Outfitters","shop":"clothes"},"name":"American Eagle Outfitters","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Anthropologie":{"tags":{"name":"Anthropologie","shop":"clothes"},"name":"Anthropologie","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Ardene":{"tags":{"name":"Ardene","shop":"clothes"},"name":"Ardene","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Armand Thiery":{"tags":{"name":"Armand Thiery","shop":"clothes"},"name":"Armand Thiery","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Banana Republic":{"tags":{"name":"Banana Republic","shop":"clothes"},"name":"Banana Republic","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Benetton":{"tags":{"name":"Benetton","shop":"clothes"},"name":"Benetton","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Bershka":{"tags":{"name":"Bershka","shop":"clothes"},"name":"Bershka","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Bonita":{"tags":{"name":"Bonita","shop":"clothes"},"name":"Bonita","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Bonobo":{"tags":{"name":"Bonobo","shop":"clothes"},"name":"Bonobo","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Brooks Brothers":{"tags":{"name":"Brooks Brothers","shop":"clothes"},"name":"Brooks Brothers","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Burberry":{"tags":{"name":"Burberry","shop":"clothes"},"name":"Burberry","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Burlington Coat Factory":{"tags":{"name":"Burlington Coat Factory","shop":"clothes"},"name":"Burlington Coat Factory","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Burton":{"tags":{"name":"Burton","shop":"clothes"},"name":"Burton","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/C&A":{"tags":{"name":"C&A","shop":"clothes"},"name":"C&A","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Cache Cache":{"tags":{"name":"Cache Cache","shop":"clothes"},"name":"Cache Cache","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Calvin Klein":{"tags":{"name":"Calvin Klein","shop":"clothes"},"name":"Calvin Klein","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Calzedonia":{"tags":{"name":"Calzedonia","shop":"clothes"},"name":"Calzedonia","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Camaïeu":{"tags":{"name":"Camaïeu","shop":"clothes"},"name":"Camaïeu","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Caroll":{"tags":{"name":"Caroll","shop":"clothes"},"name":"Caroll","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Carter's":{"tags":{"name":"Carter's","shop":"clothes"},"name":"Carter's","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Cecil":{"tags":{"name":"Cecil","shop":"clothes"},"name":"Cecil","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Celio":{"tags":{"name":"Celio","shop":"clothes"},"name":"Celio","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Charles Vögele":{"tags":{"name":"Charles Vögele","shop":"clothes"},"name":"Charles Vögele","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Chico's":{"tags":{"name":"Chico's","shop":"clothes"},"name":"Chico's","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Cropp":{"tags":{"name":"Cropp","shop":"clothes"},"name":"Cropp","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Cubus":{"tags":{"name":"Cubus","shop":"clothes"},"name":"Cubus","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Desigual":{"tags":{"name":"Desigual","shop":"clothes"},"name":"Desigual","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Devred":{"tags":{"name":"Devred","shop":"clothes"},"name":"Devred","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Didi":{"tags":{"name":"Didi","shop":"clothes"},"name":"Didi","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Diesel":{"tags":{"name":"Diesel","shop":"clothes"},"name":"Diesel","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Dorothy Perkins":{"tags":{"name":"Dorothy Perkins","shop":"clothes"},"name":"Dorothy Perkins","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Dress Barn":{"tags":{"name":"Dress Barn","shop":"clothes"},"name":"Dress Barn","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Dressmann":{"tags":{"name":"Dressmann","shop":"clothes"},"name":"Dressmann","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Eddie Bauer":{"tags":{"name":"Eddie Bauer","shop":"clothes"},"name":"Eddie Bauer","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Edgars":{"tags":{"name":"Edgars","shop":"clothes"},"name":"Edgars","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Engbers":{"tags":{"name":"Engbers","shop":"clothes"},"name":"Engbers","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Ernsting's family":{"tags":{"name":"Ernsting's family","shop":"clothes"},"name":"Ernsting's family","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Esprit":{"tags":{"name":"Esprit","shop":"clothes"},"name":"Esprit","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Etam":{"tags":{"name":"Etam","shop":"clothes"},"name":"Etam","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Express":{"tags":{"name":"Express","shop":"clothes"},"name":"Express","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Fat Face":{"tags":{"name":"Fat Face","shop":"clothes"},"name":"Fat Face","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Forever 21":{"tags":{"name":"Forever 21","shop":"clothes"},"name":"Forever 21","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Gant":{"tags":{"name":"Gant","shop":"clothes"},"name":"Gant","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Gap":{"tags":{"name":"Gap","shop":"clothes"},"name":"Gap","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Gerry Weber":{"tags":{"name":"Gerry Weber","shop":"clothes"},"name":"Gerry Weber","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Gina Laura":{"tags":{"name":"Gina Laura","shop":"clothes"},"name":"Gina Laura","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Guess":{"tags":{"name":"Guess","shop":"clothes"},"name":"Guess","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Gymboree":{"tags":{"name":"Gymboree","shop":"clothes"},"name":"Gymboree","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Gémo":{"tags":{"name":"Gémo","shop":"clothes"},"name":"Gémo","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/H&M":{"tags":{"name":"H&M","shop":"clothes"},"name":"H&M","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Hallhuber":{"tags":{"name":"Hallhuber","shop":"clothes"},"name":"Hallhuber","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/House":{"tags":{"name":"House","shop":"clothes"},"name":"House","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Hugo Boss":{"tags":{"name":"Hugo Boss","shop":"clothes"},"name":"Hugo Boss","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Humana":{"tags":{"name":"Humana","shop":"clothes"},"name":"Humana","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Hunkemöller":{"tags":{"name":"Hunkemöller","shop":"clothes"},"name":"Hunkemöller","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Intimissimi":{"tags":{"name":"Intimissimi","shop":"clothes"},"name":"Intimissimi","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/JBC":{"tags":{"name":"JBC","shop":"clothes"},"name":"JBC","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Jack & Jones":{"tags":{"name":"Jack & Jones","shop":"clothes"},"name":"Jack & Jones","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Jack Wolfskin":{"tags":{"name":"Jack Wolfskin","shop":"clothes"},"name":"Jack Wolfskin","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Jeans Fritz":{"tags":{"name":"Jeans Fritz","shop":"clothes"},"name":"Jeans Fritz","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Jennyfer":{"tags":{"name":"Jennyfer","shop":"clothes"},"name":"Jennyfer","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Jigsaw":{"tags":{"name":"Jigsaw","shop":"clothes"},"name":"Jigsaw","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Jules":{"tags":{"name":"Jules","shop":"clothes"},"name":"Jules","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Justice":{"tags":{"name":"Justice","shop":"clothes"},"name":"Justice","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/KappAhl":{"tags":{"name":"KappAhl","shop":"clothes"},"name":"KappAhl","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/KiK":{"tags":{"name":"KiK","shop":"clothes"},"name":"KiK","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Kiabi":{"tags":{"name":"Kiabi","shop":"clothes"},"name":"Kiabi","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/La Halle":{"tags":{"name":"La Halle","shop":"clothes"},"name":"La Halle","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Lacoste":{"tags":{"name":"Lacoste","shop":"clothes"},"name":"Lacoste","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Lane Bryant":{"tags":{"name":"Lane Bryant","shop":"clothes"},"name":"Lane Bryant","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Levi's":{"tags":{"name":"Levi's","shop":"clothes"},"name":"Levi's","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Lindex":{"tags":{"name":"Lindex","shop":"clothes"},"name":"Lindex","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Loft":{"tags":{"name":"Loft","shop":"clothes"},"name":"Loft","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Mango":{"tags":{"name":"Mango","shop":"clothes"},"name":"Mango","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Marc O'Polo":{"tags":{"name":"Marc O'Polo","shop":"clothes"},"name":"Marc O'Polo","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Mark's":{"tags":{"name":"Mark's","shop":"clothes"},"name":"Mark's","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Marshalls":{"tags":{"name":"Marshalls","shop":"clothes"},"name":"Marshalls","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Massimo Dutti":{"tags":{"name":"Massimo Dutti","shop":"clothes"},"name":"Massimo Dutti","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Matalan":{"tags":{"name":"Matalan","shop":"clothes"},"name":"Matalan","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Maurices":{"tags":{"name":"Maurices","shop":"clothes"},"name":"Maurices","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Max Mara":{"tags":{"name":"Max Mara","shop":"clothes"},"name":"Max Mara","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Men's Wearhouse":{"tags":{"name":"Men's Wearhouse","shop":"clothes"},"name":"Men's Wearhouse","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Mexx":{"tags":{"name":"Mexx","shop":"clothes"},"name":"Mexx","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Michael Kors":{"tags":{"name":"Michael Kors","shop":"clothes"},"name":"Michael Kors","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Mim":{"tags":{"name":"Mim","shop":"clothes"},"name":"Mim","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Monsoon":{"tags":{"name":"Monsoon","shop":"clothes"},"name":"Monsoon","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Mr Price":{"tags":{"name":"Mr Price","shop":"clothes"},"name":"Mr Price","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/NKD":{"tags":{"name":"NKD","shop":"clothes"},"name":"NKD","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/New Look":{"tags":{"name":"New Look","shop":"clothes"},"name":"New Look","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/New Yorker":{"tags":{"name":"New Yorker","shop":"clothes"},"name":"New Yorker","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/NewYorker":{"tags":{"name":"NewYorker","shop":"clothes"},"name":"NewYorker","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Next":{"tags":{"name":"Next","shop":"clothes"},"name":"Next","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Nike":{"tags":{"name":"Nike","shop":"clothes"},"name":"Nike","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Nordstrom Rack":{"tags":{"name":"Nordstrom Rack","shop":"clothes"},"name":"Nordstrom Rack","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/OVS":{"tags":{"name":"OVS","shop":"clothes"},"name":"OVS","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Okaïdi":{"tags":{"name":"Okaïdi","shop":"clothes"},"name":"Okaïdi","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Old Navy":{"tags":{"name":"Old Navy","shop":"clothes"},"name":"Old Navy","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Only":{"tags":{"name":"Only","shop":"clothes"},"name":"Only","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Orchestra":{"tags":{"name":"Orchestra","shop":"clothes"},"name":"Orchestra","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Original Marines":{"tags":{"name":"Original Marines","shop":"clothes"},"name":"Original Marines","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Orsay":{"tags":{"name":"Orsay","shop":"clothes"},"name":"Orsay","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Outfit":{"tags":{"name":"Outfit","shop":"clothes"},"name":"Outfit","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Outlet":{"tags":{"name":"Outlet","shop":"clothes"},"name":"Outlet","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Palmers":{"tags":{"name":"Palmers","shop":"clothes"},"name":"Palmers","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Peacocks":{"tags":{"name":"Peacocks","shop":"clothes"},"name":"Peacocks","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Peek & Cloppenburg":{"tags":{"name":"Peek & Cloppenburg","shop":"clothes"},"name":"Peek & Cloppenburg","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Pep":{"tags":{"name":"Pep","shop":"clothes"},"name":"Pep","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Pepco":{"tags":{"name":"Pepco","shop":"clothes"},"name":"Pepco","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Petit Bateau":{"tags":{"name":"Petit Bateau","shop":"clothes"},"name":"Petit Bateau","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Pimkie":{"tags":{"name":"Pimkie","shop":"clothes"},"name":"Pimkie","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Plato's Closet":{"tags":{"name":"Plato's Closet","shop":"clothes"},"name":"Plato's Closet","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Primark":{"tags":{"name":"Primark","shop":"clothes"},"name":"Primark","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Promod":{"tags":{"name":"Promod","shop":"clothes"},"name":"Promod","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Pull & Bear":{"tags":{"name":"Pull & Bear","shop":"clothes"},"name":"Pull & Bear","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Reitmans":{"tags":{"name":"Reitmans","shop":"clothes"},"name":"Reitmans","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Reserved":{"tags":{"name":"Reserved","shop":"clothes"},"name":"Reserved","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/River Island":{"tags":{"name":"River Island","shop":"clothes"},"name":"River Island","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Ross":{"tags":{"name":"Ross","shop":"clothes"},"name":"Ross","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Sela":{"tags":{"name":"Sela","shop":"clothes"},"name":"Sela","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Sergent Major":{"tags":{"name":"Sergent Major","shop":"clothes"},"name":"Sergent Major","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Shoeby":{"tags":{"name":"Shoeby","shop":"clothes"},"name":"Shoeby","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Sisley":{"tags":{"name":"Sisley","shop":"clothes"},"name":"Sisley","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Springfield":{"tags":{"name":"Springfield","shop":"clothes"},"name":"Springfield","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Stefanel":{"tags":{"name":"Stefanel","shop":"clothes"},"name":"Stefanel","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Steps":{"tags":{"name":"Steps","shop":"clothes"},"name":"Steps","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Stradivarius":{"tags":{"name":"Stradivarius","shop":"clothes"},"name":"Stradivarius","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Street One":{"tags":{"name":"Street One","shop":"clothes"},"name":"Street One","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Superdry":{"tags":{"name":"Superdry","shop":"clothes"},"name":"Superdry","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/TJ Maxx":{"tags":{"name":"TJ Maxx","shop":"clothes"},"name":"TJ Maxx","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/TK Maxx":{"tags":{"name":"TK Maxx","shop":"clothes"},"name":"TK Maxx","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Takko":{"tags":{"name":"Takko","shop":"clothes"},"name":"Takko","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Talbots":{"tags":{"name":"Talbots","shop":"clothes"},"name":"Talbots","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Tally Weijl":{"tags":{"name":"Tally Weijl","shop":"clothes"},"name":"Tally Weijl","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Tati":{"tags":{"name":"Tati","shop":"clothes"},"name":"Tati","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Terranova":{"tags":{"name":"Terranova","shop":"clothes"},"name":"Terranova","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Tesha":{"tags":{"name":"Tesha","shop":"clothes"},"name":"Tesha","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Tezenis":{"tags":{"name":"Tezenis","shop":"clothes"},"name":"Tezenis","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/The Children's Place":{"tags":{"name":"The Children's Place","shop":"clothes"},"name":"The Children's Place","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/The North Face":{"tags":{"name":"The North Face","shop":"clothes"},"name":"The North Face","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/The Sting":{"tags":{"name":"The Sting","shop":"clothes"},"name":"The Sting","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Timberland":{"tags":{"name":"Timberland","shop":"clothes"},"name":"Timberland","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Toko Pakaian":{"tags":{"name":"Toko Pakaian","shop":"clothes"},"name":"Toko Pakaian","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Tom Tailor":{"tags":{"name":"Tom Tailor","shop":"clothes"},"name":"Tom Tailor","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Tommy Hilfiger":{"tags":{"name":"Tommy Hilfiger","shop":"clothes"},"name":"Tommy Hilfiger","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Topshop":{"tags":{"name":"Topshop","shop":"clothes"},"name":"Topshop","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Triumph":{"tags":{"name":"Triumph","shop":"clothes"},"name":"Triumph","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Truworths":{"tags":{"name":"Truworths","shop":"clothes"},"name":"Truworths","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Ulla Popken":{"tags":{"name":"Ulla Popken","shop":"clothes"},"name":"Ulla Popken","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Uniqlo":{"tags":{"name":"Uniqlo","shop":"clothes"},"name":"Uniqlo","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/United Colors of Benetton":{"tags":{"name":"United Colors of Benetton","shop":"clothes"},"name":"United Colors of Benetton","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Urban Outfitters":{"tags":{"name":"Urban Outfitters","shop":"clothes"},"name":"Urban Outfitters","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Vero Moda":{"tags":{"name":"Vero Moda","shop":"clothes"},"name":"Vero Moda","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Victoria's Secret":{"tags":{"name":"Victoria's Secret","shop":"clothes"},"name":"Victoria's Secret","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Vögele":{"tags":{"name":"Vögele","shop":"clothes"},"name":"Vögele","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/WE":{"tags":{"name":"WE","shop":"clothes"},"name":"WE","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Wibra":{"tags":{"name":"Wibra","shop":"clothes"},"name":"Wibra","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Winners":{"tags":{"name":"Winners","shop":"clothes"},"name":"Winners","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Yamamay":{"tags":{"name":"Yamamay","shop":"clothes"},"name":"Yamamay","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Zara":{"tags":{"name":"Zara","shop":"clothes"},"name":"Zara","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Zeeman":{"tags":{"name":"Zeeman","shop":"clothes"},"name":"Zeeman","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/mister*lady":{"tags":{"name":"mister*lady","shop":"clothes"},"name":"mister*lady","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/s.Oliver":{"tags":{"name":"s.Oliver","shop":"clothes"},"name":"s.Oliver","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Детская одежда":{"tags":{"name":"Детская одежда","shop":"clothes"},"name":"Детская одежда","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Женская одежда":{"tags":{"name":"Женская одежда","shop":"clothes"},"name":"Женская одежда","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Липненски":{"tags":{"name":"Липненски","shop":"clothes"},"name":"Липненски","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Московская ярмарка":{"tags":{"name":"Московская ярмарка","shop":"clothes"},"name":"Московская ярмарка","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Одежда":{"tags":{"name":"Одежда","shop":"clothes"},"name":"Одежда","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Смешные цены":{"tags":{"name":"Смешные цены","shop":"clothes"},"name":"Смешные цены","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Спецодежда":{"tags":{"name":"Спецодежда","shop":"clothes"},"name":"Спецодежда","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/しまむら":{"tags":{"name":"しまむら","shop":"clothes"},"name":"しまむら","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/ユニクロ":{"tags":{"name":"ユニクロ","shop":"clothes"},"name":"ユニクロ","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/ワークマン":{"tags":{"name":"ワークマン","shop":"clothes"},"name":"ワークマン","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/洋服の青山":{"tags":{"name":"洋服の青山","shop":"clothes"},"name":"洋服の青山","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/西松屋":{"tags":{"name":"西松屋","shop":"clothes"},"name":"西松屋","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/coffee/Nespresso":{"tags":{"name":"Nespresso","shop":"coffee"},"name":"Nespresso","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/coffee/Tchibo":{"tags":{"name":"Tchibo","shop":"coffee"},"name":"Tchibo","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/computer/Apple Store":{"tags":{"name":"Apple Store","shop":"computer"},"name":"Apple Store","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/computer/DNS":{"tags":{"name":"DNS","shop":"computer"},"name":"DNS","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/computer/PC World":{"tags":{"name":"PC World","shop":"computer"},"name":"PC World","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/computer/ДНС":{"tags":{"name":"ДНС","shop":"computer"},"name":"ДНС","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/confectionery/Fagyizó":{"tags":{"name":"Fagyizó","shop":"confectionery"},"name":"Fagyizó","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/confectionery/Hussel":{"tags":{"name":"Hussel","shop":"confectionery"},"name":"Hussel","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/confectionery/Leonidas":{"tags":{"name":"Leonidas","shop":"confectionery"},"name":"Leonidas","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/confectionery/T. SN":{"tags":{"name":"T. SN","shop":"confectionery"},"name":"T. SN","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/confectionery/Thorntons":{"tags":{"name":"Thorntons","shop":"confectionery"},"name":"Thorntons","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/711":{"tags":{"name":"711","shop":"convenience"},"name":"711","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/777":{"tags":{"name":"777","shop":"convenience"},"name":"777","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/24 часа":{"tags":{"name":"24 часа","shop":"convenience"},"name":"24 часа","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/7-Eleven":{"tags":{"name":"7-Eleven","shop":"convenience"},"name":"7-Eleven","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/8 à Huit":{"tags":{"name":"8 à Huit","shop":"convenience"},"name":"8 à Huit","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/99 Speedmart":{"tags":{"name":"99 Speedmart","shop":"convenience"},"name":"99 Speedmart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ABC":{"tags":{"name":"ABC","shop":"convenience"},"name":"ABC","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/AMPM":{"tags":{"name":"AMPM","shop":"convenience"},"name":"AMPM","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Aibė":{"tags":{"name":"Aibė","shop":"convenience"},"name":"Aibė","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Alepa":{"tags":{"name":"Alepa","shop":"convenience"},"name":"Alepa","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Alfamart":{"tags":{"name":"Alfamart","shop":"convenience"},"name":"Alfamart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Alimentara":{"tags":{"name":"Alimentara","shop":"convenience"},"name":"Alimentara","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Almacen":{"tags":{"name":"Almacen","shop":"convenience"},"name":"Almacen","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Almacén":{"tags":{"name":"Almacén","shop":"convenience"},"name":"Almacén","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/BP Shop":{"tags":{"name":"BP Shop","shop":"convenience"},"name":"BP Shop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Baqala":{"tags":{"name":"Baqala","shop":"convenience"},"name":"Baqala","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Best One":{"tags":{"name":"Best One","shop":"convenience"},"name":"Best One","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Best-One":{"tags":{"name":"Best-One","shop":"convenience"},"name":"Best-One","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Bodega":{"tags":{"name":"Bodega","shop":"convenience"},"name":"Bodega","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Bonjour":{"tags":{"name":"Bonjour","shop":"convenience"},"name":"Bonjour","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/CBA":{"tags":{"name":"CBA","shop":"convenience"},"name":"CBA","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/COOP":{"tags":{"name":"COOP","shop":"convenience"},"name":"COOP","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/COOP Jednota":{"tags":{"name":"COOP Jednota","shop":"convenience"},"name":"COOP Jednota","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/CU":{"tags":{"name":"CU","shop":"convenience"},"name":"CU","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Casino Shop":{"tags":{"name":"Casino Shop","shop":"convenience"},"name":"Casino Shop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Centra":{"tags":{"name":"Centra","shop":"convenience"},"name":"Centra","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Central Convenience Store":{"tags":{"name":"Central Convenience Store","shop":"convenience"},"name":"Central Convenience Store","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Circle K":{"tags":{"name":"Circle K","shop":"convenience"},"name":"Circle K","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Coop Jednota":{"tags":{"name":"Coop Jednota","shop":"convenience"},"name":"Coop Jednota","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Corner Store":{"tags":{"name":"Corner Store","shop":"convenience"},"name":"Corner Store","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Costcutter":{"tags":{"name":"Costcutter","shop":"convenience"},"name":"Costcutter","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Couche-Tard":{"tags":{"name":"Couche-Tard","shop":"convenience"},"name":"Couche-Tard","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Cumberland Farms":{"tags":{"name":"Cumberland Farms","shop":"convenience"},"name":"Cumberland Farms","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Daisy Mart":{"tags":{"name":"Daisy Mart","shop":"convenience"},"name":"Daisy Mart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Delikatesy":{"tags":{"name":"Delikatesy","shop":"convenience"},"name":"Delikatesy","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Dollar General":{"tags":{"name":"Dollar General","shop":"convenience"},"name":"Dollar General","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Dépanneur":{"tags":{"name":"Dépanneur","shop":"convenience"},"name":"Dépanneur","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/FamilyMart":{"tags":{"name":"FamilyMart","shop":"convenience"},"name":"FamilyMart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Food Mart":{"tags":{"name":"Food Mart","shop":"convenience"},"name":"Food Mart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Four Square":{"tags":{"name":"Four Square","shop":"convenience"},"name":"Four Square","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Fresh":{"tags":{"name":"Fresh","shop":"convenience"},"name":"Fresh","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Freshmarket":{"tags":{"name":"Freshmarket","shop":"convenience"},"name":"Freshmarket","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/GS25":{"tags":{"name":"GS25","shop":"convenience"},"name":"GS25","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Groszek":{"tags":{"name":"Groszek","shop":"convenience"},"name":"Groszek","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Hasty Market":{"tags":{"name":"Hasty Market","shop":"convenience"},"name":"Hasty Market","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Hruška":{"tags":{"name":"Hruška","shop":"convenience"},"name":"Hruška","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Indomaret":{"tags":{"name":"Indomaret","shop":"convenience"},"name":"Indomaret","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Jednota":{"tags":{"name":"Jednota","shop":"convenience"},"name":"Jednota","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Joker":{"tags":{"name":"Joker","shop":"convenience"},"name":"Joker","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/K-Market":{"tags":{"name":"K-Market","shop":"convenience"},"name":"K-Market","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Kangaroo Express":{"tags":{"name":"Kangaroo Express","shop":"convenience"},"name":"Kangaroo Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Kisbolt":{"tags":{"name":"Kisbolt","shop":"convenience"},"name":"Kisbolt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Lawson":{"tags":{"name":"Lawson","shop":"convenience"},"name":"Lawson","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Lewiatan":{"tags":{"name":"Lewiatan","shop":"convenience"},"name":"Lewiatan","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Lifestyle Express":{"tags":{"name":"Lifestyle Express","shop":"convenience"},"name":"Lifestyle Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Londis":{"tags":{"name":"Londis","shop":"convenience"},"name":"Londis","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/M&S Simply Food":{"tags":{"name":"M&S Simply Food","shop":"convenience"},"name":"M&S Simply Food","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mac's":{"tags":{"name":"Mac's","shop":"convenience"},"name":"Mac's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mace":{"tags":{"name":"Mace","shop":"convenience"},"name":"Mace","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Magazin":{"tags":{"name":"Magazin","shop":"convenience"},"name":"Magazin","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Magazin Mixt":{"tags":{"name":"Magazin Mixt","shop":"convenience"},"name":"Magazin Mixt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Magazin Non-Stop":{"tags":{"name":"Magazin Non-Stop","shop":"convenience"},"name":"Magazin Non-Stop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Magazin mixt":{"tags":{"name":"Magazin mixt","shop":"convenience"},"name":"Magazin mixt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Maxikiosco":{"tags":{"name":"Maxikiosco","shop":"convenience"},"name":"Maxikiosco","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Małpka Express":{"tags":{"name":"Małpka Express","shop":"convenience"},"name":"Małpka Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/McColl's":{"tags":{"name":"McColl's","shop":"convenience"},"name":"McColl's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Migrolino":{"tags":{"name":"Migrolino","shop":"convenience"},"name":"Migrolino","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mini ABC":{"tags":{"name":"Mini ABC","shop":"convenience"},"name":"Mini ABC","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mini Market":{"tags":{"name":"Mini Market","shop":"convenience"},"name":"Mini Market","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mini Market Non-Stop":{"tags":{"name":"Mini Market Non-Stop","shop":"convenience"},"name":"Mini Market Non-Stop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mini Mart":{"tags":{"name":"Mini Mart","shop":"convenience"},"name":"Mini Mart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mini Stop":{"tags":{"name":"Mini Stop","shop":"convenience"},"name":"Mini Stop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Minimercado":{"tags":{"name":"Minimercado","shop":"convenience"},"name":"Minimercado","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mlin i pekare":{"tags":{"name":"Mlin i pekare","shop":"convenience"},"name":"Mlin i pekare","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Nasz Sklep":{"tags":{"name":"Nasz Sklep","shop":"convenience"},"name":"Nasz Sklep","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Nisa":{"tags":{"name":"Nisa","shop":"convenience"},"name":"Nisa","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Nisa Local":{"tags":{"name":"Nisa Local","shop":"convenience"},"name":"Nisa Local","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/OK-Mart":{"tags":{"name":"OK-Mart","shop":"convenience"},"name":"OK-Mart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/OK便利商店":{"tags":{"name":"OK便利商店","shop":"convenience"},"name":"OK便利商店","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/OK便利店 Circle K":{"tags":{"name":"OK便利店 Circle K","shop":"convenience"},"name":"OK便利店 Circle K","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Odido":{"tags":{"name":"Odido","shop":"convenience"},"name":"Odido","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/On The Run":{"tags":{"name":"On The Run","shop":"convenience"},"name":"On The Run","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/On the Run":{"tags":{"name":"On the Run","shop":"convenience"},"name":"On the Run","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/One Stop":{"tags":{"name":"One Stop","shop":"convenience"},"name":"One Stop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Oxxo":{"tags":{"name":"Oxxo","shop":"convenience"},"name":"Oxxo","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Parduotuvė":{"tags":{"name":"Parduotuvė","shop":"convenience"},"name":"Parduotuvė","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Petit Casino":{"tags":{"name":"Petit Casino","shop":"convenience"},"name":"Petit Casino","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Plaid Pantry":{"tags":{"name":"Plaid Pantry","shop":"convenience"},"name":"Plaid Pantry","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Potraviny":{"tags":{"name":"Potraviny","shop":"convenience"},"name":"Potraviny","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Prehrana":{"tags":{"name":"Prehrana","shop":"convenience"},"name":"Prehrana","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Premier":{"tags":{"name":"Premier","shop":"convenience"},"name":"Premier","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Proxi":{"tags":{"name":"Proxi","shop":"convenience"},"name":"Proxi","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Proxy":{"tags":{"name":"Proxy","shop":"convenience"},"name":"Proxy","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Pulperia":{"tags":{"name":"Pulperia","shop":"convenience"},"name":"Pulperia","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Royal Farms":{"tags":{"name":"Royal Farms","shop":"convenience"},"name":"Royal Farms","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Sale":{"tags":{"name":"Sale","shop":"convenience"},"name":"Sale","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Sari-sari Store":{"tags":{"name":"Sari-sari Store","shop":"convenience"},"name":"Sari-sari Store","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Select":{"tags":{"name":"Select","shop":"convenience"},"name":"Select","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Shell Select":{"tags":{"name":"Shell Select","shop":"convenience"},"name":"Shell Select","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Shop & Go":{"tags":{"name":"Shop & Go","shop":"convenience"},"name":"Shop & Go","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Siwa":{"tags":{"name":"Siwa","shop":"convenience"},"name":"Siwa","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Sklep spożywczy":{"tags":{"name":"Sklep spożywczy","shop":"convenience"},"name":"Sklep spożywczy","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Smíšené zboží":{"tags":{"name":"Smíšené zboží","shop":"convenience"},"name":"Smíšené zboží","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Społem":{"tags":{"name":"Społem","shop":"convenience"},"name":"Społem","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Spätkauf":{"tags":{"name":"Spätkauf","shop":"convenience"},"name":"Spätkauf","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Stewart's":{"tags":{"name":"Stewart's","shop":"convenience"},"name":"Stewart's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Stores":{"tags":{"name":"Stores","shop":"convenience"},"name":"Stores","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Stripes":{"tags":{"name":"Stripes","shop":"convenience"},"name":"Stripes","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Studenac":{"tags":{"name":"Studenac","shop":"convenience"},"name":"Studenac","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Sunkus":{"tags":{"name":"Sunkus","shop":"convenience"},"name":"Sunkus","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Słoneczko":{"tags":{"name":"Słoneczko","shop":"convenience"},"name":"Słoneczko","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/TESCO Lotus Express":{"tags":{"name":"TESCO Lotus Express","shop":"convenience"},"name":"TESCO Lotus Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Tesco Express":{"tags":{"name":"Tesco Express","shop":"convenience"},"name":"Tesco Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Tesco Lotus Express":{"tags":{"name":"Tesco Lotus Express","shop":"convenience"},"name":"Tesco Lotus Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Tom Market 89":{"tags":{"name":"Tom Market 89","shop":"convenience"},"name":"Tom Market 89","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/United Dairy Farmers":{"tags":{"name":"United Dairy Farmers","shop":"convenience"},"name":"United Dairy Farmers","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Vegyesbolt":{"tags":{"name":"Vegyesbolt","shop":"convenience"},"name":"Vegyesbolt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Večerka":{"tags":{"name":"Večerka","shop":"convenience"},"name":"Večerka","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Vival":{"tags":{"name":"Vival","shop":"convenience"},"name":"Vival","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Wawa":{"tags":{"name":"Wawa","shop":"convenience"},"name":"Wawa","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Weltladen":{"tags":{"name":"Weltladen","shop":"convenience"},"name":"Weltladen","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/abc":{"tags":{"name":"abc","shop":"convenience"},"name":"abc","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ampm":{"tags":{"name":"ampm","shop":"convenience"},"name":"ampm","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/best-one":{"tags":{"name":"best-one","shop":"convenience"},"name":"best-one","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/odido":{"tags":{"name":"odido","shop":"convenience"},"name":"odido","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Élelmiszer":{"tags":{"name":"Élelmiszer","shop":"convenience"},"name":"Élelmiszer","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Élelmiszerbolt":{"tags":{"name":"Élelmiszerbolt","shop":"convenience"},"name":"Élelmiszerbolt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Żabka":{"tags":{"name":"Żabka","shop":"convenience"},"name":"Żabka","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Žabka":{"tags":{"name":"Žabka","shop":"convenience"},"name":"Žabka","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Августина":{"tags":{"name":"Августина","shop":"convenience"},"name":"Августина","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Авоська":{"tags":{"name":"Авоська","shop":"convenience"},"name":"Авоська","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Агрокомплекс":{"tags":{"name":"Агрокомплекс","shop":"convenience"},"name":"Агрокомплекс","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Альянс":{"tags":{"name":"Альянс","shop":"convenience"},"name":"Альянс","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Апельсин":{"tags":{"name":"Апельсин","shop":"convenience"},"name":"Апельсин","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Ассорти":{"tags":{"name":"Ассорти","shop":"convenience"},"name":"Ассорти","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Белорусские продукты":{"tags":{"name":"Белорусские продукты","shop":"convenience"},"name":"Белорусские продукты","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Берёзка":{"tags":{"name":"Берёзка","shop":"convenience"},"name":"Берёзка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Везунчик":{"tags":{"name":"Везунчик","shop":"convenience"},"name":"Везунчик","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Весна":{"tags":{"name":"Весна","shop":"convenience"},"name":"Весна","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Ветеран":{"tags":{"name":"Ветеран","shop":"convenience"},"name":"Ветеран","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Визит":{"tags":{"name":"Визит","shop":"convenience"},"name":"Визит","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Виктория":{"tags":{"name":"Виктория","shop":"convenience"},"name":"Виктория","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ВкусВилл":{"tags":{"name":"ВкусВилл","shop":"convenience"},"name":"ВкусВилл","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Гастроном":{"tags":{"name":"Гастроном","shop":"convenience"},"name":"Гастроном","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Гермес":{"tags":{"name":"Гермес","shop":"convenience"},"name":"Гермес","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Гурман":{"tags":{"name":"Гурман","shop":"convenience"},"name":"Гурман","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Домашний":{"tags":{"name":"Домашний","shop":"convenience"},"name":"Домашний","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Елена":{"tags":{"name":"Елена","shop":"convenience"},"name":"Елена","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Ермолино":{"tags":{"name":"Ермолино","shop":"convenience"},"name":"Ермолино","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Калинка":{"tags":{"name":"Калинка","shop":"convenience"},"name":"Калинка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Кировский":{"tags":{"name":"Кировский","shop":"convenience"},"name":"Кировский","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Колобок":{"tags":{"name":"Колобок","shop":"convenience"},"name":"Колобок","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Колосок":{"tags":{"name":"Колосок","shop":"convenience"},"name":"Колосок","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Копеечка":{"tags":{"name":"Копеечка","shop":"convenience"},"name":"Копеечка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Копейка":{"tags":{"name":"Копейка","shop":"convenience"},"name":"Копейка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Корзинка":{"tags":{"name":"Корзинка","shop":"convenience"},"name":"Корзинка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Крамниця":{"tags":{"name":"Крамниця","shop":"convenience"},"name":"Крамниця","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Кристалл":{"tags":{"name":"Кристалл","shop":"convenience"},"name":"Кристалл","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Кулинария":{"tags":{"name":"Кулинария","shop":"convenience"},"name":"Кулинария","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Купец":{"tags":{"name":"Купец","shop":"convenience"},"name":"Купец","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Ласточка":{"tags":{"name":"Ласточка","shop":"convenience"},"name":"Ласточка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Лидер":{"tags":{"name":"Лидер","shop":"convenience"},"name":"Лидер","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Любимый":{"tags":{"name":"Любимый","shop":"convenience"},"name":"Любимый","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Люкс":{"tags":{"name":"Люкс","shop":"convenience"},"name":"Люкс","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Магазин при АЗС":{"tags":{"name":"Магазин при АЗС","shop":"convenience"},"name":"Магазин при АЗС","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Мария-Ра":{"tags":{"name":"Мария-Ра","shop":"convenience"},"name":"Мария-Ра","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Маяк":{"tags":{"name":"Маяк","shop":"convenience"},"name":"Маяк","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Меркурий":{"tags":{"name":"Меркурий","shop":"convenience"},"name":"Меркурий","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Мечта":{"tags":{"name":"Мечта","shop":"convenience"},"name":"Мечта","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Минимаркет":{"tags":{"name":"Минимаркет","shop":"convenience"},"name":"Минимаркет","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Мираж":{"tags":{"name":"Мираж","shop":"convenience"},"name":"Мираж","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Надежда":{"tags":{"name":"Надежда","shop":"convenience"},"name":"Надежда","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Ника":{"tags":{"name":"Ника","shop":"convenience"},"name":"Ника","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Оазис":{"tags":{"name":"Оазис","shop":"convenience"},"name":"Оазис","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Олимп":{"tags":{"name":"Олимп","shop":"convenience"},"name":"Олимп","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Подсолнух":{"tags":{"name":"Подсолнух","shop":"convenience"},"name":"Подсолнух","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Престиж":{"tags":{"name":"Престиж","shop":"convenience"},"name":"Престиж","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Продукти":{"tags":{"name":"Продукти","shop":"convenience"},"name":"Продукти","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Продуктовый":{"tags":{"name":"Продуктовый","shop":"convenience"},"name":"Продуктовый","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Продуктовый магазин":{"tags":{"name":"Продуктовый магазин","shop":"convenience"},"name":"Продуктовый магазин","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Продукты":{"tags":{"name":"Продукты","shop":"convenience"},"name":"Продукты","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Продукты 24":{"tags":{"name":"Продукты 24","shop":"convenience"},"name":"Продукты 24","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Радуга":{"tags":{"name":"Радуга","shop":"convenience"},"name":"Радуга","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Родны кут":{"tags":{"name":"Родны кут","shop":"convenience"},"name":"Родны кут","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Ромашка":{"tags":{"name":"Ромашка","shop":"convenience"},"name":"Ромашка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Русь":{"tags":{"name":"Русь","shop":"convenience"},"name":"Русь","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Светлана":{"tags":{"name":"Светлана","shop":"convenience"},"name":"Светлана","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Смак":{"tags":{"name":"Смак","shop":"convenience"},"name":"Смак","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Солнечный":{"tags":{"name":"Солнечный","shop":"convenience"},"name":"Солнечный","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Татьяна":{"tags":{"name":"Татьяна","shop":"convenience"},"name":"Татьяна","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Тройка":{"tags":{"name":"Тройка","shop":"convenience"},"name":"Тройка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/У Палыча":{"tags":{"name":"У Палыча","shop":"convenience"},"name":"У Палыча","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Универсам":{"tags":{"name":"Универсам","shop":"convenience"},"name":"Универсам","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Фортуна":{"tags":{"name":"Фортуна","shop":"convenience"},"name":"Фортуна","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Хороший":{"tags":{"name":"Хороший","shop":"convenience"},"name":"Хороший","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Центральный":{"tags":{"name":"Центральный","shop":"convenience"},"name":"Центральный","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Чайка":{"tags":{"name":"Чайка","shop":"convenience"},"name":"Чайка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Шанс":{"tags":{"name":"Шанс","shop":"convenience"},"name":"Шанс","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Эконом":{"tags":{"name":"Эконом","shop":"convenience"},"name":"Эконом","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Юбилейный":{"tags":{"name":"Юбилейный","shop":"convenience"},"name":"Юбилейный","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Юлия":{"tags":{"name":"Юлия","shop":"convenience"},"name":"Юлия","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/продукты":{"tags":{"name":"продукты","shop":"convenience"},"name":"продукты","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/მარკეტი":{"tags":{"name":"მარკეტი","shop":"convenience"},"name":"მარკეტი","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/サンクス":{"tags":{"name":"サンクス","name:en":"sunkus","shop":"convenience"},"name":"サンクス","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/サークルK":{"tags":{"name":"サークルK","name:en":"Circle K","shop":"convenience"},"name":"サークルK","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/スリーエフ":{"tags":{"name":"スリーエフ","shop":"convenience"},"name":"スリーエフ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/セイコーマート":{"tags":{"name":"セイコーマート","shop":"convenience"},"name":"セイコーマート","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/セブンイレブン":{"tags":{"name":"セブンイレブン","name:en":"7-Eleven","shop":"convenience"},"name":"セブンイレブン","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/セブンイレブン(Seven-Eleven)":{"tags":{"name":"セブンイレブン(Seven-Eleven)","shop":"convenience"},"name":"セブンイレブン(Seven-Eleven)","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/セーブオン":{"tags":{"name":"セーブオン","shop":"convenience"},"name":"セーブオン","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/デイリーヤマザキ":{"tags":{"name":"デイリーヤマザキ","shop":"convenience"},"name":"デイリーヤマザキ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ファミリーマート":{"tags":{"name":"ファミリーマート","name:en":"FamilyMart","shop":"convenience"},"name":"ファミリーマート","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ポプラ":{"tags":{"name":"ポプラ","shop":"convenience"},"name":"ポプラ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ミニストップ":{"tags":{"name":"ミニストップ","name:en":"MINISTOP","shop":"convenience"},"name":"ミニストップ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ヤマザキショップ":{"tags":{"name":"ヤマザキショップ","shop":"convenience"},"name":"ヤマザキショップ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ローソン":{"tags":{"name":"ローソン","name:en":"LAWSON","shop":"convenience"},"name":"ローソン","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ローソンストア100":{"tags":{"name":"ローソンストア100","shop":"convenience"},"name":"ローソンストア100","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/全家":{"tags":{"name":"全家","shop":"convenience"},"name":"全家","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/全家便利商店":{"tags":{"name":"全家便利商店","shop":"convenience"},"name":"全家便利商店","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/萊爾富":{"tags":{"name":"萊爾富","shop":"convenience"},"name":"萊爾富","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/세븐일레븐":{"tags":{"name":"세븐일레븐","shop":"convenience"},"name":"세븐일레븐","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/copyshop/FedEx Office":{"tags":{"name":"FedEx Office","shop":"copyshop"},"name":"FedEx Office","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/copyshop/FedEx Office Print and Ship Center":{"tags":{"name":"FedEx Office Print and Ship Center","shop":"copyshop"},"name":"FedEx Office Print and Ship Center","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Douglas":{"tags":{"name":"Douglas","shop":"cosmetics"},"name":"Douglas","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Lush":{"tags":{"name":"Lush","shop":"cosmetics"},"name":"Lush","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Marionnaud":{"tags":{"name":"Marionnaud","shop":"cosmetics"},"name":"Marionnaud","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Sephora":{"tags":{"name":"Sephora","shop":"cosmetics"},"name":"Sephora","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/The Body Shop":{"tags":{"name":"The Body Shop","shop":"cosmetics"},"name":"The Body Shop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Л'Этуаль":{"tags":{"name":"Л'Этуаль","shop":"cosmetics"},"name":"Л'Этуаль","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Магнит косметик":{"tags":{"name":"Магнит косметик","shop":"cosmetics"},"name":"Магнит косметик","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Магнит-Косметик":{"tags":{"name":"Магнит-Косметик","shop":"cosmetics"},"name":"Магнит-Косметик","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Подружка":{"tags":{"name":"Подружка","shop":"cosmetics"},"name":"Подружка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/craft/Hobby Lobby":{"tags":{"name":"Hobby Lobby","shop":"craft"},"name":"Hobby Lobby","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/craft/Michaels":{"tags":{"name":"Michaels","shop":"craft"},"name":"Michaels","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Argos":{"tags":{"name":"Argos","shop":"department_store"},"name":"Argos","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Bed Bath & Beyond":{"tags":{"name":"Bed Bath & Beyond","shop":"department_store"},"name":"Bed Bath & Beyond","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Big Lots":{"tags":{"name":"Big Lots","shop":"department_store"},"name":"Big Lots","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Big W":{"tags":{"name":"Big W","shop":"department_store"},"name":"Big W","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Canadian Tire":{"tags":{"name":"Canadian Tire","shop":"department_store"},"name":"Canadian Tire","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Coppel":{"tags":{"name":"Coppel","shop":"department_store"},"name":"Coppel","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Debenhams":{"tags":{"name":"Debenhams","shop":"department_store"},"name":"Debenhams","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Dillard's":{"tags":{"name":"Dillard's","shop":"department_store"},"name":"Dillard's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/El Corte Inglés":{"tags":{"name":"El Corte Inglés","shop":"department_store"},"name":"El Corte Inglés","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Galeria Kaufhof":{"tags":{"name":"Galeria Kaufhof","shop":"department_store"},"name":"Galeria Kaufhof","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/HEMA":{"tags":{"name":"HEMA","shop":"department_store"},"name":"HEMA","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Harvey Norman":{"tags":{"name":"Harvey Norman","shop":"department_store"},"name":"Harvey Norman","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/JCPenney":{"tags":{"name":"JCPenney","shop":"department_store"},"name":"JCPenney","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Karstadt":{"tags":{"name":"Karstadt","shop":"department_store"},"name":"Karstadt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Kmart":{"tags":{"name":"Kmart","shop":"department_store"},"name":"Kmart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Kohl's":{"tags":{"name":"Kohl's","shop":"department_store"},"name":"Kohl's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Lojas Americanas":{"tags":{"name":"Lojas Americanas","shop":"department_store"},"name":"Lojas Americanas","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Macy's":{"tags":{"name":"Macy's","shop":"department_store"},"name":"Macy's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Marks & Spencer":{"tags":{"name":"Marks & Spencer","shop":"department_store"},"name":"Marks & Spencer","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Myer":{"tags":{"name":"Myer","shop":"department_store"},"name":"Myer","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Nordstrom":{"tags":{"name":"Nordstrom","shop":"department_store"},"name":"Nordstrom","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Sears":{"tags":{"name":"Sears","shop":"department_store"},"name":"Sears","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Shopko":{"tags":{"name":"Shopko","shop":"department_store"},"name":"Shopko","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Target":{"tags":{"name":"Target","shop":"department_store"},"name":"Target","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/The Warehouse":{"tags":{"name":"The Warehouse","shop":"department_store"},"name":"The Warehouse","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Woolworth":{"tags":{"name":"Woolworth","shop":"department_store"},"name":"Woolworth","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Универмаг":{"tags":{"name":"Универмаг","shop":"department_store"},"name":"Универмаг","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Ace Hardware":{"tags":{"name":"Ace Hardware","shop":"doityourself"},"name":"Ace Hardware","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/B&Q":{"tags":{"name":"B&Q","shop":"doityourself"},"name":"B&Q","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Bauhaus":{"tags":{"name":"Bauhaus","shop":"doityourself"},"name":"Bauhaus","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Biltema":{"tags":{"name":"Biltema","shop":"doityourself"},"name":"Biltema","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Brico":{"tags":{"name":"Brico","shop":"doityourself"},"name":"Brico","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Bricomarché":{"tags":{"name":"Bricomarché","shop":"doityourself"},"name":"Bricomarché","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Bricorama":{"tags":{"name":"Bricorama","shop":"doityourself"},"name":"Bricorama","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Bunnings Warehouse":{"tags":{"name":"Bunnings Warehouse","shop":"doityourself"},"name":"Bunnings Warehouse","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Castorama":{"tags":{"name":"Castorama","shop":"doityourself"},"name":"Castorama","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Easy":{"tags":{"name":"Easy","shop":"doityourself"},"name":"Easy","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Gamma":{"tags":{"name":"Gamma","shop":"doityourself"},"name":"Gamma","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Globus Baumarkt":{"tags":{"name":"Globus Baumarkt","shop":"doityourself"},"name":"Globus Baumarkt","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Hagebaumarkt":{"tags":{"name":"Hagebaumarkt","shop":"doityourself"},"name":"Hagebaumarkt","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Hellweg":{"tags":{"name":"Hellweg","shop":"doityourself"},"name":"Hellweg","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Home Depot":{"tags":{"name":"Home Depot","shop":"doityourself"},"name":"Home Depot","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Home Hardware":{"tags":{"name":"Home Hardware","shop":"doityourself"},"name":"Home Hardware","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Homebase":{"tags":{"name":"Homebase","shop":"doityourself"},"name":"Homebase","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Hornbach":{"tags":{"name":"Hornbach","shop":"doityourself"},"name":"Hornbach","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Hubo":{"tags":{"name":"Hubo","shop":"doityourself"},"name":"Hubo","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Karwei":{"tags":{"name":"Karwei","shop":"doityourself"},"name":"Karwei","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Lagerhaus":{"tags":{"name":"Lagerhaus","shop":"doityourself"},"name":"Lagerhaus","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Leroy Merlin":{"tags":{"name":"Leroy Merlin","shop":"doityourself"},"name":"Leroy Merlin","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Lowe's":{"tags":{"name":"Lowe's","shop":"doityourself"},"name":"Lowe's","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Lowes":{"tags":{"name":"Lowes","shop":"doityourself"},"name":"Lowes","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Menards":{"tags":{"name":"Menards","shop":"doityourself"},"name":"Menards","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Mr Bricolage":{"tags":{"name":"Mr Bricolage","shop":"doityourself"},"name":"Mr Bricolage","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Mr.Bricolage":{"tags":{"name":"Mr.Bricolage","shop":"doityourself"},"name":"Mr.Bricolage","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/OBI":{"tags":{"name":"OBI","shop":"doityourself"},"name":"OBI","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Point P":{"tags":{"name":"Point P","shop":"doityourself"},"name":"Point P","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Praktiker":{"tags":{"name":"Praktiker","shop":"doityourself"},"name":"Praktiker","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Praxis":{"tags":{"name":"Praxis","shop":"doityourself"},"name":"Praxis","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Rona":{"tags":{"name":"Rona","shop":"doityourself"},"name":"Rona","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Screwfix":{"tags":{"name":"Screwfix","shop":"doityourself"},"name":"Screwfix","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Sonderpreis Baumarkt":{"tags":{"name":"Sonderpreis Baumarkt","shop":"doityourself"},"name":"Sonderpreis Baumarkt","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Tekzen":{"tags":{"name":"Tekzen","shop":"doityourself"},"name":"Tekzen","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Toom Baumarkt":{"tags":{"name":"Toom Baumarkt","shop":"doityourself"},"name":"Toom Baumarkt","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Weldom":{"tags":{"name":"Weldom","shop":"doityourself"},"name":"Weldom","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Wickes":{"tags":{"name":"Wickes","shop":"doityourself"},"name":"Wickes","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Леруа Мерлен":{"tags":{"name":"Леруа Мерлен","shop":"doityourself"},"name":"Леруа Мерлен","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Мастер":{"tags":{"name":"Мастер","shop":"doityourself"},"name":"Мастер","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Строитель":{"tags":{"name":"Строитель","shop":"doityourself"},"name":"Строитель","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Стройматериалы":{"tags":{"name":"Стройматериалы","shop":"doityourself"},"name":"Стройматериалы","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/カインズホーム":{"tags":{"name":"カインズホーム","shop":"doityourself"},"name":"カインズホーム","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/コメリ":{"tags":{"name":"コメリ","shop":"doityourself"},"name":"コメリ","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/コーナン":{"tags":{"name":"コーナン","shop":"doityourself"},"name":"コーナン","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/dry_cleaning/Cleaners":{"tags":{"name":"Cleaners","shop":"dry_cleaning"},"name":"Cleaners","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/dry_cleaning/Pressing":{"tags":{"name":"Pressing","shop":"dry_cleaning"},"name":"Pressing","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/dry_cleaning/Диана":{"tags":{"name":"Диана","shop":"dry_cleaning"},"name":"Диана","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/dry_cleaning/Химчистка":{"tags":{"name":"Химчистка","shop":"dry_cleaning"},"name":"Химчистка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/dry_cleaning/ホワイト急便":{"tags":{"name":"ホワイト急便","shop":"dry_cleaning"},"name":"ホワイト急便","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/BCC":{"tags":{"name":"BCC","shop":"electronics"},"name":"BCC","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Batteries Plus Bulbs":{"tags":{"name":"Batteries Plus Bulbs","shop":"electronics"},"name":"Batteries Plus Bulbs","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Best Buy":{"tags":{"name":"Best Buy","shop":"electronics"},"name":"Best Buy","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Boulanger":{"tags":{"name":"Boulanger","shop":"electronics"},"name":"Boulanger","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Currys":{"tags":{"name":"Currys","shop":"electronics"},"name":"Currys","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Currys PC World":{"tags":{"name":"Currys PC World","shop":"electronics"},"name":"Currys PC World","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Darty":{"tags":{"name":"Darty","shop":"electronics"},"name":"Darty","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Elektra":{"tags":{"name":"Elektra","shop":"electronics"},"name":"Elektra","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Elgiganten":{"tags":{"name":"Elgiganten","shop":"electronics"},"name":"Elgiganten","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Euronics":{"tags":{"name":"Euronics","shop":"electronics"},"name":"Euronics","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Expert":{"tags":{"name":"Expert","shop":"electronics"},"name":"Expert","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Hartlauer":{"tags":{"name":"Hartlauer","shop":"electronics"},"name":"Hartlauer","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Interdiscount":{"tags":{"name":"Interdiscount","shop":"electronics"},"name":"Interdiscount","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/La Curacao":{"tags":{"name":"La Curacao","shop":"electronics"},"name":"La Curacao","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Maplin":{"tags":{"name":"Maplin","shop":"electronics"},"name":"Maplin","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Media Expert":{"tags":{"name":"Media Expert","shop":"electronics"},"name":"Media Expert","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Media Markt":{"tags":{"name":"Media Markt","shop":"electronics"},"name":"Media Markt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Musimundo":{"tags":{"name":"Musimundo","shop":"electronics"},"name":"Musimundo","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Neonet":{"tags":{"name":"Neonet","shop":"electronics"},"name":"Neonet","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/RTV Euro AGD":{"tags":{"name":"RTV Euro AGD","shop":"electronics"},"name":"RTV Euro AGD","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Radio Shack":{"tags":{"name":"Radio Shack","shop":"electronics"},"name":"Radio Shack","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Rogers":{"tags":{"name":"Rogers","shop":"electronics"},"name":"Rogers","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Samsung":{"tags":{"name":"Samsung","shop":"electronics"},"name":"Samsung","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Saturn":{"tags":{"name":"Saturn","shop":"electronics"},"name":"Saturn","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Sony":{"tags":{"name":"Sony","shop":"electronics"},"name":"Sony","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/The Source":{"tags":{"name":"The Source","shop":"electronics"},"name":"The Source","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Unieuro":{"tags":{"name":"Unieuro","shop":"electronics"},"name":"Unieuro","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/М.Видео":{"tags":{"name":"М.Видео","shop":"electronics"},"name":"М.Видео","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Фокстрот":{"tags":{"name":"Фокстрот","shop":"electronics"},"name":"Фокстрот","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Эксперт":{"tags":{"name":"Эксперт","shop":"electronics"},"name":"Эксперт","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Эльдорадо":{"tags":{"name":"Эльдорадо","shop":"electronics"},"name":"Эльдорадо","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/エディオン":{"tags":{"name":"エディオン","shop":"electronics"},"name":"エディオン","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/ケーズデンキ":{"tags":{"name":"ケーズデンキ","shop":"electronics"},"name":"ケーズデンキ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/コジマ":{"tags":{"name":"コジマ","shop":"electronics"},"name":"コジマ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/ヤマダ電機":{"tags":{"name":"ヤマダ電機","shop":"electronics"},"name":"ヤマダ電機","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/全國電子":{"tags":{"name":"全國電子","shop":"electronics"},"name":"全國電子","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/燦坤3C":{"tags":{"name":"燦坤3C","shop":"electronics"},"name":"燦坤3C","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/erotic/Orion":{"tags":{"name":"Orion","shop":"erotic"},"name":"Orion","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/fabric/Ткани":{"tags":{"name":"Ткани","shop":"fabric"},"name":"Ткани","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/farm/Hofladen":{"tags":{"name":"Hofladen","shop":"farm"},"name":"Hofladen","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Blume 2000":{"tags":{"name":"Blume 2000","shop":"florist"},"name":"Blume 2000","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Blumen Risse":{"tags":{"name":"Blumen Risse","shop":"florist"},"name":"Blumen Risse","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Fleuriste":{"tags":{"name":"Fleuriste","shop":"florist"},"name":"Fleuriste","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Interflora":{"tags":{"name":"Interflora","shop":"florist"},"name":"Interflora","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Monceau Fleurs":{"tags":{"name":"Monceau Fleurs","shop":"florist"},"name":"Monceau Fleurs","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Virágbolt":{"tags":{"name":"Virágbolt","shop":"florist"},"name":"Virágbolt","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Квіти":{"tags":{"name":"Квіти","shop":"florist"},"name":"Квіти","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Цветочный магазин":{"tags":{"name":"Цветочный магазин","shop":"florist"},"name":"Цветочный магазин","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Цветы":{"tags":{"name":"Цветы","shop":"florist"},"name":"Цветы","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/frame/rumah penduduk":{"tags":{"name":"rumah penduduk","shop":"frame"},"name":"rumah penduduk","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/funeral_directors/The Co-operative Funeralcare":{"tags":{"name":"The Co-operative Funeralcare","shop":"funeral_directors"},"name":"The Co-operative Funeralcare","icon":"cemetery","geometry":["point","area"],"fields":["name","operator","address","building_area","religion","denomination"],"suggestion":true},"shop/funeral_directors/Ритуальные услуги":{"tags":{"name":"Ритуальные услуги","shop":"funeral_directors"},"name":"Ритуальные услуги","icon":"cemetery","geometry":["point","area"],"fields":["name","operator","address","building_area","religion","denomination"],"suggestion":true},"shop/furniture/Aaron's":{"tags":{"name":"Aaron's","shop":"furniture"},"name":"Aaron's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Black Red White":{"tags":{"name":"Black Red White","shop":"furniture"},"name":"Black Red White","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Bodzio":{"tags":{"name":"Bodzio","shop":"furniture"},"name":"Bodzio","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/But":{"tags":{"name":"But","shop":"furniture"},"name":"But","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Conforama":{"tags":{"name":"Conforama","shop":"furniture"},"name":"Conforama","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/DFS":{"tags":{"name":"DFS","shop":"furniture"},"name":"DFS","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Dänisches Bettenlager":{"tags":{"name":"Dänisches Bettenlager","shop":"furniture"},"name":"Dänisches Bettenlager","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Fly":{"tags":{"name":"Fly","shop":"furniture"},"name":"Fly","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Harveys":{"tags":{"name":"Harveys","shop":"furniture"},"name":"Harveys","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/IKEA":{"tags":{"name":"IKEA","shop":"furniture"},"name":"IKEA","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/JYSK":{"tags":{"name":"JYSK","shop":"furniture"},"name":"JYSK","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Kwantum":{"tags":{"name":"Kwantum","shop":"furniture"},"name":"Kwantum","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Leen Bakker":{"tags":{"name":"Leen Bakker","shop":"furniture"},"name":"Leen Bakker","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Pier 1 Imports":{"tags":{"name":"Pier 1 Imports","shop":"furniture"},"name":"Pier 1 Imports","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Roller":{"tags":{"name":"Roller","shop":"furniture"},"name":"Roller","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/The Brick":{"tags":{"name":"The Brick","shop":"furniture"},"name":"The Brick","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Меблі":{"tags":{"name":"Меблі","shop":"furniture"},"name":"Меблі","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/ニトリ":{"tags":{"name":"ニトリ","shop":"furniture"},"name":"ニトリ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/garden_centre/Dehner":{"tags":{"name":"Dehner","shop":"garden_centre"},"name":"Dehner","icon":"garden-center","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/garden_centre/Gamm Vert":{"tags":{"name":"Gamm Vert","shop":"garden_centre"},"name":"Gamm Vert","icon":"garden-center","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/garden_centre/Jardiland":{"tags":{"name":"Jardiland","shop":"garden_centre"},"name":"Jardiland","icon":"garden-center","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/garden_centre/Point Vert":{"tags":{"name":"Point Vert","shop":"garden_centre"},"name":"Point Vert","icon":"garden-center","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/garden_centre/Welkoop":{"tags":{"name":"Welkoop","shop":"garden_centre"},"name":"Welkoop","icon":"garden-center","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/garden_centre/Семена":{"tags":{"name":"Семена","shop":"garden_centre"},"name":"Семена","icon":"garden-center","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/gift/Card Factory":{"tags":{"name":"Card Factory","shop":"gift"},"name":"Card Factory","icon":"gift","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/gift/Hallmark":{"tags":{"name":"Hallmark","shop":"gift"},"name":"Hallmark","icon":"gift","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/gift/Подарки":{"tags":{"name":"Подарки","shop":"gift"},"name":"Подарки","icon":"gift","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/greengrocer/Frutería":{"tags":{"name":"Frutería","shop":"greengrocer"},"name":"Frutería","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/greengrocer/Овощи и фрукты":{"tags":{"name":"Овощи и фрукты","shop":"greengrocer"},"name":"Овощи и фрукты","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Berber":{"tags":{"name":"Berber","shop":"hairdresser"},"name":"Berber","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Cost Cutters":{"tags":{"name":"Cost Cutters","shop":"hairdresser"},"name":"Cost Cutters","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Fantastic Sams":{"tags":{"name":"Fantastic Sams","shop":"hairdresser"},"name":"Fantastic Sams","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Figaro":{"tags":{"name":"Figaro","shop":"hairdresser"},"name":"Figaro","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/First Choice Haircutters":{"tags":{"name":"First Choice Haircutters","shop":"hairdresser"},"name":"First Choice Haircutters","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Franck Provost":{"tags":{"name":"Franck Provost","shop":"hairdresser"},"name":"Franck Provost","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Frizerie":{"tags":{"name":"Frizerie","shop":"hairdresser"},"name":"Frizerie","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Great Clips":{"tags":{"name":"Great Clips","shop":"hairdresser"},"name":"Great Clips","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Haarmonie":{"tags":{"name":"Haarmonie","shop":"hairdresser"},"name":"Haarmonie","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Haarscharf":{"tags":{"name":"Haarscharf","shop":"hairdresser"},"name":"Haarscharf","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Hair Cuttery":{"tags":{"name":"Hair Cuttery","shop":"hairdresser"},"name":"Hair Cuttery","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Hairkiller":{"tags":{"name":"Hairkiller","shop":"hairdresser"},"name":"Hairkiller","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Jean Louis David":{"tags":{"name":"Jean Louis David","shop":"hairdresser"},"name":"Jean Louis David","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Jean-Louis David":{"tags":{"name":"Jean-Louis David","shop":"hairdresser"},"name":"Jean-Louis David","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Klier":{"tags":{"name":"Klier","shop":"hairdresser"},"name":"Klier","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Klipp":{"tags":{"name":"Klipp","shop":"hairdresser"},"name":"Klipp","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Le Salon":{"tags":{"name":"Le Salon","shop":"hairdresser"},"name":"Le Salon","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Marco Aldany":{"tags":{"name":"Marco Aldany","shop":"hairdresser"},"name":"Marco Aldany","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Peluquería":{"tags":{"name":"Peluquería","shop":"hairdresser"},"name":"Peluquería","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Salon fryzjerski":{"tags":{"name":"Salon fryzjerski","shop":"hairdresser"},"name":"Salon fryzjerski","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Sport Clips":{"tags":{"name":"Sport Clips","shop":"hairdresser"},"name":"Sport Clips","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Super Cuts":{"tags":{"name":"Super Cuts","shop":"hairdresser"},"name":"Super Cuts","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Supercuts":{"tags":{"name":"Supercuts","shop":"hairdresser"},"name":"Supercuts","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Tchip":{"tags":{"name":"Tchip","shop":"hairdresser"},"name":"Tchip","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/The Barber Shop":{"tags":{"name":"The Barber Shop","shop":"hairdresser"},"name":"The Barber Shop","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Toni & Guy":{"tags":{"name":"Toni & Guy","shop":"hairdresser"},"name":"Toni & Guy","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Top Hair":{"tags":{"name":"Top Hair","shop":"hairdresser"},"name":"Top Hair","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Локон":{"tags":{"name":"Локон","shop":"hairdresser"},"name":"Локон","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Парикмахерская":{"tags":{"name":"Парикмахерская","shop":"hairdresser"},"name":"Парикмахерская","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Перукарня":{"tags":{"name":"Перукарня","shop":"hairdresser"},"name":"Перукарня","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Салон красоты":{"tags":{"name":"Салон красоты","shop":"hairdresser"},"name":"Салон красоты","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Стиль":{"tags":{"name":"Стиль","shop":"hairdresser"},"name":"Стиль","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Шарм":{"tags":{"name":"Шарм","shop":"hairdresser"},"name":"Шарм","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/حلاق":{"tags":{"name":"حلاق","shop":"hairdresser"},"name":"حلاق","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/1000 мелочей":{"tags":{"name":"1000 мелочей","shop":"hardware"},"name":"1000 мелочей","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Ferretería":{"tags":{"name":"Ferretería","shop":"hardware"},"name":"Ferretería","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Harbor Freight Tools":{"tags":{"name":"Harbor Freight Tools","shop":"hardware"},"name":"Harbor Freight Tools","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Quincaillerie":{"tags":{"name":"Quincaillerie","shop":"hardware"},"name":"Quincaillerie","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/True Value":{"tags":{"name":"True Value","shop":"hardware"},"name":"True Value","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Würth":{"tags":{"name":"Würth","shop":"hardware"},"name":"Würth","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Промтовары":{"tags":{"name":"Промтовары","shop":"hardware"},"name":"Промтовары","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Сантехника":{"tags":{"name":"Сантехника","shop":"hardware"},"name":"Сантехника","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Товары для дома":{"tags":{"name":"Товары для дома","shop":"hardware"},"name":"Товары для дома","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Хозтовары":{"tags":{"name":"Хозтовары","shop":"hardware"},"name":"Хозтовары","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hearing_aids/Amplifon":{"tags":{"name":"Amplifon","shop":"hearing_aids"},"name":"Amplifon","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hearing_aids/Geers":{"tags":{"name":"Geers","shop":"hearing_aids"},"name":"Geers","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hearing_aids/Kind Hörgeräte":{"tags":{"name":"Kind Hörgeräte","shop":"hearing_aids"},"name":"Kind Hörgeräte","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hearing_aids/amplifon":{"tags":{"name":"amplifon","shop":"hearing_aids"},"name":"amplifon","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hifi/Bang & Olufsen":{"tags":{"name":"Bang & Olufsen","shop":"hifi"},"name":"Bang & Olufsen","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/houseware/Blokker":{"tags":{"name":"Blokker","shop":"houseware"},"name":"Blokker","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/houseware/Marskramer":{"tags":{"name":"Marskramer","shop":"houseware"},"name":"Marskramer","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/houseware/Xenos":{"tags":{"name":"Xenos","shop":"houseware"},"name":"Xenos","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/interior_decoration/Casa":{"tags":{"name":"Casa","shop":"interior_decoration"},"name":"Casa","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/interior_decoration/Depot":{"tags":{"name":"Depot","shop":"interior_decoration"},"name":"Depot","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/585":{"tags":{"name":"585","shop":"jewelry"},"name":"585","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Apart":{"tags":{"name":"Apart","shop":"jewelry"},"name":"Apart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Bijou Brigitte":{"tags":{"name":"Bijou Brigitte","shop":"jewelry"},"name":"Bijou Brigitte","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Christ":{"tags":{"name":"Christ","shop":"jewelry"},"name":"Christ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Claire's":{"tags":{"name":"Claire's","shop":"jewelry"},"name":"Claire's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Ernest Jones":{"tags":{"name":"Ernest Jones","shop":"jewelry"},"name":"Ernest Jones","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/H Samuel":{"tags":{"name":"H Samuel","shop":"jewelry"},"name":"H Samuel","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/James Avery Jewelry":{"tags":{"name":"James Avery Jewelry","shop":"jewelry"},"name":"James Avery Jewelry","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Julien d'Orcel":{"tags":{"name":"Julien d'Orcel","shop":"jewelry"},"name":"Julien d'Orcel","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Kay Jewelers":{"tags":{"name":"Kay Jewelers","shop":"jewelry"},"name":"Kay Jewelers","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Pandora":{"tags":{"name":"Pandora","shop":"jewelry"},"name":"Pandora","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Swarovski":{"tags":{"name":"Swarovski","shop":"jewelry"},"name":"Swarovski","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Адамас":{"tags":{"name":"Адамас","shop":"jewelry"},"name":"Адамас","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Золото":{"tags":{"name":"Золото","shop":"jewelry"},"name":"Золото","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/KIOS":{"tags":{"name":"KIOS","shop":"kiosk"},"name":"KIOS","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Kiosko":{"tags":{"name":"Kiosko","shop":"kiosk"},"name":"Kiosko","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Kiosque":{"tags":{"name":"Kiosque","shop":"kiosk"},"name":"Kiosque","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Kolporter":{"tags":{"name":"Kolporter","shop":"kiosk"},"name":"Kolporter","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Lietuvos spauda":{"tags":{"name":"Lietuvos spauda","shop":"kiosk"},"name":"Lietuvos spauda","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Narvesen":{"tags":{"name":"Narvesen","shop":"kiosk"},"name":"Narvesen","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Pressbyrån":{"tags":{"name":"Pressbyrån","shop":"kiosk"},"name":"Pressbyrån","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Pulpería":{"tags":{"name":"Pulpería","shop":"kiosk"},"name":"Pulpería","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/R-Kioski":{"tags":{"name":"R-Kioski","shop":"kiosk"},"name":"R-Kioski","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Ruch":{"tags":{"name":"Ruch","shop":"kiosk"},"name":"Ruch","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Tabak Trafik":{"tags":{"name":"Tabak Trafik","shop":"kiosk"},"name":"Tabak Trafik","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Tisak":{"tags":{"name":"Tisak","shop":"kiosk"},"name":"Tisak","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Trafik":{"tags":{"name":"Trafik","shop":"kiosk"},"name":"Trafik","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Trafika":{"tags":{"name":"Trafika","shop":"kiosk"},"name":"Trafika","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Trinkhalle":{"tags":{"name":"Trinkhalle","shop":"kiosk"},"name":"Trinkhalle","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Белсоюзпечать":{"tags":{"name":"Белсоюзпечать","shop":"kiosk"},"name":"Белсоюзпечать","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Киоск":{"tags":{"name":"Киоск","shop":"kiosk"},"name":"Киоск","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/მარკეტი (Market)":{"tags":{"name":"მარკეტი (Market)","shop":"kiosk"},"name":"მარკეტი (Market)","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kitchen/Cuisinella":{"tags":{"name":"Cuisinella","shop":"kitchen"},"name":"Cuisinella","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kitchen/Home Utensils":{"tags":{"name":"Home Utensils","shop":"kitchen"},"name":"Home Utensils","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/laundry/Launderette":{"tags":{"name":"Launderette","shop":"laundry"},"name":"Launderette","icon":"laundry","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/laundry/Lavandería":{"tags":{"name":"Lavandería","shop":"laundry"},"name":"Lavandería","icon":"laundry","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/laundry/コインランドリー":{"tags":{"name":"コインランドリー","shop":"laundry"},"name":"コインランドリー","icon":"laundry","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/lottery/Loteria de la Provincia":{"tags":{"name":"Loteria de la Provincia","shop":"lottery"},"name":"Loteria de la Provincia","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/lottery/Lotería Nacional":{"tags":{"name":"Lotería Nacional","shop":"lottery"},"name":"Lotería Nacional","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/lottery/Lotería de la Provincia":{"tags":{"name":"Lotería de la Provincia","shop":"lottery"},"name":"Lotería de la Provincia","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/lottery/Lotto":{"tags":{"name":"Lotto","shop":"lottery"},"name":"Lotto","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/lottery/Lottózó":{"tags":{"name":"Lottózó","shop":"lottery"},"name":"Lottózó","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/lottery/ONCE":{"tags":{"name":"ONCE","shop":"lottery"},"name":"ONCE","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mall/Торговый центр":{"tags":{"name":"Торговый центр","shop":"mall"},"name":"Торговый центр","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours"],"suggestion":true},"shop/massage/Massage Envy":{"tags":{"name":"Massage Envy","shop":"massage"},"name":"Massage Envy","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/medical_supply/Pofam-Poznań":{"tags":{"name":"Pofam-Poznań","shop":"medical_supply"},"name":"Pofam-Poznań","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/3 Store":{"tags":{"name":"3 Store","shop":"mobile_phone"},"name":"3 Store","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/AT&T":{"tags":{"name":"AT&T","shop":"mobile_phone"},"name":"AT&T","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Bell":{"tags":{"name":"Bell","shop":"mobile_phone"},"name":"Bell","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Bitė":{"tags":{"name":"Bitė","shop":"mobile_phone"},"name":"Bitė","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Boost Mobile":{"tags":{"name":"Boost Mobile","shop":"mobile_phone"},"name":"Boost Mobile","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Carphone Warehouse":{"tags":{"name":"Carphone Warehouse","shop":"mobile_phone"},"name":"Carphone Warehouse","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Claro":{"tags":{"name":"Claro","shop":"mobile_phone"},"name":"Claro","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Cricket Wireless":{"tags":{"name":"Cricket Wireless","shop":"mobile_phone"},"name":"Cricket Wireless","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Digicel":{"tags":{"name":"Digicel","shop":"mobile_phone"},"name":"Digicel","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/EE":{"tags":{"name":"EE","shop":"mobile_phone"},"name":"EE","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/MetroPCS":{"tags":{"name":"MetroPCS","shop":"mobile_phone"},"name":"MetroPCS","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Movistar":{"tags":{"name":"Movistar","shop":"mobile_phone"},"name":"Movistar","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/O2":{"tags":{"name":"O2","shop":"mobile_phone"},"name":"O2","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Orange":{"tags":{"name":"Orange","shop":"mobile_phone"},"name":"Orange","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Personal":{"tags":{"name":"Personal","shop":"mobile_phone"},"name":"Personal","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Play":{"tags":{"name":"Play","shop":"mobile_phone"},"name":"Play","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Plus":{"tags":{"name":"Plus","shop":"mobile_phone"},"name":"Plus","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/SFR":{"tags":{"name":"SFR","shop":"mobile_phone"},"name":"SFR","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Sprint":{"tags":{"name":"Sprint","shop":"mobile_phone"},"name":"Sprint","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/T-Mobile":{"tags":{"name":"T-Mobile","shop":"mobile_phone"},"name":"T-Mobile","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/TIM":{"tags":{"name":"TIM","shop":"mobile_phone"},"name":"TIM","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Telcel":{"tags":{"name":"Telcel","shop":"mobile_phone"},"name":"Telcel","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Tele2":{"tags":{"name":"Tele2","shop":"mobile_phone"},"name":"Tele2","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Telekom":{"tags":{"name":"Telekom","shop":"mobile_phone"},"name":"Telekom","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Telekom Shop":{"tags":{"name":"Telekom Shop","shop":"mobile_phone"},"name":"Telekom Shop","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Telenor":{"tags":{"name":"Telenor","shop":"mobile_phone"},"name":"Telenor","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Telus":{"tags":{"name":"Telus","shop":"mobile_phone"},"name":"Telus","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/The Phone House":{"tags":{"name":"The Phone House","shop":"mobile_phone"},"name":"The Phone House","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Three":{"tags":{"name":"Three","shop":"mobile_phone"},"name":"Three","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Tim":{"tags":{"name":"Tim","shop":"mobile_phone"},"name":"Tim","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Télécentre":{"tags":{"name":"Télécentre","shop":"mobile_phone"},"name":"Télécentre","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Verizon":{"tags":{"name":"Verizon","shop":"mobile_phone"},"name":"Verizon","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Verizon Wireless":{"tags":{"name":"Verizon Wireless","shop":"mobile_phone"},"name":"Verizon Wireless","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Vodafone":{"tags":{"name":"Vodafone","shop":"mobile_phone"},"name":"Vodafone","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Vodafone Shop":{"tags":{"name":"Vodafone Shop","shop":"mobile_phone"},"name":"Vodafone Shop","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Wind":{"tags":{"name":"Wind","shop":"mobile_phone"},"name":"Wind","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Yoigo":{"tags":{"name":"Yoigo","shop":"mobile_phone"},"name":"Yoigo","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/au":{"tags":{"name":"au","shop":"mobile_phone"},"name":"au","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/auショップ":{"tags":{"name":"auショップ","shop":"mobile_phone"},"name":"auショップ","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/mobilcom debitel":{"tags":{"name":"mobilcom debitel","shop":"mobile_phone"},"name":"mobilcom debitel","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Алло":{"tags":{"name":"Алло","shop":"mobile_phone"},"name":"Алло","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Билайн":{"tags":{"name":"Билайн","shop":"mobile_phone"},"name":"Билайн","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Евросеть":{"tags":{"name":"Евросеть","shop":"mobile_phone"},"name":"Евросеть","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Київстар":{"tags":{"name":"Київстар","shop":"mobile_phone"},"name":"Київстар","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/МТС":{"tags":{"name":"МТС","shop":"mobile_phone"},"name":"МТС","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Мегафон":{"tags":{"name":"Мегафон","shop":"mobile_phone"},"name":"Мегафон","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Связной":{"tags":{"name":"Связной","shop":"mobile_phone"},"name":"Связной","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Теле2":{"tags":{"name":"Теле2","shop":"mobile_phone"},"name":"Теле2","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/ソフトバンクショップ":{"tags":{"name":"ソフトバンクショップ","shop":"mobile_phone"},"name":"ソフトバンクショップ","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/ドコモショップ":{"tags":{"name":"ドコモショップ","shop":"mobile_phone"},"name":"ドコモショップ","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/money_lender/Money Mart":{"tags":{"name":"Money Mart","shop":"money_lender"},"name":"Money Mart","icon":"bank","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","currency_multi"],"suggestion":true},"shop/motorcycle/Harley Davidson":{"tags":{"name":"Harley Davidson","shop":"motorcycle"},"name":"Harley Davidson","icon":"scooter","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/motorcycle/Yamaha":{"tags":{"name":"Yamaha","shop":"motorcycle"},"name":"Yamaha","icon":"scooter","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/music/HMV":{"tags":{"name":"HMV","shop":"music"},"name":"HMV","icon":"music","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/musical_instrument/Guitar Center":{"tags":{"name":"Guitar Center","shop":"musical_instrument"},"name":"Guitar Center","icon":"music","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Edicola":{"tags":{"name":"Edicola","shop":"newsagent"},"name":"Edicola","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Maison de la Presse":{"tags":{"name":"Maison de la Presse","shop":"newsagent"},"name":"Maison de la Presse","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Relay":{"tags":{"name":"Relay","shop":"newsagent"},"name":"Relay","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Tabac Presse":{"tags":{"name":"Tabac Presse","shop":"newsagent"},"name":"Tabac Presse","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/WHSmith":{"tags":{"name":"WHSmith","shop":"newsagent"},"name":"WHSmith","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Витебскоблсоюзпечать":{"tags":{"name":"Витебскоблсоюзпечать","shop":"newsagent"},"name":"Витебскоблсоюзпечать","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Первая полоса":{"tags":{"name":"Первая полоса","shop":"newsagent"},"name":"Первая полоса","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Печать":{"tags":{"name":"Печать","shop":"newsagent"},"name":"Печать","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Роспечать":{"tags":{"name":"Роспечать","shop":"newsagent"},"name":"Роспечать","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Союзпечать":{"tags":{"name":"Союзпечать","shop":"newsagent"},"name":"Союзпечать","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Alain Afflelou":{"tags":{"name":"Alain Afflelou","shop":"optician"},"name":"Alain Afflelou","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Apollo":{"tags":{"name":"Apollo","shop":"optician"},"name":"Apollo","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Atol":{"tags":{"name":"Atol","shop":"optician"},"name":"Atol","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Boots Opticians":{"tags":{"name":"Boots Opticians","shop":"optician"},"name":"Boots Opticians","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Fielmann":{"tags":{"name":"Fielmann","shop":"optician"},"name":"Fielmann","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/General Óptica":{"tags":{"name":"General Óptica","shop":"optician"},"name":"General Óptica","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Grand Optical":{"tags":{"name":"Grand Optical","shop":"optician"},"name":"Grand Optical","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Générale d'Optique":{"tags":{"name":"Générale d'Optique","shop":"optician"},"name":"Générale d'Optique","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Hakim Optical":{"tags":{"name":"Hakim Optical","shop":"optician"},"name":"Hakim Optical","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Hans Anders":{"tags":{"name":"Hans Anders","shop":"optician"},"name":"Hans Anders","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Krys":{"tags":{"name":"Krys","shop":"optician"},"name":"Krys","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Les Opticiens Mutualistes":{"tags":{"name":"Les Opticiens Mutualistes","shop":"optician"},"name":"Les Opticiens Mutualistes","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Optic 2000":{"tags":{"name":"Optic 2000","shop":"optician"},"name":"Optic 2000","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Optical Center":{"tags":{"name":"Optical Center","shop":"optician"},"name":"Optical Center","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Pearle":{"tags":{"name":"Pearle","shop":"optician"},"name":"Pearle","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Pearle Vision":{"tags":{"name":"Pearle Vision","shop":"optician"},"name":"Pearle Vision","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Specsavers":{"tags":{"name":"Specsavers","shop":"optician"},"name":"Specsavers","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Sunglass Hut":{"tags":{"name":"Sunglass Hut","shop":"optician"},"name":"Sunglass Hut","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Synoptik":{"tags":{"name":"Synoptik","shop":"optician"},"name":"Synoptik","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Vision Express":{"tags":{"name":"Vision Express","shop":"optician"},"name":"Vision Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/แว่นท็อปเจริญ":{"tags":{"name":"แว่นท็อปเจริญ","shop":"optician"},"name":"แว่นท็อปเจริญ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/メガネスーパー":{"tags":{"name":"メガネスーパー","shop":"optician"},"name":"メガネスーパー","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/眼鏡市場":{"tags":{"name":"眼鏡市場","shop":"optician"},"name":"眼鏡市場","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/outdoor/Mountain Warehouse":{"tags":{"name":"Mountain Warehouse","shop":"outdoor"},"name":"Mountain Warehouse","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/outdoor/REI":{"tags":{"name":"REI","shop":"outdoor"},"name":"REI","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/outdoor/Рыболов":{"tags":{"name":"Рыболов","shop":"outdoor"},"name":"Рыболов","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/paint/Benjamin Moore":{"tags":{"name":"Benjamin Moore","shop":"paint"},"name":"Benjamin Moore","icon":"water","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/paint/Comex":{"tags":{"name":"Comex","shop":"paint"},"name":"Comex","icon":"water","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/paint/Jotun":{"tags":{"name":"Jotun","shop":"paint"},"name":"Jotun","icon":"water","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/paint/National Paints":{"tags":{"name":"National Paints","shop":"paint"},"name":"National Paints","icon":"water","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/paint/Sherwin Williams":{"tags":{"name":"Sherwin Williams","shop":"paint"},"name":"Sherwin Williams","icon":"water","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/paint/Sherwin-Williams Paints":{"tags":{"name":"Sherwin-Williams Paints","shop":"paint"},"name":"Sherwin-Williams Paints","icon":"water","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pawnbroker/Cash Converters":{"tags":{"name":"Cash Converters","shop":"pawnbroker"},"name":"Cash Converters","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pawnbroker/Lombard":{"tags":{"name":"Lombard","shop":"pawnbroker"},"name":"Lombard","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pawnbroker/Palawan Pawnshop":{"tags":{"name":"Palawan Pawnshop","shop":"pawnbroker"},"name":"Palawan Pawnshop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Das Futterhaus":{"tags":{"name":"Das Futterhaus","shop":"pet"},"name":"Das Futterhaus","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Fressnapf":{"tags":{"name":"Fressnapf","shop":"pet"},"name":"Fressnapf","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Global Pet Foods":{"tags":{"name":"Global Pet Foods","shop":"pet"},"name":"Global Pet Foods","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Maxi Zoo":{"tags":{"name":"Maxi Zoo","shop":"pet"},"name":"Maxi Zoo","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Pet Valu":{"tags":{"name":"Pet Valu","shop":"pet"},"name":"Pet Valu","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/PetSmart":{"tags":{"name":"PetSmart","shop":"pet"},"name":"PetSmart","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Petco":{"tags":{"name":"Petco","shop":"pet"},"name":"Petco","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Pets at Home":{"tags":{"name":"Pets at Home","shop":"pet"},"name":"Pets at Home","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Бетховен":{"tags":{"name":"Бетховен","shop":"pet"},"name":"Бетховен","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Зоотовары":{"tags":{"name":"Зоотовары","shop":"pet"},"name":"Зоотовары","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Четыре лапы":{"tags":{"name":"Четыре лапы","shop":"pet"},"name":"Четыре лапы","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/second_hand/Goodwill":{"tags":{"name":"Goodwill","shop":"second_hand"},"name":"Goodwill","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/second_hand/Value Village":{"tags":{"name":"Value Village","shop":"second_hand"},"name":"Value Village","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Aldo":{"tags":{"name":"Aldo","shop":"shoes"},"name":"Aldo","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Bata":{"tags":{"name":"Bata","shop":"shoes"},"name":"Bata","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Besson Chaussures":{"tags":{"name":"Besson Chaussures","shop":"shoes"},"name":"Besson Chaussures","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Brantano":{"tags":{"name":"Brantano","shop":"shoes"},"name":"Brantano","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/CCC":{"tags":{"name":"CCC","shop":"shoes"},"name":"CCC","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Camper":{"tags":{"name":"Camper","shop":"shoes"},"name":"Camper","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Chaussea":{"tags":{"name":"Chaussea","shop":"shoes"},"name":"Chaussea","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Clarks":{"tags":{"name":"Clarks","shop":"shoes"},"name":"Clarks","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Converse":{"tags":{"name":"Converse","shop":"shoes"},"name":"Converse","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Crocs":{"tags":{"name":"Crocs","shop":"shoes"},"name":"Crocs","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/DSW":{"tags":{"name":"DSW","shop":"shoes"},"name":"DSW","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Deichmann":{"tags":{"name":"Deichmann","shop":"shoes"},"name":"Deichmann","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Dosenbach":{"tags":{"name":"Dosenbach","shop":"shoes"},"name":"Dosenbach","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Ecco":{"tags":{"name":"Ecco","shop":"shoes"},"name":"Ecco","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Famous Footwear":{"tags":{"name":"Famous Footwear","shop":"shoes"},"name":"Famous Footwear","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Foot Locker":{"tags":{"name":"Foot Locker","shop":"shoes"},"name":"Foot Locker","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Geox":{"tags":{"name":"Geox","shop":"shoes"},"name":"Geox","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Kari":{"tags":{"name":"Kari","shop":"shoes"},"name":"Kari","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/La Halle aux Chaussures":{"tags":{"name":"La Halle aux Chaussures","shop":"shoes"},"name":"La Halle aux Chaussures","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Mephisto":{"tags":{"name":"Mephisto","shop":"shoes"},"name":"Mephisto","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Minelli":{"tags":{"name":"Minelli","shop":"shoes"},"name":"Minelli","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/New Balance":{"tags":{"name":"New Balance","shop":"shoes"},"name":"New Balance","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Payless":{"tags":{"name":"Payless","shop":"shoes"},"name":"Payless","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Payless Shoe Source":{"tags":{"name":"Payless Shoe Source","shop":"shoes"},"name":"Payless Shoe Source","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Payless ShoeSource":{"tags":{"name":"Payless ShoeSource","shop":"shoes"},"name":"Payless ShoeSource","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Quick Schuh":{"tags":{"name":"Quick Schuh","shop":"shoes"},"name":"Quick Schuh","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Rack Room Shoes":{"tags":{"name":"Rack Room Shoes","shop":"shoes"},"name":"Rack Room Shoes","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Reno":{"tags":{"name":"Reno","shop":"shoes"},"name":"Reno","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Rieker":{"tags":{"name":"Rieker","shop":"shoes"},"name":"Rieker","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Salamander":{"tags":{"name":"Salamander","shop":"shoes"},"name":"Salamander","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/San Marina":{"tags":{"name":"San Marina","shop":"shoes"},"name":"San Marina","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Scapino":{"tags":{"name":"Scapino","shop":"shoes"},"name":"Scapino","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Shoe Carnival":{"tags":{"name":"Shoe Carnival","shop":"shoes"},"name":"Shoe Carnival","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Shoe Zone":{"tags":{"name":"Shoe Zone","shop":"shoes"},"name":"Shoe Zone","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Siemes Schuhcenter":{"tags":{"name":"Siemes Schuhcenter","shop":"shoes"},"name":"Siemes Schuhcenter","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Skechers":{"tags":{"name":"Skechers","shop":"shoes"},"name":"Skechers","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Tamaris":{"tags":{"name":"Tamaris","shop":"shoes"},"name":"Tamaris","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/vanHaren":{"tags":{"name":"vanHaren","shop":"shoes"},"name":"vanHaren","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Éram":{"tags":{"name":"Éram","shop":"shoes"},"name":"Éram","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Ремонт обуви":{"tags":{"name":"Ремонт обуви","shop":"shoes"},"name":"Ремонт обуви","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/ЦентрОбувь":{"tags":{"name":"ЦентрОбувь","shop":"shoes"},"name":"ЦентрОбувь","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Юничел":{"tags":{"name":"Юничел","shop":"shoes"},"name":"Юничел","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/東京靴流通センター":{"tags":{"name":"東京靴流通センター","shop":"shoes"},"name":"東京靴流通センター","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Aktiesport":{"tags":{"name":"Aktiesport","shop":"sports"},"name":"Aktiesport","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Big 5 Sporting Goods":{"tags":{"name":"Big 5 Sporting Goods","shop":"sports"},"name":"Big 5 Sporting Goods","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Decathlon":{"tags":{"name":"Decathlon","shop":"sports"},"name":"Decathlon","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Dick's Sporting Goods":{"tags":{"name":"Dick's Sporting Goods","shop":"sports"},"name":"Dick's Sporting Goods","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Hervis":{"tags":{"name":"Hervis","shop":"sports"},"name":"Hervis","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Intersport":{"tags":{"name":"Intersport","shop":"sports"},"name":"Intersport","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/JD Sports":{"tags":{"name":"JD Sports","shop":"sports"},"name":"JD Sports","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Sport 2000":{"tags":{"name":"Sport 2000","shop":"sports"},"name":"Sport 2000","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Sports Authority":{"tags":{"name":"Sports Authority","shop":"sports"},"name":"Sports Authority","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Sports Direct":{"tags":{"name":"Sports Direct","shop":"sports"},"name":"Sports Direct","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Спортмастер":{"tags":{"name":"Спортмастер","shop":"sports"},"name":"Спортмастер","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Спорттовары":{"tags":{"name":"Спорттовары","shop":"sports"},"name":"Спорттовары","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Bureau Vallée":{"tags":{"name":"Bureau Vallée","shop":"stationery"},"name":"Bureau Vallée","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Libro":{"tags":{"name":"Libro","shop":"stationery"},"name":"Libro","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/McPaper":{"tags":{"name":"McPaper","shop":"stationery"},"name":"McPaper","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Office Depot":{"tags":{"name":"Office Depot","shop":"stationery"},"name":"Office Depot","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Office Max":{"tags":{"name":"Office Max","shop":"stationery"},"name":"Office Max","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Officeworks":{"tags":{"name":"Officeworks","shop":"stationery"},"name":"Officeworks","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Pagro":{"tags":{"name":"Pagro","shop":"stationery"},"name":"Pagro","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Paperchase":{"tags":{"name":"Paperchase","shop":"stationery"},"name":"Paperchase","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Ryman":{"tags":{"name":"Ryman","shop":"stationery"},"name":"Ryman","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Staples":{"tags":{"name":"Staples","shop":"stationery"},"name":"Staples","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Канцтовары":{"tags":{"name":"Канцтовары","shop":"stationery"},"name":"Канцтовары","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/A&O":{"tags":{"name":"A&O","shop":"supermarket"},"name":"A&O","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/A101":{"tags":{"name":"A101","shop":"supermarket"},"name":"A101","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/AD Delhaize":{"tags":{"name":"AD Delhaize","shop":"supermarket"},"name":"AD Delhaize","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/ADEG":{"tags":{"name":"ADEG","shop":"supermarket"},"name":"ADEG","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Ahorramás":{"tags":{"name":"Ahorramás","shop":"supermarket"},"name":"Ahorramás","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Albert":{"tags":{"name":"Albert","shop":"supermarket"},"name":"Albert","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Albert Heijn":{"tags":{"name":"Albert Heijn","shop":"supermarket"},"name":"Albert Heijn","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Albertsons":{"tags":{"name":"Albertsons","shop":"supermarket"},"name":"Albertsons","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Aldi":{"tags":{"name":"Aldi","shop":"supermarket"},"name":"Aldi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Aldi Nord":{"tags":{"name":"Aldi Nord","shop":"supermarket"},"name":"Aldi Nord","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Aldi Süd":{"tags":{"name":"Aldi Süd","shop":"supermarket"},"name":"Aldi Süd","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Alimerka":{"tags":{"name":"Alimerka","shop":"supermarket"},"name":"Alimerka","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Alnatura":{"tags":{"name":"Alnatura","shop":"supermarket"},"name":"Alnatura","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Asda":{"tags":{"name":"Asda","shop":"supermarket"},"name":"Asda","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Atac":{"tags":{"name":"Atac","shop":"supermarket"},"name":"Atac","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Atacadão":{"tags":{"name":"Atacadão","shop":"supermarket"},"name":"Atacadão","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Auchan":{"tags":{"name":"Auchan","shop":"supermarket"},"name":"Auchan","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/BM":{"tags":{"name":"BM","shop":"supermarket"},"name":"BM","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Biedronka":{"tags":{"name":"Biedronka","shop":"supermarket"},"name":"Biedronka","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Big C":{"tags":{"name":"Big C","shop":"supermarket"},"name":"Big C","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Billa":{"tags":{"name":"Billa","shop":"supermarket"},"name":"Billa","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Bim":{"tags":{"name":"Bim","shop":"supermarket"},"name":"Bim","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Biocoop":{"tags":{"name":"Biocoop","shop":"supermarket"},"name":"Biocoop","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Bodega Aurrera":{"tags":{"name":"Bodega Aurrera","shop":"supermarket"},"name":"Bodega Aurrera","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Budgens":{"tags":{"name":"Budgens","shop":"supermarket"},"name":"Budgens","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Bulk Barn":{"tags":{"name":"Bulk Barn","shop":"supermarket"},"name":"Bulk Barn","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Bunnpris":{"tags":{"name":"Bunnpris","shop":"supermarket"},"name":"Bunnpris","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/CONAD":{"tags":{"name":"CONAD","shop":"supermarket"},"name":"CONAD","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/CRAI":{"tags":{"name":"CRAI","shop":"supermarket"},"name":"CRAI","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Caprabo":{"tags":{"name":"Caprabo","shop":"supermarket"},"name":"Caprabo","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Cargills Food City":{"tags":{"name":"Cargills Food City","shop":"supermarket"},"name":"Cargills Food City","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Carrefour":{"tags":{"name":"Carrefour","shop":"supermarket"},"name":"Carrefour","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Carrefour City":{"tags":{"name":"Carrefour City","shop":"supermarket"},"name":"Carrefour City","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Carrefour Contact":{"tags":{"name":"Carrefour Contact","shop":"supermarket"},"name":"Carrefour Contact","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Carrefour Express":{"tags":{"name":"Carrefour Express","shop":"supermarket"},"name":"Carrefour Express","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Centre Commercial E. Leclerc":{"tags":{"name":"Centre Commercial E. Leclerc","shop":"supermarket"},"name":"Centre Commercial E. Leclerc","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Checkers":{"tags":{"name":"Checkers","shop":"supermarket"},"name":"Checkers","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Chedraui":{"tags":{"name":"Chedraui","shop":"supermarket"},"name":"Chedraui","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Co-Op":{"tags":{"name":"Co-Op","shop":"supermarket"},"name":"Co-Op","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Co-op":{"tags":{"name":"Co-op","shop":"supermarket"},"name":"Co-op","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Co-operative":{"tags":{"name":"Co-operative","shop":"supermarket"},"name":"Co-operative","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Coles":{"tags":{"name":"Coles","shop":"supermarket"},"name":"Coles","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Colmado":{"tags":{"name":"Colmado","shop":"supermarket"},"name":"Colmado","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Colruyt":{"tags":{"name":"Colruyt","shop":"supermarket"},"name":"Colruyt","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Combi":{"tags":{"name":"Combi","shop":"supermarket"},"name":"Combi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Comercial Mexicana":{"tags":{"name":"Comercial Mexicana","shop":"supermarket"},"name":"Comercial Mexicana","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Conad":{"tags":{"name":"Conad","shop":"supermarket"},"name":"Conad","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Conad City":{"tags":{"name":"Conad City","shop":"supermarket"},"name":"Conad City","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Condis":{"tags":{"name":"Condis","shop":"supermarket"},"name":"Condis","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Consum":{"tags":{"name":"Consum","shop":"supermarket"},"name":"Consum","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Continente":{"tags":{"name":"Continente","shop":"supermarket"},"name":"Continente","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Coop":{"tags":{"name":"Coop","shop":"supermarket"},"name":"Coop","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Coop Extra":{"tags":{"name":"Coop Extra","shop":"supermarket"},"name":"Coop Extra","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Coop Konsum":{"tags":{"name":"Coop Konsum","shop":"supermarket"},"name":"Coop Konsum","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Costco Gasoline":{"tags":{"name":"Costco Gasoline","shop":"supermarket"},"name":"Costco Gasoline","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Coto":{"tags":{"name":"Coto","shop":"supermarket"},"name":"Coto","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Countdown":{"tags":{"name":"Countdown","shop":"supermarket"},"name":"Countdown","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Coviran":{"tags":{"name":"Coviran","shop":"supermarket"},"name":"Coviran","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Covirán":{"tags":{"name":"Covirán","shop":"supermarket"},"name":"Covirán","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Crai":{"tags":{"name":"Crai","shop":"supermarket"},"name":"Crai","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Cub Foods":{"tags":{"name":"Cub Foods","shop":"supermarket"},"name":"Cub Foods","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dagli'Brugsen":{"tags":{"name":"Dagli'Brugsen","shop":"supermarket"},"name":"Dagli'Brugsen","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Deen":{"tags":{"name":"Deen","shop":"supermarket"},"name":"Deen","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Delhaize":{"tags":{"name":"Delhaize","shop":"supermarket"},"name":"Delhaize","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Delikatesy Centrum":{"tags":{"name":"Delikatesy Centrum","shop":"supermarket"},"name":"Delikatesy Centrum","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Denner":{"tags":{"name":"Denner","shop":"supermarket"},"name":"Denner","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Despar":{"tags":{"name":"Despar","shop":"supermarket"},"name":"Despar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Despensa Familiar":{"tags":{"name":"Despensa Familiar","shop":"supermarket"},"name":"Despensa Familiar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dia":{"tags":{"name":"Dia","shop":"supermarket"},"name":"Dia","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dia %":{"tags":{"name":"Dia %","shop":"supermarket"},"name":"Dia %","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dia Market":{"tags":{"name":"Dia Market","shop":"supermarket"},"name":"Dia Market","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dino":{"tags":{"name":"Dino","shop":"supermarket"},"name":"Dino","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dirk van den Broek":{"tags":{"name":"Dirk van den Broek","shop":"supermarket"},"name":"Dirk van den Broek","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Disco":{"tags":{"name":"Disco","shop":"supermarket"},"name":"Disco","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Diska":{"tags":{"name":"Diska","shop":"supermarket"},"name":"Diska","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dunnes Stores":{"tags":{"name":"Dunnes Stores","shop":"supermarket"},"name":"Dunnes Stores","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/E-Center":{"tags":{"name":"E-Center","shop":"supermarket"},"name":"E-Center","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/E. Leclerc":{"tags":{"name":"E. Leclerc","shop":"supermarket"},"name":"E. Leclerc","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/E. Leclerc Drive":{"tags":{"name":"E. Leclerc Drive","shop":"supermarket"},"name":"E. Leclerc Drive","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/EMTÉ":{"tags":{"name":"EMTÉ","shop":"supermarket"},"name":"EMTÉ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Edeka":{"tags":{"name":"Edeka","shop":"supermarket"},"name":"Edeka","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Ekom":{"tags":{"name":"Ekom","shop":"supermarket"},"name":"Ekom","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Ekono":{"tags":{"name":"Ekono","shop":"supermarket"},"name":"Ekono","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/El Árbol":{"tags":{"name":"El Árbol","shop":"supermarket"},"name":"El Árbol","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Eroski":{"tags":{"name":"Eroski","shop":"supermarket"},"name":"Eroski","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Esselunga":{"tags":{"name":"Esselunga","shop":"supermarket"},"name":"Esselunga","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/EuroSpin":{"tags":{"name":"EuroSpin","shop":"supermarket"},"name":"EuroSpin","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Eurospar":{"tags":{"name":"Eurospar","shop":"supermarket"},"name":"Eurospar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Eurospin":{"tags":{"name":"Eurospin","shop":"supermarket"},"name":"Eurospin","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Extra":{"tags":{"name":"Extra","shop":"supermarket"},"name":"Extra","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Famiglia Cooperativa":{"tags":{"name":"Famiglia Cooperativa","shop":"supermarket"},"name":"Famiglia Cooperativa","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Famila":{"tags":{"name":"Famila","shop":"supermarket"},"name":"Famila","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Fareway":{"tags":{"name":"Fareway","shop":"supermarket"},"name":"Fareway","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Farmfoods":{"tags":{"name":"Farmfoods","shop":"supermarket"},"name":"Farmfoods","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Feneberg":{"tags":{"name":"Feneberg","shop":"supermarket"},"name":"Feneberg","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Food Basics":{"tags":{"name":"Food Basics","shop":"supermarket"},"name":"Food Basics","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Food Lion":{"tags":{"name":"Food Lion","shop":"supermarket"},"name":"Food Lion","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Foodland":{"tags":{"name":"Foodland","shop":"supermarket"},"name":"Foodland","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Foodworks":{"tags":{"name":"Foodworks","shop":"supermarket"},"name":"Foodworks","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Franprix":{"tags":{"name":"Franprix","shop":"supermarket"},"name":"Franprix","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Fred Meyer":{"tags":{"name":"Fred Meyer","shop":"supermarket"},"name":"Fred Meyer","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Froiz":{"tags":{"name":"Froiz","shop":"supermarket"},"name":"Froiz","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Føtex":{"tags":{"name":"Føtex","shop":"supermarket"},"name":"Føtex","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/G20":{"tags":{"name":"G20","shop":"supermarket"},"name":"G20","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Gadis":{"tags":{"name":"Gadis","shop":"supermarket"},"name":"Gadis","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Giant":{"tags":{"name":"Giant","shop":"supermarket"},"name":"Giant","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Giant Eagle":{"tags":{"name":"Giant Eagle","shop":"supermarket"},"name":"Giant Eagle","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Grand Frais":{"tags":{"name":"Grand Frais","shop":"supermarket"},"name":"Grand Frais","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Grocery Outlet":{"tags":{"name":"Grocery Outlet","shop":"supermarket"},"name":"Grocery Outlet","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Géant Casino":{"tags":{"name":"Géant Casino","shop":"supermarket"},"name":"Géant Casino","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/H-E-B":{"tags":{"name":"H-E-B","shop":"supermarket"},"name":"H-E-B","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/HIT":{"tags":{"name":"HIT","shop":"supermarket"},"name":"HIT","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Hannaford":{"tags":{"name":"Hannaford","shop":"supermarket"},"name":"Hannaford","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Harris Teeter":{"tags":{"name":"Harris Teeter","shop":"supermarket"},"name":"Harris Teeter","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Hemköp":{"tags":{"name":"Hemköp","shop":"supermarket"},"name":"Hemköp","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Heron Foods":{"tags":{"name":"Heron Foods","shop":"supermarket"},"name":"Heron Foods","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Hofer":{"tags":{"name":"Hofer","shop":"supermarket"},"name":"Hofer","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Hoogvliet":{"tags":{"name":"Hoogvliet","shop":"supermarket"},"name":"Hoogvliet","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Hy-Vee":{"tags":{"name":"Hy-Vee","shop":"supermarket"},"name":"Hy-Vee","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/ICA":{"tags":{"name":"ICA","shop":"supermarket"},"name":"ICA","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/ICA Kvantum":{"tags":{"name":"ICA Kvantum","shop":"supermarket"},"name":"ICA Kvantum","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/IDEA":{"tags":{"name":"IDEA","shop":"supermarket"},"name":"IDEA","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/IGA":{"tags":{"name":"IGA","shop":"supermarket"},"name":"IGA","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Iceland":{"tags":{"name":"Iceland","shop":"supermarket"},"name":"Iceland","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Intermarché":{"tags":{"name":"Intermarché","shop":"supermarket"},"name":"Intermarché","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Intermarché Contact":{"tags":{"name":"Intermarché Contact","shop":"supermarket"},"name":"Intermarché Contact","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Intermarché Super":{"tags":{"name":"Intermarché Super","shop":"supermarket"},"name":"Intermarché Super","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Interspar":{"tags":{"name":"Interspar","shop":"supermarket"},"name":"Interspar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Irma":{"tags":{"name":"Irma","shop":"supermarket"},"name":"Irma","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Jewel-Osco":{"tags":{"name":"Jewel-Osco","shop":"supermarket"},"name":"Jewel-Osco","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Jumbo":{"tags":{"name":"Jumbo","shop":"supermarket"},"name":"Jumbo","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/K+K":{"tags":{"name":"K+K","shop":"supermarket"},"name":"K+K","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Kaufland":{"tags":{"name":"Kaufland","shop":"supermarket"},"name":"Kaufland","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/King Soopers":{"tags":{"name":"King Soopers","shop":"supermarket"},"name":"King Soopers","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Kiwi":{"tags":{"name":"Kiwi","shop":"supermarket"},"name":"Kiwi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Konsum":{"tags":{"name":"Konsum","shop":"supermarket"},"name":"Konsum","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Konzum":{"tags":{"name":"Konzum","shop":"supermarket"},"name":"Konzum","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Kroger":{"tags":{"name":"Kroger","shop":"supermarket"},"name":"Kroger","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Kvickly":{"tags":{"name":"Kvickly","shop":"supermarket"},"name":"Kvickly","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/La Vie Claire":{"tags":{"name":"La Vie Claire","shop":"supermarket"},"name":"La Vie Claire","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Landi":{"tags":{"name":"Landi","shop":"supermarket"},"name":"Landi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Leader Price":{"tags":{"name":"Leader Price","shop":"supermarket"},"name":"Leader Price","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Leclerc Drive":{"tags":{"name":"Leclerc Drive","shop":"supermarket"},"name":"Leclerc Drive","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Lider":{"tags":{"name":"Lider","shop":"supermarket"},"name":"Lider","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Lidl":{"tags":{"name":"Lidl","shop":"supermarket"},"name":"Lidl","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Lupa":{"tags":{"name":"Lupa","shop":"supermarket"},"name":"Lupa","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/MPREIS":{"tags":{"name":"MPREIS","shop":"supermarket"},"name":"MPREIS","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Makro":{"tags":{"name":"Makro","shop":"supermarket"},"name":"Makro","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Markant":{"tags":{"name":"Markant","shop":"supermarket"},"name":"Markant","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Market Basket":{"tags":{"name":"Market Basket","shop":"supermarket"},"name":"Market Basket","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Marktkauf":{"tags":{"name":"Marktkauf","shop":"supermarket"},"name":"Marktkauf","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Match":{"tags":{"name":"Match","shop":"supermarket"},"name":"Match","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Maxi":{"tags":{"name":"Maxi","shop":"supermarket"},"name":"Maxi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Maxi Dia":{"tags":{"name":"Maxi Dia","shop":"supermarket"},"name":"Maxi Dia","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Maxima":{"tags":{"name":"Maxima","shop":"supermarket"},"name":"Maxima","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Maxima X":{"tags":{"name":"Maxima X","shop":"supermarket"},"name":"Maxima X","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Maxima XX":{"tags":{"name":"Maxima XX","shop":"supermarket"},"name":"Maxima XX","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mega Image":{"tags":{"name":"Mega Image","shop":"supermarket"},"name":"Mega Image","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mego":{"tags":{"name":"Mego","shop":"supermarket"},"name":"Mego","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Meijer":{"tags":{"name":"Meijer","shop":"supermarket"},"name":"Meijer","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Meny":{"tags":{"name":"Meny","shop":"supermarket"},"name":"Meny","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mercado Municipal":{"tags":{"name":"Mercado Municipal","shop":"supermarket"},"name":"Mercado Municipal","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mercado de Abastos":{"tags":{"name":"Mercado de Abastos","shop":"supermarket"},"name":"Mercado de Abastos","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mercadona":{"tags":{"name":"Mercadona","shop":"supermarket"},"name":"Mercadona","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mercator":{"tags":{"name":"Mercator","shop":"supermarket"},"name":"Mercator","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Merkur":{"tags":{"name":"Merkur","shop":"supermarket"},"name":"Merkur","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Metro":{"tags":{"name":"Metro","shop":"supermarket"},"name":"Metro","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Migros":{"tags":{"name":"Migros","shop":"supermarket"},"name":"Migros","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mila":{"tags":{"name":"Mila","shop":"supermarket"},"name":"Mila","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Minipreço":{"tags":{"name":"Minipreço","shop":"supermarket"},"name":"Minipreço","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mix Markt":{"tags":{"name":"Mix Markt","shop":"supermarket"},"name":"Mix Markt","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Monoprix":{"tags":{"name":"Monoprix","shop":"supermarket"},"name":"Monoprix","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/More":{"tags":{"name":"More","shop":"supermarket"},"name":"More","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Morrisons":{"tags":{"name":"Morrisons","shop":"supermarket"},"name":"Morrisons","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/NORMA":{"tags":{"name":"NORMA","shop":"supermarket"},"name":"NORMA","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/NP":{"tags":{"name":"NP","shop":"supermarket"},"name":"NP","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Nah & Frisch":{"tags":{"name":"Nah & Frisch","shop":"supermarket"},"name":"Nah & Frisch","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Nahkauf":{"tags":{"name":"Nahkauf","shop":"supermarket"},"name":"Nahkauf","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Netto":{"tags":{"name":"Netto","shop":"supermarket"},"name":"Netto","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Netto Marken-Discount":{"tags":{"name":"Netto Marken-Discount","shop":"supermarket"},"name":"Netto Marken-Discount","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/New World":{"tags":{"name":"New World","shop":"supermarket"},"name":"New World","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/No Frills":{"tags":{"name":"No Frills","shop":"supermarket"},"name":"No Frills","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Norfa XL":{"tags":{"name":"Norfa XL","shop":"supermarket"},"name":"Norfa XL","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Norma":{"tags":{"name":"Norma","shop":"supermarket"},"name":"Norma","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/PENNY":{"tags":{"name":"PENNY","shop":"supermarket"},"name":"PENNY","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/PLUS":{"tags":{"name":"PLUS","shop":"supermarket"},"name":"PLUS","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/POLOmarket":{"tags":{"name":"POLOmarket","shop":"supermarket"},"name":"POLOmarket","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Palí":{"tags":{"name":"Palí","shop":"supermarket"},"name":"Palí","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Pam":{"tags":{"name":"Pam","shop":"supermarket"},"name":"Pam","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Penny":{"tags":{"name":"Penny","shop":"supermarket"},"name":"Penny","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Penny Markt":{"tags":{"name":"Penny Markt","shop":"supermarket"},"name":"Penny Markt","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Pick n Pay":{"tags":{"name":"Pick n Pay","shop":"supermarket"},"name":"Pick n Pay","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Piggly Wiggly":{"tags":{"name":"Piggly Wiggly","shop":"supermarket"},"name":"Piggly Wiggly","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Pingo Doce":{"tags":{"name":"Pingo Doce","shop":"supermarket"},"name":"Pingo Doce","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Piotr i Paweł":{"tags":{"name":"Piotr i Paweł","shop":"supermarket"},"name":"Piotr i Paweł","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Plaza Vea":{"tags":{"name":"Plaza Vea","shop":"supermarket"},"name":"Plaza Vea","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Plodine":{"tags":{"name":"Plodine","shop":"supermarket"},"name":"Plodine","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Poiesz":{"tags":{"name":"Poiesz","shop":"supermarket"},"name":"Poiesz","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Price Chopper":{"tags":{"name":"Price Chopper","shop":"supermarket"},"name":"Price Chopper","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Prix":{"tags":{"name":"Prix","shop":"supermarket"},"name":"Prix","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Profi":{"tags":{"name":"Profi","shop":"supermarket"},"name":"Profi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Proxy Delhaize":{"tags":{"name":"Proxy Delhaize","shop":"supermarket"},"name":"Proxy Delhaize","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Publix":{"tags":{"name":"Publix","shop":"supermarket"},"name":"Publix","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Punto Simply":{"tags":{"name":"Punto Simply","shop":"supermarket"},"name":"Punto Simply","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Puregold":{"tags":{"name":"Puregold","shop":"supermarket"},"name":"Puregold","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Pão de Açúcar":{"tags":{"name":"Pão de Açúcar","shop":"supermarket"},"name":"Pão de Açúcar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/QFC":{"tags":{"name":"QFC","shop":"supermarket"},"name":"QFC","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/REMA 1000":{"tags":{"name":"REMA 1000","shop":"supermarket"},"name":"REMA 1000","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Ralphs":{"tags":{"name":"Ralphs","shop":"supermarket"},"name":"Ralphs","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Real":{"tags":{"name":"Real","shop":"supermarket"},"name":"Real","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Real Canadian Superstore":{"tags":{"name":"Real Canadian Superstore","shop":"supermarket"},"name":"Real Canadian Superstore","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Reliance Fresh":{"tags":{"name":"Reliance Fresh","shop":"supermarket"},"name":"Reliance Fresh","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Rema 1000":{"tags":{"name":"Rema 1000","shop":"supermarket"},"name":"Rema 1000","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Rewe":{"tags":{"name":"Rewe","shop":"supermarket"},"name":"Rewe","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Rewe City":{"tags":{"name":"Rewe City","shop":"supermarket"},"name":"Rewe City","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Rimi":{"tags":{"name":"Rimi","shop":"supermarket"},"name":"Rimi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/S-Market":{"tags":{"name":"S-Market","shop":"supermarket"},"name":"S-Market","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Safeway":{"tags":{"name":"Safeway","shop":"supermarket"},"name":"Safeway","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sainsbury's":{"tags":{"name":"Sainsbury's","shop":"supermarket"},"name":"Sainsbury's","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sainsbury's Local":{"tags":{"name":"Sainsbury's Local","shop":"supermarket"},"name":"Sainsbury's Local","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sam's Club":{"tags":{"name":"Sam's Club","shop":"supermarket"},"name":"Sam's Club","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Santa Isabel":{"tags":{"name":"Santa Isabel","shop":"supermarket"},"name":"Santa Isabel","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Save-A-Lot":{"tags":{"name":"Save-A-Lot","shop":"supermarket"},"name":"Save-A-Lot","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/ShopRite":{"tags":{"name":"ShopRite","shop":"supermarket"},"name":"ShopRite","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Shoprite":{"tags":{"name":"Shoprite","shop":"supermarket"},"name":"Shoprite","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sigma":{"tags":{"name":"Sigma","shop":"supermarket"},"name":"Sigma","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Simply Market":{"tags":{"name":"Simply Market","shop":"supermarket"},"name":"Simply Market","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sky":{"tags":{"name":"Sky","shop":"supermarket"},"name":"Sky","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Smith's":{"tags":{"name":"Smith's","shop":"supermarket"},"name":"Smith's","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sobeys":{"tags":{"name":"Sobeys","shop":"supermarket"},"name":"Sobeys","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Soriana":{"tags":{"name":"Soriana","shop":"supermarket"},"name":"Soriana","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Spar":{"tags":{"name":"Spar","shop":"supermarket"},"name":"Spar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sprouts Farmers Market":{"tags":{"name":"Sprouts Farmers Market","shop":"supermarket"},"name":"Sprouts Farmers Market","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Stokrotka":{"tags":{"name":"Stokrotka","shop":"supermarket"},"name":"Stokrotka","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Stop & Shop":{"tags":{"name":"Stop & Shop","shop":"supermarket"},"name":"Stop & Shop","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Super C":{"tags":{"name":"Super C","shop":"supermarket"},"name":"Super C","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Super U":{"tags":{"name":"Super U","shop":"supermarket"},"name":"Super U","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/SuperBrugsen":{"tags":{"name":"SuperBrugsen","shop":"supermarket"},"name":"SuperBrugsen","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/SuperValu":{"tags":{"name":"SuperValu","shop":"supermarket"},"name":"SuperValu","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Superama":{"tags":{"name":"Superama","shop":"supermarket"},"name":"Superama","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Supersol":{"tags":{"name":"Supersol","shop":"supermarket"},"name":"Supersol","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Superspar":{"tags":{"name":"Superspar","shop":"supermarket"},"name":"Superspar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tegut":{"tags":{"name":"Tegut","shop":"supermarket"},"name":"Tegut","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tengelmann":{"tags":{"name":"Tengelmann","shop":"supermarket"},"name":"Tengelmann","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tesco":{"tags":{"name":"Tesco","shop":"supermarket"},"name":"Tesco","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tesco Extra":{"tags":{"name":"Tesco Extra","shop":"supermarket"},"name":"Tesco Extra","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tesco Lotus":{"tags":{"name":"Tesco Lotus","shop":"supermarket"},"name":"Tesco Lotus","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tesco Metro":{"tags":{"name":"Tesco Metro","shop":"supermarket"},"name":"Tesco Metro","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/The Co-operative":{"tags":{"name":"The Co-operative","shop":"supermarket"},"name":"The Co-operative","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/The Co-operative Food":{"tags":{"name":"The Co-operative Food","shop":"supermarket"},"name":"The Co-operative Food","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tommy":{"tags":{"name":"Tommy","shop":"supermarket"},"name":"Tommy","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tottus":{"tags":{"name":"Tottus","shop":"supermarket"},"name":"Tottus","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Trader Joe's":{"tags":{"name":"Trader Joe's","shop":"supermarket"},"name":"Trader Joe's","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Treff 3000":{"tags":{"name":"Treff 3000","shop":"supermarket"},"name":"Treff 3000","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/U Express":{"tags":{"name":"U Express","shop":"supermarket"},"name":"U Express","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Unimarc":{"tags":{"name":"Unimarc","shop":"supermarket"},"name":"Unimarc","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Unimarkt":{"tags":{"name":"Unimarkt","shop":"supermarket"},"name":"Unimarkt","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Utile":{"tags":{"name":"Utile","shop":"supermarket"},"name":"Utile","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Vea":{"tags":{"name":"Vea","shop":"supermarket"},"name":"Vea","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Volg":{"tags":{"name":"Volg","shop":"supermarket"},"name":"Volg","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Waitrose":{"tags":{"name":"Waitrose","shop":"supermarket"},"name":"Waitrose","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Walmart":{"tags":{"name":"Walmart","shop":"supermarket"},"name":"Walmart","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Walmart Neighborhood Market":{"tags":{"name":"Walmart Neighborhood Market","shop":"supermarket"},"name":"Walmart Neighborhood Market","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Walmart Supercenter":{"tags":{"name":"Walmart Supercenter","shop":"supermarket"},"name":"Walmart Supercenter","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Wasgau":{"tags":{"name":"Wasgau","shop":"supermarket"},"name":"Wasgau","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Wegmans":{"tags":{"name":"Wegmans","shop":"supermarket"},"name":"Wegmans","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Wellcome":{"tags":{"name":"Wellcome","shop":"supermarket"},"name":"Wellcome","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Whole Foods Market":{"tags":{"name":"Whole Foods Market","shop":"supermarket"},"name":"Whole Foods Market","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Willys":{"tags":{"name":"Willys","shop":"supermarket"},"name":"Willys","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/WinCo Foods":{"tags":{"name":"WinCo Foods","shop":"supermarket"},"name":"WinCo Foods","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Winn Dixie":{"tags":{"name":"Winn Dixie","shop":"supermarket"},"name":"Winn Dixie","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Woolworths":{"tags":{"name":"Woolworths","shop":"supermarket"},"name":"Woolworths","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/denn's Biomarkt":{"tags":{"name":"denn's Biomarkt","shop":"supermarket"},"name":"denn's Biomarkt","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/fakta":{"tags":{"name":"fakta","shop":"supermarket"},"name":"fakta","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/real":{"tags":{"name":"real","shop":"supermarket"},"name":"real","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/tegut":{"tags":{"name":"tegut","shop":"supermarket"},"name":"tegut","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Şok":{"tags":{"name":"Şok","shop":"supermarket"},"name":"Şok","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/ΑΒ Βασιλόπουλος":{"tags":{"name":"ΑΒ Βασιλόπουλος","shop":"supermarket"},"name":"ΑΒ Βασιλόπουλος","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Γαλαξίας":{"tags":{"name":"Γαλαξίας","shop":"supermarket"},"name":"Γαλαξίας","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Μασούτης":{"tags":{"name":"Μασούτης","shop":"supermarket"},"name":"Μασούτης","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Σκλαβενίτης":{"tags":{"name":"Σκλαβενίτης","shop":"supermarket"},"name":"Σκλαβενίτης","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/АТБ":{"tags":{"name":"АТБ","shop":"supermarket"},"name":"АТБ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Абсолют":{"tags":{"name":"Абсолют","shop":"supermarket"},"name":"Абсолют","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Азбука Вкуса":{"tags":{"name":"Азбука Вкуса","shop":"supermarket"},"name":"Азбука Вкуса","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Атак":{"tags":{"name":"Атак","shop":"supermarket"},"name":"Атак","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Ашан":{"tags":{"name":"Ашан","shop":"supermarket"},"name":"Ашан","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Верный":{"tags":{"name":"Верный","shop":"supermarket"},"name":"Верный","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Вопак":{"tags":{"name":"Вопак","shop":"supermarket"},"name":"Вопак","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Гроздь":{"tags":{"name":"Гроздь","shop":"supermarket"},"name":"Гроздь","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Десяточка":{"tags":{"name":"Десяточка","shop":"supermarket"},"name":"Десяточка","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Дикси":{"tags":{"name":"Дикси","shop":"supermarket"},"name":"Дикси","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Евроопт":{"tags":{"name":"Евроопт","shop":"supermarket"},"name":"Евроопт","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Карусель":{"tags":{"name":"Карусель","shop":"supermarket"},"name":"Карусель","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Квартал":{"tags":{"name":"Квартал","shop":"supermarket"},"name":"Квартал","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Командор":{"tags":{"name":"Командор","shop":"supermarket"},"name":"Командор","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Красный Яр":{"tags":{"name":"Красный Яр","shop":"supermarket"},"name":"Красный Яр","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Лента":{"tags":{"name":"Лента","shop":"supermarket"},"name":"Лента","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Магнит":{"tags":{"name":"Магнит","shop":"supermarket"},"name":"Магнит","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Магнолия":{"tags":{"name":"Магнолия","shop":"supermarket"},"name":"Магнолия","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Монетка":{"tags":{"name":"Монетка","shop":"supermarket"},"name":"Монетка","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Народная 7Я семьЯ":{"tags":{"name":"Народная 7Я семьЯ","shop":"supermarket"},"name":"Народная 7Я семьЯ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Перекресток":{"tags":{"name":"Перекресток","shop":"supermarket"},"name":"Перекресток","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Покупочка":{"tags":{"name":"Покупочка","shop":"supermarket"},"name":"Покупочка","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Полушка":{"tags":{"name":"Полушка","shop":"supermarket"},"name":"Полушка","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Пятёрочка":{"tags":{"name":"Пятёрочка","shop":"supermarket"},"name":"Пятёрочка","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Радеж":{"tags":{"name":"Радеж","shop":"supermarket"},"name":"Радеж","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Рукавичка":{"tags":{"name":"Рукавичка","shop":"supermarket"},"name":"Рукавичка","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Светофор":{"tags":{"name":"Светофор","shop":"supermarket"},"name":"Светофор","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Седьмой континент":{"tags":{"name":"Седьмой континент","shop":"supermarket"},"name":"Седьмой континент","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Семейный":{"tags":{"name":"Семейный","shop":"supermarket"},"name":"Семейный","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Семья":{"tags":{"name":"Семья","shop":"supermarket"},"name":"Семья","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Супермаркет":{"tags":{"name":"Супермаркет","shop":"supermarket"},"name":"Супермаркет","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Сільпо":{"tags":{"name":"Сільпо","shop":"supermarket"},"name":"Сільпо","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Таврія‑В":{"tags":{"name":"Таврія‑В","shop":"supermarket"},"name":"Таврія‑В","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Фора":{"tags":{"name":"Фора","shop":"supermarket"},"name":"Фора","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Фуршет":{"tags":{"name":"Фуршет","shop":"supermarket"},"name":"Фуршет","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Хүнсний дэлгүүр":{"tags":{"name":"Хүнсний дэлгүүр","shop":"supermarket"},"name":"Хүнсний дэлгүүр","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Эдельвейс":{"tags":{"name":"Эдельвейс","shop":"supermarket"},"name":"Эдельвейс","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/хүнсний дэлгүүр":{"tags":{"name":"хүнсний дэлгүүр","shop":"supermarket"},"name":"хүнсний дэлгүүр","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/بقالة":{"tags":{"name":"بقالة","shop":"supermarket"},"name":"بقالة","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/سوپر مارکت":{"tags":{"name":"سوپر مارکت","shop":"supermarket"},"name":"سوپر مارکت","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/سوپرمارکت":{"tags":{"name":"سوپرمارکت","shop":"supermarket"},"name":"سوپرمارکت","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/いなげや":{"tags":{"name":"いなげや","shop":"supermarket"},"name":"いなげや","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/まいばすけっと":{"tags":{"name":"まいばすけっと","shop":"supermarket"},"name":"まいばすけっと","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/イオン":{"tags":{"name":"イオン","shop":"supermarket"},"name":"イオン","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/イトーヨーカドー":{"tags":{"name":"イトーヨーカドー","shop":"supermarket"},"name":"イトーヨーカドー","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/カスミ":{"tags":{"name":"カスミ","shop":"supermarket"},"name":"カスミ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/マックスバリュ":{"tags":{"name":"マックスバリュ","shop":"supermarket"},"name":"マックスバリュ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/マルエツ":{"tags":{"name":"マルエツ","shop":"supermarket"},"name":"マルエツ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/ライフ":{"tags":{"name":"ライフ","shop":"supermarket"},"name":"ライフ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/全聯":{"tags":{"name":"全聯","shop":"supermarket"},"name":"全聯","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/全聯福利中心":{"tags":{"name":"全聯福利中心","shop":"supermarket"},"name":"全聯福利中心","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/惠康 Wellcome":{"tags":{"name":"惠康 Wellcome","shop":"supermarket"},"name":"惠康 Wellcome","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/業務スーパー":{"tags":{"name":"業務スーパー","shop":"supermarket"},"name":"業務スーパー","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/美廉社":{"tags":{"name":"美廉社","shop":"supermarket"},"name":"美廉社","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/西友":{"tags":{"name":"西友","shop":"supermarket"},"name":"西友","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tailor/Atelier de couture":{"tags":{"name":"Atelier de couture","shop":"tailor"},"name":"Atelier de couture","icon":"clothing-store","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/ticket/Boutique Grandes Lignes":{"tags":{"name":"Boutique Grandes Lignes","shop":"ticket"},"name":"Boutique Grandes Lignes","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/ticket/Guichet Transilien":{"tags":{"name":"Guichet Transilien","shop":"ticket"},"name":"Guichet Transilien","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/ticket/Касса":{"tags":{"name":"Касса","shop":"ticket"},"name":"Касса","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/ticket/Проездные билеты":{"tags":{"name":"Проездные билеты","shop":"ticket"},"name":"Проездные билеты","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tobacco/Dohánybolt":{"tags":{"name":"Dohánybolt","shop":"tobacco"},"name":"Dohánybolt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tobacco/Estanco":{"tags":{"name":"Estanco","shop":"tobacco"},"name":"Estanco","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tobacco/Nemzeti Dohánybolt":{"tags":{"name":"Nemzeti Dohánybolt","shop":"tobacco"},"name":"Nemzeti Dohánybolt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tobacco/Tabacos":{"tags":{"name":"Tabacos","shop":"tobacco"},"name":"Tabacos","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tobacco/Табакерка":{"tags":{"name":"Табакерка","shop":"tobacco"},"name":"Табакерка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/Dráčik":{"tags":{"name":"Dráčik","shop":"toys"},"name":"Dráčik","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/Intertoys":{"tags":{"name":"Intertoys","shop":"toys"},"name":"Intertoys","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/King Jouet":{"tags":{"name":"King Jouet","shop":"toys"},"name":"King Jouet","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/La Grande Récré":{"tags":{"name":"La Grande Récré","shop":"toys"},"name":"La Grande Récré","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/Maxi Toys":{"tags":{"name":"Maxi Toys","shop":"toys"},"name":"Maxi Toys","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/Toys R Us":{"tags":{"name":"Toys R Us","shop":"toys"},"name":"Toys R Us","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/Детский мир":{"tags":{"name":"Детский мир","shop":"toys"},"name":"Детский мир","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/Игрушки":{"tags":{"name":"Игрушки","shop":"toys"},"name":"Игрушки","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/D-reizen":{"tags":{"name":"D-reizen","shop":"travel_agency"},"name":"D-reizen","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/DER Reisebüro":{"tags":{"name":"DER Reisebüro","shop":"travel_agency"},"name":"DER Reisebüro","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/First Reisebüro":{"tags":{"name":"First Reisebüro","shop":"travel_agency"},"name":"First Reisebüro","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/Flight Centre":{"tags":{"name":"Flight Centre","shop":"travel_agency"},"name":"Flight Centre","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/Reiseland":{"tags":{"name":"Reiseland","shop":"travel_agency"},"name":"Reiseland","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/TUI":{"tags":{"name":"TUI","shop":"travel_agency"},"name":"TUI","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/The Co-operative Travel":{"tags":{"name":"The Co-operative Travel","shop":"travel_agency"},"name":"The Co-operative Travel","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/Thomas Cook":{"tags":{"name":"Thomas Cook","shop":"travel_agency"},"name":"Thomas Cook","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/Thomson":{"tags":{"name":"Thomson","shop":"travel_agency"},"name":"Thomson","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tyres/Borracharia":{"tags":{"name":"Borracharia","shop":"tyres"},"name":"Borracharia","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tyres/Bridgestone":{"tags":{"name":"Bridgestone","shop":"tyres"},"name":"Bridgestone","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tyres/Discount Tire":{"tags":{"name":"Discount Tire","shop":"tyres"},"name":"Discount Tire","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tyres/Les Schwab Tire Center":{"tags":{"name":"Les Schwab Tire Center","shop":"tyres"},"name":"Les Schwab Tire Center","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tyres/Vianor":{"tags":{"name":"Vianor","shop":"tyres"},"name":"Vianor","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tyres/Вулканизация":{"tags":{"name":"Вулканизация","shop":"tyres"},"name":"Вулканизация","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Action":{"tags":{"name":"Action","shop":"variety_store"},"name":"Action","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Bazar":{"tags":{"name":"Bazar","shop":"variety_store"},"name":"Bazar","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Big Bazar":{"tags":{"name":"Big Bazar","shop":"variety_store"},"name":"Big Bazar","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Dollar Tree":{"tags":{"name":"Dollar Tree","shop":"variety_store"},"name":"Dollar Tree","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Dollarama":{"tags":{"name":"Dollarama","shop":"variety_store"},"name":"Dollarama","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/EuroShop":{"tags":{"name":"EuroShop","shop":"variety_store"},"name":"EuroShop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Family Dollar":{"tags":{"name":"Family Dollar","shop":"variety_store"},"name":"Family Dollar","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Fix Price":{"tags":{"name":"Fix Price","shop":"variety_store"},"name":"Fix Price","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Fix price":{"tags":{"name":"Fix price","shop":"variety_store"},"name":"Fix price","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/FixPrice":{"tags":{"name":"FixPrice","shop":"variety_store"},"name":"FixPrice","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/GiFi":{"tags":{"name":"GiFi","shop":"variety_store"},"name":"GiFi","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Home Bargains":{"tags":{"name":"Home Bargains","shop":"variety_store"},"name":"Home Bargains","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Mäc-Geiz":{"tags":{"name":"Mäc-Geiz","shop":"variety_store"},"name":"Mäc-Geiz","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/NOZ":{"tags":{"name":"NOZ","shop":"variety_store"},"name":"NOZ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Poundland":{"tags":{"name":"Poundland","shop":"variety_store"},"name":"Poundland","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Poundworld":{"tags":{"name":"Poundworld","shop":"variety_store"},"name":"Poundworld","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Tedi":{"tags":{"name":"Tedi","shop":"variety_store"},"name":"Tedi","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/ダイソー":{"tags":{"name":"ダイソー","shop":"variety_store"},"name":"ダイソー","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video/Blockbuster":{"tags":{"name":"Blockbuster","shop":"video"},"name":"Blockbuster","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video/Family Video":{"tags":{"name":"Family Video","shop":"video"},"name":"Family Video","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video/TSUTAYA":{"tags":{"name":"TSUTAYA","shop":"video"},"name":"TSUTAYA","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video/World of Video":{"tags":{"name":"World of Video","shop":"video"},"name":"World of Video","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video/ゲオ":{"tags":{"name":"ゲオ","shop":"video"},"name":"ゲオ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video_games/EB Games":{"tags":{"name":"EB Games","shop":"video_games"},"name":"EB Games","icon":"gaming","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video_games/Game":{"tags":{"name":"Game","shop":"video_games"},"name":"Game","icon":"gaming","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video_games/GameStop":{"tags":{"name":"GameStop","shop":"video_games"},"name":"GameStop","icon":"gaming","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video_games/Micromania":{"tags":{"name":"Micromania","shop":"video_games"},"name":"Micromania","icon":"gaming","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"tourism/alpine_hut/КОШ":{"tags":{"name":"КОШ","tourism":"alpine_hut"},"name":"КОШ","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/apartment/Двухкомнатная квартира на сутки":{"tags":{"name":"Двухкомнатная квартира на сутки","tourism":"apartment"},"name":"Двухкомнатная квартира на сутки","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/attraction/Arch":{"tags":{"name":"Arch","tourism":"attraction"},"name":"Arch","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Kursächsische Postmeilensäule":{"tags":{"name":"Kursächsische Postmeilensäule","tourism":"attraction"},"name":"Kursächsische Postmeilensäule","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Maibaum":{"tags":{"name":"Maibaum","tourism":"attraction"},"name":"Maibaum","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Moab trail":{"tags":{"name":"Moab trail","tourism":"attraction"},"name":"Moab trail","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Moai":{"tags":{"name":"Moai","tourism":"attraction"},"name":"Moai","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/OWŚ":{"tags":{"name":"OWŚ","tourism":"attraction"},"name":"OWŚ","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Sommerrodelbahn":{"tags":{"name":"Sommerrodelbahn","tourism":"attraction"},"name":"Sommerrodelbahn","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/path contiunes":{"tags":{"name":"path contiunes","tourism":"attraction"},"name":"path contiunes","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/white blaze":{"tags":{"name":"white blaze","tourism":"attraction"},"name":"white blaze","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Кладбище еврейское":{"tags":{"name":"Кладбище еврейское","tourism":"attraction"},"name":"Кладбище еврейское","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Колесо обозрения":{"tags":{"name":"Колесо обозрения","tourism":"attraction"},"name":"Колесо обозрения","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Приусадебный парк":{"tags":{"name":"Приусадебный парк","tourism":"attraction"},"name":"Приусадебный парк","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Усадьба":{"tags":{"name":"Усадьба","tourism":"attraction"},"name":"Усадьба","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Хозяйственный двор":{"tags":{"name":"Хозяйственный двор","tourism":"attraction"},"name":"Хозяйственный двор","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Часовня":{"tags":{"name":"Часовня","tourism":"attraction"},"name":"Часовня","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/дольмен":{"tags":{"name":"дольмен","tourism":"attraction"},"name":"дольмен","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/camp_site/Camping Municipal":{"tags":{"name":"Camping Municipal","tourism":"camp_site"},"name":"Camping Municipal","icon":"campsite","geometry":["point","vertex","area"],"fields":["name","operator","address","capacity","fee","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/camp_site/Camping municipal":{"tags":{"name":"Camping municipal","tourism":"camp_site"},"name":"Camping municipal","icon":"campsite","geometry":["point","vertex","area"],"fields":["name","operator","address","capacity","fee","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/guest_house/Home":{"tags":{"name":"Home","tourism":"guest_house"},"name":"Home","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/guest_house/OW Bielanka":{"tags":{"name":"OW Bielanka","tourism":"guest_house"},"name":"OW Bielanka","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hostel/Albergue de Peregrinos":{"tags":{"name":"Albergue de Peregrinos","tourism":"hostel"},"name":"Albergue de Peregrinos","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hostel/Hospedaje":{"tags":{"name":"Hospedaje","tourism":"hostel"},"name":"Hospedaje","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hostel/Hostal":{"tags":{"name":"Hostal","tourism":"hostel"},"name":"Hostal","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/B&B Hôtel":{"tags":{"name":"B&B Hôtel","tourism":"hotel"},"name":"B&B Hôtel","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/B&b Hôtel":{"tags":{"name":"B&b Hôtel","tourism":"hotel"},"name":"B&b Hôtel","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Best Western":{"tags":{"name":"Best Western","tourism":"hotel"},"name":"Best Western","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Campanile":{"tags":{"name":"Campanile","tourism":"hotel"},"name":"Campanile","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Central Hotel":{"tags":{"name":"Central Hotel","tourism":"hotel"},"name":"Central Hotel","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/City Hotel":{"tags":{"name":"City Hotel","tourism":"hotel"},"name":"City Hotel","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Comfort Inn":{"tags":{"name":"Comfort Inn","tourism":"hotel"},"name":"Comfort Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Comfort Inn & Suites":{"tags":{"name":"Comfort Inn & Suites","tourism":"hotel"},"name":"Comfort Inn & Suites","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Comfort Suites":{"tags":{"name":"Comfort Suites","tourism":"hotel"},"name":"Comfort Suites","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Country Inn & Suites":{"tags":{"name":"Country Inn & Suites","tourism":"hotel"},"name":"Country Inn & Suites","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Courtyard by Marriott":{"tags":{"name":"Courtyard by Marriott","tourism":"hotel"},"name":"Courtyard by Marriott","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Crowne Plaza":{"tags":{"name":"Crowne Plaza","tourism":"hotel"},"name":"Crowne Plaza","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Days Inn":{"tags":{"name":"Days Inn","tourism":"hotel"},"name":"Days Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Embassy Suites":{"tags":{"name":"Embassy Suites","tourism":"hotel"},"name":"Embassy Suites","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Extended Stay America":{"tags":{"name":"Extended Stay America","tourism":"hotel"},"name":"Extended Stay America","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Fairfield Inn":{"tags":{"name":"Fairfield Inn","tourism":"hotel"},"name":"Fairfield Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Fairfield Inn & Suites":{"tags":{"name":"Fairfield Inn & Suites","tourism":"hotel"},"name":"Fairfield Inn & Suites","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Formule 1":{"tags":{"name":"Formule 1","tourism":"hotel"},"name":"Formule 1","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Grand Hotel":{"tags":{"name":"Grand Hotel","tourism":"hotel"},"name":"Grand Hotel","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hampton Inn":{"tags":{"name":"Hampton Inn","tourism":"hotel"},"name":"Hampton Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hampton Inn & Suites":{"tags":{"name":"Hampton Inn & Suites","tourism":"hotel"},"name":"Hampton Inn & Suites","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hilton Garden Inn":{"tags":{"name":"Hilton Garden Inn","tourism":"hotel"},"name":"Hilton Garden Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Holiday Inn":{"tags":{"name":"Holiday Inn","tourism":"hotel"},"name":"Holiday Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Holiday Inn Express":{"tags":{"name":"Holiday Inn Express","tourism":"hotel"},"name":"Holiday Inn Express","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Holiday Inn Express & Suites":{"tags":{"name":"Holiday Inn Express & Suites","tourism":"hotel"},"name":"Holiday Inn Express & Suites","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Homewood Suites":{"tags":{"name":"Homewood Suites","tourism":"hotel"},"name":"Homewood Suites","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Central":{"tags":{"name":"Hotel Central","tourism":"hotel"},"name":"Hotel Central","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Europa":{"tags":{"name":"Hotel Europa","tourism":"hotel"},"name":"Hotel Europa","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Ibis":{"tags":{"name":"Hotel Ibis","tourism":"hotel"},"name":"Hotel Ibis","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Krone":{"tags":{"name":"Hotel Krone","tourism":"hotel"},"name":"Hotel Krone","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Panorama":{"tags":{"name":"Hotel Panorama","tourism":"hotel"},"name":"Hotel Panorama","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Plaza":{"tags":{"name":"Hotel Plaza","tourism":"hotel"},"name":"Hotel Plaza","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Post":{"tags":{"name":"Hotel Post","tourism":"hotel"},"name":"Hotel Post","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Royal":{"tags":{"name":"Hotel Royal","tourism":"hotel"},"name":"Hotel Royal","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Victoria":{"tags":{"name":"Hotel Victoria","tourism":"hotel"},"name":"Hotel Victoria","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel zur Post":{"tags":{"name":"Hotel zur Post","tourism":"hotel"},"name":"Hotel zur Post","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hôtel Ibis":{"tags":{"name":"Hôtel Ibis","tourism":"hotel"},"name":"Hôtel Ibis","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hôtel de France":{"tags":{"name":"Hôtel de France","tourism":"hotel"},"name":"Hôtel de France","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Ibis":{"tags":{"name":"Ibis","tourism":"hotel"},"name":"Ibis","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Ibis Budget":{"tags":{"name":"Ibis Budget","tourism":"hotel"},"name":"Ibis Budget","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Ibis Styles":{"tags":{"name":"Ibis Styles","tourism":"hotel"},"name":"Ibis Styles","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Kyriad":{"tags":{"name":"Kyriad","tourism":"hotel"},"name":"Kyriad","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/La Quinta":{"tags":{"name":"La Quinta","tourism":"hotel"},"name":"La Quinta","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Marriott":{"tags":{"name":"Marriott","tourism":"hotel"},"name":"Marriott","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Mercure":{"tags":{"name":"Mercure","tourism":"hotel"},"name":"Mercure","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Novotel":{"tags":{"name":"Novotel","tourism":"hotel"},"name":"Novotel","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Palace Hotel":{"tags":{"name":"Palace Hotel","tourism":"hotel"},"name":"Palace Hotel","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Park Hotel":{"tags":{"name":"Park Hotel","tourism":"hotel"},"name":"Park Hotel","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Parkhotel":{"tags":{"name":"Parkhotel","tourism":"hotel"},"name":"Parkhotel","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Premier Inn":{"tags":{"name":"Premier Inn","tourism":"hotel"},"name":"Premier Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Première Classe":{"tags":{"name":"Première Classe","tourism":"hotel"},"name":"Première Classe","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Quality Inn":{"tags":{"name":"Quality Inn","tourism":"hotel"},"name":"Quality Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Quality Inn & Suites":{"tags":{"name":"Quality Inn & Suites","tourism":"hotel"},"name":"Quality Inn & Suites","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Ramada":{"tags":{"name":"Ramada","tourism":"hotel"},"name":"Ramada","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Residence Inn":{"tags":{"name":"Residence Inn","tourism":"hotel"},"name":"Residence Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Royal Hotel":{"tags":{"name":"Royal Hotel","tourism":"hotel"},"name":"Royal Hotel","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Sheraton":{"tags":{"name":"Sheraton","tourism":"hotel"},"name":"Sheraton","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Sleep Inn":{"tags":{"name":"Sleep Inn","tourism":"hotel"},"name":"Sleep Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Staybridge Suites":{"tags":{"name":"Staybridge Suites","tourism":"hotel"},"name":"Staybridge Suites","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Super 8":{"tags":{"name":"Super 8","tourism":"hotel"},"name":"Super 8","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Travelodge":{"tags":{"name":"Travelodge","tourism":"hotel"},"name":"Travelodge","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Гостиница":{"tags":{"name":"Гостиница","tourism":"hotel"},"name":"Гостиница","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/東横イン":{"tags":{"name":"東横イン","tourism":"hotel"},"name":"東横イン","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/motel/Budget Inn":{"tags":{"name":"Budget Inn","tourism":"motel"},"name":"Budget Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/motel/Econo Lodge":{"tags":{"name":"Econo Lodge","tourism":"motel"},"name":"Econo Lodge","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/motel/Motel 6":{"tags":{"name":"Motel 6","tourism":"motel"},"name":"Motel 6","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/motel/Rodeway Inn":{"tags":{"name":"Rodeway Inn","tourism":"motel"},"name":"Rodeway Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/museum/Heimatmuseum":{"tags":{"name":"Heimatmuseum","tourism":"museum"},"name":"Heimatmuseum","icon":"museum","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours"],"suggestion":true},"tourism/museum/Stadtmuseum":{"tags":{"name":"Stadtmuseum","tourism":"museum"},"name":"Stadtmuseum","icon":"museum","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours"],"suggestion":true},"tourism/museum/Tájház":{"tags":{"name":"Tájház","tourism":"museum"},"name":"Tájház","icon":"museum","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours"],"suggestion":true},"tourism/museum/Краеведческий музей":{"tags":{"name":"Краеведческий музей","tourism":"museum"},"name":"Краеведческий музей","icon":"museum","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours"],"suggestion":true},"tourism/museum/Музей":{"tags":{"name":"Музей","tourism":"museum"},"name":"Музей","icon":"museum","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours"],"suggestion":true}}; - -var defaults = {"area":["category-landuse","category-building","category-water-area","category-natural-area","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","area"],"line":["category-road","category-rail","category-path","category-water-line","category-barrier","category-natural-line","power/line","line"],"point":["category-natural-point","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","amenity/fast_food","amenity/bar","amenity/bank","shop/supermarket","point"],"vertex":["highway/crosswalk","highway/crossing","railway/level_crossing","highway/traffic_signals","highway/turning_circle","highway/turning_loop","traffic_calming","highway/mini_roundabout","highway/motorway_junction","vertex"],"relation":["category-route","category-restriction","public_transport/stop_area","type/boundary","type/waterway","type/multipolygon","type/site","relation"]}; - -var categories = {"category-barrier":{"icon":"roadblock","geometry":"line","name":"Barrier Features","members":["barrier/fence","barrier/wall","barrier/ditch","barrier/gate","barrier/hedge","barrier/kerb","barrier"]},"category-building":{"icon":"building","geometry":"area","name":"Building Features","members":["building","building/house","building/apartments","building/retail","building/commercial","building/industrial","building/residential"]},"category-golf":{"icon":"golf","geometry":"area","name":"Golf Features","members":["golf/fairway","golf/green","golf/lateral_water_hazard_area","golf/rough","golf/bunker","golf/tee","golf/water_hazard_area"]},"category-landuse":{"icon":"landuse","geometry":"area","name":"Land Use Features","members":["landuse/residential","landuse/industrial","landuse/commercial","landuse/retail","landuse/farmland","landuse/farmyard","landuse/forest","landuse/meadow","landuse/aquaculture","landuse/cemetery","landuse/military","landuse/religious"]},"category-natural-area":{"icon":"natural","geometry":"area","name":"Natural Features","members":["natural/water","natural/wood","natural/scrub","natural/wetland","natural/grassland","natural/heath","natural/bare_rock","natural/beach","natural/cave_entrance","natural/glacier"]},"category-natural-line":{"icon":"natural","geometry":"line","name":"Natural Features","members":["natural/coastline","natural/tree_row"]},"category-natural-point":{"icon":"natural","geometry":"point","name":"Natural Features","members":["natural/peak","natural/cliff","natural/beach","natural/cave_entrance"]},"category-path":{"icon":"category-path","geometry":"line","name":"Path Features","members":["footway/crosswalk","footway/sidewalk","highway/steps","highway/path","highway/footway","highway/cycleway","highway/bridleway","highway/pedestrian_line"]},"category-rail":{"icon":"category-rail","geometry":"line","name":"Rail Features","members":["railway/rail","railway/subway","railway/tram","railway/monorail","railway/disused","railway/abandoned"]},"category-restriction":{"icon":"restriction","geometry":"relation","name":"Restriction Features","members":["type/restriction/no_left_turn","type/restriction/no_right_turn","type/restriction/no_straight_on","type/restriction/no_u_turn","type/restriction/only_left_turn","type/restriction/only_right_turn","type/restriction/only_straight_on","type/restriction"]},"category-road":{"icon":"category-roads","geometry":"line","name":"Road Features","members":["highway/residential","highway/motorway","highway/trunk","highway/primary","highway/secondary","highway/tertiary","highway/living_street","highway/unclassified","highway/service","highway/track","highway/motorway_link","highway/trunk_link","highway/primary_link","highway/secondary_link","highway/tertiary_link","highway/road"]},"category-route":{"icon":"route","geometry":"relation","name":"Route Features","members":["type/route/road","type/route/bicycle","type/route/foot","type/route/hiking","type/route/horse","type/route/piste","type/route/bus","type/route/train","type/route/light_rail","type/route/tram","type/route/subway","type/route/ferry","type/route/power","type/route/pipeline","type/route/detour","type/route_master","type/route"]},"category-water-area":{"icon":"water","geometry":"area","name":"Water Features","members":["natural/water/lake","natural/water/pond","natural/water/reservoir","natural/water"]},"category-water-line":{"icon":"category-water","geometry":"line","name":"Water Features","members":["waterway/river","waterway/stream","waterway/canal","waterway/ditch","waterway/drain"]}}; - -var fields = {"access_simple":{"key":"access","type":"combo","label":"Allowed Access","options":["yes","permissive","private","customers","no"]},"access":{"keys":["access","foot","motor_vehicle","bicycle","horse"],"reference":{"key":"access"},"type":"access","label":"Allowed Access","placeholder":"Not Specified","strings":{"types":{"access":"All","foot":"Foot","motor_vehicle":"Motor Vehicles","bicycle":"Bicycles","horse":"Horses"},"options":{"yes":{"title":"Allowed","description":"Access permitted by law; a right of way"},"no":{"title":"Prohibited","description":"Access not permitted to the general public"},"permissive":{"title":"Permissive","description":"Access permitted until such time as the owner revokes the permission"},"private":{"title":"Private","description":"Access permitted only with permission of the owner on an individual basis"},"designated":{"title":"Designated","description":"Access permitted according to signs or specific local laws"},"destination":{"title":"Destination","description":"Access permitted only to reach a destination"},"dismount":{"title":"Dismount","description":"Access permitted but rider must dismount"}}}},"address":{"type":"address","keys":["addr:block_number","addr:city","addr:block_number","addr:conscriptionnumber","addr:county","addr:country","addr:county","addr:district","addr:floor","addr:hamlet","addr:housename","addr:housenumber","addr:neighbourhood","addr:place","addr:postcode","addr:province","addr:quarter","addr:state","addr:street","addr:subdistrict","addr:suburb","addr:unit"],"reference":{"key":"addr"},"icon":"address","universal":true,"label":"Address","strings":{"placeholders":{"block_number":"Block Number","block_number!jp":"Block No.","city":"City","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town","conscriptionnumber":"123","country":"Country","county":"County","county!jp":"District","district":"District","district!vn":"Arrondissement/Town/District","floor":"Floor","hamlet":"Hamlet","housename":"Housename","housenumber":"123","housenumber!jp":"Building No./Lot No.","neighbourhood":"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza","place":"Place","postcode":"Postcode","province":"Province","province!jp":"Prefecture","quarter":"Quarter","quarter!jp":"Ōaza/Machi","state":"State","street":"Street","subdistrict":"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet","suburb":"Suburb","suburb!jp":"Ward","unit":"Unit"}}},"admin_level":{"key":"admin_level","type":"number","label":"Admin Level"},"aerialway":{"key":"aerialway","type":"typeCombo","label":"Type"},"aerialway/access":{"key":"aerialway:access","type":"combo","label":"Access","strings":{"options":{"entry":"Entry","exit":"Exit","both":"Both"}}},"aerialway/bubble":{"key":"aerialway:bubble","type":"check","label":"Bubble"},"aerialway/capacity":{"key":"aerialway:capacity","type":"number","label":"Capacity (per hour)","placeholder":"500, 2500, 5000..."},"aerialway/duration":{"key":"aerialway:duration","type":"number","label":"Duration (minutes)","placeholder":"1, 2, 3..."},"aerialway/heating":{"key":"aerialway:heating","type":"check","label":"Heated"},"aerialway/occupancy":{"key":"aerialway:occupancy","type":"number","label":"Occupancy","placeholder":"2, 4, 8..."},"aerialway/summer/access":{"key":"aerialway:summer:access","type":"combo","label":"Access (summer)","strings":{"options":{"entry":"Entry","exit":"Exit","both":"Both"}}},"aeroway":{"key":"aeroway","type":"typeCombo","label":"Type"},"agrarian":{"key":"agrarian","type":"semiCombo","label":"Products"},"amenity":{"key":"amenity","type":"typeCombo","label":"Type"},"animal_boarding":{"key":"animal_boarding","type":"semiCombo","label":"For Animals"},"animal_breeding":{"key":"animal_breeding","type":"semiCombo","label":"For Animals"},"animal_shelter":{"key":"animal_shelter","type":"semiCombo","label":"For Animals"},"area/highway":{"key":"area:highway","type":"typeCombo","label":"Type"},"artist":{"key":"artist_name","type":"text","label":"Artist"},"artwork_type":{"key":"artwork_type","type":"combo","label":"Type"},"atm":{"key":"atm","type":"check","label":"ATM"},"backrest":{"key":"backrest","type":"check","label":"Backrest"},"barrier":{"key":"barrier","type":"typeCombo","label":"Type"},"bath/open_air":{"key":"bath:open_air","label":"Open Air","type":"check"},"bath/sand_bath":{"key":"bath:sand_bath","label":"Sand Bath","type":"check"},"bath/type":{"key":"bath:type","type":"combo","label":"Specialty","strings":{"options":{"onsen":"Japanese Onsen","foot_bath":"Foot Bath","hot_spring":"Hot Spring"}}},"beauty":{"key":"beauty","type":"combo","label":"Shop Type"},"bench":{"key":"bench","type":"check","label":"Bench"},"bicycle_parking":{"key":"bicycle_parking","type":"combo","label":"Type"},"bin":{"key":"bin","type":"check","label":"Waste Bin"},"blood_components":{"key":"blood:","type":"multiCombo","label":"Blood Components","strings":{"options":{"whole":"whole blood","plasma":"plasma","platelets":"platelets","stemcells":"stem cell samples"}}},"board_type":{"key":"board_type","type":"typeCombo","label":"Type"},"boules":{"key":"boules","type":"typeCombo","label":"Type"},"boundary":{"key":"boundary","type":"combo","label":"Type"},"brand":{"key":"brand","type":"text","label":"Brand"},"brewery":{"key":"brewery","type":"semiCombo","label":"Draft Beers"},"bridge":{"key":"bridge","type":"typeCombo","label":"Type","placeholder":"Default"},"building_area":{"key":"building","type":"combo","default":"yes","geometry":"area","label":"Building"},"building":{"key":"building","type":"combo","label":"Building"},"bunker_type":{"key":"bunker_type","type":"combo","label":"Type"},"cables":{"key":"cables","type":"number","label":"Cables","placeholder":"1, 2, 3..."},"camera/direction":{"key":"camera:direction","type":"number","label":"Direction (Degrees Clockwise)","placeholder":"45, 90, 180, 270"},"camera/mount":{"key":"camera:mount","type":"combo","label":"Camera Mount"},"camera/type":{"key":"camera:type","type":"combo","label":"Camera Type","strings":{"options":{"fixed":"Fixed","panning":"Panning","dome":"Dome"}}},"capacity":{"key":"capacity","type":"number","label":"Capacity","placeholder":"50, 100, 200..."},"castle_type":{"key":"castle_type","type":"combo","label":"Type"},"clothes":{"key":"clothes","type":"semiCombo","label":"Clothes"},"club":{"key":"club","type":"typeCombo","label":"Type"},"collection_times":{"key":"collection_times","type":"text","label":"Collection Times"},"comment":{"key":"comment","type":"textarea","label":"Changeset Comment","placeholder":"Brief description of your contributions (required)"},"communication_multi":{"key":"communication:","type":"multiCombo","label":"Communication Types"},"construction":{"key":"construction","type":"combo","label":"Type"},"contact/webcam":{"key":"contact:webcam","type":"url","icon":"website","label":"Webcam URL","placeholder":"http://example.com/"},"content":{"key":"content","type":"combo","label":"Content"},"country":{"key":"country","type":"combo","label":"Country"},"covered":{"key":"covered","type":"check","label":"Covered"},"craft":{"key":"craft","type":"typeCombo","label":"Type"},"crane/type":{"key":"crane:type","type":"combo","label":"Crane Type","strings":{"options":{"portal_crane":"Portal Crane","floor-mounted_crane":"Floor-mounted Crane","travel_lift":"Travel Lift"}}},"crop":{"key":"crop","type":"semiCombo","label":"Crops"},"crossing":{"key":"crossing","type":"combo","label":"Type"},"cuisine":{"key":"cuisine","type":"semiCombo","label":"Cuisines"},"currency_multi":{"key":"currency:","type":"multiCombo","label":"Currency Types"},"cutting":{"key":"cutting","type":"typeCombo","label":"Type","placeholder":"Default"},"cycle_network":{"key":"cycle_network","type":"networkCombo","label":"Network"},"cycleway":{"keys":["cycleway:left","cycleway:right"],"reference":{"key":"cycleway"},"type":"cycleway","label":"Bike Lanes","placeholder":"none","strings":{"types":{"cycleway:left":"Left side","cycleway:right":"Right side"},"options":{"none":{"title":"None","description":"No bike lane"},"lane":{"title":"Standard bike lane","description":"A bike lane separated from auto traffic by a painted line"},"shared_lane":{"title":"Shared bike lane","description":"A bike lane with no separation from auto traffic"},"track":{"title":"Bike track","description":"A bike lane separated from traffic by a physical barrier"},"share_busway":{"title":"Bike lane shared with bus","description":"A bike lane shared with a bus lane"},"opposite_lane":{"title":"Opposite bike lane","description":"A bike lane that travels in the opposite direction of traffic"},"opposite":{"title":"Contraflow bike lane","description":"A bike lane that travels in both directions on a one-way street"}}}},"dance/style":{"key":"dance:style","type":"semiCombo","label":"Dance Styles"},"date":{"key":"date","type":"check","label":"Date"},"delivery":{"key":"delivery","type":"check","label":"Delivery"},"denomination":{"key":"denomination","type":"combo","label":"Denomination"},"denotation":{"key":"denotation","type":"combo","label":"Denotation"},"description":{"key":"description","type":"textarea","label":"Description","universal":true},"devices":{"key":"devices","type":"number","label":"Devices","placeholder":"1, 2, 3..."},"diaper":{"key":"diaper","type":"combo","label":"Diaper Changing Available","options":["yes","no","room","1","2","3","4","5"]},"direction_cardinal":{"key":"direction","type":"combo","label":"Direction","strings":{"options":{"N":"North","E":"East","S":"South","W":"West","NE":"Northeast","SE":"Southeast","SW":"Southwest","NW":"Northwest","NNE":"North-northeast","ENE":"East-northeast","ESE":"East-southeast","SSE":"South-southeast","SSW":"South-southwest","WSW":"West-southwest","WNW":"West-northwest","NNW":"North-northwest"}}},"direction_clock":{"key":"direction","type":"combo","label":"Direction","strings":{"options":{"clockwise":"Clockwise","anticlockwise":"Counterclockwise"}}},"direction_vertex":{"key":"direction","type":"combo","label":"Direction","strings":{"options":{"forward":"Forward","backward":"Backward","both":"Both / All"}}},"direction":{"key":"direction","type":"number","label":"Direction (Degrees Clockwise)","placeholder":"45, 90, 180, 270"},"dispensing":{"key":"dispensing","type":"check","label":"Dispenses Prescriptions","default":"yes"},"display":{"key":"display","type":"combo","label":"Display","options":["analog","digital","sundial","unorthodox"]},"dock":{"key":"dock","type":"combo","label":"Type"},"drive_through":{"key":"drive_through","type":"check","label":"Drive-Through"},"duration":{"key":"duration","type":"text","label":"Duration","placeholder":"00:00"},"electrified":{"key":"electrified","type":"combo","label":"Electrification","placeholder":"Contact Line, Electrified Rail...","strings":{"options":{"contact_line":"Contact Line","rail":"Electrified Rail","yes":"Yes (unspecified)","no":"No"}}},"elevation":{"key":"ele","type":"number","icon":"elevation","universal":true,"label":"Elevation"},"email":{"key":"email","type":"email","placeholder":"example@example.com","universal":true,"label":"Email"},"embankment":{"key":"embankment","type":"typeCombo","label":"Type","placeholder":"Default"},"emergency":{"key":"emergency","type":"check","label":"Emergency"},"entrance":{"key":"entrance","type":"typeCombo","label":"Type"},"except":{"key":"except","type":"combo","label":"Exceptions"},"fax":{"key":"fax","type":"tel","label":"Fax","universal":true,"placeholder":"+31 42 123 4567"},"fee":{"key":"fee","type":"check","label":"Fee"},"fence_type":{"key":"fence_type","type":"combo","label":"Type"},"fire_hydrant/position":{"key":"fire_hydrant:position","type":"combo","label":"Position","strings":{"options":{"lane":"Lane","parking_lot":"Parking Lot","sidewalk":"Sidewalk","green":"Green"}}},"fire_hydrant/type":{"key":"fire_hydrant:type","type":"combo","label":"Type","strings":{"options":{"pillar":"Pillar/Aboveground","underground":"Underground","wall":"Wall","pond":"Pond"}}},"fitness_station":{"key":"fitness_station","type":"typeCombo","label":"Equipment Type"},"fixme":{"key":"fixme","type":"textarea","label":"Fix Me","universal":true},"ford":{"key":"ford","type":"typeCombo","label":"Type","placeholder":"Default"},"frequency":{"key":"frequency","type":"combo","label":"Operating Frequency"},"fuel_multi":{"key":"fuel:","type":"multiCombo","label":"Fuel Types"},"fuel":{"key":"fuel","type":"combo","label":"Fuel"},"gauge":{"key":"gauge","type":"combo","label":"Gauge"},"gender":{"type":"radio","keys":["male","female","unisex"],"label":"Gender","placeholder":"Unknown","strings":{"options":{"male":"Male","female":"Female","unisex":"Unisex"}}},"generator/method":{"key":"generator:method","type":"combo","label":"Method"},"generator/output/electricity":{"key":"generator:output:electricity","type":"text","label":"Power Output","placeholder":"50 MW, 100 MW, 200 MW..."},"generator/source":{"key":"generator:source","type":"combo","label":"Source"},"generator/type":{"key":"generator:type","type":"combo","label":"Type"},"government":{"key":"government","type":"typeCombo","label":"Type"},"grape_variety":{"key":"grape_variety","type":"semiCombo","label":"Grape Varieties"},"handicap":{"key":"handicap","type":"number","label":"Handicap","placeholder":"1-18"},"handrail":{"key":"handrail","type":"check","label":"Handrail"},"hashtags":{"key":"hashtags","type":"semiCombo","label":"Suggested Hashtags","placeholder":"#example"},"healthcare":{"key":"healthcare","type":"typeCombo","label":"Type"},"healthcare/speciality":{"key":"healthcare:speciality","type":"semiCombo","reference":{"key":"healthcare"},"label":"Specialties"},"height":{"key":"height","type":"number","label":"Height (Meters)"},"highway":{"key":"highway","type":"typeCombo","label":"Type"},"historic":{"key":"historic","type":"typeCombo","label":"Type"},"historic/civilization":{"key":"historic:civilization","type":"combo","label":"Historic Civilization"},"hoops":{"key":"hoops","type":"number","label":"Hoops","placeholder":"1, 2, 4..."},"iata":{"key":"iata","type":"text","label":"IATA"},"icao":{"key":"icao","type":"text","label":"ICAO"},"incline_steps":{"key":"incline","type":"combo","label":"Incline","strings":{"options":{"up":"Up","down":"Down"}}},"incline":{"key":"incline","type":"combo","label":"Incline"},"indoor":{"key":"indoor","type":"check","label":"Indoor"},"information":{"key":"information","type":"typeCombo","label":"Type"},"inscription":{"key":"inscription","type":"textarea","label":"Inscription"},"intermittent":{"key":"intermittent","type":"check","label":"Intermittent"},"internet_access":{"key":"internet_access","type":"combo","label":"Internet Access","strings":{"options":{"yes":"Yes","no":"No","wlan":"Wifi","wired":"Wired","terminal":"Terminal"}}},"internet_access/fee":{"key":"internet_access:fee","type":"check","label":"Internet Access Fee"},"internet_access/ssid":{"key":"internet_access:ssid","type":"text","label":"SSID (Network Name)"},"kerb":{"key":"kerb","type":"combo","label":"Curb"},"label":{"key":"label","type":"textarea","label":"Label"},"lamp_type":{"key":"lamp_type","type":"combo","label":"Type"},"landuse":{"key":"landuse","type":"typeCombo","label":"Type"},"lanes":{"key":"lanes","type":"number","label":"Lanes","placeholder":"1, 2, 3..."},"layer":{"key":"layer","type":"number","label":"Layer","placeholder":"0"},"leaf_cycle_singular":{"key":"leaf_cycle","type":"combo","label":"Leaf Cycle","strings":{"options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous"}}},"leaf_cycle":{"key":"leaf_cycle","type":"combo","label":"Leaf Cycle","strings":{"options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous","mixed":"Mixed"}}},"leaf_type_singular":{"key":"leaf_type","type":"combo","label":"Leaf Type","strings":{"options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","leafless":"Leafless"}}},"leaf_type":{"key":"leaf_type","type":"combo","label":"Leaf Type","strings":{"options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","mixed":"Mixed","leafless":"Leafless"}}},"leisure":{"key":"leisure","type":"typeCombo","label":"Type"},"length":{"key":"length","type":"number","label":"Length (Meters)"},"level":{"key":"level","type":"combo","label":"Level","universal":true},"levels":{"key":"building:levels","type":"number","label":"Levels","placeholder":"2, 4, 6..."},"lit":{"key":"lit","type":"check","label":"Lit"},"location":{"key":"location","type":"combo","label":"Location"},"man_made":{"key":"man_made","type":"typeCombo","label":"Type"},"manhole":{"key":"manhole","type":"typeCombo","label":"Type"},"map_size":{"key":"map_size","type":"typeCombo","label":"Coverage"},"map_type":{"key":"map_type","type":"typeCombo","label":"Type"},"maxheight":{"key":"maxheight","type":"combo","label":"Max Height","placeholder":"4, 4.5, 5, 14'0\", 14'6\", 15'0\"","snake_case":false},"maxspeed":{"key":"maxspeed","type":"maxspeed","label":"Speed Limit","placeholder":"40, 50, 60..."},"maxstay":{"key":"maxstay","type":"combo","label":"Max Stay","options":["15 min","30 min","45 min","1 hr","1.5 hr","2 hr","2.5 hr","3 hr","4 hr","1 day","2 day"],"snake_case":false},"maxweight":{"key":"maxweight","type":"combo","label":"Max Weight","snake_case":false},"memorial":{"key":"memorial","type":"typeCombo","label":"Type"},"monitoring_multi":{"key":"monitoring:","type":"multiCombo","label":"Monitoring"},"mtb/scale":{"key":"mtb:scale","type":"combo","label":"Mountain Biking Difficulty","placeholder":"0, 1, 2, 3...","strings":{"options":{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}}},"mtb/scale/imba":{"key":"mtb:scale:imba","type":"combo","label":"IMBA Trail Difficulty","placeholder":"Easy, Medium, Difficult...","strings":{"options":{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}}},"mtb/scale/uphill":{"key":"mtb:scale:uphill","type":"combo","label":"Mountain Biking Uphill Difficulty","placeholder":"0, 1, 2, 3...","strings":{"options":{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}}},"name":{"key":"name","type":"localized","label":"Name","universal":true,"placeholder":"Common name (if any)"},"natural":{"key":"natural","type":"typeCombo","label":"Natural"},"network_bicycle":{"key":"network","type":"combo","label":"Network Type","placeholder":"Local, Regional, National, International","strings":{"options":{"lcn":"Local","rcn":"Regional","ncn":"National","icn":"International"}}},"network_foot":{"key":"network","type":"combo","label":"Network Type","placeholder":"Local, Regional, National, International","strings":{"options":{"lwn":"Local","rwn":"Regional","nwn":"National","iwn":"International"}}},"network_horse":{"key":"network","type":"combo","label":"Network Type","placeholder":"Local, Regional, National, International","strings":{"options":{"lhn":"Local","rhn":"Regional","nhn":"National","ihn":"International"}}},"network_road":{"key":"network","type":"networkCombo","label":"Network"},"network":{"key":"network","type":"text","label":"Network"},"note":{"key":"note","type":"textarea","universal":true,"icon":"note","label":"Note"},"office":{"key":"office","type":"typeCombo","label":"Type"},"oneway_yes":{"key":"oneway","type":"onewayCheck","label":"One Way","strings":{"options":{"undefined":"Assumed to be Yes","yes":"Yes","no":"No","reversible":"Reversible","alternating":"Alternating"}}},"oneway":{"key":"oneway","type":"onewayCheck","label":"One Way","strings":{"options":{"undefined":"Assumed to be No","yes":"Yes","no":"No","reversible":"Reversible","alternating":"Alternating"}}},"opening_hours":{"key":"opening_hours","type":"combo","label":"Hours","snake_case":false},"operator":{"key":"operator","type":"text","label":"Operator"},"outdoor_seating":{"key":"outdoor_seating","type":"check","label":"Outdoor Seating"},"par":{"key":"par","type":"number","label":"Par","placeholder":"3, 4, 5..."},"park_ride":{"key":"park_ride","type":"check","label":"Park and Ride"},"parking":{"key":"parking","type":"combo","label":"Type","strings":{"options":{"surface":"Surface","multi-storey":"Multilevel","underground":"Underground","sheds":"Sheds","carports":"Carports","garage_boxes":"Garage Boxes","lane":"Roadside Lane"}}},"payment_multi":{"key":"payment:","type":"multiCombo","label":"Payment Types","universal":true},"phases":{"key":"phases","type":"number","label":"Phases","placeholder":"1, 2, 3..."},"phone":{"key":"phone","type":"tel","icon":"telephone","universal":true,"label":"Phone","placeholder":"+31 42 123 4567"},"piste/difficulty":{"key":"piste:difficulty","type":"combo","label":"Difficulty","placeholder":"Easy, Intermediate, Advanced...","strings":{"options":{"novice":"Novice (instructional)","easy":"Easy (green circle)","intermediate":"Intermediate (blue square)","advanced":"Advanced (black diamond)","expert":"Expert (double black diamond)","freeride":"Freeride (off-piste)","extreme":"Extreme (climbing equipment required)"}}},"piste/grooming":{"key":"piste:grooming","type":"combo","label":"Grooming","strings":{"options":{"classic":"Classic","mogul":"Mogul","backcountry":"Backcountry","classic+skating":"Classic and Skating","scooter":"Scooter/Snowmobile","skating":"Skating"}}},"piste/type":{"key":"piste:type","type":"typeCombo","label":"Type","strings":{"options":{"downhill":"Downhill","nordic":"Nordic","skitour":"Skitour","sled":"Sled","hike":"Hike","sleigh":"Sleigh","ice_skate":"Ice Skate","snow_park":"Snow Park","playground":"Playground"}}},"place":{"key":"place","type":"typeCombo","label":"Type"},"plant":{"key":"plant","type":"combo","label":"Plant"},"plant/output/electricity":{"key":"plant:output:electricity","type":"text","label":"Power Output","placeholder":"500 MW, 1000 MW, 2000 MW..."},"playground/baby":{"key":"baby","type":"check","label":"Baby Seat"},"playground/max_age":{"key":"max_age","type":"number","label":"Maximum Age"},"playground/min_age":{"key":"min_age","type":"number","label":"Minimum Age"},"population":{"key":"population","type":"text","label":"Population"},"power_supply":{"key":"power_supply","type":"check","label":"Power Supply"},"power":{"key":"power","type":"typeCombo","label":"Type"},"produce":{"key":"produce","type":"semiCombo","label":"Produce"},"product":{"key":"product","type":"semiCombo","label":"Products"},"railway":{"key":"railway","type":"typeCombo","label":"Type"},"railway/position":{"key":"railway:position","type":"text","placeholder":"Distance to one decimal (123.4)","label":"Milestone Position"},"railway/signal/direction":{"key":"railway:signal:direction","type":"combo","label":"Direction","strings":{"options":{"forward":"Forward","backward":"Backward","both":"Both / All"}}},"rating":{"key":"rating","type":"combo","label":"Power Rating","snake_case":false},"recycling_accepts":{"key":"recycling:","type":"multiCombo","label":"Accepts"},"ref_aeroway_gate":{"key":"ref","type":"text","label":"Gate Number"},"ref_golf_hole":{"key":"ref","type":"text","label":"Hole Number","placeholder":"1-18"},"ref_highway_junction":{"key":"ref","type":"text","label":"Junction Number"},"ref_platform":{"key":"ref","type":"text","label":"Platform Number"},"ref_road_number":{"key":"ref","type":"text","label":"Road Number"},"ref_route":{"key":"ref","type":"text","label":"Route Number"},"ref_runway":{"key":"ref","type":"text","label":"Runway Number","placeholder":"e.g. 01L/19R"},"ref_stop_position":{"key":"ref","type":"text","label":"Stop Number"},"ref_taxiway":{"key":"ref","type":"text","label":"Taxiway Name","placeholder":"e.g. A5"},"ref":{"key":"ref","type":"text","label":"Reference Code"},"ref/isil":{"key":"ref:isil","type":"text","label":"ISIL Code"},"relation":{"key":"type","type":"combo","label":"Type"},"religion":{"key":"religion","type":"combo","label":"Religion"},"restriction":{"key":"restriction","type":"combo","label":"Type"},"restrictions":{"type":"restrictions","geometry":"vertex","icon":"restrictions","reference":{"rtype":"restriction"},"label":"Turn Restrictions"},"rooms":{"key":"rooms","type":"number","label":"Rooms"},"route_master":{"key":"route_master","type":"combo","label":"Type"},"route":{"key":"route","type":"combo","label":"Type"},"sac_scale":{"key":"sac_scale","type":"combo","label":"Hiking Difficulty","placeholder":"Mountain Hiking, Alpine Hiking...","strings":{"options":{"hiking":"T1: Hiking","mountain_hiking":"T2: Mountain Hiking","demanding_mountain_hiking":"T3: Demanding Mountain Hiking","alpine_hiking":"T4: Alpine Hiking","demanding_alpine_hiking":"T5: Demanding Alpine Hiking","difficult_alpine_hiking":"T6: Difficult Alpine Hiking"}}},"sanitary_dump_station":{"key":"sanitary_dump_station","type":"check","label":"Toilet Disposal"},"seasonal":{"key":"seasonal","type":"check","label":"Seasonal"},"second_hand":{"key":"second_hand","type":"combo","label":"Sells Used","placeholder":"Yes, No, Only","strings":{"options":{"yes":"Yes","no":"No","only":"Only"}}},"service_rail":{"key":"service","type":"combo","label":"Service Type","strings":{"options":{"spur":"Spur","yard":"Yard","siding":"Siding","crossover":"Crossover"}}},"service_times":{"key":"service_times","type":"text","label":"Service Times"},"service":{"key":"service","type":"combo","label":"Type","options":["parking_aisle","driveway","alley","emergency_access","drive-through"]},"service/bicycle":{"key":"service:bicycle:","type":"multiCombo","label":"Services"},"service/vehicle":{"key":"service:vehicle:","type":"multiCombo","label":"Services"},"shelter_type":{"key":"shelter_type","type":"combo","label":"Type"},"shelter":{"key":"shelter","type":"check","label":"Shelter"},"shop":{"key":"shop","type":"typeCombo","label":"Type"},"site":{"key":"site","type":"combo","label":"Type"},"smoking":{"key":"smoking","type":"combo","label":"Smoking","placeholder":"No, Separated, Yes...","strings":{"options":{"no":"No smoking anywhere","separated":"In smoking areas, not physically isolated","isolated":"In smoking areas, physically isolated","outside":"Allowed outside","yes":"Allowed everywhere","dedicated":"Dedicated to smokers (e.g. smokers' club)"}}},"smoothness":{"key":"smoothness","type":"combo","label":"Smoothness","placeholder":"Thin Rollers, Wheels, Off-Road...","strings":{"options":{"excellent":"Thin Rollers: rollerblade, skateboard","good":"Thin Wheels: racing bike","intermediate":"Wheels: city bike, wheelchair, scooter","bad":"Robust Wheels: trekking bike, car, rickshaw","very_bad":"High Clearance: light duty off-road vehicle","horrible":"Off-Road: heavy duty off-road vehicle","very_horrible":"Specialized off-road: tractor, ATV","impassable":"Impassable / No wheeled vehicle"}}},"social_facility_for":{"key":"social_facility:for","type":"combo","label":"People Served"},"social_facility":{"key":"social_facility","type":"combo","label":"Type"},"source":{"key":"source","type":"semiCombo","icon":"source","universal":true,"label":"Sources","snake_case":false,"caseSensitive":true,"options":["survey","local knowledge","gps","aerial imagery","streetlevel imagery"]},"sport_ice":{"key":"sport","type":"semiCombo","label":"Sports","options":["skating","hockey","multi","curling","ice_stock"]},"sport_racing_motor":{"key":"sport","type":"semiCombo","label":"Sports","options":["motor","karting","motocross"]},"sport_racing_nonmotor":{"key":"sport","type":"semiCombo","label":"Sports","options":["bmx","cycling","dog_racing","horse_racing","running"]},"sport":{"key":"sport","type":"semiCombo","label":"Sports"},"stars":{"key":"stars","type":"number","label":"Stars"},"start_date":{"key":"start_date","type":"text","universal":true,"label":"Start Date"},"step_count":{"key":"step_count","type":"number","label":"Number of Steps"},"stop":{"key":"stop","type":"combo","label":"Stop Type","strings":{"options":{"all":"All Ways","minor":"Minor Road"}}},"structure_waterway":{"type":"structureRadio","keys":["tunnel"],"label":"Structure","placeholder":"Unknown","strings":{"options":{"tunnel":"Tunnel"}}},"structure":{"type":"structureRadio","keys":["bridge","tunnel","embankment","cutting","ford"],"label":"Structure","placeholder":"Unknown","strings":{"options":{"bridge":"Bridge","tunnel":"Tunnel","embankment":"Embankment","cutting":"Cutting","ford":"Ford"}}},"studio":{"key":"studio","type":"combo","label":"Type"},"substance":{"key":"substance","type":"combo","label":"Substance"},"substation":{"key":"substation","type":"typeCombo","label":"Type"},"supervised":{"key":"supervised","type":"check","label":"Supervised"},"support":{"key":"support","type":"combo","label":"Support"},"surface":{"key":"surface","type":"combo","label":"Surface"},"surveillance":{"key":"surveillance","type":"combo","label":"Surveillance Kind"},"surveillance/type":{"key":"surveillance:type","type":"combo","label":"Surveillance Type","strings":{"options":{"camera":"Camera","guard":"Guard","ALPR":"Automatic License Plate Reader"}}},"surveillance/zone":{"key":"surveillance:zone","type":"combo","label":"Surveillance Zone"},"switch":{"key":"switch","type":"combo","label":"Type","strings":{"options":{"mechanical":"Mechanical","circuit_breaker":"Circuit Breaker","disconnector":"Disconnector","earthing":"Earthing"}}},"tactile_paving":{"key":"tactile_paving","type":"check","label":"Tactile Paving"},"takeaway":{"key":"takeaway","type":"combo","label":"Takeaway","placeholder":"Yes, No, Takeaway Only...","strings":{"options":{"yes":"Yes","no":"No","only":"Takeaway Only"}}},"toilets/disposal":{"key":"toilets:disposal","type":"combo","label":"Disposal","strings":{"options":{"flush":"Flush","pitlatrine":"Pit/Latrine","chemical":"Chemical","bucket":"Bucket"}}},"toll":{"key":"toll","type":"check","label":"Toll"},"tomb":{"key":"tomb","type":"typeCombo","label":"Type"},"tourism_attraction":{"key":"tourism","default":"attraction","type":"typeCombo","universal":true,"label":"Tourism"},"tourism":{"key":"tourism","type":"typeCombo","label":"Type"},"tower/construction":{"key":"tower:construction","type":"combo","label":"Construction","placeholder":"Guyed, Lattice, Concealed, ..."},"tower/type":{"key":"tower:type","type":"combo","label":"Type"},"tracktype":{"key":"tracktype","type":"combo","label":"Track Type","placeholder":"Solid, Mostly Solid, Soft...","strings":{"options":{"grade1":"Solid: paved or heavily compacted hardcore surface","grade2":"Mostly Solid: gravel/rock with some soft material mixed in","grade3":"Even mixture of hard and soft materials","grade4":"Mostly Soft: soil/sand/grass with some hard material mixed in","grade5":"Soft: soil/sand/grass"}}},"trade":{"key":"trade","type":"typeCombo","label":"Type"},"traffic_calming":{"key":"traffic_calming","type":"typeCombo","label":"Type"},"traffic_signals":{"key":"traffic_signals","type":"combo","label":"Type","default":"signal"},"traffic_signals/direction":{"key":"traffic_signals:direction","type":"combo","label":"Direction","strings":{"options":{"forward":"Forward","backward":"Backward","both":"Both / All"}}},"trail_visibility":{"key":"trail_visibility","type":"combo","label":"Trail Visibility","placeholder":"Excellent, Good, Bad...","strings":{"options":{"excellent":"Excellent: unambiguous path or markers everywhere","good":"Good: markers visible, sometimes require searching","intermediate":"Intermediate: few markers, path mostly visible","bad":"Bad: no markers, path sometimes invisible/pathless","horrible":"Horrible: often pathless, some orientation skills required","no":"No: pathless, excellent orientation skills required"}}},"transformer":{"key":"transformer","type":"combo","label":"Type","strings":{"options":{"distribution":"Distribution","generator":"Generator","converter":"Converter","traction":"Traction","auto":"Autotransformer","phase_angle_regulator":"Phase Angle Regulator","auxiliary":"Auxiliary","yes":"Unknown"}}},"trees":{"key":"trees","type":"semiCombo","label":"Trees"},"tunnel":{"key":"tunnel","type":"typeCombo","label":"Type","placeholder":"Default"},"vending":{"key":"vending","type":"combo","label":"Type of Goods"},"visibility":{"key":"visibility","type":"combo","label":"Visibility","strings":{"options":{"house":"Up to 5m (16ft)","street":"5 to 20m (16 to 65ft)","area":"Over 20m (65ft)"}}},"volcano/status":{"key":"volcano:status","type":"combo","label":"Volcano Status","strings":{"options":{"active":"Active","dormant":"Dormant","extinct":"Extinct"}}},"volcano/type":{"key":"volcano:type","type":"combo","label":"Volcano Type","strings":{"options":{"stratovolcano":"Stratovolcano","shield":"Shield","scoria":"Scoria"}}},"voltage":{"key":"voltage","type":"combo","label":"Voltage"},"voltage/primary":{"key":"voltage:primary","type":"combo","label":"Primary Voltage"},"voltage/secondary":{"key":"voltage:secondary","type":"combo","label":"Secondary Voltage"},"voltage/tertiary":{"key":"voltage:tertiary","type":"combo","label":"Tertiary Voltage"},"wall":{"key":"wall","type":"combo","label":"Type"},"water_point":{"key":"water_point","type":"check","label":"Water Point"},"water":{"key":"water","type":"combo","label":"Type"},"waterway":{"key":"waterway","type":"typeCombo","label":"Type"},"website":{"key":"website","type":"url","icon":"website","placeholder":"http://example.com/","universal":true,"label":"Website"},"wetland":{"key":"wetland","type":"combo","label":"Type"},"wheelchair":{"key":"wheelchair","type":"radio","options":["yes","limited","no"],"icon":"wheelchair","universal":true,"label":"Wheelchair Access"},"wholesale":{"key":"wholesale","type":"typeCombo","label":"Wholesale"},"width":{"key":"width","type":"number","label":"Width (Meters)"},"wikipedia":{"key":"wikipedia","keys":["wikipedia","wikidata"],"type":"wikipedia","icon":"wikipedia","universal":true,"label":"Wikipedia"},"windings":{"key":"windings","type":"number","label":"Windings","placeholder":"1, 2, 3..."},"windings/configuration":{"key":"windings:configuration","type":"combo","label":"Windings Configuration","strings":{"options":{"star":"Star / Wye","delta":"Delta","open-delta":"Open Delta","zigzag":"Zig Zag","open":"Open","scott":"Scott","leblanc":"Leblanc"}}}}; - -var all = ["aerialway","airfield","airport","alcohol-shop","america-football","amusement-park","aquarium","art-gallery","attraction","bakery","bank","bar","barrier","baseball","basketball","bbq","beer","bicycle","bicycle-share","blood-bank","buddhism","building","building-alt1","bus","cafe","campsite","car","castle","cemetery","cinema","circle","circle-stroked","city","clothing-store","college","commercial","cricket","cross","dam","danger","defibrillator","dentist","doctor","dog-park","drinking-water","embassy","emergency-phone","entrance","entrance-alt1","farm","fast-food","fence","ferry","fire-station","florist","fuel","gaming","garden","garden-center","gift","golf","grocery","hairdresser","harbor","heart","heliport","home","horse-riding","hospital","ice-cream","industry","information","karaoke","landmark","landuse","laundry","library","lighthouse","lodging","logging","marker","marker-stroked","mobile-phone","monument","mountain","museum","music","natural","park","park-alt1","parking","parking-garage","pharmacy","picnic-site","pitch","place-of-worship","playground","police","post","prison","rail","rail-light","rail-metro","ranger-station","recycling","religious-christian","religious-jewish","religious-muslim","residential-community","restaurant","roadblock","rocket","school","scooter","shelter","shop","skiing","slaughterhouse","snowmobile","soccer","square","square-stroked","stadium","star","star-stroked","suitcase","sushi","swimming","teahouse","telephone","tennis","theatre","toilet","town","town-hall","triangle","triangle-stroked","veterinary","village","volcano","warehouse","waste-basket","water","wetland","wheelchair","zoo"]; -var all$1 = { - all: all -}; - -var all$2 = Object.freeze({ - all: all, - default: all$1 -}); - -var Airport = ["airfield","airport","heliport","rocket"]; -var Dining = ["bakery","bar","beer","cafe","fast-food","ice-cream","restaurant"]; -var Education = ["college","school"]; -var General = ["alcohol-shop","amusement-park","aquarium","art-gallery","attraction","bank","bicycle","bicycle-share","car","castle","cinema","circle","circle-stroked","clothing-store","drinking-water","embassy","fire-station","fuel","grocery","harbor","information","laundry","library","lodging","marker","monument","museum","music","place-of-worship","police","post","prison","religious-christian","religious-jewish","religious-muslim","shop","stadium","star","suitcase","swimming","theatre","toilet","town-hall","triangle","triangle-stroked","veterinary"]; -var Health = ["dentist","doctor","hospital","pharmacy"]; -var Outdoors = ["campsite","cemetery","dog-park","garden","golf","park","picnic-site","playground","zoo"]; -var Transit = ["bus","ferry"]; -var streets = { - Airport: Airport, - Dining: Dining, - Education: Education, - General: General, - Health: Health, - Outdoors: Outdoors, - Transit: Transit, - "Mountain peak": ["mountain","volcano"], - "Rail station": ["entrance","rail","rail-light","rail-metro"] -}; + invertY: function(y) { + return (y - this.y) / this.k; + }, + rescaleX: function(x) { + return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x)); + }, + rescaleY: function(y) { + return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y)); + }, + toString: function() { + return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")"; + } + }; + + var identity$7 = new Transform(1, 0, 0); + + transform.prototype = Transform.prototype; + + function transform(node) { + return node.__zoom || identity$7; + } + + function nopropagation$2() { + event.stopImmediatePropagation(); + } + + function noevent$2() { + event.preventDefault(); + event.stopImmediatePropagation(); + } + + // Ignore right-click, since that should open the context menu. + function defaultFilter$2() { + return !event.button; + } + + function defaultExtent$1() { + var e = this, w, h; + if (e instanceof SVGElement) { + e = e.ownerSVGElement || e; + w = e.width.baseVal.value; + h = e.height.baseVal.value; + } else { + w = e.clientWidth; + h = e.clientHeight; + } + return [[0, 0], [w, h]]; + } + + function defaultTransform() { + return this.__zoom || identity$7; + } + + function defaultWheelDelta() { + return -event.deltaY * (event.deltaMode ? 120 : 1) / 500; + } + + function defaultTouchable$1() { + return "ontouchstart" in this; + } + + function defaultConstrain(transform$$1, extent, translateExtent) { + var dx0 = transform$$1.invertX(extent[0][0]) - translateExtent[0][0], + dx1 = transform$$1.invertX(extent[1][0]) - translateExtent[1][0], + dy0 = transform$$1.invertY(extent[0][1]) - translateExtent[0][1], + dy1 = transform$$1.invertY(extent[1][1]) - translateExtent[1][1]; + return transform$$1.translate( + dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), + dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1) + ); + } + + function d3_zoom() { + var filter = defaultFilter$2, + extent = defaultExtent$1, + constrain = defaultConstrain, + wheelDelta = defaultWheelDelta, + touchable = defaultTouchable$1, + scaleExtent = [0, Infinity], + translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]], + duration = 250, + interpolate$$1 = interpolateZoom, + gestures = [], + listeners = dispatch("start", "zoom", "end"), + touchstarting, + touchending, + touchDelay = 500, + wheelDelay = 150, + clickDistance2 = 0; + + function zoom(selection$$1) { + selection$$1 + .property("__zoom", defaultTransform) + .on("wheel.zoom", wheeled) + .on("mousedown.zoom", mousedowned) + .on("dblclick.zoom", dblclicked) + .filter(touchable) + .on("touchstart.zoom", touchstarted) + .on("touchmove.zoom", touchmoved) + .on("touchend.zoom touchcancel.zoom", touchended) + .style("touch-action", "none") + .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); + } + + zoom.transform = function(collection, transform$$1) { + var selection$$1 = collection.selection ? collection.selection() : collection; + selection$$1.property("__zoom", defaultTransform); + if (collection !== selection$$1) { + schedule(collection, transform$$1); + } else { + selection$$1.interrupt().each(function() { + gesture(this, arguments) + .start() + .zoom(null, typeof transform$$1 === "function" ? transform$$1.apply(this, arguments) : transform$$1) + .end(); + }); + } + }; + + zoom.scaleBy = function(selection$$1, k) { + zoom.scaleTo(selection$$1, function() { + var k0 = this.__zoom.k, + k1 = typeof k === "function" ? k.apply(this, arguments) : k; + return k0 * k1; + }); + }; + + zoom.scaleTo = function(selection$$1, k) { + zoom.transform(selection$$1, function() { + var e = extent.apply(this, arguments), + t0 = this.__zoom, + p0 = centroid(e), + p1 = t0.invert(p0), + k1 = typeof k === "function" ? k.apply(this, arguments) : k; + return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent); + }); + }; + + zoom.translateBy = function(selection$$1, x, y) { + zoom.transform(selection$$1, function() { + return constrain(this.__zoom.translate( + typeof x === "function" ? x.apply(this, arguments) : x, + typeof y === "function" ? y.apply(this, arguments) : y + ), extent.apply(this, arguments), translateExtent); + }); + }; + + zoom.translateTo = function(selection$$1, x, y) { + zoom.transform(selection$$1, function() { + var e = extent.apply(this, arguments), + t = this.__zoom, + p = centroid(e); + return constrain(identity$7.translate(p[0], p[1]).scale(t.k).translate( + typeof x === "function" ? -x.apply(this, arguments) : -x, + typeof y === "function" ? -y.apply(this, arguments) : -y + ), e, translateExtent); + }); + }; + + function scale(transform$$1, k) { + k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k)); + return k === transform$$1.k ? transform$$1 : new Transform(k, transform$$1.x, transform$$1.y); + } + + function translate(transform$$1, p0, p1) { + var x = p0[0] - p1[0] * transform$$1.k, y = p0[1] - p1[1] * transform$$1.k; + return x === transform$$1.x && y === transform$$1.y ? transform$$1 : new Transform(transform$$1.k, x, y); + } + + function centroid(extent) { + return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2]; + } + + function schedule(transition$$1, transform$$1, center) { + transition$$1 + .on("start.zoom", function() { gesture(this, arguments).start(); }) + .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); }) + .tween("zoom", function() { + var that = this, + args = arguments, + g = gesture(that, args), + e = extent.apply(that, args), + p = center || centroid(e), + w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]), + a = that.__zoom, + b = typeof transform$$1 === "function" ? transform$$1.apply(that, args) : transform$$1, + i = interpolate$$1(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k)); + return function(t) { + if (t === 1) t = b; // Avoid rounding error on end. + else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); } + g.zoom(null, t); + }; + }); + } + + function gesture(that, args) { + for (var i = 0, n = gestures.length, g; i < n; ++i) { + if ((g = gestures[i]).that === that) { + return g; + } + } + return new Gesture(that, args); + } + + function Gesture(that, args) { + this.that = that; + this.args = args; + this.index = -1; + this.active = 0; + this.extent = extent.apply(that, args); + } + + Gesture.prototype = { + start: function() { + if (++this.active === 1) { + this.index = gestures.push(this) - 1; + this.emit("start"); + } + return this; + }, + zoom: function(key, transform$$1) { + if (this.mouse && key !== "mouse") this.mouse[1] = transform$$1.invert(this.mouse[0]); + if (this.touch0 && key !== "touch") this.touch0[1] = transform$$1.invert(this.touch0[0]); + if (this.touch1 && key !== "touch") this.touch1[1] = transform$$1.invert(this.touch1[0]); + this.that.__zoom = transform$$1; + this.emit("zoom"); + return this; + }, + end: function() { + if (--this.active === 0) { + gestures.splice(this.index, 1); + this.index = -1; + this.emit("end"); + } + return this; + }, + emit: function(type) { + customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]); + } + }; + + function wheeled() { + if (!filter.apply(this, arguments)) return; + var g = gesture(this, arguments), + t = this.__zoom, + k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))), + p = mouse(this); + + // If the mouse is in the same location as before, reuse it. + // If there were recent wheel events, reset the wheel idle timeout. + if (g.wheel) { + if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) { + g.mouse[1] = t.invert(g.mouse[0] = p); + } + clearTimeout(g.wheel); + } + + // If this wheel event won’t trigger a transform change, ignore it. + else if (t.k === k) return; + + // Otherwise, capture the mouse point and location at the start. + else { + g.mouse = [p, t.invert(p)]; + interrupt(this); + g.start(); + } + + noevent$2(); + g.wheel = setTimeout(wheelidled, wheelDelay); + g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent)); + + function wheelidled() { + g.wheel = null; + g.end(); + } + } + + function mousedowned() { + if (touchending || !filter.apply(this, arguments)) return; + var g = gesture(this, arguments), + v = select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), + p = mouse(this), + x0 = event.clientX, + y0 = event.clientY; + + nodrag(event.view); + nopropagation$2(); + g.mouse = [p, this.__zoom.invert(p)]; + interrupt(this); + g.start(); + + function mousemoved() { + noevent$2(); + if (!g.moved) { + var dx = event.clientX - x0, dy = event.clientY - y0; + g.moved = dx * dx + dy * dy > clickDistance2; + } + g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent, translateExtent)); + } + + function mouseupped() { + v.on("mousemove.zoom mouseup.zoom", null); + yesdrag(event.view, g.moved); + noevent$2(); + g.end(); + } + } + + function dblclicked() { + if (!filter.apply(this, arguments)) return; + var t0 = this.__zoom, + p0 = mouse(this), + p1 = t0.invert(p0), + k1 = t0.k * (event.shiftKey ? 0.5 : 2), + t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent); + + noevent$2(); + if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0); + else select(this).call(zoom.transform, t1); + } + + function touchstarted() { + if (!filter.apply(this, arguments)) return; + var g = gesture(this, arguments), + touches = event.changedTouches, + started, + n = touches.length, i, t, p; + + nopropagation$2(); + for (i = 0; i < n; ++i) { + t = touches[i], p = touch(this, touches, t.identifier); + p = [p, this.__zoom.invert(p), t.identifier]; + if (!g.touch0) g.touch0 = p, started = true; + else if (!g.touch1) g.touch1 = p; + } + + // If this is a dbltap, reroute to the (optional) dblclick.zoom handler. + if (touchstarting) { + touchstarting = clearTimeout(touchstarting); + if (!g.touch1) { + g.end(); + p = select(this).on("dblclick.zoom"); + if (p) p.apply(this, arguments); + return; + } + } + + if (started) { + touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); + interrupt(this); + g.start(); + } + } + + function touchmoved() { + var g = gesture(this, arguments), + touches = event.changedTouches, + n = touches.length, i, t, p, l; + + noevent$2(); + if (touchstarting) touchstarting = clearTimeout(touchstarting); + for (i = 0; i < n; ++i) { + t = touches[i], p = touch(this, touches, t.identifier); + if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p; + else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p; + } + t = g.that.__zoom; + if (g.touch1) { + var p0 = g.touch0[0], l0 = g.touch0[1], + p1 = g.touch1[0], l1 = g.touch1[1], + dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp, + dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl; + t = scale(t, Math.sqrt(dp / dl)); + p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2]; + l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2]; + } + else if (g.touch0) p = g.touch0[0], l = g.touch0[1]; + else return; + g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent)); + } + + function touchended() { + var g = gesture(this, arguments), + touches = event.changedTouches, + n = touches.length, i, t; + + nopropagation$2(); + if (touchending) clearTimeout(touchending); + touchending = setTimeout(function() { touchending = null; }, touchDelay); + for (i = 0; i < n; ++i) { + t = touches[i]; + if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0; + else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1; + } + if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1; + if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]); + else g.end(); + } + + zoom.wheelDelta = function(_) { + return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant$12(+_), zoom) : wheelDelta; + }; + + zoom.filter = function(_) { + return arguments.length ? (filter = typeof _ === "function" ? _ : constant$12(!!_), zoom) : filter; + }; + + zoom.touchable = function(_) { + return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$12(!!_), zoom) : touchable; + }; + + zoom.extent = function(_) { + return arguments.length ? (extent = typeof _ === "function" ? _ : constant$12([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent; + }; + + zoom.scaleExtent = function(_) { + return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]]; + }; + + zoom.translateExtent = function(_) { + return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]]; + }; + + zoom.constrain = function(_) { + return arguments.length ? (constrain = _, zoom) : constrain; + }; + + zoom.duration = function(_) { + return arguments.length ? (duration = +_, zoom) : duration; + }; + + zoom.interpolate = function(_) { + return arguments.length ? (interpolate$$1 = _, zoom) : interpolate$$1; + }; + + zoom.on = function() { + var value = listeners.on.apply(listeners, arguments); + return value === listeners ? zoom : value; + }; + + zoom.clickDistance = function(_) { + return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2); + }; + + return zoom; + } + + + + var index$3 = /*#__PURE__*/Object.freeze({ + version: version, + bisect: bisectRight, + bisectRight: bisectRight, + bisectLeft: bisectLeft, + ascending: ascending, + bisector: bisector, + cross: cross, + descending: d3_descending, + deviation: deviation, + extent: extent, + histogram: histogram, + thresholdFreedmanDiaconis: freedmanDiaconis, + thresholdScott: scott, + thresholdSturges: sturges, + max: max, + mean: mean, + median: d3_median, + merge: merge, + min: min, + pairs: pairs, + permute: permute, + quantile: threshold, + range: range, + scan: scan, + shuffle: shuffle, + sum: sum, + ticks: ticks, + tickIncrement: tickIncrement, + tickStep: tickStep, + transpose: transpose, + variance: variance, + zip: zip, + axisTop: axisTop, + axisRight: axisRight, + axisBottom: axisBottom, + axisLeft: axisLeft, + brush: brush, + brushX: brushX, + brushY: brushY, + brushSelection: brushSelection, + chord: chord, + ribbon: ribbon, + nest: nest, + set: set$2, + map: map$1, + keys: keys, + values: values, + entries: entries, + color: color, + rgb: rgb, + hsl: hsl, + lab: lab, + hcl: hcl, + cubehelix: cubehelix, + dispatch: dispatch, + drag: drag, + dragDisable: nodrag, + dragEnable: yesdrag, + dsvFormat: dsv, + csvParse: csvParse, + csvParseRows: csvParseRows, + csvFormat: csvFormat, + csvFormatRows: csvFormatRows, + tsvParse: tsvParse, + tsvParseRows: tsvParseRows, + tsvFormat: tsvFormat, + tsvFormatRows: tsvFormatRows, + easeLinear: linear$1, + easeQuad: quadInOut, + easeQuadIn: quadIn, + easeQuadOut: quadOut, + easeQuadInOut: quadInOut, + easeCubic: cubicInOut, + easeCubicIn: cubicIn, + easeCubicOut: cubicOut, + easeCubicInOut: cubicInOut, + easePoly: polyInOut, + easePolyIn: polyIn, + easePolyOut: polyOut, + easePolyInOut: polyInOut, + easeSin: sinInOut, + easeSinIn: sinIn, + easeSinOut: sinOut, + easeSinInOut: sinInOut, + easeExp: expInOut, + easeExpIn: expIn, + easeExpOut: expOut, + easeExpInOut: expInOut, + easeCircle: circleInOut, + easeCircleIn: circleIn, + easeCircleOut: circleOut, + easeCircleInOut: circleInOut, + easeBounce: bounceOut, + easeBounceIn: bounceIn, + easeBounceOut: bounceOut, + easeBounceInOut: bounceInOut, + easeBack: backInOut, + easeBackIn: backIn, + easeBackOut: backOut, + easeBackInOut: backInOut, + easeElastic: elasticOut, + easeElasticIn: elasticIn, + easeElasticOut: elasticOut, + easeElasticInOut: elasticInOut, + forceCenter: center$1, + forceCollide: collide, + forceLink: link, + forceManyBody: manyBody, + forceRadial: radial, + forceSimulation: simulation, + forceX: x$2, + forceY: y$2, + formatDefaultLocale: defaultLocale, + get format () { return format; }, + get formatPrefix () { return formatPrefix; }, + formatLocale: formatLocale, + formatSpecifier: formatSpecifier, + precisionFixed: precisionFixed, + precisionPrefix: precisionPrefix, + precisionRound: precisionRound, + geoArea: d3_geoArea, + geoBounds: d3_geoBounds, + geoCentroid: d3_geoCentroid, + geoCircle: circle, + geoClipAntimeridian: clipAntimeridian, + geoClipCircle: clipCircle, + geoClipExtent: extent$1, + geoClipRectangle: clipRectangle, + geoContains: contains, + geoDistance: distance, + geoGraticule: graticule, + geoGraticule10: graticule10, + geoInterpolate: interpolate$2, + geoLength: length$1, + geoPath: d3_geoPath, + geoAlbers: albers, + geoAlbersUsa: albersUsa, + geoAzimuthalEqualArea: azimuthalEqualArea, + geoAzimuthalEqualAreaRaw: azimuthalEqualAreaRaw, + geoAzimuthalEquidistant: azimuthalEquidistant, + geoAzimuthalEquidistantRaw: azimuthalEquidistantRaw, + geoConicConformal: conicConformal, + geoConicConformalRaw: conicConformalRaw, + geoConicEqualArea: conicEqualArea, + geoConicEqualAreaRaw: conicEqualAreaRaw, + geoConicEquidistant: conicEquidistant, + geoConicEquidistantRaw: conicEquidistantRaw, + geoEquirectangular: equirectangular, + geoEquirectangularRaw: equirectangularRaw, + geoGnomonic: gnomonic, + geoGnomonicRaw: gnomonicRaw, + geoIdentity: d3_geoIdentity, + geoProjection: projection, + geoProjectionMutator: projectionMutator, + geoMercator: mercator, + geoMercatorRaw: mercatorRaw, + geoNaturalEarth1: naturalEarth1, + geoNaturalEarth1Raw: naturalEarth1Raw, + geoOrthographic: orthographic, + geoOrthographicRaw: orthographicRaw, + geoStereographic: stereographic, + geoStereographicRaw: stereographicRaw, + geoTransverseMercator: transverseMercator, + geoTransverseMercatorRaw: transverseMercatorRaw, + geoRotation: rotation, + geoStream: geoStream, + geoTransform: d3_geoTransform, + cluster: cluster, + hierarchy: hierarchy, + pack: index$1, + packSiblings: siblings, + packEnclose: enclose, + partition: partition, + stratify: stratify, + tree: tree, + treemap: index$2, + treemapBinary: binary, + treemapDice: treemapDice, + treemapSlice: treemapSlice, + treemapSliceDice: sliceDice, + treemapSquarify: squarify, + treemapResquarify: resquarify, + interpolate: interpolate, + interpolateArray: array$1, + interpolateBasis: basis$1, + interpolateBasisClosed: basisClosed, + interpolateDate: date, + interpolateNumber: interpolateNumber, + interpolateObject: object, + interpolateRound: interpolateRound, + interpolateString: interpolateString, + interpolateTransformCss: interpolateTransformCss, + interpolateTransformSvg: interpolateTransformSvg, + interpolateZoom: interpolateZoom, + interpolateRgb: interpolateRgb, + interpolateRgbBasis: rgbBasis, + interpolateRgbBasisClosed: rgbBasisClosed, + interpolateHsl: hsl$2, + interpolateHslLong: hslLong, + interpolateLab: lab$1, + interpolateHcl: hcl$2, + interpolateHclLong: hclLong, + interpolateCubehelix: cubehelix$2, + interpolateCubehelixLong: cubehelixLong, + quantize: d3_quantize, + path: path, + polygonArea: d3_polygonArea, + polygonCentroid: d3_polygonCentroid, + polygonHull: d3_polygonHull, + polygonContains: contains$1, + polygonLength: length$2, + quadtree: quadtree, + queue: queue, + randomUniform: uniform, + randomNormal: normal, + randomLogNormal: logNormal, + randomBates: bates, + randomIrwinHall: irwinHall, + randomExponential: exponential$1, + request: request, + html: html, + json: d3_json, + text: d3_text, + xml: d3_xml, + csv: csv$1, + tsv: tsv$1, + scaleBand: band, + scalePoint: point$1, + scaleIdentity: identity$5, + scaleLinear: linear$2, + scaleLog: log$1, + scaleOrdinal: ordinal, + scaleImplicit: implicit, + scalePow: pow$1, + scaleSqrt: sqrt$1, + scaleQuantile: quantile$$1, + scaleQuantize: quantize, + scaleThreshold: threshold$1, + scaleTime: time, + scaleUtc: utcTime, + schemeCategory10: category10, + schemeCategory20b: category20b, + schemeCategory20c: category20c, + schemeCategory20: category20, + interpolateCubehelixDefault: cubehelix$3, + interpolateRainbow: rainbow$1, + interpolateWarm: warm, + interpolateCool: cool, + interpolateViridis: viridis, + interpolateMagma: magma, + interpolateInferno: inferno, + interpolatePlasma: plasma, + scaleSequential: sequential, + create: create, + creator: creator, + local: local, + matcher: matcher$1, + mouse: mouse, + namespace: namespace, + namespaces: namespaces, + clientPoint: point, + select: select, + selectAll: d3_selectAll, + selection: selection, + selector: selector, + selectorAll: selectorAll, + style: styleValue, + touch: touch, + touches: d3_touches, + window: defaultView, + get event () { return event; }, + customEvent: customEvent, + arc: arc, + area: area, + line: line, + pie: pie, + areaRadial: areaRadial, + radialArea: areaRadial, + lineRadial: lineRadial$1, + radialLine: lineRadial$1, + pointRadial: pointRadial, + linkHorizontal: linkHorizontal, + linkVertical: linkVertical, + linkRadial: linkRadial, + symbol: symbol, + symbols: symbols, + symbolCircle: circle$2, + symbolCross: cross$2, + symbolDiamond: diamond, + symbolSquare: square, + symbolStar: star, + symbolTriangle: triangle, + symbolWye: wye, + curveBasisClosed: basisClosed$1, + curveBasisOpen: basisOpen, + curveBasis: basis$2, + curveBundle: bundle, + curveCardinalClosed: cardinalClosed, + curveCardinalOpen: cardinalOpen, + curveCardinal: cardinal, + curveCatmullRomClosed: catmullRomClosed, + curveCatmullRomOpen: catmullRomOpen, + curveCatmullRom: catmullRom, + curveLinearClosed: linearClosed, + curveLinear: curveLinear, + curveMonotoneX: monotoneX, + curveMonotoneY: monotoneY, + curveNatural: natural, + curveStep: step, + curveStepAfter: stepAfter, + curveStepBefore: stepBefore, + stack: stack, + stackOffsetExpand: expand, + stackOffsetDiverging: diverging, + stackOffsetNone: none$1, + stackOffsetSilhouette: silhouette, + stackOffsetWiggle: wiggle, + stackOrderAscending: ascending$2, + stackOrderDescending: descending$1, + stackOrderInsideOut: insideOut, + stackOrderNone: none$2, + stackOrderReverse: reverse, + timeInterval: newInterval, + timeMillisecond: millisecond, + timeMilliseconds: milliseconds, + utcMillisecond: millisecond, + utcMilliseconds: milliseconds, + timeSecond: second, + timeSeconds: seconds, + utcSecond: second, + utcSeconds: seconds, + timeMinute: minute, + timeMinutes: minutes, + timeHour: hour, + timeHours: hours, + timeDay: day, + timeDays: days, + timeWeek: sunday, + timeWeeks: sundays, + timeSunday: sunday, + timeSundays: sundays, + timeMonday: monday, + timeMondays: mondays, + timeTuesday: tuesday, + timeTuesdays: tuesdays, + timeWednesday: wednesday, + timeWednesdays: wednesdays, + timeThursday: thursday, + timeThursdays: thursdays, + timeFriday: friday, + timeFridays: fridays, + timeSaturday: saturday, + timeSaturdays: saturdays, + timeMonth: month, + timeMonths: months, + timeYear: year, + timeYears: years, + utcMinute: utcMinute, + utcMinutes: utcMinutes, + utcHour: utcHour, + utcHours: utcHours, + utcDay: utcDay, + utcDays: utcDays, + utcWeek: utcSunday, + utcWeeks: utcSundays, + utcSunday: utcSunday, + utcSundays: utcSundays, + utcMonday: utcMonday, + utcMondays: utcMondays, + utcTuesday: utcTuesday, + utcTuesdays: utcTuesdays, + utcWednesday: utcWednesday, + utcWednesdays: utcWednesdays, + utcThursday: utcThursday, + utcThursdays: utcThursdays, + utcFriday: utcFriday, + utcFridays: utcFridays, + utcSaturday: utcSaturday, + utcSaturdays: utcSaturdays, + utcMonth: utcMonth, + utcMonths: utcMonths, + utcYear: utcYear, + utcYears: utcYears, + timeFormatDefaultLocale: defaultLocale$1, + get timeFormat () { return timeFormat; }, + get timeParse () { return timeParse; }, + get utcFormat () { return utcFormat; }, + get utcParse () { return utcParse; }, + timeFormatLocale: formatLocale$1, + isoFormat: formatIso, + isoParse: parseIso, + now: now, + timer: timer, + timerFlush: timerFlush, + timeout: timeout$1, + interval: interval$1, + transition: transition, + active: active, + interrupt: interrupt, + voronoi: voronoi, + zoom: d3_zoom, + zoomTransform: transform, + zoomIdentity: identity$7 + }); + + function actionAddEntity(way) { + return function(graph) { + return graph.replace(way); + }; + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** Used for built-in method references. */ + var arrayProto = Array.prototype; + + /** Built-in value references. */ + var splice = arrayProto.splice; + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root$2 = freeGlobal || freeSelf || Function('return this')(); + + /** Built-in value references. */ + var Symbol = root$2.Symbol; + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** Used for built-in method references. */ + var objectProto$1 = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString$1 = objectProto$1.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString$1.call(value); + } + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag$1 = Symbol ? Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag$1 && symToStringTag$1 in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** Used to detect overreaching core-js shims. */ + var coreJsData = root$2['__core-js_shared__']; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** Used for built-in method references. */ + var funcProto = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto$1 = Function.prototype, + objectProto$2 = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString$1 = funcProto$1.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$1 = objectProto$2.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString$1.call(hasOwnProperty$1).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /* Built-in method references that are verified to be native. */ + var Map$1 = getNative(root$2, 'Map'); + + /* Built-in method references that are verified to be native. */ + var nativeCreate = getNative(Object, 'create'); + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used for built-in method references. */ + var objectProto$3 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$2 = objectProto$3.hasOwnProperty; + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty$2.call(data, key) ? data[key] : undefined; + } + + /** Used for built-in method references. */ + var objectProto$4 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$3 = objectProto$4.hasOwnProperty; + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty$3.call(data, key); + } + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED$1 : value; + return this; + } + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map$1 || ListCache), + 'string': new Hash + }; + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map$1 || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** Used for built-in method references. */ + var objectProto$5 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]'; + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + /** Used for built-in method references. */ + var objectProto$6 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$5 = objectProto$6.hasOwnProperty; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto$6.propertyIsEnumerable; + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$5.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ + function stubFalse() { + return false; + } + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Built-in value references. */ + var Buffer = moduleExports ? root$2.Buffer : undefined; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER$1 = 9007199254740991; + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; + } + + /** `Object#toString` result references. */ + var argsTag$1 = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag$1 = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** Detect free variable `exports`. */ + var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports$1 && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** Used for built-in method references. */ + var objectProto$7 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$6 = objectProto$7.hasOwnProperty; + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$6.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** Used for built-in method references. */ + var objectProto$8 = Object.prototype; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$8; + + return value === proto; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeKeys = overArg(Object.keys, Object); + + /** Used for built-in method references. */ + var objectProto$9 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$7 = objectProto$9.hasOwnProperty; + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$7.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys$1(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys$1(source), object); + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** Used for built-in method references. */ + var objectProto$10 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$8 = objectProto$10.hasOwnProperty; + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty$8.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn$1(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn$1(source), object); + } + + /** Detect free variable `exports`. */ + var freeExports$2 = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule$2 = freeExports$2 && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2; + + /** Built-in value references. */ + var Buffer$1 = moduleExports$2 ? root$2.Buffer : undefined, + allocUnsafe = Buffer$1 ? Buffer$1.allocUnsafe : undefined; + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ + function stubArray() { + return []; + } + + /** Used for built-in method references. */ + var objectProto$11 = Object.prototype; + + /** Built-in value references. */ + var propertyIsEnumerable$1 = objectProto$11.propertyIsEnumerable; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeGetSymbols = Object.getOwnPropertySymbols; + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable$1.call(object, symbol); + }); + }; + + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** Built-in value references. */ + var getPrototype = overArg(Object.getPrototypeOf, Object); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeGetSymbols$1 = Object.getOwnPropertySymbols; + + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols$1 ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; + }; + + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); + } + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys$1, getSymbols); + } + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn$1, getSymbolsIn); + } + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(root$2, 'DataView'); + + /* Built-in method references that are verified to be native. */ + var Promise = getNative(root$2, 'Promise'); + + /* Built-in method references that are verified to be native. */ + var Set$1 = getNative(root$2, 'Set'); + + /* Built-in method references that are verified to be native. */ + var WeakMap = getNative(root$2, 'WeakMap'); + + /** `Object#toString` result references. */ + var mapTag$1 = '[object Map]', + objectTag$1 = '[object Object]', + promiseTag = '[object Promise]', + setTag$1 = '[object Set]', + weakMapTag$1 = '[object WeakMap]'; + + var dataViewTag$1 = '[object DataView]'; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map$1), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set$1), + weakMapCtorString = toSource(WeakMap); + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag$1) || + (Map$1 && getTag(new Map$1) != mapTag$1) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set$1 && getTag(new Set$1) != setTag$1) || + (WeakMap && getTag(new WeakMap) != weakMapTag$1)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag$1 ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag$1; + case mapCtorString: return mapTag$1; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag$1; + case weakMapCtorString: return weakMapTag$1; + } + } + return result; + }; + } + + var getTag$1 = getTag; + + /** Used for built-in method references. */ + var objectProto$12 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$9 = objectProto$12.hasOwnProperty; + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty$9.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** Built-in value references. */ + var Uint8Array = root$2.Uint8Array; + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** `Object#toString` result references. */ + var boolTag$1 = '[object Boolean]', + dateTag$1 = '[object Date]', + mapTag$2 = '[object Map]', + numberTag$1 = '[object Number]', + regexpTag$1 = '[object RegExp]', + setTag$2 = '[object Set]', + stringTag$1 = '[object String]', + symbolTag = '[object Symbol]'; + + var arrayBufferTag$1 = '[object ArrayBuffer]', + dataViewTag$2 = '[object DataView]', + float32Tag$1 = '[object Float32Array]', + float64Tag$1 = '[object Float64Array]', + int8Tag$1 = '[object Int8Array]', + int16Tag$1 = '[object Int16Array]', + int32Tag$1 = '[object Int32Array]', + uint8Tag$1 = '[object Uint8Array]', + uint8ClampedTag$1 = '[object Uint8ClampedArray]', + uint16Tag$1 = '[object Uint16Array]', + uint32Tag$1 = '[object Uint32Array]'; + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag$1: + return cloneArrayBuffer(object); + + case boolTag$1: + case dateTag$1: + return new Ctor(+object); + + case dataViewTag$2: + return cloneDataView(object, isDeep); + + case float32Tag$1: case float64Tag$1: + case int8Tag$1: case int16Tag$1: case int32Tag$1: + case uint8Tag$1: case uint8ClampedTag$1: case uint16Tag$1: case uint32Tag$1: + return cloneTypedArray(object, isDeep); + + case mapTag$2: + return new Ctor; + + case numberTag$1: + case stringTag$1: + return new Ctor(object); + + case regexpTag$1: + return cloneRegExp(object); + + case setTag$2: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } + } + + /** Built-in value references. */ + var objectCreate = Object.create; + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } + + /** `Object#toString` result references. */ + var mapTag$3 = '[object Map]'; + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag$1(value) == mapTag$3; + } + + /* Node.js helper references. */ + var nodeIsMap = nodeUtil && nodeUtil.isMap; + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + + /** `Object#toString` result references. */ + var setTag$3 = '[object Set]'; + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag$1(value) == setTag$3; + } + + /* Node.js helper references. */ + var nodeIsSet = nodeUtil && nodeUtil.isSet; + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + + /** `Object#toString` result references. */ + var argsTag$2 = '[object Arguments]', + arrayTag$1 = '[object Array]', + boolTag$2 = '[object Boolean]', + dateTag$2 = '[object Date]', + errorTag$1 = '[object Error]', + funcTag$2 = '[object Function]', + genTag$1 = '[object GeneratorFunction]', + mapTag$4 = '[object Map]', + numberTag$2 = '[object Number]', + objectTag$2 = '[object Object]', + regexpTag$2 = '[object RegExp]', + setTag$4 = '[object Set]', + stringTag$2 = '[object String]', + symbolTag$1 = '[object Symbol]', + weakMapTag$2 = '[object WeakMap]'; + + var arrayBufferTag$2 = '[object ArrayBuffer]', + dataViewTag$3 = '[object DataView]', + float32Tag$2 = '[object Float32Array]', + float64Tag$2 = '[object Float64Array]', + int8Tag$2 = '[object Int8Array]', + int16Tag$2 = '[object Int16Array]', + int32Tag$2 = '[object Int32Array]', + uint8Tag$2 = '[object Uint8Array]', + uint8ClampedTag$2 = '[object Uint8ClampedArray]', + uint16Tag$2 = '[object Uint16Array]', + uint32Tag$2 = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag$2] = cloneableTags[arrayTag$1] = + cloneableTags[arrayBufferTag$2] = cloneableTags[dataViewTag$3] = + cloneableTags[boolTag$2] = cloneableTags[dateTag$2] = + cloneableTags[float32Tag$2] = cloneableTags[float64Tag$2] = + cloneableTags[int8Tag$2] = cloneableTags[int16Tag$2] = + cloneableTags[int32Tag$2] = cloneableTags[mapTag$4] = + cloneableTags[numberTag$2] = cloneableTags[objectTag$2] = + cloneableTags[regexpTag$2] = cloneableTags[setTag$4] = + cloneableTags[stringTag$2] = cloneableTags[symbolTag$1] = + cloneableTags[uint8Tag$2] = cloneableTags[uint8ClampedTag$2] = + cloneableTags[uint16Tag$2] = cloneableTags[uint32Tag$2] = true; + cloneableTags[errorTag$1] = cloneableTags[funcTag$2] = + cloneableTags[weakMapTag$2] = false; + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag$1(value), + isFunc = tag == funcTag$2 || tag == genTag$1; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag$2 || tag == argsTag$2 || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + + return result; + } + + if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + + return result; + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys$1); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } + + /** Used to compose bitmasks for cloning. */ + var CLONE_SYMBOLS_FLAG$1 = 4; + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG$1); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys$1); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED$2 = '__lodash_hash_undefined__'; + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED$2); + return this; + } + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG$1 = 1, + COMPARE_UNORDERED_FLAG$1 = 2; + + /** `Object#toString` result references. */ + var boolTag$3 = '[object Boolean]', + dateTag$3 = '[object Date]', + errorTag$2 = '[object Error]', + mapTag$5 = '[object Map]', + numberTag$3 = '[object Number]', + regexpTag$3 = '[object RegExp]', + setTag$5 = '[object Set]', + stringTag$3 = '[object String]', + symbolTag$2 = '[object Symbol]'; + + var arrayBufferTag$3 = '[object ArrayBuffer]', + dataViewTag$4 = '[object DataView]'; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto$1 = Symbol ? Symbol.prototype : undefined, + symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : undefined; + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag$4: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag$3: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag$3: + case dateTag$3: + case numberTag$3: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag$2: + return object.name == other.name && object.message == other.message; + + case regexpTag$3: + case stringTag$3: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag$5: + var convert = mapToArray; + + case setTag$5: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$1; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG$1; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag$2: + if (symbolValueOf$1) { + return symbolValueOf$1.call(object) == symbolValueOf$1.call(other); + } + } + return false; + } + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG$2 = 1; + + /** Used for built-in method references. */ + var objectProto$13 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$10 = objectProto$13.hasOwnProperty; + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG$2, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty$10.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG$3 = 1; + + /** `Object#toString` result references. */ + var argsTag$3 = '[object Arguments]', + arrayTag$2 = '[object Array]', + objectTag$3 = '[object Object]'; + + /** Used for built-in method references. */ + var objectProto$14 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$11 = objectProto$14.hasOwnProperty; + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag$2 : getTag$1(object), + othTag = othIsArr ? arrayTag$2 : getTag$1(other); + + objTag = objTag == argsTag$3 ? objectTag$3 : objTag; + othTag = othTag == argsTag$3 ? objectTag$3 : othTag; + + var objIsObj = objTag == objectTag$3, + othIsObj = othTag == objectTag$3, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG$3)) { + var objIsWrapped = objIsObj && hasOwnProperty$11.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty$11.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG$4 = 1, + COMPARE_UNORDERED_FLAG$2 = 2; + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$4 | COMPARE_UNORDERED_FLAG$2, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys$1(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** `Object#toString` result references. */ + var symbolTag$3 = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag$3); + } + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** Used to match property names within property paths. */ + var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto$2 = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto$2 ? symbolProto$2.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + /** Used as references for various `Number` constants. */ + var INFINITY$1 = 1 / 0; + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get$2(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG$5 = 1, + COMPARE_UNORDERED_FLAG$3 = 2; + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get$2(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$5 | COMPARE_UNORDERED_FLAG$3); + }; + } + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity$8(value) { + return value; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + /** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ + function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity$8; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, baseIteratee(iteratee, 2), accumulator); + }; + } + + /** Used for built-in method references. */ + var objectProto$15 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$12 = objectProto$15.hasOwnProperty; + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty$12.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } + }); + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + /** `Object#toString` result references. */ + var objectTag$4 = '[object Object]'; + + /** Used for built-in method references. */ + var funcProto$2 = Function.prototype, + objectProto$16 = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString$2 = funcProto$2.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$13 = objectProto$16.hasOwnProperty; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString$2.call(Object); + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag$4) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty$13.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString$2.call(Ctor) == objectCtorString; + } + + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; + } + + /** Built-in value references. */ + var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ + function constant$13(value) { + return function() { + return value; + }; + } + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity$8 : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant$13(string), + 'writable': true + }); + }; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeNow = Date.now; + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG$1 = 1, + CLONE_FLAT_FLAG$1 = 2, + CLONE_SYMBOLS_FLAG$2 = 4; + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = flatRest(function(object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function(path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG$1 | CLONE_FLAT_FLAG$1 | CLONE_SYMBOLS_FLAG$2, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; + }); + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity$8), func + ''); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn$1(source), object); + }); + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, baseIteratee(predicate, 3)); + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = baseIteratee(predicate, 3); + collection = keys$1(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** Used as references for various `Number` constants. */ + var NAN = 0 / 0; + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** Used as references for various `Number` constants. */ + var INFINITY$2 = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY$2 || value === -INFINITY$2) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax$1 = Math.max; + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax$1(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find$1 = createFind(findIndex); + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map$3(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, baseIteratee(iteratee, 3)); + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values$1(object) { + return object == null ? [] : baseValues(object, keys$1(object)); + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } + + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; + } + + /** `Object#toString` result references. */ + var mapTag$6 = '[object Map]', + setTag$6 = '[object Set]'; + + /** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ + function createToPairs(keysFunc) { + return function(object) { + var tag = getTag$1(object); + if (tag == mapTag$6) { + return mapToArray(object); + } + if (tag == setTag$6) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; + } + + /** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + var toPairs = createToPairs(keys$1); + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop$3() { + // No operation performed. + } + + /** Used as references for various `Number` constants. */ + var INFINITY$3 = 1 / 0; + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set$1 && (1 / setToArray(new Set$1([,-0]))[1]) == INFINITY$3) ? noop$3 : function(values) { + return new Set$1(values); + }; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE$1 = 200; + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE$1) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE$2 = 200; + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE$2) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + function osmIsInterestingTag(key) { + return key !== 'attribution' && + key !== 'created_by' && + key !== 'source' && + key !== 'odbl' && + key.indexOf('tiger:') !== 0; + + } + + + var osmOneWayTags = { + 'aerialway': { + 'chair_lift': true, + 'mixed_lift': true, + 't-bar': true, + 'j-bar': true, + 'platter': true, + 'rope_tow': true, + 'magic_carpet': true, + 'yes': true + }, + 'highway': { + 'motorway': true + }, + 'junction': { + 'circular': true, + 'roundabout': true + }, + 'man_made': { + 'piste:halfpipe': true + }, + 'piste:type': { + 'downhill': true, + 'sled': true, + 'yes': true + }, + 'waterway': { + 'canal': true, + 'ditch': true, + 'drain': true, + 'river': true, + 'stream': true + } + }; + + + var osmPavedTags = { + 'surface': { + 'paved': true, + 'asphalt': true, + 'concrete': true, + 'concrete:lanes': true, + 'concrete:plates': true + }, + 'tracktype': { + 'grade1': true + } + }; + + var wikipedia = [ + [ + "Abkhazian", + "Аҧсшәа", + "ab" + ], + [ + "Achinese", + "Acèh", + "ace" + ], + [ + "Adyghe", + "адыгабзэ", + "ady" + ], + [ + "Afrikaans", + "Afrikaans", + "af" + ], + [ + "Akan", + "Akan", + "ak" + ], + [ + "Alemannisch", + "Alemannisch", + "als" + ], + [ + "Amharic", + "አማርኛ", + "am" + ], + [ + "Aragonese", + "aragonés", + "an" + ], + [ + "Old English", + "Ænglisc", + "ang" + ], + [ + "Arabic", + "العربية", + "ar" + ], + [ + "Aramaic", + "ܐܪܡܝܐ", + "arc" + ], + [ + "Egyptian Arabic", + "مصرى", + "arz" + ], + [ + "Assamese", + "অসমীয়া", + "as" + ], + [ + "Asturian", + "asturianu", + "ast" + ], + [ + "Avaric", + "авар", + "av" + ], + [ + "Aymara", + "Aymar aru", + "ay" + ], + [ + "Azerbaijani", + "azərbaycanca", + "az" + ], + [ + "تۆرکجه", + "تۆرکجه", + "azb" + ], + [ + "Bashkir", + "башҡортса", + "ba" + ], + [ + "Bavarian", + "Boarisch", + "bar" + ], + [ + "Samogitian", + "žemaitėška", + "bat-smg" + ], + [ + "Bikol Central", + "Bikol Central", + "bcl" + ], + [ + "Belarusian", + "беларуская", + "be" + ], + [ + "беларуская (тарашкевіца)‎", + "беларуская (тарашкевіца)‎", + "be-x-old" + ], + [ + "Bulgarian", + "български", + "bg" + ], + [ + "भोजपुरी", + "भोजपुरी", + "bh" + ], + [ + "Bislama", + "Bislama", + "bi" + ], + [ + "Banjar", + "Bahasa Banjar", + "bjn" + ], + [ + "Bambara", + "bamanankan", + "bm" + ], + [ + "Bangla", + "বাংলা", + "bn" + ], + [ + "Tibetan", + "བོད་ཡིག", + "bo" + ], + [ + "Bishnupriya", + "বিষ্ণুপ্রিয়া মণিপুরী", + "bpy" + ], + [ + "Breton", + "brezhoneg", + "br" + ], + [ + "Bosnian", + "bosanski", + "bs" + ], + [ + "Buginese", + "ᨅᨔ ᨕᨘᨁᨗ", + "bug" + ], + [ + "буряад", + "буряад", + "bxr" + ], + [ + "Catalan", + "català", + "ca" + ], + [ + "Chavacano de Zamboanga", + "Chavacano de Zamboanga", + "cbk-zam" + ], + [ + "Min Dong Chinese", + "Mìng-dĕ̤ng-ngṳ̄", + "cdo" + ], + [ + "Chechen", + "нохчийн", + "ce" + ], + [ + "Cebuano", + "Cebuano", + "ceb" + ], + [ + "Chamorro", + "Chamoru", + "ch" + ], + [ + "Cherokee", + "ᏣᎳᎩ", + "chr" + ], + [ + "Cheyenne", + "Tsetsêhestâhese", + "chy" + ], + [ + "Central Kurdish", + "کوردیی ناوەندی", + "ckb" + ], + [ + "Corsican", + "corsu", + "co" + ], + [ + "Cree", + "Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ", + "cr" + ], + [ + "Crimean Turkish", + "qırımtatarca", + "crh" + ], + [ + "Czech", + "čeština", + "cs" + ], + [ + "Kashubian", + "kaszëbsczi", + "csb" + ], + [ + "Church Slavic", + "словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ", + "cu" + ], + [ + "Chuvash", + "Чӑвашла", + "cv" + ], + [ + "Welsh", + "Cymraeg", + "cy" + ], + [ + "Danish", + "dansk", + "da" + ], + [ + "German", + "Deutsch", + "de" + ], + [ + "Zazaki", + "Zazaki", + "diq" + ], + [ + "Lower Sorbian", + "dolnoserbski", + "dsb" + ], + [ + "Divehi", + "ދިވެހިބަސް", + "dv" + ], + [ + "Dzongkha", + "ཇོང་ཁ", + "dz" + ], + [ + "Ewe", + "eʋegbe", + "ee" + ], + [ + "Greek", + "Ελληνικά", + "el" + ], + [ + "Emiliano-Romagnolo", + "emiliàn e rumagnòl", + "eml" + ], + [ + "English", + "English", + "en" + ], + [ + "Esperanto", + "Esperanto", + "eo" + ], + [ + "Spanish", + "español", + "es" + ], + [ + "Estonian", + "eesti", + "et" + ], + [ + "Basque", + "euskara", + "eu" + ], + [ + "Extremaduran", + "estremeñu", + "ext" + ], + [ + "Persian", + "فارسی", + "fa" + ], + [ + "Fulah", + "Fulfulde", + "ff" + ], + [ + "Finnish", + "suomi", + "fi" + ], + [ + "Võro", + "Võro", + "fiu-vro" + ], + [ + "Fijian", + "Na Vosa Vakaviti", + "fj" + ], + [ + "Faroese", + "føroyskt", + "fo" + ], + [ + "French", + "français", + "fr" + ], + [ + "Arpitan", + "arpetan", + "frp" + ], + [ + "Northern Frisian", + "Nordfriisk", + "frr" + ], + [ + "Friulian", + "furlan", + "fur" + ], + [ + "Western Frisian", + "Frysk", + "fy" + ], + [ + "Irish", + "Gaeilge", + "ga" + ], + [ + "Gagauz", + "Gagauz", + "gag" + ], + [ + "Gan Chinese", + "贛語", + "gan" + ], + [ + "Scottish Gaelic", + "Gàidhlig", + "gd" + ], + [ + "Galician", + "galego", + "gl" + ], + [ + "Gilaki", + "گیلکی", + "glk" + ], + [ + "Guarani", + "Avañe'ẽ", + "gn" + ], + [ + "Goan Konkani", + "गोंयची कोंकणी / Gõychi Konknni", + "gom" + ], + [ + "Gothic", + "𐌲𐌿𐍄𐌹𐍃𐌺", + "got" + ], + [ + "Gujarati", + "ગુજરાતી", + "gu" + ], + [ + "Manx", + "Gaelg", + "gv" + ], + [ + "Hausa", + "Hausa", + "ha" + ], + [ + "Hakka Chinese", + "客家語/Hak-kâ-ngî", + "hak" + ], + [ + "Hawaiian", + "Hawaiʻi", + "haw" + ], + [ + "Hebrew", + "עברית", + "he" + ], + [ + "Hindi", + "हिन्दी", + "hi" + ], + [ + "Fiji Hindi", + "Fiji Hindi", + "hif" + ], + [ + "Croatian", + "hrvatski", + "hr" + ], + [ + "Upper Sorbian", + "hornjoserbsce", + "hsb" + ], + [ + "Haitian Creole", + "Kreyòl ayisyen", + "ht" + ], + [ + "Hungarian", + "magyar", + "hu" + ], + [ + "Armenian", + "Հայերեն", + "hy" + ], + [ + "Interlingua", + "interlingua", + "ia" + ], + [ + "Indonesian", + "Bahasa Indonesia", + "id" + ], + [ + "Interlingue", + "Interlingue", + "ie" + ], + [ + "Igbo", + "Igbo", + "ig" + ], + [ + "Inupiaq", + "Iñupiak", + "ik" + ], + [ + "Iloko", + "Ilokano", + "ilo" + ], + [ + "Ido", + "Ido", + "io" + ], + [ + "Icelandic", + "íslenska", + "is" + ], + [ + "Italian", + "italiano", + "it" + ], + [ + "Inuktitut", + "ᐃᓄᒃᑎᑐᑦ/inuktitut", + "iu" + ], + [ + "Japanese", + "日本語", + "ja" + ], + [ + "Jamaican Creole English", + "Patois", + "jam" + ], + [ + "Lojban", + "la .lojban.", + "jbo" + ], + [ + "Javanese", + "Basa Jawa", + "jv" + ], + [ + "Georgian", + "ქართული", + "ka" + ], + [ + "Kara-Kalpak", + "Qaraqalpaqsha", + "kaa" + ], + [ + "Kabyle", + "Taqbaylit", + "kab" + ], + [ + "Kabardian", + "Адыгэбзэ", + "kbd" + ], + [ + "Kongo", + "Kongo", + "kg" + ], + [ + "Kikuyu", + "Gĩkũyũ", + "ki" + ], + [ + "Kazakh", + "қазақша", + "kk" + ], + [ + "Kalaallisut", + "kalaallisut", + "kl" + ], + [ + "Khmer", + "ភាសាខ្មែរ", + "km" + ], + [ + "Kannada", + "ಕನ್ನಡ", + "kn" + ], + [ + "Korean", + "한국어", + "ko" + ], + [ + "Komi-Permyak", + "Перем Коми", + "koi" + ], + [ + "Karachay-Balkar", + "къарачай-малкъар", + "krc" + ], + [ + "Kashmiri", + "कॉशुर / کٲشُر", + "ks" + ], + [ + "Colognian", + "Ripoarisch", + "ksh" + ], + [ + "Kurdish", + "Kurdî", + "ku" + ], + [ + "Komi", + "коми", + "kv" + ], + [ + "Cornish", + "kernowek", + "kw" + ], + [ + "Kyrgyz", + "Кыргызча", + "ky" + ], + [ + "Latin", + "Latina", + "la" + ], + [ + "Ladino", + "Ladino", + "lad" + ], + [ + "Luxembourgish", + "Lëtzebuergesch", + "lb" + ], + [ + "лакку", + "лакку", + "lbe" + ], + [ + "Lezghian", + "лезги", + "lez" + ], + [ + "Ganda", + "Luganda", + "lg" + ], + [ + "Limburgish", + "Limburgs", + "li" + ], + [ + "Ligurian", + "Ligure", + "lij" + ], + [ + "Lombard", + "lumbaart", + "lmo" + ], + [ + "Lingala", + "lingála", + "ln" + ], + [ + "Lao", + "ລາວ", + "lo" + ], + [ + "Northern Luri", + "لۊری شومالی", + "lrc" + ], + [ + "Lithuanian", + "lietuvių", + "lt" + ], + [ + "Latgalian", + "latgaļu", + "ltg" + ], + [ + "Latvian", + "latviešu", + "lv" + ], + [ + "Maithili", + "मैथिली", + "mai" + ], + [ + "Basa Banyumasan", + "Basa Banyumasan", + "map-bms" + ], + [ + "Moksha", + "мокшень", + "mdf" + ], + [ + "Malagasy", + "Malagasy", + "mg" + ], + [ + "Eastern Mari", + "олык марий", + "mhr" + ], + [ + "Maori", + "Māori", + "mi" + ], + [ + "Minangkabau", + "Baso Minangkabau", + "min" + ], + [ + "Macedonian", + "македонски", + "mk" + ], + [ + "Malayalam", + "മലയാളം", + "ml" + ], + [ + "Mongolian", + "монгол", + "mn" + ], + [ + "Marathi", + "मराठी", + "mr" + ], + [ + "Western Mari", + "кырык мары", + "mrj" + ], + [ + "Malay", + "Bahasa Melayu", + "ms" + ], + [ + "Maltese", + "Malti", + "mt" + ], + [ + "Mirandese", + "Mirandés", + "mwl" + ], + [ + "Burmese", + "မြန်မာဘာသာ", + "my" + ], + [ + "Erzya", + "эрзянь", + "myv" + ], + [ + "Mazanderani", + "مازِرونی", + "mzn" + ], + [ + "Nauru", + "Dorerin Naoero", + "na" + ], + [ + "Nāhuatl", + "Nāhuatl", + "nah" + ], + [ + "Neapolitan", + "Napulitano", + "nap" + ], + [ + "Low German", + "Plattdüütsch", + "nds" + ], + [ + "Low Saxon", + "Nedersaksies", + "nds-nl" + ], + [ + "Nepali", + "नेपाली", + "ne" + ], + [ + "Newari", + "नेपाल भाषा", + "new" + ], + [ + "Dutch", + "Nederlands", + "nl" + ], + [ + "Norwegian Nynorsk", + "norsk nynorsk", + "nn" + ], + [ + "Norwegian", + "norsk bokmål", + "no" + ], + [ + "Novial", + "Novial", + "nov" + ], + [ + "Nouormand", + "Nouormand", + "nrm" + ], + [ + "Northern Sotho", + "Sesotho sa Leboa", + "nso" + ], + [ + "Navajo", + "Diné bizaad", + "nv" + ], + [ + "Nyanja", + "Chi-Chewa", + "ny" + ], + [ + "Occitan", + "occitan", + "oc" + ], + [ + "Livvi-Karelian", + "Livvinkarjala", + "olo" + ], + [ + "Oromo", + "Oromoo", + "om" + ], + [ + "Odia", + "ଓଡ଼ିଆ", + "or" + ], + [ + "Ossetic", + "Ирон", + "os" + ], + [ + "Punjabi", + "ਪੰਜਾਬੀ", + "pa" + ], + [ + "Pangasinan", + "Pangasinan", + "pag" + ], + [ + "Pampanga", + "Kapampangan", + "pam" + ], + [ + "Papiamento", + "Papiamentu", + "pap" + ], + [ + "Picard", + "Picard", + "pcd" + ], + [ + "Pennsylvania German", + "Deitsch", + "pdc" + ], + [ + "Palatine German", + "Pälzisch", + "pfl" + ], + [ + "Pali", + "पालि", + "pi" + ], + [ + "Norfuk / Pitkern", + "Norfuk / Pitkern", + "pih" + ], + [ + "Polish", + "polski", + "pl" + ], + [ + "Piedmontese", + "Piemontèis", + "pms" + ], + [ + "Western Punjabi", + "پنجابی", + "pnb" + ], + [ + "Pontic", + "Ποντιακά", + "pnt" + ], + [ + "Pashto", + "پښتو", + "ps" + ], + [ + "Portuguese", + "português", + "pt" + ], + [ + "Quechua", + "Runa Simi", + "qu" + ], + [ + "Romansh", + "rumantsch", + "rm" + ], + [ + "Romani", + "Romani", + "rmy" + ], + [ + "Rundi", + "Kirundi", + "rn" + ], + [ + "Romanian", + "română", + "ro" + ], + [ + "Aromanian", + "armãneashti", + "roa-rup" + ], + [ + "tarandíne", + "tarandíne", + "roa-tara" + ], + [ + "Russian", + "русский", + "ru" + ], + [ + "Rusyn", + "русиньскый", + "rue" + ], + [ + "Kinyarwanda", + "Kinyarwanda", + "rw" + ], + [ + "Sanskrit", + "संस्कृतम्", + "sa" + ], + [ + "Sakha", + "саха тыла", + "sah" + ], + [ + "Sardinian", + "sardu", + "sc" + ], + [ + "Sicilian", + "sicilianu", + "scn" + ], + [ + "Scots", + "Scots", + "sco" + ], + [ + "Sindhi", + "سنڌي", + "sd" + ], + [ + "Northern Sami", + "sámegiella", + "se" + ], + [ + "Sango", + "Sängö", + "sg" + ], + [ + "Serbo-Croatian", + "srpskohrvatski / српскохрватски", + "sh" + ], + [ + "Sinhala", + "සිංහල", + "si" + ], + [ + "Simple English", + "Simple English", + "simple" + ], + [ + "Slovak", + "slovenčina", + "sk" + ], + [ + "Slovenian", + "slovenščina", + "sl" + ], + [ + "Samoan", + "Gagana Samoa", + "sm" + ], + [ + "Shona", + "chiShona", + "sn" + ], + [ + "Somali", + "Soomaaliga", + "so" + ], + [ + "Albanian", + "shqip", + "sq" + ], + [ + "Serbian", + "српски / srpski", + "sr" + ], + [ + "Sranan Tongo", + "Sranantongo", + "srn" + ], + [ + "Swati", + "SiSwati", + "ss" + ], + [ + "Southern Sotho", + "Sesotho", + "st" + ], + [ + "Saterland Frisian", + "Seeltersk", + "stq" + ], + [ + "Sundanese", + "Basa Sunda", + "su" + ], + [ + "Swedish", + "svenska", + "sv" + ], + [ + "Swahili", + "Kiswahili", + "sw" + ], + [ + "Silesian", + "ślůnski", + "szl" + ], + [ + "Tamil", + "தமிழ்", + "ta" + ], + [ + "Tulu", + "ತುಳು", + "tcy" + ], + [ + "Telugu", + "తెలుగు", + "te" + ], + [ + "Tetum", + "tetun", + "tet" + ], + [ + "Tajik", + "тоҷикӣ", + "tg" + ], + [ + "Thai", + "ไทย", + "th" + ], + [ + "Tigrinya", + "ትግርኛ", + "ti" + ], + [ + "Turkmen", + "Türkmençe", + "tk" + ], + [ + "Tagalog", + "Tagalog", + "tl" + ], + [ + "Tswana", + "Setswana", + "tn" + ], + [ + "Tongan", + "lea faka-Tonga", + "to" + ], + [ + "Tok Pisin", + "Tok Pisin", + "tpi" + ], + [ + "Turkish", + "Türkçe", + "tr" + ], + [ + "Tsonga", + "Xitsonga", + "ts" + ], + [ + "Tatar", + "татарча/tatarça", + "tt" + ], + [ + "Tumbuka", + "chiTumbuka", + "tum" + ], + [ + "Twi", + "Twi", + "tw" + ], + [ + "Tahitian", + "reo tahiti", + "ty" + ], + [ + "Tuvinian", + "тыва дыл", + "tyv" + ], + [ + "Udmurt", + "удмурт", + "udm" + ], + [ + "Uyghur", + "ئۇيغۇرچە / Uyghurche", + "ug" + ], + [ + "Ukrainian", + "українська", + "uk" + ], + [ + "Urdu", + "اردو", + "ur" + ], + [ + "Uzbek", + "oʻzbekcha/ўзбекча", + "uz" + ], + [ + "Venda", + "Tshivenda", + "ve" + ], + [ + "Venetian", + "vèneto", + "vec" + ], + [ + "Veps", + "vepsän kel’", + "vep" + ], + [ + "Vietnamese", + "Tiếng Việt", + "vi" + ], + [ + "West Flemish", + "West-Vlams", + "vls" + ], + [ + "Volapük", + "Volapük", + "vo" + ], + [ + "Walloon", + "walon", + "wa" + ], + [ + "Waray", + "Winaray", + "war" + ], + [ + "Wolof", + "Wolof", + "wo" + ], + [ + "Wu Chinese", + "吴语", + "wuu" + ], + [ + "Kalmyk", + "хальмг", + "xal" + ], + [ + "Xhosa", + "isiXhosa", + "xh" + ], + [ + "Mingrelian", + "მარგალური", + "xmf" + ], + [ + "Yiddish", + "ייִדיש", + "yi" + ], + [ + "Yoruba", + "Yorùbá", + "yo" + ], + [ + "Zhuang", + "Vahcuengh", + "za" + ], + [ + "Zeelandic", + "Zeêuws", + "zea" + ], + [ + "Chinese", + "中文", + "zh" + ], + [ + "Classical Chinese", + "文言", + "zh-classical" + ], + [ + "Chinese (Min Nan)", + "Bân-lâm-gú", + "zh-min-nan" + ], + [ + "Cantonese", + "粵語", + "zh-yue" + ], + [ + "Zulu", + "isiZulu", + "zu" + ] + ]; + + var wikipedia$1 = /*#__PURE__*/Object.freeze({ + default: wikipedia + }); + + var require$$6 = ( wikipedia$1 && wikipedia ) || wikipedia$1; + + var wikipedia$2 = require$$6; + + var amenity = {"arts_centre":{"Świetlica wiejska":{"count":62},"Дом культуры":{"count":182}},"bank":{"ABANCA":{"count":83},"ABN AMRO":{"count":152},"ABSA":{"count":105},"AIB":{"count":85},"ANZ":{"count":378},"ASB Bank":{"count":51},"ATB Financial":{"count":68},"AXA":{"count":106},"Agribank":{"count":58},"Akbank":{"count":129},"Alior Bank":{"count":180},"Allahabad Bank":{"count":52},"Allied Bank":{"count":67},"Alpha Bank":{"count":329},"Andhra Bank":{"count":97},"Antonveneta":{"count":56},"Argenta":{"count":125},"Asia United Bank":{"count":57},"Askari Bank":{"count":71},"Associated Bank":{"count":55},"Axis Bank":{"count":198},"BAC":{"count":77},"BAWAG PSK":{"count":97},"BB&T":{"count":418},"BBBank":{"count":58},"BBK":{"count":122},"BBVA":{"count":1445},"BBVA Bancomer":{"count":157},"BBVA Compass":{"count":80},"BBVA Continental":{"count":74},"BBVA Francés":{"count":158},"BCA":{"count":135},"BCI":{"count":140},"BCP":{"count":226},"BCR":{"count":232},"BDO":{"count":538},"BGŻ BNP Paribas":{"count":74},"BMCE":{"count":53},"BMN":{"count":88},"BMO":{"count":339},"BMO Harris Bank":{"count":72},"BNA":{"count":70},"BNI":{"count":136},"BNL":{"count":159},"BNP Paribas":{"count":1165},"BNP Paribas Fortis":{"count":303},"BOC":{"count":95},"BPH":{"count":63},"BPI":{"count":579},"BPI Family Savings Bank":{"count":54},"BRD":{"count":276},"BRED":{"count":70},"BRI":{"count":209},"BW-Bank":{"count":95},"BZ WBK":{"count":156},"Banamex":{"count":356},"Banc Sabadell":{"count":175},"Banca Intesa":{"count":92},"Banca March":{"count":51},"Banca Popolare di Milano":{"count":99},"Banca Popolare di Novara":{"count":79},"Banca Popolare di Sondrio":{"count":105},"Banca Popolare di Verona":{"count":59},"Banca Popolare di Vicenza":{"count":119},"Banca Românească":{"count":61},"Banca Sella":{"count":56},"Banca Transilvania":{"count":167},"Banco Agrario":{"count":58},"Banco Azteca":{"count":119},"Banco BCI":{"count":74},"Banco Bradesco":{"count":226},"Banco Continental":{"count":64},"Banco Estado":{"count":153},"Banco Fassil":{"count":59},"Banco G&T Continental":{"count":84},"Banco General":{"count":53},"Banco Industrial":{"count":91},"Banco Internacional":{"count":62},"Banco Itaú":{"count":351},"Banco Nacional":{"count":143},"Banco Nación":{"count":149},"Banco Pastor":{"count":74},"Banco Pichincha":{"count":109},"Banco Popular":{"count":619},"Banco Provincia":{"count":138},"Banco Sabadell":{"count":189},"Banco Santander":{"count":112},"Banco Sol":{"count":74},"Banco de Bogotá":{"count":74},"Banco de Chile":{"count":175},"Banco de Costa Rica":{"count":123},"Banco de Desarrollo Banrural":{"count":85},"Banco de Occidente":{"count":67},"Banco de Venezuela":{"count":76},"Banco de la Nación":{"count":156},"Banco de la Nación Argentina":{"count":166},"Banco di Napoli":{"count":79},"Banco di Sardegna":{"count":79},"Banco do Brasil":{"count":1313},"Banco do Nordeste":{"count":56},"BancoEstado":{"count":121},"Bancolombia":{"count":170},"Bancomer":{"count":227},"Bancpost":{"count":77},"Banesco":{"count":209},"Bangkok Bank":{"count":69},"Bank Al Habib":{"count":52},"Bank Alfalah":{"count":63},"Bank Austria":{"count":123},"Bank BCA":{"count":71},"Bank BNI":{"count":67},"Bank BPH":{"count":56},"Bank BRI":{"count":196},"Bank Danamon":{"count":60},"Bank Mandiri":{"count":232},"Bank Mega":{"count":54},"Bank Spółdzielczy":{"count":395},"Bank Zachodni WBK":{"count":103},"Bank of Africa":{"count":59},"Bank of America":{"count":1787},"Bank of Baroda":{"count":122},"Bank of Ceylon":{"count":74},"Bank of China":{"count":152},"Bank of Commerce":{"count":69},"Bank of India":{"count":113},"Bank of Ireland":{"count":151},"Bank of Montreal":{"count":157},"Bank of New Zealand":{"count":63},"Bank of Scotland":{"count":122},"Bank of the West":{"count":173},"Bankia":{"count":613},"Bankinter":{"count":139},"Banner Bank":{"count":53},"Banorte":{"count":260},"Banque Atlantique":{"count":57},"Banque Nationale":{"count":137},"Banque Populaire":{"count":919},"Banrisul":{"count":101},"Banrural":{"count":84},"Barclays":{"count":1243},"Bcc":{"count":54},"Belfius":{"count":285},"Bendigo Bank":{"count":140},"Berliner Volksbank":{"count":73},"Bicentenario":{"count":173},"Bradesco":{"count":751},"Budapest Bank":{"count":56},"CBAO":{"count":53},"CEC Bank":{"count":121},"CGD":{"count":52},"CIB Bank":{"count":64},"CIBC":{"count":574},"CIC":{"count":742},"CIMB Bank":{"count":64},"CNEP":{"count":52},"Caisse Desjardins":{"count":69},"Caisse d'Épargne":{"count":1607},"Caixa":{"count":239},"Caixa Econômica Federal":{"count":573},"Caixa Geral de Depósitos":{"count":231},"CaixaBank":{"count":343},"Caja Círculo":{"count":68},"Caja Duero":{"count":90},"Caja España":{"count":74},"Caja Rural":{"count":216},"Caja Rural de Jaén":{"count":55},"CajaSur":{"count":73},"Cajamar":{"count":216},"Cajero Automatico Bancared":{"count":123},"Canara Bank":{"count":270},"Capital One":{"count":199},"Carige":{"count":57},"Cariparma":{"count":69},"Cassa di Risparmio del Veneto":{"count":102},"CatalunyaCaixa":{"count":107},"Central Bank of India":{"count":60},"Chase":{"count":1658},"China Bank":{"count":156},"China Bank Savings":{"count":54},"China Construction Bank":{"count":68},"Citibank":{"count":485},"Citizens Bank":{"count":248},"Clydesdale Bank":{"count":55},"Columbia Bank":{"count":79},"Comerica Bank":{"count":67},"Commerce Bank":{"count":61},"Commercial Bank":{"count":75},"Commercial Bank of Ceylon PLC":{"count":100},"Commerzbank":{"count":879},"Commonwealth Bank":{"count":376},"Corporation Bank":{"count":92},"Credem":{"count":77},"Credicoop":{"count":111},"Credit Agricole":{"count":104},"Credit Suisse":{"count":93},"Crelan":{"count":53},"Crédit Agricole":{"count":2544},"Crédit Mutuel":{"count":1129},"Crédit Mutuel de Bretagne":{"count":368},"Crédit du Nord":{"count":148},"Crédito Agrícola":{"count":87},"Cбербанк":{"count":74},"Danske Bank":{"count":157},"Davivienda":{"count":172},"De Venezuela":{"count":87},"Denizbank":{"count":58},"Desjardins":{"count":80},"Deutsche Bank":{"count":995},"Dubai Islamic Bank":{"count":71},"EastWest Bank":{"count":127},"Ecobank":{"count":197},"Erste Bank":{"count":200},"Eurobank":{"count":261},"Express Union":{"count":58},"FNB":{"count":143},"Federal Bank":{"count":88},"Fifth Third Bank":{"count":234},"Finansbank":{"count":68},"First Bank":{"count":91},"First Citizens Bank":{"count":88},"First National Bank":{"count":209},"Galicia":{"count":179},"Garanti":{"count":58},"Garanti Bankası":{"count":82},"Getin Bank":{"count":112},"Groupama":{"count":61},"HDFC Bank":{"count":219},"HNB":{"count":67},"HSBC":{"count":1748},"Halifax":{"count":367},"Halkbank":{"count":74},"Hamburger Sparkasse":{"count":159},"Handelsbanken":{"count":250},"Hong Leong Bank":{"count":51},"Hrvatska poštanska banka":{"count":54},"Huntington Bank":{"count":110},"HypoVereinsbank":{"count":408},"ICBC":{"count":158},"ICICI Bank":{"count":224},"IDBI Bank":{"count":73},"ING":{"count":654},"ING Bank Śląski":{"count":128},"IberCaja":{"count":209},"Indian Bank":{"count":98},"Indian Overseas Bank":{"count":108},"Interbank":{"count":131},"Intesa San Paolo":{"count":257},"Itaú":{"count":726},"K&H Bank":{"count":75},"KBC":{"count":273},"Kasa Stefczyka":{"count":65},"Key Bank":{"count":382},"Komerční banka":{"count":180},"Kreissparkasse":{"count":600},"Kreissparkasse Köln":{"count":69},"Kutxabank":{"count":68},"LCL":{"count":903},"La Banque Postale":{"count":124},"La Caixa":{"count":1144},"Laboral Kutxa":{"count":66},"Landbank":{"count":115},"Liberbank":{"count":164},"Lloyds Bank":{"count":612},"M&T Bank":{"count":184},"MCB":{"count":62},"MCB Bank":{"count":54},"MONETA Money Bank":{"count":92},"Macro":{"count":174},"Maybank":{"count":234},"Meezan Bank":{"count":63},"Mercantil":{"count":132},"Metro Bank":{"count":57},"Metrobank":{"count":434},"Millennium BCP":{"count":119},"Millennium Bank":{"count":386},"Monte dei Paschi di Siena":{"count":265},"Montepio":{"count":113},"NAB":{"count":205},"NSB":{"count":51},"NatWest":{"count":800},"National Bank":{"count":147},"Nationwide":{"count":337},"Nedbank":{"count":100},"Nordea":{"count":331},"Novo Banco":{"count":101},"OLB":{"count":57},"OTP":{"count":362},"Oberbank":{"count":103},"Occidental de Descuento":{"count":68},"Oldenburgische Landesbank":{"count":68},"One Network Bank":{"count":91},"Osuuspankki":{"count":89},"PBZ":{"count":65},"PKO":{"count":58},"PKO BP":{"count":561},"PNB":{"count":323},"PNC":{"count":52},"PNC Bank":{"count":639},"PSBank":{"count":108},"Patagonia":{"count":94},"Pekao SA":{"count":155},"Peoples Bank":{"count":254},"Philippine National Bank":{"count":69},"Piraeus Bank":{"count":96},"Popular":{"count":104},"Postbank":{"count":567},"Postbank Finanzcenter":{"count":65},"Provincial":{"count":135},"Public Bank":{"count":90},"Punjab National Bank":{"count":134},"RBC":{"count":487},"RBC Financial Group":{"count":59},"RBS":{"count":190},"RCBC":{"count":144},"RCBC Savings Bank":{"count":84},"Rabobank":{"count":557},"Raiffeisen Polbank":{"count":78},"Raiffeisenbank":{"count":2705},"Regions Bank":{"count":204},"Republic Bank":{"count":85},"Royal Bank":{"count":90},"Royal Bank of Canada":{"count":56},"Royal Bank of Scotland":{"count":129},"SEB":{"count":129},"SNS Bank":{"count":58},"Sabadell":{"count":97},"Sampath Bank":{"count":87},"Santander":{"count":3268},"Santander Consumer Bank":{"count":109},"Santander Río":{"count":239},"Santander Totta":{"count":201},"Sberbank":{"count":135},"Scotiabank":{"count":1144},"Security Bank":{"count":171},"Sicredi":{"count":94},"Slovenská sporiteľňa":{"count":165},"Société Générale":{"count":1136},"Sparda-Bank":{"count":277},"Sparkasse":{"count":4667},"Sparkasse Aachen":{"count":56},"Sparkasse KölnBonn":{"count":76},"Stadtsparkasse":{"count":68},"Stanbic Bank":{"count":63},"Standard Bank":{"count":165},"Standard Chartered":{"count":95},"Standard Chartered Bank":{"count":74},"State Bank of India":{"count":1013},"SunTrust":{"count":322},"Supervielle":{"count":72},"Swedbank":{"count":252},"Syndicate Bank":{"count":118},"TCF Bank":{"count":85},"TD Bank":{"count":425},"TD Canada Trust":{"count":675},"TEB":{"count":56},"TSB":{"count":259},"Takarékszövetkezet":{"count":120},"Targobank":{"count":279},"Tatra banka":{"count":70},"Türkiye İş Bankası":{"count":53},"UBS":{"count":169},"UCO Bank":{"count":51},"UCPB":{"count":122},"UOB":{"count":126},"US Bank":{"count":723},"Ulster Bank":{"count":100},"Umpqua Bank":{"count":103},"UniCredit Bank":{"count":548},"Unicaja Banco":{"count":182},"Unicredit Banca":{"count":496},"Union Bank":{"count":304},"United Bank":{"count":68},"VR-Bank":{"count":506},"Vakıfbank":{"count":85},"Veneto Banca":{"count":73},"Vijaya Bank":{"count":56},"Volks- und Raiffeisenbank":{"count":53},"Volksbank":{"count":2665},"Volksbank Mittelhessen":{"count":53},"Volksbank Raiffeisenbank":{"count":63},"VÚB":{"count":105},"Washington Federal":{"count":65},"Wells Fargo":{"count":1947},"Western Union":{"count":440},"Westpac":{"count":322},"Yorkshire Bank":{"count":95},"Yorkshire Building Society":{"count":69},"Zagrebačka banka":{"count":54},"Ziraat Bankası":{"count":172},"mBank":{"count":70},"ČSOB":{"count":211},"Česká spořitelna":{"count":243},"İş Bankası":{"count":112},"Εθνική Τράπεζα":{"count":103},"Πειραιώς":{"count":120},"Τράπεζα Πειραιώς":{"count":104},"Авангард":{"count":76},"Альфа-Банк":{"count":301},"Банк Москвы":{"count":176},"Банка ДСК":{"count":63},"Белагропромбанк":{"count":184},"Беларусбанк":{"count":570},"Белинвестбанк":{"count":78},"Бинбанк":{"count":114},"ВТБ":{"count":80},"ВТБ24":{"count":545},"Возрождение":{"count":81},"Газпромбанк":{"count":161},"Генбанк":{"count":83},"Казкоммерцбанк":{"count":74},"МДМ Банк":{"count":52},"Московский индустриальный банк":{"count":53},"Мособлбанк":{"count":54},"Народный банк":{"count":63},"ОТП Банк":{"count":54},"Открытие":{"count":92},"Ощадбанк":{"count":883},"ПУМБ":{"count":78},"Почта Банк":{"count":65},"ПриватБанк":{"count":1018},"Приватбанк":{"count":76},"Приднестровский Сбербанк":{"count":59},"Приорбанк":{"count":69},"Промсвязьбанк":{"count":133},"РНКБ":{"count":124},"Райффайзен":{"count":65},"Райффайзен Банк Аваль":{"count":125},"Райффайзенбанк":{"count":52},"Росбанк":{"count":218},"Россельхозбанк":{"count":374},"Русский стандарт":{"count":55},"Сбербанк":{"count":6921},"Совкомбанк":{"count":186},"УкрСиббанк":{"count":213},"Укрсоцбанк":{"count":57},"Уралсиб":{"count":130},"Хоум Кредит":{"count":53},"בנק הפועלים":{"count":112},"בנק לאומי":{"count":83},"بانک":{"count":219},"بانک آینده":{"count":58},"بانک اقتصاد نوین":{"count":78},"بانک انصار":{"count":99},"بانک تجارت":{"count":365},"بانک رفاه":{"count":138},"بانک رفاه کارگران":{"count":72},"بانک سپه":{"count":348},"بانک شهر":{"count":93},"بانک صادرات":{"count":492},"بانک قوامین":{"count":110},"بانک مسکن":{"count":263},"بانک ملت":{"count":428},"بانک ملی":{"count":561},"بانک ملی ایران":{"count":80},"بانک مهر اقتصاد":{"count":92},"بانک پارسیان":{"count":103},"بانک پاسارگاد":{"count":107},"بانک کشاورزی":{"count":277},"صادرات":{"count":85},"ملی":{"count":67},"پست بانک":{"count":71},"ธนาคารกรุงเทพ":{"count":121},"ธนาคารกรุงไทย":{"count":85},"ธนาคารกสิกรไทย":{"count":108},"ธนาคารออมสิน":{"count":71},"ธนาคารไทยพาณิชย์":{"count":95},"みずほ銀行":{"count":255},"りそな銀行":{"count":135},"三井住友銀行":{"count":204},"三菱東京UFJ銀行":{"count":235},"中国农业银行":{"count":198},"中国工商银行":{"count":181},"中国建设银行":{"count":158},"中国邮政储蓄银行":{"count":76},"中国银行":{"count":275},"交通银行":{"count":68},"京都中央信用金庫":{"count":53},"京都銀行":{"count":66},"农业银行":{"count":78},"北海道銀行":{"count":51},"合作金庫銀行":{"count":55},"土地銀行":{"count":54},"工商银行":{"count":160},"建设银行":{"count":89},"彰化銀行":{"count":53},"招商银行":{"count":94},"横浜銀行":{"count":92},"第一銀行":{"count":78},"華南銀行":{"count":52},"국민은행":{"count":199,"tags":{"name:en":"Gungmin Bank"}},"기업은행":{"count":53},"농협":{"count":148},"새마을금고":{"count":102},"신한은행":{"count":245,"tags":{"name:en":"Sinhan Bank"}},"우리은행":{"count":316,"tags":{"name:en":"Uri Bank"}},"하나은행":{"count":85}},"bar":{"Bar Centrale":{"count":141},"Bar Sport":{"count":90},"Beach Bar":{"count":80},"Pool Bar":{"count":54}},"bicycle_rental":{"Bicing":{"count":130},"Call a Bike":{"count":95},"Grid":{"count":51},"Mibici":{"count":116},"metropolradruhr":{"count":91}},"bureau_de_change":{"Abitab":{"count":55},"Change":{"count":51},"Travelex":{"count":75},"Western Union":{"count":189}},"cafe":{"85度C":{"count":128},"Bar Centrale":{"count":77},"Bar Kafe":{"count":253},"Barista":{"count":65},"Bistro":{"count":60},"Bonafide":{"count":63},"Cafe Coffee Day":{"count":239},"Cafe Nero":{"count":52},"Cafeteria":{"count":579},"Cafetería":{"count":61},"Caffè Nero":{"count":316},"Café Amazon":{"count":241},"Café Central":{"count":115},"Café de la Place":{"count":55},"Café des Sports":{"count":71},"Caribou Coffee":{"count":184},"Coffee Fellows":{"count":77},"Coffee House":{"count":71},"Coffee Island":{"count":51},"Coffee Time":{"count":133},"Costa":{"count":1403},"Country Style":{"count":58},"Dolce Vita":{"count":55},"Dunkin' Donuts":{"count":1662,"tags":{"cuisine":"donut"}},"Eiscafe Dolomiti":{"count":51},"Eiscafe Venezia":{"count":237},"Espresso House":{"count":122},"Havanna":{"count":81},"Internet Cafe":{"count":95},"Jamba Juice":{"count":86},"Kafe":{"count":55},"Krispy Kreme":{"count":63},"Le Pain Quotidien":{"count":59},"McCafé":{"count":72,"tags":{"amenity":"cafe","cuisine":"coffee_shop"}},"Peet's Coffee & Tea":{"count":82},"Pret A Manger":{"count":174},"Prime":{"count":51},"Second Cup":{"count":234},"Segafredo":{"count":103},"Starbucks":{"count":8463,"tags":{"cuisine":"coffee_shop"}},"Subway":{"count":114},"Tchibo":{"count":168},"The Coffee Bean & Tea Leaf":{"count":93},"The Coffee Club":{"count":81},"Tim Hortons":{"count":1945},"Traveler's Coffee":{"count":70},"Venezia":{"count":55},"Wayne's Coffee":{"count":52},"Берёзка":{"count":52},"Бистро":{"count":84},"Буфет":{"count":56},"Встреча":{"count":83},"Даблби":{"count":59},"Закусочная":{"count":101},"Кофе Хауз":{"count":119},"Кофейня":{"count":78},"Лакомка":{"count":62},"Летнее кафе":{"count":61},"Оазис":{"count":54},"Пельменная":{"count":63},"Пиццерия":{"count":60},"Рандеву":{"count":54},"Сказка":{"count":66},"Смак":{"count":62},"Старбакс":{"count":55},"Столовая":{"count":1181},"Теремок":{"count":64},"Уют":{"count":115},"Хуторок":{"count":59},"Шашлычная":{"count":153},"Шоколад":{"count":54},"Шоколадница":{"count":252},"ארומה":{"count":64},"مقهى":{"count":136},"คาเฟ่ อเมซอน":{"count":59},"エクセルシオール カフェ":{"count":61},"カフェ・ド・クリエ":{"count":80,"tags":{"name:en":"Cafe de CRIE"}},"カフェ・ベローチェ":{"count":105},"コメダ珈琲店":{"count":179},"サンマルクカフェ":{"count":156},"スターバックス":{"count":558,"tags":{"name:en":"Starbucks"}},"タリーズコーヒー":{"count":243},"ドトールコーヒーショップ":{"count":489},"星巴克":{"count":146},"스타벅스":{"count":52}},"car_rental":{"Alamo":{"count":57},"Avis":{"count":604},"Budget":{"count":218},"Enterprise":{"count":594},"Enterprise Rent-a-Car":{"count":51},"Europcar":{"count":611},"Hertz":{"count":654},"Localiza":{"count":59},"Sixt":{"count":323},"Thrifty":{"count":81},"U-Haul":{"count":94},"オリックスレンタカー":{"count":54},"トヨタレンタカー":{"count":57},"トヨタレンタリース":{"count":63},"ニッポンレンタカー":{"count":113}},"car_wash":{"Aral":{"count":88},"Autolavaggio":{"count":52},"BP":{"count":63},"Esso":{"count":55},"H-E-B Car Wash":{"count":71},"Intermarché":{"count":60},"Lavage Auto":{"count":60},"Lavazh":{"count":52},"Myjnia":{"count":54},"Myjnia bezdotykowa":{"count":93},"Myjnia samochodowa":{"count":66},"Shell":{"count":162},"Spălătorie Auto":{"count":69},"Spălătorie auto":{"count":52},"Автомийка":{"count":63}},"cinema":{"Cinema City":{"count":61},"Cinemark":{"count":87},"Cinemex":{"count":70},"Cinepolis":{"count":59},"Cineworld":{"count":64},"Odeon":{"count":81}},"clinic":{"ФАП":{"count":162}},"dentist":{"Aspen Dental":{"count":73},"Family Dentistry":{"count":51},"Vitaldent":{"count":54},"Стоматолог":{"count":72},"Стоматологія":{"count":66}},"doctors":{"Háziorvosi rendelő":{"count":54},"Инвитро":{"count":115},"ФАП":{"count":147}},"driving_school":{"Автодром":{"count":55}},"fast_food":{"A&W":{"count":614},"Ali Baba":{"count":101},"Angel's Burger":{"count":66},"Antalya":{"count":53},"Arby's":{"count":1432},"Asia Bistro":{"count":53},"Asia Wok":{"count":53},"Baskin-Robbins":{"count":262,"tags":{"amenity":"ice_cream"}},"Bistro":{"count":80},"Bob's":{"count":83},"Bojangles":{"count":89},"Booster Juice":{"count":76},"Boston Market":{"count":107},"Braum's":{"count":58},"Burger King":{"count":6601,"tags":{"cuisine":"burger"}},"Burger Machine":{"count":55},"Büfé":{"count":72},"Captain D's":{"count":56},"Carl's Jr.":{"count":593,"tags":{"cuisine":"burger"}},"Checkers":{"count":102},"Chick-fil-A":{"count":906,"tags":{"cuisine":"chicken"}},"Chicken Express":{"count":67},"Chipotle":{"count":688,"tags":{"cuisine":"mexican"}},"Chowking":{"count":250},"Church's Chicken":{"count":249},"CoCo壱番屋":{"count":218},"Cold Stone Creamery":{"count":72},"Cook Out":{"count":81},"Culver's":{"count":541},"DQ":{"count":66},"Dairy Queen":{"count":1485},"Del Taco":{"count":244},"Ditsch":{"count":55},"Domino's Pizza":{"count":2577,"tags":{"cuisine":"pizza"}},"Dunkin' Donuts":{"count":747,"tags":{"cuisine":"donut"}},"El Pollo Loco":{"count":132},"Everest":{"count":59},"Extreme Pita":{"count":58},"Fazoli's":{"count":53},"Firehouse Subs":{"count":147},"Fish & Chips":{"count":185},"Fish and Chips":{"count":55},"Five Guys":{"count":457},"Greenwich":{"count":83},"Habib's":{"count":87},"Hallo Pizza":{"count":98},"Hardee's":{"count":634,"tags":{"cuisine":"burger"}},"Harvey's":{"count":158},"Hesburger":{"count":164},"Hungry Jacks":{"count":261,"tags":{"cuisine":"burger"}},"In-N-Out Burger":{"count":211},"Istanbul":{"count":96},"Istanbul Kebab":{"count":59},"Jack in the Box":{"count":951,"tags":{"cuisine":"burger"}},"Jamba Juice":{"count":148},"Jersey Mike's Subs":{"count":88},"Jimmy John's":{"count":519,"tags":{"cuisine":"sandwich"}},"Jollibee":{"count":740},"KFC":{"count":6003,"tags":{"cuisine":"chicken"}},"KFC/Taco Bell":{"count":70},"Kebab House":{"count":74},"Kebabai":{"count":64},"Kochlöffel":{"count":78},"Kotipizza":{"count":89},"Krispy Kreme":{"count":63},"Krystal":{"count":53},"Little Caesars":{"count":567},"Little Caesars Pizza":{"count":82},"Long John Silver's":{"count":200},"Lotteria":{"count":67},"Max":{"count":54},"McDonald's":{"count":18327,"tags":{"cuisine":"burger"}},"Minute Burger":{"count":53},"Mr. Sub":{"count":153},"New York Pizza":{"count":65},"Nordsee":{"count":198},"Panda Express":{"count":593,"tags":{"cuisine":"chinese"}},"Panera Bread":{"count":120},"Papa John's":{"count":820,"tags":{"cuisine":"pizza"}},"Papa Murphy's":{"count":100},"Pinulito":{"count":58},"Pita Pit":{"count":150},"Pizza Hut":{"count":1503,"tags":{"cuisine":"pizza"}},"Pizza Hut Delivery":{"count":70},"Pizza King":{"count":56},"Pizza Nova":{"count":90},"Pizza Pizza":{"count":411},"Pollo Campero":{"count":134},"Pollo Granjero":{"count":66},"Popeye's":{"count":521,"tags":{"cuisine":"chicken"}},"Popeyes Louisiana Kitchen":{"count":51},"Qdoba":{"count":91},"Quick":{"count":434},"Quiznos":{"count":401},"Rally's":{"count":68},"Red Rooster":{"count":192},"Sbarro":{"count":65},"Schlotzsky's Deli":{"count":348},"Sibylla":{"count":74},"Sonic":{"count":1166,"tags":{"cuisine":"burger"}},"Starbucks":{"count":60,"tags":{"cuisine":"coffee_shop"}},"Steers":{"count":190},"Subway":{"count":11431},"Taco Bell":{"count":2947,"tags":{"cuisine":"mexican"}},"Taco Bueno":{"count":59},"Taco Cabana":{"count":57},"Taco Del Mar":{"count":57},"Taco John's":{"count":141},"Taco Time":{"count":171},"Telepizza":{"count":323},"Thai Express":{"count":63},"The Pizza Company":{"count":62},"Waffle House":{"count":86},"Wendy's":{"count":3036,"tags":{"cuisine":"burger"}},"Whataburger":{"count":815},"White Castle":{"count":149},"Wienerschnitzel":{"count":61},"Wimpy":{"count":168},"Zaxby's":{"count":185},"Γρηγόρης":{"count":59},"Бистро":{"count":61},"Бургер Кинг":{"count":181},"Крошка Картошка":{"count":77},"Макдоналдс":{"count":469,"tags":{"name:en":"McDonald's"}},"Робин Сдобин":{"count":131},"Русский Аппетит":{"count":129},"Сабвэй":{"count":73},"Стардог!s":{"count":66},"Теремок":{"count":155},"Шаверма":{"count":93},"Шаурма":{"count":265},"かっぱ寿司":{"count":84},"かつや":{"count":58},"くら寿司":{"count":99},"すき家":{"count":571,"tags":{"name:en":"SUKIYA"}},"なか卯":{"count":180},"ほっかほっか亭":{"count":57},"ほっともっと":{"count":168},"オリジン弁当":{"count":93},"ケンタッキーフライドチキン":{"count":334,"tags":{"cuisine":"chicken","name:en":"KFC"}},"サブウェイ":{"count":74},"スシロー":{"count":94},"マクドナルド":{"count":1261,"tags":{"cuisine":"burger","name:en":"McDonald's"}},"ミスタードーナツ":{"count":188},"モスバーガー":{"count":507,"tags":{"name:en":"MOS BURGER"}},"ロッテリア":{"count":97},"丸亀製麺":{"count":57},"吉野家":{"count":461},"幸楽苑":{"count":80},"摩斯漢堡":{"count":86},"松屋":{"count":574,"tags":{"name:en":"Matsuya"}},"肯德基":{"count":197},"麥當勞":{"count":224},"麦当劳":{"count":97},"롯데리아":{"count":83}},"fuel":{"76":{"count":603},"1-2-3":{"count":75},"7-Eleven":{"count":1013},"ABC":{"count":83},"ADNOC":{"count":76},"ANP":{"count":202},"ARAL":{"count":68},"Aegean":{"count":56},"Afriquia":{"count":134},"Agip":{"count":2348},"Agrola":{"count":99},"Alon":{"count":54},"Alpet":{"count":61},"Api":{"count":234},"Aral":{"count":1708},"Arco":{"count":585},"Asda":{"count":51},"Auchan":{"count":84},"Avanti":{"count":112},"Avia":{"count":1061},"BEBECO":{"count":77},"BFT":{"count":102},"BHPetrol":{"count":60},"BP":{"count":4069},"BR":{"count":165},"Bangchak":{"count":106},"Benzina":{"count":167},"Bharat Petroleum":{"count":230},"Bliska":{"count":141},"CAMPSA":{"count":420},"CARREFOUR":{"count":61},"CEPSA":{"count":892},"CNG":{"count":373},"Caltex":{"count":1574},"Campsa":{"count":64},"Canadian Tire":{"count":97},"Carrefour":{"count":372},"Casey's General Store":{"count":385},"Cenex":{"count":222},"Cepsa":{"count":305},"Ceypetco":{"count":70},"Chevron":{"count":1781},"Circle K":{"count":730},"Citgo":{"count":692},"Clark":{"count":56},"Co-op":{"count":52},"Coles Express":{"count":305},"Conoco":{"count":398},"Coop":{"count":71},"Copec":{"count":566},"Copetrol":{"count":119},"Cosmo":{"count":68},"Costco Gasoline":{"count":203},"Couche-Tard":{"count":54},"Crodux":{"count":51},"Cumberland Farms":{"count":93},"Delta":{"count":157},"Diamond Shamrock":{"count":51},"Drummed Fuel":{"count":178},"E. Leclerc":{"count":136},"EKO":{"count":224},"ENEOS":{"count":1600},"ENI":{"count":92},"ERG":{"count":71},"Elan":{"count":208},"Eneos":{"count":130},"Engen":{"count":383},"Eni":{"count":681},"Erg":{"count":469},"Esso":{"count":4742},"Esso Express":{"count":176},"EuroOil":{"count":52},"Exxon":{"count":1064},"F24":{"count":67},"Firezone":{"count":66},"Flying V":{"count":175},"GALP":{"count":788},"Gazprom":{"count":68},"GetGo":{"count":54},"Goil":{"count":78},"Gulf":{"count":416},"H-E-B Fuel":{"count":51},"H-E-B Gas":{"count":155},"HEM":{"count":276},"HP":{"count":163},"HP Petrol Pump":{"count":53},"Helios":{"count":63},"Hess":{"count":195},"Hindustan Petroleum":{"count":82},"Holiday":{"count":156},"Husky":{"count":244},"IES":{"count":57},"IP":{"count":993},"Independent Fuel Station":{"count":52},"Indian Oil":{"count":416},"Indipend.":{"count":129},"Ingo":{"count":62},"Intermarché":{"count":556},"Intermarché Super":{"count":102},"Ipiranga":{"count":173},"Irving":{"count":194},"JA-SS":{"count":74},"JOMO":{"count":51},"Jet":{"count":707},"Jetti":{"count":61},"Kangaroo":{"count":115},"Kobil":{"count":87},"Kroger":{"count":59},"Kroger Fuel":{"count":68},"Kum & Go":{"count":136},"Kwik Trip":{"count":210},"LPG":{"count":349},"LPG Station":{"count":51},"LUKOIL":{"count":61},"Liberty":{"count":93},"Lotos":{"count":284},"Lotos Optima":{"count":71},"Love's":{"count":52},"Lukoil":{"count":908},"MEROIL":{"count":70},"MOL":{"count":436},"MRS":{"count":65},"Marathon":{"count":694},"Maverik":{"count":66},"Maxol":{"count":57},"Metano":{"count":248},"Migrol":{"count":71},"Minipump":{"count":140},"Mobil":{"count":1387},"Mobile":{"count":62},"Mol":{"count":64},"Morrisons":{"count":128},"Moya":{"count":62},"Murphy USA":{"count":190},"NP":{"count":63},"Neste":{"count":166},"OIL!":{"count":110},"OK":{"count":269},"OKQ8":{"count":218},"OMV":{"count":936},"Oilibya":{"count":127},"Opet":{"count":117},"Orlen":{"count":1185},"PETRONOR":{"count":182},"PSO":{"count":121},"PSO Petrol Pump":{"count":56},"PT":{"count":306},"PTT":{"count":423},"PV Oil":{"count":100},"Pacific Pride":{"count":54},"Pecsa":{"count":130},"Pemex":{"count":2023},"Pertamina":{"count":324},"Petro":{"count":54},"Petro-Canada":{"count":893},"Petrobras":{"count":487},"Petrochina":{"count":116},"Petroecuador":{"count":64},"Petrol Ofisi":{"count":237},"Petrolimex":{"count":325},"Petrom":{"count":381},"Petron":{"count":1485},"Petronas":{"count":387},"Petroperu":{"count":110},"Phillips 66":{"count":424},"Phoenix":{"count":210},"Pilot":{"count":69},"Pioneer":{"count":104},"Posto":{"count":52},"Posto Atem":{"count":68},"Posto BR":{"count":222},"Posto Ipiranga":{"count":177},"Posto Shell":{"count":104},"Primax":{"count":288},"Prio":{"count":52},"Puma":{"count":442},"Q1":{"count":53},"Q8":{"count":1467},"Q8 Easy":{"count":66},"QuikTrip":{"count":251},"REPSOL":{"count":1380},"RaceTrac":{"count":80},"Raiffeisenbank":{"count":130},"Repsol":{"count":1099},"Rompetrol":{"count":234},"Royal Farms":{"count":79},"Rubis":{"count":108},"SB Tank":{"count":62},"SPBU":{"count":203},"Safeway":{"count":74},"Sainsbury's":{"count":75},"Sam's Club":{"count":57},"Sasol":{"count":90},"Sea Oil":{"count":142},"Sheetz":{"count":304},"Shell":{"count":12317},"Shell Express":{"count":135},"Sinclair":{"count":201},"Sinopec":{"count":106},"Sinopec Fuel":{"count":116},"Slovnaft":{"count":259},"Socar":{"count":86},"Sokimex":{"count":85},"Speedway":{"count":556},"St1":{"count":141},"Star":{"count":419},"Star Oil":{"count":100},"Station Service E. Leclerc":{"count":423},"Statoil":{"count":495},"Stewart's":{"count":72},"Sunoco":{"count":853},"Super U":{"count":174},"Tamoil":{"count":959},"Tango":{"count":146},"Teboil":{"count":100},"Tela":{"count":191},"Terpel":{"count":367},"Tesco":{"count":218},"Texaco":{"count":1167},"Tinq":{"count":219},"Topaz":{"count":111},"Total":{"count":3591},"Total Access":{"count":226},"Total Erg":{"count":59},"TotalErg":{"count":267},"Turkey Hill":{"count":80},"Turmöl":{"count":80},"Ultramar":{"count":372},"United":{"count":197},"Uno":{"count":134},"Uno-X":{"count":69},"Valero":{"count":778},"Vito":{"count":91},"WOG":{"count":350},"Wawa":{"count":173},"Westfalen":{"count":94},"Woolworths Petrol":{"count":187},"Z":{"count":98},"bft":{"count":202},"eni":{"count":71},"ΕΚΟ":{"count":58},"АГЗС":{"count":1020},"АЗС":{"count":86},"Авіас":{"count":116},"БРСМ-Нафта":{"count":64},"Башнефть":{"count":272},"Белоруснефть":{"count":71},"Газовая заправка":{"count":57},"Газпромнефть":{"count":1242},"Гелиос":{"count":61},"ЕКА":{"count":78},"Заправка":{"count":63},"КазМунайГаз":{"count":150},"Лукойл":{"count":2327},"Макпетрол":{"count":108},"НК Альянс":{"count":105},"Нефтьмагистраль":{"count":66},"ОККО":{"count":316},"ОМВ":{"count":55},"Октан":{"count":53},"ПТК":{"count":104},"Петрол":{"count":124},"Пропан":{"count":83},"Роснефть":{"count":957},"Сибнефть":{"count":51},"Сургутнефтегаз":{"count":95},"ТНК":{"count":588},"Татнефтепродукт":{"count":58},"Татнефть":{"count":331},"Укрнафта":{"count":228},"דור אלון":{"count":126},"דלק":{"count":160},"סונול":{"count":159},"פז":{"count":209},"محطة وقود":{"count":221},"محطه وقود":{"count":98},"پمپ بنزین":{"count":559},"پمپ گاز":{"count":152},"บางจาก":{"count":214},"ป.ต.ท.":{"count":414},"เชลล์":{"count":90},"เอสโซ่":{"count":82},"エッソ":{"count":70},"エネオス":{"count":301},"コスモ石油":{"count":415},"ゼネラル":{"count":75},"中国石化":{"count":104},"中国石化 Sinopec":{"count":61},"中国石油":{"count":82},"中油":{"count":64},"出光":{"count":620,"tags":{"name:en":"IDEMITSU"}},"加油站":{"count":60},"台灣中油":{"count":257},"昭和シェル":{"count":274}},"hospital":{"Cruz Roja":{"count":93},"IMSS":{"count":64},"Инфекционное отделение":{"count":91},"Кожно-венерологический диспансер":{"count":57},"Районная больница":{"count":88},"Роддом":{"count":133},"Родильный дом":{"count":75},"Скорая помощь":{"count":75},"ФАП":{"count":108},"ЦРБ":{"count":122},"Центральная районная больница":{"count":144},"โรงพยาบาลส่งเสริมสุขภาพตำบล":{"count":69}},"ice_cream":{"Baskin-Robbins":{"count":69,"tags":{"amenity":"ice_cream"}},"Cold Stone Creamery":{"count":66},"Grido":{"count":163}},"kindergarten":{"Amado Nervo":{"count":64},"Anganwadi":{"count":85},"Arche Noah":{"count":67},"Benito Juarez":{"count":89},"CONAFE Preescolar":{"count":90},"Cuauhtemoc":{"count":54},"Cursos Comunitarios":{"count":74},"Educacion Inicial de CONAFE No Escolarizado":{"count":184},"Emiliano Zapata":{"count":60},"Estefania Casta�eda":{"count":53},"Evangelischer Kindergarten":{"count":320},"Federico Froebel":{"count":88},"Gabriela Mistral":{"count":129},"Jean Piaget":{"count":82},"Jose Vasconcelos":{"count":71},"Juan Escutia":{"count":82},"Katholischer Kindergarten":{"count":99},"Kindergarten Regenbogen":{"count":62},"Kindergarten St. Josef":{"count":55},"Kindergarten St. Martin":{"count":55},"Maria Montessori":{"count":93},"Miguel Hidalgo Y Costilla":{"count":57},"Ni�os Heroes":{"count":68},"PAUD":{"count":82},"Pusteblume":{"count":54},"Rosaura Zapata":{"count":68},"Sor Juana Ines De La Cruz":{"count":76},"Spatzennest":{"count":54},"Städtischer Kindergarten":{"count":103},"Villa Kunterbunt":{"count":88},"Waldkindergarten":{"count":111},"Waldorfkindergarten":{"count":71},"Óvoda":{"count":72},"Детсад":{"count":65},"Детский сад \"Солнышко\"":{"count":83},"Детский сад № 1":{"count":54},"Детский сад №1":{"count":150},"Детский сад №10":{"count":77},"Детский сад №11":{"count":81},"Детский сад №12":{"count":57},"Детский сад №13":{"count":57},"Детский сад №14":{"count":76},"Детский сад №15":{"count":72},"Детский сад №16":{"count":58},"Детский сад №17":{"count":67},"Детский сад №18":{"count":77},"Детский сад №19":{"count":62},"Детский сад №2":{"count":155},"Детский сад №22":{"count":60},"Детский сад №24":{"count":53},"Детский сад №25":{"count":56},"Детский сад №27":{"count":54},"Детский сад №29":{"count":57},"Детский сад №3":{"count":129},"Детский сад №33":{"count":55},"Детский сад №4":{"count":86},"Детский сад №5":{"count":106},"Детский сад №6":{"count":93},"Детский сад №7":{"count":98},"Детский сад №8":{"count":80},"Детский сад №9":{"count":80},"Дитячий садок":{"count":58},"Сказка":{"count":52},"Солнышко":{"count":99},"Теремок":{"count":59},"საბავშვო ბაღი":{"count":69},"中央保育所":{"count":56}},"library":{"Biblioteca Comunale":{"count":212},"Biblioteca comunale":{"count":187},"Biblioteka Publiczna":{"count":78},"Bibliothèque Municipale":{"count":299},"Bibliothèque municipale":{"count":247},"Bücherei":{"count":113},"Central Library":{"count":65},"Gemeindebücherei":{"count":150},"Gminna Biblioteka Publiczna":{"count":71},"Miejska Biblioteka Publiczna":{"count":66},"Médiathèque":{"count":287},"Městská knihovna":{"count":60},"Public Library":{"count":91},"Stadtbibliothek":{"count":232},"Stadtbücherei":{"count":289},"Городская библиотека":{"count":69},"Детская библиотека":{"count":260},"Центральная библиотека":{"count":83},"Центральная городская библиотека":{"count":61},"图书馆":{"count":65}},"pharmacy":{"36.6":{"count":57},"Adler-Apotheke":{"count":375},"Alte Apotheke":{"count":99},"Apollo Pharmacy":{"count":87},"Apotek":{"count":62},"Apotek Hjärtat":{"count":51},"Apotheke am Markt":{"count":83},"Bahnhof Apotheke":{"count":51},"Bahnhof-Apotheke":{"count":90},"Bartell Drugs":{"count":53},"Benavides":{"count":83},"Benu":{"count":61},"Boots":{"count":1348},"Botica":{"count":118},"Brunnen-Apotheke":{"count":77},"Burg-Apotheke":{"count":76},"Bären-Apotheke":{"count":111},"CVS":{"count":3228},"Camelia":{"count":54},"Catena":{"count":112},"Chemist Warehouse":{"count":82},"Clicks":{"count":123},"Cruz Azul":{"count":97},"Cruz Verde":{"count":223},"Dbam o Zdrowie":{"count":68},"Dr. Max":{"count":324},"Droga Raia":{"count":152},"Drogaria São Paulo":{"count":87},"Drogasil":{"count":157},"Duane Reade":{"count":91},"Eczane":{"count":88},"Engel-Apotheke":{"count":143},"Eurovaistinė":{"count":89},"Familiprix":{"count":70},"Farmacenter":{"count":65},"Farmacia Centrale":{"count":61},"Farmacia Comunale":{"count":196},"Farmacia Guadalajara":{"count":146},"Farmacia del Ahorro":{"count":65},"Farmacias Ahumada":{"count":182},"Farmacias Cruz Azul":{"count":134},"Farmacias Cruz Verde":{"count":162},"Farmacias Económicas":{"count":63},"Farmacias Guadalajara":{"count":107},"Farmacias SalcoBrand":{"count":140},"Farmacias Sana Sana":{"count":111},"Farmacias Similares":{"count":137},"Farmacias del Ahorro":{"count":187},"Farmacity":{"count":191},"Farmahorro":{"count":53},"Farmatodo":{"count":165},"Felicia":{"count":56},"Fybeca":{"count":52},"Generika Drugstore":{"count":52},"Gintarinė vaistinė":{"count":121},"Guardian":{"count":71},"Gyógyszertár":{"count":59},"H-E-B Pharmacy":{"count":239},"Hirsch-Apotheke":{"count":180},"Hubertus Apotheke":{"count":120},"Inkafarma":{"count":234},"Jean Coutu":{"count":132},"Kinney Drugs":{"count":74},"Kur-Apotheke":{"count":52},"Linden-Apotheke":{"count":224},"Ljekarna":{"count":77},"Lloyds Pharmacy":{"count":539},"Lékárna":{"count":52},"Löwen-Apotheke":{"count":397},"Marien-Apotheke":{"count":370},"Markt-Apotheke":{"count":207},"Mercury Drug":{"count":584},"Mifarma":{"count":195},"Mēness aptieka":{"count":64},"Neue Apotheke":{"count":129},"Pague Menos":{"count":74},"Panvel":{"count":77},"Park-Apotheke":{"count":54},"Pharmacie Centrale":{"count":218},"Pharmacie Principale":{"count":62},"Pharmacie de l'Hôtel de Ville":{"count":52},"Pharmacie de la Gare":{"count":114},"Pharmacie de la Mairie":{"count":71},"Pharmacie de la Poste":{"count":68},"Pharmacie du Centre":{"count":154},"Pharmacie du Marché":{"count":110},"Pharmacie du Parc":{"count":60},"Pharmaprix":{"count":99},"Pharmasave":{"count":129},"Punkt Apteczny":{"count":53},"Rathaus-Apotheke":{"count":181},"Rats-Apotheke":{"count":126},"Rexall":{"count":109},"Rite Aid":{"count":1481},"Rose Pharmacy":{"count":99},"Rosen-Apotheke":{"count":205},"Rowlands Pharmacy":{"count":127},"SalcoBrand":{"count":112},"Sana Sana":{"count":95},"Schloss-Apotheke":{"count":62},"Sensiblu":{"count":115},"Shoppers Drug Mart":{"count":713},"Sonnen-Apotheke":{"count":372},"South Star Drug":{"count":69},"Stadt-Apotheke":{"count":397},"Stern-Apotheke":{"count":83},"Superdrug":{"count":177},"São João":{"count":54},"The Generics Pharmacy":{"count":211},"Uniprix":{"count":63},"Walgreens":{"count":3314},"Walgreens Pharmacy":{"count":76},"Walmart Pharmacy":{"count":99},"Watsons":{"count":110},"Well Pharmacy":{"count":61},"centro naturista":{"count":123},"А5":{"count":94},"Айболит":{"count":88},"Аптека 36,6":{"count":285},"Аптека низких цен":{"count":65},"Аптека низьких цін":{"count":88},"Аптека от склада":{"count":83},"Аптека №1":{"count":92},"Аптечный пункт":{"count":285},"Арніка":{"count":124},"Бережная аптека":{"count":67},"Будь здоров":{"count":63},"Вита":{"count":140},"Горздрав":{"count":395},"Живика":{"count":105},"Здоровье":{"count":87},"Имплозия":{"count":84},"Классика":{"count":102},"Ладушка":{"count":53},"Мед-сервіс":{"count":59},"Мелодия здоровья":{"count":60},"Невис":{"count":151},"Норма":{"count":89},"Озерки":{"count":54},"Панацея":{"count":68},"Первая помощь":{"count":132},"Планета здоровья":{"count":140},"Радуга":{"count":139},"Ригла":{"count":215},"Семейная":{"count":52},"Социальная аптека":{"count":62},"Столички":{"count":83},"Фармакопейка":{"count":85},"Фармакор":{"count":106},"Фармация":{"count":187},"Фармленд":{"count":108},"Центральная аптека":{"count":57},"סופר-פארם":{"count":93},"داروخانه":{"count":264},"داروخانه شبانه روزی":{"count":54},"صيدلية":{"count":148},"くすりの福太郎":{"count":51},"さくら薬局":{"count":52},"ウエルシア":{"count":84},"カワチ薬品":{"count":52},"クリエイト":{"count":53},"サンドラッグ":{"count":130},"スギ薬局":{"count":134},"セイジョー":{"count":58},"ツルハドラッグ":{"count":185},"ドラッグてらしま (Drug Terashima)":{"count":58},"マツモトキヨシ":{"count":221},"丁丁藥局":{"count":75}},"pub":{"Black Bull":{"count":55},"Commercial Hotel":{"count":62},"Cross Keys":{"count":64},"Irish Pub":{"count":107},"Kings Arms":{"count":81},"Kings Head":{"count":65},"New Inn":{"count":100},"Prince of Wales":{"count":89},"Queens Head":{"count":55},"Red Lion":{"count":201},"Rose & Crown":{"count":63},"Rose and Crown":{"count":82},"Royal Hotel":{"count":64},"Royal Oak":{"count":172},"The Albion":{"count":51},"The Anchor":{"count":68},"The Angel":{"count":55},"The Beehive":{"count":52},"The Bell":{"count":128},"The Bell Inn":{"count":58},"The Black Horse":{"count":100},"The Bull":{"count":82},"The Castle":{"count":63},"The Chequers":{"count":74},"The Cricketers":{"count":56},"The Cross Keys":{"count":58},"The Crown":{"count":252},"The Crown Inn":{"count":88},"The Fox":{"count":76},"The George":{"count":119},"The Green Man":{"count":59},"The Greyhound":{"count":99},"The Kings Arms":{"count":65},"The Kings Head":{"count":68},"The New Inn":{"count":126},"The Plough":{"count":182},"The Plough Inn":{"count":57},"The Queens Head":{"count":61},"The Railway":{"count":112},"The Red Lion":{"count":271},"The Rising Sun":{"count":74},"The Royal Oak":{"count":223},"The Ship":{"count":92},"The Ship Inn":{"count":98},"The Star":{"count":72},"The Star Inn":{"count":53},"The Sun Inn":{"count":51},"The Swan":{"count":155},"The Swan Inn":{"count":59},"The Victoria":{"count":72},"The Wheatsheaf":{"count":126},"The White Hart":{"count":247},"The White Horse":{"count":234},"The White Lion":{"count":75},"The White Swan":{"count":55},"魚民":{"count":119},"鳥貴族":{"count":57}},"restaurant":{"Adler":{"count":228},"Adria":{"count":60},"Adyar Ananda Bhavan":{"count":60},"Akropolis":{"count":212},"Ali Baba":{"count":59},"Alte Post":{"count":68},"Applebee's":{"count":977},"Asia":{"count":78},"Athen":{"count":75},"Athos":{"count":61},"Autogrill":{"count":60},"Bahnhof":{"count":56},"Bella Italia":{"count":194},"Bella Napoli":{"count":88},"Big Boy":{"count":58},"Bistro":{"count":64},"Bob Evans":{"count":269},"Bonefish Grill":{"count":73},"Boston Market":{"count":91},"Boston Pizza":{"count":278},"Buffalo Grill":{"count":282},"Buffalo Wild Wings":{"count":454},"Bären":{"count":75},"Cafeteria":{"count":65},"California Pizza Kitchen":{"count":116},"Campanile":{"count":55},"Canteen":{"count":91},"Capri":{"count":56},"Captain D's":{"count":54},"Carluccio's":{"count":57},"Carpe Diem":{"count":60},"Carrabba's Italian Grill":{"count":62},"Casa Mia":{"count":64},"Casablanca":{"count":61},"Cheesecake Factory":{"count":52},"Chifa":{"count":86},"Chili's":{"count":698},"China Buffet":{"count":54},"China Garden":{"count":114},"China House":{"count":72},"China Town":{"count":117},"China Wok":{"count":100},"Chiquito":{"count":55},"Chuck E. Cheese's":{"count":54},"Cici's Pizza":{"count":51},"CoCo壱番屋":{"count":77},"Cold Stone Creamery":{"count":67},"Comedor":{"count":60},"Comida China":{"count":52},"Courtepaille":{"count":170},"Cracker Barrel":{"count":392},"Da Grasso":{"count":63},"Da Vinci":{"count":88},"Delphi":{"count":105},"Denny's":{"count":850},"Deutsches Haus":{"count":93},"Dionysos":{"count":75},"Dolce Vita":{"count":121},"Dorfkrug":{"count":60},"Dunkin' Donuts":{"count":94,"tags":{"cuisine":"donut"}},"East Side Mario's":{"count":53},"El Greco":{"count":112},"El Paso":{"count":60},"El Rancho":{"count":82},"Europa":{"count":61},"Famous Dave's":{"count":62},"Firehouse Subs":{"count":85},"Five Guys":{"count":91},"Flunch":{"count":179},"Frankie & Benny's":{"count":151},"Friendly's":{"count":113},"Gasthaus Krone":{"count":93},"Gasthaus zur Linde":{"count":59},"Gasthof zur Post":{"count":109},"Golden Corral":{"count":209},"Golden Dragon":{"count":62},"Great Wall":{"count":54},"Grüner Baum":{"count":122},"Gusto":{"count":74},"Hard Rock Cafe":{"count":96},"Hardee's":{"count":56,"tags":{"cuisine":"burger"}},"Harvester":{"count":75},"Hellas":{"count":66},"Hippopotamus":{"count":115},"Hirsch":{"count":83},"Hirschen":{"count":86},"Hong Kong":{"count":126},"Hooters":{"count":190},"IHOP":{"count":758},"IL Патио":{"count":51},"Jason's Deli":{"count":73},"Jimmy John's":{"count":150,"tags":{"cuisine":"sandwich"}},"Joe's Crab Shack":{"count":70},"Jägerhof":{"count":54},"Kantine":{"count":104},"Kelsey's":{"count":66},"Kirchenwirt":{"count":94},"Kreta":{"count":70},"Kreuz":{"count":85},"Krone":{"count":179},"Kudu":{"count":172},"L'Escale":{"count":66},"L'Osteria":{"count":80},"La Bodega":{"count":55},"La Boucherie":{"count":80},"La Cantina":{"count":105},"La Casa":{"count":66},"La Casona":{"count":62},"La Dolce Vita":{"count":129},"La Fontana":{"count":62},"La Gondola":{"count":60},"La Hacienda":{"count":54},"La Pataterie":{"count":116},"La Pergola":{"count":87},"La Perla":{"count":85},"La Piazza":{"count":123},"La Piazzetta":{"count":77},"La Place":{"count":55},"La Scala":{"count":62},"La Strada":{"count":74},"La Tagliatella":{"count":69},"La Tasca":{"count":56},"La Taverna":{"count":58},"La Terrasse":{"count":82},"La Terraza":{"count":56},"La Terrazza":{"count":57},"La Trattoria":{"count":91},"Lamm":{"count":69},"Linde":{"count":114},"Lindenhof":{"count":95},"Little Caesars":{"count":80},"Little Chef":{"count":62},"Little Italy":{"count":90},"Logan's Roadhouse":{"count":89},"LongHorn Steakhouse":{"count":183},"Lotus":{"count":87},"Léon de Bruxelles":{"count":63},"Löwen":{"count":141},"MK Restaurants":{"count":65},"Maharaja":{"count":52},"Mamma Mia":{"count":130},"Mandarin":{"count":90},"Mang Inasal":{"count":128},"Marco Polo":{"count":62},"Marco's Pizza":{"count":53},"McAlister's Deli":{"count":51},"Mediterraneo":{"count":55},"Mellow Mushroom":{"count":73},"Mensa":{"count":148},"Milano":{"count":77},"Mimi's Cafe":{"count":52},"Moe's Southwest Grill":{"count":79},"Mykonos":{"count":89},"Mythos":{"count":61},"Nando's":{"count":412},"Noodles & Company":{"count":106},"O'Charley's":{"count":61},"Oasis":{"count":73},"Ocean Basket":{"count":71},"Ochsen":{"count":94},"Old Chicago":{"count":54},"Olive Garden":{"count":504},"Olympia":{"count":86},"Osaka":{"count":52},"Outback Steakhouse":{"count":399},"P.F. Chang's":{"count":53},"Pancake House":{"count":79},"Panda":{"count":52},"Panera Bread":{"count":582},"Panorama":{"count":102},"Papa Murphy's":{"count":66},"Parrilla":{"count":62},"Peking":{"count":68},"Perkins":{"count":157},"Pinocchio":{"count":63},"Pizza Express":{"count":417},"Pizza Factory":{"count":59},"Pizza House":{"count":56},"Pizza Hut":{"count":2688,"tags":{"cuisine":"pizza"}},"Pizza Ranch":{"count":77},"Pizzeria Italia":{"count":65},"Pizzeria Milano":{"count":51},"Pizzeria Napoli":{"count":53},"Pizzeria Roma":{"count":86},"Pizzeria Venezia":{"count":54},"Poivre Rouge":{"count":56},"Pollo Campero":{"count":53},"Pomodoro":{"count":62},"Portofino":{"count":67},"Poseidon":{"count":145},"Prezzo":{"count":147},"Qdoba":{"count":81},"Qdoba Mexican Grill":{"count":54},"Ratskeller":{"count":161},"Red Lobster":{"count":419},"Red Robin":{"count":312},"Restaurante Universitário":{"count":53},"Rhodos":{"count":94},"Ristorante Del Arte":{"count":160},"Roma":{"count":85},"Rose":{"count":51},"Round Table Pizza":{"count":100},"Ruby Tuesday":{"count":303},"Rössle":{"count":54},"Rössli":{"count":93},"Saigon":{"count":51},"Sakura":{"count":139},"San Marco":{"count":88},"Santorini":{"count":59},"Schwarzer Adler":{"count":65},"Schützenhaus":{"count":151},"Shakey's":{"count":64},"Shalimar":{"count":53},"Shanghai":{"count":96},"Shari's":{"count":75},"Shoney's":{"count":55},"Sizzler":{"count":90},"Sonic":{"count":80,"tags":{"cuisine":"burger"}},"Sonne":{"count":121},"Sphinx":{"count":66},"Sportheim":{"count":113},"Spur":{"count":70},"Starbucks":{"count":54,"tags":{"cuisine":"coffee_shop"}},"Steak 'n Shake":{"count":86,"tags":{"cuisine":"burger"}},"Sternen":{"count":85},"Subway":{"count":1108},"Sunset Grill":{"count":55},"Sushi":{"count":88},"Sushi Bar":{"count":68},"Swiss Chalet":{"count":162},"Syrtaki":{"count":65},"TGI Friday's":{"count":364},"Taj Mahal":{"count":183},"Taste of India":{"count":68},"Taverna":{"count":69},"Telepizza":{"count":109},"Texas Roadhouse":{"count":232},"The Cheesecake Factory":{"count":52},"Tim Hortons":{"count":61},"Toby Carvery":{"count":51},"Tony Roma's":{"count":63},"Toscana":{"count":76},"Trattoria":{"count":70},"Traube":{"count":68},"Vapiano":{"count":136},"Venezia":{"count":68},"Village Inn":{"count":149},"Vips":{"count":109},"Waffle House":{"count":521},"Wagamama":{"count":111},"Waldschänke":{"count":52},"Warung":{"count":73},"Wasabi":{"count":70},"Wimpy":{"count":66},"Zaxby's":{"count":60},"Zizzi":{"count":102},"Zorbas":{"count":62},"Zum Hirschen":{"count":52},"Zum Löwen":{"count":80},"Zur Krone":{"count":96},"Zur Linde":{"count":228},"Zur Post":{"count":125},"Zur Sonne":{"count":77},"Евразия":{"count":93},"Ресторан":{"count":60},"Тануки":{"count":62},"Якитория":{"count":84},"رستوران":{"count":72},"مطعم":{"count":52},"すき家":{"count":61,"tags":{"name:en":"SUKIYA"}},"はま寿司":{"count":67},"びっくりドンキー":{"count":120},"やよい軒":{"count":71},"ガスト":{"count":512,"tags":{"name:en":"Gusto"}},"ココス":{"count":142},"サイゼリア":{"count":54},"サイゼリヤ":{"count":285},"ジョイフル":{"count":83},"ジョナサン":{"count":139},"ジョリーパスタ":{"count":75},"デニーズ":{"count":199},"バーミヤン":{"count":130},"ロイヤルホスト":{"count":108},"丸亀製麺":{"count":98},"八方雲集":{"count":145},"吉野家":{"count":61},"夢庵":{"count":67},"大戸屋":{"count":68},"大阪王将":{"count":68},"天下一品":{"count":70},"安楽亭":{"count":60},"牛角":{"count":107},"食堂":{"count":63},"餃子の王将":{"count":212},"바다횟집 (Bada Fish Restaurant)":{"count":52}},"school":{"Adolfo Lopez Mateos":{"count":137},"Agustin Ya�ez":{"count":57},"Albert-Schweitzer-Schule":{"count":81},"Amado Nervo":{"count":85},"Astrid-Lindgren-Schule":{"count":77},"Benito Juarez":{"count":294},"Brown School":{"count":54},"CEM":{"count":215},"Center School":{"count":115},"Central Elementary School":{"count":179},"Central High School":{"count":130},"Central School":{"count":215},"Colegio San José":{"count":74},"Collège Jean Moulin":{"count":68},"Collège privé Saint-Joseph":{"count":60},"Cuauhtemoc":{"count":152},"Curso Comunitario":{"count":57},"Cursos Comunitarios":{"count":116},"EPP":{"count":112},"Emiliano Zapata":{"count":286},"Fairview Elementary School":{"count":64},"Fairview School":{"count":164},"Francisco I Madero":{"count":86},"Francisco I. Madero":{"count":52},"Francisco Villa":{"count":116},"Franklin Elementary School":{"count":96},"Franklin School":{"count":126},"Garfield Elementary School":{"count":69},"Garfield School":{"count":58},"Gimnazjum nr 1":{"count":59},"Government School":{"count":60},"Gregorio Torres Quintero":{"count":53},"Groupe Scolaire":{"count":57},"Guadalupe Victoria":{"count":58},"Highland School":{"count":71},"Hillcrest Elementary School":{"count":63},"Holy Cross School":{"count":68},"Holy Family School":{"count":77},"Holy Trinity School":{"count":59},"Ignacio Allende":{"count":51},"Ignacio Zaragoza":{"count":98},"Immaculate Conception School":{"count":83},"Jackson Elementary School":{"count":53},"Jackson School":{"count":56},"Jefferson Elementary School":{"count":177},"Jefferson School":{"count":108},"Jose Clemente Orozco":{"count":59},"Jose Ma Morelos Y Pavon":{"count":120},"Jose Vasconcelos":{"count":73},"Josefa Ortiz De Dominguez":{"count":78},"Juan Escutia":{"count":121},"Justo Sierra":{"count":118},"Kumon":{"count":66},"Lazaro Cardenas":{"count":68},"Lazaro Cardenas Del Rio":{"count":153},"Leona Vicario":{"count":64},"Liberty Elementary School":{"count":56},"Liberty School":{"count":84},"Lincoln Elementary School":{"count":264},"Lincoln School":{"count":269},"Longfellow Elementary School":{"count":55},"Longfellow School":{"count":53},"Madison Elementary School":{"count":55},"Manuel Lopez Cotilla":{"count":107},"Maple Grove School":{"count":51},"McKinley Elementary School":{"count":62},"McKinley School":{"count":63},"Miguel Hidalgo":{"count":86},"Miguel Hidalgo Y Costilla":{"count":213},"Miller School":{"count":66},"Mount Pleasant School":{"count":61},"Mount Zion School":{"count":53},"Mountain View Elementary School":{"count":52},"New Hope School":{"count":51},"Nicolas Bravo":{"count":58},"Ni�os Heroes":{"count":155},"Nombre En Tramite":{"count":126},"North Elementary School":{"count":57},"Oak Grove School":{"count":148},"Pedro Moreno":{"count":69},"Pestalozzischule":{"count":84},"Pine Grove School":{"count":63},"Pleasant Hill School":{"count":110},"Pleasant Valley School":{"count":85},"Pleasant View School":{"count":61},"Primaria Comunitaria":{"count":59},"Ramon Corona":{"count":54},"Ricardo Flores Magon":{"count":91},"Riverside School":{"count":76},"Roosevelt Elementary School":{"count":112},"Roosevelt School":{"count":114},"SD":{"count":76},"SDN":{"count":290},"Sacred Heart School":{"count":206},"Saint Francis School":{"count":56},"Saint James School":{"count":83},"Saint Johns School":{"count":173},"Saint Joseph School":{"count":147},"Saint Josephs School":{"count":157},"Saint Kizito Primary School":{"count":61},"Saint Mary School":{"count":54},"Saint Marys School":{"count":256},"Saint Patricks School":{"count":80},"Saint Paul School":{"count":53},"Saint Pauls School":{"count":74},"Saint Peters School":{"count":81},"Schillerschule":{"count":61},"School Number 1":{"count":233},"School Number 2":{"count":206},"School Number 3":{"count":184},"School Number 4":{"count":126},"Smith School":{"count":60},"Sor Juana Ines De La Cruz":{"count":56},"South Elementary School":{"count":53},"Sunnyside School":{"count":60},"Szkoła Podstawowa nr 1":{"count":78},"Szkoła Podstawowa nr 2":{"count":75},"Szkoła Podstawowa nr 3":{"count":60},"Trinity School":{"count":85},"UNIDAD EDUCATIVA":{"count":106},"Union School":{"count":128},"Valentin Gomez Farias":{"count":71},"Venustiano Carranza":{"count":64},"Vicente Guerrero":{"count":159},"Volkshochschule":{"count":105},"Volksschule":{"count":366},"Washington Elementary School":{"count":192},"Washington School":{"count":213},"West Elementary School":{"count":58},"White School":{"count":51},"Wilson Elementary School":{"count":66},"Wilson School":{"count":80},"Általános iskola":{"count":105},"École Jules Ferry":{"count":51},"École Notre-Dame":{"count":61},"École Saint-Joseph":{"count":96},"École primaire Jean Jaurès":{"count":71},"École primaire Jules Ferry":{"count":82},"École primaire privée Notre-Dame":{"count":69},"École primaire privée Saint-Joseph":{"count":132},"École primaire privée Sainte-Marie":{"count":63},"École élémentaire Jules Ferry":{"count":52},"Școala Generală":{"count":51},"Școală":{"count":53},"Вечерняя школа":{"count":53},"Гимназия №1":{"count":96},"ДЮСШ":{"count":63},"Средняя школа №1":{"count":80},"Средняя школа №2":{"count":86},"Средняя школа №3":{"count":58},"Школа № 1":{"count":130},"Школа № 2":{"count":117},"Школа № 3":{"count":80},"Школа № 4":{"count":77},"Школа № 5":{"count":55},"Школа №1":{"count":576},"Школа №10":{"count":167},"Школа №11":{"count":148},"Школа №12":{"count":136},"Школа №13":{"count":129},"Школа №14":{"count":123},"Школа №15":{"count":129},"Школа №16":{"count":99},"Школа №17":{"count":117},"Школа №18":{"count":111},"Школа №19":{"count":98},"Школа №2":{"count":509},"Школа №20":{"count":100},"Школа №21":{"count":72},"Школа №22":{"count":72},"Школа №23":{"count":75},"Школа №24":{"count":78},"Школа №25":{"count":57},"Школа №26":{"count":64},"Школа №27":{"count":58},"Школа №28":{"count":53},"Школа №3":{"count":393},"Школа №31":{"count":55},"Школа №35":{"count":54},"Школа №4":{"count":281},"Школа №5":{"count":275},"Школа №6":{"count":217},"Школа №7":{"count":215},"Школа №8":{"count":188},"Школа №9":{"count":183},"مدرسة":{"count":92},"مدرسه":{"count":500},"市立南中学校":{"count":53},"市立南小学校":{"count":56},"市立東中学校":{"count":54}},"social_facility":{"Safe Haven":{"count":92},"Детский дом":{"count":70},"Социальный участковый":{"count":195}},"theatre":{"Amfiteatr":{"count":97},"Amphitheater":{"count":110},"Amphitheatre":{"count":109},"Freilichtbühne":{"count":78},"Teatro Comunale":{"count":56}}}; + var leisure = {"fitness_centre":{"Anytime Fitness":{"count":143},"Gold's Gym":{"count":61},"LA Fitness":{"count":126},"Planet Fitness":{"count":106},"Snap Fitness":{"count":67}},"playground":{"Çocuk Parkı":{"count":60},"놀이터":{"count":292}},"sports_centre":{"Anytime Fitness":{"count":152},"Complejo Municipal de Deportes":{"count":88},"Complexe Sportif":{"count":51},"Curves":{"count":91},"Fitness First":{"count":70},"Gold's Gym":{"count":82},"Kieser Training":{"count":90},"LA Fitness":{"count":72},"Life Time Fitness":{"count":76},"McFit":{"count":60},"Mrs. Sporty":{"count":76},"Orlik":{"count":82},"Pabellón Municipal de Deportes":{"count":109},"Palestra Comunale":{"count":81},"Planet Fitness":{"count":106},"Salle Omnisport":{"count":57},"Schützenhaus":{"count":79},"Snap Fitness":{"count":51},"Virgin Active":{"count":69},"YMCA":{"count":174},"ДЮСШ":{"count":82},"Ледовый дворец":{"count":54},"体育館":{"count":80}},"swimming_pool":{"Schwimmerbecken":{"count":57},"Yüzme Havuzu":{"count":51},"プール":{"count":56},"游泳池":{"count":55}}}; + var man_made = {"windmill":{"De Hoop":{"count":57}}}; + var shop = {"alcohol":{"Alko":{"count":170},"BC Liquor Store":{"count":66},"BWS":{"count":157},"Bargain Booze":{"count":140},"Beer Store":{"count":66},"Botilleria":{"count":121},"Dan Murphy's":{"count":61},"Gall & Gall":{"count":511},"LCBO":{"count":430},"Liquor Depot":{"count":53},"Liquor Store":{"count":72},"Liquorland":{"count":112},"Mitra":{"count":60},"Nicolas":{"count":253},"SAQ":{"count":169},"Systembolaget":{"count":271},"The Beer Store":{"count":231},"Vinmonopolet":{"count":66},"Алкомаркет":{"count":67},"Ароматный мир":{"count":196},"Бристоль":{"count":329},"Градус":{"count":52},"Живое пиво":{"count":182},"Красное & Белое":{"count":989},"Кристалл":{"count":56},"Норман":{"count":146},"Отдохни":{"count":75},"Пиво":{"count":73},"Разливное пиво":{"count":143}},"baby_goods":{"Aubert":{"count":56},"Babies R Us":{"count":80},"BabyOne":{"count":52},"西松屋":{"count":53}},"bakery":{"AILI":{"count":53},"Anker":{"count":85},"Awiteks":{"count":53},"Backshop":{"count":57},"Backwerk":{"count":161},"Baguette":{"count":72},"Bakers Delight":{"count":75},"Bakker Bart":{"count":97},"Banette":{"count":111},"Bäckerei Fuchs":{"count":62},"Bäckerei Grimminger":{"count":51},"Bäckerei Müller":{"count":68},"Bäckerei Schmidt":{"count":103},"Bäckerei Schneider":{"count":52},"Cooplands":{"count":63},"Dat Backhus":{"count":81},"Der Beck":{"count":114},"Der Mann":{"count":53},"Ditsch":{"count":70},"Dunkin' Donuts":{"count":55,"tags":{"cuisine":"donut"}},"Fornetti":{"count":113},"Goeken backen":{"count":53},"Goldilocks":{"count":124},"Greggs":{"count":613},"Hofpfisterei":{"count":134},"Ihle":{"count":108},"Julie's Bakeshop":{"count":57},"K&U":{"count":117},"K&U Bäckerei":{"count":54},"Kamps":{"count":268},"La Mie Câline":{"count":56},"Le Crobag":{"count":54},"Le Fournil":{"count":57},"Lila Bäcker":{"count":107},"Lipóti Pékség":{"count":54},"Marie Blachère":{"count":89},"Mlinar":{"count":80},"Musmanni":{"count":81},"Oebel":{"count":65},"Paul":{"count":186},"Red Ribbon":{"count":72},"Schäfer's":{"count":146},"Sehne":{"count":91},"Stadtbäckerei":{"count":60},"Steinecke":{"count":268},"Sternenbäck":{"count":89},"Ströck":{"count":62},"Wiener Feinbäcker":{"count":55},"von Allwörden":{"count":65},"Булочная":{"count":71},"Горячий хлеб":{"count":54},"Каравай":{"count":56},"Кулиничи":{"count":121},"Кулиничі":{"count":59},"Свежий хлеб":{"count":68},"Хлеб":{"count":177},"مخبز":{"count":72},"مخبزة":{"count":55},"نان لواش":{"count":54},"نانوایی":{"count":665},"نانوایی بربری":{"count":140},"نانوایی سنگک":{"count":68},"نانوایی سنگکی":{"count":52},"نانوایی لواش":{"count":63}},"beauty":{"Marionnaud":{"count":54},"Sally Beauty Supply":{"count":151},"Yves Rocher":{"count":654}},"bed":{"Dänisches Bettenlager":{"count":157},"Matratzen Concord":{"count":361},"Mattress Firm":{"count":173},"Sleepy's":{"count":52}},"beverages":{"50嵐":{"count":101},"Dursty":{"count":77},"Edeka Getränkemarkt":{"count":69},"Fristo":{"count":88},"Getränke Hoffmann":{"count":187},"Getränkeland":{"count":81},"Getränkemarkt":{"count":110},"Orterer Getränkemarkt":{"count":64},"Rewe Getränkemarkt":{"count":256},"Trinkgut":{"count":112},"茶湯會":{"count":56}},"bicycle":{"Giant":{"count":52},"Halfords":{"count":158},"Веломарка":{"count":51},"サイクルベースあさひ":{"count":87}},"bookmaker":{"Betfred":{"count":320},"Coral":{"count":466},"Ladbrokes":{"count":629},"Paddy Power":{"count":127},"William Hill":{"count":634},"ΟΠΑΠ":{"count":102}},"butcher":{"Boucherie Charcuterie":{"count":51},"Carnicería":{"count":78},"Fleischerei Richter":{"count":51},"Húsbolt":{"count":52},"Macelleria":{"count":84},"Vinzenzmurr":{"count":55},"Ариант":{"count":84},"Великолукский мясокомбинат":{"count":173},"Мясная лавка":{"count":226},"Мясницкий ряд":{"count":64},"Мясной":{"count":53},"Мясо":{"count":156},"Наша Ряба":{"count":60},"Свежее мясо":{"count":111}},"car":{"Audi":{"count":191},"BMW":{"count":216},"Chevrolet":{"count":259},"Citroën":{"count":445},"Dacia":{"count":56},"Fiat":{"count":167},"Ford":{"count":446},"Honda":{"count":348},"Hyundai":{"count":421},"Isuzu":{"count":66},"Kia":{"count":456},"Land Rover":{"count":54},"Lexus":{"count":76},"Mazda":{"count":193},"Mercedes-Benz":{"count":447},"Mitsubishi":{"count":176},"Mitsubishi Motors":{"count":60},"NISSAN":{"count":51},"Nissan":{"count":424},"Opel":{"count":218},"Peugeot":{"count":527},"Porsche":{"count":97},"Renault":{"count":701},"Seat":{"count":90},"Skoda":{"count":143},"Subaru":{"count":118},"Suzuki":{"count":178},"Toyota":{"count":597},"Volkswagen":{"count":371},"Volvo":{"count":180}},"car_parts":{"Advance Auto Parts":{"count":306},"AutoZone":{"count":759},"Brezan":{"count":95},"Halfords":{"count":95},"NAPA Auto Parts":{"count":250},"Napa Auto Parts":{"count":61},"O'Reilly Auto Parts":{"count":374},"Repco":{"count":77},"Tokić":{"count":61},"repuestos automotrices":{"count":56},"Автозапчастини":{"count":61},"Автомир":{"count":53},"イエローハット":{"count":80},"オートバックス":{"count":91},"タイヤ館":{"count":83}},"car_repair":{"A.T.U":{"count":457},"Advance Auto Parts":{"count":290},"Borracharia":{"count":56},"Bosch Car Service":{"count":65},"Carglass":{"count":234},"Citroën":{"count":108},"Euromaster":{"count":142},"Feu Vert":{"count":178},"Firestone":{"count":224},"Firestone Complete Auto Care":{"count":73},"Ford":{"count":61},"Garage Renault":{"count":84},"Gomeria":{"count":153},"Gomería":{"count":107},"Goodyear":{"count":97},"Grease Monkey":{"count":57},"Halfords":{"count":56},"Jiffy Lube":{"count":464},"Kwik Fit":{"count":249},"Lubricentro":{"count":83},"Meineke":{"count":52},"Mekonomen":{"count":59},"Midas":{"count":462},"Mr. Lube":{"count":56},"NAPA Auto Parts":{"count":82},"Norauto":{"count":257},"O'Reilly Auto Parts":{"count":227},"Pep Boys":{"count":79},"Peugeot":{"count":152},"Pit Stop":{"count":84},"Point S":{"count":59},"Renault":{"count":294},"Roady":{"count":82},"Sears Auto Center":{"count":59},"Speedy":{"count":192},"Stacja Kontroli Pojazdów":{"count":70},"Taller":{"count":63},"Toyota":{"count":63},"Valvoline":{"count":52},"Valvoline Instant Oil Change":{"count":92},"Wulkanizacja":{"count":84},"ÖAMTC":{"count":52},"Автомастерская":{"count":93},"Авторемонт":{"count":57},"Автосервис":{"count":799},"Автосервис+шиномонтаж":{"count":66},"Вулканизация":{"count":72},"Замена масла":{"count":98},"СТО":{"count":1058},"Шиномонтаж":{"count":3591},"шиномонтаж":{"count":173}},"carpet":{"Carpet Right":{"count":111},"Carpetright":{"count":53}},"charity":{"Age UK":{"count":116},"Barnardo's":{"count":56},"British Heart Foundation":{"count":189},"Cancer Research UK":{"count":129},"Goodwill":{"count":120},"Oxfam":{"count":216},"Salvation Army":{"count":63},"Scope":{"count":74},"Sue Ryder":{"count":83}},"chemist":{"7 Дней":{"count":55},"Bipa":{"count":485},"Budnikowsky":{"count":114},"CVS":{"count":58},"Etos":{"count":486},"Kruidvat":{"count":1169},"Matas":{"count":74},"Müller":{"count":350},"Rossmann":{"count":2516},"Schlecker":{"count":51},"Teta":{"count":120},"Trekpleister":{"count":185},"Walgreens":{"count":142},"Watsons":{"count":123},"dm":{"count":1877},"Бытовая химия":{"count":73},"Магнит Косметик":{"count":233},"Мила":{"count":70},"Остров чистоты":{"count":110},"Рубль Бум":{"count":68},"Улыбка радуги":{"count":110},"スギ薬局":{"count":51},"丁丁藥局":{"count":72},"屈臣氏":{"count":134},"康是美":{"count":81}},"clothes":{"AOKI":{"count":119},"AWG":{"count":95},"Ackermans":{"count":98},"Adidas":{"count":224},"Adler":{"count":83},"American Apparel":{"count":89},"American Eagle Outfitters":{"count":93},"Anthropologie":{"count":55},"Ardene":{"count":55},"Armand Thiery":{"count":89},"Banana Republic":{"count":120},"Benetton":{"count":190},"Bershka":{"count":166},"Bonita":{"count":315},"Bonobo":{"count":59},"Brooks Brothers":{"count":55},"Burberry":{"count":63},"Burlington Coat Factory":{"count":104},"Burton":{"count":94},"C&A":{"count":860},"Cache Cache":{"count":59},"Calvin Klein":{"count":78},"Calzedonia":{"count":264},"Camaïeu":{"count":167},"Caroll":{"count":75},"Carter's":{"count":64},"Cecil":{"count":119},"Celio":{"count":206},"Charles Vögele":{"count":133},"Chico's":{"count":96},"Cropp":{"count":68},"Cubus":{"count":65},"Desigual":{"count":175},"Devred":{"count":59},"Didi":{"count":72},"Diesel":{"count":77},"Dorothy Perkins":{"count":85},"Dress Barn":{"count":135},"Dressmann":{"count":67},"Eddie Bauer":{"count":54},"Edgars":{"count":117},"Engbers":{"count":64},"Ernsting's family":{"count":720},"Esprit":{"count":404},"Etam":{"count":121},"Express":{"count":56},"Fat Face":{"count":82},"Forever 21":{"count":124},"Gant":{"count":78},"Gap":{"count":258},"Gerry Weber":{"count":220},"Gina Laura":{"count":80},"Goodwill":{"count":65},"Guess":{"count":146},"Gymboree":{"count":60},"Gémo":{"count":99},"H&M":{"count":1467},"Hallhuber":{"count":63},"House":{"count":67},"Hugo Boss":{"count":109},"Humana":{"count":83},"Hunkemöller":{"count":224},"Intimissimi":{"count":173},"JBC":{"count":54},"Jack & Jones":{"count":174},"Jack Wolfskin":{"count":68},"Jeans Fritz":{"count":110},"Jennyfer":{"count":81},"Jet":{"count":68},"Jigsaw":{"count":51},"Jules":{"count":120},"Justice":{"count":81},"KappAhl":{"count":68},"KiK":{"count":1862},"Kiabi":{"count":276},"La Halle":{"count":148},"Lacoste":{"count":193},"Lane Bryant":{"count":86},"Levi's":{"count":197},"Lindex":{"count":120},"Loft":{"count":62},"Mango":{"count":339},"Marc O'Polo":{"count":82},"Mark's":{"count":76},"Marks & Spencer":{"count":53},"Marshalls":{"count":218},"Massimo Dutti":{"count":109},"Matalan":{"count":144},"Maurices":{"count":70},"Max Mara":{"count":55},"Men's Wearhouse":{"count":128},"Mexx":{"count":68},"Michael Kors":{"count":55},"Mim":{"count":57},"Monsoon":{"count":75},"Mr Price":{"count":99},"NKD":{"count":783},"New Look":{"count":280},"New Yorker":{"count":350},"NewYorker":{"count":54},"Next":{"count":313},"Nike":{"count":122},"Nordstrom Rack":{"count":57},"OVS":{"count":92},"Okaïdi":{"count":63},"Old Navy":{"count":361},"Only":{"count":94},"Orchestra":{"count":117},"Original Marines":{"count":60},"Orsay":{"count":168},"Outfit":{"count":51},"Outlet":{"count":63},"Palmers":{"count":78},"Peacocks":{"count":178},"Peek & Cloppenburg":{"count":69},"Pep":{"count":139},"Pepco":{"count":153},"Petit Bateau":{"count":67},"Pimkie":{"count":163},"Plato's Closet":{"count":53},"Primark":{"count":177},"Promod":{"count":195},"Pull & Bear":{"count":63},"Puma":{"count":65},"Reitmans":{"count":71},"Reserved":{"count":150},"River Island":{"count":125},"Ross":{"count":363},"Sela":{"count":58},"Sergent Major":{"count":77},"Shoeby":{"count":109},"Sisley":{"count":82},"Springfield":{"count":83},"Stefanel":{"count":63},"Steps":{"count":56},"Stradivarius":{"count":103},"Street One":{"count":153},"Superdry":{"count":82},"TJ Maxx":{"count":200},"TK Maxx":{"count":209},"Takko":{"count":843},"Talbots":{"count":54},"Tally Weijl":{"count":151},"Tati":{"count":64},"Terranova":{"count":63},"Tesha":{"count":76},"Tezenis":{"count":98},"The Children's Place":{"count":71},"The North Face":{"count":56},"The Sting":{"count":53},"Timberland":{"count":87},"Toko Pakaian":{"count":72},"Tom Tailor":{"count":120},"Tommy Hilfiger":{"count":206},"Topshop":{"count":62},"Triumph":{"count":132},"Truworths":{"count":72},"Ulla Popken":{"count":117},"Uniqlo":{"count":63},"United Colors of Benetton":{"count":210},"Urban Outfitters":{"count":130},"Vero Moda":{"count":222},"Victoria's Secret":{"count":143},"Vögele":{"count":191},"WE":{"count":68},"Wibra":{"count":99},"Winners":{"count":112},"Woolworths":{"count":119},"Yamamay":{"count":65},"Zara":{"count":540},"Zeeman":{"count":379},"mister*lady":{"count":59},"s.Oliver":{"count":103},"Детская одежда":{"count":59},"Женская одежда":{"count":65},"Липненски":{"count":81},"Московская ярмарка":{"count":51},"Одежда":{"count":163},"Смешные цены":{"count":86},"Спецодежда":{"count":85},"しまむら":{"count":213},"ユニクロ":{"count":201},"ワークマン":{"count":65},"洋服の青山":{"count":242},"西松屋":{"count":113}},"coffee":{"Café Amazon":{"count":212},"Nespresso":{"count":74},"Starbucks":{"count":264,"tags":{"cuisine":"coffee_shop"}},"Tchibo":{"count":197}},"computer":{"Apple Store":{"count":75},"DNS":{"count":234},"PC World":{"count":59},"ДНС":{"count":55}},"confectionery":{"Fagyizó":{"count":58},"Hussel":{"count":78},"Leonidas":{"count":84},"T. SN":{"count":77},"Thorntons":{"count":66}},"convenience":{"711":{"count":64},"777":{"count":58},"24 часа":{"count":85},"7-Eleven":{"count":11418},"8 à Huit":{"count":82},"99 Speedmart":{"count":85},"ABC":{"count":716},"AMPM":{"count":125},"Aibė":{"count":112},"Alepa":{"count":60},"Alfamart":{"count":427},"Alimentara":{"count":63},"Almacen":{"count":405},"Almacén":{"count":94},"Aral":{"count":93},"BP":{"count":273},"BP Shop":{"count":70},"Baqala":{"count":181},"Best One":{"count":57},"Best-One":{"count":63},"Biedronka":{"count":98},"Bodega":{"count":83},"Bonjour":{"count":71},"CBA":{"count":299},"COOP":{"count":470},"COOP Jednota":{"count":381},"CU":{"count":324},"Carrefour City":{"count":91},"Carrefour Express":{"count":255},"Casey's General Store":{"count":225},"Casino Shop":{"count":56},"Centra":{"count":139},"Central Convenience Store":{"count":69},"Chevron":{"count":110},"Circle K":{"count":790},"Citgo":{"count":73},"Co-Op":{"count":54},"Co-op":{"count":161},"Coles Express":{"count":217},"Coop":{"count":492},"Coop Jednota":{"count":128},"Corner Store":{"count":109},"Costcutter":{"count":435},"Couche-Tard":{"count":139},"Cumberland Farms":{"count":109},"Daisy Mart":{"count":57},"Delikatesy":{"count":148},"Delikatesy Centrum":{"count":182},"Dollar General":{"count":646},"Dollar Tree":{"count":67},"Dépanneur":{"count":53},"Esso":{"count":143},"Express":{"count":53},"Extra":{"count":86},"Exxon":{"count":51},"Family Dollar":{"count":85},"FamilyMart":{"count":919},"Food Mart":{"count":512},"Four Square":{"count":99},"Franprix":{"count":96},"Fresh":{"count":67},"Freshmarket":{"count":224},"GS25":{"count":343},"Groszek":{"count":254},"Hasty Market":{"count":87},"Holiday":{"count":67},"Hruška":{"count":89},"Indomaret":{"count":483},"Jednota":{"count":66},"Joker":{"count":56},"K-Market":{"count":104},"Kangaroo":{"count":54},"Kangaroo Express":{"count":51},"Kisbolt":{"count":94},"Konzum":{"count":229},"Kum & Go":{"count":127},"Kwik Trip":{"count":134},"Lawson":{"count":311},"Lewiatan":{"count":565},"Lifestyle Express":{"count":114},"Londis":{"count":505},"M&S Simply Food":{"count":72},"Mac's":{"count":295},"Mace":{"count":166},"Magazin":{"count":81},"Magazin Mixt":{"count":139},"Magazin Non-Stop":{"count":62},"Magazin mixt":{"count":57},"Marathon":{"count":59},"Maxikiosco":{"count":86},"Małpka Express":{"count":71},"McColl's":{"count":289},"Mercator":{"count":122},"Migrolino":{"count":63},"Mini ABC":{"count":77},"Mini Market":{"count":1312},"Mini Market Non-Stop":{"count":134},"Mini Mart":{"count":78},"Mini Stop":{"count":466},"Minimercado":{"count":77},"Mlin i pekare":{"count":63},"Mobil":{"count":82},"Nasz Sklep":{"count":92},"Nisa":{"count":70},"Nisa Local":{"count":164},"OK":{"count":107},"OK-Mart":{"count":51},"OK便利商店":{"count":96},"OK便利店 Circle K":{"count":92},"Odido":{"count":148},"On The Run":{"count":53},"On the Run":{"count":111},"One Stop":{"count":294},"Oxxo":{"count":2261},"Parduotuvė":{"count":102},"Petit Casino":{"count":297},"Plaid Pantry":{"count":69},"Potraviny":{"count":438},"Prehrana":{"count":88},"Premier":{"count":321},"Proxi":{"count":249},"Proxy":{"count":53},"Pulperia":{"count":56},"Pulpería":{"count":51},"QuikTrip":{"count":161},"Rite Aid":{"count":72},"Royal Farms":{"count":90},"Sainsbury's Local":{"count":208},"Sale":{"count":89},"Sari-sari Store":{"count":82},"Select":{"count":133},"Sheetz":{"count":137},"Shell":{"count":479},"Shell Select":{"count":71},"Shop & Go":{"count":80},"Siwa":{"count":157},"Sklep spożywczy":{"count":151},"Smíšené zboží":{"count":57},"Spar":{"count":1472},"Speedway":{"count":108},"Społem":{"count":199},"Spätkauf":{"count":60},"Statoil":{"count":62},"Stewart's":{"count":255},"Stores":{"count":70},"Stripes":{"count":63},"Studenac":{"count":113},"Sunkus":{"count":51},"Sunoco":{"count":65},"Słoneczko":{"count":61},"TESCO Lotus Express":{"count":55},"Tchibo":{"count":75},"Tesco":{"count":54},"Tesco Express":{"count":661},"Tesco Lotus Express":{"count":107},"The Co-operative Food":{"count":341},"Tom Market 89":{"count":232},"Total":{"count":172},"United Dairy Farmers":{"count":55},"Utile":{"count":63},"Valero":{"count":71},"Vegyesbolt":{"count":391},"Večerka":{"count":131},"Vival":{"count":381},"Volg":{"count":149},"Wawa":{"count":279},"Weltladen":{"count":64},"Woolworths Petrol":{"count":97},"abc":{"count":374},"ampm":{"count":152},"best-one":{"count":52},"odido":{"count":77},"Élelmiszer":{"count":59},"Élelmiszerbolt":{"count":65},"Żabka":{"count":1656},"Žabka":{"count":61},"АТБ":{"count":56},"Августина":{"count":52},"Авоська":{"count":115},"Агрокомплекс":{"count":79},"Альянс":{"count":51},"Апельсин":{"count":72},"Ассорти":{"count":118},"Белорусские продукты":{"count":58},"Берёзка":{"count":193},"Везунчик":{"count":66},"Верный":{"count":61},"Весна":{"count":101},"Ветеран":{"count":56},"Визит":{"count":99},"Виктория":{"count":164},"ВкусВилл":{"count":131},"Гастроном":{"count":383},"Гермес":{"count":68},"Гроздь":{"count":52},"Гурман":{"count":92},"Дикси":{"count":270},"Домашний":{"count":77},"Евроопт":{"count":152},"Елена":{"count":68},"Ермолино":{"count":51},"КазМунайГаз":{"count":117},"Калинка":{"count":61},"Каравай":{"count":52},"Квартал":{"count":57},"Кировский":{"count":86},"Колобок":{"count":51},"Колосок":{"count":58},"Копеечка":{"count":99},"Копейка":{"count":65},"Корзинка":{"count":54},"Крамниця":{"count":64},"Кристалл":{"count":57},"Кулинария":{"count":134},"Купец":{"count":64},"Ласточка":{"count":51},"Лидер":{"count":60},"Любимый":{"count":84},"Люкс":{"count":59},"Магазин при АЗС":{"count":54},"Магнит":{"count":1991},"Магнолия":{"count":88},"Мария-Ра":{"count":197},"Маяк":{"count":76},"Меркурий":{"count":77},"Мечта":{"count":103},"Минимаркет":{"count":424},"Мираж":{"count":56},"Монетка":{"count":165},"Надежда":{"count":115},"Ника":{"count":57},"Оазис":{"count":57},"Олимп":{"count":51},"Перекресток":{"count":157},"Подсолнух":{"count":69},"Престиж":{"count":58},"Продукти":{"count":1446},"Продуктовый":{"count":307},"Продуктовый магазин":{"count":803},"Продукты":{"count":8416},"Продукты 24":{"count":65},"Пятёрочка":{"count":1324},"Радуга":{"count":165},"Родны кут":{"count":90},"Ромашка":{"count":83},"Русь":{"count":61},"Светлана":{"count":96},"Сказка":{"count":62},"Смак":{"count":151},"Солнечный":{"count":54},"Солнышко":{"count":54},"Татьяна":{"count":68},"Теремок":{"count":105},"Тройка":{"count":62},"У Палыча":{"count":69},"Универсам":{"count":153},"Фортуна":{"count":97},"Хороший":{"count":55},"Центральный":{"count":73},"Чайка":{"count":57},"Шанс":{"count":60},"Эконом":{"count":72},"Юбилейный":{"count":56},"Юлия":{"count":58},"продукты":{"count":157},"მარკეტი":{"count":134},"მარკეტი (Market)":{"count":71},"サンクス":{"count":970,"tags":{"name:en":"sunkus"}},"サークルK":{"count":1109,"tags":{"name:en":"Circle K"}},"スリーエフ":{"count":228},"セイコーマート":{"count":449},"セブンイレブン":{"count":7859,"tags":{"name:en":"7-Eleven"}},"セブンイレブン(Seven-Eleven)":{"count":332},"セーブオン":{"count":71},"デイリーヤマザキ":{"count":421},"ファミリーマート":{"count":4457,"tags":{"name:en":"FamilyMart"}},"ポプラ":{"count":101},"ミニストップ":{"count":773,"tags":{"name:en":"MINISTOP"}},"ヤマザキショップ":{"count":106},"ローソン":{"count":4247,"tags":{"name:en":"LAWSON"}},"ローソンストア100":{"count":272},"全家":{"count":482},"全家便利商店":{"count":833},"萊爾富":{"count":405},"세븐일레븐":{"count":157}},"copyshop":{"FedEx Office":{"count":53},"FedEx Office Print and Ship Center":{"count":170}},"cosmetics":{"Douglas":{"count":58},"Lush":{"count":80},"Marionnaud":{"count":55},"Sephora":{"count":184},"The Body Shop":{"count":95},"Yves Rocher":{"count":111},"Л'Этуаль":{"count":111},"Магнит Косметик":{"count":116},"Магнит косметик":{"count":63},"Магнит-Косметик":{"count":55},"Мила":{"count":68},"Подружка":{"count":51}},"craft":{"Hobby Lobby":{"count":96},"Michaels":{"count":222}},"deli":{"ほっともっと":{"count":58}},"department_store":{"Argos":{"count":90},"Bed Bath & Beyond":{"count":72},"Big Lots":{"count":142},"Big W":{"count":120},"Canadian Tire":{"count":176},"Coppel":{"count":55},"Debenhams":{"count":118},"Dillard's":{"count":86},"Dollar General":{"count":62},"Dollar Tree":{"count":64},"El Corte Inglés":{"count":61},"Family Dollar":{"count":76},"Fred Meyer":{"count":51},"Galeria Kaufhof":{"count":60},"HEMA":{"count":248},"Harvey Norman":{"count":62},"JCPenney":{"count":365},"Karstadt":{"count":66},"Kmart":{"count":390},"Kohl's":{"count":371},"Lojas Americanas":{"count":63},"Macy's":{"count":292},"Marks & Spencer":{"count":136},"Marshalls":{"count":58},"Myer":{"count":51},"Nordstrom":{"count":54},"Sam's Club":{"count":103},"Sears":{"count":462},"Shopko":{"count":65},"Target":{"count":1104},"The Warehouse":{"count":68},"Walmart":{"count":847},"Walmart Supercenter":{"count":234},"Woolworth":{"count":153},"Магнит":{"count":88},"Универмаг":{"count":170}},"doityourself":{"Ace Hardware":{"count":300},"B&Q":{"count":229},"Bauhaus":{"count":223},"Biltema":{"count":64},"Brico":{"count":126},"Bricomarché":{"count":425},"Bricorama":{"count":117},"Bunnings Warehouse":{"count":210},"Canadian Tire":{"count":138},"Castorama":{"count":168},"Easy":{"count":53},"Gamma":{"count":133},"Globus Baumarkt":{"count":52},"Hagebaumarkt":{"count":132},"Hellweg":{"count":70},"Home Depot":{"count":1345},"Home Hardware":{"count":172},"Homebase":{"count":205},"Hornbach":{"count":134},"Hubo":{"count":107},"Karwei":{"count":77},"Lagerhaus":{"count":116},"Leroy Merlin":{"count":285},"Lowe's":{"count":1236},"Lowes":{"count":95},"Menards":{"count":132},"Mr Bricolage":{"count":112},"Mr.Bricolage":{"count":139},"OBI":{"count":501},"Point P":{"count":125},"Praktiker":{"count":54},"Praxis":{"count":61},"Rona":{"count":77},"Screwfix":{"count":80},"Sonderpreis Baumarkt":{"count":68},"Tekzen":{"count":112},"Toom Baumarkt":{"count":155},"Weldom":{"count":110},"Wickes":{"count":159},"Леруа Мерлен":{"count":54},"Мастер":{"count":59},"Сантехника":{"count":51},"Строитель":{"count":67},"Стройматериалы":{"count":506},"Хозтовары":{"count":137},"カインズホーム":{"count":51},"コメリ":{"count":137},"コーナン":{"count":77}},"dry_cleaning":{"Cleaners":{"count":103},"Pressing":{"count":58},"Диана":{"count":88},"Химчистка":{"count":73},"ホワイト急便":{"count":136}},"electronics":{"Apple Store":{"count":63},"BCC":{"count":54},"Batteries Plus Bulbs":{"count":74},"Bell":{"count":73},"Best Buy":{"count":706},"Boulanger":{"count":71},"Currys":{"count":109},"Currys PC World":{"count":70},"DNS":{"count":111},"Darty":{"count":168},"Elektra":{"count":64},"Elgiganten":{"count":67},"Euronics":{"count":247},"Expert":{"count":224},"Hartlauer":{"count":64},"Interdiscount":{"count":57},"La Curacao":{"count":69},"Maplin":{"count":114},"Media Expert":{"count":163},"Media Markt":{"count":422},"Musimundo":{"count":53},"Neonet":{"count":97},"RTV Euro AGD":{"count":68},"Radio Shack":{"count":485},"Rogers":{"count":61},"Samsung":{"count":164},"Saturn":{"count":155},"Sony":{"count":51},"The Source":{"count":91},"Unieuro":{"count":66},"М.Видео":{"count":121},"Фокстрот":{"count":76},"Эксперт":{"count":70},"Эльдорадо":{"count":313},"エディオン":{"count":74},"ケーズデンキ":{"count":136},"コジマ":{"count":53},"ヤマダ電機":{"count":162},"全國電子":{"count":72},"燦坤3C":{"count":52}},"erotic":{"Orion":{"count":85}},"fabric":{"Ткани":{"count":121}},"farm":{"Hofladen":{"count":63}},"florist":{"Blume 2000":{"count":94},"Blumen Risse":{"count":69},"Fleuriste":{"count":54},"Interflora":{"count":78},"Monceau Fleurs":{"count":69},"Virágbolt":{"count":64},"Квіти":{"count":86},"Цветочный магазин":{"count":57},"Цветы":{"count":1098}},"frame":{"rumah penduduk":{"count":316}},"funeral_directors":{"The Co-operative Funeralcare":{"count":82},"Ритуальные услуги":{"count":133}},"furniture":{"Aaron's":{"count":57},"Black Red White":{"count":79},"Bodzio":{"count":61},"But":{"count":162},"Casa":{"count":62},"Conforama":{"count":174},"DFS":{"count":52},"Dänisches Bettenlager":{"count":464},"Fly":{"count":53},"Harveys":{"count":58},"IKEA":{"count":234},"JYSK":{"count":431},"Kwantum":{"count":54},"Leen Bakker":{"count":72},"Pier 1 Imports":{"count":95},"Roller":{"count":99},"The Brick":{"count":68},"Меблі":{"count":70},"ニトリ":{"count":93}},"garden_centre":{"Dehner":{"count":59},"Gamm Vert":{"count":210},"Jardiland":{"count":124},"Point Vert":{"count":68},"Welkoop":{"count":97},"Семена":{"count":53}},"gift":{"Card Factory":{"count":116},"Hallmark":{"count":163},"Подарки":{"count":56}},"greengrocer":{"Frutería":{"count":60},"Овощи и фрукты":{"count":71}},"hairdresser":{"Berber":{"count":71},"Cost Cutters":{"count":69},"Fantastic Sams":{"count":53},"Figaro":{"count":79},"First Choice Haircutters":{"count":51},"Franck Provost":{"count":136},"Frizerie":{"count":59},"Great Clips":{"count":578},"Haarmonie":{"count":79},"Haarscharf":{"count":59},"Hair Cuttery":{"count":121},"Hairkiller":{"count":73},"Jean Louis David":{"count":90},"Jean-Louis David":{"count":59},"Klier":{"count":239},"Klipp":{"count":76},"Le Salon":{"count":55},"Marco Aldany":{"count":55},"Peluquería":{"count":165},"Salon fryzjerski":{"count":52},"Sport Clips":{"count":114},"Super Cuts":{"count":55},"Supercuts":{"count":359},"Tchip":{"count":62},"The Barber Shop":{"count":130},"Toni & Guy":{"count":77},"Top Hair":{"count":74},"Виктория":{"count":53},"Елена":{"count":53},"Локон":{"count":67},"Парикмахерская":{"count":798},"Перукарня":{"count":119},"Салон красоты":{"count":58},"Стиль":{"count":94},"Шарм":{"count":79},"حلاق":{"count":65}},"hardware":{"1000 мелочей":{"count":125},"Ferretería":{"count":295},"Harbor Freight Tools":{"count":57},"Home Hardware":{"count":94},"Lowe's":{"count":74},"Quincaillerie":{"count":105},"True Value":{"count":52},"Würth":{"count":51},"Промтовары":{"count":67},"Сантехника":{"count":87},"Стройматериалы":{"count":142},"Товары для дома":{"count":69},"Хозтовары":{"count":477}},"hearing_aids":{"Amplifon":{"count":124},"Geers":{"count":66},"Kind Hörgeräte":{"count":74},"amplifon":{"count":52}},"hifi":{"Bang & Olufsen":{"count":51}},"houseware":{"Blokker":{"count":264},"Marskramer":{"count":72},"Xenos":{"count":119}},"interior_decoration":{"Casa":{"count":65},"Depot":{"count":97}},"jewelry":{"585":{"count":94},"Apart":{"count":53},"Bijou Brigitte":{"count":172},"Christ":{"count":116},"Claire's":{"count":99},"Ernest Jones":{"count":53},"H Samuel":{"count":55},"James Avery Jewelry":{"count":99},"Julien d'Orcel":{"count":123},"Kay Jewelers":{"count":78},"Pandora":{"count":280},"Swarovski":{"count":240},"Адамас":{"count":60},"Золото":{"count":51}},"kiosk":{"Aral":{"count":76},"Edicola":{"count":94},"Esso":{"count":51},"KIOS":{"count":288},"Kiosko":{"count":62},"Kiosque":{"count":68},"Kolporter":{"count":88},"Lietuvos spauda":{"count":62},"Narvesen":{"count":188},"Pressbyrån":{"count":117},"Pulpería":{"count":61},"R-Kioski":{"count":352},"Relay":{"count":61},"Ruch":{"count":187},"Shell":{"count":122},"Tabak Trafik":{"count":83},"Tisak":{"count":245},"Trafik":{"count":221},"Trafika":{"count":64},"Trinkhalle":{"count":98},"Warung":{"count":73},"Белсоюзпечать":{"count":59},"Киоск":{"count":143},"Продукты":{"count":212},"Роспечать":{"count":233},"Союзпечать":{"count":94},"მარკეტი (Market)":{"count":94}},"kitchen":{"Cuisinella":{"count":60},"Home Utensils":{"count":65}},"laundry":{"Launderette":{"count":51},"Lavandería":{"count":84},"コインランドリー":{"count":64}},"lottery":{"Loteria de la Provincia":{"count":63},"Lotería Nacional":{"count":221},"Lotería de la Provincia":{"count":349},"Lotto":{"count":192},"Lottózó":{"count":69},"ONCE":{"count":91}},"mall":{"Торговый центр":{"count":57}},"massage":{"Massage Envy":{"count":80}},"medical_supply":{"Pofam-Poznań":{"count":61}},"mobile_phone":{"3 Store":{"count":90},"AT&T":{"count":558},"Bell":{"count":140},"Bitė":{"count":66},"Boost Mobile":{"count":151},"Carphone Warehouse":{"count":357},"Claro":{"count":446},"Cricket Wireless":{"count":73},"Digicel":{"count":152},"EE":{"count":190},"MetroPCS":{"count":201},"Movistar":{"count":411},"O2":{"count":527},"Orange":{"count":730},"Personal":{"count":54},"Play":{"count":150},"Plus":{"count":122},"Rogers":{"count":52},"SFR":{"count":156},"Samsung":{"count":71},"Sprint":{"count":394},"T-Mobile":{"count":665},"TIM":{"count":67},"Telcel":{"count":52},"Tele2":{"count":186},"Telekom":{"count":148},"Telekom Shop":{"count":99},"Telenor":{"count":99},"Telus":{"count":69},"The Phone House":{"count":137},"Three":{"count":57},"Tim":{"count":51},"Télécentre":{"count":76},"Verizon":{"count":152},"Verizon Wireless":{"count":629},"Vodafone":{"count":1168},"Vodafone Shop":{"count":52},"Wind":{"count":156},"Yoigo":{"count":61},"au":{"count":136},"auショップ":{"count":340},"mobilcom debitel":{"count":63},"Алло":{"count":86},"Билайн":{"count":441},"Евросеть":{"count":1020},"Київстар":{"count":57},"МТС":{"count":1012},"Мегафон":{"count":687},"Связной":{"count":842},"Теле2":{"count":70},"ソフトバンクショップ":{"count":482},"ドコモショップ":{"count":426}},"money_lender":{"Money Mart":{"count":95}},"motorcycle":{"Harley Davidson":{"count":81},"Honda":{"count":238},"Suzuki":{"count":90},"Yamaha":{"count":235}},"music":{"HMV":{"count":81},"TSUTAYA":{"count":53}},"musical_instrument":{"Guitar Center":{"count":51}},"newsagent":{"Edicola":{"count":111},"Kolporter":{"count":56},"Maison de la Presse":{"count":132},"Relay":{"count":246},"Tabac Presse":{"count":82},"Trafika":{"count":60},"WHSmith":{"count":160},"Белсоюзпечать":{"count":52},"Витебскоблсоюзпечать":{"count":56},"Первая полоса":{"count":57},"Печать":{"count":74},"Роспечать":{"count":371},"Союзпечать":{"count":130}},"optician":{"Alain Afflelou":{"count":204},"Apollo":{"count":441},"Atol":{"count":124},"Boots Opticians":{"count":101},"Fielmann":{"count":477},"General Óptica":{"count":53},"Grand Optical":{"count":57},"Générale d'Optique":{"count":94},"Hakim Optical":{"count":73},"Hans Anders":{"count":105},"Krys":{"count":192},"Les Opticiens Mutualistes":{"count":103},"Optic 2000":{"count":281},"Optical Center":{"count":125},"Pearle":{"count":199},"Pearle Vision":{"count":52},"Specsavers":{"count":384},"Sunglass Hut":{"count":61},"Synoptik":{"count":55},"Vision Express":{"count":183},"แว่นท็อปเจริญ":{"count":97},"メガネスーパー":{"count":62},"眼鏡市場":{"count":206}},"outdoor":{"Jack Wolfskin":{"count":51},"Mountain Warehouse":{"count":74},"REI":{"count":77},"Рыболов":{"count":70}},"paint":{"Benjamin Moore":{"count":58},"Comex":{"count":68},"Jotun":{"count":51},"National Paints":{"count":53},"Sherwin Williams":{"count":323},"Sherwin-Williams Paints":{"count":59}},"pawnbroker":{"Cash Converters":{"count":83},"Lombard":{"count":55},"Palawan Pawnshop":{"count":52}},"pet":{"Das Futterhaus":{"count":158},"Fressnapf":{"count":620},"Global Pet Foods":{"count":54},"Maxi Zoo":{"count":65},"Pet Valu":{"count":112},"PetSmart":{"count":491},"Petco":{"count":377},"Pets at Home":{"count":170},"Бетховен":{"count":60},"Зоотовары":{"count":79},"Четыре лапы":{"count":56}},"second_hand":{"Goodwill":{"count":235},"Value Village":{"count":53}},"shoes":{"Adidas":{"count":51},"Aldo":{"count":74},"Bata":{"count":281},"Besson Chaussures":{"count":124},"Brantano":{"count":132},"CCC":{"count":245},"Camper":{"count":51},"Chaussea":{"count":102},"Clarks":{"count":268},"Converse":{"count":58},"Crocs":{"count":64},"DSW":{"count":52},"Deichmann":{"count":1231},"Dosenbach":{"count":58},"Ecco":{"count":185},"Famous Footwear":{"count":178},"Foot Locker":{"count":240},"Geox":{"count":151},"Kari":{"count":66},"La Halle aux Chaussures":{"count":158},"Mephisto":{"count":57},"Minelli":{"count":55},"New Balance":{"count":52},"Payless":{"count":56},"Payless Shoe Source":{"count":316},"Payless ShoeSource":{"count":133},"Quick Schuh":{"count":116},"Rack Room Shoes":{"count":51},"Reno":{"count":233},"Rieker":{"count":83},"Salamander":{"count":103},"San Marina":{"count":54},"Scapino":{"count":67},"Shoe Carnival":{"count":66},"Shoe Zone":{"count":161},"Siemes Schuhcenter":{"count":69},"Skechers":{"count":83},"Tamaris":{"count":99},"Timberland":{"count":51},"vanHaren":{"count":98},"Éram":{"count":88},"Ремонт обуви":{"count":71},"ЦентрОбувь":{"count":76},"Юничел":{"count":73},"東京靴流通センター":{"count":81}},"sports":{"Adidas":{"count":132},"Aktiesport":{"count":61},"Big 5 Sporting Goods":{"count":93},"Decathlon":{"count":409},"Dick's Sporting Goods":{"count":222},"Hervis":{"count":66},"Intersport":{"count":737},"JD Sports":{"count":58},"Nike":{"count":95},"Sport 2000":{"count":209},"Sports Authority":{"count":108},"Sports Direct":{"count":217},"Спортмастер":{"count":208},"Спорттовары":{"count":68}},"stationery":{"Bureau Vallée":{"count":64},"Libro":{"count":73},"McPaper":{"count":158},"Office Depot":{"count":378},"Office Max":{"count":169},"Officeworks":{"count":73},"Pagro":{"count":64},"Paperchase":{"count":54},"Ryman":{"count":85},"Staples":{"count":671},"Канцтовары":{"count":140}},"supermarket":{"7-Eleven":{"count":60},"A&O":{"count":67},"A101":{"count":388},"AD Delhaize":{"count":80},"ADEG":{"count":85},"Ahorramás":{"count":66},"Albert":{"count":245},"Albert Heijn":{"count":766},"Albertsons":{"count":316},"Aldi":{"count":6323},"Aldi Nord":{"count":356},"Aldi Süd":{"count":916},"Alfamart":{"count":109},"Alimerka":{"count":96},"Alnatura":{"count":97},"Asda":{"count":474},"Atac":{"count":53},"Atacadão":{"count":80},"Auchan":{"count":229},"BM":{"count":52},"Biedronka":{"count":2348},"Big C":{"count":53},"Billa":{"count":1592},"Bim":{"count":678},"Biocoop":{"count":159},"Bodega Aurrera":{"count":264},"Budgens":{"count":77},"Bulk Barn":{"count":54},"Bunnpris":{"count":69},"CBA":{"count":236},"CONAD":{"count":67},"COOP":{"count":255},"COOP Jednota":{"count":177},"CRAI":{"count":66},"CU":{"count":64},"Caprabo":{"count":144},"Cargills Food City":{"count":79},"Carrefour":{"count":2544},"Carrefour City":{"count":349},"Carrefour Contact":{"count":270},"Carrefour Express":{"count":921},"Centra":{"count":63},"Centre Commercial E. Leclerc":{"count":385},"Checkers":{"count":140},"Chedraui":{"count":80},"Co-Op":{"count":62},"Co-op":{"count":352},"Co-operative":{"count":51},"Coles":{"count":583},"Colmado":{"count":103},"Colruyt":{"count":212},"Combi":{"count":127},"Comercial Mexicana":{"count":59},"Conad":{"count":560},"Conad City":{"count":95},"Condis":{"count":126},"Consum":{"count":236},"Continente":{"count":111},"Coop":{"count":1665},"Coop Extra":{"count":88},"Coop Jednota":{"count":101},"Coop Konsum":{"count":96},"Costco Gasoline":{"count":295},"Costcutter":{"count":93},"Coto":{"count":65},"Countdown":{"count":135},"Coviran":{"count":124},"Covirán":{"count":51},"Crai":{"count":119},"Cub Foods":{"count":57},"Dagli'Brugsen":{"count":135},"Deen":{"count":55},"Delhaize":{"count":228},"Delikatesy Centrum":{"count":209},"Denner":{"count":412},"Despar":{"count":209},"Despensa Familiar":{"count":81},"Dia":{"count":1329},"Dia %":{"count":181},"Dia Market":{"count":60},"Dino":{"count":298},"Dirk van den Broek":{"count":66},"Disco":{"count":74},"Diska":{"count":68},"Dollar General":{"count":106},"Dollar Tree":{"count":52},"Dunnes Stores":{"count":72},"E-Center":{"count":66},"E. Leclerc":{"count":186},"E. Leclerc Drive":{"count":97},"EKO":{"count":78},"EMTÉ":{"count":74},"Edeka":{"count":2231},"Ekom":{"count":64},"Ekono":{"count":68},"El Árbol":{"count":86},"Eroski":{"count":351},"Esselunga":{"count":106},"EuroSpin":{"count":81},"Eurospar":{"count":340},"Eurospin":{"count":328},"Extra":{"count":149},"Famiglia Cooperativa":{"count":89},"Famila":{"count":167},"Family Dollar":{"count":72},"Fareway":{"count":51},"Farmfoods":{"count":141},"Feneberg":{"count":64},"Food Basics":{"count":116},"Food Lion":{"count":425},"Foodland":{"count":192},"Foodworks":{"count":90},"Franprix":{"count":401},"Fred Meyer":{"count":70},"Freshmarket":{"count":86},"Froiz":{"count":97},"Føtex":{"count":74},"G20":{"count":71},"GS25":{"count":72},"Gadis":{"count":126},"Game":{"count":59},"Giant":{"count":276},"Giant Eagle":{"count":134},"Grand Frais":{"count":70},"Grocery Outlet":{"count":128},"Géant Casino":{"count":75},"H-E-B":{"count":274},"HIT":{"count":64},"Hannaford":{"count":95},"Harris Teeter":{"count":158},"Hemköp":{"count":87},"Heron Foods":{"count":55},"Hofer":{"count":484},"Hoogvliet":{"count":66},"Hruška":{"count":54},"Hy-Vee":{"count":121},"ICA":{"count":255},"ICA Kvantum":{"count":51},"IDEA":{"count":52},"IGA":{"count":568},"Iceland":{"count":538},"Indomaret":{"count":124},"Intermarché":{"count":1477},"Intermarché Contact":{"count":122},"Intermarché Super":{"count":261},"Interspar":{"count":117},"Irma":{"count":69},"Jewel-Osco":{"count":72},"Jumbo":{"count":476},"K+K":{"count":119},"Kaufland":{"count":1172},"King Soopers":{"count":99},"Kiwi":{"count":178},"Konsum":{"count":144},"Konzum":{"count":370},"Kroger":{"count":627},"Kvickly":{"count":60},"La Vie Claire":{"count":65},"Landi":{"count":54},"Leader Price":{"count":502},"Leclerc Drive":{"count":120},"Lewiatan":{"count":255},"Lider":{"count":78},"Lidl":{"count":8927},"Londis":{"count":52},"Lupa":{"count":79},"M&S Simply Food":{"count":52},"MPREIS":{"count":187},"Makro":{"count":226},"Markant":{"count":98},"Market Basket":{"count":57},"Marktkauf":{"count":117},"Match":{"count":139},"Maxi":{"count":198},"Maxi Dia":{"count":52},"Maxima":{"count":111},"Maxima X":{"count":158},"Maxima XX":{"count":69},"Mega Image":{"count":97},"Mego":{"count":52},"Meijer":{"count":129},"Meny":{"count":105},"Mercado Municipal":{"count":52},"Mercado de Abastos":{"count":57},"Mercadona":{"count":1228},"Mercator":{"count":155},"Merkur":{"count":132},"Metro":{"count":395},"Migros":{"count":641},"Mila":{"count":90},"Mini Market":{"count":81},"Minipreço":{"count":213},"Mix Markt":{"count":60},"Monoprix":{"count":283},"More":{"count":61},"Morrisons":{"count":443},"NORMA":{"count":144},"NP":{"count":251},"Nah & Frisch":{"count":107},"Nahkauf":{"count":324},"Netto":{"count":4429},"Netto Marken-Discount":{"count":706},"New World":{"count":89},"No Frills":{"count":177},"Norfa XL":{"count":66},"Norma":{"count":1162},"Oxxo":{"count":278},"PENNY":{"count":89},"PLUS":{"count":92},"POLOmarket":{"count":172},"Palí":{"count":69},"Pam":{"count":77},"Penny":{"count":2819},"Penny Markt":{"count":77},"Petit Casino":{"count":146},"Pick n Pay":{"count":268},"Piggly Wiggly":{"count":103},"Pingo Doce":{"count":308},"Piotr i Paweł":{"count":112},"Plaza Vea":{"count":68},"Plodine":{"count":67},"Poiesz":{"count":53},"Price Chopper":{"count":132},"Prix":{"count":53},"Profi":{"count":203},"Proxi":{"count":75},"Proxy Delhaize":{"count":63},"Publix":{"count":645},"Punto Simply":{"count":54},"Puregold":{"count":75},"Pão de Açúcar":{"count":76},"QFC":{"count":54},"REMA 1000":{"count":89},"Ralphs":{"count":81},"Real":{"count":210},"Real Canadian Superstore":{"count":69},"Reliance Fresh":{"count":95},"Rema 1000":{"count":394},"Rewe":{"count":2808},"Rewe City":{"count":78},"Rimi":{"count":115},"S-Market":{"count":110},"Safeway":{"count":619},"Sainsbury's":{"count":595},"Sainsbury's Local":{"count":248},"Sam's Club":{"count":303},"Santa Isabel":{"count":174},"Save-A-Lot":{"count":100,"tags":{"shop":"supermarket"}},"ShopRite":{"count":53},"Shoprite":{"count":337},"Sigma":{"count":107},"Simply Market":{"count":541},"Sky":{"count":113},"Smith's":{"count":56},"Sobeys":{"count":186},"Soriana":{"count":194},"Spar":{"count":3381},"Społem":{"count":120},"Sprouts Farmers Market":{"count":71},"Stokrotka":{"count":227},"Stop & Shop":{"count":147},"Super C":{"count":57},"Super U":{"count":654},"SuperBrugsen":{"count":183},"SuperValu":{"count":80},"Superama":{"count":51},"Supersol":{"count":51},"Superspar":{"count":54},"Tegut":{"count":118},"Tengelmann":{"count":155},"Tesco":{"count":1373},"Tesco Express":{"count":566},"Tesco Extra":{"count":200},"Tesco Lotus":{"count":95},"Tesco Metro":{"count":153},"The Co-operative":{"count":79},"The Co-operative Food":{"count":1261},"Tommy":{"count":56},"Tottus":{"count":82},"Trader Joe's":{"count":345},"Treff 3000":{"count":134},"U Express":{"count":129},"Unimarc":{"count":256},"Unimarkt":{"count":104},"Utile":{"count":68},"Vea":{"count":67},"Vival":{"count":80},"Volg":{"count":231},"Waitrose":{"count":301},"Walmart":{"count":1164},"Walmart Neighborhood Market":{"count":171},"Walmart Supercenter":{"count":688},"Wasgau":{"count":51},"Wegmans":{"count":89},"Wellcome":{"count":51},"Whole Foods Market":{"count":379,"tags":{"shop":"supermarket"}},"Willys":{"count":89},"WinCo Foods":{"count":53},"Winn Dixie":{"count":168},"Woolworths":{"count":816},"denn's Biomarkt":{"count":147},"fakta":{"count":296},"real":{"count":58},"tegut":{"count":89},"Şok":{"count":271},"Żabka":{"count":88},"ΑΒ Βασιλόπουλος":{"count":82},"Γαλαξίας":{"count":54},"Μασούτης":{"count":85},"Σκλαβενίτης":{"count":92},"АТБ":{"count":618},"Абсолют":{"count":51},"Авоська":{"count":60},"Азбука Вкуса":{"count":66},"Атак":{"count":85},"Ашан":{"count":80},"Верный":{"count":226},"Виктория":{"count":74},"Вопак":{"count":59},"Гастроном":{"count":54},"Гроздь":{"count":63},"Десяточка":{"count":52},"Дикси":{"count":1670},"Евроопт":{"count":201},"Карусель":{"count":68},"Квартал":{"count":77},"Кировский":{"count":54},"Командор":{"count":75},"Красный Яр":{"count":58},"Лента":{"count":165},"Магнит":{"count":4289},"Магнолия":{"count":121},"Мария-Ра":{"count":159},"Монетка":{"count":363},"Народная 7Я семьЯ":{"count":199},"Перекресток":{"count":501},"Покупочка":{"count":73},"Полушка":{"count":213},"Пятёрочка":{"count":3622},"Радеж":{"count":64},"Рукавичка":{"count":78},"Светофор":{"count":73},"Седьмой континент":{"count":69},"Семейный":{"count":52},"Семья":{"count":85},"Супермаркет":{"count":65},"Сільпо":{"count":203},"Таврія‑В":{"count":66},"Универсам":{"count":77},"Фора":{"count":162},"Фуршет":{"count":86},"Хүнсний дэлгүүр":{"count":63},"Эдельвейс":{"count":55},"хүнсний дэлгүүр":{"count":73},"بقالة":{"count":74},"سوپر مارکت":{"count":75},"سوپرمارکت":{"count":79},"いなげや":{"count":66},"まいばすけっと":{"count":162},"イオン":{"count":95},"イトーヨーカドー":{"count":67},"カスミ":{"count":56},"マックスバリュ":{"count":143},"マルエツ":{"count":99},"ライフ":{"count":125},"全聯":{"count":74},"全聯福利中心":{"count":241},"惠康 Wellcome":{"count":57},"業務スーパー":{"count":176},"美廉社":{"count":74},"西友":{"count":137}},"tailor":{"Atelier de couture":{"count":63}},"ticket":{"Boutique Grandes Lignes":{"count":60},"Guichet Transilien":{"count":243},"Касса":{"count":61},"Проездные билеты":{"count":65}},"tobacco":{"Dohánybolt":{"count":109},"Estanco":{"count":134},"Nemzeti Dohánybolt":{"count":926},"Tabacos":{"count":62},"Табакерка":{"count":73}},"toys":{"Dráčik":{"count":63},"Intertoys":{"count":242},"King Jouet":{"count":102},"La Grande Récré":{"count":112},"Maxi Toys":{"count":63},"Toys R Us":{"count":410,"tags":{"shop":"toys"}},"Детский мир":{"count":186},"Игрушки":{"count":95}},"travel_agency":{"D-reizen":{"count":64},"DER Reisebüro":{"count":52},"First Reisebüro":{"count":57},"Flight Centre":{"count":159},"Reiseland":{"count":52},"TUI":{"count":262},"The Co-operative Travel":{"count":58},"Thomas Cook":{"count":298},"Thomson":{"count":144}},"tyres":{"Borracharia":{"count":98},"Bridgestone":{"count":65},"Discount Tire":{"count":94},"Euromaster":{"count":76},"Firestone":{"count":57},"Gomeria":{"count":71},"Les Schwab Tire Center":{"count":59},"Vianor":{"count":52},"Вулканизация":{"count":113},"Шиномонтаж":{"count":419}},"variety_store":{"Action":{"count":147},"Bazar":{"count":56},"Big Bazar":{"count":60},"Big Lots":{"count":65},"Dollar General":{"count":345},"Dollar Tree":{"count":753},"Dollarama":{"count":404},"EuroShop":{"count":59},"Family Dollar":{"count":590},"Fix Price":{"count":97},"Fix price":{"count":127},"FixPrice":{"count":62},"GiFi":{"count":229},"Home Bargains":{"count":68},"Mäc-Geiz":{"count":59},"NOZ":{"count":82},"Poundland":{"count":197},"Poundworld":{"count":70},"Tedi":{"count":611},"ダイソー":{"count":226}},"video":{"Blockbuster":{"count":75},"Family Video":{"count":113},"TSUTAYA":{"count":122},"World of Video":{"count":53},"ゲオ":{"count":81}},"video_games":{"EB Games":{"count":101},"Game":{"count":76},"GameStop":{"count":676},"Micromania":{"count":83}}}; + var tourism = {"alpine_hut":{"КОШ":{"count":105}},"apartment":{"Двухкомнатная квартира на сутки":{"count":52}},"attraction":{"Arch":{"count":51},"Kursächsische Postmeilensäule":{"count":54},"Maibaum":{"count":52},"Moab trail":{"count":55},"Moai":{"count":702},"OWŚ":{"count":102},"Sommerrodelbahn":{"count":54},"path contiunes":{"count":75},"white blaze":{"count":53},"Кладбище еврейское":{"count":89},"Колесо обозрения":{"count":69},"Приусадебный парк":{"count":69},"Усадьба":{"count":53},"Хозяйственный двор":{"count":72},"Часовня":{"count":64},"дольмен":{"count":86}},"camp_site":{"Camping Municipal":{"count":198},"Camping municipal":{"count":80}},"guest_house":{"Casa":{"count":61},"Home":{"count":68},"OW \"Bielanka\"":{"count":54}},"hostel":{"Albergue de Peregrinos":{"count":67},"Hospedaje":{"count":70},"Hostal":{"count":124}},"hotel":{"B&B Hôtel":{"count":104},"B&b Hôtel":{"count":78},"Best Western":{"count":242},"Campanile":{"count":145},"Central Hotel":{"count":51},"City Hotel":{"count":74},"Comfort Inn":{"count":283},"Comfort Inn & Suites":{"count":67},"Comfort Suites":{"count":148},"Country Inn & Suites":{"count":83},"Courtyard by Marriott":{"count":155},"Crowne Plaza":{"count":85},"Days Inn":{"count":245},"Econo Lodge":{"count":70},"Embassy Suites":{"count":68},"Extended Stay America":{"count":102},"Fairfield Inn":{"count":60},"Fairfield Inn & Suites":{"count":67},"Formule 1":{"count":74},"Grand Hotel":{"count":90},"Hampton Inn":{"count":376},"Hampton Inn & Suites":{"count":96},"Hilton Garden Inn":{"count":183},"Holiday Inn":{"count":411},"Holiday Inn Express":{"count":479},"Holiday Inn Express & Suites":{"count":72},"Homewood Suites":{"count":61},"Hotel Central":{"count":92},"Hotel Europa":{"count":91},"Hotel Ibis":{"count":67},"Hotel Krone":{"count":58},"Hotel Panorama":{"count":61},"Hotel Plaza":{"count":62},"Hotel Post":{"count":60},"Hotel Royal":{"count":62},"Hotel Victoria":{"count":71},"Hotel zur Post":{"count":60},"Hôtel Ibis":{"count":70},"Hôtel de France":{"count":61},"Ibis":{"count":215},"Ibis Budget":{"count":188},"Ibis Styles":{"count":53},"Krone":{"count":68},"Kyriad":{"count":65},"La Quinta":{"count":54},"Marriott":{"count":57},"Mercure":{"count":109},"Motel 6":{"count":83},"Novotel":{"count":180},"Palace Hotel":{"count":54},"Park Hotel":{"count":88},"Parkhotel":{"count":64},"Premier Inn":{"count":400},"Première Classe":{"count":62},"Quality Inn":{"count":178},"Quality Inn & Suites":{"count":80},"Ramada":{"count":97},"Residence Inn":{"count":89},"Royal Hotel":{"count":94},"Sheraton":{"count":56},"Sleep Inn":{"count":68},"Staybridge Suites":{"count":54},"Super 8":{"count":229},"Travelodge":{"count":284},"Гостиница":{"count":166},"Уют":{"count":58},"東横イン":{"count":57}},"motel":{"Best Western":{"count":59},"Budget Inn":{"count":76},"Comfort Inn":{"count":131},"Days Inn":{"count":103},"Econo Lodge":{"count":117},"Motel 6":{"count":214},"Quality Inn":{"count":113},"Rodeway Inn":{"count":102},"Super 8":{"count":173},"Travelodge":{"count":68}},"museum":{"Heimatmuseum":{"count":336},"Stadtmuseum":{"count":86},"Tájház":{"count":93},"Краеведческий музей":{"count":247},"Музей":{"count":99}}}; + var dataSuggestions = { + amenity: amenity, + leisure: leisure, + man_made: man_made, + shop: shop, + tourism: tourism + }; + + var dataAddressFormats = [{"format":[["housenumber","street"],["city","postcode"]]},{"countryCodes":["gb"],"format":[["housename"],["housenumber","street"],["city","postcode"]]},{"countryCodes":["ie"],"format":[["housename"],["housenumber","street"],["city"],["postcode"]]},{"countryCodes":["at","ch","de","si","pl"],"format":[["street","housenumber"],["postcode","city"]]},{"countryCodes":["ad","ba","be","cz","dk","es","fi","gr","hr","is","it","li","nl","no","pt","se","sk","sm","va"],"format":[["street","housenumber","unit"],["postcode","city"]]},{"countryCodes":["fr","lu","mo"],"format":[["housenumber","street"],["postcode","city"]]},{"countryCodes":["br"],"format":[["street"],["housenumber","suburb"],["city","postcode"]]},{"countryCodes":["vn"],"format":[["housenumber","street"],["subdistrict"],["district"],["city"],["province","postcode"]]},{"countryCodes":["au","ca"],"format":[["housenumber","street","unit"],["city","province","postcode"]]},{"countryCodes":["us"],"format":[["housenumber","street","unit"],["city","state","postcode"]]},{"countryCodes":["tw"],"format":[["postcode","city","district"],["place","street"],["housenumber","floor","unit"]]},{"countryCodes":["jp"],"format":[["postcode","province","county"],["city","suburb"],["quarter","neighbourhood"],["block_number","housenumber"]],"dropdowns":["postcode","province","county","city","suburb","quarter","neighbourhood","block_number"],"widths":{"postcode":0.3,"province":0.35,"county":0.35,"city":0.65,"suburb":0.35,"quarter":0.5,"neighbourhood":0.5,"block_number":0.5,"housenumber":0.5}},{"countryCodes":["tr"],"format":[["neighbourhood"],["street","housenumber"],["postcode","district","city"]]},{"countryCodes":["ua"],"format":[["housenumber","postcode"],["street"]]},{"countryCodes":["cn"],"format":[["postcode","province"],["city","district"],["street","housenumber"]]}]; + + var dataDeprecated = [{"old":{"amenity":"firepit"},"replace":{"leisure":"firepit"}},{"old":{"barrier":"wire_fence"},"replace":{"barrier":"fence","fence_type":"chain"}},{"old":{"barrier":"wood_fence"},"replace":{"barrier":"fence","fence_type":"wood"}},{"old":{"highway":"ford"},"replace":{"ford":"yes"}},{"old":{"highway":"stile"},"replace":{"barrier":"stile"}},{"old":{"highway":"incline"},"replace":{"highway":"road","incline":"up"}},{"old":{"highway":"incline_steep"},"replace":{"highway":"road","incline":"up"}},{"old":{"highway":"unsurfaced"},"replace":{"highway":"road","incline":"unpaved"}},{"old":{"landuse":"wood"},"replace":{"landuse":"forest","natural":"wood"}},{"old":{"natural":"marsh"},"replace":{"natural":"wetland","wetland":"marsh"}},{"old":{"power_source":"*"},"replace":{"generator:source":"$1"}},{"old":{"power_rating":"*"},"replace":{"generator:output":"$1"}},{"old":{"shop":"organic"},"replace":{"shop":"supermarket","organic":"only"}}]; + + var dataDiscarded = {"created_by":true,"odbl":true,"odbl:note":true,"tiger:upload_uuid":true,"tiger:tlid":true,"tiger:source":true,"tiger:separated":true,"geobase:datasetName":true,"geobase:uuid":true,"sub_sea:type":true,"KSJ2:ADS":true,"KSJ2:ARE":true,"KSJ2:AdminArea":true,"KSJ2:COP_label":true,"KSJ2:DFD":true,"KSJ2:INT":true,"KSJ2:INT_label":true,"KSJ2:LOC":true,"KSJ2:LPN":true,"KSJ2:OPC":true,"KSJ2:PubFacAdmin":true,"KSJ2:RAC":true,"KSJ2:RAC_label":true,"KSJ2:RIC":true,"KSJ2:RIN":true,"KSJ2:WSC":true,"KSJ2:coordinate":true,"KSJ2:curve_id":true,"KSJ2:curve_type":true,"KSJ2:filename":true,"KSJ2:lake_id":true,"KSJ2:lat":true,"KSJ2:long":true,"KSJ2:river_id":true,"yh:LINE_NAME":true,"yh:LINE_NUM":true,"yh:STRUCTURE":true,"yh:TOTYUMONO":true,"yh:TYPE":true,"yh:WIDTH":true,"yh:WIDTH_RANK":true,"SK53_bulk:load":true}; + + var dataLocales = {"af":{"rtl":false},"ar":{"rtl":true},"ar-AA":{"rtl":true},"ast":{"rtl":false},"be":{"rtl":false},"bg":{"rtl":false},"bn":{"rtl":false},"bs":{"rtl":false},"ca":{"rtl":false},"ckb":{"rtl":true},"cs":{"rtl":false},"cy":{"rtl":false},"da":{"rtl":false},"de":{"rtl":false},"dv":{"rtl":true},"el":{"rtl":false},"en-GB":{"rtl":false},"eo":{"rtl":false},"es":{"rtl":false},"et":{"rtl":false},"eu":{"rtl":false},"fa":{"rtl":true},"fi":{"rtl":false},"fr":{"rtl":false},"gan":{"rtl":false},"gl":{"rtl":false},"gu":{"rtl":false},"he":{"rtl":true},"hi":{"rtl":false},"hr":{"rtl":false},"hu":{"rtl":false},"hy":{"rtl":false},"ia":{"rtl":false},"id":{"rtl":false},"is":{"rtl":false},"it":{"rtl":false},"ja":{"rtl":false},"jv":{"rtl":false},"km":{"rtl":false},"kn":{"rtl":false},"ko":{"rtl":false},"ku":{"rtl":false},"lij":{"rtl":false},"lt":{"rtl":false},"lv":{"rtl":false},"mg":{"rtl":false},"mk":{"rtl":false},"ml":{"rtl":false},"mn":{"rtl":false},"ms":{"rtl":false},"ne":{"rtl":false},"nl":{"rtl":false},"nn":{"rtl":false},"no":{"rtl":false},"nv":{"rtl":false},"pl":{"rtl":false},"pt":{"rtl":false},"pt-BR":{"rtl":false},"rm":{"rtl":false},"ro":{"rtl":false},"ru":{"rtl":false},"sc":{"rtl":false},"si":{"rtl":false},"sk":{"rtl":false},"sl":{"rtl":false},"so":{"rtl":false},"sq":{"rtl":false},"sr":{"rtl":false},"sv":{"rtl":false},"ta":{"rtl":false},"te":{"rtl":false},"th":{"rtl":false},"tl":{"rtl":false},"tr":{"rtl":false},"uk":{"rtl":false},"ur":{"rtl":true},"vi":{"rtl":false},"yue":{"rtl":false},"zh":{"rtl":false},"zh-CN":{"rtl":false},"zh-HK":{"rtl":false},"zh-TW":{"rtl":false}}; + + var dataPhoneFormats = {"us":"+1-202-555-1234","ca":"+1-226-555-1234","bs":"+1-242-555-1234","bb":"+1-246-555-1234","ai":"+1-264-555-1234","ag":"+1-268-555-1234","vg":"+1-284-555-1234","vi":"+1-340-555-1234","ky":"+1-345-555-1234","bm":"+1-441-555-1234","gd":"+1-473-555-1234","tc":"+1-649-555-1234","ms":"+1-664-555-1234","mp":"+1-670-555-1234","gu":"+1-671-555-1234","as":"+1-684-555-1234","sx":"+1-721-555-1234","lc":"+1-758-555-1234","dm":"+1-767-555-1234","vc":"+1-784-555-1234","pr":"+1-787-555-1234","do":"+1-809-555-1234","tt":"+1-868-555-1234","kn":"+1-869-555-1234","jm":"+1-876-555-1234","za":"+27 11 907 1111","nl":"+31 42 123 4567","fr":"+33 1 23 45 67 89","es":"+34 989 12 34 56","pt":"+351 211 123456","ie":"+353 20 912 3456","fi":"+358 40 123 4567","hu":"+36 1 123 45 67","hr":"+385 01 123 4567","si":"+386 31 123 4567","it":"+39 01 123 456","va":"+39 01 123 456","gb":"+44 1632 961234","gg":"+44 1632 961234","im":"+44 1632 961234","je":"+44 1632 961234","se":"+46 31 123 4567","no":"+47 22 12 34 56","sj":"+47 22 12 34 56","pl":"+48 42 123 4567","de":"+49 89 1234567","br":"+55 11 0982 1098","ru":"+7 495 1234567","kz":"+7 495 1234567","vn":"+84 1 234 5678","hk":"+852 1234 5678","cn":"+86 10 12345678","tw":"+886 1 2345 6789","tr":"+90 312 123 4567","ua":"+380 44 123 4567","at":"+43 1 123 45 67","ci":"+225 20 12 34 56","bj":"+229 20 12 34 56"}; + + var dataShortcuts = [{"tab":"browsing","text":"shortcuts.browsing.title","columns":[{"rows":[{"section":"navigation","text":"shortcuts.browsing.navigation.title"},{"shortcuts":["↓","↑","←","→"],"text":"shortcuts.browsing.navigation.pan","separator":","},{"modifiers":["⌘"],"shortcuts":["↓","↑","←","→"],"text":"shortcuts.browsing.navigation.pan_more","separator":","},{"shortcuts":["+","-"],"text":"shortcuts.browsing.navigation.zoom","separator":","},{"modifiers":["⌘"],"shortcuts":["+","-"],"text":"shortcuts.browsing.navigation.zoom_more","separator":","},{"section":"help","text":"shortcuts.browsing.help.title"},{"shortcuts":["help.key"],"text":"shortcuts.browsing.help.help"},{"shortcuts":["shortcuts.toggle.key"],"text":"shortcuts.browsing.help.keyboard"},{"section":"display_options","text":"shortcuts.browsing.display_options.title"},{"shortcuts":["background.key"],"text":"shortcuts.browsing.display_options.background"},{"modifiers":["⌘"],"shortcuts":["background.key"],"text":"shortcuts.browsing.display_options.background_switch"},{"shortcuts":["map_data.key"],"text":"shortcuts.browsing.display_options.map_data"},{"modifiers":["⌃","⌘"],"shortcuts":["F","F11"],"text":"shortcuts.browsing.display_options.fullscreen"},{"shortcuts":["area_fill.wireframe.key"],"text":"shortcuts.browsing.display_options.wireframe"},{"shortcuts":["background.minimap.key"],"text":"shortcuts.browsing.display_options.minimap"}]},{"rows":[{"section":"selecting","text":"shortcuts.browsing.selecting.title"},{"shortcuts":["Left-click"],"text":"shortcuts.browsing.selecting.select_one"},{"modifiers":["⇧"],"shortcuts":["Left-click"],"text":"shortcuts.browsing.selecting.select_multi"},{"modifiers":["⇧"],"shortcuts":["Left-click"],"gesture":"shortcuts.gesture.drag","text":"shortcuts.browsing.selecting.lasso"},{"modifiers":["⌘"],"shortcuts":["F"],"text":"shortcuts.browsing.selecting.search"},{"section":"with_selected","text":"shortcuts.browsing.with_selected.title"},{"shortcuts":["Right-click","shortcuts.key.space"],"text":"shortcuts.browsing.with_selected.edit_menu"},{"shortcuts":[],"text":""},{"section":"vertex_selected","text":"shortcuts.browsing.vertex_selected.title"},{"shortcuts":["[","↖"],"text":"shortcuts.browsing.vertex_selected.previous"},{"shortcuts":["]","↘"],"text":"shortcuts.browsing.vertex_selected.next"},{"shortcuts":["{","⇞"],"text":"shortcuts.browsing.vertex_selected.first"},{"shortcuts":["}","⇟"],"text":"shortcuts.browsing.vertex_selected.last"},{"shortcuts":["\\","shortcuts.key.pause"],"text":"shortcuts.browsing.vertex_selected.change_parent"}]}]},{"tab":"editing","text":"shortcuts.editing.title","columns":[{"rows":[{"section":"drawing","text":"shortcuts.editing.drawing.title"},{"shortcuts":["1"],"text":"shortcuts.editing.drawing.add_point"},{"shortcuts":["2"],"text":"shortcuts.editing.drawing.add_line"},{"shortcuts":["3"],"text":"shortcuts.editing.drawing.add_area"},{"shortcuts":["Left-click","shortcuts.key.space"],"text":"shortcuts.editing.drawing.place_point"},{"shortcuts":["⌥"],"text":"shortcuts.editing.drawing.disable_snap"},{"shortcuts":["↵","⎋"],"text":"shortcuts.editing.drawing.stop_line"},{"section":"commands","text":"shortcuts.editing.commands.title"},{"modifiers":["⌘"],"shortcuts":["C"],"text":"shortcuts.editing.commands.copy"},{"modifiers":["⌘"],"shortcuts":["V"],"text":"shortcuts.editing.commands.paste"},{"modifiers":["⌘"],"shortcuts":["Z"],"text":"shortcuts.editing.commands.undo"},{"modifiers":["⌘","⇧"],"shortcuts":["Z"],"text":"shortcuts.editing.commands.redo"},{"modifiers":["⌘"],"shortcuts":["S"],"text":"shortcuts.editing.commands.save"}]},{"rows":[{"section":"operations","text":"shortcuts.editing.operations.title"},{"shortcuts":["operations.continue.key"],"text":"shortcuts.editing.operations.continue_line"},{"shortcuts":["operations.merge.key"],"text":"shortcuts.editing.operations.merge"},{"shortcuts":["operations.disconnect.key"],"text":"shortcuts.editing.operations.disconnect"},{"shortcuts":["operations.split.key"],"text":"shortcuts.editing.operations.split"},{"shortcuts":["operations.reverse.key"],"text":"shortcuts.editing.operations.reverse"},{"shortcuts":["operations.move.key"],"text":"shortcuts.editing.operations.move"},{"shortcuts":["operations.rotate.key"],"text":"shortcuts.editing.operations.rotate"},{"shortcuts":["operations.orthogonalize.key"],"text":"shortcuts.editing.operations.orthogonalize"},{"shortcuts":["operations.circularize.key"],"text":"shortcuts.editing.operations.circularize"},{"shortcuts":["operations.reflect.key.long"],"text":"shortcuts.editing.operations.reflect_long"},{"shortcuts":["operations.reflect.key.short"],"text":"shortcuts.editing.operations.reflect_short"},{"modifiers":["⌘"],"shortcuts":["⌫"],"text":"shortcuts.editing.operations.delete"}]}]},{"tab":"tools","text":"shortcuts.tools.title","columns":[{"rows":[{"section":"info","text":"shortcuts.tools.info.title"},{"modifiers":["⌘"],"shortcuts":["info_panels.key"],"text":"shortcuts.tools.info.all"},{"modifiers":["⌘","⇧"],"shortcuts":["info_panels.background.key"],"text":"shortcuts.tools.info.background"},{"modifiers":["⌘","⇧"],"shortcuts":["info_panels.history.key"],"text":"shortcuts.tools.info.history"},{"modifiers":["⌘","⇧"],"shortcuts":["info_panels.location.key"],"text":"shortcuts.tools.info.location"},{"modifiers":["⌘","⇧"],"shortcuts":["info_panels.measurement.key"],"text":"shortcuts.tools.info.measurement"}]}]}]; + + var type$2 = "FeatureCollection"; + var features = [{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[1.97754,51.13111],[1.8457,63.45051],[-10.45898,57.01681],[-6.82251,55.26503],[-7.25583,55.06525],[-7.26546,55.0665],[-7.26992,55.06419],[-7.2725,55.06346],[-7.27818,55.05362],[-7.2893,55.04735],[-7.29939,55.0561],[-7.31835,55.04475],[-7.3447,55.05079],[-7.38831,55.02389],[-7.40547,55.00292],[-7.39157,54.99507],[-7.40075,54.98892],[-7.40706,54.98291],[-7.40363,54.97963],[-7.40633,54.97813],[-7.39835,54.97013],[-7.40745,54.96357],[-7.40178,54.95961],[-7.40727,54.95515],[-7.3944,54.94376],[-7.44444,54.93858],[-7.45216,54.89793],[-7.44204,54.87532],[-7.4713,54.83431],[-7.48092,54.83093],[-7.49216,54.82185],[-7.55121,54.79054],[-7.5443,54.78609],[-7.54958,54.75653],[-7.5349,54.74917],[-7.54881,54.74068],[-7.55941,54.74556],[-7.57894,54.74221],[-7.57507,54.7494],[-7.58606,54.75039],[-7.58872,54.74377],[-7.60031,54.74603],[-7.60632,54.74405],[-7.61662,54.74459],[-7.63593,54.75108],[-7.68854,54.72968],[-7.72064,54.72155],[-7.75094,54.70469],[-7.79094,54.71942],[-7.8051,54.71932],[-7.83497,54.73632],[-7.85419,54.72745],[-7.91496,54.67582],[-7.90174,54.66182],[-7.83832,54.63401],[-7.7433,54.6188],[-7.70863,54.63485],[-7.70682,54.6189],[-7.69386,54.6188],[-7.69631,54.61125],[-7.75845,54.59509],[-7.78708,54.58],[-7.79446,54.58141],[-7.79969,54.57704],[-7.79673,54.56915],[-7.8184,54.56315],[-7.83334,54.55227],[-7.82737,54.54299],[-7.85007,54.53363],[-7.90741,54.53722],[-7.93213,54.53388],[-8.00487,54.54568],[-8.03727,54.51162],[-8.04285,54.48759],[-8.08027,54.48829],[-8.09988,54.48395],[-8.09126,54.4765],[-8.111,54.47807],[-8.11512,54.46904],[-8.16542,54.46914],[-8.1776,54.46485],[-8.14293,54.45003],[-8.16284,54.4413],[-8.08731,54.4002],[-8.06062,54.37051],[-8.03289,54.35711],[-8.00054,54.34835],[-7.93333,54.30561],[-7.85849,54.29151],[-7.87067,54.28794],[-7.87265,54.26648],[-7.86123,54.25931],[-7.85917,54.21256],[-7.71043,54.20307],[-7.70193,54.20776],[-7.68828,54.202],[-7.67644,54.18906],[-7.66082,54.1871],[-7.62554,54.16545],[-7.62541,54.15319],[-7.61026,54.14353],[-7.57421,54.14142],[-7.57181,54.13287],[-7.56228,54.12704],[-7.51379,54.12998],[-7.47944,54.122],[-7.47169,54.12665],[-7.47075,54.13318],[-7.44684,54.15168],[-7.40792,54.156],[-7.42579,54.14092],[-7.41903,54.13629],[-7.3744,54.14172],[-7.37234,54.13881],[-7.39509,54.12624],[-7.39182,54.12017],[-7.36341,54.13157],[-7.34518,54.11577],[-7.32471,54.12123],[-7.32003,54.11379],[-7.3078,54.11718],[-7.30548,54.12347],[-7.31591,54.12697],[-7.31213,54.13162],[-7.3187,54.13411],[-7.31857,54.13745],[-7.32222,54.13836],[-7.32737,54.13544],[-7.3399,54.14585],[-7.30827,54.16716],[-7.30024,54.16625],[-7.29029,54.1715],[-7.28158,54.16839],[-7.2863,54.14919],[-7.29874,54.14904],[-7.30162,54.14411],[-7.28411,54.13971],[-7.29192,54.13071],[-7.29737,54.133],[-7.30883,54.13242],[-7.30333,54.12251],[-7.29218,54.11929],[-7.27844,54.12282],[-7.27707,54.12986],[-7.26613,54.13624],[-7.2566,54.16354],[-7.24015,54.17125],[-7.2575,54.17678],[-7.2581,54.19257],[-7.25179,54.19403],[-7.23608,54.1935],[-7.23338,54.19792],[-7.24317,54.20076],[-7.24892,54.1977],[-7.25183,54.20201],[-7.24119,54.20623],[-7.23094,54.20578],[-7.23269,54.20912],[-7.22188,54.21607],[-7.20643,54.2117],[-7.18506,54.22485],[-7.17055,54.21742],[-7.14721,54.22488],[-7.14633,54.23008],[-7.15051,54.23165],[-7.14613,54.23983],[-7.15802,54.24434],[-7.13985,54.25298],[-7.15255,54.26235],[-7.16064,54.27405],[-7.17991,54.27144],[-7.17201,54.28627],[-7.21252,54.2985],[-7.19888,54.31117],[-7.17918,54.30946],[-7.1812,54.3397],[-7.15339,54.33514],[-7.10253,54.35811],[-7.10811,54.36677],[-7.06927,54.3899],[-7.05593,54.41056],[-7.02898,54.42135],[-7.00198,54.40832],[-6.98683,54.40829],[-6.97562,54.40014],[-6.96774,54.40145],[-6.90682,54.36966],[-6.89772,54.35075],[-6.87527,54.33853],[-6.86512,54.32568],[-6.85163,54.29137],[-6.87452,54.28677],[-6.87791,54.27918],[-6.86673,54.27522],[-6.85177,54.26489],[-6.83693,54.26658],[-6.82165,54.24346],[-6.81633,54.22299],[-6.80045,54.22108],[-6.80122,54.21338],[-6.77599,54.19965],[-6.75573,54.1987],[-6.74316,54.18258],[-6.73406,54.18566],[-6.72445,54.18127],[-6.70295,54.20036],[-6.69166,54.20018],[-6.68673,54.19398],[-6.669,54.19584],[-6.65248,54.18102],[-6.6433,54.17801],[-6.63467,54.16449],[-6.63179,54.14766],[-6.64081,54.14238],[-6.63935,54.13599],[-6.66149,54.1205],[-6.6481,54.10153],[-6.66119,54.0934],[-6.66458,54.06629],[-6.64681,54.05873],[-6.62501,54.03737],[-6.59291,54.04755],[-6.58905,54.05808],[-6.5597,54.0481],[-6.52897,54.05888],[-6.50442,54.05566],[-6.47824,54.07004],[-6.47919,54.07762],[-6.43601,54.05959],[-6.36314,54.07057],[-6.36589,54.09338],[-6.36293,54.09758],[-6.37104,54.11497],[-6.3522,54.11084],[-6.34242,54.1114],[-6.33589,54.10833],[-6.33636,54.09469],[-6.31808,54.09096],[-6.30903,54.10463],[-6.29165,54.11235],[-6.28246,54.11145],[-6.26272,54.09786],[-5.35583,53.72597],[-7.0752,49.23912],[-1.83472,49.02346],[-2.12036,49.94415],[1.97754,51.13111]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.2,18.7],[-65,16.3],[-63.7,19.2],[-65.2,18.7]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-63,-50.5],[-55,-51],[-60,-54],[-63,-50.5]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-139.19952,60.08402],[-141,60.30621],[-141,76],[-169,68.63655],[-169,65.20147],[-180,61],[-180,-4],[-154,9],[-133.76404,54.54021],[-130.73868,54.71986],[-129.96277,55.29163],[-130.15228,55.7758],[-130.01787,55.90688],[-130.00362,56.00798],[-130.10284,56.12336],[-130.24498,56.09656],[-130.42625,56.14249],[-131.87439,56.79787],[-135.02884,59.56285],[-135.11759,59.62306],[-135.15827,59.6261],[-135.47928,59.79822],[-136.28677,59.57955],[-136.30531,59.46462],[-136.36836,59.44898],[-136.47697,59.46558],[-137.19727,59.01935],[-139.19952,60.08402]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.96064,48.99841],[-121.22623,49.00049],[-122.26513,49.00246],[-122.7565,49.00208],[-123.32218,49.00218],[-122.97821,48.76524],[-123.2666,48.69821],[-123.21991,48.21186],[-125.80444,48.60749],[-124.32129,31.54109],[-117.125,32.53429],[-116.82417,32.55996],[-115.88036,32.63735],[-115.49738,32.66486],[-114.71984,32.71877],[-114.7649,32.64602],[-114.80885,32.60959],[-114.81481,32.49451],[-112.81743,31.88004],[-111.07481,31.33224],[-109.56051,31.33402],[-108.20847,31.33384],[-108.20838,31.78363],[-106.52847,31.78391],[-106.52781,31.78086],[-106.52249,31.77501],[-106.51249,31.76933],[-106.50988,31.7612],[-106.50709,31.76123],[-106.48896,31.74806],[-106.48473,31.74769],[-106.4719,31.75101],[-106.46816,31.75897],[-106.45434,31.76466],[-106.45035,31.76426],[-106.43516,31.75492],[-106.41484,31.75101],[-106.37864,31.73021],[-106.37225,31.71174],[-106.34924,31.69633],[-106.33289,31.66178],[-106.3068,31.62459],[-106.28079,31.56179],[-106.24775,31.54226],[-106.2329,31.49982],[-106.2105,31.46857],[-106.08201,31.39863],[-106.00554,31.39233],[-105.76401,31.17051],[-105.58548,31.06117],[-105.56419,30.98526],[-104.99153,30.6639],[-104.97162,30.60896],[-104.90639,30.57822],[-104.83772,30.38117],[-104.70177,30.20567],[-104.68048,29.92399],[-104.57611,29.77838],[-104.51157,29.63674],[-104.39758,29.57047],[-104.39278,29.55293],[-104.05769,29.32173],[-103.79883,29.2581],[-103.78196,29.26555],[-103.76759,29.22799],[-103.14102,28.93666],[-102.86087,29.2217],[-102.65076,29.79418],[-101.41068,29.73457],[-101.26511,29.51372],[-101.05997,29.452],[-101.04083,29.38038],[-100.96303,29.34735],[-100.94406,29.34369],[-100.94071,29.33351],[-100.92775,29.32663],[-100.89814,29.30957],[-100.87818,29.28086],[-100.80076,29.2238],[-100.76437,29.15981],[-100.67047,29.08663],[-100.6412,28.91299],[-100.63236,28.90255],[-100.61296,28.89939],[-100.534,28.75622],[-100.51495,28.74531],[-100.50705,28.7143],[-100.51203,28.70666],[-100.51014,28.69127],[-100.50048,28.66186],[-100.45547,28.6381],[-100.44697,28.60743],[-100.35599,28.45239],[-100.34946,28.39653],[-100.29488,28.31315],[-100.29591,28.27324],[-100.17197,28.17493],[-99.93645,27.9568],[-99.87722,27.80173],[-99.79671,27.73338],[-99.772,27.72532],[-99.74556,27.69979],[-99.71947,27.65981],[-99.5957,27.59974],[-99.54094,27.60537],[-99.53055,27.57973],[-99.52034,27.55782],[-99.52802,27.49773],[-99.50141,27.49986],[-99.48755,27.49518],[-99.47897,27.48421],[-99.48661,27.46453],[-99.49534,27.44861],[-99.48927,27.40941],[-99.53957,27.31565],[-99.43588,27.19678],[-99.46404,27.01968],[-99.16698,26.56039],[-99.17474,26.53939],[-99.12698,26.51958],[-99.1135,26.42954],[-99.08355,26.39625],[-99.06007,26.39737],[-99.03634,26.41255],[-99.02042,26.40598],[-99.01291,26.39364],[-98.95686,26.38641],[-98.9566,26.37365],[-98.94523,26.36949],[-98.90013,26.36419],[-98.89905,26.35454],[-98.80305,26.36626],[-98.78254,26.30511],[-98.66667,26.23457],[-98.58496,26.24647],[-98.57951,26.23434],[-98.56519,26.23987],[-98.56294,26.22464],[-98.50599,26.20858],[-98.44806,26.21236],[-98.38617,26.15721],[-98.34176,26.15278],[-98.33579,26.1388],[-98.30626,26.10003],[-98.28841,26.10512],[-98.26524,26.0914],[-98.19898,26.06411],[-98.09577,26.05698],[-98.07568,26.06667],[-98.08302,26.03396],[-97.9771,26.04136],[-97.9532,26.06179],[-97.81643,26.04475],[-97.77017,26.02439],[-97.73884,26.02902],[-97.5289,25.90648],[-97.52151,25.88625],[-97.50615,25.89031],[-97.49851,25.89903],[-97.49637,25.89641],[-97.49748,25.88008],[-97.49422,25.87981],[-97.48847,25.88564],[-97.46409,25.88174],[-97.42607,25.842],[-97.36856,25.8396],[-97.26231,25.94724],[-80.81543,24.00633],[-66.87378,44.77794],[-67.16148,45.16715],[-67.2286,45.16739],[-67.26246,45.18797],[-67.28311,45.19175],[-67.28959,45.18784],[-67.29332,45.17568],[-67.29049,45.17317],[-67.3001,45.16776],[-67.3025,45.16122],[-67.29761,45.14766],[-67.33975,45.1255],[-67.40524,45.16122],[-67.40387,45.17139],[-67.4818,45.27682],[-67.42172,45.38543],[-67.45262,45.41008],[-67.50498,45.4889],[-67.41623,45.50105],[-67.42219,45.55661],[-67.42902,45.56833],[-67.42331,45.57154],[-67.42498,45.57836],[-67.45193,45.60323],[-67.77981,45.6738],[-67.79019,47.06776],[-67.88006,47.1067],[-67.91319,47.14793],[-67.92598,47.15418],[-67.95181,47.1875],[-68.02374,47.23915],[-68.13017,47.29309],[-68.17669,47.32893],[-68.24046,47.35354],[-68.32809,47.36005],[-68.36363,47.35476],[-68.38054,47.34167],[-68.38509,47.30321],[-68.37367,47.28796],[-68.4377,47.28232],[-68.47916,47.29623],[-68.51074,47.29885],[-68.54593,47.28441],[-68.58408,47.28482],[-68.59777,47.27134],[-68.59271,47.25762],[-68.61889,47.24148],[-68.68936,47.24125],[-68.71768,47.23676],[-68.80128,47.21423],[-68.89629,47.17676],[-69.05354,47.24847],[-69.04924,47.41798],[-69.22425,47.45961],[-69.99729,46.69558],[-70.0569,46.4149],[-70.25551,46.10871],[-70.29001,46.09431],[-70.39919,45.80667],[-70.83229,45.40062],[-70.80794,45.37878],[-70.82663,45.2367],[-70.87538,45.23453],[-70.92138,45.28099],[-70.90645,45.30918],[-71.0109,45.34798],[-71.08429,45.30556],[-71.1454,45.24226],[-71.20525,45.25278],[-71.28925,45.30097],[-71.41405,45.23513],[-71.43044,45.12381],[-71.49692,45.06991],[-71.50623,45.04878],[-71.49284,45.03629],[-71.50027,45.01372],[-71.79359,45.01075],[-72.08774,45.00581],[-72.14155,45.00568],[-72.15282,45.00609],[-72.17142,45.00584],[-72.25847,45.00436],[-72.38795,45.00626],[-72.4496,45.00863],[-72.5356,45.00936],[-72.66257,45.01523],[-72.82537,45.01642],[-73.08466,45.01561],[-73.45219,45.00875],[-74.14699,44.99145],[-74.33753,44.9923],[-74.50786,44.99798],[-74.66158,44.99949],[-74.71244,44.99734],[-74.75887,44.98708],[-74.76368,45.00632],[-74.78977,45.00365],[-74.82376,45.01773],[-74.94186,44.98229],[-75.30098,44.83883],[-75.30304,44.82836],[-75.59418,44.6457],[-75.97269,44.33502],[-75.97295,44.34595],[-76.00059,44.34797],[-76.17645,44.2865],[-76.18744,44.22158],[-76.88782,43.82759],[-79.16851,43.32168],[-79.05487,43.25371],[-79.05092,43.169],[-79.04603,43.16093],[-79.04208,43.13942],[-79.07002,43.12038],[-79.06015,43.114],[-79.0568,43.10474],[-79.0774,43.07861],[-78.9996,43.05484],[-79.02311,43.02071],[-79.02552,42.99473],[-78.96235,42.9573],[-78.91188,42.9426],[-78.90398,42.89181],[-82.42767,41.47978],[-83.14316,42.03807],[-83.12805,42.23843],[-83.09715,42.29052],[-83.07252,42.31515],[-82.94575,42.34332],[-82.59676,42.5479],[-82.51368,42.61785],[-82.5108,42.66464],[-82.4675,42.76415],[-82.48055,42.80573],[-82.45497,42.9284],[-82.41334,42.97099],[-82.42596,42.99536],[-82.15851,43.39507],[-83.53729,46.098],[-83.96301,46.05036],[-84.11021,46.23851],[-84.09794,46.25656],[-84.11613,46.26878],[-84.11905,46.31516],[-84.10721,46.3218],[-84.14394,46.41076],[-84.11682,46.51576],[-84.13536,46.53218],[-84.16162,46.5284],[-84.21621,46.53891],[-84.26994,46.49189],[-84.36092,46.50997],[-84.55284,46.4407],[-84.95178,46.77185],[-89.59179,48.00307],[-89.67547,48.00371],[-90.87204,48.25943],[-91.41312,48.06753],[-92.99377,48.62474],[-93.34877,48.62604],[-93.35529,48.61124],[-93.37074,48.60584],[-93.39812,48.60369],[-93.40542,48.61089],[-93.43846,48.59478],[-93.46859,48.59205],[-93.45735,48.56667],[-93.46533,48.54593],[-93.64763,48.51751],[-93.80625,48.51888],[-93.80642,48.58047],[-93.83328,48.62582],[-93.84865,48.63064],[-93.93388,48.6326],[-94.01327,48.64471],[-94.16176,48.64697],[-94.25025,48.65463],[-94.24931,48.67827],[-94.26046,48.69816],[-94.30578,48.71073],[-94.32758,48.70433],[-94.36123,48.70478],[-94.38406,48.71135],[-94.41629,48.71067],[-94.44294,48.69266],[-94.53615,48.7024],[-94.55031,48.71419],[-94.58894,48.71928],[-94.69425,48.77938],[-94.70129,48.83376],[-94.68996,48.83953],[-94.68395,48.99914],[-111.96064,48.99841]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[180,55],[170,53],[180,49],[180,55]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[143,22],[147,22],[147,12],[143,12],[143,22]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-171.5,-10],[-171,-15],[-167,-15],[-171.5,-10]]]}}]; + var dataImperial = { + type: type$2, + features: features + }; + + var type$3 = "FeatureCollection"; + var features$1 = [{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[113.573,22.186],[114,22.5],[114.05534,22.503],[114.0595,22.51422],[114.07345,22.51934],[114.0786,22.53012],[114.08512,22.53228],[114.09034,22.53717],[114.09611,22.53486],[114.10602,22.53472],[114.1115,22.52929],[114.11522,22.5308],[114.11649,22.53418],[114.11979,22.53511],[114.1244,22.5393],[114.12729,22.53947],[114.13018,22.54132],[114.13807,22.5432],[114.14429,22.54176],[114.14441,22.54114],[114.14846,22.54179],[114.14855,22.54397],[114.15042,22.54593],[114.14964,22.54954],[114.15166,22.55168],[114.15192,22.55438],[114.15642,22.55495],[114.15841,22.55909],[114.16032,22.56153],[114.16162,22.56187],[114.1634,22.55931],[114.16553,22.5593],[114.16733,22.56119],[114.16934,22.56093],[114.17061,22.5597],[114.17702,22.56],[114.17798,22.55546],[114.18401,22.5552],[114.18673,22.55468],[114.1878,22.55545],[114.18979,22.55446],[114.1955,22.55564],[114.19674,22.55691],[114.20005,22.55717],[114.20376,22.55623],[114.20884,22.55672],[114.22438,22.55055],[114.2264,22.5476],[114.22545,22.54528],[114.22661,22.54339],[114.32,22.576],[114.45,22.43],[114.45,22.14],[113.9,22.14],[113.75,22.22],[113.553,22.095],[113.54678,22.1207],[113.5456,22.1207],[113.54076,22.12373],[113.54016,22.13618],[113.54701,22.13651],[113.5475,22.14583],[113.52456,22.17978],[113.53623,22.20191],[113.53299,22.21232],[113.53497,22.21351],[113.53735,22.21377],[113.54156,22.21315],[113.54385,22.21709],[113.55849,22.21565],[113.573,22.186]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75,18],[-80,20.5],[-83,19],[-77,16],[-75,18]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-64.33594,32.86113],[-79.39819,27.21067],[-80.63965,23.71998],[-73.39966,20.40642],[-65.1709,19.20743],[-65.09399,16.23577],[-59.13391,16.80454],[-62.64404,15.16228],[-59.43054,14.85985],[-62.83081,13.64599],[-61.80359,10.73752],[-62.08649,10.04729],[-61.06201,9.85522],[-59.81369,8.31274],[-59.8027,8.27469],[-59.83498,8.22712],[-59.94141,8.21149],[-59.99771,8.15576],[-59.97986,8.13265],[-59.99771,8.12041],[-60.00183,8.07147],[-60.05127,8.02524],[-60.09933,8.03747],[-60.12268,8.02388],[-60.14053,7.98988],[-60.36163,7.83345],[-60.53467,7.81713],[-60.5896,7.6375],[-60.72144,7.54493],[-60.5896,7.31888],[-60.63904,7.24532],[-60.54703,7.12542],[-60.46875,7.20309],[-60.37262,7.18401],[-60.29984,7.1445],[-60.2916,7.06819],[-60.39871,6.95097],[-60.66513,6.83235],[-60.71869,6.75053],[-60.91232,6.81735],[-60.94254,6.72053],[-61.14441,6.72326],[-61.23093,6.5773],[-61.1554,6.45314],[-61.14441,6.20199],[-61.39709,5.95619],[-60.71045,5.20036],[-60.21606,5.23319],[-59.99634,5.06906],[-60.13916,4.51071],[-59.69971,4.40118],[-59.5459,3.93002],[-59.87549,3.56825],[-59.7876,3.37086],[-60.01831,2.83332],[-59.90845,2.38335],[-59.69971,2.2626],[-59.77661,1.87833],[-59.65302,1.85087],[-59.69147,1.75754],[-59.61456,1.71361],[-59.55139,1.73283],[-59.36188,1.49123],[-59.26575,1.39238],[-58.92242,1.30726],[-58.83728,1.17271],[-58.71918,1.23037],[-58.71094,1.29902],[-58.49121,1.26058],[-58.461,1.37591],[-58.50494,1.38689],[-58.51044,1.46102],[-58.38135,1.4775],[-58.32642,1.57359],[-58.00507,1.49946],[-57.99133,1.65321],[-57.79907,1.69165],[-57.70844,1.71087],[-57.54364,1.68341],[-57.41455,1.94421],[-57.10693,1.97715],[-56.8103,1.85636],[-56.48071,1.92225],[-55.90942,1.81244],[-55.90942,2.04302],[-56.14014,2.26534],[-55.94788,2.53701],[-55.70892,2.39981],[-55.37933,2.43274],[-55.19257,2.53976],[-54.98108,2.57268],[-54.88495,2.43548],[-54.71191,2.46293],[-54.69543,2.34767],[-54.58832,2.32846],[-54.43451,2.43548],[-54.20654,2.76748],[-54.17358,3.12955],[-53.96484,3.57921],[-54.33838,4.00674],[-54.44412,4.52577],[-54.46884,4.91036],[-54.36653,5.13061],[-54.27727,5.26191],[-54.19968,5.3084],[-54.01222,5.54457],[-54.0239,5.64605],[-53.86322,5.94936],[-64.33594,32.86113]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-14.5,-6],[11.79657,-17.27197],[12.03415,-17.14866],[12.38159,-17.22213],[12.58484,-17.22476],[13.01193,-16.97405],[13.24951,-17.00098],[13.38135,-16.98522],[13.93341,-17.38734],[18.42476,-17.38996],[18.47763,-17.46857],[18.62663,-17.64599],[18.79211,-17.76177],[18.92944,-17.82061],[19.33044,-17.84806],[19.66278,-17.8644],[19.74792,-17.90557],[19.85161,-17.87486],[20.10361,-17.90296],[20.18394,-17.88401],[20.34737,-17.88466],[20.44693,-17.91733],[20.51697,-17.96698],[20.83008,-18.03032],[20.95711,-17.97285],[21.16997,-17.93497],[21.42677,-18.0264],[23.45032,-17.63879],[22.00012,-16.38866],[21.99944,-13.00523],[24.03809,-12.99118],[24.03809,-10.91962],[24.43359,-11.09217],[24.45557,-11.48002],[25.37842,-11.19996],[25.42236,-11.60919],[26.96045,-11.97484],[27.18018,-11.60919],[28.125,-12.42048],[29.11377,-13.36824],[29.1687,-13.43771],[29.55872,-13.19716],[29.68506,-13.2239],[29.62463,-13.41099],[29.80591,-13.44305],[29.81415,-12.14809],[29.31152,-12.55456],[28.41064,-11.78133],[28.63037,-10.70379],[28.65234,-9.73071],[28.37219,-9.24309],[28.89748,-8.47916],[30.78644,-8.26857],[29.39941,-6.05316],[29.4873,-4.45595],[29.75922,-4.46759],[29.81415,-4.36421],[29.88007,-4.36832],[30.04074,-4.26699],[30.07919,-4.1629],[30.18356,-4.08311],[30.1918,-4.05126],[30.21566,-4.04595],[30.22923,-4.01136],[30.21326,-3.99612],[30.25978,-3.88755],[30.29274,-3.86288],[30.34424,-3.77245],[30.39848,-3.79095],[30.40878,-3.76765],[30.39548,-3.7304],[30.39054,-3.72821],[30.3896,-3.71918],[30.39093,-3.7101],[30.39514,-3.70444],[30.42028,-3.64963],[30.46886,-3.53501],[30.67108,-3.41335],[30.63297,-3.34892],[30.84206,-3.25535],[30.84549,-3.16108],[30.83485,-3.09698],[30.7933,-3.06235],[30.82111,-3.02258],[30.84515,-2.9739],[30.74764,-2.99618],[30.7037,-2.97013],[30.66422,-2.98967],[30.57632,-2.90738],[30.49393,-2.94441],[30.41016,-2.87172],[30.52002,-2.39432],[30.77545,-2.38883],[30.8606,-2.31199],[30.84961,-2.19398],[30.89081,-2.07322],[30.81116,-1.96068],[30.83862,-1.6587],[30.73425,-1.4418],[30.56259,-1.33884],[30.4541,-1.05737],[30.35797,-1.06287],[30.34149,-1.13152],[30.16571,-1.34296],[29.91852,-1.48024],[29.83887,-1.31824],[29.58344,-1.39238],[29.729,0.05493],[29.96796,0.5136],[29.9707,0.8569],[30.22339,0.92281],[30.24536,1.15349],[30.47745,1.20772],[31.30966,2.15693],[31.20255,2.22211],[31.20255,2.29278],[31.16409,2.27906],[31.13937,2.28318],[31.13113,2.26534],[31.07826,2.30033],[31.0714,2.34767],[31.00479,2.4005],[30.97183,2.40461],[30.94711,2.38746],[30.94849,2.36276],[30.9375,2.33532],[30.88531,2.34012],[30.83038,2.42176],[30.74112,2.43274],[30.76035,2.5864],[30.90179,2.88132],[30.76447,3.04178],[30.93613,3.40239],[30.94059,3.50588],[30.85236,3.48601],[30.90866,3.5936],[30.95055,3.63918],[30.94677,3.65391],[30.9866,3.70187],[31.00582,3.70701],[31.02058,3.69708],[31.16547,3.7954],[31.28838,3.79643],[31.52699,3.66282],[31.7038,3.72449],[31.82671,3.82794],[31.96198,3.65596],[31.95854,3.57099],[32.04987,3.59155],[32.07733,3.57099],[32.0842,3.53672],[32.20093,3.50657],[32.21672,3.56448],[32.19578,3.59977],[32.41516,3.74504],[32.72055,3.76782],[32.89307,3.81219],[33.02782,3.89371],[33.18146,3.7793],[33.51173,3.75258],[33.98758,4.23309],[34.05762,4.28342],[34.38721,4.61065],[35.94452,4.62023],[35.95688,4.53467],[36.04134,4.44568],[36.89621,4.4491],[38.14728,3.62992],[38.55927,3.62033],[38.92181,3.51068],[39.56039,3.43392],[39.87076,3.87522],[40.76752,4.28753],[41.16371,3.94372],[41.89774,3.97797],[41.31271,3.14463],[40.98896,2.82869],[40.99548,-0.84042],[41.7,-1.8],[41.7,-49],[-27,-60],[-65.7,-52.5],[-14.5,-6]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[31.33301,35.47856],[33.0249,33.75175],[35.44189,36.02245],[31.33301,35.47856]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[14,36.5],[15,36],[14,35],[14,36.5]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[0,62],[2.5,51.3],[-2,50],[-1.9,49],[-20,53],[0,62]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[180,-35],[161,-19],[167,-12],[180,-22],[180,4],[170,3.7],[127,5.7],[118,2.7],[119.5,5.4],[117.2,7.5],[102.6,8],[102.9158,11.74099],[102.76268,12.07357],[102.70226,12.17158],[102.74139,12.46474],[102.53128,12.68857],[102.49557,12.9256],[102.49763,13.0064],[102.4597,13.08199],[102.43412,13.09026],[102.39155,13.16407],[102.35481,13.29341],[102.35893,13.30945],[102.34503,13.34837],[102.35928,13.39797],[102.3567,13.48095],[102.36168,13.50582],[102.33559,13.53787],[102.33971,13.56023],[102.35498,13.5649],[102.36511,13.5785],[102.40047,13.5679],[102.42537,13.56891],[102.44614,13.56123],[102.48047,13.57091],[102.53849,13.56757],[102.5699,13.58526],[102.57806,13.60486],[102.62501,13.60845],[102.62132,13.61295],[102.60767,13.61562],[102.57231,13.63331],[102.56922,13.64082],[102.54879,13.658],[102.56252,13.68552],[102.5972,13.70803],[102.67084,13.74472],[102.68818,13.75172],[102.7014,13.7684],[102.73161,13.77082],[102.76543,13.85541],[102.78397,13.93207],[102.80388,13.94406],[102.81607,13.96639],[102.90705,14.02119],[102.89726,14.0535],[102.90095,14.0838],[102.92421,14.10744],[102.92378,14.12838],[102.94147,14.15035],[102.92953,14.17952],[103.17535,14.33774],[103.19939,14.32992],[103.68553,14.44],[103.94508,14.34157],[104.05756,14.34589],[104.06636,14.3419],[104.26025,14.37749],[104.50058,14.36984],[104.57817,14.36019],[104.6422,14.42387],[104.66632,14.40234],[104.68357,14.39877],[104.71138,14.43169],[104.72305,14.42188],[104.71687,14.40043],[104.75344,14.40459],[104.80408,14.43867],[104.83429,14.41573],[104.99239,14.3838],[105.05402,14.19783],[105.47905,14.49186],[105.60883,15.0005],[105.46703,15.13005],[105.48866,15.20237],[105.59269,15.2716],[105.58617,15.32823],[105.50308,15.31912],[105.46703,15.33948],[105.49175,15.37921],[105.59372,15.42869],[105.59372,15.50927],[105.60986,15.54871],[105.62616,15.56492],[105.62702,15.59129],[105.63518,15.62742],[105.63612,15.66056],[105.5975,15.72088],[105.49965,15.76681],[105.46291,15.74517],[105.43819,15.75459],[105.40489,15.79424],[105.34241,15.92039],[105.37811,15.98344],[105.39167,15.99136],[105.41931,15.98608],[105.42652,15.99764],[105.41468,16.01661],[105.21263,16.05076],[105.04955,16.10552],[105.01316,16.24401],[104.88235,16.37812],[104.8391,16.45782],[104.77936,16.49041],[104.73919,16.53287],[104.74228,16.62205],[104.76391,16.70953],[104.73953,16.80323],[104.76425,16.85088],[104.73782,16.90968],[104.744,17.0128],[104.81266,17.21853],[104.79841,17.39274],[104.70348,17.52833],[104.46384,17.65515],[104.34368,17.83564],[104.27776,17.8559],[104.22661,17.98069],[104.1116,18.10735],[104.06525,18.21174],[103.97392,18.33823],[103.9286,18.33237],[103.88809,18.29456],[103.85582,18.28673],[103.83659,18.32715],[103.79128,18.3467],[103.70201,18.34214],[103.60931,18.40405],[103.57292,18.40437],[103.51593,18.42978],[103.45963,18.42587],[103.41568,18.44802],[103.30479,18.43206],[103.24265,18.37082],[103.24333,18.34133],[103.29123,18.32357],[103.28899,18.29521],[103.23595,18.28299],[103.16608,18.25511],[103.02429,17.98135],[102.6535,17.83237],[102.40631,17.99963],[102.10968,18.22413],[101.548,17.81538],[101.30493,17.64991],[101.14563,17.46595],[100.95886,17.61654],[101.01757,17.88858],[101.18752,18.05121],[101.16863,18.10409],[101.18134,18.33595],[101.08727,18.38287],[101.05499,18.43988],[101.23215,18.73015],[101.35265,19.04524],[101.25927,19.12733],[101.2373,19.32637],[101.25824,19.58438],[101.11954,19.56836],[101.08898,19.58777],[101.08624,19.59715],[101.03165,19.6185],[100.89844,19.62125],[100.77827,19.49249],[100.63751,19.56432],[100.58258,19.49313],[100.47478,19.5944],[100.42929,19.67152],[100.43341,19.7024],[100.4147,19.7255],[100.40525,19.7646],[100.43907,19.80345],[100.45555,19.84843],[100.50636,19.87264],[100.51709,19.93027],[100.58653,20.1599],[100.56576,20.1757],[100.54945,20.17473],[100.52731,20.14379],[100.51065,20.14895],[100.48697,20.17956],[100.46774,20.196],[100.45246,20.20147],[100.45521,20.22129],[100.44783,20.23546],[100.41607,20.25286],[100.40594,20.28184],[100.38397,20.31082],[100.37556,20.35187],[100.36165,20.35638],[100.35736,20.37408],[100.33195,20.39902],[100.27805,20.40224],[100.25917,20.39677],[100.2475,20.37263],[100.22535,20.35509],[100.22346,20.31839],[100.16579,20.29988],[100.17162,20.24545],[100.10845,20.25221],[100.09266,20.2696],[100.09798,20.31485],[100.07961,20.3678],[99.9567,20.46417],[99.91636,20.44925],[99.90765,20.44977],[99.89121,20.44511],[99.87276,20.44406],[99.86212,20.44326],[99.80186,20.33948],[99.46472,20.3884],[99.56085,20.20035],[99.43691,20.08882],[99.27727,20.11623],[99.06921,20.1101],[98.97789,19.74538],[98.24387,19.68656],[97.85934,19.57014],[97.76733,18.57336],[97.39655,18.47179],[97.62451,18.30238],[97.73849,17.97743],[97.66502,17.87943],[97.90947,17.56745],[98.52951,16.82557],[98.51303,16.69276],[98.69293,16.26873],[98.87421,16.43609],[98.93394,16.3353],[98.84743,16.13356],[98.74512,16.12037],[98.58307,16.07287],[98.5762,15.79754],[98.54736,15.37557],[98.17383,15.15167],[98.3606,14.63674],[99.08295,13.89208],[99.16534,13.72204],[99.18182,13.00723],[99.39331,12.56797],[99.64153,11.78973],[99.32156,11.30266],[98.77859,10.67849],[98.80597,10.47642],[98.76657,10.40459],[98.74924,10.34194],[96.85547,6.40265],[92.42523,20.54794],[92.2728,20.96272],[92.187,21.16],[92.26,21.36],[92.27,21.4328],[92.62,21.43],[92.6,22],[93.22,22.25],[93.4,23.7],[93.34,23.95],[94.155,23.847],[94.17,23.92],[94.25171,24.07405],[94.28,24.23],[94.30175,24.2371],[94.3256,24.2731],[94.6,24.7],[94.78,25.47],[95.2,26],[95.1,26.6],[97.3,27.9],[96.14,29.38],[95.4,29.1],[94.8,29.2],[92.5,27.8],[91.64,27.76],[91.4,28],[89.58,28.18],[88.9,27.32],[88.74,27.47],[88.9,27.86],[88.7,28.1],[88.1,27.87],[85.93,27.942],[81.6,30.5],[81.2,30],[78.73,31.5],[78.77,31.99],[78.4,32.5],[79.3,32.5],[79,34.3],[78.3,34.6],[78,35.5],[76.1,35.8],[76,36.55],[75.15,37],[72.5,36.9],[71.1,36.1],[71.65,35.44],[71.45,35],[70.985,34.54],[71.18,34.36],[71.092,34.118],[70.88,33.97],[70.5,33.94],[69.908,34.04],[69.869,33.96],[70,33.75],[70.13,33.73],[70.34,33.34],[70.013,33.14],[69.57,33.09],[69.24,32.45],[69.3,31.9],[68.1,31.6],[66.393,30.934],[66.2,29.8],[62.5,29.4],[60.87,29.86],[61.53,29.0165],[61.66,28.77],[61.96,28.54],[62.43,28.42],[62.6,28.25],[62.795,28.28],[62.86,27.25],[63.24,27.25],[63.327,27.13],[63.25,27.1],[63.25,26.84],[63.18,26.83],[63.18,26.65],[62.3,26.5],[62.2,26.28],[61.85,26.22],[61.84,25.75],[61.68,25.67],[56.5,-21],[180,-65],[180,-35]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[138.7,46.7],[145.5,44.5],[145.2,43.7],[146,43.3],[142,18],[122,24.3],[138.7,46.7]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-180,7],[-148,7],[-151,-12],[-171.5,-10.75],[-171,-16],[-152,-19],[-180,-55],[-180,7]]]}}]; + var dataDriveLeft = { + type: type$3, + features: features$1 + }; + + var en = {"icons":{"information":"info","remove":"remove","undo":"undo"},"modes":{"add_area":{"title":"Area","description":"Add parks, buildings, lakes or other areas to the map.","tail":"Click on the map to start drawing an area, like a park, lake, or building."},"add_line":{"title":"Line","description":"Add highways, streets, pedestrian paths, canals or other lines to the map.","tail":"Click on the map to start drawing a road, path, or route."},"add_point":{"title":"Point","description":"Add restaurants, monuments, postal boxes or other points to the map.","tail":"Click on the map to add a point."},"browse":{"title":"Browse","description":"Pan and zoom the map."},"draw_area":{"tail":"Click to add nodes to your area. Click the first node to finish the area."},"draw_line":{"tail":"Click to add more nodes to the line. Click on other lines to connect to them, and double-click to end the line."},"drag_node":{"connected_to_hidden":"This can't be edited because it is connected to a hidden feature."}},"operations":{"add":{"annotation":{"point":"Added a point.","vertex":"Added a node to a way.","relation":"Added a relation."}},"start":{"annotation":{"line":"Started a line.","area":"Started an area."}},"continue":{"key":"A","title":"Continue","description":"Continue this line.","not_eligible":"No line can be continued here.","multiple":"Several lines can be continued here. To choose a line, press the Shift key and click on it to select it.","annotation":{"line":"Continued a line.","area":"Continued an area."}},"cancel_draw":{"annotation":"Canceled drawing."},"change_role":{"annotation":"Changed the role of a relation member."},"change_tags":{"annotation":"Changed tags."},"circularize":{"title":"Circularize","description":{"line":"Make this line circular.","area":"Make this area circular."},"key":"O","annotation":{"line":"Made a line circular.","area":"Made an area circular."},"not_closed":"This can't be made circular because it's not a loop.","too_large":"This can't be made circular because not enough of it is currently visible.","connected_to_hidden":"This can't be made circular because it is connected to a hidden feature."},"orthogonalize":{"title":"Square","description":{"line":"Square the corners of this line.","area":"Square the corners of this area."},"key":"S","annotation":{"line":"Squared the corners of a line.","area":"Squared the corners of an area."},"not_squarish":"This can't be made square because it is not squarish.","too_large":"This can't be made square because not enough of it is currently visible.","connected_to_hidden":"This can't be made square because it is connected to a hidden feature."},"straighten":{"title":"Straighten","description":"Straighten this line.","key":"S","annotation":"Straightened a line.","too_bendy":"This can't be straightened because it bends too much.","connected_to_hidden":"This line can't be straightened because it is connected to a hidden feature."},"delete":{"title":"Delete","description":{"single":"Delete this feature permanently.","multiple":"Delete these features permanently."},"annotation":{"point":"Deleted a point.","vertex":"Deleted a node from a way.","line":"Deleted a line.","area":"Deleted an area.","relation":"Deleted a relation.","multiple":"Deleted {n} features."},"too_large":{"single":"This feature can't be deleted because not enough of it is currently visible.","multiple":"These features can't be deleted because not enough of them are currently visible."},"incomplete_relation":{"single":"This feature can't be deleted because it hasn't been fully downloaded.","multiple":"These features can't be deleted because they haven't been fully downloaded."},"part_of_relation":{"single":"This feature can't be deleted because it is part of a larger relation. You must remove it from the relation first.","multiple":"These features can't be deleted because they are part of larger relations. You must remove them from the relations first."},"connected_to_hidden":{"single":"This feature can't be deleted because it is connected to a hidden feature.","multiple":"These features can't be deleted because some are connected to hidden features."}},"add_member":{"annotation":"Added a member to a relation."},"delete_member":{"annotation":"Removed a member from a relation."},"connect":{"annotation":{"point":"Connected a way to a point.","vertex":"Connected a way to another.","line":"Connected a way to a line.","area":"Connected a way to an area."},"relation":"These features can't be connected because they have conflicting relation roles.","restriction":"These features can't be connected because it would damage a \"{relation}\" relation."},"disconnect":{"title":"Disconnect","description":"Disconnect these lines/areas from each other.","key":"D","annotation":"Disconnected lines/areas.","not_connected":"There aren't enough lines/areas here to disconnect.","connected_to_hidden":"This can't be disconnected because it is connected to a hidden feature.","relation":"This can't be disconnected because it connects members of a relation."},"merge":{"title":"Merge","description":"Merge these features.","key":"C","annotation":"Merged {n} features.","not_eligible":"These features can't be merged.","not_adjacent":"These features can't be merged because their endpoints aren't connected.","restriction":"These features can't be merged because at least one is a member of a \"{relation}\" relation.","incomplete_relation":"These features can't be merged because at least one hasn't been fully downloaded.","conflicting_tags":"These features can't be merged because some of their tags have conflicting values."},"move":{"title":"Move","description":{"single":"Move this feature to a different location.","multiple":"Move these features to a different location."},"key":"M","annotation":{"point":"Moved a point.","vertex":"Moved a node in a way.","line":"Moved a line.","area":"Moved an area.","multiple":"Moved multiple features."},"incomplete_relation":{"single":"This feature can't be moved because it hasn't been fully downloaded.","multiple":"These features can't be moved because they haven't been fully downloaded."},"too_large":{"single":"This feature can't be moved because not enough of it is currently visible.","multiple":"These features can't be moved because not enough of them are currently visible."},"connected_to_hidden":{"single":"This feature can't be moved because it is connected to a hidden feature.","multiple":"These features can't be moved because some are connected to hidden features."}},"reflect":{"title":{"long":"Reflect Long","short":"Reflect Short"},"description":{"long":{"single":"Reflect this feature across its long axis.","multiple":"Reflect these features across their long axis."},"short":{"single":"Reflect this feature across its short axis.","multiple":"Reflect these features across their short axis."}},"key":{"long":"T","short":"Y"},"annotation":{"long":{"single":"Reflected a feature across its long axis.","multiple":"Reflected multiple features across their long axis."},"short":{"single":"Reflected a feature across its short axis.","multiple":"Reflected multiple features across their short axis."}},"incomplete_relation":{"single":"This feature can't be reflected because it hasn't been fully downloaded.","multiple":"These features can't be reflected because they haven't been fully downloaded."},"too_large":{"single":"This feature can't be reflected because not enough of it is currently visible.","multiple":"These features can't be reflected because not enough of them are currently visible."},"connected_to_hidden":{"single":"This feature can't be reflected because it is connected to a hidden feature.","multiple":"These features can't be reflected because some are connected to hidden features."}},"rotate":{"title":"Rotate","description":{"single":"Rotate this feature around its center point.","multiple":"Rotate these features around their center point."},"key":"R","annotation":{"line":"Rotated a line.","area":"Rotated an area.","multiple":"Rotated multiple features."},"incomplete_relation":{"single":"This feature can't be rotated because it hasn't been fully downloaded.","multiple":"These features can't be rotated because they haven't been fully downloaded."},"too_large":{"single":"This feature can't be rotated because not enough of it is currently visible.","multiple":"These features can't be rotated because not enough of them are currently visible."},"connected_to_hidden":{"single":"This feature can't be rotated because it is connected to a hidden feature.","multiple":"These features can't be rotated because some are connected to hidden features."}},"reverse":{"title":"Reverse","description":"Make this line go in the opposite direction.","key":"V","annotation":"Reversed a line."},"split":{"title":"Split","description":{"line":"Split this line into two at this node.","area":"Split the boundary of this area into two.","multiple":"Split the lines/area boundaries at this node into two."},"key":"X","annotation":{"line":"Split a line.","area":"Split an area boundary.","multiple":"Split {n} lines/area boundaries."},"not_eligible":"Lines can't be split at their beginning or end.","multiple_ways":"There are too many lines here to split.","connected_to_hidden":"This can't be split because it is connected to a hidden feature."},"restriction":{"annotation":{"create":"Added a turn restriction","delete":"Deleted a turn restriction"}}},"restriction":{"controls":{"distance":"Distance","distance_up_to":"Up to {distance}","via":"Via","via_node_only":"Node only","via_up_to_one":"Up to 1 way","via_up_to_two":"Up to 2 ways"},"help":{"indirect":"(indirect)","turn":{"no_left_turn":"NO Left Turn {indirect}","no_right_turn":"NO Right Turn {indirect}","no_u_turn":"NO U-Turn {indirect}","no_straight_on":"NO Straight On {indirect}","only_left_turn":"ONLY Left Turn {indirect}","only_right_turn":"ONLY Right Turn {indirect}","only_u_turn":"ONLY U-Turn {indirect}","only_straight_on":"ONLY Straight On {indirect}","allowed_left_turn":"Left Turn Allowed {indirect}","allowed_right_turn":"Right Turn Allowed {indirect}","allowed_u_turn":"U-Turn Allowed {indirect}","allowed_straight_on":"Straight On Allowed {indirect}"},"from":"FROM","via":"VIA","to":"TO","from_name":"{from} {fromName}","from_name_to_name":"{from} {fromName} {to} {toName}","via_names":"{via} {viaNames}","select_from":"Click to select a {from} segment","select_from_name":"Click to select {from} {fromName}","toggle":"Click for \"{turn}\""}},"undo":{"tooltip":"Undo: {action}","nothing":"Nothing to undo."},"redo":{"tooltip":"Redo: {action}","nothing":"Nothing to redo."},"tooltip_keyhint":"Shortcut:","browser_notice":"This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 11 and above. Please upgrade your browser or use Potlatch 2 to edit the map.","translate":{"translate":"Translate","localized_translation_label":"Multilingual name","localized_translation_language":"Choose language","localized_translation_name":"Name"},"zoom_in_edit":"Zoom in to edit","login":"login","logout":"logout","loading_auth":"Connecting to OpenStreetMap...","report_a_bug":"Report a bug","help_translate":"Help translate","feature_info":{"hidden_warning":"{count} hidden features","hidden_details":"These features are currently hidden: {details}"},"status":{"error":"Unable to connect to API.","offline":"The API is offline. Please try editing later.","readonly":"The API is read-only. You will need to wait to save your changes.","rateLimit":"The API is limiting anonymous connections. You can fix this by logging in."},"commit":{"title":"Upload to OpenStreetMap","upload_explanation":"The changes you upload will be visible on all maps that use OpenStreetMap data.","upload_explanation_with_user":"The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.","request_review":"I would like someone to review my edits.","save":"Upload","cancel":"Cancel","changes":"{count} Changes","download_changes":"Download osmChange file","warnings":"Warnings","modified":"Modified","deleted":"Deleted","created":"Created","about_changeset_comments":"About changeset comments","about_changeset_comments_link":"//wiki.openstreetmap.org/wiki/Good_changeset_comments","google_warning":"You mentioned Google in this comment: remember that copying from Google Maps is strictly forbidden.","google_warning_link":"https://www.openstreetmap.org/copyright"},"contributors":{"list":"Edits by {users}","truncated_list":"Edits by {users} and {count} others"},"info_panels":{"key":"I","background":{"key":"B","title":"Background","zoom":"Zoom","vintage":"Vintage","source":"Source","description":"Description","resolution":"Resolution","accuracy":"Accuracy","unknown":"Unknown","show_tiles":"Show Tiles","hide_tiles":"Hide Tiles","show_vintage":"Show Vintage","hide_vintage":"Hide Vintage"},"history":{"key":"H","title":"History","selected":"{n} selected","no_history":"No History (New Feature)","version":"Version","last_edit":"Last Edit","edited_by":"Edited By","changeset":"Changeset","unknown":"Unknown","link_text":"History on openstreetmap.org"},"location":{"key":"L","title":"Location","unknown_location":"Unknown Location"},"measurement":{"key":"M","title":"Measurement","selected":"{n} selected","geometry":"Geometry","closed_line":"closed line","closed_area":"closed area","center":"Center","perimeter":"Perimeter","length":"Length","area":"Area","centroid":"Centroid","location":"Location","metric":"Metric","imperial":"Imperial","node_count":"Number of nodes"}},"geometry":{"point":"point","vertex":"vertex","line":"line","area":"area","relation":"relation"},"geocoder":{"search":"Search worldwide...","no_results_visible":"No results in visible map area","no_results_worldwide":"No results found"},"geolocate":{"title":"Show My Location","locating":"Locating, please wait..."},"inspector":{"no_documentation_combination":"There is no documentation available for this tag combination","no_documentation_key":"There is no documentation available for this key","documentation_redirect":"This documentation has been redirected to a new page","show_more":"Show More","view_on_osm":"View on openstreetmap.org","all_fields":"All fields","all_tags":"All tags","all_members":"All members","all_relations":"All relations","new_relation":"New relation...","role":"Role","choose":"Select feature type","results":"{n} results for {search}","reference":"View on OpenStreetMap Wiki","back_tooltip":"Change feature","remove":"Remove","search":"Search","multiselect":"Selected features","unknown":"Unknown","incomplete":"","feature_list":"Search features","edit":"Edit feature","check":{"yes":"Yes","no":"No","reverser":"Change Direction"},"radio":{"structure":{"type":"Type","default":"Default","layer":"Layer"}},"add":"Add","none":"None","node":"Node","way":"Way","relation":"Relation","location":"Location","add_fields":"Add field:"},"background":{"title":"Background","description":"Background settings","key":"B","backgrounds":"Backgrounds","none":"None","best_imagery":"Best known imagery source for this location","switch":"Switch back to this background","custom":"Custom","custom_button":"Edit custom background","custom_prompt":"Enter a tile URL template. Valid tokens are:\n - {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme\n - {-y} or {ty} for flipped TMS-style Y coordinates\n - {u} for quadtile scheme\n - {switch:a,b,c} for DNS server multiplexing\n\nExample:\n{example}","overlays":"Overlays","imagery_source_faq":"Imagery Info / Report a Problem","reset":"reset","display_options":"Display Options","brightness":"Brightness","contrast":"Contrast","saturation":"Saturation","sharpness":"Sharpness","minimap":{"description":"Show Minimap","tooltip":"Show a zoomed out map to help locate the area currently displayed.","key":"/"},"fix_misalignment":"Adjust imagery offset","offset":"Drag anywhere in the gray area below to adjust the imagery offset, or enter the offset values in meters."},"map_data":{"title":"Map Data","description":"Map Data","key":"F","data_layers":"Data Layers","layers":{"osm":{"tooltip":"Map data from OpenStreetMap","title":"OpenStreetMap data"}},"fill_area":"Fill Areas","map_features":"Map Features","autohidden":"These features have been automatically hidden because too many would be shown on the screen. You can zoom in to edit them.","osmhidden":"These features have been automatically hidden because the OpenStreetMap layer is hidden."},"feature":{"points":{"description":"Points","tooltip":"Points of Interest"},"traffic_roads":{"description":"Traffic Roads","tooltip":"Highways, Streets, etc."},"service_roads":{"description":"Service Roads","tooltip":"Service Roads, Parking Aisles, Tracks, etc."},"paths":{"description":"Paths","tooltip":"Sidewalks, Foot Paths, Cycle Paths, etc."},"buildings":{"description":"Buildings","tooltip":"Buildings, Shelters, Garages, etc."},"landuse":{"description":"Landuse Features","tooltip":"Forests, Farmland, Parks, Residential, Commercial, etc."},"boundaries":{"description":"Boundaries","tooltip":"Administrative Boundaries"},"water":{"description":"Water Features","tooltip":"Rivers, Lakes, Ponds, Basins, etc."},"rail":{"description":"Rail Features","tooltip":"Railways"},"power":{"description":"Power Features","tooltip":"Power Lines, Power Plants, Substations, etc."},"past_future":{"description":"Past/Future","tooltip":"Proposed, Construction, Abandoned, Demolished, etc."},"others":{"description":"Others","tooltip":"Everything Else"}},"area_fill":{"wireframe":{"description":"No Fill (Wireframe)","tooltip":"Enabling wireframe mode makes it easy to see the background imagery.","key":"W"},"partial":{"description":"Partial Fill","tooltip":"Areas are drawn with fill only around their inner edges. (Recommended for beginner mappers)"},"full":{"description":"Full Fill","tooltip":"Areas are drawn fully filled."}},"restore":{"heading":"You have unsaved changes","description":"Do you wish to restore unsaved changes from a previous editing session?","restore":"Restore my changes","reset":"Discard my changes"},"save":{"title":"Save","help":"Review your changes and upload them to OpenStreetMap, making them visible to other users.","no_changes":"No changes to save.","error":"Errors occurred while trying to save","status_code":"Server returned status code {code}","unknown_error_details":"Please ensure you are connected to the internet.","uploading":"Uploading changes to OpenStreetMap...","conflict_progress":"Checking for conflicts: {num} of {total}","unsaved_changes":"You have unsaved changes","conflict":{"header":"Resolve conflicting edits","count":"Conflict {num} of {total}","previous":"< Previous","next":"Next >","keep_local":"Keep mine","keep_remote":"Use theirs","restore":"Restore","delete":"Leave Deleted","download_changes":"Or download osmChange file","done":"All conflicts resolved!","help":"Another user changed some of the same map features you changed.\nClick on each feature below for more details about the conflict, and choose whether to keep\nyour changes or the other user's changes.\n"}},"merge_remote_changes":{"conflict":{"deleted":"This feature has been deleted by {user}.","location":"This feature was moved by both you and {user}.","nodelist":"Nodes were changed by both you and {user}.","memberlist":"Relation members were changed by both you and {user}.","tags":"You changed the {tag} tag to \"{local}\" and {user} changed it to \"{remote}\"."}},"success":{"just_edited":"You just edited OpenStreetMap!","thank_you":"Thank you for improving the map.","thank_you_location":"Thank you for improving the map around {where}.","help_html":"Your changes should appear on OpenStreetMap within a few minutes. It may take longer for maps elsewhere to receive updates.","help_link_text":"Details","help_link_url":"https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F","view_on_osm":"View Changes on OSM","changeset_id":"Your changeset #: {changeset_id}","like_osm":"Like OpenStreetMap? Connect with others:","more":"More","events":"Events","languages":"Languages: {languages}","missing":"Is something missing from this list?","tell_us":"Tell us!"},"confirm":{"okay":"OK","cancel":"Cancel"},"splash":{"welcome":"Welcome to the iD OpenStreetMap editor","text":"iD is a friendly but powerful tool for contributing to the world's best free world map. This is version {version}. For more information see {website} and report bugs at {github}.","walkthrough":"Start the Walkthrough","start":"Edit now"},"source_switch":{"live":"live","lose_changes":"You have unsaved changes. Switching the map server will discard them. Are you sure you want to switch servers?","dev":"dev"},"version":{"whats_new":"What's new in iD {version}"},"tag_reference":{"description":"Description","on_wiki":"{tag} on wiki.osm.org","used_with":"used with {type}"},"validations":{"disconnected_highway":"Disconnected highway","disconnected_highway_tooltip":"Roads should be connected to other roads or building entrances.","old_multipolygon":"Multipolygon tags on outer way","old_multipolygon_tooltip":"This style of multipolygon is deprecated. Please assign the tags to the parent multipolygon instead of the outer way.","untagged_point":"Untagged point","untagged_point_tooltip":"Select a feature type that describes what this point is.","untagged_line":"Untagged line","untagged_line_tooltip":"Select a feature type that describes what this line is.","untagged_area":"Untagged area","untagged_area_tooltip":"Select a feature type that describes what this area is.","untagged_relation":"Untagged relation","untagged_relation_tooltip":"Select a feature type that describes what this relation is.","many_deletions":"You're deleting {n} features: {p} nodes, {l} lines, {a} areas, {r} relations. Are you sure you want to do this? This will delete them from the map that everyone else sees on openstreetmap.org.","tag_suggests_area":"The tag {tag} suggests line should be area, but it is not an area","deprecated_tags":"Deprecated tags: {tags}"},"zoom":{"in":"Zoom in","out":"Zoom out"},"cannot_zoom":"Cannot zoom out further in current mode.","full_screen":"Toggle Full Screen","gpx":{"local_layer":"Local file","drag_drop":"Drag and drop a .gpx, .geojson or .kml file on the page, or click the button to the right to browse","zoom":"Zoom to layer","browse":"Browse for a file"},"mapillary_images":{"tooltip":"Street-level photos from Mapillary","title":"Photo Overlay (Mapillary)"},"mapillary_signs":{"tooltip":"Traffic signs from Mapillary (must enable Photo Overlay)","title":"Traffic Sign Overlay (Mapillary)"},"mapillary":{"view_on_mapillary":"View this image on Mapillary"},"openstreetcam_images":{"tooltip":"Street-level photos from OpenStreetCam","title":"Photo Overlay (OpenStreetCam)"},"openstreetcam":{"view_on_openstreetcam":"View this image on OpenStreetCam"},"help":{"title":"Help","key":"H","help":{"title":"Help","welcome":"Welcome to the iD editor for [OpenStreetMap](https://www.openstreetmap.org/). With this editor you can update OpenStreetMap right from your web browser.","open_data_h":"Open Data","open_data":"Edits that you make on this map will be visible to everyone who uses OpenStreetMap. Your edits can be based on personal knowledge, on-the-ground surveying, or imagery collected from aerial or street level photos. Copying from commercial sources, like Google Maps, [is strictly forbidden](https://www.openstreetmap.org/copyright).","before_start_h":"Before you start","before_start":"You should be familiar with OpenStreetMap and this editor before you start editing. iD contains a walkthrough to teach you the basics of editing OpenStreetMap. Click \"Start the Walkthrough\" on this screen to take the tutorial - it takes only about 15 minutes.","open_source_h":"Open Source","open_source":"The iD editor is a collaborative open source project, and you are using version {version} now. The source code is available [on GitHub](https://github.com/openstreetmap/iD).","open_source_help":"You can help iD by [translating](https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating) or [reporting bugs](https://github.com/openstreetmap/iD/issues)."},"overview":{"title":"Overview","navigation_h":"Navigation","navigation_drag":"You can drag the map by pressing and holding down the {leftclick} left mouse button and moving the mouse around. You can also use the `↓`, `↑`, `←`, `→` arrow keys on your keyboard.","navigation_zoom":"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons along the side of the map. You can also use the `+`, `-` keys on your keyboard.","features_h":"Map Features","features":"We use the word *features* to describe things that appear on the map, such as roads, buildings, or points of interest. Anything in the real world can be mapped as a feature on OpenStreetMap. Map features are represented on the map using *points*, *lines*, or *areas*.","nodes_ways":"In OpenStreetmap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*."},"editing":{"title":"Editing & Saving","select_h":"Select","select_left_click":"{leftclick} Left-click on a feature to select it. This will highlight it with a pulsing glow, and the sidebar will display details about that feature, such as its name or address.","select_right_click":"{rightclick} Right-click on a feature to display the editing menu, which shows the commands that are available, such as rotating, moving, and deleting.","multiselect_h":"Multiselect","multiselect_shift_click":"`{shift}`+{leftclick} left-click to select several features together. This makes it easier to move or delete multiple items.","multiselect_lasso":"Another way to select multiple features is to hold down the `{shift}` key, then press and hold down the {leftclick} left mouse button and drag the mouse to draw a selection lasso. All of the points inside the lasso area will be selected.","undo_redo_h":"Undo & Redo","undo_redo":"Your edits are stored locally in your browser until you choose to save them to the OpenStreetMap server. You can undo edits by clicking the {undo} **Undo** button, and redo them by clicking the {redo} **Redo** button.","save_h":"Save","save":"Click {save} **Save** to finish your edits and send them to OpenStreetMap. You should remember to save your work frequently!","save_validation":"On the save screen, you'll have a chance to review what you've done. iD will also perform some basic checks for missing data and may offer helpful suggestions and warnings if something doesn't seem right.","upload_h":"Upload","upload":"Before uploading your changes you must enter a [changeset comment](https://wiki.openstreetmap.org/wiki/Good_changeset_comments). Then click **Upload** to send your changes to OpenStreetMap, where they will be merged into the map and publicly visible to everyone.","backups_h":"Automatic Backups","backups":"If you can't finish your edits in one sitting, for example if your computer crashes or you close the browser tab, your edits are still saved in your browser's storage. You can come back later (on the same browser and computer), and iD will offer to restore your work.","keyboard_h":"Keyboard Shortcuts","keyboard":"You can view a list of keyboard shortcuts by pressing the `?` key."},"feature_editor":{"title":"Feature Editor","intro":"The *feature editor* appears alongside the map, and allows you to see and edit all of the information for the selected feature.","definitions":"The top section displays the feature's type. The middle section contains *fields* showing the feature's attributes, such as its name or address.","type_h":"Feature Type","type":"You can click on the feature type to change the feature to a different type. Everything that exists in the real world can be added to OpenStreetMap, so there are thousands of feature types to choose from.","type_picker":"The type picker displays the most common feature types, such as parks, hospitals, restaurants, roads, and buildings. You can search for anything by typing what you're looking for in the search box. You can also click the {inspect} **Info** icon next to the feature type to learn more about it.","fields_h":"Fields","fields_all_fields":"The \"All fields\" section contains all of the feature's details that you may edit. In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.","fields_example":"Each feature type will display different fields. For example, a road may display fields for its surface and speed limit, but a restaurant may display fields for the type of food it serves and the hours it is open.","fields_add_field":"You can also click the \"Add field\" dropdown to add more fields, such as a description, Wikipedia link, wheelchair access, and more.","tags_h":"Tags","tags_all_tags":"Below the fields section, you can expand the \"All tags\" section to edit any of the OpenStreetMap *tags* for the selected feature. Each tag consists of a *key* and *value*, data elements that define all of the features stored in OpenStreetMap.","tags_resources":"Editing a feature's tags requires intermediate knowledge about OpenStreetMap. You should consult resources like the [OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Main_Page) or [Taginfo](https://taginfo.openstreetmap.org/) to learn more about accepted OpenStreetMap tagging practices."},"points":{"title":"Points","intro":"*Points* can be used to represent features such as shops, restaurants, and monuments. They mark a specific location, and describe what's there.","add_point_h":"Adding Points","add_point":"To add a point, click the {point} **Point** button on the toolbar above the map, or press the shortcut key `1`. This will change the mouse cursor to a cross symbol.","add_point_finish":"To place the new point on the map, position the mouse cursor where the point should go, then {leftclick} left-click or press `Space`.","move_point_h":"Moving Points","move_point":"To move a point, place the mouse cursor over the point, then press and hold the {leftclick} left mouse button while dragging the point to its new location.","delete_point_h":"Deleting Points","delete_point":"It's OK to delete features that don't exist in the real world. Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it.","delete_point_command":"To delete a point, {rightclick} right-click on the point to select it and show the edit menu, then use the {delete} **Delete** command."},"lines":{"title":"Lines","intro":"*Lines* are used to represent features such as roads, railroads, and rivers. Lines should be drawn down the center of the feature that they represent.","add_line_h":"Adding Lines","add_line":"To add a line, click the {line} **Line** button on the toolbar above the map, or press the shortcut key `2`. This will change the mouse cursor to a cross symbol.","add_line_draw":"Next, position the mouse cursor where the line should begin and {leftclick} left-click or press `Space` to begin placing nodes along the line. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.","add_line_finish":"To finish a line, press `{return}` or click again on the last node.","modify_line_h":"Modifying Lines","modify_line_dragnode":"Often you'll see lines that aren't shaped correctly, for example a road that does not match up with the background imagery. To adjust the shape of a line, first {leftclick} left-click to select it. All nodes of the line will be drawn as small circles. You can then drag the nodes to better locations.","modify_line_addnode":"You can also create new nodes along a line either by {leftclick}**x2** double-clicking on the line or by dragging the small triangles at the midpoints between nodes.","connect_line_h":"Connecting Lines","connect_line":"Having roads connected properly is important for the map and essential for providing driving directions.","connect_line_display":"The connections between roads are drawn with gray circles. The endpoints of a line are drawn with larger white circles if they don't connect to anything.","connect_line_drag":"To connect a line to another feature, drag one of the line's nodes onto the other feature until both features snap together. Tip: You can hold down the `{alt}` key to prevent nodes from connecting to other features.","connect_line_tag":"If you know that the connection has traffic lights or crosswalks, you can add them by selecting the connecting node and using the feature editor to select the correct feature's type.","disconnect_line_h":"Disconnecting Lines","disconnect_line_command":"To disconnect a road from another feature, {rightclick} right-click the connecting node and select the {disconnect} **Disconnect** command from the editing menu.","move_line_h":"Moving Lines","move_line_command":"To move an entire line, {rightclick} right-click the line and select the {move} **Move** command from the editing menu. Then move the mouse, and {leftclick} left-click to place the line in a new location.","move_line_connected":"Lines that are connected to other features will stay connected as you move the line to a new location. iD may prevent you from moving a line across another connected line.","delete_line_h":"Deleting Lines","delete_line":"If a line is entirely incorrect, for example a road that doesn't exist in the real world, it's OK to delete it. Be careful when deleting features: the background imagery you are using might be outdated, and a road that looks wrong could simply be newly built.","delete_line_command":"To delete a line, {rightclick} right-click on the line to select it and show the edit menu, then use the {delete} **Delete** command."},"areas":{"title":"Areas","intro":"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas. Areas should be traced around the edge of the feature that they represent, for example, around the base of a building.","point_or_area_h":"Points or Areas?","point_or_area":"Many features can be represented as points or areas. You should map buildings and property outlines as areas whenever possible. Place points inside a building area to represent businesses, amenities, and other features located inside the building.","add_area_h":"Adding Areas","add_area_command":"To add an area, click the {area} **Area** button on the toolbar above the map, or press the shortcut key `3`. This will change the mouse cursor to a cross symbol.","add_area_draw":"Next, position the mouse cursor at one of the corners of the feature and {leftclick} left-click or press `Space` to begin placing nodes around the outer edge of the area. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.","add_area_finish":"To finish an area, press `{return}` or click again on either the first or last node.","square_area_h":"Square Corners","square_area_command":"Many area features like buildings have square corners. To square the corners of an area, {rightclick} right-click the edge of the area and select the {orthogonalize} **Square** command from the editing menu.","modify_area_h":"Modifying Areas","modify_area_dragnode":"Often you'll see areas that aren't shaped correctly, for example a building that does not match up with the background imagery. To adjust the shape of an area, first {leftclick} left-click to select it. All nodes of the area will be drawn as small circles. You can then drag the nodes to better locations.","modify_area_addnode":"You can also create new nodes along an area either by {leftclick}**x2** double-clicking on the edge of the area or by dragging the small triangles at the midpoints between nodes.","delete_area_h":"Deleting Areas","delete_area":"If an area is entirely incorrect, for example a building that doesn't exist in the real world, it's OK to delete it. Be cautious when deleting features - the background imagery you are using might be outdated, and a building that looks wrong could simply be newly built.","delete_area_command":"To delete an area, {rightclick} right-click on the area to select it and show the edit menu, then use the {delete} **Delete** command."},"relations":{"title":"Relations","intro":"A *relation* is a special type of feature in OpenStreetMap that groups together other features. The features that belong to a relation are called *members*, and each member can have a *role* in the relation.","edit_relation_h":"Editing Relations","edit_relation":"At the bottom of the feature editor, you can expand the \"All relations\" section to see if the selected feature is a member of any relations. You can then click on the relation to select and edit it.","edit_relation_add":"To add a feature to a relation, select the feature, then click the {plus} add button in the \"All relations\" section of the feature editor. You can choose from a list of nearby relations, or choose the \"New relation...\" option.","edit_relation_delete":"You can also click the {delete} **Delete** button to remove the selected feature from the relation. If you remove all of the members from a relation, the relation will be deleted automatically.","maintain_relation_h":"Maintaining Relations","maintain_relation":"For the most part, iD will maintain relations automatically as you edit. You should take care when replacing features that might be members of relations. For example if you delete a section of road and draw a new section of road to replace it, you should add the new section to the same relations (routes, turn restrictions, etc.) as the original.","relation_types_h":"Relation Types","multipolygon_h":"Multipolygons","multipolygon":"A *multipolygon* relation is a group of one or more *outer* features and one or more inner features. The outer features define the outer edges of the multipolygon, and the inner features define sub-areas or holes cut out from the inside of the multipolygon.","multipolygon_create":"To create a multipolygon, for example a building with a hole in it, draw the outer edge as an area and the inner edge as a line or different kind of area. Then `{shift}`+{leftclick} left-click to select both features, {rightclick} right-click to show the edit menu, and select the {merge} **Merge** command.","multipolygon_merge":"Merging several lines or areas will create a new multipolygon relation with all selected areas as members. iD will choose the inner and outer roles automatically, based on which features are contained inside other features.","turn_restriction_h":"Turn restrictions","turn_restriction":"A *turn restriction* relation is a group of several road segments in an intersection. Turn restrictions consist of a *from* road, *via* node or roads, and a *to* road.","turn_restriction_field":"To edit turn restrictions, select a junction node where two or more roads meet. The feature editor will display a special \"Turn Restrictions\" field containing a model of the intersection.","turn_restriction_editing":"In the \"Turn Restrictions\" field, click to select a \"from\" road, and see whether turns are allowed or restricted to any of the \"to\" roads. You can click on the turn icons to toggle them between allowed and restricted. iD will create relations automatically and set the from, via, and to roles based on your choices.","route_h":"Routes","route":"A *route* relation is a group of one or more line features that together form a route network, like a bus route, train route, or highway route.","route_add":"To add a feature to a route relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation.","boundary_h":"Boundaries","boundary":"A *boundary* relation is a group of one or more line features that together form an administrative boundary.","boundary_add":"To add a feature to a boundary relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation."},"imagery":{"title":"Background Imagery","intro":"The background imagery that appears beneath the map data is an important resource for mapping. This imagery can be aerial photos collected from satellites, airplanes, and drones, or it can be scanned historical maps or other freely available source data.","sources_h":"Imagery Sources","choosing":"To see which imagery sources are available for editing, click the {layers} **Background settings** button on the side of the map.","sources":"By default, a [Bing Maps](https://www.bing.com/maps/) satellite layer is chosen as the background image. Depending on where you are editing, other imagery sources will be available. Some may be newer or have higher resolution, so it is always useful to check and see which layer is the best one to use as a mapping reference.","offsets_h":"Adjusting Imagery Offset","offset":"Imagery is sometimes offset slightly from accurate map data. If you see a lot of roads or buildings shifted from the background imagery, it may be the imagery that's incorrect, so don't move them all to match the background. Instead, you can adjust the background so that it matches the existing data by expanding the \"Adjust Imagery Offset\" section at the bottom of the Background Settings pane.","offset_change":"Click on the small triangles to adjust the imagery offset in small steps, or hold the left mouse button and drag within the gray square to slide the imagery into alignment."},"streetlevel":{"title":"Street Level Photos","intro":"Street level photos are useful for mapping traffic signs, businesses, and other details that you can't see from satellite and aerial images. The iD editor supports street level photos from [Mapillary](https://www.mapillary.com) and [OpenStreetCam](https://www.openstreetcam.org).","using_h":"Using Street Level Photos","using":"To use street level photos for mapping, click the {data} **Map data** panel on the side of the map to enable or disable the available photo layers.","photos":"When enabled, the photo layer displays a line along the sequence of photos. At higher zoom levels, a circle marks at each photo location, and at even higher zoom levels, a cone indicates the direction the camera was facing when the photo was taken.","viewer":"When you click on one of the photo locations, a photo viewer appears in the bottom corner of the map. The photo viewer contains controls to step forward and backward in the image sequence. It also shows the username of the person who captured the image, the date it was captured, and a link to view the image on the original site."},"gps":{"title":"GPS Traces","intro":"Collected GPS traces are a valuable source of data for OpenStreetMap. This editor supports *.gpx*, *.geojson*, and *.kml* files on your local computer. You can collect GPS traces with a smartphone, sports watch, or other GPS device.","survey":"For information on how to perform a GPS survey, read [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).","using_h":"Using GPS Traces","using":"To use a GPS trace for mapping, drag and drop the data file onto the map editor. If it's recognized, it will be drawn on the map as a bright purple line. Click the {data} **Map data** panel on the side of the map to enable, disable, or zoom to your GPS data.","tracing":"The GPS track isn't sent to OpenStreetMap - the best way to use it is to draw on the map, using it as a guide for the new features that you add.","upload":"You can also [upload your GPS data to OpenStreetMap](https://www.openstreetmap.org/trace/create) for other users to use."},"field":{"restrictions":{"title":"Turn Restrictions Help","about":{"title":"About","about":"This field allows you to inspect and modify turn restrictions. It displays a model of the selected intersection including other nearby connected roads.","from_via_to":"A turn restriction always contains: one **FROM way**, one **TO way**, and either one **VIA node** or one or more **VIA ways**.","maxdist":"The \"{distField}\" slider controls how far to search for additional connected roads.","maxvia":"The \"{viaField}\" slider adjusts how many via ways may be included in the search. (Tip: simple is better)"},"inspecting":{"title":"Inspecting","about":"Hover over any **FROM** segment to see whether it has any turn restrictions. Each possible **TO** destination will be drawn with a colored shadow showing whether a restriction exists.","from_shadow":"{fromShadow} **FROM segment**","allow_shadow":"{allowShadow} **TO Allowed**","restrict_shadow":"{restrictShadow} **TO Restricted**","only_shadow":"{onlyShadow} **TO Only**","restricted":"\"Restricted\" means that there is a turn restriction, for example \"No Left Turn\".","only":"\"Only\" means that a vehicle taking that path may only make that choice, for example \"Only Straight On\"."},"modifying":{"title":"Modifying","about":"To modify turn restrictions, first click on any starting **FROM** segment to select it. The selected segment will pulse, and all possible **TO** destinations will appear as turn symbols.","indicators":"Then, click on a turn symbol to toggle it between \"Allowed\", \"Restricted\", and \"Only\".","allow_turn":"{allowTurn} **TO Allowed**","restrict_turn":"{restrictTurn} **TO Restricted**","only_turn":"{onlyTurn} **TO Only**"},"tips":{"title":"Tips","simple":"**Prefer simple restrictions over complex ones.**","simple_example":"For example, avoid creating a via-way restriction if a simpler via-node turn restriction will do.","indirect":"**Some restrictions display the text \"(indirect)\" and are drawn lighter.**","indirect_example":"These restrictions exist because of another nearby restriction. For example, an \"Only Straight On\" restriction will indirectly create \"No Turn\" restrictions for all other paths through the intersection.","indirect_noedit":"You may not edit indirect restrictions. Instead, edit the nearby direct restriction."}}}},"intro":{"done":"done","ok":"OK","graph":{"block_number":"","city":"Three Rivers","county":"","district":"","hamlet":"","neighbourhood":"","postcode":"49093","province":"","quarter":"","state":"MI","subdistrict":"","suburb":"","countrycode":"us","name":{"1st-avenue":"1st Avenue","2nd-avenue":"2nd Avenue","4th-avenue":"4th Avenue","5th-avenue":"5th Avenue","6th-avenue":"6th Avenue","6th-street":"6th Street","7th-avenue":"7th Avenue","8th-avenue":"8th Avenue","9th-avenue":"9th Avenue","10th-avenue":"10th Avenue","11th-avenue":"11th Avenue","12th-avenue":"12th Avenue","access-point-employment":"Access Point Employment","adams-street":"Adams Street","andrews-elementary-school":"Andrews Elementary School","andrews-street":"Andrews Street","armitage-street":"Armitage Street","barrows-school":"Barrows School","battle-street":"Battle Street","bennett-street":"Bennett Street","bowman-park":"Bowman Park","collins-drive":"Collins Drive","conrail-railroad":"Conrail Railroad","conservation-park":"Conservation Park","constantine-street":"Constantine Street","cushman-street":"Cushman Street","dollar-tree":"Dollar Tree","douglas-avenue":"Douglas Avenue","east-street":"East Street","elm-street":"Elm Street","flower-street":"Flower Street","foster-street":"Foster Street","french-street":"French Street","garden-street":"Garden Street","gem-pawnbroker":"Gem Pawnbroker","golden-finch-framing":"Golden Finch Framing","grant-avenue":"Grant Avenue","hoffman-pond":"Hoffman Pond","hoffman-street":"Hoffman Street","hook-avenue":"Hook Avenue","jefferson-street":"Jefferson Street","kelsey-street":"Kelsey Street","lafayette-park":"LaFayette Park","las-coffee-cafe":"L.A.'s Coffee Cafe","lincoln-avenue":"Lincoln Avenue","lowrys-books":"Lowry's Books","lynns-garage":"Lynn's Garage","main-street-barbell":"Main Street Barbell","main-street-cafe":"Main Street Cafe","main-street-fitness":"Main Street Fitness","main-street":"Main Street","maple-street":"Maple Street","marina-park":"Marina Park","market-street":"Market Street","memory-isle-park":"Memory Isle Park","memory-isle":"Memory Isle","michigan-avenue":"Michigan Avenue","middle-street":"Middle Street","millard-street":"Millard Street","moore-street":"Moore Street","morris-avenue":"Morris Avenue","mural-mall":"Mural Mall","paisanos-bar-and-grill":"Paisano's Bar and Grill","paisley-emporium":"Paisley Emporium","paparazzi-tattoo":"Paparazzi Tattoo","pealer-street":"Pealer Street","pine-street":"Pine Street","pizza-hut":"Pizza Hut","portage-avenue":"Portage Avenue","portage-river":"Portage River","preferred-insurance-services":"Preferred Insurance Services","railroad-drive":"Railroad Drive","river-city-appliance":"River City Appliance","river-drive":"River Drive","river-road":"River Road","river-street":"River Street","riverside-cemetery":"Riverside Cemetery","riverwalk-trail":"Riverwalk Trail","riviera-theatre":"Riviera Theatre","rocky-river":"Rocky River","saint-joseph-river":"Saint Joseph River","scidmore-park-petting-zoo":"Scidmore Park Petting Zoo","scidmore-park":"Scidmore Park","scouter-park":"Scouter Park","sherwin-williams":"Sherwin-Williams","south-street":"South Street","southern-michigan-bank":"Southern Michigan Bank","spring-street":"Spring Street","sturgeon-river-road":"Sturgeon River Road","three-rivers-city-hall":"Three Rivers City Hall","three-rivers-elementary-school":"Three Rivers Elementary School","three-rivers-fire-department":"Three Rivers Fire Department","three-rivers-high-school":"Three Rivers High School","three-rivers-middle-school":"Three Rivers Middle School","three-rivers-municipal-airport":"Three Rivers Municipal Airport","three-rivers-post-office":"Three Rivers Post Office","three-rivers-public-library":"Three Rivers Public Library","three-rivers":"Three Rivers","unique-jewelry":"Unique Jewelry","walnut-street":"Walnut Street","washington-street":"Washington Street","water-street":"Water Street","west-street":"West Street","wheeler-street":"Wheeler Street","william-towing":"William Towing","willow-drive":"Willow Drive","wood-street":"Wood Street","world-fare":"World Fare"}},"welcome":{"title":"Welcome","welcome":"Welcome! This walkthrough will teach you the basics of editing on OpenStreetMap.","practice":"All of the data in this walkthrough is just for practicing, and any edits that you make in the walkthrough will not be saved.","words":"This walkthrough will introduce some new words and concepts. When we introduce a new word, we'll use *italics*.","mouse":"You can use any input device to edit the map, but this walkthrough assumes you have a mouse with left and right buttons. **If you want to attach a mouse, do so now, then click OK.**","leftclick":"When this tutorial asks you to click or double-click, we mean with the left button. On a trackpad it might be a single-click or single-finger tap. **Left-click {num} times.**","rightclick":"Sometimes we'll also ask you to right-click. This might be the same as control-click, or two-finger tap on a trackpad. Your keyboard might even have a 'menu' key that works like right-click. **Right-click {num} times.**","chapters":"So far, so good! You can use the buttons below to skip chapters at any time or to restart a chapter if you get stuck. Let's begin! **Click '{next}' to continue.**"},"navigation":{"title":"Navigation","drag":"The main map area shows OpenStreetMap data on top of a background.{br}You can drag the map by pressing and holding the left mouse button while moving the mouse around. You can also use the arrow keys on your keyboard. **Drag the map!**","zoom":"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons. **Zoom the map!**","features":"We use the word *features* to describe the things that appear on the map. Anything in the real world can be mapped as a feature on OpenStreetMap.","points_lines_areas":"Map features are represented using *points, lines, or areas.*","nodes_ways":"In OpenStreetMap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*.","click_townhall":"All features on the map can be selected by clicking on them. **Click on the point to select it.**","selected_townhall":"Great! The point is now selected. Selected features are drawn with a pulsing glow.","editor_townhall":"When a feature is selected, the *feature editor* is displayed alongside the map.","preset_townhall":"The top part of the feature editor shows the feature's type. This point is a {preset}.","fields_townhall":"The middle part of the feature editor contains *fields* showing the feature's attributes, such as its name and address.","close_townhall":"**Close the feature editor by hitting escape or pressing the {button} button in the upper corner.**","search_street":"You can also search for features in the current view, or worldwide. **Search for '{name}'.**","choose_street":"**Choose {name} from the list to select it.**","selected_street":"Great! {name} is now selected.","editor_street":"The fields shown for a street are different than the fields that were shown for the town hall.{br}For this selected street, the feature editor shows fields like '{field1}' and '{field2}'. **Close the feature editor by hitting escape or pressing the {button} button.**","play":"Try moving the map and clicking on some other features to see what kinds of things can be added to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},"points":{"title":"Points","add_point":"*Points* can be used to represent features such as shops, restaurants, and monuments.{br}They mark a specific location, and describe what's there. **Click the {button} Point button to add a new point.**","place_point":"To place the new point on the map, position your mouse cursor where the point should go, then left-click or press the spacebar. **Move the mouse pointer over this building, then left-click or press the spacebar.**","search_cafe":"There are many different features that can be represented by points. The point you just added is a cafe. **Search for '{preset}'.**","choose_cafe":"**Choose {preset} from the list.**","feature_editor":"The point is now marked as a cafe. Using the feature editor, we can add more information about the cafe.","add_name":"In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.{br}Let's pretend that you have local knowledge of this cafe, and you know its name. **Add a name for the cafe.**","add_close":"The feature editor will remember all of your changes automatically. **When you are finished adding the name, hit escape, enter, or click the {button} button to close the feature editor.**","reselect":"Often points will already exist, but have mistakes or be incomplete. We can edit existing points. **Click to select the cafe you just created.**","update":"Let's fill in some more details for this cafe. You can change its name, add a cuisine, or add an address. **Change the cafe details.**","update_close":"**When you are finished updating the cafe, hit escape, enter, or click the {button} button to close the feature editor.**","rightclick":"You can right-click on any feature to see the *edit menu*, which shows a list of editing operations that can be performed. **Right-click to select the point you created and show the edit menu.**","delete":"It's OK to delete features that don't exist in the real world.{br}Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it. **Click on the {button} button to delete the point.**","undo":"You can always undo any changes up until you save your edits to OpenStreetMap. **Click on the {button} button to undo the delete and get the point back.**","play":"Now that you know how to create and edit points, try creating a few more points for practice! **When you are ready to continue to the next chapter, click '{next}'.**"},"areas":{"title":"Areas","add_playground":"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas.{br}They can also be used for more detailed mapping of many features you might normally map as points. **Click the {button} Area button to add a new area.**","start_playground":"Let's add this playground to the map by drawing an area. Areas are drawn by placing *nodes* along the outer edge of the feature. **Click or press spacebar to place a starting node on one of the corners of the playground.**","continue_playground":"Continue drawing the area by placing more nodes along the playground's edge. It is OK to connect the area to the existing walking paths.{br}Tip: You can hold down the '{alt}' key to prevent nodes from connecting to other features. **Continue drawing an area for the playground.**","finish_playground":"Finish the area by pressing enter, or clicking again on either the first or last node. **Finish drawing an area for the playground.**","search_playground":"**Search for '{preset}'.**","choose_playground":"**Choose {preset} from the list.**","add_field":"This playground doesn't have an official name, so we won't add anything in the Name field.{br}Instead let's add some additional details about the playground to the Description field. **Open the Add Field list.**","choose_field":"**Choose {field} from the list.**","retry_add_field":"You didn't select the {field} field. Let's try again.","describe_playground":"**Add a description, then click the {button} button to close the feature editor.**","play":"Good job! Try drawing a few more areas, and see what other kinds of area features you can add to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},"lines":{"title":"Lines","add_line":"*Lines* are used to represent features such as roads, railroads, and rivers. **Click the {button} Line button to add a new line.**","start_line":"Here is a road that is missing. Let's add it!{br}In OpenStreetMap, lines should be drawn down the center of the road. You can drag and zoom the map while drawing if necessary. **Start a new line by clicking at the top end of this missing road.**","intersect":"Click or press spacebar to add more nodes to the line.{br}Roads, and many other types of lines, are part of a larger network. It is important for these lines to be connected properly in order for routing applications to work. **Click on {name} to create an intersection connecting the two lines.**","retry_intersect":"The road needs to intersect {name}. Let's try again!","continue_line":"Continue drawing the line for the new road. Remember that you can drag and zoom the map if needed.{br}When you are finished drawing, click on the last node again. **Finish drawing the road.**","choose_category_road":"**Select {category} from the list.**","choose_preset_residential":"There are many different types of roads, but this one is a residential road. **Choose the {preset} type.**","retry_preset_residential":"You didn't select the {preset} type. **Click here to choose again.**","name_road":"**Give this road a name, then hit escape, enter, or click the {button} button to close the feature editor.**","did_name_road":"Looks good! Next we will learn how to update the shape of a line.","update_line":"Sometimes you will need to change the shape of an existing line. Here is a road that doesn't look quite right.","add_node":"We can add some nodes to this line to improve its shape. One way to add a node is to double-click the line where you want to add a node. **Double-click on the line to create a new node.**","start_drag_endpoint":"When a line is selected, you can drag any of its nodes by clicking and holding down the left mouse button while you drag. **Drag the endpoint to the place where these roads should intersect.**","finish_drag_endpoint":"This spot looks good. **Release the left mouse button to finish dragging.**","start_drag_midpoint":"Small triangles are drawn at the *midpoints* between nodes. Another way to create a new node is to drag a midpoint to a new location. **Drag the midpoint triangle to create a new node along the curve of the road.**","continue_drag_midpoint":"This line is looking much better! Continue to adjust this line by double-clicking or dragging midpoints until the curve matches the road shape. **When you're happy with how the line looks, click OK.**","delete_lines":"It's OK to delete lines for roads that don't exist in the real world.{br}Here's an example where the city planned a {street} but never built it. We can improve this part of the map by deleting the extra lines.","rightclick_intersection":"The last real street is {street1}, so we will *split* {street2} at this intersection and remove everything above it. **Right click on the intersection node.**","split_intersection":"**Click on the {button} button to split {street}.**","retry_split":"You didn't click the Split button. Try again.","did_split_multi":"Good job! {street1} is now split into two pieces. The top part can be removed. **Click the top part of {street2} to select it.**","did_split_single":"**Click the top part of {street2} to select it.**","multi_select":"{selected} is now selected. Let's also select {other1}. You can shift-click to select multiple things. **Shift-click on {other2}.**","multi_rightclick":"Good! Both lines to delete are now selected. **Right-click on one of the lines to show the edit menu.**","multi_delete":"**Click on the {button} button to delete the extra lines.**","retry_delete":"You didn't click the Delete button. Try again.","play":"Great! Use the skills that you've learned in this chapter to practice editing some more lines. **When you are ready to continue to the next chapter, click '{next}'.**"},"buildings":{"title":"Buildings","add_building":"OpenStreetMap is the world's largest database of buildings.{br}You can help improve this database by tracing buildings that aren't already mapped. **Click the {button} Area button to add a new area.**","start_building":"Let's add this house to the map by tracing its outline.{br}Buildings should be traced around their footprint as accurately as possible. **Click or press spacebar to place a starting node on one of the corners of the building.**","continue_building":"Continue adding more nodes to trace the outline of the building. Remember that you can zoom in if you want to add more details.{br}Finish the building by pressing enter, or clicking again on either the first or last node. **Finish tracing the building.**","retry_building":"It looks like you had some trouble placing the nodes at the building corners. Try again!","choose_category_building":"**Choose {category} from the list.**","choose_preset_house":"There are many different types of buildings, but this one is clearly a house.{br}If you're not sure of the type, it's OK to just choose the generic Building type. **Choose the {preset} type.**","close":"**Hit escape or click the {button} button to close the feature editor.**","rightclick_building":"**Right-click to select the building you created and show the edit menu.**","square_building":"The house that you just added will look even better with perfectly square corners. **Click on the {button} button to square the building shape.**","retry_square":"You didn't click the Square button. Try again.","done_square":"See how the corners of the building moved into place? Let's learn another useful trick.","add_tank":"Next we'll trace this circular storage tank. **Click the {button} Area button to add a new area.**","start_tank":"Don't worry, you won't need to draw a perfect circle. Just draw an area inside the tank that touches its edge. **Click or press spacebar to place a starting node on the edge of the tank.**","continue_tank":"Add a few more nodes around the edge. The circle will be created outside the nodes that you draw.{br}Finish the area by pressing enter, or clicking again on either the first or last node. **Finish tracing the tank.**","search_tank":"**Search for '{preset}'.**","choose_tank":"**Choose {preset} from the list.**","rightclick_tank":"**Right-click to select the storage tank you created and show the edit menu.**","circle_tank":"**Click on the {button} button to make the tank a circle.**","retry_circle":"You didn't click the Circularize button. Try again.","play":"Great Job! Practice tracing a few more buildings, and try some of the other commands on the edit menu. **When you are ready to continue to the next chapter, click '{next}'.**"},"startediting":{"title":"Start Editing","help":"You're now ready to edit OpenStreetMap!{br}You can replay this walkthrough anytime or view more documentation by clicking the {button} Help button or pressing the '{key}' key.","shortcuts":"You can view a list of commands along with their keyboard shortcuts by pressing the '{key}' key.","save":"Don't forget to regularly save your changes!","start":"Start mapping!"}},"shortcuts":{"title":"Keyboard shortcuts","tooltip":"Show the keyboard shortcuts screen.","toggle":{"key":"?"},"key":{"alt":"Alt","backspace":"Backspace","cmd":"Cmd","ctrl":"Ctrl","delete":"Delete","del":"Del","end":"End","enter":"Enter","esc":"Esc","home":"Home","option":"Option","pause":"Pause","pgdn":"PgDn","pgup":"PgUp","return":"Return","shift":"Shift","space":"Space"},"gesture":{"drag":"drag"},"or":"-or-","browsing":{"title":"Browsing","navigation":{"title":"Navigation","pan":"Pan map","pan_more":"Pan map by one screenful","zoom":"Zoom in / Zoom out","zoom_more":"Zoom in / Zoom out by a lot"},"help":{"title":"Help","help":"Show help/documentation","keyboard":"Show keyboard shortcuts"},"display_options":{"title":"Display options","background":"Show background options","background_switch":"Switch back to last background","map_data":"Show map data options","fullscreen":"Enter full screen mode","wireframe":"Toggle wireframe mode","minimap":"Toggle minimap"},"selecting":{"title":"Selecting features","select_one":"Select a single feature","select_multi":"Select multiple features","lasso":"Draw a selection lasso around features","search":"Find features matching search text"},"with_selected":{"title":"With feature selected","edit_menu":"Toggle edit menu"},"vertex_selected":{"title":"With node selected","previous":"Jump to previous node","next":"Jump to next node","first":"Jump to first node","last":"Jump to last node","change_parent":"Switch parent way"}},"editing":{"title":"Editing","drawing":{"title":"Drawing","add_point":"'Add point' mode","add_line":"'Add line' mode","add_area":"'Add area' mode","place_point":"Place a point","disable_snap":"Hold to disable point snapping","stop_line":"Finish drawing a line or area"},"operations":{"title":"Operations","continue_line":"Continue a line at the selected node","merge":"Combine (merge) selected features","disconnect":"Disconnect features at the selected node","split":"Split a line into two at the selected node","reverse":"Reverse a line","move":"Move selected features","rotate":"Rotate selected features","orthogonalize":"Straighten line / Square area corners","circularize":"Circularize a closed line or area","reflect_long":"Reflect features across the longer axis","reflect_short":"Reflect features across the shorter axis","delete":"Delete selected features"},"commands":{"title":"Commands","copy":"Copy selected features","paste":"Paste copied features","undo":"Undo last action","redo":"Redo last action","save":"Save changes"}},"tools":{"title":"Tools","info":{"title":"Information","all":"Toggle all information panels","background":"Toggle background panel","history":"Toggle history panel","location":"Toggle location panel","measurement":"Toggle measurement panel"}}},"units":{"feet":"{quantity} ft","miles":"{quantity} mi","square_feet":"{quantity} sq ft","square_miles":"{quantity} sq mi","acres":"{quantity} ac","meters":"{quantity} m","kilometers":"{quantity} km","square_meters":"{quantity} m²","square_kilometers":"{quantity} km²","hectares":"{quantity} ha","area_pair":"{area1} ({area2})","arcdegrees":"{quantity}°","arcminutes":"{quantity}′","arcseconds":"{quantity}″","north":"N","south":"S","east":"E","west":"W","coordinate":"{coordinate}{direction}","coordinate_pair":"{latitude}, {longitude}"},"presets":{"categories":{"category-barrier":{"name":"Barrier Features"},"category-building":{"name":"Building Features"},"category-golf":{"name":"Golf Features"},"category-landuse":{"name":"Land Use Features"},"category-natural-area":{"name":"Natural Features"},"category-natural-line":{"name":"Natural Features"},"category-natural-point":{"name":"Natural Features"},"category-path":{"name":"Path Features"},"category-rail":{"name":"Rail Features"},"category-restriction":{"name":"Restriction Features"},"category-road":{"name":"Road Features"},"category-route":{"name":"Route Features"},"category-water-area":{"name":"Water Features"},"category-water-line":{"name":"Water Features"}},"fields":{"access_simple":{"label":"Allowed Access"},"access":{"label":"Allowed Access","placeholder":"Not Specified","types":{"access":"All","foot":"Foot","motor_vehicle":"Motor Vehicles","bicycle":"Bicycles","horse":"Horses"},"options":{"yes":{"title":"Allowed","description":"Access permitted by law; a right of way"},"no":{"title":"Prohibited","description":"Access not permitted to the general public"},"permissive":{"title":"Permissive","description":"Access permitted until such time as the owner revokes the permission"},"private":{"title":"Private","description":"Access permitted only with permission of the owner on an individual basis"},"designated":{"title":"Designated","description":"Access permitted according to signs or specific local laws"},"destination":{"title":"Destination","description":"Access permitted only to reach a destination"},"dismount":{"title":"Dismount","description":"Access permitted but rider must dismount"}}},"address":{"label":"Address","placeholders":{"block_number":"Block Number","block_number!jp":"Block No.","city":"City","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town","conscriptionnumber":"123","country":"Country","county":"County","county!jp":"District","district":"District","district!vn":"Arrondissement/Town/District","floor":"Floor","hamlet":"Hamlet","housename":"Housename","housenumber":"123","housenumber!jp":"Building No./Lot No.","neighbourhood":"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza","place":"Place","postcode":"Postcode","province":"Province","province!jp":"Prefecture","quarter":"Quarter","quarter!jp":"Ōaza/Machi","state":"State","street":"Street","subdistrict":"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet","suburb":"Suburb","suburb!jp":"Ward","unit":"Unit"}},"admin_level":{"label":"Admin Level"},"aerialway":{"label":"Type"},"aerialway/access":{"label":"Access","options":{"entry":"Entry","exit":"Exit","both":"Both"}},"aerialway/bubble":{"label":"Bubble"},"aerialway/capacity":{"label":"Capacity (per hour)","placeholder":"500, 2500, 5000..."},"aerialway/duration":{"label":"Duration (minutes)","placeholder":"1, 2, 3..."},"aerialway/heating":{"label":"Heated"},"aerialway/occupancy":{"label":"Occupancy","placeholder":"2, 4, 8..."},"aerialway/summer/access":{"label":"Access (summer)","options":{"entry":"Entry","exit":"Exit","both":"Both"}},"aeroway":{"label":"Type"},"agrarian":{"label":"Products"},"amenity":{"label":"Type"},"animal_boarding":{"label":"For Animals"},"animal_breeding":{"label":"For Animals"},"animal_shelter":{"label":"For Animals"},"area/highway":{"label":"Type"},"artist":{"label":"Artist"},"artwork_type":{"label":"Type"},"atm":{"label":"ATM"},"backrest":{"label":"Backrest"},"barrier":{"label":"Type"},"bath/open_air":{"label":"Open Air"},"bath/sand_bath":{"label":"Sand Bath"},"bath/type":{"label":"Specialty","options":{"onsen":"Japanese Onsen","foot_bath":"Foot Bath","hot_spring":"Hot Spring"}},"beauty":{"label":"Shop Type"},"bench":{"label":"Bench"},"bicycle_parking":{"label":"Type"},"bin":{"label":"Waste Bin"},"blood_components":{"label":"Blood Components","options":{"whole":"whole blood","plasma":"plasma","platelets":"platelets","stemcells":"stem cell samples"}},"board_type":{"label":"Type"},"boules":{"label":"Type"},"boundary":{"label":"Type"},"brand":{"label":"Brand"},"brewery":{"label":"Draft Beers"},"bridge":{"label":"Type","placeholder":"Default"},"building_area":{"label":"Building"},"building":{"label":"Building"},"bunker_type":{"label":"Type"},"cables":{"label":"Cables","placeholder":"1, 2, 3..."},"camera/direction":{"label":"Direction (Degrees Clockwise)","placeholder":"45, 90, 180, 270"},"camera/mount":{"label":"Camera Mount"},"camera/type":{"label":"Camera Type","options":{"fixed":"Fixed","panning":"Panning","dome":"Dome"}},"capacity":{"label":"Capacity","placeholder":"50, 100, 200..."},"castle_type":{"label":"Type"},"clothes":{"label":"Clothes"},"club":{"label":"Type"},"collection_times":{"label":"Collection Times"},"comment":{"label":"Changeset Comment","placeholder":"Brief description of your contributions (required)"},"communication_multi":{"label":"Communication Types"},"construction":{"label":"Type"},"contact/webcam":{"label":"Webcam URL","placeholder":"http://example.com/"},"content":{"label":"Content"},"country":{"label":"Country"},"covered":{"label":"Covered"},"craft":{"label":"Type"},"crane/type":{"label":"Crane Type","options":{"portal_crane":"Portal Crane","floor-mounted_crane":"Floor-mounted Crane","travel_lift":"Travel Lift"}},"crop":{"label":"Crops"},"crossing":{"label":"Type"},"cuisine":{"label":"Cuisines"},"currency_multi":{"label":"Currency Types"},"cutting":{"label":"Type","placeholder":"Default"},"cycle_network":{"label":"Network"},"cycleway":{"label":"Bike Lanes","placeholder":"none","types":{"cycleway:left":"Left side","cycleway:right":"Right side"},"options":{"none":{"title":"None","description":"No bike lane"},"lane":{"title":"Standard bike lane","description":"A bike lane separated from auto traffic by a painted line"},"shared_lane":{"title":"Shared bike lane","description":"A bike lane with no separation from auto traffic"},"track":{"title":"Bike track","description":"A bike lane separated from traffic by a physical barrier"},"share_busway":{"title":"Bike lane shared with bus","description":"A bike lane shared with a bus lane"},"opposite_lane":{"title":"Opposite bike lane","description":"A bike lane that travels in the opposite direction of traffic"},"opposite":{"title":"Contraflow bike lane","description":"A bike lane that travels in both directions on a one-way street"}}},"dance/style":{"label":"Dance Styles"},"date":{"label":"Date"},"delivery":{"label":"Delivery"},"denomination":{"label":"Denomination"},"denotation":{"label":"Denotation"},"description":{"label":"Description"},"devices":{"label":"Devices","placeholder":"1, 2, 3..."},"diaper":{"label":"Diaper Changing Available"},"direction_cardinal":{"label":"Direction","options":{"N":"North","E":"East","S":"South","W":"West","NE":"Northeast","SE":"Southeast","SW":"Southwest","NW":"Northwest","NNE":"North-northeast","ENE":"East-northeast","ESE":"East-southeast","SSE":"South-southeast","SSW":"South-southwest","WSW":"West-southwest","WNW":"West-northwest","NNW":"North-northwest"}},"direction_clock":{"label":"Direction","options":{"clockwise":"Clockwise","anticlockwise":"Counterclockwise"}},"direction_vertex":{"label":"Direction","options":{"forward":"Forward","backward":"Backward","both":"Both / All"}},"direction":{"label":"Direction (Degrees Clockwise)","placeholder":"45, 90, 180, 270"},"dispensing":{"label":"Dispenses Prescriptions"},"display":{"label":"Display"},"distance":{"label":"Total Distance"},"dock":{"label":"Type"},"drive_through":{"label":"Drive-Through"},"duration":{"label":"Duration","placeholder":"00:00"},"electrified":{"label":"Electrification","placeholder":"Contact Line, Electrified Rail...","options":{"contact_line":"Contact Line","rail":"Electrified Rail","yes":"Yes (unspecified)","no":"No"}},"elevation":{"label":"Elevation"},"email":{"label":"Email","placeholder":"example@example.com"},"embankment":{"label":"Type","placeholder":"Default"},"emergency":{"label":"Emergency"},"entrance":{"label":"Type"},"except":{"label":"Exceptions"},"faces":{"label":"Faces"},"fax":{"label":"Fax","placeholder":"+31 42 123 4567"},"fee":{"label":"Fee"},"fence_type":{"label":"Type"},"fire_hydrant/position":{"label":"Position","options":{"lane":"Lane","parking_lot":"Parking Lot","sidewalk":"Sidewalk","green":"Green"}},"fire_hydrant/type":{"label":"Type","options":{"pillar":"Pillar/Aboveground","underground":"Underground","wall":"Wall","pond":"Pond"}},"fitness_station":{"label":"Equipment Type"},"fixme":{"label":"Fix Me"},"ford":{"label":"Type","placeholder":"Default"},"frequency":{"label":"Operating Frequency"},"fuel_multi":{"label":"Fuel Types"},"fuel":{"label":"Fuel"},"gauge":{"label":"Gauge"},"gender":{"label":"Gender","placeholder":"Unknown","options":{"male":"Male","female":"Female","unisex":"Unisex"}},"generator/method":{"label":"Method"},"generator/output/electricity":{"label":"Power Output","placeholder":"50 MW, 100 MW, 200 MW..."},"generator/source":{"label":"Source"},"generator/type":{"label":"Type"},"government":{"label":"Type"},"grape_variety":{"label":"Grape Varieties"},"handicap":{"label":"Handicap","placeholder":"1-18"},"handrail":{"label":"Handrail"},"hashtags":{"label":"Suggested Hashtags","placeholder":"#example"},"healthcare":{"label":"Type"},"healthcare/speciality":{"label":"Specialties"},"height":{"label":"Height (Meters)"},"highway":{"label":"Type"},"historic":{"label":"Type"},"historic/civilization":{"label":"Historic Civilization"},"hoops":{"label":"Hoops","placeholder":"1, 2, 4..."},"horse_dressage":{"label":"Dressage Riding","options":{"undefined":"No","equestrian":"Yes"}},"horse_riding":{"label":"Horseback Riding","options":{"undefined":"No","horse_riding":"Yes"}},"horse_scale":{"label":"Horseback Riding Difficulty","placeholder":"Difficult, Dangerous...","options":{"common":"Easy: No problems or difficulties. (default)","demanding":"Use with caution: Uneven way, occasional difficult passages.","difficult":"Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.","critical":"Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.","dangerous":"Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.","impossible":"Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life."}},"horse_stables":{"label":"Riding Stable","options":{"undefined":"No","stables":"Yes"}},"iata":{"label":"IATA"},"icao":{"label":"ICAO"},"incline_steps":{"label":"Incline","options":{"up":"Up","down":"Down"}},"incline":{"label":"Incline"},"indoor":{"label":"Indoor"},"industrial":{"label":"Type"},"information":{"label":"Type"},"inscription":{"label":"Inscription"},"intermittent":{"label":"Intermittent"},"internet_access":{"label":"Internet Access","options":{"yes":"Yes","no":"No","wlan":"Wifi","wired":"Wired","terminal":"Terminal"}},"internet_access/fee":{"label":"Internet Access Fee"},"internet_access/ssid":{"label":"SSID (Network Name)"},"kerb":{"label":"Curb"},"label":{"label":"Label"},"lamp_type":{"label":"Type"},"landuse":{"label":"Type"},"lanes":{"label":"Lanes","placeholder":"1, 2, 3..."},"layer":{"label":"Layer","placeholder":"0"},"leaf_cycle_singular":{"label":"Leaf Cycle","options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous"}},"leaf_cycle":{"label":"Leaf Cycle","options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous","mixed":"Mixed"}},"leaf_type_singular":{"label":"Leaf Type","options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","leafless":"Leafless"}},"leaf_type":{"label":"Leaf Type","options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","mixed":"Mixed","leafless":"Leafless"}},"leisure":{"label":"Type"},"length":{"label":"Length (Meters)"},"level":{"label":"Level"},"levels":{"label":"Levels","placeholder":"2, 4, 6..."},"lit":{"label":"Lit"},"location":{"label":"Location"},"man_made":{"label":"Type"},"manhole":{"label":"Type"},"map_size":{"label":"Coverage"},"map_type":{"label":"Type"},"maxheight":{"label":"Max Height","placeholder":"4, 4.5, 5, 14'0\", 14'6\", 15'0\""},"maxspeed":{"label":"Speed Limit","placeholder":"40, 50, 60..."},"maxspeed/advisory":{"label":"Advisory Speed Limit","placeholder":"40, 50, 60..."},"maxstay":{"label":"Max Stay"},"maxweight":{"label":"Max Weight"},"memorial":{"label":"Type"},"monitoring_multi":{"label":"Monitoring"},"mtb/scale":{"label":"Mountain Biking Difficulty","placeholder":"0, 1, 2, 3...","options":{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}},"mtb/scale/imba":{"label":"IMBA Trail Difficulty","placeholder":"Easy, Medium, Difficult...","options":{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}},"mtb/scale/uphill":{"label":"Mountain Biking Uphill Difficulty","placeholder":"0, 1, 2, 3...","options":{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}},"name":{"label":"Name","placeholder":"Common name (if any)"},"natural":{"label":"Natural"},"network_bicycle":{"label":"Network Type","placeholder":"Local, Regional, National, International","options":{"lcn":"Local","rcn":"Regional","ncn":"National","icn":"International"}},"network_foot":{"label":"Network Type","placeholder":"Local, Regional, National, International","options":{"lwn":"Local","rwn":"Regional","nwn":"National","iwn":"International"}},"network_horse":{"label":"Network Type","placeholder":"Local, Regional, National, International","options":{"lhn":"Local","rhn":"Regional","nhn":"National","ihn":"International"}},"network_road":{"label":"Network"},"network":{"label":"Network"},"note":{"label":"Note"},"office":{"label":"Type"},"oneway_yes":{"label":"One Way","options":{"undefined":"Assumed to be Yes","yes":"Yes","no":"No","reversible":"Reversible","alternating":"Alternating"}},"oneway":{"label":"One Way","options":{"undefined":"Assumed to be No","yes":"Yes","no":"No","reversible":"Reversible","alternating":"Alternating"}},"opening_hours":{"label":"Hours"},"operator":{"label":"Operator"},"outdoor_seating":{"label":"Outdoor Seating"},"par":{"label":"Par","placeholder":"3, 4, 5..."},"park_ride":{"label":"Park and Ride"},"parking":{"label":"Type","options":{"surface":"Surface","multi-storey":"Multilevel","underground":"Underground","sheds":"Sheds","carports":"Carports","garage_boxes":"Garage Boxes","lane":"Roadside Lane"}},"payment_multi":{"label":"Payment Types"},"phases":{"label":"Phases","placeholder":"1, 2, 3..."},"phone":{"label":"Phone","placeholder":"+31 42 123 4567"},"piste/difficulty":{"label":"Difficulty","placeholder":"Easy, Intermediate, Advanced...","options":{"novice":"Novice (instructional)","easy":"Easy (green circle)","intermediate":"Intermediate (blue square)","advanced":"Advanced (black diamond)","expert":"Expert (double black diamond)","freeride":"Freeride (off-piste)","extreme":"Extreme (climbing equipment required)"}},"piste/grooming":{"label":"Grooming","options":{"classic":"Classic","mogul":"Mogul","backcountry":"Backcountry","classic+skating":"Classic and Skating","scooter":"Scooter/Snowmobile","skating":"Skating"}},"piste/type":{"label":"Type","options":{"downhill":"Downhill","nordic":"Nordic","skitour":"Skitour","sled":"Sled","hike":"Hike","sleigh":"Sleigh","ice_skate":"Ice Skate","snow_park":"Snow Park","playground":"Playground"}},"place":{"label":"Type"},"plant":{"label":"Plant"},"plant/output/electricity":{"label":"Power Output","placeholder":"500 MW, 1000 MW, 2000 MW..."},"playground/baby":{"label":"Baby Seat"},"playground/max_age":{"label":"Maximum Age"},"playground/min_age":{"label":"Minimum Age"},"population":{"label":"Population"},"power_supply":{"label":"Power Supply"},"power":{"label":"Type"},"produce":{"label":"Produce"},"product":{"label":"Products"},"railway":{"label":"Type"},"railway/position":{"label":"Milestone Position","placeholder":"Distance to one decimal (123.4)"},"railway/signal/direction":{"label":"Direction","options":{"forward":"Forward","backward":"Backward","both":"Both / All"}},"rating":{"label":"Power Rating"},"recycling_accepts":{"label":"Accepts"},"ref_aeroway_gate":{"label":"Gate Number"},"ref_golf_hole":{"label":"Hole Number","placeholder":"1-18"},"ref_highway_junction":{"label":"Junction Number"},"ref_platform":{"label":"Platform Number"},"ref_road_number":{"label":"Road Number"},"ref_route":{"label":"Route Number"},"ref_runway":{"label":"Runway Number","placeholder":"e.g. 01L/19R"},"ref_stop_position":{"label":"Stop Number"},"ref_taxiway":{"label":"Taxiway Name","placeholder":"e.g. A5"},"ref":{"label":"Reference Code"},"ref/isil":{"label":"ISIL Code"},"relation":{"label":"Type"},"religion":{"label":"Religion"},"restriction":{"label":"Type"},"restrictions":{"label":"Turn Restrictions"},"rooms":{"label":"Rooms"},"route_master":{"label":"Type"},"route":{"label":"Type"},"sac_scale":{"label":"Hiking Difficulty","placeholder":"Mountain Hiking, Alpine Hiking...","options":{"hiking":"T1: Hiking","mountain_hiking":"T2: Mountain Hiking","demanding_mountain_hiking":"T3: Demanding Mountain Hiking","alpine_hiking":"T4: Alpine Hiking","demanding_alpine_hiking":"T5: Demanding Alpine Hiking","difficult_alpine_hiking":"T6: Difficult Alpine Hiking"}},"sanitary_dump_station":{"label":"Toilet Disposal"},"seasonal":{"label":"Seasonal"},"second_hand":{"label":"Sells Used","placeholder":"Yes, No, Only","options":{"yes":"Yes","no":"No","only":"Only"}},"service_rail":{"label":"Service Type","options":{"spur":"Spur","yard":"Yard","siding":"Siding","crossover":"Crossover"}},"service_times":{"label":"Service Times"},"service":{"label":"Type"},"service/bicycle":{"label":"Services"},"service/vehicle":{"label":"Services"},"shelter_type":{"label":"Type"},"shelter":{"label":"Shelter"},"shop":{"label":"Type"},"site":{"label":"Type"},"smoking":{"label":"Smoking","placeholder":"No, Separated, Yes...","options":{"no":"No smoking anywhere","separated":"In smoking areas, not physically isolated","isolated":"In smoking areas, physically isolated","outside":"Allowed outside","yes":"Allowed everywhere","dedicated":"Dedicated to smokers (e.g. smokers' club)"}},"smoothness":{"label":"Smoothness","placeholder":"Thin Rollers, Wheels, Off-Road...","options":{"excellent":"Thin Rollers: rollerblade, skateboard","good":"Thin Wheels: racing bike","intermediate":"Wheels: city bike, wheelchair, scooter","bad":"Robust Wheels: trekking bike, car, rickshaw","very_bad":"High Clearance: light duty off-road vehicle","horrible":"Off-Road: heavy duty off-road vehicle","very_horrible":"Specialized off-road: tractor, ATV","impassable":"Impassable / No wheeled vehicle"}},"social_facility_for":{"label":"People Served"},"social_facility":{"label":"Type"},"source":{"label":"Sources"},"sport_ice":{"label":"Sports"},"sport_racing_motor":{"label":"Sports"},"sport_racing_nonmotor":{"label":"Sports"},"sport":{"label":"Sports"},"stars":{"label":"Stars"},"start_date":{"label":"Start Date"},"step_count":{"label":"Number of Steps"},"stop":{"label":"Stop Type","options":{"all":"All Ways","minor":"Minor Road"}},"structure_waterway":{"label":"Structure","placeholder":"Unknown","options":{"tunnel":"Tunnel"}},"structure":{"label":"Structure","placeholder":"Unknown","options":{"bridge":"Bridge","tunnel":"Tunnel","embankment":"Embankment","cutting":"Cutting","ford":"Ford"}},"studio":{"label":"Type"},"substance":{"label":"Substance"},"substation":{"label":"Type"},"supervised":{"label":"Supervised"},"support":{"label":"Support"},"surface":{"label":"Surface"},"surveillance":{"label":"Surveillance Kind"},"surveillance/type":{"label":"Surveillance Type","options":{"camera":"Camera","guard":"Guard","ALPR":"Automatic License Plate Reader"}},"surveillance/zone":{"label":"Surveillance Zone"},"switch":{"label":"Type","options":{"mechanical":"Mechanical","circuit_breaker":"Circuit Breaker","disconnector":"Disconnector","earthing":"Earthing"}},"tactile_paving":{"label":"Tactile Paving"},"takeaway":{"label":"Takeaway","placeholder":"Yes, No, Takeaway Only...","options":{"yes":"Yes","no":"No","only":"Takeaway Only"}},"toilets/disposal":{"label":"Disposal","options":{"flush":"Flush","pitlatrine":"Pit/Latrine","chemical":"Chemical","bucket":"Bucket"}},"toll":{"label":"Toll"},"tomb":{"label":"Type"},"tourism_attraction":{"label":"Tourism"},"tourism":{"label":"Type"},"tower/construction":{"label":"Construction","placeholder":"Guyed, Lattice, Concealed, ..."},"tower/type":{"label":"Type"},"tracktype":{"label":"Track Type","placeholder":"Solid, Mostly Solid, Soft...","options":{"grade1":"Solid: paved or heavily compacted hardcore surface","grade2":"Mostly Solid: gravel/rock with some soft material mixed in","grade3":"Even mixture of hard and soft materials","grade4":"Mostly Soft: soil/sand/grass with some hard material mixed in","grade5":"Soft: soil/sand/grass"}},"trade":{"label":"Type"},"traffic_calming":{"label":"Type"},"traffic_signals":{"label":"Type"},"traffic_signals/direction":{"label":"Direction","options":{"forward":"Forward","backward":"Backward","both":"Both / All"}},"trail_visibility":{"label":"Trail Visibility","placeholder":"Excellent, Good, Bad...","options":{"excellent":"Excellent: unambiguous path or markers everywhere","good":"Good: markers visible, sometimes require searching","intermediate":"Intermediate: few markers, path mostly visible","bad":"Bad: no markers, path sometimes invisible/pathless","horrible":"Horrible: often pathless, some orientation skills required","no":"No: pathless, excellent orientation skills required"}},"transformer":{"label":"Type","options":{"distribution":"Distribution","generator":"Generator","converter":"Converter","traction":"Traction","auto":"Autotransformer","phase_angle_regulator":"Phase Angle Regulator","auxiliary":"Auxiliary","yes":"Unknown"}},"trees":{"label":"Trees"},"tunnel":{"label":"Type","placeholder":"Default"},"usage_rail":{"label":"Usage Type","options":{"main":"Main","branch":"Branch","industrial":"Industrial","military":"Military","test":"Test","tourism":"Tourism"}},"vending":{"label":"Types of Goods"},"visibility":{"label":"Visibility","options":{"house":"Up to 5m (16ft)","street":"5 to 20m (16 to 65ft)","area":"Over 20m (65ft)"}},"volcano/status":{"label":"Volcano Status","options":{"active":"Active","dormant":"Dormant","extinct":"Extinct"}},"volcano/type":{"label":"Volcano Type","options":{"stratovolcano":"Stratovolcano","shield":"Shield","scoria":"Scoria"}},"voltage":{"label":"Voltage"},"voltage/primary":{"label":"Primary Voltage"},"voltage/secondary":{"label":"Secondary Voltage"},"voltage/tertiary":{"label":"Tertiary Voltage"},"wall":{"label":"Type"},"water_point":{"label":"Water Point"},"water":{"label":"Type"},"waterway":{"label":"Type"},"website":{"label":"Website","placeholder":"http://example.com/"},"wetland":{"label":"Type"},"wheelchair":{"label":"Wheelchair Access"},"wholesale":{"label":"Wholesale"},"width":{"label":"Width (Meters)"},"wikipedia":{"label":"Wikipedia"},"windings":{"label":"Windings","placeholder":"1, 2, 3..."},"windings/configuration":{"label":"Windings Configuration","options":{"star":"Star / Wye","delta":"Delta","open-delta":"Open Delta","zigzag":"Zig Zag","open":"Open","scott":"Scott","leblanc":"Leblanc"}}},"presets":{"aerialway":{"name":"Aerialway","terms":"ski lift,funifor,funitel"},"aeroway":{"name":"Aeroway","terms":""},"amenity":{"name":"Amenity","terms":""},"circular":{"name":"Traffic Circle","terms":""},"highway":{"name":"Highway","terms":""},"place":{"name":"Place","terms":""},"power":{"name":"Power","terms":""},"railway":{"name":"Railway","terms":""},"roundabout":{"name":"Roundabout","terms":""},"waterway":{"name":"Waterway","terms":""},"address":{"name":"Address","terms":""},"advertising/billboard":{"name":"Billboard","terms":""},"advertising/column":{"name":"Advertising Column","terms":""},"aerialway/station":{"name":"Aerialway Station","terms":""},"aerialway/cable_car":{"name":"Cable Car","terms":"tramway,ropeway"},"aerialway/chair_lift":{"name":"Chair Lift","terms":""},"aerialway/drag_lift":{"name":"Drag Lift","terms":""},"aerialway/gondola":{"name":"Gondola","terms":""},"aerialway/goods":{"name":"Goods Aerialway","terms":""},"aerialway/magic_carpet":{"name":"Magic Carpet Lift","terms":""},"aerialway/mixed_lift":{"name":"Mixed Lift","terms":""},"aerialway/platter":{"name":"Platter Lift","terms":"button lift,poma lift"},"aerialway/pylon":{"name":"Aerialway Pylon","terms":""},"aerialway/rope_tow":{"name":"Rope Tow Lift","terms":"handle tow,bugel lift"},"aerialway/t-bar":{"name":"T-bar Lift","terms":"tbar"},"aeroway/aerodrome":{"name":"Airport","terms":"airplane,airport,aerodrome"},"aeroway/apron":{"name":"Apron","terms":"ramp"},"aeroway/gate":{"name":"Airport Gate","terms":""},"aeroway/hangar":{"name":"Hangar","terms":""},"aeroway/helipad":{"name":"Helipad","terms":"helicopter,helipad,heliport"},"aeroway/runway":{"name":"Runway","terms":"landing strip"},"aeroway/taxiway":{"name":"Taxiway","terms":""},"aeroway/terminal":{"name":"Airport Terminal","terms":"airport,aerodrome"},"allotments/plot":{"name":"Community Garden Plot","terms":""},"amenity/bus_station":{"name":"Bus Station / Terminal","terms":""},"amenity/coworking_space":{"name":"Coworking Space","terms":""},"amenity/ferry_terminal":{"name":"Ferry Station / Terminal","terms":""},"amenity/nursing_home":{"name":"Nursing Home","terms":""},"amenity/register_office":{"name":"Register Office","terms":""},"amenity/scrapyard":{"name":"Scrap Yard","terms":""},"amenity/swimming_pool":{"name":"Swimming Pool","terms":""},"amenity/animal_boarding":{"name":"Animal Boarding Facility","terms":"boarding,cat,cattery,dog,horse,kennel,kitten,pet,pet boarding,pet care,pet hotel,puppy,reptile"},"amenity/animal_breeding":{"name":"Animal Breeding Facility","terms":"breeding,bull,cat,cow,dog,horse,husbandry,kitten,livestock,pet breeding,puppy,reptile"},"amenity/animal_shelter":{"name":"Animal Shelter","terms":"adoption,aspca,cat,dog,horse,kitten,pet care,pet rescue,puppy,raptor,reptile,rescue,spca"},"amenity/arts_centre":{"name":"Arts Center","terms":""},"amenity/atm":{"name":"ATM","terms":"money,cash,machine"},"amenity/bank":{"name":"Bank","terms":"credit union,check,deposit,fund,investment,repository,reserve,safe,savings,stock,treasury,trust,vault"},"amenity/bar":{"name":"Bar","terms":"dive,beer,bier,booze"},"amenity/bbq":{"name":"Barbecue/Grill","terms":"bbq,grill"},"amenity/bench":{"name":"Bench","terms":"seat"},"amenity/bicycle_parking":{"name":"Bicycle Parking","terms":"bike"},"amenity/bicycle_rental":{"name":"Bicycle Rental","terms":"bike"},"amenity/bicycle_repair_station":{"name":"Bicycle Repair Tool Stand","terms":"bike,repair,chain,pump"},"amenity/biergarten":{"name":"Beer Garden","terms":"beer,bier,booze"},"amenity/boat_rental":{"name":"Boat Rental","terms":""},"amenity/bureau_de_change":{"name":"Currency Exchange","terms":"bureau de change,money changer"},"amenity/cafe":{"name":"Cafe","terms":"bistro,coffee,tea"},"amenity/car_pooling":{"name":"Car Pooling","terms":""},"amenity/car_rental":{"name":"Car Rental","terms":""},"amenity/car_sharing":{"name":"Car Sharing","terms":""},"amenity/car_wash":{"name":"Car Wash","terms":""},"amenity/casino":{"name":"Casino","terms":"gambling,roulette,craps,poker,blackjack"},"amenity/charging_station":{"name":"Charging Station","terms":"EV,Electric Vehicle,Supercharger"},"amenity/childcare":{"name":"Nursery/Childcare","terms":"daycare,orphanage,playgroup"},"amenity/cinema":{"name":"Cinema","terms":"drive-in,film,flick,movie,theater,picture,show,screen"},"amenity/clinic":{"name":"Clinic","terms":"medical,urgentcare"},"amenity/clinic/abortion":{"name":"Abortion Clinic","terms":""},"amenity/clinic/fertility":{"name":"Fertility Clinic","terms":"egg,fertility,reproductive,sperm,ovulation"},"amenity/clock":{"name":"Clock","terms":""},"amenity/college":{"name":"College Grounds","terms":"university"},"amenity/community_centre":{"name":"Community Center","terms":"event,hall"},"amenity/compressed_air":{"name":"Compressed Air","terms":""},"amenity/courthouse":{"name":"Courthouse","terms":""},"amenity/crematorium":{"name":"Crematorium","terms":"cemetery,funeral"},"amenity/dentist":{"name":"Dentist","terms":"tooth,teeth"},"amenity/doctors":{"name":"Doctor","terms":"medic*,physician"},"amenity/dojo":{"name":"Dojo / Martial Arts Academy","terms":"martial arts,dojang"},"amenity/drinking_water":{"name":"Drinking Water","terms":"fountain,potable"},"amenity/driving_school":{"name":"Driving School","terms":""},"amenity/embassy":{"name":"Embassy","terms":""},"amenity/fast_food":{"name":"Fast Food","terms":"restaurant,takeaway"},"amenity/fire_station":{"name":"Fire Station","terms":""},"amenity/food_court":{"name":"Food Court","terms":"fast food,restaurant,food"},"amenity/fountain":{"name":"Fountain","terms":""},"amenity/fuel":{"name":"Gas Station","terms":"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/grave_yard":{"name":"Graveyard","terms":""},"amenity/grit_bin":{"name":"Grit Bin","terms":"salt,sand"},"amenity/hospital":{"name":"Hospital Grounds","terms":"clinic,doctor,emergency room,health,infirmary,institution,sanatorium,sanitarium,sick,surgery,ward"},"amenity/hunting_stand":{"name":"Hunting Stand","terms":"game,gun,lookout,rifle,shoot*,wild,watch"},"amenity/ice_cream":{"name":"Ice Cream Shop","terms":"gelato,sorbet,sherbet,frozen,yogurt"},"amenity/internet_cafe":{"name":"Internet Cafe","terms":"cybercafe,taxiphone,teleboutique,coffee,cafe,net,lanhouse"},"amenity/kindergarten":{"name":"Preschool/Kindergarten Grounds","terms":"kindergarden,pre-school"},"amenity/library":{"name":"Library","terms":"book"},"amenity/love_hotel":{"name":"Love Hotel","terms":""},"amenity/marketplace":{"name":"Marketplace","terms":""},"amenity/monastery":{"name":"Monastery Grounds","terms":"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,monastery,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/motorcycle_parking":{"name":"Motorcycle Parking","terms":""},"amenity/music_school":{"name":"Music School","terms":"school of music"},"amenity/nightclub":{"name":"Nightclub","terms":"disco*,night club,dancing,dance club"},"amenity/parking_entrance":{"name":"Parking Garage Entrance/Exit","terms":""},"amenity/parking_space":{"name":"Parking Space","terms":""},"amenity/parking":{"name":"Car Parking","terms":""},"amenity/pavilion":{"name":"Pavilion","terms":""},"amenity/pharmacy":{"name":"Pharmacy","terms":"drug*,med*,prescription"},"amenity/place_of_worship":{"name":"Place of Worship","terms":"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/place_of_worship/buddhist":{"name":"Buddhist Temple","terms":"stupa,vihara,monastery,temple,pagoda,zendo,dojo"},"amenity/place_of_worship/christian":{"name":"Church","terms":"christian,abbey,basilica,bethel,cathedral,chancel,chantry,chapel,fold,house of God,house of prayer,house of worship,minster,mission,oratory,parish,sacellum,sanctuary,shrine,tabernacle,temple"},"amenity/place_of_worship/hindu":{"name":"Hindu Temple","terms":"kovil,devasthana,mandir,kshetram,alayam,shrine,temple"},"amenity/place_of_worship/jewish":{"name":"Synagogue","terms":"jewish"},"amenity/place_of_worship/muslim":{"name":"Mosque","terms":"muslim"},"amenity/place_of_worship/shinto":{"name":"Shinto Shrine","terms":"kami,torii"},"amenity/place_of_worship/sikh":{"name":"Sikh Temple","terms":"gurudwara,temple"},"amenity/place_of_worship/taoist":{"name":"Taoist Temple","terms":"daoist,monastery,temple"},"amenity/planetarium":{"name":"Planetarium","terms":"museum,astronomy,observatory"},"amenity/police":{"name":"Police","terms":"badge,constable,constabulary,cop,detective,fed,law,enforcement,officer,patrol"},"amenity/post_box":{"name":"Mailbox","terms":"letter,post"},"amenity/post_office":{"name":"Post Office","terms":"letter,mail"},"amenity/prison":{"name":"Prison Grounds","terms":"cell,jail"},"amenity/pub":{"name":"Pub","terms":"alcohol,drink,dive,beer,bier,booze"},"amenity/public_bath":{"name":"Public Bath","terms":"onsen,foot bath,hot springs"},"amenity/public_bookcase":{"name":"Public Bookcase","terms":"library,bookcrossing"},"amenity/ranger_station":{"name":"Ranger Station","terms":"visitor center,visitor centre,permit center,permit centre,backcountry office,warden office,warden center"},"amenity/recycling_centre":{"name":"Recycling Center","terms":"bottle,can,dump,glass,garbage,rubbish,scrap,trash"},"amenity/recycling":{"name":"Recycling Container","terms":"bin,can,bottle,glass,garbage,rubbish,scrap,trash"},"amenity/restaurant":{"name":"Restaurant","terms":"bar,breakfast,cafe,café,canteen,coffee,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/sanitary_dump_station":{"name":"RV Toilet Disposal","terms":"Motor Home,Camper,Sanitary,Dump Station,Elsan,CDP,CTDP,Chemical Toilet"},"amenity/school":{"name":"School Grounds","terms":"academy,elementary school,middle school,high school"},"amenity/shelter":{"name":"Shelter","terms":"lean-to,gazebo,picnic"},"amenity/shower":{"name":"Shower","terms":"rain closet"},"amenity/smoking_area":{"name":"Smoking Area","terms":""},"amenity/social_facility":{"name":"Social Facility","terms":""},"amenity/social_facility/food_bank":{"name":"Food Bank","terms":""},"amenity/social_facility/group_home":{"name":"Elderly Group Home","terms":"old,senior,living,care home,assisted living"},"amenity/social_facility/homeless_shelter":{"name":"Homeless Shelter","terms":"houseless,unhoused,displaced"},"amenity/social_facility/nursing_home":{"name":"Nursing Home","terms":"elderly,living,nursing,old,senior,assisted living"},"amenity/studio":{"name":"Studio","terms":"recording,radio,television"},"amenity/taxi":{"name":"Taxi Stand","terms":"cab"},"amenity/telephone":{"name":"Telephone","terms":"phone"},"amenity/theatre":{"name":"Theater","terms":"theatre,performance,play,musical"},"amenity/toilets":{"name":"Toilets","terms":"bathroom,restroom,outhouse,privy,head,lavatory,latrine,water closet,WC,W.C."},"amenity/townhall":{"name":"Town Hall","terms":"village,city,government,courthouse,municipal"},"amenity/university":{"name":"University Grounds","terms":"college"},"amenity/vending_machine":{"name":"Vending Machine","terms":""},"amenity/vending_machine/news_papers":{"name":"Newspaper Vending Machine","terms":"newspaper"},"amenity/vending_machine/cigarettes":{"name":"Cigarette Vending Machine","terms":"cigarette"},"amenity/vending_machine/coffee":{"name":"Coffee Vending Machine","terms":"coffee"},"amenity/vending_machine/condoms":{"name":"Condom Vending Machine","terms":"condom"},"amenity/vending_machine/drinks":{"name":"Drink Vending Machine","terms":"drink,soda,beverage,juice,pop"},"amenity/vending_machine/electronics":{"name":"Electronics Vending Machine","terms":"cable,charger,earbud,headphone,phone,tablet"},"amenity/vending_machine/elongated_coin":{"name":"Flat Coin Vending Machine","terms":"coin,crush,elongated,flatten,penny,souvenir"},"amenity/vending_machine/excrement_bags":{"name":"Excrement Bag Vending Machine","terms":"excrement bags,poop,dog,animal"},"amenity/vending_machine/feminine_hygiene":{"name":"Feminine Hygiene Vending Machine","terms":"condom,tampon,pad,woman,women,menstrual hygiene products,personal care"},"amenity/vending_machine/food":{"name":"Food Vending Machine","terms":"food"},"amenity/vending_machine/fuel":{"name":"Gas Pump","terms":"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/vending_machine/ice_cream":{"name":"Ice Cream Vending Machine","terms":"chocolate,ice cream,frozen,popsicle,vanilla"},"amenity/vending_machine/newspapers":{"name":"Newspaper Vending Machine","terms":"newspaper"},"amenity/vending_machine/parcel_pickup_dropoff":{"name":"Parcel Pickup/Dropoff Vending Machine","terms":"parcel,mail,pickup"},"amenity/vending_machine/parking_tickets":{"name":"Parking Ticket Vending Machine","terms":"parking,ticket"},"amenity/vending_machine/public_transport_tickets":{"name":"Transit Ticket Vending Machine","terms":"bus,train,ferry,rail,ticket,transportation"},"amenity/vending_machine/stamps":{"name":"Postage Vending Machine","terms":"mail,postage,stamp"},"amenity/vending_machine/sweets":{"name":"Snack Vending Machine","terms":"candy,gum,chip,pretzel,cookie,cracker"},"amenity/veterinary":{"name":"Veterinary","terms":"pet clinic,veterinarian,animal hospital,pet doctor"},"amenity/waste_basket":{"name":"Waste Basket","terms":"bin,garbage,rubbish,litter,trash"},"amenity/waste_disposal":{"name":"Garbage Dumpster","terms":"garbage,rubbish,litter,trash"},"amenity/waste_transfer_station":{"name":"Waste Transfer Station","terms":"dump,garbage,recycling,rubbish,scrap,trash"},"amenity/waste/dog_excrement":{"name":"Dog Excrement Bin","terms":"bin,garbage,rubbish,litter,trash,poo,dog"},"amenity/water_point":{"name":"RV Drinking Water","terms":""},"amenity/watering_place":{"name":"Animal Watering Place","terms":""},"area":{"name":"Area","terms":""},"area/highway":{"name":"Road Surface","terms":""},"attraction/amusement_ride":{"name":"Amusement Ride","terms":"theme park,carnival ride"},"attraction/animal":{"name":"Animal","terms":"zoo,theme park,animal park,lion,tiger,bear"},"attraction/big_wheel":{"name":"Big Wheel","terms":"ferris wheel,theme park,amusement ride"},"attraction/bumper_car":{"name":"Bumper Car","terms":"theme park,dodgem cars,autoscooter"},"attraction/bungee_jumping":{"name":"Bungee Jumping","terms":"theme park,bungy jumping,jumping platform"},"attraction/carousel":{"name":"Carousel","terms":"theme park,roundabout,merry-go-round,galloper,jumper,horseabout,flying horses"},"attraction/dark_ride":{"name":"Dark Ride","terms":"theme park,ghost train"},"attraction/drop_tower":{"name":"Drop Tower","terms":"theme park,amusement ride,gondola,tower,big drop"},"attraction/maze":{"name":"Maze","terms":"theme park,amusement ride,labyrinth"},"attraction/pirate_ship":{"name":"Pirate Ship","terms":"theme park,carnival ride,amusement ride"},"attraction/river_rafting":{"name":"River Rafting","terms":"theme park,aquatic park,water park,rafting simulator,river rafting ride,river rapids ride"},"attraction/roller_coaster":{"name":"Roller Coaster","terms":"theme park,amusement ride"},"attraction/train":{"name":"Tourist Train","terms":"theme park,rackless train,road train,Tschu-Tschu train,dotto train,park train"},"attraction/water_slide":{"name":"Water Slide","terms":"theme park,aquatic park,water park,flumes,water chutes,hydroslides"},"barrier":{"name":"Barrier","terms":""},"barrier/entrance":{"name":"Entrance","terms":""},"barrier/block":{"name":"Block","terms":""},"barrier/bollard":{"name":"Bollard","terms":""},"barrier/border_control":{"name":"Border Control","terms":""},"barrier/cattle_grid":{"name":"Cattle Grid","terms":""},"barrier/city_wall":{"name":"City Wall","terms":""},"barrier/cycle_barrier":{"name":"Cycle Barrier","terms":""},"barrier/ditch":{"name":"Trench","terms":""},"barrier/fence":{"name":"Fence","terms":""},"barrier/gate":{"name":"Gate","terms":""},"barrier/hedge":{"name":"Hedge","terms":""},"barrier/kerb":{"name":"Kerb","terms":""},"barrier/kissing_gate":{"name":"Kissing Gate","terms":""},"barrier/lift_gate":{"name":"Lift Gate","terms":""},"barrier/retaining_wall":{"name":"Retaining Wall","terms":""},"barrier/stile":{"name":"Stile","terms":""},"barrier/toll_booth":{"name":"Toll Booth","terms":""},"barrier/wall":{"name":"Wall","terms":""},"boundary/administrative":{"name":"Administrative Boundary","terms":""},"building":{"name":"Building","terms":""},"building/bunker":{"name":"Bunker","terms":""},"building/entrance":{"name":"Entrance/Exit","terms":""},"building/train_station":{"name":"Train Station","terms":""},"building/apartments":{"name":"Apartments","terms":""},"building/barn":{"name":"Barn","terms":""},"building/boathouse":{"name":"Boathouse","terms":""},"building/bungalow":{"name":"Bungalow","terms":"home,detached"},"building/cabin":{"name":"Cabin","terms":""},"building/cathedral":{"name":"Cathedral Building","terms":""},"building/chapel":{"name":"Chapel Building","terms":""},"building/church":{"name":"Church Building","terms":""},"building/civic":{"name":"Civic Building","terms":""},"building/college":{"name":"College Building","terms":"university"},"building/commercial":{"name":"Commercial Building","terms":""},"building/construction":{"name":"Building Under Construction","terms":""},"building/detached":{"name":"Detached House","terms":"home,single,family,residence,dwelling"},"building/dormitory":{"name":"Dormitory","terms":""},"building/farm_auxiliary":{"name":"Farm Building","terms":""},"building/farm":{"name":"Farm House","terms":""},"building/garage":{"name":"Garage","terms":""},"building/garages":{"name":"Garages","terms":""},"building/greenhouse":{"name":"Greenhouse","terms":""},"building/hospital":{"name":"Hospital Building","terms":""},"building/hotel":{"name":"Hotel Building","terms":""},"building/house":{"name":"House","terms":"home,family,residence,dwelling"},"building/hut":{"name":"Hut","terms":""},"building/industrial":{"name":"Industrial Building","terms":""},"building/kindergarten":{"name":"Preschool/Kindergarten Building","terms":"kindergarden,pre-school"},"building/mosque":{"name":"Mosque Building","terms":""},"building/public":{"name":"Public Building","terms":""},"building/residential":{"name":"Residential Building","terms":""},"building/retail":{"name":"Retail Building","terms":""},"building/roof":{"name":"Roof","terms":""},"building/ruins":{"name":"Building Ruins","terms":""},"building/school":{"name":"School Building","terms":"academy,elementary school,middle school,high school"},"building/semidetached_house":{"name":"Semi-Detached House","terms":"home,double,duplex,twin,family,residence,dwelling"},"building/service":{"name":"Service Building","terms":""},"building/shed":{"name":"Shed","terms":""},"building/stable":{"name":"Stable","terms":""},"building/stadium":{"name":"Stadium Building","terms":""},"building/static_caravan":{"name":"Static Mobile Home","terms":""},"building/temple":{"name":"Temple Building","terms":""},"building/terrace":{"name":"Row Houses","terms":"home,terrace,brownstone,family,residence,dwelling"},"building/transportation":{"name":"Transportation Building","terms":""},"building/university":{"name":"University Building","terms":"college"},"building/warehouse":{"name":"Warehouse","terms":""},"camp_site/camp_pitch":{"name":"Camp Pitch","terms":"tent,rv"},"club":{"name":"Club","terms":"social"},"craft":{"name":"Craft","terms":""},"craft/jeweler":{"name":"Jeweler","terms":""},"craft/locksmith":{"name":"Locksmith","terms":""},"craft/optician":{"name":"Optician","terms":""},"craft/tailor":{"name":"Tailor","terms":"clothes,suit"},"craft/basket_maker":{"name":"Basket Maker","terms":""},"craft/beekeeper":{"name":"Beekeeper","terms":""},"craft/blacksmith":{"name":"Blacksmith","terms":""},"craft/boatbuilder":{"name":"Boat Builder","terms":""},"craft/bookbinder":{"name":"Bookbinder","terms":"book repair"},"craft/brewery":{"name":"Brewery","terms":"alcohol,beer,beverage,bier,booze,cider"},"craft/carpenter":{"name":"Carpenter","terms":"woodworker"},"craft/carpet_layer":{"name":"Carpet Layer","terms":""},"craft/caterer":{"name":"Caterer","terms":""},"craft/chimney_sweeper":{"name":"Chimney Sweeper","terms":""},"craft/clockmaker":{"name":"Clockmaker","terms":""},"craft/confectionery":{"name":"Candy Maker","terms":"sweet,candy"},"craft/distillery":{"name":"Distillery","terms":"alcohol,beverage,bourbon,booze,brandy,gin,hooch,liquor,mezcal,moonshine,rum,scotch,spirits,still,tequila,vodka,whiskey,whisky"},"craft/dressmaker":{"name":"Dressmaker","terms":"seamstress"},"craft/electrician":{"name":"Electrician","terms":"power,wire"},"craft/electronics_repair":{"name":"Electronics Repair Shop","terms":""},"craft/gardener":{"name":"Gardener","terms":"landscaper,grounds keeper"},"craft/glaziery":{"name":"Glaziery","terms":"glass,stained-glass,window"},"craft/handicraft":{"name":"Handicraft","terms":""},"craft/hvac":{"name":"HVAC","terms":"heat*,vent*,air conditioning"},"craft/insulator":{"name":"Insulator","terms":""},"craft/key_cutter":{"name":"Key Cutter","terms":""},"craft/metal_construction":{"name":"Metal Construction","terms":""},"craft/painter":{"name":"Painter","terms":""},"craft/photographer":{"name":"Photographer","terms":""},"craft/photographic_laboratory":{"name":"Photographic Laboratory","terms":"film"},"craft/plasterer":{"name":"Plasterer","terms":""},"craft/plumber":{"name":"Plumber","terms":"pipe"},"craft/pottery":{"name":"Pottery","terms":"ceramic"},"craft/rigger":{"name":"Rigger","terms":""},"craft/roofer":{"name":"Roofer","terms":""},"craft/saddler":{"name":"Saddler","terms":""},"craft/sailmaker":{"name":"Sailmaker","terms":""},"craft/sawmill":{"name":"Sawmill","terms":"lumber"},"craft/scaffolder":{"name":"Scaffolder","terms":""},"craft/sculptor":{"name":"Sculptor","terms":""},"craft/shoemaker":{"name":"Shoemaker","terms":"cobbler"},"craft/stonemason":{"name":"Stonemason","terms":"masonry"},"craft/tiler":{"name":"Tiler","terms":""},"craft/tinsmith":{"name":"Tinsmith","terms":""},"craft/upholsterer":{"name":"Upholsterer","terms":""},"craft/watchmaker":{"name":"Watchmaker","terms":""},"craft/window_construction":{"name":"Window Construction","terms":"glass"},"craft/winery":{"name":"Winery","terms":""},"embankment":{"name":"Embankment","terms":""},"emergency/designated":{"name":"Emergency Access Designated","terms":""},"emergency/destination":{"name":"Emergency Access Destination","terms":""},"emergency/no":{"name":"Emergency Access No","terms":""},"emergency/official":{"name":"Emergency Access Official","terms":""},"emergency/private":{"name":"Emergency Access Private","terms":""},"emergency/yes":{"name":"Emergency Access Yes","terms":""},"emergency/ambulance_station":{"name":"Ambulance Station","terms":"EMS,EMT,rescue"},"emergency/defibrillator":{"name":"Defibrillator","terms":"AED"},"emergency/fire_hydrant":{"name":"Fire Hydrant","terms":"fire plug"},"emergency/life_ring":{"name":"Life Ring","terms":"life buoy,kisby ring,kisbie ring,perry buoy"},"emergency/phone":{"name":"Emergency Phone","terms":""},"emergency/water_tank":{"name":"Emergency Water Tank","terms":"water tank,cistern,reservoir"},"entrance":{"name":"Entrance/Exit","terms":""},"footway/crossing-raised":{"name":"Raised Street Crossing","terms":"flat top,hump,speed,slow"},"footway/crossing":{"name":"Street Crossing","terms":""},"footway/crosswalk-raised":{"name":"Raised Pedestrian Crosswalk","terms":"zebra crossing,flat top,hump,speed,slow"},"footway/crosswalk":{"name":"Pedestrian Crosswalk","terms":"zebra crossing"},"footway/sidewalk":{"name":"Sidewalk","terms":""},"ford":{"name":"Ford","terms":""},"golf/bunker":{"name":"Sand Trap","terms":"hazard,bunker"},"golf/fairway":{"name":"Fairway","terms":""},"golf/green":{"name":"Putting Green","terms":""},"golf/hole":{"name":"Golf Hole","terms":""},"golf/lateral_water_hazard_area":{"name":"Lateral Water Hazard","terms":""},"golf/lateral_water_hazard_line":{"name":"Lateral Water Hazard","terms":""},"golf/rough":{"name":"Rough","terms":""},"golf/tee":{"name":"Tee Box","terms":"teeing ground"},"golf/water_hazard_area":{"name":"Water Hazard","terms":""},"golf/water_hazard_line":{"name":"Water Hazard","terms":""},"healthcare":{"name":"Healthcare Facility","terms":"clinic,doctor,disease,health,institution,sick,surgery,wellness"},"healthcare/alternative":{"name":"Alternative Medicine","terms":"acupuncture,anthroposophical,applied kinesiology,aromatherapy,ayurveda,herbalism,homeopathy,hydrotherapy,hypnosis,naturopathy,osteopathy,reflexology,reiki,shiatsu,traditional,tuina,unani"},"healthcare/alternative/chiropractic":{"name":"Chiropractor","terms":"back,pain,spine"},"healthcare/audiologist":{"name":"Audiologist","terms":"ear,hearing,sound"},"healthcare/birthing_center":{"name":"Birthing Center","terms":"baby,childbirth,delivery,labour,labor,pregnancy"},"healthcare/blood_donation":{"name":"Blood Donor Center","terms":"blood bank,blood donation,blood transfusion,apheresis,plasmapheresis,plateletpheresis,stem cell donation"},"healthcare/hospice":{"name":"Hospice","terms":"terminal,illness"},"healthcare/laboratory":{"name":"Medical Laboratory","terms":"medical_laboratory,medical_lab,blood_check"},"healthcare/midwife":{"name":"Midwife","terms":"baby,childbirth,delivery,labour,labor,pregnancy"},"healthcare/occupational_therapist":{"name":"Occupational Therapist","terms":"therapist,therapy"},"healthcare/optometrist":{"name":"Optometrist","terms":"eye,glasses,lasik,lenses,vision"},"healthcare/physiotherapist":{"name":"Physiotherapist","terms":"physical,therapist,therapy"},"healthcare/podiatrist":{"name":"Podiatrist","terms":"foot,feet,nails"},"healthcare/psychotherapist":{"name":"Psychotherapist","terms":"anxiety,counselor,depression,mental health,mind,suicide,therapist,therapy"},"healthcare/rehabilitation":{"name":"Rehabilitation Facility","terms":"rehab,therapist,therapy"},"healthcare/speech_therapist":{"name":"Speech Therapist","terms":"speech,therapist,therapy,voice"},"highway/bus_stop":{"name":"Bus Stop / Platform","terms":""},"highway/bridleway":{"name":"Bridle Path","terms":"bridleway,equestrian,horse"},"highway/bus_guideway":{"name":"Bus Guideway","terms":""},"highway/corridor":{"name":"Indoor Corridor","terms":"gallery,hall,hallway,indoor,passage,passageway"},"highway/crossing-raised":{"name":"Raised Street Crossing","terms":"flat top,hump,speed,slow"},"highway/crossing":{"name":"Street Crossing","terms":""},"highway/crosswalk-raised":{"name":"Raised Pedestrian Crosswalk","terms":"zebra crossing,flat top,hump,speed,slow"},"highway/crosswalk":{"name":"Pedestrian Crosswalk","terms":"zebra crossing"},"highway/cycleway":{"name":"Cycle Path","terms":"bike"},"highway/elevator":{"name":"Elevator","terms":"lift"},"highway/footway":{"name":"Foot Path","terms":"hike,hiking,trackway,trail,walk"},"highway/give_way":{"name":"Yield Sign","terms":"give way,yield,sign"},"highway/living_street":{"name":"Living Street","terms":""},"highway/mini_roundabout":{"name":"Mini-Roundabout","terms":""},"highway/motorway_junction":{"name":"Motorway Junction / Exit","terms":""},"highway/motorway_link":{"name":"Motorway Link","terms":"ramp,on ramp,off ramp"},"highway/motorway":{"name":"Motorway","terms":"autobahn,expressway,freeway,highway,interstate,parkway,thruway,turnpike"},"highway/passing_place":{"name":"Passing Place","terms":"turnout, pullout"},"highway/path":{"name":"Path","terms":"hike,hiking,trackway,trail,walk"},"highway/pedestrian_area":{"name":"Pedestrian Area","terms":"center,centre,plaza,quad,square,walkway"},"highway/pedestrian_line":{"name":"Pedestrian Street","terms":"center,centre,plaza,quad,square,walkway"},"highway/primary_link":{"name":"Primary Link","terms":"ramp,on ramp,off ramp"},"highway/primary":{"name":"Primary Road","terms":""},"highway/raceway":{"name":"Racetrack (Motorsport)","terms":"auto*,formula one,kart,motocross,nascar,race*,track"},"highway/residential":{"name":"Residential Road","terms":""},"highway/rest_area":{"name":"Rest Area","terms":"rest stop"},"highway/road":{"name":"Unknown Road","terms":""},"highway/secondary_link":{"name":"Secondary Link","terms":"ramp,on ramp,off ramp"},"highway/secondary":{"name":"Secondary Road","terms":""},"highway/service":{"name":"Service Road","terms":""},"highway/service/alley":{"name":"Alley","terms":""},"highway/service/drive-through":{"name":"Drive-Through","terms":""},"highway/service/driveway":{"name":"Driveway","terms":""},"highway/service/emergency_access":{"name":"Emergency Access","terms":""},"highway/service/parking_aisle":{"name":"Parking Aisle","terms":""},"highway/services":{"name":"Service Area","terms":"services,travel plaza,service station"},"highway/speed_camera":{"name":"Speed Camera","terms":""},"highway/steps":{"name":"Steps","terms":"stairs,staircase"},"highway/stop":{"name":"Stop Sign","terms":"stop,halt,sign"},"highway/street_lamp":{"name":"Street Lamp","terms":"streetlight,street light,lamp,light,gaslight"},"highway/tertiary_link":{"name":"Tertiary Link","terms":"ramp,on ramp,off ramp"},"highway/tertiary":{"name":"Tertiary Road","terms":""},"highway/track":{"name":"Unmaintained Track Road","terms":"woods road,forest road,logging road,fire road,farm road,agricultural road,ranch road,carriage road,primitive,unmaintained,rut,offroad,4wd,4x4,four wheel drive,atv,quad,jeep,double track,two track"},"highway/traffic_mirror":{"name":"Traffic Mirror","terms":"blind spot,convex,corner,curved,roadside,round,safety,sphere,visibility"},"highway/traffic_signals":{"name":"Traffic Signals","terms":"light,stoplight,traffic light"},"highway/trunk_link":{"name":"Trunk Link","terms":"ramp,on ramp,off ramp"},"highway/trunk":{"name":"Trunk Road","terms":""},"highway/turning_circle":{"name":"Turning Circle","terms":"cul-de-sac"},"highway/turning_loop":{"name":"Turning Loop (Island)","terms":"cul-de-sac"},"highway/unclassified":{"name":"Minor/Unclassified Road","terms":""},"historic":{"name":"Historic Site","terms":""},"historic/archaeological_site":{"name":"Archaeological Site","terms":""},"historic/boundary_stone":{"name":"Boundary Stone","terms":""},"historic/castle":{"name":"Castle","terms":""},"historic/memorial":{"name":"Memorial","terms":"dedicatory,epitaph,remember,remembrance,memory,monument,stolperstein"},"historic/monument":{"name":"Monument","terms":""},"historic/ruins":{"name":"Ruins","terms":""},"historic/tomb":{"name":"Tomb","terms":""},"historic/wayside_cross":{"name":"Wayside Cross","terms":""},"historic/wayside_shrine":{"name":"Wayside Shrine","terms":""},"junction":{"name":"Junction","terms":""},"landuse":{"name":"Land Use","terms":""},"landuse/farm":{"name":"Farmland","terms":""},"landuse/allotments":{"name":"Community Garden","terms":"allotment,garden"},"landuse/aquaculture":{"name":"Aquaculture","terms":"fish farm,crustacean,algae,aquafarming,shrimp farm,oyster farm,mariculture,algaculture"},"landuse/basin":{"name":"Basin","terms":""},"landuse/brownfield":{"name":"Brownfield","terms":""},"landuse/cemetery":{"name":"Cemetery","terms":""},"landuse/churchyard":{"name":"Churchyard","terms":""},"landuse/commercial":{"name":"Commercial Area","terms":""},"landuse/construction":{"name":"Construction","terms":""},"landuse/farmland":{"name":"Farmland","terms":"crop,grow,plant"},"landuse/farmyard":{"name":"Farmyard","terms":"crop,grow,plant"},"landuse/forest":{"name":"Forest","terms":"tree"},"landuse/garages":{"name":"Garage Landuse","terms":""},"landuse/grass":{"name":"Grass","terms":""},"landuse/greenfield":{"name":"Greenfield","terms":""},"landuse/greenhouse_horticulture":{"name":"Greenhouse Horticulture","terms":"flower,greenhouse,horticulture,grow,vivero"},"landuse/harbour":{"name":"Harbor","terms":"boat"},"landuse/industrial":{"name":"Industrial Area","terms":""},"landuse/industrial/scrap_yard":{"name":"Scrap Yard","terms":"car,junk,metal,salvage,scrap,u-pull-it,vehicle,wreck,yard"},"landuse/industrial/slaughterhouse":{"name":"Slaughterhouse","terms":"abattoir,beef,butchery,calf,chicken,cow,killing house,meat,pig,pork,poultry,shambles,stockyard"},"landuse/landfill":{"name":"Landfill","terms":"dump"},"landuse/meadow":{"name":"Meadow","terms":""},"landuse/military":{"name":"Military Area","terms":""},"landuse/military/airfield":{"name":"Military Airfield","terms":"air force,army,base,bomb,fight,force,guard,heli*,jet,marine,navy,plane,troop,war"},"landuse/military/barracks":{"name":"Barracks","terms":"air force,army,base,fight,force,guard,marine,navy,troop,war"},"landuse/military/bunker":{"name":"Military Bunker","terms":"air force,army,base,fight,force,guard,marine,navy,troop,war"},"landuse/military/checkpoint":{"name":"Checkpoint","terms":"air force,army,base,force,guard,marine,navy,troop,war"},"landuse/military/danger_area":{"name":"Danger Area","terms":"air force,army,base,blast,bomb,explo*,force,guard,mine,marine,navy,troop,war"},"landuse/military/naval_base":{"name":"Naval Base","terms":"base,fight,force,guard,marine,navy,ship,sub,troop,war"},"landuse/military/nuclear_explosion_site":{"name":"Nuclear Explosion Site","terms":"atom,blast,bomb,detonat*,nuke,site,test"},"landuse/military/obstacle_course":{"name":"Obstacle Course","terms":"army,base,force,guard,marine,navy,troop,war"},"landuse/military/office":{"name":"Military Office","terms":"air force,army,base,enlist,fight,force,guard,marine,navy,recruit,troop,war"},"landuse/military/range":{"name":"Military Range","terms":"air force,army,base,fight,fire,force,guard,gun,marine,navy,rifle,shoot*,snip*,train,troop,war"},"landuse/military/training_area":{"name":"Training Area","terms":"air force,army,base,fight,fire,force,guard,gun,marine,navy,rifle,shoot*,snip*,train,troop,war"},"landuse/orchard":{"name":"Orchard","terms":"fruit"},"landuse/plant_nursery":{"name":"Plant Nursery","terms":"flower,garden,grow,vivero"},"landuse/quarry":{"name":"Quarry","terms":""},"landuse/railway":{"name":"Railway Corridor","terms":"rail,train,track"},"landuse/recreation_ground":{"name":"Recreation Ground","terms":"playing fields"},"landuse/religious":{"name":"Religious Area","terms":""},"landuse/residential":{"name":"Residential Area","terms":""},"landuse/retail":{"name":"Retail Area","terms":""},"landuse/vineyard":{"name":"Vineyard","terms":"grape,wine"},"leisure":{"name":"Leisure","terms":""},"leisure/adult_gaming_centre":{"name":"Adult Gaming Center","terms":"gambling,slot machine"},"leisure/amusement_arcade":{"name":"Amusement Arcade","terms":"pay-to-play games,video games,driving simulators,pinball machines"},"leisure/beach_resort":{"name":"Beach Resort","terms":""},"leisure/bird_hide":{"name":"Bird Hide","terms":"machan,ornithology"},"leisure/bowling_alley":{"name":"Bowling Alley","terms":"bowling center"},"leisure/common":{"name":"Common","terms":"open space"},"leisure/dance":{"name":"Dance Hall","terms":"ballroom,jive,swing,tango,waltz"},"leisure/dancing_school":{"name":"Dance School","terms":"jive,swing,tango,waltz,dance teaching"},"leisure/dog_park":{"name":"Dog Park","terms":""},"leisure/firepit":{"name":"Firepit","terms":"fireplace,campfire"},"leisure/fitness_centre":{"name":"Gym / Fitness Center","terms":"health,gym,leisure,studio"},"leisure/fitness_centre/yoga":{"name":"Yoga Studio","terms":"studio"},"leisure/fitness_station":{"name":"Outdoor Fitness Station","terms":"exercise,fitness,gym,trim trail"},"leisure/fitness_station/balance_beam":{"name":"Exercise Balance Beam","terms":"balance,exercise,fitness,gym,trim trail"},"leisure/fitness_station/box":{"name":"Exercise Box","terms":"box,exercise,fitness,gym,jump,trim trail"},"leisure/fitness_station/horizontal_bar":{"name":"Exercise Horizontal Bar","terms":"bar,chinup,chin up,exercise,fitness,gym,pullup,pull up,trim trail"},"leisure/fitness_station/horizontal_ladder":{"name":"Exercise Monkey Bars","terms":"bar,chinup,chin up,exercise,fitness,gym,ladder,monkey bars,pullup,pull up,trim trail"},"leisure/fitness_station/hyperextension":{"name":"Hyperextension Station","terms":"back,exercise,extension,fitness,gym,roman chair,trim trail"},"leisure/fitness_station/parallel_bars":{"name":"Parallel Bars","terms":"bar,dip,exercise,fitness,gym,trim trail"},"leisure/fitness_station/push-up":{"name":"Push-Up Station","terms":"bar,exercise,fitness,gym,pushup,push up,trim trail"},"leisure/fitness_station/rings":{"name":"Exercise Rings","terms":"exercise,fitness,gym,muscle up,pullup,pull up,trim trail"},"leisure/fitness_station/sign":{"name":"Exercise Instruction Sign","terms":"exercise,fitness,gym,trim trail"},"leisure/fitness_station/sit-up":{"name":"Sit-Up Station","terms":"crunch,exercise,fitness,gym,situp,sit up,trim trail"},"leisure/fitness_station/stairs":{"name":"Exercise Stairs","terms":"exercise,fitness,gym,steps,trim trail"},"leisure/garden":{"name":"Garden","terms":""},"leisure/golf_course":{"name":"Golf Course","terms":"links"},"leisure/hackerspace":{"name":"Hackerspace","terms":"makerspace,hackspace,hacklab"},"leisure/horse_riding":{"name":"Horseback Riding Facility","terms":"equestrian,stable"},"leisure/ice_rink":{"name":"Ice Rink","terms":"hockey,skating,curling"},"leisure/marina":{"name":"Marina","terms":"boat"},"leisure/miniature_golf":{"name":"Miniature Golf","terms":"crazy golf,mini golf,putt-putt"},"leisure/nature_reserve":{"name":"Nature Reserve","terms":"protected,wildlife"},"leisure/outdoor_seating":{"name":"Outdoor Seating Area","terms":"al fresco,beer garden,dining,cafe,restaurant,pub,bar,patio"},"leisure/park":{"name":"Park","terms":"esplanade,estate,forest,garden,grass,green,grounds,lawn,lot,meadow,parkland,place,playground,plaza,pleasure garden,recreation area,square,tract,village green,woodland"},"leisure/picnic_table":{"name":"Picnic Table","terms":"bench"},"leisure/pitch":{"name":"Sport Pitch","terms":"field"},"leisure/pitch/american_football":{"name":"American Football Field","terms":""},"leisure/pitch/baseball":{"name":"Baseball Diamond","terms":""},"leisure/pitch/basketball":{"name":"Basketball Court","terms":""},"leisure/pitch/beachvolleyball":{"name":"Beach Volleyball Court","terms":"volleyball"},"leisure/pitch/boules":{"name":"Boules/Bocce Court","terms":"bocce,lyonnaise,pétanque"},"leisure/pitch/bowls":{"name":"Bowling Green","terms":""},"leisure/pitch/cricket":{"name":"Cricket Field","terms":""},"leisure/pitch/equestrian":{"name":"Riding Arena","terms":"dressage,equestrian,horse,horseback,riding"},"leisure/pitch/rugby_league":{"name":"Rugby League Field","terms":""},"leisure/pitch/rugby_union":{"name":"Rugby Union Field","terms":""},"leisure/pitch/skateboard":{"name":"Skate Park","terms":""},"leisure/pitch/soccer":{"name":"Soccer Field","terms":"football"},"leisure/pitch/table_tennis":{"name":"Ping Pong Table","terms":"table tennis,ping pong"},"leisure/pitch/tennis":{"name":"Tennis Court","terms":""},"leisure/pitch/volleyball":{"name":"Volleyball Court","terms":""},"leisure/playground":{"name":"Playground","terms":"jungle gym,play area"},"leisure/resort":{"name":"Resort","terms":""},"leisure/running_track":{"name":"Racetrack (Running)","terms":"race*,running,sprint,track"},"leisure/sauna":{"name":"Sauna","terms":""},"leisure/slipway":{"name":"Slipway","terms":"boat launch,boat ramp"},"leisure/sports_centre":{"name":"Sports Center / Complex","terms":""},"leisure/sports_centre/swimming":{"name":"Swimming Pool Facility","terms":"dive,water"},"leisure/stadium":{"name":"Stadium","terms":""},"leisure/swimming_pool":{"name":"Swimming Pool","terms":"dive,water"},"leisure/track":{"name":"Racetrack (Non-Motorsport)","terms":"cycle,dog,greyhound,horse,race*,track"},"leisure/water_park":{"name":"Water Park","terms":"swim,pool,dive"},"line":{"name":"Line","terms":""},"man_made":{"name":"Man Made","terms":""},"man_made/embankment":{"name":"Embankment","terms":""},"man_made/adit":{"name":"Adit","terms":"entrance,underground,mine,cave"},"man_made/antenna":{"name":"Antenna","terms":"broadcast,cell phone,cell,communication,mobile phone,radio,television,transmission,tv"},"man_made/breakwater":{"name":"Breakwater","terms":""},"man_made/bridge":{"name":"Bridge","terms":""},"man_made/chimney":{"name":"Chimney","terms":""},"man_made/crane":{"name":"Crane","terms":""},"man_made/cutline":{"name":"Cut line","terms":""},"man_made/flagpole":{"name":"Flagpole","terms":""},"man_made/gasometer":{"name":"Gasometer","terms":"gas holder"},"man_made/groyne":{"name":"Groyne","terms":""},"man_made/lighthouse":{"name":"Lighthouse","terms":""},"man_made/mast":{"name":"Mast","terms":"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/monitoring_station":{"name":"Monitoring Station","terms":"weather,earthquake,seismology,air,gps"},"man_made/observation":{"name":"Observation Tower","terms":"lookout tower,fire tower"},"man_made/observatory":{"name":"Observatory","terms":"astronomical,meteorological"},"man_made/petroleum_well":{"name":"Oil Well","terms":"drilling rig,oil derrick,oil drill,oil horse,oil rig,oil pump,petroleum well,pumpjack"},"man_made/pier":{"name":"Pier","terms":"dock,jetty"},"man_made/pipeline":{"name":"Pipeline","terms":""},"man_made/pumping_station":{"name":"Pumping Station","terms":""},"man_made/silo":{"name":"Silo","terms":"grain,corn,wheat"},"man_made/storage_tank":{"name":"Storage Tank","terms":"water,oil,gas,petrol"},"man_made/surveillance_camera":{"name":"Surveillance Camera","terms":"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/surveillance":{"name":"Surveillance","terms":"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/survey_point":{"name":"Survey Point","terms":"trig point,triangulation pillar,trigonometrical station"},"man_made/tower":{"name":"Tower","terms":""},"man_made/wastewater_plant":{"name":"Wastewater Plant","terms":"sewage*,water treatment plant,reclamation plant"},"man_made/water_tower":{"name":"Water Tower","terms":""},"man_made/water_well":{"name":"Water Well","terms":""},"man_made/water_works":{"name":"Water Works","terms":""},"man_made/watermill":{"name":"Watermill","terms":"water,wheel,mill"},"man_made/windmill":{"name":"Windmill","terms":"wind,wheel,mill"},"man_made/works":{"name":"Factory","terms":"assembly,build,brewery,car,plant,plastic,processing,manufacture,refinery"},"manhole":{"name":"Manhole","terms":"cover,hole,sewer,sewage,telecom"},"manhole/drain":{"name":"Storm Drain","terms":"cover,drain,hole,rain,sewer,sewage,storm"},"manhole/telecom":{"name":"Telecom Manhole","terms":"cover,phone,hole,telecom,telephone,bt"},"natural":{"name":"Natural","terms":""},"natural/bare_rock":{"name":"Bare Rock","terms":"rock"},"natural/bay":{"name":"Bay","terms":""},"natural/beach":{"name":"Beach","terms":"shore"},"natural/cave_entrance":{"name":"Cave Entrance","terms":"cavern,hollow,grotto,shelter,cavity"},"natural/cliff":{"name":"Cliff","terms":"escarpment"},"natural/coastline":{"name":"Coastline","terms":"shore"},"natural/fell":{"name":"Fell","terms":""},"natural/glacier":{"name":"Glacier","terms":""},"natural/grassland":{"name":"Grassland","terms":"prairie,savanna"},"natural/heath":{"name":"Heath","terms":""},"natural/mud":{"name":"Mud","terms":"wetland"},"natural/peak":{"name":"Peak","terms":"acme,aiguille,alp,climax,crest,crown,hill,mount,mountain,pinnacle,summit,tip,top"},"natural/ridge":{"name":"Ridge","terms":"crest"},"natural/saddle":{"name":"Saddle","terms":"pass,mountain pass,top"},"natural/sand":{"name":"Sand","terms":"desert"},"natural/scree":{"name":"Scree","terms":"loose rocks"},"natural/scrub":{"name":"Scrub","terms":"bush,shrubs"},"natural/spring":{"name":"Spring","terms":""},"natural/tree_row":{"name":"Tree row","terms":""},"natural/tree":{"name":"Tree","terms":""},"natural/volcano":{"name":"Volcano","terms":"mountain,crater"},"natural/water":{"name":"Water","terms":""},"natural/water/lake":{"name":"Lake","terms":"lakelet,loch,mere"},"natural/water/pond":{"name":"Pond","terms":"lakelet,millpond,tarn,pool,mere"},"natural/water/reservoir":{"name":"Reservoir","terms":""},"natural/wetland":{"name":"Wetland","terms":"bog,marsh,reedbed,swamp,tidalflat"},"natural/wood":{"name":"Wood","terms":"tree"},"noexit/yes":{"name":"No Exit","terms":"no exit,road end,dead end"},"office":{"name":"Office","terms":""},"office/administrative":{"name":"Administrative Office","terms":""},"office/physician":{"name":"Physician","terms":""},"office/travel_agent":{"name":"Travel Agency","terms":""},"office/accountant":{"name":"Accountant Office","terms":""},"office/adoption_agency":{"name":"Adoption Agency","terms":""},"office/advertising_agency":{"name":"Advertising Agency","terms":"ad,ad agency,advert agency,advertising,marketing"},"office/architect":{"name":"Architect Office","terms":""},"office/association":{"name":"Nonprofit Organization Office","terms":"association,non-profit,nonprofit,organization,society"},"office/charity":{"name":"Charity Office","terms":"charitable organization"},"office/company":{"name":"Corporate Office","terms":""},"office/coworking":{"name":"Coworking Space","terms":"coworking,office"},"office/educational_institution":{"name":"Educational Institution","terms":""},"office/employment_agency":{"name":"Employment Agency","terms":"job"},"office/energy_supplier":{"name":"Energy Supplier Office","terms":"electricity,energy company,energy utility,gas utility"},"office/estate_agent":{"name":"Real Estate Office","terms":""},"office/financial":{"name":"Financial Office","terms":""},"office/forestry":{"name":"Forestry Office","terms":"forest,ranger"},"office/foundation":{"name":"Foundation Office","terms":""},"office/government":{"name":"Government Office","terms":""},"office/government/register_office":{"name":"Register Office","terms":"clerk,marriage,death,birth,certificate"},"office/government/tax":{"name":"Tax and Revenue Office","terms":"fiscal authorities,revenue office,tax office"},"office/guide":{"name":"Tour Guide Office","terms":"dive guide,mountain guide,tour guide"},"office/insurance":{"name":"Insurance Office","terms":""},"office/it":{"name":"Information Technology Office","terms":"computer,information,software,technology"},"office/lawyer":{"name":"Law Office","terms":""},"office/lawyer/notary":{"name":"Notary Office","terms":""},"office/moving_company":{"name":"Moving Company Office","terms":"relocation"},"office/newspaper":{"name":"Newspaper Office","terms":""},"office/ngo":{"name":"NGO Office","terms":"ngo,non government,non-government,organization,organisation"},"office/notary":{"name":"Notary Office","terms":"clerk,deeds,estate,signature,wills"},"office/political_party":{"name":"Political Party","terms":""},"office/private_investigator":{"name":"Private Investigator Office","terms":"PI,private eye,private detective"},"office/quango":{"name":"Quasi-NGO Office","terms":"ngo,non government,non-government,organization,organisation,quasi autonomous,quasi-autonomous"},"office/research":{"name":"Research Office","terms":""},"office/surveyor":{"name":"Surveyor Office","terms":""},"office/tax_advisor":{"name":"Tax Advisor Office","terms":"tax,tax consultant"},"office/telecommunication":{"name":"Telecom Office","terms":"communication,internet,phone,voice"},"office/therapist":{"name":"Therapist Office","terms":"therapy"},"office/water_utility":{"name":"Water Utility Office","terms":"water board,utility"},"piste":{"name":"Piste/Ski Trail","terms":"ski,sled,sleigh,snowboard,nordic,downhill,snowmobile"},"place/farm":{"name":"Farm","terms":""},"place/city":{"name":"City","terms":""},"place/hamlet":{"name":"Hamlet","terms":""},"place/island":{"name":"Island","terms":"archipelago,atoll,bar,cay,isle,islet,key,reef"},"place/islet":{"name":"Islet","terms":"archipelago,atoll,bar,cay,isle,islet,key,reef"},"place/isolated_dwelling":{"name":"Isolated Dwelling","terms":""},"place/locality":{"name":"Locality","terms":""},"place/neighbourhood":{"name":"Neighborhood","terms":"neighbourhood"},"place/plot":{"name":"Plot","terms":"tract,land,lot,parcel"},"place/quarter":{"name":"Sub-Borough / Quarter","terms":"boro,borough,quarter"},"place/square":{"name":"Square","terms":""},"place/suburb":{"name":"Borough / Suburb","terms":"boro,borough,quarter"},"place/town":{"name":"Town","terms":""},"place/village":{"name":"Village","terms":""},"playground/balance_beam":{"name":"Play Balance Beam","terms":""},"playground/basket_spinner":{"name":"Basket Spinner","terms":"basket rotator"},"playground/basket_swing":{"name":"Basket Swing","terms":""},"playground/climbing_frame":{"name":"Climbing Frame","terms":""},"playground/cushion":{"name":"Bouncy Cushion","terms":""},"playground/horizontal_bar":{"name":"Play Horizontal Bar","terms":"high bar"},"playground/rocker":{"name":"Spring Rider","terms":"spring rocker,springy rocker"},"playground/roundabout":{"name":"Play Roundabout","terms":"merry-go-round"},"playground/sandpit":{"name":"Sandpit","terms":""},"playground/seesaw":{"name":"Seesaw","terms":""},"playground/slide":{"name":"Slide","terms":""},"playground/structure":{"name":"Play Structure","terms":""},"playground/swing":{"name":"Swing","terms":""},"playground/zipwire":{"name":"Zip Wire","terms":""},"point":{"name":"Point","terms":""},"power/sub_station":{"name":"Substation","terms":""},"power/generator":{"name":"Power Generator","terms":"hydro,solar,turbine,wind"},"power/generator/source_nuclear":{"name":"Nuclear Reactor","terms":"fission,generator,nuclear,nuke,reactor"},"power/generator/source_wind":{"name":"Wind Turbine","terms":"generator,turbine,windmill,wind"},"power/line":{"name":"Power Line","terms":""},"power/minor_line":{"name":"Minor Power Line","terms":""},"power/plant":{"name":"Power Station Grounds","terms":"coal,gas,generat*,hydro,nuclear,power,station"},"power/pole":{"name":"Power Pole","terms":""},"power/substation":{"name":"Substation","terms":""},"power/switch":{"name":"Power Switch","terms":""},"power/tower":{"name":"High-Voltage Tower","terms":""},"power/transformer":{"name":"Transformer","terms":""},"public_transport/linear_platform_aerialway":{"name":"Aerialway Stop / Platform","terms":"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/linear_platform_bus":{"name":"Bus Stop / Platform","terms":"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/linear_platform_ferry":{"name":"Ferry Stop / Platform","terms":"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/linear_platform_light_rail":{"name":"Light Rail Stop / Platform","terms":"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/linear_platform_monorail":{"name":"Monorail Stop / Platform","terms":"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/linear_platform_subway":{"name":"Subway Stop / Platform","terms":"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/linear_platform_train":{"name":"Train Stop / Platform","terms":"platform,public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/linear_platform_tram":{"name":"Tram Stop / Platform","terms":"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/linear_platform_trolleybus":{"name":"Trolleybus Stop / Platform","terms":"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/linear_platform":{"name":"Transit Stop / Platform","terms":"platform,public transit,public transportation,transit,transportation"},"public_transport/platform_aerialway":{"name":"Aerialway Stop / Platform","terms":"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/platform_bus":{"name":"Bus Stop / Platform","terms":"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/platform_ferry":{"name":"Ferry Stop / Platform","terms":"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/platform_light_rail":{"name":"Light Rail Stop / Platform","terms":"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/platform_monorail":{"name":"Monorail Stop / Platform","terms":"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/platform_subway":{"name":"Subway Stop / Platform","terms":"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/platform_train":{"name":"Train Stop / Platform","terms":"platform,public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/platform_tram":{"name":"Tram Stop / Platform","terms":"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/platform_trolleybus":{"name":"Trolleybus Stop / Platform","terms":"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/platform":{"name":"Transit Stop / Platform","terms":"platform,public transit,public transportation,transit,transportation"},"public_transport/station_aerialway":{"name":"Aerialway Station","terms":"aerialway,cable car,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_bus":{"name":"Bus Station / Terminal","terms":"bus,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_ferry":{"name":"Ferry Station / Terminal","terms":"boat,dock,ferry,pier,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_light_rail":{"name":"Light Rail Station","terms":"electric,light rail,public transit,public transportation,rail,station,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_monorail":{"name":"Monorail Station","terms":"monorail,public transit,public transportation,rail,station,terminal,transit,transportation"},"public_transport/station_subway":{"name":"Subway Station","terms":"metro,public transit,public transportation,rail,station,subway,terminal,track,transit,transportation,underground"},"public_transport/station_train_halt":{"name":"Train Station (Halt / Request)","terms":"halt,public transit,public transportation,rail,station,track,train,transit,transportation,whistle stop"},"public_transport/station_train":{"name":"Train Station","terms":"public transit,public transportation,rail,station,terminal,track,train,transit,transportation"},"public_transport/station_tram":{"name":"Tram Station","terms":"electric,light rail,public transit,public transportation,rail,station,streetcar,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_trolleybus":{"name":"Trolleybus Station / Terminal","terms":"bus,electric,public transit,public transportation,station,streetcar,terminal,trackless,tram,trolley,transit,transportation"},"public_transport/station":{"name":"Transit Station","terms":"public transit,public transportation,station,terminal,transit,transportation"},"public_transport/stop_area":{"name":"Transit Stop Area","terms":""},"public_transport/stop_position_aerialway":{"name":"Aerialway Stopping Location","terms":"aerialway,cable car,public transit,public transportation,transit,transportation"},"public_transport/stop_position_bus":{"name":"Bus Stopping Location","terms":"bus,public transit,public transportation,transit,transportation"},"public_transport/stop_position_ferry":{"name":"Ferry Stopping Location","terms":"boat,dock,ferry,pier,public transit,public transportation,transit,transportation"},"public_transport/stop_position_light_rail":{"name":"Light Rail Stopping Location","terms":"electric,light rail,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/stop_position_monorail":{"name":"Monorail Stopping Location","terms":"monorail,public transit,public transportation,rail,transit,transportation"},"public_transport/stop_position_subway":{"name":"Subway Stopping Location","terms":"metro,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/stop_position_train":{"name":"Train Stopping Location","terms":"public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/stop_position_tram":{"name":"Tram Stopping Location","terms":"electric,light rail,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/stop_position_trolleybus":{"name":"Trolleybus Stopping Location","terms":"bus,electric,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/stop_position":{"name":"Transit Stopping Location","terms":"public transit,public transportation,transit,transportation"},"railway/halt":{"name":"Train Station (Halt / Request)","terms":"break,interrupt,rest,wait,interruption"},"railway/platform":{"name":"Train Stop / Platform","terms":""},"railway/station":{"name":"Train Station","terms":"train station,station"},"railway/tram_stop":{"name":"Tram Stopping Position","terms":"light rail,streetcar,tram,trolley"},"railway/abandoned":{"name":"Abandoned Railway","terms":""},"railway/buffer_stop":{"name":"Buffer Stop","terms":"stop,halt,buffer"},"railway/crossing":{"name":"Railway Crossing (Path)","terms":"crossing,pedestrian crossing,railroad crossing,level crossing,grade crossing,path through railroad,train crossing"},"railway/derail":{"name":"Railway Derailer","terms":"derailer"},"railway/disused":{"name":"Disused Railway","terms":""},"railway/funicular":{"name":"Funicular","terms":"venicular,cliff railway,cable car,cable railway,funicular railway"},"railway/level_crossing":{"name":"Railway Crossing (Road)","terms":"crossing,railroad crossing,level crossing,grade crossing,road through railroad,train crossing"},"railway/light_rail":{"name":"Light Rail","terms":"light rail,streetcar,trolley"},"railway/milestone":{"name":"Railway Milestone","terms":"milestone,marker"},"railway/miniature":{"name":"Miniature Railway","terms":"rideable miniature railway,narrow gauge railway,minimum gauge railway"},"railway/monorail":{"name":"Monorail","terms":""},"railway/narrow_gauge":{"name":"Narrow Gauge Rail","terms":"narrow gauge railway,narrow gauge railroad"},"railway/rail":{"name":"Rail","terms":""},"railway/signal":{"name":"Railway Signal","terms":"signal,lights"},"railway/subway_entrance":{"name":"Subway Entrance","terms":"metro,transit"},"railway/subway":{"name":"Subway","terms":"metro,transit"},"railway/switch":{"name":"Railway Switch","terms":"switch,points"},"railway/train_wash":{"name":"Train Wash","terms":"wash,clean"},"railway/tram":{"name":"Tram","terms":"light rail,streetcar,tram,trolley"},"relation":{"name":"Relation","terms":""},"route/ferry":{"name":"Ferry Route","terms":""},"shop":{"name":"Shop","terms":""},"shop/fishmonger":{"name":"Fishmonger","terms":""},"shop/furnace":{"name":"Furnace Store","terms":"oven,stove"},"shop/vacant":{"name":"Vacant Shop","terms":""},"shop/agrarian":{"name":"Farm Supply Shop","terms":"agricultural inputs,agricultural machines,seeds,pesticides,fertilizer,agricultural tools"},"shop/alcohol":{"name":"Liquor Store","terms":"alcohol,beer,booze,wine"},"shop/anime":{"name":"Anime Shop","terms":"manga,japan,cosplay,figurine,dakimakura"},"shop/antiques":{"name":"Antiques Shop","terms":""},"shop/appliance":{"name":"Appliance Store","terms":"air conditioner,appliance,dishwasher,dryer,freezer,fridge,grill,kitchen,oven,refrigerator,stove,washer,washing machine"},"shop/art":{"name":"Art Store","terms":"art*,exhibit*,gallery"},"shop/baby_goods":{"name":"Baby Goods Store","terms":""},"shop/bag":{"name":"Bag/Luggage Store","terms":"handbag,purse"},"shop/bakery":{"name":"Bakery","terms":""},"shop/bathroom_furnishing":{"name":"Bathroom Furnishing Store","terms":""},"shop/beauty":{"name":"Beauty Shop","terms":"spa,salon,tanning"},"shop/beauty/nails":{"name":"Nail Salon","terms":"manicure,pedicure"},"shop/beauty/tanning":{"name":"Tanning Salon","terms":""},"shop/bed":{"name":"Bedding/Mattress Store","terms":""},"shop/beverages":{"name":"Beverage Store","terms":""},"shop/bicycle":{"name":"Bicycle Shop","terms":"bike,repair"},"shop/bookmaker":{"name":"Bookmaker","terms":"betting"},"shop/books":{"name":"Book Store","terms":""},"shop/boutique":{"name":"Boutique","terms":""},"shop/butcher":{"name":"Butcher","terms":"meat"},"shop/candles":{"name":"Candle Shop","terms":""},"shop/car_parts":{"name":"Car Parts Store","terms":"auto"},"shop/car_repair":{"name":"Car Repair Shop","terms":"auto,garage,service"},"shop/car":{"name":"Car Dealership","terms":"auto"},"shop/carpet":{"name":"Carpet Store","terms":"rug"},"shop/charity":{"name":"Charity Store","terms":"thrift,op shop,nonprofit"},"shop/cheese":{"name":"Cheese Store","terms":""},"shop/chemist":{"name":"Drugstore","terms":"med*,drug*,gift"},"shop/chocolate":{"name":"Chocolate Store","terms":""},"shop/clothes":{"name":"Clothing Store","terms":""},"shop/coffee":{"name":"Coffee Store","terms":""},"shop/computer":{"name":"Computer Store","terms":""},"shop/confectionery":{"name":"Candy Store","terms":"sweet"},"shop/convenience":{"name":"Convenience Store","terms":""},"shop/copyshop":{"name":"Copy Store","terms":""},"shop/cosmetics":{"name":"Cosmetics Store","terms":""},"shop/craft":{"name":"Arts and Crafts Store","terms":"art*,paint*,frame"},"shop/curtain":{"name":"Curtain Store","terms":"drape*,window"},"shop/dairy":{"name":"Dairy Store","terms":"milk,egg,cheese"},"shop/deli":{"name":"Deli","terms":"lunch,meat,sandwich"},"shop/department_store":{"name":"Department Store","terms":""},"shop/doityourself":{"name":"DIY Store","terms":""},"shop/dry_cleaning":{"name":"Dry Cleaner","terms":""},"shop/e-cigarette":{"name":"E-Cigarette Shop","terms":"electronic,vapor"},"shop/electronics":{"name":"Electronics Store","terms":"appliance,audio,blueray,camera,computer,dvd,home theater,radio,speaker,tv,video"},"shop/erotic":{"name":"Erotic Store","terms":"sex,porn"},"shop/fabric":{"name":"Fabric Store","terms":"sew"},"shop/farm":{"name":"Produce Stand","terms":"farm shop,farm stand"},"shop/fashion":{"name":"Fashion Store","terms":""},"shop/florist":{"name":"Florist","terms":"flower"},"shop/frame":{"name":"Framing Shop","terms":"art*,paint*,photo*,frame"},"shop/funeral_directors":{"name":"Funeral Home","terms":"undertaker,memorial home"},"shop/furniture":{"name":"Furniture Store","terms":"chair,sofa,table"},"shop/garden_centre":{"name":"Garden Center","terms":"landscape,mulch,shrub,tree"},"shop/gas":{"name":"Bottled Gas Shop","terms":"cng,lpg,natural gas,propane,refill,tank"},"shop/gift":{"name":"Gift Shop","terms":"souvenir"},"shop/greengrocer":{"name":"Greengrocer","terms":"fruit,vegetable"},"shop/hairdresser":{"name":"Hairdresser","terms":"barber"},"shop/hardware":{"name":"Hardware Store","terms":""},"shop/health_food":{"name":"Health Food Shop","terms":"wholefood,vitamins,vegetarian,vegan"},"shop/hearing_aids":{"name":"Hearing Aids Store","terms":""},"shop/herbalist":{"name":"Herbalist","terms":""},"shop/hifi":{"name":"Hifi Store","terms":"stereo,video"},"shop/houseware":{"name":"Houseware Store","terms":"home,household"},"shop/interior_decoration":{"name":"Interior Decoration Store","terms":""},"shop/jewelry":{"name":"Jeweler","terms":"diamond,gem,ring"},"shop/kiosk":{"name":"Kiosk","terms":""},"shop/kitchen":{"name":"Kitchen Design Store","terms":""},"shop/laundry":{"name":"Laundry","terms":""},"shop/leather":{"name":"Leather Store","terms":""},"shop/locksmith":{"name":"Locksmith","terms":"key,lockpick"},"shop/lottery":{"name":"Lottery Shop","terms":""},"shop/mall":{"name":"Mall","terms":"shopping"},"shop/massage":{"name":"Massage Shop","terms":""},"shop/medical_supply":{"name":"Medical Supply Store","terms":""},"shop/mobile_phone":{"name":"Mobile Phone Store","terms":""},"shop/money_lender":{"name":"Money Lender","terms":""},"shop/motorcycle":{"name":"Motorcycle Dealership","terms":"bike"},"shop/music":{"name":"Music Store","terms":"CD,vinyl"},"shop/musical_instrument":{"name":"Musical Instrument Store","terms":"guitar"},"shop/newsagent":{"name":"Newspaper/Magazine Shop","terms":""},"shop/nutrition_supplements":{"name":"Nutrition Supplements Store","terms":""},"shop/optician":{"name":"Optician","terms":"eye,glasses"},"shop/organic":{"name":"Organic Goods Store","terms":""},"shop/outdoor":{"name":"Outdoors Store","terms":"camping,climbing,hiking"},"shop/paint":{"name":"Paint Store","terms":""},"shop/pastry":{"name":"Pastry Shop","terms":"patisserie,cake shop,cakery"},"shop/pawnbroker":{"name":"Pawn Shop","terms":""},"shop/perfumery":{"name":"Perfume Store","terms":""},"shop/pet_grooming":{"name":"Pet Grooming Store","terms":"dog"},"shop/pet":{"name":"Pet Store","terms":"animal,cat,dog,fish,kitten,puppy,reptile"},"shop/photo":{"name":"Photography Store","terms":"camera,film"},"shop/pyrotechnics":{"name":"Fireworks Store","terms":""},"shop/radiotechnics":{"name":"Radio/Electronic Component Store","terms":""},"shop/religion":{"name":"Religious Store","terms":""},"shop/scuba_diving":{"name":"Scuba Diving Shop","terms":""},"shop/seafood":{"name":"Seafood Shop","terms":"fishmonger"},"shop/second_hand":{"name":"Consignment/Thrift Store","terms":"secondhand,second hand,resale,thrift,used"},"shop/shoes":{"name":"Shoe Store","terms":""},"shop/sports":{"name":"Sporting Goods Store","terms":""},"shop/stationery":{"name":"Stationery Store","terms":"card,paper"},"shop/storage_rental":{"name":"Storage Rental","terms":""},"shop/supermarket":{"name":"Supermarket","terms":"grocery,store,shop"},"shop/tailor":{"name":"Tailor","terms":"clothes,suit"},"shop/tattoo":{"name":"Tattoo Parlor","terms":""},"shop/tea":{"name":"Tea Store","terms":""},"shop/ticket":{"name":"Ticket Seller","terms":""},"shop/tiles":{"name":"Tile Shop","terms":""},"shop/tobacco":{"name":"Tobacco Shop","terms":""},"shop/toys":{"name":"Toy Store","terms":""},"shop/trade":{"name":"Trade Shop","terms":""},"shop/travel_agency":{"name":"Travel Agency","terms":""},"shop/tyres":{"name":"Tire Store","terms":""},"shop/vacuum_cleaner":{"name":"Vacuum Cleaner Store","terms":""},"shop/variety_store":{"name":"Variety Store","terms":""},"shop/video_games":{"name":"Video Game Store","terms":""},"shop/video":{"name":"Video Store","terms":"DVD"},"shop/watches":{"name":"Watches Shop","terms":""},"shop/water_sports":{"name":"Watersport/Swim Shop","terms":""},"shop/weapons":{"name":"Weapon Shop","terms":"ammo,gun,knife,knives"},"shop/wholesale":{"name":"Wholesale Store","terms":"warehouse club,cash and carry"},"shop/window_blind":{"name":"Window Blind Store","terms":""},"shop/wine":{"name":"Wine Shop","terms":""},"tourism":{"name":"Tourism","terms":""},"tourism/alpine_hut":{"name":"Alpine Hut","terms":"climbing hut"},"tourism/apartment":{"name":"Guest Apartment / Condo","terms":""},"tourism/aquarium":{"name":"Aquarium","terms":"fish,sea,water"},"tourism/artwork":{"name":"Artwork","terms":"mural,sculpture,statue"},"tourism/attraction":{"name":"Tourist Attraction","terms":""},"tourism/camp_site":{"name":"Campground","terms":"tent,rv"},"tourism/caravan_site":{"name":"RV Park","terms":"Motor Home,Camper"},"tourism/chalet":{"name":"Holiday Cottage","terms":"holiday,holiday cottage,holiday home,vacation,vacation home"},"tourism/gallery":{"name":"Art Gallery","terms":"art*,exhibit*,paint*,photo*,sculpt*"},"tourism/guest_house":{"name":"Guest House","terms":"B&B,Bed and Breakfast"},"tourism/hostel":{"name":"Hostel","terms":""},"tourism/hotel":{"name":"Hotel","terms":""},"tourism/information":{"name":"Information","terms":""},"tourism/information/board":{"name":"Information Board","terms":""},"tourism/information/guidepost":{"name":"Guidepost","terms":"signpost"},"tourism/information/map":{"name":"Map","terms":""},"tourism/information/office":{"name":"Tourist Information Office","terms":""},"tourism/motel":{"name":"Motel","terms":""},"tourism/museum":{"name":"Museum","terms":"art*,exhibit*,gallery,foundation,hall,institution,paint*,photo*,sculpt*"},"tourism/picnic_site":{"name":"Picnic Site","terms":"camp"},"tourism/theme_park":{"name":"Theme Park","terms":""},"tourism/trail_riding_station":{"name":"Trail Riding Station","terms":""},"tourism/viewpoint":{"name":"Viewpoint","terms":""},"tourism/wilderness_hut":{"name":"Wilderness Hut","terms":"wilderness hut,backcountry hut,bothy"},"tourism/zoo":{"name":"Zoo","terms":"animal"},"traffic_calming":{"name":"Traffic Calming","terms":"bump,hump,slow,speed"},"traffic_calming/bump":{"name":"Speed Bump","terms":"hump,speed,slow"},"traffic_calming/chicane":{"name":"Traffic Chicane","terms":"driveway link,speed,slow"},"traffic_calming/choker":{"name":"Traffic Choker","terms":"speed,slow"},"traffic_calming/cushion":{"name":"Speed Cushion","terms":"bump,hump,speed,slow"},"traffic_calming/dip":{"name":"Dip","terms":"speed,slow"},"traffic_calming/hump":{"name":"Speed Hump","terms":"bump,speed,slow"},"traffic_calming/island":{"name":"Traffic Island","terms":"circle,roundabout,slow"},"traffic_calming/rumble_strip":{"name":"Rumble Strip","terms":"audible lines,sleeper lines,growlers"},"traffic_calming/table":{"name":"Speed Table","terms":"flat top,hump,speed,slow"},"type/multipolygon":{"name":"Multipolygon","terms":""},"type/boundary":{"name":"Boundary","terms":""},"type/boundary/administrative":{"name":"Administrative Boundary","terms":""},"type/restriction":{"name":"Restriction","terms":""},"type/restriction/no_left_turn":{"name":"No Left Turn","terms":""},"type/restriction/no_right_turn":{"name":"No Right Turn","terms":""},"type/restriction/no_straight_on":{"name":"No Straight On","terms":""},"type/restriction/no_u_turn":{"name":"No U-turn","terms":""},"type/restriction/only_left_turn":{"name":"Only Left Turn","terms":""},"type/restriction/only_right_turn":{"name":"Only Right Turn","terms":""},"type/restriction/only_straight_on":{"name":"Only Straight On","terms":""},"type/restriction/only_u_turn":{"name":"Only U-turn","terms":""},"type/route_master":{"name":"Route Master","terms":""},"type/route":{"name":"Route","terms":""},"type/route/bicycle":{"name":"Cycle Route","terms":""},"type/route/bus":{"name":"Bus Route","terms":""},"type/route/detour":{"name":"Detour Route","terms":""},"type/route/ferry":{"name":"Ferry Route","terms":""},"type/route/foot":{"name":"Foot Route","terms":""},"type/route/hiking":{"name":"Hiking Route","terms":""},"type/route/horse":{"name":"Riding Route","terms":""},"type/route/light_rail":{"name":"Light Rail Route","terms":""},"type/route/pipeline":{"name":"Pipeline Route","terms":""},"type/route/piste":{"name":"Piste/Ski Route","terms":""},"type/route/power":{"name":"Power Route","terms":""},"type/route/road":{"name":"Road Route","terms":""},"type/route/subway":{"name":"Subway Route","terms":""},"type/route/train":{"name":"Train Route","terms":""},"type/route/tram":{"name":"Tram Route","terms":""},"type/site":{"name":"Site","terms":""},"type/waterway":{"name":"Waterway","terms":""},"vertex":{"name":"Other","terms":""},"waterway/boatyard":{"name":"Boatyard","terms":""},"waterway/canal":{"name":"Canal","terms":""},"waterway/dam":{"name":"Dam","terms":""},"waterway/ditch":{"name":"Ditch","terms":""},"waterway/dock":{"name":"Wet Dock / Dry Dock","terms":"boat,ship,vessel,marine"},"waterway/drain":{"name":"Drain","terms":""},"waterway/fuel":{"name":"Marine Fuel Station","terms":"petrol,gas,diesel,boat"},"waterway/river":{"name":"River","terms":"beck,branch,brook,course,creek,estuary,rill,rivulet,run,runnel,stream,tributary,watercourse"},"waterway/riverbank":{"name":"Riverbank","terms":""},"waterway/sanitary_dump_station":{"name":"Marine Toilet Disposal","terms":"Boat,Watercraft,Sanitary,Dump Station,Pumpout,Pump out,Elsan,CDP,CTDP,Chemical Toilet"},"waterway/stream_intermittent":{"name":"Intermittent Stream","terms":"arroyo,beck,branch,brook,burn,course,creek,drift,flood,flow,gully,run,runnel,rush,spate,spritz,tributary,wadi,wash,watercourse"},"waterway/stream":{"name":"Stream","terms":"beck,branch,brook,burn,course,creek,current,drift,flood,flow,freshet,race,rill,rindle,rivulet,run,runnel,rush,spate,spritz,surge,tide,torrent,tributary,watercourse"},"waterway/water_point":{"name":"Marine Drinking Water","terms":""},"waterway/waterfall":{"name":"Waterfall","terms":"fall"},"waterway/weir":{"name":"Weir","terms":""}}},"imagery":{"Bing":{"description":"Satellite and aerial imagery.","name":"Bing aerial imagery"},"DigitalGlobe-Premium":{"attribution":{"text":"Terms & Feedback"},"description":"Premium DigitalGlobe satellite imagery.","name":"DigitalGlobe Premium Imagery"},"DigitalGlobe-Premium-vintage":{"attribution":{"text":"Terms & Feedback"},"description":"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.","name":"DigitalGlobe Premium Imagery Vintage"},"DigitalGlobe-Standard":{"attribution":{"text":"Terms & Feedback"},"description":"Standard DigitalGlobe satellite imagery.","name":"DigitalGlobe Standard Imagery"},"DigitalGlobe-Standard-vintage":{"attribution":{"text":"Terms & Feedback"},"description":"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.","name":"DigitalGlobe Standard Imagery Vintage"},"EsriWorldImagery":{"attribution":{"text":"Terms & Feedback"},"description":"Esri world imagery.","name":"Esri World Imagery"},"EsriWorldImageryClarity":{"attribution":{"text":"Terms & Feedback"},"description":"Esri archive imagery that may be clearer and more accurate than the default layer.","name":"Esri World Imagery (Clarity) Beta"},"MAPNIK":{"attribution":{"text":"© OpenStreetMap contributors, CC-BY-SA"},"description":"The default OpenStreetMap layer.","name":"OpenStreetMap (Standard)"},"Mapbox":{"attribution":{"text":"Terms & Feedback"},"description":"Satellite and aerial imagery.","name":"Mapbox Satellite"},"OSM_Inspector-Addresses":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Addresses"},"OSM_Inspector-Geometry":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Geometry"},"OSM_Inspector-Highways":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Highways"},"OSM_Inspector-Multipolygon":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Area"},"OSM_Inspector-Places":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Places"},"OSM_Inspector-Routing":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Routing"},"OSM_Inspector-Tagging":{"attribution":{"text":"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},"name":"OSM Inspector: Tagging"},"US-TIGER-Roads-2012":{"name":"TIGER Roads 2012"},"US-TIGER-Roads-2014":{"description":"At zoom level 16+, public domain map data from the US Census. At lower zooms, only changes since 2006 minus changes already incorporated into OpenStreetMap","name":"TIGER Roads 2014"},"US-TIGER-Roads-2017":{"description":"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap","name":"TIGER Roads 2017"},"US_Forest_Service_roads_overlay":{"description":"Highway: Green casing = unclassified. Brown casing = track. Surface: gravel = light brown fill, Asphalt = black, paved = gray, ground =white, concrete = blue, grass = green. Seasonal = white bars","name":"U.S. Forest Roads Overlay"},"Waymarked_Trails-Cycling":{"attribution":{"text":"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},"name":"Waymarked Trails: Cycling"},"Waymarked_Trails-Hiking":{"attribution":{"text":"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},"name":"Waymarked Trails: Hiking"},"Waymarked_Trails-MTB":{"attribution":{"text":"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},"name":"Waymarked Trails: MTB"},"Waymarked_Trails-Skating":{"attribution":{"text":"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},"name":"Waymarked Trails: Skating"},"Waymarked_Trails-Winter_Sports":{"attribution":{"text":"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},"name":"Waymarked Trails: Winter Sports"},"basemap.at":{"attribution":{"text":"basemap.at"},"description":"Basemap of Austria, based on government data.","name":"basemap.at"},"basemap.at-orthofoto":{"attribution":{"text":"basemap.at"},"description":"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.","name":"basemap.at Orthofoto"},"hike_n_bike":{"attribution":{"text":"© OpenStreetMap contributors"},"name":"Hike & Bike"},"mapbox_locator_overlay":{"attribution":{"text":"Terms & Feedback"},"description":"Shows major features to help orient you.","name":"Locator Overlay"},"openpt_map":{"attribution":{"text":"© OpenStreetMap contributors, CC-BY-SA"},"name":"OpenPT Map (overlay)"},"osm-gps":{"attribution":{"text":"© OpenStreetMap contributors"},"description":"Public GPS traces uploaded to OpenStreetMap.","name":"OpenStreetMap GPS traces"},"osm-mapnik-black_and_white":{"attribution":{"text":"© OpenStreetMap contributors, CC-BY-SA"},"name":"OpenStreetMap (Standard Black & White)"},"osm-mapnik-german_style":{"attribution":{"text":"© OpenStreetMap contributors, CC-BY-SA"},"name":"OpenStreetMap (German Style)"},"qa_no_address":{"attribution":{"text":"Simon Poole, Data ©OpenStreetMap contributors"},"name":"QA No Address"},"skobbler":{"attribution":{"text":"© Tiles: skobbler Map data: OpenStreetMap contributors"},"name":"skobbler"},"stamen-terrain-background":{"attribution":{"text":"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL"},"name":"Stamen Terrain"},"tf-cycle":{"attribution":{"text":"Maps © Thunderforest, Data © OpenStreetMap contributors"},"name":"Thunderforest OpenCycleMap"},"tf-landscape":{"attribution":{"text":"Maps © Thunderforest, Data © OpenStreetMap contributors"},"name":"Thunderforest Landscape"}},"community":{"cape-coast-youthmappers":{"name":"University of Cape Coast YouthMappers","description":"Follow us on Twitter: {url}","extendedDescription":"This is the official handle for the Youth Mappers chapter of the University of Cape Coast, Ghana. we love maps, open data and helping the vulnerable."},"osm-gh-facebook":{"name":"OpenStreetMap Ghana on Facebook","description":"Facebook group for people interested in OpenStreetMap.","extendedDescription":"Mappers in Ghana community, promoting OpenStreetMap and Humanitarian OpenStreetMap Team (HOT) projects in Ghana. Join us."},"osm-gh-twitter":{"name":"OpenStreetMap Ghana on Twitter","description":"Follow us on Twitter: {url}"},"talk-gh":{"name":"Talk-gh Mailing List","description":"Talk-gh is the official mailing list for Ghana OSM community."},"osm-mg-facebook":{"name":"OpenStreetMap Madagascar Facebook Group","description":"Malagasy Facebook group for people interested in OpenStreetMap."},"talk-mg":{"name":"Talk-mg Mailing List","description":"Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss."},"OSM-BGD-facebook":{"name":"OpenStreetMap Bangladesh","description":"Improve OpenStreetMap in Bangladesh","extendedDescription":"Mapping in Bangladesh? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-India-facebook":{"name":"OpenStreetMap India - Participatory neighborhood mapping","description":"Improve OpenStreetMap in India","extendedDescription":"Mapping in India? Have questions, want to connect with the community here? Join us at {url}. All are welcome!","events":{"sotmasia2018":{"name":"State of the Map Asia 2018","description":"Join the 2018 OpenStreetMap region-wide event at State of the Map Asia in India","where":"Indian Institute of Management, Bangalore, India"}}},"OSM-india-mailinglist":{"name":"OpenStreetMap India Mailinglist","description":"Talk-in is the official Mailinglist for Indian Community"},"OSM-india-twitter":{"name":"OpenStreetMap India Twitter","description":"We are just a tweet away: {url}"},"OSM-India-Puducherry-Facebook":{"name":"Free Software Hardware Movement - Facebook","description":"FSHM Facebook page to know about community events, activities","extendedDescription":"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap. Its FB page is the best way to keep in contact with its events."},"OSM-India-Puducherry-Matrix":{"name":"Free Software Hardware Movement - Matrix","description":"FSHM Riot group to discuss, share and update mapping activities, events in and around Puducherry","extendedDescription":"FSHM community members share their OSM mapping updates / experiences through the Riot.im group, this group is also used to discuss things related to free software / hardware, technology and activism."},"OSM-IDN-facebook":{"name":"OpenStreetMap Indonesia","description":"Improve OpenStreetMap in Indonesia","extendedDescription":"Mapping in Indonesia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-japan-facebook":{"name":"OpenStreetMap Japan Community","description":"Mappers and OpenStreetMap users in Japan"},"OSM-japan-mailinglist":{"name":"OpenStreetMap Japan Mailinglist","description":"Talk-ja is an Official Mailinglist for Japanese Community"},"OSM-japan-twitter":{"name":"OpenStreetMap Japan Twitter","description":"Hashtag on Twitter: {url}"},"OSM-korea-telegram":{"name":"OSM Korea Telegram Channel","description":"Unofficial Channnel for OpenStreetMap contributors, communities and users in Korea to share and discuss."},"OSM-MY-forum":{"name":"OpenStreetMap Malaysia Forum","description":"Official OpenStreetMap Malaysia Forum"},"OSM-MY-matrix":{"name":"OpenStreetMap Malaysia Riot channel","description":"All mappers are welcome! Sign up at {signupUrl}"},"OSM-MNG-facebook":{"name":"OpenStreetMap Mongolia","description":"Improve OpenStreetMap in Mongolia","extendedDescription":"Mapping in Mongolia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-MMR-facebook":{"name":"OpenStreetMap Myanmar","description":"Improve OpenStreetMap in Myanmar","extendedDescription":"Mapping in Myanmar? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-Nepal-facebook":{"name":"OpenStreetMap Nepal","description":"Improve OpenStreetMap in Nepal","extendedDescription":"Mapping in Nepal? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-PH-facebook":{"name":"OpenStreetMap PH Facebook","description":"Welcome to OpenStreetMap Philippines, where we encourage all fellow Filipinos to contribute to the OpenStreetMap project."},"OSM-PH-mailinglist":{"name":"Talk-ph Mailing List","description":"A mailing list to discuss OpenStreetMap in the Philippines"},"OSM-PH-slack":{"name":"OpenStreetMap PH Slack","description":"All are welcome! Sign up at {signupUrl}"},"OSM-PH-telegram":{"name":"OpenStreetMap PH Telegram","description":"Un-official, Telegram local community of OpenStreetMap contributors and friends in the Philippines"},"OSM-RU-forum":{"name":"OpenStreetMap RU forum","description":"OpenStreetMap Russia web forum"},"OSM-RU-telegram":{"name":"OpenStreetMap RU telegram","description":"OpenStreetMap Russia telegram chat"},"OSM-LKA-facebook":{"name":"OpenStreetMap Sri Lanka","description":"Improve OpenStreetMap in Sri Lanka","extendedDescription":"Mapping in Sri Lanka? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-TW-facebook":{"name":"OpenStreetMap Taiwan Community","description":"Facebook Group for Mappers and OpenStreetMap users to discuss matters about Taiwan."},"OSM-TW-mailinglist":{"name":"OpenStreetMap Taiwan Mailinglist","description":"Talk-tw is an Official Mailinglist for the Communities to dicuss matters about Taiwan"},"at-forum":{"name":"OpenStreetMap Austria Forum","description":"The official forum for OpenStreetMap questions in and around Austria"},"at-mailinglist":{"name":"Talk-at Mailing List","description":"Talk-at is the official mailing list for the Austrian OSM community"},"at-twitter":{"name":"OpenStreetMap Austria Twitter","description":"OpenStreetMap Austria On Twitter: {url}"},"osmgraz-meetup":{"name":"OSM community meetup Graz","description":"Monthly meetup of the OpenStreetMap community in Graz"},"osmgraz-twitter":{"name":"OSM community Graz on twitter","description":"OpenStreetMap community in Graz on twitter"},"osm-at":{"name":"OpenStreetMap Austria","description":"The platform for information on OpenStreetMap in Austria"},"be-facebook":{"name":"OpenStreetMap BE Community","description":"Mappers and OpenStreetMap facebook in Belgium"},"be-forum":{"name":"OpenStreetMap BE forum","description":"OpenStreetMap Belgium web forum"},"be-irc":{"name":"OpenStreetMap Belgium IRC","description":"Join #osmbe on irc.oftc.net (port 6667)","extendedDescription":"Join #osmbe on irc.oftc.net (port 6667), it is bridged with the matrix chat channel"},"be-mailinglist":{"name":"Talk-be Mailing List","description":"Talk-be is the official mailing list for Belgian OSM community"},"be-matrix":{"name":"OpenStreetMap BE Riot channel","description":"All mappers are welcome! Sign up at {signupUrl}","extendedDescription":"Multiple channels exists, for beginners to thematic channels, landuse and dev talk"},"be-meetup":{"name":"OpenStreetMap Belgium Meetup","description":"IRL meetups of everyone who is interested in OpenStreetMap.","extendedDescription":"Physical meetups are great to meet other mappers, ask them questions and to learn a lot. Especially new contributors are very welcome!"},"be-twitter":{"name":"OpenStreetMap Belgium Twitter","description":"OSM Belgium On Twitter: {url}"},"byosm":{"name":"OpenStreetMap Belarus","description":"OpenStreetMap Belarus telegram chat"},"talk-cz-mailinglist":{"name":"Talk-cz Mailing List","description":"Talk-cz is the official mailing list for Czech community"},"de-berlin-mailinglist":{"name":"Berlin Mailing List","description":"This is the mailing list for the Berlin OSM community"},"de-berlin-meetup":{"name":"OpenStreetMap Berlin-Brandenburg Meetup","description":"Mappers and OpenStreetMap users in the Berlin area"},"de-berlin-telegram":{"name":"@osmberlin on Telegram","description":"OpenStreetMap Berlin Telegram chat"},"de-berlin-twitter":{"name":"OpenStreetMap Berlin Twitter","description":"Follow us on Twitter: {url}"},"de-forum":{"name":"OpenStreetMap DE forum","description":"OpenStreetMap Germany web forum"},"de-irc":{"name":"OpenStreetMap Germany IRC","description":"Join #osm-de on irc.oftc.net (port 6667)"},"de-mailinglist":{"name":"Talk-de Mailing List","description":"Talk-de is the official mailing list for the German OSM community"},"osm-de":{"name":"OpenStreetMap Germany","description":"The platform for information on OpenStreetMap in Germany"},"OSM-ES-mailinglist":{"name":"Talk-es mailing list","description":"A mailing list to discuss OpenStreetMap in Spain"},"OSM-ES-telegram":{"name":"@OSMes on Telegram","description":"OpenStreetMap Spain Telegram chat"},"fr-facebook":{"name":"OpenStreetMap France Facebook page","description":"OpenStreetMap France Facebook page"},"fr-forum":{"name":"OpenStreetMap France web forum","description":"OpenStreetMap France web forum"},"fr-irc":{"name":"OpenStreetMap France on IRC","description":"Join #osm-fr on irc.oftc.net (port 6667)"},"fr-mailinglist":{"name":"Talk-fr Mailing List","description":"Talk-fr mailing list"},"fr-twitter":{"name":"OpenStreetMap France on Twitter","description":"OpenStreetMap France on Twitter: {url}"},"Nottingham-OSM-pub-meetup":{"name":"East Midlands (Nottingham) Monthly pub meet-up","description":"Social gathering for East Midlands mappers and users","extendedDescription":"A group have been meeting since March 2011, initially in Nottingham, and, more recently in Derby, and from time to time elsewhere in the East Midlands. These are social gatherings, but are an excellent place to come and ask specific questions about OSM either in the area or in general. In the summer months we usually do some light mapping for an hour in the vicinity of our meeting place. The group as a whole has a special interest in mapping public rights of way and from time to time has mapping meetings for this purpose."},"gb-mailinglist":{"name":"Talk-gb Mailing List","description":"Talk-gb is the main communication forum list for the British (including Northern Ireland) OSM community"},"mappa-mercia-group":{"name":"Mappa Mercia local group","description":"A home for OpenStreetMap enthusiasts in the Midlands","extendedDescription":"Mappa Mercia is a project to grow OpenStreetMap in the West Midlands, UK. We run community events, provide training and support local organisations wishing to open up their data."},"gb-irc":{"name":"OpenStreetMap United Kingdom IRC","description":"Join #osm-gb on irc.oftc.net (port 6667)","extendedDescription":"Join #osm-gb on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question"},"it-facebook":{"name":"OpenStreetMap Italy Facebook","description":"Join the OpenStreetMap Italy community on Facebook"},"it-irc":{"name":"OpenStreetMap Italy IRC","description":"Join #osm-it on irc.oftc.net (port 6667)"},"it-mailinglist":{"name":"Talk-it Mailing List","description":"Talk-it is the official mailing list for the Italian OSM community"},"it-twitter":{"name":"OpenStreetMap Italy Twitter","description":"Follow us on Twitter at {url}"},"OSM-Rome-meetup":{"name":"Incontro Mappatori Romani","description":"Improve OpenStreetMap in the Rome area","extendedDescription":"We aim to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Lazio."},"South-Tyrol-Mailing-List":{"name":"OpenStreetMap mailing list for South Tyrol","description":"OpenStreetMap Italy regional talk list for South Tyrol"},"talk-it-lazio":{"name":"OpenStreetMap IT Lazio","description":"All are welcome! Sign up at {signupUrl}","extendedDescription":"Mailinglist for Rome and Lazio area."},"Trentino-Mailing-List":{"name":"OpenStreetMap mailing list for Trentino","description":"OpenStreetMap Italy regional talk list for Trentino"},"no-forum":{"name":"OpenStreetMap Norway Web Forum","description":"OpenStreetMap Norway web forum"},"no-irc":{"name":"OpenStreetMap Norway on IRC","description":"Chat room for mappers and OpenStreetMap users, developers and enthusiasts in Norway"},"no-mailinglist":{"name":"OpenStreetMap Norway mailing list","description":"Mailing list for mappers and OpenStreetMap users, developers and enthusiasts in Norway"},"OSM-PL-facebook-group":{"name":"OpenStreetMap Poland Facebook group","description":"Group for mappers and users of OpenStreetMap in Poland"},"OSM-PL-forum":{"name":"OpenStreetMap Poland Forum","description":"Forum of Polish OpenStreetMap community"},"osm-se":{"name":"OpenStreetMap.se","description":"Provide OSM services and information for the local community in Sweden"},"se-facebook":{"name":"OpenStreetMap Sweden Facebook","description":"OpenStreetMap Sweden on Facebook"},"se-forum":{"name":"OpenStreetMap Sweden Web Forum","description":"OpenStreetMap Sweden web forum"},"se-irc":{"name":"OpenStreetMap Sweden IRC","description":"Join #osm.se on irc.oftc.net (port 6667)"},"se-mailinglist":{"name":"Talk-se Mailing List","description":"A mailing list to discuss OpenStreetMap in Sweden"},"se-twitter":{"name":"OpenStreetMap Sweden on Twitter","description":"Follow us on Twitter: {url}"},"OSM-CA-Slack":{"name":"OSM-CA Slack","description":"All are welcome! Sign up at {signupUrl}."},"OSM-Vancouver-meetup":{"name":"OpenStreetMap Vancouver","description":"Mappers and OpenStreetMap users in the Vancouver, BC area"},"Bay-Area-OpenStreetMappers":{"name":"Bay Area OpenStreetMappers","description":"Improve OpenStreetMap in the Bay Area","extendedDescription":"This group is about growing the OpenStreetMap community here in the Bay Area. Our events are open to everyone, from open source enthusiasts, cyclists, GIS professionals, geocachers, and beyond. Anyone and everyone who is interested in maps, map making and free map data is welcome to join our group as well as attend our events."},"Central-Pennsylvania-OSM":{"name":"Central Pennsylvania OSM","description":"Online mapping community based out of State College, PA"},"Code-for-San-Jose-Slack":{"name":"Code for San Jose Slack","description":"All are welcome! Sign up at {signupUrl}, then join the #osm channel."},"Dallas-Fort-Worth-OSM":{"name":"Dallas-Fort Worth OSM","description":"The OpenStreetMap user group for Dallas-Fort Worth","extendedDescription":"Dallas, Fort Worth, and all the cities in between are abounding with creative and tech-savvy people. The vision for this usergroup is to find new ways to use the amazing resource of OSM."},"GeoPhilly":{"name":"GeoPhilly","description":"Meetup for map enthusiasts in the Philadelphia area","extendedDescription":"GeoPhilly unites developers, geographers, data geeks, open source enthusiasts, civic hackers and map addicts in our shared love of maps and the stories they tell. If you use maps as part of your work or just want to learn more, this is the meetup for you! Our events aim to be open, friendly, educational and social and range from happy hours to lightning talks or even workshops. Come create a diverse, inspiring geospatial community in the Philadelphia with us!"},"MapMinnesota":{"name":"MapMinnesota","description":"Mappers and OpenStreetMap enthusiasts in the Twin Cities area","extendedDescription":"Connecting OpenStreetMap enthusiasts in Minnesota and the Twin Cities!"},"Mapping-DC-meetup":{"name":"Mapping DC","description":"Improve OpenStreetMap in the DC area","extendedDescription":"We are a group of volunteer mappers who aim to improve the OpenStreetMap in the DC area. We also aim to teach others about the OSM ecosystem, data analytics, cartography, and GIS. We gather every other month at meetups to focus on one area of our city."},"Maptime-ME-meetup":{"name":"MaptimeME","description":"Mappers and OpenStreetMap users, around Portland, ME","extendedDescription":"Maptime is, rather literally, time for mapmaking. Our mission is to open the doors of cartographic possibility to anyone interested by creating a time and space for collaborative learning, exploration, and map creation using mapping tools and technologies."},"OpenCleveland-meetup":{"name":"Open Cleveland","description":"Improve OpenStreetMap in the Cleveland area","extendedDescription":"Open Geo Cleveland aims to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Northeast Ohio. We're also a maptime chapter =)"},"OSM-Boston":{"name":"OpenStreetMap Boston","description":"Mappers and OpenStreetMap users in the Boston area","extendedDescription":"OpenStreetMap is the free and open, wiki-style map of the world, with hundreds of thousands of contributions every day from people like you. Editing the map is simple, and fun! Join us both indoors and outdoors in our effort to create the best map of the Boston area and the rest of the world!"},"OSM-Central-Salish-Sea":{"name":"OpenStreetMap Central Salish Sea","description":"Mappers and OpenStreetMap users around Mount Vernon, WA","extendedDescription":"OpenStreetMap is an map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more. We meet all the time to talk maps, make maps and have fun!"},"OSM-Chattanooga":{"name":"OSM Chattanooga","description":"The OpenStreetMap user group for Chattanooga"},"OSM-Colorado":{"name":"OpenStreetMap Colorado","description":"Mappers and OpenStreetMap users in the state of Colorado, USA","extendedDescription":"OpenStreetMap (OSM) Colorado is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties."},"OSM-NYC":{"name":"OpenStreetMap NYC","description":"Mappers and OpenStreetMap users, developers and enthusiasts in the New York Metropolitan area"},"OSM-Portland":{"name":"OpenStreetMap Portland","description":"Mappers and OpenStreetMap users in the Portland area","extendedDescription":"OpenStreetMap (OSM) is a map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more, and come join us at a meetup to talk maps, contribute to OSM, and have fun!"},"OSM-Seattle":{"name":"OpenStreetMap Seattle","description":"Mappers and OpenStreetMap users in the Seattle area"},"OSM-SoCal":{"name":"OpenStreetMap Southern California","description":"Let's have some fun, contribute something to Los Angeles, and learn about mapping!","extendedDescription":"OpenStreetMap (OSM) Southern California is for anyone interested in mapping to get together to work with OpenStreetMap. OpenStreetMap, the Wikipedia of maps, is a free open-source map of the world being created by more than 1,000,000 volunteers around the globe. Everyone is welcome. If you don't know OpenStreetMap, we'll teach you. If you have an idea for a mapping project or even a field trip that the group can do, great!"},"OSM-South-Bay":{"name":"OSM South Bay","description":"Map Nights hosted by Code for San Jose","extendedDescription":"Code for San Jose, the local Code for America brigade, hosts monthly Map Nights on Thursday nights in downtown San José. Meet fellow South Bay mappers, help out with local mapping projects, and hear about other civic tech projects. Programming and GIS skills are not required."},"OSM-Tampa-Bay":{"name":"OpenStreetMap Tampa Bay","description":"Mappers and OpenStreetMap users in the Tampa Bay area","extendedDescription":"OSM Tampa Bay group for local residents to get together and build out the definitive map of Tampa Bay with OpenStreetMap, the free and editable map of the world. If you're into maps, data, open source, GPS, hiking, cycling, et cetera, you'll love working with OpenStreetMap -- so join in! We'll get together and map and talk about new topics once-a-month or so."},"OSM-US-Slack":{"name":"OpenStreetMap US Slack","description":"All are welcome! Sign up at {signupUrl}"},"OSM-US":{"name":"OpenStreetMap US","description":"We help grow and improve OpenStreetMap in the United States.","extendedDescription":"We support OpenStreetMap by holding annual conferences, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap US here: {signupUrl}"},"OSM-Utah":{"name":"OpenStreetMap Utah","description":"Mappers and OpenStreetMap users in the Salt Lake City area","extendedDescription":"Activities may include things like Learn To Map workshops, mapping parties and outdoor data collection. The events will take place in the SLC area, at least initially. We are looking for seasoned mappers as well as people new to OSM. Join and let's do some mapping!"},"OSM-Wyoming":{"name":"OpenStreetMap Wyoming","description":"Mappers and OpenStreetMap users in the state of Wyoming","extendedDescription":"OpenStreetMap (OSM) Wyoming is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties."},"PHXGeo-meetup":{"name":"PHXGeo Meetup","description":"Mappers and OpenStreetMap users in the Phoenix, AZ area","extendedDescription":"This is a meetup group for those in the Phoenix area who like maps, GIS, OpenStreetMap, cartography and anything in between."},"PHXGeo-twitter":{"name":"PHXGeo Twitter","description":"Follow us on Twitter at {url}"},"Western-Slope-facebook":{"name":"Western Slope OSM Facebook","description":"Mappers and OpenStreetMap users around Grand Junction, CO"},"Western-Slope-meetup":{"name":"Western Slope OSM Meetup","description":"Mappers and OpenStreetMap users around Grand Junction, CO","extendedDescription":"The goal of this group is to introduce OpenStreetMap to the community, develop a community of mappers, create the most amazing geodata possible using whatever method we can and finally strategize in order to get this data out into our community. Imagine accurate trail signage! Imagine further development of bike paths! Imagine anything you want, that's the joy of OpenStreetMap!"},"Maptime-Australia-Slack":{"name":"Maptime Australia Slack","description":"Sign up at {signupUrl}"},"talk-au":{"name":"Talk-au Mailing List","description":"Place for Aussie mappers to chat"},"OSM-AR-facebook":{"name":"OpenStreetMap Argentina Facebook","description":"Join the OpenStreetMap Argentina community on Facebook","extendedDescription":"News from the local community"},"OSM-AR-forum":{"name":"OpenStreetMap Argentina web forum","description":"Join the OpenStreetMap Argentina web forum","extendedDescription":"Ideal for long or important discussions. Slow response time."},"OSM-AR-irc":{"name":"OpenStreetMap Argentina IRC","description":"Join #osm-ar on irc.oftc.net (port 6667)","extendedDescription":"You may find the most geeky user in the community."},"OSM-AR-mailinglist":{"name":"Talk-ar Mailing List","description":"Historic mailing list. Almost unused today."},"OSM-AR-telegram":{"name":"OpenStreetMap Argentina Telegram","description":"Join the OpenStreetMap Argentina community on Telegram","extendedDescription":"The most active channel in the community, ideal for chatting and getting answers to your questions instantly. Everyone is welcome!"},"OSM-AR-twitter":{"name":"OpenStreetMap Argentina Twitter","description":"Follow us on Twitter at {url}","extendedDescription":"News from the local community and OpenStreetMap in general."},"OSM-BO-mailinglist":{"name":"Talk-bo Mailing List","description":"Talk-bo is the official mailing list for the Bolivian OpenStreetMap community","extendedDescription":"Mapping in Bolivia? Have questions, want to connect with the community here? Join us at {url}. All are welcome!"},"Bahia-telegram":{"name":"OpenStreetMap Bahia Telegram Group","description":"Join the OpenStreetMap Bahia community on Telegram","extendedDescription":"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"DF-telegram":{"name":"OpenStreetMap Brasília Telegram Group","description":"Join the OpenStreetMap Brasília community on Telegram","extendedDescription":"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-br-mailinglist":{"name":"Talk-br Mailing List","description":"A mailing list to discuss OpenStreetMap in Brazil"},"OSM-br-telegram":{"name":"OpenStreetMap Brasil Telegram","description":"Join the OpenStreetMap Brasil community on Telegram","extendedDescription":"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-br-twitter":{"name":"OpenStreetMap Brasil Twitter","description":"Follow us on Twitter at {url}"},"OSM-CL-facebook":{"name":"OpenStreetMap Chile Facebook","description":"Join the OpenStreetMap Chile community on Facebook","extendedDescription":"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-mailinglist":{"name":"Talk-cl Mailing List","description":"A mailing list to discuss OpenStreetMap in Chile"},"OSM-CL-telegram":{"name":"OpenStreetMap Chile Telegram","description":"Join the OpenStreetMap Chile community on Telegram","extendedDescription":"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-twitter":{"name":"OpenStreetMap Chile Twitter","description":"Follow us on Twitter at {url}"},"Maptime-Bogota":{"name":"Maptime Bogotá","description":"We're a group of mappers interested in mapping in OpenStreetMap around Bogotá.","extendedDescription":"Learn to collect data in the field and digitize onto OpenStreetMap. It is not necessary to have previous knowledge! You just need the desire to participate, learn, and have fun."},"OSM-CO-facebook":{"name":"OpenStreetMap Colombia Facebook","description":"Join the OpenStreetMap Colombia community on Facebook","extendedDescription":"Join the community to learn more about OpenStreetMap. Everyone is welcome!"},"OSM-CO-mailinglist":{"name":"Talk-co Mailing List","description":"A mailing list to discuss OpenStreetMap in Colombia"},"OSM-CO-twitter":{"name":"OpenStreetMap Colombia Twitter","description":"Follow us on Twitter at {url}"},"OSM-CO":{"name":"OpenStreetMap Colombia","description":"News of the OpenStreetMap Colombia community and the OSMCo Foundation"},"OSM-PE-facebook":{"name":"OpenStreetMap Peru Facebook","description":"Join the OpenStreetMap Peru community on Facebook"},"OSM-PE-mailinglist":{"name":"Talk-pe Mailing List","description":"The official mailing list for the OpenStreetMap Peru community"},"OSM-PE-matrix":{"name":"OpenStreetMap Peru Matrix Chat","description":"Chat with other members of the OpenStreetMap Peru community in Matrix."},"OSM-PE-telegram":{"name":"OpenStreetMap Peru Telegram","description":"Join the OpenStreetMap Peru community on Telegram"},"OSM-PE-twitter":{"name":"OpenStreetMap Peru Twitter","description":"Follow us on Twitter at {url}"},"OSM-PE":{"name":"OpenStreetMap Peru","description":"News and resources for the OpenStreetMap Peru community"},"OSM-Facebook":{"name":"OpenStreetMap on Facebook","description":"Like us on Facebook for news and updates about OpenStreetMap."},"OSM-help":{"name":"OpenStreetMap Help","description":"Ask a question and get answers on OSM's community-driven question and answer site.","extendedDescription":"{url} is for everyone who needs help with OpenStreetMap. Whether you are a beginner mapper or have a technical question, we're here to help!"},"OSM-Reddit":{"name":"OpenStreetMap on Reddit","description":"/r/openstreetmap/ is a great place to learn more about OpenStreetMap. Ask us anything!"},"OSM-Twitter":{"name":"OpenStreetMap Twitter","description":"Follow us on Twitter at {url}"},"OSMF":{"name":"OpenStreetMap Foundation","description":"OSMF is a UK-based not-for-profit that supports the OpenStreetMap Project","extendedDescription":"OSMF supports the OpenStreetMap by fundraising, maintaining the servers which power OSM, organizing the annual State of the Map conference, and coordinating the volunters who keep OSM running. You can show your support and have a voice in the direction of OpenStreetMap by joining as an OSMF member here: {signupUrl}","events":{"sotm2018":{"name":"State of the Map 2018","description":"Join us for 3 days in Milan, Italy for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.","where":"Milan, Italy"}}}}}; + + var features$2 = {"cape_coast_gh":{"type":"Feature","id":"cape_coast_gh","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-1.6,5],[-1.6,5.4],[-1,5.4],[-1,5],[-1.6,5]]]}},"ghana":{"type":"Feature","properties":{},"id":"ghana","geometry":{"type":"Polygon","coordinates":[[[-3.11256,5.13335],[-2.97215,5.11112],[-2.94811,5.12753],[-2.75757,5.10599],[-2.7253,5.14087],[-2.78641,5.28242],[-2.78297,5.29541],[-2.76993,5.2937],[-2.76546,5.31797],[-2.77748,5.33079],[-2.77319,5.35557],[-2.72495,5.34224],[-2.78023,5.60642],[-2.86022,5.65049],[-2.92889,5.61838],[-2.96631,5.64127],[-2.95292,5.71643],[-3.02639,5.7096],[-3.01987,5.8575],[-3.07411,5.98624],[-3.10226,6.15284],[-3.15514,6.25114],[-3.17574,6.25182],[-3.17162,6.29755],[-3.23753,6.54183],[-3.23341,6.60049],[-3.26157,6.61959],[-3.21007,6.73417],[-3.24028,6.83031],[-2.95326,7.23817],[-2.97558,7.27018],[-2.92236,7.61436],[-2.77611,7.94432],[-2.60513,8.03747],[-2.62985,8.11769],[-2.48978,8.20877],[-2.64221,9.00988],[-2.77679,9.03972],[-2.76581,9.15633],[-2.66968,9.26478],[-2.93884,10.66601],[-2.82898,11.0113],[-0.68939,11.00051],[-0.60974,10.91962],[-0.43121,11.04095],[-0.43396,11.10295],[-0.27843,11.17672],[-0.13424,11.13967],[-0.14214,11.10632],[-0.05905,11.08341],[-0.0388,11.10733],[-0.01339,11.11204],[0.02369,11.05308],[0.03296,10.97793],[-0.00549,10.96411],[-0.02266,10.81914],[-0.07141,10.76856],[-0.07999,10.69806],[-0.05905,10.63294],[0.04257,10.60257],[0.0618,10.56207],[0.14351,10.52629],[0.17097,10.42265],[0.26711,10.41151],[0.28633,10.42096],[0.34264,10.31357],[0.39757,10.31492],[0.39722,10.30546],[0.37148,10.28283],[0.35225,10.10746],[0.41817,10.06487],[0.40924,10.01822],[0.36461,10.03174],[0.34676,9.66506],[0.26779,9.64678],[0.24994,9.44771],[0.42847,9.48564],[0.56168,9.40977],[0.48203,8.80501],[0.3804,8.74122],[0.47653,8.59324],[0.65369,8.49546],[0.65781,8.42347],[0.70862,8.38339],[0.72784,8.28964],[0.60425,8.21693],[0.62004,7.70623],[0.59464,7.70283],[0.5809,7.62253],[0.52322,7.5953],[0.52734,7.45099],[0.56168,7.39243],[0.62759,7.40741],[0.66055,7.30935],[0.59395,7.11248],[0.61317,7.09306],[0.59601,7.00549],[0.52322,6.97823],[0.52322,6.94006],[0.56442,6.92234],[0.53284,6.82962],[0.65094,6.73962],[0.63446,6.63733],[0.74707,6.57048],[0.71411,6.51864],[0.90242,6.33355],[1.00405,6.33543],[1.02516,6.25319],[1.05537,6.22964],[1.1,6.17],[1.2,6.17],[1.2,4],[-3,4.5],[-3.11256,5.13335]]]}},"madagascar":{"type":"Feature","id":"madagascar","properties":{},"geometry":{"type":"Polygon","coordinates":[[[51,-15],[47.5,-26],[42,-26],[43.5,-16],[49.5,-11],[51,-15]]]}},"BGD":{"type":"Feature","id":"BGD","properties":{"name":"Bangladesh"},"geometry":{"type":"Polygon","coordinates":[[[92.67272,22.04124],[92.65226,21.32405],[92.30323,21.47548],[92.36855,20.67088],[92.08289,21.1922],[92.02522,21.70157],[91.83489,22.18294],[91.41709,22.76502],[90.49601,22.80502],[90.58696,22.39279],[90.27297,21.83637],[89.84747,22.03915],[89.70205,21.85712],[89.41886,21.96618],[89.03196,22.05571],[88.87631,22.87915],[88.52977,23.63114],[88.69994,24.23372],[88.08442,24.50166],[88.30637,24.86608],[88.93155,25.23869],[88.20979,25.76807],[88.56305,26.44653],[89.35509,26.01441],[89.83248,25.96508],[89.92069,25.26975],[90.87221,25.1326],[91.7996,25.14743],[92.3762,24.97669],[91.91509,24.13041],[91.46773,24.07264],[91.15896,23.50353],[91.70647,22.98526],[91.86993,23.62435],[92.14603,23.6275],[92.67272,22.04124]]]}},"india_full":{"type":"Feature","id":"india_full","properties":{"name":"India"},"geometry":{"type":"MultiPolygon","coordinates":[[[[77.83745,35.49401],[78.91227,34.32194],[78.81109,33.5062],[79.20889,32.99439],[79.17613,32.48378],[78.45845,32.61816],[78.73889,31.51591],[79.72137,30.88272],[81.11126,30.18348],[80.47672,29.72987],[80.08843,28.79447],[81.0572,28.41609],[81.99999,27.92548],[83.30425,27.36451],[84.67502,27.2349],[85.25178,26.7262],[86.02439,26.63098],[87.22747,26.3979],[88.06024,26.41462],[88.1748,26.8104],[88.04313,27.44582],[88.12044,27.87654],[88.73033,28.08686],[88.81425,27.29932],[88.83564,27.09897],[89.74453,26.7194],[90.37328,26.87572],[91.21751,26.80865],[92.03348,26.83831],[92.10371,27.45261],[91.69666,27.77174],[92.50312,27.89688],[93.41335,28.64063],[94.56599,29.27744],[95.4048,29.03172],[96.11768,29.4528],[96.58659,28.83098],[96.24883,28.41103],[97.32711,28.26158],[97.40256,27.88254],[97.05199,27.69906],[97.134,27.08377],[96.41937,27.26459],[95.12477,26.57357],[95.15515,26.00131],[94.60325,25.16249],[94.55266,24.67524],[94.10674,23.85074],[93.32519,24.07856],[93.28633,23.04366],[93.06029,22.70311],[93.16613,22.27846],[92.67272,22.04124],[92.14603,23.6275],[91.86993,23.62435],[91.70647,22.98526],[91.15896,23.50353],[91.46773,24.07264],[91.91509,24.13041],[92.3762,24.97669],[91.7996,25.14743],[90.87221,25.1326],[89.92069,25.26975],[89.83248,25.96508],[89.35509,26.01441],[88.56305,26.44653],[88.20979,25.76807],[88.93155,25.23869],[88.30637,24.86608],[88.08442,24.50166],[88.69994,24.23372],[88.52977,23.63114],[88.87631,22.87915],[89.03196,22.05571],[88.88877,21.69059],[88.2085,21.70317],[86.9757,21.49556],[87.03317,20.74331],[86.49935,20.15164],[85.06027,19.47858],[83.94101,18.30201],[83.18922,17.67122],[82.19279,17.01664],[82.19124,16.55666],[81.69272,16.31022],[80.792,15.95197],[80.3249,15.89918],[80.02507,15.13641],[80.23327,13.83577],[80.28629,13.00626],[79.86255,12.05621],[79.858,10.35727],[79.34051,10.30885],[78.88535,9.54614],[79.18972,9.21654],[78.27794,8.93305],[77.94116,8.25296],[77.5399,7.96554],[76.59298,8.89928],[76.13006,10.29963],[75.74647,11.30825],[75.3961,11.78125],[74.86482,12.74194],[74.61672,13.99258],[74.44386,14.61722],[73.5342,15.99065],[73.11991,17.92857],[72.82091,19.20823],[72.82448,20.4195],[72.63053,21.35601],[71.17527,20.75744],[70.47046,20.87733],[69.16413,22.0893],[69.64493,22.45078],[69.3496,22.84318],[68.17664,23.69196],[68.8426,24.35913],[71.04324,24.35652],[70.8447,25.2151],[70.28287,25.72223],[70.16893,26.49187],[69.51439,26.94097],[70.6165,27.9892],[71.77767,27.91318],[72.82375,28.96159],[73.45064,29.97641],[74.42138,30.97981],[74.40593,31.69264],[75.25864,32.2711],[74.45156,32.7649],[74.10429,33.44147],[73.74995,34.3177],[74.2402,34.74889],[75.75706,34.50492],[76.87172,34.65354],[77.83745,35.49401]]]]}},"india_puducherry":{"type":"Feature","id":"india_puducherry","properties":{"name":"Puducherry"},"geometry":{"type":"Polygon","coordinates":[[[79.87782,12.04973],[79.84726,11.95536],[79.83593,11.90229],[79.81979,11.85761],[79.81464,11.79006],[79.79645,11.7736],[79.77036,11.77191],[79.74564,11.78065],[79.6804,11.7988],[79.61655,11.82434],[79.58702,11.88549],[79.65672,11.93152],[79.64745,11.9594],[79.6423,12.0138],[79.66599,12.03865],[79.72813,12.04201],[79.79885,12.0457],[79.8452,12.05644],[79.87782,12.04973]]]}},"IDN":{"type":"Feature","id":"IDN","properties":{"name":"Indonesia"},"geometry":{"type":"MultiPolygon","coordinates":[[[[120.71561,-10.23958],[120.29501,-10.25865],[118.96781,-9.55797],[119.90031,-9.36134],[120.42576,-9.66592],[120.7755,-9.96968],[120.71561,-10.23958]]],[[[124.43595,-10.14],[123.57998,-10.35999],[123.45999,-10.24],[123.55001,-9.90002],[123.98001,-9.29003],[124.96868,-8.89279],[125.07002,-9.08999],[125.08852,-9.39317],[124.43595,-10.14]]],[[[117.90002,-8.09568],[118.26062,-8.36238],[118.87846,-8.28068],[119.12651,-8.70583],[117.9704,-8.90664],[117.27773,-9.0409],[116.74014,-9.03294],[117.08374,-8.45716],[117.63202,-8.4493],[117.90002,-8.09568]]],[[[122.90354,-8.09423],[122.75698,-8.64981],[121.25449,-8.93367],[119.92439,-8.81042],[119.92093,-8.44486],[120.71509,-8.23696],[121.34167,-8.53674],[122.00736,-8.46062],[122.90354,-8.09423]]],[[[108.62348,-6.77767],[110.53923,-6.87736],[110.75958,-6.46519],[112.61481,-6.94604],[112.97877,-7.59421],[114.47894,-7.77653],[115.70553,-8.37081],[114.56451,-8.75182],[113.46473,-8.34895],[112.55967,-8.37618],[111.52206,-8.30213],[110.58615,-8.12261],[109.42767,-7.74066],[108.69366,-7.6416],[108.27776,-7.76666],[106.4541,-7.3549],[106.28062,-6.9249],[105.36549,-6.85142],[106.05165,-5.89592],[107.26501,-5.95498],[108.07209,-6.34576],[108.48685,-6.42199],[108.62348,-6.77767]]],[[[134.72462,-6.2144],[134.21013,-6.89524],[134.11278,-6.14247],[134.29034,-5.78306],[134.49963,-5.44504],[134.727,-5.73758],[134.72462,-6.2144]]],[[[127.24922,-3.45906],[126.87492,-3.79098],[126.1838,-3.60738],[125.98903,-3.17727],[127.00065,-3.12932],[127.24922,-3.45906]]],[[[130.47134,-3.09376],[130.83484,-3.85847],[129.99055,-3.4463],[129.15525,-3.36264],[128.59068,-3.42868],[127.89889,-3.39344],[128.13588,-2.84365],[129.371,-2.80215],[130.47134,-3.09376]]],[[[134.14337,-1.15187],[134.42263,-2.76918],[135.4576,-3.36775],[136.29331,-2.30704],[137.44074,-1.70351],[138.32973,-1.70269],[139.18492,-2.0513],[139.92668,-2.40905],[141.00021,-2.60015],[141.01706,-5.85902],[141.03385,-9.11789],[140.14342,-8.29717],[139.12777,-8.09604],[138.88148,-8.38093],[137.61447,-8.41168],[138.0391,-7.59788],[138.66862,-7.32022],[138.40791,-6.23285],[137.92784,-5.39337],[135.98925,-4.54654],[135.1646,-4.46293],[133.66288,-3.53885],[133.36771,-4.02482],[132.98396,-4.11298],[132.75694,-3.74628],[132.75379,-3.31179],[131.9898,-2.82055],[133.06685,-2.46042],[133.78003,-2.47985],[133.69621,-2.21454],[132.23237,-2.21253],[131.83622,-1.61716],[130.94284,-1.43252],[130.51956,-0.93772],[131.86754,-0.69546],[132.38012,-0.36954],[133.98555,-0.78021],[134.14337,-1.15187]]],[[[125.2405,1.41984],[124.43703,0.42788],[123.68551,0.23559],[122.72308,0.43114],[121.05673,0.38122],[120.18308,0.23725],[120.04087,-0.51966],[120.93591,-1.40891],[121.47582,-0.95596],[123.34056,-0.61567],[123.2584,-1.07621],[122.82272,-0.93095],[122.38853,-1.51686],[121.50827,-1.90448],[122.45457,-3.18606],[122.2719,-3.5295],[123.17096,-4.68369],[123.16233,-5.3406],[122.62851,-5.63459],[122.23639,-5.28293],[122.71957,-4.46417],[121.73823,-4.85133],[121.48946,-4.57455],[121.61917,-4.18848],[120.89818,-3.6021],[120.97239,-2.62764],[120.30545,-2.9316],[120.39005,-4.09758],[120.43072,-5.52824],[119.79654,-5.6734],[119.36691,-5.37988],[119.65361,-4.45942],[119.49883,-3.49441],[119.07834,-3.48702],[118.76777,-2.802],[119.18097,-2.1471],[119.32339,-1.35315],[119.826,0.15425],[120.0357,0.56648],[120.88578,1.30922],[121.66682,1.01394],[122.92757,0.87519],[124.07752,0.9171],[125.06599,1.64326],[125.2405,1.41984]]],[[[128.68825,1.13239],[128.63595,0.25849],[128.12017,0.35641],[127.96803,-0.25208],[128.38,-0.78],[128.10002,-0.9],[127.69648,-0.2666],[127.39949,1.01172],[127.60051,1.81069],[127.93238,2.1746],[128.00416,1.62853],[128.59456,1.54081],[128.68825,1.13239]]],[[[117.87563,1.82764],[118.99675,0.90222],[117.81186,0.78424],[117.47834,0.10247],[117.52164,-0.80372],[116.56005,-1.48766],[116.5338,-2.48352],[116.14808,-4.01273],[116.00086,-3.65704],[114.8648,-4.10698],[114.46865,-3.4957],[113.75567,-3.43917],[113.25699,-3.11878],[112.06813,-3.47839],[111.70329,-2.99444],[111.04824,-3.04943],[110.22385,-2.93403],[110.07094,-1.59287],[109.57195,-1.31491],[109.09187,-0.45951],[108.95266,0.41537],[109.06914,1.34193],[109.66326,2.00647],[109.83023,1.33814],[110.51406,0.77313],[111.15914,0.97648],[111.79755,0.90444],[112.38025,1.41012],[112.85981,1.49779],[113.80585,1.21755],[114.62135,1.43069],[115.13404,2.82148],[115.51908,3.16924],[115.86552,4.30656],[117.01521,4.30609],[117.88204,4.13755],[117.31323,3.23443],[118.04833,2.28769],[117.87563,1.82764]]],[[[105.81766,-5.85236],[104.71038,-5.87329],[103.86821,-5.03732],[102.58426,-4.22026],[102.15617,-3.61415],[101.39911,-2.79978],[100.9025,-2.05026],[100.14198,-0.65035],[99.26374,0.18314],[98.97001,1.04288],[98.60135,1.82351],[97.6996,2.45318],[97.17694,3.30879],[96.42402,3.86886],[95.38088,4.97078],[95.29303,5.47982],[95.93686,5.43951],[97.48488,5.24632],[98.36917,4.26837],[99.14256,3.59035],[99.694,3.17433],[100.64143,2.09938],[101.65801,2.0837],[102.49827,1.3987],[103.07684,0.56136],[103.8384,0.10454],[103.43765,-0.71195],[104.01079,-1.05921],[104.36999,-1.08484],[104.53949,-1.78237],[104.88789,-2.34043],[105.62211,-2.42884],[106.10859,-3.06178],[105.85745,-4.30553],[105.81766,-5.85236]]]]}},"japan":{"type":"Feature","id":"japan","properties":{},"geometry":{"type":"Polygon","coordinates":[[[141.11938,45.69083],[142.28497,45.56863],[145.39307,44.48867],[145.57983,44.11125],[145.27222,43.79291],[145.47821,43.46289],[145.68695,43.4589],[145.91217,43.39108],[145.44903,42.69934],[143.91094,41.8376],[142.48272,39.3181],[142.1751,38.15265],[141.38409,35.69383],[140.94463,35.21056],[140.55908,32.1198],[139.38457,31.87843],[138.98907,33.1752],[138.01025,34.29807],[135.99976,33.17434],[133.53882,32.71336],[132.48516,32.06483],[131.56128,31.04352],[131.03497,29.53613],[129.94629,27.50827],[127.78301,25.4442],[126.47461,25.42343],[125.86487,24.52713],[124.92657,23.88678],[123.37921,23.82053],[122.67883,24.31456],[122.7293,24.64795],[124.67834,25.02588],[125.36602,25.52354],[126.24493,26.35342],[127.56329,27.13828],[128.57403,28.73003],[128.74981,31.46703],[128.36426,32.62087],[128.92559,33.76174],[129.21021,34.62417],[129.56177,34.84086],[136.69739,37.9312],[139.1209,38.85762],[139.04297,42.04929],[140.13165,43.58114],[140.5711,45.64549],[141.11938,45.69083]]]}},"korea":{"type":"Feature","id":"korea","properties":{},"geometry":{"type":"Polygon","coordinates":[[[125,33],[124,39.5],[124.38171,40.12429],[124.87061,40.47202],[126.04614,40.95294],[126.60095,41.57231],[126.90308,41.79179],[127.24915,41.50446],[128.19397,41.41802],[128.28186,41.56614],[128.0127,42.0097],[128.8751,42.04521],[129.2926,42.43967],[129.67438,42.45589],[129.87762,43],[130.19348,42.92023],[130.31433,42.66224],[130.50385,42.59555],[130.68237,42.2895],[131.3,36.6],[127.3,33],[125,33]]]}},"malaysia":{"type":"Feature","id":"malaysia","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[109.538,1.92671],[109.62041,1.98321],[109.64501,2.08141],[113.8,4.8],[114.26015,4.50701],[114.33278,4.34889],[114.31645,4.26363],[114.45418,4.24183],[114.49579,4.14668],[114.6492,4.00624],[114.80762,4.14929],[114.85775,4.26957],[114.87758,4.42656],[114.82955,4.42966],[114.80229,4.67536],[114.85851,4.79751],[114.97133,4.80824],[115.02238,4.74977],[115.09879,4.4685],[115.15547,4.38302],[115.24582,4.34118],[115.28924,4.60384],[115.2375,4.79584],[115.15038,4.87204],[115.15825,5.02512],[115,5.3],[116.9,7.6],[117.5,7.4],[119.35011,5.53088],[119.43909,5.11578],[118.83773,4.45269],[118.26478,4.09696],[117.95861,4.19058],[117.8992,4.16585],[117.52934,4.1615],[117.28899,4.31595],[116.97351,4.34488],[116.89887,4.36704],[116.61942,4.33622],[116.53602,4.37566],[116.43275,4.32567],[116.34851,4.39138],[116.18028,4.38255],[116.07901,4.27643],[116.00607,4.34818],[115.8779,4.39102],[115.8296,4.24118],[115.70731,4.19935],[115.64991,3.98828],[115.58177,3.88792],[115.61864,3.84247],[115.57965,3.74752],[115.57652,3.6094],[115.6344,3.45571],[115.53779,3.36201],[115.51617,3.26111],[115.56423,3.17109],[115.48328,3.01964],[115.24912,2.9667],[115.15001,2.90895],[115.11387,2.83327],[115.14115,2.74432],[115.09278,2.69409],[115.23743,2.50599],[115.13965,2.4776],[115.09508,2.41123],[114.95039,2.35132],[114.90604,2.25697],[114.79949,2.24936],[114.78024,2.14454],[114.80632,2.02438],[114.87834,1.91463],[114.74372,1.86954],[114.69469,1.81063],[114.71115,1.67148],[114.61498,1.57508],[114.58583,1.44665],[114.52646,1.44179],[114.41581,1.51111],[114.2027,1.4213],[114.14945,1.46149],[113.97573,1.45005],[113.85093,1.38715],[113.81508,1.30294],[113.63068,1.21597],[113.53549,1.32127],[113.41908,1.28549],[113.35493,1.35908],[113.106,1.44495],[113.05767,1.55877],[112.87744,1.58118],[112.77536,1.56153],[112.5171,1.57395],[112.20003,1.43709],[112.22581,1.39272],[112.13391,1.13752],[111.934,1.10284],[111.82599,0.98538],[111.66704,1.04281],[111.52219,0.95868],[111.48916,1.03442],[111.40504,1.0094],[111.22607,1.08799],[111.19759,1.06475],[110.9055,1.02835],[110.85815,0.94998],[110.59486,0.858],[110.49064,0.87637],[110.39497,0.99668],[110.30096,0.99575],[110.1922,1.18303],[110.09758,1.19756],[109.97919,1.29865],[109.93117,1.42466],[109.82759,1.48148],[109.66224,1.61881],[109.68554,1.78179],[109.58606,1.79192],[109.538,1.92671]]],[[[99.45833,6.30667],[99.51167,6.48167],[99.68908,6.47146],[99.91691,6.5233],[100.07588,6.40615],[100.15906,6.48065],[100.17157,6.69376],[100.32605,6.6597],[100.36648,6.53967],[100.4962,6.52128],[100.66237,6.45103],[100.73937,6.49207],[100.81258,6.44219],[100.83515,6.29654],[100.90398,6.23379],[100.98414,6.27884],[101.0943,6.26044],[101.12667,6.19264],[101.0868,5.9109],[101.03707,5.91804],[100.98946,5.78393],[101.1192,5.67031],[101.25999,5.71155],[101.27615,5.81155],[101.39691,5.87241],[101.48454,5.86993],[101.58131,5.93436],[101.66236,5.86871],[101.69082,5.75576],[101.79332,5.75066],[101.94402,5.87247],[101.94265,5.98109],[102.05204,6.0785],[102.08029,6.22537],[102.2,6.5],[103.6,5.8],[104.8,2.5],[104.5,1.5],[104.31571,1.28352],[104.12518,1.27582],[104.07647,1.43092],[103.89786,1.42794],[103.81267,1.47847],[103.67389,1.42814],[103.56667,1.1955],[103,1.325],[99,4.5],[99.45833,6.30667]]]]}},"MNG":{"type":"Feature","id":"MNG","properties":{"name":"Mongolia"},"geometry":{"type":"Polygon","coordinates":[[[87.75126,49.2972],[88.80557,49.47052],[90.71367,50.33181],[92.23471,50.80217],[93.10422,50.49529],[94.14757,50.48054],[94.81595,50.01343],[95.81403,49.97747],[97.25973,49.72606],[98.23176,50.4224],[97.82574,51.011],[98.86149,52.04737],[99.98173,51.63401],[100.88948,51.51686],[102.06522,51.25992],[102.25591,50.51056],[103.67655,50.08997],[104.62155,50.27533],[105.88659,50.40602],[106.8888,50.2743],[107.86818,49.79371],[108.47517,49.28255],[109.40245,49.29296],[110.66201,49.13013],[111.58123,49.37797],[112.89774,49.54357],[114.36246,50.2483],[114.96211,50.14025],[115.4857,49.80518],[116.6788,49.88853],[116.1918,49.1346],[115.48528,48.13538],[115.74284,47.72655],[116.30895,47.85341],[117.29551,47.69771],[118.06414,48.06673],[118.86657,47.74706],[119.77282,47.04806],[119.66327,46.69268],[118.87433,46.80541],[117.4217,46.67273],[116.71787,46.3882],[115.9851,45.72724],[114.46033,45.33982],[113.46391,44.80889],[112.43606,45.01165],[111.87331,45.10208],[111.34838,44.45744],[111.66774,44.07318],[111.82959,43.74312],[111.12968,43.40683],[110.4121,42.87123],[109.2436,42.51945],[107.74477,42.48152],[106.12932,42.13433],[104.96499,41.59741],[104.52228,41.90835],[103.31228,41.90747],[101.83304,42.51487],[100.84587,42.6638],[99.51582,42.52469],[97.45176,42.74889],[96.3494,42.72563],[95.76246,43.31945],[95.30688,44.24133],[94.68893,44.35233],[93.48073,44.97547],[92.13389,45.11508],[90.94554,45.28607],[90.58577,45.71972],[90.97081,46.88815],[90.28083,47.69355],[88.8543,48.06908],[88.01383,48.59946],[87.75126,49.2972]]]}},"MMR":{"type":"Feature","id":"MMR","properties":{"name":"Myanmar"},"geometry":{"type":"Polygon","coordinates":[[[92.10937,20.85881],[92.3291,21.49396],[92.68066,21.28937],[92.63672,22.08564],[92.98828,22.06528],[93.18604,22.22809],[93.14209,23.09994],[93.38379,23.22115],[93.36182,24.1267],[94.19678,23.92601],[94.70215,25.04579],[94.57031,25.26457],[95.20752,26.03704],[95.05371,26.49024],[97.66846,28.51697],[98.65723,27.50827],[98.56934,25.85922],[97.62451,24.8665],[97.73438,23.88584],[98.83301,24.14675],[98.85498,23.18076],[99.49219,23.05952],[99.1626,22.04491],[100.0415,21.96342],[100.32715,21.49396],[101.09619,21.71868],[101.16211,21.41216],[99.99756,20.36523],[97.91016,19.49766],[97.53662,18.29195],[98.83301,16.21467],[98.50342,15.32657],[98.21777,15.11455],[98.65723,14.24309],[99.18457,13.66734],[99.22852,12.85465],[99.66797,11.65224],[98.4375,9.90392],[97.77832,14.34955],[97.00928,16.80454],[95.42725,15.55954],[94.021,16.04581],[94.21875,18.0832],[92.10937,20.85881]]]}},"NPL":{"type":"Feature","id":"NPL","properties":{"name":"Nepal"},"geometry":{"type":"Polygon","coordinates":[[[88.12044,27.87654],[88.04313,27.44582],[88.1748,26.8104],[88.06024,26.41462],[87.22747,26.3979],[86.02439,26.63098],[85.25178,26.7262],[84.67502,27.2349],[83.30425,27.36451],[81.99999,27.92548],[81.0572,28.41609],[80.08843,28.79447],[80.47672,29.72987],[81.11126,30.18348],[81.5258,30.42272],[82.32751,30.11527],[83.33711,29.46373],[83.89899,29.32023],[84.23458,28.83989],[85.01164,28.64277],[85.82332,28.20358],[86.95452,27.97426],[88.12044,27.87654]]]}},"philippines":{"type":"Feature","id":"philippines","properties":{},"geometry":{"type":"Polygon","coordinates":[[[114.93896,8.23324],[122.01416,21.71868],[127.6062,7.39515],[125.50781,5.14566],[118.89954,4.41761],[119.49829,5.28789],[117.53174,7.39515],[114.93896,8.23324]]]}},"russia":{"type":"Feature","id":"russia","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[22.7311,54.32754],[20.89224,54.31253],[19.66064,54.42608],[19.88848,54.86616],[21.26845,55.19048],[22.31572,55.0153],[22.75776,54.85657],[22.65105,54.58274],[22.7311,54.32754]]],[[[-180,83],[-169,66.5],[-171,64],[-180,64],[-180,83]]],[[[180,83],[180,64.97971],[179.99281,64.97433],[178.7072,64.53493],[177.41128,64.60821],[178.313,64.07593],[178.90825,63.25197],[179.37034,62.98262],[179.48636,62.56894],[179.22825,62.3041],[177.3643,62.5219],[174.56929,61.76915],[173.68013,61.65261],[172.15,60.95],[170.6985,60.33618],[170.33085,59.88177],[168.90046,60.57355],[166.29498,59.78855],[165.84,60.16],[164.87674,59.7316],[163.53929,59.86871],[163.21711,59.21101],[162.01733,58.24328],[162.05297,57.83912],[163.19191,57.61503],[163.05794,56.15924],[162.12958,56.12219],[161.70146,55.28568],[162.11749,54.85514],[160.36877,54.34433],[160.02173,53.20257],[158.53094,52.95868],[158.23118,51.94269],[156.78979,51.01105],[156.42,51.7],[155.99182,53.15895],[155.43366,55.38103],[155.91442,56.76792],[156.75815,57.3647],[156.81035,57.83204],[158.36433,58.05575],[160.15064,59.31477],[161.87204,60.343],[163.66969,61.1409],[164.47355,62.55061],[163.25842,62.46627],[162.65791,61.6425],[160.12148,60.54423],[159.30232,61.77396],[156.72068,61.43442],[154.21806,59.75818],[155.04375,59.14495],[152.81185,58.88385],[151.26573,58.78089],[151.33815,59.50396],[149.78371,59.65573],[148.54481,59.16448],[145.48722,59.33637],[142.19782,59.03998],[138.95848,57.08805],[135.12619,54.72959],[136.70171,54.60355],[137.19342,53.97732],[138.1647,53.75501],[138.80463,54.25455],[139.90151,54.18968],[141.34531,53.08957],[141.37923,52.23877],[140.59742,51.23967],[140.51308,50.04553],[140.06193,48.44671],[138.55472,46.99965],[138.21971,46.30795],[136.86232,45.1435],[135.51535,43.989],[134.86939,43.39821],[133.53687,42.81147],[132.90627,42.79849],[132.27807,43.28456],[130.93587,42.55274],[130.78,42.22],[130.64,42.395],[130.63387,42.90302],[131.14469,42.92999],[131.28856,44.11152],[131.02519,44.96796],[131.88345,45.32116],[133.09712,45.14409],[133.76964,46.11693],[134.11235,47.21248],[134.50081,47.57845],[135.02631,48.47823],[133.3736,48.18344],[132.50669,47.78896],[130.98726,47.79013],[130.58229,48.72969],[129.39782,49.4406],[127.6574,49.76027],[127.28746,50.7398],[126.93916,51.35389],[126.5644,51.78426],[125.94635,52.7928],[125.06821,53.16105],[123.57147,53.4588],[122.24575,53.43173],[121.00308,53.2514],[120.17709,52.75389],[120.72579,52.51623],[120.7382,51.96411],[120.18208,51.64355],[119.27939,50.58292],[119.28846,50.14288],[117.87924,49.51098],[116.6788,49.88853],[115.4857,49.80518],[114.96211,50.14025],[114.36246,50.2483],[112.89774,49.54357],[111.58123,49.37797],[110.66201,49.13013],[109.40245,49.29296],[108.47517,49.28255],[107.86818,49.79371],[106.8888,50.2743],[105.88659,50.40602],[104.62158,50.27532],[103.67655,50.08997],[102.25589,50.51056],[102.06521,51.25991],[100.88948,51.51686],[99.98173,51.63401],[98.86149,52.04737],[97.82574,51.011],[98.23176,50.4224],[97.25976,49.72605],[95.81402,49.97746],[94.81595,50.01343],[94.14757,50.48054],[93.10421,50.49529],[92.23471,50.80217],[90.71367,50.33181],[88.80557,49.47052],[87.75126,49.2972],[87.35997,49.21498],[86.82936,49.82668],[85.54127,49.69286],[85.11556,50.1173],[84.41638,50.3114],[83.93511,50.88925],[83.383,51.06918],[81.94599,50.8122],[80.56845,51.38834],[80.03556,50.86475],[77.80092,53.40442],[76.52518,54.177],[76.8911,54.49052],[74.38482,53.54685],[73.42568,53.48981],[73.50852,54.03562],[72.22415,54.37665],[71.18013,54.13329],[70.86527,55.16973],[69.06817,55.38525],[68.1691,54.97039],[65.66687,54.60125],[65.17853,54.35423],[61.4366,54.00625],[60.97807,53.66499],[61.69999,52.98],[60.73999,52.71999],[60.92727,52.44755],[59.96753,51.96042],[61.588,51.27266],[61.33742,50.79907],[59.93281,50.84219],[59.64228,50.54544],[58.36332,51.06364],[56.77798,51.04355],[55.71694,50.62171],[54.53288,51.02624],[52.32872,51.71865],[50.76665,51.69276],[48.70238,50.60513],[48.57784,49.87476],[47.54948,50.4547],[46.7516,49.35601],[47.04367,49.15204],[46.46645,48.39415],[47.31524,47.71585],[48.05725,47.74377],[48.69473,47.07563],[48.59325,46.56104],[49.10116,46.39933],[48.64541,45.80629],[47.67591,45.64149],[46.68201,44.6092],[47.59094,43.66016],[47.49252,42.98658],[48.58437,41.80888],[47.98728,41.40582],[47.81567,41.15142],[47.37331,41.21973],[46.68607,41.82714],[46.40495,41.86068],[45.7764,42.09244],[45.47028,42.50278],[44.53762,42.71199],[43.93121,42.55496],[43.75599,42.74083],[42.3944,43.2203],[40.92219,43.38215],[40.07697,43.5531],[39.95501,43.435],[38.68,44.28],[37.53912,44.65721],[36.67546,45.24469],[37.40317,45.40451],[38.23295,46.24087],[37.67372,46.63657],[39.14767,47.04475],[39.1212,47.26336],[38.22354,47.10219],[38.25511,47.5464],[38.77057,47.82562],[39.73828,47.89894],[39.89562,48.23241],[39.67465,48.78382],[40.08079,49.30743],[40.06904,49.60105],[38.59499,49.92646],[38.01063,49.91566],[37.39346,50.38395],[36.62617,50.22559],[35.35612,50.5772],[35.37791,50.77394],[35.02218,51.20757],[34.22482,51.25599],[34.14198,51.56641],[34.39173,51.76888],[33.7527,52.33508],[32.71576,52.23846],[32.41206,52.28869],[32.15944,52.06125],[31.78597,52.10168],[31.54002,52.74205],[31.3052,53.074],[31.49764,53.16743],[32.30452,53.13273],[32.69364,53.35142],[32.4056,53.61805],[31.73127,53.79403],[31.79142,53.97464],[31.38447,54.15706],[30.75753,54.81177],[30.97184,55.08155],[30.87391,55.55098],[29.89629,55.78946],[29.37157,55.67009],[29.22951,55.91834],[28.17671,56.16913],[27.85528,56.75933],[27.77002,57.24426],[27.28818,57.47453],[27.71669,57.7919],[27.42015,58.72457],[28.1317,59.30083],[27.98112,59.47537],[29.1177,60.02805],[28.07,60.50352],[30.21111,61.78003],[31.13999,62.35769],[31.51609,62.86769],[30.03587,63.55281],[30.44468,64.20445],[29.54443,64.94867],[30.21765,65.80598],[29.05459,66.94429],[29.97743,67.6983],[28.44594,68.36461],[28.59193,69.06478],[35,71],[40,83],[180,83]]]]}},"LKA":{"type":"Feature","id":"LKA","properties":{"name":"Sri Lanka"},"geometry":{"type":"Polygon","coordinates":[[[81.78796,7.52306],[81.63732,6.48177],[81.21802,6.19714],[80.34836,5.96837],[79.87247,6.76346],[79.69517,8.20084],[80.1478,9.82408],[80.83882,9.26843],[81.30432,8.56421],[81.78796,7.52306]]]}},"taiwan":{"type":"Feature","id":"taiwan","properties":{},"geometry":{"type":"Polygon","coordinates":[[[119,23.5],[121.7,26],[122.5,25.5],[121.8,21.8],[120,21.5],[119,23.5]]]}},"austria":{"type":"Feature","id":"austria","properties":{},"geometry":{"type":"Polygon","coordinates":[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]]}},"graz":{"type":"Feature","id":"graz","properties":{},"geometry":{"type":"Polygon","coordinates":[[[15.26276,46.94182],[15.26276,47.16918],[15.62943,47.16918],[15.62943,46.94182],[15.26276,46.94182]]]}},"belgium":{"type":"Feature","id":"belgium","properties":{},"geometry":{"type":"Polygon","coordinates":[[[3.08167,51.55146],[3.30963,51.43346],[3.36834,51.36996],[3.37761,51.35956],[3.37589,51.34841],[3.38482,51.34337],[3.38722,51.33887],[3.38688,51.33286],[3.36096,51.31527],[3.3819,51.30207],[3.37641,51.29928],[3.36782,51.29681],[3.38293,51.28726],[3.38327,51.2806],[3.37915,51.27824],[3.38121,51.27598],[3.39031,51.27416],[3.39598,51.26686],[3.40439,51.26449],[3.40937,51.25923],[3.41795,51.26127],[3.42138,51.25848],[3.4267,51.25482],[3.42894,51.24709],[3.44679,51.24279],[3.52592,51.24677],[3.51425,51.2878],[3.52927,51.28935],[3.53434,51.28474],[3.53811,51.28479],[3.54266,51.29177],[3.55717,51.29187],[3.5588,51.2959],[3.56163,51.29644],[3.56489,51.29569],[3.5727,51.29225],[3.57253,51.29107],[3.57571,51.28946],[3.57905,51.28951],[3.58206,51.28876],[3.58214,51.29247],[3.58618,51.29316],[3.58026,51.29869],[3.58987,51.30663],[3.62626,51.29413],[3.64145,51.28914],[3.64411,51.29069],[3.6581,51.29096],[3.6781,51.28345],[3.67905,51.28168],[3.69063,51.28173],[3.69424,51.27668],[3.71801,51.27217],[3.71827,51.27368],[3.72273,51.274],[3.75054,51.27061],[3.75286,51.27104],[3.75681,51.26986],[3.76342,51.26261],[3.76848,51.26106],[3.77123,51.26218],[3.77355,51.2646],[3.79698,51.25665],[3.79071,51.24553],[3.79063,51.21608],[3.80453,51.2143],[3.80796,51.21398],[3.82479,51.21086],[3.8356,51.21516],[3.85225,51.21484],[3.85895,51.21291],[3.89002,51.22473],[3.89568,51.21968],[3.89482,51.2143],[3.88298,51.20764],[3.88762,51.20301],[3.89345,51.20527],[3.89929,51.20398],[3.91542,51.20989],[3.91388,51.21764],[3.92349,51.21989],[3.93105,51.22194],[3.9374,51.21398],[3.94323,51.21721],[3.95748,51.21764],[3.96023,51.22527],[3.97654,51.22667],[3.9846,51.2357],[3.99473,51.23914],[4.00469,51.24311],[4.01636,51.24623],[4.03851,51.24687],[4.04125,51.24397],[4.05842,51.24505],[4.06082,51.24773],[4.16365,51.29391],[4.23815,51.35345],[4.22373,51.35881],[4.21686,51.36878],[4.21635,51.37435],[4.33685,51.37842],[4.34235,51.35988],[4.35093,51.35967],[4.36861,51.35795],[4.38543,51.35592],[4.39505,51.35753],[4.42114,51.36707],[4.42818,51.36642],[4.42337,51.37242],[4.42904,51.37521],[4.38852,51.40702],[4.38097,51.42137],[4.38904,51.42597],[4.39093,51.43304],[4.3935,51.43486],[4.39161,51.44416],[4.37891,51.44502],[4.37719,51.44716],[4.38131,51.45165],[4.38509,51.4508],[4.44157,51.47005],[4.46354,51.4723],[4.47487,51.47978],[4.48654,51.4786],[4.53856,51.48416],[4.55074,51.47283],[4.53238,51.44877],[4.53701,51.42522],[4.57512,51.43411],[4.63469,51.42651],[4.64087,51.42372],[4.65048,51.42747],[4.6673,51.42779],[4.66473,51.44556],[4.69236,51.45326],[4.70146,51.46845],[4.71416,51.47026],[4.71519,51.47304],[4.72781,51.48486],[4.74524,51.48988],[4.74721,51.49368],[4.74781,51.49651],[4.75047,51.49945],[4.75648,51.50196],[4.77253,51.50682],[4.79485,51.5034],[4.82025,51.49784],[4.82643,51.48609],[4.84737,51.48352],[4.84291,51.46449],[4.84909,51.46085],[4.84463,51.4478],[4.83089,51.44438],[4.83742,51.42683],[4.8563,51.41805],[4.88171,51.43325],[4.91741,51.4127],[4.93389,51.42083],[4.90162,51.44053],[4.9387,51.46192],[4.97646,51.44545],[5.02419,51.48523],[5.03225,51.48919],[5.04187,51.4878],[5.04135,51.48053],[5.04856,51.47433],[5.08032,51.47475],[5.10658,51.43047],[5.07294,51.39358],[5.11765,51.36149],[5.12074,51.35592],[5.13268,51.3475],[5.13525,51.31608],[5.1622,51.31135],[5.17241,51.31688],[5.19001,51.32069],[5.19585,51.32123],[5.19988,51.32348],[5.24331,51.30594],[5.2276,51.26841],[5.23842,51.26208],[5.26357,51.26782],[5.29584,51.26267],[5.31567,51.26449],[5.33755,51.26428],[5.34107,51.26686],[5.34399,51.27309],[5.34554,51.27668],[5.4172,51.2632],[5.43222,51.27706],[5.43806,51.27695],[5.44132,51.2827],[5.46398,51.28549],[5.47608,51.29209],[5.47608,51.29536],[5.48226,51.29923],[5.48201,51.301],[5.51625,51.29612],[5.52011,51.28957],[5.54363,51.27298],[5.55711,51.26718],[5.55874,51.2631],[5.55745,51.25316],[5.55651,51.24472],[5.56131,51.22301],[5.63667,51.20355],[5.65401,51.19812],[5.65513,51.1936],[5.65212,51.1929],[5.65753,51.1865],[5.66834,51.18671],[5.67624,51.18548],[5.67761,51.18435],[5.6856,51.18542],[5.68946,51.18623],[5.69815,51.1842],[5.70201,51.18397],[5.70165,51.18275],[5.70645,51.18248],[5.70815,51.18223],[5.70987,51.1812],[5.71431,51.1839],[5.7177,51.18475],[5.72948,51.18601],[5.73031,51.18553],[5.73274,51.18564],[5.73274,51.18615],[5.7345,51.18657],[5.73993,51.18757],[5.74576,51.19032],[5.75769,51.18618],[5.75821,51.1851],[5.76731,51.18413],[5.77821,51.1787],[5.77477,51.17337],[5.7801,51.17289],[5.78078,51.17208],[5.77992,51.17052],[5.77673,51.1702],[5.77585,51.17028],[5.77321,51.16967],[5.77274,51.16925],[5.77192,51.16924],[5.77093,51.1698],[5.76993,51.16905],[5.77059,51.16458],[5.77383,51.16453],[5.77385,51.16558],[5.77638,51.16565],[5.77701,51.16306],[5.7775,51.16298],[5.77808,51.16353],[5.77975,51.16356],[5.78025,51.15935],[5.77797,51.15803],[5.77677,51.15554],[5.77829,51.15502],[5.77907,51.15319],[5.78456,51.15421],[5.79005,51.15798],[5.79512,51.15798],[5.80095,51.15954],[5.80027,51.16094],[5.80361,51.1632],[5.80619,51.16352],[5.8134,51.16051],[5.8146,51.16325],[5.82473,51.16874],[5.83434,51.16314],[5.83589,51.15905],[5.84078,51.15819],[5.84129,51.15523],[5.8564,51.15071],[5.86258,51.14446],[5.85674,51.14037],[5.85159,51.13671],[5.84816,51.12938],[5.83374,51.12744],[5.82241,51.12249],[5.81211,51.11387],[5.82275,51.11171],[5.84026,51.10611],[5.83683,51.0936],[5.82584,51.08929],[5.80559,51.09102],[5.81142,51.07851],[5.80421,51.07031],[5.80868,51.06233],[5.797,51.05564],[5.77709,51.05693],[5.76576,51.03384],[5.78568,51.02412],[5.77263,51.01354],[5.77332,51.00555],[5.76885,50.99345],[5.7589,50.98912],[5.74654,50.97767],[5.72765,50.9647],[5.72834,50.95843],[5.73761,50.96145],[5.75306,50.96232],[5.76851,50.9541],[5.7589,50.94567],[5.73521,50.92446],[5.73177,50.91061],[5.7177,50.90563],[5.70362,50.9078],[5.70122,50.89545],[5.68954,50.88224],[5.68096,50.87726],[5.67169,50.87574],[5.65453,50.87054],[5.64766,50.86274],[5.64766,50.84757],[5.65453,50.83435],[5.66448,50.82437],[5.6971,50.81353],[5.71838,50.80333],[5.72113,50.77642],[5.78018,50.79639],[5.82962,50.77294],[5.9079,50.77381],[6.00403,50.76947],[6.04248,50.76252],[6.05621,50.75123],[6.129,50.73385],[6.16745,50.69037],[6.21689,50.66252],[6.2471,50.65991],[6.28143,50.64424],[6.28693,50.62333],[6.27045,50.59631],[6.24847,50.58542],[6.24058,50.56078],[6.22719,50.5538],[6.21586,50.54965],[6.20419,50.53591],[6.21552,50.52063],[6.22993,50.50295],[6.23989,50.50513],[6.2598,50.50338],[6.27766,50.50731],[6.29139,50.50076],[6.3089,50.50513],[6.3216,50.49923],[6.35078,50.49377],[6.35765,50.48722],[6.34838,50.47936],[6.35147,50.46188],[6.37756,50.45925],[6.38065,50.44657],[6.37619,50.40786],[6.36383,50.39561],[6.35387,50.38028],[6.36246,50.37634],[6.41155,50.34415],[6.41499,50.33363],[6.40675,50.31982],[6.38718,50.31763],[6.36829,50.3025],[6.35765,50.30338],[6.33018,50.31565],[6.31645,50.31478],[6.30444,50.30601],[6.29585,50.29044],[6.29414,50.27354],[6.27628,50.26411],[6.22856,50.25511],[6.21483,50.25094],[6.20659,50.24062],[6.19869,50.23403],[6.17947,50.23139],[6.18221,50.22678],[6.17672,50.22151],[6.19251,50.21206],[6.19801,50.18437],[6.19217,50.17646],[6.15166,50.16656],[6.15509,50.15491],[6.16058,50.14633],[6.15578,50.13554],[6.14376,50.13224],[6.13243,50.12454],[6.10737,50.13378],[6.11012,50.16282],[6.09947,50.16502],[6.08677,50.15425],[6.06583,50.14875],[6.02943,50.15579],[6.01639,50.17294],[5.97931,50.16898],[5.96832,50.12542],[5.94566,50.12278],[5.90378,50.10473],[5.89073,50.06948],[5.86876,50.06243],[5.87837,50.03289],[5.83168,50.01039],[5.84404,49.99935],[5.84747,49.98214],[5.81932,49.95785],[5.78773,49.95255],[5.77263,49.91144],[5.74722,49.89994],[5.7843,49.88977],[5.7946,49.87473],[5.76645,49.86012],[5.75203,49.834],[5.76645,49.80121],[5.79941,49.79855],[5.84404,49.74977],[5.83923,49.72847],[5.87906,49.72892],[5.89622,49.70672],[5.87563,49.67963],[5.91176,49.66218],[5.90567,49.65779],[5.9073,49.65479],[5.90429,49.65213],[5.90507,49.64735],[5.90567,49.64262],[5.90876,49.63868],[5.89854,49.63362],[5.89374,49.63573],[5.88524,49.6319],[5.88799,49.62645],[5.87837,49.62],[5.87829,49.61305],[5.8776,49.60737],[5.84996,49.59675],[5.85202,49.58824],[5.86318,49.58773],[5.86524,49.58974],[5.86962,49.59013],[5.87279,49.58913],[5.87502,49.58295],[5.87073,49.58134],[5.87288,49.57961],[5.87314,49.57677],[5.87451,49.5736],[5.86387,49.56965],[5.86164,49.56603],[5.85288,49.56347],[5.85168,49.56185],[5.84661,49.5608],[5.84773,49.55896],[5.84722,49.55567],[5.84224,49.55233],[5.8267,49.54933],[5.82524,49.55066],[5.82026,49.54599],[5.81623,49.54599],[5.81245,49.54582],[5.80765,49.5486],[5.79941,49.54816],[5.78859,49.55194],[5.77263,49.56141],[5.76181,49.55963],[5.75941,49.54203],[5.7407,49.53724],[5.73521,49.53813],[5.72971,49.54225],[5.7189,49.53802],[5.70156,49.5378],[5.6904,49.54392],[5.67993,49.54348],[5.67787,49.54715],[5.66757,49.54682],[5.66002,49.5505],[5.64526,49.54437],[5.62878,49.53579],[5.6262,49.52287],[5.62346,49.5144],[5.61298,49.50292],[5.60217,49.50671],[5.59359,49.51953],[5.56904,49.52565],[5.56372,49.52409],[5.55462,49.52744],[5.54192,49.51384],[5.50329,49.50504],[5.4875,49.50526],[5.48458,49.50113],[5.47085,49.49322],[5.46209,49.49679],[5.46055,49.50738],[5.45214,49.51083],[5.44304,49.51841],[5.46158,49.52788],[5.46209,49.53735],[5.4372,49.55283],[5.45368,49.56542],[5.44458,49.56586],[5.43549,49.56887],[5.42673,49.5899],[5.42862,49.59358],[5.41523,49.59947],[5.40871,49.60748],[5.39892,49.6096],[5.39652,49.6146],[5.3742,49.62128],[5.37025,49.62105],[5.36047,49.62428],[5.34897,49.62895],[5.34279,49.61505],[5.33781,49.61427],[5.32957,49.61494],[5.32064,49.61271],[5.31378,49.6096],[5.31034,49.61071],[5.30863,49.61694],[5.30279,49.62317],[5.30245,49.62962],[5.30794,49.63851],[5.31738,49.64807],[5.33043,49.65318],[5.30708,49.67085],[5.29284,49.67607],[5.27962,49.68496],[5.2791,49.6884],[5.26829,49.69495],[5.25782,49.69295],[5.2482,49.68529],[5.24117,49.68429],[5.24134,49.68851],[5.23104,49.69007],[5.2173,49.6864],[5.21421,49.68784],[5.20666,49.69451],[5.19722,49.69062],[5.18932,49.6924],[5.17542,49.6924],[5.16306,49.69218],[5.1622,49.6995],[5.1646,49.71083],[5.15963,49.71438],[5.15327,49.71671],[5.15087,49.71249],[5.14263,49.70739],[5.14006,49.71194],[5.13147,49.71205],[5.12529,49.71105],[5.12032,49.71704],[5.12358,49.72637],[5.11723,49.73757],[5.09302,49.76297],[5.08796,49.76475],[5.08452,49.76186],[5.07963,49.76164],[5.07611,49.76109],[5.07139,49.75987],[5.06727,49.76081],[5.06144,49.76192],[5.06092,49.76624],[5.04908,49.76741],[5.00599,49.7816],[5.00547,49.7832],[5.00504,49.78719],[5.00041,49.79312],[4.99741,49.79379],[4.99603,49.79506],[4.99715,49.79672],[4.99672,49.79955],[4.9938,49.79977],[4.98539,49.79888],[4.97895,49.79972],[4.96977,49.8011],[4.96779,49.79756],[4.96179,49.79717],[4.95569,49.80027],[4.94865,49.79811],[4.94814,49.79473],[4.94368,49.79035],[4.94213,49.79035],[4.94132,49.79226],[4.93887,49.7926],[4.93286,49.78977],[4.9329,49.78825],[4.93114,49.78661],[4.92939,49.78686],[4.92102,49.78805],[4.91793,49.78708],[4.91269,49.78573],[4.90475,49.78492],[4.89947,49.78597],[4.89741,49.78836],[4.88913,49.78769],[4.88724,49.78786],[4.88244,49.79049],[4.87939,49.79249],[4.87591,49.79282],[4.87068,49.79268],[4.87188,49.78922],[4.87081,49.78839],[4.86227,49.78805],[4.85712,49.78966],[4.85201,49.79035],[4.84909,49.79368],[4.8563,49.79722],[4.86076,49.80354],[4.86214,49.81373],[4.87364,49.81883],[4.86712,49.82071],[4.86712,49.82625],[4.86506,49.83444],[4.8654,49.83964],[4.85304,49.84042],[4.84943,49.84894],[4.84789,49.86278],[4.84463,49.8703],[4.85561,49.87096],[4.87484,49.89618],[4.87347,49.90459],[4.87999,49.90879],[4.87553,49.92006],[4.85424,49.92957],[4.84325,49.94636],[4.82849,49.94724],[4.78558,49.9563],[4.78523,49.9828],[4.80995,49.99626],[4.81647,50.02671],[4.83021,50.04127],[4.81441,50.04788],[4.8127,50.06794],[4.8357,50.07014],[4.83192,50.09085],[4.84291,50.10363],[4.86626,50.10318],[4.85836,50.1164],[4.88274,50.13664],[4.87072,50.14875],[4.8278,50.14963],[4.82025,50.15579],[4.76875,50.1296],[4.75262,50.10539],[4.70352,50.08424],[4.70112,50.01502],[4.69803,49.99229],[4.63383,49.98037],[4.56963,49.96712],[4.53255,49.94857],[4.51401,49.93973],[4.44122,49.93178],[4.35745,49.94327],[4.31145,49.95564],[4.22974,49.94945],[4.18785,49.95034],[4.16725,49.96801],[4.12331,49.97286],[4.12193,50.01215],[4.14734,50.05273],[4.18167,50.05493],[4.22012,50.07301],[4.1906,50.10252],[4.18922,50.1263],[4.16382,50.1219],[4.11644,50.13158],[4.13841,50.21734],[4.20708,50.25555],[4.1827,50.27025],[4.16382,50.28298],[4.15901,50.27596],[4.17309,50.2685],[4.17309,50.25994],[4.16519,50.25401],[4.13258,50.25489],[4.1312,50.26433],[4.13017,50.27091],[4.11644,50.27464],[4.12262,50.2821],[4.1185,50.2957],[4.09653,50.30864],[4.07696,50.30579],[4.07215,50.31807],[4.05533,50.32946],[4.03679,50.33998],[4.02512,50.35291],[3.98598,50.33911],[3.95748,50.33845],[3.8974,50.32267],[3.88264,50.32377],[3.88092,50.33494],[3.85448,50.33911],[3.84933,50.34875],[3.82942,50.35028],[3.82633,50.34217],[3.80711,50.3413],[3.80608,50.35072],[3.74256,50.34393],[3.73604,50.31149],[3.72437,50.30272],[3.70583,50.29921],[3.68076,50.31894],[3.66428,50.34152],[3.65227,50.37087],[3.66634,50.39123],[3.66325,50.42143],[3.65398,50.4551],[3.62995,50.46712],[3.60832,50.49006],[3.59974,50.48657],[3.55476,50.48853],[3.49915,50.47936],[3.48198,50.48635],[3.50945,50.52085],[3.4758,50.52478],[3.45726,50.50513],[3.43735,50.49945],[3.36662,50.48416],[3.27324,50.52609],[3.25951,50.60154],[3.2341,50.65251],[3.24097,50.67862],[3.24783,50.70037],[3.19565,50.70776],[3.1311,50.77642],[3.06725,50.76296],[2.99652,50.74428],[2.95807,50.67035],[2.82898,50.68602],[2.68341,50.77816],[2.57629,50.81114],[2.5708,50.93939],[2.51862,51.05866],[2.36755,51.2516],[3.08167,51.55146]]]}},"belarus":{"type":"Feature","id":"belarus","properties":{},"geometry":{"type":"Polygon","coordinates":[[[23.19351,52.37811],[23.38715,52.57134],[23.67554,52.61806],[23.87329,52.72215],[23.75656,53.20027],[23.42148,53.83956],[23.43521,53.97467],[24.33609,53.99082],[24.73022,54.03762],[24.70825,54.16967],[24.95682,54.18253],[25.48004,54.37176],[25.63385,54.95239],[26.53748,55.24468],[26.27655,55.26973],[26.48804,55.71009],[26.89728,55.87993],[27.56195,55.82597],[27.56195,55.97226],[27.98218,56.20976],[29.64935,55.96304],[30.28107,55.89303],[30.95398,55.64815],[31.20941,54.67065],[32.47009,53.7617],[32.83539,53.3866],[32.22839,53.02635],[31.51978,53.16159],[31.84662,52.06262],[30.8139,51.93411],[30.4953,51.21032],[27.71301,51.46085],[25.85083,51.88666],[24.5874,51.81541],[23.51898,51.41634],[23.45581,51.99841],[23.15918,52.1874],[23.19351,52.37811]]]}},"czechia":{"type":"Feature","id":"czechia","properties":{},"geometry":{"type":"Polygon","coordinates":[[[14.3811,51.06902],[15.13916,51.08282],[16.42456,50.70863],[16.68823,50.32442],[16.78711,50.49246],[17.75391,50.35247],[18.58887,49.96536],[18.92944,49.51808],[18.1604,48.98022],[17.00684,48.61839],[15.13916,48.85749],[14.67773,48.55298],[13.85376,48.58206],[12.00806,50.05008],[11.92017,50.35948],[14.3811,51.06902]]]}},"de-berlin-brandenburg":{"type":"Feature","id":"de-berlin-brandenburg","properties":{},"geometry":{"type":"Polygon","coordinates":[[[11.32141,53.11711],[12.09595,53.36694],[12.88147,53.20274],[13.78235,53.50765],[14.16687,53.41608],[14.10645,53.28164],[14.29871,53.27507],[14.41956,53.32431],[14.19434,52.93871],[14.19434,52.82932],[14.57336,52.60972],[14.57336,52.36218],[14.71619,52.05249],[14.61182,51.84257],[14.76563,51.54975],[14.36462,51.519],[14.1449,51.54975],[13.99109,51.36835],[13.2605,51.39578],[13.07373,51.65211],[13.13965,51.86971],[12.67273,52.01532],[12.40356,52.03222],[12.22229,52.14697],[12.32117,52.50619],[12.16736,52.51956],[12.23877,52.87245],[11.60156,52.96849],[11.32141,53.11711]]]}},"germany":{"type":"Feature","id":"germany","properties":{},"geometry":{"type":"Polygon","coordinates":[[[7.05048,52.62973],[7.21252,53.20274],[6.56982,53.61858],[8.30772,55.1467],[8.6483,54.96421],[9.45305,54.83313],[9.95018,54.82838],[11.99913,54.44689],[13.3889,54.89162],[14.15245,54.47562],[14.26231,53.78037],[14.44359,53.27096],[14.36119,53.0668],[14.16344,52.97097],[14.13597,52.84508],[14.62486,52.60555],[14.5919,52.35463],[14.71825,52.24042],[14.74571,52.06516],[14.60838,51.83153],[14.74571,51.69554],[14.76768,51.54206],[14.98741,51.43261],[15.03136,51.27824],[14.94347,51.04744],[14.85558,50.88138],[14.77867,50.81548],[14.64684,50.85017],[14.5974,50.99215],[14.32823,51.07506],[14.32823,50.88138],[13.01537,50.49508],[12.48253,50.38663],[12.33421,50.18305],[12.1804,50.30952],[12.12547,50.25686],[12.22984,50.09856],[12.55394,49.92912],[12.4276,49.75199],[12.5045,49.68807],[12.77916,49.35286],[12.93297,49.36002],[13.03185,49.28841],[13.57018,48.96489],[13.80089,48.81319],[13.75694,48.52297],[13.52074,48.58842],[13.45482,48.57388],[13.40538,48.36994],[13.23509,48.28959],[12.99889,48.24571],[12.75169,48.12118],[12.9879,47.86385],[12.91649,47.71623],[13.04832,47.72362],[13.09776,47.67186],[13.0648,47.50885],[12.93846,47.47173],[12.77367,47.5793],[12.8286,47.60894],[12.70226,47.70144],[12.1859,47.70514],[12.16942,47.62005],[11.86729,47.60524],[11.63109,47.59412],[11.25755,47.40114],[10.98839,47.40486],[10.88402,47.52369],[10.67528,47.55707],[10.45006,47.54594],[10.46654,47.41973],[10.34019,47.3081],[10.19737,47.27457],[10.21385,47.38998],[10.10948,47.3751],[10.08202,47.46431],[9.84581,47.55336],[9.40636,47.55336],[9.09874,47.68388],[8.90236,47.65521],[8.85292,47.70329],[8.80348,47.74025],[8.76915,47.71993],[8.80486,47.70329],[8.79524,47.68388],[8.7307,47.69867],[8.73482,47.7227],[8.71284,47.7384],[8.7513,47.76887],[8.69637,47.76425],[8.65654,47.8067],[8.63594,47.76518],[8.61122,47.80947],[8.57002,47.79286],[8.48763,47.77902],[8.41621,47.71808],[8.41347,47.68111],[8.46428,47.65891],[8.53706,47.67001],[8.60985,47.67741],[8.63457,47.64966],[8.59886,47.64319],[8.61122,47.6219],[8.56865,47.60061],[8.56865,47.6219],[8.52745,47.64041],[8.45879,47.60801],[8.50273,47.58672],[8.38463,47.57004],[8.33107,47.57375],[8.29399,47.61542],[8.2061,47.62653],[8.10173,47.56819],[7.96852,47.5617],[7.92046,47.55429],[7.89024,47.59505],[7.8257,47.58949],[7.81197,47.56726],[7.6815,47.54038],[7.6403,47.56448],[7.69386,47.5756],[7.6815,47.59412],[7.64854,47.60061],[7.61421,47.58394],[7.50641,47.70237],[7.79205,48.60749],[8.22876,48.97481],[6.84174,49.17093],[6.37482,49.48597],[6.53961,49.80963],[6.1441,50.01833],[6.19835,50.21119],[6.41808,50.35159],[6.19835,50.63117],[6.02257,50.77034],[6.02257,51.07506],[6.24229,51.37778],[5.97862,51.81456],[6.1496,51.90022],[6.44073,51.85105],[6.828,51.95611],[6.68518,52.05587],[7.04773,52.23957],[6.99554,52.45768],[6.70166,52.48445],[6.72913,52.64973],[7.05048,52.62973]]]}},"spain":{"type":"Feature","id":"spain","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-19,29],[-13,30],[-13,29],[-14,27.8],[-19,27],[-19,29]]],[[[-8.89106,41.82289],[-10,44],[-4,44],[-1.77005,43.37605],[-1.71005,43.37569],[-1.71135,43.33125],[-1.72259,43.31318],[-1.68904,43.31291],[-1.68811,43.33413],[-1.64467,43.33372],[-1.64498,43.31332],[-1.60299,43.31295],[-1.60344,43.29266],[-1.56359,43.29212],[-1.56305,43.31338],[-1.47799,43.31284],[-1.36677,43.27614],[-1.35688,43.23815],[-1.37037,43.1713],[-1.44231,43.08336],[-1.41983,43.06036],[-1.37307,43.05117],[-1.36407,43.11159],[-1.30203,43.13522],[-1.23549,43.13325],[-1.27955,43.07744],[-1.19232,43.06496],[-1.00619,43.00778],[-0.94234,42.9749],[-0.7562,42.98213],[-0.71484,42.96108],[-0.69685,42.90314],[-0.55118,42.82207],[-0.50442,42.84845],[-0.42889,42.82009],[-0.31648,42.86558],[-0.14563,42.81086],[-0.03143,42.71249],[0.18618,42.7541],[0.30218,42.71777],[0.36422,42.74287],[0.44875,42.71447],[0.62769,42.7224],[0.64118,42.85767],[0.71492,42.88272],[0.9676,42.81811],[1.10878,42.79898],[1.17532,42.73429],[1.36326,42.74155],[1.41137,42.70939],[1.48061,42.71034],[1.4813,42.50107],[1.64436,42.50203],[1.64328,42.54245],[1.73041,42.54342],[1.73164,42.50118],[2.06386,42.50164],[2.06456,42.45902],[2.39693,42.45994],[2.39768,42.41784],[2.48048,42.41797],[2.48098,42.37594],[2.64479,42.37626],[2.64448,42.45924],[2.81133,42.45961],[2.81126,42.50104],[3.06388,42.50085],[3.06388,42.45915],[3.23078,42.45934],[5,40],[4,39],[-2.2,36.5],[-5.6,35.95],[-6,36],[-7.37535,37.15354],[-7.40832,37.16822],[-7.4481,37.39094],[-7.46963,37.40758],[-7.4647,37.45305],[-7.50197,37.51641],[-7.51916,37.52292],[-7.52196,37.57237],[-7.45013,37.66958],[-7.4249,37.75992],[-7.31666,37.83997],[-7.26833,37.98895],[-7.15368,38.01552],[-7.11771,38.05536],[-7.0143,38.02438],[-6.99632,38.10756],[-6.96147,38.20125],[-7.08062,38.15708],[-7.34027,38.44024],[-7.26383,38.73807],[-7.04352,38.87297],[-7.06151,38.90796],[-6.96934,39.01983],[-7.00081,39.08879],[-7.15368,39.09577],[-7.15255,39.16029],[-7.24472,39.19689],[-7.25596,39.28133],[-7.33689,39.35351],[-7.3279,39.45599],[-7.51449,39.58865],[-7.55271,39.67954],[-7.05027,39.67522],[-6.99519,39.81954],[-6.92213,39.87909],[-6.88616,40.02299],[-7.04128,40.13479],[-7.01767,40.26615],[-6.8086,40.34501],[-6.86818,40.44516],[-6.85356,40.60664],[-6.83783,40.87576],[-6.9536,41.03704],[-6.80186,41.03959],[-6.76814,41.13871],[-6.64112,41.26556],[-6.56244,41.26303],[-6.21737,41.5791],[-6.31628,41.64465],[-6.51523,41.64129],[-6.58717,41.68832],[-6.54783,41.85597],[-6.62988,41.91121],[-7.13345,41.94048],[-7.16829,41.87188],[-7.42569,41.78477],[-7.95398,41.84593],[-8.13045,41.78058],[-8.25185,41.90786],[-8.12933,42.03488],[-8.24848,42.1008],[-8.36762,42.05575],[-8.60704,42.03405],[-8.89106,41.82289]]]]}},"france":{"type":"Feature","id":"france","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[9.9,42.64836],[9.9,42.02785],[9.63227,41.43244],[9.36968,41.35052],[9.32602,41.3036],[9.27311,41.29196],[9.07196,41.26129],[8.94186,41.27688],[8.8742,41.26232],[8.84542,41.26311],[8.78782,41.25725],[7.3114,41.4242],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24593,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.26331,50.92504],[1.76605,51.17762],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.26696,43.39308],[9.8,43.1],[9.9,42.64836]]]]}},"east_midlands_uk":{"type":"Feature","id":"east_midlands_uk","properties":{},"geometry":{"type":"Polygon","coordinates":[[[0.03031,53.53488],[0.28564,53.56315],[0.48889,53.10722],[0.27299,52.82421],[0.24507,52.7845],[0.27219,52.77279],[0.18631,52.73533],[0.14206,52.7399],[0.08901,52.72361],[0.06361,52.72737],[0.04413,52.71436],[0.04883,52.68175],[0.02104,52.66476],[-0.03129,52.66151],[-0.06373,52.67521],[-0.08777,52.66676],[-0.10221,52.67218],[-0.14108,52.65149],[-0.18003,52.66054],[-0.19288,52.65242],[-0.20605,52.66805],[-0.26064,52.65139],[-0.28925,52.67025],[-0.335,52.67485],[-0.35023,52.66159],[-0.40569,52.64802],[-0.45065,52.65411],[-0.49897,52.63931],[-0.52006,52.64143],[-0.55014,52.61223],[-0.54419,52.59287],[-0.55813,52.59447],[-0.57192,52.58579],[-0.58149,52.59587],[-0.58865,52.58679],[-0.60303,52.58857],[-0.66093,52.56893],[-0.69783,52.5457],[-0.71564,52.52237],[-0.75723,52.51093],[-0.77488,52.51826],[-0.82013,52.51552],[-0.86871,52.52699],[-0.88346,52.51395],[-0.88214,52.49315],[-0.89806,52.4869],[-0.88241,52.47127],[-0.90065,52.45994],[-0.94219,52.46777],[-0.95192,52.47741],[-1.0007,52.47092],[-1.04452,52.44573],[-1.03429,52.43627],[-1.04987,52.42225],[-1.08439,52.43628],[-1.12928,52.41609],[-1.14947,52.39701],[-1.20141,52.39648],[-1.30715,52.49423],[-1.52226,52.57033],[-1.52716,52.58272],[-1.56075,52.59612],[-1.55447,52.61472],[-1.57139,52.6353],[-1.54714,52.64218],[-1.54245,52.65362],[-1.55281,52.66845],[-1.58965,52.68724],[-1.59082,52.69801],[-1.65505,52.69878],[-1.65662,52.72173],[-1.70372,52.7298],[-1.69687,52.75272],[-1.66654,52.78471],[-1.61113,52.78139],[-1.61435,52.78826],[-1.58887,52.79985],[-1.59183,52.80947],[-1.6105,52.81639],[-1.58536,52.8317],[-1.62672,52.85441],[-1.69028,52.86445],[-1.70061,52.86057],[-1.70435,52.86666],[-1.72527,52.85964],[-1.77712,52.88377],[-1.79092,52.88023],[-1.80186,52.88613],[-1.81171,52.88058],[-1.83295,52.8869],[-1.85422,52.93063],[-1.82982,52.94565],[-1.82678,52.97707],[-1.76257,52.99965],[-1.75775,53.01698],[-1.75978,53.03869],[-1.7847,53.04991],[-1.77566,53.05933],[-1.79424,53.08837],[-1.78373,53.10281],[-1.82144,53.13579],[-1.81254,53.15432],[-1.8393,53.1769],[-1.87403,53.19536],[-1.95671,53.21373],[-1.96237,53.22622],[-1.9896,53.21572],[-1.97486,53.23106],[-2.00948,53.26065],[-2.00679,53.35457],[-2.009,53.36201],[-2.03173,53.36573],[-2.03385,53.37517],[-2.00464,53.38633],[-1.99233,53.41519],[-2.02371,53.42055],[-2.02738,53.43233],[-2.01366,53.43988],[-2.00422,53.43592],[-2.00823,53.44155],[-1.98579,53.45523],[-1.98809,53.48033],[-1.97428,53.48838],[-1.97159,53.50434],[-1.92197,53.50995],[-1.92678,53.52095],[-1.91189,53.53803],[-1.89411,53.5336],[-1.87349,53.54041],[-1.84182,53.51989],[-1.82223,53.52108],[-1.80428,53.537],[-1.77188,53.53384],[-1.74155,53.54105],[-1.72318,53.55991],[-1.66945,53.5532],[-1.65103,53.56166],[-1.61581,53.56305],[-1.59636,53.57692],[-1.59109,53.60677],[-1.55023,53.60421],[-1.53078,53.59311],[-1.51867,53.5997],[-1.49656,53.59736],[-1.49512,53.60317],[-1.48371,53.59485],[-1.44763,53.61272],[-1.40036,53.59865],[-1.3767,53.60646],[-1.35612,53.59535],[-1.35143,53.58106],[-1.30782,53.57535],[-1.25803,53.59198],[-1.24825,53.61634],[-1.21778,53.62429],[-1.21602,53.642],[-1.1886,53.63583],[-1.15503,53.64319],[-1.13504,53.63254],[-1.12095,53.64688],[-0.99046,53.6612],[-0.94448,53.65868],[-0.86533,53.63769],[-0.89792,53.58325],[-0.90111,53.5687],[-0.89099,53.56654],[-0.90126,53.54788],[-0.89233,53.53738],[-0.94654,53.52732],[-0.95001,53.51363],[-0.93209,53.51065],[-0.93557,53.5025],[-0.90047,53.47513],[-0.92046,53.46446],[-0.87373,53.46146],[-0.87192,53.46629],[-0.79748,53.45504],[-0.78436,53.46336],[-0.78439,53.47665],[-0.77157,53.47918],[-0.76811,53.4989],[-0.75211,53.50051],[-0.73959,53.51991],[-0.62449,53.51282],[-0.62975,53.45819],[-0.55179,53.4595],[-0.47175,53.47485],[-0.48663,53.48045],[-0.48838,53.50484],[-0.40507,53.51759],[-0.40814,53.53208],[-0.43066,53.54631],[-0.50123,53.53744],[-0.46702,53.54894],[-0.429,53.5745],[-0.41967,53.56375],[-0.33594,53.5586],[-0.30342,53.59077],[-0.30093,53.61636],[-0.24847,53.59364],[-0.25139,53.58463],[-0.23466,53.58623],[-0.22255,53.56799],[-0.19169,53.56844],[-0.21988,53.53258],[-0.21059,53.53168],[-0.20408,53.51174],[-0.2106,53.48626],[-0.18856,53.48451],[-0.1818,53.46862],[-0.15368,53.46565],[-0.14923,53.44667],[-0.13188,53.43591],[-0.12034,53.43357],[-0.08221,53.45112],[-0.10786,53.46987],[-0.0898,53.47765],[-0.09548,53.48596],[-0.07526,53.48931],[-0.06493,53.51878],[-0.01452,53.51538],[0.03031,53.53488]]]}},"england-west-midlands":{"type":"Feature","id":"england-west-midlands","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-3.28493,52.44175],[-3.12706,52.96995],[-1.95817,53.27605],[-1.1222,52.36367],[-1.59859,51.90733],[-2.65611,51.7761],[-3.10848,51.95414],[-3.28493,52.44175]]]}},"united_kingdom":{"type":"Feature","id":"united_kingdom","properties":{"name":"United Kingdom","source":"OpenStreetMap"},"geometry":{"type":"Polygon","coordinates":[[[-7.24863,55.06999],[-6.96705,55.19847],[-6.59182,55.36664],[-9.93166,58.01975],[0.32957,61.43878],[2.43894,51.64531],[0.72508,50.42953],[-7.66848,49.03788],[-5.93264,51.46771],[-5.4053,53.54032],[-6.07527,54.0096],[-6.28173,54.11135],[-6.309,54.10669],[-6.31788,54.09098],[-6.33629,54.09472],[-6.33993,54.11189],[-6.3662,54.11374],[-6.36237,54.0766],[-6.37492,54.06914],[-6.37907,54.06909],[-6.37911,54.06907],[-6.37918,54.06902],[-6.39105,54.05885],[-6.41198,54.06306],[-6.44345,54.05649],[-6.45607,54.07252],[-6.47779,54.07709],[-6.4713,54.0663],[-6.51051,54.05268],[-6.53187,54.05968],[-6.55772,54.04917],[-6.58643,54.05757],[-6.59499,54.04462],[-6.62381,54.03646],[-6.66426,54.06917],[-6.66202,54.09283],[-6.64506,54.096],[-6.66127,54.12266],[-6.64886,54.12138],[-6.63961,54.13187],[-6.63436,54.16317],[-6.66539,54.19316],[-6.70601,54.20005],[-6.72106,54.18197],[-6.74076,54.18192],[-6.75617,54.19926],[-6.77562,54.19895],[-6.80097,54.21317],[-6.80042,54.2211],[-6.81617,54.22302],[-6.82774,54.26149],[-6.87804,54.27924],[-6.87229,54.28794],[-6.859,54.28191],[-6.85087,54.29728],[-6.87594,54.34641],[-6.90626,54.3503],[-6.91129,54.37474],[-6.93074,54.37575],[-6.9237,54.38284],[-6.95963,54.39221],[-6.98165,54.40946],[-6.99601,54.40538],[-7.0291,54.42137],[-7.05724,54.41108],[-7.07234,54.38839],[-7.10979,54.36824],[-7.10388,54.35574],[-7.15344,54.33501],[-7.18882,54.33765],[-7.17974,54.32046],[-7.17949,54.30924],[-7.19789,54.31106],[-7.21219,54.29962],[-7.17302,54.28613],[-7.17937,54.2726],[-7.16092,54.27371],[-7.14225,54.25559],[-7.15893,54.24396],[-7.14594,54.23957],[-7.14503,54.22473],[-7.17104,54.2176],[-7.18808,54.22492],[-7.1986,54.21578],[-7.22085,54.21581],[-7.23182,54.20557],[-7.24806,54.20446],[-7.24915,54.19817],[-7.233,54.19784],[-7.25942,54.19225],[-7.25828,54.17737],[-7.24028,54.1697],[-7.25812,54.16451],[-7.26296,54.13741],[-7.29195,54.11911],[-7.30891,54.13211],[-7.28551,54.13626],[-7.30149,54.14421],[-7.28379,54.15386],[-7.27997,54.16797],[-7.2913,54.17196],[-7.33956,54.14672],[-7.30533,54.12336],[-7.31867,54.11329],[-7.32713,54.12458],[-7.34602,54.11645],[-7.3632,54.1316],[-7.39181,54.12013],[-7.37279,54.13963],[-7.42078,54.13705],[-7.40959,54.15646],[-7.44192,54.15409],[-7.46841,54.14081],[-7.47919,54.12227],[-7.5281,54.13574],[-7.54738,54.12214],[-7.56576,54.12659],[-7.57454,54.14151],[-7.61043,54.14378],[-7.62966,54.1703],[-7.66425,54.18797],[-7.67659,54.18196],[-7.68829,54.20197],[-7.68543,54.20776],[-7.7394,54.20353],[-7.74858,54.20942],[-7.80368,54.20707],[-7.81173,54.20073],[-7.86017,54.21728],[-7.86046,54.26026],[-7.87322,54.27945],[-7.86187,54.29343],[-7.88087,54.29188],[-7.9017,54.30143],[-7.91095,54.29595],[-7.9616,54.31247],[-8.00093,54.35846],[-8.03129,54.35671],[-8.05733,54.36572],[-8.08416,54.39741],[-8.16026,54.44028],[-8.14291,54.45092],[-8.17751,54.46476],[-8.11467,54.46903],[-8.11324,54.4764],[-8.09148,54.47653],[-8.09868,54.48433],[-8.08933,54.48708],[-8.04265,54.48763],[-8.04185,54.50638],[-8.00601,54.54594],[-7.9703,54.54705],[-7.94973,54.53363],[-7.85055,54.53313],[-7.82402,54.54427],[-7.83325,54.55223],[-7.79659,54.57163],[-7.79341,54.58188],[-7.76212,54.58588],[-7.75151,54.59878],[-7.69725,54.61007],[-7.70877,54.63495],[-7.74165,54.61797],[-7.75797,54.62503],[-7.77236,54.62149],[-7.81366,54.64411],[-7.82828,54.63305],[-7.85213,54.63078],[-7.85669,54.65057],[-7.89164,54.65594],[-7.9099,54.66828],[-7.91381,54.67596],[-7.89766,54.68701],[-7.92089,54.69596],[-7.91804,54.70282],[-7.8796,54.70269],[-7.83665,54.73642],[-7.81761,54.73378],[-7.8047,54.7186],[-7.78875,54.71964],[-7.75006,54.70428],[-7.73551,54.71683],[-7.7116,54.72611],[-7.69723,54.72356],[-7.63657,54.75151],[-7.60944,54.74415],[-7.59117,54.74438],[-7.57919,54.75047],[-7.57865,54.74191],[-7.5698,54.74384],[-7.54826,54.74101],[-7.53859,54.751],[-7.54804,54.75711],[-7.54795,54.78835],[-7.52847,54.80757],[-7.47096,54.8348],[-7.44188,54.87561],[-7.45258,54.89849],[-7.44727,54.93524],[-7.39202,54.94545],[-7.4072,54.95521],[-7.4027,54.96689],[-7.40705,54.98294],[-7.39135,54.99774],[-7.40558,55.00332],[-7.37023,55.03476],[-7.34516,55.05083],[-7.31828,55.04507],[-7.29947,55.0561],[-7.28944,55.04771],[-7.27251,55.06357],[-7.24863,55.06999]]]}},"italy":{"type":"Feature","id":"italy","properties":{},"geometry":{"type":"Polygon","coordinates":[[[7.6,43.5],[7.49542,43.86523],[7.69043,44.0718],[7.69043,44.19796],[7.42676,44.15068],[6.9873,44.26094],[6.85547,44.55916],[7.03125,44.73113],[7.00928,44.87144],[6.72363,44.91814],[6.5918,45.12005],[7.09717,45.25942],[7.14111,45.41388],[6.96533,45.61404],[6.76758,45.79817],[7.03125,45.9053],[7.55859,45.9817],[7.77832,45.93587],[8.12988,46.13417],[8.08594,46.30141],[8.48145,46.46813],[8.61328,46.13417],[8.81104,46.10371],[9.05273,45.8288],[9.07471,46.11894],[9.27246,46.25585],[9.25049,46.43786],[9.44824,46.49839],[9.49219,46.31658],[9.68994,46.31658],[9.95361,46.36209],[10.06348,46.17983],[10.17334,46.25585],[10.0415,46.453],[10.08545,46.60417],[10.26123,46.66452],[10.45898,46.49839],[10.50293,46.61926],[10.39307,46.70974],[10.41504,46.86019],[10.61279,46.87521],[11.03027,46.76997],[11.16211,46.93526],[11.27197,46.99524],[11.53564,47.01023],[11.7334,46.99524],[12.2168,47.10004],[12.15088,46.93526],[12.43652,46.70974],[12.96387,46.61926],[13.73291,46.54375],[13.71094,46.42271],[13.40332,46.33176],[13.40332,46.22545],[13.66699,46.17983],[13.51318,46.05799],[13.64502,45.96642],[13.5791,45.85941],[13.93066,45.64477],[13.82629,45.5756],[13.6,45.6294],[12.9,45.4],[12.8,45],[18.9,40.3],[18.5,39],[15,36],[11,38],[9.6,43.2],[7.6,43.5]]]}},"IT_Lazio":{"type":"Feature","id":"IT_Lazio","properties":{},"geometry":{"type":"Polygon","coordinates":[[[13.23814,42.1301],[13.19363,42.15923],[13.17062,42.15169],[13.12434,42.17797],[13.08798,42.17886],[13.08575,42.14318],[13.0317,42.12309],[13.01946,42.07634],[13.05545,42.01736],[13.10194,42.00898],[13.10589,42.02698],[13.36437,41.92475],[13.384,41.90419],[13.35751,41.8694],[13.38052,41.81709],[13.4169,41.83467],[13.50508,41.8016],[13.52044,41.77297],[13.57182,41.7543],[13.66214,41.81144],[13.70555,41.78747],[13.72956,41.7989],[13.7629,41.7488],[13.81162,41.75426],[13.85645,41.73124],[13.89541,41.73405],[13.98311,41.66238],[14.01182,41.60835],[13.99895,41.57448],[14.02596,41.55567],[14.00526,41.53875],[14.0275,41.52321],[13.97291,41.49404],[13.99278,41.48208],[13.9779,41.46249],[13.90257,41.42273],[13.86123,41.41763],[13.8886,41.40081],[13.8688,41.36272],[13.88974,41.29748],[13.82898,41.28154],[13.83083,41.2502],[13.77126,41.24136],[13.45667,40.77769],[11.52381,41.03693],[11.44922,42.37798],[11.48889,42.43937],[11.61771,42.43604],[11.61626,42.48862],[11.56011,42.51595],[11.58852,42.54226],[11.57917,42.56803],[11.61401,42.55723],[11.64337,42.56635],[11.71111,42.61091],[11.73597,42.60666],[11.74975,42.63965],[11.80478,42.644],[11.77554,42.70951],[11.80156,42.70719],[11.81949,42.74543],[11.74602,42.78576],[11.77424,42.82107],[11.80685,42.79485],[11.8137,42.82267],[11.84851,42.84008],[11.90558,42.8325],[11.92743,42.78092],[11.97948,42.76459],[11.96293,42.72669],[11.9301,42.71295],[11.94133,42.6833],[12.03,42.64324],[12.10666,42.66464],[12.12406,42.64929],[12.16101,42.67691],[12.20434,42.66046],[12.24292,42.62906],[12.22819,42.61077],[12.24626,42.60256],[12.23866,42.57218],[12.27504,42.55991],[12.26676,42.53347],[12.29027,42.51904],[12.27477,42.50921],[12.30735,42.4973],[12.29041,42.49164],[12.32537,42.49476],[12.35123,42.47365],[12.39017,42.49819],[12.41905,42.49765],[12.41244,42.46756],[12.43038,42.45802],[12.41368,42.45517],[12.41365,42.4256],[12.4636,42.42909],[12.44469,42.39882],[12.51169,42.40311],[12.52874,42.36445],[12.60642,42.40245],[12.61481,42.46511],[12.64109,42.4678],[12.6495,42.44331],[12.67465,42.44242],[12.74156,42.47053],[12.71114,42.50079],[12.89273,42.5635],[12.88052,42.60935],[13.00524,42.61622],[13.02522,42.64],[13.06423,42.62427],[13.13,42.66053],[13.14645,42.64714],[13.17506,42.66707],[13.19025,42.73363],[13.25415,42.72145],[13.2645,42.74019],[13.28589,42.74049],[13.35851,42.69533],[13.35059,42.66968],[13.37022,42.6507],[13.4092,42.64383],[13.39493,42.59223],[13.29421,42.5705],[13.28454,42.58349],[13.24686,42.57367],[13.19228,42.58849],[13.15673,42.54102],[13.17934,42.48031],[13.11708,42.44489],[13.19508,42.39017],[13.15427,42.35797],[13.22737,42.32031],[13.23563,42.27871],[13.28229,42.23874],[13.33653,42.22338],[13.34238,42.19939],[13.3808,42.18142],[13.34871,42.17689],[13.35488,42.16769],[13.32819,42.16483],[13.30621,42.13923],[13.23814,42.1301]]]}},"IT_Roma_Capitale":{"type":"Feature","id":"IT_Roma_Capitale","properties":{},"geometry":{"type":"Polygon","coordinates":[[[11.6,42.16],[12.28,42.2],[12.52,42.31],[13.27,41.92],[13.15,41.58],[12.6,41.16],[11.6,42.16]]]}},"south_tyrol":{"type":"Feature","id":"south_tyrol","properties":{},"geometry":{"type":"Polygon","coordinates":[[[10.45624,46.86582],[10.73639,46.89211],[10.82977,46.80946],[10.96161,46.81322],[11.1319,46.99149],[11.49067,47.01233],[11.68121,47.04018],[11.7691,47.01023],[12.16736,47.115],[12.28546,47.08322],[12.18384,46.98213],[12.30469,46.85831],[12.37335,46.73421],[12.49969,46.67017],[12.34039,46.61737],[12.08771,46.64944],[12.0163,46.52297],[11.8515,46.49272],[11.66336,46.48657],[11.56929,46.34077],[11.399,46.25585],[11.18958,46.21072],[11.13739,46.2867],[11.20193,46.44732],[10.91904,46.42603],[10.61966,46.43833],[10.44113,46.49036],[10.36766,46.68854],[10.45624,46.86582]]]}},"trentino":{"type":"Feature","id":"trentino","properties":{},"geometry":{"type":"Polygon","coordinates":[[[10.49332,46.35641],[10.59219,46.46624],[10.76317,46.49697],[10.84076,46.45536],[11.07971,46.54469],[11.23627,46.50123],[11.21086,46.32559],[11.1779,46.27341],[11.23352,46.2473],[11.32416,46.30235],[11.5583,46.40378],[11.62628,46.5069],[11.83502,46.54233],[11.91399,46.44306],[11.85356,46.34124],[11.99158,46.18363],[11.84464,46.08466],[11.72791,46.07704],[11.69907,45.95592],[11.51093,45.97979],[11.28845,45.8814],[11.21567,45.76273],[11.16074,45.68316],[10.90256,45.66013],[10.82016,45.71097],[10.84076,45.81827],[10.51529,45.76752],[10.41504,46.00269],[10.51941,46.2112],[10.49332,46.35641]]]}},"norway":{"type":"Feature","id":"norway","properties":{},"geometry":{"type":"Polygon","coordinates":[[[25.98816,69.6179],[25.24109,68.60752],[20.42908,68.97318],[16.9519,67.9499],[13.77686,64.59561],[14.28223,64.47279],[14.08447,63.99524],[13.02979,64.10101],[12.00806,63.2633],[12.14813,61.6586],[12.87323,61.31245],[12.67548,61.0636],[12.26074,61.00241],[12.60681,60.50593],[12.49146,60.08128],[12.17285,59.88756],[11.87622,59.84895],[11.94214,59.69547],[11.6922,59.58998],[11.84601,59.25044],[11.64276,58.89471],[11.45325,58.88194],[11.44775,59.00168],[11.34888,59.11254],[11.18134,59.08009],[11.06186,58.97054],[8,57.5],[3,57.5],[3,83],[40,83],[35,71],[29.61365,69.28629],[27.98767,69.99711],[25.98816,69.6179]]]}},"poland":{"type":"Feature","id":"poland","properties":{},"geometry":{"type":"Polygon","coordinates":[[[14.03,52.84],[14.34,53.26],[14.13,54.16],[15.95,54.52],[16.31,54.76],[17.13,54.97],[18.29,55.08],[18.9,54.98],[19.69,54.5],[21.47,54.37],[22.9,54.46],[23.39,54.3],[24.01,53.17],[24.03,52.71],[23.29,52.3],[23.74,52.09],[23.64,51.61],[24.24,50.86],[24.11,50.41],[23.78,50.34],[22.77,49.55],[22.96,48.97],[22.18,49.1],[21.6,49.38],[20.93,49.24],[20.47,49.34],[20.12,49.13],[19.76,49.14],[19.45,49.51],[18.94,49.34],[18.48,49.85],[17.83,49.92],[17.54,50.21],[17.06,50.35],[17.08,50.18],[16.65,50.05],[16.11,50.41],[16.3,50.6],[16.01,50.54],[15.34,50.73],[15.14,50.93],[14.78,50.82],[14.94,51.27],[14.5,51.81],[14.66,52.05],[14.53,52.57],[14.03,52.84]]]}},"sweden":{"type":"Feature","id":"sweden","properties":{},"geometry":{"type":"Polygon","coordinates":[[[10.57159,58.2445],[10.63202,58.9245],[11.35712,59.12804],[11.53839,58.91174],[11.62079,58.92308],[11.75812,59.24341],[11.65649,59.61777],[11.85974,59.7121],[11.82129,59.84481],[11.95862,59.91098],[12.15363,59.91235],[12.44476,60.0895],[12.48322,60.32151],[12.56012,60.50458],[12.36511,60.71217],[12.19482,61.01572],[12.64801,61.09415],[12.82928,61.34276],[12.55463,61.55018],[12.42828,61.54495],[12.12341,61.71331],[12.28546,62.26664],[12.03278,62.60851],[12.10968,62.74718],[12.06024,62.89772],[12.18658,62.99765],[11.95587,63.28183],[12.18109,63.47873],[12.1344,63.59012],[12.659,63.9856],[12.90619,64.0722],[13.20831,64.10461],[13.9801,64.03014],[14.06525,64.46214],[13.60382,64.56968],[14.26025,65.11608],[14.31519,65.23831],[14.45251,65.31412],[14.47998,65.62656],[14.57886,65.80953],[14.49097,66.15163],[14.99634,66.17161],[15.4248,66.29337],[15.33691,66.51107],[16.04004,66.93221],[16.37512,67.06743],[16.35864,67.21467],[16.06201,67.42015],[16.1499,67.52957],[16.37512,67.55266],[16.70471,67.91688],[17.25952,68.13067],[17.88025,67.99523],[18.09448,68.19809],[18.06702,68.54432],[18.39661,68.58848],[19.00085,68.52019],[19.89075,68.39109],[20.13245,68.48798],[19.89075,68.55637],[20.28076,68.78613],[19.99512,69.06268],[20.62134,69.08033],[20.86853,69.03518],[21.24756,68.8437],[21.92322,68.60652],[22.90649,68.39514],[23.73596,67.96639],[23.5437,67.8362],[23.62061,67.47492],[23.79639,67.44544],[23.81287,67.26992],[23.63159,67.23806],[24.04358,66.82868],[23.91174,66.57448],[23.71399,66.31986],[24.22485,65.97333],[24.04358,65.64469],[21.00586,63.63894],[18.57239,61.83023],[19.18762,60.53297],[19.11346,60.18387],[19.66827,59.82687],[19.90173,58.07788],[18.78662,56.9869],[16.73218,56.05977],[15.0238,55.72711],[14.36462,55.31977],[13.1163,55.22276],[12.7002,55.30414],[12.82654,55.57834],[12.84851,55.72402],[12.79358,55.83214],[12.6123,56.0751],[12.49146,56.13331],[12.07947,56.30435],[11.35437,57.67185],[10.57159,58.2445]]]}},"canada_full":{"type":"Feature","id":"canada_full","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-140.99854,69.64945],[-120.9375,78.7335],[-91.05469,82.7432],[-75.58594,83.40004],[-63.45703,83.15311],[-59.32617,82.37915],[-63.76465,81.42049],[-67.19238,80.79583],[-73.21289,78.85307],[-74.9707,76.33114],[-61.34766,70.75797],[-50.1416,46.67959],[-65.98389,42.85181],[-66.95892,44.48769],[-66.9397,44.81692],[-67.13745,45.15493],[-67.26379,45.18591],[-67.31873,45.1278],[-67.43958,45.21881],[-67.44507,45.58329],[-67.79114,45.67164],[-67.78015,47.07012],[-68.19763,47.35743],[-68.39539,47.35743],[-68.37891,47.29413],[-68.90625,47.17478],[-69.06006,47.23449],[-69.08203,47.43552],[-69.22485,47.46524],[-70.00488,46.70974],[-70.05981,46.41514],[-70.18066,46.36209],[-70.3125,46.21025],[-70.24658,46.14178],[-70.3125,45.97406],[-70.26855,45.91294],[-70.42236,45.80583],[-70.42236,45.72152],[-70.71899,45.49865],[-70.62012,45.38302],[-70.80688,45.4293],[-70.85083,45.22848],[-71.00464,45.3367],[-71.1145,45.25169],[-71.26831,45.29035],[-71.41113,45.24395],[-71.5155,45.0153],[-74.81689,45.0153],[-75.31128,44.84808],[-75.7782,44.51218],[-75.82214,44.4377],[-76.43188,44.09942],[-76.79993,43.63011],[-78.68683,43.63806],[-79.19495,43.45292],[-79.07204,43.26521],[-79.05693,43.25671],[-79.04594,43.13807],[-79.06998,43.12103],[-79.06311,43.11652],[-79.05693,43.10951],[-79.07616,43.08393],[-79.07684,43.07691],[-79.01505,43.06839],[-78.99719,43.05785],[-79.02672,43.02071],[-79.01779,42.98456],[-78.98003,42.97099],[-78.96423,42.95843],[-78.93402,42.95542],[-78.91136,42.93883],[-78.90518,42.90011],[-78.93127,42.82361],[-80.07935,42.38289],[-81.27686,42.20818],[-82.39197,41.68112],[-82.68311,41.67701],[-83.07861,41.86547],[-83.15552,42.03909],[-83.12531,42.12064],[-83.13904,42.23462],[-83.07587,42.31185],[-82.98523,42.33418],[-82.81219,42.37478],[-82.63916,42.56117],[-82.59521,42.54903],[-82.52655,42.61375],[-82.41669,43.00063],[-82.13379,43.59631],[-82.51831,45.34442],[-83.59772,45.82114],[-83.43567,45.99696],[-83.57162,46.10847],[-83.65402,46.12275],[-83.76663,46.10466],[-83.82843,46.11989],[-83.89984,46.06084],[-83.95615,46.05989],[-83.974,46.1018],[-84.00833,46.11609],[-84.00696,46.14559],[-84.07974,46.18934],[-84.10995,46.24065],[-84.0976,46.25585],[-84.11545,46.26724],[-84.12094,46.31564],[-84.10309,46.32038],[-84.13467,46.36115],[-84.14841,46.42082],[-84.10995,46.50359],[-84.12781,46.531],[-84.14085,46.53241],[-84.17313,46.52722],[-84.19373,46.54092],[-84.226,46.53525],[-84.26582,46.49603],[-84.2926,46.49225],[-84.34135,46.50595],[-84.37225,46.50879],[-84.44023,46.49036],[-84.47662,46.45489],[-84.55353,46.45867],[-84.76776,46.62492],[-84.84741,46.88272],[-88.38501,48.31243],[-89.32983,47.96786],[-93.21899,48.64743],[-93.80127,48.5166],[-93.83423,48.63291],[-94.6637,48.75257],[-94.8175,49.32691],[-95.15259,49.38595],[-95.15533,49.00184],[-123.31879,49.00004],[-122.99469,48.7761],[-123.2666,48.69096],[-123.11279,48.37815],[-123.44238,48.22467],[-124.7168,48.49477],[-128.49609,48.74895],[-131.2207,53.61858],[-130.75928,54.73731],[-129.99023,55.27912],[-130.07813,56.10881],[-131.74805,56.63206],[-135.53833,59.80063],[-137.47192,58.90465],[-138.67493,59.78958],[-138.6969,59.90822],[-139.20227,60.09772],[-139.08142,60.35141],[-139.71863,60.33239],[-139.98779,60.18523],[-140.46021,60.30791],[-140.52063,60.22618],[-141.01501,60.30519],[-140.99854,69.64945]]]}},"ottawa_gatineau":{"type":"Feature","id":"ottawa_gatineau","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-76.23413,45.50827],[-76.12839,45.55829],[-75.26184,45.58041],[-75.13412,45.39652],[-75.42938,45.32512],[-75.35385,45.17816],[-75.82489,44.93564],[-76.34537,45.36855],[-76.23413,45.50827]]]}},"vancouver_metro":{"type":"Feature","id":"vancouver_metro","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.32,49],[-123.45,49.38],[-123.26,49.47],[-122.24,49.27],[-122.2,49],[-123.32,49]]]}},"boston":{"type":"Feature","id":"boston","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-70.5,41.91],[-71,41.91],[-71.42,42.05],[-71.57,42.18],[-71.64,42.4],[-71.57,42.52],[-71.35,42.64],[-71.1,42.7],[-70.5,42.7],[-70.5,41.91]]]}},"central_pa":{"type":"Feature","id":"central_pa","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-78.7,41.5],[-77,41.5],[-76,40],[-76,39.72],[-79.3,39.72],[-78.7,41.5]]]}},"chattanooga":{"type":"Feature","id":"chattanooga","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-85.634,34.743],[-85.634,35.282],[-84.933,35.282],[-84.933,34.743],[-85.634,34.743]]]}},"cleveland":{"type":"Feature","id":"cleveland","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-82.5,41.5],[-80.95,42],[-80.95,41],[-82.5,41],[-82.5,41.5]]]}},"colorado":{"type":"Feature","id":"colorado","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109.05,37],[-109.05,41],[-102.05,41],[-102.05,37],[-109.05,37]]]}},"dc_metro":{"type":"Feature","id":"dc_metro","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-77.04437,38.70266],[-77.27783,38.69409],[-77.57172,38.91668],[-77.61017,39.1258],[-77.27509,39.21523],[-77.08694,39.21204],[-76.87546,39.05119],[-76.69968,38.97863],[-76.71066,38.77657],[-76.84662,38.7048],[-77.04437,38.70266]]]}},"dfw_metro":{"type":"Feature","id":"dfw_metro","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-97.75,32.25],[-97.75,33.4],[-96,33.4],[-96,32.25],[-97.75,32.25]]]}},"grand_junction_co":{"type":"Feature","id":"grand_junction_co","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-109,39.4],[-108.1,39.4],[-107.8,39.16],[-107.8,38.7],[-108.1,38.5],[-109,39],[-109,39.4]]]}},"la_metro":{"type":"Feature","id":"la_metro","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-118.5,33.7],[-118.68,34.23],[-118.5,34.35],[-118,34.2],[-117.3,34.2],[-117.2,34.1],[-117.37,33.9],[-117.74,33.5],[-118.5,33.7]]]}},"minneapolis_st_paul_metro":{"type":"Feature","id":"minneapolis_st_paul_metro","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-93.801,44.578],[-93.801,45.348],[-92.666,45.348],[-92.666,44.578],[-93.801,44.578]]]}},"mt_vernon_wa":{"type":"Feature","id":"mt_vernon_wa","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.3,49],[-122,49],[-122,48],[-123.2,48.4],[-123.3,49]]]}},"nyc_metro":{"type":"Feature","id":"nyc_metro","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.73,40.64],[-73.95,41.38],[-73.6,40.95],[-73.25,41],[-73.25,40.6],[-74.43,40.43],[-74.73,40.64]]]}},"philly_metro":{"type":"Feature","id":"philly_metro","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.7,40.3],[-75.3,40.4],[-74.7,40.3],[-74.45,40.1],[-74.9,39.55],[-75.5,39.55],[-75.8,39.7218],[-76.23,39.7211],[-75.7,40.3]]]}},"phoenix":{"type":"Feature","id":"phoenix","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-113,32.7],[-113,34],[-111.1,34],[-111.1,32.7],[-113,32.7]]]}},"portland_me":{"type":"Feature","id":"portland_me","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-70.5,42.9],[-71,43.3],[-71,44.2],[-69.6,44.5],[-69,44],[-70.5,42.9]]]}},"portland_or":{"type":"Feature","id":"portland_or","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-124.4,44.8],[-124.4,46.3],[-121.5,46.3],[-121.5,44.8],[-124.4,44.8]]]}},"salt_lake_city":{"type":"Feature","id":"salt_lake_city","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-112.6,40.75],[-112.3,41.4],[-111.5,41.4],[-111.1,40.3],[-112,39.75],[-112.6,40.75]]]}},"seattle":{"type":"Feature","id":"seattle","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-122.15,47.26],[-122.33,47.26],[-122.54,47.33],[-122.52,47.46],[-122.45,47.55],[-122.45,47.8],[-121.2,47.8],[-121.43,47.38],[-121.43,47.14],[-121.94,47.14],[-122,47.17],[-122,47.17],[-122.1,47.19],[-122.15,47.26]]]}},"sf_bay_area":{"type":"Feature","id":"sf_bay_area","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-123.5,38.5],[-122.8,38.8],[-121.7,38.2],[-121.5,36.9],[-123,36.9],[-123.5,38.5]]]}},"south_sf_bay_area":{"type":"Feature","id":"south_sf_bay_area","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-121.4566,37.48249],[-121.21628,37.17673],[-121.20529,36.95757],[-121.49368,36.95757],[-121.5596,36.8928],[-121.98257,37.12419],[-122.27234,37.39635],[-122.13501,37.48903],[-121.4566,37.48249]]]}},"st_louis":{"type":"Feature","id":"st_louis","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-90.28,39.1],[-89.57,39.05],[-89.57,38.18],[-90.58,38],[-91.37,38.2],[-91.37,38.75],[-90.28,39.1]]]}},"tampa_bay":{"type":"Feature","id":"tampa_bay","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83,28.2],[-82.2,28.2],[-82.2,27.55],[-83,27.55],[-83,28.2]]]}},"usa_full":{"type":"Feature","id":"usa_full","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-124.76179,48.41301],[-123.22752,48.18499],[-123.32289,49.00429],[-96.01312,49.00605],[-95.11054,49.412],[-93.99811,49.00671],[-89.43531,47.98378],[-88.34922,48.29633],[-87.50645,48.01427],[-83.2814,46.13885],[-82.17616,43.58854],[-82.66248,41.68895],[-79.00601,42.80053],[-79.15798,43.44626],[-78.76239,43.62496],[-76.90231,43.80246],[-75.07988,44.98029],[-72.02225,45.00598],[-71.41227,45.25488],[-70.46149,46.21766],[-69.25051,47.51223],[-67.75966,47.099],[-66.94528,44.71049],[-69.84893,43.26199],[-69.87974,40.99205],[-72.00202,40.99125],[-74.02112,39.57279],[-75.41474,35.05319],[-80.02453,32.01613],[-79.89011,26.85507],[-80.02,24.0071],[-84.01601,24.00527],[-84.01656,25.01258],[-81.99666,25.01349],[-81.9972,25.98268],[-84.01879,28.99618],[-86.02775,30.00475],[-88.01625,30.00389],[-88.01567,28.99443],[-90.90285,28.85645],[-93.74053,29.47421],[-95.55633,28.58761],[-96.80617,27.79782],[-96.95553,25.98216],[-97.43502,25.8266],[-98.01091,25.9928],[-99.23511,26.4476],[-100.00624,28.00822],[-101.25529,29.48105],[-102.1514,29.74757],[-102.71736,29.39206],[-103.25189,28.89087],[-104.58819,29.69979],[-105.02053,30.5361],[-106.20525,31.4467],[-106.28689,31.56133],[-106.42932,31.75206],[-106.48421,31.74645],[-106.53072,31.78209],[-108.18711,31.77551],[-108.19927,31.326],[-111.00893,31.33601],[-114.86123,32.47999],[-117.67593,32.46302],[-119.97759,33.00641],[-122.53697,36.85661],[-124.99343,40.05576],[-124.60595,45.90245],[-124.76179,48.41301]]],[[[-160.57876,22.50629],[-159.00937,22.50702],[-157.50474,21.9985],[-156.29276,21.22259],[-154.68902,19.88057],[-154.62178,18.7587],[-155.99619,18.77902],[-157.50832,20.9958],[-158.74706,21.24398],[-160.57822,21.49846],[-160.57876,22.50629]]],[[[-167.1572,68.722],[-164.9717,68.9947],[-163.0218,69.9707],[-160.4136,70.7398],[-156.1769,71.5633],[-140.9684,69.9535],[-140.9874,61.0119],[-139.1716,60.4127],[-138.0072,59.9918],[-135.123,59.7566],[-131.9759,56.9995],[-130.0071,57.0001],[-130.0044,54.0043],[-133.9948,54.0032],[-138.515,57.9986],[-138.516,58.9953],[-151.5013,58.992],[-151.5003,57.9988],[-151.9963,55.9992],[-158.0191,55.0028],[-159.0076,55.0025],[-162.4025,53.9567],[-171.4689,51.8215],[-177.9993,51.2554],[-178.0001,52.2446],[-173.8197,59.7401],[-172.5143,63.8767],[-169.0075,64.9988],[-169.0087,66.0015],[-168.0022,66.0018],[-164.8554,67.0255],[-167.1572,68.722]]],[[[-68.2,17.8],[-67.9,18.67],[-65.33,18.57],[-64.64,18.36],[-64.32,17.38],[-68.2,17.8]]],[[[146.2,15.4],[144.8,12.9],[144.2,13.2],[145.7,15.6],[146.2,15.4]]],[[[180,52.2],[180,51],[172,52.5],[172,53.5],[180,52.2]]]]}},"wyoming":{"type":"Feature","id":"wyoming","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.05,41],[-111.05,45],[-104.05,45],[-104.05,41],[-111.05,41]]]}},"australia_full":{"type":"Feature","id":"australia_full","properties":{},"geometry":{"type":"Polygon","coordinates":[[[146.07422,-44.43378],[131.66016,-44.65302],[124.54102,-41.44273],[116.45508,-39.36828],[108.80859,-39.16414],[103.18359,-27.60567],[95.27344,-24.04646],[96.30615,-11.15685],[106.25977,-9.92557],[116.47705,-13.98738],[122.77222,-11.65224],[126.43066,-11.48002],[129.26514,-9.92557],[134.89014,-9.92557],[139.46045,-10.14193],[141.55334,-9.99861],[141.7868,-9.77132],[142.229,-9.67115],[142.72614,-9.552],[143.30017,-9.39216],[144.24774,-9.24851],[144.44824,-9.59533],[149.5459,-12.68321],[154.90723,-18.02053],[156.42334,-21.55528],[158.02734,-24.68695],[160.0708,-26.03704],[167.34375,-26.6671],[170.354,-29.11378],[168.2666,-30.63791],[160.15869,-34.03445],[152.18262,-38.41056],[149.94141,-43.51669],[146.07422,-44.43378]]]}},"argentina":{"type":"Feature","id":"argentina","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-73.14602,-49.18818],[-72.91615,-48.93261],[-72.53201,-48.80072],[-72.58755,-48.48542],[-72.22624,-48.32339],[-72.49784,-47.96155],[-72.33315,-47.44938],[-71.86801,-47.23376],[-71.94851,-46.80983],[-71.64665,-46.68783],[-71.79939,-46.19141],[-71.6147,-45.97522],[-71.79762,-45.62288],[-71.46813,-45.4921],[-71.32472,-45.306],[-71.56043,-44.97863],[-72.04094,-44.90019],[-72.07396,-44.78023],[-71.46969,-44.73753],[-71.23704,-44.79082],[-71.13226,-44.4711],[-71.36469,-44.38958],[-71.80731,-44.42036],[-71.84736,-44.11002],[-71.64902,-43.94552],[-71.75129,-43.78527],[-71.60784,-43.62836],[-71.93082,-43.45685],[-71.76157,-43.1645],[-72.14281,-42.8979],[-72.1812,-42.69735],[-72.023,-42.41766],[-72.17288,-42.14043],[-71.72931,-42.12447],[-71.91021,-41.34113],[-71.8196,-41.06038],[-71.96387,-40.71955],[-71.8414,-40.4521],[-71.65704,-40.36426],[-71.82818,-40.20778],[-71.59266,-39.90123],[-71.67811,-39.56486],[-71.39497,-39.34179],[-71.42542,-38.92164],[-70.92524,-38.76298],[-70.84044,-38.54138],[-70.97623,-38.44222],[-70.98292,-38.10477],[-71.21191,-37.68901],[-71.11983,-37.4585],[-71.21555,-37.27261],[-71.09237,-37.11444],[-71.11982,-36.69792],[-71.03513,-36.47333],[-70.71285,-36.42687],[-70.70501,-36.27229],[-70.42451,-36.15581],[-70.38755,-35.60868],[-70.43201,-35.31842],[-70.58358,-35.27831],[-70.36203,-35.13645],[-70.21683,-34.61145],[-70.01089,-34.41389],[-70.03094,-34.28805],[-69.79507,-34.24304],[-69.90417,-33.77143],[-69.7705,-33.3611],[-70.00282,-33.32294],[-70.08089,-33.02919],[-70.00121,-32.8846],[-70.17038,-32.62555],[-70.14899,-32.46585],[-70.31918,-32.27335],[-70.35277,-32.0257],[-70.2106,-31.95769],[-70.46072,-31.84116],[-70.56691,-31.60016],[-70.49734,-31.12216],[-70.40805,-31.16633],[-70.23998,-30.61575],[-70.11719,-30.43102],[-69.89853,-30.35557],[-69.87492,-29.7043],[-70.01808,-29.38321],[-69.78724,-29.13008],[-69.68114,-28.47172],[-69.45679,-28.18357],[-69.17254,-27.97088],[-68.94231,-27.52325],[-68.8412,-27.15464],[-68.29854,-27.0389],[-68.2638,-26.91623],[-68.58734,-26.49294],[-68.55754,-26.2871],[-68.38108,-26.17822],[-68.57599,-25.42894],[-68.4999,-25.16149],[-68.34279,-25.1124],[-68.56789,-24.79739],[-68.26201,-24.40457],[-67.32231,-24.0344],[-66.99052,-23.00044],[-67.18066,-22.8138],[-67.02827,-22.54089],[-66.78247,-22.43778],[-66.73899,-22.23893],[-66.28793,-22.08605],[-66.24277,-21.79408],[-66.07589,-21.83493],[-65.74764,-22.10912],[-64.99322,-22.08239],[-64.53579,-22.29137],[-64.29933,-22.86509],[-64.24332,-22.56039],[-63.93139,-22],[-62.80617,-22],[-62.7913,-22.16193],[-62.3009,-22.48659],[-62.20671,-22.70418],[-61.73612,-23.23432],[-61.08824,-23.61393],[-60.9899,-23.81808],[-60.37353,-24.024],[-60.03941,-24.01156],[-59.47554,-24.33261],[-59.35397,-24.47821],[-58.67243,-24.83192],[-58.24167,-24.92801],[-57.76089,-25.17193],[-57.555,-25.4484],[-57.74064,-25.65045],[-57.89112,-25.9662],[-58.08473,-26.11185],[-58.22103,-26.41403],[-58.18996,-26.64518],[-58.31991,-26.85821],[-58.64913,-27.12662],[-58.59905,-27.29984],[-57.87482,-27.27527],[-57.48754,-27.44418],[-56.96564,-27.50202],[-56.84926,-27.6063],[-56.60117,-27.42102],[-56.3749,-27.58903],[-56.29432,-27.42003],[-56.06276,-27.306],[-55.73692,-27.44516],[-55.6057,-27.16241],[-55.42284,-26.99528],[-54.78695,-26.63111],[-54.61874,-26.20893],[-54.67933,-25.99524],[-54.65698,-25.67619],[-54.5842,-25.58952],[-54.4812,-25.62543],[-54.108,-25.495],[-53.86217,-25.65902],[-53.83619,-25.97166],[-53.6411,-26.21559],[-53.73094,-26.5097],[-53.67249,-26.91252],[-53.84355,-27.16453],[-53.959,-27.15804],[-54.21736,-27.38603],[-54.673,-27.57],[-54.814,-27.533],[-54.936,-27.772],[-55.38728,-27.98524],[-55.76677,-28.23982],[-55.69902,-28.42637],[-55.88091,-28.4715],[-56.29651,-28.80272],[-56.42475,-29.07897],[-56.59315,-29.12516],[-56.70164,-29.35913],[-57.328,-29.972],[-57.64923,-30.20184],[-57.63687,-30.33197],[-57.85924,-30.47701],[-57.8096,-30.91332],[-58.08141,-31.45457],[-57.98082,-31.58691],[-58.20653,-31.86773],[-58.10645,-32.24002],[-58.20464,-32.46055],[-58.0841,-32.99782],[-58.36693,-33.12177],[-58.49375,-33.57857],[-58.29507,-34.17809],[-57.9345,-34.4519],[-55.9,-35.6],[-57,-39],[-61,-41],[-63.5,-55],[-66.67094,-55.11906],[-67.27285,-54.90511],[-67.95071,-54.87373],[-68.60967,-54.91369],[-68.60676,-52.65902],[-68.41869,-52.3325],[-69.19014,-52.15044],[-69.48632,-52.15165],[-69.9955,-52.00074],[-71.92259,-51.99991],[-72.29907,-51.69791],[-72.28621,-50.65987],[-72.72636,-50.61667],[-73.06995,-50.78909],[-73.32848,-50.5716],[-73.52199,-50.15397],[-73.44481,-49.79226],[-73.53933,-49.49825],[-73.47299,-49.20464],[-73.14602,-49.18818]]]}},"bolivia":{"type":"Feature","id":"bolivia","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-60.17487,-16.26675],[-58.32092,-16.31948],[-58.47336,-16.74472],[-58.39371,-17.18081],[-57.79152,-17.55501],[-57.71187,-17.73103],[-57.55463,-18.22348],[-57.72079,-18.89914],[-57.70775,-19.0381],[-58.11768,-19.75313],[-57.85675,-19.96754],[-58.15338,-20.15201],[-58.17535,-19.83066],[-59.07074,-19.28846],[-59.97025,-19.29494],[-61.78848,-19.65358],[-62.57401,-21.99972],[-63.93082,-22.00736],[-64.24942,-22.60957],[-64.31808,-22.8806],[-64.56528,-22.36595],[-64.62021,-22.21856],[-64.99649,-22.08628],[-65.77446,-22.10027],[-65.92552,-21.93222],[-66.04774,-21.91884],[-66.04225,-21.86022],[-66.2273,-21.78437],[-66.3121,-22.1219],[-66.74057,-22.23635],[-66.7955,-22.44213],[-67.18002,-22.81353],[-67.56351,-22.90085],[-67.81174,-22.87934],[-68.17566,-21.3252],[-68.405,-20.9499],[-68.54095,-20.92681],[-68.55606,-20.7285],[-68.43796,-20.63857],[-68.74557,-20.46369],[-68.72772,-20.08173],[-68.56293,-20.05077],[-68.53134,-19.85779],[-68.69064,-19.74667],[-68.41873,-19.41544],[-68.9296,-18.97448],[-69.12186,-18.14128],[-69.46793,-17.50852],[-69.46793,-17.37489],[-69.63547,-17.27787],[-69.01199,-16.66053],[-69.03877,-16.58487],[-68.93509,-16.2061],[-69.16718,-16.22259],[-69.40201,-15.62634],[-69.13422,-15.23516],[-69.35806,-14.96933],[-68.97903,-14.21979],[-68.87466,-12.88745],[-68.65768,-12.49088],[-69.57264,-10.94456],[-68.74806,-11.00835],[-68.75167,-11.01762],[-68.75201,-11.03716],[-68.76592,-11.04963],[-68.70815,-11.14253],[-68.54576,-11.11036],[-68.24295,-10.95872],[-68.08502,-10.69165],[-67.86736,-10.64036],[-67.71629,-10.71459],[-67.6775,-10.60341],[-67.65947,-10.61792],[-67.58446,-10.50402],[-67.43614,-10.44966],[-67.40593,-10.38314],[-67.31461,-10.37774],[-67.32216,-10.32438],[-67.1953,-10.32277],[-67.18869,-10.33983],[-67.17093,-10.33814],[-66.57921,-9.90392],[-65.86441,-9.75981],[-65.56503,-9.82477],[-65.44968,-9.67318],[-65.29449,-9.85589],[-65.39474,-10.54722],[-65.35629,-10.78474],[-65.2684,-10.88658],[-65.29861,-11.32656],[-65.14481,-11.70939],[-64.36752,-12.4587],[-63.67538,-12.46675],[-61.64841,-13.53453],[-61.06339,-13.52919],[-60.4303,-13.88608],[-60.23804,-15.09864],[-60.57312,-15.09599],[-60.24353,-15.47221],[-60.17487,-16.26675]]]}},"bahia":{"id":"bahia","type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-46.26343,-11.52309],[-46.40625,-11.53923],[-46.51062,-11.50425],[-46.604,-11.3481],[-46.61224,-11.25653],[-46.46668,-11.1811],[-46.42822,-11.02208],[-46.32935,-10.9331],[-46.19751,-10.65521],[-45.84045,-10.47701],[-45.82672,-10.35275],[-45.74707,-10.34194],[-45.70038,-10.26087],[-45.72784,-10.15815],[-45.59326,-10.09326],[-45.41199,-10.43379],[-45.45593,-10.55262],[-45.37903,-10.72538],[-45.15381,-10.8387],[-44.90112,-10.90883],[-44.60999,-10.66601],[-44.34631,-10.54182],[-44.13757,-10.63362],[-44.05518,-10.39057],[-43.96179,-10.42839],[-43.78601,-10.15275],[-43.69263,-10.03918],[-43.69812,-9.95262],[-43.64868,-9.82274],[-43.76404,-9.76861],[-43.8794,-9.54117],[-43.68713,-9.41655],[-43.4729,-9.24851],[-43.3081,-9.37861],[-43.04443,-9.36235],[-42.8302,-9.60617],[-42.33581,-9.31899],[-41.90735,-9.23767],[-41.7865,-9.09125],[-41.40198,-8.71136],[-41.14929,-8.70593],[-41.03943,-8.83351],[-41.01471,-8.82808],[-40.92407,-8.83894],[-40.8197,-9.07226],[-40.68237,-9.14277],[-40.66864,-9.26478],[-40.7428,-9.30002],[-40.75653,-9.42197],[-40.62744,-9.47615],[-40.53131,-9.41384],[-40.47363,-9.39758],[-40.42694,-9.34338],[-40.36102,-9.37319],[-40.29785,-9.09396],[-40.23468,-9.04243],[-40.14679,-9.10481],[-40.07813,-9.05057],[-39.98749,-9.05599],[-39.8996,-8.95833],[-39.90509,-8.82808],[-39.68262,-8.77923],[-39.70459,-8.67063],[-39.65241,-8.65977],[-39.41345,-8.50769],[-39.2926,-8.54843],[-39.23492,-8.6299],[-38.96576,-8.76837],[-38.86963,-8.76837],[-38.71307,-8.83622],[-38.68835,-8.90678],[-38.66913,-8.98275],[-38.61694,-8.96376],[-38.60596,-8.86065],[-38.5675,-8.81723],[-38.47687,-8.84708],[-38.50983,-8.94205],[-38.42194,-9.037],[-38.33679,-8.97461],[-38.28461,-9.00716],[-38.31757,-9.06684],[-38.21045,-9.36235],[-38.04565,-9.4599],[-38.02368,-9.8498],[-37.89185,-9.96885],[-37.74902,-10.31492],[-37.8479,-10.37977],[-37.78198,-10.64981],[-37.93579,-10.73617],[-38.13354,-10.6822],[-38.26538,-10.79014],[-38.02368,-11.31848],[-37.73804,-11.57691],[-37.3645,-11.48002],[-38.50159,-18.11975],[-39.65515,-18.35453],[-40.25391,-17.96828],[-40.23193,-17.79053],[-40.61646,-17.38209],[-40.51758,-16.89917],[-40.13306,-16.45716],[-39.90234,-16.04581],[-40.68237,-15.68651],[-41.08887,-15.73939],[-41.35254,-15.73939],[-41.37451,-15.49603],[-41.80298,-15.09334],[-42.04468,-15.18878],[-43.24219,-14.67925],[-43.50586,-14.78551],[-43.92334,-14.63674],[-43.7915,-14.31761],[-44.35181,-14.24309],[-44.65942,-14.38148],[-45.78003,-15.13576],[-46.10962,-15.29478],[-46.06567,-14.87047],[-45.92285,-14.38148],[-46.24146,-14.14723],[-46.32935,-13.11158],[-46.38428,-12.02858],[-46.26343,-11.52309]]]}},"brazil":{"type":"Feature","id":"brazil","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-51.56433,4.29711],[-28.4491,1.04914],[-37.67761,-21.04862],[-52.94861,-34.05721],[-53.56384,-33.71063],[-53.58581,-33.23409],[-53.16833,-32.81036],[-54.11316,-32.08723],[-55.73914,-30.85036],[-56.11267,-31.18931],[-56.11267,-30.90694],[-57.0575,-30.14988],[-57.23328,-30.32073],[-57.73865,-30.26381],[-55.98083,-28.5411],[-54.94812,-27.68839],[-53.80554,-27.18136],[-53.7616,-26.73089],[-53.87146,-26.00249],[-54.20105,-25.88394],[-54.6405,-25.88394],[-54.28894,-24.13171],[-55.43701,-24.18685],[-55.87647,-22.3704],[-58.07373,-22.08564],[-58.24402,-20.06109],[-57.71668,-17.98396],[-58.43628,-17.18278],[-58.50769,-16.38866],[-60.1831,-16.29905],[-60.26001,-15.14637],[-60.49072,-14.09396],[-60.94116,-13.63531],[-61.85303,-13.5926],[-63.58887,-12.56529],[-64.22058,-12.55992],[-65.20386,-11.8996],[-65.4126,-9.74154],[-66.82983,-10.1203],[-68.17566,-10.92501],[-70.6366,-11.18379],[-70.6366,-9.62783],[-71.42761,-9.97426],[-72.74597,-9.88769],[-73.97644,-7.10634],[-72.70752,-4.67498],[-70.15869,-4.23686],[-69.67529,-1.03266],[-70.19714,1.75205],[-67.56042,1.83989],[-66.94519,0.69761],[-63.78113,1.83989],[-64.84131,4.36832],[-63.25378,3.59566],[-60.24353,5.20584],[-60.03479,4.98698],[-59.57886,3.81493],[-59.89746,3.26118],[-60.05676,2.76199],[-59.9469,2.2626],[-59.77661,2.23515],[-59.77661,1.75754],[-58.64502,1.55987],[-55.87647,2.61384],[-53.10791,2.35041],[-51.56433,4.29711]]]}},"df_br":{"id":"df_br","type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-48.20114,-15.49868],[-47.42111,-15.5],[-47.38953,-15.56484],[-47.32361,-15.58865],[-47.33047,-15.63891],[-47.31125,-15.73278],[-47.36755,-15.83189],[-47.3703,-15.927],[-47.36893,-15.99698],[-47.30988,-16.04317],[-48.27805,-16.04713],[-48.24921,-15.94152],[-48.2753,-15.93096],[-48.29041,-15.83189],[-48.22998,-15.77772],[-48.21899,-15.71163],[-48.24097,-15.70898],[-48.23547,-15.66535],[-48.22449,-15.63097],[-48.20251,-15.62568],[-48.20114,-15.49868]]]}},"chile":{"type":"Feature","id":"chile","properties":{},"geometry":{"type":"MultiPolygon","coordinates":[[[[-110,-28],[-110,-26],[-109,-26],[-109,-28],[-110,-28]],[[-69.46999,-17.50394],[-69.67049,-17.66692],[-69.80164,-17.65253],[-69.83047,-17.71337],[-69.82704,-17.75196],[-69.80919,-17.8023],[-69.75494,-17.98135],[-69.82018,-18.1191],[-69.86618,-18.17325],[-69.96918,-18.26065],[-70.19165,-18.33106],[-72.5,-18.3],[-78,-53],[-68,-58],[-65.80412,-55.20392],[-67.30412,-54.90395],[-68.60412,-54.90395],[-68.60412,-52.65417],[-68.42212,-52.39063],[-68.42268,-52.33665],[-68.57786,-52.32931],[-68.58833,-52.31016],[-68.84205,-52.28181],[-69.19421,-52.15445],[-69.49016,-52.15561],[-70.00412,-52.00423],[-71.92097,-52.00391],[-71.95221,-51.97896],[-72.04212,-51.96756],[-71.93324,-51.91854],[-72.03255,-51.8118],[-72.32412,-51.60426],[-72.34531,-50.65403],[-73.32687,-50.52827],[-73.51742,-49.89065],[-72.98733,-48.99351],[-72.68005,-48.89271],[-72.53174,-48.77746],[-72.56195,-48.50569],[-72.24472,-48.34986],[-72.46788,-47.7451],[-72.0504,-47.34557],[-71.87325,-47.12505],[-71.9426,-46.81204],[-71.64974,-46.68289],[-71.82037,-46.1256],[-71.64459,-46.00936],[-71.75291,-45.55168],[-71.47104,-45.49829],[-71.54383,-45.40436],[-71.3895,-45.35287],[-71.33354,-45.28286],[-71.41148,-45.19486],[-71.56494,-44.98326],[-72.03323,-44.88409],[-72.03495,-44.76989],[-71.24908,-44.80425],[-71.07056,-44.47985],[-71.81213,-44.30714],[-71.58417,-43.64303],[-71.8856,-43.45765],[-71.72596,-43.19066],[-72.14344,-42.90363],[-72.04765,-42.54322],[-72.04182,-42.40546],[-72.17194,-42.14686],[-71.73051,-42.11516],[-71.92612,-40.72332],[-71.80252,-40.42081],[-71.70639,-40.425],[-71.66794,-40.30571],[-71.77643,-40.268],[-71.39465,-38.92843],[-70.90816,-38.67251],[-71.189,-37.74167],[-71.04858,-36.49087],[-70.95932,-36.50246],[-70.37876,-36.04743],[-70.43884,-35.32549],[-70.58441,-35.27646],[-70.53875,-35.20551],[-70.3791,-35.17241],[-69.87854,-34.15614],[-69.8703,-33.57458],[-69.78207,-33.33282],[-69.86721,-33.28663],[-69.99561,-33.3268],[-70.08453,-33.03716],[-70.3125,-32.12562],[-70.22736,-31.93934],[-70.46185,-31.84548],[-70.53102,-31.3724],[-70.07904,-30.38828],[-69.88678,-30.35747],[-69.81262,-30.14869],[-69.93347,-30.10118],[-69.94308,-29.24087],[-68.78609,-27.10803],[-68.56567,-27.17525],[-68.25256,-26.96492],[-68.57666,-26.49147],[-68.5437,-26.27987],[-68.37067,-26.17639],[-68.48328,-25.15399],[-68.32397,-25.09928],[-68.5437,-24.79047],[-68.46405,-24.62829],[-68.24432,-24.39338],[-67.32216,-24.03768],[-66.98639,-23.00012],[-67.17728,-22.81416],[-67.55768,-22.89642],[-67.81586,-22.86099],[-68.19489,-21.27018],[-68.405,-20.93964],[-68.53546,-20.8524],[-68.47504,-20.64949],[-68.72772,-20.46948],[-68.73322,-20.38454],[-68.67279,-20.34591],[-68.76549,-20.08237],[-68.56842,-20.05658],[-68.52997,-19.85262],[-68.68309,-19.72793],[-68.40225,-19.41091],[-68.92548,-18.97253],[-69.11087,-18.1328],[-69.06143,-18.06231],[-69.29352,-17.96698],[-69.30931,-17.9121],[-69.30794,-17.83956],[-69.34708,-17.7343],[-69.47205,-17.61065],[-69.46999,-17.50394]]]]}},"bogota":{"type":"Feature","id":"bogota","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-74.38,4.7],[-74.17,5],[-73.75,5],[-73.9,4.37],[-74.25,4.31],[-74.38,4.7]]]}},"colombia":{"type":"Feature","id":"colombia","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-75.8,11.8],[-71.3,12.7],[-70.9,11.9],[-71.98242,11.65762],[-72.2406,11.14607],[-72.45483,11.10295],[-72.8833,10.43379],[-72.94922,9.83898],[-73.31177,9.20514],[-72.99866,9.29189],[-72.94373,9.09125],[-72.76245,9.12379],[-72.65259,8.61633],[-72.39716,8.36098],[-72.34497,8.00484],[-72.4054,8.04563],[-72.49054,7.945],[-72.4411,7.89875],[-72.45209,7.53676],[-72.43835,7.40605],[-72.18567,7.38426],[-72.14996,7.32161],[-72.18018,7.24532],[-72.03461,7.0273],[-71.12,7.02457],[-71.09528,6.98641],[-70.9964,6.98641],[-70.77942,7.09817],[-70.5542,7.07636],[-70.30701,6.93461],[-70.11475,6.98095],[-69.43016,6.10778],[-69.34914,6.13987],[-69.31,6.0873],[-69.23378,6.08047],[-69.17404,6.15011],[-69.03877,6.22384],[-68.66455,6.14055],[-67.80762,6.288],[-67.45056,6.21155],[-67.47803,6.10232],[-67.40662,6.00946],[-67.60437,5.7909],[-67.63184,5.4629],[-67.82959,5.31524],[-67.79114,4.28068],[-67.62085,3.74915],[-67.5,3.78204],[-67.29126,3.36537],[-67.86255,2.82234],[-67.58789,2.79491],[-67.1759,2.33395],[-66.85181,1.23037],[-67.08801,1.16172],[-67.16766,1.83989],[-67.34894,1.97715],[-67.36816,2.22417],[-67.44781,2.21868],[-67.56866,2.054],[-67.80487,1.98813],[-67.91199,1.81793],[-68.18939,2.01009],[-68.2663,1.85087],[-68.16193,1.73008],[-69.83459,1.71361],[-69.8291,1.08209],[-69.19739,1.06561],[-69.15344,0.62621],[-69.48303,0.73057],[-69.79065,0.58776],[-70.02686,0.57128],[-70.04059,-0.19226],[-69.60937,-0.50262],[-69.55719,-0.65367],[-69.61212,-0.7498],[-69.41986,-1.03541],[-69.40338,-1.37041],[-69.9321,-4.21974],[-69.94995,-4.23275],[-70.06531,-4.08071],[-70.1841,-3.93893],[-70.28641,-3.82246],[-70.35027,-3.80054],[-70.50613,-3.87796],[-70.71075,-3.793],[-70.04883,-2.75102],[-70.8783,-2.23241],[-71.41113,-2.37786],[-71.75171,-2.19124],[-72.36694,-2.48762],[-72.63336,-2.36688],[-72.67456,-2.4595],[-72.93274,-2.4492],[-73.1813,-2.22692],[-73.10028,-2.0842],[-73.14697,-1.79597],[-73.55347,-1.69439],[-73.47382,-1.55437],[-73.64136,-1.26607],[-73.85834,-1.22763],[-74.27582,-0.97774],[-74.42139,-0.51086],[-74.79492,-0.23621],[-75.20142,-0.06592],[-75.27832,-0.12909],[-75.80566,0.04669],[-76.09955,0.32959],[-76.32751,0.42572],[-76.40991,0.37903],[-76.41266,0.23621],[-76.96198,0.27191],[-77.11029,0.36529],[-77.53601,0.40649],[-77.48383,0.65093],[-77.69257,0.73606],[-77.66441,0.81296],[-77.7166,0.85141],[-77.74544,0.83562],[-77.77565,0.83974],[-77.80861,0.82738],[-77.8196,0.80678],[-77.96173,0.82257],[-78.19794,0.94478],[-78.19931,0.99284],[-78.28308,1.05325],[-78.2515,1.08346],[-78.31741,1.19193],[-78.43002,1.1425],[-78.55499,1.2496],[-78.61816,1.24685],[-80,2.5],[-77.7,7.7],[-77.55524,7.51498],[-77.32178,7.87971],[-77.17896,7.93956],[-77.5,8.5],[-75.8,11.8]]]}},"peru":{"type":"Feature","id":"peru","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-83,-3],[-80.25238,-3.41],[-80.22217,-3.44047],[-80.2438,-3.46463],[-80.24079,-3.47723],[-80.24393,-3.47881],[-80.24313,-3.48142],[-80.24386,-3.48247],[-80.24416,-3.48461],[-80.24545,-3.48481],[-80.2456,-3.48759],[-80.2335,-3.4899],[-80.22878,-3.50181],[-80.21745,-3.5001],[-80.20706,-3.54705],[-80.21633,-3.582],[-80.19264,-3.60256],[-80.16106,-3.86704],[-80.12878,-3.89718],[-80.29701,-4.01843],[-80.39915,-3.98281],[-80.44739,-3.99719],[-80.47297,-4.05079],[-80.48035,-4.09445],[-80.44928,-4.13024],[-80.45013,-4.20968],[-80.33409,-4.21841],[-80.44739,-4.37692],[-80.44584,-4.45086],[-80.36018,-4.49775],[-80.12535,-4.29784],[-79.79233,-4.48954],[-79.62753,-4.42656],[-79.24301,-4.96581],[-79.01917,-5.01844],[-78.2872,-3.42158],[-77.84637,-3.00064],[-76.63376,-2.59052],[-75.64087,-1.62576],[-75.36072,-0.95027],[-75.56534,-0.13806],[-75.15884,-0.06665],[-74.40628,-0.55553],[-72.92862,-2.39505],[-70.9552,-2.25162],[-70.02686,-2.70987],[-70.70595,-3.78478],[-70.49789,-3.88142],[-70.32349,-3.8088],[-69.95819,-4.23211],[-69.94446,-4.29784],[-69.99802,-4.37316],[-70.10376,-4.29164],[-70.19028,-4.35946],[-71.82999,-4.5662],[-72.86133,-5.25507],[-73.94348,-7.4932],[-72.19116,-9.95803],[-70.61188,-9.57638],[-70.62149,-10.96681],[-69.57161,-10.94557],[-68.65494,-12.49629],[-69.01886,-13.62196],[-68.83896,-14.22445],[-69.38141,-14.86251],[-69.14795,-15.24444],[-69.39926,-15.6151],[-69.19189,-16.17449],[-69.10177,-16.22555],[-68.96152,-16.19456],[-68.78952,-16.34254],[-68.98865,-16.42357],[-69.04015,-16.57368],[-69.01886,-16.65198],[-69.61075,-17.26542],[-69.46896,-17.37423],[-69.46827,-17.49919],[-69.66654,-17.66071],[-69.81262,-17.67281],[-69.75,-18],[-70,-18.27],[-75,-19],[-83,-3]]]}}}; + + var resources = {"cape-coast-youthmappers":{"id":"cape-coast-youthmappers","featureId":"cape_coast_gh","type":"twitter","name":"University of Cape Coast YouthMappers","countryCodes":["gh"],"languageCodes":["en"],"description":"Follow us on Twitter: {url}","extendedDescription":"This is the official handle for the Youth Mappers chapter of the University of Cape Coast, Ghana. we love maps, open data and helping the vulnerable.","url":"https://twitter.com/YouthmappersUCC","contacts":[{"name":"Enock Seth Nyamador","email":"kwadzo459@gmail.com"}]},"osm-gh-facebook":{"id":"osm-gh-facebook","featureId":"ghana","type":"facebook","name":"OpenStreetMap Ghana on Facebook","countryCodes":["gh"],"languageCodes":["en"],"description":"Facebook group for people interested in OpenStreetMap.","extendedDescription":"Mappers in Ghana community, promoting OpenStreetMap and Humanitarian OpenStreetMap Team (HOT) projects in Ghana. Join us.","url":"https://www.facebook.com/OSMGhana/","contacts":[{"name":"Enock Seth Nyamador","email":"kwadzo459@gmail.com"}]},"osm-gh-twitter":{"id":"osm-gh-twitter","featureId":"ghana","type":"twitter","name":"OpenStreetMap Ghana on Twitter","countryCodes":["gh"],"languageCodes":["en"],"description":"Follow us on Twitter: {url}","url":"https://twitter.com/osmghana","contacts":[{"name":"Enock Seth Nyamador","email":"kwadzo459@gmail.com"}]},"talk-gh":{"id":"talk-gh","featureId":"ghana","type":"mailinglist","name":"Talk-gh Mailing List","countryCodes":["gh"],"languageCodes":["en"],"description":"Talk-gh is the official mailing list for Ghana OSM community.","url":"https://lists.openstreetmap.org/listinfo/talk-gh","contacts":[{"name":"Enock Seth Nyamador","email":"kwadzo459@gmail.com"}]},"osm-mg-facebook":{"id":"osm-mg-facebook","featureId":"madagascar","type":"facebook","name":"OpenStreetMap Madagascar Facebook Group","countryCodes":["mg"],"languageCodes":["mg","fr"],"description":"Malagasy Facebook group for people interested in OpenStreetMap.","url":"https://www.facebook.com/groups/1601381123461284/","contacts":[{"name":"Brice Ramamonjy","email":"rafaby21@gmail.com"},{"name":"Dolly Andriatsiferana","email":"privatemajory@gmail.com"}]},"talk-mg":{"id":"talk-mg","featureId":"madagascar","type":"mailinglist","countryCodes":["mg"],"languageCodes":["mg","fr"],"name":"Talk-mg Mailing List","description":"Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss.","url":"https://lists.openstreetmap.org/listinfo/talk-mg","contacts":[{"name":"Brice Ramamonjy","email":"rafaby21@gmail.com"},{"name":"Dolly Andriatsiferana","email":"privatemajory@gmail.com"}]},"OSM-BGD-facebook":{"id":"OSM-BGD-facebook","featureId":"BGD","type":"facebook","name":"OpenStreetMap Bangladesh","description":"Improve OpenStreetMap in Bangladesh","extendedDescription":"Mapping in Bangladesh? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!","url":"https://www.facebook.com/groups/osmbd/","contacts":[{"name":"Ahasanul Hoque","email":"hoque.ahasan@gmail.com"}]},"OSM-India-facebook":{"id":"OSM-India-facebook","featureId":"india_full","type":"facebook","name":"OpenStreetMap India - Participatory neighborhood mapping","description":"Improve OpenStreetMap in India","extendedDescription":"Mapping in India? Have questions, want to connect with the community here? Join us at {url}. All are welcome!","url":"https://www.facebook.com/groups/mappingindia/","contacts":[{"name":"Jinal Foflia","email":"fofliajinal@gmail.com"},{"name":"Arun Ganesh","email":"arun.planemad@gmail.com"}],"events":[{"id":"sotmasia2018","i18n":true,"name":"State of the Map Asia 2018","description":"Join the 2018 OpenStreetMap region-wide event at State of the Map Asia in India","where":"Indian Institute of Management, Bangalore, India","when":"2018-11-17","url":"http://stateofthemap.asia/"}]},"OSM-india-mailinglist":{"id":"OSM-india-mailinglist","featureId":"india_full","type":"mailinglist","name":"OpenStreetMap India Mailinglist","description":"Talk-in is the official Mailinglist for Indian Community","url":"https://lists.openstreetmap.org/listinfo/talk-in","contacts":[{"name":"Arun Ganesh","email":"arun.planemad@gmail.com"}]},"OSM-india-twitter":{"id":"OSM-india-twitter","featureId":"india_full","type":"twitter","name":"OpenStreetMap India Twitter","description":"We are just a tweet away: {url}","url":"https://twitter.com/osm_in","contacts":[{"name":"Jinal Foflia","email":"fofliajinal@gmail.com"}]},"OSM-India-Puducherry-Facebook":{"id":"OSM-India-Puducherry-Facebook","featureId":"india_puducherry","type":"facebook","name":"Free Software Hardware Movement - Facebook","description":"FSHM Facebook page to know about community events, activities","extendedDescription":"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap. Its FB page is the best way to keep in contact with its events.","url":"https://www.facebook.com/FSHMP","contacts":[{"name":"Kamalavelan","email":"sskamalavelan@gmail.com","osm":"demonshreder"},{"name":"Prasanna","email":"prasmailme@gmail.com","osm":"Prashere"}]},"OSM-India-Puducherry-Matrix":{"id":"OSM-India-Puducherry-Matrix","featureId":"india_puducherry","type":"matrix","name":"Free Software Hardware Movement - Matrix","description":"FSHM Riot group to discuss, share and update mapping activities, events in and around Puducherry","extendedDescription":"FSHM community members share their OSM mapping updates / experiences through the Riot.im group, this group is also used to discuss things related to free software / hardware, technology and activism.","url":"https://riot.im/app/#/room/#fshm:matrix.org","contacts":[{"name":"Kamalavelan","email":"sskamalavelan@gmail.com","osm":"demonshreder"},{"name":"Prasanna","email":"prasmailme@gmail.com","osm":"Prashere"}]},"OSM-IDN-facebook":{"id":"OSM-IDN-facebook","featureId":"IDN","type":"facebook","name":"OpenStreetMap Indonesia","description":"Improve OpenStreetMap in Indonesia","extendedDescription":"Mapping in Indonesia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!","url":"https://www.facebook.com/groups/osm.id/","contacts":[{"name":"Yantisa Akhadi","email":"yantisa.akhadi@hotosm.org"}]},"OSM-japan-facebook":{"id":"OSM-japan-facebook","featureId":"japan","type":"facebook","name":"OpenStreetMap Japan Community","countryCodes":["jp"],"languageCodes":["jp"],"description":"Mappers and OpenStreetMap users in Japan","url":"https://www.facebook.com/groups/osmjapan/","contacts":[{"name":"Satoshi IIDA","email":"nyampire@gmail.com"}]},"OSM-japan-mailinglist":{"id":"OSM-japan-mailinglist","featureId":"japan","type":"mailinglist","name":"OpenStreetMap Japan Mailinglist","countryCodes":["jp"],"languageCodes":["jp"],"description":"Talk-ja is an Official Mailinglist for Japanese Community","url":"https://lists.openstreetmap.org/listinfo/talk-ja","contacts":[{"name":"OSMF Japan","email":"info@osmf.jp"}]},"OSM-japan-twitter":{"id":"OSM-japan-twitter","featureId":"japan","type":"twitter","name":"OpenStreetMap Japan Twitter","countryCodes":["jp"],"languageCodes":["jp"],"description":"Hashtag on Twitter: {url}","url":"https://twitter.com/hashtag/osmjp","contacts":[{"name":"Satoshi IIDA","email":"nyampire@gmail.com"}]},"OSM-korea-telegram":{"id":"OSM-korea-telegram","featureId":"korea","type":"telegram","countryCodes":["ko"],"languageCodes":["ko","en"],"name":"OSM Korea Telegram Channel","description":"Unofficial Channnel for OpenStreetMap contributors, communities and users in Korea to share and discuss.","url":"https://t.me/osmKorea","contacts":[{"name":"Yongmin Hong","email":"lists@revi.pe.kr"},{"name":"Max N","email":"abonnements@revolwear.com"}]},"OSM-MY-forum":{"id":"OSM-MY-forum","featureId":"malaysia","type":"forum","countryCodes":["my"],"languageCodes":["ms","en"],"name":"OpenStreetMap Malaysia Forum","description":"Official OpenStreetMap Malaysia Forum","url":"https://forum.openstreetmap.org/viewforum.php?id=60","contacts":[{"name":"Mohd Saidin","email":"projekopenstreetmap@hotmail.com"}]},"OSM-MY-matrix":{"id":"OSM-MY-matrix","featureId":"malaysia","type":"matrix","countryCodes":["my"],"languageCodes":["ms","en"],"name":"OpenStreetMap Malaysia Riot channel","description":"All mappers are welcome! Sign up at {signupUrl}","signupUrl":"https://riot.im/app/#/register","url":"https://riot.im/app/#/room/#OpenstreetmapMalaysia:matrix.org","contacts":[{"name":"Ahmad Amsyar","email":"OfficiallyAhmad@protonmail.ch"}]},"OSM-MNG-facebook":{"id":"OSM-MNG-facebook","featureId":"MNG","type":"facebook","name":"OpenStreetMap Mongolia","description":"Improve OpenStreetMap in Mongolia","extendedDescription":"Mapping in Mongolia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!","url":"https://www.facebook.com/groups/OSM.Mongolia/","contacts":[{"name":" ","email":"talk-mn@openstreetmap.org"}]},"OSM-MMR-facebook":{"id":"OSM-MMR-facebook","featureId":"MMR","type":"facebook","name":"OpenStreetMap Myanmar","description":"Improve OpenStreetMap in Myanmar","extendedDescription":"Mapping in Myanmar? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!","url":"https://www.facebook.com/groups/osmmm/","contacts":[{"name":"Yan Naung Oak","email":"yan@phandeeyar.org"},{"name":"Patrick Oswald","email":"patrickoswald.omm@gmail.com"},{"name":"Set Khaing Oo","email":"setkhaing@phandeeyar.org"}]},"OSM-Nepal-facebook":{"id":"OSM-Nepal-facebook","featureId":"NPL","type":"facebook","name":"OpenStreetMap Nepal","description":"Improve OpenStreetMap in Nepal","extendedDescription":"Mapping in Nepal? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!","url":"https://www.facebook.com/groups/mapkathmandu/","contacts":[{"name":"Kshitiz Khanal","email":"khanal1990@gmail.com"}]},"OSM-PH-facebook":{"id":"OSM-PH-facebook","featureId":"philippines","type":"facebook","countryCodes":["ph"],"name":"OpenStreetMap PH Facebook","description":"Welcome to OpenStreetMap Philippines, where we encourage all fellow Filipinos to contribute to the OpenStreetMap project.","url":"https://www.facebook.com/OSMPH/","contacts":[{"name":"Maning Sambale","email":"emmanuel.sambale@gmail.com"},{"name":"OSM PH Group","email":"osm.pilipinas@gmail.com"}]},"OSM-PH-mailinglist":{"id":"OSM-PH-mailinglist","featureId":"philippines","type":"mailinglist","countryCodes":["ph"],"name":"Talk-ph Mailing List","description":"A mailing list to discuss OpenStreetMap in the Philippines","url":"https://lists.openstreetmap.org/pipermail/talk-ph/","contacts":[{"name":"Maning Sambale","email":"emmanuel.sambale@gmail.com"},{"name":"OSM PH Group","email":"osm.pilipinas@gmail.com"}]},"OSM-PH-slack":{"id":"OSM-PH-slack","featureId":"philippines","type":"slack","countryCodes":["ph"],"name":"OpenStreetMap PH Slack","description":"All are welcome! Sign up at {signupUrl}","signupUrl":"https://osmph-chat.herokuapp.com/","url":"https://osmph.slack.com","contacts":[{"name":"Maning Sambale","email":"emmanuel.sambale@gmail.com"},{"name":"OSM PH Group","email":"osm.pilipinas@gmail.com"}]},"OSM-PH-telegram":{"id":"OSM-PH-telegram","featureId":"philippines","type":"telegram","countryCodes":["ph"],"languageCodes":["tl","en"],"name":"OpenStreetMap PH Telegram","description":"Un-official, Telegram local community of OpenStreetMap contributors and friends in the Philippines","url":"https://t.me/osmph","contacts":[{"name":"Erwin Olario","email":"govvin@gmail.com"},{"name":"OSM PH Group","email":"osm.pilipinas@gmail.com"}]},"OSM-RU-forum":{"id":"OSM-RU-forum","type":"forum","featureId":"russia","countryCodes":["ru"],"languageCodes":["ru"],"name":"OpenStreetMap RU forum","description":"OpenStreetMap Russia web forum","url":"https://forum.openstreetmap.org/viewforum.php?id=21","contacts":[{"name":"Ilya Zverev","email":"ilya@zverev.info"}]},"OSM-RU-telegram":{"id":"OSM-RU-telegram","type":"telegram","featureId":"russia","countryCodes":["ru"],"languageCodes":["ru"],"name":"OpenStreetMap RU telegram","description":"OpenStreetMap Russia telegram chat","url":"https://t.me/ruosm","contacts":[{"name":"Ilya Zverev","email":"ilya@zverev.info"}]},"OSM-LKA-facebook":{"id":"OSM-LKA-facebook","featureId":"LKA","type":"facebook","name":"OpenStreetMap Sri Lanka","description":"Improve OpenStreetMap in Sri Lanka","extendedDescription":"Mapping in Sri Lanka? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!","url":"https://www.facebook.com/groups/142058222659672/","contacts":[{"name":"Karan Suthakaran","email":"karansuthakaran@yahoo.com"}]},"OSM-TW-facebook":{"id":"OSM-TW-facebook","featureId":"taiwan","type":"facebook","name":"OpenStreetMap Taiwan Community","countryCodes":["tw"],"languageCodes":["zh-tw"],"description":"Facebook Group for Mappers and OpenStreetMap users to discuss matters about Taiwan.","url":"https://www.facebook.com/groups/OpenStreetMap.TW/","contacts":[{"name":"Nobody 沒有人 (Public mail)","email":"hiboard@openstreetmap.tw"}]},"OSM-TW-mailinglist":{"id":"OSM-TW-mailinglist","featureId":"taiwan","type":"mailinglist","name":"OpenStreetMap Taiwan Mailinglist","countryCodes":["tw"],"languageCodes":["zh-tw","en"],"description":"Talk-tw is an Official Mailinglist for the Communities to dicuss matters about Taiwan","url":"https://lists.openstreetmap.org/listinfo/talk-tw","contacts":[{"name":"Nobody 沒有人 (Public email)","email":"hiboard@openstreetmap.tw"}]},"at-forum":{"id":"at-forum","featureId":"austria","type":"forum","name":"OpenStreetMap Austria Forum","countryCodes":["at"],"languageCodes":["en","de"],"description":"The official forum for OpenStreetMap questions in and around Austria","url":"https://forum.openstreetmap.org/viewforum.php?id=89","contacts":[{"name":"emga","email":"emgaosm@gmail.com"}]},"at-mailinglist":{"id":"at-mailinglist","featureId":"austria","type":"mailinglist","name":"Talk-at Mailing List","countryCodes":["at"],"languageCodes":["de"],"description":"Talk-at is the official mailing list for the Austrian OSM community","url":"https://lists.openstreetmap.org/listinfo/talk-at","contacts":[{"name":"AT community","email":"info@openstreetmap.at"}]},"at-twitter":{"id":"at-twitter","featureId":"austria","type":"twitter","name":"OpenStreetMap Austria Twitter","countryCodes":["at"],"languageCodes":["de"],"description":"OpenStreetMap Austria On Twitter: {url}","url":"https://twitter.com/osm_at","contacts":[{"name":"AT Community","email":"info@openstreetmap.at"}]},"osmgraz-meetup":{"id":"osmgraz-meetup","featureId":"graz","type":"meetup","countryCodes":["at"],"languageCodes":["de","en"],"name":"OSM community meetup Graz","description":"Monthly meetup of the OpenStreetMap community in Graz","url":"https://wiki.openstreetmap.org/wiki/Graz/Stammtisch","contacts":[{"name":"Michael Maier","email":"michael.maier@secure.mailbox.org"}]},"osmgraz-twitter":{"id":"osmgraz-twitter","featureId":"graz","type":"twitter","countryCodes":["at"],"languageCodes":["de","en"],"name":"OSM community Graz on twitter","description":"OpenStreetMap community in Graz on twitter","url":"https://twitter.com/osmgraz","contacts":[{"name":"Michael Maier","email":"michael.maier@secure.mailbox.org"}]},"osm-at":{"id":"osm-at","featureId":"austria","type":"group","countryCodes":["at"],"languageCodes":["de"],"name":"OpenStreetMap Austria","description":"The platform for information on OpenStreetMap in Austria","url":"https://www.openstreetmap.at/","contacts":[{"name":"AT community","email":"info@openstreetmap.at"}]},"be-facebook":{"id":"be-facebook","featureId":"belgium","type":"facebook","name":"OpenStreetMap BE Community","countryCodes":["be"],"languageCodes":["en","nl","fr","de"],"description":"Mappers and OpenStreetMap facebook in Belgium","url":"https://www.facebook.com/groups/1419016881706058/","contacts":[{"name":"BE community","email":"community@osm.be"}]},"be-forum":{"id":"be-forum","type":"forum","featureId":"belgium","countryCodes":["be"],"languageCodes":["en","nl","fr","de"],"name":"OpenStreetMap BE forum","description":"OpenStreetMap Belgium web forum","url":"https://forum.openstreetmap.org/viewforum.php?id=29","contacts":[{"name":"BE community","email":"community@osm.be"}]},"be-irc":{"id":"be-irc","featureId":"belgium","type":"irc","name":"OpenStreetMap Belgium IRC","countryCodes":["be"],"languageCodes":["en","nl","fr","de"],"description":"Join #osmbe on irc.oftc.net (port 6667)","extendedDescription":"Join #osmbe on irc.oftc.net (port 6667), it is bridged with the matrix chat channel","url":"https://webchat.oftc.net/?channels=osmbe","contacts":[{"name":"BE community","email":"community@osm.be"}]},"be-mailinglist":{"id":"be-mailinglist","featureId":"belgium","type":"mailinglist","name":"Talk-be Mailing List","countryCodes":["be"],"languageCodes":["en","nl","fr","de"],"description":"Talk-be is the official mailing list for Belgian OSM community","url":"https://lists.openstreetmap.org/listinfo/talk-be","contacts":[{"name":"BE community","email":"community@osm.be"}]},"be-matrix":{"id":"be-matrix","featureId":"be_full","type":"matrix","countryCodes":["be"],"languageCodes":["en","nl","fr","de"],"name":"OpenStreetMap BE Riot channel","description":"All mappers are welcome! Sign up at {signupUrl}","extendedDescription":"Multiple channels exists, for beginners to thematic channels, landuse and dev talk","signupUrl":"https://riot.im/app/#/register","url":"https://riot.im","contacts":[{"name":"BE community","email":"community@osm.be"}]},"be-meetup":{"id":"be-meetup","featureId":"be_full","type":"meetup","countryCodes":["be"],"languageCodes":["en","nl","fr","de"],"name":"OpenStreetMap Belgium Meetup","description":"IRL meetups of everyone who is interested in OpenStreetMap.","extendedDescription":"Physical meetups are great to meet other mappers, ask them questions and to learn a lot. Especially new contributors are very welcome!","signupUrl":"https://www.meetup.com/OpenStreetMap-Belgium/","url":"https://meetup.com/","contacts":[{"name":"BE community","email":"community@osm.be"}]},"be-twitter":{"id":"be-twitter","featureId":"belgium","type":"twitter","name":"OpenStreetMap Belgium Twitter","countryCodes":["be"],"languageCodes":["en","nl","fr","de"],"description":"OSM Belgium On Twitter: {url}","url":"https://twitter.com/osm_be","contacts":[{"name":"BE community","email":"community@osm.be"}]},"byosm":{"id":"byosm","type":"telegram","featureId":"belarus","languageCodes":["ru","be","en"],"name":"OpenStreetMap Belarus","description":"OpenStreetMap Belarus telegram chat","url":"https://t.me/byosm","contacts":[{"name":"Darafei Praliaskouski","email":"me@komzpa.net"}]},"talk-cz-mailinglist":{"id":"talk-cz-mailinglist","featureId":"czechia","type":"mailinglist","name":"Talk-cz Mailing List","countryCodes":["cz"],"languageCodes":["cs","sk","en"],"description":"Talk-cz is the official mailing list for Czech community","url":"https://lists.openstreetmap.org/listinfo/talk-cz","contacts":[{"name":"osmcz","email":"dev@openstreetmap.cz"}]},"de-berlin-mailinglist":{"id":"de-berlin-mailinglist","featureId":"de-berlin-brandenburg","type":"mailinglist","name":"Berlin Mailing List","countryCodes":["de"],"languageCodes":["de"],"description":"This is the mailing list for the Berlin OSM community","url":"https://lists.openstreetmap.de/listinfo/berlin","contacts":[{"name":"FOSSGIS e.V.","email":"info@fossgis.de"}]},"de-berlin-meetup":{"id":"de-berlin-meetup","featureId":"de-berlin-brandenburg","type":"meetup","name":"OpenStreetMap Berlin-Brandenburg Meetup","countryCodes":["de"],"languageCodes":["de"],"description":"Mappers and OpenStreetMap users in the Berlin area","signupUrl":"https://www.meetup.com/OSM-Berlin-Brandenburg/","url":"https://meetup.com/","contacts":[{"name":"Christopher Lorenz","email":"osm@lorenz.lu"}]},"de-berlin-telegram":{"id":"de-berlin-telegram","featureId":"de-berlin-brandenburg","type":"telegram","name":"@osmberlin on Telegram","countryCodes":["de"],"languageCodes":["de"],"description":"OpenStreetMap Berlin Telegram chat","url":"https://t.me/osmberlin","contacts":[{"name":"Christopher Lorenz","email":"osm@lorenz.lu"}]},"de-berlin-twitter":{"id":"de-berlin-twitter","featureId":"de-berlin-brandenburg","type":"twitter","name":"OpenStreetMap Berlin Twitter","countryCodes":["de"],"languageCodes":["de"],"description":"Follow us on Twitter: {url}","url":"https://twitter.com/osmberlin","contacts":[{"name":"Christopher Lorenz","email":"osm@lorenz.lu"}]},"de-forum":{"id":"de-forum","featureId":"germany","type":"forum","countryCodes":["de"],"languageCodes":["de"],"name":"OpenStreetMap DE forum","description":"OpenStreetMap Germany web forum","url":"https://forum.openstreetmap.org/viewforum.php?id=14","contacts":[{"name":"FOSSGIS e.V.","email":"info@fossgis.de"}]},"de-irc":{"id":"de-irc","featureId":"germany","type":"irc","name":"OpenStreetMap Germany IRC","countryCodes":["de"],"languageCodes":["de"],"description":"Join #osm-de on irc.oftc.net (port 6667)","url":"http://de.irc2go.com/webchat/?net=OFTC&room=osm-de","contacts":[{"name":"FOSSGIS e.V.","email":"info@fossgis.de"}]},"de-mailinglist":{"id":"de-mailinglist","featureId":"germany","type":"mailinglist","name":"Talk-de Mailing List","countryCodes":["de"],"languageCodes":["de"],"description":"Talk-de is the official mailing list for the German OSM community","url":"https://lists.openstreetmap.org/listinfo/talk-de","contacts":[{"name":"FOSSGIS e.V.","email":"info@fossgis.de"}]},"osm-de":{"id":"osm-de","featureId":"germany","type":"group","countryCodes":["de"],"languageCodes":["de"],"name":"OpenStreetMap Germany","description":"The platform for information on OpenStreetMap in Germany","url":"https://www.openstreetmap.de/","contacts":[{"name":"FOSSGIS e.V.","email":"info@fossgis.de"}]},"OSM-ES-mailinglist":{"id":"OSM-ES-mailinglist","type":"mailinglist","featureId":"spain","languageCodes":["es"],"name":"Talk-es mailing list","description":"A mailing list to discuss OpenStreetMap in Spain","url":"https://lists.openstreetmap.org/listinfo/talk-es","contacts":[{"name":"Iván Sánchez","email":"ivansanchez@escomposlinux.org"}]},"OSM-ES-telegram":{"id":"OSM-ES-telegram","type":"telegram","featureId":"spain","languageCodes":["es"],"name":"@OSMes on Telegram","description":"OpenStreetMap Spain Telegram chat","url":"https://t.me/OSMes","contacts":[{"name":"Jorge Sanz","email":"sanchi2@gmail.com"}]},"fr-facebook":{"id":"fr-facebook","featureId":"france","type":"facebook","name":"OpenStreetMap France Facebook page","countryCodes":["fr"],"languageCodes":["fr"],"description":"OpenStreetMap France Facebook page","url":"https://www.facebook.com/osmfr","contacts":[{"name":"OpenStreetMap France","email":"contact@openstreetmap.fr"}]},"fr-forum":{"id":"fr-forum","type":"forum","featureId":"france","countryCodes":["fr"],"languageCodes":["fr"],"name":"OpenStreetMap France web forum","description":"OpenStreetMap France web forum","url":"https://forum.openstreetmap.fr/","contacts":[{"name":"OpenStreetMap France","email":"contact@openstreetmap.fr"}]},"fr-irc":{"id":"fr-irc","featureId":"france","type":"irc","name":"OpenStreetMap France on IRC","countryCodes":["fr"],"languageCodes":["fr"],"description":"Join #osm-fr on irc.oftc.net (port 6667)","url":"http://fr.irc2go.com/webchat/?net=OFTC&room=osm-fr","contacts":[{"name":"OpenStreetMap France","email":"contact@openstreetmap.fr"}]},"fr-mailinglist":{"id":"fr-mailinglist","featureId":"france","type":"mailinglist","name":"Talk-fr Mailing List","countryCodes":["fr"],"languageCodes":["fr"],"description":"Talk-fr mailing list","url":"https://lists.openstreetmap.org/listinfo/talk-fr","contacts":[{"name":"OpenStreetMap France","email":"contact@openstreetmap.fr"}]},"fr-twitter":{"id":"fr-twitter","featureId":"france","type":"twitter","name":"OpenStreetMap France on Twitter","countryCodes":["fr"],"languageCodes":["fr"],"description":"OpenStreetMap France on Twitter: {url}","url":"https://twitter.com/osm_fr","contacts":[{"name":"OpenStreetMap France","email":"contact@openstreetmap.fr"}]},"Nottingham-OSM-pub-meetup":{"id":"Nottingham-OSM-pub-meetup","featureId":"east_midlands_uk","type":"group","name":"East Midlands (Nottingham) Monthly pub meet-up","countryCodes":["gb"],"languageCodes":["en"],"description":"Social gathering for East Midlands mappers and users","extendedDescription":"A group have been meeting since March 2011, initially in Nottingham, and, more recently in Derby, and from time to time elsewhere in the East Midlands. These are social gatherings, but are an excellent place to come and ask specific questions about OSM either in the area or in general. In the summer months we usually do some light mapping for an hour in the vicinity of our meeting place. The group as a whole has a special interest in mapping public rights of way and from time to time has mapping meetings for this purpose.","url":"https://wiki.openstreetmap.org/wiki/Nottingham/Pub-meetup","contacts":[{"name":"Jerry Clough","email":"SK53.osm@gmail.com"}]},"gb-mailinglist":{"id":"gb-mailinglist","featureId":"united_kingdom","type":"mailinglist","name":"Talk-gb Mailing List","countryCodes":["gb"],"languageCodes":["en","cy"],"description":"Talk-gb is the main communication forum list for the British (including Northern Ireland) OSM community","url":"https://lists.openstreetmap.org/listinfo/talk-gb","contacts":[{"name":"UK mailing list","email":"talk-gb-owner@lists.openstreetmap.org"}]},"mappa-mercia-group":{"id":"mappa-mercia-group","featureId":"england-west-midlands","type":"group","countryCodes":["gb"],"languageCodes":["en"],"name":"Mappa Mercia local group","description":"A home for OpenStreetMap enthusiasts in the Midlands","extendedDescription":"Mappa Mercia is a project to grow OpenStreetMap in the West Midlands, UK. We run community events, provide training and support local organisations wishing to open up their data.","url":"http://www.mappa-mercia.org/","contacts":[{"name":"Brian Prangle","email":"community@mappa-mercia.org"}]},"gb-irc":{"id":"gb-irc","featureId":"united_kingdom","type":"irc","name":"OpenStreetMap United Kingdom IRC","countryCodes":["gb"],"languageCodes":["en","cy"],"description":"Join #osm-gb on irc.oftc.net (port 6667)","extendedDescription":"Join #osm-gb on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question","url":"http://en.irc2go.com/webchat/?net=OFTC&room=osm-gb","contacts":[{"name":"UK mailing list","email":"talk-gb-owner@lists.openstreetmap.org"}]},"it-facebook":{"id":"it-facebook","featureId":"italy","type":"facebook","name":"OpenStreetMap Italy Facebook","countryCodes":["it"],"languageCodes":["it"],"description":"Join the OpenStreetMap Italy community on Facebook","url":"https://www.facebook.com/OpenStreetMap.Italia/","contacts":[{"name":"Simone Cortesi","email":"simone@cortesi.com"},{"name":"Stefano","email":"sabas88@gmail.com"},{"name":"Alessandro Palmas","email":"alessandro.palmas@wikimedia.it"}]},"it-irc":{"id":"it-irc","featureId":"italy","type":"irc","name":"OpenStreetMap Italy IRC","countryCodes":["it"],"languageCodes":["it"],"description":"Join #osm-it on irc.oftc.net (port 6667)","url":"http://en.irc2go.com/webchat/?net=OFTC&room=osm-it","contacts":[{"name":"Simone Cortesi","email":"simone@cortesi.com"},{"name":"Stefano","email":"sabas88@gmail.com"},{"name":"Alessandro Palmas","email":"alessandro.palmas@wikimedia.it"}]},"it-mailinglist":{"id":"it-mailinglist","featureId":"italy","type":"mailinglist","name":"Talk-it Mailing List","countryCodes":["it"],"languageCodes":["it"],"description":"Talk-it is the official mailing list for the Italian OSM community","url":"https://lists.openstreetmap.org/listinfo/talk-it","contacts":[{"name":"Simone Cortesi","email":"simone@cortesi.com"},{"name":"Stefano","email":"sabas88@gmail.com"},{"name":"Alessandro Palmas","email":"alessandro.palmas@wikimedia.it"}]},"it-twitter":{"id":"it-twitter","featureId":"italy","type":"twitter","name":"OpenStreetMap Italy Twitter","countryCodes":["it"],"languageCodes":["it"],"description":"Follow us on Twitter at {url}","url":"https://twitter.com/OpenStreetMapIt","contacts":[{"name":"Simone Cortesi","email":"simone@cortesi.com"},{"name":"Stefano","email":"sabas88@gmail.com"},{"name":"Alessandro Palmas","email":"alessandro.palmas@wikimedia.it"}]},"OSM-Rome-meetup":{"id":"OSM-Rome-meetup","featureId":"IT_Roma_Capitale","type":"group","name":"Incontro Mappatori Romani","countryCodes":["it"],"languageCodes":["it"],"description":"Improve OpenStreetMap in the Rome area","extendedDescription":"We aim to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Lazio.","url":"https://wiki.openstreetmap.org/wiki/Rome/Incontro","contacts":[{"name":"Martin Koppenhoefer","email":"dieterdreist@gmail.com"}]},"South-Tyrol-Mailing-List":{"id":"South-Tyrol-Mailing-List","featureId":"south_tyrol","type":"mailinglist","countryCodes":["it"],"languageCodes":["de","it","lld","en"],"name":"OpenStreetMap mailing list for South Tyrol","description":"OpenStreetMap Italy regional talk list for South Tyrol","url":"https://lists.openstreetmap.org/listinfo/talk-it-southtyrol","contacts":[{"name":"Martin Raifer","email":"tyr.asd@gmail.com"}]},"talk-it-lazio":{"id":"talk-it-lazio","featureId":"IT_Lazio","type":"mailinglist","countryCodes":["it"],"languageCodes":["it"],"name":"OpenStreetMap IT Lazio","description":"All are welcome! Sign up at {signupUrl}","extendedDescription":"Mailinglist for Rome and Lazio area.","signupUrl":"https://lists.openstreetmap.org/listinfo/talk-it-lazio","url":"https://lists.openstreetmap.org/listinfo/talk-it-lazio","contacts":[{"name":"Martin Koppenhoefer","email":"dieterdreist@gmail.com"}]},"Trentino-Mailing-List":{"id":"Trentino-Mailing-List","featureId":"trentino","type":"mailinglist","countryCodes":["it"],"languageCodes":["it"],"name":"OpenStreetMap mailing list for Trentino","description":"OpenStreetMap Italy regional talk list for Trentino","url":"https://lists.openstreetmap.org/listinfo/talk-it-trentino","contacts":[{"name":"Luca Delucchi","email":"lucadeluge@gmail.com"}]},"no-forum":{"id":"no-forum","type":"forum","featureId":"norway","countryCodes":["no"],"languageCodes":["no"],"name":"OpenStreetMap Norway Web Forum","description":"OpenStreetMap Norway web forum","url":"https://forum.openstreetmap.org/viewforum.php?id=68","contacts":[{"name":"OpenStreetMap Norway","email":"kart@nuug.no"}]},"no-irc":{"id":"no-irc","featureId":"norway","type":"irc","name":"OpenStreetMap Norway on IRC","countryCodes":["no"],"languageCodes":["no"],"description":"Chat room for mappers and OpenStreetMap users, developers and enthusiasts in Norway","contacts":[{"name":"OpenStreetMap Norway","email":"kart@nuug.no"}],"url":"https://webchat.oftc.net/?channels=osm-no"},"no-mailinglist":{"id":"no-mailinglist","featureId":"norway","type":"mailinglist","name":"OpenStreetMap Norway mailing list","countryCodes":["no"],"languageCodes":["no"],"description":"Mailing list for mappers and OpenStreetMap users, developers and enthusiasts in Norway","contacts":[{"name":"OpenStreetMap Norway","email":"kart@nuug.no"}],"url":"https://lists.nuug.no/mailman/listinfo/kart"},"OSM-PL-facebook-group":{"id":"OSM-PL-facebook-group","type":"facebook","featureId":"poland","countryCodes":["pl"],"languageCodes":["pl"],"name":"OpenStreetMap Poland Facebook group","description":"Group for mappers and users of OpenStreetMap in Poland","url":"https://www.facebook.com/groups/500589303317858/","contacts":[{"name":"Michał Brzozowski","email":"www.haxor@gmail.com"}]},"OSM-PL-forum":{"id":"OSM-PL-forum","type":"forum","featureId":"poland","countryCodes":["pl"],"languageCodes":["pl","en"],"name":"OpenStreetMap Poland Forum","description":"Forum of Polish OpenStreetMap community","url":"https://forum.openstreetmap.org/viewforum.php?id=23","contacts":[{"name":"Daniel Koć","email":"daniel@xn--ko-wla.pl"},{"name":"Ryszard Mikke","email":"ryszard.mikke@gmail.com"}]},"osm-se":{"id":"osm-se","featureId":"sweden","type":"group","countryCodes":["se"],"languageCodes":["sv"],"name":"OpenStreetMap.se","description":"Provide OSM services and information for the local community in Sweden","url":"http://openstreetmap.se/","contacts":[{"name":"Talk-se-owner","email":"talk-se-owner@openstreetmap.org"}]},"se-facebook":{"id":"se-facebook","featureId":"sweden","type":"facebook","name":"OpenStreetMap Sweden Facebook","countryCodes":["se"],"languageCodes":["sv"],"description":"OpenStreetMap Sweden on Facebook","url":"https://www.facebook.com/groups/osmsweden/","contacts":[{"name":"Talk-se-owner","email":"talk-se-owner@openstreetmap.org"}]},"se-forum":{"id":"se-forum","type":"forum","featureId":"sweden","countryCodes":["se"],"languageCodes":["sv"],"name":"OpenStreetMap Sweden Web Forum","description":"OpenStreetMap Sweden web forum","url":"https://forum.openstreetmap.org/viewforum.php?id=4","contacts":[{"name":"Talk-se-owner","email":"talk-se-owner@openstreetmap.org"}]},"se-irc":{"id":"se-irc","featureId":"sweden","type":"irc","name":"OpenStreetMap Sweden IRC","countryCodes":["se"],"languageCodes":["sv"],"description":"Join #osm.se on irc.oftc.net (port 6667)","url":"http://irc2go.com/webchat/?net=OFTC&room=osm.se","contacts":[{"name":"Talk-se-owner","email":"talk-se-owner@openstreetmap.org"}]},"se-mailinglist":{"id":"se-mailinglist","featureId":"sweden","type":"mailinglist","name":"Talk-se Mailing List","countryCodes":["se"],"languageCodes":["sv"],"description":"A mailing list to discuss OpenStreetMap in Sweden","url":"https://lists.openstreetmap.org/listinfo/talk-se","contacts":[{"name":"Talk-se-owner","email":"talk-se-owner@openstreetmap.org"}]},"se-twitter":{"id":"se-twitter","featureId":"sweden","type":"twitter","name":"OpenStreetMap Sweden on Twitter","countryCodes":["se"],"languageCodes":["sv"],"description":"Follow us on Twitter: {url}","url":"https://twitter.com/openstreetmapse","contacts":[{"name":"Talk-se-owner","email":"talk-se-owner@openstreetmap.org"}]},"OSM-CA-Slack":{"id":"OSM-CA-Slack","featureId":"canada_full","type":"slack","countryCodes":["ca"],"languageCodes":["en","fr"],"name":"OSM-CA Slack","description":"All are welcome! Sign up at {signupUrl}.","signupUrl":"https://slackinviteosmcanada.herokuapp.com/","url":"https://osm-ca.slack.com/","contacts":[{"name":"Denis Carriere","email":"carriere.denis@gmail.com"}]},"OSM-Vancouver-meetup":{"id":"OSM-Vancouver-meetup","featureId":"vancouver_metro","type":"meetup","name":"OpenStreetMap Vancouver","countryCodes":["ca"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users in the Vancouver, BC area","url":"https://www.meetup.com/OpenStreetMap-Vancouver/","contacts":[{"name":"Paul Norman","email":"penorman@mac.com"},{"name":"Peter Chin","email":"bpchin@gmail.com"}],"events":[{"name":"April Metrotown Mappy Hour","description":"Mappy Hour is the time and place for discussion of OpenStreetMap, from surveying data to consuming data. Beginners welcome. Bring your questions.","when":"2018-04-27 18:30","where":"Firefighters' Public House, 6515 Bonsor Avenue, Burnaby, BC","url":"https://www.meetup.com/OpenStreetMap-Vancouver/events/qzsbsmyxgbkc/"}]},"Bay-Area-OpenStreetMappers":{"id":"Bay-Area-OpenStreetMappers","featureId":"sf_bay_area","type":"meetup","name":"Bay Area OpenStreetMappers","countryCodes":["us"],"languageCodes":["en"],"description":"Improve OpenStreetMap in the Bay Area","extendedDescription":"This group is about growing the OpenStreetMap community here in the Bay Area. Our events are open to everyone, from open source enthusiasts, cyclists, GIS professionals, geocachers, and beyond. Anyone and everyone who is interested in maps, map making and free map data is welcome to join our group as well as attend our events.","url":"https://www.meetup.com/Bay-Area-OpenStreetMappers/","contacts":[{"name":"Ben Discoe","email":"bdiscoe@gmail.com"}]},"Central-Pennsylvania-OSM":{"id":"Central-Pennsylvania-OSM","featureId":"central_pa","type":"facebook","name":"Central Pennsylvania OSM","countryCodes":["us"],"languageCodes":["en"],"description":"Online mapping community based out of State College, PA","url":"https://www.facebook.com/CentralPennsylvaniaOSM","contacts":[{"name":"Sterling Quinn","email":"sdq107@psu.edu"}]},"Code-for-San-Jose-Slack":{"id":"Code-for-San-Jose-Slack","featureId":"south_sf_bay_area","type":"slack","countryCodes":["us"],"languageCodes":["en"],"name":"Code for San Jose Slack","description":"All are welcome! Sign up at {signupUrl}, then join the #osm channel.","signupUrl":"https://slackin-c4sj.herokuapp.com/","url":"https://codeforsanjose.slack.com/","contacts":[{"name":"OSM Bay Area mailing list","email":"talk-us-sfbay@openstreetmap.org"}]},"Dallas-Fort-Worth-OSM":{"id":"Dallas-Fort-Worth-OSM","featureId":"dfw_metro","type":"group","name":"Dallas-Fort Worth OSM","countryCodes":["us"],"languageCodes":["en"],"description":"The OpenStreetMap user group for Dallas-Fort Worth","extendedDescription":"Dallas, Fort Worth, and all the cities in between are abounding with creative and tech-savvy people. The vision for this usergroup is to find new ways to use the amazing resource of OSM.","url":"http://dfwosm.org/","contacts":[{"name":"Andrew Matheny","email":"andrewdmatheny@gmail.com"}]},"GeoPhilly":{"id":"GeoPhilly","featureId":"philly_metro","type":"meetup","name":"GeoPhilly","countryCodes":["us"],"languageCodes":["en"],"description":"Meetup for map enthusiasts in the Philadelphia area","extendedDescription":"GeoPhilly unites developers, geographers, data geeks, open source enthusiasts, civic hackers and map addicts in our shared love of maps and the stories they tell. If you use maps as part of your work or just want to learn more, this is the meetup for you! Our events aim to be open, friendly, educational and social and range from happy hours to lightning talks or even workshops. Come create a diverse, inspiring geospatial community in the Philadelphia with us!","url":"https://www.meetup.com/GeoPhilly/","contacts":[{"name":"Dan Ford","email":"dford@azavea.com"}]},"MapMinnesota":{"id":"MapMinnesota","featureId":"minneapolis_st_paul_metro","type":"meetup","name":"MapMinnesota","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap enthusiasts in the Twin Cities area","extendedDescription":"Connecting OpenStreetMap enthusiasts in Minnesota and the Twin Cities!","url":"https://www.meetup.com/Map-Minnesota/","contacts":[{"name":"Ian Dees","email":"ian.dees@gmail.com"}]},"Mapping-DC-meetup":{"id":"Mapping-DC-meetup","featureId":"dc_metro","type":"meetup","name":"Mapping DC","countryCodes":["us"],"languageCodes":["en"],"description":"Improve OpenStreetMap in the DC area","extendedDescription":"We are a group of volunteer mappers who aim to improve the OpenStreetMap in the DC area. We also aim to teach others about the OSM ecosystem, data analytics, cartography, and GIS. We gather every other month at meetups to focus on one area of our city.","url":"https://mappingdc.org/","contacts":[{"name":"Brian DeRocher","email":"brian@derocher.org"}],"events":[{"name":"April Meetup","description":"Meets every other month on the 2nd Tuesday","when":"2018-04-10 18:00","where":"Capitol City Brewing Company, 1100 New York Ave NW, Washington, DC","url":"https://www.meetup.com/MappingDC/events/qqvnvhyxgbnb/"},{"name":"June Meetup","description":"Meets every other month on the 2nd Tuesday","when":"2018-06-12 18:00","where":"Capitol City Brewing Company, 1100 New York Ave NW, Washington, DC","url":"https://www.meetup.com/MappingDC/events/qqvnvhyxjbqb/"},{"name":"August Meetup","description":"Meets every other month on the 2nd Tuesday","when":"2018-08-14 18:00","where":"Capitol City Brewing Company, 1100 New York Ave NW, Washington, DC","url":"https://www.meetup.com/MappingDC/events/qqvnvhyxlbsb/"},{"name":"October Meetup","description":"Meets every other month on the 2nd Tuesday","when":"2018-10-09 18:00","where":"Capitol City Brewing Company, 1100 New York Ave NW, Washington, DC","url":"https://www.meetup.com/MappingDC/events/qqvnvhyxnbmb/"}]},"Maptime-ME-meetup":{"id":"Maptime-ME-meetup","featureId":"portland_me","type":"meetup","name":"MaptimeME","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users, around Portland, ME","extendedDescription":"Maptime is, rather literally, time for mapmaking. Our mission is to open the doors of cartographic possibility to anyone interested by creating a time and space for collaborative learning, exploration, and map creation using mapping tools and technologies.","url":"https://www.meetup.com/MaptimeME/","contacts":[{"name":"Malcolm Toon","email":"malcolm@foreflight.com"}]},"OpenCleveland-meetup":{"id":"OpenCleveland-meetup","featureId":"cleveland","type":"meetup","name":"Open Cleveland","countryCodes":["us"],"languageCodes":["en"],"description":"Improve OpenStreetMap in the Cleveland area","extendedDescription":"Open Geo Cleveland aims to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Northeast Ohio. We're also a maptime chapter =)","url":"https://www.meetup.com/open-cleveland/","contacts":[{"name":"Will Skora","email":"skorasaurus@gmail.com"},{"name":"Anastasia Diamond-Ortiz","email":"anastasia.diamond@gmail.com"}],"events":[{"name":"Wednesday Meetup / Hack Night","description":"Meets weekly - programming experience is not necessary!","when":"2018-04-18 18:00","where":"The Tech Hive, 6815 Euclid Ave, Cleveland, OH","url":"https://www.meetup.com/open-cleveland/events/lcjdnpyxgbxb/"},{"name":"Wednesday Meetup / Hack Night","description":"Meets weekly - programming experience is not necessary!","when":"2018-04-25 18:00","where":"The Tech Hive, 6815 Euclid Ave, Cleveland, OH","url":"https://www.meetup.com/open-cleveland/events/lcjdnpyxgbhc/"},{"name":"Wednesday Meetup / Hack Night","description":"Meets weekly - programming experience is not necessary!","when":"2018-05-02 18:00","where":"The Tech Hive, 6815 Euclid Ave, Cleveland, OH","url":"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbdb/"},{"name":"Wednesday Meetup / Hack Night","description":"Meets weekly - programming experience is not necessary!","when":"2018-05-09 18:00","where":"The Tech Hive, 6815 Euclid Ave, Cleveland, OH","url":"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbmb/"},{"name":"Wednesday Meetup / Hack Night","description":"Meets weekly - programming experience is not necessary!","when":"2018-05-16 18:00","where":"The Tech Hive, 6815 Euclid Ave, Cleveland, OH","url":"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbvb/"},{"name":"Wednesday Meetup / Hack Night","description":"Meets weekly - programming experience is not necessary!","when":"2018-05-23 18:00","where":"The Tech Hive, 6815 Euclid Ave, Cleveland, OH","url":"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbfc/"},{"name":"Wednesday Meetup / Hack Night","description":"Meets weekly - programming experience is not necessary!","when":"2018-05-30 18:00","where":"The Tech Hive, 6815 Euclid Ave, Cleveland, OH","url":"https://www.meetup.com/open-cleveland/events/lcjdnpyxhbnc/"}]},"OSM-Boston":{"id":"OSM-Boston","featureId":"boston_metro","type":"meetup","name":"OpenStreetMap Boston","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users in the Boston area","extendedDescription":"OpenStreetMap is the free and open, wiki-style map of the world, with hundreds of thousands of contributions every day from people like you. Editing the map is simple, and fun! Join us both indoors and outdoors in our effort to create the best map of the Boston area and the rest of the world!","url":"https://www.meetup.com/OpenStreetMap-Boston/","contacts":[{"name":"Lars Ahlzen","email":"lars@ahlzen.com"}]},"OSM-Central-Salish-Sea":{"id":"OSM-Central-Salish-Sea","featureId":"mt_vernon_wa","type":"meetup","name":"OpenStreetMap Central Salish Sea","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users around Mount Vernon, WA","extendedDescription":"OpenStreetMap is an map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more. We meet all the time to talk maps, make maps and have fun!","url":"https://www.meetup.com/OpenStreetMap-Central-Salish-Sea/","contacts":[{"name":"Clifford Snow","email":"clifford@snowandsnow.us"}]},"OSM-Chattanooga":{"id":"OSM-Chattanooga","featureId":"chattanooga","type":"facebook","name":"OSM Chattanooga","countryCodes":["us"],"languageCodes":["en"],"description":"The OpenStreetMap user group for Chattanooga","url":"https://www.facebook.com/groups/123483951073256","contacts":[{"name":"Jenny Park","email":"tennessee@tpl.org"},{"name":"Randal Hale","email":"rjhale@northrivergeographic.com"}]},"OSM-Colorado":{"id":"OSM-Colorado","featureId":"colorado","type":"meetup","name":"OpenStreetMap Colorado","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users in the state of Colorado, USA","extendedDescription":"OpenStreetMap (OSM) Colorado is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties.","url":"https://www.meetup.com/OSM-Colorado/","contacts":[{"name":"Russell Deffner","email":"russdeffner@gmail.com"}]},"OSM-NYC":{"id":"OSM-NYC","featureId":"nyc_metro","type":"meetup","name":"OpenStreetMap NYC","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users, developers and enthusiasts in the New York Metropolitan area","url":"https://www.meetup.com/osm-nyc/","contacts":[{"name":"Jeff Ferzoco","email":"jferzoco@carto.com"}]},"OSM-Portland":{"id":"OSM-Portland","featureId":"portland_or","type":"meetup","name":"OpenStreetMap Portland","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users in the Portland area","extendedDescription":"OpenStreetMap (OSM) is a map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more, and come join us at a meetup to talk maps, contribute to OSM, and have fun!","url":"https://www.meetup.com/OpenStreetMap-Portland/","contacts":[{"name":"Madeline Steele","email":"madeline.steele@gmail.com"}]},"OSM-Seattle":{"id":"OSM-Seattle","featureId":"seattle","type":"meetup","name":"OpenStreetMap Seattle","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users in the Seattle area","url":"https://www.meetup.com/OpenStreetMap-Seattle/","contacts":[{"name":"Clifford Snow","email":"clifford@snowandsnow.us"},{"name":"Chase Stephens","email":"seattlefyi@gmail.com"},{"name":"Paul McCombs","email":"pablo@imperium.org"}]},"OSM-SoCal":{"id":"OSM-SoCal","featureId":"la_metro","type":"meetup","name":"OpenStreetMap Southern California","countryCodes":["us"],"languageCodes":["en"],"description":"Let's have some fun, contribute something to Los Angeles, and learn about mapping!","extendedDescription":"OpenStreetMap (OSM) Southern California is for anyone interested in mapping to get together to work with OpenStreetMap. OpenStreetMap, the Wikipedia of maps, is a free open-source map of the world being created by more than 1,000,000 volunteers around the globe. Everyone is welcome. If you don't know OpenStreetMap, we'll teach you. If you have an idea for a mapping project or even a field trip that the group can do, great!","url":"https://www.meetup.com/OSM-Southern-California/","contacts":[{"name":"Charlotte Wolter","email":"techlady@techlady.com"}]},"OSM-South-Bay":{"id":"OSM-South-Bay","featureId":"south_sf_bay_area","type":"meetup","name":"OSM South Bay","countryCodes":["us"],"languageCodes":["en"],"description":"Map Nights hosted by Code for San Jose","extendedDescription":"Code for San Jose, the local Code for America brigade, hosts monthly Map Nights on Thursday nights in downtown San José. Meet fellow South Bay mappers, help out with local mapping projects, and hear about other civic tech projects. Programming and GIS skills are not required.","url":"https://www.meetup.com/Code-for-San-Jose/","contacts":[{"name":"OSM Bay Area mailing list","email":"talk-us-sfbay@openstreetmap.org"}]},"OSM-Tampa-Bay":{"id":"OSM-Tampa-Bay","featureId":"tampa_bay","type":"meetup","name":"OpenStreetMap Tampa Bay","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users in the Tampa Bay area","extendedDescription":"OSM Tampa Bay group for local residents to get together and build out the definitive map of Tampa Bay with OpenStreetMap, the free and editable map of the world. If you're into maps, data, open source, GPS, hiking, cycling, et cetera, you'll love working with OpenStreetMap -- so join in! We'll get together and map and talk about new topics once-a-month or so.","url":"https://www.meetup.com/osmtampabay/","contacts":[{"name":"Coleman McCormick","email":"cmccormick@gmail.com"}]},"OSM-US-Slack":{"id":"OSM-US-Slack","featureId":"usa_full","type":"slack","countryCodes":["us"],"languageCodes":["en"],"name":"OpenStreetMap US Slack","description":"All are welcome! Sign up at {signupUrl}","signupUrl":"https://osmus-slack.herokuapp.com/","url":"https://osmus.slack.com","contacts":[{"name":"Ian Dees","email":"ian@openstreetmap.us"},{"name":"Clifford Snow","email":"clifford@snowandsnow.us"}]},"OSM-US":{"id":"OSM-US","featureId":"usa_full","type":"group","countryCodes":["us"],"languageCodes":["en"],"name":"OpenStreetMap US","description":"We help grow and improve OpenStreetMap in the United States.","extendedDescription":"We support OpenStreetMap by holding annual conferences, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap US here: {signupUrl}","signupUrl":"https://www.openstreetmap.us/join","url":"https://www.openstreetmap.us/","contacts":[{"name":"Ian Dees","email":"ian@openstreetmap.us"},{"name":"Bryan Housel","email":"bryan@openstreetmap.us"}]},"OSM-Utah":{"id":"OSM-Utah","featureId":"salt_lake_city","type":"meetup","name":"OpenStreetMap Utah","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users in the Salt Lake City area","extendedDescription":"Activities may include things like Learn To Map workshops, mapping parties and outdoor data collection. The events will take place in the SLC area, at least initially. We are looking for seasoned mappers as well as people new to OSM. Join and let's do some mapping!","url":"https://www.meetup.com/OpenStreetMap-Utah/","contacts":[{"name":"Martijn van Exel","email":"m@rtijn.org"}]},"OSM-Wyoming":{"id":"OSM-Wyoming","featureId":"wyoming","type":"meetup","name":"OpenStreetMap Wyoming","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users in the state of Wyoming","extendedDescription":"OpenStreetMap (OSM) Wyoming is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties.","url":"https://www.meetup.com/OSM-Wyoming/","contacts":[{"name":"Russell Deffner","email":"russdeffner@gmail.com"}]},"PHXGeo-meetup":{"id":"PHXGeo-meetup","featureId":"phoenix","type":"meetup","name":"PHXGeo Meetup","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users in the Phoenix, AZ area","extendedDescription":"This is a meetup group for those in the Phoenix area who like maps, GIS, OpenStreetMap, cartography and anything in between.","url":"https://www.meetup.com/PHXGeo/","contacts":[{"name":"Ryan Arp","email":"ryan@arpconsultinggroup.com"}]},"PHXGeo-twitter":{"id":"PHXGeo-twitter","featureId":"phoenix","type":"twitter","name":"PHXGeo Twitter","countryCodes":["us"],"languageCodes":["en"],"description":"Follow us on Twitter at {url}","url":"https://twitter.com/phxgeo","contacts":[{"name":"Ryan Arp","email":"ryan@arpconsultinggroup.com"}]},"Western-Slope-facebook":{"id":"Western-Slope-facebook","featureId":"grand_junction_co","type":"facebook","name":"Western Slope OSM Facebook","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users around Grand Junction, CO","url":"https://www.facebook.com/wsosm/","contacts":[{"name":"Aaron Young","email":"aaron@kaartgroup.com"}]},"Western-Slope-meetup":{"id":"Western-Slope-meetup","featureId":"grand_junction_co","type":"meetup","name":"Western Slope OSM Meetup","countryCodes":["us"],"languageCodes":["en"],"description":"Mappers and OpenStreetMap users around Grand Junction, CO","extendedDescription":"The goal of this group is to introduce OpenStreetMap to the community, develop a community of mappers, create the most amazing geodata possible using whatever method we can and finally strategize in order to get this data out into our community. Imagine accurate trail signage! Imagine further development of bike paths! Imagine anything you want, that's the joy of OpenStreetMap!","url":"https://www.meetup.com/Western-Slope-OpenStreetMap/","contacts":[{"name":"Aaron Young","email":"aaron@kaartgroup.com"}]},"Maptime-Australia-Slack":{"id":"Maptime-Australia-Slack","featureId":"australia_full","type":"slack","countryCodes":["au"],"languageCodes":["en"],"name":"Maptime Australia Slack","description":"Sign up at {signupUrl}","signupUrl":"https://bit.ly/maptimeau","url":"https://maptimeaustralia.slack.com","contacts":[{"name":"David Dean","email":"ddean@ieee.org"},{"name":"Philip Mallis","email":"philip.mallis@unimelb.edu.au"},{"name":"Edoardo Neerhut","email":"ed@mapillary.com"}]},"talk-au":{"id":"talk-au","featureId":"australia_full","type":"mailinglist","countryCodes":["au"],"languageCodes":["en"],"name":"Talk-au Mailing List","description":"Place for Aussie mappers to chat","url":"https://lists.openstreetmap.org/listinfo/talk-au","contacts":[{"name":"Ben Kelley","email":"ben.kelley@gmail.com"},{"name":"Steve Bennett","email":"stevagewp@gmail.com"},{"name":"Ian Sergeant","email":"inas66+osm@gmail.com"}]},"OSM-AR-facebook":{"id":"OSM-AR-facebook","featureId":"argentina","type":"facebook","name":"OpenStreetMap Argentina Facebook","countryCodes":["ar"],"languageCodes":["es"],"description":"Join the OpenStreetMap Argentina community on Facebook","extendedDescription":"News from the local community","url":"https://www.facebook.com/OpenStreetMapArgentina/","contacts":[{"name":"OpenStreetMap Argentina","email":"openstreetmap.org.ar@gmail.com"}]},"OSM-AR-forum":{"id":"OSM-AR-forum","featureId":"argentina","type":"forum","name":"OpenStreetMap Argentina web forum","countryCodes":["ar"],"languageCodes":["es"],"description":"Join the OpenStreetMap Argentina web forum","extendedDescription":"Ideal for long or important discussions. Slow response time.","url":"https://forum.openstreetmap.org/viewforum.php?id=49","contacts":[{"name":"OpenStreetMap Argentina","email":"openstreetmap.org.ar@gmail.com"}]},"OSM-AR-irc":{"id":"OSM-AR-irc","featureId":"argentina","type":"irc","name":"OpenStreetMap Argentina IRC","countryCodes":["ar"],"languageCodes":["es"],"description":"Join #osm-ar on irc.oftc.net (port 6667)","extendedDescription":"You may find the most geeky user in the community.","url":"http://irc2go.com/webchat/?net=OFTC&room=osm-ar","contacts":[{"name":"OpenStreetMap Argentina","email":"openstreetmap.org.ar@gmail.com"}]},"OSM-AR-mailinglist":{"id":"OSM-AR-mailinglist","featureId":"argentina","type":"mailinglist","name":"Talk-ar Mailing List","countryCodes":["ar"],"languageCodes":["es"],"description":"Historic mailing list. Almost unused today.","url":"https://lists.openstreetmap.org/pipermail/talk-ar/","contacts":[{"name":"OpenStreetMap Argentina","email":"openstreetmap.org.ar@gmail.com"}]},"OSM-AR-telegram":{"id":"OSM-AR-telegram","featureId":"argentina","type":"telegram","name":"OpenStreetMap Argentina Telegram","countryCodes":["ar"],"languageCodes":["es"],"description":"Join the OpenStreetMap Argentina community on Telegram","extendedDescription":"The most active channel in the community, ideal for chatting and getting answers to your questions instantly. Everyone is welcome!","url":"https://telegram.me/osm_ar","contacts":[{"name":"OpenStreetMap Argentina","email":"openstreetmap.org.ar@gmail.com"}]},"OSM-AR-twitter":{"id":"OSM-AR-twitter","featureId":"argentina","type":"twitter","name":"OpenStreetMap Argentina Twitter","countryCodes":["ar"],"languageCodes":["es"],"description":"Follow us on Twitter at {url}","extendedDescription":"News from the local community and OpenStreetMap in general.","url":"https://twitter.com/OpenStreetMapAr","contacts":[{"name":"OpenStreetMap Argentina","email":"openstreetmap.org.ar@gmail.com"}]},"OSM-BO-mailinglist":{"id":"OSM-BO-mailinglist","featureId":"bolivia","type":"mailinglist","name":"Talk-bo Mailing List","countryCodes":["bo"],"languageCodes":["es"],"description":"Talk-bo is the official mailing list for the Bolivian OpenStreetMap community","extendedDescription":"Mapping in Bolivia? Have questions, want to connect with the community here? Join us at {url}. All are welcome!","url":"https://lists.openstreetmap.org/pipermail/talk-bo/","contacts":[{"name":"Marco Antonio","email":"marcoantoniofrias@gmail.com"}]},"Bahia-telegram":{"id":"Bahia-telegram","featureId":"bahia","type":"telegram","name":"OpenStreetMap Bahia Telegram Group","countryCodes":["br"],"languageCodes":["pt"],"description":"Join the OpenStreetMap Bahia community on Telegram","extendedDescription":"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!","url":"https://t.me/OSMBA","contacts":[{"name":"Wille Marcel","email":"wille@wille.blog.br"}]},"DF-telegram":{"id":"DF-telegram","featureId":"df_br","type":"telegram","name":"OpenStreetMap Brasília Telegram Group","countryCodes":["br"],"languageCodes":["pt"],"description":"Join the OpenStreetMap Brasília community on Telegram","extendedDescription":"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!","url":"https://t.me/osmbsb","contacts":[{"name":"Wille Marcel","email":"wille@wille.blog.br"}]},"OSM-br-mailinglist":{"id":"OSM-br-mailinglist","featureId":"brazil","type":"mailinglist","name":"Talk-br Mailing List","countryCodes":["br"],"languageCodes":["pt"],"description":"A mailing list to discuss OpenStreetMap in Brazil","url":"https://lists.openstreetmap.org/pipermail/talk-br/","contacts":[{"name":"Arlindo Pereira","email":"nighto@gmail.com"}]},"OSM-br-telegram":{"id":"OSM-br-telegram","featureId":"brazil","type":"telegram","name":"OpenStreetMap Brasil Telegram","countryCodes":["br"],"languageCodes":["pt"],"description":"Join the OpenStreetMap Brasil community on Telegram","extendedDescription":"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!","url":"https://t.me/OSMBrasil_Comunidade","contacts":[{"name":"Vitor George","email":"vitor.george@gmail.com"}],"events":[{"id":"webinar_mundogeo","name":"Webinar: OpenStreetMap em Prefeituras e Empresas","description":"Participe do webinar sobre como utilizar o OpenStreeMap em prefeituras e empresas.","where":"Online","when":"2018-05-02 14:30","url":"http://mundogeo.com/webinar/webinar.html"},{"id":"mundogeo","name":"Painel OpenStreetMap no MundoGeo #connect","description":"Participe do painel sobre o OpenStreetMap no MundoGeo #connect.","where":"São Paulo, SP, Brasil","when":"2018-05-16","url":"http://mundogeoconnect.com/2018/atividades-especiais/"}]},"OSM-br-twitter":{"id":"OSM-br-twitter","featureId":"brazil","type":"twitter","name":"OpenStreetMap Brasil Twitter","countryCodes":["br"],"languageCodes":["pt"],"description":"Follow us on Twitter at {url}","url":"https://twitter.com/OpenStreetMapBR","contacts":[{"name":"Wille Marcel","email":"wille@wille.blog.br"}]},"OSM-CL-facebook":{"id":"OSM-CL-facebook","featureId":"chile","type":"facebook","name":"OpenStreetMap Chile Facebook","countryCodes":["cl"],"languageCodes":["es"],"description":"Join the OpenStreetMap Chile community on Facebook","extendedDescription":"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!","url":"https://www.facebook.com/OpenStreetMap-Chile-145127198882915/","contacts":[{"name":"Julio Costa","email":"julio.costa@openstreetmap.cl"}]},"OSM-CL-mailinglist":{"id":"OSM-CL-mailinglist","featureId":"chile","type":"mailinglist","name":"Talk-cl Mailing List","countryCodes":["cl"],"languageCodes":["es"],"description":"A mailing list to discuss OpenStreetMap in Chile","url":"https://lists.openstreetmap.org/pipermail/talk-cl/","contacts":[{"name":"Julio Costa","email":"julio.costa@openstreetmap.cl"}]},"OSM-CL-telegram":{"id":"OSM-CL-telegram","featureId":"chile","type":"telegram","name":"OpenStreetMap Chile Telegram","countryCodes":["cl"],"languageCodes":["es"],"description":"Join the OpenStreetMap Chile community on Telegram","extendedDescription":"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!","url":"https://t.me/OSMcl","contacts":[{"name":"Julio Costa","email":"julio.costa@openstreetmap.cl"}]},"OSM-CL-twitter":{"id":"OSM-CL-twitter","featureId":"chile","type":"twitter","name":"OpenStreetMap Chile Twitter","countryCodes":["cl"],"languageCodes":["es"],"description":"Follow us on Twitter at {url}","url":"https://twitter.com/osmCL","contacts":[{"name":"Julio Costa","email":"julio.costa@openstreetmap.cl"}]},"Maptime-Bogota":{"id":"Maptime-Bogota","featureId":"bogota","type":"meetup","name":"Maptime Bogotá","countryCodes":["co"],"languageCodes":["es"],"description":"We're a group of mappers interested in mapping in OpenStreetMap around Bogotá.","extendedDescription":"Learn to collect data in the field and digitize onto OpenStreetMap. It is not necessary to have previous knowledge! You just need the desire to participate, learn, and have fun.","url":"https://www.meetup.com/Maptime-Colombia-OSM/","contacts":[{"name":"Andrés Gómez Casanova","email":"angoca@gmail.com"}]},"OSM-CO-facebook":{"id":"OSM-CO-facebook","featureId":"colombia","type":"facebook","name":"OpenStreetMap Colombia Facebook","countryCodes":["co"],"languageCodes":["es"],"description":"Join the OpenStreetMap Colombia community on Facebook","extendedDescription":"Join the community to learn more about OpenStreetMap. Everyone is welcome!","url":"https://www.facebook.com/groups/OsmCol/","contacts":[{"name":"Fredy Rivera","email":"fredyrivera@gmail.com"}]},"OSM-CO-mailinglist":{"id":"OSM-CO-mailinglist","featureId":"colombia","type":"mailinglist","name":"Talk-co Mailing List","countryCodes":["co"],"languageCodes":["es"],"description":"A mailing list to discuss OpenStreetMap in Colombia","url":"https://lists.openstreetmap.org/pipermail/talk-co/","contacts":[{"name":"Fredy Rivera","email":"fredyrivera@gmail.com"}]},"OSM-CO-twitter":{"id":"OSM-CO-twitter","featureId":"colombia","type":"twitter","name":"OpenStreetMap Colombia Twitter","countryCodes":["co"],"languageCodes":["es"],"description":"Follow us on Twitter at {url}","url":"https://twitter.com/OpenStreetMapCo","contacts":[{"name":"Fredy Rivera","email":"fredyrivera@gmail.com"}]},"OSM-CO":{"id":"OSM-CO","featureId":"colombia","type":"group","countryCodes":["co"],"languageCodes":["es"],"name":"OpenStreetMap Colombia","description":"News of the OpenStreetMap Colombia community and the OSMCo Foundation","url":"https://blog.openstreetmap.co/s657","contacts":[{"name":"Fredy Rivera","email":"fredyrivera@gmail.com"}]},"OSM-PE-facebook":{"id":"OSM-PE-facebook","featureId":"peru","type":"facebook","name":"OpenStreetMap Peru Facebook","countryCodes":["pe"],"languageCodes":["es"],"description":"Join the OpenStreetMap Peru community on Facebook","url":"https://www.facebook.com/Osmpe","contacts":[{"name":"Diego Sangunietti","email":"diego.sanguinetti@hotmail.com"},{"name":"Ruben Lopez M.","email":"rub2106@gmail.com"}]},"OSM-PE-mailinglist":{"id":"OSM-PE-mailinglist","featureId":"peru","type":"mailinglist","name":"Talk-pe Mailing List","countryCodes":["pe"],"languageCodes":["es"],"description":"The official mailing list for the OpenStreetMap Peru community","url":"https://lists.openstreetmap.org/pipermail/talk-pe/","contacts":[{"name":"Diego Sangunietti","email":"diego.sanguinetti@hotmail.com"},{"name":"Ruben Lopez M.","email":"rub2106@gmail.com"}]},"OSM-PE-matrix":{"id":"OSM-PE-matrix","featureId":"peru","type":"matrix","name":"OpenStreetMap Peru Matrix Chat","countryCodes":["pe"],"languageCodes":["es"],"description":"Chat with other members of the OpenStreetMap Peru community in Matrix.","url":"https://matrix.to/#/#osmpe:matrix.org","contacts":[{"name":"Diego Sangunietti","email":"diego.sanguinetti@hotmail.com"},{"name":"Ruben Lopez M.","email":"rub2106@gmail.com"}]},"OSM-PE-telegram":{"id":"OSM-PE-telegram","featureId":"peru","type":"telegram","name":"OpenStreetMap Peru Telegram","countryCodes":["pe"],"languageCodes":["es"],"description":"Join the OpenStreetMap Peru community on Telegram","url":"https://telegram.me/osmPe","contacts":[{"name":"Diego Sangunietti","email":"diego.sanguinetti@hotmail.com"},{"name":"Ruben Lopez M.","email":"rub2106@gmail.com"}]},"OSM-PE-twitter":{"id":"OSM-PE-twitter","featureId":"peru","type":"twitter","name":"OpenStreetMap Peru Twitter","countryCodes":["pe"],"languageCodes":["es"],"description":"Follow us on Twitter at {url}","url":"https://twitter.com/osmpe","contacts":[{"name":"Diego Sangunietti","email":"diego.sanguinetti@hotmail.com"},{"name":"Ruben Lopez M.","email":"rub2106@gmail.com"}]},"OSM-PE":{"id":"OSM-PE","featureId":"peru","type":"group","name":"OpenStreetMap Peru","countryCodes":["ar"],"languageCodes":["es"],"description":"News and resources for the OpenStreetMap Peru community","url":"http://osmpe.ourproject.org/","contacts":[{"name":"Diego Sangunietti","email":"diego.sanguinetti@hotmail.com"},{"name":"Ruben Lopez M.","email":"rub2106@gmail.com"}]},"OSM-Facebook":{"id":"OSM-Facebook","type":"facebook","languageCodes":["en"],"name":"OpenStreetMap on Facebook","description":"Like us on Facebook for news and updates about OpenStreetMap.","url":"https://www.facebook.com/OpenStreetMap","contacts":[{"name":"Harry Wood","email":"mail@harrywood.co.uk"}]},"OSM-help":{"id":"OSM-help","type":"forum","languageCodes":["en"],"name":"OpenStreetMap Help","description":"Ask a question and get answers on OSM's community-driven question and answer site.","extendedDescription":"{url} is for everyone who needs help with OpenStreetMap. Whether you are a beginner mapper or have a technical question, we're here to help!","url":"https://help.openstreetmap.org/","contacts":[{"name":"OSMF Operations","email":"operations@osmfoundation.org"}]},"OSM-Reddit":{"id":"OSM-Reddit","type":"reddit","languageCodes":["en"],"name":"OpenStreetMap on Reddit","description":"/r/openstreetmap/ is a great place to learn more about OpenStreetMap. Ask us anything!","url":"https://www.reddit.com/r/openstreetmap/","contacts":[{"name":"Serge Wroclawski","email":"emacsen@gmail.com"}]},"OSM-Twitter":{"id":"OSM-Twitter","type":"twitter","languageCodes":["en"],"name":"OpenStreetMap Twitter","description":"Follow us on Twitter at {url}","url":"https://twitter.com/openstreetmap","contacts":[{"name":"Harry Wood","email":"mail@harrywood.co.uk"}]},"OSMF":{"id":"OSMF","type":"group","languageCodes":["en","nl","fr","it","jp","ru"],"name":"OpenStreetMap Foundation","description":"OSMF is a UK-based not-for-profit that supports the OpenStreetMap Project","extendedDescription":"OSMF supports the OpenStreetMap by fundraising, maintaining the servers which power OSM, organizing the annual State of the Map conference, and coordinating the volunters who keep OSM running. You can show your support and have a voice in the direction of OpenStreetMap by joining as an OSMF member here: {signupUrl}","url":"https://wiki.osmfoundation.org/wiki/Main_Page","signupUrl":"https://join.osmfoundation.org/","contacts":[{"name":"OSMF Board","email":"board@osmfoundation.org"}],"events":[{"id":"sotm2018","i18n":true,"name":"State of the Map 2018","description":"Join us for 3 days in Milan, Italy for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.","where":"Milan, Italy","when":"2018-jul-28","url":"https://2018.stateofthemap.org/"}]}}; + + var dataImagery = [{"id":"sjcgis.org-Aerials_2013_WM","name":"2013 aerial imagery for San Juan County WA","type":"tms","template":"https://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2013_WM/MapServer/tile/{zoom}/{y}/{x}","endDate":"2013-06-01T00:00:00.000Z","startDate":"2013-05-01T00:00:00.000Z","scaleExtent":[0,19],"polygon":[[[-123.02167396992,48.44667085335],[-122.9466579482,48.44780949945],[-122.90151100606,48.41306930778],[-122.80263405293,48.40771378918],[-122.79199104756,48.44279926564],[-122.8088138625,48.47865708877],[-122.73911934346,48.49572334021],[-122.78546791524,48.62160819278],[-122.73087959737,48.6361306644],[-122.75559883565,48.71207854113],[-122.95747261494,48.71592956034],[-122.97086220235,48.695765074],[-122.99970131367,48.69780454658],[-123.00347786397,48.73427448605],[-123.04330330342,48.74310484148],[-123.0762622878,48.70528190578],[-123.08484535664,48.66334903433],[-123.12844734639,48.66380254936],[-123.22698097676,48.70301615666],[-123.24655037373,48.68352650341],[-123.17445259541,48.64701977542],[-123.21513634175,48.60106537642],[-123.21393471211,48.57335906966],[-123.18080406636,48.56574853208],[-123.16621284932,48.52006125122],[-123.10235481709,48.47683634964],[-123.02167396992,48.44667085335]],[[-122.98339348286,48.78214357977],[-122.93498497456,48.76653172572],[-122.91181068867,48.73857664785],[-122.80229073018,48.73982194177],[-122.81945686787,48.75498940888],[-122.93429832906,48.79571515892],[-122.98373680562,48.79435816618],[-122.98339348286,48.78214357977]]],"terms_url":"https://www.arcgis.com/home/item.html?id=7bf69831861d438d8365cf9f46662523","terms_text":"Pictometry Inc, San Juan County GIS","description":"Public domain aerial imagery taken in May/June 2013 from San Juan County, WA. Resolution is 9 inch."},{"id":"sjcgis.org-Aerials_2016_WM","name":"2016 aerial imagery for San Juan County WA","type":"tms","template":"https://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2016_WM/MapServer/tile/{zoom}/{y}/{x}","endDate":"2016-07-01T00:00:00.000Z","startDate":"2016-05-01T00:00:00.000Z","scaleExtent":[0,19],"polygon":[[[-123.02167396992,48.44667085335],[-122.9466579482,48.44780949945],[-122.90151100606,48.41306930778],[-122.80263405293,48.40771378918],[-122.79199104756,48.44279926564],[-122.8088138625,48.47865708877],[-122.73911934346,48.49572334021],[-122.78546791524,48.62160819278],[-122.73087959737,48.6361306644],[-122.75559883565,48.71207854113],[-122.95747261494,48.71592956034],[-122.97086220235,48.695765074],[-122.99970131367,48.69780454658],[-123.00347786397,48.73427448605],[-123.04330330342,48.74310484148],[-123.0762622878,48.70528190578],[-123.08484535664,48.66334903433],[-123.12844734639,48.66380254936],[-123.22698097676,48.70301615666],[-123.24655037373,48.68352650341],[-123.17445259541,48.64701977542],[-123.21513634175,48.60106537642],[-123.21393471211,48.57335906966],[-123.18080406636,48.56574853208],[-123.16621284932,48.52006125122],[-123.10235481709,48.47683634964],[-123.02167396992,48.44667085335]],[[-122.98339348286,48.78214357977],[-122.93498497456,48.76653172572],[-122.91181068867,48.73857664785],[-122.80229073018,48.73982194177],[-122.81945686787,48.75498940888],[-122.93429832906,48.79571515892],[-122.98373680562,48.79435816618],[-122.98339348286,48.78214357977]]],"best":true,"description":"Public domain aerial imagery taken in May, June, and July from San Juan County, WA. Resolution is 6 inch countywide."},{"id":"OS7","name":"7th Series (OS7)","type":"tms","template":"https://ooc.openstreetmap.org/os7/{zoom}/{x}/{y}.jpg","polygon":[[[-3.046968,54.839473],[-3.058641,55.2415704],[-4.0446639,55.2329572],[-4.0707564,55.6365416],[-4.6190429,55.6253005],[-4.6492553,56.0283381],[-4.4896102,56.0321747],[-4.5239425,56.4367031],[-3.8675094,56.4458128],[-3.8417602,56.049435],[-3.445909,56.0498185],[-3.4349227,55.6442923],[-2.7949691,55.6504917],[-2.8080153,56.0574872],[-3.2066131,56.0532696],[-3.2141662,56.4568175],[-3.7380767,56.4507463],[-3.7418532,56.8617541],[-5.0766921,56.8317131],[-5.0365233,56.4294897],[-5.1601195,56.4249331],[-5.1299071,56.0179772],[-5.9260726,55.994559],[-5.8551764,55.2333487],[-5.2280974,55.2513559],[-5.2102447,55.027647],[-4.659555,55.0418131],[-4.6454787,54.8163344],[-3.046968,54.839473]],[[-1.7483497,57.7642809],[-1.7406468,57.3599979],[-2.5802193,57.3553698],[-2.5743689,57.0452643],[-2.0840782,57.0479899],[-2.0765057,56.6427564],[-2.734497,56.6390587],[-2.737815,56.8171751],[-3.2388513,56.8143725],[-3.2489563,57.351683],[-3.7562947,57.3488858],[-3.7621877,57.6586785],[-4.7658688,57.6447324],[-4.810078,58.2698422],[-5.2511001,58.2654711],[-5.2737594,58.6676722],[-3.5581778,58.6988712],[-3.566072,58.9316035],[-3.3765578,58.9344382],[-3.3858372,59.2017095],[-3.187134,59.2021481],[-3.1874677,59.2417623],[-3.0675673,59.2420266],[-3.0785537,59.4213467],[-2.3713088,59.4276337],[-2.3685622,59.0221982],[-2.678926,59.0207845],[-2.6734328,58.8393493],[-2.8656936,58.8365068],[-2.8602004,58.5353109],[-3.0346084,58.5331604],[-3.0195022,58.1315879],[-3.6155983,58.1198177],[-3.6127639,57.9775439],[-3.7109154,57.9756153],[-3.699316,57.7536442],[-1.7483497,57.7642809]],[[-7.0749164,56.7631857],[-7.7347099,56.7356573],[-7.7911007,57.1399384],[-7.7066243,57.1434261],[-7.7629881,57.5431114],[-7.6021787,57.5496778],[-7.6213373,57.6845215],[-7.724988,57.6803049],[-7.7301746,57.7167278],[-7.6026437,57.7219106],[-7.5996413,57.7008338],[-7.4863439,57.7054402],[-7.49528,57.7681282],[-7.3749316,57.7730121],[-7.3933722,57.9020139],[-7.2359063,57.9083804],[-7.2432312,57.9594843],[-7.1391571,57.9636854],[-7.1450794,58.0049464],[-7.2374247,58.001223],[-7.2329687,57.9701789],[-7.3113276,57.9670164],[-7.3153794,57.9952475],[-7.2490415,57.9979228],[-7.2808211,58.218564],[-7.0735459,58.2268701],[-7.0827038,58.2901845],[-6.807432,58.3011927],[-6.8276802,58.4407359],[-6.5030498,58.4536624],[-6.5153194,58.5379206],[-6.1647379,58.5518417],[-6.1063084,58.1489361],[-6.3346892,58.139764],[-6.2775862,57.7414459],[-6.9613783,57.7136632],[-6.9333168,57.5161471],[-7.100168,57.5093277],[-7.0521806,57.169002],[-7.1311072,57.1657457],[-7.0749164,56.7631857]],[[0.4107642,50.8208689],[0.9810233,50.8061178],[0.9943731,51.0117337],[1.4506241,50.9999804],[1.4771216,51.4055151],[0.8961869,51.4203486],[0.882435,51.2103932],[0.5050041,51.2200721],[0.5227271,51.4904202],[-0.6339669,51.5106322],[-0.6367135,51.4456291],[-1.0995126,51.4524759],[-1.1148479,51.0481357],[-0.5298744,51.0394048],[-0.5275085,51.10203],[0.4280611,51.0877836],[0.4107642,50.8208689]],[[-5.3945661,51.9618998],[-4.7958112,51.9805124],[-4.7887332,51.8940308],[-4.2026458,51.9122773],[-4.2294099,52.2382823],[-3.6551984,52.2560218],[-3.6222764,51.8548323],[-4.2134157,51.836405],[-4.1855134,51.4934202],[-4.776615,51.4748465],[-4.7847576,51.5752482],[-5.0879928,51.5657379],[-5.0942224,51.6424172],[-5.3678001,51.6338498],[-5.3945661,51.9618998]],[[-1.2389016,54.0353696],[-0.6277871,54.0281103],[-0.6200376,54.2525704],[-0.5726819,54.2520109],[-0.5586479,54.6554165],[-1.17998,54.6626853],[-1.1878192,54.4378771],[-1.2322093,54.4383992],[-1.2389016,54.0353696]],[[-2.6722741,50.9767709],[-2.0996118,50.9802295],[-2.1057212,51.3794917],[-1.5887659,51.3825866],[-1.594992,51.7858908],[-2.1756313,51.7889106],[-2.1715392,51.3839176],[-2.6784576,51.3808828],[-2.6722741,50.9767709]],[[-2.6015496,53.2715461],[-3.2297251,53.2685042],[-3.2352183,53.6723131],[-2.6070428,53.6753262],[-2.6015496,53.2715461]],[[-0.0394177,51.7727994],[-0.6156335,51.7757705],[-0.6046472,52.5841377],[-0.0284314,52.5812201],[-0.0394177,51.7727994]],[[-2.9152892,54.0352257],[-3.5322877,54.0286638],[-3.5448438,54.4339736],[-2.9278454,54.4404713],[-2.9152892,54.0352257]],[[-6.3058305,57.1968949],[-6.3538957,57.6001458],[-5.6911121,57.6229455],[-5.643047,57.2199469],[-6.3058305,57.1968949]],[[1.171145,52.5723589],[1.1986505,52.9759408],[1.7978754,52.9610616],[1.7703699,52.5573411],[1.171145,52.5723589]],[[-2.4022508,55.5631737],[-2.4008775,55.9656986],[-1.7608445,55.965011],[-1.7622178,55.562479],[-2.4022508,55.5631737]],[[-6.3257432,56.3853727],[-7.0196021,56.3574652],[-7.0731605,56.7638392],[-6.3793015,56.7914485],[-6.3257432,56.3853727]],[[-2.422577,54.4430983],[-2.4257397,54.841885],[-1.7993058,54.8435404],[-1.7961431,54.4447701],[-2.422577,54.4430983]],[[-3.0270123,51.3793548],[-3.6058877,51.370168],[-3.6223672,51.7730401],[-3.0434918,51.7821458],[-3.0270123,51.3793548]],[[-3.0537915,52.1897924],[-3.0661511,52.5937352],[-2.4836401,52.600342],[-2.4712805,52.1964599],[-3.0537915,52.1897924]],[[-5.676726,51.7042466],[-5.6788616,51.731006],[-5.4635982,51.7375973],[-5.4614627,51.7108418],[-5.676726,51.7042466]],[[-5.8442675,59.1088192],[-5.8469031,59.1357806],[-5.7955763,59.1371015],[-5.7929408,59.1101412],[-5.8442675,59.1088192]],[[-8.648442,57.7786066],[-8.6659651,57.87717],[-8.4664946,57.8872093],[-8.4489714,57.7886733],[-8.648442,57.7786066]],[[-4.5271098,59.0153156],[-4.5285904,59.0331938],[-4.4762337,59.034342],[-4.4747531,59.0164644],[-4.5271098,59.0153156]],[[-7.6806151,58.2583811],[-7.6865455,58.2938023],[-7.5344535,58.3008387],[-7.5285231,58.2654246],[-7.6806151,58.2583811]],[[-6.1910235,59.080087],[-6.1954619,59.1158563],[-6.125424,59.1181472],[-6.1209857,59.0823803],[-6.1910235,59.080087]],[[-4.4266879,59.0711219],[-4.4280472,59.0886998],[-4.3762055,59.089758],[-4.3748462,59.0721806],[-4.4266879,59.0711219]]]},{"id":"ACT2017","name":"ACTmapi Imagery 2017","type":"wms","template":"https://data.actmapi.act.gov.au/arcgis/services/actmapi/imagery2017mga/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","endDate":"2017-05-01T00:00:00.000Z","startDate":"2017-05-01T00:00:00.000Z","scaleExtent":[0,21],"polygon":[[[149.085,-35.1171],[149.1509,-35.1157],[149.1509,-35.1335],[149.1736,-35.1335],[149.1739,-35.1512],[149.1957,-35.1512],[149.1962,-35.1689],[149.2177,-35.1683],[149.2192,-35.2048],[149.241,-35.2043],[149.2419,-35.2223],[149.2632,-35.2222],[149.2644,-35.2575],[149.3085,-35.2571],[149.309,-35.2751],[149.3531,-35.2742],[149.3536,-35.2921],[149.3974,-35.2917],[149.3988,-35.3452],[149.3777,-35.3457],[149.3772,-35.3641],[149.3341,-35.3648],[149.3385,-35.5451],[149.1624,-35.5487],[149.1727,-35.9271],[149.0175,-35.9294],[149.0172,-35.9113],[148.9506,-35.9125],[148.9499,-35.8946],[148.9277,-35.8949],[148.9272,-35.8768],[148.9053,-35.8768],[148.9042,-35.8586],[148.8826,-35.859],[148.8805,-35.7695],[148.8361,-35.7698],[148.8359,-35.7521],[148.8138,-35.7524],[148.8131,-35.7343],[148.7909,-35.7347],[148.7911,-35.7167],[148.7688,-35.7167],[148.7617,-35.3924],[148.7839,-35.3921],[148.7822,-35.3022],[148.8041,-35.302],[148.8033,-35.2836],[148.8474,-35.2832],[148.8469,-35.2652],[148.8689,-35.2643],[148.8687,-35.2466],[148.9128,-35.246],[148.9123,-35.2282],[148.9341,-35.228],[148.9329,-35.1919],[148.999,-35.1904],[148.9986,-35.1724],[149.0206,-35.172],[149.0204,-35.154],[149.0637,-35.1532],[149.0635,-35.1355],[149.0857,-35.1348],[149.085,-35.1171]]],"terms_url":"https://actmapi-actgov.opendata.arcgis.com/datasets/884456bde6fd46d68e0c05479f55d548","terms_text":"© Jacobs Group (Australia) Pty Ltd and Australian Capital Territory","best":true},{"id":"AGIV10cm","name":"AGIV Flanders 2013-2015 aerial imagery 10cm","type":"wms","template":"https://geoservices.informatievlaanderen.be/raadpleegdiensten/OGW/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OGWRGB13_15VL&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","polygon":[[[5.9849448,50.7072276],[5.9849448,50.7671973],[5.9107871,50.8227527],[5.7556052,50.8353303],[5.7542319,50.8626424],[5.8331961,50.9332328],[5.8551688,51.026611],[5.9094138,51.0775439],[5.9121604,51.1822548],[5.8785147,51.2080728],[5.7741446,51.2368858],[5.684194,51.2407548],[5.6230826,51.2699769],[5.6230826,51.2978925],[5.5399985,51.34724],[5.4473013,51.3485267],[5.3985495,51.321071],[5.3120322,51.3232166],[5.2667136,51.3618196],[5.1994223,51.3725369],[5.1829428,51.3961061],[5.1589102,51.4923992],[5.0833792,51.5308596],[5.0325675,51.539829],[4.9556632,51.5052229],[4.9014182,51.5056503],[4.8382468,51.5436725],[4.7709555,51.5586163],[4.711904,51.5470886],[4.6404929,51.4966741],[4.6144003,51.4971016],[4.5656485,51.5317139],[4.4825644,51.5304324],[4.4262595,51.5218884],[4.3006034,51.4697351],[4.2951102,51.4256575],[4.181127,51.4243731],[4.1371817,51.3952492],[4.138555,51.3506709],[4.0520377,51.3004685],[3.933248,51.272984],[3.8652701,51.2708361],[3.8632102,51.2901637],[3.7629599,51.3240748],[3.5933585,51.359247],[3.4773154,51.3313688],[3.425817,51.3973913],[3.2356162,51.3515286],[3.2260031,51.3656781],[3.1779379,51.3618196],[3.1600852,51.3322268],[3.0625815,51.3021857],[2.7508444,51.1702014],[2.4700064,51.0745241],[2.4926657,50.9937771],[2.5311179,50.9557299],[2.5091452,50.9115907],[2.5304312,50.8214514],[2.5990958,50.7641572],[2.6650138,50.7645915],[2.7700705,50.66677],[2.8970999,50.6589354],[2.991857,50.7254874],[3.1133933,50.7263567],[3.2369895,50.7059231],[3.3626456,50.6585001],[3.4711356,50.7020092],[3.6393637,50.6672052],[3.6984152,50.681565],[3.727941,50.7124454],[3.8185782,50.6841754],[3.8748831,50.6415206],[4.0925498,50.642827],[4.150228,50.6632881],[4.2065329,50.6441333],[4.3136496,50.642827],[4.452352,50.6876557],[4.5347495,50.6780842],[4.6130271,50.6954855],[4.6768851,50.6959204],[4.7270102,50.732007],[4.7805686,50.732007],[4.7997946,50.7128802],[4.8622794,50.7128802],[4.8856253,50.6954855],[4.9611563,50.6954855],[5.0311942,50.6576295],[5.1074118,50.6502288],[5.2007956,50.6489227],[5.2358145,50.6654643],[5.3250784,50.6658995],[5.3669638,50.6820001],[5.4212088,50.6641586],[5.5221457,50.6746032],[5.622396,50.7241834],[5.6752677,50.69853],[5.7398123,50.6972252],[5.7727713,50.6719923],[5.8125968,50.6602413],[5.9080405,50.659806],[5.9849448,50.7072276]]],"terms_text":"Orthophoto Flanders © AGIV","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAABm0lEQVQ4y6WTPUgCYRjHf5oFJVfRUZKVHYFBoBAUFLZE0FBD0NQHRENESzS019LSFNHWx1DQEhGRg0JFREM11FJuLWem4GB5HULdwdkgHprn5LO97/O8v+fj/7y2bDabpQKzFx5S6ntlgE81xvHtclHAbuSNloNT5q/uywP021cAvO4hAPYu5/hI5e6GWpsBCEfjxNSMNUALPvJ7eA3AQPcML3KIzbNhlvdEWmu+6RCcAISiCWtA3fosPztBfrYvAGgX/QCIggdR8DDe6Qbg5E0uAdjyKhhykq+uBeySi9qVCfSAB61HRBQ8RFJpRs6vALiZHMUnNpYO0Ujn+jPkJJnVfbTBNeqfFQB8YqP56H8VJqBKcuHcWsQuuXIOyUX1sN8MnPJKlnOwWS2SIScx0hkcvV3mXUzN0HcSAuBoNMBYZxsADittVXcT/XcPKE/PltqHowkTYLcMkOMoml52+wr9jnIZAJZ8XjYGe0vaUDSdsBxnulsqrUDRdMLReNHg8tYhOAs2M2HdQiSVBqChprpI7/9q5JPYKv3OfxL1n52ATYYBAAAAAElFTkSuQmCC"},{"id":"AGRI-black_and_white-2.5m","name":"AGRI black-and-white 2.5m","type":"tms","template":"https://{switch:a,b,c}.agri.openstreetmap.org/layer/au_ga_agri/{zoom}/{x}/{y}.png","polygon":[[[112.28778,-28.784589],[112.71488,-31.13894],[114.11263,-34.178287],[113.60788,-37.39012],[117.17992,-37.451794],[119.31538,-37.42096],[121.72262,-36.708394],[123.81925,-35.76893],[125.9547,-34.3066],[127.97368,-33.727398],[130.07031,-33.24166],[130.10913,-33.888704],[131.00214,-34.049705],[131.0798,-34.72257],[132.28342,-35.39],[134.18591,-35.61126],[133.8753,-37.1119],[134.8459,-37.6365],[139.7769,-37.82075],[139.93223,-39.4283],[141.6017,-39.8767],[142.3783,-39.368294],[142.3783,-40.64702],[142.49478,-42.074874],[144.009,-44.060127],[147.23161,-44.03222],[149.05645,-42.534313],[149.52237,-40.99959],[149.9494,-40.852921],[150.8036,-38.09627],[151.81313,-38.12682],[156.20052,-22.667706],[156.20052,-20.10109],[156.62761,-17.417627],[155.26869,-17.19521],[154.14272,-19.51662],[153.5215,-18.34139],[153.05558,-16.5636],[152.78379,-15.256768],[152.27905,-13.4135],[151.3472,-12.391767],[149.48354,-12.05024],[146.9598,-9.992408],[135.9719,-9.992408],[130.3032,-10.33636],[128.09016,-12.164136],[125.91588,-12.315912],[124.3239,-11.860326],[122.03323,-11.974295],[118.26706,-16.9353],[115.93747,-19.11357],[114.0738,-21.11863],[113.49141,-22.596033],[112.28778,-28.784589]]],"terms_text":"AGRI"},{"id":"alagoas_litoral","name":"Alagoas Litoral 2006","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Ortofotos%202006&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-35.523842344,-9.48089222803],[-35.52360077082,-9.44514935417],[-35.51571944592,-9.44517914145],[-35.51584023251,-9.44228976382],[-35.50542238925,-9.44237912638],[-35.50518081607,-9.43064264549],[-35.4933437304,-9.43073201107],[-35.49304176392,-9.39820141319],[-35.48929737968,-9.39817162186],[-35.48920678974,-9.38628467767],[-35.4854020122,-9.38634426236],[-35.48525102896,-9.37809168429],[-35.48126507154,-9.37812147735],[-35.48114428495,-9.36986870367],[-35.47697714765,-9.36995808494],[-35.47685636106,-9.36385031181],[-35.47459161253,-9.36388010609],[-35.47447082594,-9.36152635042],[-35.47211548746,-9.36140717249],[-35.47205509417,-9.35917257881],[-35.46976014899,-9.35920237349],[-35.46966955904,-9.35681879126],[-35.46652910774,-9.3567592015],[-35.46640832115,-9.35288584487],[-35.46387180279,-9.35276666399],[-35.46387180279,-9.35118751337],[-35.44134510403,-9.3513066948],[-35.44125451409,-9.34540716508],[-35.43177276689,-9.34537736922],[-35.4317123736,-9.33602134361],[-35.39463089092,-9.33631931008],[-35.39441951439,-9.30124690873],[-35.38164633265,-9.30142570645],[-35.38146515277,-9.28637657868],[-35.37799253835,-9.28625737508],[-35.3779623417,-9.28110178087],[-35.36941669056,-9.28122098621],[-35.36920531403,-9.27260829561],[-35.35966317354,-9.2727573059],[-35.35969337019,-9.2646510545],[-35.35051358946,-9.26474046271],[-35.35036260622,-9.25562070859],[-35.34115262885,-9.25565051209],[-35.34118282549,-9.24501050089],[-35.31775022732,-9.24518932726],[-35.31759924408,-9.22566691185],[-35.30292367358,-9.22578613599],[-35.30283308363,-9.2113001083],[-35.307936317,-9.2113597228],[-35.30784572706,-9.19979432149],[-35.29102619461,-9.19988374615],[-35.29090540802,-9.19660482728],[-35.29018068849,-9.19669425274],[-35.28996931196,-9.16515547298],[-35.27758868663,-9.16521509525],[-35.27749809669,-9.16417170413],[-35.27541452804,-9.16420151535],[-35.27535413474,-9.16151849576],[-35.27375371245,-9.16148868432],[-35.2736631225,-9.15838828064],[-35.27182112703,-9.15841809234],[-35.27185132368,-9.15728524588],[-35.27148896391,-9.15728524588],[-35.27142857062,-9.15469161013],[-35.26964696844,-9.1546319861],[-35.26958657514,-9.15361837601],[-35.26919401873,-9.15361837601],[-35.26907323214,-9.13158654923],[-35.26403039207,-9.13164617712],[-35.26400019542,-9.12317891652],[-35.26055777765,-9.12320873117],[-35.260527581,-9.11781223884],[-35.25599808393,-9.11784205394],[-35.25572631411,-9.08945695375],[-35.25113642374,-9.08954640613],[-35.25107603045,-9.08650501259],[-35.25026072098,-9.08647519487],[-35.25029091762,-9.08474576336],[-35.24449316137,-9.08477558121],[-35.24449316137,-9.07988541975],[-35.24092995701,-9.07997487452],[-35.24080917042,-9.0731166106],[-35.237336556,-9.0731166106],[-35.23718557277,-9.06321662455],[-35.23655144318,-9.06321662455],[-35.23652124653,-9.04654705576],[-35.23322981199,-9.04651723473],[-35.23332040193,-9.04344565539],[-35.23060270369,-9.04347547668],[-35.23060270369,-9.04013547745],[-35.22897208475,-9.04007583433],[-35.22900228139,-9.03834617941],[-35.22504652062,-9.03825671427],[-35.22501632397,-9.03166605486],[-35.22229862573,-9.03160641033],[-35.22232882238,-9.02012465516],[-35.21834286496,-9.02009483194],[-35.21831266831,-9.01341436936],[-35.21671224601,-9.01341436936],[-35.21668204936,-9.00998461959],[-35.21175999588,-9.00998461959],[-35.21172979923,-9.00646536424],[-35.20970662388,-9.00652501292],[-35.20973682052,-9.00437765419],[-35.20765325187,-9.00431800516],[-35.20768344852,-9.00226010741],[-35.20566027316,-9.00226010741],[-35.20563007651,-8.99987412434],[-35.20390886763,-8.99987412434],[-35.20393906427,-8.99784602637],[-35.20212726545,-8.99790567647],[-35.20212726545,-8.9957880918],[-35.1984432745,-8.99581791702],[-35.1984432745,-8.99361084394],[-35.19433653049,-8.99361084394],[-35.19427613719,-8.99122480384],[-35.19065253954,-8.99131428063],[-35.19062234289,-8.98833170914],[-35.18766307147,-8.98842118664],[-35.18763287482,-8.98543859134],[-35.1847339967,-8.98540876526],[-35.1846736034,-8.98254545043],[-35.18237865822,-8.98251562411],[-35.18234846157,-8.9805172554],[-35.17950997674,-8.98060673484],[-35.1794797801,-8.97741528813],[-35.17809073433,-8.97744511486],[-35.17803034103,-8.97306055853],[-35.17558441262,-8.97303073144],[-35.17549382268,-8.96912336076],[-35.17292710767,-8.96909353334],[-35.17283651773,-8.96291920489],[-35.17063216249,-8.96288937697],[-35.17048117925,-8.95579026036],[-35.16851839719,-8.95564111777],[-35.16851839719,-8.94806459361],[-35.16794466089,-8.94800493531],[-35.16791446424,-8.9399509755],[-35.16244887111,-8.9399509755],[-35.16241867447,-8.92977886806],[-35.15870448687,-8.9298086987],[-35.15873468352,-8.92661680615],[-35.15547344563,-8.92667646795],[-35.15550364227,-8.92378285946],[-35.15348046692,-8.92381269059],[-35.15338987697,-8.92065057698],[-35.15130630832,-8.92062074559],[-35.15121571838,-8.91193970728],[-35.1526349608,-8.91193970728],[-35.1526349608,-8.90821067559],[-35.15438636633,-8.908240508],[-35.15429577639,-8.90215464709],[-35.15592639533,-8.90212481419],[-35.15592639533,-8.90051383392],[-35.15767780087,-8.90048400089],[-35.15773819416,-8.89905201236],[-35.15958018964,-8.89908184551],[-35.15954999299,-8.89747085185],[-35.16139198846,-8.89750068513],[-35.16133159517,-8.89624768526],[-35.16362654035,-8.89624768526],[-35.1635963437,-8.89526318235],[-35.16552892912,-8.89526318235],[-35.16549873247,-8.89314500045],[-35.16794466089,-8.89314500045],[-35.16791446424,-8.89147431313],[-35.17023960607,-8.89153398066],[-35.17026980272,-8.89040029582],[-35.17301769761,-8.89043012968],[-35.17301769761,-8.88875942997],[-35.17790955445,-8.88875942997],[-35.17793975109,-8.88795391132],[-35.17893624045,-8.88792407726],[-35.17893624045,-8.8889085999],[-35.17966095998,-8.88893843387],[-35.17978174657,-8.88858042598],[-35.18098961245,-8.88861025998],[-35.18098961245,-8.88816274965],[-35.1851869464,-8.88816274965],[-35.1851869464,-8.88896826785],[-35.18591166594,-8.88899810182],[-35.18591166594,-8.88971411645],[-35.18932388706,-8.88971411645],[-35.1894748703,-8.88929644142],[-35.19013919653,-8.88926660747],[-35.19016939318,-8.88831191982],[-35.19071293283,-8.88831191982],[-35.19077332612,-8.8878942432],[-35.1915282423,-8.88792407726],[-35.19155843895,-8.88619369772],[-35.19753737508,-8.8860743609],[-35.19756757173,-8.88729756147],[-35.19968133703,-8.88729756147],[-35.19974173032,-8.88777490693],[-35.20079861297,-8.88777490693],[-35.20079861297,-8.88822241773],[-35.20330493468,-8.88822241773],[-35.20336532798,-8.88869976198],[-35.20563007651,-8.88861025998],[-35.20556968322,-8.88983345208],[-35.20741167869,-8.88980361818],[-35.20744187534,-8.89022129263],[-35.21124665288,-8.8902511265],[-35.21127684953,-8.8876854047],[-35.21245451877,-8.88777490693],[-35.21248471541,-8.88861025998],[-35.21622909966,-8.88858042598],[-35.21622909966,-8.88747656609],[-35.21870522472,-8.887446732],[-35.21870522472,-8.88896826785],[-35.22136252967,-8.88896826785],[-35.22263078885,-8.88792407726],[-35.22401983462,-8.88747656609],[-35.22453317762,-8.88762573654],[-35.22643556639,-8.88717822501],[-35.22706969598,-8.88598485826],[-35.2331090254,-8.88446331002],[-35.23932953471,-8.88338927217],[-35.24129231678,-8.88416496649],[-35.25010973774,-8.88514949923],[-35.25623965711,-8.88505999636],[-35.26167505359,-8.88294175546],[-35.2616146603,-8.88094284086],[-35.26406058872,-8.88109201397],[-35.26877126567,-8.87930193267],[-35.27420666215,-8.87748200772],[-35.27810202963,-8.87518471252],[-35.28498686518,-8.87506537212],[-35.28501706183,-8.875811249],[-35.28809711983,-8.87578141395],[-35.29404585932,-8.87545322829],[-35.30781553041,-8.87208184942],[-35.31756904744,-8.86960550716],[-35.32783590746,-8.86715898394],[-35.33206343806,-8.8661445671],[-35.34103184226,-8.86375769289],[-35.34710136833,-8.86244490546],[-35.3522046017,-8.86113211335],[-35.35256696146,-8.86390687298],[-35.34903395375,-8.86611473127],[-35.34495740639,-8.87205201407],[-35.34326639415,-8.87488636144],[-35.3431758042,-8.8756919088],[-35.34380993379,-8.87667646429],[-35.34480642315,-8.87679580417],[-35.34888297051,-8.87721349344],[-35.35042299952,-8.87781019157],[-35.35253676482,-8.87891408057],[-35.35398620388,-8.88010747033],[-35.35576780606,-8.88252407272],[-35.35754940824,-8.88395612587],[-35.36035769642,-8.88511966494],[-35.36114280925,-8.88508983065],[-35.36120320254,-8.88586552137],[-35.36174674219,-8.8858953556],[-35.36177693884,-8.88777490693],[-35.36253185502,-8.88783457507],[-35.36247146172,-8.89099697249],[-35.36310559131,-8.89111630771],[-35.36310559131,-8.89481568015],[-35.36440404714,-8.89487534714],[-35.36506837338,-8.8966951857],[-35.3663668292,-8.90021550347],[-35.36754449844,-8.90427277684],[-35.36793705485,-8.90782285411],[-35.36863157774,-8.90916531133],[-35.37207399551,-8.91155188976],[-35.37409717087,-8.91349097325],[-35.37276851839,-8.91599685052],[-35.37261753516,-8.91817456324],[-35.37083593298,-8.92229129973],[-35.37062455645,-8.92485677869],[-35.37234576533,-8.93037548043],[-35.37153045586,-8.93192666805],[-35.37153045586,-8.93362700074],[-35.37171163574,-8.93386564329],[-35.37171163574,-8.94362002373],[-35.36817862803,-8.94376917125],[-35.36814843138,-8.9450518374],[-35.36926570733,-8.94511149618],[-35.36920531403,-8.94863134694],[-35.37077553968,-8.94872083423],[-35.37080573633,-8.95182304658],[-35.3721947821,-8.9517633889],[-35.37222497875,-8.9552831753],[-35.37319127145,-8.95531300385],[-35.37313087816,-8.95737116808],[-35.37439913734,-8.95737116808],[-35.37445953063,-8.96011536892],[-35.37566739652,-8.96017502523],[-35.37569759317,-8.96205419397],[-35.3768752624,-8.96208402197],[-35.3769356557,-8.964440426],[-35.37781135847,-8.964440426],[-35.37775096517,-8.96617043441],[-35.38074043324,-8.96617043441],[-35.38074043324,-8.96330696774],[-35.38288439518,-8.96327713984],[-35.38291459183,-8.95981708722],[-35.38542091354,-8.9598469154],[-35.38542091354,-8.95722202613],[-35.38723271237,-8.95722202613],[-35.38720251572,-8.95406020253],[-35.38946726426,-8.95409003118],[-35.38946726426,-8.9508386936],[-35.39158102956,-8.95086852252],[-35.39158102956,-8.94791544785],[-35.39586895345,-8.94791544785],[-35.39580856016,-8.94651347472],[-35.39719760593,-8.94654330399],[-35.39710701598,-8.94472371393],[-35.39837527516,-8.94469388451],[-35.39837527516,-8.93914556972],[-35.4010741005,-8.93915302719],[-35.40106277676,-8.93895167547],[-35.4016667097,-8.93893676052],[-35.40172710299,-8.93687849204],[-35.40236123258,-8.93687849204],[-35.40236123258,-8.9362818903],[-35.40323693535,-8.93640121073],[-35.40329732865,-8.93583443836],[-35.40426362135,-8.93580460821],[-35.40420322806,-8.93362700074],[-35.40574325706,-8.93359717041],[-35.40577345371,-8.93124056665],[-35.40809859554,-8.93133005821],[-35.40803820225,-8.92927174677],[-35.40936685472,-8.92930157745],[-35.40927626478,-8.92739240878],[-35.41084649043,-8.92742223962],[-35.41084649043,-8.92542356812],[-35.41238651943,-8.92545339912],[-35.41235632279,-8.92390218397],[-35.41335281214,-8.92387235285],[-35.41329241885,-8.92193332448],[-35.41522500426,-8.92196315577],[-35.41522500426,-8.91999428582],[-35.41655365674,-8.92002411726],[-35.41655365674,-8.91754809927],[-35.4196035181,-8.91754809927],[-35.41966391139,-8.91963630832],[-35.42183806999,-8.91963630832],[-35.42186826663,-8.92264927462],[-35.42389144199,-8.92267910584],[-35.42392163864,-8.92512525801],[-35.4253710777,-8.92512525801],[-35.4253710777,-8.92766088623],[-35.42724326982,-8.92766088623],[-35.42727346647,-8.92986835998],[-35.42814916924,-8.92983852934],[-35.42817936588,-8.93159853276],[-35.42987037812,-8.93153887177],[-35.42990057477,-8.93407445539],[-35.43141040713,-8.93407445539],[-35.43141040713,-8.9355957971],[-35.43225591325,-8.93556596693],[-35.43228610989,-8.93586426851],[-35.43340338584,-8.93583443836],[-35.43340338584,-8.94001063511],[-35.4343394819,-8.94004046492],[-35.4343394819,-8.94096518765],[-35.43530577461,-8.94096518765],[-35.43533597125,-8.94260581897],[-35.43566813437,-8.94263564856],[-35.43569833102,-8.94329189897],[-35.43627206732,-8.94332172851],[-35.43624187067,-8.94421661344],[-35.43729875332,-8.94421661344],[-35.43726855667,-8.94520098434],[-35.43823484938,-8.94520098434],[-35.43826504603,-8.94684159657],[-35.4390199622,-8.94687142582],[-35.4390199622,-8.94797510616],[-35.44025802474,-8.94797510616],[-35.44031841803,-8.94952621882],[-35.44158667721,-8.94955604785],[-35.4416470705,-8.95152475808],[-35.4427341498,-8.95152475808],[-35.4427341498,-8.95334431412],[-35.44436476875,-8.95334431412],[-35.44436476875,-8.95498488964],[-35.44569342122,-8.95501471821],[-35.44563302793,-8.9567447715],[-35.44720325358,-8.95680442836],[-35.44717305693,-8.95865378627],[-35.44895465911,-8.95871344282],[-35.44892446246,-8.95999605627],[-35.45100803112,-8.95993639993],[-35.45097783447,-8.96101021254],[-35.45469202207,-8.96095055636],[-35.45466182542,-8.96235247383],[-35.46048977832,-8.96235247383],[-35.46055017161,-8.96557388071],[-35.46652910774,-8.96548439758],[-35.46658950104,-8.9688549139],[-35.46770677698,-8.96882508646],[-35.46773697363,-8.97052524668],[-35.47389708964,-8.97052524668],[-35.47398767958,-8.97529758369],[-35.47791324371,-8.97520810295],[-35.47797363701,-8.97816095576],[-35.48410355637,-8.97813112908],[-35.48416394967,-8.98200857638],[-35.49083740868,-8.98194892366],[-35.49083740868,-8.98561754775],[-35.49720890123,-8.98561754775],[-35.49720890123,-8.99068794266],[-35.5022517413,-8.99056864006],[-35.50234233124,-8.99566879088],[-35.5064792719,-8.99566879088],[-35.50650946855,-8.99856182695],[-35.51203545497,-8.99850217696],[-35.51206565162,-9.00163378838],[-35.51662534534,-9.00166361312],[-35.51665554198,-9.00616712068],[-35.52118503905,-9.00613729631],[-35.5212152357,-9.00738991769],[-35.5312707192,-9.00733026915],[-35.5312707192,-9.01064074815],[-35.54818084159,-9.01049162813],[-35.54818084159,-9.01359331193],[-35.56968085435,-9.01344419313],[-35.56974124764,-9.01738090893],[-35.58574547062,-9.01732126204],[-35.58577566727,-9.01994571582],[-35.60957062521,-9.01982642288],[-35.60954042856,-9.02301749544],[-35.62910785591,-9.02286838053],[-35.62904746261,-9.02507527493],[-35.65220829096,-9.02489633805],[-35.65223848761,-9.02758038195],[-35.67552010255,-9.02740144631],[-35.6755502992,-9.03056262951],[-35.68294847774,-9.03056262951],[-35.68297867439,-9.03435004835],[-35.69128275235,-9.03432022631],[-35.69128275235,-9.03766027947],[-35.69949624037,-9.03760063593],[-35.69949624037,-9.04034422831],[-35.70668304239,-9.04031440677],[-35.70671323904,-9.04517528582],[-35.71115214617,-9.04517528582],[-35.71133332605,-9.06691424164],[-35.70870621775,-9.06691424164],[-35.70876661104,-9.07869268732],[-35.7065622558,-9.07872250568],[-35.7065622558,-9.08653483029],[-35.70429750727,-9.08653483029],[-35.70432770391,-9.09103727588],[-35.69991899343,-9.09106709321],[-35.69988879679,-9.09559929877],[-35.69535929972,-9.09556948181],[-35.69541969301,-9.1000121806],[-35.69092039259,-9.10013144692],[-35.69101098253,-9.10206951907],[-35.63366754962,-9.10245713224],[-35.63369774627,-9.10540894182],[-35.62584661802,-9.10552820634],[-35.62590701131,-9.10964280796],[-35.6223136103,-9.10964280796],[-35.62234380695,-9.11202806257],[-35.61989787853,-9.11199824698],[-35.61989787853,-9.11500960843],[-35.61473425187,-9.11506923909],[-35.61473425187,-9.11706686056],[-35.61177498045,-9.11700723023],[-35.6118051771,-9.11819983493],[-35.60960082186,-9.11825946506],[-35.60963101851,-9.12571315292],[-35.59975671489,-9.12583241066],[-35.59978691154,-9.12923123948],[-35.59634449377,-9.12926105363],[-35.59640488706,-9.13501513686],[-35.59196597993,-9.13507476418],[-35.59208676652,-9.14899746988],[-35.59018437775,-9.14896765739],[-35.5901541811,-9.15108433815],[-35.60159871037,-9.15105452583],[-35.60153831707,-9.14911671983],[-35.60552427449,-9.14911671983],[-35.60549407785,-9.14556901687],[-35.61183537375,-9.14553920409],[-35.61183537375,-9.14234922223],[-35.61760293335,-9.14237903528],[-35.6175727367,-9.13853313161],[-35.62400462254,-9.13853313161],[-35.62397442589,-9.13465737274],[-35.63176516085,-9.13465737274],[-35.63164437426,-9.13063250159],[-35.6392237327,-9.13060268756],[-35.63919353605,-9.12878402702],[-35.66386419676,-9.12869458446],[-35.66380380346,-9.12610074043],[-35.71278276511,-9.12577278179],[-35.71275256846,-9.12407335495],[-35.72425749102,-9.12401372579],[-35.71963740401,-9.15323081845],[-35.72111703972,-9.15320100631],[-35.72123782631,-9.17257836825],[-35.72066409001,-9.17254855774],[-35.72081507325,-9.18557551362],[-35.71211843887,-9.18566494187],[-35.71329610811,-9.34415573683],[-35.69040704959,-9.34433451257],[-35.69064862276,-9.3718946735],[-35.68898780717,-9.3718946735],[-35.68901800382,-9.37597637093],[-35.68756856476,-9.37597637093],[-35.6876591547,-9.38232227231],[-35.6849716531,-9.38235206501],[-35.6850320464,-9.39093225328],[-35.68168021856,-9.39099183718],[-35.68177080851,-9.39936327296],[-35.67715072149,-9.39933348173],[-35.67724131144,-9.40889633403],[-35.6729231909,-9.40892612443],[-35.67301378084,-9.41753544361],[-35.6697223463,-9.41759502292],[-35.66978273959,-9.42498277846],[-35.66721602459,-9.42498277846],[-35.66727641788,-9.43269804791],[-35.6607539421,-9.43287677797],[-35.6607539421,-9.43704711987],[-35.65130239155,-9.43707690785],[-35.65142317814,-9.44211103864],[-35.64514227553,-9.44217061371],[-35.64523286547,-9.44651956613],[-35.63644564116,-9.44660892759],[-35.63644564116,-9.44991528532],[-35.62711487719,-9.4500046459],[-35.62726586043,-9.46504667925],[-35.62086417124,-9.46510625035],[-35.62092456453,-9.47219513764],[-35.60938944533,-9.47222492257],[-35.60938944533,-9.47529275674],[-35.59673705018,-9.47535232607],[-35.59673705018,-9.47350567221],[-35.57843788202,-9.47371416589],[-35.57846807866,-9.47594801874],[-35.57267032241,-9.47603737255],[-35.57270051906,-9.48041568084],[-35.56823141529,-9.48047524927],[-35.56826161193,-9.48881472807],[-35.54168856246,-9.48893386201],[-35.54162816916,-9.48071352291],[-35.523842344,-9.48089222803]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"arapiraca_al","name":"Arapiraca AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Arapiraca&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.60875162133,-9.83071802463],[-36.60783704041,-9.74047303963],[-36.61718167158,-9.74051223078],[-36.61630685505,-9.65075247124],[-36.70736730351,-9.64977242883],[-36.70832164882,-9.74043384847],[-36.69897701764,-9.74047303963],[-36.69997112734,-9.82967973955],[-36.60875162133,-9.83071802463]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"CRAIG-Auvergne-2013","name":"Auvergne 2013 25cm CRAIG","type":"tms","template":"https://tiles.craig.fr/osm/wmts/1.0.0/ortho_2013/webmercator/{zoom}/{x}/{y}.jpeg","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","polygon":[[[2.9401192,44.6338837],[2.9971896,44.633931],[2.9971676,44.6473385],[3.0159744,44.6473541],[3.0159305,44.6741168],[3.0349486,44.6741326],[3.0349036,44.7015216],[3.0536338,44.7015371],[3.0535675,44.7418954],[3.0723301,44.741911],[3.0722196,44.8091687],[3.0921583,44.8091852],[3.092137,44.8221252],[3.1301398,44.8221567],[3.1300495,44.8770722],[3.1485587,44.8770875],[3.1485807,44.8636964],[3.1682313,44.8637126],[3.1682538,44.8500261],[3.2064,44.8500576],[3.2063789,44.8628393],[3.2439492,44.8628704],[3.2439263,44.8767893],[3.2631452,44.8768052],[3.2630782,44.9175197],[3.3200437,44.9175667],[3.3200227,44.9303336],[3.3390815,44.9303493],[3.3390586,44.9441978],[3.3769989,44.9442292],[3.3770218,44.9302879],[3.396031,44.9303036],[3.39612,44.8762713],[3.4148252,44.8762867],[3.4148923,44.8355255],[3.4333371,44.8355408],[3.4333819,44.8082784],[3.4525549,44.8082943],[3.4525774,44.7946344],[3.5089262,44.7946811],[3.508904,44.8081469],[3.604265,44.8082258],[3.6042213,44.8348239],[3.6236136,44.83484],[3.6235695,44.8616583],[3.6424823,44.8616739],[3.642549,44.821102],[3.6610055,44.8211172],[3.6610275,44.8077696],[3.6992999,44.8078013],[3.6992782,44.820994],[3.7361139,44.8210245],[3.7361819,44.7797075],[3.7751058,44.7797397],[3.775151,44.7522344],[3.8118352,44.7522648],[3.8118567,44.7392021],[3.8311822,44.7392181],[3.8312061,44.7246766],[3.887824,44.7247235],[3.8878019,44.7381833],[3.925626,44.7382146],[3.9256039,44.7516682],[3.9454097,44.7516846],[3.9453656,44.7784691],[3.9643737,44.7784848],[3.9643516,44.7919273],[4.0033183,44.7919596],[4.0032964,44.8052575],[4.0216937,44.8052727],[4.0216718,44.8185687],[4.0596515,44.8186001],[4.0596082,44.8449216],[4.0798132,44.8449383],[4.0797928,44.8573502],[4.173882,44.857428],[4.1738604,44.8705468],[4.1932576,44.8705628],[4.193235,44.8842744],[4.2140385,44.8842916],[4.2139961,44.9100242],[4.2324138,44.9100394],[4.2323689,44.9373093],[4.2715486,44.9373416],[4.2715273,44.9502971],[4.3288672,44.9503445],[4.3287793,45.0036659],[4.3489259,45.0036825],[4.3489038,45.0170656],[4.4060793,45.0171127],[4.4059904,45.0710024],[4.3884707,45.0709879],[4.3884482,45.0845976],[4.407943,45.0846137],[4.4079231,45.09663],[4.4843608,45.0966929],[4.4842941,45.1370472],[4.4663631,45.1370324],[4.4663413,45.1502035],[4.4864469,45.15022],[4.4864022,45.1772415],[4.5065524,45.177258],[4.5064402,45.2450058],[4.4881342,45.2449908],[4.4881106,45.2592077],[4.4698588,45.2591927],[4.469836,45.2729835],[4.4508849,45.2729679],[4.4508626,45.2864203],[4.3936753,45.2863733],[4.3936303,45.3135182],[4.3750893,45.3135029],[4.3750662,45.3274054],[4.3950734,45.3274218],[4.3950283,45.3545849],[4.3767871,45.35457],[4.3767639,45.3685486],[4.3576564,45.3685329],[4.3576335,45.3823359],[4.2814576,45.3822734],[4.2814334,45.3968834],[4.2444556,45.3968531],[4.2444325,45.4107893],[4.1481178,45.4107104],[4.1481388,45.3980659],[4.1291913,45.3980504],[4.1292145,45.3840899],[4.0902138,45.3840579],[4.0902351,45.3712093],[4.0135507,45.3711464],[4.0135259,45.3860975],[3.9170932,45.3860185],[3.9170704,45.3997355],[3.9375703,45.3997523],[3.9375481,45.4131142],[3.975277,45.4131451],[3.9752552,45.4262061],[3.9953725,45.4262226],[3.9956999,45.5209568],[3.9777821,45.5209421],[3.977693,45.5743873],[3.9581755,45.5743714],[3.9581522,45.5883658],[3.9396019,45.5883506],[3.9395781,45.6026212],[3.9202279,45.6026054],[3.9202048,45.6164603],[3.8818916,45.616429],[3.8818468,45.643276],[3.8441329,45.6432453],[3.8441098,45.6570896],[3.8261689,45.657075],[3.8261241,45.6838865],[3.8072175,45.6838711],[3.8071277,45.7375802],[3.7882101,45.7375648],[3.7881863,45.7517966],[3.7688482,45.7517809],[3.7688028,45.7789651],[3.750719,45.7789504],[3.7505822,45.8606554],[3.7696692,45.8606709],[3.7695793,45.914333],[3.751661,45.9143185],[3.7516379,45.9280879],[3.7328974,45.9280727],[3.7328527,45.9547155],[3.8101795,45.9547782],[3.8101569,45.9682278],[3.8495994,45.9682598],[3.8495098,46.0216192],[3.8318849,46.0216049],[3.8317936,46.0759058],[3.8505037,46.0759209],[3.8504583,46.1029545],[3.8324727,46.10294],[3.8323353,46.1845598],[3.8142194,46.1845452],[3.8141522,46.2244234],[3.8336864,46.2244392],[3.8336634,46.2381001],[3.8528929,46.2381156],[3.8528703,46.2514729],[3.8931424,46.2515054],[3.8931205,46.2644677],[3.9130562,46.2644838],[3.9130335,46.2779317],[3.9518926,46.2779631],[3.9518709,46.2908227],[3.971523,46.2908386],[3.9715012,46.3036947],[4.0105021,46.3037261],[4.0104784,46.3177638],[4.0298278,46.3177794],[4.029783,46.3442827],[4.0116018,46.344268],[4.0114647,46.4253437],[4.031532,46.4253598],[4.0314635,46.4657978],[4.0132435,46.4657832],[4.0132204,46.479378],[3.9943703,46.4793629],[3.9943461,46.4936113],[3.9745971,46.4935955],[3.9745735,46.5075278],[3.8775423,46.5074499],[3.8774959,46.5347758],[3.8583577,46.5347605],[3.8583347,46.5483156],[3.8186897,46.5482838],[3.8187114,46.5355316],[3.7992386,46.535516],[3.7992156,46.5490706],[3.7610377,46.5490399],[3.7609226,46.6168059],[3.7423295,46.616791],[3.7422834,46.6439624],[3.7228558,46.6439468],[3.7228098,46.6710357],[3.7038706,46.6710206],[3.7038474,46.6846709],[3.6841096,46.6846551],[3.6840631,46.711998],[3.6648359,46.7119826],[3.6647898,46.7390375],[3.6457623,46.7390222],[3.6457158,46.7663375],[3.6257542,46.7663216],[3.6257314,46.7797093],[3.5672301,46.7796626],[3.5672528,46.7663082],[3.5471462,46.7662922],[3.5471922,46.7392824],[3.5271621,46.7392664],[3.5272308,46.6988967],[3.4877399,46.6988651],[3.4877618,46.685943],[3.4679636,46.6859272],[3.4679407,46.6994059],[3.4679179,46.7127907],[3.4486497,46.7127753],[3.4486258,46.7267878],[3.350433,46.7267092],[3.3504786,46.6999004],[3.3303913,46.6998843],[3.3303448,46.7271984],[3.2327174,46.7271203],[3.2327406,46.7135148],[3.2129042,46.7134989],[3.212927,46.7001302],[3.1735446,46.7000987],[3.173498,46.7275094],[3.1541227,46.7274939],[3.1541002,46.7407271],[3.1147772,46.7406957],[3.114754,46.7542756],[3.0753432,46.7542441],[3.0752971,46.7813548],[3.05597,46.7813394],[3.055924,46.8083069],[2.99704,46.8082598],[2.9970166,46.8219593],[2.9379443,46.8219121],[2.9379675,46.8082604],[2.8986634,46.808229],[2.8986872,46.7942392],[2.878991,46.7942234],[2.8790134,46.7810427],[2.8594188,46.781027],[2.8594415,46.7677056],[2.8400446,46.7676901],[2.8400671,46.754466],[2.7414032,46.7543871],[2.741382,46.7668245],[2.7023351,46.7667932],[2.7023571,46.7538869],[2.6826621,46.7538711],[2.6826849,46.7404752],[2.6634875,46.7404599],[2.6635123,46.7258966],[2.6434164,46.7258805],[2.6434382,46.7130938],[2.6241432,46.7130784],[2.6241658,46.6998093],[2.6039699,46.6997931],[2.6039936,46.6858433],[2.5651245,46.6858122],[2.5651469,46.6726126],[2.5459278,46.6725972],[2.5459966,46.6321534],[2.5659222,46.6321694],[2.565946,46.6181104],[2.5456397,46.6180941],[2.5456862,46.5907192],[2.5664225,46.5907358],[2.5664449,46.5775417],[2.5854963,46.577557],[2.5855181,46.5647199],[2.5661318,46.5647044],[2.5661557,46.5506246],[2.468279,46.5505461],[2.4683039,46.5358205],[2.3321246,46.5357112],[2.3321701,46.5088566],[2.3126474,46.5088409],[2.3126703,46.4953444],[2.2928767,46.4953285],[2.2928996,46.4818182],[2.2748687,46.4818037],[2.2749151,46.4544154],[2.2553921,46.4543997],[2.255529,46.3734888],[2.275948,46.3735052],[2.276037,46.3208741],[2.3145615,46.3209052],[2.3145849,46.3070421],[2.3537075,46.3070737],[2.3537313,46.2929669],[2.3938428,46.2929992],[2.3938862,46.2672854],[2.4515727,46.267332],[2.451596,46.2534921],[2.4709353,46.2535077],[2.4709807,46.2265552],[2.4915062,46.2265718],[2.4915521,46.199329],[2.5108806,46.1993446],[2.5109254,46.1727799],[2.5311728,46.1727963],[2.5313772,46.051352],[2.5516349,46.0513684],[2.5516577,46.0377665],[2.5705635,46.0377818],[2.5706774,45.9699434],[2.5514356,45.9699278],[2.551458,45.9566151],[2.5322621,45.9565995],[2.5322849,45.9430066],[2.5130653,45.942991],[2.513134,45.9020279],[2.4749412,45.9019969],[2.4749633,45.8888235],[2.4361947,45.888792],[2.4362172,45.8753288],[2.417209,45.8753133],[2.4172548,45.8479368],[2.3784736,45.8479053],[2.378497,45.8339746],[2.3595157,45.8339592],[2.3595606,45.8070849],[2.3787254,45.8071005],[2.3787481,45.7935783],[2.3986981,45.7935945],[2.3987203,45.7803477],[2.4182486,45.7803636],[2.4183161,45.7400007],[2.4572171,45.7400324],[2.4572394,45.7266956],[2.4758919,45.7267107],[2.4759144,45.7132391],[2.49533,45.7132549],[2.4954204,45.6591268],[2.4576942,45.659096],[2.4577622,45.618343],[2.4391188,45.6183278],[2.4391866,45.5776619],[2.4585044,45.5776777],[2.4585496,45.5505348],[2.4780887,45.5505508],[2.4781108,45.5372464],[2.4975506,45.5372623],[2.4975949,45.5106757],[2.4785536,45.5106601],[2.4786444,45.4561337],[2.4597798,45.4561183],[2.4598701,45.401757],[2.4224876,45.4017264],[2.4224651,45.4152816],[2.4023154,45.4152651],[2.4022929,45.4288193],[2.3256006,45.4287565],[2.3256684,45.3879609],[2.3456182,45.3879773],[2.3456629,45.3611091],[2.326256,45.3610932],[2.326279,45.3472146],[2.3073819,45.3471991],[2.3074045,45.3335972],[2.2881095,45.3335813],[2.2881307,45.3208191],[2.2696332,45.3208039],[2.2696574,45.306212],[2.2506602,45.3061964],[2.2506828,45.2925147],[2.2316866,45.2924992],[2.2317086,45.2792355],[2.2130009,45.2792202],[2.213046,45.2520355],[2.1937387,45.2520197],[2.1937617,45.2381134],[2.1756091,45.2380985],[2.1757423,45.1576822],[2.1573543,45.157667],[2.1574448,45.1029478],[2.1202408,45.1029172],[2.1202629,45.0895468],[2.1006669,45.0895306],[2.1006902,45.0754441],[2.0824591,45.0754291],[2.082548,45.0215961],[2.1025534,45.0216126],[2.1025982,44.994453],[2.0457406,44.9944061],[2.0458508,44.9275321],[2.0657794,44.9275486],[2.0658912,44.8596881],[2.0856964,44.8597044],[2.0857193,44.8458126],[2.1055593,44.8458291],[2.1056029,44.8193264],[2.124743,44.8193422],[2.1247657,44.805512],[2.1435067,44.8055275],[2.143551,44.778597],[2.1256091,44.7785822],[2.1256984,44.7242739],[2.1066459,44.7242581],[2.1067116,44.6842263],[2.1263414,44.6842426],[2.1263635,44.670735],[2.14598,44.6707513],[2.146069,44.6164441],[2.1839622,44.6164756],[2.183983,44.6037819],[2.2404173,44.6038288],[2.2403728,44.6309515],[2.25948,44.6309674],[2.2594571,44.644934],[2.316678,44.6449815],[2.3167011,44.6308801],[2.3361516,44.6308963],[2.3361734,44.6175824],[2.3724238,44.6176125],[2.3724009,44.6315823],[2.4110495,44.6316144],[2.4110701,44.6190741],[2.4492173,44.6191058],[2.4491956,44.6323197],[2.5048575,44.6323659],[2.5048126,44.6597555],[2.5246119,44.6597719],[2.524567,44.6871739],[2.5422544,44.6871886],[2.5422313,44.70122],[2.5807101,44.701252],[2.5805999,44.7683374],[2.61769,44.7683681],[2.6176235,44.808838],[2.6367564,44.8088539],[2.6366899,44.8492948],[2.6733105,44.8493251],[2.6732888,44.8625164],[2.6933766,44.862533],[2.6933323,44.8894303],[2.7305201,44.8894611],[2.7304757,44.9164461],[2.7499202,44.9164622],[2.7500519,44.8364688],[2.8073346,44.8365162],[2.8073139,44.8491017],[2.8263796,44.8491175],[2.8264007,44.8362845],[2.8457039,44.8363004],[2.8457707,44.7957107],[2.8642166,44.795726],[2.8642611,44.7686452],[2.8839885,44.7686615],[2.8840323,44.7419697],[2.9020315,44.7419846],[2.9021426,44.6743192],[2.9219777,44.6743357],[2.9220221,44.6472986],[2.9400972,44.6473136],[2.9401192,44.6338837]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/CRAIG","terms_text":"Orthophotographie CRAIG/Sintegra/IGN 2013"},{"id":"CRAIG-Auvergne-2016","name":"Auvergne 2016 25cm CRAIG","type":"tms","template":"https://tiles.craig.fr/ortho/wmts/1.0.0/ortho_2016/webmercator/{zoom}/{x}/{y}.jpeg","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","polygon":[[[2.493891,46.6682909],[2.7136176,46.8414109],[3.6474555,46.8075834],[4.0484565,46.4832686],[4.0374701,46.2482538],[4.4604438,46.2596487],[4.4934028,46.1455925],[4.3835395,46.0922853],[4.4549506,45.6908367],[4.7625678,45.5717589],[4.8120063,45.344428],[4.2242377,44.8441895],[3.8616889,44.6959969],[3.3782905,44.8052283],[3.3343451,44.8909082],[3.1805365,44.8247122],[3.0322211,44.6061167],[2.927851,44.6022057],[2.7191108,44.8519786],[2.5103705,44.6022057],[2.125849,44.5826468],[2.0049994,44.9725746],[2.3071235,45.4678399],[2.4334662,45.4408666],[2.4114936,45.7291949],[2.3455756,45.8240183],[2.5488227,45.9797905],[2.4609321,46.2216563],[2.2137397,46.3393472],[2.2782844,46.5390305],[2.5488227,46.5664179],[2.493891,46.6682909]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/CRAIG","terms_text":"CRAIG - IGN -TopoGEODIS - Feder Auvergne-Rhône-Alpes 2016"},{"id":"BANO","name":"BANO","type":"tms","template":"https://{switch:a,b,c}.layers.openstreetmap.fr/bano/{zoom}/{x}/{y}.png","scaleExtent":[12,20],"polygon":[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.358164,51.32937],[2.548804,51.09759],[2.570482,51.07409],[2.587412,51.01763],[2.598448,51.0051],[2.615575,50.99749],[2.639859,50.95766],[2.642247,50.94578],[2.624519,50.9256],[2.61962,50.91067],[2.623964,50.86071],[2.627811,50.85054],[2.637859,50.83696],[2.651102,50.82906],[2.732666,50.81738],[2.79995,50.73795],[2.816552,50.73092],[2.852648,50.73335],[2.890719,50.7162],[2.904925,50.71536],[2.916096,50.72418],[2.935084,50.75592],[3.007184,50.78377],[3.082183,50.78749],[3.092439,50.79092],[3.114119,50.80566],[3.148768,50.80195],[3.215401,50.73111],[3.221487,50.7267],[3.270507,50.70375],[3.275448,50.67757],[3.265761,50.6604],[3.265877,50.64054],[3.289219,50.60028],[3.292195,50.55037],[3.305598,50.53267],[3.375514,50.50839],[3.389804,50.50884],[3.474798,50.54445],[3.52173,50.53459],[3.532662,50.51873],[3.547788,50.51012],[3.615234,50.50558],[3.673778,50.45642],[3.684152,50.35277],[3.690097,50.34044],[3.702583,50.33482],[3.715758,50.33854],[3.749349,50.36279],[3.841089,50.36558],[3.901887,50.3436],[3.913173,50.34291],[4.026717,50.36904],[4.13761,50.29984],[4.143881,50.29727],[4.214438,50.28167],[4.229037,50.26664],[4.230782,50.25233],[4.170843,50.18579],[4.166015,50.16888],[4.176401,50.1547],[4.211948,50.13602],[4.240742,50.07102],[4.231934,50.05551],[4.181645,50.03436],[4.17177,50.02537],[4.169755,50.01217],[4.176498,50.00065],[4.206331,49.97546],[4.221639,49.97089],[4.308774,49.98145],[4.445423,49.9523],[4.454691,49.95251],[4.658098,50.00609],[4.669358,50.01392],[4.672929,50.02716],[4.66924,50.06972],[4.695168,50.10472],[4.831227,50.17941],[4.881497,50.16436],[4.904786,50.14451],[4.904264,50.12639],[4.880762,50.0815],[4.862772,50.0745],[4.851037,50.06216],[4.843307,50.03884],[4.843307,50.03883],[4.843295,50.03881],[4.826781,49.989],[4.826618,49.97692],[4.833433,49.96696],[4.896542,49.91753],[4.897546,49.89424],[4.879134,49.86942],[4.876249,49.85111],[4.889238,49.81266],[4.897691,49.80204],[4.910979,49.79926],[4.995343,49.81116],[5.01867,49.79272],[5.026862,49.78886],[5.099438,49.77323],[5.134584,49.73462],[5.141201,49.72984],[5.187609,49.70906],[5.196025,49.70732],[5.281572,49.70836],[5.333628,49.67308],[5.343996,49.65049],[5.354398,49.64041],[5.431412,49.60791],[5.482051,49.52815],[5.492943,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.607602,49.53761],[5.640997,49.56095],[5.706759,49.55267],[5.715782,49.55361],[5.775261,49.57414],[5.839902,49.55321],[5.861263,49.52038],[5.875997,49.5114],[5.975162,49.50129],[5.998015,49.47317],[6.016266,49.46597],[6.08635,49.47562],[6.093186,49.47787],[6.173966,49.52187],[6.246435,49.52511],[6.333999,49.48235],[6.344229,49.48037],[6.435145,49.487],[6.5451,49.44384],[6.606389,49.37868],[6.604972,49.33739],[6.616267,49.31869],[6.670133,49.29269],[6.729955,49.22917],[6.743276,49.19086],[6.760259,49.17752],[6.809042,49.17284],[6.824733,49.17826],[6.830928,49.19366],[6.829819,49.21802],[6.851186,49.23136],[6.884528,49.2239],[6.893221,49.22389],[6.937527,49.23369],[7.040549,49.19794],[7.046296,49.17503],[7.054777,49.16313],[7.069081,49.16018],[7.104945,49.16634],[7.143153,49.14159],[7.153499,49.13839],[7.286827,49.13488],[7.29893,49.13856],[7.360948,49.18259],[7.450116,49.19517],[7.50113,49.17672],[7.543788,49.10572],[7.557903,49.09626],[7.629604,49.08527],[7.647217,49.06722],[7.661197,49.06119],[7.754008,49.05963],[7.760731,49.06067],[7.802913,49.07489],[7.855253,49.05329],[7.867297,49.05227],[7.93826,49.06832],[8.080685,49.00688],[8.222498,48.98787],[8.23704,48.97683],[8.235894,48.95817],[8.208878,48.94863],[8.200888,48.94339],[8.158243,48.89753],[8.100873,48.7993],[7.990709,48.74478],[7.985341,48.7409],[7.904217,48.65865],[7.856051,48.63606],[7.848405,48.62977],[7.818424,48.58883],[7.81456,48.57704],[7.814491,48.50968],[7.785465,48.48337],[7.780554,48.47652],[7.745059,48.39484],[7.743573,48.38427],[7.751593,48.32322],[7.71085,48.29841],[7.702411,48.28803],[7.676613,48.21555],[7.596051,48.11698],[7.591652,48.10648],[7.585216,48.04694],[7.591268,48.03035],[7.624373,47.99865],[7.632049,47.97081],[7.575545,47.87436],[7.572802,47.86435],[7.572673,47.83631],[7.545808,47.78793],[7.544185,47.77232],[7.557581,47.72899],[7.535257,47.6989],[7.531364,47.68564],[7.536998,47.67302],[7.600164,47.60822],[7.589675,47.56755],[7.554237,47.55128],[7.54511,47.54283],[7.512557,47.48439],[7.387471,47.42111],[7.326527,47.4273],[7.244354,47.40939],[7.167083,47.4335],[7.152115,47.47612],[7.14279,47.48707],[7.128529,47.48893],[7.080105,47.47718],[7.035575,47.48695],[7.021019,47.48458],[7.012048,47.47287],[7.002995,47.44095],[6.955099,47.40808],[6.947157,47.39698],[6.94818,47.38337],[6.957691,47.37359],[6.971263,47.37218],[7.018004,47.38386],[7.05623,47.37035],[7.070073,47.35005],[7.05958,47.32257],[6.974243,47.27856],[6.963469,47.26233],[6.961339,47.23479],[6.89443,47.19393],[6.889128,47.18922],[6.855453,47.14636],[6.769073,47.10751],[6.760108,47.09953],[6.725613,47.0418],[6.623551,46.9811],[6.481204,46.9445],[6.46892,46.93522],[6.466862,46.91997],[6.475476,46.88771],[6.453496,46.8239],[6.45644,46.80534],[6.467224,46.79104],[6.460984,46.76887],[6.15817,46.59343],[6.148724,46.58069],[6.15152,46.56508],[6.165489,46.54399],[6.158111,46.52456],[6.101739,46.46979],[6.095717,46.45418],[6.097044,46.43317],[6.108289,46.41643],[6.166216,46.38839],[6.178173,46.36922],[6.137482,46.31297],[6.133713,46.30227],[6.130383,46.23737],[6.110298,46.22344],[6.088648,46.23081],[6.077173,46.23123],[6.018573,46.21601],[6.006813,46.20752],[6.003882,46.19332],[6.007866,46.16977],[6.017834,46.15564],[6.03509,46.15456],[6.055639,46.16288],[6.124683,46.15415],[6.137776,46.15702],[6.240258,46.22094],[6.249058,46.23299],[6.247073,46.24777],[6.21148,46.31057],[6.212186,46.32485],[6.239462,46.36705],[6.316478,46.41557],[6.410826,46.42495],[6.417483,46.42682],[6.504978,46.46871],[6.630473,46.47435],[6.746646,46.45695],[6.822442,46.42925],[6.818324,46.38181],[6.804843,46.36179],[6.801885,46.34639],[6.810949,46.33359],[6.864911,46.30038],[6.875036,46.28007],[6.860917,46.2439],[6.826978,46.21188],[6.820746,46.19862],[6.818627,46.16592],[6.822593,46.15261],[6.834266,46.14509],[6.903819,46.12971],[6.904911,46.09595],[6.909323,46.08406],[6.920006,46.07721],[6.948976,46.0699],[7.015561,46.00883],[7.051911,45.93066],[7.045335,45.92217],[7.044967,45.92064],[7.043936,45.92036],[6.995822,45.85822],[6.940965,45.83551],[6.843757,45.82387],[6.831016,45.81711],[6.826141,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.841405,45.71373],[6.907294,45.69124],[6.92419,45.66935],[6.942468,45.66172],[6.971313,45.66528],[7.00597,45.64945],[7.011511,45.63652],[6.997797,45.60877],[6.996431,45.59465],[7.015803,45.52354],[7.027743,45.5102],[7.107198,45.47877],[7.122797,45.44924],[7.13304,45.44001],[7.185604,45.41894],[7.19515,45.40409],[7.170749,45.35069],[7.142319,45.32298],[7.136488,45.30576],[7.14458,45.25048],[7.084166,45.20279],[6.992792,45.19823],[6.981064,45.19368],[6.900091,45.12689],[6.85843,45.11699],[6.782826,45.14228],[6.770557,45.14242],[6.677507,45.11356],[6.665295,45.10289],[6.665008,45.08667],[6.68237,45.04558],[6.696016,45.03395],[6.757442,45.01884],[6.783751,44.9146],[6.794195,44.90161],[6.866981,44.86519],[6.879801,44.86346],[6.936325,44.87461],[7.017954,44.84402],[7.034535,44.82282],[7.037114,44.75009],[7.049604,44.73226],[7.072236,44.72311],[7.086508,44.6968],[7.086656,44.68085],[7.07671,44.67134],[6.990071,44.67203],[6.974128,44.66431],[6.970564,44.64696],[6.978189,44.61784],[6.94659,44.57124],[6.882347,44.53479],[6.872327,44.5195],[6.878925,44.50245],[6.958945,44.43129],[6.958723,44.42908],[6.921668,44.41436],[6.912225,44.40659],[6.909075,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.999091,44.29414],[7.011806,44.256],[7.019835,44.24558],[7.032595,44.2424],[7.073117,44.2461],[7.165097,44.22112],[7.245331,44.18544],[7.260526,44.16682],[7.275371,44.15947],[7.338779,44.1574],[7.362775,44.13834],[7.377763,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.564785,44.15817],[7.605476,44.1634],[7.616198,44.16827],[7.639891,44.18928],[7.686079,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.694448,44.12276],[7.727862,44.08615],[7.724032,44.05704],[7.686028,44.02371],[7.680769,44.0164],[7.660161,43.9672],[7.596244,43.94466],[7.584187,43.93287],[7.568576,43.89159],[7.527096,43.87434],[7.516489,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.369681,41.35052],[9.273114,41.29196],[8.941857,41.27688],[5.8,41.64],[3.173576,42.41768],[3.160814,42.42757],[3.094399,42.41457],[3.034016,42.45331],[3.022142,42.45645],[2.878221,42.4487],[2.870188,42.44653],[2.784238,42.40256],[2.741304,42.41128],[2.729276,42.40998],[2.693308,42.39417],[2.683779,42.3854],[2.681621,42.37263],[2.685852,42.34679],[2.66719,42.33008],[2.581057,42.34418],[2.567769,42.34173],[2.533803,42.32197],[2.477948,42.32986],[2.419327,42.37658],[2.41222,42.38021],[2.267193,42.42055],[2.259731,42.42117],[2.206944,42.41558],[2.206525,42.41526],[2.205257,42.41541],[2.160278,42.41065],[2.148808,42.40545],[2.093931,42.35474],[2.008614,42.33818],[1.964998,42.36473],[1.930762,42.42442],[1.920889,42.43302],[1.884665,42.44761],[1.884588,42.44762],[1.884444,42.4477],[1.827736,42.47056],[1.725668,42.48452],[1.715606,42.50125],[1.727195,42.56103],[1.724794,42.57499],[1.710109,42.59992],[1.69377,42.60975],[1.602827,42.61382],[1.560687,42.6392],[1.546365,42.64166],[1.504443,42.6331],[1.492096,42.62502],[1.472384,42.59703],[1.437922,42.59264],[1.419356,42.60643],[1.38032,42.67415],[1.373353,42.68127],[1.333134,42.70563],[1.323642,42.7085],[1.232212,42.71248],[1.165543,42.69928],[1.085465,42.76635],[1.075637,42.77079],[0.9593748,42.78852],[0.9507323,42.78794],[0.9226515,42.7797],[0.8460624,42.8157],[0.7151135,42.8464],[0.7001699,42.84402],[0.6911674,42.83186],[0.6740937,42.76479],[0.6747382,42.75286],[0.6919171,42.70684],[0.6689955,42.67901],[0.4302428,42.67863],[0.3715037,42.70308],[0.3595376,42.70415],[0.3491168,42.69817],[0.3256688,42.67274],[0.2957095,42.66388],[0.2459353,42.70175],[0.2397249,42.70494],[0.189669,42.72039],[0.1791886,42.72075],[-0.01993262,42.67389],[-0.06725834,42.6848],[-0.1694885,42.77157],[-0.2998662,42.82697],[-0.3168349,42.82635],[-0.3920752,42.78766],[-0.4435404,42.78453],[-0.488418,42.80255],[-0.508683,42.79935],[-0.5449894,42.76906],[-0.5672068,42.76937],[-0.6744552,42.86392],[-0.6809365,42.86775],[-0.7337233,42.88666],[-0.747598,42.93879],[-0.757105,42.95107],[-0.7725328,42.95284],[-0.8211401,42.93865],[-0.9450847,42.94192],[-1.023131,42.98206],[-1.108517,43.00409],[-1.115597,43.00461],[-1.147753,43.00124],[-1.158452,43.01452],[-1.167362,43.02083],[-1.216216,43.0381],[-1.226121,43.03898],[-1.262362,43.03303],[-1.306428,43.05531],[-1.319918,43.05696],[-1.331346,43.0496],[-1.354196,43.0197],[-1.438684,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.476407,43.10248],[-1.434786,43.13087],[-1.427318,43.1404],[-1.394112,43.22935],[-1.395313,43.24596],[-1.408677,43.25591],[-1.526287,43.28099],[-1.546257,43.2737],[-1.571485,43.2412],[-1.610526,43.24223],[-1.650003,43.29323],[-1.669527,43.30065],[-1.733594,43.28856],[-1.756061,43.31966],[-1.762973,43.32565],[-1.791557,43.34067],[-1.800991,43.37017],[-1.785091,43.39037],[-1.783502,43.39686],[-2.7,43.9]]],"terms_url":"https://wiki.openstreetmap.org/wiki/FR:WikiProject_France/WikiProject_Base_Adresses_Nationale_Ouverte_(BANO)#Licence_du_r.C3.A9sultat","terms_text":"Tiles © cquest@Openstreetmap France, data © OpenStreetMap contributors, ODBL","description":"French address registry or Base Adresses Nationale Ouverte","overlay":true},{"id":"lu.geoportail.opendata.basemap","name":"Basemap geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/basemap/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png","endDate":"2010-07-20T00:00:00.000Z","startDate":"2013-07-19T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/carte-de-base-webservices-wms-et-wmts","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"basemap.at","name":"basemap.at","type":"tms","template":"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/geolandbasemap/normal/google3857/{zoom}/{y}/{x}.png","scaleExtent":[0,19],"polygon":[[[16.5073284,46.9929304],[16.283417,46.9929304],[16.135839,46.8713046],[15.9831722,46.8190947],[16.0493278,46.655175],[15.8610387,46.7180116],[15.7592608,46.6900933],[15.5607938,46.6796202],[15.5760605,46.6342132],[15.4793715,46.6027553],[15.4335715,46.6516819],[15.2249267,46.6342132],[15.0468154,46.6481886],[14.9908376,46.5887681],[14.9603042,46.6237293],[14.8534374,46.6027553],[14.8330818,46.5012666],[14.7516595,46.4977636],[14.6804149,46.4381781],[14.6142593,46.4381781],[14.578637,46.3785275],[14.4412369,46.4311638],[14.1613476,46.4276563],[14.1257253,46.4767409],[14.0188585,46.4767409],[13.9119917,46.5257813],[13.8254805,46.5047694],[13.4438134,46.560783],[13.3064132,46.5502848],[13.1283019,46.5887681],[12.8433237,46.6132433],[12.7262791,46.6412014],[12.5125455,46.6656529],[12.3598787,46.7040543],[12.3649676,46.7703197],[12.2886341,46.7772902],[12.2733674,46.8852187],[12.2072118,46.8747835],[12.1308784,46.9026062],[12.1156117,46.9998721],[12.2530119,47.0657733],[12.2123007,47.0934969],[11.9833004,47.0449712],[11.7339445,46.9616816],[11.6321666,47.010283],[11.5405665,46.9755722],[11.4998553,47.0068129],[11.418433,46.9651546],[11.2555884,46.9755722],[11.1130993,46.913036],[11.0418548,46.7633482],[10.8891879,46.7598621],[10.7416099,46.7842599],[10.7059877,46.8643462],[10.5787653,46.8399847],[10.4566318,46.8504267],[10.4769874,46.9269392],[10.3853873,46.9894592],[10.2327204,46.8643462],[10.1207647,46.8330223],[9.8663199,46.9408389],[9.9019422,47.0033426],[9.6831197,47.0588402],[9.6118752,47.0380354],[9.6322307,47.128131],[9.5813418,47.1662025],[9.5406306,47.2664422],[9.6067863,47.3492559],[9.6729419,47.369939],[9.6424085,47.4457079],[9.5660751,47.4801122],[9.7136531,47.5282405],[9.7848976,47.5969187],[9.8357866,47.5454185],[9.9477423,47.538548],[10.0902313,47.4491493],[10.1105869,47.3664924],[10.2428982,47.3871688],[10.1869203,47.2698953],[10.3243205,47.2975125],[10.4820763,47.4491493],[10.4311873,47.4869904],[10.4413651,47.5900549],[10.4871652,47.5522881],[10.5482319,47.5351124],[10.5991209,47.5660246],[10.7568766,47.5316766],[10.8891879,47.5454185],[10.9400769,47.4869904],[10.9960547,47.3906141],[11.2352328,47.4422662],[11.2810328,47.3975039],[11.4235219,47.5144941],[11.5761888,47.5076195],[11.6067221,47.5900549],[11.8357224,47.5866227],[12.003656,47.6243647],[12.2072118,47.6037815],[12.1614117,47.6963421],[12.2581008,47.7442718],[12.2530119,47.6792136],[12.4311232,47.7100408],[12.4921899,47.631224],[12.5685234,47.6277944],[12.6295901,47.6894913],[12.7720792,47.6689338],[12.8331459,47.5419833],[12.975635,47.4732332],[13.0417906,47.4938677],[13.0367017,47.5557226],[13.0977685,47.6415112],[13.0316128,47.7100408],[12.9043905,47.7203125],[13.0061684,47.84683],[12.9451016,47.9355501],[12.8636793,47.9594103],[12.8636793,48.0036929],[12.7517236,48.0989418],[12.8738571,48.2109733],[12.9603683,48.2109733],[13.0417906,48.2652035],[13.1842797,48.2990682],[13.2606131,48.2922971],[13.3980133,48.3565867],[13.4438134,48.417418],[13.4387245,48.5523383],[13.509969,48.5860123],[13.6117469,48.5725454],[13.7287915,48.5118999],[13.7847694,48.5725454],[13.8203916,48.6263915],[13.7949471,48.7171267],[13.850925,48.7741724],[14.0595697,48.6633774],[14.0137696,48.6331182],[14.0748364,48.5927444],[14.2173255,48.5961101],[14.3649034,48.5489696],[14.4666813,48.6499311],[14.5582815,48.5961101],[14.5989926,48.6263915],[14.7211261,48.5759124],[14.7211261,48.6868997],[14.822904,48.7271983],[14.8178151,48.777526],[14.9647227,48.7851754],[14.9893637,49.0126611],[15.1485933,48.9950306],[15.1943934,48.9315502],[15.3063491,48.9850128],[15.3928603,48.9850128],[15.4844604,48.9282069],[15.749083,48.8545973],[15.8406831,48.8880697],[16.0086166,48.7808794],[16.2070835,48.7339115],[16.3953727,48.7372678],[16.4920617,48.8110498],[16.6905286,48.7741724],[16.7057953,48.7339115],[16.8991733,48.713769],[16.9755067,48.515271],[16.8482844,48.4511817],[16.8533733,48.3464411],[16.9551512,48.2516513],[16.9907734,48.1498955],[17.0925513,48.1397088],[17.0823736,48.0241182],[17.1739737,48.0207146],[17.0823736,47.8741447],[16.9856845,47.8673174],[17.0823736,47.8092489],[17.0925513,47.7031919],[16.7414176,47.6792136],[16.7057953,47.7511153],[16.5378617,47.7545368],[16.5480395,47.7066164],[16.4208172,47.6689338],[16.573484,47.6175045],[16.670173,47.631224],[16.7108842,47.538548],[16.6599952,47.4491493],[16.5429506,47.3940591],[16.4615283,47.3940591],[16.4920617,47.276801],[16.425906,47.1973317],[16.4717061,47.1489007],[16.5480395,47.1489007],[16.476795,47.0796369],[16.527684,47.0588402],[16.5073284,46.9929304]]],"terms_url":"https://basemap.at","terms_text":"basemap.at","description":"Basemap of Austria, based on government data.","icon":"https://www.basemap.at/images/logo_basemap.jpg"},{"id":"basemap.at-orthofoto","name":"basemap.at Orthofoto","type":"tms","template":"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmaporthofoto30cm/normal/google3857/{zoom}/{y}/{x}.jpeg","scaleExtent":[0,19],"polygon":[[[16.5073284,46.9929304],[16.283417,46.9929304],[16.135839,46.8713046],[15.9831722,46.8190947],[16.0493278,46.655175],[15.8610387,46.7180116],[15.7592608,46.6900933],[15.5607938,46.6796202],[15.5760605,46.6342132],[15.4793715,46.6027553],[15.4335715,46.6516819],[15.2249267,46.6342132],[15.0468154,46.6481886],[14.9908376,46.5887681],[14.9603042,46.6237293],[14.8534374,46.6027553],[14.8330818,46.5012666],[14.7516595,46.4977636],[14.6804149,46.4381781],[14.6142593,46.4381781],[14.578637,46.3785275],[14.4412369,46.4311638],[14.1613476,46.4276563],[14.1257253,46.4767409],[14.0188585,46.4767409],[13.9119917,46.5257813],[13.8254805,46.5047694],[13.4438134,46.560783],[13.3064132,46.5502848],[13.1283019,46.5887681],[12.8433237,46.6132433],[12.7262791,46.6412014],[12.5125455,46.6656529],[12.3598787,46.7040543],[12.3649676,46.7703197],[12.2886341,46.7772902],[12.2733674,46.8852187],[12.2072118,46.8747835],[12.1308784,46.9026062],[12.1156117,46.9998721],[12.2530119,47.0657733],[12.2123007,47.0934969],[11.9833004,47.0449712],[11.7339445,46.9616816],[11.6321666,47.010283],[11.5405665,46.9755722],[11.4998553,47.0068129],[11.418433,46.9651546],[11.2555884,46.9755722],[11.1130993,46.913036],[11.0418548,46.7633482],[10.8891879,46.7598621],[10.7416099,46.7842599],[10.7059877,46.8643462],[10.5787653,46.8399847],[10.4566318,46.8504267],[10.4769874,46.9269392],[10.3853873,46.9894592],[10.2327204,46.8643462],[10.1207647,46.8330223],[9.8663199,46.9408389],[9.9019422,47.0033426],[9.6831197,47.0588402],[9.6118752,47.0380354],[9.6322307,47.128131],[9.5813418,47.1662025],[9.5406306,47.2664422],[9.6067863,47.3492559],[9.6729419,47.369939],[9.6424085,47.4457079],[9.5660751,47.4801122],[9.7136531,47.5282405],[9.7848976,47.5969187],[9.8357866,47.5454185],[9.9477423,47.538548],[10.0902313,47.4491493],[10.1105869,47.3664924],[10.2428982,47.3871688],[10.1869203,47.2698953],[10.3243205,47.2975125],[10.4820763,47.4491493],[10.4311873,47.4869904],[10.4413651,47.5900549],[10.4871652,47.5522881],[10.5482319,47.5351124],[10.5991209,47.5660246],[10.7568766,47.5316766],[10.8891879,47.5454185],[10.9400769,47.4869904],[10.9960547,47.3906141],[11.2352328,47.4422662],[11.2810328,47.3975039],[11.4235219,47.5144941],[11.5761888,47.5076195],[11.6067221,47.5900549],[11.8357224,47.5866227],[12.003656,47.6243647],[12.2072118,47.6037815],[12.1614117,47.6963421],[12.2581008,47.7442718],[12.2530119,47.6792136],[12.4311232,47.7100408],[12.4921899,47.631224],[12.5685234,47.6277944],[12.6295901,47.6894913],[12.7720792,47.6689338],[12.8331459,47.5419833],[12.975635,47.4732332],[13.0417906,47.4938677],[13.0367017,47.5557226],[13.0977685,47.6415112],[13.0316128,47.7100408],[12.9043905,47.7203125],[13.0061684,47.84683],[12.9451016,47.9355501],[12.8636793,47.9594103],[12.8636793,48.0036929],[12.7517236,48.0989418],[12.8738571,48.2109733],[12.9603683,48.2109733],[13.0417906,48.2652035],[13.1842797,48.2990682],[13.2606131,48.2922971],[13.3980133,48.3565867],[13.4438134,48.417418],[13.4387245,48.5523383],[13.509969,48.5860123],[13.6117469,48.5725454],[13.7287915,48.5118999],[13.7847694,48.5725454],[13.8203916,48.6263915],[13.7949471,48.7171267],[13.850925,48.7741724],[14.0595697,48.6633774],[14.0137696,48.6331182],[14.0748364,48.5927444],[14.2173255,48.5961101],[14.3649034,48.5489696],[14.4666813,48.6499311],[14.5582815,48.5961101],[14.5989926,48.6263915],[14.7211261,48.5759124],[14.7211261,48.6868997],[14.822904,48.7271983],[14.8178151,48.777526],[14.9647227,48.7851754],[14.9893637,49.0126611],[15.1485933,48.9950306],[15.1943934,48.9315502],[15.3063491,48.9850128],[15.3928603,48.9850128],[15.4844604,48.9282069],[15.749083,48.8545973],[15.8406831,48.8880697],[16.0086166,48.7808794],[16.2070835,48.7339115],[16.3953727,48.7372678],[16.4920617,48.8110498],[16.6905286,48.7741724],[16.7057953,48.7339115],[16.8991733,48.713769],[16.9755067,48.515271],[16.8482844,48.4511817],[16.8533733,48.3464411],[16.9551512,48.2516513],[16.9907734,48.1498955],[17.0925513,48.1397088],[17.0823736,48.0241182],[17.1739737,48.0207146],[17.0823736,47.8741447],[16.9856845,47.8673174],[17.0823736,47.8092489],[17.0925513,47.7031919],[16.7414176,47.6792136],[16.7057953,47.7511153],[16.5378617,47.7545368],[16.5480395,47.7066164],[16.4208172,47.6689338],[16.573484,47.6175045],[16.670173,47.631224],[16.7108842,47.538548],[16.6599952,47.4491493],[16.5429506,47.3940591],[16.4615283,47.3940591],[16.4920617,47.276801],[16.425906,47.1973317],[16.4717061,47.1489007],[16.5480395,47.1489007],[16.476795,47.0796369],[16.527684,47.0588402],[16.5073284,46.9929304]]],"terms_url":"https://basemap.at","terms_text":"basemap.at","best":true,"description":"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.","icon":"https://www.basemap.at/images/logo_basemap.jpg"},{"id":"bavaria-2m","name":"Bavaria (2 m)","type":"wms","template":"https://geodaten.bayern.de/ogc/ogc_dop200_oa.cgi?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=adv_dop200c&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","scaleExtent":[8,18],"polygon":[[[10.1235886,50.568462],[10.1428576,50.5507804],[10.2028056,50.5574195],[10.2520485,50.5179575],[10.3269835,50.4934473],[10.4104825,50.4184762],[10.6031724,50.3310874],[10.6224414,50.2271041],[10.7252093,50.2106649],[10.7294913,50.2476451],[10.8515282,50.2435376],[10.7187863,50.3201525],[10.7123633,50.3652428],[10.8558102,50.3966441],[10.9371682,50.3966441],[10.9906932,50.3666085],[11.1277171,50.3666085],[11.1791011,50.3133169],[11.1619731,50.294172],[11.24119,50.2928042],[11.249754,50.3734364],[11.24119,50.479825],[11.358945,50.5234025],[11.4381619,50.5097889],[11.4424439,50.4893611],[11.425316,50.4771001],[11.425316,50.4416618],[11.4895459,50.4225686],[11.4916869,50.3980089],[11.5195199,50.3980089],[11.5259429,50.3761673],[11.5987369,50.4034677],[11.6372748,50.3884544],[11.7935678,50.4212045],[11.8363877,50.3925494],[11.9220277,50.4280246],[11.9862577,50.3870894],[11.9841167,50.3570478],[12.0483466,50.3310874],[12.0933076,50.3297207],[12.1297046,50.2982751],[12.1404096,50.2722826],[12.1061536,50.255859],[12.1125766,50.2353216],[12.1489736,50.236691],[12.1982166,50.2010728],[12.2239086,50.1640565],[12.2046396,50.1434795],[12.2067806,50.1077916],[12.2431775,50.0995522],[12.2774335,50.0720772],[12.4936744,49.985428],[12.4979564,49.9413559],[12.5557634,49.9220616],[12.5493404,49.8682726],[12.4808284,49.7881677],[12.4101755,49.7577484],[12.4615594,49.7065456],[12.5471994,49.6802313],[12.5878784,49.552613],[12.6542493,49.534553],[12.6628133,49.4330153],[12.7527353,49.4107323],[12.7976963,49.3466124],[12.9047462,49.3563752],[12.9968092,49.3368477],[13.0546161,49.2754251],[13.1316921,49.2195199],[13.1916401,49.1439475],[13.236601,49.1215335],[13.296549,49.1229347],[13.371484,49.0808823],[13.414304,49.0289687],[13.414304,48.9798112],[13.5791609,48.9699739],[13.6348268,48.9432629],[13.6776468,48.8869823],[13.7375948,48.8926132],[13.7846968,48.8334571],[13.8403627,48.774231],[13.8168118,48.7064584],[13.8446447,48.7008065],[13.8425037,48.6003807],[13.7654278,48.5422972],[13.7525818,48.5040106],[13.6712238,48.5054291],[13.6433908,48.5437146],[13.4571239,48.5508013],[13.4571239,48.4159838],[13.40574,48.3605338],[13.283703,48.2751083],[13.0931541,48.2694081],[12.9582712,48.1909669],[12.8769132,48.1852574],[12.7720043,48.0938188],[12.8640672,48.0136764],[12.8983232,47.9549216],[12.9454252,47.9563555],[12.9968092,47.8846147],[13.0139372,47.834337],[12.9347202,47.7321953],[13.0588981,47.7249947],[13.1188461,47.6385093],[13.0653211,47.5692178],[13.0567571,47.473792],[13.0032322,47.4520801],[12.7677223,47.5504355],[12.7698633,47.6327385],[12.7398893,47.6731207],[12.6670953,47.6702373],[12.5750324,47.621195],[12.4808284,47.6197519],[12.4144575,47.6702373],[12.2431775,47.6774455],[12.2132036,47.6918589],[12.1917936,47.6817699],[12.2132036,47.6659119],[12.2110626,47.603875],[12.1746656,47.5952129],[12.1382686,47.603875],[11.8920537,47.603875],[11.8513747,47.5793285],[11.6394158,47.5822169],[11.5944549,47.5489905],[11.5901729,47.5128508],[11.5173789,47.498388],[11.4403029,47.5041736],[11.395342,47.4752392],[11.427457,47.4448409],[11.346099,47.4433929],[11.279728,47.3955873],[11.2133571,47.3883402],[11.247613,47.4318076],[11.1020251,47.3926886],[10.9650012,47.3897897],[10.9778472,47.4361524],[10.9178992,47.4752392],[10.8707972,47.4752392],[10.8558102,47.4940484],[10.9007712,47.5142969],[10.8729382,47.5359831],[10.8108493,47.5128508],[10.6438513,47.5489905],[10.5946084,47.5547705],[10.5796214,47.5287553],[10.4618664,47.5403192],[10.4661484,47.4839212],[10.4875584,47.4781333],[10.4875584,47.4129762],[10.4597254,47.4028333],[10.4597254,47.375293],[10.4104825,47.3738431],[10.4083415,47.3433862],[10.3205605,47.2867768],[10.2820225,47.2780622],[10.2841635,47.2620819],[10.1471396,47.2620819],[10.1921006,47.3027497],[10.1942416,47.3738431],[10.1664086,47.3738431],[10.1664086,47.3462876],[10.1000376,47.3433862],[10.0614996,47.3636928],[10.0679226,47.4187712],[10.0936146,47.426014],[10.0957556,47.4419449],[9.9780007,47.485368],[9.9565907,47.5273097],[9.8945017,47.5287553],[9.8559637,47.5085124],[9.8174258,47.544655],[9.8217078,47.5764399],[9.7746058,47.5822169],[9.7382088,47.525864],[9.6739788,47.5345376],[9.5840569,47.564884],[9.6397228,47.6053186],[9.7167988,47.603875],[9.8559637,47.6760039],[9.9780007,47.6558179],[10.0293846,47.6817699],[10.1000376,47.6673537],[10.1321526,47.6760039],[10.1428576,47.7019459],[10.0614996,47.7725005],[10.1128836,47.8098988],[10.0829096,47.8530173],[10.1086016,47.9090177],[10.0764866,47.9649577],[10.1300116,48.020837],[10.1342936,48.1066872],[10.1000376,48.1281274],[10.0550766,48.2622821],[9.9694367,48.3676462],[10.0315256,48.4259299],[10.0293846,48.461436],[10.1235886,48.4770509],[10.1535626,48.4514968],[10.2349205,48.5125212],[10.3162785,48.516776],[10.2991505,48.6187835],[10.2456255,48.6682961],[10.2734585,48.7064584],[10.3698035,48.6838472],[10.4318924,48.6993935],[10.4511614,48.7276471],[10.4019185,48.7460035],[10.4404564,48.8489571],[10.4340334,48.9587289],[10.3376885,49.0205451],[10.2499075,49.0359872],[10.2499075,49.0738701],[10.2006646,49.1033147],[10.2520485,49.1327418],[10.1235886,49.1971401],[10.1193066,49.2628519],[10.1514216,49.2893915],[10.1043196,49.3452175],[10.1407166,49.3940134],[10.1086016,49.445545],[10.1107426,49.5053651],[10.0722046,49.5331635],[10.0165387,49.4761598],[9.9266167,49.478942],[9.9244757,49.5567797],[9.8987837,49.5817727],[9.8559637,49.5387213],[9.8067208,49.5567797],[9.8666687,49.6067529],[9.8538227,49.6441991],[9.8174258,49.6608327],[9.8345537,49.6899277],[9.7960158,49.7203895],[9.7574778,49.7079302],[9.7403498,49.6857723],[9.7060938,49.7162368],[9.6782608,49.7162368],[9.6825428,49.6885426],[9.6204539,49.6913127],[9.6461458,49.78955],[9.5583649,49.7743431],[9.5712109,49.7356133],[9.5069809,49.7522156],[9.4919939,49.7798735],[9.4684429,49.7605146],[9.425623,49.7784909],[9.404213,49.7646636],[9.33356,49.770195],[9.329278,49.7342295],[9.408495,49.725926],[9.427764,49.6982374],[9.414918,49.6441991],[9.380662,49.6386533],[9.359252,49.6497443],[9.339983,49.6372668],[9.31215,49.648358],[9.277894,49.626173],[9.284317,49.6081403],[9.241497,49.5748315],[9.0980501,49.5720547],[9.0659351,49.6081403],[9.1001911,49.6511305],[9.0916271,49.6926978],[9.1301651,49.7120837],[9.1387291,49.7425316],[9.1087551,49.7563653],[9.1365881,49.7909322],[9.1001911,49.78955],[9.0723581,49.8282367],[9.0359611,49.8351418],[9.0166922,50.0267091],[8.9631672,50.0308352],[8.9567442,50.0597083],[9.0017052,50.0707031],[9.0209742,50.1105378],[9.1216011,50.1228936],[9.1558571,50.1132838],[9.1965361,50.1187753],[9.1858311,50.1352462],[9.235074,50.1475956],[9.37638,50.1270115],[9.408495,50.0816953],[9.5219679,50.095432],[9.5048399,50.1421073],[9.5326729,50.1640565],[9.4898529,50.1695422],[9.4941349,50.2435376],[9.6140309,50.221625],[9.6654148,50.2353216],[9.6354408,50.2490142],[9.6675558,50.2722826],[9.7424908,50.3092151],[9.7296448,50.3584137],[9.7703238,50.4293885],[9.8688097,50.4007384],[9.9180527,50.4089259],[10.0358076,50.479825],[10.0379486,50.5111504],[10.1235886,50.568462]]],"terms_url":"www.geodaten.bayern.de","terms_text":"Bayerische Vermessungsverwaltung"},{"id":"bavaria-DOP80","name":"Bavaria DOP 80cm","type":"tms","template":"https://mapproxy.osm.ch/tiles/BAYERNDOP80/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[7,18],"polygon":[[[10.1235886,50.568462],[10.1428576,50.5507804],[10.2028056,50.5574195],[10.2520485,50.5179575],[10.3269835,50.4934473],[10.4104825,50.4184762],[10.6031724,50.3310874],[10.6224414,50.2271041],[10.7252093,50.2106649],[10.7294913,50.2476451],[10.8515282,50.2435376],[10.7187863,50.3201525],[10.7123633,50.3652428],[10.8558102,50.3966441],[10.9371682,50.3966441],[10.9906932,50.3666085],[11.1277171,50.3666085],[11.1791011,50.3133169],[11.1619731,50.294172],[11.24119,50.2928042],[11.249754,50.3734364],[11.24119,50.479825],[11.358945,50.5234025],[11.4381619,50.5097889],[11.4424439,50.4893611],[11.425316,50.4771001],[11.425316,50.4416618],[11.4895459,50.4225686],[11.4916869,50.3980089],[11.5195199,50.3980089],[11.5259429,50.3761673],[11.5987369,50.4034677],[11.6372748,50.3884544],[11.7935678,50.4212045],[11.8363877,50.3925494],[11.9220277,50.4280246],[11.9862577,50.3870894],[11.9841167,50.3570478],[12.0483466,50.3310874],[12.0933076,50.3297207],[12.1297046,50.2982751],[12.1404096,50.2722826],[12.1061536,50.255859],[12.1125766,50.2353216],[12.1489736,50.236691],[12.1982166,50.2010728],[12.2239086,50.1640565],[12.2046396,50.1434795],[12.2067806,50.1077916],[12.2431775,50.0995522],[12.2774335,50.0720772],[12.4936744,49.985428],[12.4979564,49.9413559],[12.5557634,49.9220616],[12.5493404,49.8682726],[12.4808284,49.7881677],[12.4101755,49.7577484],[12.4615594,49.7065456],[12.5471994,49.6802313],[12.5878784,49.552613],[12.6542493,49.534553],[12.6628133,49.4330153],[12.7527353,49.4107323],[12.7976963,49.3466124],[12.9047462,49.3563752],[12.9968092,49.3368477],[13.0546161,49.2754251],[13.1316921,49.2195199],[13.1916401,49.1439475],[13.236601,49.1215335],[13.296549,49.1229347],[13.371484,49.0808823],[13.414304,49.0289687],[13.414304,48.9798112],[13.5791609,48.9699739],[13.6348268,48.9432629],[13.6776468,48.8869823],[13.7375948,48.8926132],[13.7846968,48.8334571],[13.8403627,48.774231],[13.8168118,48.7064584],[13.8446447,48.7008065],[13.8425037,48.6003807],[13.7654278,48.5422972],[13.7525818,48.5040106],[13.6712238,48.5054291],[13.6433908,48.5437146],[13.4571239,48.5508013],[13.4571239,48.4159838],[13.40574,48.3605338],[13.283703,48.2751083],[13.0931541,48.2694081],[12.9582712,48.1909669],[12.8769132,48.1852574],[12.7720043,48.0938188],[12.8640672,48.0136764],[12.8983232,47.9549216],[12.9454252,47.9563555],[12.9968092,47.8846147],[13.0139372,47.834337],[12.9347202,47.7321953],[13.0588981,47.7249947],[13.1188461,47.6385093],[13.0653211,47.5692178],[13.0567571,47.473792],[13.0032322,47.4520801],[12.7677223,47.5504355],[12.7698633,47.6327385],[12.7398893,47.6731207],[12.6670953,47.6702373],[12.5750324,47.621195],[12.4808284,47.6197519],[12.4144575,47.6702373],[12.2431775,47.6774455],[12.2132036,47.6918589],[12.1917936,47.6817699],[12.2132036,47.6659119],[12.2110626,47.603875],[12.1746656,47.5952129],[12.1382686,47.603875],[11.8920537,47.603875],[11.8513747,47.5793285],[11.6394158,47.5822169],[11.5944549,47.5489905],[11.5901729,47.5128508],[11.5173789,47.498388],[11.4403029,47.5041736],[11.395342,47.4752392],[11.427457,47.4448409],[11.346099,47.4433929],[11.279728,47.3955873],[11.2133571,47.3883402],[11.247613,47.4318076],[11.1020251,47.3926886],[10.9650012,47.3897897],[10.9778472,47.4361524],[10.9178992,47.4752392],[10.8707972,47.4752392],[10.8558102,47.4940484],[10.9007712,47.5142969],[10.8729382,47.5359831],[10.8108493,47.5128508],[10.6438513,47.5489905],[10.5946084,47.5547705],[10.5796214,47.5287553],[10.4618664,47.5403192],[10.4661484,47.4839212],[10.4875584,47.4781333],[10.4875584,47.4129762],[10.4597254,47.4028333],[10.4597254,47.375293],[10.4104825,47.3738431],[10.4083415,47.3433862],[10.3205605,47.2867768],[10.2820225,47.2780622],[10.2841635,47.2620819],[10.1471396,47.2620819],[10.1921006,47.3027497],[10.1942416,47.3738431],[10.1664086,47.3738431],[10.1664086,47.3462876],[10.1000376,47.3433862],[10.0614996,47.3636928],[10.0679226,47.4187712],[10.0936146,47.426014],[10.0957556,47.4419449],[9.9780007,47.485368],[9.9565907,47.5273097],[9.8945017,47.5287553],[9.8559637,47.5085124],[9.8174258,47.544655],[9.8217078,47.5764399],[9.7746058,47.5822169],[9.7382088,47.525864],[9.6739788,47.5345376],[9.5840569,47.564884],[9.6397228,47.6053186],[9.7167988,47.603875],[9.8559637,47.6760039],[9.9780007,47.6558179],[10.0293846,47.6817699],[10.1000376,47.6673537],[10.1321526,47.6760039],[10.1428576,47.7019459],[10.0614996,47.7725005],[10.1128836,47.8098988],[10.0829096,47.8530173],[10.1086016,47.9090177],[10.0764866,47.9649577],[10.1300116,48.020837],[10.1342936,48.1066872],[10.1000376,48.1281274],[10.0550766,48.2622821],[9.9694367,48.3676462],[10.0315256,48.4259299],[10.0293846,48.461436],[10.1235886,48.4770509],[10.1535626,48.4514968],[10.2349205,48.5125212],[10.3162785,48.516776],[10.2991505,48.6187835],[10.2456255,48.6682961],[10.2734585,48.7064584],[10.3698035,48.6838472],[10.4318924,48.6993935],[10.4511614,48.7276471],[10.4019185,48.7460035],[10.4404564,48.8489571],[10.4340334,48.9587289],[10.3376885,49.0205451],[10.2499075,49.0359872],[10.2499075,49.0738701],[10.2006646,49.1033147],[10.2520485,49.1327418],[10.1235886,49.1971401],[10.1193066,49.2628519],[10.1514216,49.2893915],[10.1043196,49.3452175],[10.1407166,49.3940134],[10.1086016,49.445545],[10.1107426,49.5053651],[10.0722046,49.5331635],[10.0165387,49.4761598],[9.9266167,49.478942],[9.9244757,49.5567797],[9.8987837,49.5817727],[9.8559637,49.5387213],[9.8067208,49.5567797],[9.8666687,49.6067529],[9.8538227,49.6441991],[9.8174258,49.6608327],[9.8345537,49.6899277],[9.7960158,49.7203895],[9.7574778,49.7079302],[9.7403498,49.6857723],[9.7060938,49.7162368],[9.6782608,49.7162368],[9.6825428,49.6885426],[9.6204539,49.6913127],[9.6461458,49.78955],[9.5583649,49.7743431],[9.5712109,49.7356133],[9.5069809,49.7522156],[9.4919939,49.7798735],[9.4684429,49.7605146],[9.425623,49.7784909],[9.404213,49.7646636],[9.33356,49.770195],[9.329278,49.7342295],[9.408495,49.725926],[9.427764,49.6982374],[9.414918,49.6441991],[9.380662,49.6386533],[9.359252,49.6497443],[9.339983,49.6372668],[9.31215,49.648358],[9.277894,49.626173],[9.284317,49.6081403],[9.241497,49.5748315],[9.0980501,49.5720547],[9.0659351,49.6081403],[9.1001911,49.6511305],[9.0916271,49.6926978],[9.1301651,49.7120837],[9.1387291,49.7425316],[9.1087551,49.7563653],[9.1365881,49.7909322],[9.1001911,49.78955],[9.0723581,49.8282367],[9.0359611,49.8351418],[9.0166922,50.0267091],[8.9631672,50.0308352],[8.9567442,50.0597083],[9.0017052,50.0707031],[9.0209742,50.1105378],[9.1216011,50.1228936],[9.1558571,50.1132838],[9.1965361,50.1187753],[9.1858311,50.1352462],[9.235074,50.1475956],[9.37638,50.1270115],[9.408495,50.0816953],[9.5219679,50.095432],[9.5048399,50.1421073],[9.5326729,50.1640565],[9.4898529,50.1695422],[9.4941349,50.2435376],[9.6140309,50.221625],[9.6654148,50.2353216],[9.6354408,50.2490142],[9.6675558,50.2722826],[9.7424908,50.3092151],[9.7296448,50.3584137],[9.7703238,50.4293885],[9.8688097,50.4007384],[9.9180527,50.4089259],[10.0358076,50.479825],[10.0379486,50.5111504],[10.1235886,50.568462]]],"terms_url":"www.geodaten.bayern.de","terms_text":"Bayerische Vermessungsverwaltung","best":true},{"id":"route500hydro","name":"BD Carthage","type":"tms","template":"https://{switch:a,b,c}.tile.openstreetmap.fr/route500hydro/{zoom}/{x}/{y}.png","scaleExtent":[6,20],"polygon":[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.358164,51.32937],[2.548804,51.09759],[2.570482,51.07409],[2.587412,51.01763],[2.598448,51.0051],[2.615575,50.99749],[2.639859,50.95766],[2.642247,50.94578],[2.624519,50.9256],[2.61962,50.91067],[2.623964,50.86071],[2.627811,50.85054],[2.637859,50.83696],[2.651102,50.82906],[2.732666,50.81738],[2.79995,50.73795],[2.816552,50.73092],[2.852648,50.73335],[2.890719,50.7162],[2.904925,50.71536],[2.916096,50.72418],[2.935084,50.75592],[3.007184,50.78377],[3.082183,50.78749],[3.092439,50.79092],[3.114119,50.80566],[3.148768,50.80195],[3.215401,50.73111],[3.221487,50.7267],[3.270507,50.70375],[3.275448,50.67757],[3.265761,50.6604],[3.265877,50.64054],[3.289219,50.60028],[3.292195,50.55037],[3.305598,50.53267],[3.375514,50.50839],[3.389804,50.50884],[3.474798,50.54445],[3.52173,50.53459],[3.532662,50.51873],[3.547788,50.51012],[3.615234,50.50558],[3.673778,50.45642],[3.684152,50.35277],[3.690097,50.34044],[3.702583,50.33482],[3.715758,50.33854],[3.749349,50.36279],[3.841089,50.36558],[3.901887,50.3436],[3.913173,50.34291],[4.026717,50.36904],[4.13761,50.29984],[4.143881,50.29727],[4.214438,50.28167],[4.229037,50.26664],[4.230782,50.25233],[4.170843,50.18579],[4.166015,50.16888],[4.176401,50.1547],[4.211948,50.13602],[4.240742,50.07102],[4.231934,50.05551],[4.181645,50.03436],[4.17177,50.02537],[4.169755,50.01217],[4.176498,50.00065],[4.206331,49.97546],[4.221639,49.97089],[4.308774,49.98145],[4.445423,49.9523],[4.454691,49.95251],[4.658098,50.00609],[4.669358,50.01392],[4.672929,50.02716],[4.66924,50.06972],[4.695168,50.10472],[4.831227,50.17941],[4.881497,50.16436],[4.904786,50.14451],[4.904264,50.12639],[4.880762,50.0815],[4.862772,50.0745],[4.851037,50.06216],[4.843307,50.03884],[4.843307,50.03883],[4.843295,50.03881],[4.826781,49.989],[4.826618,49.97692],[4.833433,49.96696],[4.896542,49.91753],[4.897546,49.89424],[4.879134,49.86942],[4.876249,49.85111],[4.889238,49.81266],[4.897691,49.80204],[4.910979,49.79926],[4.995343,49.81116],[5.01867,49.79272],[5.026862,49.78886],[5.099438,49.77323],[5.134584,49.73462],[5.141201,49.72984],[5.187609,49.70906],[5.196025,49.70732],[5.281572,49.70836],[5.333628,49.67308],[5.343996,49.65049],[5.354398,49.64041],[5.431412,49.60791],[5.482051,49.52815],[5.492943,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.607602,49.53761],[5.640997,49.56095],[5.706759,49.55267],[5.715782,49.55361],[5.775261,49.57414],[5.839902,49.55321],[5.861263,49.52038],[5.875997,49.5114],[5.975162,49.50129],[5.998015,49.47317],[6.016266,49.46597],[6.08635,49.47562],[6.093186,49.47787],[6.173966,49.52187],[6.246435,49.52511],[6.333999,49.48235],[6.344229,49.48037],[6.435145,49.487],[6.5451,49.44384],[6.606389,49.37868],[6.604972,49.33739],[6.616267,49.31869],[6.670133,49.29269],[6.729955,49.22917],[6.743276,49.19086],[6.760259,49.17752],[6.809042,49.17284],[6.824733,49.17826],[6.830928,49.19366],[6.829819,49.21802],[6.851186,49.23136],[6.884528,49.2239],[6.893221,49.22389],[6.937527,49.23369],[7.040549,49.19794],[7.046296,49.17503],[7.054777,49.16313],[7.069081,49.16018],[7.104945,49.16634],[7.143153,49.14159],[7.153499,49.13839],[7.286827,49.13488],[7.29893,49.13856],[7.360948,49.18259],[7.450116,49.19517],[7.50113,49.17672],[7.543788,49.10572],[7.557903,49.09626],[7.629604,49.08527],[7.647217,49.06722],[7.661197,49.06119],[7.754008,49.05963],[7.760731,49.06067],[7.802913,49.07489],[7.855253,49.05329],[7.867297,49.05227],[7.93826,49.06832],[8.080685,49.00688],[8.222498,48.98787],[8.23704,48.97683],[8.235894,48.95817],[8.208878,48.94863],[8.200888,48.94339],[8.158243,48.89753],[8.100873,48.7993],[7.990709,48.74478],[7.985341,48.7409],[7.904217,48.65865],[7.856051,48.63606],[7.848405,48.62977],[7.818424,48.58883],[7.81456,48.57704],[7.814491,48.50968],[7.785465,48.48337],[7.780554,48.47652],[7.745059,48.39484],[7.743573,48.38427],[7.751593,48.32322],[7.71085,48.29841],[7.702411,48.28803],[7.676613,48.21555],[7.596051,48.11698],[7.591652,48.10648],[7.585216,48.04694],[7.591268,48.03035],[7.624373,47.99865],[7.632049,47.97081],[7.575545,47.87436],[7.572802,47.86435],[7.572673,47.83631],[7.545808,47.78793],[7.544185,47.77232],[7.557581,47.72899],[7.535257,47.6989],[7.531364,47.68564],[7.536998,47.67302],[7.600164,47.60822],[7.589675,47.56755],[7.554237,47.55128],[7.54511,47.54283],[7.512557,47.48439],[7.387471,47.42111],[7.326527,47.4273],[7.244354,47.40939],[7.167083,47.4335],[7.152115,47.47612],[7.14279,47.48707],[7.128529,47.48893],[7.080105,47.47718],[7.035575,47.48695],[7.021019,47.48458],[7.012048,47.47287],[7.002995,47.44095],[6.955099,47.40808],[6.947157,47.39698],[6.94818,47.38337],[6.957691,47.37359],[6.971263,47.37218],[7.018004,47.38386],[7.05623,47.37035],[7.070073,47.35005],[7.05958,47.32257],[6.974243,47.27856],[6.963469,47.26233],[6.961339,47.23479],[6.89443,47.19393],[6.889128,47.18922],[6.855453,47.14636],[6.769073,47.10751],[6.760108,47.09953],[6.725613,47.0418],[6.623551,46.9811],[6.481204,46.9445],[6.46892,46.93522],[6.466862,46.91997],[6.475476,46.88771],[6.453496,46.8239],[6.45644,46.80534],[6.467224,46.79104],[6.460984,46.76887],[6.15817,46.59343],[6.148724,46.58069],[6.15152,46.56508],[6.165489,46.54399],[6.158111,46.52456],[6.101739,46.46979],[6.095717,46.45418],[6.097044,46.43317],[6.108289,46.41643],[6.166216,46.38839],[6.178173,46.36922],[6.137482,46.31297],[6.133713,46.30227],[6.130383,46.23737],[6.110298,46.22344],[6.088648,46.23081],[6.077173,46.23123],[6.018573,46.21601],[6.006813,46.20752],[6.003882,46.19332],[6.007866,46.16977],[6.017834,46.15564],[6.03509,46.15456],[6.055639,46.16288],[6.124683,46.15415],[6.137776,46.15702],[6.240258,46.22094],[6.249058,46.23299],[6.247073,46.24777],[6.21148,46.31057],[6.212186,46.32485],[6.239462,46.36705],[6.316478,46.41557],[6.410826,46.42495],[6.417483,46.42682],[6.504978,46.46871],[6.630473,46.47435],[6.746646,46.45695],[6.822442,46.42925],[6.818324,46.38181],[6.804843,46.36179],[6.801885,46.34639],[6.810949,46.33359],[6.864911,46.30038],[6.875036,46.28007],[6.860917,46.2439],[6.826978,46.21188],[6.820746,46.19862],[6.818627,46.16592],[6.822593,46.15261],[6.834266,46.14509],[6.903819,46.12971],[6.904911,46.09595],[6.909323,46.08406],[6.920006,46.07721],[6.948976,46.0699],[7.015561,46.00883],[7.051911,45.93066],[7.045335,45.92217],[7.044967,45.92064],[7.043936,45.92036],[6.995822,45.85822],[6.940965,45.83551],[6.843757,45.82387],[6.831016,45.81711],[6.826141,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.841405,45.71373],[6.907294,45.69124],[6.92419,45.66935],[6.942468,45.66172],[6.971313,45.66528],[7.00597,45.64945],[7.011511,45.63652],[6.997797,45.60877],[6.996431,45.59465],[7.015803,45.52354],[7.027743,45.5102],[7.107198,45.47877],[7.122797,45.44924],[7.13304,45.44001],[7.185604,45.41894],[7.19515,45.40409],[7.170749,45.35069],[7.142319,45.32298],[7.136488,45.30576],[7.14458,45.25048],[7.084166,45.20279],[6.992792,45.19823],[6.981064,45.19368],[6.900091,45.12689],[6.85843,45.11699],[6.782826,45.14228],[6.770557,45.14242],[6.677507,45.11356],[6.665295,45.10289],[6.665008,45.08667],[6.68237,45.04558],[6.696016,45.03395],[6.757442,45.01884],[6.783751,44.9146],[6.794195,44.90161],[6.866981,44.86519],[6.879801,44.86346],[6.936325,44.87461],[7.017954,44.84402],[7.034535,44.82282],[7.037114,44.75009],[7.049604,44.73226],[7.072236,44.72311],[7.086508,44.6968],[7.086656,44.68085],[7.07671,44.67134],[6.990071,44.67203],[6.974128,44.66431],[6.970564,44.64696],[6.978189,44.61784],[6.94659,44.57124],[6.882347,44.53479],[6.872327,44.5195],[6.878925,44.50245],[6.958945,44.43129],[6.958723,44.42908],[6.921668,44.41436],[6.912225,44.40659],[6.909075,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.999091,44.29414],[7.011806,44.256],[7.019835,44.24558],[7.032595,44.2424],[7.073117,44.2461],[7.165097,44.22112],[7.245331,44.18544],[7.260526,44.16682],[7.275371,44.15947],[7.338779,44.1574],[7.362775,44.13834],[7.377763,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.564785,44.15817],[7.605476,44.1634],[7.616198,44.16827],[7.639891,44.18928],[7.686079,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.694448,44.12276],[7.727862,44.08615],[7.724032,44.05704],[7.686028,44.02371],[7.680769,44.0164],[7.660161,43.9672],[7.596244,43.94466],[7.584187,43.93287],[7.568576,43.89159],[7.527096,43.87434],[7.516489,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.369681,41.35052],[9.273114,41.29196],[8.941857,41.27688],[5.8,41.64],[3.173576,42.41768],[3.160814,42.42757],[3.094399,42.41457],[3.034016,42.45331],[3.022142,42.45645],[2.878221,42.4487],[2.870188,42.44653],[2.784238,42.40256],[2.741304,42.41128],[2.729276,42.40998],[2.693308,42.39417],[2.683779,42.3854],[2.681621,42.37263],[2.685852,42.34679],[2.66719,42.33008],[2.581057,42.34418],[2.567769,42.34173],[2.533803,42.32197],[2.477948,42.32986],[2.419327,42.37658],[2.41222,42.38021],[2.267193,42.42055],[2.259731,42.42117],[2.206944,42.41558],[2.206525,42.41526],[2.205257,42.41541],[2.160278,42.41065],[2.148808,42.40545],[2.093931,42.35474],[2.008614,42.33818],[1.964998,42.36473],[1.930762,42.42442],[1.920889,42.43302],[1.884665,42.44761],[1.884588,42.44762],[1.884444,42.4477],[1.827736,42.47056],[1.725668,42.48452],[1.715606,42.50125],[1.727195,42.56103],[1.724794,42.57499],[1.710109,42.59992],[1.69377,42.60975],[1.602827,42.61382],[1.560687,42.6392],[1.546365,42.64166],[1.504443,42.6331],[1.492096,42.62502],[1.472384,42.59703],[1.437922,42.59264],[1.419356,42.60643],[1.38032,42.67415],[1.373353,42.68127],[1.333134,42.70563],[1.323642,42.7085],[1.232212,42.71248],[1.165543,42.69928],[1.085465,42.76635],[1.075637,42.77079],[0.9593748,42.78852],[0.9507323,42.78794],[0.9226515,42.7797],[0.8460624,42.8157],[0.7151135,42.8464],[0.7001699,42.84402],[0.6911674,42.83186],[0.6740937,42.76479],[0.6747382,42.75286],[0.6919171,42.70684],[0.6689955,42.67901],[0.4302428,42.67863],[0.3715037,42.70308],[0.3595376,42.70415],[0.3491168,42.69817],[0.3256688,42.67274],[0.2957095,42.66388],[0.2459353,42.70175],[0.2397249,42.70494],[0.189669,42.72039],[0.1791886,42.72075],[-0.01993262,42.67389],[-0.06725834,42.6848],[-0.1694885,42.77157],[-0.2998662,42.82697],[-0.3168349,42.82635],[-0.3920752,42.78766],[-0.4435404,42.78453],[-0.488418,42.80255],[-0.508683,42.79935],[-0.5449894,42.76906],[-0.5672068,42.76937],[-0.6744552,42.86392],[-0.6809365,42.86775],[-0.7337233,42.88666],[-0.747598,42.93879],[-0.757105,42.95107],[-0.7725328,42.95284],[-0.8211401,42.93865],[-0.9450847,42.94192],[-1.023131,42.98206],[-1.108517,43.00409],[-1.115597,43.00461],[-1.147753,43.00124],[-1.158452,43.01452],[-1.167362,43.02083],[-1.216216,43.0381],[-1.226121,43.03898],[-1.262362,43.03303],[-1.306428,43.05531],[-1.319918,43.05696],[-1.331346,43.0496],[-1.354196,43.0197],[-1.438684,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.476407,43.10248],[-1.434786,43.13087],[-1.427318,43.1404],[-1.394112,43.22935],[-1.395313,43.24596],[-1.408677,43.25591],[-1.526287,43.28099],[-1.546257,43.2737],[-1.571485,43.2412],[-1.610526,43.24223],[-1.650003,43.29323],[-1.669527,43.30065],[-1.733594,43.28856],[-1.756061,43.31966],[-1.762973,43.32565],[-1.791557,43.34067],[-1.800991,43.37017],[-1.785091,43.39037],[-1.783502,43.39686],[-2.7,43.9]]],"terms_url":"http://www.sandre.eaufrance.fr/actualite/la-bd-carthage-en-licence-ouverte-open-licence","terms_text":"Tiles © cquest@Openstreetmap France, data © Onema - IGN, LO/OL","description":"Réseau hydrographique: cours et plans d'eau et POI","overlay":true},{"id":"fr.ign.bdortho","name":"BDOrtho IGN","type":"tms","template":"https://proxy-ign.openstreetmap.fr/94GjiyqD/bdortho/{zoom}/{x}/{y}.jpg","scaleExtent":[2,21],"polygon":[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.358164,51.32937],[2.548804,51.09759],[2.570482,51.07409],[2.587412,51.01763],[2.598448,51.0051],[2.615575,50.99749],[2.639859,50.95766],[2.642247,50.94578],[2.624519,50.9256],[2.61962,50.91067],[2.623964,50.86071],[2.627811,50.85054],[2.637859,50.83696],[2.651102,50.82906],[2.732666,50.81738],[2.79995,50.73795],[2.816552,50.73092],[2.852648,50.73335],[2.890719,50.7162],[2.904925,50.71536],[2.916096,50.72418],[2.935084,50.75592],[3.007184,50.78377],[3.082183,50.78749],[3.092439,50.79092],[3.114119,50.80566],[3.148768,50.80195],[3.215401,50.73111],[3.221487,50.7267],[3.270507,50.70375],[3.275448,50.67757],[3.265761,50.6604],[3.265877,50.64054],[3.289219,50.60028],[3.292195,50.55037],[3.305598,50.53267],[3.375514,50.50839],[3.389804,50.50884],[3.474798,50.54445],[3.52173,50.53459],[3.532662,50.51873],[3.547788,50.51012],[3.615234,50.50558],[3.673778,50.45642],[3.684152,50.35277],[3.690097,50.34044],[3.702583,50.33482],[3.715758,50.33854],[3.749349,50.36279],[3.841089,50.36558],[3.901887,50.3436],[3.913173,50.34291],[4.026717,50.36904],[4.13761,50.29984],[4.143881,50.29727],[4.214438,50.28167],[4.229037,50.26664],[4.230782,50.25233],[4.170843,50.18579],[4.166015,50.16888],[4.176401,50.1547],[4.211948,50.13602],[4.240742,50.07102],[4.231934,50.05551],[4.181645,50.03436],[4.17177,50.02537],[4.169755,50.01217],[4.176498,50.00065],[4.206331,49.97546],[4.221639,49.97089],[4.308774,49.98145],[4.445423,49.9523],[4.454691,49.95251],[4.658098,50.00609],[4.669358,50.01392],[4.672929,50.02716],[4.66924,50.06972],[4.695168,50.10472],[4.831227,50.17941],[4.881497,50.16436],[4.904786,50.14451],[4.904264,50.12639],[4.880762,50.0815],[4.862772,50.0745],[4.851037,50.06216],[4.843307,50.03884],[4.843307,50.03883],[4.843295,50.03881],[4.826781,49.989],[4.826618,49.97692],[4.833433,49.96696],[4.896542,49.91753],[4.897546,49.89424],[4.879134,49.86942],[4.876249,49.85111],[4.889238,49.81266],[4.897691,49.80204],[4.910979,49.79926],[4.995343,49.81116],[5.01867,49.79272],[5.026862,49.78886],[5.099438,49.77323],[5.134584,49.73462],[5.141201,49.72984],[5.187609,49.70906],[5.196025,49.70732],[5.281572,49.70836],[5.333628,49.67308],[5.343996,49.65049],[5.354398,49.64041],[5.431412,49.60791],[5.482051,49.52815],[5.492943,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.607602,49.53761],[5.640997,49.56095],[5.706759,49.55267],[5.715782,49.55361],[5.775261,49.57414],[5.839902,49.55321],[5.861263,49.52038],[5.875997,49.5114],[5.975162,49.50129],[5.998015,49.47317],[6.016266,49.46597],[6.08635,49.47562],[6.093186,49.47787],[6.173966,49.52187],[6.246435,49.52511],[6.333999,49.48235],[6.344229,49.48037],[6.435145,49.487],[6.5451,49.44384],[6.606389,49.37868],[6.604972,49.33739],[6.616267,49.31869],[6.670133,49.29269],[6.729955,49.22917],[6.743276,49.19086],[6.760259,49.17752],[6.809042,49.17284],[6.824733,49.17826],[6.830928,49.19366],[6.829819,49.21802],[6.851186,49.23136],[6.884528,49.2239],[6.893221,49.22389],[6.937527,49.23369],[7.040549,49.19794],[7.046296,49.17503],[7.054777,49.16313],[7.069081,49.16018],[7.104945,49.16634],[7.143153,49.14159],[7.153499,49.13839],[7.286827,49.13488],[7.29893,49.13856],[7.360948,49.18259],[7.450116,49.19517],[7.50113,49.17672],[7.543788,49.10572],[7.557903,49.09626],[7.629604,49.08527],[7.647217,49.06722],[7.661197,49.06119],[7.754008,49.05963],[7.760731,49.06067],[7.802913,49.07489],[7.855253,49.05329],[7.867297,49.05227],[7.93826,49.06832],[8.080685,49.00688],[8.222498,48.98787],[8.23704,48.97683],[8.235894,48.95817],[8.208878,48.94863],[8.200888,48.94339],[8.158243,48.89753],[8.100873,48.7993],[7.990709,48.74478],[7.985341,48.7409],[7.904217,48.65865],[7.856051,48.63606],[7.848405,48.62977],[7.818424,48.58883],[7.81456,48.57704],[7.814491,48.50968],[7.785465,48.48337],[7.780554,48.47652],[7.745059,48.39484],[7.743573,48.38427],[7.751593,48.32322],[7.71085,48.29841],[7.702411,48.28803],[7.676613,48.21555],[7.596051,48.11698],[7.591652,48.10648],[7.585216,48.04694],[7.591268,48.03035],[7.624373,47.99865],[7.632049,47.97081],[7.575545,47.87436],[7.572802,47.86435],[7.572673,47.83631],[7.545808,47.78793],[7.544185,47.77232],[7.557581,47.72899],[7.535257,47.6989],[7.531364,47.68564],[7.536998,47.67302],[7.600164,47.60822],[7.589675,47.56755],[7.554237,47.55128],[7.54511,47.54283],[7.512557,47.48439],[7.387471,47.42111],[7.326527,47.4273],[7.244354,47.40939],[7.167083,47.4335],[7.152115,47.47612],[7.14279,47.48707],[7.128529,47.48893],[7.080105,47.47718],[7.035575,47.48695],[7.021019,47.48458],[7.012048,47.47287],[7.002995,47.44095],[6.955099,47.40808],[6.947157,47.39698],[6.94818,47.38337],[6.957691,47.37359],[6.971263,47.37218],[7.018004,47.38386],[7.05623,47.37035],[7.070073,47.35005],[7.05958,47.32257],[6.974243,47.27856],[6.963469,47.26233],[6.961339,47.23479],[6.89443,47.19393],[6.889128,47.18922],[6.855453,47.14636],[6.769073,47.10751],[6.760108,47.09953],[6.725613,47.0418],[6.623551,46.9811],[6.481204,46.9445],[6.46892,46.93522],[6.466862,46.91997],[6.475476,46.88771],[6.453496,46.8239],[6.45644,46.80534],[6.467224,46.79104],[6.460984,46.76887],[6.15817,46.59343],[6.148724,46.58069],[6.15152,46.56508],[6.165489,46.54399],[6.158111,46.52456],[6.101739,46.46979],[6.095717,46.45418],[6.097044,46.43317],[6.108289,46.41643],[6.166216,46.38839],[6.178173,46.36922],[6.137482,46.31297],[6.133713,46.30227],[6.130383,46.23737],[6.110298,46.22344],[6.088648,46.23081],[6.077173,46.23123],[6.018573,46.21601],[6.006813,46.20752],[6.003882,46.19332],[6.007866,46.16977],[6.017834,46.15564],[6.03509,46.15456],[6.055639,46.16288],[6.124683,46.15415],[6.137776,46.15702],[6.240258,46.22094],[6.249058,46.23299],[6.247073,46.24777],[6.21148,46.31057],[6.212186,46.32485],[6.239462,46.36705],[6.316478,46.41557],[6.410826,46.42495],[6.417483,46.42682],[6.504978,46.46871],[6.630473,46.47435],[6.746646,46.45695],[6.822442,46.42925],[6.818324,46.38181],[6.804843,46.36179],[6.801885,46.34639],[6.810949,46.33359],[6.864911,46.30038],[6.875036,46.28007],[6.860917,46.2439],[6.826978,46.21188],[6.820746,46.19862],[6.818627,46.16592],[6.822593,46.15261],[6.834266,46.14509],[6.903819,46.12971],[6.904911,46.09595],[6.909323,46.08406],[6.920006,46.07721],[6.948976,46.0699],[7.015561,46.00883],[7.051911,45.93066],[7.045335,45.92217],[7.044967,45.92064],[7.043936,45.92036],[6.995822,45.85822],[6.940965,45.83551],[6.843757,45.82387],[6.831016,45.81711],[6.826141,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.841405,45.71373],[6.907294,45.69124],[6.92419,45.66935],[6.942468,45.66172],[6.971313,45.66528],[7.00597,45.64945],[7.011511,45.63652],[6.997797,45.60877],[6.996431,45.59465],[7.015803,45.52354],[7.027743,45.5102],[7.107198,45.47877],[7.122797,45.44924],[7.13304,45.44001],[7.185604,45.41894],[7.19515,45.40409],[7.170749,45.35069],[7.142319,45.32298],[7.136488,45.30576],[7.14458,45.25048],[7.084166,45.20279],[6.992792,45.19823],[6.981064,45.19368],[6.900091,45.12689],[6.85843,45.11699],[6.782826,45.14228],[6.770557,45.14242],[6.677507,45.11356],[6.665295,45.10289],[6.665008,45.08667],[6.68237,45.04558],[6.696016,45.03395],[6.757442,45.01884],[6.783751,44.9146],[6.794195,44.90161],[6.866981,44.86519],[6.879801,44.86346],[6.936325,44.87461],[7.017954,44.84402],[7.034535,44.82282],[7.037114,44.75009],[7.049604,44.73226],[7.072236,44.72311],[7.086508,44.6968],[7.086656,44.68085],[7.07671,44.67134],[6.990071,44.67203],[6.974128,44.66431],[6.970564,44.64696],[6.978189,44.61784],[6.94659,44.57124],[6.882347,44.53479],[6.872327,44.5195],[6.878925,44.50245],[6.958945,44.43129],[6.958723,44.42908],[6.921668,44.41436],[6.912225,44.40659],[6.909075,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.999091,44.29414],[7.011806,44.256],[7.019835,44.24558],[7.032595,44.2424],[7.073117,44.2461],[7.165097,44.22112],[7.245331,44.18544],[7.260526,44.16682],[7.275371,44.15947],[7.338779,44.1574],[7.362775,44.13834],[7.377763,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.564785,44.15817],[7.605476,44.1634],[7.616198,44.16827],[7.639891,44.18928],[7.686079,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.694448,44.12276],[7.727862,44.08615],[7.724032,44.05704],[7.686028,44.02371],[7.680769,44.0164],[7.660161,43.9672],[7.596244,43.94466],[7.584187,43.93287],[7.568576,43.89159],[7.527096,43.87434],[7.516489,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.369681,41.35052],[9.273114,41.29196],[8.941857,41.27688],[5.8,41.64],[3.173576,42.41768],[3.160814,42.42757],[3.094399,42.41457],[3.034016,42.45331],[3.022142,42.45645],[2.878221,42.4487],[2.870188,42.44653],[2.784238,42.40256],[2.741304,42.41128],[2.729276,42.40998],[2.693308,42.39417],[2.683779,42.3854],[2.681621,42.37263],[2.685852,42.34679],[2.66719,42.33008],[2.581057,42.34418],[2.567769,42.34173],[2.533803,42.32197],[2.477948,42.32986],[2.419327,42.37658],[2.41222,42.38021],[2.267193,42.42055],[2.259731,42.42117],[2.206944,42.41558],[2.206525,42.41526],[2.205257,42.41541],[2.160278,42.41065],[2.148808,42.40545],[2.093931,42.35474],[2.008614,42.33818],[1.964998,42.36473],[1.930762,42.42442],[1.920889,42.43302],[1.884665,42.44761],[1.884588,42.44762],[1.884444,42.4477],[1.827736,42.47056],[1.725668,42.48452],[1.715606,42.50125],[1.727195,42.56103],[1.724794,42.57499],[1.710109,42.59992],[1.69377,42.60975],[1.602827,42.61382],[1.560687,42.6392],[1.546365,42.64166],[1.504443,42.6331],[1.492096,42.62502],[1.472384,42.59703],[1.437922,42.59264],[1.419356,42.60643],[1.38032,42.67415],[1.373353,42.68127],[1.333134,42.70563],[1.323642,42.7085],[1.232212,42.71248],[1.165543,42.69928],[1.085465,42.76635],[1.075637,42.77079],[0.9593748,42.78852],[0.9507323,42.78794],[0.9226515,42.7797],[0.8460624,42.8157],[0.7151135,42.8464],[0.7001699,42.84402],[0.6911674,42.83186],[0.6740937,42.76479],[0.6747382,42.75286],[0.6919171,42.70684],[0.6689955,42.67901],[0.4302428,42.67863],[0.3715037,42.70308],[0.3595376,42.70415],[0.3491168,42.69817],[0.3256688,42.67274],[0.2957095,42.66388],[0.2459353,42.70175],[0.2397249,42.70494],[0.189669,42.72039],[0.1791886,42.72075],[-0.01993262,42.67389],[-0.06725834,42.6848],[-0.1694885,42.77157],[-0.2998662,42.82697],[-0.3168349,42.82635],[-0.3920752,42.78766],[-0.4435404,42.78453],[-0.488418,42.80255],[-0.508683,42.79935],[-0.5449894,42.76906],[-0.5672068,42.76937],[-0.6744552,42.86392],[-0.6809365,42.86775],[-0.7337233,42.88666],[-0.747598,42.93879],[-0.757105,42.95107],[-0.7725328,42.95284],[-0.8211401,42.93865],[-0.9450847,42.94192],[-1.023131,42.98206],[-1.108517,43.00409],[-1.115597,43.00461],[-1.147753,43.00124],[-1.158452,43.01452],[-1.167362,43.02083],[-1.216216,43.0381],[-1.226121,43.03898],[-1.262362,43.03303],[-1.306428,43.05531],[-1.319918,43.05696],[-1.331346,43.0496],[-1.354196,43.0197],[-1.438684,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.476407,43.10248],[-1.434786,43.13087],[-1.427318,43.1404],[-1.394112,43.22935],[-1.395313,43.24596],[-1.408677,43.25591],[-1.526287,43.28099],[-1.546257,43.2737],[-1.571485,43.2412],[-1.610526,43.24223],[-1.650003,43.29323],[-1.669527,43.30065],[-1.733594,43.28856],[-1.756061,43.31966],[-1.762973,43.32565],[-1.791557,43.34067],[-1.800991,43.37017],[-1.785091,43.39037],[-1.783502,43.39686],[-2.7,43.9]],[[-61.2750098,14.9021787],[-60.7236843,14.9010106],[-60.7248947,14.3668637],[-61.2762202,14.3680347],[-61.2750098,14.9021787]],[[-61.9280191,16.5861824],[-61.9268639,15.7393966],[-60.8812792,15.7407152],[-60.8824344,16.5874955],[-61.9280191,16.5861824]],[[-53.8934381,6.0040017],[-52.4652154,5.4464962],[-51.5203912,4.5107197],[-51.5368707,4.1163329],[-52.2345025,3.1021265],[-52.6409967,2.251623],[-52.9266412,2.0759672],[-53.7286431,2.2186891],[-54.2010552,2.0320501],[-54.8053033,2.2735786],[-54.3109185,2.8058902],[-54.3164117,3.2008539],[-54.124151,3.4640797],[-54.1296441,3.5956655],[-54.4207818,4.0012658],[-54.5800836,4.9596205],[-53.8934381,6.0040017]],[[55.088162,-20.7793549],[55.9595858,-20.7728126],[55.9657599,-21.4900002],[55.0943361,-21.496511],[55.088162,-20.7793549]],[[44.9205447,-12.5736261],[45.3482619,-12.5702887],[45.3527389,-13.116298],[44.9250218,-13.1196281],[44.9205447,-12.5736261]],[[-178.577276,-14.7058162],[-178.4256804,-14.0033368],[-176.3415582,-12.8385765],[-175.7153375,-12.9189012],[-175.9185845,-13.587255],[-177.8463838,-14.6498253],[-178.577276,-14.7058162]]],"terms_url":"https://openstreetmap.fr/bdortho","terms_text":"BDOrtho IGN","best":true,"icon":"http://www.ign.fr/institut/sites/all/themes/ign_institut/logo.png"},{"id":"GRB","name":"Belgium AGIV GRB Flanders","type":"tms","template":"https://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=grb_bsk&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,21],"polygon":[[[5.9849448,50.7072276],[5.9849448,50.7671973],[5.9107871,50.8227527],[5.7556052,50.8353303],[5.7542319,50.8626424],[5.8331961,50.9332328],[5.8551688,51.026611],[5.9094138,51.0775439],[5.9121604,51.1822548],[5.8785147,51.2080728],[5.7741446,51.2368858],[5.684194,51.2407548],[5.6230826,51.2699769],[5.6230826,51.2978925],[5.5399985,51.34724],[5.4473013,51.3485267],[5.3985495,51.321071],[5.3120322,51.3232166],[5.2667136,51.3618196],[5.1994223,51.3725369],[5.1829428,51.3961061],[5.1589102,51.4923992],[5.0833792,51.5308596],[5.0325675,51.539829],[4.9556632,51.5052229],[4.9014182,51.5056503],[4.8382468,51.5436725],[4.7709555,51.5586163],[4.711904,51.5470886],[4.6404929,51.4966741],[4.6144003,51.4971016],[4.5656485,51.5317139],[4.4825644,51.5304324],[4.4262595,51.5218884],[4.3006034,51.4697351],[4.2951102,51.4256575],[4.181127,51.4243731],[4.1371817,51.3952492],[4.138555,51.3506709],[4.0520377,51.3004685],[3.933248,51.272984],[3.8652701,51.2708361],[3.8632102,51.2901637],[3.7629599,51.3240748],[3.5933585,51.359247],[3.4773154,51.3313688],[3.425817,51.3973913],[3.2356162,51.3515286],[3.2260031,51.3656781],[3.1779379,51.3618196],[3.1600852,51.3322268],[3.0625815,51.3021857],[2.7508444,51.1702014],[2.4700064,51.0745241],[2.4926657,50.9937771],[2.5311179,50.9557299],[2.5091452,50.9115907],[2.5304312,50.8214514],[2.5990958,50.7641572],[2.6650138,50.7645915],[2.7700705,50.66677],[2.8970999,50.6589354],[2.991857,50.7254874],[3.1133933,50.7263567],[3.2369895,50.7059231],[3.3626456,50.6585001],[3.4711356,50.7020092],[3.6393637,50.6672052],[3.6984152,50.681565],[3.727941,50.7124454],[3.8185782,50.6841754],[3.8748831,50.6415206],[4.0925498,50.642827],[4.150228,50.6632881],[4.2065329,50.6441333],[4.3136496,50.642827],[4.452352,50.6876557],[4.5347495,50.6780842],[4.6130271,50.6954855],[4.6768851,50.6959204],[4.7270102,50.732007],[4.7805686,50.732007],[4.7997946,50.7128802],[4.8622794,50.7128802],[4.8856253,50.6954855],[4.9611563,50.6954855],[5.0311942,50.6576295],[5.1074118,50.6502288],[5.2007956,50.6489227],[5.2358145,50.6654643],[5.3250784,50.6658995],[5.3669638,50.6820001],[5.4212088,50.6641586],[5.5221457,50.6746032],[5.622396,50.7241834],[5.6752677,50.69853],[5.7398123,50.6972252],[5.7727713,50.6719923],[5.8125968,50.6602413],[5.9080405,50.659806],[5.9849448,50.7072276]]],"terms_text":"GRB Flanders © AGIV","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAABm0lEQVQ4y6WTPUgCYRjHf5oFJVfRUZKVHYFBoBAUFLZE0FBD0NQHRENESzS019LSFNHWx1DQEhGRg0JFREM11FJuLWem4GB5HULdwdkgHprn5LO97/O8v+fj/7y2bDabpQKzFx5S6ntlgE81xvHtclHAbuSNloNT5q/uywP021cAvO4hAPYu5/hI5e6GWpsBCEfjxNSMNUALPvJ7eA3AQPcML3KIzbNhlvdEWmu+6RCcAISiCWtA3fosPztBfrYvAGgX/QCIggdR8DDe6Qbg5E0uAdjyKhhykq+uBeySi9qVCfSAB61HRBQ8RFJpRs6vALiZHMUnNpYO0Ujn+jPkJJnVfbTBNeqfFQB8YqP56H8VJqBKcuHcWsQuuXIOyUX1sN8MnPJKlnOwWS2SIScx0hkcvV3mXUzN0HcSAuBoNMBYZxsADittVXcT/XcPKE/PltqHowkTYLcMkOMoml52+wr9jnIZAJZ8XjYGe0vaUDSdsBxnulsqrUDRdMLReNHg8tYhOAs2M2HdQiSVBqChprpI7/9q5JPYKv3OfxL1n52ATYYBAAAAAElFTkSuQmCC"},{"id":"AGIV","name":"Belgium AGIV Orthophoto Flanders","type":"tms","template":"https://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=omwrgbmrvl&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,21],"polygon":[[[2.522393220658428,51.101723961331],[3.1260610915867457,51.34117672029327],[3.174929443042849,51.382459567439525],[3.3761520666856217,51.38784154353026],[3.410647373595811,51.33040116175589],[3.4020235468682634,51.28547573497245],[3.4911364230529203,51.256700377228974],[3.4825125963253734,51.30345118353617],[3.5773746903283947,51.323216048914524],[3.813092620881357,51.27288873325703],[3.8217164476089045,51.236906864834886],[3.9309515861578386,51.236906864834886],[4.054559769252684,51.27468708752057],[4.20116482362099,51.35194974615148],[4.169544125619984,51.38066543475199],[4.342020660170932,51.395016527087456],[4.3650175314443915,51.46491366130351],[4.5374940659953396,51.50071687469512],[4.571989372905529,51.479238319799464],[4.560490937268798,51.44879304380801],[4.638105377816725,51.45058450468522],[4.750215125274841,51.5239738914927],[4.8364533925503155,51.507874144493115],[5.080795149830825,51.49892738159079],[5.135412719105292,51.447001512638565],[5.106666630013469,51.391429175957505],[5.264770120018504,51.31782647548482],[5.264770120018504,51.28727359653538],[5.4085005654776275,51.292666758936925],[5.486115006025553,51.325012432665545],[5.5809771000285755,51.28367780302667],[5.583851708937758,51.23510703218069],[5.767826679125435,51.20449910348059],[5.8770618176743685,51.161253258857485],[5.704585283123422,50.80292546633848],[5.905807906766195,50.7865720955422],[5.9374286047672005,50.732019528192964],[5.902933297857012,50.70107817444857],[5.8138204216723555,50.69379488717487],[5.615472406938765,50.761122144578216],[5.500488050571466,50.71200098472672],[5.204403332925673,50.70289881954383],[5.164158808197117,50.67558172042608],[5.037676016193088,50.70107817444857],[4.988807664736986,50.750210783384084],[4.916942442007425,50.72656077355532],[4.790459650003396,50.766576871275696],[4.681224511454462,50.77021300246129],[4.6697260758177315,50.73565834458533],[4.287403090896464,50.67922491935501],[3.91082932379356,50.677403355240585],[3.718230526878334,50.752029520237265],[3.6549891308763196,50.71200098472672],[3.5342555566906557,50.710180693059606],[3.514133294326379,50.741116039142966],[3.45664111614273,50.74384464791457],[3.373277457776438,50.69561581502901],[3.310036061774423,50.70745012302645],[3.2899137994101473,50.7365680045137],[3.1648683118607086,50.742935129324266],[3.1318103094051106,50.77203096207303],[3.080067349039826,50.76021296163662],[2.8745328120332805,50.73929687829333],[2.8960923788521487,50.71109084772858],[2.8745328120332805,50.69561581502901],[2.796918371485353,50.70289881954383],[2.699181668573149,50.80020030189157],[2.6201299235706315,50.79747497850781],[2.5698242676599374,50.85830267681076],[2.5669496587507554,50.923581424665855],[2.6028822701155367,50.94984841176044],[2.549702005295661,50.996006093918574],[2.522393220658428,51.101723961331]]],"terms_text":"Orthophoto Flanders most recent © AGIV","best":true,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAABm0lEQVQ4y6WTPUgCYRjHf5oFJVfRUZKVHYFBoBAUFLZE0FBD0NQHRENESzS019LSFNHWx1DQEhGRg0JFREM11FJuLWem4GB5HULdwdkgHprn5LO97/O8v+fj/7y2bDabpQKzFx5S6ntlgE81xvHtclHAbuSNloNT5q/uywP021cAvO4hAPYu5/hI5e6GWpsBCEfjxNSMNUALPvJ7eA3AQPcML3KIzbNhlvdEWmu+6RCcAISiCWtA3fosPztBfrYvAGgX/QCIggdR8DDe6Qbg5E0uAdjyKhhykq+uBeySi9qVCfSAB61HRBQ8RFJpRs6vALiZHMUnNpYO0Ujn+jPkJJnVfbTBNeqfFQB8YqP56H8VJqBKcuHcWsQuuXIOyUX1sN8MnPJKlnOwWS2SIScx0hkcvV3mXUzN0HcSAuBoNMBYZxsADittVXcT/XcPKE/PltqHowkTYLcMkOMoml52+wr9jnIZAJZ8XjYGe0vaUDSdsBxnulsqrUDRdMLReNHg8tYhOAs2M2HdQiSVBqChprpI7/9q5JPYKv3OfxL1n52ATYYBAAAAAElFTkSuQmCC"},{"id":"Benin_cotonou_pleiade_2016","name":"Benin: Cotonou Pleiade 2016","type":"tms","template":"https://geoxxx.agrocampus-ouest.fr/owsifl/gwc/service/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Benin:cotonou_pleiade_2016&STYLE=&FORMAT=image/jpeg&tileMatrixSet=EPSG:3857&tileMatrix=EPSG:3857:{zoom}&tileRow={y}&tileCol={x}","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","scaleExtent":[0,21],"polygon":[[[2.31953818544,6.55745092536],[2.33645249928,6.56023631702],[2.36377172444,6.56211241002],[2.36737717181,6.56067658005],[2.37777373205,6.54939665325],[2.3777926612,6.53484752744],[2.36994151563,6.4933195729],[2.37038356708,6.45527010853],[2.36958186167,6.45269435578],[2.36188103586,6.44177160245],[2.35391742884,6.40545220189],[2.3674929737,6.40149524022],[2.39525870424,6.40071623744],[2.40128040262,6.40374371884],[2.40587684694,6.40340733291],[2.42045897749,6.39382909301],[2.42485054154,6.3979366042],[2.42949152505,6.39887495342],[2.43625257397,6.39628121034],[2.43958410532,6.40041525877],[2.44439433776,6.40189359345],[2.45375647532,6.39899446003],[2.47144744127,6.3963166199],[2.48162019208,6.3910582748],[2.49453210303,6.38739776192],[2.50893162289,6.38888498676],[2.50719014059,6.39228876781],[2.50120407357,6.39162040687],[2.4963025358,6.39521449649],[2.49509997769,6.40123077776],[2.49543290813,6.40400928653],[2.49830345887,6.41022131795],[2.50191336015,6.41281720321],[2.5108701911,6.41321333458],[2.52218648559,6.40849403999],[2.53352059576,6.4051656109],[2.53809922441,6.40960941297],[2.5411100736,6.41090182623],[2.54650822333,6.41099034757],[2.54654385468,6.40651114868],[2.57638511144,6.40723702943],[2.57642074279,6.41176933466],[2.58575615684,6.41196408125],[2.58867792765,6.41095493903],[2.60877400982,6.39413560832],[2.62569890171,6.39487921149],[2.64554556441,6.39728706193],[2.65039142819,6.39339200408],[2.6536650586,6.36823275735],[2.6431181786,6.3665949733],[2.61251084779,6.3628944474],[2.56867983171,6.3607044406],[2.54682890549,6.36055393954],[2.54687344468,6.35546343647],[2.50206702036,6.35461353888],[2.47064016846,6.35595920942],[2.46777184468,6.35202842507],[2.46422652522,6.35020467258],[2.45253944198,6.35006302163],[2.4511320036,6.34813302357],[2.44737289603,6.34629155079],[2.43757427441,6.34653944174],[2.43297783009,6.33841209773],[2.43016295333,6.33706638135],[2.42244876576,6.33706638135],[2.39236031651,6.34114999999],[2.39315311407,6.34114999999],[2.3652849434,6.34445228474],[2.35386064137,6.34529777247],[2.34377474198,6.34457844399],[2.34093759563,6.34533982549],[2.31086028117,6.36567095094],[2.28434610184,6.37465215648],[2.28146887022,6.37761782314],[2.27599054995,6.39517244756],[2.27611525968,6.39819996182],[2.31528747657,6.4926104105],[2.31579967725,6.5530659484],[2.31953818544,6.55745092536]],[[1.69563043958,6.25076170066],[1.70009994721,6.24711901182],[1.70417862346,6.24697179839],[1.75874803806,6.25835802546],[1.77079143482,6.25995187823],[1.81712109941,6.27161341959],[1.84456614779,6.27656750346],[1.85767848509,6.27944518918],[1.88843363033,6.28325588467],[1.90481876292,6.28594870029],[1.90617692982,6.29435189983],[1.90083111364,6.29721233234],[1.89880903445,6.29953873942],[1.89404334121,6.30085024405],[1.89047742238,6.29969866569],[1.88747882146,6.29636150888],[1.88344050885,6.29622344016],[1.86969682855,6.29226563906],[1.8564007671,6.29198230539],[1.85206654725,6.28674503171],[1.84991419093,6.28906373821],[1.84691224958,6.29202989661],[1.8435272712,6.29332703219],[1.84040507404,6.29315437611],[1.83626738336,6.29129499924],[1.83409832485,6.28733273348],[1.83416513363,6.2851988527],[1.83229560117,6.28456355663],[1.82785949792,6.28644177291],[1.82182443779,6.2908379014],[1.81562903657,6.28997904337],[1.81211044063,6.29143113241],[1.80757635117,6.29570768815],[1.80471693522,6.29692955475],[1.80073513171,6.29709778253],[1.79775991387,6.29612383144],[1.79625448928,6.29491967121],[1.79490049792,6.28965143736],[1.79641483036,6.28608317469],[1.80097564333,6.28338261222],[1.79566657198,6.28013306439],[1.79156005874,6.28174455931],[1.78498607441,6.28122215216],[1.78092410036,6.27752986974],[1.77588226414,6.27550220232],[1.76744654171,6.27696318619],[1.75653444036,6.27496207997],[1.74833032171,6.27238985028],[1.74761769468,6.27726423691],[1.74572477914,6.27938486862],[1.73948038482,6.27984972411],[1.73680357955,6.27761398678],[1.73572127725,6.27891558552],[1.72901812928,6.27911038233],[1.72435487617,6.27422273126],[1.72449294765,6.2678607472],[1.72555966124,6.26683029328],[1.69933944056,6.26159387355],[1.69572953928,6.25725948175],[1.69563043958,6.25076170066]]],"best":true},{"id":"Bing","name":"Bing aerial imagery","type":"bing","template":"https://www.bing.com/maps","scaleExtent":[0,22],"default":true,"description":"Satellite and aerial imagery.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAGsklEQVR4Xu2aa2wUZRSG393Z3VKhW0AjQgvhjhRMxVoFSkTSVhJEGqUkECkXQSyoiBCJicYYo+GPiAS1MQREMI2GhGI0UQilJJSCFcWqoDYol0ChEG6lLdu9et5vu01ZWpg0nZ3dMM9msrAz03SenHO+c76tDe+tDMHittijP7C4FUuSDixJOrAk6cCSpANLkg4sSTqwJOnAkqQDS5IOLEk6MEySzWaDLfrDBMUwSaFAgKag2e0JL8sQSYyi+1PcSlSguQmhUFB9bpfPeSSaNEMkiRWsHP8kKua/jFdycjHA3RsI+BH0eeXwKYmUlSjYDNlPEkmbC+ZgYWa2+u81zw3sO/kvvvrzF1SfOYXTVy6pa+Byhd/jHGMiSfAx1YJB+OVI7ZGMggfHYnvhfFQteg2fF8zGQ2kDYfP7kQjJZ5gkplSkaDNWghIxAalNaSmpWPLIBOQNGYWQ3we7/S6W1B5qYA3SbHYlyxcMwCOCEoWYSGoPZTntWkIV7phLSkQsSTqwJOnAkqQD0yWxfMd7CTddkp8dt6x0Dlnx4rWxNF2S25Wkmkp/03U1CLOXirdtFtMkUQSH3mF97sXXsxagKDsHfZJ7IuBpRkiG4JCMM21du8k9lWmSFPLwJ69eRlb/dGx9di6qZa77UoTljhiNlKQeSlbgRrMSZmYDapqkEGuRw4krDdew/qf96rPhfe/DvMxs7JlbjCNLVuH9/GcwZdRY9JSU9DU1hLdZEO7aY7kvZZokhRKlYfeJWpxvbFBzHXcNyDAR9takPOwtWordz7+ENU/PwmODhqqoCu9LeZVoh6SjZnCEmS7JJVFSW3caFSePh6Oj9XkpgML4PnHgYLyZk4vyomIcfnEVVoq8Ef0GwOlwwN/ciIAIMxJzJaE17ewObPqtGiF5cXUjLNaMElrjvhS3WXqJ0KwB6VibPwPHildjR+ECLMvJQ8YD6YamnumSmGJwOlFx4jhqzteJjFBYXCt8eK5wlEeJPMd7KHD6yAx8Om0m9kiEPTl4ONDiUdd2N93/E7sAo4Y1ZrNEE+sL95vai2q7jq/Wok0YYR6/H/17udGvZ4oYDxgSUfEhSaWcHduP1eD3+jq4NEdbb8Q0u1VXGEYNIyqykWfUgBMXktR6JkX4vCzzeVs/w+Lvv8Ef9efUOdWB33T1rYTbgTtd1XXiQpJCokESCRebGrGpuhKPblqHeTtLsfu/f3CZDSUvib4nRsSPJFCCrG7SYDqTkuGVxnFb1V68XfEDmlubyI7qVCyIK0msMSzGPk8T+qWkYt3MItV9p7tT1fm7bixpT2TM4JyWpGkonjAFh15YjhWPT4abM1z0DVGoNsJATJWkpnx+zSTpxGN6xsMon7cUJdMKMbh3X/XwfHUWPzzPIyzZuEcx7iffAdUcBgLwttxARv80lMr0XzZ7EXIGDlHLfuThO1u1mJY875LI+1nGmqMX6lRTakRQmSbpmteDVGkA1zxVgIMLX8WcseNUz0NBFNhR/Yl8E0xYv7jNsvzHMkzasgFH68/C5nSp+7sbUyRx9JgzZhwqFq9Qg6tbVrO2h+8kbfjw1EZ5LdJlf1hVgclbPsGGyj3w+qXTdjCKDAgjmCSJo8fUYaMwTib5yKTfUeQQPnYkush3tUcxYfN6vCERdPrqJTiS71G1zShBxBRJhAU5Mqh2tD3Lh2bEqQFXBLHuPLf9C8wo3YgjZ0/B5nLBLtGjJEff3M0YJimyMnUGC3Jn0cOiHF75bLggHfjru3Yif2sJymoOS1o5VO2J7AbEAsMkce+HIu4kqz3qWjlYlNlllxyuQtbGtfj4QLkq9EwtLl9GplZHdLsklTryEDv+qkF903U4tfD3abdLi/b9Du9n3cnbVoJl35bizNUrsLt6wGbXbvszjMSQPwdUc5b0QGnSEK6eOAXzM7ORqjpnRsHN4wVTK7JRduxiPd7dtwtlf9fA7/NCEznUEuvIicYQSYTRE+Iej9+H7EFDsXpSLgpHZ6pz0bLONTZgQ/V+OSrR2NwIOFzQtPAcFw8YJomovoYNYksL/4GpIzLwzhP5mChdNQnK0r7x10P46OA+1J47CyQlqesZOYb9Ul3AUEkRmE5B1hOvV4IkCYuzxmPGyDH4oLIcB07Ugr+Gw8Vu2fzU6oiYSCKRblmlEP9eku+aQ+1I8vNYLeddodtXt86gAkYKvyKySzRp7JRlICXxLIjETFJ7KIURFY+p1RGmSEo0LEk6sCTpwJKkA0uSDixJOrAk6cCSpANLkg4sSTqwJOnAkqQDS5IOLEk6sCTp4H8Lf75Du1VW7QAAAABJRU5ErkJggiAgICAgICAgICAgICAgICAgICAgICAg"},{"id":"Bonvillars-2013","name":"Bonvillars Orthophoto 2013","type":"tms","template":"http://osmdata.asitvd.ch/tiles/bonvillars2013/{zoom}/{x}/{y}.png","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[14,20],"polygon":[[[6.6671318,46.8335837],[6.6631287,46.838326],[6.6721281,46.8419075],[6.6749,46.8422559],[6.6784318,46.8380735],[6.6671318,46.8335837]]],"terms_url":"http://osmdata.asitvd.ch/","terms_text":"Bonvillars - Orthophoto technique 2013"},{"id":"Bordeaux_2012","name":"Bordeaux - 2012","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/bordeaux_2012/{zoom}/{x}/{y}","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[-0.5992269128228901,45.041932410852176],[-0.542312560140509,45.02756808640373],[-0.509790072893434,45.006014839274926],[-0.4772675856463589,45.002062530648324],[-0.47066145542429677,44.97366975755017],[-0.4554165395272304,44.95101733966983],[-0.4645634890654702,44.91792155099146],[-0.47320227474047455,44.91936089493768],[-0.48793902677430534,44.90928473014602],[-0.49810230403901634,44.89056716544938],[-0.48946351836401203,44.87796537368711],[-0.46659614451841236,44.87076311041642],[-0.4762512579198878,44.84734952959955],[-0.4950533208596031,44.839783107079846],[-0.4909880099537187,44.83185531284354],[-0.46964512769782574,44.825368124499924],[-0.4970859763125452,44.80445999547304],[-0.5245268249272648,44.80013322923096],[-0.5102982367566694,44.76767213918935],[-0.5346901021919757,44.76514662270613],[-0.5621309508066953,44.75107386670688],[-0.5600982953537531,44.7416901252491],[-0.5728023919346418,44.741329181695264],[-0.5946534380537702,44.760095258488434],[-0.6342902193861429,44.73988538494593],[-0.650043299146445,44.7770516622697],[-0.6790086393508712,44.77488729214841],[-0.688155588889111,44.779215951267936],[-0.7150882736405949,44.76839369504671],[-0.7516760717935543,44.74710400814933],[-0.7633638406479719,44.755765166198834],[-0.7384638113494302,44.77560875786918],[-0.7420209583920789,44.785708331523864],[-0.7277923702214837,44.81239155746571],[-0.7399883029391369,44.828611809936305],[-0.7643801683744431,44.82933260413425],[-0.8030006219803447,44.821763815493405],[-0.8400965839965395,44.82753060173851],[-0.8390802562700685,44.840143435448645],[-0.875668054423028,44.8502317148731],[-0.8853231678245034,44.85851719417739],[-0.88684765941421,44.887686999278294],[-0.8660129410215526,44.88696693520083],[-0.8456863864921306,44.8966870397005],[-0.8334904537744775,44.92763642292355],[-0.818245537877411,44.92763642292355],[-0.8019842942538735,44.92223947466319],[-0.7984271472112248,44.94849985224626],[-0.7872475422200427,44.948140202171814],[-0.7557413826994388,44.97007473283782],[-0.7216944038626572,44.95784996320919],[-0.6957780468376442,44.930874348504034],[-0.6886637527523465,44.93447182951288],[-0.6713861814023379,44.93267311717697],[-0.6693535259493957,44.940946727451696],[-0.6251432698479031,44.95065770536977],[-0.6322575639332009,44.95892872413991],[-0.6312412362067297,44.96719855081702],[-0.6002432405493613,44.967558081456815],[-0.5514595096787488,44.97834295278015],[-0.5407880685508023,44.97726455691398],[-0.5545084928581621,44.99739126890938],[-0.5936371103272993,45.01751091397198],[-0.6078656984978945,45.0340324785955],[-0.5992269128228901,45.041932410852176]]],"terms_text":"Communauté urbaine de Bordeaux - 2012"},{"id":"Bordeaux_2016","name":"Bordeaux 2016","type":"tms","template":"http://tms.bordeaux.inria.fr/bdx2016/{zoom}/{x}/{y}.jpg","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","scaleExtent":[14,20],"polygon":[[[-0.5992269128228901,45.041932410852176],[-0.542312560140509,45.02756808640373],[-0.509790072893434,45.006014839274926],[-0.4772675856463589,45.002062530648324],[-0.47066145542429677,44.97366975755017],[-0.4554165395272304,44.95101733966983],[-0.4645634890654702,44.91792155099146],[-0.47320227474047455,44.91936089493768],[-0.48793902677430534,44.90928473014602],[-0.49810230403901634,44.89056716544938],[-0.48946351836401203,44.87796537368711],[-0.46659614451841236,44.87076311041642],[-0.4762512579198878,44.84734952959955],[-0.4950533208596031,44.839783107079846],[-0.4909880099537187,44.83185531284354],[-0.46964512769782574,44.825368124499924],[-0.4970859763125452,44.80445999547304],[-0.5245268249272648,44.80013322923096],[-0.5102982367566694,44.76767213918935],[-0.5346901021919757,44.76514662270613],[-0.5621309508066953,44.75107386670688],[-0.5600982953537531,44.7416901252491],[-0.5728023919346418,44.741329181695264],[-0.5946534380537702,44.760095258488434],[-0.6342902193861429,44.73988538494593],[-0.650043299146445,44.7770516622697],[-0.6790086393508712,44.77488729214841],[-0.688155588889111,44.779215951267936],[-0.7150882736405949,44.76839369504671],[-0.7516760717935543,44.74710400814933],[-0.7633638406479719,44.755765166198834],[-0.7384638113494302,44.77560875786918],[-0.7420209583920789,44.785708331523864],[-0.7277923702214837,44.81239155746571],[-0.7399883029391369,44.828611809936305],[-0.7643801683744431,44.82933260413425],[-0.8030006219803447,44.821763815493405],[-0.8400965839965395,44.82753060173851],[-0.8390802562700685,44.840143435448645],[-0.875668054423028,44.8502317148731],[-0.8853231678245034,44.85851719417739],[-0.88684765941421,44.887686999278294],[-0.8660129410215526,44.88696693520083],[-0.8456863864921306,44.8966870397005],[-0.8334904537744775,44.92763642292355],[-0.818245537877411,44.92763642292355],[-0.8019842942538735,44.92223947466319],[-0.7984271472112248,44.94849985224626],[-0.7872475422200427,44.948140202171814],[-0.7557413826994388,44.97007473283782],[-0.7216944038626572,44.95784996320919],[-0.6957780468376442,44.930874348504034],[-0.6886637527523465,44.93447182951288],[-0.6713861814023379,44.93267311717697],[-0.6693535259493957,44.940946727451696],[-0.6251432698479031,44.95065770536977],[-0.6322575639332009,44.95892872413991],[-0.6312412362067297,44.96719855081702],[-0.6002432405493613,44.967558081456815],[-0.5514595096787488,44.97834295278015],[-0.5407880685508023,44.97726455691398],[-0.5545084928581621,44.99739126890938],[-0.5936371103272993,45.01751091397198],[-0.6078656984978945,45.0340324785955],[-0.5992269128228901,45.041932410852176]]],"terms_text":"Bordeaux Métropole - 2016"},{"id":"branquinha_al","name":"Branquinha AL","type":"wms","template":"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?service=WMS&version=1.1.0&request=GetMap&layers=Branquinha&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-35.96968237108,-9.29279539826],[-35.97062650865,-9.20260556139],[-35.97726765817,-9.20263733363],[-35.98365131562,-9.20270087809],[-35.98765317147,-9.20265851512],[-35.99159065431,-9.20274324105],[-36.00498024171,-9.20283855771],[-36.01473275369,-9.20293387434],[-36.01651374048,-9.20295505581],[-36.01871315187,-9.20293387434],[-36.02487150377,-9.20285973919],[-36.02891627496,-9.20296564655],[-36.03307906335,-9.2028915114],[-36.03769246286,-9.20294446508],[-36.04581419175,-9.20299741875],[-36.05160776323,-9.20305037241],[-36.05456892198,-9.20300800948],[-36.06022301858,-9.20303978168],[-36.06190744584,-9.20303978168],[-36.06180015748,-9.21318555747],[-36.06167141145,-9.21805712081],[-36.06156412309,-9.21914791817],[-36.06162849611,-9.22156248675],[-36.06143537706,-9.22276976485],[-36.06139246171,-9.22716464584],[-36.06133881753,-9.23226899309],[-36.06140319055,-9.23391041686],[-36.06144610589,-9.23493762655],[-36.06130663102,-9.23646255088],[-36.0613280887,-9.23773331611],[-36.06142464822,-9.23904643537],[-36.06144610589,-9.24133379272],[-36.0613602752,-9.24229744345],[-36.06141391938,-9.24357877714],[-36.06139246171,-9.24530486392],[-36.06126371568,-9.24726390922],[-36.06123152917,-9.24948767715],[-36.06127444452,-9.25106548492],[-36.0612100715,-9.25517410549],[-36.06118861383,-9.25794845615],[-36.06107059663,-9.2594521027],[-36.0610920543,-9.26183462807],[-36.06105986779,-9.26492659247],[-36.06085601991,-9.27145986606],[-36.06083456224,-9.27510235154],[-36.06073800271,-9.28273662427],[-36.06080237573,-9.29234011263],[-36.06073800271,-9.29363185173],[-36.05477276986,-9.29356832368],[-36.04621115869,-9.29349420762],[-36.03940907663,-9.29348361961],[-36.03501025384,-9.29338832751],[-36.02978531068,-9.29340950353],[-36.02167431062,-9.29332479942],[-36.01278010553,-9.29328244736],[-36.0046798343,-9.29320833124],[-35.99678341096,-9.29314480312],[-35.98969165033,-9.29312362708],[-35.98483148759,-9.29304951092],[-35.98305050081,-9.29289069053],[-35.98173085397,-9.29294363067],[-35.97884479707,-9.29281657433],[-35.96968237108,-9.29279539826]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"British_Columbia_Mosaic","name":"British Columbia Mosaic","type":"tms","template":"http://{switch:a,b,c,d}.imagery.paulnorman.ca/tiles/bc_mosaic/{zoom}/{x}/{y}.png","endDate":"2013-06-01T00:00:00.000Z","startDate":"2009-01-01T00:00:00.000Z","scaleExtent":[9,20],"polygon":[[[-123.3176032,49.3272567],[-123.4405258,49.3268222],[-123.440717,49.3384429],[-123.4398375,49.3430357],[-123.4401258,49.3435398],[-123.4401106,49.3439946],[-123.4406265,49.3444493],[-123.4404747,49.3455762],[-123.4397768,49.3460606],[-123.4389726,49.3461298],[-123.4372904,49.3567236],[-123.4374774,49.3710843],[-123.4335292,49.3709446],[-123.4330357,49.373725],[-123.4332717,49.3751221],[-123.4322847,49.3761001],[-123.4317482,49.3791736],[-123.4314264,49.3795927],[-123.4307826,49.3823866],[-123.4313405,49.3827358],[-123.4312118,49.3838533],[-123.4300415,49.3845883],[-123.4189858,49.3847087],[-123.4192235,49.4135198],[-123.3972532,49.4135691],[-123.3972758,49.4243473],[-123.4006929,49.4243314],[-123.4007741,49.5703491],[-123.4000812,49.570345],[-123.4010761,49.5933838],[-123.3760399,49.5932848],[-123.3769811,49.6756063],[-123.3507288,49.6756396],[-123.3507969,49.7086751],[-123.332887,49.708722],[-123.3327888,49.7256288],[-123.3007111,49.7255625],[-123.3009164,49.7375384],[-123.2885986,49.737638],[-123.2887823,49.8249207],[-123.2997955,49.8249207],[-123.3011721,49.8497814],[-123.3218218,49.850669],[-123.3273284,49.8577696],[-123.3276726,49.9758852],[-123.3008279,49.9752212],[-123.3007204,50.0997002],[-123.2501716,50.100735],[-123.25091,50.2754901],[-123.0224338,50.2755598],[-123.0224879,50.3254853],[-123.0009318,50.3254689],[-123.0007778,50.3423899],[-122.9775023,50.3423408],[-122.9774766,50.3504306],[-122.9508137,50.3504961],[-122.950795,50.3711984],[-122.9325221,50.3711521],[-122.9321048,50.399793],[-122.8874234,50.3999748],[-122.8873385,50.4256108],[-122.6620152,50.4256959],[-122.6623083,50.3994506],[-122.5990316,50.3992413],[-122.5988274,50.3755206],[-122.5724832,50.3753706],[-122.5735621,50.2493891],[-122.5990415,50.2494643],[-122.5991504,50.2265663],[-122.6185016,50.2266359],[-122.6185741,50.2244081],[-122.6490609,50.2245126],[-122.6492181,50.1993528],[-122.7308575,50.1993758],[-122.7311583,50.1244287],[-122.7490352,50.1245109],[-122.7490541,50.0903032],[-122.7687806,50.0903435],[-122.7689801,49.9494546],[-122.999047,49.9494706],[-122.9991199,49.8754553],[-122.9775894,49.8754553],[-122.9778145,49.6995098],[-122.9992362,49.6994781],[-122.9992524,49.6516526],[-123.0221525,49.6516526],[-123.0221162,49.5995096],[-123.0491898,49.5994625],[-123.0491898,49.5940523],[-123.0664647,49.5940405],[-123.0663594,49.5451868],[-123.0699906,49.5451202],[-123.0699008,49.5413153],[-123.0706835,49.5392837],[-123.0708888,49.5379931],[-123.0711454,49.5368773],[-123.0711069,49.5358115],[-123.0713764,49.532822],[-123.0716458,49.5321141],[-123.07171,49.5313896],[-123.0720308,49.5304153],[-123.0739554,49.5303486],[-123.0748023,49.5294992],[-123.0748151,49.5288079],[-123.0743403,49.5280584],[-123.073532,49.5274588],[-123.0733652,49.5270423],[-123.0732882,49.5255932],[-123.0737116,49.5249602],[-123.0736218,49.5244938],[-123.0992583,49.5244854],[-123.0991649,49.4754502],[-123.071052,49.4755252],[-123.071088,49.4663034],[-123.0739204,49.4663054],[-123.07422,49.4505028],[-123.0746319,49.4500858],[-123.074651,49.449329],[-123.0745999,49.449018],[-123.0744619,49.4486927],[-123.0743336,49.4479899],[-123.0742427,49.4477688],[-123.0743061,49.4447473],[-123.0747103,49.4447556],[-123.0746384,49.4377306],[-122.9996506,49.4377363],[-122.9996506,49.4369214],[-122.8606163,49.4415314],[-122.8102616,49.4423972],[-122.8098984,49.3766739],[-122.4036093,49.3766617],[-122.4036341,49.3771944],[-122.264739,49.3773028],[-122.263542,49.2360088],[-122.2155742,49.236139],[-122.0580956,49.235878],[-121.9538274,49.2966525],[-121.9400911,49.3045389],[-121.9235761,49.3142257],[-121.8990871,49.3225436],[-121.8883447,49.3259752],[-121.8552982,49.3363575],[-121.832697,49.3441519],[-121.7671336,49.3654361],[-121.6736683,49.3654589],[-121.6404153,49.3743775],[-121.5961976,49.3860493],[-121.5861178,49.3879193],[-121.5213684,49.3994649],[-121.5117375,49.4038378],[-121.4679302,49.4229024],[-121.4416803,49.4345607],[-121.422429,49.4345788],[-121.3462885,49.3932312],[-121.3480144,49.3412388],[-121.5135035,49.320577],[-121.6031683,49.2771727],[-121.6584065,49.1856125],[-121.679953,49.1654109],[-121.7815793,49.0702559],[-121.8076228,49.0622471],[-121.9393997,49.0636219],[-121.9725524,49.0424179],[-121.9921394,49.0332869],[-122.0035289,49.0273413],[-122.0178564,49.0241067],[-122.1108634,48.9992786],[-122.1493067,48.9995305],[-122.1492705,48.9991498],[-122.1991447,48.9996019],[-122.199181,48.9991974],[-122.234365,48.9994829],[-122.234365,49.000173],[-122.3994722,49.0012385],[-122.4521338,49.0016326],[-122.4521338,49.000883],[-122.4584089,49.0009306],[-122.4584814,48.9993124],[-122.4992458,48.9995022],[-122.4992458,48.9992906],[-122.5492618,48.9995107],[-122.5492564,48.9993206],[-122.6580785,48.9994212],[-122.6581061,48.9954007],[-122.7067604,48.9955344],[-122.7519761,48.9956392],[-122.7922063,48.9957204],[-122.7921907,48.9994331],[-123.0350417,48.9995724],[-123.0350437,49.0000958],[-123.0397091,49.0000536],[-123.0397444,49.0001812],[-123.0485506,49.0001348],[-123.0485329,49.0004712],[-123.0557122,49.000448],[-123.0556324,49.0002284],[-123.0641365,49.0001293],[-123.064158,48.9999421],[-123.074899,48.9996928],[-123.0750717,49.0006218],[-123.0899573,49.0003726],[-123.109229,48.9999421],[-123.1271193,49.0003046],[-123.1359953,48.9998741],[-123.1362716,49.0005765],[-123.153851,48.9998061],[-123.1540533,49.0006806],[-123.1710015,49.0001274],[-123.2000916,48.9996849],[-123.2003446,49.0497785],[-123.2108845,49.0497232],[-123.2112218,49.051989],[-123.2070479,49.0520857],[-123.2078911,49.0607884],[-123.2191688,49.0600978],[-123.218958,49.0612719],[-123.2251766,49.0612719],[-123.2253874,49.0622388],[-123.2297088,49.0620316],[-123.2298142,49.068592],[-123.2331869,49.0687301],[-123.2335031,49.0705945],[-123.249313,49.0702493],[-123.2497346,49.0802606],[-123.2751358,49.0803986],[-123.2751358,49.0870947],[-123.299483,49.0873018],[-123.29944,49.080253],[-123.3254508,49.0803944],[-123.3254353,49.1154662],[-123.2750966,49.1503341],[-123.275181,49.1873267],[-123.2788067,49.1871063],[-123.278891,49.1910741],[-123.3004767,49.1910741],[-123.3004186,49.2622933],[-123.3126185,49.2622416],[-123.3125958,49.2714948],[-123.3154251,49.2714727],[-123.3156628,49.2818906],[-123.3174735,49.2818832],[-123.3174961,49.2918488],[-123.3190353,49.2918488],[-123.3190692,49.298602],[-123.3202349,49.2985651],[-123.3202786,49.3019749],[-123.3222679,49.3019605],[-123.3223943,49.3118263],[-123.3254002,49.3118086],[-123.3253898,49.3201721],[-123.3192695,49.3201957],[-123.3192242,49.3246748],[-123.3179437,49.3246596],[-123.3179861,49.3254065],[-123.3176032,49.3272567]]],"terms_url":"http://imagery.paulnorman.ca/tiles/about.html","terms_text":"Copyright Province of British Columbia, City of Surrey"},{"id":"Budapest_XI_2015","name":"Budapest district XI orthophoto 2015","type":"wms","template":"http://terinfo.ujbuda.hu/mapproxy/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orto2015_20160304&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","polygon":[[[19.047674,47.487889],[19.051565,47.489898],[19.064336,47.479203],[19.066498,47.476323],[19.067662,47.473428],[19.068374,47.470774],[19.06846,47.468765],[19.067223,47.465006],[19.056829,47.452588],[19.054896,47.449065],[19.05176,47.434991],[19.048625,47.428997],[19.043844,47.429684],[19.040234,47.429319],[19.035087,47.438181],[19.032205,47.437794],[19.025205,47.442004],[19.020705,47.445763],[19.019153,47.446579],[19.015447,47.447588],[19.01347,47.443613],[19.012663,47.44271],[19.011776,47.442473],[19.011903,47.441883],[19.009799,47.439443],[19.005705,47.431105],[19.000464,47.430974],[18.995338,47.428211],[18.975454,47.428179],[18.973426,47.429037],[18.973615,47.429982],[18.975482,47.430671],[18.977187,47.434024],[18.978227,47.438171],[18.977329,47.446572],[18.970039,47.449876],[18.968611,47.451422],[18.975678,47.455063],[18.975859,47.455563],[18.976247,47.455842],[18.97658,47.455945],[18.977633,47.455967],[18.980167,47.456049],[18.981619,47.460669],[18.977933,47.468574],[18.968669,47.476431],[18.977448,47.481943],[18.980348,47.481687],[18.985653,47.478204],[18.989075,47.478377],[18.991166,47.47898],[18.991766,47.481021],[18.992875,47.481817],[18.998357,47.482378],[18.999022,47.483001],[19.003999,47.481886],[19.004156,47.483992],[19.010272,47.485348],[19.012373,47.484043],[19.0138,47.483506],[19.016739,47.484651],[19.016303,47.485392],[19.016889,47.485946],[19.018085,47.486054],[19.021081,47.484921],[19.021239,47.486124],[19.023013,47.487414],[19.026373,47.488854],[19.029954,47.489037],[19.031349,47.488554],[19.031889,47.487587],[19.032855,47.48712],[19.03364,47.487018],[19.035138,47.487249],[19.035851,47.487292],[19.03616,47.487507],[19.036651,47.487668],[19.037475,47.487738],[19.038474,47.487368],[19.039179,47.486793],[19.041049,47.486492],[19.04181,47.487373],[19.04387,47.488104],[19.045423,47.488169],[19.046945,47.488104],[19.047674,47.487889]]],"terms_url":"http://terinfo.ujbuda.hu","terms_text":"Budapest XI. kerület önkormányzata","description":"5 cm resolution bald image"},{"id":"Budapest_XI_2017","name":"Budapest district XI orthophoto 2017","type":"wms","template":"http://terinfo.ujbuda.hu/mapproxy/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orto_2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","endDate":"2017-03-01T00:00:00.000Z","startDate":"2017-03-01T00:00:00.000Z","polygon":[[[19.047674,47.487889],[19.051565,47.489898],[19.064336,47.479203],[19.066498,47.476323],[19.067662,47.473428],[19.068374,47.470774],[19.06846,47.468765],[19.067223,47.465006],[19.056829,47.452588],[19.054896,47.449065],[19.05176,47.434991],[19.048625,47.428997],[19.043844,47.429684],[19.040234,47.429319],[19.035087,47.438181],[19.032205,47.437794],[19.025205,47.442004],[19.020705,47.445763],[19.019153,47.446579],[19.015447,47.447588],[19.01347,47.443613],[19.012663,47.44271],[19.011776,47.442473],[19.011903,47.441883],[19.009799,47.439443],[19.005705,47.431105],[19.000464,47.430974],[18.995338,47.428211],[18.975454,47.428179],[18.973426,47.429037],[18.973615,47.429982],[18.975482,47.430671],[18.977187,47.434024],[18.978227,47.438171],[18.977329,47.446572],[18.970039,47.449876],[18.968611,47.451422],[18.975678,47.455063],[18.975859,47.455563],[18.976247,47.455842],[18.97658,47.455945],[18.977633,47.455967],[18.980167,47.456049],[18.981619,47.460669],[18.977933,47.468574],[18.968669,47.476431],[18.977448,47.481943],[18.980348,47.481687],[18.985653,47.478204],[18.989075,47.478377],[18.991166,47.47898],[18.991766,47.481021],[18.992875,47.481817],[18.998357,47.482378],[18.999022,47.483001],[19.003999,47.481886],[19.004156,47.483992],[19.010272,47.485348],[19.012373,47.484043],[19.0138,47.483506],[19.016739,47.484651],[19.016303,47.485392],[19.016889,47.485946],[19.018085,47.486054],[19.021081,47.484921],[19.021239,47.486124],[19.023013,47.487414],[19.026373,47.488854],[19.029954,47.489037],[19.031349,47.488554],[19.031889,47.487587],[19.032855,47.48712],[19.03364,47.487018],[19.035138,47.487249],[19.035851,47.487292],[19.03616,47.487507],[19.036651,47.487668],[19.037475,47.487738],[19.038474,47.487368],[19.039179,47.486793],[19.041049,47.486492],[19.04181,47.487373],[19.04387,47.488104],[19.045423,47.488169],[19.046945,47.488104],[19.047674,47.487889]]],"terms_url":"http://terinfo.ujbuda.hu","terms_text":"Budapest XI. kerület önkormányzata","best":true,"description":"5 cm resolution bald image"},{"id":"Cadastre","name":"Cadastre","type":"tms","template":"http://tms.cadastre.openstreetmap.fr/*/tout/{zoom}/{x}/{y}.png","scaleExtent":[12,22],"polygon":[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.358164,51.32937],[2.548804,51.09759],[2.570482,51.07409],[2.587412,51.01763],[2.598448,51.0051],[2.615575,50.99749],[2.639859,50.95766],[2.642247,50.94578],[2.624519,50.9256],[2.61962,50.91067],[2.623964,50.86071],[2.627811,50.85054],[2.637859,50.83696],[2.651102,50.82906],[2.732666,50.81738],[2.79995,50.73795],[2.816552,50.73092],[2.852648,50.73335],[2.890719,50.7162],[2.904925,50.71536],[2.916096,50.72418],[2.935084,50.75592],[3.007184,50.78377],[3.082183,50.78749],[3.092439,50.79092],[3.114119,50.80566],[3.148768,50.80195],[3.215401,50.73111],[3.221487,50.7267],[3.270507,50.70375],[3.275448,50.67757],[3.265761,50.6604],[3.265877,50.64054],[3.289219,50.60028],[3.292195,50.55037],[3.305598,50.53267],[3.375514,50.50839],[3.389804,50.50884],[3.474798,50.54445],[3.52173,50.53459],[3.532662,50.51873],[3.547788,50.51012],[3.615234,50.50558],[3.673778,50.45642],[3.684152,50.35277],[3.690097,50.34044],[3.702583,50.33482],[3.715758,50.33854],[3.749349,50.36279],[3.841089,50.36558],[3.901887,50.3436],[3.913173,50.34291],[4.026717,50.36904],[4.13761,50.29984],[4.143881,50.29727],[4.214438,50.28167],[4.229037,50.26664],[4.230782,50.25233],[4.170843,50.18579],[4.166015,50.16888],[4.176401,50.1547],[4.211948,50.13602],[4.240742,50.07102],[4.231934,50.05551],[4.181645,50.03436],[4.17177,50.02537],[4.169755,50.01217],[4.176498,50.00065],[4.206331,49.97546],[4.221639,49.97089],[4.308774,49.98145],[4.445423,49.9523],[4.454691,49.95251],[4.658098,50.00609],[4.669358,50.01392],[4.672929,50.02716],[4.66924,50.06972],[4.695168,50.10472],[4.831227,50.17941],[4.881497,50.16436],[4.904786,50.14451],[4.904264,50.12639],[4.880762,50.0815],[4.862772,50.0745],[4.851037,50.06216],[4.843307,50.03884],[4.843307,50.03883],[4.843295,50.03881],[4.826781,49.989],[4.826618,49.97692],[4.833433,49.96696],[4.896542,49.91753],[4.897546,49.89424],[4.879134,49.86942],[4.876249,49.85111],[4.889238,49.81266],[4.897691,49.80204],[4.910979,49.79926],[4.995343,49.81116],[5.01867,49.79272],[5.026862,49.78886],[5.099438,49.77323],[5.134584,49.73462],[5.141201,49.72984],[5.187609,49.70906],[5.196025,49.70732],[5.281572,49.70836],[5.333628,49.67308],[5.343996,49.65049],[5.354398,49.64041],[5.431412,49.60791],[5.482051,49.52815],[5.492943,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.607602,49.53761],[5.640997,49.56095],[5.706759,49.55267],[5.715782,49.55361],[5.775261,49.57414],[5.839902,49.55321],[5.861263,49.52038],[5.875997,49.5114],[5.975162,49.50129],[5.998015,49.47317],[6.016266,49.46597],[6.08635,49.47562],[6.093186,49.47787],[6.173966,49.52187],[6.246435,49.52511],[6.333999,49.48235],[6.344229,49.48037],[6.435145,49.487],[6.5451,49.44384],[6.606389,49.37868],[6.604972,49.33739],[6.616267,49.31869],[6.670133,49.29269],[6.729955,49.22917],[6.743276,49.19086],[6.760259,49.17752],[6.809042,49.17284],[6.824733,49.17826],[6.830928,49.19366],[6.829819,49.21802],[6.851186,49.23136],[6.884528,49.2239],[6.893221,49.22389],[6.937527,49.23369],[7.040549,49.19794],[7.046296,49.17503],[7.054777,49.16313],[7.069081,49.16018],[7.104945,49.16634],[7.143153,49.14159],[7.153499,49.13839],[7.286827,49.13488],[7.29893,49.13856],[7.360948,49.18259],[7.450116,49.19517],[7.50113,49.17672],[7.543788,49.10572],[7.557903,49.09626],[7.629604,49.08527],[7.647217,49.06722],[7.661197,49.06119],[7.754008,49.05963],[7.760731,49.06067],[7.802913,49.07489],[7.855253,49.05329],[7.867297,49.05227],[7.93826,49.06832],[8.080685,49.00688],[8.222498,48.98787],[8.23704,48.97683],[8.235894,48.95817],[8.208878,48.94863],[8.200888,48.94339],[8.158243,48.89753],[8.100873,48.7993],[7.990709,48.74478],[7.985341,48.7409],[7.904217,48.65865],[7.856051,48.63606],[7.848405,48.62977],[7.818424,48.58883],[7.81456,48.57704],[7.814491,48.50968],[7.785465,48.48337],[7.780554,48.47652],[7.745059,48.39484],[7.743573,48.38427],[7.751593,48.32322],[7.71085,48.29841],[7.702411,48.28803],[7.676613,48.21555],[7.596051,48.11698],[7.591652,48.10648],[7.585216,48.04694],[7.591268,48.03035],[7.624373,47.99865],[7.632049,47.97081],[7.575545,47.87436],[7.572802,47.86435],[7.572673,47.83631],[7.545808,47.78793],[7.544185,47.77232],[7.557581,47.72899],[7.535257,47.6989],[7.531364,47.68564],[7.536998,47.67302],[7.600164,47.60822],[7.589675,47.56755],[7.554237,47.55128],[7.54511,47.54283],[7.512557,47.48439],[7.387471,47.42111],[7.326527,47.4273],[7.244354,47.40939],[7.167083,47.4335],[7.152115,47.47612],[7.14279,47.48707],[7.128529,47.48893],[7.080105,47.47718],[7.035575,47.48695],[7.021019,47.48458],[7.012048,47.47287],[7.002995,47.44095],[6.955099,47.40808],[6.947157,47.39698],[6.94818,47.38337],[6.957691,47.37359],[6.971263,47.37218],[7.018004,47.38386],[7.05623,47.37035],[7.070073,47.35005],[7.05958,47.32257],[6.974243,47.27856],[6.963469,47.26233],[6.961339,47.23479],[6.89443,47.19393],[6.889128,47.18922],[6.855453,47.14636],[6.769073,47.10751],[6.760108,47.09953],[6.725613,47.0418],[6.623551,46.9811],[6.481204,46.9445],[6.46892,46.93522],[6.466862,46.91997],[6.475476,46.88771],[6.453496,46.8239],[6.45644,46.80534],[6.467224,46.79104],[6.460984,46.76887],[6.15817,46.59343],[6.148724,46.58069],[6.15152,46.56508],[6.165489,46.54399],[6.158111,46.52456],[6.101739,46.46979],[6.095717,46.45418],[6.097044,46.43317],[6.108289,46.41643],[6.166216,46.38839],[6.178173,46.36922],[6.137482,46.31297],[6.133713,46.30227],[6.130383,46.23737],[6.110298,46.22344],[6.088648,46.23081],[6.077173,46.23123],[6.018573,46.21601],[6.006813,46.20752],[6.003882,46.19332],[6.007866,46.16977],[6.017834,46.15564],[6.03509,46.15456],[6.055639,46.16288],[6.124683,46.15415],[6.137776,46.15702],[6.240258,46.22094],[6.249058,46.23299],[6.247073,46.24777],[6.21148,46.31057],[6.212186,46.32485],[6.239462,46.36705],[6.316478,46.41557],[6.410826,46.42495],[6.417483,46.42682],[6.504978,46.46871],[6.630473,46.47435],[6.746646,46.45695],[6.822442,46.42925],[6.818324,46.38181],[6.804843,46.36179],[6.801885,46.34639],[6.810949,46.33359],[6.864911,46.30038],[6.875036,46.28007],[6.860917,46.2439],[6.826978,46.21188],[6.820746,46.19862],[6.818627,46.16592],[6.822593,46.15261],[6.834266,46.14509],[6.903819,46.12971],[6.904911,46.09595],[6.909323,46.08406],[6.920006,46.07721],[6.948976,46.0699],[7.015561,46.00883],[7.051911,45.93066],[7.045335,45.92217],[7.044967,45.92064],[7.043936,45.92036],[6.995822,45.85822],[6.940965,45.83551],[6.843757,45.82387],[6.831016,45.81711],[6.826141,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.841405,45.71373],[6.907294,45.69124],[6.92419,45.66935],[6.942468,45.66172],[6.971313,45.66528],[7.00597,45.64945],[7.011511,45.63652],[6.997797,45.60877],[6.996431,45.59465],[7.015803,45.52354],[7.027743,45.5102],[7.107198,45.47877],[7.122797,45.44924],[7.13304,45.44001],[7.185604,45.41894],[7.19515,45.40409],[7.170749,45.35069],[7.142319,45.32298],[7.136488,45.30576],[7.14458,45.25048],[7.084166,45.20279],[6.992792,45.19823],[6.981064,45.19368],[6.900091,45.12689],[6.85843,45.11699],[6.782826,45.14228],[6.770557,45.14242],[6.677507,45.11356],[6.665295,45.10289],[6.665008,45.08667],[6.68237,45.04558],[6.696016,45.03395],[6.757442,45.01884],[6.783751,44.9146],[6.794195,44.90161],[6.866981,44.86519],[6.879801,44.86346],[6.936325,44.87461],[7.017954,44.84402],[7.034535,44.82282],[7.037114,44.75009],[7.049604,44.73226],[7.072236,44.72311],[7.086508,44.6968],[7.086656,44.68085],[7.07671,44.67134],[6.990071,44.67203],[6.974128,44.66431],[6.970564,44.64696],[6.978189,44.61784],[6.94659,44.57124],[6.882347,44.53479],[6.872327,44.5195],[6.878925,44.50245],[6.958945,44.43129],[6.958723,44.42908],[6.921668,44.41436],[6.912225,44.40659],[6.909075,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.999091,44.29414],[7.011806,44.256],[7.019835,44.24558],[7.032595,44.2424],[7.073117,44.2461],[7.165097,44.22112],[7.245331,44.18544],[7.260526,44.16682],[7.275371,44.15947],[7.338779,44.1574],[7.362775,44.13834],[7.377763,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.564785,44.15817],[7.605476,44.1634],[7.616198,44.16827],[7.639891,44.18928],[7.686079,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.694448,44.12276],[7.727862,44.08615],[7.724032,44.05704],[7.686028,44.02371],[7.680769,44.0164],[7.660161,43.9672],[7.596244,43.94466],[7.584187,43.93287],[7.568576,43.89159],[7.527096,43.87434],[7.516489,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.369681,41.35052],[9.273114,41.29196],[8.941857,41.27688],[5.8,41.64],[3.173576,42.41768],[3.160814,42.42757],[3.094399,42.41457],[3.034016,42.45331],[3.022142,42.45645],[2.878221,42.4487],[2.870188,42.44653],[2.784238,42.40256],[2.741304,42.41128],[2.729276,42.40998],[2.693308,42.39417],[2.683779,42.3854],[2.681621,42.37263],[2.685852,42.34679],[2.66719,42.33008],[2.581057,42.34418],[2.567769,42.34173],[2.533803,42.32197],[2.477948,42.32986],[2.419327,42.37658],[2.41222,42.38021],[2.267193,42.42055],[2.259731,42.42117],[2.206944,42.41558],[2.206525,42.41526],[2.205257,42.41541],[2.160278,42.41065],[2.148808,42.40545],[2.093931,42.35474],[2.008614,42.33818],[1.964998,42.36473],[1.930762,42.42442],[1.920889,42.43302],[1.884665,42.44761],[1.884588,42.44762],[1.884444,42.4477],[1.827736,42.47056],[1.725668,42.48452],[1.715606,42.50125],[1.727195,42.56103],[1.724794,42.57499],[1.710109,42.59992],[1.69377,42.60975],[1.602827,42.61382],[1.560687,42.6392],[1.546365,42.64166],[1.504443,42.6331],[1.492096,42.62502],[1.472384,42.59703],[1.437922,42.59264],[1.419356,42.60643],[1.38032,42.67415],[1.373353,42.68127],[1.333134,42.70563],[1.323642,42.7085],[1.232212,42.71248],[1.165543,42.69928],[1.085465,42.76635],[1.075637,42.77079],[0.9593748,42.78852],[0.9507323,42.78794],[0.9226515,42.7797],[0.8460624,42.8157],[0.7151135,42.8464],[0.7001699,42.84402],[0.6911674,42.83186],[0.6740937,42.76479],[0.6747382,42.75286],[0.6919171,42.70684],[0.6689955,42.67901],[0.4302428,42.67863],[0.3715037,42.70308],[0.3595376,42.70415],[0.3491168,42.69817],[0.3256688,42.67274],[0.2957095,42.66388],[0.2459353,42.70175],[0.2397249,42.70494],[0.189669,42.72039],[0.1791886,42.72075],[-0.01993262,42.67389],[-0.06725834,42.6848],[-0.1694885,42.77157],[-0.2998662,42.82697],[-0.3168349,42.82635],[-0.3920752,42.78766],[-0.4435404,42.78453],[-0.488418,42.80255],[-0.508683,42.79935],[-0.5449894,42.76906],[-0.5672068,42.76937],[-0.6744552,42.86392],[-0.6809365,42.86775],[-0.7337233,42.88666],[-0.747598,42.93879],[-0.757105,42.95107],[-0.7725328,42.95284],[-0.8211401,42.93865],[-0.9450847,42.94192],[-1.023131,42.98206],[-1.108517,43.00409],[-1.115597,43.00461],[-1.147753,43.00124],[-1.158452,43.01452],[-1.167362,43.02083],[-1.216216,43.0381],[-1.226121,43.03898],[-1.262362,43.03303],[-1.306428,43.05531],[-1.319918,43.05696],[-1.331346,43.0496],[-1.354196,43.0197],[-1.438684,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.476407,43.10248],[-1.434786,43.13087],[-1.427318,43.1404],[-1.394112,43.22935],[-1.395313,43.24596],[-1.408677,43.25591],[-1.526287,43.28099],[-1.546257,43.2737],[-1.571485,43.2412],[-1.610526,43.24223],[-1.650003,43.29323],[-1.669527,43.30065],[-1.733594,43.28856],[-1.756061,43.31966],[-1.762973,43.32565],[-1.791557,43.34067],[-1.800991,43.37017],[-1.785091,43.39037],[-1.783502,43.39686],[-2.7,43.9]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_Cadastre_Fran%C3%A7ais/Conditions_d%27utilisation","terms_text":"cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2015","description":"French land registry","icon":"https://svn.openstreetmap.org/applications/editors/josm/plugins/cadastre-fr/images/cadastre_small.png"},{"id":"lu.geoportail.opendata.cadastre","name":"Cadastre geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/cadastre/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/plan-cadastral-numerise-pcn-webservices-wms-et-wmts","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"cajueiro_al","name":"Cajueiro AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Cajueiro&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.10752645677,-9.43884254591],[-36.10751572793,-9.43420690643],[-36.10766593164,-9.42959237236],[-36.10779467767,-9.42361243708],[-36.10768738931,-9.41927295015],[-36.10780540651,-9.41390672873],[-36.10803071206,-9.41094309933],[-36.10809508508,-9.40965179571],[-36.10810581392,-9.40747138685],[-36.1081594581,-9.40693157477],[-36.1081916446,-9.4041795785],[-36.10810581392,-9.40175568673],[-36.10817018693,-9.40001978874],[-36.10826674646,-9.39952230418],[-36.10826674646,-9.39646328763],[-36.10833111947,-9.39474853296],[-36.10832039064,-9.39272680513],[-36.10836330598,-9.39039809877],[-36.10840622133,-9.38447041196],[-36.10847059434,-9.38165472521],[-36.10845986551,-9.37767461773],[-36.10835257714,-9.37572688892],[-36.10844913667,-9.37431901292],[-36.10849205201,-9.37233950842],[-36.10844913667,-9.36970368011],[-36.10867444223,-9.36278056588],[-36.10863152688,-9.36102330087],[-36.10872808641,-9.35927661299],[-36.10873881524,-9.35736053922],[-36.10854569619,-9.35478811418],[-36.1086958999,-9.35230035993],[-36.10870662873,-9.34996079609],[-36.10872808641,-9.34893392374],[-36.11268702691,-9.34908213231],[-36.11725751107,-9.3491244776],[-36.12137738412,-9.34905037333],[-36.12806144899,-9.34910330495],[-36.1321705932,-9.34906095966],[-36.13694492524,-9.34914565024],[-36.14024940675,-9.34913506392],[-36.14134374803,-9.34931503136],[-36.14458385652,-9.34915623657],[-36.14683691209,-9.34913506392],[-36.14842477983,-9.34905037333],[-36.1527592296,-9.34907154598],[-36.15400377458,-9.34921975449],[-36.15626755899,-9.34923034081],[-36.160258686,-9.34920916817],[-36.16085950082,-9.34929385872],[-36.16599861329,-9.34932561767],[-36.16937819665,-9.34942089451],[-36.17175999826,-9.34935737662],[-36.17627683824,-9.34945265345],[-36.18027869409,-9.34936796294],[-36.1822742576,-9.34946323976],[-36.18826094812,-9.34937854925],[-36.19038525766,-9.34945265345],[-36.19353953546,-9.34946323976],[-36.19552437013,-9.3494103082],[-36.19918290323,-9.34950558501],[-36.19925800508,-9.35146404706],[-36.19912925904,-9.35234270483],[-36.19911853021,-9.35352836],[-36.19919363206,-9.35646072192],[-36.19921508973,-9.35770987942],[-36.19930092042,-9.35832387044],[-36.19933310693,-9.3611185745],[-36.19921508973,-9.36177490326],[-36.19918290323,-9.36257943359],[-36.19931164926,-9.36399794306],[-36.19925800508,-9.36499301341],[-36.19921508973,-9.36562816321],[-36.19927946275,-9.36660205731],[-36.19917217439,-9.36795703586],[-36.19917217439,-9.36867686607],[-36.19921508973,-9.36911088062],[-36.19911853021,-9.37016945042],[-36.19887176698,-9.37149265813],[-36.19886103814,-9.37263590554],[-36.19902197068,-9.37321811341],[-36.19915071672,-9.37503882993],[-36.19910780137,-9.37688070785],[-36.19895759767,-9.37747349407],[-36.19898978418,-9.37914599257],[-36.19917217439,-9.38053267826],[-36.19919363206,-9.38124189704],[-36.19925800508,-9.38174999318],[-36.19927946275,-9.38302023029],[-36.19912925904,-9.38374002925],[-36.19907561486,-9.38592058756],[-36.19878593629,-9.38786825912],[-36.19880739396,-9.3893501758],[-36.19902197068,-9.39091676655],[-36.19904342836,-9.39199643982],[-36.19898978418,-9.39347833885],[-36.19879666513,-9.39450507945],[-36.19866791909,-9.39704545549],[-36.19845334237,-9.39949054982],[-36.19863573259,-9.40313169724],[-36.19865719026,-9.40476173338],[-36.19864646142,-9.40836048727],[-36.19875374978,-9.40901672659],[-36.19857135957,-9.41058322831],[-36.19859281724,-9.4127318644],[-36.19874302095,-9.41445711425],[-36.19867864793,-9.41711377049],[-36.19860354608,-9.41901892972],[-36.19846407121,-9.41965398046],[-36.19849625772,-9.42235293308],[-36.19871083444,-9.42428981548],[-36.19858208841,-9.42696756397],[-36.19839969819,-9.42894675602],[-36.19857135957,-9.43412223664],[-36.19871083444,-9.43470434105],[-36.19864646142,-9.43595321629],[-36.19857135957,-9.43626014256],[-36.19859281724,-9.43667290505],[-36.19876447862,-9.43748784493],[-36.19889322465,-9.43905421746],[-36.1988181228,-9.43995382008],[-36.1784977073,-9.43977389974],[-36.17717806047,-9.43967864776],[-36.17265049165,-9.43966806421],[-36.17098752206,-9.43971039843],[-36.16396013444,-9.43962572998],[-36.15386429971,-9.43949872728],[-36.13983098214,-9.43929763957],[-36.12874809449,-9.43912830247],[-36.11497226899,-9.43891663097],[-36.10752645677,-9.43884254591]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"osm-cambodia_laos_thailand_vietnam-bilingual","name":"Cambodia, Laos, Thailand, Vietnam, Malaysia, Myanmar bilingual","type":"tms","template":"http://{switch:a,b,c,d}.tile.osm-tools.org/osm/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[92.1023798,20.8135629],[93.5690546,24.0975527],[94.1733026,23.9269484],[95.1950312,26.707274],[96.7550898,27.5286657],[97.5845575,28.5805966],[98.738122,27.514051],[98.7436151,25.8799151],[97.6779413,24.7577376],[97.9635858,24.042382],[98.8205194,24.1627239],[99.5236444,22.9593356],[100.3695917,21.5051376],[101.7923212,22.4830518],[105.3628778,23.3331079],[106.8185663,22.8480137],[108.1973505,21.3619661],[107.4389505,18.8539792],[117.1453714,7.4656173],[119.6172953,5.2875389],[118.1231546,4.0502277],[117.2552347,4.3624942],[115.8654642,4.3460623],[115.5084085,3.0249771],[114.552598,1.5100953],[113.5418558,1.2574836],[112.9650736,1.5704982],[112.2454691,1.5100953],[111.67418,1.0158321],[110.4546976,0.9004918],[109.4988871,1.9218969],[103.2256937,1.1256762],[100.4626322,3.2388904],[97.6721048,8.0588831],[93.892808,15.9398659],[92.1023798,20.8135629]]],"terms_url":"http://www.osm-tools.org","terms_text":"© osm-tools.org & OpenStreetMap contributors, CC-BY-SA"},{"id":"campo_alegre_al","name":"Campo Alegre AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Campo%20Alegre&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.30642834848,-9.82332496055],[-36.30602585634,-9.78597356977],[-36.30602065271,-9.78263262201],[-36.30608502572,-9.7816810657],[-36.30604211038,-9.78081408979],[-36.30590263551,-9.77530556809],[-36.30585972017,-9.76496494896],[-36.3054520244,-9.73335957439],[-36.39633599466,-9.73248189831],[-36.39627162164,-9.73744126654],[-36.39635745233,-9.74336280376],[-36.39644328302,-9.7553535947],[-36.39660421556,-9.75855741026],[-36.3966471309,-9.75979451892],[-36.39655057138,-9.76243789809],[-36.39661494439,-9.76489093519],[-36.39658275789,-9.76647694093],[-36.39661494439,-9.76683643452],[-36.39659348672,-9.76959606352],[-36.39670077508,-9.77896382877],[-36.39675441926,-9.78464145418],[-36.39684024995,-9.7906678778],[-36.39692608064,-9.79681048826],[-36.397033369,-9.80298470156],[-36.39719430154,-9.82033320249],[-36.39721575921,-9.82234180629],[-36.39392200654,-9.82233123473],[-36.35375324434,-9.8227858118],[-36.34821716493,-9.82285981267],[-36.31697479432,-9.82316638748],[-36.3119107837,-9.82324038826],[-36.30878869241,-9.82327210287],[-36.30642834848,-9.82332496055]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"canaan_drone_red_cross_201712","name":"Canaan - American Red Cross, Dec-2017","type":"tms","template":"https://tiles.openaerialmap.org/5ac65a9f91b5310010e0d489/0/5ac65a9f91b5310010e0d48a/{zoom}/{x}/{y}.png","endDate":"2017-12-20T00:00:00.000Z","startDate":"2017-12-11T00:00:00.000Z","polygon":[[[-72.26733684539795,18.63561150166432],[-72.26360321044922,18.637299102898723],[-72.26115703582762,18.64140620693752],[-72.25982666015625,18.645879177561056],[-72.25811004638672,18.64742435821355],[-72.24502086639404,18.64795296941909],[-72.23433494567871,18.648074956386637],[-72.22733974456787,18.648196943266544],[-72.2195291519165,18.654377497115863],[-72.21609592437743,18.654458818692795],[-72.21583843231201,18.662224849717205],[-72.21725463867188,18.66738845367857],[-72.21888542175293,18.67019381039462],[-72.22309112548828,18.669583954186887],[-72.22343444824219,18.673121089658242],[-72.225022315979,18.67320240224967],[-72.22545146942139,18.676088973977365],[-72.2328758239746,18.675967007152448],[-72.23339080810547,18.678772221921143],[-72.23673820495605,18.67856894704893],[-72.23854064941406,18.679747937913884],[-72.23999977111816,18.68129281008022],[-72.2446346282959,18.682065240881936],[-72.24682331085205,18.681699353046348],[-72.24605083465576,18.676983394678427],[-72.25094318389893,18.676983394678427],[-72.25510597229004,18.679016151445964],[-72.25961208343506,18.678975496549533],[-72.26081371307373,18.677430603259076],[-72.27038383483887,18.677105360771996],[-72.27900981903076,18.67682077308383],[-72.28373050689697,18.678934841643372],[-72.28613376617432,18.681536735976945],[-72.2966480255127,18.681780661522538],[-72.30184078216553,18.68568342249539],[-72.30119705200195,18.688244560524797],[-72.30802059173584,18.693244766020335],[-72.30947971343994,18.693082160033953],[-72.31698989868164,18.69682205821522],[-72.32806205749512,18.705277175644323],[-72.33840465545654,18.69901717736881],[-72.34012126922607,18.696659455664193],[-72.33960628509521,18.694261049897648],[-72.33376979827881,18.683569438127616],[-72.33134508132935,18.681922951261985],[-72.32550859451294,18.680926920576777],[-72.32027292251587,18.677410275621916],[-72.31626033782959,18.67476766203316],[-72.3116683959961,18.672003037571464],[-72.30799913406372,18.669949868174736],[-72.30533838272095,18.669258696645926],[-72.3006820678711,18.664989633593734],[-72.29795694351196,18.664786342196592],[-72.2960901260376,18.661289692031172],[-72.29315042495728,18.659988594501545],[-72.2951889038086,18.654967077665706],[-72.28413820266724,18.649620117055733],[-72.2780442237854,18.64522857097433],[-72.27486848831177,18.642117823780783],[-72.27351665496826,18.640572594843363],[-72.27059841156006,18.639007019609803],[-72.26733684539795,18.63561150166432]]],"terms_url":"http://americanredcross.github.io/","terms_text":"American Red Cross","description":"Drone imagery collected December 2017 for Canaan, Haiti by American Red Cross in coordination with the Haitian Red Cross."},{"id":"Geneve-SITG-2011","name":"Canton de Génève 5cm (SITG 2011)","type":"wms","template":"https://ge.ch/ags2/services/Orthophotos_2011/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","polygon":[[[6.182206,46.2261804],[6.1834782,46.227722],[6.1892864,46.2332924],[6.1919574,46.2385834],[6.1925342,46.2423928],[6.190614,46.2439668],[6.1904559,46.2465408],[6.1925579,46.2504535],[6.1918625,46.2526174],[6.1932454,46.2559996],[6.1928661,46.257759],[6.1954344,46.2618129],[6.1978999,46.2645391],[6.2004523,46.2656918],[6.2091685,46.2663364],[6.2171577,46.2738801],[6.2204608,46.2789542],[6.2275017,46.2864907],[6.2343293,46.2895488],[6.2364313,46.2932018],[6.240738,46.297739],[6.2395843,46.3039573],[6.2412991,46.3052948],[6.2432035,46.3045305],[6.2451317,46.3049236],[6.2462696,46.3037171],[6.2498335,46.3026962],[6.2503156,46.3014024],[6.2493752,46.3001795],[6.2514614,46.2964723],[6.2506316,46.2945122],[6.2522279,46.2938242],[6.2542904,46.2906955],[6.2523069,46.2873481],[6.2503156,46.2867966],[6.2497387,46.2857426],[6.2463644,46.2843337],[6.2432272,46.284279],[6.2398451,46.2809804],[6.2393393,46.2762725],[6.2437172,46.2735579],[6.2511281,46.2625819],[6.2624442,46.2553044],[6.2630131,46.2545722],[6.2620016,46.2521461],[6.2673594,46.2488674],[6.2773162,46.2521133],[6.277253,46.2529767],[6.2831955,46.2550312],[6.2823104,46.2556759],[6.2827846,46.2567687],[6.2886797,46.2604621],[6.2915403,46.2643957],[6.2945748,46.2655648],[6.2972931,46.2648874],[6.2978305,46.2630955],[6.2954124,46.2582658],[6.2966293,46.2566048],[6.302398,46.2557961],[6.3067758,46.2575336],[6.3109956,46.2566594],[6.3076767,46.2518401],[6.3104583,46.2505724],[6.3101106,46.2474903],[6.3115646,46.2438616],[6.2960604,46.225012],[6.2901179,46.2224096],[6.2777271,46.2149299],[6.2670749,46.2127645],[6.2566755,46.2092647],[6.2508911,46.2057429],[6.2507646,46.2045616],[6.2495003,46.2040365],[6.2464342,46.2045397],[6.2425147,46.2036427],[6.23594,46.2054147],[6.2334745,46.2050866],[6.2288912,46.2017176],[6.2232332,46.2000549],[6.2235492,46.1988078],[6.2225694,46.1979108],[6.2193452,46.1976483],[6.2168797,46.1944757],[6.2125941,46.1918913],[6.2072745,46.191373],[6.2058776,46.1890752],[6.2034006,46.1880582],[6.2028159,46.1864225],[6.2003504,46.1850438],[6.1990544,46.1829648],[6.1961543,46.1828772],[6.1885049,46.179671],[6.1875092,46.1753867],[6.1898176,46.1658394],[6.1748034,46.1569398],[6.1687976,46.1562391],[6.1582876,46.1519474],[6.1543365,46.151411],[6.1495161,46.1493307],[6.1480463,46.1474803],[6.148315,46.1461882],[6.1456124,46.1441734],[6.1424357,46.144929],[6.1376785,46.1421695],[6.1369199,46.1407131],[6.1307404,46.1394647],[6.1259832,46.1396618],[6.1201355,46.1418082],[6.1076974,46.1420272],[6.1053741,46.1431332],[6.097456,46.1432536],[6.0915135,46.1509511],[6.0747608,46.1479511],[6.0718843,46.1490789],[6.0529505,46.1504584],[6.0497264,46.1468014],[6.0486201,46.1415344],[6.045712,46.1391581],[6.0428672,46.140056],[6.040133,46.138939],[6.0378256,46.1371649],[6.0364664,46.1338137],[6.0353127,46.1334413],[6.0300024,46.1381615],[6.0207883,46.1402422],[6.016932,46.1419067],[6.0128228,46.1411949],[6.0081447,46.1417096],[6.0036404,46.1408773],[5.9933833,46.1431989],[5.9872827,46.1417096],[5.9846434,46.1423228],[5.9830945,46.1371211],[5.9760299,46.131897],[5.9731377,46.1308127],[5.9703719,46.1310756],[5.9653619,46.1288192],[5.961632,46.1297612],[5.9573016,46.1276692],[5.9557527,46.1283592],[5.9548361,46.132138],[5.9588978,46.1355331],[5.964461,46.1373839],[5.9651722,46.1384462],[5.9631018,46.1424104],[5.9638288,46.1465605],[5.971573,46.1558012],[5.9788431,46.1672076],[5.9802181,46.1735447],[5.983221,46.1750659],[5.9853704,46.1747814],[5.9875356,46.1730632],[5.9902856,46.1795528],[5.9936045,46.1820258],[5.989764,46.186917],[5.9828733,46.188219],[5.9806765,46.1903963],[5.9628173,46.196304],[5.9622484,46.1971902],[5.9646507,46.2002203],[5.9716363,46.2030206],[5.9698504,46.2038301],[5.967938,46.2067505],[5.9722684,46.2141766],[5.9736434,46.2156311],[5.9789696,46.2182119],[6.0085714,46.2444351],[6.0142164,46.2485522],[6.0659287,46.2834493],[6.1151124,46.315115],[6.125733,46.3184334],[6.1297158,46.3156826],[6.129779,46.3140671],[6.1360376,46.308958],[6.1417904,46.3055517],[6.1539283,46.3001361],[6.1715661,46.2950695],[6.17125,46.2922302],[6.1727673,46.286289],[6.1701753,46.2853279],[6.168342,46.28109],[6.1720087,46.2755409],[6.1721983,46.2730065],[6.1691006,46.26785],[6.167457,46.2621684],[6.1653076,46.2619499],[6.1645489,46.2627366],[6.1594283,46.2589777],[6.1553191,46.2521587],[6.1538651,46.252115],[6.1527272,46.2503664],[6.1531065,46.2476997],[6.1549398,46.2459072],[6.152095,46.2387805],[6.1521713,46.2327333],[6.150338,46.2265889],[6.154542,46.2219091],[6.1548264,46.2204438],[6.1529615,46.217382],[6.1540046,46.2135544],[6.1571023,46.2109734],[6.1626339,46.2104265],[6.1638666,46.2097047],[6.1691137,46.2119139],[6.1686712,46.2131825],[6.1707258,46.2147792],[6.1747085,46.2160259],[6.182206,46.2261804]],[[6.1883445,46.3490083],[6.1869587,46.3486226],[6.1819521,46.35015],[6.1796053,46.3520013],[6.1714248,46.3544387],[6.1702178,46.3591128],[6.1741516,46.3603622],[6.1727212,46.3618892],[6.1734811,46.3628764],[6.1799852,46.3654676],[6.1876963,46.3613185],[6.1944686,46.3617504],[6.1990506,46.3608558],[6.2011339,46.3563388],[6.202582,46.3556728],[6.2079112,46.3558251],[6.213743,46.3537853],[6.2124652,46.3508462],[6.2084644,46.3466497],[6.2085985,46.3399069],[6.2065869,46.3379163],[6.2049329,46.3386107],[6.2034801,46.3379318],[6.1918129,46.3433324],[6.1931763,46.3478686],[6.1907624,46.3476988],[6.1883445,46.3490083]],[[6.181818,46.3428059],[6.180164,46.3431762],[6.1752021,46.3453209],[6.173414,46.3439785],[6.1732352,46.3405377],[6.1714024,46.3395192],[6.1658818,46.3425436],[6.1656359,46.3433922],[6.1709107,46.3505357],[6.173414,46.3502888],[6.1745763,46.3519241],[6.1758726,46.3520476],[6.1857942,46.345934],[6.181818,46.3428059]]],"terms_url":"http://ge.ch/sitg/donnees/conditions-d-utilisation/open-data","terms_text":"Orthophotos du SITG 2011"},{"id":"Canvec","name":"Canvec - English","type":"wms","template":"https://maps.geogratis.gc.ca/wms/canvec_en?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=canvec&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.1923701,48.6550408],[-122.9958159,48.5106543],[-122.4868966,48.4098005],[-122.3291531,48.4527983],[-122.229391,48.5064943],[-122.1790836,48.5296509],[-122.1841996,48.566905],[-121.7783298,48.5759321],[-121.6657777,48.4279093],[-121.3306793,48.3571354],[-121.0271296,48.3497692],[-121.0305403,48.4940645],[-120.6979999,48.5149675],[-120.510413,48.8718034],[-119.9757904,48.8813368],[-119.9544737,48.5149675],[-119.907577,48.2942056],[-119.7319275,48.1550316],[-119.7438648,48.0741943],[-119.622786,48.1095051],[-119.602322,48.1470674],[-119.2527283,48.1624259],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{"id":"Canvec_French","name":"Canvec - French","type":"wms","template":"https://maps.geogratis.gc.ca/wms/canvec_fr?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=canvec&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.1923701,48.6550408],[-122.9958159,48.5106543],[-122.4868966,48.4098005],[-122.3291531,48.4527983],[-122.229391,48.5064943],[-122.1790836,48.5296509],[-122.1841996,48.566905],[-121.7783298,48.5759321],[-121.6657777,48.4279093],[-121.3306793,48.3571354],[-121.0271296,48.3497692],[-121.0305403,48.4940645],[-120.6979999,48.5149675],[-120.510413,48.8718034],[-119.9757904,48.8813368],[-119.9544737,48.5149675],[-119.907577,48.2942056],[-119.7319275,48.1550316],[-119.7438648,48.0741943],[-119.622786,48.1095051],[-119.602322,48.1470674],[-119.2527283,48.1624259],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{"id":"capela_al","name":"Capela AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Capela&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.03320780938,-9.4574082918],[-36.03321853822,-9.45581025359],[-36.03335801309,-9.45482602768],[-36.03340092843,-9.45291048318],[-36.0332721824,-9.45140767284],[-36.03335801309,-9.44286692894],[-36.03349748796,-9.43821017639],[-36.03352967447,-9.42881181147],[-36.03362623399,-9.42027050777],[-36.03389445489,-9.41091399212],[-36.03389445489,-9.40031880838],[-36.03401247209,-9.38880239663],[-36.03413048928,-9.38527753599],[-36.03428069299,-9.38265239127],[-36.03417340463,-9.37849234301],[-36.03444162553,-9.3668799342],[-36.05245534127,-9.36710223556],[-36.05790558999,-9.36711282133],[-36.0715955848,-9.36727160792],[-36.08621898835,-9.367313951],[-36.10299888795,-9.36750449479],[-36.11651722139,-9.36754683784],[-36.12515393441,-9.36768445271],[-36.12521830743,-9.37473449571],[-36.12520757859,-9.37721150385],[-36.12511101907,-9.38037654408],[-36.12514320558,-9.38528812121],[-36.12504664605,-9.39026313917],[-36.12503591722,-9.39477234906],[-36.12505737489,-9.40171599404],[-36.12499300187,-9.40382234661],[-36.12479988282,-9.40678603705],[-36.12462822145,-9.41123152509],[-36.12473550981,-9.41360242867],[-36.12456384843,-9.41630142857],[-36.1245853061,-9.42460998216],[-36.12466040796,-9.42690670628],[-36.12464967912,-9.42924575062],[-36.12457457727,-9.42970085695],[-36.12463895028,-9.4353843436],[-36.12438145822,-9.44108890357],[-36.12445656007,-9.44387235589],[-36.12452093309,-9.44578795069],[-36.12438145822,-9.4473648688],[-36.12447801774,-9.44856078174],[-36.12447801774,-9.45095259517],[-36.12436000055,-9.45391588079],[-36.12433854287,-9.45790569291],[-36.11757937616,-9.45783161194],[-36.10889974778,-9.45777869695],[-36.10418978875,-9.45779986294],[-36.10116425699,-9.45772578195],[-36.09529558366,-9.45772578195],[-36.08460966295,-9.45767286695],[-36.07361260598,-9.45756703691],[-36.05726185983,-9.4574082918],[-36.04816380685,-9.45747178985],[-36.04176942056,-9.45738712578],[-36.03767100518,-9.45738712578],[-36.03320780938,-9.4574082918]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"Cartoriviera-2012","name":"Cartoriviera - Orthophoto 2012","type":"tms","template":"http://osmdata.asitvd.ch/tiles/cartoriviera2012/{zoom}/{x}/{y}.png","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","scaleExtent":[14,20],"polygon":[[[7.0223485,46.428558],[7.0224002,46.4204487],[7.0217584,46.4195527],[7.0222539,46.4195415],[7.0216122,46.4174862],[7.0224164,46.4174022],[7.0224245,46.4168141],[7.0211329,46.4144283],[7.0216447,46.4125856],[7.021604,46.4118799],[7.0191751,46.4105524],[7.0189557,46.4100427],[7.0175666,46.4082615],[7.0142603,46.406962],[7.0094754,46.4069452],[7.0095161,46.4045084],[7.0036833,46.4015338],[6.9705244,46.4013942],[6.9705607,46.3935365],[6.9650691,46.3833298],[6.8937941,46.382997],[6.8932656,46.3920944],[6.8968041,46.4000018],[6.8967811,46.4009684],[6.8939549,46.4010001],[6.8976772,46.4088811],[6.8924614,46.4138556],[6.8923695,46.4180692],[6.894897,46.4193048],[6.892852,46.419479],[6.8939549,46.423122],[6.8922546,46.4233913],[6.8921857,46.428016],[6.8874294,46.4280001],[6.8765153,46.4316268],[6.8662445,46.4363299],[6.8400276,46.4459092],[6.8350416,46.4493447],[6.8269996,46.4520359],[6.8269536,46.4537931],[6.819532,46.4565474],[6.8036089,46.4599347],[6.7877547,46.4625304],[6.7869737,46.5245979],[6.8260407,46.5247994],[6.8260866,46.5266175],[6.8390687,46.5266965],[6.8388849,46.5500567],[6.9065755,46.5504201],[6.9119981,46.5430086],[6.9108263,46.5398319],[6.9097923,46.5351219],[6.9093098,46.5351693],[6.9086664,46.5337309],[6.9119521,46.5329722],[6.9133537,46.5360386],[6.9267954,46.5336361],[6.9272319,46.5349006],[6.9371351,46.5331144],[6.9369053,46.5327035],[6.9402829,46.5319605],[6.9416386,46.5347741],[6.9430861,46.5345528],[6.9434538,46.5352799],[6.9564129,46.530032],[6.956321,46.5273289],[6.9511051,46.5272498],[6.9530122,46.5261116],[6.9434078,46.5260484],[6.9434308,46.5254634],[7.0162912,46.5256848],[7.021576,46.5221118],[7.0219571,46.4735486],[7.0709902,46.4736751],[7.0740232,46.4719028],[7.0738322,46.4325972],[7.0594696,46.4323285],[7.0527757,46.4287898],[7.0223485,46.428558]]],"terms_url":"https://map.cartoriviera.ch/?baselayer_ref=orthos_2012_mobile&baselayer_opacity=100","terms_text":"Cartoriviera"},{"id":"Catastro-Spain","name":"Catastro Spain","type":"wms","template":"http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Catastro&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-17.8846298,28.4460601],[-17.8939535,28.5225529],[-18.0212548,28.7481927],[-18.0224091,28.8038375],[-17.9424017,28.8726124],[-17.8911792,28.8737099],[-17.8903302,28.8515102],[-17.7675902,28.8537764],[-17.7669837,28.8312183],[-17.7412714,28.8319975],[-17.7394926,28.7642235],[-17.7139824,28.7649677],[-17.7129312,28.7303731],[-17.7574427,28.6931782],[-17.7570788,28.6741254],[-17.7457913,28.6743524],[-17.7457266,28.6165627],[-17.7519687,28.5833675],[-17.7622536,28.5591958],[-17.7833086,28.541667],[-17.7831575,28.4936643],[-17.808611,28.4925024],[-17.8060072,28.4468974],[-17.8846298,28.4460601]],[[-18.1661033,27.7851643],[-18.163494,27.6949247],[-18.0889827,27.6963366],[-18.0873398,27.6738724],[-18.0364092,27.6753701],[-18.0350079,27.6302571],[-17.9589987,27.6323976],[-17.8603269,27.7926025],[-17.8630328,27.8368793],[-17.8884015,27.8364947],[-17.8891263,27.8590536],[-17.9906491,27.8567467],[-18.0386803,27.7655831],[-18.1146412,27.7637873],[-18.1154627,27.7863613],[-18.1661033,27.7851643]],[[-17.36038,28.0639801],[-17.3629657,28.1757247],[-17.3375583,28.1763688],[-17.3384577,28.2213012],[-17.1857883,28.2238767],[-17.0820788,28.1351849],[-17.0808422,28.0679977],[-17.1315446,28.0668073],[-17.1563337,28.0214628],[-17.2321063,28.0203711],[-17.2319938,27.9980388],[-17.2576823,27.9978403],[-17.257851,28.0199741],[-17.3086658,28.0192298],[-17.36038,28.0639801]],[[-16.9278171,28.3275779],[-16.9286591,28.3721879],[-16.8776666,28.3729288],[-16.8780707,28.3954191],[-16.5214259,28.4226146],[-16.4457117,28.491135],[-16.4462506,28.535972],[-16.4205859,28.5362679],[-16.4209227,28.5588419],[-16.3443329,28.5597589],[-16.3446023,28.5822095],[-16.1912541,28.5837179],[-16.1916246,28.6068435],[-16.1279344,28.6078193],[-16.1277997,28.5921762],[-16.0995079,28.5925015],[-16.0993395,28.5163822],[-16.1648148,28.5161158],[-16.1647474,28.4938583],[-16.2385755,28.4484704],[-16.2653516,28.4476116],[-16.2658569,28.4030038],[-16.3167484,28.4017594],[-16.3163105,28.380189],[-16.3420763,28.3795075],[-16.3408301,28.2892963],[-16.415837,28.1976134],[-16.415096,28.1311312],[-16.5153297,28.0164796],[-16.6168433,28.01532],[-16.6168096,27.9930469],[-16.7184243,27.9919168],[-16.7190979,28.0371426],[-16.7446952,28.0367859],[-16.7453351,28.0818146],[-16.7706967,28.0816065],[-16.8223966,28.1259036],[-16.8231712,28.1708652],[-16.8487012,28.1707464],[-16.8502842,28.260791],[-16.8756457,28.2605537],[-16.8760836,28.2832162],[-16.9015125,28.2827713],[-16.9023882,28.3279337],[-16.9278171,28.3275779]],[[-15.8537427,27.9008901],[-15.8542032,27.9901812],[-15.828953,27.9906555],[-15.8291065,28.035578],[-15.7782992,28.0363232],[-15.7532793,28.0814298],[-15.7278756,28.0815652],[-15.7282593,28.1718567],[-15.4989741,28.1728039],[-15.4987438,28.1504075],[-15.4497785,28.1507459],[-15.4501622,28.1961425],[-15.3972827,28.1961425],[-15.3964385,28.0383554],[-15.3710348,28.0380167],[-15.3706511,28.0153212],[-15.3457847,28.0153212],[-15.3454777,27.9254406],[-15.3708046,27.9252372],[-15.3705743,27.8352137],[-15.395978,27.8347387],[-15.4209979,27.7879673],[-15.4718052,27.7893932],[-15.471882,27.7666454],[-15.522766,27.7667813],[-15.5477092,27.7216112],[-15.6236132,27.7213395],[-15.6241504,27.741991],[-15.7007451,27.7433495],[-15.801669,27.8110501],[-15.8537427,27.9008901]],[[-14.5215621,28.0467778],[-14.5224358,28.1184131],[-14.4157526,28.1156076],[-14.2168794,28.2278805],[-14.2153651,28.33903],[-14.1641672,28.4528287],[-14.1115132,28.4747955],[-14.0335806,28.7226671],[-13.9565217,28.7449351],[-13.9561722,28.7665857],[-13.8290221,28.7664325],[-13.8289639,28.7879765],[-13.8000741,28.7879255],[-13.8012972,28.7189894],[-13.827566,28.719347],[-13.8278572,28.6517968],[-13.8025786,28.651899],[-13.8033941,28.5384172],[-13.8288474,28.5384684],[-13.8315061,28.3970177],[-13.9158189,28.2241438],[-13.9856445,28.2235696],[-14.0369588,28.1795787],[-14.1387139,28.1799894],[-14.1386556,28.1579103],[-14.2153651,28.1578076],[-14.2147244,28.1118888],[-14.2913173,28.0452356],[-14.3319673,28.0368713],[-14.4457846,28.0469834],[-14.4466583,28.0657961],[-14.4962835,28.0682631],[-14.495934,28.0458525],[-14.5215621,28.0467778]],[[-13.800662,28.8456579],[-13.8009273,28.8231121],[-13.775688,28.8230539],[-13.69729,28.8898184],[-13.69729,28.9127744],[-13.6072498,28.9117991],[-13.4388551,29.0002417],[-13.4374559,29.1351289],[-13.4117005,29.1349931],[-13.4105556,29.2229789],[-13.4592801,29.255586],[-13.4597392,29.2942023],[-13.5091254,29.2945638],[-13.5100581,29.3163453],[-13.5635382,29.3172941],[-13.5640564,29.2713764],[-13.5389228,29.2711956],[-13.5389747,29.2500375],[-13.5661293,29.2501279],[-13.5665956,29.2030039],[-13.5156549,29.2022349],[-13.5156549,29.1820579],[-13.5398038,29.1827819],[-13.5408921,29.137528],[-13.65782,29.1368528],[-13.713222,29.0935079],[-13.7663353,29.0934533],[-13.8502463,29.0165937],[-13.8518224,28.983425],[-13.8524443,28.914861],[-13.9013122,28.89245],[-13.9024005,28.8469779],[-13.800662,28.8456579]],[[1.6479916,38.9990693],[1.7321668,38.9993635],[1.7314703,39.0441733],[1.6489512,39.0431944],[1.6481552,39.1276358],[1.3948608,39.1265691],[1.3954412,39.0864199],[1.2281145,39.0852615],[1.2291095,39.0028958],[1.1448657,39.0018003],[1.1452803,38.8319988],[1.3113632,38.8331615],[1.3121924,38.7906483],[1.3946949,38.7916178],[1.3951924,38.7529597],[1.3112803,38.7519251],[1.3125919,38.6238804],[1.6489036,38.6251112],[1.6480745,38.7111504],[1.58456,38.7101152],[1.5811604,38.7005387],[1.5491544,38.7002798],[1.5197188,38.7092094],[1.50355,38.7253185],[1.4813282,38.9155064],[1.5518906,38.9254411],[1.5667328,38.9566554],[1.6487378,38.9583318],[1.6479916,38.9990693]],[[2.5450749,39.4166673],[2.43933,39.4161122],[2.438714,39.4846853],[2.439022,39.4993424],[2.3122308,39.4993424],[2.3119228,39.5417911],[2.2290722,39.5409994],[2.2283536,39.6260571],[2.3460076,39.6270851],[2.9270445,39.9601558],[3.1456647,39.9600498],[3.1460753,40.0019797],[3.2313899,40.0019797],[3.2312872,39.8329231],[3.1482313,39.8331596],[3.1484366,39.7935717],[3.4814817,39.7931773],[3.4803472,39.5959027],[3.3150618,39.4784606],[3.3146179,39.3785504],[3.0830178,39.2499355],[2.9798608,39.2501482],[2.9790395,39.3334971],[2.7287424,39.3334177],[2.7288451,39.4581361],[2.6456865,39.4577397],[2.6453785,39.4996593],[2.5452802,39.4994216],[2.5450749,39.4166673]],[[3.8120402,40.0434431],[3.729082,40.0437979],[3.7286185,39.9584155],[3.8126633,39.9576011],[3.8122771,39.9164393],[3.9608975,39.9159813],[4.1938142,39.791308],[4.3150279,39.7905799],[4.3159934,39.8329294],[4.3987393,39.8320396],[4.3973664,39.9185834],[4.3158003,39.9193274],[4.3161865,40.0433985],[4.2318959,40.0443594],[4.2324752,40.0847793],[4.1491501,40.086109],[4.1490623,40.1255157],[4.0627981,40.1272166],[4.0624217,40.0849941],[3.8128687,40.085294],[3.8120402,40.0434431]],[[-8.8910646,41.8228891],[-9.1092038,42.5751065],[-9.0365469,42.730656],[-9.0883419,42.7269569],[-9.1466113,42.7750272],[-9.2185488,42.9016271],[-9.2760988,42.8605106],[-9.3099094,42.9311297],[-9.2789763,42.9821991],[-9.3099094,43.0600377],[-9.2523594,43.1041725],[-9.2314975,43.1703151],[-9.1473307,43.210176],[-9.06748,43.1991644],[-9.0336694,43.2426748],[-8.99842,43.2447709],[-8.9998588,43.2955793],[-8.9372732,43.3055265],[-8.92936,43.326986],[-8.8638969,43.3290792],[-8.8761263,43.3740655],[-8.8221732,43.3735426],[-8.785485,43.3191358],[-8.7063538,43.305003],[-8.6099575,43.3296025],[-8.5509688,43.3233227],[-8.5243519,43.3364048],[-8.5250713,43.3646525],[-8.45745,43.3918416],[-8.3610538,43.4111803],[-8.3603344,43.4634161],[-8.3344369,43.5797394],[-8.2776063,43.5708796],[-8.0646713,43.7239184],[-7.9992081,43.7233986],[-7.9171994,43.7826357],[-7.8560525,43.7914643],[-7.83591,43.7374337],[-7.6628443,43.809819],[-7.3188932,43.6782695],[-7.1997467,43.5830817],[-6.2488228,43.6075032],[-6.1229322,43.5790105],[-5.8520425,43.6798953],[-5.6036334,43.5708672],[-5.2855347,43.5619084],[-5.1787525,43.4991591],[-4.9089869,43.4836655],[-4.6156167,43.4192021],[-4.1839917,43.4249168],[-3.8029478,43.5195394],[-3.7400025,43.4869277],[-3.5612827,43.5423572],[-3.1083013,43.3816347],[-2.9385737,43.4624573],[-2.7452417,43.4755094],[-2.3046245,43.3170625],[-1.9854018,43.3563045],[-1.8552841,43.3972545],[-1.769802,43.3964383],[-1.7700492,43.3760501],[-1.7100474,43.3756908],[-1.7113451,43.3312527],[-1.7225915,43.3131806],[-1.6890375,43.3129108],[-1.6881106,43.3341294],[-1.6446695,43.3337248],[-1.6449785,43.3133155],[-1.6029903,43.3129528],[-1.6034352,43.2926624],[-1.5635905,43.2921227],[-1.5630468,43.3133844],[-1.4779905,43.3128355],[-1.3667723,43.2761368],[-1.3568809,43.2381533],[-1.3703692,43.1712972],[-1.4423067,43.0833554],[-1.4198262,43.0603647],[-1.3730668,43.051166],[-1.3640746,43.1115893],[-1.3020285,43.135217],[-1.2354864,43.1332484],[-1.2795481,43.0774443],[-1.1923239,43.0649635],[-1.0061856,43.0077821],[-0.942341,42.9748951],[-0.7562028,42.9821318],[-0.7148387,42.9610774],[-0.6968543,42.9031405],[-0.5511809,42.8220693],[-0.5044215,42.8484456],[-0.4288871,42.8200906],[-0.3164848,42.8655842],[-0.1456332,42.810856],[-0.0314324,42.7124874],[0.1861785,42.7540985],[0.3021777,42.7177729],[0.3642238,42.7428729],[0.4487504,42.7144695],[0.6276949,42.7223973],[0.6411832,42.8576747],[0.7149192,42.882718],[0.9675996,42.8181119],[1.108777,42.7989808],[1.1753192,42.7342872],[1.3632559,42.7415521],[1.4113736,42.7093914],[1.4806054,42.7103407],[1.4813006,42.5010664],[1.6443591,42.5020345],[1.6432777,42.5424539],[1.730407,42.5434214],[1.7316429,42.5011803],[2.0638621,42.5016359],[2.0645572,42.4590247],[2.3969309,42.4599364],[2.3976786,42.4178363],[2.4804823,42.4179732],[2.4809767,42.3759441],[2.6447922,42.3762636],[2.6444832,42.4592447],[2.8113266,42.4596094],[2.8112648,42.5010358],[3.063878,42.5008535],[3.063878,42.4591535],[3.2307832,42.4593359],[3.2304935,42.3764363],[3.3141469,42.3760369],[3.3141243,42.3339864],[3.397855,42.3340435],[3.3973912,42.290094],[3.3138923,42.2908368],[3.3139695,42.2070151],[3.1475896,42.2073012],[3.1475896,42.1260612],[3.2305478,42.1260039],[3.2466753,41.9529359],[3.1945206,41.8558943],[3.060537,41.7647419],[2.7835777,41.6371796],[2.26293,41.4271601],[2.1649151,41.2989297],[1.86008,41.2232228],[1.3763003,41.116273],[1.1793714,41.0464585],[1.0858526,41.048493],[0.758537,40.8195599],[0.9114042,40.733761],[0.8781331,40.6751363],[0.6650182,40.5358666],[0.5580112,40.5502166],[0.433919,40.3757589],[0.2675635,40.1919192],[0.1641534,40.0647234],[0.0751307,40.0144671],[0.010387,39.8952188],[-0.0939224,39.8116904],[-0.1847435,39.6311716],[-0.2908513,39.5036254],[-0.2863552,39.333431],[-0.1856427,39.1774612],[-0.2135185,39.1558487],[-0.1110076,38.9722246],[0.0094878,38.8826835],[0.1218901,38.872183],[0.2342925,38.798636],[0.2558737,38.7264162],[0.0958128,38.6133825],[-0.0022021,38.6070586],[-0.0570544,38.5269073],[-0.2719677,38.4762395],[-0.379874,38.3931234],[-0.3834708,38.3381297],[-0.4509122,38.3310763],[-0.5048654,38.2830943],[-0.4823849,38.1948095],[-0.429331,38.1658287],[-0.4545091,38.148859],[-0.5839966,38.1721913],[-0.6136708,38.1198599],[-0.6370505,37.9612228],[-0.6811123,37.9456238],[-0.7323677,37.8810656],[-0.7215771,37.7830562],[-0.688306,37.7340026],[-0.6641461,37.6231485],[-0.7193941,37.5878413],[-0.9196258,37.5375806],[-1.1107098,37.5164093],[-1.3383246,37.5286671],[-1.4408917,37.3903714],[-1.6766966,37.2765189],[-1.8540816,36.9122889],[-2.0683486,36.6929117],[-2.2158766,36.6619233],[-2.3721861,36.7801753],[-2.6812926,36.6591056],[-2.9201476,36.6675585],[-3.09402,36.712625],[-3.4610839,36.6548788],[-3.7280395,36.6929117],[-4.3743529,36.6633322],[-4.6571151,36.4404171],[-4.9188018,36.4531321],[-5.1699508,36.3513541],[-5.2841094,36.1970201],[-5.2680911,36.1241812],[-5.3524784,36.1224654],[-5.3516094,36.0401413],[-5.4365759,36.0388921],[-5.4353207,36.0034384],[-5.6888562,36.0036518],[-5.6899635,36.0405317],[-5.85506,36.0385595],[-5.8566821,36.1242077],[-5.9384817,36.1221487],[-5.9400265,36.1655625],[-5.9983445,36.1645024],[-6.0357297,36.1780957],[-6.0775178,36.2224132],[-6.1506113,36.2864561],[-6.231541,36.3770075],[-6.3358504,36.5310643],[-6.3214629,36.5816265],[-6.404191,36.6234958],[-6.4743301,36.7489673],[-6.4158808,36.7993866],[-6.490516,36.9173818],[-6.6298949,37.0194012],[-6.8744824,37.1083766],[-7.0426363,37.1850699],[-7.2647434,37.1843535],[-7.3753473,37.1535419],[-7.408316,37.1682196],[-7.4202886,37.2118318],[-7.4249231,37.2350505],[-7.4380543,37.2451969],[-7.4459717,37.3326142],[-7.4480958,37.3909382],[-7.4696271,37.4075829],[-7.4647029,37.4530494],[-7.5019723,37.516411],[-7.5191587,37.5229203],[-7.5219588,37.5723727],[-7.4501271,37.6695835],[-7.4249019,37.7599222],[-7.316662,37.839974],[-7.268329,37.988952],[-7.1536786,38.0155235],[-7.1177098,38.0553626],[-7.0142997,38.0243785],[-6.9963153,38.1075633],[-6.9614706,38.201254],[-7.080617,38.1570753],[-7.3402665,38.4402363],[-7.2638329,38.7380741],[-7.0435243,38.8729667],[-7.0615086,38.907962],[-6.9693387,39.0198308],[-7.0008114,39.0887867],[-7.1536786,39.0957658],[-7.1525545,39.1602899],[-7.2447245,39.1968854],[-7.2559647,39.2813308],[-7.3368944,39.3535074],[-7.3279022,39.4559917],[-7.5144901,39.5886496],[-7.5527069,39.6795427],[-7.0502684,39.6752171],[-6.9951913,39.8195433],[-6.9221297,39.8790868],[-6.886161,40.0229854],[-7.0412762,40.1347927],[-7.0176717,40.266146],[-6.8086034,40.3450071],[-6.8681766,40.4451649],[-6.8535643,40.6066433],[-6.837828,40.8757589],[-6.9536024,41.0370445],[-6.8018592,41.0395879],[-6.7681385,41.138706],[-6.6411239,41.2655616],[-6.5624422,41.2630269],[-6.217367,41.5791017],[-6.3162811,41.644652],[-6.5152332,41.6412921],[-6.5871707,41.6883151],[-6.5478299,41.8559743],[-6.6298836,41.9112057],[-7.1334461,41.9404756],[-7.1682909,41.8718791],[-7.4256922,41.7847727],[-7.9539833,41.8459271],[-8.130455,41.7805819],[-8.2518495,41.9078597],[-8.1293309,42.0348842],[-8.2484774,42.1008034],[-8.3676239,42.0557521],[-8.6070409,42.0340493],[-8.8910646,41.8228891]]]},{"id":"South_Africa-CapeTown-Aerial-2013","name":"City of Cape Town 2013 Aerial","type":"tms","template":"https://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2013/{zoom}/{x}/{y}.jpg","endDate":"2015-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[1,21],"polygon":[[[18.4486565,-33.893623],[18.4485868,-33.902644],[18.4702,-33.9027665],[18.4813902,-33.8472383],[18.4492466,-33.801069],[18.4281537,-33.7356408],[18.43914,-33.7177232],[18.4071895,-33.6589917],[18.3322379,-33.5775191],[18.3324525,-33.5504487],[18.353996,-33.5505918],[18.3542535,-33.5236025],[18.3652398,-33.5236561],[18.3650252,-33.5148009],[18.3760115,-33.5147652],[18.3760545,-33.5058017],[18.4296557,-33.5059449],[18.4296986,-33.4878541],[18.4404919,-33.4878899],[18.4405991,-33.4698849],[18.4943721,-33.4700997],[18.4943292,-33.4791564],[18.5158297,-33.4791743],[18.5157439,-33.4881941],[18.5264727,-33.4883015],[18.5263225,-33.5243538],[18.5479304,-33.5244253],[18.5479519,-33.5153913],[18.5693666,-33.5154987],[18.5693666,-33.524479],[18.5801169,-33.5245327],[18.580074,-33.5425978],[18.5907814,-33.5425978],[18.5907385,-33.5606413],[18.5799453,-33.5605341],[18.5798809,-33.569617],[18.5906956,-33.569617],[18.5906526,-33.5786811],[18.6230108,-33.5787347],[18.622925,-33.5877264],[18.6659691,-33.5878872],[18.6659262,-33.614928],[18.6767194,-33.6149726],[18.6765772,-33.6510279],[18.687298,-33.6510167],[18.6873409,-33.6600365],[18.6980697,-33.6600901],[18.6980697,-33.6690733],[18.7520358,-33.6692519],[18.7520787,-33.6421924],[18.7736437,-33.642246],[18.773708,-33.6331886],[18.8274595,-33.6332958],[18.8275239,-33.6603044],[18.8166663,-33.6602866],[18.8166019,-33.6783233],[18.8058087,-33.6783055],[18.8058087,-33.7053892],[18.8273951,-33.7054428],[18.8273308,-33.7234701],[18.838124,-33.7234344],[18.8380381,-33.7413865],[18.8165161,-33.7413687],[18.8163659,-33.7955057],[18.8055941,-33.7955057],[18.8055083,-33.8135675],[18.794758,-33.8135497],[18.7947151,-33.8315364],[18.7731072,-33.8315186],[18.7731287,-33.8405194],[18.7623569,-33.8405194],[18.7622711,-33.903588],[18.7514564,-33.9035167],[18.7510809,-33.9847823],[18.7619063,-33.9848001],[18.7617776,-34.0298785],[18.772603,-34.0298963],[18.7725815,-34.0389073],[18.7940338,-34.0389406],[18.7938756,-34.0406987],[18.7984461,-34.0411855],[18.8032445,-34.0411788],[18.8034055,-34.0389206],[18.8159367,-34.038974],[18.8163444,-34.0299318],[18.8379845,-34.0316479],[18.8380006,-34.030003],[18.8484183,-34.0300074],[18.8484666,-34.0218491],[18.859925,-34.0234675],[18.8598606,-34.0210132],[18.868272,-34.0220803],[18.8681862,-34.0211733],[18.8854596,-34.0234319],[18.8851806,-34.0213156],[18.9025184,-34.021031],[18.9025828,-34.0119958],[18.9134189,-34.0119958],[18.9134833,-33.9939582],[18.9458844,-33.9940294],[18.9458629,-34.003102],[18.9674279,-34.0029953],[18.9674708,-34.0120848],[18.9782211,-34.0120848],[18.9783284,-34.0211377],[18.9891431,-34.0211377],[18.9891645,-34.039134],[19.0000167,-34.0391251],[19.0000221,-34.0571798],[19.0108368,-34.0572509],[19.0107939,-34.0841436],[19.0000007,-34.0841258],[19.0000221,-34.0931977],[18.9891538,-34.0931711],[18.9891753,-34.1021976],[18.9783177,-34.1021798],[18.9783177,-34.111232],[18.967503,-34.1112143],[18.9674923,-34.1292536],[18.9566025,-34.1292358],[18.9565596,-34.1382408],[18.9674172,-34.1383118],[18.9674172,-34.1473157],[18.9891753,-34.147298],[18.9891753,-34.165303],[18.9782748,-34.1652852],[18.9783177,-34.1742863],[18.9674172,-34.1742685],[18.9674601,-34.1833042],[18.9565596,-34.1833219],[18.9565596,-34.1923565],[18.9457449,-34.192321],[18.945702,-34.2013192],[18.9348659,-34.2013725],[18.9348873,-34.2193305],[18.9023575,-34.2193482],[18.9017567,-34.2362557],[18.8878414,-34.2373467],[18.8894185,-34.2554123],[18.8805887,-34.2553414],[18.8792744,-34.2644348],[18.8696882,-34.2644126],[18.8697097,-34.2734386],[18.8371369,-34.2734208],[18.8371155,-34.2643771],[18.848016,-34.2644037],[18.8480267,-34.237391],[18.8154861,-34.210281],[18.8156471,-34.1741265],[18.8548824,-34.1562743],[18.7617561,-34.0840547],[18.6533734,-34.077479],[18.4797433,-34.1101217],[18.4463713,-34.1342269],[18.4444508,-34.1640868],[18.4359965,-34.1640513],[18.435975,-34.1820172],[18.4468111,-34.182106],[18.4467253,-34.1911052],[18.4659299,-34.1912117],[18.4866151,-34.2453911],[18.4788904,-34.2543659],[18.4860036,-34.2543748],[18.4677109,-34.2994116],[18.4892222,-34.3445792],[18.500112,-34.3445837],[18.4999189,-34.3626174],[18.467432,-34.3625111],[18.4673676,-34.3534947],[18.3916005,-34.3170651],[18.3917722,-34.2900161],[18.3701643,-34.2808678],[18.370682,-34.2178866],[18.3492324,-34.1816178],[18.3274743,-34.1814936],[18.3276674,-34.1634565],[18.3118746,-34.1543832],[18.3114025,-34.1435331],[18.3236656,-34.1346886],[18.3499297,-34.1042053],[18.3393189,-34.0882843],[18.3612487,-34.0597219],[18.3550474,-34.0553843],[18.3427522,-34.064326],[18.3199963,-34.0644326],[18.296071,-34.045126],[18.3068213,-34.0252637],[18.3287725,-34.0191992],[18.3289227,-34.001252],[18.3397374,-34.0012698],[18.3398017,-33.9866282],[18.3628687,-33.9735145],[18.3638129,-33.9292474],[18.3726212,-33.9292741],[18.3728358,-33.917763],[18.3977267,-33.8933469],[18.4486565,-33.893623]]],"terms_url":"https://www.capetown.gov.za","terms_text":"City of Cape Town Aerial - OPENSTREETMAP USE ONLY","description":"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 12cm ground sample distance"},{"id":"South_Africa-CapeTown-Aerial","name":"City of Cape Town 2015 Aerial","type":"tms","template":"https://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2015/{zoom}/{x}/{y}.jpg","endDate":"2016-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[1,21],"polygon":[[[18.4486565,-33.893623],[18.4485868,-33.902644],[18.4702,-33.9027665],[18.4813902,-33.8472383],[18.4492466,-33.801069],[18.4281537,-33.7356408],[18.43914,-33.7177232],[18.4071895,-33.6589917],[18.3322379,-33.5775191],[18.3324525,-33.5504487],[18.353996,-33.5505918],[18.3542535,-33.5236025],[18.3652398,-33.5236561],[18.3650252,-33.5148009],[18.3760115,-33.5147652],[18.3760545,-33.5058017],[18.4296557,-33.5059449],[18.4296986,-33.4878541],[18.4404919,-33.4878899],[18.4405991,-33.4698849],[18.4943721,-33.4700997],[18.4943292,-33.4791564],[18.5158297,-33.4791743],[18.5157439,-33.4881941],[18.5264727,-33.4883015],[18.5263225,-33.5243538],[18.5479304,-33.5244253],[18.5479519,-33.5153913],[18.5693666,-33.5154987],[18.5693666,-33.524479],[18.5801169,-33.5245327],[18.580074,-33.5425978],[18.5907814,-33.5425978],[18.5907385,-33.5606413],[18.5799453,-33.5605341],[18.5798809,-33.569617],[18.5906956,-33.569617],[18.5906526,-33.5786811],[18.6230108,-33.5787347],[18.622925,-33.5877264],[18.6659691,-33.5878872],[18.6659262,-33.614928],[18.6767194,-33.6149726],[18.6765772,-33.6510279],[18.687298,-33.6510167],[18.6873409,-33.6600365],[18.6980697,-33.6600901],[18.6980697,-33.6690733],[18.7520358,-33.6692519],[18.7520787,-33.6421924],[18.7736437,-33.642246],[18.773708,-33.6331886],[18.8274595,-33.6332958],[18.8275239,-33.6603044],[18.8166663,-33.6602866],[18.8166019,-33.6783233],[18.8058087,-33.6783055],[18.8058087,-33.7053892],[18.8273951,-33.7054428],[18.8273308,-33.7234701],[18.838124,-33.7234344],[18.8380381,-33.7413865],[18.8165161,-33.7413687],[18.8163659,-33.7955057],[18.8055941,-33.7955057],[18.8055083,-33.8135675],[18.794758,-33.8135497],[18.7947151,-33.8315364],[18.7731072,-33.8315186],[18.7731287,-33.8405194],[18.7623569,-33.8405194],[18.7622711,-33.903588],[18.7514564,-33.9035167],[18.7510809,-33.9847823],[18.7619063,-33.9848001],[18.7617776,-34.0298785],[18.772603,-34.0298963],[18.7725815,-34.0389073],[18.7940338,-34.0389406],[18.7938756,-34.0406987],[18.7984461,-34.0411855],[18.8032445,-34.0411788],[18.8034055,-34.0389206],[18.8159367,-34.038974],[18.8163444,-34.0299318],[18.8379845,-34.0316479],[18.8380006,-34.030003],[18.8484183,-34.0300074],[18.8484666,-34.0218491],[18.859925,-34.0234675],[18.8598606,-34.0210132],[18.868272,-34.0220803],[18.8681862,-34.0211733],[18.8854596,-34.0234319],[18.8851806,-34.0213156],[18.9025184,-34.021031],[18.9025828,-34.0119958],[18.9134189,-34.0119958],[18.9134833,-33.9939582],[18.9458844,-33.9940294],[18.9458629,-34.003102],[18.9674279,-34.0029953],[18.9674708,-34.0120848],[18.9782211,-34.0120848],[18.9783284,-34.0211377],[18.9891431,-34.0211377],[18.9891645,-34.039134],[19.0000167,-34.0391251],[19.0000221,-34.0571798],[19.0108368,-34.0572509],[19.0107939,-34.0841436],[19.0000007,-34.0841258],[19.0000221,-34.0931977],[18.9891538,-34.0931711],[18.9891753,-34.1021976],[18.9783177,-34.1021798],[18.9783177,-34.111232],[18.967503,-34.1112143],[18.9674923,-34.1292536],[18.9566025,-34.1292358],[18.9565596,-34.1382408],[18.9674172,-34.1383118],[18.9674172,-34.1473157],[18.9891753,-34.147298],[18.9891753,-34.165303],[18.9782748,-34.1652852],[18.9783177,-34.1742863],[18.9674172,-34.1742685],[18.9674601,-34.1833042],[18.9565596,-34.1833219],[18.9565596,-34.1923565],[18.9457449,-34.192321],[18.945702,-34.2013192],[18.9348659,-34.2013725],[18.9348873,-34.2193305],[18.9023575,-34.2193482],[18.9017567,-34.2362557],[18.8878414,-34.2373467],[18.8894185,-34.2554123],[18.8805887,-34.2553414],[18.8792744,-34.2644348],[18.8696882,-34.2644126],[18.8697097,-34.2734386],[18.8371369,-34.2734208],[18.8371155,-34.2643771],[18.848016,-34.2644037],[18.8480267,-34.237391],[18.8154861,-34.210281],[18.8156471,-34.1741265],[18.8548824,-34.1562743],[18.7617561,-34.0840547],[18.6533734,-34.077479],[18.4797433,-34.1101217],[18.4463713,-34.1342269],[18.4444508,-34.1640868],[18.4359965,-34.1640513],[18.435975,-34.1820172],[18.4468111,-34.182106],[18.4467253,-34.1911052],[18.4659299,-34.1912117],[18.4866151,-34.2453911],[18.4788904,-34.2543659],[18.4860036,-34.2543748],[18.4677109,-34.2994116],[18.4892222,-34.3445792],[18.500112,-34.3445837],[18.4999189,-34.3626174],[18.467432,-34.3625111],[18.4673676,-34.3534947],[18.3916005,-34.3170651],[18.3917722,-34.2900161],[18.3701643,-34.2808678],[18.370682,-34.2178866],[18.3492324,-34.1816178],[18.3274743,-34.1814936],[18.3276674,-34.1634565],[18.3118746,-34.1543832],[18.3114025,-34.1435331],[18.3236656,-34.1346886],[18.3499297,-34.1042053],[18.3393189,-34.0882843],[18.3612487,-34.0597219],[18.3550474,-34.0553843],[18.3427522,-34.064326],[18.3199963,-34.0644326],[18.296071,-34.045126],[18.3068213,-34.0252637],[18.3287725,-34.0191992],[18.3289227,-34.001252],[18.3397374,-34.0012698],[18.3398017,-33.9866282],[18.3628687,-33.9735145],[18.3638129,-33.9292474],[18.3726212,-33.9292741],[18.3728358,-33.917763],[18.3977267,-33.8933469],[18.4486565,-33.893623]]],"terms_url":"https://www.capetown.gov.za","terms_text":"City of Cape Town Aerial - OPENSTREETMAP USE ONLY","best":true,"description":"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 8cm ground sample distance"},{"id":"Czech_CUZK-KM","name":"Czech CUZK:KM","type":"wms","template":"https://wms.cuzk.cz/wms.asp?service=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&LAYERS=parcelni_cisla_i,obrazy_parcel_i,RST_KMD_I,hranice_parcel_i,DEF_BUDOVY,RST_KN_I,dalsi_p_mapy_i,prehledka_kat_prac,prehledka_kat_uz,prehledka_kraju-linie&FORMAT=image/png&transparent=TRUE&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"overlay":true},{"id":"Czech_CUZK-KM-tms","name":"Czech CUZK:KM tiles proxy","type":"tms","template":"https://osm-{switch:a,b,c}.zby.cz/tiles_cuzk.php/{zoom}/{x}/{y}.png","scaleExtent":[13,18],"polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"overlay":true},{"id":"Czech_RUIAN-budovy","name":"Czech RUIAN budovy","type":"tms","template":"https://tile.poloha.net/budovy/{zoom}/{x}/{y}.png","scaleExtent":[12,20],"polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"terms_url":"https://poloha.net/","terms_text":"Czech RUIAN"},{"id":"Czech_RUIAN-parcely","name":"Czech RUIAN parcely","type":"tms","template":"https://tile.poloha.net/parcely/{zoom}/{x}/{y}.png","scaleExtent":[12,20],"polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"terms_url":"https://poloha.net/","terms_text":"Czech RUIAN"},{"id":"Duna_2013","name":"Danube flood orthophoto 2013","type":"tms","template":"http://e.tile.openstreetmap.hu/dunai-arviz-2013/{zoom}/{x}/{y}.jpg","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[10,20],"polygon":[[[19.0773152,47.6959718],[19.0779881,47.6959835],[19.0946205,47.6944562],[19.0805603,47.595874],[19.0743376,47.5890907],[19.0795196,47.5888284],[19.07717,47.5724109],[19.0577884,47.5720924],[19.0773152,47.6959718]]],"terms_url":"http://fototerkep.hu","terms_text":"Fotótérkép.hu","description":"Riverbank of Danube at Budapest, Szentendre and Szigetmonostor"},{"id":"Delaware2012Orthophotography","name":"Delaware 2012 Orthophotography","type":"wms","template":"https://firstmap.delaware.gov/arcgis/services/DE_Imagery/DE_Imagery_2012/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","polygon":[[[-75.01770587603,38.45188674427],[-75.74173524589,38.4499581145],[-75.80699639658,39.73907123636],[-75.75558784863,39.80106251053],[-75.64692187603,39.8563815616],[-75.47114773904,39.84645578141],[-75.37725787603,39.81477822231],[-75.48746302671,39.6718115509],[-75.50901151986,39.43446011595],[-75.39326532808,39.27784018498],[-75.30707135548,39.01666513594],[-75.1931721774,38.82218696272],[-75.05341480753,38.80875503297],[-75.01770587603,38.45188674427]]],"terms_url":"https://firstmap.delaware.gov/arcgis/rest/services/DE_Imagery/DE_Imagery_2012/ImageServer","terms_text":"Digital Aerial Solutions, LLC","description":"This data set consists of 0.3-meter pixel resolution (approximately 1-foot), 4-band true color and near infrared (R, G, B, IR) orthoimages covering New Castle, Kent and Sussex Counties in Delaware."},{"id":"Delaware2017Orthophotography","name":"Delaware 2017 Orthophotography","type":"wms","template":"https://firstmap.delaware.gov/arcgis/services/DE_Imagery/DE_Imagery_2017/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2017-01-01T00:00:00.000Z","startDate":"2017-01-01T00:00:00.000Z","polygon":[[[-75.01770587603,38.45188674427],[-75.74173524589,38.4499581145],[-75.80699639658,39.73907123636],[-75.75558784863,39.80106251053],[-75.64692187603,39.8563815616],[-75.47114773904,39.84645578141],[-75.37725787603,39.81477822231],[-75.48746302671,39.6718115509],[-75.50901151986,39.43446011595],[-75.39326532808,39.27784018498],[-75.30707135548,39.01666513594],[-75.1931721774,38.82218696272],[-75.05341480753,38.80875503297],[-75.01770587603,38.45188674427]]],"terms_url":"https://firstmap.delaware.gov/arcgis/rest/services/DE_Imagery/DE_Imagery_2017/ImageServer","terms_text":"Digital Aerial Solutions, LLC","description":"This data set consists of 0.3-meter pixel resolution (approximately 1-foot), 4-band true color and near infrared (R, G, B, IR) orthoimages covering New Castle, Kent and Sussex Counties in Delaware."},{"id":"delmiro_gouveia","name":"Delmiro Gouveia AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Delmiro%20Gouveia&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.94962469285,-9.42956855866],[-37.94833723253,-9.33972104942],[-38.03902808374,-9.33834478757],[-38.04033700174,-9.42845725102],[-37.94962469285,-9.42956855866]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"der-es","name":"DER-ES","type":"wms","template":"http://portal.der.es.gov.br/geoserver/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=deres-ext:TRECHOINFO&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-40.94577071764,-21.31403802661],[-40.62309586758,-20.86277859527],[-40.38881524148,-20.65176928183],[-40.22208792475,-20.29831315792],[-39.80383232847,-19.66412347768],[-39.69603449437,-19.42573412636],[-39.6730376231,-19.30437313323],[-39.70537697333,-18.61383779319],[-39.65291536073,-18.33096390659],[-40.22280657698,-17.97586605847],[-40.34282149894,-17.91980423648],[-40.45277528971,-17.91501764849],[-40.46499237758,-17.92048802421],[-40.48367733549,-17.90407639054],[-40.50164364117,-17.90681176832],[-40.51601668572,-17.8890310587],[-40.53326433917,-17.8890310587],[-40.54548142703,-17.90134097056],[-40.5893192129,-17.91501764849],[-40.5893192129,-17.93211201178],[-40.61519069308,-17.9341632245],[-40.62956373763,-17.98680287756],[-40.64609273886,-17.98680287756],[-40.65902847895,-18.00730758632],[-40.68777456804,-18.00594067991],[-40.70574087372,-18.01755904646],[-40.71364604822,-18.00183989709],[-40.72155122272,-17.9977390189],[-40.75101596404,-18.00252336752],[-40.76754496527,-17.99842250522],[-40.76754496527,-17.98133455271],[-40.80922679445,-17.94852104795],[-40.82431849123,-17.96014319437],[-40.8315050135,-17.94988839894],[-40.86528166818,-17.9827016498],[-40.88396662609,-17.9676629996],[-40.90911945405,-17.98475227559],[-40.77760609645,-18.1077461392],[-40.77832474868,-18.15145652556],[-40.79054183654,-18.15350518192],[-40.83509827463,-18.14531041238],[-40.89546506173,-18.10364773093],[-40.93283497755,-18.12755376077],[-40.95583184882,-18.12550480038],[-40.95295723991,-18.14462749757],[-40.96014376218,-18.1500907413],[-40.96373702332,-18.14326165996],[-40.97954737232,-18.13643231189],[-40.99248311241,-18.1500907413],[-40.99104580796,-18.16306526069],[-41.00901211364,-18.16306526069],[-41.0578804651,-18.16579661567],[-41.0578804651,-18.17535602159],[-41.09596903314,-18.19242508686],[-41.09596903314,-18.20539645898],[-41.10890477323,-18.21290575936],[-41.09812498982,-18.22997114669],[-41.1053115121,-18.23270145336],[-41.09884364205,-18.25590732904],[-41.1290270356,-18.27501572272],[-41.16136638583,-18.30572123183],[-41.15058660242,-18.37393619787],[-41.16424099474,-18.3793922314],[-41.16424099474,-18.40189654461],[-41.15058660242,-18.407351693],[-41.15849177692,-18.41144294087],[-41.17358347369,-18.41144294087],[-41.18867517046,-18.44485115689],[-41.0212292015,-18.46666526175],[-41.04638202946,-18.60362157901],[-41.03775820273,-18.61451885232],[-41.0578804651,-18.6267774504],[-41.04710068169,-18.64856833073],[-41.03488359382,-18.65401561396],[-40.99895098246,-18.67716461675],[-40.94505206541,-18.69418392578],[-40.94433341318,-18.76972898283],[-40.92133654191,-18.81055006856],[-40.93714689091,-18.82347468178],[-40.94720802209,-18.82143401943],[-40.97092354559,-18.83571813552],[-41.08375194528,-18.83231726565],[-41.10674881655,-18.83571813552],[-41.11752859996,-18.80782897078],[-41.13118299228,-18.79286214638],[-41.23610621747,-18.79490315535],[-41.25119791424,-18.81667237761],[-41.2476046531,-18.85544182257],[-41.22029586847,-18.8799231739],[-41.2080787806,-18.8799231739],[-41.20664147615,-18.86632286449],[-41.16424099474,-18.86700290617],[-41.15633582024,-18.88876278307],[-41.1290270356,-18.90440094845],[-41.1211218611,-18.92411655188],[-41.03919550719,-18.98664720231],[-41.07584677078,-19.00567361403],[-41.06506698737,-19.06341902698],[-40.96876758891,-19.12725524781],[-40.96158106664,-19.15101775756],[-40.92996036864,-19.20599786475],[-40.94648936987,-19.2229633254],[-40.94792667432,-19.24264106543],[-40.92564845527,-19.262994866],[-40.94936397877,-19.27859773554],[-40.92277384636,-19.31047723804],[-40.94361476096,-19.352521543],[-40.934272282,-19.38099701507],[-40.95726915327,-19.39184350499],[-40.9737981545,-19.42641186672],[-40.95439454437,-19.46165046782],[-40.97882872009,-19.50297829748],[-41.013324027,-19.50297829748],[-41.04638202946,-19.48333195583],[-41.05428720396,-19.48400945558],[-41.04135146387,-19.56664313353],[-41.09237577201,-19.58966465422],[-41.14627468905,-19.6560023745],[-41.16495964696,-19.65870945459],[-41.17933269151,-19.69389733589],[-41.19658034496,-19.74598826039],[-41.16999021255,-19.80617607525],[-41.18939382269,-19.82375473895],[-41.18867517046,-19.88526474348],[-41.21239069396,-19.89742873112],[-41.22963834742,-19.90215891837],[-41.24688600088,-19.93323948769],[-41.25479117538,-19.92918584689],[-41.26988287215,-19.93796860383],[-41.30653413574,-19.93391508438],[-41.31515796247,-19.9697175726],[-41.32450044142,-19.97647184801],[-41.31300200579,-20.01226467389],[-41.33671752929,-20.05547534637],[-41.34821596492,-20.08652567207],[-41.3554024872,-20.12094384129],[-41.37768070624,-20.1580529872],[-41.3870231852,-20.1863849412],[-41.4107387087,-20.19447883957],[-41.42079983988,-20.2025723174],[-41.7635969523,-20.20459562113],[-41.78515651912,-20.28483210523],[-41.8505538718,-20.32459783588],[-41.86348961189,-20.37513273815],[-41.85127252403,-20.38186947551],[-41.84336734953,-20.40948702116],[-41.80887204262,-20.4249776227],[-41.80671608594,-20.47211333219],[-41.83115026167,-20.4788458242],[-41.8110279993,-20.54211679742],[-41.83115026167,-20.55086497994],[-41.86205230744,-20.61814193832],[-41.82108913048,-20.64437190401],[-41.85342848071,-20.68068284947],[-41.87139478639,-20.72101815833],[-41.86780152526,-20.73849345818],[-41.88001861312,-20.73983762845],[-41.88289322203,-20.76739048664],[-41.85414713294,-20.77478186241],[-41.83330621835,-20.79829746931],[-41.80887204262,-20.80904624047],[-41.78443786689,-20.80568733178],[-41.75137986444,-20.82382454951],[-41.74706795107,-20.87486573082],[-41.72335242757,-20.87553720984],[-41.74131873325,-20.92723207622],[-41.72335242757,-20.97756707786],[-41.74347468994,-21.09763138917],[-41.72910164539,-21.12578887114],[-41.59399502666,-21.16332386392],[-41.57243545984,-21.18677840236],[-41.49050910593,-21.18878861828],[-41.48332258366,-21.20084933958],[-41.43948479779,-21.22094835332],[-41.41289466538,-21.20955924815],[-41.34965326938,-21.21290907619],[-41.27994400333,-21.24640317418],[-41.24473004419,-21.2323365795],[-41.17717673483,-21.25511039335],[-41.09237577201,-21.22429792287],[-41.04853798614,-21.25912893631],[-41.01547998369,-21.25578015812],[-41.00254424359,-21.28725566578],[-40.94577071764,-21.31403802661]]],"terms_url":"https://der.es.gov.br","terms_text":"Departamento de Estradas de Rodagem do Estado do Espírito Santo","overlay":true},{"id":"DigitalGlobe-Premium","name":"DigitalGlobe Premium Imagery","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.316c9a2e/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqZGFrZ2c2dzFlMWgyd2x0ZHdmMDB6NzYifQ.9Pl3XOO82ArX94fHV289Pg","scaleExtent":[0,22],"terms_url":"https://wiki.openstreetmap.org/wiki/DigitalGlobe","terms_text":"Terms & Feedback","default":true,"description":"Premium DigitalGlobe satellite imagery.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMQAAADECAYAAADApo5rAAAgAElEQVR4nMy9a7Bl2VEm9uU5595bt6puvd9dVa1+6k3rgRCSQLKMEDCBAHsEGptAGE948Bgz88Nhw0w4bBzjmBl7HDE2EzM4PGZgAIMNNkYEDKDBIARIAoQeLSG1uumu7uqq7nq/bt1b9738Y6/M/DL32vdWYzw6u6PrnLP2Wrkyc2V+meux95WFd31fAQR6FdRfRYuF7ujvAhSpdQsgUusLSikQ6e6hfkcpKOJ9AIBo/VBaINRfqd8jd17Lf8HqgspCy8pm6K0Km4pNCYUqimQukHrs/mn1kcuoi979QNsGo02rRNVXjTGf3e9ePRoj2bZe/Oz1a+0j41omLR53+vwqyzBqDoR9casohe6WTmrroPiHVKcA3BkgYgMsXN9csXT3itBNN+lKDp37CUSZLahKIPrGp1FGIQYLeaBIdWhSQnGmjIoqXukYYIQr4IoXCfVPl8oQnaEow/qBUoZl0KZhHKoM3QAL3S9WjwGro+P1CtHLn8a7lhMfYgXFxqtU+mx83m0JKpsWGUadSZCFEdNqHGrodk+otoj9dmSQrhK5paKx+5WQkmpLikjqG2agQrwpkmQEQHHe2AZL11c22FJxxepKsahVTCvFBpadjEe4pHtqyPpbqtu5casuitdXPs2r6XNABuOwqB7EeFMDLUX5T9G4Wg3zqarOZd0n91VcBi1HB2gWu4WjqttXMGiZPhlGqKFGUFCKCyAiHpoCDyV0CL1vdat5mGEWQ0o1GTKrDvOLO5wyZ3XFfN946OxCjK7dFa/p5WpYETn0rnQj6b/pm1LreCjkky6Dyizqt8Y3NJDaIIoAUgqhktQ2xXkWgXDvso0M4nX0vusZNeIqx8S/RnCAxpiN1cdd6Qn15WMSy9lQAv8SywKETJkMk5hjVRhns0ioChLUWfLymJu5ZCWTMWQWiFDmKNRAnaT+o4KZaTBzAsCpIJp48Win6Z71UarlKiB4lLDhU4dlRDNnrTWlmMyayypN0xWlj2Te1BOXlV55loGCB1AEnnGqx1XaharTgMd8Xex3Yd2bIgsNIkd3Zlvp+fxS4dZl6I/rNMkwcu+IA9NLkY2MG4Xxqy0FYaA6BZFwxjQRkxgzDHlpzAOuEGOOIqlOjxUx5HUfLarnwEPEMUIym8go0zQIhdsb/Ft/wTlrbsCmnl2CuShlWIYuChVjS5iizduU7443Q0YNYdXZu2o+mKZ7YVmE+CpG3/otfSlQXIZSaXCEmDYZRoZVRf9hB+w80OYTNFg296Q2yrCFd2png671henVT8rVJd9TmpQWmYqkjbU6Go5Z8b4k/LKQa23E5dGvqkDTDzwkB9rcR5WNUjPWSXFzCXqSUjq5t5FB5xYEZZZmaWTLE0udbzEGampDawrk28XLRdOSKoP4yo5Uw7ZITuUC1R8h+BTKYKtMKkkpahQgb4rLjm4QnYGqpxvcWhsaPpvEqNc7dGqELKpFSih4IspCRkT2ZVZH1IhIpVBkMqJdiFXa6mxhibhEgCqmJ5gzMYqXGgVsUqd9WB4pKFJCVGFJTIaqVNVZUwYwcKH+Fr8tcOmMp84xi8lF4FV1qfM+BzafT6LWs/FnHmiQOHXuutE2KoMvVkyTDKMSDN4N33cB1IPcpW0gCQn4N4qia/XsoqHKL7M581oPaW4c7mgWlUqxfsycKFTHeYaVOu8WSqSmZVrbhikglcGOMSz24askhfrs2nB+avMY0g3zWSyOaAPPi/uxkgyFFV89t6gMjmqdsYlYWqxjY3pQjy/eq42H9ekg5cjqJQrVtjonJcmPYEM2J5syGUYRo/qmFASAV+N1cSgSFL4PsrPCTcElTFZv6GpXCDpmbtFhlIYqMfCMzoEUDTxgEYxBEUNqyiaOOEazGMq7IzJzTK/v0DbxE6mG4sut+VI0DMg6IIONiVYW3aPxSMLqdYMszrJryhkm3hQ9LdoTYLJh6Vexwff83xYTGFegwDBdMozisPiASs9SYzWhQVPyERWJxwaDlnblcsDnC7nfZI0c/qIRuw8VQ66WECHOOF3h+s4k79h0BbTsB5UzqjnL7OimDFbdpVUM5mBIhhYIUG91jNjJ8yyk2DiE4RbltY+ongsGwRAm10a+OOFk5NMqwygyuY0TmIwlerkEetYDCxrNqLImbQQw9Gv3Hipq2NXvITwCKGqw3LqDXRRDsk4IM2jaLbfAbJM6Rxb3Tv9lfIU7ceIehyajq0vOSdiQDApMEXQKdFM0c6a0HECkjkMySbMXDvV8n1d6SC8+cTK9NuNgBbEyhTKMAAR0yrt5bOh+fqREaIeGP0Vm6Q94ECcJV0os5VyzytIJ5hl//xSU/6tteMXfB6nUsOwrRVJ14ImMt2N9eE+KVjqgJEN1Nkc1501qOqD27BtuQm2K67UgGlWSgcvVSHgu6I7E+XgloTNKINSzjnuLJUzH2WmOMKcKTRkqSEyhDJPKghOtlX0y7MR0ct1tu9OGCC8poMTJqtIA7ECf1hfycFUSlBNykpBiwI1KlIdKz42sJnSlqkngxk8TNRRXjq4C2dyuis9Xgdkv2NhNbwWkbFqxA+lSvF8bDLYLEK/meEMyIPZJ48TpikCoHf2GL5Z0KYeYg3fD6vf4CnagSGv5ry5FU59hMk1gS4qdFhkmmiJ4B13rEoh42NKczp0BPriiNWB1IWREDSYy/dI1NCq+XOdKcxRxLWuZGxn3VZXFDieaNhVXoonEjuIDqW3jwIRRNd2oUUBTA9aMpD6MHsU06q+r05ehN80Lk7ioK0/FGJ2ZHnenoMjjg6BzIZ2bBnjcuD7zZW3b0eWrLcOo1I51EIq4Y5TCDWH/x3CoaFaoAoECexYZta1G8ESp1ChSnBaZMBSS2U+L1SeH5rbkqFFvDWcoZJwqOzm+NstoZgfPDNW5K4kIWmnyGR2PBLX/kvodkqHE76IRmnL5YCwl9uX0qQ316X0orOvvalwl0Tb5uu/OB3oOzuM0TTJMzJDrgHW8q3cxQXY8CUKyxxeUcFjPxjVHhhbipggTCEgXxzR6ZMTkf912I6VSFcHHVTzb0xUjR6EYJt1xWmkjy6e5a754taSjI2ZF8QiN1yWw68sgPAg+dlL54fSMQ2Bh/iTYh6vcEIpQXulqDKzMBTWpjJnxMA5VR0L1p0SGUVjXr0ZJm8gKvh1fZNwaGbRO1IdE5uBe3ZtwgYRtas/BQFR1hOjR6xEmyZkOO5A5jRq4Cql1FdmpXx8TdT93Q04PRPlKl9HT9Eg6hMoRx/pv6KKX+lX5ewsTia9sK1wQ+lJ65rwNGRRxVX5C8yBDQwdBNp0fTZEMI5+EOsfOrA5AqeWOZiV80vhz7s36qRZVQA4n1huCYyK3C/rkc3UdTa5j6V9r74F0o6mWsiyqwNin7266VzqPHDqJrvhCxaCfD5T3mjRAtvCXCmIZg3oT72wYLcsDbPyCEWZeqzUWBSIzAGfE7K3Rl+tNpk6GkU4EAfXQevCKiOlqfqE1ehWMHSmuDFX9FAqKhdA2y6TGWb3bEKCzL6vTob/fK+m3nXy1eVB0MQdyGgE9MUmIzwos6bvzTu21TOrxNfOHfqQyPgY81lPVTqghGdhYfKmbeVZhQYPQl6krCK1DX7pnEOYEKqNUYpryhlUdIXouT9z0nS4ZRqUaQuibBSNezMq1I3o8zQzMmGX0zIwkQzUjU8VGYYLnp/xMuB/Wv02WJbZlhWnqh9SWUsJOLHcudlTSq7djnjhFrPcTplg9k0sSbcg2MqheiKSlLamepEmnokkYJ74dx9ZWdUrdrymBUlsfPQajjUyjDCPPodnAkbxYx6pGEsVSRgcgGD0vKVrHAlrGdJwtBou8LR8PSjgjOnFFdR4x46WmVR/eXidofOSsOMlqs+ogQn11ii1Eu1iY8s/urJOOJaVt6lyVX2G+jF4ylDTRHpTBQ4mnGyZ/to40nhV4er6pdAmEijpy/S2apjqxRneJttlmNvLpkmGkDGjeTOAXPiv29dmixE/YWC3C6OS0sxZFWkZNLevSbw6vsO9k2jBjJmczUOI0g0jYRDilN0pSKq8qktLU1a9uIsby1whEOpGKgJL5B3yiXWhlSu/RDwcEFd3ptGTwianSIR6pbdz3MYoISQrpP0d0j4wlTn5LvMdAp+mvH8UGRcw4vtMiw0jqAEk1om7JVIeluoE2AJ1R4vFmcOPwXu8xoheNHooCInasVxT1a8QIKzcmoLj1JxTwaEVr/6QY0jvpz4TrnBLFxoAn1CYD1K4L0Sr0DEXplmNpYqf9AtJ41qLmtpoOEK8UfJsyFK5Ao2uRjuVXsGJoSemnRd00fnEJXaJRMqrniybL4b6O+xTKMPKQxSZvFkffNa0q4GdfC+gTBNrFBzEwD0UNr1MfCqtlvoPMwUIdSesrWxpZzEGoXzVcR5Dq6IRaira2Np4XDkpdkoWQPLobXWz5Lk7soyOaMwt9NyeJ0ckjriZeMihDb9OQZeD5DhTcQDpNR28YKUrUUbhYPYy8yjvivaa3aLsplGESYAjKIFm1OUUnQVe9cwodYAhoj6gyKR2tOJjuqRL6Ux6Ll9gEUoKee5uAhMwdAhNNZY77LtqONeSbakX7oPDMRyvCBqOpwXWoBh/2F1QXLR0oLeXBb7j2ZUgGBzGmxX1wvZ4e69h0m1yk/WoCvGcUj6TY4JEKq7FqyiiIdYmG/RYnMS0y+MZcHYnOMWtoV19wCHAES14WpzbulTx54V1dUyDrM+XGcYUGFiqE7nsIlfCKF4cRNC5R9dc6XT8BqTMf1Fblstq0mlHUEYKiCVqKn6lFGPhKl6KK7CBD1FMCNdJ/0AdTEJcb7MBE3iISAZeWR4rKfyppoHnxwqmTYWTVhb1PjZWbDoyLtVXGggc5AylF4HsepFibEtpUqKTyaJgx4YYjTXXcODllXXnMZBeNS50g1GLmqW0htri/KkOvWYrMgTnlIoFPlqEHwaaugjQE/bHbLo3I/Aw5JBuojk+jGrfvrUROmQwjHizDLhGfqWcmaweWsqWOdKy7ex4JIrPRadz2KCIAPYVsf5G3MT27GySgPF7MsIMzs1wKFiyPokgH9dVXnYe0xeQfNtGMqBd0NSB6lsFCTykRmgldUSftnlmW2FblilbbY9159Dp5JznS074rR5YmUkpVpk+GiaU7EpevSs3hLa9VJvUbAajnA95JXiLzTS06chuciaAQ/bmHy196xmQQbLLAJruJbeO3lQbZ1xKL2JDtd2Y5kbJ8Wagwy2aWQQ7UAoPET4gOpXWT6SQttpJnpaOG1Uo7LK2h/lTHNvbUyLEzGCA4onPfUyLDSOoSoR67tYsMWgBbetXVFHVIB8pmTEqCed+mo0rY7ZcMT6lm+dWhk8N1VZIismFltAi3KZplvnPkUpmDszjS9M7daEN1RpIxfOf+e/f7MvSuHs8llvMKFw8EA1RJ9cN9GgyVOfdpPJMiVU9KPwHwtMhgz1T31t8pl+UVraIELM1wx+z6VCeKhtmtODkjfsbJETLn3bWUFBIjFkcBTifiUpySLCa8v7GyrixVBTt6kFDZESyVjKtQOsiuq+Kf8HEYBI5kG8YXO31DBq4fELLUPRXTiwth53rI2YbAoYTvRN/KxAGtqMwtRyAa+j28WnI6ZBgVtXjx5c2wTAp3LIsQqN5tRwzMghEkpN8MEF0jPz3rfYl3wiRp8qU2oqtL5hPVUPRepm6IzeG3OqIeAbC+WAoybr5v+xXhUVoHHMeN6Jw5jQS19Rk5bE4SJtJZBgJEPUtmTiQqG92nurrzHiJrMOaOZ4HLEPZKbFGjFqlta66vv3WsGCjD9+mSYeSTwaLwH84A+WDwD/UuX/ktwYI8ghiCZ0RzK3aDtifwJTJODNguehXIJ1pQTzFZbU+lKkaRwXfOWTAyTFYc8lyoIQPTUTLkpMYvXyWVKaspP95WBtMDkxG3RENCEsxoIfKl/h1AMSM98x/R3dpQ2uLgEA20ycOUyDCyAGHeFVFL2TdWFJqqE+QdVN9ijx3ZikKt23qAhyJiaktHd/VhCiNVopUab4kYrQKECSzT4r7ZUVRxvNLBY9jHD6sfIDAPQBqgFhkLBYMylL7uMkiYHCCDdecKvFi+rf9XfbJT9mQtbjucPzMdTgHDK2amS4aRepTzUpHJA4a3ScR6E3k2mEqH1+/dJwzCqePqSNy8oomFR+Yk8ZatU+h7trQwea7/G29NqwQpNtZTcZx4od3yGD1CXUFPBmG+8tWSgVILNzquS0wGI/BBD/oGnB4ciLrhChoN9bxIGJ6TgcSde9fldMkw4pTDowXgB4zgKJyXswKyqjLEfpqSgsJUcBeiM8bYzq2HvVUFSBAk6TfxY2RKUkQSQYyFDOE9pgJbmd14yM+bFNLFkM+1+OqQdECGnIZZCpn4FlJnKu+fHnUG7IAkMRwWHlywaLBZhbn+gMzTIEO3U615NwoxI2TjbojBZhIqUwjoyV9SoUWb0k1/g/Fk+k3kMDZjGy3XlaPqxxDEoxBm2wWmg6rxcLKUaPX7oAiokUnbSN3crLoXk82PnvQUY8qiY/IiO8rg7VWxcTLeHARKU/LqjOrV5Jfcno7fSywP85xalFIQ02VzafqrLMOoupEnGgXwZa4Y612ubLnsvbWtGkr67OrSQS4A/uggSc1OXK1BI5f7nRtHXNkofhYLdTxsblOYTZMZVNY/8yJNJOrGWnXEh9Iqz1VhFjirEcRz+j6oLoA6DkfXhgzspUX1qTzQ2CnvOvDqXToWDYSNfWjfrvLQQuh/Lub5nQFX8aCu6DpFMozsL3gqkfAjrKJbWaQCtV9CUjZ+ekbb0NStNxpn7Mr2IFLqIxX6zcNjb66wMN8RN8geLHX3I/gUioyRryy+fudTluavqY4PrETHVSStHpSf5WjLoJbFXaR2dDssNBhYcIUkl2IFg4Hpg1GoUFuXwdLWLEPob7pkGPHNXjiPEFsdmB7sIBE6XhxJGWW1zyBZNYieIL3Y6Chb2DmgfTCK+KOb3gcp0pSUFMh6ykiXVNFL5/hSxIOjWS+UpwbSE5d1RKjYkMEm1tq35mbqnKD+C53b0fEgtAzyljrONUo1ZWD0Ntm1P7pX8rJ1ROtpk2FkD1FUVFKj5/r8Q9GeD0VZiOtxxZ+NSyOH0tD+w71i/bqDM2wXBEMEbE7Eodj3NRCNsGXYpIPsIHl+DfCAaQdep3kgL3Tkn81B20YGizShWUJbvc8gwaz0nM2dTp2xy/Wpk2CEhPAlK9SQjOZaDpp23m2KZBjxfQD2HKz2JkW3n+p3YVruOBYAijqIxNQhyZmPJbgTqkEJ2YLuQDf0NbBKUYICB/TdNG7c1xXjI4cYBHmZ5QAbDVQLObMWbyNDqQgc0FJlqIah38NCAUqilx7cIb0rOxne/BxXR7szm7hRanUVbIsnq/6g1XTJMOpNSETozX3xpKuegAVNTIM8OmFS6YQNPFpA79yQLgeUAl6CtajYq6sMdL8La5J9zWQurhUjlTyWvvPgNaMBj7jxTcNT+zGwoDHvGOI+QTfrPeW7lEEZnLYWCoIe2Q1DaPN6hesVgzJLny3a1ojrWCLGp4534I/SYZtcSycDR/Bpk2ESxgHKt1uUljmw5eMS8Lpq5DQhFPUcuuydqBw2mSSFQJtIpuhiP4lPb0+/RFenYpiNEzZHYT5saAQp4tncKIFIEAB9HdpgWIiVrBbYkfH0eK7TSP0Ui9EU9fisFh+zr7qgMTKg0TEjz9WJe++wJhmc/7kEehpOXAZjV5QCjQd59DTJMCoiYW7byeKRQZ9VJV7JoPTgFC2FshakDq4RrrymP5Log0zr7wUWZv12MVRBQT0tqf/3nanniLUPjVy9B5LYUVgfZJUWZun/EL1IUYVpW//0q1R61pWfPA4MDMhg/XC0Cs5OTw1SdM+TyVL1FZ5TKToZJZ6FAIfmd5pHM99NGeKLkCKfUyLDKCjXWQUnS0UZJvn8ZCKi1yeF8F/q7ISqTIV8EMGa3UkIUVkIQ1AVipDY0i3d4whsU3iufHUeHerASXY8sNEqP/5uHpqAE5xTWhnb0shI6MaaSh6QIRkYnWmlIJgd6aEYSOnNrm04GmM4QjoVI03znFrRuuXnalyG5pyMZJ02GUaWtgSOg0UYAkuwXlAuaJybBoSplK6kt3zGvlgrWmsp5CwJPah/NYze3kIpMfIZi65cD6FkyJUvo+0e7H3mNrmfojKgEXXyEqAPSMt2WlfYM+EUTPlVVLVxc3bcWFwGm0sR+DB7irYuX1/XjuTZSULFXptpk6H7+xCS+kj0bE6gPznH3elqGT8LxUbvXbnBJuNS+fgzf7c2vRtEt9WY7D/MIXSwwNEg1u9dxGQ8/kw0Ut/SEmw7GXIdGsTm+Z4Buj1aua6kgh7thm5aHYb7A31+lWWoZ5mk37ZGBAH8fI5ZZAPLCqInZaVIHxE03bJq4nR0ky8YHD9uamhANDV6iNcNPLEMneDhXj7dG1CiFQkSOaMnhFitq6T/h8qH6lhISZ8ptS0DiBhPEmxfp3meSOsWqltiu4DIOUoy31MmQ3d0QyJvHWPwyCC6/+DWoRtpsT4o1A3FLWdMArMS6nCkUOZKoWcwFMBT6BOG2awIlcmQiKIAWilWLmgolsUiffhDV8k5JP0PKqfv/LjooAy9VSd+ei894iqx3HhSEEn+a1rkFIhTVdMjrRJSNhD5o5Q8dCJTJ4O9l8n5rwY5AG9qxGE7nI23MmDg5jI0nKSfTlhksN/FFMe2bO3DBKt3sxmZO290BPA+ksxJrmi09IBLi746nCAsDOx4tdKFIRnIEWn1PVTRFI1XbYykvmAipzyFnnwmskENJStFDdZaBgRucB+/TIkMtlOt8xld+rNXwMONVjuQXF58a96cApRugVdq/IENV0oxzo21sPpVggaNVtGmSfHKz+CAMDz7+ZhCfXTtVG5SnGq4PubqJyi5L4mpHcKXZjpV8g+mNSBDDxjS6HCEiZtaSpfRN3ZvGiL75NU0f7dv1bMZLK8IMRG4AYogczMtMoxCWKY3aWRUir4Ub9qafqClN3XrnY6YO0/xbyWke4qytthjYU7ApDIChzdsZ3Qt9BkmVvREV8vYggLExiIiV+6LB0mNoh0xJNlBAIMBGRgYepfRct7D3kztg3dzDY1zfqD8FC6i6GdddZXSUKrQQQe2ejRlMozoOB2UPR7fHBUKw14spBDEX4WMprpEjym6b/MF91xbbWoZnHKoLAi1oWXgoJjC7ROsULXQTwPS1P87A6AHi7TcJvrUlg09d5SNQiF2SIa8UsLOyZNCs5+E1NQuGG++1Cgk3y6RDwsJjHguQ3x0tzEPnQIZRuAOdFVJq5rHuRdLdf94jJeF8+MYPMvvHXVgpFbjUSOGb7LEpbzUjuobf/W/YDQWYViBDT4k3S+JRsspSR47IsD9CfqTdTMS/p14DDg1IAMqaATVkjHmCWsDcfubioSabIyBFjPMekD/oj5DZOQJ8xTJ4KddOXSIGzpPZEXLKxO8TR5PfLqB8GZNb23fGE1oaQNfFUZKbMzLo0FZe61LqBA2+9AwPpoLwdt2MsRB8zCgfXLo0DQxh4cUYbVAfboketZ8QAbA/o6CAxfP50rsg4U3HZdYbmzpuCVQBAKKN7A4ysZ1mBYZ6zTJMFIi9clmvymehXFOrl4eUD84np8s9MN5yZh6Rk1LaFxHyZvx5a35fl0WOKRE1VF1IzLkO+KEFLOcRm2lDhQMPDHBkdRoFOvbAxohfiBBgKH1sY0MUHQV7wOUOiQdFPhvT1EZhb1/G30RhAmO+H1jg4ytUB1fDSrOByN1iBDTIUN9c5+Ews7+tFMfM7aFkAKZcw6sN3NRAMdin/FZgELAoF+ov14kQZhQRfQv8Tsty4W5S7jvz2Ko0YpGsjTYQRZDsDq49of7GMG0n6QTcqawJKw0WzJA7aXKIFSoxGwxI93TdCQMo9IpJoIpgfzdHFnIAcz4VReK9PDHCUj1maVpkWEU6NUOunuMSuQU6mgl/SZGfQlMgvMIE9I+SupLUVC92FCE+kS6tB4J2clPCmODU4O2uQ7xr8CeQ28IWR09jmqdLDxA0fHYiIvRhB2DMefUtmE+MiCDsk23HBAqoGlBKfZL7SU4GhSX6aEd5V95DYNOjxwnnoQGQcE5bt6hd02LDHVjjislgyPgDVmCxApWR9iYK+2A2J0xhIN5GTIKIy7YPkh5JTbolcHbV74MJeBlIa0D8SuUxjEd0wNN3uH8NnlACgCipwNKiAZhNS5EiG1kqMoJ8z9VPjoDcbDQZ0OKO2HvT/4ouDAKq2YqOIkbe5in8XcGlIDMDW+YIhlGoCsgedfMaOmR8K6tDpojMz8zUYqYUKIMJ4O2VSXusSgWpCMADYdpT+JB6BJJ9xE1V0BFIDdye8DEcSnwwIYb6XBHSaeUAjKSGm/aRp2V+MkyqO96uaJgalDQjU4SwfXI9dCoJ4Gqv9jY9ocZEa2NITm1zdFt2mSYpGbqP7UCISBAE2RRkHSWS56wVkqKnFo/5cCo5YrUliIU9efqjmoc1N7QXdubAYPaWMfejhyOZfDl2u5XRGcfAG/o/bEM7sk6Qq7H2ZkJ9szvwu5ds9g1N4tdszOYnUwwOzPBaCwYjwJGYWNjE+ubm1hb38Dq6jrura1j6d4KFpdWsLG5GfVp6VfUc6k89PRpoOPgIqEdbEGjO/NWaMC0H9ZHGl8CNNNv/Wa0s018lWWYlIryMUWR+uyDBCQNTqGVzUkqNzRBNgWExyWpPdlO76ivsD87j2ZmMejYXMAcgJSl69zCfamm9Cg7O0vlzZ0J/pRfRXDlpXfmiAZHRLBv724cP7wfxw/tx9GD+3Dy6EGcPn4Yxw/tx7FD+3Fo317sX9iN/Xt3Y25mBrMzY0qdgOWVNSzdW8Htu8u4fmsRV27ewYXLN/D8S1dw8coNvHT1Ji5cuY5rNxexubkJc9IG6LCTmj7JgS2iV7KCoAIAACAASURBVB2oYal90bE7T4fpOx/lsYd1qo34imUPMxOvkZd/4zLsfdeHLbiQL8IP70kz7cvOHRA6NTC8TOhRyEj1d6c/RliiQ5PgZirauhKjtixsYQsRaTTKhZDAaK/ao3K6PRoJzp48gtc/cgaPnT2Bhx44jjPHD+P08UM4eeQg9u2ZDwPJ+zosp17haAj9LgW4fnsRL7x8Fc9duIKnnr+IJ595AX/8xWdx685dOOAwaKVPICrS9JH0m9tU2iGlS2qygc3loH45umhGwOVfBRlk4V0fpiBAiGn0C6UN6TGMYLcaUeC5PN8zhKUb7rbGYzA0oK/MjO5wdGo5I3kjNBqG28EZaFAyz+at3Lj7MR6P8ODJI/j6r3kcb3/Do3j07AmcPnYYxw7tw+5dc1V1ET25fxN1B0cZai8iWLq3ipev3sTT51/G7/3pl/Cbn/gczl28Qipgvesw96zYPxuo47UJGJDGK9VseESjfm7t9A3h/w3JIAvv+nBx4s5yvrhZZIGDUGJLo4b06wywuKOqeqhjsvEmYGOgMrqwg7RCzsA48qrU/PwcvvUdb8Jf+cY344nHH8Th/QvYv3c3ZibjQUPOBs9XdoTtIsVQm61ScHtxGecvXcNv/OFn8bO/9nG8ePl6xZN6CM5S4ipUAoy88hbycdYPkCJB/g4Dku4OWViKEHG+Z0qzMSvW5v9fGWqEiA9ihGO2wYu6zpv2QxHO+gopUk1VdAWK65NDo3q9T40d4XT1Slj5QcjOsz31YqUysYwAKVKxtshhxqMR5nfN4uEHjuM73/u1+ND734ljB/djZjLGaCRxIAau7VKkncq0vNVP6/fG5iZeunoTP/l//w5+9tc/jpt3lrC1teUyqYY5MrPOSA0Y1GWqn0Gr9YlS3+aSaIbyRr9AGq+/fBlsDmHi0LyhKLWC6DCcf3VuHUBB7+mAhs2PAaMxupw7Bp5SYBwwulC34bWGVA0gag9swczMBKePH8YTjz2ID37z1+Pf+trXYd+e3YP9b5WC5XurWF5Zw73VNayur2N9fQPrG5vY3Nqq41gwGo0wHo0wOzPB3OwM5udmsXd+Drvn52y1qSVnC8CGHEivT3z+K/iHP/UR/OmXn8Pi0r0eLQMVS1EKJCILoW9SbQI+vhmzhTgm8WgPT3xbGYWCWD+P+MuUQRbe+WENSKFG6LKUupFRzYkDB/OqdTHUKRHP34fK0PiO9r0mOmcmGBG0Ye67tpuZmeDRMyfwjq95HP/Ov/02fN0bHsP83GzPIDc2t3D99iIuXbuFKzdu4/L123j+pat46eoNvHz9Fq7fWsStxSXcuXsPK2vr2CrdxuRcdYQDC3tw7NB+nDh8AK86dRSvOnUUZ44fxgPHD+HBk0dDnzmNGrpa6dWl67fwz3/5d/BL//qTOH/pGspWhTx7e51RjspS8Kv3THNCOuf0Q42jVOMWpjk0NH1Dh1umy2vOwznEX54MXcrkHLgXVqE8ykUUyBGj8SI6kiudVcrGTLQH07eck21ztRyxE0uRIwKNTqK0zWQ8wmNnT+J9b38j3vf2N+IdX/M45mZnOlXWwdjcKjh38TK+8Mx5PPPiJTz74iWcu3gFL16+jsvXb2Nza6sOqLj6ydHDipnyaf2PceroATx65iSeePxBvPV1D+Mtr3kYp44dhCA6wk6rVXnecmfpHn7zDz+Hf/ZLv4Unnz6Pjc1NbDfPy7qJem4vYoTFjWTn3c+G8de+JBuSB+qQ6TCImpb/EmToJtWJ78yurdX2cva2UnwuFFFqO0QLMvLEqVWhWZAhvk28Nf9hMiePHsR3v+/r8a3vfBPe+NhZWyYFgK2tgpev3cQffu4pfPILz+Arz7+E51+6iis3bmNtfQNu3cLCpDSsfrMBasjg4Rbj0Rinjx/C6x4+jfe+7Q34wLvfgpNHD/UcY7srg8zq+gb++IvP4L/957+MP/7in3fzCqAPSjx+5lhWUMXNluogGRxf0yC1tpbNAGbk0QBLpVU31uj1kwTzfyky0KS6VjBeQtyAu0M1dAFjH9WtocvCGjOfoEIVELSZlBK9D70osZ0ftICoNyBdpZEI/uo3vR1/44Pvw+MPnsL+vbut6dZWwWeeOodf/b1P49kXL2EyGWN+bhazMzNY2D2HmZkJNje3sLh8D9duLuLFy9fwzPlLWFpejaGoxWwzYvbLRiLYv7Abj589iR/4zvfiQ+9/Z5jIA20HGUqxNja38PQLL+GH/sFP4k+/9Fy7X/2itqF2YmKk1ZzGJDbMDXPUCJNgpHFNWYMSbNlEa5L8F5RBFt75fV13Tafrp0mWbljwYzQgL4crI55NYg9XZiUpp4E6Gk5b9bEDraDI2n+tOzszwRsfPYv//Pu/A+9+y2uxe34uoO+txSV8+dxFjEcjPPTAMczNTDAajcwYdUe2VHm3tgq2trawsrqOL527gI99+s/wrz/1JJ67eAX3VtY8lRLeRaUJp90D6dRlEAC75mbxTW9/I/7e3/wQHjx5BJPJuBephybeXAYAz128gu/9u/8TvnzuooFprBdMQG0IoGHs3SNVN8A70WzxqcPPu9+ASNxLslSJMpJWuv1KZLCUycg3vI/2ru2bSh3cIgFFW2BULVUCNFnvXQyozTmE9g7oHzgcCAm98pnJGA+fPo7v+eZ34Ps/8B4cO7Q/IO2wctvLniyv0tBrdW0dn3ryafzMr/8+PvH5r+DStVudYzSvFC0BhOU7uh49cwI/8gPfiW9955vCDjj3v90ycKmT1s98+Rz+03/4k/jScxeo36jP3jywkSol7uOEWwZ4sQaZULJikXbV1oQx2Ncrk2E8d/aJH+tuCd3XyQ1beOeNlgeKE9FORGJ7neToPN2VUw07CBKVUZSuFuv3hlY6e5EgvIfLyijB1aEDC/j2b3wLfvQHvgsffN/XY+/uXY72acBaZVreQlytz/fGoxEePHUU3/7ut+LR0yewvLKKa7cWcW91NcqeE2nOvZMMgODGnbv49Jeeg4jg0TMnsXvXbBiPIV6VX/199OACjh7ch888dQ637y4bDx7FdOxKHA8ethAFKmwGJFe+ksNXsOOIyRmCITjfB0fRWD/y9cplMIfo2rulK/2eoREdpSK1vjuP/nYmwiD1jIlWAKpQjCw8iDDFMj30eHShI9Ovf+QM/ta/9234oQ99C1770OlgwEo7G8/a+gaWllewvLKGra2Cydg34vjiti0nGo1GeOTMCXz9Gx/Dnvk5vHjpOm4tLpsxdYsIrJPSBwX9rIh7d3kFf/bsi9jc2sIbHj2D+bnZZqTIcvHneDzGyaMHsbq+ji88cx6ra+s07Ix89Z9WxNFqbJSA20ArfaAUyCe2DgpFCJihZbU+20Y2bOLplcoge9/1YTrl7KFZiu49sAN5wpSdWZsbhTpgzhDcwNsZgNfJ93JG1cqwBrIuvTe/axZ/5RvejO//wHvwDW96DcZj3/jiiefa+gaeu3gFT527iOcuXsFLV2/g5p0lrK6vo2wVTCZj7J3fhRNHDuB1D5/G217/KM6eONx0qtal9xaX7uGjn3oS//1PfwRfeeElbG01ji6wXKQXB0q/eWj/An7wg+/Df/Z9H8DMZNzjY2gjj/l67sJl/J1/8vP46Cef9JQu9NtaJOEUBcjGYbOAEElq9CuAsIBiHXkDjSCmGonGF/gB4goU2d19yjDpjLjUkAR/BqAnaxTcwSoyn49V8CDElIeYM8H7/TgRroOe0uywRzim3dU5fmQ//sa/+z78tW95J04dPYTRKKJmKQVfPncRv/WJz+H3P/sULl65gTtL97C4vIJ7K6vY2NwKChYRzM/NYP/e3Thx5CDe/ZbX4nu/7Rvw6ledMnbz+j+XAcC+vbvx7e9+K/btmcff/kc/hYuXb9DgkLwWqt0INHr62Auu317ET/zSR/HQA8fwofe/c7DfIScBgAdPHcWHv/09+LNnL+D8pWuuR+WKkY9Qmz/8e7UpHj7L+CSIpjJA55jqLNq3RhDEVE/nrTDeiqeYIRLdvww+qQ4cgwinAaKzSCkyordEHATevj77Qet3ITQISqbvaixaPh6N8IZHTuO//I/+Kt7zta/H3Iw/D7WxuYVbi0v4vT/9Ev63f/X7+PzTL+Du8gpW1zfMQLbLu0Eyzc5McOb4Yfwn3/Mt+J73v2PwiHc3HtEIN7e28Nt/9AV879/9J1hbX6/jMiCk8mAIFysUAU4fO4Rf+Ad/G088/uC2c4fWZ6eXTfwX/+PP4Wd+7eNY29iMOg1RQNmrWYOBXFcqPQHiOSU7hZGE7D0SUO/nyTk48hi9hORQgL9/GWwOYcXqupa7SuycvFeXZbsJc2RSEjM0JAE5OGJp1CxUbnTEnpOq9+MhsI5lH+Ddu2bxgfe8Ff/07/x1vOW1D2My7k6grq6t49kXL+MXfvMP8KM//vP4F7/yuzh38QqWV9a6J9BQHMFMc9oHo7Ub9+bWFm7eXsLvfvqLWFlbxxOPP4g9837sO0/YGaFHoxEeOX0cm1ub3SaZOQ8hSAA1RULiSXVeCpbureL5l6/im77uDdi9a645z8m/ed4zrvz8qz/4LG4tLpsOGEwLj7fEHWAR7oO92eeV5jBSgTfJECIlCCDMJ6TSgNkkPyUH4cUIvCIZfJVJFH39OIHlqVVZ3bJsDLeBYUY2gYW53sTQ0D9utaty8nqzIYSoYApHLKAP6qmjB/G93/aN+Ps//O/jyMF9ALq5wVdeeAkf+b1P47/+iV/EL/32p3D91iKFKphCu76IuD1qV+tayIavdADYKgV/+qXnMDs7wdvf+BjGo1ETpbP+AOCxsyfx2aeexwsvX4sRwRyfQ25d7zPU8M8tFNy6s4y9e3bhra99uDf5z6thmZdSCg4fWMDl67fxqSefqRYe01MIz3dSCFPNkJGXSoMNO+g6yWDpr9ldxAZzCrbwBB5qL8bnfcoQIoS/EsVRnNE9e5p1KpJWikrfeBGI1FSJFaS8SRVXqJwhKAumX7v+X/vQA/hbf+3b8B9/9/sNpV++dgu/8rt/gh//hd/Az/76x3Hp+q3EDynUcj6JitTbKme9L2mkCgq+8Mx5vPHRB/HomROmpyGnUAPdNTeD3bvm8PHPfBkrK2vQKG1zMhFyClqWzqNTBCtr67i3soY3v+YhHD+8f9t+W1GrlIIHjh/G//HRT2B1dc3pk65rQk56IzbC6xXdjmpHrnMbyr4MsT+OGrwiFfkyPrRqKLw/GcazZ574MdeXe6kwKbZBNpYwyJyTspB6mweRBiN0EB0kC8cPAZlDVdqj8Qhve/2j+JH/4Dvxgfe8FXt378LG5ib+4HNfwT/+uV/Hz/767+NLz13A5qZuiFlCGs9MBcCIkSPPw+y5c/1eeVtb38DVW3fw/nd8DfbM72ou6ea5xWg0wt7du/Dsi5fwlRdeMn1pNOhFiGTk2bZuLS7jxJH9ePNrHsIM7WSHyD4QtUQEC7vn8fmnX8BTz79kwBdiAUf9CgQRkf2TT0KDnTibCMtA/YVnJMQNuAjZn84j2LeYzn3KMJ4788SPcZixNWFowqMUnFQ3Ln4swxzIBhru0RVRCw8Gh8LAGFmc5SN+3x0oDuZ4PMa73vQa/L2/+SG884lXY37XHNbWN/Dj//tv4B/99K/ij77w51hc7p4BiMck9DPvk+jg+X3jMa83G4YQPQB3l1fwyOkTeP0jZzB0ZYPcM78LtxaX8AefewrrG5vdWFg/bkThbA/xyyt2axsbEABve90jOHpwXz9SN/jgaDESwWQyxq987NM2HgE0tNBSOG0v4CgQeXV9mS63kUEIBHryAnGCrPXIwGHzWhqnHWQYuYeQIWpHpf4oXSN7UxocnS2lqgauxiHKCssQwlgEiELG5AqSVEvZdF5FBO/92tfjn/7of4i3vu5hzEzGOHfxCv76f/MT+B/+5a/i2QuX62QZxm9mIEwCTcleVmwUOTfWsoRKVV83F5fw23/8JDY2Nl1PZHit/H1mMsYTjz+I17zqFIoNRN+QQ5rGMoiOV1f2J196Fl+sm3YAkFe7hvjQ8jc+9iBe//Dp2Fd1SN8DIH0ofYoC5iQ8lCzSdjIYb9Q3G5ECRTU8yXRzJLoPGbrdKeqjgDbkROz1KzaprQwURnBzktpex5Jva1gtyowOkHlfbeOfKrwvgypqdD92zc3gO979Vvzc3/9hPHjyKO6trOEjH/s0PvQj/xi/+rFPY/neGsmWFElXVE5kqUKVjkYiRUZAI1FEsLm5hecuXMFzFy83c3aWiw3zsbMn8dqHTlekSvw0ZXAdaYqlBrC0vILf/8xTuHnnblhezZty/Ju/H9q3B9/wltdAB9PtncBCUdB4SuNZ1eSpcd/gt5PB9evgU8wAsy6inkr45/5kmACIa7jEiwrjWxGFwlREb8tRMwFKR3wZTMOgp02dQxMi2hvVuF3XbynAvj3z+K73fh3+qx/8IObnZnHlxm38/G/8If6X/+u3cfHqDeN9POqOJkzG3eOak/EY4/GoLsN2uXu33NgtgWo/o9Goe/HtwFXQPSnH8uvjoVtbW9jcKhiPRrh8/TYeO3sy1At0Urp2YGEPHjlzArvn57B0T8866QA0+BHSjemumFF96ovP4Pqtuzi8f6Fp+EPzChHB3vldePOrH8LMZIL1jQ0aLR8HUSQ2oIJH99bR9/BiJq2/vQyhndlFcWMPqRrJYt1XMJOyowyTYny62ZX6r62oaDoEn0DGJyFooAw0+4jo3qoi6e6yKyWTnZ1MsGtuBrvmZrF71yzm52axZ34O73zi1fjBD34zjh3ch43NLZx76Squ3LyNb3r7GzA7M8FkPMbszAQzkzFmZ2YwOzPB7GSM2dlJfVPeDEYjsTdkTMYjTCZjzTgxmYx7b9Hja6tOnu33VsH65ga2tgo2N7ewvrGJPfNzOHPiSGiXI0SeXAPAQ6eO4uC+vVhaXonoVyNj0+BCPVfgsy9ewsUrN/DY2ZO2Q5+voZO94/HIHmd97uIVQ0YDsVb/wSR4nlj/oWHubHlnGQBa+HCD4Y5C8HR6zKz2v70Mky73klCpJGq9yAdaK2YlBFmkn03UupPxCAt75nFg7x7s2zuP/Xt3Y2FP97lvzzz27ZnH3t27sGd+zl73ODc7g12z7hgPnjyKIwcW0G1uCV7zqlN4/MPfgcl4hJnJGOPxuHmmJ//mlZ+h3duh7zu1B/pG3/qdaZ062r3QLM5X4AgYUBgIA6RXrbu+voEnnzmPb3jzazAj48DXTvoQERw5sICHTx/HcxevOGhrBlnISFPKqRhnLKUjDMb2fciAQk5F9VwGW96h/rq2eYVrJxnCu125P95BbPHrIlGgK4CMBAu7d+HowX04dmgfjh06gOOH9uHoof04dnAfjhxYwMKe+e6dprMzmJvp3ms6OzOpr3Lsvs/MjDEzHlsas90xivFohAMLezB0DR20Yzr3m1e3aA0ZfMv4duJHRHDk4D7bQ2nyjLih6WkDaEgU5ASfe/p5bGxuYnam9yrfkCJlOUUEBxb24Mzxw1o5ZiqBExobA0vSQwDNjsmYZWwvg4T9IOWZ+xX2t65cv+f5xjYymIaMUK0UcjGdfUvX7cxkjGOH9uPsySM4c/wwzhw/3IXWE0dw/PB+7J3fFXL1yXhk38fjLjffbhmwtYmVr53u57o7bYy9EuTfbud5J4dp8Z7bHNi7G7tmZ2LIFgdTJwRHYwBsX/4cQcFTz18M850hPlrLrwcW9uDsySOYjEfY2ip2HCd1FxjrltSLPwNjgsL3j1KavJMMMWPRJf8IC6kTZoj4gftVrirARFOODqkdoXfNzuDgwh686oGjeNWp43jo1FGcPXkED548ipNHDmB2ZrJjemDKafweyltNrFSWDa6F6kOhP/++n4gx9LvVT67XcpydUjFuNzc7g8lkHEMz3JACbUF6ETN8wGvRs+cvY70eWmxFhBa46L3JeITv//b34G2vfwTnLl7F8y9dxbMXLuH8pWu4dWepeyv5+gbW1jewsraONe2ndq5THmXGncF5vR8ZisntfuTpkf8IizrUj0WpMC+gtL/Wn7z3a1+PwwcWcPrYITxw7BBOHz+M08cP48yJwzi0b29zgIcMaicDZlpDAzB0DQ3ekLFu53D3K8PQvfuJYENXlqNlmDOTMcZSJ/T1nJUvcCQ+C1kD2Dbc2lbW1nDt1iIOH1gIfOwEQnodObgP7z74Onzjm11nW6Xg9t1lXLxyAy9euo4XL1/H8xev4MKV67h5ZwmLy/ewuLSCxaV7uL20jJXV9ZiGsCnehwy9NKtQWp9DS/3p8QT0ehvNl2DpE+VWmPzLv/dD3RsmtjFgWPv2IO5kfFw+ZEhDqy9D9bcb0KE5wU5OkXloyTfE63ZX5qulKy7b2NzqTr3aDDClSiHWx5vOSuT38o3bvec1WjLsFN31Govg0L69OLRvL97wyBmru7VVcGtxCZeu38Kla7fw8rWb3buqbtzGtZuLuHbrDq7dWsSVG3dwa3HJeb0PGcJNjTYmg6dDfTpULgQuWk4OMhlyhmzA2Ui3SxWyoltovNPKzv2kTPy7xfeQwfHvITocaTLPuT7T2e7aLr1kvtbWN7rddYsC6AGqcOznJVjli8cBwG0zvj4/2+k51891sq7HY8HhAws4tH+vHVsppWB1bR3Xb9/F9VuLuH57EVdvLnbOcuk6Xrx8DRcud1Hm9t17KOk9UaYCRf0QZDr5exHT6qR5Rj6EahGo+02T6riTOZT7Dxla/p7bDA3CTpEgXztFnJ2Q/H6ixJCxb5d3D0XS3H/upyX30soq1jf0xWce6v1JM4I10wenVH2ad5b8LFfms+Xo243vTo6Uo7RINy964NghnDp60O5tbG7hztIy7ty91z2huHQPL1+7iaeefwlPnbuIr7zwEs6/fA0ra+uqxdq2ZjthbtAV6n7FUHbmtl9Ijx59zCGyIQylLa9kPrFT6tNCmFZakem26AwNTL7WNzaxurqOLRSs1ZcQbxVgeWWVHs6J1+bmFpZXVu0FZXyNRLB71xzinpdgftcsxqPuZQRzsxOMR6NtUVd5L6VLOe6trvOow/JnLrMg4cuc/gwwrK6ge0IwZwCtyf0QKA6loUPtW/1wO5FuM/Tw/oWwi765tYWVtXWsrq5jZW0dtxeX8PT5S3jymRfwmS8/h89+5XncvH3X9VGq3CSrRQX2HNJHbVGZqf/UexNmcMgpwlDvEAVy9FCF6Juvu2MNW9jcLPZ9a6vQvYLNzU0srazi7vIKFpdXcHf5Hu4ur2Dp3hqWV1Zwt74BY3llFYtLK1heXcPK6hpW19a7z/UN3Ftdw8raOlZWut8ra+sum2UXldeMIr3ftLTBk7lUv0mP2s7vmsVkNMbs7BhzM91G4/zcbPcsxPwc5ma6TcfFpXv2x05aaI8ez5w4138KgkHkB4XuN7L+Rept157LWvUm4zH2zncvcgCAB44dwuseOYPveu/bAHSAdv7SVXzmy+fwmafO4bNPncOFyzewvLJqY94d8c/gwU6Zogrtm0xaqZFeGUXyvdW1dayub/jn6jpW17ult7X1DaxtbGJtfR13l1dwa3EZt+8u487dZQuPd5bv4e6SGz1/bm2RAMq45s4BHXv6jsbYMW88c4g1JwbiI4hu4XD06crtfUC1mr331vLY6E0FWr/g3spaJ8Ny7MYndeg7F8d/Bh8ba9YNqQwsn+DQ/r1h7IZSvu0i8P2mta1rp1Rzp371+8xkjEdOn8DDDxzHd3/zOwAAl67dwpPPvIAvPHMeXzp3ERcuX8eNO3dx4/Zd3LyzhI3NzToOPMaw77bJzCkTMwDA0Hfp3gru3lvB0vIqFu+tVKRexfK9FdxZ6nK/29XIby8u1+W2zqiXlleweG8Fm5tbPmBsc8aYl9mkyX5zxAG6P3hIdbINBroRxYUJ50STjVnrJf+wolq31MHqoXX4Y45RyDDuLd4tndWIFKMTy6CH7F1ZtW9dfyE8OFLTEga2oblgjvhL91bx9PmXsbK6hoXd81jYM4+F3buwZ/cuzG2zHzVEL/c31G4oTcsynDhyACeOHMD73/EENje3cPXWHTz74mU88+LLePr5l3H+Ujdpv3DlBq7fWrTXiZpy1OhKweSzT53D9epJN+/cxc3FJdxedBS/W52gS1/umUOsrK13qwFZmIH0w+zNxq4OaEn12AgEvmFDuZ6kNi1lRi0C8SQtaqiMWB6QGoD9DTuzs2TN4s3cv1iQyhchUFz37vjKewymAlCfLRlQ+uCgOk3R7uihfT3D3W7Sz2WXrt/C//x/fhRfevYCFupZM3WKfXt248C+PTi4sAeH9u/FwYU9OLCwBwf3dZ+75+fCqeGhifzQ2LXmotvJMB6PcOLwARw/tB/vetOrsbm5hSs3buPFuor1wstX8ecvXsKXn7uIZy9c7pZ+TX+CyQ//d//C/tLNvfqp+TYPtCNkh0T6+J7eMsbyoLKP5IHrlZkaYsoAOOrGao6CLW2qEYUUq58aSeYF0ab8KIsbrw0OSq0X4d6QjOmaw0lMA82xHFQiiwMymLMR6706wMzMGPvTXzxqrSYNIfTS8gqev3gVTz79gvdUnXMyHmHXXHcKeb6eRub/9y/sxqmjB3HqyEGcOHIAJ+3zQO8PUjJvOaLcT5rXkmE8HlkE+bo3PIq19Q3cvHMXV27cweUbt/HM+ZdtLvLshcuYPPn0+QoqES+FJhqsbQ/UA2icr6YhDhhwrd+etLJzUH1Btt50T9Rja5nE+4AjLzt+M5WRHhk6t+nshkFRRJfEm2rX+ZZ+h7FtUwaNSBkwvO6pIwftDeHefXsPpHUtr3ZAaWouzuL6xiY2Nldwd2nF+SHHH4lgRg9wTsbd90l3LP/owX148NRRnD1+GKdPHMHZekLiwZNH7WhQyzH+IjJo+cxkjOOHD+DYof14A87gG978GnzP+9+BpXuruHTtFiaWtRRf1iuaUpQSUmyzaRo3ixfxjQAAIABJREFU71+Nygv9XU3dZy9MQvrGT8yHteLmKwp3+E5lsW8dWDVSlbm7achPRmVSGkk3ZJ/z9j02/LkAVh3pUtMj1UXvD8WYWFkGvYEAGGYcteDxV53CZNx/tqO1qtjSv6bJlhGwzhKPqGOKKsNWKd0S6upaL+159sJl/NEXnrG6CgqTyRhnTxzBI6eP49EzJ/Dw6eN49MxxPHjyKHbNzWCmOpR+smxDMgztr8zNTDA3sxeH9y/gzPHDvA/hw6UpgaOYvu5ePCcWGuyA0LTioYxIiio0mPkYeXA2TT9UYSW+/a0fDkwYqstpkW9u6byaJ54aJ01hltZ4WtRLZdBfXRKbF7B+SvdG9KpPm2/xokFI/2pqWus3ZTD+NToUVyPx/+jZE/aOqE6N2+8xuRq7OjcXl2xjzzfElUYfkX2cq/6IH6kIIDRG2NLHhQXAFja3NvH0Cy/hmfMvB3DTP3559sSR7v962vqBY4ewsHsX9u7unqNZ2L3L5i7ZCXu8JmeZqFYLGaYasw1HUlJPeRzdG5Mlcy6ztr4K2dFyHX43kRmxstukh16EsJSHw1pehrNopmmImGN2/HF/Ka3hUFHUiI35Ss9cpt9ceTbStX6cwPVkCBFWn39nLy8Fr37wFMbj+Cqa7XLzXH7j9l3cvrvkPChYBVBh4ycZlB8FsBBd718GQLC+sYnnLlzBuQuXHagAzM7O4NSRg3jgeHc49czxwzh19CCOHNiHowcXcGj/Ag7v34uD+/ZgZuILq61oUh8hFe8X1WvTpI/MJCC8DyAqAlBZVjIQF0oyUhWvFCavEIQcnD8ZsVqeoQZV+cvOwOgfUyyE9NBQO0dEUq5oH50lxzQP6PUddAJSNB3ayc+79+ZiQn1TlFaNz++aw+MPntw2rWhdOi4ra+u4dvMOVtc2+ilzYMdcnXQKFNPBMA7tJEPIOtCvs7a+gedfvornX75qdMajMQ7u24Pjhw/4w2oH9+P4kf04deQQTh/vjpEcP3QAc7MTk3li3kwdSOjUPwoLY4ZIvGsYNAOXlB5FZfqKSuxLHdTuFQRn6oFrdlCl0vqbTyxrcEgtQ7U976WHotUwLZ6K85nCSCMKKaBWtA7zGO3H+Q7LvT0ZAjsIY1kN6aEHjuHYwf1RL9I/umGt0qT17vIKrty8XfvhQdcP5c15YmDK0QJZl1GlTRkskS1qh93SewAp00X3ZWNzE9dudidrVW+j0Qi75+ewf+9uHFjYg/17d+PIgQWcPXkEj545gUdPH69HN2wuQGGPeLI0kW+kCvZ8h6ZalvoV30vQ6lVAdbyewRUKoyyvAi2ykXaV2oZbP4lWnuOE+QKK/ZGOkMax7HWAt412zAN8sAvUAIs7otJj5wwRYhsZQiqm95yH1z18Gvv2ztvYMK/6PadSnFLdubuMl6/dAlmJzeNEFBTY6RNiAvwn/XrgYExvI4MEA9CU3pSCuACCIGv9AaBgq2xhcanbU7tw5UaVoXs4TpeM4zPV2RmQjc64rUZCp1YDotZ0B2nFhgzaBpel0ElWcoYeyjIyVT7CODDZzL6RJDQ2unEeI6Ts3nPMmuYY+qV7WqQ71tQHavRsmga16e3FJBkUrNwx1WDqmIjgTa9+VXjeRctb3/U3G+O124v1XJXza9mgHaWmsbRI4M7cS69NgJ1lcAQA+I9RMr2wqNGjp/XiONgq9VaXFq6sreNmWcKIw154k0bgGjUXFEsVAvRph6XUkJiE5xDISjOBnI4oP6VUbWkOqf3U8nqv1N/FQlm9Vw0qDgClAyA0Np7Y+Ao8/LszGB/VEGIGlp2mgP4IQmBD38xnLBYVraYIhbQ/IEP3J6cQh8LsouDE4f143cOneyd0+eLUKciH7tU6V2/ewYXL16uhueydVorx7gAAu6O+oiXGG/3NkZ1kIHRKWy26vFtl6NVzeyk6DvchQ91VVxOnQWclATaw+pC4MmNOot8buaLPEYQEd8P1e0KoLoGegTD3UcO8fap35TlLQq+Od17ZoI+MdMYLyUQ278unhFSEdIaeJqeSc7nMF2s7IT2UbWSIcyR40K2g8vpHzuDsiSPB6PkzO0JO91bX1vDn5y9heWUt8FwbOI6Tgau+LA1Vsya9iYKnYEcZHAi7fhyvGHw8TbdxKWruyrfclwyjbgGDI4GPmr2WEoCuiXsa43Qtn/bKwTGYuKK2GnKeKJozEt8qtAeGiLqwNmmtWX8T6quCmNXCfLJsJX3PUQIl0kcXS7r77DgUzYo6COuF+lGnKj6UQzJwxDBIq2M/Ho3w+kfO4IFjB3tzB54zdF1K7zcA3L23iiefOe86rvKajYS3DSONmY5H3jOpsguB6oAMzIuNS0nlqjLWN4GqgeJ9yjBSm+zstASCYvHHOQlKC06hCqgEegPcFzbMNANbEo3EtFWIL1eQKrK1ps65KAGYGwlo0w1sfL3OrUOPqr5ZFmTIjlkVapNpLSM8UHWYM9HNIRmCxsRrlFJw7NB+vPGxs9i9a8544bEbWnplvheX7+GzT51ToaCbs6IvJO4hI+tL+wqwHe8FC+7LwEBFOG1dsBshfDd0DWB/PzKMNH2IhsaRwRGkQ6fIhpNyoQhM/R55LTNoTQWInVJZL73Sf4oZd3/+k5XkCMhRSRIPbiDMs94X+BvJGaEdnXQ+FBYjWBbhMSKAqOXRzolGSwYCKuekq/PomeN486tfZfc4Slj9bdKnrVJw7sIVPP/yVWjEEusXidHsFGbZSYZk0UpvQAZWgdC/+pXLSt/oEhjfnwwj3fSye+YAyl004LhrG3M65UztpKdwZYQHgCa+xYRoISz7ixpDXU9H6Rl7aJ+912RTfTkDOvkrlrbQmJXSTcqonoV+7iOMuVhbcyiWQ+tlmxr6TTJYpAECIMzNTPDE4w/ikdPHuxoS9x2Gdqf52trcwv/zx1+sf0qg81Y7cSDxyEaMcmzcpV0HBXa0fkAGjRLBFgqXw8a+k5H74zZSJ9L3J8Oo71geHYrob2ebJzMhVqTQUNKIsjN2dkSQKkQ3h/JqcGZnGkprOxFaopN68KJQtAiwS3k8Iz9ttNhGm8lEBwy1L6nRlK0z0dNVJCsLwOK89TKkHDW3kcEnri5DQcGBfXvwxOOvsjebuyo8wuT9hlxvZX0dv/XJz9NUJxp3S5zed5FoBZwCivPQkkGjhPPmNhjmPgE8HRQ1awDwimRovA9ald8NqJhnwTw2CFzHXcObejCnWb77KrVuRHNLXSoRS8tq9GDlQLIh8P/Urw52I5e39EXbG7k+X4Y2lfcQDXj+o11pWsS5USGabCKFNuGgEV5hhhxqQAaPqDwsgl2zMzha/9jk0NWaO7CTfOXcS/jzF18OVuOGmHRkTgYDJaXpsrFTe9mQDA2O3cisM71D9etYFbWzBEY7yWB/MIUn1DpGPJnjXNcGw8KPh0pbPXIOXEadsErrnt9XRDD5ya5cERLpsQ6rI/TSAmOthL6lkHzGlxhdtmveuOtM1vkUU35yRFdjdCKw/ORo2k/LMEiGgMYqcyXFfzUor8pxCtU8RiGCj/zen0Q/DIMARCOOiY+rUdwUeqkI7VU0ZGhdeQUxsGagLL3br0SGkZWXdAISDrxxvZfpO1KHkEsiY6B+MAAzbPZ0CQ5QkhCc92uY8s0Zdkrqk1Mc66c4X3n+QXOVbqC8vKA6EvHgrGj/VYNFzSTqI8ggAgjJEAx5exks1aqGvryyiguXrweDbx3VyJc6yp2le/joJ58kXfAYlF676Nhtc+63kmBNWYZ+OzpuYv+ShTVwKGQa9ynDKDqdo5c1LLRuS/870LJxpb7UUFoCcghlCNbONVJomiWRv4jilIsTHVeEuG2bWG5YXa3YOGaHHj2JYp0fOw+O6dkRAAnL0nVWZOlF1bOlQsXlM3p9GfhytQhuLS7js1953l883EgZWt9VJ3/4uadw8coNQ3WXAT5WKkO+xO+GYjLY3j5SQwaOOmHH2r51+jENWpVC9eQVy2DPf/v5cw11aoidUYqktImEN2nqvSAYTeRcWFQDSKMr8HydL4l1TAP0PcwrOBJWxzOHIhkrzHtwqgJ6qKdIo/dMhg7hnFXqm+ZMHRkfUO1HFxCcx1q3+KKFB7m2DNpvTs83NjfxR194Bn/wuafQsj1OmfLkenF5BT/9qx/r/mqr+jrLZ18jwvPVO8JiHaso+V5fBgYDyVEnoHzUFTuT9fkKZBgZmqoxJvTUfwutAESiXtUnwVSFo0PKAdWDC71tTm1fJ6i8fEaEGtGifrYmxMEoCGaF6CbZObQ627QCp/WtTuQvKj/zpewK0VKemE7sqykDUopRZXjq3EX81Ec+hqfPv2TzCb56x2oALC7dwz/7xd/CJ598uvtbEAQ6wbEkF3AGEE/SBq4TYDGWt2Swytl/xP4Z6EPi71cgw3ju7BM/1t2n80AV+UQiU+YenNL0+CRm4IOsyBqX2pQiRQXhk6USaRppUlKOEgES4pKpt1UZ6F79HlbG7N1KXl+q4/vEnzYFqV4XfMT4cLlMUTZgvCKl49T5Ox+xaMhg6gjZOHT179zFy7h+6y5OHD6AE4cPhEcqQeOxtVXw4uXr+Jlf+zh+6iO/i6s3F+l+jEw2NpR26DKzL4EXlMaL29xRLOjtKEOI9hGnK510ZF0i5r9SGcazZ77mx/pr1dy3H+y29WEVrpTGA/GBnY6eEfBjEkrRjJEQ0pboLO/mdiQQnEzPadjgA8oQErvlwVMdgwSiVT+qLIEXNQIy1vhXacjZrJ4DgsoaJsCge8RRTwaI69SONzt4bdVI8eVzF7C4dA+j0cj+Xp+I4O69FTx74TI++qnP43/95d/BL370E7h6azH0SaLqiBILOn7phLMIgVwETVUJO8p2MnTqKaCz5M6bDjnpN/wRxb+ADLLwrg97QsBGWb0cTKzhgUrYdwzj3TAlKOyd3ie5I8AGC/+Zy7O9Oy1xmNX6itq9VAvu1MWNLm8Y2Z+BSnriyNHRQd0EUjrMIzOK/n0g9k31WGCWwV72RlWHVpD2zM/h8bMncfLoQezdvQsjEaysruPyjdt49sIlXLlxp9emf20jA3xsG2xvQ/H+ZeiXF4sSodP/DzLI3nd+uKiXSB1U1DdGlAB12hrJ4xInNPi8fNsa5DD5MsPYRjI2Hq5nhtTx7nU9tjUjQsdE/MlDqjQkaa034jB0i/WobYg4mR929pL6ENdLkkEdQuc7OSVxMoXK+3W0Jt/PV8xWdrK+lNtoi+2caEpkGFlupWlHcYOgPUc73h2ioKKh/rQJTFemO5F9VIbdDzwJyFWJtADdiweKl1taBfhEzstMHvZeyzOJX7oHDcPMl0j8ZJGL0mT5WVYSoNemhE/7rsZRx8L7a8hQYH7CV4g6SrPq24/hlNAmIC031fo5khePlP25qZ9gsPZ+M2DAtMkw8omvHpKDDXLRmrpJVo2Ppedfzc0ejgAmfcmVTPpS0spwANtOk72d10Y603O0nObAfMD5FpWpVLm9n6T6rp7ZqCSbTyPCY2RdOWgoRZ9DSKg7JIMBSolyMbfS6y8QNB5baYeBQ3b02rxPsy9fhPmke2DqZBjxLrReBsRkKLb2zl6llWu4S1YDMy77qZBejUDblu6en4Hi5Vak3JEmm9oWzpMhSCmk26wMktl4pwHIiK4R0groJvGpfYRJWzXkjAHB2EkOu6cyWJ0hGTTi1YhjAKfNIkgVe0CJ+2s4oMneL7dzVsKVUkMCwG54lS9ptJkeGUZsEJwkOappaNF2FHREU4xangcZtggXmcroUBt4OJS+MwbQJXr9oARdzXHspTZkfeG4MDHnswodPKGoRo4Z2vltllezMgMP/nSJ4Gd6lQ5HnWEZQscqe/Rm78VSXpalYZyBZAk+b+lLzzG5OUeHsIAe09Te9dWXYeRnxfkWD5yGiwpQtLKRiTVkIwGDVPETMA/vpV0kt+bO2UEs3DZ5qM5BYbYAPqGvCgtTBNa19dWgX2K7JArUyTsHJxoc4fS3tHZ+yaMaMiRm0DcMbePR0wWjZrnPHg2B60iavbeb+zh7BNeigcjyVZZhZA+sFH3YBoij7J5qUSI7bzBOQuA8H9D7QgNdKqImA++jKDlWsX+cRc35M09UZkvDAHTDplRjj7vBjGaxr4D0pCc+qOe1SVEqbuCTz4glkChVfyZbX4augA2E+eFrCJGBlkeHVJNoOLj7KYPW5e3FPvI5OeHUaIpkGHnK45MSe7WistUwlmFeXSjJqFeYeYpKkuvAkbkVEUH3+Xcjj7TDd+A0TPpNaorCq1D+qXGTdqR77Hjfvoxod8mQpXv3VJXR9J9407+/YWnZgAz9yUk9n9TjcOjqt2+BMHcZVvu4ZYoCnnXwuDjie/n0yDDqA3E9xcnHFhCF5By+F/okO2U/n4uM0m8yRvfkUgMJG6pGssw59VfpSeXRAbh4XU4srZl7oL7KxCrxKww5eBAa5eClSO+beCpWmjAnvgy9tpEhCE6A1Vt14+jDbVmJQY4h2soPDRIvRgyUc8rUzJSmSIZRH+z0aAZ15GEkZkvFQ2F4loIdJYeuxHDmW5m3rEpXn8jTSpH4FpcqVLcCRsqx5ckqAuX84Z2p6njGAB/LVnqUd3LkEpATikVXIceMO9qdcxdqVitFvgzBhmXwts5PSaPfpSY0jmGyxGQUcDxy+x9q6WTyY+muBj8bSYsCzqzrhXL4/sR6emQYmYOQcbgxeJ+F7nX0S2SG0qSAZBziszNoWLRQSwZKUOu5XnRKdx4xJdxXmK20+6dMnV+jwxGnR7w4+oQFCHJKks9JSjLqjo+SdToIpwj6ccJVV4F4HqcGzYygzcsxW6uKeGkvPa5tnKw7gW7YlimUYWQHs2gC2f0U9+aS7EGSddSfnkrRKc2wkqRtiyPngMfb7jN5dukZJykqfzJaqYeR43j+LlE7pCyWU11TyztkUf4k6YT4VDpCO8wZxer9cO4/TnDaMqSXSLcdKJup81hCUTYV7TLS7J89S22SVca6hh4QpKM2UyLDyCaAhGoWtdWrq12bQwf6bipuk25kVp3bNKJFXCHKB9zo1CyovvZTFRnStJQLFnpE1pd2OsH07SIWqUhxhctKFD7jYWG+VGm1rPmcQP5kUGmBYJaBnN9eJbrttSOEwgBAuwkAwydw+238+1A/UlNaspYpk2Hkh+L8hqgRBEsmYyCn6qVHhraApjO9E7mZDzVgRszIpwkTbrBuOWRzNeMnnpnnpT6xRhLaSFVeId2oE0qgDQpWZPQilrPynxf2JUcKa9SnpU4ZNLIM9V7J/ISmTMRXu3rPtKkzcmBlfhpPrTUW1Y1YbyndWGg4/BTJMPLB6AtnL/yundFH/eFOwKsoXWrug2pr6dxLBhKOFDm8VAYcgVUa1l5sZ4oxhvt89jqngGPyAQYYPhBRJ+Gqssq2ilM3pHmDReS4gBDbJhn0HqWhyp8al+MJuWvpq98E1ZdahzRDAv+2QdpUAFwGSXQk6WMKZRjp5JiXVwv8vKt2K/U/fdS01MGueKhD2+vb1u7tVjXk4J1uhsW15cZS21jgaOSEdLPjtyrY5kDk9IUjmTmR9+yrSTFSeSxhmYLXeuWKhj6YfVm7moYgDQOjgW3JoHpJ9UX7MwNk+FWLK15U25q5FWpnLQaiQSvnb1atvAY1TZ8Mo0Lhmu+pA9dxJaE0lVD6tOWkS4QmLLsMG664ExYVg+rzfEJpVdpstqGNKcLr2nKfVa/OXVxn1jfDjdCufTEx3cs5pbPoxQ5Z6VOaVFjvjBxAGqZ+2aAMpIP4PfEY6jAd5bPEtnQ7PNuMHZ43UBwhWqEmp8VgutMjg0WIGF7IK9A9UdYZCB/m00+NHYnxEn92/JPVUUrTY01XXRKtojQkF6KBVKLg4yRKHqwSx8eBpy4jFopwDf3QIMRxrjOErCceRIoUEgioCsQdcxsZ+srrX1E1HImpr9C5ddQzSl15LLbMLNZHWrk2WmysDgzTKcNI/+Qup0w6kewMxjfqWnwra4yiKm+Qga2D6hjzbNQhIhWrFx80UufSB4eIweI0CURq18X7yqgf9eMRxin0v/NtUn4+PCbWJ0dJoZsS6Vk72UaGoCzXRY7oTJPz8HzFAauglG7yCqAxMXRUolMwPxseMMHITo8MI5vsMnBXBpSvYuV0GK3S7wZJHOXcfvu6oY6CcZtxZqOQpAmmp07AkYQjG9NmRxOqJ+keOUtuG8INaZ1lCJEqy0eOkHQReSR+cvssQy+0UIqoPGT1bYfG2yI1Oy+SQQ01vI/Op0yGkWJZv/9quGZjxFhGf/7FyMWD3HuegNux0NnbqNRWsTrjCs8dIJXB67mjMZ/Jbf11GgiC6rJrP1eMUSkpe7i/ThqnqW29fS8dHpLBFNO/WnPdXv/tW7X9tgR27OM+mnsfUyTDyHKtXkbgnuqhWqB/UcgdO4U3wF5UYHMPEQtzQ0YeURscluBHLPiVNAiRgXcTzJmFf+lddRzqmxkr4C2K+qFPfUGzgEQXJkNRGYJeOCrRfaNSXJdofbZl4J+hot7OixP5fhaiAPpXfuIDPdSwRSxfZaDcbqd7UyTDyGy6xNwtrrnX/9TwhDNkQi/O7UTHPjtCsf6sNqFlYcfQlIjyQDu3xDKaE6V0g/rxA2POo5FgpUt9eo11ojYYDLfYBqbzofG2epVFLD7Z2v3T26dQApbfOgAMyWBOJ6y3TgZzzPqdj9X4+LWBkN+20t9ENCEgZAeFv4S5l/atPbolCwPHlMgwKsoYI3fp0LeYkVUjpLxfghYQDCdczC8bgCElQruwEgX+SuWFfppOVdHqSPpViAePKODfgEU+fe5bakTU5xFC+0pc9zNURYVDS0CvtMMQutd1LBu9yqIbzaAMKndWeon9BTMIE1KKioUYsy7UuTMltgPlk7CWh88c3HvMupgmGUZ+uyJxPezn3ldXmUKaZDxUBdCsXbysJwl5Ru+YRagXVKYe2peJwkQ8KdtwVCYn+koT7Y6MMfNrRdnT4Ue9A9s+QMZXdv4knySerYwHtSGDB2d3mn5dQmNKN4kSySD1e0VPbpuNtuHh0rvHqzmpPYHCNMlgDwj5J0UGSlWK9B6D91QmpFDJc5MCwmSyxHuxjMOnCuk04+50oseRzOYR3taOzRty1MhgPBYbmJzvhoUndQApoW04tsL8soxGW0zXxlKhz21kMI9VGYTq9v3X9BjvV4sUP30A8Pur3LRMa73VNuILfKuPLv5cQyyfFhlGvPrJ3sfnZYxudtzgbKkD4QpKx+nzA0XZd1TwwDS/GS/xF5mk7/l+YtvzTD3OrTx2zm/pSuWHWGPBPatUvjj9IX55/AokGjojo0YmH/tBGQIjVq30avicqCGDkabTvazf1C/z3Z8gS39MVTai1V4B+urLMLIxyGHdEnTUQXdDgTLFzpRzn9IoS6L3lki9IUkJNxJNnZJGQtwytovfKxF19DxVNGydJHuIVbRnRYfgxtHABYFOyp2Os6X0uG+xl8RRbLUIUoZlYGUG3fWPOEt2cKptB90kPeSTwJEswnTROgLhiyA+pp7uiP0OIz0lMtgjpIbY8AeEzNtoMHSVKfiOcafeGG/oIb2wgSYShGsHCY0KVb3CivKcQkTSyV49d099atBUxw/KLvXV9d0cysqMx65zRhxhGXJqkMjXaG68ijk1Db7mWNRID1cOykBlgDuu/1Fyr6JL4FRUAaAkGUrQLe/1BJtlYGrEq3gpcjIM9g/0TYMM9gipnbMvjq0a/jWtKghtA7Phh9lrCfeLMaJIR+FTktIs0hUimw2PQhQz6CxQqKTwSeVhqY8iRH5bnK5tW58JvdzAC2zDwuErKqm4bv25AR0hqPK6n7r61ZIh9A2jSSHVVNOEHU7vlI7Ee3xwktmIz4oM6QI12+WTywJ7g+MUymCvoTE1K2IHhE+MS/qtdRJzIapYLTfEsJipEhsaI7ZNAJqYolyfBKayMHD0vSPbNzSxZdgqYxhEOsKiiOad+sA7tQbfJTp5SAPEfIrl78tQNSTOQRSD9F5S1NK6xI85KYFBCfe3RUIirpNnH/+Ox5gu8inUaZFhxMQ19+sMVKB5NvtrHo+wmx0koe9sq5xLsiezzWRbEnVEQkvVhgDIzmAhqdTB6fkq7Ub7SlmIOGTc4diKtlH0Vk9uIYiSUx4LfWeaNrJebH1W5lsyeF+esxu4qPxA1HUoZ3oMZE48qCQgZ+038xNcodIiHmMqGQFqGmTo/iwvR3Nul4zfUL0o02R42og0YdEfjUuRlzqwsJmUYZs7ahw0qdZjHbbbXNMeT8NKz4Yg8F3mzJykMnW60hdEeOhLqm8RINNpKUM7zn3D+m7JED5hovedJl09FhppGBPnf6O1Zrqe2DR5HWJsimQILyrrP93mZHSeoTN1oxzy/xIZY2NiSRh586AnZ9Bowmv25oyDSkhtmB/ro708GAT2H1BnD8c8ihoB/F4ICyURtUbkyH1c8T5y2yjD4HPLqPdS1OKoblPbUs+ahXrOEO/0lsRPUVswFbgd9PdvSuRtSmWoq0zFBTLmnctufGvn1ZBtkqROot89QfQ5hKU0HkGMSY6tnJ9ZyiJ2G7kPXaWy1aoS2+g/hfowRdO8g/0k1XVeSKYc9gt9N5kI6tgvRcm5XJZB1XZCegi+lWTwP+rooqsMAoqkBeDHWXn+pqPJRqlvLCygKEg8VyKw6Sq/OKDqy1fk9GEp51X0r7IKpk6GLkLwhM5GoO5MGxp6CtQL/SL2F4aCZOAyuLcWmCFH1CZn7IVMMcDtbepYm7RRJCkKFFcQs1qYT5atpO8MGLWwt8gAikzipS67OgjrhfpRpyo+lEMycEg1SDNAYSCKffC6u7DDa101ahfZjbvQbnA+0h/GTMdDghq6evVeAI/pkGGkNlk4nDCK2US2BEYYGYOQ2lFvgPvCxnSL2ZJoJKatQny5glSRfpCM6Tn8EIBZvW5DzGu68fU6tw49qtI0ejibAAAPLklEQVT+QfDDvIMrMNQ0LXcy5AzT0zy/OSRD0Jh4DU8DyNCC3qMJ9mWEj40LBd1dF15MCDSYlvIVYDveCxY8HTKMNH2IhsaRAfATl36aKXUdhCIw9XvktcygNRUXXg3fynrplf5TzLjz/KevJNrhpKgkiQd3KOZZ7wt8+ZUR2tFJKs/hUBvLIjxGBBC1PNo50WjJQEDlnOhmoTcXMC1mV0gdSXsByLq+xPpFYjQ7hVl2kiFZtHU+PTJ0f1IrhTXfnVWi3oHmdYqvDvYuoNoJb7xZKlQAn+gQc6a/Tml9hGV/UWPQlx+UnrH3DtPxp8mm+nIGdJKnR1SMpPItJdSz0M99hDEXa2sOxXJovWxTQ79JBos0QAAERdigx8LlML0BCmJO2NsI/A/q0MqdDK3zR73HozmI5Xr6YMpkGPUdi3aJRX872zyZCbEihYZwvoi7ELUjglQhutoX3Vex1bsLtQtb9lIP6RWKFgF2KY9n5KfX3GuUFJOJHtjRvgSIRy369ApbuUaXrAxNMStwhvmcxHotGeLhNTYqOhIjzqeQXlVvvDmGql9ewYl/W8+qNMXpfZd0XolTQB3zKZNhxALYLYV4MxBJ+S0JXMddw5t6MKdZth1fnUaIceXTVyHicprWZweJSuT/qV9Fg0YuXz3b2xu5Pl+GNpX3EA14/qNdaVqk8hqPGeKVXy8S4is41IAMBgzEei9t0DKhe0Qvr7roWFv6HCavaohJRzofs4ip5ArJJj3WzGGmSIaRFuQDUCV0VEKua4Nh4cdDpa0eOQcuo05YpXXP79uJSL1HduWKkEiPdVgdoXcS01groW8pJJ/xJUaX7Zp3rTuTdT7FlJ8c0dUYnQgsPzma9tMyDJIhoLHK3G9RVcLEEzQaoEnvdk8IBgMrjomPq5F2gXupSAkp0rTIMLJyerO0phyKUXG9l+k7UodlMBIZA/WDAZhhs6dLcICShOC8X8OUP3zCTkl9copj/RTnK88/aK7SDZSXF8CfIixe1rGi/VcNFjWTqI8ggwi6Z4cdAUMqsI0MlmqJIObw/s1X1Yzh6JfJh0OUtu+Rql/s2G1z7reSYE3TIkPYqealVGtYaN2W/negZeNKfamhtATkEMoQrJ1rpNA0SyJ/EcUpFyc6rghhe69iuWF1tWLjmB169CSKdX7sPDimZ0cAJCxL11mRpRdVz5YKFZfP6PVl4MvV4o4nUKPIYNXRlp6sheqproVk0H9IhnyJ3w3FZLC9faQpkmHiUaNSFI8DOhcofL8hvEkj8WvrWQdeDSrWl/fd2ktwQcmJeFakfFIKZ80CD37Dj434RBqsNK8I88gWzeA0kY7/dOVIvS8gWYkey+9Bri2D9tvTFzlS2Ak2Nm2EQj9uiMR/CQ3pa8oWuIvWGCo9oBFFpkeGkaFpNcaMnvpvoRWAwBjx75NgqsLRIeWAapT6MJL1qEjI0SX8pRk67Be14RCqyJBy8xBXhegm2Tm0FlKoZ1MaAbRO5C90+v82dyYLEtsgEBX9//9MDlYVDyRPcov70tO2xCYo0GJPTrkkbgFPyUQ6nddVhzVKjDl+Vz8DX1LtaXFxh/yY17cL4M/S5kp/NZ/8mg6/CqQ4oqs9tQTU9PrvDcjbeLog2PTmc9KmWB2Dm2xvKHS5mtWnvrBkyr4MHAsR1V6TbLwKRjk5WhZ70CvH/MKlEJEpuBTbQYIrUhynWmN/0cE/O3xq9a9xmjGafTycXcnFJR6Ct9lrE8b8Uxlf9JvbO1Csxed0+M0I08pA8S53laOGFM9rFUlqDz37XkLebaxY5aAyqsoe193JvLfa0qcM1VYMbC3dHI2zeF4yjZ0Z9uL1MfdvDt3DewSb20nf0pXjoINqbbf7poNsCnvwhHKAVr1qRDaWaCVbHEa9gTPgXWis/1PozEVaJ3gF5PiaDj/WbtpRTgsRQKutb5cEJc4ZHEa7ll1Wja+cnenx+K3gW4sBk2ZQ9I/SwsyBICtWHbDbQS1BBwhLltyBqQzolB6xn61eGxwe5fSKmKTh+dm8iXyct3ke5AZ3HTj5rmdXJvyGZe43Rjk603vLtBScTfj4Ze0p0Ede5s8m/DUdfhpc+9UlO5tQTx24rswitK3BCwptNF24v3EghiIHn2j853HfZPZhxshG4f4D5ZNLTtCIPhqrbRQWw0IefxXdPpHM835DvQ0Kl//HduLt8nzr6R/NCfdIuNSrPtzslO6v3qtQr1+FiZBN9pr6NLe4BslXdPjFduZCTKWdaAOm493K+CVpzzCMUq9QtbKkDHPsXgakI59Y63kJVSKPhv+uiVxdsz5EDZdfkLdZRYftIBcn7JRT+mPwuKPd+8SlT7Zv/60susei+F10EDiMKGmlu2guOdoMxmo2TzA3J83EUIWrglVNSj9WAubnm+cU7kM6/Co96ZDc8iCnWmqTLJDOtjYtmUytVqFGwS6QD7Ixq8zE0JU9UaBv8GTr5785P8kaGGU3yuGDfUSjxvHRw/66AwiJHE3TCY9yGU0xb6ll6p5p3nQwoGTXi9LGwa8RtIwFiqv3vc21dveT5qlfSxHT9mt9ToffPJO+aW8QroERAgejSo2VD49sNTY+dHRaS7hcRtBqTTxn1dsJRykrs9DIROcFBMmEbacxoLNlxwBMRFeG9AXc5CRr82iTtu3Ix8se6ETQw/ekg9u86aCMtzOOAU7dOkil50/kdwlA635e92pZsNHoCAB8hldyxaXPd3T40SHaHN22V2pRPySdwHl+OtGqtmHm6DrRYXeodBhnMDbQBb0zKS2t5hT2og+8rx0XhnA1o9LgBbIaArP1q9vU13PgRwgpMCTecy0q2bLOuw6NsXTv0VxcXPJSl4tzNpLZYt7lyxGY7M7sIIkAgrdB+4gOvzorzlscOKWLDVDa2V0nsYtuULBp1b/XcoQfZRf0Vu08A8Tp9irDDg6k2VyrJvTbYG2KQFub14V+9n5DlaUgfwIcNOaEPxTAkxgi6qLDEGadjqE+lT1LMXSbPA8ascpGc2nzr+41zpXBdekls/zPOvy8BJnacFurj3JFqrPEDN7mnEDgOR/Q/cBA50bU4eC3pYhWikwUUM0/ZcI1b3St5ZWM3M7el2yJZp1XQ3rYiQf1qjUMJXWbnDwjNkAit/2s26nDc4EOQnn4eUPktW4R3UpN0Chwr1MGt0/1D3/Nc3J8XuFLOvjNfUazFELCGS7O8i5rKRUT9ZLCIyvFbLMKmW8ZceE+f1/qSB++WyzD4uyySxSuQtW38qaOep82aCVeS8fPxXLk8P92MOpLX/LabwVxWfaiwzk52c+jHBK+fc7+NxAmy7bax54jC1TVwXEpxK/r39HhdwLxPsW5NzrOg2ZATv69eJ+/z3quC4rfcMaK5NyJhI6qTDYlB79NL7aMBcBZbVlYultFoF5l4kZ4sq5lIqDRTF5Ceq+gyLfnhHnIxc3INx2a4gCsY9WN2Yd9acSmxxttyYNB4mLEy3WWTNdK6UM6/E6wCwAW0WgHBvllpUKeJ9EANsGO33e5JbyrKp8VqkjLjBZnMtizAgbjeHlyq4CaP5itFHgWgMeyRQ91JzNXLARhOLsGArOCYdtq6XmKsrmzFuSuTHnXofqWPDlG/ylNMI5tskQyApzK3N793fapXeUyQ52NxKJACVt2QQ1/Tqy/o4Pf/k3nKGconol7D/3swqBMakjGFD+DQWnRqRYOCqjlufZmAwdP2Aj/Kc1u2ucp05LXdJhxDuJZ6NMWIBCU0K9IxnDqR47jwOQrnK5mnyK8bdWIz3G60JwIev0UZqtpRF09yuPdp8hWEGjDNj+ow88HszCBfH7WyU6P8wIVSrh/VinVn6nu7eR425FfIt67z4jsPJwThprfRCtFGAKn6vfo1oGxqKdCU9cfZJF8MWwCOUUnsMM8UWzfD6639wnOXYd25Hy9BNB005Ix26XpKmLZafba/tJneGVva/RYsfqJ4q/o8PMEEKjmrK2o3n7tgG70y1XKJ8vJ3Jx9LtmirxCxxltLKbfNvbBKJUO2Mm3UgokjyrW08yimt4s4U8FwyWvZlZ94mJRLRtvXrs8JzG+Cyg0Epw4Ifr9K9M/Pv0LoMgCITQOYeYar96m/3/jELmnhLR/T4eeNDoSa3ox9rDZN5EuOaQ60XUvlDB4YO/URb6PtumYMplzfoG2ZstnM8oyn6rDUF+4UrY8O8SVsoyCMRnshWcHpo06kBuY2teSItAaeLp0maEwd9r2c8rSuJFKrXXM3ycHIxEp55lNu2fB5fNRnXM61jGojqXxFh18NxqmcnpXPzQxf+0cFAVdRntK8BtVr6eQygYSZYqaXLUAhsLSh9Xo/G8YCn3IezJFwrN9aBgw+8ESbtM/WNf40nMIQ8wZn5L6A0PsOHXQPZajkk3MVniBc8zS/FdVLrVuZEU1+b5BeDbBKhxh0Ytjjgzr8NDnm8qqe/6otdD18EX7UNPdgbzzU0B686+k33dqO3KKz3DDLWuUsu48Tx6UmxM1H3m1gz4EQ9MlM5iAqzrWa1DMVjzfXnRa11XijYQ3mqevT0ghycTAM7E0H2WW0D/GzAxJ+5XFZl3Zfu1uin3u8ZINbzX9tumVtZvqeDr9EuuY9BfAeVyilUkL0seWkJUIry5Ch40YFYUoNtOd8QrQ2bbpt62NDVFsv97n5Du4sm5k34Sawa59Ws6KcJZ2zFwNy00eZlLQ7kWOtMUzntVcdYIP+95CxtSEdyZm9L24XygpgCjznp6Y/db+1ZFm8SPc7OjhD9PSCqFjp//6YCoQmm3LHEDz7z0d+eB1KmkM0rboMWikaMS+uC1KFwKdI5Bys7ONTwLOXERMZ7mIfDEIf5z1DmHbiICJTRCMgE0QF5h86nMY7P900zMTg1Zib0eGUWnlMLzOHeYyVa9OisxYwfFOHn/7zCksmTSQfh6mNupvcEo0oKn2bDvQOtLHwdOqWkdLt+oNGCi49OAQBs2gCRDbrLF4T9bt9KsMUhfNv3obx5+GxME9mycDN6PTcL/7QoRmrbDEzOmmyDp+fPmAblMZNrgBaiLejEo+B+Wx4wwST/Y4OP092CdxbAMmVvo7DaJv+M0hRKFf+e9oGjJpz2zmnU8SwBOkpCJhJmNlIm4EWaBfjHoJl9m3pBlanDi1TTf0QCMMWXUbIM/tPHY7UghJRMkzz/YXGfyI1g3cNh3rr+B+Yf0yHfwAjBO4Lyccm/wAAAABJRU5ErkJggg=="},{"id":"DigitalGlobe-Premium-vintage","name":"DigitalGlobe Premium Imagery Vintage","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.2850d66c/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqOTBkcmZjNzJ5ZnozNHF6NnVkOGd6ODYifQ.grAnqgpCjOaeq-ozqt4QNw","scaleExtent":[0,22],"terms_url":"https://wiki.openstreetmap.org/wiki/DigitalGlobe","terms_text":"Terms & Feedback","description":"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMQAAADECAYAAADApo5rAAAgAElEQVR4nMy9a7Bl2VEm9uU5595bt6puvd9dVa1+6k3rgRCSQLKMEDCBAHsEGptAGE948Bgz88Nhw0w4bBzjmBl7HDE2EzM4PGZgAIMNNkYEDKDBIARIAoQeLSG1uumu7uqq7nq/bt1b9738Y6/M/DL32vdWYzw6u6PrnLP2Wrkyc2V+meux95WFd31fAQR6FdRfRYuF7ujvAhSpdQsgUusLSikQ6e6hfkcpKOJ9AIBo/VBaINRfqd8jd17Lf8HqgspCy8pm6K0Km4pNCYUqimQukHrs/mn1kcuoi979QNsGo02rRNVXjTGf3e9ePRoj2bZe/Oz1a+0j41omLR53+vwqyzBqDoR9casohe6WTmrroPiHVKcA3BkgYgMsXN9csXT3itBNN+lKDp37CUSZLahKIPrGp1FGIQYLeaBIdWhSQnGmjIoqXukYYIQr4IoXCfVPl8oQnaEow/qBUoZl0KZhHKoM3QAL3S9WjwGro+P1CtHLn8a7lhMfYgXFxqtU+mx83m0JKpsWGUadSZCFEdNqHGrodk+otoj9dmSQrhK5paKx+5WQkmpLikjqG2agQrwpkmQEQHHe2AZL11c22FJxxepKsahVTCvFBpadjEe4pHtqyPpbqtu5casuitdXPs2r6XNABuOwqB7EeFMDLUX5T9G4Wg3zqarOZd0n91VcBi1HB2gWu4WjqttXMGiZPhlGqKFGUFCKCyAiHpoCDyV0CL1vdat5mGEWQ0o1GTKrDvOLO5wyZ3XFfN946OxCjK7dFa/p5WpYETn0rnQj6b/pm1LreCjkky6Dyizqt8Y3NJDaIIoAUgqhktQ2xXkWgXDvso0M4nX0vusZNeIqx8S/RnCAxpiN1cdd6Qn15WMSy9lQAv8SywKETJkMk5hjVRhns0ioChLUWfLymJu5ZCWTMWQWiFDmKNRAnaT+o4KZaTBzAsCpIJp48Win6Z71UarlKiB4lLDhU4dlRDNnrTWlmMyayypN0xWlj2Te1BOXlV55loGCB1AEnnGqx1XaharTgMd8Xex3Yd2bIgsNIkd3Zlvp+fxS4dZl6I/rNMkwcu+IA9NLkY2MG4Xxqy0FYaA6BZFwxjQRkxgzDHlpzAOuEGOOIqlOjxUx5HUfLarnwEPEMUIym8go0zQIhdsb/Ft/wTlrbsCmnl2CuShlWIYuChVjS5iizduU7443Q0YNYdXZu2o+mKZ7YVmE+CpG3/otfSlQXIZSaXCEmDYZRoZVRf9hB+w80OYTNFg296Q2yrCFd2png671henVT8rVJd9TmpQWmYqkjbU6Go5Z8b4k/LKQa23E5dGvqkDTDzwkB9rcR5WNUjPWSXFzCXqSUjq5t5FB5xYEZZZmaWTLE0udbzEGampDawrk28XLRdOSKoP4yo5Uw7ZITuUC1R8h+BTKYKtMKkkpahQgb4rLjm4QnYGqpxvcWhsaPpvEqNc7dGqELKpFSih4IspCRkT2ZVZH1IhIpVBkMqJdiFXa6mxhibhEgCqmJ5gzMYqXGgVsUqd9WB4pKFJCVGFJTIaqVNVZUwYwcKH+Fr8tcOmMp84xi8lF4FV1qfM+BzafT6LWs/FnHmiQOHXuutE2KoMvVkyTDKMSDN4N33cB1IPcpW0gCQn4N4qia/XsoqHKL7M581oPaW4c7mgWlUqxfsycKFTHeYaVOu8WSqSmZVrbhikglcGOMSz24askhfrs2nB+avMY0g3zWSyOaAPPi/uxkgyFFV89t6gMjmqdsYlYWqxjY3pQjy/eq42H9ekg5cjqJQrVtjonJcmPYEM2J5syGUYRo/qmFASAV+N1cSgSFL4PsrPCTcElTFZv6GpXCDpmbtFhlIYqMfCMzoEUDTxgEYxBEUNqyiaOOEazGMq7IzJzTK/v0DbxE6mG4sut+VI0DMg6IIONiVYW3aPxSMLqdYMszrJryhkm3hQ9LdoTYLJh6Vexwff83xYTGFegwDBdMozisPiASs9SYzWhQVPyERWJxwaDlnblcsDnC7nfZI0c/qIRuw8VQ66WECHOOF3h+s4k79h0BbTsB5UzqjnL7OimDFbdpVUM5mBIhhYIUG91jNjJ8yyk2DiE4RbltY+ongsGwRAm10a+OOFk5NMqwygyuY0TmIwlerkEetYDCxrNqLImbQQw9Gv3Hipq2NXvITwCKGqw3LqDXRRDsk4IM2jaLbfAbJM6Rxb3Tv9lfIU7ceIehyajq0vOSdiQDApMEXQKdFM0c6a0HECkjkMySbMXDvV8n1d6SC8+cTK9NuNgBbEyhTKMAAR0yrt5bOh+fqREaIeGP0Vm6Q94ECcJV0os5VyzytIJ5hl//xSU/6tteMXfB6nUsOwrRVJ14ImMt2N9eE+KVjqgJEN1Nkc1501qOqD27BtuQm2K67UgGlWSgcvVSHgu6I7E+XgloTNKINSzjnuLJUzH2WmOMKcKTRkqSEyhDJPKghOtlX0y7MR0ct1tu9OGCC8poMTJqtIA7ECf1hfycFUSlBNykpBiwI1KlIdKz42sJnSlqkngxk8TNRRXjq4C2dyuis9Xgdkv2NhNbwWkbFqxA+lSvF8bDLYLEK/meEMyIPZJ48TpikCoHf2GL5Z0KYeYg3fD6vf4CnagSGv5ry5FU59hMk1gS4qdFhkmmiJ4B13rEoh42NKczp0BPriiNWB1IWREDSYy/dI1NCq+XOdKcxRxLWuZGxn3VZXFDieaNhVXoonEjuIDqW3jwIRRNd2oUUBTA9aMpD6MHsU06q+r05ehN80Lk7ioK0/FGJ2ZHnenoMjjg6BzIZ2bBnjcuD7zZW3b0eWrLcOo1I51EIq4Y5TCDWH/x3CoaFaoAoECexYZta1G8ESp1ChSnBaZMBSS2U+L1SeH5rbkqFFvDWcoZJwqOzm+NstoZgfPDNW5K4kIWmnyGR2PBLX/kvodkqHE76IRmnL5YCwl9uX0qQ316X0orOvvalwl0Tb5uu/OB3oOzuM0TTJMzJDrgHW8q3cxQXY8CUKyxxeUcFjPxjVHhhbipggTCEgXxzR6ZMTkf912I6VSFcHHVTzb0xUjR6EYJt1xWmkjy6e5a754taSjI2ZF8QiN1yWw68sgPAg+dlL54fSMQ2Bh/iTYh6vcEIpQXulqDKzMBTWpjJnxMA5VR0L1p0SGUVjXr0ZJm8gKvh1fZNwaGbRO1IdE5uBe3ZtwgYRtas/BQFR1hOjR6xEmyZkOO5A5jRq4Cql1FdmpXx8TdT93Q04PRPlKl9HT9Eg6hMoRx/pv6KKX+lX5ewsTia9sK1wQ+lJ65rwNGRRxVX5C8yBDQwdBNp0fTZEMI5+EOsfOrA5AqeWOZiV80vhz7s36qRZVQA4n1huCYyK3C/rkc3UdTa5j6V9r74F0o6mWsiyqwNin7266VzqPHDqJrvhCxaCfD5T3mjRAtvCXCmIZg3oT72wYLcsDbPyCEWZeqzUWBSIzAGfE7K3Rl+tNpk6GkU4EAfXQevCKiOlqfqE1ehWMHSmuDFX9FAqKhdA2y6TGWb3bEKCzL6vTob/fK+m3nXy1eVB0MQdyGgE9MUmIzwos6bvzTu21TOrxNfOHfqQyPgY81lPVTqghGdhYfKmbeVZhQYPQl6krCK1DX7pnEOYEKqNUYpryhlUdIXouT9z0nS4ZRqUaQuibBSNezMq1I3o8zQzMmGX0zIwkQzUjU8VGYYLnp/xMuB/Wv02WJbZlhWnqh9SWUsJOLHcudlTSq7djnjhFrPcTplg9k0sSbcg2MqheiKSlLamepEmnokkYJ74dx9ZWdUrdrymBUlsfPQajjUyjDCPPodnAkbxYx6pGEsVSRgcgGD0vKVrHAlrGdJwtBou8LR8PSjgjOnFFdR4x46WmVR/eXidofOSsOMlqs+ogQn11ii1Eu1iY8s/urJOOJaVt6lyVX2G+jF4ylDTRHpTBQ4mnGyZ/to40nhV4er6pdAmEijpy/S2apjqxRneJttlmNvLpkmGkDGjeTOAXPiv29dmixE/YWC3C6OS0sxZFWkZNLevSbw6vsO9k2jBjJmczUOI0g0jYRDilN0pSKq8qktLU1a9uIsby1whEOpGKgJL5B3yiXWhlSu/RDwcEFd3ptGTwianSIR6pbdz3MYoISQrpP0d0j4wlTn5LvMdAp+mvH8UGRcw4vtMiw0jqAEk1om7JVIeluoE2AJ1R4vFmcOPwXu8xoheNHooCInasVxT1a8QIKzcmoLj1JxTwaEVr/6QY0jvpz4TrnBLFxoAn1CYD1K4L0Sr0DEXplmNpYqf9AtJ41qLmtpoOEK8UfJsyFK5Ao2uRjuVXsGJoSemnRd00fnEJXaJRMqrniybL4b6O+xTKMPKQxSZvFkffNa0q4GdfC+gTBNrFBzEwD0UNr1MfCqtlvoPMwUIdSesrWxpZzEGoXzVcR5Dq6IRaira2Np4XDkpdkoWQPLobXWz5Lk7soyOaMwt9NyeJ0ckjriZeMihDb9OQZeD5DhTcQDpNR28YKUrUUbhYPYy8yjvivaa3aLsplGESYAjKIFm1OUUnQVe9cwodYAhoj6gyKR2tOJjuqRL6Ux6Ll9gEUoKee5uAhMwdAhNNZY77LtqONeSbakX7oPDMRyvCBqOpwXWoBh/2F1QXLR0oLeXBb7j2ZUgGBzGmxX1wvZ4e69h0m1yk/WoCvGcUj6TY4JEKq7FqyiiIdYmG/RYnMS0y+MZcHYnOMWtoV19wCHAES14WpzbulTx54V1dUyDrM+XGcYUGFiqE7nsIlfCKF4cRNC5R9dc6XT8BqTMf1Fblstq0mlHUEYKiCVqKn6lFGPhKl6KK7CBD1FMCNdJ/0AdTEJcb7MBE3iISAZeWR4rKfyppoHnxwqmTYWTVhb1PjZWbDoyLtVXGggc5AylF4HsepFibEtpUqKTyaJgx4YYjTXXcODllXXnMZBeNS50g1GLmqW0htri/KkOvWYrMgTnlIoFPlqEHwaaugjQE/bHbLo3I/Aw5JBuojk+jGrfvrUROmQwjHizDLhGfqWcmaweWsqWOdKy7ex4JIrPRadz2KCIAPYVsf5G3MT27GySgPF7MsIMzs1wKFiyPokgH9dVXnYe0xeQfNtGMqBd0NSB6lsFCTykRmgldUSftnlmW2FblilbbY9159Dp5JznS074rR5YmUkpVpk+GiaU7EpevSs3hLa9VJvUbAajnA95JXiLzTS06chuciaAQ/bmHy196xmQQbLLAJruJbeO3lQbZ1xKL2JDtd2Y5kbJ8Wagwy2aWQQ7UAoPET4gOpXWT6SQttpJnpaOG1Uo7LK2h/lTHNvbUyLEzGCA4onPfUyLDSOoSoR67tYsMWgBbetXVFHVIB8pmTEqCed+mo0rY7ZcMT6lm+dWhk8N1VZIismFltAi3KZplvnPkUpmDszjS9M7daEN1RpIxfOf+e/f7MvSuHs8llvMKFw8EA1RJ9cN9GgyVOfdpPJMiVU9KPwHwtMhgz1T31t8pl+UVraIELM1wx+z6VCeKhtmtODkjfsbJETLn3bWUFBIjFkcBTifiUpySLCa8v7GyrixVBTt6kFDZESyVjKtQOsiuq+Kf8HEYBI5kG8YXO31DBq4fELLUPRXTiwth53rI2YbAoYTvRN/KxAGtqMwtRyAa+j28WnI6ZBgVtXjx5c2wTAp3LIsQqN5tRwzMghEkpN8MEF0jPz3rfYl3wiRp8qU2oqtL5hPVUPRepm6IzeG3OqIeAbC+WAoybr5v+xXhUVoHHMeN6Jw5jQS19Rk5bE4SJtJZBgJEPUtmTiQqG92nurrzHiJrMOaOZ4HLEPZKbFGjFqlta66vv3WsGCjD9+mSYeSTwaLwH84A+WDwD/UuX/ktwYI8ghiCZ0RzK3aDtifwJTJODNguehXIJ1pQTzFZbU+lKkaRwXfOWTAyTFYc8lyoIQPTUTLkpMYvXyWVKaspP95WBtMDkxG3RENCEsxoIfKl/h1AMSM98x/R3dpQ2uLgEA20ycOUyDCyAGHeFVFL2TdWFJqqE+QdVN9ijx3ZikKt23qAhyJiaktHd/VhCiNVopUab4kYrQKECSzT4r7ZUVRxvNLBY9jHD6sfIDAPQBqgFhkLBYMylL7uMkiYHCCDdecKvFi+rf9XfbJT9mQtbjucPzMdTgHDK2amS4aRepTzUpHJA4a3ScR6E3k2mEqH1+/dJwzCqePqSNy8oomFR+Yk8ZatU+h7trQwea7/G29NqwQpNtZTcZx4od3yGD1CXUFPBmG+8tWSgVILNzquS0wGI/BBD/oGnB4ciLrhChoN9bxIGJ6TgcSde9fldMkw4pTDowXgB4zgKJyXswKyqjLEfpqSgsJUcBeiM8bYzq2HvVUFSBAk6TfxY2RKUkQSQYyFDOE9pgJbmd14yM+bFNLFkM+1+OqQdECGnIZZCpn4FlJnKu+fHnUG7IAkMRwWHlywaLBZhbn+gMzTIEO3U615NwoxI2TjbojBZhIqUwjoyV9SoUWb0k1/g/Fk+k3kMDZjGy3XlaPqxxDEoxBm2wWmg6rxcLKUaPX7oAiokUnbSN3crLoXk82PnvQUY8qiY/IiO8rg7VWxcTLeHARKU/LqjOrV5Jfcno7fSywP85xalFIQ02VzafqrLMOoupEnGgXwZa4Y612ubLnsvbWtGkr67OrSQS4A/uggSc1OXK1BI5f7nRtHXNkofhYLdTxsblOYTZMZVNY/8yJNJOrGWnXEh9Iqz1VhFjirEcRz+j6oLoA6DkfXhgzspUX1qTzQ2CnvOvDqXToWDYSNfWjfrvLQQuh/Lub5nQFX8aCu6DpFMozsL3gqkfAjrKJbWaQCtV9CUjZ+ekbb0NStNxpn7Mr2IFLqIxX6zcNjb66wMN8RN8geLHX3I/gUioyRryy+fudTluavqY4PrETHVSStHpSf5WjLoJbFXaR2dDssNBhYcIUkl2IFg4Hpg1GoUFuXwdLWLEPob7pkGPHNXjiPEFsdmB7sIBE6XhxJGWW1zyBZNYieIL3Y6Chb2DmgfTCK+KOb3gcp0pSUFMh6ykiXVNFL5/hSxIOjWS+UpwbSE5d1RKjYkMEm1tq35mbqnKD+C53b0fEgtAzyljrONUo1ZWD0Ntm1P7pX8rJ1ROtpk2FkD1FUVFKj5/r8Q9GeD0VZiOtxxZ+NSyOH0tD+w71i/bqDM2wXBEMEbE7Eodj3NRCNsGXYpIPsIHl+DfCAaQdep3kgL3Tkn81B20YGizShWUJbvc8gwaz0nM2dTp2xy/Wpk2CEhPAlK9SQjOZaDpp23m2KZBjxfQD2HKz2JkW3n+p3YVruOBYAijqIxNQhyZmPJbgTqkEJ2YLuQDf0NbBKUYICB/TdNG7c1xXjI4cYBHmZ5QAbDVQLObMWbyNDqQgc0FJlqIah38NCAUqilx7cIb0rOxne/BxXR7szm7hRanUVbIsnq/6g1XTJMOpNSETozX3xpKuegAVNTIM8OmFS6YQNPFpA79yQLgeUAl6CtajYq6sMdL8La5J9zWQurhUjlTyWvvPgNaMBj7jxTcNT+zGwoDHvGOI+QTfrPeW7lEEZnLYWCoIe2Q1DaPN6hesVgzJLny3a1ojrWCLGp4534I/SYZtcSycDR/Bpk2ESxgHKt1uUljmw5eMS8Lpq5DQhFPUcuuydqBw2mSSFQJtIpuhiP4lPb0+/RFenYpiNEzZHYT5saAQp4tncKIFIEAB9HdpgWIiVrBbYkfH0eK7TSP0Ui9EU9fisFh+zr7qgMTKg0TEjz9WJe++wJhmc/7kEehpOXAZjV5QCjQd59DTJMCoiYW7byeKRQZ9VJV7JoPTgFC2FshakDq4RrrymP5Log0zr7wUWZv12MVRBQT0tqf/3nanniLUPjVy9B5LYUVgfZJUWZun/EL1IUYVpW//0q1R61pWfPA4MDMhg/XC0Cs5OTw1SdM+TyVL1FZ5TKToZJZ6FAIfmd5pHM99NGeKLkCKfUyLDKCjXWQUnS0UZJvn8ZCKi1yeF8F/q7ISqTIV8EMGa3UkIUVkIQ1AVipDY0i3d4whsU3iufHUeHerASXY8sNEqP/5uHpqAE5xTWhnb0shI6MaaSh6QIRkYnWmlIJgd6aEYSOnNrm04GmM4QjoVI03znFrRuuXnalyG5pyMZJ02GUaWtgSOg0UYAkuwXlAuaJybBoSplK6kt3zGvlgrWmsp5CwJPah/NYze3kIpMfIZi65cD6FkyJUvo+0e7H3mNrmfojKgEXXyEqAPSMt2WlfYM+EUTPlVVLVxc3bcWFwGm0sR+DB7irYuX1/XjuTZSULFXptpk6H7+xCS+kj0bE6gPznH3elqGT8LxUbvXbnBJuNS+fgzf7c2vRtEt9WY7D/MIXSwwNEg1u9dxGQ8/kw0Ut/SEmw7GXIdGsTm+Z4Buj1aua6kgh7thm5aHYb7A31+lWWoZ5mk37ZGBAH8fI5ZZAPLCqInZaVIHxE03bJq4nR0ky8YHD9uamhANDV6iNcNPLEMneDhXj7dG1CiFQkSOaMnhFitq6T/h8qH6lhISZ8ptS0DiBhPEmxfp3meSOsWqltiu4DIOUoy31MmQ3d0QyJvHWPwyCC6/+DWoRtpsT4o1A3FLWdMArMS6nCkUOZKoWcwFMBT6BOG2awIlcmQiKIAWilWLmgolsUiffhDV8k5JP0PKqfv/LjooAy9VSd+ei894iqx3HhSEEn+a1rkFIhTVdMjrRJSNhD5o5Q8dCJTJ4O9l8n5rwY5AG9qxGE7nI23MmDg5jI0nKSfTlhksN/FFMe2bO3DBKt3sxmZO290BPA+ksxJrmi09IBLi746nCAsDOx4tdKFIRnIEWn1PVTRFI1XbYykvmAipzyFnnwmskENJStFDdZaBgRucB+/TIkMtlOt8xld+rNXwMONVjuQXF58a96cApRugVdq/IENV0oxzo21sPpVggaNVtGmSfHKz+CAMDz7+ZhCfXTtVG5SnGq4PubqJyi5L4mpHcKXZjpV8g+mNSBDDxjS6HCEiZtaSpfRN3ZvGiL75NU0f7dv1bMZLK8IMRG4AYogczMtMoxCWKY3aWRUir4Ub9qafqClN3XrnY6YO0/xbyWke4qytthjYU7ApDIChzdsZ3Qt9BkmVvREV8vYggLExiIiV+6LB0mNoh0xJNlBAIMBGRgYepfRct7D3kztg3dzDY1zfqD8FC6i6GdddZXSUKrQQQe2ejRlMozoOB2UPR7fHBUKw14spBDEX4WMprpEjym6b/MF91xbbWoZnHKoLAi1oWXgoJjC7ROsULXQTwPS1P87A6AHi7TcJvrUlg09d5SNQiF2SIa8UsLOyZNCs5+E1NQuGG++1Cgk3y6RDwsJjHguQ3x0tzEPnQIZRuAOdFVJq5rHuRdLdf94jJeF8+MYPMvvHXVgpFbjUSOGb7LEpbzUjuobf/W/YDQWYViBDT4k3S+JRsspSR47IsD9CfqTdTMS/p14DDg1IAMqaATVkjHmCWsDcfubioSabIyBFjPMekD/oj5DZOQJ8xTJ4KddOXSIGzpPZEXLKxO8TR5PfLqB8GZNb23fGE1oaQNfFUZKbMzLo0FZe61LqBA2+9AwPpoLwdt2MsRB8zCgfXLo0DQxh4cUYbVAfboketZ8QAbA/o6CAxfP50rsg4U3HZdYbmzpuCVQBAKKN7A4ysZ1mBYZ6zTJMFIi9clmvymehXFOrl4eUD84np8s9MN5yZh6Rk1LaFxHyZvx5a35fl0WOKRE1VF1IzLkO+KEFLOcRm2lDhQMPDHBkdRoFOvbAxohfiBBgKH1sY0MUHQV7wOUOiQdFPhvT1EZhb1/G30RhAmO+H1jg4ytUB1fDSrOByN1iBDTIUN9c5+Ews7+tFMfM7aFkAKZcw6sN3NRAMdin/FZgELAoF+ov14kQZhQRfQv8Tsty4W5S7jvz2Ko0YpGsjTYQRZDsDq49of7GMG0n6QTcqawJKw0WzJA7aXKIFSoxGwxI93TdCQMo9IpJoIpgfzdHFnIAcz4VReK9PDHCUj1maVpkWEU6NUOunuMSuQU6mgl/SZGfQlMgvMIE9I+SupLUVC92FCE+kS6tB4J2clPCmODU4O2uQ7xr8CeQ28IWR09jmqdLDxA0fHYiIvRhB2DMefUtmE+MiCDsk23HBAqoGlBKfZL7SU4GhSX6aEd5V95DYNOjxwnnoQGQcE5bt6hd02LDHVjjislgyPgDVmCxApWR9iYK+2A2J0xhIN5GTIKIy7YPkh5JTbolcHbV74MJeBlIa0D8SuUxjEd0wNN3uH8NnlACgCipwNKiAZhNS5EiG1kqMoJ8z9VPjoDcbDQZ0OKO2HvT/4ouDAKq2YqOIkbe5in8XcGlIDMDW+YIhlGoCsgedfMaOmR8K6tDpojMz8zUYqYUKIMJ4O2VSXusSgWpCMADYdpT+JB6BJJ9xE1V0BFIDdye8DEcSnwwIYb6XBHSaeUAjKSGm/aRp2V+MkyqO96uaJgalDQjU4SwfXI9dCoJ4Gqv9jY9ocZEa2NITm1zdFt2mSYpGbqP7UCISBAE2RRkHSWS56wVkqKnFo/5cCo5YrUliIU9efqjmoc1N7QXdubAYPaWMfejhyOZfDl2u5XRGcfAG/o/bEM7sk6Qq7H2ZkJ9szvwu5ds9g1N4tdszOYnUwwOzPBaCwYjwJGYWNjE+ubm1hb38Dq6jrura1j6d4KFpdWsLG5GfVp6VfUc6k89PRpoOPgIqEdbEGjO/NWaMC0H9ZHGl8CNNNv/Wa0s018lWWYlIryMUWR+uyDBCQNTqGVzUkqNzRBNgWExyWpPdlO76ivsD87j2ZmMejYXMAcgJSl69zCfamm9Cg7O0vlzZ0J/pRfRXDlpXfmiAZHRLBv724cP7wfxw/tx9GD+3Dy6EGcPn4Yxw/tx7FD+3Fo317sX9iN/Xt3Y25mBrMzY0qdgOWVNSzdW8Htu8u4fmsRV27ewYXLN/D8S1dw8coNvHT1Ji5cuY5rNxexubkJc9IG6LCTmj7JgS2iV7KCoAIAACAASURBVB2oYal90bE7T4fpOx/lsYd1qo34imUPMxOvkZd/4zLsfdeHLbiQL8IP70kz7cvOHRA6NTC8TOhRyEj1d6c/RliiQ5PgZirauhKjtixsYQsRaTTKhZDAaK/ao3K6PRoJzp48gtc/cgaPnT2Bhx44jjPHD+P08UM4eeQg9u2ZDwPJ+zosp17haAj9LgW4fnsRL7x8Fc9duIKnnr+IJ595AX/8xWdx685dOOAwaKVPICrS9JH0m9tU2iGlS2qygc3loH45umhGwOVfBRlk4V0fpiBAiGn0C6UN6TGMYLcaUeC5PN8zhKUb7rbGYzA0oK/MjO5wdGo5I3kjNBqG28EZaFAyz+at3Lj7MR6P8ODJI/j6r3kcb3/Do3j07AmcPnYYxw7tw+5dc1V1ET25fxN1B0cZai8iWLq3ipev3sTT51/G7/3pl/Cbn/gczl28Qipgvesw96zYPxuo47UJGJDGK9VseESjfm7t9A3h/w3JIAvv+nBx4s5yvrhZZIGDUGJLo4b06wywuKOqeqhjsvEmYGOgMrqwg7RCzsA48qrU/PwcvvUdb8Jf+cY344nHH8Th/QvYv3c3ZibjQUPOBs9XdoTtIsVQm61ScHtxGecvXcNv/OFn8bO/9nG8ePl6xZN6CM5S4ipUAoy88hbycdYPkCJB/g4Dku4OWViKEHG+Z0qzMSvW5v9fGWqEiA9ihGO2wYu6zpv2QxHO+gopUk1VdAWK65NDo3q9T40d4XT1Slj5QcjOsz31YqUysYwAKVKxtshhxqMR5nfN4uEHjuM73/u1+ND734ljB/djZjLGaCRxIAau7VKkncq0vNVP6/fG5iZeunoTP/l//w5+9tc/jpt3lrC1teUyqYY5MrPOSA0Y1GWqn0Gr9YlS3+aSaIbyRr9AGq+/fBlsDmHi0LyhKLWC6DCcf3VuHUBB7+mAhs2PAaMxupw7Bp5SYBwwulC34bWGVA0gag9swczMBKePH8YTjz2ID37z1+Pf+trXYd+e3YP9b5WC5XurWF5Zw73VNayur2N9fQPrG5vY3Nqq41gwGo0wHo0wOzPB3OwM5udmsXd+Drvn52y1qSVnC8CGHEivT3z+K/iHP/UR/OmXn8Pi0r0eLQMVS1EKJCILoW9SbQI+vhmzhTgm8WgPT3xbGYWCWD+P+MuUQRbe+WENSKFG6LKUupFRzYkDB/OqdTHUKRHP34fK0PiO9r0mOmcmGBG0Ye67tpuZmeDRMyfwjq95HP/Ov/02fN0bHsP83GzPIDc2t3D99iIuXbuFKzdu4/L123j+pat46eoNvHz9Fq7fWsStxSXcuXsPK2vr2CrdxuRcdYQDC3tw7NB+nDh8AK86dRSvOnUUZ44fxgPHD+HBk0dDnzmNGrpa6dWl67fwz3/5d/BL//qTOH/pGspWhTx7e51RjspS8Kv3THNCOuf0Q42jVOMWpjk0NH1Dh1umy2vOwznEX54MXcrkHLgXVqE8ykUUyBGj8SI6kiudVcrGTLQH07eck21ztRyxE0uRIwKNTqK0zWQ8wmNnT+J9b38j3vf2N+IdX/M45mZnOlXWwdjcKjh38TK+8Mx5PPPiJTz74iWcu3gFL16+jsvXb2Nza6sOqLj6ydHDipnyaf2PceroATx65iSeePxBvPV1D+Mtr3kYp44dhCA6wk6rVXnecmfpHn7zDz+Hf/ZLv4Unnz6Pjc1NbDfPy7qJem4vYoTFjWTn3c+G8de+JBuSB+qQ6TCImpb/EmToJtWJ78yurdX2cva2UnwuFFFqO0QLMvLEqVWhWZAhvk28Nf9hMiePHsR3v+/r8a3vfBPe+NhZWyYFgK2tgpev3cQffu4pfPILz+Arz7+E51+6iis3bmNtfQNu3cLCpDSsfrMBasjg4Rbj0Rinjx/C6x4+jfe+7Q34wLvfgpNHD/UcY7srg8zq+gb++IvP4L/957+MP/7in3fzCqAPSjx+5lhWUMXNluogGRxf0yC1tpbNAGbk0QBLpVU31uj1kwTzfyky0KS6VjBeQtyAu0M1dAFjH9WtocvCGjOfoEIVELSZlBK9D70osZ0ftICoNyBdpZEI/uo3vR1/44Pvw+MPnsL+vbut6dZWwWeeOodf/b1P49kXL2EyGWN+bhazMzNY2D2HmZkJNje3sLh8D9duLuLFy9fwzPlLWFpejaGoxWwzYvbLRiLYv7Abj589iR/4zvfiQ+9/Z5jIA20HGUqxNja38PQLL+GH/sFP4k+/9Fy7X/2itqF2YmKk1ZzGJDbMDXPUCJNgpHFNWYMSbNlEa5L8F5RBFt75fV13Tafrp0mWbljwYzQgL4crI55NYg9XZiUpp4E6Gk5b9bEDraDI2n+tOzszwRsfPYv//Pu/A+9+y2uxe34uoO+txSV8+dxFjEcjPPTAMczNTDAajcwYdUe2VHm3tgq2trawsrqOL527gI99+s/wrz/1JJ67eAX3VtY8lRLeRaUJp90D6dRlEAC75mbxTW9/I/7e3/wQHjx5BJPJuBephybeXAYAz128gu/9u/8TvnzuooFprBdMQG0IoGHs3SNVN8A70WzxqcPPu9+ASNxLslSJMpJWuv1KZLCUycg3vI/2ru2bSh3cIgFFW2BULVUCNFnvXQyozTmE9g7oHzgcCAm98pnJGA+fPo7v+eZ34Ps/8B4cO7Q/IO2wctvLniyv0tBrdW0dn3ryafzMr/8+PvH5r+DStVudYzSvFC0BhOU7uh49cwI/8gPfiW9955vCDjj3v90ycKmT1s98+Rz+03/4k/jScxeo36jP3jywkSol7uOEWwZ4sQaZULJikXbV1oQx2Ncrk2E8d/aJH+tuCd3XyQ1beOeNlgeKE9FORGJ7neToPN2VUw07CBKVUZSuFuv3hlY6e5EgvIfLyijB1aEDC/j2b3wLfvQHvgsffN/XY+/uXY72acBaZVreQlytz/fGoxEePHUU3/7ut+LR0yewvLKKa7cWcW91NcqeE2nOvZMMgODGnbv49Jeeg4jg0TMnsXvXbBiPIV6VX/199OACjh7ch888dQ637y4bDx7FdOxKHA8ethAFKmwGJFe+ksNXsOOIyRmCITjfB0fRWD/y9cplMIfo2rulK/2eoREdpSK1vjuP/nYmwiD1jIlWAKpQjCw8iDDFMj30eHShI9Ovf+QM/ta/9234oQ99C1770OlgwEo7G8/a+gaWllewvLKGra2Cydg34vjiti0nGo1GeOTMCXz9Gx/Dnvk5vHjpOm4tLpsxdYsIrJPSBwX9rIh7d3kFf/bsi9jc2sIbHj2D+bnZZqTIcvHneDzGyaMHsbq+ji88cx6ra+s07Ix89Z9WxNFqbJSA20ArfaAUyCe2DgpFCJihZbU+20Y2bOLplcoge9/1YTrl7KFZiu49sAN5wpSdWZsbhTpgzhDcwNsZgNfJ93JG1cqwBrIuvTe/axZ/5RvejO//wHvwDW96DcZj3/jiiefa+gaeu3gFT527iOcuXsFLV2/g5p0lrK6vo2wVTCZj7J3fhRNHDuB1D5/G217/KM6eONx0qtal9xaX7uGjn3oS//1PfwRfeeElbG01ji6wXKQXB0q/eWj/An7wg+/Df/Z9H8DMZNzjY2gjj/l67sJl/J1/8vP46Cef9JQu9NtaJOEUBcjGYbOAEElq9CuAsIBiHXkDjSCmGonGF/gB4goU2d19yjDpjLjUkAR/BqAnaxTcwSoyn49V8CDElIeYM8H7/TgRroOe0uywRzim3dU5fmQ//sa/+z78tW95J04dPYTRKKJmKQVfPncRv/WJz+H3P/sULl65gTtL97C4vIJ7K6vY2NwKChYRzM/NYP/e3Thx5CDe/ZbX4nu/7Rvw6ledMnbz+j+XAcC+vbvx7e9+K/btmcff/kc/hYuXb9DgkLwWqt0INHr62Auu317ET/zSR/HQA8fwofe/c7DfIScBgAdPHcWHv/09+LNnL+D8pWuuR+WKkY9Qmz/8e7UpHj7L+CSIpjJA55jqLNq3RhDEVE/nrTDeiqeYIRLdvww+qQ4cgwinAaKzSCkyordEHATevj77Qet3ITQISqbvaixaPh6N8IZHTuO//I/+Kt7zta/H3Iw/D7WxuYVbi0v4vT/9Ev63f/X7+PzTL+Du8gpW1zfMQLbLu0Eyzc5McOb4Yfwn3/Mt+J73v2PwiHc3HtEIN7e28Nt/9AV879/9J1hbX6/jMiCk8mAIFysUAU4fO4Rf+Ad/G088/uC2c4fWZ6eXTfwX/+PP4Wd+7eNY29iMOg1RQNmrWYOBXFcqPQHiOSU7hZGE7D0SUO/nyTk48hi9hORQgL9/GWwOYcXqupa7SuycvFeXZbsJc2RSEjM0JAE5OGJp1CxUbnTEnpOq9+MhsI5lH+Ddu2bxgfe8Ff/07/x1vOW1D2My7k6grq6t49kXL+MXfvMP8KM//vP4F7/yuzh38QqWV9a6J9BQHMFMc9oHo7Ub9+bWFm7eXsLvfvqLWFlbxxOPP4g9837sO0/YGaFHoxEeOX0cm1ub3SaZOQ8hSAA1RULiSXVeCpbureL5l6/im77uDdi9a645z8m/ed4zrvz8qz/4LG4tLpsOGEwLj7fEHWAR7oO92eeV5jBSgTfJECIlCCDMJ6TSgNkkPyUH4cUIvCIZfJVJFH39OIHlqVVZ3bJsDLeBYUY2gYW53sTQ0D9utaty8nqzIYSoYApHLKAP6qmjB/G93/aN+Ps//O/jyMF9ALq5wVdeeAkf+b1P47/+iV/EL/32p3D91iKFKphCu76IuD1qV+tayIavdADYKgV/+qXnMDs7wdvf+BjGo1ETpbP+AOCxsyfx2aeexwsvX4sRwRyfQ25d7zPU8M8tFNy6s4y9e3bhra99uDf5z6thmZdSCg4fWMDl67fxqSefqRYe01MIz3dSCFPNkJGXSoMNO+g6yWDpr9ldxAZzCrbwBB5qL8bnfcoQIoS/EsVRnNE9e5p1KpJWikrfeBGI1FSJFaS8SRVXqJwhKAumX7v+X/vQA/hbf+3b8B9/9/sNpV++dgu/8rt/gh//hd/Az/76x3Hp+q3EDynUcj6JitTbKme9L2mkCgq+8Mx5vPHRB/HomROmpyGnUAPdNTeD3bvm8PHPfBkrK2vQKG1zMhFyClqWzqNTBCtr67i3soY3v+YhHD+8f9t+W1GrlIIHjh/G//HRT2B1dc3pk65rQk56IzbC6xXdjmpHrnMbyr4MsT+OGrwiFfkyPrRqKLw/GcazZ574MdeXe6kwKbZBNpYwyJyTspB6mweRBiN0EB0kC8cPAZlDVdqj8Qhve/2j+JH/4Dvxgfe8FXt378LG5ib+4HNfwT/+uV/Hz/767+NLz13A5qZuiFlCGs9MBcCIkSPPw+y5c/1eeVtb38DVW3fw/nd8DfbM72ou6ea5xWg0wt7du/Dsi5fwlRdeMn1pNOhFiGTk2bZuLS7jxJH9ePNrHsIM7WSHyD4QtUQEC7vn8fmnX8BTz79kwBdiAUf9CgQRkf2TT0KDnTibCMtA/YVnJMQNuAjZn84j2LeYzn3KMJ4788SPcZixNWFowqMUnFQ3Ln4swxzIBhru0RVRCw8Gh8LAGFmc5SN+3x0oDuZ4PMa73vQa/L2/+SG884lXY37XHNbWN/Dj//tv4B/99K/ij77w51hc7p4BiMck9DPvk+jg+X3jMa83G4YQPQB3l1fwyOkTeP0jZzB0ZYPcM78LtxaX8AefewrrG5vdWFg/bkThbA/xyyt2axsbEABve90jOHpwXz9SN/jgaDESwWQyxq987NM2HgE0tNBSOG0v4CgQeXV9mS63kUEIBHryAnGCrPXIwGHzWhqnHWQYuYeQIWpHpf4oXSN7UxocnS2lqgauxiHKCssQwlgEiELG5AqSVEvZdF5FBO/92tfjn/7of4i3vu5hzEzGOHfxCv76f/MT+B/+5a/i2QuX62QZxm9mIEwCTcleVmwUOTfWsoRKVV83F5fw23/8JDY2Nl1PZHit/H1mMsYTjz+I17zqFIoNRN+QQ5rGMoiOV1f2J196Fl+sm3YAkFe7hvjQ8jc+9iBe//Dp2Fd1SN8DIH0ofYoC5iQ8lCzSdjIYb9Q3G5ECRTU8yXRzJLoPGbrdKeqjgDbkROz1KzaprQwURnBzktpex5Jva1gtyowOkHlfbeOfKrwvgypqdD92zc3gO979Vvzc3/9hPHjyKO6trOEjH/s0PvQj/xi/+rFPY/neGsmWFElXVE5kqUKVjkYiRUZAI1FEsLm5hecuXMFzFy83c3aWiw3zsbMn8dqHTlekSvw0ZXAdaYqlBrC0vILf/8xTuHnnblhezZty/Ju/H9q3B9/wltdAB9PtncBCUdB4SuNZ1eSpcd/gt5PB9evgU8wAsy6inkr45/5kmACIa7jEiwrjWxGFwlREb8tRMwFKR3wZTMOgp02dQxMi2hvVuF3XbynAvj3z+K73fh3+qx/8IObnZnHlxm38/G/8If6X/+u3cfHqDeN9POqOJkzG3eOak/EY4/GoLsN2uXu33NgtgWo/o9Goe/HtwFXQPSnH8uvjoVtbW9jcKhiPRrh8/TYeO3sy1At0Urp2YGEPHjlzArvn57B0T8866QA0+BHSjemumFF96ovP4Pqtuzi8f6Fp+EPzChHB3vldePOrH8LMZIL1jQ0aLR8HUSQ2oIJH99bR9/BiJq2/vQyhndlFcWMPqRrJYt1XMJOyowyTYny62ZX6r62oaDoEn0DGJyFooAw0+4jo3qoi6e6yKyWTnZ1MsGtuBrvmZrF71yzm52axZ34O73zi1fjBD34zjh3ch43NLZx76Squ3LyNb3r7GzA7M8FkPMbszAQzkzFmZ2YwOzPB7GSM2dlJfVPeDEYjsTdkTMYjTCZjzTgxmYx7b9Hja6tOnu33VsH65ga2tgo2N7ewvrGJPfNzOHPiSGiXI0SeXAPAQ6eO4uC+vVhaXonoVyNj0+BCPVfgsy9ewsUrN/DY2ZO2Q5+voZO94/HIHmd97uIVQ0YDsVb/wSR4nlj/oWHubHlnGQBa+HCD4Y5C8HR6zKz2v70Mky73klCpJGq9yAdaK2YlBFmkn03UupPxCAt75nFg7x7s2zuP/Xt3Y2FP97lvzzz27ZnH3t27sGd+zl73ODc7g12z7hgPnjyKIwcW0G1uCV7zqlN4/MPfgcl4hJnJGOPxuHmmJ//mlZ+h3duh7zu1B/pG3/qdaZ062r3QLM5X4AgYUBgIA6RXrbu+voEnnzmPb3jzazAj48DXTvoQERw5sICHTx/HcxevOGhrBlnISFPKqRhnLKUjDMb2fciAQk5F9VwGW96h/rq2eYVrJxnCu125P95BbPHrIlGgK4CMBAu7d+HowX04dmgfjh06gOOH9uHoof04dnAfjhxYwMKe+e6dprMzmJvp3ms6OzOpr3Lsvs/MjDEzHlsas90xivFohAMLezB0DR20Yzr3m1e3aA0ZfMv4duJHRHDk4D7bQ2nyjLih6WkDaEgU5ASfe/p5bGxuYnam9yrfkCJlOUUEBxb24Mzxw1o5ZiqBExobA0vSQwDNjsmYZWwvg4T9IOWZ+xX2t65cv+f5xjYymIaMUK0UcjGdfUvX7cxkjGOH9uPsySM4c/wwzhw/3IXWE0dw/PB+7J3fFXL1yXhk38fjLjffbhmwtYmVr53u57o7bYy9EuTfbud5J4dp8Z7bHNi7G7tmZ2LIFgdTJwRHYwBsX/4cQcFTz18M850hPlrLrwcW9uDsySOYjEfY2ip2HCd1FxjrltSLPwNjgsL3j1KavJMMMWPRJf8IC6kTZoj4gftVrirARFOODqkdoXfNzuDgwh686oGjeNWp43jo1FGcPXkED548ipNHDmB2ZrJjemDKafweyltNrFSWDa6F6kOhP/++n4gx9LvVT67XcpydUjFuNzc7g8lkHEMz3JACbUF6ETN8wGvRs+cvY70eWmxFhBa46L3JeITv//b34G2vfwTnLl7F8y9dxbMXLuH8pWu4dWepeyv5+gbW1jewsraONe2ndq5THmXGncF5vR8ZisntfuTpkf8IizrUj0WpMC+gtL/Wn7z3a1+PwwcWcPrYITxw7BBOHz+M08cP48yJwzi0b29zgIcMaicDZlpDAzB0DQ3ekLFu53D3K8PQvfuJYENXlqNlmDOTMcZSJ/T1nJUvcCQ+C1kD2Dbc2lbW1nDt1iIOH1gIfOwEQnodObgP7z74Onzjm11nW6Xg9t1lXLxyAy9euo4XL1/H8xev4MKV67h5ZwmLy/ewuLSCxaV7uL20jJXV9ZiGsCnehwy9NKtQWp9DS/3p8QT0ehvNl2DpE+VWmPzLv/dD3RsmtjFgWPv2IO5kfFw+ZEhDqy9D9bcb0KE5wU5OkXloyTfE63ZX5qulKy7b2NzqTr3aDDClSiHWx5vOSuT38o3bvec1WjLsFN31Govg0L69OLRvL97wyBmru7VVcGtxCZeu38Kla7fw8rWb3buqbtzGtZuLuHbrDq7dWsSVG3dwa3HJeb0PGcJNjTYmg6dDfTpULgQuWk4OMhlyhmzA2Ui3SxWyoltovNPKzv2kTPy7xfeQwfHvITocaTLPuT7T2e7aLr1kvtbWN7rddYsC6AGqcOznJVjli8cBwG0zvj4/2+k51891sq7HY8HhAws4tH+vHVsppWB1bR3Xb9/F9VuLuH57EVdvLnbOcuk6Xrx8DRcud1Hm9t17KOk9UaYCRf0QZDr5exHT6qR5Rj6EahGo+02T6riTOZT7Dxla/p7bDA3CTpEgXztFnJ2Q/H6ixJCxb5d3D0XS3H/upyX30soq1jf0xWce6v1JM4I10wenVH2ad5b8LFfms+Xo243vTo6Uo7RINy964NghnDp60O5tbG7hztIy7ty91z2huHQPL1+7iaeefwlPnbuIr7zwEs6/fA0ra+uqxdq2ZjthbtAV6n7FUHbmtl9Ijx59zCGyIQylLa9kPrFT6tNCmFZakem26AwNTL7WNzaxurqOLRSs1ZcQbxVgeWWVHs6J1+bmFpZXVu0FZXyNRLB71xzinpdgftcsxqPuZQRzsxOMR6NtUVd5L6VLOe6trvOow/JnLrMg4cuc/gwwrK6ge0IwZwCtyf0QKA6loUPtW/1wO5FuM/Tw/oWwi765tYWVtXWsrq5jZW0dtxeX8PT5S3jymRfwmS8/h89+5XncvH3X9VGq3CSrRQX2HNJHbVGZqf/UexNmcMgpwlDvEAVy9FCF6Juvu2MNW9jcLPZ9a6vQvYLNzU0srazi7vIKFpdXcHf5Hu4ur2Dp3hqWV1Zwt74BY3llFYtLK1heXcPK6hpW19a7z/UN3Ftdw8raOlZWut8ra+sum2UXldeMIr3ftLTBk7lUv0mP2s7vmsVkNMbs7BhzM91G4/zcbPcsxPwc5ma6TcfFpXv2x05aaI8ez5w4138KgkHkB4XuN7L+Rept157LWvUm4zH2zncvcgCAB44dwuseOYPveu/bAHSAdv7SVXzmy+fwmafO4bNPncOFyzewvLJqY94d8c/gwU6Zogrtm0xaqZFeGUXyvdW1dayub/jn6jpW17ult7X1DaxtbGJtfR13l1dwa3EZt+8u487dZQuPd5bv4e6SGz1/bm2RAMq45s4BHXv6jsbYMW88c4g1JwbiI4hu4XD06crtfUC1mr331vLY6E0FWr/g3spaJ8Ny7MYndeg7F8d/Bh8ba9YNqQwsn+DQ/r1h7IZSvu0i8P2mta1rp1Rzp371+8xkjEdOn8DDDxzHd3/zOwAAl67dwpPPvIAvPHMeXzp3ERcuX8eNO3dx4/Zd3LyzhI3NzToOPMaw77bJzCkTMwDA0Hfp3gru3lvB0vIqFu+tVKRexfK9FdxZ6nK/29XIby8u1+W2zqiXlleweG8Fm5tbPmBsc8aYl9mkyX5zxAG6P3hIdbINBroRxYUJ50STjVnrJf+wolq31MHqoXX4Y45RyDDuLd4tndWIFKMTy6CH7F1ZtW9dfyE8OFLTEga2oblgjvhL91bx9PmXsbK6hoXd81jYM4+F3buwZ/cuzG2zHzVEL/c31G4oTcsynDhyACeOHMD73/EENje3cPXWHTz74mU88+LLePr5l3H+Ujdpv3DlBq7fWrTXiZpy1OhKweSzT53D9epJN+/cxc3FJdxedBS/W52gS1/umUOsrK13qwFZmIH0w+zNxq4OaEn12AgEvmFDuZ6kNi1lRi0C8SQtaqiMWB6QGoD9DTuzs2TN4s3cv1iQyhchUFz37vjKewymAlCfLRlQ+uCgOk3R7uihfT3D3W7Sz2WXrt/C//x/fhRfevYCFupZM3WKfXt248C+PTi4sAeH9u/FwYU9OLCwBwf3dZ+75+fCqeGhifzQ2LXmotvJMB6PcOLwARw/tB/vetOrsbm5hSs3buPFuor1wstX8ecvXsKXn7uIZy9c7pZ+TX+CyQ//d//C/tLNvfqp+TYPtCNkh0T6+J7eMsbyoLKP5IHrlZkaYsoAOOrGao6CLW2qEYUUq58aSeYF0ab8KIsbrw0OSq0X4d6QjOmaw0lMA82xHFQiiwMymLMR6706wMzMGPvTXzxqrSYNIfTS8gqev3gVTz79gvdUnXMyHmHXXHcKeb6eRub/9y/sxqmjB3HqyEGcOHIAJ+3zQO8PUjJvOaLcT5rXkmE8HlkE+bo3PIq19Q3cvHMXV27cweUbt/HM+ZdtLvLshcuYPPn0+QoqES+FJhqsbQ/UA2icr6YhDhhwrd+etLJzUH1Btt50T9Rja5nE+4AjLzt+M5WRHhk6t+nshkFRRJfEm2rX+ZZ+h7FtUwaNSBkwvO6pIwftDeHefXsPpHUtr3ZAaWouzuL6xiY2Nldwd2nF+SHHH4lgRg9wTsbd90l3LP/owX148NRRnD1+GKdPHMHZekLiwZNH7WhQyzH+IjJo+cxkjOOHD+DYof14A87gG978GnzP+9+BpXuruHTtFiaWtRRf1iuaUpQSUmyzaRo3ixfxjQAAIABJREFU71+Nygv9XU3dZy9MQvrGT8yHteLmKwp3+E5lsW8dWDVSlbm7achPRmVSGkk3ZJ/z9j02/LkAVh3pUtMj1UXvD8WYWFkGvYEAGGYcteDxV53CZNx/tqO1qtjSv6bJlhGwzhKPqGOKKsNWKd0S6upaL+159sJl/NEXnrG6CgqTyRhnTxzBI6eP49EzJ/Dw6eN49MxxPHjyKHbNzWCmOpR+smxDMgztr8zNTDA3sxeH9y/gzPHDvA/hw6UpgaOYvu5ePCcWGuyA0LTioYxIiio0mPkYeXA2TT9UYSW+/a0fDkwYqstpkW9u6byaJ54aJ01hltZ4WtRLZdBfXRKbF7B+SvdG9KpPm2/xokFI/2pqWus3ZTD+NToUVyPx/+jZE/aOqE6N2+8xuRq7OjcXl2xjzzfElUYfkX2cq/6IH6kIIDRG2NLHhQXAFja3NvH0Cy/hmfMvB3DTP3559sSR7v962vqBY4ewsHsX9u7unqNZ2L3L5i7ZCXu8JmeZqFYLGaYasw1HUlJPeRzdG5Mlcy6ztr4K2dFyHX43kRmxstukh16EsJSHw1pehrNopmmImGN2/HF/Ka3hUFHUiI35Ss9cpt9ceTbStX6cwPVkCBFWn39nLy8Fr37wFMbj+Cqa7XLzXH7j9l3cvrvkPChYBVBh4ycZlB8FsBBd718GQLC+sYnnLlzBuQuXHagAzM7O4NSRg3jgeHc49czxwzh19CCOHNiHowcXcGj/Ag7v34uD+/ZgZuILq61oUh8hFe8X1WvTpI/MJCC8DyAqAlBZVjIQF0oyUhWvFCavEIQcnD8ZsVqeoQZV+cvOwOgfUyyE9NBQO0dEUq5oH50lxzQP6PUddAJSNB3ayc+79+ZiQn1TlFaNz++aw+MPntw2rWhdOi4ra+u4dvMOVtc2+ilzYMdcnXQKFNPBMA7tJEPIOtCvs7a+gedfvornX75qdMajMQ7u24Pjhw/4w2oH9+P4kf04deQQTh/vjpEcP3QAc7MTk3li3kwdSOjUPwoLY4ZIvGsYNAOXlB5FZfqKSuxLHdTuFQRn6oFrdlCl0vqbTyxrcEgtQ7U976WHotUwLZ6K85nCSCMKKaBWtA7zGO3H+Q7LvT0ZAjsIY1kN6aEHjuHYwf1RL9I/umGt0qT17vIKrty8XfvhQdcP5c15YmDK0QJZl1GlTRkskS1qh93SewAp00X3ZWNzE9dudidrVW+j0Qi75+ewf+9uHFjYg/17d+PIgQWcPXkEj545gUdPH69HN2wuQGGPeLI0kW+kCvZ8h6ZalvoV30vQ6lVAdbyewRUKoyyvAi2ykXaV2oZbP4lWnuOE+QKK/ZGOkMax7HWAt412zAN8sAvUAIs7otJj5wwRYhsZQiqm95yH1z18Gvv2ztvYMK/6PadSnFLdubuMl6/dAlmJzeNEFBTY6RNiAvwn/XrgYExvI4MEA9CU3pSCuACCIGv9AaBgq2xhcanbU7tw5UaVoXs4TpeM4zPV2RmQjc64rUZCp1YDotZ0B2nFhgzaBpel0ElWcoYeyjIyVT7CODDZzL6RJDQ2unEeI6Ts3nPMmuYY+qV7WqQ71tQHavRsmga16e3FJBkUrNwx1WDqmIjgTa9+VXjeRctb3/U3G+O124v1XJXza9mgHaWmsbRI4M7cS69NgJ1lcAQA+I9RMr2wqNGjp/XiONgq9VaXFq6sreNmWcKIw154k0bgGjUXFEsVAvRph6XUkJiE5xDISjOBnI4oP6VUbWkOqf3U8nqv1N/FQlm9Vw0qDgClAyA0Np7Y+Ao8/LszGB/VEGIGlp2mgP4IQmBD38xnLBYVraYIhbQ/IEP3J6cQh8LsouDE4f143cOneyd0+eLUKciH7tU6V2/ewYXL16uhueydVorx7gAAu6O+oiXGG/3NkZ1kIHRKWy26vFtl6NVzeyk6DvchQ91VVxOnQWclATaw+pC4MmNOot8buaLPEYQEd8P1e0KoLoGegTD3UcO8fap35TlLQq+Od17ZoI+MdMYLyUQ278unhFSEdIaeJqeSc7nMF2s7IT2UbWSIcyR40K2g8vpHzuDsiSPB6PkzO0JO91bX1vDn5y9heWUt8FwbOI6Tgau+LA1Vsya9iYKnYEcZHAi7fhyvGHw8TbdxKWruyrfclwyjbgGDI4GPmr2WEoCuiXsa43Qtn/bKwTGYuKK2GnKeKJozEt8qtAeGiLqwNmmtWX8T6quCmNXCfLJsJX3PUQIl0kcXS7r77DgUzYo6COuF+lGnKj6UQzJwxDBIq2M/Ho3w+kfO4IFjB3tzB54zdF1K7zcA3L23iiefOe86rvKajYS3DSONmY5H3jOpsguB6oAMzIuNS0nlqjLWN4GqgeJ9yjBSm+zstASCYvHHOQlKC06hCqgEegPcFzbMNANbEo3EtFWIL1eQKrK1ps65KAGYGwlo0w1sfL3OrUOPqr5ZFmTIjlkVapNpLSM8UHWYM9HNIRmCxsRrlFJw7NB+vPGxs9i9a8544bEbWnplvheX7+GzT51ToaCbs6IvJO4hI+tL+wqwHe8FC+7LwEBFOG1dsBshfDd0DWB/PzKMNH2IhsaRwRGkQ6fIhpNyoQhM/R55LTNoTQWInVJZL73Sf4oZd3/+k5XkCMhRSRIPbiDMs94X+BvJGaEdnXQ+FBYjWBbhMSKAqOXRzolGSwYCKuekq/PomeN486tfZfc4Slj9bdKnrVJw7sIVPP/yVWjEEusXidHsFGbZSYZk0UpvQAZWgdC/+pXLSt/oEhjfnwwj3fSye+YAyl004LhrG3M65UztpKdwZYQHgCa+xYRoISz7ixpDXU9H6Rl7aJ+912RTfTkDOvkrlrbQmJXSTcqonoV+7iOMuVhbcyiWQ+tlmxr6TTJYpAECIMzNTPDE4w/ikdPHuxoS9x2Gdqf52trcwv/zx1+sf0qg81Y7cSDxyEaMcmzcpV0HBXa0fkAGjRLBFgqXw8a+k5H74zZSJ9L3J8Oo71geHYrob2ebJzMhVqTQUNKIsjN2dkSQKkQ3h/JqcGZnGkprOxFaopN68KJQtAiwS3k8Iz9ttNhGm8lEBwy1L6nRlK0z0dNVJCsLwOK89TKkHDW3kcEnri5DQcGBfXvwxOOvsjebuyo8wuT9hlxvZX0dv/XJz9NUJxp3S5zed5FoBZwCivPQkkGjhPPmNhjmPgE8HRQ1awDwimRovA9ald8NqJhnwTw2CFzHXcObejCnWb77KrVuRHNLXSoRS8tq9GDlQLIh8P/Urw52I5e39EXbG7k+X4Y2lfcQDXj+o11pWsS5USGabCKFNuGgEV5hhhxqQAaPqDwsgl2zMzha/9jk0NWaO7CTfOXcS/jzF18OVuOGmHRkTgYDJaXpsrFTe9mQDA2O3cisM71D9etYFbWzBEY7yWB/MIUn1DpGPJnjXNcGw8KPh0pbPXIOXEadsErrnt9XRDD5ya5cERLpsQ6rI/TSAmOthL6lkHzGlxhdtmveuOtM1vkUU35yRFdjdCKw/ORo2k/LMEiGgMYqcyXFfzUor8pxCtU8RiGCj/zen0Q/DIMARCOOiY+rUdwUeqkI7VU0ZGhdeQUxsGagLL3br0SGkZWXdAISDrxxvZfpO1KHkEsiY6B+MAAzbPZ0CQ5QkhCc92uY8s0Zdkrqk1Mc66c4X3n+QXOVbqC8vKA6EvHgrGj/VYNFzSTqI8ggAgjJEAx5exks1aqGvryyiguXrweDbx3VyJc6yp2le/joJ58kXfAYlF676Nhtc+63kmBNWYZ+OzpuYv+ShTVwKGQa9ynDKDqdo5c1LLRuS/870LJxpb7UUFoCcghlCNbONVJomiWRv4jilIsTHVeEuG2bWG5YXa3YOGaHHj2JYp0fOw+O6dkRAAnL0nVWZOlF1bOlQsXlM3p9GfhytQhuLS7js1953l883EgZWt9VJ3/4uadw8coNQ3WXAT5WKkO+xO+GYjLY3j5SQwaOOmHH2r51+jENWpVC9eQVy2DPf/v5cw11aoidUYqktImEN2nqvSAYTeRcWFQDSKMr8HydL4l1TAP0PcwrOBJWxzOHIhkrzHtwqgJ6qKdIo/dMhg7hnFXqm+ZMHRkfUO1HFxCcx1q3+KKFB7m2DNpvTs83NjfxR194Bn/wuafQsj1OmfLkenF5BT/9qx/r/mqr+jrLZ18jwvPVO8JiHaso+V5fBgYDyVEnoHzUFTuT9fkKZBgZmqoxJvTUfwutAESiXtUnwVSFo0PKAdWDC71tTm1fJ6i8fEaEGtGifrYmxMEoCGaF6CbZObQ627QCp/WtTuQvKj/zpewK0VKemE7sqykDUopRZXjq3EX81Ec+hqfPv2TzCb56x2oALC7dwz/7xd/CJ598uvtbEAQ6wbEkF3AGEE/SBq4TYDGWt2Swytl/xP4Z6EPi71cgw3ju7BM/1t2n80AV+UQiU+YenNL0+CRm4IOsyBqX2pQiRQXhk6USaRppUlKOEgES4pKpt1UZ6F79HlbG7N1KXl+q4/vEnzYFqV4XfMT4cLlMUTZgvCKl49T5Ox+xaMhg6gjZOHT179zFy7h+6y5OHD6AE4cPhEcqQeOxtVXw4uXr+Jlf+zh+6iO/i6s3F+l+jEw2NpR26DKzL4EXlMaL29xRLOjtKEOI9hGnK510ZF0i5r9SGcazZ77mx/pr1dy3H+y29WEVrpTGA/GBnY6eEfBjEkrRjJEQ0pboLO/mdiQQnEzPadjgA8oQErvlwVMdgwSiVT+qLIEXNQIy1vhXacjZrJ4DgsoaJsCge8RRTwaI69SONzt4bdVI8eVzF7C4dA+j0cj+Xp+I4O69FTx74TI++qnP43/95d/BL370E7h6azH0SaLqiBILOn7phLMIgVwETVUJO8p2MnTqKaCz5M6bDjnpN/wRxb+ADLLwrg97QsBGWb0cTKzhgUrYdwzj3TAlKOyd3ie5I8AGC/+Zy7O9Oy1xmNX6itq9VAvu1MWNLm8Y2Z+BSnriyNHRQd0EUjrMIzOK/n0g9k31WGCWwV72RlWHVpD2zM/h8bMncfLoQezdvQsjEaysruPyjdt49sIlXLlxp9emf20jA3xsG2xvQ/H+ZeiXF4sSodP/DzLI3nd+uKiXSB1U1DdGlAB12hrJ4xInNPi8fNsa5DD5MsPYRjI2Hq5nhtTx7nU9tjUjQsdE/MlDqjQkaa034jB0i/WobYg4mR929pL6ENdLkkEdQuc7OSVxMoXK+3W0Jt/PV8xWdrK+lNtoi+2caEpkGFlupWlHcYOgPUc73h2ioKKh/rQJTFemO5F9VIbdDzwJyFWJtADdiweKl1taBfhEzstMHvZeyzOJX7oHDcPMl0j8ZJGL0mT5WVYSoNemhE/7rsZRx8L7a8hQYH7CV4g6SrPq24/hlNAmIC031fo5khePlP25qZ9gsPZ+M2DAtMkw8omvHpKDDXLRmrpJVo2Ppedfzc0ejgAmfcmVTPpS0spwANtOk72d10Y603O0nObAfMD5FpWpVLm9n6T6rp7ZqCSbTyPCY2RdOWgoRZ9DSKg7JIMBSolyMbfS6y8QNB5baYeBQ3b02rxPsy9fhPmke2DqZBjxLrReBsRkKLb2zl6llWu4S1YDMy77qZBejUDblu6en4Hi5Vak3JEmm9oWzpMhSCmk26wMktl4pwHIiK4R0groJvGpfYRJWzXkjAHB2EkOu6cyWJ0hGTTi1YhjAKfNIkgVe0CJ+2s4oMneL7dzVsKVUkMCwG54lS9ptJkeGUZsEJwkOappaNF2FHREU4xangcZtggXmcroUBt4OJS+MwbQJXr9oARdzXHspTZkfeG4MDHnswodPKGoRo4Z2vltllezMgMP/nSJ4Gd6lQ5HnWEZQscqe/Rm78VSXpalYZyBZAk+b+lLzzG5OUeHsIAe09Te9dWXYeRnxfkWD5yGiwpQtLKRiTVkIwGDVPETMA/vpV0kt+bO2UEs3DZ5qM5BYbYAPqGvCgtTBNa19dWgX2K7JArUyTsHJxoc4fS3tHZ+yaMaMiRm0DcMbePR0wWjZrnPHg2B60iavbeb+zh7BNeigcjyVZZhZA+sFH3YBoij7J5qUSI7bzBOQuA8H9D7QgNdKqImA++jKDlWsX+cRc35M09UZkvDAHTDplRjj7vBjGaxr4D0pCc+qOe1SVEqbuCTz4glkChVfyZbX4augA2E+eFrCJGBlkeHVJNoOLj7KYPW5e3FPvI5OeHUaIpkGHnK45MSe7WistUwlmFeXSjJqFeYeYpKkuvAkbkVEUH3+Xcjj7TDd+A0TPpNaorCq1D+qXGTdqR77Hjfvoxod8mQpXv3VJXR9J9407+/YWnZgAz9yUk9n9TjcOjqt2+BMHcZVvu4ZYoCnnXwuDjie/n0yDDqA3E9xcnHFhCF5By+F/okO2U/n4uM0m8yRvfkUgMJG6pGssw59VfpSeXRAbh4XU4srZl7oL7KxCrxKww5eBAa5eClSO+beCpWmjAnvgy9tpEhCE6A1Vt14+jDbVmJQY4h2soPDRIvRgyUc8rUzJSmSIZRH+z0aAZ15GEkZkvFQ2F4loIdJYeuxHDmW5m3rEpXn8jTSpH4FpcqVLcCRsqx5ckqAuX84Z2p6njGAB/LVnqUd3LkEpATikVXIceMO9qdcxdqVitFvgzBhmXwts5PSaPfpSY0jmGyxGQUcDxy+x9q6WTyY+muBj8bSYsCzqzrhXL4/sR6emQYmYOQcbgxeJ+F7nX0S2SG0qSAZBziszNoWLRQSwZKUOu5XnRKdx4xJdxXmK20+6dMnV+jwxGnR7w4+oQFCHJKks9JSjLqjo+SdToIpwj6ccJVV4F4HqcGzYygzcsxW6uKeGkvPa5tnKw7gW7YlimUYWQHs2gC2f0U9+aS7EGSddSfnkrRKc2wkqRtiyPngMfb7jN5dukZJykqfzJaqYeR43j+LlE7pCyWU11TyztkUf4k6YT4VDpCO8wZxer9cO4/TnDaMqSXSLcdKJup81hCUTYV7TLS7J89S22SVca6hh4QpKM2UyLDyCaAhGoWtdWrq12bQwf6bipuk25kVp3bNKJFXCHKB9zo1CyovvZTFRnStJQLFnpE1pd2OsH07SIWqUhxhctKFD7jYWG+VGm1rPmcQP5kUGmBYJaBnN9eJbrttSOEwgBAuwkAwydw+238+1A/UlNaspYpk2Hkh+L8hqgRBEsmYyCn6qVHhraApjO9E7mZDzVgRszIpwkTbrBuOWRzNeMnnpnnpT6xRhLaSFVeId2oE0qgDQpWZPQilrPynxf2JUcKa9SnpU4ZNLIM9V7J/ISmTMRXu3rPtKkzcmBlfhpPrTUW1Y1YbyndWGg4/BTJMPLB6AtnL/yundFH/eFOwKsoXWrug2pr6dxLBhKOFDm8VAYcgVUa1l5sZ4oxhvt89jqngGPyAQYYPhBRJ+Gqssq2ilM3pHmDReS4gBDbJhn0HqWhyp8al+MJuWvpq98E1ZdahzRDAv+2QdpUAFwGSXQk6WMKZRjp5JiXVwv8vKt2K/U/fdS01MGueKhD2+vb1u7tVjXk4J1uhsW15cZS21jgaOSEdLPjtyrY5kDk9IUjmTmR9+yrSTFSeSxhmYLXeuWKhj6YfVm7moYgDQOjgW3JoHpJ9UX7MwNk+FWLK15U25q5FWpnLQaiQSvnb1atvAY1TZ8Mo0Lhmu+pA9dxJaE0lVD6tOWkS4QmLLsMG664ExYVg+rzfEJpVdpstqGNKcLr2nKfVa/OXVxn1jfDjdCufTEx3cs5pbPoxQ5Z6VOaVFjvjBxAGqZ+2aAMpIP4PfEY6jAd5bPEtnQ7PNuMHZ43UBwhWqEmp8VgutMjg0WIGF7IK9A9UdYZCB/m00+NHYnxEn92/JPVUUrTY01XXRKtojQkF6KBVKLg4yRKHqwSx8eBpy4jFopwDf3QIMRxrjOErCceRIoUEgioCsQdcxsZ+srrX1E1HImpr9C5ddQzSl15LLbMLNZHWrk2WmysDgzTKcNI/+Qup0w6kewMxjfqWnwra4yiKm+Qga2D6hjzbNQhIhWrFx80UufSB4eIweI0CURq18X7yqgf9eMRxin0v/NtUn4+PCbWJ0dJoZsS6Vk72UaGoCzXRY7oTJPz8HzFAauglG7yCqAxMXRUolMwPxseMMHITo8MI5vsMnBXBpSvYuV0GK3S7wZJHOXcfvu6oY6CcZtxZqOQpAmmp07AkYQjG9NmRxOqJ+keOUtuG8INaZ1lCJEqy0eOkHQReSR+cvssQy+0UIqoPGT1bYfG2yI1Oy+SQQ01vI/Op0yGkWJZv/9quGZjxFhGf/7FyMWD3HuegNux0NnbqNRWsTrjCs8dIJXB67mjMZ/Jbf11GgiC6rJrP1eMUSkpe7i/ThqnqW29fS8dHpLBFNO/WnPdXv/tW7X9tgR27OM+mnsfUyTDyHKtXkbgnuqhWqB/UcgdO4U3wF5UYHMPEQtzQ0YeURscluBHLPiVNAiRgXcTzJmFf+lddRzqmxkr4C2K+qFPfUGzgEQXJkNRGYJeOCrRfaNSXJdofbZl4J+hot7OixP5fhaiAPpXfuIDPdSwRSxfZaDcbqd7UyTDyGy6xNwtrrnX/9TwhDNkQi/O7UTHPjtCsf6sNqFlYcfQlIjyQDu3xDKaE6V0g/rxA2POo5FgpUt9eo11ojYYDLfYBqbzofG2epVFLD7Z2v3T26dQApbfOgAMyWBOJ6y3TgZzzPqdj9X4+LWBkN+20t9ENCEgZAeFv4S5l/atPbolCwPHlMgwKsoYI3fp0LeYkVUjpLxfghYQDCdczC8bgCElQruwEgX+SuWFfppOVdHqSPpViAePKODfgEU+fe5bakTU5xFC+0pc9zNURYVDS0CvtMMQutd1LBu9yqIbzaAMKndWeon9BTMIE1KKioUYsy7UuTMltgPlk7CWh88c3HvMupgmGUZ+uyJxPezn3ldXmUKaZDxUBdCsXbysJwl5Ru+YRagXVKYe2peJwkQ8KdtwVCYn+koT7Y6MMfNrRdnT4Ue9A9s+QMZXdv4knySerYwHtSGDB2d3mn5dQmNKN4kSySD1e0VPbpuNtuHh0rvHqzmpPYHCNMlgDwj5J0UGSlWK9B6D91QmpFDJc5MCwmSyxHuxjMOnCuk04+50oseRzOYR3taOzRty1MhgPBYbmJzvhoUndQApoW04tsL8soxGW0zXxlKhz21kMI9VGYTq9v3X9BjvV4sUP30A8Pur3LRMa73VNuILfKuPLv5cQyyfFhlGvPrJ3sfnZYxudtzgbKkD4QpKx+nzA0XZd1TwwDS/GS/xF5mk7/l+YtvzTD3OrTx2zm/pSuWHWGPBPatUvjj9IX55/AokGjojo0YmH/tBGQIjVq30avicqCGDkabTvazf1C/z3Z8gS39MVTai1V4B+urLMLIxyGHdEnTUQXdDgTLFzpRzn9IoS6L3lki9IUkJNxJNnZJGQtwytovfKxF19DxVNGydJHuIVbRnRYfgxtHABYFOyp2Os6X0uG+xl8RRbLUIUoZlYGUG3fWPOEt2cKptB90kPeSTwJEswnTROgLhiyA+pp7uiP0OIz0lMtgjpIbY8AeEzNtoMHSVKfiOcafeGG/oIb2wgSYShGsHCY0KVb3CivKcQkTSyV49d099atBUxw/KLvXV9d0cysqMx65zRhxhGXJqkMjXaG68ijk1Db7mWNRID1cOykBlgDuu/1Fyr6JL4FRUAaAkGUrQLe/1BJtlYGrEq3gpcjIM9g/0TYMM9gipnbMvjq0a/jWtKghtA7Phh9lrCfeLMaJIR+FTktIs0hUimw2PQhQz6CxQqKTwSeVhqY8iRH5bnK5tW58JvdzAC2zDwuErKqm4bv25AR0hqPK6n7r61ZIh9A2jSSHVVNOEHU7vlI7Ee3xwktmIz4oM6QI12+WTywJ7g+MUymCvoTE1K2IHhE+MS/qtdRJzIapYLTfEsJipEhsaI7ZNAJqYolyfBKayMHD0vSPbNzSxZdgqYxhEOsKiiOad+sA7tQbfJTp5SAPEfIrl78tQNSTOQRSD9F5S1NK6xI85KYFBCfe3RUIirpNnH/+Ox5gu8inUaZFhxMQ19+sMVKB5NvtrHo+wmx0koe9sq5xLsiezzWRbEnVEQkvVhgDIzmAhqdTB6fkq7Ub7SlmIOGTc4diKtlH0Vk9uIYiSUx4LfWeaNrJebH1W5lsyeF+esxu4qPxA1HUoZ3oMZE48qCQgZ+038xNcodIiHmMqGQFqGmTo/iwvR3Nul4zfUL0o02R42og0YdEfjUuRlzqwsJmUYZs7ahw0qdZjHbbbXNMeT8NKz4Yg8F3mzJykMnW60hdEeOhLqm8RINNpKUM7zn3D+m7JED5hovedJl09FhppGBPnf6O1Zrqe2DR5HWJsimQILyrrP93mZHSeoTN1oxzy/xIZY2NiSRh586AnZ9Bowmv25oyDSkhtmB/ro708GAT2H1BnD8c8ihoB/F4ICyURtUbkyH1c8T5y2yjD4HPLqPdS1OKoblPbUs+ahXrOEO/0lsRPUVswFbgd9PdvSuRtSmWoq0zFBTLmnctufGvn1ZBtkqROot89QfQ5hKU0HkGMSY6tnJ9ZyiJ2G7kPXaWy1aoS2+g/hfowRdO8g/0k1XVeSKYc9gt9N5kI6tgvRcm5XJZB1XZCegi+lWTwP+rooqsMAoqkBeDHWXn+pqPJRqlvLCygKEg8VyKw6Sq/OKDqy1fk9GEp51X0r7IKpk6GLkLwhM5GoO5MGxp6CtQL/SL2F4aCZOAyuLcWmCFH1CZn7IVMMcDtbepYm7RRJCkKFFcQs1qYT5atpO8MGLWwt8gAikzipS67OgjrhfpRpyo+lEMycEg1SDNAYSCKffC6u7DDa101ahfZjbvQbnA+0h/GTMdDghq6evVeAI/pkGGkNlk4nDCK2US2BEYYGYOQ2lFvgPvCxnSL2ZJoJKatQny5glSRfpCM6Tn8EIBZvW5DzGu68fU6tw49qtI0ejibAAAPLklEQVT+QfDDvIMrMNQ0LXcy5AzT0zy/OSRD0Jh4DU8DyNCC3qMJ9mWEj40LBd1dF15MCDSYlvIVYDveCxY8HTKMNH2IhsaRAfATl36aKXUdhCIw9XvktcygNRUXXg3fynrplf5TzLjz/KevJNrhpKgkiQd3KOZZ7wt8+ZUR2tFJKs/hUBvLIjxGBBC1PNo50WjJQEDlnOhmoTcXMC1mV0gdSXsByLq+xPpFYjQ7hVl2kiFZtHU+PTJ0f1IrhTXfnVWi3oHmdYqvDvYuoNoJb7xZKlQAn+gQc6a/Tml9hGV/UWPQlx+UnrH3DtPxp8mm+nIGdJKnR1SMpPItJdSz0M99hDEXa2sOxXJovWxTQ79JBos0QAAERdigx8LlML0BCmJO2NsI/A/q0MqdDK3zR73HozmI5Xr6YMpkGPUdi3aJRX872zyZCbEihYZwvoi7ELUjglQhutoX3Vex1bsLtQtb9lIP6RWKFgF2KY9n5KfX3GuUFJOJHtjRvgSIRy369ApbuUaXrAxNMStwhvmcxHotGeLhNTYqOhIjzqeQXlVvvDmGql9ewYl/W8+qNMXpfZd0XolTQB3zKZNhxALYLYV4MxBJ+S0JXMddw5t6MKdZth1fnUaIceXTVyHicprWZweJSuT/qV9Fg0YuXz3b2xu5Pl+GNpX3EA14/qNdaVqk8hqPGeKVXy8S4is41IAMBgzEei9t0DKhe0Qvr7roWFv6HCavaohJRzofs4ip5ArJJj3WzGGmSIaRFuQDUCV0VEKua4Nh4cdDpa0eOQcuo05YpXXP79uJSL1HduWKkEiPdVgdoXcS01groW8pJJ/xJUaX7Zp3rTuTdT7FlJ8c0dUYnQgsPzma9tMyDJIhoLHK3G9RVcLEEzQaoEnvdk8IBgMrjomPq5F2gXupSAkp0rTIMLJyerO0phyKUXG9l+k7UodlMBIZA/WDAZhhs6dLcICShOC8X8OUP3zCTkl9copj/RTnK88/aK7SDZSXF8CfIixe1rGi/VcNFjWTqI8ggwi6Z4cdAUMqsI0MlmqJIObw/s1X1Yzh6JfJh0OUtu+Rql/s2G1z7reSYE3TIkPYqealVGtYaN2W/negZeNKfamhtATkEMoQrJ1rpNA0SyJ/EcUpFyc6rghhe69iuWF1tWLjmB169CSKdX7sPDimZ0cAJCxL11mRpRdVz5YKFZfP6PVl4MvV4o4nUKPIYNXRlp6sheqproVk0H9IhnyJ3w3FZLC9faQpkmHiUaNSFI8DOhcofL8hvEkj8WvrWQdeDSrWl/fd2ktwQcmJeFakfFIKZ80CD37Dj434RBqsNK8I88gWzeA0kY7/dOVIvS8gWYkey+9Bri2D9tvTFzlS2Ak2Nm2EQj9uiMR/CQ3pa8oWuIvWGCo9oBFFpkeGkaFpNcaMnvpvoRWAwBjx75NgqsLRIeWAapT6MJL1qEjI0SX8pRk67Be14RCqyJBy8xBXhegm2Tm0FlKoZ1MaAbRO5C90+v82dyYLEtsgEBX9//9MDlYVDyRPcov70tO2xCYo0GJPTrkkbgFPyUQ6nddVhzVKjDl+Vz8DX1LtaXFxh/yY17cL4M/S5kp/NZ/8mg6/CqQ4oqs9tQTU9PrvDcjbeLog2PTmc9KmWB2Dm2xvKHS5mtWnvrBkyr4MHAsR1V6TbLwKRjk5WhZ70CvH/MKlEJEpuBTbQYIrUhynWmN/0cE/O3xq9a9xmjGafTycXcnFJR6Ct9lrE8b8Uxlf9JvbO1Csxed0+M0I08pA8S53laOGFM9rFUlqDz37XkLebaxY5aAyqsoe193JvLfa0qcM1VYMbC3dHI2zeF4yjZ0Z9uL1MfdvDt3DewSb20nf0pXjoINqbbf7poNsCnvwhHKAVr1qRDaWaCVbHEa9gTPgXWis/1PozEVaJ3gF5PiaDj/WbtpRTgsRQKutb5cEJc4ZHEa7ll1Wja+cnenx+K3gW4sBk2ZQ9I/SwsyBICtWHbDbQS1BBwhLltyBqQzolB6xn61eGxwe5fSKmKTh+dm8iXyct3ke5AZ3HTj5rmdXJvyGZe43Rjk603vLtBScTfj4Ze0p0Ede5s8m/DUdfhpc+9UlO5tQTx24rswitK3BCwptNF24v3EghiIHn2j853HfZPZhxshG4f4D5ZNLTtCIPhqrbRQWw0IefxXdPpHM835DvQ0Kl//HduLt8nzr6R/NCfdIuNSrPtzslO6v3qtQr1+FiZBN9pr6NLe4BslXdPjFduZCTKWdaAOm493K+CVpzzCMUq9QtbKkDHPsXgakI59Y63kJVSKPhv+uiVxdsz5EDZdfkLdZRYftIBcn7JRT+mPwuKPd+8SlT7Zv/60susei+F10EDiMKGmlu2guOdoMxmo2TzA3J83EUIWrglVNSj9WAubnm+cU7kM6/Co96ZDc8iCnWmqTLJDOtjYtmUytVqFGwS6QD7Ixq8zE0JU9UaBv8GTr5785P8kaGGU3yuGDfUSjxvHRw/66AwiJHE3TCY9yGU0xb6ll6p5p3nQwoGTXi9LGwa8RtIwFiqv3vc21dveT5qlfSxHT9mt9ToffPJO+aW8QroERAgejSo2VD49sNTY+dHRaS7hcRtBqTTxn1dsJRykrs9DIROcFBMmEbacxoLNlxwBMRFeG9AXc5CRr82iTtu3Ix8se6ETQw/ekg9u86aCMtzOOAU7dOkil50/kdwlA635e92pZsNHoCAB8hldyxaXPd3T40SHaHN22V2pRPySdwHl+OtGqtmHm6DrRYXeodBhnMDbQBb0zKS2t5hT2og+8rx0XhnA1o9LgBbIaArP1q9vU13PgRwgpMCTecy0q2bLOuw6NsXTv0VxcXPJSl4tzNpLZYt7lyxGY7M7sIIkAgrdB+4gOvzorzlscOKWLDVDa2V0nsYtuULBp1b/XcoQfZRf0Vu08A8Tp9irDDg6k2VyrJvTbYG2KQFub14V+9n5DlaUgfwIcNOaEPxTAkxgi6qLDEGadjqE+lT1LMXSbPA8ascpGc2nzr+41zpXBdekls/zPOvy8BJnacFurj3JFqrPEDN7mnEDgOR/Q/cBA50bU4eC3pYhWikwUUM0/ZcI1b3St5ZWM3M7el2yJZp1XQ3rYiQf1qjUMJXWbnDwjNkAit/2s26nDc4EOQnn4eUPktW4R3UpN0Chwr1MGt0/1D3/Nc3J8XuFLOvjNfUazFELCGS7O8i5rKRUT9ZLCIyvFbLMKmW8ZceE+f1/qSB++WyzD4uyySxSuQtW38qaOep82aCVeS8fPxXLk8P92MOpLX/LabwVxWfaiwzk52c+jHBK+fc7+NxAmy7bax54jC1TVwXEpxK/r39HhdwLxPsW5NzrOg2ZATv69eJ+/z3quC4rfcMaK5NyJhI6qTDYlB79NL7aMBcBZbVlYultFoF5l4kZ4sq5lIqDRTF5Ceq+gyLfnhHnIxc3INx2a4gCsY9WN2Yd9acSmxxttyYNB4mLEy3WWTNdK6UM6/E6wCwAW0WgHBvllpUKeJ9EANsGO33e5JbyrKp8VqkjLjBZnMtizAgbjeHlyq4CaP5itFHgWgMeyRQ91JzNXLARhOLsGArOCYdtq6XmKsrmzFuSuTHnXofqWPDlG/ylNMI5tskQyApzK3N793fapXeUyQ52NxKJACVt2QQ1/Tqy/o4Pf/k3nKGconol7D/3swqBMakjGFD+DQWnRqRYOCqjlufZmAwdP2Aj/Kc1u2ucp05LXdJhxDuJZ6NMWIBCU0K9IxnDqR47jwOQrnK5mnyK8bdWIz3G60JwIev0UZqtpRF09yuPdp8hWEGjDNj+ow88HszCBfH7WyU6P8wIVSrh/VinVn6nu7eR425FfIt67z4jsPJwThprfRCtFGAKn6vfo1oGxqKdCU9cfZJF8MWwCOUUnsMM8UWzfD6639wnOXYd25Hy9BNB005Ix26XpKmLZafba/tJneGVva/RYsfqJ4q/o8PMEEKjmrK2o3n7tgG70y1XKJ8vJ3Jx9LtmirxCxxltLKbfNvbBKJUO2Mm3UgokjyrW08yimt4s4U8FwyWvZlZ94mJRLRtvXrs8JzG+Cyg0Epw4Ifr9K9M/Pv0LoMgCITQOYeYar96m/3/jELmnhLR/T4eeNDoSa3ox9rDZN5EuOaQ60XUvlDB4YO/URb6PtumYMplzfoG2ZstnM8oyn6rDUF+4UrY8O8SVsoyCMRnshWcHpo06kBuY2teSItAaeLp0maEwd9r2c8rSuJFKrXXM3ycHIxEp55lNu2fB5fNRnXM61jGojqXxFh18NxqmcnpXPzQxf+0cFAVdRntK8BtVr6eQygYSZYqaXLUAhsLSh9Xo/G8YCn3IezJFwrN9aBgw+8ESbtM/WNf40nMIQ8wZn5L6A0PsOHXQPZajkk3MVniBc8zS/FdVLrVuZEU1+b5BeDbBKhxh0Ytjjgzr8NDnm8qqe/6otdD18EX7UNPdgbzzU0B686+k33dqO3KKz3DDLWuUsu48Tx6UmxM1H3m1gz4EQ9MlM5iAqzrWa1DMVjzfXnRa11XijYQ3mqevT0ghycTAM7E0H2WW0D/GzAxJ+5XFZl3Zfu1uin3u8ZINbzX9tumVtZvqeDr9EuuY9BfAeVyilUkL0seWkJUIry5Ch40YFYUoNtOd8QrQ2bbpt62NDVFsv97n5Du4sm5k34Sawa59Ws6KcJZ2zFwNy00eZlLQ7kWOtMUzntVcdYIP+95CxtSEdyZm9L24XygpgCjznp6Y/db+1ZFm8SPc7OjhD9PSCqFjp//6YCoQmm3LHEDz7z0d+eB1KmkM0rboMWikaMS+uC1KFwKdI5Bys7ONTwLOXERMZ7mIfDEIf5z1DmHbiICJTRCMgE0QF5h86nMY7P900zMTg1Zib0eGUWnlMLzOHeYyVa9OisxYwfFOHn/7zCksmTSQfh6mNupvcEo0oKn2bDvQOtLHwdOqWkdLt+oNGCi49OAQBs2gCRDbrLF4T9bt9KsMUhfNv3obx5+GxME9mycDN6PTcL/7QoRmrbDEzOmmyDp+fPmAblMZNrgBaiLejEo+B+Wx4wwST/Y4OP092CdxbAMmVvo7DaJv+M0hRKFf+e9oGjJpz2zmnU8SwBOkpCJhJmNlIm4EWaBfjHoJl9m3pBlanDi1TTf0QCMMWXUbIM/tPHY7UghJRMkzz/YXGfyI1g3cNh3rr+B+Yf0yHfwAjBO4Lyccm/wAAAABJRU5ErkJggg==","overlay":true},{"id":"DigitalGlobe-Standard","name":"DigitalGlobe Standard Imagery","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.0a8e44ba/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqZGFrZ3pjczNpaHYycXFyMGo0djY3N2IifQ.90uebT4-ow1uqZKTUrf6RQ","scaleExtent":[0,22],"terms_url":"https://wiki.openstreetmap.org/wiki/DigitalGlobe","terms_text":"Terms & Feedback","default":true,"description":"Standard DigitalGlobe satellite imagery.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMQAAADECAYAAADApo5rAAAgAElEQVR4nMy9a7Bl2VEm9uU5595bt6puvd9dVa1+6k3rgRCSQLKMEDCBAHsEGptAGE948Bgz88Nhw0w4bBzjmBl7HDE2EzM4PGZgAIMNNkYEDKDBIARIAoQeLSG1uumu7uqq7nq/bt1b9738Y6/M/DL32vdWYzw6u6PrnLP2Wrkyc2V+meux95WFd31fAQR6FdRfRYuF7ujvAhSpdQsgUusLSikQ6e6hfkcpKOJ9AIBo/VBaINRfqd8jd17Lf8HqgspCy8pm6K0Km4pNCYUqimQukHrs/mn1kcuoi979QNsGo02rRNVXjTGf3e9ePRoj2bZe/Oz1a+0j41omLR53+vwqyzBqDoR9casohe6WTmrroPiHVKcA3BkgYgMsXN9csXT3itBNN+lKDp37CUSZLahKIPrGp1FGIQYLeaBIdWhSQnGmjIoqXukYYIQr4IoXCfVPl8oQnaEow/qBUoZl0KZhHKoM3QAL3S9WjwGro+P1CtHLn8a7lhMfYgXFxqtU+mx83m0JKpsWGUadSZCFEdNqHGrodk+otoj9dmSQrhK5paKx+5WQkmpLikjqG2agQrwpkmQEQHHe2AZL11c22FJxxepKsahVTCvFBpadjEe4pHtqyPpbqtu5casuitdXPs2r6XNABuOwqB7EeFMDLUX5T9G4Wg3zqarOZd0n91VcBi1HB2gWu4WjqttXMGiZPhlGqKFGUFCKCyAiHpoCDyV0CL1vdat5mGEWQ0o1GTKrDvOLO5wyZ3XFfN946OxCjK7dFa/p5WpYETn0rnQj6b/pm1LreCjkky6Dyizqt8Y3NJDaIIoAUgqhktQ2xXkWgXDvso0M4nX0vusZNeIqx8S/RnCAxpiN1cdd6Qn15WMSy9lQAv8SywKETJkMk5hjVRhns0ioChLUWfLymJu5ZCWTMWQWiFDmKNRAnaT+o4KZaTBzAsCpIJp48Win6Z71UarlKiB4lLDhU4dlRDNnrTWlmMyayypN0xWlj2Te1BOXlV55loGCB1AEnnGqx1XaharTgMd8Xex3Yd2bIgsNIkd3Zlvp+fxS4dZl6I/rNMkwcu+IA9NLkY2MG4Xxqy0FYaA6BZFwxjQRkxgzDHlpzAOuEGOOIqlOjxUx5HUfLarnwEPEMUIym8go0zQIhdsb/Ft/wTlrbsCmnl2CuShlWIYuChVjS5iizduU7443Q0YNYdXZu2o+mKZ7YVmE+CpG3/otfSlQXIZSaXCEmDYZRoZVRf9hB+w80OYTNFg296Q2yrCFd2png671henVT8rVJd9TmpQWmYqkjbU6Go5Z8b4k/LKQa23E5dGvqkDTDzwkB9rcR5WNUjPWSXFzCXqSUjq5t5FB5xYEZZZmaWTLE0udbzEGampDawrk28XLRdOSKoP4yo5Uw7ZITuUC1R8h+BTKYKtMKkkpahQgb4rLjm4QnYGqpxvcWhsaPpvEqNc7dGqELKpFSih4IspCRkT2ZVZH1IhIpVBkMqJdiFXa6mxhibhEgCqmJ5gzMYqXGgVsUqd9WB4pKFJCVGFJTIaqVNVZUwYwcKH+Fr8tcOmMp84xi8lF4FV1qfM+BzafT6LWs/FnHmiQOHXuutE2KoMvVkyTDKMSDN4N33cB1IPcpW0gCQn4N4qia/XsoqHKL7M581oPaW4c7mgWlUqxfsycKFTHeYaVOu8WSqSmZVrbhikglcGOMSz24askhfrs2nB+avMY0g3zWSyOaAPPi/uxkgyFFV89t6gMjmqdsYlYWqxjY3pQjy/eq42H9ekg5cjqJQrVtjonJcmPYEM2J5syGUYRo/qmFASAV+N1cSgSFL4PsrPCTcElTFZv6GpXCDpmbtFhlIYqMfCMzoEUDTxgEYxBEUNqyiaOOEazGMq7IzJzTK/v0DbxE6mG4sut+VI0DMg6IIONiVYW3aPxSMLqdYMszrJryhkm3hQ9LdoTYLJh6Vexwff83xYTGFegwDBdMozisPiASs9SYzWhQVPyERWJxwaDlnblcsDnC7nfZI0c/qIRuw8VQ66WECHOOF3h+s4k79h0BbTsB5UzqjnL7OimDFbdpVUM5mBIhhYIUG91jNjJ8yyk2DiE4RbltY+ongsGwRAm10a+OOFk5NMqwygyuY0TmIwlerkEetYDCxrNqLImbQQw9Gv3Hipq2NXvITwCKGqw3LqDXRRDsk4IM2jaLbfAbJM6Rxb3Tv9lfIU7ceIehyajq0vOSdiQDApMEXQKdFM0c6a0HECkjkMySbMXDvV8n1d6SC8+cTK9NuNgBbEyhTKMAAR0yrt5bOh+fqREaIeGP0Vm6Q94ECcJV0os5VyzytIJ5hl//xSU/6tteMXfB6nUsOwrRVJ14ImMt2N9eE+KVjqgJEN1Nkc1501qOqD27BtuQm2K67UgGlWSgcvVSHgu6I7E+XgloTNKINSzjnuLJUzH2WmOMKcKTRkqSEyhDJPKghOtlX0y7MR0ct1tu9OGCC8poMTJqtIA7ECf1hfycFUSlBNykpBiwI1KlIdKz42sJnSlqkngxk8TNRRXjq4C2dyuis9Xgdkv2NhNbwWkbFqxA+lSvF8bDLYLEK/meEMyIPZJ48TpikCoHf2GL5Z0KYeYg3fD6vf4CnagSGv5ry5FU59hMk1gS4qdFhkmmiJ4B13rEoh42NKczp0BPriiNWB1IWREDSYy/dI1NCq+XOdKcxRxLWuZGxn3VZXFDieaNhVXoonEjuIDqW3jwIRRNd2oUUBTA9aMpD6MHsU06q+r05ehN80Lk7ioK0/FGJ2ZHnenoMjjg6BzIZ2bBnjcuD7zZW3b0eWrLcOo1I51EIq4Y5TCDWH/x3CoaFaoAoECexYZta1G8ESp1ChSnBaZMBSS2U+L1SeH5rbkqFFvDWcoZJwqOzm+NstoZgfPDNW5K4kIWmnyGR2PBLX/kvodkqHE76IRmnL5YCwl9uX0qQ316X0orOvvalwl0Tb5uu/OB3oOzuM0TTJMzJDrgHW8q3cxQXY8CUKyxxeUcFjPxjVHhhbipggTCEgXxzR6ZMTkf912I6VSFcHHVTzb0xUjR6EYJt1xWmkjy6e5a754taSjI2ZF8QiN1yWw68sgPAg+dlL54fSMQ2Bh/iTYh6vcEIpQXulqDKzMBTWpjJnxMA5VR0L1p0SGUVjXr0ZJm8gKvh1fZNwaGbRO1IdE5uBe3ZtwgYRtas/BQFR1hOjR6xEmyZkOO5A5jRq4Cql1FdmpXx8TdT93Q04PRPlKl9HT9Eg6hMoRx/pv6KKX+lX5ewsTia9sK1wQ+lJ65rwNGRRxVX5C8yBDQwdBNp0fTZEMI5+EOsfOrA5AqeWOZiV80vhz7s36qRZVQA4n1huCYyK3C/rkc3UdTa5j6V9r74F0o6mWsiyqwNin7266VzqPHDqJrvhCxaCfD5T3mjRAtvCXCmIZg3oT72wYLcsDbPyCEWZeqzUWBSIzAGfE7K3Rl+tNpk6GkU4EAfXQevCKiOlqfqE1ehWMHSmuDFX9FAqKhdA2y6TGWb3bEKCzL6vTob/fK+m3nXy1eVB0MQdyGgE9MUmIzwos6bvzTu21TOrxNfOHfqQyPgY81lPVTqghGdhYfKmbeVZhQYPQl6krCK1DX7pnEOYEKqNUYpryhlUdIXouT9z0nS4ZRqUaQuibBSNezMq1I3o8zQzMmGX0zIwkQzUjU8VGYYLnp/xMuB/Wv02WJbZlhWnqh9SWUsJOLHcudlTSq7djnjhFrPcTplg9k0sSbcg2MqheiKSlLamepEmnokkYJ74dx9ZWdUrdrymBUlsfPQajjUyjDCPPodnAkbxYx6pGEsVSRgcgGD0vKVrHAlrGdJwtBou8LR8PSjgjOnFFdR4x46WmVR/eXidofOSsOMlqs+ogQn11ii1Eu1iY8s/urJOOJaVt6lyVX2G+jF4ylDTRHpTBQ4mnGyZ/to40nhV4er6pdAmEijpy/S2apjqxRneJttlmNvLpkmGkDGjeTOAXPiv29dmixE/YWC3C6OS0sxZFWkZNLevSbw6vsO9k2jBjJmczUOI0g0jYRDilN0pSKq8qktLU1a9uIsby1whEOpGKgJL5B3yiXWhlSu/RDwcEFd3ptGTwianSIR6pbdz3MYoISQrpP0d0j4wlTn5LvMdAp+mvH8UGRcw4vtMiw0jqAEk1om7JVIeluoE2AJ1R4vFmcOPwXu8xoheNHooCInasVxT1a8QIKzcmoLj1JxTwaEVr/6QY0jvpz4TrnBLFxoAn1CYD1K4L0Sr0DEXplmNpYqf9AtJ41qLmtpoOEK8UfJsyFK5Ao2uRjuVXsGJoSemnRd00fnEJXaJRMqrniybL4b6O+xTKMPKQxSZvFkffNa0q4GdfC+gTBNrFBzEwD0UNr1MfCqtlvoPMwUIdSesrWxpZzEGoXzVcR5Dq6IRaira2Np4XDkpdkoWQPLobXWz5Lk7soyOaMwt9NyeJ0ckjriZeMihDb9OQZeD5DhTcQDpNR28YKUrUUbhYPYy8yjvivaa3aLsplGESYAjKIFm1OUUnQVe9cwodYAhoj6gyKR2tOJjuqRL6Ux6Ll9gEUoKee5uAhMwdAhNNZY77LtqONeSbakX7oPDMRyvCBqOpwXWoBh/2F1QXLR0oLeXBb7j2ZUgGBzGmxX1wvZ4e69h0m1yk/WoCvGcUj6TY4JEKq7FqyiiIdYmG/RYnMS0y+MZcHYnOMWtoV19wCHAES14WpzbulTx54V1dUyDrM+XGcYUGFiqE7nsIlfCKF4cRNC5R9dc6XT8BqTMf1Fblstq0mlHUEYKiCVqKn6lFGPhKl6KK7CBD1FMCNdJ/0AdTEJcb7MBE3iISAZeWR4rKfyppoHnxwqmTYWTVhb1PjZWbDoyLtVXGggc5AylF4HsepFibEtpUqKTyaJgx4YYjTXXcODllXXnMZBeNS50g1GLmqW0htri/KkOvWYrMgTnlIoFPlqEHwaaugjQE/bHbLo3I/Aw5JBuojk+jGrfvrUROmQwjHizDLhGfqWcmaweWsqWOdKy7ex4JIrPRadz2KCIAPYVsf5G3MT27GySgPF7MsIMzs1wKFiyPokgH9dVXnYe0xeQfNtGMqBd0NSB6lsFCTykRmgldUSftnlmW2FblilbbY9159Dp5JznS074rR5YmUkpVpk+GiaU7EpevSs3hLa9VJvUbAajnA95JXiLzTS06chuciaAQ/bmHy196xmQQbLLAJruJbeO3lQbZ1xKL2JDtd2Y5kbJ8Wagwy2aWQQ7UAoPET4gOpXWT6SQttpJnpaOG1Uo7LK2h/lTHNvbUyLEzGCA4onPfUyLDSOoSoR67tYsMWgBbetXVFHVIB8pmTEqCed+mo0rY7ZcMT6lm+dWhk8N1VZIismFltAi3KZplvnPkUpmDszjS9M7daEN1RpIxfOf+e/f7MvSuHs8llvMKFw8EA1RJ9cN9GgyVOfdpPJMiVU9KPwHwtMhgz1T31t8pl+UVraIELM1wx+z6VCeKhtmtODkjfsbJETLn3bWUFBIjFkcBTifiUpySLCa8v7GyrixVBTt6kFDZESyVjKtQOsiuq+Kf8HEYBI5kG8YXO31DBq4fELLUPRXTiwth53rI2YbAoYTvRN/KxAGtqMwtRyAa+j28WnI6ZBgVtXjx5c2wTAp3LIsQqN5tRwzMghEkpN8MEF0jPz3rfYl3wiRp8qU2oqtL5hPVUPRepm6IzeG3OqIeAbC+WAoybr5v+xXhUVoHHMeN6Jw5jQS19Rk5bE4SJtJZBgJEPUtmTiQqG92nurrzHiJrMOaOZ4HLEPZKbFGjFqlta66vv3WsGCjD9+mSYeSTwaLwH84A+WDwD/UuX/ktwYI8ghiCZ0RzK3aDtifwJTJODNguehXIJ1pQTzFZbU+lKkaRwXfOWTAyTFYc8lyoIQPTUTLkpMYvXyWVKaspP95WBtMDkxG3RENCEsxoIfKl/h1AMSM98x/R3dpQ2uLgEA20ycOUyDCyAGHeFVFL2TdWFJqqE+QdVN9ijx3ZikKt23qAhyJiaktHd/VhCiNVopUab4kYrQKECSzT4r7ZUVRxvNLBY9jHD6sfIDAPQBqgFhkLBYMylL7uMkiYHCCDdecKvFi+rf9XfbJT9mQtbjucPzMdTgHDK2amS4aRepTzUpHJA4a3ScR6E3k2mEqH1+/dJwzCqePqSNy8oomFR+Yk8ZatU+h7trQwea7/G29NqwQpNtZTcZx4od3yGD1CXUFPBmG+8tWSgVILNzquS0wGI/BBD/oGnB4ciLrhChoN9bxIGJ6TgcSde9fldMkw4pTDowXgB4zgKJyXswKyqjLEfpqSgsJUcBeiM8bYzq2HvVUFSBAk6TfxY2RKUkQSQYyFDOE9pgJbmd14yM+bFNLFkM+1+OqQdECGnIZZCpn4FlJnKu+fHnUG7IAkMRwWHlywaLBZhbn+gMzTIEO3U615NwoxI2TjbojBZhIqUwjoyV9SoUWb0k1/g/Fk+k3kMDZjGy3XlaPqxxDEoxBm2wWmg6rxcLKUaPX7oAiokUnbSN3crLoXk82PnvQUY8qiY/IiO8rg7VWxcTLeHARKU/LqjOrV5Jfcno7fSywP85xalFIQ02VzafqrLMOoupEnGgXwZa4Y612ubLnsvbWtGkr67OrSQS4A/uggSc1OXK1BI5f7nRtHXNkofhYLdTxsblOYTZMZVNY/8yJNJOrGWnXEh9Iqz1VhFjirEcRz+j6oLoA6DkfXhgzspUX1qTzQ2CnvOvDqXToWDYSNfWjfrvLQQuh/Lub5nQFX8aCu6DpFMozsL3gqkfAjrKJbWaQCtV9CUjZ+ekbb0NStNxpn7Mr2IFLqIxX6zcNjb66wMN8RN8geLHX3I/gUioyRryy+fudTluavqY4PrETHVSStHpSf5WjLoJbFXaR2dDssNBhYcIUkl2IFg4Hpg1GoUFuXwdLWLEPob7pkGPHNXjiPEFsdmB7sIBE6XhxJGWW1zyBZNYieIL3Y6Chb2DmgfTCK+KOb3gcp0pSUFMh6ykiXVNFL5/hSxIOjWS+UpwbSE5d1RKjYkMEm1tq35mbqnKD+C53b0fEgtAzyljrONUo1ZWD0Ntm1P7pX8rJ1ROtpk2FkD1FUVFKj5/r8Q9GeD0VZiOtxxZ+NSyOH0tD+w71i/bqDM2wXBEMEbE7Eodj3NRCNsGXYpIPsIHl+DfCAaQdep3kgL3Tkn81B20YGizShWUJbvc8gwaz0nM2dTp2xy/Wpk2CEhPAlK9SQjOZaDpp23m2KZBjxfQD2HKz2JkW3n+p3YVruOBYAijqIxNQhyZmPJbgTqkEJ2YLuQDf0NbBKUYICB/TdNG7c1xXjI4cYBHmZ5QAbDVQLObMWbyNDqQgc0FJlqIah38NCAUqilx7cIb0rOxne/BxXR7szm7hRanUVbIsnq/6g1XTJMOpNSETozX3xpKuegAVNTIM8OmFS6YQNPFpA79yQLgeUAl6CtajYq6sMdL8La5J9zWQurhUjlTyWvvPgNaMBj7jxTcNT+zGwoDHvGOI+QTfrPeW7lEEZnLYWCoIe2Q1DaPN6hesVgzJLny3a1ojrWCLGp4534I/SYZtcSycDR/Bpk2ESxgHKt1uUljmw5eMS8Lpq5DQhFPUcuuydqBw2mSSFQJtIpuhiP4lPb0+/RFenYpiNEzZHYT5saAQp4tncKIFIEAB9HdpgWIiVrBbYkfH0eK7TSP0Ui9EU9fisFh+zr7qgMTKg0TEjz9WJe++wJhmc/7kEehpOXAZjV5QCjQd59DTJMCoiYW7byeKRQZ9VJV7JoPTgFC2FshakDq4RrrymP5Log0zr7wUWZv12MVRBQT0tqf/3nanniLUPjVy9B5LYUVgfZJUWZun/EL1IUYVpW//0q1R61pWfPA4MDMhg/XC0Cs5OTw1SdM+TyVL1FZ5TKToZJZ6FAIfmd5pHM99NGeKLkCKfUyLDKCjXWQUnS0UZJvn8ZCKi1yeF8F/q7ISqTIV8EMGa3UkIUVkIQ1AVipDY0i3d4whsU3iufHUeHerASXY8sNEqP/5uHpqAE5xTWhnb0shI6MaaSh6QIRkYnWmlIJgd6aEYSOnNrm04GmM4QjoVI03znFrRuuXnalyG5pyMZJ02GUaWtgSOg0UYAkuwXlAuaJybBoSplK6kt3zGvlgrWmsp5CwJPah/NYze3kIpMfIZi65cD6FkyJUvo+0e7H3mNrmfojKgEXXyEqAPSMt2WlfYM+EUTPlVVLVxc3bcWFwGm0sR+DB7irYuX1/XjuTZSULFXptpk6H7+xCS+kj0bE6gPznH3elqGT8LxUbvXbnBJuNS+fgzf7c2vRtEt9WY7D/MIXSwwNEg1u9dxGQ8/kw0Ut/SEmw7GXIdGsTm+Z4Buj1aua6kgh7thm5aHYb7A31+lWWoZ5mk37ZGBAH8fI5ZZAPLCqInZaVIHxE03bJq4nR0ky8YHD9uamhANDV6iNcNPLEMneDhXj7dG1CiFQkSOaMnhFitq6T/h8qH6lhISZ8ptS0DiBhPEmxfp3meSOsWqltiu4DIOUoy31MmQ3d0QyJvHWPwyCC6/+DWoRtpsT4o1A3FLWdMArMS6nCkUOZKoWcwFMBT6BOG2awIlcmQiKIAWilWLmgolsUiffhDV8k5JP0PKqfv/LjooAy9VSd+ei894iqx3HhSEEn+a1rkFIhTVdMjrRJSNhD5o5Q8dCJTJ4O9l8n5rwY5AG9qxGE7nI23MmDg5jI0nKSfTlhksN/FFMe2bO3DBKt3sxmZO290BPA+ksxJrmi09IBLi746nCAsDOx4tdKFIRnIEWn1PVTRFI1XbYykvmAipzyFnnwmskENJStFDdZaBgRucB+/TIkMtlOt8xld+rNXwMONVjuQXF58a96cApRugVdq/IENV0oxzo21sPpVggaNVtGmSfHKz+CAMDz7+ZhCfXTtVG5SnGq4PubqJyi5L4mpHcKXZjpV8g+mNSBDDxjS6HCEiZtaSpfRN3ZvGiL75NU0f7dv1bMZLK8IMRG4AYogczMtMoxCWKY3aWRUir4Ub9qafqClN3XrnY6YO0/xbyWke4qytthjYU7ApDIChzdsZ3Qt9BkmVvREV8vYggLExiIiV+6LB0mNoh0xJNlBAIMBGRgYepfRct7D3kztg3dzDY1zfqD8FC6i6GdddZXSUKrQQQe2ejRlMozoOB2UPR7fHBUKw14spBDEX4WMprpEjym6b/MF91xbbWoZnHKoLAi1oWXgoJjC7ROsULXQTwPS1P87A6AHi7TcJvrUlg09d5SNQiF2SIa8UsLOyZNCs5+E1NQuGG++1Cgk3y6RDwsJjHguQ3x0tzEPnQIZRuAOdFVJq5rHuRdLdf94jJeF8+MYPMvvHXVgpFbjUSOGb7LEpbzUjuobf/W/YDQWYViBDT4k3S+JRsspSR47IsD9CfqTdTMS/p14DDg1IAMqaATVkjHmCWsDcfubioSabIyBFjPMekD/oj5DZOQJ8xTJ4KddOXSIGzpPZEXLKxO8TR5PfLqB8GZNb23fGE1oaQNfFUZKbMzLo0FZe61LqBA2+9AwPpoLwdt2MsRB8zCgfXLo0DQxh4cUYbVAfboketZ8QAbA/o6CAxfP50rsg4U3HZdYbmzpuCVQBAKKN7A4ysZ1mBYZ6zTJMFIi9clmvymehXFOrl4eUD84np8s9MN5yZh6Rk1LaFxHyZvx5a35fl0WOKRE1VF1IzLkO+KEFLOcRm2lDhQMPDHBkdRoFOvbAxohfiBBgKH1sY0MUHQV7wOUOiQdFPhvT1EZhb1/G30RhAmO+H1jg4ytUB1fDSrOByN1iBDTIUN9c5+Ews7+tFMfM7aFkAKZcw6sN3NRAMdin/FZgELAoF+ov14kQZhQRfQv8Tsty4W5S7jvz2Ko0YpGsjTYQRZDsDq49of7GMG0n6QTcqawJKw0WzJA7aXKIFSoxGwxI93TdCQMo9IpJoIpgfzdHFnIAcz4VReK9PDHCUj1maVpkWEU6NUOunuMSuQU6mgl/SZGfQlMgvMIE9I+SupLUVC92FCE+kS6tB4J2clPCmODU4O2uQ7xr8CeQ28IWR09jmqdLDxA0fHYiIvRhB2DMefUtmE+MiCDsk23HBAqoGlBKfZL7SU4GhSX6aEd5V95DYNOjxwnnoQGQcE5bt6hd02LDHVjjislgyPgDVmCxApWR9iYK+2A2J0xhIN5GTIKIy7YPkh5JTbolcHbV74MJeBlIa0D8SuUxjEd0wNN3uH8NnlACgCipwNKiAZhNS5EiG1kqMoJ8z9VPjoDcbDQZ0OKO2HvT/4ouDAKq2YqOIkbe5in8XcGlIDMDW+YIhlGoCsgedfMaOmR8K6tDpojMz8zUYqYUKIMJ4O2VSXusSgWpCMADYdpT+JB6BJJ9xE1V0BFIDdye8DEcSnwwIYb6XBHSaeUAjKSGm/aRp2V+MkyqO96uaJgalDQjU4SwfXI9dCoJ4Gqv9jY9ocZEa2NITm1zdFt2mSYpGbqP7UCISBAE2RRkHSWS56wVkqKnFo/5cCo5YrUliIU9efqjmoc1N7QXdubAYPaWMfejhyOZfDl2u5XRGcfAG/o/bEM7sk6Qq7H2ZkJ9szvwu5ds9g1N4tdszOYnUwwOzPBaCwYjwJGYWNjE+ubm1hb38Dq6jrura1j6d4KFpdWsLG5GfVp6VfUc6k89PRpoOPgIqEdbEGjO/NWaMC0H9ZHGl8CNNNv/Wa0s018lWWYlIryMUWR+uyDBCQNTqGVzUkqNzRBNgWExyWpPdlO76ivsD87j2ZmMejYXMAcgJSl69zCfamm9Cg7O0vlzZ0J/pRfRXDlpXfmiAZHRLBv724cP7wfxw/tx9GD+3Dy6EGcPn4Yxw/tx7FD+3Fo317sX9iN/Xt3Y25mBrMzY0qdgOWVNSzdW8Htu8u4fmsRV27ewYXLN/D8S1dw8coNvHT1Ji5cuY5rNxexubkJc9IG6LCTmj7JgS2iV7KCoAIAACAASURBVB2oYal90bE7T4fpOx/lsYd1qo34imUPMxOvkZd/4zLsfdeHLbiQL8IP70kz7cvOHRA6NTC8TOhRyEj1d6c/RliiQ5PgZirauhKjtixsYQsRaTTKhZDAaK/ao3K6PRoJzp48gtc/cgaPnT2Bhx44jjPHD+P08UM4eeQg9u2ZDwPJ+zosp17haAj9LgW4fnsRL7x8Fc9duIKnnr+IJ595AX/8xWdx685dOOAwaKVPICrS9JH0m9tU2iGlS2qygc3loH45umhGwOVfBRlk4V0fpiBAiGn0C6UN6TGMYLcaUeC5PN8zhKUb7rbGYzA0oK/MjO5wdGo5I3kjNBqG28EZaFAyz+at3Lj7MR6P8ODJI/j6r3kcb3/Do3j07AmcPnYYxw7tw+5dc1V1ET25fxN1B0cZai8iWLq3ipev3sTT51/G7/3pl/Cbn/gczl28Qipgvesw96zYPxuo47UJGJDGK9VseESjfm7t9A3h/w3JIAvv+nBx4s5yvrhZZIGDUGJLo4b06wywuKOqeqhjsvEmYGOgMrqwg7RCzsA48qrU/PwcvvUdb8Jf+cY344nHH8Th/QvYv3c3ZibjQUPOBs9XdoTtIsVQm61ScHtxGecvXcNv/OFn8bO/9nG8ePl6xZN6CM5S4ipUAoy88hbycdYPkCJB/g4Dku4OWViKEHG+Z0qzMSvW5v9fGWqEiA9ihGO2wYu6zpv2QxHO+gopUk1VdAWK65NDo3q9T40d4XT1Slj5QcjOsz31YqUysYwAKVKxtshhxqMR5nfN4uEHjuM73/u1+ND734ljB/djZjLGaCRxIAau7VKkncq0vNVP6/fG5iZeunoTP/l//w5+9tc/jpt3lrC1teUyqYY5MrPOSA0Y1GWqn0Gr9YlS3+aSaIbyRr9AGq+/fBlsDmHi0LyhKLWC6DCcf3VuHUBB7+mAhs2PAaMxupw7Bp5SYBwwulC34bWGVA0gag9swczMBKePH8YTjz2ID37z1+Pf+trXYd+e3YP9b5WC5XurWF5Zw73VNayur2N9fQPrG5vY3Nqq41gwGo0wHo0wOzPB3OwM5udmsXd+Drvn52y1qSVnC8CGHEivT3z+K/iHP/UR/OmXn8Pi0r0eLQMVS1EKJCILoW9SbQI+vhmzhTgm8WgPT3xbGYWCWD+P+MuUQRbe+WENSKFG6LKUupFRzYkDB/OqdTHUKRHP34fK0PiO9r0mOmcmGBG0Ye67tpuZmeDRMyfwjq95HP/Ov/02fN0bHsP83GzPIDc2t3D99iIuXbuFKzdu4/L123j+pat46eoNvHz9Fq7fWsStxSXcuXsPK2vr2CrdxuRcdYQDC3tw7NB+nDh8AK86dRSvOnUUZ44fxgPHD+HBk0dDnzmNGrpa6dWl67fwz3/5d/BL//qTOH/pGspWhTx7e51RjspS8Kv3THNCOuf0Q42jVOMWpjk0NH1Dh1umy2vOwznEX54MXcrkHLgXVqE8ykUUyBGj8SI6kiudVcrGTLQH07eck21ztRyxE0uRIwKNTqK0zWQ8wmNnT+J9b38j3vf2N+IdX/M45mZnOlXWwdjcKjh38TK+8Mx5PPPiJTz74iWcu3gFL16+jsvXb2Nza6sOqLj6ydHDipnyaf2PceroATx65iSeePxBvPV1D+Mtr3kYp44dhCA6wk6rVXnecmfpHn7zDz+Hf/ZLv4Unnz6Pjc1NbDfPy7qJem4vYoTFjWTn3c+G8de+JBuSB+qQ6TCImpb/EmToJtWJ78yurdX2cva2UnwuFFFqO0QLMvLEqVWhWZAhvk28Nf9hMiePHsR3v+/r8a3vfBPe+NhZWyYFgK2tgpev3cQffu4pfPILz+Arz7+E51+6iis3bmNtfQNu3cLCpDSsfrMBasjg4Rbj0Rinjx/C6x4+jfe+7Q34wLvfgpNHD/UcY7srg8zq+gb++IvP4L/957+MP/7in3fzCqAPSjx+5lhWUMXNluogGRxf0yC1tpbNAGbk0QBLpVU31uj1kwTzfyky0KS6VjBeQtyAu0M1dAFjH9WtocvCGjOfoEIVELSZlBK9D70osZ0ftICoNyBdpZEI/uo3vR1/44Pvw+MPnsL+vbut6dZWwWeeOodf/b1P49kXL2EyGWN+bhazMzNY2D2HmZkJNje3sLh8D9duLuLFy9fwzPlLWFpejaGoxWwzYvbLRiLYv7Abj589iR/4zvfiQ+9/Z5jIA20HGUqxNja38PQLL+GH/sFP4k+/9Fy7X/2itqF2YmKk1ZzGJDbMDXPUCJNgpHFNWYMSbNlEa5L8F5RBFt75fV13Tafrp0mWbljwYzQgL4crI55NYg9XZiUpp4E6Gk5b9bEDraDI2n+tOzszwRsfPYv//Pu/A+9+y2uxe34uoO+txSV8+dxFjEcjPPTAMczNTDAajcwYdUe2VHm3tgq2trawsrqOL527gI99+s/wrz/1JJ67eAX3VtY8lRLeRaUJp90D6dRlEAC75mbxTW9/I/7e3/wQHjx5BJPJuBephybeXAYAz128gu/9u/8TvnzuooFprBdMQG0IoGHs3SNVN8A70WzxqcPPu9+ASNxLslSJMpJWuv1KZLCUycg3vI/2ru2bSh3cIgFFW2BULVUCNFnvXQyozTmE9g7oHzgcCAm98pnJGA+fPo7v+eZ34Ps/8B4cO7Q/IO2wctvLniyv0tBrdW0dn3ryafzMr/8+PvH5r+DStVudYzSvFC0BhOU7uh49cwI/8gPfiW9955vCDjj3v90ycKmT1s98+Rz+03/4k/jScxeo36jP3jywkSol7uOEWwZ4sQaZULJikXbV1oQx2Ncrk2E8d/aJH+tuCd3XyQ1beOeNlgeKE9FORGJ7neToPN2VUw07CBKVUZSuFuv3hlY6e5EgvIfLyijB1aEDC/j2b3wLfvQHvgsffN/XY+/uXY72acBaZVreQlytz/fGoxEePHUU3/7ut+LR0yewvLKKa7cWcW91NcqeE2nOvZMMgODGnbv49Jeeg4jg0TMnsXvXbBiPIV6VX/199OACjh7ch888dQ637y4bDx7FdOxKHA8ethAFKmwGJFe+ksNXsOOIyRmCITjfB0fRWD/y9cplMIfo2rulK/2eoREdpSK1vjuP/nYmwiD1jIlWAKpQjCw8iDDFMj30eHShI9Ovf+QM/ta/9234oQ99C1770OlgwEo7G8/a+gaWllewvLKGra2Cydg34vjiti0nGo1GeOTMCXz9Gx/Dnvk5vHjpOm4tLpsxdYsIrJPSBwX9rIh7d3kFf/bsi9jc2sIbHj2D+bnZZqTIcvHneDzGyaMHsbq+ji88cx6ra+s07Ix89Z9WxNFqbJSA20ArfaAUyCe2DgpFCJihZbU+20Y2bOLplcoge9/1YTrl7KFZiu49sAN5wpSdWZsbhTpgzhDcwNsZgNfJ93JG1cqwBrIuvTe/axZ/5RvejO//wHvwDW96DcZj3/jiiefa+gaeu3gFT527iOcuXsFLV2/g5p0lrK6vo2wVTCZj7J3fhRNHDuB1D5/G217/KM6eONx0qtal9xaX7uGjn3oS//1PfwRfeeElbG01ji6wXKQXB0q/eWj/An7wg+/Df/Z9H8DMZNzjY2gjj/l67sJl/J1/8vP46Cef9JQu9NtaJOEUBcjGYbOAEElq9CuAsIBiHXkDjSCmGonGF/gB4goU2d19yjDpjLjUkAR/BqAnaxTcwSoyn49V8CDElIeYM8H7/TgRroOe0uywRzim3dU5fmQ//sa/+z78tW95J04dPYTRKKJmKQVfPncRv/WJz+H3P/sULl65gTtL97C4vIJ7K6vY2NwKChYRzM/NYP/e3Thx5CDe/ZbX4nu/7Rvw6ledMnbz+j+XAcC+vbvx7e9+K/btmcff/kc/hYuXb9DgkLwWqt0INHr62Auu317ET/zSR/HQA8fwofe/c7DfIScBgAdPHcWHv/09+LNnL+D8pWuuR+WKkY9Qmz/8e7UpHj7L+CSIpjJA55jqLNq3RhDEVE/nrTDeiqeYIRLdvww+qQ4cgwinAaKzSCkyordEHATevj77Qet3ITQISqbvaixaPh6N8IZHTuO//I/+Kt7zta/H3Iw/D7WxuYVbi0v4vT/9Ev63f/X7+PzTL+Du8gpW1zfMQLbLu0Eyzc5McOb4Yfwn3/Mt+J73v2PwiHc3HtEIN7e28Nt/9AV879/9J1hbX6/jMiCk8mAIFysUAU4fO4Rf+Ad/G088/uC2c4fWZ6eXTfwX/+PP4Wd+7eNY29iMOg1RQNmrWYOBXFcqPQHiOSU7hZGE7D0SUO/nyTk48hi9hORQgL9/GWwOYcXqupa7SuycvFeXZbsJc2RSEjM0JAE5OGJp1CxUbnTEnpOq9+MhsI5lH+Ddu2bxgfe8Ff/07/x1vOW1D2My7k6grq6t49kXL+MXfvMP8KM//vP4F7/yuzh38QqWV9a6J9BQHMFMc9oHo7Ub9+bWFm7eXsLvfvqLWFlbxxOPP4g9837sO0/YGaFHoxEeOX0cm1ub3SaZOQ8hSAA1RULiSXVeCpbureL5l6/im77uDdi9a645z8m/ed4zrvz8qz/4LG4tLpsOGEwLj7fEHWAR7oO92eeV5jBSgTfJECIlCCDMJ6TSgNkkPyUH4cUIvCIZfJVJFH39OIHlqVVZ3bJsDLeBYUY2gYW53sTQ0D9utaty8nqzIYSoYApHLKAP6qmjB/G93/aN+Ps//O/jyMF9ALq5wVdeeAkf+b1P47/+iV/EL/32p3D91iKFKphCu76IuD1qV+tayIavdADYKgV/+qXnMDs7wdvf+BjGo1ETpbP+AOCxsyfx2aeexwsvX4sRwRyfQ25d7zPU8M8tFNy6s4y9e3bhra99uDf5z6thmZdSCg4fWMDl67fxqSefqRYe01MIz3dSCFPNkJGXSoMNO+g6yWDpr9ldxAZzCrbwBB5qL8bnfcoQIoS/EsVRnNE9e5p1KpJWikrfeBGI1FSJFaS8SRVXqJwhKAumX7v+X/vQA/hbf+3b8B9/9/sNpV++dgu/8rt/gh//hd/Az/76x3Hp+q3EDynUcj6JitTbKme9L2mkCgq+8Mx5vPHRB/HomROmpyGnUAPdNTeD3bvm8PHPfBkrK2vQKG1zMhFyClqWzqNTBCtr67i3soY3v+YhHD+8f9t+W1GrlIIHjh/G//HRT2B1dc3pk65rQk56IzbC6xXdjmpHrnMbyr4MsT+OGrwiFfkyPrRqKLw/GcazZ574MdeXe6kwKbZBNpYwyJyTspB6mweRBiN0EB0kC8cPAZlDVdqj8Qhve/2j+JH/4Dvxgfe8FXt378LG5ib+4HNfwT/+uV/Hz/767+NLz13A5qZuiFlCGs9MBcCIkSPPw+y5c/1eeVtb38DVW3fw/nd8DfbM72ou6ea5xWg0wt7du/Dsi5fwlRdeMn1pNOhFiGTk2bZuLS7jxJH9ePNrHsIM7WSHyD4QtUQEC7vn8fmnX8BTz79kwBdiAUf9CgQRkf2TT0KDnTibCMtA/YVnJMQNuAjZn84j2LeYzn3KMJ4788SPcZixNWFowqMUnFQ3Ln4swxzIBhru0RVRCw8Gh8LAGFmc5SN+3x0oDuZ4PMa73vQa/L2/+SG884lXY37XHNbWN/Dj//tv4B/99K/ij77w51hc7p4BiMck9DPvk+jg+X3jMa83G4YQPQB3l1fwyOkTeP0jZzB0ZYPcM78LtxaX8AefewrrG5vdWFg/bkThbA/xyyt2axsbEABve90jOHpwXz9SN/jgaDESwWQyxq987NM2HgE0tNBSOG0v4CgQeXV9mS63kUEIBHryAnGCrPXIwGHzWhqnHWQYuYeQIWpHpf4oXSN7UxocnS2lqgauxiHKCssQwlgEiELG5AqSVEvZdF5FBO/92tfjn/7of4i3vu5hzEzGOHfxCv76f/MT+B/+5a/i2QuX62QZxm9mIEwCTcleVmwUOTfWsoRKVV83F5fw23/8JDY2Nl1PZHit/H1mMsYTjz+I17zqFIoNRN+QQ5rGMoiOV1f2J196Fl+sm3YAkFe7hvjQ8jc+9iBe//Dp2Fd1SN8DIH0ofYoC5iQ8lCzSdjIYb9Q3G5ECRTU8yXRzJLoPGbrdKeqjgDbkROz1KzaprQwURnBzktpex5Jva1gtyowOkHlfbeOfKrwvgypqdD92zc3gO979Vvzc3/9hPHjyKO6trOEjH/s0PvQj/xi/+rFPY/neGsmWFElXVE5kqUKVjkYiRUZAI1FEsLm5hecuXMFzFy83c3aWiw3zsbMn8dqHTlekSvw0ZXAdaYqlBrC0vILf/8xTuHnnblhezZty/Ju/H9q3B9/wltdAB9PtncBCUdB4SuNZ1eSpcd/gt5PB9evgU8wAsy6inkr45/5kmACIa7jEiwrjWxGFwlREb8tRMwFKR3wZTMOgp02dQxMi2hvVuF3XbynAvj3z+K73fh3+qx/8IObnZnHlxm38/G/8If6X/+u3cfHqDeN9POqOJkzG3eOak/EY4/GoLsN2uXu33NgtgWo/o9Goe/HtwFXQPSnH8uvjoVtbW9jcKhiPRrh8/TYeO3sy1At0Urp2YGEPHjlzArvn57B0T8866QA0+BHSjemumFF96ovP4Pqtuzi8f6Fp+EPzChHB3vldePOrH8LMZIL1jQ0aLR8HUSQ2oIJH99bR9/BiJq2/vQyhndlFcWMPqRrJYt1XMJOyowyTYny62ZX6r62oaDoEn0DGJyFooAw0+4jo3qoi6e6yKyWTnZ1MsGtuBrvmZrF71yzm52axZ34O73zi1fjBD34zjh3ch43NLZx76Squ3LyNb3r7GzA7M8FkPMbszAQzkzFmZ2YwOzPB7GSM2dlJfVPeDEYjsTdkTMYjTCZjzTgxmYx7b9Hja6tOnu33VsH65ga2tgo2N7ewvrGJPfNzOHPiSGiXI0SeXAPAQ6eO4uC+vVhaXonoVyNj0+BCPVfgsy9ewsUrN/DY2ZO2Q5+voZO94/HIHmd97uIVQ0YDsVb/wSR4nlj/oWHubHlnGQBa+HCD4Y5C8HR6zKz2v70Mky73klCpJGq9yAdaK2YlBFmkn03UupPxCAt75nFg7x7s2zuP/Xt3Y2FP97lvzzz27ZnH3t27sGd+zl73ODc7g12z7hgPnjyKIwcW0G1uCV7zqlN4/MPfgcl4hJnJGOPxuHmmJ//mlZ+h3duh7zu1B/pG3/qdaZ062r3QLM5X4AgYUBgIA6RXrbu+voEnnzmPb3jzazAj48DXTvoQERw5sICHTx/HcxevOGhrBlnISFPKqRhnLKUjDMb2fciAQk5F9VwGW96h/rq2eYVrJxnCu125P95BbPHrIlGgK4CMBAu7d+HowX04dmgfjh06gOOH9uHoof04dnAfjhxYwMKe+e6dprMzmJvp3ms6OzOpr3Lsvs/MjDEzHlsas90xivFohAMLezB0DR20Yzr3m1e3aA0ZfMv4duJHRHDk4D7bQ2nyjLih6WkDaEgU5ASfe/p5bGxuYnam9yrfkCJlOUUEBxb24Mzxw1o5ZiqBExobA0vSQwDNjsmYZWwvg4T9IOWZ+xX2t65cv+f5xjYymIaMUK0UcjGdfUvX7cxkjGOH9uPsySM4c/wwzhw/3IXWE0dw/PB+7J3fFXL1yXhk38fjLjffbhmwtYmVr53u57o7bYy9EuTfbud5J4dp8Z7bHNi7G7tmZ2LIFgdTJwRHYwBsX/4cQcFTz18M850hPlrLrwcW9uDsySOYjEfY2ip2HCd1FxjrltSLPwNjgsL3j1KavJMMMWPRJf8IC6kTZoj4gftVrirARFOODqkdoXfNzuDgwh686oGjeNWp43jo1FGcPXkED548ipNHDmB2ZrJjemDKafweyltNrFSWDa6F6kOhP/++n4gx9LvVT67XcpydUjFuNzc7g8lkHEMz3JACbUF6ETN8wGvRs+cvY70eWmxFhBa46L3JeITv//b34G2vfwTnLl7F8y9dxbMXLuH8pWu4dWepeyv5+gbW1jewsraONe2ndq5THmXGncF5vR8ZisntfuTpkf8IizrUj0WpMC+gtL/Wn7z3a1+PwwcWcPrYITxw7BBOHz+M08cP48yJwzi0b29zgIcMaicDZlpDAzB0DQ3ekLFu53D3K8PQvfuJYENXlqNlmDOTMcZSJ/T1nJUvcCQ+C1kD2Dbc2lbW1nDt1iIOH1gIfOwEQnodObgP7z74Onzjm11nW6Xg9t1lXLxyAy9euo4XL1/H8xev4MKV67h5ZwmLy/ewuLSCxaV7uL20jJXV9ZiGsCnehwy9NKtQWp9DS/3p8QT0ehvNl2DpE+VWmPzLv/dD3RsmtjFgWPv2IO5kfFw+ZEhDqy9D9bcb0KE5wU5OkXloyTfE63ZX5qulKy7b2NzqTr3aDDClSiHWx5vOSuT38o3bvec1WjLsFN31Govg0L69OLRvL97wyBmru7VVcGtxCZeu38Kla7fw8rWb3buqbtzGtZuLuHbrDq7dWsSVG3dwa3HJeb0PGcJNjTYmg6dDfTpULgQuWk4OMhlyhmzA2Ui3SxWyoltovNPKzv2kTPy7xfeQwfHvITocaTLPuT7T2e7aLr1kvtbWN7rddYsC6AGqcOznJVjli8cBwG0zvj4/2+k51891sq7HY8HhAws4tH+vHVsppWB1bR3Xb9/F9VuLuH57EVdvLnbOcuk6Xrx8DRcud1Hm9t17KOk9UaYCRf0QZDr5exHT6qR5Rj6EahGo+02T6riTOZT7Dxla/p7bDA3CTpEgXztFnJ2Q/H6ixJCxb5d3D0XS3H/upyX30soq1jf0xWce6v1JM4I10wenVH2ad5b8LFfms+Xo243vTo6Uo7RINy964NghnDp60O5tbG7hztIy7ty91z2huHQPL1+7iaeefwlPnbuIr7zwEs6/fA0ra+uqxdq2ZjthbtAV6n7FUHbmtl9Ijx59zCGyIQylLa9kPrFT6tNCmFZakem26AwNTL7WNzaxurqOLRSs1ZcQbxVgeWWVHs6J1+bmFpZXVu0FZXyNRLB71xzinpdgftcsxqPuZQRzsxOMR6NtUVd5L6VLOe6trvOow/JnLrMg4cuc/gwwrK6ge0IwZwCtyf0QKA6loUPtW/1wO5FuM/Tw/oWwi765tYWVtXWsrq5jZW0dtxeX8PT5S3jymRfwmS8/h89+5XncvH3X9VGq3CSrRQX2HNJHbVGZqf/UexNmcMgpwlDvEAVy9FCF6Juvu2MNW9jcLPZ9a6vQvYLNzU0srazi7vIKFpdXcHf5Hu4ur2Dp3hqWV1Zwt74BY3llFYtLK1heXcPK6hpW19a7z/UN3Ftdw8raOlZWut8ra+sum2UXldeMIr3ftLTBk7lUv0mP2s7vmsVkNMbs7BhzM91G4/zcbPcsxPwc5ma6TcfFpXv2x05aaI8ez5w4138KgkHkB4XuN7L+Rept157LWvUm4zH2zncvcgCAB44dwuseOYPveu/bAHSAdv7SVXzmy+fwmafO4bNPncOFyzewvLJqY94d8c/gwU6Zogrtm0xaqZFeGUXyvdW1dayub/jn6jpW17ult7X1DaxtbGJtfR13l1dwa3EZt+8u487dZQuPd5bv4e6SGz1/bm2RAMq45s4BHXv6jsbYMW88c4g1JwbiI4hu4XD06crtfUC1mr331vLY6E0FWr/g3spaJ8Ny7MYndeg7F8d/Bh8ba9YNqQwsn+DQ/r1h7IZSvu0i8P2mta1rp1Rzp371+8xkjEdOn8DDDxzHd3/zOwAAl67dwpPPvIAvPHMeXzp3ERcuX8eNO3dx4/Zd3LyzhI3NzToOPMaw77bJzCkTMwDA0Hfp3gru3lvB0vIqFu+tVKRexfK9FdxZ6nK/29XIby8u1+W2zqiXlleweG8Fm5tbPmBsc8aYl9mkyX5zxAG6P3hIdbINBroRxYUJ50STjVnrJf+wolq31MHqoXX4Y45RyDDuLd4tndWIFKMTy6CH7F1ZtW9dfyE8OFLTEga2oblgjvhL91bx9PmXsbK6hoXd81jYM4+F3buwZ/cuzG2zHzVEL/c31G4oTcsynDhyACeOHMD73/EENje3cPXWHTz74mU88+LLePr5l3H+Ujdpv3DlBq7fWrTXiZpy1OhKweSzT53D9epJN+/cxc3FJdxedBS/W52gS1/umUOsrK13qwFZmIH0w+zNxq4OaEn12AgEvmFDuZ6kNi1lRi0C8SQtaqiMWB6QGoD9DTuzs2TN4s3cv1iQyhchUFz37vjKewymAlCfLRlQ+uCgOk3R7uihfT3D3W7Sz2WXrt/C//x/fhRfevYCFupZM3WKfXt248C+PTi4sAeH9u/FwYU9OLCwBwf3dZ+75+fCqeGhifzQ2LXmotvJMB6PcOLwARw/tB/vetOrsbm5hSs3buPFuor1wstX8ecvXsKXn7uIZy9c7pZ+TX+CyQ//d//C/tLNvfqp+TYPtCNkh0T6+J7eMsbyoLKP5IHrlZkaYsoAOOrGao6CLW2qEYUUq58aSeYF0ab8KIsbrw0OSq0X4d6QjOmaw0lMA82xHFQiiwMymLMR6706wMzMGPvTXzxqrSYNIfTS8gqev3gVTz79gvdUnXMyHmHXXHcKeb6eRub/9y/sxqmjB3HqyEGcOHIAJ+3zQO8PUjJvOaLcT5rXkmE8HlkE+bo3PIq19Q3cvHMXV27cweUbt/HM+ZdtLvLshcuYPPn0+QoqES+FJhqsbQ/UA2icr6YhDhhwrd+etLJzUH1Btt50T9Rja5nE+4AjLzt+M5WRHhk6t+nshkFRRJfEm2rX+ZZ+h7FtUwaNSBkwvO6pIwftDeHefXsPpHUtr3ZAaWouzuL6xiY2Nldwd2nF+SHHH4lgRg9wTsbd90l3LP/owX148NRRnD1+GKdPHMHZekLiwZNH7WhQyzH+IjJo+cxkjOOHD+DYof14A87gG978GnzP+9+BpXuruHTtFiaWtRRf1iuaUpQSUmyzaRo3ixfxjQAAIABJREFU71+Nygv9XU3dZy9MQvrGT8yHteLmKwp3+E5lsW8dWDVSlbm7achPRmVSGkk3ZJ/z9j02/LkAVh3pUtMj1UXvD8WYWFkGvYEAGGYcteDxV53CZNx/tqO1qtjSv6bJlhGwzhKPqGOKKsNWKd0S6upaL+159sJl/NEXnrG6CgqTyRhnTxzBI6eP49EzJ/Dw6eN49MxxPHjyKHbNzWCmOpR+smxDMgztr8zNTDA3sxeH9y/gzPHDvA/hw6UpgaOYvu5ePCcWGuyA0LTioYxIiio0mPkYeXA2TT9UYSW+/a0fDkwYqstpkW9u6byaJ54aJ01hltZ4WtRLZdBfXRKbF7B+SvdG9KpPm2/xokFI/2pqWus3ZTD+NToUVyPx/+jZE/aOqE6N2+8xuRq7OjcXl2xjzzfElUYfkX2cq/6IH6kIIDRG2NLHhQXAFja3NvH0Cy/hmfMvB3DTP3559sSR7v962vqBY4ewsHsX9u7unqNZ2L3L5i7ZCXu8JmeZqFYLGaYasw1HUlJPeRzdG5Mlcy6ztr4K2dFyHX43kRmxstukh16EsJSHw1pehrNopmmImGN2/HF/Ka3hUFHUiI35Ss9cpt9ceTbStX6cwPVkCBFWn39nLy8Fr37wFMbj+Cqa7XLzXH7j9l3cvrvkPChYBVBh4ycZlB8FsBBd718GQLC+sYnnLlzBuQuXHagAzM7O4NSRg3jgeHc49czxwzh19CCOHNiHowcXcGj/Ag7v34uD+/ZgZuILq61oUh8hFe8X1WvTpI/MJCC8DyAqAlBZVjIQF0oyUhWvFCavEIQcnD8ZsVqeoQZV+cvOwOgfUyyE9NBQO0dEUq5oH50lxzQP6PUddAJSNB3ayc+79+ZiQn1TlFaNz++aw+MPntw2rWhdOi4ra+u4dvMOVtc2+ilzYMdcnXQKFNPBMA7tJEPIOtCvs7a+gedfvornX75qdMajMQ7u24Pjhw/4w2oH9+P4kf04deQQTh/vjpEcP3QAc7MTk3li3kwdSOjUPwoLY4ZIvGsYNAOXlB5FZfqKSuxLHdTuFQRn6oFrdlCl0vqbTyxrcEgtQ7U976WHotUwLZ6K85nCSCMKKaBWtA7zGO3H+Q7LvT0ZAjsIY1kN6aEHjuHYwf1RL9I/umGt0qT17vIKrty8XfvhQdcP5c15YmDK0QJZl1GlTRkskS1qh93SewAp00X3ZWNzE9dudidrVW+j0Qi75+ewf+9uHFjYg/17d+PIgQWcPXkEj545gUdPH69HN2wuQGGPeLI0kW+kCvZ8h6ZalvoV30vQ6lVAdbyewRUKoyyvAi2ykXaV2oZbP4lWnuOE+QKK/ZGOkMax7HWAt412zAN8sAvUAIs7otJj5wwRYhsZQiqm95yH1z18Gvv2ztvYMK/6PadSnFLdubuMl6/dAlmJzeNEFBTY6RNiAvwn/XrgYExvI4MEA9CU3pSCuACCIGv9AaBgq2xhcanbU7tw5UaVoXs4TpeM4zPV2RmQjc64rUZCp1YDotZ0B2nFhgzaBpel0ElWcoYeyjIyVT7CODDZzL6RJDQ2unEeI6Ts3nPMmuYY+qV7WqQ71tQHavRsmga16e3FJBkUrNwx1WDqmIjgTa9+VXjeRctb3/U3G+O124v1XJXza9mgHaWmsbRI4M7cS69NgJ1lcAQA+I9RMr2wqNGjp/XiONgq9VaXFq6sreNmWcKIw154k0bgGjUXFEsVAvRph6XUkJiE5xDISjOBnI4oP6VUbWkOqf3U8nqv1N/FQlm9Vw0qDgClAyA0Np7Y+Ao8/LszGB/VEGIGlp2mgP4IQmBD38xnLBYVraYIhbQ/IEP3J6cQh8LsouDE4f143cOneyd0+eLUKciH7tU6V2/ewYXL16uhueydVorx7gAAu6O+oiXGG/3NkZ1kIHRKWy26vFtl6NVzeyk6DvchQ91VVxOnQWclATaw+pC4MmNOot8buaLPEYQEd8P1e0KoLoGegTD3UcO8fap35TlLQq+Od17ZoI+MdMYLyUQ278unhFSEdIaeJqeSc7nMF2s7IT2UbWSIcyR40K2g8vpHzuDsiSPB6PkzO0JO91bX1vDn5y9heWUt8FwbOI6Tgau+LA1Vsya9iYKnYEcZHAi7fhyvGHw8TbdxKWruyrfclwyjbgGDI4GPmr2WEoCuiXsa43Qtn/bKwTGYuKK2GnKeKJozEt8qtAeGiLqwNmmtWX8T6quCmNXCfLJsJX3PUQIl0kcXS7r77DgUzYo6COuF+lGnKj6UQzJwxDBIq2M/Ho3w+kfO4IFjB3tzB54zdF1K7zcA3L23iiefOe86rvKajYS3DSONmY5H3jOpsguB6oAMzIuNS0nlqjLWN4GqgeJ9yjBSm+zstASCYvHHOQlKC06hCqgEegPcFzbMNANbEo3EtFWIL1eQKrK1ps65KAGYGwlo0w1sfL3OrUOPqr5ZFmTIjlkVapNpLSM8UHWYM9HNIRmCxsRrlFJw7NB+vPGxs9i9a8544bEbWnplvheX7+GzT51ToaCbs6IvJO4hI+tL+wqwHe8FC+7LwEBFOG1dsBshfDd0DWB/PzKMNH2IhsaRwRGkQ6fIhpNyoQhM/R55LTNoTQWInVJZL73Sf4oZd3/+k5XkCMhRSRIPbiDMs94X+BvJGaEdnXQ+FBYjWBbhMSKAqOXRzolGSwYCKuekq/PomeN486tfZfc4Slj9bdKnrVJw7sIVPP/yVWjEEusXidHsFGbZSYZk0UpvQAZWgdC/+pXLSt/oEhjfnwwj3fSye+YAyl004LhrG3M65UztpKdwZYQHgCa+xYRoISz7ixpDXU9H6Rl7aJ+912RTfTkDOvkrlrbQmJXSTcqonoV+7iOMuVhbcyiWQ+tlmxr6TTJYpAECIMzNTPDE4w/ikdPHuxoS9x2Gdqf52trcwv/zx1+sf0qg81Y7cSDxyEaMcmzcpV0HBXa0fkAGjRLBFgqXw8a+k5H74zZSJ9L3J8Oo71geHYrob2ebJzMhVqTQUNKIsjN2dkSQKkQ3h/JqcGZnGkprOxFaopN68KJQtAiwS3k8Iz9ttNhGm8lEBwy1L6nRlK0z0dNVJCsLwOK89TKkHDW3kcEnri5DQcGBfXvwxOOvsjebuyo8wuT9hlxvZX0dv/XJz9NUJxp3S5zed5FoBZwCivPQkkGjhPPmNhjmPgE8HRQ1awDwimRovA9ald8NqJhnwTw2CFzHXcObejCnWb77KrVuRHNLXSoRS8tq9GDlQLIh8P/Urw52I5e39EXbG7k+X4Y2lfcQDXj+o11pWsS5USGabCKFNuGgEV5hhhxqQAaPqDwsgl2zMzha/9jk0NWaO7CTfOXcS/jzF18OVuOGmHRkTgYDJaXpsrFTe9mQDA2O3cisM71D9etYFbWzBEY7yWB/MIUn1DpGPJnjXNcGw8KPh0pbPXIOXEadsErrnt9XRDD5ya5cERLpsQ6rI/TSAmOthL6lkHzGlxhdtmveuOtM1vkUU35yRFdjdCKw/ORo2k/LMEiGgMYqcyXFfzUor8pxCtU8RiGCj/zen0Q/DIMARCOOiY+rUdwUeqkI7VU0ZGhdeQUxsGagLL3br0SGkZWXdAISDrxxvZfpO1KHkEsiY6B+MAAzbPZ0CQ5QkhCc92uY8s0Zdkrqk1Mc66c4X3n+QXOVbqC8vKA6EvHgrGj/VYNFzSTqI8ggAgjJEAx5exks1aqGvryyiguXrweDbx3VyJc6yp2le/joJ58kXfAYlF676Nhtc+63kmBNWYZ+OzpuYv+ShTVwKGQa9ynDKDqdo5c1LLRuS/870LJxpb7UUFoCcghlCNbONVJomiWRv4jilIsTHVeEuG2bWG5YXa3YOGaHHj2JYp0fOw+O6dkRAAnL0nVWZOlF1bOlQsXlM3p9GfhytQhuLS7js1953l883EgZWt9VJ3/4uadw8coNQ3WXAT5WKkO+xO+GYjLY3j5SQwaOOmHH2r51+jENWpVC9eQVy2DPf/v5cw11aoidUYqktImEN2nqvSAYTeRcWFQDSKMr8HydL4l1TAP0PcwrOBJWxzOHIhkrzHtwqgJ6qKdIo/dMhg7hnFXqm+ZMHRkfUO1HFxCcx1q3+KKFB7m2DNpvTs83NjfxR194Bn/wuafQsj1OmfLkenF5BT/9qx/r/mqr+jrLZ18jwvPVO8JiHaso+V5fBgYDyVEnoHzUFTuT9fkKZBgZmqoxJvTUfwutAESiXtUnwVSFo0PKAdWDC71tTm1fJ6i8fEaEGtGifrYmxMEoCGaF6CbZObQ627QCp/WtTuQvKj/zpewK0VKemE7sqykDUopRZXjq3EX81Ec+hqfPv2TzCb56x2oALC7dwz/7xd/CJ598uvtbEAQ6wbEkF3AGEE/SBq4TYDGWt2Swytl/xP4Z6EPi71cgw3ju7BM/1t2n80AV+UQiU+YenNL0+CRm4IOsyBqX2pQiRQXhk6USaRppUlKOEgES4pKpt1UZ6F79HlbG7N1KXl+q4/vEnzYFqV4XfMT4cLlMUTZgvCKl49T5Ox+xaMhg6gjZOHT179zFy7h+6y5OHD6AE4cPhEcqQeOxtVXw4uXr+Jlf+zh+6iO/i6s3F+l+jEw2NpR26DKzL4EXlMaL29xRLOjtKEOI9hGnK510ZF0i5r9SGcazZ77mx/pr1dy3H+y29WEVrpTGA/GBnY6eEfBjEkrRjJEQ0pboLO/mdiQQnEzPadjgA8oQErvlwVMdgwSiVT+qLIEXNQIy1vhXacjZrJ4DgsoaJsCge8RRTwaI69SONzt4bdVI8eVzF7C4dA+j0cj+Xp+I4O69FTx74TI++qnP43/95d/BL370E7h6azH0SaLqiBILOn7phLMIgVwETVUJO8p2MnTqKaCz5M6bDjnpN/wRxb+ADLLwrg97QsBGWb0cTKzhgUrYdwzj3TAlKOyd3ie5I8AGC/+Zy7O9Oy1xmNX6itq9VAvu1MWNLm8Y2Z+BSnriyNHRQd0EUjrMIzOK/n0g9k31WGCWwV72RlWHVpD2zM/h8bMncfLoQezdvQsjEaysruPyjdt49sIlXLlxp9emf20jA3xsG2xvQ/H+ZeiXF4sSodP/DzLI3nd+uKiXSB1U1DdGlAB12hrJ4xInNPi8fNsa5DD5MsPYRjI2Hq5nhtTx7nU9tjUjQsdE/MlDqjQkaa034jB0i/WobYg4mR929pL6ENdLkkEdQuc7OSVxMoXK+3W0Jt/PV8xWdrK+lNtoi+2caEpkGFlupWlHcYOgPUc73h2ioKKh/rQJTFemO5F9VIbdDzwJyFWJtADdiweKl1taBfhEzstMHvZeyzOJX7oHDcPMl0j8ZJGL0mT5WVYSoNemhE/7rsZRx8L7a8hQYH7CV4g6SrPq24/hlNAmIC031fo5khePlP25qZ9gsPZ+M2DAtMkw8omvHpKDDXLRmrpJVo2Ppedfzc0ejgAmfcmVTPpS0spwANtOk72d10Y603O0nObAfMD5FpWpVLm9n6T6rp7ZqCSbTyPCY2RdOWgoRZ9DSKg7JIMBSolyMbfS6y8QNB5baYeBQ3b02rxPsy9fhPmke2DqZBjxLrReBsRkKLb2zl6llWu4S1YDMy77qZBejUDblu6en4Hi5Vak3JEmm9oWzpMhSCmk26wMktl4pwHIiK4R0groJvGpfYRJWzXkjAHB2EkOu6cyWJ0hGTTi1YhjAKfNIkgVe0CJ+2s4oMneL7dzVsKVUkMCwG54lS9ptJkeGUZsEJwkOappaNF2FHREU4xangcZtggXmcroUBt4OJS+MwbQJXr9oARdzXHspTZkfeG4MDHnswodPKGoRo4Z2vltllezMgMP/nSJ4Gd6lQ5HnWEZQscqe/Rm78VSXpalYZyBZAk+b+lLzzG5OUeHsIAe09Te9dWXYeRnxfkWD5yGiwpQtLKRiTVkIwGDVPETMA/vpV0kt+bO2UEs3DZ5qM5BYbYAPqGvCgtTBNa19dWgX2K7JArUyTsHJxoc4fS3tHZ+yaMaMiRm0DcMbePR0wWjZrnPHg2B60iavbeb+zh7BNeigcjyVZZhZA+sFH3YBoij7J5qUSI7bzBOQuA8H9D7QgNdKqImA++jKDlWsX+cRc35M09UZkvDAHTDplRjj7vBjGaxr4D0pCc+qOe1SVEqbuCTz4glkChVfyZbX4augA2E+eFrCJGBlkeHVJNoOLj7KYPW5e3FPvI5OeHUaIpkGHnK45MSe7WistUwlmFeXSjJqFeYeYpKkuvAkbkVEUH3+Xcjj7TDd+A0TPpNaorCq1D+qXGTdqR77Hjfvoxod8mQpXv3VJXR9J9407+/YWnZgAz9yUk9n9TjcOjqt2+BMHcZVvu4ZYoCnnXwuDjie/n0yDDqA3E9xcnHFhCF5By+F/okO2U/n4uM0m8yRvfkUgMJG6pGssw59VfpSeXRAbh4XU4srZl7oL7KxCrxKww5eBAa5eClSO+beCpWmjAnvgy9tpEhCE6A1Vt14+jDbVmJQY4h2soPDRIvRgyUc8rUzJSmSIZRH+z0aAZ15GEkZkvFQ2F4loIdJYeuxHDmW5m3rEpXn8jTSpH4FpcqVLcCRsqx5ckqAuX84Z2p6njGAB/LVnqUd3LkEpATikVXIceMO9qdcxdqVitFvgzBhmXwts5PSaPfpSY0jmGyxGQUcDxy+x9q6WTyY+muBj8bSYsCzqzrhXL4/sR6emQYmYOQcbgxeJ+F7nX0S2SG0qSAZBziszNoWLRQSwZKUOu5XnRKdx4xJdxXmK20+6dMnV+jwxGnR7w4+oQFCHJKks9JSjLqjo+SdToIpwj6ccJVV4F4HqcGzYygzcsxW6uKeGkvPa5tnKw7gW7YlimUYWQHs2gC2f0U9+aS7EGSddSfnkrRKc2wkqRtiyPngMfb7jN5dukZJykqfzJaqYeR43j+LlE7pCyWU11TyztkUf4k6YT4VDpCO8wZxer9cO4/TnDaMqSXSLcdKJup81hCUTYV7TLS7J89S22SVca6hh4QpKM2UyLDyCaAhGoWtdWrq12bQwf6bipuk25kVp3bNKJFXCHKB9zo1CyovvZTFRnStJQLFnpE1pd2OsH07SIWqUhxhctKFD7jYWG+VGm1rPmcQP5kUGmBYJaBnN9eJbrttSOEwgBAuwkAwydw+238+1A/UlNaspYpk2Hkh+L8hqgRBEsmYyCn6qVHhraApjO9E7mZDzVgRszIpwkTbrBuOWRzNeMnnpnnpT6xRhLaSFVeId2oE0qgDQpWZPQilrPynxf2JUcKa9SnpU4ZNLIM9V7J/ISmTMRXu3rPtKkzcmBlfhpPrTUW1Y1YbyndWGg4/BTJMPLB6AtnL/yundFH/eFOwKsoXWrug2pr6dxLBhKOFDm8VAYcgVUa1l5sZ4oxhvt89jqngGPyAQYYPhBRJ+Gqssq2ilM3pHmDReS4gBDbJhn0HqWhyp8al+MJuWvpq98E1ZdahzRDAv+2QdpUAFwGSXQk6WMKZRjp5JiXVwv8vKt2K/U/fdS01MGueKhD2+vb1u7tVjXk4J1uhsW15cZS21jgaOSEdLPjtyrY5kDk9IUjmTmR9+yrSTFSeSxhmYLXeuWKhj6YfVm7moYgDQOjgW3JoHpJ9UX7MwNk+FWLK15U25q5FWpnLQaiQSvnb1atvAY1TZ8Mo0Lhmu+pA9dxJaE0lVD6tOWkS4QmLLsMG664ExYVg+rzfEJpVdpstqGNKcLr2nKfVa/OXVxn1jfDjdCufTEx3cs5pbPoxQ5Z6VOaVFjvjBxAGqZ+2aAMpIP4PfEY6jAd5bPEtnQ7PNuMHZ43UBwhWqEmp8VgutMjg0WIGF7IK9A9UdYZCB/m00+NHYnxEn92/JPVUUrTY01XXRKtojQkF6KBVKLg4yRKHqwSx8eBpy4jFopwDf3QIMRxrjOErCceRIoUEgioCsQdcxsZ+srrX1E1HImpr9C5ddQzSl15LLbMLNZHWrk2WmysDgzTKcNI/+Qup0w6kewMxjfqWnwra4yiKm+Qga2D6hjzbNQhIhWrFx80UufSB4eIweI0CURq18X7yqgf9eMRxin0v/NtUn4+PCbWJ0dJoZsS6Vk72UaGoCzXRY7oTJPz8HzFAauglG7yCqAxMXRUolMwPxseMMHITo8MI5vsMnBXBpSvYuV0GK3S7wZJHOXcfvu6oY6CcZtxZqOQpAmmp07AkYQjG9NmRxOqJ+keOUtuG8INaZ1lCJEqy0eOkHQReSR+cvssQy+0UIqoPGT1bYfG2yI1Oy+SQQ01vI/Op0yGkWJZv/9quGZjxFhGf/7FyMWD3HuegNux0NnbqNRWsTrjCs8dIJXB67mjMZ/Jbf11GgiC6rJrP1eMUSkpe7i/ThqnqW29fS8dHpLBFNO/WnPdXv/tW7X9tgR27OM+mnsfUyTDyHKtXkbgnuqhWqB/UcgdO4U3wF5UYHMPEQtzQ0YeURscluBHLPiVNAiRgXcTzJmFf+lddRzqmxkr4C2K+qFPfUGzgEQXJkNRGYJeOCrRfaNSXJdofbZl4J+hot7OixP5fhaiAPpXfuIDPdSwRSxfZaDcbqd7UyTDyGy6xNwtrrnX/9TwhDNkQi/O7UTHPjtCsf6sNqFlYcfQlIjyQDu3xDKaE6V0g/rxA2POo5FgpUt9eo11ojYYDLfYBqbzofG2epVFLD7Z2v3T26dQApbfOgAMyWBOJ6y3TgZzzPqdj9X4+LWBkN+20t9ENCEgZAeFv4S5l/atPbolCwPHlMgwKsoYI3fp0LeYkVUjpLxfghYQDCdczC8bgCElQruwEgX+SuWFfppOVdHqSPpViAePKODfgEU+fe5bakTU5xFC+0pc9zNURYVDS0CvtMMQutd1LBu9yqIbzaAMKndWeon9BTMIE1KKioUYsy7UuTMltgPlk7CWh88c3HvMupgmGUZ+uyJxPezn3ldXmUKaZDxUBdCsXbysJwl5Ru+YRagXVKYe2peJwkQ8KdtwVCYn+koT7Y6MMfNrRdnT4Ue9A9s+QMZXdv4knySerYwHtSGDB2d3mn5dQmNKN4kSySD1e0VPbpuNtuHh0rvHqzmpPYHCNMlgDwj5J0UGSlWK9B6D91QmpFDJc5MCwmSyxHuxjMOnCuk04+50oseRzOYR3taOzRty1MhgPBYbmJzvhoUndQApoW04tsL8soxGW0zXxlKhz21kMI9VGYTq9v3X9BjvV4sUP30A8Pur3LRMa73VNuILfKuPLv5cQyyfFhlGvPrJ3sfnZYxudtzgbKkD4QpKx+nzA0XZd1TwwDS/GS/xF5mk7/l+YtvzTD3OrTx2zm/pSuWHWGPBPatUvjj9IX55/AokGjojo0YmH/tBGQIjVq30avicqCGDkabTvazf1C/z3Z8gS39MVTai1V4B+urLMLIxyGHdEnTUQXdDgTLFzpRzn9IoS6L3lki9IUkJNxJNnZJGQtwytovfKxF19DxVNGydJHuIVbRnRYfgxtHABYFOyp2Os6X0uG+xl8RRbLUIUoZlYGUG3fWPOEt2cKptB90kPeSTwJEswnTROgLhiyA+pp7uiP0OIz0lMtgjpIbY8AeEzNtoMHSVKfiOcafeGG/oIb2wgSYShGsHCY0KVb3CivKcQkTSyV49d099atBUxw/KLvXV9d0cysqMx65zRhxhGXJqkMjXaG68ijk1Db7mWNRID1cOykBlgDuu/1Fyr6JL4FRUAaAkGUrQLe/1BJtlYGrEq3gpcjIM9g/0TYMM9gipnbMvjq0a/jWtKghtA7Phh9lrCfeLMaJIR+FTktIs0hUimw2PQhQz6CxQqKTwSeVhqY8iRH5bnK5tW58JvdzAC2zDwuErKqm4bv25AR0hqPK6n7r61ZIh9A2jSSHVVNOEHU7vlI7Ee3xwktmIz4oM6QI12+WTywJ7g+MUymCvoTE1K2IHhE+MS/qtdRJzIapYLTfEsJipEhsaI7ZNAJqYolyfBKayMHD0vSPbNzSxZdgqYxhEOsKiiOad+sA7tQbfJTp5SAPEfIrl78tQNSTOQRSD9F5S1NK6xI85KYFBCfe3RUIirpNnH/+Ox5gu8inUaZFhxMQ19+sMVKB5NvtrHo+wmx0koe9sq5xLsiezzWRbEnVEQkvVhgDIzmAhqdTB6fkq7Ub7SlmIOGTc4diKtlH0Vk9uIYiSUx4LfWeaNrJebH1W5lsyeF+esxu4qPxA1HUoZ3oMZE48qCQgZ+038xNcodIiHmMqGQFqGmTo/iwvR3Nul4zfUL0o02R42og0YdEfjUuRlzqwsJmUYZs7ahw0qdZjHbbbXNMeT8NKz4Yg8F3mzJykMnW60hdEeOhLqm8RINNpKUM7zn3D+m7JED5hovedJl09FhppGBPnf6O1Zrqe2DR5HWJsimQILyrrP93mZHSeoTN1oxzy/xIZY2NiSRh586AnZ9Bowmv25oyDSkhtmB/ro708GAT2H1BnD8c8ihoB/F4ICyURtUbkyH1c8T5y2yjD4HPLqPdS1OKoblPbUs+ahXrOEO/0lsRPUVswFbgd9PdvSuRtSmWoq0zFBTLmnctufGvn1ZBtkqROot89QfQ5hKU0HkGMSY6tnJ9ZyiJ2G7kPXaWy1aoS2+g/hfowRdO8g/0k1XVeSKYc9gt9N5kI6tgvRcm5XJZB1XZCegi+lWTwP+rooqsMAoqkBeDHWXn+pqPJRqlvLCygKEg8VyKw6Sq/OKDqy1fk9GEp51X0r7IKpk6GLkLwhM5GoO5MGxp6CtQL/SL2F4aCZOAyuLcWmCFH1CZn7IVMMcDtbepYm7RRJCkKFFcQs1qYT5atpO8MGLWwt8gAikzipS67OgjrhfpRpyo+lEMycEg1SDNAYSCKffC6u7DDa101ahfZjbvQbnA+0h/GTMdDghq6evVeAI/pkGGkNlk4nDCK2US2BEYYGYOQ2lFvgPvCxnSL2ZJoJKatQny5glSRfpCM6Tn8EIBZvW5DzGu68fU6tw49qtI0ejibAAAPLklEQVT+QfDDvIMrMNQ0LXcy5AzT0zy/OSRD0Jh4DU8DyNCC3qMJ9mWEj40LBd1dF15MCDSYlvIVYDveCxY8HTKMNH2IhsaRAfATl36aKXUdhCIw9XvktcygNRUXXg3fynrplf5TzLjz/KevJNrhpKgkiQd3KOZZ7wt8+ZUR2tFJKs/hUBvLIjxGBBC1PNo50WjJQEDlnOhmoTcXMC1mV0gdSXsByLq+xPpFYjQ7hVl2kiFZtHU+PTJ0f1IrhTXfnVWi3oHmdYqvDvYuoNoJb7xZKlQAn+gQc6a/Tml9hGV/UWPQlx+UnrH3DtPxp8mm+nIGdJKnR1SMpPItJdSz0M99hDEXa2sOxXJovWxTQ79JBos0QAAERdigx8LlML0BCmJO2NsI/A/q0MqdDK3zR73HozmI5Xr6YMpkGPUdi3aJRX872zyZCbEihYZwvoi7ELUjglQhutoX3Vex1bsLtQtb9lIP6RWKFgF2KY9n5KfX3GuUFJOJHtjRvgSIRy369ApbuUaXrAxNMStwhvmcxHotGeLhNTYqOhIjzqeQXlVvvDmGql9ewYl/W8+qNMXpfZd0XolTQB3zKZNhxALYLYV4MxBJ+S0JXMddw5t6MKdZth1fnUaIceXTVyHicprWZweJSuT/qV9Fg0YuXz3b2xu5Pl+GNpX3EA14/qNdaVqk8hqPGeKVXy8S4is41IAMBgzEei9t0DKhe0Qvr7roWFv6HCavaohJRzofs4ip5ArJJj3WzGGmSIaRFuQDUCV0VEKua4Nh4cdDpa0eOQcuo05YpXXP79uJSL1HduWKkEiPdVgdoXcS01groW8pJJ/xJUaX7Zp3rTuTdT7FlJ8c0dUYnQgsPzma9tMyDJIhoLHK3G9RVcLEEzQaoEnvdk8IBgMrjomPq5F2gXupSAkp0rTIMLJyerO0phyKUXG9l+k7UodlMBIZA/WDAZhhs6dLcICShOC8X8OUP3zCTkl9copj/RTnK88/aK7SDZSXF8CfIixe1rGi/VcNFjWTqI8ggwi6Z4cdAUMqsI0MlmqJIObw/s1X1Yzh6JfJh0OUtu+Rql/s2G1z7reSYE3TIkPYqealVGtYaN2W/negZeNKfamhtATkEMoQrJ1rpNA0SyJ/EcUpFyc6rghhe69iuWF1tWLjmB169CSKdX7sPDimZ0cAJCxL11mRpRdVz5YKFZfP6PVl4MvV4o4nUKPIYNXRlp6sheqproVk0H9IhnyJ3w3FZLC9faQpkmHiUaNSFI8DOhcofL8hvEkj8WvrWQdeDSrWl/fd2ktwQcmJeFakfFIKZ80CD37Dj434RBqsNK8I88gWzeA0kY7/dOVIvS8gWYkey+9Bri2D9tvTFzlS2Ak2Nm2EQj9uiMR/CQ3pa8oWuIvWGCo9oBFFpkeGkaFpNcaMnvpvoRWAwBjx75NgqsLRIeWAapT6MJL1qEjI0SX8pRk67Be14RCqyJBy8xBXhegm2Tm0FlKoZ1MaAbRO5C90+v82dyYLEtsgEBX9//9MDlYVDyRPcov70tO2xCYo0GJPTrkkbgFPyUQ6nddVhzVKjDl+Vz8DX1LtaXFxh/yY17cL4M/S5kp/NZ/8mg6/CqQ4oqs9tQTU9PrvDcjbeLog2PTmc9KmWB2Dm2xvKHS5mtWnvrBkyr4MHAsR1V6TbLwKRjk5WhZ70CvH/MKlEJEpuBTbQYIrUhynWmN/0cE/O3xq9a9xmjGafTycXcnFJR6Ct9lrE8b8Uxlf9JvbO1Csxed0+M0I08pA8S53laOGFM9rFUlqDz37XkLebaxY5aAyqsoe193JvLfa0qcM1VYMbC3dHI2zeF4yjZ0Z9uL1MfdvDt3DewSb20nf0pXjoINqbbf7poNsCnvwhHKAVr1qRDaWaCVbHEa9gTPgXWis/1PozEVaJ3gF5PiaDj/WbtpRTgsRQKutb5cEJc4ZHEa7ll1Wja+cnenx+K3gW4sBk2ZQ9I/SwsyBICtWHbDbQS1BBwhLltyBqQzolB6xn61eGxwe5fSKmKTh+dm8iXyct3ke5AZ3HTj5rmdXJvyGZe43Rjk603vLtBScTfj4Ze0p0Ede5s8m/DUdfhpc+9UlO5tQTx24rswitK3BCwptNF24v3EghiIHn2j853HfZPZhxshG4f4D5ZNLTtCIPhqrbRQWw0IefxXdPpHM835DvQ0Kl//HduLt8nzr6R/NCfdIuNSrPtzslO6v3qtQr1+FiZBN9pr6NLe4BslXdPjFduZCTKWdaAOm493K+CVpzzCMUq9QtbKkDHPsXgakI59Y63kJVSKPhv+uiVxdsz5EDZdfkLdZRYftIBcn7JRT+mPwuKPd+8SlT7Zv/60susei+F10EDiMKGmlu2guOdoMxmo2TzA3J83EUIWrglVNSj9WAubnm+cU7kM6/Co96ZDc8iCnWmqTLJDOtjYtmUytVqFGwS6QD7Ixq8zE0JU9UaBv8GTr5785P8kaGGU3yuGDfUSjxvHRw/66AwiJHE3TCY9yGU0xb6ll6p5p3nQwoGTXi9LGwa8RtIwFiqv3vc21dveT5qlfSxHT9mt9ToffPJO+aW8QroERAgejSo2VD49sNTY+dHRaS7hcRtBqTTxn1dsJRykrs9DIROcFBMmEbacxoLNlxwBMRFeG9AXc5CRr82iTtu3Ix8se6ETQw/ekg9u86aCMtzOOAU7dOkil50/kdwlA635e92pZsNHoCAB8hldyxaXPd3T40SHaHN22V2pRPySdwHl+OtGqtmHm6DrRYXeodBhnMDbQBb0zKS2t5hT2og+8rx0XhnA1o9LgBbIaArP1q9vU13PgRwgpMCTecy0q2bLOuw6NsXTv0VxcXPJSl4tzNpLZYt7lyxGY7M7sIIkAgrdB+4gOvzorzlscOKWLDVDa2V0nsYtuULBp1b/XcoQfZRf0Vu08A8Tp9irDDg6k2VyrJvTbYG2KQFub14V+9n5DlaUgfwIcNOaEPxTAkxgi6qLDEGadjqE+lT1LMXSbPA8ascpGc2nzr+41zpXBdekls/zPOvy8BJnacFurj3JFqrPEDN7mnEDgOR/Q/cBA50bU4eC3pYhWikwUUM0/ZcI1b3St5ZWM3M7el2yJZp1XQ3rYiQf1qjUMJXWbnDwjNkAit/2s26nDc4EOQnn4eUPktW4R3UpN0Chwr1MGt0/1D3/Nc3J8XuFLOvjNfUazFELCGS7O8i5rKRUT9ZLCIyvFbLMKmW8ZceE+f1/qSB++WyzD4uyySxSuQtW38qaOep82aCVeS8fPxXLk8P92MOpLX/LabwVxWfaiwzk52c+jHBK+fc7+NxAmy7bax54jC1TVwXEpxK/r39HhdwLxPsW5NzrOg2ZATv69eJ+/z3quC4rfcMaK5NyJhI6qTDYlB79NL7aMBcBZbVlYultFoF5l4kZ4sq5lIqDRTF5Ceq+gyLfnhHnIxc3INx2a4gCsY9WN2Yd9acSmxxttyYNB4mLEy3WWTNdK6UM6/E6wCwAW0WgHBvllpUKeJ9EANsGO33e5JbyrKp8VqkjLjBZnMtizAgbjeHlyq4CaP5itFHgWgMeyRQ91JzNXLARhOLsGArOCYdtq6XmKsrmzFuSuTHnXofqWPDlG/ylNMI5tskQyApzK3N793fapXeUyQ52NxKJACVt2QQ1/Tqy/o4Pf/k3nKGconol7D/3swqBMakjGFD+DQWnRqRYOCqjlufZmAwdP2Aj/Kc1u2ucp05LXdJhxDuJZ6NMWIBCU0K9IxnDqR47jwOQrnK5mnyK8bdWIz3G60JwIev0UZqtpRF09yuPdp8hWEGjDNj+ow88HszCBfH7WyU6P8wIVSrh/VinVn6nu7eR425FfIt67z4jsPJwThprfRCtFGAKn6vfo1oGxqKdCU9cfZJF8MWwCOUUnsMM8UWzfD6639wnOXYd25Hy9BNB005Ix26XpKmLZafba/tJneGVva/RYsfqJ4q/o8PMEEKjmrK2o3n7tgG70y1XKJ8vJ3Jx9LtmirxCxxltLKbfNvbBKJUO2Mm3UgokjyrW08yimt4s4U8FwyWvZlZ94mJRLRtvXrs8JzG+Cyg0Epw4Ifr9K9M/Pv0LoMgCITQOYeYar96m/3/jELmnhLR/T4eeNDoSa3ox9rDZN5EuOaQ60XUvlDB4YO/URb6PtumYMplzfoG2ZstnM8oyn6rDUF+4UrY8O8SVsoyCMRnshWcHpo06kBuY2teSItAaeLp0maEwd9r2c8rSuJFKrXXM3ycHIxEp55lNu2fB5fNRnXM61jGojqXxFh18NxqmcnpXPzQxf+0cFAVdRntK8BtVr6eQygYSZYqaXLUAhsLSh9Xo/G8YCn3IezJFwrN9aBgw+8ESbtM/WNf40nMIQ8wZn5L6A0PsOHXQPZajkk3MVniBc8zS/FdVLrVuZEU1+b5BeDbBKhxh0Ytjjgzr8NDnm8qqe/6otdD18EX7UNPdgbzzU0B686+k33dqO3KKz3DDLWuUsu48Tx6UmxM1H3m1gz4EQ9MlM5iAqzrWa1DMVjzfXnRa11XijYQ3mqevT0ghycTAM7E0H2WW0D/GzAxJ+5XFZl3Zfu1uin3u8ZINbzX9tumVtZvqeDr9EuuY9BfAeVyilUkL0seWkJUIry5Ch40YFYUoNtOd8QrQ2bbpt62NDVFsv97n5Du4sm5k34Sawa59Ws6KcJZ2zFwNy00eZlLQ7kWOtMUzntVcdYIP+95CxtSEdyZm9L24XygpgCjznp6Y/db+1ZFm8SPc7OjhD9PSCqFjp//6YCoQmm3LHEDz7z0d+eB1KmkM0rboMWikaMS+uC1KFwKdI5Bys7ONTwLOXERMZ7mIfDEIf5z1DmHbiICJTRCMgE0QF5h86nMY7P900zMTg1Zib0eGUWnlMLzOHeYyVa9OisxYwfFOHn/7zCksmTSQfh6mNupvcEo0oKn2bDvQOtLHwdOqWkdLt+oNGCi49OAQBs2gCRDbrLF4T9bt9KsMUhfNv3obx5+GxME9mycDN6PTcL/7QoRmrbDEzOmmyDp+fPmAblMZNrgBaiLejEo+B+Wx4wwST/Y4OP092CdxbAMmVvo7DaJv+M0hRKFf+e9oGjJpz2zmnU8SwBOkpCJhJmNlIm4EWaBfjHoJl9m3pBlanDi1TTf0QCMMWXUbIM/tPHY7UghJRMkzz/YXGfyI1g3cNh3rr+B+Yf0yHfwAjBO4Lyccm/wAAAABJRU5ErkJggg=="},{"id":"DigitalGlobe-Standard-vintage","name":"DigitalGlobe Standard Imagery Vintage","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.1412531a/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqOTBlYWJ1ZDAza2YyeG14NWVodTA4OWUifQ.wVc8ZOuPuYVw39lhS2j3_g","scaleExtent":[0,22],"terms_url":"https://wiki.openstreetmap.org/wiki/DigitalGlobe","terms_text":"Terms & Feedback","description":"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMQAAADECAYAAADApo5rAAAgAElEQVR4nMy9a7Bl2VEm9uU5595bt6puvd9dVa1+6k3rgRCSQLKMEDCBAHsEGptAGE948Bgz88Nhw0w4bBzjmBl7HDE2EzM4PGZgAIMNNkYEDKDBIARIAoQeLSG1uumu7uqq7nq/bt1b9738Y6/M/DL32vdWYzw6u6PrnLP2Wrkyc2V+meux95WFd31fAQR6FdRfRYuF7ujvAhSpdQsgUusLSikQ6e6hfkcpKOJ9AIBo/VBaINRfqd8jd17Lf8HqgspCy8pm6K0Km4pNCYUqimQukHrs/mn1kcuoi979QNsGo02rRNVXjTGf3e9ePRoj2bZe/Oz1a+0j41omLR53+vwqyzBqDoR9casohe6WTmrroPiHVKcA3BkgYgMsXN9csXT3itBNN+lKDp37CUSZLahKIPrGp1FGIQYLeaBIdWhSQnGmjIoqXukYYIQr4IoXCfVPl8oQnaEow/qBUoZl0KZhHKoM3QAL3S9WjwGro+P1CtHLn8a7lhMfYgXFxqtU+mx83m0JKpsWGUadSZCFEdNqHGrodk+otoj9dmSQrhK5paKx+5WQkmpLikjqG2agQrwpkmQEQHHe2AZL11c22FJxxepKsahVTCvFBpadjEe4pHtqyPpbqtu5casuitdXPs2r6XNABuOwqB7EeFMDLUX5T9G4Wg3zqarOZd0n91VcBi1HB2gWu4WjqttXMGiZPhlGqKFGUFCKCyAiHpoCDyV0CL1vdat5mGEWQ0o1GTKrDvOLO5wyZ3XFfN946OxCjK7dFa/p5WpYETn0rnQj6b/pm1LreCjkky6Dyizqt8Y3NJDaIIoAUgqhktQ2xXkWgXDvso0M4nX0vusZNeIqx8S/RnCAxpiN1cdd6Qn15WMSy9lQAv8SywKETJkMk5hjVRhns0ioChLUWfLymJu5ZCWTMWQWiFDmKNRAnaT+o4KZaTBzAsCpIJp48Win6Z71UarlKiB4lLDhU4dlRDNnrTWlmMyayypN0xWlj2Te1BOXlV55loGCB1AEnnGqx1XaharTgMd8Xex3Yd2bIgsNIkd3Zlvp+fxS4dZl6I/rNMkwcu+IA9NLkY2MG4Xxqy0FYaA6BZFwxjQRkxgzDHlpzAOuEGOOIqlOjxUx5HUfLarnwEPEMUIym8go0zQIhdsb/Ft/wTlrbsCmnl2CuShlWIYuChVjS5iizduU7443Q0YNYdXZu2o+mKZ7YVmE+CpG3/otfSlQXIZSaXCEmDYZRoZVRf9hB+w80OYTNFg296Q2yrCFd2png671henVT8rVJd9TmpQWmYqkjbU6Go5Z8b4k/LKQa23E5dGvqkDTDzwkB9rcR5WNUjPWSXFzCXqSUjq5t5FB5xYEZZZmaWTLE0udbzEGampDawrk28XLRdOSKoP4yo5Uw7ZITuUC1R8h+BTKYKtMKkkpahQgb4rLjm4QnYGqpxvcWhsaPpvEqNc7dGqELKpFSih4IspCRkT2ZVZH1IhIpVBkMqJdiFXa6mxhibhEgCqmJ5gzMYqXGgVsUqd9WB4pKFJCVGFJTIaqVNVZUwYwcKH+Fr8tcOmMp84xi8lF4FV1qfM+BzafT6LWs/FnHmiQOHXuutE2KoMvVkyTDKMSDN4N33cB1IPcpW0gCQn4N4qia/XsoqHKL7M581oPaW4c7mgWlUqxfsycKFTHeYaVOu8WSqSmZVrbhikglcGOMSz24askhfrs2nB+avMY0g3zWSyOaAPPi/uxkgyFFV89t6gMjmqdsYlYWqxjY3pQjy/eq42H9ekg5cjqJQrVtjonJcmPYEM2J5syGUYRo/qmFASAV+N1cSgSFL4PsrPCTcElTFZv6GpXCDpmbtFhlIYqMfCMzoEUDTxgEYxBEUNqyiaOOEazGMq7IzJzTK/v0DbxE6mG4sut+VI0DMg6IIONiVYW3aPxSMLqdYMszrJryhkm3hQ9LdoTYLJh6Vexwff83xYTGFegwDBdMozisPiASs9SYzWhQVPyERWJxwaDlnblcsDnC7nfZI0c/qIRuw8VQ66WECHOOF3h+s4k79h0BbTsB5UzqjnL7OimDFbdpVUM5mBIhhYIUG91jNjJ8yyk2DiE4RbltY+ongsGwRAm10a+OOFk5NMqwygyuY0TmIwlerkEetYDCxrNqLImbQQw9Gv3Hipq2NXvITwCKGqw3LqDXRRDsk4IM2jaLbfAbJM6Rxb3Tv9lfIU7ceIehyajq0vOSdiQDApMEXQKdFM0c6a0HECkjkMySbMXDvV8n1d6SC8+cTK9NuNgBbEyhTKMAAR0yrt5bOh+fqREaIeGP0Vm6Q94ECcJV0os5VyzytIJ5hl//xSU/6tteMXfB6nUsOwrRVJ14ImMt2N9eE+KVjqgJEN1Nkc1501qOqD27BtuQm2K67UgGlWSgcvVSHgu6I7E+XgloTNKINSzjnuLJUzH2WmOMKcKTRkqSEyhDJPKghOtlX0y7MR0ct1tu9OGCC8poMTJqtIA7ECf1hfycFUSlBNykpBiwI1KlIdKz42sJnSlqkngxk8TNRRXjq4C2dyuis9Xgdkv2NhNbwWkbFqxA+lSvF8bDLYLEK/meEMyIPZJ48TpikCoHf2GL5Z0KYeYg3fD6vf4CnagSGv5ry5FU59hMk1gS4qdFhkmmiJ4B13rEoh42NKczp0BPriiNWB1IWREDSYy/dI1NCq+XOdKcxRxLWuZGxn3VZXFDieaNhVXoonEjuIDqW3jwIRRNd2oUUBTA9aMpD6MHsU06q+r05ehN80Lk7ioK0/FGJ2ZHnenoMjjg6BzIZ2bBnjcuD7zZW3b0eWrLcOo1I51EIq4Y5TCDWH/x3CoaFaoAoECexYZta1G8ESp1ChSnBaZMBSS2U+L1SeH5rbkqFFvDWcoZJwqOzm+NstoZgfPDNW5K4kIWmnyGR2PBLX/kvodkqHE76IRmnL5YCwl9uX0qQ316X0orOvvalwl0Tb5uu/OB3oOzuM0TTJMzJDrgHW8q3cxQXY8CUKyxxeUcFjPxjVHhhbipggTCEgXxzR6ZMTkf912I6VSFcHHVTzb0xUjR6EYJt1xWmkjy6e5a754taSjI2ZF8QiN1yWw68sgPAg+dlL54fSMQ2Bh/iTYh6vcEIpQXulqDKzMBTWpjJnxMA5VR0L1p0SGUVjXr0ZJm8gKvh1fZNwaGbRO1IdE5uBe3ZtwgYRtas/BQFR1hOjR6xEmyZkOO5A5jRq4Cql1FdmpXx8TdT93Q04PRPlKl9HT9Eg6hMoRx/pv6KKX+lX5ewsTia9sK1wQ+lJ65rwNGRRxVX5C8yBDQwdBNp0fTZEMI5+EOsfOrA5AqeWOZiV80vhz7s36qRZVQA4n1huCYyK3C/rkc3UdTa5j6V9r74F0o6mWsiyqwNin7266VzqPHDqJrvhCxaCfD5T3mjRAtvCXCmIZg3oT72wYLcsDbPyCEWZeqzUWBSIzAGfE7K3Rl+tNpk6GkU4EAfXQevCKiOlqfqE1ehWMHSmuDFX9FAqKhdA2y6TGWb3bEKCzL6vTob/fK+m3nXy1eVB0MQdyGgE9MUmIzwos6bvzTu21TOrxNfOHfqQyPgY81lPVTqghGdhYfKmbeVZhQYPQl6krCK1DX7pnEOYEKqNUYpryhlUdIXouT9z0nS4ZRqUaQuibBSNezMq1I3o8zQzMmGX0zIwkQzUjU8VGYYLnp/xMuB/Wv02WJbZlhWnqh9SWUsJOLHcudlTSq7djnjhFrPcTplg9k0sSbcg2MqheiKSlLamepEmnokkYJ74dx9ZWdUrdrymBUlsfPQajjUyjDCPPodnAkbxYx6pGEsVSRgcgGD0vKVrHAlrGdJwtBou8LR8PSjgjOnFFdR4x46WmVR/eXidofOSsOMlqs+ogQn11ii1Eu1iY8s/urJOOJaVt6lyVX2G+jF4ylDTRHpTBQ4mnGyZ/to40nhV4er6pdAmEijpy/S2apjqxRneJttlmNvLpkmGkDGjeTOAXPiv29dmixE/YWC3C6OS0sxZFWkZNLevSbw6vsO9k2jBjJmczUOI0g0jYRDilN0pSKq8qktLU1a9uIsby1whEOpGKgJL5B3yiXWhlSu/RDwcEFd3ptGTwianSIR6pbdz3MYoISQrpP0d0j4wlTn5LvMdAp+mvH8UGRcw4vtMiw0jqAEk1om7JVIeluoE2AJ1R4vFmcOPwXu8xoheNHooCInasVxT1a8QIKzcmoLj1JxTwaEVr/6QY0jvpz4TrnBLFxoAn1CYD1K4L0Sr0DEXplmNpYqf9AtJ41qLmtpoOEK8UfJsyFK5Ao2uRjuVXsGJoSemnRd00fnEJXaJRMqrniybL4b6O+xTKMPKQxSZvFkffNa0q4GdfC+gTBNrFBzEwD0UNr1MfCqtlvoPMwUIdSesrWxpZzEGoXzVcR5Dq6IRaira2Np4XDkpdkoWQPLobXWz5Lk7soyOaMwt9NyeJ0ckjriZeMihDb9OQZeD5DhTcQDpNR28YKUrUUbhYPYy8yjvivaa3aLsplGESYAjKIFm1OUUnQVe9cwodYAhoj6gyKR2tOJjuqRL6Ux6Ll9gEUoKee5uAhMwdAhNNZY77LtqONeSbakX7oPDMRyvCBqOpwXWoBh/2F1QXLR0oLeXBb7j2ZUgGBzGmxX1wvZ4e69h0m1yk/WoCvGcUj6TY4JEKq7FqyiiIdYmG/RYnMS0y+MZcHYnOMWtoV19wCHAES14WpzbulTx54V1dUyDrM+XGcYUGFiqE7nsIlfCKF4cRNC5R9dc6XT8BqTMf1Fblstq0mlHUEYKiCVqKn6lFGPhKl6KK7CBD1FMCNdJ/0AdTEJcb7MBE3iISAZeWR4rKfyppoHnxwqmTYWTVhb1PjZWbDoyLtVXGggc5AylF4HsepFibEtpUqKTyaJgx4YYjTXXcODllXXnMZBeNS50g1GLmqW0htri/KkOvWYrMgTnlIoFPlqEHwaaugjQE/bHbLo3I/Aw5JBuojk+jGrfvrUROmQwjHizDLhGfqWcmaweWsqWOdKy7ex4JIrPRadz2KCIAPYVsf5G3MT27GySgPF7MsIMzs1wKFiyPokgH9dVXnYe0xeQfNtGMqBd0NSB6lsFCTykRmgldUSftnlmW2FblilbbY9159Dp5JznS074rR5YmUkpVpk+GiaU7EpevSs3hLa9VJvUbAajnA95JXiLzTS06chuciaAQ/bmHy196xmQQbLLAJruJbeO3lQbZ1xKL2JDtd2Y5kbJ8Wagwy2aWQQ7UAoPET4gOpXWT6SQttpJnpaOG1Uo7LK2h/lTHNvbUyLEzGCA4onPfUyLDSOoSoR67tYsMWgBbetXVFHVIB8pmTEqCed+mo0rY7ZcMT6lm+dWhk8N1VZIismFltAi3KZplvnPkUpmDszjS9M7daEN1RpIxfOf+e/f7MvSuHs8llvMKFw8EA1RJ9cN9GgyVOfdpPJMiVU9KPwHwtMhgz1T31t8pl+UVraIELM1wx+z6VCeKhtmtODkjfsbJETLn3bWUFBIjFkcBTifiUpySLCa8v7GyrixVBTt6kFDZESyVjKtQOsiuq+Kf8HEYBI5kG8YXO31DBq4fELLUPRXTiwth53rI2YbAoYTvRN/KxAGtqMwtRyAa+j28WnI6ZBgVtXjx5c2wTAp3LIsQqN5tRwzMghEkpN8MEF0jPz3rfYl3wiRp8qU2oqtL5hPVUPRepm6IzeG3OqIeAbC+WAoybr5v+xXhUVoHHMeN6Jw5jQS19Rk5bE4SJtJZBgJEPUtmTiQqG92nurrzHiJrMOaOZ4HLEPZKbFGjFqlta66vv3WsGCjD9+mSYeSTwaLwH84A+WDwD/UuX/ktwYI8ghiCZ0RzK3aDtifwJTJODNguehXIJ1pQTzFZbU+lKkaRwXfOWTAyTFYc8lyoIQPTUTLkpMYvXyWVKaspP95WBtMDkxG3RENCEsxoIfKl/h1AMSM98x/R3dpQ2uLgEA20ycOUyDCyAGHeFVFL2TdWFJqqE+QdVN9ijx3ZikKt23qAhyJiaktHd/VhCiNVopUab4kYrQKECSzT4r7ZUVRxvNLBY9jHD6sfIDAPQBqgFhkLBYMylL7uMkiYHCCDdecKvFi+rf9XfbJT9mQtbjucPzMdTgHDK2amS4aRepTzUpHJA4a3ScR6E3k2mEqH1+/dJwzCqePqSNy8oomFR+Yk8ZatU+h7trQwea7/G29NqwQpNtZTcZx4od3yGD1CXUFPBmG+8tWSgVILNzquS0wGI/BBD/oGnB4ciLrhChoN9bxIGJ6TgcSde9fldMkw4pTDowXgB4zgKJyXswKyqjLEfpqSgsJUcBeiM8bYzq2HvVUFSBAk6TfxY2RKUkQSQYyFDOE9pgJbmd14yM+bFNLFkM+1+OqQdECGnIZZCpn4FlJnKu+fHnUG7IAkMRwWHlywaLBZhbn+gMzTIEO3U615NwoxI2TjbojBZhIqUwjoyV9SoUWb0k1/g/Fk+k3kMDZjGy3XlaPqxxDEoxBm2wWmg6rxcLKUaPX7oAiokUnbSN3crLoXk82PnvQUY8qiY/IiO8rg7VWxcTLeHARKU/LqjOrV5Jfcno7fSywP85xalFIQ02VzafqrLMOoupEnGgXwZa4Y612ubLnsvbWtGkr67OrSQS4A/uggSc1OXK1BI5f7nRtHXNkofhYLdTxsblOYTZMZVNY/8yJNJOrGWnXEh9Iqz1VhFjirEcRz+j6oLoA6DkfXhgzspUX1qTzQ2CnvOvDqXToWDYSNfWjfrvLQQuh/Lub5nQFX8aCu6DpFMozsL3gqkfAjrKJbWaQCtV9CUjZ+ekbb0NStNxpn7Mr2IFLqIxX6zcNjb66wMN8RN8geLHX3I/gUioyRryy+fudTluavqY4PrETHVSStHpSf5WjLoJbFXaR2dDssNBhYcIUkl2IFg4Hpg1GoUFuXwdLWLEPob7pkGPHNXjiPEFsdmB7sIBE6XhxJGWW1zyBZNYieIL3Y6Chb2DmgfTCK+KOb3gcp0pSUFMh6ykiXVNFL5/hSxIOjWS+UpwbSE5d1RKjYkMEm1tq35mbqnKD+C53b0fEgtAzyljrONUo1ZWD0Ntm1P7pX8rJ1ROtpk2FkD1FUVFKj5/r8Q9GeD0VZiOtxxZ+NSyOH0tD+w71i/bqDM2wXBEMEbE7Eodj3NRCNsGXYpIPsIHl+DfCAaQdep3kgL3Tkn81B20YGizShWUJbvc8gwaz0nM2dTp2xy/Wpk2CEhPAlK9SQjOZaDpp23m2KZBjxfQD2HKz2JkW3n+p3YVruOBYAijqIxNQhyZmPJbgTqkEJ2YLuQDf0NbBKUYICB/TdNG7c1xXjI4cYBHmZ5QAbDVQLObMWbyNDqQgc0FJlqIah38NCAUqilx7cIb0rOxne/BxXR7szm7hRanUVbIsnq/6g1XTJMOpNSETozX3xpKuegAVNTIM8OmFS6YQNPFpA79yQLgeUAl6CtajYq6sMdL8La5J9zWQurhUjlTyWvvPgNaMBj7jxTcNT+zGwoDHvGOI+QTfrPeW7lEEZnLYWCoIe2Q1DaPN6hesVgzJLny3a1ojrWCLGp4534I/SYZtcSycDR/Bpk2ESxgHKt1uUljmw5eMS8Lpq5DQhFPUcuuydqBw2mSSFQJtIpuhiP4lPb0+/RFenYpiNEzZHYT5saAQp4tncKIFIEAB9HdpgWIiVrBbYkfH0eK7TSP0Ui9EU9fisFh+zr7qgMTKg0TEjz9WJe++wJhmc/7kEehpOXAZjV5QCjQd59DTJMCoiYW7byeKRQZ9VJV7JoPTgFC2FshakDq4RrrymP5Log0zr7wUWZv12MVRBQT0tqf/3nanniLUPjVy9B5LYUVgfZJUWZun/EL1IUYVpW//0q1R61pWfPA4MDMhg/XC0Cs5OTw1SdM+TyVL1FZ5TKToZJZ6FAIfmd5pHM99NGeKLkCKfUyLDKCjXWQUnS0UZJvn8ZCKi1yeF8F/q7ISqTIV8EMGa3UkIUVkIQ1AVipDY0i3d4whsU3iufHUeHerASXY8sNEqP/5uHpqAE5xTWhnb0shI6MaaSh6QIRkYnWmlIJgd6aEYSOnNrm04GmM4QjoVI03znFrRuuXnalyG5pyMZJ02GUaWtgSOg0UYAkuwXlAuaJybBoSplK6kt3zGvlgrWmsp5CwJPah/NYze3kIpMfIZi65cD6FkyJUvo+0e7H3mNrmfojKgEXXyEqAPSMt2WlfYM+EUTPlVVLVxc3bcWFwGm0sR+DB7irYuX1/XjuTZSULFXptpk6H7+xCS+kj0bE6gPznH3elqGT8LxUbvXbnBJuNS+fgzf7c2vRtEt9WY7D/MIXSwwNEg1u9dxGQ8/kw0Ut/SEmw7GXIdGsTm+Z4Buj1aua6kgh7thm5aHYb7A31+lWWoZ5mk37ZGBAH8fI5ZZAPLCqInZaVIHxE03bJq4nR0ky8YHD9uamhANDV6iNcNPLEMneDhXj7dG1CiFQkSOaMnhFitq6T/h8qH6lhISZ8ptS0DiBhPEmxfp3meSOsWqltiu4DIOUoy31MmQ3d0QyJvHWPwyCC6/+DWoRtpsT4o1A3FLWdMArMS6nCkUOZKoWcwFMBT6BOG2awIlcmQiKIAWilWLmgolsUiffhDV8k5JP0PKqfv/LjooAy9VSd+ei894iqx3HhSEEn+a1rkFIhTVdMjrRJSNhD5o5Q8dCJTJ4O9l8n5rwY5AG9qxGE7nI23MmDg5jI0nKSfTlhksN/FFMe2bO3DBKt3sxmZO290BPA+ksxJrmi09IBLi746nCAsDOx4tdKFIRnIEWn1PVTRFI1XbYykvmAipzyFnnwmskENJStFDdZaBgRucB+/TIkMtlOt8xld+rNXwMONVjuQXF58a96cApRugVdq/IENV0oxzo21sPpVggaNVtGmSfHKz+CAMDz7+ZhCfXTtVG5SnGq4PubqJyi5L4mpHcKXZjpV8g+mNSBDDxjS6HCEiZtaSpfRN3ZvGiL75NU0f7dv1bMZLK8IMRG4AYogczMtMoxCWKY3aWRUir4Ub9qafqClN3XrnY6YO0/xbyWke4qytthjYU7ApDIChzdsZ3Qt9BkmVvREV8vYggLExiIiV+6LB0mNoh0xJNlBAIMBGRgYepfRct7D3kztg3dzDY1zfqD8FC6i6GdddZXSUKrQQQe2ejRlMozoOB2UPR7fHBUKw14spBDEX4WMprpEjym6b/MF91xbbWoZnHKoLAi1oWXgoJjC7ROsULXQTwPS1P87A6AHi7TcJvrUlg09d5SNQiF2SIa8UsLOyZNCs5+E1NQuGG++1Cgk3y6RDwsJjHguQ3x0tzEPnQIZRuAOdFVJq5rHuRdLdf94jJeF8+MYPMvvHXVgpFbjUSOGb7LEpbzUjuobf/W/YDQWYViBDT4k3S+JRsspSR47IsD9CfqTdTMS/p14DDg1IAMqaATVkjHmCWsDcfubioSabIyBFjPMekD/oj5DZOQJ8xTJ4KddOXSIGzpPZEXLKxO8TR5PfLqB8GZNb23fGE1oaQNfFUZKbMzLo0FZe61LqBA2+9AwPpoLwdt2MsRB8zCgfXLo0DQxh4cUYbVAfboketZ8QAbA/o6CAxfP50rsg4U3HZdYbmzpuCVQBAKKN7A4ysZ1mBYZ6zTJMFIi9clmvymehXFOrl4eUD84np8s9MN5yZh6Rk1LaFxHyZvx5a35fl0WOKRE1VF1IzLkO+KEFLOcRm2lDhQMPDHBkdRoFOvbAxohfiBBgKH1sY0MUHQV7wOUOiQdFPhvT1EZhb1/G30RhAmO+H1jg4ytUB1fDSrOByN1iBDTIUN9c5+Ews7+tFMfM7aFkAKZcw6sN3NRAMdin/FZgELAoF+ov14kQZhQRfQv8Tsty4W5S7jvz2Ko0YpGsjTYQRZDsDq49of7GMG0n6QTcqawJKw0WzJA7aXKIFSoxGwxI93TdCQMo9IpJoIpgfzdHFnIAcz4VReK9PDHCUj1maVpkWEU6NUOunuMSuQU6mgl/SZGfQlMgvMIE9I+SupLUVC92FCE+kS6tB4J2clPCmODU4O2uQ7xr8CeQ28IWR09jmqdLDxA0fHYiIvRhB2DMefUtmE+MiCDsk23HBAqoGlBKfZL7SU4GhSX6aEd5V95DYNOjxwnnoQGQcE5bt6hd02LDHVjjislgyPgDVmCxApWR9iYK+2A2J0xhIN5GTIKIy7YPkh5JTbolcHbV74MJeBlIa0D8SuUxjEd0wNN3uH8NnlACgCipwNKiAZhNS5EiG1kqMoJ8z9VPjoDcbDQZ0OKO2HvT/4ouDAKq2YqOIkbe5in8XcGlIDMDW+YIhlGoCsgedfMaOmR8K6tDpojMz8zUYqYUKIMJ4O2VSXusSgWpCMADYdpT+JB6BJJ9xE1V0BFIDdye8DEcSnwwIYb6XBHSaeUAjKSGm/aRp2V+MkyqO96uaJgalDQjU4SwfXI9dCoJ4Gqv9jY9ocZEa2NITm1zdFt2mSYpGbqP7UCISBAE2RRkHSWS56wVkqKnFo/5cCo5YrUliIU9efqjmoc1N7QXdubAYPaWMfejhyOZfDl2u5XRGcfAG/o/bEM7sk6Qq7H2ZkJ9szvwu5ds9g1N4tdszOYnUwwOzPBaCwYjwJGYWNjE+ubm1hb38Dq6jrura1j6d4KFpdWsLG5GfVp6VfUc6k89PRpoOPgIqEdbEGjO/NWaMC0H9ZHGl8CNNNv/Wa0s018lWWYlIryMUWR+uyDBCQNTqGVzUkqNzRBNgWExyWpPdlO76ivsD87j2ZmMejYXMAcgJSl69zCfamm9Cg7O0vlzZ0J/pRfRXDlpXfmiAZHRLBv724cP7wfxw/tx9GD+3Dy6EGcPn4Yxw/tx7FD+3Fo317sX9iN/Xt3Y25mBrMzY0qdgOWVNSzdW8Htu8u4fmsRV27ewYXLN/D8S1dw8coNvHT1Ji5cuY5rNxexubkJc9IG6LCTmj7JgS2iV7KCoAIAACAASURBVB2oYal90bE7T4fpOx/lsYd1qo34imUPMxOvkZd/4zLsfdeHLbiQL8IP70kz7cvOHRA6NTC8TOhRyEj1d6c/RliiQ5PgZirauhKjtixsYQsRaTTKhZDAaK/ao3K6PRoJzp48gtc/cgaPnT2Bhx44jjPHD+P08UM4eeQg9u2ZDwPJ+zosp17haAj9LgW4fnsRL7x8Fc9duIKnnr+IJ595AX/8xWdx685dOOAwaKVPICrS9JH0m9tU2iGlS2qygc3loH45umhGwOVfBRlk4V0fpiBAiGn0C6UN6TGMYLcaUeC5PN8zhKUb7rbGYzA0oK/MjO5wdGo5I3kjNBqG28EZaFAyz+at3Lj7MR6P8ODJI/j6r3kcb3/Do3j07AmcPnYYxw7tw+5dc1V1ET25fxN1B0cZai8iWLq3ipev3sTT51/G7/3pl/Cbn/gczl28Qipgvesw96zYPxuo47UJGJDGK9VseESjfm7t9A3h/w3JIAvv+nBx4s5yvrhZZIGDUGJLo4b06wywuKOqeqhjsvEmYGOgMrqwg7RCzsA48qrU/PwcvvUdb8Jf+cY344nHH8Th/QvYv3c3ZibjQUPOBs9XdoTtIsVQm61ScHtxGecvXcNv/OFn8bO/9nG8ePl6xZN6CM5S4ipUAoy88hbycdYPkCJB/g4Dku4OWViKEHG+Z0qzMSvW5v9fGWqEiA9ihGO2wYu6zpv2QxHO+gopUk1VdAWK65NDo3q9T40d4XT1Slj5QcjOsz31YqUysYwAKVKxtshhxqMR5nfN4uEHjuM73/u1+ND734ljB/djZjLGaCRxIAau7VKkncq0vNVP6/fG5iZeunoTP/l//w5+9tc/jpt3lrC1teUyqYY5MrPOSA0Y1GWqn0Gr9YlS3+aSaIbyRr9AGq+/fBlsDmHi0LyhKLWC6DCcf3VuHUBB7+mAhs2PAaMxupw7Bp5SYBwwulC34bWGVA0gag9swczMBKePH8YTjz2ID37z1+Pf+trXYd+e3YP9b5WC5XurWF5Zw73VNayur2N9fQPrG5vY3Nqq41gwGo0wHo0wOzPB3OwM5udmsXd+Drvn52y1qSVnC8CGHEivT3z+K/iHP/UR/OmXn8Pi0r0eLQMVS1EKJCILoW9SbQI+vhmzhTgm8WgPT3xbGYWCWD+P+MuUQRbe+WENSKFG6LKUupFRzYkDB/OqdTHUKRHP34fK0PiO9r0mOmcmGBG0Ye67tpuZmeDRMyfwjq95HP/Ov/02fN0bHsP83GzPIDc2t3D99iIuXbuFKzdu4/L123j+pat46eoNvHz9Fq7fWsStxSXcuXsPK2vr2CrdxuRcdYQDC3tw7NB+nDh8AK86dRSvOnUUZ44fxgPHD+HBk0dDnzmNGrpa6dWl67fwz3/5d/BL//qTOH/pGspWhTx7e51RjspS8Kv3THNCOuf0Q42jVOMWpjk0NH1Dh1umy2vOwznEX54MXcrkHLgXVqE8ykUUyBGj8SI6kiudVcrGTLQH07eck21ztRyxE0uRIwKNTqK0zWQ8wmNnT+J9b38j3vf2N+IdX/M45mZnOlXWwdjcKjh38TK+8Mx5PPPiJTz74iWcu3gFL16+jsvXb2Nza6sOqLj6ydHDipnyaf2PceroATx65iSeePxBvPV1D+Mtr3kYp44dhCA6wk6rVXnecmfpHn7zDz+Hf/ZLv4Unnz6Pjc1NbDfPy7qJem4vYoTFjWTn3c+G8de+JBuSB+qQ6TCImpb/EmToJtWJ78yurdX2cva2UnwuFFFqO0QLMvLEqVWhWZAhvk28Nf9hMiePHsR3v+/r8a3vfBPe+NhZWyYFgK2tgpev3cQffu4pfPILz+Arz7+E51+6iis3bmNtfQNu3cLCpDSsfrMBasjg4Rbj0Rinjx/C6x4+jfe+7Q34wLvfgpNHD/UcY7srg8zq+gb++IvP4L/957+MP/7in3fzCqAPSjx+5lhWUMXNluogGRxf0yC1tpbNAGbk0QBLpVU31uj1kwTzfyky0KS6VjBeQtyAu0M1dAFjH9WtocvCGjOfoEIVELSZlBK9D70osZ0ftICoNyBdpZEI/uo3vR1/44Pvw+MPnsL+vbut6dZWwWeeOodf/b1P49kXL2EyGWN+bhazMzNY2D2HmZkJNje3sLh8D9duLuLFy9fwzPlLWFpejaGoxWwzYvbLRiLYv7Abj589iR/4zvfiQ+9/Z5jIA20HGUqxNja38PQLL+GH/sFP4k+/9Fy7X/2itqF2YmKk1ZzGJDbMDXPUCJNgpHFNWYMSbNlEa5L8F5RBFt75fV13Tafrp0mWbljwYzQgL4crI55NYg9XZiUpp4E6Gk5b9bEDraDI2n+tOzszwRsfPYv//Pu/A+9+y2uxe34uoO+txSV8+dxFjEcjPPTAMczNTDAajcwYdUe2VHm3tgq2trawsrqOL527gI99+s/wrz/1JJ67eAX3VtY8lRLeRaUJp90D6dRlEAC75mbxTW9/I/7e3/wQHjx5BJPJuBephybeXAYAz128gu/9u/8TvnzuooFprBdMQG0IoGHs3SNVN8A70WzxqcPPu9+ASNxLslSJMpJWuv1KZLCUycg3vI/2ru2bSh3cIgFFW2BULVUCNFnvXQyozTmE9g7oHzgcCAm98pnJGA+fPo7v+eZ34Ps/8B4cO7Q/IO2wctvLniyv0tBrdW0dn3ryafzMr/8+PvH5r+DStVudYzSvFC0BhOU7uh49cwI/8gPfiW9955vCDjj3v90ycKmT1s98+Rz+03/4k/jScxeo36jP3jywkSol7uOEWwZ4sQaZULJikXbV1oQx2Ncrk2E8d/aJH+tuCd3XyQ1beOeNlgeKE9FORGJ7neToPN2VUw07CBKVUZSuFuv3hlY6e5EgvIfLyijB1aEDC/j2b3wLfvQHvgsffN/XY+/uXY72acBaZVreQlytz/fGoxEePHUU3/7ut+LR0yewvLKKa7cWcW91NcqeE2nOvZMMgODGnbv49Jeeg4jg0TMnsXvXbBiPIV6VX/199OACjh7ch888dQ637y4bDx7FdOxKHA8ethAFKmwGJFe+ksNXsOOIyRmCITjfB0fRWD/y9cplMIfo2rulK/2eoREdpSK1vjuP/nYmwiD1jIlWAKpQjCw8iDDFMj30eHShI9Ovf+QM/ta/9234oQ99C1770OlgwEo7G8/a+gaWllewvLKGra2Cydg34vjiti0nGo1GeOTMCXz9Gx/Dnvk5vHjpOm4tLpsxdYsIrJPSBwX9rIh7d3kFf/bsi9jc2sIbHj2D+bnZZqTIcvHneDzGyaMHsbq+ji88cx6ra+s07Ix89Z9WxNFqbJSA20ArfaAUyCe2DgpFCJihZbU+20Y2bOLplcoge9/1YTrl7KFZiu49sAN5wpSdWZsbhTpgzhDcwNsZgNfJ93JG1cqwBrIuvTe/axZ/5RvejO//wHvwDW96DcZj3/jiiefa+gaeu3gFT527iOcuXsFLV2/g5p0lrK6vo2wVTCZj7J3fhRNHDuB1D5/G217/KM6eONx0qtal9xaX7uGjn3oS//1PfwRfeeElbG01ji6wXKQXB0q/eWj/An7wg+/Df/Z9H8DMZNzjY2gjj/l67sJl/J1/8vP46Cef9JQu9NtaJOEUBcjGYbOAEElq9CuAsIBiHXkDjSCmGonGF/gB4goU2d19yjDpjLjUkAR/BqAnaxTcwSoyn49V8CDElIeYM8H7/TgRroOe0uywRzim3dU5fmQ//sa/+z78tW95J04dPYTRKKJmKQVfPncRv/WJz+H3P/sULl65gTtL97C4vIJ7K6vY2NwKChYRzM/NYP/e3Thx5CDe/ZbX4nu/7Rvw6ledMnbz+j+XAcC+vbvx7e9+K/btmcff/kc/hYuXb9DgkLwWqt0INHr62Auu317ET/zSR/HQA8fwofe/c7DfIScBgAdPHcWHv/09+LNnL+D8pWuuR+WKkY9Qmz/8e7UpHj7L+CSIpjJA55jqLNq3RhDEVE/nrTDeiqeYIRLdvww+qQ4cgwinAaKzSCkyordEHATevj77Qet3ITQISqbvaixaPh6N8IZHTuO//I/+Kt7zta/H3Iw/D7WxuYVbi0v4vT/9Ev63f/X7+PzTL+Du8gpW1zfMQLbLu0Eyzc5McOb4Yfwn3/Mt+J73v2PwiHc3HtEIN7e28Nt/9AV879/9J1hbX6/jMiCk8mAIFysUAU4fO4Rf+Ad/G088/uC2c4fWZ6eXTfwX/+PP4Wd+7eNY29iMOg1RQNmrWYOBXFcqPQHiOSU7hZGE7D0SUO/nyTk48hi9hORQgL9/GWwOYcXqupa7SuycvFeXZbsJc2RSEjM0JAE5OGJp1CxUbnTEnpOq9+MhsI5lH+Ddu2bxgfe8Ff/07/x1vOW1D2My7k6grq6t49kXL+MXfvMP8KM//vP4F7/yuzh38QqWV9a6J9BQHMFMc9oHo7Ub9+bWFm7eXsLvfvqLWFlbxxOPP4g9837sO0/YGaFHoxEeOX0cm1ub3SaZOQ8hSAA1RULiSXVeCpbureL5l6/im77uDdi9a645z8m/ed4zrvz8qz/4LG4tLpsOGEwLj7fEHWAR7oO92eeV5jBSgTfJECIlCCDMJ6TSgNkkPyUH4cUIvCIZfJVJFH39OIHlqVVZ3bJsDLeBYUY2gYW53sTQ0D9utaty8nqzIYSoYApHLKAP6qmjB/G93/aN+Ps//O/jyMF9ALq5wVdeeAkf+b1P47/+iV/EL/32p3D91iKFKphCu76IuD1qV+tayIavdADYKgV/+qXnMDs7wdvf+BjGo1ETpbP+AOCxsyfx2aeexwsvX4sRwRyfQ25d7zPU8M8tFNy6s4y9e3bhra99uDf5z6thmZdSCg4fWMDl67fxqSefqRYe01MIz3dSCFPNkJGXSoMNO+g6yWDpr9ldxAZzCrbwBB5qL8bnfcoQIoS/EsVRnNE9e5p1KpJWikrfeBGI1FSJFaS8SRVXqJwhKAumX7v+X/vQA/hbf+3b8B9/9/sNpV++dgu/8rt/gh//hd/Az/76x3Hp+q3EDynUcj6JitTbKme9L2mkCgq+8Mx5vPHRB/HomROmpyGnUAPdNTeD3bvm8PHPfBkrK2vQKG1zMhFyClqWzqNTBCtr67i3soY3v+YhHD+8f9t+W1GrlIIHjh/G//HRT2B1dc3pk65rQk56IzbC6xXdjmpHrnMbyr4MsT+OGrwiFfkyPrRqKLw/GcazZ574MdeXe6kwKbZBNpYwyJyTspB6mweRBiN0EB0kC8cPAZlDVdqj8Qhve/2j+JH/4Dvxgfe8FXt378LG5ib+4HNfwT/+uV/Hz/767+NLz13A5qZuiFlCGs9MBcCIkSPPw+y5c/1eeVtb38DVW3fw/nd8DfbM72ou6ea5xWg0wt7du/Dsi5fwlRdeMn1pNOhFiGTk2bZuLS7jxJH9ePNrHsIM7WSHyD4QtUQEC7vn8fmnX8BTz79kwBdiAUf9CgQRkf2TT0KDnTibCMtA/YVnJMQNuAjZn84j2LeYzn3KMJ4788SPcZixNWFowqMUnFQ3Ln4swxzIBhru0RVRCw8Gh8LAGFmc5SN+3x0oDuZ4PMa73vQa/L2/+SG884lXY37XHNbWN/Dj//tv4B/99K/ij77w51hc7p4BiMck9DPvk+jg+X3jMa83G4YQPQB3l1fwyOkTeP0jZzB0ZYPcM78LtxaX8AefewrrG5vdWFg/bkThbA/xyyt2axsbEABve90jOHpwXz9SN/jgaDESwWQyxq987NM2HgE0tNBSOG0v4CgQeXV9mS63kUEIBHryAnGCrPXIwGHzWhqnHWQYuYeQIWpHpf4oXSN7UxocnS2lqgauxiHKCssQwlgEiELG5AqSVEvZdF5FBO/92tfjn/7of4i3vu5hzEzGOHfxCv76f/MT+B/+5a/i2QuX62QZxm9mIEwCTcleVmwUOTfWsoRKVV83F5fw23/8JDY2Nl1PZHit/H1mMsYTjz+I17zqFIoNRN+QQ5rGMoiOV1f2J196Fl+sm3YAkFe7hvjQ8jc+9iBe//Dp2Fd1SN8DIH0ofYoC5iQ8lCzSdjIYb9Q3G5ECRTU8yXRzJLoPGbrdKeqjgDbkROz1KzaprQwURnBzktpex5Jva1gtyowOkHlfbeOfKrwvgypqdD92zc3gO979Vvzc3/9hPHjyKO6trOEjH/s0PvQj/xi/+rFPY/neGsmWFElXVE5kqUKVjkYiRUZAI1FEsLm5hecuXMFzFy83c3aWiw3zsbMn8dqHTlekSvw0ZXAdaYqlBrC0vILf/8xTuHnnblhezZty/Ju/H9q3B9/wltdAB9PtncBCUdB4SuNZ1eSpcd/gt5PB9evgU8wAsy6inkr45/5kmACIa7jEiwrjWxGFwlREb8tRMwFKR3wZTMOgp02dQxMi2hvVuF3XbynAvj3z+K73fh3+qx/8IObnZnHlxm38/G/8If6X/+u3cfHqDeN9POqOJkzG3eOak/EY4/GoLsN2uXu33NgtgWo/o9Goe/HtwFXQPSnH8uvjoVtbW9jcKhiPRrh8/TYeO3sy1At0Urp2YGEPHjlzArvn57B0T8866QA0+BHSjemumFF96ovP4Pqtuzi8f6Fp+EPzChHB3vldePOrH8LMZIL1jQ0aLR8HUSQ2oIJH99bR9/BiJq2/vQyhndlFcWMPqRrJYt1XMJOyowyTYny62ZX6r62oaDoEn0DGJyFooAw0+4jo3qoi6e6yKyWTnZ1MsGtuBrvmZrF71yzm52axZ34O73zi1fjBD34zjh3ch43NLZx76Squ3LyNb3r7GzA7M8FkPMbszAQzkzFmZ2YwOzPB7GSM2dlJfVPeDEYjsTdkTMYjTCZjzTgxmYx7b9Hja6tOnu33VsH65ga2tgo2N7ewvrGJPfNzOHPiSGiXI0SeXAPAQ6eO4uC+vVhaXonoVyNj0+BCPVfgsy9ewsUrN/DY2ZO2Q5+voZO94/HIHmd97uIVQ0YDsVb/wSR4nlj/oWHubHlnGQBa+HCD4Y5C8HR6zKz2v70Mky73klCpJGq9yAdaK2YlBFmkn03UupPxCAt75nFg7x7s2zuP/Xt3Y2FP97lvzzz27ZnH3t27sGd+zl73ODc7g12z7hgPnjyKIwcW0G1uCV7zqlN4/MPfgcl4hJnJGOPxuHmmJ//mlZ+h3duh7zu1B/pG3/qdaZ062r3QLM5X4AgYUBgIA6RXrbu+voEnnzmPb3jzazAj48DXTvoQERw5sICHTx/HcxevOGhrBlnISFPKqRhnLKUjDMb2fciAQk5F9VwGW96h/rq2eYVrJxnCu125P95BbPHrIlGgK4CMBAu7d+HowX04dmgfjh06gOOH9uHoof04dnAfjhxYwMKe+e6dprMzmJvp3ms6OzOpr3Lsvs/MjDEzHlsas90xivFohAMLezB0DR20Yzr3m1e3aA0ZfMv4duJHRHDk4D7bQ2nyjLih6WkDaEgU5ASfe/p5bGxuYnam9yrfkCJlOUUEBxb24Mzxw1o5ZiqBExobA0vSQwDNjsmYZWwvg4T9IOWZ+xX2t65cv+f5xjYymIaMUK0UcjGdfUvX7cxkjGOH9uPsySM4c/wwzhw/3IXWE0dw/PB+7J3fFXL1yXhk38fjLjffbhmwtYmVr53u57o7bYy9EuTfbud5J4dp8Z7bHNi7G7tmZ2LIFgdTJwRHYwBsX/4cQcFTz18M850hPlrLrwcW9uDsySOYjEfY2ip2HCd1FxjrltSLPwNjgsL3j1KavJMMMWPRJf8IC6kTZoj4gftVrirARFOODqkdoXfNzuDgwh686oGjeNWp43jo1FGcPXkED548ipNHDmB2ZrJjemDKafweyltNrFSWDa6F6kOhP/++n4gx9LvVT67XcpydUjFuNzc7g8lkHEMz3JACbUF6ETN8wGvRs+cvY70eWmxFhBa46L3JeITv//b34G2vfwTnLl7F8y9dxbMXLuH8pWu4dWepeyv5+gbW1jewsraONe2ndq5THmXGncF5vR8ZisntfuTpkf8IizrUj0WpMC+gtL/Wn7z3a1+PwwcWcPrYITxw7BBOHz+M08cP48yJwzi0b29zgIcMaicDZlpDAzB0DQ3ekLFu53D3K8PQvfuJYENXlqNlmDOTMcZSJ/T1nJUvcCQ+C1kD2Dbc2lbW1nDt1iIOH1gIfOwEQnodObgP7z74Onzjm11nW6Xg9t1lXLxyAy9euo4XL1/H8xev4MKV67h5ZwmLy/ewuLSCxaV7uL20jJXV9ZiGsCnehwy9NKtQWp9DS/3p8QT0ehvNl2DpE+VWmPzLv/dD3RsmtjFgWPv2IO5kfFw+ZEhDqy9D9bcb0KE5wU5OkXloyTfE63ZX5qulKy7b2NzqTr3aDDClSiHWx5vOSuT38o3bvec1WjLsFN31Govg0L69OLRvL97wyBmru7VVcGtxCZeu38Kla7fw8rWb3buqbtzGtZuLuHbrDq7dWsSVG3dwa3HJeb0PGcJNjTYmg6dDfTpULgQuWk4OMhlyhmzA2Ui3SxWyoltovNPKzv2kTPy7xfeQwfHvITocaTLPuT7T2e7aLr1kvtbWN7rddYsC6AGqcOznJVjli8cBwG0zvj4/2+k51891sq7HY8HhAws4tH+vHVsppWB1bR3Xb9/F9VuLuH57EVdvLnbOcuk6Xrx8DRcud1Hm9t17KOk9UaYCRf0QZDr5exHT6qR5Rj6EahGo+02T6riTOZT7Dxla/p7bDA3CTpEgXztFnJ2Q/H6ixJCxb5d3D0XS3H/upyX30soq1jf0xWce6v1JM4I10wenVH2ad5b8LFfms+Xo243vTo6Uo7RINy964NghnDp60O5tbG7hztIy7ty91z2huHQPL1+7iaeefwlPnbuIr7zwEs6/fA0ra+uqxdq2ZjthbtAV6n7FUHbmtl9Ijx59zCGyIQylLa9kPrFT6tNCmFZakem26AwNTL7WNzaxurqOLRSs1ZcQbxVgeWWVHs6J1+bmFpZXVu0FZXyNRLB71xzinpdgftcsxqPuZQRzsxOMR6NtUVd5L6VLOe6trvOow/JnLrMg4cuc/gwwrK6ge0IwZwCtyf0QKA6loUPtW/1wO5FuM/Tw/oWwi765tYWVtXWsrq5jZW0dtxeX8PT5S3jymRfwmS8/h89+5XncvH3X9VGq3CSrRQX2HNJHbVGZqf/UexNmcMgpwlDvEAVy9FCF6Juvu2MNW9jcLPZ9a6vQvYLNzU0srazi7vIKFpdXcHf5Hu4ur2Dp3hqWV1Zwt74BY3llFYtLK1heXcPK6hpW19a7z/UN3Ftdw8raOlZWut8ra+sum2UXldeMIr3ftLTBk7lUv0mP2s7vmsVkNMbs7BhzM91G4/zcbPcsxPwc5ma6TcfFpXv2x05aaI8ez5w4138KgkHkB4XuN7L+Rept157LWvUm4zH2zncvcgCAB44dwuseOYPveu/bAHSAdv7SVXzmy+fwmafO4bNPncOFyzewvLJqY94d8c/gwU6Zogrtm0xaqZFeGUXyvdW1dayub/jn6jpW17ult7X1DaxtbGJtfR13l1dwa3EZt+8u487dZQuPd5bv4e6SGz1/bm2RAMq45s4BHXv6jsbYMW88c4g1JwbiI4hu4XD06crtfUC1mr331vLY6E0FWr/g3spaJ8Ny7MYndeg7F8d/Bh8ba9YNqQwsn+DQ/r1h7IZSvu0i8P2mta1rp1Rzp371+8xkjEdOn8DDDxzHd3/zOwAAl67dwpPPvIAvPHMeXzp3ERcuX8eNO3dx4/Zd3LyzhI3NzToOPMaw77bJzCkTMwDA0Hfp3gru3lvB0vIqFu+tVKRexfK9FdxZ6nK/29XIby8u1+W2zqiXlleweG8Fm5tbPmBsc8aYl9mkyX5zxAG6P3hIdbINBroRxYUJ50STjVnrJf+wolq31MHqoXX4Y45RyDDuLd4tndWIFKMTy6CH7F1ZtW9dfyE8OFLTEga2oblgjvhL91bx9PmXsbK6hoXd81jYM4+F3buwZ/cuzG2zHzVEL/c31G4oTcsynDhyACeOHMD73/EENje3cPXWHTz74mU88+LLePr5l3H+Ujdpv3DlBq7fWrTXiZpy1OhKweSzT53D9epJN+/cxc3FJdxedBS/W52gS1/umUOsrK13qwFZmIH0w+zNxq4OaEn12AgEvmFDuZ6kNi1lRi0C8SQtaqiMWB6QGoD9DTuzs2TN4s3cv1iQyhchUFz37vjKewymAlCfLRlQ+uCgOk3R7uihfT3D3W7Sz2WXrt/C//x/fhRfevYCFupZM3WKfXt248C+PTi4sAeH9u/FwYU9OLCwBwf3dZ+75+fCqeGhifzQ2LXmotvJMB6PcOLwARw/tB/vetOrsbm5hSs3buPFuor1wstX8ecvXsKXn7uIZy9c7pZ+TX+CyQ//d//C/tLNvfqp+TYPtCNkh0T6+J7eMsbyoLKP5IHrlZkaYsoAOOrGao6CLW2qEYUUq58aSeYF0ab8KIsbrw0OSq0X4d6QjOmaw0lMA82xHFQiiwMymLMR6706wMzMGPvTXzxqrSYNIfTS8gqev3gVTz79gvdUnXMyHmHXXHcKeb6eRub/9y/sxqmjB3HqyEGcOHIAJ+3zQO8PUjJvOaLcT5rXkmE8HlkE+bo3PIq19Q3cvHMXV27cweUbt/HM+ZdtLvLshcuYPPn0+QoqES+FJhqsbQ/UA2icr6YhDhhwrd+etLJzUH1Btt50T9Rja5nE+4AjLzt+M5WRHhk6t+nshkFRRJfEm2rX+ZZ+h7FtUwaNSBkwvO6pIwftDeHefXsPpHUtr3ZAaWouzuL6xiY2Nldwd2nF+SHHH4lgRg9wTsbd90l3LP/owX148NRRnD1+GKdPHMHZekLiwZNH7WhQyzH+IjJo+cxkjOOHD+DYof14A87gG978GnzP+9+BpXuruHTtFiaWtRRf1iuaUpQSUmyzaRo3ixfxjQAAIABJREFU71+Nygv9XU3dZy9MQvrGT8yHteLmKwp3+E5lsW8dWDVSlbm7achPRmVSGkk3ZJ/z9j02/LkAVh3pUtMj1UXvD8WYWFkGvYEAGGYcteDxV53CZNx/tqO1qtjSv6bJlhGwzhKPqGOKKsNWKd0S6upaL+159sJl/NEXnrG6CgqTyRhnTxzBI6eP49EzJ/Dw6eN49MxxPHjyKHbNzWCmOpR+smxDMgztr8zNTDA3sxeH9y/gzPHDvA/hw6UpgaOYvu5ePCcWGuyA0LTioYxIiio0mPkYeXA2TT9UYSW+/a0fDkwYqstpkW9u6byaJ54aJ01hltZ4WtRLZdBfXRKbF7B+SvdG9KpPm2/xokFI/2pqWus3ZTD+NToUVyPx/+jZE/aOqE6N2+8xuRq7OjcXl2xjzzfElUYfkX2cq/6IH6kIIDRG2NLHhQXAFja3NvH0Cy/hmfMvB3DTP3559sSR7v962vqBY4ewsHsX9u7unqNZ2L3L5i7ZCXu8JmeZqFYLGaYasw1HUlJPeRzdG5Mlcy6ztr4K2dFyHX43kRmxstukh16EsJSHw1pehrNopmmImGN2/HF/Ka3hUFHUiI35Ss9cpt9ceTbStX6cwPVkCBFWn39nLy8Fr37wFMbj+Cqa7XLzXH7j9l3cvrvkPChYBVBh4ycZlB8FsBBd718GQLC+sYnnLlzBuQuXHagAzM7O4NSRg3jgeHc49czxwzh19CCOHNiHowcXcGj/Ag7v34uD+/ZgZuILq61oUh8hFe8X1WvTpI/MJCC8DyAqAlBZVjIQF0oyUhWvFCavEIQcnD8ZsVqeoQZV+cvOwOgfUyyE9NBQO0dEUq5oH50lxzQP6PUddAJSNB3ayc+79+ZiQn1TlFaNz++aw+MPntw2rWhdOi4ra+u4dvMOVtc2+ilzYMdcnXQKFNPBMA7tJEPIOtCvs7a+gedfvornX75qdMajMQ7u24Pjhw/4w2oH9+P4kf04deQQTh/vjpEcP3QAc7MTk3li3kwdSOjUPwoLY4ZIvGsYNAOXlB5FZfqKSuxLHdTuFQRn6oFrdlCl0vqbTyxrcEgtQ7U976WHotUwLZ6K85nCSCMKKaBWtA7zGO3H+Q7LvT0ZAjsIY1kN6aEHjuHYwf1RL9I/umGt0qT17vIKrty8XfvhQdcP5c15YmDK0QJZl1GlTRkskS1qh93SewAp00X3ZWNzE9dudidrVW+j0Qi75+ewf+9uHFjYg/17d+PIgQWcPXkEj545gUdPH69HN2wuQGGPeLI0kW+kCvZ8h6ZalvoV30vQ6lVAdbyewRUKoyyvAi2ykXaV2oZbP4lWnuOE+QKK/ZGOkMax7HWAt412zAN8sAvUAIs7otJj5wwRYhsZQiqm95yH1z18Gvv2ztvYMK/6PadSnFLdubuMl6/dAlmJzeNEFBTY6RNiAvwn/XrgYExvI4MEA9CU3pSCuACCIGv9AaBgq2xhcanbU7tw5UaVoXs4TpeM4zPV2RmQjc64rUZCp1YDotZ0B2nFhgzaBpel0ElWcoYeyjIyVT7CODDZzL6RJDQ2unEeI6Ts3nPMmuYY+qV7WqQ71tQHavRsmga16e3FJBkUrNwx1WDqmIjgTa9+VXjeRctb3/U3G+O124v1XJXza9mgHaWmsbRI4M7cS69NgJ1lcAQA+I9RMr2wqNGjp/XiONgq9VaXFq6sreNmWcKIw154k0bgGjUXFEsVAvRph6XUkJiE5xDISjOBnI4oP6VUbWkOqf3U8nqv1N/FQlm9Vw0qDgClAyA0Np7Y+Ao8/LszGB/VEGIGlp2mgP4IQmBD38xnLBYVraYIhbQ/IEP3J6cQh8LsouDE4f143cOneyd0+eLUKciH7tU6V2/ewYXL16uhueydVorx7gAAu6O+oiXGG/3NkZ1kIHRKWy26vFtl6NVzeyk6DvchQ91VVxOnQWclATaw+pC4MmNOot8buaLPEYQEd8P1e0KoLoGegTD3UcO8fap35TlLQq+Od17ZoI+MdMYLyUQ278unhFSEdIaeJqeSc7nMF2s7IT2UbWSIcyR40K2g8vpHzuDsiSPB6PkzO0JO91bX1vDn5y9heWUt8FwbOI6Tgau+LA1Vsya9iYKnYEcZHAi7fhyvGHw8TbdxKWruyrfclwyjbgGDI4GPmr2WEoCuiXsa43Qtn/bKwTGYuKK2GnKeKJozEt8qtAeGiLqwNmmtWX8T6quCmNXCfLJsJX3PUQIl0kcXS7r77DgUzYo6COuF+lGnKj6UQzJwxDBIq2M/Ho3w+kfO4IFjB3tzB54zdF1K7zcA3L23iiefOe86rvKajYS3DSONmY5H3jOpsguB6oAMzIuNS0nlqjLWN4GqgeJ9yjBSm+zstASCYvHHOQlKC06hCqgEegPcFzbMNANbEo3EtFWIL1eQKrK1ps65KAGYGwlo0w1sfL3OrUOPqr5ZFmTIjlkVapNpLSM8UHWYM9HNIRmCxsRrlFJw7NB+vPGxs9i9a8544bEbWnplvheX7+GzT51ToaCbs6IvJO4hI+tL+wqwHe8FC+7LwEBFOG1dsBshfDd0DWB/PzKMNH2IhsaRwRGkQ6fIhpNyoQhM/R55LTNoTQWInVJZL73Sf4oZd3/+k5XkCMhRSRIPbiDMs94X+BvJGaEdnXQ+FBYjWBbhMSKAqOXRzolGSwYCKuekq/PomeN486tfZfc4Slj9bdKnrVJw7sIVPP/yVWjEEusXidHsFGbZSYZk0UpvQAZWgdC/+pXLSt/oEhjfnwwj3fSye+YAyl004LhrG3M65UztpKdwZYQHgCa+xYRoISz7ixpDXU9H6Rl7aJ+912RTfTkDOvkrlrbQmJXSTcqonoV+7iOMuVhbcyiWQ+tlmxr6TTJYpAECIMzNTPDE4w/ikdPHuxoS9x2Gdqf52trcwv/zx1+sf0qg81Y7cSDxyEaMcmzcpV0HBXa0fkAGjRLBFgqXw8a+k5H74zZSJ9L3J8Oo71geHYrob2ebJzMhVqTQUNKIsjN2dkSQKkQ3h/JqcGZnGkprOxFaopN68KJQtAiwS3k8Iz9ttNhGm8lEBwy1L6nRlK0z0dNVJCsLwOK89TKkHDW3kcEnri5DQcGBfXvwxOOvsjebuyo8wuT9hlxvZX0dv/XJz9NUJxp3S5zed5FoBZwCivPQkkGjhPPmNhjmPgE8HRQ1awDwimRovA9ald8NqJhnwTw2CFzHXcObejCnWb77KrVuRHNLXSoRS8tq9GDlQLIh8P/Urw52I5e39EXbG7k+X4Y2lfcQDXj+o11pWsS5USGabCKFNuGgEV5hhhxqQAaPqDwsgl2zMzha/9jk0NWaO7CTfOXcS/jzF18OVuOGmHRkTgYDJaXpsrFTe9mQDA2O3cisM71D9etYFbWzBEY7yWB/MIUn1DpGPJnjXNcGw8KPh0pbPXIOXEadsErrnt9XRDD5ya5cERLpsQ6rI/TSAmOthL6lkHzGlxhdtmveuOtM1vkUU35yRFdjdCKw/ORo2k/LMEiGgMYqcyXFfzUor8pxCtU8RiGCj/zen0Q/DIMARCOOiY+rUdwUeqkI7VU0ZGhdeQUxsGagLL3br0SGkZWXdAISDrxxvZfpO1KHkEsiY6B+MAAzbPZ0CQ5QkhCc92uY8s0Zdkrqk1Mc66c4X3n+QXOVbqC8vKA6EvHgrGj/VYNFzSTqI8ggAgjJEAx5exks1aqGvryyiguXrweDbx3VyJc6yp2le/joJ58kXfAYlF676Nhtc+63kmBNWYZ+OzpuYv+ShTVwKGQa9ynDKDqdo5c1LLRuS/870LJxpb7UUFoCcghlCNbONVJomiWRv4jilIsTHVeEuG2bWG5YXa3YOGaHHj2JYp0fOw+O6dkRAAnL0nVWZOlF1bOlQsXlM3p9GfhytQhuLS7js1953l883EgZWt9VJ3/4uadw8coNQ3WXAT5WKkO+xO+GYjLY3j5SQwaOOmHH2r51+jENWpVC9eQVy2DPf/v5cw11aoidUYqktImEN2nqvSAYTeRcWFQDSKMr8HydL4l1TAP0PcwrOBJWxzOHIhkrzHtwqgJ6qKdIo/dMhg7hnFXqm+ZMHRkfUO1HFxCcx1q3+KKFB7m2DNpvTs83NjfxR194Bn/wuafQsj1OmfLkenF5BT/9qx/r/mqr+jrLZ18jwvPVO8JiHaso+V5fBgYDyVEnoHzUFTuT9fkKZBgZmqoxJvTUfwutAESiXtUnwVSFo0PKAdWDC71tTm1fJ6i8fEaEGtGifrYmxMEoCGaF6CbZObQ627QCp/WtTuQvKj/zpewK0VKemE7sqykDUopRZXjq3EX81Ec+hqfPv2TzCb56x2oALC7dwz/7xd/CJ598uvtbEAQ6wbEkF3AGEE/SBq4TYDGWt2Swytl/xP4Z6EPi71cgw3ju7BM/1t2n80AV+UQiU+YenNL0+CRm4IOsyBqX2pQiRQXhk6USaRppUlKOEgES4pKpt1UZ6F79HlbG7N1KXl+q4/vEnzYFqV4XfMT4cLlMUTZgvCKl49T5Ox+xaMhg6gjZOHT179zFy7h+6y5OHD6AE4cPhEcqQeOxtVXw4uXr+Jlf+zh+6iO/i6s3F+l+jEw2NpR26DKzL4EXlMaL29xRLOjtKEOI9hGnK510ZF0i5r9SGcazZ77mx/pr1dy3H+y29WEVrpTGA/GBnY6eEfBjEkrRjJEQ0pboLO/mdiQQnEzPadjgA8oQErvlwVMdgwSiVT+qLIEXNQIy1vhXacjZrJ4DgsoaJsCge8RRTwaI69SONzt4bdVI8eVzF7C4dA+j0cj+Xp+I4O69FTx74TI++qnP43/95d/BL370E7h6azH0SaLqiBILOn7phLMIgVwETVUJO8p2MnTqKaCz5M6bDjnpN/wRxb+ADLLwrg97QsBGWb0cTKzhgUrYdwzj3TAlKOyd3ie5I8AGC/+Zy7O9Oy1xmNX6itq9VAvu1MWNLm8Y2Z+BSnriyNHRQd0EUjrMIzOK/n0g9k31WGCWwV72RlWHVpD2zM/h8bMncfLoQezdvQsjEaysruPyjdt49sIlXLlxp9emf20jA3xsG2xvQ/H+ZeiXF4sSodP/DzLI3nd+uKiXSB1U1DdGlAB12hrJ4xInNPi8fNsa5DD5MsPYRjI2Hq5nhtTx7nU9tjUjQsdE/MlDqjQkaa034jB0i/WobYg4mR929pL6ENdLkkEdQuc7OSVxMoXK+3W0Jt/PV8xWdrK+lNtoi+2caEpkGFlupWlHcYOgPUc73h2ioKKh/rQJTFemO5F9VIbdDzwJyFWJtADdiweKl1taBfhEzstMHvZeyzOJX7oHDcPMl0j8ZJGL0mT5WVYSoNemhE/7rsZRx8L7a8hQYH7CV4g6SrPq24/hlNAmIC031fo5khePlP25qZ9gsPZ+M2DAtMkw8omvHpKDDXLRmrpJVo2Ppedfzc0ejgAmfcmVTPpS0spwANtOk72d10Y603O0nObAfMD5FpWpVLm9n6T6rp7ZqCSbTyPCY2RdOWgoRZ9DSKg7JIMBSolyMbfS6y8QNB5baYeBQ3b02rxPsy9fhPmke2DqZBjxLrReBsRkKLb2zl6llWu4S1YDMy77qZBejUDblu6en4Hi5Vak3JEmm9oWzpMhSCmk26wMktl4pwHIiK4R0groJvGpfYRJWzXkjAHB2EkOu6cyWJ0hGTTi1YhjAKfNIkgVe0CJ+2s4oMneL7dzVsKVUkMCwG54lS9ptJkeGUZsEJwkOappaNF2FHREU4xangcZtggXmcroUBt4OJS+MwbQJXr9oARdzXHspTZkfeG4MDHnswodPKGoRo4Z2vltllezMgMP/nSJ4Gd6lQ5HnWEZQscqe/Rm78VSXpalYZyBZAk+b+lLzzG5OUeHsIAe09Te9dWXYeRnxfkWD5yGiwpQtLKRiTVkIwGDVPETMA/vpV0kt+bO2UEs3DZ5qM5BYbYAPqGvCgtTBNa19dWgX2K7JArUyTsHJxoc4fS3tHZ+yaMaMiRm0DcMbePR0wWjZrnPHg2B60iavbeb+zh7BNeigcjyVZZhZA+sFH3YBoij7J5qUSI7bzBOQuA8H9D7QgNdKqImA++jKDlWsX+cRc35M09UZkvDAHTDplRjj7vBjGaxr4D0pCc+qOe1SVEqbuCTz4glkChVfyZbX4augA2E+eFrCJGBlkeHVJNoOLj7KYPW5e3FPvI5OeHUaIpkGHnK45MSe7WistUwlmFeXSjJqFeYeYpKkuvAkbkVEUH3+Xcjj7TDd+A0TPpNaorCq1D+qXGTdqR77Hjfvoxod8mQpXv3VJXR9J9407+/YWnZgAz9yUk9n9TjcOjqt2+BMHcZVvu4ZYoCnnXwuDjie/n0yDDqA3E9xcnHFhCF5By+F/okO2U/n4uM0m8yRvfkUgMJG6pGssw59VfpSeXRAbh4XU4srZl7oL7KxCrxKww5eBAa5eClSO+beCpWmjAnvgy9tpEhCE6A1Vt14+jDbVmJQY4h2soPDRIvRgyUc8rUzJSmSIZRH+z0aAZ15GEkZkvFQ2F4loIdJYeuxHDmW5m3rEpXn8jTSpH4FpcqVLcCRsqx5ckqAuX84Z2p6njGAB/LVnqUd3LkEpATikVXIceMO9qdcxdqVitFvgzBhmXwts5PSaPfpSY0jmGyxGQUcDxy+x9q6WTyY+muBj8bSYsCzqzrhXL4/sR6emQYmYOQcbgxeJ+F7nX0S2SG0qSAZBziszNoWLRQSwZKUOu5XnRKdx4xJdxXmK20+6dMnV+jwxGnR7w4+oQFCHJKks9JSjLqjo+SdToIpwj6ccJVV4F4HqcGzYygzcsxW6uKeGkvPa5tnKw7gW7YlimUYWQHs2gC2f0U9+aS7EGSddSfnkrRKc2wkqRtiyPngMfb7jN5dukZJykqfzJaqYeR43j+LlE7pCyWU11TyztkUf4k6YT4VDpCO8wZxer9cO4/TnDaMqSXSLcdKJup81hCUTYV7TLS7J89S22SVca6hh4QpKM2UyLDyCaAhGoWtdWrq12bQwf6bipuk25kVp3bNKJFXCHKB9zo1CyovvZTFRnStJQLFnpE1pd2OsH07SIWqUhxhctKFD7jYWG+VGm1rPmcQP5kUGmBYJaBnN9eJbrttSOEwgBAuwkAwydw+238+1A/UlNaspYpk2Hkh+L8hqgRBEsmYyCn6qVHhraApjO9E7mZDzVgRszIpwkTbrBuOWRzNeMnnpnnpT6xRhLaSFVeId2oE0qgDQpWZPQilrPynxf2JUcKa9SnpU4ZNLIM9V7J/ISmTMRXu3rPtKkzcmBlfhpPrTUW1Y1YbyndWGg4/BTJMPLB6AtnL/yundFH/eFOwKsoXWrug2pr6dxLBhKOFDm8VAYcgVUa1l5sZ4oxhvt89jqngGPyAQYYPhBRJ+Gqssq2ilM3pHmDReS4gBDbJhn0HqWhyp8al+MJuWvpq98E1ZdahzRDAv+2QdpUAFwGSXQk6WMKZRjp5JiXVwv8vKt2K/U/fdS01MGueKhD2+vb1u7tVjXk4J1uhsW15cZS21jgaOSEdLPjtyrY5kDk9IUjmTmR9+yrSTFSeSxhmYLXeuWKhj6YfVm7moYgDQOjgW3JoHpJ9UX7MwNk+FWLK15U25q5FWpnLQaiQSvnb1atvAY1TZ8Mo0Lhmu+pA9dxJaE0lVD6tOWkS4QmLLsMG664ExYVg+rzfEJpVdpstqGNKcLr2nKfVa/OXVxn1jfDjdCufTEx3cs5pbPoxQ5Z6VOaVFjvjBxAGqZ+2aAMpIP4PfEY6jAd5bPEtnQ7PNuMHZ43UBwhWqEmp8VgutMjg0WIGF7IK9A9UdYZCB/m00+NHYnxEn92/JPVUUrTY01XXRKtojQkF6KBVKLg4yRKHqwSx8eBpy4jFopwDf3QIMRxrjOErCceRIoUEgioCsQdcxsZ+srrX1E1HImpr9C5ddQzSl15LLbMLNZHWrk2WmysDgzTKcNI/+Qup0w6kewMxjfqWnwra4yiKm+Qga2D6hjzbNQhIhWrFx80UufSB4eIweI0CURq18X7yqgf9eMRxin0v/NtUn4+PCbWJ0dJoZsS6Vk72UaGoCzXRY7oTJPz8HzFAauglG7yCqAxMXRUolMwPxseMMHITo8MI5vsMnBXBpSvYuV0GK3S7wZJHOXcfvu6oY6CcZtxZqOQpAmmp07AkYQjG9NmRxOqJ+keOUtuG8INaZ1lCJEqy0eOkHQReSR+cvssQy+0UIqoPGT1bYfG2yI1Oy+SQQ01vI/Op0yGkWJZv/9quGZjxFhGf/7FyMWD3HuegNux0NnbqNRWsTrjCs8dIJXB67mjMZ/Jbf11GgiC6rJrP1eMUSkpe7i/ThqnqW29fS8dHpLBFNO/WnPdXv/tW7X9tgR27OM+mnsfUyTDyHKtXkbgnuqhWqB/UcgdO4U3wF5UYHMPEQtzQ0YeURscluBHLPiVNAiRgXcTzJmFf+lddRzqmxkr4C2K+qFPfUGzgEQXJkNRGYJeOCrRfaNSXJdofbZl4J+hot7OixP5fhaiAPpXfuIDPdSwRSxfZaDcbqd7UyTDyGy6xNwtrrnX/9TwhDNkQi/O7UTHPjtCsf6sNqFlYcfQlIjyQDu3xDKaE6V0g/rxA2POo5FgpUt9eo11ojYYDLfYBqbzofG2epVFLD7Z2v3T26dQApbfOgAMyWBOJ6y3TgZzzPqdj9X4+LWBkN+20t9ENCEgZAeFv4S5l/atPbolCwPHlMgwKsoYI3fp0LeYkVUjpLxfghYQDCdczC8bgCElQruwEgX+SuWFfppOVdHqSPpViAePKODfgEU+fe5bakTU5xFC+0pc9zNURYVDS0CvtMMQutd1LBu9yqIbzaAMKndWeon9BTMIE1KKioUYsy7UuTMltgPlk7CWh88c3HvMupgmGUZ+uyJxPezn3ldXmUKaZDxUBdCsXbysJwl5Ru+YRagXVKYe2peJwkQ8KdtwVCYn+koT7Y6MMfNrRdnT4Ue9A9s+QMZXdv4knySerYwHtSGDB2d3mn5dQmNKN4kSySD1e0VPbpuNtuHh0rvHqzmpPYHCNMlgDwj5J0UGSlWK9B6D91QmpFDJc5MCwmSyxHuxjMOnCuk04+50oseRzOYR3taOzRty1MhgPBYbmJzvhoUndQApoW04tsL8soxGW0zXxlKhz21kMI9VGYTq9v3X9BjvV4sUP30A8Pur3LRMa73VNuILfKuPLv5cQyyfFhlGvPrJ3sfnZYxudtzgbKkD4QpKx+nzA0XZd1TwwDS/GS/xF5mk7/l+YtvzTD3OrTx2zm/pSuWHWGPBPatUvjj9IX55/AokGjojo0YmH/tBGQIjVq30avicqCGDkabTvazf1C/z3Z8gS39MVTai1V4B+urLMLIxyGHdEnTUQXdDgTLFzpRzn9IoS6L3lki9IUkJNxJNnZJGQtwytovfKxF19DxVNGydJHuIVbRnRYfgxtHABYFOyp2Os6X0uG+xl8RRbLUIUoZlYGUG3fWPOEt2cKptB90kPeSTwJEswnTROgLhiyA+pp7uiP0OIz0lMtgjpIbY8AeEzNtoMHSVKfiOcafeGG/oIb2wgSYShGsHCY0KVb3CivKcQkTSyV49d099atBUxw/KLvXV9d0cysqMx65zRhxhGXJqkMjXaG68ijk1Db7mWNRID1cOykBlgDuu/1Fyr6JL4FRUAaAkGUrQLe/1BJtlYGrEq3gpcjIM9g/0TYMM9gipnbMvjq0a/jWtKghtA7Phh9lrCfeLMaJIR+FTktIs0hUimw2PQhQz6CxQqKTwSeVhqY8iRH5bnK5tW58JvdzAC2zDwuErKqm4bv25AR0hqPK6n7r61ZIh9A2jSSHVVNOEHU7vlI7Ee3xwktmIz4oM6QI12+WTywJ7g+MUymCvoTE1K2IHhE+MS/qtdRJzIapYLTfEsJipEhsaI7ZNAJqYolyfBKayMHD0vSPbNzSxZdgqYxhEOsKiiOad+sA7tQbfJTp5SAPEfIrl78tQNSTOQRSD9F5S1NK6xI85KYFBCfe3RUIirpNnH/+Ox5gu8inUaZFhxMQ19+sMVKB5NvtrHo+wmx0koe9sq5xLsiezzWRbEnVEQkvVhgDIzmAhqdTB6fkq7Ub7SlmIOGTc4diKtlH0Vk9uIYiSUx4LfWeaNrJebH1W5lsyeF+esxu4qPxA1HUoZ3oMZE48qCQgZ+038xNcodIiHmMqGQFqGmTo/iwvR3Nul4zfUL0o02R42og0YdEfjUuRlzqwsJmUYZs7ahw0qdZjHbbbXNMeT8NKz4Yg8F3mzJykMnW60hdEeOhLqm8RINNpKUM7zn3D+m7JED5hovedJl09FhppGBPnf6O1Zrqe2DR5HWJsimQILyrrP93mZHSeoTN1oxzy/xIZY2NiSRh586AnZ9Bowmv25oyDSkhtmB/ro708GAT2H1BnD8c8ihoB/F4ICyURtUbkyH1c8T5y2yjD4HPLqPdS1OKoblPbUs+ahXrOEO/0lsRPUVswFbgd9PdvSuRtSmWoq0zFBTLmnctufGvn1ZBtkqROot89QfQ5hKU0HkGMSY6tnJ9ZyiJ2G7kPXaWy1aoS2+g/hfowRdO8g/0k1XVeSKYc9gt9N5kI6tgvRcm5XJZB1XZCegi+lWTwP+rooqsMAoqkBeDHWXn+pqPJRqlvLCygKEg8VyKw6Sq/OKDqy1fk9GEp51X0r7IKpk6GLkLwhM5GoO5MGxp6CtQL/SL2F4aCZOAyuLcWmCFH1CZn7IVMMcDtbepYm7RRJCkKFFcQs1qYT5atpO8MGLWwt8gAikzipS67OgjrhfpRpyo+lEMycEg1SDNAYSCKffC6u7DDa101ahfZjbvQbnA+0h/GTMdDghq6evVeAI/pkGGkNlk4nDCK2US2BEYYGYOQ2lFvgPvCxnSL2ZJoJKatQny5glSRfpCM6Tn8EIBZvW5DzGu68fU6tw49qtI0ejibAAAPLklEQVT+QfDDvIMrMNQ0LXcy5AzT0zy/OSRD0Jh4DU8DyNCC3qMJ9mWEj40LBd1dF15MCDSYlvIVYDveCxY8HTKMNH2IhsaRAfATl36aKXUdhCIw9XvktcygNRUXXg3fynrplf5TzLjz/KevJNrhpKgkiQd3KOZZ7wt8+ZUR2tFJKs/hUBvLIjxGBBC1PNo50WjJQEDlnOhmoTcXMC1mV0gdSXsByLq+xPpFYjQ7hVl2kiFZtHU+PTJ0f1IrhTXfnVWi3oHmdYqvDvYuoNoJb7xZKlQAn+gQc6a/Tml9hGV/UWPQlx+UnrH3DtPxp8mm+nIGdJKnR1SMpPItJdSz0M99hDEXa2sOxXJovWxTQ79JBos0QAAERdigx8LlML0BCmJO2NsI/A/q0MqdDK3zR73HozmI5Xr6YMpkGPUdi3aJRX872zyZCbEihYZwvoi7ELUjglQhutoX3Vex1bsLtQtb9lIP6RWKFgF2KY9n5KfX3GuUFJOJHtjRvgSIRy369ApbuUaXrAxNMStwhvmcxHotGeLhNTYqOhIjzqeQXlVvvDmGql9ewYl/W8+qNMXpfZd0XolTQB3zKZNhxALYLYV4MxBJ+S0JXMddw5t6MKdZth1fnUaIceXTVyHicprWZweJSuT/qV9Fg0YuXz3b2xu5Pl+GNpX3EA14/qNdaVqk8hqPGeKVXy8S4is41IAMBgzEei9t0DKhe0Qvr7roWFv6HCavaohJRzofs4ip5ArJJj3WzGGmSIaRFuQDUCV0VEKua4Nh4cdDpa0eOQcuo05YpXXP79uJSL1HduWKkEiPdVgdoXcS01groW8pJJ/xJUaX7Zp3rTuTdT7FlJ8c0dUYnQgsPzma9tMyDJIhoLHK3G9RVcLEEzQaoEnvdk8IBgMrjomPq5F2gXupSAkp0rTIMLJyerO0phyKUXG9l+k7UodlMBIZA/WDAZhhs6dLcICShOC8X8OUP3zCTkl9copj/RTnK88/aK7SDZSXF8CfIixe1rGi/VcNFjWTqI8ggwi6Z4cdAUMqsI0MlmqJIObw/s1X1Yzh6JfJh0OUtu+Rql/s2G1z7reSYE3TIkPYqealVGtYaN2W/negZeNKfamhtATkEMoQrJ1rpNA0SyJ/EcUpFyc6rghhe69iuWF1tWLjmB169CSKdX7sPDimZ0cAJCxL11mRpRdVz5YKFZfP6PVl4MvV4o4nUKPIYNXRlp6sheqproVk0H9IhnyJ3w3FZLC9faQpkmHiUaNSFI8DOhcofL8hvEkj8WvrWQdeDSrWl/fd2ktwQcmJeFakfFIKZ80CD37Dj434RBqsNK8I88gWzeA0kY7/dOVIvS8gWYkey+9Bri2D9tvTFzlS2Ak2Nm2EQj9uiMR/CQ3pa8oWuIvWGCo9oBFFpkeGkaFpNcaMnvpvoRWAwBjx75NgqsLRIeWAapT6MJL1qEjI0SX8pRk67Be14RCqyJBy8xBXhegm2Tm0FlKoZ1MaAbRO5C90+v82dyYLEtsgEBX9//9MDlYVDyRPcov70tO2xCYo0GJPTrkkbgFPyUQ6nddVhzVKjDl+Vz8DX1LtaXFxh/yY17cL4M/S5kp/NZ/8mg6/CqQ4oqs9tQTU9PrvDcjbeLog2PTmc9KmWB2Dm2xvKHS5mtWnvrBkyr4MHAsR1V6TbLwKRjk5WhZ70CvH/MKlEJEpuBTbQYIrUhynWmN/0cE/O3xq9a9xmjGafTycXcnFJR6Ct9lrE8b8Uxlf9JvbO1Csxed0+M0I08pA8S53laOGFM9rFUlqDz37XkLebaxY5aAyqsoe193JvLfa0qcM1VYMbC3dHI2zeF4yjZ0Z9uL1MfdvDt3DewSb20nf0pXjoINqbbf7poNsCnvwhHKAVr1qRDaWaCVbHEa9gTPgXWis/1PozEVaJ3gF5PiaDj/WbtpRTgsRQKutb5cEJc4ZHEa7ll1Wja+cnenx+K3gW4sBk2ZQ9I/SwsyBICtWHbDbQS1BBwhLltyBqQzolB6xn61eGxwe5fSKmKTh+dm8iXyct3ke5AZ3HTj5rmdXJvyGZe43Rjk603vLtBScTfj4Ze0p0Ede5s8m/DUdfhpc+9UlO5tQTx24rswitK3BCwptNF24v3EghiIHn2j853HfZPZhxshG4f4D5ZNLTtCIPhqrbRQWw0IefxXdPpHM835DvQ0Kl//HduLt8nzr6R/NCfdIuNSrPtzslO6v3qtQr1+FiZBN9pr6NLe4BslXdPjFduZCTKWdaAOm493K+CVpzzCMUq9QtbKkDHPsXgakI59Y63kJVSKPhv+uiVxdsz5EDZdfkLdZRYftIBcn7JRT+mPwuKPd+8SlT7Zv/60susei+F10EDiMKGmlu2guOdoMxmo2TzA3J83EUIWrglVNSj9WAubnm+cU7kM6/Co96ZDc8iCnWmqTLJDOtjYtmUytVqFGwS6QD7Ixq8zE0JU9UaBv8GTr5785P8kaGGU3yuGDfUSjxvHRw/66AwiJHE3TCY9yGU0xb6ll6p5p3nQwoGTXi9LGwa8RtIwFiqv3vc21dveT5qlfSxHT9mt9ToffPJO+aW8QroERAgejSo2VD49sNTY+dHRaS7hcRtBqTTxn1dsJRykrs9DIROcFBMmEbacxoLNlxwBMRFeG9AXc5CRr82iTtu3Ix8se6ETQw/ekg9u86aCMtzOOAU7dOkil50/kdwlA635e92pZsNHoCAB8hldyxaXPd3T40SHaHN22V2pRPySdwHl+OtGqtmHm6DrRYXeodBhnMDbQBb0zKS2t5hT2og+8rx0XhnA1o9LgBbIaArP1q9vU13PgRwgpMCTecy0q2bLOuw6NsXTv0VxcXPJSl4tzNpLZYt7lyxGY7M7sIIkAgrdB+4gOvzorzlscOKWLDVDa2V0nsYtuULBp1b/XcoQfZRf0Vu08A8Tp9irDDg6k2VyrJvTbYG2KQFub14V+9n5DlaUgfwIcNOaEPxTAkxgi6qLDEGadjqE+lT1LMXSbPA8ascpGc2nzr+41zpXBdekls/zPOvy8BJnacFurj3JFqrPEDN7mnEDgOR/Q/cBA50bU4eC3pYhWikwUUM0/ZcI1b3St5ZWM3M7el2yJZp1XQ3rYiQf1qjUMJXWbnDwjNkAit/2s26nDc4EOQnn4eUPktW4R3UpN0Chwr1MGt0/1D3/Nc3J8XuFLOvjNfUazFELCGS7O8i5rKRUT9ZLCIyvFbLMKmW8ZceE+f1/qSB++WyzD4uyySxSuQtW38qaOep82aCVeS8fPxXLk8P92MOpLX/LabwVxWfaiwzk52c+jHBK+fc7+NxAmy7bax54jC1TVwXEpxK/r39HhdwLxPsW5NzrOg2ZATv69eJ+/z3quC4rfcMaK5NyJhI6qTDYlB79NL7aMBcBZbVlYultFoF5l4kZ4sq5lIqDRTF5Ceq+gyLfnhHnIxc3INx2a4gCsY9WN2Yd9acSmxxttyYNB4mLEy3WWTNdK6UM6/E6wCwAW0WgHBvllpUKeJ9EANsGO33e5JbyrKp8VqkjLjBZnMtizAgbjeHlyq4CaP5itFHgWgMeyRQ91JzNXLARhOLsGArOCYdtq6XmKsrmzFuSuTHnXofqWPDlG/ylNMI5tskQyApzK3N793fapXeUyQ52NxKJACVt2QQ1/Tqy/o4Pf/k3nKGconol7D/3swqBMakjGFD+DQWnRqRYOCqjlufZmAwdP2Aj/Kc1u2ucp05LXdJhxDuJZ6NMWIBCU0K9IxnDqR47jwOQrnK5mnyK8bdWIz3G60JwIev0UZqtpRF09yuPdp8hWEGjDNj+ow88HszCBfH7WyU6P8wIVSrh/VinVn6nu7eR425FfIt67z4jsPJwThprfRCtFGAKn6vfo1oGxqKdCU9cfZJF8MWwCOUUnsMM8UWzfD6639wnOXYd25Hy9BNB005Ix26XpKmLZafba/tJneGVva/RYsfqJ4q/o8PMEEKjmrK2o3n7tgG70y1XKJ8vJ3Jx9LtmirxCxxltLKbfNvbBKJUO2Mm3UgokjyrW08yimt4s4U8FwyWvZlZ94mJRLRtvXrs8JzG+Cyg0Epw4Ifr9K9M/Pv0LoMgCITQOYeYar96m/3/jELmnhLR/T4eeNDoSa3ox9rDZN5EuOaQ60XUvlDB4YO/URb6PtumYMplzfoG2ZstnM8oyn6rDUF+4UrY8O8SVsoyCMRnshWcHpo06kBuY2teSItAaeLp0maEwd9r2c8rSuJFKrXXM3ycHIxEp55lNu2fB5fNRnXM61jGojqXxFh18NxqmcnpXPzQxf+0cFAVdRntK8BtVr6eQygYSZYqaXLUAhsLSh9Xo/G8YCn3IezJFwrN9aBgw+8ESbtM/WNf40nMIQ8wZn5L6A0PsOHXQPZajkk3MVniBc8zS/FdVLrVuZEU1+b5BeDbBKhxh0Ytjjgzr8NDnm8qqe/6otdD18EX7UNPdgbzzU0B686+k33dqO3KKz3DDLWuUsu48Tx6UmxM1H3m1gz4EQ9MlM5iAqzrWa1DMVjzfXnRa11XijYQ3mqevT0ghycTAM7E0H2WW0D/GzAxJ+5XFZl3Zfu1uin3u8ZINbzX9tumVtZvqeDr9EuuY9BfAeVyilUkL0seWkJUIry5Ch40YFYUoNtOd8QrQ2bbpt62NDVFsv97n5Du4sm5k34Sawa59Ws6KcJZ2zFwNy00eZlLQ7kWOtMUzntVcdYIP+95CxtSEdyZm9L24XygpgCjznp6Y/db+1ZFm8SPc7OjhD9PSCqFjp//6YCoQmm3LHEDz7z0d+eB1KmkM0rboMWikaMS+uC1KFwKdI5Bys7ONTwLOXERMZ7mIfDEIf5z1DmHbiICJTRCMgE0QF5h86nMY7P900zMTg1Zib0eGUWnlMLzOHeYyVa9OisxYwfFOHn/7zCksmTSQfh6mNupvcEo0oKn2bDvQOtLHwdOqWkdLt+oNGCi49OAQBs2gCRDbrLF4T9bt9KsMUhfNv3obx5+GxME9mycDN6PTcL/7QoRmrbDEzOmmyDp+fPmAblMZNrgBaiLejEo+B+Wx4wwST/Y4OP092CdxbAMmVvo7DaJv+M0hRKFf+e9oGjJpz2zmnU8SwBOkpCJhJmNlIm4EWaBfjHoJl9m3pBlanDi1TTf0QCMMWXUbIM/tPHY7UghJRMkzz/YXGfyI1g3cNh3rr+B+Yf0yHfwAjBO4Lyccm/wAAAABJRU5ErkJggg==","overlay":true},{"id":"Erlangen-2011","name":"Erlangen Luftbild (2011 5,0 cm)","type":"wms","template":"https://secure.erlangen.de/arcgiser/services/Luftbilder2011/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Erlangen_ratio10_5cm_gk4.jp2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","polygon":[[[10.909347,49.529292],[10.909347,49.65211],[11.077808,49.65211],[11.077808,49.529292],[10.909347,49.529292]]],"terms_text":"© Stadt Erlangen | © Aerowest GmbH"},{"id":"Erlangen-2013","name":"Erlangen Luftbild (2013 6,25 cm)","type":"wms","template":"https://secure.erlangen.de/arcgiser/services/Luftbilder2013/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Erlangen_ratio5_6.25cm.jp2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","polygon":[[[10.905885,49.529259],[10.905885,49.65197],[11.060541,49.65197],[11.060541,49.529259],[10.905885,49.529259]]],"terms_text":"© Stadt Erlangen | © Aerowest GmbH"},{"id":"Erlangen-2016","name":"Erlangen Luftbild (2016 5,0 cm)","type":"wms","template":"https://secure.erlangen.de/arcgiser/services/Luftbild2016/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2016-03-18T00:00:00.000Z","startDate":"2016-03-18T00:00:00.000Z","polygon":[[[10.97664,49.537646],[10.9910133,49.5339157],[10.9938879,49.538346],[11.0278442,49.532545],[11.034604,49.5346153],[11.034065,49.537588],[11.0431829,49.543213],[11.035569,49.5530346],[11.0383994,49.5584249],[11.0350756,49.569291],[11.037905,49.5865909],[11.047966,49.5902015],[11.0492241,49.5936954],[11.0574886,49.595209],[11.056231,49.5990522],[11.0512678,49.600304],[11.053513,49.609036],[11.043093,49.613809],[11.040757,49.618232],[11.0284955,49.61735],[11.0192878,49.6189603],[11.0152,49.613722],[11.005813,49.6144788],[11.00639,49.6193095],[11.0008274,49.622103],[10.9856009,49.616515],[10.978369,49.617534],[10.973698,49.6249544],[10.9653888,49.6255654],[10.9606278,49.6285622],[10.9638168,49.6317624],[10.9547438,49.6379],[10.9483658,49.636998],[10.941853,49.643775],[10.9273003,49.648371],[10.9206303,49.639631],[10.9113552,49.6377259],[10.9242909,49.6050488],[10.9220451,49.580038],[10.9122086,49.5700778],[10.914409,49.5618046],[10.9235273,49.5584249],[10.9271206,49.559765],[10.9334537,49.55892],[10.9307139,49.544671],[10.930669,49.5322541],[10.9405953,49.533245],[10.9548785,49.5302135],[10.9719915,49.531263],[10.97664,49.537646]]],"terms_text":"© Stadt Erlangen | © Geocart GmbH"},{"id":"EsriWorldImagery","name":"Esri World Imagery","type":"tms","template":"https://{switch:services,server}.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,22],"terms_url":"https://wiki.openstreetmap.org/wiki/Esri","terms_text":"Terms & Feedback","default":true,"description":"Esri world imagery.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAXEYAAFxGAHswbAIAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAP5klEQVRYCcVYCXRUVbbd772aU6lUqiojIQEykUBCEoYgIEIYTaKAyNChaUVaW/9yQNeXxpb+jf3boXEAJwYRtYXYjoAiIGEIKEISIRCGIJCJjCSppJKqpOaq+88tCCvYSNu//1r/rDrv3Tfdu98Z9jmvBPz7ItIUXAVSdk1pBx/f/H8IByJOmjRJxhjj45sKv/bpp59Kt7rnpg/+myelVatWcWv1Fz0dpJNOI72LdCZpGml/keiA68++UP+b+49/6QN9LuxzWxhNMpl06sOPPJo6ZvSokJCQYDcZzaxUqdq1QUGX0tMziwyG4POCIHT1W5Cvx4HyeXg4/FP5JQD7JuSTxZIuffiR/1gwbdq05NGjRiJIo2JV1TUeCKJXpZD5nfYe9Np7WWtrG3M47E1mc/eJ8jOX9nxc+MN+4HRbP0QyGnv7Hd90yBe/lfBJ+qz22/nzF76Xn58/a+UfVphGjhwJMpvP3O3AsJRkmRwOeWTSOEWXV6fwMJUySGdShhqMYYbQoHSNwje3pb74rlZzD39BbtFmUj8pn/+WlryVBQNvuHjx4qAtW7a8/sabbyz99aIClJYc86SmjRR7vGqx6IcGlDW48fmFOnh2vwLRNBCh0x5Boj4Eg9UCG2xSsaERSjY4TJRClC6h8kw5nnr0d7Zms+3jtLS0l86cOVNDALnwEOKA/0F+DmAAXF5eXuiuXbv+vrVw64xFBYv4BP517xTKtlWF4IA4AOjoBowM2mAN7DY7/PvepTvIIJOWUDooASd5UJAwKFzDfpca4ssdEQy92if7csd2PP7444003wrSwmuobgryZi4OxBxRhOKFF174uPCjj3IXFRR4HB6fuGFvhfTYjiOo1doxeJgPyQmViIwsI1AV8HXooPSroTq0FsHMA6O3GybLOWh6a9BQ2ywc2F4tblj1vnjb7XG+e+bc5Z8xbYr+Um3NPS2NjX4/Y98SSO5qDvIGl/8UILdowNSfffbZK+s3rP/NkvuXeLtd3dLKopfEVdb1GKarxmDtUej036P1/Ba0nyyF42wZ/JcZfDIN3Jn5sBW/BytTwJI0HjZfCIZF9OCOnE9hHLUfrz7+odjZ2SOmpiZ6QjQhUtH+oskpKSl+s9nMQXK5was3HNDFgPVoP3fZU8s+f+kvL8EvZ76nDzwjvW1fi3zZ7aj9vgVVRe0Ii+mGLjwRqgG/ArRZ8Mii4KKYd0COnprT8B98Dd1Tn8eQSANyM76AJuQAnH49rB1efLDiMHAH8Ma4td59HxyU7Sz+ClkjshaWV5R/0g8DDa+aNDCgTQDcM888Y6Txqntnz4VSrfS8efxt6W3LWkyuyUHZunq0HnAjPqUHWfOfRlLuJkSnFsAUlQpDCMWXSga95IZu8HB0x84Ctn+EqYl7YNSvhtupInVBMgDzV0wF3IA6RS1bX7jO/eyKZ0Hgnn/ooYeiaG3OGtc9e31AJ7k1WX1L42Pdlq5FS+57wFcvb5QVHFiIhL2JMJdfwojZ8UiZfg5Oy0xExD2FIMVAyH0+KAQGiZ6WKIKcXglOJiF9iALC+Q0YkrET6vDJcLh88DAGl4cWodoja5Sw6eyHWDJliTQ9e7qn+Lti084vd3Je3E/KJeDdPoA8OHnsheXn5725YM58U5Oz2V90Zp9Y8dxJAhWJYQuGIGqInUDNQuvJOJhM8QiLDCWH+iCXSQSQwUvAjGorJgzch5FpXyE4shele0QMGqODoBIJIFcBbkoDrcmICztrYdFbMX/MvUiMSRS3FG5JmH3n7B0/Vv3YSVg4NpqRhAq/VFdXxwHm/3757x8elT2aLZyzUGxh9cL4ZZkYMCocwYoOqDwi1OJz6GljUAoWxAwZSrP4oZDLIJNrIFcISI4shF7zJ9hsSjidIko+aYI2WkkrSbDbffAJBJKS1R8ih0kZjj2n9mBmVq6QGZfh/77sex0lTR3hKCHl2Pyc7zhA/6FDh/hwQmxcLMrLyjlYcdTSUdAYXZB7aqGSXYDo/wwaZSJi4trRfPoojFMIniYU7ZYudF5pQGvtKbRZPkJ7UyS6LTaIcguUwQxfrbyAxBlGMJG8ppAg1yuhGBgErTIUqAZ2V+4Vxk7NZvct+A2+O/QdbzrWkHJ3E4sSEALHAcmyMrKe1hv1g1pbW1lreKeoHWFHsNwDJUuA5H8OgmcMQrVyhBl0qK8ogcFgQFNVJfYXrsPFI3vhcfZCE+1CTLobg8fqMWRCOCJS9Wi/bEXmfQmIzA6jrNdCCFLAanaht8aBztIOlMsu474x85hKUomb39usmD59+hfV1dVWwiRxCwaCkfaRnS0dsXm5ebCgGy+OfhGxd+bCLiyhhRMoQ0MRplcHEsFuMaPh4lmU7ipEZs5sjJo8E5qYEfBqeiDT/hfNaIfHF0zR6UOwSg5jvBZdbU5ExeugCVJCFiNQBhvR6/IjPSkUp/9Ugv2TD2J0fBaSk5NNRUVFMYSngVTsDzB09PgxusSERHxTtQ/oBRw1efBIGTAoKQmUMtjMLTi9Yydqju6hYJcwJvdXyH/wabhlKrRbGTodx2B1lID5M+GjjPXymkAVz5huQF1ZB4KHGeGiJHHRBbdfgE8uQRGnA+4BDPF6ISIqAtER0UEXLlyIoCcDwrO3z4I6QYCmp6cXFm+3AKIx6/keCm6qEH47qo4VofCJ2aivrcE9z67D4j++jo4rLTBbumGzO9HT00MUoiUAJrjFg/CItUR1LXASDWlidehp6iWSdsMn9mWyAKeHIkspJ26igLNTAgZpEB5m4sA0AXSUxYEkuXag7HVaJK+HwWOLB+jnLy9BZ1Uy6o7vRHPZXsz4z9cwNHMsVMFaiD43mFqHsyePI/62aXDQscMVgV7nn+GTTpBz6b2lVohiNcRwDYLigmFpdkAfEQSX3w8PNRVuWl4lcwFB5K0WApZOIDUEGJTo16Q/QHd7u9nn9ToQ7B1MZltNjcly/Pjf2xE95zFMef5zGKMGwEZM63R3QKsNRtSIcagsPYyQlLGwkzV6vQJ6PLeh25kBS48DbrcZEaZdUOkPQW4MRSfFvSLJQNYVKHQkeP0ivQwBkhuItogRCLjVZiXE6LiGT+AA+7qH7rKyUw7qhtVa4ja8/i2vRlBPXISoyQ/Bo9TC3NlDNKOEiiZ1MuI/KnFXqt5BfV0tJUkyurqaYWltRMflalgaa2FrsKLOVwtD9Ck42hRwdctgb3VA1KsgmHQQicgVYVOBzgcRFS5nXq8HtbWXqYcLNLQcY8DFfQDNdMLS1NRi6Ki7xK9BtuBlOI7sht19CipVL2SyNrjECPh8UXA4wyAGGxAx7k6cK94BfexQ1BRthbX6PKTht9PiSZBnxlEyEa3FzUZ0+AY0fdoEYYgJQogMvU1OsNpqyF0JwDfEKCvvgrmtDScrzjTS4k2kXAJEzTmQSwtpVX1dVfzYiTMxfOVQnPV3Irz8r3CYFwMpqfB6u6ikuSFpTBClWPQ2p6G70YG6nesgpIyDMXsuomcnw6MORa9PRt0Lg0Cz2+VDoDPYoI5/DpIpCKp0ApnSTZXlXsguzgO+O8KqL51H65VWjqOc1MY/V0koCK66mBM2l6OHDx9GmFEnLE0fwKCpgWmOhPovB8LWRVZjw+EQMylrw1F9oALFv30VQvA6DKKPTW1KHoJGTIdbS1WEiq3dSRZyuyD4HHB2SejqGQBG34Lc7b12geK1C2pPMuqVlI3zspGaOkysr7/MMRzgGwIXwMQBXhedTv3N5vc/dDTUXRSnZJoYHAZYk6Kg7WqA+YwZThlxHVWFU69V4twBqrsvZiNh0QwMuDsNjrK30VRzCV0ONyUHfeQRZ/FEpj6HapSXmoUW+PUiqNGGgxJKRat22EOQSDS0YUa039zeKhwr+eEinT54DVDAs32WC5xzubzc96Pi4mKHzpw+0Ss1K6SvW4MQm2pHw/42MOZD7bsV0I2PImCDoY6iHs9LJKYNh89rQ9e35NKhw2gKmpaSCNThwC/RFymFRcRxeDzt8FYRyEQ9wuVudDdFY0XaWEwZofVt3rRRKizctp4Y8Wv+5wCV30Bu9FmQHwTAJiQkrF3xzEpP1YUz8gdzE3ywjEON+ATCOhiuvFqBsAeyoZ8RR64mt/VKsLltsLr06I1eBZw/B3b5JNGGgooUtxzZSU4Zq6B4JGbwyNVg1BdGUhWqpwIwPS4MS/OSvArRL3/vg61No9MS3yccIIBkezI+SR9APg6YtKqq6jCN31616i8IVbv9RfcOZL7nv4A2biLC02bB1nmCAFHZIw6y+wRq8T2wdMXBQg0FCubD/y2tYSNCIE5Dex11K1T6KvbCu+84fAebEXyZesrSdmDHCczQqplGcgolZSf4+mt/uPoZyjEFsPCTN7h43rx5UmVlJdu4cWPJy6+8khMWFhGbNyXLEz9MK31oHoHexDTEvVmJzoFVcMUMJLrxUr11EegcuHti6Ls4HGi9TJY8BJhpX/ENmNdOrg4jzgxBbEwXWlvrYDE1YtOs9zEyOtXzwZa/yZctW3aQsDxB6iO9bj0a31Rk/OysWbP4H0DNm9/dxLx+5tpd2sLw6GGGhe+xOEM8S1gxjhk/ymXyD8cw2cufMCyjmLn7WYakadw1DJMeZXjqG6b7wyEW/8fjbMCarxjeymTIBdtZvpdYhLkqz1byeznvpZByCax9dXh1e4MFr13g5pVRR3GF/t4o37BxY36EyRA8Z0a2e3FmlGBzKoTDOjM63/oSjmgJ0QMHw1ujguKTnYgIsUM34T4Ykscj/MoJ4r1xaBfVsJitsHWokRc6AHMjU9j9ufe7T506pczIyrDRWgWkpXxNUt6k3iA3A8hv4CCllpaWmjvuGPfduvWbxlOdjpiQnSrMnzjcMzUtSdCOpqbzQB1qS78V3Bc9cGfMgnXQFFjlOnTJjOjYVgrriVKkT7gNs4YE4835Q9mScVne02XlOFZSKi9YVMBZmYMr4muRcvf+g3B//5zwazxgfU8++eSANWvWvETjX7+/+R3k5EyDIjTI99a763BuezHaosciKONuYVhYCHrsZEVtEOINPhzdtpoNSh2P5Y8vhc/VJRYXFwtz713A1zuYnp7+xOnTp8/SmK9xNSz4lf+F9I+LfHp+t9EUbl++7Gk2ecJktmv3LrZ161Y2r+ABdrSsgtU1trPq2kbW0trOtm3bzrIzItmaV//KcnKmchC8jD28e/duamMDwi13KyPd+uK1Sfjuuguu1chsOkddAMbmTMpJ1BtCDARGN/G2NPnw9NGwWq240tzs73X7u48dK+F/tfEY+3r58uX7V69ezeOOy/U5rx7efHtL9D95hLuC3//TWOHteRhCkiLQfZH/K0EsHXAZb5sa8iZMqN915IiFxn3CgXFrXue6vgv/V3sOki/C9ZcKf4aHCn/Jf0n+FQvebGL+fJ9l+Zhbpk/6jvm5n1q9755/uv8fW8aYEPr77KEAAAAASUVORK5CYII="},{"id":"EsriWorldImageryClarity","name":"Esri World Imagery (Clarity) Beta","type":"tms","template":"https://clarity.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,22],"terms_url":"https://wiki.openstreetmap.org/wiki/Esri","terms_text":"Terms & Feedback","default":true,"description":"Esri archive imagery that may be clearer and more accurate than the default layer.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAXEYAAFxGAHswbAIAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAP5klEQVRYCcVYCXRUVbbd772aU6lUqiojIQEykUBCEoYgIEIYTaKAyNChaUVaW/9yQNeXxpb+jf3boXEAJwYRtYXYjoAiIGEIKEISIRCGIJCJjCSppJKqpOaq+88tCCvYSNu//1r/rDrv3Tfdu98Z9jmvBPz7ItIUXAVSdk1pBx/f/H8IByJOmjRJxhjj45sKv/bpp59Kt7rnpg/+myelVatWcWv1Fz0dpJNOI72LdCZpGml/keiA68++UP+b+49/6QN9LuxzWxhNMpl06sOPPJo6ZvSokJCQYDcZzaxUqdq1QUGX0tMziwyG4POCIHT1W5Cvx4HyeXg4/FP5JQD7JuSTxZIuffiR/1gwbdq05NGjRiJIo2JV1TUeCKJXpZD5nfYe9Np7WWtrG3M47E1mc/eJ8jOX9nxc+MN+4HRbP0QyGnv7Hd90yBe/lfBJ+qz22/nzF76Xn58/a+UfVphGjhwJMpvP3O3AsJRkmRwOeWTSOEWXV6fwMJUySGdShhqMYYbQoHSNwje3pb74rlZzD39BbtFmUj8pn/+WlryVBQNvuHjx4qAtW7a8/sabbyz99aIClJYc86SmjRR7vGqx6IcGlDW48fmFOnh2vwLRNBCh0x5Boj4Eg9UCG2xSsaERSjY4TJRClC6h8kw5nnr0d7Zms+3jtLS0l86cOVNDALnwEOKA/0F+DmAAXF5eXuiuXbv+vrVw64xFBYv4BP517xTKtlWF4IA4AOjoBowM2mAN7DY7/PvepTvIIJOWUDooASd5UJAwKFzDfpca4ssdEQy92if7csd2PP7444003wrSwmuobgryZi4OxBxRhOKFF174uPCjj3IXFRR4HB6fuGFvhfTYjiOo1doxeJgPyQmViIwsI1AV8HXooPSroTq0FsHMA6O3GybLOWh6a9BQ2ywc2F4tblj1vnjb7XG+e+bc5Z8xbYr+Um3NPS2NjX4/Y98SSO5qDvIGl/8UILdowNSfffbZK+s3rP/NkvuXeLtd3dLKopfEVdb1GKarxmDtUej036P1/Ba0nyyF42wZ/JcZfDIN3Jn5sBW/BytTwJI0HjZfCIZF9OCOnE9hHLUfrz7+odjZ2SOmpiZ6QjQhUtH+oskpKSl+s9nMQXK5was3HNDFgPVoP3fZU8s+f+kvL8EvZ76nDzwjvW1fi3zZ7aj9vgVVRe0Ii+mGLjwRqgG/ArRZ8Mii4KKYd0COnprT8B98Dd1Tn8eQSANyM76AJuQAnH49rB1efLDiMHAH8Ma4td59HxyU7Sz+ClkjshaWV5R/0g8DDa+aNDCgTQDcM888Y6Txqntnz4VSrfS8efxt6W3LWkyuyUHZunq0HnAjPqUHWfOfRlLuJkSnFsAUlQpDCMWXSga95IZu8HB0x84Ctn+EqYl7YNSvhtupInVBMgDzV0wF3IA6RS1bX7jO/eyKZ0Hgnn/ooYeiaG3OGtc9e31AJ7k1WX1L42Pdlq5FS+57wFcvb5QVHFiIhL2JMJdfwojZ8UiZfg5Oy0xExD2FIMVAyH0+KAQGiZ6WKIKcXglOJiF9iALC+Q0YkrET6vDJcLh88DAGl4cWodoja5Sw6eyHWDJliTQ9e7qn+Lti084vd3Je3E/KJeDdPoA8OHnsheXn5725YM58U5Oz2V90Zp9Y8dxJAhWJYQuGIGqInUDNQuvJOJhM8QiLDCWH+iCXSQSQwUvAjGorJgzch5FpXyE4shele0QMGqODoBIJIFcBbkoDrcmICztrYdFbMX/MvUiMSRS3FG5JmH3n7B0/Vv3YSVg4NpqRhAq/VFdXxwHm/3757x8elT2aLZyzUGxh9cL4ZZkYMCocwYoOqDwi1OJz6GljUAoWxAwZSrP4oZDLIJNrIFcISI4shF7zJ9hsSjidIko+aYI2WkkrSbDbffAJBJKS1R8ih0kZjj2n9mBmVq6QGZfh/77sex0lTR3hKCHl2Pyc7zhA/6FDh/hwQmxcLMrLyjlYcdTSUdAYXZB7aqGSXYDo/wwaZSJi4trRfPoojFMIniYU7ZYudF5pQGvtKbRZPkJ7UyS6LTaIcguUwQxfrbyAxBlGMJG8ppAg1yuhGBgErTIUqAZ2V+4Vxk7NZvct+A2+O/QdbzrWkHJ3E4sSEALHAcmyMrKe1hv1g1pbW1lreKeoHWFHsNwDJUuA5H8OgmcMQrVyhBl0qK8ogcFgQFNVJfYXrsPFI3vhcfZCE+1CTLobg8fqMWRCOCJS9Wi/bEXmfQmIzA6jrNdCCFLAanaht8aBztIOlMsu474x85hKUomb39usmD59+hfV1dVWwiRxCwaCkfaRnS0dsXm5ebCgGy+OfhGxd+bCLiyhhRMoQ0MRplcHEsFuMaPh4lmU7ipEZs5sjJo8E5qYEfBqeiDT/hfNaIfHF0zR6UOwSg5jvBZdbU5ExeugCVJCFiNQBhvR6/IjPSkUp/9Ugv2TD2J0fBaSk5NNRUVFMYSngVTsDzB09PgxusSERHxTtQ/oBRw1efBIGTAoKQmUMtjMLTi9Yydqju6hYJcwJvdXyH/wabhlKrRbGTodx2B1lID5M+GjjPXymkAVz5huQF1ZB4KHGeGiJHHRBbdfgE8uQRGnA+4BDPF6ISIqAtER0UEXLlyIoCcDwrO3z4I6QYCmp6cXFm+3AKIx6/keCm6qEH47qo4VofCJ2aivrcE9z67D4j++jo4rLTBbumGzO9HT00MUoiUAJrjFg/CItUR1LXASDWlidehp6iWSdsMn9mWyAKeHIkspJ26igLNTAgZpEB5m4sA0AXSUxYEkuXag7HVaJK+HwWOLB+jnLy9BZ1Uy6o7vRHPZXsz4z9cwNHMsVMFaiD43mFqHsyePI/62aXDQscMVgV7nn+GTTpBz6b2lVohiNcRwDYLigmFpdkAfEQSX3w8PNRVuWl4lcwFB5K0WApZOIDUEGJTo16Q/QHd7u9nn9ToQ7B1MZltNjcly/Pjf2xE95zFMef5zGKMGwEZM63R3QKsNRtSIcagsPYyQlLGwkzV6vQJ6PLeh25kBS48DbrcZEaZdUOkPQW4MRSfFvSLJQNYVKHQkeP0ivQwBkhuItogRCLjVZiXE6LiGT+AA+7qH7rKyUw7qhtVa4ja8/i2vRlBPXISoyQ/Bo9TC3NlDNKOEiiZ1MuI/KnFXqt5BfV0tJUkyurqaYWltRMflalgaa2FrsKLOVwtD9Ck42hRwdctgb3VA1KsgmHQQicgVYVOBzgcRFS5nXq8HtbWXqYcLNLQcY8DFfQDNdMLS1NRi6Ki7xK9BtuBlOI7sht19CipVL2SyNrjECPh8UXA4wyAGGxAx7k6cK94BfexQ1BRthbX6PKTht9PiSZBnxlEyEa3FzUZ0+AY0fdoEYYgJQogMvU1OsNpqyF0JwDfEKCvvgrmtDScrzjTS4k2kXAJEzTmQSwtpVX1dVfzYiTMxfOVQnPV3Irz8r3CYFwMpqfB6u6ikuSFpTBClWPQ2p6G70YG6nesgpIyDMXsuomcnw6MORa9PRt0Lg0Cz2+VDoDPYoI5/DpIpCKp0ApnSTZXlXsguzgO+O8KqL51H65VWjqOc1MY/V0koCK66mBM2l6OHDx9GmFEnLE0fwKCpgWmOhPovB8LWRVZjw+EQMylrw1F9oALFv30VQvA6DKKPTW1KHoJGTIdbS1WEiq3dSRZyuyD4HHB2SejqGQBG34Lc7b12geK1C2pPMuqVlI3zspGaOkysr7/MMRzgGwIXwMQBXhedTv3N5vc/dDTUXRSnZJoYHAZYk6Kg7WqA+YwZThlxHVWFU69V4twBqrsvZiNh0QwMuDsNjrK30VRzCV0ONyUHfeQRZ/FEpj6HapSXmoUW+PUiqNGGgxJKRat22EOQSDS0YUa039zeKhwr+eEinT54DVDAs32WC5xzubzc96Pi4mKHzpw+0Ss1K6SvW4MQm2pHw/42MOZD7bsV0I2PImCDoY6iHs9LJKYNh89rQ9e35NKhw2gKmpaSCNThwC/RFymFRcRxeDzt8FYRyEQ9wuVudDdFY0XaWEwZofVt3rRRKizctp4Y8Wv+5wCV30Bu9FmQHwTAJiQkrF3xzEpP1YUz8gdzE3ywjEON+ATCOhiuvFqBsAeyoZ8RR64mt/VKsLltsLr06I1eBZw/B3b5JNGGgooUtxzZSU4Zq6B4JGbwyNVg1BdGUhWqpwIwPS4MS/OSvArRL3/vg61No9MS3yccIIBkezI+SR9APg6YtKqq6jCN31616i8IVbv9RfcOZL7nv4A2biLC02bB1nmCAFHZIw6y+wRq8T2wdMXBQg0FCubD/y2tYSNCIE5Dex11K1T6KvbCu+84fAebEXyZesrSdmDHCczQqplGcgolZSf4+mt/uPoZyjEFsPCTN7h43rx5UmVlJdu4cWPJy6+8khMWFhGbNyXLEz9MK31oHoHexDTEvVmJzoFVcMUMJLrxUr11EegcuHti6Ls4HGi9TJY8BJhpX/ENmNdOrg4jzgxBbEwXWlvrYDE1YtOs9zEyOtXzwZa/yZctW3aQsDxB6iO9bj0a31Rk/OysWbP4H0DNm9/dxLx+5tpd2sLw6GGGhe+xOEM8S1gxjhk/ymXyD8cw2cufMCyjmLn7WYakadw1DJMeZXjqG6b7wyEW/8fjbMCarxjeymTIBdtZvpdYhLkqz1byeznvpZByCax9dXh1e4MFr13g5pVRR3GF/t4o37BxY36EyRA8Z0a2e3FmlGBzKoTDOjM63/oSjmgJ0QMHw1ujguKTnYgIsUM34T4Ykscj/MoJ4r1xaBfVsJitsHWokRc6AHMjU9j9ufe7T506pczIyrDRWgWkpXxNUt6k3iA3A8hv4CCllpaWmjvuGPfduvWbxlOdjpiQnSrMnzjcMzUtSdCOpqbzQB1qS78V3Bc9cGfMgnXQFFjlOnTJjOjYVgrriVKkT7gNs4YE4835Q9mScVne02XlOFZSKi9YVMBZmYMr4muRcvf+g3B//5zwazxgfU8++eSANWvWvETjX7+/+R3k5EyDIjTI99a763BuezHaosciKONuYVhYCHrsZEVtEOINPhzdtpoNSh2P5Y8vhc/VJRYXFwtz713A1zuYnp7+xOnTp8/SmK9xNSz4lf+F9I+LfHp+t9EUbl++7Gk2ecJktmv3LrZ161Y2r+ABdrSsgtU1trPq2kbW0trOtm3bzrIzItmaV//KcnKmchC8jD28e/duamMDwi13KyPd+uK1Sfjuuguu1chsOkddAMbmTMpJ1BtCDARGN/G2NPnw9NGwWq240tzs73X7u48dK+F/tfEY+3r58uX7V69ezeOOy/U5rx7efHtL9D95hLuC3//TWOHteRhCkiLQfZH/K0EsHXAZb5sa8iZMqN915IiFxn3CgXFrXue6vgv/V3sOki/C9ZcKf4aHCn/Jf0n+FQvebGL+fJ9l+Zhbpk/6jvm5n1q9755/uv8fW8aYEPr77KEAAAAASUVORK5CYII="},{"id":"maaamet.ee-pohi_vr2","name":"Estonia Basemap (Maaamet)","type":"wms","template":"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=pohi_vr2&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","polygon":[[[22.3536433,58.8538478],[22.0941083,58.8503765],[22.09179,58.8950979],[22.0050343,58.8937111],[21.9997875,58.9837386],[22.3475423,58.9884539],[22.3453459,59.0333735],[22.5193454,59.0353825],[22.5155628,59.1251033],[22.6901723,59.1268565],[22.6921246,59.0821845],[22.7791243,59.0829995],[22.7808326,59.0381447],[22.8680763,59.0387725],[22.8692965,58.9939856],[22.9562963,58.9948656],[22.954954,59.0395885],[23.1289535,59.0409695],[23.1278553,59.0858205],[23.4767083,59.0877011],[23.4741459,59.2672589],[23.6492435,59.2678824],[23.6488774,59.3128106],[23.7369753,59.3129974],[23.7364872,59.3578039],[23.9115848,59.3578661],[23.9120729,59.4027997],[24.1760005,59.4027997],[24.1763666,59.4477979],[24.2644645,59.4476738],[24.2647085,59.4923646],[24.7060521,59.490816],[24.7089805,59.6255274],[24.7974445,59.6249721],[24.7965903,59.5800862],[24.9732742,59.5788506],[24.9746164,59.6238615],[24.8860304,59.6247253],[24.8872506,59.6691818],[24.9762027,59.6686273],[24.9773008,59.7134564],[25.0660088,59.7125949],[25.0632024,59.6230593],[25.2403743,59.621455],[25.2418385,59.6664705],[25.3305465,59.6654845],[25.3288383,59.6207762],[25.4175462,59.6197889],[25.4193765,59.6646834],[25.6855005,59.6614786],[25.6875748,59.7061327],[25.8651128,59.7038552],[25.8627944,59.6590132],[26.1285523,59.6550682],[26.1257459,59.6100991],[26.3911377,59.6056544],[26.3880872,59.5609901],[26.8296748,59.552149],[26.8262583,59.5072897],[26.9142342,59.5054941],[26.9105736,59.4605107],[27.9668941,59.4330327],[27.9718969,59.4778048],[28.0366891,59.4756977],[28.0437662,59.472227],[28.0476708,59.4657804],[28.0518195,59.4634246],[28.0691462,59.4625567],[28.0845206,59.4593946],[28.1217365,59.4409124],[28.1357687,59.4276958],[28.1371109,59.4226684],[28.1416256,59.419006],[28.1665176,59.4120525],[28.1722525,59.4078922],[28.1927517,59.4014954],[28.2106885,59.383603],[28.2106885,59.3799364],[28.2038555,59.3745911],[28.2105665,59.3723533],[28.2110546,59.3693693],[28.2067839,59.3671933],[28.207028,59.3637736],[28.1997068,59.3609133],[28.2020252,59.3573064],[28.1926297,59.3522685],[28.1939719,59.3464212],[28.1696901,59.3335411],[28.1362568,59.2924414],[28.1251531,59.2890141],[28.1172218,59.2889518],[28.1099006,59.2906343],[28.0535278,59.2901981],[28.0202165,59.2833429],[27.998253,59.2753018],[27.9798281,59.2729328],[27.9643317,59.2726834],[27.95335,59.2686307],[27.9492013,59.2653258],[27.9056404,59.2404352],[27.9011257,59.2348807],[27.9010037,59.2263912],[27.8978312,59.2174624],[27.9023459,59.207282],[27.8923404,59.1922244],[27.8897779,59.1837868],[27.8764779,59.1737214],[27.8718411,59.1684062],[27.8681805,59.161589],[27.8441428,59.1481382],[27.8320629,59.1440081],[27.820349,59.133618],[27.8098553,59.1290479],[27.8059507,59.1216592],[27.8053406,59.1127031],[27.8107095,59.1081928],[27.8100994,59.1060627],[27.8020461,59.1028047],[27.788868,59.0908979],[27.7906983,59.0811186],[27.7937488,59.0784226],[27.7941149,59.0756636],[27.7927727,59.0729044],[27.7930167,59.069267],[27.788502,59.06657],[27.7826451,59.0650019],[27.7750799,59.0581013],[27.7731276,59.0510739],[27.7766661,59.0474341],[27.769833,59.0332479],[27.7660504,59.0315527],[27.7515302,59.0301714],[27.7462833,59.0271573],[27.7456732,59.0170459],[27.7416466,59.0095074],[27.7478696,58.9926656],[27.7427448,58.9884539],[27.7321291,58.9854991],[27.6544028,58.9878252],[27.6550129,58.9924142],[27.3941358,58.9996422],[27.3897431,58.9547414],[27.1293541,58.9613481],[27.1255715,58.9163975],[27.0388158,58.9184133],[27.027102,58.784103],[27.1136136,58.7818263],[27.1093429,58.7370852],[27.1953665,58.7351221],[27.1873132,58.6453349],[27.2730927,58.6430491],[27.2525935,58.4188307],[27.5339699,58.4114172],[27.5552012,58.3657519],[27.5176193,58.3326492],[27.5140807,58.322142],[27.4999265,58.3224624],[27.4868704,58.1880305],[27.528723,58.1868727],[27.592051,58.1187543],[27.6369541,58.0973519],[27.6093777,58.053992],[27.6226778,58.0057957],[27.6448853,58.0020458],[27.6529386,58.0064422],[27.6478138,58.0142638],[27.6478138,58.020856],[27.661724,58.0186587],[27.6685571,58.0104502],[27.6839315,58.0084463],[27.6964995,58.0045027],[27.7006481,57.9986189],[27.6988178,57.9882713],[27.6912527,57.9854899],[27.680637,57.9744915],[27.6821012,57.9719031],[27.6889343,57.9718384],[27.6858838,57.9592823],[27.6589176,57.955398],[27.6675809,57.9509954],[27.6716076,57.9462684],[27.6691672,57.9417351],[27.6764883,57.9355171],[27.6824673,57.9365535],[27.6861278,57.9279374],[27.6824673,57.9243737],[27.7107757,57.9239202],[27.7202932,57.9203561],[27.7205373,57.9117361],[27.7083353,57.9061612],[27.6988178,57.9061612],[27.706139,57.9013635],[27.7289566,57.9073929],[27.7467714,57.9016877],[27.7536045,57.9040866],[27.7573871,57.9031789],[27.7559228,57.8980566],[27.769589,57.8956572],[27.7809368,57.8983159],[27.7989956,57.8996128],[27.8185187,57.8957869],[27.8209591,57.890469],[27.8194949,57.8880043],[27.8105875,57.8861232],[27.8182747,57.8824905],[27.8116856,57.8720446],[27.8158343,57.8716552],[27.8183967,57.8651005],[27.8163224,57.8613359],[27.7987516,57.8520525],[27.7946029,57.8463384],[27.8005819,57.8441954],[27.7957011,57.8401688],[27.788624,57.8418575],[27.7841093,57.837246],[27.7771542,57.8325041],[27.7584853,57.8353623],[27.7416466,57.8267869],[27.7238318,57.8317895],[27.7054069,57.8419224],[27.6877141,57.8341931],[27.6663607,57.8365315],[27.6602598,57.8389348],[27.6481799,57.8377007],[27.636344,57.8397792],[27.6248742,57.8375058],[27.6220677,57.8387399],[27.5979079,57.8332836],[27.5625224,57.8302303],[27.5562994,57.8312698],[27.5522727,57.8211338],[27.5444635,57.8220436],[27.5451956,57.8180795],[27.5505645,57.8176896],[27.5566654,57.81366],[27.5408029,57.81288],[27.5447076,57.8080049],[27.5372644,57.8064447],[27.5395827,57.8014386],[27.5359222,57.7966269],[27.5386066,57.7939607],[27.5292111,57.7885626],[27.5174973,57.7887577],[27.5184734,57.7920097],[27.502977,57.7879772],[27.5000485,57.7897333],[27.4958999,57.7886927],[27.5077357,57.783489],[27.5145688,57.7751615],[27.5081018,57.7715827],[27.5111523,57.7641637],[27.515911,57.7639034],[27.5201817,57.7599329],[27.5281129,57.7581753],[27.5300652,57.7536834],[27.5311634,57.7407253],[27.5480021,57.7332999],[27.5419011,57.7303684],[27.5279909,57.7294564],[27.5235982,57.7161637],[27.5276249,57.708994],[27.5235982,57.7080162],[27.5165211,57.7087333],[27.5106642,57.7110147],[27.5085899,57.707234],[27.4999265,57.7049523],[27.4952898,57.7074947],[27.4871145,57.7190963],[27.4735703,57.7154468],[27.4706419,57.7080162],[27.4614904,57.706191],[27.4480683,57.7161637],[27.4308636,57.7075599],[27.4281792,57.6990193],[27.4134149,57.6991498],[27.4164653,57.6952374],[27.4074359,57.6927593],[27.4023111,57.6849328],[27.3913294,57.6853894],[27.3937698,57.679127],[27.3914514,57.676713],[27.3819339,57.6733202],[27.3777852,57.668361],[27.3836422,57.6605944],[27.3801036,57.658832],[27.3875468,57.6555028],[27.3804697,57.6494964],[27.3835201,57.6479947],[27.3815678,57.643685],[27.3907193,57.6430972],[27.3881569,57.6400931],[27.4008469,57.6374154],[27.4031652,57.6290542],[27.401823,57.6237622],[27.3959661,57.6211486],[27.3902312,57.6203644],[27.3908413,57.616901],[27.401945,57.6177506],[27.4063377,57.6154633],[27.4068258,57.6124569],[27.3857165,57.603044],[27.3782733,57.5951327],[27.35692,57.5969636],[27.3413015,57.5898357],[27.3417896,57.5853883],[27.3288555,57.5796974],[27.3214124,57.5789778],[27.3341024,57.5659571],[27.331784,57.5606559],[27.3377629,57.5600668],[27.3388611,57.5467119],[27.3438639,57.5454024],[27.3547236,57.5257533],[27.3513071,57.516318],[27.3456942,57.5210359],[27.3244628,57.5227395],[27.2966424,57.5385919],[27.2801699,57.5364306],[27.2737028,57.5431105],[27.2643074,57.5437654],[27.2636973,57.5484143],[27.2577183,57.5497892],[27.2479568,57.5476941],[27.2248951,57.5538482],[27.1932922,57.5496583],[27.1614451,57.5592159],[27.1165421,57.5611795],[27.1009236,57.5653027],[27.0850611,57.5753796],[27.0726151,57.5773423],[27.0722491,57.5798936],[27.0558985,57.5825102],[27.052848,57.5808749],[27.0468691,57.5804824],[27.0449168,57.5825102],[27.0332029,57.5853229],[27.0412562,57.5876121],[27.0441847,57.596702],[27.0310066,57.604613],[26.9951329,57.604613],[26.9923265,57.6107575],[26.9869576,57.6086659],[26.9836631,57.6117379],[26.9754878,57.6119994],[26.9709731,57.6044822],[26.9595033,57.6062473],[26.957795,57.6046784],[26.9459592,57.6027171],[26.9396142,57.6093195],[26.951328,57.61579],[26.9499858,57.6205605],[26.9405903,57.6197763],[26.9296086,57.6237622],[26.9264361,57.6331044],[26.906791,57.6330391],[26.8997139,57.6305568],[26.900568,57.6291849],[26.8958093,57.6257223],[26.8884881,57.6235662],[26.8889762,57.6219327],[26.8745779,57.6190575],[26.8727476,57.6173585],[26.8655485,57.6159207],[26.8578613,57.6099732],[26.8646944,57.6084044],[26.8581053,57.6004943],[26.8599356,57.5959828],[26.8643283,57.5941518],[26.8617659,57.5910783],[26.8468795,57.5883969],[26.8350437,57.5824448],[26.8158867,57.581529],[26.8095417,57.5847342],[26.7968517,57.5817907],[26.799292,57.5800245],[26.792947,57.573155],[26.7868461,57.5752487],[26.7765965,57.5599359],[26.7691533,57.5603941],[26.7635404,57.563143],[26.7536569,57.5624885],[26.7581716,57.5653027],[26.7689093,57.5704069],[26.77379,57.5747253],[26.7676891,57.5775385],[26.748044,57.5778002],[26.7531688,57.5800899],[26.7381604,57.5877429],[26.729009,57.5801553],[26.7382824,57.5758375],[26.7307172,57.5690328],[26.7238842,57.5724353],[26.7110721,57.5659571],[26.6997244,57.5710612],[26.697528,57.5706032],[26.697406,57.5673314],[26.6915491,57.5661534],[26.6756866,57.5666769],[26.6710498,57.5632739],[26.671904,57.5538482],[26.6653149,57.5528663],[26.646524,57.5539137],[26.6426194,57.546581],[26.6344441,57.5435689],[26.6144329,57.5290944],[26.6171173,57.5088466],[26.6046714,57.5121237],[26.6047934,57.5144175],[26.5953979,57.5137621],[26.5947878,57.5159248],[26.5880768,57.5161869],[26.5901511,57.5251637],[26.5869786,57.5262119],[26.5877107,57.537806],[26.5838061,57.5395743],[26.5797794,57.5369546],[26.5796574,57.5337452],[26.5612325,57.5285048],[26.5618426,57.5226085],[26.5666014,57.5194633],[26.557938,57.5136966],[26.5258469,57.5161869],[26.4996128,57.5245085],[26.4909494,57.5453369],[26.4699621,57.5755104],[26.4015093,57.5723699],[26.3448924,57.5840801],[26.3347648,57.5796974],[26.3278097,57.579632],[26.3263455,57.5827719],[26.3117032,57.5847342],[26.3085307,57.5929094],[26.3005994,57.5934325],[26.2929122,57.5911437],[26.2835167,57.5923208],[26.2821745,57.5951981],[26.2775378,57.5950019],[26.2703387,57.600102],[26.2702166,57.604613],[26.2542321,57.6138294],[26.247155,57.6208219],[26.2481312,57.6277476],[26.2394678,57.6340842],[26.2420302,57.6353906],[26.2466669,57.6355865],[26.2395898,57.6464929],[26.2323907,57.6461011],[26.2311705,57.6490394],[26.2421522,57.6514551],[26.2362953,57.6575265],[26.2303164,57.6580487],[26.2104272,57.6660116],[26.2137217,57.668883],[26.2109153,57.6707102],[26.2101832,57.6790617],[26.2007877,57.6810188],[26.1989574,57.6835629],[26.1944427,57.6851937],[26.1854133,57.6845414],[26.177116,57.687607],[26.1887078,57.6947157],[26.1985914,57.7090592],[26.2056685,57.7148602],[26.1726013,57.7286746],[26.1409983,57.7327788],[26.1356294,57.7392273],[26.139046,57.7454793],[26.1355074,57.7502978],[26.1053687,57.7570036],[26.0803547,57.7654654],[26.0797446,57.7638383],[26.0732776,57.7637081],[26.0704712,57.7655956],[26.0591234,57.7598678],[26.0489958,57.7611046],[26.0435049,57.7670274],[26.0332553,57.7705416],[26.0237378,57.7676131],[26.0177589,57.7722985],[26.0245919,57.7751615],[26.024958,57.7816025],[26.0225176,57.7835541],[26.0277644,57.7897984],[26.0308149,57.7909691],[26.0333773,57.8010485],[26.0367939,57.8059246],[26.0360617,57.8108],[26.0485077,57.8228883],[26.057049,57.8384152],[26.0555848,57.8476372],[26.0366718,57.8492605],[26.0200772,57.8451696],[26.0095836,57.8573112],[25.9984798,57.8581552],[25.9627282,57.8449098],[25.9310032,57.8524421],[25.8953736,57.849715],[25.8882964,57.8459488],[25.8808533,57.8494553],[25.885734,57.8527667],[25.8842698,57.8559479],[25.8756064,57.8579604],[25.8747523,57.8632183],[25.8594999,57.8561427],[25.8192336,57.8641919],[25.7831159,57.8994831],[25.7862884,57.9042811],[25.7716461,57.9120602],[25.7510248,57.9169213],[25.7372366,57.9229482],[25.7283292,57.9213281],[25.7224723,57.9124491],[25.7035593,57.9033086],[25.6791555,57.9046052],[25.6754949,57.9127732],[25.6620728,57.9151066],[25.6560938,57.9143936],[25.6488947,57.9166621],[25.6498709,57.9184119],[25.638279,57.9305937],[25.5798318,57.9441961],[25.593986,57.9596059],[25.5893493,57.9650431],[25.5823942,57.9678261],[25.5804419,57.9720973],[25.574829,57.9741033],[25.5655556,57.9671789],[25.5660436,57.9625835],[25.5571362,57.9603827],[25.555672,57.9671142],[25.5507912,57.9725502],[25.5372471,57.9713855],[25.5256553,57.9718384],[25.5226048,57.9680203],[25.5163818,57.9673731],[25.5121111,57.9697676],[25.5221167,57.9748797],[25.5194323,57.9803146],[25.4853889,57.9747503],[25.4784338,57.9800558],[25.4784338,57.9826436],[25.4421941,57.9961616],[25.4481731,58.0011406],[25.4664759,58.0051492],[25.4481731,58.0169784],[25.4069306,58.0289329],[25.371545,58.0292559],[25.3637358,58.0317109],[25.3533641,58.0433376],[25.3448228,58.0467603],[25.3360374,58.0570909],[25.3292043,58.0585757],[25.3266419,58.0638042],[25.3198088,58.0659987],[25.3190767,58.0692901],[25.295527,58.0816142],[25.2868636,58.0814852],[25.2811287,58.0701936],[25.2659983,58.0671604],[25.2650222,58.0599959],[25.2799085,58.0506346],[25.2930866,58.0466957],[25.3043124,58.0344888],[25.3011399,58.0150395],[25.2974793,58.014587],[25.3028482,58.0001061],[25.295771,57.9997181],[25.2973573,57.9966143],[25.3035803,57.9939628],[25.3013839,57.9927341],[25.2918664,57.9928634],[25.283081,57.9896296],[25.2672185,57.9945449],[25.2561148,57.9938982],[25.2550166,58.0034682],[25.2454991,58.0030157],[25.2276843,58.0178186],[25.2458652,58.0187234],[25.2356156,58.0228592],[25.2363477,58.02441],[25.2273182,58.0243454],[25.2253659,58.0219545],[25.2190209,58.0297728],[25.2165806,58.0408834],[25.2269522,58.0479872],[25.2281724,58.0534755],[25.2212173,58.0530236],[25.2214613,58.0505055],[25.2178007,58.0490849],[25.2159705,58.059544],[25.2121879,58.0622551],[25.2052328,58.0612223],[25.2038906,58.0650951],[25.2162145,58.07413],[25.2120658,58.0805175],[25.1996199,58.0853558],[25.1894923,58.0800659],[25.1916886,58.0761302],[25.1534966,58.0747752],[25.1515443,58.0770335],[25.1339735,58.0797433],[25.1057871,58.0774852],[25.105177,58.0664505],[25.0766245,58.0664505],[25.0203736,58.0176893],[24.9951156,58.010838],[24.9486263,58.0094159],[24.832342,57.9717737],[24.8080602,57.9906644],[24.7422918,57.9818673],[24.74339,57.9649137],[24.7328963,57.9623894],[24.7150815,57.962713],[24.6918978,57.9465274],[24.6733509,57.9589586],[24.6446764,57.9588939],[24.64187,57.9542327],[24.6457746,57.9526788],[24.6286919,57.9419294],[24.6161239,57.943678],[24.6089248,57.9512544],[24.5846429,57.9617421],[24.5731731,57.9543622],[24.5479151,57.9493766],[24.5435225,57.9447789],[24.5301003,57.9470455],[24.5207049,57.9430304],[24.5183865,57.9367478],[24.5096011,57.9344158],[24.5132617,57.9306585],[24.4625017,57.9249569],[24.445785,57.9079764],[24.4601833,57.906615],[24.4522521,57.8994183],[24.4600613,57.8797658],[24.4113756,57.8649058],[24.4090573,57.8719148],[24.3370659,57.8739264],[24.3382861,58.0109027],[24.4227234,58.0109673],[24.42614,58.280018],[24.5115534,58.2796972],[24.5121635,58.324705],[24.426384,58.3250254],[24.4271161,58.3697196],[24.3418247,58.3701675],[24.3404825,58.2354672],[24.1701436,58.2357242],[24.1701436,58.1907961],[24.0848522,58.1909248],[24.0850962,58.2360454],[24.0006589,58.2357884],[23.9999268,58.2809162],[23.8297099,58.2804671],[23.8294659,58.325538],[23.658639,58.3249613],[23.6579069,58.4149324],[23.5722493,58.4146768],[23.5712732,58.5043556],[23.3993481,58.5035906],[23.4010564,58.4139098],[23.1442059,58.4123759],[23.1456701,58.3673518],[23.0598906,58.3670318],[23.0617209,58.3222061],[22.9756973,58.3215653],[22.9771615,58.2768102],[22.8918701,58.2759761],[22.8935784,58.2310348],[22.808653,58.2301996],[22.8101172,58.1853932],[22.8952866,58.1861008],[22.8966288,58.1413032],[22.726412,58.1398218],[22.7249478,58.18475],[22.555219,58.1827558],[22.5569273,58.1374387],[22.6417307,58.1388557],[22.6434389,58.0939986],[22.3890288,58.0909029],[22.3852462,58.1806329],[22.2999548,58.1796678],[22.3067879,58.045275],[22.2219845,58.0435959],[22.2262552,57.9540384],[22.1420619,57.9528083],[22.1445023,57.9080412],[22.060065,57.9068095],[22.0626274,57.8618552],[21.978068,57.8604272],[21.9683065,58.0400438],[22.0527438,58.0413355],[22.0450566,58.1758075],[21.9603753,58.1747137],[21.9578129,58.219405],[21.78723,58.2163845],[21.7821052,58.3063113],[21.6968137,58.304901],[21.6940073,58.3497486],[21.7794207,58.3512212],[21.7679509,58.5307369],[22.0256555,58.5348771],[22.0279739,58.4900096],[22.1137534,58.4916676],[22.1114351,58.5362146],[22.1970926,58.5374247],[22.1945302,58.5822952],[22.4523568,58.5857297],[22.4463779,58.7203003],[22.3602323,58.7191599],[22.3536433,58.8538478]],[[23.4741459,59.2672589],[23.2986822,59.2663235],[23.2979501,59.3113783],[23.4729257,59.3119388],[23.4741459,59.2672589]],[[24.1701436,58.1907961],[24.255069,58.1907318],[24.2545809,58.1458112],[24.1700216,58.1458756],[24.1701436,58.1907961]],[[24.0848522,58.1909248],[24.0849742,58.1012852],[23.9996827,58.1011563],[23.9999268,58.0563162],[23.9152454,58.0561225],[23.9150014,58.1461332],[23.83032,58.1460044],[23.8297099,58.2357242],[23.9145133,58.2358527],[23.9147573,58.1909891],[24.0848522,58.1909248]],[[24.6185366,59.5361187],[24.4418254,59.5367966],[24.4430922,59.6265878],[24.6201552,59.6258049],[24.6185366,59.5361187]],[[26.4040316,59.7851966],[26.3150064,59.7866741],[26.3181415,59.8315183],[26.4073159,59.8299428],[26.4040316,59.7851966]],[[26.4830816,59.6490028],[26.4864655,59.6938311],[26.5751422,59.692023],[26.5716589,59.6471923],[26.4830816,59.6490028]],[[23.1594369,57.784083],[23.2434645,57.7846083],[23.2444497,57.73971],[23.3284773,57.740311],[23.3267883,57.8299754],[23.1584517,57.8288513],[23.1594369,57.784083]]],"terms_text":"Maa-Ameti põhikaart"},{"id":"maaamet.ee-cir_ngr","name":"Estonia Forestry (Maaamet)","type":"wms","template":"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=cir_ngr&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","polygon":[[[21.6940073,57.5025466],[21.6940073,59.8274564],[28.2110546,59.8274564],[28.2110546,57.5025466],[21.6940073,57.5025466]]],"terms_text":"Maa-Ameti metsanduslik ortofoto"},{"id":"maaamet.ee-reljeef","name":"Estonia Hillshading (Maaamet)","type":"wms","template":"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=reljeef&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","polygon":[[[21.6940073,57.5025466],[21.6940073,59.8274564],[28.2110546,59.8274564],[28.2110546,57.5025466],[21.6940073,57.5025466]]],"terms_text":"Maa-Ameti reljeefikaart"},{"id":"maaamet.ee-orto","name":"Estonia Ortho (Maaamet)","type":"tms","template":"https://tiles.maaamet.ee/tm/tms/1.0.0/foto@GMC/{zoom}/{x}/{-y}.png","scaleExtent":[14,18],"polygon":[[[21.6940073,57.5025466],[21.6940073,59.8274564],[28.2110546,59.8274564],[28.2110546,57.5025466],[21.6940073,57.5025466]]],"terms_text":"Maa-Ameti ortofoto"},{"id":"estrela_de_alagoas","name":"Estrela de Alagoas","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Estrela%20de%20Alagoas&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.71382371133,-9.43475990551],[-36.7147678489,-9.34442676518],[-36.80585566705,-9.34497726095],[-36.80525485223,-9.43541609465],[-36.71382371133,-9.43475990551]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"Fiez-2013","name":"Fiez Orthophoto 2013","type":"tms","template":"http://osmdata.asitvd.ch/tiles/fiez2013/{zoom}/{x}/{y}.png ","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[14,20],"polygon":[[[6.6231344,46.8233863],[6.6289909,46.8248413],[6.6288194,46.8267356],[6.6253097,46.8327384],[6.623822,46.8331744],[6.618386,46.8319393],[6.6231344,46.8233863]]],"terms_url":"http://osmdata.asitvd.ch/","terms_text":"Fiez - Orthophoto technique 2013"},{"id":"FOMI_2000","name":"FÖMI orthophoto 2000","type":"tms","template":"http://e.tile.openstreetmap.hu/ortofoto2000/{zoom}/{x}/{y}.jpg","endDate":"2000-01-01T00:00:00.000Z","startDate":"2000-01-01T00:00:00.000Z","scaleExtent":[0,17],"polygon":[[[16.1139147,46.8691038],[16.1789749,46.90662],[16.2000429,46.9415079],[16.2217547,46.9355441],[16.2462784,46.9463851],[16.2553226,46.9642125],[16.2764694,46.9626082],[16.290583,47.0139849],[16.3016199,46.9992329],[16.3414618,46.9965225],[16.3505162,47.0106313],[16.3734016,46.9985929],[16.412765,47.00475],[16.4332705,46.9927417],[16.4478119,47.003893],[16.479997,46.9941169],[16.5121988,47.0011695],[16.4635584,47.0322699],[16.4478586,47.0227481],[16.439123,47.029663],[16.445673,47.038872],[16.520323,47.056103],[16.473213,47.0736169],[16.4637199,47.09392],[16.500798,47.110058],[16.500035,47.123295],[16.5295349,47.1287419],[16.5171609,47.1496938],[16.454951,47.1425878],[16.4648728,47.1683349],[16.4555643,47.1875584],[16.4305559,47.1847022],[16.4195013,47.1949147],[16.4189215,47.2107114],[16.4371293,47.2097043],[16.4426335,47.2337117],[16.4313127,47.2527554],[16.4671512,47.2531652],[16.4892319,47.2798885],[16.4646338,47.3338455],[16.4337002,47.3528101],[16.458513,47.3670496],[16.4454619,47.4070195],[16.4831657,47.4093628],[16.4963821,47.3892659],[16.5170941,47.4100218],[16.5749054,47.4054243],[16.5807291,47.4191699],[16.661847,47.455595],[16.6706419,47.47422],[16.6523395,47.500342],[16.6895619,47.510161],[16.7147797,47.540199],[16.663545,47.567733],[16.673199,47.6049544],[16.6595343,47.6061018],[16.652758,47.622852],[16.6314207,47.6283176],[16.5739108,47.619667],[16.5147382,47.6461964],[16.4967504,47.6393149],[16.425464,47.6621679],[16.4437449,47.674205],[16.4480507,47.6964725],[16.4746984,47.6811576],[16.4872245,47.6979767],[16.5521729,47.7225519],[16.5363779,47.736785],[16.5479799,47.751544],[16.6095193,47.7603722],[16.6344148,47.7590843],[16.65729,47.7414879],[16.7209405,47.7353565],[16.7534062,47.6828165],[16.8301587,47.681058],[16.8394284,47.7045139],[16.8668943,47.7211462],[16.876679,47.6876452],[17.0937421,47.7077706],[17.0706562,47.7285366],[17.0516019,47.7938499],[17.0749479,47.8084997],[17.047139,47.8285635],[17.0519452,47.8377691],[17.0105513,47.8581765],[17.0163878,47.8673325],[17.0857537,47.8746239],[17.113171,47.9271605],[17.0917133,47.9342916],[17.1183782,47.9601083],[17.094657,47.9708775],[17.2010289,48.019992],[17.241769,48.0224651],[17.257955,47.998655],[17.334651,47.993125],[17.4029929,47.947849],[17.4539199,47.8852579],[17.5267369,47.865509],[17.5675779,47.8151289],[17.608402,47.8218859],[17.7085789,47.756678],[17.7798739,47.739487],[17.8660959,47.74575],[17.9001292,47.7392633],[17.946867,47.744668],[17.9708709,47.7578392],[18.0044103,47.7463402],[18.0380583,47.7576812],[18.2958774,47.7314616],[18.4540681,47.7651226],[18.4931553,47.7527552],[18.5590761,47.7659963],[18.6460866,47.7590921],[18.7260691,47.7890411],[18.7411784,47.8138245],[18.7920013,47.8230869],[18.8485417,47.8167221],[18.855876,47.826077],[18.828014,47.834291],[18.8135749,47.85555],[18.76353,47.8716049],[18.756858,47.896838],[18.776746,47.955092],[18.7552499,47.9763469],[18.8157429,47.993442],[18.819998,48.039676],[18.833268,48.048239],[18.8749364,48.0470707],[18.886674,48.058682],[18.9089819,48.051139],[18.9439039,48.058865],[18.9816099,48.0536009],[19.0148639,48.078179],[19.0585249,48.0573529],[19.0843619,48.072781],[19.107402,48.065596],[19.1352889,48.074146],[19.2413679,48.0536529],[19.2557819,48.0715559],[19.3031119,48.088711],[19.3865969,48.091914],[19.400018,48.082304],[19.454053,48.101436],[19.467354,48.083933],[19.4944199,48.109906],[19.492377,48.1396639],[19.5128219,48.154663],[19.504518,48.173443],[19.528967,48.190358],[19.526044,48.20313],[19.577502,48.2160149],[19.6308263,48.2500725],[19.6445239,48.2391719],[19.669857,48.239212],[19.691219,48.203894],[19.721125,48.201473],[19.74618,48.2165119],[19.7871629,48.19253],[19.7987329,48.19482],[19.8052829,48.183733],[19.782415,48.165039],[19.794812,48.153529],[19.821331,48.169081],[19.8452819,48.162742],[19.8551729,48.178431],[19.8601309,48.169409],[19.898745,48.1663119],[19.9145359,48.146863],[19.898298,48.1249019],[19.937383,48.131118],[19.9743939,48.1660049],[19.988706,48.1621679],[20.029038,48.1776849],[20.049449,48.1671999],[20.0729859,48.179606],[20.0700369,48.1917019],[20.1340909,48.225182],[20.1331879,48.253982],[20.206162,48.250979],[20.2038299,48.261906],[20.228466,48.262779],[20.2349469,48.279933],[20.286858,48.26164],[20.3257109,48.272794],[20.3374649,48.301667],[20.3656579,48.316606],[20.384077,48.3511809],[20.4098349,48.365857],[20.402532,48.382565],[20.4205349,48.403858],[20.416228,48.418536],[20.507929,48.489363],[20.5065069,48.534415],[20.537471,48.527878],[20.5464939,48.544292],[20.586595,48.535759],[20.6538739,48.561413],[20.836359,48.58284],[20.8378,48.57421],[20.8504359,48.5816329],[20.8453301,48.5665046],[20.8681549,48.551818],[20.922323,48.559453],[20.9346349,48.538341],[20.955882,48.533963],[20.9561979,48.521666],[20.9815849,48.5177669],[21.0151139,48.532313],[21.0663209,48.525894],[21.1174479,48.4910549],[21.1608749,48.521499],[21.179634,48.518232],[21.221061,48.537497],[21.305488,48.5222489],[21.313377,48.550841],[21.326875,48.554129],[21.319384,48.561201],[21.4154499,48.558951],[21.4226649,48.578821],[21.4406099,48.585104],[21.514091,48.551065],[21.5420199,48.508395],[21.6139329,48.509416],[21.6201879,48.469826],[21.663549,48.417961],[21.6645609,48.392164],[21.7017409,48.380695],[21.711871,48.357617],[21.8174139,48.332787],[21.8352029,48.3346409],[21.837213,48.363253],[21.8842979,48.356047],[21.8848429,48.367539],[21.897883,48.36256],[21.8997959,48.3702229],[21.9281859,48.3615969],[21.9268059,48.370899],[21.949198,48.378728],[21.994463,48.377323],[22.0213259,48.392749],[22.0546049,48.377528],[22.0764859,48.387241],[22.086743,48.371564],[22.1359089,48.380519],[22.131056,48.3912329],[22.152768,48.3962409],[22.1561913,48.4093076],[22.2125722,48.4256468],[22.2371405,48.4100396],[22.2654858,48.4098675],[22.2398761,48.3870055],[22.2675722,48.3611612],[22.3178106,48.3545437],[22.3132861,48.3250712],[22.3372944,48.3079113],[22.3384267,48.2792074],[22.3847547,48.2339632],[22.4006407,48.249198],[22.4328384,48.2525166],[22.456386,48.2423109],[22.4899029,48.2534237],[22.4972201,48.2395546],[22.5161491,48.237965],[22.5311088,48.2094282],[22.5711442,48.1961428],[22.5616362,48.1816066],[22.5982449,48.144756],[22.5902763,48.1073414],[22.6754492,48.091997],[22.7347192,48.119848],[22.7576242,48.1200599],[22.7703914,48.1090162],[22.772319,48.1218742],[22.8027688,48.1221112],[22.8025285,48.1070813],[22.8254256,48.1175119],[22.8364365,48.080249],[22.8611284,48.0750312],[22.8677955,48.0524256],[22.8820424,48.0548053],[22.8659692,48.0113165],[22.835562,47.9905988],[22.8407599,47.9813636],[22.8725729,47.9752683],[22.8697274,47.9659593],[22.8915652,47.9672446],[22.897435,47.9540629],[22.8473299,47.9077579],[22.7928135,47.8908586],[22.7586924,47.8941446],[22.77775,47.8422508],[22.7136344,47.8360928],[22.6801938,47.7877527],[22.6111171,47.7717455],[22.5490018,47.7722246],[22.4812121,47.8108886],[22.4513078,47.803389],[22.4313319,47.7398119],[22.3566167,47.7486206],[22.3177714,47.7660887],[22.3176236,47.7433657],[22.2851369,47.7292757],[22.264325,47.7310675],[22.2589955,47.6979057],[22.2306796,47.693196],[22.1796501,47.5916115],[22.1289245,47.5978984],[22.0942787,47.5583628],[22.0782587,47.5621299],[22.0534529,47.5474795],[22.0712176,47.5380742],[22.0617872,47.5288029],[22.0451278,47.5398919],[22.0367222,47.5326653],[22.0071886,47.48362],[22.0327909,47.4508372],[22.0238835,47.3908631],[22.0119849,47.3758016],[21.9627373,47.381053],[21.9382461,47.3725317],[21.8777922,47.2857763],[21.8872845,47.2730473],[21.8534909,47.2397622],[21.8580662,47.1873597],[21.8124804,47.1667511],[21.7924092,47.1059751],[21.7268258,47.0983882],[21.6976037,47.057915],[21.6504151,47.0408303],[21.6888701,47.0019977],[21.6678744,46.9712337],[21.6814917,46.9652089],[21.6381964,46.9330487],[21.5984455,46.9274708],[21.6142857,46.8867275],[21.6016694,46.8668202],[21.520328,46.8373749],[21.5186086,46.8000703],[21.4831761,46.7650246],[21.5263389,46.7393249],[21.529369,46.7209721],[21.4923253,46.6859652],[21.4728438,46.6959075],[21.4299047,46.693937],[21.4309553,46.6781367],[21.4546661,46.660863],[21.4162375,46.6426231],[21.4097959,46.6218052],[21.3657038,46.6379501],[21.3300499,46.6318155],[21.3139733,46.617666],[21.3012351,46.5908672],[21.3207905,46.5828562],[21.2743045,46.5407362],[21.2600254,46.5021583],[21.2744188,46.4767333],[21.2964506,46.4762973],[21.3174343,46.4507288],[21.2895176,46.4154784],[21.2963256,46.4069601],[21.2250116,46.4136899],[21.2064214,46.4033825],[21.1992563,46.3479034],[21.1762269,46.3357664],[21.180497,46.3044494],[21.1155437,46.3018529],[21.1030549,46.2624637],[21.0708792,46.2539014],[21.0660827,46.2429394],[21.0366237,46.2480392],[21.0246723,46.2665329],[20.960817,46.2623039],[20.9465849,46.2793024],[20.9250701,46.2766191],[20.9218133,46.2618129],[20.8732713,46.2877555],[20.7756538,46.2759602],[20.7490474,46.2508489],[20.7618619,46.204563],[20.727401,46.2077485],[20.7341052,46.1939355],[20.7140487,46.1660531],[20.6843592,46.1447802],[20.6549178,46.1497739],[20.6394471,46.1267602],[20.5450486,46.1790935],[20.5014839,46.190334],[20.4949436,46.1709908],[20.4592293,46.1428837],[20.3975133,46.1574709],[20.3685325,46.1528554],[20.3557074,46.1696256],[20.2968136,46.1521542],[20.2549024,46.1158522],[20.2484757,46.1300956],[20.2330132,46.1241668],[20.1817362,46.1601137],[20.1364966,46.1449476],[20.1009667,46.1772756],[20.0636156,46.1437275],[20.0346142,46.1458888],[20.0158072,46.1768354],[19.9354075,46.1764243],[19.8533469,46.1500005],[19.8179747,46.1281652],[19.7585403,46.1479754],[19.6982054,46.1879317],[19.6827672,46.1800388],[19.661508,46.1904394],[19.6317396,46.1692993],[19.5676482,46.179106],[19.5604013,46.1665762],[19.5026585,46.1424492],[19.5271208,46.1210269],[19.4645033,46.0953827],[19.4665828,46.0820437],[19.4160037,46.0460453],[19.3803957,46.0358749],[19.3640923,46.0522965],[19.2819012,46.0148048],[19.2965348,45.9881173],[19.2856472,45.9968981],[19.1479857,45.9963445],[19.1338422,46.0370993],[19.104873,46.0401673],[19.0660427,46.0001999],[19.0796791,45.9636376],[19.0059803,45.9590674],[19.0092745,45.9236559],[18.9061334,45.9353801],[18.8794572,45.9166827],[18.8647137,45.9208493],[18.8685629,45.9113361],[18.8276792,45.9051714],[18.8220041,45.9145893],[18.8075092,45.9036055],[18.809247,45.8796189],[18.7956242,45.8784488],[18.7048857,45.9181883],[18.6700246,45.9108439],[18.6596602,45.9168934],[18.6651348,45.899279],[18.6412808,45.8890396],[18.6550179,45.8742393],[18.6277704,45.8733782],[18.6148449,45.8531438],[18.6236656,45.8398531],[18.5732391,45.8137578],[18.5749849,45.8004344],[18.559716,45.8037961],[18.5223504,45.7826858],[18.4906706,45.7947167],[18.4821905,45.7655032],[18.4562828,45.7695229],[18.4450763,45.7605195],[18.446853,45.737128],[18.40763,45.7397119],[18.3918949,45.7616983],[18.3642257,45.7729364],[18.3394214,45.7471605],[18.2968157,45.7612196],[18.2440473,45.7612305],[18.2307311,45.7790328],[18.1908702,45.7878759],[18.1681939,45.7762712],[18.1246514,45.7896277],[18.1068067,45.7708256],[18.0818922,45.7645205],[17.9958808,45.7957311],[17.9302095,45.7863301],[17.9066757,45.7925692],[17.8653145,45.7670064],[17.8262748,45.8099957],[17.8089784,45.8040989],[17.7809054,45.8174884],[17.7603399,45.811923],[17.7408624,45.8295975],[17.6632915,45.8381849],[17.6276211,45.8979446],[17.5700676,45.9358204],[17.4378254,45.9503823],[17.4258964,45.9272681],[17.4108059,45.9399665],[17.392149,45.9302149],[17.3828713,45.9475733],[17.3476208,45.9423413],[17.3438769,45.9605329],[17.3537711,45.9525011],[17.3905375,45.9581914],[17.387423,45.9661823],[17.3583539,45.9642737],[17.3754852,45.9686921],[17.3751895,45.9881054],[17.3635685,45.9915442],[17.3567202,45.9735836],[17.3339583,45.9960781],[17.3319847,45.9728948],[17.3129974,45.9665347],[17.323647,45.9887776],[17.2987653,45.9838652],[17.3041996,46.0021128],[17.2579726,46.0110256],[17.29632,46.0285169],[17.2541514,46.030005],[17.270955,46.0567055],[17.2324767,46.0592034],[17.2525145,46.0664725],[17.2313144,46.0790345],[17.2019916,46.0765488],[17.2331299,46.0989644],[17.2104017,46.1001693],[17.2129734,46.113855],[17.175927,46.1084583],[17.1743424,46.1287608],[17.1865197,46.1332308],[17.1810983,46.1505485],[17.1562307,46.1585819],[17.1592857,46.1696818],[17.1261012,46.1684495],[17.1227409,46.1789791],[17.0752482,46.1889531],[17.0661614,46.2022984],[16.9735401,46.2251982],[16.973954,46.2431113],[16.9504085,46.2415285],[16.8862356,46.2814598],[16.8713682,46.3252767],[16.8802109,46.3356966],[16.8615374,46.3452401],[16.8656232,46.3556489],[16.8521959,46.3517189],[16.8498589,46.3626245],[16.8352859,46.3638195],[16.8376499,46.3748032],[16.8261732,46.3670994],[16.7933444,46.387385],[16.7592072,46.3776563],[16.7298672,46.40149],[16.7182119,46.3898704],[16.6772872,46.4494536],[16.6631785,46.4486958],[16.6663732,46.4582995],[16.6187915,46.4619875],[16.604468,46.4760773],[16.5235997,46.5053761],[16.5325768,46.5314027],[16.5176728,46.5363516],[16.5084107,46.5652692],[16.4829969,46.5660383],[16.4834008,46.5786011],[16.4455713,46.610952],[16.4248583,46.6131645],[16.385941,46.6442485],[16.3915424,46.6637257],[16.4198454,46.6584771],[16.4286335,46.6939737],[16.3689211,46.7040082],[16.3798266,46.7153869],[16.3710856,46.7222945],[16.3570587,46.7142387],[16.3185954,46.7541449],[16.3305417,46.7752119],[16.3121626,46.7780033],[16.3127666,46.797314],[16.3406373,46.8051851],[16.3508404,46.8300552],[16.3403309,46.8468762],[16.3015007,46.8595142],[16.2913867,46.8728341],[16.2332296,46.8766702],[16.1560866,46.8537074],[16.126571,46.8569079],[16.1139147,46.8691038]]],"terms_url":"https://www.fomi.hu","terms_text":"Földmérési és Távérzékelési Intézet"},{"id":"FOMI_2005","name":"FÖMI orthophoto 2005","type":"tms","template":"http://e.tile.openstreetmap.hu/ortofoto2005/{zoom}/{x}/{y}.jpg","endDate":"2005-01-01T00:00:00.000Z","startDate":"2005-01-01T00:00:00.000Z","scaleExtent":[0,17],"polygon":[[[16.1139147,46.8691038],[16.1789749,46.90662],[16.2000429,46.9415079],[16.2217547,46.9355441],[16.2462784,46.9463851],[16.2553226,46.9642125],[16.2764694,46.9626082],[16.290583,47.0139849],[16.3016199,46.9992329],[16.3414618,46.9965225],[16.3505162,47.0106313],[16.3734016,46.9985929],[16.412765,47.00475],[16.4332705,46.9927417],[16.4478119,47.003893],[16.479997,46.9941169],[16.5121988,47.0011695],[16.4635584,47.0322699],[16.4478586,47.0227481],[16.439123,47.029663],[16.445673,47.038872],[16.520323,47.056103],[16.473213,47.0736169],[16.4637199,47.09392],[16.500798,47.110058],[16.500035,47.123295],[16.5295349,47.1287419],[16.5171609,47.1496938],[16.454951,47.1425878],[16.4648728,47.1683349],[16.4555643,47.1875584],[16.4305559,47.1847022],[16.4195013,47.1949147],[16.4189215,47.2107114],[16.4371293,47.2097043],[16.4426335,47.2337117],[16.4313127,47.2527554],[16.4671512,47.2531652],[16.4892319,47.2798885],[16.4646338,47.3338455],[16.4337002,47.3528101],[16.458513,47.3670496],[16.4454619,47.4070195],[16.4831657,47.4093628],[16.4963821,47.3892659],[16.5170941,47.4100218],[16.5749054,47.4054243],[16.5807291,47.4191699],[16.661847,47.455595],[16.6706419,47.47422],[16.6523395,47.500342],[16.6895619,47.510161],[16.7147797,47.540199],[16.663545,47.567733],[16.673199,47.6049544],[16.6595343,47.6061018],[16.652758,47.622852],[16.6314207,47.6283176],[16.5739108,47.619667],[16.5147382,47.6461964],[16.4967504,47.6393149],[16.425464,47.6621679],[16.4437449,47.674205],[16.4480507,47.6964725],[16.4746984,47.6811576],[16.4872245,47.6979767],[16.5521729,47.7225519],[16.5363779,47.736785],[16.5479799,47.751544],[16.6095193,47.7603722],[16.6344148,47.7590843],[16.65729,47.7414879],[16.7209405,47.7353565],[16.7534062,47.6828165],[16.8301587,47.681058],[16.8394284,47.7045139],[16.8668943,47.7211462],[16.876679,47.6876452],[17.0937421,47.7077706],[17.0706562,47.7285366],[17.0516019,47.7938499],[17.0749479,47.8084997],[17.047139,47.8285635],[17.0519452,47.8377691],[17.0105513,47.8581765],[17.0163878,47.8673325],[17.0857537,47.8746239],[17.113171,47.9271605],[17.0917133,47.9342916],[17.1183782,47.9601083],[17.094657,47.9708775],[17.2010289,48.019992],[17.241769,48.0224651],[17.257955,47.998655],[17.334651,47.993125],[17.4029929,47.947849],[17.4539199,47.8852579],[17.5267369,47.865509],[17.5675779,47.8151289],[17.608402,47.8218859],[17.7085789,47.756678],[17.7798739,47.739487],[17.8660959,47.74575],[17.9001292,47.7392633],[17.946867,47.744668],[17.9708709,47.7578392],[18.0044103,47.7463402],[18.0380583,47.7576812],[18.2958774,47.7314616],[18.4540681,47.7651226],[18.4931553,47.7527552],[18.5590761,47.7659963],[18.6460866,47.7590921],[18.7260691,47.7890411],[18.7411784,47.8138245],[18.7920013,47.8230869],[18.8485417,47.8167221],[18.855876,47.826077],[18.828014,47.834291],[18.8135749,47.85555],[18.76353,47.8716049],[18.756858,47.896838],[18.776746,47.955092],[18.7552499,47.9763469],[18.8157429,47.993442],[18.819998,48.039676],[18.833268,48.048239],[18.8749364,48.0470707],[18.886674,48.058682],[18.9089819,48.051139],[18.9439039,48.058865],[18.9816099,48.0536009],[19.0148639,48.078179],[19.0585249,48.0573529],[19.0843619,48.072781],[19.107402,48.065596],[19.1352889,48.074146],[19.2413679,48.0536529],[19.2557819,48.0715559],[19.3031119,48.088711],[19.3865969,48.091914],[19.400018,48.082304],[19.454053,48.101436],[19.467354,48.083933],[19.4944199,48.109906],[19.492377,48.1396639],[19.5128219,48.154663],[19.504518,48.173443],[19.528967,48.190358],[19.526044,48.20313],[19.577502,48.2160149],[19.6308263,48.2500725],[19.6445239,48.2391719],[19.669857,48.239212],[19.691219,48.203894],[19.721125,48.201473],[19.74618,48.2165119],[19.7871629,48.19253],[19.7987329,48.19482],[19.8052829,48.183733],[19.782415,48.165039],[19.794812,48.153529],[19.821331,48.169081],[19.8452819,48.162742],[19.8551729,48.178431],[19.8601309,48.169409],[19.898745,48.1663119],[19.9145359,48.146863],[19.898298,48.1249019],[19.937383,48.131118],[19.9743939,48.1660049],[19.988706,48.1621679],[20.029038,48.1776849],[20.049449,48.1671999],[20.0729859,48.179606],[20.0700369,48.1917019],[20.1340909,48.225182],[20.1331879,48.253982],[20.206162,48.250979],[20.2038299,48.261906],[20.228466,48.262779],[20.2349469,48.279933],[20.286858,48.26164],[20.3257109,48.272794],[20.3374649,48.301667],[20.3656579,48.316606],[20.384077,48.3511809],[20.4098349,48.365857],[20.402532,48.382565],[20.4205349,48.403858],[20.416228,48.418536],[20.507929,48.489363],[20.5065069,48.534415],[20.537471,48.527878],[20.5464939,48.544292],[20.586595,48.535759],[20.6538739,48.561413],[20.836359,48.58284],[20.8378,48.57421],[20.8504359,48.5816329],[20.8453301,48.5665046],[20.8681549,48.551818],[20.922323,48.559453],[20.9346349,48.538341],[20.955882,48.533963],[20.9561979,48.521666],[20.9815849,48.5177669],[21.0151139,48.532313],[21.0663209,48.525894],[21.1174479,48.4910549],[21.1608749,48.521499],[21.179634,48.518232],[21.221061,48.537497],[21.305488,48.5222489],[21.313377,48.550841],[21.326875,48.554129],[21.319384,48.561201],[21.4154499,48.558951],[21.4226649,48.578821],[21.4406099,48.585104],[21.514091,48.551065],[21.5420199,48.508395],[21.6139329,48.509416],[21.6201879,48.469826],[21.663549,48.417961],[21.6645609,48.392164],[21.7017409,48.380695],[21.711871,48.357617],[21.8174139,48.332787],[21.8352029,48.3346409],[21.837213,48.363253],[21.8842979,48.356047],[21.8848429,48.367539],[21.897883,48.36256],[21.8997959,48.3702229],[21.9281859,48.3615969],[21.9268059,48.370899],[21.949198,48.378728],[21.994463,48.377323],[22.0213259,48.392749],[22.0546049,48.377528],[22.0764859,48.387241],[22.086743,48.371564],[22.1359089,48.380519],[22.131056,48.3912329],[22.152768,48.3962409],[22.1561913,48.4093076],[22.2125722,48.4256468],[22.2371405,48.4100396],[22.2654858,48.4098675],[22.2398761,48.3870055],[22.2675722,48.3611612],[22.3178106,48.3545437],[22.3132861,48.3250712],[22.3372944,48.3079113],[22.3384267,48.2792074],[22.3847547,48.2339632],[22.4006407,48.249198],[22.4328384,48.2525166],[22.456386,48.2423109],[22.4899029,48.2534237],[22.4972201,48.2395546],[22.5161491,48.237965],[22.5311088,48.2094282],[22.5711442,48.1961428],[22.5616362,48.1816066],[22.5982449,48.144756],[22.5902763,48.1073414],[22.6754492,48.091997],[22.7347192,48.119848],[22.7576242,48.1200599],[22.7703914,48.1090162],[22.772319,48.1218742],[22.8027688,48.1221112],[22.8025285,48.1070813],[22.8254256,48.1175119],[22.8364365,48.080249],[22.8611284,48.0750312],[22.8677955,48.0524256],[22.8820424,48.0548053],[22.8659692,48.0113165],[22.835562,47.9905988],[22.8407599,47.9813636],[22.8725729,47.9752683],[22.8697274,47.9659593],[22.8915652,47.9672446],[22.897435,47.9540629],[22.8473299,47.9077579],[22.7928135,47.8908586],[22.7586924,47.8941446],[22.77775,47.8422508],[22.7136344,47.8360928],[22.6801938,47.7877527],[22.6111171,47.7717455],[22.5490018,47.7722246],[22.4812121,47.8108886],[22.4513078,47.803389],[22.4313319,47.7398119],[22.3566167,47.7486206],[22.3177714,47.7660887],[22.3176236,47.7433657],[22.2851369,47.7292757],[22.264325,47.7310675],[22.2589955,47.6979057],[22.2306796,47.693196],[22.1796501,47.5916115],[22.1289245,47.5978984],[22.0942787,47.5583628],[22.0782587,47.5621299],[22.0534529,47.5474795],[22.0712176,47.5380742],[22.0617872,47.5288029],[22.0451278,47.5398919],[22.0367222,47.5326653],[22.0071886,47.48362],[22.0327909,47.4508372],[22.0238835,47.3908631],[22.0119849,47.3758016],[21.9627373,47.381053],[21.9382461,47.3725317],[21.8777922,47.2857763],[21.8872845,47.2730473],[21.8534909,47.2397622],[21.8580662,47.1873597],[21.8124804,47.1667511],[21.7924092,47.1059751],[21.7268258,47.0983882],[21.6976037,47.057915],[21.6504151,47.0408303],[21.6888701,47.0019977],[21.6678744,46.9712337],[21.6814917,46.9652089],[21.6381964,46.9330487],[21.5984455,46.9274708],[21.6142857,46.8867275],[21.6016694,46.8668202],[21.520328,46.8373749],[21.5186086,46.8000703],[21.4831761,46.7650246],[21.5263389,46.7393249],[21.529369,46.7209721],[21.4923253,46.6859652],[21.4728438,46.6959075],[21.4299047,46.693937],[21.4309553,46.6781367],[21.4546661,46.660863],[21.4162375,46.6426231],[21.4097959,46.6218052],[21.3657038,46.6379501],[21.3300499,46.6318155],[21.3139733,46.617666],[21.3012351,46.5908672],[21.3207905,46.5828562],[21.2743045,46.5407362],[21.2600254,46.5021583],[21.2744188,46.4767333],[21.2964506,46.4762973],[21.3174343,46.4507288],[21.2895176,46.4154784],[21.2963256,46.4069601],[21.2250116,46.4136899],[21.2064214,46.4033825],[21.1992563,46.3479034],[21.1762269,46.3357664],[21.180497,46.3044494],[21.1155437,46.3018529],[21.1030549,46.2624637],[21.0708792,46.2539014],[21.0660827,46.2429394],[21.0366237,46.2480392],[21.0246723,46.2665329],[20.960817,46.2623039],[20.9465849,46.2793024],[20.9250701,46.2766191],[20.9218133,46.2618129],[20.8732713,46.2877555],[20.7756538,46.2759602],[20.7490474,46.2508489],[20.7618619,46.204563],[20.727401,46.2077485],[20.7341052,46.1939355],[20.7140487,46.1660531],[20.6843592,46.1447802],[20.6549178,46.1497739],[20.6394471,46.1267602],[20.5450486,46.1790935],[20.5014839,46.190334],[20.4949436,46.1709908],[20.4592293,46.1428837],[20.3975133,46.1574709],[20.3685325,46.1528554],[20.3557074,46.1696256],[20.2968136,46.1521542],[20.2549024,46.1158522],[20.2484757,46.1300956],[20.2330132,46.1241668],[20.1817362,46.1601137],[20.1364966,46.1449476],[20.1009667,46.1772756],[20.0636156,46.1437275],[20.0346142,46.1458888],[20.0158072,46.1768354],[19.9354075,46.1764243],[19.8533469,46.1500005],[19.8179747,46.1281652],[19.7585403,46.1479754],[19.6982054,46.1879317],[19.6827672,46.1800388],[19.661508,46.1904394],[19.6317396,46.1692993],[19.5676482,46.179106],[19.5604013,46.1665762],[19.5026585,46.1424492],[19.5271208,46.1210269],[19.4645033,46.0953827],[19.4665828,46.0820437],[19.4160037,46.0460453],[19.3803957,46.0358749],[19.3640923,46.0522965],[19.2819012,46.0148048],[19.2965348,45.9881173],[19.2856472,45.9968981],[19.1479857,45.9963445],[19.1338422,46.0370993],[19.104873,46.0401673],[19.0660427,46.0001999],[19.0796791,45.9636376],[19.0059803,45.9590674],[19.0092745,45.9236559],[18.9061334,45.9353801],[18.8794572,45.9166827],[18.8647137,45.9208493],[18.8685629,45.9113361],[18.8276792,45.9051714],[18.8220041,45.9145893],[18.8075092,45.9036055],[18.809247,45.8796189],[18.7956242,45.8784488],[18.7048857,45.9181883],[18.6700246,45.9108439],[18.6596602,45.9168934],[18.6651348,45.899279],[18.6412808,45.8890396],[18.6550179,45.8742393],[18.6277704,45.8733782],[18.6148449,45.8531438],[18.6236656,45.8398531],[18.5732391,45.8137578],[18.5749849,45.8004344],[18.559716,45.8037961],[18.5223504,45.7826858],[18.4906706,45.7947167],[18.4821905,45.7655032],[18.4562828,45.7695229],[18.4450763,45.7605195],[18.446853,45.737128],[18.40763,45.7397119],[18.3918949,45.7616983],[18.3642257,45.7729364],[18.3394214,45.7471605],[18.2968157,45.7612196],[18.2440473,45.7612305],[18.2307311,45.7790328],[18.1908702,45.7878759],[18.1681939,45.7762712],[18.1246514,45.7896277],[18.1068067,45.7708256],[18.0818922,45.7645205],[17.9958808,45.7957311],[17.9302095,45.7863301],[17.9066757,45.7925692],[17.8653145,45.7670064],[17.8262748,45.8099957],[17.8089784,45.8040989],[17.7809054,45.8174884],[17.7603399,45.811923],[17.7408624,45.8295975],[17.6632915,45.8381849],[17.6276211,45.8979446],[17.5700676,45.9358204],[17.4378254,45.9503823],[17.4258964,45.9272681],[17.4108059,45.9399665],[17.392149,45.9302149],[17.3828713,45.9475733],[17.3476208,45.9423413],[17.3438769,45.9605329],[17.3537711,45.9525011],[17.3905375,45.9581914],[17.387423,45.9661823],[17.3583539,45.9642737],[17.3754852,45.9686921],[17.3751895,45.9881054],[17.3635685,45.9915442],[17.3567202,45.9735836],[17.3339583,45.9960781],[17.3319847,45.9728948],[17.3129974,45.9665347],[17.323647,45.9887776],[17.2987653,45.9838652],[17.3041996,46.0021128],[17.2579726,46.0110256],[17.29632,46.0285169],[17.2541514,46.030005],[17.270955,46.0567055],[17.2324767,46.0592034],[17.2525145,46.0664725],[17.2313144,46.0790345],[17.2019916,46.0765488],[17.2331299,46.0989644],[17.2104017,46.1001693],[17.2129734,46.113855],[17.175927,46.1084583],[17.1743424,46.1287608],[17.1865197,46.1332308],[17.1810983,46.1505485],[17.1562307,46.1585819],[17.1592857,46.1696818],[17.1261012,46.1684495],[17.1227409,46.1789791],[17.0752482,46.1889531],[17.0661614,46.2022984],[16.9735401,46.2251982],[16.973954,46.2431113],[16.9504085,46.2415285],[16.8862356,46.2814598],[16.8713682,46.3252767],[16.8802109,46.3356966],[16.8615374,46.3452401],[16.8656232,46.3556489],[16.8521959,46.3517189],[16.8498589,46.3626245],[16.8352859,46.3638195],[16.8376499,46.3748032],[16.8261732,46.3670994],[16.7933444,46.387385],[16.7592072,46.3776563],[16.7298672,46.40149],[16.7182119,46.3898704],[16.6772872,46.4494536],[16.6631785,46.4486958],[16.6663732,46.4582995],[16.6187915,46.4619875],[16.604468,46.4760773],[16.5235997,46.5053761],[16.5325768,46.5314027],[16.5176728,46.5363516],[16.5084107,46.5652692],[16.4829969,46.5660383],[16.4834008,46.5786011],[16.4455713,46.610952],[16.4248583,46.6131645],[16.385941,46.6442485],[16.3915424,46.6637257],[16.4198454,46.6584771],[16.4286335,46.6939737],[16.3689211,46.7040082],[16.3798266,46.7153869],[16.3710856,46.7222945],[16.3570587,46.7142387],[16.3185954,46.7541449],[16.3305417,46.7752119],[16.3121626,46.7780033],[16.3127666,46.797314],[16.3406373,46.8051851],[16.3508404,46.8300552],[16.3403309,46.8468762],[16.3015007,46.8595142],[16.2913867,46.8728341],[16.2332296,46.8766702],[16.1560866,46.8537074],[16.126571,46.8569079],[16.1139147,46.8691038]]],"terms_url":"https://www.fomi.hu","terms_text":"Földmérési és Távérzékelési Intézet"},{"id":"Freemap.sk-Car","name":"Freemap.sk Car","type":"tms","template":"https://{switch:a,b,c,d}.freemap.sk/A/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved.","icon":"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{"id":"Freemap.sk-Cyclo","name":"Freemap.sk Cyclo","type":"tms","template":"https://{switch:a,b,c,d}.freemap.sk/C/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved.","icon":"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{"id":"Freemap.sk-Hiking","name":"Freemap.sk Hiking","type":"tms","template":"https://{switch:a,b,c,d}.freemap.sk/T/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved.","icon":"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{"id":"Freemap.sk-Ski","name":"Freemap.sk Ski","type":"tms","template":"https://{switch:a,b,c,d}.freemap.sk/K/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved.","icon":"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{"id":"fta-digiroad-functional","name":"FTA Road Network","type":"wms","template":"https://extranet.liikennevirasto.fi/inspirepalvelu/beta/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=dr_tielinkki_toim_lk&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[3,20],"polygon":[[[27.5317328,60.2179935],[31.3549585,62.5123281],[31.6351264,62.9077314],[30.0915418,64.9188897],[30.2123914,65.8747292],[29.1357313,66.9042207],[30.1904078,67.676093],[28.7072645,68.4274779],[29.025868,68.9505042],[29.4872938,69.5882321],[27.9492078,70.1329023],[26.4001356,69.9491461],[25.861811,69.6933403],[24.9499292,68.6245517],[23.9227186,68.8536149],[22.9064832,68.6985045],[21.4288221,69.3841854],[20.4235621,69.0430447],[23.269032,67.986995],[23.5217176,66.297794],[24.10396,65.869129],[24.1149793,65.3943022],[21.4123426,63.6511407],[20.1708766,63.1989825],[19.0818678,60.1907003],[20.5004774,59.2096939],[27.5317328,60.2179935]]],"terms_url":"https://www.liikennevirasto.fi/web/en/open-data/digiroad/","terms_text":"© Liikennevirasto","description":"Digiroad national road network from the Finnish Transport Agency, functional road classes.","icon":"https://www.liikennevirasto.fi/livi-theme/images/general/liikennevirasto_logo_2x.png","overlay":true},{"id":"Geobase_Hydrography","name":"Geobase Hydrography - English","type":"wms","template":"https://maps.geogratis.gc.ca/wms/hydro_network_en?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=nhn:nhn&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.1923701,48.6550408],[-122.9958159,48.5106543],[-122.4868966,48.4098005],[-122.3291531,48.4527983],[-122.229391,48.5064943],[-122.1790836,48.5296509],[-122.1841996,48.566905],[-121.7783298,48.5759321],[-121.6657777,48.4279093],[-121.3306793,48.3571354],[-121.0271296,48.3497692],[-121.0305403,48.4940645],[-120.6979999,48.5149675],[-120.510413,48.8718034],[-119.9757904,48.8813368],[-119.9544737,48.5149675],[-119.907577,48.2942056],[-119.7319275,48.1550316],[-119.7438648,48.0741943],[-119.622786,48.1095051],[-119.602322,48.1470674],[-119.2527283,48.1624259],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]],"overlay":true},{"id":"Geobase_Hydrography_French","name":"Geobase Hydrography - French","type":"wms","template":"https://maps.geogratis.gc.ca/wms/hydro_network_fr?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=nhn:nhn&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.1923701,48.6550408],[-122.9958159,48.5106543],[-122.4868966,48.4098005],[-122.3291531,48.4527983],[-122.229391,48.5064943],[-122.1790836,48.5296509],[-122.1841996,48.566905],[-121.7783298,48.5759321],[-121.6657777,48.4279093],[-121.3306793,48.3571354],[-121.0271296,48.3497692],[-121.0305403,48.4940645],[-120.6979999,48.5149675],[-120.510413,48.8718034],[-119.9757904,48.8813368],[-119.9544737,48.5149675],[-119.907577,48.2942056],[-119.7319275,48.1550316],[-119.7438648,48.0741943],[-119.622786,48.1095051],[-119.602322,48.1470674],[-119.2527283,48.1624259],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]],"overlay":true},{"id":"Geobase_Roads","name":"Geobase Roads - English","type":"wms","template":"https://maps.geogratis.gc.ca/wms/roads_en?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=roads&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[4,20],"polygon":[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.1923701,48.6550408],[-122.9958159,48.5106543],[-122.4868966,48.4098005],[-122.3291531,48.4527983],[-122.229391,48.5064943],[-122.1790836,48.5296509],[-122.1841996,48.566905],[-121.7783298,48.5759321],[-121.6657777,48.4279093],[-121.3306793,48.3571354],[-121.0271296,48.3497692],[-121.0305403,48.4940645],[-120.6979999,48.5149675],[-120.510413,48.8718034],[-119.9757904,48.8813368],[-119.9544737,48.5149675],[-119.907577,48.2942056],[-119.7319275,48.1550316],[-119.7438648,48.0741943],[-119.622786,48.1095051],[-119.602322,48.1470674],[-119.2527283,48.1624259],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{"id":"Geobase_Roads_French","name":"Geobase Roads - French","type":"wms","template":"https://cartes.geogratis.gc.ca/wms/roads_fr?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=routes&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[4,20],"polygon":[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.1923701,48.6550408],[-122.9958159,48.5106543],[-122.4868966,48.4098005],[-122.3291531,48.4527983],[-122.229391,48.5064943],[-122.1790836,48.5296509],[-122.1841996,48.566905],[-121.7783298,48.5759321],[-121.6657777,48.4279093],[-121.3306793,48.3571354],[-121.0271296,48.3497692],[-121.0305403,48.4940645],[-120.6979999,48.5149675],[-120.510413,48.8718034],[-119.9757904,48.8813368],[-119.9544737,48.5149675],[-119.907577,48.2942056],[-119.7319275,48.1550316],[-119.7438648,48.0741943],[-119.622786,48.1095051],[-119.602322,48.1470674],[-119.2527283,48.1624259],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{"id":"geoimage.at","name":"Geoimage.at MaxRes","type":"wms","template":"http://gis.lebensministerium.at/wmsgw/?key=4d80de696cd562a63ce463a58a61488d&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Luftbild_MR,Luftbild_1m,Luftbild_8m,Satellitenbild_30m&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[16.5073284,46.9929304],[16.283417,46.9929304],[16.135839,46.8713046],[15.9831722,46.8190947],[16.0493278,46.655175],[15.8610387,46.7180116],[15.7592608,46.6900933],[15.5607938,46.6796202],[15.5760605,46.6342132],[15.4793715,46.6027553],[15.4335715,46.6516819],[15.2249267,46.6342132],[15.0468154,46.6481886],[14.9908376,46.5887681],[14.9603042,46.6237293],[14.8534374,46.6027553],[14.8330818,46.5012666],[14.7516595,46.4977636],[14.6804149,46.4381781],[14.6142593,46.4381781],[14.578637,46.3785275],[14.4412369,46.4311638],[14.1613476,46.4276563],[14.1257253,46.4767409],[14.0188585,46.4767409],[13.9119917,46.5257813],[13.8254805,46.5047694],[13.4438134,46.560783],[13.3064132,46.5502848],[13.1283019,46.5887681],[12.8433237,46.6132433],[12.7262791,46.6412014],[12.5125455,46.6656529],[12.3598787,46.7040543],[12.3649676,46.7703197],[12.2886341,46.7772902],[12.2733674,46.8852187],[12.2072118,46.8747835],[12.1308784,46.9026062],[12.1156117,46.9998721],[12.2530119,47.0657733],[12.2123007,47.0934969],[11.9833004,47.0449712],[11.7339445,46.9616816],[11.6321666,47.010283],[11.5405665,46.9755722],[11.4998553,47.0068129],[11.418433,46.9651546],[11.2555884,46.9755722],[11.1130993,46.913036],[11.0418548,46.7633482],[10.8891879,46.7598621],[10.7416099,46.7842599],[10.7059877,46.8643462],[10.5787653,46.8399847],[10.4566318,46.8504267],[10.4769874,46.9269392],[10.3853873,46.9894592],[10.2327204,46.8643462],[10.1207647,46.8330223],[9.8663199,46.9408389],[9.9019422,47.0033426],[9.6831197,47.0588402],[9.6118752,47.0380354],[9.6322307,47.128131],[9.5813418,47.1662025],[9.5406306,47.2664422],[9.6067863,47.3492559],[9.6729419,47.369939],[9.6424085,47.4457079],[9.5660751,47.4801122],[9.7136531,47.5282405],[9.7848976,47.5969187],[9.8357866,47.5454185],[9.9477423,47.538548],[10.0902313,47.4491493],[10.1105869,47.3664924],[10.2428982,47.3871688],[10.1869203,47.2698953],[10.3243205,47.2975125],[10.4820763,47.4491493],[10.4311873,47.4869904],[10.4413651,47.5900549],[10.4871652,47.5522881],[10.5482319,47.5351124],[10.5991209,47.5660246],[10.7568766,47.5316766],[10.8891879,47.5454185],[10.9400769,47.4869904],[10.9960547,47.3906141],[11.2352328,47.4422662],[11.2810328,47.3975039],[11.4235219,47.5144941],[11.5761888,47.5076195],[11.6067221,47.5900549],[11.8357224,47.5866227],[12.003656,47.6243647],[12.2072118,47.6037815],[12.1614117,47.6963421],[12.2581008,47.7442718],[12.2530119,47.6792136],[12.4311232,47.7100408],[12.4921899,47.631224],[12.5685234,47.6277944],[12.6295901,47.6894913],[12.7720792,47.6689338],[12.8331459,47.5419833],[12.975635,47.4732332],[13.0417906,47.4938677],[13.0367017,47.5557226],[13.0977685,47.6415112],[13.0316128,47.7100408],[12.9043905,47.7203125],[13.0061684,47.84683],[12.9451016,47.9355501],[12.8636793,47.9594103],[12.8636793,48.0036929],[12.7517236,48.0989418],[12.8738571,48.2109733],[12.9603683,48.2109733],[13.0417906,48.2652035],[13.1842797,48.2990682],[13.2606131,48.2922971],[13.3980133,48.3565867],[13.4438134,48.417418],[13.4387245,48.5523383],[13.509969,48.5860123],[13.6117469,48.5725454],[13.7287915,48.5118999],[13.7847694,48.5725454],[13.8203916,48.6263915],[13.7949471,48.7171267],[13.850925,48.7741724],[14.0595697,48.6633774],[14.0137696,48.6331182],[14.0748364,48.5927444],[14.2173255,48.5961101],[14.3649034,48.5489696],[14.4666813,48.6499311],[14.5582815,48.5961101],[14.5989926,48.6263915],[14.7211261,48.5759124],[14.7211261,48.6868997],[14.822904,48.7271983],[14.8178151,48.777526],[14.9647227,48.7851754],[14.9893637,49.0126611],[15.1485933,48.9950306],[15.1943934,48.9315502],[15.3063491,48.9850128],[15.3928603,48.9850128],[15.4844604,48.9282069],[15.749083,48.8545973],[15.8406831,48.8880697],[16.0086166,48.7808794],[16.2070835,48.7339115],[16.3953727,48.7372678],[16.4920617,48.8110498],[16.6905286,48.7741724],[16.7057953,48.7339115],[16.8991733,48.713769],[16.9755067,48.515271],[16.8482844,48.4511817],[16.8533733,48.3464411],[16.9551512,48.2516513],[16.9907734,48.1498955],[17.0925513,48.1397088],[17.0823736,48.0241182],[17.1739737,48.0207146],[17.0823736,47.8741447],[16.9856845,47.8673174],[17.0823736,47.8092489],[17.0925513,47.7031919],[16.7414176,47.6792136],[16.7057953,47.7511153],[16.5378617,47.7545368],[16.5480395,47.7066164],[16.4208172,47.6689338],[16.573484,47.6175045],[16.670173,47.631224],[16.7108842,47.538548],[16.6599952,47.4491493],[16.5429506,47.3940591],[16.4615283,47.3940591],[16.4920617,47.276801],[16.425906,47.1973317],[16.4717061,47.1489007],[16.5480395,47.1489007],[16.476795,47.0796369],[16.527684,47.0588402],[16.5073284,46.9929304]]],"terms_url":"http://geoimage.at","terms_text":"geoimage.at","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QwTFA8gQvGHigAAAwtJREFUOMvtk19oW1Ucx7/nnntukpvGtF2btHG1o52bYxULOp99sYggiM7pVKbbQNCH+SYOFMHCHhR88g9jjPmgm32YMpGNTbpp1W5D7NyfJnYLTdNm3ZI0SZPc5N5zzz3n+CIiCtM9+KQf+D39+H74Pfy+wH8Ocqvlh4enyblMO7JpKHl/X080sbhcnH3r3eNXkR1XtyU8cHiS2Hakf+iuxJ7enq7n4x12ijFDtz3fW11tzBZL1YMnpjKfvrN3m/O3ws+OTRnxmP1gsrf7g2RizUbGLCtkGdSkBnigtPCFaLXc1ZvF8vfZXOG1HdvGcn/M0z8Ln9nx8vBAas0ngwN9dzPGmGlSCkIMrTQxQABCSDjE2B2xyJ2E0A0d/Q+cPP/tMb7v0Kwx+tBz5PcL9350mXZFVuzR4b73Nm3o326HQpYdNonWMEAIgdZQWmvP8yECpZptKetNtzqTLkz8UpBfKmJ1tJo1SgBgfP8V2mhVn2JYet0Osc09Xabp+DFdbpgkV7SQ6jbRdCXaHAgU4AsFj0sQAFGbgguNhsPRqiyeM/d/PkezS4WxRilzpLM5ga5EEu5qGJvXDZFDuXvA4sO4b30MXCi4XCLRGYZhaFQaEtTQ6I5bKNV8HJ3ML1cLM+Pm1fnCaNFZmLhRORkkUltIpl2mI/duxMW8Rk0N4okRG3OLDtb2RlB3AthhgXI9QLbgIp13QQ0CrQSEU57JnX3/OBnbfWBfpVIZjEb7DClb8WRv50jMDqesSNzwpU+UFAiZFIGmaHsKFjNAKNOub8LhkC6XbiD4wvXLR19dOH/wzF9+8McL6Uev31jJNlrc8Xjg+4GSvlBKSKXaLpfFUk3kl5bddOZa7dTk1PTT2194DED3LfqxlZz+7qc35uZvXitXHdf1ROALKX+boO353nKpXr2UyU9/deLMzn9aPfLNDz+/NLC2/0WDhgZNxnqYSUzOA0f4vMg9J33xytzHz2595Ivb6vKet48kHx/b8mQ40vFwNMKS9UbzQmWleHrXK29+XZs/1cD//Cv8CriEgFStQ2K4AAAAAElFTkSuQmCC"},{"id":"Geolittoral-Orthophotos2000","name":"Géolittoral - Orthophotos 2000","type":"wms","template":"http://geolittoral.application.developpement-durable.gouv.fr/wms2/metropole?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortholittorale&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2000-01-01T00:00:00.000Z","startDate":"2000-01-01T00:00:00.000Z","polygon":[[[-1.0796243,46.1095893],[-0.9411452,46.0147437],[-0.5630573,45.1517801],[-0.7265951,45.0842493],[-0.8790355,45.340936],[-0.9979449,45.3377907],[-0.9555838,44.6998247],[-1.1586189,44.1986482],[-1.2151202,44.2055773],[-1.2465448,44.1162047],[-1.2790262,44.0393718],[-1.2882474,44.0230397],[-1.3211693,43.9409384],[-1.321506,43.922956],[-1.3092024,43.9233665],[-1.308503,43.914392],[-1.2836627,43.9151384],[-1.2830152,43.9062373],[-1.2760964,43.9065485],[-1.2821086,43.8925378],[-1.3010173,43.8515886],[-1.3038406,43.8423978],[-1.3092283,43.8349806],[-1.3347421,43.7694562],[-1.3440669,43.7487464],[-1.3455951,43.742141],[-1.3467348,43.7368823],[-1.432844,43.53152],[-1.4280594,43.4681233],[-1.6062745,43.4059107],[-1.6060955,43.3601202],[-1.7744064,43.3035717],[-1.8299531,43.384841],[-1.5855116,43.4685563],[-1.3570598,44.0337366],[-1.4021655,44.0646122],[-1.3358385,44.2283161],[-1.218361,44.2303255],[-1.1679453,44.4109713],[-1.3074387,44.418472],[-1.1697949,45.5910689],[-1.486847,46.0604176],[-1.3636417,46.0914593],[-1.601759,46.1701852],[-1.6444184,46.2237487],[-1.5859481,46.304264],[-1.5100772,46.3388783],[-1.756428,46.4221446],[-2.1871988,46.8185697],[-2.1642284,46.8553436],[-2.2365406,46.9337048],[-2.3976918,46.9671834],[-2.2820042,47.0763113],[-2.1256261,47.018745],[-2.0901262,47.065624],[-2.184872,47.1069799],[-2.2647018,47.1076296],[-2.2448935,47.1856218],[-2.5677926,47.2446686],[-2.6672667,47.4668599],[-2.7478721,47.4712158],[-2.7577135,47.4346122],[-2.8932063,47.4629031],[-2.9036899,47.5090529],[-3.0338252,47.5383308],[-3.0711295,47.5118452],[-3.0165289,47.4987314],[-3.1250228,47.4269256],[-3.1880328,47.4844142],[-3.2279087,47.6113186],[-3.2966969,47.6316051],[-3.2875957,47.6715415],[-3.3407355,47.6689257],[-3.3891187,47.5947342],[-3.55087,47.6382724],[-3.5338384,47.724884],[-3.7657669,47.7647571],[-3.7759528,47.737096],[-3.9116771,47.7591549],[-3.8959022,47.7991129],[-3.9723628,47.8152607],[-3.9972201,47.7975006],[-3.97956,47.7626769],[-3.8945008,47.7219346],[-3.9161956,47.6783103],[-4.1016259,47.7092072],[-4.0898857,47.7894357],[-4.0379763,47.7990868],[-4.0412502,47.8310926],[-4.0876491,47.8422143],[-4.1478057,47.8252534],[-4.1431427,47.7884708],[-4.3516237,47.7414997],[-4.4796232,47.9776016],[-4.9856536,47.9989633],[-4.9693825,48.0897202],[-4.63576,48.0779844],[-4.6014717,48.1146852],[-4.3850007,48.1096154],[-4.3895513,48.1454286],[-4.3092543,48.1500888],[-4.3126821,48.1769373],[-4.4636854,48.1846773],[-4.4974841,48.1453035],[-4.5921009,48.1475763],[-4.5753669,48.22488],[-4.6710089,48.2330974],[-4.654341,48.3104921],[-4.8424298,48.3004956],[-5.1986731,48.4492607],[-5.103461,48.5172155],[-4.81465,48.3941286],[-4.8351542,48.5431896],[-4.6338697,48.6637334],[-3.9669223,48.7797813],[-3.9493945,48.7471474],[-3.6501973,48.7535602],[-3.6585313,48.8252653],[-3.539314,48.8583372],[-3.5444401,48.9029653],[-3.4095425,48.9186584],[-3.4075537,48.8736644],[-3.0276871,48.9275037],[-2.6786137,48.5884071],[-2.2847486,48.7190877],[-2.1754283,48.650163],[-2.0136968,48.7322121],[-1.8095282,48.7317759],[-1.8039194,48.6612609],[-1.6116146,48.6858177],[-1.7164548,49.2478104],[-1.8026014,49.3272144],[-1.8574757,49.3253007],[-1.9262013,49.6557284],[-2.03908,49.6787215],[-2.0044546,49.7608677],[-1.6175855,49.6849834],[-1.2837344,49.7606702],[-1.1492009,49.6350423],[-1.1713375,49.5541159],[-1.2735291,49.5524476],[-1.1327984,49.3933982],[-0.930595,49.4080413],[-0.7482671,49.3597647],[-0.3893456,49.34167],[-0.2470445,49.2999494],[-0.1245368,49.2935335],[0.0273095,49.3761879],[0.0180063,49.5465556],[0.1221093,49.6929183],[0.5171306,49.8646551],[1.057268,49.9490353],[1.4390814,50.1181936],[1.5317687,50.4643666],[1.5254895,50.8586668],[1.6411818,50.9591925],[2.452105,51.1214375],[2.5928557,51.1212359],[2.6068264,51.0577932],[1.7975971,50.8990562],[1.6645759,50.8237878],[1.7078633,50.1282048],[1.0593618,49.85],[0.6160689,49.7906207],[0.2473107,49.6502699],[0.1709048,49.5317374],[0.5706464,49.496223],[0.4111492,49.3395965],[0.1950421,49.3573571],[0.0171786,49.2547917],[-0.2445265,49.2631234],[-0.3840751,49.3049516],[-0.7409079,49.3243829],[-0.995405,49.3713264],[-1.0545337,49.2517481],[-1.27704,49.2902182],[-1.2596644,49.4346254],[-1.3914123,49.5398482],[-1.2753453,49.6205575],[-1.2977482,49.6594602],[-1.490498,49.5713903],[-1.77517,49.6339843],[-1.7460051,49.4815523],[-1.5129407,49.2469097],[-1.4826149,48.7260698],[-1.3057444,48.725312],[-1.283234,48.5973085],[-2.7611439,48.4347142],[-3.0017371,48.6764625],[-3.210615,48.7209691],[-3.9540369,48.5605102],[-4.1564328,48.6079181],[-4.4447478,48.5585184],[-4.6368255,48.482991],[-4.6318979,48.4472691],[-4.2502228,48.43088],[-4.0614098,48.2180466],[-4.1757039,48.0516486],[-4.3190366,48.0140984],[-4.2678092,47.8997734],[-3.8848444,47.9817224],[-3.7637481,47.8640348],[-2.3272701,47.5263402],[-2.3691075,47.3338959],[-1.7406713,47.3350685],[-1.7706224,47.204506],[-2.0367815,47.2194206],[-2.096803,47.1554772],[-1.8878613,47.0123909],[-2.0879728,46.8300739],[-2.0121404,46.8343598],[-1.8407867,46.6965096],[-1.873184,46.654836],[-1.688585,46.5039205],[-1.6211652,46.5151306],[-1.4242755,46.4167482],[-1.0176087,46.3591735],[-1.0796243,46.1095893]],[[-2.4123238,46.6924223],[-2.3719717,46.676112],[-2.2674923,46.680326],[-2.270068,46.7070521],[-2.2982682,46.7328597],[-2.4165505,46.7371145],[-2.4123238,46.6924223]],[[-3.06018,47.4054194],[-2.8258703,47.2963471],[-2.7878715,47.3341715],[-3.0243638,47.4456259],[-3.06018,47.4054194]],[[-3.2648203,47.4295047],[-3.334303,47.3592752],[-3.2961388,47.3413278],[-3.3148902,47.3005706],[-3.1994054,47.2449216],[-3.1656728,47.2775103],[-3.086864,47.2361201],[-3.0063687,47.3085541],[-3.2648203,47.4295047]],[[-1.939663,48.8634633],[-1.9399349,48.9117889],[-1.7009983,48.9110507],[-1.6972613,48.8617305],[-1.939663,48.8634633]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral","terms_text":"Ortho littorale 2000"},{"id":"Geolittoral-Sentiers","name":"Géolittoral - Sentiers","type":"wms","template":"http://geolittoral.application.developpement-durable.gouv.fr/wms2/metropole?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=n_sentier_littoral_l&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-0.9838474,46.1880746],[-0.8949679,46.156277],[-0.934552,46.1016299],[-0.843878,46.0694893],[-0.8824065,46.0163689],[-0.5378663,45.8955775],[-0.6349793,45.7644353],[-0.8666589,45.8479032],[-0.7626356,45.6245041],[-0.6969519,45.6265921],[-0.6939663,45.6018445],[-0.6875472,45.6017401],[-0.6879951,45.5098594],[-0.6379859,45.5089178],[-0.6397773,45.4474748],[-0.615743,45.4469511],[-0.6161909,45.3858599],[-0.585439,45.3859647],[-0.5852897,45.3233381],[-0.5537914,45.323443],[-0.5527464,45.1966145],[-0.490944,45.195773],[-0.4918397,45.1331467],[-0.4566094,45.133252],[-0.4551166,45.0716113],[-0.4161067,45.0708893],[-0.4162123,45.0269636],[-0.2907042,44.9827801],[-0.2199988,45.0677104],[-0.1225183,45.0256272],[-0.1892469,44.9459114],[-0.0926621,44.9101881],[-0.145209,44.8392042],[-0.1549123,44.8423797],[-0.1938747,44.7867829],[-0.4354115,44.8731731],[-0.3904779,44.6841324],[-0.5879767,44.6601403],[-0.6662784,44.9912911],[-0.7783806,44.9926348],[-0.7776417,45.0538898],[-0.8158437,45.0532114],[-0.818377,45.1196158],[-0.8839284,45.1205096],[-0.8817117,45.1808092],[-0.9343849,45.1818509],[-0.9328016,45.2448356],[-1.0016252,45.2443896],[-1.0024696,45.3082702],[-1.0523984,45.3101261],[-1.0482817,45.3691125],[-1.0641153,45.3691125],[-1.0503928,45.1825205],[-1.1076051,44.8078702],[-1.0151366,44.8011296],[-1.0194644,44.7691388],[-0.933646,44.7614944],[-0.9404017,44.7018029],[-0.9603521,44.5643388],[-1.014081,44.5676478],[-1.0991605,44.1456002],[-1.2268852,44.140222],[-1.2185281,44.0324931],[-1.3076188,44.029002],[-1.3957164,43.7430052],[-1.3129592,43.7295057],[-1.3743937,43.5310863],[-1.3458932,43.506056],[-1.599642,43.3542258],[-1.7654877,43.255483],[-1.7928061,43.2803753],[-1.8028079,43.4042503],[-1.7283167,43.4503267],[-1.5853054,43.4890037],[-1.3358385,44.2283161],[-1.3074387,44.418472],[-1.2251061,45.4441615],[-1.486847,46.0604176],[-1.601759,46.1701852],[-1.6444184,46.2237487],[-1.756428,46.4221446],[-2.0348287,46.6189544],[-2.3465983,46.6238164],[-2.4656134,46.7119647],[-2.3232967,46.8381171],[-2.4528645,46.9385605],[-2.3173318,47.1621397],[-2.9284827,47.2841337],[-2.967417,47.2214691],[-3.3560228,47.3247359],[-3.1880328,47.4844142],[-3.2279087,47.6113186],[-3.3891187,47.5947342],[-3.9161956,47.6783103],[-4.1016259,47.7092072],[-4.1431427,47.7884708],[-4.3761893,47.7106674],[-4.4796232,47.9776016],[-4.9856536,47.9989633],[-4.9693825,48.0897202],[-4.6014717,48.1146852],[-4.5921009,48.1475763],[-4.6710089,48.2330974],[-4.8424298,48.3004956],[-5.1986731,48.4492607],[-5.103461,48.5172155],[-4.8351542,48.5431896],[-4.6311736,48.6612896],[-3.9669223,48.7797813],[-3.9493945,48.7471474],[-3.6701315,48.895078],[-3.5444401,48.9029653],[-3.4095425,48.9186584],[-3.3334381,48.904579],[-3.0276871,48.9275037],[-2.8020731,48.7979285],[-2.6935289,48.7672208],[-2.4578583,48.7089607],[-2.2847486,48.7190877],[-2.1754283,48.650163],[-2.0136968,48.7322121],[-1.8095282,48.7317759],[-1.7243003,48.7582771],[-1.7055705,48.8451195],[-1.9030442,48.8628775],[-1.9102707,48.9234787],[-1.6871357,48.9324898],[-1.7427683,49.244734],[-1.8574757,49.3253007],[-1.9262013,49.6557284],[-2.03908,49.6787215],[-2.0044546,49.7608677],[-1.6175855,49.6849834],[-1.2837344,49.7606702],[-1.1492009,49.6350423],[-1.1854462,49.5483609],[-0.9646323,49.4250945],[-0.7442883,49.3680181],[-0.3901362,49.3621973],[-0.2497648,49.3157973],[-0.1334235,49.3129316],[0.0273095,49.3761879],[0.0180063,49.5465556],[0.1221093,49.6929183],[0.5171306,49.8646551],[1.057268,49.9490353],[1.4390814,50.1181936],[1.5317687,50.4643666],[1.5254895,50.8586668],[1.6411818,50.9591925],[2.5971186,51.1735455],[2.6607107,51.0195972],[2.0712386,50.9202211],[2.05937,50.9470929],[1.7975971,50.8990562],[1.6808947,50.8717016],[1.6556923,50.5972904],[1.7535714,50.5931978],[1.7229475,50.2470239],[1.8215592,50.2426198],[1.8014852,50.0511647],[1.5456517,50.063112],[1.541549,50.0126688],[1.4246216,50.0174707],[1.426673,50.0527642],[1.0383804,49.8460945],[0.9827008,49.8891609],[0.5796091,49.8213328],[0.420629,49.76297],[0.4281018,49.7544509],[0.2083136,49.6726862],[0.147652,49.5776743],[0.1346112,49.5809045],[0.1111672,49.543649],[0.5659823,49.520445],[0.5631983,49.4998946],[0.6300139,49.496659],[0.6147753,49.3744072],[0.5482527,49.3785094],[0.5425382,49.3346073],[0.4574069,49.3393812],[0.4584326,49.3449183],[0.3259735,49.354559],[0.3284645,49.3812758],[0.280111,49.3843283],[0.2768875,49.363339],[0.210951,49.3665834],[0.208167,49.3508366],[0.1432562,49.3553225],[0.1376883,49.3114953],[0.0720449,49.3153162],[0.0675026,49.2871299],[0.0027383,49.2907616],[0.0050827,49.2571106],[-0.0202662,49.260362],[-0.0349188,49.1973043],[-0.194485,49.2146316],[-0.389657,49.127263],[-0.4536886,49.1879201],[-0.3561026,49.2321443],[-0.8208815,49.2833068],[-0.9977772,49.3014908],[-1.1672818,49.2454506],[-1.1951526,49.2818265],[-1.2676791,49.2409863],[-1.341138,49.2975045],[-1.2476825,49.3502459],[-1.4458287,49.6068946],[-1.8110511,49.6175689],[-1.7747878,49.4433325],[-1.7277493,49.4650871],[-1.5338965,49.2909826],[-1.4790873,49.2923341],[-1.4760826,49.2402747],[-1.4355714,49.2032589],[-1.4722491,49.182201],[-1.4509056,48.7572466],[-1.3115513,48.7640766],[-1.3053347,48.7021631],[-1.2583998,48.7042144],[-1.2522868,48.6435279],[-1.2351913,48.6443494],[-1.2269026,48.5682354],[-1.8521839,48.5308559],[-1.8490756,48.4974996],[-1.9232598,48.4918694],[-1.9281294,48.4409635],[-2.0427212,48.4360144],[-2.0388876,48.4819121],[-2.2895011,48.4610214],[-2.3021023,48.5243337],[-2.4086263,48.5161813],[-2.4203484,48.5695361],[-2.4308411,48.5785185],[-2.4908308,48.5492405],[-2.4735281,48.5332572],[-2.5497844,48.4964697],[-2.5400451,48.4874747],[-2.7068057,48.4074551],[-3.0297895,48.6911498],[-4.0103381,48.5317872],[-4.0534166,48.6441199],[-4.3828059,48.5734929],[-4.3548195,48.5117951],[-4.3885293,48.5047279],[-4.1349543,48.4486809],[-4.1641129,48.389361],[-4.01832,48.3568516],[-4.0473321,48.2991791],[-3.9881358,48.2867008],[-4.0213971,48.216063],[-4.0363427,48.2195777],[-4.0662339,48.160284],[-4.1667504,48.1824662],[-4.1833077,48.149336],[-4.1723183,48.106499],[-4.2011062,48.1028546],[-4.1864321,48.0438867],[-4.1880639,48.0406137],[-4.3568595,48.0230513],[-4.2565705,47.9399726],[-4.2336349,47.9349658],[-4.2137074,47.9759839],[-4.2185428,47.977259],[-4.1805957,48.0556897],[-3.6172022,47.9312353],[-2.1799085,47.5864218],[-2.25449,47.4450059],[-2.3018177,47.4567969],[-2.3204265,47.4209203],[-2.3037225,47.4175495],[-2.3475337,47.3349949],[-2.3621862,47.3383711],[-2.380795,47.3039043],[-2.3585231,47.2985385],[-2.2996198,47.297843],[-2.297422,47.3617996],[-2.1319947,47.3585242],[-2.1347787,47.3910707],[-2.0156534,47.3962286],[-2.0140417,47.3809517],[-1.9286173,47.3825391],[-1.9289103,47.3795626],[-1.8322035,47.3818446],[-1.8298591,47.3416477],[-1.7360828,47.3430378],[-1.734178,47.3049972],[-1.6408412,47.3063882],[-1.6401086,47.2942654],[-1.5835498,47.2956567],[-1.5853081,47.3370802],[-1.461201,47.3396619],[-1.4600288,47.3292351],[-1.3721135,47.3322144],[-1.360538,47.1123893],[-1.4856707,47.1114918],[-1.4858173,47.1187709],[-1.6689741,47.1168765],[-1.6697068,47.1286411],[-1.725533,47.1276442],[-1.7261191,47.1376124],[-1.9397532,47.1326285],[-1.9401928,47.1421971],[-1.9925024,47.1430941],[-1.8106643,47.0058819],[-1.947226,46.9207831],[-1.9289103,46.9067703],[-1.9952864,46.8646098],[-1.7365224,46.6683945],[-1.7753516,46.643855],[-1.8267821,46.6417425],[-1.8247307,46.6207134],[-1.1819234,46.399869],[-0.9126096,46.3048021],[-0.9548089,46.2488984],[-0.9423542,46.2442372],[-0.9838474,46.1880746]],[[3.1476937,42.4007197],[3.1494906,42.4001543],[3.1530531,42.4005236],[3.1580376,42.4024274],[3.1876974,42.4280509],[3.142265,42.5247964],[3.0683711,42.5463547],[3.0488369,42.6941959],[3.0798953,43.0307277],[3.226405,43.1872688],[3.4091582,43.2603206],[3.5210352,43.258773],[3.6642877,43.3762765],[3.738414,43.3905396],[4.0097937,43.536068],[4.1769217,43.4563611],[4.5435531,43.4334906],[4.5494282,43.3540119],[4.8350582,43.3089126],[4.9750606,43.3830905],[5.0321866,43.3192811],[5.2591906,43.3192811],[5.3108165,43.2050388],[5.3568173,43.1864485],[5.3688175,43.1678525],[5.4023181,43.1621085],[5.4138183,43.1712257],[5.4091932,43.1992072],[5.5423205,43.1882713],[5.6058216,43.1479741],[5.6196969,43.1528987],[5.6383222,43.1715904],[5.6715728,43.1673966],[5.6909481,43.13411],[5.7760746,43.1063726],[5.7761996,43.0943247],[5.7540742,43.0832788],[5.7570743,43.0725048],[5.7703245,43.0646514],[5.8593261,43.0346897],[5.8877016,43.0627336],[5.9567028,43.0610897],[5.9638279,43.092773],[6.0003285,43.0918601],[6.0174538,43.068487],[6.1023303,43.0741485],[6.1048304,43.0525954],[6.0665981,43.0431845],[6.0672168,43.0378549],[6.1427018,43.0092284],[6.1567558,42.9871518],[6.1963544,42.9733134],[6.2222085,42.9801037],[6.2689052,42.996508],[6.2551549,43.0362655],[6.201904,43.0271281],[6.1837787,43.0918826],[6.3015307,43.0990937],[6.3247811,43.0797407],[6.3777821,43.0801059],[6.3886572,43.1339501],[6.5134094,43.1460813],[6.5770355,43.1788145],[6.6229113,43.1456253],[6.6977876,43.1996853],[6.6801623,43.2335736],[6.7211631,43.26007],[6.7224131,43.2747245],[6.6705372,43.2919232],[6.6874125,43.3311252],[6.7241631,43.3426718],[6.7529136,43.4089993],[6.7910393,43.3967387],[6.9062913,43.4167176],[6.9676674,43.5027333],[6.9661673,43.5281154],[7.006168,43.5384464],[7.0355435,43.4981997],[7.0689191,43.5001038],[7.0907945,43.5164228],[7.062669,43.5367247],[7.0825444,43.5456046],[7.1237951,43.5307436],[7.1557957,43.5437019],[7.1432954,43.622841],[7.1686709,43.6463635],[7.2137967,43.6346939],[7.2541724,43.6849746],[7.3402989,43.6674354],[7.3644243,43.6894038],[7.3530491,43.7082017],[7.4163002,43.7109124],[7.4540509,43.7450573],[7.4943016,43.7452379],[7.5794281,43.7842366],[7.6055156,43.7860269],[7.6036815,43.7889781],[7.5958811,43.7952788],[7.5962789,43.7954862],[7.5385252,43.8419488],[7.4599632,43.7998784],[7.4478096,43.8093355],[7.3235339,43.7480609],[7.3082211,43.7635679],[6.6487795,43.3885012],[6.6686548,43.3717842],[6.510027,43.2780293],[6.5658405,43.2250863],[6.1268057,43.105272],[5.4822945,43.2493904],[5.4726693,43.2309046],[5.4156683,43.2465678],[5.4526689,43.3450985],[4.8019076,43.4815759],[4.7641569,43.3924419],[4.657155,43.423681],[4.6722803,43.4560836],[4.4320261,43.5241904],[4.4145258,43.4925498],[4.1610214,43.5643292],[4.1445211,43.5706693],[4.141646,43.5739296],[4.1867718,43.5994627],[4.1056454,43.6819639],[3.79689,43.5216525],[3.7785147,43.5131316],[3.7646394,43.5059696],[3.7620144,43.5033403],[3.7422641,43.4932752],[3.7160136,43.5207461],[3.2621307,43.2814311],[3.2463804,43.2973542],[3.1838793,43.2805211],[3.1067529,43.2408312],[3.1547538,43.1941898],[2.9062494,43.1938252],[2.9067495,42.761892],[2.9461251,42.7620755],[2.9465001,42.6151551],[2.992376,42.6149711],[2.992376,42.5125003],[3.0410018,42.5125924],[3.0412052,42.5009317],[3.0908647,42.5008187],[3.1476937,42.4007197]],[[6.3594494,43.0232125],[6.4247695,43.0244403],[6.4524356,43.0350368],[6.4698484,43.0546098],[6.5112149,43.0576453],[6.5215565,43.0431768],[6.4836372,43.0244403],[6.471793,43.0072494],[6.4117762,42.9917993],[6.3985177,42.980484],[6.3517753,42.9990494],[6.3594494,43.0232125]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral","terms_text":"Ortho littorale 2000"},{"id":"GeolittoralV2-Orthophotos","name":"Géolittoral V2 - Orthophotos 2011-2014","type":"wms","template":"http://geolittoral.application.developpement-durable.gouv.fr/wms2/metropole?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortholittorale_v2_rvb&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2014-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","polygon":[[[-0.9838474,46.1880746],[-0.8949679,46.156277],[-0.934552,46.1016299],[-0.843878,46.0694893],[-0.8824065,46.0163689],[-0.5378663,45.8955775],[-0.6349793,45.7644353],[-0.8666589,45.8479032],[-0.7626356,45.6245041],[-0.6969519,45.6265921],[-0.6939663,45.6018445],[-0.6875472,45.6017401],[-0.6879951,45.5098594],[-0.6379859,45.5089178],[-0.6397773,45.4474748],[-0.615743,45.4469511],[-0.6161909,45.3858599],[-0.585439,45.3859647],[-0.5852897,45.3233381],[-0.5537914,45.323443],[-0.5527464,45.1966145],[-0.490944,45.195773],[-0.4918397,45.1331467],[-0.4566094,45.133252],[-0.4551166,45.0716113],[-0.4161067,45.0708893],[-0.4162123,45.0269636],[-0.2907042,44.9827801],[-0.2199988,45.0677104],[-0.1225183,45.0256272],[-0.1892469,44.9459114],[-0.0926621,44.9101881],[-0.145209,44.8392042],[-0.1549123,44.8423797],[-0.1938747,44.7867829],[-0.4354115,44.8731731],[-0.3904779,44.6841324],[-0.5879767,44.6601403],[-0.6662784,44.9912911],[-0.7783806,44.9926348],[-0.7776417,45.0538898],[-0.8158437,45.0532114],[-0.818377,45.1196158],[-0.8839284,45.1205096],[-0.8817117,45.1808092],[-0.9343849,45.1818509],[-0.9328016,45.2448356],[-1.0016252,45.2443896],[-1.0024696,45.3082702],[-1.0523984,45.3101261],[-1.0482817,45.3691125],[-1.0641153,45.3691125],[-1.0503928,45.1825205],[-1.1076051,44.8078702],[-1.0151366,44.8011296],[-1.0194644,44.7691388],[-0.933646,44.7614944],[-0.9404017,44.7018029],[-0.9603521,44.5643388],[-1.014081,44.5676478],[-1.0991605,44.1456002],[-1.2268852,44.140222],[-1.2185281,44.0324931],[-1.3076188,44.029002],[-1.3957164,43.7430052],[-1.3129592,43.7295057],[-1.3743937,43.5310863],[-1.3458932,43.506056],[-1.599642,43.3542258],[-1.7654877,43.255483],[-1.7928061,43.2803753],[-1.8028079,43.4042503],[-1.7283167,43.4503267],[-1.5853054,43.4890037],[-1.3358385,44.2283161],[-1.3074387,44.418472],[-1.2251061,45.4441615],[-1.486847,46.0604176],[-1.601759,46.1701852],[-1.6444184,46.2237487],[-1.756428,46.4221446],[-2.0348287,46.6189544],[-2.3465983,46.6238164],[-2.4656134,46.7119647],[-2.3232967,46.8381171],[-2.4528645,46.9385605],[-2.3173318,47.1621397],[-2.9284827,47.2841337],[-2.967417,47.2214691],[-3.3560228,47.3247359],[-3.1880328,47.4844142],[-3.2279087,47.6113186],[-3.3891187,47.5947342],[-3.9161956,47.6783103],[-4.1016259,47.7092072],[-4.1431427,47.7884708],[-4.3761893,47.7106674],[-4.4796232,47.9776016],[-4.9856536,47.9989633],[-4.9693825,48.0897202],[-4.6014717,48.1146852],[-4.5921009,48.1475763],[-4.6710089,48.2330974],[-4.8424298,48.3004956],[-5.1986731,48.4492607],[-5.103461,48.5172155],[-4.8351542,48.5431896],[-4.6311736,48.6612896],[-3.9669223,48.7797813],[-3.9493945,48.7471474],[-3.6701315,48.895078],[-3.5444401,48.9029653],[-3.4095425,48.9186584],[-3.3334381,48.904579],[-3.0276871,48.9275037],[-2.8020731,48.7979285],[-2.6935289,48.7672208],[-2.4578583,48.7089607],[-2.2847486,48.7190877],[-2.1754283,48.650163],[-2.0136968,48.7322121],[-1.8095282,48.7317759],[-1.7243003,48.7582771],[-1.7055705,48.8451195],[-1.9030442,48.8628775],[-1.9102707,48.9234787],[-1.6871357,48.9324898],[-1.7427683,49.244734],[-1.8574757,49.3253007],[-1.9262013,49.6557284],[-2.03908,49.6787215],[-2.0044546,49.7608677],[-1.6175855,49.6849834],[-1.2837344,49.7606702],[-1.1492009,49.6350423],[-1.1854462,49.5483609],[-0.9646323,49.4250945],[-0.7442883,49.3680181],[-0.3901362,49.3621973],[-0.2497648,49.3157973],[-0.1334235,49.3129316],[0.0273095,49.3761879],[0.0180063,49.5465556],[0.1221093,49.6929183],[0.5171306,49.8646551],[1.057268,49.9490353],[1.4390814,50.1181936],[1.5317687,50.4643666],[1.5254895,50.8586668],[1.6411818,50.9591925],[2.5971186,51.1735455],[2.6607107,51.0195972],[2.0712386,50.9202211],[2.05937,50.9470929],[1.7975971,50.8990562],[1.6808947,50.8717016],[1.6556923,50.5972904],[1.7535714,50.5931978],[1.7229475,50.2470239],[1.8215592,50.2426198],[1.8014852,50.0511647],[1.5456517,50.063112],[1.541549,50.0126688],[1.4246216,50.0174707],[1.426673,50.0527642],[1.0383804,49.8460945],[0.9827008,49.8891609],[0.5796091,49.8213328],[0.420629,49.76297],[0.4281018,49.7544509],[0.2083136,49.6726862],[0.147652,49.5776743],[0.1346112,49.5809045],[0.1111672,49.543649],[0.5659823,49.520445],[0.5631983,49.4998946],[0.6300139,49.496659],[0.6147753,49.3744072],[0.5482527,49.3785094],[0.5425382,49.3346073],[0.4574069,49.3393812],[0.4584326,49.3449183],[0.3259735,49.354559],[0.3284645,49.3812758],[0.280111,49.3843283],[0.2768875,49.363339],[0.210951,49.3665834],[0.208167,49.3508366],[0.1432562,49.3553225],[0.1376883,49.3114953],[0.0720449,49.3153162],[0.0675026,49.2871299],[0.0027383,49.2907616],[0.0050827,49.2571106],[-0.0202662,49.260362],[-0.0349188,49.1973043],[-0.194485,49.2146316],[-0.389657,49.127263],[-0.4536886,49.1879201],[-0.3561026,49.2321443],[-0.8208815,49.2833068],[-0.9977772,49.3014908],[-1.1672818,49.2454506],[-1.1951526,49.2818265],[-1.2676791,49.2409863],[-1.341138,49.2975045],[-1.2476825,49.3502459],[-1.4458287,49.6068946],[-1.8110511,49.6175689],[-1.7747878,49.4433325],[-1.7277493,49.4650871],[-1.5338965,49.2909826],[-1.4790873,49.2923341],[-1.4760826,49.2402747],[-1.4355714,49.2032589],[-1.4722491,49.182201],[-1.4509056,48.7572466],[-1.3115513,48.7640766],[-1.3053347,48.7021631],[-1.2583998,48.7042144],[-1.2522868,48.6435279],[-1.2351913,48.6443494],[-1.2269026,48.5682354],[-1.8521839,48.5308559],[-1.8490756,48.4974996],[-1.9232598,48.4918694],[-1.9281294,48.4409635],[-2.0427212,48.4360144],[-2.0388876,48.4819121],[-2.2895011,48.4610214],[-2.3021023,48.5243337],[-2.4086263,48.5161813],[-2.4203484,48.5695361],[-2.4308411,48.5785185],[-2.4908308,48.5492405],[-2.4735281,48.5332572],[-2.5497844,48.4964697],[-2.5400451,48.4874747],[-2.7068057,48.4074551],[-3.0297895,48.6911498],[-4.0103381,48.5317872],[-4.0534166,48.6441199],[-4.3828059,48.5734929],[-4.3548195,48.5117951],[-4.3885293,48.5047279],[-4.1349543,48.4486809],[-4.1641129,48.389361],[-4.01832,48.3568516],[-4.0473321,48.2991791],[-3.9881358,48.2867008],[-4.0213971,48.216063],[-4.0363427,48.2195777],[-4.0662339,48.160284],[-4.1667504,48.1824662],[-4.1833077,48.149336],[-4.1723183,48.106499],[-4.2011062,48.1028546],[-4.1864321,48.0438867],[-4.1880639,48.0406137],[-4.3568595,48.0230513],[-4.2565705,47.9399726],[-4.2336349,47.9349658],[-4.2137074,47.9759839],[-4.2185428,47.977259],[-4.1805957,48.0556897],[-3.6172022,47.9312353],[-2.1799085,47.5864218],[-2.25449,47.4450059],[-2.3018177,47.4567969],[-2.3204265,47.4209203],[-2.3037225,47.4175495],[-2.3475337,47.3349949],[-2.3621862,47.3383711],[-2.380795,47.3039043],[-2.3585231,47.2985385],[-2.2996198,47.297843],[-2.297422,47.3617996],[-2.1319947,47.3585242],[-2.1347787,47.3910707],[-2.0156534,47.3962286],[-2.0140417,47.3809517],[-1.9286173,47.3825391],[-1.9289103,47.3795626],[-1.8322035,47.3818446],[-1.8298591,47.3416477],[-1.7360828,47.3430378],[-1.734178,47.3049972],[-1.6408412,47.3063882],[-1.6401086,47.2942654],[-1.5835498,47.2956567],[-1.5853081,47.3370802],[-1.461201,47.3396619],[-1.4600288,47.3292351],[-1.3721135,47.3322144],[-1.360538,47.1123893],[-1.4856707,47.1114918],[-1.4858173,47.1187709],[-1.6689741,47.1168765],[-1.6697068,47.1286411],[-1.725533,47.1276442],[-1.7261191,47.1376124],[-1.9397532,47.1326285],[-1.9401928,47.1421971],[-1.9925024,47.1430941],[-1.8106643,47.0058819],[-1.947226,46.9207831],[-1.9289103,46.9067703],[-1.9952864,46.8646098],[-1.7365224,46.6683945],[-1.7753516,46.643855],[-1.8267821,46.6417425],[-1.8247307,46.6207134],[-1.1819234,46.399869],[-0.9126096,46.3048021],[-0.9548089,46.2488984],[-0.9423542,46.2442372],[-0.9838474,46.1880746]],[[3.1476937,42.4007197],[3.1494906,42.4001543],[3.1530531,42.4005236],[3.1580376,42.4024274],[3.1876974,42.4280509],[3.142265,42.5247964],[3.0683711,42.5463547],[3.0488369,42.6941959],[3.0798953,43.0307277],[3.226405,43.1872688],[3.4091582,43.2603206],[3.5210352,43.258773],[3.6642877,43.3762765],[3.738414,43.3905396],[4.0097937,43.536068],[4.1769217,43.4563611],[4.5435531,43.4334906],[4.5494282,43.3540119],[4.8350582,43.3089126],[4.9750606,43.3830905],[5.0321866,43.3192811],[5.2591906,43.3192811],[5.3108165,43.2050388],[5.3568173,43.1864485],[5.3688175,43.1678525],[5.4023181,43.1621085],[5.4138183,43.1712257],[5.4091932,43.1992072],[5.5423205,43.1882713],[5.6058216,43.1479741],[5.6196969,43.1528987],[5.6383222,43.1715904],[5.6715728,43.1673966],[5.6909481,43.13411],[5.7760746,43.1063726],[5.7761996,43.0943247],[5.7540742,43.0832788],[5.7570743,43.0725048],[5.7703245,43.0646514],[5.8593261,43.0346897],[5.8877016,43.0627336],[5.9567028,43.0610897],[5.9638279,43.092773],[6.0003285,43.0918601],[6.0174538,43.068487],[6.1023303,43.0741485],[6.1048304,43.0525954],[6.0665981,43.0431845],[6.0672168,43.0378549],[6.1427018,43.0092284],[6.1567558,42.9871518],[6.1963544,42.9733134],[6.2222085,42.9801037],[6.2689052,42.996508],[6.2551549,43.0362655],[6.201904,43.0271281],[6.1837787,43.0918826],[6.3015307,43.0990937],[6.3247811,43.0797407],[6.3777821,43.0801059],[6.3886572,43.1339501],[6.5134094,43.1460813],[6.5770355,43.1788145],[6.6229113,43.1456253],[6.6977876,43.1996853],[6.6801623,43.2335736],[6.7211631,43.26007],[6.7224131,43.2747245],[6.6705372,43.2919232],[6.6874125,43.3311252],[6.7241631,43.3426718],[6.7529136,43.4089993],[6.7910393,43.3967387],[6.9062913,43.4167176],[6.9676674,43.5027333],[6.9661673,43.5281154],[7.006168,43.5384464],[7.0355435,43.4981997],[7.0689191,43.5001038],[7.0907945,43.5164228],[7.062669,43.5367247],[7.0825444,43.5456046],[7.1237951,43.5307436],[7.1557957,43.5437019],[7.1432954,43.622841],[7.1686709,43.6463635],[7.2137967,43.6346939],[7.2541724,43.6849746],[7.3402989,43.6674354],[7.3644243,43.6894038],[7.3530491,43.7082017],[7.4163002,43.7109124],[7.4540509,43.7450573],[7.4943016,43.7452379],[7.5794281,43.7842366],[7.6055156,43.7860269],[7.6036815,43.7889781],[7.5958811,43.7952788],[7.5962789,43.7954862],[7.5385252,43.8419488],[7.4599632,43.7998784],[7.4478096,43.8093355],[7.3235339,43.7480609],[7.3082211,43.7635679],[6.6487795,43.3885012],[6.6686548,43.3717842],[6.510027,43.2780293],[6.5658405,43.2250863],[6.1268057,43.105272],[5.4822945,43.2493904],[5.4726693,43.2309046],[5.4156683,43.2465678],[5.4526689,43.3450985],[4.8019076,43.4815759],[4.7641569,43.3924419],[4.657155,43.423681],[4.6722803,43.4560836],[4.4320261,43.5241904],[4.4145258,43.4925498],[4.1610214,43.5643292],[4.1445211,43.5706693],[4.141646,43.5739296],[4.1867718,43.5994627],[4.1056454,43.6819639],[3.79689,43.5216525],[3.7785147,43.5131316],[3.7646394,43.5059696],[3.7620144,43.5033403],[3.7422641,43.4932752],[3.7160136,43.5207461],[3.2621307,43.2814311],[3.2463804,43.2973542],[3.1838793,43.2805211],[3.1067529,43.2408312],[3.1547538,43.1941898],[2.9062494,43.1938252],[2.9067495,42.761892],[2.9461251,42.7620755],[2.9465001,42.6151551],[2.992376,42.6149711],[2.992376,42.5125003],[3.0410018,42.5125924],[3.0412052,42.5009317],[3.0908647,42.5008187],[3.1476937,42.4007197]],[[6.3594494,43.0232125],[6.4247695,43.0244403],[6.4524356,43.0350368],[6.4698484,43.0546098],[6.5112149,43.0576453],[6.5215565,43.0431768],[6.4836372,43.0244403],[6.471793,43.0072494],[6.4117762,42.9917993],[6.3985177,42.980484],[6.3517753,42.9990494],[6.3594494,43.0232125]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral","terms_text":"Ortho Littorale V2 - MEDDE"},{"id":"lu.geoportail.opendata.ortho_10cm_proto_lidar","name":"geoportail.lu LIDAR prototype Nordstad 2017","type":"tms","template":"http://{switch:wmts1,wmts2}.geoportail.lu/opendata/wmts/ortho_10cm_proto_lidar/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","endDate":"2017-04-09T00:00:00.000Z","startDate":"2017-04-09T00:00:00.000Z","scaleExtent":[0,21],"polygon":[[[6.050007108761704,49.82175399016297],[6.049789364226169,49.91165980309075],[6.18901175543688,49.91171720394339],[6.188971338193781,49.821811209128995],[6.050007108761704,49.82175399016297]]],"terms_url":"https://act.public.lu/fr/cartographie/lidar","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"Geoportal-PL-aerial_image","name":"Geoportal.gov.pl (Orthophotomap)","type":"tms","template":"https://wms.misek.pl/geoportal.orto/tms/{zoom}/{x}/{y}","scaleExtent":[6,24],"polygon":[[[15.9751041,54.3709213],[16.311164,54.5561775],[17.1391878,54.7845723],[18.3448458,54.9022727],[19.6613689,54.4737213],[20.2815206,54.4213456],[21.4663914,54.3406369],[22.7759855,54.3769755],[22.8625989,54.4233613],[23.2956657,54.2678633],[23.5347186,54.0955258],[23.5208604,53.9775182],[23.7183389,53.4629603],[23.9296755,53.1856735],[23.9296755,52.6887269],[23.732197,52.6067497],[23.5658994,52.5878101],[23.2090523,52.3302642],[23.1951942,52.2370089],[23.5035377,52.1860596],[23.6906226,52.0030113],[23.5970802,51.739903],[23.6629063,51.3888562],[23.9366046,50.9827781],[24.1687284,50.8604752],[24.0197534,50.8035823],[24.1098313,50.6610467],[24.0578633,50.4188439],[23.6178674,50.3083403],[22.6824431,49.5163532],[22.7378756,49.2094935],[22.9041733,49.0780441],[22.8625989,48.9940062],[22.6096878,49.0371785],[22.0761495,49.2004392],[21.8474902,49.3721872],[21.3763135,49.4488281],[21.1026153,49.3721872],[20.9120659,49.3022043],[20.6452967,49.3902311],[20.1845136,49.3315641],[20.1186875,49.2004392],[19.9419962,49.1302123],[19.765305,49.2117568],[19.7479823,49.3992506],[19.6024718,49.4150307],[19.5089294,49.5815389],[19.4292451,49.5905232],[19.2317666,49.4150307],[18.9961783,49.387976],[18.9338167,49.4916048],[18.8368097,49.4938552],[18.8021643,49.6623381],[18.6427958,49.7094091],[18.521537,49.8994693],[18.0815412,50.0109209],[17.8875272,49.9886512],[17.7385522,50.0687739],[17.6068999,50.1709584],[17.7454813,50.2153184],[17.710836,50.3017019],[17.4163505,50.2640668],[16.9486384,50.4453265],[16.8932058,50.4033889],[17.0006064,50.3105529],[17.017929,50.2241854],[16.8135215,50.186489],[16.6402948,50.0976742],[16.4324227,50.2862087],[16.1968344,50.4276731],[16.4220291,50.5885165],[16.3388803,50.6632429],[16.2280152,50.6368824],[16.0547884,50.6127057],[15.5732181,50.7641544],[15.2683391,50.8976368],[15.2440873,50.980597],[15.0292862,51.0133036],[15.0015699,50.8582883],[14.8110205,50.8735944],[14.956531,51.0721176],[15.0188926,51.2914636],[14.9392083,51.4601459],[14.7209426,51.5571799],[14.7521234,51.6260562],[14.5996839,51.8427626],[14.70362,52.0733396],[14.5581095,52.2497371],[14.5165351,52.425436],[14.6031485,52.5878101],[14.1146491,52.8208272],[14.152759,52.9733951],[14.3502374,53.0734212],[14.4229927,53.2665624],[14.1977979,53.8734759],[14.2220497,53.9958517],[15.9751041,54.3709213]]],"terms_text":"Copyright © Główny Urząd Geodezji i Kartografii.","best":true,"icon":"https://i.imgur.com/aFlvMpM.png"},{"id":"girau_do_pnciano","name":"Girau do Ponciano","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Girau%20do%20Ponciano&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.78012791818,-9.92939325541],[-36.78086820787,-9.83891760784],[-36.87233153527,-9.83917131263],[-36.87173072046,-9.90542386241],[-36.87036815828,-9.92988995709],[-36.86155978387,-9.92994279765],[-36.85565892404,-9.92980541218],[-36.85146394914,-9.92973143536],[-36.84574547952,-9.92977370783],[-36.83213058656,-9.92966802665],[-36.81455675309,-9.92960461792],[-36.78012791818,-9.92939325541]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"GRAFCAN-Canary_Islands","name":"GRAFCAN - Canary Islands","type":"wms","template":"https://idecan1.grafcan.es/ServicioWMS/OrtoUrb?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OU&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","polygon":[[[-17.9291733,28.8910589],[-18.0333424,28.7998146],[-18.0374275,28.7317767],[-17.87811,28.4322434],[-17.8311317,28.4178731],[-17.7269626,28.5632821],[-17.7310476,28.6798232],[-17.6840694,28.7371497],[-17.7535155,28.8678081],[-17.8576846,28.860653],[-17.9291733,28.8910589]],[[-18.0781762,27.7721138],[-18.1370743,27.7875098],[-18.1705392,27.7644149],[-18.1779014,27.7069523],[-18.1578225,27.687989],[-18.0580973,27.6790988],[-18.0065614,27.6257423],[-17.9610492,27.6221843],[-17.9389624,27.7081374],[-17.9075054,27.7193953],[-17.8619932,27.8046798],[-17.872702,27.8407872],[-17.9255764,27.8680077],[-18.0052228,27.8360525],[-18.0139237,27.8034958],[-18.0781762,27.7721138]],[[-17.2687764,28.2399643],[-17.3340329,28.2193251],[-17.3633146,28.1536956],[-17.3666611,28.0880258],[-17.3306864,28.0474233],[-17.2729595,28.0068054],[-17.2001735,28.0053281],[-17.1441199,28.0289625],[-17.0780268,28.0835972],[-17.0872296,28.1536956],[-17.1826044,28.2149019],[-17.2687764,28.2399643]],[[-16.9358012,28.3762297],[-16.945004,28.3357366],[-16.7199529,27.9831662],[-16.6254147,27.9831662],[-16.52753,28.0164074],[-16.3995269,28.146319],[-16.3359437,28.3092236],[-16.3300873,28.3644515],[-16.1025263,28.524082],[-16.0983432,28.5814018],[-16.1426842,28.6254727],[-16.3392902,28.5960942],[-16.4380115,28.5314325],[-16.5392427,28.4402508],[-16.8395897,28.4122923],[-16.9358012,28.3762297]],[[-15.6883306,28.2058483],[-15.4739464,28.1643685],[-15.424272,28.2104562],[-15.3628326,28.1724353],[-15.3837481,28.0559841],[-15.3314593,27.9844367],[-15.3576037,27.8042042],[-15.5915962,27.6977727],[-15.7000956,27.7336471],[-15.7994443,27.8030479],[-15.8713415,27.9243925],[-15.8478115,28.036371],[-15.7471555,28.0894335],[-15.7314689,28.1839582],[-15.6883306,28.2058483]],[[-14.5088179,28.1344754],[-14.4107763,28.1344754],[-14.248681,28.2427804],[-14.2382232,28.3463737],[-14.0395256,28.7391056],[-13.8944241,28.7826519],[-13.7859248,28.7769232],[-13.8212198,28.3843326],[-13.9153397,28.190946],[-14.1859344,28.1356282],[-14.3088131,28.0052882],[-14.5401912,28.0514443],[-14.5088179,28.1344754]],[[-13.5524989,29.3772716],[-13.5086799,29.3682409],[-13.4795521,29.3872775],[-13.4754312,29.4096331],[-13.5003013,29.4280698],[-13.5504986,29.4071183],[-13.5524989,29.3772716]],[[-13.3976004,29.1610205],[-13.4281427,29.1215664],[-13.4417378,28.9908417],[-13.538995,28.9194675],[-13.7084109,28.8846777],[-13.7711575,28.8086488],[-13.9008338,28.8352194],[-13.9071084,28.8892559],[-13.8579569,28.936858],[-13.8569111,29.0365684],[-13.6759918,29.1498834],[-13.567231,29.1571898],[-13.5542776,29.3507259],[-13.399879,29.2180634],[-13.3976004,29.1610205]],[[-13.3379231,29.2866715],[-13.3503484,29.2743558],[-13.3385966,29.2653346],[-13.3261713,29.2776514],[-13.3379231,29.2866715]]],"terms_text":"GRAFCAN OrtoExpress Urbana 2009"},{"id":"GrandNancy_Orthophotographie_2012","name":"GrandNancy - Orthophoto - 2012","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/nancy_2012/{zoom}/{x}/{y}","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[6.06066031366,48.60554459242],[6.29717112787,48.59922593248],[6.30611158204,48.74076820528],[6.06896018357,48.74710338225],[6.06066031366,48.60554459242]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Nancy/Orthophotographie","terms_text":"GrandNancy Orthophotographie 2012"},{"id":"hamburg-40cm","name":"Hamburg (40 cm)","type":"wms","template":"http://geodienste.hamburg.de/HH_WMS_DOP40?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[8.4825961,53.9356013],[8.4827386,53.9092447],[8.5274957,53.9094126],[8.5279233,53.9357691],[8.4825961,53.9356013]],[[9.7723167,53.543523],[9.7743354,53.5543296],[9.7631359,53.5552115],[9.7304736,53.5578689],[9.7346453,53.5653605],[9.7579266,53.6182757],[9.7712877,53.6313071],[9.770699,53.6160708],[9.7963361,53.6102995],[9.7899342,53.6038562],[9.8181678,53.5859147],[9.8377278,53.5919808],[9.8449827,53.5949795],[9.8541578,53.5980542],[9.8681371,53.6092959],[9.8693051,53.6132263],[9.885052,53.6219916],[9.8869663,53.6252015],[9.8935594,53.6302636],[9.8963672,53.6312186],[9.8968811,53.6349162],[9.9067823,53.6523063],[9.9311454,53.6526154],[9.9455232,53.6527604],[9.9502445,53.6508457],[9.9515493,53.6506547],[9.9779541,53.6488699],[9.9849181,53.6482971],[9.9873906,53.6507159],[9.9995963,53.6815314],[10.0228185,53.6815708],[10.0433756,53.6819823],[10.0514778,53.6775926],[10.0692494,53.679547],[10.0604009,53.6883344],[10.0709998,53.6958498],[10.0707046,53.7099642],[10.0819849,53.7204444],[10.1190792,53.7132448],[10.1693902,53.7389576],[10.1936896,53.7310028],[10.1779029,53.7099228],[10.1569421,53.7045133],[10.1582858,53.6894414],[10.1434248,53.6805732],[10.1417595,53.6774354],[10.144728,53.6761294],[10.1464311,53.6758841],[10.1495537,53.6754497],[10.1715323,53.6686937],[10.1988496,53.6467523],[10.1897268,53.6383796],[10.2220152,53.6334888],[10.1888726,53.6131597],[10.1923583,53.5947431],[10.2011737,53.5839226],[10.1516942,53.5761904],[10.1506692,53.5697309],[10.1479994,53.5639032],[10.1530759,53.5624246],[10.1594205,53.5609125],[10.1518903,53.5416987],[10.154649,53.5365725],[10.1687379,53.5374002],[10.1632659,53.5218549],[10.1661094,53.5201314],[10.169185,53.5196505],[10.1895059,53.5114835],[10.2104308,53.5199588],[10.218276,53.4992345],[10.2366988,53.4962928],[10.2500849,53.4789784],[10.2659161,53.4707878],[10.2904343,53.4551223],[10.3096151,53.4430928],[10.3122326,53.4522908],[10.3251401,53.4497898],[10.3079865,53.4333199],[10.2559794,53.4162256],[10.2508909,53.4102422],[10.2457816,53.402611],[10.2415493,53.3979725],[10.1655462,53.399327],[10.1450604,53.416136],[10.1094899,53.4264876],[10.1067973,53.4265817],[10.075805,53.4543638],[10.0515477,53.4639369],[10.0351698,53.446896],[10.0144851,53.4420285],[10.0229369,53.4322826],[9.9975402,53.4254609],[9.9824345,53.4147804],[9.9787266,53.4142015],[9.958105,53.4270802],[9.9295317,53.4200676],[9.92552,53.4192417],[9.9066683,53.4159559],[9.9230535,53.4363147],[9.9170421,53.4466391],[9.9043636,53.4570665],[9.8949316,53.4558313],[9.8688468,53.4446225],[9.8621101,53.4294212],[9.8487204,53.4411135],[9.806634,53.4664838],[9.8002119,53.4737243],[9.8028025,53.4938287],[9.7820338,53.4923568],[9.7688507,53.5053032],[9.7710683,53.5218512],[9.7810509,53.5183751],[9.773523,53.527956],[9.7723167,53.543523]]]},{"id":"Hamburg-DK5","name":"Hamburg (DK5)","type":"wms","template":"http://geodienste.hamburg.de/HH_WMS_Geobasisdaten?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=13&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","polygon":[[[8.4825961,53.9356013],[8.4827386,53.9092447],[8.5274957,53.9094126],[8.5279233,53.9357691],[8.4825961,53.9356013]],[[9.7723167,53.543523],[9.7743354,53.5543296],[9.7631359,53.5552115],[9.7304736,53.5578689],[9.7346453,53.5653605],[9.7579266,53.6182757],[9.7712877,53.6313071],[9.770699,53.6160708],[9.7963361,53.6102995],[9.7899342,53.6038562],[9.8181678,53.5859147],[9.8377278,53.5919808],[9.8449827,53.5949795],[9.8541578,53.5980542],[9.8681371,53.6092959],[9.8693051,53.6132263],[9.885052,53.6219916],[9.8869663,53.6252015],[9.8935594,53.6302636],[9.8963672,53.6312186],[9.8968811,53.6349162],[9.9067823,53.6523063],[9.9311454,53.6526154],[9.9455232,53.6527604],[9.9502445,53.6508457],[9.9515493,53.6506547],[9.9779541,53.6488699],[9.9849181,53.6482971],[9.9873906,53.6507159],[9.9995963,53.6815314],[10.0228185,53.6815708],[10.0433756,53.6819823],[10.0514778,53.6775926],[10.0692494,53.679547],[10.0604009,53.6883344],[10.0709998,53.6958498],[10.0707046,53.7099642],[10.0819849,53.7204444],[10.1190792,53.7132448],[10.1693902,53.7389576],[10.1936896,53.7310028],[10.1779029,53.7099228],[10.1569421,53.7045133],[10.1582858,53.6894414],[10.1434248,53.6805732],[10.1417595,53.6774354],[10.144728,53.6761294],[10.1464311,53.6758841],[10.1495537,53.6754497],[10.1715323,53.6686937],[10.1988496,53.6467523],[10.1897268,53.6383796],[10.2220152,53.6334888],[10.1888726,53.6131597],[10.1923583,53.5947431],[10.2011737,53.5839226],[10.1516942,53.5761904],[10.1506692,53.5697309],[10.1479994,53.5639032],[10.1530759,53.5624246],[10.1594205,53.5609125],[10.1518903,53.5416987],[10.154649,53.5365725],[10.1687379,53.5374002],[10.1632659,53.5218549],[10.1661094,53.5201314],[10.169185,53.5196505],[10.1895059,53.5114835],[10.2104308,53.5199588],[10.218276,53.4992345],[10.2366988,53.4962928],[10.2500849,53.4789784],[10.2659161,53.4707878],[10.2904343,53.4551223],[10.3096151,53.4430928],[10.3122326,53.4522908],[10.3251401,53.4497898],[10.3079865,53.4333199],[10.2559794,53.4162256],[10.2508909,53.4102422],[10.2457816,53.402611],[10.2415493,53.3979725],[10.1655462,53.399327],[10.1450604,53.416136],[10.1094899,53.4264876],[10.1067973,53.4265817],[10.075805,53.4543638],[10.0515477,53.4639369],[10.0351698,53.446896],[10.0144851,53.4420285],[10.0229369,53.4322826],[9.9975402,53.4254609],[9.9824345,53.4147804],[9.9787266,53.4142015],[9.958105,53.4270802],[9.9295317,53.4200676],[9.92552,53.4192417],[9.9066683,53.4159559],[9.9230535,53.4363147],[9.9170421,53.4466391],[9.9043636,53.4570665],[9.8949316,53.4558313],[9.8688468,53.4446225],[9.8621101,53.4294212],[9.8487204,53.4411135],[9.806634,53.4664838],[9.8002119,53.4737243],[9.8028025,53.4938287],[9.7820338,53.4923568],[9.7688507,53.5053032],[9.7710683,53.5218512],[9.7810509,53.5183751],[9.773523,53.527956],[9.7723167,53.543523]]]},{"id":"Hampshire-Aerial-FCIR","name":"Hampshire Aerial FCIR","type":"tms","template":"https://{switch:a,b,c}.hampshire.aerial.openstreetmap.org.uk/layer/gb_hampshire_aerial_fcir/{zoom}/{x}/{y}.png","endDate":"2014-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[8,20],"polygon":[[[-1.315673,50.77809],[-1.491387,50.73027],[-1.57113,50.69041],[-1.680953,50.71748],[-1.693378,50.73484],[-1.695277,50.74065],[-1.686891,50.74999],[-1.710684,50.74812],[-1.719504,50.75261],[-1.746001,50.74452],[-1.748452,50.75675],[-1.742869,50.76397],[-1.751012,50.77577],[-1.78525,50.76177],[-1.799108,50.77236],[-1.822565,50.77225],[-1.826778,50.78077],[-1.822497,50.79933],[-1.807317,50.80074],[-1.81566,50.80752],[-1.808894,50.81358],[-1.805787,50.83249],[-1.798157,50.83535],[-1.806491,50.84414],[-1.809882,50.86189],[-1.813783,50.85591],[-1.830516,50.85261],[-1.852711,50.85651],[-1.85655,50.86684],[-1.849205,50.87802],[-1.85082,50.89178],[-1.84077,50.90051],[-1.826931,50.89939],[-1.820062,50.90492],[-1.821513,50.91691],[-1.816889,50.92412],[-1.841137,50.92886],[-1.874458,50.91441],[-1.911294,50.9439],[-1.923386,50.95917],[-1.95751,50.97575],[-1.959101,50.99152],[-1.949071,50.98649],[-1.928787,51.00055],[-1.887094,51.0026],[-1.87393,51.0097],[-1.871695,50.99083],[-1.854331,51.00786],[-1.835675,51.01238],[-1.815019,50.9899],[-1.800312,50.99457],[-1.751838,50.98133],[-1.719271,50.98047],[-1.691416,50.95943],[-1.66829,50.95041],[-1.652596,50.95029],[-1.635362,50.96269],[-1.623972,50.95903],[-1.608898,50.97686],[-1.621721,50.98099],[-1.631149,50.99984],[-1.609836,51.01225],[-1.601734,51.01042],[-1.607874,51.01582],[-1.605696,51.02271],[-1.635423,51.03176],[-1.638583,51.04126],[-1.631067,51.07819],[-1.640253,51.09201],[-1.630602,51.10359],[-1.634078,51.11099],[-1.630674,51.11652],[-1.641093,51.12237],[-1.665249,51.12546],[-1.657236,51.15539],[-1.674737,51.177],[-1.67213,51.18708],[-1.696792,51.20233],[-1.69247,51.21617],[-1.652877,51.22301],[-1.635643,51.22019],[-1.623947,51.24136],[-1.614024,51.24467],[-1.607408,51.25513],[-1.577168,51.25863],[-1.544434,51.24826],[-1.538396,51.25085],[-1.534359,51.25919],[-1.543446,51.25957],[-1.540068,51.27602],[-1.545961,51.28095],[-1.535908,51.28978],[-1.525949,51.28975],[-1.530933,51.29948],[-1.530081,51.3111],[-1.536275,51.31596],[-1.529857,51.34057],[-1.515522,51.34219],[-1.494983,51.33228],[-1.435991,51.33861],[-1.447589,51.3464],[-1.446305,51.35699],[-1.430556,51.35941],[-1.416077,51.37517],[-1.348989,51.37045],[-1.314724,51.37627],[-1.275549,51.3707],[-1.251156,51.37511],[-1.241179,51.36938],[-1.222093,51.37271],[-1.176023,51.36102],[-1.143212,51.36028],[-1.118753,51.36156],[-1.120961,51.36859],[-1.116785,51.3767],[-1.083632,51.38712],[-1.047537,51.36122],[-0.990405,51.36619],[-0.972636,51.36297],[-0.92376,51.36937],[-0.876809,51.3555],[-0.86549,51.35947],[-0.82728,51.35574],[-0.811219,51.34418],[-0.783225,51.34084],[-0.763252,51.32721],[-0.760048,51.32013],[-0.741834,51.31112],[-0.728423,51.28238],[-0.726306,51.25653],[-0.737128,51.23126],[-0.748978,51.2277],[-0.777122,51.23901],[-0.801926,51.23628],[-0.806106,51.24056],[-0.824914,51.23137],[-0.827009,51.22315],[-0.844932,51.20998],[-0.822682,51.18268],[-0.830416,51.15022],[-0.819518,51.15047],[-0.805037,51.15847],[-0.793819,51.15491],[-0.788794,51.14141],[-0.77846,51.13664],[-0.778131,51.13063],[-0.766544,51.11946],[-0.743652,51.11491],[-0.747146,51.10131],[-0.754112,51.10116],[-0.751217,51.09547],[-0.75506,51.08987],[-0.750757,51.0852],[-0.778501,51.07715],[-0.786448,51.06467],[-0.799544,51.06078],[-0.826446,51.05881],[-0.836458,51.0664],[-0.845193,51.06052],[-0.849904,51.0436],[-0.894853,51.01978],[-0.890651,51.00194],[-0.904614,50.99327],[-0.914614,50.97806],[-0.912784,50.9708],[-0.932457,50.94278],[-0.921188,50.9232],[-0.93793,50.91615],[-0.951325,50.89178],[-0.923681,50.86513],[-0.929757,50.85365],[-0.929033,50.84245],[-0.943419,50.82191],[-0.929902,50.78445],[-0.932748,50.77435],[-0.953469,50.73682],[-1.315673,50.77809]]]},{"id":"Hampshire-Aerial-RGB","name":"Hampshire Aerial RGB","type":"tms","template":"https://{switch:a,b,c}.hampshire.aerial.openstreetmap.org.uk/layer/gb_hampshire_aerial_rgb/{zoom}/{x}/{y}.png","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[8,20],"polygon":[[[-1.315673,50.77809],[-1.491387,50.73027],[-1.57113,50.69041],[-1.680953,50.71748],[-1.693378,50.73484],[-1.695277,50.74065],[-1.686891,50.74999],[-1.710684,50.74812],[-1.719504,50.75261],[-1.746001,50.74452],[-1.748452,50.75675],[-1.742869,50.76397],[-1.751012,50.77577],[-1.78525,50.76177],[-1.799108,50.77236],[-1.822565,50.77225],[-1.826778,50.78077],[-1.822497,50.79933],[-1.807317,50.80074],[-1.81566,50.80752],[-1.808894,50.81358],[-1.805787,50.83249],[-1.798157,50.83535],[-1.806491,50.84414],[-1.809882,50.86189],[-1.813783,50.85591],[-1.830516,50.85261],[-1.852711,50.85651],[-1.85655,50.86684],[-1.849205,50.87802],[-1.85082,50.89178],[-1.84077,50.90051],[-1.826931,50.89939],[-1.820062,50.90492],[-1.821513,50.91691],[-1.816889,50.92412],[-1.841137,50.92886],[-1.874458,50.91441],[-1.911294,50.9439],[-1.923386,50.95917],[-1.95751,50.97575],[-1.959101,50.99152],[-1.949071,50.98649],[-1.928787,51.00055],[-1.887094,51.0026],[-1.87393,51.0097],[-1.871695,50.99083],[-1.854331,51.00786],[-1.835675,51.01238],[-1.815019,50.9899],[-1.800312,50.99457],[-1.751838,50.98133],[-1.719271,50.98047],[-1.691416,50.95943],[-1.66829,50.95041],[-1.652596,50.95029],[-1.635362,50.96269],[-1.623972,50.95903],[-1.608898,50.97686],[-1.621721,50.98099],[-1.631149,50.99984],[-1.609836,51.01225],[-1.601734,51.01042],[-1.607874,51.01582],[-1.605696,51.02271],[-1.635423,51.03176],[-1.638583,51.04126],[-1.631067,51.07819],[-1.640253,51.09201],[-1.630602,51.10359],[-1.634078,51.11099],[-1.630674,51.11652],[-1.641093,51.12237],[-1.665249,51.12546],[-1.657236,51.15539],[-1.674737,51.177],[-1.67213,51.18708],[-1.696792,51.20233],[-1.69247,51.21617],[-1.652877,51.22301],[-1.635643,51.22019],[-1.623947,51.24136],[-1.614024,51.24467],[-1.607408,51.25513],[-1.577168,51.25863],[-1.544434,51.24826],[-1.538396,51.25085],[-1.534359,51.25919],[-1.543446,51.25957],[-1.540068,51.27602],[-1.545961,51.28095],[-1.535908,51.28978],[-1.525949,51.28975],[-1.530933,51.29948],[-1.530081,51.3111],[-1.536275,51.31596],[-1.529857,51.34057],[-1.515522,51.34219],[-1.494983,51.33228],[-1.435991,51.33861],[-1.447589,51.3464],[-1.446305,51.35699],[-1.430556,51.35941],[-1.416077,51.37517],[-1.348989,51.37045],[-1.314724,51.37627],[-1.275549,51.3707],[-1.251156,51.37511],[-1.241179,51.36938],[-1.222093,51.37271],[-1.176023,51.36102],[-1.143212,51.36028],[-1.118753,51.36156],[-1.120961,51.36859],[-1.116785,51.3767],[-1.083632,51.38712],[-1.047537,51.36122],[-0.990405,51.36619],[-0.972636,51.36297],[-0.92376,51.36937],[-0.876809,51.3555],[-0.86549,51.35947],[-0.82728,51.35574],[-0.811219,51.34418],[-0.783225,51.34084],[-0.763252,51.32721],[-0.760048,51.32013],[-0.741834,51.31112],[-0.728423,51.28238],[-0.726306,51.25653],[-0.737128,51.23126],[-0.748978,51.2277],[-0.777122,51.23901],[-0.801926,51.23628],[-0.806106,51.24056],[-0.824914,51.23137],[-0.827009,51.22315],[-0.844932,51.20998],[-0.822682,51.18268],[-0.830416,51.15022],[-0.819518,51.15047],[-0.805037,51.15847],[-0.793819,51.15491],[-0.788794,51.14141],[-0.77846,51.13664],[-0.778131,51.13063],[-0.766544,51.11946],[-0.743652,51.11491],[-0.747146,51.10131],[-0.754112,51.10116],[-0.751217,51.09547],[-0.75506,51.08987],[-0.750757,51.0852],[-0.778501,51.07715],[-0.786448,51.06467],[-0.799544,51.06078],[-0.826446,51.05881],[-0.836458,51.0664],[-0.845193,51.06052],[-0.849904,51.0436],[-0.894853,51.01978],[-0.890651,51.00194],[-0.904614,50.99327],[-0.914614,50.97806],[-0.912784,50.9708],[-0.932457,50.94278],[-0.921188,50.9232],[-0.93793,50.91615],[-0.951325,50.89178],[-0.923681,50.86513],[-0.929757,50.85365],[-0.929033,50.84245],[-0.943419,50.82191],[-0.929902,50.78445],[-0.932748,50.77435],[-0.953469,50.73682],[-1.315673,50.77809]]]},{"id":"IBGE_DF_Addresses","name":"IBGE Distrito Federal","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/wille/cirnnxni1000jg8nfppc8g7pm/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoid2lsbGUiLCJhIjoicFNVWk5VWSJ9.hluCd0YGvYHNlFi_utWe2g","scaleExtent":[0,20],"polygon":[[[-48.2444,-16.0508],[-48.2444,-15.5005],[-47.5695,-15.5005],[-47.5695,-16.0508],[-48.2444,-16.0508]]],"terms_text":"IBGE","description":"Addresses data from IBGE","overlay":true},{"id":"IBGE_Setores_Rurais","name":"IBGE Mapa de Setores Rurais","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/tmpsantos.i00mo1kj/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","scaleExtent":[0,14],"polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAOsSURBVHja7JXbb1RVFIe/fTmn05lepp0OpTcuUgQEElGgGGJSNYhggpdoTEz8m3w1xsQHE00MJj5oDGKCRI2IqKEKlpZCaSmXXubWmc6Zc/bFhwGp3N540LiTX7KTvbLWyvp+WVt473mUR/KIz7+/gJ64uNisJAW1lcbGUz9f+MQ6l5dCGID7EWpEMYcO7GB6tsifE9cItGo+CEEYaLyXl/p620+O7Nn2rp67sQCAUpLFpeXRYsWOKCUBcZ/UgqgRs2tnP5l0K2Pnx/GEJLYZ7RHU6hYwjy+V5l+KomStbElpmlKUl6NXpRQ0xV0SJCZhaKCdwwd2cHmmQJI4lAQpQAiQwqOkQEmJVprr89UjOt+TQylJobA8Wig0Xpby/liiKGawv503jjyFFJJiuY6Q4sFwpcAYl9JJnECguDq39EpinAoCif97QALnHEli2Lq5hxdHt5JpDZoJBDj3YLjOQyqUVb1UKCGlYH6xuk+pW7A8GOexJiHdqtn39AbW9nbw2Re/sbLS4Jk9mxgayHL23HUS41FyNaWmMax1ZPPtZ8Xv49eZXygdPnXmypcCiRAQhpqOtpB1g53sH9lMpVLno09P47xCSIjjhNcO7ySKYn4du4oxDucFUkqkFAgB1lp271p/SOdzbUT12tvbhntIZwLyXW309+XIdWcIAg3A+OQNEguplmarRinmbpQ5+NwT7N61EZMYKrWYUjmiUlmhutKgNaXG1g92H9dz1wrpqculkSg21OqOhcWIPy40reu9ZdvmXrq6Mgg8znkQAmsM+e4MADOzi/wyNsNSsU6tmhAbSxwbtgznfspkWqwulupHLs0UhtVd7nG3WMxcneSFZx/j4PNbOPHdRZx17N+7jlx3mo+PnmZ2roTzAqUkUkqEkKRSOh7s73nfuwB9c6H4phASpf5ZQN2++ICp6SLvvLWXTRvW4L1nemaRz786R62WEIYaLe7Y1VhHbz79Q0tKnqnWq8hCKXpSqYf5GeoNgzGObGeaiambHDsxQSN2tLQEiFXJPeC9p7M99bWUEikkMtSi5B/mZ+fpzraiteLHM1N8c3ISrTVKins3lfekU6rSu6btaBwnWGuQA33ZD7x3WNuE6P1tNbsx1tK/toMrs0uc+H6KIAyA1XF3lCSWgb7ssaGB/MVcVwc93Z3o7duH3yuWl7Pl5fh1JYKs815a571A4Lynoz0k35Ph+LfnybSG97BavQnDQIZdXZkPy8sNrG2ORfz/Zf73C/w1AJZ/tYbRRy7/AAAAAElFTkSuQmCC"},{"id":"IBGE_Setores_Urbanos","name":"IBGE Mapa de Setores Urbanos","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/tmpsantos.hgda0m6h/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","scaleExtent":[0,19],"polygon":[[[-69.947926,-4.231683],[-69.456589,-1.491186],[-69.397303,-1.36508],[-69.429886,-1.221726],[-69.395234,-1.125548],[-69.442921,-1.033507],[-69.418606,-0.998273],[-69.527996,-0.925137],[-69.525765,-0.868067],[-69.624907,-0.746671],[-69.561785,-0.636925],[-69.607832,-0.500798],[-69.844601,-0.337321],[-69.920535,-0.325734],[-70.043228,-0.189979],[-70.043018,0.563585],[-69.802724,0.571624],[-69.671096,0.667593],[-69.605289,0.61328],[-69.597007,0.654202],[-69.480024,0.735768],[-69.352767,0.61416],[-69.289139,0.649971],[-69.294839,0.603894],[-69.199748,0.605905],[-69.194253,0.649818],[-69.115633,0.64484],[-69.190008,0.740563],[-69.148809,0.767511],[-69.135763,0.872042],[-69.188462,0.913236],[-69.164602,0.941556],[-69.216787,0.972451],[-69.197732,0.999741],[-69.244939,1.056552],[-69.37641,1.087938],[-69.423124,1.04265],[-69.609891,1.098258],[-69.677182,1.069939],[-69.709626,1.118167],[-69.842658,1.072719],[-69.839717,1.718929],[-69.782358,1.692438],[-69.534643,1.776907],[-69.391089,1.72935],[-68.164499,1.729447],[-68.192071,1.7797],[-68.239542,1.770444],[-68.226881,1.829184],[-68.285547,1.830839],[-68.19583,2.034791],[-68.180335,1.976705],[-68.144166,1.978541],[-68.090429,1.897741],[-67.901623,1.811652],[-67.769425,2.009237],[-67.550949,2.047692],[-67.495186,2.163124],[-67.394044,2.228938],[-67.326716,2.063872],[-67.33083,1.941575],[-67.228307,1.841269],[-67.153836,1.831497],[-67.159221,1.675037],[-67.08017,1.385457],[-67.139231,1.320017],[-67.086753,1.167036],[-66.851191,1.228959],[-66.31032,0.744944],[-66.197375,0.781614],[-66.077833,0.761742],[-66.07024,0.8123],[-65.967121,0.81511],[-65.883691,0.941589],[-65.772612,0.958591],[-65.742103,1.001253],[-65.588935,1.004706],[-65.49624,0.87415],[-65.606227,0.707483],[-65.541158,0.648807],[-65.444985,0.689212],[-65.392132,0.756917],[-65.411977,0.824145],[-65.327341,0.93596],[-65.213022,0.902817],[-65.1749,0.94131],[-65.158308,1.124604],[-65.072322,1.153032],[-65.063171,1.11205],[-65.013614,1.109051],[-64.974445,1.202878],[-64.904386,1.251532],[-64.869656,1.227132],[-64.800533,1.315271],[-64.744461,1.225695],[-64.578896,1.340406],[-64.526079,1.443222],[-64.435855,1.470064],[-64.393901,1.529006],[-64.351112,1.529209],[-64.347774,1.495083],[-64.410191,1.40301],[-64.337907,1.361341],[-64.313597,1.456166],[-64.197073,1.520713],[-64.073497,1.64902],[-64.057812,1.928986],[-63.972189,1.991942],[-63.835555,1.966443],[-63.711552,2.046453],[-63.665009,2.018614],[-63.626795,2.112221],[-63.564739,2.135707],[-63.440594,2.125998],[-63.367416,2.268644],[-63.370884,2.411207],[-63.421234,2.451019],[-63.460358,2.396839],[-63.563976,2.445727],[-63.768047,2.439943],[-63.843575,2.491598],[-64.019142,2.461352],[-64.057297,2.497522],[-63.980331,2.723703],[-64.077088,2.872615],[-64.071556,2.921416],[-64.123489,2.990477],[-64.15754,2.982431],[-64.145917,3.034593],[-64.226417,3.12356],[-64.197945,3.201207],[-64.2444,3.430363],[-64.17437,3.568408],[-64.280998,3.709279],[-64.543565,3.857134],[-64.722389,4.117745],[-64.802033,4.174225],[-64.811229,4.270475],[-64.69522,4.253229],[-64.623,4.135],[-64.556502,4.105295],[-64.164,4.127],[-63.964,3.868],[-63.928,3.925],[-63.85,3.95],[-63.682,3.908],[-63.676,4.019],[-63.591,3.886],[-63.497,3.84],[-63.489,3.874],[-63.434,3.865],[-63.428,3.977],[-63.204,3.952],[-63.226,3.836],[-63.103,3.794],[-63.059,3.748],[-63.081,3.694],[-62.96,3.608],[-62.835,3.739],[-62.743,3.674],[-62.729,3.805],[-62.788,3.894],[-62.753,4.032],[-62.555,4.019],[-62.552,4.109],[-62.437,4.183],[-62.143085,4.077683],[-62.071,4.126],[-62.076,4.154],[-61.982,4.181],[-61.931749,4.120087],[-61.922129,4.161264],[-61.824,4.164],[-61.802,4.229],[-61.724,4.27],[-61.56,4.252],[-61.508,4.322],[-61.513,4.406],[-61.288,4.458],[-61.323,4.535],[-61.217,4.536],[-61.145587,4.480164],[-61.095,4.522],[-60.994,4.519],[-60.932,4.587],[-60.949,4.653],[-60.899,4.717],[-60.751,4.756],[-60.591,4.927],[-60.661,5.164],[-60.731972,5.212034],[-60.434,5.182],[-60.208247,5.283457],[-60.172,5.227],[-60.135,5.249],[-60.094,5.14],[-59.969842,5.063345],[-60.025235,4.706496],[-60.0705,4.616881],[-60.157246,4.572475],[-60.161141,4.517726],[-59.795027,4.46554],[-59.669479,4.376295],[-59.731895,4.285869],[-59.730691,4.180764],[-59.618177,4.13166],[-59.654059,4.069432],[-59.584169,3.968513],[-59.515301,3.944925],[-59.592788,3.885385],[-59.596307,3.793864],[-59.665547,3.781259],[-59.668415,3.702775],[-59.867279,3.577762],[-59.80205,3.501565],[-59.840796,3.431736],[-59.804878,3.35695],[-59.907,3.212],[-59.989438,2.881854],[-59.99,2.686],[-59.895,2.482],[-59.898724,2.362451],[-59.723148,2.276137],[-59.751,1.859],[-59.677,1.839],[-59.663,1.871],[-59.69,1.757],[-59.539,1.723],[-59.381,1.507],[-59.329,1.514],[-59.327,1.464],[-59.284,1.45],[-59.253,1.389],[-58.978,1.302],[-58.918,1.317],[-58.886,1.261],[-58.912,1.239],[-58.825116,1.171272],[-58.739558,1.199901],[-58.694563,1.297323],[-58.496224,1.267963],[-58.457871,1.371452],[-58.505113,1.403166],[-58.508726,1.462946],[-58.385587,1.469988],[-58.394723,1.526512],[-58.322366,1.597015],[-58.236003,1.546687],[-58.160643,1.560114],[-58.129425,1.498895],[-58.004228,1.503026],[-57.990093,1.658439],[-57.852056,1.66782],[-57.774307,1.729727],[-57.70509,1.730931],[-57.650421,1.682369],[-57.537597,1.700495],[-57.501869,1.786088],[-57.43776,1.826814],[-57.433428,1.905976],[-57.367678,1.923722],[-57.369119,1.956381],[-57.307117,1.996652],[-57.229228,1.937587],[-57.086676,2.026442],[-57.014207,1.914893],[-56.919708,1.93036],[-56.79793,1.853358],[-56.720956,1.925815],[-56.621453,1.945878],[-56.57976,1.90588],[-56.451258,1.956144],[-56.244042,1.87808],[-56.170899,1.900481],[-56.117621,1.850973],[-55.956377,1.845094],[-55.903854,1.888028],[-55.93635,1.986466],[-55.903103,2.041078],[-56.003072,2.167602],[-56.055046,2.184641],[-56.04288,2.227783],[-56.138873,2.265745],[-56.090122,2.372277],[-56.021814,2.342469],[-55.970516,2.529313],[-55.766629,2.455237],[-55.710278,2.399167],[-55.499712,2.443237],[-55.385327,2.41836],[-55.320185,2.515368],[-55.234736,2.50338],[-55.123404,2.567624],[-55.103017,2.52564],[-54.954239,2.583595],[-54.868459,2.439886],[-54.689167,2.453889],[-54.688611,2.324722],[-54.546667,2.318333],[-54.537778,2.265556],[-54.468611,2.213056],[-54.249167,2.146667],[-54.180556,2.1725],[-54.110833,2.112222],[-54.061389,2.191667],[-53.940833,2.219167],[-53.931944,2.271944],[-53.886667,2.267778],[-53.745,2.373889],[-53.733889,2.312222],[-53.529722,2.249167],[-53.458611,2.2575],[-53.328333,2.353333],[-53.216667,2.253333],[-53.278992,2.186027],[-53.118611,2.2225],[-52.994722,2.175278],[-52.909722,2.195833],[-52.847222,2.285556],[-52.675278,2.373889],[-52.594444,2.473889],[-52.540278,2.570278],[-52.564167,2.639444],[-52.439444,2.877778],[-52.395833,2.902222],[-52.331869,3.169382],[-52.214722,3.268333],[-51.971035,3.706957],[-51.921484,3.724219],[-51.921996,3.779202],[-51.797307,3.888877],[-51.777827,3.974056],[-51.658667,4.052762],[-51.613251,4.174366],[-51.63716,4.508337],[-51.494269,4.674258],[-51.11466,4.422859],[-50.942317,4.201651],[-50.854746,3.924906],[-50.855072,3.455726],[-50.753311,2.940571],[-50.299077,2.330792],[-49.738958,1.79143],[-48.237464,-0.074493],[-44.847277,-1.072461],[-43.546018,-2.047048],[-43.243891,-2.12403],[-42.781893,-2.330531],[-41.780839,-2.518594],[-41.508497,-2.684862],[-40.663653,-2.638294],[-40.50396,-2.575305],[-39.890697,-2.653276],[-39.151869,-3.044437],[-38.571513,-3.480465],[-38.343063,-3.54434],[-38.214209,-3.741026],[-38.125548,-3.805438],[-37.901824,-4.072646],[-37.779343,-4.180457],[-37.634014,-4.244541],[-37.51218,-4.415347],[-37.221221,-4.510451],[-37.078742,-4.713553],[-36.917155,-4.713724],[-36.622994,-4.858153],[-36.189692,-4.885051],[-35.936272,-4.833268],[-35.56471,-4.907577],[-35.336767,-4.99239],[-35.176587,-5.124974],[-34.794686,-6.335828],[-34.715871,-6.746155],[-34.623062,-6.903232],[-34.599531,-7.111326],[-34.643743,-7.987355],[-34.814973,-8.624717],[-35.025304,-9.137609],[-35.558478,-9.812613],[-35.696634,-9.900261],[-35.964008,-10.312805],[-36.061552,-10.37447],[-36.26639,-10.645931],[-36.61764,-10.810823],[-36.787254,-10.95151],[-36.99511,-11.296022],[-37.113685,-11.412607],[-37.460024,-12.10275],[-37.896682,-12.758442],[-38.221464,-13.097172],[-38.611462,-13.265369],[-38.853373,-14.655076],[-38.743882,-15.600892],[-38.664562,-15.747405],[-38.646967,-15.883266],[-38.801305,-16.248384],[-38.929333,-16.807754],[-38.531928,-17.800259],[-38.491713,-18.004604],[-38.536609,-18.09683],[-38.670528,-18.168548],[-39.352877,-18.108916],[-39.467501,-18.303591],[-39.545286,-18.785483],[-39.492274,-19.401339],[-39.634771,-19.744027],[-39.863532,-19.886808],[-40.178273,-20.754256],[-40.814417,-21.676723],[-40.769483,-21.877862],[-40.814417,-22.097019],[-41.508604,-22.526375],[-41.596664,-22.836265],[-41.792922,-23.088229],[-41.914838,-23.185266],[-43.196028,-23.267026],[-44.077347,-23.405007],[-45.13508,-24.120141],[-46.613678,-24.675116],[-47.853759,-25.470117],[-48.280105,-26.230365],[-48.348968,-26.750814],[-48.110759,-27.282079],[-48.211478,-27.855916],[-48.407125,-28.432546],[-48.686152,-28.760155],[-48.915601,-28.863052],[-49.157895,-29.028715],[-49.527482,-29.42005],[-49.82565,-29.865594],[-50.173442,-30.642824],[-50.604413,-31.241346],[-51.187855,-31.776463],[-51.742115,-32.105387],[-51.892358,-32.295963],[-52.061165,-32.385044],[-52.270865,-32.92102],[-52.459864,-33.253686],[-52.615046,-33.422913],[-53.18109,-33.868906],[-53.430525,-33.739471],[-53.439511,-33.693469],[-53.532282,-33.688801],[-53.518189,-33.153425],[-53.444381,-33.052961],[-53.244678,-32.934886],[-53.310078,-32.918753],[-53.294539,-32.899314],[-53.184956,-32.850431],[-53.145689,-32.792023],[-53.085802,-32.78835],[-53.075583,-32.740881],[-53.249925,-32.604096],[-53.391374,-32.585728],[-53.464232,-32.484461],[-53.58321,-32.451918],[-53.745987,-32.07848],[-53.833752,-32.05524],[-53.849776,-32.000642],[-53.960733,-31.955318],[-53.969722,-31.917655],[-54.100193,-31.928245],[-54.454896,-31.652948],[-54.452798,-31.599585],[-54.586765,-31.456563],[-54.836702,-31.442003],[-54.886225,-31.377302],[-54.940871,-31.380685],[-55.007233,-31.266919],[-55.074459,-31.332155],[-55.240034,-31.260616],[-55.291184,-31.142264],[-55.340373,-31.131436],[-55.349811,-31.039216],[-55.423057,-31.018229],[-55.577415,-30.833089],[-55.658342,-30.863997],[-55.66621,-30.953954],[-55.723,-30.943],[-55.727,-30.979],[-55.882,-31.077],[-56.009887,-31.082667],[-56.022407,-30.785651],[-56.125077,-30.73871],[-56.170739,-30.615174],[-56.260953,-30.585086],[-56.291926,-30.519674],[-56.381765,-30.499556],[-56.461264,-30.384864],[-56.547059,-30.359455],[-56.541147,-30.312907],[-56.618695,-30.300545],[-56.64628,-30.203457],[-56.776617,-30.163303],[-56.807771,-30.103006],[-57.071128,-30.086714],[-57.220813,-30.289278],[-57.313034,-30.257847],[-57.392294,-30.304737],[-57.465741,-30.265891],[-57.52431,-30.285693],[-57.560874,-30.211343],[-57.647439,-30.194834],[-57.480465,-30.123146],[-57.337128,-29.992845],[-57.294,-29.831],[-57.121,-29.765],[-56.898876,-29.531786],[-56.819054,-29.488163],[-56.766182,-29.377679],[-56.701637,-29.359128],[-56.593147,-29.125164],[-56.418,-29.075],[-56.407753,-28.974798],[-56.29995,-28.896138],[-56.296517,-28.802705],[-56.178585,-28.759223],[-56.009843,-28.607182],[-56.012491,-28.508726],[-55.883574,-28.479231],[-55.877394,-28.361586],[-55.751566,-28.370951],[-55.694329,-28.422043],[-55.670468,-28.332177],[-55.774151,-28.27414],[-55.775696,-28.244807],[-55.631672,-28.177189],[-55.607468,-28.116039],[-55.559574,-28.165234],[-55.495201,-28.076818],[-55.446106,-28.097869],[-55.368,-28.029],[-55.382994,-27.979479],[-55.343,-27.972],[-55.327065,-27.926637],[-55.265742,-27.929692],[-55.196,-27.856],[-55.133,-27.897],[-55.106,-27.846],[-55.035,-27.858],[-55.081,-27.779],[-54.936,-27.772],[-54.906169,-27.638708],[-54.85,-27.624],[-54.814,-27.533],[-54.775,-27.586],[-54.679261,-27.573936],[-54.677088,-27.508003],[-54.621,-27.541],[-54.574,-27.453],[-54.524598,-27.505902],[-54.444,-27.472],[-54.470814,-27.426739],[-54.41,-27.405],[-54.354662,-27.465284],[-54.340674,-27.403105],[-54.284845,-27.448195],[-54.261,-27.397],[-54.217363,-27.386035],[-54.172,-27.254],[-54.156185,-27.29619],[-54.088718,-27.301488],[-54.010264,-27.19978],[-53.962194,-27.196984],[-53.951948,-27.151693],[-53.798789,-27.146289],[-53.802327,-27.040278],[-53.760874,-27.065428],[-53.785853,-27.026738],[-53.747302,-27.032184],[-53.709196,-26.934136],[-53.671251,-26.942224],[-53.696837,-26.860147],[-53.660588,-26.858139],[-53.758143,-26.72045],[-53.720498,-26.650994],[-53.758643,-26.641128],[-53.637393,-26.249682],[-53.742,-26.108],[-53.734086,-26.043331],[-53.836191,-25.971657],[-53.822137,-25.793767],[-53.891125,-25.622859],[-53.948952,-25.611703],[-53.956385,-25.646285],[-54.01,-25.567],[-54.075917,-25.557657],[-54.098,-25.619],[-54.099,-25.495],[-54.206,-25.541],[-54.178,-25.584],[-54.23,-25.562],[-54.25,-25.597],[-54.28,-25.556],[-54.383946,-25.597471],[-54.432884,-25.69756],[-54.492703,-25.618096],[-54.593535,-25.592753],[-54.619413,-25.453118],[-54.429502,-25.159149],[-54.435485,-24.947695],[-54.324373,-24.660587],[-54.327141,-24.470729],[-54.25877,-24.363771],[-54.345365,-24.147047],[-54.28223,-24.073356],[-54.43984,-23.904464],[-54.669779,-23.812615],[-54.705325,-23.86452],[-54.89,-23.898],[-54.924,-23.959],[-55.062233,-23.993353],[-55.107,-23.961],[-55.229072,-24.013828],[-55.304152,-23.965042],[-55.345417,-23.994583],[-55.414227,-23.964505],[-55.441667,-23.700843],[-55.473056,-23.648343],[-55.53989,-23.624997],[-55.52356,-23.197334],[-55.541986,-23.1561],[-55.596348,-23.149926],[-55.665778,-22.852742],[-55.61432,-22.655211],[-55.723635,-22.551661],[-55.743017,-22.392661],[-55.789394,-22.384601],[-55.84304,-22.287251],[-56.209831,-22.278052],[-56.364855,-22.169491],[-56.39404,-22.074341],[-56.507114,-22.095609],[-56.637053,-22.263407],[-56.703442,-22.216928],[-56.720261,-22.264792],[-56.793443,-22.242379],[-56.842854,-22.301554],[-56.88343,-22.247555],[-56.996705,-22.222459],[-57.374403,-22.232043],[-57.580396,-22.175344],[-57.610596,-22.09462],[-57.707512,-22.091108],[-57.801829,-22.150722],[-57.993842,-22.090233],[-58.009461,-22.040379],[-57.912806,-21.88266],[-57.966028,-21.850453],[-57.908658,-21.773548],[-57.947143,-21.744133],[-57.883287,-21.689028],[-57.934365,-21.650365],[-57.913865,-21.590213],[-57.967953,-21.524324],[-57.853501,-21.331091],[-57.920188,-21.276551],[-57.850665,-21.224075],[-57.868337,-21.044168],[-57.819191,-20.940665],[-57.928365,-20.900364],[-57.855199,-20.834026],[-57.898631,-20.78872],[-57.961828,-20.7916],[-57.934779,-20.745653],[-57.867316,-20.732649],[-57.924136,-20.66392],[-57.988482,-20.698787],[-57.998465,-20.435512],[-58.093394,-20.355544],[-58.09596,-20.254451],[-58.162164,-20.259525],[-58.121521,-20.19246],[-58.169322,-20.1694],[-57.953465,-20.020944],[-57.902481,-20.042071],[-57.857957,-19.970298],[-58.131,-19.758],[-57.784,-19.033],[-57.694,-19.011],[-57.719,-18.899],[-57.766,-18.899],[-57.557,-18.24],[-57.453,-18.231],[-57.574,-18.131],[-57.723019,-17.83074],[-57.684723,-17.830599],[-57.709906,-17.727016],[-57.783,-17.639],[-57.736963,-17.558303],[-57.883,-17.449],[-57.996,-17.515],[-58.06,-17.45],[-58.116,-17.451],[-58.151,-17.384],[-58.263,-17.344],[-58.396,-17.181],[-58.423,-16.989],[-58.474,-16.935],[-58.47,-16.703],[-58.436,-16.592],[-58.333,-16.49],[-58.322265,-16.265589],[-58.388,-16.261],[-58.430595,-16.322642],[-60.173354,-16.266724],[-60.238,-15.473],[-60.57543,-15.096769],[-60.244,-15.096],[-60.272,-14.62],[-60.321,-14.608],[-60.492,-14.188],[-60.479,-14.097],[-60.380664,-13.988799],[-60.45062,-13.936404],[-60.455989,-13.854216],[-60.490682,-13.857824],[-60.46776,-13.794461],[-60.767546,-13.683292],[-60.876785,-13.621487],[-60.918574,-13.543337],[-61.005601,-13.551996],[-61.012902,-13.489245],[-61.093796,-13.490807],[-61.103141,-13.530561],[-61.181554,-13.505573],[-61.192359,-13.536949],[-61.299537,-13.477175],[-61.465268,-13.554268],[-61.579274,-13.487115],[-61.852,-13.538],[-61.892,-13.431],[-61.969683,-13.407588],[-61.975924,-13.366952],[-62.114977,-13.259315],[-62.115,-13.163],[-62.152539,-13.159928],[-62.167025,-13.113456],[-62.19,-13.153],[-62.214,-13.111],[-62.272687,-13.156875],[-62.391781,-13.134711],[-62.453,-13.064],[-62.612,-13.041],[-62.65,-12.965],[-62.729,-13.02],[-62.779,-13.009],[-62.896724,-12.853898],[-63.011336,-12.836021],[-63.081863,-12.723233],[-63.061627,-12.685844],[-63.157261,-12.613801],[-63.246214,-12.662218],[-63.237129,-12.690429],[-63.301251,-12.681378],[-63.440517,-12.608],[-63.436267,-12.565261],[-63.506408,-12.565622],[-63.552952,-12.505978],[-63.784795,-12.428713],[-63.889567,-12.447451],[-63.899486,-12.502039],[-63.951444,-12.531792],[-64.134642,-12.477322],[-64.167805,-12.515028],[-64.175041,-12.466751],[-64.229451,-12.454185],[-64.290176,-12.503129],[-64.294518,-12.458196],[-64.410575,-12.444359],[-64.512166,-12.355099],[-64.512561,-12.225624],[-64.704064,-12.182697],[-64.707187,-12.086838],[-64.754865,-12.157621],[-64.768801,-12.09356],[-64.837475,-12.117855],[-64.809537,-12.056328],[-64.840774,-12.010268],[-65.035483,-11.994084],[-65.013981,-11.903028],[-65.072696,-11.865867],[-65.086718,-11.708204],[-65.189531,-11.723525],[-65.182161,-11.756092],[-65.259304,-11.710531],[-65.211777,-11.528565],[-65.3074,-11.499572],[-65.332765,-11.339862],[-65.29053,-11.322751],[-65.343466,-11.308197],[-65.358345,-11.268339],[-65.35938,-11.220675],[-65.312945,-11.195782],[-65.353869,-11.184194],[-65.361772,-11.140313],[-65.282689,-11.090091],[-65.300713,-11.031416],[-65.250529,-10.985063],[-65.274764,-10.87302],[-65.353755,-10.788812],[-65.34667,-10.681551],[-65.405689,-10.639345],[-65.430109,-10.485047],[-65.288,-10.219],[-65.333,-9.965],[-65.285884,-9.844131],[-65.39313,-9.686832],[-65.443942,-9.669572],[-65.488301,-9.71015],[-65.556107,-9.844976],[-65.627003,-9.838042],[-65.66963,-9.781288],[-65.710231,-9.808573],[-65.683947,-9.749925],[-65.743201,-9.782964],[-65.770134,-9.734417],[-65.794374,-9.792952],[-65.799619,-9.756631],[-65.865323,-9.795327],[-65.871843,-9.753068],[-65.919756,-9.753138],[-65.982222,-9.810112],[-66.151,-9.785],[-66.426,-9.899],[-66.435,-9.866],[-66.619945,-9.893535],[-66.637012,-9.949831],[-66.875097,-10.08268],[-66.952801,-10.188858],[-66.996826,-10.200173],[-67.015368,-10.259191],[-67.17745,-10.339232],[-67.315446,-10.319324],[-67.311553,-10.377158],[-67.407166,-10.373864],[-67.443611,-10.45492],[-67.579247,-10.502796],[-67.640275,-10.598069],[-67.676308,-10.604839],[-67.708251,-10.710828],[-67.863861,-10.64067],[-68.032891,-10.654856],[-68.104561,-10.714264],[-68.103333,-10.775413],[-68.278194,-10.989261],[-68.715757,-11.144833],[-68.757668,-11.000789],[-68.911804,-11.02192],[-69.414529,-10.925752],[-69.736528,-10.974451],[-69.769028,-10.929722],[-69.934418,-10.921903],[-70.158691,-11.040958],[-70.306724,-11.069832],[-70.436752,-11.039233],[-70.530334,-10.934652],[-70.621025,-10.999821],[-70.623383,-9.820545],[-70.536629,-9.76584],[-70.599722,-9.562644],[-70.55282,-9.57093],[-70.56894,-9.531274],[-70.505061,-9.505566],[-70.496654,-9.424887],[-70.595806,-9.442496],[-70.663203,-9.526011],[-70.750669,-9.560426],[-70.793319,-9.638463],[-70.963367,-9.748913],[-70.993912,-9.817209],[-71.13974,-9.857016],[-71.22052,-9.969678],[-72.180404,-9.999672],[-72.151361,-9.797416],[-72.262955,-9.750855],[-72.252818,-9.616334],[-72.288209,-9.603158],[-72.282899,-9.539953],[-72.356876,-9.494598],[-72.519535,-9.491281],[-72.716756,-9.412195],[-73.203797,-9.407154],[-73.073518,-9.234608],[-73.009298,-9.222365],[-73.026124,-9.177857],[-72.958197,-9.143024],[-72.940912,-8.98494],[-72.999307,-8.917781],[-73.059012,-8.905612],[-73.149923,-8.6839],[-73.209066,-8.685696],[-73.287445,-8.619481],[-73.305502,-8.471966],[-73.389557,-8.468783],[-73.412865,-8.410991],[-73.537444,-8.345869],[-73.627388,-8.021875],[-73.73175,-7.968395],[-73.7725,-7.902372],[-73.761643,-7.858028],[-73.697059,-7.865275],[-73.684303,-7.77644],[-73.822166,-7.717883],[-73.990944,-7.536347],[-73.948005,-7.526614],[-73.919808,-7.465678],[-73.963944,-7.347639],[-73.87014,-7.378823],[-73.700302,-7.304295],[-73.79842,-7.113061],[-73.71046,-6.84019],[-73.536393,-6.6834],[-73.39115,-6.641929],[-73.352809,-6.593267],[-73.227413,-6.588843],[-73.187967,-6.523016],[-73.135226,-6.510461],[-73.104726,-6.406664],[-73.246638,-6.149625],[-73.238213,-6.043992],[-73.186803,-6.005125],[-73.152068,-5.86796],[-73.053029,-5.79517],[-72.959116,-5.656891],[-72.958885,-5.466129],[-72.860525,-5.271167],[-72.887249,-5.163067],[-72.73986,-5.088593],[-72.727648,-5.051993],[-72.621198,-5.051804],[-72.597999,-4.98386],[-72.382017,-4.872956],[-72.368955,-4.803869],[-72.126014,-4.734541],[-72.043346,-4.623844],[-72.00689,-4.646223],[-71.994637,-4.60996],[-71.947433,-4.608773],[-71.919086,-4.529796],[-71.88549,-4.538029],[-71.907302,-4.516441],[-71.766368,-4.504462],[-71.75109,-4.468866],[-71.708175,-4.511649],[-71.654788,-4.47246],[-71.650325,-4.503949],[-71.615477,-4.468695],[-71.633502,-4.515243],[-71.596251,-4.529276],[-71.537028,-4.464416],[-71.494284,-4.487006],[-71.507159,-4.439087],[-71.434375,-4.428818],[-71.42562,-4.470577],[-71.350261,-4.427278],[-71.307517,-4.462876],[-71.320906,-4.420089],[-71.277819,-4.442168],[-71.269751,-4.385003],[-71.202632,-4.379868],[-71.19422,-4.42471],[-71.144782,-4.38158],[-71.114913,-4.41119],[-71.106158,-4.377643],[-70.993892,-4.386543],[-70.995951,-4.34632],[-70.935698,-4.384318],[-70.844829,-4.279054],[-70.864474,-4.252452],[-70.816768,-4.230047],[-70.845805,-4.218722],[-70.759013,-4.159443],[-70.681468,-4.207908],[-70.642561,-4.128052],[-70.62521,-4.191505],[-70.561177,-4.177496],[-70.57357,-4.211693],[-70.547957,-4.136705],[-70.510363,-4.148242],[-70.504167,-4.200981],[-70.485349,-4.16132],[-70.43435,-4.162663],[-70.431458,-4.132173],[-70.33892,-4.179968],[-70.322808,-4.142062],[-70.287693,-4.165548],[-70.291411,-4.287086],[-70.214572,-4.297487],[-70.19194,-4.361791],[-70.155083,-4.273079],[-70.117489,-4.28585],[-70.108814,-4.25454],[-70.041889,-4.294089],[-70.079483,-4.314275],[-70.028256,-4.370297],[-69.991824,-4.374822],[-69.947926,-4.231683]],[[-34.000346,-3.766545],[-34.017967,-3.849854],[-34.006639,-3.918085],[-33.986081,-3.959524],[-33.959229,-3.992171],[-33.892099,-4.036535],[-33.816578,-4.050765],[-33.729309,-4.031513],[-33.666375,-3.9838],[-33.627356,-3.918504],[-33.615189,-3.849854],[-33.632391,-3.768639],[-33.686933,-3.695371],[-33.749868,-3.659782],[-33.816578,-3.648896],[-33.893358,-3.663969],[-33.960068,-3.708769],[-34.000346,-3.766545]],[[-32.553802,-4.008842],[-32.599371,-3.953096],[-32.640605,-3.873093],[-32.617548,-3.73712],[-32.583381,-3.705275],[-32.542283,-3.656062],[-32.459198,-3.630287],[-32.351742,-3.638874],[-32.300491,-3.676843],[-32.247488,-3.752659],[-32.23155,-3.818895],[-32.235697,-3.902469],[-32.301938,-3.988305],[-32.428982,-4.038401],[-32.553802,-4.008842]],[[-29.503214,0.793907],[-29.540975,0.868896],[-29.547268,0.92553],[-29.523668,0.994224],[-29.489578,1.061343],[-29.431364,1.102242],[-29.35899,1.120595],[-29.292384,1.113778],[-29.221584,1.077598],[-29.162845,1.003138],[-29.145014,0.926054],[-29.147636,0.883579],[-29.171761,0.819603],[-29.248855,0.743565],[-29.294482,0.72521],[-29.36371,0.718918],[-29.43556,0.739369],[-29.503214,0.793907]],[[-29.095373,-20.426486],[-29.197561,-20.335094],[-29.334298,-20.289323],[-29.467412,-20.328798],[-29.546045,-20.429577],[-29.553961,-20.527057],[-29.516965,-20.626133],[-29.409954,-20.689546],[-29.275994,-20.725777],[-29.159683,-20.662087],[-29.071882,-20.570881],[-28.971199,-20.647689],[-28.832861,-20.698136],[-28.679676,-20.620991],[-28.635486,-20.492836],[-28.634116,-20.471458],[-28.743098,-20.300936],[-28.868302,-20.272879],[-29.003102,-20.324158],[-29.095373,-20.426486]]],"terms_text":"IBGE","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAOsSURBVHja7JXbb1RVFIe/fTmn05lepp0OpTcuUgQEElGgGGJSNYhggpdoTEz8m3w1xsQHE00MJj5oDGKCRI2IqKEKlpZCaSmXXubWmc6Zc/bFhwGp3N540LiTX7KTvbLWyvp+WVt473mUR/KIz7+/gJ64uNisJAW1lcbGUz9f+MQ6l5dCGID7EWpEMYcO7GB6tsifE9cItGo+CEEYaLyXl/p620+O7Nn2rp67sQCAUpLFpeXRYsWOKCUBcZ/UgqgRs2tnP5l0K2Pnx/GEJLYZ7RHU6hYwjy+V5l+KomStbElpmlKUl6NXpRQ0xV0SJCZhaKCdwwd2cHmmQJI4lAQpQAiQwqOkQEmJVprr89UjOt+TQylJobA8Wig0Xpby/liiKGawv503jjyFFJJiuY6Q4sFwpcAYl9JJnECguDq39EpinAoCif97QALnHEli2Lq5hxdHt5JpDZoJBDj3YLjOQyqUVb1UKCGlYH6xuk+pW7A8GOexJiHdqtn39AbW9nbw2Re/sbLS4Jk9mxgayHL23HUS41FyNaWmMax1ZPPtZ8Xv49eZXygdPnXmypcCiRAQhpqOtpB1g53sH9lMpVLno09P47xCSIjjhNcO7ySKYn4du4oxDucFUkqkFAgB1lp271p/SOdzbUT12tvbhntIZwLyXW309+XIdWcIAg3A+OQNEguplmarRinmbpQ5+NwT7N61EZMYKrWYUjmiUlmhutKgNaXG1g92H9dz1wrpqculkSg21OqOhcWIPy40reu9ZdvmXrq6Mgg8znkQAmsM+e4MADOzi/wyNsNSsU6tmhAbSxwbtgznfspkWqwulupHLs0UhtVd7nG3WMxcneSFZx/j4PNbOPHdRZx17N+7jlx3mo+PnmZ2roTzAqUkUkqEkKRSOh7s73nfuwB9c6H4phASpf5ZQN2++ICp6SLvvLWXTRvW4L1nemaRz786R62WEIYaLe7Y1VhHbz79Q0tKnqnWq8hCKXpSqYf5GeoNgzGObGeaiambHDsxQSN2tLQEiFXJPeC9p7M99bWUEikkMtSi5B/mZ+fpzraiteLHM1N8c3ISrTVKins3lfekU6rSu6btaBwnWGuQA33ZD7x3WNuE6P1tNbsx1tK/toMrs0uc+H6KIAyA1XF3lCSWgb7ssaGB/MVcVwc93Z3o7duH3yuWl7Pl5fh1JYKs815a571A4Lynoz0k35Ph+LfnybSG97BavQnDQIZdXZkPy8sNrG2ORfz/Zf73C/w1AJZ/tYbRRy7/AAAAAElFTkSuQmCC"},{"id":"IBGE_BC250_Aglomerado_Rural","name":"IBGE-BC250-Aglomerado Rural Isolado","type":"wms","template":"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Aglomerado_Rural_Isolado_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BC250_Pista_Pouso","name":"IBGE-BC250-Pista de Pouso","type":"wms","template":"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Pista_Ponto_Pouso_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BC250_Rios_Drenagem","name":"IBGE-BC250-Rios Drenagem","type":"wms","template":"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Trecho_Drenagem_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BC250_Terra_Indegina","name":"IBGE-BC250-Terra Indigena","type":"wms","template":"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Terra_Indigena_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BC250_Rodoviario","name":"IBGE-BC250-Trecho Rodoviario","type":"wms","template":"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Trecho_Rodoviario_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image/png&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BC250_Uso_Sustentavel","name":"IBGE-BC250-Unidade de Uso Sistentável - APA","type":"wms","template":"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Unidade_Uso_Sustentavel_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BC250_Villa","name":"IBGE-BC250-Villa","type":"wms","template":"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Vila_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BCIM_Gerador_Eletrica","name":"IBGE-BCIM-Estações Geradora de Energia Elétrica","type":"wms","template":"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BCIM_Est_Gerad_Energia_Eletrica_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"IBGE_BCIM_Municipio","name":"IBGE-BCIM-Município","type":"wms","template":"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BCIM_Municipio_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE","projection":"EPSG:3857","polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]],"terms_text":"IBGE","overlay":true},{"id":"Haiti-Drone","name":"Imagerie Drone (Haiti)","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/iomhaiti/{zoom}/{x}/{y}","polygon":[[[-72.1547401,19.6878969],[-72.162234,19.689011],[-72.164995,19.6932445],[-72.1657838,19.6979977],[-72.161603,19.7035677],[-72.1487449,19.7028993],[-72.1477194,19.7026765],[-72.1485082,19.7001514],[-72.1436963,19.7011169],[-72.1410143,19.7000029],[-72.139476,19.6973664],[-72.1382533,19.6927617],[-72.1386872,19.6923161],[-72.1380561,19.6896423],[-72.1385294,19.6894938],[-72.1388055,19.6901251],[-72.1388844,19.6876741],[-72.1378195,19.6872656],[-72.13778,19.6850003],[-72.1369517,19.6855945],[-72.136794,19.6840719],[-72.135729,19.6835148],[-72.1355713,19.6740817],[-72.1366362,19.6708133],[-72.1487843,19.6710733],[-72.1534779,19.6763843],[-72.1530835,19.6769414],[-72.1533251,19.6769768],[-72.1532807,19.6796525],[-72.1523834,19.6797175],[-72.1522749,19.6803488],[-72.1519101,19.6803395],[-72.1518608,19.6805067],[-72.1528173,19.6806552],[-72.1522299,19.6833011],[-72.1507801,19.6831499],[-72.1504457,19.6847862],[-72.1508591,19.6843492],[-72.1530087,19.6849898],[-72.1546258,19.6854354],[-72.1543103,19.6870694],[-72.1547244,19.6868466],[-72.1548501,19.6877564],[-72.1545814,19.6877982],[-72.1547401,19.6878969]],[[-72.1310601,19.6718929],[-72.1259842,19.6772765],[-72.1255379,19.6776179],[-72.1216891,19.6776442],[-72.1149677,19.672602],[-72.1152745,19.6687152],[-72.1198205,19.6627535],[-72.1227768,19.6625696],[-72.1248965,19.662701],[-72.1285779,19.6645394],[-72.1308091,19.6661677],[-72.1316737,19.668794],[-72.1315621,19.671],[-72.1310601,19.6718929]],[[-71.845795,19.6709758],[-71.8429354,19.6759525],[-71.8410027,19.6759525],[-71.8380249,19.6755254],[-71.8378671,19.6745041],[-71.8390504,19.6743927],[-71.8390109,19.6741141],[-71.8398392,19.673947],[-71.8389123,19.6736127],[-71.8380249,19.67209],[-71.8380052,19.6726285],[-71.8376699,19.6727214],[-71.8376305,19.672545],[-71.8354414,19.6732135],[-71.835333,19.6729999],[-71.8331242,19.6734642],[-71.8326706,19.6716815],[-71.8321579,19.67209],[-71.8307183,19.6694902],[-71.8306009,19.6697594],[-71.8302174,19.6698907],[-71.8291833,19.6672095],[-71.8290749,19.6672095],[-71.8289122,19.6667916],[-71.8289516,19.6666199],[-71.8288333,19.6663506],[-71.8285572,19.6664759],[-71.8288678,19.6672466],[-71.8287593,19.6674138],[-71.8277979,19.6678177],[-71.8277112,19.6678586],[-71.8278263,19.6679637],[-71.8271831,19.6681212],[-71.8271761,19.6680917],[-71.8264405,19.6683921],[-71.8264074,19.6683231],[-71.8261954,19.6684253],[-71.8261806,19.6683556],[-71.8258946,19.6684206],[-71.8258897,19.6686574],[-71.8251551,19.6687549],[-71.8254509,19.6691588],[-71.8229332,19.6695739],[-71.822713,19.6696658],[-71.8227688,19.6697577],[-71.8201751,19.6709855],[-71.8198474,19.6704537],[-71.8197985,19.6706014],[-71.8194674,19.6707557],[-71.8182472,19.6713433],[-71.8181426,19.6711431],[-71.8175813,19.6714254],[-71.816959,19.6707672],[-71.8176388,19.6718965],[-71.8171403,19.6720376],[-71.8158225,19.6718045],[-71.8138354,19.6711874],[-71.8123259,19.6706982],[-71.8121759,19.6704258],[-71.8124304,19.6701467],[-71.8119184,19.6700141],[-71.8118765,19.6705828],[-71.811169,19.6703483],[-71.8095938,19.6698516],[-71.8077992,19.6692829],[-71.8056028,19.668612],[-71.8051443,19.6668942],[-71.8051196,19.6652322],[-71.8052315,19.661979],[-71.8065603,19.6523921],[-71.8073412,19.6482946],[-71.8099686,19.6468292],[-71.8147517,19.6454502],[-71.8147726,19.6455619],[-71.8150027,19.6455093],[-71.8149469,19.6453846],[-71.8159928,19.6450234],[-71.8158882,19.6448855],[-71.8165854,19.6446097],[-71.8190119,19.643802],[-71.8211524,19.643454],[-71.8221564,19.6433292],[-71.8269046,19.643211],[-71.8280481,19.6432241],[-71.8304466,19.6440778],[-71.8306419,19.6448592],[-71.8295263,19.6450365],[-71.8296064,19.6456111],[-71.8299411,19.6455651],[-71.8303699,19.6451744],[-71.830471,19.6453452],[-71.8308092,19.6451974],[-71.8310184,19.6451088],[-71.8312519,19.6458541],[-71.8311125,19.6458245],[-71.831367,19.6465862],[-71.8328939,19.646189],[-71.8344566,19.6457062],[-71.8344664,19.6463052],[-71.834215,19.6461938],[-71.8342002,19.6465513],[-71.8346702,19.6463],[-71.8349118,19.6463905],[-71.8347984,19.6462187],[-71.8354393,19.6458496],[-71.8355034,19.6458032],[-71.8364747,19.6461328],[-71.8376382,19.6472658],[-71.8379143,19.647888],[-71.8390483,19.6508039],[-71.8456942,19.6696203],[-71.845795,19.6709758]],[[-72.098878,18.54843],[-72.096993,18.5501994],[-72.0972888,18.5503209],[-72.0968451,18.5503489],[-72.0955632,18.551854],[-72.0956428,18.5526742],[-72.0959914,18.5533748],[-72.0962145,18.553203],[-72.0962842,18.5535665],[-72.0964446,18.5535533],[-72.0965352,18.5539764],[-72.0965056,18.554173],[-72.0966085,18.5541747],[-72.0965178,18.5542127],[-72.0968769,18.5546588],[-72.0979018,18.5552141],[-72.1006211,18.5555875],[-72.1014926,18.5556206],[-72.1024339,18.5555016],[-72.103417,18.5543515],[-72.1034798,18.5516215],[-72.1030789,18.5516149],[-72.1033752,18.5515224],[-72.1035042,18.5515224],[-72.1035239,18.5502417],[-72.1028701,18.5503062],[-72.1029015,18.55025],[-72.1028457,18.5501773],[-72.1035081,18.5500252],[-72.103491,18.5497396],[-72.1035181,18.5497361],[-72.1035398,18.5489039],[-72.1034317,18.5487056],[-72.102717,18.5481437],[-72.1025601,18.5481536],[-72.10229,18.5482751],[-72.1022891,18.5482569],[-72.1025201,18.5481396],[-72.1023388,18.5481321],[-72.0999082,18.5480901],[-72.09907,18.5483799],[-72.098878,18.54843]],[[-72.2542503,18.568262],[-72.2560252,18.5717765],[-72.2557886,18.5748049],[-72.2535009,18.5755526],[-72.2522782,18.5755526],[-72.2499906,18.5740945],[-72.2473874,18.5698323],[-72.2460069,18.566729],[-72.2458492,18.5629527],[-72.2479396,18.5625414],[-72.2501483,18.5628031],[-72.2519232,18.5650839],[-72.2542503,18.568262]],[[-72.303145,18.5332749],[-72.3031275,18.5331799],[-72.3048311,18.5311081],[-72.3097397,18.5311081],[-72.3164332,18.5324302],[-72.3234056,18.5366083],[-72.3261388,18.5387765],[-72.3261946,18.5426371],[-72.3170468,18.5540596],[-72.3130864,18.5540596],[-72.2987511,18.5453342],[-72.2988627,18.5407333],[-72.2962969,18.5404689],[-72.2954602,18.5395169],[-72.2961853,18.5338582],[-72.2971893,18.5332235],[-72.3007034,18.5332764],[-72.3022652,18.5342284],[-72.3028486,18.5335189],[-72.303104,18.5333361],[-72.303181,18.5334007],[-72.3035793,18.5335614],[-72.3030793,18.5346463],[-72.303715,18.5339873],[-72.3045286,18.5344052],[-72.3044015,18.5345097],[-72.3062747,18.5352571],[-72.3063107,18.5352741],[-72.3061219,18.5357628],[-72.3061219,18.5358196],[-72.30637,18.5358928],[-72.3062726,18.5354869],[-72.3066688,18.5350891],[-72.3061963,18.5349706],[-72.3058869,18.5349385],[-72.3055373,18.5346833],[-72.3054864,18.534613],[-72.3055585,18.5345065],[-72.3046749,18.5342293],[-72.3047617,18.5338817],[-72.3043252,18.5337511],[-72.3042595,18.5336346],[-72.303145,18.5332749]],[[-72.2981405,18.477502],[-72.2935652,18.4948587],[-72.2922242,18.4964297],[-72.2931708,18.4972526],[-72.2892266,18.5057058],[-72.2878067,18.5080996],[-72.2850458,18.5119893],[-72.2840203,18.5113161],[-72.2808649,18.515879],[-72.2773151,18.5175994],[-72.2723454,18.5175246],[-72.2662714,18.5144578],[-72.2665869,18.5066783],[-72.2692643,18.5046154],[-72.2661965,18.5029756],[-72.2688181,18.4965222],[-72.2691528,18.4959403],[-72.2702684,18.4961519],[-72.2702684,18.4955964],[-72.2690691,18.49557],[-72.2692922,18.4937714],[-72.2736988,18.4859951],[-72.2746749,18.4850429],[-72.2751769,18.483403],[-72.2765435,18.4813398],[-72.2773523,18.4814985],[-72.2783006,18.4809694],[-72.2778544,18.4807049],[-72.2771013,18.480123],[-72.2789978,18.4775836],[-72.279723,18.4772927],[-72.2806433,18.4776365],[-72.2813685,18.4771604],[-72.2808386,18.4769752],[-72.2812848,18.4758378],[-72.2823167,18.4751765],[-72.2851615,18.4750971],[-72.2849941,18.4763668],[-72.2854404,18.4769752],[-72.286277,18.4756262],[-72.2869325,18.4754675],[-72.2865978,18.4751897],[-72.2865978,18.4750046],[-72.2909765,18.4747268],[-72.2946579,18.4749384],[-72.2973911,18.476843],[-72.2981405,18.477502]],[[-72.3466657,18.5222375],[-72.346833,18.5244325],[-72.3475303,18.5277645],[-72.3455501,18.5291131],[-72.3403069,18.5292189],[-72.3383267,18.5280289],[-72.3369043,18.530118],[-72.3338086,18.5296684],[-72.3289279,18.5270769],[-72.328649,18.5253316],[-72.3292068,18.5232689],[-72.330406,18.5220524],[-72.3321631,18.5221847],[-72.3322467,18.5191963],[-72.3369183,18.5183633],[-72.3382012,18.5184691],[-72.3381454,18.5181782],[-72.3411993,18.5177947],[-72.3454943,18.5171997],[-72.3492595,18.517279],[-72.3504308,18.5188922],[-72.3503472,18.5206112],[-72.3496778,18.5220392],[-72.3466657,18.5222375]],[[-72.3303078,18.5486462],[-72.3429687,18.5508149],[-72.3433236,18.5530585],[-72.3413121,18.5614341],[-72.3390639,18.5613593],[-72.3384723,18.5638271],[-72.3375257,18.5654348],[-72.3348436,18.5650609],[-72.3311755,18.5638271],[-72.3312149,18.5616211],[-72.3232082,18.5606863],[-72.3212361,18.559602],[-72.3208023,18.5587046],[-72.3208811,18.557882],[-72.3259493,18.5580274],[-72.3266186,18.5581993],[-72.3259214,18.5577498],[-72.3250986,18.5573797],[-72.3233767,18.552263],[-72.3245994,18.5478507],[-72.3288986,18.5483742],[-72.329979,18.5489548],[-72.3303078,18.5486462]],[[-72.3231383,18.5269828],[-72.3223434,18.528067],[-72.3209629,18.5279745],[-72.3207816,18.5271282],[-72.3208513,18.5253697],[-72.3214649,18.5249598],[-72.3225666,18.5248937],[-72.3228454,18.52533],[-72.3232359,18.5264804],[-72.3231383,18.5269828]],[[-72.2160832,18.6457752],[-72.2159649,18.6553795],[-72.2030279,18.6558279],[-72.1947057,18.6553421],[-72.1922208,18.6545573],[-72.1920631,18.6521283],[-72.193483,18.6477559],[-72.201253,18.6385249],[-72.2069327,18.6388239],[-72.2120996,18.6424117],[-72.2118068,18.6430591],[-72.2121693,18.6426892],[-72.2127968,18.6427552],[-72.2134662,18.6431252],[-72.2135638,18.6437462],[-72.2154176,18.6443947],[-72.2158909,18.6450301],[-72.2160832,18.6457752]],[[-72.2867654,18.6482017],[-72.2900977,18.6527446],[-72.28981,18.6536532],[-72.2900738,18.6542664],[-72.290721,18.6537667],[-72.2910327,18.6544709],[-72.2912485,18.654221],[-72.29168,18.6558905],[-72.2912245,18.656606],[-72.2922673,18.65597],[-72.2926869,18.6567536],[-72.2930705,18.6567309],[-72.2941253,18.6581846],[-72.2960192,18.6608421],[-72.2959713,18.6619096],[-72.2932862,18.664567],[-72.2906731,18.6659979],[-72.2895943,18.6661342],[-72.2895943,18.6665657],[-72.2877004,18.6664749],[-72.2875805,18.6676559],[-72.2831214,18.6697227],[-72.2796453,18.6696546],[-72.2784311,18.6690787],[-72.2783972,18.6687736],[-72.277736,18.6691671],[-72.2774394,18.669143],[-72.2770071,18.6683159],[-72.2765575,18.6681125],[-72.2765385,18.6680583],[-72.2752319,18.6685239],[-72.2749292,18.6674649],[-72.2746416,18.6674309],[-72.2734668,18.6682145],[-72.2732271,18.6682712],[-72.2726757,18.6671583],[-72.2719147,18.6674288],[-72.2718808,18.6673405],[-72.2688149,18.6681868],[-72.2688269,18.6671761],[-72.2690786,18.6668241],[-72.2688149,18.66679],[-72.2681077,18.6670739],[-72.2676282,18.6673805],[-72.2675563,18.6666878],[-72.266861,18.666949],[-72.2655904,18.6673578],[-72.2654466,18.6670058],[-72.2647514,18.6674146],[-72.2629893,18.6681868],[-72.2628455,18.6681754],[-72.2626537,18.6676076],[-72.2623001,18.6677098],[-72.2624799,18.6679199],[-72.2624799,18.6682322],[-72.262306,18.6682606],[-72.2620963,18.6679654],[-72.2622761,18.6689193],[-72.2601484,18.6688966],[-72.2542749,18.6687944],[-72.2505388,18.6683476],[-72.2504371,18.669536],[-72.2477926,18.6698893],[-72.2415204,18.669793],[-72.2414187,18.6741933],[-72.2389167,18.6739759],[-72.2387249,18.6734649],[-72.2383653,18.6733059],[-72.2387009,18.6739532],[-72.2375502,18.6738964],[-72.2374183,18.6735103],[-72.237742,18.67334],[-72.2375142,18.6732605],[-72.236843,18.6734876],[-72.2364354,18.6724088],[-72.2355124,18.6726019],[-72.2354045,18.6724202],[-72.2353027,18.6729028],[-72.2345475,18.6726871],[-72.2343077,18.6724599],[-72.2342358,18.6734706],[-72.2334087,18.6734592],[-72.2332889,18.6733003],[-72.2327375,18.6732889],[-72.2327135,18.6735047],[-72.227703,18.6725281],[-72.2265283,18.6716537],[-72.226804,18.6715742],[-72.2274993,18.6715855],[-72.2274873,18.6714493],[-72.2272899,18.6714623],[-72.2272814,18.6712977],[-72.2272094,18.671358],[-72.2261785,18.6713693],[-72.2256032,18.670881],[-72.2255073,18.6694502],[-72.2261066,18.6696886],[-72.2261785,18.6695949],[-72.2259837,18.6695495],[-72.225777,18.6691379],[-72.2253335,18.6694643],[-72.2249739,18.66947],[-72.2245783,18.6678802],[-72.2235525,18.6677046],[-72.2235907,18.6675921],[-72.2224634,18.6676283],[-72.2223659,18.667022],[-72.2223277,18.6670943],[-72.2219209,18.667026],[-72.2208105,18.6669015],[-72.220809,18.6665325],[-72.2208705,18.6663593],[-72.2206023,18.6668107],[-72.2203895,18.6666361],[-72.2184341,18.6650535],[-72.21829,18.6640979],[-72.2183493,18.6608376],[-72.2187223,18.6606541],[-72.2186894,18.660603],[-72.2187253,18.6604525],[-72.2189771,18.6603247],[-72.2187823,18.6601998],[-72.2186984,18.6602367],[-72.2185815,18.6600352],[-72.2186085,18.6600039],[-72.2187823,18.6601345],[-72.218995,18.6600181],[-72.2189111,18.6599131],[-72.2189681,18.6597938],[-72.2183807,18.6595837],[-72.2184728,18.6539662],[-72.2201001,18.6511554],[-72.225796,18.6469472],[-72.2283048,18.6457265],[-72.2379335,18.645855],[-72.237764,18.6446985],[-72.2400355,18.6432529],[-72.2455958,18.6433493],[-72.2482742,18.6450358],[-72.2487488,18.6436705],[-72.2511067,18.6429775],[-72.2512385,18.6433409],[-72.2512625,18.6431592],[-72.2514843,18.6431365],[-72.2513284,18.6429718],[-72.2533602,18.6423471],[-72.253516,18.6426765],[-72.2539535,18.6425402],[-72.2541453,18.642932],[-72.2543851,18.6428696],[-72.2543791,18.6427503],[-72.2564168,18.6423244],[-72.2566925,18.6431365],[-72.2568783,18.6428582],[-72.2568184,18.6425288],[-72.258843,18.6420991],[-72.258885,18.6422467],[-72.2592626,18.6422297],[-72.2596461,18.6424057],[-72.2592206,18.6406907],[-72.2599545,18.6404815],[-72.2601156,18.6406341],[-72.2601156,18.6399393],[-72.2615268,18.6394669],[-72.2626056,18.6391034],[-72.2654465,18.6387286],[-72.2719433,18.6386832],[-72.272201,18.6388649],[-72.2730341,18.6394158],[-72.273166,18.6412558],[-72.2738732,18.6410286],[-72.2742208,18.6416079],[-72.2752187,18.6416987],[-72.2754524,18.6415738],[-72.2755513,18.6416874],[-72.2755394,18.6417527],[-72.2764713,18.6418634],[-72.276753,18.6418975],[-72.2762953,18.6426002],[-72.2774226,18.6429978],[-72.277982,18.6427247],[-72.2785796,18.6431303],[-72.2785669,18.6432307],[-72.2789017,18.6433471],[-72.279851,18.6439655],[-72.2858703,18.6469651],[-72.2867654,18.6482017]],[[-72.5557247,18.5305893],[-72.5555866,18.5367036],[-72.554995,18.537975],[-72.5488026,18.537919],[-72.5486646,18.5372832],[-72.548842,18.5306267],[-72.5493745,18.5301031],[-72.555133,18.5301218],[-72.5557247,18.5305893]],[[-72.6235278,18.5079877],[-72.6234441,18.5095217],[-72.6226074,18.5104341],[-72.6204878,18.511849],[-72.6183403,18.5107514],[-72.6162207,18.5083183],[-72.6162625,18.506467],[-72.618661,18.5044438],[-72.6204041,18.5044967],[-72.6228305,18.506996],[-72.6235278,18.5079877]]]},{"id":"osmim-imagicode-S2A_R119_N09_20160327T050917","name":"imagico.de: Adams Bridge","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R119_N09_20160327T050917&z={zoom}&x={x}&y={-y}","endDate":"2016-03-27T00:00:00.000Z","startDate":"2016-03-27T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[79.01779174804685,8.827572266651268],[79.01401519775389,9.64678471986339],[80.17642021179198,9.650423231331946],[80.17727851867674,8.831304063493132],[79.01779174804685,8.827572266651268]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Supplementing incomplete coverage in other sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80700162014211LGN00","name":"imagico.de: Alaska Range","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80700162014211LGN00&z={zoom}&x={x}&y={-y}","endDate":"2014-07-31T00:00:00.000Z","startDate":"2014-07-31T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[-152.70872943147867,62.30357443926811],[-152.70838610872474,62.58153176976553],[-152.00835101350992,63.54645538851267],[-148.99432055696695,63.53329945446586],[-148.99432055696695,62.30357443926811],[-152.70872943147867,62.30357443926811]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Recent summer image of the Alaska Range for mapping natural features (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-aral2","name":"imagico.de: Aral Sea (high water level)","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=aral2&z={zoom}&x={x}&y={-y}","endDate":"2016-03-03T00:00:00.000Z","startDate":"2016-03-03T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[58.049,43.2623],[58.049,46.7189],[58.1014,46.8645],[61.5524,46.8629],[61.5524,46.3896],[61.4675,45.3416],[60.6317,43.2623],[58.049,43.2623]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Water and wetland extents, dams etc. - some remaining winter ice in the north (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-aral1","name":"imagico.de: Aral Sea (low water level)","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=aral1&z={zoom}&x={x}&y={-y}","endDate":"2016-09-09T00:00:00.000Z","startDate":"2016-09-09T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[58.049,43.2623],[58.049,46.7334],[58.096,46.8645],[61.5524,46.8629],[61.5524,46.3896],[61.4685,45.3544],[60.6267,43.2623],[58.049,43.2623]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Water and wetland extents, dams etc. (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R067_S40_20170417T140051","name":"imagico.de: Bahía Blanca (high tide)","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R067_S40_20170417T140051&z={zoom}&x={x}&y={-y}","endDate":"2017-04-17T00:00:00.000Z","startDate":"2017-04-17T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-62.9988,-40.7327],[-62.9988,-37.9476],[-61.7505,-37.9474],[-61.7501,-40.7322],[-62.9988,-40.7327]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Tidal flats and islands at the coast (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R067_S40_20170127T140051","name":"imagico.de: Bahía Blanca (low tide)","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R067_S40_20170127T140051&z={zoom}&x={x}&y={-y}","endDate":"2017-01-27T00:00:00.000Z","startDate":"2017-01-27T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-62.9988,-40.7327],[-62.9988,-37.9476],[-61.7505,-37.9474],[-61.7501,-40.7322],[-62.9988,-40.7327]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Tidal flats and islands at the coast (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81190582014075LGN00","name":"imagico.de: Bakun Reservoir","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81190582014075LGN00&z={zoom}&x={x}&y={-y}","endDate":"2014-03-16T00:00:00.000Z","startDate":"2014-03-16T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[114.35999506049737,2.028456548619032],[113.5344754987298,2.030000532161949],[113.53619211249934,3.070767124420059],[114.76511591010677,3.067510236472651],[114.76254098945248,2.088156161702156],[114.35999506049737,2.028456548619032]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing in older pre-2011 images (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81250592016107LGN00","name":"imagico.de: Batam","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81250592016107LGN00&z={zoom}&x={x}&y={-y}","endDate":"2016-01-01T00:00:00.000Z","startDate":"2014-01-01T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[104.00154570197358,-0.000078769115171],[104.00137404059662,1.45099139170518],[104.91014937018647,1.451162998032411],[104.91014937018647,-0.000078769115171],[104.00154570197358,-0.000078769115171]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing Islands in OSM (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80770232017156LGN00","name":"imagico.de: Bogoslof Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80770232017156LGN00&z={zoom}&x={x}&y={-y}","endDate":"2017-06-05T00:00:00.000Z","startDate":"2017-06-05T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-168.2544,53.8749],[-168.2544,54.0213],[-167.8591,54.0213],[-167.8591,53.8749],[-168.2544,53.8749]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Recent image from after the eruption (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81800982013291LGN00","name":"imagico.de: Bouvet Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81800982013291LGN00&z={zoom}&x={x}&y={-y}","endDate":"2013-10-18T00:00:00.000Z","startDate":"2013-10-18T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[3.246529403113632,-54.47046993167111],[3.246529403113632,-54.375391687979096],[3.463852706336288,-54.375391687979096],[3.463852706336288,-54.47046993167111],[3.246529403113632,-54.47046993167111]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","best":true,"description":"For more accurate coastline and glacier mapping (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R017_S67_20170223T022551","name":"imagico.de: Bunger Hills","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R017_S67_20170223T022551&z={zoom}&x={x}&y={-y}","endDate":"2017-02-23T00:00:00.000Z","startDate":"2017-02-23T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[96.1197,-67.6542],[96.1201,-67.1899],[98.7331,-65.044],[105.1028,-65.044],[105.1028,-65.7224],[103.3017,-67.6542],[96.1197,-67.6542]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Largest ice free area at the East Antarctic coast - shows considerable amounts of non-permanent ice. (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R065_N47_20160929T102022","name":"imagico.de: Central Alps in late September 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R065_N47_20160929T102022&z={zoom}&x={x}&y={-y}","endDate":"2016-09-29T00:00:00.000Z","startDate":"2016-09-29T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[10.559062957763668,45.95484945195885],[7.473964691162107,45.95532682303484],[7.555847167968747,46.27080015119853],[8.05469512939453,47.66469371011084],[11.752452850341793,47.664809318453564],[11.752452850341793,46.813336457338615],[11.38423919677734,45.955088138010865],[10.559062957763668,45.95484945195885]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date image for glacier mapping - beware of some fresh snow at higher altitudes (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC82050982015344LGN00","name":"imagico.de: Clerke Rocks","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82050982015344LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-12-10T00:00:00.000Z","startDate":"2015-12-10T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-34.17701089820909,-55.29692751183208],[-35.19599283180284,-55.282851769908206],[-35.16663873634385,-54.7209735214882],[-34.12516916236925,-54.73465315976587],[-34.14010370216417,-55.29692751183208],[-34.17701089820909,-55.29692751183208]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing in other image sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R086_N60_20160831T213532","name":"imagico.de: Cook Inlet","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R086_N60_20160831T213532&z={zoom}&x={x}&y={-y}","endDate":"2016-08-31T00:00:00.000Z","startDate":"2016-08-31T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-154.5102,59.4577],[-154.5097,60.6888],[-153.5403,62.1718],[-148.0423,62.1718],[-148.0445,61.5342],[-149.7291,59.4584],[-154.5102,59.4577]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Tidal flats and glaciers in surrounding mountains (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-EO1A0040712016264110KF","name":"imagico.de: Coropuna","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=EO1A0040712016264110KF&z={zoom}&x={x}&y={-y}","endDate":"2016-09-21T00:00:00.000Z","startDate":"2016-09-21T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-72.7594470977783,-15.68684010813036],[-72.7594470977783,-15.49570157136026],[-72.74434089660643,-15.426295586903299],[-72.41286277770995,-15.426295586903299],[-72.41286277770995,-15.652957427428944],[-72.42410659790038,-15.686674840407827],[-72.7594470977783,-15.68684010813036]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date image for glacier mapping (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R022_N06_20151221T103009","name":"imagico.de: Cotonou","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R022_N06_20151221T103009&z={zoom}&x={x}&y={-y}","endDate":"2015-12-21T00:00:00.000Z","startDate":"2015-12-21T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[1.839749701876779,6.257803795151386],[1.839749701876779,7.114271792431897],[2.549397834200998,7.114271792431897],[2.549397834200998,6.489052510574106],[2.497813590426584,6.258059752887941],[1.839749701876779,6.257803795151386]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Patchy and partly cloudy coverage in usual sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R040_N01_20160311T164128","name":"imagico.de: Darwin and Wolf islands, Galapagos","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R040_N01_20160311T164128&z={zoom}&x={x}&y={-y}","endDate":"2016-03-11T00:00:00.000Z","startDate":"2016-03-11T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-92.05216379429558,1.321295617717369],[-92.05216379429558,1.72181118585353],[-91.74849481846549,1.72181118585353],[-91.74849481846549,1.321295617717369],[-92.05216379429558,1.321295617717369]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Recent image, only old and poor images in other sources currently (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80360072014245LGN00","name":"imagico.de: Eastern Devon Island coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80360072014245LGN00&z={zoom}&x={x}&y={-y}","endDate":"2014-09-02T00:00:00.000Z","startDate":"2014-09-02T00:00:00.000Z","scaleExtent":[0,11],"polygon":[[[-84.34798733886554,74.38945823827667],[-84.34798733886554,75.89030323920836],[-79.14870755370929,75.89030323920836],[-79.14870755370929,74.38945823827667],[-84.34798733886554,74.38945823827667]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Coastline mostly mapped meanwhile (false color IR)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC82160152013239LGN00","name":"imagico.de: Eastern Iceland","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82160152013239LGN00&z={zoom}&x={x}&y={-y}","endDate":"2013-08-27T00:00:00.000Z","startDate":"2013-08-27T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[-13.047005598725303,64.2110895294821],[-15.164963667572959,64.22408122727819],[-15.168053572358117,64.81572800422087],[-13.043572371186242,64.80359943673454],[-13.047005598725303,64.2110895294821]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing islets and inaccurate coast (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-AST_L1T_00302052007154424_20150518041444_91492","name":"imagico.de: El Altar","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00302052007154424_20150518041444_91492&z={zoom}&x={x}&y={-y}","endDate":"2012-02-05T00:00:00.000Z","startDate":"2012-02-05T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-78.531997745432,-1.805085317123331],[-78.531997745432,-1.608105565001241],[-78.33561713019762,-1.608105565001241],[-78.33561713019762,-1.805085317123331],[-78.531997745432,-1.805085317123331]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"2007 ASTER image offering better glacier coverage than common sources (true color with estimated blue)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R009_S61_20160109","name":"imagico.de: Elephant Island/Clarence Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R009_S61_20160109&z={zoom}&x={x}&y={-y}","endDate":"2016-01-09T00:00:00.000Z","startDate":"2016-01-09T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-56.13476090727487,-61.63471600102006],[-56.13476090727487,-61.199363166283845],[-55.83263688383738,-60.84015069906498],[-53.72343354521433,-60.83981613078141],[-53.72343354521433,-61.63471600102006],[-56.13476090727487,-61.63471600102006]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Fairly clear up-to-date image for updating glacier edges (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-enderby","name":"imagico.de: Enderby Land and Kemp Coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=enderby&z={zoom}&x={x}&y={-y}","endDate":"2017-03-27T00:00:00.000Z","startDate":"2017-01-25T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[45.4547,-68.5091],[45.4547,-67.5724],[49.7155,-65.7176],[59.2693,-65.7176],[67.3735,-67.3449],[67.3735,-68.2581],[67.088,-68.5091],[45.4547,-68.5091]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Sentinel-2 images of Enderby Land and Kemp Coast (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC82100502015347LGN00","name":"imagico.de: Fogo, Cape Verde","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82100502015347LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-12-13T00:00:00.000Z","startDate":"2015-12-13T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-24.758781955967567,14.748140156641956],[-24.758781955967567,15.092493544965103],[-24.267057941685337,15.092493544965103],[-24.267057941685337,14.748140156641956],[-24.758781955967567,14.748140156641956]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Image from after the 2014/2015 eruption (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-greenland","name":"imagico.de: Greenland mosaic","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=greenland&z={zoom}&x={x}&y={-y}","endDate":"2015-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[-43.9774,59.7171],[-44.545,59.7302],[-44.9203,59.7672],[-45.3587,59.8218],[-45.763,59.8848],[-46.0859,59.9827],[-46.3381,60.119],[-46.577,60.2652],[-46.8114,60.4418],[-47.2635,60.5314],[-47.6937,60.5549],[-48.1457,60.6192],[-48.5771,60.7015],[-48.8689,60.8506],[-49.0578,61.0555],[-49.396,61.2957],[-49.7601,61.4934],[-50.2064,61.7324],[-50.4699,61.9539],[-50.8647,62.1596],[-51.0631,62.3869],[-51.2121,62.6001],[-51.3005,62.8389],[-51.4238,62.9979],[-51.6767,63.1944],[-51.9465,63.4079],[-52.0253,63.6377],[-52.2255,63.8378],[-52.3658,64.0705],[-52.4829,64.3792],[-52.4988,64.6788],[-52.789,64.9063],[-53.2046,65.1321],[-53.6649,65.4753],[-53.9977,65.8019],[-54.1348,66.1568],[-54.1441,66.5235],[-54.2285,66.8319],[-54.4519,67.303],[-54.5141,67.7648],[-54.604,68.2021],[-54.568,68.5698],[-54.598,68.8347],[-54.7606,69.1207],[-55.0028,69.4125],[-55.2735,69.6187],[-55.3808,69.8283],[-55.3945,70.0838],[-55.3094,70.2573],[-55.4307,70.479],[-55.5501,70.6707],[-55.7654,70.861],[-56.2489,71.2343],[-56.5018,71.5429],[-56.5867,71.9015],[-56.5189,72.2355],[-56.5085,72.5258],[-56.8923,72.8144],[-57.4027,73.1054],[-57.8066,73.4566],[-58.1461,73.7696],[-58.3554,74.0972],[-58.5125,74.3783],[-58.7336,74.6328],[-59.3551,74.8869],[-60.1412,75.102],[-61.0067,75.2763],[-61.911,75.3886],[-62.4706,75.5595],[-62.9776,75.7454],[-64.1463,75.779],[-65.4481,75.7235],[-66.7068,75.6792],[-67.8379,75.6525],[-69.0456,75.6195],[-70.055,75.5344],[-71.0898,75.4705],[-72.1119,75.4476],[-74.2311,76.4102],[-74.5601,76.5328],[-74.5601,82.6959],[-14.4462,82.6959],[-14.3994,82.5997],[-13.5339,82.4379],[-12.0312,82.3426],[-10.7796,82.3196],[-10.7796,80.1902],[-11.2123,80.069],[-11.136,79.8103],[-10.7796,79.5176],[-10.7796,79.0441],[-11.2626,78.7128],[-12.2579,78.3558],[-13.2398,78.1272],[-13.7649,77.9279],[-14.1169,77.6779],[-14.7129,77.5278],[-15.5507,77.3655],[-16.0936,77.0771],[-16.0586,76.5548],[-15.838,75.9611],[-15.6879,75.4726],[-16.253,75.058],[-17.0427,74.6425],[-18.3155,74.2702],[-19.4463,73.9378],[-19.8329,73.632],[-20.2938,73.3524],[-20.7831,73.0446],[-21.01,72.6766],[-20.8774,72.2926],[-20.7672,71.8726],[-20.7765,71.4304],[-20.9411,70.9802],[-21.219,70.6126],[-21.5326,70.3001],[-21.8039,70.0911],[-22.166,69.8947],[-22.4831,69.7539],[-22.9027,69.6585],[-23.3545,69.544],[-23.9177,69.4036],[-24.1794,69.3088],[-24.6745,69.1084],[-25.1222,68.9555],[-25.6659,68.7995],[-26.0994,68.583],[-26.6316,68.4043],[-27.7638,68.2813],[-28.4575,68.0023],[-29.353,67.8135],[-30.6456,67.4911],[-31.7673,67.0005],[-32.9783,66.2596],[-33.9313,66.0156],[-34.8956,65.7403],[-35.5914,65.5208],[-36.1483,65.372],[-36.7532,65.2559],[-37.1858,65.1349],[-37.6032,64.9727],[-38.0624,64.4901],[-38.5304,64.1244],[-39.0545,63.7213],[-39.3131,63.4405],[-39.5739,62.7506],[-39.9532,62.2739],[-40.2757,61.8547],[-40.714,61.3365],[-41.2091,60.8495],[-41.821,60.5526],[-42.4368,60.3264],[-42.8643,60.0299],[-43.1131,59.9147],[-43.3282,59.83],[-43.5459,59.7695],[-43.797,59.7284],[-43.9774,59.7171]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Landsat mosaic of Greenland (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R047_S54_20160411T044330","name":"imagico.de: Heard Island coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R047_S54_20160411T044330&z={zoom}&x={x}&y={-y}","endDate":"2016-04-12T00:00:00.000Z","startDate":"2016-04-12T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[73.06896521028185,-53.270590689700434],[73.06896521028185,-52.875489636268725],[73.67338491853381,-52.87673289134188],[74.08863378938341,-52.94950473139763],[74.08863378938341,-53.270590689700434],[73.06896521028185,-53.270590689700434]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Recent image of Heard island with interior mostly cloud covered but mostly well visible coast (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC82280982013259LGN00","name":"imagico.de: Isla Londonderry","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82280982013259LGN00&z={zoom}&x={x}&y={-y}","endDate":"2013-09-16T00:00:00.000Z","startDate":"2013-09-16T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[-69.85679747431641,-55.55949231551995],[-72.26520659296875,-55.149427383391455],[-72.26520659296875,-54.51089432315929],[-72.08530546992188,-54.17909103768387],[-69.49115874140625,-54.17889010631196],[-69.49150206416016,-55.28378528847367],[-69.62230803339844,-55.55910398108892],[-69.85679747431641,-55.55949231551995]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"A lot of very coarse coastlines could be improved here, much snow cover though so no use for glacier mapping (false color IR)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-dms_kangerlussuaq_20151008","name":"imagico.de: Kangerlussuaq Autumn","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_kangerlussuaq_20151008&z={zoom}&x={x}&y={-y}","endDate":"2015-10-08T00:00:00.000Z","startDate":"2015-10-08T00:00:00.000Z","scaleExtent":[0,17],"polygon":[[[-50.6992,66.9888],[-50.721,67.0017],[-50.7341,67.0125],[-50.7396,67.0193],[-50.7396,67.0212],[-50.7158,67.0265],[-50.7017,67.0265],[-50.6829,67.0176],[-50.6686,67.0077],[-50.6638,66.998],[-50.6642,66.9946],[-50.6891,66.9888],[-50.6992,66.9888]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS image of the airport and settlement - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-dms_kangerlussuaq_20160518","name":"imagico.de: Kangerlussuaq Spring","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_kangerlussuaq_20160518&z={zoom}&x={x}&y={-y}","endDate":"2016-05-18T00:00:00.000Z","startDate":"2016-05-18T00:00:00.000Z","scaleExtent":[0,18],"polygon":[[[-50.7519,66.9996],[-50.7555,67.0023],[-50.7555,67.0033],[-50.6395,67.0297],[-50.6162,67.0339],[-50.6097,67.0281],[-50.6331,67.022],[-50.7323,66.9996],[-50.7519,66.9996]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS image of the airport and roads - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R021_N44_20160807T083013","name":"imagico.de: Kerch Strait","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R021_N44_20160807T083013&z={zoom}&x={x}&y={-y}","endDate":"2016-08-07T00:00:00.000Z","startDate":"2016-08-07T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[35.932588577270494,44.96236872935039],[35.932588577270494,45.559256426515695],[37.369909286499016,45.559256426515695],[37.369909286499016,44.96236872935039],[35.932588577270494,44.96236872935039]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"State of bridge construction in August 2016 (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-ls_polar2","name":"imagico.de: Landsat off-nadir July 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ls_polar2&z={zoom}&x={x}&y={-y}","endDate":"2016-07-17T00:00:00.000Z","startDate":"2016-07-17T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[-79.05174500251786,81.91484289044183],[-79.05174500251786,83.43338556749623],[-73.60389956385866,83.80224987787145],[-26.424486898081835,83.80224987787145],[-21.492998879371186,83.50352415480617],[-16.888354121159868,83.15094632775453],[-16.888354121159868,81.91484289044183],[-79.05174500251786,81.91484289044183]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Latest images north of the regular Landsat limit (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-larsen_2018","name":"imagico.de: Larsen C ice shelf after calving","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=larsen_2018&z={zoom}&x={x}&y={-y}","endDate":"2018-01-06T00:00:00.000Z","startDate":"2018-01-06T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[-62.7282,-68.9652],[-64.0489,-68.7318],[-64.0486,-68.5373],[-60.8845,-65.9399],[-59.9187,-65.9389],[-59.1088,-66.0775],[-59.1088,-68.8359],[-59.2544,-68.9652],[-62.7282,-68.9652]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"For updating the ice edge after the 2017 iceberg calving (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-AST_L1T_00311162013112731_20150618142416_109190","name":"imagico.de: Leskov Island ASTER","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00311162013112731_20150618142416_109190&z={zoom}&x={x}&y={-y}","endDate":"2013-11-16T00:00:00.000Z","startDate":"2013-11-16T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-28.210747081406492,-56.72108048139938],[-28.210747081406492,-56.624975043089115],[-27.96956284678735,-56.624975043089115],[-27.96956284678735,-56.72108048139938],[-28.210747081406492,-56.72108048139938]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing in other image sources (true color with estimated blue)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81991002015286LGN00","name":"imagico.de: Leskov Island Landsat","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81991002015286LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-10-13T00:00:00.000Z","startDate":"2015-10-13T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-27.992928409215843,-56.73479060902333],[-28.227761172887714,-56.732624892496354],[-28.2241562839717,-56.600752537318456],[-27.969754123327167,-56.60283135691063],[-27.97318735086623,-56.73479060902333],[-27.992928409215843,-56.73479060902333]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing in other image sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-ls_polar","name":"imagico.de: May 2013 off-nadir Landsat","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ls_polar&z={zoom}&x={x}&y={-y}","endDate":"2013-05-17T00:00:00.000Z","startDate":"2013-05-17T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[-85.76109385682587,81.39333391115835],[-89.83015512094161,82.14951616258433],[-89.83152841195212,82.24404688557661],[-84.99342418195555,82.73098798225534],[-79.95207288240479,83.13107965605444],[-74.55641250214465,83.46266728201661],[-69.35850602739671,83.70450775086888],[-28.207840897721187,83.70450775086888],[-23.06623935440381,83.46532469372944],[-17.96583654140148,83.15518123848051],[-17.96720983241198,82.72386035102944],[-22.781968115230015,81.44190408358111],[-85.76109385682587,81.39333391115835]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"First available image north of the regular Landsat limit, mostly with seasonal snow cover so difficult to interpret (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R042_S78_20170214T202521","name":"imagico.de: McMurdo Sound and Dry Valleys","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R042_S78_20170214T202521&z={zoom}&x={x}&y={-y}","endDate":"2017-02-14T00:00:00.000Z","startDate":"2017-02-14T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[162.9125,-78.4514],[162.6595,-78.4257],[159.2712,-77.6013],[159.2712,-77.4108],[164.157,-76.477],[169.7813,-76.4764],[169.7813,-78.4514],[162.9125,-78.4514]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date late season image - not ice minimum, be careful with distinguishing sea ice from ice shelves. (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R092_S02_20160613T075613","name":"imagico.de: Mount Kenya 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S02_20160613T075613&z={zoom}&x={x}&y={-y}","endDate":"2016-06-13T00:00:00.000Z","startDate":"2016-06-13T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[37.20665931701659,-0.266846645776291],[37.20665931701659,-0.011930465612033],[37.5655174255371,-0.011930465612033],[37.5655174255371,-0.266846645776291],[37.20665931701659,-0.266846645776291]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date image for glacier mapping (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R092_S05_20160802T075556","name":"imagico.de: Mount Kilimanjaro 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S05_20160802T075556&z={zoom}&x={x}&y={-y}","endDate":"2016-08-02T00:00:00.000Z","startDate":"2016-08-02T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[37.24768638610839,-3.229213650135676],[37.24768638610839,-2.968155849006605],[37.61581420898436,-2.968155849006605],[37.61581420898436,-3.229213650135676],[37.24768638610839,-3.229213650135676]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date image for glacier mapping (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80940622015159LGN00","name":"imagico.de: New Ireland","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80940622015159LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-06-08T00:00:00.000Z","startDate":"2015-06-08T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[150.38853376619625,-2.800534349432724],[150.38853376619625,-2.383396178206425],[150.83348005525875,-2.383396178206425],[150.83348005525875,-2.800534349432724],[150.38853376619625,-2.800534349432724]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Many missing islands in OSM (mostly mapped meanwhile) (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-northsea_s2_2016","name":"imagico.de: North Sea Coast 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2016&z={zoom}&x={x}&y={-y}","endDate":"2016-09-25T00:00:00.000Z","startDate":"2016-09-25T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[5.1562,52.8755],[5.1615,53.0325],[6.4155,55.7379],[9.8813,55.7459],[9.8813,53.2428],[9.6846,52.8877],[5.1562,52.8755]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-northsea_s2_2017","name":"imagico.de: North Sea Coast 2017","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2017&z={zoom}&x={x}&y={-y}","endDate":"2017-06-02T00:00:00.000Z","startDate":"2017-06-02T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[5.1713,53.0918],[6.477,55.8973],[9.8813,55.8973],[9.8813,53.2761],[9.7789,53.0918],[5.1713,53.0918]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-ural_s2_2016","name":"imagico.de: Northern and Polar Ural mountains August 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ural_s2_2016&z={zoom}&x={x}&y={-y}","endDate":"2016-08-12T00:00:00.000Z","startDate":"2016-08-12T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[59.198977223476454,64.8920468958533],[59.198977223476454,66.91656046303187],[60.733286610683486,68.44289182710118],[67.7329509173241,68.44327026354412],[67.7329509173241,67.748828729217],[64.21646761043934,64.9195663902952],[59.198977223476454,64.8920468958533]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date late summer imagery with few clouds - caution: not all visible snow is glaciers (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-ndvina","name":"imagico.de: Northern Dvina delta at low tide","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ndvina&z={zoom}&x={x}&y={-y}","endDate":"2015-09-13T00:00:00.000Z","startDate":"2015-09-13T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[37.7291,64.1971],[37.7291,65.1161],[37.8592,65.2705],[41.3223,65.2705],[41.3223,64.3142],[41.2114,64.1973],[37.7291,64.1971]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Beaches, tidal flats and other costal forms (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-nellesmere_ast","name":"imagico.de: Northern Ellesmere Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast&z={zoom}&x={x}&y={-y}","endDate":"2012-07-09T00:00:00.000Z","startDate":"2012-07-09T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[-81.62923243782096,82.45969864814401],[-83.03136255954291,82.47985512217643],[-83.03136255954291,83.05876272004272],[-72.80309111332822,83.09567468670448],[-65.65785798568925,83.03232446260982],[-65.8116665788654,82.45969864814401],[-81.62923243782096,82.45969864814401]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Assembled from July 2012 ASTER imagery (true color with estimated blue)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-nellesmere_ast_2016","name":"imagico.de: Northern Ellesmere Island July 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast_2016&z={zoom}&x={x}&y={-y}","endDate":"2012-07-15T00:00:00.000Z","startDate":"2012-07-08T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[-78.89729497133754,82.17577067162792],[-82.64500613899595,82.19425721404356],[-82.64500613899595,83.08067098163464],[-66.58986093522367,83.08497116318647],[-63.78010752773773,82.98907949583335],[-63.78010752773773,82.72198178031782],[-65.0092029821365,82.17577067162792],[-78.89729497133754,82.17577067162792]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Assembled from July 2016 ASTER imagery (true color with estimated blue)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81960222015233LGN00vis","name":"imagico.de: Northern German west coast tidalflats","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00vis&z={zoom}&x={x}&y={-y}","endDate":"2015-08-21T00:00:00.000Z","startDate":"2015-08-21T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[7.63567991501593,53.28027339774928],[7.63567991501593,53.66770140276793],[8.49433012253546,55.502457780526],[9.207754805152648,55.48106268908912],[9.207754805152648,53.28027339774928],[7.63567991501593,53.28027339774928]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81960222015233LGN00ir","name":"imagico.de: Northern German west coast tidalflats (infrared)","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00ir&z={zoom}&x={x}&y={-y}","endDate":"2015-08-21T00:00:00.000Z","startDate":"2015-08-21T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[7.63567991501593,53.28027339774928],[7.63567991501593,53.66810821588294],[8.49433012253546,55.502457780526],[9.207754805152648,55.48106268908912],[9.207754805152648,53.28027339774928],[7.63567991501593,53.28027339774928]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (false color IR)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-ngreenland_ast","name":"imagico.de: Northern Greenland ASTER","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ngreenland_ast&z={zoom}&x={x}&y={-y}","endDate":"2012-08-13T00:00:00.000Z","startDate":"2005-06-21T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[-52.49221819430999,82.48971755550389],[-52.49221819430999,82.94294978186194],[-49.28695697579964,83.47311821807558],[-44.52850362441216,83.7321400994933],[-29.525299334683975,83.7321400994933],[-25.263977329098022,83.58271128961059],[-21.183929736898254,83.39775984253468],[-21.183929736898254,82.74312310369845],[-23.404541300879075,82.48971755550389],[-52.49221819430999,82.48971755550389]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Assembled from mostly 2012 ASTER imagery, some 2005 images mainly in the northeast (true color with estimated blue)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-EO1A1350972013086110KF","name":"imagico.de: Northwest Heard Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=EO1A1350972013086110KF&z={zoom}&x={x}&y={-y}","endDate":"2013-03-13T00:00:00.000Z","startDate":"2013-03-13T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[73.22790413350113,-53.20333324999222],[73.22790413350113,-53.01072925838941],[73.2594898268605,-52.94943913810479],[73.78992348164566,-52.94943913810479],[73.78992348164566,-53.06048282358537],[73.71782570332533,-53.20333324999222],[73.22790413350113,-53.20333324999222]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Glaciers of Northwest Heard Island (mapped meanwhile) (false color IR)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R111_N09_20160604T154554","name":"imagico.de: Panama Canal","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R111_N09_20160604T154554&z={zoom}&x={x}&y={-y}","endDate":"2016-06-07T00:00:00.000Z","startDate":"2016-06-07T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-80.01653561766223,8.848981570244637],[-80.01653561766223,9.41480707574399],[-79.46859250242785,9.41480707574399],[-79.46859250242785,8.848981570244637],[-80.01653561766223,8.848981570244637]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Images of the new locks (but partly cloudy) (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-EO1A0120532016364110KF","name":"imagico.de: Panama Canal - Pacific side","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=EO1A0120532016364110KF&z={zoom}&x={x}&y={-y}","endDate":"2016-12-30T00:00:00.000Z","startDate":"2016-12-30T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-79.62538719177245,8.770827350748924],[-79.68684196472167,8.821974500616129],[-79.6866703033447,8.93705081902936],[-79.65362548828124,9.0929436313527],[-79.268159866333,9.0929436313527],[-79.32832717895505,8.770827350748924],[-79.62538719177245,8.770827350748924]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"New locks with less clouds than in the Sentinel-2 image - make sure to check image alignment (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R078_N68_20160930T081002","name":"imagico.de: Pechora Sea Coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N68_20160930T081002&z={zoom}&x={x}&y={-y}","endDate":"2016-09-30T00:00:00.000Z","startDate":"2016-09-30T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[53.1802,67.5344],[53.1821,68.414],[54.2107,69.3367],[55.3584,70.2786],[59.004,70.2786],[60.6947,69.977],[61.9837,69.7161],[61.9823,68.9395],[59.9153,67.5344],[53.1802,67.5344]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Sentinel-2 image of the Pechora Sea coast in autumn 2016 (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81511242016033LGN00","name":"imagico.de: Pensacola Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81511242016033LGN00&z={zoom}&x={x}&y={-y}","endDate":"2016-02-02T00:00:00.000Z","startDate":"2016-02-02T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[-53.20921946177197,-84.12524693598144],[-60.615377881406225,-83.78609327915953],[-60.615377881406225,-82.29968785439104],[-48.72405102147429,-82.29987186164387],[-44.52178052933989,-82.43683433550413],[-44.51354078327688,-84.12524693598144],[-53.20921946177197,-84.12524693598144]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R136_N41_20150831T093006","name":"imagico.de: Prokletije Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R136_N41_20150831T093006&z={zoom}&x={x}&y={-y}","endDate":"2015-08-31T00:00:00.000Z","startDate":"2015-08-31T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[19.112325688609005,42.1531576323006],[19.08425905347717,43.08073531915633],[20.63298799634826,43.09602978090892],[20.637880345591427,42.167791043253985],[19.112325688609005,42.1531576323006]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Late summer imagery where usual sources are severely limited by clouds and snow (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-DMS_1142622_03746_20110415_17533956","name":"imagico.de: Qasigiannguit","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142622_03746_20110415_17533956&z={zoom}&x={x}&y={-y}","endDate":"2011-04-15T00:00:00.000Z","startDate":"2011-04-15T00:00:00.000Z","scaleExtent":[0,15],"polygon":[[[-51.238571767352376,68.79971882076842],[-51.243335370562825,68.85302612951142],[-51.151668195269856,68.85302612951142],[-51.14038145973519,68.80116208175376],[-51.238571767352376,68.79971882076842]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS image of the settlement - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81510432015030LGN00","name":"imagico.de: Rann of Kutch","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81510432015030LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[67.96839858817646,22.36264542957619],[67.86231185721942,22.38391650007107],[67.86231185721942,24.886930816927297],[71.48986007499286,24.886930816927297],[71.48986007499286,22.36264542957619],[67.96839858817646,22.36264542957619]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Land/water distinction difficult to properly map based on Bing/Mapbox images (false color IR)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R093_N41_20150828T092005","name":"imagico.de: Rila and Pirin Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R093_N41_20150828T092005&z={zoom}&x={x}&y={-y}","endDate":"2015-08-28T00:00:00.000Z","startDate":"2015-08-28T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[23.808114560320394,41.584878805945024],[22.992379697039144,41.6019534981177],[23.011863263323328,42.29983747360261],[23.99402383156063,42.283393175568236],[23.965613873674886,41.584878805945024],[23.808114560320394,41.584878805945024]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Late summer imagery where usual sources are severely limited by clouds and snow (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81730602015040LGN00","name":"imagico.de: Rwenzori Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81730602015040LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-02-09T00:00:00.000Z","startDate":"2015-02-09T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[29.766296776846374,0.206886934953159],[29.766296776846374,0.509176367154027],[30.034603509024116,0.509176367154027],[30.034603509024116,0.206886934953159],[29.766296776846374,0.206886934953159]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Recent image of most of the remaining Rwenzori Mountains glaciers (false color IR)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R078_N01_20160702T082522","name":"imagico.de: Rwenzori Mountains 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N01_20160702T082522&z={zoom}&x={x}&y={-y}","endDate":"2016-07-02T00:00:00.000Z","startDate":"2016-07-02T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[29.8051357269287,0.235862065771959],[29.8051357269287,0.467085433008179],[30.02503395080565,0.467085433008179],[30.02503395080565,0.235862065771959],[29.8051357269287,0.235862065771959]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date image for glacier mapping (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80611072014036LGN00","name":"imagico.de: Scott Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80611072014036LGN00&z={zoom}&x={x}&y={-y}","endDate":"2014-02-05T00:00:00.000Z","startDate":"2014-02-05T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-180,-67.4263452007858],[-180,-67.32544337276457],[-179.8247337341308,-67.3253771978419],[-179.8247337341308,-67.4263452007858],[-180,-67.4263452007858]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing in other image sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC82100972015347LGN00","name":"imagico.de: Shag Rocks","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82100972015347LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-12-13T00:00:00.000Z","startDate":"2015-12-13T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-42.12874872458635,-53.72050213468143],[-42.14625818503558,-53.45782244664258],[-41.67573435080706,-53.445862233424414],[-41.6558216310805,-53.70871763480476],[-42.12874872458635,-53.72050213468143]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing in other image sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81130622013270LGN00","name":"imagico.de: Southeastern Sulawesi","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81130622013270LGN00&z={zoom}&x={x}&y={-y}","endDate":"2013-09-27T00:00:00.000Z","startDate":"2013-09-27T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[120.84382442048364,-3.595452324350203],[120.84382442048364,-3.159848173206955],[120.98184016755395,-2.514681686347053],[122.62618449738794,-2.514681686347053],[122.62618449738794,-3.002148034113534],[122.5007000308352,-3.595452324350203],[120.84382442048364,-3.595452324350203]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Missing islands and coarse coastline due to cloud cover in Bing, lakes could also use additional detail (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80281222016035LGN00","name":"imagico.de: Southern Transantarctic Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80281222016035LGN00&z={zoom}&x={x}&y={-y}","endDate":"2016-02-04T00:00:00.000Z","startDate":"2016-02-04T00:00:00.000Z","scaleExtent":[0,10],"polygon":[[[156.96951345925345,-84.50097988272655],[154.50857596843485,-84.46255082580927],[154.50857596843485,-82.60681485793681],[175.46774337070775,-82.58504749645738],[177.00582930246938,-83.52806548607914],[177.00582930246938,-84.19262083779002],[171.93838547371908,-84.34632646581997],[166.83798266071676,-84.44370142483508],[161.67028858819987,-84.50045345467909],[156.96951345925345,-84.50097988272655]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81030632015286LGN00","name":"imagico.de: Sudirman Range 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81030632015286LGN00&z={zoom}&x={x}&y={-y}","endDate":"2015-10-13T00:00:00.000Z","startDate":"2015-10-13T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[136.4226,-4.2853],[136.4226,-3.6447],[137.7971,-3.6447],[137.7971,-4.2853],[136.4226,-4.2853]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Older image of the Sudirman Range with no fresh snow showing glacier extent (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R088_S05_20160812T011732","name":"imagico.de: Sudirman Range 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R088_S05_20160812T011732&z={zoom}&x={x}&y={-y}","endDate":"2016-08-12T00:00:00.000Z","startDate":"2016-08-12T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[136.8044,-4.2585],[136.8044,-3.7836],[137.7701,-3.7836],[137.7701,-4.2585],[136.8044,-4.2585]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Cloud free image of the Sudirman Range but with fresh snow (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-s2sval","name":"imagico.de: Svalbard mosaic","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=s2sval&z={zoom}&x={x}&y={-y}","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[16.6108,76.4137],[16.4731,76.4268],[16.3788,76.4589],[14.4124,77.1324],[14.0784,77.2536],[10.9875,78.4054],[10.631,78.5605],[10.2314,78.8392],[10.3952,79.6074],[10.516,79.7731],[10.9632,79.8707],[20.2294,80.849],[20.4702,80.8493],[25.1752,80.6817],[33.4391,80.3438],[33.7809,80.3016],[34.0395,80.239],[33.977,80.1527],[25.5722,76.5917],[25.2739,76.481],[25.1416,76.4327],[24.937,76.4176],[16.6108,76.4137]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Sentinel-2 mosaic of Svalbard (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-DMS_1142636_160xx_20110507_1822xxxx","name":"imagico.de: Thule Air Base","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142636_160xx_20110507_1822xxxx&z={zoom}&x={x}&y={-y}","endDate":"2011-05-07T00:00:00.000Z","startDate":"2011-05-07T00:00:00.000Z","scaleExtent":[0,15],"polygon":[[[-68.93976917529807,76.51132557714853],[-68.93976917529807,76.54990046497333],[-68.76634826923117,76.55175699880375],[-68.50992908740743,76.55175699880375],[-68.50743999744161,76.51611959755911],[-68.67897262836203,76.51193618208278],[-68.93976917529807,76.51132557714853]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS image - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-dms_thule2_2015.09.25","name":"imagico.de: Thule Airbase DMS low altitude overflight September 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_thule2_2015.09.25&z={zoom}&x={x}&y={-y}","endDate":"2015-09-25T00:00:00.000Z","startDate":"2015-09-25T00:00:00.000Z","scaleExtent":[0,17],"polygon":[[[-68.74291885235837,76.52635852412212],[-68.74446380475094,76.52840070669755],[-68.74806869366695,76.54938731810256],[-68.7461482320123,76.56016657973251],[-68.72275936940244,76.56022393334496],[-68.72017371991207,76.5577475347327],[-68.71853220799495,76.5292079974043],[-68.71977675297786,76.52636602351234],[-68.74291885235837,76.52635852412212]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS aerial images from Thule Airbase - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-dms_thule_2015.10.06","name":"imagico.de: Thule Airbase DMS overflight October 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_thule_2015.10.06&z={zoom}&x={x}&y={-y}","endDate":"2015-10-06T00:00:00.000Z","startDate":"2015-10-06T00:00:00.000Z","scaleExtent":[0,16],"polygon":[[[-68.81923965911197,76.52510098413808],[-68.82651380996036,76.54176603738404],[-68.77344898680974,76.5439032956252],[-68.7021022270136,76.54544610909097],[-68.59176687697696,76.54560088014632],[-68.59183124999333,76.52793072237704],[-68.65970186690618,76.52510098413808],[-68.81923965911197,76.52510098413808]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS aerial images from Thule Airbase - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-dms_thule_2015.09.25","name":"imagico.de: Thule Airbase DMS overflight September 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_thule_2015.09.25&z={zoom}&x={x}&y={-y}","endDate":"2015-09-25T00:00:00.000Z","startDate":"2015-09-25T00:00:00.000Z","scaleExtent":[0,16],"polygon":[[[-68.7777130980429,76.50687742381471],[-68.77661875676482,76.57064446843503],[-68.68115357350676,76.57065443536027],[-68.67630413960784,76.55384487076157],[-68.67619685124725,76.5307435998188],[-68.6852305312094,76.50688243050337],[-68.7777130980429,76.50687742381471]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Icebridge DMS aerial images from Thule Airbase - alignment might be poor","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R094_N79_20160812T105622","name":"imagico.de: Ushakov Island August 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R094_N79_20160812T105622&z={zoom}&x={x}&y={-y}","endDate":"2016-08-12T00:00:00.000Z","startDate":"2016-08-12T00:00:00.000Z","scaleExtent":[0,12],"polygon":[[[78.45885691499899,80.72643412860921],[78.45885691499899,80.9098976404357],[80.48892435884663,80.9098976404357],[80.48892435884663,80.72643412860921],[78.45885691499899,80.72643412860921]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Up-to-date late summer imagery with few clouds (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC80910682014358LGN00","name":"imagico.de: Vanatinai","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80910682014358LGN00&z={zoom}&x={x}&y={-y}","endDate":"2014-12-24T00:00:00.000Z","startDate":"2014-12-24T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[153.0613810625655,-11.789228234021259],[153.0613810625655,-11.288690822294749],[153.10927458673538,-11.072292520575749],[154.41201277643268,-11.072292520575749],[154.41201277643268,-11.789228234021259],[153.0613810625655,-11.789228234021259]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Coarse coastline due to cloud cover in Bing/Mapbox (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC82330892016031LGN00","name":"imagico.de: Volcán Calbuco","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82330892016031LGN00&z={zoom}&x={x}&y={-y}","endDate":"2016-01-31T00:00:00.000Z","startDate":"2016-01-31T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-72.8669610523419,-41.51741123877955],[-72.8669610523419,-41.045274923011036],[-72.23181395761533,-41.045274923011036],[-71.87510161630674,-41.10829439141359],[-72.00007109872861,-41.51741123877955],[-72.8669610523419,-41.51741123877955]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Image from after the 2015 eruption (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R089_N52_20160623T024048","name":"imagico.de: Vostochny Cosmodrome","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R089_N52_20160623T024048&z={zoom}&x={x}&y={-y}","endDate":"2016-06-23T00:00:00.000Z","startDate":"2016-06-23T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[126.36143429881301,51.375528375017275],[126.34804471141064,52.33932231282816],[128.60762341624462,52.340895519845674],[128.6117432892915,51.375528375017275],[126.36143429881301,51.375528375017275]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Recent image showing newest features (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-walps_autumn_2017","name":"imagico.de: Western Alps autumn colors 2017","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=walps_autumn_2017&z={zoom}&x={x}&y={-y}","endDate":"2017-10-17T00:00:00.000Z","startDate":"2017-10-17T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[4.6412,43.2493],[4.3118,43.2653],[4.3118,44.2167],[5.2562,46.965],[5.9151,48.7177],[7.3866,48.7467],[10.088,48.7467],[10.088,48.7032],[7.7819,43.2813],[7.76,43.2653],[7.3646,43.2493],[4.6412,43.2493]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Autumn colors in the Alps, Jura and southwestern Germany (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-LC81490352013282LGN00","name":"imagico.de: Western Karakoram","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81490352013282LGN00&z={zoom}&x={x}&y={-y}","endDate":"2013-10-09T00:00:00.000Z","startDate":"2013-10-09T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[75.98364343730569,34.97850982318471],[73.96164407817483,35.36957188964085],[74.44281091777444,37.09391400468158],[76.50600900737405,36.7026732100855],[75.98364343730569,34.97850982318471]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Represents approximately minimum snow cover so can be well used for glacier mapping (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"osmim-imagicode-S2A_R039_S15_20160510T145731","name":"imagico.de: Willkanuta Mountains and Quelccaya Ice Cap","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R039_S15_20160510T145731&z={zoom}&x={x}&y={-y}","endDate":"2016-05-10T00:00:00.000Z","startDate":"2016-05-10T00:00:00.000Z","scaleExtent":[0,14],"polygon":[[[-71.18070648306262,-14.4978507264954],[-71.17976234548938,-13.710292880050797],[-70.5563740550841,-13.71262765059222],[-70.5563740550841,-14.4978507264954],[-71.18070648306262,-14.4978507264954]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","description":"Poor and outdated imagery in other sources (true color)","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAADWElEQVQ4y13TS2gcdQDH8e/szGQ372Tz2irGpoS0KSapoqjRQ4knD0WweLRCCXiQXuJFMR6EYMVC0IsPyKVFsJpWbQ0KQmL14KPWirGmZjdmk+w7mX1kZ2d2dv7/mfFUsX5Pv8Pv+lH4X6/NvTPc239gOlXyp7ZzlaEg8EGYyVaZWY7dc+/CuTde+fu/f+XOeP3iLT2bTMxN9NVm1PZhbfKBGC/OXsDzHJr1EEf6ilSMLZFrxObHJk/OfvDqCQmgArz3TUJfXZm/3K53nZ4YPRw69czjXPrqR+LJHJ4rUFXA3qG33Va3cpknU2vxY1pz9yWzlPZVgL6xobNGXp7u6T9Geq/O+U+usHRtE6du0aJncSyXtnCOcqVC0ZTIhnM44itNhpFeVs5+kRxe//OP22VDar4ncRwHz85TKtY40H2D4n6KwNMRgUPIC9ES0mj2NNwK4rfE2qhWyBnT1YrUQkqA3hwmpIYw63law4JcaR/hR9GVAh2tOmEUHunpwKkJVm10VdOntbptP+VJiaIoKIDv7zPQbVDxJIPRPkRkh8CN0KFrjHdGiXW3kkuXSRYEakid0qQrDkrhEgQ+tZpNtVTmoQdNrGgB6XjUpEJzSxvCgnhOZ+RQFKtcZV8IpO8NhXxfIoWLY9tUS0XePxXHMNrY3BxkOx+lXVX54dc+VjdaiHabXPg6RcMSWFULT3poEGxJ0eit1Wq06w4FMURPl8NObo9MvgnTaOGF402M399DrDNEPJHnl99rZIoWvudvaeGwtux53sOPjffy9pn7CHdKnn5WJ/5XnudnrjF2tJ/F61mGBiIc7fe4mXT5ds0lu1tE8f1lbSDWu5DZyb98fMLVwp0dgINv5Bjpcfj50yloUsAo8Ob8T/iVBociLrtlC9+tCwgW1O8++7A09dxLbUvfrzzRpV7nSCyK0qRDOEwjlUYr7iH2DPx6hXevpLi5YXNjfRsCcQ4aiwrAlxuB/tHCx5fTyaUTg/1pJke6eHR0GF9AKZtnv1BlYSWFWYBEepdyuXwV5EmQ8l9Mn9929asXF+c21xMz5b1NreHewvNcHAc0qRGpQyqfFZZZnQc5C1LepfFOZ946P5xJbkybRmbKzm8f3C3b2GZlyzYLy9WqteD5jbs4/wOHuM2qT5aWEQAAAABJRU5ErkJggg=="},{"id":"IPR-orotofoto-last-tms","name":"IPR ortofoto LAST (tmsproxy)","type":"tms","template":"https://osm-{switch:a,b,c}.zby.cz/tiles_ipr_last.php/{zoom}/{x}/{y}.jpg","scaleExtent":[1,18],"polygon":[[[14.81231552124,49.93089301941],[14.18754582291,49.87687266984],[14.12025456314,50.19881542327],[14.74502426147,50.25247461226],[14.81231552124,49.93089301941]]]},{"id":"IPR-orotofoto-vege-tms","name":"IPR ortofoto Low-Vegetation (tmsproxy)","type":"tms","template":"https://osm-{switch:a,b,c}.zby.cz/tiles_ipr_vege.php/{zoom}/{x}/{y}.jpg","scaleExtent":[1,20],"polygon":[[[14.30454236984,49.99538124382],[14.3160436821,49.94205148763],[14.3499983888,49.94508261663],[14.35383872175,49.92726356386],[14.42385321818,49.93351545169],[14.4200902288,49.95097343212],[14.48865449494,49.95709281879],[14.48479036398,49.9750111737],[14.55385989188,49.98117257481],[14.55011770159,49.99851689993],[14.58455395868,50.0015874108],[14.58829614897,49.98424419323],[14.69168128485,49.99346468175],[14.67633637226,50.06452744171],[14.71278864961,50.06777324036],[14.70115373952,50.12158114828],[14.66470146217,50.11833899243],[14.6610031918,50.13543086714],[14.62755290441,50.13245658485],[14.61965341283,50.16894659259],[14.58542741996,50.16590546732],[14.58162921725,50.18344165464],[14.40776267983,50.167995553],[14.41156088254,50.15045369625],[14.37764851321,50.14743927281],[14.37379555571,50.16523508727],[14.33892816423,50.16213672855],[14.34278112173,50.14433976066],[14.27367931007,50.13819641038],[14.27749028245,50.12058459573],[14.20879964298,50.11447476994],[14.21288816219,50.09557069695],[14.24656290855,50.09856724424],[14.25417384067,50.06335893014],[14.21987061144,50.0603042129],[14.22369648177,50.04259477081],[14.257999711,50.04565061557],[14.26952647673,49.99225864496],[14.30454236984,49.99538124382]]]},{"id":"GSGS3906","name":"Ireland British War Office 1:25k GSGS 3906","type":"tms","template":"https://mapwarper.net/layers/tile/101/{zoom}/{x}/{y}.png","scaleExtent":[0,18],"polygon":[[[-10.71,51.32],[-10.71,55.46],[-5.37,55.46],[-5.37,51.32],[-10.71,51.32]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_Ireland#Trinity_College_Dublin","terms_text":"Glucksman Map Library, Trinity College Dublin","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAB3RJTUUH3gQOFR0YB1KT3QAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAARnQU1BAACxjwv8YQUAAAS/SURBVHjandN7TFNXHAfwzrn/lm3ZHy7LYrJkybK5zMw9fCEoPjbeChoHTtBVRF7l1ZZSaG8flCtvsFVpoZZHC5Y6jDM+UScDaxF5lIfSAaMIlVKBS8EZN4d+d9voZpbMFX/JN7nnnvM7n5xzcxmM5wrPlX1yFmP2adgmXKHc78bsU+j9ZRT3HzzE+D0n7tjuYdo5h38X47/q+UWD1nE0tw/gktEC66gdN/tG0Dc4hnEHhdG7DujOdqGHxi4ae2AZti8ccJXZYoOxawRPnjzGwcpmzM8//ntOe86MickZTEw7ka+99nJAZ/8YWjqs7ufc6ibM/fbQ/fzHo0eoOduJ8UkKljt2nLhk9hj4/Wlm6VA9A2NUa/ew6wNQE1OzVGvPEGUZvkvZHVNUo2mA6ugfpvoGrNT8/Dz1tMfd/yJgKZ13h6zjzFbzvbwO8wDZaR4kzeZbZG/fIHnTbCOvdzrI9h472dnVT97oociO23NkW+9M3pDVsc/V69rjRYA7Su11/dvbfkRJvDeOcMORuj8CpelLkJO6BVs4vQhj3QD5fTQS2PXYndQAblw2yrUt9c/6/xeoqzulK+VEoCTtawgSM5HCr0Nsmg48ngJhYiukonNIybeg8MQEFIZBFBWIoa4z1XoMaOrbtbHci2BtW4RachnOlO/GZW0SjuZEY2eWGYVEFfYJ+kDo/4ThdDPExadQcbxb5zmgb6/xYZlAxPtDmByFS2U+EHM5yBOyEZZ8HkzeZaQmyxFZROGkgUQIMQSNvkPrMXBM31YdFqNDJK8ZHE4FYgSt2Jl0GpKUGAhFjTiQ2QJDgRBGdSTIvEJ8IXDSQJvngEbfWrWacGJDzn1sJ34FkSqFQbgWTcUrcLWIATlnBzYSE8hOOIBQzk9YK56jgRs1CzlBVXD6bcijCYSwTYjhXUFD7nrUlHyFc6pPUCL4BpskUwhn6iGPSMYG3igN3KxeCKDZyulGddReBKV3YbNkGidkIWhQLMeFiuUoE3ths8iOfXFnoQ5nwTt9xHVFVZ5f0XGjxks0A++sIWyNqYM0TYp6qS9+UHxOn+BjqMQfwF8wgg2x5+ErccCboKA5bloAUGc8tk40i2CmGuGhgQhjX0MZwUY5uRJVuX6QcpPhm2TErlBfBLAa4S2epYHrlZ5fke4K6SVyIjRejz1REfhO2Ab2wavgZJ8EU9gEUek1MDMvIIa5DUFpzVhHzECtbRR4DJRrDP5f8h04ILwAmTQLAkEWCgsLIJVIIcwS4uhRBSQSCfi8FGzP6sbKjLsoV+tWewwolUfe+pR1y7GD1YDd4cGIi4uFgM/HulWr4LdpI5ITE5EQH49dOwMRmtmND/ebLMoy+WueA2VyBmO9opSTcx6HimWQHypGBicF+6MjwdzzLSQEH6UlBSjKFyNS1AnGMm6Csuwww2NApVK6hkv2JMptmTkGiPNqEcc+jFiuGsy0SrD4lciQ1kJW3ICAqJIWeu1ilUq1EEDlHr/6vr/XxozBuQD6jw6UUXRm6DgRQCeQfIA1iaZ+BuP191xrXwpw1RtL16zwSfi5PVg2hZAcyp0gqQOr9548TU+/82zdywGvLH429eZnO8rPBNMbB4ps+MhPpvyna9ELgb8ASvKZeuq+E9sAAAAASUVORK5CYII="},{"id":"ITACyL-Castile-and-Leon","name":"ITACyL - Castile and León","type":"wms","template":"http://orto.wms.itacyl.es/WMS?REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=Ortofoto_CyL&SRS={proj}&FORMAT=image/jpeg&STYLES=Default&TRANSPARENT=TRUE&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","polygon":[[[-1.9357991,41.4383441],[-1.8960064,41.438692],[-1.895356,41.3968709],[-1.9767014,41.3961593],[-1.9763916,41.376229],[-2.0620081,41.3754798],[-2.0626179,41.4147091],[-2.104577,41.4143421],[-2.103634,41.3536716],[-2.1444816,41.353314],[-2.1418984,41.1868282],[-2.0620415,41.1875291],[-2.0617117,41.1662438],[-2.0204638,41.1666059],[-2.0188653,41.0633378],[-2.100826,41.0626171],[-2.1011407,41.0829596],[-2.2273263,41.0818503],[-2.2270424,41.0634991],[-2.2691206,41.0631291],[-2.2688026,41.0425666],[-2.3532519,41.0418238],[-2.3535559,41.0614821],[-2.3948686,41.0611188],[-2.3945738,41.0420594],[-2.4372246,41.0416842],[-2.4375565,41.0631457],[-2.4792811,41.0627788],[-2.4799141,41.1036906],[-2.5207759,41.1033316],[-2.5211004,41.1242948],[-2.6041532,41.1235652],[-2.6048148,41.1662833],[-2.6470964,41.1659121],[-2.6480789,41.2293052],[-2.728739,41.2285978],[-2.7290669,41.2497401],[-2.8955197,41.2482806],[-2.8964873,41.3106325],[-2.9363011,41.3102838],[-2.9357117,41.2723089],[-3.1469203,41.2704576],[-3.1472307,41.2904534],[-3.2282807,41.2897432],[-3.2276653,41.2500782],[-3.3958112,41.2486039],[-3.3951828,41.2080777],[-3.4349215,41.207729],[-3.4342897,41.166962],[-3.4787658,41.1665716],[-3.4784403,41.1455556],[-3.6033615,41.1444585],[-3.6026994,41.1016871],[-3.6453878,41.101312],[-3.6450826,41.0815903],[-3.6873474,41.0812188],[-3.6867259,41.0410356],[-3.7286604,41.0406667],[-3.7280287,40.9997997],[-3.7689605,40.9994394],[-3.7686426,40.9788648],[-3.8547306,40.9781068],[-3.8543974,40.9565345],[-3.8985743,40.9561454],[-3.8976421,40.8957522],[-3.9390572,40.8953871],[-3.9371558,40.7720359],[-4.061976,40.7709334],[-4.0613345,40.7292585],[-4.1037236,40.7288838],[-4.1031129,40.6891834],[-4.146278,40.6888017],[-4.1449778,40.6042134],[-4.1902455,40.6038125],[-4.1899353,40.5836167],[-4.2294603,40.5832666],[-4.2297921,40.604873],[-4.2705425,40.6045122],[-4.2695844,40.5421064],[-4.3138364,40.5417142],[-4.3116268,40.397575],[-4.3937599,40.3968455],[-4.3934525,40.3767688],[-4.4372265,40.3763799],[-4.4362295,40.3112251],[-4.5219173,40.3104631],[-4.5203662,40.2089652],[-4.5613148,40.2086005],[-4.5609947,40.1876316],[-4.6889523,40.1864916],[-4.6893267,40.2110086],[-4.7319244,40.2106292],[-4.7325206,40.2496574],[-4.7683768,40.2493382],[-4.7680867,40.2303451],[-4.8110432,40.2299626],[-4.8114661,40.2072641],[-4.8542024,40.1841364],[-4.8526373,40.1256293],[-4.9369855,40.1248771],[-4.9363819,40.0852905],[-5.3553832,40.0815518],[-5.3560552,40.1256221],[-5.4402699,40.1248711],[-5.4409085,40.1667265],[-5.6038169,40.1652746],[-5.6044816,40.2088137],[-5.6864643,40.2080835],[-5.6871247,40.2513133],[-6.0216585,40.2483356],[-6.0229464,40.3325684],[-6.1043332,40.3318449],[-6.1055986,40.4145069],[-6.1895128,40.4137618],[-6.1901823,40.4574544],[-6.2697076,40.4567487],[-6.2690913,40.4165255],[-6.35192,40.41579],[-6.3512834,40.374216],[-6.4332493,40.3734877],[-6.4326391,40.3336127],[-6.5224541,40.3328142],[-6.5211648,40.2484909],[-6.599422,40.2477943],[-6.5988642,40.2112799],[-6.8556786,40.2089926],[-6.8563443,40.2525719],[-6.9362181,40.2518609],[-6.9375132,40.3365682],[-6.8511064,40.3373363],[-6.8600092,40.9167165],[-6.9354421,40.9160518],[-6.9374109,41.0435015],[-6.8548179,41.0442279],[-6.8554804,41.0870562],[-6.7701541,41.0878063],[-6.7724533,41.2362299],[-6.6837886,41.2370075],[-6.6043553,41.2377041],[-6.6052401,41.2947359],[-6.5193011,41.295489],[-6.5199114,41.3347937],[-6.4367251,41.3355221],[-6.4380091,41.4181379],[-6.3531841,41.4188797],[-6.3544684,41.501409],[-6.2688882,41.5021564],[-6.2707951,41.6245018],[-6.3566149,41.6237537],[-6.3572432,41.6640106],[-6.435477,41.663329],[-6.4349024,41.6265132],[-6.5227923,41.625747],[-6.523426,41.6663463],[-6.6034046,41.6656495],[-6.60733,41.9166043],[-7.0220912,41.9130049],[-7.0240633,42.0387169],[-7.1054035,42.0380124],[-7.1061291,42.0842081],[-7.0207976,42.0849466],[-7.0227551,42.2093958],[-6.9369897,42.2101367],[-6.9376312,42.25087],[-6.8547973,42.2515851],[-6.8554546,42.2932892],[-6.7734213,42.2939969],[-6.7740277,42.3324438],[-6.853255,42.3317608],[-6.8552311,42.4569007],[-7.1034126,42.4547653],[-7.1081086,42.7511487],[-7.0219933,42.7518861],[-7.0224121,42.7782497],[-6.9397569,42.7789573],[-6.9419944,42.9196184],[-6.7730194,42.9210615],[-6.7736331,42.959583],[-6.5232855,42.9617196],[-6.5239109,43.0009499],[-6.4389317,43.0016747],[-6.4402391,43.0836074],[-5.9378159,43.0878866],[-5.9370816,43.0418887],[-5.854205,43.0425951],[-5.8535667,43.0025804],[-5.7723612,43.003273],[-5.7736346,43.0830757],[-5.6026996,43.0845317],[-5.6020243,43.0422247],[-5.5216051,43.0429102],[-5.5222624,43.0840869],[-5.4375994,43.084808],[-5.4382655,43.1265078],[-5.1044441,43.1293491],[-5.1057321,43.2099008],[-5.0238581,43.2105967],[-5.0245075,43.2511672],[-4.9001667,43.2522234],[-4.899411,43.2050092],[-4.8112607,43.2057585],[-4.8096559,43.105375],[-4.7697514,43.1057148],[-4.7693676,43.0816804],[-4.7294463,43.0820204],[-4.7288105,43.0421933],[-4.5632192,43.0436047],[-4.5635281,43.0629569],[-4.3959936,43.0643843],[-4.395658,43.0433568],[-4.3537016,43.0437144],[-4.3526592,42.978357],[-4.2301346,42.9794024],[-4.2291284,42.9162469],[-4.1877354,42.9166004],[-4.1870583,42.8740657],[-4.1055199,42.8747626],[-4.1048632,42.8334825],[-3.978008,42.8345674],[-3.9773335,42.7921387],[-3.9374989,42.7924796],[-3.9378064,42.8118263],[-3.853966,42.8125436],[-3.8542743,42.8319306],[-3.8957255,42.831576],[-3.8960731,42.8534282],[-3.9382057,42.853068],[-3.9388853,42.8957718],[-3.9805995,42.8954154],[-3.9809315,42.916265],[-4.0221962,42.9159125],[-4.0229008,42.9601447],[-3.9785114,42.9605236],[-3.9794595,43.0199892],[-3.938827,43.0203357],[-3.9391788,43.042387],[-3.8970383,43.0427461],[-3.8973798,43.0641401],[-3.8542367,43.0645077],[-3.8548965,43.1058288],[-3.7708592,43.1065444],[-3.7711564,43.1251478],[-3.7281894,43.1255135],[-3.7285258,43.1465582],[-3.6871289,43.1469104],[-3.6877837,43.1878633],[-3.6036492,43.1885787],[-3.6033117,43.16747],[-3.5227798,43.168155],[-3.5224286,43.1461867],[-3.3966874,43.1472567],[-3.3969871,43.1660054],[-3.3544386,43.1663674],[-3.3547905,43.1883699],[-3.312676,43.188728],[-3.3129888,43.2082817],[-3.2299295,43.2089878],[-3.2295886,43.1876784],[-3.1034303,43.1887511],[-3.1027407,43.1456249],[-3.145455,43.1452614],[-3.1451648,43.1271],[-3.1061749,43.1274319],[-3.1044462,43.0191538],[-3.0207548,43.0198674],[-3.0201036,42.9790294],[-2.9811034,42.9793622],[-2.9797722,42.8957965],[-3.1047595,42.8947286],[-3.1027646,42.7692834],[-3.0219949,42.7699749],[-3.021675,42.7498344],[-2.9802357,42.7501893],[-2.9798754,42.7275008],[-2.8961284,42.7282183],[-2.8967866,42.7696661],[-2.853397,42.7700376],[-2.854046,42.8108748],[-2.6857742,42.8123144],[-2.6854448,42.7915941],[-2.645233,42.7919382],[-2.6448881,42.7702354],[-2.5200461,42.7713042],[-2.5193626,42.7282661],[-2.5607021,42.7279119],[-2.5603797,42.7075982],[-2.5194387,42.7079491],[-2.5181004,42.6235669],[-2.6040367,42.6228294],[-2.6043876,42.6449665],[-2.7715364,42.6435327],[-2.7718838,42.6654388],[-2.8117632,42.6650968],[-2.8120986,42.6862446],[-2.8546876,42.6858795],[-2.853374,42.6030248],[-2.8941263,42.602675],[-2.8937924,42.581594],[-3.0618985,42.5801504],[-3.0603059,42.4795203],[-3.0219106,42.4798505],[-3.0198987,42.3524957],[-3.0625473,42.3521282],[-3.0602922,42.20906],[-3.101203,42.2087066],[-3.1008585,42.1868215],[-3.0617541,42.1871594],[-3.0611,42.1455897],[-3.02029,42.1459425],[-3.0196265,42.1037456],[-2.8960202,42.1048151],[-2.8950131,42.0407115],[-2.8122232,42.0414286],[-2.8135302,42.1246034],[-2.7687117,42.1249911],[-2.7690537,42.1467421],[-2.7269484,42.1471061],[-2.7265985,42.1248518],[-2.6870598,42.1251938],[-2.6860524,42.0610919],[-2.7280396,42.0607283],[-2.7273889,42.0192954],[-2.6034263,42.0203694],[-2.6037558,42.0413549],[-2.561002,42.0417251],[-2.561982,42.1041055],[-2.5226586,42.1044458],[-2.5229938,42.1257676],[-2.4793313,42.1261453],[-2.4796279,42.1450019],[-2.3551669,42.1460781],[-2.3555034,42.1674688],[-2.3118382,42.1678462],[-2.3114953,42.1460516],[-2.2698957,42.1464113],[-2.2692414,42.1048011],[-2.2295004,42.105145],[-2.2298147,42.1251384],[-2.1446652,42.1258749],[-2.1443191,42.1038592],[-2.1038544,42.1042093],[-2.1015605,41.958109],[-1.9768889,41.9591902],[-1.9765512,41.9376488],[-1.9347344,41.9380116],[-1.9350441,41.9577593],[-1.8945308,41.9581106],[-1.8948295,41.9771541],[-1.8540002,41.9775081],[-1.8530417,41.9163796],[-1.8138054,41.9167201],[-1.8115061,41.7698387],[-1.7705981,41.7701945],[-1.7686552,41.6458221],[-1.8533513,41.645084],[-1.8530483,41.6256663],[-1.8947057,41.6253032],[-1.8940326,41.5821499],[-1.9771633,41.5814247],[-1.9768326,41.5602127],[-1.9377021,41.5605541],[-1.9357991,41.4383441]]],"terms_text":"ITACyL"},{"id":"gsi.go.jp","name":"Japan GSI ortho Imagery","type":"tms","template":"https://cyberjapandata.gsi.go.jp/xyz/ort/{zoom}/{x}/{y}.jpg","scaleExtent":[5,19],"polygon":[[[130.35020577038,31.45741016686],[130.26851246373,31.45817385365],[130.20875325037,31.44939107956],[130.1002018703,31.44996389428],[130.09236826555,31.39190087104],[130.13355064479,31.37527753679],[130.35042958766,31.37527753679],[130.35020577038,31.45741016686]],[[130.41929509606,31.41715162138],[130.41699602753,31.41672525385],[130.41677221025,31.47525012446],[130.34179342195,31.47505923817],[130.34179342195,31.48374417037],[130.33362409129,31.48374417037],[130.33328836537,31.50044369718],[130.36674904851,31.49996660922],[130.36663713987,31.52458116919],[130.3501865699,31.5254396996],[130.35041038717,31.54985681512],[130.32523094334,31.55023828188],[130.32500712606,31.60029225564],[130.31661397812,31.63336079174],[130.31633914795,31.65083990804],[130.37520309219,31.65083990804],[130.3116389851,31.67598607789],[130.29194306459,31.69179419869],[130.29104779548,31.73234970456],[130.25210358902,31.73387257039],[130.24986541623,31.7169292784],[130.24426998427,31.71711966967],[130.21629282446,31.75804471218],[130.17533426249,31.75918654703],[130.1742151761,31.7825910568],[130.18383931907,31.79096196372],[130.23643637952,31.79096196372],[130.26911370218,31.77003327552],[130.36334077643,31.757854405],[130.42668106625,31.70893249188],[130.62408790589,31.70759962708],[130.62587844412,31.68627118535],[130.61088268646,31.62244704056],[130.55582363594,31.50249175717],[130.54239459923,31.41715162138],[130.42158428174,31.41715162138],[130.41929509606,31.41715162138]],[[130.52516066879,31.24183714215],[130.54440895474,31.24107169669],[130.56858122082,31.21714840084],[130.59924418797,31.21657416733],[130.59924418797,31.26632812093],[130.57641482557,31.26632812093],[130.57350520095,31.31624706403],[130.63080242424,31.2839270868],[130.68989018577,31.27665834675],[130.66706082336,31.26058861785],[130.66594173697,31.2192538939],[130.64400764367,31.18134784608],[130.59006767955,31.14687462722],[130.54239459923,31.17502869506],[130.54239459923,31.19130444028],[130.5000931336,31.19207028876],[130.5000931336,31.21580851721],[130.52493685151,31.21714840084],[130.52516066879,31.24183714215]],[[130.74987321641,31.16621947793],[130.74964939913,31.24107169669],[130.77449311704,31.25886669886],[130.77717892438,31.33307201163],[130.75121612008,31.3745479497],[130.74897794729,31.41657860612],[130.67556587994,31.46851775588],[130.67489442811,31.50077426676],[131.40006241045,31.50020176294],[131.40834364976,31.45916319691],[131.36693745323,31.40932010999],[131.36559454956,31.35142307004],[131.31702620013,31.34205683123],[131.29956845241,31.36594845228],[131.24316649822,31.36633066888],[131.19952212892,31.43357656998],[131.14782033758,31.45018957859],[131.13394366631,31.44999864121],[131.13260076264,31.42899315281],[131.10059489182,31.4253644553],[131.05090745599,31.41638760026],[131.04911691776,31.39155352706],[131.08403241321,31.35084965365],[131.11626210131,31.35084965365],[131.11782882226,31.33421905765],[130.99942948193,31.33364553639],[130.99965329921,31.25102200373],[130.87521089237,31.250639319],[130.87453944053,31.16679401706],[130.74987321641,31.16621947793]],[[130.86624800392,30.47467824549],[130.86602418665,30.4993660172],[130.93361700475,30.57493333731],[130.93227410108,30.61596948602],[131.00635762027,30.61654733583],[131.04933053774,30.59111868252],[131.04933053774,30.54274730545],[130.99203331444,30.50842948616],[130.99113804533,30.4752569368],[130.86624800392,30.47467824549]],[[137.8748637557,36.37519421155],[138.00004956356,36.37493936048],[138.00004956356,36.30839468919],[138.04159352635,36.30826715442],[138.04191005178,36.29174963873],[138.08305835778,36.29162207674],[138.08353314592,36.24989812235],[138.13306937584,36.24996193747],[138.13354416398,36.16676665118],[138.16654194014,36.16670276819],[138.16693759693,36.12484822641],[138.04167265771,36.1249121435],[138.04143526363,36.04158405062],[137.87478462434,36.04152006575],[137.8748637557,36.37519421155]],[[138.37446443279,35.8339347068],[138.49980210875,35.83284598419],[138.49980210875,35.75042265703],[138.74935837428,35.75060430014],[138.75070127796,35.58331750158],[138.62446833288,35.5838635715],[138.62536360199,35.49990716236],[138.37491206735,35.49972494883],[138.37446443279,35.8339347068]],[[135.791788714,35.6416524565],[135.80060419232,35.6492299306],[135.83399762526,35.65051596353],[135.89160525366,35.62003141459],[135.89271309267,35.60909530501],[135.95775906869,35.60858062772],[135.98339762858,35.61720103553],[135.98434720487,35.64099882962],[135.95095377193,35.64189914759],[135.95047898378,35.68304570763],[135.94224932258,35.69204369082],[135.94177453443,35.73239358289],[136.00808661218,35.7751627038],[136.03166775677,35.77503430242],[136.05018449447,35.75012051215],[136.05002623175,35.66646105164],[136.00840313761,35.65836031603],[136.00856140032,35.61694372337],[136.0340416975,35.60021665776],[136.06664381687,35.59995929098],[136.06616902872,35.61655775359],[136.10019551253,35.62492001521],[136.10019551253,35.69127247488],[136.07598131707,35.69165808378],[136.07503174078,35.74922141512],[136.0834196647,35.76694459715],[136.12440970798,35.76604569021],[136.15020653058,35.70039805209],[136.15875271721,35.64215637943],[136.17442072604,35.62492001521],[136.17552856504,35.58342174019],[136.17489551418,35.55812619512],[136.1585944545,35.55831932114],[136.15875271721,35.5670095101],[136.11649657221,35.56675203657],[136.11625917814,35.52554561689],[136.04044971041,35.52470191934],[136.01683698753,35.50311340405],[136.01661317025,35.48334161402],[135.97543079101,35.48334161402],[135.94141056468,35.50885268976],[135.94185819923,35.56640504504],[135.93357695993,35.57487049764],[135.90873324202,35.57514356187],[135.90850942474,35.59953354293],[135.83185200685,35.59971552979],[135.79279589175,35.62518960433],[135.791788714,35.6416524565]],[[135.80915921172,35.4750487703],[135.77043882253,35.53344498229],[135.75790505494,35.53326284486],[135.74167830225,35.51641334477],[135.70071974028,35.51705095781],[135.67464502734,35.53362711931],[135.67542838781,35.56658710719],[135.69960065389,35.58333505571],[135.81654518191,35.5834260676],[135.81654518191,35.56804358954],[135.85817519571,35.54956250693],[135.85851092163,35.5254305443],[135.85090113416,35.52470191934],[135.85011777368,35.4751399051],[135.80915921172,35.4750487703]],[[135.58332757771,35.44132180519],[135.61656444356,35.44989161714],[135.64163197876,35.4749576354],[135.71638694978,35.47477536528],[135.71728221889,35.46702850341],[135.81441891776,35.46538789573],[135.86668025229,35.44186884172],[135.86679216093,35.40867523135],[135.81721663374,35.40821917993],[135.81676899918,35.3849571361],[135.7754747113,35.38349733314],[135.7583526895,35.40803675864],[135.59183263429,35.40840160081],[135.58321566907,35.4253649376],[135.58332757771,35.44132180519]],[[135.40011097158,35.43312261685],[135.42495821789,35.44189082899],[135.4580351254,35.45007792954],[135.4589847017,35.49164522829],[135.46642304932,35.49183851435],[135.46618565524,35.5080728839],[135.44181319708,35.51709056025],[135.43967665042,35.53293345221],[135.45843078219,35.55804382162],[135.52323936414,35.55810819707],[135.52498025401,35.50910352674],[135.54151870776,35.50008495336],[135.54151870776,35.48339792301],[135.57514953478,35.48365566411],[135.57491214071,35.49164522829],[135.6087803618,35.49170965703],[135.60893862451,35.46683632488],[135.59208364533,35.45826419724],[135.53305165249,35.45826419724],[135.50029127041,35.45007792954],[135.50044953312,35.44150401624],[135.50788788075,35.4250627562],[135.53336817792,35.42512723828],[135.53297252113,35.38346105831],[135.54159783912,35.38333202741],[135.54175610184,35.36687889716],[135.50860006297,35.35836066507],[135.5089165884,35.34216063858],[135.50013300769,35.34164424964],[135.50013300769,35.41661515666],[135.3998735775,35.41655066776],[135.40011097158,35.43312261685]],[[133.70822156225,35.45816409093],[133.70822156225,35.33318625316],[133.12484182584,35.33327754848],[133.12495373448,35.37489746931],[132.95876940519,35.37507996558],[132.95820986199,35.45779947415],[132.87506174303,35.45852870604],[132.87461410847,35.52504328752],[132.95015243997,35.52522544361],[132.94970480541,35.55818888426],[133.01673808032,35.55855304549],[133.01684998896,35.56674623573],[133.03352437621,35.56692829711],[133.03307674165,35.5920487997],[133.0668731507,35.59186679541],[133.06653742479,35.61679752725],[133.14135176147,35.61671112498],[133.14151002418,35.59181218751],[133.36666664955,35.59185602422],[133.36689046683,35.57483679329],[133.34215865756,35.57447270605],[133.34193484028,35.55799602729],[133.33320596642,35.55025719141],[133.28363043923,35.55016614184],[133.28340662195,35.49178209483],[133.33354169233,35.49159986286],[133.33354169233,35.4752884282],[133.41713744585,35.47492388905],[133.41713744585,35.37516041329],[133.4999498389,35.37534290896],[133.49972602162,35.45806214773],[133.45854364238,35.45806214773],[133.45854364238,35.5162885278],[133.49211623415,35.53350232911],[133.54135603542,35.54160702023],[133.58343368378,35.54197125678],[133.58354559242,35.45842676331],[133.70822156225,35.45816409093]],[[133.84174199676,35.46646185214],[133.84158373405,35.58367337011],[133.97499920311,35.58328723983],[133.97531572854,35.50860042068],[134.00823437334,35.50834275959],[134.03339814508,35.49971063549],[134.04210259443,35.474968664],[134.04431827244,35.45834087408],[134.08356742586,35.45859869551],[134.08309263771,35.53358961595],[134.13326191849,35.54968677959],[134.2332839546,35.55998726867],[134.27490704875,35.58341595013],[134.33298946529,35.58367337011],[134.3352051433,35.49172187329],[134.36654116095,35.49223730128],[134.36654116095,35.49996832427],[134.41718522987,35.49971063549],[134.41591912815,35.54170299025],[134.62530070059,35.54157421294],[134.62514243787,35.37553750794],[134.70838862616,35.3746341986],[134.70823036344,35.33397481479],[134.41655217901,35.33358748416],[134.41591912815,35.37527942059],[134.39217972084,35.37540846437],[134.39154666998,35.35011194072],[134.37477082215,35.33345837354],[134.20004878437,35.33358748416],[134.19938857992,35.35874491549],[134.24997128486,35.39971317226],[134.2751507287,35.39962195204],[134.27503882006,35.39205031412],[134.35818693902,35.39314505273],[134.35852266494,35.39989561238],[134.37519705219,35.39998683229],[134.37441369171,35.42488600691],[134.33255986063,35.42506839006],[134.33278367791,35.41658713686],[134.04954291197,35.41658713686],[134.050773907,35.39177662715],[134.06610539058,35.39186785624],[134.06711256833,35.39998683229],[134.14186753935,35.4001692718],[134.14164372207,35.36677596772],[134.18338564451,35.35847111553],[134.18372137043,35.3333688437],[133.78308844191,35.33364272875],[133.78331225919,35.3415849913],[133.82471845571,35.35920124668],[133.82505418163,35.38310939264],[133.84172856888,35.40837862237],[133.89980915265,35.40892588268],[133.89980915265,35.41676953879],[133.85829104749,35.41658713686],[133.85739577837,35.46645867604],[133.84174199676,35.46646185214]],[[133.24986715088,33.66667502084],[133.41786302325,33.66674088],[133.52484861884,33.66674088],[133.5249277502,33.79178216553],[133.64156737143,33.79184792875],[133.64188389686,33.66680673911],[133.75005646282,33.66687259817],[133.7502938569,33.62517372978],[133.79152129425,33.62497605673],[133.79167955697,33.5084018887],[133.73335974635,33.5084018887],[133.73328061499,33.51658303581],[133.64196302822,33.51671498346],[133.6083322012,33.48345781283],[133.5249277502,33.46682443689],[133.47491673214,33.41934896387],[133.43313537528,33.38321323101],[133.37497382738,33.38334538172],[133.37497382738,33.4915753247],[133.20816492538,33.49190528877],[133.20824405673,33.55826847379],[133.24947149409,33.55833441583],[133.24986715088,33.66667502084]],[[134.35010199023,33.73355124395],[134.48320093386,33.73368285973],[134.48335919658,33.66732292669],[134.43366470395,33.65032970689],[134.43287339037,33.63412374427],[134.35279245639,33.63346490079],[134.35010199023,33.73355124395]],[[140.31655633412,36.21655924286],[140.31670857142,36.44984371664],[140.34972550975,36.44993784711],[140.35012116654,36.51667940915],[140.47467392354,36.51671120743],[140.47483218626,36.59159167371],[140.62489198016,36.59204412991],[140.62466816288,36.63354434507],[140.64973569807,36.63480157867],[140.6504071499,36.71683657266],[140.69912259173,36.81553707084],[140.71006153063,36.91305702097],[140.70837582504,36.95687206208],[140.74955820428,36.95866053873],[140.75322567003,37.06176178104],[140.75001124397,37.16670649618],[141.00831455851,37.16665576788],[141.00836843323,37.09170040353],[140.98331342638,37.05827740145],[140.98333134606,36.95834221234],[140.90833717097,36.90001505806],[140.81672362984,36.89998820089],[140.80827903855,36.87497854873],[140.80832751008,36.84999814762],[140.81655279507,36.85004292272],[140.81669039224,36.84150363067],[140.81669268087,36.81815641451],[140.79987840782,36.8083235537],[140.78339986069,36.79992318494],[140.77500355026,36.7952284511],[140.77498205056,36.78338477344],[140.75836081806,36.77499922674],[140.75825340609,36.75837229112],[140.7500237449,36.75830889371],[140.74688638087,36.71939040314],[140.73335857243,36.65047700125],[140.69167208421,36.58337353738],[140.65003069722,36.51336154863],[140.64998216361,36.38351382821],[140.59986271995,36.27483428417],[140.57499364049,36.247961428],[140.57462747735,36.21728656365],[140.31655633412,36.21655924286]],[[141.21659460884,41.24992504972],[141.41662092018,41.24971143017],[141.3985787742,41.17051732489],[141.40426133986,41.09679470963],[141.39502717066,41.04045724412],[141.3985787742,40.97184467053],[141.40625023785,40.91003228264],[141.41136454694,40.83010568063],[141.41306931664,40.80204405626],[141.42244554999,40.74986737343],[141.34161105343,40.75083597368],[141.31490299481,40.74556231273],[141.29203066802,40.74168751981],[141.2332161134,40.741902792],[141.23307404926,40.858370329],[141.25026381039,40.85858522311],[141.24941142554,40.916473772],[141.17411743051,40.91690318231],[141.22497639319,40.99479494983],[141.23818835836,41.06959595271],[141.24969555383,41.12580144291],[141.27143136749,41.15875294418],[141.23335817754,41.22994860165],[141.21659460884,41.24992504972]],[[141.25853811897,41.31660436526],[141.15014769418,41.31671753815],[141.14989655789,41.39163254467],[141.18877245631,41.39204703296],[141.21624676695,41.37915897915],[141.25848789171,41.36012370261],[141.25853811897,41.31660436526]],[[141.05840812211,45.25840298159],[141.03452758266,45.25832991558],[141.0087358852,45.25815313759],[141.00829855109,45.2749503937],[140.99993571248,45.2749503937],[141.00002145578,45.30370739875],[140.99998630938,45.30828451785],[140.99195968538,45.30845936456],[140.99171107313,45.3416205272],[140.98350686895,45.3417203809],[140.98336480481,45.34998266412],[140.97476992425,45.35008250306],[140.9750185365,45.36670323221],[140.96663675214,45.36675313695],[140.96684984835,45.39818437653],[140.966494688,45.42498689786],[140.95839703193,45.42483733769],[140.95815451327,45.43314299759],[140.95011815184,45.43349546179],[140.94966610651,45.51650986935],[140.97442814517,45.51672103552],[140.97447837243,45.50014208116],[140.9830672337,45.50042371776],[140.98331837,45.4669695229],[140.99045064077,45.46703997365],[140.99135473143,45.45876140769],[141.000194729,45.45812725464],[141.00034541078,45.45002356013],[141.01626745186,45.45019973978],[141.01636790638,45.47496512106],[141.04991971535,45.47531732397],[141.04991971535,45.46675817011],[141.06614311999,45.46679339563],[141.0664947108,45.45019973978],[141.07463152675,45.44998832413],[141.07498311756,45.34178065157],[141.06659516532,45.34167474083],[141.06418425689,45.30611284333],[141.06644448354,45.30565360635],[141.06629380176,45.28484273553],[141.05906107648,45.28357051614],[141.05840812211,45.25840298159]],[[144.27488180314,42.96671405694],[144.27502386729,42.99155438113],[144.25861545893,42.99145046763],[144.25804720237,42.98313681807],[144.20818268867,42.98318878187],[144.20853784903,42.97471810232],[144.16684202347,42.97502992716],[144.16684202347,43.00495774998],[144.16641583105,43.04177598129],[144.0748554918,43.04187980967],[144.07492652387,43.10025542281],[144.24987851423,43.09999609865],[144.24987851423,43.11679803377],[144.29178743599,43.11674618304],[144.2920005322,43.09190463314],[144.41680388058,43.09185276132],[144.41680388058,43.11679803377],[144.56653948581,43.11679803377],[144.56675258202,42.99171025106],[144.50005346755,42.9915024244],[144.50019553169,42.92480576324],[144.46652633013,42.92501381529],[144.31738592868,42.96675438272],[144.27488180314,42.96671405694]],[[140.69972478088,42.5751298131],[140.70015284963,42.61646613432],[140.84450599182,42.61672487035],[140.99960776742,42.61668790813],[141.00006375193,42.54167666875],[141.24984166465,42.54168238797],[141.24994211917,42.58335654436],[141.29163074409,42.58331956233],[141.29158051683,42.62509525569],[141.37500799393,42.62498438386],[141.37500799393,42.66662133905],[141.4999231869,42.66665827162],[141.4999231869,42.81649728565],[141.47496023921,42.81650491617],[141.47511092099,42.8334137279],[141.81235902085,42.83357414934],[141.95751579918,42.83327948275],[141.9435526212,42.77977422873],[141.9576162537,42.77896318716],[141.95831943532,42.75020121185],[141.99990760572,42.75086510026],[141.9992044241,42.71493114279],[142.0003094238,42.67631769199],[142.01798941894,42.65075907775],[142.0908189444,42.65002023325],[142.09122076247,42.52510348612],[142.02471987164,42.52510348612],[141.96032852568,42.52495541975],[141.86650400599,42.52517751918],[141.86559991533,42.57712707332],[141.83576492352,42.58518943644],[141.80482493201,42.57416814647],[141.74646085713,42.57705310186],[141.73068949782,42.61476715705],[141.61707543811,42.6105531897],[141.52134228257,42.60330745653],[141.45614730047,42.57586954656],[141.35619505519,42.52865697374],[141.27522871378,42.48822412486],[141.19506600852,42.43790576605],[141.10475739695,42.39140503755],[141.05392741091,42.33165259938],[141.02539832783,42.29161268611],[140.95186562075,42.29146406758],[140.91469744913,42.32682538905],[140.89450609104,42.37174125443],[140.88425973022,42.42722922291],[140.85040655769,42.46095792778],[140.76642658075,42.49977903608],[140.76662748979,42.52821279884],[140.69972478088,42.5751298131]],[[140.75005175023,43.23374469699],[140.82761698213,43.21350425464],[140.88245374078,43.22530637354],[140.97337479139,43.24600632559],[141.02139247124,43.2431087556],[141.04213383591,43.20211407957],[141.08345726584,43.18205479137],[141.17267354675,43.16382009604],[141.25677551857,43.19365585362],[141.37528066948,43.33327171855],[141.6249101464,43.33334478655],[141.62450832833,43.41680402892],[141.79146373703,43.41680402892],[141.79196600962,43.83339131087],[142.12487228186,43.83331884728],[142.12487228186,43.75021775035],[142.16656090677,43.74992749181],[142.16656090677,43.83317391984],[142.24953633854,43.83324638361],[142.24983770209,43.8580962632],[142.27464996801,43.8580962632],[142.27464996801,43.87424675433],[142.26671406109,43.87489847601],[142.26651315206,43.91688328705],[142.24993815661,43.91710037291],[142.25000627225,44.49999904167],[142.4999694516,44.50012874722],[142.49976854256,43.88365981984],[142.51674535608,43.88344261201],[142.51644399253,43.83346377437],[142.6247339628,43.83346377437],[142.6247339628,43.58330511259],[142.54175853103,43.58403277336],[142.54195944007,43.50007553209],[142.5005721787,43.500221266],[142.50037126967,43.250063364],[142.25054088372,43.25013653203],[142.25003861113,43.45838119826],[142.00030867969,43.45816244584],[142.00000731614,43.41724183211],[141.91703188437,43.41687699634],[141.91703188437,43.33341785446],[141.87494144139,43.33327171855],[141.87453962331,43.17487339597],[141.93350642531,43.17472687911],[141.93390824338,43.15868115634],[141.9913682276,43.15802165291],[141.99207140923,43.13339509811],[141.87524280494,43.13332178998],[141.87484098687,43.00012273874],[141.49984427164,43.00026967384],[141.5001456352,42.91682752603],[141.25021479473,42.91631255378],[141.25001388569,42.99990233543],[141.12504846546,43.00004927106],[141.12524937449,43.08323181508],[140.99988213619,43.0835986549],[141.00008304522,43.16637483706],[140.75085538638,43.16659464227],[140.75005175023,43.23374469699]],[[140.59120711887,41.7835290469],[140.58381978351,41.83340389909],[140.58453010422,41.87731665106],[140.59092299059,41.91612521476],[140.60797068758,41.9440274172],[140.57543799916,41.95913601413],[140.58438804008,41.99979520491],[140.71039893366,42.00011192783],[140.86894251566,42.00011192783],[140.9172443238,42.00053422262],[140.99040735671,41.91908511782],[141.04737507748,41.90692749714],[141.12721512505,41.88398028822],[141.17551693319,41.8373202361],[141.20194086352,41.8148774364],[141.18418284582,41.78321124824],[141.11300871089,41.7671073878],[141.05689337497,41.71559028285],[140.99381689611,41.6996815955],[140.94267380514,41.70413642477],[140.89238309902,41.73562962373],[140.84805908685,41.74326201425],[140.80018347113,41.75672249187],[140.73298713217,41.74633591528],[140.69704490435,41.73234317623],[140.68809486343,41.76986228217],[140.59120711887,41.7835290469]],[[140.24179585193,42.23380417915],[140.24159494289,42.25826958158],[140.21005222428,42.25797218685],[140.20804313392,42.27484711876],[140.26610584525,42.27514443389],[140.26510130007,42.29179184247],[140.29001402051,42.29119736791],[140.29182220183,42.26778547222],[140.33913627975,42.24139021231],[140.34144673366,42.21662067407],[140.29322856508,42.21662067407],[140.24179585193,42.23380417915]],[[140.5500698319,42.08446643616],[140.54976846834,42.11387080944],[140.58065823259,42.11193329833],[140.62636503822,42.12068888716],[140.63364799077,42.12135947813],[140.63359776351,42.10060512509],[140.6085343613,42.0996361742],[140.60848413404,42.08327357565],[140.54971824108,42.08312446651],[140.5500698319,42.08446643616]],[[140.65829476124,41.06668390404],[140.67117312553,40.91973845213],[140.84491757068,40.91651794496],[140.91726268929,40.91688446951],[140.91712062514,40.87597060622],[140.98460109239,40.87532609104],[140.98502728482,40.79277634954],[141.13391050519,40.79191591552],[141.13972013932,40.68033688317],[141.17424172572,40.68173742982],[141.18503860048,40.60056495195],[141.4335087841,40.60078068023],[141.43308259168,40.51756583822],[141.1830497025,40.51648584823],[141.18361795907,40.58222550347],[141.16713851864,40.59171949298],[141.0439689079,40.59236676137],[141.04283239476,40.65824744906],[140.98401784015,40.65835522015],[140.72645555147,40.65857076182],[140.7258872949,40.5752120322],[140.6684933817,40.57467250396],[140.60882644224,40.57488831578],[140.60925263466,40.48310558373],[140.55058014419,40.48299753002],[140.54887537449,40.51756583822],[140.4002762824,40.51691784631],[140.40013421826,40.58319654154],[140.25664943526,40.58233339729],[140.24897797162,40.6329164137],[140.33251168687,40.6329164137],[140.33251168687,40.6668685866],[140.41675572282,40.66697634376],[140.41703985111,40.73310636766],[140.3319434303,40.73375226547],[140.33350613586,40.75850695413],[140.28420987873,40.7581841262],[140.28037414691,40.85678885153],[140.30253615299,40.98506688683],[140.31844733685,41.00018619857],[140.42442718647,41.00040063195],[140.42442718647,40.9002917234],[140.55043808005,40.89975482521],[140.54993594969,41.06668469228],[140.65829476124,41.06668390404]],[[140.01669286591,40.33380933454],[140.25251934093,40.33380933454],[140.25006213354,39.33298346786],[139.9834077398,39.33320323377],[140.05621967123,39.72433162037],[140.00614206132,39.7704262598],[139.9407337113,39.88023137264],[139.94158325159,40.01081102788],[139.94055447894,40.08508825139],[139.94115720605,40.10875598318],[140.01669286591,40.33380933454]],[[139.85814158604,39.04176309557],[139.87552021763,39.04137298588],[139.8770270354,39.00008721208],[139.91670656996,39.00000914431],[139.91670128995,38.7917265095],[139.75492583732,38.79164845102],[139.75020447498,38.79386031243],[139.79375938684,38.89687193302],[139.79014302419,38.92540244092],[139.83615119338,38.99101811819],[139.85814158604,39.04176309557]],[[139.37551097227,38.1173978813],[139.38053369817,37.95892457768],[139.41699868815,37.9584493548],[139.41699868815,37.87412788746],[139.37571188131,37.87460365543],[139.37611369938,37.83296233149],[139.29233463147,37.83145487116],[139.30006962935,37.78073866603],[139.29173190436,37.68357441277],[139.2919328134,37.66473061802],[139.22934964877,37.65940260168],[139.18113148019,37.61023958654],[139.14536967182,37.60769304313],[139.12367149596,37.62671043285],[139.09815604842,37.65017707221],[139.08831150567,37.66640051458],[138.99950971187,37.66655955038],[138.9994226694,37.79170868021],[138.81260832323,37.79198934291],[138.86834406289,37.84689141822],[138.9915013018,37.91333515169],[139.08231218596,37.97750182191],[139.27679213256,38.03417532016],[139.37551097227,38.1173978813]],[[139.96008286406,38.49993004113],[140.50032726119,38.50008727416],[140.50022680667,38.16653588757],[140.37496002288,38.16653588757],[140.37536184095,38.08348155828],[140.25039642072,38.08292807287],[140.21704552078,38.07407173651],[140.22136506505,38.04219586845],[140.25120005686,38.04195852705],[140.25039642072,38.0001744595],[140.23372097075,37.99962034404],[140.23352006172,37.94196948017],[140.20860734128,37.94109803478],[140.20840643225,37.90012844634],[140.19253461842,37.89965284327],[140.19122870969,37.88371836434],[140.15838008235,37.88300479955],[140.15827962783,37.8581049883],[140.07530419606,37.85945328271],[140.07409874185,37.87475866032],[140.0501905666,37.87571018504],[140.0501905666,37.89251842835],[140.05762420092,37.89354899768],[140.05812647351,37.92541025073],[140.07409874185,37.92572720879],[140.07419919637,37.94196948017],[140.09871009873,37.95369337696],[140.09820782614,37.99233729463],[140.10182418878,38.00041193627],[140.12281918302,38.00080772918],[140.11548600321,38.01806222303],[140.08976964664,38.02795402283],[140.07470146896,38.04132561289],[140.06726783463,38.0349170489],[140.0670669256,37.99186228803],[140.01633739407,37.99170395181],[140.01583512148,38.0660052113],[139.99805467182,38.06655882479],[139.99966194411,38.13738675813],[139.99956148959,38.17514410602],[139.9979542173,38.33370049749],[139.95787286467,38.33377929514],[139.95837513726,38.50028381497],[139.96008286406,38.49993004113]],[[140.70821747827,38.78330258189],[140.70837353831,39.15023077225],[141.04194014274,39.14956975049],[141.04167202485,39.50007808975],[141.00146787279,39.49985884928],[140.998932853,39.91638279149],[141.25077232931,39.91692211681],[141.25037051124,39.50069531694],[141.16709371592,39.50007521498],[141.1669932614,39.45626652209],[141.16669189785,39.40272822458],[141.16689280689,39.25073529211],[141.2079787047,39.24995738356],[141.20898324987,38.8747057376],[141.03399147974,38.87509676593],[141.03338875263,38.78353750059],[140.86794016169,38.783145969],[140.70821747827,38.78330258189]],[[141.37590200536,38.36972154065],[141.37476549223,38.4999203515],[141.24903872693,38.50025389276],[141.25133490268,38.668858542],[141.52523456764,38.66652919592],[141.54981166414,38.63368844711],[141.55052198484,38.55563135133],[141.5554942298,38.47938004219],[141.56558078385,38.39558849019],[141.5462600606,38.37398500653],[141.55918789748,38.32429480069],[141.5985396647,38.31225706776],[141.59527218944,38.26062821377],[141.50761861409,38.23664120781],[141.46982955243,38.2447865207],[141.39226253112,38.27724712227],[141.41158325438,38.34780719677],[141.37590200536,38.36972154065]],[[131.04175307036,33.73809881635],[131.04130543581,33.70887251514],[130.99955681677,33.70857592787],[131.00034687384,33.6839199041],[131.04958667511,33.6839199041],[131.05013952171,33.64170875055],[131.07510184486,33.64200556853],[131.07587850874,33.616829842],[131.10039319733,33.61666078162],[131.10084083189,33.60081650355],[131.17447671651,33.60007081873],[131.19999188626,33.58422349198],[131.2006633381,33.55867520339],[131.24050281367,33.55867520339],[131.28258046203,33.54207408934],[131.33137262874,33.52528320256],[131.4182137328,33.55065483869],[131.51624570079,33.55084136726],[131.51691715262,33.56669482339],[131.63352595472,33.56688131732],[131.63307832016,33.4754510561],[131.74230115207,33.47451759623],[131.74946330499,33.4593941455],[131.75013475682,33.33288884057],[131.60756315041,33.33401081872],[131.60801078497,33.37420549744],[131.52564602648,33.37457931428],[131.52467218605,33.2669137917],[131.57690018326,33.25843203104],[131.64941698149,33.28332039594],[131.71633834777,33.28388170581],[131.77496545798,33.26686700692],[131.78385146414,33.25028494772],[131.8329129059,33.25015259514],[131.88403176297,33.27450209588],[131.90824595842,33.27489904237],[131.90808769571,33.25849041659],[131.87516905091,33.20606803915],[131.84984701645,33.18275912021],[131.8503218046,33.14963919794],[131.8752486155,33.15037560256],[131.90777117028,33.14129100398],[131.91710244658,33.13332160215],[131.91732626386,33.10857804157],[131.95050210343,33.09967070254],[131.950185578,33.08349443782],[131.98278769736,33.08336183319],[131.98278769736,33.10006844205],[132.00035485877,33.11690443011],[132.02520210509,33.11690443011],[132.02472731694,33.09980328258],[132.00842625726,33.09171553445],[132.00842625726,33.06718256819],[132.01744723203,33.06704993897],[132.01714877007,33.04987795647],[131.99180867214,33.0421120948],[131.92518006897,33.04091808468],[131.9254965944,33.02499640337],[131.95002731528,33.02499640337],[131.95045122108,33.01347549853],[131.95034384071,32.97482430898],[131.98326248551,32.97535537996],[131.98491908197,32.95940701418],[132.02610146121,32.9592192187],[132.0582790126,32.95862511022],[132.05843727531,32.99141876734],[132.07198400331,32.99170189784],[132.0829679962,32.98332106133],[132.09167992381,32.92634886448],[132.02472731694,32.92542075248],[132.02472731694,32.90057574318],[132.0334874314,32.88294129224],[132.00795146911,32.88356551414],[131.98326248551,32.85870876251],[131.99988007063,32.84980117207],[132.01714877007,32.84289727827],[132.01602968368,32.82653607307],[131.97550761246,32.78396366112],[131.93411255975,32.76746021785],[131.8991970643,32.766142793],[131.89178663602,32.71661269643],[131.83317096714,32.65069845095],[131.78369320142,32.6489443227],[131.78415498315,32.58396276024],[131.74185351752,32.58283121821],[131.70820188619,32.56668764106],[131.70772709804,32.5429431523],[131.74159531913,32.50851583424],[131.74140588296,32.45128662429],[131.70804362347,32.44215937788],[131.70111877283,32.40878136136],[131.6578743427,32.39219290505],[131.64225482858,32.33354523679],[131.59947540073,32.27571995554],[131.57492216184,32.18337883254],[131.54184525433,32.0847417557],[131.54200351704,32.00009168682],[131.49974737204,32.00022590098],[131.5003804229,31.74971007939],[131.45859906604,31.75011381693],[131.45875732875,31.79182387036],[131.24969228174,31.79168935204],[131.24969228174,32.16703604105],[131.3748780896,32.16717001027],[131.37503635232,32.25046068056],[131.49990563475,32.25019298716],[131.49990563475,32.33340757632],[131.54137046618,32.33340757632],[131.54166750852,32.62506038939],[131.66644564128,32.62515464066],[131.66633373264,32.6666155687],[131.74992948616,32.66652136111],[131.75005894815,32.91663566767],[131.59769929528,32.91688239565],[131.25044431813,32.91663037405],[131.24901995369,33.00042251591],[131.49970809484,33.00002432608],[131.49986635756,33.06344656374],[131.50018288299,33.13914840974],[131.48040004357,33.16631091805],[131.28399601379,33.16617843843],[131.26706190324,33.20035154321],[131.26627058967,33.25039503689],[131.29966402261,33.2698486619],[131.29950575989,33.31998461745],[131.24427207223,33.34114154113],[131.17511126561,33.34153818437],[131.17526952832,33.35806338039],[131.07524749221,33.35806338039],[131.07572228035,33.33347274995],[131.00054749055,33.33320829683],[131.0000727024,33.24960091936],[130.91445257339,33.24960091936],[130.74970108668,33.25013033185],[130.74970108668,33.0837373409],[130.62546485511,33.08320692264],[130.62546485511,33.00002432608],[130.72795985531,33.0017112414],[130.87491804477,33.00017600322],[130.87529612813,32.79131407789],[130.96677197761,32.7918462497],[130.96708850304,32.85807675215],[130.92530714618,32.85781086498],[130.92530714618,32.95029145755],[130.96679503759,32.95830705997],[131.00012227803,32.91682799652],[131.00016863211,32.50006684553],[130.66646598784,32.50045582611],[130.66668980512,32.33305500581],[130.62505979131,32.33305500581],[130.62461215676,32.24942752141],[130.49972211535,32.25037396494],[130.50039356719,32.12516864385],[130.33275442559,32.1249790954],[130.343705176,32.16132753197],[130.34954072148,32.20815299489],[130.42748424391,32.2942330114],[130.46637334086,32.40054393512],[130.49390286611,32.40073290896],[130.52299911232,32.43304161793],[130.54940955118,32.44456414676],[130.54985718574,32.46590526749],[130.48383108858,32.46647177702],[130.4742069456,32.47534662776],[130.47510221472,32.50064459054],[130.50889862377,32.54197445264],[130.62438833948,32.62570813417],[130.62483597404,32.66660356216],[130.52568491966,32.66679197706],[130.5252372851,32.68337093253],[130.5585860596,32.71670792054],[130.55903369416,32.77450016017],[130.57492472093,32.78372085869],[130.57492472093,32.82172262654],[130.50934625833,32.84184569286],[130.50777953738,32.8698599348],[130.44154787641,32.89158085761],[130.41623827047,32.94258041232],[130.41579063591,32.97488144692],[130.37438443939,33.00097656168],[130.37527970851,33.08315385362],[130.24927058071,33.08371644737],[130.24904676343,33.16075775844],[130.15862458292,33.09740511948],[130.17775431247,33.07174090544],[130.18369211811,33.06683706925],[130.18369211811,33.03400678724],[130.19958314488,33.02499977112],[130.19976856119,33.00001402362],[130.12478977289,33.00001402362],[130.12456595561,32.96678328756],[130.04089669442,32.94070208204],[130.02500566765,32.94164125217],[130.02455803309,32.91646804471],[130.12456595561,32.91719556631],[130.12456595561,32.86739205681],[130.15030494264,32.86682808325],[130.19577825115,32.86610014791],[130.23334115296,32.89182746562],[130.29198127993,32.89182746562],[130.29242891449,32.84990720854],[130.29153364537,32.79159949882],[130.29220509721,32.71724877165],[130.18342989986,32.65791195602],[130.15034334361,32.65002149531],[130.11538944719,32.64962050091],[130.11744220367,32.70013515534],[130.1590338165,32.7170604632],[130.2485607279,32.75866696147],[130.24967981429,32.79084689122],[130.13329482947,32.79235210006],[130.125685042,32.76751289707],[130.00146645243,32.74963190739],[129.92939728876,32.67317376017],[129.80047853634,32.57458560005],[129.80003090178,32.54704447759],[129.77424681515,32.54749343613],[129.71766614329,32.54987443459],[129.71632323962,32.59042734571],[129.7498958314,32.67486935529],[129.75011964868,32.72459249076],[129.80025471906,32.72553394947],[129.74161459209,32.77522884647],[129.62411052088,32.85009523599],[129.62646465079,32.9178725958],[129.83158913805,32.91738345105],[129.87120479635,32.91644402337],[129.89269125508,32.94105373663],[129.93342599977,33.00827283013],[129.96699859154,33.0746905371],[130.0580922239,33.12025335469],[130.05876367573,33.21692565966],[130.24945599701,33.21673841336],[130.24990363157,33.33331517671],[130.21565958796,33.33350217315],[130.04220119712,33.33331517671],[129.92559239502,33.33294118261],[129.90835846458,33.35836912319],[129.90791083002,33.38304208051],[129.86695226805,33.38285519048],[129.86697302051,33.36012438878],[129.83337967628,33.34079472146],[129.8009261709,33.34098170185],[129.80003090178,33.31592275281],[129.75056728323,33.31685791766],[129.75034346596,33.27532693435],[129.72572356532,33.27476556947],[129.69170333899,33.30806697203],[129.69237479082,33.25024911652],[129.8747858728,33.25024911652],[129.87590495919,33.21299340321],[129.87521274072,33.1185621153],[129.87523350736,33.03323224813],[129.80831214109,33.0330446097],[129.7498958314,33.05030567244],[129.73400480462,33.05799701292],[129.72657821909,33.08172509009],[129.69841785734,33.0998186332],[129.62412979867,33.09927670165],[129.62373755404,33.12376865485],[129.62500578999,33.24201303912],[129.59255228461,33.24107707212],[129.59255228461,33.29927514005],[129.54196957967,33.30039755093],[129.50011574859,33.31760604231],[129.49989193131,33.41686255934],[129.59949062024,33.41592846878],[129.66753107291,33.40864221756],[129.66775489019,33.43274056151],[129.83360349356,33.5665605303],[129.9320830961,33.56786598137],[129.935216538,33.40826854718],[130.04130592801,33.38360274821],[130.04108211073,33.48427733817],[130.24900836246,33.48465068126],[130.25057508341,33.61680614548],[130.2850429443,33.63404510982],[130.28302858879,33.69151444112],[130.30887948446,33.69151444112],[130.32365142484,33.66711562227],[130.3922514207,33.69179377681],[130.41776659045,33.72484208862],[130.4338814345,33.7754604525],[130.39023706519,33.87047513641],[130.39113233431,33.92509325246],[130.50774113641,33.92620754358],[130.60554928711,33.89165774203],[130.66665140414,33.94960428957],[130.74991143174,34.00843908709],[130.84973393796,34.00825355239],[130.85040538979,34.14154830158],[130.88308271245,34.19191941659],[130.85801517726,34.27518795053],[130.83227619023,34.36705766644],[130.97126672018,34.45052182824],[131.08608498405,34.43335569762],[131.19306964318,34.44166233028],[131.29356360122,34.44092399637],[131.36518513035,34.44590762363],[131.37548072516,34.53279638609],[131.44934042706,34.55012640416],[131.57445428574,34.69176511221],[131.62526080796,34.69158108366],[131.78596161393,34.70078201028],[131.86989309337,34.77435258434],[131.99545458661,34.88146431036],[132.37594396006,35.16738931144],[132.74971881516,35.16684041595],[132.75083790155,35.08318208103],[132.62550022559,35.08336523463],[132.62505259103,34.91670902007],[132.3754963255,34.91689254667],[132.37527250822,34.83426413383],[132.12482097358,34.83297814707],[132.12482097358,34.75008153683],[132.00037856673,34.74989763802],[132.00037856673,34.58330147349],[131.74988882507,34.58325955431],[131.75139258551,34.37954004577],[131.75147145222,34.16709508493],[132.1249714605,34.16683319036],[132.12481319779,34.29140309717],[132.25015726837,34.2919261113],[132.24929244561,34.40917062589],[132.25015726837,34.49982698087],[132.37249434735,34.49995740949],[132.3750265508,34.58338985226],[132.49166617203,34.58338985226],[132.49182443475,34.70831000696],[132.5917673395,34.70824495609],[132.583645893,34.54169650488],[132.84148339783,34.54132778131],[132.84193103239,34.66623144063],[133.08342987589,34.6667836941],[133.08365369317,34.76631318897],[133.20742464818,34.76686477448],[133.20787228274,34.6667836941],[133.49973001391,34.66641552553],[133.50025571797,34.8331395492],[133.70119922927,34.83356799396],[133.69940869105,34.87526017127],[133.74983602012,34.87534786088],[133.74983602012,34.99989818945],[133.87510525467,35.00002651459],[133.8751800907,35.12503588695],[133.97425255052,35.12516532967],[133.9754594883,35.00097401217],[134.05849569863,34.99996564586],[134.05815997271,35.07464276466],[134.1665417497,35.07479659134],[134.16670001242,35.00015747182],[134.75337989831,35.00015747182],[134.83323920816,34.99996564586],[134.83330256958,35.0417616416],[135.24494389227,35.0417616416],[135.37471917085,35.04153400419],[135.37535236974,35.08360365372],[135.74948542889,35.08334463604],[135.75065867443,35.25004440859],[135.87473664328,35.25030289585],[135.87529529182,35.33387895394],[136.00001530733,35.33355930519],[136.00023897658,35.25870328334],[135.98330486603,35.24254791937],[135.9336103734,35.20027026349],[135.9330564539,35.16670397648],[135.97539173026,35.16663928817],[135.97523346755,35.15596501278],[136.0499334692,35.15829406507],[136.0499334692,35.21662799307],[136.05895444398,35.22483794301],[136.1245543395,35.23343487427],[136.1253593779,35.25011086017],[136.16666646077,35.24997008399],[136.1665076839,35.36441083833],[136.16664223225,35.45872455467],[136.33347484862,35.45857056019],[136.37478141734,35.33381752591],[136.49980896248,35.33355930519],[136.49965069977,35.4998113591],[136.74991342685,35.58365155619],[137.00002635272,35.5834383487],[136.99984479591,35.41254039886],[136.99998795175,35.33351312428],[137.24995039069,35.33357309177],[137.24997782689,34.91665530206],[137.62489494541,34.91657467133],[137.62516041866,35.00034095028],[137.69185796765,35.00052428969],[137.69181631169,35.06711204141],[137.74199303804,35.06668296826],[137.74221685532,35.10789050033],[137.77489417798,35.10843979343],[137.77474061337,35.15014636155],[138.16670692831,35.15020646479],[138.16666358591,35.29179470828],[138.38224433204,35.29138366775],[138.50029334835,35.29186849141],[138.50118861747,35.33332714595],[138.38256545986,35.33369232599],[138.38318595523,35.44169203388],[138.4998457138,35.44207774821],[138.49987755423,35.45840012079],[138.66643551377,35.45854467099],[138.66703722084,35.37476454466],[138.70817743621,35.37518719503],[138.70817743621,35.33347612855],[138.83340320354,35.33356742355],[138.8332912949,35.40832417574],[139.00819983923,35.40835556961],[139.00858238783,35.39191741773],[139.12429592082,35.39228233285],[139.12498392646,35.41668118537],[139.25000882531,35.41666699526],[139.24995278822,35.499962055],[139.12486987404,35.5000453935],[139.12491651073,35.5833023905],[138.99999141008,35.58333303234],[138.99998633341,35.66670418293],[139.12490105769,35.66678039976],[139.12504409647,35.80919511674],[139.12474355537,35.91713094137],[139.0005249658,35.91713094137],[139.00006382179,36.00001114722],[139.12491952742,36.00011588408],[139.12546551965,36.11894450158],[139.12494599875,36.16663614917],[139.0000003755,36.16668304052],[138.99940587941,36.25031012004],[138.95831284301,36.25001879847],[138.95822350017,36.29127185972],[138.91662765915,36.29166053471],[138.91677782747,36.37496285354],[138.95844731745,36.3756537684],[138.95836333416,36.45831554129],[139.08378499341,36.45868415516],[139.0833357061,36.50000376413],[139.25009029129,36.50011694838],[139.24960263537,36.5413608278],[139.37464470438,36.54189275708],[139.37505257232,36.62499503085],[139.45021835267,36.62527716826],[139.44999392176,36.66666708159],[139.66374110632,36.66671170008],[139.75001859084,36.66664589731],[139.75004599077,36.75002620205],[139.99999620829,36.75001150284],[139.99998367293,36.62208934319],[140.00001444624,36.41668110102],[140.2500103038,36.41666403038],[140.24998851514,36.04158216628],[140.50004360543,36.04158216628],[140.49988534272,35.83348536422],[140.416322629,35.83374197787],[140.41679741714,35.79190299604],[140.45873703672,35.79113274684],[140.45873703672,35.72460642843],[140.51666119055,35.72486339376],[140.51690846747,35.74169858434],[140.59143962121,35.74174400013],[140.59149557553,35.94177546708],[140.65002379386,35.94163956278],[140.64994381468,36.00836984944],[140.67502845507,36.00833784352],[140.71403082982,35.92325558937],[140.77327157686,35.83876818944],[140.81532256277,35.78508229698],[140.89133133484,35.75009670348],[140.89211469532,35.71716690908],[140.8663235896,35.6785248785],[140.80694077842,35.7062158349],[140.72766898741,35.67610146243],[140.68235052625,35.68891011377],[140.60194222212,35.63073538836],[140.48544962602,35.54408743348],[140.40950523435,35.42896763831],[140.40816233068,35.3335295184],[140.30722073807,35.33371210817],[140.30766837263,35.41747724976],[140.30945891086,35.45850682455],[140.20762204914,35.45905374428],[140.20829350098,35.37478431679],[140.12503347337,35.37478431679],[140.12436202154,35.33407728648],[140.29155352858,35.33316433763],[140.29244879769,35.20909014172],[140.31706869833,35.20835865572],[140.31662106377,35.18421592115],[140.35041747282,35.18256956434],[140.34310135616,35.13152190767],[140.23200719745,35.10095957841],[140.13696628673,35.09270694653],[140.05542146946,35.03642731857],[139.98865132292,34.98848930387],[139.96379009814,34.91687909212],[139.91222081475,34.88262382284],[139.82272040556,34.89217945025],[139.78336863834,34.93633065362],[139.73961288273,34.95321599339],[139.74430099941,34.99302832951],[139.81476481363,35.00932019408],[139.79629647522,35.05282683517],[139.8016949126,35.09107956841],[139.80766160655,35.15289710038],[139.80865605554,35.19667547459],[139.85152875904,35.24126900084],[139.83250429037,35.29188828382],[139.74927324436,35.29610514399],[139.76149076054,35.33517067988],[139.79231867926,35.35266869932],[139.8103463798,35.49933327017],[140.00350069115,35.49987991221],[140.03349220647,35.53667858328],[140.06639334641,35.58383634986],[139.79714116037,35.58310825556],[139.80005078499,35.500790974],[139.77086699388,35.47342895212],[139.70992147714,35.44206953063],[139.69869840996,35.40282411886],[139.66886494023,35.36715094731],[139.68477612408,35.30781519278],[139.73549302263,35.27279594595],[139.75069388578,35.25934081802],[139.73733985647,35.23091531763],[139.74387480698,35.20851596895],[139.6971357044,35.18970967156],[139.67426337761,35.17020224599],[139.68932217661,35.1539424821],[139.68150864883,35.13477501648],[139.62354647906,35.12199419853],[139.59783286944,35.1285010474],[139.60223685783,35.17252480405],[139.58362645528,35.18959356978],[139.59033399503,35.24163459636],[139.54959925035,35.28403249053],[139.49879272813,35.300839305],[139.42314248799,35.30942404814],[139.29131411095,35.300656641],[139.2307391276,35.277783055],[139.1554570229,35.23541924836],[139.1503092255,35.17506907239],[139.16664788683,35.13316335499],[139.12501787303,35.13298031326],[139.09435490587,35.13334639631],[139.05832032403,35.13316335499],[139.05671055416,35.00443297532],[139.03347660612,34.98384794205],[138.99968019707,34.98366456528],[139.00057546618,34.88274513664],[139.14135653436,34.88347954423],[139.11002211537,34.84601639101],[139.08128765066,34.79528991251],[139.01691412751,34.74106560358],[138.99990401434,34.64150571261],[138.90043999843,34.60970494227],[138.87367106927,34.59158875439],[138.80025900192,34.59987962655],[138.75773371901,34.65881306843],[138.72528021362,34.6757486834],[138.72528021362,34.7250631297],[138.83316014186,34.72598289603],[138.8338315937,34.74952542934],[138.74189641642,34.75106296366],[138.73379876035,34.81360389397],[138.74985200835,34.90056884096],[138.76064888311,34.93772819302],[138.75027820078,34.9831352578],[138.77854896495,35.04352254895],[138.8754616075,35.03316137513],[138.87702832845,35.04928719612],[138.85845149433,35.04983688392],[138.76803621848,35.12106460626],[138.68293979767,35.12222659494],[138.61872680568,35.09014962348],[138.55408762126,35.05201275244],[138.54925744044,34.99442490215],[138.49996118332,34.95391462218],[138.39142417915,34.91128737102],[138.35562401547,34.86758894052],[138.33928663919,34.8004229037],[138.27635222447,34.72246037223],[138.2446719209,34.6661602616],[138.24396160019,34.58503020853],[138.12661661925,34.58573196098],[138.01467007568,34.62560515076],[137.88184010331,34.65540983045],[137.79532304108,34.63717765139],[137.68991144803,34.65307259566],[137.57654426305,34.66440756907],[137.38134813252,34.64617736905],[137.18402103987,34.58409452939],[137.03187034424,34.56619763851],[137.0079402155,34.57572764727],[137.02539796322,34.61791841962],[137.05989989736,34.66612578938],[137.17516579579,34.66686212746],[137.30766562466,34.75995609746],[137.2989367508,34.77595181262],[137.29087932877,34.79231203731],[137.25036840137,34.79212823259],[137.21634817503,34.76767855388],[137.15815568262,34.7491066647],[137.08317689433,34.75076175505],[137.03214655483,34.76344967914],[136.94060528792,34.80848524854],[136.9345622214,34.77521644543],[136.98335438811,34.72574796503],[137.06750968483,34.74211813979],[137.06773350211,34.70183064704],[137.02453676736,34.70808661352],[137.0158078935,34.64937233008],[136.98178766716,34.65029293775],[136.82601084133,34.7491066647],[136.84884020373,34.82318541413],[136.79266206683,34.82520648177],[136.79131916316,35.00048270019],[136.75080823575,35.00011602077],[136.74991296664,34.95848723128],[136.68276778309,34.96068840187],[136.66240041074,34.89701402804],[136.59077888162,34.80003146575],[136.53862945573,34.72703562436],[136.58294527687,34.62506459048],[136.75681722902,34.54181211493],[136.85798263891,34.54125902973],[136.93945212828,34.54347134846],[136.91675500542,34.49230962828],[136.94081093816,34.46686985603],[136.94112746359,34.40865537918],[136.92404366078,34.35875805984],[136.90742215622,34.30209423566],[136.90045394573,34.2666041617],[136.84980987681,34.23416136223],[136.81692729803,34.19229471408],[136.79948233333,34.19254302385],[136.79995712147,34.22905833234],[136.74203296764,34.25862543953],[136.73325151864,34.28284564349],[136.70895606013,34.28334393778],[136.64264398239,34.2590178534],[136.5593977941,34.22604870821],[136.5356402977,34.22166690394],[136.5006823267,34.20864312064],[136.44006770671,34.200528009],[136.38325139189,34.16675028516],[136.33339863654,34.14802269893],[136.31583147514,34.08486836388],[136.26740308423,34.08316437817],[136.1249666404,34.08342653205],[136.12449185225,34.16688123268],[136.24967766011,34.16688123268],[136.24983592283,34.25012268958],[136.37486346797,34.25025350763],[136.37468162529,34.33330513437],[136.50020753855,34.33302050702],[136.4997327504,34.49191830593],[136.45842618169,34.49126609792],[136.45810965626,34.54160154926],[136.41680308755,34.54186227551],[136.41664482483,34.62516333605],[136.37494259933,34.62464240515],[136.37469162846,34.68105692884],[136.37484989118,34.7497447187],[136.33401811061,34.75026486297],[136.33354332247,34.79108596488],[136.37484989118,34.79212572916],[136.37532467932,34.95857844776],[136.33322679703,34.95857844776],[136.33322679703,34.83344573936],[136.29239501647,34.83370554806],[136.29207849104,34.79199575934],[136.24966408332,34.79212572916],[136.24998060875,34.70838276897],[136.29192022832,34.70851287043],[136.29160370289,34.62475029374],[136.12486701259,34.62512439789],[136.12497892122,34.66673782096],[136.04160698498,34.66655373678],[136.04093553315,34.74990198184],[136.00022657751,34.75008885941],[135.99991005208,34.65992481342],[135.99975178937,34.58386615691],[136.04153314623,34.58373585971],[136.04184967166,34.50017333586],[136.04989090487,34.49997451266],[136.05004683818,34.42503184751],[135.91674069587,34.42499960904],[135.91667174711,34.3583549028],[135.81664583435,34.35836843202],[135.81660626868,34.31668083709],[135.74990639027,34.31672404905],[135.75007425323,34.29167201943],[135.64152287316,34.29176447608],[135.64185859908,34.27512064005],[135.53325126468,34.27488945246],[135.53347508196,34.25833476838],[135.47500281795,34.25833476838],[135.47511472659,34.22498430095],[135.3750684031,34.22512309587],[135.37490054014,34.20814215322],[135.50001439883,34.20837352421],[135.50001496403,33.66651585925],[135.87502081416,33.66660899832],[135.87558035736,33.74983496912],[136.03370726462,33.75020716356],[136.01271963798,33.7106163609],[135.99680845412,33.67326455076],[135.97947662885,33.63388574463],[135.97194722934,33.61271071376],[135.95830907175,33.56797763328],[135.85332367113,33.50521760186],[135.85353435543,33.48302294456],[135.87591186964,33.4814042424],[135.86056894235,33.44051530172],[135.77717729124,33.42557714245],[135.74180331999,33.42534000808],[135.74162571618,33.46650066265],[135.68497766335,33.47915288954],[135.59007881678,33.49633278594],[135.47372828483,33.52819542819],[135.39019456958,33.57519803318],[135.37485307229,33.61633320131],[135.37532786043,33.6496709874],[135.33370476629,33.6498027317],[135.32468379151,33.6665326188],[135.45794099786,33.66666433728],[135.458415786,33.74987006025],[135.41726748001,33.75000165098],[135.41663442914,33.78802291019],[135.41742574272,33.83273219751],[135.37516959772,33.83325805005],[135.37516959772,33.79170573426],[135.32839666799,33.78999406158],[135.2877663235,33.75622027208],[135.21502948301,33.7698022424],[135.14371328394,33.85113086379],[135.12013063644,33.87826253319],[135.05776447828,33.87991374771],[135.05946924798,33.9647902581],[135.07708520154,34.00837444738],[135.11345362178,34.05028840011],[135.06515181365,34.06758952518],[135.07040818688,34.12100062861],[135.15522047941,34.16285887994],[135.11629490461,34.18742330292],[135.06316291566,34.25849051928],[135.04914840404,34.27082115018],[134.99554038427,34.27152278701],[134.99549734353,34.29122128464],[134.99945391142,34.29893542959],[135.00903647772,34.30356652855],[135.14570218192,34.34721085328],[135.20804417028,34.35108537099],[135.24173754163,34.39165309027],[135.19144683551,34.42482281178],[135.25011932598,34.46055636895],[135.29486953058,34.42658055716],[135.30901578269,34.44119295496],[135.36646514837,34.53276800379],[135.3914706574,34.53394138996],[135.38308273349,34.63127477246],[135.36409120764,34.66668779015],[135.291606884,34.66694812396],[135.29060760633,34.6244999083],[135.08349141328,34.62463314776],[135.04724925146,34.61642805384],[134.92905436601,34.64799421584],[134.82599797536,34.69662081511],[134.75873632133,34.74267049508],[134.71632191361,34.74982280423],[134.52561534158,34.74969276777],[134.41657233069,34.70885119699],[134.31670855729,34.66668779015],[134.25055474226,34.66655762294],[134.2499216914,34.68308722232],[134.15797105376,34.68347764541],[134.15781279105,34.70013398221],[134.12505240897,34.70000386757],[134.12473588354,34.58386016201],[134.11666448505,34.55844834256],[134.02518863556,34.55023671031],[134.02534689828,34.44784922942],[134.02787910173,34.41639040184],[134.19168101214,34.41678207828],[134.19152274942,34.384005473],[134.28347338706,34.38296058922],[134.28347338706,34.3337056584],[134.38082361091,34.29414536452],[134.40952056751,34.2653854985],[134.43267702258,34.2464808009],[134.56264881698,34.25054688274],[134.66662742098,34.24963115535],[134.64146364924,34.04963379725],[134.70809225241,33.96553844571],[134.74006132092,33.92825273835],[134.71220589784,33.86773427325],[134.76918166054,33.86690588331],[134.76712424524,33.82523844726],[134.66741873456,33.77539488227],[134.63101831002,33.77486867404],[134.50018139848,33.77493445024],[134.49977915313,33.95855429751],[134.45819679633,33.95873690431],[134.45816038671,34.00005912476],[134.34679273601,33.99888814689],[134.06046787607,33.99987486057],[133.7495472142,34.00047441762],[133.74998010726,34.33336494732],[133.87500134644,34.33342236401],[133.87493968566,34.41668102516],[133.95888054127,34.41683206237],[133.95843290671,34.44156982725],[133.85055297847,34.44156982725],[133.84965770936,34.46620800554],[133.82537353464,34.46703837928],[133.8164208435,34.44221586478],[133.84204792189,34.43326318539],[133.84193601325,34.41655510566],[133.75822337954,34.41714986703],[133.74121823792,34.44175440991],[133.69130201327,34.44151837272],[133.69085437871,34.45739100084],[133.6909712589,34.46639253375],[133.70003585868,34.48345962918],[133.6165520138,34.48355187426],[133.61688773972,34.45827290653],[133.53351083192,34.45886737103],[133.53328701464,34.41751913981],[133.48969726525,34.4174334909],[133.46642026828,34.4331260929],[133.46630835964,34.4499231427],[133.45030542423,34.45001542485],[133.45008160695,34.41660262399],[133.4171258471,34.41696523002],[133.41667821254,34.3578604567],[133.34174039879,34.3582984738],[133.30304516488,34.37515059623],[133.27479527019,34.35875574666],[133.21655459093,34.35000180434],[133.16693922966,34.35006713566],[133.16662270423,34.36659432201],[133.09184357121,34.36659432201],[133.09176443985,34.34170431373],[133.05837100691,34.3416389759],[133.05829187555,34.324910817],[132.90002916018,34.32517222013],[132.89148297355,34.29164062433],[132.7916983315,34.29164062433],[132.79133273641,34.2828112475],[132.79200418825,34.24211616348],[132.77492248367,34.22512613438],[132.71628614763,34.22499527728],[132.7165235417,34.21655456516],[132.75854229263,34.21635825947],[132.77500161503,34.20876742193],[132.79218102205,34.20095164949],[132.79222800552,34.14177431504],[132.74137601204,34.14173084641],[132.70837823589,34.16654912614],[132.63353752486,34.16665159095],[132.61663932033,34.1916945672],[132.59185155674,34.19160200057],[132.57489739789,34.16660529391],[132.5415486234,34.16674418496],[132.54177647088,34.14195955751],[132.42514951077,34.14165344298],[132.42503081374,34.16656995645],[132.37490109864,34.16663543037],[132.37514741069,34.18347600104],[132.40832832223,34.18342971323],[132.37520336501,34.21679663244],[132.34991201254,34.23331322775],[132.35013582982,34.25833640424],[132.35813729752,34.25842889756],[132.35819325184,34.27502980063],[132.33922473749,34.25833640424],[132.29166356581,34.22493967243],[132.24992164337,34.22493967243],[132.25003355201,34.20430293896],[132.25809097403,34.18324456173],[132.28327041786,34.18352228883],[132.28321446354,34.19995284807],[132.29183142877,34.20837516104],[132.3250123403,34.20846770925],[132.31684010599,34.17529658532],[132.25842669995,34.17532895502],[132.25842669995,34.14171407625],[132.25020141497,34.1167489215],[132.21668477751,34.11684157021],[132.21685264047,34.05849913457],[132.22491006249,34.05826735294],[132.22502197113,33.99162705239],[132.21668477751,33.99176623069],[132.21651691455,33.97515601055],[132.25036637427,33.97526276959],[132.25014255699,33.9162192778],[131.95761337399,33.91733368499],[131.95783049468,33.92511686386],[131.91755008114,33.92494841068],[131.91586475496,33.95863206817],[131.88699232603,33.96670716623],[131.87568955347,33.95891053259],[131.84972674916,33.92502400564],[131.80049364448,33.92439125871],[131.79947977014,33.9504633731],[131.77520229201,33.95057346177],[131.75057569479,33.96679997899],[131.70828092574,33.97507716244],[131.70917619485,33.92550555901],[131.68366102511,33.9251341272],[131.68320669396,33.95055620359],[131.6915998419,33.96717122903],[131.69988108121,33.98322624237],[131.6833186026,33.99937100092],[131.68354241987,34.01681131495],[131.69999298984,34.01699683095],[131.70010489848,34.03313517088],[131.68209430416,34.03352337245],[131.67514927193,34.02580837394],[131.62512611019,34.02488088618],[131.59121779249,33.97515271288],[131.38720834314,33.97496710548],[131.29980769588,33.91685208542],[131.16674832381,33.91666635086],[131.11720281055,33.97472960748],[131.06077753904,34.02461988102],[131.03349514839,34.02557101805],[131.04197688764,34.00847992179],[131.04175307036,33.73809881635]],[[135.98582632111,35.86595341956],[135.93904778695,35.95516536708],[135.95723199707,36.13160407318],[136.15271225588,36.29665593207],[136.65959711303,36.75694522796],[136.6584605999,37.00603068828],[136.66641619183,37.33477034922],[136.85166783245,37.42327563113],[137.11306585295,37.5288032506],[137.31877472996,37.54953046686],[137.39151157045,37.50356234188],[137.34765373317,37.35791049463],[137.20218005219,37.24761852662],[137.09307479146,37.06827606619],[137.02229600951,36.83794593283],[137.09531697828,36.8013261482],[137.22970965621,36.77367912166],[137.35387371595,36.80451117283],[137.39706121499,36.90965623709],[137.50588234744,36.95882577339],[137.72267222749,37.01579092308],[137.95199404056,37.10655492798],[138.05300164523,37.1697489731],[138.18625781003,37.18253990533],[138.28854399196,37.24861072926],[138.43501212193,37.34512377596],[138.54908962762,37.41229325092],[138.61841692871,37.49225359136],[138.73902938491,37.515357361],[138.78377958951,37.56739915068],[138.82185277945,37.62795613472],[138.91490479219,37.63009386317],[138.92399689725,37.60319901211],[139.01321317816,37.59757124385],[139.01420762715,37.53507443387],[139.0345227994,37.52324481549],[139.03793233879,37.45797923094],[139.04887127769,37.4235763325],[139.13027403082,37.42312504187],[139.23881103499,37.43260157377],[139.26281987491,37.33326409528],[139.12288669546,37.32784190325],[139.11407871868,37.26353652688],[139.11422078282,37.16748486574],[139.05554829235,37.1665792038],[138.82824566582,37.1713338079],[138.87072284415,37.23379508225],[138.8910380164,37.31315483479],[138.72965315157,37.33258634267],[138.71402609599,37.2947354553],[138.71715150711,37.16420178957],[138.53516734175,37.16533390091],[138.39906989411,37.1669188283],[138.3747769259,37.13260904733],[138.37250389964,36.99907203744],[138.08823355234,36.99839128128],[138.08596052607,36.91586122976],[137.8923271011,36.91767853447],[137.8779786228,36.83517474846],[137.66516653872,36.83210470722],[137.52111349915,36.8314224591],[137.51216345824,36.74222304782],[137.39481847729,36.74427215795],[137.37137789393,36.58325068345],[137.29366880849,36.58370698743],[137.18015955937,36.55027558459],[137.21382876092,36.531328506],[137.26383533876,36.3317607158],[136.63321261429,36.33496516228],[136.50436043787,36.29226654145],[136.39411866401,36.29444210346],[136.38033844228,36.25492902836],[136.37778128773,36.17664562948],[136.38218527612,36.09506978245],[136.3875837135,36.00065282008],[136.25929979365,35.99398651985],[136.25532199769,35.90922947902],[136.24992356031,35.83336568294],[136.12206583289,35.8287585623],[136.11183721469,35.88724911714],[136.05984173887,35.91164579558],[136.01793281711,35.86675930692],[135.98582632111,35.86595341956]],[[140.03280760425,37.29985864131],[140.03344065511,37.34642500576],[140.03344065511,37.47427085093],[140.03407370597,37.48281126528],[139.99973069674,37.48356478439],[140.0003637476,37.44198429399],[139.94212306834,37.44173298208],[139.94196480562,37.35007358234],[139.89116247399,37.35007358234],[139.89116247399,37.41697462302],[139.81725378591,37.4164718304],[139.81266416716,37.57468448903],[139.74192073339,37.5755625118],[139.74223725882,37.79174164901],[139.81788683677,37.79161658285],[139.98295484891,37.79111631608],[139.98358789977,37.58333883296],[140.04119552816,37.58333883296],[140.04151205359,37.47502445617],[140.15910125112,37.47527565622],[140.15815167483,37.63311311956],[140.37449680674,37.63399045296],[140.37481333217,37.83337690748],[140.49999914004,37.83525181691],[140.49988467877,37.91662259569],[140.53144291504,37.91679916623],[140.62489389965,37.91669692162],[140.62489324665,37.84641146353],[140.62534321061,37.33359067275],[140.57501566712,37.33283564369],[140.57485740441,37.25880599139],[140.45790125775,37.25855406554],[140.45774299503,37.208404057],[140.25010231246,37.20865615048],[140.24994404974,37.29998453523],[140.03280760425,37.29985864131]],[[141.00075354845,38.16707524992],[140.84263615887,38.16752201876],[140.68778995522,38.16405244519],[140.7078808588,38.09498964653],[140.70868449494,38.03345773695],[140.6162663385,38.033615983],[140.53369272481,38.11364462215],[140.5359027242,38.14477833039],[140.61948088307,38.14477833039],[140.624704518,38.20479567961],[140.62309724571,38.27375450928],[140.63073178907,38.33902357935],[140.81255446642,38.33697496075],[141.00361895942,38.33398072166],[141.00075354845,38.16707524992]],[[129.44454248239,34.73674858595],[129.5252349148,34.65451904132],[129.35703097117,34.19045888777],[129.23087801345,34.06062615384],[129.15132209417,34.11615874979],[129.27179248623,34.63488400992],[129.44454248239,34.73674858595]]],"terms_url":"http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html","terms_text":"GSI Japan"},{"id":"Aargau-AGIS-2014","name":"Kanton Aargau 25cm (AGIS 2014)","type":"tms","template":"https://mapproxy.osm.ch/tiles/AGIS2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2014-01-01T00:00:00.000Z","startDate":"2014-01-01T00:00:00.000Z","scaleExtent":[8,19],"polygon":[[[8.0960155,47.5788226],[8.1032285,47.5787939],[8.1032285,47.5858264],[8.1059094,47.5873189],[8.1101861,47.5887827],[8.1158884,47.5892993],[8.1216758,47.5891558],[8.1254631,47.5887253],[8.1295909,47.5888831],[8.1302292,47.5912222],[8.1319952,47.5935755],[8.1350591,47.5954552],[8.1383145,47.5969761],[8.1416125,47.5993865],[8.145336,47.6007638],[8.1496127,47.6014381],[8.1543788,47.601266],[8.1575065,47.6006347],[8.1611874,47.5991426],[8.1625492,47.5997595],[8.164379,47.6014812],[8.166528,47.6039918],[8.1708685,47.6067319],[8.1760814,47.6083815],[8.1791241,47.6086828],[8.1815284,47.6117955],[8.1830391,47.6148937],[8.1849753,47.6176045],[8.1895286,47.6215055],[8.1921244,47.6232121],[8.2226146,47.622997],[8.2256146,47.6212043],[8.2284871,47.618422],[8.2295935,47.6162133],[8.2300828,47.6150085],[8.2326148,47.6168587],[8.2365724,47.6180348],[8.239998,47.6183503],[8.2435087,47.617834],[8.2474876,47.6187662],[8.2506578,47.6198849],[8.2570835,47.6208028],[8.2610411,47.620688],[8.2649135,47.6193543],[8.2673179,47.6176906],[8.26902,47.6153097],[8.2757862,47.6170165],[8.2810629,47.6170739],[8.2877226,47.6162563],[8.2942122,47.6144204],[8.2994676,47.6122115],[8.303106,47.609773],[8.302872,47.5944651],[8.3043826,47.5922697],[8.3059146,47.591093],[8.3079147,47.590189],[8.3123616,47.5891702],[8.3165532,47.5871324],[8.3204894,47.5843626],[8.325979,47.57888],[8.3286386,47.5771577],[8.3321919,47.5760381],[8.3390218,47.5757653],[8.3470221,47.5762821],[8.3596181,47.5755213],[8.3647459,47.5743586],[8.3720653,47.5737701],[8.3800229,47.5723347],[8.3819379,47.5749615],[8.3838741,47.5768562],[8.3887891,47.5802723],[8.3923211,47.5817362],[8.3961084,47.5824682],[8.4001298,47.5825543],[8.4043214,47.5815783],[8.4115769,47.5792819],[8.4180026,47.5760237],[8.4238113,47.5745165],[8.4303859,47.5722772],[8.4327477,47.5703537],[8.4335988,47.5684874],[8.4335349,47.5666929],[8.4318966,47.5644389],[8.4285986,47.5621705],[8.4257475,47.5612085],[8.4258964,47.5585379],[8.4249815,47.5562404],[8.4235347,47.5546896],[8.4229602,47.5536988],[8.4245985,47.5517027],[8.4249177,47.5498071],[8.4243432,47.5483566],[8.4253858,47.5467912],[8.4250028,47.5441773],[8.4233006,47.5421952],[8.4210027,47.5410605],[8.4183218,47.540486],[8.4155132,47.5406153],[8.4138961,47.5392364],[8.4128323,47.5371966],[8.4119386,47.5362629],[8.4124067,47.5341513],[8.4118535,47.53237],[8.4111727,47.5315798],[8.4014277,47.5316948],[8.4012362,47.5244251],[8.3993638,47.522198],[8.3966616,47.5208186],[8.3938531,47.5198846],[8.390853,47.5197266],[8.3887678,47.5201433],[8.3880869,47.5145965],[8.3855124,47.510745],[8.3836613,47.5094372],[8.3677559,47.5095329],[8.3673948,47.4870891],[8.375098,47.4868858],[8.3788894,47.4852997],[8.3819586,47.4818834],[8.3818382,47.4752129],[8.3832826,47.4719179],[8.3824401,47.4687855],[8.379431,47.4664259],[8.3775052,47.4658971],[8.3778663,47.4649613],[8.3823799,47.464229],[8.3867129,47.4609741],[8.3917079,47.4574341],[8.3931522,47.453487],[8.3951382,47.4503128],[8.3941753,47.4472198],[8.3917079,47.4453476],[8.3896016,47.4444929],[8.3899627,47.443394],[8.3911061,47.4416031],[8.3921292,47.4392423],[8.393393,47.4359044],[8.3924903,47.4341132],[8.3936939,47.4314264],[8.3956798,47.4285359],[8.3995916,47.4246273],[8.3995314,47.4195375],[8.4490001,47.4189675],[8.4536942,47.4123296],[8.4536942,47.4045098],[8.4485788,47.3964851],[8.4036237,47.3968517],[8.4048273,47.3939185],[8.4029015,47.3890295],[8.4035034,47.3855255],[8.4031423,47.3830399],[8.4048273,47.3790464],[8.4084382,47.3757455],[8.4137943,47.3733817],[8.4159006,47.3701619],[8.4158404,47.365393],[8.4143961,47.3632734],[8.4149377,47.3591153],[8.4172246,47.3557316],[8.4163219,47.3523069],[8.4135536,47.3491266],[8.4136739,47.346884],[8.4147572,47.3448043],[8.4188495,47.3424392],[8.4226409,47.3405225],[8.424687,47.3371784],[8.4242056,47.3316315],[8.4291404,47.3328551],[8.4350983,47.331917],[8.4376259,47.3328143],[8.4432829,47.3350576],[8.4452689,47.3374638],[8.4521295,47.3401963],[8.457606,47.3397477],[8.4621195,47.336485],[8.4627815,47.3332222],[8.4604345,47.3282868],[8.457967,47.3245748],[8.4555598,47.3200465],[8.4491806,47.3149467],[8.4471345,47.3121721],[8.4402137,47.3094791],[8.4362417,47.2981749],[8.4331123,47.2959301],[8.4280571,47.2939709],[8.4231825,47.2900116],[8.4165626,47.2878889],[8.4102436,47.2872766],[8.4035034,47.2840923],[8.4018785,47.2804997],[8.4086187,47.2759268],[8.4106649,47.2715986],[8.4089196,47.2661265],[8.4123499,47.2617975],[8.4123499,47.2587342],[8.4110861,47.2560793],[8.4169839,47.2514226],[8.4188495,47.2475009],[8.4180069,47.2430478],[8.4143961,47.2390437],[8.4137341,47.2356523],[8.4106047,47.2322607],[8.4043459,47.2279697],[8.4029617,47.2255993],[8.4039848,47.221267],[8.4085586,47.2171795],[8.4092807,47.2132553],[8.4084382,47.2094534],[8.4101233,47.2025847],[8.4131925,47.1967784],[8.412711,47.1924028],[8.4087993,47.1879859],[8.4081373,47.1847548],[8.4091002,47.1811963],[8.4151784,47.1791511],[8.4191504,47.1756331],[8.4229418,47.1655278],[8.4229418,47.1574668],[8.4201133,47.1532516],[8.4224603,47.1483813],[8.4227612,47.1439198],[8.4205345,47.1395399],[8.4158404,47.1352414],[8.4089798,47.1327441],[8.4038644,47.1320071],[8.4011563,47.1325803],[8.3953188,47.1327031],[8.3843658,47.1345045],[8.3789496,47.1338495],[8.37245,47.1344226],[8.3690799,47.1365924],[8.3679966,47.1387621],[8.3565623,47.1422825],[8.3540949,47.145639],[8.3533125,47.149159],[8.3506044,47.1516146],[8.3503035,47.1541929],[8.3477157,47.1566893],[8.3456094,47.1592264],[8.3408551,47.1616407],[8.3393506,47.1651187],[8.3373044,47.1689647],[8.3331519,47.1715421],[8.3326103,47.1735058],[8.3306243,47.1779239],[8.3300225,47.187168],[8.3292402,47.1878632],[8.3293605,47.1949382],[8.3229212,47.1951427],[8.3214768,47.1985367],[8.3219583,47.2011537],[8.3183474,47.2104345],[8.3141348,47.2117836],[8.310885,47.2152992],[8.3110656,47.2185693],[8.312209,47.2197955],[8.3088389,47.2243324],[8.3093203,47.2264576],[8.3071538,47.2304217],[8.3072742,47.2320972],[8.3059502,47.2358158],[8.3060705,47.2394932],[8.3037837,47.2436606],[8.3014366,47.2467656],[8.2955389,47.2483588],[8.2918679,47.2529341],[8.2881366,47.2586934],[8.2876552,47.2614299],[8.286271,47.2651872],[8.2872339,47.2680459],[8.2883774,47.2696385],[8.2822991,47.2747835],[8.2771837,47.2757635],[8.2727303,47.2753143],[8.2674946,47.2759268],[8.2653281,47.2771925],[8.2615969,47.2769476],[8.2579259,47.277805],[8.2557593,47.2788665],[8.2531716,47.2767842],[8.2503431,47.2754777],[8.2501023,47.2734769],[8.2495607,47.2701693],[8.2455888,47.2671475],[8.2409548,47.2667799],[8.2345155,47.26727],[8.2314463,47.2627776],[8.2309046,47.2593061],[8.2266318,47.249421],[8.2219979,47.2471333],[8.2152576,47.2443143],[8.2136327,47.2420264],[8.2130911,47.2360201],[8.2112255,47.232465],[8.2128504,47.2254767],[8.2111653,47.2226566],[8.2068925,47.2205313],[8.1976246,47.2206539],[8.1914862,47.2186102],[8.1697609,47.218651],[8.1654279,47.2231471],[8.1608541,47.2240463],[8.1535121,47.2294001],[8.1517066,47.2332005],[8.1482161,47.2364695],[8.1479754,47.2410049],[8.1463505,47.2420264],[8.1382261,47.2416587],[8.1355782,47.2394115],[8.1267316,47.2360609],[8.1217967,47.2363061],[8.1161397,47.2387169],[8.1067515,47.2394523],[8.1026592,47.2411275],[8.0998307,47.2443552],[8.0976642,47.2492984],[8.0979651,47.2506873],[8.0933914,47.2556708],[8.0885167,47.2568962],[8.0848457,47.2558342],[8.0832323,47.254053],[8.0799525,47.2524599],[8.0769018,47.2505444],[8.0685367,47.2428435],[8.0632523,47.2409801],[8.0513365,47.2386512],[8.0485681,47.2388555],[8.0357496,47.2374663],[8.0321989,47.2355458],[8.0271437,47.2353415],[8.0113892,47.2396732],[8.0092725,47.2411594],[8.0079059,47.2431192],[8.0078257,47.2482115],[8.0085667,47.2504155],[8.0083965,47.2576942],[8.0071199,47.2592249],[8.0029921,47.261622],[8.000524,47.2648564],[7.9975877,47.2678885],[7.9962685,47.2727106],[7.9947366,47.2736923],[7.9899279,47.2712091],[7.9727786,47.2690724],[7.9685657,47.270083],[7.9673742,47.2709781],[7.958608,47.2711225],[7.9600974,47.2674842],[7.9627357,47.2639612],[7.9657571,47.2617086],[7.9669912,47.2587917],[7.9669486,47.2500111],[7.9596293,47.2458225],[7.9511184,47.2391778],[7.9446927,47.2359996],[7.9373308,47.2310586],[7.9340542,47.2305096],[7.9297987,47.2307697],[7.9177984,47.2330524],[7.9078407,47.2383689],[7.8979256,47.2377043],[7.8694993,47.23207],[7.8547755,47.2271864],[7.8513712,47.2271286],[7.8395836,47.2294693],[7.8358388,47.2297583],[7.8308174,47.2325901],[7.8270727,47.2350461],[7.8243066,47.2383111],[7.8212853,47.2404202],[7.8201363,47.2426447],[7.8182214,47.2456203],[7.8177107,47.2491734],[7.8182214,47.2508199],[7.818349,47.2537084],[7.819881,47.2558747],[7.8211576,47.2567989],[7.8211151,47.2577809],[7.8192001,47.2605823],[7.819115,47.2615354],[7.8168596,47.2648564],[7.8174979,47.267311],[7.8195831,47.2698232],[7.8243917,47.2715845],[7.8280514,47.2721042],[7.8359239,47.2783695],[7.8370729,47.2834216],[7.8400517,47.2872031],[7.8420092,47.2906669],[7.8458817,47.2942747],[7.8476264,47.2981997],[7.8513712,47.3029902],[7.8529031,47.3074052],[7.8557117,47.3103194],[7.860648,47.312541],[7.8642226,47.3134931],[7.8701802,47.3167244],[7.876308,47.317359],[7.8808187,47.3171571],[7.883372,47.3166667],[7.8858827,47.3194073],[7.8888615,47.3213112],[7.888053,47.3244266],[7.8890743,47.3286955],[7.8914999,47.332618],[7.8977979,47.3401449],[7.9000958,47.3415579],[7.9000533,47.3432015],[7.9022235,47.345566],[7.9063513,47.3470365],[7.909628,47.3473536],[7.9135855,47.346258],[7.9161813,47.3445568],[7.9169899,47.3430285],[7.9240113,47.3389915],[7.9383947,47.3379245],[7.9492886,47.337838],[7.95431,47.3359635],[7.9559271,47.333166],[7.9569058,47.3296762],[7.9557143,47.3253496],[7.9699274,47.3279745],[7.9730764,47.3301665],[7.983332,47.3343196],[7.98563,47.3369151],[7.989545,47.338184],[7.9924812,47.3382705],[7.997843,47.3401738],[7.9963536,47.3425672],[7.9960132,47.3458831],[7.9973324,47.3485934],[8.0011623,47.3508134],[8.001375,47.3568964],[8.0026091,47.3577036],[8.0041836,47.3604421],[8.0097582,47.3641893],[8.0112476,47.3659763],[8.0174606,47.369262],[8.0191202,47.3715676],[8.0198011,47.3737578],[8.0202266,47.3759768],[8.021716,47.3783685],[8.0219288,47.3809331],[8.0228224,47.3828636],[8.0207798,47.3885683],[8.0160563,47.3892886],[8.0126519,47.3889717],[8.0077156,47.3901241],[8.003673,47.3920543],[8.0016304,47.394791],[8.0015453,47.399976],[8.0002261,47.4030579],[7.9980133,47.4045268],[7.9926089,47.405506],[7.9877577,47.4063701],[7.9841831,47.4083861],[7.9802681,47.4080981],[7.9732041,47.4112659],[7.9696295,47.4138289],[7.9569484,47.4189256],[7.9552887,47.4218049],[7.9559271,47.4240218],[7.957459,47.4262099],[7.9627357,47.4282827],[7.9774595,47.4325432],[7.9756723,47.4373215],[7.9761403,47.4413798],[7.9743105,47.4436823],[7.9512886,47.451107],[7.9486077,47.4538982],[7.9481822,47.456603],[7.9467779,47.4575525],[7.9403947,47.4566893],[7.935884,47.4573798],[7.9363095,47.4762513],[7.9317988,47.4760499],[7.9246922,47.4771716],[7.9157132,47.4774305],[7.9090322,47.4794725],[7.9031597,47.4796739],[7.902947,47.4896528],[7.8969043,47.4897965],[7.8917977,47.4940521],[7.8908615,47.497646],[7.8877976,47.4993135],[7.8863082,47.5023034],[7.8799925,47.5039706],[7.8740346,47.5078733],[7.8699423,47.5094384],[7.8700627,47.5123855],[7.8643455,47.5124464],[7.8585079,47.515434],[7.8557998,47.5185433],[7.8562512,47.5214695],[7.8548971,47.524741],[7.8518279,47.5284999],[7.8464718,47.5271386],[7.8414768,47.5277685],[7.8413037,47.5240579],[7.8401548,47.5158674],[7.8394313,47.5125909],[7.8368781,47.5125622],[7.836793,47.5104927],[7.8335163,47.5094866],[7.8315588,47.507647],[7.8298141,47.5055198],[7.8252182,47.5035363],[7.8204947,47.5004027],[7.8147498,47.4949114],[7.8118136,47.4926112],[7.8064518,47.4914035],[7.8040262,47.491461],[7.8004942,47.4901383],[7.7797702,47.4902821],[7.7787064,47.4930425],[7.7796,47.4960039],[7.7838554,47.5004027],[7.7820256,47.50368],[7.7808766,47.507302],[7.7810894,47.5101765],[7.7797702,47.5126484],[7.7796851,47.5152926],[7.7704508,47.5180229],[7.7590463,47.5200346],[7.7526631,47.5200921],[7.7478119,47.5195748],[7.7336839,47.5229084],[7.7278114,47.52719],[7.7198538,47.529776],[7.7126195,47.5309541],[7.7076407,47.5344018],[7.705513,47.5391709],[7.7069598,47.5427904],[7.7141515,47.5462661],[7.7224496,47.5475587],[7.7490035,47.5497704],[7.7542802,47.5533892],[7.7665358,47.5561462],[7.7716849,47.5576109],[7.7800681,47.5583575],[7.7857704,47.5598221],[7.790196,47.5616025],[7.7939834,47.5663403],[7.8049198,47.5723697],[7.8061113,47.5798911],[7.8117285,47.5895352],[7.8157712,47.5921756],[7.8221117,47.5935244],[7.8364525,47.5916303],[7.8395164,47.5904536],[7.8430485,47.5877845],[7.8487507,47.5889899],[7.8562403,47.5918886],[7.8648788,47.5939262],[7.871262,47.5942992],[7.8772621,47.5936679],[7.8853474,47.5942418],[7.8934327,47.5930078],[7.9010925,47.5897648],[7.9083267,47.5851439],[7.9138588,47.5792308],[7.9186674,47.571939],[7.9195611,47.5677185],[7.9187525,47.5643304],[7.9156035,47.5600805],[7.9157737,47.5571514],[7.9184121,47.5540498],[7.9212632,47.5526138],[7.9255187,47.5522691],[7.9347104,47.5522117],[7.9404978,47.5507756],[7.9432638,47.5496842],[7.9435617,47.5505171],[7.944583,47.5558878],[7.9484129,47.5597934],[7.9539449,47.5622916],[7.9600302,47.5633254],[7.965775,47.5627224],[7.9720305,47.5612005],[7.9783286,47.5605687],[7.9862437,47.560942],[7.9971801,47.5621194],[8.0044995,47.5613728],[8.0111379,47.5597359],[8.0164147,47.5570078],[8.0204573,47.5557442],[8.0262021,47.5574098],[8.0379897,47.5587596],[8.042543,47.5602815],[8.0485006,47.5633254],[8.0545433,47.5679769],[8.0593094,47.5692115],[8.0622031,47.5689531],[8.0669266,47.5700155],[8.0724161,47.5697283],[8.077395,47.5679482],[8.0818206,47.5643591],[8.085225,47.5628085],[8.0879059,47.5629808],[8.0925868,47.5655938],[8.0939486,47.5680918],[8.0948422,47.5758721],[8.0960155,47.5788226]]],"terms_text":"AGIS OF2014"},{"id":"Aargau-AGIS-2016","name":"Kanton Aargau 25cm (AGIS 2016)","type":"tms","template":"https://mapproxy.osm.ch/tiles/AGIS2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","scaleExtent":[8,19],"polygon":[[[7.7043837,47.5579369],[7.7707561,47.5577157],[7.7710309,47.5802484],[7.8040761,47.5801681],[7.8043315,47.6024837],[7.9371294,47.6021651],[7.9370265,47.5796189],[8.0037358,47.57917],[8.0033818,47.5568746],[8.0363991,47.5566467],[8.0368072,47.5792819],[8.103127,47.5788098],[8.1038729,47.6011151],[8.1701128,47.6008572],[8.1703583,47.6234954],[8.303108,47.6223517],[8.3030479,47.5998751],[8.3361987,47.5992663],[8.3358464,47.5771047],[8.3691264,47.5769423],[8.3694274,47.5993115],[8.4356351,47.5987721],[8.434543,47.5313309],[8.4014436,47.5316154],[8.4009621,47.5092624],[8.3678025,47.5095876],[8.3675016,47.4869812],[8.4004205,47.4866559],[8.3993887,47.4192943],[8.4655766,47.4187047],[8.4651501,47.3964683],[8.4320649,47.3965377],[8.4312466,47.3515984],[8.4643446,47.3512791],[8.4632704,47.2838729],[8.4299736,47.2842069],[8.4271368,47.1267624],[8.3293044,47.1275336],[8.3293709,47.1300747],[8.328335,47.1300747],[8.328496,47.1452909],[8.3293986,47.1950243],[8.2963975,47.19526],[8.2971382,47.2402162],[8.2640997,47.2404639],[8.2644614,47.2629694],[8.2314132,47.2631644],[8.2307496,47.2182208],[8.0988604,47.2191231],[8.09874,47.2413542],[8.0660016,47.2417628],[8.0655202,47.2192048],[7.9999301,47.2195248],[8.0000316,47.2643299],[7.9673499,47.2646187],[7.9667542,47.2196077],[7.8015274,47.2202899],[7.8024434,47.2879109],[7.8351763,47.2877159],[7.8354316,47.3101684],[7.8683686,47.3101684],[7.8688544,47.3554249],[8.0009678,47.3542951],[8.0015636,47.3992779],[7.9353032,47.3997634],[7.9360677,47.467157],[7.9027785,47.4672894],[7.9030284,47.4898126],[7.8698688,47.4899752],[7.869929,47.512499],[7.8368897,47.5125803],[7.8366489,47.4900972],[7.7702695,47.4902599],[7.77045,47.5127429],[7.7045169,47.5130695],[7.7043837,47.5579369]]],"terms_text":"AGIS OF2016","best":true},{"id":"Basel-Landschaft-2015","name":"Kanton Basel-Landschaft 10cm (2015)","type":"tms","template":"https://mapproxy.osm.ch/tiles/KTBASELLANDSCHAFT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[18,21],"polygon":[[[7.370281219482422,47.413684985326796],[7.357578277587891,47.41507892620101],[7.357921600341797,47.41827323486739],[7.353544235229492,47.4196089792119],[7.344875335693359,47.42402250214274],[7.339725494384765,47.42971307765559],[7.332687377929687,47.430235650685475],[7.32685089111328,47.4319194618196],[7.325280543317693,47.43489176778178],[7.33050406703179,47.44175856152086],[7.338990092194756,47.44109169292469],[7.344964876980962,47.43607806019703],[7.352656881264292,47.43435807026775],[7.38119797480828,47.432081698142134],[7.375988960266113,47.414309359238985],[7.378145456314087,47.41399717320828],[7.382040023803711,47.41330745332341],[7.388391494750976,47.41397539271845],[7.413708184603623,47.410929293287566],[7.420743520414262,47.411098781635985],[7.427483310496426,47.41448047082256],[7.438105529405026,47.412739349590474],[7.448396898794484,47.41507114537187],[7.455576414208223,47.42792319548619],[7.45061852232364,47.43534476535272],[7.437842682352891,47.446323188615104],[7.425422575234655,47.443283894442736],[7.420904049355535,47.44594415975335],[7.422417620777747,47.45071647996838],[7.428795928789581,47.45387944195848],[7.430028776685507,47.459491697398036],[7.445765194338128,47.46197276972992],[7.44717015944249,47.456958090215814],[7.456512189239691,47.44925575541638],[7.492356675875099,47.458972279610066],[7.530679075390223,47.46118857622267],[7.527445320030451,47.473906165741866],[7.536326693749955,47.48383279861684],[7.536231113003725,47.49105266753894],[7.532603895549507,47.490968962664795],[7.531789123586811,47.49739885661967],[7.520038351186771,47.49678264400428],[7.512226152318425,47.49891674929323],[7.509348758631863,47.508884893812876],[7.499082452238831,47.51627805213703],[7.497870355425969,47.52124757864722],[7.502278119030558,47.514906577969604],[7.517459288006065,47.51728104695845],[7.522200236749534,47.514091442409054],[7.530955756497733,47.52904526885427],[7.519353655277215,47.53471778813415],[7.510751927105658,47.528989768842564],[7.50229842095598,47.52840455858729],[7.4980383403841,47.536152181750076],[7.505454651706732,47.54438188661593],[7.516758242758337,47.545408295649786],[7.527317399933993,47.552778846515565],[7.554658254426867,47.564368052237306],[7.5645783501094,47.55703599040843],[7.561243624111692,47.55172275211291],[7.558752685660356,47.55235329499035],[7.555882119169953,47.54433555917895],[7.564785321950861,47.54568625396918],[7.587263056821628,47.54190064304111],[7.582688476068778,47.53246814131337],[7.589482524394103,47.5279230654027],[7.590248428005343,47.51978966346127],[7.594781326929009,47.51929395578897],[7.613780785019665,47.53925099543145],[7.622303281783164,47.53977428916004],[7.622854488041502,47.550040256825795],[7.617740918118178,47.554366555487356],[7.617617220103555,47.558648485827725],[7.632727781497729,47.5614887674157],[7.639973682410965,47.55816478484801],[7.648995462809379,47.548295861439875],[7.661308760240334,47.544832242956765],[7.665860164458853,47.53745814872834],[7.674674254363578,47.5337535789565],[7.694938989531916,47.532496041115465],[7.71346844906592,47.53978344629896],[7.715956243413761,47.53582195507857],[7.723622825374551,47.536754165368905],[7.727157067196862,47.53293048764033],[7.733221863174538,47.53275465944404],[7.737974130690588,47.52732498381306],[7.749022330706917,47.5249849998809],[7.757861753102653,47.52605097450287],[7.787633628417415,47.52011695778467],[7.790143521321244,47.51864117486466],[7.788870069574476,47.50682929074843],[7.792799480290271,47.500684271209245],[7.786625359342518,47.49312139201968],[7.798890147748131,47.49565149600841],[7.798162871694108,47.49939947973339],[7.799400121334925,47.497477088945935],[7.807418124234862,47.4971384859743],[7.814709929059118,47.504801278976316],[7.831976267472122,47.51473657456054],[7.833207588232065,47.53382387257594],[7.846527268275818,47.53266095290337],[7.852330295179702,47.53523506225097],[7.862569292788096,47.52692027402488],[7.86395674074442,47.519309183202445],[7.876658649367283,47.52269034821798],[7.87567113137545,47.51319304945735],[7.893993798731052,47.50605656803392],[7.904769180395594,47.49217505264052],[7.904821911502771,47.48490926161113],[7.93328835504665,47.48140776210853],[7.947015241408695,47.48488995686335],[7.940027875634228,47.462021295570224],[7.948854362289874,47.46377967418039],[7.957614193951437,47.45880646812721],[7.957849013566705,47.451279351685564],[7.946784554043733,47.44319336966537],[7.950032053627354,47.431716361052416],[7.96183169437885,47.421834282667845],[7.956570351591289,47.41968057428149],[7.955037646053525,47.415605646331336],[7.948388855309641,47.4162657867356],[7.934927870271696,47.41176694218953],[7.936722434714782,47.408057452805856],[7.932661510641391,47.40527495151619],[7.909737672400531,47.398520997340924],[7.890221593189976,47.407141074214024],[7.883331964118422,47.40609724771633],[7.883443085719068,47.4012049891245],[7.877702761222016,47.401257097623],[7.869136696167237,47.3955142728722],[7.879434713089799,47.38799354849815],[7.878812180597903,47.38351047538804],[7.862650230995195,47.38198499163919],[7.840119046365023,47.374763282921705],[7.830547227518145,47.36512144155488],[7.80216648325237,47.36109584064414],[7.796366151294341,47.3534705803715],[7.793560892325092,47.33905227137494],[7.78528803737905,47.3378822997136],[7.768963133383802,47.33891408469915],[7.766419194330703,47.342734660857005],[7.751518928544542,47.3443274446774],[7.734153146629586,47.35776074638933],[7.727913718160677,47.36885889855421],[7.701953574259492,47.37244716296033],[7.644203220263186,47.36720838530677],[7.641761060331779,47.38046937860509],[7.635580022356337,47.38059279713257],[7.633316986492583,47.38291397270416],[7.633305398225418,47.38533959871929],[7.637251158279386,47.38606854199808],[7.63272275093214,47.41003108104519],[7.664054730400831,47.41001995588381],[7.679802017668389,47.41751395224505],[7.686578998003315,47.43366406703297],[7.682972441800632,47.43872228466388],[7.684853783500164,47.447843589969715],[7.692273418589347,47.45421309996921],[7.698831030331891,47.45585888435835],[7.699930658071183,47.46190517358485],[7.709877972706822,47.469384739707586],[7.699760966314013,47.48063247960835],[7.668326578902932,47.48634665620256],[7.666120855554305,47.49686816039971],[7.65217109717027,47.49581439933043],[7.648646287658441,47.49183004211102],[7.655389581170213,47.49020559719241],[7.650513795302598,47.48826095607083],[7.655925875394832,47.48739459757455],[7.644422678687097,47.485637798180356],[7.640965961473804,47.482734093980326],[7.607299799570857,47.48939839412024],[7.608850381582776,47.48352506892989],[7.605631268762133,47.47935909729055],[7.608148977008936,47.475213682276376],[7.604494899927722,47.47044546774548],[7.618872436050056,47.4674530520825],[7.626072253389216,47.462913883669614],[7.62217338539308,47.46195224188912],[7.616464591762502,47.445234574416695],[7.615798850305441,47.432747890966844],[7.592069133423196,47.43271179535717],[7.581206884670679,47.42878068945942],[7.578423275099778,47.434906655087865],[7.568904367023134,47.43689695884281],[7.56829539909203,47.42233486107083],[7.58074128785892,47.414703988151935],[7.525235194936931,47.41163289737562],[7.531172340312734,47.40352507464003],[7.518616677418122,47.38822295597742],[7.511295677347134,47.38974369796625],[7.502255661148456,47.384806980223004],[7.492327480628366,47.385231761698726],[7.478410241257615,47.39055778320416],[7.47746817801916,47.401277162725364],[7.464484018734026,47.40251498235377],[7.460919593518167,47.40068414452088],[7.450020783333588,47.40392739156406],[7.44951323519806,47.39975827367453],[7.443401098004909,47.40231427489849],[7.441311347159463,47.40017886074712],[7.443566657511773,47.38890284041263],[7.437324174770898,47.3808884773088],[7.411692544769116,47.38057235919037],[7.416276198506335,47.384788794341716],[7.414494030814171,47.39429988358522],[7.398935569419335,47.39683906243558],[7.395920463999715,47.40338304393273],[7.388693876865087,47.403019088497395],[7.384054886906365,47.4123601395877],[7.379679679870605,47.4128137535428],[7.375844120979309,47.41401169352981],[7.370281219482422,47.413684985326796]]],"terms_url":"https://www.geo.bl.ch/fileadmin/user_upload/Geodaten/Nutzungsbedingungen_GBD_BL_V3p2.pdf","terms_text":"Geodaten des Kantons Basel-Landschaft 2015","best":true},{"id":"KTBASELSTADT2015","name":"Kanton Basel-Stadt 2015","type":"tms","template":"https://mapproxy.osm.ch/tiles/KTBASELSTADT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[8,21],"polygon":[[[7.492,47.4817],[7.492,47.6342],[7.784,47.6342],[7.784,47.4817],[7.492,47.4817]]],"terms_text":"Kanton Basel-Stadt OF 2015"},{"id":"KTBASELSTADT2017","name":"Kanton Basel-Stadt 2017","type":"tms","template":"https://mapproxy.osm.ch/tiles/KTBASELSTADT2017/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2017-01-01T00:00:00.000Z","startDate":"2017-01-01T00:00:00.000Z","scaleExtent":[8,21],"polygon":[[[7.6713752,47.5952248],[7.6799583,47.6007811],[7.6845073,47.6018228],[7.6943779,47.601707],[7.6939487,47.5966718],[7.6870823,47.5935462],[7.6788425,47.5871208],[7.685709,47.585384],[7.6890564,47.5761205],[7.6941204,47.573399],[7.6924038,47.5669132],[7.6847005,47.5617009],[7.6642513,47.5616429],[7.6487159,47.5568934],[7.6303482,47.558689],[7.6235675,47.5566617],[7.6278591,47.5514483],[7.6273763,47.5365801],[7.6183319,47.5366163],[7.6133537,47.5326179],[7.5996208,47.5191137],[7.5850296,47.5191717],[7.5840854,47.5263589],[7.5771331,47.5316327],[7.581253,47.5398612],[7.5718975,47.5414835],[7.553873,47.5414835],[7.5537872,47.5512166],[7.5565338,47.5582836],[7.5537014,47.5603108],[7.5537872,47.5747308],[7.5643444,47.5812157],[7.5793647,47.579884],[7.583313,47.5901889],[7.5856304,47.5923306],[7.5920677,47.5923885],[7.598505,47.5907098],[7.609148,47.5864261],[7.6092338,47.5810999],[7.6191043,47.580463],[7.6368713,47.593141],[7.6378154,47.595572],[7.6416778,47.5988711],[7.6452827,47.6002602],[7.664938,47.5961798],[7.6713752,47.5952248]]],"terms_text":"Kanton Basel-Stadt OF 2017","best":true},{"id":"Solothurn-sogis2014-tms","name":"Kanton Solothurn (SOGIS)","type":"tms","template":"https://mapproxy.osm.ch/tiles/sogis2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2017-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[15,19],"polygon":[[[7.9559502,47.4716195],[7.9823893,47.4715536],[7.9823893,47.453533],[7.9955263,47.453533],[7.995209,47.4174733],[8.0218003,47.4174304],[8.0215465,47.3993483],[8.0345565,47.3992624],[8.0346835,47.3902835],[8.0478839,47.3902236],[8.0476936,47.3722351],[8.0345565,47.372321],[8.0343661,47.3543954],[8.0211657,47.3542664],[8.0207214,47.3273881],[7.9944474,47.3274741],[7.994257,47.318569],[7.9677291,47.3186551],[7.9676656,47.3096624],[7.9412227,47.3097751],[7.9413282,47.3277752],[7.9148637,47.3278613],[7.9146733,47.3098775],[7.9015998,47.3100497],[7.9014015,47.3009748],[7.8750084,47.3010986],[7.8750084,47.2922321],[7.861655,47.292122],[7.8615371,47.2740879],[7.8483207,47.2741634],[7.8482988,47.2652268],[7.8350156,47.2651964],[7.8350156,47.2562425],[7.7953454,47.2563643],[7.7953005,47.2474089],[7.7292435,47.2475612],[7.7292884,47.2565166],[7.7162295,47.2566689],[7.7161847,47.2655923],[7.7030361,47.2655923],[7.7030361,47.2746055],[7.6897529,47.2746664],[7.6898875,47.2836781],[7.6634108,47.2837085],[7.6633211,47.2746968],[7.6105472,47.2747577],[7.6104126,47.2478658],[7.6235163,47.2477691],[7.6235612,47.2387871],[7.6498584,47.2387566],[7.649993,47.2297678],[7.6499025,47.2208313],[7.6630766,47.220732],[7.6631044,47.2117803],[7.6629675,47.2027317],[7.6761677,47.2026985],[7.6762267,47.1937182],[7.6893753,47.1936878],[7.6892406,47.1757237],[7.7024341,47.1756017],[7.7023444,47.14869],[7.6626742,47.1488121],[7.6628088,47.1397774],[7.6363322,47.1398995],[7.6364668,47.14869],[7.5967967,47.1489341],[7.5968415,47.1399606],[7.5704098,47.1399911],[7.5704216,47.1579174],[7.5573628,47.1579479],[7.5573179,47.1488843],[7.5442142,47.1489453],[7.5441693,47.1399107],[7.5309759,47.1399107],[7.5309535,47.1309652],[7.5176703,47.1309652],[7.5176478,47.121959],[7.5176927,47.1129198],[7.4913057,47.1130114],[7.4913506,47.1040318],[7.478202,47.1040013],[7.4781282,47.0770534],[7.4649349,47.0770839],[7.4649797,47.0680676],[7.4255179,47.0680065],[7.4254282,47.0860069],[7.372789,47.0859763],[7.3728787,47.1040318],[7.3595955,47.1040318],[7.3595506,47.1309967],[7.4122796,47.1309967],[7.4122347,47.1490064],[7.4253833,47.1490064],[7.4255179,47.1580089],[7.3726992,47.157965],[7.3726992,47.1849769],[7.3462674,47.1849159],[7.3463572,47.2028721],[7.333074,47.2029026],[7.333074,47.2209598],[7.346142,47.2209598],[7.346142,47.2299135],[7.3725646,47.2299135],[7.3726992,47.2389023],[7.3989964,47.2389632],[7.399131,47.2479201],[7.4122796,47.2479201],[7.4122796,47.2659206],[7.45186,47.2658901],[7.4519497,47.2749033],[7.4650534,47.2749337],[7.4650983,47.2838541],[7.4782918,47.2838541],[7.4783367,47.2929251],[7.504596,47.2928845],[7.5047307,47.3018322],[7.5312002,47.3018119],[7.53129,47.3197941],[7.5444835,47.3198549],[7.5445283,47.3287981],[7.5576769,47.3288285],[7.5576769,47.3378614],[7.5312451,47.3378614],[7.5313349,47.3558617],[7.5180068,47.3558313],[7.5180965,47.3648291],[7.3987991,47.3648373],[7.3988853,47.3918171],[7.3856422,47.391813],[7.3856361,47.4008028],[7.3723427,47.4007987],[7.3723427,47.4097769],[7.3458375,47.4097769],[7.3458375,47.4187804],[7.3192515,47.4187804],[7.3192515,47.4457788],[7.4121035,47.4457788],[7.4121035,47.4907816],[7.4253513,47.4907816],[7.4253513,47.4998066],[7.4385572,47.4998066],[7.4385572,47.5087647],[7.4917722,47.5087647],[7.4917832,47.6346827],[7.7844981,47.6342779],[7.7841548,47.5712255],[7.8107408,47.5711386],[7.8107408,47.5621621],[7.8239482,47.5620566],[7.8238715,47.5441362],[7.8636799,47.5439699],[7.8636317,47.5349751],[7.8767918,47.5349474],[7.8767504,47.5259917],[7.8900971,47.5259637],[7.8900555,47.5169501],[7.9031858,47.5169225],[7.9031025,47.4988609],[7.9164877,47.4988327],[7.9164458,47.4897557],[7.9561223,47.4896722],[7.9559502,47.4716195]]],"terms_text":"Orthofoto WMS Solothurn","best":true,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAIVBMVEX///+LKCbMAABycnL+/v7v7+9sbGz39/fz8/Pw8PD8/Pz60siYAAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AIGAsXN84mS+sAAAA4SURBVAjXY2AUBAMBBkYlMCCXwcwABgZYGCwGIJo5AMQGAjYgLgYxLICY05iBwRisjsvY2IGBAQAGpQmjMKkg/wAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wOC0yNFQxMToyMzo1NS0wNDowMLEFqzIAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDgtMjRUMTE6MjM6NTUtMDQ6MDDAWBOOAAAAAElFTkSuQmCC"},{"id":"Solothurn-infrared-SOGIS","name":"Kanton Solothurn Infrarot (SOGIS)","type":"wms","template":"https://geoweb.so.ch/wms/sogis_orthofoto.wms?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Orthofoto_CIR_SO&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:4326","endDate":"2017-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[15,19],"polygon":[[[7.5704216,47.1579174],[7.5573628,47.1579479],[7.5573179,47.1488843],[7.5442142,47.1489453],[7.5441693,47.1399107],[7.5309759,47.1399107],[7.530931,47.121959],[7.5176478,47.121959],[7.5176927,47.1129198],[7.4913057,47.1130114],[7.4913506,47.1040318],[7.478202,47.1040013],[7.4781572,47.094959],[7.4914404,47.0949896],[7.4913955,47.0770227],[7.4781572,47.0770533],[7.478202,47.068037],[7.4255179,47.0680065],[7.4254282,47.0860069],[7.372789,47.0859763],[7.3728787,47.1040318],[7.3595955,47.1040318],[7.3595506,47.1309967],[7.4122796,47.1309967],[7.4122347,47.1490064],[7.4253833,47.1490064],[7.4255179,47.1580089],[7.399131,47.1580394],[7.399131,47.1490064],[7.3726992,47.1489758],[7.3726992,47.1849769],[7.3462674,47.1849159],[7.3463572,47.1939124],[7.333074,47.1939429],[7.333074,47.2299135],[7.3725646,47.2299135],[7.3726992,47.2389023],[7.3989964,47.2389632],[7.399131,47.2479201],[7.4122796,47.2479201],[7.4122796,47.2659206],[7.45186,47.2658901],[7.4519497,47.2749033],[7.4650534,47.2749337],[7.4650983,47.2838541],[7.4782918,47.2838541],[7.4783367,47.2929251],[7.4914852,47.2928946],[7.4916199,47.3018423],[7.5312002,47.3018119],[7.53129,47.3197941],[7.5444835,47.3198549],[7.5445283,47.3287981],[7.5576769,47.3288285],[7.5576769,47.3378614],[7.5312451,47.3378614],[7.5313349,47.3558617],[7.5180068,47.3558313],[7.5180965,47.3648291],[7.4386216,47.3649203],[7.4386665,47.3738862],[7.4253833,47.373947],[7.4254282,47.4008052],[7.3855786,47.4008963],[7.3856683,47.4097954],[7.3591468,47.4097954],[7.3591468,47.418784],[7.3723851,47.4188447],[7.3724748,47.4368174],[7.3857132,47.4368174],[7.3857132,47.4410365],[7.3956307,47.4401563],[7.3963039,47.4425844],[7.4076125,47.4410972],[7.4079267,47.4422505],[7.403125,47.442463],[7.3973809,47.4433128],[7.3983233,47.4458318],[7.412145,47.4458318],[7.4122796,47.4547839],[7.4386665,47.454875],[7.4388012,47.47053],[7.450065,47.4694076],[7.450065,47.4722287],[7.4464749,47.4722287],[7.4464749,47.473806],[7.4429297,47.473897],[7.4428848,47.4755349],[7.439205,47.4755956],[7.439205,47.4772032],[7.4355701,47.4772941],[7.4354803,47.4789926],[7.4173954,47.4789623],[7.4174403,47.4857254],[7.4209855,47.4857254],[7.4210752,47.4908199],[7.4276271,47.4907289],[7.4285246,47.4934882],[7.4309928,47.4964293],[7.4348521,47.4988852],[7.4418976,47.4955197],[7.4466544,47.4945495],[7.4501098,47.4917599],[7.4508727,47.4906986],[7.4645149,47.4907289],[7.4645598,47.4890308],[7.4681947,47.4890005],[7.4681947,47.4856648],[7.4718746,47.4857254],[7.4719194,47.4823288],[7.4826896,47.4823895],[7.4826447,47.4838755],[7.4862348,47.4839665],[7.4863694,47.4856648],[7.4899146,47.4856648],[7.4900043,47.4906986],[7.4996975,47.4907289],[7.4996526,47.491396],[7.4917545,47.4919418],[7.4917545,47.4951256],[7.4982166,47.494792],[7.4988897,47.4958533],[7.4956587,47.4962777],[7.4917096,47.4962474],[7.4917994,47.4997341],[7.5050377,47.4997038],[7.5050377,47.5087377],[7.5447976,47.5087074],[7.5447426,47.4548204],[7.4916868,47.4546917],[7.4917503,47.445808],[7.4652859,47.4457651],[7.4652224,47.409829],[7.4915599,47.409786],[7.4917503,47.3919161],[7.5048873,47.3918302],[7.5048873,47.40068],[7.5182147,47.4007659],[7.5183416,47.4187616],[7.5579431,47.4187187],[7.5581335,47.445808],[7.5845344,47.4457222],[7.5844075,47.4366653],[7.6109354,47.4366224],[7.6109988,47.4637025],[7.5976714,47.4637025],[7.5979253,47.4996448],[7.6243263,47.4996877],[7.6244532,47.4905972],[7.6377806,47.4905543],[7.6378441,47.4996019],[7.6775724,47.4994733],[7.6774455,47.4904686],[7.7038465,47.4904257],[7.7039099,47.4814623],[7.7171104,47.4812907],[7.7171104,47.45452],[7.7039734,47.45452],[7.7038465,47.4455934],[7.6904556,47.4455076],[7.6903287,47.4095713],[7.6771282,47.4094854],[7.6771282,47.40068],[7.6506638,47.40068],[7.6504734,47.3736534],[7.6770647,47.3735674],[7.6770647,47.3825062],[7.7166661,47.3825062],[7.7167931,47.3734385],[7.7430671,47.3733955],[7.7430671,47.3553843],[7.7562041,47.3553413],[7.7563311,47.3463979],[7.7826051,47.3462689],[7.7829224,47.3643262],[7.7961229,47.3642832],[7.7961863,47.3732666],[7.8226508,47.3731376],[7.8227142,47.3822914],[7.8491152,47.3821195],[7.8492421,47.3910568],[7.8625061,47.3909709],[7.862633,47.4090559],[7.8758969,47.40897],[7.8760239,47.4180316],[7.9024248,47.4179457],[7.9024248,47.40897],[7.9288892,47.4087982],[7.9291431,47.4178169],[7.9421532,47.4176881],[7.9426609,47.4627586],[7.9559248,47.462587],[7.9561152,47.4716394],[7.9823893,47.4715536],[7.9823893,47.453533],[7.9955263,47.453533],[7.995209,47.4174733],[8.0218003,47.4174304],[8.0215465,47.3993483],[8.0345565,47.3992624],[8.0346835,47.3902835],[8.0478839,47.3901546],[8.0476936,47.3722351],[8.0345565,47.372321],[8.0343661,47.3543954],[8.0211657,47.3542664],[8.0207214,47.3273881],[7.9944474,47.3274741],[7.994257,47.318569],[7.9677291,47.3186551],[7.9676656,47.3096624],[7.9412012,47.3099206],[7.9413282,47.3277752],[7.9148637,47.3278613],[7.9146733,47.3098775],[7.9015998,47.3100497],[7.9014015,47.3009748],[7.8750084,47.3010986],[7.8750084,47.2922321],[7.861655,47.292122],[7.8615371,47.2740879],[7.8484334,47.2741488],[7.8482988,47.2652268],[7.8350156,47.2651964],[7.8350156,47.2562425],[7.7953454,47.2563643],[7.7953005,47.2474089],[7.7292435,47.2475612],[7.7292884,47.2565166],[7.7162295,47.2566689],[7.7161847,47.2655923],[7.7030361,47.2655923],[7.7030361,47.2746055],[7.6897529,47.2746664],[7.6898875,47.2836781],[7.6634108,47.2837085],[7.6633211,47.2746968],[7.6105472,47.2747577],[7.6104126,47.2478658],[7.6235163,47.2476526],[7.6235612,47.2387871],[7.6498584,47.2387566],[7.649993,47.2297678],[7.6630518,47.2297068],[7.6631044,47.2117803],[7.6762081,47.2116888],[7.6762267,47.1937182],[7.6893753,47.1936878],[7.6892406,47.1757237],[7.7024341,47.1756017],[7.702479,47.1666326],[7.7156724,47.1666326],[7.7155827,47.1576926],[7.7023892,47.1576621],[7.7023444,47.14869],[7.6626742,47.1488121],[7.6628088,47.1397774],[7.6363322,47.1398995],[7.6364668,47.14869],[7.5967967,47.1489341],[7.5968415,47.1399606],[7.5704098,47.1399911],[7.5704216,47.1579174]]],"terms_text":"Orthofoto WMS Solothurn","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAIVBMVEX///+LKCbMAABycnL+/v7v7+9sbGz39/fz8/Pw8PD8/Pz60siYAAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AIGAsXN84mS+sAAAA4SURBVAjXY2AUBAMBBkYlMCCXwcwABgZYGCwGIJo5AMQGAjYgLgYxLICY05iBwRisjsvY2IGBAQAGpQmjMKkg/wAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wOC0yNFQxMToyMzo1NS0wNDowMLEFqzIAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDgtMjRUMTE6MjM6NTUtMDQ6MDDAWBOOAAAAAElFTkSuQmCC"},{"id":"KTTHURGAU2017","name":"Kanton Thurgau OF 2017","type":"tms","template":"https://mapproxy.osm.ch/tiles/KTTHURGAU2017/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[8,21],"polygon":[[[8.63768410076,47.7004145356],[8.78327839646,47.69879895418],[8.78303977274,47.68533252804],[8.87027412213,47.68426691888],[8.8699714813,47.67089514045],[8.89900814897,47.67047199109],[8.89866777324,47.65698230742],[8.92770444091,47.65661195321],[8.92828046137,47.67015462681],[8.95726476355,47.66973147144],[8.95773605301,47.68327074156],[9.19060541482,47.6799391377],[9.1902650391,47.66645190099],[9.21922315852,47.6660287156],[9.21898751379,47.65255552096],[9.24784090222,47.65209694793],[9.24747434375,47.63863780005],[9.30570477557,47.63764983607],[9.30525966885,47.62420461255],[9.33416542278,47.62371049645],[9.33348467133,47.59673879302],[9.39150564117,47.59576769355],[9.3911390827,47.58234701941],[9.42007101938,47.58176420165],[9.41860478548,47.54139270755],[9.44753672216,47.5408447841],[9.44717016368,47.52730395336],[9.47604973486,47.52680892203],[9.47518570418,47.49985802607],[9.5041438236,47.49934504674],[9.50309651368,47.47241544181],[9.41596032792,47.47391975877],[9.41554140395,47.46045016443],[9.35759898235,47.4614060707],[9.35817500281,47.47498160364],[9.32895505591,47.47533554716],[9.32864086293,47.46188401733],[9.18361462107,47.46420288184],[9.18411209329,47.47768921094],[9.15491832913,47.47809622481],[9.15465650165,47.4646277009],[9.0673632194,47.46583133624],[9.06717994017,47.45234196418],[9.0960856941,47.45193475084],[9.09582386661,47.43853036098],[9.06663010246,47.43883142176],[9.06642064047,47.42537055101],[9.00829493964,47.42620309948],[9.00714289872,47.385729558],[8.97810623105,47.38615501083],[8.97739929685,47.3591319418],[8.91940450976,47.35989459356],[8.92032090594,47.38697045248],[8.89136278652,47.38725408141],[8.89285520316,47.44116901155],[8.86397563198,47.44148776574],[8.86604406908,47.52251256102],[8.80783982,47.52316676216],[8.80893949543,47.56372896753],[8.77985046226,47.56402931121],[8.78024320348,47.57750766919],[8.7220913199,47.57814352175],[8.72337427456,47.63212747913],[8.66519620823,47.63272738003],[8.66579841143,47.65980396746],[8.63673556102,47.65999795099],[8.63768410076,47.7004145356]]],"terms_text":"Kanton Thurgau OF 2017","best":true},{"id":"KTZUERICH2015","name":"Kanton Zürich 2015 10cm","type":"tms","template":"https://mapproxy.osm.ch/tiles/KTZUERICH2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2015-01-01T00:00:00.000Z","startDate":"2014-01-01T00:00:00.000Z","scaleExtent":[8,21],"polygon":[[[8.7133786,47.2138825],[8.7137004,47.2273679],[8.8116987,47.2262565],[8.8033693,47.238578],[8.8086564,47.2431015],[8.8244837,47.2465632],[8.8297079,47.2453884],[8.8365225,47.2425717],[8.845681,47.2425282],[8.8483688,47.2432185],[8.8523223,47.2403414],[8.8620639,47.2388207],[8.8647161,47.2396607],[8.868627,47.2396752],[8.8733911,47.2412538],[8.8788236,47.2447632],[8.8805373,47.2479105],[8.8987831,47.2497591],[8.9028149,47.2509368],[8.9102526,47.2500343],[8.9273465,47.2540596],[8.936441,47.254991],[8.9423286,47.2584948],[8.9442343,47.2617281],[8.9488206,47.2653616],[8.9509396,47.2686041],[8.9506765,47.2710841],[8.9530017,47.2728451],[8.9541109,47.2750548],[8.9550424,47.2825128],[8.9517147,47.2852719],[8.9466448,47.2864681],[8.9525821,47.288436],[8.9545376,47.2898202],[8.9614064,47.3009796],[8.975521,47.3024455],[8.9800647,47.3041573],[8.9915271,47.3189339],[8.990688,47.3218309],[8.9863719,47.325417],[8.985483,47.3277835],[8.9836414,47.3293064],[8.9859168,47.3381494],[8.9846369,47.3406117],[8.98079,47.3423656],[8.9808753,47.3483543],[8.9778462,47.3543713],[8.975905,47.3560573],[8.9700245,47.3584321],[8.9657226,47.3588993],[8.9623806,47.3625214],[8.9566494,47.3743155],[8.9520986,47.3783555],[8.9477771,47.3797089],[8.9502307,47.3834606],[8.9501804,47.3859594],[8.9488028,47.3883559],[8.9397021,47.3940336],[8.9363736,47.3949594],[8.9325121,47.3987101],[8.9280071,47.4014804],[8.922778,47.4038013],[8.9138785,47.4056866],[8.9192383,47.4121313],[8.9204852,47.4191469],[8.918293,47.4232292],[8.9209378,47.4254404],[8.9210685,47.4282841],[8.9257143,47.4269507],[8.9343725,47.4279643],[8.9387669,47.4317263],[8.9397424,47.4341139],[8.9388876,47.4372496],[8.9351066,47.4397254],[8.923492,47.439535],[8.919731,47.4408069],[8.9132248,47.4411945],[8.9116159,47.4434661],[8.9152662,47.4462817],[8.9149947,47.4500355],[8.9119578,47.4537755],[8.90517,47.4579095],[8.9018315,47.4643479],[8.8973465,47.4689773],[8.8958079,47.4721858],[8.8913532,47.4737967],[8.8914336,47.4782146],[8.9014192,47.4813273],[8.904275,47.4844942],[8.9031387,47.4892782],[8.9000113,47.4918738],[8.8996694,47.4988516],[8.9035711,47.504035],[8.9041343,47.5074519],[8.9032192,47.5194804],[8.9049689,47.5244717],[8.9036516,47.5269095],[8.8998203,47.5296458],[8.8842335,47.5339233],[8.8788335,47.5327691],[8.8706077,47.5347652],[8.8601998,47.5348806],[8.8567406,47.5359397],[8.847821,47.5358039],[8.8461416,47.5408683],[8.8402991,47.5465363],[8.8372823,47.5527806],[8.8427528,47.5536968],[8.8464835,47.5562011],[8.852688,47.5564454],[8.8561976,47.557918],[8.8577462,47.5614128],[8.8572836,47.5648937],[8.8551115,47.5672075],[8.8507875,47.5681777],[8.8476299,47.5702335],[8.8453774,47.5706134],[8.8448042,47.5730897],[8.8421092,47.5751318],[8.83326,47.5776893],[8.8296197,47.5777842],[8.826613,47.5766242],[8.8213745,47.5775574],[8.8143152,47.5759835],[8.8123442,47.5778016],[8.8122235,47.584734],[8.8106749,47.5863889],[8.8081207,47.5873792],[8.7681785,47.596738],[8.7543013,47.5972941],[8.7552868,47.6010778],[8.7541605,47.6027322],[8.7488309,47.6058782],[8.7482878,47.6087393],[8.7507013,47.6098105],[8.7525516,47.6129154],[8.7557493,47.6121697],[8.7610187,47.6133493],[8.7816937,47.6063393],[8.7816535,47.6034509],[8.7846703,47.5999251],[8.8016849,47.5966024],[8.805124,47.5968601],[8.8089453,47.5993826],[8.8107353,47.6098105],[8.8186593,47.6137153],[8.8200068,47.6152609],[8.8208918,47.6205752],[8.8201476,47.6241539],[8.8241509,47.6255988],[8.8307922,47.6320585],[8.8344755,47.6409896],[8.8318161,47.6494497],[8.8269525,47.6520555],[8.8116788,47.6559927],[8.8111242,47.6621038],[8.8119206,47.6645366],[8.8104131,47.6675247],[8.8088061,47.6685686],[8.8029328,47.6697849],[8.7929921,47.6691911],[8.7868485,47.6697849],[8.7845305,47.66899],[8.7821555,47.6665862],[8.7792117,47.6569506],[8.7776331,47.6556287],[8.7739783,47.6543451],[8.7662277,47.6543834],[8.7610796,47.6525728],[8.7585198,47.6503311],[8.7546374,47.648827],[8.7534001,47.6473324],[8.7483942,47.6461252],[8.7432888,47.6474857],[8.7388233,47.6465085],[8.723763,47.6475336],[8.7206344,47.6466426],[8.7149174,47.6488462],[8.7082619,47.647639],[8.7048061,47.6503886],[8.7005255,47.6519885],[8.6942682,47.653071],[8.6924194,47.6558107],[8.6863185,47.6609449],[8.6848537,47.6641343],[8.6857354,47.667994],[8.6832609,47.6731461],[8.6805589,47.6756071],[8.6752117,47.6775988],[8.6764205,47.6817734],[8.6756099,47.6866083],[8.6742731,47.6879869],[8.6722679,47.6889059],[8.6627254,47.690294],[8.6464379,47.6984747],[8.6396803,47.6987725],[8.6354971,47.6974324],[8.6216198,47.6955373],[8.6181807,47.6927893],[8.6174366,47.6908669],[8.6200712,47.6813354],[8.6147818,47.683082],[8.6091706,47.681877],[8.6019906,47.6745105],[8.599537,47.6692288],[8.6027549,47.6613188],[8.6097913,47.6567985],[8.6140953,47.6563989],[8.6157444,47.6555726],[8.622311,47.6510364],[8.6222707,47.6502371],[8.6204808,47.6475815],[8.6193947,47.6504267],[8.6152115,47.6545182],[8.6092986,47.656767],[8.6032449,47.6565367],[8.6006907,47.6554123],[8.597875,47.652757],[8.5964471,47.6487602],[8.5909163,47.6462266],[8.5893677,47.6443973],[8.5887442,47.6393565],[8.5911576,47.627552],[8.5932493,47.6223333],[8.5983778,47.6158668],[8.5985387,47.6144975],[8.5911375,47.6091691],[8.5893677,47.6068233],[8.5879599,47.6031891],[8.5878794,47.5990937],[8.5820269,47.5979273],[8.5739821,47.5932889],[8.5714624,47.5898796],[8.5703531,47.5863307],[8.5720312,47.5798462],[8.567708,47.5779851],[8.5650628,47.5752413],[8.5611662,47.5640727],[8.5570705,47.5594664],[8.5561603,47.5633626],[8.5520646,47.5690432],[8.5533445,47.5714611],[8.552605,47.5759896],[8.5500736,47.5780618],[8.5466605,47.5792322],[8.5435034,47.5822828],[8.5431905,47.5851029],[8.548879,47.5879038],[8.5517517,47.5877695],[8.5576393,47.5896302],[8.5611378,47.5915101],[8.5626452,47.5945983],[8.566684,47.5956532],[8.5690163,47.5974754],[8.5695283,47.6004865],[8.5723726,47.6038618],[8.5730836,47.6064124],[8.575615,47.6067575],[8.5789997,47.608445],[8.5807631,47.6103051],[8.5812466,47.6120308],[8.5802511,47.6145617],[8.5771224,47.616364],[8.5752452,47.6195658],[8.5727707,47.6210995],[8.5678502,47.6216363],[8.5634132,47.6269655],[8.5610524,47.628384],[8.5480258,47.629975],[8.5455797,47.6312209],[8.5449824,47.6329651],[8.5428777,47.6345751],[8.5399481,47.6356484],[8.5276894,47.6363383],[8.5211191,47.6388681],[8.5147765,47.638504],[8.5093155,47.6355909],[8.5082916,47.6294191],[8.5016076,47.6259687],[8.5006974,47.6242051],[8.5014938,47.6215404],[8.4925344,47.6189331],[8.4888369,47.6195275],[8.4766919,47.6193741],[8.4743881,47.6183771],[8.4715439,47.6149452],[8.4712879,47.6130662],[8.4678463,47.6127211],[8.4644617,47.6110912],[8.4617312,47.606585],[8.4551894,47.6067575],[8.4506102,47.6041111],[8.4498991,47.6016372],[8.4506955,47.595845],[8.4538242,47.5934283],[8.4542792,47.5865993],[8.4562987,47.584796],[8.4601384,47.5838176],[8.463324,47.5804409],[8.4688134,47.5795008],[8.4621863,47.5765268],[8.4541939,47.5766803],[8.4364174,47.5715379],[8.4316106,47.5710198],[8.4247559,47.5723054],[8.4147726,47.5687937],[8.4130376,47.5674504],[8.4103356,47.5619423],[8.4103925,47.5597159],[8.4078895,47.5546486],[8.4084584,47.5501758],[8.3996412,47.5444356],[8.3960859,47.5429956],[8.3946922,47.5409412],[8.3949482,47.5367361],[8.3913644,47.53568],[8.3883495,47.5330492],[8.3852493,47.5331644],[8.3811251,47.5321851],[8.3773991,47.5296885],[8.3751806,47.5267885],[8.3727915,47.5165125],[8.3657946,47.5166278],[8.3566646,47.5134773],[8.3543892,47.5110375],[8.3510329,47.503141],[8.3523982,47.499567],[8.3516302,47.4972995],[8.3527395,47.4948398],[8.3545029,47.4935522],[8.3556975,47.4897854],[8.3553278,47.4852494],[8.3569774,47.4793099],[8.3589115,47.477426],[8.3618695,47.4764455],[8.3672167,47.4765417],[8.3670176,47.4748691],[8.3607318,47.4722161],[8.3590253,47.4660443],[8.3599639,47.4638138],[8.3632632,47.4620447],[8.367302,47.4565256],[8.3697481,47.4550448],[8.3739292,47.4547178],[8.3775414,47.452006],[8.3758348,47.4506789],[8.3744127,47.4461396],[8.376233,47.4381757],[8.3716822,47.436752],[8.3685535,47.4340585],[8.3680984,47.4315766],[8.369037,47.4286327],[8.3722226,47.426035],[8.3828317,47.4234564],[8.3837134,47.4225135],[8.3807269,47.4220709],[8.3755504,47.4177986],[8.375977,47.4137761],[8.3744127,47.4090604],[8.3606749,47.406635],[8.3578876,47.4054222],[8.3562948,47.4037667],[8.3566077,47.3996084],[8.3619549,47.3951609],[8.3657662,47.3942945],[8.3760055,47.3946988],[8.3774276,47.3921765],[8.3803572,47.390482],[8.38761,47.3903473],[8.3883211,47.3801216],[8.3903405,47.375268],[8.3935545,47.3718972],[8.3938674,47.3694508],[8.3957446,47.3671007],[8.3990154,47.3660796],[8.3983613,47.3640761],[8.4001247,47.3609358],[8.4010349,47.354327],[8.3972805,47.3467731],[8.3977924,47.3447496],[8.4018597,47.3391025],[8.4093116,47.334091],[8.4060976,47.3297537],[8.4057848,47.3266691],[8.406894,47.3244713],[8.4129523,47.3204996],[8.4161094,47.3199597],[8.4294774,47.3222734],[8.4355641,47.3208273],[8.4343695,47.3195355],[8.4315537,47.3185136],[8.4260927,47.3137508],[8.4227649,47.3070589],[8.4231063,47.3036838],[8.4174462,47.3015043],[8.4137202,47.2982445],[8.4001247,47.2956404],[8.3976787,47.2939235],[8.3951757,47.2951581],[8.39108,47.2955247],[8.3860172,47.2943672],[8.3827179,47.2922452],[8.3819784,47.2903353],[8.3825472,47.2880974],[8.3850786,47.2856472],[8.3897716,47.2750731],[8.3956308,47.2710011],[8.3940665,47.2667166],[8.3941518,47.263609],[8.3975649,47.2598644],[8.3961428,47.2548067],[8.3974227,47.2518915],[8.4064674,47.2445161],[8.4082593,47.2411756],[8.4076051,47.2395728],[8.4095961,47.2358457],[8.4107338,47.2279852],[8.4124806,47.2243309],[8.4169461,47.2201391],[8.4195912,47.2190187],[8.4226915,47.2188641],[8.4297736,47.2200039],[8.4393588,47.2193664],[8.4499963,47.2136286],[8.454604,47.2133388],[8.4562536,47.2108078],[8.4590979,47.2093394],[8.4644735,47.2092814],[8.4660947,47.2086245],[8.468682,47.2053299],[8.4732876,47.2039772],[8.4769279,47.2045784],[8.4839872,47.2039225],[8.4948878,47.2073794],[8.5039985,47.2076799],[8.5153818,47.2115191],[8.5175338,47.2127076],[8.5190623,47.2149481],[8.5306003,47.213063],[8.533074,47.2132543],[8.5415009,47.217776],[8.5445579,47.2170657],[8.5540708,47.2172569],[8.5585759,47.2151668],[8.5698386,47.2138964],[8.5749129,47.2125501],[8.5774872,47.2077137],[8.5804437,47.206402],[8.5840839,47.2060331],[8.5901175,47.2071398],[8.5896549,47.2045985],[8.5907409,47.2019476],[8.5935767,47.1985998],[8.5958091,47.1975339],[8.6016818,47.1972196],[8.6065288,47.199201],[8.6072528,47.1988457],[8.6109735,47.1938714],[8.6112752,47.1905913],[8.6139098,47.1883772],[8.6152171,47.1851515],[8.6193803,47.1804493],[8.6197624,47.1791779],[8.6172082,47.1735865],[8.6196015,47.1697994],[8.62292,47.1682133],[8.6339011,47.1671468],[8.6356106,47.1657794],[8.6396531,47.1645898],[8.642871,47.1644257],[8.6521627,47.1659846],[8.6542543,47.1655196],[8.6548979,47.159667],[8.6564867,47.1578345],[8.6588197,47.1565763],[8.6685337,47.1549215],[8.678469,47.1555779],[8.6824109,47.1575883],[8.6936133,47.1589832],[8.6980379,47.1613353],[8.6988625,47.163031],[8.697696,47.1703326],[8.6959865,47.1723151],[8.6891887,47.1756646],[8.6871976,47.1795881],[8.6879015,47.1822947],[8.6918635,47.1848508],[8.698239,47.1920537],[8.7032268,47.1932564],[8.7085162,47.196017],[8.714228,47.1969326],[8.716923,47.1989277],[8.7421232,47.2070988],[8.74218,47.2135521],[8.7133786,47.2138825]]],"terms_text":"Kanton Zürich Orthophotos 2014/2015","best":true},{"id":"kartverket-friluft","name":"Kartverket Hiking Trails","type":"wms","template":"https://wms.geonorge.no/skwms1/wms.friluftsruter2?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Fotrute&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[6,24],"polygon":[[[31.904253,70.4368136],[28.4765186,71.3289643],[23.6865015,71.2514263],[16.8090601,70.0730823],[11.1620655,67.5253903],[9.975542,64.811576],[4.2187061,62.1449966],[4.3725367,59.1871966],[6.1743055,57.8915032],[7.932118,57.7393554],[10.777577,58.8649103],[11.7224012,58.762509],[12.722157,60.1141506],[13.0517469,61.3493518],[12.5243921,63.6169922],[14.2382593,63.9856094],[15.1171656,65.9016624],[18.6987085,68.3749083],[20.0610132,68.2612583],[21.0058375,68.7841518],[25.2465601,68.3506025],[26.9384546,69.8472011],[28.7621851,69.6112133],[28.5864039,68.8556004],[31.069314,69.5191547],[31.904253,70.4368136]]],"terms_url":"https://kartverket.no/geodataarbeid/temadata/nasjonal-database-for-tur--og-friluftsruter/","terms_text":"© Kartverket","description":"Hiking trails from the Norwegian database `Tur- og Friluftsruter´, including DNT routes.","icon":"https://www.kartverket.no/Content/Images/logo-graphic-512.png","overlay":true},{"id":"kartverket-topo4","name":"Kartverket N50 topo","type":"tms","template":"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom={zoom}&x={x}&y={y}","scaleExtent":[3,15],"polygon":[[[31.904253,70.4368136],[28.4765186,71.3289643],[23.6865015,71.2514263],[16.8090601,70.0730823],[11.1620655,67.5253903],[9.975542,64.811576],[4.2187061,62.1449966],[4.3725367,59.1871966],[6.1743055,57.8915032],[7.932118,57.7393554],[10.777577,58.8649103],[11.7224012,58.762509],[12.722157,60.1141506],[13.0517469,61.3493518],[12.5243921,63.6169922],[14.2382593,63.9856094],[15.1171656,65.9016624],[18.6987085,68.3749083],[20.0610132,68.2612583],[21.0058375,68.7841518],[25.2465601,68.3506025],[26.9384546,69.8472011],[28.7621851,69.6112133],[28.5864039,68.8556004],[31.069314,69.5191547],[31.904253,70.4368136]]],"terms_url":"https://wiki.openstreetmap.org/wiki/No:Kartverket_import","terms_text":"© Kartverket","description":"Topographic map N50, equivalent to Norway 1:50.000 paper map series.","icon":"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{"id":"kartverket-vegnett","name":"Kartverket Road Network","type":"wms","template":"https://openwms.statkart.no/skwms1/wms.vegnett?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=all&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[3,24],"polygon":[[[31.904253,70.4368136],[28.4765186,71.3289643],[23.6865015,71.2514263],[16.8090601,70.0730823],[11.1620655,67.5253903],[9.975542,64.811576],[4.2187061,62.1449966],[4.3725367,59.1871966],[6.1743055,57.8915032],[7.932118,57.7393554],[10.777577,58.8649103],[11.7224012,58.762509],[12.722157,60.1141506],[13.0517469,61.3493518],[12.5243921,63.6169922],[14.2382593,63.9856094],[15.1171656,65.9016624],[18.6987085,68.3749083],[20.0610132,68.2612583],[21.0058375,68.7841518],[25.2465601,68.3506025],[26.9384546,69.8472011],[28.7621851,69.6112133],[28.5864039,68.8556004],[31.069314,69.5191547],[31.904253,70.4368136]]],"terms_url":"https://www.kartverket.no/data/kartdata/vegdata/","terms_text":"© Kartverket","description":"Norwegian road network from the National Road database (NVDB). Colours represent national, county, municipal, private and forest roads + footways/cycleways.","icon":"https://www.kartverket.no/Content/Images/logo-graphic-512.png","overlay":true},{"id":"kelowna_2012","name":"Kelowna 2012","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna2012/{zoom}/{x}/{y}.png","endDate":"2012-05-14T00:00:00.000Z","startDate":"2012-05-13T00:00:00.000Z","scaleExtent":[9,20],"polygon":[[[-119.5867318,49.7928087],[-119.5465655,49.7928097],[-119.5465661,49.8013837],[-119.5343374,49.8013841],[-119.5343376,49.8047321],[-119.5296211,49.8047322],[-119.5296216,49.8119555],[-119.5104463,49.811956],[-119.5115683,49.8744325],[-119.5108946,49.8744904],[-119.5114111,49.8843312],[-119.5114115,49.9221763],[-119.49386,49.9223477],[-119.4940505,49.9313031],[-119.4803936,49.9317529],[-119.4804572,49.9407474],[-119.4666732,49.9409927],[-119.4692775,49.9913717],[-119.4551337,49.9916078],[-119.4556736,50.0121242],[-119.4416673,50.0123895],[-119.4417308,50.0136345],[-119.4221492,50.0140377],[-119.4221042,50.0119306],[-119.4121303,50.012165],[-119.4126082,50.0216913],[-119.4123387,50.0216913],[-119.4124772,50.0250773],[-119.4120917,50.0250821],[-119.4121954,50.0270769],[-119.4126083,50.0270718],[-119.4128328,50.0321946],[-119.3936313,50.0326418],[-119.393529,50.0307781],[-119.3795727,50.0310116],[-119.3795377,50.0287584],[-119.3735764,50.0288621],[-119.371544,49.9793618],[-119.3573506,49.9793618],[-119.3548353,49.9256081],[-119.3268079,49.9257238],[-119.3256573,49.8804068],[-119.3138893,49.8806528],[-119.3137097,49.8771651],[-119.3132156,49.877223],[-119.3131482,49.8749652],[-119.312452,49.8749073],[-119.3122275,49.87236],[-119.3117558,49.872331],[-119.3115986,49.8696098],[-119.3112169,49.8694217],[-119.3109199,49.8632417],[-119.3103721,49.8632724],[-119.3095139,49.8512388],[-119.3106368,49.8512316],[-119.3103859,49.8462564],[-119.3245344,49.8459957],[-119.3246018,49.8450689],[-119.3367018,49.844875],[-119.3367467,49.8435136],[-119.337937,49.8434702],[-119.3378023,49.8382055],[-119.3383637,49.8381041],[-119.3383749,49.8351202],[-119.3390936,49.8351058],[-119.3388016,49.8321217],[-119.3391497,49.8320565],[-119.3391722,49.8293331],[-119.3394641,49.8293331],[-119.3395879,49.8267878],[-119.3500053,49.8265829],[-119.3493701,49.8180588],[-119.4046964,49.8163785],[-119.4045694,49.8099022],[-119.4101592,49.8099022],[-119.4102862,49.8072787],[-119.4319467,49.8069098],[-119.4322643,49.7907965],[-119.4459847,49.7905504],[-119.445286,49.7820201],[-119.4967376,49.7811587],[-119.4966105,49.7784927],[-119.5418371,49.7775082],[-119.5415892,49.7718277],[-119.5560296,49.7714941],[-119.5561194,49.7718422],[-119.5715704,49.7715086],[-119.5716153,49.7717262],[-119.5819235,49.7714941],[-119.5820133,49.7717697],[-119.5922991,49.7715231],[-119.592344,49.7718132],[-119.6003839,49.7715957],[-119.6011924,49.7839081],[-119.5864365,49.7843863],[-119.5867318,49.7928087]]],"description":"High quality aerial imagery taken for the City of Kelowna"},{"id":"kelowna_roads","name":"Kelowna Roads overlay","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna_overlay/{zoom}/{x}/{y}.png","scaleExtent":[9,20],"polygon":[[[-119.5867318,49.7928087],[-119.5465655,49.7928097],[-119.5465661,49.8013837],[-119.5343374,49.8013841],[-119.5343376,49.8047321],[-119.5296211,49.8047322],[-119.5296216,49.8119555],[-119.5104463,49.811956],[-119.5115683,49.8744325],[-119.5108946,49.8744904],[-119.5114111,49.8843312],[-119.5114115,49.9221763],[-119.49386,49.9223477],[-119.4940505,49.9313031],[-119.4803936,49.9317529],[-119.4804572,49.9407474],[-119.4666732,49.9409927],[-119.4692775,49.9913717],[-119.4551337,49.9916078],[-119.4556736,50.0121242],[-119.4416673,50.0123895],[-119.4417308,50.0136345],[-119.4221492,50.0140377],[-119.4221042,50.0119306],[-119.4121303,50.012165],[-119.4126082,50.0216913],[-119.4123387,50.0216913],[-119.4124772,50.0250773],[-119.4120917,50.0250821],[-119.4121954,50.0270769],[-119.4126083,50.0270718],[-119.4128328,50.0321946],[-119.3936313,50.0326418],[-119.393529,50.0307781],[-119.3795727,50.0310116],[-119.3795377,50.0287584],[-119.3735764,50.0288621],[-119.371544,49.9793618],[-119.3573506,49.9793618],[-119.3548353,49.9256081],[-119.3268079,49.9257238],[-119.3256573,49.8804068],[-119.3138893,49.8806528],[-119.3137097,49.8771651],[-119.3132156,49.877223],[-119.3131482,49.8749652],[-119.312452,49.8749073],[-119.3122275,49.87236],[-119.3117558,49.872331],[-119.3115986,49.8696098],[-119.3112169,49.8694217],[-119.3109199,49.8632417],[-119.3103721,49.8632724],[-119.3095139,49.8512388],[-119.3106368,49.8512316],[-119.3103859,49.8462564],[-119.3245344,49.8459957],[-119.3246018,49.8450689],[-119.3367018,49.844875],[-119.3367467,49.8435136],[-119.337937,49.8434702],[-119.3378023,49.8382055],[-119.3383637,49.8381041],[-119.3383749,49.8351202],[-119.3390936,49.8351058],[-119.3388016,49.8321217],[-119.3391497,49.8320565],[-119.3391722,49.8293331],[-119.3394641,49.8293331],[-119.3395879,49.8267878],[-119.3500053,49.8265829],[-119.3493701,49.8180588],[-119.4046964,49.8163785],[-119.4045694,49.8099022],[-119.4101592,49.8099022],[-119.4102862,49.8072787],[-119.4319467,49.8069098],[-119.4322643,49.7907965],[-119.4459847,49.7905504],[-119.445286,49.7820201],[-119.4967376,49.7811587],[-119.4966105,49.7784927],[-119.5418371,49.7775082],[-119.5415892,49.7718277],[-119.5560296,49.7714941],[-119.5561194,49.7718422],[-119.5715704,49.7715086],[-119.5716153,49.7717262],[-119.5819235,49.7714941],[-119.5820133,49.7717697],[-119.5922991,49.7715231],[-119.592344,49.7718132],[-119.6003839,49.7715957],[-119.6011924,49.7839081],[-119.5864365,49.7843863],[-119.5867318,49.7928087]]],"overlay":true},{"id":"landsat_233055","name":"Landsat 233055","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_233055/{zoom}/{x}/{y}.png","endDate":"2013-09-03T00:00:00.000Z","startDate":"2013-09-03T00:00:00.000Z","scaleExtent":[5,14],"polygon":[[[-60.8550011,6.1765004],[-60.4762612,7.9188291],[-62.161689,8.2778675],[-62.5322549,6.5375488],[-60.8550011,6.1765004]]],"description":"Recent Landsat imagery"},{"id":"osmse-ekonomiska","name":"Lantmäteriet Economic Map (historic)","type":"tms","template":"https://mapproxy.openstreetmap.se/tms/1.0.0/ek_EPSG3857/{zoom}/{x}/{-y}.jpeg","scaleExtent":[3,17],"polygon":[[[12.7111707,55.2666045],[14.3810926,55.2916348],[19.6545301,57.2493436],[19.852284,59.7508666],[17.775868,61.1379379],[18.0615125,62.2781508],[20.9728895,63.5779045],[24.3566785,65.6084197],[23.9611707,66.7919139],[20.6103406,66.451891],[17.1386609,63.9663237],[11.9970594,61.0370176],[12.2936902,60.3160739],[10.7006727,58.8137475],[12.7111707,55.2666045]]],"terms_url":"https://www.lantmateriet.se","terms_text":"© Lantmäteriet","description":"Scan of ´Economic maps´ ca 1950-1980","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAA0CAMAAADPNIq/AAAA7VBMVEVHcEz1NzT1NjT4NzTwNTLzNjP4ODX3NzTyNTPyNS/zNjPyNjPxNTP2NzTvMi70NjPzNjP0NjL1NjP3NzP1NzT1NjP0NjP3NzT/Njb0NjP3NzT4ODP0NjPzNjP2NzX2NzTvLCzzNjTtNC/zNTPyNDP5NzT0NjTzNjP1NjPtMy72NzT5ODX3ODT1NjT1NzTyNjP1NzTyODD0NzT/Ozj/OjfzNzT9OTb3NzT0NDH/ODX6ODX1NzT/PDn5NTL4ODX0NjP2PTr8YmL1OTb9Y2P2QT/4TUz3R0X+Zmb7ODX8X1/4Skj6UlH7W1r+NjP5T03RuQwnAAAAMnRSTlMA8SH8F63p7FkZsHRcsw/ErCddmTKo2/QD+34roLpExwfMG25W1djATRKRk9CG+VOkPjR6UnQAAAIzSURBVEjHnZXpVuowEIDZC3gBBRQEBNerqN4lk9bS1FIqUAH0/R/HbkmT0haOc/jDnK/zTZihyWR+GP3my6BaHbw0+2lUrvecn3gBYD33cglY5akz+TTMuROmOjWw3nmqxHHNEn4zv7armROrDZoiZOilX7vcI3yam5ltv7thrywHRLICj1HuVFeXM3u23SyWy+V6bboccoueitxAVxf2ajFHahAoCKIPeO7I4d4XlqpOUTSIfhRy7fzbemvGUJ4932ZgYzLfIBXFhwwNyj0AWVpJnCOHhwC8x6bFaQkxiEDCfTBey0CMkzXAhoFBk/kuT/wjA/90tnXbbv9tSULSP3gNuHZqwSbkahD6oeamumdKmOHm8C98XjnrOolCVgsTlyF4+ZsV0LIFJ3FybrCCTX5cZVbSOHdP00cU1KQ6D9alDwoid99zfyiIR+KmNLBQccx6xBcieIGFHrusaXwlgldYOHWmSJs2OsJ/pJKlPUHVS9xAZAJ0ScP8jT8EdhqtdM0VLGmRWYczlPFoTLnxCNO9AHrI//iVSe6Gfm54x8QED+nTRZBZTaXRK5d7DYXVk4OjeO1I4V4QDNj5hKvzIV3zY+V3mghfxAU4Bjnpr1UVhlDg5EIoUuRFJco58c5rqqjL+8WJ8h1xgjxGLP7sKeJYeaw4Rp4g3vnZZSgmXh+FknKAOCJPEQvyNLEgTxVzcgLlfbemJ98nZnJFKuy/iG+BHCD2bzv9+KC7vd5q1TM/j284bszID7oc+QAAAABJRU5ErkJggg=="},{"id":"lu.geoportail.opendata.ortholatest","name":"Latest available ortho geoportail.lu","type":"tms","template":"http://{switch:wmts1,wmts2}.geoportail.lu/opendata/wmts/ortho_latest/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","endDate":"2017-06-22T00:00:00.000Z","startDate":"2017-06-14T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts","terms_text":"Administration du Cadastre et de la Topographie","best":true,"icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"landsat_047026","name":"Latest southwest British Columbia Landsat","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_047026/{zoom}/{x}/{y}.png","endDate":"2013-09-12T00:00:00.000Z","startDate":"2013-09-12T00:00:00.000Z","scaleExtent":[5,13],"polygon":[[[-121.9355512,47.7820648],[-121.5720582,48.6410125],[-121.2015461,49.4846247],[-121.8375516,49.6023246],[-122.4767046,49.7161735],[-123.118912,49.8268824],[-123.760228,49.9335836],[-124.0887706,49.0870469],[-124.4128889,48.2252567],[-123.792772,48.1197334],[-123.1727942,48.0109592],[-122.553553,47.8982299],[-121.9355512,47.7820648]]],"description":"Recent lower-resolution landsat imagery for southwest British Columbia"},{"id":"Lausanne-2012","name":"Lausanne - Orthophoto technique 2012","type":"tms","template":"http://osmdata.asitvd.ch/tiles/lausanne2012/{zoom}/{x}/{y}.png","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","scaleExtent":[14,20],"polygon":[[[6.6666848,46.4944086],[6.6163719,46.4940643],[6.6163553,46.4983636],[6.6013468,46.4982495],[6.6013136,46.5022748],[6.5592343,46.5019436],[6.5577253,46.5968689],[6.7289549,46.5980474],[6.7304012,46.490042],[6.677024,46.4897774],[6.6770269,46.4901091],[6.6734462,46.490056],[6.6734711,46.4904096],[6.6667206,46.4903583],[6.6666848,46.4944086]]],"terms_url":"http://carto.lausanne.ch/lausanne-gc/","terms_text":"Ville de Lausanne - Orthophoto technique 2012"},{"id":"LINZ_NZ_Aerial_Imagery","name":"LINZ NZ Aerial Imagery","type":"tms","template":"https://tiles-a.data-cdn.linz.govt.nz/services;key=3197c6d0e5cb494a95d58dc2de3216c2/tiles/v4/set=2/EPSG:3857/{zoom}/{x}/{y}.png","scaleExtent":[0,21],"polygon":[[[167.2503662109375,-47.21956811231548],[167.244873046875,-47.28016067076474],[167.5030517578125,-47.37975438400816],[168.2501220703125,-47.15610477504402],[168.7445068359375,-46.79629898997744],[169.3267822265625,-46.75491661928188],[169.78271484375,-46.604167162931844],[170.4254150390625,-46.11132565729794],[170.804443359375,-45.95114968669139],[170.9527587890625,-45.440862671781744],[171.309814453125,-44.91035917458493],[171.40869140625,-44.39061697878681],[172.562255859375,-43.92954993561458],[172.90283203125,-43.96909818325171],[173.1610107421875,-43.90976594390799],[173.2598876953125,-43.69567969789881],[172.9742431640625,-43.53660274231031],[172.760009765625,-43.37710501700071],[173.1500244140625,-43.17714134663171],[173.704833984375,-42.63395872267314],[174.36401367187497,-41.78360106648077],[174.320068359375,-41.409775832009544],[174.84741210937497,-41.52914198872309],[175.0726318359375,-41.70572851523751],[175.506591796875,-41.672911819602085],[176.2261962890625,-41.10832999732831],[176.8304443359375,-40.42604212826493],[177.17102050781247,-39.67337039176559],[177.0391845703125,-39.39375459224347],[177.4456787109375,-39.18117526158747],[177.60498046875,-39.3300485529424],[177.978515625,-39.368279149160124],[178.3355712890625,-38.65977773071253],[178.7091064453125,-37.74465712069938],[178.626708984375,-37.54457732085582],[178.3135986328125,-37.43125050179357],[177.6214599609375,-37.37888785004525],[177.0391845703125,-37.39634613318924],[176.561279296875,-37.37015718405751],[176.3360595703125,-37.05956083025124],[176.0064697265625,-36.29741818650809],[175.6768798828125,-36.05354012833974],[174.671630859375,-35.1782983520012],[173.1939697265625,-34.28445325435288],[172.6776123046875,-34.234512362369856],[172.386474609375,-34.40237742424137],[172.4798583984375,-34.71903991764788],[172.9852294921875,-35.32184842037683],[173.56201171875,-36.142310873529986],[174.30908203125,-37.077093191754415],[174.5562744140625,-38.052416771864834],[174.4793701171875,-38.655488159952995],[174.3255615234375,-38.865374851611634],[173.7982177734375,-38.95940879245421],[173.60595703125,-39.232253141714885],[173.6993408203125,-39.56335316582929],[174.5892333984375,-39.95606977009003],[174.9847412109375,-40.216635475391215],[174.9847412109375,-40.49291502689579],[174.7210693359375,-40.805493843894155],[174.1497802734375,-40.65147128144056],[173.2818603515625,-40.43440488077009],[172.5897216796875,-40.350730565917885],[172.0843505859375,-40.534676780615406],[171.7657470703125,-40.826280356677124],[171.57348632812497,-41.3974150664646],[171.2823486328125,-41.652392884268124],[170.8758544921875,-42.53284428171312],[170.35400390625,-42.87193842444846],[168.277587890625,-43.92954993561458],[167.6239013671875,-44.47691085722324],[166.55273437499997,-45.38687734827038],[166.27258300781247,-45.916765867649],[166.4813232421875,-46.22545288226937],[167.6788330078125,-46.471916320870406],[167.2503662109375,-47.21956811231548]]],"terms_url":"https://www.linz.govt.nz/data/licensing-and-using-data/attributing-elevation-or-aerial-imagery-data","terms_text":"Sourced from LINZ CC-BY 3.0","best":true},{"id":"LINZ_NZ_Topo50_Gridless_Maps","name":"LINZ NZ Topo50 Gridless Maps","type":"tms","template":"https://tiles-a.data-cdn.linz.govt.nz/services;key=3197c6d0e5cb494a95d58dc2de3216c2/tiles/v4/layer=2343/EPSG:3857/{zoom}/{x}/{y}.png","scaleExtent":[0,21],"polygon":[[[167.2503662109375,-47.21956811231548],[167.244873046875,-47.28016067076474],[167.5030517578125,-47.37975438400816],[168.2501220703125,-47.15610477504402],[168.7445068359375,-46.79629898997744],[169.3267822265625,-46.75491661928188],[169.78271484375,-46.604167162931844],[170.4254150390625,-46.11132565729794],[170.804443359375,-45.95114968669139],[170.9527587890625,-45.440862671781744],[171.309814453125,-44.91035917458493],[171.40869140625,-44.39061697878681],[172.562255859375,-43.92954993561458],[172.90283203125,-43.96909818325171],[173.1610107421875,-43.90976594390799],[173.2598876953125,-43.69567969789881],[172.9742431640625,-43.53660274231031],[172.760009765625,-43.37710501700071],[173.1500244140625,-43.17714134663171],[173.704833984375,-42.63395872267314],[174.36401367187497,-41.78360106648077],[174.320068359375,-41.409775832009544],[174.84741210937497,-41.52914198872309],[175.0726318359375,-41.70572851523751],[175.506591796875,-41.672911819602085],[176.2261962890625,-41.10832999732831],[176.8304443359375,-40.42604212826493],[177.17102050781247,-39.67337039176559],[177.0391845703125,-39.39375459224347],[177.4456787109375,-39.18117526158747],[177.60498046875,-39.3300485529424],[177.978515625,-39.368279149160124],[178.3355712890625,-38.65977773071253],[178.7091064453125,-37.74465712069938],[178.626708984375,-37.54457732085582],[178.3135986328125,-37.43125050179357],[177.6214599609375,-37.37888785004525],[177.0391845703125,-37.39634613318924],[176.561279296875,-37.37015718405751],[176.3360595703125,-37.05956083025124],[176.0064697265625,-36.29741818650809],[175.6768798828125,-36.05354012833974],[174.671630859375,-35.1782983520012],[173.1939697265625,-34.28445325435288],[172.6776123046875,-34.234512362369856],[172.386474609375,-34.40237742424137],[172.4798583984375,-34.71903991764788],[172.9852294921875,-35.32184842037683],[173.56201171875,-36.142310873529986],[174.30908203125,-37.077093191754415],[174.5562744140625,-38.052416771864834],[174.4793701171875,-38.655488159952995],[174.3255615234375,-38.865374851611634],[173.7982177734375,-38.95940879245421],[173.60595703125,-39.232253141714885],[173.6993408203125,-39.56335316582929],[174.5892333984375,-39.95606977009003],[174.9847412109375,-40.216635475391215],[174.9847412109375,-40.49291502689579],[174.7210693359375,-40.805493843894155],[174.1497802734375,-40.65147128144056],[173.2818603515625,-40.43440488077009],[172.5897216796875,-40.350730565917885],[172.0843505859375,-40.534676780615406],[171.7657470703125,-40.826280356677124],[171.57348632812497,-41.3974150664646],[171.2823486328125,-41.652392884268124],[170.8758544921875,-42.53284428171312],[170.35400390625,-42.87193842444846],[168.277587890625,-43.92954993561458],[167.6239013671875,-44.47691085722324],[166.55273437499997,-45.38687734827038],[166.27258300781247,-45.916765867649],[166.4813232421875,-46.22545288226937],[167.6788330078125,-46.471916320870406],[167.2503662109375,-47.21956811231548]]],"terms_url":"https://data.linz.govt.nz/layer/2343-nz-mainland-topo50-gridless-maps","terms_text":"Sourced from the LINZ Data Service and licensed by LINZ for re-use under the Creative Commons Attribution 3.0 New Zealand licence."},{"id":"ORT10LT","name":"Lithuania - NŽT ORT10LT","type":"tms","template":"https://ort10lt.openmap.lt/g16/{zoom}/{x}/{y}.jpeg","endDate":"2016-01-01T00:00:00.000Z","startDate":"2010-01-01T00:00:00.000Z","scaleExtent":[4,18],"polygon":[[[26.2138385,55.850748],[26.3858298,55.7045315],[26.6303618,55.6806692],[26.6205349,55.5689227],[26.5242191,55.5099228],[26.5541476,55.388833],[26.4399286,55.3479351],[26.7919694,55.3212027],[26.8291304,55.2763488],[26.7434625,55.2539863],[26.6764846,55.158828],[26.4611191,55.1285624],[26.3577434,55.1505399],[26.2296342,55.1073177],[26.2713814,55.0775905],[26.2085126,54.997414],[26.0619117,54.9416094],[25.8578176,54.9276001],[25.7429827,54.8150641],[25.7626083,54.5769013],[25.5319352,54.3418175],[25.6771618,54.3238109],[25.7857293,54.2336242],[25.7858844,54.1550594],[25.5550843,54.1461918],[25.5109462,54.1750267],[25.5896725,54.2285838],[25.5136246,54.3078472],[25.2689287,54.2744706],[25.0705963,54.1336282],[24.9573726,54.1720575],[24.8133801,54.144862],[24.7790172,54.0999054],[24.8712786,54.034904],[24.819568,53.9977218],[24.6845912,53.9621091],[24.697865,54.0171421],[24.6259068,54.0105048],[24.4342619,53.9014424],[24.3520594,53.8967893],[24.2016059,53.9700069],[23.9683341,53.9266977],[23.9130177,53.9696842],[23.7781192,53.8989169],[23.7097655,53.9394502],[23.5370435,53.9430702],[23.4822428,53.9893848],[23.5273356,54.0473482],[23.4858579,54.1532339],[23.3867851,54.224838],[23.0421216,54.3159745],[23.0102115,54.3827959],[22.8546899,54.4104029],[22.7919963,54.3633227],[22.7023421,54.4528985],[22.6838586,54.585972],[22.7489713,54.6319792],[22.7429727,54.7268221],[22.8866837,54.8135001],[22.8204005,54.9119829],[22.6424041,54.9713362],[22.5892361,55.070243],[22.080597,55.0244812],[22.0324081,55.084098],[21.9130671,55.0816838],[21.6491949,55.1808113],[21.5015124,55.1868198],[21.3843708,55.2936996],[21.2709829,55.2450059],[21.0983616,55.2563884],[20.9421741,55.282453],[21.0863466,55.5618266],[21.0399547,55.8363584],[21.0640261,56.0699542],[21.2047804,56.0811668],[21.2307958,56.1623302],[21.5021038,56.2954952],[21.7235874,56.3138211],[21.8356623,56.37162],[21.9695397,56.3766515],[22.0153001,56.4242811],[22.4372717,56.406405],[22.6800028,56.3515884],[22.9191739,56.3790184],[22.9466759,56.4146477],[23.0932498,56.3046383],[23.1703443,56.3667721],[23.3064522,56.3830535],[23.5571715,56.3338187],[23.7647953,56.3733238],[23.7666897,56.3238079],[24.0189971,56.3297615],[24.1214631,56.2488984],[24.2857421,56.3006367],[24.4541496,56.2581579],[24.5794651,56.2882389],[24.6284061,56.3753322],[24.9023767,56.4805317],[25.1277405,56.2059091],[25.5771398,56.182414],[25.6731232,56.1493667],[26.2138385,55.850748]]],"terms_url":"https://www.geoportal.lt","terms_text":"NŽT ORT10LT","best":true},{"id":"mapbox_locator_overlay","name":"Locator Overlay","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/openstreetmap.map-inh76ba2/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","scaleExtent":[0,16],"overzoom":false,"terms_url":"https://www.mapbox.com/about/maps","terms_text":"Terms & Feedback","default":true,"description":"Shows major features to help orient you.","overlay":true},{"id":"Loire_Atlantique-Orthophotos-2012","name":"Loire-Atlantique - Orthophotos 2012 - 20 cm","type":"tms","template":"http://{switch:a,b,c,d,e,f,g,h}.tiles.cg44.makina-corpus.net/ortho-2012/{zoom}/{x}/{-y}.jpg","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","scaleExtent":[0,19],"polygon":[[[-1.4863838,46.8769078],[-1.5443674,46.8487272],[-1.7346797,46.8724645],[-1.8927568,46.9423436],[-1.9547478,46.980844],[-2.070671,47.0852054],[-2.2678023,47.1265555],[-2.2262684,47.1712448],[-2.1921733,47.1691377],[-2.1934131,47.2554621],[-2.2969381,47.2276852],[-2.4165807,47.2533583],[-2.5486216,47.2857476],[-2.6391284,47.4167844],[-2.5057256,47.5081195],[-2.3106273,47.5302088],[-2.2483636,47.5238409],[-2.2322311,47.5149928],[-2.1210893,47.5467415],[-2.117832,47.6012606],[-2.1001019,47.6112276],[-2.099813,47.6200473],[-2.1114061,47.6287298],[-2.1005485,47.6514139],[-2.0812094,47.6657768],[-1.9801641,47.7075082],[-1.8307658,47.7241914],[-1.6745485,47.7254424],[-1.6373539,47.7746256],[-1.4960144,47.8175187],[-1.499114,47.8416565],[-1.3813311,47.8441529],[-1.3459962,47.810858],[-1.230073,47.7858729],[-1.216435,47.7583753],[-1.2263536,47.7362834],[-1.2108558,47.7316971],[-1.1866793,47.7346157],[-1.1519644,47.6933233],[-1.1315073,47.6365449],[-1.0912132,47.6332031],[-0.9926475,47.6026991],[-0.9845887,47.585977],[-1.0317018,47.5500064],[-1.1358467,47.5562822],[-1.1327472,47.5161046],[-1.0317018,47.5177793],[-0.9486339,47.5010301],[-0.9368556,47.4771532],[-0.9337561,47.4385923],[-0.9009008,47.3987442],[-0.926937,47.3748209],[-0.9715706,47.358446],[-1.2833853,47.3273618],[-1.2337925,47.2609316],[-1.2003173,47.2693451],[-1.1649825,47.2495712],[-1.1414259,47.1763017],[-1.1563037,47.1581792],[-1.2065164,47.1240248],[-1.2083762,47.1096818],[-1.1556838,47.1050406],[-1.140806,47.0805621],[-1.0943127,47.0716964],[-1.0998919,47.0319939],[-1.1445254,47.0163582],[-1.2158151,47.0290362],[-1.2672676,47.0632516],[-1.285245,47.0218524],[-1.3497157,47.0239654],[-1.3391772,46.9690007],[-1.3490957,46.9444597],[-1.4501411,46.9118621],[-1.4750393,46.9176026],[-1.4877512,46.9306253],[-1.4923538,46.9843293],[-1.4864362,46.9994285],[-1.4921346,47.0272238],[-1.5276404,47.0054072],[-1.5296129,46.9725161],[-1.5050657,46.944393],[-1.5022165,46.9297273],[-1.5114217,46.9137101],[-1.486217,46.8972388],[-1.4863838,46.8769078]]],"terms_url":"http://data.loire-atlantique.fr/licence","terms_text":"Département de Loire-Atlantique"},{"id":"Lombardia-Italy-CTR-DBT","name":"Lombardia - Italy (CTR DBT)","type":"wms","template":"https://www.cartografia.servizirl.it/arcgis/services/wms/ctr_wms/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Sfondo%20C.T.R.%2010000&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[8.4815995,45.2893842],[8.6308463,45.0137199],[8.7800932,44.9818911],[8.8677461,45.0271162],[9.0714799,44.8006338],[9.1496568,44.7905472],[9.1946678,44.6710553],[9.3154866,44.6575759],[9.3699736,44.6980046],[9.3794496,44.8275228],[9.3320696,44.9148254],[9.4102465,45.0371613],[9.7869171,45.0438571],[9.7869171,45.0003204],[9.938533,45.0019955],[9.933795,45.0890333],[10.0001269,45.0907058],[10.0001269,44.9969701],[10.2014917,45.0019955],[10.2014917,44.9500447],[10.4052255,44.9533977],[10.4052255,44.9047588],[10.4928784,44.9030808],[10.4928784,44.8627956],[10.6516012,44.8577579],[10.6468633,44.9030808],[11.3528245,44.8946904],[11.3551935,44.9366303],[11.4570604,44.9332763],[11.4475844,44.9735122],[11.3623005,45.0003204],[11.3528245,45.0923782],[11.2580646,45.095723],[11.2580646,45.137516],[11.1609357,45.1425291],[11.1609357,45.1826181],[11.0519618,45.1909664],[11.0519618,45.234358],[10.9572019,45.2326897],[10.9572019,45.2860508],[10.857704,45.284384],[10.855335,45.3227074],[10.7463612,45.3293697],[10.7534681,45.4740809],[10.6468633,45.4807254],[10.6030084,45.5107366],[10.5763572,45.4737864],[10.535492,45.5003598],[10.5911634,45.5314845],[10.6166585,45.613036],[10.874287,45.840014],[10.8221691,45.8598152],[10.6752912,45.8581654],[10.5734243,45.8102989],[10.5862444,46.0077329],[10.5016004,46.015957],[10.593248,46.1152934],[10.6089593,46.3558255],[10.6563392,46.3868822],[10.6468633,46.4603672],[10.4147015,46.5728517],[10.3270486,46.5679659],[10.2512407,46.6542168],[10.0735658,46.6249395],[10.0238169,46.5321233],[10.0285549,46.4358832],[10.0735658,46.3983197],[10.1209458,46.3966859],[10.0783038,46.3280229],[10.1446358,46.2658249],[10.1043628,46.247807],[9.9740679,46.4081214],[9.7111092,46.3689041],[9.6874192,46.3231151],[9.6187183,46.3067526],[9.5571244,46.3247511],[9.5026374,46.3901503],[9.4789475,46.525604],[9.2562617,46.5158234],[9.2254647,46.4407808],[9.2728447,46.3443791],[9.1709778,46.190438],[9.0430519,46.1280838],[9.0620039,46.0919516],[8.974351,46.0459311],[8.988565,46.0015177],[8.938816,45.9735355],[9.0406829,45.8960992],[9.0193619,45.8482654],[8.8487941,46.0080997],[8.8985431,46.0705897],[8.8251041,46.1182319],[8.7090233,46.1165897],[8.6782263,46.0755201],[8.7184992,46.014681],[8.5550384,45.9043422],[8.5976804,45.8383636],[8.5337174,45.7937837],[8.6877023,45.4923513],[8.7800932,45.4159083],[8.6853333,45.379312],[8.7113923,45.3410269],[8.6948093,45.3210417],[8.6284773,45.377648],[8.5123965,45.3576757],[8.4815995,45.2893842]]],"terms_url":"https://www.dati.gov.it/content/italian-open-data-license-v20","terms_text":"CTR DBT 10000 Regione Lombardia"},{"id":"Lombardia-Italy-CTR","name":"Lombardia - Italy (CTR)","type":"wms","template":"https://www.cartografia.regione.lombardia.it/ArcGIS10/services/wms/ctr_wms/MapServer/WMSServer?STYLES=&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[8.4815995,45.2893842],[8.6308463,45.0137199],[8.7800932,44.9818911],[8.8677461,45.0271162],[9.0714799,44.8006338],[9.1496568,44.7905472],[9.1946678,44.6710553],[9.3154866,44.6575759],[9.3699736,44.6980046],[9.3794496,44.8275228],[9.3320696,44.9148254],[9.4102465,45.0371613],[9.7869171,45.0438571],[9.7869171,45.0003204],[9.938533,45.0019955],[9.933795,45.0890333],[10.0001269,45.0907058],[10.0001269,44.9969701],[10.2014917,45.0019955],[10.2014917,44.9500447],[10.4052255,44.9533977],[10.4052255,44.9047588],[10.4928784,44.9030808],[10.4928784,44.8627956],[10.6516012,44.8577579],[10.6468633,44.9030808],[11.3528245,44.8946904],[11.3551935,44.9366303],[11.4570604,44.9332763],[11.4475844,44.9735122],[11.3623005,45.0003204],[11.3528245,45.0923782],[11.2580646,45.095723],[11.2580646,45.137516],[11.1609357,45.1425291],[11.1609357,45.1826181],[11.0519618,45.1909664],[11.0519618,45.234358],[10.9572019,45.2326897],[10.9572019,45.2860508],[10.857704,45.284384],[10.855335,45.3227074],[10.7463612,45.3293697],[10.7534681,45.4740809],[10.6468633,45.4807254],[10.6030084,45.5107366],[10.5763572,45.4737864],[10.535492,45.5003598],[10.5911634,45.5314845],[10.6166585,45.613036],[10.874287,45.840014],[10.8221691,45.8598152],[10.6752912,45.8581654],[10.5734243,45.8102989],[10.5862444,46.0077329],[10.5016004,46.015957],[10.593248,46.1152934],[10.6089593,46.3558255],[10.6563392,46.3868822],[10.6468633,46.4603672],[10.4147015,46.5728517],[10.3270486,46.5679659],[10.2512407,46.6542168],[10.0735658,46.6249395],[10.0238169,46.5321233],[10.0285549,46.4358832],[10.0735658,46.3983197],[10.1209458,46.3966859],[10.0783038,46.3280229],[10.1446358,46.2658249],[10.1043628,46.247807],[9.9740679,46.4081214],[9.7111092,46.3689041],[9.6874192,46.3231151],[9.6187183,46.3067526],[9.5571244,46.3247511],[9.5026374,46.3901503],[9.4789475,46.525604],[9.2562617,46.5158234],[9.2254647,46.4407808],[9.2728447,46.3443791],[9.1709778,46.190438],[9.0430519,46.1280838],[9.0620039,46.0919516],[8.974351,46.0459311],[8.988565,46.0015177],[8.938816,45.9735355],[9.0406829,45.8960992],[9.0193619,45.8482654],[8.8487941,46.0080997],[8.8985431,46.0705897],[8.8251041,46.1182319],[8.7090233,46.1165897],[8.6782263,46.0755201],[8.7184992,46.014681],[8.5550384,45.9043422],[8.5976804,45.8383636],[8.5337174,45.7937837],[8.6877023,45.4923513],[8.7800932,45.4159083],[8.6853333,45.379312],[8.7113923,45.3410269],[8.6948093,45.3210417],[8.6284773,45.377648],[8.5123965,45.3576757],[8.4815995,45.2893842]]],"terms_url":"https://www.dati.gov.it/content/italian-open-data-license-v20","terms_text":"Regione Lombardia - Infrastruttura per l'informazione territoriale"},{"id":"londrina2011","name":"Londrina Ortofoto 2011","type":"tms","template":"https://siglon.londrina.pr.gov.br/arcgis/rest/services/Imagens/Ortofotos_2011_Paranacidade/MapServer/WMTS/tile/1.0.0/Imagens_Ortofotos_2011_Paranacidade/default/GoogleMapsCompatible/{zoom}/{y}/{x}","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","polygon":[[[-51.10903142008701,-23.392750890870328],[-51.110147219037096,-23.39111628244602],[-51.111981850003126,-23.389599820448623],[-51.11358044657587,-23.38976722295012],[-51.120999436701226,-23.38592675938185],[-51.12224934611127,-23.385109415587607],[-51.12483499560139,-23.383504255873166],[-51.12538216624037,-23.38186953335707],[-51.12482426676533,-23.37770385409619],[-51.12445948633935,-23.375054689723584],[-51.124373655650885,-23.372297138974446],[-51.12244246516032,-23.37032742475139],[-51.12302182230749,-23.366427304263887],[-51.128557901713755,-23.36548180323493],[-51.12832186732048,-23.358843408308623],[-51.12477062258506,-23.35475580404945],[-51.12703440699343,-23.35091432623551],[-51.12411616358548,-23.34679692655685],[-51.12025378260435,-23.347811512977742],[-51.1176466754421,-23.33969460448754],[-51.11264703783877,-23.341290443649072],[-51.109396200513004,-23.33488726938344],[-51.10756156954697,-23.334089313725826],[-51.10485790286019,-23.333980949007543],[-51.10252974543546,-23.334187827029368],[-51.09986899409291,-23.331015661953632],[-51.09801290545476,-23.329360589233605],[-51.09998701128955,-23.32830645478855],[-51.10322711977927,-23.325321337105603],[-51.10472915682748,-23.323193291476684],[-51.104664783811145,-23.321291814470847],[-51.10514758143378,-23.318444474199904],[-51.1063599399084,-23.3157547161216],[-51.10660670313775,-23.31467091543279],[-51.11050127062705,-23.311665785493048],[-51.111584883068964,-23.30842411016493],[-51.099504213666904,-23.309468549142686],[-51.09740136179941,-23.308631027972474],[-51.09511611971892,-23.307448636164267],[-51.09201548609798,-23.3049360186679],[-51.09036324534495,-23.3037141796735],[-51.09204767260616,-23.29874787986134],[-51.09269140276969,-23.297496421894902],[-51.09407542262125,-23.292953629109174],[-51.10073802981369,-23.293318240761657],[-51.10101697955121,-23.28870632248831],[-51.10068438563339,-23.28837126237015],[-51.10084531817427,-23.28777997775132],[-51.09937546763423,-23.28663682004102],[-51.09631774935752,-23.277914991984613],[-51.10285161051725,-23.273016720553397],[-51.10835550341534,-23.27033590016574],[-51.11309764895328,-23.268404099092194],[-51.13160489115448,-23.265338785827712],[-51.13188384089201,-23.262007272160396],[-51.1317336371872,-23.255058136908826],[-51.13290308031759,-23.254683563301587],[-51.132956724497895,-23.250750476893938],[-51.13473771128364,-23.2512729236245],[-51.13533852610292,-23.25133206840842],[-51.13516686472599,-23.24359373640034],[-51.13534925493897,-23.24117849627157],[-51.137516479822814,-23.24219388826517],[-51.13884685549409,-23.243495156026544],[-51.14108918223035,-23.24521044413634],[-51.1471724322756,-23.243179698340864],[-51.14761231455401,-23.23828015040167],[-51.149082165094036,-23.235884531292832],[-51.14976881060179,-23.236811236789336],[-51.15138886484666,-23.23853646924079],[-51.15289090189487,-23.238842079520833],[-51.15383503946804,-23.238950521710013],[-51.15820167574391,-23.238142132361276],[-51.16045473131624,-23.238161849232945],[-51.160347442955654,-23.24658068718069],[-51.15912435564498,-23.2478326235554],[-51.16131303820094,-23.247773477219496],[-51.166591625541805,-23.245939927797],[-51.17193458589902,-23.245821633420345],[-51.17205260309565,-23.249557713480034],[-51.174241285651625,-23.248404370116877],[-51.17514250788055,-23.2493211310392],[-51.176859121649926,-23.248157927934038],[-51.179466228812196,-23.251686936561047],[-51.18135450395853,-23.253806268366073],[-51.18273852381009,-23.253628837227893],[-51.18378994974384,-23.253264116924615],[-51.18495939287424,-23.253303546194683],[-51.18626831087339,-23.252150235227905],[-51.18665454897149,-23.247477745146526],[-51.191182117788244,-23.249143693933142],[-51.19141815218154,-23.252859966234126],[-51.19369266542598,-23.252781107419985],[-51.1938428691308,-23.26073575534214],[-51.20096681627374,-23.26054847664639],[-51.20126722368338,-23.24259807127726],[-51.209936123218775,-23.242775517090898],[-51.21090171846407,-23.26988252079656],[-51.21968863519614,-23.27221839365197],[-51.225965004290465,-23.2745345140599],[-51.22934458764894,-23.27860487489667],[-51.234515886629225,-23.28160089636689],[-51.23497722657975,-23.283246708422755],[-51.235073786104266,-23.285444377831148],[-51.23371122392482,-23.285897704227196],[-51.232155542696304,-23.28801649191402],[-51.22870085748543,-23.292293383844925],[-51.227402668322334,-23.294599300809004],[-51.22679112466699,-23.295476327114592],[-51.225600223864475,-23.29657013833941],[-51.22392652543933,-23.297210654251764],[-51.220482569064515,-23.30072850975029],[-51.21863720926242,-23.301300029310937],[-51.21668456109974,-23.30211788923888],[-51.21423838647836,-23.30441378240661],[-51.210966091480465,-23.306965823153238],[-51.22328279527583,-23.318296686707587],[-51.224387865389886,-23.31459209321986],[-51.22521398576639,-23.312887551432937],[-51.22511742624187,-23.312582111000477],[-51.22521398576639,-23.312513140483127],[-51.2255251220121,-23.312532846348883],[-51.22595427545445,-23.312385052284572],[-51.22616885217561,-23.31183328632629],[-51.22935531648505,-23.314887676277397],[-51.22802494081377,-23.31661189768144],[-51.227885465945,-23.31901591762422],[-51.22767088922384,-23.320227763653186],[-51.22723100694544,-23.321508564518947],[-51.2273919394863,-23.322227778055023],[-51.22725246461755,-23.322848466059934],[-51.230331640566384,-23.325577488448165],[-51.23046038659909,-23.326710459617892],[-51.229537706698046,-23.32789268010374],[-51.229162197436,-23.330503379743732],[-51.229290943468705,-23.33178408156439],[-51.22681258233914,-23.334473515196468],[-51.2260186484708,-23.336571826694826],[-51.22473118814376,-23.33839427691611],[-51.22210262330938,-23.340226553005806],[-51.22257469209598,-23.34196029634743],[-51.22380850824271,-23.343388647432523],[-51.22384069475089,-23.345309509145306],[-51.22440932306201,-23.347003784611864],[-51.2245380690947,-23.348294177581966],[-51.22404454263601,-23.34968305981433],[-51.22350810083308,-23.35010661675208],[-51.22381923707877,-23.35076657486812],[-51.22304676088255,-23.35174173085325],[-51.22259614976809,-23.35296312824164],[-51.22586844476598,-23.35480505304304],[-51.22650144609346,-23.36705763453823],[-51.22354028734128,-23.369145582171885],[-51.22366903337377,-23.37968330666716],[-51.220375280703756,-23.381633186264455],[-51.216469984378406,-23.38170212087667],[-51.21416328462579,-23.379949201028825],[-51.2092816642191,-23.37395167630701],[-51.20738266023672,-23.368141007697016],[-51.20628831895872,-23.36723491438801],[-51.20472190889416,-23.366269721227162],[-51.198230963078665,-23.366683376299132],[-51.19297383340994,-23.366506095711998],[-51.18986247095292,-23.3654424072124],[-51.18806002649507,-23.36464463523902],[-51.18718026193825,-23.3645264463904],[-51.18579624208668,-23.363738518041337],[-51.183038931219606,-23.36359078095478],[-51.18071077379488,-23.3637582163071],[-51.179069261877906,-23.361581540240305],[-51.177642326682125,-23.35836078207346],[-51.16683838877106,-23.356262814974126],[-51.166141014427254,-23.358538073547532],[-51.16475699457568,-23.360389770338585],[-51.16076586756186,-23.359217688669915],[-51.15983245882475,-23.36660458495632],[-51.162042599052846,-23.36861374957437],[-51.16276143106877,-23.374158492021696],[-51.158448438973174,-23.37580315788644],[-51.155047397942575,-23.376305417047273],[-51.15396378550066,-23.37903334042617],[-51.15298746141932,-23.381052164536694],[-51.15118501696147,-23.382076336717283],[-51.149167995782435,-23.382509637949354],[-51.14721534761976,-23.382155118864866],[-51.14517686876862,-23.382588419839323],[-51.14410398516276,-23.38376029492248],[-51.14512322458833,-23.388083341091015],[-51.141797285410156,-23.389402876058366],[-51.14030597719799,-23.38880219385971],[-51.14068148646006,-23.391608636504017],[-51.14127157244328,-23.393538646762796],[-51.14093897852546,-23.394434713394368],[-51.140456180902824,-23.39536031431835],[-51.13939402613302,-23.395104297688697],[-51.13738773379004,-23.393154616350518],[-51.13608954462695,-23.389796764546077],[-51.13428710016909,-23.389757375749994],[-51.132162790629465,-23.390072485790583],[-51.13172290835106,-23.39285920758337],[-51.12259266886514,-23.38864463742227],[-51.12228153261944,-23.391657871809155],[-51.11882684740854,-23.393174310244916],[-51.115683298443365,-23.393351555162592],[-51.10903142008701,-23.392750890870328]],[[-51.13829432042955,-23.41600741009485],[-51.133310776080314,-23.418665600378624],[-51.132087688769644,-23.416440600302334],[-51.13002238782791,-23.418291487939495],[-51.12868664773901,-23.419010176689888],[-51.12824140104259,-23.42102839134528],[-51.12696466955051,-23.421860280620358],[-51.12532852205271,-23.422692164660027],[-51.1244541219139,-23.420969322085504],[-51.1215144208339,-23.424109801147612],[-51.12063465627703,-23.423268081315832],[-51.11970661195797,-23.423120410617486],[-51.11977098497433,-23.42156985833077],[-51.1188000253111,-23.421545246243184],[-51.11643431696008,-23.420836416154565],[-51.11942766222045,-23.419167696990424],[-51.11787198099193,-23.416775337218567],[-51.116546969738685,-23.41730697646229],[-51.115699391690086,-23.415702207051474],[-51.115120034542905,-23.413088261827834],[-51.119078975048524,-23.411114231305813],[-51.119599323597356,-23.41169512115064],[-51.12052200349841,-23.41489489238112],[-51.12147686990764,-23.417139608782644],[-51.12308619531643,-23.418626220171642],[-51.12754939111684,-23.41653905242448],[-51.12803218873949,-23.417395582795194],[-51.13119719537679,-23.415574218468866],[-51.13080022844262,-23.414766903017576],[-51.13278506311348,-23.41264029239725],[-51.13521514448077,-23.411055157619415],[-51.13585887464424,-23.410956701416854],[-51.13682446988958,-23.411188073376714],[-51.137205343569626,-23.411576974270133],[-51.13730190309418,-23.41324086645236],[-51.137430649126884,-23.414707830961888],[-51.13829432042955,-23.41600741009485]],[[-51.18929065852,-23.61469318354],[-51.18868716149,-23.61385268133],[-51.18817754178,-23.61338573333],[-51.18731118826,-23.61301708899],[-51.18628926663,-23.61314488581],[-51.18401743559,-23.61395590119],[-51.18348904042,-23.61396573165],[-51.18183143525,-23.61283522407],[-51.18140496401,-23.61344471632],[-51.18062980561,-23.61313505529],[-51.18001021533,-23.61409352754],[-51.17865838198,-23.61328742827],[-51.18064589886,-23.61060367181],[-51.17972321896,-23.61018095058],[-51.18061639456,-23.60849005203],[-51.1821157494,-23.60850479833],[-51.18260927586,-23.60775273479],[-51.18319936184,-23.60804274673],[-51.18415154605,-23.60627808786],[-51.18511177687,-23.60666149766],[-51.18649043231,-23.60469528171],[-51.18902243762,-23.60610112912],[-51.18821241049,-23.60741848294],[-51.18918873458,-23.60801816947],[-51.188899056,-23.60953211999],[-51.18962325244,-23.60992535103],[-51.1911896625,-23.6111935131],[-51.1901489654,-23.61244691705],[-51.19054056792,-23.6127565797],[-51.19029380469,-23.61377895281],[-51.18929065852,-23.61469318354]],[[-51.08005769639,-23.52984412096],[-51.07962317853,-23.52205317842],[-51.08468182473,-23.52194496764],[-51.08581908135,-23.52404030606],[-51.0858941832,-23.52703569673],[-51.08579494147,-23.52777346722],[-51.08530141501,-23.52806365581],[-51.08513511805,-23.52856533627],[-51.08512438922,-23.52981952906],[-51.08470864682,-23.53023759067],[-51.08343459754,-23.53023759067],[-51.08329512267,-23.52978018202],[-51.08005769639,-23.52984412096]]],"terms_url":"http://siglon.londrina.pr.gov.br","terms_text":"Prefeitura do Londrinas, PR"},{"id":"LPI_NSW_Administrative_Boundaries_County","name":"LPI NSW Administrative Boundaries County","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=4&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[159.0033934,-31.4876656],[159.0378887,-31.7055793],[159.3109766,-31.8595241],[159.3727807,-31.7789183],[159.1744327,-31.4373999],[159.0033934,-31.4876656]],[[140.998648,-28.9989332],[148.9451961,-28.9948656],[149.4856226,-28.5615019],[150.2991369,-28.5337256],[151.0954036,-28.7179218],[151.3943629,-28.9797786],[151.9894069,-28.7355674],[151.9290401,-28.4983634],[152.4924635,-28.2353023],[153.5790657,-28.1415563],[153.6969246,-28.6498321],[153.2584694,-30.9735401],[152.7543708,-32.508492],[151.9087862,-33.0553457],[151.2583364,-34.3808144],[151.0144178,-35.1156752],[150.4615355,-36.1202975],[150.4127518,-36.6178579],[149.9784687,-37.5069984],[148.2013511,-36.805656],[148.0791803,-36.8171632],[147.8854228,-36.0901856],[147.6902879,-36.0441802],[146.828442,-36.188678],[145.2348401,-35.9849909],[144.8445703,-36.2149218],[144.5193454,-36.1295974],[143.2021846,-35.1317425],[142.4785593,-34.811943],[140.9937045,-34.070169],[141.0025961,-34.0197399],[140.998648,-28.9989332]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"LPI_NSW_Administrative_Boundaries_LGA","name":"LPI NSW Administrative Boundaries LGA","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=6&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[159.0033934,-31.4876656],[159.0378887,-31.7055793],[159.3109766,-31.8595241],[159.3727807,-31.7789183],[159.1744327,-31.4373999],[159.0033934,-31.4876656]],[[140.998648,-28.9989332],[148.9451961,-28.9948656],[149.4856226,-28.5615019],[150.2991369,-28.5337256],[151.0954036,-28.7179218],[151.3943629,-28.9797786],[151.9894069,-28.7355674],[151.9290401,-28.4983634],[152.4924635,-28.2353023],[153.5790657,-28.1415563],[153.6969246,-28.6498321],[153.2584694,-30.9735401],[152.7543708,-32.508492],[151.9087862,-33.0553457],[151.2583364,-34.3808144],[151.0144178,-35.1156752],[150.4615355,-36.1202975],[150.4127518,-36.6178579],[149.9784687,-37.5069984],[148.2013511,-36.805656],[148.0791803,-36.8171632],[147.8854228,-36.0901856],[147.6902879,-36.0441802],[146.828442,-36.188678],[145.2348401,-35.9849909],[144.8445703,-36.2149218],[144.5193454,-36.1295974],[143.2021846,-35.1317425],[142.4785593,-34.811943],[140.9937045,-34.070169],[141.0025961,-34.0197399],[140.998648,-28.9989332]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"LPI_NSW_Administrative_Boundaries_NPWS_Reserve","name":"LPI NSW Administrative Boundaries NPWS Reserve","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=1&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[159.0033934,-31.4876656],[159.0378887,-31.7055793],[159.3109766,-31.8595241],[159.3727807,-31.7789183],[159.1744327,-31.4373999],[159.0033934,-31.4876656]],[[140.998648,-28.9989332],[148.9451961,-28.9948656],[149.4856226,-28.5615019],[150.2991369,-28.5337256],[151.0954036,-28.7179218],[151.3943629,-28.9797786],[151.9894069,-28.7355674],[151.9290401,-28.4983634],[152.4924635,-28.2353023],[153.5790657,-28.1415563],[153.6969246,-28.6498321],[153.2584694,-30.9735401],[152.7543708,-32.508492],[151.9087862,-33.0553457],[151.2583364,-34.3808144],[151.0144178,-35.1156752],[150.4615355,-36.1202975],[150.4127518,-36.6178579],[149.9784687,-37.5069984],[148.2013511,-36.805656],[148.0791803,-36.8171632],[147.8854228,-36.0901856],[147.6902879,-36.0441802],[146.828442,-36.188678],[145.2348401,-35.9849909],[144.8445703,-36.2149218],[144.5193454,-36.1295974],[143.2021846,-35.1317425],[142.4785593,-34.811943],[140.9937045,-34.070169],[141.0025961,-34.0197399],[140.998648,-28.9989332]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"LPI_NSW_Administrative_Boundaries_Parish","name":"LPI NSW Administrative Boundaries Parish","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=3&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[159.0033934,-31.4876656],[159.0378887,-31.7055793],[159.3109766,-31.8595241],[159.3727807,-31.7789183],[159.1744327,-31.4373999],[159.0033934,-31.4876656]],[[140.998648,-28.9989332],[148.9451961,-28.9948656],[149.4856226,-28.5615019],[150.2991369,-28.5337256],[151.0954036,-28.7179218],[151.3943629,-28.9797786],[151.9894069,-28.7355674],[151.9290401,-28.4983634],[152.4924635,-28.2353023],[153.5790657,-28.1415563],[153.6969246,-28.6498321],[153.2584694,-30.9735401],[152.7543708,-32.508492],[151.9087862,-33.0553457],[151.2583364,-34.3808144],[151.0144178,-35.1156752],[150.4615355,-36.1202975],[150.4127518,-36.6178579],[149.9784687,-37.5069984],[148.2013511,-36.805656],[148.0791803,-36.8171632],[147.8854228,-36.0901856],[147.6902879,-36.0441802],[146.828442,-36.188678],[145.2348401,-35.9849909],[144.8445703,-36.2149218],[144.5193454,-36.1295974],[143.2021846,-35.1317425],[142.4785593,-34.811943],[140.9937045,-34.070169],[141.0025961,-34.0197399],[140.998648,-28.9989332]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"LPI_NSW_Administrative_Boundaries_StateForest","name":"LPI NSW Administrative Boundaries State Forest","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=2&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[159.0033934,-31.4876656],[159.0378887,-31.7055793],[159.3109766,-31.8595241],[159.3727807,-31.7789183],[159.1744327,-31.4373999],[159.0033934,-31.4876656]],[[140.998648,-28.9989332],[148.9451961,-28.9948656],[149.4856226,-28.5615019],[150.2991369,-28.5337256],[151.0954036,-28.7179218],[151.3943629,-28.9797786],[151.9894069,-28.7355674],[151.9290401,-28.4983634],[152.4924635,-28.2353023],[153.5790657,-28.1415563],[153.6969246,-28.6498321],[153.2584694,-30.9735401],[152.7543708,-32.508492],[151.9087862,-33.0553457],[151.2583364,-34.3808144],[151.0144178,-35.1156752],[150.4615355,-36.1202975],[150.4127518,-36.6178579],[149.9784687,-37.5069984],[148.2013511,-36.805656],[148.0791803,-36.8171632],[147.8854228,-36.0901856],[147.6902879,-36.0441802],[146.828442,-36.188678],[145.2348401,-35.9849909],[144.8445703,-36.2149218],[144.5193454,-36.1295974],[143.2021846,-35.1317425],[142.4785593,-34.811943],[140.9937045,-34.070169],[141.0025961,-34.0197399],[140.998648,-28.9989332]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"LPI_NSW_Administrative_Boundaries_Suburb","name":"LPI NSW Administrative Boundaries Suburb","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=7&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[159.0033934,-31.4876656],[159.0378887,-31.7055793],[159.3109766,-31.8595241],[159.3727807,-31.7789183],[159.1744327,-31.4373999],[159.0033934,-31.4876656]],[[140.998648,-28.9989332],[148.9451961,-28.9948656],[149.4856226,-28.5615019],[150.2991369,-28.5337256],[151.0954036,-28.7179218],[151.3943629,-28.9797786],[151.9894069,-28.7355674],[151.9290401,-28.4983634],[152.4924635,-28.2353023],[153.5790657,-28.1415563],[153.6969246,-28.6498321],[153.2584694,-30.9735401],[152.7543708,-32.508492],[151.9087862,-33.0553457],[151.2583364,-34.3808144],[151.0144178,-35.1156752],[150.4615355,-36.1202975],[150.4127518,-36.6178579],[149.9784687,-37.5069984],[148.2013511,-36.805656],[148.0791803,-36.8171632],[147.8854228,-36.0901856],[147.6902879,-36.0441802],[146.828442,-36.188678],[145.2348401,-35.9849909],[144.8445703,-36.2149218],[144.5193454,-36.1295974],[143.2021846,-35.1317425],[142.4785593,-34.811943],[140.9937045,-34.070169],[141.0025961,-34.0197399],[140.998648,-28.9989332]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"NSW_LPI_BaseMap","name":"LPI NSW Base Map","type":"tms","template":"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Base_Map/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,19],"polygon":[[[140.9948644,-28.952966],[148.9611382,-28.8997729],[148.9870097,-28.4862285],[151.013609,-28.4786485],[151.1084711,-28.7032909],[151.8759917,-28.683118],[151.9334839,-28.4078753],[152.25544,-28.2332683],[153.0660798,-28.2104723],[153.1408196,-28.1090981],[153.4735137,-28.1164808],[153.3576523,-27.693606],[159.4938303,-27.699252],[159.4856997,-37.8474137],[149.5256879,-37.8281502],[149.9159578,-37.4869999],[148.0485886,-36.8131741],[147.9680996,-36.1567945],[146.7147701,-36.2866613],[145.3004625,-36.1567945],[144.5300673,-36.1475101],[142.8397973,-35.0254303],[142.356863,-34.7802471],[141.9774146,-34.4016159],[140.9950258,-34.1371824],[140.9948644,-28.952966]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017"},{"id":"NSW_LPI_Imagery","name":"LPI NSW Imagery","type":"tms","template":"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Imagery/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,21],"polygon":[[[140.9868688,-28.9887829],[148.9951472,-28.9727491],[148.9966717,-28.4915066],[151.0029027,-28.4930697],[151.0029027,-28.7261663],[151.4915093,-28.7323921],[151.4918687,-28.7155337],[151.9228213,-28.719635],[151.9251607,-28.4897139],[151.9955886,-28.4898718],[151.9989947,-28.1192742],[152.4967606,-28.122091],[152.4968241,-28.1146398],[153.0044563,-28.1154389],[153.0044563,-28.120397],[153.5038629,-28.119345],[153.5039264,-28.1227063],[153.5919395,-28.1223619],[153.5926582,-28.1776872],[153.6111186,-28.1757867],[153.6113881,-28.1825173],[153.7426846,-28.2162084],[153.7787253,-28.710911],[152.6237954,-32.5877239],[152.3123961,-32.6328837],[151.4141942,-33.5790388],[150.8929925,-35.2648721],[150.4620695,-35.7777256],[150.0156501,-37.5103569],[149.9918121,-37.5126787],[149.519778,-37.5130704],[149.5199577,-37.5216919],[149.4462958,-37.5353701],[149.063344,-37.5357975],[148.9836635,-37.5217631],[148.9816872,-37.5191982],[148.9863847,-37.2584972],[148.4875376,-37.265846],[148.4824774,-37.0092669],[147.994386,-37.014339],[147.988288,-36.5332184],[147.9529707,-36.5260725],[147.9486513,-36.0685992],[147.5034997,-36.0716798],[147.5047701,-36.2651047],[146.4919996,-36.266129],[146.4922536,-36.2565],[145.9929826,-36.2534267],[145.9965866,-36.0188147],[145.9831568,-36.0187058],[145.9624506,-36.0219026],[145.946236,-36.0120936],[145.9454275,-36.0060259],[145.5041534,-36.0013564],[145.5037941,-36.0109125],[145.0072008,-36.0036213],[145.0035404,-36.1520424],[144.4860806,-36.1423149],[144.4874127,-36.0137522],[143.9874676,-36.0024134],[143.9932853,-35.5723753],[143.4971691,-35.5837101],[143.4917967,-35.4065648],[143.4613438,-35.3674934],[143.4585591,-35.3555888],[143.4897755,-35.3396522],[143.4895509,-35.332214],[143.4316994,-35.2570613],[143.2505542,-35.2606556],[143.2438356,-35.0132729],[142.9933305,-35.0177207],[142.9919767,-34.7961882],[142.4971375,-34.8032323],[142.4973172,-34.8007613],[142.4211401,-34.8017571],[142.4209155,-34.7838306],[142.2330892,-34.7859191],[142.2307707,-34.7807542],[142.2269959,-34.5061271],[141.9975302,-34.5083733],[141.9945959,-34.2526687],[141.4982345,-34.2556921],[141.498171,-34.2522794],[140.9945397,-34.2528411],[140.9868688,-28.9887829]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","best":true},{"id":"NSW_LPI_Imagery_Dates","name":"LPI NSW Imagery Dates","type":"wms","template":"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Imagery_Dates/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=0&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[140.9868688,-28.9887829],[148.9951472,-28.9727491],[148.9966717,-28.4915066],[151.0029027,-28.4930697],[151.0029027,-28.7261663],[151.4915093,-28.7323921],[151.4918687,-28.7155337],[151.9228213,-28.719635],[151.9251607,-28.4897139],[151.9955886,-28.4898718],[151.9989947,-28.1192742],[152.4967606,-28.122091],[152.4968241,-28.1146398],[153.0044563,-28.1154389],[153.0044563,-28.120397],[153.5038629,-28.119345],[153.5039264,-28.1227063],[153.5919395,-28.1223619],[153.5926582,-28.1776872],[153.6111186,-28.1757867],[153.6113881,-28.1825173],[153.7426846,-28.2162084],[153.7787253,-28.710911],[152.6237954,-32.5877239],[152.3123961,-32.6328837],[151.4141942,-33.5790388],[150.8929925,-35.2648721],[150.4620695,-35.7777256],[150.0156501,-37.5103569],[149.9918121,-37.5126787],[149.519778,-37.5130704],[149.5199577,-37.5216919],[149.4462958,-37.5353701],[149.063344,-37.5357975],[148.9836635,-37.5217631],[148.9816872,-37.5191982],[148.9863847,-37.2584972],[148.4875376,-37.265846],[148.4824774,-37.0092669],[147.994386,-37.014339],[147.988288,-36.5332184],[147.9529707,-36.5260725],[147.9486513,-36.0685992],[147.5034997,-36.0716798],[147.5047701,-36.2651047],[146.4919996,-36.266129],[146.4922536,-36.2565],[145.9929826,-36.2534267],[145.9965866,-36.0188147],[145.9831568,-36.0187058],[145.9624506,-36.0219026],[145.946236,-36.0120936],[145.9454275,-36.0060259],[145.5041534,-36.0013564],[145.5037941,-36.0109125],[145.0072008,-36.0036213],[145.0035404,-36.1520424],[144.4860806,-36.1423149],[144.4874127,-36.0137522],[143.9874676,-36.0024134],[143.9932853,-35.5723753],[143.4971691,-35.5837101],[143.4917967,-35.4065648],[143.4613438,-35.3674934],[143.4585591,-35.3555888],[143.4897755,-35.3396522],[143.4895509,-35.332214],[143.4316994,-35.2570613],[143.2505542,-35.2606556],[143.2438356,-35.0132729],[142.9933305,-35.0177207],[142.9919767,-34.7961882],[142.4971375,-34.8032323],[142.4973172,-34.8007613],[142.4211401,-34.8017571],[142.4209155,-34.7838306],[142.2330892,-34.7859191],[142.2307707,-34.7807542],[142.2269959,-34.5061271],[141.9975302,-34.5083733],[141.9945959,-34.2526687],[141.4982345,-34.2556921],[141.498171,-34.2522794],[140.9945397,-34.2528411],[140.9868688,-28.9887829]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","overlay":true},{"id":"NSW_LPI_TopographicMap","name":"LPI NSW Topographic Map","type":"tms","template":"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Topo_Map/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,16],"polygon":[[[140.9988422,-28.9992444],[148.9502438,-28.9993736],[148.9498845,-28.9665265],[148.9998308,-28.9665265],[149.0000917,-28.8165829],[149.1000729,-28.8165829],[149.0997046,-28.7488533],[148.9998504,-28.7497444],[148.9998169,-28.5000304],[151.0000514,-28.5005192],[151.0005904,-28.7325849],[151.0239466,-28.7327424],[151.0241262,-28.7418794],[151.0329297,-28.7418794],[151.033828,-28.7505431],[151.999984,-28.7495314],[151.999984,-28.7164478],[152.0334014,-28.7166053],[152.0332217,-28.683196],[152.0000739,-28.6833537],[151.9998769,-28.6416273],[151.9829886,-28.6413908],[151.9831683,-28.624912],[151.9331321,-28.6247543],[151.9334122,-28.500071],[151.9998875,-28.5002289],[151.9998556,-28.3749591],[152.2499739,-28.3750718],[152.2499356,-28.2500066],[152.9997192,-28.2498563],[152.9998989,-28.2832447],[153.1165002,-28.2834029],[153.11659,-28.2498563],[153.1666262,-28.2500146],[153.166716,-28.2331582],[153.2499898,-28.2332373],[153.2500265,-28.1249689],[153.6249628,-28.1250833],[153.6248398,-28.4999134],[153.7497955,-28.4999924],[153.7495877,-28.7497976],[153.6248117,-28.7501127],[153.6249745,-28.9999333],[153.4997672,-29.0000612],[153.4998417,-29.4995077],[153.3747962,-29.500055],[153.3754111,-29.8750302],[153.4999113,-29.8751403],[153.4999113,-30.0000922],[153.2498947,-29.9997621],[153.250025,-30.1917704],[153.2748185,-30.1916151],[153.2748185,-30.2168467],[153.2166077,-30.2166139],[153.2166077,-30.250065],[153.250025,-30.250065],[153.2497502,-30.3751935],[153.1243608,-30.3749743],[153.1246457,-30.6250359],[153.0331676,-30.6250482],[153.0333884,-30.8750837],[153.1249214,-30.8750291],[153.1249344,-31.1250505],[153.0082433,-31.1249736],[153.0082914,-31.2499759],[153.0000019,-31.250003],[152.9999392,-31.6249919],[152.8749386,-31.6250491],[152.8749572,-31.749954],[152.7832899,-31.7500034],[152.7831966,-31.8748579],[152.749914,-31.8750105],[152.7500397,-32.0000207],[152.6249044,-31.9999446],[152.6249078,-32.5000047],[152.4999757,-32.4999569],[152.5000336,-32.5666443],[152.4166699,-32.5663415],[152.4167598,-32.6249954],[152.3498477,-32.624991],[152.3498477,-32.6332294],[152.2830786,-32.6332218],[152.2832583,-32.6249755],[152.2494816,-32.6249755],[152.2498101,-32.874906],[151.8745693,-32.8750443],[151.8748535,-33.0000091],[151.7497706,-33.0001533],[151.7504669,-33.2500398],[151.6252418,-33.2497393],[151.6250828,-33.3751621],[151.499585,-33.3751442],[151.5003127,-33.6249385],[151.3741466,-33.6243658],[151.3727902,-34.001962],[151.2477819,-34.0011194],[151.2477819,-34.2493114],[150.9957327,-34.2501515],[151.0008143,-34.62483],[150.8717407,-34.6265026],[150.872757,-35.1242738],[150.7670589,-35.1234425],[150.7690916,-35.2463774],[150.6257894,-35.2496974],[150.6280314,-35.3751485],[150.4999742,-35.3751485],[150.4959088,-35.6275034],[150.3719169,-35.6250251],[150.3749658,-35.7537957],[150.2672351,-35.7513213],[150.2652024,-35.8741232],[150.2479249,-35.870829],[150.2458922,-36.374885],[150.1229166,-36.374885],[150.1259656,-36.6224345],[150.0253491,-36.6240658],[150.0283981,-36.7471337],[149.9928266,-36.7495768],[150.0040062,-37.1224477],[150.0588879,-37.1273097],[150.0568553,-37.37809],[149.9979083,-37.3732441],[149.9999409,-37.4830073],[149.987745,-37.4846202],[149.9857123,-37.5080043],[148.0684571,-36.80624],[147.9930603,-36.1379955],[147.8148345,-36.0055567],[147.3893924,-36.0113701],[147.3822059,-36.1310306],[146.9972549,-36.1275479],[146.9886311,-36.2528271],[146.4956356,-36.2447132],[146.5042595,-36.126387],[145.0011817,-36.0079505],[145.0154103,-36.2542074],[144.5072465,-36.2476506],[144.4991158,-36.0211037],[143.9965422,-35.9810531],[143.3382568,-35.2331794],[142.4097581,-34.7669434],[142.0361436,-34.3758837],[140.9965216,-34.1385805],[140.9988422,-28.9992444]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017"},{"id":"orthophoto_lyon_2012","name":"Lyon Orthophoto 2012-03 10cm","type":"wms","template":"https://download.data.grandlyon.com/wms/grandlyon?language=fre&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1830_5150_10cm_CC46,1830_5155_10cm_CC46,1830_5160_10cm_CC46,1830_5165_10cm_CC46,1830_5170_10cm_CC46,1830_5175_10cm_CC46,1830_5180_10cm_CC46,1830_5185_10cm_CC46,1830_5190_10cm_CC46,1835_5150_10cm_CC46,1835_5155_10cm_CC46,1835_5160_10cm_CC46,1835_5165_10cm_CC46,1835_5170_10cm_CC46,1835_5175_10cm_CC46,1835_5180_10cm_CC46,1835_5185_10cm_CC46,1835_5190_10cm_CC46,1840_5150_10cm_CC46,1840_5155_10cm_CC46,1840_5160_10cm_CC46,1840_5165_10cm_CC46,1840_5170_10cm_CC46,1840_5175_10cm_CC46,1840_5180_10cm_CC46,1840_5185_10cm_CC46,1840_5190_10cm_CC46,1845_5150_10cm_CC46,1845_5155_10cm_CC46,1845_5160_10cm_CC46,1845_5165_10cm_CC46,1845_5170_10cm_CC46,1845_5175_10cm_CC46,1845_5180_10cm_CC46,1845_5185_10cm_CC46,1845_5190_10cm_CC46,1850_5155_10cm_CC46,1850_5160_10cm_CC46,1850_5165_10cm_CC46,1850_5170_10cm_CC46,1850_5175_10cm_CC46,1850_5180_10cm_CC46,1850_5185_10cm_CC46,1855_5155_10cm_CC46,1855_5165_10cm_CC46,1855_5170_10cm_CC46,1855_5175_10cm_CC46,1855_5180_10cm_CC46,1855_5185_10cm_CC46,1860_5155_10cm_CC46,1860_5160_10cm_CC46,1860_5165_10cm_CC46,1860_5170_10cm_CC46,1860_5175_10cm_CC46,1860_5180_10cm_CC46,1860_5185_10cm_CC46,1865_5155_10cm_CC46,1865_5160_10cm_CC46,1865_5165_10cm_CC46,1865_5170_10cm_CC46&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2012-03-01T00:00:00.000Z","startDate":"2012-03-01T00:00:00.000Z","polygon":[[[4.690486,45.546522],[4.831309,45.546522],[4.831309,45.571307],[4.883437,45.571307],[4.883437,45.59745],[5.166222,45.59745],[5.166222,45.745327],[5.107934,45.745327],[5.107934,45.881452],[4.906982,45.881452],[4.906982,45.92107],[4.84377,45.92107],[4.84377,45.940115],[4.715432,45.940115],[4.715432,45.870179],[4.674581,45.870179],[4.674581,45.717805],[4.695675,45.717805],[4.690486,45.546522]]],"terms_url":"https://data.grandlyon.com/imagerie/orthophotographie-2012-du-grand-lyon","terms_text":"Grand Lyon Smart Data DSIT"},{"id":"orthophoto_lyon_2015_8cm","name":"Lyon Orthophoto 2015-05 8cm","type":"wms","template":"https://download.data.grandlyon.com/wms/grandlyon?language=fre&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1835_5155_8cm_CC46,1835_5160_8cm_CC46,1835_5165_8cm_CC46,1835_5170_8cm_CC46,1835_5180_8cm_CC46,1835_5175_8cm_CC46,1845_5175_8cm_CC46,1845_5180_8cm_CC46,1845_5185_8cm_CC46,1845_5190_8cm_CC46,1850_5165_8cm_CC46,1850_5160_8cm_CC46,1850_5155_8cm_CC46,1850_5170_8cm_CC46,1850_5175_8cm_CC46,1850_5180_8cm_CC46,1850_5185_8cm_CC46,1855_5155_8cm_CC46,1855_5160_8cm_CC46,1855_5185_8cm_CC46,1855_5180_8cm_CC46,1855_5175_8cm_CC46,1855_5170_8cm_CC46,1855_5165_8cm_CC46,1860_5160_8cm_CC46,1860_5155_8cm_CC46,1860_5165_8cm_CC46,1835_5185_8cm_CC46,1835_5190_8cm_CC46,1835_5195_8cm_CC46,1840_5160_8cm_CC46,1840_5155_8cm_CC46,1840_5150_8cm_CC46,1830_5195_8cm_CC46,1830_5190_8cm_CC46,1830_5175_8cm_CC46,1830_5170_8cm_CC46,1830_5165_8cm_CC46,1830_5160_8cm_CC46,1830_5155_8cm_CC46,1830_5180_8cm_CC46,1830_5185_8cm_CC46,1835_5150_8cm_CC46,1860_5170_8cm_CC46,1860_5175_8cm_CC46,1840_5180_8cm_CC46,1840_5175_8cm_CC46,1840_5185_8cm_CC46,1840_5190_8cm_CC46,1840_5195_8cm_CC46,1845_5150_8cm_CC46,1845_5155_8cm_CC46,1845_5160_8cm_CC46,1845_5170_8cm_CC46,1845_5165_8cm_CC46,1840_5170_8cm_CC46,1840_5165_8cm_CC46,1860_5180_8cm_CC46,1860_5185_8cm_CC46,1865_5155_8cm_CC46,1865_5160_8cm_CC46,1865_5165_8cm_CC46,1865_5170_8cm_CC46,1830_5150_8cm_CC46&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-05-01T00:00:00.000Z","startDate":"2015-05-01T00:00:00.000Z","polygon":[[[4.664889,45.546882],[4.882528,45.543476],[4.884346,45.597449],[5.166229,45.592416],[5.17217,45.745324],[5.107932,45.746531],[5.113048,45.88145],[4.906978,45.885083],[4.908215,45.921064],[4.84377,45.922124],[4.844965,45.958104],[4.677293,45.96069],[4.664889,45.546882]]],"terms_url":"https://data.grandlyon.com/imagerie/orthophotographie-2015-du-grand-lyon","terms_text":"Métropole de Lyon DINSI","best":true},{"id":"MainRoadsWA_Road_Hierarchy","name":"Main Roads WA Road Hierarchy","type":"wms","template":"https://services.slip.wa.gov.au/public/services/SLIP_Public_Services/Transport/MapServer/WMSServer?LAYERS=8&TRANSPARENT=TRUE&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}","projection":"EPSG:3857","scaleExtent":[0,21],"polygon":[[[129.00009155273438,-31.68764133578121],[128.99871826171875,-14.582254405707156],[127.08984375000001,-12.297068292853805],[124.76074218749999,-12.983147716796566],[121.2451171875,-15.707662769583505],[119.091796875,-17.602139123350838],[115.53222656249999,-18.854310361889812],[112.412109375,-20.46818922264095],[111.24755859375,-22.836945920943844],[111.005859375,-25.621715959845726],[111.64306640625,-29.668962525992505],[111.68701171875,-32.36140331527542],[112.1484375,-34.47033512121748],[113.35693359375,-36.10237644873643],[116.98242187499999,-36.703659597194545],[119.44335937499999,-36.949891786813275],[122.27783203125,-36.61552763134924],[125.9912109375,-35.406960932702],[127.59521484375,-34.57895241036947],[128.86962890625,-33.59631896113268],[129.00009155273438,-31.68764133578121]]],"terms_url":"https://catalogue.data.wa.gov.au/dataset/clss-road-hierarchy","terms_text":"Main Roads Western Australia","overlay":true},{"id":"major_isidoro","name":"Major Isidoro AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Major%20Isidoro&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.94048110193,-9.57587518044],[-36.94106045907,-9.48535688436],[-37.03214827722,-9.48605530547],[-37.03164402192,-9.57639356782],[-36.94048110193,-9.57587518044]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"Mapbox","name":"Mapbox Satellite","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmap/cj8gojt0i1eau2rnn7q4mdgu7/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJhNVlHd29ZIn0.ti6wATGDWOmCnCYen-Ip7Q","scaleExtent":[0,22],"terms_url":"https://www.mapbox.com/about/maps","terms_text":"Terms & Feedback","default":true,"description":"Satellite and aerial imagery.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAC0CAYAAABsb0igAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAJhxJREFUeNrsnf9VG0kSx9u8/X91EawcwcoRMERgEYFFBEAEiAiACCRHgBwB4wgsR4A2ArQRcFOm5m6WRWgkdfdU93w+782T7x4r9VT/qm9XdbdzAAAAAAAAkfiACcLy/Pw8qD5GLf98+eHDhzVWAwAAAAAECLwlLobVx1AFhgiNP/Wz/v8PYaWP8L16RJgs5f+rRMoK6wMAAAAAAiR/sVGoyBg1REdXlCpIfrqXyMmSWgIAAAAABEjagmNcPccqPAbGi7xWUSLRkhJBAgAAAAAIEPuiQwTHZxUcw8RfZ6WC5FslRhbULgAAAAAgQGyJDvkcZPqaEh1ZIEYAAAAAAAHSjeiQ/RtfqmeSsejYJkbuSNMCAAAAAARIWOEhguPctT8WN3eWKkTmmAIAAAAAECB+RIdEOC5UeAyo8jeRqMhd9dxyDwkAAAAAIED2Ex7D6uPK5b23IwTz6rnmrhEAAAAAQIDsJjwmVC9CBAAAAAAQIKGEB6lWYbh2pGYBAAAAAALkH+JjUn3cIDyCIeJDoiG3mAIAAAAAeitAKuFRqPDgVKs4yKlZl5UQKTEFAAAAAPRGgGi6lezzuKAKO2GuQoS0LAAAAADIW4DozeUzR7pV14j4OONmdQAAAADIUoBo1EPSrSZUmykWKkSIhgAAAABAHgKkEh+yx+O+eoZUmUlWKkJKTAEAAAAASQuQSnzIPo8bqioJ5KSsKWYAAAAAgOQEiKZcyV6PMdWUFGX1nJKSBQAAAADJCBBNuRLxwfG6abJSEbLEFAAAsKcfcMgCZElaMAACZJdBp3Av+z045SptOCULAAD28QOG1cejh686QYQA2OTI2KAzqT4eEB9ZIHV4r3UKAADQFl/zRoEpARAg28SHbDSfUSXZMavqlnoFAAAAgF/8ZkR8iIM6oTqyZVLVsfvw4cMZpgAAAADoN51HQBAfvRIhREIAAAAAECCID0CEAAAAAEDmAgTxgQgBAAAAAAQI4gMQIQAAAACQjwBBfAAiBAAAAAABEkt8TBEf8EqE3GAGAAAAAARICPEhwuMKk8MrLrisEAAAAAAB4lt8jByXDMJm5LLCAjMAAAAAIEB8iI9h9fGAqWEL9ypUAQAAAAABsrf4GIhjWT0DTA1bkDYy0zYDAAAAAJnyW+Dvlw3GrGq/z7J61tWzqp6/NvzN7w07Fhnbok7VO6VZAAAAACBAdkI3Fk8w8b/ERlk9P+XfHz58WO5p24E66yJG/tTPXCIH4+r9Lirb3NJcAAAAABAgbR1kcY45XvWFRfV8E+FROdUrH19Yfc9ahUz5yuZfxIGvnmHiNrup3qfcV6ABAAAAgF1C7QGRNJo+5/KL0Lisnv9UTvRp9cx9iY93RIlEVC6r52P1Pz9Vj0QQ1gnbkP0gAAAAAAiQ7ejFcn3d91FWz4mIAEkh0khFdGoxUv1TxMiZCqLUkDbEvTEAAAAACJB3xUdRfVz00I5LFR7ylFYKJQJIoy+pCpEL7gcBAAAAQIC8R98uG5QIx1nl4H+yJDw2iJFaiFy6tFKzSMUCAAAAQID8m8pJnLr0Nz/vgmwul1SreUqF1tOlRIikUm5pU6RiAQAAACBA/iE++uQkSvTgVDeXJ7nJW1OzJCXrxKWRlnXBLekAAAAACJAmfUm9qvd6LHJ4GU0bkxOzUngfjnUGAAAAQID8in7IvRNFD2y1UPGR1d0UGg2Rm8cvjRe10MstAQAAAKDPAsT1Y2V6nnLKVUshIntDJCXL8juyFwQAAACgzwJEV6SHPRAfZ31oDJqSZVmEDPWwAwAAAADomwDRo1Fzj370Rnw0RMjS2d6cfs6xvAAAAADp8tsB/61cOJizI9g78dEUIZWTL5vTHw3W8UDb3pTu6w89yU6e0Tt1XlbP2uo+KD0prX6HtxBRvbJ+Z09kmxX6z+KdP1vps8w5DZU6gx3GmUFL+8t4s8Jqrew6aMw/7516Ke15qb4KY3nKvuYBDcWic+qLUm41Z0D4NdA+GKxnGYA+MrEePNjLARKfdSLdtY5l4P9WPYuuJlgVTc132IVV4x3KPrSlRp0f6wQ/2rPvyeT/Xet+SW8K3saLvtWZptr62PN3Xb3vlD5jciwq1J7H7v2FrzZjeW3fEvvmL0B8DQ4WqY/axbm1LUIOmlgM2nh8SJttezS0rp5+qZ6J5z5zp5PrOoK9JvoOhaevlDKL/b7mtqKmE31trxB36Rxku0b5Bgf8/jxEu9O+ckgbK/e0SS2sQ9VZLb7vDEczOxMg1vtMBmPR8YHzXVv7fuvyygQPY1uTeeyFPh2HJp7qw98YXRXs8TlPntTo1jpt12UYG62rQQaD8lDf5VDG20RO9TxEqJNpqHoR4RFh7HlopLgkLWqrZxa5T0rdXOxS/57a5CyA/QpPNhnu+Jv3kevsh8XjzXUc8cF0R/t30WcmOe9rVP/hvkM/4aYLv87zOz/FvIxZ548nn/OqTycgVwpjHbcIMbl2PCH4ZJLB4HzhyRb3mwSsDsCxB/2x58HwIfI7PFhbjDBsq72FqK8fTNkB1nG+6zp7tDSe9tD+T7md8BhpwWinOTKmjxeojw4ild17vb31O/ucgnWeqVC/NhgOlRD0xIIjpGFsi/ZJnUGo79EVkx/uZdN+7He610n9oPcTgabvEHtxQH7vMRWnQIXmrCNbvVX/V2q/iYNNdTbUlcEHA3Umc8xMHY+iR/a/N2L/X31G7T9O3K4S8ZA9wjNn65oGseuDCpEY5VoE6KMXEepvGqDeyoMFiA5MI5cfpbX9BK/yj6042nJjuqW9McO+TJZ7tJ+JOqNdTgC1Ez/ao/y1Q931Ud9XPoRU6AnfvRwKYs3ZH6hTm2Q0KcIk/2jA8X3LyamdtJzTguqFjbFB+9+naP+GoL53tu+HG+u8NA1s48sA/tJ5yLFUv/s8kC0OEyDuZVNWbkgDsXjcblN0WImCWLRVrhG5Q8XHzEhxZIDfKc9cJ4UHQw51oe8wMlbPA13BvXe2TyQsdm0DGfdNcdJ+OPvR29pJKzKz/0Cd5Bvjfaa2/zgRu1oV1Nt8rB+h2rhuGr8LMJ+GXJQL0S+uNx12cbRLx3X2Vth8cGbtnO7G0YubBEmXIkTCigtD5hqzumpWfDSZtXFAG+LDWqRV2tiDFRHSSK9LJV2jjobMetw3C62zUUJ19qDRghzsP0rMSa5TWW8M27SOeqSaDl2P69NA/pJ8r++T5sYhRJN+p+/5ZPledtEuEZCk8xI3UHZ5TNsWZf6aiSFHO0Ro8aAOifQwLT52ESEWxcdrh2zUcT2P1U4pCu+Jnrw06GHftHiceRtuUheOjZTUFO1/YTElqyGoiwy6aMhU2xBZIyH6403sd99FgOSW6mIy9WrL2ctWoiAr5z+0eAg5pgbuytC4+GiKkPGGtj9z9leH61XJQUfjg4wN1lOutjFSIdcLEaIRhNQjPxPre6G29JnU7T+21GcSF9Sb+CWofC8wafrRte/53mfURsco33Pv9bZ7ho5aFm7o8tt8fmct9aqFyBgbmgBunZ0oyMhafn5HAiQVZq+jeSpKJgnZ+h5H6nAR0oN+KQt3N5m8S5GgcPycW5/p2v7q+OaaSjl0AaLcgVKxvGxI1/bke3F72eZgp7YRkNxSXFYWb9FucfOkNBQT+bi6IZ0oCOzDoOnA6wCY2oRWxDyiNzPx0XSo+tDWc6uze9pYP0WIRqmvetBnQ6TangUop4/FjRAbzy/b/FFbAZKbc3dttFxtOvY5UZBeiOTcGTUceOsn0mzsrzEib/obM5oMGBLftMduRUh0++t4PemJjb2LkECpWAdtSNf/1ned3ra9U++oRQGHma0iyMbzubVCtYh+NDsGUZB/M+Q0rOQ4DzQAxuQmwrjwQFMBY0xyu7k7McYxT8fSCOxVz2xcixBvfkWgVKxDxKjvNrTaRWS1iYDktrKccvSj6bhZWTG2JOaIgiQ4wCf+DkXguxJS33AO+XLFRbCdchHjnhCt475GvEIcOuI7FWuvDemBNp6f6cJ0K35r8TfHGTWmsm1oKCY7RD+anUIaz7TrsstG/qr8CyPOv2w4vGVeat8f3MuKxV/6v/9wL5vwUnEqZKCT1aTvjf/vT32HmFHbK7Wl73HhxnUbfS5fjTkjuowJVvr8zwFx3R1CIc7Zx12cjgyoxx0L9pcDPZahDtRR3+S+53auU95OPflMy8qut85vJossSs/btoNAG89vd/Wv2wiQnFaVrUY/zvdscLdGBv6vRtpJ4aCNUyn1tXiv7ejK2mdnMz1q7l5OsVtuGWDH2rdCO84SBRltO3Jwx4m/cHFTLaXs37R9LDe1DbXrSPvaZ0RJFCdsoSJ7uaXNj7Q+jrXtx4icDXw6Z9h/b/ufhBI4Ll4EtrZzucXOQ7XzZx2HYogSSXm7qMrla4HzWtvI0GM7uNmhH/red7ny7l/LJPicD48WRzeZ0Kvnac93mhp6jycj9ZyUYJY6jNX+90mX0JtuZ0bq9n6ffFwdx34ELtvMc7t4jNQmpofkOGv7uOm6/yfcLzfxcOhYJv+9fk9y464R+0882P8+UnknifYBGZcnh6Q46fgeY4568rkfJJB/XVj93RQHAdMd1ICNnwxdTGTFSU3qzP1IfWx2aDvRQasrJ/PJR/8NbOunhNrEk+b/+l5ImXbVRjKa+x58T+bad0MLkUefc1Fm9h9GsP+TZ/sPLS6ItShzaMH34LnMN7EX2gMsxt2Eco4envPgyRnkwOiHKWGlqxgWSGpTc4SJ9sLzAP8jdt999ngUYuB2OjIyJmyLIg0CtudhF/NGBgLk6Tlw9Fbbfsi2NU3c/heB7T9OyP4PKZTzHcH9mMJito73j7HsK23c8sLD68LmgslVcU+DbLgGYGvFpDNnJGEBMg1Q3sFznPQg7+Ijggi58FC2WUBbTiK264uU+3xkB1hE/TDiOP0jYBsbYP+t42dI537ooYzjgFGPUUQ731tv5w3B5Lt8w0iLWwctmhy9Y5ScNhdaurG7doAkVObjFAJpaI86YHcmRPT0hZUR+xYOFnrmuO96lk2ZstEtxuEHZz43djfeYe7CHEhxfGC7lb4cQiRIXZ3EvP9IN2vGaicpIyfXfAp1itFb47T8ngtzfLqZO6p2GSe1b8Sy/7p6Tly44+t9+BQhFmxlHP8UYjx/x84y/txab+d6ctSt5/JdbahXnz6i+BiLIALE5XO6SRlrcNlBeMyc35Mb6gb3qDmFw65sbaTO+34yjzh9Z6G+PNCNrq+5PXRw2/IO0wDt9dB+F1J8LGM3Qq2/E0TIu+LjrIsf1t8N4QRbuqOqjf1PuzhJMqD9x8+HbeieOP+nSi11DOrCzpeB5kLf7VzmU59+6qS5EPvs/8JfLz7GewLkz0wG+a8ZC49NyvxRUzliC5GfRuo8l7a7L5ehB3td4Q4lONcuzpHZviemQ4XveQA7diI+XonVUwdmxEdgJ7g+/to6Zcb2P8TR9D0GdSY+GnYWG98as/PrMoZYNLzZ8G8vc6ePOu1DBGTR1Q9HFB5vKuAOhMjSSJ0PXX9ZRky1CSUS7mJMWBoZnVuoNF159L1yfNql+GjYuXQBI3Ip9lFZJLCyWBFg3D5PwP4mRLGKkNKC/XWV3Kfft+5afDTsfBnAFzz3XMbS83w00r14vm88X/jKTshdgCxiN37d6HPRofDoUohYESBFj52baPuddMBcef5a6a+3OdprC599i8Ndb6UN3FbmrsPFIEOsVRiujdRLiD1dow7TgNtwZuzmdt/2H+65h/eL7/cyZuczz/PVMMDJdZee28KV83vjuddIzXsCJJU8zvf4Fll4TMXZdy/hLmsDcHAhYmmwSSgP2atzE3OjcSAHPuqigUYIVgbaqs+JbBniAAJPDkDf94NcW9mT2OgDUh7f0cyxYfsvjdk/RPrNTmIiwBh0a2kBJKCdPxsv48CzL+9VvB9taIxFJoN98BW3V8LjKgHhVguRh0D1bGVy7eNG9C5WmH1PMl97YreQztqlxcapE9el6y+l7p2yWDe+93R9MfiaK6PCvD6wwaf9x3v8vS/fJYSg9WVnsfHcstDWtmAxWrzwfTDM0TuqKXlnLORKaoLC4zUiPh4CCBErAmTYQwfnW+wf9LyauO5o1ex7x/XmcxVtYW3l8VV7kcl/6frJdY/KZzENy7r49bnyvWsa1rHPdmQs9SpkOx8EukDUWrQ4yMmamwRIDqvHwZwKddhTFR6bhMh9ZpN9HwVImfjvduWYrgz0wb44ucJdH/umZWGo4rD0PIYUhl5vFfJYb0/2l3Fo0ZH9xx7tPE/Azj7LeBygjEGP0rciKo9wxvYeqE+dnXsvDnW+zvTSnpz4vWcOzsr4qlOniwZb+nNnK/K6SulrEaO0lt++wd5zZydSiuj6Jz5TIC0dh37dw3bSyjH2PAZ9TcTOPttDEKFtKBUrWOroUQIDx77OWNCJWESI3mga8lbTGMLjo/UViz3p2x6Qvjl0tNN0J3/n+nUi1tr66vsrcbg22LZ70d48nyzY1v4+Heh5InYWG/vyEUcBD73pOhUraCQm1z0gZcwBQ8/y/phI58tdeACkxLCnTv3XHtXxoqflLay8T2LRYV/2bzu2/OHp95bWTniLOAYFEdsGUrGCntqXawpW9FQOqSTjQqRvwqOPx/BCevjKHy5TcrIsHH8ckW99La+Rjeh9tn8bETjqqZ1L6wJEx0rfJ6TtMqcEPbXv6EDl3IeGlboQKV0/Ix59PIYX+sv3BMvcl9Owyh6Xd0g729mH8Gn/Ngtxoz62c10EWUe08yHETsWKEnnJUYCsLYQBDQgRGQxOZJ9KZOFB5AGgPUWPnfmfPajf5A6H0PL6mkOHBt4nxb7hbX9CrDnb+ilvge18HLgNS3+MeZBClAtTc0zBsnbLaS1E/qMNKPRk1BQeXQwIRB4AOnB0EyxzSb1kX+4hbcxuu/GYIpdqO09GnAa4LHRjn4l1YWqOAuS70caz1ltYPwYSIl0LDxfwJAgAeH98WWIFHByEUzbEig72XYD8nVh5Y6RiRdv0TgSkWyHi47SLddfCowHRD4D2gn3YcxP0QTT9nWi5/6KNZcEfDmIIpyhjeYRUrOuYWxgQIB0Kkerj0sNX3RnKvUSAABibtIyPgQAIQMYYBEj7cfPWhYk41Yvj0chOgKR0DrWWdX5Ig6meW0Ov9KcDAAAAAO88Pz+PAwmegX43AmRPygTLfEg47c7YKiIREICWJHpqjM+JlPECQtP3RbHvNIF3KTx9T5TMG91nOwv4E7OYe3lzEyCrBJ0QKfN8z//cTPRDGy0OBUB3/S81+nBoRaoO8HEm9k+1jf3OqJYUsRaCbwK36dACJ2sBkurGuX2iIHNj0Y+xA4CuSFH8D3tQL5wMSBsz2589RmGLRO2czCZ9vdV+EsOXi5WKlZsASfLEiz2jINfGXuPYAfQcnSR2wdciAgLEJkXPy13Sxjrtz9EWKRM91c+XnVeBbRs1MuEipWId5eTIu7hX1fvmboe/nRvcbD+mLQDsjK+xNsVUn14sWqS21yW3vTl7LAp0XV5x5H05f0tPfxPTmU9RgITOvrmKLKajCJ6jzJy3ZM/81ovEypZ/bir6UQ2YE2cv1YCL2SAFfC0kFAm+e9GTOi76Wl4jBy0UPW4vbcYXX/7e58SEns9F02XAckp7uOjAROPQ4j2rFKwMzpVvIywsRj8+OwDYB18rZ8OUVq5jH/fI+LgTX4yJ677Z31t5W/oKvk7KKnrcL4O09Q5Sr14TNBXryPjAYUKBRhRQpdseBbEW/Rg6mxvQScGCFCg9fteXhN77S4/quEglP17L6UvIWpmTR6mIc3X2fM2nZeR6GiaW7ubLzmvNYAlB7NSrf9WpliGqAEnxNKlcHM73BIbF6MeVUTv+xLeFBPA5cU0ScnL7dmrepIfltDQGn/fQ/m3HltLjbyaxsOA5bXwZqIwi5i4MmOsilLDMbQ9I8myJgliLfgwSmlgBLPb3tccJbKATK864Pc6t39Wi5fPpqJeGXm+cyF05Pu3fKrXK8xg0SSTa59PO3wL1xZkhewVJxcrpFKycbvx8S2gsDEY/bgzbsHQAaeCzrV5ZftEATm4qyHtfGC/jhfO3Krw2sgE9Gfvr4oFP570M9Lepj0ESfR11ZOdd+qIlITcMUa857QHJhg1RkDtjnVga5ITaAjgYnytokoc9NfyuoW/ytYzZKIiO57lGP/7nGFtdndd24XNBr9zxUJ6vHn97YnwviE87r3zv/9D9ShZFnPdUrKMNDjACpHuuXw0m1gb0mWXjGbQXwHtt1Wfa67nFTbcRb/K1irW0ipDC8JvR98T+b49B4kSvPL+PRaE3dX4jC1971EZ/lc3nIsp7x/CmloaV1b4VdUqWb4gRC51YQpiFYfMhoCE15jk7ugZzmrtibG2fTlUeSffweSiAzMULo/Yv9H2tzae+28Q+44nPLAs5eezGmJ3FZ7kyYOdtAsnn4tG1Z/9x6NOGRxk5cTlePCcDgqnoRyKOBAIEUsP3Spo4AJb66b2zldPcJTMrESoth29HcWH8Tq4bKylCav+ZEfvPPZfjworY1tS7+wB2XnluCz4FkpTtVp+V53r1Mn69J0A4xrRjqsYtA8KZtcnT2c/h/k7rgcT6uiyg+F5omFjYD6JCqKCW/8FD1yJEf/8hwFffJWD/ewP2H6j9Bxbsr6LFtwiZGbHzvRU7b/GtfHItdar1emmxrO8JkNKBBcdkZaUsAUL1oVjSciBBQuQTX3UpQlR8TKjafzHoUoQ0xIdvp6wMeCkb9t/O6sCMiRDp3l3auRZ5owDtvPRYzqnnMpa6gF37kQvPPv3Ix7yS0x4QCNuRC2f72F3aLqS+2CATRogFh6vY6Vgy8VfPPeKjlRNcdDCWh3B+Qzmwoe0/jmz/USCn+GD764LnPICdf8ROx1I7/7Bo5zfK6XtvylsRD9/ZNFeHCsujdxri2pFLD//vIPeJFHfFKW6QMKEcOEnH+hHjGNKGgzWmOls7wdNIY/k0oPgoEzx98Fd6TkT7X6hTHML+q+aq94FjUIg9PJKONYtxFLWKHWnnwwTaue/Fodu3opDqF/meXw4q+9E2QzM/9F58hMpTDQXRD0gWdSBCteFfK4KhTgHSqMfUhVt1zJkrFYijQHUjKRNSLyHvF7jOwP5FIPvL/Twyj4bMIvCS56+Oaqh9PBMdg0La+d6F3at65rG8F57HyvWWfuh7Q/pBqVjbBAibeREfKYkP2izkwGXA7/514VnVtx99pUSo8JDvenTGb0E2Ti0QZ74iVeqQzSKIwkUGdy/9ityJA+vLQW7YX/pGEbDspeb5+1oImQZcCBmqnR8C2Tlk5PXaV4aF9nHvqVfvnYAWaEP63qlYREBgU+cImacaEtosJI06creBf0YmP3F0n+S8/n0mEHEeGpN+CqfjpcIvMacO2mTXlJVaEOqK+6MLvw9HnJqzjOw/Vgf5h9pxuKf97xO3f+g6LRp2vkjAzksVZr7wPWaWbVLwAmxIr99lZ37bUtBVVbkrx/ntfRUfqTkUq0ROYAHYxrU6QqHHXunjkgYgDsBaJyY5gn3l/h2qH+pzrAsTCI7wDlqhQlHGNXn+2uA8yN/9ofUSe9Ho0vi9H/vyvzs6Wtr/d/2Mbf/rEPseZS6t3ltWy28i2PnXfTTqb5Zq56X7916UUaOdFxFt7FXkaeqV7/LvEtk4U9HmrQ4lFWtXgfZbi79Z6AQF/RAf0ilCnJkdg5IahBwQh67qi2cuzD0N74mRsWPzuFVnuHZsLaW5LTxtfMb+e855lf2DRUvlu6tx6DjimCALHBOD9X/pa3EzUOrV7S7l0+DCtedynFffOd9FDB+1+Bty6vsjPiYuzchHzTdqETISISKor7EEGEUcjTPM0BmyKn8a4XekjvucWXDrWWT7Tr3atvF843s5vxvSB27HVKytAkTzxdb09ezFx8z5Pw4uNiU1CZmJkKl7iUIDmHN+M029SoWTGPbX3zjtqR8oK/reNm2HSr3apx0E2pBe7HLK4lHLv2MCzFd4DPV4xknir7JgMoRM6fsKJNjjlP123Y4JMe2vaTUnPRMhIj587vsYOv+pV+Uh0ZlAG9Kv2h4o0FaAkNqSp/ioL0XK4cx+2ihkiQrrE0QIGHJ+S8zQqf3nsX9UBU9fRIhX8aGEOCnQRwTD93u2TsU6atnwUkjDGjpoKzwGenTdjcvnJBuidIAIScyR6kHV5ZbCfJbYpvPb3PpMl/ZviJAV4mMnn0s28Re+27aPKFigG9JbpWId7fCF1h08BEi7jiCNIvRlPV0MGKRfASIER8oaPzNy2FKss7/pM0FEyCeXZ0T2OoD42Hlzdgv23Xj+nlD3PUZtTcXaRYB8xQVIWngUutcjp6hHDelX0DcRkqrzvu6R+MjFYZM6+5RqnTX6TJmw/U8s2V9sWj2fEh6H3rLxqeeLBmuCpF75XHQNtCF9q/A62qGApcs77Jar8BjqCVcp3mrehpWmCAL0RoToKl1qR/SurDlSOGxbWar4WGZgfxEhtwna/8Tqnhsdh1I/Iatu4979CE298p1tUoYYQwNtSH83Fetoxy+7M9yI/sQ1eVN4SLrVJONXJTIHfRUiU5dOes8iB0e2Zw6bpKN8CnHLdof2v0zI/rcqPpbGbfqrb7v09mGuQ7bxQKlXwmVAm4TYl3eltjhYgMwNN6bc0ooQHum3SYDQk3+pk7/VlV2Z2CW1gTsj/umwfTTssNWr7tPM7T833GfE/pep9Blx4KWPq7hLQbDWCyIh23iI1KvbkII00Ib0jULsaMfCrXH4zAqPomfC45f4yGl1DmDPSWOtK7siREojxao3SX4iRXJjnYmzZmmD9K88cF0RLntg/zNna29IvSL/MVX7S1+X8ruXlXSL4qlUcXca0nfQzdfjEO0jgo1CbEgfVzYZHSRAFKt5x0UPRYccpzvRzeUPPRIeNTmkXy2Nfc8+fPc4wHbFytj37DP5LzXPvUunqp4kxYmatljBXSfebg6ts1L3hnR52WSzzqxE0tYxvkftb6rPZCLwZHHwP9quVwaKtFDhcZKwuI4SEQu0Id2r4/vwbJAeCQ9Rk7PnfvOQUX0eWpc/NuVYRhTCPxJ/B+lTTwe+w9RYuxpp23qK0B+l/i52rUNdQDkEebdJANtNPdlluuPvFhHH9h8hbOdxTHmIPaY07B+rz0y6HPci1mdMu9Y8aj8eJjqvN8e4aQfln3isrzdTsD7s25jcy4q7NbLd5KinKXx2L2E99rsYPhlkz/qVQXKfgXJlJQ1NQ6z7tM21lX6rY9s+LC3na6ujeex5/JA6kyOwF4fUnzpge53QF2oM0An/ysNXXe+zqq02qcf8wnOdfdU6WznjdDWmNOwfqs/0Nn244csUzv/9bTIefD90TDIwr5uZGw/og1t9lA8HFOrB2Ut7ysYpbeQQ1gMgNAYZDZsDwH4Tijx/6mebSVLGVRFYP/Xfy5w3lXctQDbUmcy3f1Bn9JmM7DpUe9a2rRcjtjm8K33EOf9LbVti0bT47ZCB1aAAGblELxtqDHDHgVYGcuIaEwDsh66oLbEEdQbYv2O71kKCgyoQIDs1nLJymktjIiSJ1KSG2Biq4Bg50qraUrLSAQAAANBDAaLITvkfht7nvHLuxaGXlYq/3f+jIdFDn41c8vrz2P0/vAj7Q/QDAAAAoK8CRMKSlaM9d3aOfx2ow187/VcNQSAfa/fPMGotVDaxbCEYjhv/JpIRlgXRDwAAAIAeCxBFVqRTOZlp4P6ZMlbQBJLiEhMAAAAApM3RoV+gm4juMCUE5ppbzwEAAAAQILUImTpOiIBwiPC4xQwAAAAACJAmpMdAKM44Px0AAAAAAfIPdHMwq9TgmzkbzwEAAAAQIJuQDekrzAqekKgHkTUAAAAABMjbaJrMGWYFT5ySegUAAACAANkmQkpHKhYczi2pVwAAAAAIkLYiRNJmOBUL9kXaDjeeAwAAACBAduLUveTwA+zCrzQ+Uq8AAAAAECA7oZfGsR8EduWyajtEzwAAAAAQIHuJkIUjlQbaI/s+5pgBAAAAAAFyiAiZVh8LTA1bKHXvEAAAAAAgQA5GUrFIq4FNSNs4xQwAAAAACBAv6IbiE8emdPg30ia47wMAAAAAAYIIgSji40QPLAAAAAAABIh3EbJEhECDE068AgAAAECAxBIh0G/OEB8AAAAACJCYIoQ7QvotPuaYAQAAAAABElOEzFWEkI6F+AAAAAAABEg0EcKekH6wRnwAAAAAwFHXBWBjem/ExwniAwAAAACOLBSiIUJWVEm24oMN5wAAAABgQ4A0RMgnx43pOSF1+RHxAQCJsTb2PQAAWfHBWoGen58H1cdN9UyonqRZuJc9H0zAAJAUOg89VM/ogK8pq+eUMRAAIAEB0pgALlSIQHpcV5PuFDMAQOJCRATIYI//dFWNgSssCACQmADRwb+oPu73nAAgPvVJVwtMAQAAAADJCRAVIQMVIQXVZRrZ53HKqh8AAAAAvMeR9QJK/mz1yAlZ11SXWSTl6hPiAwAAAAC2+vcpFVbzcWfusI2B4A8RHKeccgUAAAAAbTlKqbDi6MpKuyMaYoHb6vmE+AAAAACAnXz6VAuu0RA5JaugGqMiguMM4QEAAAAAvRIgDSEyUSHCSVlhkROuZK/HLaYAAAAAgN4KEBUhIj7k3pArqjQItyo+uFALAAAAABAgDSEyVBEyoWq9MFfhscIUAAAAAIAAQYggPAAAAAAAAYIQQXgAAAAAAPROgDSESL1H5NyxWf01sq/jTsQHwgMAAAAAECD+xcik+vjiOL63rJ6vleiY0w0AAAAAAAESXogM3UtqloiRYU9ee1U9i+q5I9oBAAAAAAiQ7sTISIXIOEMxUouOr1weCAAAAAAIEHtiZKhC5Fg/U6Ssnm8iPIh0AAAAAAACJC1BUriX/SJ/6qe1TeyyiVwiG99FeFSCo6TWAAAAAAABko8gGVYfI31ElNT/OwYiNFbV81P/vSTCAQAAAAAIkH4Kk4EKkUFDkPy+hzgRYfF3498S4VghNAAAAAAgB/4rwAB4xMkVHiVS4wAAAABJRU5ErkJggg=="},{"id":"mar_vermelho_al","name":"Mar Vermelho AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Mar%20Vermelho&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.34201321548,-9.49288996873],[-36.34219560569,-9.47533412032],[-36.34275350517,-9.4029001574],[-36.344727611,-9.4029001574],[-36.34537134116,-9.40279431056],[-36.34702358192,-9.40293191144],[-36.35080013221,-9.40291074208],[-36.35899696296,-9.40306951227],[-36.36108908599,-9.40299541952],[-36.36289153045,-9.40306951227],[-36.36589560455,-9.40304834292],[-36.36712942069,-9.4030060042],[-36.37571248954,-9.40306951227],[-36.38048682159,-9.40308009695],[-36.38663444465,-9.40319652837],[-36.3885227198,-9.40312243565],[-36.39285716956,-9.40324945173],[-36.396558618,-9.40321769772],[-36.40309247916,-9.40327062108],[-36.41973290389,-9.40337646777],[-36.43368039077,-9.4033976371],[-36.43355164474,-9.41685048724],[-36.43344435638,-9.4238571931],[-36.43337998336,-9.43753150237],[-36.43329415267,-9.45011519778],[-36.4330044741,-9.49358837449],[-36.40839252418,-9.49350371932],[-36.40442285484,-9.49353546501],[-36.40007767623,-9.49351430122],[-36.397867536,-9.49341906413],[-36.3916769976,-9.49328149941],[-36.38756785339,-9.49331324512],[-36.38535771316,-9.49340848223],[-36.37673172897,-9.49331324512],[-36.37427482551,-9.49318626226],[-36.36706504768,-9.49298520596],[-36.36501583999,-9.49299578788],[-36.36043462699,-9.49298520596],[-36.35955486243,-9.49295346022],[-36.35895404762,-9.49303811553],[-36.35703358596,-9.49294287831],[-36.35664734786,-9.49299578788],[-36.35260257667,-9.49299578788],[-36.34766731208,-9.49297462405],[-36.34201321548,-9.49288996873]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"geodata.md.gov-MD_SixInchImagery","name":"MD Latest 6 Inch Aerial Imagery","type":"wms","template":"https://geodata.md.gov/imap/services/Imagery/MD_SixInchImagery/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=MD_SixInchImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2016-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[-76.234131,37.920368],[-76.598053,38.158317],[-76.940002,38.270532],[-77.038193,38.413786],[-77.23526,38.33627],[-77.312164,38.410558],[-77.262726,38.566422],[-77.042999,38.713376],[-77.049866,38.793697],[-76.92627,38.892503],[-77.040939,38.984499],[-77.12162,38.925229],[-77.150116,38.955137],[-77.252426,38.975425],[-77.259293,39.024252],[-77.34581,39.054918],[-77.461853,39.070379],[-77.537384,39.139647],[-77.474213,39.224807],[-77.572746,39.304284],[-77.723465,39.328986],[-77.777023,39.463234],[-77.861481,39.516225],[-77.840881,39.608862],[-77.956238,39.59299],[-78.166351,39.695564],[-78.270035,39.621557],[-78.338699,39.640066],[-78.466415,39.523641],[-78.662796,39.540058],[-78.798752,39.606217],[-78.9814,39.446799],[-79.06723,39.476486],[-79.485054,39.199536],[-79.485569,39.72158],[-75.788359,39.721811],[-75.690994,38.460579],[-75.049238,38.458159],[-75.049839,38.402218],[-75.081511,38.323208],[-75.097733,38.309066],[-75.186996,38.097551],[-75.23798,38.022402],[-75.61821,37.989669],[-75.863686,37.909534],[-76.234131,37.920368]]],"terms_url":"http://imap.maryland.gov/Pages/imagery-products.aspx","terms_text":"DoIT, MD iMap, MDP","description":"Six Inch resolution aerial imagery for the State of Maryland"},{"id":"geodata.md.gov-MD_ThreeInchImagery","name":"MD Three Inch Aerial Imagery","type":"wms","template":"https://geodata.md.gov/imap/services/Imagery/MD_ThreeInchImagery/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=MD_ThreeInchImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[0,20],"polygon":[[[-76.46298868788,38.98080463627],[-76.46325795583,38.94779459044],[-76.49498669632,38.93690418359],[-76.51616910865,38.93697399921],[-76.54762858119,38.95910208849],[-76.54744906922,38.98666527704],[-76.51558569475,39.0030585399],[-76.48390183225,39.00291903879],[-76.46298868788,38.98080463627]],[[-76.09548280964,38.8413320581],[-76.04279604678,38.84089512141],[-76.04288580276,38.82980476995],[-76.0322945966,38.8296998884],[-76.03276581552,38.79667199901],[-76.02545070279,38.79663702224],[-76.0254058248,38.7746157424],[-76.03307996147,38.77472070505],[-76.03366337536,38.7307278267],[-76.05462139773,38.73093788097],[-76.0548009097,38.72004925436],[-76.10753255055,38.72043441094],[-76.10713709241,38.75338442343],[-76.11753984459,38.75346037077],[-76.11701334711,38.79730508527],[-76.09601366219,38.79715186708],[-76.09548280964,38.8413320581]],[[-77.23397015511,39.16838491616],[-77.25516378693,39.14647458509],[-77.25496183597,39.11342872174],[-77.18093418537,39.05337051467],[-77.14907221334,39.04769565692],[-77.12797815456,39.04779422613],[-77.10683080317,39.05325234984],[-77.1068770836,39.09169503464],[-77.11774597234,39.10827342699],[-77.16011079699,39.12484737677],[-77.15975177305,39.15213714767],[-77.17047901562,39.16302432313],[-77.21284384027,39.17271658577],[-77.23397015511,39.16838491616]]],"terms_url":"http://imap.maryland.gov/Pages/imagery-products.aspx","terms_text":"DoIT, MD iMap, MDP","description":"Three Inch Resolution Imagery for the cities of Rockville, Gaithersburg and Annapolis"},{"id":"geodata.md.gov-MD_ColorBasemap","name":"MD Transportation Basemap","type":"wms","template":"https://geodata.md.gov/imap/services/Transportation/MD_ColorBasemap/MapServer/WmsServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=MD_ColorBasemap&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-76.234131,37.920368],[-76.598053,38.158317],[-76.940002,38.270532],[-77.038193,38.413786],[-77.23526,38.33627],[-77.312164,38.410558],[-77.262726,38.566422],[-77.042999,38.713376],[-77.049866,38.793697],[-76.92627,38.892503],[-77.040939,38.984499],[-77.12162,38.925229],[-77.150116,38.955137],[-77.252426,38.975425],[-77.259293,39.024252],[-77.34581,39.054918],[-77.461853,39.070379],[-77.537384,39.139647],[-77.474213,39.224807],[-77.572746,39.304284],[-77.723465,39.328986],[-77.777023,39.463234],[-77.861481,39.516225],[-77.840881,39.608862],[-77.956238,39.59299],[-78.166351,39.695564],[-78.270035,39.621557],[-78.338699,39.640066],[-78.466415,39.523641],[-78.662796,39.540058],[-78.798752,39.606217],[-78.9814,39.446799],[-79.06723,39.476486],[-79.485054,39.199536],[-79.485569,39.72158],[-75.788359,39.721811],[-75.690994,38.460579],[-75.049238,38.458159],[-75.049839,38.402218],[-75.081511,38.323208],[-75.097733,38.309066],[-75.186996,38.097551],[-75.23798,38.022402],[-75.61821,37.989669],[-75.863686,37.909534],[-76.234131,37.920368]]],"terms_url":"http://imap.maryland.gov/Pages/imagery-products.aspx","terms_text":"DoIT, MD iMap, MDP","description":"Maryland State Highway Administration road features and additional Maryland focused landmarks"},{"id":"minador_do_negrao","name":"Minador do Negrão","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Minador%20do%20Negrao&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.81960228856,-9.35174057847],[-36.82016893109,-9.26141767312],[-36.82465236584,-9.26132936954],[-36.83063690623,-9.26146673066],[-36.83673079868,-9.26149616517],[-36.84227793081,-9.26147654216],[-36.8456181394,-9.26160409172],[-36.85563876517,-9.26160409172],[-36.8621402426,-9.26159428022],[-36.86589797726,-9.26146673066],[-36.86724002536,-9.26149616517],[-36.86951653657,-9.26148635367],[-36.87126616964,-9.26157465721],[-36.87475549468,-9.26152559969],[-36.87815534986,-9.26163352623],[-36.88320542713,-9.26170220674],[-36.88565093699,-9.26167277223],[-36.88857361951,-9.26147654216],[-36.89217229662,-9.26150597668],[-36.89383245981,-9.26163352623],[-36.89740131364,-9.26175126423],[-36.91121943846,-9.26182975621],[-36.91110014529,-9.26650980886],[-36.91112002749,-9.28541580138],[-36.91120949736,-9.29066455986],[-36.91117967407,-9.29367642875],[-36.91099079323,-9.2992880502],[-36.91091126445,-9.30729328446],[-36.91090132335,-9.3122964628],[-36.91083173567,-9.31596541472],[-36.91084167677,-9.32013463149],[-36.91098085213,-9.32395064743],[-36.91099079323,-9.3258733543],[-36.91079197129,-9.32964025951],[-36.91079197129,-9.33523168439],[-36.9107422658,-9.33943990818],[-36.91092120555,-9.34310857462],[-36.91084167677,-9.3447074733],[-36.91066273702,-9.35228988056],[-36.89276876244,-9.35225064472],[-36.877350121,-9.35212312823],[-36.86462551685,-9.35203484755],[-36.85760710237,-9.35193675789],[-36.84344103915,-9.35190733098],[-36.83115384327,-9.3517994323],[-36.81960228856,-9.35174057847]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"mml-tausta","name":"MML Background Map","type":"tms","template":"http://tiles.kartat.kapsi.fi/taustakartta/{zoom}/{x}/{y}.jpg","scaleExtent":[2,19],"polygon":[[[27.5317328,60.2179935],[31.3549585,62.5123281],[31.6351264,62.9077314],[30.0915418,64.9188897],[30.2123914,65.8747292],[29.1357313,66.9042207],[30.1904078,67.676093],[28.7072645,68.4274779],[29.025868,68.9505042],[29.4872938,69.5882321],[27.9492078,70.1329023],[26.4001356,69.9491461],[25.861811,69.6933403],[24.9499292,68.6245517],[23.9227186,68.8536149],[22.9064832,68.6985045],[21.4288221,69.3841854],[20.4235621,69.0430447],[23.269032,67.986995],[23.5217176,66.297794],[24.10396,65.869129],[24.1149793,65.3943022],[21.4123426,63.6511407],[20.1708766,63.1989825],[19.0818678,60.1907003],[20.5004774,59.2096939],[27.5317328,60.2179935]]],"terms_url":"https://www.maanmittauslaitos.fi/en/","terms_text":"© Maanmittauslaitoksen","description":"Background map from the National Land Survey of Finland","icon":"https://www.maanmittauslaitos.fi/apple-touch-icon.png"},{"id":"mml-orto","name":"MML Orthophoto","type":"tms","template":"http://tiles.kartat.kapsi.fi/ortokuva/{zoom}/{x}/{y}.jpg","scaleExtent":[2,19],"polygon":[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],"terms_url":"https://www.maanmittauslaitos.fi/en/","terms_text":"© Maanmittauslaitoksen","best":true,"description":"Ortophotos from the National Land Survey of Finland","icon":"https://www.maanmittauslaitos.fi/apple-touch-icon.png"},{"id":"mml-topo","name":"MML Topographic Map","type":"tms","template":"http://tiles.kartat.kapsi.fi/peruskartta/{zoom}/{x}/{y}.jpg","scaleExtent":[2,19],"polygon":[[[27.5317328,60.2179935],[31.3549585,62.5123281],[31.6351264,62.9077314],[30.0915418,64.9188897],[30.2123914,65.8747292],[29.1357313,66.9042207],[30.1904078,67.676093],[28.7072645,68.4274779],[29.025868,68.9505042],[29.4872938,69.5882321],[27.9492078,70.1329023],[26.4001356,69.9491461],[25.861811,69.6933403],[24.9499292,68.6245517],[23.9227186,68.8536149],[22.9064832,68.6985045],[21.4288221,69.3841854],[20.4235621,69.0430447],[23.269032,67.986995],[23.5217176,66.297794],[24.10396,65.869129],[24.1149793,65.3943022],[21.4123426,63.6511407],[20.1708766,63.1989825],[19.0818678,60.1907003],[20.5004774,59.2096939],[27.5317328,60.2179935]]],"terms_url":"https://www.maanmittauslaitos.fi/en/","terms_text":"© Maanmittauslaitoksen","description":"Topographic map from the National Land Survey of Finland","icon":"https://www.maanmittauslaitos.fi/apple-touch-icon.png"},{"id":"openlabs-geoportal-public-transport","name":"Municipality of Tirana - Public Transport (Open Labs GeoPortal) (overlay)","type":"tms","template":"https://geoportal.openlabs.cc/mapcache/tms/1.0.0/public-transport@GoogleMapsCompatibleExtended/{zoom}/{x}/{-y}.png","endDate":"2017-01-01T00:00:00.000Z","startDate":"2017-01-01T00:00:00.000Z","scaleExtent":[0,21],"polygon":[[[19.7376248,41.3015397],[19.8862836,41.2721302],[19.8687741,41.385825],[19.6833798,41.3732021],[19.7376248,41.3015397]]],"terms_url":"https://geoportal.openlabs.cc/","terms_text":"Data provided by the Muncipality of Tirana hosted by Open Labs","description":"Bus stops & lines provided by the Muncipality of Tirana hosted by Open Labs","overlay":true},{"id":"openlabs-geoportal-tirana","name":"Municipality of Tirana (Open Labs GeoPortal)","type":"tms","template":"https://geoportal.openlabs.cc/mapcache/tms/1.0.0/tirana@GoogleMapsCompatibleExtended/{zoom}/{x}/{-y}.png","endDate":"2017-01-01T00:00:00.000Z","startDate":"2017-01-01T00:00:00.000Z","scaleExtent":[0,21],"polygon":[[[19.7022626,41.1403991],[19.7757337,41.1186768],[19.8643109,41.1212632],[20.249862,41.3494955],[20.0308221,41.4118363],[19.9257654,41.5204034],[19.8886865,41.5075495],[19.8893731,41.4226497],[19.8165887,41.4617688],[19.7335046,41.4303724],[19.7417444,41.3788701],[19.6579736,41.3747481],[19.5721429,41.243224],[19.6181482,41.2256674],[19.6717065,41.2272167],[19.7022626,41.1403991]]],"terms_url":"https://geoportal.openlabs.cc","terms_text":"Data provided by the Muncipality of Tirana hosted by Open Labs","description":"Streets & Builings provided by the Muncipality of Tirana hosted by Open Labs"},{"id":"NC-US","name":"NC Latest Orthoimagery","type":"wms","template":"https://services.nconemap.gov/secure/services/Imagery/Orthoimagery_All/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2013-01-01T00:00:00.000Z","startDate":"1995-01-01T00:00:00.000Z","polygon":[[[-81.6792,36.5974],[-80.2535886,36.5479298],[-75.8409,36.5671],[-75.4323,35.6441],[-75.5047482,35.1880648],[-75.7052487,35.1768406],[-76.1474484,34.9407747],[-76.5347165,34.5548667],[-76.6967648,34.6678918],[-77.2790402,34.5322432],[-77.688281,34.2648225],[-77.9435,33.8269],[-78.2128781,33.8940169],[-78.5301,33.8304],[-79.6693,34.7916],[-80.8122,34.8085],[-80.8468503,34.9632866],[-80.9512204,35.0555205],[-81.0638303,35.0172898],[-81.0748166,35.1341745],[-82.3632,35.1805],[-82.9989,34.9919],[-84.3333,34.9767],[-84.2718381,35.2822869],[-84.0905637,35.2733181],[-83.9147824,35.53301],[-83.5549802,35.591102],[-83.2556027,35.7339181],[-82.9864377,35.8141398],[-82.9232663,35.9676717],[-82.6788205,36.0853997],[-82.6019162,36.0898388],[-82.5359982,35.9698946],[-82.3547238,36.1475245],[-82.0443601,36.1430887],[-81.9042844,36.3380291],[-81.742236,36.3734205],[-81.6792,36.5974]]],"description":"Most recent true color imagery for the state of North Carolina. The imagery has a pixel resolution of 6 inches and is comprised of imagery flown in 2010, 2012, 2013, and 2014"},{"id":"geodata.state.nj.us-Infrared2015","name":"NJ 2015 Aerial Imagery (Infrared)","type":"wms","template":"https://geodata.state.nj.us/imagerywms/Infrared2015?FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&WIDTH={width}&HEIGHT={height}&LAYERS=Infrared2015&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-05-03T00:00:00.000Z","startDate":"2015-03-29T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[-74.86599,40.085427],[-74.840927,40.107225],[-74.822903,40.130329],[-74.788055,40.124685],[-74.726086,40.149488],[-74.729176,40.16392],[-74.763336,40.191725],[-74.775524,40.214276],[-74.844017,40.247957],[-74.868393,40.291573],[-74.944611,40.33817],[-74.967098,40.395195],[-75.002632,40.406046],[-75.026836,40.402516],[-75.06134,40.416502],[-75.074215,40.455046],[-75.069065,40.536503],[-75.102367,40.567024],[-75.135927,40.573609],[-75.16777,40.559069],[-75.197639,40.573674],[-75.203733,40.618318],[-75.205064,40.691312],[-75.198326,40.753889],[-75.172405,40.780671],[-75.1367,40.777292],[-75.090179,40.822383],[-75.100994,40.839269],[-75.096874,40.850956],[-75.068464,40.850372],[-75.057049,40.867574],[-75.13773,40.973094],[-75.135155,40.994411],[-75.039024,41.03819],[-74.981518,41.112598],[-74.905472,41.170384],[-74.84024,41.278645],[-74.798012,41.322685],[-74.757156,41.347691],[-74.695702,41.360576],[-74.041054,41.059088],[-74.041051,41.059087],[-74.04105,41.059087],[-74.04105,41.059086],[-74.041049,41.059086],[-73.890266,40.998039],[-73.933406,40.882078],[-73.933407,40.882077],[-73.933408,40.882076],[-73.933408,40.882075],[-74.011459,40.75558],[-74.024543,40.709436],[-74.066048,40.651732],[-74.152222,40.638967],[-74.183121,40.644568],[-74.200459,40.631281],[-74.199257,40.598444],[-74.21505,40.558026],[-74.246807,40.548113],[-74.24715,40.519541],[-74.267578,40.489651],[-74.26054,40.469282],[-74.199257,40.445641],[-74.181061,40.460401],[-74.136429,40.459095],[-73.997555,40.413496],[-74.026566,40.47777],[-74.003906,40.484037],[-73.977814,40.452042],[-73.964767,40.33189],[-74.088364,39.756824],[-74.356842,39.383406],[-74.609528,39.215231],[-74.776382,38.998909],[-74.863586,38.931639],[-74.931221,38.920688],[-74.980316,38.930304],[-74.960747,39.00798],[-74.905472,39.100226],[-74.899979,39.164141],[-75.101166,39.201398],[-75.135498,39.171062],[-75.425949,39.378099],[-75.475044,39.43195],[-75.543365,39.457403],[-75.552292,39.482845],[-75.538902,39.541911],[-75.519676,39.56997],[-75.571175,39.608069],[-75.577698,39.625524],[-75.539932,39.656456],[-75.472984,39.747454],[-75.466253,39.750761],[-75.466252,39.750762],[-75.466252,39.750763],[-75.466251,39.750764],[-75.466251,39.750765],[-75.46625,39.750767],[-75.466249,39.750768],[-75.466249,39.750769],[-75.465088,39.764478],[-75.415041,39.801786],[-75.324669,39.858891],[-75.246048,39.864689],[-75.143738,39.900255],[-75.142365,39.957912],[-75.07061,39.987117],[-75.056534,40.008683],[-74.935341,40.072555],[-74.86599,40.085427]]],"terms_url":"https://njgin.state.nj.us/NJ_NJGINExplorer/ShowMetadata.jsp?docId={E30775F2-6370-4525-8E68-C371ED29BBB3}","terms_text":"NJ Office of Information Technology (NJOIT), Office of Geographic Information Systems (OGIS)","description":"Digital orthophotography of New Jersey, Near Infrared, 1 foot resolution"},{"id":"geodata.state.nj.us-Natural2015","name":"NJ 2015 Aerial Imagery (Natural Color)","type":"wms","template":"https://geodata.state.nj.us/imagerywms/Natural2015?FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&WIDTH={width}&HEIGHT={height}&LAYERS=Natural2015&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-05-03T00:00:00.000Z","startDate":"2015-03-29T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[-74.86599,40.085427],[-74.840927,40.107225],[-74.822903,40.130329],[-74.788055,40.124685],[-74.726086,40.149488],[-74.729176,40.16392],[-74.763336,40.191725],[-74.775524,40.214276],[-74.844017,40.247957],[-74.868393,40.291573],[-74.944611,40.33817],[-74.967098,40.395195],[-75.002632,40.406046],[-75.026836,40.402516],[-75.06134,40.416502],[-75.074215,40.455046],[-75.069065,40.536503],[-75.102367,40.567024],[-75.135927,40.573609],[-75.16777,40.559069],[-75.197639,40.573674],[-75.203733,40.618318],[-75.205064,40.691312],[-75.198326,40.753889],[-75.172405,40.780671],[-75.1367,40.777292],[-75.090179,40.822383],[-75.100994,40.839269],[-75.096874,40.850956],[-75.068464,40.850372],[-75.057049,40.867574],[-75.13773,40.973094],[-75.135155,40.994411],[-75.039024,41.03819],[-74.981518,41.112598],[-74.905472,41.170384],[-74.84024,41.278645],[-74.798012,41.322685],[-74.757156,41.347691],[-74.695702,41.360576],[-74.041054,41.059088],[-74.041051,41.059087],[-74.04105,41.059087],[-74.04105,41.059086],[-74.041049,41.059086],[-73.890266,40.998039],[-73.933406,40.882078],[-73.933407,40.882077],[-73.933408,40.882076],[-73.933408,40.882075],[-74.011459,40.75558],[-74.024543,40.709436],[-74.066048,40.651732],[-74.152222,40.638967],[-74.183121,40.644568],[-74.200459,40.631281],[-74.199257,40.598444],[-74.21505,40.558026],[-74.246807,40.548113],[-74.24715,40.519541],[-74.267578,40.489651],[-74.26054,40.469282],[-74.199257,40.445641],[-74.181061,40.460401],[-74.136429,40.459095],[-73.997555,40.413496],[-74.026566,40.47777],[-74.003906,40.484037],[-73.977814,40.452042],[-73.964767,40.33189],[-74.088364,39.756824],[-74.356842,39.383406],[-74.609528,39.215231],[-74.776382,38.998909],[-74.863586,38.931639],[-74.931221,38.920688],[-74.980316,38.930304],[-74.960747,39.00798],[-74.905472,39.100226],[-74.899979,39.164141],[-75.101166,39.201398],[-75.135498,39.171062],[-75.425949,39.378099],[-75.475044,39.43195],[-75.543365,39.457403],[-75.552292,39.482845],[-75.538902,39.541911],[-75.519676,39.56997],[-75.571175,39.608069],[-75.577698,39.625524],[-75.539932,39.656456],[-75.472984,39.747454],[-75.466253,39.750761],[-75.466252,39.750762],[-75.466252,39.750763],[-75.466251,39.750764],[-75.466251,39.750765],[-75.46625,39.750767],[-75.466249,39.750768],[-75.466249,39.750769],[-75.465088,39.764478],[-75.415041,39.801786],[-75.324669,39.858891],[-75.246048,39.864689],[-75.143738,39.900255],[-75.142365,39.957912],[-75.07061,39.987117],[-75.056534,40.008683],[-74.935341,40.072555],[-74.86599,40.085427]]],"terms_url":"https://njgin.state.nj.us/NJ_NJGINExplorer/ShowMetadata.jsp?docId={CDC67AB8-ADA1-4B4B-9087-67A82CB9151C}","terms_text":"NJ Office of Information Technology (NJOIT), Office of Geographic Information Systems (OGIS)","description":"Digital orthophotography of New Jersey, Natural Color, 1 foot resolution"},{"id":"NLSC-EMAP5","name":"NLSC General Map with Contour line","type":"tms","template":"https://wmts.nlsc.gov.tw/wmts/EMAP5_OPENDATA/default/EPSG:3857/{zoom}/{y}/{x}","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[0,15],"polygon":[[[120.4570579,26.3970586],[120.44256,26.3708009],[120.44713,26.3531513],[120.4673009,26.3405831],[120.4978723,26.3340866],[120.5141036,26.3401594],[120.5341168,26.3641649],[120.5297045,26.3842128],[120.4956661,26.4015754],[120.4570579,26.3970586]],[[119.9007221,25.9858609],[119.8960071,25.9648902],[119.9131301,25.9470399],[119.9503542,25.9278478],[119.9905563,25.9260623],[120.0198392,25.9363284],[120.0277804,25.9557423],[120.0275322,25.9845224],[119.9989937,26.0010288],[119.9404278,26.0028131],[119.9007221,25.9858609]],[[122.089,24.5485],[121.709,23.4541],[121.717,22.698],[121.818,21.95],[121.803,21.8735],[121.759,21.8087],[121.694,21.7653],[120.861,21.5631],[120.815,21.5576],[120.739,21.5728],[120.661,21.6296],[120.202,22.1809],[119.27,23.0542],[119.153,23.2049],[119.128,23.2485],[119.103,23.4],[119.118,23.4765],[119.137,23.512],[119.361,23.8885],[119.406,23.9407],[120.968,25.2284],[121.408,25.4687],[121.989,25.8147],[122.065,25.8299],[122.141,25.8147],[122.216,25.7663],[122.26,25.7015],[122.297,25.48],[122.196,24.9696],[122.089,24.5485]],[[116.6855033,20.8547596],[116.6309071,20.8149565],[116.5941695,20.7600846],[116.5797214,20.6967501],[116.5893056,20.6325865],[116.621766,20.5753367],[116.6731874,20.5319171],[116.7373678,20.5075783],[116.8065659,20.5052653],[116.8724354,20.5252581],[116.9270316,20.5651373],[116.9637692,20.6200797],[116.9782173,20.6834462],[116.9686331,20.7475883],[116.9361727,20.8047732],[116.8847512,20.8481147],[116.8205709,20.872399],[116.7513728,20.8747063],[116.6855033,20.8547596]],[[118.2261504,24.4563345],[118.2936439,24.4538527],[118.2851467,24.4751026],[118.3097372,24.4916821],[118.3767709,24.4729348],[118.4100947,24.5332285],[118.4479031,24.5284069],[118.4746394,24.4599272],[118.512992,24.4315479],[118.5065839,24.4202318],[118.4811625,24.4332439],[118.4610567,24.4089192],[118.426145,24.3970385],[118.3970055,24.4284184],[118.3765564,24.4258395],[118.3397565,24.3814628],[118.3031926,24.3705764],[118.2574234,24.4139213],[118.1381276,24.3724838],[118.1617342,24.4022433],[118.2094226,24.4139604],[118.1895784,24.4352201],[118.2176338,24.430205],[118.2261504,24.4563345]],[[120.2234496,26.30045],[120.2550843,26.3100412],[120.269888,26.3368716],[120.2591889,26.3652192],[120.2292544,26.3784823],[120.1976197,26.3688968],[120.182816,26.3420738],[120.1935151,26.3137205],[120.2234496,26.30045]],[[119.4374461,25.0047541],[119.4342024,24.9886249],[119.4541901,24.9722553],[119.4827444,24.9718376],[119.4898402,24.9937882],[119.4715877,25.0069239],[119.4374461,25.0047541]],[[119.8869914,26.180381],[119.893227,26.1203128],[119.9285109,26.1080224],[119.9779388,26.1223611],[120.0366775,26.151728],[120.1098054,26.2134921],[120.119269,26.2713663],[120.0629175,26.3172592],[119.9923706,26.3164881],[119.9467732,26.2898799],[119.9020362,26.2439761],[119.8869914,26.180381]]],"terms_url":"https://maps.nlsc.gov.tw","terms_text":"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0","description":"The emap from Taiwan National Land Surveying and Mapping Center","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAxJJREFUOI3tlF9oW2UYxn9f4nKW2ixfjJGYMnuctRUZ5mhEpjdJEEaHtmsZaKHq0qt6ZdtZL3Zhk3ilIKS9Ui806UStE7Edjln8kwzEwaB6IshsmJIqK1ttZ7Qlzel2eryQhqZrsDC8EHyuvu993+/53j+8D/yPfxtip4GqH1X1owLkdHI3RSwbkbFu1yAPdx4t3hpSS6YLAM05i/vCqcmzZwpj9T6pIZYOZNArNADhsQj3RVNjtyS1DcKtiHlPIb96PTn67nJiq8++cRgJicTpQ7Yz0oHc7cQZeakzPbTyqr9iKXUr0lfbqOx7LHJgbXrux5/X9M0+G0C8SySeeWTPQPSLxu4jn1vd4tE7m4euDNclrCEvt6E+25/e6H+VuKen57vEe1b8I29b8cKyo6j6Uece6I/VK387jC70crgjMFBDPDEx8aA5aOPkG+f7FhcX9YhGZLIUBSD7VAtSsZOKNpGKNgFU710tbiJ7G0lFm9DucCL2R7uCXjTpQFZbMV6wMu+EbWnpQOIJVKcvFTuDIR+az4nmc1Zt6h4HuV9XGHjIx1D2EvrCKtLnUgE+Pig+kQ6kDeDFc9YQwJdP2rLuBlfzRjklw7yh7JJh0vfZL6Tb70IqdqRSnT/5JfQTBcZfDom4HaBiUjn5k/Xh0VYRe85ztZ11QX53K4ZQyPxwFcO0yP+2Ste9bi6XrxPbfxuvnV9g6uIfPK/dTskwURbOFfPTM2PSIeTT99Bzw4KMhERi5ICIl667OOHuYNzdQV5p/ccBxi89kUmm5vveDou06kLddvNSibasbvZGXvj9fYJGgbldAaYaI+SVVoq7ApxtCNXEH7ZyhL8+Nho00YJeoT3+6Xp0W2KtBU07NpzNlHulem2ecHmGzpUcmlGg+dp83aynitbkK99ayfwSel2tiLUTo3M4lSn3ys12ub5MsFL4O4GGWZq/fyszfvrPsfwSNZtnpw70i+jMfjPdf//MfXf7UYtrASqWQkUoeNzLtHumS0buzePJD4zjV1a5vPX9jmRT9aNGNCKbZXMn0vnfwl+e9BTflqrxKAAAAABJRU5ErkJggg=="},{"id":"IBGE_Salvador_Streets","name":"Nomes de Ruas IBGE Salvador-BA","type":"tms","template":"https://api.mapbox.com/styles/v1/wille/cj8lp78dn62wl2rquim47qo0g/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoid2lsbGUiLCJhIjoicFNVWk5VWSJ9.hluCd0YGvYHNlFi_utWe2g","scaleExtent":[0,20],"polygon":[[[-38.489742279052734,-12.811131765117107],[-38.54484558105469,-13.013924052026558],[-38.47755432128906,-13.034662471471638],[-38.33473205566406,-12.946846814654444],[-38.30005645751953,-12.906692193510644],[-38.33953857421875,-12.904349641337422],[-38.35481643676758,-12.830213284310222],[-38.38090896606445,-12.821844374997415],[-38.40717315673828,-12.867535227819912],[-38.46536636352539,-12.815985972925704],[-38.489742279052734,-12.811131765117107]]],"description":"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - IBGE.","overlay":true},{"id":"orthos.dhses.ny.gov_latest","name":"NYS Orthos Online","type":"wms","template":"http://www.orthos.dhses.ny.gov/arcgis/services/Latest/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0,1,2,3,4&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2018-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[0,19],"polygon":[[[-74.91231104790405,45.036060871422514],[-73.47787904626531,45.02996489601911],[-73.33846123282218,45.03098119095642],[-73.31977627491248,45.005581106608915],[-73.32265088382167,44.98525292658083],[-73.34852236400432,44.92829565917409],[-73.36720732191401,44.83969633391092],[-73.34277314618596,44.81727029165119],[-73.34564775509514,44.7764733152644],[-73.37295653973237,44.73462648007473],[-73.37008193082319,44.6794648966887],[-73.39739071546042,44.64470656126996],[-73.39307880209665,44.60276438225357],[-73.39739071546042,44.54542854468756],[-73.34995966845892,44.512639828752185],[-73.34564775509514,44.49521331585934],[-73.37870575755073,44.47060231167881],[-73.30827783927576,44.43571894999882],[-73.30396592591198,44.4182694555537],[-73.3327120150038,44.3391682816244],[-73.30827783927576,44.27128222420617],[-73.30827783927576,44.25172471526754],[-73.38014306200533,44.14868323115224],[-73.40457723773338,44.0413289327325],[-73.33989853727677,43.79595697288363],[-73.28096905463853,43.642215731803084],[-73.20910383190896,43.549573305004984],[-73.21341574527274,43.51205945175996],[-73.24647374772834,42.6755714070924],[-73.45919480700785,42.142839357113225],[-73.47069324264457,42.03937970922349],[-73.48794089609967,41.737642097452465],[-73.4994393317364,41.643191171126794],[-73.47787976491753,41.62707774888845],[-73.4318860223706,41.57978847312145],[-73.42613680455224,41.56365920821005],[-73.42685473812732,41.45925887814987],[-73.43979047821864,41.403222667065656],[-73.44985160940078,41.383275042836544],[-73.43835317376404,41.37033277045519],[-73.42757339035461,41.35900616964153],[-73.41751225917248,41.34390096839462],[-73.41894956362707,41.27642429018757],[-73.43044799926379,41.24455103927662],[-73.46566195840128,41.19752312226992],[-73.52962200663059,41.145049831455864],[-73.55477483458594,41.133684100459654],[-73.61586027390607,41.13530789690045],[-73.6266400573155,41.1087808553827],[-73.62735870954279,41.054068843422385],[-73.63957579740682,40.99117509837295],[-73.61873488281525,40.98195286582785],[-73.59933127267827,40.96567519162947],[-73.59933127267827,40.93473654650821],[-73.63454523181575,40.91681807360894],[-73.68053897436268,40.89183270232195],[-73.69850528004507,40.8798798402391],[-73.68628819218104,40.87064205907731],[-73.66257266868028,40.87933647703018],[-73.63813849295222,40.90541287946855],[-73.59789396822369,40.91193037416514],[-73.57561574917752,40.91790417996723],[-73.52674739772141,40.92387744595259],[-73.50159456976607,40.9428797007417],[-73.49009613412935,40.953735678064604],[-73.41751225917248,40.960791106211715],[-73.38373560448959,40.9613338002184],[-73.33702320971537,40.95590665935183],[-73.30827712062354,40.93636525766628],[-73.27090720480417,40.92659238839886],[-73.20910311325675,40.91953330604491],[-73.18682489421059,40.92713536350369],[-73.16813993630089,40.93147900372728],[-73.165983979619,40.95970570481162],[-73.1688585885282,40.970016297449746],[-73.12933271602694,40.98195286582785],[-73.10777314920807,40.98195286582785],[-73.06680997225222,40.97489970011966],[-72.85840082633648,40.97435711767307],[-72.71826364201384,40.98195286582785],[-72.65574089823912,41.00527719453338],[-72.64424246260239,41.004734862008505],[-72.62627615692,40.99225998211336],[-72.54147519409912,41.03889309392365],[-72.47679649364251,41.063280983759014],[-72.45811153573283,41.08928476815911],[-72.41858566323157,41.093076127227],[-72.36612405063899,41.138555369199075],[-72.36037483282063,41.14180268071838],[-72.32228626477396,41.15479031895286],[-72.29066556677296,41.16398833949227],[-72.21448843067962,41.182380507948444],[-72.20083403836101,41.19157465575383],[-72.04847976617432,41.25913903369694],[-72.02548289490088,41.29370497046782],[-71.9392446276254,41.30774215335454],[-71.9234342786249,41.30666247732331],[-71.90259336403332,41.299104244517785],[-71.90187471180603,41.2893852294372],[-71.99458084912716,41.24509139345555],[-72.10453463990339,41.19806386514946],[-72.1828677326786,41.16723439148816],[-72.18933560272427,41.16236525319468],[-72.25185834649899,41.12231639996208],[-72.30431995909157,41.10444889166786],[-72.3158183947283,41.09524251989042],[-72.27916713113622,41.08440984216064],[-72.27269926109055,41.080617983013646],[-72.26838734772679,41.04973327212589],[-72.2173630395888,41.04810735923019],[-72.19652212499723,41.04214533487485],[-72.18646099381509,41.05298497738375],[-72.17136929704188,41.05840412900452],[-72.14980973022301,41.058946019612705],[-72.15627760026867,41.09632568943114],[-72.1526843391322,41.10769789124652],[-72.1490910779957,41.146673346530676],[-72.13399938122251,41.145049831455864],[-72.07075798522048,41.10553190938901],[-72.07435124635697,41.05677843039375],[-72.086568334221,41.0318460205672],[-72.10956520549446,41.006904165328564],[-72.08728698644829,41.01286938123731],[-72.06213415849294,41.02534036020521],[-72.04560515726514,41.03238812991624],[-72.01901502485521,41.03293023480147],[-72.00895389367307,41.04214533487485],[-72.00176737140012,41.05135914484385],[-71.96367880335345,41.07736764390088],[-71.9219969741703,41.088743127574865],[-71.889657623942,41.08765983301127],[-71.8558809692591,41.080617983013646],[-71.84581983807696,41.07465890519177],[-71.8558809692591,41.05298497738375],[-71.89037627616929,41.03726691318444],[-71.91624775635194,41.03021966573728],[-71.99098758799067,41.00365018356915],[-72.07938181194804,40.97272934355811],[-72.31941165586478,40.88205324847025],[-72.44230118673232,40.84020260474275],[-72.6277134613746,40.78689990926171],[-72.76569468901535,40.75043362643005],[-72.88499095874643,40.71285788340029],[-72.95973079038517,40.68670572169275],[-73.0373452309331,40.65999813364621],[-73.08118301679814,40.64854874971067],[-73.22994402784832,40.616370919338586],[-73.32193151294216,40.61309772897009],[-73.35211490648857,40.61855295716485],[-73.55477483458594,40.56943986927557],[-73.75959071936519,40.57708205228237],[-73.88248025023275,40.548146328651804],[-73.93350455837073,40.53449306094386],[-73.94500299400745,40.533946872353866],[-73.94572164623476,40.56288873200082],[-74.08226556942093,40.562342774949634],[-74.08010961273904,40.5492384698493],[-74.12251009414948,40.52083701052971],[-74.15772405328697,40.51373476465814],[-74.18718879460609,40.50116740969577],[-74.22887062378922,40.48695799891573],[-74.26120997401753,40.48531825788795],[-74.27630167079074,40.49570260781157],[-74.27917627969993,40.54377758575639],[-74.26983380074509,40.56671030667376],[-74.25833536510835,40.57216932054787],[-74.22527736265275,40.57216932054787],[-74.22599601488004,40.58308601230896],[-74.25114884283539,40.59563800556682],[-74.25258614728999,40.622371351867315],[-74.24324366833514,40.64091473558487],[-74.23390118938029,40.64909400302126],[-74.2022804913793,40.65400108233582],[-74.12538470305866,40.65672708157882],[-74.11532357187652,40.691065128306576],[-74.09951322287603,40.68997530338939],[-74.07795365605716,40.71067892875261],[-74.06286195928395,40.71830495805569],[-74.0520821758745,40.743900238938934],[-74.02549204346457,40.79288499840126],[-73.98093560537225,40.869011728592994],[-73.96225064746255,40.92550642480473],[-73.94931490737123,40.964589870550604],[-73.94644029846205,40.99876890966543],[-73.98165425759954,41.01612290773734],[-74.04561430582885,41.04322937947981],[-74.18072092456043,41.09524251989042],[-74.30792236879175,41.14937911566324],[-74.44087303084143,41.215365278476916],[-74.5278299503442,41.25913903369694],[-74.61334956539238,41.30234359441648],[-74.65790600348473,41.310981074177676],[-74.70246244157704,41.33580745460507],[-74.76714114203365,41.38974521327815],[-74.79660588335277,41.41022983858581],[-74.85337940930913,41.42262529077297],[-74.90727832635629,41.431785626305874],[-74.99782850699555,41.471106493417004],[-75.04166629286057,41.527084094166106],[-75.08478542649831,41.593225913275326],[-75.08406677427102,41.61848173934118],[-75.07328699086159,41.664668930702504],[-75.0876600354075,41.70277526731324],[-75.0876600354075,41.71350537258048],[-75.12143669009038,41.76176868230114],[-75.1192807334085,41.792316684103675],[-75.13077916904523,41.816958847412266],[-75.18755269500159,41.838379111347166],[-75.25295004768549,41.84962188079648],[-75.28744535459568,41.85497488617851],[-75.29822513800511,41.88226824503906],[-75.30613031250536,41.93040456765947],[-75.34062561941555,41.940027476740525],[-75.36649709959819,41.95659686103546],[-75.37224631741655,41.97743609810382],[-75.58065546333229,41.97957307031645],[-75.58137411555958,41.923988488332995],[-75.78906460924802,41.92666193313772],[-75.78690865256613,41.98277839417683],[-79.7768658185114,41.98117575241552],[-79.7818971027547,42.20994439336295],[-79.77183597157256,42.28016852623668],[-79.72153031566185,42.29824389979878],[-79.57348795683896,42.367307788746416],[-79.42975751137983,42.46599037989962],[-79.37370263765078,42.499909767684656],[-79.2572809768289,42.54545998533663],[-79.1897276674631,42.56240042582576],[-79.16529349173506,42.56981042255861],[-79.12073705364273,42.62482855594211],[-79.09630287791468,42.64597644140587],[-79.06899409327744,42.696702043447694],[-79.03162417745807,42.7104331026147],[-78.98850504382034,42.723105230911976],[-78.88358181863518,42.776932904700104],[-78.88645642754436,42.814900763418876],[-78.93963669236422,42.88655426672713],[-78.93963669236422,42.93603089533893],[-79.04887183091316,42.96969438273069],[-79.04743452645856,43.05167198470151],[-79.09342826900549,43.05272226918912],[-79.0919909645509,43.09261975149211],[-79.08624174673254,43.265557535860246],[-79.06468217991367,43.27602287004617],[-78.84908651172498,43.33041359857192],[-78.72979024199391,43.35236529048099],[-78.63924006135466,43.370129894376525],[-78.54868988071541,43.379532578835416],[-78.47826196244044,43.38788929664161],[-77.95508314096922,43.38475566245842],[-77.73158157962807,43.34713889446963],[-77.7114593172638,43.340344586318594],[-77.66259096580768,43.311591022674435],[-77.61515991880619,43.28387016659478],[-77.55335582725876,43.25299623609951],[-77.52820299930342,43.25508987878669],[-77.45633777657385,43.27863839921907],[-77.42256112189095,43.28491646608342],[-77.16384632006454,43.29433235167476],[-77.05029926815182,43.29380928516081],[-76.94178278183018,43.29328621414787],[-76.91447399719296,43.3079305018789],[-76.85051394896364,43.31629708261557],[-76.80236424973484,43.328322024532355],[-76.7599637683244,43.35184220081927],[-76.64785402086628,43.42808936716575],[-76.545086752363,43.4802581022461],[-76.51993392440767,43.49485728312425],[-76.44303813608703,43.52717148354531],[-76.42219722149545,43.538112693359565],[-76.28206003717281,43.538633653838865],[-76.23822225130777,43.55686443488524],[-76.24037820798966,43.74146501378322],[-76.30649421290086,43.82914593255031],[-76.31152477849193,43.86749827350751],[-76.34602008540212,43.861798810265746],[-76.40063765467659,43.8612806502232],[-76.47178422517885,43.8840754318208],[-76.46675365958778,43.90893252243542],[-76.41860396035898,43.93119152129071],[-76.37189156558476,43.93222662089228],[-76.36973560890287,43.90271922256843],[-76.33308434531081,43.92963883810956],[-76.27846677603632,43.92963883810956],[-76.27846677603632,43.90427260833489],[-76.2669683403996,43.8959874158668],[-76.2360662946259,43.91203892916922],[-76.19294716098815,43.93326170247849],[-76.19007255207897,43.95085533306909],[-76.21522538003431,43.96016750024623],[-76.2504393391718,43.94982055774786],[-76.31224343071922,43.94775095305809],[-76.30577556067355,43.97620170069497],[-76.33092838862892,44.004638823445866],[-76.39560708908552,44.024795072402476],[-76.3984816979947,44.06250502187776],[-76.37548482672123,44.064570626786484],[-76.37620347894854,44.090900771655065],[-76.47106557295156,44.0929653855436],[-76.46603500736049,44.109479701923],[-76.44231948385973,44.129600288113295],[-76.3984816979947,44.13217935491029],[-76.3977630457674,44.2043474993423],[-76.37620347894854,44.21671031511876],[-76.23965955576237,44.2192855751065],[-76.23965955576237,44.2280406165722],[-76.2173813367162,44.228555578463435],[-76.21522538003431,44.34790496257489],[-76.1189259815767,44.37102654591561],[-76.04634210661985,44.39157140443917],[-75.93423235916174,44.43417898509957],[-75.83721430847683,44.50341416416661],[-75.76822369465644,44.558231111426025],[-75.69923308083607,44.60378721108942],[-75.63167977147027,44.64828507610631],[-75.56772044189319,44.70500920154141],[-75.50447904589117,44.7458566542504],[-75.4527360855259,44.78157451471142],[-75.31762946679432,44.872300455880584],[-75.15377675897092,44.937453318614374],[-75.0905353629689,44.973052557209364],[-74.97411370214701,45.027933775754924],[-74.91985438100785,45.03682085482298],[-74.91231104790405,45.036060871422514]]],"terms_url":"https://gis.ny.gov/gateway/orthoprogram/index.cfm","terms_text":"New York State Statewide Digital Orthoimagery Program","description":"New York State High Resolution Digital Orthoimagery, 1 foot resolution","icon":"data:image/png:base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAABCCAYAAABdAli1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTA1Nzc1NjVGNjM2MTFFMzk5NkFGRERGMEYyODU3RTciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTA1Nzc1NjZGNjM2MTFFMzk5NkFGRERGMEYyODU3RTciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBMDU3NzU2M0Y2MzYxMUUzOTk2QUZEREYwRjI4NTdFNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBMDU3NzU2NEY2MzYxMUUzOTk2QUZEREYwRjI4NTdFNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhMlZyIAAA02SURBVHja7F1djNxWFb7XyRMvYyQUUbHJeBuoeJtpkUAg0Dj9gYS22dmgIkVUXW+aFvoD8Sr8CRDrVAVFRTSzgBRImuysCEUqauNt0lDSVplFQgiBqPcNNSTrSaMk5CXeF56oL+fYx7t3bzy/2Z3Mz17Ja8/19b32+XzOPX/Xy1mflI//wjMF547QeIExzpjGmODwR+PReY57zqM9j85zFuJvHrfldIx1msbnzn81a3brs/JeB+sTh/6ZB7BK8CQFBAVAW4TfXhpwuOfpwPlwnQ4/dTjOQ10GgLsbgPO68Zk39jJgd/38H0UWijKAkxGMLwJEzoVn86Vb4tiXLwYAMwtD5nfrc/csaHe98HcLAJuORFvIZmBvn7fvCW6131Aggwp2Yfdw0K3PrvUiYJ88+LcyD8NpoC1SeeK9/Z+yzk/cszpEFsJD4IDj8uuctgpl6/N/1TWNuaEQBQ3nIiHG//XdT5dXdZBQFPBV/vfXtnrroK0OG7igWRQEE4shY+Z73//MqhNWE2IWONjvZir0jPaYfe4vFjDANGh1oPSBZvfDz3psQEvvcJoQqIpHc9iFH39uVQD77+832rArwobzofOh3f/zpHOoheK85tM5H+oqdbqzYLPVa6gvi8bxoM6hOh3bpLXvC9CGJv/swDy2DzhtEYBbzTkMCVmg4zwQMg+ESxSafbTH82UibKFOX0h8NMhz1M4nULDgC5CBbQTGKBM4pjQGjmv1Bafd8aOKrjFeBm1uBNVwmMfs9yc/v1aqeJY4xWmy/TxxaFKQSysEWvJCOPgiEGBJMeklKEp1lb5Q+Tf94JwtQuGHTIzwEBQPwUbfd75QXuNhJ4nIzRQbuMOUNuQeVzqfIxFoKteZyp4p1/Ump2363jtgh4mxEJUO0OZCzqyrzxU6ZeyWUgidOocBKEm7SOTBVoG6RYmzzJS+8vRiZNvltK4D7SPfecsCMTgGYFV5yKxrB++tdPgWCqSgNCpj0rFPIi8BYEQSkSpoOUU0zjergHSteNTwocMQ56+sEMLq4NBz0rHT4rV+DVFXlLhuURbD7XJZV4J2/WcP+HBTs8BpCNwYiEq7Q0Mj8aboONNE+23AIZy2Sg0QMorYTStuz4NGwBXBLjtAwOkdHNpROKLlQqJuvsZcqfa9qADew4rI/rM6gGbTW1Xq1Lhoo5EhfLJFRSTiMAkAWfVP5q2AjPORWxGNXQsaF6IoGAfRImaA6zoaIgHiukDcWYW4jRQRLIYEgisZzjI4KmhuO/eodSdozADgWAcct56kJMhj2ZKIqypGdENlhDhOvt6VQKtKik9bnNaVDuOP2m+ajPNzgrO5/7z4JZOtl+4Wj3d8648GqPp5Eb1RfB2hbgZt6Jk3dOCuKMAZCwCBgek1E48wb6ENlZc9GtI52ZPhJt5/UlLytAUkXl0lOqCTfWZIffhSW3kcFMOJdlxKnNVQj9cmNip6WspdJx6Hnj5two24goPywXk15KwMxwHTePlqaXuwRqCVJGWhCoQxJIItyPYYAeQqrie5zCReegL8XJ2hxxMQoK1Q7L4Kge5JY82hb7MtTht65OU8QGxhihmMVEjyBAWPcwYxfS16CzQ+D+c9qKtUZ75Srtfn8Ndfx1xFE8Th5Adx+kDkZ7zyywc7oTE69DajAZzFtx6IU5LcUVhmiYCeAtg8cVJiPI/B9X4SK0vxtMie/mlU/eu4rkrSWIsSxzXPaZt3/c4BYCxomY2AIZAAmHnYB7DpBFwAf6Kbw7zCaE7iHNpEHGTADyNKP+TxTIXgw0EmpARROJ6qHn7Y7iSHk7iblrQ8S+GSYRJx0yqnEEeUJRUeDWVd5TT0mFDbG1Ifo2RaCIWjDWWsqF1Lc9rm0RM2GLmTSGYRPZQog/3kXn5ld83I8ZZH/2CIUFgAHBBA5ITgOR7PTyyEfjAuJng8Z3HB5+A3qr2VhV/vrHRaLBPxbTKEswqXHaBotezcnUtEGxnLtgRaRjG21bLYwD1mKK6uqTTAGotHIfQoa5eJ8cuvPlpuhhCXTjyCbO8AeKUIOC5A/PEKj8HRE+AuvjTacZBqFFviDFksJQTUa3kwCFQZDEOx95CbZTGs2oeqWMxI4tdpT3sU8R/gtNLQrhPs8mvNAUfgBXQjJdbFhSZ/1QNiS2kHzRjVuVqgsZUe/YSD0uazjMJ17XlEQDEoA2ZV4LgM7K0+Nn1Kqtis0S7NeZ1rwZeIPsha8/aMAmC5LdAuvf6YD8DlkeMit9JgFlmUFUmpkBWZVFeWomAsAazMkXIpK8CN1ArGNvQ9AnAB+QGNAQVNfuNxzkNxWiSClhQlxU8Tv2Q6LHG1DHzK/CqHdZy0nJWmHMaRei9EdvPIb/ODhhh5O6YUcYihm0NsZVTabqDsyMDbNcYKFLssVUw2BG3LQzMmFywn4jlO71NsAkU1V4mJRB5nyx56phjgpuTKuqkv4sAJWcymjBVIL8l4PZFa17jOPli2waY6FLfk85dOPTZwnJZikOuJ71H2OXay1ATN2DGNadjvoh0MwB24dHrMYeulK0oqaMb2aUvgJMtZBgCbunTGsvucc4qKbeQl3gjF41+rLKUaUH8WmQdyCkJiaDdjfuTrjFlZAZrxwDGdadxNHMKwn6u+OW72MWB5sq3S3EuJLxHPFxp0teSJV6IHWIbJc4JjvdvEbY3TCzRZa6wlRcS4/5jBo5xDUYB9VQgx2s+AUXFZbX9gpo7txerYZ1YNzdFv8p4atfMjN5Zx30s2LjIXgmeAweZDwczq2T1BP6NFYk8Ot9yNigVpamZiVFOczKJrZK47oIZiyNhWXwKsS9xiXGp7UyxNubebuDgpG4fvPVqJxCHaz1zMAnBW9a3+BqzWXILLkFgcXXbb7MNK41gEs45rrFHRJRAxZudjPigAJqqA2Tb/7b1F/+3HBwUwT7GTkIMwlnUDiOQ2CLPUmh8Liv1WD8xmCxrz52grLxnXAJzvv7O3MmCejqCOFwM9/ufq+AkbeT0wWi2LzgKlMaxK0QbYEZx484fJTZWWyu00yWU6W7kSJvF6LNYAtZWC97WNtohjN5J7Km9sOypix0dkTMf5UMupBXFdnG2QpAcs1VFqQdQeTwhKK2DJnjqO65fPJX3XyTeRzsfj4QFUz1Hagg/nSheOjrTlmaC3P0jCJfTbZcvhllyTXRUVBaSQYiZYbQIXqPn+qD1OAWH2IcchUZDxOKUERMoJBkEjikVH8SenooURcRJCFCKNTou4hkdpBJRgEKcVUAO6IhLIcV/UtyBuX+6RQAY1NvoQGdaK5GyUtlCgtAUgjBjb+sTsBADXTrA1MmRxDiOwDMXInm9DNNYq7SokujK/Bhv9ypP2LbDubSvZPSfzAJwJsB6Ct+QQAIfJR8ULR0b8FrgsiVbvUwxi2Y5rRgHJqca0dB5BGpPAbRW0RBFZntN6dT6qHh/1Fo6NloAFRzG6DnyXg33TigMR9gBLX9q0mGaHsfScfkuxqfw682KuhTXdrfkee60MP37SADG7AE8ze/Fosdjq9URIXQK00qAtU7KKE6+/X0dRySd2Vq06RQrU0jb7xyQD4MSde922VeFNE3/SN+0/6/TCs2r9AhroLIuo0ABwbRmyG5hwoJNJAM5cB61DBbRfFz/5B8A5AFzLEXbAO78BddNQrHNapwqQ2gbg5uEAv4pwA4Dz7nyiefB4KCJzB4Dz10HrlDY5vSsAmuNijikWi0rUJp0WQI/Y7eqh7V0PWl+u2jP2vGaAKb5AXhdcKGKD8V2pd83Hvnmm8gEa65x9+NrUjmCd0zpc/OO7fBB2sf0mcBGIOAfGd3nrk7N6nTkt2IBemx7IpO5L0Ag4d+H4qAHAHQDQUFyO4cJ7AG6F92fLU6f1zU+fdjQhRnBO03ogTXAgFjUP7zlpwJOWQEyOxA5pNh9ybi38Zqe35alTMO/xSRE7pKeg3rnyqy/XFI+bvn22CDIXNzOMndcV6NPTYIsd3pp39fm1/fjaQK1EH97rFuGBEbwsPjkQfVxEixox+MlnLh1+yBp65g0jjBc85kUcedCjxZLxMdZlkugGS/5jBkUntDhaMXHlJ2ZpHbTVBU7naB5wPglPX8UvtQIIkwAcfrU14PghteXVqYyAozBUdDwLxxXYXPiJn86YlkNNANzo1Z9uc9dBW4OCdhwQOUccx4jj8LiKWWnw2wcUPKgLJODwGjNezsxHQonjMAMb+nKuH7zPXet73ziooAkMeVCMjz61O6MxXgIRuSKgOvTsGSNkIg+o5AGbcihENonsgRY3FzLgOCbc6y/c3zH7biBBAzvOZHHQFxdMlgGE8sKRnRHRjW+cKgInmWCz5YF/ELCsBhUhwgTIahqvAnAOXONee/GLt8WeG0jQ0M8oIntHBNF/gBLCAjsOlQ8TAMF/NoTuLIafydBCUQ015gNwFQDOu1La4d7u+x/IOc2wXg3oQzNs6TMZnD7rFJsDLmwVOPaqhx/uOu/IoHIaaIkCE3GqMCd5wHEecBeAJLyLR4pdH2T8vwADANA824ekci98AAAAAElFTkSuQmCC"},{"id":"olho_dagua_do_casado","name":"Olho d'Agua do Casado AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Olho%20Dagua%20do%20Casado&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.78219871045,-9.54444051839],[-37.78259635433,-9.45388353571],[-37.8114653,-9.45411888151],[-37.81735042942,-9.45451112414],[-37.82057134484,-9.45415810579],[-37.8739351535,-9.45427577861],[-37.87357727401,-9.54475422977],[-37.78219871045,-9.54444051839]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"MAPNIK","name":"OpenStreetMap (Standard)","type":"tms","template":"https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png","scaleExtent":[0,19],"terms_url":"https://www.openstreetmap.org","terms_text":"© OpenStreetMap contributors, CC-BY-SA","default":true,"description":"The default OpenStreetMap layer.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAGb0lEQVR4Xq3MS2xcVx3H8e855z7m3vH1jMdjO43zshIrtpM0SZ3WFEcRVFFKoRWPBYtAHwgWCFUsQN100QeCsqAhCESrirRASdWWIkoUqgKFJm3UZ5o2oW2akrR5uXbi2ON4PPfOfZ17iERW2bCAz1/f3V8/cfDC02UEj4OxKHjdFMUfmUzOlAeXZFZuuVIKN8zi1dPh7Hcn5091G2EOB5b//NplA28/9tAT4bq111jD64ZKHR2VQWPEbULI0aHqZz7NZeLNmSeVMOJu4AfGgNEGLsR/95YuetcRzprcFJvaaVxrpm2mmqfp8FxKSYk8ck+0pt1nykFp0A/k9Tnt/lq3T2dHEOmi2DxSu+EdAAFwcPqp640xe42h26Qa2hqnXsFVHs04pNFuYgvbtOWCmD3aMj2VNaLi1+jwyxgpCKOQRCdMN6ZMd5Bmw1cPfG+5O/7LeX0ECyBppx9Zrn0c6BbNHJNr4qhFYWtsJCWpSFUm3ntxips2bxe+p1BKIJQECpRbkCQ2wu0XzbnIeemvhzYCVNR6JMDm5bdNF9qcwhiKbpvMg2KujZDmUgX1jgqT719gy+iX6QxsPM9F2YqclHbRRpUEXmCRZTGFlZGKxSMbR6+uA0gu863OzLc7cVUZN6jgKI8kicl0ykzjAiW5lGrVAWUwokApSa3UTY/XR2B3UlDgVy1sB8od7tgt2++4AcACOHL+uRW2bW8QQiCxcUoS6XssyBbnF6Y5+8kci8vjlJwqjnQwWpDlgtRYZDpHmxJzWUyk26gOYXxK0g+8G4bXX/snC0DZcmVh9EoQ5DpDSIVJYmIiGvkCurAQpkLU9kkTEEJeCjxbURSCZgTkfVjOApoM6Qtc3109Nj7uWO9M70EbPQT4YMhNjrWQEdHmTPs8SgfUisUgDLoAgcGyEjJtEaeaVlKQ5gVSGYwBhETaEmVJcemQaZ44aRpvyLIEnedGoNHNkNTTeI5DT2kRljeJziVhnKNlE1GaJFfnuRi3SXMDxmA7IUqCI20qdifkxfED+/dlanzb1cYL3BFhsTXPU4Ep0FGKUVALegCb1oLN7FlNpd5HIUNQLYxIsO0EKcByWljuAmXbp7fcIwgVb7xyaNeep3YfUnt272PLjaP1em/lZqmEk4cJQoMKfBxVIcwjlAp47okX6ap3XaoP221CIREyx7La2E6O7/h0eTXK+Bw+8uHrP7znvocXLe6flwCHXj06kab5hJAS6dhQFOgiJ2qXsKLVuHqAgdVD7HrwXibPTKJzFyMMAgECHGXTJTqxE4t3T5xMD7y29+mFRjgpLSUlYJ793T9ORWF0Lk1StCzQNqTTAle30flbzJ/bx6n3Xsa2Fb9/5Eccfu19wnlNFBniWJA3JecbDfa/8y5nJg7bW7ZeuyYKZwyF0QIAkC988Ogzfof6SppapHGZqgNTExPsfngfgaXpqyWk9QF6lwWk7YJlK1fQaTysqk8sE6LwIq4OEMql1DH3/O03PnBHUCk3JMCeA7/q6u1a0ltiNZ1eL719cPrcWR752d+Yn2lx/HSDY40qY2Pb2PapjYxv3YBX1syZ88weP3bp90Omw3PMOxNUe9FTn9gn5uemQqfk5BbAisHBlVo7g7PFx9TdgDMnZvjtzheI51qkWY5xYWxTLxXfJ5IVevIZ6gMDxCYnPjWDXZ0nSiOkEmYqO5l8cGT6FSD6+NhRJMCF1sWV88VkX6f3n/FHd+xl9uwsrTDEOIbPfWEj120eorw0JEzLhGWfop3ixxKrP0CTIQSAEVmhw5/f94uXAANg3b/r+1YrnV1T86ucPDzBrp3PcvHcHGmaUekL+OKtm9m0ailOUEe4FrXyWaKFblM4HmUvElNzF4jTxFiOhRRSJO34JHCOy6RU0i60uepfx07nO+593FycapAkCbX+Kl+/cxvXfXYIU3GjN/Yf2vPPg2/9JVxoNYNqQ+hcilznlKWDcpSwlCWiZrtx/O3Tf+AKClj88I9v/9aD99/aHBkaLlYNDTXuvPubH/3kN3e9vP3bn78HGAP6gSXA6K3fufnOXz+/888vHH3i9O4XH3j1roe+8dDo1pGvAeuAClfa/+aTQH35Yztuenz7l4aPLB9c81O/3H3L5VHFlUACZaAH6AQc/pv1o9cEiwbWbRlev+mrazeOblg3usnj/6nWV2fVyFp71fCa0sDgkOKyq5av4H/xb0Ky8po5hQEuAAAAAElFTkSuQmCC"},{"id":"OpenStreetMap-turistautak","name":"OpenStreetMap (turistautak)","type":"tms","template":"http://{switch:h,i,j}.tile.openstreetmap.hu/turistautak/{zoom}/{x}/{y}.png","scaleExtent":[0,18],"polygon":[[[16.1139147,46.8691038],[16.1789749,46.90662],[16.2000429,46.9415079],[16.2217547,46.9355441],[16.2462784,46.9463851],[16.2553226,46.9642125],[16.2764694,46.9626082],[16.290583,47.0139849],[16.3016199,46.9992329],[16.3414618,46.9965225],[16.3505162,47.0106313],[16.3734016,46.9985929],[16.412765,47.00475],[16.4332705,46.9927417],[16.4478119,47.003893],[16.479997,46.9941169],[16.5121988,47.0011695],[16.4635584,47.0322699],[16.4478586,47.0227481],[16.439123,47.029663],[16.445673,47.038872],[16.520323,47.056103],[16.473213,47.0736169],[16.4637199,47.09392],[16.500798,47.110058],[16.500035,47.123295],[16.5295349,47.1287419],[16.5171609,47.1496938],[16.454951,47.1425878],[16.4648728,47.1683349],[16.4555643,47.1875584],[16.4305559,47.1847022],[16.4195013,47.1949147],[16.4189215,47.2107114],[16.4371293,47.2097043],[16.4426335,47.2337117],[16.4313127,47.2527554],[16.4671512,47.2531652],[16.4892319,47.2798885],[16.4646338,47.3338455],[16.4337002,47.3528101],[16.458513,47.3670496],[16.4454619,47.4070195],[16.4831657,47.4093628],[16.4963821,47.3892659],[16.5170941,47.4100218],[16.5749054,47.4054243],[16.5807291,47.4191699],[16.661847,47.455595],[16.6706419,47.47422],[16.6523395,47.500342],[16.6895619,47.510161],[16.7147797,47.540199],[16.663545,47.567733],[16.673199,47.6049544],[16.6595343,47.6061018],[16.652758,47.622852],[16.6314207,47.6283176],[16.5739108,47.619667],[16.5147382,47.6461964],[16.4967504,47.6393149],[16.425464,47.6621679],[16.4437449,47.674205],[16.4480507,47.6964725],[16.4746984,47.6811576],[16.4872245,47.6979767],[16.5521729,47.7225519],[16.5363779,47.736785],[16.5479799,47.751544],[16.6095193,47.7603722],[16.6344148,47.7590843],[16.65729,47.7414879],[16.7209405,47.7353565],[16.7534062,47.6828165],[16.8301587,47.681058],[16.8394284,47.7045139],[16.8668943,47.7211462],[16.876679,47.6876452],[17.0937421,47.7077706],[17.0706562,47.7285366],[17.0516019,47.7938499],[17.0749479,47.8084997],[17.047139,47.8285635],[17.0519452,47.8377691],[17.0105513,47.8581765],[17.0163878,47.8673325],[17.0857537,47.8746239],[17.113171,47.9271605],[17.0917133,47.9342916],[17.1183782,47.9601083],[17.094657,47.9708775],[17.2010289,48.019992],[17.241769,48.0224651],[17.257955,47.998655],[17.334651,47.993125],[17.4029929,47.947849],[17.4539199,47.8852579],[17.5267369,47.865509],[17.5675779,47.8151289],[17.608402,47.8218859],[17.7085789,47.756678],[17.7798739,47.739487],[17.8660959,47.74575],[17.9001292,47.7392633],[17.946867,47.744668],[17.9708709,47.7578392],[18.0044103,47.7463402],[18.0380583,47.7576812],[18.2958774,47.7314616],[18.4540681,47.7651226],[18.4931553,47.7527552],[18.5590761,47.7659963],[18.6460866,47.7590921],[18.7260691,47.7890411],[18.7411784,47.8138245],[18.7920013,47.8230869],[18.8485417,47.8167221],[18.855876,47.826077],[18.828014,47.834291],[18.8135749,47.85555],[18.76353,47.8716049],[18.756858,47.896838],[18.776746,47.955092],[18.7552499,47.9763469],[18.8157429,47.993442],[18.819998,48.039676],[18.833268,48.048239],[18.8749364,48.0470707],[18.886674,48.058682],[18.9089819,48.051139],[18.9439039,48.058865],[18.9816099,48.0536009],[19.0148639,48.078179],[19.0585249,48.0573529],[19.0843619,48.072781],[19.107402,48.065596],[19.1352889,48.074146],[19.2413679,48.0536529],[19.2557819,48.0715559],[19.3031119,48.088711],[19.3865969,48.091914],[19.400018,48.082304],[19.454053,48.101436],[19.467354,48.083933],[19.4944199,48.109906],[19.492377,48.1396639],[19.5128219,48.154663],[19.504518,48.173443],[19.528967,48.190358],[19.526044,48.20313],[19.577502,48.2160149],[19.6308263,48.2500725],[19.6445239,48.2391719],[19.669857,48.239212],[19.691219,48.203894],[19.721125,48.201473],[19.74618,48.2165119],[19.7871629,48.19253],[19.7987329,48.19482],[19.8052829,48.183733],[19.782415,48.165039],[19.794812,48.153529],[19.821331,48.169081],[19.8452819,48.162742],[19.8551729,48.178431],[19.8601309,48.169409],[19.898745,48.1663119],[19.9145359,48.146863],[19.898298,48.1249019],[19.937383,48.131118],[19.9743939,48.1660049],[19.988706,48.1621679],[20.029038,48.1776849],[20.049449,48.1671999],[20.0729859,48.179606],[20.0700369,48.1917019],[20.1340909,48.225182],[20.1331879,48.253982],[20.206162,48.250979],[20.2038299,48.261906],[20.228466,48.262779],[20.2349469,48.279933],[20.286858,48.26164],[20.3257109,48.272794],[20.3374649,48.301667],[20.3656579,48.316606],[20.384077,48.3511809],[20.4098349,48.365857],[20.402532,48.382565],[20.4205349,48.403858],[20.416228,48.418536],[20.507929,48.489363],[20.5065069,48.534415],[20.537471,48.527878],[20.5464939,48.544292],[20.586595,48.535759],[20.6538739,48.561413],[20.836359,48.58284],[20.8378,48.57421],[20.8504359,48.5816329],[20.8453301,48.5665046],[20.8681549,48.551818],[20.922323,48.559453],[20.9346349,48.538341],[20.955882,48.533963],[20.9561979,48.521666],[20.9815849,48.5177669],[21.0151139,48.532313],[21.0663209,48.525894],[21.1174479,48.4910549],[21.1608749,48.521499],[21.179634,48.518232],[21.221061,48.537497],[21.305488,48.5222489],[21.313377,48.550841],[21.326875,48.554129],[21.319384,48.561201],[21.4154499,48.558951],[21.4226649,48.578821],[21.4406099,48.585104],[21.514091,48.551065],[21.5420199,48.508395],[21.6139329,48.509416],[21.6201879,48.469826],[21.663549,48.417961],[21.6645609,48.392164],[21.7017409,48.380695],[21.711871,48.357617],[21.8174139,48.332787],[21.8352029,48.3346409],[21.837213,48.363253],[21.8842979,48.356047],[21.8848429,48.367539],[21.897883,48.36256],[21.8997959,48.3702229],[21.9281859,48.3615969],[21.9268059,48.370899],[21.949198,48.378728],[21.994463,48.377323],[22.0213259,48.392749],[22.0546049,48.377528],[22.0764859,48.387241],[22.086743,48.371564],[22.1359089,48.380519],[22.131056,48.3912329],[22.152768,48.3962409],[22.1561913,48.4093076],[22.2125722,48.4256468],[22.2371405,48.4100396],[22.2654858,48.4098675],[22.2398761,48.3870055],[22.2675722,48.3611612],[22.3178106,48.3545437],[22.3132861,48.3250712],[22.3372944,48.3079113],[22.3384267,48.2792074],[22.3847547,48.2339632],[22.4006407,48.249198],[22.4328384,48.2525166],[22.456386,48.2423109],[22.4899029,48.2534237],[22.4972201,48.2395546],[22.5161491,48.237965],[22.5311088,48.2094282],[22.5711442,48.1961428],[22.5616362,48.1816066],[22.5982449,48.144756],[22.5902763,48.1073414],[22.6754492,48.091997],[22.7347192,48.119848],[22.7576242,48.1200599],[22.7703914,48.1090162],[22.772319,48.1218742],[22.8027688,48.1221112],[22.8025285,48.1070813],[22.8254256,48.1175119],[22.8364365,48.080249],[22.8611284,48.0750312],[22.8677955,48.0524256],[22.8820424,48.0548053],[22.8659692,48.0113165],[22.835562,47.9905988],[22.8407599,47.9813636],[22.8725729,47.9752683],[22.8697274,47.9659593],[22.8915652,47.9672446],[22.897435,47.9540629],[22.8473299,47.9077579],[22.7928135,47.8908586],[22.7586924,47.8941446],[22.77775,47.8422508],[22.7136344,47.8360928],[22.6801938,47.7877527],[22.6111171,47.7717455],[22.5490018,47.7722246],[22.4812121,47.8108886],[22.4513078,47.803389],[22.4313319,47.7398119],[22.3566167,47.7486206],[22.3177714,47.7660887],[22.3176236,47.7433657],[22.2851369,47.7292757],[22.264325,47.7310675],[22.2589955,47.6979057],[22.2306796,47.693196],[22.1796501,47.5916115],[22.1289245,47.5978984],[22.0942787,47.5583628],[22.0782587,47.5621299],[22.0534529,47.5474795],[22.0712176,47.5380742],[22.0617872,47.5288029],[22.0451278,47.5398919],[22.0367222,47.5326653],[22.0071886,47.48362],[22.0327909,47.4508372],[22.0238835,47.3908631],[22.0119849,47.3758016],[21.9627373,47.381053],[21.9382461,47.3725317],[21.8777922,47.2857763],[21.8872845,47.2730473],[21.8534909,47.2397622],[21.8580662,47.1873597],[21.8124804,47.1667511],[21.7924092,47.1059751],[21.7268258,47.0983882],[21.6976037,47.057915],[21.6504151,47.0408303],[21.6888701,47.0019977],[21.6678744,46.9712337],[21.6814917,46.9652089],[21.6381964,46.9330487],[21.5984455,46.9274708],[21.6142857,46.8867275],[21.6016694,46.8668202],[21.520328,46.8373749],[21.5186086,46.8000703],[21.4831761,46.7650246],[21.5263389,46.7393249],[21.529369,46.7209721],[21.4923253,46.6859652],[21.4728438,46.6959075],[21.4299047,46.693937],[21.4309553,46.6781367],[21.4546661,46.660863],[21.4162375,46.6426231],[21.4097959,46.6218052],[21.3657038,46.6379501],[21.3300499,46.6318155],[21.3139733,46.617666],[21.3012351,46.5908672],[21.3207905,46.5828562],[21.2743045,46.5407362],[21.2600254,46.5021583],[21.2744188,46.4767333],[21.2964506,46.4762973],[21.3174343,46.4507288],[21.2895176,46.4154784],[21.2963256,46.4069601],[21.2250116,46.4136899],[21.2064214,46.4033825],[21.1992563,46.3479034],[21.1762269,46.3357664],[21.180497,46.3044494],[21.1155437,46.3018529],[21.1030549,46.2624637],[21.0708792,46.2539014],[21.0660827,46.2429394],[21.0366237,46.2480392],[21.0246723,46.2665329],[20.960817,46.2623039],[20.9465849,46.2793024],[20.9250701,46.2766191],[20.9218133,46.2618129],[20.8732713,46.2877555],[20.7756538,46.2759602],[20.7490474,46.2508489],[20.7618619,46.204563],[20.727401,46.2077485],[20.7341052,46.1939355],[20.7140487,46.1660531],[20.6843592,46.1447802],[20.6549178,46.1497739],[20.6394471,46.1267602],[20.5450486,46.1790935],[20.5014839,46.190334],[20.4949436,46.1709908],[20.4592293,46.1428837],[20.3975133,46.1574709],[20.3685325,46.1528554],[20.3557074,46.1696256],[20.2968136,46.1521542],[20.2549024,46.1158522],[20.2484757,46.1300956],[20.2330132,46.1241668],[20.1817362,46.1601137],[20.1364966,46.1449476],[20.1009667,46.1772756],[20.0636156,46.1437275],[20.0346142,46.1458888],[20.0158072,46.1768354],[19.9354075,46.1764243],[19.8533469,46.1500005],[19.8179747,46.1281652],[19.7585403,46.1479754],[19.6982054,46.1879317],[19.6827672,46.1800388],[19.661508,46.1904394],[19.6317396,46.1692993],[19.5676482,46.179106],[19.5604013,46.1665762],[19.5026585,46.1424492],[19.5271208,46.1210269],[19.4645033,46.0953827],[19.4665828,46.0820437],[19.4160037,46.0460453],[19.3803957,46.0358749],[19.3640923,46.0522965],[19.2819012,46.0148048],[19.2965348,45.9881173],[19.2856472,45.9968981],[19.1479857,45.9963445],[19.1338422,46.0370993],[19.104873,46.0401673],[19.0660427,46.0001999],[19.0796791,45.9636376],[19.0059803,45.9590674],[19.0092745,45.9236559],[18.9061334,45.9353801],[18.8794572,45.9166827],[18.8647137,45.9208493],[18.8685629,45.9113361],[18.8276792,45.9051714],[18.8220041,45.9145893],[18.8075092,45.9036055],[18.809247,45.8796189],[18.7956242,45.8784488],[18.7048857,45.9181883],[18.6700246,45.9108439],[18.6596602,45.9168934],[18.6651348,45.899279],[18.6412808,45.8890396],[18.6550179,45.8742393],[18.6277704,45.8733782],[18.6148449,45.8531438],[18.6236656,45.8398531],[18.5732391,45.8137578],[18.5749849,45.8004344],[18.559716,45.8037961],[18.5223504,45.7826858],[18.4906706,45.7947167],[18.4821905,45.7655032],[18.4562828,45.7695229],[18.4450763,45.7605195],[18.446853,45.737128],[18.40763,45.7397119],[18.3918949,45.7616983],[18.3642257,45.7729364],[18.3394214,45.7471605],[18.2968157,45.7612196],[18.2440473,45.7612305],[18.2307311,45.7790328],[18.1908702,45.7878759],[18.1681939,45.7762712],[18.1246514,45.7896277],[18.1068067,45.7708256],[18.0818922,45.7645205],[17.9958808,45.7957311],[17.9302095,45.7863301],[17.9066757,45.7925692],[17.8653145,45.7670064],[17.8262748,45.8099957],[17.8089784,45.8040989],[17.7809054,45.8174884],[17.7603399,45.811923],[17.7408624,45.8295975],[17.6632915,45.8381849],[17.6276211,45.8979446],[17.5700676,45.9358204],[17.4378254,45.9503823],[17.4258964,45.9272681],[17.4108059,45.9399665],[17.392149,45.9302149],[17.3828713,45.9475733],[17.3476208,45.9423413],[17.3438769,45.9605329],[17.3537711,45.9525011],[17.3905375,45.9581914],[17.387423,45.9661823],[17.3583539,45.9642737],[17.3754852,45.9686921],[17.3751895,45.9881054],[17.3635685,45.9915442],[17.3567202,45.9735836],[17.3339583,45.9960781],[17.3319847,45.9728948],[17.3129974,45.9665347],[17.323647,45.9887776],[17.2987653,45.9838652],[17.3041996,46.0021128],[17.2579726,46.0110256],[17.29632,46.0285169],[17.2541514,46.030005],[17.270955,46.0567055],[17.2324767,46.0592034],[17.2525145,46.0664725],[17.2313144,46.0790345],[17.2019916,46.0765488],[17.2331299,46.0989644],[17.2104017,46.1001693],[17.2129734,46.113855],[17.175927,46.1084583],[17.1743424,46.1287608],[17.1865197,46.1332308],[17.1810983,46.1505485],[17.1562307,46.1585819],[17.1592857,46.1696818],[17.1261012,46.1684495],[17.1227409,46.1789791],[17.0752482,46.1889531],[17.0661614,46.2022984],[16.9735401,46.2251982],[16.973954,46.2431113],[16.9504085,46.2415285],[16.8862356,46.2814598],[16.8713682,46.3252767],[16.8802109,46.3356966],[16.8615374,46.3452401],[16.8656232,46.3556489],[16.8521959,46.3517189],[16.8498589,46.3626245],[16.8352859,46.3638195],[16.8376499,46.3748032],[16.8261732,46.3670994],[16.7933444,46.387385],[16.7592072,46.3776563],[16.7298672,46.40149],[16.7182119,46.3898704],[16.6772872,46.4494536],[16.6631785,46.4486958],[16.6663732,46.4582995],[16.6187915,46.4619875],[16.604468,46.4760773],[16.5235997,46.5053761],[16.5325768,46.5314027],[16.5176728,46.5363516],[16.5084107,46.5652692],[16.4829969,46.5660383],[16.4834008,46.5786011],[16.4455713,46.610952],[16.4248583,46.6131645],[16.385941,46.6442485],[16.3915424,46.6637257],[16.4198454,46.6584771],[16.4286335,46.6939737],[16.3689211,46.7040082],[16.3798266,46.7153869],[16.3710856,46.7222945],[16.3570587,46.7142387],[16.3185954,46.7541449],[16.3305417,46.7752119],[16.3121626,46.7780033],[16.3127666,46.797314],[16.3406373,46.8051851],[16.3508404,46.8300552],[16.3403309,46.8468762],[16.3015007,46.8595142],[16.2913867,46.8728341],[16.2332296,46.8766702],[16.1560866,46.8537074],[16.126571,46.8569079],[16.1139147,46.8691038]]],"terms_url":"https://www.openstreetmap.org","terms_text":"© OpenStreetMap contributors"},{"id":"osm-gps","name":"OpenStreetMap GPS traces","type":"tms","template":"https://{switch:a,b,c}.gps-tile.openstreetmap.org/lines/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"terms_url":"https://www.openstreetmap.org/copyright","terms_text":"© OpenStreetMap contributors","terms_html":"GPS Direction: © OpenStreetMap contributors.","description":"Public GPS traces uploaded to OpenStreetMap.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAGb0lEQVR4Xq3MS2xcVx3H8e855z7m3vH1jMdjO43zshIrtpM0SZ3WFEcRVFFKoRWPBYtAHwgWCFUsQN100QeCsqAhCESrirRASdWWIkoUqgKFJm3UZ5o2oW2akrR5uXbi2ON4PPfOfZ17iERW2bCAz1/f3V8/cfDC02UEj4OxKHjdFMUfmUzOlAeXZFZuuVIKN8zi1dPh7Hcn5091G2EOB5b//NplA28/9tAT4bq111jD64ZKHR2VQWPEbULI0aHqZz7NZeLNmSeVMOJu4AfGgNEGLsR/95YuetcRzprcFJvaaVxrpm2mmqfp8FxKSYk8ck+0pt1nykFp0A/k9Tnt/lq3T2dHEOmi2DxSu+EdAAFwcPqp640xe42h26Qa2hqnXsFVHs04pNFuYgvbtOWCmD3aMj2VNaLi1+jwyxgpCKOQRCdMN6ZMd5Bmw1cPfG+5O/7LeX0ECyBppx9Zrn0c6BbNHJNr4qhFYWtsJCWpSFUm3ntxips2bxe+p1BKIJQECpRbkCQ2wu0XzbnIeemvhzYCVNR6JMDm5bdNF9qcwhiKbpvMg2KujZDmUgX1jgqT719gy+iX6QxsPM9F2YqclHbRRpUEXmCRZTGFlZGKxSMbR6+uA0gu863OzLc7cVUZN6jgKI8kicl0ykzjAiW5lGrVAWUwokApSa3UTY/XR2B3UlDgVy1sB8od7tgt2++4AcACOHL+uRW2bW8QQiCxcUoS6XssyBbnF6Y5+8kci8vjlJwqjnQwWpDlgtRYZDpHmxJzWUyk26gOYXxK0g+8G4bXX/snC0DZcmVh9EoQ5DpDSIVJYmIiGvkCurAQpkLU9kkTEEJeCjxbURSCZgTkfVjOApoM6Qtc3109Nj7uWO9M70EbPQT4YMhNjrWQEdHmTPs8SgfUisUgDLoAgcGyEjJtEaeaVlKQ5gVSGYwBhETaEmVJcemQaZ44aRpvyLIEnedGoNHNkNTTeI5DT2kRljeJziVhnKNlE1GaJFfnuRi3SXMDxmA7IUqCI20qdifkxfED+/dlanzb1cYL3BFhsTXPU4Ep0FGKUVALegCb1oLN7FlNpd5HIUNQLYxIsO0EKcByWljuAmXbp7fcIwgVb7xyaNeep3YfUnt272PLjaP1em/lZqmEk4cJQoMKfBxVIcwjlAp47okX6ap3XaoP221CIREyx7La2E6O7/h0eTXK+Bw+8uHrP7znvocXLe6flwCHXj06kab5hJAS6dhQFOgiJ2qXsKLVuHqAgdVD7HrwXibPTKJzFyMMAgECHGXTJTqxE4t3T5xMD7y29+mFRjgpLSUlYJ793T9ORWF0Lk1StCzQNqTTAle30flbzJ/bx6n3Xsa2Fb9/5Eccfu19wnlNFBniWJA3JecbDfa/8y5nJg7bW7ZeuyYKZwyF0QIAkC988Ogzfof6SppapHGZqgNTExPsfngfgaXpqyWk9QF6lwWk7YJlK1fQaTysqk8sE6LwIq4OEMql1DH3/O03PnBHUCk3JMCeA7/q6u1a0ltiNZ1eL719cPrcWR752d+Yn2lx/HSDY40qY2Pb2PapjYxv3YBX1syZ88weP3bp90Omw3PMOxNUe9FTn9gn5uemQqfk5BbAisHBlVo7g7PFx9TdgDMnZvjtzheI51qkWY5xYWxTLxXfJ5IVevIZ6gMDxCYnPjWDXZ0nSiOkEmYqO5l8cGT6FSD6+NhRJMCF1sWV88VkX6f3n/FHd+xl9uwsrTDEOIbPfWEj120eorw0JEzLhGWfop3ixxKrP0CTIQSAEVmhw5/f94uXAANg3b/r+1YrnV1T86ucPDzBrp3PcvHcHGmaUekL+OKtm9m0ailOUEe4FrXyWaKFblM4HmUvElNzF4jTxFiOhRRSJO34JHCOy6RU0i60uepfx07nO+593FycapAkCbX+Kl+/cxvXfXYIU3GjN/Yf2vPPg2/9JVxoNYNqQ+hcilznlKWDcpSwlCWiZrtx/O3Tf+AKClj88I9v/9aD99/aHBkaLlYNDTXuvPubH/3kN3e9vP3bn78HGAP6gSXA6K3fufnOXz+/888vHH3i9O4XH3j1roe+8dDo1pGvAeuAClfa/+aTQH35Yztuenz7l4aPLB9c81O/3H3L5VHFlUACZaAH6AQc/pv1o9cEiwbWbRlev+mrazeOblg3usnj/6nWV2fVyFp71fCa0sDgkOKyq5av4H/xb0Ky8po5hQEuAAAAAElFTkSuQmCC","overlay":true},{"id":"lu.geoportail.opendata.ortho2010","name":"Ortho 2010 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2010/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","endDate":"2010-07-02T00:00:00.000Z","startDate":"2010-06-24T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"lu.geoportail.opendata.ortho2013","name":"Ortho 2013 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2013/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","endDate":"2013-07-20T00:00:00.000Z","startDate":"2013-07-19T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"lu.geoportail.opendata.ortho2016","name":"Ortho 2016 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2016/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","endDate":"2016-08-16T00:00:00.000Z","startDate":"2013-08-30T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"lu.geoportail.opendata.ortho2017","name":"Ortho 2017 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2017/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","endDate":"2017-06-22T00:00:00.000Z","startDate":"2017-06-14T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"OS-historic-25k-OSM_Limited","name":"OS 1:25k historic (OSM)","type":"tms","template":"https://ooc.openstreetmap.org/os1/{zoom}/{x}/{y}.jpg","scaleExtent":[6,17],"polygon":[[[-6.4585407,49.9044128],[-6.3872009,49.9841116],[-6.2296827,49.9896159],[-6.2171269,49.8680087],[-6.4551164,49.8591793],[-6.4585407,49.9044128]],[[-1.4495137,60.8634056],[-0.7167114,60.8545122],[-0.7349744,60.4359756],[-0.6938826,60.4168218],[-0.7258429,60.3942735],[-0.7395401,60.0484714],[-0.9267357,60.0461918],[-0.9381501,59.8266157],[-1.4586452,59.831205],[-1.4455187,60.0535999],[-1.463211,60.0535999],[-1.4643524,60.0630002],[-1.5716475,60.0638546],[-1.5693646,60.1790005],[-1.643558,60.1807033],[-1.643558,60.1892162],[-1.8216221,60.1894999],[-1.8204807,60.3615507],[-1.8415973,60.3697345],[-1.8216221,60.3832755],[-1.8179852,60.5934321],[-1.453168,60.5934321],[-1.4495137,60.8634056]],[[-4.9089213,54.4242078],[-4.282598,54.4429861],[-4.2535417,54.029769],[-4.8766366,54.0221831],[-4.9089213,54.4242078]],[[-5.8667408,59.1444603],[-5.7759966,59.1470945],[-5.7720016,59.1014052],[-5.8621751,59.0990605],[-5.8667408,59.1444603]],[[-1.7065887,59.5703599],[-1.5579165,59.5693481],[-1.5564897,59.4965695],[-1.7054472,59.4975834],[-1.7065887,59.5703599]],[[-7.6865827,58.2940975],[-7.5330594,58.3006957],[-7.5256401,58.2646905],[-7.6797341,58.2577853],[-7.6865827,58.2940975]],[[-4.5338281,59.0359871],[-4.481322,59.0371616],[-4.4796099,59.0186583],[-4.5332574,59.0180707],[-4.5338281,59.0359871]],[[-8.6710698,57.8769896],[-8.4673234,57.8897332],[-8.4467775,57.7907],[-8.6510947,57.7779213],[-8.6710698,57.8769896]],[[-5.2395519,50.3530581],[-5.7920073,50.3384899],[-5.760047,49.9317027],[-4.6551363,49.9581461],[-4.677965,50.2860073],[-4.244219,50.2801723],[-4.2487848,50.2042525],[-3.3812929,50.2042525],[-3.4223846,50.5188201],[-3.1164796,50.5246258],[-3.1210453,50.6579592],[-2.6736357,50.6619495],[-2.5953453,50.6394325],[-2.5905026,50.5728419],[-2.4791203,50.5733545],[-2.4758919,50.5066704],[-2.3967943,50.5056438],[-2.401637,50.5723293],[-1.0400296,50.5718167],[-1.0335726,50.7059289],[-0.549302,50.7038843],[-0.5460736,50.7886618],[-0.0924734,50.7856002],[-0.0876307,50.7181949],[0.4789659,50.7120623],[0.487037,50.8182467],[0.9761503,50.8049868],[0.9922927,51.0126311],[1.4491213,51.0004424],[1.4781775,51.4090372],[1.0229632,51.4271576],[1.035877,51.7640881],[1.6105448,51.7500992],[1.646058,52.1560003],[1.7267698,52.1540195],[1.749369,52.4481811],[1.7870672,52.4811624],[1.759102,52.522505],[1.7933451,52.9602749],[0.3798147,52.9958468],[0.3895238,53.2511239],[0.3478614,53.2511239],[0.3238912,53.282186],[0.3461492,53.6538501],[0.128487,53.6575466],[0.116582,53.6674703],[0.1350586,54.0655731],[-0.0609831,54.065908],[-0.0414249,54.4709448],[-0.5662701,54.4771794],[-0.5592078,54.6565127],[-1.1665638,54.6623485],[-1.1637389,54.842611],[-1.3316194,54.843909],[-1.3257065,55.2470842],[-1.529453,55.2487108],[-1.524178,55.6540122],[-1.7638798,55.6540122],[-1.7733693,55.9719116],[-2.1607858,55.9682981],[-2.1543289,56.0621387],[-2.4578051,56.0585337],[-2.4190635,56.641717],[-2.0962164,56.641717],[-2.0833025,57.0021322],[-1.9283359,57.0126802],[-1.9180966,57.3590895],[-1.7502161,57.3625721],[-1.7695869,57.7608634],[-3.6937554,57.7574187],[-3.7066693,57.9806386],[-3.5969013,57.9772149],[-3.6033582,58.1207277],[-3.0222335,58.1309566],[-3.0286905,58.5410788],[-2.8478961,58.530968],[-2.86081,58.8430508],[-2.679624,58.8414991],[-2.6841897,58.885175],[-2.6339665,58.9052239],[-2.679624,58.9335083],[-2.6887555,59.0229231],[-2.3668703,59.0229231],[-2.3702946,59.2652861],[-2.3429001,59.2821989],[-2.3714361,59.2996861],[-2.3737189,59.3707083],[-2.3429001,59.385825],[-2.3725775,59.400354],[-2.3714361,59.4259098],[-3.0734196,59.4230067],[-3.0711368,59.3433649],[-3.103097,59.3311405],[-3.0745611,59.3136695],[-3.0722782,59.232603],[-3.3850319,59.1484167],[-3.3747589,58.9352753],[-3.5653789,58.9323303],[-3.554829,58.69759],[-5.2808579,58.6667732],[-5.2534159,58.3514125],[-5.5068508,58.3437887],[-5.4761804,58.0323557],[-5.8974958,58.0212436],[-5.8522972,57.6171758],[-6.1396311,57.6137174],[-6.1541592,57.7423183],[-6.2913692,57.7380102],[-6.3365678,58.1398784],[-6.1121891,58.1466944],[-6.1473778,58.5106285],[-6.2934817,58.5416182],[-6.8413713,58.2977321],[-7.0057382,58.2929331],[-7.1016189,58.2064403],[-7.2573132,58.1793148],[-7.2531092,58.1004928],[-7.4070698,58.0905566],[-7.391347,57.7911354],[-7.790991,57.7733151],[-7.7624215,57.5444165],[-7.698501,57.1453194],[-7.7943817,57.1304547],[-7.716764,56.7368628],[-7.0122067,56.7654359],[-6.979922,56.5453858],[-7.0638622,56.5453858],[-7.0444914,56.3562587],[-6.500676,56.3812917],[-6.4491433,55.9793649],[-6.563287,55.9691456],[-6.5393742,55.7030135],[-6.5595521,55.6907321],[-6.5345315,55.6761713],[-6.5216176,55.5704434],[-5.8912587,55.5923416],[-5.8560127,55.2320733],[-5.2293639,55.2515958],[-5.1837064,54.6254139],[-3.6655956,54.6518373],[-3.6496155,54.4320023],[-3.5400375,54.4306744],[-3.530906,54.0290181],[-3.0697656,54.030359],[-3.0675737,53.8221388],[-3.0804876,53.7739911],[-3.0619239,53.7477488],[-3.0611168,53.6737049],[-3.2144691,53.6708361],[-3.2057699,53.4226163],[-3.2799632,53.355224],[-3.2896655,53.3608441],[-3.3327547,53.364931],[-3.3761293,53.3540318],[-4.0888976,53.3433102],[-4.0945474,53.4612036],[-4.697412,53.4448624],[-4.6882805,53.3318598],[-4.7202407,53.2895771],[-4.6837148,53.2486184],[-4.6768661,53.1542644],[-4.8480816,53.1446807],[-4.8178336,52.7440299],[-4.2545751,52.7558939],[-4.228876,52.254876],[-4.2607571,52.2536408],[-4.2724603,52.2432637],[-4.8136263,52.230095],[-4.8079191,52.1138892],[-5.3889104,52.0991668],[-5.3717888,51.9129667],[-5.4208706,51.9101502],[-5.414022,51.8453218],[-5.3683645,51.8474373],[-5.3466772,51.5595332],[-4.773676,51.5758518],[-4.7656859,51.4885146],[-4.1915432,51.4970427],[-4.1869775,51.4344663],[-3.6151177,51.4444274],[-3.6105519,51.3746543],[-3.1494115,51.3789292],[-3.1494115,51.2919281],[-4.3038735,51.2745907],[-4.2861169,51.0508721],[-4.8543277,51.0366633],[-4.8372201,50.7212787],[-5.2618345,50.7082694],[-5.2395519,50.3530581]],[[-2.1502671,60.171318],[-2.0030218,60.1696146],[-2.0013096,60.0997023],[-2.148555,60.1011247],[-2.1502671,60.171318]],[[-6.2086011,59.1163488],[-6.1229934,59.1166418],[-6.121852,59.0714985],[-6.2097426,59.0714985],[-6.2086011,59.1163488]],[[-4.4159559,59.0889036],[-4.4212022,59.0770848],[-4.3971904,59.0779143],[-4.3913388,59.0897328],[-4.4159559,59.0889036]]]},{"id":"OS-New_Popular_Edition-historic","name":"OS New Popular Edition historic","type":"tms","template":"https://ooc.openstreetmap.org/npe/{zoom}/{x}/{y}.png","scaleExtent":[6,22],"polygon":[[[-5.8,49.8],[-5.8,55.8],[1.9,55.8],[1.9,49.8],[-5.8,49.8]]]},{"id":"OS-OpenData_Locator","name":"OS OpenData Locator","type":"tms","template":"http://tiles.itoworld.com/os_locator/{zoom}/{x}/{y}.png","polygon":[[[-9,49.8],[-9,61.1],[1.9,61.1],[1.9,49.8],[-9,49.8]]],"overlay":true},{"id":"OS-OpenData_StreetView","name":"OS OpenData StreetView","type":"tms","template":"https://{switch:a,b,c}.os.openstreetmap.org/sv/{zoom}/{x}/{y}.png","scaleExtent":[1,18],"polygon":[[[-5.8292886,50.0229734],[-5.8292886,50.254819],[-5.373356,50.254819],[-5.373356,50.3530588],[-5.1756021,50.3530588],[-5.1756021,50.5925406],[-4.9970743,50.5925406],[-4.9970743,50.6935617],[-4.7965738,50.6935617],[-4.7965738,50.7822112],[-4.6949503,50.7822112],[-4.6949503,50.9607371],[-4.6043131,50.9607371],[-4.6043131,51.0692066],[-4.3792215,51.0692066],[-4.3792215,51.2521782],[-3.9039346,51.2521782],[-3.9039346,51.2916998],[-3.7171671,51.2916998],[-3.7171671,51.2453014],[-3.1486246,51.2453014],[-3.1486246,51.362067],[-3.7446329,51.362067],[-3.7446329,51.4340386],[-3.8297769,51.4340386],[-3.8297769,51.5298246],[-4.0852091,51.5298246],[-4.0852091,51.4939284],[-4.3792215,51.4939284],[-4.3792215,51.5427168],[-5.1444195,51.5427168],[-5.1444195,51.6296003],[-5.7387103,51.6296003],[-5.7387103,51.774037],[-5.5095393,51.774037],[-5.5095393,51.9802596],[-5.198799,51.9802596],[-5.198799,52.0973358],[-4.8880588,52.0973358],[-4.8880588,52.1831557],[-4.4957492,52.1831557],[-4.4957492,52.2925739],[-4.3015365,52.2925739],[-4.3015365,52.3685318],[-4.1811246,52.3685318],[-4.1811246,52.7933685],[-4.4413696,52.7933685],[-4.4413696,52.7369614],[-4.8569847,52.7369614],[-4.8569847,52.9317255],[-4.7288044,52.9317255],[-4.7288044,53.5038599],[-4.1578191,53.5038599],[-4.1578191,53.4113498],[-3.3110518,53.4113498],[-3.3110518,53.5038599],[-3.2333667,53.5038599],[-3.2333667,54.0159169],[-3.3926211,54.0159169],[-3.3926211,54.1980953],[-3.559644,54.1980953],[-3.559644,54.433732],[-3.7188984,54.433732],[-3.7188984,54.721897],[-4.3015365,54.721897],[-4.3015365,54.6140739],[-5.0473132,54.6140739],[-5.0473132,54.7532915],[-5.2298731,54.7532915],[-5.2298731,55.2190799],[-5.6532567,55.2190799],[-5.6532567,55.250088],[-5.8979647,55.250088],[-5.8979647,55.4822462],[-6.5933212,55.4822462],[-6.5933212,56.3013441],[-7.1727691,56.3013441],[-7.1727691,56.5601822],[-6.8171722,56.5601822],[-6.8171722,56.6991713],[-6.5315276,56.6991713],[-6.5315276,56.9066964],[-6.811679,56.9066964],[-6.811679,57.3716613],[-6.8721038,57.3716613],[-6.8721038,57.5518893],[-7.0973235,57.5518893],[-7.0973235,57.2411085],[-7.1742278,57.2411085],[-7.1742278,56.9066964],[-7.3719817,56.9066964],[-7.3719817,56.8075885],[-7.5202972,56.8075885],[-7.5202972,56.7142479],[-7.8306806,56.7142479],[-7.8306806,56.8994605],[-7.6494061,56.8994605],[-7.6494061,57.4739617],[-7.8306806,57.4739617],[-7.8306806,57.7915584],[-7.4736249,57.7915584],[-7.4736249,58.086063],[-7.1879804,58.086063],[-7.1879804,58.367197],[-6.8034589,58.367197],[-6.8034589,58.4155786],[-6.638664,58.4155786],[-6.638664,58.4673277],[-6.5178143,58.4673277],[-6.5178143,58.5625632],[-6.0536224,58.5625632],[-6.0536224,58.1568843],[-6.1470062,58.1568843],[-6.1470062,58.1105865],[-6.2799798,58.1105865],[-6.2799798,57.7122664],[-6.1591302,57.7122664],[-6.1591302,57.6667563],[-5.9339104,57.6667563],[-5.9339104,57.8892524],[-5.80643,57.8892524],[-5.80643,57.9621767],[-5.6141692,57.9621767],[-5.6141692,58.0911236],[-5.490819,58.0911236],[-5.490819,58.3733281],[-5.3199118,58.3733281],[-5.3199118,58.75015],[-3.5719977,58.75015],[-3.5719977,59.2091788],[-3.1944501,59.2091788],[-3.1944501,59.4759216],[-2.243583,59.4759216],[-2.243583,59.1388749],[-2.4611012,59.1388749],[-2.4611012,58.8185938],[-2.7407675,58.8185938],[-2.7407675,58.5804743],[-2.9116746,58.5804743],[-2.9116746,58.1157523],[-3.4865441,58.1157523],[-3.4865441,57.740386],[-1.7153245,57.740386],[-1.7153245,57.2225558],[-1.9794538,57.2225558],[-1.9794538,56.8760742],[-2.1658979,56.8760742],[-2.1658979,56.6333186],[-2.3601106,56.6333186],[-2.3601106,56.0477521],[-1.9794538,56.0477521],[-1.9794538,55.8650949],[-1.4745008,55.8650949],[-1.4745008,55.2499926],[-1.3221997,55.2499926],[-1.3221997,54.8221737],[-1.0550014,54.8221737],[-1.0550014,54.6746628],[-0.6618765,54.6746628],[-0.6618765,54.5527463],[-0.3247617,54.5527463],[-0.3247617,54.2865195],[0.0092841,54.2865195],[0.0092841,53.7938518],[0.2081962,53.7938518],[0.2081962,53.5217726],[0.4163548,53.5217726],[0.4163548,53.0298851],[1.4273388,53.0298851],[1.4273388,52.92021],[1.8333912,52.92021],[1.8333912,52.042488],[1.5235504,52.042488],[1.5235504,51.8261335],[1.2697049,51.8261335],[1.2697049,51.6967453],[1.116651,51.6967453],[1.116651,51.440346],[1.5235504,51.440346],[1.5235504,51.3331831],[1.4507565,51.3331831],[1.4507565,51.0207553],[1.0699883,51.0207553],[1.0699883,50.9008416],[0.7788126,50.9008416],[0.7788126,50.729843],[-0.7255952,50.729843],[-0.7255952,50.7038437],[-1.0074383,50.7038437],[-1.0074383,50.5736307],[-2.3625252,50.5736307],[-2.3625252,50.4846421],[-2.4987805,50.4846421],[-2.4987805,50.5736307],[-3.4096378,50.5736307],[-3.4096378,50.2057837],[-3.6922446,50.2057837],[-3.6922446,50.1347737],[-5.005468,50.1347737],[-5.005468,49.9474456],[-5.2839506,49.9474456],[-5.2839506,50.0229734],[-5.8292886,50.0229734]],[[-6.4580707,49.8673563],[-6.4580707,49.9499935],[-6.3978807,49.9499935],[-6.3978807,50.0053797],[-6.1799606,50.0053797],[-6.1799606,49.9168614],[-6.2540201,49.9168614],[-6.2540201,49.8673563],[-6.4580707,49.8673563]],[[-5.8343165,49.932156],[-5.8343165,49.9754641],[-5.7683254,49.9754641],[-5.7683254,49.932156],[-5.8343165,49.932156]],[[-1.9483797,60.6885737],[-1.9483797,60.3058841],[-1.7543149,60.3058841],[-1.7543149,60.1284428],[-1.5754914,60.1284428],[-1.5754914,59.797917],[-1.0316959,59.797917],[-1.0316959,60.0354518],[-0.6626918,60.0354518],[-0.6626918,60.9103862],[-1.1034395,60.9103862],[-1.1034395,60.8040022],[-1.3506319,60.8040022],[-1.3506319,60.6885737],[-1.9483797,60.6885737]],[[-2.203381,60.1968568],[-2.203381,60.0929443],[-1.9864011,60.0929443],[-1.9864011,60.1968568],[-2.203381,60.1968568]],[[-1.7543149,59.5698289],[-1.7543149,59.4639383],[-1.5373349,59.4639383],[-1.5373349,59.5698289],[-1.7543149,59.5698289]],[[-4.5585981,59.1370518],[-4.5585981,58.9569099],[-4.2867004,58.9569099],[-4.2867004,59.1370518],[-4.5585981,59.1370518]],[[-6.2787732,59.2025744],[-6.2787732,59.0227769],[-5.6650612,59.0227769],[-5.6650612,59.2025744],[-6.2787732,59.2025744]],[[-8.7163482,57.9440556],[-8.7163482,57.7305936],[-8.3592926,57.7305936],[-8.3592926,57.9440556],[-8.7163482,57.9440556]],[[-7.6077005,50.4021026],[-7.6077005,50.2688657],[-7.3907205,50.2688657],[-7.3907205,50.4021026],[-7.6077005,50.4021026]],[[-7.7304303,58.3579902],[-7.7304303,58.248313],[-7.5134503,58.248313],[-7.5134503,58.3579902],[-7.7304303,58.3579902]]]},{"id":"OS-Scottish_Popular-historic","name":"OS Scottish Popular historic","type":"tms","template":"https://ooc.openstreetmap.org/npescotland/{zoom}/{x}/{y}.jpg","scaleExtent":[6,15],"polygon":[[[-7.8,54.5],[-7.8,61.1],[-1.1,61.1],[-1.1,54.5],[-7.8,54.5]]]},{"id":"al_palestina","name":"Palestina AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Palestina&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.28906746617,-9.71915617946],[-37.28903527966,-9.71114035022],[-37.28911038151,-9.70220427214],[-37.28915329685,-9.69174505681],[-37.28918548336,-9.68885787521],[-37.28927131405,-9.68069325658],[-37.28926058521,-9.67731947667],[-37.28935714474,-9.66999011394],[-37.28935714474,-9.66599221238],[-37.28931422939,-9.66132793384],[-37.28941078892,-9.6552568713],[-37.2894644331,-9.64555775166],[-37.28949661961,-9.6348852245],[-37.28953953495,-9.62925794841],[-37.29639526119,-9.62884541884],[-37.31187697163,-9.62897235107],[-37.32761617413,-9.62914159397],[-37.33181114903,-9.62919448235],[-37.3433768343,-9.629173327],[-37.35876198521,-9.62922621538],[-37.37175460568,-9.6293002591],[-37.37838502636,-9.62913101629],[-37.3805093359,-9.62921563771],[-37.38060589543,-9.63142636478],[-37.38054152241,-9.63784691108],[-37.38043423405,-9.63894695947],[-37.38053079357,-9.64147494171],[-37.3805093359,-9.64876261706],[-37.38049860706,-9.65430495262],[-37.38043423405,-9.65599725065],[-37.380241115,-9.66028084202],[-37.38021965733,-9.66550569201],[-37.38018747082,-9.6705400861],[-37.38015528431,-9.67895877835],[-37.38013382664,-9.68781086916],[-37.38009091129,-9.70115730775],[-37.38002653828,-9.7105269939],[-37.38010164013,-9.71743247513],[-37.38004799595,-9.71958974786],[-37.3793184351,-9.7195368737],[-37.37392183056,-9.71955802336],[-37.36582155934,-9.71945227502],[-37.35849376431,-9.71946284985],[-37.353343923,-9.71937825115],[-37.34413858166,-9.71936767631],[-37.33422513714,-9.71923020337],[-37.3293327879,-9.71927250275],[-37.32180114498,-9.71924077822],[-37.31982703915,-9.71927250275],[-37.31094356289,-9.71919847884],[-37.2958910059,-9.71920905369],[-37.28906746617,-9.71915617946]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"palmeira_dos_indios","name":"Palmeira dos Indios AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Palmeira%20dos%20Indios&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.58663984051,-9.46124293173],[-36.58665056935,-9.45851253477],[-36.58618922939,-9.41968140694],[-36.58603902569,-9.41451629413],[-36.58596392384,-9.4059322986],[-36.58584590664,-9.3950935092],[-36.58579226246,-9.39163222273],[-36.58565278759,-9.38983276351],[-36.58549185505,-9.3824866389],[-36.58528800717,-9.37964976527],[-36.58510561695,-9.37743741114],[-36.5850305151,-9.3705885508],[-36.58890362492,-9.37057796513],[-36.59064169636,-9.37065206481],[-36.59389253369,-9.37059913647],[-36.60037275067,-9.37072616447],[-36.61045785656,-9.37049327977],[-36.62288184872,-9.37020746651],[-36.63377161732,-9.3700169242],[-36.63835283032,-9.36985813887],[-36.64742942562,-9.36997458145],[-36.6514098238,-9.36994282439],[-36.6553365778,-9.36972052485],[-36.65647383442,-9.36974169624],[-36.6611086916,-9.37023922355],[-36.66276093235,-9.37026039491],[-36.66704173794,-9.36973111055],[-36.67051788082,-9.36965701067],[-36.67325373402,-9.36965701067],[-36.67602177372,-9.36986872456],[-36.6759252142,-9.3725998221],[-36.67596812954,-9.37679169746],[-36.67638655415,-9.38137517998],[-36.67653675785,-9.38463544939],[-36.67663331738,-9.39264838381],[-36.67675133457,-9.39829014058],[-36.67689080944,-9.40874778795],[-36.67707319966,-9.41886642501],[-36.67716975918,-9.43178948329],[-36.67724486103,-9.43394857114],[-36.67718048802,-9.43752585362],[-36.67727704754,-9.44311396022],[-36.67729850521,-9.449326389],[-36.67740579357,-9.45528471196],[-36.67739506474,-9.4593803377],[-36.67735214939,-9.46017405798],[-36.67567845097,-9.46020580675],[-36.66624780407,-9.46030105305],[-36.66223521938,-9.46030105305],[-36.65736432781,-9.46041746516],[-36.65040131321,-9.46047037975],[-36.63543458691,-9.46065028927],[-36.61979194393,-9.46083019869],[-36.61433096638,-9.46083019869],[-36.61028619518,-9.46096777643],[-36.60646672955,-9.46096777643],[-36.60186405888,-9.46098894223],[-36.59425731411,-9.461115937],[-36.58663984051,-9.46124293173]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"Pangasinan_Bulacan_HiRes","name":"Pangasinán/Bulacan (Philippines HiRes)","type":"tms","template":"https://gravitystorm.dev.openstreetmap.org/imagery/philippines/{zoom}/{x}/{y}.png","scaleExtent":[12,19],"polygon":[[[120.336593,15.985768],[120.445995,15.984],[120.446134,15.974459],[120.476464,15.974592],[120.594247,15.946832],[120.598064,16.090795],[120.596537,16.197999],[120.368537,16.218527],[120.347576,16.042308],[120.336593,15.985768]],[[120.8268,15.3658],[121.2684,15.2602],[121.2699,14.7025],[120.695,14.8423],[120.8268,15.3658]]]},{"id":"pao_de_acucar","name":"Pão de Açucar AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Pao%20de%20Acucar&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.39002812509,-9.78589413544],[-37.39018686777,-9.77619515195],[-37.38992540924,-9.76575048432],[-37.38990673363,-9.75256304825],[-37.39014951655,-9.7410224633],[-37.39002812509,-9.73201243097],[-37.39012150314,-9.72254197161],[-37.39014951655,-9.71288716505],[-37.39018686777,-9.7034069601],[-37.39019620557,-9.69548203924],[-37.40377337333,-9.6955004481],[-37.41727583865,-9.69560169682],[-37.43223500148,-9.69569374108],[-37.44318824617,-9.69573055877],[-37.44723151552,-9.69582260299],[-37.45682144076,-9.69585021626],[-37.47062271582,-9.69591464719],[-37.47373220472,-9.69590544277],[-37.47586122415,-9.69604350903],[-37.48127715077,-9.69605271344],[-37.48131450199,-9.69889686551],[-37.48122112394,-9.70086658775],[-37.48121178614,-9.70238529092],[-37.48135185321,-9.70545028909],[-37.48137986662,-9.71045731285],[-37.4813425154,-9.71617295985],[-37.48120244833,-9.71875003124],[-37.48124913736,-9.72035148703],[-37.48136119101,-9.7213362865],[-37.4813425154,-9.72409739103],[-37.48129582638,-9.72506377223],[-37.48103436785,-9.72731865083],[-37.48101569224,-9.73088040767],[-37.48126781296,-9.73461699032],[-37.48130516418,-9.73638402962],[-37.48131450199,-9.73893333547],[-37.48131450199,-9.74387543612],[-37.48129582638,-9.7498850055],[-37.48122112394,-9.75315203071],[-37.48101569224,-9.75855405565],[-37.48083827396,-9.76419525907],[-37.48084761176,-9.76526275174],[-37.48094098981,-9.76675355473],[-37.480931652,-9.76881490096],[-37.48083827396,-9.77210014513],[-37.48086628737,-9.77486082942],[-37.48076357152,-9.77993122654],[-37.48081026054,-9.78629902044],[-37.46381545633,-9.78622540502],[-37.45353453357,-9.78619779924],[-37.43978928533,-9.78610577993],[-37.42997525279,-9.78606897221],[-37.42079619096,-9.78600455867],[-37.40852631583,-9.785958549],[-37.39545338951,-9.78593094319],[-37.39002812509,-9.78589413544]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"PCN-Italy-2006","name":"PCN 2006 - Italy","type":"wms","template":"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_06.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OI.ORTOIMMAGINI.2006.33,OI.ORTOIMMAGINI.2006.32&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2006-01-01T00:00:00.000Z","startDate":"2006-01-01T00:00:00.000Z","polygon":[[[7.5479525,43.731183],[8.106966,43.86700730000001],[8.7359333,44.389436700000005],[10.183382,43.85116399999999],[9.5501637,43.13604889999999],[10.2772473,42.27514580000001],[11.6974829,42.08117770000001],[12.900592000000001,40.84896839999998],[14.9746632,40.208691200000004],[16.0477306,38.895298899999986],[13.1085959,38.74113290000001],[11.7771711,37.9360538],[14.406238300000002,36.74298800000001],[15.134669000000002,36.59363599999999],[15.428667100000002,37.0270026],[15.2199268,37.43375560000001],[15.483598700000002,37.929356000000006],[16.0164356,37.8035964],[17.216692,38.87424630000002],[17.216692,39.40468200000001],[16.5547657,39.7877476],[17.0546436,40.451437900000016],[18.3290577,39.70538770000001],[18.687732,40.05870289999999],[18.0496375,40.67064450000001],[16.005449300000002,41.5212225],[16.3844776,41.85963759999999],[15.5183696,42.15369720000001],[14.5799732,42.246104100000004],[13.5609913,43.65127720000002],[12.5788936,44.08670100000001],[12.2879505,44.6220446],[12.563982,44.9709164],[12.3415089,45.1745803],[12.4169596,45.4055695],[13.092517900000002,45.6282626],[13.6954906,45.70805899999999],[13.78445,45.5825],[13.919100000000002,45.63220000000001],[13.8235,45.717600000000004],[13.59784,45.807199999999995],[13.64307,45.98326],[13.52963,45.965879999999984],[13.47474,46.00546],[13.66472,46.17392000000001],[13.47587,46.22724999999999],[13.42218,46.20758],[13.37671,46.296679999999995],[13.59777,46.441370000000006],[13.68684,46.43880999999999],[13.7148,46.522200000000005],[12.9151,46.60953],[12.38708,46.715289999999996],[12.27591,46.88651],[12.17486,46.908950000000004],[12.11675,47.01240999999999],[12.21781,47.039959999999994],[12.19254,47.09331000000001],[11.74789,46.984840000000005],[11.33355,46.99862000000002],[11.10618,46.92966000000001],[11.00764,46.76896],[10.72974,46.78972],[10.75753,46.82258000000001],[10.66405,46.87613999999999],[10.47197,46.85698000000001],[10.38659,46.678470000000004],[10.49375,46.620490000000004],[10.46136,46.53164],[10.25309,46.574319999999986],[10.23674,46.634840000000004],[10.10307,46.610030000000016],[10.03715,46.44479],[10.165,46.410509999999995],[10.10506,46.33719999999999],[10.17862,46.25625999999999],[10.07055,46.216680000000004],[9.95249,46.38045000000001],[9.73086,46.35071],[9.71273,46.292660000000005],[9.57015,46.29580000000001],[9.46117,46.374810000000004],[9.459360000000002,46.50873],[9.40487,46.46620999999998],[9.36128,46.5081],[9.28136,46.496849999999995],[9.24503,46.236160000000005],[8.9560061,45.96502739999999],[9.09065,45.89905999999999],[9.0298,45.821270000000005],[8.90992,45.833299999999994],[8.9408,45.86681999999999],[8.88904,45.95465000000001],[8.78551,45.99063000000001],[8.85617,46.07480000000001],[8.62242,46.121120000000005],[8.45032,46.26869000000001],[8.42464,46.46366999999999],[8.08814,46.266920000000006],[8.15493,46.183399999999985],[8.11383,46.11577],[8.02906,46.10330999999999],[7.98881,45.99867],[7.9049000000000005,45.99945],[7.859490000000001,45.91485000000001],[7.563430000000001,45.97421],[7.10685,45.85652999999999],[7.04151,45.92434999999999],[6.95315,45.85163000000001],[6.80785,45.832649999999994],[6.80785,45.71864],[6.98948,45.63869],[7.00037,45.50900000000001],[7.18019,45.40070999999998],[7.10572,45.32924],[7.13115,45.25386],[6.851440000000001,45.132259999999995],[6.7697,45.16044],[6.62803,45.111749999999994],[6.66981,45.02324000000001],[6.74791,45.01939],[6.75518,44.899150000000006],[7.022170000000001,44.82519],[7.07484,44.680730000000004],[6.9513300000000005,44.66264],[6.85507,44.53072],[6.94504,44.431119999999986],[6.88784,44.42043],[6.891710000000001,44.36637000000001],[7.007640000000001,44.23735999999999],[7.363640000000001,44.11881999999999],[7.68694,44.17487],[7.725079999999999,44.07578000000001],[7.493549999999999,43.86551],[7.5479525,43.731183]],[[8.171339,39.148484300000014],[8.6245251,38.75118870000001],[9.0983105,39.037636700000014],[9.0310192,39.13144220000001],[9.265852000000002,39.1857496],[9.6407604,39.0227016],[9.8989391,40.6799061],[9.5006847,41.392570299999996],[8.303175,40.91070760000001],[8.4130383,41.16138739999999],[8.2125378,41.1386378],[8.0752087,40.598623299999986],[8.3615398,40.34999509999999],[8.2791424,39.985851200000006],[8.3828259,39.65359839999999],[8.171339,39.148484300000014]],[[12.514886900000002,35.53423470000001],[12.640543,35.5306027],[12.6386149,35.486413600000006],[12.512958700000002,35.4900477],[12.514886900000002,35.53423470000001]],[[11.9121838,36.8568754],[12.081785200000002,36.8552271],[12.0795789,36.7097361],[11.9099774,36.71138750000001],[11.9121838,36.8568754]],[[12.8401852,35.881314200000006],[12.8918552,35.8814533],[12.891984,35.850033999999994],[12.840314,35.8498949],[12.8401852,35.881314200000006]]]},{"id":"PCN-Lazio_Umbria-2008","name":"PCN 2008 - IT Lazio+Umbria","type":"wms","template":"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_08.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OI.ORTOIMMAGINI.2008.33&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2008-01-01T00:00:00.000Z","startDate":"2008-01-01T00:00:00.000Z","polygon":[[[12.3314895,41.6463669],[12.4117815,41.6479098],[12.4149931,41.5463482],[12.4957439,41.5478934],[12.4984968,41.4961949],[12.5794769,41.4984285],[12.580624,41.4293206],[12.6063174,41.4288046],[12.6074644,41.396632],[12.8292996,41.3981807],[12.8315936,41.3468793],[12.9128032,41.3484293],[12.9150973,41.297261],[12.995848,41.2982951],[12.9979127,41.1963575],[13.1679022,41.1980837],[13.167214,41.246915],[13.4133661,41.2482949],[13.4152014,41.197048],[13.8340959,41.1980837],[13.8334077,41.2476049],[13.9173702,41.2484673],[13.916682,41.3974924],[14.0011032,41.3978366],[13.9999562,41.4977413],[14.084148,41.4982567],[14.0834598,41.6501382],[14.0008738,41.6497954],[13.9997268,41.7505095],[13.8343254,41.7496537],[13.8336371,41.8004653],[13.7515099,41.7997813],[13.7499041,41.8498696],[13.4184131,41.8496988],[13.4168072,41.95027],[13.3344506,41.9495876],[13.3333036,42.000411],[13.2514058,41.9997291],[13.2500294,42.0505125],[13.0850868,42.0496608],[13.0839398,42.097],[13.3339918,42.0981915],[13.3337624,42.1471955],[13.4177249,42.148216],[13.4163484,42.2505237],[13.3339918,42.2498444],[13.333533,42.3009367],[13.2514058,42.2999186],[13.2500294,42.5469887],[13.4179543,42.5481718],[13.4158896,42.7506484],[13.33468,42.7494692],[13.3330742,42.9005609],[13.168361,42.8993846],[13.167214,42.9507867],[12.9641901,42.9501151],[12.9625842,43.0003005],[12.9187678,42.9997972],[12.9160149,43.2507803],[12.8352641,43.2499449],[12.8322819,43.5010663],[12.66321,43.4994022],[12.6648158,43.451125],[12.5856709,43.4499593],[12.5824592,43.5508],[12.5017084,43.5498024],[12.4998732,43.6513062],[12.1624176,43.6491484],[12.1649411,43.6013233],[12.078914,43.5994959],[12.0818963,43.4519577],[11.9954104,43.4491265],[11.9986221,43.3466146],[12.078914,43.3479492],[12.0807492,43.3018885],[11.9960986,43.2995511],[11.9986221,43.2021377],[11.9123656,43.1992948],[11.9146596,43.1521173],[11.8320736,43.1494395],[11.832303,43.0965284],[11.9109891,43.098371],[11.9146596,42.9019053],[11.8290913,42.8992165],[11.8313854,42.8523123],[11.7458171,42.8494532],[11.7481112,42.6523609],[11.6730956,42.6496612],[11.6749308,42.6105035],[11.4948474,42.5993593],[11.4985179,42.4959273],[11.5781217,42.4979571],[11.5815627,42.4524416],[11.4122614,42.4487177],[11.4152437,42.3465622],[11.4959945,42.3479186],[11.4992061,42.2963554],[11.5783511,42.2982219],[11.582251,42.2462783],[11.6618547,42.2483161],[11.6662134,42.0964893],[11.7453583,42.0981915],[11.7490288,41.9966603],[11.9144302,41.9992176],[11.9153478,41.9862596],[11.9940339,41.9874532],[11.9986221,41.8968453],[12.0786846,41.8990651],[12.0814375,41.8459392],[12.1631058,41.8479899],[12.1656293,41.6964038],[12.3291955,41.6986306],[12.3314895,41.6463669]]]},{"id":"Actueel_ortho25_WMTS","name":"PDOK Luchtfoto Beeldmateriaal 25cm","type":"tms","template":"https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts?FORMAT=image/jpeg&SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Actueel_ortho25&STYLE=&FORMAT=image/jpeg&tileMatrixSet=OGC:1.0:GoogleMapsCompatible&tileMatrix={zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,19],"polygon":[[[3.1437689,51.3598403],[3.1575018,51.2411346],[3.3387762,51.1154412],[3.9128119,51.0585083],[4.6571356,51.2806657],[4.8933416,51.2634825],[5.1789862,51.1257851],[5.3849798,51.1309561],[5.5442816,51.056782],[5.4206854,50.8595581],[5.4673773,50.7032633],[5.6568914,50.6192567],[6.1485296,50.6214349],[6.3023382,50.8578243],[6.2995916,50.9543819],[6.2638861,51.0183545],[6.3723761,51.0925902],[6.4012152,51.2011393],[6.3737494,51.2510206],[6.4451605,51.3158713],[6.4204413,51.5496009],[6.343537,51.6792182],[6.796723,51.7642909],[7.046662,51.9102418],[7.0713812,52.0455856],[7.2718817,52.1704147],[7.3075872,52.3855111],[7.2059637,52.5319494],[7.282868,52.614576],[7.2993475,52.7785318],[7.4421698,52.9782705],[7.43393,53.2831352],[7.0439154,53.5515877],[6.7829901,53.6363531],[6.2391668,53.5401639],[5.6871039,53.5124077],[5.173493,53.4388477],[4.8164373,53.2338445],[4.6516424,53.0658312],[4.5417791,52.4859784],[4.3220526,52.1956753],[4.08104,52.0136897],[4.0219885,52.0162253],[3.9368445,51.9637937],[3.9519507,51.8807927],[3.844834,51.8494157],[3.6237341,51.7075226],[3.6553198,51.6606936],[3.6333471,51.6274583],[3.5468298,51.622343],[3.3957678,51.5609145],[3.3820349,51.5173524],[3.4987646,51.4326715],[3.3298498,51.3855587],[3.1437689,51.3598403]]],"terms_url":"https://www.nationaalgeoregister.nl/geonetwork/srv/dut/catalog.search#/search?facet.q=license%2FCC-BY&isChild=%27false%27&resultType=details&any_OR_title_OR_keyword=luchtfoto&fast=index&_content_type=json&from=1&to=20&sortBy=relevance","terms_text":"Kadaster / Beeldmateriaal.nl, CC BY 4.0","best":true,"description":"Landsdekkende dataset 25cm resolutie kleuren luchtfotos van de meest recente jaargang.","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGYAAABpCAMAAAD/V6aFAAABQVBMVEVHcEzFxcUIjtE3quLGxsYMlNMxseXFxcXFxcXGxsY3qeC82+c4qeA4quEcod3FxcXGxsbGxsbKysrHx8cGkdLGxsYPl9fExMTGxsbGxsbGxsYGjtDGxsYLlNXFxcXKysrGxsY3qeDFxcXGxsbFxcXGxsY3qeHGxsbIyMjGxsbGxsbFxcXFxcXFxcXGxsYBi883quHExMTGxsbGxsYgpdkYntoeqtXGxsYko93FxcXFxcUio97GxsYDjdAcn9rGxsbGxsbGxsYQmdjGxsYCjdAAis0IktM1qODGxsbHx8fGxsY3quHFxcUco93GxsbGxsbFxcUmotw3q+E4quE3quE3quACjtEKl9XGxsbFxcUZoNkBi883qeHGxsYAis44quEAic0AiM08rOIcnNk6q+IspN4Mk9QFj9EXmdclodzGxsbX17u1AAAAXnRSTlMA7d4ItK8KTHw//QHerC31nSgFHsszjQ5Bw23d6qMYFFmUZtVH78rkCTn4uIZUdvqAFKxPDUAEozao2iLQ5V39lLF/y+z+wd1he76y+hGNgC1uQO7BUNR6mYRR96TdoavfmwAABLhJREFUeF7s08Fqg0AQBuApCC0IBBtCYpBVbMQmNoF4CfGykV5aKKbXAn2B//0foOLspQF0xhQokO80/2l2WH66xnNx18vz6S+c0K+ha8TukQn62RWNFxzfeY2J0K96pLH2zSSf81hjwIHGevsG7nncYkhC45gDgNKdlWOA/Uo7MemsnwBkAYcGQtmcVJINWi8cZhZCR1JZWrSiKacSUkvSeEBnx2llIWQ/Vbegk8UcQ0i9asqTgJ05biF2Jrn1BJ2J0R6DKmzJGmSq371eWOgsSKK8+M4COrmoOimckHPwAR2PBPbRRQUaKKU0zK/hRHy72UDHTmmYqT1nx2tnhadz8ulfuLn5YazseRMEwjhuJDCIOhkXw8DiagchJkQGInZoHKxWk7Y5nkO09ft/gTb3Sjg4nt/4T7jf5XnhIlcR8SRzbUxaeO/XBFQCGxasd7QToLeyMBglvZZ4AUSw9VjyCcTCvTI1Z0TNciIAlydziwZ+ihZe+jUZVUekPNlbNPS3LEwQrXHVoblozdZas7KqmmU7rXstjm7N7sCSaW7TPO//yM4vOYiaJV9EADOfJUcgVoDK/ix9/NaQ5gQEQOzQh+hPOECTgdJkLPBnfRoQqzPa4DUBJZLImAD76ow9vEZP7yrhzVr11kxM2gTr0HfXgxa1t12jVucDr5mqu8MlZkkKLZbHrYao2eg7DEOkSh8Ke55c2zTPskZRI0VOgNYEMulqukl1SlAWb6s1884/GjyKDt4GKDY5UVxZEl9MjXhjTKojTjOnIKGpfNPAQNTMBLegzn4xVPBPDrNhk8XwddzOGbeg/trT+DxyPAOni/ivXfNbbRSIwvgpLCQiYIyIRmAT1hS1RCEJICmCgjdtKKmXe+ML+P4PsCmzG6Y96zczFO/yu3WGzxnPmTl/JCV37gTFXKb4m6e9zk2JQPWBp5cirfMHY1YoJOi+5MqOkHFrY5kXoLL8WsV4c4XMk6lK7QKZiI326QPPMZWJwafx+UtnojL8aCqzAFZWDYyjeJIYbdgVUIkuB04hvllsoJL4bueO79kclOFbA5mSEHkN5hwMZI4ECP9vs2fx9F1fxfGQX47YUiyc+UVfprWBSjIw5OLTVl/mAlT6QYYfA12NDDhZSLhIZRThAOuHAfBKOviJss5rx98ubGfwTQ+gZ2PSFdriY7EShrMDiyn12hmQx71wK3i1qLCjQUWmKqc6P9UyVmhhwrUYmI0NDH0C3LnjzTTZCicPjnhYh+NLNZbofyiim4IYZi2fnU733hm5ACrT0A5fbSti6AQryWm++9HXUhCRPquXzDnABWwCupJ20VlcBsq4Y0YM5aRyTzfC07+uUlcrD3KOpR01hGexI/ZI1/Nhk+cWjbBsoYqMbYm77TjWSkcpU24cnKYJCDMNl7NKaZR3YO8oA+T0Hu6EcnbqLi3D8YmDTyg2Qz3raUYQ7/NynLZtFzYpKT7vW50TgAdSDWkye5Z9bEMq1rKxvfmkS9DcwsEqIzUROC4BNrmXjxOyjn8FpEHagn9PMEEXht2S9NiyvGwaSmYAEyD9N3Zumma6BdkbyXH2NB2nm8xvmpB9L1WOJiRzWHI+CRHLbafh0l+p1Hb2B2WwRgDiX0fTAAAAAElFTkSuQmCC"},{"id":"al_piranhas","name":"Piranhas AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Piranhas&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.71917577496,-9.65235879937],[-37.71917577496,-9.63873541198],[-37.71914358845,-9.63210333094],[-37.71924014797,-9.62114477442],[-37.71929379215,-9.61022817566],[-37.7193367075,-9.59988246925],[-37.71940108051,-9.58891229023],[-37.71945472469,-9.57801581129],[-37.71944399586,-9.57173166346],[-37.71951909771,-9.56684391256],[-37.71956201306,-9.56225232497],[-37.71998043766,-9.5621782666],[-37.72257681599,-9.56194551161],[-37.72817726841,-9.56203014981],[-37.73254390469,-9.56199841049],[-37.74107332935,-9.56206188913],[-37.74845476856,-9.56201957003],[-37.75925870648,-9.56215710706],[-37.76971932163,-9.56227348451],[-37.78036232701,-9.56244276071],[-37.78537269344,-9.56235812262],[-37.78907414189,-9.56232638333],[-37.79561873188,-9.56245334047],[-37.79771085491,-9.56236870238],[-37.81005974522,-9.56243218095],[-37.81060691586,-9.56241102143],[-37.810531814,-9.5653098637],[-37.81048889866,-9.57629138499],[-37.81045671215,-9.58742065699],[-37.8103816103,-9.59756574935],[-37.81030650845,-9.61798195891],[-37.81017776241,-9.65196745198],[-37.81017776241,-9.65229533767],[-37.81024213543,-9.6525914922],[-37.80663724651,-9.65245399191],[-37.80205603352,-9.65252803054],[-37.79597278347,-9.65236937632],[-37.79178853741,-9.65251745359],[-37.78815146198,-9.65246456886],[-37.78722878208,-9.65242226107],[-37.78035159817,-9.65241168412],[-37.77864571324,-9.65223187594],[-37.77625318279,-9.65229533767],[-37.77475114575,-9.65218956812],[-37.77233715763,-9.65223187594],[-37.76960130444,-9.65245399191],[-37.76623244991,-9.65250687665],[-37.76345368138,-9.65246456886],[-37.7603959631,-9.6524962997],[-37.75101896038,-9.65236937632],[-37.75011773815,-9.65248572275],[-37.74154539814,-9.65247514581],[-37.74030085316,-9.65239053022],[-37.73785467854,-9.65246456886],[-37.73443217983,-9.65237995327],[-37.73106332531,-9.65243283802],[-37.72651429882,-9.65236937632],[-37.7219545435,-9.65225302985],[-37.71991606465,-9.65228476071],[-37.71917577496,-9.65235879937]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"PNOA-Spain-TMS","name":"PNOA Spain","type":"tms","template":"https://www.ign.es/wmts/pnoa-ma?request=GetTile&service=WMTS&VERSION=1.0.0&Layer=OI.OrthoimageCoverage&Style=default&Format=image/png&TileMatrixSet=GoogleMapsCompatible&TileMatrix={zoom}&TileRow={y}&TileCol={x}","polygon":[[[-17.8846298,28.4460601],[-17.8939535,28.5225529],[-18.0212548,28.7481927],[-18.0224091,28.8038375],[-17.9424017,28.8726124],[-17.8911792,28.8737099],[-17.8903302,28.8515102],[-17.7675902,28.8537764],[-17.7669837,28.8312183],[-17.7412714,28.8319975],[-17.7394926,28.7642235],[-17.7139824,28.7649677],[-17.7129312,28.7303731],[-17.7574427,28.6931782],[-17.7570788,28.6741254],[-17.7457913,28.6743524],[-17.7457266,28.6165627],[-17.7519687,28.5833675],[-17.7622536,28.5591958],[-17.7833086,28.541667],[-17.7831575,28.4936643],[-17.808611,28.4925024],[-17.8060072,28.4468974],[-17.8846298,28.4460601]],[[-18.1661033,27.7851643],[-18.163494,27.6949247],[-18.0889827,27.6963366],[-18.0873398,27.6738724],[-18.0364092,27.6753701],[-18.0350079,27.6302571],[-17.9589987,27.6323976],[-17.8603269,27.7926025],[-17.8630328,27.8368793],[-17.8884015,27.8364947],[-17.8891263,27.8590536],[-17.9906491,27.8567467],[-18.0386803,27.7655831],[-18.1146412,27.7637873],[-18.1154627,27.7863613],[-18.1661033,27.7851643]],[[-17.36038,28.0639801],[-17.3629657,28.1757247],[-17.3375583,28.1763688],[-17.3384577,28.2213012],[-17.1857883,28.2238767],[-17.0820788,28.1351849],[-17.0808422,28.0679977],[-17.1315446,28.0668073],[-17.1563337,28.0214628],[-17.2321063,28.0203711],[-17.2319938,27.9980388],[-17.2576823,27.9978403],[-17.257851,28.0199741],[-17.3086658,28.0192298],[-17.36038,28.0639801]],[[-16.9278171,28.3275779],[-16.9286591,28.3721879],[-16.8776666,28.3729288],[-16.8780707,28.3954191],[-16.5214259,28.4226146],[-16.4457117,28.491135],[-16.4462506,28.535972],[-16.4205859,28.5362679],[-16.4209227,28.5588419],[-16.3443329,28.5597589],[-16.3446023,28.5822095],[-16.1912541,28.5837179],[-16.1916246,28.6068435],[-16.1279344,28.6078193],[-16.1277997,28.5921762],[-16.0995079,28.5925015],[-16.0993395,28.5163822],[-16.1648148,28.5161158],[-16.1647474,28.4938583],[-16.2385755,28.4484704],[-16.2653516,28.4476116],[-16.2658569,28.4030038],[-16.3167484,28.4017594],[-16.3163105,28.380189],[-16.3420763,28.3795075],[-16.3408301,28.2892963],[-16.415837,28.1976134],[-16.415096,28.1311312],[-16.5153297,28.0164796],[-16.6168433,28.01532],[-16.6168096,27.9930469],[-16.7184243,27.9919168],[-16.7190979,28.0371426],[-16.7446952,28.0367859],[-16.7453351,28.0818146],[-16.7706967,28.0816065],[-16.8223966,28.1259036],[-16.8231712,28.1708652],[-16.8487012,28.1707464],[-16.8502842,28.260791],[-16.8756457,28.2605537],[-16.8760836,28.2832162],[-16.9015125,28.2827713],[-16.9023882,28.3279337],[-16.9278171,28.3275779]],[[-15.8537427,27.9008901],[-15.8542032,27.9901812],[-15.828953,27.9906555],[-15.8291065,28.035578],[-15.7782992,28.0363232],[-15.7532793,28.0814298],[-15.7278756,28.0815652],[-15.7282593,28.1718567],[-15.4989741,28.1728039],[-15.4987438,28.1504075],[-15.4497785,28.1507459],[-15.4501622,28.1961425],[-15.3972827,28.1961425],[-15.3964385,28.0383554],[-15.3710348,28.0380167],[-15.3706511,28.0153212],[-15.3457847,28.0153212],[-15.3454777,27.9254406],[-15.3708046,27.9252372],[-15.3705743,27.8352137],[-15.395978,27.8347387],[-15.4209979,27.7879673],[-15.4718052,27.7893932],[-15.471882,27.7666454],[-15.522766,27.7667813],[-15.5477092,27.7216112],[-15.6236132,27.7213395],[-15.6241504,27.741991],[-15.7007451,27.7433495],[-15.801669,27.8110501],[-15.8537427,27.9008901]],[[-14.5215621,28.0467778],[-14.5224358,28.1184131],[-14.4157526,28.1156076],[-14.2168794,28.2278805],[-14.2153651,28.33903],[-14.1641672,28.4528287],[-14.1115132,28.4747955],[-14.0335806,28.7226671],[-13.9565217,28.7449351],[-13.9561722,28.7665857],[-13.8290221,28.7664325],[-13.8289639,28.7879765],[-13.8000741,28.7879255],[-13.8012972,28.7189894],[-13.827566,28.719347],[-13.8278572,28.6517968],[-13.8025786,28.651899],[-13.8033941,28.5384172],[-13.8288474,28.5384684],[-13.8315061,28.3970177],[-13.9158189,28.2241438],[-13.9856445,28.2235696],[-14.0369588,28.1795787],[-14.1387139,28.1799894],[-14.1386556,28.1579103],[-14.2153651,28.1578076],[-14.2147244,28.1118888],[-14.2913173,28.0452356],[-14.3319673,28.0368713],[-14.4457846,28.0469834],[-14.4466583,28.0657961],[-14.4962835,28.0682631],[-14.495934,28.0458525],[-14.5215621,28.0467778]],[[-13.800662,28.8456579],[-13.8009273,28.8231121],[-13.775688,28.8230539],[-13.69729,28.8898184],[-13.69729,28.9127744],[-13.6072498,28.9117991],[-13.4388551,29.0002417],[-13.4374559,29.1351289],[-13.4117005,29.1349931],[-13.4105556,29.2229789],[-13.4592801,29.255586],[-13.4597392,29.2942023],[-13.5091254,29.2945638],[-13.5100581,29.3163453],[-13.5635382,29.3172941],[-13.5640564,29.2713764],[-13.5389228,29.2711956],[-13.5389747,29.2500375],[-13.5661293,29.2501279],[-13.5665956,29.2030039],[-13.5156549,29.2022349],[-13.5156549,29.1820579],[-13.5398038,29.1827819],[-13.5408921,29.137528],[-13.65782,29.1368528],[-13.713222,29.0935079],[-13.7663353,29.0934533],[-13.8502463,29.0165937],[-13.8518224,28.983425],[-13.8524443,28.914861],[-13.9013122,28.89245],[-13.9024005,28.8469779],[-13.800662,28.8456579]],[[1.6479916,38.9990693],[1.7321668,38.9993635],[1.7314703,39.0441733],[1.6489512,39.0431944],[1.6481552,39.1276358],[1.3948608,39.1265691],[1.3954412,39.0864199],[1.2281145,39.0852615],[1.2291095,39.0028958],[1.1448657,39.0018003],[1.1452803,38.8319988],[1.3113632,38.8331615],[1.3121924,38.7906483],[1.3946949,38.7916178],[1.3951924,38.7529597],[1.3112803,38.7519251],[1.3125919,38.6238804],[1.6489036,38.6251112],[1.6480745,38.7111504],[1.58456,38.7101152],[1.5811604,38.7005387],[1.5491544,38.7002798],[1.5197188,38.7092094],[1.50355,38.7253185],[1.4813282,38.9155064],[1.5518906,38.9254411],[1.5667328,38.9566554],[1.6487378,38.9583318],[1.6479916,38.9990693]],[[2.5450749,39.4166673],[2.43933,39.4161122],[2.438714,39.4846853],[2.439022,39.4993424],[2.3122308,39.4993424],[2.3119228,39.5417911],[2.2290722,39.5409994],[2.2283536,39.6260571],[2.3460076,39.6270851],[2.9270445,39.9601558],[3.1456647,39.9600498],[3.1460753,40.0019797],[3.2313899,40.0019797],[3.2312872,39.8329231],[3.1482313,39.8331596],[3.1484366,39.7935717],[3.4814817,39.7931773],[3.4803472,39.5959027],[3.3150618,39.4784606],[3.3146179,39.3785504],[3.0830178,39.2499355],[2.9798608,39.2501482],[2.9790395,39.3334971],[2.7287424,39.3334177],[2.7288451,39.4581361],[2.6456865,39.4577397],[2.6453785,39.4996593],[2.5452802,39.4994216],[2.5450749,39.4166673]],[[3.8120402,40.0434431],[3.729082,40.0437979],[3.7286185,39.9584155],[3.8126633,39.9576011],[3.8122771,39.9164393],[3.9608975,39.9159813],[4.1938142,39.791308],[4.3150279,39.7905799],[4.3159934,39.8329294],[4.3987393,39.8320396],[4.3973664,39.9185834],[4.3158003,39.9193274],[4.3161865,40.0433985],[4.2318959,40.0443594],[4.2324752,40.0847793],[4.1491501,40.086109],[4.1490623,40.1255157],[4.0627981,40.1272166],[4.0624217,40.0849941],[3.8128687,40.085294],[3.8120402,40.0434431]],[[-8.8910646,41.8228891],[-9.1092038,42.5751065],[-9.0365469,42.730656],[-9.0883419,42.7269569],[-9.1466113,42.7750272],[-9.2185488,42.9016271],[-9.2760988,42.8605106],[-9.3099094,42.9311297],[-9.2789763,42.9821991],[-9.3099094,43.0600377],[-9.2523594,43.1041725],[-9.2314975,43.1703151],[-9.1473307,43.210176],[-9.06748,43.1991644],[-9.0336694,43.2426748],[-8.99842,43.2447709],[-8.9998588,43.2955793],[-8.9372732,43.3055265],[-8.92936,43.326986],[-8.8638969,43.3290792],[-8.8761263,43.3740655],[-8.8221732,43.3735426],[-8.785485,43.3191358],[-8.7063538,43.305003],[-8.6099575,43.3296025],[-8.5509688,43.3233227],[-8.5243519,43.3364048],[-8.5250713,43.3646525],[-8.45745,43.3918416],[-8.3610538,43.4111803],[-8.3603344,43.4634161],[-8.3344369,43.5797394],[-8.2776063,43.5708796],[-8.0646713,43.7239184],[-7.9992081,43.7233986],[-7.9171994,43.7826357],[-7.8560525,43.7914643],[-7.83591,43.7374337],[-7.6628443,43.809819],[-7.3188932,43.6782695],[-7.1997467,43.5830817],[-6.2488228,43.6075032],[-6.1229322,43.5790105],[-5.8520425,43.6798953],[-5.6036334,43.5708672],[-5.2855347,43.5619084],[-5.1787525,43.4991591],[-4.9089869,43.4836655],[-4.6156167,43.4192021],[-4.1839917,43.4249168],[-3.8029478,43.5195394],[-3.7400025,43.4869277],[-3.5612827,43.5423572],[-3.1083013,43.3816347],[-2.9385737,43.4624573],[-2.7452417,43.4755094],[-2.3046245,43.3170625],[-1.9854018,43.3563045],[-1.8552841,43.3972545],[-1.769802,43.3964383],[-1.7700492,43.3760501],[-1.7100474,43.3756908],[-1.7113451,43.3312527],[-1.7225915,43.3131806],[-1.6890375,43.3129108],[-1.6881106,43.3341294],[-1.6446695,43.3337248],[-1.6449785,43.3133155],[-1.6029903,43.3129528],[-1.6034352,43.2926624],[-1.5635905,43.2921227],[-1.5630468,43.3133844],[-1.4779905,43.3128355],[-1.3667723,43.2761368],[-1.3568809,43.2381533],[-1.3703692,43.1712972],[-1.4423067,43.0833554],[-1.4198262,43.0603647],[-1.3730668,43.051166],[-1.3640746,43.1115893],[-1.3020285,43.135217],[-1.2354864,43.1332484],[-1.2795481,43.0774443],[-1.1923239,43.0649635],[-1.0061856,43.0077821],[-0.942341,42.9748951],[-0.7562028,42.9821318],[-0.7148387,42.9610774],[-0.6968543,42.9031405],[-0.5511809,42.8220693],[-0.5044215,42.8484456],[-0.4288871,42.8200906],[-0.3164848,42.8655842],[-0.1456332,42.810856],[-0.0314324,42.7124874],[0.1861785,42.7540985],[0.3021777,42.7177729],[0.3642238,42.7428729],[0.4487504,42.7144695],[0.6276949,42.7223973],[0.6411832,42.8576747],[0.7149192,42.882718],[0.9675996,42.8181119],[1.108777,42.7989808],[1.1753192,42.7342872],[1.3632559,42.7415521],[1.4113736,42.7093914],[1.4806054,42.7103407],[1.4813006,42.5010664],[1.6443591,42.5020345],[1.6432777,42.5424539],[1.730407,42.5434214],[1.7316429,42.5011803],[2.0638621,42.5016359],[2.0645572,42.4590247],[2.3969309,42.4599364],[2.3976786,42.4178363],[2.4804823,42.4179732],[2.4809767,42.3759441],[2.6447922,42.3762636],[2.6444832,42.4592447],[2.8113266,42.4596094],[2.8112648,42.5010358],[3.063878,42.5008535],[3.063878,42.4591535],[3.2307832,42.4593359],[3.2304935,42.3764363],[3.3141469,42.3760369],[3.3141243,42.3339864],[3.397855,42.3340435],[3.3973912,42.290094],[3.3138923,42.2908368],[3.3139695,42.2070151],[3.1475896,42.2073012],[3.1475896,42.1260612],[3.2305478,42.1260039],[3.2466753,41.9529359],[3.1945206,41.8558943],[3.060537,41.7647419],[2.7835777,41.6371796],[2.26293,41.4271601],[2.1649151,41.2989297],[1.86008,41.2232228],[1.3763003,41.116273],[1.1793714,41.0464585],[1.0858526,41.048493],[0.758537,40.8195599],[0.9114042,40.733761],[0.8781331,40.6751363],[0.6650182,40.5358666],[0.5580112,40.5502166],[0.433919,40.3757589],[0.2675635,40.1919192],[0.1641534,40.0647234],[0.0751307,40.0144671],[0.010387,39.8952188],[-0.0939224,39.8116904],[-0.1847435,39.6311716],[-0.2908513,39.5036254],[-0.2863552,39.333431],[-0.1856427,39.1774612],[-0.2135185,39.1558487],[-0.1110076,38.9722246],[0.0094878,38.8826835],[0.1218901,38.872183],[0.2342925,38.798636],[0.2558737,38.7264162],[0.0958128,38.6133825],[-0.0022021,38.6070586],[-0.0570544,38.5269073],[-0.2719677,38.4762395],[-0.379874,38.3931234],[-0.3834708,38.3381297],[-0.4509122,38.3310763],[-0.5048654,38.2830943],[-0.4823849,38.1948095],[-0.429331,38.1658287],[-0.4545091,38.148859],[-0.5839966,38.1721913],[-0.6136708,38.1198599],[-0.6370505,37.9612228],[-0.6811123,37.9456238],[-0.7323677,37.8810656],[-0.7215771,37.7830562],[-0.688306,37.7340026],[-0.6641461,37.6231485],[-0.7193941,37.5878413],[-0.9196258,37.5375806],[-1.1107098,37.5164093],[-1.3383246,37.5286671],[-1.4408917,37.3903714],[-1.6766966,37.2765189],[-1.8540816,36.9122889],[-2.0683486,36.6929117],[-2.2158766,36.6619233],[-2.3721861,36.7801753],[-2.6812926,36.6591056],[-2.9201476,36.6675585],[-3.09402,36.712625],[-3.4610839,36.6548788],[-3.7280395,36.6929117],[-4.3743529,36.6633322],[-4.6571151,36.4404171],[-4.9188018,36.4531321],[-5.1699508,36.3513541],[-5.2841094,36.1970201],[-5.2680911,36.1241812],[-5.3524784,36.1224654],[-5.3516094,36.0401413],[-5.4365759,36.0388921],[-5.4353207,36.0034384],[-5.6888562,36.0036518],[-5.6899635,36.0405317],[-5.85506,36.0385595],[-5.8566821,36.1242077],[-5.9384817,36.1221487],[-5.9400265,36.1655625],[-5.9983445,36.1645024],[-6.0357297,36.1780957],[-6.0775178,36.2224132],[-6.1506113,36.2864561],[-6.231541,36.3770075],[-6.3358504,36.5310643],[-6.3214629,36.5816265],[-6.404191,36.6234958],[-6.4743301,36.7489673],[-6.4158808,36.7993866],[-6.490516,36.9173818],[-6.6298949,37.0194012],[-6.8744824,37.1083766],[-7.0426363,37.1850699],[-7.2647434,37.1843535],[-7.3753473,37.1535419],[-7.408316,37.1682196],[-7.4202886,37.2118318],[-7.4249231,37.2350505],[-7.4380543,37.2451969],[-7.4459717,37.3326142],[-7.4480958,37.3909382],[-7.4696271,37.4075829],[-7.4647029,37.4530494],[-7.5019723,37.516411],[-7.5191587,37.5229203],[-7.5219588,37.5723727],[-7.4501271,37.6695835],[-7.4249019,37.7599222],[-7.316662,37.839974],[-7.268329,37.988952],[-7.1536786,38.0155235],[-7.1177098,38.0553626],[-7.0142997,38.0243785],[-6.9963153,38.1075633],[-6.9614706,38.201254],[-7.080617,38.1570753],[-7.3402665,38.4402363],[-7.2638329,38.7380741],[-7.0435243,38.8729667],[-7.0615086,38.907962],[-6.9693387,39.0198308],[-7.0008114,39.0887867],[-7.1536786,39.0957658],[-7.1525545,39.1602899],[-7.2447245,39.1968854],[-7.2559647,39.2813308],[-7.3368944,39.3535074],[-7.3279022,39.4559917],[-7.5144901,39.5886496],[-7.5527069,39.6795427],[-7.0502684,39.6752171],[-6.9951913,39.8195433],[-6.9221297,39.8790868],[-6.886161,40.0229854],[-7.0412762,40.1347927],[-7.0176717,40.266146],[-6.8086034,40.3450071],[-6.8681766,40.4451649],[-6.8535643,40.6066433],[-6.837828,40.8757589],[-6.9536024,41.0370445],[-6.8018592,41.0395879],[-6.7681385,41.138706],[-6.6411239,41.2655616],[-6.5624422,41.2630269],[-6.217367,41.5791017],[-6.3162811,41.644652],[-6.5152332,41.6412921],[-6.5871707,41.6883151],[-6.5478299,41.8559743],[-6.6298836,41.9112057],[-7.1334461,41.9404756],[-7.1682909,41.8718791],[-7.4256922,41.7847727],[-7.9539833,41.8459271],[-8.130455,41.7805819],[-8.2518495,41.9078597],[-8.1293309,42.0348842],[-8.2484774,42.1008034],[-8.3676239,42.0557521],[-8.6070409,42.0340493],[-8.8910646,41.8228891]]],"terms_text":"PNOA","best":true},{"id":"poco_das_trincheiras","name":"Poço das Trincheiras AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Poco%20das%20Trincheiras&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.23941602841,-9.35156513689],[-37.23946967259,-9.34386884913],[-37.23941602841,-9.3379191951],[-37.23954477444,-9.33022260582],[-37.23972716465,-9.32791465461],[-37.23973789349,-9.32280111197],[-37.23964133396,-9.32085307601],[-37.23970570698,-9.31864034808],[-37.2398022665,-9.31706284448],[-37.23982372418,-9.31561238186],[-37.24053182736,-9.30933403261],[-37.24051036968,-9.30003805717],[-37.24008121624,-9.29687228705],[-37.23998465672,-9.29546409248],[-37.2399202837,-9.29318767574],[-37.23988809719,-9.28977831694],[-37.23995247021,-9.28817950681],[-37.24008121624,-9.28641127785],[-37.24036016598,-9.28212302085],[-37.24038162365,-9.27896767726],[-37.24051036968,-9.27556876869],[-37.2400383009,-9.26978737192],[-37.24017777577,-9.26721430207],[-37.24017777577,-9.26612365361],[-37.23995247021,-9.26454591343],[-37.23983445301,-9.26150689057],[-37.24333205357,-9.26135864488],[-37.24936165943,-9.26146453466],[-37.26444640293,-9.26161278031],[-37.28016414776,-9.26171867001],[-37.2829429163,-9.26170808105],[-37.29580679074,-9.26178220382],[-37.30684676304,-9.26178220382],[-37.31418528691,-9.26188809348],[-37.32436695233,-9.26191986037],[-37.33078279629,-9.26175043692],[-37.33056821957,-9.27275220267],[-37.33048238888,-9.28006887422],[-37.33053603306,-9.28117006773],[-37.33068623677,-9.28427245005],[-37.3306969656,-9.28535245384],[-37.33064332142,-9.28616774861],[-37.33070769444,-9.28717362916],[-37.33064332142,-9.28769245062],[-37.33062186375,-9.29026537022],[-37.3304287447,-9.29308179553],[-37.33037510052,-9.29655464967],[-37.33034291401,-9.3059142435],[-37.33039655819,-9.31203384249],[-37.33037510052,-9.321943554],[-37.33040728703,-9.33420325643],[-37.33035364285,-9.34184682509],[-37.33029999867,-9.3478281711],[-37.33035364285,-9.35202034528],[-37.31508650913,-9.35193565539],[-37.300109054,-9.35190389668],[-37.29531326428,-9.351829793],[-37.28899397984,-9.35171334434],[-37.28497066632,-9.35181920676],[-37.27851190701,-9.35173451683],[-37.27430620327,-9.35180862052],[-37.27115192547,-9.35170275809],[-37.2635129942,-9.3516815856],[-37.26045527592,-9.35163924062],[-37.25401797428,-9.35176627555],[-37.24705495968,-9.35162865438],[-37.23941602841,-9.35156513689]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"rio2013","name":"Rio Mosaic 2013","type":"wms","template":"http://geo.rio.rj.gov.br/ArcGIS/services/Imagens/Mosaico_2013/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","polygon":[[[-43.17709320917647,-22.969707888781738],[-43.14585740870588,-22.969588308044617],[-43.14605222658823,-22.927190274347275],[-43.156247695764705,-22.92730989255725],[-43.15647498329411,-22.87556516592966],[-43.177385435999994,-22.8749369295143],[-43.177417905647054,-22.88552681203441],[-43.1980361315294,-22.885706294449527],[-43.198036131529406,-22.854293259693964],[-43.21875176635292,-22.85444286278469],[-43.2190115235294,-22.833646454489337],[-43.22936934094117,-22.833646454489337],[-43.2293368712941,-22.82371093306296],[-43.19868552447057,-22.823531368775274],[-43.19855564588234,-22.834125256479705],[-43.18826276776469,-22.8339756310387],[-43.18803548023528,-22.844478937331477],[-43.16667045247057,-22.844419091729687],[-43.166832800705855,-22.83403548123485],[-43.156377574352916,-22.83406540632306],[-43.1565399225882,-22.813355672227665],[-43.104361199764675,-22.813056375525143],[-43.10445860870584,-22.802879896393364],[-43.09387350376466,-22.80276016858602],[-43.094100791294075,-22.73997839409261],[-43.13598663599996,-22.739918502607807],[-43.13569440917644,-22.750668603713393],[-43.12572622752938,-22.750548830086732],[-43.12556387929409,-22.771178288335854],[-43.14595481764702,-22.7710884716159],[-43.14611716588231,-22.760549566225578],[-43.17771013247056,-22.760878919332278],[-43.17758025388233,-22.77114834943578],[-43.188067949882324,-22.771298043870523],[-43.188067949882324,-22.781656499945914],[-43.25066942941175,-22.78162656334464],[-43.25057202047057,-22.791984235249323],[-43.28054150470587,-22.792822393946437],[-43.30343260588235,-22.793121735089624],[-43.33353196870588,-22.792972064600175],[-43.33346702941175,-22.802580576677798],[-43.38574316117646,-22.8024009845329],[-43.38541846470588,-22.812547569621618],[-43.41691402235293,-22.81284686744212],[-43.41675167411763,-22.823411659118616],[-43.42717443082351,-22.82335180425081],[-43.42740171835291,-22.833736229990887],[-43.45844270094114,-22.833616529309033],[-43.45863751882349,-22.81275707816501],[-43.48984084964701,-22.812996516105756],[-43.48993825858821,-22.796504244335274],[-43.5020819065882,-22.797462107811715],[-43.515426931529376,-22.797372308396717],[-43.52078442329409,-22.795905576244728],[-43.54169487599998,-22.796025310073155],[-43.54179228494115,-22.802341120431993],[-43.54653285341174,-22.802460848607485],[-43.54666273199997,-22.811889112101724],[-43.55250726847058,-22.81278700793061],[-43.5699109992941,-22.812936656660003],[-43.56997593858822,-22.819700607555284],[-43.57361253905883,-22.823262021899716],[-43.583483311764695,-22.823291949356644],[-43.583515781411776,-22.833466903308615],[-43.59390606847059,-22.83373622999088],[-43.59393853811765,-22.854682227387414],[-43.66098835929414,-22.854592465710777],[-43.66098835929414,-22.859828464394095],[-43.708523922588235,-22.860187496913827],[-43.70836157435295,-22.865034343090006],[-43.72206376541177,-22.864884751657844],[-43.72212870470588,-22.86847490057084],[-43.75015001011764,-22.86859457056733],[-43.75008507082353,-22.87529592210752],[-43.76037794894117,-22.87526600609435],[-43.759923373882344,-22.87849689743878],[-43.759761025647045,-22.884569568478902],[-43.76131956870587,-22.885855862947494],[-43.78128840164704,-22.8857960355681],[-43.781255932,-22.895906488289704],[-43.802133915058825,-22.896205602636037],[-43.8013546435294,-22.911369835519228],[-43.80119229529411,-22.927579033143484],[-43.7921332637647,-22.927758459903885],[-43.7921982030588,-22.93822460957403],[-43.78190532494115,-22.93798539232952],[-43.78184038564702,-22.94868995021093],[-43.75066952447056,-22.94845075146181],[-43.75060458517645,-22.95909468650586],[-43.72985648070586,-22.958855506152936],[-43.72966166282351,-22.979841971833356],[-43.709043436941144,-22.97966261413784],[-43.70891355835292,-22.99033398260527],[-43.69845833199996,-22.990064966868836],[-43.698360923058786,-23.000645848451164],[-43.667352410117616,-23.000436630016143],[-43.66725500117644,-23.011166128679353],[-43.631246162588184,-23.00937295708379],[-43.631311101882304,-23.02078907569042],[-43.63585685247054,-23.020908611087243],[-43.636019200705846,-23.031636481368604],[-43.67771022752937,-23.031636481368604],[-43.67764528823524,-23.04233361870472],[-43.67085913199995,-23.04230373961572],[-43.67108641952936,-23.063097982243804],[-43.64598738235289,-23.06303823327472],[-43.646052321647005,-23.052761015940998],[-43.60475093058818,-23.052551878372743],[-43.60452364305876,-23.063068107762582],[-43.58380800823524,-23.06288886073593],[-43.583678129647005,-23.08403836134171],[-43.54185722423525,-23.083829272389394],[-43.54195463317643,-23.06318760564771],[-43.521466285882305,-23.06300835878022],[-43.52130393764702,-23.0735237710834],[-43.500425954588195,-23.073374410186133],[-43.500425954588195,-23.042184223193427],[-43.45876739741171,-23.042214102308932],[-43.45870245811759,-23.03193529561677],[-43.43782447505876,-23.031815769997003],[-43.43775953576465,-23.021536170182088],[-43.32349884776465,-23.021207449115728],[-43.32330402988229,-23.04212446494251],[-43.31291374282347,-23.041945190030685],[-43.31275139458817,-23.052671385594376],[-43.30239357717642,-23.052581755188086],[-43.30236110752935,-23.042273860520083],[-43.291938350823465,-23.042154344071257],[-43.291970820470524,-23.031935295616755],[-43.27109283741169,-23.031815769997003],[-43.27119024635288,-23.010927040510325],[-43.260605141411716,-23.01086726840187],[-43.26067008070583,-23.000586071788522],[-43.25057202047053,-23.000466518383856],[-43.25053955082347,-23.01125578663348],[-43.23988950658817,-23.01101669862337],[-43.23985703694111,-23.00061596012315],[-43.21907646282347,-23.000496406744954],[-43.21904399317641,-22.990214420121887],[-43.20901087223524,-22.99009485753265],[-43.20862123647049,-23.083889012123244],[-43.187678314117555,-23.083769532629013],[-43.18761337482344,-23.07334453798677],[-43.135824287764606,-23.073374410186123],[-43.135889227058726,-23.052492124722143],[-43.17732049670579,-23.052551878372732],[-43.17709320917647,-22.969707888781738]]],"terms_url":"https://pgeo3.rio.rj.gov.br/arcgis/rest/services/Imagens/Mosaico_2013_UTM/MapServer","terms_text":"Instituto Pereira Passos - Prefeitura da Cidade do Rio de Janeiro."},{"id":"rio2015","name":"Rio Mosaic 2015","type":"wms","template":"https://pgeo3.rio.rj.gov.br/arcgis/services/Imagens/Mosaico_2015_UTM/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[0,13],"polygon":[[[-42.30362723364694,-22.436982955891427],[-44.10842009576469,-22.06578551470817],[-44.53130477905882,-23.786301394919743],[-42.70469231411757,-24.161784722114145],[-42.30362723364694,-22.436982955891427]]],"terms_url":"https://pgeo3.rio.rj.gov.br/arcgis/rest/services/Imagens/Mosaico_2015_UTM/MapServer","terms_text":"Instituto Pereira Passos - Prefeitura da Cidade do Rio de Janeiro."},{"id":"route500","name":"Route 500","type":"tms","template":"https://{switch:a,b,c}.tile.openstreetmap.fr/route500/{zoom}/{x}/{y}.png","scaleExtent":[12,20],"polygon":[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.358164,51.32937],[2.548804,51.09759],[2.570482,51.07409],[2.587412,51.01763],[2.598448,51.0051],[2.615575,50.99749],[2.639859,50.95766],[2.642247,50.94578],[2.624519,50.9256],[2.61962,50.91067],[2.623964,50.86071],[2.627811,50.85054],[2.637859,50.83696],[2.651102,50.82906],[2.732666,50.81738],[2.79995,50.73795],[2.816552,50.73092],[2.852648,50.73335],[2.890719,50.7162],[2.904925,50.71536],[2.916096,50.72418],[2.935084,50.75592],[3.007184,50.78377],[3.082183,50.78749],[3.092439,50.79092],[3.114119,50.80566],[3.148768,50.80195],[3.215401,50.73111],[3.221487,50.7267],[3.270507,50.70375],[3.275448,50.67757],[3.265761,50.6604],[3.265877,50.64054],[3.289219,50.60028],[3.292195,50.55037],[3.305598,50.53267],[3.375514,50.50839],[3.389804,50.50884],[3.474798,50.54445],[3.52173,50.53459],[3.532662,50.51873],[3.547788,50.51012],[3.615234,50.50558],[3.673778,50.45642],[3.684152,50.35277],[3.690097,50.34044],[3.702583,50.33482],[3.715758,50.33854],[3.749349,50.36279],[3.841089,50.36558],[3.901887,50.3436],[3.913173,50.34291],[4.026717,50.36904],[4.13761,50.29984],[4.143881,50.29727],[4.214438,50.28167],[4.229037,50.26664],[4.230782,50.25233],[4.170843,50.18579],[4.166015,50.16888],[4.176401,50.1547],[4.211948,50.13602],[4.240742,50.07102],[4.231934,50.05551],[4.181645,50.03436],[4.17177,50.02537],[4.169755,50.01217],[4.176498,50.00065],[4.206331,49.97546],[4.221639,49.97089],[4.308774,49.98145],[4.445423,49.9523],[4.454691,49.95251],[4.658098,50.00609],[4.669358,50.01392],[4.672929,50.02716],[4.66924,50.06972],[4.695168,50.10472],[4.831227,50.17941],[4.881497,50.16436],[4.904786,50.14451],[4.904264,50.12639],[4.880762,50.0815],[4.862772,50.0745],[4.851037,50.06216],[4.843307,50.03884],[4.843307,50.03883],[4.843295,50.03881],[4.826781,49.989],[4.826618,49.97692],[4.833433,49.96696],[4.896542,49.91753],[4.897546,49.89424],[4.879134,49.86942],[4.876249,49.85111],[4.889238,49.81266],[4.897691,49.80204],[4.910979,49.79926],[4.995343,49.81116],[5.01867,49.79272],[5.026862,49.78886],[5.099438,49.77323],[5.134584,49.73462],[5.141201,49.72984],[5.187609,49.70906],[5.196025,49.70732],[5.281572,49.70836],[5.333628,49.67308],[5.343996,49.65049],[5.354398,49.64041],[5.431412,49.60791],[5.482051,49.52815],[5.492943,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.607602,49.53761],[5.640997,49.56095],[5.706759,49.55267],[5.715782,49.55361],[5.775261,49.57414],[5.839902,49.55321],[5.861263,49.52038],[5.875997,49.5114],[5.975162,49.50129],[5.998015,49.47317],[6.016266,49.46597],[6.08635,49.47562],[6.093186,49.47787],[6.173966,49.52187],[6.246435,49.52511],[6.333999,49.48235],[6.344229,49.48037],[6.435145,49.487],[6.5451,49.44384],[6.606389,49.37868],[6.604972,49.33739],[6.616267,49.31869],[6.670133,49.29269],[6.729955,49.22917],[6.743276,49.19086],[6.760259,49.17752],[6.809042,49.17284],[6.824733,49.17826],[6.830928,49.19366],[6.829819,49.21802],[6.851186,49.23136],[6.884528,49.2239],[6.893221,49.22389],[6.937527,49.23369],[7.040549,49.19794],[7.046296,49.17503],[7.054777,49.16313],[7.069081,49.16018],[7.104945,49.16634],[7.143153,49.14159],[7.153499,49.13839],[7.286827,49.13488],[7.29893,49.13856],[7.360948,49.18259],[7.450116,49.19517],[7.50113,49.17672],[7.543788,49.10572],[7.557903,49.09626],[7.629604,49.08527],[7.647217,49.06722],[7.661197,49.06119],[7.754008,49.05963],[7.760731,49.06067],[7.802913,49.07489],[7.855253,49.05329],[7.867297,49.05227],[7.93826,49.06832],[8.080685,49.00688],[8.222498,48.98787],[8.23704,48.97683],[8.235894,48.95817],[8.208878,48.94863],[8.200888,48.94339],[8.158243,48.89753],[8.100873,48.7993],[7.990709,48.74478],[7.985341,48.7409],[7.904217,48.65865],[7.856051,48.63606],[7.848405,48.62977],[7.818424,48.58883],[7.81456,48.57704],[7.814491,48.50968],[7.785465,48.48337],[7.780554,48.47652],[7.745059,48.39484],[7.743573,48.38427],[7.751593,48.32322],[7.71085,48.29841],[7.702411,48.28803],[7.676613,48.21555],[7.596051,48.11698],[7.591652,48.10648],[7.585216,48.04694],[7.591268,48.03035],[7.624373,47.99865],[7.632049,47.97081],[7.575545,47.87436],[7.572802,47.86435],[7.572673,47.83631],[7.545808,47.78793],[7.544185,47.77232],[7.557581,47.72899],[7.535257,47.6989],[7.531364,47.68564],[7.536998,47.67302],[7.600164,47.60822],[7.589675,47.56755],[7.554237,47.55128],[7.54511,47.54283],[7.512557,47.48439],[7.387471,47.42111],[7.326527,47.4273],[7.244354,47.40939],[7.167083,47.4335],[7.152115,47.47612],[7.14279,47.48707],[7.128529,47.48893],[7.080105,47.47718],[7.035575,47.48695],[7.021019,47.48458],[7.012048,47.47287],[7.002995,47.44095],[6.955099,47.40808],[6.947157,47.39698],[6.94818,47.38337],[6.957691,47.37359],[6.971263,47.37218],[7.018004,47.38386],[7.05623,47.37035],[7.070073,47.35005],[7.05958,47.32257],[6.974243,47.27856],[6.963469,47.26233],[6.961339,47.23479],[6.89443,47.19393],[6.889128,47.18922],[6.855453,47.14636],[6.769073,47.10751],[6.760108,47.09953],[6.725613,47.0418],[6.623551,46.9811],[6.481204,46.9445],[6.46892,46.93522],[6.466862,46.91997],[6.475476,46.88771],[6.453496,46.8239],[6.45644,46.80534],[6.467224,46.79104],[6.460984,46.76887],[6.15817,46.59343],[6.148724,46.58069],[6.15152,46.56508],[6.165489,46.54399],[6.158111,46.52456],[6.101739,46.46979],[6.095717,46.45418],[6.097044,46.43317],[6.108289,46.41643],[6.166216,46.38839],[6.178173,46.36922],[6.137482,46.31297],[6.133713,46.30227],[6.130383,46.23737],[6.110298,46.22344],[6.088648,46.23081],[6.077173,46.23123],[6.018573,46.21601],[6.006813,46.20752],[6.003882,46.19332],[6.007866,46.16977],[6.017834,46.15564],[6.03509,46.15456],[6.055639,46.16288],[6.124683,46.15415],[6.137776,46.15702],[6.240258,46.22094],[6.249058,46.23299],[6.247073,46.24777],[6.21148,46.31057],[6.212186,46.32485],[6.239462,46.36705],[6.316478,46.41557],[6.410826,46.42495],[6.417483,46.42682],[6.504978,46.46871],[6.630473,46.47435],[6.746646,46.45695],[6.822442,46.42925],[6.818324,46.38181],[6.804843,46.36179],[6.801885,46.34639],[6.810949,46.33359],[6.864911,46.30038],[6.875036,46.28007],[6.860917,46.2439],[6.826978,46.21188],[6.820746,46.19862],[6.818627,46.16592],[6.822593,46.15261],[6.834266,46.14509],[6.903819,46.12971],[6.904911,46.09595],[6.909323,46.08406],[6.920006,46.07721],[6.948976,46.0699],[7.015561,46.00883],[7.051911,45.93066],[7.045335,45.92217],[7.044967,45.92064],[7.043936,45.92036],[6.995822,45.85822],[6.940965,45.83551],[6.843757,45.82387],[6.831016,45.81711],[6.826141,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.841405,45.71373],[6.907294,45.69124],[6.92419,45.66935],[6.942468,45.66172],[6.971313,45.66528],[7.00597,45.64945],[7.011511,45.63652],[6.997797,45.60877],[6.996431,45.59465],[7.015803,45.52354],[7.027743,45.5102],[7.107198,45.47877],[7.122797,45.44924],[7.13304,45.44001],[7.185604,45.41894],[7.19515,45.40409],[7.170749,45.35069],[7.142319,45.32298],[7.136488,45.30576],[7.14458,45.25048],[7.084166,45.20279],[6.992792,45.19823],[6.981064,45.19368],[6.900091,45.12689],[6.85843,45.11699],[6.782826,45.14228],[6.770557,45.14242],[6.677507,45.11356],[6.665295,45.10289],[6.665008,45.08667],[6.68237,45.04558],[6.696016,45.03395],[6.757442,45.01884],[6.783751,44.9146],[6.794195,44.90161],[6.866981,44.86519],[6.879801,44.86346],[6.936325,44.87461],[7.017954,44.84402],[7.034535,44.82282],[7.037114,44.75009],[7.049604,44.73226],[7.072236,44.72311],[7.086508,44.6968],[7.086656,44.68085],[7.07671,44.67134],[6.990071,44.67203],[6.974128,44.66431],[6.970564,44.64696],[6.978189,44.61784],[6.94659,44.57124],[6.882347,44.53479],[6.872327,44.5195],[6.878925,44.50245],[6.958945,44.43129],[6.958723,44.42908],[6.921668,44.41436],[6.912225,44.40659],[6.909075,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.999091,44.29414],[7.011806,44.256],[7.019835,44.24558],[7.032595,44.2424],[7.073117,44.2461],[7.165097,44.22112],[7.245331,44.18544],[7.260526,44.16682],[7.275371,44.15947],[7.338779,44.1574],[7.362775,44.13834],[7.377763,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.564785,44.15817],[7.605476,44.1634],[7.616198,44.16827],[7.639891,44.18928],[7.686079,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.694448,44.12276],[7.727862,44.08615],[7.724032,44.05704],[7.686028,44.02371],[7.680769,44.0164],[7.660161,43.9672],[7.596244,43.94466],[7.584187,43.93287],[7.568576,43.89159],[7.527096,43.87434],[7.516489,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.369681,41.35052],[9.273114,41.29196],[8.941857,41.27688],[5.8,41.64],[3.173576,42.41768],[3.160814,42.42757],[3.094399,42.41457],[3.034016,42.45331],[3.022142,42.45645],[2.878221,42.4487],[2.870188,42.44653],[2.784238,42.40256],[2.741304,42.41128],[2.729276,42.40998],[2.693308,42.39417],[2.683779,42.3854],[2.681621,42.37263],[2.685852,42.34679],[2.66719,42.33008],[2.581057,42.34418],[2.567769,42.34173],[2.533803,42.32197],[2.477948,42.32986],[2.419327,42.37658],[2.41222,42.38021],[2.267193,42.42055],[2.259731,42.42117],[2.206944,42.41558],[2.206525,42.41526],[2.205257,42.41541],[2.160278,42.41065],[2.148808,42.40545],[2.093931,42.35474],[2.008614,42.33818],[1.964998,42.36473],[1.930762,42.42442],[1.920889,42.43302],[1.884665,42.44761],[1.884588,42.44762],[1.884444,42.4477],[1.827736,42.47056],[1.725668,42.48452],[1.715606,42.50125],[1.727195,42.56103],[1.724794,42.57499],[1.710109,42.59992],[1.69377,42.60975],[1.602827,42.61382],[1.560687,42.6392],[1.546365,42.64166],[1.504443,42.6331],[1.492096,42.62502],[1.472384,42.59703],[1.437922,42.59264],[1.419356,42.60643],[1.38032,42.67415],[1.373353,42.68127],[1.333134,42.70563],[1.323642,42.7085],[1.232212,42.71248],[1.165543,42.69928],[1.085465,42.76635],[1.075637,42.77079],[0.9593748,42.78852],[0.9507323,42.78794],[0.9226515,42.7797],[0.8460624,42.8157],[0.7151135,42.8464],[0.7001699,42.84402],[0.6911674,42.83186],[0.6740937,42.76479],[0.6747382,42.75286],[0.6919171,42.70684],[0.6689955,42.67901],[0.4302428,42.67863],[0.3715037,42.70308],[0.3595376,42.70415],[0.3491168,42.69817],[0.3256688,42.67274],[0.2957095,42.66388],[0.2459353,42.70175],[0.2397249,42.70494],[0.189669,42.72039],[0.1791886,42.72075],[-0.01993262,42.67389],[-0.06725834,42.6848],[-0.1694885,42.77157],[-0.2998662,42.82697],[-0.3168349,42.82635],[-0.3920752,42.78766],[-0.4435404,42.78453],[-0.488418,42.80255],[-0.508683,42.79935],[-0.5449894,42.76906],[-0.5672068,42.76937],[-0.6744552,42.86392],[-0.6809365,42.86775],[-0.7337233,42.88666],[-0.747598,42.93879],[-0.757105,42.95107],[-0.7725328,42.95284],[-0.8211401,42.93865],[-0.9450847,42.94192],[-1.023131,42.98206],[-1.108517,43.00409],[-1.115597,43.00461],[-1.147753,43.00124],[-1.158452,43.01452],[-1.167362,43.02083],[-1.216216,43.0381],[-1.226121,43.03898],[-1.262362,43.03303],[-1.306428,43.05531],[-1.319918,43.05696],[-1.331346,43.0496],[-1.354196,43.0197],[-1.438684,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.476407,43.10248],[-1.434786,43.13087],[-1.427318,43.1404],[-1.394112,43.22935],[-1.395313,43.24596],[-1.408677,43.25591],[-1.526287,43.28099],[-1.546257,43.2737],[-1.571485,43.2412],[-1.610526,43.24223],[-1.650003,43.29323],[-1.669527,43.30065],[-1.733594,43.28856],[-1.756061,43.31966],[-1.762973,43.32565],[-1.791557,43.34067],[-1.800991,43.37017],[-1.785091,43.39037],[-1.783502,43.39686],[-2.7,43.9]]],"terms_url":"https://wiki.openstreetmap.org/wiki/FR:Servers/tile.openstreetmap.fr#Route500.E2.84.A2.C2.A9.C2.AE","terms_text":"Tiles © cquest@Openstreetmap France, data © IGN, LO/OL","description":"Routes du réseau classé (autoroutes, nationales, départementales)","overlay":true},{"id":"santana_do_ipanema","name":"Santana do Ipanema AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Santana%20do%20Ipanema&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-37.20224124741,-9.41355941666],[-37.20188336806,-9.37768274195],[-37.20208218992,-9.37455390013],[-37.20192313243,-9.36732508877],[-37.20169448729,-9.36044924119],[-37.20172431057,-9.35500535669],[-37.20195295571,-9.35101312056],[-37.20191319134,-9.34772709331],[-37.20175413385,-9.3383494838],[-37.20170442839,-9.33505352761],[-37.20171436948,-9.33301315816],[-37.20141613669,-9.32833399659],[-37.20120737373,-9.3246946053],[-37.20116760936,-9.32350762581],[-37.21425008782,-9.32345857698],[-37.21537343133,-9.32339971838],[-37.22078138595,-9.32328200115],[-37.23727365933,-9.32313485456],[-37.25180753737,-9.32292884922],[-37.26559583344,-9.32276208291],[-37.28029871006,-9.32258550672],[-37.29190990675,-9.32244816963],[-37.29204908205,-9.33522028804],[-37.29304319135,-9.41219621023],[-37.28356932967,-9.41235312635],[-37.27789296554,-9.41250023515],[-37.27160025364,-9.4124904279],[-37.26505901441,-9.41261792215],[-37.26164921949,-9.4127356091],[-37.25498868715,-9.41275522359],[-37.2499087886,-9.41296117565],[-37.24616099652,-9.41297098289],[-37.24108109797,-9.41302982631],[-37.23460944639,-9.41320635652],[-37.22839626323,-9.41324558544],[-37.22164626105,-9.41335346495],[-37.21686459529,-9.41346134443],[-37.21291798135,-9.41343192276],[-37.20224124741,-9.41355941666]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"Sao_miguel_dos_campos","name":"São Miguel dos Campos AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Sao_miguel_dos_campos&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.14150176596,-9.83171289603],[-36.05047117688,-9.8324573223],[-36.04958641959,-9.74245778891],[-36.1405871854,-9.74166417216],[-36.14150176596,-9.83171289603]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"GEOSN-DOP-RGB","name":"Saxony latest aerial imagery","type":"wms","template":"https://geodienste.sachsen.de/wms_geosn_dop-rgb/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dop_020&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[13.549014,50.697922],[13.842514,50.711263],[13.93239,50.745042],[14.046138,50.79389],[14.252571,50.859532],[14.400023,50.889661],[14.426705,50.935703],[14.35649,50.971973],[14.325595,50.993191],[14.27504,50.990539],[14.315765,51.042662],[14.415471,51.012633],[14.519389,51.003797],[14.5882,50.981699],[14.544667,50.91977],[14.579775,50.906489],[14.647181,50.922426],[14.644373,50.909146],[14.605052,50.856873],[14.720205,50.817851],[14.810081,50.813415],[14.856423,50.890547],[14.912595,50.947206],[14.996853,51.086789],[15.053026,51.247932],[15.055834,51.292741],[14.99264,51.344524],[14.988427,51.398],[14.977193,51.45754],[14.909786,51.496025],[14.739865,51.537097],[14.739865,51.591221],[14.700545,51.60605],[14.67948,51.5982],[14.683693,51.578133],[14.673863,51.558056],[14.617691,51.557183],[14.583987,51.590349],[14.519389,51.569405],[14.435131,51.559802],[14.326999,51.52574],[14.13461,51.555437],[14.067203,51.499522],[14.027882,51.478536],[14.04333,51.45229],[13.995583,51.392743],[13.957667,51.405885],[13.888856,51.388362],[13.724552,51.374338],[13.554631,51.392743],[13.404371,51.45929],[13.352411,51.439161],[13.315899,51.443538],[13.286409,51.418147],[13.226024,51.400629],[13.213385,51.46104],[13.219002,51.526614],[13.174064,51.5982],[13.002739,51.677512],[12.905842,51.653123],[12.903033,51.66619],[12.853883,51.693183],[12.764007,51.659221],[12.688175,51.670545],[12.643237,51.629593],[12.577235,51.630464],[12.425569,51.610411],[12.230371,51.570278],[12.177007,51.530109],[12.139091,51.460165],[12.167177,51.417272],[12.174199,51.334874],[12.13207,51.318201],[12.186838,51.213637],[12.158751,51.188119],[12.220541,51.092963],[12.490168,51.054139],[12.521062,50.993191],[12.605321,50.972857],[12.626385,50.918885],[12.502806,50.910917],[12.237393,50.818738],[12.213519,50.729933],[12.286543,50.664999],[12.217732,50.646303],[12.133474,50.627599],[12.053428,50.563416],[12.019725,50.647193],[11.859634,50.548248],[11.876486,50.508076],[11.927041,50.505397],[11.936871,50.486637],[11.870869,50.441941],[11.934062,50.399888],[11.96917,50.339875],[12.120835,50.297732],[12.172794,50.306702],[12.185433,50.260938],[12.212115,50.253755],[12.257053,50.216029],[12.28233,50.156684],[12.355354,50.158483],[12.355354,50.22142],[12.414335,50.281582],[12.511232,50.347045],[12.537914,50.387354],[12.678345,50.402573],[12.712048,50.386459],[12.7289,50.396307],[12.756986,50.42584],[12.786476,50.433891],[12.817371,50.417787],[12.846861,50.436574],[12.947971,50.387354],[13.009761,50.414208],[13.046273,50.449989],[13.056103,50.48753],[13.214789,50.492891],[13.275174,50.566092],[13.341177,50.568768],[13.391732,50.613344],[13.477394,50.585711],[13.54761,50.634725],[13.568674,50.67212],[13.549014,50.697922]]],"terms_url":"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=cd01c334-7e32-482f-bd43-af286707178a","terms_text":"Staatsbetrieb Geobasisinformation und Vermessung Sachsen","best":true,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHIAAABVCAMAAACiqkDBAAAA51BMVEWxs7T////a29oAaUD+/f6tr7CusLH8/P3t7e67vb76+fr29fXP0NHq6urn5+fe3t/h4eHS0tPLzMz3+PjMz87z8/Lw8PDV1taqrK0Ab0UEcUe0trcnfFzX19cAYDbFxscbd1QSckzHy8rCw8S+wcG3uboAbEPl5OQMcUoGbEXj4+NWm4CkyryTqqGXwrLN49qdsalBj3FZi3hwmInc4N6zwLtNiXI2fmN8nJBDhGuIpJmJuqe31sp+s54zhmau0cTq9PDd7edwqpPk8exjo4vm6OepubNikX+vvLfX6eLB3NLz9vW9x8PQldiEAAAK6ElEQVR4Xr2Z53LjuBKFdcCcM5VzDs4554n7/s9zGxDplThcz1Rdec4PF8mi8KEDumGwgjKldgInZjI+QyXIqBpY2sETADf2/gaSBRae7lrS/P75VuO3n4yc2g5+7h9JnbV6zwfAov15SN32gYfljFjz5Wq17NOFtPwBVJ1PQVpBGzh47nHM/c0LEguPqyMB/Q4r2DlSZoGJl5t7KXOmyQxVNQJLvuXQ/g1g7xbpxTq01dGcRp8tHyK43UpNUZVaTRkmWPU6Umf5CBbtDukvgNt13I72X6CHlVqt0jS6cdt3UhN4XBKzdQDP2hkyivHEI9jiDvW6w7C9cCwNXLKlW+YU+5LU6f+AZ+7Oscx9XC5vNY6IZABm4ixYEA6NcVOJ5WYXt/0OZwa7Q6IKQHehL7xq3CVQRVVIqlqpqAbimqEdcOYB7B0hme1AD4zaEMMaBxFpU9ZCUQzzoE/xfATbDTIAQkrQylhuK5VfpCwsbqt8S/E8gp7sBImFgwHB1NRRS5AxDLWijLBPeXsDezdIWAxtGtbXmkXgOpiKINNakQ7g7QYJ2JhWajaGJWZWIl8RDv5JK+kIPv5QsqaZpgYuLTI1TS4gEUCvGAjKgukm6wvzgVy7wsdtRdOZTUs79L2pScJadGV5jA3DYdzWcySYZhmRW4a0ZYMbrwywpHqh+ShX4tlhmFeon08HPx5W+/s3d3c3N/ur1e2P748ahOx3JKZ6lFhlwRxhoAq2/p2ydr8kmk41DKYmAO3pdv95edTqzejNLUnSrHd/9Hr3Yqb/IuE6kEclwWxqTMkS6ZXM3K5BCYsDh8O+r+6W932pwJEK6PlPGxtIOA5spcRMXVezqD7Npc6Dlubv2+FCJtrB/ut9T8oxc7Jm+UzefLj9wXVLDr7hpvfpx3dY5MicaTV/NVNhWjNfL0uetLbAxS6Al4fno9w0qX+/vFv9ePopy7JpJbo79UkL16HWwGf2+NqZP/rYRmIq6yX5MwD3t0oN1D2QpPkLC2yOe9pftuYZrXf0vDoglunosPMiLZQV6+aYodV5RVBEgmFRcK2q1pqyXauMqYFWddx3OjcZLjNudv+8+h7B1L3QaKo1A91apURKSmvsIDWLSCBAoKxJfJ40O2MYBpqli6YmW/JNp3O/es1x/aO72xfIqTcwKuJ1SjZeqUvz/kjEpIgUzFGN+2E0sNlCX7dqGfqC2YPRWPUogd6tu7t9hOYEo6bKXZcrccuQCsWkcyvrZUjTtZizth9m6njVcDhua00RkfVcCSm1Xh9eAATcOLUwtlUp0ZgW2D3aKEPCAxJ9KoxqVkTwlSG6+bjmHXlz/7uGtG34kVqS3215XCl5+jijKsLKkQhg5HmWaSznxVfxnh4eYfpdcmaNXixBDkqbg3bT6UULlCNhWdNiNJL8ido19cCg2IlrMr6k2ZXUEyXUWlQG4v9C4pfZK9Pk/ZqiqhYGL9ZH/1dk8tCZv1jJfyIjq/AjJaD4lA3ulSDVVN+eMIWAZ90rYvwnEiG2O0q5C8t3LpubC762K+Oh7VtUtQ4w/QA5RZhNv5g/BX+XrQdFxIVgatMYVKeJDMi0Qo7A8AESrlMgWIsyZLXM37UhQoVM85wI4HUwNtgLlQFUP0SGKNaOtMyeEHl/zd1IfhwFSIRp6bQ6MJrcXOv73T4c7UMk983v17dqkD05TKWgxczhMGguC0fjvOoqXZD0GB8iFwi3kOoA5fuFdo0MaxrdwNcjzkoIZugWn8JGlvGemeJjZGpVlQ/X97rPNBM9ZG6iiZj53I3cspq35SPVyKL4MTLSCyuuafIHOYrbZbO3VLBSl8VDHrPcMsXeWlLKVNf+BJkWi4Gur104DKu+Y2WstqtlrE2vq8PN/bA6Row/stLfbtRj16x6TiI2jhb5MBR21cJCmmUQ2a+9b0FqVTP9E2RqspogjbrvjVq2eEvrUrze7VJH6BZWiUhd0+raVeZTzliRiQB/gvThthdkVPYvtd8ObQzUDFVWlUSKUuJ64kemGfn+dBqGth1Uu+4fIQPIWrLefKytqmWDF0UNgNPGXeZEsqZPgyC0A8/VI5Tp4+rTrWT+U98HL0Eqjq4YtqMh8eKYuR+Afu9YrbiFVp1CSxLerLjQoFdtL/p/D0ddvBXHVzyzWeQNHFjteLGT89gYgVJE2tslRTE8gNn6ro6AXdn4xYlil5fz1a4OJ3R2d+rchpuNXtqlVbWbwrM1YHdIhlAtPzIQLh3p8Nq7PehuQxeM0pRVxj4cG9gt0i0/pfAi7tMQmq1hx0gbYOWnFOPa2BVn3jtGppZW+r+T2oUxlE0b2DmSod1Oy2JpaDo8F7tHBkgrgdkscexYgw3sHkkNf1gbyIZa3OjUDCuy8QlI2UegqEMMCanm/XFsDEObQffxGcgAHvW/phzy8/zRwOYH+pHY4cNPAWe0d7139ofxPP2yd304MMGlvb29pRCy3t6cyibRGRvdsC2n2d7DTPSpF4QjD7YG96Rf55p9Zfit2PlMvHzxBSS/1++3dHAd0tW/SCZD4yRNNl2/bXdH2flNrYoqEPfqkjSp0596/x/8RnG/zt+d0J89bjH/1Qm49upS/x3paKbH7MHQqOjO5iG7yhACpz36/ez85JjIk/4pPlTUopcvTr5ecNQAOG1IktRgGbKXI1NHM9Ykxbc289WDDeC8LtWvGADnmK6+5vmmYUNafvcPvXIt3NiQ6scZsn5eQEYeRvkZRFtrbhKrAGKyrZWCS2s1GjN+meydt1oXl5nFzvUVv8tNmSWAmGm9FwnkRKqfbSGTtjxUtk7w82qONkiXNO9DrDXY2zsk5OlFfUKq98+EYb313exwPe5c5A2mg9jWOHJ+TnM2N5Ee/FrJ/+lEDMB1NZFmLjZlUaDqfRFhBlRnE7rr89h9IT7PtKvrQQohQpKJV5RKGbLwL2X+0UAQGaqZMydijojYWiYOiXipW2d9iqwIdWPP0b/1pEkvgXm1zu7e+d4iR/5jE8zZROqms3G0xJSM2M5M6k0mFyBVG3OumU+Q9ZPr+qRn+o1sEXyhiXwD9K8NWiESd/uJlVmJ4zq9s4GEjYGSM6OFwoliPQqZ3EoNQMAjRgnvgz85IZ1PpLl7RqQYpLRPtou5XV9QMeCvHufI09mk4R9uIDXH2j66UQIEyHUxkfo6ANYi0TgLjUexQaqTGA00Fy6kx+8raHF2KRZmNUNSDk6ON5FgqOarxI3EzjXGu77WKRrCXlP7Vs+tPM7kcORpjjwBG8QM4vaaZ3qOTHuT+ZW0gUSAsZplDW06QgyQS8RocgXk2UvIC25OLu7YM2HZjBeB40a9BaGE7vdyJE+5yRZSzz/NKAQfFj5OkB/rJwkAjZao1DjFCaVNyoc5P/9q6TOakQzQU17hyLbJISAgHJYjZYrPFhL5Ry8lRBsMW/rGo9I6ub7kBYAjqw0qo98G141644qjiHl4yIshof2ZJFHYvuxRbvGJ5UgMGgWk7CcCqY6AAAVdi75ASVi/OJ8QEpcNfk+MHt2kF1nrkPoMwJ5EzDqJUuwbcqTIiW0kFrDF6hiVfer+0qoLXb0dNjgS1+v+ec4AvhJFg5ws/XVwW521LkYAPKkjEZnk8y/Mm0i05SYZOTZdq6wlnV0eH5+cAfogjkByv1xeHtrI5B1u3pkxfWO7WVVlcXPKWAIhl7HTLWRq+vwEydXxmdpCwoah6pqLv4jEQndNH38V6UFu4+8iUa3is/U/e1Y2pAhuIKYAAAAASUVORK5CYII="},{"id":"Geodatastyrelsen_Denmark","name":"SDFE aerial imagery","type":"tms","template":"https://osmtools.septima.dk/mapproxy/tiles/1.0.0/kortforsyningen_ortoforaar/EPSG3857/{zoom}/{x}/{y}.jpeg","scaleExtent":[0,21],"polygon":[[[8.3743941,54.9551655],[8.3683809,55.4042149],[8.2103997,55.4039795],[8.2087314,55.4937345],[8.0502655,55.4924731],[8.0185123,56.7501399],[8.1819161,56.7509948],[8.1763274,57.0208898],[8.3413329,57.0219872],[8.3392467,57.1119574],[8.5054433,57.1123212],[8.5033923,57.2020499],[9.3316304,57.2027636],[9.3319079,57.2924835],[9.4978864,57.2919578],[9.4988593,57.3820608],[9.6649749,57.3811615],[9.6687295,57.5605591],[9.8351961,57.5596265],[9.8374896,57.6493322],[10.1725726,57.6462818],[10.1754245,57.7367768],[10.5118282,57.7330269],[10.5152095,57.8228945],[10.6834853,57.8207722],[10.6751613,57.6412021],[10.5077045,57.6433097],[10.5039992,57.5535088],[10.671038,57.5514113],[10.6507805,57.1024538],[10.4857673,57.1045138],[10.4786236,56.9249051],[10.3143981,56.9267573],[10.3112341,56.8369269],[10.4750295,56.83509],[10.4649016,56.5656681],[10.9524239,56.5589761],[10.9479249,56.4692243],[11.1099335,56.4664675],[11.1052639,56.376833],[10.9429901,56.3795284],[10.9341235,56.1994768],[10.7719685,56.2020244],[10.7694751,56.1120103],[10.6079695,56.1150259],[10.4466742,56.116717],[10.2865948,56.118675],[10.2831527,56.0281851],[10.4439274,56.0270388],[10.4417713,55.7579243],[10.4334961,55.6693533],[10.743814,55.6646861],[10.743814,55.5712253],[10.8969041,55.5712253],[10.9051793,55.3953852],[11.0613726,55.3812841],[11.0593038,55.1124061],[11.0458567,55.0318621],[11.2030844,55.0247474],[11.2030844,55.117139],[11.0593038,55.1124061],[11.0613726,55.3812841],[11.0789572,55.5712253],[10.8969041,55.5712253],[10.9258671,55.6670198],[10.743814,55.6646861],[10.7562267,55.7579243],[10.4417713,55.7579243],[10.4439274,56.0270388],[10.4466742,56.116717],[10.6079695,56.1150259],[10.6052053,56.0247462],[10.9258671,56.0201215],[10.9197132,55.9309388],[11.0802782,55.92792],[11.0858066,56.0178284],[11.7265047,56.005058],[11.7319981,56.0952142],[12.0540333,56.0871256],[12.0608477,56.1762576],[12.7023469,56.1594405],[12.6611131,55.7114318],[12.9792318,55.7014026],[12.9612912,55.5217294],[12.3268659,55.5412096],[12.3206071,55.4513655],[12.4778226,55.447067],[12.4702432,55.3570479],[12.6269738,55.3523837],[12.6200898,55.2632576],[12.4627339,55.26722],[12.4552949,55.1778223],[12.2987046,55.1822303],[12.2897344,55.0923641],[12.6048608,55.0832904],[12.5872011,54.9036285],[12.2766618,54.9119031],[12.2610181,54.7331602],[12.1070691,54.7378161],[12.0858621,54.4681655],[11.7794953,54.4753579],[11.7837381,54.5654783],[11.1658525,54.5782155],[11.1706443,54.6686508],[10.8617173,54.6733956],[10.8651245,54.7634667],[10.7713646,54.7643888],[10.7707276,54.7372807],[10.7551428,54.7375776],[10.7544039,54.7195666],[10.7389074,54.7197588],[10.7384368,54.7108482],[10.7074486,54.7113045],[10.7041094,54.6756741],[10.5510973,54.6781698],[10.5547184,54.7670245],[10.2423994,54.7705935],[10.2459845,54.8604673],[10.0902268,54.8622134],[10.0873731,54.7723851],[9.1555798,54.7769557],[9.1562752,54.8675369],[8.5321973,54.8663765],[8.531432,54.95516],[8.3743941,54.9551655]],[[11.4577738,56.819554],[11.7849181,56.8127385],[11.7716715,56.6332796],[11.4459621,56.6401087],[11.4577738,56.819554]],[[11.3274736,57.3612962],[11.3161808,57.1818004],[11.1508692,57.1847276],[11.1456628,57.094962],[10.8157703,57.1001693],[10.8290599,57.3695272],[11.3274736,57.3612962]],[[11.5843266,56.2777928],[11.5782882,56.1880397],[11.7392309,56.1845765],[11.7456428,56.2743186],[11.5843266,56.2777928]],[[14.6825922,55.3639405],[14.8395247,55.3565231],[14.8263755,55.2671261],[15.1393406,55.2517359],[15.1532015,55.3410836],[15.309925,55.3330556],[15.295719,55.2437356],[15.1393406,55.2517359],[15.1255631,55.1623802],[15.2815819,55.1544167],[15.2535578,54.9757646],[14.6317464,55.0062496],[14.6825922,55.3639405]]],"terms_url":"https://download.kortforsyningen.dk/content/vilkaar-og-betingelser","terms_text":"Geodatastyrelsen og Danske Kommuner","best":true,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAABGlBMVEX///+y4OQAAAAKCgrL6ezI6exHs8AdorE/sL0FBQX+/v78/v4RERH5/PzS7fC64+chpLLt+Pm95Og+Pj4mprQYGBgAkaLM6u3D5+oAlabc8fMVn671+/wAjp/Y7/EmJiY4ODg4rbsgICBgYGBLtcHk5OT29vYyMjJqamoNnKtISEhYu8aamppMTEzy+vpycnLg8/S/5emjo6NSUlJfvsgsLCzs7Oxsw81NtsKsrKyu3uPo9vd+ytODzdXk9PaEhISBgYFVVVWe193P7O95yNGPj4/x8fGk2uB7e3vd3d3Hx8cuqbfW1tZnwctRuMOxsbG7u7vQ0NB2dnYAl6dzxs+14eWW1NtRUVGZ1dxwxc6r3eKx3+ON0NiR0tk4C4avAAAG00lEQVR4XtzY5Y4qSxQF4JVqV9zdXcfd3Y/Lve//GrcDdTPQyjDnNMl8PyBAUnuxa1c3Ae8S3l9fP/+KFVG24rm4IZfraFiBRCqX+jyRiscD8F1yUp5K5Xbhs36K1qcJ4ofwVzVuChCFr4a0/swmJOCn/dxnk/g6/FSKmwOkovBTMGUJ0FLgI8EmgAYfRa0BMvBTxzIDcRF+2s1ZjuE3+KplDvBZw58la5rbklfzLUjlDuAim8Ub7ekJlmXP8n04qc7fjEpwFF4v3d2Vtk/fEKJ/xrETHKfDiThJQOvfwUmilBGCBiETXHhKQkmWTUwZETQ4OMjFUxPx3BacfGsFo1Qw87hw/cQrllPgQD5v5eLxXOvBubmnreiMxRIoHK1PcTpcpNMynOUz0TmZf+AtzSXmsFwfy3oUonOCQe+1ZLr/r7g8lpTORE0yP+Clz5kDsAkZy/lhCSDw8HLIJUxYTsNyHoSoSfDOc62hJcDyQ9ARombB0FsCUFz2jwUIRvvwELLpgILlbNlsgedaWesQ6ljSlXUIH+FJtxzDIZYUEoLmY3gFTyFTC1hWwbIeMuYRgDc5z81PwB6Wppla0PqKRZxx7Ez9NN5Bb80maJ1jMTrHsrT93CHe5UwQopSQOcCiQmfclN7HO2XXhYwgBIVMRkzgDbKHw/xwT8MfsHe6zvOdgzw+posCVmsgYbU+MVitJsFqvXSxMkexQrkJ3BpPG1iFcXutdwHct9e+V7AyzxWs1oBgta4ZrNRLhBljhS7IRoREsDI3ZADckmv4bKfSUNWNyhhjBoZKEbefIjG13Lu4hA+eGMJE1tYiDJEaMRia5RiRCmvf2zFCfDiUR6TwTAewwkhHwIvKFHcwUTshDSxNUWR4e5mduVqEFNtSbAcU0CUDLEDLmmuFdC45SnJpBR6+q3XMOJbU4tzGn0h1eEiedx63O1u7M7X6XCA8EQjn4S7WxCy5wpg79ARXXEfk+WqV58Xqb1B7RvnRVDiQhLNuQ2We3K+E9bJaHtzA0Y8SX92eqor7tP0BWt49gVyLkUJFevb4RdRo9Ai5gIOrEi0/k0Ax6s8K6LBVV9VbbBKPAFpsALlHdmBrSOtT1dJvAHpgNO+rAjvH5B64JEeuAeQa6QJolGFrnd+eU+UB0Aa8CuRhZ6MNQ6Po3oExuZk83sNGurRtIo6wFxiZhEf2O3A97UPNNUCkAEONjGHjVDQH4A8wtAYIKLC6ZI5hqElNtwD30/nblGwDfOHNAaod5MPWAFlY1WMDGFAhdZcAJ6oGw4391aBjDVBdOADaZUxbUHEO8EIP4LW06TmDNIDtFsDODj2BTVJzDFCIYULtwc6+NcA6+tYASdgqTFugqUWnAGM6e8fkFnaurEP4LxC2HMM0bD2RI1qmax+gzkyjbZIebGXpdehVSQfSAfMOyLAXoc0vMpu2AXpk+n6Dfm51zpsa8AjDKDxffwgHdWmDfsOIXYAx7dAx6cJBVjRdinUYtPmbkQ5Hz/QnV5dcWANsMg16EtpwlKA3Q1r/F801+j9COBzIw0WTfrk2ubcEKDKXMFyqMbhI8CJNUOXFX6DkfDgQNgQCyRBcRabzXY+VzQEG9A7YkG7gpr8virxBFB+GeKUd6mwike7DQ72sTta/ldrzf9HskCYMWKM5XIR2z3/+/HI1xFLqtemEX9boazrwm9NnhX78gR2XN1wVIgr+qqONoqtGW8bHdh0ruCoXZfxV3d6Jq7WKjI+tSRhXUlnBX7XTHLi7/q89u1txFIbiAH6EzZV0xd6shNJHKM1VIFoBd6BXuYshn+//GluWma5qN1od4sD09wDJnyTnHEF45OXl5eXp/nw6IkIQPsAn2BX+8nZxWf7E9oUx7MYwlMJaieZUa005b+Yuhg2zyV+WsRzWqbgW76iYt9jR2OSOmXUJ3qj4h9ITTMuNTTos28FynosuWsG0liU9rIDFzlz08T1MqY1NeixbXguSij5dwRTEkgGDYaGd0GKAlzAhux/A+jsouRjiCMLSdhxgDwsdHwQgXz0APAhAYl4BEDYK8DPqI8SjMlzRC9WCMkztIADLPrMRkTmjyA4PYLlmQSuGopvAmt+BsY1Y0zAUSlj1h9EBZib4GMeh/U/GeXnj3TUQ4XIfx5rrA8yDrWH2hpmkhv85OqneSRcolPbjg4Q2MFuKSXtTnCGwv+pwvwLFiNSlqnyWw1PS8K/c3EvV5UqIy0jVI68QVe7VgK8hJjQOkEFMTCq16R1cxwGa9FsFMFtfAfGjAC3EVI6rAMOmr1A2EFfpVI/DEBnqDyMC0f3ojuMCNlArJ6VSUjqJYRs1MUpd92dY4Q9//EnbIq9ZogAAAABJRU5ErkJggg=="},{"id":"Sicily-ATA2007","name":"Sicily - Italy","type":"wms","template":"http://map.sitr.regione.sicilia.it/ArcGIS/services/WGS84_F33/Ortofoto_ATA20072008_f33/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&STYLES=default&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[15.711650848388677,38.25894105289697],[15.237178802490236,38.81938114846882],[14.271240234375,38.55246141354153],[13.150634765625,38.75408327579141],[11.964111328125,37.97451499202459],[12.5244140625,37.54022177661216],[11.87896728515625,36.796089518731506],[12.496948242187498,35.47409160773029],[12.689208984375,35.46961797120201],[14.5733642578125,36.6640126988417],[15.297088623046873,36.62875385775956],[15.398540496826199,37.42170795425973],[15.711650848388677,38.25894105289697]]]},{"id":"sc2012","name":"SIG Santa Catarina OrtoRGB 2012","type":"wms","template":"http://sigsc.sc.gov.br:80/sigserver/SIGSC/wms?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OrtoRGB-Landsat-2012&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","polygon":[[[-48.62488448156965,-26.916236931410996],[-48.624164193144196,-26.83408805760915],[-48.5616254665196,-26.83412188528322],[-48.5616507397977,-26.749193916956184],[-48.626754704148055,-26.74918263262303],[-48.627146439958395,-26.73276274152515],[-48.6412615657696,-26.732999746505616],[-48.641741758053236,-26.709116191945647],[-48.624138919866105,-26.709127480253297],[-48.624176829783245,-26.500792500209887],[-48.570989216050585,-26.500769882438657],[-48.57154522816848,-26.474145680246586],[-48.55418248612319,-26.47380633457661],[-48.55449840209926,-26.45735818142214],[-48.56154964668535,-26.457471312923715],[-48.56161282988055,-26.41746108634898],[-48.49909937653404,-26.417472403421797],[-48.49908673989502,-26.250810301340856],[-48.43663646974372,-26.250787634582515],[-48.43661119646563,-26.207520071408148],[-48.460102708446854,-26.20750873380981],[-48.46194765774716,-26.124204304592393],[-48.56161282988057,-26.12419295889107],[-48.56162546651964,-25.95753087401021],[-48.624113646588064,-25.95753087401021],[-48.624113646588064,-25.945066276881477],[-48.688383592761575,-25.94606622032166],[-48.68839622940061,-25.9575195121708],[-49.25089094312879,-25.9575195121708],[-49.25090357976782,-25.999198717680073],[-49.31339175983624,-25.999198717680073],[-49.31337912319721,-26.0825014166478],[-49.37590521318276,-26.082501416647776],[-49.37590521318275,-26.124192958891047],[-49.50093211987576,-26.124181613188597],[-49.50091948323672,-26.16585828693744],[-49.68661489397596,-26.165846945284223],[-49.68661489397595,-26.12417026748506],[-49.74906516412725,-26.082456017648312],[-49.74907780076631,-26.04084043378188],[-49.81160389075186,-26.040851787565785],[-49.811591254112805,-25.999176002051062],[-49.93656761424967,-25.99915328641767],[-49.9366055241668,-25.98244474858429],[-50.000913380257444,-25.982876406234503],[-50.00093865353552,-25.99915328641767],[-50.313379553877645,-25.999164644234927],[-50.313417463794764,-26.040829079996882],[-50.37411124111907,-26.04084043378188],[-50.374098604480025,-25.999198717680073],[-50.49913814781211,-25.999176002051062],[-50.49911287453402,-25.984137291872997],[-50.62593418397117,-25.984523506389962],[-50.62594682061022,-26.04084043378188],[-50.6883970907615,-26.041612488584164],[-50.68844763731769,-26.124158921780424],[-50.75093581738611,-26.124136230367803],[-50.750948454025156,-26.207520071408148],[-51.12595335426997,-26.207474721008193],[-51.12595335426997,-26.249132949280156],[-51.18847944425552,-26.249178283438034],[-51.31344316775333,-26.33244989854678],[-51.31346844103143,-26.624140013763412],[-51.436599851867975,-26.62415131048226],[-51.43658721522893,-26.56476034464233],[-51.62408966535135,-26.564104792996805],[-51.62411493862942,-26.540796365619084],[-51.99906929231806,-26.540796365619084],[-52.06158274566456,-26.49910746406482],[-52.06158274566456,-26.457471312923687],[-52.12408356237202,-26.457493939210668],[-52.12405828909395,-26.41578614733],[-52.374074192562865,-26.41579746456714],[-52.37408682920191,-26.391327004376254],[-52.56156400604623,-26.389402650121472],[-52.561576642685274,-26.374153838977676],[-52.624077459392744,-26.37416516029677],[-52.62409009603178,-26.332472549349774],[-53.124083993052494,-26.332472549349752],[-53.12409662969154,-26.317068980284002],[-53.16180436059632,-26.31650263355217],[-53.161362078229814,-26.290821564697215],[-53.18655953648188,-26.29083289416888],[-53.24907298982837,-26.24911028219455],[-53.24906035318934,-26.23919300812073],[-53.31158644317491,-26.23824090528976],[-53.374099896521415,-26.22882146785218],[-53.43844566252919,-26.227767259506184],[-53.43843302589015,-26.249144282821256],[-53.5616023466438,-26.249155616361257],[-53.56158971000477,-26.239827739008902],[-53.655012382450856,-26.238138893809616],[-53.656225499799,-26.292634266082075],[-53.67011316610744,-26.316842441923516],[-53.68846156599812,-26.33241592233391],[-53.70322116040052,-26.374097232365553],[-53.70928674714123,-26.384489741468975],[-53.70980484934199,-26.395684982214643],[-53.70619077057565,-26.407218680242053],[-53.70721433833813,-26.459270088862837],[-53.714379312675604,-26.461679725793857],[-53.714758411846894,-26.48118122161117],[-53.73046575417756,-26.49913008216322],[-53.73146404866198,-26.54080767056338],[-53.750962382705566,-26.540796365619055],[-53.75094974606652,-26.624173903916578],[-53.76019976584611,-26.624140013763338],[-53.761248606886696,-26.667499888848678],[-53.75097501934461,-26.66751118127877],[-53.75096238270559,-26.742976079662007],[-53.727369777612,-26.743404906944193],[-53.72132946414936,-26.749047220537665],[-53.72140528398363,-26.750931690893374],[-53.745705540863625,-26.759428345833868],[-53.746122549952055,-26.777040237532006],[-53.71948451484907,-26.77754790691426],[-53.720836635226696,-26.834155712947112],[-53.700466373089114,-26.834144437060257],[-53.70276624139493,-26.931075520284146],[-53.71167507192037,-26.930906526843206],[-53.712243720677314,-26.955565624612287],[-53.751000292622685,-26.954788421555175],[-53.75092447278844,-26.999147992456276],[-53.764673136067394,-26.999147992456276],[-53.80369507743266,-27.037513523530937],[-53.80454173224855,-27.0725803974359],[-53.80809262781969,-27.07249038098803],[-53.8086233666595,-27.09612846681215],[-53.82689594671591,-27.095768476254833],[-53.82761623514137,-27.124136682787803],[-53.846444827315686,-27.124125435915396],[-53.84764530802479,-27.170138168249487],[-53.8350592155378,-27.18931578625989],[-53.83536249487484,-27.200544291231996],[-53.688474202637146,-27.202837060128804],[-53.688486839276194,-27.227885858850012],[-53.43653753003366,-27.23245898831079],[-53.43655016667271,-27.167507452480596],[-53.37598275573884,-27.167507452480574],[-53.376008029016916,-27.233515163499888],[-53.24904771655028,-27.235638719456546],[-53.24904771655028,-27.209220599589166],[-53.06344076228435,-27.209175646364237],[-53.06345339892339,-27.233402804913485],[-52.8134754053716,-27.23685216181505],[-52.81346276873256,-27.276528928524463],[-52.750961952025094,-27.277315131338465],[-52.750961952025094,-27.292487755808434],[-52.438495778404864,-27.292521445488386],[-52.438483141765836,-27.326890821722227],[-52.37603287161454,-27.327530725463642],[-52.3759949616974,-27.33419897625023],[-52.25098069164342,-27.33417652490038],[-52.25099332828246,-27.346692446966557],[-52.18654646916235,-27.34727611465991],[-52.18657174244043,-27.334187750575865],[-52.12597905822849,-27.33419897625023],[-52.12599169486754,-27.364133804119422],[-52.02978896183197,-27.364885718492065],[-52.03035761058891,-27.424416622283772],[-51.97533768419499,-27.42478676693274],[-51.97603269934236,-27.50087558818674],[-51.93845133482801,-27.500853170691318],[-51.93845133482801,-27.54251940627202],[-51.688460704637194,-27.542474588252876],[-51.68847334127622,-27.55742038383185],[-51.599031210128736,-27.557902111020763],[-51.599233396353426,-27.59480956901105],[-51.563509617778415,-27.594977556358298],[-51.563484344500324,-27.625860453692134],[-51.500882434680506,-27.62586045369211],[-51.50094561787572,-27.667535190923896],[-51.43936727581839,-27.667501615740118],[-51.439544188765,-27.709317103607006],[-51.37596925773886,-27.70949610256912],[-51.376007167655985,-27.750892905814947],[-51.31349371430947,-27.750904088992016],[-51.313455804392355,-27.792531093204254],[-51.18846680761643,-27.792508735404642],[-51.1884794442555,-27.875860156488773],[-51.12597862754804,-27.875860156488773],[-51.12596599090898,-27.91751742532308],[-51.06347781084055,-27.91749509328296],[-51.06346517420149,-27.959192137382583],[-51.000951720854985,-28.00086192326361],[-50.93850145070369,-28.00086192326361],[-50.93848881406464,-28.16754693055966],[-50.813461907371625,-28.167524650369067],[-50.813449270732576,-28.292532475134653],[-50.750961090664134,-28.29251022102188],[-50.68844763731762,-28.334184014870516],[-50.68848554723476,-28.417538143267095],[-50.625997367166335,-28.4175159153423],[-50.56352182373695,-28.44094155830843],[-50.43848228040489,-28.44050820876798],[-50.438469643765856,-28.459173964550686],[-50.37596882705837,-28.459207293310225],[-50.37598146369743,-28.475537121198975],[-50.188441103657894,-28.474537408344325],[-50.188491650214054,-28.51143164845026],[-50.12398160789872,-28.51104300453612],[-50.124019517815846,-28.5008600237691],[-49.87597493003768,-28.500848918564397],[-49.876012839954804,-28.514196530962266],[-49.813474113330216,-28.513685754912284],[-49.813474113330194,-28.58255155550104],[-49.830028110476746,-28.582507169109398],[-49.829510008275975,-28.625974659050915],[-49.87589911020343,-28.66572089511971],[-50.0010018367307,-28.749145575544063],[-50.00100183673066,-29.04083327722487],[-50.03318735637359,-29.04081118145324],[-50.0321890618892,-29.147114336184],[-50.12601610678465,-29.14774341401082],[-50.12597819686752,-29.165786374753505],[-50.13612541801917,-29.16580844371222],[-50.18850428685308,-29.19622599157441],[-50.18850428685309,-29.31905095330294],[-50.14220364139895,-29.31873143173735],[-50.14207727500852,-29.334221566678927],[-50.126003470145626,-29.334177501353437],[-50.125990833506584,-29.362375414604447],[-49.99905579431803,-29.361527388076844],[-49.99904315767897,-29.24030824385708],[-49.9384757467451,-29.239856157941617],[-49.93851365666223,-29.25087104871457],[-49.87601283995477,-29.25087104871457],[-49.876000203315726,-29.300979886173586],[-49.82262303999743,-29.30051704853271],[-49.82226921410422,-29.3341885176866],[-49.81347411333018,-29.334221566678927],[-49.81353729652554,-29.34109552421944],[-49.6865390741418,-29.339905833968423],[-49.6865138008637,-29.29254930022262],[-49.62398771087813,-29.292516237731153],[-49.6239750742391,-29.2508489980658],[-49.56148689417066,-29.2508269474122],[-49.561448984253516,-29.167485670694504],[-49.49901135074126,-29.167463602096316],[-49.49902398738031,-29.0841871105079],[-49.43649789739473,-29.084176067267432],[-49.43651053403379,-29.04251254202398],[-49.374047627243456,-29.04247939890416],[-49.37402235396536,-28.959201357408347],[-49.31153417389693,-28.959168187563616],[-49.311521537257896,-28.9174874156231],[-49.248982810633294,-28.917498476687246],[-49.24897017399424,-28.875823083095714],[-49.18654517712104,-28.875845214103762],[-49.18653254048198,-28.83414203544581],[-49.12401908713548,-28.834175245265325],[-49.12400645049644,-28.79249965988945],[-49.06149299714994,-28.79246643678005],[-49.06145508723281,-28.750840644227264],[-48.99903009035959,-28.75085172301705],[-48.999030090359604,-28.709187170256886],[-48.936579820208316,-28.709176087050047],[-48.936579820208316,-28.667517104639387],[-48.87405373022276,-28.667506017020735],[-48.874041093583735,-28.625852646864526],[-48.74911528000304,-28.625852646864555],[-48.749115280003025,-28.54254072237745],[-48.68656391673939,-28.54252962156217],[-48.68657655337841,-28.33417289217185],[-48.62407573667094,-28.334161769471883],[-48.62406310003189,-28.08417545272023],[-48.561600193241524,-28.08417545272023],[-48.56158755660246,-27.959192137382715],[-48.49904882997788,-27.959158652239882],[-48.49903619333884,-27.915809010935423],[-48.56157491996342,-27.915797844739515],[-48.561600193241524,-27.875837815851458],[-48.4990235566998,-27.875860156488873],[-48.49902355669978,-27.834220385416636],[-48.4365732865485,-27.83417568697334],[-48.43661119646565,-27.62582686571355],[-48.374059833202004,-27.625849257700484],[-48.374047196562984,-27.50086437943969],[-48.3115716531336,-27.50086437943969],[-48.311533743216444,-27.24913190347051],[-48.43657328654852,-27.24913190347051],[-48.4365353766314,-27.209164408055255],[-48.374021923284864,-27.20919812297907],[-48.37404719656297,-27.16579857825554],[-48.43656064990947,-27.16579857825554],[-48.43656064990947,-27.12414792965919],[-48.49906146661692,-27.124125435915495],[-48.49907031973662,-27.086668577138795],[-48.500216139509774,-27.08666004891293],[-48.5003124938822,-27.082470514310543],[-48.561600193241524,-27.082481765368538],[-48.56158755660248,-27.04252214011793],[-48.49906146661693,-27.04252214011793],[-48.49906146661693,-26.999125473627824],[-48.56156228332439,-26.999125473627824],[-48.56157491996343,-26.915786222397905],[-48.62488448156965,-26.916236931410996]]],"terms_url":"http://sigsc.sds.sc.gov.br/download/termo_sigsc.pdf","terms_text":"Sistema de Informações Geográficas - Governo de Santa Catarina"},{"id":"SIGIP-2012","name":"SIGIP - Orthophoto 2012","type":"tms","template":"http://osmdata.asitvd.ch/tiles/sigip2012/{zoom}/{x}/{y}.png","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","scaleExtent":[14,20],"polygon":[[[6.7105672,46.5439641],[6.729684,46.5440781],[6.7299491,46.52605],[6.7108488,46.5259588],[6.7111304,46.507959],[6.6921958,46.5078792],[6.6922952,46.4988257],[6.6353092,46.4984722],[6.6348785,46.5254687],[6.6538131,46.5255827],[6.6536143,46.5435767],[6.6916326,46.5438388],[6.6915498,46.5528392],[6.7104678,46.5529304],[6.7105672,46.5439641]]],"terms_url":"https://www.sigip.ch/","terms_text":"SIGIP"},{"id":"Slovakia-Historic-Maps","name":"Slovakia Historic Maps","type":"tms","template":"http://tms.freemap.sk/historicke/{zoom}/{x}/{y}.png","scaleExtent":[0,12],"polygon":[[[16.8196949,47.4927236],[16.8196949,49.5030322],[22.8388318,49.5030322],[22.8388318,47.4927236],[16.8196949,47.4927236]]],"icon":"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{"id":"Soskut_Pusztazamor_Tarnok_Diosd_orto_2017","name":"Sóskút, Pusztazámor, Tárnok, Diósd ortophoto 2017","type":"tms","template":"http://adam.openstreetmap.hu/mapproxy/tiles/1.0.0/Soskut-Tarnok-Pusztazamor-Diosd/mercator/{zoom}/{x}/{y}.png","endDate":"2017-03-01T00:00:00.000Z","startDate":"2017-03-01T00:00:00.000Z","scaleExtent":[11,20],"polygon":[[[18.79273330201,47.37078533804],[18.791936169,47.37048036201],[18.79139114593,47.37063268281],[18.7901097,47.3717614],[18.7891647,47.3734529],[18.78721506824,47.37566027041],[18.7860339,47.37764910001],[18.7849824,47.3790513],[18.783695,47.3803226],[18.782665,47.3819499],[18.781399,47.3836789],[18.7793426,47.3871257],[18.776657,47.3893959],[18.764716,47.396699],[18.7616966,47.3996569],[18.7563102,47.4032821],[18.7583737,47.4065272],[18.75879657883,47.40776342073],[18.76199554897,47.41217224817],[18.7630394973,47.41315137445],[18.7659298,47.4147108],[18.7704058,47.4176575],[18.77247285488,47.41808545272],[18.7724806,47.4202978],[18.8086021,47.4404108],[18.8174212,47.435389],[18.8209188,47.4357228],[18.8280427,47.4375516],[18.8302099,47.4352584],[18.8358533,47.4375371],[18.8404882,47.4334586],[18.847655,47.4357228],[18.8510024,47.4328054],[18.8689996,47.4396086],[18.87361350924,47.43597176329],[18.87499181607,47.43342149293],[18.87386045593,47.43248349864],[18.8760377,47.4279677],[18.8605023,47.4230028],[18.8662101,47.4179794],[18.8724328,47.4108645],[18.8662959,47.4077278],[18.8696433,47.4047072],[18.86776892261,47.40207457802],[18.86509430105,47.40052438512],[18.87081279074,47.3983820654],[18.86772375423,47.39699336542],[18.86992005424,47.39655168559],[18.87648610191,47.39477958954],[18.87748924808,47.39494663392],[18.87866942005,47.39462343887],[18.88358322696,47.3899604942],[18.88290731029,47.3896699544],[18.88538567142,47.38530440107],[18.87747851924,47.38339390377],[18.88181296901,47.37604910406],[18.87914148883,47.37392756692],[18.88638345317,47.36922645965],[18.88205973224,47.36772957402],[18.87973157482,47.36640704749],[18.8746997507,47.36252284243],[18.87282220439,47.36136733615],[18.87027947025,47.36062605465],[18.86687842922,47.3585329683],[18.86234013156,47.35637438604],[18.85566679554,47.35199153827],[18.84873596744,47.34728120653],[18.83192388134,47.3384118486],[18.82497159557,47.34257772442],[18.81619540767,47.34925116493],[18.8107880743,47.35356882392],[18.80823461132,47.35599644336],[18.80645362453,47.35854023611],[18.80707589702,47.359019909],[18.80634633617,47.36021180457],[18.80465118007,47.36175250772],[18.80381433086,47.36335130305],[18.80054616504,47.36544732015],[18.79988097721,47.36617355102],[18.79416204336,47.36974865444],[18.79273330201,47.37078533804]],[[18.91871480064,47.4093812629],[18.91826418952,47.40997664498],[18.9206674488,47.41155945729],[18.92509845809,47.41372304121],[18.93473295288,47.41916790937],[18.94063381271,47.42241278301],[18.94981769638,47.41937843296],[18.95154503898,47.41749820965],[18.95689872818,47.41922598493],[18.95770339088,47.41877589767],[18.95755318717,47.41435467478],[18.9621129425,47.40506817222],[18.96266011314,47.40117592194],[18.96316436843,47.39903360927],[18.95446328239,47.3967314338],[18.95275739746,47.39526437993],[18.95201710777,47.39362297422],[18.95119098739,47.39356487042],[18.94692091064,47.39798783856],[18.94410995559,47.3984526281],[18.94161013679,47.39868502134],[18.93735078887,47.39633199249],[18.93617061691,47.39682584676],[18.93122462348,47.39999947627],[18.93120316581,47.40023186269],[18.92923978881,47.40204734624],[18.92561344223,47.40604845111],[18.92465857582,47.40635342305],[18.92293123321,47.40925782918],[18.91871480064,47.4093812629]]],"terms_url":"http://fototerkep.hu","terms_text":"Fototerkep.hu","best":true,"description":"5 cm resolution bald image of 4 settlement"},{"id":"South_Africa-CD_NGI-Aerial","name":"South Africa CD:NGI Aerial","type":"tms","template":"http://{switch:a,b,c}.aerial.openstreetmap.org.za/ngi-aerial/{zoom}/{x}/{y}.jpg","scaleExtent":[1,22],"polygon":[[[17.8396817,-32.7983384],[17.8893509,-32.6972835],[18.00364,-32.6982187],[18.0991679,-32.7485251],[18.2898747,-32.5526645],[18.2930182,-32.0487089],[18.105455,-31.6454966],[17.8529257,-31.3443951],[17.5480046,-30.902171],[17.4044506,-30.6374731],[17.2493704,-30.3991663],[16.9936977,-29.6543552],[16.7987996,-29.19437],[16.5494139,-28.8415949],[16.4498691,-28.691876],[16.4491046,-28.5515766],[16.6002551,-28.4825663],[16.7514057,-28.4486958],[16.7462192,-28.2458973],[16.8855148,-28.04729],[16.9929502,-28.0244005],[17.0529659,-28.0257086],[17.1007562,-28.0338839],[17.2011527,-28.0930546],[17.2026346,-28.2328424],[17.2474611,-28.2338215],[17.2507953,-28.198892],[17.3511919,-28.1975861],[17.3515624,-28.2442655],[17.4015754,-28.2452446],[17.4149122,-28.3489751],[17.4008345,-28.547997],[17.4526999,-28.5489733],[17.4512071,-28.6495106],[17.4983599,-28.6872054],[17.6028204,-28.6830048],[17.6499732,-28.6967928],[17.6525928,-28.7381457],[17.801386,-28.7381457],[17.9994276,-28.7560602],[18.0002748,-28.7956172],[18.1574507,-28.8718055],[18.5063811,-28.8718055],[18.6153564,-28.8295875],[18.9087513,-28.8277516],[19.1046973,-28.9488548],[19.1969071,-28.9378513],[19.243012,-28.8516164],[19.2314858,-28.802963],[19.2587296,-28.7009928],[19.4431493,-28.6973163],[19.5500289,-28.4958332],[19.6967264,-28.4939914],[19.698822,-28.4479358],[19.8507587,-28.4433291],[19.8497109,-28.4027818],[19.9953605,-28.399095],[19.9893671,-24.7497859],[20.2916682,-24.9192346],[20.4724562,-25.1501701],[20.6532441,-25.4529449],[20.733265,-25.6801957],[20.8281046,-25.8963498],[20.8429232,-26.215851],[20.6502804,-26.4840868],[20.6532441,-26.8204869],[21.0889134,-26.846933],[21.6727695,-26.8389998],[21.7765003,-26.6696268],[21.9721069,-26.6431395],[22.2803355,-26.3274702],[22.5707817,-26.1333967],[22.7752795,-25.6775246],[23.0005235,-25.2761948],[23.4658301,-25.2735148],[23.883717,-25.597366],[24.2364017,-25.613402],[24.603905,-25.7896563],[25.110704,-25.7389432],[25.5078447,-25.6855376],[25.6441766,-25.4823781],[25.8419267,-24.7805437],[25.846641,-24.7538456],[26.3928487,-24.6332894],[26.4739066,-24.5653312],[26.5089966,-24.4842437],[26.5861946,-24.4075775],[26.7300635,-24.3014458],[26.8567384,-24.2499463],[26.8574402,-24.1026901],[26.9215471,-23.8990957],[26.931831,-23.8461891],[26.9714827,-23.6994344],[27.0006074,-23.6367644],[27.0578041,-23.6052574],[27.1360547,-23.5203437],[27.3339623,-23.3973792],[27.5144057,-23.3593929],[27.5958145,-23.2085465],[27.8098634,-23.0994957],[27.8828506,-23.0620496],[27.9382928,-22.9496487],[28.0407556,-22.8255118],[28.2056786,-22.6552861],[28.3397223,-22.5639374],[28.4906093,-22.560697],[28.6108769,-22.5400248],[28.828175,-22.4550173],[28.9285324,-22.4232328],[28.9594116,-22.3090081],[29.0162574,-22.208335],[29.2324117,-22.1693453],[29.3531213,-22.1842926],[29.6548952,-22.1186426],[29.7777102,-22.1361956],[29.9292989,-22.1849425],[30.1166795,-22.2830348],[30.2563377,-22.2914767],[30.3033582,-22.3395204],[30.5061784,-22.3057617],[30.8374279,-22.284983],[31.0058599,-22.3077095],[31.1834152,-22.3232913],[31.2930586,-22.3674647],[31.5680579,-23.1903385],[31.5568311,-23.4430809],[31.6931122,-23.6175209],[31.7119696,-23.741136],[31.7774743,-23.8800628],[31.8886337,-23.9481098],[31.9144386,-24.1746736],[31.9948307,-24.3040878],[32.0166656,-24.4405988],[32.0077331,-24.6536578],[32.019643,-24.9140701],[32.035523,-25.0849767],[32.019643,-25.3821442],[31.9928457,-25.4493771],[31.9997931,-25.5165725],[32.0057481,-25.6078978],[32.0057481,-25.6624806],[31.9362735,-25.8403721],[31.9809357,-25.9546537],[31.8687838,-26.0037251],[31.4162062,-25.7277683],[31.3229117,-25.7438611],[31.2504595,-25.8296526],[31.1393001,-25.9162746],[31.1164727,-25.9912361],[30.9656135,-26.2665756],[30.8921689,-26.3279703],[30.8534616,-26.4035568],[30.8226943,-26.4488849],[30.8022583,-26.5240694],[30.8038369,-26.8082089],[30.9020939,-26.7807451],[30.9100338,-26.8489495],[30.9824859,-26.9082627],[30.976531,-27.0029222],[31.0034434,-27.0441587],[31.1543322,-27.1980416],[31.5015607,-27.311117],[31.9700183,-27.311117],[31.9700183,-27.120472],[31.9769658,-27.050664],[32.0002464,-26.7983892],[32.1069826,-26.7984645],[32.3114546,-26.8479493],[32.899986,-26.8516059],[32.886091,-26.9816971],[32.709427,-27.4785436],[32.6240724,-27.7775144],[32.5813951,-28.07479],[32.5387178,-28.2288046],[32.4275584,-28.5021568],[32.3640388,-28.5945699],[32.0702603,-28.8469827],[31.9878832,-28.9069497],[31.7764818,-28.969487],[31.4638459,-29.2859343],[31.359634,-29.3854348],[31.1680825,-29.6307408],[31.064863,-29.7893535],[31.0534493,-29.8470469],[31.0669933,-29.8640319],[31.0455459,-29.9502017],[30.9518556,-30.0033946],[30.8651833,-30.1024093],[30.7244725,-30.392502],[30.3556256,-30.9308873],[30.0972364,-31.2458274],[29.8673136,-31.4304296],[29.7409393,-31.5014699],[29.481312,-31.6978686],[28.8943171,-32.2898903],[28.5497137,-32.5894641],[28.1436499,-32.8320732],[28.0748735,-32.941689],[27.8450942,-33.082869],[27.3757956,-33.3860685],[26.8805407,-33.6458951],[26.5916871,-33.7480756],[26.4527308,-33.7935795],[26.206754,-33.7548943],[26.0077897,-33.7223961],[25.8055494,-33.7524272],[25.7511073,-33.8006512],[25.6529079,-33.8543597],[25.6529079,-33.9469768],[25.7195789,-34.0040115],[25.7202807,-34.0511235],[25.5508915,-34.063151],[25.3504571,-34.0502627],[25.2810609,-34.0020322],[25.0476316,-33.9994588],[24.954724,-34.0043594],[24.9496586,-34.1010363],[24.8770358,-34.1506456],[24.8762914,-34.2005281],[24.8532574,-34.2189562],[24.7645287,-34.2017946],[24.5001356,-34.2003254],[24.3486733,-34.1163824],[24.1988819,-34.1019039],[23.9963377,-34.0514443],[23.8017509,-34.0524332],[23.7493589,-34.0111855],[23.4973536,-34.009014],[23.4155191,-34.0434586],[23.4154284,-34.1140433],[22.9000853,-34.0993009],[22.8412418,-34.0547911],[22.6470321,-34.0502627],[22.6459843,-34.0072768],[22.570016,-34.0064081],[22.5050499,-34.0645866],[22.2519968,-34.0645866],[22.2221334,-34.1014701],[22.1621197,-34.1057019],[22.1712431,-34.1521766],[22.1576913,-34.2180897],[22.0015632,-34.2172232],[21.9496952,-34.3220009],[21.8611528,-34.4007145],[21.5614708,-34.4020114],[21.5468011,-34.3661242],[21.501744,-34.3669892],[21.5006961,-34.4020114],[21.4194886,-34.4465247],[21.1978706,-34.4478208],[21.0988193,-34.3991325],[21.0033746,-34.3753872],[20.893192,-34.3997115],[20.8976647,-34.4854003],[20.7446802,-34.4828092],[20.5042011,-34.486264],[20.2527197,-34.701477],[20.0803502,-34.8361855],[19.9923317,-34.8379056],[19.899074,-34.8275845],[19.8938348,-34.7936018],[19.5972963,-34.7961833],[19.3929677,-34.642015],[19.2877095,-34.6404784],[19.2861377,-34.5986563],[19.3474363,-34.5244458],[19.3285256,-34.4534372],[19.098001,-34.449981],[19.0725583,-34.3802371],[19.0023531,-34.3525593],[18.9520568,-34.3949373],[18.7975006,-34.3936403],[18.7984174,-34.1016376],[18.501748,-34.1015292],[18.4999545,-34.3616945],[18.4477325,-34.3620007],[18.4479944,-34.3522691],[18.3974362,-34.3514041],[18.3971742,-34.3022959],[18.3565705,-34.3005647],[18.3479258,-34.2020436],[18.2972095,-34.1950274],[18.2951139,-33.9937138],[18.3374474,-33.9914079],[18.3476638,-33.8492427],[18.3479258,-33.781555],[18.4124718,-33.7448849],[18.3615477,-33.6501624],[18.2992013,-33.585591],[18.2166839,-33.448872],[18.1389858,-33.3974083],[17.9473472,-33.1602647],[17.8855247,-33.0575732],[17.8485884,-32.9668505],[17.8396817,-32.8507302],[17.8396817,-32.7983384]]],"best":true},{"id":"South-Tyrol-Orthofoto2011","name":"South Tyrol Orthofoto 2011","type":"tms","template":"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2011_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","scaleExtent":[0,18],"polygon":[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],"terms_url":"https://geoservices.buergernetz.bz.it/geokatalog","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0"},{"id":"South-Tyrol-Orthofoto2011-20cm","name":"South Tyrol Orthofoto 2011 (highres)","type":"wms","template":"https://geoservices.buergernetz.bz.it/geoserver/ows?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=P_BZ_OF_2011_EPSG3857,P_BZ_OF_2011_20cm_EPSG3857&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","polygon":[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],"terms_url":"https://geoservices.buergernetz.bz.it/geokatalog","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0","description":"Orthophoto of South Tyrol from 2011 with up to 20cm resolution (larger valleys)"},{"id":"South-Tyrol-Orthofoto-2014-2015","name":"South Tyrol Orthofoto 2014/2015","type":"tms","template":"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2014_2015_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg","endDate":"2015-11-01T00:00:00.000Z","startDate":"2014-07-01T00:00:00.000Z","scaleExtent":[0,18],"polygon":[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],"terms_url":"https://geoservices.buergernetz.bz.it/geokatalog","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 4.0","best":true},{"id":"South-Tyrol-Topomap","name":"South Tyrol Topomap","type":"tms","template":"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_BASEMAP_TOPO&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg","scaleExtent":[0,20],"polygon":[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],"terms_url":"https://geoservices.buergernetz.bz.it/geokatalog","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano","description":"Topographical basemap of South Tyrol"},{"id":"SPW_ORTHO_LAST","name":"SPW(allonie) most recent aerial imagery","type":"wms","template":"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_LAST/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[5.782568,49.8757267],[5.7391911,49.8336163],[5.7551556,49.7914562],[5.7883892,49.7966518],[5.9106426,49.662495],[5.8485737,49.597233],[5.871023,49.575993],[5.8185749,49.546381],[5.6607946,49.5536224],[5.6110847,49.5060265],[5.5560285,49.5292773],[5.4705116,49.4973681],[5.4570817,49.5670264],[5.3752213,49.623328],[5.3148607,49.6113701],[5.3324268,49.652632],[5.2685113,49.6965705],[5.1662837,49.6930304],[4.9975274,49.8000556],[4.8516407,49.7934458],[4.8475425,49.8680607],[4.8901307,49.9089349],[4.7911711,49.9580026],[4.877619,50.1537353],[4.8241825,50.1693225],[4.702074,50.095559],[4.69441,49.99625],[4.4455089,49.9372154],[4.3058943,49.968291],[4.1974552,49.9545998],[4.1351961,50.0150789],[4.2282482,50.0784208],[4.1968236,50.1351948],[4.1271392,50.1354991],[4.2052006,50.2734708],[4.162616,50.288955],[4.1353769,50.2578391],[4.0279494,50.3584006],[3.8857376,50.3270105],[3.8457828,50.3532303],[3.7454573,50.3500535],[3.709936,50.3031647],[3.6575582,50.3707552],[3.6555197,50.4616979],[3.6058552,50.4963203],[3.4993012,50.4892129],[3.5199234,50.523617],[3.4743888,50.5336789],[3.3769762,50.4910892],[3.286341,50.527929],[3.2610378,50.701309],[3.2060223,50.7113874],[3.1783878,50.7560872],[3.3056195,50.7546601],[3.3607746,50.7096189],[3.4543934,50.7707186],[3.6404725,50.7224166],[3.6775202,50.7706219],[3.7585743,50.7804497],[3.775681,50.7478928],[3.8797992,50.7514597],[3.9097026,50.6924497],[4.0586751,50.6943943],[4.1485268,50.7283384],[4.2466962,50.6893987],[4.4635478,50.7551115],[4.5239937,50.727241],[4.5972705,50.7635892],[4.6344534,50.7427181],[4.6430927,50.7975547],[4.760139,50.805435],[4.9254489,50.7427456],[5.0033909,50.7659375],[5.0703857,50.7064861],[5.1650784,50.6956986],[5.1698412,50.7225686],[5.309122,50.718017],[5.3502927,50.7462892],[5.478628,50.7235185],[5.6878623,50.811926],[5.6822533,50.7565056],[5.7707041,50.7513196],[5.8196276,50.7139556],[5.8833347,50.7099174],[5.8921739,50.7551846],[5.9656121,50.7610724],[6.0404534,50.7454613],[6.0395852,50.7183326],[6.1106615,50.7229851],[6.181693,50.6238292],[6.2695342,50.625191],[6.1781215,50.5415344],[6.2265784,50.4943237],[6.3503613,50.4885444],[6.3429763,50.3803321],[6.4054213,50.3233149],[6.3064697,50.3201903],[6.278891,50.2673359],[6.1737675,50.2316471],[6.1923212,50.1820338],[6.1469988,50.1777493],[6.1377905,50.1298537],[6.1024494,50.17055],[5.9636784,50.172634],[5.9613323,50.131363],[5.8953156,50.1121618],[5.819685,50.013287],[5.835779,49.97892],[5.7750225,49.9608],[5.7357693,49.89684],[5.782568,49.8757267]]],"best":true,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAACX0lEQVQ4y32TS09TURSFv3Pu7e2Dl7wqISCiAUNIlBjUhIkzhvqnTJw4cuZPcGSiDERRQkTEhIgSwISqaNNQW8pT6H2f7aAKLYmu4c7Od9beZ20lIvc5KyMgAkqBVvxLxWLxuxIRqS9KEBLmNol+FHBGh7EH+urABuP66HQStGZlZWVen6VGm3kO7j2k+vgZcalyCvZ9gvUc/rslzHH1pN4AkCjG7B+CViRGh0mMDEFsiLd38F4vcPjgEdGXPNR5tuvtxVslvMUP4AXEhZ+I5xMWilSfvsB/u4Rua0XCgHh7B92UaXQgro87NYP7ZBqJY6y+HsR1qU7N4E7PIcaQuD6Kle0i/JxDgqARYKou7qt5CAJUOgXG4C8uE2+V0C3NqEwas72L7u7AynaB1o0jKK3Qba2Y8g7RZh5TrqCz66fDhhHheo54q0T6ziTO1ZFGB6q5iczdSVRTGjl2kTDCHBwRb5UQz8fs7mF294m+5XGfzyJVt86BCOIHODeukfp6G292Ad3Zjk4liQtF7CuXwAjh+gbYNqZcQaLoFODNLWJ+HWEOj7CynSjA7O1DOg2OQ2JoEN3Zjqm6qKQDYYiyrFOAfbEflMIcH6MzaXRrC3G5QrD0CX2uDd3bQ/B+GeUkIIpr+Ug6dYALvbXcGwEFVk+WuLyD1XseqyeLPdiPti3MUZXg4xrJiXFUKlW3gz9fglU7HJVKYlwP3ZTBGR1GOQ7OzbFaS3cHicsDKNs6k8S/edg/xH35hnBtA+fW2J+rBKuzvfbWxDgqkTjpVyKydxYivo94Abqthf9pdXV18TfYtyESB1ygiAAAAABJRU5ErkJggg=="},{"id":"SPW_PICC","name":"SPW(allonie) PICC numerical imagery","type":"wms","template":"https://geoservices.wallonie.be/arcgis/services/TOPOGRAPHIE/PICC_VDIFF/MapServer/WmsServer?SERVICE=WMS&VERSION=1.1.1&FORMAT=image/png8&TRANSPARENT=TRUE&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&LAYERS=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29","projection":"EPSG:3857","polygon":[[[5.782568,49.8757267],[5.7391911,49.8336163],[5.7551556,49.7914562],[5.7883892,49.7966518],[5.9106426,49.662495],[5.8485737,49.597233],[5.871023,49.575993],[5.8185749,49.546381],[5.6607946,49.5536224],[5.6110847,49.5060265],[5.5560285,49.5292773],[5.4705116,49.4973681],[5.4570817,49.5670264],[5.3752213,49.623328],[5.3148607,49.6113701],[5.3324268,49.652632],[5.2685113,49.6965705],[5.1662837,49.6930304],[4.9975274,49.8000556],[4.8516407,49.7934458],[4.8475425,49.8680607],[4.8901307,49.9089349],[4.7911711,49.9580026],[4.877619,50.1537353],[4.8241825,50.1693225],[4.702074,50.095559],[4.69441,49.99625],[4.4455089,49.9372154],[4.3058943,49.968291],[4.1974552,49.9545998],[4.1351961,50.0150789],[4.2282482,50.0784208],[4.1968236,50.1351948],[4.1271392,50.1354991],[4.2052006,50.2734708],[4.162616,50.288955],[4.1353769,50.2578391],[4.0279494,50.3584006],[3.8857376,50.3270105],[3.8457828,50.3532303],[3.7454573,50.3500535],[3.709936,50.3031647],[3.6575582,50.3707552],[3.6555197,50.4616979],[3.6058552,50.4963203],[3.4993012,50.4892129],[3.5199234,50.523617],[3.4743888,50.5336789],[3.3769762,50.4910892],[3.286341,50.527929],[3.2610378,50.701309],[3.2060223,50.7113874],[3.1783878,50.7560872],[3.3056195,50.7546601],[3.3607746,50.7096189],[3.4543934,50.7707186],[3.6404725,50.7224166],[3.6775202,50.7706219],[3.7585743,50.7804497],[3.775681,50.7478928],[3.8797992,50.7514597],[3.9097026,50.6924497],[4.0586751,50.6943943],[4.1485268,50.7283384],[4.2466962,50.6893987],[4.4635478,50.7551115],[4.5239937,50.727241],[4.5972705,50.7635892],[4.6344534,50.7427181],[4.6430927,50.7975547],[4.760139,50.805435],[4.9254489,50.7427456],[5.0033909,50.7659375],[5.0703857,50.7064861],[5.1650784,50.6956986],[5.1698412,50.7225686],[5.309122,50.718017],[5.3502927,50.7462892],[5.478628,50.7235185],[5.6878623,50.811926],[5.6822533,50.7565056],[5.7707041,50.7513196],[5.8196276,50.7139556],[5.8833347,50.7099174],[5.8921739,50.7551846],[5.9656121,50.7610724],[6.0404534,50.7454613],[6.0395852,50.7183326],[6.1106615,50.7229851],[6.181693,50.6238292],[6.2695342,50.625191],[6.1781215,50.5415344],[6.2265784,50.4943237],[6.3503613,50.4885444],[6.3429763,50.3803321],[6.4054213,50.3233149],[6.3064697,50.3201903],[6.278891,50.2673359],[6.1737675,50.2316471],[6.1923212,50.1820338],[6.1469988,50.1777493],[6.1377905,50.1298537],[6.1024494,50.17055],[5.9636784,50.172634],[5.9613323,50.131363],[5.8953156,50.1121618],[5.819685,50.013287],[5.835779,49.97892],[5.7750225,49.9608],[5.7357693,49.89684],[5.782568,49.8757267]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAACX0lEQVQ4y32TS09TURSFv3Pu7e2Dl7wqISCiAUNIlBjUhIkzhvqnTJw4cuZPcGSiDERRQkTEhIgSwISqaNNQW8pT6H2f7aAKLYmu4c7Od9beZ20lIvc5KyMgAkqBVvxLxWLxuxIRqS9KEBLmNol+FHBGh7EH+urABuP66HQStGZlZWVen6VGm3kO7j2k+vgZcalyCvZ9gvUc/rslzHH1pN4AkCjG7B+CViRGh0mMDEFsiLd38F4vcPjgEdGXPNR5tuvtxVslvMUP4AXEhZ+I5xMWilSfvsB/u4Rua0XCgHh7B92UaXQgro87NYP7ZBqJY6y+HsR1qU7N4E7PIcaQuD6Kle0i/JxDgqARYKou7qt5CAJUOgXG4C8uE2+V0C3NqEwas72L7u7AynaB1o0jKK3Qba2Y8g7RZh5TrqCz66fDhhHheo54q0T6ziTO1ZFGB6q5iczdSVRTGjl2kTDCHBwRb5UQz8fs7mF294m+5XGfzyJVt86BCOIHODeukfp6G292Ad3Zjk4liQtF7CuXwAjh+gbYNqZcQaLoFODNLWJ+HWEOj7CynSjA7O1DOg2OQ2JoEN3Zjqm6qKQDYYiyrFOAfbEflMIcH6MzaXRrC3G5QrD0CX2uDd3bQ/B+GeUkIIpr+Ug6dYALvbXcGwEFVk+WuLyD1XseqyeLPdiPti3MUZXg4xrJiXFUKlW3gz9fglU7HJVKYlwP3ZTBGR1GOQ7OzbFaS3cHicsDKNs6k8S/edg/xH35hnBtA+fW2J+rBKuzvfbWxDgqkTjpVyKydxYivo94Abqthf9pdXV18TfYtyESB1ygiAAAAABJRU5ErkJggg=="},{"id":"Bern-bern2016-tms","name":"Stadt Bern 10cm (2016)","type":"tms","template":"https://mapproxy.osm.ch/tiles/bern2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","scaleExtent":[8,21],"polygon":[[[7.2943145,46.9237564],[7.2982665,46.9274715],[7.3061586,46.9309487],[7.3043338,46.9362344],[7.3068603,46.9403709],[7.3246431,46.9432765],[7.3284525,46.946409],[7.3414051,46.9460797],[7.3438454,46.9473713],[7.3434554,46.9487937],[7.3513567,46.9485481],[7.3505628,46.950213],[7.3530901,46.9519266],[7.3582028,46.9511773],[7.3685031,46.9566244],[7.3715097,46.9607339],[7.37503,46.959835],[7.3785111,46.9614686],[7.3806232,46.9654741],[7.3832097,46.9663014],[7.3937998,46.9669268],[7.4000528,46.9691779],[7.4082922,46.9686857],[7.4281713,46.9738041],[7.4327053,46.972689],[7.4353602,46.9684345],[7.4378522,46.9684302],[7.4412474,46.9767865],[7.4456893,46.9747939],[7.4483835,46.9756393],[7.4477006,46.9790125],[7.4440468,46.9780682],[7.4412738,46.9798224],[7.4506732,46.9901527],[7.4522112,46.9896803],[7.454649,46.9778182],[7.4680382,46.9758258],[7.4707923,46.969998],[7.4701907,46.9674116],[7.4781618,46.9711823],[7.4845237,46.9701571],[7.4861275,46.9679018],[7.4857945,46.9646828],[7.4784708,46.9629043],[7.4802865,46.9606768],[7.4789304,46.9587841],[7.4797786,46.9566019],[7.4770135,46.9544586],[7.4840504,46.9499938],[7.4833925,46.9451977],[7.4955563,46.9396169],[7.4935119,46.9376594],[7.4908036,46.9387617],[7.4894997,46.9368667],[7.4766667,46.9369496],[7.4781093,46.9362489],[7.4746986,46.9339187],[7.4753537,46.9329898],[7.4691047,46.9292427],[7.4707683,46.9255044],[7.4585674,46.934836],[7.4476373,46.9304297],[7.435418,46.9349668],[7.4338022,46.9331237],[7.4376403,46.9307415],[7.4146941,46.9368183],[7.413844,46.9315682],[7.4070798,46.9303824],[7.408065,46.9256296],[7.4021268,46.9241992],[7.4014835,46.9211927],[7.3875736,46.9304506],[7.3823129,46.927282],[7.3800187,46.9298929],[7.3808694,46.9324085],[7.3748669,46.9314306],[7.3748901,46.9327104],[7.368066,46.9323929],[7.3683058,46.930426],[7.3604074,46.9285884],[7.3605592,46.9272018],[7.338783,46.9245357],[7.3393683,46.9196675],[7.3274574,46.9190326],[7.3269178,46.9235974],[7.324374,46.9251891],[7.3082264,46.9222857],[7.2943145,46.9237564]]],"terms_text":"Orthophoto 2016, Vermessungsamt Stadt Bern","best":true},{"id":"Bern-2012","name":"Stadt Bern 10cm/25cm (2012)","type":"tms","template":"https://mapproxy.osm.ch/tiles/bern2012/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","scaleExtent":[14,19],"polygon":[[[7.3807026,47.0095236],[7.3807316,47.0230089],[7.4385298,47.0230287],[7.438646,47.0140785],[7.4517449,47.0139993],[7.4517159,47.0050278],[7.5411091,47.0050049],[7.5411091,46.9987259],[7.5437812,46.9987061],[7.5437522,46.9869583],[7.5568221,46.9869979],[7.5568511,46.9600256],[7.517438,46.9600058],[7.517438,46.9510847],[7.530508,46.9510649],[7.530508,46.9240745],[7.517409,46.9240547],[7.5173799,46.9150482],[7.5304208,46.9150681],[7.5304789,46.9060998],[7.5435779,46.9060204],[7.5435779,46.879047],[7.5565897,46.8790272],[7.5566188,46.8610969],[7.5434908,46.8610373],[7.5434036,46.8521196],[7.4909496,46.8521196],[7.4910658,46.8790669],[7.4779378,46.8790867],[7.4779668,46.8970705],[7.4516817,46.89713],[7.4517107,46.8880794],[7.4385537,46.8881389],[7.4385827,46.8701521],[7.4123267,46.8701521],[7.4123557,46.8790669],[7.3991696,46.8791066],[7.3991986,46.8610771],[7.3861287,46.8611366],[7.3860996,46.8521792],[7.3730007,46.8521594],[7.3730297,46.8611168],[7.3467736,46.8610969],[7.3468027,46.8880794],[7.2548774,46.8879603],[7.2548484,46.9059609],[7.2417204,46.9059212],[7.2416913,46.9149689],[7.2285633,46.9149292],[7.2283309,46.968866],[7.241459,46.9689056],[7.241488,46.986879],[7.267686,46.9869385],[7.2677731,46.9959328],[7.280785,46.9959526],[7.2809011,47.0094017],[7.3807026,47.0095236]]],"terms_text":"Orthophoto 2012, Vermessungsamt Stadt Bern"},{"id":"Uster-2008","name":"Stadt Uster Orthophoto 2008 10cm","type":"tms","template":"https://mapproxy.osm.ch/tiles/uster/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2008-01-01T00:00:00.000Z","startDate":"2008-01-01T00:00:00.000Z","polygon":[[[8.6,47.31],[8.6,47.39],[8.77,47.39],[8.77,47.31],[8.6,47.31]]],"terms_text":"Stadt Uster Vermessung Orthophoto 2008"},{"id":"Zuerich-zh_luftbild2011-tms","name":"Stadt Zürich Luftbild 2011","type":"tms","template":"https://mapproxy.osm.ch/tiles/zh_luftbild2011/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","polygon":[[[8.4441,47.3141],[8.4441,47.4411],[8.6284,47.4411],[8.6284,47.3141],[8.4441,47.3141]]],"terms_text":"Stadt Zürich Luftbild 2011"},{"id":"Zuerich-city_map","name":"Stadtplan Zürich","type":"tms","template":"https://mapproxy.osm.ch/tiles/zh_stadtplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","polygon":[[[8.5668111,47.3471283],[8.5666467,47.3470589],[8.5656321,47.3468387],[8.5657508,47.3466611],[8.5650859,47.3464458],[8.5420654,47.335018],[8.5407269,47.33376],[8.5403004,47.3339594],[8.5401928,47.3337202],[8.5404179,47.3335811],[8.5387962,47.3320825],[8.5364195,47.3307603],[8.5362197,47.330181],[8.5334539,47.3299212],[8.531799,47.3295046],[8.5314456,47.3284586],[8.5310233,47.3278882],[8.5297377,47.3277665],[8.5296889,47.3268657],[8.5289898,47.3269813],[8.5281278,47.3268508],[8.5280161,47.326347],[8.5275512,47.326391],[8.5276207,47.3261573],[8.5257896,47.3261908],[8.5256309,47.3257466],[8.5242553,47.3260813],[8.5241954,47.3248577],[8.5237181,47.3241621],[8.5230402,47.324334],[8.5219346,47.324356],[8.5219412,47.3239408],[8.5193166,47.3240091],[8.5186809,47.3238608],[8.5176785,47.3232],[8.5164185,47.3230802],[8.5156026,47.323154],[8.5147161,47.3227179],[8.5129492,47.3228951],[8.5116154,47.3222153],[8.509571,47.3220243],[8.5095034,47.3216488],[8.507877,47.3220315],[8.5073479,47.3217255],[8.5052926,47.3214351],[8.5047572,47.3212089],[8.5042993,47.3207416],[8.5031718,47.3202203],[8.5024105,47.3205283],[8.5022699,47.3208152],[8.5015158,47.3212901],[8.501024,47.3219795],[8.5009469,47.3225865],[8.5006025,47.3227848],[8.5007766,47.3237009],[8.5006647,47.3245121],[8.5009845,47.3259513],[8.5014986,47.3265046],[8.5015885,47.3273247],[8.5018842,47.3276454],[8.5013155,47.3288302],[8.5014041,47.3290265],[8.5006933,47.3297924],[8.5008734,47.3305262],[8.5006341,47.331099],[8.5011206,47.331827],[8.5007541,47.3320224],[8.5007833,47.3322389],[8.501057,47.3325984],[8.5019093,47.3330317],[8.5022042,47.3336379],[8.5017738,47.3341153],[8.5015204,47.3350444],[8.5019867,47.3366635],[8.5016086,47.3372789],[8.4987707,47.3396841],[8.4980764,47.3416944],[8.4970198,47.3424735],[8.4970857,47.3432619],[8.4979848,47.3436505],[8.4980964,47.3438702],[8.4981724,47.344534],[8.4977274,47.3452067],[8.4963629,47.3464829],[8.4951043,47.3469117],[8.4946719,47.3476034],[8.4928519,47.3482813],[8.4920593,47.3495035],[8.4914526,47.3496428],[8.4912761,47.3498347],[8.4908881,47.3506717],[8.4899998,47.350561],[8.4881311,47.3520013],[8.4869145,47.3520286],[8.4867952,47.3521995],[8.487275,47.3531092],[8.4871041,47.3534045],[8.4850065,47.354685],[8.4846252,47.3553616],[8.4846332,47.3567046],[8.4842574,47.3573654],[8.4832095,47.3581364],[8.4827226,47.359069],[8.482051,47.3595414],[8.4787857,47.3607802],[8.4769778,47.3602866],[8.4736491,47.3608106],[8.4727546,47.3607904],[8.4716901,47.3613176],[8.4705346,47.3616581],[8.4695072,47.3643825],[8.4663995,47.3657414],[8.4658262,47.3660986],[8.4654459,47.3666433],[8.4648499,47.3668079],[8.4642685,47.3672756],[8.4641765,47.3683804],[8.4649008,47.3689692],[8.4648229,47.3691129],[8.4693766,47.3713625],[8.4704197,47.3726],[8.4702245,47.3739521],[8.4686834,47.3738244],[8.4676081,47.3735734],[8.4654386,47.3744359],[8.4628786,47.3760325],[8.4599477,47.3775009],[8.4563798,47.3780073],[8.4511626,47.3781669],[8.450468,47.3783562],[8.4484713,47.3796659],[8.4480061,47.3802489],[8.4517428,47.3806206],[8.4537073,47.3802686],[8.4561412,47.380724],[8.4566891,47.3809395],[8.4567289,47.3824423],[8.4574491,47.382223],[8.45843,47.3823124],[8.4584128,47.382629],[8.4574537,47.3832487],[8.4576694,47.3834003],[8.4575551,47.383711],[8.4580689,47.3838786],[8.4600363,47.3859448],[8.4608754,47.3870442],[8.4612122,47.3879517],[8.4610423,47.3880298],[8.4638065,47.3905272],[8.4651812,47.3913239],[8.4655595,47.391131],[8.4661769,47.3911292],[8.4672656,47.390651],[8.4669717,47.3913069],[8.4673863,47.3929013],[8.4671019,47.3933421],[8.4660703,47.3937826],[8.4651015,47.3945286],[8.4648352,47.3948101],[8.4648837,47.3950816],[8.4653518,47.3949215],[8.4685392,47.3946073],[8.4701785,47.3940058],[8.470658,47.3943936],[8.4719132,47.393883],[8.472083,47.3940755],[8.4715234,47.3943033],[8.4715138,47.3949048],[8.4721035,47.3951669],[8.4730103,47.395064],[8.4734874,47.395996],[8.4651584,47.3982885],[8.4656768,47.3992174],[8.4675918,47.3987253],[8.4680605,47.3995665],[8.4661462,47.4000583],[8.4677017,47.4030001],[8.469902,47.4029831],[8.4755054,47.4038106],[8.4781488,47.4038749],[8.4781852,47.4050811],[8.477377,47.4051652],[8.4770538,47.4061941],[8.4772873,47.4091391],[8.4770261,47.409346],[8.4754317,47.4097053],[8.4758308,47.4107688],[8.4760457,47.4107168],[8.4762788,47.4110248],[8.476647,47.4109692],[8.4772491,47.4119382],[8.4748799,47.4124136],[8.4739359,47.4122221],[8.4730251,47.4114574],[8.4726814,47.4105829],[8.4710092,47.410936],[8.4711262,47.4113682],[8.4708503,47.411673],[8.4704419,47.4115928],[8.4703081,47.4125332],[8.468756,47.4122482],[8.4680053,47.4133401],[8.4686294,47.4136261],[8.4685663,47.41408],[8.4695518,47.4148391],[8.4700718,47.4155748],[8.4691344,47.4164893],[8.4691307,47.4169272],[8.4696238,47.4175244],[8.4715827,47.4176266],[8.4772018,47.4197449],[8.476879,47.4201593],[8.4778286,47.4221154],[8.4789517,47.421719],[8.4793669,47.4211341],[8.4797181,47.4214068],[8.4813104,47.4213424],[8.4817052,47.4230025],[8.482943,47.4226558],[8.4829177,47.4222244],[8.4860915,47.4215542],[8.4865761,47.4216425],[8.4868251,47.4218645],[8.4879635,47.422007],[8.4885143,47.4227084],[8.4901866,47.422336],[8.4910036,47.4238991],[8.4900591,47.4243496],[8.4900673,47.4253189],[8.4902716,47.4253614],[8.4901707,47.4257799],[8.4855191,47.4271201],[8.4848149,47.4278437],[8.484661,47.4287321],[8.484374,47.4289619],[8.4844472,47.4297912],[8.4857915,47.4310272],[8.4956173,47.4328128],[8.5002701,47.4344188],[8.5020653,47.4346662],[8.5036443,47.4340188],[8.5099683,47.4321273],[8.511553,47.4311636],[8.5127365,47.4308478],[8.5160014,47.4317438],[8.5162812,47.4317546],[8.5168051,47.4313321],[8.5187218,47.4318959],[8.5197943,47.4316717],[8.5246261,47.4312581],[8.5254902,47.4331566],[8.530298,47.4320655],[8.5306331,47.4326579],[8.5329988,47.4322774],[8.5337386,47.4325107],[8.5346736,47.4320017],[8.5352098,47.4318797],[8.5360609,47.4318653],[8.5373954,47.4314002],[8.5396428,47.4312601],[8.5401002,47.4310967],[8.5403303,47.4318604],[8.5436264,47.4314336],[8.5428445,47.4328905],[8.5431082,47.4328844],[8.544514,47.4325009],[8.5445856,47.4326166],[8.5460691,47.4320661],[8.5485802,47.4314175],[8.5500937,47.4312832],[8.5509806,47.4310231],[8.5519893,47.4310397],[8.5553504,47.4306622],[8.5560951,47.4280349],[8.5568396,47.4262384],[8.55783,47.4255398],[8.5569735,47.4249035],[8.5573584,47.4247214],[8.5568974,47.4242429],[8.5572272,47.4240966],[8.5541907,47.4208018],[8.5608195,47.4181748],[8.561289,47.4182869],[8.5623451,47.4163214],[8.5628176,47.4164324],[8.563234,47.4156476],[8.5662171,47.4163247],[8.5669231,47.4162865],[8.5673498,47.4164917],[8.5677986,47.4168445],[8.5687459,47.4185542],[8.569026,47.4187096],[8.5696006,47.4186847],[8.5694428,47.419261],[8.5722349,47.418926],[8.5736749,47.4200362],[8.5737831,47.4177981],[8.5734215,47.4171079],[8.5738627,47.4143784],[8.5738407,47.413238],[8.5733137,47.412573],[8.5726014,47.4120663],[8.5730014,47.4114383],[8.588059,47.4079651],[8.5889421,47.4075631],[8.5931154,47.407037],[8.5972792,47.4063087],[8.5972211,47.4059985],[8.5960793,47.4061173],[8.5937779,47.4022219],[8.5962176,47.401545],[8.5947962,47.3991811],[8.5972473,47.3985052],[8.5964397,47.3971511],[8.59637,47.3966323],[8.5962288,47.396464],[8.5945296,47.3971222],[8.593922,47.3964721],[8.5933487,47.3961397],[8.5920771,47.3969078],[8.5917242,47.3968079],[8.5914817,47.3970043],[8.5882815,47.3957975],[8.5890452,47.3950147],[8.5899492,47.3947762],[8.5881766,47.3935057],[8.5875246,47.3932129],[8.587475,47.3929744],[8.5861851,47.3928018],[8.5844165,47.3919525],[8.5836927,47.3900815],[8.5830501,47.3890474],[8.5831589,47.3883067],[8.5843702,47.3883357],[8.5843205,47.3889438],[8.5849231,47.3901089],[8.5852817,47.3903966],[8.5869601,47.3901709],[8.5869046,47.3897666],[8.5876488,47.3890534],[8.5869806,47.3879297],[8.5918104,47.3863782],[8.593073,47.3856494],[8.592992,47.3852339],[8.5935437,47.3852243],[8.5927356,47.3841724],[8.5908184,47.3847588],[8.5901259,47.3838085],[8.5896628,47.3840002],[8.5895613,47.3837317],[8.5921739,47.3831089],[8.5915089,47.3824415],[8.5938377,47.3808057],[8.5940703,47.3806061],[8.594061,47.3802938],[8.5955564,47.3796016],[8.5957448,47.3792746],[8.5972137,47.3784921],[8.5967415,47.3778177],[8.5970154,47.3771596],[8.597603,47.3766059],[8.5970488,47.3758905],[8.5977803,47.3755719],[8.5982825,47.3751014],[8.5985539,47.3747325],[8.5981292,47.3744671],[8.6001968,47.3733058],[8.6005273,47.3733996],[8.6009592,47.3731167],[8.6019393,47.3719822],[8.6019219,47.3717081],[8.603242,47.3713075],[8.6060745,47.3687057],[8.6074459,47.3681634],[8.6081229,47.3676128],[8.6106703,47.3673011],[8.6120019,47.3668439],[8.6130802,47.3677649],[8.6134447,47.3677929],[8.6136622,47.3680183],[8.6154945,47.3676953],[8.6164504,47.3684073],[8.6166519,47.3682801],[8.6176364,47.3668139],[8.6170927,47.366262],[8.6168236,47.3653459],[8.6156472,47.3646551],[8.6149501,47.3645812],[8.6155747,47.3634184],[8.6156558,47.3627274],[8.6148226,47.3626311],[8.6147042,47.3615093],[8.6192928,47.3612135],[8.6199562,47.3610355],[8.621739,47.3600705],[8.6225674,47.3598279],[8.621867,47.359461],[8.6213253,47.3574642],[8.6235083,47.3559235],[8.6235234,47.3556101],[8.6254413,47.3546647],[8.6241604,47.3539731],[8.6224493,47.353642],[8.6220945,47.3533419],[8.6198851,47.3536666],[8.6197589,47.3538473],[8.6184445,47.3538175],[8.6183902,47.3542504],[8.6170817,47.3541374],[8.615692,47.3544171],[8.6151975,47.3540998],[8.6138646,47.354021],[8.6125506,47.3543659],[8.6115607,47.3539441],[8.6110679,47.3535189],[8.61042,47.3533705],[8.6094622,47.3535153],[8.6077634,47.3533282],[8.6060686,47.3536266],[8.6050568,47.3535889],[8.6038033,47.3530049],[8.6030474,47.3521873],[8.6032016,47.352067],[8.6029426,47.351746],[8.6029967,47.3507596],[8.6026189,47.3507265],[8.6015997,47.3507282],[8.6010406,47.3510465],[8.6002591,47.3511159],[8.5996004,47.3514537],[8.598587,47.3514482],[8.5982352,47.3516535],[8.5968895,47.3514023],[8.5966563,47.3516127],[8.5959601,47.3516878],[8.5956408,47.3518987],[8.5949397,47.3516079],[8.5945418,47.3517493],[8.593904,47.3516089],[8.5935014,47.3521137],[8.5922913,47.3522969],[8.5918944,47.352783],[8.5911785,47.3532073],[8.5904654,47.3527123],[8.5901367,47.3528627],[8.588465,47.3528852],[8.5879686,47.3530689],[8.5874757,47.3526742],[8.5862951,47.352882],[8.5859056,47.3523073],[8.5852978,47.3520138],[8.5846216,47.3514145],[8.5841673,47.3512938],[8.5843773,47.3511598],[8.5839844,47.3508453],[8.5834761,47.3510422],[8.5833497,47.3508713],[8.5822061,47.3510081],[8.5824578,47.3506167],[8.5785111,47.3487299],[8.5782687,47.348882],[8.5778611,47.3486537],[8.5768553,47.3487802],[8.5768835,47.3485916],[8.5762504,47.3483856],[8.5730847,47.3475144],[8.5729991,47.3476488],[8.5721406,47.3474411],[8.5716326,47.3472757],[8.5716985,47.3471159],[8.5702906,47.3467217],[8.569681,47.3475973],[8.5674102,47.346736],[8.5668111,47.3471283]]],"terms_text":"Stadt Zürich Open Government Data"},{"id":"stamen-terrain-background","name":"Stamen Terrain","type":"tms","template":"https://stamen-tiles-{switch:a,b,c,d}.a.ssl.fastly.net/terrain-background/{zoom}/{x}/{y}.jpg","scaleExtent":[4,18],"terms_url":"http://maps.stamen.com/#terrain","terms_text":"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL"},{"id":"Surrey-Air_Survey","name":"Surrey Air Survey","type":"tms","template":"https://{switch:a,b,c}.surrey.aerial.openstreetmap.org.uk/layer/gb_surrey_aerial/{zoom}/{x}/{y}.png","endDate":"2009-01-01T00:00:00.000Z","startDate":"2007-01-01T00:00:00.000Z","scaleExtent":[8,21],"polygon":[[[-0.752478,51.0821941],[-0.7595183,51.0856254],[-0.8014342,51.1457917],[-0.8398864,51.1440686],[-0.8357665,51.1802397],[-0.8529549,51.2011266],[-0.8522683,51.2096231],[-0.8495217,51.217903],[-0.8266907,51.2403696],[-0.8120995,51.2469248],[-0.7736474,51.2459577],[-0.7544213,51.2381127],[-0.754078,51.233921],[-0.7446366,51.2333836],[-0.7430693,51.2847178],[-0.751503,51.3069524],[-0.7664376,51.3121032],[-0.7820588,51.3270157],[-0.7815438,51.3388135],[-0.7374268,51.3720456],[-0.7192307,51.3769748],[-0.6795769,51.3847961],[-0.6807786,51.3901523],[-0.6531411,51.3917591],[-0.6301385,51.3905808],[-0.6291085,51.3970074],[-0.6234437,51.3977572],[-0.613144,51.4295552],[-0.6002471,51.4459121],[-0.5867081,51.4445365],[-0.5762368,51.453202],[-0.5626755,51.4523462],[-0.547741,51.4469972],[-0.5372697,51.4448575],[-0.537098,51.4526671],[-0.5439644,51.4545926],[-0.5405312,51.4698865],[-0.5309182,51.4760881],[-0.5091172,51.4744843],[-0.5086022,51.4695657],[-0.4900628,51.4682825],[-0.4526406,51.4606894],[-0.4486924,51.4429316],[-0.4414826,51.4418616],[-0.4418259,51.4369394],[-0.4112702,51.4380095],[-0.4014855,51.4279498],[-0.3807145,51.4262372],[-0.3805428,51.4161749],[-0.3491288,51.4138195],[-0.3274994,51.4037544],[-0.3039818,51.3990424],[-0.3019219,51.3754747],[-0.309475,51.369688],[-0.3111916,51.3529669],[-0.2955704,51.3541462],[-0.2923089,51.3673303],[-0.2850991,51.3680805],[-0.2787476,51.3771891],[-0.2655297,51.3837247],[-0.2411538,51.3847961],[-0.2123147,51.3628288],[-0.2107697,51.3498578],[-0.190857,51.3502867],[-0.1542931,51.3338802],[-0.1496583,51.3057719],[-0.1074296,51.2966491],[-0.0887185,51.3099571],[-0.0878602,51.3220811],[-0.0652009,51.3215448],[-0.0641709,51.3264793],[-0.0519829,51.3263721],[-0.0528412,51.334631],[-0.0330779,51.3430876],[0.0019187,51.3376339],[0.0118751,51.3281956],[0.013935,51.2994398],[0.0202865,51.2994398],[0.0240631,51.3072743],[0.0331611,51.3086694],[0.0455207,51.30545],[0.0523872,51.2877392],[0.0616569,51.2577764],[0.0640602,51.2415518],[0.0462074,51.2126342],[0.0407142,51.2109136],[0.0448341,51.1989753],[0.0494689,51.1997283],[0.0558204,51.1944573],[0.0611419,51.1790713],[0.0623435,51.1542061],[0.0577087,51.1417146],[0.0204582,51.1365447],[-0.0446015,51.1336364],[-0.1566964,51.1352522],[-0.1572114,51.1290043],[-0.2287942,51.1183379],[-0.2473336,51.1183379],[-0.2500802,51.1211394],[-0.299347,51.1137042],[-0.3221779,51.1119799],[-0.3223496,51.1058367],[-0.3596001,51.1019563],[-0.3589135,51.1113333],[-0.3863793,51.1117644],[-0.3869014,51.1062516],[-0.4281001,51.0947174],[-0.4856784,51.0951554],[-0.487135,51.0872266],[-0.5297404,51.0865404],[-0.5302259,51.0789914],[-0.61046,51.076551],[-0.6099745,51.080669],[-0.6577994,51.0792202],[-0.6582849,51.0743394],[-0.6836539,51.0707547],[-0.6997979,51.070831],[-0.7296581,51.0744919],[-0.752478,51.0821941]]]},{"id":"Szeged_2011","name":"Szeged orthophoto 2011","type":"tms","template":"http://e.tile.openstreetmap.hu/szeged-2011-10cm/{zoom}/{x}/{y}.png","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","scaleExtent":[10,22],"polygon":[[[20.1459914,46.2281144],[20.1332261,46.2290431],[20.1258373,46.2298686],[20.122329,46.2309893],[20.1208484,46.2317537],[20.1189709,46.2335126],[20.1131237,46.2413638],[20.1120293,46.2433005],[20.1115733,46.2449996],[20.1111871,46.247092],[20.1112944,46.2487725],[20.1115948,46.2509686],[20.1122171,46.2528047],[20.1129949,46.2542681],[20.1135421,46.2553549],[20.1147705,46.2567977],[20.1352251,46.2768529],[20.1366386,46.2775055],[20.1378939,46.2780301],[20.1393932,46.2783508],[20.1408818,46.2784583],[20.1611494,46.278159],[20.1621093,46.2781579],[20.1635894,46.277702],[20.1661777,46.2761484],[20.1687795,46.2738569],[20.1696108,46.2714413],[20.1695895,46.2704465],[20.1700871,46.2704418],[20.1739897,46.2643295],[20.1766182,46.2582878],[20.1947983,46.25492],[20.1858719,46.2448077],[20.1846595,46.2453122],[20.1780371,46.2383112],[20.1781766,46.2377101],[20.1795258,46.2370961],[20.1725666,46.2300241],[20.1698349,46.2350404],[20.1687701,46.2362946],[20.1670262,46.2378475],[20.1659431,46.2387342],[20.1654408,46.2389988],[20.1654837,46.2389988],[20.1635177,46.2401383],[20.1602051,46.2412003],[20.1592684,46.241531],[20.1592684,46.2415751],[20.1583504,46.2418505],[20.1549473,46.2422869],[20.1510796,46.2351538],[20.1493804,46.232459],[20.1459914,46.2281144]]],"terms_url":"http://www.geo.u-szeged.hu","terms_text":"SZTE TFGT - University of Szeged","best":true,"description":"Inner part of Szeged"},{"id":"teotonio_vilela","name":"Teotonio Vilela AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Teotonio%20Vilela&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.31163860301,-9.95467712399],[-36.31157895645,-9.94381824983],[-36.31144972224,-9.93197001342],[-36.31127078257,-9.92436145686],[-36.31123101819,-9.91847621012],[-36.31119125382,-9.91637081332],[-36.31140995787,-9.91323717443],[-36.31110178398,-9.90922215583],[-36.3110819018,-9.90317994983],[-36.31099243196,-9.8937883586],[-36.31089302103,-9.88420062824],[-36.31078366901,-9.87412292696],[-36.31068425808,-9.86457379995],[-36.33179913972,-9.86431915278],[-36.34001048258,-9.8643681234],[-36.34780429953,-9.86425059389],[-36.35916696889,-9.86420162324],[-36.37046999169,-9.86404491714],[-36.38447699181,-9.86385882853],[-36.40163531841,-9.86364335739],[-36.40221190181,-9.92250090776],[-36.40249025242,-9.9317741712],[-36.40258966335,-9.94183051783],[-36.40248031132,-9.94803846834],[-36.402659251,-9.95369797972],[-36.38550092439,-9.95384485155],[-36.38282677036,-9.95392318316],[-36.37095710525,-9.95399172331],[-36.36231829539,-9.95422671799],[-36.34746630237,-9.95421692655],[-36.33287277777,-9.9544617125],[-36.32909516241,-9.95455962683],[-36.32089376064,-9.95458900112],[-36.31163860301,-9.95467712399]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"tnris.org","name":"Texas Orthophoto","type":"tms","template":"https://txgi.tnris.org/login/path/ecology-fiona-poem-romeo/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=texas&STYLE=&FORMAT=image/png&tileMatrixSet=0to20&tileMatrix=0to20:{zoom}&tileRow={y}&tileCol={x}","startDate":"2012-01-01T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[-99.9985439,34.5601834],[-95.55654502453,33.99257450647],[-93.89679027134,33.61039304449],[-93.98468089634,32.04103124103],[-93.41613841587,31.02505269211],[-93.74531484297,29.57268254375],[-96.50492070332,28.23158511753],[-97.36942054453,26.95467452634],[-97.04866958924,25.80530249434],[-99.0734177889,26.32559221139],[-100.76599193149,29.02531904433],[-102.3315436893,29.8433892263],[-103.13354564242,28.88112103669],[-104.2887874222,29.28831477845],[-104.7269783935,29.94815782859],[-104.72696778796,30.23535241761],[-106.53450082091,31.78456647831],[-106.75767043939,31.78457253947],[-106.75766067978,32.04385536686],[-106.61848436611,32.04385159755],[-103.11949492759,32.04375683439],[-103.09544343487,36.50045758762],[-103.05798056071,36.54268645422],[-100.00042146824,36.54222227302],[-99.9985439,34.5601834]]],"terms_url":"https://tnris.org/maps-and-data/online-mapping-services","terms_text":"Texas Natural Resources Information System"},{"id":"tf-landscape","name":"Thunderforest Landscape","type":"tms","template":"https://{switch:a,b,c}.tile.thunderforest.com/landscape/{zoom}/{x}/{y}.png","scaleExtent":[0,22],"terms_url":"https://www.thunderforest.com/terms","terms_text":"Maps © Thunderforest, Data © OpenStreetMap contributors"},{"id":"US-TIGER-Roads-2017","name":"TIGER Roads 2017","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmapus/cj8dftc3q1ecn2tnx9qhwyj0c/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcHVzIiwiYSI6ImNpcnF4Ym43dDBoOXZmYW04bWhlNWdrY2EifQ.4SFexuTUuKkZeerO3dgtmw","endDate":"2017-01-01T00:00:00.000Z","startDate":"2017-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[-124.7617886,48.4130148],[-124.6059492,45.90245],[-124.9934269,40.0557614],[-122.5369737,36.8566086],[-119.9775867,33.0064099],[-117.675935,32.4630223],[-114.8612307,32.4799891],[-111.0089311,31.336015],[-108.1992687,31.3260016],[-108.1871123,31.7755116],[-106.5307225,31.7820947],[-106.4842052,31.7464455],[-106.429317,31.7520583],[-106.2868855,31.5613291],[-106.205248,31.446704],[-105.0205259,30.5360988],[-104.5881916,29.6997856],[-103.2518856,28.8908685],[-102.7173632,29.3920567],[-102.1513983,29.7475702],[-101.2552871,29.4810523],[-100.0062436,28.0082173],[-99.2351068,26.4475962],[-98.0109067,25.9928035],[-97.435024,25.8266009],[-96.9555259,25.9821589],[-96.8061741,27.7978168],[-95.5563349,28.5876066],[-93.7405308,29.4742093],[-90.9028456,28.8564513],[-88.0156706,28.9944338],[-88.0162494,30.0038862],[-86.0277506,30.0047454],[-84.0187909,28.9961781],[-81.9971976,25.9826768],[-81.9966618,25.0134917],[-84.0165592,25.0125783],[-84.0160068,24.0052745],[-80.0199985,24.007096],[-79.8901116,26.8550713],[-80.0245309,32.0161282],[-75.4147385,35.0531894],[-74.0211163,39.5727927],[-72.002019,40.9912464],[-69.8797398,40.9920457],[-69.8489304,43.2619916],[-66.9452845,44.7104937],[-67.7596632,47.0990024],[-69.2505131,47.5122328],[-70.4614886,46.2176574],[-71.412273,45.254878],[-72.0222508,45.0059846],[-75.0798841,44.9802854],[-76.9023061,43.8024568],[-78.7623935,43.6249578],[-79.15798,43.4462589],[-79.0060087,42.8005317],[-82.662475,41.6889458],[-82.1761642,43.588535],[-83.2813977,46.138853],[-87.5064535,48.0142702],[-88.3492194,48.2963271],[-89.4353148,47.9837822],[-93.9981078,49.0067142],[-95.1105379,49.412004],[-96.0131199,49.0060547],[-123.3228926,49.0042878],[-123.2275233,48.1849927],[-124.7617886,48.4130148]],[[-160.5787616,22.5062947],[-160.5782192,21.4984647],[-158.7470604,21.2439843],[-157.5083185,20.995803],[-155.9961942,18.7790194],[-154.6217803,18.7586966],[-154.6890176,19.8805722],[-156.2927622,21.2225888],[-157.5047384,21.9984962],[-159.0093692,22.5070181],[-160.5787616,22.5062947]],[[-167.1572,68.722],[-164.8554,67.0255],[-168.0022,66.0018],[-169.0087,66.0015],[-169.0075,64.9988],[-172.5143,63.8767],[-173.8197,59.7401],[-178.0001,52.2446],[-177.9993,51.2554],[-171.4689,51.8215],[-162.4025,53.9567],[-159.0076,55.0025],[-158.0191,55.0028],[-151.9963,55.9992],[-151.5003,57.9988],[-151.5013,58.992],[-138.516,58.9953],[-138.515,57.9986],[-133.9948,54.0032],[-130.0044,54.0043],[-130.0071,57.0001],[-131.9759,56.9995],[-135.123,59.7566],[-138.0072,59.9918],[-139.1716,60.4127],[-140.9874,61.0119],[-140.9684,69.9535],[-156.1769,71.5633],[-160.4136,70.7398],[-163.0218,69.9707],[-164.9717,68.9947],[-167.1572,68.722]],[[-68.2,17.8],[-64.32,17.38],[-64.64,18.36],[-65.33,18.57],[-67.9,18.67],[-68.2,17.8]],[[146.2,15.4],[145.7,15.6],[144.2,13.2],[144.8,12.9],[146.2,15.4]],[[179.99,52.2],[172,53.5],[172,52.5],[179.99,51],[179.99,52.2]]],"description":"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAABLCAMAAAAf8MQEAAAAAXNSR0IArs4c6QAAAt9QTFRF////q6ytVFplAAAB0owMmWYJRS4EZWx3o6OjYmNl7JoE/agGdE0GBgUA9aQOzIkMKhwCFA0BJBQBNBUAdHV15OXpUlVYGhECkWEJ5ZkOsXYKbkoH/64Qu30LgVYImpqbSTEEa0gG8qIOVTkFEgwBHhQCqnEKMSEE/80So20Kck0HCQYB/7IOMzM0uru+Q0tYRCQA/8ER/9oT/+EUlGMJflUI3ZQN/7kQ/60PaUYGZUMG/7EQ/8oSJhkCil0IOiYDMB8CfH1+yYYM4pcOiFsI2ZIN1Y4N/8URIRYCi4uLa3B5NSQD/74RzooM7qAO/7YQ6+vsiloD+6gP/aoP6p0OrnQLnWkKm2kJWz0FUjYFMSED/9QTjV4JdHZ69ff77J4ODAkBX0AGAAEL+fr7S1BVBQIAtXkLhVkIPikExIMMTjUEFhYXysrLxcXF+qcPwYEM1pENHSIqPSkDLR4Dck0I/qoQRzAEe1MH/+gVWzQAg4SFJCQlelIIDgkBYUEGQiwESElLLSADSi0B/9ESDAIArrS9v4ALTDIEDAwMxsvVklsAHRMBjmAJP0JHAAETdEUAhVcISVRlxoUMd1AI/7sOz9HW1IoChFkHomwK/+UUYj4D96UQZjYAGiQ4OURXg4eMk5mm/6wJwH8M3uHmp3AK/90UNDtJLhQAFxABGQ0Bg1gIglUEJjNJl14FsnMBlmUJ0YcA2drbi5WmFQIAi1MAa2trbHaHW1tck5KS8fL0fEoAOxwAJCw7/7YFUiwAgU0AJQwA6ZcCJy9BDRcrsLCx/8oU2t3j7/H2ChEfu73DAAAA1NXXAAAGWmJtEx42qWoAVDkEzIQAa0YEo2QAAw4lfIGNhY2bdnyIm2QCp6y2eoWXLTA5w34AjZKbRE1hdn+RrHEFxoAAu8DGY26BAQocnZ+kvHkB5JQB/8QOhIqVORcATCYA24wA+6YK8JsCJQYAn6Wu0YsMnai8hY+hU2B4tSvHUAAACMpJREFUWMO1mP9TFPcZx2nfd9do7xutySG3dznuzuOOQ8PCwd65C2eFY69h6ya7CMuXBDRzcNDksOJhUwkYz5IYLFaKDco41qqNEztmnMwk1aaNbZN0MtpYG5O06ZdfajWTpJl2pn9An4WxxS9HhZl+fgBm9/P6fJ7P87yf5/ksBQX/j/E50DAY9Z/4wuLQe+8jxlFYVOwE44LZvRK4fxE0UAJ4jb5VAVtpMIRwuQNYfdf4AxVsFRtBdU00hmJeqEVdHOvwlbvFMTciBpRI+Bo20EEgVzcAd0U/9HAgpMhqzcZwK6CF29pLw52wqc0mPPLoXdD6zqu0Lo5d3yKDQRws6oH1XZuAzY/dheWmysyACSFRllaVJlsAPlMOxB1xxPA/PLDmG/BstUr127IZUzIqbkHNkAN1omzXTdqeRiG+tQC9A0/CJBfpcwetoVR9R6Kp0/dUWuiKAz79aWv+/XfO+jsZ634asK30AKSWGIaJ4HZhDo/kENv9UJ5TN40lakK9ydFamvgMsToPsAPgurdRDPQlWlBU+Owd+T3PiUILbWGvNgHjsPSjv2+EoLJKcP4e3RB91O4FvnMHej84toxeGyabBmwDGN+O70HzFfP0yMbCC4SAUYDWmdp9u34O4PtsDI5Jrvr5Mne1PIyw3eEaD/T1kT1sJQ4msRFwYogM6ANuM39iX/AQDgXZ5JxgOZu/xj+JtK21jk7ct7EqiRkfRsIRwNMP5+Fb6B8cFYubpawv1uCtslVSlsHLS05vO1iWLDY3lg/C20+OYIF2IHOL+ccg8TKbjZaJuaJqOHs6arR6JSqFGFg3TQNlW8rjsJrQDwm9FoycmIv+ih3ACh3/0QucxCckZkCKztoeEiSecEkoMWKMnG7LJuAdRRoyRANkfdKNzNRNxxTsibWIqYzqCoTpYXuQEeowkPG3wwRXW5VpAwKmMFxuFAWRQjc7TdufrmRnrdj8XE4TONYFWZ4k9iXydkDowTQnMZ0mlPKdnMeKuMmPlSrSHTRjYwA49phZrMQZ3Qq2R5YVhn1KDFJ4kNAVMoi1ckYN1rGFEbfEdgv2dE0EouQARy9FoOKBFXAU60X02NEOcw3NVQV6czCTHG94CbBwIqdGpZFOuFGbA59ubx4eFYm14ZEClEntN05e8MoJN+rlDLmKzErANxwv1fOjbEyWZlAMirVs92IwGlo/QMapqVcL8MWDNGHvLH52ohOeRjnDFgPFlXDSU8/W0XEqM8nK7RYh7Ca8uhnJDm+jx5jE6Ln9FKkAUvaD53T8CaDzRE8Hh0ZPMAq+3oxefqMJRoajpG335ygBrblxnAxuiCD94m7fdjxesAbdghdJHV/2c8jBcc0yXtUiaJCmqK4OdoqbMCC6KfMwSllirQFacj1j8KeQntRt3nnoYN/c2Ze9PtrB+4GwVeCc9TwH11DEmFMQiDbDjG46ETZQs1rZ0S7BCL/mmqXO/+JLc5p79s1YM47XFrfqxUhkfWVubHAIAd2xiZawNQuxT49kLob29iJKWnLRbMG+94nH9V+OSbcBdm0wRXNKmnPF6ouUGV3f1PGUrKsgJIdR18UgPBLTO0aVpr01L18KzU4NTc7C7tI2ItLTQoikYTXPxvU4EOwZPlkNC6uhpQso7EXQq/36psrOhtHkKBn0wYO3d+qaonlvXEDWAj/6EqK+zo7XUEa1IDXW6xAaNl38zXxcgik+UtpmxKqKX94DE2ewUkK/E49SW4NdFB06f2a2DDcLZs1VFrv0zs34KLzr0hFYfovVGFYZxoz7cBprSRHoEeM6eXbN/fcgIAvlI/EILuO/3WoZHTUONY3Y8+lEEGAURYnYZYx4U0X4Lorm6tcOPUbANjzdNIKjeGsezrqTiAyhtgpolBElfEuTEKqxj44QN2rpJdXPXg/owvK7cX2td6/Mv8XkfjgUqd1KSUJvZnFV1mSqkW6kZutmrpky8Kbe/948178/xaiiw4zCetP2QjtkJZORIj0Ry0mEbaU011pt6V7obnBJUrkQbgyOZaVgnZX+Mpav6ySbPP9J7TzdbYrhRa3Jjlg1ySzV0BKZJnUHOlnomyvU32Ilnrfz4h9gisVYTSkqu1BtmN2rl0qHik4KhLvDI5QrM9xC2/+exyRrRS8LbWiY6G7VYxwMIkR4WWWTOKOoDB7Mi/8BDZDkLXpLHtyme8EWccOZ8AVyJPtck0ixmLk0sdCVxs7yzRjWW2wf07+3z0ZZ7YGLcEZO8KQERXz5lfz4xGmJb4wX+Xyo9ett3I2v6yHrgka9S9VxaaHtJ96lLicaSTU9VYZG24k/oWD16r+8vAsBSZkb5c0LOO8ClgciHMcxYhqXL5/CH+cer97K6xpmIryiqsG/5udfO+8KScqMKrXiytWrf7ux6jVRt5zr4fSfFxdw3ubGEZuiKswUblGUDgbKyQge+aVTsCc446SdGEH74GZFkd9ln6GcVtl1eAFclHyMzPNad2rzvAVwSlLUzFopS0tfX8B5+1nOx/cG3M8EPzo0b9oeXCeTtGyUlJMfP4Bz/EqXjeMMgotjH56fzuD6tspRNRpVy/F+Pse9LnBBF8sFj7O8N7j8zHzv5VrAz6iGAT748Yd58Cv7xOo6p1RnGJaCYJ+c/+rwiTaQ+6ZbZSEv/m0IljdlH0JO/fr451uu+BGKmllWrl/M/w3xCfYJWuq0Gdd+9cYt6VQoU+wMvPJpfs8f+fyDmz/efceylGI4ync+OlPx48V/TuKnnKpEmSwF7tzEEvCfZenkdQlS3WdYNP0e5BlFifbLC8om7zg7UcHyKlPPqNHs3/GPRfOP4vQ/ZTWqMusZ4csfLv7wB64Osnrf8qjiUvCCf73AKiov+fjMYr/k53x/jVNVmTUW18SxFPwzWcnKnDIsn1oSvlzqoc+FrNzF7l4K/hF9PNazHNtbWbEU/Px1tLjlkYSx45Ol/R+lQpROYoDjtKXhn0qyBQPeNiwNPxeUUFupYYn4q37/ha8eOfKTs7e9+TeLgDxdoqv76wAAAABJRU5ErkJggg==","overlay":true},{"id":"tirol.gv.at-contourlines","name":"Tiris: contour lines","type":"wms","template":"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Hoehenschichtlinien 20m&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[15,22],"polygon":[[[10.4399766,47.5976781],[10.4788646,47.5992486],[10.5027725,47.5865589],[10.4837986,47.5597936],[10.513122,47.5434951],[10.5717689,47.5458237],[10.570044,47.5621216],[10.6010923,47.5807415],[10.6390403,47.5691048],[10.7080366,47.5702686],[10.7114864,47.5493166],[10.7684083,47.5504808],[10.7856574,47.5260267],[10.8960515,47.5504808],[10.9357244,47.5236971],[10.9339995,47.5050569],[10.8908768,47.4957344],[10.9512486,47.4910724],[10.9546984,47.4677567],[11.0029958,47.4327637],[10.9909215,47.4082547],[11.1030405,47.4047525],[11.1151148,47.4199271],[11.2099847,47.4455971],[11.2686316,47.4409308],[11.2669067,47.4105894],[11.2945052,47.4420974],[11.3307283,47.4607599],[11.3824755,47.4584275],[11.3704012,47.4759184],[11.4393975,47.5306855],[11.466996,47.5178728],[11.5739403,47.5236971],[11.5756652,47.5586296],[11.598089,47.5912123],[11.6343121,47.6063331],[11.6688102,47.5947021],[11.7930036,47.602844],[11.8395761,47.5923756],[11.8499255,47.6109847],[12.0068922,47.6365615],[12.0362156,47.6249373],[12.0776134,47.6272623],[12.1086617,47.6191242],[12.1949071,47.6226121],[12.1535093,47.6876775],[12.158684,47.7166984],[12.1811078,47.7120562],[12.2190558,47.7248214],[12.2414796,47.7538216],[12.272528,47.7515022],[12.2846023,47.7317829],[12.2656283,47.695805],[12.3363495,47.7108955],[12.3760224,47.695805],[12.4432938,47.7027704],[12.4536433,47.692322],[12.4536433,47.6749032],[12.5105652,47.6319121],[12.5312641,47.6458591],[12.589911,47.6342369],[12.5795615,47.6109847],[12.6658069,47.5947021],[12.6796062,47.5749235],[12.645108,47.5504808],[12.6675318,47.5318501],[12.6847809,47.5038917],[12.7123795,47.4817474],[12.6675318,47.4560949],[12.6416582,47.4595937],[12.6502828,47.443264],[12.6209593,47.4070873],[12.5743868,47.3860701],[12.5502381,47.3965797],[12.4915913,47.3720539],[12.5088403,47.3510227],[12.4881414,47.3206295],[12.4346693,47.322968],[12.4139704,47.3042567],[12.3639481,47.3089351],[12.3122008,47.3276449],[12.2708031,47.298408],[12.177658,47.2937286],[12.1483346,47.2843686],[12.1172863,47.2995778],[12.0983123,47.2750069],[12.1259108,47.2504245],[12.0965874,47.1977096],[12.1103866,47.1484618],[12.141435,47.109735],[12.1379852,47.0897738],[12.1500595,47.0756791],[12.0051672,47.0439523],[11.9206468,47.0298454],[11.8309516,46.9910324],[11.7878289,46.9863258],[11.7740296,46.9674955],[11.7309069,46.9651413],[11.7067582,46.9898558],[11.6429366,46.994562],[11.6118883,47.0051495],[11.5325425,46.9780884],[11.4928696,47.0086782],[11.4445722,46.9674955],[11.4048993,46.9616097],[11.3445276,46.9863258],[11.2030851,46.9569006],[11.1754866,46.9616097],[11.1772115,46.9439484],[11.1461632,46.922747],[11.1254643,46.922747],[11.1082152,46.9038944],[11.1151148,46.8885717],[11.0823416,46.853195],[11.0961408,46.8236966],[11.0512932,46.8024477],[11.0236947,46.762288],[10.9184753,46.7705586],[10.8839772,46.7575613],[10.8408545,46.7729214],[10.8236054,46.7693772],[10.7908322,46.7894581],[10.756334,46.778828],[10.7252857,46.7906391],[10.7477095,46.8272372],[10.6942373,46.8449371],[10.6735384,46.869707],[10.6079919,46.853195],[10.5545198,46.8272372],[10.5200216,46.8390378],[10.4682744,46.8366779],[10.4510253,46.8814982],[10.475174,46.9321709],[10.4130773,46.9557232],[10.3941034,46.9886791],[10.3665048,46.9804421],[10.3389063,46.9474811],[10.3285569,46.9180345],[10.2975085,46.9133215],[10.2595605,46.9251032],[10.2388617,46.8626311],[10.1664155,46.8390378],[10.1353672,46.8472966],[10.1319174,46.8720655],[10.1060438,46.886214],[10.0922445,46.9274592],[10.1250177,46.952191],[10.1457166,47.0004442],[10.1129434,47.0251423],[10.1526163,47.0498291],[10.1301925,47.0627556],[10.1336423,47.0909482],[10.1595159,47.126168],[10.2009137,47.1425959],[10.1922891,47.2000536],[10.2095382,47.2129438],[10.1871144,47.2398857],[10.2009137,47.2562785],[10.1681404,47.2633024],[10.1681404,47.2808581],[10.2026386,47.2913887],[10.2440364,47.2890488],[10.3337316,47.3206295],[10.3889286,47.3907413],[10.4148022,47.3942444],[10.4562,47.436264],[10.4475755,47.4817474],[10.419977,47.5050569],[10.4424008,47.5551374],[10.4130773,47.5714324],[10.4399766,47.5976781]],[[12.401896,47.1601916],[12.3570484,47.1390761],[12.3501488,47.1120829],[12.3104759,47.107387],[12.2552789,47.0721548],[12.2138811,47.0592305],[12.2000818,47.0263181],[12.1448848,47.0310212],[12.1155613,47.007502],[12.1362602,46.9592552],[12.1673086,46.9357044],[12.1431599,46.9109649],[12.1897324,46.9003588],[12.2173309,46.8661692],[12.2552789,46.8838562],[12.2742529,46.8826772],[12.2984016,46.8343179],[12.2759778,46.8201557],[12.2794276,46.7776467],[12.3501488,46.77174],[12.3811972,46.7150029],[12.4432938,46.6842454],[12.5140151,46.6700437],[12.5657623,46.6487342],[12.6295839,46.6534704],[12.70203,46.6534704],[12.7037549,46.6984434],[12.7296285,46.7008093],[12.7227289,46.7374685],[12.8020747,46.7492887],[12.8538219,46.744561],[12.9038442,46.77174],[12.9279929,46.7599247],[12.9573164,46.7764654],[12.9797402,46.7977246],[12.8952197,46.8331378],[12.8952197,46.8484763],[12.8451974,46.8638104],[12.8469223,46.9156781],[12.7968999,46.930993],[12.7882754,46.9474811],[12.7486025,46.9686726],[12.7365282,46.9969149],[12.7813758,47.0416014],[12.7624018,47.0510043],[12.7141044,47.0451277],[12.7106545,47.0780285],[12.6226842,47.126168],[12.5692121,47.1414227],[12.551963,47.1332091],[12.5260894,47.154327],[12.4829667,47.1648828],[12.4605429,47.1484618],[12.4346693,47.1578459],[12.4191451,47.1437691],[12.401896,47.1601916]]],"terms_url":"https://tiris.tirol.gv.at","terms_text":"tiris.tirol.gv.at","icon":"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif","overlay":true},{"id":"tirol.gv.at-DGM","name":"Tiris: DGM (Terrain model)","type":"wms","template":"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image Schummerung_Gelaendemodell&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[10.4399766,47.5976781],[10.4788646,47.5992486],[10.5027725,47.5865589],[10.4837986,47.5597936],[10.513122,47.5434951],[10.5717689,47.5458237],[10.570044,47.5621216],[10.6010923,47.5807415],[10.6390403,47.5691048],[10.7080366,47.5702686],[10.7114864,47.5493166],[10.7684083,47.5504808],[10.7856574,47.5260267],[10.8960515,47.5504808],[10.9357244,47.5236971],[10.9339995,47.5050569],[10.8908768,47.4957344],[10.9512486,47.4910724],[10.9546984,47.4677567],[11.0029958,47.4327637],[10.9909215,47.4082547],[11.1030405,47.4047525],[11.1151148,47.4199271],[11.2099847,47.4455971],[11.2686316,47.4409308],[11.2669067,47.4105894],[11.2945052,47.4420974],[11.3307283,47.4607599],[11.3824755,47.4584275],[11.3704012,47.4759184],[11.4393975,47.5306855],[11.466996,47.5178728],[11.5739403,47.5236971],[11.5756652,47.5586296],[11.598089,47.5912123],[11.6343121,47.6063331],[11.6688102,47.5947021],[11.7930036,47.602844],[11.8395761,47.5923756],[11.8499255,47.6109847],[12.0068922,47.6365615],[12.0362156,47.6249373],[12.0776134,47.6272623],[12.1086617,47.6191242],[12.1949071,47.6226121],[12.1535093,47.6876775],[12.158684,47.7166984],[12.1811078,47.7120562],[12.2190558,47.7248214],[12.2414796,47.7538216],[12.272528,47.7515022],[12.2846023,47.7317829],[12.2656283,47.695805],[12.3363495,47.7108955],[12.3760224,47.695805],[12.4432938,47.7027704],[12.4536433,47.692322],[12.4536433,47.6749032],[12.5105652,47.6319121],[12.5312641,47.6458591],[12.589911,47.6342369],[12.5795615,47.6109847],[12.6658069,47.5947021],[12.6796062,47.5749235],[12.645108,47.5504808],[12.6675318,47.5318501],[12.6847809,47.5038917],[12.7123795,47.4817474],[12.6675318,47.4560949],[12.6416582,47.4595937],[12.6502828,47.443264],[12.6209593,47.4070873],[12.5743868,47.3860701],[12.5502381,47.3965797],[12.4915913,47.3720539],[12.5088403,47.3510227],[12.4881414,47.3206295],[12.4346693,47.322968],[12.4139704,47.3042567],[12.3639481,47.3089351],[12.3122008,47.3276449],[12.2708031,47.298408],[12.177658,47.2937286],[12.1483346,47.2843686],[12.1172863,47.2995778],[12.0983123,47.2750069],[12.1259108,47.2504245],[12.0965874,47.1977096],[12.1103866,47.1484618],[12.141435,47.109735],[12.1379852,47.0897738],[12.1500595,47.0756791],[12.0051672,47.0439523],[11.9206468,47.0298454],[11.8309516,46.9910324],[11.7878289,46.9863258],[11.7740296,46.9674955],[11.7309069,46.9651413],[11.7067582,46.9898558],[11.6429366,46.994562],[11.6118883,47.0051495],[11.5325425,46.9780884],[11.4928696,47.0086782],[11.4445722,46.9674955],[11.4048993,46.9616097],[11.3445276,46.9863258],[11.2030851,46.9569006],[11.1754866,46.9616097],[11.1772115,46.9439484],[11.1461632,46.922747],[11.1254643,46.922747],[11.1082152,46.9038944],[11.1151148,46.8885717],[11.0823416,46.853195],[11.0961408,46.8236966],[11.0512932,46.8024477],[11.0236947,46.762288],[10.9184753,46.7705586],[10.8839772,46.7575613],[10.8408545,46.7729214],[10.8236054,46.7693772],[10.7908322,46.7894581],[10.756334,46.778828],[10.7252857,46.7906391],[10.7477095,46.8272372],[10.6942373,46.8449371],[10.6735384,46.869707],[10.6079919,46.853195],[10.5545198,46.8272372],[10.5200216,46.8390378],[10.4682744,46.8366779],[10.4510253,46.8814982],[10.475174,46.9321709],[10.4130773,46.9557232],[10.3941034,46.9886791],[10.3665048,46.9804421],[10.3389063,46.9474811],[10.3285569,46.9180345],[10.2975085,46.9133215],[10.2595605,46.9251032],[10.2388617,46.8626311],[10.1664155,46.8390378],[10.1353672,46.8472966],[10.1319174,46.8720655],[10.1060438,46.886214],[10.0922445,46.9274592],[10.1250177,46.952191],[10.1457166,47.0004442],[10.1129434,47.0251423],[10.1526163,47.0498291],[10.1301925,47.0627556],[10.1336423,47.0909482],[10.1595159,47.126168],[10.2009137,47.1425959],[10.1922891,47.2000536],[10.2095382,47.2129438],[10.1871144,47.2398857],[10.2009137,47.2562785],[10.1681404,47.2633024],[10.1681404,47.2808581],[10.2026386,47.2913887],[10.2440364,47.2890488],[10.3337316,47.3206295],[10.3889286,47.3907413],[10.4148022,47.3942444],[10.4562,47.436264],[10.4475755,47.4817474],[10.419977,47.5050569],[10.4424008,47.5551374],[10.4130773,47.5714324],[10.4399766,47.5976781]],[[12.401896,47.1601916],[12.3570484,47.1390761],[12.3501488,47.1120829],[12.3104759,47.107387],[12.2552789,47.0721548],[12.2138811,47.0592305],[12.2000818,47.0263181],[12.1448848,47.0310212],[12.1155613,47.007502],[12.1362602,46.9592552],[12.1673086,46.9357044],[12.1431599,46.9109649],[12.1897324,46.9003588],[12.2173309,46.8661692],[12.2552789,46.8838562],[12.2742529,46.8826772],[12.2984016,46.8343179],[12.2759778,46.8201557],[12.2794276,46.7776467],[12.3501488,46.77174],[12.3811972,46.7150029],[12.4432938,46.6842454],[12.5140151,46.6700437],[12.5657623,46.6487342],[12.6295839,46.6534704],[12.70203,46.6534704],[12.7037549,46.6984434],[12.7296285,46.7008093],[12.7227289,46.7374685],[12.8020747,46.7492887],[12.8538219,46.744561],[12.9038442,46.77174],[12.9279929,46.7599247],[12.9573164,46.7764654],[12.9797402,46.7977246],[12.8952197,46.8331378],[12.8952197,46.8484763],[12.8451974,46.8638104],[12.8469223,46.9156781],[12.7968999,46.930993],[12.7882754,46.9474811],[12.7486025,46.9686726],[12.7365282,46.9969149],[12.7813758,47.0416014],[12.7624018,47.0510043],[12.7141044,47.0451277],[12.7106545,47.0780285],[12.6226842,47.126168],[12.5692121,47.1414227],[12.551963,47.1332091],[12.5260894,47.154327],[12.4829667,47.1648828],[12.4605429,47.1484618],[12.4346693,47.1578459],[12.4191451,47.1437691],[12.401896,47.1601916]]],"terms_url":"https://tiris.tirol.gv.at","terms_text":"tiris.tirol.gv.at","icon":"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{"id":"tirol.gv.at-DOM","name":"Tiris: DOM (Surface model)","type":"wms","template":"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image Schummerung_Oberflaechenmodell&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[10.4399766,47.5976781],[10.4788646,47.5992486],[10.5027725,47.5865589],[10.4837986,47.5597936],[10.513122,47.5434951],[10.5717689,47.5458237],[10.570044,47.5621216],[10.6010923,47.5807415],[10.6390403,47.5691048],[10.7080366,47.5702686],[10.7114864,47.5493166],[10.7684083,47.5504808],[10.7856574,47.5260267],[10.8960515,47.5504808],[10.9357244,47.5236971],[10.9339995,47.5050569],[10.8908768,47.4957344],[10.9512486,47.4910724],[10.9546984,47.4677567],[11.0029958,47.4327637],[10.9909215,47.4082547],[11.1030405,47.4047525],[11.1151148,47.4199271],[11.2099847,47.4455971],[11.2686316,47.4409308],[11.2669067,47.4105894],[11.2945052,47.4420974],[11.3307283,47.4607599],[11.3824755,47.4584275],[11.3704012,47.4759184],[11.4393975,47.5306855],[11.466996,47.5178728],[11.5739403,47.5236971],[11.5756652,47.5586296],[11.598089,47.5912123],[11.6343121,47.6063331],[11.6688102,47.5947021],[11.7930036,47.602844],[11.8395761,47.5923756],[11.8499255,47.6109847],[12.0068922,47.6365615],[12.0362156,47.6249373],[12.0776134,47.6272623],[12.1086617,47.6191242],[12.1949071,47.6226121],[12.1535093,47.6876775],[12.158684,47.7166984],[12.1811078,47.7120562],[12.2190558,47.7248214],[12.2414796,47.7538216],[12.272528,47.7515022],[12.2846023,47.7317829],[12.2656283,47.695805],[12.3363495,47.7108955],[12.3760224,47.695805],[12.4432938,47.7027704],[12.4536433,47.692322],[12.4536433,47.6749032],[12.5105652,47.6319121],[12.5312641,47.6458591],[12.589911,47.6342369],[12.5795615,47.6109847],[12.6658069,47.5947021],[12.6796062,47.5749235],[12.645108,47.5504808],[12.6675318,47.5318501],[12.6847809,47.5038917],[12.7123795,47.4817474],[12.6675318,47.4560949],[12.6416582,47.4595937],[12.6502828,47.443264],[12.6209593,47.4070873],[12.5743868,47.3860701],[12.5502381,47.3965797],[12.4915913,47.3720539],[12.5088403,47.3510227],[12.4881414,47.3206295],[12.4346693,47.322968],[12.4139704,47.3042567],[12.3639481,47.3089351],[12.3122008,47.3276449],[12.2708031,47.298408],[12.177658,47.2937286],[12.1483346,47.2843686],[12.1172863,47.2995778],[12.0983123,47.2750069],[12.1259108,47.2504245],[12.0965874,47.1977096],[12.1103866,47.1484618],[12.141435,47.109735],[12.1379852,47.0897738],[12.1500595,47.0756791],[12.0051672,47.0439523],[11.9206468,47.0298454],[11.8309516,46.9910324],[11.7878289,46.9863258],[11.7740296,46.9674955],[11.7309069,46.9651413],[11.7067582,46.9898558],[11.6429366,46.994562],[11.6118883,47.0051495],[11.5325425,46.9780884],[11.4928696,47.0086782],[11.4445722,46.9674955],[11.4048993,46.9616097],[11.3445276,46.9863258],[11.2030851,46.9569006],[11.1754866,46.9616097],[11.1772115,46.9439484],[11.1461632,46.922747],[11.1254643,46.922747],[11.1082152,46.9038944],[11.1151148,46.8885717],[11.0823416,46.853195],[11.0961408,46.8236966],[11.0512932,46.8024477],[11.0236947,46.762288],[10.9184753,46.7705586],[10.8839772,46.7575613],[10.8408545,46.7729214],[10.8236054,46.7693772],[10.7908322,46.7894581],[10.756334,46.778828],[10.7252857,46.7906391],[10.7477095,46.8272372],[10.6942373,46.8449371],[10.6735384,46.869707],[10.6079919,46.853195],[10.5545198,46.8272372],[10.5200216,46.8390378],[10.4682744,46.8366779],[10.4510253,46.8814982],[10.475174,46.9321709],[10.4130773,46.9557232],[10.3941034,46.9886791],[10.3665048,46.9804421],[10.3389063,46.9474811],[10.3285569,46.9180345],[10.2975085,46.9133215],[10.2595605,46.9251032],[10.2388617,46.8626311],[10.1664155,46.8390378],[10.1353672,46.8472966],[10.1319174,46.8720655],[10.1060438,46.886214],[10.0922445,46.9274592],[10.1250177,46.952191],[10.1457166,47.0004442],[10.1129434,47.0251423],[10.1526163,47.0498291],[10.1301925,47.0627556],[10.1336423,47.0909482],[10.1595159,47.126168],[10.2009137,47.1425959],[10.1922891,47.2000536],[10.2095382,47.2129438],[10.1871144,47.2398857],[10.2009137,47.2562785],[10.1681404,47.2633024],[10.1681404,47.2808581],[10.2026386,47.2913887],[10.2440364,47.2890488],[10.3337316,47.3206295],[10.3889286,47.3907413],[10.4148022,47.3942444],[10.4562,47.436264],[10.4475755,47.4817474],[10.419977,47.5050569],[10.4424008,47.5551374],[10.4130773,47.5714324],[10.4399766,47.5976781]],[[12.401896,47.1601916],[12.3570484,47.1390761],[12.3501488,47.1120829],[12.3104759,47.107387],[12.2552789,47.0721548],[12.2138811,47.0592305],[12.2000818,47.0263181],[12.1448848,47.0310212],[12.1155613,47.007502],[12.1362602,46.9592552],[12.1673086,46.9357044],[12.1431599,46.9109649],[12.1897324,46.9003588],[12.2173309,46.8661692],[12.2552789,46.8838562],[12.2742529,46.8826772],[12.2984016,46.8343179],[12.2759778,46.8201557],[12.2794276,46.7776467],[12.3501488,46.77174],[12.3811972,46.7150029],[12.4432938,46.6842454],[12.5140151,46.6700437],[12.5657623,46.6487342],[12.6295839,46.6534704],[12.70203,46.6534704],[12.7037549,46.6984434],[12.7296285,46.7008093],[12.7227289,46.7374685],[12.8020747,46.7492887],[12.8538219,46.744561],[12.9038442,46.77174],[12.9279929,46.7599247],[12.9573164,46.7764654],[12.9797402,46.7977246],[12.8952197,46.8331378],[12.8952197,46.8484763],[12.8451974,46.8638104],[12.8469223,46.9156781],[12.7968999,46.930993],[12.7882754,46.9474811],[12.7486025,46.9686726],[12.7365282,46.9969149],[12.7813758,47.0416014],[12.7624018,47.0510043],[12.7141044,47.0451277],[12.7106545,47.0780285],[12.6226842,47.126168],[12.5692121,47.1414227],[12.551963,47.1332091],[12.5260894,47.154327],[12.4829667,47.1648828],[12.4605429,47.1484618],[12.4346693,47.1578459],[12.4191451,47.1437691],[12.401896,47.1601916]]],"terms_url":"https://tiris.tirol.gv.at","terms_text":"tiris.tirol.gv.at","icon":"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{"id":"tirol.gv.at-orthofoto","name":"Tiris: orthophoto","type":"wms","template":"https://gis.tirol.gv.at/arcgis/services/Service_Public/orthofoto/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Aktuell_RGB&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[10.4399766,47.5976781],[10.4788646,47.5992486],[10.5027725,47.5865589],[10.4837986,47.5597936],[10.513122,47.5434951],[10.5717689,47.5458237],[10.570044,47.5621216],[10.6010923,47.5807415],[10.6390403,47.5691048],[10.7080366,47.5702686],[10.7114864,47.5493166],[10.7684083,47.5504808],[10.7856574,47.5260267],[10.8960515,47.5504808],[10.9357244,47.5236971],[10.9339995,47.5050569],[10.8908768,47.4957344],[10.9512486,47.4910724],[10.9546984,47.4677567],[11.0029958,47.4327637],[10.9909215,47.4082547],[11.1030405,47.4047525],[11.1151148,47.4199271],[11.2099847,47.4455971],[11.2686316,47.4409308],[11.2669067,47.4105894],[11.2945052,47.4420974],[11.3307283,47.4607599],[11.3824755,47.4584275],[11.3704012,47.4759184],[11.4393975,47.5306855],[11.466996,47.5178728],[11.5739403,47.5236971],[11.5756652,47.5586296],[11.598089,47.5912123],[11.6343121,47.6063331],[11.6688102,47.5947021],[11.7930036,47.602844],[11.8395761,47.5923756],[11.8499255,47.6109847],[12.0068922,47.6365615],[12.0362156,47.6249373],[12.0776134,47.6272623],[12.1086617,47.6191242],[12.1949071,47.6226121],[12.1535093,47.6876775],[12.158684,47.7166984],[12.1811078,47.7120562],[12.2190558,47.7248214],[12.2414796,47.7538216],[12.272528,47.7515022],[12.2846023,47.7317829],[12.2656283,47.695805],[12.3363495,47.7108955],[12.3760224,47.695805],[12.4432938,47.7027704],[12.4536433,47.692322],[12.4536433,47.6749032],[12.5105652,47.6319121],[12.5312641,47.6458591],[12.589911,47.6342369],[12.5795615,47.6109847],[12.6658069,47.5947021],[12.6796062,47.5749235],[12.645108,47.5504808],[12.6675318,47.5318501],[12.6847809,47.5038917],[12.7123795,47.4817474],[12.6675318,47.4560949],[12.6416582,47.4595937],[12.6502828,47.443264],[12.6209593,47.4070873],[12.5743868,47.3860701],[12.5502381,47.3965797],[12.4915913,47.3720539],[12.5088403,47.3510227],[12.4881414,47.3206295],[12.4346693,47.322968],[12.4139704,47.3042567],[12.3639481,47.3089351],[12.3122008,47.3276449],[12.2708031,47.298408],[12.177658,47.2937286],[12.1483346,47.2843686],[12.1172863,47.2995778],[12.0983123,47.2750069],[12.1259108,47.2504245],[12.0965874,47.1977096],[12.1103866,47.1484618],[12.141435,47.109735],[12.1379852,47.0897738],[12.1500595,47.0756791],[12.0051672,47.0439523],[11.9206468,47.0298454],[11.8309516,46.9910324],[11.7878289,46.9863258],[11.7740296,46.9674955],[11.7309069,46.9651413],[11.7067582,46.9898558],[11.6429366,46.994562],[11.6118883,47.0051495],[11.5325425,46.9780884],[11.4928696,47.0086782],[11.4445722,46.9674955],[11.4048993,46.9616097],[11.3445276,46.9863258],[11.2030851,46.9569006],[11.1754866,46.9616097],[11.1772115,46.9439484],[11.1461632,46.922747],[11.1254643,46.922747],[11.1082152,46.9038944],[11.1151148,46.8885717],[11.0823416,46.853195],[11.0961408,46.8236966],[11.0512932,46.8024477],[11.0236947,46.762288],[10.9184753,46.7705586],[10.8839772,46.7575613],[10.8408545,46.7729214],[10.8236054,46.7693772],[10.7908322,46.7894581],[10.756334,46.778828],[10.7252857,46.7906391],[10.7477095,46.8272372],[10.6942373,46.8449371],[10.6735384,46.869707],[10.6079919,46.853195],[10.5545198,46.8272372],[10.5200216,46.8390378],[10.4682744,46.8366779],[10.4510253,46.8814982],[10.475174,46.9321709],[10.4130773,46.9557232],[10.3941034,46.9886791],[10.3665048,46.9804421],[10.3389063,46.9474811],[10.3285569,46.9180345],[10.2975085,46.9133215],[10.2595605,46.9251032],[10.2388617,46.8626311],[10.1664155,46.8390378],[10.1353672,46.8472966],[10.1319174,46.8720655],[10.1060438,46.886214],[10.0922445,46.9274592],[10.1250177,46.952191],[10.1457166,47.0004442],[10.1129434,47.0251423],[10.1526163,47.0498291],[10.1301925,47.0627556],[10.1336423,47.0909482],[10.1595159,47.126168],[10.2009137,47.1425959],[10.1922891,47.2000536],[10.2095382,47.2129438],[10.1871144,47.2398857],[10.2009137,47.2562785],[10.1681404,47.2633024],[10.1681404,47.2808581],[10.2026386,47.2913887],[10.2440364,47.2890488],[10.3337316,47.3206295],[10.3889286,47.3907413],[10.4148022,47.3942444],[10.4562,47.436264],[10.4475755,47.4817474],[10.419977,47.5050569],[10.4424008,47.5551374],[10.4130773,47.5714324],[10.4399766,47.5976781]],[[12.401896,47.1601916],[12.3570484,47.1390761],[12.3501488,47.1120829],[12.3104759,47.107387],[12.2552789,47.0721548],[12.2138811,47.0592305],[12.2000818,47.0263181],[12.1448848,47.0310212],[12.1155613,47.007502],[12.1362602,46.9592552],[12.1673086,46.9357044],[12.1431599,46.9109649],[12.1897324,46.9003588],[12.2173309,46.8661692],[12.2552789,46.8838562],[12.2742529,46.8826772],[12.2984016,46.8343179],[12.2759778,46.8201557],[12.2794276,46.7776467],[12.3501488,46.77174],[12.3811972,46.7150029],[12.4432938,46.6842454],[12.5140151,46.6700437],[12.5657623,46.6487342],[12.6295839,46.6534704],[12.70203,46.6534704],[12.7037549,46.6984434],[12.7296285,46.7008093],[12.7227289,46.7374685],[12.8020747,46.7492887],[12.8538219,46.744561],[12.9038442,46.77174],[12.9279929,46.7599247],[12.9573164,46.7764654],[12.9797402,46.7977246],[12.8952197,46.8331378],[12.8952197,46.8484763],[12.8451974,46.8638104],[12.8469223,46.9156781],[12.7968999,46.930993],[12.7882754,46.9474811],[12.7486025,46.9686726],[12.7365282,46.9969149],[12.7813758,47.0416014],[12.7624018,47.0510043],[12.7141044,47.0451277],[12.7106545,47.0780285],[12.6226842,47.126168],[12.5692121,47.1414227],[12.551963,47.1332091],[12.5260894,47.154327],[12.4829667,47.1648828],[12.4605429,47.1484618],[12.4346693,47.1578459],[12.4191451,47.1437691],[12.401896,47.1601916]]],"terms_url":"https://tiris.tirol.gv.at","terms_text":"tiris.tirol.gv.at","icon":"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{"id":"tirol.gv.at-orthofoto-cir","name":"Tiris: orthophoto infrared","type":"wms","template":"https://gis.tirol.gv.at/arcgis/services/Service_Public/orthofoto/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Aktuell_CIR&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[10.4399766,47.5976781],[10.4788646,47.5992486],[10.5027725,47.5865589],[10.4837986,47.5597936],[10.513122,47.5434951],[10.5717689,47.5458237],[10.570044,47.5621216],[10.6010923,47.5807415],[10.6390403,47.5691048],[10.7080366,47.5702686],[10.7114864,47.5493166],[10.7684083,47.5504808],[10.7856574,47.5260267],[10.8960515,47.5504808],[10.9357244,47.5236971],[10.9339995,47.5050569],[10.8908768,47.4957344],[10.9512486,47.4910724],[10.9546984,47.4677567],[11.0029958,47.4327637],[10.9909215,47.4082547],[11.1030405,47.4047525],[11.1151148,47.4199271],[11.2099847,47.4455971],[11.2686316,47.4409308],[11.2669067,47.4105894],[11.2945052,47.4420974],[11.3307283,47.4607599],[11.3824755,47.4584275],[11.3704012,47.4759184],[11.4393975,47.5306855],[11.466996,47.5178728],[11.5739403,47.5236971],[11.5756652,47.5586296],[11.598089,47.5912123],[11.6343121,47.6063331],[11.6688102,47.5947021],[11.7930036,47.602844],[11.8395761,47.5923756],[11.8499255,47.6109847],[12.0068922,47.6365615],[12.0362156,47.6249373],[12.0776134,47.6272623],[12.1086617,47.6191242],[12.1949071,47.6226121],[12.1535093,47.6876775],[12.158684,47.7166984],[12.1811078,47.7120562],[12.2190558,47.7248214],[12.2414796,47.7538216],[12.272528,47.7515022],[12.2846023,47.7317829],[12.2656283,47.695805],[12.3363495,47.7108955],[12.3760224,47.695805],[12.4432938,47.7027704],[12.4536433,47.692322],[12.4536433,47.6749032],[12.5105652,47.6319121],[12.5312641,47.6458591],[12.589911,47.6342369],[12.5795615,47.6109847],[12.6658069,47.5947021],[12.6796062,47.5749235],[12.645108,47.5504808],[12.6675318,47.5318501],[12.6847809,47.5038917],[12.7123795,47.4817474],[12.6675318,47.4560949],[12.6416582,47.4595937],[12.6502828,47.443264],[12.6209593,47.4070873],[12.5743868,47.3860701],[12.5502381,47.3965797],[12.4915913,47.3720539],[12.5088403,47.3510227],[12.4881414,47.3206295],[12.4346693,47.322968],[12.4139704,47.3042567],[12.3639481,47.3089351],[12.3122008,47.3276449],[12.2708031,47.298408],[12.177658,47.2937286],[12.1483346,47.2843686],[12.1172863,47.2995778],[12.0983123,47.2750069],[12.1259108,47.2504245],[12.0965874,47.1977096],[12.1103866,47.1484618],[12.141435,47.109735],[12.1379852,47.0897738],[12.1500595,47.0756791],[12.0051672,47.0439523],[11.9206468,47.0298454],[11.8309516,46.9910324],[11.7878289,46.9863258],[11.7740296,46.9674955],[11.7309069,46.9651413],[11.7067582,46.9898558],[11.6429366,46.994562],[11.6118883,47.0051495],[11.5325425,46.9780884],[11.4928696,47.0086782],[11.4445722,46.9674955],[11.4048993,46.9616097],[11.3445276,46.9863258],[11.2030851,46.9569006],[11.1754866,46.9616097],[11.1772115,46.9439484],[11.1461632,46.922747],[11.1254643,46.922747],[11.1082152,46.9038944],[11.1151148,46.8885717],[11.0823416,46.853195],[11.0961408,46.8236966],[11.0512932,46.8024477],[11.0236947,46.762288],[10.9184753,46.7705586],[10.8839772,46.7575613],[10.8408545,46.7729214],[10.8236054,46.7693772],[10.7908322,46.7894581],[10.756334,46.778828],[10.7252857,46.7906391],[10.7477095,46.8272372],[10.6942373,46.8449371],[10.6735384,46.869707],[10.6079919,46.853195],[10.5545198,46.8272372],[10.5200216,46.8390378],[10.4682744,46.8366779],[10.4510253,46.8814982],[10.475174,46.9321709],[10.4130773,46.9557232],[10.3941034,46.9886791],[10.3665048,46.9804421],[10.3389063,46.9474811],[10.3285569,46.9180345],[10.2975085,46.9133215],[10.2595605,46.9251032],[10.2388617,46.8626311],[10.1664155,46.8390378],[10.1353672,46.8472966],[10.1319174,46.8720655],[10.1060438,46.886214],[10.0922445,46.9274592],[10.1250177,46.952191],[10.1457166,47.0004442],[10.1129434,47.0251423],[10.1526163,47.0498291],[10.1301925,47.0627556],[10.1336423,47.0909482],[10.1595159,47.126168],[10.2009137,47.1425959],[10.1922891,47.2000536],[10.2095382,47.2129438],[10.1871144,47.2398857],[10.2009137,47.2562785],[10.1681404,47.2633024],[10.1681404,47.2808581],[10.2026386,47.2913887],[10.2440364,47.2890488],[10.3337316,47.3206295],[10.3889286,47.3907413],[10.4148022,47.3942444],[10.4562,47.436264],[10.4475755,47.4817474],[10.419977,47.5050569],[10.4424008,47.5551374],[10.4130773,47.5714324],[10.4399766,47.5976781]],[[12.401896,47.1601916],[12.3570484,47.1390761],[12.3501488,47.1120829],[12.3104759,47.107387],[12.2552789,47.0721548],[12.2138811,47.0592305],[12.2000818,47.0263181],[12.1448848,47.0310212],[12.1155613,47.007502],[12.1362602,46.9592552],[12.1673086,46.9357044],[12.1431599,46.9109649],[12.1897324,46.9003588],[12.2173309,46.8661692],[12.2552789,46.8838562],[12.2742529,46.8826772],[12.2984016,46.8343179],[12.2759778,46.8201557],[12.2794276,46.7776467],[12.3501488,46.77174],[12.3811972,46.7150029],[12.4432938,46.6842454],[12.5140151,46.6700437],[12.5657623,46.6487342],[12.6295839,46.6534704],[12.70203,46.6534704],[12.7037549,46.6984434],[12.7296285,46.7008093],[12.7227289,46.7374685],[12.8020747,46.7492887],[12.8538219,46.744561],[12.9038442,46.77174],[12.9279929,46.7599247],[12.9573164,46.7764654],[12.9797402,46.7977246],[12.8952197,46.8331378],[12.8952197,46.8484763],[12.8451974,46.8638104],[12.8469223,46.9156781],[12.7968999,46.930993],[12.7882754,46.9474811],[12.7486025,46.9686726],[12.7365282,46.9969149],[12.7813758,47.0416014],[12.7624018,47.0510043],[12.7141044,47.0451277],[12.7106545,47.0780285],[12.6226842,47.126168],[12.5692121,47.1414227],[12.551963,47.1332091],[12.5260894,47.154327],[12.4829667,47.1648828],[12.4605429,47.1484618],[12.4346693,47.1578459],[12.4191451,47.1437691],[12.401896,47.1601916]]],"terms_url":"https://tiris.tirol.gv.at","terms_text":"tiris.tirol.gv.at","icon":"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{"id":"lu.geoportail.opendata.topo","name":"Topographical Map geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/topo/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png","endDate":"2010-07-20T00:00:00.000Z","startDate":"2013-07-19T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/cartes-topographiques-services-wms-et-wmts","terms_text":"Administration du Cadastre et de la Topographie","icon":"https://www.geoportail.lu/static/img/lion.png"},{"id":"Torokbalint-orthophoto-2013","name":"Törökbálint orthophoto 2013","type":"wms","template":"https://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ORTO_2013_5CM_2013SZEPT_TAKARASSAL_512_512&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true","projection":"EPSG:3857","endDate":"2013-09-01T00:00:00.000Z","startDate":"2013-09-01T00:00:00.000Z","polygon":[[[18.9173064,47.4085354],[18.9169121,47.4084901],[18.9160618,47.4088477],[18.9156514,47.4090528],[18.9145812,47.4093813],[18.913849,47.4097008],[18.9137605,47.4097607],[18.9131436,47.4103815],[18.9122048,47.4109805],[18.9104104,47.4117465],[18.9093161,47.4125778],[18.9084095,47.4131731],[18.9067599,47.4144328],[18.90481,47.4156797],[18.9036191,47.4159737],[18.9031738,47.4161643],[18.9006203,47.417422],[18.9004192,47.4175527],[18.8996789,47.4179738],[18.8988796,47.4181843],[18.898142,47.4183495],[18.897517,47.4185509],[18.896656,47.4190083],[18.8958004,47.4195436],[18.8942072,47.4205001],[18.8905513,47.4220862],[18.8874319,47.4233166],[18.8855383,47.4242421],[18.8843554,47.4247611],[18.8818851,47.4255287],[18.8808498,47.4259805],[18.8801014,47.4262872],[18.879557,47.4264922],[18.8774098,47.4273787],[18.8760151,47.4278868],[18.8750763,47.4283585],[18.8728072,47.4293384],[18.8716377,47.4296795],[18.8713963,47.4300061],[18.8725872,47.4323032],[18.8727321,47.4327822],[18.8727374,47.4332431],[18.872437,47.4348216],[18.8720562,47.4352642],[18.8689126,47.4371221],[18.8656135,47.4374994],[18.864664,47.4377353],[18.8640364,47.4380909],[18.8637762,47.4379113],[18.8634034,47.4378423],[18.8630037,47.437982],[18.8519503,47.4471521],[18.8521703,47.4484689],[18.8592969,47.4538685],[18.8583876,47.4551181],[18.857768,47.4556839],[18.8571779,47.4559977],[18.8571967,47.456355],[18.860151,47.4583903],[18.8619415,47.4594978],[18.8609867,47.4607128],[18.8597904,47.4620076],[18.8592862,47.4623594],[18.8585941,47.4627221],[18.8571297,47.4633313],[18.8563411,47.4636033],[18.8562821,47.4640277],[18.857194,47.4652825],[18.8566254,47.4655073],[18.8565288,47.4658047],[18.8569285,47.4665563],[18.8583635,47.4695253],[18.8582641,47.4698029],[18.8582669,47.4699079],[18.8583834,47.4701931],[18.8584438,47.4702729],[18.8585189,47.4703264],[18.8586221,47.4703609],[18.8587348,47.4703763],[18.8589011,47.4703609],[18.8614614,47.469732],[18.8627677,47.469286],[18.8661674,47.4678491],[18.8679403,47.4665581],[18.8699654,47.4652435],[18.8708009,47.4645698],[18.8726784,47.4633259],[18.8753606,47.4611281],[18.8768734,47.4592711],[18.8894261,47.4598659],[18.8902415,47.4598804],[18.9037116,47.4553357],[18.9042733,47.455203],[18.9049332,47.4550579],[18.9054213,47.4551014],[18.9056735,47.4550543],[18.9062877,47.4547659],[18.9064835,47.4545301],[18.9065968,47.4544712],[18.9067819,47.454395],[18.9081149,47.4539888],[18.9083731,47.4539507],[18.9089048,47.4538437],[18.9095419,47.4536959],[18.9132587,47.4531717],[18.9135296,47.4532043],[18.9137201,47.4531717],[18.9138649,47.4530738],[18.9143117,47.4529381],[18.9159773,47.4529961],[18.9180668,47.4531666],[18.9184637,47.4529997],[18.9190324,47.4516141],[18.9217253,47.4508015],[18.9224602,47.450689],[18.9241768,47.4502537],[18.9275564,47.4498946],[18.9297237,47.4495064],[18.9322127,47.4492199],[18.9334694,47.4493242],[18.9392093,47.4493532],[18.9422885,47.4490339],[18.945491,47.4488961],[18.9482617,47.4487002],[18.9500347,47.4482413],[18.954699,47.4472183],[18.9574899,47.4469162],[18.958025,47.4471475],[18.9584434,47.4470822],[18.9587666,47.4466623],[18.9614488,47.4393046],[18.9636804,47.4357995],[18.9659764,47.432882],[18.9689912,47.4296958],[18.9701003,47.4270366],[18.9700922,47.4267935],[18.9669541,47.424605],[18.9573531,47.4184193],[18.9567603,47.4184012],[18.9560576,47.418129],[18.9538513,47.4173936],[18.9514447,47.4166549],[18.9513133,47.4166426],[18.9326981,47.4170333],[18.9325733,47.4169625],[18.9320101,47.4167393],[18.9314857,47.4163972],[18.9311357,47.4161158],[18.9212291,47.4109106],[18.9195742,47.4098705],[18.9192684,47.4096109],[18.9173064,47.4085354]]],"terms_url":"http://www.torokbalint.hu","terms_text":"Törökbálint","description":"5 cm resolution bald image"},{"id":"Torokbalint-orthophoto-2015","name":"Törökbálint orthophoto 2015","type":"wms","template":"https://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=TBORTO_2015_20160218&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true","projection":"EPSG:3857","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","polygon":[[[18.9173064,47.4085354],[18.9169121,47.4084901],[18.9160618,47.4088477],[18.9156514,47.4090528],[18.9145812,47.4093813],[18.913849,47.4097008],[18.9137605,47.4097607],[18.9131436,47.4103815],[18.9122048,47.4109805],[18.9104104,47.4117465],[18.9093161,47.4125778],[18.9084095,47.4131731],[18.9067599,47.4144328],[18.90481,47.4156797],[18.9036191,47.4159737],[18.9031738,47.4161643],[18.9006203,47.417422],[18.9004192,47.4175527],[18.8996789,47.4179738],[18.8988796,47.4181843],[18.898142,47.4183495],[18.897517,47.4185509],[18.896656,47.4190083],[18.8958004,47.4195436],[18.8942072,47.4205001],[18.8905513,47.4220862],[18.8874319,47.4233166],[18.8855383,47.4242421],[18.8843554,47.4247611],[18.8818851,47.4255287],[18.8808498,47.4259805],[18.8801014,47.4262872],[18.879557,47.4264922],[18.8774098,47.4273787],[18.8760151,47.4278868],[18.8750763,47.4283585],[18.8728072,47.4293384],[18.8716377,47.4296795],[18.8713963,47.4300061],[18.8725872,47.4323032],[18.8727321,47.4327822],[18.8727374,47.4332431],[18.872437,47.4348216],[18.8720562,47.4352642],[18.8689126,47.4371221],[18.8656135,47.4374994],[18.864664,47.4377353],[18.8640364,47.4380909],[18.8637762,47.4379113],[18.8634034,47.4378423],[18.8630037,47.437982],[18.8519503,47.4471521],[18.8521703,47.4484689],[18.8592969,47.4538685],[18.8583876,47.4551181],[18.857768,47.4556839],[18.8571779,47.4559977],[18.8571967,47.456355],[18.860151,47.4583903],[18.8619415,47.4594978],[18.8609867,47.4607128],[18.8597904,47.4620076],[18.8592862,47.4623594],[18.8585941,47.4627221],[18.8571297,47.4633313],[18.8563411,47.4636033],[18.8562821,47.4640277],[18.857194,47.4652825],[18.8566254,47.4655073],[18.8565288,47.4658047],[18.8569285,47.4665563],[18.8583635,47.4695253],[18.8582641,47.4698029],[18.8582669,47.4699079],[18.8583834,47.4701931],[18.8584438,47.4702729],[18.8585189,47.4703264],[18.8586221,47.4703609],[18.8587348,47.4703763],[18.8589011,47.4703609],[18.8614614,47.469732],[18.8627677,47.469286],[18.8661674,47.4678491],[18.8679403,47.4665581],[18.8699654,47.4652435],[18.8708009,47.4645698],[18.8726784,47.4633259],[18.8753606,47.4611281],[18.8768734,47.4592711],[18.8894261,47.4598659],[18.8902415,47.4598804],[18.9037116,47.4553357],[18.9042733,47.455203],[18.9049332,47.4550579],[18.9054213,47.4551014],[18.9056735,47.4550543],[18.9062877,47.4547659],[18.9064835,47.4545301],[18.9065968,47.4544712],[18.9067819,47.454395],[18.9081149,47.4539888],[18.9083731,47.4539507],[18.9089048,47.4538437],[18.9095419,47.4536959],[18.9132587,47.4531717],[18.9135296,47.4532043],[18.9137201,47.4531717],[18.9138649,47.4530738],[18.9143117,47.4529381],[18.9159773,47.4529961],[18.9180668,47.4531666],[18.9184637,47.4529997],[18.9190324,47.4516141],[18.9217253,47.4508015],[18.9224602,47.450689],[18.9241768,47.4502537],[18.9275564,47.4498946],[18.9297237,47.4495064],[18.9322127,47.4492199],[18.9334694,47.4493242],[18.9392093,47.4493532],[18.9422885,47.4490339],[18.945491,47.4488961],[18.9482617,47.4487002],[18.9500347,47.4482413],[18.954699,47.4472183],[18.9574899,47.4469162],[18.958025,47.4471475],[18.9584434,47.4470822],[18.9587666,47.4466623],[18.9614488,47.4393046],[18.9636804,47.4357995],[18.9659764,47.432882],[18.9689912,47.4296958],[18.9701003,47.4270366],[18.9700922,47.4267935],[18.9669541,47.424605],[18.9573531,47.4184193],[18.9567603,47.4184012],[18.9560576,47.418129],[18.9538513,47.4173936],[18.9514447,47.4166549],[18.9513133,47.4166426],[18.9326981,47.4170333],[18.9325733,47.4169625],[18.9320101,47.4167393],[18.9314857,47.4163972],[18.9311357,47.4161158],[18.9212291,47.4109106],[18.9195742,47.4098705],[18.9192684,47.4096109],[18.9173064,47.4085354]]],"terms_url":"http://fototerkep.hu","terms_text":"Fototerkep.hu","best":true,"description":"5 cm resolution bald image"},{"id":"Toulouse-Orthophotoplan-2007","name":"Toulouse - Orthophotoplan 2007","type":"wms","template":"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2007&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2007-01-01T00:00:00.000Z","startDate":"2007-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[1.1919978,43.6328791],[1.2015377,43.6329729],[1.2011107,43.6554932],[1.2227985,43.6557029],[1.2226231,43.6653353],[1.2275341,43.6653849],[1.2275417,43.6656387],[1.2337568,43.6656883],[1.2337644,43.6650153],[1.2351218,43.6650319],[1.2350913,43.6670729],[1.2443566,43.6671556],[1.2441584,43.6743925],[1.2493973,43.6744256],[1.2493973,43.6746628],[1.2555666,43.6747234],[1.2555742,43.6744532],[1.2569545,43.6744697],[1.2568782,43.678529],[1.2874873,43.6788257],[1.2870803,43.7013229],[1.3088219,43.7014632],[1.3086493,43.7127673],[1.3303262,43.7129544],[1.3300242,43.7305221],[1.3367106,43.7305845],[1.3367322,43.7312235],[1.3734338,43.7310456],[1.3735848,43.7245772],[1.4604504,43.7252947],[1.4607783,43.7028034],[1.4824875,43.7029516],[1.4829828,43.6692071],[1.5046832,43.6693616],[1.5048383,43.6581174],[1.5265475,43.6582656],[1.5266945,43.6470298],[1.548368,43.6471633],[1.5485357,43.6359385],[1.5702172,43.636082],[1.5705123,43.6135777],[1.5488166,43.6134276],[1.549097,43.5909479],[1.5707695,43.5910694],[1.5709373,43.5798341],[1.5793714,43.5798894],[1.5794782,43.5737682],[1.5809119,43.5737792],[1.5810859,43.5573794],[1.5712334,43.5573131],[1.5716504,43.5235497],[1.3984804,43.5222618],[1.3986509,43.5110113],[1.3120959,43.5102543],[1.3118968,43.5215192],[1.2902569,43.5213126],[1.2898637,43.5438168],[1.311517,43.5440133],[1.3113271,43.5552596],[1.3036924,43.5551924],[1.3036117,43.5595099],[1.2955449,43.5594317],[1.2955449,43.5595489],[1.2895595,43.5594473],[1.2892899,43.5775366],[1.2675698,43.5773647],[1.2673973,43.5886141],[1.25355,43.5885047],[1.2533774,43.5956282],[1.2518029,43.5956282],[1.2518029,43.5949409],[1.2350437,43.5947847],[1.2350437,43.5945972],[1.2239572,43.5945972],[1.2239357,43.5994708],[1.2139708,43.599299],[1.2138845,43.6046408],[1.2020647,43.6044846],[1.2019464,43.61048],[1.1924294,43.6103695],[1.1919978,43.6328791]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Toulouse-Orthophotoplan-2011","name":"Toulouse - Orthophotoplan 2011","type":"wms","template":"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2011&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2011-01-01T00:00:00.000Z","startDate":"2011-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[1.1135067,43.6867566],[1.1351836,43.6870842],[1.1348907,43.6983471],[1.1782867,43.6990338],[1.1779903,43.7102786],[1.1996591,43.7106144],[1.1993387,43.7218722],[1.2427356,43.7225269],[1.2424336,43.7337491],[1.2641536,43.734092],[1.2638301,43.7453588],[1.2855285,43.7456548],[1.2852481,43.756935],[1.306925,43.757231],[1.3066446,43.7684779],[1.3283431,43.7687894],[1.3280842,43.780034],[1.4367275,43.7815757],[1.4373098,43.7591004],[1.4590083,43.7593653],[1.4593318,43.7481479],[1.4810303,43.7483972],[1.4813322,43.7371777],[1.5030307,43.7374115],[1.5035915,43.7149664],[1.5253115,43.7151846],[1.5256135,43.7040057],[1.5472688,43.7042552],[1.5475708,43.6930431],[1.5692045,43.6932926],[1.5695712,43.6820316],[1.5912049,43.6822656],[1.5917441,43.6597998],[1.613421,43.6600339],[1.613723,43.6488291],[1.6353783,43.6490788],[1.6384146,43.5140731],[1.2921649,43.5094658],[1.2918629,43.5206966],[1.2702076,43.5203994],[1.2698841,43.5316437],[1.2482288,43.531331],[1.2476048,43.5537788],[1.2259628,43.5534914],[1.2256819,43.564716],[1.2039835,43.564419],[1.2033148,43.5869049],[1.1816164,43.5865611],[1.1810237,43.6090368],[1.1592821,43.6086932],[1.1589585,43.6199523],[1.1372601,43.6196244],[1.1365933,43.642094],[1.1149055,43.6417629],[1.1135067,43.6867566]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Toulouse-Orthophotoplan-2013","name":"Toulouse - Orthophotoplan 2013","type":"wms","template":"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2013&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[1.1135067,43.6867566],[1.1351836,43.6870842],[1.1348907,43.6983471],[1.1782867,43.6990338],[1.1779903,43.7102786],[1.1996591,43.7106144],[1.1993387,43.7218722],[1.2427356,43.7225269],[1.2424336,43.7337491],[1.2641536,43.734092],[1.2638301,43.7453588],[1.2855285,43.7456548],[1.2852481,43.756935],[1.306925,43.757231],[1.3066446,43.7684779],[1.3283431,43.7687894],[1.3280842,43.780034],[1.4367275,43.7815757],[1.4373098,43.7591004],[1.4590083,43.7593653],[1.4593318,43.7481479],[1.4810303,43.7483972],[1.4813322,43.7371777],[1.5030307,43.7374115],[1.5035915,43.7149664],[1.5253115,43.7151846],[1.5256135,43.7040057],[1.5472688,43.7042552],[1.5475708,43.6930431],[1.5692045,43.6932926],[1.5695712,43.6820316],[1.5912049,43.6822656],[1.5917441,43.6597998],[1.613421,43.6600339],[1.613723,43.6488291],[1.6353783,43.6490788],[1.6384146,43.5140731],[1.2921649,43.5094658],[1.2918629,43.5206966],[1.2702076,43.5203994],[1.2698841,43.5316437],[1.2482288,43.531331],[1.2476048,43.5537788],[1.2259628,43.5534914],[1.2256819,43.564716],[1.2039835,43.564419],[1.2033148,43.5869049],[1.1816164,43.5865611],[1.1810237,43.6090368],[1.1592821,43.6086932],[1.1589585,43.6199523],[1.1372601,43.6196244],[1.1365933,43.642094],[1.1149055,43.6417629],[1.1135067,43.6867566]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Toulouse-Orthophotoplan-2015","name":"Toulouse - Orthophotoplan 2015","type":"wms","template":"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2015&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[1.1135067,43.6867566],[1.1351836,43.6870842],[1.1348907,43.6983471],[1.1782867,43.6990338],[1.1779903,43.7102786],[1.1996591,43.7106144],[1.1993387,43.7218722],[1.2427356,43.7225269],[1.2424336,43.7337491],[1.2641536,43.734092],[1.2638301,43.7453588],[1.2855285,43.7456548],[1.2852481,43.756935],[1.306925,43.757231],[1.3066446,43.7684779],[1.3283431,43.7687894],[1.3280842,43.780034],[1.4367275,43.7815757],[1.4373098,43.7591004],[1.4590083,43.7593653],[1.4593318,43.7481479],[1.4810303,43.7483972],[1.4813322,43.7371777],[1.5030307,43.7374115],[1.5035915,43.7149664],[1.5253115,43.7151846],[1.5256135,43.7040057],[1.5472688,43.7042552],[1.5475708,43.6930431],[1.5692045,43.6932926],[1.5695712,43.6820316],[1.5912049,43.6822656],[1.5917441,43.6597998],[1.613421,43.6600339],[1.613723,43.6488291],[1.6353783,43.6490788],[1.6384146,43.5140731],[1.2921649,43.5094658],[1.2918629,43.5206966],[1.2702076,43.5203994],[1.2698841,43.5316437],[1.2482288,43.531331],[1.2476048,43.5537788],[1.2259628,43.5534914],[1.2256819,43.564716],[1.2039835,43.564419],[1.2033148,43.5869049],[1.1816164,43.5865611],[1.1810237,43.6090368],[1.1592821,43.6086932],[1.1589585,43.6199523],[1.1372601,43.6196244],[1.1365933,43.642094],[1.1149055,43.6417629],[1.1135067,43.6867566]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Tours-Orthophoto-2008_2010","name":"Tours - Orthophotos 2008-2010","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/tours/{zoom}/{x}/{y}","endDate":"2011-01-01T00:00:00.000Z","startDate":"2008-01-01T00:00:00.000Z","scaleExtent":[0,20],"polygon":[[[0.5457462,47.465264],[0.54585,47.4608163],[0.5392188,47.4606983],[0.5393484,47.456243],[0.5327959,47.4561003],[0.5329011,47.451565],[0.52619,47.4514013],[0.5265854,47.4424884],[0.5000941,47.4420739],[0.5002357,47.4375835],[0.4936014,47.4374324],[0.4937,47.4329285],[0.4606141,47.4324593],[0.4607248,47.4279827],[0.4541016,47.4278125],[0.454932,47.4053921],[0.4615431,47.4054476],[0.4619097,47.3964924],[0.4684346,47.3966005],[0.4691319,47.3786415],[0.4757125,47.3787609],[0.4762116,47.3652018],[0.4828297,47.3653499],[0.4829611,47.3608321],[0.4763543,47.360743],[0.476654,47.3517263],[0.4700497,47.3516186],[0.4701971,47.3471313],[0.4637503,47.3470104],[0.4571425,47.3424146],[0.4572922,47.3379061],[0.4506741,47.3378081],[0.4508379,47.3333051],[0.4442212,47.3332032],[0.4443809,47.328711],[0.4311392,47.3284977],[0.4316262,47.3150004],[0.4382432,47.3151136],[0.4383815,47.3106174],[0.4714487,47.3111374],[0.4713096,47.3156565],[0.477888,47.3157542],[0.4780733,47.3112802],[0.4846826,47.3113639],[0.4848576,47.3068686],[0.4914359,47.3069803],[0.491745,47.2979733],[0.4851578,47.2978722],[0.4854269,47.2888744],[0.4788485,47.2887697],[0.4791574,47.2797818],[0.4857769,47.2799005],[0.4859107,47.2753885],[0.492539,47.2755029],[0.4926669,47.2710127],[0.4992986,47.2711066],[0.4994296,47.2666116],[0.5192658,47.2669245],[0.5194225,47.2624231],[0.5260186,47.2625205],[0.5258735,47.2670183],[0.5456972,47.2673383],[0.5455537,47.2718283],[0.5587737,47.2720366],[0.5586259,47.2765185],[0.5652252,47.2766278],[0.5650848,47.2811206],[0.5716753,47.2812285],[0.5715223,47.2857217],[0.5781436,47.2858299],[0.5779914,47.2903294],[0.5846023,47.2904263],[0.5843076,47.2994231],[0.597499,47.2996094],[0.5976637,47.2951375],[0.6571596,47.2960036],[0.6572988,47.2915091],[0.6705019,47.2917186],[0.6703475,47.2962082],[0.6836175,47.2963688],[0.6834322,47.3008929],[0.690062,47.3009558],[0.6899241,47.3054703],[0.7362019,47.3061157],[0.7360848,47.3106063],[0.7559022,47.3108935],[0.7557718,47.315392],[0.7623755,47.3154716],[0.7622314,47.3199941],[0.7754911,47.3201546],[0.77497,47.3388218],[0.7745786,47.351628],[0.7680363,47.3515901],[0.767589,47.3605298],[0.7742443,47.3606238],[0.7733465,47.3921266],[0.7667434,47.3920195],[0.7664411,47.4010837],[0.7730647,47.4011115],[0.7728868,47.4101297],[0.7661849,47.4100226],[0.7660267,47.4145044],[0.7527613,47.4143038],[0.7529788,47.4098086],[0.7462373,47.4097016],[0.7459424,47.4232208],[0.7392324,47.4231451],[0.738869,47.4366116],[0.7323267,47.4365171],[0.7321869,47.4410556],[0.7255048,47.44098],[0.7254209,47.4453479],[0.7318793,47.4454803],[0.7318514,47.4501126],[0.7384496,47.450226],[0.7383098,47.454631],[0.7449359,47.4547444],[0.7443209,47.4771985],[0.7310685,47.4769717],[0.7309008,47.4815445],[0.7176205,47.4812611],[0.7177883,47.4768394],[0.69777,47.4764993],[0.6980496,47.4719827],[0.6914514,47.4718882],[0.6917309,47.4630241],[0.6851048,47.4629295],[0.684937,47.4673524],[0.678255,47.4673335],[0.6779754,47.4762158],[0.6714051,47.4761592],[0.6710417,47.4881952],[0.6577334,47.4879685],[0.6578173,47.48504],[0.6511911,47.4848322],[0.6514707,47.4758568],[0.6448166,47.4757245],[0.6449284,47.4712646],[0.6117976,47.4707543],[0.6118815,47.4663129],[0.6052833,47.4661239],[0.6054231,47.4616631],[0.5988808,47.4615497],[0.5990206,47.4570886],[0.572488,47.4566916],[0.5721805,47.4656513],[0.5457462,47.465264]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Tours/Orthophoto","terms_text":"Orthophoto Tour(s) Plus 2008"},{"id":"Tours-Orthophoto-2013","name":"Tours - Orthophotos 2013","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/tours_2013/{zoom}/{x}/{y}","endDate":"2013-01-01T00:00:00.000Z","startDate":"2013-01-01T00:00:00.000Z","scaleExtent":[0,22],"polygon":[[[0.7751199,47.3298327],[0.7742685,47.356166],[0.7705338,47.3561106],[0.7702424,47.3651192],[0.7739772,47.3651747],[0.7728024,47.4014836],[0.7903977,47.4014691],[0.7898827,47.4102988],[0.7911702,47.410473],[0.7910844,47.4194174],[0.7939168,47.4194174],[0.7931872,47.4373306],[0.7983371,47.4374177],[0.7980796,47.4554408],[0.8004399,47.4554118],[0.8013841,47.4642615],[0.8007403,47.4689904],[0.7939597,47.4733127],[0.7840463,47.4732257],[0.7838746,47.4787079],[0.776064,47.4785919],[0.7758494,47.4820434],[0.7706567,47.4821884],[0.7704421,47.4859006],[0.7609578,47.4909176],[0.7571813,47.4909176],[0.737526,47.5033563],[0.725896,47.5058785],[0.7111331,47.5057626],[0.7041808,47.5040811],[0.6910916,47.5003846],[0.6904479,47.4971808],[0.6775733,47.4968329],[0.6775733,47.4935273],[0.6642695,47.4930054],[0.6634971,47.4895256],[0.6508799,47.4895836],[0.6513306,47.4803177],[0.6473394,47.4803032],[0.6474682,47.4785194],[0.6447431,47.4784614],[0.644786,47.4757493],[0.6423827,47.4757783],[0.642254,47.4730226],[0.6383487,47.4729356],[0.6379195,47.4713111],[0.6051322,47.470789],[0.6051322,47.4663213],[0.5985232,47.4660312],[0.5987807,47.4615632],[0.5920001,47.4615632],[0.5922576,47.4597643],[0.5808421,47.4597062],[0.5800696,47.4614471],[0.5723449,47.4613891],[0.5722161,47.4651173],[0.5587407,47.4648852],[0.5465957,47.4605187],[0.5326911,47.4535546],[0.5267688,47.4531483],[0.5267688,47.4515233],[0.5223056,47.4512331],[0.5225631,47.4480407],[0.5197736,47.447765],[0.520074,47.4424682],[0.4975005,47.4415975],[0.4971572,47.4404945],[0.4935523,47.4401462],[0.4935523,47.435734],[0.4794331,47.4357485],[0.4617091,47.428186],[0.4564305,47.4208838],[0.4548856,47.4122882],[0.4550572,47.4021807],[0.4614945,47.4019338],[0.4616662,47.3964145],[0.4687901,47.3960224],[0.4701634,47.3517307],[0.4567738,47.3514981],[0.4572888,47.3425422],[0.430853,47.3419606],[0.431958,47.3060196],[0.4715367,47.3067035],[0.4725667,47.2800414],[0.4852696,47.2800414],[0.4857846,47.2708404],[0.4993459,47.2710734],[0.4991742,47.2624533],[0.5527326,47.2630358],[0.5522176,47.2720052],[0.5656072,47.2722381],[0.5652638,47.2815553],[0.5911847,47.2815553],[0.5906697,47.2909873],[0.669119,47.2916859],[0.6831952,47.2956444],[0.6831952,47.3007668],[0.6965848,47.3012324],[0.6964131,47.3023965],[0.7100602,47.3024547],[0.7229348,47.3058887],[0.722849,47.3104281],[0.7416459,47.3108355],[0.754263,47.3139197],[0.7625028,47.318153],[0.7620736,47.3201313],[0.7661935,47.3200877],[0.7695623,47.3220659],[0.7723304,47.3250768],[0.7733603,47.3266985],[0.7751199,47.3298327]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Tours/Orthophoto","terms_text":"Orthophoto Tour(s)plus 2013"},{"id":"trafikverket-baninfo","name":"Trafikverket Railway Network","type":"wms","template":"http://geo-baninfo.trafikverket.se/mapservice/wms.axd/BanInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Spar_Huvud_och_sidospar&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[7,20],"polygon":[[[12.8018162,55.1961173],[14.2272895,55.2728604],[18.4460395,56.6924447],[19.7424207,57.9848139],[20.0061008,59.5371045],[19.083938,60.1930844],[20.4949924,63.2497044],[24.2523085,65.5743697],[23.8183485,67.9251447],[23.2360731,68.346545],[20.4345594,69.1703766],[18.0834852,68.5644031],[16.5014539,67.8838194],[14.4360242,66.1427472],[11.8212781,63.3077531],[12.2003119,60.3106301],[10.6237739,58.5481974],[12.6425144,56.0306237],[12.8018162,55.1961173]]],"terms_url":"https://www.trafikverket.se","terms_text":"© Trafikverket, CC0","description":"Swedish railway network, including sidings","icon":"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png","overlay":true},{"id":"trafikverket-vagnat","name":"Trafikverket Road Network","type":"wms","template":"https://geo-netinfo.trafikverket.se/mapservice/wms.axd/NetInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vagtrafiknat,Funkvagklass,Farjeled&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[13,20],"polygon":[[[12.8018162,55.1961173],[14.2272895,55.2728604],[18.4460395,56.6924447],[19.7424207,57.9848139],[20.0061008,59.5371045],[19.083938,60.1930844],[20.4949924,63.2497044],[24.2523085,65.5743697],[23.8183485,67.9251447],[23.2360731,68.346545],[20.4345594,69.1703766],[18.0834852,68.5644031],[16.5014539,67.8838194],[14.4360242,66.1427472],[11.8212781,63.3077531],[12.2003119,60.3106301],[10.6237739,58.5481974],[12.6425144,56.0306237],[12.8018162,55.1961173]]],"terms_url":"https://www.trafikverket.se","terms_text":"© Trafikverket, CC0","description":"Swedish NVDB road network","icon":"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png","overlay":true},{"id":"trafikverket-vagnat-extra","name":"Trafikverket Road Network extra","type":"wms","template":"https://geo-netinfo.trafikverket.se/mapservice/wms.axd/NetInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=VagnummerText,Vaghinder,Rastplats,Rastficka,Hallplats,Farthinder,BroTunnel,ATK_Matplats&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","scaleExtent":[3,20],"polygon":[[[12.8018162,55.1961173],[14.2272895,55.2728604],[18.4460395,56.6924447],[19.7424207,57.9848139],[20.0061008,59.5371045],[19.083938,60.1930844],[20.4949924,63.2497044],[24.2523085,65.5743697],[23.8183485,67.9251447],[23.2360731,68.346545],[20.4345594,69.1703766],[18.0834852,68.5644031],[16.5014539,67.8838194],[14.4360242,66.1427472],[11.8212781,63.3077531],[12.2003119,60.3106301],[10.6237739,58.5481974],[12.6425144,56.0306237],[12.8018162,55.1961173]]],"terms_url":"https://www.trafikverket.se","terms_text":"© Trafikverket, CC0","description":"Swedish NVDB extra details: Highway reference, traffic calming, rest area, bus stop, bridge, tunnel, speed camera","icon":"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png","overlay":true},{"id":"trafikverket-vagnat-navn","name":"Trafikverket Street Names","type":"tms","template":"https://mapproxy.openstreetmap.se/tiles/1.0.0/nvdb_names/EPSG3857/{zoom}/{x}/{y}.png","scaleExtent":[15,19],"polygon":[[[12.8018162,55.1961173],[14.2272895,55.2728604],[18.4460395,56.6924447],[19.7424207,57.9848139],[20.0061008,59.5371045],[19.083938,60.1930844],[20.4949924,63.2497044],[24.2523085,65.5743697],[23.8183485,67.9251447],[23.2360731,68.346545],[20.4345594,69.1703766],[18.0834852,68.5644031],[16.5014539,67.8838194],[14.4360242,66.1427472],[11.8212781,63.3077531],[12.2003119,60.3106301],[10.6237739,58.5481974],[12.6425144,56.0306237],[12.8018162,55.1961173]]],"terms_url":"https://www.trafikverket.se","terms_text":"© Trafikverket, CC0","description":"Swedish NVDB street names","icon":"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png","overlay":true},{"id":"US_Forest_Service_roads_overlay","name":"U.S. Forest Roads Overlay","type":"tms","template":"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/glassman/cjf4qjmps0tgv2qpahj977mvz/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1IjoiZ2xhc3NtYW4iLCJhIjoiRjk3dWdwYyJ9.Tg_fMJWxygeKBgVTrZHmGA","scaleExtent":[0,20],"polygon":[[[-124.7617886,48.4130148],[-124.6059492,45.90245],[-124.9934269,40.0557614],[-122.5369737,36.8566086],[-119.9775867,33.0064099],[-117.675935,32.4630223],[-114.8612307,32.4799891],[-111.0089311,31.336015],[-108.1992687,31.3260016],[-108.1871123,31.7755116],[-106.5307225,31.7820947],[-106.4842052,31.7464455],[-106.429317,31.7520583],[-106.2868855,31.5613291],[-106.205248,31.446704],[-105.0205259,30.5360988],[-104.5881916,29.6997856],[-103.2518856,28.8908685],[-102.7173632,29.3920567],[-102.1513983,29.7475702],[-101.2552871,29.4810523],[-100.0062436,28.0082173],[-99.2351068,26.4475962],[-98.0109067,25.9928035],[-97.435024,25.8266009],[-96.9555259,25.9821589],[-96.8061741,27.7978168],[-95.5563349,28.5876066],[-93.7405308,29.4742093],[-90.9028456,28.8564513],[-88.0156706,28.9944338],[-88.0162494,30.0038862],[-86.0277506,30.0047454],[-84.0187909,28.9961781],[-81.9971976,25.9826768],[-81.9966618,25.0134917],[-84.0165592,25.0125783],[-84.0160068,24.0052745],[-80.0199985,24.007096],[-79.8901116,26.8550713],[-80.0245309,32.0161282],[-75.4147385,35.0531894],[-74.0211163,39.5727927],[-72.002019,40.9912464],[-69.8797398,40.9920457],[-69.8489304,43.2619916],[-66.9452845,44.7104937],[-67.7596632,47.0990024],[-69.2505131,47.5122328],[-70.4614886,46.2176574],[-71.412273,45.254878],[-72.0222508,45.0059846],[-75.0798841,44.9802854],[-76.9023061,43.8024568],[-78.7623935,43.6249578],[-79.15798,43.4462589],[-79.0060087,42.8005317],[-82.662475,41.6889458],[-82.1761642,43.588535],[-83.2813977,46.138853],[-87.5064535,48.0142702],[-88.3492194,48.2963271],[-89.4353148,47.9837822],[-93.9981078,49.0067142],[-95.1105379,49.412004],[-96.0131199,49.0060547],[-123.3228926,49.0042878],[-123.2275233,48.1849927],[-124.7617886,48.4130148]],[[-160.5787616,22.5062947],[-160.5782192,21.4984647],[-158.7470604,21.2439843],[-157.5083185,20.995803],[-155.9961942,18.7790194],[-154.6217803,18.7586966],[-154.6890176,19.8805722],[-156.2927622,21.2225888],[-157.5047384,21.9984962],[-159.0093692,22.5070181],[-160.5787616,22.5062947]],[[-167.1571546,68.721974],[-164.8553982,67.0255078],[-168.002195,66.0017503],[-169.0087448,66.001546],[-169.0075381,64.9987675],[-172.5143281,63.8767267],[-173.8197023,59.74014],[-162.5018149,58.0005815],[-160.0159024,58.0012389],[-160.0149725,57.000035],[-160.5054788,56.9999017],[-165.8092575,54.824847],[-178.000097,52.2446469],[-177.9992996,51.2554252],[-171.4689067,51.8215329],[-162.40251,53.956664],[-159.0075717,55.002502],[-158.0190709,55.0027849],[-151.9963213,55.9991902],[-151.500341,57.9987853],[-151.5012894,58.9919816],[-138.5159989,58.9953194],[-138.5150471,57.9986434],[-133.9948193,54.0031685],[-130.0044418,54.0043387],[-130.0070826,57.0000507],[-131.975877,56.9995156],[-135.1229873,59.756601],[-138.0071813,59.991805],[-139.1715881,60.4127229],[-140.9874011,61.0118551],[-140.9683975,69.9535069],[-156.176891,71.5633329],[-160.413634,70.7397728],[-163.0218273,69.9707435],[-164.9717003,68.994689],[-167.1571546,68.721974]]],"description":"Highway: Green casing = unclassified. Brown casing = track. Surface: gravel = light brown fill, Asphalt = black, paved = gray, ground =white, concrete = blue, grass = green. Seasonal = white bars","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAADBCAMAAABlhatuAAAAUVBMVEX7ywBGfQDyyQC2rgD+zgASZgCBlgADYABHcEz/0wDpxAAscgCcogBbhgBxjwDMtwDbvgD7ygD8ywD/zAD6ywD6ywD6yQD/ygD6ygAAXAH6xwAIstySAAAAGXRSTlP+/f39/f79/gD9/f39/f39/X5OD/GnyCvhIgiqzgAAGvdJREFUeNrNXdly67iuBcEBgUgNtmUny///ofeBlEQNTmwnu89VdXXVtmNpCQQxA6SPh9fn9fLx/+uix19d7+P1/D+A9Hm6vAz2eif6H8A938b76VWw5zsREd3vt9Pnf4b0cr7diWg8vwb2cqPpuo/X03/CvefrV6HQ7TWw1/wzXvB+/mtOvd3vM4FOr4A9L0hnvLd/RuDL6XobZ+rwQ0Y4Bnv5ooPrfh9v19P5XwC9bx91ex7s9T6/5PzfDHi8XU+ny++JfLmcVkB5tZanZ8Gej+i6ACa638ev0+l8Pl/eAX25fJ7Pp9PXnqDVY74+nwP7+TX/Rt0WZwWYiMbx63Q6nc8Z92Pol8vlcvk8n8+n0+k6jmP5eU1Srh7ERPfrc2Cv031ck/oa75Yr7hl0/vNxHDP0g+s6juM4Vn99f7R0zn0jEeghEzCRCxBjG6fuW6aon34/vB5A2+wHcsq2d9Mn98+fwS5MoL1AIL61A2l+ZV4D5ZniL168+7dzyn2I8MP8oNvlJ7CX28wEbCAiAkBMso1T52q4vCUT1zy3frVDycLL2qtrbIgCCNp5GXc2wg7saRbOGiDTBYhvk21YnXNuQyLer+5GDh3RNX/hnFPiPrVekB+HTudN9vk92EV1OSurC4CICbZvWFdMQQ9B7daB63Un51S5txnoTBhIP1Pj9i3Yyzgze+Mh2wuAiPddaJjIqc5U5iM68wNGdc45VSJuUuelBpofYpY9dv4O7GneuK7dY50Rw3tjuhAabojIqaq6fBE5IsqvXLFL/lJV1RFxw7YLxsR56TeX1end1qphDfZznNhN0yOsM2AA3ntjTBtCCD03TdM8kgvcNE3TpBBCa0z0vtzgwc0jz+95fQh2MWId+2/BrjEX3N77aI6v6L2fIT5EOd+22mPnR2CfYYJngD+6nr+Z1SMbgQ4kAa+k1v/iesAItFFdma7W4xWC1oStv8oCWvYb/ue7dvMeqxihAnudsVLEExgLDUJoBSJdyFe/MFBrrU0GIt57v/ndM4xQrq/zHux5NrjdT0wAeO9DhIgkUtU+wnORS/OP0aljp70IOmK21kaIN/6RvDpmBK69hhns5yIJhgdMMK2y70JPrAECo00IvQZIFzqrtqKhDK4VYxsPBLU9ERugU3a2ywuHpyQCEdF5C3Y2YkmPJQG8N8YIBJ51yAuMoAGIwUAAdGqXVYanBEC8wDfsxXsvgqCDHbQXEelCYbYHlPG920oEqqVWZoJ0+GMfelbVJCJiXYQAIgia5m0FT7Z+GDcekl9umFbFagvfq4GI1QLWPyBtNhaZFq+BKtWVmaBfveoMxQ86hDBogiCpyR/DKHezueR5Zfv0ao1ABJFs+XPPmSsCRGzWO2jJ4JCNK2OxMAJVqov3DIvYhdB6iCBpAiKzBzrtUJgzqfYTD67BwgyqNkJg3BBCCF4QXQC8JT+DRet6D2m7I9omncyfr8sC9pHqgmElmh7ZiyA4D3iygYk9BBJ6VQo4oCx8apRawLihJ8ceCJqMSdnusOwhiMQGiDocCLbJa5gZgWr7hTb2Czxz631SNhBYNRDLHvCDNtamCBGBGOu0wwFYwFvtBa2GshDWOXWc/AQWcXCZf1uIQCpZkhlhrRpobb9MTFD+b9QCgGGKQFDb2kIVNZCimwQwrvFlI1U70otALHkEbQvn99xZTZl8lj0ySrTal7ee3mTh+9kOv2Swk9RiouJ1SbQ2m8G2yDzr4RtiR0EgCLN4M1EEwpzB1raabTwKWPITU/eI1GTqWfZI2k0yApKUUuh1zfeLarh+fNDkevPCBPBWlQwyZUVEYLUFgprImiDoNBTDkIaasiuw2kGS9uKb8jE6DcirIiKWxWgmifYCscoRELsyopBm8+t+/qBqdxUm8Klx3HkRgW+cQSZxL2g1wbAGwJP13ofgYdWGRJlA0ldgYUiHQaktOsTamPmhLWgsx4HjzFRJrYeUnQE/MaKfHbL77YMKy2Z/zkAEcdDkMdEik1Z6FxF58DCsSaTXhki1g7dOiQsxolktYQghGIh0ocksZtUAhZx+4N6ZLKt7oNMMHG0QQRyGtiAwi/9+otr7zsgQibOGAjwX0gZtgaQtMtpETQitiYBEExeTam+NT3aP915M5yW/ssCzm0isBpEnSw8QxMGp2rJ/7EJaWkdjM7LWDRE+2BZodfBZrwagVQuBCa1472tD9ikvYnoZY/JmyzsEMRN2kZmIgwZj1Vm/jnmcaXIRuOhayXTsU6PUQRB0MChEjbadJDfedyXKT9vgZ8L6ZjGhEQdNAt+x9ZWBwPdr0WC3rcWVVDlrUQR1KVgtmvwPXRcUud8DnvvK2lKbDYlZ406CltZxmIm00muYiGesZiX/T67YmQy2gBerjpPPhIFZgiPn2erakhZxWEx+iSbKv/IgJ9MxeZ8GA7GajFVuJyFUGwdUp+h4sRBhtAjvd/y9VxkGZlBmHSKSJkFMTdnpc+BpPFfG9+woTNsSQYffLL1/0fcO1gafsQqQN8hifucwOK2zn0SO4xx67N/Hmvi1N80SJqkzVTyx2l07Hywripm0Esy7lEVSfSH2MF9tr5ymt8yE5Z2n8PHxcZ41w0yTt2UpPLvJXniR0dtBqXgNCIWwvPHBakb4fewIkd1xgPeJ90zD9PxZFHxdtmAvt0mNvfWUvav3RnCvXk5E3mYbaZtS4ooP3uYC636/Qsv2uh3EuuYQ/Xsk2QVTfrdC8I1bc+w65Hm6F6/xlySZ45XmN2DjrGnPD+OzxL9lWtji7m/zPe8szypAS9uMwkp4vbe7dG0ev3lNRneVuqPDvNIvHlKnsX5BWnh2Wy44yCkwvSXP9zHrX90oG4dEROPlGOz592oh764pw6RPcP/aLcI2YXO/fnwP9jc7bAmvEzlrfrbOcvwZSxhn0bW8yTbTNmfHUxbs2+zQo5TRvIdz0ucHLgBaO3DTcJ9y8B6dKz7tJGVrlt0k7cZJthlkt397dXVMYPPhvC2WJO33YgWmJ3VOVZ1j23kAqVj8WdcSEY2fj9Kh10UcIOjBNQWCwsGHKybIguVbOxEdK5EO1lqnzmkTTDtMlJ2dr6/LI7BTJMm1QNtvyk2cOpt8kaXzl07VLl5B2qTIv0kBo3WOdEgGIl1SR07JuSk02LqDAgnaVRvwLA66NNSJ7SHV4ekuNW736cRqvGwxfIfVDdkxgIRhpaJnW/YHsIvswhRoyp6kX4el0XKO5WElytclHu6RHwfpXc3TMGVHFbA5esir/XUIlmuvcfbRdzsbSffL3PXrogjXf2MA1vecYvLZrV2EwedDsJdxbX8XsHyogtG6nTWJbtlf/E0tQLHMarKXZ23AjpfvwK60wqL0Dowb+GarPRBpW+1zrA0RdKt7Sii2Bss/g+UtWH6g1BC26nROBvEkvI65NoPZvAfMAtb8XMnxmLL8FNj8uC1p+0dmyo7ovavB8q6060ewjh+aC3uw1tVStlRHHeSCsxjdgkXQLWV/BLtjg/qT78BOsqOuinODMf6BZb0D6xu3AsuvUvYbQ2wDtpI3FRs4u4/RFRNib5tbfZWyb4OdU63jbBwc2wfltXZiDUFf5lmebzP9iJ8HW5N1XAXP9m7AVhwu+ZZnpMFkG0wL9CIb9I72RbEHemG67b60oS9g41S6+I2c3fo1L4Hdkfahxp1XeSsoJnu2MDW9DvZpNmjdvhD4WzYgN6yVOIJubYPHhszk3rruDcqiWN5jYdflavHIdVUb11+UwpksBflbsHOw3rwBdkmz1t4CE6ndmzET2Z0LKxsTm9jsY7CXbUjmJaXQu31h75iZ1uNIzpZi1XSQLEFbSo8eG98r73a1E34GW4VQaFuIfKiqKhdkHwBaVNj146e4QS9viC7LxxXJTG7LtYudnGnTbYlbebeXb0tSqyLPWXo/tcHMvPLjhraO1n4GWrfuT9jq5Ep2PXLFr/dNNPkFNhDE3u0r66efazgm3CRwd6wwKZhHQY7LuHVhXmMDXVepj+s2lDWa5NbmmQ7t2to8Egd0xLKzfnxBGhzYXIv8atitfTiYutshv006MjcfxrrOu7Dq85SFT7uGmZlwrglbqzar5rHejtpH7DXyg8rkklOo42lP8yzMoN/00eQKgkcx54VxI3ay60F8dqk+MZDXpAE6chtbdkW0o6jDHMgd5z/UpWjzUBzUNd/3ndf9JBtMtWILPK5bVfgwnggz7Ghb24x2b8rQvpi+8jaeZAMEdduOpSqWeEzaEjFad7gsNuNsyhwnQKYQYnXfJ6UBDDf8qJVp4ocDH7di9HGuzdhWzx6CPWDZp6UBpKUV9+3/5TgIDtGu9Ii2OxG/RGhpw7Lr1O3zYOu9PW5s8EmJpYNYolW36m+beXDxbI4yjHMg2e79jx+lQRU24m1H1fTQquimQtvxWpfM1umsZBY+oJVhwJut8LRSsNuNPW53mw4hHMVqq6rTjV0SSoHnQaL5ML34NNhemTf7vzK/RyIO5kFhCGJmhclxDztVv0/hz1zAHvKqNPANh6Y2s3hr1boORxUQecFDJXFdM+nlfYyWtu3hzh75zD/xbGubQxtmYeO6BwbRHMkw3qiknVqYwd6OKiOelgbBuZqw40H0oApzz4XVVUbM7ZpS511735adbOOHL9kGaKeA97jlg7GK0PlKO20DR3GWfVp1Em3qTugbwfUjG6TsZFcdRgf9oDP7LhG60gOy9mMmtAvYXVhmW963aVT4jg3gm1IR3dQ8wCvZtdJO3WOwi1tWfdVvSg6oZtldhUCF4zABksF2R8GNlSbLW23pgghqH5ZuVGC3xRy0CcyuI361r2KOwCaUv+GNmi07261IXMn7wR+XRnFtTc8O+7pi7rwu9n0ObOs0rKqy903Xq/yCm/wWBHXmQbSu4rfFBy62DH3HsuV1s3GwM/FKnBpBlblKKLHbtblPPDbMYbcDPijh8H1Eat5hq8rkfTnDQraD5JvVxovAh2D2MbnDuQcFIoLu90BZxdVzrFtJWvqOZVfiwD7YXyIovQR8MEJgpFUAdO562K/UlGhoDwL/xZZZF6jvgtSLODjKVkxUSO6AihvxNRITlT4KBD16FLuNswYz3bcu9n3Esqu8+HZL2NJhItP7jzPC7RyM8kFjeabs7n5ZYa0RbFK4c58CP/CYzdSjuRUUrcuf1MHWb7yF2vTKaeb+SHRtuGNty1DFsnyYb5+YfGPixMFlfykHD3mtwur5BuPiaXMdhN/2TfeOyPX+sCz1vhSon7+pZFhKC+v8NmC1OPnhYDZEnieyqkSqA/YZ7LojveSe14Rdyu+WHsa5rO+w/CYtj4pTK1IMhUxo1T0wCznso8uZzwpl69wjvFUitY/CtLfLBPb2OBKxSm85l6L33sfknHP1cxeHm9wwYTMpDxpZbN3pDcuPXBOnnl0kPahNgB/Klhk/p4bL8dtxEZA01Uw5x03TNORowjrXD2f5RqpDOxcSSbKDKg+DWxd2ICjl+R2NyZNOfNJlcM3DwlTKeY+sUR8V30igKRhRpoRoWYTKuyci15gu+NmwMQCitUayvevUFaZEULa2UUeOOBljEjkiPcC6BJGm3ppjw3stwKzTOfzrnLNzosxNb6CqrgWwGD/T3wAtOeeG1LvSbRo0QHxoptkuzrmqm+JQ3d8K2OvPlaiACQ2Xaj62s1sNw6ra2IH70rAoO7AignZgDTCqU4+ZhwC+65nyPZtjV31dhkRlf/FPBcmA93k6hPF10CqG0Hkpk0zWhl0dgBAfDKQLU9ZzvmcbQgid94/aTWzlLdCqIuLHqtz91JKpPXEjMHn77qtmwqrZ56dJKPUOo3Uq4eUZKo8LoB3/RXPe7C2UjuZaJfjSdPoXYH/d9bJmqtvHB1X7q4NpuGFy1Pe9tW/2gUzu+x+BrXcYzUFkxx5GkylFx/27Vep/SllgMaTOH/RxGWdfEWZqWMeRa/9s7b/7JVjMe9C3sTa8qFYJMEs45H2wpQ7+XbCIqZ0mqAQ1i/Fx/aDiJTCVkRsmiwQzuIjf7N/3wRoNyGRDyG3kWdDePqjeXwLDOtgUkuW3Gyv+DiwQ1NTVqTTpr2xywaSeiZjt+82Wxfb4FVhpNYiXoAazWhg/adZfg596R+Bj9PKutJ12xC/A9g3nQZdOO1Q7jKa+KmdFELOmtsTE9F4TzywY39VgiNZaa1OWoAZVqpHmUq4EQVCm3jbO2mDfYlogtjzXCMY3FXc00c+Kv7ISaU6CBgg6bUUQXHxPzgK+Tms5Tm80xMNbpzq0gI9dalH5YXRbCYNZYLwBFhI7Xgo0mMgp2ZfhotU+hIG6wHnmylIuM/lPuVGpgHUG6NxLPAt4Y908iHKJHTgbX9toeWJRZCWbjOx90mnvwuQpRl4Ab8xLrNr1zh2GaR317SvURXCtiXk8A/AYbIYJwLeBn29ABHzgegYwr+Iw5HR44cXFEqkjN4RgvK/0d5WNzm4CID4ky07tMDy5fIhpUPfN4FQiR8OzSga+sW3XhYZJmRuPA8oWJyTZgVUpmIjkngUbNq1YB0V+7untCm+pSUZEfDSm8ys2uN5r19Y2wRjrIjANUXreGKihlVF+Vcz7adkCiYGVk5kdrCVUfbqv0k8eQFDrfWKKz7LBdnJnG0IeMVpP88RLkiWwDsGvS6q/6CjCkZRZrXla/+AP53j6PMcIvrW5Km2pdb3RXO3fVwthjDECk/x/PdITYvvWZ68dreuwSuHSYVQOANA6Nf852KDOsW09IEATsAoo04N4J7ydwvD4T7FabwJrk8zsZE0xmfuJ5qqIVSQZcXCJEtC+qi1/dXWkLYAYeqdDyPPDKl+cDmP0aN0QWzUQq9rk4Zf/AdakQ8N5pGNMtrcGdcnD7UJz3yLN6VRI56z3nKcEJm2iDcb/W7yAwA99NFN3zTTDqk7cTRGZetpNtKpWggaIHQSW0qCOUxv/Cdwy0DOKwHjA8CZW388suxqIV/wQMzRtUG4aj1YTYMnDDEradO1EhL+BjTxGVUQSc8yTFmGaGu2qrL4KeU6ktUME2kYTkJxHUCtAb33b5SmobZAYveDdUWOYl9mEED0nQOzSJoJIdQ5r7t4rw8UmeVCMGV/mjLaIpH3SPgLRtSgzTqNj3zuyIcYcxt5oKHxHyBxAFvjQ5iZjjrYXQRjsUjLZLiXKuXRmGutKq4lS/VLCPVhB4uSalK20CBjHHkgawL1lZxJFiC9DvOc4sRdINQp2kdTeBONhQkPWe2aJZMVo1zUi6Jq4DAKt0FZG0rnOg62a5hG0RXRJKMyDN9Eqe0TWLjoD78VqAAwncsxNyGMfJbD1Oc7bBlkF5XtVDQjKrAmBJKgB2tiyBwxLqIaZdbqbf3RbZRjXGZZAEcFFoZRtiexIaodO2QeNAMSqFZjGhMBuyvsmZW0MOiKa5x70aiBoNRmrMbD3tkFwMc90hSEDRNdhqEwp46tcLE+jOaga885V3sxHia6Hp5Bzni1ErOXgmRtJ5HMKafDoBgECeW/yzZNv1SLoPFECkedJvj74lj1alqCmTMvNA3QplMY1VMOfqwG0c4ax4toFLRAbg+iyLeEi4Ck1qetTL9bZ1InngVqEvpTrFUnigcQSaFYiMOSsTK8NQwaGxdAE1lOCIFn4oRfAd74ywdYnK1A9By1nNOfwvMdkSwxWBIaM7TlZKz2xsnSuowRry5RZmR9sXNtRVcvXB/Lw3GawGsQOMK5N5W+sFUHoBUFbSU3VJRGWnpZzXdd1q1yoWYYIfB8g8NRCEBw6ZcMB3Ek0COTtkAlmS2o+ujz8u6vAymCNBvhslYhnItciuq6bMngsgpY9/NAM0+xIEWSs+xqZpW+N16XkED+1QcL2CJqi6yIZALCMTlsOEOkDlmglPHWd5onpIvAuCFt4CujYJc9Dch08dbEUV7TOAG0eqcydn+fIJ5pLb8qg72XG3Fj5e/3KDEBsvYj0FiZ4wxI0QiB9gnF9E4/BMpV6GMMRqRFPASb07K31lr3n3g9WgJCi630cehHx7Qy1agvgXS1iNX20hNR2Q376BABhEMvei8gQyjiGsnnWbBBLfBeds3bQFnYQIDgJPaImWJKgHTxbBHWaeW+G6lM11WEu+qZ9Hyvns3lSu3ESchQkWM9KbJPnFgjai8BzN81QzxssdjSrNKs2BNfnSeaBEMgjaeycl0H7hgykDdVUQwA+9FXb4P12Oehauq6OGVK1bdzbV95Ll+ygwbMBWrUi8M30rKEXIPFSegzvAgDrvNEEBDUm59uCMzC277OMWJK68CY0q5jD1/m4LXBd0+Ic2bYK69ZmkxdjIxAz2Fk4t9qKUVuBNc7kwC+SpsDaxcZAus7EMmZyZS9GE5pyFNVcNPn5qP36vu2UdNSEYEyZ5FsZJ4VHgoEg9vMq9srKJhcUZJZtvAgiBfjErjdlAPjKTsvBwGhCPx/yNVHt/vVw9tHH+eu+rXtyqkQNNyEEY+IEemWcLlNGEZO1BpPtIgLTTtwj4ldW8Bz+8D6aNkxJj1Us8n77/Ob4os/r/X5QWJjLSoiY+9AZs4W89qWwLijYpDilxmhCCKlpmHbHem2aPx4cuZXPbTzsjMigHREX3nitOGE+4SYaEzrLDROVw4SOCm7p/nX++eS18+34DLcacz4rKXT5DKIfT82ZUbYhNBnk5jis3cFj9/H64/lg5azJ8X54UNoWsiNmWwZ+f+NzFZTMq9Ok6JAiuVD0/nVw6CM9PG+U6L5tmzyic2YMTuY4zgRI7OxDlIdEoDvdXjg08uPj4+PzfB3LmX5MD44sq8wJ6sOOvIDE0PMOJR9yVyEp0e30eXn1vNuPj8/z6UrVKYTjlgqrJJKyXaVlAJ8GVvcTIRdS3InG6/nz8sbhvBPg8+n0NY4LaN5kOZbGZdUliwT4VKlNPpgkUJeG3onGr9P5fHnzJOH1mY+f5/PpdN0c97hPemlfBrFtoR6cuDmdyjiO4/V0/oair4FdUBdCU83NK0iOk6+oyo+PxxzH8framZ4vgp0IvYK8YWUd2nY4UEg8kbKA/Hz53NG3wFZUvo5FZNTHFRJvTpjMu3xC+faJrr8AO0M+ncYHEm7a5Zkpz789d/bXYMsJu7fNtlvk6H28Xc9/cwTx34CdNfRO1t+//vCw7z8D+/Fxvu4K6g81/P8LsB8f59tYc8EfQ/1jsMXTKFww/vlh2X8M9uNzcpHXDsn/T7BTaGc8/YPzx/8e7Mfn7U63f3K++z8A+3G5/guyfnx8/B+w6b8IeP0KuQAAAABJRU5ErkJggg==","overlay":true},{"id":"US_Forest_Service_roads","name":"U.S. Forest Service roads","type":"tms","template":"https://osm.cycle.travel/forest/{zoom}/{x}/{y}.png","scaleExtent":[0,19],"polygon":[[[-124.7617886,48.4130148],[-124.6059492,45.90245],[-124.9934269,40.0557614],[-122.5369737,36.8566086],[-119.9775867,33.0064099],[-117.675935,32.4630223],[-114.8612307,32.4799891],[-111.0089311,31.336015],[-108.1992687,31.3260016],[-108.1871123,31.7755116],[-106.5307225,31.7820947],[-106.4842052,31.7464455],[-106.429317,31.7520583],[-106.2868855,31.5613291],[-106.205248,31.446704],[-105.0205259,30.5360988],[-104.5881916,29.6997856],[-103.2518856,28.8908685],[-102.7173632,29.3920567],[-102.1513983,29.7475702],[-101.2552871,29.4810523],[-100.0062436,28.0082173],[-99.2351068,26.4475962],[-98.0109067,25.9928035],[-97.435024,25.8266009],[-96.9555259,25.9821589],[-96.8061741,27.7978168],[-95.5563349,28.5876066],[-93.7405308,29.4742093],[-90.9028456,28.8564513],[-88.0156706,28.9944338],[-88.0162494,30.0038862],[-86.0277506,30.0047454],[-84.0187909,28.9961781],[-81.9971976,25.9826768],[-81.9966618,25.0134917],[-84.0165592,25.0125783],[-84.0160068,24.0052745],[-80.0199985,24.007096],[-79.8901116,26.8550713],[-80.0245309,32.0161282],[-75.4147385,35.0531894],[-74.0211163,39.5727927],[-72.002019,40.9912464],[-69.8797398,40.9920457],[-69.8489304,43.2619916],[-66.9452845,44.7104937],[-67.7596632,47.0990024],[-69.2505131,47.5122328],[-70.4614886,46.2176574],[-71.412273,45.254878],[-72.0222508,45.0059846],[-75.0798841,44.9802854],[-76.9023061,43.8024568],[-78.7623935,43.6249578],[-79.15798,43.4462589],[-79.0060087,42.8005317],[-82.662475,41.6889458],[-82.1761642,43.588535],[-83.2813977,46.138853],[-87.5064535,48.0142702],[-88.3492194,48.2963271],[-89.4353148,47.9837822],[-93.9981078,49.0067142],[-95.1105379,49.412004],[-96.0131199,49.0060547],[-123.3228926,49.0042878],[-123.2275233,48.1849927],[-124.7617886,48.4130148]],[[-160.5787616,22.5062947],[-160.5782192,21.4984647],[-158.7470604,21.2439843],[-157.5083185,20.995803],[-155.9961942,18.7790194],[-154.6217803,18.7586966],[-154.6890176,19.8805722],[-156.2927622,21.2225888],[-157.5047384,21.9984962],[-159.0093692,22.5070181],[-160.5787616,22.5062947]],[[-167.1571546,68.721974],[-164.8553982,67.0255078],[-168.002195,66.0017503],[-169.0087448,66.001546],[-169.0075381,64.9987675],[-172.5143281,63.8767267],[-173.8197023,59.74014],[-162.5018149,58.0005815],[-160.0159024,58.0012389],[-160.0149725,57.000035],[-160.5054788,56.9999017],[-165.8092575,54.824847],[-178.000097,52.2446469],[-177.9992996,51.2554252],[-171.4689067,51.8215329],[-162.40251,53.956664],[-159.0075717,55.002502],[-158.0190709,55.0027849],[-151.9963213,55.9991902],[-151.500341,57.9987853],[-151.5012894,58.9919816],[-138.5159989,58.9953194],[-138.5150471,57.9986434],[-133.9948193,54.0031685],[-130.0044418,54.0043387],[-130.0070826,57.0000507],[-131.975877,56.9995156],[-135.1229873,59.756601],[-138.0071813,59.991805],[-139.1715881,60.4127229],[-140.9874011,61.0118551],[-140.9683975,69.9535069],[-156.176891,71.5633329],[-160.413634,70.7397728],[-163.0218273,69.9707435],[-164.9717003,68.994689],[-167.1571546,68.721974]]]},{"id":"Zuerich-zh_uebersichtsplan-tms","name":"Übersichtsplan Zürich","type":"tms","template":"https://mapproxy.osm.ch/tiles/zh_uebersichtsplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[0,21],"polygon":[[[8.45788051507,47.44581806984],[8.57392386647,47.44477300781],[8.5736210256,47.43124146738],[8.60265969038,47.43096170983],[8.60230512668,47.41746267935],[8.63180141114,47.41716275506],[8.62949748819,47.33628349035],[8.57161615958,47.33678511959],[8.57152127804,47.32291600346],[8.54236326252,47.32360349391],[8.54212409958,47.31013293622],[8.48418319606,47.31061691753],[8.48477528296,47.33761606244],[8.45581592704,47.33787246484],[8.45609007471,47.35135390006],[8.42713165453,47.35160640397],[8.42864162259,47.43259434498],[8.45744950771,47.43230644735],[8.45788051507,47.44581806984]]],"terms_text":"Stadt Zürich Open Government Data"},{"id":"uniao_dos_palmares","name":"União dos Palmares AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Uniao%20dos%20Palmares&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-35.97724708197,-9.20751562713],[-35.97719915169,-9.19398393291],[-35.97694352353,-9.19052995603],[-35.97678375594,-9.18606654789],[-35.97702340733,-9.18207624495],[-35.97703938409,-9.17967888719],[-35.97681570946,-9.17734460222],[-35.9766399651,-9.17516802537],[-35.97700743057,-9.17518379771],[-35.97695950029,-9.17070442381],[-35.97673582566,-9.17065710618],[-35.97660801158,-9.16644581169],[-35.97617663907,-9.16221869434],[-35.97609675527,-9.1602628469],[-35.97660801158,-9.1602628469],[-35.9767198489,-9.14608263113],[-35.97654410454,-9.1412243182],[-35.97665594186,-9.13319533758],[-35.97652812778,-9.12183772804],[-35.9764801975,-9.11748388185],[-35.98617809061,-9.11754698145],[-35.9894693031,-9.1173261328],[-36.00560583036,-9.1173261328],[-36.01859493596,-9.11735768262],[-36.04601105553,-9.11721570843],[-36.06734002967,-9.11697908465],[-36.0675637043,-9.16133540973],[-36.06770749514,-9.16404834833],[-36.06745186698,-9.164079894],[-36.0675637043,-9.16657199353],[-36.06777140218,-9.16654044807],[-36.06797910005,-9.20701095785],[-36.04979754756,-9.2071055834],[-36.04671403295,-9.206979416],[-36.02941120224,-9.20708981247],[-36.0135462799,-9.207184438],[-35.99317591134,-9.20732637623],[-35.97724708197,-9.20751562713]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"UrbISOrtho2016","name":"UrbIS-Ortho 2016","type":"wms","template":"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2016&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}","projection":"EPSG:3857","endDate":"2016-01-01T00:00:00.000Z","startDate":"2016-01-01T00:00:00.000Z","polygon":[[[4.3797288,50.7638205],[4.3891701,50.7637662],[4.430283,50.7751656],[4.4350037,50.7750028],[4.464272,50.7864537],[4.4816956,50.7913372],[4.4823823,50.7961658],[4.459208,50.8062556],[4.4594655,50.8166144],[4.4797215,50.8203559],[4.4695935,50.8353735],[4.4689927,50.8457258],[4.4623837,50.8539626],[4.4496808,50.8559133],[4.4459901,50.8599226],[4.4253049,50.8661526],[4.431828,50.8762815],[4.4400677,50.8784478],[4.4310555,50.8901441],[4.4359479,50.8950167],[4.4295964,50.9010255],[4.4165501,50.9075748],[4.4154343,50.9134197],[4.3957791,50.914069],[4.3846211,50.9109303],[4.3811879,50.9031907],[4.3726048,50.9003218],[4.3621335,50.9032989],[4.3485722,50.9034072],[4.3402467,50.9041108],[4.328917,50.902487],[4.3164716,50.8960453],[4.3063435,50.8927429],[4.2900357,50.8898192],[4.2914948,50.8849461],[4.2955289,50.8826176],[4.2956147,50.8809389],[4.2827401,50.8722735],[4.2769894,50.8671277],[4.2780194,50.8591099],[4.2804227,50.8572136],[4.2809376,50.8421489],[4.2719254,50.8403603],[4.2546735,50.8369455],[4.2510686,50.83288],[4.2522702,50.8269708],[4.2434296,50.82182],[4.2440305,50.8154755],[4.2551884,50.8150959],[4.2580209,50.8093472],[4.2721829,50.8101065],[4.2757878,50.8069607],[4.2854008,50.8050623],[4.2890057,50.8069065],[4.298018,50.8059302],[4.3028245,50.7970881],[4.3145833,50.7945382],[4.3162141,50.7862367],[4.3295178,50.7738087],[4.3420491,50.7716375],[4.3452248,50.7733745],[4.3785271,50.7681092],[4.3797288,50.7638205]]],"terms_text":"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsSAAALEgHS3X78AAACnUlEQVQoz11SXUiTYRh93ndz06YMNWcpRmWRSpgO+0EUDYwQ6sZ+oAyti8y6yCyKxOimILqQsLKbukmHSpFFLYlMqSkUmi3/pjZ/Zmv+Tec2bU237z1dfFHSc/HcPOc5HM45DAAREREgGOM217BpzDjs7PEHfNGa2PT47KxN+RFqrYDgjBMRE0JijBMRAKOlzmgxhChDN0cla1ThM0uTE65vsRFxRRkXk3TpMiMBkEQQQFPvw0LDnoYvVStBNwAhBIApj+X6m5OlT/dbnX0AJCHxkbl+zhTWub6XA4ZDqcd3JJTl1to7HV7G2E3TxOU2zaWcKm1YZKO5RlaliNknBma6Bqe7V6SVc5mVrmVFxSvLu1G3bSlwy2jVaXE6IzE0JLzV+jxJlxYTvp5X5j3Qx2ePzPcn6VJVysiUaHXX+d2zy8HqlrE8/bq3xXoiStalr1Fpxl1DRMQ547s27NWGRikVKtmuju9e34pEYcrhWV/f7E8iUinDQrjaH/AREQfAmSJGEzc6P0Qkvbd5ymt7DqfEmEr0Tre/4PFXInK4R7z+hXjtRiIi2aKPtpbi+qxue6vHj5ou+8KvAIBPP7yG3mkAd9sry18ULPrdAAgQAIJS4EZLacXrwqVlDwBJiKAkJCEB+Gz/UNyQ1TxY/8dWIiYgFFx5JPXM7JLjWe8jIgKBM3DGXT5no7lmy9rteVsLiIjJGXPGBcQ2XdqBlKJWa1PHeLOCcRAEhKH7zuKy+4T+QohCDQhGjLBqJBGsNl0teZI3OGMG0GiuKarPNI0aZTEyhq0qHxhjXv/C7bYyASkjIddoqctPOnY07ezf5hHRvwcikg+TXtv9jmsOjy0n8eCpnVeIESMiecnE/6kC0D/Vea+90h/wARAQqwG/AaEjsUbwLtXdAAAAAElFTkSuQmCC"},{"id":"UrbISOrtho2017","name":"UrbIS-Ortho 2017","type":"wms","template":"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2017&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}","projection":"EPSG:3857","endDate":"2017-01-01T00:00:00.000Z","startDate":"2017-01-01T00:00:00.000Z","polygon":[[[4.3797288,50.7638205],[4.3891701,50.7637662],[4.430283,50.7751656],[4.4350037,50.7750028],[4.464272,50.7864537],[4.4816956,50.7913372],[4.4823823,50.7961658],[4.459208,50.8062556],[4.4594655,50.8166144],[4.4797215,50.8203559],[4.4695935,50.8353735],[4.4689927,50.8457258],[4.4623837,50.8539626],[4.4496808,50.8559133],[4.4459901,50.8599226],[4.4253049,50.8661526],[4.431828,50.8762815],[4.4400677,50.8784478],[4.4310555,50.8901441],[4.4359479,50.8950167],[4.4295964,50.9010255],[4.4165501,50.9075748],[4.4154343,50.9134197],[4.3957791,50.914069],[4.3846211,50.9109303],[4.3811879,50.9031907],[4.3726048,50.9003218],[4.3621335,50.9032989],[4.3485722,50.9034072],[4.3402467,50.9041108],[4.328917,50.902487],[4.3164716,50.8960453],[4.3063435,50.8927429],[4.2900357,50.8898192],[4.2914948,50.8849461],[4.2955289,50.8826176],[4.2956147,50.8809389],[4.2827401,50.8722735],[4.2769894,50.8671277],[4.2780194,50.8591099],[4.2804227,50.8572136],[4.2809376,50.8421489],[4.2719254,50.8403603],[4.2546735,50.8369455],[4.2510686,50.83288],[4.2522702,50.8269708],[4.2434296,50.82182],[4.2440305,50.8154755],[4.2551884,50.8150959],[4.2580209,50.8093472],[4.2721829,50.8101065],[4.2757878,50.8069607],[4.2854008,50.8050623],[4.2890057,50.8069065],[4.298018,50.8059302],[4.3028245,50.7970881],[4.3145833,50.7945382],[4.3162141,50.7862367],[4.3295178,50.7738087],[4.3420491,50.7716375],[4.3452248,50.7733745],[4.3785271,50.7681092],[4.3797288,50.7638205]]],"terms_text":"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB","best":true,"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsSAAALEgHS3X78AAACnUlEQVQoz11SXUiTYRh93ndz06YMNWcpRmWRSpgO+0EUDYwQ6sZ+oAyti8y6yCyKxOimILqQsLKbukmHSpFFLYlMqSkUmi3/pjZ/Zmv+Tec2bU237z1dfFHSc/HcPOc5HM45DAAREREgGOM217BpzDjs7PEHfNGa2PT47KxN+RFqrYDgjBMRE0JijBMRAKOlzmgxhChDN0cla1ThM0uTE65vsRFxRRkXk3TpMiMBkEQQQFPvw0LDnoYvVStBNwAhBIApj+X6m5OlT/dbnX0AJCHxkbl+zhTWub6XA4ZDqcd3JJTl1to7HV7G2E3TxOU2zaWcKm1YZKO5RlaliNknBma6Bqe7V6SVc5mVrmVFxSvLu1G3bSlwy2jVaXE6IzE0JLzV+jxJlxYTvp5X5j3Qx2ePzPcn6VJVysiUaHXX+d2zy8HqlrE8/bq3xXoiStalr1Fpxl1DRMQ547s27NWGRikVKtmuju9e34pEYcrhWV/f7E8iUinDQrjaH/AREQfAmSJGEzc6P0Qkvbd5ymt7DqfEmEr0Tre/4PFXInK4R7z+hXjtRiIi2aKPtpbi+qxue6vHj5ou+8KvAIBPP7yG3mkAd9sry18ULPrdAAgQAIJS4EZLacXrwqVlDwBJiKAkJCEB+Gz/UNyQ1TxY/8dWIiYgFFx5JPXM7JLjWe8jIgKBM3DGXT5no7lmy9rteVsLiIjJGXPGBcQ2XdqBlKJWa1PHeLOCcRAEhKH7zuKy+4T+QohCDQhGjLBqJBGsNl0teZI3OGMG0GiuKarPNI0aZTEyhq0qHxhjXv/C7bYyASkjIddoqctPOnY07ezf5hHRvwcikg+TXtv9jmsOjy0n8eCpnVeIESMiecnE/6kC0D/Vea+90h/wARAQqwG/AaEjsUbwLtXdAAAAAElFTkSuQmCC"},{"id":"UrbisAdmFR","name":"UrbisAdm FR","type":"wms","template":"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=urbisFR&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[4.3797288,50.7638205],[4.3891701,50.7637662],[4.430283,50.7751656],[4.4350037,50.7750028],[4.464272,50.7864537],[4.4816956,50.7913372],[4.4823823,50.7961658],[4.459208,50.8062556],[4.4594655,50.8166144],[4.4797215,50.8203559],[4.4695935,50.8353735],[4.4689927,50.8457258],[4.4623837,50.8539626],[4.4496808,50.8559133],[4.4459901,50.8599226],[4.4253049,50.8661526],[4.431828,50.8762815],[4.4400677,50.8784478],[4.4310555,50.8901441],[4.4359479,50.8950167],[4.4295964,50.9010255],[4.4165501,50.9075748],[4.4154343,50.9134197],[4.3957791,50.914069],[4.3846211,50.9109303],[4.3811879,50.9031907],[4.3726048,50.9003218],[4.3621335,50.9032989],[4.3485722,50.9034072],[4.3402467,50.9041108],[4.328917,50.902487],[4.3164716,50.8960453],[4.3063435,50.8927429],[4.2900357,50.8898192],[4.2914948,50.8849461],[4.2955289,50.8826176],[4.2956147,50.8809389],[4.2827401,50.8722735],[4.2769894,50.8671277],[4.2780194,50.8591099],[4.2804227,50.8572136],[4.2809376,50.8421489],[4.2719254,50.8403603],[4.2546735,50.8369455],[4.2510686,50.83288],[4.2522702,50.8269708],[4.2434296,50.82182],[4.2440305,50.8154755],[4.2551884,50.8150959],[4.2580209,50.8093472],[4.2721829,50.8101065],[4.2757878,50.8069607],[4.2854008,50.8050623],[4.2890057,50.8069065],[4.298018,50.8059302],[4.3028245,50.7970881],[4.3145833,50.7945382],[4.3162141,50.7862367],[4.3295178,50.7738087],[4.3420491,50.7716375],[4.3452248,50.7733745],[4.3785271,50.7681092],[4.3797288,50.7638205]]],"terms_text":"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsSAAALEgHS3X78AAACnUlEQVQoz11SXUiTYRh93ndz06YMNWcpRmWRSpgO+0EUDYwQ6sZ+oAyti8y6yCyKxOimILqQsLKbukmHSpFFLYlMqSkUmi3/pjZ/Zmv+Tec2bU237z1dfFHSc/HcPOc5HM45DAAREREgGOM217BpzDjs7PEHfNGa2PT47KxN+RFqrYDgjBMRE0JijBMRAKOlzmgxhChDN0cla1ThM0uTE65vsRFxRRkXk3TpMiMBkEQQQFPvw0LDnoYvVStBNwAhBIApj+X6m5OlT/dbnX0AJCHxkbl+zhTWub6XA4ZDqcd3JJTl1to7HV7G2E3TxOU2zaWcKm1YZKO5RlaliNknBma6Bqe7V6SVc5mVrmVFxSvLu1G3bSlwy2jVaXE6IzE0JLzV+jxJlxYTvp5X5j3Qx2ePzPcn6VJVysiUaHXX+d2zy8HqlrE8/bq3xXoiStalr1Fpxl1DRMQ547s27NWGRikVKtmuju9e34pEYcrhWV/f7E8iUinDQrjaH/AREQfAmSJGEzc6P0Qkvbd5ymt7DqfEmEr0Tre/4PFXInK4R7z+hXjtRiIi2aKPtpbi+qxue6vHj5ou+8KvAIBPP7yG3mkAd9sry18ULPrdAAgQAIJS4EZLacXrwqVlDwBJiKAkJCEB+Gz/UNyQ1TxY/8dWIiYgFFx5JPXM7JLjWe8jIgKBM3DGXT5no7lmy9rteVsLiIjJGXPGBcQ2XdqBlKJWa1PHeLOCcRAEhKH7zuKy+4T+QohCDQhGjLBqJBGsNl0teZI3OGMG0GiuKarPNI0aZTEyhq0qHxhjXv/C7bYyASkjIddoqctPOnY07ezf5hHRvwcikg+TXtv9jmsOjy0n8eCpnVeIESMiecnE/6kC0D/Vea+90h/wARAQqwG/AaEjsUbwLtXdAAAAAElFTkSuQmCC"},{"id":"UrbisAdmNL","name":"UrbisAdm NL","type":"wms","template":"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=urbisNL&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[4.3797288,50.7638205],[4.3891701,50.7637662],[4.430283,50.7751656],[4.4350037,50.7750028],[4.464272,50.7864537],[4.4816956,50.7913372],[4.4823823,50.7961658],[4.459208,50.8062556],[4.4594655,50.8166144],[4.4797215,50.8203559],[4.4695935,50.8353735],[4.4689927,50.8457258],[4.4623837,50.8539626],[4.4496808,50.8559133],[4.4459901,50.8599226],[4.4253049,50.8661526],[4.431828,50.8762815],[4.4400677,50.8784478],[4.4310555,50.8901441],[4.4359479,50.8950167],[4.4295964,50.9010255],[4.4165501,50.9075748],[4.4154343,50.9134197],[4.3957791,50.914069],[4.3846211,50.9109303],[4.3811879,50.9031907],[4.3726048,50.9003218],[4.3621335,50.9032989],[4.3485722,50.9034072],[4.3402467,50.9041108],[4.328917,50.902487],[4.3164716,50.8960453],[4.3063435,50.8927429],[4.2900357,50.8898192],[4.2914948,50.8849461],[4.2955289,50.8826176],[4.2956147,50.8809389],[4.2827401,50.8722735],[4.2769894,50.8671277],[4.2780194,50.8591099],[4.2804227,50.8572136],[4.2809376,50.8421489],[4.2719254,50.8403603],[4.2546735,50.8369455],[4.2510686,50.83288],[4.2522702,50.8269708],[4.2434296,50.82182],[4.2440305,50.8154755],[4.2551884,50.8150959],[4.2580209,50.8093472],[4.2721829,50.8101065],[4.2757878,50.8069607],[4.2854008,50.8050623],[4.2890057,50.8069065],[4.298018,50.8059302],[4.3028245,50.7970881],[4.3145833,50.7945382],[4.3162141,50.7862367],[4.3295178,50.7738087],[4.3420491,50.7716375],[4.3452248,50.7733745],[4.3785271,50.7681092],[4.3797288,50.7638205]]],"terms_text":"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsSAAALEgHS3X78AAACnUlEQVQoz11SXUiTYRh93ndz06YMNWcpRmWRSpgO+0EUDYwQ6sZ+oAyti8y6yCyKxOimILqQsLKbukmHSpFFLYlMqSkUmi3/pjZ/Zmv+Tec2bU237z1dfFHSc/HcPOc5HM45DAAREREgGOM217BpzDjs7PEHfNGa2PT47KxN+RFqrYDgjBMRE0JijBMRAKOlzmgxhChDN0cla1ThM0uTE65vsRFxRRkXk3TpMiMBkEQQQFPvw0LDnoYvVStBNwAhBIApj+X6m5OlT/dbnX0AJCHxkbl+zhTWub6XA4ZDqcd3JJTl1to7HV7G2E3TxOU2zaWcKm1YZKO5RlaliNknBma6Bqe7V6SVc5mVrmVFxSvLu1G3bSlwy2jVaXE6IzE0JLzV+jxJlxYTvp5X5j3Qx2ePzPcn6VJVysiUaHXX+d2zy8HqlrE8/bq3xXoiStalr1Fpxl1DRMQ547s27NWGRikVKtmuju9e34pEYcrhWV/f7E8iUinDQrjaH/AREQfAmSJGEzc6P0Qkvbd5ymt7DqfEmEr0Tre/4PFXInK4R7z+hXjtRiIi2aKPtpbi+qxue6vHj5ou+8KvAIBPP7yG3mkAd9sry18ULPrdAAgQAIJS4EZLacXrwqVlDwBJiKAkJCEB+Gz/UNyQ1TxY/8dWIiYgFFx5JPXM7JLjWe8jIgKBM3DGXT5no7lmy9rteVsLiIjJGXPGBcQ2XdqBlKJWa1PHeLOCcRAEhKH7zuKy+4T+QohCDQhGjLBqJBGsNl0teZI3OGMG0GiuKarPNI0aZTEyhq0qHxhjXv/C7bYyASkjIddoqctPOnY07ezf5hHRvwcikg+TXtv9jmsOjy0n8eCpnVeIESMiecnE/6kC0D/Vea+90h/wARAQqwG/AaEjsUbwLtXdAAAAAElFTkSuQmCC"},{"id":"USGS-Large_Scale","name":"USGS Large Scale Imagery","type":"tms","template":"http://{switch:a,b,c}.tile.openstreetmap.us/usgs_large_scale/{zoom}/{x}/{y}.jpg","scaleExtent":[12,20],"polygon":[[[-123.2549305,48.7529029],[-123.2549305,48.5592263],[-123.192224,48.5592263],[-123.192224,48.4348366],[-122.9419646,48.4348366],[-122.9419646,48.3720812],[-122.8806229,48.3720812],[-122.8806229,48.3094763],[-122.8167566,48.3094763],[-122.8167566,48.1904587],[-123.0041133,48.1904587],[-123.0041133,48.1275918],[-123.058416,48.1275918],[-123.058416,48.190514],[-123.254113,48.190514],[-123.254113,48.1274982],[-123.3706593,48.1274982],[-123.3706593,48.1908403],[-124.0582632,48.1908403],[-124.0582632,48.253442],[-124.1815163,48.253442],[-124.1815163,48.3164666],[-124.4319117,48.3164666],[-124.4319117,48.3782613],[-124.5564618,48.3782613],[-124.5564618,48.4408305],[-124.7555107,48.4408305],[-124.7555107,48.1914986],[-124.8185282,48.1914986],[-124.8185282,48.1228381],[-124.7552951,48.1228381],[-124.7552951,47.5535253],[-124.3812108,47.5535253],[-124.3812108,47.1218696],[-124.1928897,47.1218696],[-124.1928897,43.7569431],[-124.4443382,43.7569431],[-124.4443382,43.1425556],[-124.6398855,43.1425556],[-124.6398855,42.6194503],[-124.4438525,42.6194503],[-124.4438525,39.8080662],[-123.8815685,39.8080662],[-123.8815685,39.1102825],[-123.75805,39.1102825],[-123.75805,38.4968799],[-123.2702803,38.4968799],[-123.2702803,37.9331905],[-122.8148084,37.9331905],[-122.8148084,37.8019606],[-122.5664316,37.8019606],[-122.5664316,36.9319611],[-121.8784026,36.9319611],[-121.8784026,36.6897596],[-122.0034748,36.6897596],[-122.0034748,36.4341056],[-121.9414159,36.4341056],[-121.9414159,35.9297636],[-121.5040977,35.9297636],[-121.5040977,35.8100273],[-121.3790276,35.8100273],[-121.3790276,35.4239164],[-120.9426515,35.4239164],[-120.9426515,35.1849683],[-120.8171978,35.1849683],[-120.8171978,35.1219894],[-120.6918447,35.1219894],[-120.6918447,34.4966794],[-120.5045898,34.4966794],[-120.5045898,34.4339651],[-120.0078775,34.4339651],[-120.0078775,34.3682626],[-119.5283517,34.3682626],[-119.5283517,34.0576434],[-119.0060985,34.0576434],[-119.0060985,33.9975267],[-118.5046259,33.9975267],[-118.5046259,33.8694631],[-118.4413209,33.8694631],[-118.4413209,33.6865253],[-118.066912,33.6865253],[-118.066912,33.3063832],[-117.5030045,33.3063832],[-117.5030045,33.0500337],[-117.3188195,33.0500337],[-117.3188195,32.6205888],[-117.1917023,32.6205888],[-117.1917023,32.4974566],[-116.746496,32.4974566],[-116.746496,32.5609161],[-115.9970138,32.5609161],[-115.9970138,32.6264942],[-114.8808125,32.6264942],[-114.8808125,32.4340796],[-114.6294474,32.4340796],[-114.6294474,32.3731636],[-114.4447437,32.3731636],[-114.4447437,32.3075418],[-114.2557628,32.3075418],[-114.2557628,32.2444561],[-114.0680274,32.2444561],[-114.0680274,32.1829113],[-113.8166499,32.1829113],[-113.8166499,32.1207622],[-113.6307421,32.1207622],[-113.6307421,32.0565099],[-113.4417495,32.0565099],[-113.4417495,31.9984372],[-113.2546027,31.9984372],[-113.2546027,31.9325434],[-113.068072,31.9325434],[-113.068072,31.8718062],[-112.8161105,31.8718062],[-112.8161105,31.8104171],[-112.6308756,31.8104171],[-112.6308756,31.7464723],[-112.4418918,31.7464723],[-112.4418918,31.6856001],[-112.257192,31.6856001],[-112.257192,31.6210352],[-112.0033787,31.6210352],[-112.0033787,31.559584],[-111.815619,31.559584],[-111.815619,31.4970238],[-111.6278586,31.4970238],[-111.6278586,31.4339867],[-111.4418978,31.4339867],[-111.4418978,31.3733859],[-111.2559708,31.3733859],[-111.2559708,31.3113225],[-108.1845822,31.3113225],[-108.1845822,31.7459502],[-106.5065055,31.7459502],[-106.5065055,31.6842308],[-106.3797265,31.6842308],[-106.3797265,31.621752],[-106.317434,31.621752],[-106.317434,31.4968167],[-106.2551769,31.4968167],[-106.2551769,31.4344889],[-106.1924698,31.4344889],[-106.1924698,31.3721296],[-106.0039212,31.3721296],[-106.0039212,31.309328],[-105.9416582,31.309328],[-105.9416582,31.2457547],[-105.8798174,31.2457547],[-105.8798174,31.1836194],[-105.8162349,31.1836194],[-105.8162349,31.1207155],[-105.6921198,31.1207155],[-105.6921198,31.0584835],[-105.6302881,31.0584835],[-105.6302881,30.9328271],[-105.5044418,30.9328271],[-105.5044418,30.8715864],[-105.4412973,30.8715864],[-105.4412973,30.808463],[-105.3781497,30.808463],[-105.3781497,30.7471828],[-105.1904658,30.7471828],[-105.1904658,30.6843231],[-105.1286244,30.6843231],[-105.1286244,30.6199737],[-105.0036504,30.6199737],[-105.0036504,30.5589058],[-104.9417962,30.5589058],[-104.9417962,30.4963236],[-104.8782018,30.4963236],[-104.8782018,30.3098261],[-104.8155257,30.3098261],[-104.8155257,30.2478305],[-104.7536079,30.2478305],[-104.7536079,29.9353916],[-104.690949,29.9353916],[-104.690949,29.8090156],[-104.6291301,29.8090156],[-104.6291301,29.6843577],[-104.5659869,29.6843577],[-104.5659869,29.6223459],[-104.5037188,29.6223459],[-104.5037188,29.5595436],[-104.4410072,29.5595436],[-104.4410072,29.4974832],[-104.2537551,29.4974832],[-104.2537551,29.3716718],[-104.1291984,29.3716718],[-104.1291984,29.3091621],[-104.0688737,29.3091621],[-104.0688737,29.2467276],[-103.8187309,29.2467276],[-103.8187309,29.1843076],[-103.755736,29.1843076],[-103.755736,29.1223174],[-103.5667542,29.1223174],[-103.5667542,29.0598119],[-103.5049819,29.0598119],[-103.5049819,28.9967506],[-103.3165753,28.9967506],[-103.3165753,28.9346923],[-103.0597572,28.9346923],[-103.0597572,29.0592965],[-102.9979694,29.0592965],[-102.9979694,29.1212855],[-102.9331397,29.1212855],[-102.9331397,29.1848575],[-102.8095989,29.1848575],[-102.8095989,29.2526154],[-102.8701345,29.2526154],[-102.8701345,29.308096],[-102.8096681,29.308096],[-102.8096681,29.3715484],[-102.7475655,29.3715484],[-102.7475655,29.5581899],[-102.684554,29.5581899],[-102.684554,29.6847655],[-102.4967764,29.6847655],[-102.4967764,29.7457694],[-102.3086647,29.7457694],[-102.3086647,29.8086627],[-102.1909323,29.8086627],[-102.1909323,29.7460097],[-101.5049914,29.7460097],[-101.5049914,29.6846777],[-101.3805796,29.6846777],[-101.3805796,29.5594459],[-101.3175057,29.5594459],[-101.3175057,29.4958934],[-101.1910075,29.4958934],[-101.1910075,29.4326115],[-101.067501,29.4326115],[-101.067501,29.308808],[-100.9418897,29.308808],[-100.9418897,29.2456231],[-100.8167271,29.2456231],[-100.8167271,29.1190449],[-100.7522672,29.1190449],[-100.7522672,29.0578214],[-100.6925358,29.0578214],[-100.6925358,28.8720431],[-100.6290158,28.8720431],[-100.6290158,28.8095363],[-100.5679901,28.8095363],[-100.5679901,28.622554],[-100.5040411,28.622554],[-100.5040411,28.5583804],[-100.4421832,28.5583804],[-100.4421832,28.4968266],[-100.379434,28.4968266],[-100.379434,28.3092865],[-100.3171942,28.3092865],[-100.3171942,28.1835681],[-100.254483,28.1835681],[-100.254483,28.1213885],[-100.1282282,28.1213885],[-100.1282282,28.059215],[-100.0659537,28.059215],[-100.0659537,27.9966087],[-100.0023855,27.9966087],[-100.0023855,27.9332152],[-99.9426497,27.9332152],[-99.9426497,27.7454658],[-99.816851,27.7454658],[-99.816851,27.6834301],[-99.7541346,27.6834301],[-99.7541346,27.6221543],[-99.6291629,27.6221543],[-99.6291629,27.5588977],[-99.5672838,27.5588977],[-99.5672838,27.4353752],[-99.5041798,27.4353752],[-99.5041798,27.3774021],[-99.5671796,27.3774021],[-99.5671796,27.2463726],[-99.504975,27.2463726],[-99.504975,26.9965649],[-99.4427427,26.9965649],[-99.4427427,26.872803],[-99.3800633,26.872803],[-99.3800633,26.8068179],[-99.3190684,26.8068179],[-99.3190684,26.7473614],[-99.2537541,26.7473614],[-99.2537541,26.6210068],[-99.1910617,26.6210068],[-99.1910617,26.4956737],[-99.1300639,26.4956737],[-99.1300639,26.3713808],[-99.0029473,26.3713808],[-99.0029473,26.3093836],[-98.816572,26.3093836],[-98.816572,26.2457762],[-98.6920082,26.2457762],[-98.6920082,26.1837096],[-98.4440896,26.1837096],[-98.4440896,26.1217217],[-98.3823181,26.1217217],[-98.3823181,26.0596488],[-98.2532707,26.0596488],[-98.2532707,25.9986871],[-98.0109084,25.9986871],[-98.0109084,25.9932255],[-97.6932319,25.9932255],[-97.6932319,25.9334103],[-97.6313904,25.9334103],[-97.6313904,25.8695893],[-97.5046779,25.8695893],[-97.5046779,25.8073488],[-97.3083401,25.8073488],[-97.3083401,25.8731159],[-97.2456326,25.8731159],[-97.2456326,25.9353731],[-97.1138939,25.9353731],[-97.1138939,27.6809179],[-97.0571035,27.6809179],[-97.0571035,27.8108242],[-95.5810766,27.8108242],[-95.5810766,28.7468827],[-94.271041,28.7468827],[-94.271041,29.5594076],[-92.5029947,29.5594076],[-92.5029947,29.4974754],[-91.8776216,29.4974754],[-91.8776216,29.3727013],[-91.378418,29.3727013],[-91.378418,29.2468326],[-91.3153953,29.2468326],[-91.3153953,29.1844301],[-91.1294702,29.1844301],[-91.1294702,29.1232559],[-91.0052632,29.1232559],[-91.0052632,28.9968437],[-89.4500159,28.9968437],[-89.4500159,28.8677422],[-88.8104309,28.8677422],[-88.8104309,30.1841864],[-85.8791527,30.1841864],[-85.8791527,29.5455038],[-84.8368083,29.5455038],[-84.8368083,29.6225158],[-84.7482786,29.6225158],[-84.7482786,29.683624],[-84.685894,29.683624],[-84.685894,29.7468386],[-83.6296975,29.7468386],[-83.6296975,29.4324361],[-83.3174937,29.4324361],[-83.3174937,29.0579442],[-82.879659,29.0579442],[-82.879659,27.7453529],[-82.8182822,27.7453529],[-82.8182822,26.9290868],[-82.3796782,26.9290868],[-82.3796782,26.3694183],[-81.8777106,26.3694183],[-81.8777106,25.805971],[-81.5036862,25.805971],[-81.5036862,25.7474753],[-81.4405462,25.7474753],[-81.4405462,25.6851489],[-81.3155883,25.6851489],[-81.3155883,25.5600985],[-81.2538534,25.5600985],[-81.2538534,25.4342361],[-81.1902012,25.4342361],[-81.1902012,25.1234341],[-81.1288133,25.1234341],[-81.1288133,25.0619389],[-81.0649231,25.0619389],[-81.0649231,24.8157807],[-81.6289469,24.8157807],[-81.6289469,24.7538367],[-81.6907173,24.7538367],[-81.6907173,24.6899374],[-81.8173189,24.6899374],[-81.8173189,24.6279161],[-82.1910041,24.6279161],[-82.1910041,24.496294],[-81.6216596,24.496294],[-81.6216596,24.559484],[-81.372006,24.559484],[-81.372006,24.6220687],[-81.0593278,24.6220687],[-81.0593278,24.684826],[-80.9347147,24.684826],[-80.9347147,24.7474828],[-80.7471081,24.7474828],[-80.7471081,24.8100618],[-80.3629898,24.8100618],[-80.3629898,25.1175858],[-80.122344,25.1175858],[-80.122344,25.7472357],[-80.0588458,25.7472357],[-80.0588458,26.3708251],[-79.995837,26.3708251],[-79.995837,26.9398003],[-80.0587265,26.9398003],[-80.0587265,27.1277466],[-80.1226251,27.1277466],[-80.1226251,27.2534279],[-80.1846956,27.2534279],[-80.1846956,27.3781229],[-80.246175,27.3781229],[-80.246175,27.5658729],[-80.3094768,27.5658729],[-80.3094768,27.7530311],[-80.3721485,27.7530311],[-80.3721485,27.8774451],[-80.4351457,27.8774451],[-80.4351457,28.0033366],[-80.4966078,28.0033366],[-80.4966078,28.1277326],[-80.5587159,28.1277326],[-80.5587159,28.3723509],[-80.4966335,28.3723509],[-80.4966335,29.5160326],[-81.1213644,29.5160326],[-81.1213644,31.6846966],[-80.6018723,31.6846966],[-80.6018723,32.2475309],[-79.4921024,32.2475309],[-79.4921024,32.9970261],[-79.1116488,32.9970261],[-79.1116488,33.3729457],[-78.6153621,33.3729457],[-78.6153621,33.8097638],[-77.9316963,33.8097638],[-77.9316963,33.8718243],[-77.8692252,33.8718243],[-77.8692252,34.0552454],[-77.6826392,34.0552454],[-77.6826392,34.2974598],[-77.2453509,34.2974598],[-77.2453509,34.5598585],[-76.4973277,34.5598585],[-76.4973277,34.622796],[-76.4337602,34.622796],[-76.4337602,34.6849285],[-76.373212,34.6849285],[-76.373212,34.7467674],[-76.3059364,34.7467674],[-76.3059364,34.808551],[-76.2468017,34.808551],[-76.2468017,34.8728418],[-76.1825922,34.8728418],[-76.1825922,34.9335332],[-76.120814,34.9335332],[-76.120814,34.9952359],[-75.9979015,34.9952359],[-75.9979015,35.0578182],[-75.870338,35.0578182],[-75.870338,35.1219097],[-75.7462194,35.1219097],[-75.7462194,35.1818911],[-75.4929694,35.1818911],[-75.4929694,35.3082988],[-75.4325662,35.3082988],[-75.4325662,35.7542495],[-75.4969907,35.7542495],[-75.4969907,37.8105602],[-75.3082972,37.8105602],[-75.3082972,37.8720088],[-75.245601,37.8720088],[-75.245601,37.9954849],[-75.1828751,37.9954849],[-75.1828751,38.0585079],[-75.1184793,38.0585079],[-75.1184793,38.2469091],[-75.0592098,38.2469091],[-75.0592098,38.3704316],[-74.9948111,38.3704316],[-74.9948111,38.8718417],[-74.4878252,38.8718417],[-74.4878252,39.3089428],[-74.1766317,39.3089428],[-74.1766317,39.6224653],[-74.0567045,39.6224653],[-74.0567045,39.933178],[-73.9959035,39.933178],[-73.9959035,40.1854852],[-73.9341593,40.1854852],[-73.9341593,40.4959486],[-73.8723024,40.4959486],[-73.8723024,40.5527135],[-71.8074506,40.5527135],[-71.8074506,41.3088005],[-70.882512,41.3088005],[-70.882512,41.184978],[-70.7461947,41.184978],[-70.7461947,41.3091865],[-70.4337553,41.3091865],[-70.4337553,41.4963885],[-69.9334281,41.4963885],[-69.9334281,41.6230802],[-69.869857,41.6230802],[-69.869857,41.8776895],[-69.935791,41.8776895],[-69.935791,42.0032342],[-69.9975823,42.0032342],[-69.9975823,42.0650191],[-70.0606103,42.0650191],[-70.0606103,42.1294348],[-70.5572884,42.1294348],[-70.5572884,43.2487079],[-70.4974097,43.2487079],[-70.4974097,43.3092194],[-70.3704249,43.3092194],[-70.3704249,43.371963],[-70.3085701,43.371963],[-70.3085701,43.4969879],[-70.183921,43.4969879],[-70.183921,43.6223531],[-70.057583,43.6223531],[-70.057583,43.6850173],[-69.7455247,43.6850173],[-69.7455247,43.7476571],[-69.2472845,43.7476571],[-69.2472845,43.8107035],[-69.0560701,43.8107035],[-69.0560701,43.8717247],[-68.9950522,43.8717247],[-68.9950522,43.9982022],[-68.4963672,43.9982022],[-68.4963672,44.0597368],[-68.3081038,44.0597368],[-68.3081038,44.122137],[-68.1851802,44.122137],[-68.1851802,44.3081382],[-67.9956019,44.3081382],[-67.9956019,44.3727489],[-67.8103041,44.3727489],[-67.8103041,44.435178],[-67.4965289,44.435178],[-67.4965289,44.4968776],[-67.37102,44.4968776],[-67.37102,44.5600642],[-67.1848753,44.5600642],[-67.1848753,44.6213345],[-67.1221208,44.6213345],[-67.1221208,44.6867918],[-67.059365,44.6867918],[-67.059365,44.7473657],[-66.9311098,44.7473657],[-66.9311098,44.9406566],[-66.994683,44.9406566],[-66.994683,45.0024514],[-67.0595847,45.0024514],[-67.0595847,45.1273377],[-67.1201974,45.1273377],[-67.1201974,45.1910115],[-67.2469811,45.1910115],[-67.2469811,45.253442],[-67.3177546,45.253442],[-67.3177546,45.1898369],[-67.370749,45.1898369],[-67.370749,45.2534001],[-67.4326888,45.2534001],[-67.4326888,45.3083409],[-67.3708571,45.3083409],[-67.3708571,45.4396986],[-67.4305573,45.4396986],[-67.4305573,45.4950095],[-67.37099,45.4950095],[-67.37099,45.6264543],[-67.6214982,45.6264543],[-67.6214982,45.6896133],[-67.683828,45.6896133],[-67.683828,45.753259],[-67.7462097,45.753259],[-67.7462097,47.1268165],[-67.8700141,47.1268165],[-67.8700141,47.1900278],[-67.9323803,47.1900278],[-67.9323803,47.2539678],[-67.9959387,47.2539678],[-67.9959387,47.3149737],[-68.1206676,47.3149737],[-68.1206676,47.3780823],[-68.4423175,47.3780823],[-68.4423175,47.3166082],[-68.6314305,47.3166082],[-68.6314305,47.2544676],[-68.9978037,47.2544676],[-68.9978037,47.439895],[-69.0607223,47.439895],[-69.0607223,47.5047558],[-69.2538122,47.5047558],[-69.2538122,47.4398084],[-69.3179284,47.4398084],[-69.3179284,47.378601],[-69.4438546,47.378601],[-69.4438546,47.3156274],[-69.5038204,47.3156274],[-69.5038204,47.2525839],[-69.5667838,47.2525839],[-69.5667838,47.1910884],[-69.6303478,47.1910884],[-69.6303478,47.128701],[-69.6933103,47.128701],[-69.6933103,47.0654307],[-69.7557063,47.0654307],[-69.7557063,47.0042751],[-69.8180391,47.0042751],[-69.8180391,46.9415344],[-69.8804023,46.9415344],[-69.8804023,46.8792519],[-69.9421674,46.8792519],[-69.9421674,46.8177399],[-70.0063088,46.8177399],[-70.0063088,46.6920295],[-70.0704265,46.6920295],[-70.0704265,46.4425926],[-70.1945902,46.4425926],[-70.1945902,46.3785887],[-70.2562047,46.3785887],[-70.2562047,46.3152628],[-70.3203651,46.3152628],[-70.3203651,46.0651209],[-70.3814988,46.0651209],[-70.3814988,45.93552],[-70.3201618,45.93552],[-70.3201618,45.879479],[-70.4493131,45.879479],[-70.4493131,45.7538713],[-70.5070021,45.7538713],[-70.5070021,45.6916912],[-70.6316642,45.6916912],[-70.6316642,45.6291619],[-70.7575538,45.6291619],[-70.7575538,45.4414685],[-70.8809878,45.4414685],[-70.8809878,45.3780612],[-71.13328,45.3780612],[-71.13328,45.3151452],[-71.3830282,45.3151452],[-71.3830282,45.253416],[-71.5076448,45.253416],[-71.5076448,45.0655726],[-73.9418929,45.0655726],[-73.9418929,45.0031242],[-74.7469725,45.0031242],[-74.7469725,45.0649003],[-74.8800964,45.0649003],[-74.8800964,45.0029023],[-75.0662455,45.0029023],[-75.0662455,44.9415167],[-75.2539363,44.9415167],[-75.2539363,44.8776043],[-75.3789648,44.8776043],[-75.3789648,44.8153462],[-75.4431283,44.8153462],[-75.4431283,44.7536053],[-75.5666566,44.7536053],[-75.5666566,44.6909879],[-75.6290205,44.6909879],[-75.6290205,44.6284958],[-75.7540484,44.6284958],[-75.7540484,44.566385],[-75.817312,44.566385],[-75.817312,44.5028932],[-75.8799549,44.5028932],[-75.8799549,44.3784946],[-76.1300319,44.3784946],[-76.1300319,44.3159227],[-76.1926961,44.3159227],[-76.1926961,44.2534378],[-76.3182619,44.2534378],[-76.3182619,44.1916726],[-76.3792975,44.1916726],[-76.3792975,44.0653733],[-76.4427584,44.0653733],[-76.4427584,43.9963825],[-76.317027,43.9963825],[-76.317027,43.9414581],[-76.5076611,43.9414581],[-76.5076611,43.8723335],[-76.3829974,43.8723335],[-76.3829974,43.8091872],[-76.2534102,43.8091872],[-76.2534102,43.5665222],[-76.5064833,43.5665222],[-76.5064833,43.5033881],[-76.6331208,43.5033881],[-76.6331208,43.4432252],[-76.6951085,43.4432252],[-76.6951085,43.3786858],[-76.8177798,43.3786858],[-76.8177798,43.318066],[-77.682,43.318066],[-77.682,43.3789376],[-78.0565883,43.3789376],[-78.0565883,43.4396918],[-78.4389748,43.4396918],[-78.4389748,43.3794382],[-78.8803396,43.3794382],[-78.8803396,43.3149724],[-79.1298858,43.3149724],[-79.1298858,43.2429286],[-79.0669615,43.2429286],[-79.0669615,43.1299931],[-79.1298858,43.1299931],[-79.1298858,43.0577305],[-79.071264,43.0577305],[-79.071264,42.9294906],[-78.943264,42.9294906],[-78.943264,42.7542165],[-79.069439,42.7542165],[-79.069439,42.6941622],[-79.133439,42.6941622],[-79.133439,42.6296973],[-79.1947499,42.6296973],[-79.1947499,42.5663538],[-79.3786827,42.5663538],[-79.3786827,42.5033425],[-79.4442961,42.5033425],[-79.4442961,42.4410614],[-79.5679936,42.4410614],[-79.5679936,42.3775264],[-79.6906154,42.3775264],[-79.6906154,42.3171086],[-79.8164642,42.3171086],[-79.8164642,42.2534481],[-80.0052373,42.2534481],[-80.0052373,42.1909188],[-80.1916829,42.1909188],[-80.1916829,42.1272555],[-80.3167992,42.1272555],[-80.3167992,42.0669857],[-80.5063234,42.0669857],[-80.5063234,42.0034331],[-80.6930471,42.0034331],[-80.6930471,41.9415141],[-80.9440403,41.9415141],[-80.9440403,41.8781193],[-81.1942729,41.8781193],[-81.1942729,41.8166455],[-81.3190089,41.8166455],[-81.3190089,41.7545453],[-81.4418435,41.7545453],[-81.4418435,41.690965],[-81.5053523,41.690965],[-81.5053523,41.6301643],[-82.7470081,41.6301643],[-82.7470081,41.7536942],[-82.8839135,41.7536942],[-82.8839135,41.5656075],[-82.9957195,41.5656075],[-82.9957195,41.6270375],[-83.1257796,41.6270375],[-83.1257796,41.6878411],[-83.2474733,41.6878411],[-83.2474733,41.7536942],[-83.3737305,41.7536942],[-83.3737305,41.809276],[-83.3106019,41.809276],[-83.3106019,41.8716064],[-83.2474733,41.8716064],[-83.2474733,41.9361393],[-83.1843447,41.9361393],[-83.1843447,41.9960851],[-83.1207681,41.9960851],[-83.1207681,42.2464812],[-83.0589194,42.2464812],[-83.0589194,42.3089555],[-82.8685328,42.3089555],[-82.8685328,42.3717652],[-82.8072219,42.3717652],[-82.8072219,42.558553],[-82.7553745,42.558553],[-82.7553745,42.4954945],[-82.5599041,42.4954945],[-82.5599041,42.558553],[-82.4967755,42.558553],[-82.4967755,42.6833607],[-82.4328863,42.6833607],[-82.4328863,42.9342196],[-82.3700552,42.9342196],[-82.3700552,43.0648071],[-82.4328863,43.0648071],[-82.4328863,43.1917566],[-82.4947464,43.1917566],[-82.4947464,43.5034627],[-82.557133,43.5034627],[-82.557133,43.8160901],[-82.6197884,43.8160901],[-82.6197884,43.9422098],[-82.6839499,43.9422098],[-82.6839499,44.0022641],[-82.7465346,44.0022641],[-82.7465346,44.0670545],[-82.8708696,44.0670545],[-82.8708696,44.1291935],[-83.008517,44.1291935],[-83.008517,44.0664786],[-83.1336086,44.0664786],[-83.1336086,44.0053949],[-83.2414522,44.0053949],[-83.2414522,44.9962034],[-83.1806112,44.9962034],[-83.1806112,45.067302],[-83.2455172,45.067302],[-83.2455172,45.1287382],[-83.3065878,45.1287382],[-83.3065878,45.2551509],[-83.3706087,45.2551509],[-83.3706087,45.3165923],[-83.4325644,45.3165923],[-83.4325644,45.3792105],[-83.6178415,45.3792105],[-83.6178415,45.4419665],[-83.8084291,45.4419665],[-83.8084291,45.5036189],[-84.0550718,45.5036189],[-84.0550718,45.5647907],[-84.1235181,45.5647907],[-84.1235181,45.6287845],[-84.1807534,45.6287845],[-84.1807534,45.6914688],[-84.3111554,45.6914688],[-84.3111554,45.9337076],[-83.8209974,45.9337076],[-83.8209974,45.8725113],[-83.4968086,45.8725113],[-83.4968086,45.9337076],[-83.4338066,45.9337076],[-83.4338066,46.0016863],[-83.4962697,46.0016863],[-83.4962697,46.0668178],[-83.5599956,46.0668178],[-83.5599956,46.1261576],[-83.9954558,46.1261576],[-83.9954558,46.1931747],[-84.0591816,46.1931747],[-84.0591816,46.3814972],[-84.1152614,46.3814972],[-84.1152614,46.4953584],[-84.0591816,46.4953584],[-84.0591816,46.5682653],[-84.2579545,46.5682653],[-84.2579545,46.5051232],[-84.3071879,46.5051232],[-84.3071879,46.5682653],[-84.4415364,46.5682653],[-84.4415364,46.504525],[-84.9965729,46.504525],[-84.9965729,46.6842882],[-84.9298158,46.6842882],[-84.9298158,46.818077],[-85.3165894,46.818077],[-85.3165894,46.7535825],[-87.5562645,46.7535825],[-87.5562645,47.4407371],[-87.6825361,47.4407371],[-87.6825361,47.5035554],[-88.2560738,47.5035554],[-88.2560738,47.4433716],[-88.4417419,47.4433716],[-88.4417419,47.3789949],[-88.50683,47.3789949],[-88.50683,47.3153881],[-88.6312821,47.3153881],[-88.6312821,47.2539782],[-88.7569636,47.2539782],[-88.7569636,47.1934682],[-88.8838253,47.1934682],[-88.8838253,47.1284735],[-88.9434208,47.1284735],[-88.9434208,47.0662127],[-89.0708726,47.0662127],[-89.0708726,47.0026826],[-89.2565553,47.0026826],[-89.2565553,46.9410806],[-90.3677669,46.9410806],[-90.3677669,47.6844827],[-90.3069978,47.6844827],[-90.3069978,47.7460174],[-89.994859,47.7460174],[-89.994859,47.8082719],[-89.8048615,47.8082719],[-89.8048615,47.8700562],[-89.6797699,47.8700562],[-89.6797699,47.9339637],[-89.4933757,47.9339637],[-89.4933757,47.9957956],[-89.4284697,47.9957956],[-89.4284697,48.0656377],[-89.9932739,48.0656377],[-89.9932739,48.1282966],[-90.7455933,48.1282966],[-90.7455933,48.1893056],[-90.8087291,48.1893056],[-90.8087291,48.2522065],[-91.067763,48.2522065],[-91.067763,48.1916658],[-91.1946247,48.1916658],[-91.1946247,48.1279027],[-91.6814196,48.1279027],[-91.6814196,48.2525994],[-91.9321927,48.2525994],[-91.9321927,48.3142454],[-91.9929683,48.3142454],[-91.9929683,48.3780845],[-92.3189383,48.3780845],[-92.3189383,48.2529081],[-92.3732233,48.2529081],[-92.3732233,48.3153385],[-92.4322288,48.3153385],[-92.4322288,48.4411448],[-92.4977248,48.4411448],[-92.4977248,48.501781],[-92.5679413,48.501781],[-92.5679413,48.439579],[-92.6210462,48.439579],[-92.6210462,48.5650783],[-92.8086835,48.5650783],[-92.8086835,48.6286865],[-92.8086835,48.6267365],[-92.933185,48.6267365],[-92.933185,48.6922145],[-93.0051716,48.6922145],[-93.0051716,48.6282965],[-93.1225924,48.6282965],[-93.1225924,48.6922145],[-93.3190806,48.6922145],[-93.3190806,48.6267365],[-93.5049477,48.6267365],[-93.5049477,48.5635164],[-93.7474601,48.5635164],[-93.7474601,48.6267365],[-93.8135461,48.6267365],[-93.8135461,48.6898775],[-94.2453121,48.6898775],[-94.2453121,48.7554327],[-94.6183171,48.7554327],[-94.6183171,48.941036],[-94.6809018,48.941036],[-94.6809018,49.0029737],[-94.7441532,49.0029737],[-94.7441532,49.2536079],[-94.8084069,49.2536079],[-94.8084069,49.3784134],[-95.1192391,49.3784134],[-95.1192391,49.4425264],[-95.1934341,49.4425264],[-95.1934341,49.0035292],[-96.87069,49.0035292],[-96.87069,49.0656063],[-99.0049312,49.0656063],[-99.0049312,49.0050714],[-109.3699257,49.0050714],[-109.3699257,49.0668231],[-109.5058746,49.0668231],[-109.5058746,49.0050714],[-114.1830014,49.0050714],[-114.1830014,49.0687317],[-114.7578709,49.0687317],[-114.7578709,49.0050714],[-115.433731,49.0050714],[-115.433731,49.0671412],[-116.5062706,49.0671412],[-116.5062706,49.0050714],[-117.3089504,49.0050714],[-117.3089504,49.0659803],[-119.882945,49.0659803],[-119.882945,49.0050714],[-120.1208555,49.0050714],[-120.1208555,49.0678367],[-121.4451636,49.0678367],[-121.4451636,49.0050714],[-121.9311808,49.0050714],[-121.9311808,49.0656099],[-122.817484,49.0656099],[-122.817484,49.0029143],[-122.8795155,49.0029143],[-122.8795155,48.9347018],[-122.8174629,48.9347018],[-122.8174629,48.8101998],[-122.7538859,48.8101998],[-122.7538859,48.7533758],[-122.8712937,48.7533758],[-122.8712937,48.8153948],[-123.0055391,48.8153948],[-123.0055391,48.7529529],[-123.1296926,48.7529529],[-123.1296926,48.6902201],[-123.1838197,48.6902201],[-123.1838197,48.7529029],[-123.2549305,48.7529029]],[[-122.9341743,37.7521547],[-122.9347457,37.6842013],[-123.0679013,37.6849023],[-123.0673747,37.7475251],[-123.1292603,37.7478506],[-123.1286894,37.815685],[-123.0590687,37.8153192],[-123.0595947,37.7528143],[-122.9341743,37.7521547]],[[-71.6299464,41.2540893],[-71.4966465,41.2541393],[-71.4965596,41.122965],[-71.6298594,41.1229149],[-71.6299464,41.2540893]],[[-70.3184265,41.3775196],[-70.3183384,41.2448243],[-70.1906612,41.2448722],[-70.1906239,41.1886019],[-69.9336025,41.1886984],[-69.933729,41.3791941],[-69.9950664,41.3791712],[-69.995109,41.443159],[-70.0707828,41.4431307],[-70.0706972,41.3144915],[-70.2461667,41.3144258],[-70.2462087,41.3775467],[-70.3184265,41.3775196]],[[-68.9403374,43.9404062],[-68.6856948,43.9404977],[-68.6856475,43.8721797],[-68.7465405,43.8721577],[-68.7464976,43.8102529],[-68.8090782,43.8102304],[-68.8090343,43.746728],[-68.8773094,43.7467034],[-68.8773544,43.8117826],[-68.9402483,43.8117599],[-68.9403374,43.9404062]],[[-123.1291466,49.0645144],[-122.9954224,49.0645144],[-122.9954224,48.9343243],[-123.1291466,48.9343243],[-123.1291466,49.0645144]],[[-82.9407144,24.7535913],[-82.8719398,24.7535913],[-82.8719398,24.6905653],[-82.7446233,24.6905653],[-82.7446233,24.6214593],[-82.8088038,24.6214593],[-82.8088038,24.5594908],[-82.9407144,24.5594908],[-82.9407144,24.7535913]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAA2CAYAAACCwNb3AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAcppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGFpbnQuTkVUIHYzLjMwPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgofPyfmAABAAElEQVR4AeW9B4AURfY/Xt3TEzdHYMk5I7KICKILhwE8DCe7eieiomRByRmGjKCAIHhgjl+PNUc4UVZEggKSdsmwsMuyOU0O3f3/vJqZZcPMgnfeHf5/BbMz3V3hVdVL9erVa6HNhEciCxS7VtBJKvsDJlWUxCjFa8tdk+6oD/zU1ZOMhyttYXYmK1EhMlbgfnudQWgd161y8+jRnhDZgt6+ZdIkY0nU71N/ijlFyjBneAMNTX/3lSZH8k51u1RR0i3KFHZTvrUy9qy13NWvVbtebkWJ0agq0yusdH9+zv5u0Ym4YgfCw0wHY6Lj93zw5Iw8fz2C2WymjxKo91q/U8xmwGOugufhDUuaFpcV9XJ53T0kSUo+VFooJIaHxSXGxifbnE4lwWASL5cUHRA1YmmEVn/Crsjfx2gjD26f+dzFQJu16wzcv4ZvAWU1AXhUVRWGvrSwvdNj73uxorhNpGTofryiSDIJGm2HpOZ9y1wOKdxoYnar9ezlyuKzbSITbSqTf0mMitvfuVW7febBwyp5mykpEtuxQ2aCUIMOhEaTH/qkQHEOEgShHE801wDg9ZNFELwiY4lhXmFWxbqPVzIgFquGWARoYCJ6zRsz/YS9eLmLqYUCE6SanVDQcZHZFK/S0RQZ0a998p2bhz+zK3XLFk16WppcM2+tK3+bzab9dXqx4lmuoH7G6yc8BHQ8+euXPUq3sNiI/sm33vniX54MVr/AUlNFlp4uY+LFQatn/i2nrDDV7XGnWEQlslRRmFslcFSmEUQmW0DSCtEDkkYjaMIjQP4K00sSixAEZnSzypjwyB/ijNEv7pix8jvKVpv46F49qQY8dzw3+eFiS8UTZV5H3wqmGB3AFpfHwzSihsn4ZjYrANMIzOtVWUSEwACHiH9hBItXsbUMiz5q0Bs3Z8x68U3gG8Etms1mhs81EW31+Xj2/15u8ePJQ0MdLucjFtndzY4JLGcKk71eJogiU1VUSeMjAEhZVpnBIIh6I3IoLAxwxSoahju5kTrjBze37v76xuHjj9M4ABaCqQoeSRZZnKLX6ZnL24CJAo29L+HndZcCsAUAAzKoJgNTLe5wfivPUgdqS14ev2cTvOF2o1b02uwNGQawdhIxcEzxMlmnZS7Fq6/9POS1v02rIKN+CVTmRP0BMK7QFq9f9TJFr2Gq7KlbPzghZhP/0+XUF+c/0Hn248suM1eHMsDE3G7MiwAABUUEshHXlAVZNRjCNRgS0Dv+qEx1uj2YTgFI62Iuqk9kkTkO75A4Z+WQ3gvHfZPcptPYDY88fSGllkQI2jcqj7aIWAmeboDnEuAplQGLB/3i8DBFgzyyCiIBxmvDIjWEWVoUdCqKrLhloKnMLCB2C+ik0F7SO8yl7d1yxrBpf14zd/6Xk5Z8CGRk1RE/KCy4mboltYpZ3WoeN/Orw7tm54tyhMXtBAFgFDAk6LpK40NEIAJ+ozFSQ2oApgMPMbser0Izb0MZG7IC6CaS4J5qObFv8i2Lx5n3zNu4mIgjNRVtod8EC8ZTcDMvuqUyD2c/CrCOPsSKrrdPADb/N6bPrQHsXoFh1pCSImqTEItISuL38Ac4RdOH/tII1voncJYjYAyIO0uU8dqSv01JEWWR1w9YatVN17x+jLEqY9xFQvZqyYeMKk1wj/mjVu68fPrjLE9lhzK73Su4vV5R0CjAP8J9AKZKQF2S9JJTVQQXUNCFqaLfdI+eUz4BhVBEofIlDoey11Yw6LvMX44OXD+vawbUJSKSahDU/AkuCrygcVP7LRy7cmfB6Y+PeiwdSh12r+hRILUFFXjI4ZH97eFbAxgg4RRmg5Sja9As2uDwiETAohe6sNPpzVbtHQ8VZ6cPWDZpM4idIz4RSU0grlz5iCNdNn/9bpOOsx//6ainbPlppyXCYnd60EMZRKFidDSB8aE2MRoamx8eECvzKIpI8ND4YCwlEWJGVETF63B7TtnKxJ/txYtuXTx+16a8/SYiDhAK56KiqoCSiFOAygHSH+OjchkAWAXZi5HHyISUIIFhJlGPAaREncVFrQ/q5GPgyxMo9tu+r1a/jyHVrRMzRjdbTRu2MdNbOa3Abge5qSAMkRaGErQoTO5vSxy7feWADCAXj+w+4ayIyL6UvWfEO2vbE5EQ4gWpVWBmM2+uzYxhG391l00rsNkUjax4UQ1xDvpw6glSNuQtVEhcAcQrSBr0Ldda6f3eljdyyJrZu8+rqoFU2QBSVq8kQBxzvtjS+Lv9Px077i7vU2FzeCTONJgWCE9S6zfBQ51DGXw4zmslUaPKDrd7l62g73tvvfVPah+wUBbQXSCBewV+Xu/fYAHgCYpXlURje8HA+sY32U0wpw5sRZ2qJ/072F9PtVWPfnv9yaNGaVFc6b1o/OwigzLW5XC4RfB+dIS4YNBEtykLvmX6gMNx1SFoZtykjJhcHRiJ+4xiDTt5/uR7lDc9jasRVF31RDih3r746XVnRPdYq9XhAa8lFSWkFYeLs2rw0PxcQazqVft+Q0hLQEqJWR2ub0rO9Rr13OS36AmQ0pfhyl/BDyP7cu/WLT9WXI4CIC6wE60XyB0KYYn7EQw0NvTxDeeVSmv/ghILDsJ0zOlxHbQW9U1Z9sxMypMCY8CVfpCAv84TAQiAsQT0irHGMKlnWMLOlHY9222d9+LnGF0xMJjXeTeqgZelObB5s2fYaytuyLWVLbVUWsHSBHDF0HMBJIdAgaKmyiIYhEbVajRQHkRonRwhqlVe5yfK6Zhbdp/3WJL/+tKSxygDIUEgI36T2iU//PKSBy54LROY3eEFonGJEchT+5sQELCAW3lFgoVggiYlKqqCZTDRVfAEBGfIqpdtDvdhW3HavS/MHoacih8GXigA213PTZ+RLTj7QP11oz19KMLw4wcWBjLDarIKHhLG0A5kiJlQRblE0Yii1upwsNPlhdOe/eSN6AxI2dB6aPB+/c/ukjLrRSdVrSS1l6K8rWIbzPxm6soX9hNEWFQxsznkZPzPgL5Kw+lZmTzHpYL853NVF1mDvNDdSaIETdBPyIwgJphMrLFoLHeJ4gmnwJwGr9zIpnrbX3TbgZIYI6gdwSog8QrVRJPnsLELxbljcPkWkKBK6hJCULn9F08ty3ZZAI8kAJEJ7+okugkVX1Z1oqa9IYpFSYZLxbLnrB4EHmEQOhaqzuhsu4X0GBkaJBkT6iQiEp0gSYXWCnZe0ax87cSJz57s0AFrelriMJYBK+XML9+L2fLj19MrXDbAI0qygppqQRTQr/AE+CFqWmjDWEPJdKlYkc/qYTvQKkrHE15rtBPGDqjaCqmstesg4GA6BCEJHouWxR7OPDwCt1Zf9wTCRRwZDmVFig8Ll9rronZ1btd95Oa/jT5BnRq1aZQ26XKSbE5Pp8s/VjKnu4dvfqHdj2cPDmQON1iqJjRxQGUgztwjIrG8fVKLme2bdP/IPGRIMXV4h6pKmzetGCiez1ybrdrai2ReCWGy53q3W2aXHRW9xr2zoc3GR8efMUP6ZkA4E4H0mDd6WKantAMQ2wOWGxQejp/YTGBaQXNrRMN9PVp0WnRrcv+daZ07WwmeV7Zvb7Dn3C99ThfmLdxrKejqcblBJCwokcCiAQOf4AGDaPRO+ktpKP5a/4ULNSn4kQFt4fDpQ8PKtUoscwIeFfDUIg5k4wnEoej1Ok0PU/zOlo2bzRvcJeXQsN69+R7H6q1bY7cf3fH40aILz+W4HbQmA20HrwmcRayElatMqHwQFfsIhNokkiUqp8/1kgJSA7JY6qCPltvEN5n15eRlq34CgKS7D/lrkmrub/Zt6AUsQfUC/5/u3W+v/1LZpbuLNaThk/SAhTRIIh3aq8hi1/D40sE33d5zyb3Dz1fLJvQHp8X11nFbNqTsPPLz6WPW0nDsitCOSR10AoSwP4leu8Sky2X5t6HcmQw/cVCdHtU93eXlZlsxlEhGHV4Rmy3Jxrivds3f+OddKLeOCvvaU0cOHFiA35/Qp8u8EVuOqRWpqkcmGIMyZEgGsczlZOWSnbj2ayBUhaX6YL9YVDiwFGZrvi4LNbywNGNRpmkhmf6xZ8HGh/egkvfxQaL+q5PvvrsU36v/vHZ2sT3/3FslDrsCI1ZQgqXRYW4vc0ieHpM/fb2pCAEKoSzTfhN2d1RYKtB5iPI6I0vN/ZcStc23m2A4iQsPl26LarL7js59uhFxEAijNm3SHkg6RcThXfPrjugR61bcAAoH+MHVgf8S2GjmGkat1iTLLvdtFtlDa6ughekmdhOUOKhVLWOT5hBxtDA/biCu72+Q97vJpFTjxrTx+S1ik9ZqDUZSF4Lit695US2DmeNs8eVmNDbG2BKukt29fOZNpR5nV5j98TS4moaMqEKR2jJ95Z9vuYsQGnsUZh2pRfhJ1dNuvTho3QS+1zPqnqFPddSGV0Ifk3xlqUTNhA5AiiisyGG/cdimpY3wVGHpTF51eFsYiLkP9AcMTjWDUrXiGAQY6BVNG63JPbB///H0KNVcAx5mVvlYSV8+u+ztFrqwnxnUMN/WSLWK/D99kkWQKwXFcPLsmTaiVhCiI8LDWJTRqDcYjRLp+DDaY59FhewTvFho1ZrSupX+nncg/kCrEKeiIHU0xSm3xbecuXPu+r7rh43JIqlh3mGWuBsIdswnvb2+Z/rnW07+cPEILfBY8ujRQTnUFfiC4uCVx/+1X1fALHDbmnOFiMvwugAAYiIAKRrbHs0aNfyccjzOWriBhJhLv8AHc7jlFt9eUKwx8uNGfPtBqWaBqVkvYQd251miKbwjPfnm4Bd8YByCc+glEYxegCG2ZpGqKzzwag0G1jKu4Wvmu/5S2NmcqktPM7uxzggUUQm2byaud9Gzib0HV0YbIzYzgx5snv7XTT6kZF6HRjWWlFfcHMhx+Kefm5TarTGcJEMxP5IeOokl6iP+uWHgYyUshUnp5hrwMLNgVoA7vI/Nw+K+MWFfHAyAxq9O4p3ARnIxNkTPFeVqxJYxCa8PiG258e5mXV9INias6qgJ/6CjIfJiQ/jTKFBtZOw0wJ6GvTj/ZNSp8ve5QdDjQ7wLi9Bw7W3RTffendy32yfPLnmOWiDCOHDKJzWIWw1dM3fZtuO//LLbXZJ41mUnNypGUoW+r+uETmKfkLqLPn0RD4W4DXFIrA5JItRJWhp94EDTsJiKOwbegVUvYwsWLKjTz/TULXzCW7VsfSFaZ6gAvRHL5WzdP7ZcRPGGaaihKlR63MStGXszmyOuxW4Dt5ZDwsIBVGVNM1HPGic2+YiKduqUGhTp6VkCK/IhocC2x3DvHp+ptDY8PpgE1QmI7R7XjVSWUqGlvJlghHWa1jscPfjtGn+wZlc1ko5l2yy/0IPkdj5CqJEJF60GlnFYPFpxN8QSRkbl/hTBYVHVaK2O9WzV8SZp9+z1L9eubMOOHeGf/rqtTwerdVShtvLBLNkmwRUFLEmEiST4RNau47dck+kSSp7CtDqpoSxYbghLmLdtzpoXd6ISkhqtBg5UzP3TSIdlE7as63X7kgmvHnaWdK2wV3r0hjCtEXtP5b+lwesk78nLeczicQFryD2i/kRbfY3j24dERtTBicZ8d1pph1mPncL1TbASkYcBV5+q187VL1XQFNtt8NPgyUPqzKtb3msDoy2KYlfA7+JVvRzNE0hbjBT1l4Y9dv+B1x6fxNJTU0OCnsJSlAwstVtFJOWcLy30YIqx5Q3vD/ytqpegpiswYbvi1f5QcM4VeJZVVuAppi6AcOpwhECmQHHsi9OtgOdEtcf+n6n4TmftW7TzZlcUsSK53KtIZDEOUrOqeuxeWSorq9BLJAYzs4tE9mYGLXb5BIzv35+sEbSj+M9Rb6+92XQua062UDmk2GmHSijC2hp60whlri0BLr9hwItFkBRpNIpNmWFr1+ZtR30wfm4OVZICuzwGWD2QtpnDdf+auQt2HP3VfMyONZfMPEbRoDqAFxoRmiClIL5Y/P51+kfr8cCRgSboCr7UBhXrDzwUWYndEvvl1+mReG6vnSdwHdh1LrDZ5YjYKKY4XXpy3KudYMORnGDMsaIp6pz/4eG9+9s7ZW9DqHtggcH1fWCgQlt8UcawrP5CSyIu0EzovQ7zArPKzIyVll7OpU6YwsM0vt29uv3FxolUqZfYPbFN+37lhwlrC0g6/0WIL/RO8GIN1zYirttl5MnIMAfN2TkrSyU7p+xwZju8biZEROrDMa5ByANbRbIUGxnGEqIidFImTI1UI9QWcep7mzpl5meHaXUaTaw+qqilLuGSefgT+/D43j+vmzv0QkHeO0edZQb4FcENglwgqOS/lrA5S3tbCqzUUhuN0ZNgjHp69/yXNtPOQDJMt61iBip+T1p15JurO2deOPvmpwWnejJs5EgaiXQSER1VI/SRLNotlnOsCeKL9a9B9x8sVW3M4JKtMYq+tWsoTABnAIoI3suy0/TrmaMDANn7PTfztZbPelcNVJ+aJbBBbbq+ZxO9hyEGHGguCIUAqWUlXK8z7uT7SKijwFYebyfsBcLj75VFUrX6AQtOF8CZk6kH+G1zCtxSMqrlqPXTj9w3J9/pjck5+LzV6w6DixgEGCRILajgOgDlmpliJOPeQC1hBqNY7oF/F19ehaQUDbwzWaFUOYg299Y+8EQ51kA1PHKpPtzjI7/m0w25D/T7y7LOTIgig5RaXZoFGobjI9xOw+Ni476Q0jYt7X+5KO+xtnOHJ+tVsVO54hG14DqwbFX8qjMU9l024ecoKfyDLycu+XDjkR+/e/3Dd77b7yi+UXV7PXzjhtTKkLAHWrzyzRUBAIbdGikcA9CM6bcP7N570rqHxx5DLhFOa0JR1kY1fbRPavRbOnHCP7N+eeECc2NmvF6dRivCIQ6dVaRWkdGsbXiDtU927vViGvsHRiGDS5orrV2HvzBWWHLwdHO/uyt/PLWvCEgZidUC+lRN9fCDTrNKfodFLuzwFufM26+q6T0FwROQFv5svi+fmiW8P3H+SzXu13NBKizt5oczqYeH89N6fI4g7eJFibWIiLOSKTUF/yDh66ndx6CxX0P8a2Z9Gas/C7jkd4lvarPmnYTnLVc2gnJ7SDVohKL3hNcerj/00wzUM+vdkn1kLq9S1fx1cwJh6ZnuT9Iz51Rvr77f0i/ZJ5df0Mk3K9hdhTM9VQKbGlZUWimKuZ1RTHC2jWKlj7SfOfzEt//8buT+RZt79F487h8XvZa0vLJyGdwc2g55btafiIZASVho4D9O2TRmOkfTsPgpe+etfzmLveWXGmUkNUiXVB9at7j1iaLzmw/biwZUum1ctQNBCm7sBxhNRrGLLvJs15btR77+2JQd26hp4kpXLCl057pNosYne59o2dLZc9HYo8xjaa14sLdHDpNBEje5Kqr3nNveYeayKaQp3E9uNVwF9e9+VyumEvGc2x4jhtbHcVQCxwBo4VqU5fN2/i7/vNbJFVUSI6FmUxXhjsysLvtBai+hU2aojNXA8f0kWKnN+mDKwPNUrDexrpFhemK9OnY6fvzyubI8puJQmIA9iBCsmPxVXV52Xq2Y2X3+qIOHFm1OB+1K5hSzAslB+FQjEQFa8trVCwvBOiQpSZZK3A6rip1VLHHsilZnitPpJZOXlUZodBcahkcVV7isF42SvvsFe2nDS56SH/ssHL9+97wND/35hZn5Lpd7YokHqijWAzjAQ6ZhLqQDfJATBawMWPPBWwfre0HRRhtNYpKo294uvuXITyeZswG5iMETMy5jrTHaJwFSVkwcvzc3a/UFwaNDx2F4kDRwV1YVDXbT4U6UHNVk7UvTV81sKwguNipZyzbtJ6K+5smqMVr/44sG+oi9Ea6y+y0uaDb1SGLghuR0ueTtpefu67vw6S3PjJjxWFrTpo5giOD3SbuqND2wGZ1PSefqVK+Yhk22l+fysxN1MArZCDTMLzOCITpNOv86KBV3iV6vnjLqEnLQQumbCSiexJl3pFXcMO/Jg2Cof1Khc+BuHYODPy9QTFQqvR4x2162ZfDKaU9/PX3VBjPWI34JSTK7Cj8y+KG6DH/R0F+kR4pGYmfovU6vM7XWhh3pG9vs2ZQuPTpmLX+rx/dz1t15YNHrT+2a/3LPnOf/0aR1XEIXtOKcuOkF85dTVjzTPizhTzeYYs4nhIdpZQ3cjqHPYQwhJEio0F4VllmgDxCHGGnSa1vrwktuDEscn7X0rTuIOAh4UqkweOAYGd5H317Vsvu8kd8eqix66YLHphPdMihE1Higk5hMBm1yWMLJGxu2uHHbjOcnEXGQmwkrgwfvdUMcVXMQetRrZenYqPFXTRRoBIoXi5HQFELFyKcJ29vyT47C1FWbF2U++eoLf4KG4+Vckk42htorCA0NVrU+xDHpjB3JggUOFxQILtowuZGilrU2RIZC1Ppa+k3PiGlSAb3W8EGEXgeEAlaFSIS/tHdHG9zlXhc7UJn3Um/z6A9mbX8rjtRHFFNRX9B1VYgqq25LDqZGNtaHsWbayAV7zBsWna16xAdKYljNsEzfJtT/jZpPa+jpw7ZsCB+1aUXU5tEzv9+Wn991yRsr/tpEY32yzGnvbmFeg42GGDMaBmNIGCY0wRBxLjLC9O7tbZL/bv7LcBxJZQIAxiBnqOl+C9WdK6eN3Z15ZM1Z1a7HVr8Hbj4i7II43SSL7SJjWfuoRi+Pnbpi0mAQBhEWierNo7lzXQDl/K1e6cB//1dQ3KoJRrUsgyZM0D8//JljtywY8yFTHEMVl0Im0KDuJlQJ7ygdlsLRwV/chS0rsj3b+5jHru/TqtuS54ePLSS1hBAh4xq5NQfMLwTyLGXw5MOGNqFi0OQbXnj3gpmaAmMeNOfvcRN94IAM7nD723n7P55nEYVmIF5iuJxwgrVBzyBJ1AKrRS4yeh4q2Lat/4DlExd8N/PFTWAuJEWwxk2tcqEPVkfte1JnQ/SeyPCoWdtmrNxBD8nsa2gUA3WHU54HxMGwMNQ+vH6i2KTUIjRt1VkzPm08d0qj/Hc1bGjD16v0eeL1F5rm5l+68bylNAq2W2+rqDhvUmzMkXfGzj1LAFID5AZQBIL3D4A6/r2Xmu8/dXTzLxW5d5ZhrQFB5KFVlwdrDZPJKNxgiM7u1qrjqE2PPvvtF9Oe4wiAatQAEvQyjx5ThrPHp1/44O/cq9d/VBJ5rvsU3i9OZesZ69C8zYKi07ahZ9RyrQYjgEMM1cioZjf8RKKVVFE+VVEinjLpJ1hP7XtyyJqZyx59dvmKNB8iCECE3+T+X+ay+4REzeaqrgIAgUszA/uXmHFVXdf4g3N9c1qa+5aF4xYVOYteddnh9EgUUE8FEDOURVIdHs95wZnocAovd5r72JN3rZw5b9v0FVuhfgIJmcbcGQ4oQdYntauW9izeNInfhIhO7TQOHJ1vyCk7zp83rP1403155cUDxywa3T+3olS4ALNsg2MHNL0WjKqINoXtjo+I/eT9cfO2+yvVvDFiSg5+04enbP/3u+PmCeQ/FNdIJ6ePNnOzMj26Z83MUd9m7nvxlGw3wFTn1SFCCYIS0FxoEnRGlhzXbMP8KSun9REErmunpJhZRiYWhiCCOV+81XjfsV83HXCX3lMhO5fzpmLO0SSHYoE8y/X1pxNUS7P0xoipWXesmjolX/C8YLU5vHBO1F6tE9gE1GgkEBPU0CPuUlOmbFuSPWfEiLSXFi3d8vT81/k6JCUFC9WUoAvVK+PgEyFwhvSLqCtP6v7CBhi0AoPBRyB+4VM32+90hzNBMxPhgPhaz3kj0341Vtwpk886HW6qJ3FdDJIY/otKfrlVzteKPa2Vl77pYR71TZQhZtqOmc9hd8PMGKmlCzL4WfZQ1VFPObcpyuqME2a+CB7DXl7+4PS3lq3K8dpb5sOTEvv/IEuYfoG6uR4Hy1UdQEND94YVheNaz3jkwI3N2i77cLz5Y2pk5OZVD2c7Cg98+8yq09UaVbPNbzqzcWMLDu289vy0O3LKC6fvK7pwW7EDm4+QGhKOCUOzwqLIIPUNS8xp3bTF8DefmJaxdeoq7tJ+6nJSldS4dcnEB9L3fPfqKa89FuCzSFjEuF/zH2EfpNqg8J8+dUj8dtrzq29bMrHPLjX/QdnhcsMnTcdtXQHWXbscroHSeEqIICmywysf1ZS3ys8/8doN80c80alhm7n/N272D+aMjGtSu7Bg5LUFaYbf4mAgCzaKoePVI0Fo7ZCZWQ/UoVrw3Td37lyDs5uZ798dXe8YVrb/i1/O6rzNNR4VuyOqtj5JQrWhT3QYEschVTmnsoLl6G2Dmjosg25fOuHNbm1vnL4+bUQRqvcHhPAFafBBceWvBDEjcGpKT+eesVu3f7Pup0vHHz1vh/OGLHi02PsENKBHURuF8C4NdAa3Tqu7iGNblXbVo4nQSD1OluR9NHDZM1+2a9Pur0qlO8dl83zUY8EoS5Sg2WbXas7FR0brC4sKaQvjxkXzRtxazjwdc3G4B34/Xh1UCjc6gnMBmg7RcayhKfr5V2asmUuLcFprkJvJZh/hKrTo+ipj55oTtuJHi5028liwa416k12mg2Z/3ARjBk4ICWzn3HVDsbj8PEuqHFJpteE0G05Q1Yu2vj5jt500H5hbBLnIalOKdK5biy4ey+i9ZPwbKd37TFnx50fKSK0Adwpp0OC+v/UtvfkIKwzno5hJbwiVk86zh1xMX8sM+c/1UGsc/4Gf/JTh8rS0oj8tnX2zq+LCz7kaWzOsKMBEmO5qjfmf4ywahggHanJUm5RjcT+e/2vZ0LQX5y/b8syi5fWYzBkRCK9j+N+X3PfuZ+9vOuCqaICzwrIRZ3dcGHEEsdA2NUWwhobIH2D23ZwQ3XDv3U8MvZwmwMSINPOnbYk/HdjXqMBe8UR5acXrI/9y34jPM/akZJ069tkptXJhCaQCKyghxzjf1o0b1wocbMCJsOTSubUia2g0MhgKDndq1PaZd0ZN/6HtzLVVUiMg1R57ZdmT2zJ+WHPEUxkBdUzWI96RCwEt3NiCbaLXm3IJGNi2ySzzR0sgDuKafPd3r3nTvbctfvrVXTrvk16ckQC3plOG9bDsK72l/ShIHg04midPsUn5gvxE5U9bBz+wes7oTyYv/QxmMOCvr50rpa7tF5kkmUarKbBUuAut5eepVBbcN6pKQxUCN1ZaTXlwZoHKegC9wQFDL6iryvl/kJ9XpaKYUlt1OZj+zOIVuE3qMsfNDEhZ8q74bvSygtQNK2/OKTq/e6+jqKUKtRwqH/yPr96On1AomomKmETek4IlvKTo7LIBSyfe36lt14dfSht5nqtcteKqSbM+fitu/5nDz+/KPfn4ORu5/Ekeg06rcXghNySdlGyIq+zStO2Et0bOfNvfF/b6CL5sIS4ij+17F1ml6PPs6i1bjF9+uyNxDWIv4brfk68+f1tW7pkxFcw5yCZqoitxZsapk5heo9HpoB800Ohko1b/U1xY5GvfTF/1Nvdf8G3wMPNobsVQEOol8suff1z//cXjw3Os5RSSB3suGhGxq3CQQW+41ZhwuXPrlp9tYh8wMzZ2zGj4j5iAuLRW4ESyc95LT93/wsyzZ8oLlx2zlUp04g4UIiGCC+fj9fXPhwiQ97QtBX09izkaOMtzP+23ZMKyH+eun1O9nbr1hK6elAjEWRDOuu2Vq1aNJrcnhrquEEhmKgqnMxxxHGqL1CULDuzLExO8xsT1JY0Gu9RqKxQhAqkBDBmNUrBeSx8/PX+Hqnaas3jsO2c05UMLrdhEhusRtttCBpWoDgLGByYQHOpgGqXYavV+77T1unyo8vi9G+c/+Pm4RV8hL8frQBlp+6+73vmV2Qd5Ky0eHRzRPJD2cFoTm4RHiV0iGnwx4OYBo6b3vyefCsICpUlvlKcyn4WLryM3wcIFWzPLcbnEyWlpJFUuBCp/7ampO/F7J4VsuVSc0+d0fk4UNnLcjQzhUuPwuLJ2DRofWfXw6LOB/HQQ6tTly8RNgf2M3bl6zpD3f9y2+bTqaqg6XF69Ros4UAhvBXWsdUQ06xjd5I3RUyY8PURIslOwL5TjMAXq+6N9A354CkLb6i9oPp2yYvnYd9ftMJ469topT0WnChvWajh1CM5MQRSumqCjE4LpcAZdPldRouaHu2YPWD65+/ezVt9D7eDDibFmRVfwveZ9UCcQy4v16A0RCfFpc99rN+eBRw5hDwuWspqRJ+HcVMps8NaSVSdgDaWK1a4ePADTqnoN2KmEJ2rwlAG8IC+B/ohLhxypd6+c9vhlofiVw+4KCYGvEL0E0SYhRYOXrnkXIfywPBF0Gq/gOe4p0dsvyV8O37hkztvj5i7j6igObFEJKctaZvLCUcQAlcopexDkFYsKfYKla6M2z7w1bvYbW9kL1Z0HuQVqxpa3m2XmZD3icrvuenH+iKRchxXAwUQ873FNpNZ4IiI8Ymuflh2/Nj/wRDY1snRI2iV8VW250kXASY4lM23KELMmg2V4A/FwZ3y7JerggT2vZpZeHHrJSctv0aMXtBqXjHPbBkg1Y3Rej2YdR78yYsqXX05dzhehOCTDiQqZ/9CJ1C10wEseAi8Pm7gXBNN10Mpp888qebNPq07ovbKMdSGc2eDeU4PHBu82XK/BVrSqHdFDvpdzB6csfebrjDkvDiYi4RuLaWm+gldh9tDO4KSlyCYj9tJFIYEKBbNiIZPE1Wevl/ZzrglZqS70Gu6nAAIMgK5DJVov+ImbbZ2+6s2ZH723M/zEnjVnbaX35mNdCkqDFVDEfirWZVdJxGiwwajVCpJ8wVIu7C45v/S+tXNLPnt2ySZS6UhqSVhky3YEFHTKLm3DiEjWJTzhq3v63jZy0m0PkhjVpGAR73MD2UxqqHD3qqkrth3NmHpCtotONyxcZP3wi9IyWthLlrZRrvIhRaXFnsHPT3uvS8sb5q18cFjulPdevivfXlnx3sgZVd6aHP4DzJNxwHeufNn2j+P2Hz847ssdX0/K9FTGMI9X1mKMPThgROuNZmGRrH1kwlsjn3jq6bREBAhIYVLquC2qz3fHzKv7/82fzQe4SgGCIcI3j3tn9btJF86vPucoH5Jjo/Nh/LQnnWa/Kpl4oJoBaXSy0+k6oi0e9Kflk5d9N2v1bLawPxA4gYsNEIB/WRx8BGmaaVnghprsUOA++z9MnLjRPhlxVjz4yDn8vO/B9eb7z5fkrTzqKGvr4dFL+Lhdk7SFMqiBe6ByprhArbRY/566aUlm+ui5PHayZCcvKZwN6KpPqOjQoOmU9AmLXtvOXqwuNThnfnjtopt7zB/x+iHZ1km1Yv0lYi1AthOSjdxNhoYPo4x4rBVOh/qrYtX+Klsfz6soSRu6fuHQTs27Hs7c/dkbty8a34BpNf+AC8HppOg4I4hMLrNaYnCm//Z/7PzqT5dke2yx3Y44DdgSod10FQxBpxe6aSPzOzdpNeb9MXM/+3bGmurw+dQqEO/143Ly+2BPBklF9KvzwjTtxkcnn0Gt9963zjywSenltSfcFZ0RmhQaCc7ngC1x/K2nWTLjgtnoSysq5FOKOCv15cXb08fO+56fB4I6gRMOJLfqT5heLwxhdrfPalilEtQsRZIJxAbrSbUNT0gWEo1XJeaaVdV/RW4kFLIUah77aIL5U+T+9J4XZs44W3pp9gmPLRJ+fDIPrH0NahckLTRYrbdQcUsnLpx5B5vj7chrWmokGSJv0IfvfvCuB//ybG8ejUKE1PA7D/qkBiLNLd1bcHJWtgciTIbfuUarBdVp+cFlrhH4OoKR4T+gClIgEgrn6DmkFphckvC1Z89Xz0Ak3pVsfup5l1dYVuq1shOWQkhthZXhAIsVh16YCxJJ0DgwjIicx3TwKGZNEDmxbUTCG08O/NuzPIxLQGrAJR4iUDZ/9UbDvYcyE7cKwhGuMlw3fln1T+41P0V/MsF2Aojw2UTzdpTtAheKMZfUklUnZWc4XHMowNtVTcKQJPD706o5TguLz7+4CvUkY8eML2midXAf8SKuFlA4GLHxe+BBFAe4POCvH6QTWEHpcWCHifAWwsGrqhyqh/xJiUyqbv0uPwJrIOCsRAzlqykrnpvx7aa/h/34y+JKg3fCaUsZ9tkgTXhc4/qbBJFI4ADu0zpnixFznhqH3C+Kt7boOPnHBS/3JeIgvcvvPOgl58GHNiy6CQh9ZJ+tYFa2rVLVyFxs6UAc9XaTBpPy4DyYTo/gecdLCuT91twX+yG85gHzq1MHt+/doYGsec5jd2RX2KzYDoEQQCER0TjC4F/SQGeUmkv6gt7h8R8MaNejz46560YQcXD4xqXSbj93bhyx6flbv96/98KhoouPUtevHrSBcv0xkx8RZEIE6sH3s9b9/b6eKR1vj2i4tQGiTMLED74U+nRfoNeQJBKcEr3FXluPxzYvuxf3udyINYSDrZGtKpCz5jesRGBeAuYVgbK9tEaulbDBR3ewu5kt2Oz5WK6cZF7PGRUfGKpPJUo6B2EN6g/RQq36fuMlEQcxSFK7nrtjdMWBRa9O7JnU9s52hqhTEtatiLZIx06v2jZUUcnpdLIKr2Pq6t1bjNJrY2f/RLBwCrxMLue+g0p9lk1YvDv35FzspmMIFbdGo4H7Awb3NyZEH8f+oFa9VF4h2yLkpZ3mjtCuTHtyIaqZad7/xaIjew/0PF5woV3bqPi2JoMp+uDFcwd6tOhwqVF82+/XwCrGFyxwCUjBgqO6S/zN5vGL/3n2wNxcyBpJ8ZJ9+o8RtKHa+BVlZdXLaKplrfoZQARSu1Y+ODIXDwYNXTt39LGCi38/4ayEoiSA3YS25BCG4AAWy4HX65niy3/DJY+Ugqg2dh8NEImEwCNAi0PCDO/jqAs3LfqRytd89Bh9V6XUVMmTnu6Om/vUykK5YhpzQJSEiP9VVeZf/QFpi60Cj5ksdBlm8f/GzPkW6+aOt+CIRo7WOu5SZbkKAvDFC6vbA94qtCB4bOJMupY1+Xrnz0MkMpvBzYRczjkn+duLi5KPFWW/ftBa3M1ps9ELnOigAm1b/MuJFonQlcVyq022GGUziETIWvK62dyTnzTbiYp3Hq9W+6nA79TOukH9BgjffHxUzsjwwXf/i/OSzxbmvH7IXdLN5bLDumXQGplG4hQSKPdH+b6dAxpiqup04grWVqld9M6MdPVDWF0e2bRid/7JA9vKBU+j+iIrUq1YGsAM5mVFtoqe606f1k9s29Z1oPjiL6JWNxjnu9HOlaYCUPjuCMyBRfqlcgRg4CnoKoQTSqAcvjnqFLuslZIWR0mrPbiGn799bFApCIRgUOg4BNQ6gnV86npzznfOzOWl2LCGeZdi/gStm/qJMkIRwv5UOiz9xfSsoiri6L/kmYV78k/sP+Io6+a0O0lqgJiuvgBEnVdNBBAAE+FnJJ9V7AtwqOUNKjRwxqgoWMa6Ba0AxyMpvhJO4nuf3vJKy9uXPrNx36XT+4+6Ld1cDic24TUKLO6snP37QRsCKBH4DgpP/TeDDnh9RTIQ+A7Pqcmrf8gIUStxh0QgQpsJg/TvjZ55tH+rzilttOEUdoFiYoXsCp1hg64NhwRP84O7PmtJ1eKkOL0bCqWCF+N3cfANbkEsUdUnURlirPRdK9G9K5+YGICCcx2wEwWvuVbpmpdU5Fo+NUv5rzbDTEvShLYS0ieYVwxo1nF+NNR4jA9FwgiZoKpifBAFWfX2kGit8bfNS7tn5Z5/42d7QXebDS7nElRaQf23pEaw1olIMAmiy2b37NPkPX7nc5Oj/zlj9QMDVky596aFY17D+ZGPEsKj9uBo6fksp4PdGRkTVVZp61rutQ/YdvCH4Rc1Xi2kBkUFR9xYbI5gbZpoDGdt9XFlpCemJA1RM5gvnkCw9q/lHhkayKx8LXmr5yGWdfWEajHdsF7z/QEwibWI6j4EngEkAPm9GnUAkzGXWq0olCgLRw9Cz6DvcuSrgWtn1n/jIiL55Gnzqd6Lxj11TnG9objJgy5Inb4GCBAKuCbZ7I4WuHWiS2xjZ0nZRTCbGlX7cgf+whAFWwA5rnamW4G3dwUe+79rVuB/gREd5GCcVGrlDnH57BtrIg7lZ3+Bl/bE4Kg1SYE6c4Ib8C9XI+OMph3fzVo7EqJDxKfGVIBA6Fplo5j2wwmLFicvHH3zAcVzD/kB4m7QJQNwVCPDYKSJ0PaUbl3y9LifL5zYcAaWDZCMb61BC7n/UIK8hfFWoy2ptLh2qMr9nec9+eH3M18YetO8kbkXZfsbZxi8hUsraFfU/ZOlXEch9UsU7E86ET9Kg/NdoqD14ugu0+lYG0OEvY0xcdrWGS9spAHM8KuJQUEn9KtHvvsWoSJzgHMUl5f+Zo3SAGdnpKBNX7kJZRV7RuRgSvfKnY5bj7jKWuG1TGQjD56gDDSTTCwtuX+DA2zzeUw4hfas0xCIBIPE2J55G97qPPexRVleN+LKIpJ5ED8ljkHQsophPTx2+TwflUK7dT+PhYH8fE8wGDSAugIuPjDdc/z4TwTq49INbR+6kCsdt+b1KhDgz1pXePqgo/HWSayBq7KI38g01yEifzfUlCQzmKeZdUxq8Xz+ecs9l9xWKFLBw/7AmwTzIbGLzkpRPF5e9MQZOqiEN3lh3khqhGrE39a//4VFJIX613vwcpZMV9mDPcwjd/6y+JU3zy17W4h0CevaGcLcsUadsViUNSWykwMk0EsYdVpjpM4gtdSFFSXrY1endElu5ScOAqoO0lSH1IAOh8LBqsKQrOWke1rKTL6yQXXs6tUylpnB270hvmkPFUwJ3Cfo+Pluko6psHCNBHs231OoBFMCG1PcuE+vcKvx0eMcP0OM0MTwSPKgbUNlOnXqFLR+PFLJ2Q6zjoA08lcM71oEstXgplS+eiKmHkhNo+Id0UAYVINRCJ7AYwQVOnyUwdSL5zD7+h489793N1/nhFIp4IAqXoCqIKx9rbHh1yoYOliA1ePlpx3gbhSy0YwFCzjTS+7Z+xDOGkFQQqUMabOjakgLRegddLocHA0rKQVnmkPW/7s/ICLBTGjheerOclb26zZ/REG3xq0HvTt6zjPPvP/KsovFF+9xOO39LtrKowvwuq4GEVHaaJ3xAhag27u167ADgZqtXJmCWY9t2nTVoA2t4hsJ53LLKaYT73zwDgmKBpRr0uop/OU3Ph37KkSS7hu1M+UF8fQLa7ag+AVkBFfAe5FdjspThbknqH2OoDAaYY7hN11XHaLlMuQtK8a7MbIunee21fqhSUGBDHbSZb+gMdI5bh6lBvdqJgKQqsZ5f/h7mjgRNUhqdlxbcKYc0Ef7H9fpB6S6KEPquF3ODrtV1cgPstHaCERZs4Xf5wqijS8HaHyoldq10k0ZDKe5MTI+Cw/9a7La2fg1H0r8eqh7ivvzrZ9CXcqPxsE0eudMnXqxVgbfUtQ4nUmQaNr4CAVqCFr9f+amv0kdPCDcR9zOxPILzgN9Fo5b+OLfRprR4uv+D2+8hP/1/dlFXzgaPApHgzdvR8zVa5ggMOpDfJVIfAkDEGxGcVuwwD3/QllRO2oiA//qTT7kUO5fY47+Je9kJ4prC4wOKqi45QRrw0amiNIR9/3Z+slYM8P+hYBXwBKjCJp8BISYtTDcwr2/LTL9WL9pOIPX0ys6MelnRylhVFDMpeawtmHxiD/buXFzdhDXdHio3exHT4OIbyLswK06ayJflEcBUditjd9/86XmyHPCvHChYPbRGy5/j+QbjFvatBf3HbFpSq2kVeM100GrhkkWBILJbEMv2uHnXkIQbGCIvz+zT8L5IWgIcAIJQhzUDM708mPPyISQo//jxBEVG4rQl+WLeCPREVfpgi6zHzvdc+GYBzft3+9XdfxAwhpBrhHUB4aIkGSloOO35i1b6F7QlEKMGinCqM+MxFtNMSoSDUCwzBhEDb1yGd9/mfX16wlkwIC+H3KMkn0RDuFt40q1aBTivMSyA3NRowkgO2IPSyxSMh4fktTTTg8dbtchAZEKMflB4eEVgPhLsHgqtpT2oOsQC2OeFfDyvkIjuJXhveWc/fqe1P5LiyGN1+Vx4A3gVVb1MFF/hHbBOcrVLoFrwAnTiOi9iDXz8ZKcAZTli0Z5dQipZtGMwGXQcQk8DHwjEx+L4akTynASMAcEi0f0ysa6CTdpa14pl12RedkXOlCO1PT0oPNFhEzP9/16qElhZWUsFSUtJljC6l2maPQOj/tQ0MqCFfpP3wMCYSgkuHm5PMecFW3Ouys+XP/JhsNweFz9wJpZt9C5FRioPP5QqcqYj19OTF236HacXPxoy77PJhB8FBCsNpxAcD64bz4x/TT0+CxCALDsegZc9FwQnBG7Dx2ZSXWZM83YK6r5imIsxoWAtyflKagsm0NvJSIVhK6DJVotR2v1LCoi6rvAc63eeDYacaZI+wqVyIXEA4vKZUvpPWiXv9MwxbebXh3hBP/7OJS/vrK0W7a17EZy90WTQeEB4cCipLJYU1jhpEcmFKJtni9WF5YR53vJVV29ww8gHVByIMig02mfSrewsQwX9Jrj489KX8Kg2K4+AiJuHbqbV4r4c/WHkybeGJVNBAKLatCS/CZWdQVwIMipLHiUKkn/cbZUm6nRfG2ryNTT82MXztxXqgMsGFZOYHSzVvLXy8K1xmNBB7BW/v/aJV75RWtMLXRLuQTvCD/mKG2zszRn0vZLp3d//vN35xtPf+hAzLSH9yZNf/jA97/sOrszNzPjsOj4S5bbRtybZYQIXk3uB/Qca4vPyfqFQGBBCYTyYDYlJ4KeHyvNm4wACGlw0nf73TxwHI8jEqlogagvrN/ipz/YZy1qDsswArkER0i+GFQUbQNZ8uD1YB9SO5RwqOknHU0TEL86tvue+v6Cm5GpxXvBa2/xp+emrKC7GT5rHRblgMcHk8r3i/DsRE72y/mw+kGK0JH2oNXiPrR6iUVrTfs7C4IbUhlUythNbTvsivEiGJ8iY0svODrzPuKN58dsxS0HrJg0F8V8rj90pJc8Hoh4fYyKcKsKLpMGr3XnumRQkKh5X6q2hovQGX7G62qIf3CcDWSp/o3BgTu6W71QUTT2kb8v/RNbf8ZlDph6q83XnjXpjmkfvdn3YvHleRVWKxlTeJ+r13Xlt8pM0JQVJu64rgiEAKSRIFcJkDh2lkTFipfFWxAFPdNRHnEJGzdlzHtznuLpccphDS9wO1wqkDkSHq28cyGCNgTeDdGzWYdPuujCIUA9eD1l8ImikDv08tgSBKc4XHD2H7eteHbtpC2bunLQzKR9MPXVzN2xaX9fPLinedSBXZb8h+AsSJEx6hlw+LDptaxpZOzHLzz41AU/ArHnJy/PbKIPzwVq0e5CSKIlkCrsDnVXSc7UWxaPfRMB9rp8rZ7WgzgU+mQiEMbjr6xKgTXwp1/txX1w9loOtuinMaJe005iks7EmkQlfkb3Elhn1JMirfjr2OxYbfg38KCj29Co6iaaH6ynJBzgUg+V5i0euOzZdUu3v98AjIT7x2UQ8UI1RTYO1/gPXupx7+qZY6DQPKa4oL4GMUbUbcV3J8Jg3BpLQW7grhR8ttAIuiTh5brnnFZ2MPvkt/esnTV75idvtOA10Pig9LKdWxIeXDd37PeHf9px1mM3IrQSef8FrRIMEuSoSs2Z3jage999QsKUh74v0sj9/ZPsE4c++K6rvxLUAnSqKtAHNAR6fRwhntZk95qt6z5eyBHPNznBYKe+yX0Wj3t3t6XgERy2h5EodJA2ag97SWAlBrGLFg6zsnwEQZmsOrjdRGh17bJdlZGF8GeiDSdIFDJ2BE2+ejxq5+hEcUCnXt3XPzzmMLn3kAcDIRJUyJe/Ljo/RnDBxwPSM2gluEnrJqhM2JKWhFZaE4LySWdtslxA+Y1MbOiU1FZn8R4hsIqQxEF5dZAsbq9L7B3bpHj+hKmtB8e1rSQVJC09jcfRunet+bb9+ad+wJtwZRy58xlwqGCtBM4KR2xVjQg3io0UbWUDY9SvFYr7V6siu6IlSR+nDbuxyF7RDIH/WuYqTlYJB0BIWcxfcCmLccI5VlXzQPOuOz6ZuHgAmuPz1WbWsENnPNYbcN4YAx3axwwMT4HTK+LDG9gNYhh6JByrVBWLgak6k6jpeEaxhyEQBqQ2XpRbj68aYrZ4FBxd7W2Ie3Wv+eWR9XC9WiPyP76EqkEUzwmYSxlc0Y2gbCAIrBC7dJSX9Wpxw7SKrN1Dsf+ih0U3pGMftYfAU4KMwADH7IUaqGbd+MEwLCaYFXtyOIUGwgDKhiYOIDUoWPHow8J07WKTniPiYCkpEsyRfPFvhpWsSXzT5zuWFIw5rpRCm9AGNTtSdyAR0Bp6ixNLODSlwXv2WmMzqzUXuXQ+H/sEeG0zAtGERiIaKwT/9iZGRunaxCetJOJIgUqEfhDHl+mo6efPmnfetuTpr/KY6x7EbHaj/qAGEOLcdGbVYoOEZ/bIU17r7UzS3q7DNuM5sk/jKAOFMgUDASvD3i7WUqGIg/pXJ01oI0FdklvGN3qlqOTSSxWynWRJyCDpdJ6Dv+DJ6ZIP0wuftNquPoMiTQI24nEaAJoBnVkOKQRADKrX69a20UWpXTp1WkaOstedilVnoH6nGyAOHj5m7aOjL7dNaDw8zmAir28EsRHoBfNBk9/KIUka8F2EUBUgRohD60Ss8viE+wi2TmHUR3vl4FQuptPoeoc12IVXyfFFP/zKuOpC8JDE2/z4xLOtYxqtZGFGrKvx7okQsFAb9AgfmmewdpFWPTiAgLe9QBUFZ8TpwtCTT8QBu78b9kJdB130j+8+vWAV1ZlRzfuAog3SvQG9+o7qKoWDAas6vAKOjpEETaS/gGphmwPrx7gITo/HbXN5ELDBQ9cUGIHGDnSNmAzBJUfQiunm+jNEtMK3U1ZtaC6a9oMh6DDmQdyIr9TgU5ugmmt0FCgaY0MbrwwLKgoJIeClMqH5KbYAEB9b9SThxUM3JDWf/WrahPMpYB7/zxAIDSNHBizYP528bEvzsKhHm0RGwZKIE/kCYixhgK4Mdc1f4DqE7JQP465qwFZD4QyfASAi+LniCQ8z6nuExf3ytznDSWVgZp/J+Eo7/veZfDn9uRm3GhJ2MYNWh/pdYHFX8tQEhV8RYoIYiJY4TIAP9uvQRQAPqaZuvL5Y110fc/yhB1MHU0V+eHid/mswkRTJfOdf82IiYnonavRWnP/Q0viEgolapdcSEHFiCOk95siPw3S4Jq5OY3ctKZAL39Q9nih8Kv24qUWnv7ZkRhvsckRt9RIJ5UebPnhovgBHfeeXiHEAaCjTqhIRYdI1lcI2fPTMUjKGiBlgHv9PEQgNHsMxTbJqHZy/6d1bGnV4uEtYvJsjJikx8CMkXfa3DgrnzlizwHwKIw/eCI5VYKzRpO0Z1vC9d+ZvvnW00JMfDQVCVk0+hwWEEEDS2X+bNLCPMXGXZNDrQV2kTnnAmTlQ/rzX/EXw4AMKIjzBG4NVWYwIN+l6hifu6nfL0BvHd+5v9UeBqQ0PmEiGl8Zn54y1x/u17NI7OSKxGOs8Hb3MFdVymLiZ+JqhCZ6RKqNxJsIjKQ5tjd5hSBKpSqWjnfEUcPHXnpp8pkNis16djNEWhcQ3TmOhLCFvgK6CNxLiLuBH23yeiS68cE7VNDCaNLfFNH5u37xNT/NimEj6Js85qMkYJ+43r0IK/RE+ONgGONEDwE79AAP9DYmHxAenTB8/9x+De/yp9Y2aqNcaSHpZi4BgOJkHDz+qlN7XwieBVDBZDwLAAl3l31joYmowqWgfSEPSWaZhhk4RH2bSdtZFHu+X2PovGbPXDiMzKl+U1wqPEwCXiIaIZDDOZOxesLFfL0P83Jb6CNiltDgKJotQc0gl8xAsvE0IDz3ZwgELfQgeIswqeOh99/QuEQlPSAAABIhJREFUFsyoAkfPCKNR294YVXp7fPMZ+82b+q0fPNhFxJFeT5BvGh8iko+enp85avioNnfEtni1rSlaNtL4oDmMD8AhPBE8/jHwQhVD9wkWvlikBSP/0D16FoAdY4l+0FILwRAUkC7qQi9pgWCQwmFhdHvy+dj43aoywMUJlm+mLs964JYBHfuaEr6J0Rs1IBS8AjAAB/PBgTkhIwSNCW8X3/Sb5g/w0Dhy/Ab8ZMgQFaz66DRmn+jGx3sltkj5asrzpAaT2yn4k09JEBpMfXh/UZiYTO95I/L9IyVSHARYLYxljpWWtR/OYBhIkhDX2gfiTjQBlP+BF8ztLlhynwJtPISXlTYrAc7RC0KxJ4BxwbTjBaY+nkeoh3HSG4ACWMFiP8EEjpSEo9haSfy2QXjMa/+cvhrvg0PCglzdsYMW8yhUfyIiwYcT+rBXV7e5XHBxWrGjckiB19moDIo03j7na5eYGSIucpgIDqIfHWChPUo8o32DCKCpzqtURmr1P7eNa7y13w09XqWX0RAE1dupH6KaMWsnf7y53dEzJ54stVTcU+yyd7Tg2Hk52saaH21DDmCjlCtHBEd1PKLxo6SH6Zhgx3hFYDx1GJFoBbYGrbbEIGnOmzTaIxjLHexSwacZG9OtICggKf76U0q1uRq4fGqKxVU5qcRh718seCNssJB7uOEW40FjQ/yN4OBCAL9xBoT/xj0sZFgcjOp6D7sUExa5Jykq+s2vJj33FW8GTNNvog40y4R2sx59tMLjbo8KsJFDS8s/TsILtIkzhWPBujV3zf/9gNnHxlkdNabeDpkJMVkGymVwQvlaVfVvrF3Y8UxxTle9TroJQVs6ny4rEpITmnaxed0Son+Q/0/5wdLLZzvFNihzOpyHGsfEH+/cqtORVUOfOB1oLKXahAbuXcM3TL8p2HDzwfJFXp7p9Y82984pyE02GAwdL1sqWoAgjE1jEjva3E5IDXQeEF22lJ0oV7zWznFJlYUVJXtjImMPtWrY6Ai8B3zcGA0TF+aS8xqAqJ6FTMAChQfyw0TPiIArKgpvvVRe3DbMaOyxJ/+idHN847Y2xRtd5nLIThAzaSi01xRvCNOEa3Xlh8vyT/dq0EK+WFr4c+voBLsqSQdbN2ha1LB9m7Pm3oO5N261dgkPq4gjcJ/PFbm0+4O6jXn77cQzuYdvvVxZ1DnCFHbDibKimBtiGrSGq3i0TfaQBiCGSTpvZtGlY4mRMSoOph/DnsnJxlHxh3t0v/EwXi1e9RoPf1AMPzUHWgStX/n5B/9VTSz+Kz2pTSi16/i6pCSy4OJFURerEfo06+po6YvuVzubCMIQM6pZhmpnuJbrq8Hy3oULMVZvEcLBMBaeoBMfad4Nv4IkmG1TOiOuGbl6X4MUC1JD1S2CCQTLXV2qblb7cV5VDR/s+sp4/vIlpfDSZaEczxJMBrVHpy7iw7feE2q8AjVwxpDCUsiQQkhahzgCGembq6wb0wVYyTlTq/6M4Nh98agRb9RV7JUaoX2zcIXM2dXzVP2GhE8dx1/5QZI7aJv/H+y6kJy2/hwbAAAAAElFTkSuQmCC"},{"id":"USGS-Scanned_Topographic","name":"USGS Topographic Maps","type":"tms","template":"https://caltopo.s3.amazonaws.com/topo/{zoom}/{x}/{y}.png","scaleExtent":[0,16],"polygon":[[[-55.9959409871,52.00107125754],[-112.02896100663,52.00107125754],[-112.03994733476,56.01308253302],[-120.0049439862,56.00592357111],[-120.01711631014,60.01202439709],[-132.00196823895,60.00239237126],[-132.01208445818,63.00193292546],[-133.96882922149,63.00050478005],[-133.97240257168,63.9922484722],[-141.04429430438,63.98726254018],[-141.06879354491,69.92045693283],[-156.24893170976,71.51583202984],[-160.44570905351,70.83527373985],[-167.08145124101,68.42906280103],[-164.08218366288,67.03913532024],[-169.01504499101,65.68268604273],[-166.57608014726,64.50777504773],[-161.82998639726,64.0500622981],[-165.08193952226,63.26030016403],[-168.02627545976,59.7862264253],[-162.53311139726,59.73089435789],[-162.35733014726,58.55904663221],[-157.83096295976,58.31752983705],[-158.00674420976,57.52404350658],[-168.22402936601,53.51022153947],[-166.55410749101,53.14277307072],[-158.77578717851,54.88541314654],[-158.68240338944,55.7496444805],[-156.55105573319,56.00847621073],[-156.15554792069,56.7746616888],[-154.70535260819,56.14336689443],[-152.07412702226,57.37034511851],[-151.62918073319,58.22653323066],[-152.00820905351,58.98055685754],[-145.98770124101,60.24740887373],[-140.38467389726,59.48634241018],[-136.53945905351,57.80610084736],[-133.79287702226,54.83482554482],[-133.33145124101,53.14277307072],[-131.46377545976,51.69838238021],[-128.52493268632,51.74602265442],[-129.79385358476,50.90159054062],[-124.56436139726,47.49785657441],[-124.03701764726,45.48627362525],[-124.69619733476,42.90428451679],[-124.49844342851,40.3414647251],[-122.80654889726,37.53929308709],[-119.99404889726,33.37084692374],[-117.24746686601,32.54119524801],[-111.13906842851,31.19770451575],[-106.70059186601,31.23528720858],[-103.20693952226,28.64618215851],[-101.84463483476,29.81580068657],[-99.20791608476,26.28743998885],[-96.79092389726,25.75431753335],[-96.92275983476,27.96911213371],[-93.47305280351,29.68226300815],[-88.94668561601,28.87732407469],[-88.61709577226,30.17736083469],[-86.20010358476,30.3671253082],[-84.96963483476,29.43379356715],[-84.09072858476,30.06332630046],[-82.97012311601,28.95425748047],[-82.97012311601,27.26823750278],[-81.25625592851,25.07956298739],[-82.09121686601,24.5610471236],[-80.06973249101,24.76073298597],[-79.85000592851,27.11188091684],[-81.27822858476,30.70777424386],[-78.99307233476,33.20554049136],[-75.03799420976,35.59830000028],[-75.85098249101,37.2425160052],[-73.74160749101,40.4585957587],[-69.89639264726,41.60224497127],[-70.68740827226,43.17628724449],[-66.93008405351,44.69516042167],[-66.53457624101,43.08006996122],[-64.20547467851,43.35229243812],[-59.50332624101,45.73220792131],[-59.51431256913,46.24761804024],[-60.00320417069,46.25901313529],[-59.99221784257,47.24505773341],[-59.00894147538,47.23759898478],[-58.99795514726,47.50266941922],[-56.51504499101,47.50266941922],[-56.52603131913,46.74770404019],[-53.99917585038,46.74770404019],[-53.97720319413,46.48358117386],[-52.49404889726,46.46354265729],[-52.50503522538,48.75360583388],[-52.99667340898,48.75451123442],[-53.01315290116,49.99551104004],[-55.00167829179,50.00610367548],[-55.03738385819,53.74720613495],[-56.00418073319,53.73421061801],[-55.9959409871,52.00107125754]],[[-59.50126630448,43.7495431608],[-60.50239545487,43.7495431608],[-60.50239545487,43.99999882251],[-59.99839765214,43.99999882251],[-59.99839765214,44.2494016836],[-59.50126630448,44.2494016836],[-59.50126630448,43.7495431608]],[[-155.95024091386,20.49523373356],[-157.3267518687,20.49153389084],[-157.32902509355,21.23181053727],[-155.95251413871,21.23549220541],[-155.95024091386,20.49523373356]],[[-157.64488202714,21.24845058596],[-158.28534362719,21.24673774522],[-158.28689557694,21.7499618541],[-157.6464339769,21.75166877943],[-157.64488202714,21.24845058596]],[[-156.12602216386,20.32469602374],[-154.7461696274,20.3284088686],[-154.74174482011,18.87578125335],[-156.12159735656,18.87203473488],[-156.12602216386,20.32469602374]],[[-159.29077130937,22.24504086823],[-159.2892966564,21.76857042389],[-160.28916841131,21.76590592196],[-160.29064306428,22.24238530626],[-159.29077130937,22.24504086823]]],"terms_url":"https://caltopo.com","terms_text":"© Caltopo","icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAA2CAYAAACCwNb3AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAcppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGFpbnQuTkVUIHYzLjMwPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgofPyfmAABAAElEQVR4AeW9B4AURfY/Xt3TEzdHYMk5I7KICKILhwE8DCe7eieiomRByRmGjKCAIHhgjl+PNUc4UVZEggKSdsmwsMuyOU0O3f3/vJqZZcPMgnfeHf5/BbMz3V3hVdVL9erVa6HNhEciCxS7VtBJKvsDJlWUxCjFa8tdk+6oD/zU1ZOMhyttYXYmK1EhMlbgfnudQWgd161y8+jRnhDZgt6+ZdIkY0nU71N/ijlFyjBneAMNTX/3lSZH8k51u1RR0i3KFHZTvrUy9qy13NWvVbtebkWJ0agq0yusdH9+zv5u0Ym4YgfCw0wHY6Lj93zw5Iw8fz2C2WymjxKo91q/U8xmwGOugufhDUuaFpcV9XJ53T0kSUo+VFooJIaHxSXGxifbnE4lwWASL5cUHRA1YmmEVn/Crsjfx2gjD26f+dzFQJu16wzcv4ZvAWU1AXhUVRWGvrSwvdNj73uxorhNpGTofryiSDIJGm2HpOZ9y1wOKdxoYnar9ezlyuKzbSITbSqTf0mMitvfuVW7febBwyp5mykpEtuxQ2aCUIMOhEaTH/qkQHEOEgShHE801wDg9ZNFELwiY4lhXmFWxbqPVzIgFquGWARoYCJ6zRsz/YS9eLmLqYUCE6SanVDQcZHZFK/S0RQZ0a998p2bhz+zK3XLFk16WppcM2+tK3+bzab9dXqx4lmuoH7G6yc8BHQ8+euXPUq3sNiI/sm33vniX54MVr/AUlNFlp4uY+LFQatn/i2nrDDV7XGnWEQlslRRmFslcFSmEUQmW0DSCtEDkkYjaMIjQP4K00sSixAEZnSzypjwyB/ijNEv7pix8jvKVpv46F49qQY8dzw3+eFiS8UTZV5H3wqmGB3AFpfHwzSihsn4ZjYrANMIzOtVWUSEwACHiH9hBItXsbUMiz5q0Bs3Z8x68U3gG8Etms1mhs81EW31+Xj2/15u8ePJQ0MdLucjFtndzY4JLGcKk71eJogiU1VUSeMjAEhZVpnBIIh6I3IoLAxwxSoahju5kTrjBze37v76xuHjj9M4ABaCqQoeSRZZnKLX6ZnL24CJAo29L+HndZcCsAUAAzKoJgNTLe5wfivPUgdqS14ev2cTvOF2o1b02uwNGQawdhIxcEzxMlmnZS7Fq6/9POS1v02rIKN+CVTmRP0BMK7QFq9f9TJFr2Gq7KlbPzghZhP/0+XUF+c/0Hn248suM1eHMsDE3G7MiwAABUUEshHXlAVZNRjCNRgS0Dv+qEx1uj2YTgFI62Iuqk9kkTkO75A4Z+WQ3gvHfZPcptPYDY88fSGllkQI2jcqj7aIWAmeboDnEuAplQGLB/3i8DBFgzyyCiIBxmvDIjWEWVoUdCqKrLhloKnMLCB2C+ik0F7SO8yl7d1yxrBpf14zd/6Xk5Z8CGRk1RE/KCy4mboltYpZ3WoeN/Orw7tm54tyhMXtBAFgFDAk6LpK40NEIAJ+ozFSQ2oApgMPMbser0Izb0MZG7IC6CaS4J5qObFv8i2Lx5n3zNu4mIgjNRVtod8EC8ZTcDMvuqUyD2c/CrCOPsSKrrdPADb/N6bPrQHsXoFh1pCSImqTEItISuL38Ac4RdOH/tII1voncJYjYAyIO0uU8dqSv01JEWWR1w9YatVN17x+jLEqY9xFQvZqyYeMKk1wj/mjVu68fPrjLE9lhzK73Su4vV5R0CjAP8J9AKZKQF2S9JJTVQQXUNCFqaLfdI+eUz4BhVBEofIlDoey11Yw6LvMX44OXD+vawbUJSKSahDU/AkuCrygcVP7LRy7cmfB6Y+PeiwdSh12r+hRILUFFXjI4ZH97eFbAxgg4RRmg5Sja9As2uDwiETAohe6sNPpzVbtHQ8VZ6cPWDZpM4idIz4RSU0grlz5iCNdNn/9bpOOsx//6ainbPlppyXCYnd60EMZRKFidDSB8aE2MRoamx8eECvzKIpI8ND4YCwlEWJGVETF63B7TtnKxJ/txYtuXTx+16a8/SYiDhAK56KiqoCSiFOAygHSH+OjchkAWAXZi5HHyISUIIFhJlGPAaREncVFrQ/q5GPgyxMo9tu+r1a/jyHVrRMzRjdbTRu2MdNbOa3Abge5qSAMkRaGErQoTO5vSxy7feWADCAXj+w+4ayIyL6UvWfEO2vbE5EQ4gWpVWBmM2+uzYxhG391l00rsNkUjax4UQ1xDvpw6glSNuQtVEhcAcQrSBr0Ldda6f3eljdyyJrZu8+rqoFU2QBSVq8kQBxzvtjS+Lv9Px077i7vU2FzeCTONJgWCE9S6zfBQ51DGXw4zmslUaPKDrd7l62g73tvvfVPah+wUBbQXSCBewV+Xu/fYAHgCYpXlURje8HA+sY32U0wpw5sRZ2qJ/072F9PtVWPfnv9yaNGaVFc6b1o/OwigzLW5XC4RfB+dIS4YNBEtykLvmX6gMNx1SFoZtykjJhcHRiJ+4xiDTt5/uR7lDc9jasRVF31RDih3r746XVnRPdYq9XhAa8lFSWkFYeLs2rw0PxcQazqVft+Q0hLQEqJWR2ub0rO9Rr13OS36AmQ0pfhyl/BDyP7cu/WLT9WXI4CIC6wE60XyB0KYYn7EQw0NvTxDeeVSmv/ghILDsJ0zOlxHbQW9U1Z9sxMypMCY8CVfpCAv84TAQiAsQT0irHGMKlnWMLOlHY9222d9+LnGF0xMJjXeTeqgZelObB5s2fYaytuyLWVLbVUWsHSBHDF0HMBJIdAgaKmyiIYhEbVajRQHkRonRwhqlVe5yfK6Zhbdp/3WJL/+tKSxygDIUEgI36T2iU//PKSBy54LROY3eEFonGJEchT+5sQELCAW3lFgoVggiYlKqqCZTDRVfAEBGfIqpdtDvdhW3HavS/MHoacih8GXigA213PTZ+RLTj7QP11oz19KMLw4wcWBjLDarIKHhLG0A5kiJlQRblE0Yii1upwsNPlhdOe/eSN6AxI2dB6aPB+/c/ukjLrRSdVrSS1l6K8rWIbzPxm6soX9hNEWFQxsznkZPzPgL5Kw+lZmTzHpYL853NVF1mDvNDdSaIETdBPyIwgJphMrLFoLHeJ4gmnwJwGr9zIpnrbX3TbgZIYI6gdwSog8QrVRJPnsLELxbljcPkWkKBK6hJCULn9F08ty3ZZAI8kAJEJ7+okugkVX1Z1oqa9IYpFSYZLxbLnrB4EHmEQOhaqzuhsu4X0GBkaJBkT6iQiEp0gSYXWCnZe0ax87cSJz57s0AFrelriMJYBK+XML9+L2fLj19MrXDbAI0qygppqQRTQr/AE+CFqWmjDWEPJdKlYkc/qYTvQKkrHE15rtBPGDqjaCqmstesg4GA6BCEJHouWxR7OPDwCt1Zf9wTCRRwZDmVFig8Ll9rronZ1btd95Oa/jT5BnRq1aZQ26XKSbE5Pp8s/VjKnu4dvfqHdj2cPDmQON1iqJjRxQGUgztwjIrG8fVKLme2bdP/IPGRIMXV4h6pKmzetGCiez1ybrdrai2ReCWGy53q3W2aXHRW9xr2zoc3GR8efMUP6ZkA4E4H0mDd6WKantAMQ2wOWGxQejp/YTGBaQXNrRMN9PVp0WnRrcv+daZ07WwmeV7Zvb7Dn3C99ThfmLdxrKejqcblBJCwokcCiAQOf4AGDaPRO+ktpKP5a/4ULNSn4kQFt4fDpQ8PKtUoscwIeFfDUIg5k4wnEoej1Ok0PU/zOlo2bzRvcJeXQsN69+R7H6q1bY7cf3fH40aILz+W4HbQmA20HrwmcRayElatMqHwQFfsIhNokkiUqp8/1kgJSA7JY6qCPltvEN5n15eRlq34CgKS7D/lrkmrub/Zt6AUsQfUC/5/u3W+v/1LZpbuLNaThk/SAhTRIIh3aq8hi1/D40sE33d5zyb3Dz1fLJvQHp8X11nFbNqTsPPLz6WPW0nDsitCOSR10AoSwP4leu8Sky2X5t6HcmQw/cVCdHtU93eXlZlsxlEhGHV4Rmy3Jxrivds3f+OddKLeOCvvaU0cOHFiA35/Qp8u8EVuOqRWpqkcmGIMyZEgGsczlZOWSnbj2ayBUhaX6YL9YVDiwFGZrvi4LNbywNGNRpmkhmf6xZ8HGh/egkvfxQaL+q5PvvrsU36v/vHZ2sT3/3FslDrsCI1ZQgqXRYW4vc0ieHpM/fb2pCAEKoSzTfhN2d1RYKtB5iPI6I0vN/ZcStc23m2A4iQsPl26LarL7js59uhFxEAijNm3SHkg6RcThXfPrjugR61bcAAoH+MHVgf8S2GjmGkat1iTLLvdtFtlDa6ughekmdhOUOKhVLWOT5hBxtDA/biCu72+Q97vJpFTjxrTx+S1ik9ZqDUZSF4Lit695US2DmeNs8eVmNDbG2BKukt29fOZNpR5nV5j98TS4moaMqEKR2jJ95Z9vuYsQGnsUZh2pRfhJ1dNuvTho3QS+1zPqnqFPddSGV0Ifk3xlqUTNhA5AiiisyGG/cdimpY3wVGHpTF51eFsYiLkP9AcMTjWDUrXiGAQY6BVNG63JPbB///H0KNVcAx5mVvlYSV8+u+ztFrqwnxnUMN/WSLWK/D99kkWQKwXFcPLsmTaiVhCiI8LDWJTRqDcYjRLp+DDaY59FhewTvFho1ZrSupX+nncg/kCrEKeiIHU0xSm3xbecuXPu+r7rh43JIqlh3mGWuBsIdswnvb2+Z/rnW07+cPEILfBY8ujRQTnUFfiC4uCVx/+1X1fALHDbmnOFiMvwugAAYiIAKRrbHs0aNfyccjzOWriBhJhLv8AHc7jlFt9eUKwx8uNGfPtBqWaBqVkvYQd251miKbwjPfnm4Bd8YByCc+glEYxegCG2ZpGqKzzwag0G1jKu4Wvmu/5S2NmcqktPM7uxzggUUQm2byaud9Gzib0HV0YbIzYzgx5snv7XTT6kZF6HRjWWlFfcHMhx+Kefm5TarTGcJEMxP5IeOokl6iP+uWHgYyUshUnp5hrwMLNgVoA7vI/Nw+K+MWFfHAyAxq9O4p3ARnIxNkTPFeVqxJYxCa8PiG258e5mXV9INias6qgJ/6CjIfJiQ/jTKFBtZOw0wJ6GvTj/ZNSp8ve5QdDjQ7wLi9Bw7W3RTffendy32yfPLnmOWiDCOHDKJzWIWw1dM3fZtuO//LLbXZJ41mUnNypGUoW+r+uETmKfkLqLPn0RD4W4DXFIrA5JItRJWhp94EDTsJiKOwbegVUvYwsWLKjTz/TULXzCW7VsfSFaZ6gAvRHL5WzdP7ZcRPGGaaihKlR63MStGXszmyOuxW4Dt5ZDwsIBVGVNM1HPGic2+YiKduqUGhTp6VkCK/IhocC2x3DvHp+ptDY8PpgE1QmI7R7XjVSWUqGlvJlghHWa1jscPfjtGn+wZlc1ko5l2yy/0IPkdj5CqJEJF60GlnFYPFpxN8QSRkbl/hTBYVHVaK2O9WzV8SZp9+z1L9eubMOOHeGf/rqtTwerdVShtvLBLNkmwRUFLEmEiST4RNau47dck+kSSp7CtDqpoSxYbghLmLdtzpoXd6ISkhqtBg5UzP3TSIdlE7as63X7kgmvHnaWdK2wV3r0hjCtEXtP5b+lwesk78nLeczicQFryD2i/kRbfY3j24dERtTBicZ8d1pph1mPncL1TbASkYcBV5+q187VL1XQFNtt8NPgyUPqzKtb3msDoy2KYlfA7+JVvRzNE0hbjBT1l4Y9dv+B1x6fxNJTU0OCnsJSlAwstVtFJOWcLy30YIqx5Q3vD/ytqpegpiswYbvi1f5QcM4VeJZVVuAppi6AcOpwhECmQHHsi9OtgOdEtcf+n6n4TmftW7TzZlcUsSK53KtIZDEOUrOqeuxeWSorq9BLJAYzs4tE9mYGLXb5BIzv35+sEbSj+M9Rb6+92XQua062UDmk2GmHSijC2hp60whlri0BLr9hwItFkBRpNIpNmWFr1+ZtR30wfm4OVZICuzwGWD2QtpnDdf+auQt2HP3VfMyONZfMPEbRoDqAFxoRmiClIL5Y/P51+kfr8cCRgSboCr7UBhXrDzwUWYndEvvl1+mReG6vnSdwHdh1LrDZ5YjYKKY4XXpy3KudYMORnGDMsaIp6pz/4eG9+9s7ZW9DqHtggcH1fWCgQlt8UcawrP5CSyIu0EzovQ7zArPKzIyVll7OpU6YwsM0vt29uv3FxolUqZfYPbFN+37lhwlrC0g6/0WIL/RO8GIN1zYirttl5MnIMAfN2TkrSyU7p+xwZju8biZEROrDMa5ByANbRbIUGxnGEqIidFImTI1UI9QWcep7mzpl5meHaXUaTaw+qqilLuGSefgT+/D43j+vmzv0QkHeO0edZQb4FcENglwgqOS/lrA5S3tbCqzUUhuN0ZNgjHp69/yXNtPOQDJMt61iBip+T1p15JurO2deOPvmpwWnejJs5EgaiXQSER1VI/SRLNotlnOsCeKL9a9B9x8sVW3M4JKtMYq+tWsoTABnAIoI3suy0/TrmaMDANn7PTfztZbPelcNVJ+aJbBBbbq+ZxO9hyEGHGguCIUAqWUlXK8z7uT7SKijwFYebyfsBcLj75VFUrX6AQtOF8CZk6kH+G1zCtxSMqrlqPXTj9w3J9/pjck5+LzV6w6DixgEGCRILajgOgDlmpliJOPeQC1hBqNY7oF/F19ehaQUDbwzWaFUOYg299Y+8EQ51kA1PHKpPtzjI7/m0w25D/T7y7LOTIgig5RaXZoFGobjI9xOw+Ni476Q0jYt7X+5KO+xtnOHJ+tVsVO54hG14DqwbFX8qjMU9l024ecoKfyDLycu+XDjkR+/e/3Dd77b7yi+UXV7PXzjhtTKkLAHWrzyzRUBAIbdGikcA9CM6bcP7N570rqHxx5DLhFOa0JR1kY1fbRPavRbOnHCP7N+eeECc2NmvF6dRivCIQ6dVaRWkdGsbXiDtU927vViGvsHRiGDS5orrV2HvzBWWHLwdHO/uyt/PLWvCEgZidUC+lRN9fCDTrNKfodFLuzwFufM26+q6T0FwROQFv5svi+fmiW8P3H+SzXu13NBKizt5oczqYeH89N6fI4g7eJFibWIiLOSKTUF/yDh66ndx6CxX0P8a2Z9Gas/C7jkd4lvarPmnYTnLVc2gnJ7SDVohKL3hNcerj/00wzUM+vdkn1kLq9S1fx1cwJh6ZnuT9Iz51Rvr77f0i/ZJ5df0Mk3K9hdhTM9VQKbGlZUWimKuZ1RTHC2jWKlj7SfOfzEt//8buT+RZt79F487h8XvZa0vLJyGdwc2g55btafiIZASVho4D9O2TRmOkfTsPgpe+etfzmLveWXGmUkNUiXVB9at7j1iaLzmw/biwZUum1ctQNBCm7sBxhNRrGLLvJs15btR77+2JQd26hp4kpXLCl057pNosYne59o2dLZc9HYo8xjaa14sLdHDpNBEje5Kqr3nNveYeayKaQp3E9uNVwF9e9+VyumEvGc2x4jhtbHcVQCxwBo4VqU5fN2/i7/vNbJFVUSI6FmUxXhjsysLvtBai+hU2aojNXA8f0kWKnN+mDKwPNUrDexrpFhemK9OnY6fvzyubI8puJQmIA9iBCsmPxVXV52Xq2Y2X3+qIOHFm1OB+1K5hSzAslB+FQjEQFa8trVCwvBOiQpSZZK3A6rip1VLHHsilZnitPpJZOXlUZodBcahkcVV7isF42SvvsFe2nDS56SH/ssHL9+97wND/35hZn5Lpd7YokHqijWAzjAQ6ZhLqQDfJATBawMWPPBWwfre0HRRhtNYpKo294uvuXITyeZswG5iMETMy5jrTHaJwFSVkwcvzc3a/UFwaNDx2F4kDRwV1YVDXbT4U6UHNVk7UvTV81sKwguNipZyzbtJ6K+5smqMVr/44sG+oi9Ea6y+y0uaDb1SGLghuR0ueTtpefu67vw6S3PjJjxWFrTpo5giOD3SbuqND2wGZ1PSefqVK+Yhk22l+fysxN1MArZCDTMLzOCITpNOv86KBV3iV6vnjLqEnLQQumbCSiexJl3pFXcMO/Jg2Cof1Khc+BuHYODPy9QTFQqvR4x2162ZfDKaU9/PX3VBjPWI34JSTK7Cj8y+KG6DH/R0F+kR4pGYmfovU6vM7XWhh3pG9vs2ZQuPTpmLX+rx/dz1t15YNHrT+2a/3LPnOf/0aR1XEIXtOKcuOkF85dTVjzTPizhTzeYYs4nhIdpZQ3cjqHPYQwhJEio0F4VllmgDxCHGGnSa1vrwktuDEscn7X0rTuIOAh4UqkweOAYGd5H317Vsvu8kd8eqix66YLHphPdMihE1Higk5hMBm1yWMLJGxu2uHHbjOcnEXGQmwkrgwfvdUMcVXMQetRrZenYqPFXTRRoBIoXi5HQFELFyKcJ29vyT47C1FWbF2U++eoLf4KG4+Vckk42htorCA0NVrU+xDHpjB3JggUOFxQILtowuZGilrU2RIZC1Ppa+k3PiGlSAb3W8EGEXgeEAlaFSIS/tHdHG9zlXhc7UJn3Um/z6A9mbX8rjtRHFFNRX9B1VYgqq25LDqZGNtaHsWbayAV7zBsWna16xAdKYljNsEzfJtT/jZpPa+jpw7ZsCB+1aUXU5tEzv9+Wn991yRsr/tpEY32yzGnvbmFeg42GGDMaBmNIGCY0wRBxLjLC9O7tbZL/bv7LcBxJZQIAxiBnqOl+C9WdK6eN3Z15ZM1Z1a7HVr8Hbj4i7II43SSL7SJjWfuoRi+Pnbpi0mAQBhEWierNo7lzXQDl/K1e6cB//1dQ3KoJRrUsgyZM0D8//JljtywY8yFTHEMVl0Im0KDuJlQJ7ygdlsLRwV/chS0rsj3b+5jHru/TqtuS54ePLSS1hBAh4xq5NQfMLwTyLGXw5MOGNqFi0OQbXnj3gpmaAmMeNOfvcRN94IAM7nD723n7P55nEYVmIF5iuJxwgrVBzyBJ1AKrRS4yeh4q2Lat/4DlExd8N/PFTWAuJEWwxk2tcqEPVkfte1JnQ/SeyPCoWdtmrNxBD8nsa2gUA3WHU54HxMGwMNQ+vH6i2KTUIjRt1VkzPm08d0qj/Hc1bGjD16v0eeL1F5rm5l+68bylNAq2W2+rqDhvUmzMkXfGzj1LAFID5AZQBIL3D4A6/r2Xmu8/dXTzLxW5d5ZhrQFB5KFVlwdrDZPJKNxgiM7u1qrjqE2PPvvtF9Oe4wiAatQAEvQyjx5ThrPHp1/44O/cq9d/VBJ5rvsU3i9OZesZ69C8zYKi07ahZ9RyrQYjgEMM1cioZjf8RKKVVFE+VVEinjLpJ1hP7XtyyJqZyx59dvmKNB8iCECE3+T+X+ay+4REzeaqrgIAgUszA/uXmHFVXdf4g3N9c1qa+5aF4xYVOYteddnh9EgUUE8FEDOURVIdHs95wZnocAovd5r72JN3rZw5b9v0FVuhfgIJmcbcGQ4oQdYntauW9izeNInfhIhO7TQOHJ1vyCk7zp83rP1403155cUDxywa3T+3olS4ALNsg2MHNL0WjKqINoXtjo+I/eT9cfO2+yvVvDFiSg5+04enbP/3u+PmCeQ/FNdIJ6ePNnOzMj26Z83MUd9m7nvxlGw3wFTn1SFCCYIS0FxoEnRGlhzXbMP8KSun9REErmunpJhZRiYWhiCCOV+81XjfsV83HXCX3lMhO5fzpmLO0SSHYoE8y/X1pxNUS7P0xoipWXesmjolX/C8YLU5vHBO1F6tE9gE1GgkEBPU0CPuUlOmbFuSPWfEiLSXFi3d8vT81/k6JCUFC9WUoAvVK+PgEyFwhvSLqCtP6v7CBhi0AoPBRyB+4VM32+90hzNBMxPhgPhaz3kj0341Vtwpk886HW6qJ3FdDJIY/otKfrlVzteKPa2Vl77pYR71TZQhZtqOmc9hd8PMGKmlCzL4WfZQ1VFPObcpyuqME2a+CB7DXl7+4PS3lq3K8dpb5sOTEvv/IEuYfoG6uR4Hy1UdQEND94YVheNaz3jkwI3N2i77cLz5Y2pk5OZVD2c7Cg98+8yq09UaVbPNbzqzcWMLDu289vy0O3LKC6fvK7pwW7EDm4+QGhKOCUOzwqLIIPUNS8xp3bTF8DefmJaxdeoq7tJ+6nJSldS4dcnEB9L3fPfqKa89FuCzSFjEuF/zH2EfpNqg8J8+dUj8dtrzq29bMrHPLjX/QdnhcsMnTcdtXQHWXbscroHSeEqIICmywysf1ZS3ys8/8doN80c80alhm7n/N272D+aMjGtSu7Bg5LUFaYbf4mAgCzaKoePVI0Fo7ZCZWQ/UoVrw3Td37lyDs5uZ798dXe8YVrb/i1/O6rzNNR4VuyOqtj5JQrWhT3QYEschVTmnsoLl6G2Dmjosg25fOuHNbm1vnL4+bUQRqvcHhPAFafBBceWvBDEjcGpKT+eesVu3f7Pup0vHHz1vh/OGLHi02PsENKBHURuF8C4NdAa3Tqu7iGNblXbVo4nQSD1OluR9NHDZM1+2a9Pur0qlO8dl83zUY8EoS5Sg2WbXas7FR0brC4sKaQvjxkXzRtxazjwdc3G4B34/Xh1UCjc6gnMBmg7RcayhKfr5V2asmUuLcFprkJvJZh/hKrTo+ipj55oTtuJHi5028liwa416k12mg2Z/3ARjBk4ICWzn3HVDsbj8PEuqHFJpteE0G05Q1Yu2vj5jt500H5hbBLnIalOKdK5biy4ey+i9ZPwbKd37TFnx50fKSK0Adwpp0OC+v/UtvfkIKwzno5hJbwiVk86zh1xMX8sM+c/1UGsc/4Gf/JTh8rS0oj8tnX2zq+LCz7kaWzOsKMBEmO5qjfmf4ywahggHanJUm5RjcT+e/2vZ0LQX5y/b8syi5fWYzBkRCK9j+N+X3PfuZ+9vOuCqaICzwrIRZ3dcGHEEsdA2NUWwhobIH2D23ZwQ3XDv3U8MvZwmwMSINPOnbYk/HdjXqMBe8UR5acXrI/9y34jPM/akZJ069tkptXJhCaQCKyghxzjf1o0b1wocbMCJsOTSubUia2g0MhgKDndq1PaZd0ZN/6HtzLVVUiMg1R57ZdmT2zJ+WHPEUxkBdUzWI96RCwEt3NiCbaLXm3IJGNi2ySzzR0sgDuKafPd3r3nTvbctfvrVXTrvk16ckQC3plOG9bDsK72l/ShIHg04midPsUn5gvxE5U9bBz+wes7oTyYv/QxmMOCvr50rpa7tF5kkmUarKbBUuAut5eepVBbcN6pKQxUCN1ZaTXlwZoHKegC9wQFDL6iryvl/kJ9XpaKYUlt1OZj+zOIVuE3qMsfNDEhZ8q74bvSygtQNK2/OKTq/e6+jqKUKtRwqH/yPr96On1AomomKmETek4IlvKTo7LIBSyfe36lt14dfSht5nqtcteKqSbM+fitu/5nDz+/KPfn4ORu5/Ekeg06rcXghNySdlGyIq+zStO2Et0bOfNvfF/b6CL5sIS4ij+17F1ml6PPs6i1bjF9+uyNxDWIv4brfk68+f1tW7pkxFcw5yCZqoitxZsapk5heo9HpoB800Ohko1b/U1xY5GvfTF/1Nvdf8G3wMPNobsVQEOol8suff1z//cXjw3Os5RSSB3suGhGxq3CQQW+41ZhwuXPrlp9tYh8wMzZ2zGj4j5iAuLRW4ESyc95LT93/wsyzZ8oLlx2zlUp04g4UIiGCC+fj9fXPhwiQ97QtBX09izkaOMtzP+23ZMKyH+eun1O9nbr1hK6elAjEWRDOuu2Vq1aNJrcnhrquEEhmKgqnMxxxHGqL1CULDuzLExO8xsT1JY0Gu9RqKxQhAqkBDBmNUrBeSx8/PX+Hqnaas3jsO2c05UMLrdhEhusRtttCBpWoDgLGByYQHOpgGqXYavV+77T1unyo8vi9G+c/+Pm4RV8hL8frQBlp+6+73vmV2Qd5Ky0eHRzRPJD2cFoTm4RHiV0iGnwx4OYBo6b3vyefCsICpUlvlKcyn4WLryM3wcIFWzPLcbnEyWlpJFUuBCp/7ampO/F7J4VsuVSc0+d0fk4UNnLcjQzhUuPwuLJ2DRofWfXw6LOB/HQQ6tTly8RNgf2M3bl6zpD3f9y2+bTqaqg6XF69Ros4UAhvBXWsdUQ06xjd5I3RUyY8PURIslOwL5TjMAXq+6N9A354CkLb6i9oPp2yYvnYd9ftMJ469topT0WnChvWajh1CM5MQRSumqCjE4LpcAZdPldRouaHu2YPWD65+/ezVt9D7eDDibFmRVfwveZ9UCcQy4v16A0RCfFpc99rN+eBRw5hDwuWspqRJ+HcVMps8NaSVSdgDaWK1a4ePADTqnoN2KmEJ2rwlAG8IC+B/ohLhxypd6+c9vhlofiVw+4KCYGvEL0E0SYhRYOXrnkXIfywPBF0Gq/gOe4p0dsvyV8O37hkztvj5i7j6igObFEJKctaZvLCUcQAlcopexDkFYsKfYKla6M2z7w1bvYbW9kL1Z0HuQVqxpa3m2XmZD3icrvuenH+iKRchxXAwUQ873FNpNZ4IiI8Ymuflh2/Nj/wRDY1snRI2iV8VW250kXASY4lM23KELMmg2V4A/FwZ3y7JerggT2vZpZeHHrJSctv0aMXtBqXjHPbBkg1Y3Rej2YdR78yYsqXX05dzhehOCTDiQqZ/9CJ1C10wEseAi8Pm7gXBNN10Mpp888qebNPq07ovbKMdSGc2eDeU4PHBu82XK/BVrSqHdFDvpdzB6csfebrjDkvDiYi4RuLaWm+gldh9tDO4KSlyCYj9tJFIYEKBbNiIZPE1Wevl/ZzrglZqS70Gu6nAAIMgK5DJVov+ImbbZ2+6s2ZH723M/zEnjVnbaX35mNdCkqDFVDEfirWZVdJxGiwwajVCpJ8wVIu7C45v/S+tXNLPnt2ySZS6UhqSVhky3YEFHTKLm3DiEjWJTzhq3v63jZy0m0PkhjVpGAR73MD2UxqqHD3qqkrth3NmHpCtotONyxcZP3wi9IyWthLlrZRrvIhRaXFnsHPT3uvS8sb5q18cFjulPdevivfXlnx3sgZVd6aHP4DzJNxwHeufNn2j+P2Hz847ssdX0/K9FTGMI9X1mKMPThgROuNZmGRrH1kwlsjn3jq6bREBAhIYVLquC2qz3fHzKv7/82fzQe4SgGCIcI3j3tn9btJF86vPucoH5Jjo/Nh/LQnnWa/Kpl4oJoBaXSy0+k6oi0e9Kflk5d9N2v1bLawPxA4gYsNEIB/WRx8BGmaaVnghprsUOA++z9MnLjRPhlxVjz4yDn8vO/B9eb7z5fkrTzqKGvr4dFL+Lhdk7SFMqiBe6ByprhArbRY/566aUlm+ui5PHayZCcvKZwN6KpPqOjQoOmU9AmLXtvOXqwuNThnfnjtopt7zB/x+iHZ1km1Yv0lYi1AthOSjdxNhoYPo4x4rBVOh/qrYtX+Klsfz6soSRu6fuHQTs27Hs7c/dkbty8a34BpNf+AC8HppOg4I4hMLrNaYnCm//Z/7PzqT5dke2yx3Y44DdgSod10FQxBpxe6aSPzOzdpNeb9MXM/+3bGmurw+dQqEO/143Ly+2BPBklF9KvzwjTtxkcnn0Gt9963zjywSenltSfcFZ0RmhQaCc7ngC1x/K2nWTLjgtnoSysq5FOKOCv15cXb08fO+56fB4I6gRMOJLfqT5heLwxhdrfPalilEtQsRZIJxAbrSbUNT0gWEo1XJeaaVdV/RW4kFLIUah77aIL5U+T+9J4XZs44W3pp9gmPLRJ+fDIPrH0NahckLTRYrbdQcUsnLpx5B5vj7chrWmokGSJv0IfvfvCuB//ybG8ejUKE1PA7D/qkBiLNLd1bcHJWtgciTIbfuUarBdVp+cFlrhH4OoKR4T+gClIgEgrn6DmkFphckvC1Z89Xz0Ak3pVsfup5l1dYVuq1shOWQkhthZXhAIsVh16YCxJJ0DgwjIicx3TwKGZNEDmxbUTCG08O/NuzPIxLQGrAJR4iUDZ/9UbDvYcyE7cKwhGuMlw3fln1T+41P0V/MsF2Aojw2UTzdpTtAheKMZfUklUnZWc4XHMowNtVTcKQJPD706o5TguLz7+4CvUkY8eML2midXAf8SKuFlA4GLHxe+BBFAe4POCvH6QTWEHpcWCHifAWwsGrqhyqh/xJiUyqbv0uPwJrIOCsRAzlqykrnpvx7aa/h/34y+JKg3fCaUsZ9tkgTXhc4/qbBJFI4ADu0zpnixFznhqH3C+Kt7boOPnHBS/3JeIgvcvvPOgl58GHNiy6CQh9ZJ+tYFa2rVLVyFxs6UAc9XaTBpPy4DyYTo/gecdLCuT91twX+yG85gHzq1MHt+/doYGsec5jd2RX2KzYDoEQQCER0TjC4F/SQGeUmkv6gt7h8R8MaNejz46560YQcXD4xqXSbj93bhyx6flbv96/98KhoouPUtevHrSBcv0xkx8RZEIE6sH3s9b9/b6eKR1vj2i4tQGiTMLED74U+nRfoNeQJBKcEr3FXluPxzYvuxf3udyINYSDrZGtKpCz5jesRGBeAuYVgbK9tEaulbDBR3ewu5kt2Oz5WK6cZF7PGRUfGKpPJUo6B2EN6g/RQq36fuMlEQcxSFK7nrtjdMWBRa9O7JnU9s52hqhTEtatiLZIx06v2jZUUcnpdLIKr2Pq6t1bjNJrY2f/RLBwCrxMLue+g0p9lk1YvDv35FzspmMIFbdGo4H7Awb3NyZEH8f+oFa9VF4h2yLkpZ3mjtCuTHtyIaqZad7/xaIjew/0PF5woV3bqPi2JoMp+uDFcwd6tOhwqVF82+/XwCrGFyxwCUjBgqO6S/zN5vGL/3n2wNxcyBpJ8ZJ9+o8RtKHa+BVlZdXLaKplrfoZQARSu1Y+ODIXDwYNXTt39LGCi38/4ayEoiSA3YS25BCG4AAWy4HX65niy3/DJY+Ugqg2dh8NEImEwCNAi0PCDO/jqAs3LfqRytd89Bh9V6XUVMmTnu6Om/vUykK5YhpzQJSEiP9VVeZf/QFpi60Cj5ksdBlm8f/GzPkW6+aOt+CIRo7WOu5SZbkKAvDFC6vbA94qtCB4bOJMupY1+Xrnz0MkMpvBzYRczjkn+duLi5KPFWW/ftBa3M1ps9ELnOigAm1b/MuJFonQlcVyq022GGUziETIWvK62dyTnzTbiYp3Hq9W+6nA79TOukH9BgjffHxUzsjwwXf/i/OSzxbmvH7IXdLN5bLDumXQGplG4hQSKPdH+b6dAxpiqup04grWVqld9M6MdPVDWF0e2bRid/7JA9vKBU+j+iIrUq1YGsAM5mVFtoqe606f1k9s29Z1oPjiL6JWNxjnu9HOlaYCUPjuCMyBRfqlcgRg4CnoKoQTSqAcvjnqFLuslZIWR0mrPbiGn799bFApCIRgUOg4BNQ6gnV86npzznfOzOWl2LCGeZdi/gStm/qJMkIRwv5UOiz9xfSsoiri6L/kmYV78k/sP+Io6+a0O0lqgJiuvgBEnVdNBBAAE+FnJJ9V7AtwqOUNKjRwxqgoWMa6Ba0AxyMpvhJO4nuf3vJKy9uXPrNx36XT+4+6Ld1cDic24TUKLO6snP37QRsCKBH4DgpP/TeDDnh9RTIQ+A7Pqcmrf8gIUStxh0QgQpsJg/TvjZ55tH+rzilttOEUdoFiYoXsCp1hg64NhwRP84O7PmtJ1eKkOL0bCqWCF+N3cfANbkEsUdUnURlirPRdK9G9K5+YGICCcx2wEwWvuVbpmpdU5Fo+NUv5rzbDTEvShLYS0ieYVwxo1nF+NNR4jA9FwgiZoKpifBAFWfX2kGit8bfNS7tn5Z5/42d7QXebDS7nElRaQf23pEaw1olIMAmiy2b37NPkPX7nc5Oj/zlj9QMDVky596aFY17D+ZGPEsKj9uBo6fksp4PdGRkTVVZp61rutQ/YdvCH4Rc1Xi2kBkUFR9xYbI5gbZpoDGdt9XFlpCemJA1RM5gvnkCw9q/lHhkayKx8LXmr5yGWdfWEajHdsF7z/QEwibWI6j4EngEkAPm9GnUAkzGXWq0olCgLRw9Cz6DvcuSrgWtn1n/jIiL55Gnzqd6Lxj11TnG9objJgy5Inb4GCBAKuCbZ7I4WuHWiS2xjZ0nZRTCbGlX7cgf+whAFWwA5rnamW4G3dwUe+79rVuB/gREd5GCcVGrlDnH57BtrIg7lZ3+Bl/bE4Kg1SYE6c4Ib8C9XI+OMph3fzVo7EqJDxKfGVIBA6Fplo5j2wwmLFicvHH3zAcVzD/kB4m7QJQNwVCPDYKSJ0PaUbl3y9LifL5zYcAaWDZCMb61BC7n/UIK8hfFWoy2ptLh2qMr9nec9+eH3M18YetO8kbkXZfsbZxi8hUsraFfU/ZOlXEch9UsU7E86ET9Kg/NdoqD14ugu0+lYG0OEvY0xcdrWGS9spAHM8KuJQUEn9KtHvvsWoSJzgHMUl5f+Zo3SAGdnpKBNX7kJZRV7RuRgSvfKnY5bj7jKWuG1TGQjD56gDDSTTCwtuX+DA2zzeUw4hfas0xCIBIPE2J55G97qPPexRVleN+LKIpJ5ED8ljkHQsophPTx2+TwflUK7dT+PhYH8fE8wGDSAugIuPjDdc/z4TwTq49INbR+6kCsdt+b1KhDgz1pXePqgo/HWSayBq7KI38g01yEifzfUlCQzmKeZdUxq8Xz+ecs9l9xWKFLBw/7AmwTzIbGLzkpRPF5e9MQZOqiEN3lh3khqhGrE39a//4VFJIX613vwcpZMV9mDPcwjd/6y+JU3zy17W4h0CevaGcLcsUadsViUNSWykwMk0EsYdVpjpM4gtdSFFSXrY1endElu5ScOAqoO0lSH1IAOh8LBqsKQrOWke1rKTL6yQXXs6tUylpnB270hvmkPFUwJ3Cfo+Pluko6psHCNBHs231OoBFMCG1PcuE+vcKvx0eMcP0OM0MTwSPKgbUNlOnXqFLR+PFLJ2Q6zjoA08lcM71oEstXgplS+eiKmHkhNo+Id0UAYVINRCJ7AYwQVOnyUwdSL5zD7+h489793N1/nhFIp4IAqXoCqIKx9rbHh1yoYOliA1ePlpx3gbhSy0YwFCzjTS+7Z+xDOGkFQQqUMabOjakgLRegddLocHA0rKQVnmkPW/7s/ICLBTGjheerOclb26zZ/REG3xq0HvTt6zjPPvP/KsovFF+9xOO39LtrKowvwuq4GEVHaaJ3xAhag27u167ADgZqtXJmCWY9t2nTVoA2t4hsJ53LLKaYT73zwDgmKBpRr0uop/OU3Ph37KkSS7hu1M+UF8fQLa7ag+AVkBFfAe5FdjspThbknqH2OoDAaYY7hN11XHaLlMuQtK8a7MbIunee21fqhSUGBDHbSZb+gMdI5bh6lBvdqJgKQqsZ5f/h7mjgRNUhqdlxbcKYc0Ef7H9fpB6S6KEPquF3ODrtV1cgPstHaCERZs4Xf5wqijS8HaHyoldq10k0ZDKe5MTI+Cw/9a7La2fg1H0r8eqh7ivvzrZ9CXcqPxsE0eudMnXqxVgbfUtQ4nUmQaNr4CAVqCFr9f+amv0kdPCDcR9zOxPILzgN9Fo5b+OLfRprR4uv+D2+8hP/1/dlFXzgaPApHgzdvR8zVa5ggMOpDfJVIfAkDEGxGcVuwwD3/QllRO2oiA//qTT7kUO5fY47+Je9kJ4prC4wOKqi45QRrw0amiNIR9/3Z+slYM8P+hYBXwBKjCJp8BISYtTDcwr2/LTL9WL9pOIPX0ys6MelnRylhVFDMpeawtmHxiD/buXFzdhDXdHio3exHT4OIbyLswK06ayJflEcBUditjd9/86XmyHPCvHChYPbRGy5/j+QbjFvatBf3HbFpSq2kVeM100GrhkkWBILJbEMv2uHnXkIQbGCIvz+zT8L5IWgIcAIJQhzUDM708mPPyISQo//jxBEVG4rQl+WLeCPREVfpgi6zHzvdc+GYBzft3+9XdfxAwhpBrhHUB4aIkGSloOO35i1b6F7QlEKMGinCqM+MxFtNMSoSDUCwzBhEDb1yGd9/mfX16wlkwIC+H3KMkn0RDuFt40q1aBTivMSyA3NRowkgO2IPSyxSMh4fktTTTg8dbtchAZEKMflB4eEVgPhLsHgqtpT2oOsQC2OeFfDyvkIjuJXhveWc/fqe1P5LiyGN1+Vx4A3gVVb1MFF/hHbBOcrVLoFrwAnTiOi9iDXz8ZKcAZTli0Z5dQipZtGMwGXQcQk8DHwjEx+L4akTynASMAcEi0f0ysa6CTdpa14pl12RedkXOlCO1PT0oPNFhEzP9/16qElhZWUsFSUtJljC6l2maPQOj/tQ0MqCFfpP3wMCYSgkuHm5PMecFW3Ouys+XP/JhsNweFz9wJpZt9C5FRioPP5QqcqYj19OTF236HacXPxoy77PJhB8FBCsNpxAcD64bz4x/TT0+CxCALDsegZc9FwQnBG7Dx2ZSXWZM83YK6r5imIsxoWAtyflKagsm0NvJSIVhK6DJVotR2v1LCoi6rvAc63eeDYacaZI+wqVyIXEA4vKZUvpPWiXv9MwxbebXh3hBP/7OJS/vrK0W7a17EZy90WTQeEB4cCipLJYU1jhpEcmFKJtni9WF5YR53vJVV29ww8gHVByIMig02mfSrewsQwX9Jrj489KX8Kg2K4+AiJuHbqbV4r4c/WHkybeGJVNBAKLatCS/CZWdQVwIMipLHiUKkn/cbZUm6nRfG2ryNTT82MXztxXqgMsGFZOYHSzVvLXy8K1xmNBB7BW/v/aJV75RWtMLXRLuQTvCD/mKG2zszRn0vZLp3d//vN35xtPf+hAzLSH9yZNf/jA97/sOrszNzPjsOj4S5bbRtybZYQIXk3uB/Qca4vPyfqFQGBBCYTyYDYlJ4KeHyvNm4wACGlw0nf73TxwHI8jEqlogagvrN/ipz/YZy1qDsswArkER0i+GFQUbQNZ8uD1YB9SO5RwqOknHU0TEL86tvue+v6Cm5GpxXvBa2/xp+emrKC7GT5rHRblgMcHk8r3i/DsRE72y/mw+kGK0JH2oNXiPrR6iUVrTfs7C4IbUhlUythNbTvsivEiGJ8iY0svODrzPuKN58dsxS0HrJg0F8V8rj90pJc8Hoh4fYyKcKsKLpMGr3XnumRQkKh5X6q2hovQGX7G62qIf3CcDWSp/o3BgTu6W71QUTT2kb8v/RNbf8ZlDph6q83XnjXpjmkfvdn3YvHleRVWKxlTeJ+r13Xlt8pM0JQVJu64rgiEAKSRIFcJkDh2lkTFipfFWxAFPdNRHnEJGzdlzHtznuLpccphDS9wO1wqkDkSHq28cyGCNgTeDdGzWYdPuujCIUA9eD1l8ImikDv08tgSBKc4XHD2H7eteHbtpC2bunLQzKR9MPXVzN2xaX9fPLinedSBXZb8h+AsSJEx6hlw+LDptaxpZOzHLzz41AU/ArHnJy/PbKIPzwVq0e5CSKIlkCrsDnVXSc7UWxaPfRMB9rp8rZ7WgzgU+mQiEMbjr6xKgTXwp1/txX1w9loOtuinMaJe005iks7EmkQlfkb3Elhn1JMirfjr2OxYbfg38KCj29Co6iaaH6ynJBzgUg+V5i0euOzZdUu3v98AjIT7x2UQ8UI1RTYO1/gPXupx7+qZY6DQPKa4oL4GMUbUbcV3J8Jg3BpLQW7grhR8ttAIuiTh5brnnFZ2MPvkt/esnTV75idvtOA10Pig9LKdWxIeXDd37PeHf9px1mM3IrQSef8FrRIMEuSoSs2Z3jage999QsKUh74v0sj9/ZPsE4c++K6rvxLUAnSqKtAHNAR6fRwhntZk95qt6z5eyBHPNznBYKe+yX0Wj3t3t6XgERy2h5EodJA2ag97SWAlBrGLFg6zsnwEQZmsOrjdRGh17bJdlZGF8GeiDSdIFDJ2BE2+ejxq5+hEcUCnXt3XPzzmMLn3kAcDIRJUyJe/Ljo/RnDBxwPSM2gluEnrJqhM2JKWhFZaE4LySWdtslxA+Y1MbOiU1FZn8R4hsIqQxEF5dZAsbq9L7B3bpHj+hKmtB8e1rSQVJC09jcfRunet+bb9+ad+wJtwZRy58xlwqGCtBM4KR2xVjQg3io0UbWUDY9SvFYr7V6siu6IlSR+nDbuxyF7RDIH/WuYqTlYJB0BIWcxfcCmLccI5VlXzQPOuOz6ZuHgAmuPz1WbWsENnPNYbcN4YAx3axwwMT4HTK+LDG9gNYhh6JByrVBWLgak6k6jpeEaxhyEQBqQ2XpRbj68aYrZ4FBxd7W2Ie3Wv+eWR9XC9WiPyP76EqkEUzwmYSxlc0Y2gbCAIrBC7dJSX9Wpxw7SKrN1Dsf+ih0U3pGMftYfAU4KMwADH7IUaqGbd+MEwLCaYFXtyOIUGwgDKhiYOIDUoWPHow8J07WKTniPiYCkpEsyRfPFvhpWsSXzT5zuWFIw5rpRCm9AGNTtSdyAR0Bp6ixNLODSlwXv2WmMzqzUXuXQ+H/sEeG0zAtGERiIaKwT/9iZGRunaxCetJOJIgUqEfhDHl+mo6efPmnfetuTpr/KY6x7EbHaj/qAGEOLcdGbVYoOEZ/bIU17r7UzS3q7DNuM5sk/jKAOFMgUDASvD3i7WUqGIg/pXJ01oI0FdklvGN3qlqOTSSxWynWRJyCDpdJ6Dv+DJ6ZIP0wuftNquPoMiTQI24nEaAJoBnVkOKQRADKrX69a20UWpXTp1WkaOstedilVnoH6nGyAOHj5m7aOjL7dNaDw8zmAir28EsRHoBfNBk9/KIUka8F2EUBUgRohD60Ss8viE+wi2TmHUR3vl4FQuptPoeoc12IVXyfFFP/zKuOpC8JDE2/z4xLOtYxqtZGFGrKvx7okQsFAb9AgfmmewdpFWPTiAgLe9QBUFZ8TpwtCTT8QBu78b9kJdB130j+8+vWAV1ZlRzfuAog3SvQG9+o7qKoWDAas6vAKOjpEETaS/gGphmwPrx7gITo/HbXN5ELDBQ9cUGIHGDnSNmAzBJUfQiunm+jNEtMK3U1ZtaC6a9oMh6DDmQdyIr9TgU5ugmmt0FCgaY0MbrwwLKgoJIeClMqH5KbYAEB9b9SThxUM3JDWf/WrahPMpYB7/zxAIDSNHBizYP528bEvzsKhHm0RGwZKIE/kCYixhgK4Mdc1f4DqE7JQP465qwFZD4QyfASAi+LniCQ8z6nuExf3ytznDSWVgZp/J+Eo7/veZfDn9uRm3GhJ2MYNWh/pdYHFX8tQEhV8RYoIYiJY4TIAP9uvQRQAPqaZuvL5Y110fc/yhB1MHU0V+eHid/mswkRTJfOdf82IiYnonavRWnP/Q0viEgolapdcSEHFiCOk95siPw3S4Jq5OY3ctKZAL39Q9nih8Kv24qUWnv7ZkRhvsckRt9RIJ5UebPnhovgBHfeeXiHEAaCjTqhIRYdI1lcI2fPTMUjKGiBlgHv9PEQgNHsMxTbJqHZy/6d1bGnV4uEtYvJsjJikx8CMkXfa3DgrnzlizwHwKIw/eCI5VYKzRpO0Z1vC9d+ZvvnW00JMfDQVCVk0+hwWEEEDS2X+bNLCPMXGXZNDrQV2kTnnAmTlQ/rzX/EXw4AMKIjzBG4NVWYwIN+l6hifu6nfL0BvHd+5v9UeBqQ0PmEiGl8Zn54y1x/u17NI7OSKxGOs8Hb3MFdVymLiZ+JqhCZ6RKqNxJsIjKQ5tjd5hSBKpSqWjnfEUcPHXnpp8pkNis16djNEWhcQ3TmOhLCFvgK6CNxLiLuBH23yeiS68cE7VNDCaNLfFNH5u37xNT/NimEj6Js85qMkYJ+43r0IK/RE+ONgGONEDwE79AAP9DYmHxAenTB8/9x+De/yp9Y2aqNcaSHpZi4BgOJkHDz+qlN7XwieBVDBZDwLAAl3l31joYmowqWgfSEPSWaZhhk4RH2bSdtZFHu+X2PovGbPXDiMzKl+U1wqPEwCXiIaIZDDOZOxesLFfL0P83Jb6CNiltDgKJotQc0gl8xAsvE0IDz3ZwgELfQgeIswqeOh99/QuEQlPSAAABIhJREFUFsyoAkfPCKNR294YVXp7fPMZ+82b+q0fPNhFxJFeT5BvGh8iko+enp85avioNnfEtni1rSlaNtL4oDmMD8AhPBE8/jHwQhVD9wkWvlikBSP/0D16FoAdY4l+0FILwRAUkC7qQi9pgWCQwmFhdHvy+dj43aoywMUJlm+mLs964JYBHfuaEr6J0Rs1IBS8AjAAB/PBgTkhIwSNCW8X3/Sb5g/w0Dhy/Ab8ZMgQFaz66DRmn+jGx3sltkj5asrzpAaT2yn4k09JEBpMfXh/UZiYTO95I/L9IyVSHARYLYxljpWWtR/OYBhIkhDX2gfiTjQBlP+BF8ztLlhynwJtPISXlTYrAc7RC0KxJ4BxwbTjBaY+nkeoh3HSG4ACWMFiP8EEjpSEo9haSfy2QXjMa/+cvhrvg0PCglzdsYMW8yhUfyIiwYcT+rBXV7e5XHBxWrGjckiB19moDIo03j7na5eYGSIucpgIDqIfHWChPUo8o32DCKCpzqtURmr1P7eNa7y13w09XqWX0RAE1dupH6KaMWsnf7y53dEzJ54stVTcU+yyd7Tg2Hk52saaH21DDmCjlCtHBEd1PKLxo6SH6Zhgx3hFYDx1GJFoBbYGrbbEIGnOmzTaIxjLHexSwacZG9OtICggKf76U0q1uRq4fGqKxVU5qcRh718seCNssJB7uOEW40FjQ/yN4OBCAL9xBoT/xj0sZFgcjOp6D7sUExa5Jykq+s2vJj33FW8GTNNvog40y4R2sx59tMLjbo8KsJFDS8s/TsILtIkzhWPBujV3zf/9gNnHxlkdNabeDpkJMVkGymVwQvlaVfVvrF3Y8UxxTle9TroJQVs6ny4rEpITmnaxed0Son+Q/0/5wdLLZzvFNihzOpyHGsfEH+/cqtORVUOfOB1oLKXahAbuXcM3TL8p2HDzwfJFXp7p9Y82984pyE02GAwdL1sqWoAgjE1jEjva3E5IDXQeEF22lJ0oV7zWznFJlYUVJXtjImMPtWrY6Ai8B3zcGA0TF+aS8xqAqJ6FTMAChQfyw0TPiIArKgpvvVRe3DbMaOyxJ/+idHN847Y2xRtd5nLIThAzaSi01xRvCNOEa3Xlh8vyT/dq0EK+WFr4c+voBLsqSQdbN2ha1LB9m7Pm3oO5N261dgkPq4gjcJ/PFbm0+4O6jXn77cQzuYdvvVxZ1DnCFHbDibKimBtiGrSGq3i0TfaQBiCGSTpvZtGlY4mRMSoOph/DnsnJxlHxh3t0v/EwXi1e9RoPf1AMPzUHWgStX/n5B/9VTSz+Kz2pTSi16/i6pCSy4OJFURerEfo06+po6YvuVzubCMIQM6pZhmpnuJbrq8Hy3oULMVZvEcLBMBaeoBMfad4Nv4IkmG1TOiOuGbl6X4MUC1JD1S2CCQTLXV2qblb7cV5VDR/s+sp4/vIlpfDSZaEczxJMBrVHpy7iw7feE2q8AjVwxpDCUsiQQkhahzgCGembq6wb0wVYyTlTq/6M4Nh98agRb9RV7JUaoX2zcIXM2dXzVP2GhE8dx1/5QZI7aJv/H+y6kJy2/hwbAAAAAElFTkSuQmCC"},{"id":"USSR-Latvia","name":"USSR - Latvia","type":"wms","template":"http://www.gisnet.lv/cgi-bin/topo?FORMAT=image/jpeg&VERSION=1.1.1&service=WMS&REQUEST=GetMap&LAYERS=DTO,DTC,DIVDPTC,PD,VS,DS,PS,M&SRS={proj}&WIDTH={width}&height={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[26.630859375,57.56888774130087],[25.169677734375,58.048818457936505],[22.543945312499996,57.76865857271793],[21.544189453124996,57.53351974347291],[21.016845703125,56.81892067431724],[21.016845703125,56.03522578369872],[22.03857421875,56.389583525613055],[24.719238281249996,56.33481154165235],[26.751708984375,55.665193184436035],[28.19091796875,56.139428693863266],[27.784423828125,57.40946113558119],[26.630859375,57.56888774130087]]]},{"id":"sjcgis.org-General_Basemap_WM","name":"Vector Streetmap for San Juan County WA","type":"tms","template":"https://sjcgis.org/arcgis/rest/services/Basemaps/General_Basemap_WM/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,19],"polygon":[[[-123.274024,48.692975],[-123.007726,48.767256],[-123.007619,48.831577],[-122.783495,48.758416],[-122.693402,48.658522],[-122.767451,48.603606],[-122.744842,48.387083],[-123.248221,48.283531],[-123.114524,48.422614],[-123.219035,48.548575],[-123.274024,48.692975]]],"best":true,"description":"Public domain street and address data from the San Juan County, WA. Updated at least quarterly."},{"id":"Vercors-Orthophotos-1999","name":"Vercors (Réserve naturelle des Hauts-Plateaux du Vercors) - Orthophoto - 1999 - 1 m","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/PNRVercors-RHP-1999/{zoom}/{x}/{y}","endDate":"1999-01-01T00:00:00.000Z","startDate":"1999-01-01T00:00:00.000Z","scaleExtent":[0,19],"polygon":[[[5.4356493,44.9991755],[5.4319266,44.9229046],[5.4362415,44.9228447],[5.4347186,44.8900063],[5.4330265,44.8899463],[5.4306544,44.8502562],[5.4338694,44.8501362],[5.4328541,44.8263781],[5.435477,44.8262581],[5.4349693,44.8138952],[5.4410611,44.8137151],[5.4371691,44.7409842],[5.4545983,44.7404433],[5.4528215,44.7042536],[5.5210998,44.7024496],[5.5232996,44.7385803],[5.5890397,44.7368374],[5.5929812,44.8126305],[5.5879047,44.8129906],[5.5897661,44.8494722],[5.588228,44.8493765],[5.5897237,44.8735055],[5.5386318,44.8750318],[5.5394694,44.886859],[5.5283416,44.8873253],[5.5300168,44.9201234],[5.5331876,44.9201234],[5.5376148,44.996241],[5.4356493,44.9991755]]],"terms_text":"Parc Naturel du Vercors"},{"id":"vicosa_al","name":"Viçosa AL","type":"wms","template":"http://geo.seplande.al.gov.br/teogc/terraogcwms.cgi?LAYERS=Vicosa&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[-36.19799506289,-9.42067411388],[-36.19777392167,-9.41788790418],[-36.19779919496,-9.41528243495],[-36.19801401785,-9.41074463302],[-36.19789396976,-9.4085692096],[-36.19792556136,-9.40636883904],[-36.1979697896,-9.40560836777],[-36.19793187968,-9.40405001978],[-36.19798874457,-9.40311500762],[-36.19827306898,-9.40027878861],[-36.19829202394,-9.39495536094],[-36.19788765144,-9.39168895497],[-36.19844366363,-9.38932016801],[-36.19836784379,-9.3862033184],[-36.197938198,-9.38166513525],[-36.19801401785,-9.37972018144],[-36.1983425705,-9.37867289409],[-36.19831729722,-9.37697727931],[-36.19816565754,-9.37585517674],[-36.19851948347,-9.37139166614],[-36.1982162041,-9.36238966295],[-36.1986205766,-9.35318792839],[-36.19849421019,-9.35096850339],[-36.19857003004,-9.34852462578],[-36.19879748957,-9.34667923744],[-36.19859530332,-9.34348719127],[-36.19877221629,-9.34084375588],[-36.19894912926,-9.33301308429],[-36.19877221629,-9.33039450836],[-36.28957911612,-9.33114267492],[-36.28937692987,-9.33318765532],[-36.28950329627,-9.33538225508],[-36.28925056346,-9.34124276628],[-36.28945274971,-9.34291361737],[-36.28927583674,-9.34520790729],[-36.28897255737,-9.37311224406],[-36.28914947033,-9.37480787773],[-36.2889220108,-9.37707702159],[-36.28889673752,-9.38540540039],[-36.28871982455,-9.38632799292],[-36.28871982455,-9.39343436657],[-36.28887146424,-9.39557871736],[-36.28877037111,-9.40128860991],[-36.28861873143,-9.40652467311],[-36.28871982455,-9.40714800869],[-36.28877037111,-9.4213348225],[-36.19799506289,-9.42067411388]]],"terms_url":"http://www.seplande.al.gov.br","terms_text":"Secretaria de Estado do Planejamento e Desenvolvimento Econômico"},{"id":"wien.gv.at-labels","name":"Vienna: Beschriftungen (annotations)","type":"tms","template":"https://maps.wien.gv.at/wmts/beschriftung/normal/google3857/{zoom}/{y}/{x}.png","scaleExtent":[12,19],"polygon":[[[16.17,48.1],[16.17,48.33],[16.58,48.33],[16.58,48.1],[16.17,48.1]]],"terms_url":"https://data.wien.gv.at","terms_text":"Stadt Wien","icon":"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif","overlay":true},{"id":"wien.gv.at-gp","name":"Vienna: Mehrzweckkarte (general purpose)","type":"tms","template":"https://maps.wien.gv.at/wmts/fmzk/pastell/google3857/{zoom}/{y}/{x}.jpeg","scaleExtent":[10,19],"polygon":[[[16.17,48.1],[16.17,48.33],[16.58,48.33],[16.58,48.1],[16.17,48.1]]],"terms_url":"https://data.wien.gv.at","terms_text":"Stadt Wien","icon":"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif"},{"id":"wien.gv.at-aerial_image","name":"Vienna: Orthofoto (aerial image)","type":"tms","template":"https://maps.wien.gv.at/wmts/lb/farbe/google3857/{zoom}/{y}/{x}.jpeg","scaleExtent":[10,19],"polygon":[[[16.17,48.1],[16.17,48.33],[16.58,48.33],[16.58,48.1],[16.17,48.1]]],"terms_url":"https://data.wien.gv.at","terms_text":"Stadt Wien","icon":"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif"},{"id":"Ville_de_Nyon-HD-2010","name":"Ville de Nyon - Orthophoto 2010 HD 5cm/pi","type":"tms","template":"http://osmdata.asitvd.ch/tiles/nyon2010/{zoom}/{x}/{y}.png","endDate":"2010-01-01T00:00:00.000Z","startDate":"2010-01-01T00:00:00.000Z","scaleExtent":[14,20],"polygon":[[[6.248585,46.382518],[6.248482,46.387154],[6.243784,46.389438],[6.241817,46.39109],[6.241403,46.391591],[6.239186,46.392223],[6.239731,46.393728],[6.237905,46.394599],[6.237129,46.396982],[6.230705,46.401073],[6.227891,46.399033],[6.22326,46.402186],[6.220658,46.401891],[6.215825,46.404619],[6.213931,46.406985],[6.209893,46.405629],[6.209276,46.40528],[6.209849,46.40434],[6.205006,46.403316],[6.205271,46.40104],[6.209059,46.401306],[6.209512,46.401302],[6.214904,46.400804],[6.211536,46.398079],[6.210572,46.396796],[6.209541,46.394486],[6.212288,46.392429],[6.213743,46.391684],[6.216393,46.390787],[6.212962,46.387357],[6.215319,46.385143],[6.214027,46.384242],[6.212596,46.382324],[6.212114,46.381021],[6.212119,46.379917],[6.212312,46.37901],[6.213177,46.376969],[6.214543,46.374943],[6.213589,46.374628],[6.213654,46.372759],[6.221335,46.369904],[6.22752,46.365547],[6.22752,46.365407],[6.237384,46.373561],[6.244036,46.378421],[6.248585,46.382518]]],"terms_url":"http://www.nyon.ch/fr/officiel/services-offices/informatique-et-population-776-3911","terms_text":"Ville de Nyon"},{"id":"vogis.cnv.at-DGM","name":"VoGIS: DGM (Terrain model)","type":"wms","template":"http://vogis.cnv.at/mapserver/mapserv?map=i_hoehen_und_gelaende_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=schummerung_50cm_terrain&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[9.9680512,47.5463081],[9.9680895,47.5462689],[9.9712464,47.544249],[9.9648355,47.538031],[9.9683952,47.5280172],[9.965262,47.5208928],[9.9956949,47.5027787],[9.9873585,47.4984652],[10.0007641,47.4821056],[10.023014,47.4841071],[10.0374328,47.4891775],[10.0447745,47.4876222],[10.0541256,47.4758854],[10.0534684,47.4668571],[10.064681,47.4636357],[10.0699906,47.4559503],[10.0805676,47.4553604],[10.0885672,47.4602924],[10.091638,47.4589276],[10.0938486,47.4404644],[10.1055856,47.4287167],[10.0937374,47.4168811],[10.07418,47.4147226],[10.0691405,47.410176],[10.0862396,47.3995221],[10.0828437,47.3938062],[10.0998387,47.3547604],[10.1193354,47.375613],[10.1416871,47.36718],[10.1658749,47.3688749],[10.1695804,47.3712997],[10.1693975,47.3858299],[10.1813043,47.3872516],[10.181849,47.3924258],[10.1950843,47.3893456],[10.1998763,47.3833352],[10.2125912,47.3803897],[10.227051,47.388895],[10.2361856,47.3819213],[10.2316784,47.3789694],[10.2371623,47.3735651],[10.2169885,47.3543552],[10.2171047,47.3498849],[10.2042369,47.3367531],[10.2074173,47.3323161],[10.1995092,47.3264601],[10.2111311,47.3189838],[10.2159718,47.311064],[10.2123593,47.3112242],[10.1991314,47.2975423],[10.1896365,47.2939449],[10.1796106,47.2960256],[10.172077,47.2790762],[10.1740416,47.2702482],[10.1783421,47.2701114],[10.174493,47.263697],[10.218842,47.255327],[10.223433,47.249833],[10.210873,47.247805],[10.1977606,47.236662],[10.207913,47.232802],[10.214282,47.216842],[10.21269,47.204315],[10.1996265,47.195388],[10.1995066,47.1852535],[10.2115119,47.1712368],[10.2091987,47.1653713],[10.20851,47.159483],[10.213206,47.1576984],[10.222203,47.15323],[10.2216565,47.1492513],[10.214808,47.143515],[10.203327,47.142152],[10.208868,47.131643],[10.186295,47.12886],[10.186525,47.119455],[10.172877,47.120333],[10.162993,47.113607],[10.157657,47.114262],[10.154415,47.105778],[10.132428,47.081218],[10.1345877,47.0639183],[10.1508456,47.0618412],[10.156932,47.048827],[10.1441816,47.0335527],[10.1232555,47.0220943],[10.1328399,47.0120428],[10.1544702,47.0054497],[10.159614,46.9988153],[10.1544222,46.9929855],[10.1600074,46.9839969],[10.1446293,46.9830135],[10.1349173,46.9658398],[10.1350134,46.9548285],[10.1268364,46.9434986],[10.0977188,46.9267603],[10.0995372,46.9171215],[10.1092134,46.908337],[10.1090833,46.8943061],[10.1249668,46.8801373],[10.1414741,46.8746789],[10.1396666,46.8621658],[10.1450621,46.8510986],[10.1394105,46.8473781],[10.1230851,46.8484838],[10.1191237,46.8441698],[10.1051833,46.8408981],[10.0919546,46.851426],[10.0926536,46.8581775],[10.087123,46.861277],[10.0548814,46.8617049],[10.0508964,46.8644202],[10.0519245,46.8740502],[10.0389144,46.8861128],[10.0322055,46.8880172],[10.0178184,46.9016148],[10.0049435,46.8988926],[9.9824336,46.9061986],[9.9779314,46.9160343],[9.9665663,46.9122226],[9.9590704,46.9160246],[9.946121,46.9123495],[9.9375809,46.9132426],[9.9215303,46.918824],[9.9123097,46.9260554],[9.9063207,46.9253006],[9.8944853,46.9316447],[9.8761296,46.9346278],[9.8807063,46.9401115],[9.8765706,46.9407057],[9.8748781,46.9503903],[9.8787197,46.9570665],[9.8707312,46.9632091],[9.8848165,46.9854648],[9.8923039,46.9903589],[9.8887771,47.0007231],[9.870696,47.0096514],[9.8711507,47.0130577],[9.8803497,47.0172237],[9.8777935,47.0205525],[9.8597449,47.0232098],[9.8527287,47.0164129],[9.8361195,47.012531],[9.8235302,47.0198587],[9.8075641,47.0235627],[9.7849142,47.0384853],[9.7480774,47.0369227],[9.7418488,47.042675],[9.718211,47.0433745],[9.7070102,47.0480458],[9.7075964,47.0538077],[9.69756,47.0523884],[9.6839177,47.0576471],[9.6818398,47.0620979],[9.6774319,47.061409],[9.6582148,47.0581823],[9.6450573,47.059775],[9.6415752,47.0559826],[9.6365412,47.051703],[9.6263272,47.0513274],[9.6070544,47.0607725],[9.6133977,47.0694958],[9.6115341,47.0794024],[9.6186894,47.0781689],[9.6233873,47.0825788],[9.6334608,47.0834395],[9.6356428,47.0955277],[9.6285845,47.1075584],[9.6208286,47.1103155],[9.6350298,47.1281316],[9.6246665,47.1326485],[9.6225823,47.1413535],[9.6258673,47.1458981],[9.6205943,47.1516392],[9.6089021,47.1477494],[9.5967871,47.1629415],[9.5794635,47.1711566],[9.5645583,47.1702904],[9.5730168,47.1755955],[9.5725939,47.1907921],[9.5803175,47.1957775],[9.5847667,47.2053225],[9.5687023,47.2196758],[9.5585129,47.2241649],[9.5517611,47.2237671],[9.5667871,47.2428808],[9.5307265,47.2705781],[9.5461876,47.2800507],[9.556344,47.2982863],[9.588051,47.3173029],[9.5996599,47.3454983],[9.6107327,47.355706],[9.6244598,47.3661451],[9.6587582,47.369461],[9.6725468,47.3802057],[9.673111,47.3919406],[9.6516178,47.404626],[9.6455139,47.4311951],[9.6451212,47.4378008],[9.6579866,47.4477909],[9.6589756,47.4522045],[9.6223413,47.457472],[9.609044,47.4705422],[9.6029186,47.4619769],[9.5951426,47.4633095],[9.5821741,47.4827585],[9.562202,47.4959175],[9.550566,47.5371757],[9.5827036,47.5359236],[9.6046496,47.5295205],[9.7347836,47.5339558],[9.7351711,47.5466141],[9.7416436,47.5549858],[9.7471037,47.5556923],[9.7433711,47.5586655],[9.7520662,47.5674668],[9.7480649,47.5705239],[9.7563218,47.5726206],[9.7563266,47.5796315],[9.7619689,47.5809636],[9.7655314,47.5891166],[9.7693306,47.5873852],[9.7769663,47.5954393],[9.7915143,47.5935211],[9.7999911,47.5961057],[9.81414,47.5880685],[9.8238141,47.5871045],[9.8272819,47.579972],[9.8207906,47.5707624],[9.8256191,47.5592156],[9.8171007,47.5533268],[9.8157872,47.5476661],[9.8502301,47.5416393],[9.8583884,47.5338767],[9.8745052,47.5285372],[9.8780368,47.5387569],[9.8751486,47.543427],[9.8812471,47.5481426],[9.8891039,47.5439867],[9.8993513,47.54475],[9.9066603,47.5421716],[9.913579,47.532546],[9.9218947,47.5296364],[9.9335226,47.5326499],[9.9410791,47.5382227],[9.9636997,47.5347198],[9.9588294,47.5431278],[9.9631795,47.54229],[9.9680512,47.5463081]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAD1BMVEUAAACEAgT8AgQEAgSEgoTQjzHEAAAAAXRSTlMAQObYZgAAAHJJREFUeF6ljVEKgzAQRCftBUQv0KwXML7cwPvfqQwJtIVqi76fHR7DrKSUJY1DD84xKEVuwcT40C1HC18bqQDTBKWosUZn+VvQ4UTjkoCYWd/Eco9ZLwEWggsNC9CPL3C0UauFz44wFh941Bw0tm1PPAGCUydahBcw6wAAAABJRU5ErkJggg=="},{"id":"vogis.cnv.at-DOM","name":"VoGIS: DOM (Surface model)","type":"wms","template":"http://vogis.cnv.at/mapserver/mapserv?map=i_hoehen_und_gelaende_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=schummerung_50cm_surface&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","polygon":[[[9.9680512,47.5463081],[9.9680895,47.5462689],[9.9712464,47.544249],[9.9648355,47.538031],[9.9683952,47.5280172],[9.965262,47.5208928],[9.9956949,47.5027787],[9.9873585,47.4984652],[10.0007641,47.4821056],[10.023014,47.4841071],[10.0374328,47.4891775],[10.0447745,47.4876222],[10.0541256,47.4758854],[10.0534684,47.4668571],[10.064681,47.4636357],[10.0699906,47.4559503],[10.0805676,47.4553604],[10.0885672,47.4602924],[10.091638,47.4589276],[10.0938486,47.4404644],[10.1055856,47.4287167],[10.0937374,47.4168811],[10.07418,47.4147226],[10.0691405,47.410176],[10.0862396,47.3995221],[10.0828437,47.3938062],[10.0998387,47.3547604],[10.1193354,47.375613],[10.1416871,47.36718],[10.1658749,47.3688749],[10.1695804,47.3712997],[10.1693975,47.3858299],[10.1813043,47.3872516],[10.181849,47.3924258],[10.1950843,47.3893456],[10.1998763,47.3833352],[10.2125912,47.3803897],[10.227051,47.388895],[10.2361856,47.3819213],[10.2316784,47.3789694],[10.2371623,47.3735651],[10.2169885,47.3543552],[10.2171047,47.3498849],[10.2042369,47.3367531],[10.2074173,47.3323161],[10.1995092,47.3264601],[10.2111311,47.3189838],[10.2159718,47.311064],[10.2123593,47.3112242],[10.1991314,47.2975423],[10.1896365,47.2939449],[10.1796106,47.2960256],[10.172077,47.2790762],[10.1740416,47.2702482],[10.1783421,47.2701114],[10.174493,47.263697],[10.218842,47.255327],[10.223433,47.249833],[10.210873,47.247805],[10.1977606,47.236662],[10.207913,47.232802],[10.214282,47.216842],[10.21269,47.204315],[10.1996265,47.195388],[10.1995066,47.1852535],[10.2115119,47.1712368],[10.2091987,47.1653713],[10.20851,47.159483],[10.213206,47.1576984],[10.222203,47.15323],[10.2216565,47.1492513],[10.214808,47.143515],[10.203327,47.142152],[10.208868,47.131643],[10.186295,47.12886],[10.186525,47.119455],[10.172877,47.120333],[10.162993,47.113607],[10.157657,47.114262],[10.154415,47.105778],[10.132428,47.081218],[10.1345877,47.0639183],[10.1508456,47.0618412],[10.156932,47.048827],[10.1441816,47.0335527],[10.1232555,47.0220943],[10.1328399,47.0120428],[10.1544702,47.0054497],[10.159614,46.9988153],[10.1544222,46.9929855],[10.1600074,46.9839969],[10.1446293,46.9830135],[10.1349173,46.9658398],[10.1350134,46.9548285],[10.1268364,46.9434986],[10.0977188,46.9267603],[10.0995372,46.9171215],[10.1092134,46.908337],[10.1090833,46.8943061],[10.1249668,46.8801373],[10.1414741,46.8746789],[10.1396666,46.8621658],[10.1450621,46.8510986],[10.1394105,46.8473781],[10.1230851,46.8484838],[10.1191237,46.8441698],[10.1051833,46.8408981],[10.0919546,46.851426],[10.0926536,46.8581775],[10.087123,46.861277],[10.0548814,46.8617049],[10.0508964,46.8644202],[10.0519245,46.8740502],[10.0389144,46.8861128],[10.0322055,46.8880172],[10.0178184,46.9016148],[10.0049435,46.8988926],[9.9824336,46.9061986],[9.9779314,46.9160343],[9.9665663,46.9122226],[9.9590704,46.9160246],[9.946121,46.9123495],[9.9375809,46.9132426],[9.9215303,46.918824],[9.9123097,46.9260554],[9.9063207,46.9253006],[9.8944853,46.9316447],[9.8761296,46.9346278],[9.8807063,46.9401115],[9.8765706,46.9407057],[9.8748781,46.9503903],[9.8787197,46.9570665],[9.8707312,46.9632091],[9.8848165,46.9854648],[9.8923039,46.9903589],[9.8887771,47.0007231],[9.870696,47.0096514],[9.8711507,47.0130577],[9.8803497,47.0172237],[9.8777935,47.0205525],[9.8597449,47.0232098],[9.8527287,47.0164129],[9.8361195,47.012531],[9.8235302,47.0198587],[9.8075641,47.0235627],[9.7849142,47.0384853],[9.7480774,47.0369227],[9.7418488,47.042675],[9.718211,47.0433745],[9.7070102,47.0480458],[9.7075964,47.0538077],[9.69756,47.0523884],[9.6839177,47.0576471],[9.6818398,47.0620979],[9.6774319,47.061409],[9.6582148,47.0581823],[9.6450573,47.059775],[9.6415752,47.0559826],[9.6365412,47.051703],[9.6263272,47.0513274],[9.6070544,47.0607725],[9.6133977,47.0694958],[9.6115341,47.0794024],[9.6186894,47.0781689],[9.6233873,47.0825788],[9.6334608,47.0834395],[9.6356428,47.0955277],[9.6285845,47.1075584],[9.6208286,47.1103155],[9.6350298,47.1281316],[9.6246665,47.1326485],[9.6225823,47.1413535],[9.6258673,47.1458981],[9.6205943,47.1516392],[9.6089021,47.1477494],[9.5967871,47.1629415],[9.5794635,47.1711566],[9.5645583,47.1702904],[9.5730168,47.1755955],[9.5725939,47.1907921],[9.5803175,47.1957775],[9.5847667,47.2053225],[9.5687023,47.2196758],[9.5585129,47.2241649],[9.5517611,47.2237671],[9.5667871,47.2428808],[9.5307265,47.2705781],[9.5461876,47.2800507],[9.556344,47.2982863],[9.588051,47.3173029],[9.5996599,47.3454983],[9.6107327,47.355706],[9.6244598,47.3661451],[9.6587582,47.369461],[9.6725468,47.3802057],[9.673111,47.3919406],[9.6516178,47.404626],[9.6455139,47.4311951],[9.6451212,47.4378008],[9.6579866,47.4477909],[9.6589756,47.4522045],[9.6223413,47.457472],[9.609044,47.4705422],[9.6029186,47.4619769],[9.5951426,47.4633095],[9.5821741,47.4827585],[9.562202,47.4959175],[9.550566,47.5371757],[9.5827036,47.5359236],[9.6046496,47.5295205],[9.7347836,47.5339558],[9.7351711,47.5466141],[9.7416436,47.5549858],[9.7471037,47.5556923],[9.7433711,47.5586655],[9.7520662,47.5674668],[9.7480649,47.5705239],[9.7563218,47.5726206],[9.7563266,47.5796315],[9.7619689,47.5809636],[9.7655314,47.5891166],[9.7693306,47.5873852],[9.7769663,47.5954393],[9.7915143,47.5935211],[9.7999911,47.5961057],[9.81414,47.5880685],[9.8238141,47.5871045],[9.8272819,47.579972],[9.8207906,47.5707624],[9.8256191,47.5592156],[9.8171007,47.5533268],[9.8157872,47.5476661],[9.8502301,47.5416393],[9.8583884,47.5338767],[9.8745052,47.5285372],[9.8780368,47.5387569],[9.8751486,47.543427],[9.8812471,47.5481426],[9.8891039,47.5439867],[9.8993513,47.54475],[9.9066603,47.5421716],[9.913579,47.532546],[9.9218947,47.5296364],[9.9335226,47.5326499],[9.9410791,47.5382227],[9.9636997,47.5347198],[9.9588294,47.5431278],[9.9631795,47.54229],[9.9680512,47.5463081]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAD1BMVEUAAACEAgT8AgQEAgSEgoTQjzHEAAAAAXRSTlMAQObYZgAAAHJJREFUeF6ljVEKgzAQRCftBUQv0KwXML7cwPvfqQwJtIVqi76fHR7DrKSUJY1DD84xKEVuwcT40C1HC18bqQDTBKWosUZn+VvQ4UTjkoCYWd/Eco9ZLwEWggsNC9CPL3C0UauFz44wFh941Bw0tm1PPAGCUydahBcw6wAAAABJRU5ErkJggg=="},{"id":"vogis.cnv.at-ef2012_12cm","name":"VoGIS: Echtfarbenbild 2012 (12cm)","type":"wms","template":"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ef2012_12cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2012-01-01T00:00:00.000Z","startDate":"2012-01-01T00:00:00.000Z","polygon":[[[9.5436683,47.4847893],[9.6145139,47.4505807],[9.6135938,47.3827196],[9.4424603,47.2479843],[9.4461405,47.0959963],[9.4286592,47.0891059],[9.4249789,47.0151345],[9.8528128,47.0019594],[9.8574132,46.898956],[9.9669019,46.889525],[10.0451081,46.849897],[10.1582771,46.833534],[10.1591972,46.8920401],[10.1471804,46.8924787],[10.1511549,46.9433055],[10.1631717,46.9428673],[10.1646986,46.9623816],[10.1785187,46.9668098],[10.1757585,47.1035121],[10.2291227,47.1022595],[10.2208421,47.2436121],[10.2613253,47.4126142],[10.1242344,47.4057648],[10.093872,47.4779493],[10.0046249,47.5071683],[9.9862234,47.5612116],[9.8436121,47.5624533],[9.8408519,47.6071356],[9.539988,47.6065153],[9.5436683,47.4847893]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAD1BMVEUAAACEAgT8AgQEAgSEgoTQjzHEAAAAAXRSTlMAQObYZgAAAHJJREFUeF6ljVEKgzAQRCftBUQv0KwXML7cwPvfqQwJtIVqi76fHR7DrKSUJY1DD84xKEVuwcT40C1HC18bqQDTBKWosUZn+VvQ4UTjkoCYWd/Eco9ZLwEWggsNC9CPL3C0UauFz44wFh941Bw0tm1PPAGCUydahBcw6wAAAABJRU5ErkJggg=="},{"id":"vogis.cnv.at-ef2015_10cm","name":"VoGIS: Echtfarbenbild 2015 (10cm)","type":"wms","template":"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ef2015_10cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","polygon":[[[9.5436683,47.4847893],[9.6145139,47.4505807],[9.6135938,47.3827196],[9.4424603,47.2479843],[9.4461405,47.0959963],[9.4286592,47.0891059],[9.4249789,47.0151345],[9.8528128,47.0019594],[9.8574132,46.898956],[9.9669019,46.889525],[10.0451081,46.849897],[10.1582771,46.833534],[10.1591972,46.8920401],[10.1471804,46.8924787],[10.1511549,46.9433055],[10.1631717,46.9428673],[10.1646986,46.9623816],[10.1785187,46.9668098],[10.1757585,47.1035121],[10.2291227,47.1022595],[10.2208421,47.2436121],[10.2613253,47.4126142],[10.1242344,47.4057648],[10.093872,47.4779493],[10.0046249,47.5071683],[9.9862234,47.5612116],[9.8436121,47.5624533],[9.8408519,47.6071356],[9.539988,47.6065153],[9.5436683,47.4847893]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAD1BMVEUAAACEAgT8AgQEAgSEgoTQjzHEAAAAAXRSTlMAQObYZgAAAHJJREFUeF6ljVEKgzAQRCftBUQv0KwXML7cwPvfqQwJtIVqi76fHR7DrKSUJY1DD84xKEVuwcT40C1HC18bqQDTBKWosUZn+VvQ4UTjkoCYWd/Eco9ZLwEWggsNC9CPL3C0UauFz44wFh941Bw0tm1PPAGCUydahBcw6wAAAABJRU5ErkJggg=="},{"id":"vogis.cnv.at-wi2015_20cm","name":"VoGIS: Echtfarbenbild Winter 2015 (20cm)","type":"wms","template":"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=wi2015_20cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}","projection":"EPSG:3857","endDate":"2015-01-01T00:00:00.000Z","startDate":"2015-01-01T00:00:00.000Z","polygon":[[[10.1703925,46.8297883],[10.1710791,46.93644],[10.1841254,46.9411282],[10.1854987,47.1015707],[10.239057,47.104375],[10.2428336,47.1561117],[10.2569098,47.1870362],[10.2455802,47.2759749],[10.2531333,47.323472],[10.2689261,47.3262646],[10.2644629,47.41102],[10.1319403,47.4086966],[10.1343436,47.4610652],[10.1175208,47.4615294],[10.1188941,47.4733659],[10.0873084,47.4742942],[10.0849051,47.5072362],[10.0684256,47.5070043],[10.0673956,47.521497],[10.0234503,47.5242791],[10.000791,47.5794276],[9.8490424,47.5775748],[9.8504157,47.6146181],[9.7275061,47.6127666],[9.7202963,47.5908903],[9.7034735,47.5891536],[9.7031302,47.5449087],[9.6821875,47.5449087],[9.6804709,47.5534826],[9.5639128,47.5493117],[9.5620246,47.5395782],[9.5517249,47.5395782],[9.5517249,47.5340154],[9.5216841,47.5347108],[9.5270056,47.3049672],[9.505033,47.3026391],[9.5009131,47.2336806],[9.5235724,47.2322819],[9.5242591,47.165566],[9.5448584,47.1640488],[9.5438284,47.1544774],[9.5723242,47.1540105],[9.5702643,47.128089],[9.590177,47.128673],[9.5918936,47.1002853],[9.5723242,47.1001685],[9.5771308,47.0286063],[9.7240729,47.0304785],[9.7230429,47.0174892],[9.7745413,47.0156166],[9.776258,47.0055504],[9.7927374,47.0039115],[9.7947974,46.9912671],[9.8387427,46.9931405],[9.840116,46.9034933],[9.8902411,46.9072462],[9.8854346,46.887071],[9.959249,46.8914116],[9.9619956,46.8767458],[10.0001044,46.8786233],[9.9966712,46.857146],[10.0186438,46.8565591],[10.0234503,46.8307278],[10.1703925,46.8297883]]],"icon":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAD1BMVEUAAACEAgT8AgQEAgSEgoTQjzHEAAAAAXRSTlMAQObYZgAAAHJJREFUeF6ljVEKgzAQRCftBUQv0KwXML7cwPvfqQwJtIVqi76fHR7DrKSUJY1DD84xKEVuwcT40C1HC18bqQDTBKWosUZn+VvQ4UTjkoCYWd/Eco9ZLwEWggsNC9CPL3C0UauFz44wFh941Bw0tm1PPAGCUydahBcw6wAAAABJRU5ErkJggg=="}]; + + var presets = {"aerialway":{"fields":["aerialway"],"geometry":["point","vertex","line"],"tags":{"aerialway":"*"},"terms":["ski lift","funifor","funitel"],"searchable":false,"name":"Aerialway"},"aeroway":{"icon":"airport","fields":["aeroway"],"geometry":["point","vertex","line","area"],"tags":{"aeroway":"*"},"searchable":false,"name":"Aeroway"},"amenity":{"fields":["amenity"],"geometry":["point","vertex","area"],"tags":{"amenity":"*"},"searchable":false,"name":"Amenity"},"circular":{"geometry":["vertex","line"],"fields":["name"],"tags":{"junction":"circular"},"name":"Traffic Circle","searchable":false},"highway":{"fields":["name","highway"],"geometry":["point","vertex","line","area"],"tags":{"highway":"*"},"searchable":false,"name":"Highway"},"place":{"fields":["name","place"],"geometry":["point","vertex","area"],"tags":{"place":"*"},"searchable":false,"name":"Place"},"power":{"geometry":["point","vertex","line","area"],"tags":{"power":"*"},"fields":["power"],"searchable":false,"name":"Power"},"railway":{"fields":["railway"],"geometry":["point","vertex","line","area"],"tags":{"railway":"*"},"searchable":false,"name":"Railway"},"roundabout":{"geometry":["vertex","line"],"fields":["name"],"tags":{"junction":"roundabout"},"name":"Roundabout","searchable":false},"waterway":{"fields":["name","waterway"],"geometry":["point","vertex","line","area"],"tags":{"waterway":"*"},"searchable":false,"name":"Waterway"},"address":{"fields":["address"],"geometry":["point","vertex","area"],"tags":{"addr:*":"*"},"addTags":{},"removeTags":{},"reference":{"key":"addr"},"name":"Address","matchScore":0.15},"advertising/billboard":{"fields":["direction","lit"],"geometry":["point","vertex","line"],"tags":{"advertising":"billboard"},"name":"Billboard"},"advertising/column":{"fields":["direction","lit"],"geometry":["point","area"],"tags":{"advertising":"column"},"name":"Advertising Column"},"aerialway/station":{"icon":"aerialway","geometry":["point","vertex","area"],"fields":["aerialway/access","aerialway/summer/access","elevation","building_area"],"tags":{"aerialway":"station"},"name":"Aerialway Station","searchable":false},"aerialway/cable_car":{"geometry":["line"],"terms":["tramway","ropeway"],"fields":["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/heating"],"tags":{"aerialway":"cable_car"},"name":"Cable Car"},"aerialway/chair_lift":{"geometry":["line"],"fields":["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],"tags":{"aerialway":"chair_lift"},"name":"Chair Lift"},"aerialway/drag_lift":{"geometry":["line"],"fields":["name","aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"drag_lift"},"name":"Drag Lift"},"aerialway/gondola":{"geometry":["line"],"fields":["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],"tags":{"aerialway":"gondola"},"name":"Gondola"},"aerialway/goods":{"geometry":["line"],"fields":["name","aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"goods"},"name":"Goods Aerialway"},"aerialway/magic_carpet":{"geometry":["line"],"fields":["name","aerialway/capacity","aerialway/duration","aerialway/heating"],"tags":{"aerialway":"magic_carpet"},"name":"Magic Carpet Lift"},"aerialway/mixed_lift":{"geometry":["line"],"fields":["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],"tags":{"aerialway":"mixed_lift"},"name":"Mixed Lift"},"aerialway/platter":{"geometry":["line"],"terms":["button lift","poma lift"],"fields":["name","aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"platter"},"name":"Platter Lift"},"aerialway/pylon":{"geometry":["point","vertex"],"fields":["ref"],"tags":{"aerialway":"pylon"},"name":"Aerialway Pylon"},"aerialway/rope_tow":{"geometry":["line"],"terms":["handle tow","bugel lift"],"fields":["name","aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"rope_tow"},"name":"Rope Tow Lift"},"aerialway/t-bar":{"geometry":["line"],"fields":["name","aerialway/capacity","aerialway/duration"],"terms":["tbar"],"tags":{"aerialway":"t-bar"},"name":"T-bar Lift"},"aeroway/aerodrome":{"icon":"airport","geometry":["point","area"],"fields":["name","iata","icao","operator","internet_access","internet_access/fee","internet_access/ssid"],"terms":["airplane","airport","aerodrome"],"tags":{"aeroway":"aerodrome"},"name":"Airport"},"aeroway/apron":{"icon":"airport","geometry":["area"],"terms":["ramp"],"fields":["ref","surface"],"tags":{"aeroway":"apron"},"name":"Apron"},"aeroway/gate":{"icon":"airport","geometry":["point"],"fields":["ref_aeroway_gate"],"tags":{"aeroway":"gate"},"name":"Airport Gate"},"aeroway/hangar":{"geometry":["area"],"fields":["name","building_area"],"tags":{"aeroway":"hangar"},"name":"Hangar"},"aeroway/helipad":{"icon":"heliport","geometry":["point","area"],"fields":["ref"],"terms":["helicopter","helipad","heliport"],"tags":{"aeroway":"helipad"},"name":"Helipad"},"aeroway/runway":{"geometry":["line","area"],"terms":["landing strip"],"fields":["ref_runway","surface","length","width"],"tags":{"aeroway":"runway"},"name":"Runway"},"aeroway/taxiway":{"geometry":["line"],"fields":["ref_taxiway","surface"],"tags":{"aeroway":"taxiway"},"name":"Taxiway"},"aeroway/terminal":{"icon":"airport","geometry":["point","area"],"terms":["airport","aerodrome"],"fields":["name","operator","building_area"],"tags":{"aeroway":"terminal"},"name":"Airport Terminal"},"allotments/plot":{"geometry":["area"],"fields":["name","ref"],"tags":{"allotments":"plot"},"reference":{"key":"allotments","value":"plot"},"name":"Community Garden Plot"},"amenity/bus_station":{"icon":"bus","fields":["name","building_area","operator","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"amenity":"bus_station"},"name":"Bus Station / Terminal","searchable":false},"amenity/coworking_space":{"icon":"commercial","fields":["name","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"amenity":"coworking_space"},"name":"Coworking Space","searchable":false},"amenity/ferry_terminal":{"icon":"ferry","fields":["name","network","operator","address","building_area"],"geometry":["point","vertex","area"],"terms":[],"tags":{"amenity":"ferry_terminal"},"name":"Ferry Station / Terminal","searchable":false},"amenity/nursing_home":{"icon":"wheelchair","fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"tags":{"amenity":"nursing_home"},"reference":{"key":"social_facility","value":"nursing_home"},"name":"Nursing Home","searchable":false},"amenity/register_office":{"icon":"town-hall","fields":["name","address","building_area","opening_hours","operator"],"geometry":["point","area"],"tags":{"amenity":"register_office"},"reference":{"key":"government","value":"register_office"},"name":"Register Office","searchable":false},"amenity/scrapyard":{"icon":"car","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"scrapyard"},"reference":{"key":"industrial","value":"scrap_yard"},"name":"Scrap Yard","searchable":false},"amenity/swimming_pool":{"icon":"swimming","geometry":["point","vertex","area"],"tags":{"amenity":"swimming_pool"},"reference":{"key":"leisure","value":"swimming_pool"},"name":"Swimming Pool","searchable":false},"amenity/animal_boarding":{"icon":"veterinary","fields":["name","operator","address","building_area","opening_hours","animal_boarding"],"geometry":["point","area"],"terms":["boarding","cat","cattery","dog","horse","kennel","kitten","pet","pet boarding","pet care","pet hotel","puppy","reptile"],"tags":{"amenity":"animal_boarding"},"name":"Animal Boarding Facility"},"amenity/animal_breeding":{"icon":"veterinary","fields":["name","operator","address","building_area","opening_hours","animal_breeding"],"geometry":["point","area"],"terms":["breeding","bull","cat","cow","dog","horse","husbandry","kitten","livestock","pet breeding","puppy","reptile"],"tags":{"amenity":"animal_breeding"},"name":"Animal Breeding Facility"},"amenity/animal_shelter":{"icon":"veterinary","fields":["name","operator","address","building_area","opening_hours","animal_shelter"],"geometry":["point","area"],"terms":["adoption","aspca","cat","dog","horse","kitten","pet care","pet rescue","puppy","raptor","reptile","rescue","spca"],"tags":{"amenity":"animal_shelter"},"name":"Animal Shelter"},"amenity/arts_centre":{"icon":"theatre","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"arts_centre"},"name":"Arts Center"},"amenity/atm":{"icon":"bank","fields":["operator","currency_multi","drive_through"],"geometry":["point","vertex"],"terms":["money","cash","machine"],"tags":{"amenity":"atm"},"name":"ATM"},"amenity/bank":{"icon":"bank","fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"geometry":["point","area"],"terms":["credit union","check","deposit","fund","investment","repository","reserve","safe","savings","stock","treasury","trust","vault"],"tags":{"amenity":"bank"},"name":"Bank"},"amenity/bar":{"icon":"bar","fields":["name","operator","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"geometry":["point","area"],"terms":["dive","beer","bier","booze"],"tags":{"amenity":"bar"},"name":"Bar"},"amenity/bbq":{"icon":"bbq","fields":["covered","fuel"],"geometry":["point"],"terms":["bbq","grill"],"tags":{"amenity":"bbq"},"name":"Barbecue/Grill"},"amenity/bench":{"icon":"poi-bench","fields":["backrest"],"geometry":["point","vertex","line"],"terms":["seat"],"tags":{"amenity":"bench"},"name":"Bench"},"amenity/bicycle_parking":{"icon":"bicycle","fields":["bicycle_parking","capacity","operator","covered","access_simple"],"geometry":["point","vertex","area"],"terms":["bike"],"tags":{"amenity":"bicycle_parking"},"name":"Bicycle Parking"},"amenity/bicycle_rental":{"icon":"bicycle","fields":["capacity","network","operator","payment_multi"],"geometry":["point","vertex","area"],"terms":["bike"],"tags":{"amenity":"bicycle_rental"},"name":"Bicycle Rental"},"amenity/bicycle_repair_station":{"icon":"bicycle","fields":["operator","brand","opening_hours","fee","service/bicycle"],"geometry":["point","vertex"],"terms":["bike","repair","chain","pump"],"tags":{"amenity":"bicycle_repair_station"},"name":"Bicycle Repair Tool Stand"},"amenity/biergarten":{"icon":"beer","fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"geometry":["point","area"],"tags":{"amenity":"biergarten"},"terms":["beer","bier","booze"],"name":"Beer Garden"},"amenity/boat_rental":{"fields":["name","operator","payment_multi"],"geometry":["point","area"],"tags":{"amenity":"boat_rental"},"name":"Boat Rental"},"amenity/bureau_de_change":{"icon":"bank","fields":["name","currency_multi","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["bureau de change","money changer"],"tags":{"amenity":"bureau_de_change"},"name":"Currency Exchange"},"amenity/cafe":{"icon":"cafe","fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["bistro","coffee","tea"],"tags":{"amenity":"cafe"},"name":"Cafe"},"amenity/car_pooling":{"icon":"car","fields":["name","operator","capacity"],"geometry":["point","area"],"tags":{"amenity":"car_pooling"},"name":"Car Pooling"},"amenity/car_rental":{"icon":"car","fields":["name","operator","payment_multi"],"geometry":["point","area"],"tags":{"amenity":"car_rental"},"name":"Car Rental"},"amenity/car_sharing":{"icon":"car","fields":["name","operator","capacity","payment_multi"],"geometry":["point","area"],"tags":{"amenity":"car_sharing"},"name":"Car Sharing"},"amenity/car_wash":{"icon":"car","fields":["address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"amenity":"car_wash"},"name":"Car Wash"},"amenity/casino":{"icon":"poi-dice","fields":["name","operator","address","building_area","opening_hours","payment_multi","smoking"],"geometry":["point","area"],"terms":["gambling","roulette","craps","poker","blackjack"],"tags":{"amenity":"casino"},"name":"Casino"},"amenity/charging_station":{"icon":"car","fields":["operator","capacity"],"geometry":["point"],"tags":{"amenity":"charging_station"},"terms":["EV","Electric Vehicle","Supercharger"],"name":"Charging Station"},"amenity/childcare":{"icon":"school","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["daycare","orphanage","playgroup"],"tags":{"amenity":"childcare"},"name":"Nursery/Childcare"},"amenity/cinema":{"icon":"cinema","fields":["name","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["drive-in","film","flick","movie","theater","picture","show","screen"],"tags":{"amenity":"cinema"},"name":"Cinema"},"amenity/clinic":{"icon":"hospital","fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["medical","urgentcare"],"tags":{"amenity":"clinic"},"addTags":{"amenity":"clinic","healthcare":"clinic"},"removeTags":{"amenity":"clinic","healthcare":"clinic"},"reference":{"key":"amenity","value":"clinic"},"name":"Clinic"},"amenity/clinic/abortion":{"icon":"hospital","fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"clinic","healthcare":"clinic","healthcare:speciality":"abortion"},"reference":{"key":"amenity","value":"clinic"},"name":"Abortion Clinic"},"amenity/clinic/fertility":{"icon":"hospital","fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["egg","fertility","reproductive","sperm","ovulation"],"tags":{"amenity":"clinic","healthcare":"clinic","healthcare:speciality":"fertility"},"reference":{"key":"amenity","value":"clinic"},"name":"Fertility Clinic"},"amenity/clock":{"icon":"poi-clock","fields":["name","support","display","visibility","date","faces"],"geometry":["point","vertex"],"tags":{"amenity":"clock"},"name":"Clock"},"amenity/college":{"icon":"college","fields":["name","operator","address","internet_access","internet_access/ssid"],"geometry":["point","area"],"terms":["university"],"tags":{"amenity":"college"},"name":"College Grounds"},"amenity/community_centre":{"icon":"town-hall","fields":["name","operator","address","building_area"],"geometry":["point","area"],"terms":["event","hall"],"tags":{"amenity":"community_centre"},"name":"Community Center"},"amenity/compressed_air":{"icon":"car","geometry":["point","area"],"tags":{"amenity":"compressed_air"},"name":"Compressed Air"},"amenity/courthouse":{"icon":"town-hall","fields":["name","operator","address","building_area"],"geometry":["point","area"],"tags":{"amenity":"courthouse"},"name":"Courthouse"},"amenity/crematorium":{"icon":"cemetery","fields":["name","website","phone","opening_hours","wheelchair"],"geometry":["area","point"],"tags":{"amenity":"crematorium"},"terms":["cemetery","funeral"],"name":"Crematorium"},"amenity/dentist":{"icon":"dentist","fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["tooth","teeth"],"tags":{"amenity":"dentist"},"addTags":{"amenity":"dentist","healthcare":"dentist"},"removeTags":{"amenity":"dentist","healthcare":"dentist"},"reference":{"key":"amenity","value":"dentist"},"name":"Dentist"},"amenity/doctors":{"icon":"hospital","fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["medic*","physician"],"tags":{"amenity":"doctors"},"addTags":{"amenity":"doctors","healthcare":"doctor"},"removeTags":{"amenity":"doctors","healthcare":"doctor"},"reference":{"key":"amenity","value":"doctors"},"name":"Doctor"},"amenity/dojo":{"icon":"pitch","fields":["name","sport","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["martial arts","dojang"],"tags":{"amenity":"dojo"},"name":"Dojo / Martial Arts Academy"},"amenity/drinking_water":{"icon":"drinking-water","geometry":["point"],"tags":{"amenity":"drinking_water"},"terms":["fountain","potable"],"name":"Drinking Water"},"amenity/driving_school":{"icon":"car","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"amenity":"driving_school"},"name":"Driving School"},"amenity/embassy":{"icon":"embassy","fields":["name","country","address","building_area"],"geometry":["point","area"],"tags":{"amenity":"embassy"},"name":"Embassy"},"amenity/fast_food":{"icon":"fast-food","fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"geometry":["point","area"],"tags":{"amenity":"fast_food"},"terms":["restaurant","takeaway"],"name":"Fast Food"},"amenity/fire_station":{"icon":"fire-station","fields":["name","operator","address","building_area"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"fire_station"},"name":"Fire Station"},"amenity/food_court":{"icon":"restaurant","fields":["name","operator","address","building_area","opening_hours","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["fast food","restaurant","food"],"tags":{"amenity":"food_court"},"name":"Food Court"},"amenity/fountain":{"icon":"poi-fountain","fields":["name"],"geometry":["point","area"],"tags":{"amenity":"fountain"},"name":"Fountain"},"amenity/fuel":{"icon":"fuel","fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],"tags":{"amenity":"fuel"},"name":"Gas Station"},"amenity/grave_yard":{"icon":"cemetery","fields":["religion","denomination"],"geometry":["point","area"],"tags":{"amenity":"grave_yard"},"name":"Graveyard"},"amenity/grit_bin":{"fields":["access_simple"],"geometry":["point","vertex"],"tags":{"amenity":"grit_bin"},"terms":["salt","sand"],"name":"Grit Bin"},"amenity/hospital":{"icon":"hospital","fields":["name","operator","healthcare/speciality","address","emergency"],"geometry":["point","area"],"terms":["clinic","doctor","emergency room","health","infirmary","institution","sanatorium","sanitarium","sick","surgery","ward"],"tags":{"amenity":"hospital"},"addTags":{"amenity":"hospital","healthcare":"hospital"},"removeTags":{"amenity":"hospital","healthcare":"hospital"},"reference":{"key":"amenity","value":"hospital"},"name":"Hospital Grounds"},"amenity/hunting_stand":{"icon":"poi-binoculars","geometry":["point","vertex","area"],"terms":["game","gun","lookout","rifle","shoot*","wild","watch"],"tags":{"amenity":"hunting_stand"},"name":"Hunting Stand"},"amenity/ice_cream":{"icon":"ice-cream","fields":["name","address","building_area","opening_hours","takeaway","delivery","outdoor_seating"],"geometry":["point","area"],"terms":["gelato","sorbet","sherbet","frozen","yogurt"],"tags":{"amenity":"ice_cream"},"name":"Ice Cream Shop"},"amenity/internet_cafe":{"icon":"poi-mast","fields":["name","operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["cybercafe","taxiphone","teleboutique","coffee","cafe","net","lanhouse"],"tags":{"amenity":"internet_cafe"},"name":"Internet Cafe"},"amenity/kindergarten":{"icon":"school","fields":["name","operator","address"],"geometry":["point","area"],"terms":["kindergarden","pre-school"],"tags":{"amenity":"kindergarten"},"name":"Preschool/Kindergarten Grounds"},"amenity/library":{"icon":"library","fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"geometry":["point","area"],"terms":["book"],"tags":{"amenity":"library"},"name":"Library"},"amenity/love_hotel":{"icon":"heart","fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"amenity":"love_hotel"},"name":"Love Hotel"},"amenity/marketplace":{"icon":"shop","fields":["name","operator","address","building","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"marketplace"},"name":"Marketplace"},"amenity/monastery":{"icon":"place-of-worship","fields":["name","religion","denomination","address","building_area"],"geometry":["point","area"],"terms":["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","monastery","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],"tags":{"amenity":"monastery"},"name":"Monastery Grounds"},"amenity/motorcycle_parking":{"icon":"scooter","fields":["capacity","operator","covered","access_simple"],"geometry":["point","vertex","area"],"tags":{"amenity":"motorcycle_parking"},"name":"Motorcycle Parking"},"amenity/music_school":{"icon":"school","fields":["name","operator","address"],"geometry":["point","area"],"terms":["school of music"],"tags":{"amenity":"music_school"},"name":"Music School"},"amenity/nightclub":{"icon":"bar","fields":["name","operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"tags":{"amenity":"nightclub"},"terms":["disco*","night club","dancing","dance club"],"name":"Nightclub"},"amenity/parking_entrance":{"icon":"entrance-alt1","fields":["access_simple","ref"],"geometry":["vertex"],"tags":{"amenity":"parking_entrance"},"name":"Parking Garage Entrance/Exit"},"amenity/parking_space":{"fields":["capacity"],"geometry":["point","vertex","area"],"terms":[],"tags":{"amenity":"parking_space"},"matchScore":0.95,"name":"Parking Space"},"amenity/parking":{"icon":"parking","fields":["name","operator","parking","capacity","fee","access_simple","supervised","park_ride","surface","maxstay"],"geometry":["point","vertex","area"],"tags":{"amenity":"parking"},"terms":[],"name":"Car Parking"},"amenity/pavilion":{"icon":"shelter","fields":["bin","bench"],"geometry":["point","vertex","area"],"tags":{"amenity":"shelter","shelter_type":"pavilion"},"name":"Pavilion"},"amenity/pharmacy":{"icon":"pharmacy","fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"geometry":["point","area"],"tags":{"amenity":"pharmacy"},"addTags":{"amenity":"pharmacy","healthcare":"pharmacy"},"removeTags":{"amenity":"pharmacy","healthcare":"pharmacy"},"reference":{"key":"amenity","value":"pharmacy"},"terms":["drug*","med*","prescription"],"name":"Pharmacy"},"amenity/place_of_worship":{"icon":"place-of-worship","fields":["name","religion","denomination","address","building_area","service_times"],"geometry":["point","area"],"terms":["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],"tags":{"amenity":"place_of_worship"},"name":"Place of Worship"},"amenity/place_of_worship/buddhist":{"icon":"buddhism","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["stupa","vihara","monastery","temple","pagoda","zendo","dojo"],"tags":{"amenity":"place_of_worship","religion":"buddhist"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Buddhist Temple"},"amenity/place_of_worship/christian":{"icon":"religious-christian","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["christian","abbey","basilica","bethel","cathedral","chancel","chantry","chapel","fold","house of God","house of prayer","house of worship","minster","mission","oratory","parish","sacellum","sanctuary","shrine","tabernacle","temple"],"tags":{"amenity":"place_of_worship","religion":"christian"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Church"},"amenity/place_of_worship/hindu":{"icon":"poi-hinduist","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["kovil","devasthana","mandir","kshetram","alayam","shrine","temple"],"tags":{"amenity":"place_of_worship","religion":"hindu"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Hindu Temple"},"amenity/place_of_worship/jewish":{"icon":"religious-jewish","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["jewish"],"tags":{"amenity":"place_of_worship","religion":"jewish"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Synagogue"},"amenity/place_of_worship/muslim":{"icon":"religious-muslim","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["muslim"],"tags":{"amenity":"place_of_worship","religion":"muslim"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Mosque"},"amenity/place_of_worship/shinto":{"icon":"poi-shintoist","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["kami","torii"],"tags":{"amenity":"place_of_worship","religion":"shinto"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Shinto Shrine"},"amenity/place_of_worship/sikh":{"icon":"poi-sikhist","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["gurudwara","temple"],"tags":{"amenity":"place_of_worship","religion":"sikh"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Sikh Temple"},"amenity/place_of_worship/taoist":{"icon":"poi-taoist","fields":["name","denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["daoist","monastery","temple"],"tags":{"amenity":"place_of_worship","religion":"taoist"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Taoist Temple"},"amenity/planetarium":{"icon":"museum","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["museum","astronomy","observatory"],"tags":{"amenity":"planetarium"},"name":"Planetarium"},"amenity/police":{"icon":"police","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["badge","constable","constabulary","cop","detective","fed","law","enforcement","officer","patrol"],"tags":{"amenity":"police"},"name":"Police"},"amenity/post_box":{"icon":"post","fields":["operator","collection_times","drive_through","ref"],"geometry":["point","vertex"],"tags":{"amenity":"post_box"},"terms":["letter","post"],"name":"Mailbox"},"amenity/post_office":{"icon":"post","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["letter","mail"],"tags":{"amenity":"post_office"},"name":"Post Office"},"amenity/prison":{"icon":"prison","fields":["name","operator","address"],"geometry":["point","area"],"terms":["cell","jail"],"tags":{"amenity":"prison"},"name":"Prison Grounds"},"amenity/pub":{"icon":"beer","fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"geometry":["point","area"],"tags":{"amenity":"pub"},"terms":["alcohol","drink","dive","beer","bier","booze"],"name":"Pub"},"amenity/public_bath":{"icon":"water","fields":["name","bath/type","bath/open_air","bath/sand_bath","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"public_bath"},"terms":["onsen","foot bath","hot springs"],"name":"Public Bath"},"amenity/public_bookcase":{"icon":"library","fields":["name","operator","capacity","website"],"geometry":["point","area"],"terms":["library","bookcrossing"],"tags":{"amenity":"public_bookcase"},"name":"Public Bookcase"},"amenity/ranger_station":{"fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["visitor center","visitor centre","permit center","permit centre","backcountry office","warden office","warden center"],"tags":{"amenity":"ranger_station"},"name":"Ranger Station"},"amenity/recycling_centre":{"icon":"recycling","fields":["name","operator","address","building","opening_hours","recycling_accepts"],"geometry":["point","area"],"terms":["bottle","can","dump","glass","garbage","rubbish","scrap","trash"],"tags":{"amenity":"recycling","recycling_type":"centre"},"reference":{"key":"recycling_type","value":"*"},"name":"Recycling Center"},"amenity/recycling":{"icon":"recycling","fields":["recycling_accepts","collection_times"],"geometry":["point","area"],"terms":["bin","can","bottle","glass","garbage","rubbish","scrap","trash"],"tags":{"amenity":"recycling"},"addTags":{"amenity":"recycling","recycling_type":"container"},"removeTags":{"amenity":"recycling","recycling_type":"container"},"reference":{"key":"amenity","value":"recycling"},"name":"Recycling Container"},"amenity/restaurant":{"icon":"restaurant","fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["bar","breakfast","cafe","café","canteen","coffee","dine","dining","dinner","drive-in","eat","grill","lunch","table"],"tags":{"amenity":"restaurant"},"name":"Restaurant"},"amenity/sanitary_dump_station":{"icon":"poi-storage-tank","fields":["operator","access_simple","fee","water_point"],"geometry":["point","vertex","area"],"terms":["Motor Home","Camper","Sanitary","Dump Station","Elsan","CDP","CTDP","Chemical Toilet"],"tags":{"amenity":"sanitary_dump_station"},"name":"RV Toilet Disposal"},"amenity/school":{"icon":"school","fields":["name","operator","address","religion","denomination"],"geometry":["point","area"],"terms":["academy","elementary school","middle school","high school"],"tags":{"amenity":"school"},"name":"School Grounds"},"amenity/shelter":{"icon":"shelter","fields":["name","shelter_type","bin"],"geometry":["point","vertex","area"],"terms":["lean-to","gazebo","picnic"],"tags":{"amenity":"shelter"},"name":"Shelter"},"amenity/shower":{"icon":"poi-shower","fields":["operator","opening_hours","fee","supervised","building_area"],"geometry":["point","vertex","area"],"terms":["rain closet"],"tags":{"amenity":"shower"},"name":"Shower"},"amenity/smoking_area":{"fields":["name","shelter","bin","bench","opening_hours"],"geometry":["point","vertex","area"],"terms":[],"tags":{"amenity":"smoking_area"},"name":"Smoking Area"},"amenity/social_facility":{"icon":"poi-social-facility","fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"social_facility"},"name":"Social Facility"},"amenity/social_facility/food_bank":{"icon":"poi-social-facility","fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"social_facility","social_facility":"food_bank"},"reference":{"key":"social_facility","value":"food_bank"},"name":"Food Bank"},"amenity/social_facility/group_home":{"icon":"wheelchair","fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"terms":["old","senior","living","care home","assisted living"],"tags":{"amenity":"social_facility","social_facility":"group_home","social_facility:for":"senior"},"reference":{"key":"social_facility","value":"group_home"},"name":"Elderly Group Home"},"amenity/social_facility/homeless_shelter":{"icon":"poi-social-facility","fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["houseless","unhoused","displaced"],"tags":{"amenity":"social_facility","social_facility":"shelter","social_facility:for":"homeless"},"reference":{"key":"social_facility","value":"shelter"},"name":"Homeless Shelter"},"amenity/social_facility/nursing_home":{"icon":"wheelchair","fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"terms":["elderly","living","nursing","old","senior","assisted living"],"tags":{"amenity":"social_facility","social_facility":"nursing_home","social_facility:for":"senior"},"reference":{"key":"social_facility","value":"nursing_home"},"name":"Nursing Home"},"amenity/studio":{"icon":"karaoke","fields":["name","studio","address","building_area"],"geometry":["point","area"],"terms":["recording","radio","television"],"tags":{"amenity":"studio"},"name":"Studio"},"amenity/taxi":{"icon":"car","fields":["name","operator","capacity"],"geometry":["point","vertex","area"],"terms":["cab"],"tags":{"amenity":"taxi"},"name":"Taxi Stand"},"amenity/telephone":{"icon":"telephone","fields":["operator","phone","fee","payment_multi","covered","indoor"],"geometry":["point","vertex"],"tags":{"amenity":"telephone"},"terms":["phone"],"name":"Telephone"},"amenity/theatre":{"icon":"theatre","fields":["name","operator","address","building_area"],"geometry":["point","area"],"terms":["theatre","performance","play","musical"],"tags":{"amenity":"theatre"},"name":"Theater"},"amenity/toilets":{"icon":"toilet","fields":["toilets/disposal","operator","building_area","access_simple","gender","fee","diaper"],"geometry":["point","vertex","area"],"terms":["bathroom","restroom","outhouse","privy","head","lavatory","latrine","water closet","WC","W.C."],"tags":{"amenity":"toilets"},"name":"Toilets"},"amenity/townhall":{"icon":"town-hall","fields":["name","operator","address","building_area"],"geometry":["point","area"],"terms":["village","city","government","courthouse","municipal"],"tags":{"amenity":"townhall"},"name":"Town Hall"},"amenity/university":{"icon":"college","fields":["name","operator","address","internet_access","internet_access/ssid"],"geometry":["point","area"],"terms":["college"],"tags":{"amenity":"university"},"name":"University Grounds"},"amenity/vending_machine":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":[],"tags":{"amenity":"vending_machine"},"name":"Vending Machine"},"amenity/vending_machine/news_papers":{"icon":"poi-vending-machine","fields":["vending","operator","fee","payment_multi","currency_multi"],"geometry":["point"],"terms":["newspaper"],"tags":{"amenity":"vending_machine","vending":"news_papers"},"reference":{"key":"vending","value":"newspapers"},"name":"Newspaper Vending Machine","searchable":false},"amenity/vending_machine/cigarettes":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["cigarette"],"tags":{"amenity":"vending_machine","vending":"cigarettes"},"reference":{"key":"vending","value":"cigarettes"},"name":"Cigarette Vending Machine"},"amenity/vending_machine/coffee":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["coffee"],"tags":{"amenity":"vending_machine","vending":"coffee"},"reference":{"key":"vending","value":"coffee"},"name":"Coffee Vending Machine"},"amenity/vending_machine/condoms":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["condom"],"tags":{"amenity":"vending_machine","vending":"condoms"},"reference":{"key":"vending","value":"condoms"},"name":"Condom Vending Machine"},"amenity/vending_machine/drinks":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["drink","soda","beverage","juice","pop"],"tags":{"amenity":"vending_machine","vending":"drinks"},"reference":{"key":"vending","value":"drinks"},"name":"Drink Vending Machine"},"amenity/vending_machine/electronics":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["cable","charger","earbud","headphone","phone","tablet"],"tags":{"amenity":"vending_machine","vending":"electronics"},"reference":{"key":"vending","value":"electronics"},"name":"Electronics Vending Machine"},"amenity/vending_machine/elongated_coin":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["coin","crush","elongated","flatten","penny","souvenir"],"tags":{"amenity":"vending_machine","vending":"elongated_coin"},"reference":{"key":"vending","value":"elongated_coin"},"name":"Flat Coin Vending Machine"},"amenity/vending_machine/excrement_bags":{"icon":"poi-vending-machine","fields":["vending","operator","fee","payment_multi","currency_multi"],"geometry":["point"],"terms":["excrement bags","poop","dog","animal"],"tags":{"amenity":"vending_machine","vending":"excrement_bags"},"reference":{"key":"vending","value":"excrement_bags"},"name":"Excrement Bag Vending Machine"},"amenity/vending_machine/feminine_hygiene":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["condom","tampon","pad","woman","women","menstrual hygiene products","personal care"],"tags":{"amenity":"vending_machine","vending":"feminine_hygiene"},"reference":{"key":"vending","value":"feminine_hygiene"},"name":"Feminine Hygiene Vending Machine"},"amenity/vending_machine/food":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["food"],"tags":{"amenity":"vending_machine","vending":"food"},"reference":{"key":"vending","value":"food"},"name":"Food Vending Machine"},"amenity/vending_machine/fuel":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],"tags":{"amenity":"vending_machine","vending":"fuel"},"reference":{"key":"vending","value":"fuel"},"name":"Gas Pump"},"amenity/vending_machine/ice_cream":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["chocolate","ice cream","frozen","popsicle","vanilla"],"tags":{"amenity":"vending_machine","vending":"ice_cream"},"reference":{"key":"vending","value":"ice_cream"},"name":"Ice Cream Vending Machine"},"amenity/vending_machine/newspapers":{"icon":"poi-vending-machine","fields":["vending","operator","fee","payment_multi","currency_multi"],"geometry":["point"],"terms":["newspaper"],"tags":{"amenity":"vending_machine","vending":"newspapers"},"reference":{"key":"vending","value":"newspapers"},"name":"Newspaper Vending Machine"},"amenity/vending_machine/parcel_pickup_dropoff":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["parcel","mail","pickup"],"tags":{"amenity":"vending_machine","vending":"parcel_pickup;parcel_mail_in"},"reference":{"key":"vending","value":"parcel_pickup;parcel_mail_in"},"name":"Parcel Pickup/Dropoff Vending Machine"},"amenity/vending_machine/parking_tickets":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["parking","ticket"],"tags":{"amenity":"vending_machine","vending":"parking_tickets"},"reference":{"key":"vending","value":"parking_tickets"},"matchScore":0.94,"name":"Parking Ticket Vending Machine"},"amenity/vending_machine/public_transport_tickets":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["bus","train","ferry","rail","ticket","transportation"],"tags":{"amenity":"vending_machine","vending":"public_transport_tickets"},"reference":{"key":"vending","value":"public_transport_tickets"},"name":"Transit Ticket Vending Machine"},"amenity/vending_machine/stamps":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["mail","postage","stamp"],"tags":{"amenity":"vending_machine","vending":"stamps"},"reference":{"key":"vending","value":"stamps"},"name":"Postage Vending Machine"},"amenity/vending_machine/sweets":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["candy","gum","chip","pretzel","cookie","cracker"],"tags":{"amenity":"vending_machine","vending":"sweets"},"reference":{"key":"vending","value":"sweets"},"name":"Snack Vending Machine"},"amenity/veterinary":{"icon":"veterinary","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["pet clinic","veterinarian","animal hospital","pet doctor"],"tags":{"amenity":"veterinary"},"name":"Veterinary"},"amenity/waste_basket":{"icon":"waste-basket","fields":["collection_times"],"geometry":["point","vertex"],"tags":{"amenity":"waste_basket"},"terms":["bin","garbage","rubbish","litter","trash"],"name":"Waste Basket"},"amenity/waste_disposal":{"icon":"waste-basket","fields":["collection_times"],"geometry":["point","vertex","area"],"tags":{"amenity":"waste_disposal"},"terms":["garbage","rubbish","litter","trash"],"name":"Garbage Dumpster"},"amenity/waste_transfer_station":{"icon":"waste-basket","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"terms":["dump","garbage","recycling","rubbish","scrap","trash"],"tags":{"amenity":"waste_transfer_station"},"name":"Waste Transfer Station"},"amenity/waste/dog_excrement":{"icon":"waste-basket","fields":["collection_times"],"geometry":["point","vertex","area"],"tags":{"amenity":"waste_basket","waste":"dog_excrement"},"reference":{"key":"waste","value":"dog_excrement"},"terms":["bin","garbage","rubbish","litter","trash","poo","dog"],"name":"Dog Excrement Bin"},"amenity/water_point":{"icon":"drinking-water","geometry":["area","vertex","point"],"tags":{"amenity":"water_point"},"name":"RV Drinking Water"},"amenity/watering_place":{"icon":"drinking-water","geometry":["area","vertex","point"],"tags":{"amenity":"watering_place"},"name":"Animal Watering Place"},"area":{"fields":["name"],"geometry":["area"],"tags":{"area":"yes"},"name":"Area","matchScore":0.1},"area/highway":{"fields":["name","area/highway"],"geometry":["area"],"tags":{"area:highway":"*"},"name":"Road Surface"},"attraction/amusement_ride":{"icon":"amusement-park","fields":["name","operator","opening_hours"],"geometry":["point","area"],"terms":["theme park","carnival ride"],"tags":{"attraction":"amusement_ride"},"name":"Amusement Ride"},"attraction/animal":{"icon":"zoo","fields":["name","operator"],"geometry":["point","area"],"terms":["zoo","theme park","animal park","lion","tiger","bear"],"tags":{"attraction":"animal"},"name":"Animal"},"attraction/big_wheel":{"icon":"amusement-park","fields":["name","operator","height","opening_hours"],"geometry":["point"],"terms":["ferris wheel","theme park","amusement ride"],"tags":{"attraction":"big_wheel"},"name":"Big Wheel"},"attraction/bumper_car":{"icon":"car","fields":["name","operator","opening_hours"],"geometry":["point","area"],"terms":["theme park","dodgem cars","autoscooter"],"tags":{"attraction":"bumper_car"},"name":"Bumper Car"},"attraction/bungee_jumping":{"icon":"pitch","fields":["name","operator","height","opening_hours"],"geometry":["point","area"],"terms":["theme park","bungy jumping","jumping platform"],"tags":{"attraction":"bungee_jumping"},"name":"Bungee Jumping"},"attraction/carousel":{"icon":"horse-riding","fields":["name","operator","opening_hours"],"geometry":["point","area"],"terms":["theme park","roundabout","merry-go-round","galloper","jumper","horseabout","flying horses"],"tags":{"attraction":"carousel"},"name":"Carousel"},"attraction/dark_ride":{"icon":"rail-metro","fields":["name","operator","opening_hours"],"geometry":["point","line","area"],"terms":["theme park","ghost train"],"tags":{"attraction":"dark_ride"},"name":"Dark Ride"},"attraction/drop_tower":{"icon":"poi-tower","fields":["name","operator","height","opening_hours"],"geometry":["point","area"],"terms":["theme park","amusement ride","gondola","tower","big drop"],"tags":{"attraction":"drop_tower"},"name":"Drop Tower"},"attraction/maze":{"icon":"amusement-park","fields":["name","operator"],"geometry":["point","area"],"terms":["theme park","amusement ride","labyrinth"],"tags":{"attraction":"maze"},"name":"Maze"},"attraction/pirate_ship":{"icon":"amusement-park","fields":["name","operator","opening_hours"],"geometry":["point"],"terms":["theme park","carnival ride","amusement ride"],"tags":{"attraction":"pirate_ship"},"name":"Pirate Ship"},"attraction/river_rafting":{"icon":"ferry","fields":["name","operator","opening_hours"],"geometry":["point","line"],"terms":["theme park","aquatic park","water park","rafting simulator","river rafting ride","river rapids ride"],"tags":{"attraction":"river_rafting"},"name":"River Rafting"},"attraction/roller_coaster":{"icon":"amusement-park","fields":["name","operator","opening_hours"],"geometry":["point","area"],"terms":["theme park","amusement ride"],"tags":{"attraction":"roller_coaster"},"name":"Roller Coaster"},"attraction/train":{"icon":"rail","fields":["name","operator","fee","opening_hours"],"geometry":["point","line"],"terms":["theme park","rackless train","road train","Tschu-Tschu train","dotto train","park train"],"tags":{"attraction":"train"},"name":"Tourist Train"},"attraction/water_slide":{"icon":"swimming","fields":["name","operator","opening_hours"],"geometry":["line","area"],"terms":["theme park","aquatic park","water park","flumes","water chutes","hydroslides"],"tags":{"attraction":"water_slide"},"name":"Water Slide"},"barrier":{"icon":"roadblock","geometry":["point","vertex","line","area"],"tags":{"barrier":"*"},"fields":["barrier"],"name":"Barrier","matchScore":0.4},"barrier/entrance":{"icon":"entrance-alt1","geometry":["vertex"],"tags":{"barrier":"entrance"},"name":"Entrance","searchable":false},"barrier/block":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex"],"tags":{"barrier":"block"},"name":"Block"},"barrier/bollard":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex","line"],"tags":{"barrier":"bollard"},"name":"Bollard"},"barrier/border_control":{"icon":"roadblock","fields":["access","building_area"],"geometry":["vertex","area"],"tags":{"barrier":"border_control"},"name":"Border Control"},"barrier/cattle_grid":{"icon":"barrier","geometry":["vertex"],"tags":{"barrier":"cattle_grid"},"name":"Cattle Grid"},"barrier/city_wall":{"icon":"barrier","fields":["height"],"geometry":["line","area"],"tags":{"barrier":"city_wall"},"name":"City Wall"},"barrier/cycle_barrier":{"icon":"roadblock","fields":["access"],"geometry":["vertex"],"tags":{"barrier":"cycle_barrier"},"name":"Cycle Barrier"},"barrier/ditch":{"icon":"roadblock","geometry":["line","area"],"tags":{"barrier":"ditch"},"name":"Trench","matchScore":0.25},"barrier/fence":{"icon":"fence","fields":["fence_type","height"],"geometry":["line"],"tags":{"barrier":"fence"},"name":"Fence","matchScore":0.25},"barrier/gate":{"icon":"barrier","fields":["access"],"geometry":["vertex","line"],"tags":{"barrier":"gate"},"name":"Gate"},"barrier/hedge":{"fields":["height"],"geometry":["line","area"],"tags":{"barrier":"hedge"},"name":"Hedge","matchScore":0.25},"barrier/kerb":{"icon":"wheelchair","fields":["kerb","tactile_paving"],"geometry":["vertex","line"],"tags":{"barrier":"kerb"},"name":"Kerb"},"barrier/kissing_gate":{"icon":"barrier","fields":["access"],"geometry":["vertex"],"tags":{"barrier":"kissing_gate"},"name":"Kissing Gate"},"barrier/lift_gate":{"icon":"roadblock","fields":["access"],"geometry":["vertex","line"],"tags":{"barrier":"lift_gate"},"name":"Lift Gate"},"barrier/retaining_wall":{"geometry":["line","area"],"tags":{"barrier":"retaining_wall"},"name":"Retaining Wall"},"barrier/stile":{"icon":"roadblock","fields":["access"],"geometry":["vertex"],"tags":{"barrier":"stile"},"name":"Stile"},"barrier/toll_booth":{"icon":"roadblock","fields":["access","building_area"],"geometry":["vertex","area"],"tags":{"barrier":"toll_booth"},"name":"Toll Booth"},"barrier/wall":{"icon":"barrier","fields":["wall","height"],"geometry":["line","area"],"tags":{"barrier":"wall"},"name":"Wall","matchScore":0.25},"boundary/administrative":{"name":"Administrative Boundary","geometry":["line"],"tags":{"boundary":"administrative"},"fields":["name","admin_level"]},"building":{"icon":"home","fields":["name","building","levels","height","address"],"geometry":["point","area"],"tags":{"building":"*"},"matchScore":0.6,"terms":[],"name":"Building"},"building/bunker":{"fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"bunker"},"matchScore":0.5,"name":"Bunker","searchable":false},"building/entrance":{"icon":"entrance-alt1","geometry":["vertex"],"tags":{"building":"entrance"},"name":"Entrance/Exit","searchable":false},"building/train_station":{"icon":"building","fields":["name","address","levels","height"],"geometry":["point","vertex","area"],"tags":{"building":"train_station"},"matchScore":0.5,"name":"Train Station","searchable":false},"building/apartments":{"icon":"building","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"apartments"},"matchScore":0.5,"name":"Apartments"},"building/barn":{"icon":"farm","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"barn"},"matchScore":0.5,"name":"Barn"},"building/boathouse":{"icon":"harbor","fields":["name","levels","height","address"],"geometry":["area"],"tags":{"building":"boathouse"},"matchScore":0.5,"terms":[],"name":"Boathouse"},"building/bungalow":{"icon":"home","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"bungalow"},"terms":["home","detached"],"matchScore":0.5,"name":"Bungalow"},"building/cabin":{"icon":"home","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"cabin"},"matchScore":0.5,"name":"Cabin"},"building/cathedral":{"icon":"place-of-worship","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"cathedral"},"matchScore":0.5,"name":"Cathedral Building"},"building/chapel":{"icon":"place-of-worship","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"chapel"},"matchScore":0.5,"name":"Chapel Building"},"building/church":{"icon":"place-of-worship","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"church"},"matchScore":0.5,"name":"Church Building"},"building/civic":{"icon":"building","fields":["name","address","levels","height","smoking"],"geometry":["area"],"tags":{"building":"civic"},"matchScore":0.5,"name":"Civic Building"},"building/college":{"icon":"building","fields":["name","address","levels","height"],"geometry":["area"],"terms":["university"],"tags":{"building":"college"},"matchScore":0.5,"name":"College Building"},"building/commercial":{"icon":"suitcase","fields":["name","address","levels","height","smoking"],"geometry":["area"],"tags":{"building":"commercial"},"matchScore":0.5,"name":"Commercial Building"},"building/construction":{"icon":"building","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"construction"},"matchScore":0.5,"name":"Building Under Construction"},"building/detached":{"icon":"home","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"detached"},"terms":["home","single","family","residence","dwelling"],"matchScore":0.5,"name":"Detached House"},"building/dormitory":{"icon":"building","fields":["name","address","levels","height","smoking"],"geometry":["area"],"tags":{"building":"dormitory"},"matchScore":0.5,"name":"Dormitory"},"building/farm_auxiliary":{"icon":"farm","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"farm_auxiliary"},"matchScore":0.5,"name":"Farm Building"},"building/farm":{"icon":"farm","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"farm"},"matchScore":0.5,"name":"Farm House"},"building/garage":{"icon":"warehouse","fields":["name","capacity"],"geometry":["area"],"tags":{"building":"garage"},"matchScore":0.5,"name":"Garage"},"building/garages":{"icon":"warehouse","fields":["name","capacity"],"geometry":["area"],"tags":{"building":"garages"},"matchScore":0.5,"name":"Garages"},"building/greenhouse":{"icon":"garden-center","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"greenhouse"},"matchScore":0.5,"name":"Greenhouse"},"building/hospital":{"icon":"building","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"hospital"},"matchScore":0.5,"name":"Hospital Building"},"building/hotel":{"icon":"building","fields":["name","address","levels","height","smoking"],"geometry":["area"],"tags":{"building":"hotel"},"matchScore":0.5,"name":"Hotel Building"},"building/house":{"icon":"home","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"house"},"terms":["home","family","residence","dwelling"],"matchScore":0.5,"name":"House"},"building/hut":{"geometry":["area"],"fields":["name"],"tags":{"building":"hut"},"matchScore":0.5,"name":"Hut"},"building/industrial":{"icon":"industry","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"industrial"},"matchScore":0.5,"name":"Industrial Building"},"building/kindergarten":{"icon":"building","fields":["name","address","levels","height"],"geometry":["area"],"terms":["kindergarden","pre-school"],"tags":{"building":"kindergarten"},"matchScore":0.5,"name":"Preschool/Kindergarten Building"},"building/mosque":{"icon":"place-of-worship","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"mosque"},"matchScore":0.5,"name":"Mosque Building"},"building/public":{"icon":"building","fields":["name","address","levels","height","smoking"],"geometry":["area"],"tags":{"building":"public"},"matchScore":0.5,"name":"Public Building"},"building/residential":{"icon":"residential-community","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"residential"},"matchScore":0.5,"name":"Residential Building"},"building/retail":{"icon":"commercial","fields":["name","address","levels","height","smoking"],"geometry":["area"],"tags":{"building":"retail"},"matchScore":0.5,"name":"Retail Building"},"building/roof":{"icon":"shelter","fields":["name","address"],"geometry":["area"],"tags":{"building":"roof"},"matchScore":0.5,"name":"Roof"},"building/ruins":{"icon":"poi-ruins","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"ruins"},"matchScore":0.5,"name":"Building Ruins"},"building/school":{"icon":"building","fields":["name","address","levels","height"],"geometry":["area"],"terms":["academy","elementary school","middle school","high school"],"tags":{"building":"school"},"matchScore":0.5,"name":"School Building"},"building/semidetached_house":{"icon":"home","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"semidetached_house"},"terms":["home","double","duplex","twin","family","residence","dwelling"],"matchScore":0.5,"name":"Semi-Detached House"},"building/service":{"icon":"home","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"service"},"matchScore":0.5,"name":"Service Building"},"building/shed":{"icon":"home","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"shed"},"matchScore":0.5,"name":"Shed"},"building/stable":{"icon":"horse-riding","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"stable"},"matchScore":0.5,"name":"Stable"},"building/stadium":{"icon":"stadium","fields":["name","address","levels","height","smoking"],"geometry":["area"],"tags":{"building":"stadium"},"matchScore":0.5,"name":"Stadium Building"},"building/static_caravan":{"icon":"home","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"static_caravan"},"matchScore":0.5,"name":"Static Mobile Home"},"building/temple":{"icon":"place-of-worship","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"temple"},"matchScore":0.5,"name":"Temple Building"},"building/terrace":{"icon":"building","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"terrace"},"terms":["home","terrace","brownstone","family","residence","dwelling"],"matchScore":0.5,"name":"Row Houses"},"building/transportation":{"icon":"building","fields":["name","address","levels","height","smoking"],"geometry":["area"],"tags":{"building":"transportation"},"matchScore":0.5,"name":"Transportation Building"},"building/university":{"icon":"building","fields":["name","address","levels","height"],"geometry":["area"],"terms":["college"],"tags":{"building":"university"},"matchScore":0.5,"name":"University Building"},"building/warehouse":{"icon":"warehouse","fields":["name","address","levels","height"],"geometry":["area"],"tags":{"building":"warehouse"},"matchScore":0.5,"name":"Warehouse"},"camp_site/camp_pitch":{"icon":"campsite","fields":["name","ref"],"geometry":["point","area"],"terms":["tent","rv"],"tags":{"camp_site":"camp_pitch"},"name":"Camp Pitch"},"club":{"icon":"heart","fields":["name","club","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"club":"*"},"terms":["social"],"name":"Club"},"craft":{"icon":"poi-tool","fields":["name","craft","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"*"},"terms":[],"name":"Craft"},"craft/jeweler":{"icon":"marker-stroked","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"jeweler"},"reference":{"key":"shop","value":"jewelry"},"name":"Jeweler","searchable":false},"craft/locksmith":{"icon":"marker-stroked","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"locksmith"},"reference":{"key":"shop","value":"locksmith"},"name":"Locksmith","searchable":false},"craft/optician":{"icon":"marker-stroked","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"optician"},"reference":{"key":"shop","value":"optician"},"name":"Optician","searchable":false},"craft/tailor":{"icon":"clothing-store","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["clothes","suit"],"tags":{"craft":"tailor"},"reference":{"key":"shop","value":"tailor"},"name":"Tailor","searchable":false},"craft/basket_maker":{"icon":"art-gallery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"basket_maker"},"name":"Basket Maker"},"craft/beekeeper":{"icon":"farm","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"beekeeper"},"name":"Beekeeper"},"craft/blacksmith":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"blacksmith"},"name":"Blacksmith"},"craft/boatbuilder":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"boatbuilder"},"matchScore":0.4,"name":"Boat Builder"},"craft/bookbinder":{"icon":"library","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["book repair"],"tags":{"craft":"bookbinder"},"name":"Bookbinder"},"craft/brewery":{"icon":"poi-storage-tank","fields":["name","operator","address","building_area","opening_hours","product"],"geometry":["point","area"],"terms":["alcohol","beer","beverage","bier","booze","cider"],"tags":{"craft":"brewery"},"name":"Brewery"},"craft/carpenter":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["woodworker"],"tags":{"craft":"carpenter"},"name":"Carpenter"},"craft/carpet_layer":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"carpet_layer"},"name":"Carpet Layer"},"craft/caterer":{"icon":"restaurant","fields":["name","cuisine","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"caterer"},"name":"Caterer"},"craft/chimney_sweeper":{"icon":"poi-chimney","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"chimney_sweeper"},"name":"Chimney Sweeper"},"craft/clockmaker":{"icon":"poi-clock","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"clockmaker"},"name":"Clockmaker"},"craft/confectionery":{"icon":"bakery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["sweet","candy"],"tags":{"craft":"confectionery"},"name":"Candy Maker"},"craft/distillery":{"icon":"poi-storage-tank","fields":["name","operator","address","building_area","opening_hours","product"],"geometry":["point","area"],"terms":["alcohol","beverage","bourbon","booze","brandy","gin","hooch","liquor","mezcal","moonshine","rum","scotch","spirits","still","tequila","vodka","whiskey","whisky"],"tags":{"craft":"distillery"},"name":"Distillery"},"craft/dressmaker":{"icon":"clothing-store","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["seamstress"],"tags":{"craft":"dressmaker"},"name":"Dressmaker"},"craft/electrician":{"icon":"poi-power","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["power","wire"],"tags":{"craft":"electrician"},"name":"Electrician"},"craft/electronics_repair":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"electronics_repair"},"name":"Electronics Repair Shop"},"craft/gardener":{"icon":"garden","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["landscaper","grounds keeper"],"tags":{"craft":"gardener"},"name":"Gardener"},"craft/glaziery":{"icon":"fire-station","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["glass","stained-glass","window"],"tags":{"craft":"glaziery"},"name":"Glaziery"},"craft/handicraft":{"icon":"art-gallery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"handicraft"},"name":"Handicraft"},"craft/hvac":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["heat*","vent*","air conditioning"],"tags":{"craft":"hvac"},"name":"HVAC"},"craft/insulator":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"insulation"},"name":"Insulator"},"craft/key_cutter":{"icon":"marker-stroked","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"key_cutter"},"name":"Key Cutter"},"craft/metal_construction":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"metal_construction"},"name":"Metal Construction"},"craft/painter":{"icon":"art-gallery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"painter"},"name":"Painter"},"craft/photographer":{"icon":"attraction","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"photographer"},"name":"Photographer"},"craft/photographic_laboratory":{"icon":"attraction","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["film"],"tags":{"craft":"photographic_laboratory"},"name":"Photographic Laboratory"},"craft/plasterer":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"plasterer"},"name":"Plasterer"},"craft/plumber":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["pipe"],"tags":{"craft":"plumber"},"name":"Plumber"},"craft/pottery":{"icon":"art-gallery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["ceramic"],"tags":{"craft":"pottery"},"name":"Pottery"},"craft/rigger":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"rigger"},"name":"Rigger"},"craft/roofer":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"roofer"},"name":"Roofer"},"craft/saddler":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"saddler"},"name":"Saddler"},"craft/sailmaker":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"sailmaker"},"name":"Sailmaker"},"craft/sawmill":{"icon":"logging","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["lumber"],"tags":{"craft":"sawmill"},"name":"Sawmill"},"craft/scaffolder":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"scaffolder"},"name":"Scaffolder"},"craft/sculptor":{"icon":"art-gallery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"sculptor"},"name":"Sculptor"},"craft/shoemaker":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["cobbler"],"tags":{"craft":"shoemaker"},"name":"Shoemaker"},"craft/stonemason":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["masonry"],"tags":{"craft":"stonemason"},"name":"Stonemason"},"craft/tiler":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"tiler"},"name":"Tiler"},"craft/tinsmith":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"tinsmith"},"name":"Tinsmith"},"craft/upholsterer":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"upholsterer"},"name":"Upholsterer"},"craft/watchmaker":{"icon":"poi-clock","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"watchmaker"},"name":"Watchmaker"},"craft/window_construction":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["glass"],"tags":{"craft":"window_construction"},"name":"Window Construction"},"craft/winery":{"icon":"alcohol-shop","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"winery"},"name":"Winery"},"embankment":{"geometry":["line"],"tags":{"embankment":"yes"},"name":"Embankment","matchScore":0.2},"emergency/designated":{"fields":[],"geometry":["line"],"tags":{"emergency":"designated"},"terms":[],"name":"Emergency Access Designated","searchable":false,"matchScore":0.01},"emergency/destination":{"fields":[],"geometry":["line"],"tags":{"emergency":"destination"},"terms":[],"name":"Emergency Access Destination","searchable":false,"matchScore":0.01},"emergency/no":{"fields":[],"geometry":["line"],"tags":{"emergency":"no"},"terms":[],"name":"Emergency Access No","searchable":false,"matchScore":0.01},"emergency/official":{"fields":[],"geometry":["line"],"tags":{"emergency":"official"},"terms":[],"name":"Emergency Access Official","searchable":false,"matchScore":0.01},"emergency/private":{"fields":[],"geometry":["line"],"tags":{"emergency":"private"},"terms":[],"name":"Emergency Access Private","searchable":false,"matchScore":0.01},"emergency/yes":{"fields":[],"geometry":["line"],"tags":{"emergency":"yes"},"terms":[],"name":"Emergency Access Yes","searchable":false,"matchScore":0.01},"emergency/ambulance_station":{"icon":"hospital","fields":["name","operator","building_area","address"],"geometry":["point","area"],"terms":["EMS","EMT","rescue"],"tags":{"emergency":"ambulance_station"},"name":"Ambulance Station"},"emergency/defibrillator":{"icon":"defibrillator","fields":["ref","access","opening_hours","indoor","phone"],"geometry":["point","vertex"],"terms":["AED"],"tags":{"emergency":"defibrillator"},"name":"Defibrillator"},"emergency/fire_hydrant":{"icon":"poi-fire-hydrant","fields":["fire_hydrant/type","fire_hydrant/position","ref","operator"],"geometry":["point","vertex"],"terms":["fire plug"],"tags":{"emergency":"fire_hydrant"},"name":"Fire Hydrant"},"emergency/life_ring":{"icon":"circle-stroked","fields":["ref","operator"],"geometry":["point","vertex"],"terms":["life buoy","kisby ring","kisbie ring","perry buoy"],"tags":{"emergency":"life_ring"},"name":"Life Ring"},"emergency/phone":{"icon":"emergency-phone","fields":["operator"],"geometry":["point","vertex"],"tags":{"emergency":"phone"},"name":"Emergency Phone"},"emergency/water_tank":{"icon":"water","fields":["name","operator","ref"],"geometry":["point","vertex"],"terms":["water tank","cistern","reservoir"],"tags":{"emergency":"water_tank"},"name":"Emergency Water Tank"},"entrance":{"icon":"entrance-alt1","geometry":["vertex"],"tags":{"entrance":"*"},"fields":["entrance","access_simple","address"],"name":"Entrance/Exit"},"footway/crossing-raised":{"fields":["crossing","access","surface","kerb","tactile_paving"],"geometry":["line"],"tags":{"highway":"footway","footway":"crossing","traffic_calming":"table"},"reference":{"key":"traffic_calming","value":"table"},"terms":["flat top","hump","speed","slow"],"name":"Raised Street Crossing"},"footway/crossing":{"fields":["crossing","access","surface","kerb","tactile_paving"],"geometry":["line"],"tags":{"highway":"footway","footway":"crossing"},"reference":{"key":"footway","value":"crossing"},"terms":[],"name":"Street Crossing"},"footway/crosswalk-raised":{"icon":"highway-footway","fields":["crossing","access","surface","kerb","tactile_paving"],"geometry":["line"],"tags":{"highway":"footway","footway":"crossing","crossing":"zebra","traffic_calming":"table"},"reference":{"key":"traffic_calming","value":"table"},"terms":["zebra crossing","flat top","hump","speed","slow"],"name":"Raised Pedestrian Crosswalk"},"footway/crosswalk":{"icon":"highway-footway","fields":["crossing","access","surface","kerb","tactile_paving"],"geometry":["line"],"tags":{"highway":"footway","footway":"crossing","crossing":"zebra"},"reference":{"key":"footway","value":"crossing"},"terms":["zebra crossing"],"name":"Pedestrian Crosswalk"},"footway/sidewalk":{"icon":"highway-footway","fields":["surface","lit","width","structure","access"],"geometry":["line"],"tags":{"highway":"footway","footway":"sidewalk"},"reference":{"key":"footway","value":"sidewalk"},"terms":[],"name":"Sidewalk"},"ford":{"geometry":["vertex"],"tags":{"ford":"yes"},"name":"Ford"},"golf/bunker":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"bunker","natural":"sand"},"terms":["hazard","bunker"],"reference":{"key":"golf","value":"bunker"},"name":"Sand Trap"},"golf/fairway":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"fairway","landuse":"grass"},"reference":{"key":"golf","value":"fairway"},"name":"Fairway"},"golf/green":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"green","landuse":"grass","leisure":"pitch","sport":"golf"},"reference":{"key":"golf","value":"green"},"name":"Putting Green"},"golf/hole":{"icon":"golf","fields":["name","ref_golf_hole","par","handicap"],"geometry":["line"],"tags":{"golf":"hole"},"name":"Golf Hole"},"golf/lateral_water_hazard_area":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"lateral_water_hazard","natural":"water"},"reference":{"key":"golf","value":"lateral_water_hazard"},"name":"Lateral Water Hazard"},"golf/lateral_water_hazard_line":{"icon":"golf","fields":["name"],"geometry":["line"],"tags":{"golf":"lateral_water_hazard"},"name":"Lateral Water Hazard"},"golf/rough":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"rough","landuse":"grass"},"reference":{"key":"golf","value":"rough"},"name":"Rough"},"golf/tee":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"tee","landuse":"grass"},"terms":["teeing ground"],"reference":{"key":"golf","value":"tee"},"name":"Tee Box"},"golf/water_hazard_area":{"icon":"golf","fields":["name"],"geometry":["area"],"tags":{"golf":"water_hazard","natural":"water"},"reference":{"key":"golf","value":"water_hazard"},"name":"Water Hazard"},"golf/water_hazard_line":{"icon":"golf","fields":["name"],"geometry":["line"],"tags":{"golf":"water_hazard"},"name":"Water Hazard"},"healthcare":{"icon":"hospital","fields":["name","healthcare","operator","healthcare/speciality","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"healthcare":"*"},"terms":["clinic","doctor","disease","health","institution","sick","surgery","wellness"],"name":"Healthcare Facility"},"healthcare/alternative":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["acupuncture","anthroposophical","applied kinesiology","aromatherapy","ayurveda","herbalism","homeopathy","hydrotherapy","hypnosis","naturopathy","osteopathy","reflexology","reiki","shiatsu","traditional","tuina","unani"],"tags":{"healthcare":"alternative"},"name":"Alternative Medicine"},"healthcare/alternative/chiropractic":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["back","pain","spine"],"tags":{"healthcare":"alternative","healthcare:speciality":"chiropractic"},"name":"Chiropractor"},"healthcare/audiologist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["ear","hearing","sound"],"tags":{"healthcare":"audiologist"},"name":"Audiologist"},"healthcare/birthing_center":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["baby","childbirth","delivery","labour","labor","pregnancy"],"tags":{"healthcare":"birthing_center"},"name":"Birthing Center"},"healthcare/blood_donation":{"icon":"blood-bank","fields":["name","operator","healthcare/speciality","blood_components","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["blood bank","blood donation","blood transfusion","apheresis","plasmapheresis","plateletpheresis","stem cell donation"],"tags":{"healthcare":"blood_donation"},"name":"Blood Donor Center"},"healthcare/hospice":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["terminal","illness"],"tags":{"healthcare":"hospice"},"name":"Hospice"},"healthcare/laboratory":{"icon":"hospital","fields":["name","operator","website","ref","address","opening_hours"],"geometry":["point","area"],"terms":["medical_laboratory","medical_lab","blood_check"],"tags":{"healthcare":"laboratory"},"name":"Medical Laboratory"},"healthcare/midwife":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["baby","childbirth","delivery","labour","labor","pregnancy"],"tags":{"healthcare":"midwife"},"name":"Midwife"},"healthcare/occupational_therapist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["therapist","therapy"],"tags":{"healthcare":"occupational_therapist"},"name":"Occupational Therapist"},"healthcare/optometrist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["eye","glasses","lasik","lenses","vision"],"tags":{"healthcare":"optometrist"},"name":"Optometrist"},"healthcare/physiotherapist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["physical","therapist","therapy"],"tags":{"healthcare":"physiotherapist"},"name":"Physiotherapist"},"healthcare/podiatrist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["foot","feet","nails"],"tags":{"healthcare":"podiatrist"},"name":"Podiatrist"},"healthcare/psychotherapist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["anxiety","counselor","depression","mental health","mind","suicide","therapist","therapy"],"tags":{"healthcare":"psychotherapist"},"name":"Psychotherapist"},"healthcare/rehabilitation":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["rehab","therapist","therapy"],"tags":{"healthcare":"rehabilitation"},"name":"Rehabilitation Facility"},"healthcare/speech_therapist":{"icon":"hospital","fields":["name","operator","healthcare/speciality","building_area","address","opening_hours"],"geometry":["point","area"],"terms":["speech","therapist","therapy","voice"],"tags":{"healthcare":"speech_therapist"},"name":"Speech Therapist"},"highway/bus_stop":{"icon":"bus","fields":["name","network","operator","bench","shelter"],"geometry":["point","vertex"],"tags":{"highway":"bus_stop"},"name":"Bus Stop / Platform","searchable":false},"highway/bridleway":{"fields":["name","surface","width","structure","access"],"icon":"highway-bridleway","geometry":["line"],"tags":{"highway":"bridleway"},"terms":["bridleway","equestrian","horse"],"name":"Bridle Path"},"highway/bus_guideway":{"icon":"highway-bus_guideway","fields":["name","operator","oneway"],"geometry":["line"],"tags":{"highway":"bus_guideway"},"addTags":{"highway":"bus_guideway","access":"no","bus":"designated"},"removeTags":{"highway":"bus_guideway","access":"no","bus":"designated"},"terms":[],"name":"Bus Guideway"},"highway/corridor":{"icon":"highway-footway","fields":["name","width","level","access_simple"],"geometry":["line"],"tags":{"highway":"corridor"},"terms":["gallery","hall","hallway","indoor","passage","passageway"],"name":"Indoor Corridor"},"highway/crossing-raised":{"fields":["crossing","kerb","tactile_paving"],"geometry":["vertex"],"tags":{"highway":"crossing","traffic_calming":"table"},"reference":{"key":"traffic_calming","value":"table"},"terms":["flat top","hump","speed","slow"],"name":"Raised Street Crossing"},"highway/crossing":{"fields":["crossing","kerb","tactile_paving"],"geometry":["vertex"],"tags":{"highway":"crossing"},"reference":{"key":"highway","value":"crossing"},"terms":[],"name":"Street Crossing"},"highway/crosswalk-raised":{"icon":"poi-foot","fields":["crossing","kerb","tactile_paving"],"geometry":["vertex"],"tags":{"highway":"crossing","crossing":"zebra","traffic_calming":"table"},"reference":{"key":"traffic_calming","value":"table"},"terms":["zebra crossing","flat top","hump","speed","slow"],"name":"Raised Pedestrian Crosswalk"},"highway/crosswalk":{"icon":"poi-foot","fields":["crossing","kerb","tactile_paving"],"geometry":["vertex"],"tags":{"highway":"crossing","crossing":"zebra"},"reference":{"key":"highway","value":"crossing"},"terms":["zebra crossing"],"name":"Pedestrian Crosswalk"},"highway/cycleway":{"icon":"highway-cycleway","fields":["name","oneway","surface","lit","width","structure","access"],"geometry":["line"],"tags":{"highway":"cycleway"},"terms":["bike"],"name":"Cycle Path"},"highway/elevator":{"icon":"poi-elevator","fields":["access_simple","opening_hours","maxweight","ref"],"geometry":["vertex"],"tags":{"highway":"elevator"},"terms":["lift"],"name":"Elevator"},"highway/footway":{"icon":"highway-footway","fields":["name","surface","lit","width","structure","access"],"geometry":["line"],"terms":["hike","hiking","trackway","trail","walk"],"tags":{"highway":"footway"},"name":"Foot Path"},"highway/give_way":{"icon":"poi-yield","fields":["direction_vertex"],"geometry":["vertex"],"tags":{"highway":"give_way"},"terms":["give way","yield","sign"],"name":"Yield Sign"},"highway/living_street":{"icon":"highway-living-street","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","access","cycleway"],"geometry":["line"],"tags":{"highway":"living_street"},"name":"Living Street"},"highway/mini_roundabout":{"icon":"circle-stroked","geometry":["vertex"],"tags":{"highway":"mini_roundabout"},"fields":["direction_clock"],"name":"Mini-Roundabout"},"highway/motorway_junction":{"icon":"poi-junction","geometry":["vertex"],"tags":{"highway":"motorway_junction"},"fields":["ref_highway_junction"],"name":"Motorway Junction / Exit"},"highway/motorway_link":{"icon":"highway-motorway-link","fields":["name","ref_road_number","oneway","maxspeed","maxspeed/advisory","lanes","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"motorway_link"},"addTags":{"highway":"motorway_link","oneway":"yes"},"removeTags":{"highway":"motorway_link","oneway":"yes"},"terms":["ramp","on ramp","off ramp"],"name":"Motorway Link"},"highway/motorway":{"icon":"highway-motorway","fields":["name","ref_road_number","oneway_yes","maxspeed","lanes","surface","structure","maxheight","toll","access"],"geometry":["line"],"tags":{"highway":"motorway"},"terms":["autobahn","expressway","freeway","highway","interstate","parkway","thruway","turnpike"],"name":"Motorway"},"highway/passing_place":{"icon":"circle-stroked","geometry":["vertex"],"tags":{"highway":"passing_place"},"terms":["turnout, pullout"],"name":"Passing Place"},"highway/path":{"icon":"highway-path","fields":["name","surface","width","structure","access","incline","sac_scale","trail_visibility","mtb/scale","mtb/scale/uphill","mtb/scale/imba","horse_scale","ref"],"geometry":["line"],"terms":["hike","hiking","trackway","trail","walk"],"tags":{"highway":"path"},"name":"Path"},"highway/pedestrian_area":{"icon":"poi-foot","fields":["name","surface","lit","width","structure","access"],"geometry":["area"],"tags":{"highway":"pedestrian","area":"yes"},"terms":["center","centre","plaza","quad","square","walkway"],"name":"Pedestrian Area"},"highway/pedestrian_line":{"icon":"highway-footway","fields":["name","surface","lit","width","oneway","structure","access"],"geometry":["line"],"tags":{"highway":"pedestrian"},"terms":["center","centre","plaza","quad","square","walkway"],"name":"Pedestrian Street"},"highway/primary_link":{"icon":"highway-primary-link","fields":["name","oneway","maxspeed","maxspeed/advisory","lanes","surface","maxheight","ref_road_number","cycleway","structure","access"],"geometry":["line"],"tags":{"highway":"primary_link"},"terms":["ramp","on ramp","off ramp"],"name":"Primary Link"},"highway/primary":{"icon":"highway-primary","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","ref_road_number","cycleway","access"],"geometry":["line"],"tags":{"highway":"primary"},"terms":[],"name":"Primary Road"},"highway/raceway":{"icon":"highway-unclassified","fields":["name","oneway","surface","sport_racing_motor","lit","width","lanes","structure"],"geometry":["point","line","area"],"tags":{"highway":"raceway"},"addTags":{"highway":"raceway","sport":"motor"},"terms":["auto*","formula one","kart","motocross","nascar","race*","track"],"name":"Racetrack (Motorsport)"},"highway/residential":{"icon":"highway-residential","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","cycleway","access"],"geometry":["line"],"tags":{"highway":"residential"},"terms":[],"name":"Residential Road"},"highway/rest_area":{"icon":"car","fields":["name"],"geometry":["point","vertex","area"],"tags":{"highway":"rest_area"},"terms":["rest stop"],"name":"Rest Area"},"highway/road":{"icon":"highway-road","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"road"},"terms":[],"name":"Unknown Road"},"highway/secondary_link":{"icon":"highway-secondary-link","fields":["name","oneway","maxspeed","maxspeed/advisory","lanes","surface","structure","maxheight","ref_road_number","cycleway","access"],"geometry":["line"],"tags":{"highway":"secondary_link"},"terms":["ramp","on ramp","off ramp"],"name":"Secondary Link"},"highway/secondary":{"icon":"highway-secondary","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","ref_road_number","cycleway","access"],"geometry":["line"],"tags":{"highway":"secondary"},"terms":[],"name":"Secondary Road"},"highway/service":{"icon":"highway-service","fields":["name","service","oneway","maxspeed","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"service"},"terms":[],"name":"Service Road"},"highway/service/alley":{"icon":"highway-service","fields":["name","oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"alley"},"reference":{"key":"service","value":"alley"},"name":"Alley"},"highway/service/drive-through":{"icon":"highway-service","fields":["name","oneway","covered","maxheight","maxspeed","structure","access","surface"],"geometry":["line"],"tags":{"highway":"service","service":"drive-through"},"reference":{"key":"service","value":"drive-through"},"name":"Drive-Through"},"highway/service/driveway":{"icon":"highway-service","fields":["name","oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"driveway"},"reference":{"key":"service","value":"driveway"},"name":"Driveway"},"highway/service/emergency_access":{"icon":"highway-service","fields":["name","oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"emergency_access"},"reference":{"key":"service","value":"emergency_access"},"name":"Emergency Access"},"highway/service/parking_aisle":{"icon":"highway-service","fields":["name","oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"parking_aisle"},"reference":{"key":"service","value":"parking_aisle"},"name":"Parking Aisle"},"highway/services":{"icon":"car","fields":["name"],"geometry":["point","vertex","area"],"tags":{"highway":"services"},"terms":["services","travel plaza","service station"],"name":"Service Area"},"highway/speed_camera":{"icon":"attraction","geometry":["point","vertex"],"fields":["direction","ref"],"tags":{"highway":"speed_camera"},"terms":[],"name":"Speed Camera"},"highway/steps":{"icon":"highway-steps","fields":["surface","lit","width","incline_steps","handrail","step_count"],"geometry":["line"],"tags":{"highway":"steps"},"terms":["stairs","staircase"],"name":"Steps"},"highway/stop":{"icon":"poi-stop","fields":["stop","direction_vertex"],"geometry":["vertex"],"tags":{"highway":"stop"},"terms":["stop","halt","sign"],"name":"Stop Sign"},"highway/street_lamp":{"icon":"poi-bulb","geometry":["point","vertex"],"tags":{"highway":"street_lamp"},"fields":["lamp_type","direction","ref"],"terms":["streetlight","street light","lamp","light","gaslight"],"name":"Street Lamp"},"highway/tertiary_link":{"icon":"highway-tertiary-link","fields":["name","oneway","maxspeed","maxspeed/advisory","lanes","surface","structure","maxheight","ref_road_number","cycleway","access"],"geometry":["line"],"tags":{"highway":"tertiary_link"},"terms":["ramp","on ramp","off ramp"],"name":"Tertiary Link"},"highway/tertiary":{"icon":"highway-tertiary","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","ref_road_number","cycleway","access"],"geometry":["line"],"tags":{"highway":"tertiary"},"terms":[],"name":"Tertiary Road"},"highway/track":{"icon":"highway-track","fields":["name","tracktype","surface","width","structure","access","incline","smoothness","mtb/scale","mtb/scale/uphill","mtb/scale/imba","horse_scale"],"geometry":["line"],"tags":{"highway":"track"},"terms":["woods road","forest road","logging road","fire road","farm road","agricultural road","ranch road","carriage road","primitive","unmaintained","rut","offroad","4wd","4x4","four wheel drive","atv","quad","jeep","double track","two track"],"name":"Unmaintained Track Road"},"highway/traffic_mirror":{"geometry":["point","vertex"],"fields":["direction"],"tags":{"highway":"traffic_mirror"},"terms":["blind spot","convex","corner","curved","roadside","round","safety","sphere","visibility"],"name":"Traffic Mirror"},"highway/traffic_signals":{"icon":"poi-traffic-signals","geometry":["vertex"],"tags":{"highway":"traffic_signals"},"fields":["traffic_signals","traffic_signals/direction"],"terms":["light","stoplight","traffic light"],"name":"Traffic Signals"},"highway/trunk_link":{"icon":"highway-trunk-link","fields":["name","ref_road_number","oneway","maxspeed","maxspeed/advisory","lanes","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"trunk_link"},"terms":["ramp","on ramp","off ramp"],"name":"Trunk Link"},"highway/trunk":{"icon":"highway-trunk","fields":["name","ref_road_number","oneway","maxspeed","lanes","surface","structure","maxheight","toll","access"],"geometry":["line"],"tags":{"highway":"trunk"},"terms":[],"name":"Trunk Road"},"highway/turning_circle":{"icon":"circle-stroked","geometry":["vertex"],"tags":{"highway":"turning_circle"},"terms":["cul-de-sac"],"name":"Turning Circle"},"highway/turning_loop":{"icon":"circle","geometry":["vertex"],"tags":{"highway":"turning_loop"},"terms":["cul-de-sac"],"name":"Turning Loop (Island)"},"highway/unclassified":{"icon":"highway-unclassified","fields":["name","oneway","maxspeed","lanes","surface","structure","maxheight","cycleway","access"],"geometry":["line"],"tags":{"highway":"unclassified"},"terms":[],"name":"Minor/Unclassified Road"},"historic":{"icon":"poi-ruins","fields":["historic","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"*"},"name":"Historic Site"},"historic/archaeological_site":{"icon":"poi-ruins","fields":["name","historic/civilization","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"archaeological_site"},"name":"Archaeological Site"},"historic/boundary_stone":{"icon":"poi-milestone","fields":["name","inscription"],"geometry":["point","vertex"],"tags":{"historic":"boundary_stone"},"name":"Boundary Stone"},"historic/castle":{"icon":"castle","fields":["name","castle_type","building_area","historic/civilization"],"geometry":["point","area"],"tags":{"historic":"castle"},"name":"Castle"},"historic/memorial":{"icon":"monument","fields":["name","memorial","inscription"],"geometry":["point","vertex","area"],"terms":["dedicatory","epitaph","remember","remembrance","memory","monument","stolperstein"],"tags":{"historic":"memorial"},"name":"Memorial"},"historic/monument":{"icon":"monument","fields":["name","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"monument"},"name":"Monument"},"historic/ruins":{"icon":"poi-ruins","fields":["name","historic/civilization","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"ruins"},"name":"Ruins"},"historic/tomb":{"icon":"cemetery","fields":["name","tomb","building_area","inscription"],"geometry":["point","area"],"tags":{"historic":"tomb"},"name":"Tomb"},"historic/wayside_cross":{"icon":"religious-christian","fields":["name","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"wayside_cross"},"name":"Wayside Cross"},"historic/wayside_shrine":{"icon":"landmark","fields":["name","religion","denomination","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"wayside_shrine"},"name":"Wayside Shrine"},"junction":{"icon":"poi-junction","fields":["name"],"geometry":["vertex","area"],"tags":{"junction":"yes"},"name":"Junction"},"landuse":{"fields":["name","landuse"],"geometry":["area"],"tags":{"landuse":"*"},"matchScore":0.9,"name":"Land Use"},"landuse/farm":{"icon":"farm","fields":["name","operator","crop"],"geometry":["point","area"],"tags":{"landuse":"farm"},"terms":[],"name":"Farmland","searchable":false},"landuse/allotments":{"geometry":["area"],"fields":["name"],"tags":{"landuse":"allotments"},"terms":["allotment","garden"],"name":"Community Garden"},"landuse/aquaculture":{"icon":"aquarium","fields":["name","operator","produce"],"geometry":["area"],"tags":{"landuse":"aquaculture"},"terms":["fish farm","crustacean","algae","aquafarming","shrimp farm","oyster farm","mariculture","algaculture"],"name":"Aquaculture"},"landuse/basin":{"icon":"water","fields":["name"],"geometry":["area"],"tags":{"landuse":"basin"},"terms":[],"name":"Basin"},"landuse/brownfield":{"geometry":["area"],"fields":["name"],"tags":{"landuse":"brownfield"},"terms":[],"matchScore":0.9,"name":"Brownfield"},"landuse/cemetery":{"icon":"cemetery","fields":["name","religion","denomination"],"geometry":["area"],"tags":{"landuse":"cemetery"},"terms":[],"name":"Cemetery"},"landuse/churchyard":{"fields":["name","religion","denomination"],"geometry":["area"],"tags":{"landuse":"churchyard"},"terms":[],"name":"Churchyard"},"landuse/commercial":{"icon":"suitcase","fields":["name"],"geometry":["area"],"tags":{"landuse":"commercial"},"terms":[],"matchScore":0.9,"name":"Commercial Area"},"landuse/construction":{"fields":["name","construction","operator"],"geometry":["area"],"tags":{"landuse":"construction"},"terms":[],"name":"Construction"},"landuse/farmland":{"icon":"farm","fields":["name","operator","crop","produce"],"geometry":["area"],"tags":{"landuse":"farmland"},"terms":["crop","grow","plant"],"name":"Farmland"},"landuse/farmyard":{"icon":"farm","fields":["name","operator","crop"],"geometry":["area"],"tags":{"landuse":"farmyard"},"terms":["crop","grow","plant"],"name":"Farmyard"},"landuse/forest":{"icon":"park-alt1","fields":["name","leaf_type","leaf_cycle","produce"],"geometry":["area"],"tags":{"landuse":"forest"},"terms":["tree"],"name":"Forest"},"landuse/garages":{"geometry":["area"],"fields":["name"],"tags":{"landuse":"garages"},"terms":[],"name":"Garage Landuse"},"landuse/grass":{"geometry":["area"],"tags":{"landuse":"grass"},"terms":[],"name":"Grass"},"landuse/greenfield":{"geometry":["area"],"fields":["name"],"tags":{"landuse":"greenfield"},"terms":[],"matchScore":0.9,"name":"Greenfield"},"landuse/greenhouse_horticulture":{"icon":"garden","fields":["name","operator"],"geometry":["area"],"terms":["flower","greenhouse","horticulture","grow","vivero"],"tags":{"landuse":"greenhouse_horticulture"},"matchScore":0.9,"name":"Greenhouse Horticulture"},"landuse/harbour":{"icon":"harbor","fields":["name","operator"],"geometry":["area"],"terms":["boat"],"tags":{"landuse":"harbour"},"name":"Harbor"},"landuse/industrial":{"icon":"industry","fields":["name","industrial"],"geometry":["area"],"tags":{"landuse":"industrial"},"terms":[],"matchScore":0.9,"name":"Industrial Area"},"landuse/industrial/scrap_yard":{"icon":"car","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"tags":{"industrial":"scrap_yard"},"addTags":{"landuse":"industrial","industrial":"scrap_yard"},"removeTags":{"landuse":"industrial","industrial":"scrap_yard"},"reference":{"key":"industrial","value":"scrap_yard"},"terms":["car","junk","metal","salvage","scrap","u-pull-it","vehicle","wreck","yard"],"name":"Scrap Yard"},"landuse/industrial/slaughterhouse":{"icon":"slaughterhouse","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"industrial":"slaughterhouse"},"addTags":{"landuse":"industrial","industrial":"slaughterhouse"},"removeTags":{"landuse":"industrial","industrial":"slaughterhouse"},"reference":{"key":"industrial","value":"slaughterhouse"},"terms":["abattoir","beef","butchery","calf","chicken","cow","killing house","meat","pig","pork","poultry","shambles","stockyard"],"name":"Slaughterhouse"},"landuse/landfill":{"geometry":["area"],"fields":["name"],"tags":{"landuse":"landfill"},"terms":["dump"],"name":"Landfill"},"landuse/meadow":{"icon":"garden","geometry":["area"],"fields":["name"],"tags":{"landuse":"meadow"},"terms":[],"name":"Meadow"},"landuse/military":{"icon":"poi-military","fields":["name"],"geometry":["area"],"tags":{"landuse":"military"},"terms":[],"matchScore":0.9,"name":"Military Area"},"landuse/military/airfield":{"icon":"airfield","fields":["name","iata","icao"],"geometry":["point","area"],"tags":{"military":"airfield"},"addTags":{"landuse":"military","military":"airfield"},"removeTags":{"landuse":"military","military":"airfield"},"terms":["air force","army","base","bomb","fight","force","guard","heli*","jet","marine","navy","plane","troop","war"],"name":"Military Airfield"},"landuse/military/barracks":{"icon":"poi-military","fields":["name","building_area"],"geometry":["point","area"],"tags":{"military":"barracks"},"addTags":{"landuse":"military","military":"barracks"},"removeTags":{"landuse":"military","military":"barracks"},"terms":["air force","army","base","fight","force","guard","marine","navy","troop","war"],"name":"Barracks"},"landuse/military/bunker":{"icon":"poi-military","fields":["name","bunker_type","building_area"],"geometry":["point","area"],"tags":{"military":"bunker"},"addTags":{"building":"bunker","landuse":"military","military":"bunker"},"removeTags":{"building":"bunker","landuse":"military","military":"bunker"},"terms":["air force","army","base","fight","force","guard","marine","navy","troop","war"],"name":"Military Bunker"},"landuse/military/checkpoint":{"icon":"barrier","fields":["name"],"geometry":["point","vertex","area"],"tags":{"military":"checkpoint"},"addTags":{"landuse":"military","military":"checkpoint"},"removeTags":{"landuse":"military","military":"checkpoint"},"terms":["air force","army","base","force","guard","marine","navy","troop","war"],"name":"Checkpoint"},"landuse/military/danger_area":{"icon":"danger","fields":["name"],"geometry":["point","vertex","area"],"tags":{"military":"danger_area"},"addTags":{"landuse":"military","military":"danger_area"},"removeTags":{"landuse":"military","military":"danger_area"},"terms":["air force","army","base","blast","bomb","explo*","force","guard","mine","marine","navy","troop","war"],"name":"Danger Area"},"landuse/military/naval_base":{"icon":"poi-military","fields":["name"],"geometry":["point","area"],"tags":{"military":"naval_base"},"addTags":{"landuse":"military","military":"naval_base"},"removeTags":{"landuse":"military","military":"naval_base"},"terms":["base","fight","force","guard","marine","navy","ship","sub","troop","war"],"name":"Naval Base"},"landuse/military/nuclear_explosion_site":{"icon":"danger","fields":["name"],"geometry":["point","vertex","area"],"tags":{"military":"nuclear_explosion_site"},"addTags":{"landuse":"military","military":"nuclear_explosion_site"},"removeTags":{"landuse":"military","military":"nuclear_explosion_site"},"terms":["atom","blast","bomb","detonat*","nuke","site","test"],"name":"Nuclear Explosion Site"},"landuse/military/obstacle_course":{"icon":"poi-military","geometry":["point","area"],"tags":{"military":"obstacle_course"},"addTags":{"landuse":"military","military":"obstacle_course"},"removeTags":{"landuse":"military","military":"obstacle_course"},"terms":["army","base","force","guard","marine","navy","troop","war"],"name":"Obstacle Course"},"landuse/military/office":{"icon":"poi-military","fields":["name","building_area"],"geometry":["point","area"],"tags":{"military":"office"},"addTags":{"landuse":"military","military":"office"},"removeTags":{"landuse":"military","military":"office"},"terms":["air force","army","base","enlist","fight","force","guard","marine","navy","recruit","troop","war"],"name":"Military Office"},"landuse/military/range":{"icon":"poi-military","fields":["name"],"geometry":["point","area"],"tags":{"military":"range"},"addTags":{"landuse":"military","military":"range"},"removeTags":{"landuse":"military","military":"range"},"terms":["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],"name":"Military Range"},"landuse/military/training_area":{"icon":"poi-military","fields":["name"],"geometry":["point","area"],"tags":{"military":"training_area"},"addTags":{"landuse":"military","military":"training_area"},"removeTags":{"landuse":"military","military":"training_area"},"terms":["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],"name":"Training Area"},"landuse/orchard":{"icon":"park-alt1","fields":["name","operator","trees"],"geometry":["area"],"tags":{"landuse":"orchard"},"terms":["fruit"],"name":"Orchard"},"landuse/plant_nursery":{"icon":"garden","fields":["name","operator","plant"],"geometry":["area"],"tags":{"landuse":"plant_nursery"},"terms":["flower","garden","grow","vivero"],"name":"Plant Nursery"},"landuse/quarry":{"geometry":["area"],"fields":["name"],"tags":{"landuse":"quarry"},"terms":[],"name":"Quarry"},"landuse/railway":{"icon":"rail","fields":["operator"],"geometry":["area"],"tags":{"landuse":"railway"},"terms":["rail","train","track"],"name":"Railway Corridor"},"landuse/recreation_ground":{"icon":"pitch","geometry":["area"],"fields":["name"],"tags":{"landuse":"recreation_ground"},"terms":["playing fields"],"name":"Recreation Ground"},"landuse/religious":{"geometry":["area"],"fields":["name","religion","denomination"],"tags":{"landuse":"religious"},"terms":[],"name":"Religious Area"},"landuse/residential":{"icon":"building","geometry":["area"],"tags":{"landuse":"residential"},"terms":[],"matchScore":0.9,"name":"Residential Area"},"landuse/retail":{"icon":"commercial","geometry":["area"],"fields":["name"],"tags":{"landuse":"retail"},"matchScore":0.9,"name":"Retail Area"},"landuse/vineyard":{"fields":["name","operator","grape_variety"],"geometry":["area"],"tags":{"landuse":"vineyard"},"addTags":{"landuse":"vineyard","crop":"grape"},"removeTags":{"landuse":"vineyard","crop":"grape","grape_variety":"*"},"terms":["grape","wine"],"name":"Vineyard"},"leisure":{"icon":"pitch","fields":["name","leisure"],"geometry":["point","vertex","area"],"tags":{"leisure":"*"},"name":"Leisure"},"leisure/adult_gaming_centre":{"icon":"poi-dice","fields":["name","operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"terms":["gambling","slot machine"],"tags":{"leisure":"adult_gaming_centre"},"name":"Adult Gaming Center"},"leisure/amusement_arcade":{"icon":"gaming","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["pay-to-play games","video games","driving simulators","pinball machines"],"tags":{"leisure":"amusement_arcade"},"name":"Amusement Arcade"},"leisure/beach_resort":{"icon":"poi-beach","fields":["name","address","fee"],"geometry":["point","area"],"tags":{"leisure":"beach_resort"},"name":"Beach Resort"},"leisure/bird_hide":{"icon":"poi-binoculars","fields":["building_area"],"geometry":["point","area"],"tags":{"leisure":"bird_hide"},"terms":["machan","ornithology"],"name":"Bird Hide"},"leisure/bowling_alley":{"icon":"poi-bowling","fields":["name","operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"terms":["bowling center"],"tags":{"leisure":"bowling_alley"},"name":"Bowling Alley"},"leisure/common":{"icon":"poi-foot","geometry":["point","area"],"fields":["name"],"terms":["open space"],"tags":{"leisure":"common"},"name":"Common"},"leisure/dance":{"icon":"music","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["ballroom","jive","swing","tango","waltz"],"tags":{"leisure":"dance"},"name":"Dance Hall"},"leisure/dancing_school":{"icon":"music","fields":["name","operator","address","opening_hours","dance/style"],"geometry":["point","area"],"terms":["jive","swing","tango","waltz","dance teaching"],"tags":{"leisure":"dance","dance:teaching":"yes"},"reference":{"key":"leisure","value":"dance"},"name":"Dance School"},"leisure/dog_park":{"icon":"dog-park","geometry":["point","area"],"fields":["name"],"terms":[],"tags":{"leisure":"dog_park"},"name":"Dog Park"},"leisure/firepit":{"icon":"fire-station","geometry":["point","area"],"tags":{"leisure":"firepit"},"terms":["fireplace","campfire"],"name":"Firepit"},"leisure/fitness_centre":{"icon":"pitch","fields":["name","sport","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_centre"},"terms":["health","gym","leisure","studio"],"name":"Gym / Fitness Center"},"leisure/fitness_centre/yoga":{"icon":"pitch","fields":["name","sport","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["studio"],"tags":{"leisure":"fitness_centre","sport":"yoga"},"reference":{"key":"sport","value":"yoga"},"name":"Yoga Studio"},"leisure/fitness_station":{"icon":"pitch","fields":["fitness_station","ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station"},"addTags":{"leisure":"fitness_station","sport":"fitness"},"removeTags":{"leisure":"fitness_station","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["exercise","fitness","gym","trim trail"],"name":"Outdoor Fitness Station"},"leisure/fitness_station/balance_beam":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"balance_beam"},"addTags":{"leisure":"fitness_station","fitness_station":"balance_beam","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"balance_beam","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["balance","exercise","fitness","gym","trim trail"],"name":"Exercise Balance Beam"},"leisure/fitness_station/box":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"box"},"addTags":{"leisure":"fitness_station","fitness_station":"box","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"box","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["box","exercise","fitness","gym","jump","trim trail"],"name":"Exercise Box"},"leisure/fitness_station/horizontal_bar":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"horizontal_bar"},"addTags":{"leisure":"fitness_station","fitness_station":"horizontal_bar","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"horizontal_bar","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["bar","chinup","chin up","exercise","fitness","gym","pullup","pull up","trim trail"],"name":"Exercise Horizontal Bar"},"leisure/fitness_station/horizontal_ladder":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"horizontal_ladder"},"addTags":{"leisure":"fitness_station","fitness_station":"horizontal_ladder","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"horizontal_ladder","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["bar","chinup","chin up","exercise","fitness","gym","ladder","monkey bars","pullup","pull up","trim trail"],"name":"Exercise Monkey Bars"},"leisure/fitness_station/hyperextension":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"hyperextension"},"addTags":{"leisure":"fitness_station","fitness_station":"hyperextension","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"hyperextension","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["back","exercise","extension","fitness","gym","roman chair","trim trail"],"name":"Hyperextension Station"},"leisure/fitness_station/parallel_bars":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"parallel_bars"},"addTags":{"leisure":"fitness_station","fitness_station":"parallel_bars","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"parallel_bars","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["bar","dip","exercise","fitness","gym","trim trail"],"name":"Parallel Bars"},"leisure/fitness_station/push-up":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"push-up"},"addTags":{"leisure":"fitness_station","fitness_station":"push-up","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"push-up","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["bar","exercise","fitness","gym","pushup","push up","trim trail"],"name":"Push-Up Station"},"leisure/fitness_station/rings":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"rings"},"addTags":{"leisure":"fitness_station","fitness_station":"rings","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"rings","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["exercise","fitness","gym","muscle up","pullup","pull up","trim trail"],"name":"Exercise Rings"},"leisure/fitness_station/sign":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"sign"},"addTags":{"leisure":"fitness_station","fitness_station":"sign","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"sign","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["exercise","fitness","gym","trim trail"],"name":"Exercise Instruction Sign"},"leisure/fitness_station/sit-up":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"sit-up"},"addTags":{"leisure":"fitness_station","fitness_station":"sit-up","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"sit-up","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["crunch","exercise","fitness","gym","situp","sit up","trim trail"],"name":"Sit-Up Station"},"leisure/fitness_station/stairs":{"icon":"pitch","fields":["ref","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station","fitness_station":"stairs"},"addTags":{"leisure":"fitness_station","fitness_station":"stairs","sport":"fitness"},"removeTags":{"leisure":"fitness_station","fitness_station":"stairs","sport":"fitness"},"reference":{"key":"leisure","value":"fitness_station"},"terms":["exercise","fitness","gym","steps","trim trail"],"name":"Exercise Stairs"},"leisure/garden":{"icon":"garden","fields":["name","access_simple"],"geometry":["point","vertex","area"],"tags":{"leisure":"garden"},"name":"Garden"},"leisure/golf_course":{"icon":"golf","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"terms":["links"],"tags":{"leisure":"golf_course"},"name":"Golf Course"},"leisure/hackerspace":{"icon":"commercial","fields":["name","address","building_area","opening_hours","website"],"geometry":["point","area"],"terms":["makerspace","hackspace","hacklab"],"tags":{"leisure":"hackerspace"},"name":"Hackerspace"},"leisure/horse_riding":{"icon":"horse-riding","fields":["name","access_simple","operator","address","building"],"geometry":["point","area"],"terms":["equestrian","stable"],"tags":{"leisure":"horse_riding"},"name":"Horseback Riding Facility"},"leisure/ice_rink":{"icon":"pitch","fields":["name","seasonal","sport_ice","operator","address","building","opening_hours"],"geometry":["point","area"],"terms":["hockey","skating","curling"],"tags":{"leisure":"ice_rink"},"name":"Ice Rink"},"leisure/marina":{"icon":"harbor","fields":["name","operator","address","capacity","fee","sanitary_dump_station","power_supply","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"terms":["boat"],"tags":{"leisure":"marina"},"name":"Marina"},"leisure/miniature_golf":{"icon":"golf","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"terms":["crazy golf","mini golf","putt-putt"],"tags":{"leisure":"miniature_golf"},"name":"Miniature Golf"},"leisure/nature_reserve":{"icon":"park","geometry":["point","area"],"fields":["name"],"tags":{"leisure":"nature_reserve"},"terms":["protected","wildlife"],"name":"Nature Reserve"},"leisure/outdoor_seating":{"icon":"picnic-site","geometry":["point","area"],"fields":["name","operator"],"terms":["al fresco","beer garden","dining","cafe","restaurant","pub","bar","patio"],"tags":{"leisure":"outdoor_seating"},"name":"Outdoor Seating Area"},"leisure/park":{"icon":"park","geometry":["point","area"],"fields":["name"],"terms":["esplanade","estate","forest","garden","grass","green","grounds","lawn","lot","meadow","parkland","place","playground","plaza","pleasure garden","recreation area","square","tract","village green","woodland"],"tags":{"leisure":"park"},"name":"Park"},"leisure/picnic_table":{"icon":"picnic-site","geometry":["point"],"tags":{"leisure":"picnic_table"},"terms":["bench"],"name":"Picnic Table"},"leisure/pitch":{"icon":"pitch","fields":["name","sport","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch"},"terms":["field"],"name":"Sport Pitch"},"leisure/pitch/american_football":{"icon":"america-football","fields":["name","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"american_football"},"reference":{"key":"sport","value":"american_football"},"terms":[],"name":"American Football Field"},"leisure/pitch/baseball":{"icon":"baseball","fields":["name","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"baseball"},"reference":{"key":"sport","value":"baseball"},"terms":[],"name":"Baseball Diamond"},"leisure/pitch/basketball":{"icon":"basketball","fields":["name","surface","hoops","lit","access_simple"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"basketball"},"reference":{"key":"sport","value":"basketball"},"terms":[],"name":"Basketball Court"},"leisure/pitch/beachvolleyball":{"icon":"basketball","fields":["name","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"beachvolleyball"},"addTags":{"leisure":"pitch","sport":"beachvolleyball","surface":"sand"},"removeTags":{"leisure":"pitch","sport":"beachvolleyball","surface":"sand"},"reference":{"key":"sport","value":"beachvolleyball"},"terms":["volleyball"],"name":"Beach Volleyball Court"},"leisure/pitch/boules":{"icon":"pitch","fields":["name","boules","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"boules"},"reference":{"key":"sport","value":"boules"},"terms":["bocce","lyonnaise","pétanque"],"name":"Boules/Bocce Court"},"leisure/pitch/bowls":{"icon":"pitch","fields":["name","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"bowls"},"reference":{"key":"sport","value":"bowls"},"terms":[],"name":"Bowling Green"},"leisure/pitch/cricket":{"icon":"cricket","fields":["name","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"cricket"},"reference":{"key":"sport","value":"cricket"},"terms":[],"name":"Cricket Field"},"leisure/pitch/equestrian":{"icon":"horse-riding","fields":["name","surface","lit","building"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"equestrian"},"reference":{"key":"sport","value":"equestrian"},"terms":["dressage","equestrian","horse","horseback","riding"],"name":"Riding Arena"},"leisure/pitch/rugby_league":{"icon":"america-football","fields":["name","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"rugby_league"},"reference":{"key":"sport","value":"rugby_league"},"terms":[],"name":"Rugby League Field"},"leisure/pitch/rugby_union":{"icon":"america-football","fields":["name","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"rugby_union"},"reference":{"key":"sport","value":"rugby_union"},"terms":[],"name":"Rugby Union Field"},"leisure/pitch/skateboard":{"icon":"pitch","fields":["name","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"skateboard"},"reference":{"key":"sport","value":"skateboard"},"terms":[],"name":"Skate Park"},"leisure/pitch/soccer":{"icon":"soccer","fields":["name","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"soccer"},"reference":{"key":"sport","value":"soccer"},"terms":["football"],"name":"Soccer Field"},"leisure/pitch/table_tennis":{"icon":"tennis","fields":["name","lit","access_simple"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"table_tennis"},"reference":{"key":"sport","value":"table_tennis"},"terms":["table tennis","ping pong"],"name":"Ping Pong Table"},"leisure/pitch/tennis":{"icon":"tennis","fields":["name","surface","lit","access_simple"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"tennis"},"reference":{"key":"sport","value":"tennis"},"terms":[],"name":"Tennis Court"},"leisure/pitch/volleyball":{"icon":"basketball","fields":["name","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"volleyball"},"reference":{"key":"sport","value":"volleyball"},"terms":[],"name":"Volleyball Court"},"leisure/playground":{"icon":"playground","fields":["name","operator","surface","playground/max_age","playground/min_age","access_simple"],"geometry":["point","area"],"terms":["jungle gym","play area"],"tags":{"leisure":"playground"},"name":"Playground"},"leisure/resort":{"icon":"lodging","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"resort"},"name":"Resort"},"leisure/running_track":{"icon":"pitch","fields":["surface","sport_racing_nonmotor","lit","width","lanes"],"geometry":["point","line","area"],"tags":{"leisure":"track","sport":"running"},"terms":["race*","running","sprint","track"],"name":"Racetrack (Running)"},"leisure/sauna":{"fields":["name","operator","address","opening_hours","access_simple","fee"],"geometry":["point","area"],"tags":{"leisure":"sauna"},"name":"Sauna"},"leisure/slipway":{"icon":"poi-beach","geometry":["point","line"],"terms":["boat launch","boat ramp"],"tags":{"leisure":"slipway"},"name":"Slipway"},"leisure/sports_centre":{"icon":"pitch","fields":["name","sport","building","address","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"sports_centre"},"terms":[],"name":"Sports Center / Complex"},"leisure/sports_centre/swimming":{"icon":"swimming","fields":["name","access_simple","operator","address","building"],"geometry":["point","area"],"terms":["dive","water"],"tags":{"leisure":"sports_centre","sport":"swimming"},"reference":{"key":"sport","value":"swimming"},"name":"Swimming Pool Facility"},"leisure/stadium":{"icon":"pitch","fields":["name","sport","address"],"geometry":["point","area"],"tags":{"leisure":"stadium"},"name":"Stadium"},"leisure/swimming_pool":{"icon":"swimming","fields":["name","access_simple","operator","address"],"geometry":["point","area"],"terms":["dive","water"],"tags":{"leisure":"swimming_pool"},"name":"Swimming Pool"},"leisure/track":{"icon":"highway-road","fields":["surface","sport_racing_nonmotor","lit","width","lanes"],"geometry":["point","line","area"],"tags":{"leisure":"track"},"terms":["cycle","dog","greyhound","horse","race*","track"],"name":"Racetrack (Non-Motorsport)"},"leisure/water_park":{"icon":"swimming","fields":["name","operator","address"],"geometry":["point","area"],"terms":["swim","pool","dive"],"tags":{"leisure":"water_park"},"name":"Water Park"},"line":{"fields":["name"],"geometry":["line"],"tags":{},"name":"Line","matchScore":0.1},"man_made":{"icon":"poi-storage-tank","fields":["name","man_made"],"geometry":["point","vertex","line","area"],"tags":{"man_made":"*"},"name":"Man Made"},"man_made/embankment":{"geometry":["line"],"tags":{"man_made":"embankment"},"name":"Embankment","searchable":false},"man_made/adit":{"icon":"triangle","geometry":["point","area"],"fields":["operator","direction"],"terms":["entrance","underground","mine","cave"],"tags":{"man_made":"adit"},"name":"Adit"},"man_made/antenna":{"icon":"poi-mast","fields":["height","communication_multi"],"geometry":["point"],"terms":["broadcast","cell phone","cell","communication","mobile phone","radio","television","transmission","tv"],"tags":{"man_made":"antenna"},"name":"Antenna"},"man_made/breakwater":{"geometry":["line","area"],"tags":{"man_made":"breakwater"},"name":"Breakwater"},"man_made/bridge":{"geometry":["area"],"tags":{"man_made":"bridge"},"name":"Bridge"},"man_made/chimney":{"icon":"poi-chimney","geometry":["point","area"],"tags":{"man_made":"chimney"},"name":"Chimney"},"man_made/crane":{"icon":"poi-crane","fields":["operator","height","crane/type"],"geometry":["point","line","vertex","area"],"tags":{"man_made":"crane"},"name":"Crane"},"man_made/cutline":{"geometry":["line"],"tags":{"man_made":"cutline"},"name":"Cut line"},"man_made/flagpole":{"icon":"embassy","geometry":["point"],"tags":{"man_made":"flagpole"},"name":"Flagpole"},"man_made/gasometer":{"icon":"poi-storage-tank","geometry":["point","area"],"terms":["gas holder"],"tags":{"man_made":"gasometer"},"name":"Gasometer"},"man_made/groyne":{"geometry":["line","area"],"tags":{"man_made":"groyne"},"name":"Groyne"},"man_made/lighthouse":{"icon":"lighthouse","fields":["building_area"],"geometry":["point","area"],"tags":{"man_made":"lighthouse"},"name":"Lighthouse"},"man_made/mast":{"icon":"poi-mast","fields":["tower/type","tower/construction","height","communication_multi"],"geometry":["point"],"terms":["antenna","broadcast tower","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","radio mast","radio tower","television tower","transmission mast","transmission tower","tv tower"],"tags":{"man_made":"mast"},"name":"Mast"},"man_made/monitoring_station":{"icon":"poi-mast","geometry":["point","area"],"fields":["monitoring_multi","operator"],"terms":["weather","earthquake","seismology","air","gps"],"tags":{"man_made":"monitoring_station"},"name":"Monitoring Station"},"man_made/observation":{"icon":"poi-tower","geometry":["point","area"],"terms":["lookout tower","fire tower"],"tags":{"man_made":"tower","tower:type":"observation"},"name":"Observation Tower"},"man_made/observatory":{"geometry":["point","area"],"terms":["astronomical","meteorological"],"tags":{"man_made":"observatory"},"name":"Observatory"},"man_made/petroleum_well":{"icon":"poi-storage-tank","geometry":["point"],"terms":["drilling rig","oil derrick","oil drill","oil horse","oil rig","oil pump","petroleum well","pumpjack"],"tags":{"man_made":"petroleum_well"},"name":"Oil Well"},"man_made/pier":{"geometry":["line","area"],"terms":["dock","jetty"],"tags":{"man_made":"pier"},"name":"Pier"},"man_made/pipeline":{"icon":"pipeline-line","fields":["location","operator","substance"],"geometry":["line"],"tags":{"man_made":"pipeline"},"name":"Pipeline"},"man_made/pumping_station":{"icon":"water","geometry":["point","area"],"tags":{"man_made":"pumping_station"},"name":"Pumping Station"},"man_made/silo":{"icon":"poi-silo","fields":["building_area","crop"],"geometry":["point","area"],"terms":["grain","corn","wheat"],"tags":{"man_made":"silo"},"name":"Silo"},"man_made/storage_tank":{"icon":"poi-storage-tank","fields":["building_area","content"],"geometry":["point","area"],"terms":["water","oil","gas","petrol"],"tags":{"man_made":"storage_tank"},"name":"Storage Tank"},"man_made/surveillance_camera":{"icon":"attraction","geometry":["point","vertex"],"fields":["surveillance","surveillance/type","camera/type","camera/mount","camera/direction","surveillance/zone","contact/webcam"],"terms":["anpr","alpr","camera","car plate recognition","cctv","guard","license plate recognition","monitoring","number plate recognition","security","video","webcam"],"tags":{"man_made":"surveillance","surveillance:type":"camera"},"name":"Surveillance Camera"},"man_made/surveillance":{"icon":"attraction","geometry":["point","vertex"],"fields":["surveillance","surveillance/type","surveillance/zone","direction"],"terms":["anpr","alpr","camera","car plate recognition","cctv","guard","license plate recognition","monitoring","number plate recognition","security","video","webcam"],"tags":{"man_made":"surveillance"},"name":"Surveillance"},"man_made/survey_point":{"icon":"monument","fields":["ref"],"geometry":["point","vertex"],"terms":["trig point","triangulation pillar","trigonometrical station"],"tags":{"man_made":"survey_point"},"name":"Survey Point"},"man_made/tower":{"icon":"poi-tower","fields":["tower/type","tower/construction","height"],"geometry":["point","area"],"tags":{"man_made":"tower"},"name":"Tower"},"man_made/wastewater_plant":{"icon":"water","fields":["name","operator","address"],"geometry":["point","area"],"terms":["sewage*","water treatment plant","reclamation plant"],"tags":{"man_made":"wastewater_plant"},"name":"Wastewater Plant"},"man_made/water_tower":{"icon":"water","fields":["operator"],"geometry":["point","area"],"tags":{"man_made":"water_tower"},"name":"Water Tower"},"man_made/water_well":{"icon":"water","fields":["operator"],"geometry":["point","area"],"tags":{"man_made":"water_well"},"name":"Water Well"},"man_made/water_works":{"icon":"water","fields":["name","operator","address"],"geometry":["point","area"],"tags":{"man_made":"water_works"},"name":"Water Works"},"man_made/watermill":{"icon":"buddhism","fields":["building_area"],"geometry":["point","area"],"terms":["water","wheel","mill"],"tags":{"man_made":"watermill"},"name":"Watermill"},"man_made/windmill":{"icon":"poi-windmill","fields":["building_area"],"geometry":["point","area"],"terms":["wind","wheel","mill"],"tags":{"man_made":"windmill"},"name":"Windmill"},"man_made/works":{"icon":"industry","fields":["name","operator","address","building_area","product"],"geometry":["point","area"],"terms":["assembly","build","brewery","car","plant","plastic","processing","manufacture","refinery"],"tags":{"man_made":"works"},"name":"Factory"},"manhole":{"icon":"circle-stroked","fields":["manhole","operator","label","ref"],"geometry":["point","vertex"],"tags":{"manhole":"*"},"terms":["cover","hole","sewer","sewage","telecom"],"name":"Manhole"},"manhole/drain":{"icon":"water","fields":["operator","ref"],"geometry":["point","vertex"],"tags":{"manhole":"drain"},"terms":["cover","drain","hole","rain","sewer","sewage","storm"],"name":"Storm Drain"},"manhole/telecom":{"icon":"circle-stroked","fields":["operator","ref"],"geometry":["point","vertex"],"tags":{"manhole":"telecom"},"terms":["cover","phone","hole","telecom","telephone","bt"],"name":"Telecom Manhole"},"natural":{"icon":"natural","fields":["name","natural"],"geometry":["point","vertex","area"],"tags":{"natural":"*"},"name":"Natural"},"natural/bare_rock":{"geometry":["area"],"tags":{"natural":"bare_rock"},"terms":["rock"],"name":"Bare Rock"},"natural/bay":{"icon":"poi-beach","geometry":["point","area"],"fields":["name"],"tags":{"natural":"bay"},"terms":[],"name":"Bay"},"natural/beach":{"icon":"poi-beach","fields":["surface"],"geometry":["point","area"],"tags":{"natural":"beach"},"terms":["shore"],"name":"Beach"},"natural/cave_entrance":{"icon":"triangle","geometry":["point","area"],"fields":["fee","access_simple","direction"],"tags":{"natural":"cave_entrance"},"terms":["cavern","hollow","grotto","shelter","cavity"],"name":"Cave Entrance"},"natural/cliff":{"icon":"triangle","geometry":["point","vertex","line","area"],"tags":{"natural":"cliff"},"terms":["escarpment"],"name":"Cliff"},"natural/coastline":{"geometry":["line"],"tags":{"natural":"coastline"},"terms":["shore"],"name":"Coastline"},"natural/fell":{"geometry":["area"],"tags":{"natural":"fell"},"terms":[],"name":"Fell"},"natural/glacier":{"geometry":["area"],"tags":{"natural":"glacier"},"terms":[],"name":"Glacier"},"natural/grassland":{"geometry":["area"],"tags":{"natural":"grassland"},"terms":["prairie","savanna"],"name":"Grassland"},"natural/heath":{"geometry":["area"],"tags":{"natural":"heath"},"terms":[],"name":"Heath"},"natural/mud":{"geometry":["area"],"tags":{"natural":"mud"},"terms":["wetland"],"name":"Mud"},"natural/peak":{"icon":"mountain","fields":["name","elevation"],"geometry":["point","vertex"],"tags":{"natural":"peak"},"terms":["acme","aiguille","alp","climax","crest","crown","hill","mount","mountain","pinnacle","summit","tip","top"],"name":"Peak"},"natural/ridge":{"geometry":["line"],"tags":{"natural":"ridge"},"terms":["crest"],"name":"Ridge"},"natural/saddle":{"icon":"triangle-stroked","fields":["elevation"],"geometry":["point","vertex"],"tags":{"natural":"saddle"},"terms":["pass","mountain pass","top"],"name":"Saddle"},"natural/sand":{"geometry":["area"],"tags":{"natural":"sand"},"terms":["desert"],"name":"Sand"},"natural/scree":{"geometry":["area"],"tags":{"natural":"scree"},"terms":["loose rocks"],"name":"Scree"},"natural/scrub":{"geometry":["area"],"tags":{"natural":"scrub"},"terms":["bush","shrubs"],"name":"Scrub"},"natural/spring":{"icon":"water","fields":["name","intermittent"],"geometry":["point","vertex"],"tags":{"natural":"spring"},"terms":[],"name":"Spring"},"natural/tree_row":{"icon":"park","fields":["leaf_type","leaf_cycle","denotation"],"geometry":["line"],"tags":{"natural":"tree_row"},"terms":[],"name":"Tree row"},"natural/tree":{"icon":"park","fields":["leaf_type_singular","leaf_cycle_singular","denotation"],"geometry":["point","vertex"],"tags":{"natural":"tree"},"terms":[],"name":"Tree"},"natural/volcano":{"icon":"volcano","fields":["name","elevation","volcano/status","volcano/type"],"geometry":["point","vertex"],"tags":{"natural":"volcano"},"terms":["mountain","crater"],"name":"Volcano"},"natural/water":{"icon":"water","fields":["water"],"geometry":["area"],"tags":{"natural":"water"},"name":"Water"},"natural/water/lake":{"icon":"water","fields":["name","intermittent"],"geometry":["area"],"tags":{"natural":"water","water":"lake"},"reference":{"key":"natural","value":"water"},"terms":["lakelet","loch","mere"],"name":"Lake"},"natural/water/pond":{"icon":"water","fields":["name","intermittent"],"geometry":["area"],"tags":{"natural":"water","water":"pond"},"reference":{"key":"natural","value":"water"},"terms":["lakelet","millpond","tarn","pool","mere"],"name":"Pond"},"natural/water/reservoir":{"icon":"water","fields":["name","intermittent"],"geometry":["area"],"tags":{"natural":"water","water":"reservoir"},"reference":{"key":"natural","value":"water"},"name":"Reservoir"},"natural/wetland":{"icon":"wetland","fields":["wetland"],"geometry":["point","area"],"tags":{"natural":"wetland"},"terms":["bog","marsh","reedbed","swamp","tidalflat"],"name":"Wetland"},"natural/wood":{"icon":"park-alt1","fields":["name","leaf_type","leaf_cycle"],"geometry":["point","area"],"tags":{"natural":"wood"},"terms":["tree"],"name":"Wood"},"noexit/yes":{"icon":"barrier","geometry":["vertex"],"terms":["no exit","road end","dead end"],"tags":{"noexit":"yes"},"reference":{"key":"noexit","value":"*"},"name":"No Exit"},"office":{"icon":"suitcase","fields":["name","office","address","building_area","opening_hours","smoking"],"geometry":["point","vertex","area"],"tags":{"office":"*"},"terms":[],"name":"Office"},"office/administrative":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"administrative"},"terms":[],"searchable":false,"name":"Administrative Office"},"office/physician":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"physician"},"searchable":false,"name":"Physician"},"office/travel_agent":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"travel_agent"},"reference":{"key":"shop","value":"travel_agency"},"terms":[],"name":"Travel Agency","searchable":false},"office/accountant":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"accountant"},"terms":[],"name":"Accountant Office"},"office/adoption_agency":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"adoption_agency"},"terms":[],"name":"Adoption Agency"},"office/advertising_agency":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"advertising_agency"},"terms":["ad","ad agency","advert agency","advertising","marketing"],"name":"Advertising Agency"},"office/architect":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"architect"},"terms":[],"name":"Architect Office"},"office/association":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"association"},"terms":["association","non-profit","nonprofit","organization","society"],"name":"Nonprofit Organization Office"},"office/charity":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"charity"},"terms":["charitable organization"],"name":"Charity Office"},"office/company":{"icon":"suitcase","fields":["name","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"tags":{"office":"company"},"terms":[],"name":"Corporate Office"},"office/coworking":{"icon":"suitcase","fields":["name","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["coworking","office"],"tags":{"office":"coworking"},"reference":{"key":"amenity","value":"coworking_space"},"name":"Coworking Space"},"office/educational_institution":{"icon":"school","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"educational_institution"},"terms":[],"name":"Educational Institution"},"office/employment_agency":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"employment_agency"},"terms":["job"],"name":"Employment Agency"},"office/energy_supplier":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"energy_supplier"},"terms":["electricity","energy company","energy utility","gas utility"],"name":"Energy Supplier Office"},"office/estate_agent":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"estate_agent"},"terms":[],"name":"Real Estate Office"},"office/financial":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"financial"},"terms":[],"name":"Financial Office"},"office/forestry":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"forestry"},"terms":["forest","ranger"],"name":"Forestry Office"},"office/foundation":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"foundation"},"terms":[],"name":"Foundation Office"},"office/government":{"icon":"town-hall","fields":["name","government","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"government"},"terms":[],"name":"Government Office"},"office/government/register_office":{"icon":"town-hall","fields":["name","address","building_area","opening_hours","operator"],"geometry":["point","area"],"terms":["clerk","marriage","death","birth","certificate"],"tags":{"office":"government","government":"register_office"},"reference":{"key":"government","value":"register_office"},"name":"Register Office"},"office/government/tax":{"icon":"town-hall","fields":["name","address","building_area","opening_hours","operator"],"geometry":["point","area"],"terms":["fiscal authorities","revenue office","tax office"],"tags":{"office":"government","government":"tax"},"reference":{"key":"government","value":"tax"},"name":"Tax and Revenue Office"},"office/guide":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"guide"},"terms":["dive guide","mountain guide","tour guide"],"name":"Tour Guide Office"},"office/insurance":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"insurance"},"terms":[],"name":"Insurance Office"},"office/it":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"it"},"terms":["computer","information","software","technology"],"name":"Information Technology Office"},"office/lawyer":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"lawyer"},"terms":[],"name":"Law Office"},"office/lawyer/notary":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"lawyer","lawyer":"notary"},"reference":{"key":"office","value":"notary"},"searchable":false,"name":"Notary Office"},"office/moving_company":{"icon":"warehouse","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"moving_company"},"terms":["relocation"],"name":"Moving Company Office"},"office/newspaper":{"icon":"library","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"newspaper"},"terms":[],"name":"Newspaper Office"},"office/ngo":{"icon":"suitcase","fields":["name","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"tags":{"office":"ngo"},"terms":["ngo","non government","non-government","organization","organisation"],"name":"NGO Office"},"office/notary":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"notary"},"terms":["clerk","deeds","estate","signature","wills"],"name":"Notary Office"},"office/political_party":{"icon":"town-hall","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"political_party"},"terms":[],"name":"Political Party"},"office/private_investigator":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"private_investigator"},"terms":["PI","private eye","private detective"],"name":"Private Investigator Office"},"office/quango":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"quango"},"terms":["ngo","non government","non-government","organization","organisation","quasi autonomous","quasi-autonomous"],"name":"Quasi-NGO Office"},"office/research":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"research"},"terms":[],"name":"Research Office"},"office/surveyor":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"surveyor"},"terms":[],"name":"Surveyor Office"},"office/tax_advisor":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"tax_advisor"},"terms":["tax","tax consultant"],"name":"Tax Advisor Office"},"office/telecommunication":{"icon":"telephone","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"telecommunication"},"terms":["communication","internet","phone","voice"],"name":"Telecom Office"},"office/therapist":{"icon":"suitcase","fields":["name","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"office":"therapist"},"terms":["therapy"],"name":"Therapist Office"},"office/water_utility":{"icon":"suitcase","fields":["name","address","building_area","opening_hours","operator"],"geometry":["point","area"],"tags":{"office":"water_utility"},"terms":["water board","utility"],"name":"Water Utility Office"},"piste":{"icon":"skiing","fields":["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],"geometry":["point","line","area"],"terms":["ski","sled","sleigh","snowboard","nordic","downhill","snowmobile"],"tags":{"piste:type":"*"},"name":"Piste/Ski Trail"},"place/farm":{"icon":"farm","geometry":["point","area"],"fields":["name"],"tags":{"place":"farm"},"name":"Farm","searchable":false},"place/city":{"icon":"city","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"city"},"name":"City"},"place/hamlet":{"icon":"triangle-stroked","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"hamlet"},"name":"Hamlet"},"place/island":{"icon":"mountain","geometry":["point","area"],"fields":["name"],"terms":["archipelago","atoll","bar","cay","isle","islet","key","reef"],"tags":{"place":"island"},"name":"Island"},"place/islet":{"icon":"mountain","geometry":["point","area"],"fields":["name"],"terms":["archipelago","atoll","bar","cay","isle","islet","key","reef"],"tags":{"place":"islet"},"name":"Islet"},"place/isolated_dwelling":{"icon":"home","geometry":["point","area"],"fields":["name"],"tags":{"place":"isolated_dwelling"},"name":"Isolated Dwelling"},"place/locality":{"icon":"triangle-stroked","geometry":["point","area"],"fields":["name"],"tags":{"place":"locality"},"name":"Locality"},"place/neighbourhood":{"icon":"triangle-stroked","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"neighbourhood"},"terms":["neighbourhood"],"name":"Neighborhood"},"place/plot":{"icon":"triangle-stroked","fields":["name"],"geometry":["point","area"],"tags":{"place":"plot"},"terms":["tract","land","lot","parcel"],"name":"Plot"},"place/quarter":{"icon":"triangle-stroked","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"quarter"},"terms":["boro","borough","quarter"],"name":"Sub-Borough / Quarter"},"place/square":{"geometry":["point","area"],"fields":["name"],"tags":{"place":"square"},"name":"Square"},"place/suburb":{"icon":"triangle-stroked","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"suburb"},"terms":["boro","borough","quarter"],"name":"Borough / Suburb"},"place/town":{"icon":"town","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"town"},"name":"Town"},"place/village":{"icon":"village","fields":["name","population"],"geometry":["point","area"],"tags":{"place":"village"},"name":"Village"},"playground/balance_beam":{"icon":"playground","geometry":["point","line"],"tags":{"playground":"balancebeam"},"name":"Play Balance Beam"},"playground/basket_spinner":{"icon":"playground","geometry":["point"],"terms":["basket rotator"],"tags":{"playground":"basketrotator"},"name":"Basket Spinner"},"playground/basket_swing":{"icon":"playground","geometry":["point"],"tags":{"playground":"basketswing"},"name":"Basket Swing"},"playground/climbing_frame":{"icon":"playground","geometry":["point","area"],"tags":{"playground":"climbingframe"},"name":"Climbing Frame"},"playground/cushion":{"icon":"playground","geometry":["point","area"],"tags":{"playground":"cushion"},"name":"Bouncy Cushion"},"playground/horizontal_bar":{"icon":"pitch","fields":["height"],"geometry":["point"],"terms":["high bar"],"tags":{"playground":"horizontal_bar"},"name":"Play Horizontal Bar"},"playground/rocker":{"icon":"playground","geometry":["point"],"tags":{"playground":"springy"},"name":"Spring Rider","terms":["spring rocker","springy rocker"]},"playground/roundabout":{"icon":"stadium","fields":["bench"],"geometry":["point","area"],"tags":{"playground":"roundabout"},"name":"Play Roundabout","terms":["merry-go-round"]},"playground/sandpit":{"icon":"playground","geometry":["point","area"],"tags":{"playground":"sandpit"},"name":"Sandpit"},"playground/seesaw":{"icon":"playground","geometry":["point"],"tags":{"playground":"seesaw"},"name":"Seesaw"},"playground/slide":{"icon":"playground","geometry":["point","line"],"tags":{"playground":"slide"},"name":"Slide"},"playground/structure":{"icon":"pitch","geometry":["point","area"],"tags":{"playground":"structure"},"name":"Play Structure"},"playground/swing":{"icon":"playground","fields":["playground/baby","wheelchair"],"geometry":["point"],"tags":{"playground":"swing"},"name":"Swing"},"playground/zipwire":{"icon":"playground","geometry":["point","line"],"tags":{"playground":"zipwire"},"name":"Zip Wire"},"point":{"fields":["name"],"geometry":["point"],"tags":{},"name":"Point","matchScore":0.1},"power/sub_station":{"icon":"poi-power","fields":["substation","operator","building","ref"],"geometry":["point","area"],"tags":{"power":"sub_station"},"reference":{"key":"power","value":"substation"},"name":"Substation","searchable":false},"power/generator":{"icon":"poi-power","fields":["operator","generator/source","generator/method","generator/type","generator/output/electricity","ref"],"geometry":["point","vertex","area"],"terms":["hydro","solar","turbine","wind"],"tags":{"power":"generator"},"name":"Power Generator"},"power/generator/source_nuclear":{"icon":"poi-nuclear","fields":["operator","generator/source","generator/method","generator/type","generator/output/electricity","ref"],"geometry":["point","vertex","area"],"terms":["fission","generator","nuclear","nuke","reactor"],"tags":{"power":"generator","generator:source":"nuclear","generator:method":"fission"},"reference":{"key":"generator:source","value":"nuclear"},"name":"Nuclear Reactor"},"power/generator/source_wind":{"icon":"poi-wind","fields":["operator","generator/source","generator/method","generator/type","generator/output/electricity","height","ref"],"geometry":["point","vertex","area"],"terms":["generator","turbine","windmill","wind"],"tags":{"power":"generator","generator:source":"wind","generator:method":"wind_turbine"},"reference":{"key":"generator:source","value":"wind"},"name":"Wind Turbine"},"power/line":{"icon":"power-line","fields":["name","operator","voltage","ref"],"geometry":["line"],"tags":{"power":"line"},"name":"Power Line"},"power/minor_line":{"icon":"power-line","fields":["name","operator","voltage","ref"],"geometry":["line"],"tags":{"power":"minor_line"},"name":"Minor Power Line"},"power/plant":{"icon":"industry","fields":["name","operator","address","plant/output/electricity","start_date"],"geometry":["area"],"tags":{"power":"plant"},"addTags":{"power":"plant","landuse":"industrial"},"removeTags":{"power":"plant","landuse":"industrial"},"terms":["coal","gas","generat*","hydro","nuclear","power","station"],"name":"Power Station Grounds"},"power/pole":{"fields":["ref"],"geometry":["vertex"],"tags":{"power":"pole"},"name":"Power Pole"},"power/substation":{"icon":"poi-power","fields":["substation","operator","building","ref"],"geometry":["point","area"],"tags":{"power":"substation"},"name":"Substation"},"power/switch":{"icon":"poi-power","fields":["switch","operator","location","cables","voltage","ref"],"geometry":["point","vertex","area"],"tags":{"power":"switch"},"name":"Power Switch"},"power/tower":{"fields":["ref"],"geometry":["vertex"],"tags":{"power":"tower"},"name":"High-Voltage Tower"},"power/transformer":{"icon":"poi-power","fields":["transformer","operator","location","rating","devices","phases","frequency","voltage/primary","voltage/secondary","voltage/tertiary","windings","windings/configuration","ref"],"geometry":["point","vertex","area"],"tags":{"power":"transformer"},"name":"Transformer"},"public_transport/linear_platform_aerialway":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","aerialway":"yes"},"reference":{"key":"public_transport","value":"platform"},"terms":["aerialway","cable car","platform","public transit","public transportation","transit","transportation"],"name":"Aerialway Stop / Platform"},"public_transport/linear_platform_bus":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","bus":"yes"},"addTags":{"public_transport":"platform","bus":"yes","highway":"bus_stop"},"removeTags":{"public_transport":"platform","bus":"yes","highway":"bus_stop"},"reference":{"key":"public_transport","value":"platform"},"terms":["bus","platform","public transit","public transportation","transit","transportation"],"name":"Bus Stop / Platform"},"public_transport/linear_platform_ferry":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","ferry":"yes"},"reference":{"key":"public_transport","value":"platform"},"terms":["boat","dock","ferry","pier","platform","public transit","public transportation","transit","transportation"],"name":"Ferry Stop / Platform"},"public_transport/linear_platform_light_rail":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","light_rail":"yes"},"addTags":{"public_transport":"platform","light_rail":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","light_rail":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["electric","light rail","platform","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],"name":"Light Rail Stop / Platform"},"public_transport/linear_platform_monorail":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","monorail":"yes"},"addTags":{"public_transport":"platform","monorail":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","monorail":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["monorail","platform","public transit","public transportation","rail","transit","transportation"],"name":"Monorail Stop / Platform"},"public_transport/linear_platform_subway":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","subway":"yes"},"addTags":{"public_transport":"platform","subway":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","subway":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["metro","platform","public transit","public transportation","rail","subway","track","transit","transportation","underground"],"name":"Subway Stop / Platform"},"public_transport/linear_platform_train":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","train":"yes"},"addTags":{"public_transport":"platform","train":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","train":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["platform","public transit","public transportation","rail","track","train","transit","transportation"],"name":"Train Stop / Platform"},"public_transport/linear_platform_tram":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","tram":"yes"},"addTags":{"public_transport":"platform","tram":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","tram":"yes","railway":"platform"},"reference":{"key":"public_transport","value":"platform"},"terms":["electric","light rail","platform","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],"name":"Tram Stop / Platform"},"public_transport/linear_platform_trolleybus":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform","trolleybus":"yes"},"addTags":{"public_transport":"platform","trolleybus":"yes","highway":"bus_stop"},"removeTags":{"public_transport":"platform","trolleybus":"yes","highway":"bus_stop"},"reference":{"key":"public_transport","value":"platform"},"terms":["bus","electric","platform","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],"name":"Trolleybus Stop / Platform"},"public_transport/linear_platform":{"icon":"highway-footway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["line"],"tags":{"public_transport":"platform"},"terms":["platform","public transit","public transportation","transit","transportation"],"name":"Transit Stop / Platform","matchScore":0.2},"public_transport/platform_aerialway":{"icon":"aerialway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","aerialway":"yes"},"reference":{"key":"public_transport","value":"platform"},"terms":["aerialway","cable car","platform","public transit","public transportation","transit","transportation"],"name":"Aerialway Stop / Platform"},"public_transport/platform_bus":{"icon":"bus","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","bus":"yes"},"addTags":{"public_transport":"platform","bus":"yes","highway":"bus_stop"},"removeTags":{"public_transport":"platform","bus":"yes","highway":"bus_stop"},"reference":{"key":"public_transport","value":"platform"},"terms":["bus","platform","public transit","public transportation","transit","transportation"],"name":"Bus Stop / Platform"},"public_transport/platform_ferry":{"icon":"ferry","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","ferry":"yes"},"reference":{"key":"public_transport","value":"platform"},"terms":["boat","dock","ferry","pier","platform","public transit","public transportation","transit","transportation"],"name":"Ferry Stop / Platform"},"public_transport/platform_light_rail":{"icon":"poi-light-rail","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","light_rail":"yes"},"addTags":{"public_transport":"platform","light_rail":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","light_rail":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["electric","light rail","platform","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],"name":"Light Rail Stop / Platform"},"public_transport/platform_monorail":{"icon":"poi-monorail","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","monorail":"yes"},"addTags":{"public_transport":"platform","monorail":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","monorail":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["monorail","platform","public transit","public transportation","rail","transit","transportation"],"name":"Monorail Stop / Platform"},"public_transport/platform_subway":{"icon":"poi-subway","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","subway":"yes"},"addTags":{"public_transport":"platform","subway":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","subway":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["metro","platform","public transit","public transportation","rail","subway","track","transit","transportation","underground"],"name":"Subway Stop / Platform"},"public_transport/platform_train":{"icon":"rail","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","train":"yes"},"addTags":{"public_transport":"platform","train":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","train":"yes","railway":"platform"},"reference":{"key":"railway","value":"platform"},"terms":["platform","public transit","public transportation","rail","track","train","transit","transportation"],"name":"Train Stop / Platform"},"public_transport/platform_tram":{"icon":"poi-tram","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","tram":"yes"},"addTags":{"public_transport":"platform","tram":"yes","railway":"platform"},"removeTags":{"public_transport":"platform","tram":"yes","railway":"platform"},"reference":{"key":"public_transport","value":"platform"},"terms":["electric","light rail","platform","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],"name":"Tram Stop / Platform"},"public_transport/platform_trolleybus":{"icon":"poi-trolleybus","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform","trolleybus":"yes"},"addTags":{"public_transport":"platform","trolleybus":"yes","highway":"bus_stop"},"removeTags":{"public_transport":"platform","trolleybus":"yes","highway":"bus_stop"},"reference":{"key":"public_transport","value":"platform"},"terms":["bus","electric","platform","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],"name":"Trolleybus Stop / Platform"},"public_transport/platform":{"icon":"bus","fields":["name","ref_platform","network","operator","surface","lit","bench","shelter"],"geometry":["point","area"],"tags":{"public_transport":"platform"},"terms":["platform","public transit","public transportation","transit","transportation"],"name":"Transit Stop / Platform","matchScore":0.2},"public_transport/station_aerialway":{"icon":"aerialway","fields":["name","network","operator","aerialway/access","aerialway/summer/access","elevation","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","aerialway":"yes"},"reference":{"key":"aerialway","value":"station"},"terms":["aerialway","cable car","public transit","public transportation","station","terminal","transit","transportation"],"name":"Aerialway Station"},"public_transport/station_bus":{"icon":"bus","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","bus":"yes"},"addTags":{"public_transport":"station","bus":"yes","amenity":"bus_station"},"removeTags":{"public_transport":"station","bus":"yes","amenity":"bus_station"},"reference":{"key":"amenity","value":"bus_station"},"terms":["bus","public transit","public transportation","station","terminal","transit","transportation"],"name":"Bus Station / Terminal"},"public_transport/station_ferry":{"icon":"ferry","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","ferry":"yes"},"addTags":{"public_transport":"station","ferry":"yes","amenity":"ferry_terminal"},"removeTags":{"public_transport":"station","ferry":"yes","amenity":"ferry_terminal"},"reference":{"key":"amenity","value":"ferry_terminal"},"terms":["boat","dock","ferry","pier","public transit","public transportation","station","terminal","transit","transportation"],"name":"Ferry Station / Terminal"},"public_transport/station_light_rail":{"icon":"poi-light-rail","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","light_rail":"yes"},"addTags":{"public_transport":"station","light_rail":"yes","railway":"station","station":"light_rail"},"removeTags":{"public_transport":"station","light_rail":"yes","railway":"station","station":"light_rail"},"reference":{"key":"station","value":"light_rail"},"terms":["electric","light rail","public transit","public transportation","rail","station","terminal","track","tram","trolley","transit","transportation"],"name":"Light Rail Station"},"public_transport/station_monorail":{"icon":"poi-monorail","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","monorail":"yes"},"addTags":{"public_transport":"station","monorail":"yes","railway":"station"},"removeTags":{"public_transport":"station","monorail":"yes","railway":"station"},"reference":{"key":"railway","value":"station"},"terms":["monorail","public transit","public transportation","rail","station","terminal","transit","transportation"],"name":"Monorail Station"},"public_transport/station_subway":{"icon":"poi-subway","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","subway":"yes"},"addTags":{"public_transport":"station","subway":"yes","railway":"station","station":"subway"},"removeTags":{"public_transport":"station","subway":"yes","railway":"station","station":"subway"},"reference":{"key":"station","value":"subway"},"terms":["metro","public transit","public transportation","rail","station","subway","terminal","track","transit","transportation","underground"],"name":"Subway Station"},"public_transport/station_train_halt":{"icon":"rail","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","train":"yes","railway":"halt"},"reference":{"key":"railway","value":"halt"},"terms":["halt","public transit","public transportation","rail","station","track","train","transit","transportation","whistle stop"],"name":"Train Station (Halt / Request)"},"public_transport/station_train":{"icon":"rail","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","train":"yes"},"addTags":{"public_transport":"station","train":"yes","railway":"station"},"removeTags":{"public_transport":"station","train":"yes","railway":"station"},"reference":{"key":"railway","value":"station"},"terms":["public transit","public transportation","rail","station","terminal","track","train","transit","transportation"],"name":"Train Station"},"public_transport/station_tram":{"icon":"poi-tram","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","tram":"yes"},"reference":{"key":"public_transport","value":"station"},"terms":["electric","light rail","public transit","public transportation","rail","station","streetcar","terminal","track","tram","trolley","transit","transportation"],"name":"Tram Station"},"public_transport/station_trolleybus":{"icon":"poi-trolleybus","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station","trolleybus":"yes"},"addTags":{"public_transport":"station","trolleybus":"yes","amenity":"bus_station"},"removeTags":{"public_transport":"station","trolleybus":"yes","amenity":"bus_station"},"reference":{"key":"amenity","value":"bus_station"},"terms":["bus","electric","public transit","public transportation","station","streetcar","terminal","trackless","tram","trolley","transit","transportation"],"name":"Trolleybus Station / Terminal"},"public_transport/station":{"icon":"rail","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"public_transport":"station"},"terms":["public transit","public transportation","station","terminal","transit","transportation"],"name":"Transit Station","matchScore":0.2},"public_transport/stop_area":{"icon":"bus","fields":["name","ref","network","operator"],"geometry":["relation"],"tags":{"type":"public_transport","public_transport":"stop_area"},"addTags":{"type":"public_transport","public_transport":"stop_area","public_transport:version":"2"},"removeTags":{"type":"public_transport","public_transport":"stop_area","public_transport:version":"2"},"reference":{"key":"public_transport","value":"stop_area"},"name":"Transit Stop Area"},"public_transport/stop_position_aerialway":{"icon":"aerialway","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","aerialway":"yes"},"reference":{"key":"public_transport","value":"stop_position"},"terms":["aerialway","cable car","public transit","public transportation","transit","transportation"],"name":"Aerialway Stopping Location"},"public_transport/stop_position_bus":{"icon":"bus","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","bus":"yes"},"reference":{"key":"public_transport","value":"stop_position"},"terms":["bus","public transit","public transportation","transit","transportation"],"name":"Bus Stopping Location"},"public_transport/stop_position_ferry":{"icon":"ferry","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","ferry":"yes"},"reference":{"key":"public_transport","value":"stop_position"},"terms":["boat","dock","ferry","pier","public transit","public transportation","transit","transportation"],"name":"Ferry Stopping Location"},"public_transport/stop_position_light_rail":{"icon":"poi-light-rail","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","light_rail":"yes"},"addTags":{"public_transport":"stop_position","light_rail":"yes","railway":"stop"},"removeTags":{"public_transport":"stop_position","light_rail":"yes","railway":"stop"},"reference":{"key":"railway","value":"stop"},"terms":["electric","light rail","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],"name":"Light Rail Stopping Location"},"public_transport/stop_position_monorail":{"icon":"poi-monorail","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","monorail":"yes"},"addTags":{"public_transport":"stop_position","monorail":"yes","railway":"stop"},"removeTags":{"public_transport":"stop_position","monorail":"yes","railway":"stop"},"reference":{"key":"railway","value":"stop"},"terms":["monorail","public transit","public transportation","rail","transit","transportation"],"name":"Monorail Stopping Location"},"public_transport/stop_position_subway":{"icon":"poi-subway","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","subway":"yes"},"addTags":{"public_transport":"stop_position","subway":"yes","railway":"stop"},"removeTags":{"public_transport":"stop_position","subway":"yes","railway":"stop"},"reference":{"key":"railway","value":"stop"},"terms":["metro","public transit","public transportation","rail","subway","track","transit","transportation","underground"],"name":"Subway Stopping Location"},"public_transport/stop_position_train":{"icon":"rail","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","train":"yes"},"addTags":{"public_transport":"stop_position","train":"yes","railway":"stop"},"removeTags":{"public_transport":"stop_position","train":"yes","railway":"stop"},"reference":{"key":"railway","value":"stop"},"terms":["public transit","public transportation","rail","track","train","transit","transportation"],"name":"Train Stopping Location"},"public_transport/stop_position_tram":{"icon":"poi-tram","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","tram":"yes"},"addTags":{"public_transport":"stop_position","tram":"yes","railway":"tram_stop"},"removeTags":{"public_transport":"stop_position","tram":"yes","railway":"tram_stop"},"reference":{"key":"public_transport","value":"stop_position"},"terms":["electric","light rail","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],"name":"Tram Stopping Location"},"public_transport/stop_position_trolleybus":{"icon":"poi-trolleybus","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position","trolleybus":"yes"},"reference":{"key":"public_transport","value":"stop_position"},"terms":["bus","electric","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],"name":"Trolleybus Stopping Location"},"public_transport/stop_position":{"icon":"bus","fields":["name","ref_stop_position","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position"},"terms":["public transit","public transportation","transit","transportation"],"name":"Transit Stopping Location","matchScore":0.2},"railway/halt":{"icon":"rail","geometry":["point","vertex"],"tags":{"railway":"halt"},"terms":["break","interrupt","rest","wait","interruption"],"name":"Train Station (Halt / Request)","searchable":false},"railway/platform":{"icon":"highway-footway","fields":["name","ref_platform","surface","lit","shelter"],"geometry":["line","area"],"tags":{"railway":"platform"},"name":"Train Stop / Platform","searchable":false},"railway/station":{"icon":"rail","fields":["name","network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"tags":{"railway":"station"},"terms":["train station","station"],"name":"Train Station","searchable":false},"railway/tram_stop":{"icon":"poi-tram","fields":["name","network","operator"],"geometry":["vertex"],"tags":{"railway":"tram_stop"},"terms":["light rail","streetcar","tram","trolley"],"name":"Tram Stopping Position","searchable":false},"railway/abandoned":{"icon":"railway-abandoned","fields":["name","structure","service_rail","usage_rail"],"geometry":["line"],"tags":{"railway":"abandoned"},"terms":[],"name":"Abandoned Railway"},"railway/buffer_stop":{"icon":"poi-buffer-stop","geometry":["vertex"],"tags":{"railway":"buffer_stop"},"terms":["stop","halt","buffer"],"name":"Buffer Stop"},"railway/crossing":{"icon":"cross","geometry":["vertex"],"tags":{"railway":"crossing"},"terms":["crossing","pedestrian crossing","railroad crossing","level crossing","grade crossing","path through railroad","train crossing"],"name":"Railway Crossing (Path)"},"railway/derail":{"icon":"roadblock","geometry":["vertex"],"tags":{"railway":"derail"},"terms":["derailer"],"name":"Railway Derailer"},"railway/disused":{"icon":"railway-disused","fields":["structure","service_rail","usage_rail"],"geometry":["line"],"tags":{"railway":"disused"},"terms":[],"name":"Disused Railway"},"railway/funicular":{"icon":"railway-rail","geometry":["line"],"terms":["venicular","cliff railway","cable car","cable railway","funicular railway"],"fields":["structure","gauge","service_rail"],"tags":{"railway":"funicular"},"name":"Funicular"},"railway/level_crossing":{"icon":"cross","geometry":["vertex"],"tags":{"railway":"level_crossing"},"terms":["crossing","railroad crossing","level crossing","grade crossing","road through railroad","train crossing"],"name":"Railway Crossing (Road)"},"railway/light_rail":{"icon":"railway-light-rail","fields":["name","structure","gauge","electrified","service_rail","usage_rail","voltage","frequency"],"geometry":["line"],"tags":{"railway":"light_rail"},"terms":["light rail","streetcar","trolley"],"name":"Light Rail"},"railway/milestone":{"icon":"poi-milestone","geometry":["point","vertex"],"fields":["railway/position"],"tags":{"railway":"milestone"},"terms":["milestone","marker"],"name":"Railway Milestone"},"railway/miniature":{"icon":"railway-rail","geometry":["line"],"tags":{"railway":"miniature"},"fields":["name","structure","gauge","electrified","service_rail"],"terms":["rideable miniature railway","narrow gauge railway","minimum gauge railway"],"name":"Miniature Railway"},"railway/monorail":{"icon":"railway-monorail","fields":["name","structure","electrified","service_rail","usage_rail","voltage","frequency"],"geometry":["line"],"tags":{"railway":"monorail"},"terms":[],"name":"Monorail"},"railway/narrow_gauge":{"icon":"railway-rail","fields":["name","structure","gauge","electrified","service_rail","usage_rail","voltage","frequency"],"geometry":["line"],"tags":{"railway":"narrow_gauge"},"terms":["narrow gauge railway","narrow gauge railroad"],"name":"Narrow Gauge Rail"},"railway/rail":{"icon":"railway-rail","fields":["name","structure","gauge","electrified","maxspeed","service_rail","usage_rail","voltage","frequency"],"geometry":["line"],"tags":{"railway":"rail"},"terms":[],"name":"Rail"},"railway/signal":{"icon":"poi-railway-signals","geometry":["point","vertex"],"fields":["railway/position","railway/signal/direction","ref"],"tags":{"railway":"signal"},"terms":["signal","lights"],"name":"Railway Signal"},"railway/subway_entrance":{"icon":"entrance","geometry":["point","vertex"],"fields":["name"],"tags":{"railway":"subway_entrance"},"terms":["metro","transit"],"name":"Subway Entrance"},"railway/subway":{"icon":"railway-subway","fields":["name","structure","gauge","electrified","service_rail","usage_rail","voltage","frequency"],"geometry":["line"],"tags":{"railway":"subway"},"terms":["metro","transit"],"name":"Subway"},"railway/switch":{"icon":"poi-junction","geometry":["vertex"],"tags":{"railway":"switch"},"terms":["switch","points"],"name":"Railway Switch"},"railway/train_wash":{"icon":"rail","geometry":["point","vertex","area"],"fields":["operator","building_area"],"tags":{"railway":"wash"},"terms":["wash","clean"],"name":"Train Wash"},"railway/tram":{"icon":"railway-light-rail","fields":["name","structure","gauge","electrified","service_rail","usage_rail","voltage","frequency"],"geometry":["line"],"tags":{"railway":"tram"},"terms":["light rail","streetcar","tram","trolley"],"name":"Tram"},"relation":{"icon":"relation","fields":["name","relation"],"geometry":["relation"],"tags":{},"name":"Relation"},"route/ferry":{"icon":"ferry-line","geometry":["line"],"fields":["name","operator","duration","access"],"tags":{"route":"ferry"},"name":"Ferry Route"},"shop":{"icon":"shop","fields":["name","shop","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"*"},"terms":[],"name":"Shop"},"shop/fishmonger":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"fishmonger"},"reference":{"key":"shop","value":"seafood"},"name":"Fishmonger","searchable":false},"shop/furnace":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["oven","stove"],"tags":{"shop":"furnace"},"name":"Furnace Store","searchable":false},"shop/vacant":{"icon":"shop","fields":["name","address","building_area"],"geometry":["point","area"],"tags":{"shop":"vacant"},"name":"Vacant Shop","searchable":false},"shop/agrarian":{"icon":"shop","fields":["name","operator","agrarian","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["agricultural inputs","agricultural machines","seeds","pesticides","fertilizer","agricultural tools"],"tags":{"shop":"agrarian"},"name":"Farm Supply Shop"},"shop/alcohol":{"icon":"alcohol-shop","fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"geometry":["point","area"],"terms":["alcohol","beer","booze","wine"],"tags":{"shop":"alcohol"},"name":"Liquor Store"},"shop/anime":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"anime"},"terms":["manga","japan","cosplay","figurine","dakimakura"],"name":"Anime Shop"},"shop/antiques":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"antiques"},"name":"Antiques Shop"},"shop/appliance":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["air conditioner","appliance","dishwasher","dryer","freezer","fridge","grill","kitchen","oven","refrigerator","stove","washer","washing machine"],"tags":{"shop":"appliance"},"name":"Appliance Store"},"shop/art":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["art*","exhibit*","gallery"],"tags":{"shop":"art"},"name":"Art Store"},"shop/baby_goods":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"baby_goods"},"name":"Baby Goods Store"},"shop/bag":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["handbag","purse"],"tags":{"shop":"bag"},"name":"Bag/Luggage Store"},"shop/bakery":{"icon":"bakery","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"bakery"},"name":"Bakery"},"shop/bathroom_furnishing":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"bathroom_furnishing"},"name":"Bathroom Furnishing Store"},"shop/beauty":{"icon":"shop","fields":["name","operator","address","building_area","beauty","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["spa","salon","tanning"],"tags":{"shop":"beauty"},"name":"Beauty Shop"},"shop/beauty/nails":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["manicure","pedicure"],"tags":{"shop":"beauty","beauty":"nails"},"reference":{"key":"shop","value":"beauty"},"name":"Nail Salon"},"shop/beauty/tanning":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"beauty","beauty":"tanning"},"reference":{"key":"leisure","value":"tanning_salon"},"name":"Tanning Salon"},"shop/bed":{"icon":"lodging","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"bed"},"name":"Bedding/Mattress Store"},"shop/beverages":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"beverages"},"name":"Beverage Store"},"shop/bicycle":{"icon":"bicycle","fields":["name","operator","address","building_area","service/bicycle","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["bike","repair"],"tags":{"shop":"bicycle"},"name":"Bicycle Shop"},"shop/bookmaker":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["betting"],"tags":{"shop":"bookmaker"},"name":"Bookmaker"},"shop/books":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"shop":"books"},"name":"Book Store"},"shop/boutique":{"icon":"shop","fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"boutique"},"name":"Boutique"},"shop/butcher":{"icon":"slaughterhouse","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["meat"],"tags":{"shop":"butcher"},"name":"Butcher"},"shop/candles":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"candles"},"name":"Candle Shop"},"shop/car_parts":{"icon":"car","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["auto"],"tags":{"shop":"car_parts"},"name":"Car Parts Store"},"shop/car_repair":{"icon":"car","fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["auto","garage","service"],"tags":{"shop":"car_repair"},"name":"Car Repair Shop"},"shop/car":{"icon":"car","fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["auto"],"tags":{"shop":"car"},"name":"Car Dealership"},"shop/carpet":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["rug"],"tags":{"shop":"carpet"},"name":"Carpet Store"},"shop/charity":{"icon":"shop","fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["thrift","op shop","nonprofit"],"tags":{"shop":"charity"},"name":"Charity Store"},"shop/cheese":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"cheese"},"name":"Cheese Store"},"shop/chemist":{"icon":"grocery","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"chemist"},"terms":["med*","drug*","gift"],"name":"Drugstore"},"shop/chocolate":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"chocolate"},"name":"Chocolate Store"},"shop/clothes":{"icon":"clothing-store","fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"clothes"},"name":"Clothing Store"},"shop/coffee":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"coffee"},"name":"Coffee Store"},"shop/computer":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"computer"},"name":"Computer Store"},"shop/confectionery":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["sweet"],"tags":{"shop":"confectionery"},"name":"Candy Store"},"shop/convenience":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"convenience"},"name":"Convenience Store"},"shop/copyshop":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"copyshop"},"name":"Copy Store"},"shop/cosmetics":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"cosmetics"},"name":"Cosmetics Store"},"shop/craft":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"craft"},"terms":["art*","paint*","frame"],"name":"Arts and Crafts Store"},"shop/curtain":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["drape*","window"],"tags":{"shop":"curtain"},"name":"Curtain Store"},"shop/dairy":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["milk","egg","cheese"],"tags":{"shop":"dairy"},"name":"Dairy Store"},"shop/deli":{"icon":"restaurant","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["lunch","meat","sandwich"],"tags":{"shop":"deli"},"name":"Deli"},"shop/department_store":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"department_store"},"name":"Department Store"},"shop/doityourself":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"doityourself"},"name":"DIY Store"},"shop/dry_cleaning":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"dry_cleaning"},"name":"Dry Cleaner"},"shop/e-cigarette":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"e-cigarette"},"terms":["electronic","vapor"],"name":"E-Cigarette Shop"},"shop/electronics":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["appliance","audio","blueray","camera","computer","dvd","home theater","radio","speaker","tv","video"],"tags":{"shop":"electronics"},"name":"Electronics Store"},"shop/erotic":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["sex","porn"],"tags":{"shop":"erotic"},"name":"Erotic Store"},"shop/fabric":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["sew"],"tags":{"shop":"fabric"},"name":"Fabric Store"},"shop/farm":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["farm shop","farm stand"],"tags":{"shop":"farm"},"name":"Produce Stand"},"shop/fashion":{"icon":"shop","fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"fashion"},"name":"Fashion Store"},"shop/florist":{"icon":"florist","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["flower"],"tags":{"shop":"florist"},"name":"Florist"},"shop/frame":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"frame"},"terms":["art*","paint*","photo*","frame"],"name":"Framing Shop"},"shop/funeral_directors":{"icon":"cemetery","fields":["name","operator","address","building_area","religion","denomination"],"geometry":["point","area"],"terms":["undertaker","memorial home"],"tags":{"shop":"funeral_directors"},"name":"Funeral Home"},"shop/furniture":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["chair","sofa","table"],"tags":{"shop":"furniture"},"name":"Furniture Store"},"shop/garden_centre":{"icon":"garden-center","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["landscape","mulch","shrub","tree"],"tags":{"shop":"garden_centre"},"name":"Garden Center"},"shop/gas":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["cng","lpg","natural gas","propane","refill","tank"],"tags":{"shop":"gas"},"name":"Bottled Gas Shop"},"shop/gift":{"icon":"gift","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["souvenir"],"tags":{"shop":"gift"},"name":"Gift Shop"},"shop/greengrocer":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["fruit","vegetable"],"tags":{"shop":"greengrocer"},"name":"Greengrocer"},"shop/hairdresser":{"icon":"hairdresser","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["barber"],"tags":{"shop":"hairdresser"},"name":"Hairdresser"},"shop/hardware":{"icon":"poi-tool","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"hardware"},"name":"Hardware Store"},"shop/health_food":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["wholefood","vitamins","vegetarian","vegan"],"tags":{"shop":"health_food "},"name":"Health Food Shop"},"shop/hearing_aids":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"hearing_aids"},"name":"Hearing Aids Store"},"shop/herbalist":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"herbalist"},"name":"Herbalist"},"shop/hifi":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["stereo","video"],"tags":{"shop":"hifi"},"name":"Hifi Store"},"shop/houseware":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["home","household"],"tags":{"shop":"houseware"},"name":"Houseware Store"},"shop/interior_decoration":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"interior_decoration"},"name":"Interior Decoration Store"},"shop/jewelry":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["diamond","gem","ring"],"tags":{"shop":"jewelry"},"name":"Jeweler"},"shop/kiosk":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"kiosk"},"name":"Kiosk"},"shop/kitchen":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"kitchen"},"name":"Kitchen Design Store"},"shop/laundry":{"icon":"laundry","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"laundry"},"name":"Laundry"},"shop/leather":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"leather"},"name":"Leather Store"},"shop/locksmith":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["key","lockpick"],"tags":{"shop":"locksmith"},"name":"Locksmith"},"shop/lottery":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"lottery"},"name":"Lottery Shop"},"shop/mall":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["shopping"],"tags":{"shop":"mall"},"name":"Mall"},"shop/massage":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"massage"},"name":"Massage Shop"},"shop/medical_supply":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"medical_supply"},"name":"Medical Supply Store"},"shop/mobile_phone":{"icon":"mobile-phone","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"mobile_phone"},"name":"Mobile Phone Store"},"shop/money_lender":{"icon":"bank","fields":["name","operator","address","building_area","opening_hours","currency_multi"],"geometry":["point","area"],"tags":{"shop":"money_lender"},"name":"Money Lender"},"shop/motorcycle":{"icon":"scooter","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["bike"],"tags":{"shop":"motorcycle"},"name":"Motorcycle Dealership"},"shop/music":{"icon":"music","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["CD","vinyl"],"tags":{"shop":"music"},"name":"Music Store"},"shop/musical_instrument":{"icon":"music","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["guitar"],"tags":{"shop":"musical_instrument"},"name":"Musical Instrument Store"},"shop/newsagent":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"newsagent"},"name":"Newspaper/Magazine Shop"},"shop/nutrition_supplements":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"nutrition_supplements"},"name":"Nutrition Supplements Store"},"shop/optician":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["eye","glasses"],"tags":{"shop":"optician"},"name":"Optician"},"shop/organic":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"supermarket","organic":"only"},"name":"Organic Goods Store"},"shop/outdoor":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["camping","climbing","hiking"],"tags":{"shop":"outdoor"},"name":"Outdoors Store"},"shop/paint":{"icon":"water","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"paint"},"name":"Paint Store"},"shop/pastry":{"icon":"bakery","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"pastry"},"terms":["patisserie","cake shop","cakery"],"name":"Pastry Shop"},"shop/pawnbroker":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"pawnbroker"},"name":"Pawn Shop"},"shop/perfumery":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"perfumery"},"name":"Perfume Store"},"shop/pet_grooming":{"icon":"dog-park","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["dog"],"tags":{"shop":"pet_grooming"},"name":"Pet Grooming Store"},"shop/pet":{"icon":"dog-park","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["animal","cat","dog","fish","kitten","puppy","reptile"],"tags":{"shop":"pet"},"name":"Pet Store"},"shop/photo":{"icon":"attraction","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["camera","film"],"tags":{"shop":"photo"},"name":"Photography Store"},"shop/pyrotechnics":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"pyrotechnics"},"name":"Fireworks Store"},"shop/radiotechnics":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"radiotechnics"},"name":"Radio/Electronic Component Store"},"shop/religion":{"icon":"shop","fields":["name","operator","address","building_area","religion","denomination","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"religion"},"name":"Religious Store"},"shop/scuba_diving":{"icon":"swimming","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"scuba_diving"},"name":"Scuba Diving Shop"},"shop/seafood":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["fishmonger"],"tags":{"shop":"seafood"},"name":"Seafood Shop"},"shop/second_hand":{"icon":"shop","fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["secondhand","second hand","resale","thrift","used"],"tags":{"shop":"second_hand"},"name":"Consignment/Thrift Store"},"shop/shoes":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"shoes"},"name":"Shoe Store"},"shop/sports":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"sports"},"name":"Sporting Goods Store"},"shop/stationery":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["card","paper"],"tags":{"shop":"stationery"},"name":"Stationery Store"},"shop/storage_rental":{"icon":"shop","fields":["name","operator","address","building","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"storage_rental"},"name":"Storage Rental"},"shop/supermarket":{"icon":"grocery","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["grocery","store","shop"],"tags":{"shop":"supermarket"},"name":"Supermarket"},"shop/tailor":{"icon":"clothing-store","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["clothes","suit"],"tags":{"shop":"tailor"},"name":"Tailor"},"shop/tattoo":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"tattoo"},"name":"Tattoo Parlor"},"shop/tea":{"icon":"teahouse","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"tea"},"name":"Tea Store"},"shop/ticket":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"ticket"},"name":"Ticket Seller"},"shop/tiles":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"tiles"},"name":"Tile Shop"},"shop/tobacco":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"tobacco"},"name":"Tobacco Shop"},"shop/toys":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"toys"},"name":"Toy Store"},"shop/trade":{"icon":"shop","fields":["name","trade","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"trade"},"name":"Trade Shop"},"shop/travel_agency":{"icon":"suitcase","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"travel_agency"},"name":"Travel Agency"},"shop/tyres":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"tyres"},"name":"Tire Store"},"shop/vacuum_cleaner":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"vacuum_cleaner"},"name":"Vacuum Cleaner Store"},"shop/variety_store":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"variety_store"},"name":"Variety Store"},"shop/video_games":{"icon":"gaming","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"video_games"},"name":"Video Game Store"},"shop/video":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["DVD"],"tags":{"shop":"video"},"name":"Video Store"},"shop/watches":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"watches"},"name":"Watches Shop"},"shop/water_sports":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"water_sports"},"name":"Watersport/Swim Shop"},"shop/weapons":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["ammo","gun","knife","knives"],"tags":{"shop":"weapons"},"name":"Weapon Shop"},"shop/wholesale":{"icon":"warehouse","fields":["name","operator","wholesale","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"terms":["warehouse club","cash and carry"],"tags":{"shop":"wholesale"},"name":"Wholesale Store"},"shop/window_blind":{"icon":"shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"window_blind"},"name":"Window Blind Store"},"shop/wine":{"icon":"alcohol-shop","fields":["name","operator","address","building_area","opening_hours","payment_multi"],"geometry":["point","area"],"tags":{"shop":"wine"},"name":"Wine Shop"},"tourism":{"icon":"attraction","fields":["name","tourism"],"geometry":["point","vertex","area"],"tags":{"tourism":"*"},"name":"Tourism"},"tourism/alpine_hut":{"icon":"lodging","fields":["name","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["climbing hut"],"tags":{"tourism":"alpine_hut"},"name":"Alpine Hut"},"tourism/apartment":{"icon":"lodging","fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"apartment"},"name":"Guest Apartment / Condo"},"tourism/aquarium":{"icon":"aquarium","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["fish","sea","water"],"tags":{"tourism":"aquarium"},"name":"Aquarium"},"tourism/artwork":{"icon":"art-gallery","fields":["name","artwork_type","artist"],"geometry":["point","vertex","area"],"tags":{"tourism":"artwork"},"terms":["mural","sculpture","statue"],"name":"Artwork"},"tourism/attraction":{"icon":"star","fields":["name","operator","address"],"geometry":["point","vertex","area"],"tags":{"tourism":"attraction"},"name":"Tourist Attraction"},"tourism/camp_site":{"icon":"campsite","fields":["name","operator","address","capacity","fee","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"terms":["tent","rv"],"tags":{"tourism":"camp_site"},"name":"Campground"},"tourism/caravan_site":{"icon":"bus","fields":["name","operator","address","capacity","fee","sanitary_dump_station","power_supply","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"terms":["Motor Home","Camper"],"tags":{"tourism":"caravan_site"},"name":"RV Park"},"tourism/chalet":{"icon":"lodging","fields":["name","operator","address","building_area","smoking","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["holiday","holiday cottage","holiday home","vacation","vacation home"],"tags":{"tourism":"chalet"},"name":"Holiday Cottage"},"tourism/gallery":{"icon":"art-gallery","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["art*","exhibit*","paint*","photo*","sculpt*"],"tags":{"tourism":"gallery"},"name":"Art Gallery"},"tourism/guest_house":{"icon":"lodging","fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"guest_house"},"terms":["B&B","Bed and Breakfast"],"name":"Guest House"},"tourism/hostel":{"icon":"lodging","fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"hostel"},"name":"Hostel"},"tourism/hotel":{"icon":"lodging","fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"hotel"},"name":"Hotel"},"tourism/information":{"icon":"information","fields":["information","operator","address","building_area"],"geometry":["point","vertex","area"],"tags":{"tourism":"information"},"name":"Information"},"tourism/information/board":{"icon":"information","fields":["name","operator","board_type","direction"],"geometry":["point","vertex"],"tags":{"tourism":"information","information":"board"},"reference":{"key":"information","value":"board"},"name":"Information Board"},"tourism/information/guidepost":{"icon":"information","fields":["name","elevation","operator","ref"],"geometry":["point","vertex"],"terms":["signpost"],"tags":{"tourism":"information","information":"guidepost"},"reference":{"key":"information","value":"guidepost"},"name":"Guidepost"},"tourism/information/map":{"icon":"information","fields":["operator","map_type","map_size","direction"],"geometry":["point","vertex"],"tags":{"tourism":"information","information":"map"},"reference":{"key":"information","value":"map"},"name":"Map"},"tourism/information/office":{"icon":"information","fields":["name","operator","address","building_area"],"geometry":["point","vertex","area"],"tags":{"tourism":"information","information":"office"},"reference":{"key":"information","value":"office"},"name":"Tourist Information Office"},"tourism/motel":{"icon":"lodging","fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"motel"},"name":"Motel"},"tourism/museum":{"icon":"museum","fields":["name","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["art*","exhibit*","gallery","foundation","hall","institution","paint*","photo*","sculpt*"],"tags":{"tourism":"museum"},"name":"Museum"},"tourism/picnic_site":{"icon":"picnic-site","fields":["name","operator","address","smoking"],"geometry":["point","vertex","area"],"terms":["camp"],"tags":{"tourism":"picnic_site"},"name":"Picnic Site"},"tourism/theme_park":{"icon":"amusement-park","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"tags":{"tourism":"theme_park"},"name":"Theme Park"},"tourism/trail_riding_station":{"icon":"horse-riding","fields":["name","horse_stables","horse_riding","horse_dressage","address","phone","website","description"],"geometry":["point","area"],"tags":{"tourism":"trail_riding_station"},"name":"Trail Riding Station","matchScore":2},"tourism/viewpoint":{"icon":"poi-binoculars","geometry":["point","vertex"],"fields":["direction"],"tags":{"tourism":"viewpoint"},"name":"Viewpoint"},"tourism/wilderness_hut":{"icon":"lodging","fields":["name","operator","address","building_area"],"geometry":["point","area"],"terms":["wilderness hut","backcountry hut","bothy"],"tags":{"tourism":"wilderness_hut"},"name":"Wilderness Hut"},"tourism/zoo":{"icon":"zoo","fields":["name","operator","address","opening_hours"],"geometry":["point","area"],"terms":["animal"],"tags":{"tourism":"zoo"},"name":"Zoo"},"traffic_calming":{"icon":"poi-warning","fields":["traffic_calming","direction_vertex"],"geometry":["vertex","line"],"tags":{"traffic_calming":"*"},"terms":["bump","hump","slow","speed"],"name":"Traffic Calming"},"traffic_calming/bump":{"icon":"poi-warning","fields":["surface","direction_vertex"],"geometry":["vertex","line"],"terms":["hump","speed","slow"],"tags":{"traffic_calming":"bump"},"name":"Speed Bump"},"traffic_calming/chicane":{"icon":"poi-warning","fields":["direction_vertex"],"geometry":["vertex","line"],"terms":["driveway link","speed","slow"],"tags":{"traffic_calming":"chicane"},"name":"Traffic Chicane"},"traffic_calming/choker":{"icon":"poi-warning","fields":["direction_vertex"],"geometry":["vertex","line"],"terms":["speed","slow"],"tags":{"traffic_calming":"choker"},"name":"Traffic Choker"},"traffic_calming/cushion":{"icon":"poi-warning","fields":["surface","direction_vertex"],"geometry":["vertex","line"],"terms":["bump","hump","speed","slow"],"tags":{"traffic_calming":"cushion"},"name":"Speed Cushion"},"traffic_calming/dip":{"icon":"poi-warning","fields":["surface","direction_vertex"],"geometry":["vertex","line"],"terms":["speed","slow"],"tags":{"traffic_calming":"dip"},"name":"Dip"},"traffic_calming/hump":{"icon":"poi-warning","fields":["surface","direction_vertex"],"geometry":["vertex","line"],"terms":["bump","speed","slow"],"tags":{"traffic_calming":"hump"},"name":"Speed Hump"},"traffic_calming/island":{"icon":"poi-warning","geometry":["vertex"],"terms":["circle","roundabout","slow"],"tags":{"traffic_calming":"island"},"name":"Traffic Island"},"traffic_calming/rumble_strip":{"icon":"poi-warning","fields":["direction_vertex"],"geometry":["vertex","line"],"terms":["audible lines","sleeper lines","growlers"],"tags":{"traffic_calming":"rumble_strip"},"name":"Rumble Strip"},"traffic_calming/table":{"icon":"poi-warning","fields":["surface"],"geometry":["vertex"],"tags":{"traffic_calming":"table"},"terms":["flat top","hump","speed","slow"],"name":"Speed Table"},"type/multipolygon":{"icon":"multipolygon","geometry":["area","relation"],"tags":{"type":"multipolygon"},"removeTags":{},"name":"Multipolygon","searchable":false,"matchScore":0.1},"type/boundary":{"icon":"boundary","fields":["name","boundary"],"geometry":["relation"],"tags":{"type":"boundary"},"name":"Boundary"},"type/boundary/administrative":{"icon":"boundary","fields":["name","admin_level"],"geometry":["relation"],"tags":{"type":"boundary","boundary":"administrative"},"reference":{"key":"boundary","value":"administrative"},"name":"Administrative Boundary"},"type/restriction":{"icon":"restriction","fields":["name","restriction","except"],"geometry":["relation"],"tags":{"type":"restriction"},"name":"Restriction"},"type/restriction/no_left_turn":{"icon":"restriction-no-left-turn","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"no_left_turn"},"name":"No Left Turn"},"type/restriction/no_right_turn":{"icon":"restriction-no-right-turn","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"no_right_turn"},"name":"No Right Turn"},"type/restriction/no_straight_on":{"icon":"restriction-no-straight-on","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"no_straight_on"},"name":"No Straight On"},"type/restriction/no_u_turn":{"icon":"restriction-no-u-turn","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"no_u_turn"},"name":"No U-turn"},"type/restriction/only_left_turn":{"icon":"restriction-only-left-turn","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"only_left_turn"},"name":"Only Left Turn"},"type/restriction/only_right_turn":{"icon":"restriction-only-right-turn","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"only_right_turn"},"name":"Only Right Turn"},"type/restriction/only_straight_on":{"icon":"restriction-only-straight-on","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"only_straight_on"},"name":"Only Straight On"},"type/restriction/only_u_turn":{"icon":"restriction-only-u-turn","fields":["except"],"geometry":["relation"],"tags":{"type":"restriction","restriction":"only_u_turn"},"name":"Only U-turn"},"type/route_master":{"icon":"route-master","fields":["name","route_master","ref","operator","network"],"geometry":["relation"],"tags":{"type":"route_master"},"name":"Route Master"},"type/route":{"icon":"route","fields":["name","route","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route"},"name":"Route"},"type/route/bicycle":{"icon":"route-bicycle","fields":["name","ref_route","network_bicycle","cycle_network"],"geometry":["relation"],"tags":{"type":"route","route":"bicycle"},"name":"Cycle Route"},"type/route/bus":{"icon":"route-bus","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"bus"},"name":"Bus Route"},"type/route/detour":{"icon":"route-detour","fields":["name","ref_route"],"geometry":["relation"],"tags":{"type":"route","route":"detour"},"name":"Detour Route"},"type/route/ferry":{"icon":"route-ferry","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"ferry"},"name":"Ferry Route"},"type/route/foot":{"icon":"route-foot","fields":["name","ref_route","operator","network_foot"],"geometry":["relation"],"tags":{"type":"route","route":"foot"},"name":"Foot Route"},"type/route/hiking":{"icon":"route-foot","fields":["name","ref_route","operator","network_foot","description","distance"],"geometry":["relation"],"tags":{"type":"route","route":"hiking"},"name":"Hiking Route"},"type/route/horse":{"icon":"route-horse","fields":["name","ref_route","operator","network_horse","description","distance"],"geometry":["relation"],"tags":{"type":"route","route":"horse"},"name":"Riding Route"},"type/route/light_rail":{"icon":"route-light-rail","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"light_rail"},"name":"Light Rail Route"},"type/route/pipeline":{"icon":"route-pipeline","fields":["name","ref_route","operator"],"geometry":["relation"],"tags":{"type":"route","route":"pipeline"},"name":"Pipeline Route"},"type/route/piste":{"icon":"route-piste","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"piste"},"name":"Piste/Ski Route"},"type/route/power":{"icon":"route-power","fields":["name","ref_route","operator"],"geometry":["relation"],"tags":{"type":"route","route":"power"},"name":"Power Route"},"type/route/road":{"icon":"route-road","fields":["name","ref_route","network_road"],"geometry":["relation"],"tags":{"type":"route","route":"road"},"name":"Road Route"},"type/route/subway":{"icon":"route-subway","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"subway"},"name":"Subway Route"},"type/route/train":{"icon":"route-train","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"train"},"name":"Train Route"},"type/route/tram":{"icon":"route-tram","fields":["name","ref_route","operator","network"],"geometry":["relation"],"tags":{"type":"route","route":"tram"},"name":"Tram Route"},"type/site":{"icon":"relation","fields":["name","site"],"geometry":["relation"],"tags":{"type":"site"},"name":"Site"},"type/waterway":{"icon":"route-water","fields":["name","waterway","ref"],"geometry":["relation"],"tags":{"type":"waterway"},"name":"Waterway"},"vertex":{"fields":["name"],"geometry":["vertex"],"tags":{},"name":"Other","matchScore":0.1},"waterway/boatyard":{"icon":"harbor","fields":["name","operator"],"geometry":["area","vertex","point"],"tags":{"waterway":"boatyard"},"name":"Boatyard"},"waterway/canal":{"icon":"waterway-canal","fields":["name","width","intermittent"],"geometry":["line"],"tags":{"waterway":"canal"},"name":"Canal"},"waterway/dam":{"icon":"dam","geometry":["point","vertex","line","area"],"fields":["name"],"tags":{"waterway":"dam"},"name":"Dam"},"waterway/ditch":{"icon":"waterway-ditch","fields":["structure_waterway","intermittent"],"geometry":["line"],"tags":{"waterway":"ditch"},"name":"Ditch"},"waterway/dock":{"icon":"harbor","fields":["name","dock","operator"],"geometry":["area","vertex","point"],"terms":["boat","ship","vessel","marine"],"tags":{"waterway":"dock"},"name":"Wet Dock / Dry Dock"},"waterway/drain":{"icon":"waterway-ditch","fields":["structure_waterway","intermittent"],"geometry":["line"],"tags":{"waterway":"drain"},"name":"Drain"},"waterway/fuel":{"icon":"fuel","fields":["name","operator","address","opening_hours","fuel_multi"],"geometry":["point","area"],"terms":["petrol","gas","diesel","boat"],"tags":{"waterway":"fuel"},"name":"Marine Fuel Station"},"waterway/river":{"icon":"waterway-river","fields":["name","structure_waterway","width","intermittent"],"geometry":["line"],"terms":["beck","branch","brook","course","creek","estuary","rill","rivulet","run","runnel","stream","tributary","watercourse"],"tags":{"waterway":"river"},"name":"River"},"waterway/riverbank":{"icon":"water","geometry":["area"],"tags":{"waterway":"riverbank"},"name":"Riverbank"},"waterway/sanitary_dump_station":{"icon":"poi-storage-tank","fields":["name","operator","access_simple","fee","water_point"],"geometry":["point","vertex","area"],"terms":["Boat","Watercraft","Sanitary","Dump Station","Pumpout","Pump out","Elsan","CDP","CTDP","Chemical Toilet"],"tags":{"waterway":"sanitary_dump_station"},"name":"Marine Toilet Disposal"},"waterway/stream_intermittent":{"icon":"waterway-stream","fields":["name","structure_waterway","width","intermittent"],"geometry":["line"],"terms":["arroyo","beck","branch","brook","burn","course","creek","drift","flood","flow","gully","run","runnel","rush","spate","spritz","tributary","wadi","wash","watercourse"],"tags":{"waterway":"stream","intermittent":"yes"},"reference":{"key":"waterway","value":"stream"},"name":"Intermittent Stream"},"waterway/stream":{"icon":"waterway-stream","fields":["name","structure_waterway","width","intermittent"],"geometry":["line"],"terms":["beck","branch","brook","burn","course","creek","current","drift","flood","flow","freshet","race","rill","rindle","rivulet","run","runnel","rush","spate","spritz","surge","tide","torrent","tributary","watercourse"],"tags":{"waterway":"stream"},"name":"Stream"},"waterway/water_point":{"icon":"drinking-water","geometry":["area","vertex","point"],"tags":{"waterway":"water_point"},"name":"Marine Drinking Water"},"waterway/waterfall":{"icon":"water","fields":["name","height","width","intermittent"],"geometry":["vertex"],"terms":["fall"],"tags":{"waterway":"waterfall"},"name":"Waterfall"},"waterway/weir":{"icon":"dam","geometry":["vertex","line"],"tags":{"waterway":"weir"},"name":"Weir"},"amenity/arts_centre/Świetlica wiejska":{"tags":{"name":"Świetlica wiejska","amenity":"arts_centre"},"name":"Świetlica wiejska","icon":"theatre","geometry":["point","area"],"fields":["name","address","building_area","opening_hours"],"suggestion":true},"amenity/arts_centre/Дом культуры":{"tags":{"name":"Дом культуры","amenity":"arts_centre"},"name":"Дом культуры","icon":"theatre","geometry":["point","area"],"fields":["name","address","building_area","opening_hours"],"suggestion":true},"amenity/bank/ABANCA":{"tags":{"name":"ABANCA","amenity":"bank"},"name":"ABANCA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ABN AMRO":{"tags":{"name":"ABN AMRO","amenity":"bank"},"name":"ABN AMRO","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ABSA":{"tags":{"name":"ABSA","amenity":"bank"},"name":"ABSA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/AIB":{"tags":{"name":"AIB","amenity":"bank"},"name":"AIB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ANZ":{"tags":{"name":"ANZ","amenity":"bank"},"name":"ANZ","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ASB Bank":{"tags":{"name":"ASB Bank","amenity":"bank"},"name":"ASB Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ATB Financial":{"tags":{"name":"ATB Financial","amenity":"bank"},"name":"ATB Financial","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/AXA":{"tags":{"name":"AXA","amenity":"bank"},"name":"AXA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Agribank":{"tags":{"name":"Agribank","amenity":"bank"},"name":"Agribank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Akbank":{"tags":{"name":"Akbank","amenity":"bank"},"name":"Akbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Alior Bank":{"tags":{"name":"Alior Bank","amenity":"bank"},"name":"Alior Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Allahabad Bank":{"tags":{"name":"Allahabad Bank","amenity":"bank"},"name":"Allahabad Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Allied Bank":{"tags":{"name":"Allied Bank","amenity":"bank"},"name":"Allied Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Alpha Bank":{"tags":{"name":"Alpha Bank","amenity":"bank"},"name":"Alpha Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Andhra Bank":{"tags":{"name":"Andhra Bank","amenity":"bank"},"name":"Andhra Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Antonveneta":{"tags":{"name":"Antonveneta","amenity":"bank"},"name":"Antonveneta","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Argenta":{"tags":{"name":"Argenta","amenity":"bank"},"name":"Argenta","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Asia United Bank":{"tags":{"name":"Asia United Bank","amenity":"bank"},"name":"Asia United Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Askari Bank":{"tags":{"name":"Askari Bank","amenity":"bank"},"name":"Askari Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Associated Bank":{"tags":{"name":"Associated Bank","amenity":"bank"},"name":"Associated Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Axis Bank":{"tags":{"name":"Axis Bank","amenity":"bank"},"name":"Axis Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BAC":{"tags":{"name":"BAC","amenity":"bank"},"name":"BAC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BAWAG PSK":{"tags":{"name":"BAWAG PSK","amenity":"bank"},"name":"BAWAG PSK","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BB&T":{"tags":{"name":"BB&T","amenity":"bank"},"name":"BB&T","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBBank":{"tags":{"name":"BBBank","amenity":"bank"},"name":"BBBank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBK":{"tags":{"name":"BBK","amenity":"bank"},"name":"BBK","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBVA":{"tags":{"name":"BBVA","amenity":"bank"},"name":"BBVA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBVA Bancomer":{"tags":{"name":"BBVA Bancomer","amenity":"bank"},"name":"BBVA Bancomer","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBVA Compass":{"tags":{"name":"BBVA Compass","amenity":"bank"},"name":"BBVA Compass","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBVA Continental":{"tags":{"name":"BBVA Continental","amenity":"bank"},"name":"BBVA Continental","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBVA Francés":{"tags":{"name":"BBVA Francés","amenity":"bank"},"name":"BBVA Francés","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BCA":{"tags":{"name":"BCA","amenity":"bank"},"name":"BCA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BCI":{"tags":{"name":"BCI","amenity":"bank"},"name":"BCI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BCP":{"tags":{"name":"BCP","amenity":"bank"},"name":"BCP","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BCR":{"tags":{"name":"BCR","amenity":"bank"},"name":"BCR","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BDO":{"tags":{"name":"BDO","amenity":"bank"},"name":"BDO","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BGŻ BNP Paribas":{"tags":{"name":"BGŻ BNP Paribas","amenity":"bank"},"name":"BGŻ BNP Paribas","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BMCE":{"tags":{"name":"BMCE","amenity":"bank"},"name":"BMCE","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BMN":{"tags":{"name":"BMN","amenity":"bank"},"name":"BMN","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BMO":{"tags":{"name":"BMO","amenity":"bank"},"name":"BMO","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BMO Harris Bank":{"tags":{"name":"BMO Harris Bank","amenity":"bank"},"name":"BMO Harris Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNA":{"tags":{"name":"BNA","amenity":"bank"},"name":"BNA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNI":{"tags":{"name":"BNI","amenity":"bank"},"name":"BNI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNL":{"tags":{"name":"BNL","amenity":"bank"},"name":"BNL","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNP Paribas":{"tags":{"name":"BNP Paribas","amenity":"bank"},"name":"BNP Paribas","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNP Paribas Fortis":{"tags":{"name":"BNP Paribas Fortis","amenity":"bank"},"name":"BNP Paribas Fortis","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BOC":{"tags":{"name":"BOC","amenity":"bank"},"name":"BOC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BPH":{"tags":{"name":"BPH","amenity":"bank"},"name":"BPH","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BPI":{"tags":{"name":"BPI","amenity":"bank"},"name":"BPI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BPI Family Savings Bank":{"tags":{"name":"BPI Family Savings Bank","amenity":"bank"},"name":"BPI Family Savings Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BRD":{"tags":{"name":"BRD","amenity":"bank"},"name":"BRD","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BRED":{"tags":{"name":"BRED","amenity":"bank"},"name":"BRED","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BRI":{"tags":{"name":"BRI","amenity":"bank"},"name":"BRI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BW-Bank":{"tags":{"name":"BW-Bank","amenity":"bank"},"name":"BW-Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BZ WBK":{"tags":{"name":"BZ WBK","amenity":"bank"},"name":"BZ WBK","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banamex":{"tags":{"name":"Banamex","amenity":"bank"},"name":"Banamex","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banc Sabadell":{"tags":{"name":"Banc Sabadell","amenity":"bank"},"name":"Banc Sabadell","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Intesa":{"tags":{"name":"Banca Intesa","amenity":"bank"},"name":"Banca Intesa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca March":{"tags":{"name":"Banca March","amenity":"bank"},"name":"Banca March","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Popolare di Milano":{"tags":{"name":"Banca Popolare di Milano","amenity":"bank"},"name":"Banca Popolare di Milano","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Popolare di Novara":{"tags":{"name":"Banca Popolare di Novara","amenity":"bank"},"name":"Banca Popolare di Novara","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Popolare di Sondrio":{"tags":{"name":"Banca Popolare di Sondrio","amenity":"bank"},"name":"Banca Popolare di Sondrio","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Popolare di Verona":{"tags":{"name":"Banca Popolare di Verona","amenity":"bank"},"name":"Banca Popolare di Verona","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Popolare di Vicenza":{"tags":{"name":"Banca Popolare di Vicenza","amenity":"bank"},"name":"Banca Popolare di Vicenza","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Românească":{"tags":{"name":"Banca Românească","amenity":"bank"},"name":"Banca Românească","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Sella":{"tags":{"name":"Banca Sella","amenity":"bank"},"name":"Banca Sella","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Transilvania":{"tags":{"name":"Banca Transilvania","amenity":"bank"},"name":"Banca Transilvania","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Agrario":{"tags":{"name":"Banco Agrario","amenity":"bank"},"name":"Banco Agrario","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Azteca":{"tags":{"name":"Banco Azteca","amenity":"bank"},"name":"Banco Azteca","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco BCI":{"tags":{"name":"Banco BCI","amenity":"bank"},"name":"Banco BCI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Bradesco":{"tags":{"name":"Banco Bradesco","amenity":"bank"},"name":"Banco Bradesco","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Continental":{"tags":{"name":"Banco Continental","amenity":"bank"},"name":"Banco Continental","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Estado":{"tags":{"name":"Banco Estado","amenity":"bank"},"name":"Banco Estado","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Fassil":{"tags":{"name":"Banco Fassil","amenity":"bank"},"name":"Banco Fassil","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco G&T Continental":{"tags":{"name":"Banco G&T Continental","amenity":"bank"},"name":"Banco G&T Continental","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco General":{"tags":{"name":"Banco General","amenity":"bank"},"name":"Banco General","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Industrial":{"tags":{"name":"Banco Industrial","amenity":"bank"},"name":"Banco Industrial","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Internacional":{"tags":{"name":"Banco Internacional","amenity":"bank"},"name":"Banco Internacional","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Itaú":{"tags":{"name":"Banco Itaú","amenity":"bank"},"name":"Banco Itaú","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Nacional":{"tags":{"name":"Banco Nacional","amenity":"bank"},"name":"Banco Nacional","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Nación":{"tags":{"name":"Banco Nación","amenity":"bank"},"name":"Banco Nación","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Pastor":{"tags":{"name":"Banco Pastor","amenity":"bank"},"name":"Banco Pastor","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Pichincha":{"tags":{"name":"Banco Pichincha","amenity":"bank"},"name":"Banco Pichincha","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Popular":{"tags":{"name":"Banco Popular","amenity":"bank"},"name":"Banco Popular","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Provincia":{"tags":{"name":"Banco Provincia","amenity":"bank"},"name":"Banco Provincia","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Sabadell":{"tags":{"name":"Banco Sabadell","amenity":"bank"},"name":"Banco Sabadell","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Santander":{"tags":{"name":"Banco Santander","amenity":"bank"},"name":"Banco Santander","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Sol":{"tags":{"name":"Banco Sol","amenity":"bank"},"name":"Banco Sol","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Bogotá":{"tags":{"name":"Banco de Bogotá","amenity":"bank"},"name":"Banco de Bogotá","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Chile":{"tags":{"name":"Banco de Chile","amenity":"bank"},"name":"Banco de Chile","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Costa Rica":{"tags":{"name":"Banco de Costa Rica","amenity":"bank"},"name":"Banco de Costa Rica","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Desarrollo Banrural":{"tags":{"name":"Banco de Desarrollo Banrural","amenity":"bank"},"name":"Banco de Desarrollo Banrural","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Occidente":{"tags":{"name":"Banco de Occidente","amenity":"bank"},"name":"Banco de Occidente","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Venezuela":{"tags":{"name":"Banco de Venezuela","amenity":"bank"},"name":"Banco de Venezuela","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de la Nación":{"tags":{"name":"Banco de la Nación","amenity":"bank"},"name":"Banco de la Nación","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de la Nación Argentina":{"tags":{"name":"Banco de la Nación Argentina","amenity":"bank"},"name":"Banco de la Nación Argentina","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco di Napoli":{"tags":{"name":"Banco di Napoli","amenity":"bank"},"name":"Banco di Napoli","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco di Sardegna":{"tags":{"name":"Banco di Sardegna","amenity":"bank"},"name":"Banco di Sardegna","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco do Brasil":{"tags":{"name":"Banco do Brasil","amenity":"bank"},"name":"Banco do Brasil","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco do Nordeste":{"tags":{"name":"Banco do Nordeste","amenity":"bank"},"name":"Banco do Nordeste","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BancoEstado":{"tags":{"name":"BancoEstado","amenity":"bank"},"name":"BancoEstado","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancolombia":{"tags":{"name":"Bancolombia","amenity":"bank"},"name":"Bancolombia","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancomer":{"tags":{"name":"Bancomer","amenity":"bank"},"name":"Bancomer","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancpost":{"tags":{"name":"Bancpost","amenity":"bank"},"name":"Bancpost","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banesco":{"tags":{"name":"Banesco","amenity":"bank"},"name":"Banesco","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bangkok Bank":{"tags":{"name":"Bangkok Bank","amenity":"bank"},"name":"Bangkok Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Al Habib":{"tags":{"name":"Bank Al Habib","amenity":"bank"},"name":"Bank Al Habib","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Alfalah":{"tags":{"name":"Bank Alfalah","amenity":"bank"},"name":"Bank Alfalah","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Austria":{"tags":{"name":"Bank Austria","amenity":"bank"},"name":"Bank Austria","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank BCA":{"tags":{"name":"Bank BCA","amenity":"bank"},"name":"Bank BCA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank BNI":{"tags":{"name":"Bank BNI","amenity":"bank"},"name":"Bank BNI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank BPH":{"tags":{"name":"Bank BPH","amenity":"bank"},"name":"Bank BPH","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank BRI":{"tags":{"name":"Bank BRI","amenity":"bank"},"name":"Bank BRI","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Danamon":{"tags":{"name":"Bank Danamon","amenity":"bank"},"name":"Bank Danamon","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Mandiri":{"tags":{"name":"Bank Mandiri","amenity":"bank"},"name":"Bank Mandiri","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Mega":{"tags":{"name":"Bank Mega","amenity":"bank"},"name":"Bank Mega","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Spółdzielczy":{"tags":{"name":"Bank Spółdzielczy","amenity":"bank"},"name":"Bank Spółdzielczy","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Zachodni WBK":{"tags":{"name":"Bank Zachodni WBK","amenity":"bank"},"name":"Bank Zachodni WBK","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Africa":{"tags":{"name":"Bank of Africa","amenity":"bank"},"name":"Bank of Africa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of America":{"tags":{"name":"Bank of America","amenity":"bank"},"name":"Bank of America","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Baroda":{"tags":{"name":"Bank of Baroda","amenity":"bank"},"name":"Bank of Baroda","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Ceylon":{"tags":{"name":"Bank of Ceylon","amenity":"bank"},"name":"Bank of Ceylon","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of China":{"tags":{"name":"Bank of China","amenity":"bank"},"name":"Bank of China","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Commerce":{"tags":{"name":"Bank of Commerce","amenity":"bank"},"name":"Bank of Commerce","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of India":{"tags":{"name":"Bank of India","amenity":"bank"},"name":"Bank of India","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Ireland":{"tags":{"name":"Bank of Ireland","amenity":"bank"},"name":"Bank of Ireland","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Montreal":{"tags":{"name":"Bank of Montreal","amenity":"bank"},"name":"Bank of Montreal","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of New Zealand":{"tags":{"name":"Bank of New Zealand","amenity":"bank"},"name":"Bank of New Zealand","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Scotland":{"tags":{"name":"Bank of Scotland","amenity":"bank"},"name":"Bank of Scotland","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of the West":{"tags":{"name":"Bank of the West","amenity":"bank"},"name":"Bank of the West","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bankia":{"tags":{"name":"Bankia","amenity":"bank"},"name":"Bankia","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bankinter":{"tags":{"name":"Bankinter","amenity":"bank"},"name":"Bankinter","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banner Bank":{"tags":{"name":"Banner Bank","amenity":"bank"},"name":"Banner Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banorte":{"tags":{"name":"Banorte","amenity":"bank"},"name":"Banorte","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banque Atlantique":{"tags":{"name":"Banque Atlantique","amenity":"bank"},"name":"Banque Atlantique","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banque Nationale":{"tags":{"name":"Banque Nationale","amenity":"bank"},"name":"Banque Nationale","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banque Populaire":{"tags":{"name":"Banque Populaire","amenity":"bank"},"name":"Banque Populaire","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banrisul":{"tags":{"name":"Banrisul","amenity":"bank"},"name":"Banrisul","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banrural":{"tags":{"name":"Banrural","amenity":"bank"},"name":"Banrural","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Barclays":{"tags":{"name":"Barclays","amenity":"bank"},"name":"Barclays","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bcc":{"tags":{"name":"Bcc","amenity":"bank"},"name":"Bcc","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Belfius":{"tags":{"name":"Belfius","amenity":"bank"},"name":"Belfius","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bendigo Bank":{"tags":{"name":"Bendigo Bank","amenity":"bank"},"name":"Bendigo Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Berliner Volksbank":{"tags":{"name":"Berliner Volksbank","amenity":"bank"},"name":"Berliner Volksbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bicentenario":{"tags":{"name":"Bicentenario","amenity":"bank"},"name":"Bicentenario","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bradesco":{"tags":{"name":"Bradesco","amenity":"bank"},"name":"Bradesco","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Budapest Bank":{"tags":{"name":"Budapest Bank","amenity":"bank"},"name":"Budapest Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CBAO":{"tags":{"name":"CBAO","amenity":"bank"},"name":"CBAO","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CEC Bank":{"tags":{"name":"CEC Bank","amenity":"bank"},"name":"CEC Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CGD":{"tags":{"name":"CGD","amenity":"bank"},"name":"CGD","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CIB Bank":{"tags":{"name":"CIB Bank","amenity":"bank"},"name":"CIB Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CIBC":{"tags":{"name":"CIBC","amenity":"bank"},"name":"CIBC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CIC":{"tags":{"name":"CIC","amenity":"bank"},"name":"CIC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CIMB Bank":{"tags":{"name":"CIMB Bank","amenity":"bank"},"name":"CIMB Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CNEP":{"tags":{"name":"CNEP","amenity":"bank"},"name":"CNEP","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caisse Desjardins":{"tags":{"name":"Caisse Desjardins","amenity":"bank"},"name":"Caisse Desjardins","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caisse d'Épargne":{"tags":{"name":"Caisse d'Épargne","amenity":"bank"},"name":"Caisse d'Épargne","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caixa":{"tags":{"name":"Caixa","amenity":"bank"},"name":"Caixa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caixa Econômica Federal":{"tags":{"name":"Caixa Econômica Federal","amenity":"bank"},"name":"Caixa Econômica Federal","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caixa Geral de Depósitos":{"tags":{"name":"Caixa Geral de Depósitos","amenity":"bank"},"name":"Caixa Geral de Depósitos","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CaixaBank":{"tags":{"name":"CaixaBank","amenity":"bank"},"name":"CaixaBank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Círculo":{"tags":{"name":"Caja Círculo","amenity":"bank"},"name":"Caja Círculo","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Duero":{"tags":{"name":"Caja Duero","amenity":"bank"},"name":"Caja Duero","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja España":{"tags":{"name":"Caja España","amenity":"bank"},"name":"Caja España","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Rural":{"tags":{"name":"Caja Rural","amenity":"bank"},"name":"Caja Rural","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Rural de Jaén":{"tags":{"name":"Caja Rural de Jaén","amenity":"bank"},"name":"Caja Rural de Jaén","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CajaSur":{"tags":{"name":"CajaSur","amenity":"bank"},"name":"CajaSur","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cajamar":{"tags":{"name":"Cajamar","amenity":"bank"},"name":"Cajamar","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cajero Automatico Bancared":{"tags":{"name":"Cajero Automatico Bancared","amenity":"bank"},"name":"Cajero Automatico Bancared","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Canara Bank":{"tags":{"name":"Canara Bank","amenity":"bank"},"name":"Canara Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Capital One":{"tags":{"name":"Capital One","amenity":"bank"},"name":"Capital One","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Carige":{"tags":{"name":"Carige","amenity":"bank"},"name":"Carige","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cariparma":{"tags":{"name":"Cariparma","amenity":"bank"},"name":"Cariparma","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cassa di Risparmio del Veneto":{"tags":{"name":"Cassa di Risparmio del Veneto","amenity":"bank"},"name":"Cassa di Risparmio del Veneto","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CatalunyaCaixa":{"tags":{"name":"CatalunyaCaixa","amenity":"bank"},"name":"CatalunyaCaixa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Central Bank of India":{"tags":{"name":"Central Bank of India","amenity":"bank"},"name":"Central Bank of India","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Chase":{"tags":{"name":"Chase","amenity":"bank"},"name":"Chase","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/China Bank":{"tags":{"name":"China Bank","amenity":"bank"},"name":"China Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/China Bank Savings":{"tags":{"name":"China Bank Savings","amenity":"bank"},"name":"China Bank Savings","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/China Construction Bank":{"tags":{"name":"China Construction Bank","amenity":"bank"},"name":"China Construction Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Citibank":{"tags":{"name":"Citibank","amenity":"bank"},"name":"Citibank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Citizens Bank":{"tags":{"name":"Citizens Bank","amenity":"bank"},"name":"Citizens Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Clydesdale Bank":{"tags":{"name":"Clydesdale Bank","amenity":"bank"},"name":"Clydesdale Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Columbia Bank":{"tags":{"name":"Columbia Bank","amenity":"bank"},"name":"Columbia Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Comerica Bank":{"tags":{"name":"Comerica Bank","amenity":"bank"},"name":"Comerica Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commerce Bank":{"tags":{"name":"Commerce Bank","amenity":"bank"},"name":"Commerce Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commercial Bank":{"tags":{"name":"Commercial Bank","amenity":"bank"},"name":"Commercial Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commercial Bank of Ceylon PLC":{"tags":{"name":"Commercial Bank of Ceylon PLC","amenity":"bank"},"name":"Commercial Bank of Ceylon PLC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commerzbank":{"tags":{"name":"Commerzbank","amenity":"bank"},"name":"Commerzbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commonwealth Bank":{"tags":{"name":"Commonwealth Bank","amenity":"bank"},"name":"Commonwealth Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Corporation Bank":{"tags":{"name":"Corporation Bank","amenity":"bank"},"name":"Corporation Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Credem":{"tags":{"name":"Credem","amenity":"bank"},"name":"Credem","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Credicoop":{"tags":{"name":"Credicoop","amenity":"bank"},"name":"Credicoop","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Credit Agricole":{"tags":{"name":"Credit Agricole","amenity":"bank"},"name":"Credit Agricole","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Credit Suisse":{"tags":{"name":"Credit Suisse","amenity":"bank"},"name":"Credit Suisse","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crelan":{"tags":{"name":"Crelan","amenity":"bank"},"name":"Crelan","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit Agricole":{"tags":{"name":"Crédit Agricole","amenity":"bank"},"name":"Crédit Agricole","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit Mutuel":{"tags":{"name":"Crédit Mutuel","amenity":"bank"},"name":"Crédit Mutuel","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit Mutuel de Bretagne":{"tags":{"name":"Crédit Mutuel de Bretagne","amenity":"bank"},"name":"Crédit Mutuel de Bretagne","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit du Nord":{"tags":{"name":"Crédit du Nord","amenity":"bank"},"name":"Crédit du Nord","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédito Agrícola":{"tags":{"name":"Crédito Agrícola","amenity":"bank"},"name":"Crédito Agrícola","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cбербанк":{"tags":{"name":"Cбербанк","amenity":"bank"},"name":"Cбербанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Danske Bank":{"tags":{"name":"Danske Bank","amenity":"bank"},"name":"Danske Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Davivienda":{"tags":{"name":"Davivienda","amenity":"bank"},"name":"Davivienda","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/De Venezuela":{"tags":{"name":"De Venezuela","amenity":"bank"},"name":"De Venezuela","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Denizbank":{"tags":{"name":"Denizbank","amenity":"bank"},"name":"Denizbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Desjardins":{"tags":{"name":"Desjardins","amenity":"bank"},"name":"Desjardins","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Deutsche Bank":{"tags":{"name":"Deutsche Bank","amenity":"bank"},"name":"Deutsche Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Dubai Islamic Bank":{"tags":{"name":"Dubai Islamic Bank","amenity":"bank"},"name":"Dubai Islamic Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/EastWest Bank":{"tags":{"name":"EastWest Bank","amenity":"bank"},"name":"EastWest Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ecobank":{"tags":{"name":"Ecobank","amenity":"bank"},"name":"Ecobank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Erste Bank":{"tags":{"name":"Erste Bank","amenity":"bank"},"name":"Erste Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Eurobank":{"tags":{"name":"Eurobank","amenity":"bank"},"name":"Eurobank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Express Union":{"tags":{"name":"Express Union","amenity":"bank"},"name":"Express Union","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/FNB":{"tags":{"name":"FNB","amenity":"bank"},"name":"FNB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Federal Bank":{"tags":{"name":"Federal Bank","amenity":"bank"},"name":"Federal Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Fifth Third Bank":{"tags":{"name":"Fifth Third Bank","amenity":"bank"},"name":"Fifth Third Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Finansbank":{"tags":{"name":"Finansbank","amenity":"bank"},"name":"Finansbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/First Bank":{"tags":{"name":"First Bank","amenity":"bank"},"name":"First Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/First Citizens Bank":{"tags":{"name":"First Citizens Bank","amenity":"bank"},"name":"First Citizens Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/First National Bank":{"tags":{"name":"First National Bank","amenity":"bank"},"name":"First National Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Galicia":{"tags":{"name":"Galicia","amenity":"bank"},"name":"Galicia","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Garanti":{"tags":{"name":"Garanti","amenity":"bank"},"name":"Garanti","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Garanti Bankası":{"tags":{"name":"Garanti Bankası","amenity":"bank"},"name":"Garanti Bankası","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Getin Bank":{"tags":{"name":"Getin Bank","amenity":"bank"},"name":"Getin Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Groupama":{"tags":{"name":"Groupama","amenity":"bank"},"name":"Groupama","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HDFC Bank":{"tags":{"name":"HDFC Bank","amenity":"bank"},"name":"HDFC Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HNB":{"tags":{"name":"HNB","amenity":"bank"},"name":"HNB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HSBC":{"tags":{"name":"HSBC","amenity":"bank"},"name":"HSBC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Halifax":{"tags":{"name":"Halifax","amenity":"bank"},"name":"Halifax","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Halkbank":{"tags":{"name":"Halkbank","amenity":"bank"},"name":"Halkbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Hamburger Sparkasse":{"tags":{"name":"Hamburger Sparkasse","amenity":"bank"},"name":"Hamburger Sparkasse","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Handelsbanken":{"tags":{"name":"Handelsbanken","amenity":"bank"},"name":"Handelsbanken","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Hong Leong Bank":{"tags":{"name":"Hong Leong Bank","amenity":"bank"},"name":"Hong Leong Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Hrvatska poštanska banka":{"tags":{"name":"Hrvatska poštanska banka","amenity":"bank"},"name":"Hrvatska poštanska banka","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Huntington Bank":{"tags":{"name":"Huntington Bank","amenity":"bank"},"name":"Huntington Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HypoVereinsbank":{"tags":{"name":"HypoVereinsbank","amenity":"bank"},"name":"HypoVereinsbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ICBC":{"tags":{"name":"ICBC","amenity":"bank"},"name":"ICBC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ICICI Bank":{"tags":{"name":"ICICI Bank","amenity":"bank"},"name":"ICICI Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/IDBI Bank":{"tags":{"name":"IDBI Bank","amenity":"bank"},"name":"IDBI Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ING":{"tags":{"name":"ING","amenity":"bank"},"name":"ING","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ING Bank Śląski":{"tags":{"name":"ING Bank Śląski","amenity":"bank"},"name":"ING Bank Śląski","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/IberCaja":{"tags":{"name":"IberCaja","amenity":"bank"},"name":"IberCaja","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Indian Bank":{"tags":{"name":"Indian Bank","amenity":"bank"},"name":"Indian Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Indian Overseas Bank":{"tags":{"name":"Indian Overseas Bank","amenity":"bank"},"name":"Indian Overseas Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Interbank":{"tags":{"name":"Interbank","amenity":"bank"},"name":"Interbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Intesa San Paolo":{"tags":{"name":"Intesa San Paolo","amenity":"bank"},"name":"Intesa San Paolo","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Itaú":{"tags":{"name":"Itaú","amenity":"bank"},"name":"Itaú","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/K&H Bank":{"tags":{"name":"K&H Bank","amenity":"bank"},"name":"K&H Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/KBC":{"tags":{"name":"KBC","amenity":"bank"},"name":"KBC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Kasa Stefczyka":{"tags":{"name":"Kasa Stefczyka","amenity":"bank"},"name":"Kasa Stefczyka","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Key Bank":{"tags":{"name":"Key Bank","amenity":"bank"},"name":"Key Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Komerční banka":{"tags":{"name":"Komerční banka","amenity":"bank"},"name":"Komerční banka","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Kreissparkasse":{"tags":{"name":"Kreissparkasse","amenity":"bank"},"name":"Kreissparkasse","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Kreissparkasse Köln":{"tags":{"name":"Kreissparkasse Köln","amenity":"bank"},"name":"Kreissparkasse Köln","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Kutxabank":{"tags":{"name":"Kutxabank","amenity":"bank"},"name":"Kutxabank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/LCL":{"tags":{"name":"LCL","amenity":"bank"},"name":"LCL","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/La Banque Postale":{"tags":{"name":"La Banque Postale","amenity":"bank"},"name":"La Banque Postale","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/La Caixa":{"tags":{"name":"La Caixa","amenity":"bank"},"name":"La Caixa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Laboral Kutxa":{"tags":{"name":"Laboral Kutxa","amenity":"bank"},"name":"Laboral Kutxa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Landbank":{"tags":{"name":"Landbank","amenity":"bank"},"name":"Landbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Liberbank":{"tags":{"name":"Liberbank","amenity":"bank"},"name":"Liberbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Lloyds Bank":{"tags":{"name":"Lloyds Bank","amenity":"bank"},"name":"Lloyds Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/M&T Bank":{"tags":{"name":"M&T Bank","amenity":"bank"},"name":"M&T Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/MCB":{"tags":{"name":"MCB","amenity":"bank"},"name":"MCB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/MCB Bank":{"tags":{"name":"MCB Bank","amenity":"bank"},"name":"MCB Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/MONETA Money Bank":{"tags":{"name":"MONETA Money Bank","amenity":"bank"},"name":"MONETA Money Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Macro":{"tags":{"name":"Macro","amenity":"bank"},"name":"Macro","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Maybank":{"tags":{"name":"Maybank","amenity":"bank"},"name":"Maybank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Meezan Bank":{"tags":{"name":"Meezan Bank","amenity":"bank"},"name":"Meezan Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Mercantil":{"tags":{"name":"Mercantil","amenity":"bank"},"name":"Mercantil","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Metro Bank":{"tags":{"name":"Metro Bank","amenity":"bank"},"name":"Metro Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Metrobank":{"tags":{"name":"Metrobank","amenity":"bank"},"name":"Metrobank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Millennium BCP":{"tags":{"name":"Millennium BCP","amenity":"bank"},"name":"Millennium BCP","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Millennium Bank":{"tags":{"name":"Millennium Bank","amenity":"bank"},"name":"Millennium Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Monte dei Paschi di Siena":{"tags":{"name":"Monte dei Paschi di Siena","amenity":"bank"},"name":"Monte dei Paschi di Siena","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Montepio":{"tags":{"name":"Montepio","amenity":"bank"},"name":"Montepio","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/NAB":{"tags":{"name":"NAB","amenity":"bank"},"name":"NAB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/NSB":{"tags":{"name":"NSB","amenity":"bank"},"name":"NSB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/NatWest":{"tags":{"name":"NatWest","amenity":"bank"},"name":"NatWest","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/National Bank":{"tags":{"name":"National Bank","amenity":"bank"},"name":"National Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Nationwide":{"tags":{"name":"Nationwide","amenity":"bank"},"name":"Nationwide","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Nedbank":{"tags":{"name":"Nedbank","amenity":"bank"},"name":"Nedbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Nordea":{"tags":{"name":"Nordea","amenity":"bank"},"name":"Nordea","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Novo Banco":{"tags":{"name":"Novo Banco","amenity":"bank"},"name":"Novo Banco","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/OLB":{"tags":{"name":"OLB","amenity":"bank"},"name":"OLB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/OTP":{"tags":{"name":"OTP","amenity":"bank"},"name":"OTP","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Oberbank":{"tags":{"name":"Oberbank","amenity":"bank"},"name":"Oberbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Occidental de Descuento":{"tags":{"name":"Occidental de Descuento","amenity":"bank"},"name":"Occidental de Descuento","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Oldenburgische Landesbank":{"tags":{"name":"Oldenburgische Landesbank","amenity":"bank"},"name":"Oldenburgische Landesbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/One Network Bank":{"tags":{"name":"One Network Bank","amenity":"bank"},"name":"One Network Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Osuuspankki":{"tags":{"name":"Osuuspankki","amenity":"bank"},"name":"Osuuspankki","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PBZ":{"tags":{"name":"PBZ","amenity":"bank"},"name":"PBZ","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PKO":{"tags":{"name":"PKO","amenity":"bank"},"name":"PKO","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PKO BP":{"tags":{"name":"PKO BP","amenity":"bank"},"name":"PKO BP","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PNB":{"tags":{"name":"PNB","amenity":"bank"},"name":"PNB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PNC":{"tags":{"name":"PNC","amenity":"bank"},"name":"PNC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PNC Bank":{"tags":{"name":"PNC Bank","amenity":"bank"},"name":"PNC Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PSBank":{"tags":{"name":"PSBank","amenity":"bank"},"name":"PSBank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Patagonia":{"tags":{"name":"Patagonia","amenity":"bank"},"name":"Patagonia","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Pekao SA":{"tags":{"name":"Pekao SA","amenity":"bank"},"name":"Pekao SA","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Peoples Bank":{"tags":{"name":"Peoples Bank","amenity":"bank"},"name":"Peoples Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Philippine National Bank":{"tags":{"name":"Philippine National Bank","amenity":"bank"},"name":"Philippine National Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Piraeus Bank":{"tags":{"name":"Piraeus Bank","amenity":"bank"},"name":"Piraeus Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Popular":{"tags":{"name":"Popular","amenity":"bank"},"name":"Popular","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Postbank":{"tags":{"name":"Postbank","amenity":"bank"},"name":"Postbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Postbank Finanzcenter":{"tags":{"name":"Postbank Finanzcenter","amenity":"bank"},"name":"Postbank Finanzcenter","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Provincial":{"tags":{"name":"Provincial","amenity":"bank"},"name":"Provincial","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Public Bank":{"tags":{"name":"Public Bank","amenity":"bank"},"name":"Public Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Punjab National Bank":{"tags":{"name":"Punjab National Bank","amenity":"bank"},"name":"Punjab National Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RBC":{"tags":{"name":"RBC","amenity":"bank"},"name":"RBC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RBC Financial Group":{"tags":{"name":"RBC Financial Group","amenity":"bank"},"name":"RBC Financial Group","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RBS":{"tags":{"name":"RBS","amenity":"bank"},"name":"RBS","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RCBC":{"tags":{"name":"RCBC","amenity":"bank"},"name":"RCBC","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RCBC Savings Bank":{"tags":{"name":"RCBC Savings Bank","amenity":"bank"},"name":"RCBC Savings Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Rabobank":{"tags":{"name":"Rabobank","amenity":"bank"},"name":"Rabobank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Raiffeisen Polbank":{"tags":{"name":"Raiffeisen Polbank","amenity":"bank"},"name":"Raiffeisen Polbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Raiffeisenbank":{"tags":{"name":"Raiffeisenbank","amenity":"bank"},"name":"Raiffeisenbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Regions Bank":{"tags":{"name":"Regions Bank","amenity":"bank"},"name":"Regions Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Republic Bank":{"tags":{"name":"Republic Bank","amenity":"bank"},"name":"Republic Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Royal Bank":{"tags":{"name":"Royal Bank","amenity":"bank"},"name":"Royal Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Royal Bank of Canada":{"tags":{"name":"Royal Bank of Canada","amenity":"bank"},"name":"Royal Bank of Canada","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Royal Bank of Scotland":{"tags":{"name":"Royal Bank of Scotland","amenity":"bank"},"name":"Royal Bank of Scotland","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/SEB":{"tags":{"name":"SEB","amenity":"bank"},"name":"SEB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/SNS Bank":{"tags":{"name":"SNS Bank","amenity":"bank"},"name":"SNS Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sabadell":{"tags":{"name":"Sabadell","amenity":"bank"},"name":"Sabadell","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sampath Bank":{"tags":{"name":"Sampath Bank","amenity":"bank"},"name":"Sampath Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander":{"tags":{"name":"Santander","amenity":"bank"},"name":"Santander","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander Consumer Bank":{"tags":{"name":"Santander Consumer Bank","amenity":"bank"},"name":"Santander Consumer Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander Río":{"tags":{"name":"Santander Río","amenity":"bank"},"name":"Santander Río","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander Totta":{"tags":{"name":"Santander Totta","amenity":"bank"},"name":"Santander Totta","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sberbank":{"tags":{"name":"Sberbank","amenity":"bank"},"name":"Sberbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Scotiabank":{"tags":{"name":"Scotiabank","amenity":"bank"},"name":"Scotiabank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Security Bank":{"tags":{"name":"Security Bank","amenity":"bank"},"name":"Security Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sicredi":{"tags":{"name":"Sicredi","amenity":"bank"},"name":"Sicredi","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Slovenská sporiteľňa":{"tags":{"name":"Slovenská sporiteľňa","amenity":"bank"},"name":"Slovenská sporiteľňa","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Société Générale":{"tags":{"name":"Société Générale","amenity":"bank"},"name":"Société Générale","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparda-Bank":{"tags":{"name":"Sparda-Bank","amenity":"bank"},"name":"Sparda-Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparkasse":{"tags":{"name":"Sparkasse","amenity":"bank"},"name":"Sparkasse","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparkasse Aachen":{"tags":{"name":"Sparkasse Aachen","amenity":"bank"},"name":"Sparkasse Aachen","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparkasse KölnBonn":{"tags":{"name":"Sparkasse KölnBonn","amenity":"bank"},"name":"Sparkasse KölnBonn","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Stadtsparkasse":{"tags":{"name":"Stadtsparkasse","amenity":"bank"},"name":"Stadtsparkasse","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Stanbic Bank":{"tags":{"name":"Stanbic Bank","amenity":"bank"},"name":"Stanbic Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Standard Bank":{"tags":{"name":"Standard Bank","amenity":"bank"},"name":"Standard Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Standard Chartered":{"tags":{"name":"Standard Chartered","amenity":"bank"},"name":"Standard Chartered","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Standard Chartered Bank":{"tags":{"name":"Standard Chartered Bank","amenity":"bank"},"name":"Standard Chartered Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/State Bank of India":{"tags":{"name":"State Bank of India","amenity":"bank"},"name":"State Bank of India","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/SunTrust":{"tags":{"name":"SunTrust","amenity":"bank"},"name":"SunTrust","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Supervielle":{"tags":{"name":"Supervielle","amenity":"bank"},"name":"Supervielle","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Swedbank":{"tags":{"name":"Swedbank","amenity":"bank"},"name":"Swedbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Syndicate Bank":{"tags":{"name":"Syndicate Bank","amenity":"bank"},"name":"Syndicate Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TCF Bank":{"tags":{"name":"TCF Bank","amenity":"bank"},"name":"TCF Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TD Bank":{"tags":{"name":"TD Bank","amenity":"bank"},"name":"TD Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TD Canada Trust":{"tags":{"name":"TD Canada Trust","amenity":"bank"},"name":"TD Canada Trust","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TEB":{"tags":{"name":"TEB","amenity":"bank"},"name":"TEB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TSB":{"tags":{"name":"TSB","amenity":"bank"},"name":"TSB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Takarékszövetkezet":{"tags":{"name":"Takarékszövetkezet","amenity":"bank"},"name":"Takarékszövetkezet","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Targobank":{"tags":{"name":"Targobank","amenity":"bank"},"name":"Targobank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Tatra banka":{"tags":{"name":"Tatra banka","amenity":"bank"},"name":"Tatra banka","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Türkiye İş Bankası":{"tags":{"name":"Türkiye İş Bankası","amenity":"bank"},"name":"Türkiye İş Bankası","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UBS":{"tags":{"name":"UBS","amenity":"bank"},"name":"UBS","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UCO Bank":{"tags":{"name":"UCO Bank","amenity":"bank"},"name":"UCO Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UCPB":{"tags":{"name":"UCPB","amenity":"bank"},"name":"UCPB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UOB":{"tags":{"name":"UOB","amenity":"bank"},"name":"UOB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/US Bank":{"tags":{"name":"US Bank","amenity":"bank"},"name":"US Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ulster Bank":{"tags":{"name":"Ulster Bank","amenity":"bank"},"name":"Ulster Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Umpqua Bank":{"tags":{"name":"Umpqua Bank","amenity":"bank"},"name":"Umpqua Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UniCredit Bank":{"tags":{"name":"UniCredit Bank","amenity":"bank"},"name":"UniCredit Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Unicaja Banco":{"tags":{"name":"Unicaja Banco","amenity":"bank"},"name":"Unicaja Banco","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Unicredit Banca":{"tags":{"name":"Unicredit Banca","amenity":"bank"},"name":"Unicredit Banca","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Union Bank":{"tags":{"name":"Union Bank","amenity":"bank"},"name":"Union Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/United Bank":{"tags":{"name":"United Bank","amenity":"bank"},"name":"United Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/VR-Bank":{"tags":{"name":"VR-Bank","amenity":"bank"},"name":"VR-Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Vakıfbank":{"tags":{"name":"Vakıfbank","amenity":"bank"},"name":"Vakıfbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Veneto Banca":{"tags":{"name":"Veneto Banca","amenity":"bank"},"name":"Veneto Banca","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Vijaya Bank":{"tags":{"name":"Vijaya Bank","amenity":"bank"},"name":"Vijaya Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Volks- und Raiffeisenbank":{"tags":{"name":"Volks- und Raiffeisenbank","amenity":"bank"},"name":"Volks- und Raiffeisenbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Volksbank":{"tags":{"name":"Volksbank","amenity":"bank"},"name":"Volksbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Volksbank Mittelhessen":{"tags":{"name":"Volksbank Mittelhessen","amenity":"bank"},"name":"Volksbank Mittelhessen","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Volksbank Raiffeisenbank":{"tags":{"name":"Volksbank Raiffeisenbank","amenity":"bank"},"name":"Volksbank Raiffeisenbank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/VÚB":{"tags":{"name":"VÚB","amenity":"bank"},"name":"VÚB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Washington Federal":{"tags":{"name":"Washington Federal","amenity":"bank"},"name":"Washington Federal","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Wells Fargo":{"tags":{"name":"Wells Fargo","amenity":"bank"},"name":"Wells Fargo","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Western Union":{"tags":{"name":"Western Union","amenity":"bank"},"name":"Western Union","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Westpac":{"tags":{"name":"Westpac","amenity":"bank"},"name":"Westpac","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Yorkshire Bank":{"tags":{"name":"Yorkshire Bank","amenity":"bank"},"name":"Yorkshire Bank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Yorkshire Building Society":{"tags":{"name":"Yorkshire Building Society","amenity":"bank"},"name":"Yorkshire Building Society","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Zagrebačka banka":{"tags":{"name":"Zagrebačka banka","amenity":"bank"},"name":"Zagrebačka banka","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ziraat Bankası":{"tags":{"name":"Ziraat Bankası","amenity":"bank"},"name":"Ziraat Bankası","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/mBank":{"tags":{"name":"mBank","amenity":"bank"},"name":"mBank","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ČSOB":{"tags":{"name":"ČSOB","amenity":"bank"},"name":"ČSOB","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Česká spořitelna":{"tags":{"name":"Česká spořitelna","amenity":"bank"},"name":"Česká spořitelna","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/İş Bankası":{"tags":{"name":"İş Bankası","amenity":"bank"},"name":"İş Bankası","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Εθνική Τράπεζα":{"tags":{"name":"Εθνική Τράπεζα","amenity":"bank"},"name":"Εθνική Τράπεζα","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Πειραιώς":{"tags":{"name":"Πειραιώς","amenity":"bank"},"name":"Πειραιώς","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Τράπεζα Πειραιώς":{"tags":{"name":"Τράπεζα Πειραιώς","amenity":"bank"},"name":"Τράπεζα Πειραιώς","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Авангард":{"tags":{"name":"Авангард","amenity":"bank"},"name":"Авангард","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Альфа-Банк":{"tags":{"name":"Альфа-Банк","amenity":"bank"},"name":"Альфа-Банк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Банк Москвы":{"tags":{"name":"Банк Москвы","amenity":"bank"},"name":"Банк Москвы","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Банка ДСК":{"tags":{"name":"Банка ДСК","amenity":"bank"},"name":"Банка ДСК","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Белагропромбанк":{"tags":{"name":"Белагропромбанк","amenity":"bank"},"name":"Белагропромбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Беларусбанк":{"tags":{"name":"Беларусбанк","amenity":"bank"},"name":"Беларусбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Белинвестбанк":{"tags":{"name":"Белинвестбанк","amenity":"bank"},"name":"Белинвестбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Бинбанк":{"tags":{"name":"Бинбанк","amenity":"bank"},"name":"Бинбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ВТБ":{"tags":{"name":"ВТБ","amenity":"bank"},"name":"ВТБ","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ВТБ24":{"tags":{"name":"ВТБ24","amenity":"bank"},"name":"ВТБ24","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Возрождение":{"tags":{"name":"Возрождение","amenity":"bank"},"name":"Возрождение","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Газпромбанк":{"tags":{"name":"Газпромбанк","amenity":"bank"},"name":"Газпромбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Генбанк":{"tags":{"name":"Генбанк","amenity":"bank"},"name":"Генбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Казкоммерцбанк":{"tags":{"name":"Казкоммерцбанк","amenity":"bank"},"name":"Казкоммерцбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/МДМ Банк":{"tags":{"name":"МДМ Банк","amenity":"bank"},"name":"МДМ Банк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Московский индустриальный банк":{"tags":{"name":"Московский индустриальный банк","amenity":"bank"},"name":"Московский индустриальный банк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Мособлбанк":{"tags":{"name":"Мособлбанк","amenity":"bank"},"name":"Мособлбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Народный банк":{"tags":{"name":"Народный банк","amenity":"bank"},"name":"Народный банк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ОТП Банк":{"tags":{"name":"ОТП Банк","amenity":"bank"},"name":"ОТП Банк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Открытие":{"tags":{"name":"Открытие","amenity":"bank"},"name":"Открытие","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ощадбанк":{"tags":{"name":"Ощадбанк","amenity":"bank"},"name":"Ощадбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ПУМБ":{"tags":{"name":"ПУМБ","amenity":"bank"},"name":"ПУМБ","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Почта Банк":{"tags":{"name":"Почта Банк","amenity":"bank"},"name":"Почта Банк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ПриватБанк":{"tags":{"name":"ПриватБанк","amenity":"bank"},"name":"ПриватБанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Приватбанк":{"tags":{"name":"Приватбанк","amenity":"bank"},"name":"Приватбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Приднестровский Сбербанк":{"tags":{"name":"Приднестровский Сбербанк","amenity":"bank"},"name":"Приднестровский Сбербанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Приорбанк":{"tags":{"name":"Приорбанк","amenity":"bank"},"name":"Приорбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Промсвязьбанк":{"tags":{"name":"Промсвязьбанк","amenity":"bank"},"name":"Промсвязьбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/РНКБ":{"tags":{"name":"РНКБ","amenity":"bank"},"name":"РНКБ","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Райффайзен":{"tags":{"name":"Райффайзен","amenity":"bank"},"name":"Райффайзен","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Райффайзен Банк Аваль":{"tags":{"name":"Райффайзен Банк Аваль","amenity":"bank"},"name":"Райффайзен Банк Аваль","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Райффайзенбанк":{"tags":{"name":"Райффайзенбанк","amenity":"bank"},"name":"Райффайзенбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Росбанк":{"tags":{"name":"Росбанк","amenity":"bank"},"name":"Росбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Россельхозбанк":{"tags":{"name":"Россельхозбанк","amenity":"bank"},"name":"Россельхозбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Русский стандарт":{"tags":{"name":"Русский стандарт","amenity":"bank"},"name":"Русский стандарт","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Сбербанк":{"tags":{"name":"Сбербанк","amenity":"bank"},"name":"Сбербанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Совкомбанк":{"tags":{"name":"Совкомбанк","amenity":"bank"},"name":"Совкомбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/УкрСиббанк":{"tags":{"name":"УкрСиббанк","amenity":"bank"},"name":"УкрСиббанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Укрсоцбанк":{"tags":{"name":"Укрсоцбанк","amenity":"bank"},"name":"Укрсоцбанк","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Уралсиб":{"tags":{"name":"Уралсиб","amenity":"bank"},"name":"Уралсиб","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Хоум Кредит":{"tags":{"name":"Хоум Кредит","amenity":"bank"},"name":"Хоум Кредит","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/בנק הפועלים":{"tags":{"name":"בנק הפועלים","amenity":"bank"},"name":"בנק הפועלים","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/בנק לאומי":{"tags":{"name":"בנק לאומי","amenity":"bank"},"name":"בנק לאומי","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک":{"tags":{"name":"بانک","amenity":"bank"},"name":"بانک","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک آینده":{"tags":{"name":"بانک آینده","amenity":"bank"},"name":"بانک آینده","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک اقتصاد نوین":{"tags":{"name":"بانک اقتصاد نوین","amenity":"bank"},"name":"بانک اقتصاد نوین","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک انصار":{"tags":{"name":"بانک انصار","amenity":"bank"},"name":"بانک انصار","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک تجارت":{"tags":{"name":"بانک تجارت","amenity":"bank"},"name":"بانک تجارت","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک رفاه":{"tags":{"name":"بانک رفاه","amenity":"bank"},"name":"بانک رفاه","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک رفاه کارگران":{"tags":{"name":"بانک رفاه کارگران","amenity":"bank"},"name":"بانک رفاه کارگران","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک سپه":{"tags":{"name":"بانک سپه","amenity":"bank"},"name":"بانک سپه","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک شهر":{"tags":{"name":"بانک شهر","amenity":"bank"},"name":"بانک شهر","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک صادرات":{"tags":{"name":"بانک صادرات","amenity":"bank"},"name":"بانک صادرات","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک قوامین":{"tags":{"name":"بانک قوامین","amenity":"bank"},"name":"بانک قوامین","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک مسکن":{"tags":{"name":"بانک مسکن","amenity":"bank"},"name":"بانک مسکن","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک ملت":{"tags":{"name":"بانک ملت","amenity":"bank"},"name":"بانک ملت","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک ملی":{"tags":{"name":"بانک ملی","amenity":"bank"},"name":"بانک ملی","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک ملی ایران":{"tags":{"name":"بانک ملی ایران","amenity":"bank"},"name":"بانک ملی ایران","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک مهر اقتصاد":{"tags":{"name":"بانک مهر اقتصاد","amenity":"bank"},"name":"بانک مهر اقتصاد","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک پارسیان":{"tags":{"name":"بانک پارسیان","amenity":"bank"},"name":"بانک پارسیان","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک پاسارگاد":{"tags":{"name":"بانک پاسارگاد","amenity":"bank"},"name":"بانک پاسارگاد","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/بانک کشاورزی":{"tags":{"name":"بانک کشاورزی","amenity":"bank"},"name":"بانک کشاورزی","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/صادرات":{"tags":{"name":"صادرات","amenity":"bank"},"name":"صادرات","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ملی":{"tags":{"name":"ملی","amenity":"bank"},"name":"ملی","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/پست بانک":{"tags":{"name":"پست بانک","amenity":"bank"},"name":"پست بانک","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ธนาคารกรุงเทพ":{"tags":{"name":"ธนาคารกรุงเทพ","amenity":"bank"},"name":"ธนาคารกรุงเทพ","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ธนาคารกรุงไทย":{"tags":{"name":"ธนาคารกรุงไทย","amenity":"bank"},"name":"ธนาคารกรุงไทย","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ธนาคารกสิกรไทย":{"tags":{"name":"ธนาคารกสิกรไทย","amenity":"bank"},"name":"ธนาคารกสิกรไทย","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ธนาคารออมสิน":{"tags":{"name":"ธนาคารออมสิน","amenity":"bank"},"name":"ธนาคารออมสิน","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ธนาคารไทยพาณิชย์":{"tags":{"name":"ธนาคารไทยพาณิชย์","amenity":"bank"},"name":"ธนาคารไทยพาณิชย์","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/みずほ銀行":{"tags":{"name":"みずほ銀行","amenity":"bank"},"name":"みずほ銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/りそな銀行":{"tags":{"name":"りそな銀行","amenity":"bank"},"name":"りそな銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/三井住友銀行":{"tags":{"name":"三井住友銀行","amenity":"bank"},"name":"三井住友銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/三菱東京UFJ銀行":{"tags":{"name":"三菱東京UFJ銀行","amenity":"bank"},"name":"三菱東京UFJ銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国农业银行":{"tags":{"name":"中国农业银行","amenity":"bank"},"name":"中国农业银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国工商银行":{"tags":{"name":"中国工商银行","amenity":"bank"},"name":"中国工商银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国建设银行":{"tags":{"name":"中国建设银行","amenity":"bank"},"name":"中国建设银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国邮政储蓄银行":{"tags":{"name":"中国邮政储蓄银行","amenity":"bank"},"name":"中国邮政储蓄银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国银行":{"tags":{"name":"中国银行","amenity":"bank"},"name":"中国银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/交通银行":{"tags":{"name":"交通银行","amenity":"bank"},"name":"交通银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/京都中央信用金庫":{"tags":{"name":"京都中央信用金庫","amenity":"bank"},"name":"京都中央信用金庫","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/京都銀行":{"tags":{"name":"京都銀行","amenity":"bank"},"name":"京都銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/农业银行":{"tags":{"name":"农业银行","amenity":"bank"},"name":"农业银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/北海道銀行":{"tags":{"name":"北海道銀行","amenity":"bank"},"name":"北海道銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/合作金庫銀行":{"tags":{"name":"合作金庫銀行","amenity":"bank"},"name":"合作金庫銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/土地銀行":{"tags":{"name":"土地銀行","amenity":"bank"},"name":"土地銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/工商银行":{"tags":{"name":"工商银行","amenity":"bank"},"name":"工商银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/建设银行":{"tags":{"name":"建设银行","amenity":"bank"},"name":"建设银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/彰化銀行":{"tags":{"name":"彰化銀行","amenity":"bank"},"name":"彰化銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/招商银行":{"tags":{"name":"招商银行","amenity":"bank"},"name":"招商银行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/横浜銀行":{"tags":{"name":"横浜銀行","amenity":"bank"},"name":"横浜銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/第一銀行":{"tags":{"name":"第一銀行","amenity":"bank"},"name":"第一銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/華南銀行":{"tags":{"name":"華南銀行","amenity":"bank"},"name":"華南銀行","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/국민은행":{"tags":{"name":"국민은행","name:en":"Gungmin Bank","amenity":"bank"},"name":"국민은행","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/기업은행":{"tags":{"name":"기업은행","amenity":"bank"},"name":"기업은행","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/농협":{"tags":{"name":"농협","amenity":"bank"},"name":"농협","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/새마을금고":{"tags":{"name":"새마을금고","amenity":"bank"},"name":"새마을금고","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/신한은행":{"tags":{"name":"신한은행","name:en":"Sinhan Bank","amenity":"bank"},"name":"신한은행","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/우리은행":{"tags":{"name":"우리은행","name:en":"Uri Bank","amenity":"bank"},"name":"우리은행","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/하나은행":{"tags":{"name":"하나은행","amenity":"bank"},"name":"하나은행","icon":"bank","geometry":["point","area"],"fields":["name","atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bar/Bar Centrale":{"tags":{"name":"Bar Centrale","amenity":"bar"},"name":"Bar Centrale","icon":"bar","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/bar/Bar Sport":{"tags":{"name":"Bar Sport","amenity":"bar"},"name":"Bar Sport","icon":"bar","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/bar/Beach Bar":{"tags":{"name":"Beach Bar","amenity":"bar"},"name":"Beach Bar","icon":"bar","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/bar/Pool Bar":{"tags":{"name":"Pool Bar","amenity":"bar"},"name":"Pool Bar","icon":"bar","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/bicycle_rental/Bicing":{"tags":{"name":"Bicing","amenity":"bicycle_rental"},"name":"Bicing","icon":"bicycle","geometry":["point","vertex","area"],"fields":["capacity","network","operator","payment_multi"],"suggestion":true},"amenity/bicycle_rental/Call a Bike":{"tags":{"name":"Call a Bike","amenity":"bicycle_rental"},"name":"Call a Bike","icon":"bicycle","geometry":["point","vertex","area"],"fields":["capacity","network","operator","payment_multi"],"suggestion":true},"amenity/bicycle_rental/Grid":{"tags":{"name":"Grid","amenity":"bicycle_rental"},"name":"Grid","icon":"bicycle","geometry":["point","vertex","area"],"fields":["capacity","network","operator","payment_multi"],"suggestion":true},"amenity/bicycle_rental/Mibici":{"tags":{"name":"Mibici","amenity":"bicycle_rental"},"name":"Mibici","icon":"bicycle","geometry":["point","vertex","area"],"fields":["capacity","network","operator","payment_multi"],"suggestion":true},"amenity/bicycle_rental/metropolradruhr":{"tags":{"name":"metropolradruhr","amenity":"bicycle_rental"},"name":"metropolradruhr","icon":"bicycle","geometry":["point","vertex","area"],"fields":["capacity","network","operator","payment_multi"],"suggestion":true},"amenity/bureau_de_change/Abitab":{"tags":{"name":"Abitab","amenity":"bureau_de_change"},"name":"Abitab","icon":"bank","geometry":["point","area"],"fields":["name","currency_multi","operator","address","building_area","opening_hours"],"suggestion":true},"amenity/bureau_de_change/Change":{"tags":{"name":"Change","amenity":"bureau_de_change"},"name":"Change","icon":"bank","geometry":["point","area"],"fields":["name","currency_multi","operator","address","building_area","opening_hours"],"suggestion":true},"amenity/bureau_de_change/Travelex":{"tags":{"name":"Travelex","amenity":"bureau_de_change"},"name":"Travelex","icon":"bank","geometry":["point","area"],"fields":["name","currency_multi","operator","address","building_area","opening_hours"],"suggestion":true},"amenity/cafe/85度C":{"tags":{"name":"85度C","amenity":"cafe"},"name":"85度C","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Bar Kafe":{"tags":{"name":"Bar Kafe","amenity":"cafe"},"name":"Bar Kafe","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Barista":{"tags":{"name":"Barista","amenity":"cafe"},"name":"Barista","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Bonafide":{"tags":{"name":"Bonafide","amenity":"cafe"},"name":"Bonafide","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafe Coffee Day":{"tags":{"name":"Cafe Coffee Day","amenity":"cafe"},"name":"Cafe Coffee Day","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafe Nero":{"tags":{"name":"Cafe Nero","amenity":"cafe"},"name":"Cafe Nero","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafeteria":{"tags":{"name":"Cafeteria","amenity":"cafe"},"name":"Cafeteria","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafetería":{"tags":{"name":"Cafetería","amenity":"cafe"},"name":"Cafetería","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Caffè Nero":{"tags":{"name":"Caffè Nero","amenity":"cafe"},"name":"Caffè Nero","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Café Amazon":{"tags":{"name":"Café Amazon","amenity":"cafe"},"name":"Café Amazon","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Café Central":{"tags":{"name":"Café Central","amenity":"cafe"},"name":"Café Central","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Café de la Place":{"tags":{"name":"Café de la Place","amenity":"cafe"},"name":"Café de la Place","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Café des Sports":{"tags":{"name":"Café des Sports","amenity":"cafe"},"name":"Café des Sports","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Caribou Coffee":{"tags":{"name":"Caribou Coffee","amenity":"cafe"},"name":"Caribou Coffee","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Coffee Fellows":{"tags":{"name":"Coffee Fellows","amenity":"cafe"},"name":"Coffee Fellows","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Coffee House":{"tags":{"name":"Coffee House","amenity":"cafe"},"name":"Coffee House","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Coffee Island":{"tags":{"name":"Coffee Island","amenity":"cafe"},"name":"Coffee Island","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Coffee Time":{"tags":{"name":"Coffee Time","amenity":"cafe"},"name":"Coffee Time","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Costa":{"tags":{"name":"Costa","amenity":"cafe"},"name":"Costa","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Country Style":{"tags":{"name":"Country Style","amenity":"cafe"},"name":"Country Style","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Dunkin' Donuts":{"tags":{"name":"Dunkin' Donuts","cuisine":"donut","amenity":"cafe"},"name":"Dunkin' Donuts","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Eiscafe Dolomiti":{"tags":{"name":"Eiscafe Dolomiti","amenity":"cafe"},"name":"Eiscafe Dolomiti","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Eiscafe Venezia":{"tags":{"name":"Eiscafe Venezia","amenity":"cafe"},"name":"Eiscafe Venezia","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Espresso House":{"tags":{"name":"Espresso House","amenity":"cafe"},"name":"Espresso House","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Havanna":{"tags":{"name":"Havanna","amenity":"cafe"},"name":"Havanna","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Internet Cafe":{"tags":{"name":"Internet Cafe","amenity":"cafe"},"name":"Internet Cafe","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Kafe":{"tags":{"name":"Kafe","amenity":"cafe"},"name":"Kafe","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Krispy Kreme":{"tags":{"name":"Krispy Kreme","amenity":"cafe"},"name":"Krispy Kreme","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Le Pain Quotidien":{"tags":{"name":"Le Pain Quotidien","amenity":"cafe"},"name":"Le Pain Quotidien","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/McCafé":{"tags":{"name":"McCafé","amenity":"cafe","cuisine":"coffee_shop"},"name":"McCafé","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Peet's Coffee & Tea":{"tags":{"name":"Peet's Coffee & Tea","amenity":"cafe"},"name":"Peet's Coffee & Tea","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Pret A Manger":{"tags":{"name":"Pret A Manger","amenity":"cafe"},"name":"Pret A Manger","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Prime":{"tags":{"name":"Prime","amenity":"cafe"},"name":"Prime","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Second Cup":{"tags":{"name":"Second Cup","amenity":"cafe"},"name":"Second Cup","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Segafredo":{"tags":{"name":"Segafredo","amenity":"cafe"},"name":"Segafredo","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Starbucks":{"tags":{"name":"Starbucks","cuisine":"coffee_shop","amenity":"cafe"},"name":"Starbucks","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/The Coffee Bean & Tea Leaf":{"tags":{"name":"The Coffee Bean & Tea Leaf","amenity":"cafe"},"name":"The Coffee Bean & Tea Leaf","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/The Coffee Club":{"tags":{"name":"The Coffee Club","amenity":"cafe"},"name":"The Coffee Club","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Tim Hortons":{"tags":{"name":"Tim Hortons","amenity":"cafe"},"name":"Tim Hortons","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Traveler's Coffee":{"tags":{"name":"Traveler's Coffee","amenity":"cafe"},"name":"Traveler's Coffee","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Wayne's Coffee":{"tags":{"name":"Wayne's Coffee","amenity":"cafe"},"name":"Wayne's Coffee","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Бистро":{"tags":{"name":"Бистро","amenity":"cafe"},"name":"Бистро","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Буфет":{"tags":{"name":"Буфет","amenity":"cafe"},"name":"Буфет","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Встреча":{"tags":{"name":"Встреча","amenity":"cafe"},"name":"Встреча","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Даблби":{"tags":{"name":"Даблби","amenity":"cafe"},"name":"Даблби","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Закусочная":{"tags":{"name":"Закусочная","amenity":"cafe"},"name":"Закусочная","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Кофе Хауз":{"tags":{"name":"Кофе Хауз","amenity":"cafe"},"name":"Кофе Хауз","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Кофейня":{"tags":{"name":"Кофейня","amenity":"cafe"},"name":"Кофейня","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Лакомка":{"tags":{"name":"Лакомка","amenity":"cafe"},"name":"Лакомка","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Летнее кафе":{"tags":{"name":"Летнее кафе","amenity":"cafe"},"name":"Летнее кафе","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Пельменная":{"tags":{"name":"Пельменная","amenity":"cafe"},"name":"Пельменная","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Пиццерия":{"tags":{"name":"Пиццерия","amenity":"cafe"},"name":"Пиццерия","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Рандеву":{"tags":{"name":"Рандеву","amenity":"cafe"},"name":"Рандеву","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Сказка":{"tags":{"name":"Сказка","amenity":"cafe"},"name":"Сказка","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Старбакс":{"tags":{"name":"Старбакс","amenity":"cafe"},"name":"Старбакс","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Столовая":{"tags":{"name":"Столовая","amenity":"cafe"},"name":"Столовая","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Уют":{"tags":{"name":"Уют","amenity":"cafe"},"name":"Уют","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Хуторок":{"tags":{"name":"Хуторок","amenity":"cafe"},"name":"Хуторок","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Шашлычная":{"tags":{"name":"Шашлычная","amenity":"cafe"},"name":"Шашлычная","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Шоколад":{"tags":{"name":"Шоколад","amenity":"cafe"},"name":"Шоколад","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Шоколадница":{"tags":{"name":"Шоколадница","amenity":"cafe"},"name":"Шоколадница","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/ארומה":{"tags":{"name":"ארומה","amenity":"cafe"},"name":"ארומה","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/مقهى":{"tags":{"name":"مقهى","amenity":"cafe"},"name":"مقهى","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/คาเฟ่ อเมซอน":{"tags":{"name":"คาเฟ่ อเมซอน","amenity":"cafe"},"name":"คาเฟ่ อเมซอน","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/エクセルシオール カフェ":{"tags":{"name":"エクセルシオール カフェ","amenity":"cafe"},"name":"エクセルシオール カフェ","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/カフェ・ド・クリエ":{"tags":{"name":"カフェ・ド・クリエ","name:en":"Cafe de CRIE","amenity":"cafe"},"name":"カフェ・ド・クリエ","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/カフェ・ベローチェ":{"tags":{"name":"カフェ・ベローチェ","amenity":"cafe"},"name":"カフェ・ベローチェ","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/コメダ珈琲店":{"tags":{"name":"コメダ珈琲店","amenity":"cafe"},"name":"コメダ珈琲店","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/サンマルクカフェ":{"tags":{"name":"サンマルクカフェ","amenity":"cafe"},"name":"サンマルクカフェ","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/スターバックス":{"tags":{"name":"スターバックス","name:en":"Starbucks","amenity":"cafe"},"name":"スターバックス","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/タリーズコーヒー":{"tags":{"name":"タリーズコーヒー","amenity":"cafe"},"name":"タリーズコーヒー","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/ドトールコーヒーショップ":{"tags":{"name":"ドトールコーヒーショップ","amenity":"cafe"},"name":"ドトールコーヒーショップ","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/星巴克":{"tags":{"name":"星巴克","amenity":"cafe"},"name":"星巴克","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/스타벅스":{"tags":{"name":"스타벅스","amenity":"cafe"},"name":"스타벅스","icon":"cafe","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/car_rental/Alamo":{"tags":{"name":"Alamo","amenity":"car_rental"},"name":"Alamo","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Avis":{"tags":{"name":"Avis","amenity":"car_rental"},"name":"Avis","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Budget":{"tags":{"name":"Budget","amenity":"car_rental"},"name":"Budget","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Enterprise":{"tags":{"name":"Enterprise","amenity":"car_rental"},"name":"Enterprise","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Enterprise Rent-a-Car":{"tags":{"name":"Enterprise Rent-a-Car","amenity":"car_rental"},"name":"Enterprise Rent-a-Car","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Europcar":{"tags":{"name":"Europcar","amenity":"car_rental"},"name":"Europcar","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Hertz":{"tags":{"name":"Hertz","amenity":"car_rental"},"name":"Hertz","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Localiza":{"tags":{"name":"Localiza","amenity":"car_rental"},"name":"Localiza","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Sixt":{"tags":{"name":"Sixt","amenity":"car_rental"},"name":"Sixt","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/Thrifty":{"tags":{"name":"Thrifty","amenity":"car_rental"},"name":"Thrifty","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/U-Haul":{"tags":{"name":"U-Haul","amenity":"car_rental"},"name":"U-Haul","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/オリックスレンタカー":{"tags":{"name":"オリックスレンタカー","amenity":"car_rental"},"name":"オリックスレンタカー","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/トヨタレンタカー":{"tags":{"name":"トヨタレンタカー","amenity":"car_rental"},"name":"トヨタレンタカー","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/トヨタレンタリース":{"tags":{"name":"トヨタレンタリース","amenity":"car_rental"},"name":"トヨタレンタリース","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_rental/ニッポンレンタカー":{"tags":{"name":"ニッポンレンタカー","amenity":"car_rental"},"name":"ニッポンレンタカー","icon":"car","geometry":["point","area"],"fields":["name","operator","payment_multi"],"suggestion":true},"amenity/car_wash/Autolavaggio":{"tags":{"name":"Autolavaggio","amenity":"car_wash"},"name":"Autolavaggio","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/H-E-B Car Wash":{"tags":{"name":"H-E-B Car Wash","amenity":"car_wash"},"name":"H-E-B Car Wash","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Lavage Auto":{"tags":{"name":"Lavage Auto","amenity":"car_wash"},"name":"Lavage Auto","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Lavazh":{"tags":{"name":"Lavazh","amenity":"car_wash"},"name":"Lavazh","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Myjnia":{"tags":{"name":"Myjnia","amenity":"car_wash"},"name":"Myjnia","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Myjnia bezdotykowa":{"tags":{"name":"Myjnia bezdotykowa","amenity":"car_wash"},"name":"Myjnia bezdotykowa","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Myjnia samochodowa":{"tags":{"name":"Myjnia samochodowa","amenity":"car_wash"},"name":"Myjnia samochodowa","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Spălătorie Auto":{"tags":{"name":"Spălătorie Auto","amenity":"car_wash"},"name":"Spălătorie Auto","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Spălătorie auto":{"tags":{"name":"Spălătorie auto","amenity":"car_wash"},"name":"Spălătorie auto","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/car_wash/Автомийка":{"tags":{"name":"Автомийка","amenity":"car_wash"},"name":"Автомийка","icon":"car","geometry":["point","area"],"fields":["address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/cinema/Cinema City":{"tags":{"name":"Cinema City","amenity":"cinema"},"name":"Cinema City","icon":"cinema","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/cinema/Cinemark":{"tags":{"name":"Cinemark","amenity":"cinema"},"name":"Cinemark","icon":"cinema","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/cinema/Cinemex":{"tags":{"name":"Cinemex","amenity":"cinema"},"name":"Cinemex","icon":"cinema","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/cinema/Cinepolis":{"tags":{"name":"Cinepolis","amenity":"cinema"},"name":"Cinepolis","icon":"cinema","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/cinema/Cineworld":{"tags":{"name":"Cineworld","amenity":"cinema"},"name":"Cineworld","icon":"cinema","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/cinema/Odeon":{"tags":{"name":"Odeon","amenity":"cinema"},"name":"Odeon","icon":"cinema","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/clinic/ФАП":{"tags":{"name":"ФАП","healthcare":"clinic","amenity":"clinic"},"name":"ФАП","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/dentist/Aspen Dental":{"tags":{"name":"Aspen Dental","healthcare":"dentist","amenity":"dentist"},"name":"Aspen Dental","icon":"dentist","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/dentist/Family Dentistry":{"tags":{"name":"Family Dentistry","healthcare":"dentist","amenity":"dentist"},"name":"Family Dentistry","icon":"dentist","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/dentist/Vitaldent":{"tags":{"name":"Vitaldent","healthcare":"dentist","amenity":"dentist"},"name":"Vitaldent","icon":"dentist","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/dentist/Стоматолог":{"tags":{"name":"Стоматолог","healthcare":"dentist","amenity":"dentist"},"name":"Стоматолог","icon":"dentist","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/dentist/Стоматологія":{"tags":{"name":"Стоматологія","healthcare":"dentist","amenity":"dentist"},"name":"Стоматологія","icon":"dentist","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/doctors/Háziorvosi rendelő":{"tags":{"name":"Háziorvosi rendelő","healthcare":"doctor","amenity":"doctors"},"name":"Háziorvosi rendelő","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/doctors/Инвитро":{"tags":{"name":"Инвитро","healthcare":"doctor","amenity":"doctors"},"name":"Инвитро","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","building_area","opening_hours"],"suggestion":true},"amenity/driving_school/Автодром":{"tags":{"name":"Автодром","amenity":"driving_school"},"name":"Автодром","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"amenity/fast_food/A&W":{"tags":{"name":"A&W","amenity":"fast_food"},"name":"A&W","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Ali Baba":{"tags":{"name":"Ali Baba","amenity":"fast_food"},"name":"Ali Baba","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Angel's Burger":{"tags":{"name":"Angel's Burger","amenity":"fast_food"},"name":"Angel's Burger","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Antalya":{"tags":{"name":"Antalya","amenity":"fast_food"},"name":"Antalya","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Arby's":{"tags":{"name":"Arby's","amenity":"fast_food"},"name":"Arby's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Asia Bistro":{"tags":{"name":"Asia Bistro","amenity":"fast_food"},"name":"Asia Bistro","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Asia Wok":{"tags":{"name":"Asia Wok","amenity":"fast_food"},"name":"Asia Wok","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Baskin-Robbins":{"tags":{"name":"Baskin-Robbins","amenity":"fast_food"},"name":"Baskin-Robbins","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Bistro":{"tags":{"name":"Bistro","amenity":"fast_food"},"name":"Bistro","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Bob's":{"tags":{"name":"Bob's","amenity":"fast_food"},"name":"Bob's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Bojangles":{"tags":{"name":"Bojangles","amenity":"fast_food"},"name":"Bojangles","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Booster Juice":{"tags":{"name":"Booster Juice","amenity":"fast_food"},"name":"Booster Juice","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Boston Market":{"tags":{"name":"Boston Market","amenity":"fast_food"},"name":"Boston Market","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Braum's":{"tags":{"name":"Braum's","amenity":"fast_food"},"name":"Braum's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Burger King":{"tags":{"name":"Burger King","cuisine":"burger","amenity":"fast_food"},"name":"Burger King","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Burger Machine":{"tags":{"name":"Burger Machine","amenity":"fast_food"},"name":"Burger Machine","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Büfé":{"tags":{"name":"Büfé","amenity":"fast_food"},"name":"Büfé","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Captain D's":{"tags":{"name":"Captain D's","amenity":"fast_food"},"name":"Captain D's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Carl's Jr.":{"tags":{"name":"Carl's Jr.","cuisine":"burger","amenity":"fast_food"},"name":"Carl's Jr.","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chick-fil-A":{"tags":{"name":"Chick-fil-A","cuisine":"chicken","amenity":"fast_food"},"name":"Chick-fil-A","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chicken Express":{"tags":{"name":"Chicken Express","amenity":"fast_food"},"name":"Chicken Express","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chipotle":{"tags":{"name":"Chipotle","cuisine":"mexican","amenity":"fast_food"},"name":"Chipotle","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chowking":{"tags":{"name":"Chowking","amenity":"fast_food"},"name":"Chowking","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Church's Chicken":{"tags":{"name":"Church's Chicken","amenity":"fast_food"},"name":"Church's Chicken","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/CoCo壱番屋":{"tags":{"name":"CoCo壱番屋","amenity":"fast_food"},"name":"CoCo壱番屋","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Cold Stone Creamery":{"tags":{"name":"Cold Stone Creamery","amenity":"fast_food"},"name":"Cold Stone Creamery","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Cook Out":{"tags":{"name":"Cook Out","amenity":"fast_food"},"name":"Cook Out","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Culver's":{"tags":{"name":"Culver's","amenity":"fast_food"},"name":"Culver's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/DQ":{"tags":{"name":"DQ","amenity":"fast_food"},"name":"DQ","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Dairy Queen":{"tags":{"name":"Dairy Queen","amenity":"fast_food"},"name":"Dairy Queen","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Del Taco":{"tags":{"name":"Del Taco","amenity":"fast_food"},"name":"Del Taco","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Domino's Pizza":{"tags":{"name":"Domino's Pizza","cuisine":"pizza","amenity":"fast_food"},"name":"Domino's Pizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/El Pollo Loco":{"tags":{"name":"El Pollo Loco","amenity":"fast_food"},"name":"El Pollo Loco","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Everest":{"tags":{"name":"Everest","amenity":"fast_food"},"name":"Everest","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Extreme Pita":{"tags":{"name":"Extreme Pita","amenity":"fast_food"},"name":"Extreme Pita","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Fazoli's":{"tags":{"name":"Fazoli's","amenity":"fast_food"},"name":"Fazoli's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Firehouse Subs":{"tags":{"name":"Firehouse Subs","amenity":"fast_food"},"name":"Firehouse Subs","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Fish & Chips":{"tags":{"name":"Fish & Chips","amenity":"fast_food"},"name":"Fish & Chips","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Fish and Chips":{"tags":{"name":"Fish and Chips","amenity":"fast_food"},"name":"Fish and Chips","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Five Guys":{"tags":{"name":"Five Guys","amenity":"fast_food"},"name":"Five Guys","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Greenwich":{"tags":{"name":"Greenwich","amenity":"fast_food"},"name":"Greenwich","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Habib's":{"tags":{"name":"Habib's","amenity":"fast_food"},"name":"Habib's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hallo Pizza":{"tags":{"name":"Hallo Pizza","amenity":"fast_food"},"name":"Hallo Pizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hardee's":{"tags":{"name":"Hardee's","cuisine":"burger","amenity":"fast_food"},"name":"Hardee's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Harvey's":{"tags":{"name":"Harvey's","amenity":"fast_food"},"name":"Harvey's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hesburger":{"tags":{"name":"Hesburger","amenity":"fast_food"},"name":"Hesburger","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hungry Jacks":{"tags":{"name":"Hungry Jacks","cuisine":"burger","amenity":"fast_food"},"name":"Hungry Jacks","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/In-N-Out Burger":{"tags":{"name":"In-N-Out Burger","amenity":"fast_food"},"name":"In-N-Out Burger","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Istanbul":{"tags":{"name":"Istanbul","amenity":"fast_food"},"name":"Istanbul","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Istanbul Kebab":{"tags":{"name":"Istanbul Kebab","amenity":"fast_food"},"name":"Istanbul Kebab","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jack in the Box":{"tags":{"name":"Jack in the Box","cuisine":"burger","amenity":"fast_food"},"name":"Jack in the Box","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jamba Juice":{"tags":{"name":"Jamba Juice","amenity":"fast_food"},"name":"Jamba Juice","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jersey Mike's Subs":{"tags":{"name":"Jersey Mike's Subs","amenity":"fast_food"},"name":"Jersey Mike's Subs","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jimmy John's":{"tags":{"name":"Jimmy John's","cuisine":"sandwich","amenity":"fast_food"},"name":"Jimmy John's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jollibee":{"tags":{"name":"Jollibee","amenity":"fast_food"},"name":"Jollibee","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/KFC":{"tags":{"name":"KFC","cuisine":"chicken","amenity":"fast_food"},"name":"KFC","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/KFC/Taco Bell":{"tags":{"name":"KFC/Taco Bell","amenity":"fast_food"},"name":"KFC/Taco Bell","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Kebab House":{"tags":{"name":"Kebab House","amenity":"fast_food"},"name":"Kebab House","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Kebabai":{"tags":{"name":"Kebabai","amenity":"fast_food"},"name":"Kebabai","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Kochlöffel":{"tags":{"name":"Kochlöffel","amenity":"fast_food"},"name":"Kochlöffel","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Kotipizza":{"tags":{"name":"Kotipizza","amenity":"fast_food"},"name":"Kotipizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Krystal":{"tags":{"name":"Krystal","amenity":"fast_food"},"name":"Krystal","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Little Caesars":{"tags":{"name":"Little Caesars","amenity":"fast_food"},"name":"Little Caesars","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Little Caesars Pizza":{"tags":{"name":"Little Caesars Pizza","amenity":"fast_food"},"name":"Little Caesars Pizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Long John Silver's":{"tags":{"name":"Long John Silver's","amenity":"fast_food"},"name":"Long John Silver's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Lotteria":{"tags":{"name":"Lotteria","amenity":"fast_food"},"name":"Lotteria","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Max":{"tags":{"name":"Max","amenity":"fast_food"},"name":"Max","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/McDonald's":{"tags":{"name":"McDonald's","cuisine":"burger","amenity":"fast_food"},"name":"McDonald's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Minute Burger":{"tags":{"name":"Minute Burger","amenity":"fast_food"},"name":"Minute Burger","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Mr. Sub":{"tags":{"name":"Mr. Sub","amenity":"fast_food"},"name":"Mr. Sub","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/New York Pizza":{"tags":{"name":"New York Pizza","amenity":"fast_food"},"name":"New York Pizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Nordsee":{"tags":{"name":"Nordsee","amenity":"fast_food"},"name":"Nordsee","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Panda Express":{"tags":{"name":"Panda Express","cuisine":"chinese","amenity":"fast_food"},"name":"Panda Express","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Papa John's":{"tags":{"name":"Papa John's","cuisine":"pizza","amenity":"fast_food"},"name":"Papa John's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Papa Murphy's":{"tags":{"name":"Papa Murphy's","amenity":"fast_food"},"name":"Papa Murphy's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pinulito":{"tags":{"name":"Pinulito","amenity":"fast_food"},"name":"Pinulito","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pita Pit":{"tags":{"name":"Pita Pit","amenity":"fast_food"},"name":"Pita Pit","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pizza Hut Delivery":{"tags":{"name":"Pizza Hut Delivery","amenity":"fast_food"},"name":"Pizza Hut Delivery","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pizza King":{"tags":{"name":"Pizza King","amenity":"fast_food"},"name":"Pizza King","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pizza Nova":{"tags":{"name":"Pizza Nova","amenity":"fast_food"},"name":"Pizza Nova","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pizza Pizza":{"tags":{"name":"Pizza Pizza","amenity":"fast_food"},"name":"Pizza Pizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pollo Campero":{"tags":{"name":"Pollo Campero","amenity":"fast_food"},"name":"Pollo Campero","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pollo Granjero":{"tags":{"name":"Pollo Granjero","amenity":"fast_food"},"name":"Pollo Granjero","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Popeye's":{"tags":{"name":"Popeye's","cuisine":"chicken","amenity":"fast_food"},"name":"Popeye's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Popeyes Louisiana Kitchen":{"tags":{"name":"Popeyes Louisiana Kitchen","amenity":"fast_food"},"name":"Popeyes Louisiana Kitchen","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Qdoba":{"tags":{"name":"Qdoba","amenity":"fast_food"},"name":"Qdoba","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Quick":{"tags":{"name":"Quick","amenity":"fast_food"},"name":"Quick","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Quiznos":{"tags":{"name":"Quiznos","amenity":"fast_food"},"name":"Quiznos","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Rally's":{"tags":{"name":"Rally's","amenity":"fast_food"},"name":"Rally's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Red Rooster":{"tags":{"name":"Red Rooster","amenity":"fast_food"},"name":"Red Rooster","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Sbarro":{"tags":{"name":"Sbarro","amenity":"fast_food"},"name":"Sbarro","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Schlotzsky's Deli":{"tags":{"name":"Schlotzsky's Deli","amenity":"fast_food"},"name":"Schlotzsky's Deli","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Sibylla":{"tags":{"name":"Sibylla","amenity":"fast_food"},"name":"Sibylla","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Sonic":{"tags":{"name":"Sonic","cuisine":"burger","amenity":"fast_food"},"name":"Sonic","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Steers":{"tags":{"name":"Steers","amenity":"fast_food"},"name":"Steers","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Subway":{"tags":{"name":"Subway","amenity":"fast_food"},"name":"Subway","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Bell":{"tags":{"name":"Taco Bell","cuisine":"mexican","amenity":"fast_food"},"name":"Taco Bell","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Bueno":{"tags":{"name":"Taco Bueno","amenity":"fast_food"},"name":"Taco Bueno","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Cabana":{"tags":{"name":"Taco Cabana","amenity":"fast_food"},"name":"Taco Cabana","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Del Mar":{"tags":{"name":"Taco Del Mar","amenity":"fast_food"},"name":"Taco Del Mar","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco John's":{"tags":{"name":"Taco John's","amenity":"fast_food"},"name":"Taco John's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Time":{"tags":{"name":"Taco Time","amenity":"fast_food"},"name":"Taco Time","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Telepizza":{"tags":{"name":"Telepizza","amenity":"fast_food"},"name":"Telepizza","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Thai Express":{"tags":{"name":"Thai Express","amenity":"fast_food"},"name":"Thai Express","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/The Pizza Company":{"tags":{"name":"The Pizza Company","amenity":"fast_food"},"name":"The Pizza Company","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Wendy's":{"tags":{"name":"Wendy's","cuisine":"burger","amenity":"fast_food"},"name":"Wendy's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Whataburger":{"tags":{"name":"Whataburger","amenity":"fast_food"},"name":"Whataburger","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/White Castle":{"tags":{"name":"White Castle","amenity":"fast_food"},"name":"White Castle","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Wienerschnitzel":{"tags":{"name":"Wienerschnitzel","amenity":"fast_food"},"name":"Wienerschnitzel","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Wimpy":{"tags":{"name":"Wimpy","amenity":"fast_food"},"name":"Wimpy","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Zaxby's":{"tags":{"name":"Zaxby's","amenity":"fast_food"},"name":"Zaxby's","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Γρηγόρης":{"tags":{"name":"Γρηγόρης","amenity":"fast_food"},"name":"Γρηγόρης","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Бургер Кинг":{"tags":{"name":"Бургер Кинг","amenity":"fast_food"},"name":"Бургер Кинг","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Крошка Картошка":{"tags":{"name":"Крошка Картошка","amenity":"fast_food"},"name":"Крошка Картошка","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Макдоналдс":{"tags":{"name":"Макдоналдс","name:en":"McDonald's","amenity":"fast_food"},"name":"Макдоналдс","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Робин Сдобин":{"tags":{"name":"Робин Сдобин","amenity":"fast_food"},"name":"Робин Сдобин","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Русский Аппетит":{"tags":{"name":"Русский Аппетит","amenity":"fast_food"},"name":"Русский Аппетит","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Сабвэй":{"tags":{"name":"Сабвэй","amenity":"fast_food"},"name":"Сабвэй","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Стардог!s":{"tags":{"name":"Стардог!s","amenity":"fast_food"},"name":"Стардог!s","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Теремок":{"tags":{"name":"Теремок","amenity":"fast_food"},"name":"Теремок","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Шаверма":{"tags":{"name":"Шаверма","amenity":"fast_food"},"name":"Шаверма","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Шаурма":{"tags":{"name":"Шаурма","amenity":"fast_food"},"name":"Шаурма","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/かっぱ寿司":{"tags":{"name":"かっぱ寿司","amenity":"fast_food"},"name":"かっぱ寿司","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/かつや":{"tags":{"name":"かつや","amenity":"fast_food"},"name":"かつや","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/くら寿司":{"tags":{"name":"くら寿司","amenity":"fast_food"},"name":"くら寿司","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/すき家":{"tags":{"name":"すき家","name:en":"SUKIYA","amenity":"fast_food"},"name":"すき家","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/なか卯":{"tags":{"name":"なか卯","amenity":"fast_food"},"name":"なか卯","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/ほっかほっか亭":{"tags":{"name":"ほっかほっか亭","amenity":"fast_food"},"name":"ほっかほっか亭","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/ほっともっと":{"tags":{"name":"ほっともっと","amenity":"fast_food"},"name":"ほっともっと","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/オリジン弁当":{"tags":{"name":"オリジン弁当","amenity":"fast_food"},"name":"オリジン弁当","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/ケンタッキーフライドチキン":{"tags":{"name":"ケンタッキーフライドチキン","cuisine":"chicken","name:en":"KFC","amenity":"fast_food"},"name":"ケンタッキーフライドチキン","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/サブウェイ":{"tags":{"name":"サブウェイ","amenity":"fast_food"},"name":"サブウェイ","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/スシロー":{"tags":{"name":"スシロー","amenity":"fast_food"},"name":"スシロー","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/マクドナルド":{"tags":{"name":"マクドナルド","cuisine":"burger","name:en":"McDonald's","amenity":"fast_food"},"name":"マクドナルド","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/ミスタードーナツ":{"tags":{"name":"ミスタードーナツ","amenity":"fast_food"},"name":"ミスタードーナツ","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/モスバーガー":{"tags":{"name":"モスバーガー","name:en":"MOS BURGER","amenity":"fast_food"},"name":"モスバーガー","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/ロッテリア":{"tags":{"name":"ロッテリア","amenity":"fast_food"},"name":"ロッテリア","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/吉野家":{"tags":{"name":"吉野家","amenity":"fast_food"},"name":"吉野家","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/幸楽苑":{"tags":{"name":"幸楽苑","amenity":"fast_food"},"name":"幸楽苑","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/摩斯漢堡":{"tags":{"name":"摩斯漢堡","amenity":"fast_food"},"name":"摩斯漢堡","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/松屋":{"tags":{"name":"松屋","name:en":"Matsuya","amenity":"fast_food"},"name":"松屋","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/肯德基":{"tags":{"name":"肯德基","amenity":"fast_food"},"name":"肯德基","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/麥當勞":{"tags":{"name":"麥當勞","amenity":"fast_food"},"name":"麥當勞","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/麦当劳":{"tags":{"name":"麦当劳","amenity":"fast_food"},"name":"麦当劳","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/롯데리아":{"tags":{"name":"롯데리아","amenity":"fast_food"},"name":"롯데리아","icon":"fast-food","geometry":["point","area"],"fields":["name","cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fuel/76":{"tags":{"name":"76","amenity":"fuel"},"name":"76","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/1-2-3":{"tags":{"name":"1-2-3","amenity":"fuel"},"name":"1-2-3","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ADNOC":{"tags":{"name":"ADNOC","amenity":"fuel"},"name":"ADNOC","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ANP":{"tags":{"name":"ANP","amenity":"fuel"},"name":"ANP","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ARAL":{"tags":{"name":"ARAL","amenity":"fuel"},"name":"ARAL","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Aegean":{"tags":{"name":"Aegean","amenity":"fuel"},"name":"Aegean","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Afriquia":{"tags":{"name":"Afriquia","amenity":"fuel"},"name":"Afriquia","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Agip":{"tags":{"name":"Agip","amenity":"fuel"},"name":"Agip","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Agrola":{"tags":{"name":"Agrola","amenity":"fuel"},"name":"Agrola","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Alon":{"tags":{"name":"Alon","amenity":"fuel"},"name":"Alon","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Alpet":{"tags":{"name":"Alpet","amenity":"fuel"},"name":"Alpet","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Api":{"tags":{"name":"Api","amenity":"fuel"},"name":"Api","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Aral":{"tags":{"name":"Aral","amenity":"fuel"},"name":"Aral","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Arco":{"tags":{"name":"Arco","amenity":"fuel"},"name":"Arco","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Avanti":{"tags":{"name":"Avanti","amenity":"fuel"},"name":"Avanti","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Avia":{"tags":{"name":"Avia","amenity":"fuel"},"name":"Avia","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/BEBECO":{"tags":{"name":"BEBECO","amenity":"fuel"},"name":"BEBECO","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/BFT":{"tags":{"name":"BFT","amenity":"fuel"},"name":"BFT","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/BHPetrol":{"tags":{"name":"BHPetrol","amenity":"fuel"},"name":"BHPetrol","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/BP":{"tags":{"name":"BP","amenity":"fuel"},"name":"BP","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/BR":{"tags":{"name":"BR","amenity":"fuel"},"name":"BR","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Bangchak":{"tags":{"name":"Bangchak","amenity":"fuel"},"name":"Bangchak","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Benzina":{"tags":{"name":"Benzina","amenity":"fuel"},"name":"Benzina","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Bharat Petroleum":{"tags":{"name":"Bharat Petroleum","amenity":"fuel"},"name":"Bharat Petroleum","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Bliska":{"tags":{"name":"Bliska","amenity":"fuel"},"name":"Bliska","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/CAMPSA":{"tags":{"name":"CAMPSA","amenity":"fuel"},"name":"CAMPSA","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/CARREFOUR":{"tags":{"name":"CARREFOUR","amenity":"fuel"},"name":"CARREFOUR","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/CEPSA":{"tags":{"name":"CEPSA","amenity":"fuel"},"name":"CEPSA","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/CNG":{"tags":{"name":"CNG","amenity":"fuel"},"name":"CNG","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Caltex":{"tags":{"name":"Caltex","amenity":"fuel"},"name":"Caltex","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Campsa":{"tags":{"name":"Campsa","amenity":"fuel"},"name":"Campsa","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Casey's General Store":{"tags":{"name":"Casey's General Store","amenity":"fuel"},"name":"Casey's General Store","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Cenex":{"tags":{"name":"Cenex","amenity":"fuel"},"name":"Cenex","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Cepsa":{"tags":{"name":"Cepsa","amenity":"fuel"},"name":"Cepsa","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Ceypetco":{"tags":{"name":"Ceypetco","amenity":"fuel"},"name":"Ceypetco","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Chevron":{"tags":{"name":"Chevron","amenity":"fuel"},"name":"Chevron","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Citgo":{"tags":{"name":"Citgo","amenity":"fuel"},"name":"Citgo","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Clark":{"tags":{"name":"Clark","amenity":"fuel"},"name":"Clark","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Coles Express":{"tags":{"name":"Coles Express","amenity":"fuel"},"name":"Coles Express","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Conoco":{"tags":{"name":"Conoco","amenity":"fuel"},"name":"Conoco","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Copec":{"tags":{"name":"Copec","amenity":"fuel"},"name":"Copec","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Copetrol":{"tags":{"name":"Copetrol","amenity":"fuel"},"name":"Copetrol","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Cosmo":{"tags":{"name":"Cosmo","amenity":"fuel"},"name":"Cosmo","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Crodux":{"tags":{"name":"Crodux","amenity":"fuel"},"name":"Crodux","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Delta":{"tags":{"name":"Delta","amenity":"fuel"},"name":"Delta","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Diamond Shamrock":{"tags":{"name":"Diamond Shamrock","amenity":"fuel"},"name":"Diamond Shamrock","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Drummed Fuel":{"tags":{"name":"Drummed Fuel","amenity":"fuel"},"name":"Drummed Fuel","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/EKO":{"tags":{"name":"EKO","amenity":"fuel"},"name":"EKO","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ENEOS":{"tags":{"name":"ENEOS","amenity":"fuel"},"name":"ENEOS","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ENI":{"tags":{"name":"ENI","amenity":"fuel"},"name":"ENI","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ERG":{"tags":{"name":"ERG","amenity":"fuel"},"name":"ERG","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Elan":{"tags":{"name":"Elan","amenity":"fuel"},"name":"Elan","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Eneos":{"tags":{"name":"Eneos","amenity":"fuel"},"name":"Eneos","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Engen":{"tags":{"name":"Engen","amenity":"fuel"},"name":"Engen","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Eni":{"tags":{"name":"Eni","amenity":"fuel"},"name":"Eni","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Erg":{"tags":{"name":"Erg","amenity":"fuel"},"name":"Erg","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Esso":{"tags":{"name":"Esso","amenity":"fuel"},"name":"Esso","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Esso Express":{"tags":{"name":"Esso Express","amenity":"fuel"},"name":"Esso Express","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/EuroOil":{"tags":{"name":"EuroOil","amenity":"fuel"},"name":"EuroOil","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Exxon":{"tags":{"name":"Exxon","amenity":"fuel"},"name":"Exxon","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/F24":{"tags":{"name":"F24","amenity":"fuel"},"name":"F24","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Firezone":{"tags":{"name":"Firezone","amenity":"fuel"},"name":"Firezone","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Flying V":{"tags":{"name":"Flying V","amenity":"fuel"},"name":"Flying V","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/GALP":{"tags":{"name":"GALP","amenity":"fuel"},"name":"GALP","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Gazprom":{"tags":{"name":"Gazprom","amenity":"fuel"},"name":"Gazprom","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/GetGo":{"tags":{"name":"GetGo","amenity":"fuel"},"name":"GetGo","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Goil":{"tags":{"name":"Goil","amenity":"fuel"},"name":"Goil","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Gulf":{"tags":{"name":"Gulf","amenity":"fuel"},"name":"Gulf","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/H-E-B Fuel":{"tags":{"name":"H-E-B Fuel","amenity":"fuel"},"name":"H-E-B Fuel","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/H-E-B Gas":{"tags":{"name":"H-E-B Gas","amenity":"fuel"},"name":"H-E-B Gas","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/HEM":{"tags":{"name":"HEM","amenity":"fuel"},"name":"HEM","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/HP":{"tags":{"name":"HP","amenity":"fuel"},"name":"HP","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/HP Petrol Pump":{"tags":{"name":"HP Petrol Pump","amenity":"fuel"},"name":"HP Petrol Pump","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Helios":{"tags":{"name":"Helios","amenity":"fuel"},"name":"Helios","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Hess":{"tags":{"name":"Hess","amenity":"fuel"},"name":"Hess","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Hindustan Petroleum":{"tags":{"name":"Hindustan Petroleum","amenity":"fuel"},"name":"Hindustan Petroleum","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Holiday":{"tags":{"name":"Holiday","amenity":"fuel"},"name":"Holiday","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Husky":{"tags":{"name":"Husky","amenity":"fuel"},"name":"Husky","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/IES":{"tags":{"name":"IES","amenity":"fuel"},"name":"IES","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/IP":{"tags":{"name":"IP","amenity":"fuel"},"name":"IP","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Independent Fuel Station":{"tags":{"name":"Independent Fuel Station","amenity":"fuel"},"name":"Independent Fuel Station","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Indian Oil":{"tags":{"name":"Indian Oil","amenity":"fuel"},"name":"Indian Oil","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Indipend.":{"tags":{"name":"Indipend.","amenity":"fuel"},"name":"Indipend.","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Ingo":{"tags":{"name":"Ingo","amenity":"fuel"},"name":"Ingo","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Ipiranga":{"tags":{"name":"Ipiranga","amenity":"fuel"},"name":"Ipiranga","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Irving":{"tags":{"name":"Irving","amenity":"fuel"},"name":"Irving","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/JA-SS":{"tags":{"name":"JA-SS","amenity":"fuel"},"name":"JA-SS","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/JOMO":{"tags":{"name":"JOMO","amenity":"fuel"},"name":"JOMO","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Jet":{"tags":{"name":"Jet","amenity":"fuel"},"name":"Jet","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Jetti":{"tags":{"name":"Jetti","amenity":"fuel"},"name":"Jetti","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Kangaroo":{"tags":{"name":"Kangaroo","amenity":"fuel"},"name":"Kangaroo","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Kobil":{"tags":{"name":"Kobil","amenity":"fuel"},"name":"Kobil","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Kroger Fuel":{"tags":{"name":"Kroger Fuel","amenity":"fuel"},"name":"Kroger Fuel","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Kum & Go":{"tags":{"name":"Kum & Go","amenity":"fuel"},"name":"Kum & Go","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Kwik Trip":{"tags":{"name":"Kwik Trip","amenity":"fuel"},"name":"Kwik Trip","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/LPG":{"tags":{"name":"LPG","amenity":"fuel"},"name":"LPG","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/LPG Station":{"tags":{"name":"LPG Station","amenity":"fuel"},"name":"LPG Station","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/LUKOIL":{"tags":{"name":"LUKOIL","amenity":"fuel"},"name":"LUKOIL","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Liberty":{"tags":{"name":"Liberty","amenity":"fuel"},"name":"Liberty","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Lotos":{"tags":{"name":"Lotos","amenity":"fuel"},"name":"Lotos","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Lotos Optima":{"tags":{"name":"Lotos Optima","amenity":"fuel"},"name":"Lotos Optima","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Love's":{"tags":{"name":"Love's","amenity":"fuel"},"name":"Love's","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Lukoil":{"tags":{"name":"Lukoil","amenity":"fuel"},"name":"Lukoil","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/MEROIL":{"tags":{"name":"MEROIL","amenity":"fuel"},"name":"MEROIL","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/MOL":{"tags":{"name":"MOL","amenity":"fuel"},"name":"MOL","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/MRS":{"tags":{"name":"MRS","amenity":"fuel"},"name":"MRS","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Marathon":{"tags":{"name":"Marathon","amenity":"fuel"},"name":"Marathon","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Maverik":{"tags":{"name":"Maverik","amenity":"fuel"},"name":"Maverik","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Maxol":{"tags":{"name":"Maxol","amenity":"fuel"},"name":"Maxol","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Metano":{"tags":{"name":"Metano","amenity":"fuel"},"name":"Metano","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Migrol":{"tags":{"name":"Migrol","amenity":"fuel"},"name":"Migrol","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Minipump":{"tags":{"name":"Minipump","amenity":"fuel"},"name":"Minipump","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Mobil":{"tags":{"name":"Mobil","amenity":"fuel"},"name":"Mobil","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Mobile":{"tags":{"name":"Mobile","amenity":"fuel"},"name":"Mobile","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Mol":{"tags":{"name":"Mol","amenity":"fuel"},"name":"Mol","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Moya":{"tags":{"name":"Moya","amenity":"fuel"},"name":"Moya","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Murphy USA":{"tags":{"name":"Murphy USA","amenity":"fuel"},"name":"Murphy USA","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Neste":{"tags":{"name":"Neste","amenity":"fuel"},"name":"Neste","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/OIL!":{"tags":{"name":"OIL!","amenity":"fuel"},"name":"OIL!","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/OK":{"tags":{"name":"OK","amenity":"fuel"},"name":"OK","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/OKQ8":{"tags":{"name":"OKQ8","amenity":"fuel"},"name":"OKQ8","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/OMV":{"tags":{"name":"OMV","amenity":"fuel"},"name":"OMV","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Oilibya":{"tags":{"name":"Oilibya","amenity":"fuel"},"name":"Oilibya","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Opet":{"tags":{"name":"Opet","amenity":"fuel"},"name":"Opet","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Orlen":{"tags":{"name":"Orlen","amenity":"fuel"},"name":"Orlen","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/PETRONOR":{"tags":{"name":"PETRONOR","amenity":"fuel"},"name":"PETRONOR","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/PSO":{"tags":{"name":"PSO","amenity":"fuel"},"name":"PSO","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/PSO Petrol Pump":{"tags":{"name":"PSO Petrol Pump","amenity":"fuel"},"name":"PSO Petrol Pump","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/PT":{"tags":{"name":"PT","amenity":"fuel"},"name":"PT","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/PTT":{"tags":{"name":"PTT","amenity":"fuel"},"name":"PTT","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/PV Oil":{"tags":{"name":"PV Oil","amenity":"fuel"},"name":"PV Oil","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Pacific Pride":{"tags":{"name":"Pacific Pride","amenity":"fuel"},"name":"Pacific Pride","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Pecsa":{"tags":{"name":"Pecsa","amenity":"fuel"},"name":"Pecsa","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Pemex":{"tags":{"name":"Pemex","amenity":"fuel"},"name":"Pemex","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Pertamina":{"tags":{"name":"Pertamina","amenity":"fuel"},"name":"Pertamina","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petro":{"tags":{"name":"Petro","amenity":"fuel"},"name":"Petro","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petro-Canada":{"tags":{"name":"Petro-Canada","amenity":"fuel"},"name":"Petro-Canada","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petrobras":{"tags":{"name":"Petrobras","amenity":"fuel"},"name":"Petrobras","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petrochina":{"tags":{"name":"Petrochina","amenity":"fuel"},"name":"Petrochina","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petroecuador":{"tags":{"name":"Petroecuador","amenity":"fuel"},"name":"Petroecuador","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petrol Ofisi":{"tags":{"name":"Petrol Ofisi","amenity":"fuel"},"name":"Petrol Ofisi","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petrolimex":{"tags":{"name":"Petrolimex","amenity":"fuel"},"name":"Petrolimex","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petrom":{"tags":{"name":"Petrom","amenity":"fuel"},"name":"Petrom","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petron":{"tags":{"name":"Petron","amenity":"fuel"},"name":"Petron","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petronas":{"tags":{"name":"Petronas","amenity":"fuel"},"name":"Petronas","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Petroperu":{"tags":{"name":"Petroperu","amenity":"fuel"},"name":"Petroperu","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Phillips 66":{"tags":{"name":"Phillips 66","amenity":"fuel"},"name":"Phillips 66","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Phoenix":{"tags":{"name":"Phoenix","amenity":"fuel"},"name":"Phoenix","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Pilot":{"tags":{"name":"Pilot","amenity":"fuel"},"name":"Pilot","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Pioneer":{"tags":{"name":"Pioneer","amenity":"fuel"},"name":"Pioneer","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Posto":{"tags":{"name":"Posto","amenity":"fuel"},"name":"Posto","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Posto Atem":{"tags":{"name":"Posto Atem","amenity":"fuel"},"name":"Posto Atem","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Posto BR":{"tags":{"name":"Posto BR","amenity":"fuel"},"name":"Posto BR","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Posto Ipiranga":{"tags":{"name":"Posto Ipiranga","amenity":"fuel"},"name":"Posto Ipiranga","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Posto Shell":{"tags":{"name":"Posto Shell","amenity":"fuel"},"name":"Posto Shell","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Primax":{"tags":{"name":"Primax","amenity":"fuel"},"name":"Primax","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Prio":{"tags":{"name":"Prio","amenity":"fuel"},"name":"Prio","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Puma":{"tags":{"name":"Puma","amenity":"fuel"},"name":"Puma","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Q1":{"tags":{"name":"Q1","amenity":"fuel"},"name":"Q1","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Q8":{"tags":{"name":"Q8","amenity":"fuel"},"name":"Q8","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Q8 Easy":{"tags":{"name":"Q8 Easy","amenity":"fuel"},"name":"Q8 Easy","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/QuikTrip":{"tags":{"name":"QuikTrip","amenity":"fuel"},"name":"QuikTrip","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/REPSOL":{"tags":{"name":"REPSOL","amenity":"fuel"},"name":"REPSOL","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/RaceTrac":{"tags":{"name":"RaceTrac","amenity":"fuel"},"name":"RaceTrac","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Repsol":{"tags":{"name":"Repsol","amenity":"fuel"},"name":"Repsol","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Rompetrol":{"tags":{"name":"Rompetrol","amenity":"fuel"},"name":"Rompetrol","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Rubis":{"tags":{"name":"Rubis","amenity":"fuel"},"name":"Rubis","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/SB Tank":{"tags":{"name":"SB Tank","amenity":"fuel"},"name":"SB Tank","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/SPBU":{"tags":{"name":"SPBU","amenity":"fuel"},"name":"SPBU","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sasol":{"tags":{"name":"Sasol","amenity":"fuel"},"name":"Sasol","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sea Oil":{"tags":{"name":"Sea Oil","amenity":"fuel"},"name":"Sea Oil","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sheetz":{"tags":{"name":"Sheetz","amenity":"fuel"},"name":"Sheetz","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Shell":{"tags":{"name":"Shell","amenity":"fuel"},"name":"Shell","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Shell Express":{"tags":{"name":"Shell Express","amenity":"fuel"},"name":"Shell Express","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sinclair":{"tags":{"name":"Sinclair","amenity":"fuel"},"name":"Sinclair","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sinopec":{"tags":{"name":"Sinopec","amenity":"fuel"},"name":"Sinopec","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sinopec Fuel":{"tags":{"name":"Sinopec Fuel","amenity":"fuel"},"name":"Sinopec Fuel","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Slovnaft":{"tags":{"name":"Slovnaft","amenity":"fuel"},"name":"Slovnaft","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Socar":{"tags":{"name":"Socar","amenity":"fuel"},"name":"Socar","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sokimex":{"tags":{"name":"Sokimex","amenity":"fuel"},"name":"Sokimex","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Speedway":{"tags":{"name":"Speedway","amenity":"fuel"},"name":"Speedway","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/St1":{"tags":{"name":"St1","amenity":"fuel"},"name":"St1","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Star":{"tags":{"name":"Star","amenity":"fuel"},"name":"Star","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Star Oil":{"tags":{"name":"Star Oil","amenity":"fuel"},"name":"Star Oil","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Station Service E. Leclerc":{"tags":{"name":"Station Service E. Leclerc","amenity":"fuel"},"name":"Station Service E. Leclerc","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Statoil":{"tags":{"name":"Statoil","amenity":"fuel"},"name":"Statoil","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Sunoco":{"tags":{"name":"Sunoco","amenity":"fuel"},"name":"Sunoco","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Tamoil":{"tags":{"name":"Tamoil","amenity":"fuel"},"name":"Tamoil","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Tango":{"tags":{"name":"Tango","amenity":"fuel"},"name":"Tango","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Teboil":{"tags":{"name":"Teboil","amenity":"fuel"},"name":"Teboil","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Tela":{"tags":{"name":"Tela","amenity":"fuel"},"name":"Tela","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Terpel":{"tags":{"name":"Terpel","amenity":"fuel"},"name":"Terpel","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Texaco":{"tags":{"name":"Texaco","amenity":"fuel"},"name":"Texaco","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Tinq":{"tags":{"name":"Tinq","amenity":"fuel"},"name":"Tinq","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Topaz":{"tags":{"name":"Topaz","amenity":"fuel"},"name":"Topaz","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Total":{"tags":{"name":"Total","amenity":"fuel"},"name":"Total","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Total Access":{"tags":{"name":"Total Access","amenity":"fuel"},"name":"Total Access","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Total Erg":{"tags":{"name":"Total Erg","amenity":"fuel"},"name":"Total Erg","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/TotalErg":{"tags":{"name":"TotalErg","amenity":"fuel"},"name":"TotalErg","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Turkey Hill":{"tags":{"name":"Turkey Hill","amenity":"fuel"},"name":"Turkey Hill","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Turmöl":{"tags":{"name":"Turmöl","amenity":"fuel"},"name":"Turmöl","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Ultramar":{"tags":{"name":"Ultramar","amenity":"fuel"},"name":"Ultramar","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/United":{"tags":{"name":"United","amenity":"fuel"},"name":"United","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Uno":{"tags":{"name":"Uno","amenity":"fuel"},"name":"Uno","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Uno-X":{"tags":{"name":"Uno-X","amenity":"fuel"},"name":"Uno-X","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Valero":{"tags":{"name":"Valero","amenity":"fuel"},"name":"Valero","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Vito":{"tags":{"name":"Vito","amenity":"fuel"},"name":"Vito","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/WOG":{"tags":{"name":"WOG","amenity":"fuel"},"name":"WOG","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Westfalen":{"tags":{"name":"Westfalen","amenity":"fuel"},"name":"Westfalen","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Woolworths Petrol":{"tags":{"name":"Woolworths Petrol","amenity":"fuel"},"name":"Woolworths Petrol","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Z":{"tags":{"name":"Z","amenity":"fuel"},"name":"Z","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/bft":{"tags":{"name":"bft","amenity":"fuel"},"name":"bft","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/eni":{"tags":{"name":"eni","amenity":"fuel"},"name":"eni","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ΕΚΟ":{"tags":{"name":"ΕΚΟ","amenity":"fuel"},"name":"ΕΚΟ","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/АГЗС":{"tags":{"name":"АГЗС","amenity":"fuel"},"name":"АГЗС","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/АЗС":{"tags":{"name":"АЗС","amenity":"fuel"},"name":"АЗС","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Авіас":{"tags":{"name":"Авіас","amenity":"fuel"},"name":"Авіас","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/БРСМ-Нафта":{"tags":{"name":"БРСМ-Нафта","amenity":"fuel"},"name":"БРСМ-Нафта","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Башнефть":{"tags":{"name":"Башнефть","amenity":"fuel"},"name":"Башнефть","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Белоруснефть":{"tags":{"name":"Белоруснефть","amenity":"fuel"},"name":"Белоруснефть","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Газовая заправка":{"tags":{"name":"Газовая заправка","amenity":"fuel"},"name":"Газовая заправка","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Газпромнефть":{"tags":{"name":"Газпромнефть","amenity":"fuel"},"name":"Газпромнефть","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Гелиос":{"tags":{"name":"Гелиос","amenity":"fuel"},"name":"Гелиос","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ЕКА":{"tags":{"name":"ЕКА","amenity":"fuel"},"name":"ЕКА","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Заправка":{"tags":{"name":"Заправка","amenity":"fuel"},"name":"Заправка","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/КазМунайГаз":{"tags":{"name":"КазМунайГаз","amenity":"fuel"},"name":"КазМунайГаз","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Лукойл":{"tags":{"name":"Лукойл","amenity":"fuel"},"name":"Лукойл","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Макпетрол":{"tags":{"name":"Макпетрол","amenity":"fuel"},"name":"Макпетрол","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/НК Альянс":{"tags":{"name":"НК Альянс","amenity":"fuel"},"name":"НК Альянс","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Нефтьмагистраль":{"tags":{"name":"Нефтьмагистраль","amenity":"fuel"},"name":"Нефтьмагистраль","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ОККО":{"tags":{"name":"ОККО","amenity":"fuel"},"name":"ОККО","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ОМВ":{"tags":{"name":"ОМВ","amenity":"fuel"},"name":"ОМВ","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Октан":{"tags":{"name":"Октан","amenity":"fuel"},"name":"Октан","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ПТК":{"tags":{"name":"ПТК","amenity":"fuel"},"name":"ПТК","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Петрол":{"tags":{"name":"Петрол","amenity":"fuel"},"name":"Петрол","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Пропан":{"tags":{"name":"Пропан","amenity":"fuel"},"name":"Пропан","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Роснефть":{"tags":{"name":"Роснефть","amenity":"fuel"},"name":"Роснефть","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Сибнефть":{"tags":{"name":"Сибнефть","amenity":"fuel"},"name":"Сибнефть","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Сургутнефтегаз":{"tags":{"name":"Сургутнефтегаз","amenity":"fuel"},"name":"Сургутнефтегаз","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ТНК":{"tags":{"name":"ТНК","amenity":"fuel"},"name":"ТНК","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Татнефтепродукт":{"tags":{"name":"Татнефтепродукт","amenity":"fuel"},"name":"Татнефтепродукт","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Татнефть":{"tags":{"name":"Татнефть","amenity":"fuel"},"name":"Татнефть","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/Укрнафта":{"tags":{"name":"Укрнафта","amenity":"fuel"},"name":"Укрнафта","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/דור אלון":{"tags":{"name":"דור אלון","amenity":"fuel"},"name":"דור אלון","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/דלק":{"tags":{"name":"דלק","amenity":"fuel"},"name":"דלק","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/סונול":{"tags":{"name":"סונול","amenity":"fuel"},"name":"סונול","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/פז":{"tags":{"name":"פז","amenity":"fuel"},"name":"פז","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/محطة وقود":{"tags":{"name":"محطة وقود","amenity":"fuel"},"name":"محطة وقود","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/محطه وقود":{"tags":{"name":"محطه وقود","amenity":"fuel"},"name":"محطه وقود","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/پمپ بنزین":{"tags":{"name":"پمپ بنزین","amenity":"fuel"},"name":"پمپ بنزین","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/پمپ گاز":{"tags":{"name":"پمپ گاز","amenity":"fuel"},"name":"پمپ گاز","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/บางจาก":{"tags":{"name":"บางจาก","amenity":"fuel"},"name":"บางจาก","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ป.ต.ท.":{"tags":{"name":"ป.ต.ท.","amenity":"fuel"},"name":"ป.ต.ท.","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/เชลล์":{"tags":{"name":"เชลล์","amenity":"fuel"},"name":"เชลล์","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/เอสโซ่":{"tags":{"name":"เอสโซ่","amenity":"fuel"},"name":"เอสโซ่","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/エッソ":{"tags":{"name":"エッソ","amenity":"fuel"},"name":"エッソ","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/エネオス":{"tags":{"name":"エネオス","amenity":"fuel"},"name":"エネオス","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/コスモ石油":{"tags":{"name":"コスモ石油","amenity":"fuel"},"name":"コスモ石油","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/ゼネラル":{"tags":{"name":"ゼネラル","amenity":"fuel"},"name":"ゼネラル","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/中国石化":{"tags":{"name":"中国石化","amenity":"fuel"},"name":"中国石化","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/中国石化 Sinopec":{"tags":{"name":"中国石化 Sinopec","amenity":"fuel"},"name":"中国石化 Sinopec","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/中国石油":{"tags":{"name":"中国石油","amenity":"fuel"},"name":"中国石油","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/中油":{"tags":{"name":"中油","amenity":"fuel"},"name":"中油","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/出光":{"tags":{"name":"出光","name:en":"IDEMITSU","amenity":"fuel"},"name":"出光","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/加油站":{"tags":{"name":"加油站","amenity":"fuel"},"name":"加油站","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/台灣中油":{"tags":{"name":"台灣中油","amenity":"fuel"},"name":"台灣中油","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/fuel/昭和シェル":{"tags":{"name":"昭和シェル","amenity":"fuel"},"name":"昭和シェル","icon":"fuel","geometry":["point","area"],"fields":["name","brand","operator","address","fuel_multi","opening_hours","payment_multi"],"suggestion":true},"amenity/hospital/Cruz Roja":{"tags":{"name":"Cruz Roja","healthcare":"hospital","amenity":"hospital"},"name":"Cruz Roja","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/IMSS":{"tags":{"name":"IMSS","healthcare":"hospital","amenity":"hospital"},"name":"IMSS","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Инфекционное отделение":{"tags":{"name":"Инфекционное отделение","healthcare":"hospital","amenity":"hospital"},"name":"Инфекционное отделение","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Кожно-венерологический диспансер":{"tags":{"name":"Кожно-венерологический диспансер","healthcare":"hospital","amenity":"hospital"},"name":"Кожно-венерологический диспансер","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Районная больница":{"tags":{"name":"Районная больница","healthcare":"hospital","amenity":"hospital"},"name":"Районная больница","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Роддом":{"tags":{"name":"Роддом","healthcare":"hospital","amenity":"hospital"},"name":"Роддом","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Родильный дом":{"tags":{"name":"Родильный дом","healthcare":"hospital","amenity":"hospital"},"name":"Родильный дом","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Скорая помощь":{"tags":{"name":"Скорая помощь","healthcare":"hospital","amenity":"hospital"},"name":"Скорая помощь","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/ЦРБ":{"tags":{"name":"ЦРБ","healthcare":"hospital","amenity":"hospital"},"name":"ЦРБ","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/Центральная районная больница":{"tags":{"name":"Центральная районная больница","healthcare":"hospital","amenity":"hospital"},"name":"Центральная районная больница","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/hospital/โรงพยาบาลส่งเสริมสุขภาพตำบล":{"tags":{"name":"โรงพยาบาลส่งเสริมสุขภาพตำบล","healthcare":"hospital","amenity":"hospital"},"name":"โรงพยาบาลส่งเสริมสุขภาพตำบล","icon":"hospital","geometry":["point","area"],"fields":["name","operator","healthcare/speciality","address","emergency"],"suggestion":true},"amenity/ice_cream/Grido":{"tags":{"name":"Grido","amenity":"ice_cream"},"name":"Grido","icon":"ice-cream","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","takeaway","delivery","outdoor_seating"],"suggestion":true},"amenity/kindergarten/Anganwadi":{"tags":{"name":"Anganwadi","amenity":"kindergarten"},"name":"Anganwadi","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Arche Noah":{"tags":{"name":"Arche Noah","amenity":"kindergarten"},"name":"Arche Noah","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/CONAFE Preescolar":{"tags":{"name":"CONAFE Preescolar","amenity":"kindergarten"},"name":"CONAFE Preescolar","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Educacion Inicial de CONAFE No Escolarizado":{"tags":{"name":"Educacion Inicial de CONAFE No Escolarizado","amenity":"kindergarten"},"name":"Educacion Inicial de CONAFE No Escolarizado","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Estefania Casta�eda":{"tags":{"name":"Estefania Casta�eda","amenity":"kindergarten"},"name":"Estefania Casta�eda","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Evangelischer Kindergarten":{"tags":{"name":"Evangelischer Kindergarten","amenity":"kindergarten"},"name":"Evangelischer Kindergarten","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Federico Froebel":{"tags":{"name":"Federico Froebel","amenity":"kindergarten"},"name":"Federico Froebel","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Gabriela Mistral":{"tags":{"name":"Gabriela Mistral","amenity":"kindergarten"},"name":"Gabriela Mistral","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Jean Piaget":{"tags":{"name":"Jean Piaget","amenity":"kindergarten"},"name":"Jean Piaget","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Katholischer Kindergarten":{"tags":{"name":"Katholischer Kindergarten","amenity":"kindergarten"},"name":"Katholischer Kindergarten","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Kindergarten Regenbogen":{"tags":{"name":"Kindergarten Regenbogen","amenity":"kindergarten"},"name":"Kindergarten Regenbogen","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Kindergarten St. Josef":{"tags":{"name":"Kindergarten St. Josef","amenity":"kindergarten"},"name":"Kindergarten St. Josef","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Kindergarten St. Martin":{"tags":{"name":"Kindergarten St. Martin","amenity":"kindergarten"},"name":"Kindergarten St. Martin","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Maria Montessori":{"tags":{"name":"Maria Montessori","amenity":"kindergarten"},"name":"Maria Montessori","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/PAUD":{"tags":{"name":"PAUD","amenity":"kindergarten"},"name":"PAUD","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Pusteblume":{"tags":{"name":"Pusteblume","amenity":"kindergarten"},"name":"Pusteblume","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Rosaura Zapata":{"tags":{"name":"Rosaura Zapata","amenity":"kindergarten"},"name":"Rosaura Zapata","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Sor Juana Ines De La Cruz":{"tags":{"name":"Sor Juana Ines De La Cruz","amenity":"kindergarten"},"name":"Sor Juana Ines De La Cruz","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Spatzennest":{"tags":{"name":"Spatzennest","amenity":"kindergarten"},"name":"Spatzennest","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Städtischer Kindergarten":{"tags":{"name":"Städtischer Kindergarten","amenity":"kindergarten"},"name":"Städtischer Kindergarten","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Villa Kunterbunt":{"tags":{"name":"Villa Kunterbunt","amenity":"kindergarten"},"name":"Villa Kunterbunt","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Waldkindergarten":{"tags":{"name":"Waldkindergarten","amenity":"kindergarten"},"name":"Waldkindergarten","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Waldorfkindergarten":{"tags":{"name":"Waldorfkindergarten","amenity":"kindergarten"},"name":"Waldorfkindergarten","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Óvoda":{"tags":{"name":"Óvoda","amenity":"kindergarten"},"name":"Óvoda","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детсад":{"tags":{"name":"Детсад","amenity":"kindergarten"},"name":"Детсад","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад Солнышко":{"tags":{"name":"Детский сад Солнышко","amenity":"kindergarten"},"name":"Детский сад Солнышко","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад № 1":{"tags":{"name":"Детский сад № 1","amenity":"kindergarten"},"name":"Детский сад № 1","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №1":{"tags":{"name":"Детский сад №1","amenity":"kindergarten"},"name":"Детский сад №1","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №10":{"tags":{"name":"Детский сад №10","amenity":"kindergarten"},"name":"Детский сад №10","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №11":{"tags":{"name":"Детский сад №11","amenity":"kindergarten"},"name":"Детский сад №11","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №12":{"tags":{"name":"Детский сад №12","amenity":"kindergarten"},"name":"Детский сад №12","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №13":{"tags":{"name":"Детский сад №13","amenity":"kindergarten"},"name":"Детский сад №13","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №14":{"tags":{"name":"Детский сад №14","amenity":"kindergarten"},"name":"Детский сад №14","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №15":{"tags":{"name":"Детский сад №15","amenity":"kindergarten"},"name":"Детский сад №15","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №16":{"tags":{"name":"Детский сад №16","amenity":"kindergarten"},"name":"Детский сад №16","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №17":{"tags":{"name":"Детский сад №17","amenity":"kindergarten"},"name":"Детский сад №17","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №18":{"tags":{"name":"Детский сад №18","amenity":"kindergarten"},"name":"Детский сад №18","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №19":{"tags":{"name":"Детский сад №19","amenity":"kindergarten"},"name":"Детский сад №19","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №2":{"tags":{"name":"Детский сад №2","amenity":"kindergarten"},"name":"Детский сад №2","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №22":{"tags":{"name":"Детский сад №22","amenity":"kindergarten"},"name":"Детский сад №22","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №24":{"tags":{"name":"Детский сад №24","amenity":"kindergarten"},"name":"Детский сад №24","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №25":{"tags":{"name":"Детский сад №25","amenity":"kindergarten"},"name":"Детский сад №25","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №27":{"tags":{"name":"Детский сад №27","amenity":"kindergarten"},"name":"Детский сад №27","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №29":{"tags":{"name":"Детский сад №29","amenity":"kindergarten"},"name":"Детский сад №29","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №3":{"tags":{"name":"Детский сад №3","amenity":"kindergarten"},"name":"Детский сад №3","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №33":{"tags":{"name":"Детский сад №33","amenity":"kindergarten"},"name":"Детский сад №33","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №4":{"tags":{"name":"Детский сад №4","amenity":"kindergarten"},"name":"Детский сад №4","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №5":{"tags":{"name":"Детский сад №5","amenity":"kindergarten"},"name":"Детский сад №5","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №6":{"tags":{"name":"Детский сад №6","amenity":"kindergarten"},"name":"Детский сад №6","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №7":{"tags":{"name":"Детский сад №7","amenity":"kindergarten"},"name":"Детский сад №7","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №8":{"tags":{"name":"Детский сад №8","amenity":"kindergarten"},"name":"Детский сад №8","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Детский сад №9":{"tags":{"name":"Детский сад №9","amenity":"kindergarten"},"name":"Детский сад №9","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Дитячий садок":{"tags":{"name":"Дитячий садок","amenity":"kindergarten"},"name":"Дитячий садок","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/Солнышко":{"tags":{"name":"Солнышко","amenity":"kindergarten"},"name":"Солнышко","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/საბავშვო ბაღი":{"tags":{"name":"საბავშვო ბაღი","amenity":"kindergarten"},"name":"საბავშვო ბაღი","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/kindergarten/中央保育所":{"tags":{"name":"中央保育所","amenity":"kindergarten"},"name":"中央保育所","icon":"school","geometry":["point","area"],"fields":["name","operator","address"],"suggestion":true},"amenity/library/Biblioteca Comunale":{"tags":{"name":"Biblioteca Comunale","amenity":"library"},"name":"Biblioteca Comunale","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Biblioteca comunale":{"tags":{"name":"Biblioteca comunale","amenity":"library"},"name":"Biblioteca comunale","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Biblioteka Publiczna":{"tags":{"name":"Biblioteka Publiczna","amenity":"library"},"name":"Biblioteka Publiczna","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Bibliothèque Municipale":{"tags":{"name":"Bibliothèque Municipale","amenity":"library"},"name":"Bibliothèque Municipale","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Bibliothèque municipale":{"tags":{"name":"Bibliothèque municipale","amenity":"library"},"name":"Bibliothèque municipale","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Bücherei":{"tags":{"name":"Bücherei","amenity":"library"},"name":"Bücherei","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Central Library":{"tags":{"name":"Central Library","amenity":"library"},"name":"Central Library","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Gemeindebücherei":{"tags":{"name":"Gemeindebücherei","amenity":"library"},"name":"Gemeindebücherei","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Gminna Biblioteka Publiczna":{"tags":{"name":"Gminna Biblioteka Publiczna","amenity":"library"},"name":"Gminna Biblioteka Publiczna","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Miejska Biblioteka Publiczna":{"tags":{"name":"Miejska Biblioteka Publiczna","amenity":"library"},"name":"Miejska Biblioteka Publiczna","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Médiathèque":{"tags":{"name":"Médiathèque","amenity":"library"},"name":"Médiathèque","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Městská knihovna":{"tags":{"name":"Městská knihovna","amenity":"library"},"name":"Městská knihovna","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Public Library":{"tags":{"name":"Public Library","amenity":"library"},"name":"Public Library","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Stadtbibliothek":{"tags":{"name":"Stadtbibliothek","amenity":"library"},"name":"Stadtbibliothek","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Stadtbücherei":{"tags":{"name":"Stadtbücherei","amenity":"library"},"name":"Stadtbücherei","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Городская библиотека":{"tags":{"name":"Городская библиотека","amenity":"library"},"name":"Городская библиотека","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Детская библиотека":{"tags":{"name":"Детская библиотека","amenity":"library"},"name":"Детская библиотека","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Центральная библиотека":{"tags":{"name":"Центральная библиотека","amenity":"library"},"name":"Центральная библиотека","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/Центральная городская библиотека":{"tags":{"name":"Центральная городская библиотека","amenity":"library"},"name":"Центральная городская библиотека","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/library/图书馆":{"tags":{"name":"图书馆","amenity":"library"},"name":"图书馆","icon":"library","geometry":["point","area"],"fields":["name","operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid","ref/isil"],"suggestion":true},"amenity/pharmacy/36.6":{"tags":{"name":"36.6","healthcare":"pharmacy","amenity":"pharmacy"},"name":"36.6","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Adler-Apotheke":{"tags":{"name":"Adler-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Adler-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Alte Apotheke":{"tags":{"name":"Alte Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Alte Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Apollo Pharmacy":{"tags":{"name":"Apollo Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Apollo Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Apotek":{"tags":{"name":"Apotek","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Apotek","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Apotek Hjärtat":{"tags":{"name":"Apotek Hjärtat","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Apotek Hjärtat","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Apotheke am Markt":{"tags":{"name":"Apotheke am Markt","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Apotheke am Markt","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Bahnhof Apotheke":{"tags":{"name":"Bahnhof Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Bahnhof Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Bahnhof-Apotheke":{"tags":{"name":"Bahnhof-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Bahnhof-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Bartell Drugs":{"tags":{"name":"Bartell Drugs","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Bartell Drugs","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Benavides":{"tags":{"name":"Benavides","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Benavides","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Benu":{"tags":{"name":"Benu","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Benu","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Boots":{"tags":{"name":"Boots","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Boots","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Botica":{"tags":{"name":"Botica","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Botica","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Brunnen-Apotheke":{"tags":{"name":"Brunnen-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Brunnen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Burg-Apotheke":{"tags":{"name":"Burg-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Burg-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Bären-Apotheke":{"tags":{"name":"Bären-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Bären-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/CVS":{"tags":{"name":"CVS","healthcare":"pharmacy","amenity":"pharmacy"},"name":"CVS","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Camelia":{"tags":{"name":"Camelia","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Camelia","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Catena":{"tags":{"name":"Catena","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Catena","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Chemist Warehouse":{"tags":{"name":"Chemist Warehouse","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Chemist Warehouse","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Clicks":{"tags":{"name":"Clicks","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Clicks","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Cruz Azul":{"tags":{"name":"Cruz Azul","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Cruz Azul","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Cruz Verde":{"tags":{"name":"Cruz Verde","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Cruz Verde","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Dbam o Zdrowie":{"tags":{"name":"Dbam o Zdrowie","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Dbam o Zdrowie","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Dr. Max":{"tags":{"name":"Dr. Max","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Dr. Max","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Droga Raia":{"tags":{"name":"Droga Raia","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Droga Raia","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Drogaria São Paulo":{"tags":{"name":"Drogaria São Paulo","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Drogaria São Paulo","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Drogasil":{"tags":{"name":"Drogasil","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Drogasil","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Duane Reade":{"tags":{"name":"Duane Reade","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Duane Reade","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Eczane":{"tags":{"name":"Eczane","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Eczane","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Engel-Apotheke":{"tags":{"name":"Engel-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Engel-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Eurovaistinė":{"tags":{"name":"Eurovaistinė","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Eurovaistinė","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Familiprix":{"tags":{"name":"Familiprix","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Familiprix","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacenter":{"tags":{"name":"Farmacenter","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacenter","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacia Centrale":{"tags":{"name":"Farmacia Centrale","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacia Centrale","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacia Comunale":{"tags":{"name":"Farmacia Comunale","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacia Comunale","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacia Guadalajara":{"tags":{"name":"Farmacia Guadalajara","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacia Guadalajara","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacia del Ahorro":{"tags":{"name":"Farmacia del Ahorro","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacia del Ahorro","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Ahumada":{"tags":{"name":"Farmacias Ahumada","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Ahumada","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Cruz Azul":{"tags":{"name":"Farmacias Cruz Azul","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Cruz Azul","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Cruz Verde":{"tags":{"name":"Farmacias Cruz Verde","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Cruz Verde","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Económicas":{"tags":{"name":"Farmacias Económicas","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Económicas","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Guadalajara":{"tags":{"name":"Farmacias Guadalajara","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Guadalajara","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias SalcoBrand":{"tags":{"name":"Farmacias SalcoBrand","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias SalcoBrand","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Sana Sana":{"tags":{"name":"Farmacias Sana Sana","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Sana Sana","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias Similares":{"tags":{"name":"Farmacias Similares","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias Similares","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacias del Ahorro":{"tags":{"name":"Farmacias del Ahorro","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacias del Ahorro","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmacity":{"tags":{"name":"Farmacity","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmacity","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmahorro":{"tags":{"name":"Farmahorro","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmahorro","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Farmatodo":{"tags":{"name":"Farmatodo","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Farmatodo","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Felicia":{"tags":{"name":"Felicia","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Felicia","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Fybeca":{"tags":{"name":"Fybeca","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Fybeca","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Generika Drugstore":{"tags":{"name":"Generika Drugstore","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Generika Drugstore","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Gintarinė vaistinė":{"tags":{"name":"Gintarinė vaistinė","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Gintarinė vaistinė","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Guardian":{"tags":{"name":"Guardian","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Guardian","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Gyógyszertár":{"tags":{"name":"Gyógyszertár","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Gyógyszertár","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/H-E-B Pharmacy":{"tags":{"name":"H-E-B Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"H-E-B Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Hirsch-Apotheke":{"tags":{"name":"Hirsch-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Hirsch-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Hubertus Apotheke":{"tags":{"name":"Hubertus Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Hubertus Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Inkafarma":{"tags":{"name":"Inkafarma","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Inkafarma","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Jean Coutu":{"tags":{"name":"Jean Coutu","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Jean Coutu","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Kinney Drugs":{"tags":{"name":"Kinney Drugs","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Kinney Drugs","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Kur-Apotheke":{"tags":{"name":"Kur-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Kur-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Linden-Apotheke":{"tags":{"name":"Linden-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Linden-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Ljekarna":{"tags":{"name":"Ljekarna","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Ljekarna","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Lloyds Pharmacy":{"tags":{"name":"Lloyds Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Lloyds Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Lékárna":{"tags":{"name":"Lékárna","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Lékárna","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Löwen-Apotheke":{"tags":{"name":"Löwen-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Löwen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Marien-Apotheke":{"tags":{"name":"Marien-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Marien-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Markt-Apotheke":{"tags":{"name":"Markt-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Markt-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Mercury Drug":{"tags":{"name":"Mercury Drug","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Mercury Drug","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Mifarma":{"tags":{"name":"Mifarma","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Mifarma","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Mēness aptieka":{"tags":{"name":"Mēness aptieka","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Mēness aptieka","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Neue Apotheke":{"tags":{"name":"Neue Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Neue Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pague Menos":{"tags":{"name":"Pague Menos","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pague Menos","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Panvel":{"tags":{"name":"Panvel","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Panvel","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Park-Apotheke":{"tags":{"name":"Park-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Park-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie Centrale":{"tags":{"name":"Pharmacie Centrale","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie Centrale","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie Principale":{"tags":{"name":"Pharmacie Principale","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie Principale","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie de l'Hôtel de Ville":{"tags":{"name":"Pharmacie de l'Hôtel de Ville","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie de l'Hôtel de Ville","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie de la Gare":{"tags":{"name":"Pharmacie de la Gare","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie de la Gare","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie de la Mairie":{"tags":{"name":"Pharmacie de la Mairie","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie de la Mairie","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie de la Poste":{"tags":{"name":"Pharmacie de la Poste","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie de la Poste","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie du Centre":{"tags":{"name":"Pharmacie du Centre","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie du Centre","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie du Marché":{"tags":{"name":"Pharmacie du Marché","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie du Marché","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmacie du Parc":{"tags":{"name":"Pharmacie du Parc","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmacie du Parc","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmaprix":{"tags":{"name":"Pharmaprix","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmaprix","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Pharmasave":{"tags":{"name":"Pharmasave","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Pharmasave","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Punkt Apteczny":{"tags":{"name":"Punkt Apteczny","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Punkt Apteczny","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rathaus-Apotheke":{"tags":{"name":"Rathaus-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rathaus-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rats-Apotheke":{"tags":{"name":"Rats-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rats-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rexall":{"tags":{"name":"Rexall","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rexall","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rite Aid":{"tags":{"name":"Rite Aid","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rite Aid","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rose Pharmacy":{"tags":{"name":"Rose Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rose Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rosen-Apotheke":{"tags":{"name":"Rosen-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rosen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Rowlands Pharmacy":{"tags":{"name":"Rowlands Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Rowlands Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/SalcoBrand":{"tags":{"name":"SalcoBrand","healthcare":"pharmacy","amenity":"pharmacy"},"name":"SalcoBrand","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Sana Sana":{"tags":{"name":"Sana Sana","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Sana Sana","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Schloss-Apotheke":{"tags":{"name":"Schloss-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Schloss-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Sensiblu":{"tags":{"name":"Sensiblu","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Sensiblu","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Shoppers Drug Mart":{"tags":{"name":"Shoppers Drug Mart","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Shoppers Drug Mart","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Sonnen-Apotheke":{"tags":{"name":"Sonnen-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Sonnen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/South Star Drug":{"tags":{"name":"South Star Drug","healthcare":"pharmacy","amenity":"pharmacy"},"name":"South Star Drug","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Stadt-Apotheke":{"tags":{"name":"Stadt-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Stadt-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Stern-Apotheke":{"tags":{"name":"Stern-Apotheke","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Stern-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Superdrug":{"tags":{"name":"Superdrug","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Superdrug","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/São João":{"tags":{"name":"São João","healthcare":"pharmacy","amenity":"pharmacy"},"name":"São João","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/The Generics Pharmacy":{"tags":{"name":"The Generics Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"The Generics Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Uniprix":{"tags":{"name":"Uniprix","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Uniprix","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Walgreens":{"tags":{"name":"Walgreens","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Walgreens","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Walgreens Pharmacy":{"tags":{"name":"Walgreens Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Walgreens Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Walmart Pharmacy":{"tags":{"name":"Walmart Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Walmart Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Well Pharmacy":{"tags":{"name":"Well Pharmacy","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Well Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/centro naturista":{"tags":{"name":"centro naturista","healthcare":"pharmacy","amenity":"pharmacy"},"name":"centro naturista","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/А5":{"tags":{"name":"А5","healthcare":"pharmacy","amenity":"pharmacy"},"name":"А5","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Айболит":{"tags":{"name":"Айболит","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Айболит","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Аптека 36,6":{"tags":{"name":"Аптека 36,6","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Аптека 36,6","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Аптека низких цен":{"tags":{"name":"Аптека низких цен","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Аптека низких цен","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Аптека низьких цін":{"tags":{"name":"Аптека низьких цін","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Аптека низьких цін","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Аптека от склада":{"tags":{"name":"Аптека от склада","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Аптека от склада","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Аптека №1":{"tags":{"name":"Аптека №1","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Аптека №1","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Аптечный пункт":{"tags":{"name":"Аптечный пункт","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Аптечный пункт","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Арніка":{"tags":{"name":"Арніка","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Арніка","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Бережная аптека":{"tags":{"name":"Бережная аптека","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Бережная аптека","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Будь здоров":{"tags":{"name":"Будь здоров","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Будь здоров","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Вита":{"tags":{"name":"Вита","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Вита","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Горздрав":{"tags":{"name":"Горздрав","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Горздрав","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Живика":{"tags":{"name":"Живика","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Живика","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Здоровье":{"tags":{"name":"Здоровье","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Здоровье","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Имплозия":{"tags":{"name":"Имплозия","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Имплозия","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Классика":{"tags":{"name":"Классика","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Классика","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Ладушка":{"tags":{"name":"Ладушка","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Ладушка","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Мед-сервіс":{"tags":{"name":"Мед-сервіс","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Мед-сервіс","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Мелодия здоровья":{"tags":{"name":"Мелодия здоровья","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Мелодия здоровья","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Невис":{"tags":{"name":"Невис","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Невис","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Норма":{"tags":{"name":"Норма","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Норма","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Озерки":{"tags":{"name":"Озерки","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Озерки","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Панацея":{"tags":{"name":"Панацея","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Панацея","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Первая помощь":{"tags":{"name":"Первая помощь","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Первая помощь","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Планета здоровья":{"tags":{"name":"Планета здоровья","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Планета здоровья","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Ригла":{"tags":{"name":"Ригла","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Ригла","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Семейная":{"tags":{"name":"Семейная","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Семейная","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Социальная аптека":{"tags":{"name":"Социальная аптека","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Социальная аптека","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Столички":{"tags":{"name":"Столички","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Столички","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Фармакопейка":{"tags":{"name":"Фармакопейка","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Фармакопейка","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Фармакор":{"tags":{"name":"Фармакор","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Фармакор","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Фармация":{"tags":{"name":"Фармация","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Фармация","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Фармленд":{"tags":{"name":"Фармленд","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Фармленд","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/Центральная аптека":{"tags":{"name":"Центральная аптека","healthcare":"pharmacy","amenity":"pharmacy"},"name":"Центральная аптека","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/סופר-פארם":{"tags":{"name":"סופר-פארם","healthcare":"pharmacy","amenity":"pharmacy"},"name":"סופר-פארם","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/داروخانه":{"tags":{"name":"داروخانه","healthcare":"pharmacy","amenity":"pharmacy"},"name":"داروخانه","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/داروخانه شبانه روزی":{"tags":{"name":"داروخانه شبانه روزی","healthcare":"pharmacy","amenity":"pharmacy"},"name":"داروخانه شبانه روزی","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/صيدلية":{"tags":{"name":"صيدلية","healthcare":"pharmacy","amenity":"pharmacy"},"name":"صيدلية","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/くすりの福太郎":{"tags":{"name":"くすりの福太郎","healthcare":"pharmacy","amenity":"pharmacy"},"name":"くすりの福太郎","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/さくら薬局":{"tags":{"name":"さくら薬局","healthcare":"pharmacy","amenity":"pharmacy"},"name":"さくら薬局","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/ウエルシア":{"tags":{"name":"ウエルシア","healthcare":"pharmacy","amenity":"pharmacy"},"name":"ウエルシア","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/カワチ薬品":{"tags":{"name":"カワチ薬品","healthcare":"pharmacy","amenity":"pharmacy"},"name":"カワチ薬品","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/クリエイト":{"tags":{"name":"クリエイト","healthcare":"pharmacy","amenity":"pharmacy"},"name":"クリエイト","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/サンドラッグ":{"tags":{"name":"サンドラッグ","healthcare":"pharmacy","amenity":"pharmacy"},"name":"サンドラッグ","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/スギ薬局":{"tags":{"name":"スギ薬局","healthcare":"pharmacy","amenity":"pharmacy"},"name":"スギ薬局","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/セイジョー":{"tags":{"name":"セイジョー","healthcare":"pharmacy","amenity":"pharmacy"},"name":"セイジョー","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/ツルハドラッグ":{"tags":{"name":"ツルハドラッグ","healthcare":"pharmacy","amenity":"pharmacy"},"name":"ツルハドラッグ","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/ドラッグてらしま (Drug Terashima)":{"tags":{"name":"ドラッグてらしま (Drug Terashima)","healthcare":"pharmacy","amenity":"pharmacy"},"name":"ドラッグてらしま (Drug Terashima)","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/マツモトキヨシ":{"tags":{"name":"マツモトキヨシ","healthcare":"pharmacy","amenity":"pharmacy"},"name":"マツモトキヨシ","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pharmacy/丁丁藥局":{"tags":{"name":"丁丁藥局","healthcare":"pharmacy","amenity":"pharmacy"},"name":"丁丁藥局","icon":"pharmacy","geometry":["point","area"],"fields":["name","operator","address","building_area","drive_through","opening_hours","payment_multi","dispensing"],"suggestion":true},"amenity/pub/Black Bull":{"tags":{"name":"Black Bull","amenity":"pub"},"name":"Black Bull","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Commercial Hotel":{"tags":{"name":"Commercial Hotel","amenity":"pub"},"name":"Commercial Hotel","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Cross Keys":{"tags":{"name":"Cross Keys","amenity":"pub"},"name":"Cross Keys","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Irish Pub":{"tags":{"name":"Irish Pub","amenity":"pub"},"name":"Irish Pub","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Kings Arms":{"tags":{"name":"Kings Arms","amenity":"pub"},"name":"Kings Arms","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Kings Head":{"tags":{"name":"Kings Head","amenity":"pub"},"name":"Kings Head","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/New Inn":{"tags":{"name":"New Inn","amenity":"pub"},"name":"New Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Prince of Wales":{"tags":{"name":"Prince of Wales","amenity":"pub"},"name":"Prince of Wales","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Queens Head":{"tags":{"name":"Queens Head","amenity":"pub"},"name":"Queens Head","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Red Lion":{"tags":{"name":"Red Lion","amenity":"pub"},"name":"Red Lion","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Rose & Crown":{"tags":{"name":"Rose & Crown","amenity":"pub"},"name":"Rose & Crown","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Rose and Crown":{"tags":{"name":"Rose and Crown","amenity":"pub"},"name":"Rose and Crown","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/Royal Oak":{"tags":{"name":"Royal Oak","amenity":"pub"},"name":"Royal Oak","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Albion":{"tags":{"name":"The Albion","amenity":"pub"},"name":"The Albion","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Anchor":{"tags":{"name":"The Anchor","amenity":"pub"},"name":"The Anchor","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Angel":{"tags":{"name":"The Angel","amenity":"pub"},"name":"The Angel","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Beehive":{"tags":{"name":"The Beehive","amenity":"pub"},"name":"The Beehive","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Bell":{"tags":{"name":"The Bell","amenity":"pub"},"name":"The Bell","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Bell Inn":{"tags":{"name":"The Bell Inn","amenity":"pub"},"name":"The Bell Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Black Horse":{"tags":{"name":"The Black Horse","amenity":"pub"},"name":"The Black Horse","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Bull":{"tags":{"name":"The Bull","amenity":"pub"},"name":"The Bull","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Castle":{"tags":{"name":"The Castle","amenity":"pub"},"name":"The Castle","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Chequers":{"tags":{"name":"The Chequers","amenity":"pub"},"name":"The Chequers","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Cricketers":{"tags":{"name":"The Cricketers","amenity":"pub"},"name":"The Cricketers","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Cross Keys":{"tags":{"name":"The Cross Keys","amenity":"pub"},"name":"The Cross Keys","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Crown":{"tags":{"name":"The Crown","amenity":"pub"},"name":"The Crown","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Crown Inn":{"tags":{"name":"The Crown Inn","amenity":"pub"},"name":"The Crown Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Fox":{"tags":{"name":"The Fox","amenity":"pub"},"name":"The Fox","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The George":{"tags":{"name":"The George","amenity":"pub"},"name":"The George","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Green Man":{"tags":{"name":"The Green Man","amenity":"pub"},"name":"The Green Man","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Greyhound":{"tags":{"name":"The Greyhound","amenity":"pub"},"name":"The Greyhound","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Kings Arms":{"tags":{"name":"The Kings Arms","amenity":"pub"},"name":"The Kings Arms","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Kings Head":{"tags":{"name":"The Kings Head","amenity":"pub"},"name":"The Kings Head","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The New Inn":{"tags":{"name":"The New Inn","amenity":"pub"},"name":"The New Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Plough":{"tags":{"name":"The Plough","amenity":"pub"},"name":"The Plough","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Plough Inn":{"tags":{"name":"The Plough Inn","amenity":"pub"},"name":"The Plough Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Queens Head":{"tags":{"name":"The Queens Head","amenity":"pub"},"name":"The Queens Head","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Railway":{"tags":{"name":"The Railway","amenity":"pub"},"name":"The Railway","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Red Lion":{"tags":{"name":"The Red Lion","amenity":"pub"},"name":"The Red Lion","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Rising Sun":{"tags":{"name":"The Rising Sun","amenity":"pub"},"name":"The Rising Sun","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Royal Oak":{"tags":{"name":"The Royal Oak","amenity":"pub"},"name":"The Royal Oak","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Ship":{"tags":{"name":"The Ship","amenity":"pub"},"name":"The Ship","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Ship Inn":{"tags":{"name":"The Ship Inn","amenity":"pub"},"name":"The Ship Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Star":{"tags":{"name":"The Star","amenity":"pub"},"name":"The Star","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Star Inn":{"tags":{"name":"The Star Inn","amenity":"pub"},"name":"The Star Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Sun Inn":{"tags":{"name":"The Sun Inn","amenity":"pub"},"name":"The Sun Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Swan":{"tags":{"name":"The Swan","amenity":"pub"},"name":"The Swan","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Swan Inn":{"tags":{"name":"The Swan Inn","amenity":"pub"},"name":"The Swan Inn","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Victoria":{"tags":{"name":"The Victoria","amenity":"pub"},"name":"The Victoria","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The Wheatsheaf":{"tags":{"name":"The Wheatsheaf","amenity":"pub"},"name":"The Wheatsheaf","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The White Hart":{"tags":{"name":"The White Hart","amenity":"pub"},"name":"The White Hart","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The White Horse":{"tags":{"name":"The White Horse","amenity":"pub"},"name":"The White Horse","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The White Lion":{"tags":{"name":"The White Lion","amenity":"pub"},"name":"The White Lion","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/The White Swan":{"tags":{"name":"The White Swan","amenity":"pub"},"name":"The White Swan","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/魚民":{"tags":{"name":"魚民","amenity":"pub"},"name":"魚民","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/pub/鳥貴族":{"tags":{"name":"鳥貴族","amenity":"pub"},"name":"鳥貴族","icon":"beer","geometry":["point","area"],"fields":["name","address","building_area","opening_hours","smoking","outdoor_seating","brewery"],"suggestion":true},"amenity/restaurant/Adler":{"tags":{"name":"Adler","amenity":"restaurant"},"name":"Adler","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Adria":{"tags":{"name":"Adria","amenity":"restaurant"},"name":"Adria","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Adyar Ananda Bhavan":{"tags":{"name":"Adyar Ananda Bhavan","amenity":"restaurant"},"name":"Adyar Ananda Bhavan","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Akropolis":{"tags":{"name":"Akropolis","amenity":"restaurant"},"name":"Akropolis","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Alte Post":{"tags":{"name":"Alte Post","amenity":"restaurant"},"name":"Alte Post","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Applebee's":{"tags":{"name":"Applebee's","amenity":"restaurant"},"name":"Applebee's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Asia":{"tags":{"name":"Asia","amenity":"restaurant"},"name":"Asia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Athen":{"tags":{"name":"Athen","amenity":"restaurant"},"name":"Athen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Athos":{"tags":{"name":"Athos","amenity":"restaurant"},"name":"Athos","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Autogrill":{"tags":{"name":"Autogrill","amenity":"restaurant"},"name":"Autogrill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bahnhof":{"tags":{"name":"Bahnhof","amenity":"restaurant"},"name":"Bahnhof","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bella Italia":{"tags":{"name":"Bella Italia","amenity":"restaurant"},"name":"Bella Italia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bella Napoli":{"tags":{"name":"Bella Napoli","amenity":"restaurant"},"name":"Bella Napoli","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Big Boy":{"tags":{"name":"Big Boy","amenity":"restaurant"},"name":"Big Boy","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bob Evans":{"tags":{"name":"Bob Evans","amenity":"restaurant"},"name":"Bob Evans","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bonefish Grill":{"tags":{"name":"Bonefish Grill","amenity":"restaurant"},"name":"Bonefish Grill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Boston Pizza":{"tags":{"name":"Boston Pizza","amenity":"restaurant"},"name":"Boston Pizza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Buffalo Grill":{"tags":{"name":"Buffalo Grill","amenity":"restaurant"},"name":"Buffalo Grill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Buffalo Wild Wings":{"tags":{"name":"Buffalo Wild Wings","amenity":"restaurant"},"name":"Buffalo Wild Wings","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bären":{"tags":{"name":"Bären","amenity":"restaurant"},"name":"Bären","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/California Pizza Kitchen":{"tags":{"name":"California Pizza Kitchen","amenity":"restaurant"},"name":"California Pizza Kitchen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Canteen":{"tags":{"name":"Canteen","amenity":"restaurant"},"name":"Canteen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Capri":{"tags":{"name":"Capri","amenity":"restaurant"},"name":"Capri","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Carluccio's":{"tags":{"name":"Carluccio's","amenity":"restaurant"},"name":"Carluccio's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Carpe Diem":{"tags":{"name":"Carpe Diem","amenity":"restaurant"},"name":"Carpe Diem","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Carrabba's Italian Grill":{"tags":{"name":"Carrabba's Italian Grill","amenity":"restaurant"},"name":"Carrabba's Italian Grill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Casa Mia":{"tags":{"name":"Casa Mia","amenity":"restaurant"},"name":"Casa Mia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Casablanca":{"tags":{"name":"Casablanca","amenity":"restaurant"},"name":"Casablanca","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Cheesecake Factory":{"tags":{"name":"Cheesecake Factory","amenity":"restaurant"},"name":"Cheesecake Factory","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Chifa":{"tags":{"name":"Chifa","amenity":"restaurant"},"name":"Chifa","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Chili's":{"tags":{"name":"Chili's","amenity":"restaurant"},"name":"Chili's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China Buffet":{"tags":{"name":"China Buffet","amenity":"restaurant"},"name":"China Buffet","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China Garden":{"tags":{"name":"China Garden","amenity":"restaurant"},"name":"China Garden","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China House":{"tags":{"name":"China House","amenity":"restaurant"},"name":"China House","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China Town":{"tags":{"name":"China Town","amenity":"restaurant"},"name":"China Town","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China Wok":{"tags":{"name":"China Wok","amenity":"restaurant"},"name":"China Wok","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Chiquito":{"tags":{"name":"Chiquito","amenity":"restaurant"},"name":"Chiquito","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Chuck E. Cheese's":{"tags":{"name":"Chuck E. Cheese's","amenity":"restaurant"},"name":"Chuck E. Cheese's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Cici's Pizza":{"tags":{"name":"Cici's Pizza","amenity":"restaurant"},"name":"Cici's Pizza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Comedor":{"tags":{"name":"Comedor","amenity":"restaurant"},"name":"Comedor","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Comida China":{"tags":{"name":"Comida China","amenity":"restaurant"},"name":"Comida China","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Courtepaille":{"tags":{"name":"Courtepaille","amenity":"restaurant"},"name":"Courtepaille","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Cracker Barrel":{"tags":{"name":"Cracker Barrel","amenity":"restaurant"},"name":"Cracker Barrel","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Da Grasso":{"tags":{"name":"Da Grasso","amenity":"restaurant"},"name":"Da Grasso","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Da Vinci":{"tags":{"name":"Da Vinci","amenity":"restaurant"},"name":"Da Vinci","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Delphi":{"tags":{"name":"Delphi","amenity":"restaurant"},"name":"Delphi","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Denny's":{"tags":{"name":"Denny's","amenity":"restaurant"},"name":"Denny's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Deutsches Haus":{"tags":{"name":"Deutsches Haus","amenity":"restaurant"},"name":"Deutsches Haus","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Dionysos":{"tags":{"name":"Dionysos","amenity":"restaurant"},"name":"Dionysos","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Dolce Vita":{"tags":{"name":"Dolce Vita","amenity":"restaurant"},"name":"Dolce Vita","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Dorfkrug":{"tags":{"name":"Dorfkrug","amenity":"restaurant"},"name":"Dorfkrug","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/East Side Mario's":{"tags":{"name":"East Side Mario's","amenity":"restaurant"},"name":"East Side Mario's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/El Greco":{"tags":{"name":"El Greco","amenity":"restaurant"},"name":"El Greco","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/El Paso":{"tags":{"name":"El Paso","amenity":"restaurant"},"name":"El Paso","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/El Rancho":{"tags":{"name":"El Rancho","amenity":"restaurant"},"name":"El Rancho","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Europa":{"tags":{"name":"Europa","amenity":"restaurant"},"name":"Europa","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Famous Dave's":{"tags":{"name":"Famous Dave's","amenity":"restaurant"},"name":"Famous Dave's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Flunch":{"tags":{"name":"Flunch","amenity":"restaurant"},"name":"Flunch","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Frankie & Benny's":{"tags":{"name":"Frankie & Benny's","amenity":"restaurant"},"name":"Frankie & Benny's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Friendly's":{"tags":{"name":"Friendly's","amenity":"restaurant"},"name":"Friendly's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Gasthaus Krone":{"tags":{"name":"Gasthaus Krone","amenity":"restaurant"},"name":"Gasthaus Krone","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Gasthaus zur Linde":{"tags":{"name":"Gasthaus zur Linde","amenity":"restaurant"},"name":"Gasthaus zur Linde","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Gasthof zur Post":{"tags":{"name":"Gasthof zur Post","amenity":"restaurant"},"name":"Gasthof zur Post","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Golden Corral":{"tags":{"name":"Golden Corral","amenity":"restaurant"},"name":"Golden Corral","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Golden Dragon":{"tags":{"name":"Golden Dragon","amenity":"restaurant"},"name":"Golden Dragon","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Great Wall":{"tags":{"name":"Great Wall","amenity":"restaurant"},"name":"Great Wall","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Grüner Baum":{"tags":{"name":"Grüner Baum","amenity":"restaurant"},"name":"Grüner Baum","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Gusto":{"tags":{"name":"Gusto","amenity":"restaurant"},"name":"Gusto","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hard Rock Cafe":{"tags":{"name":"Hard Rock Cafe","amenity":"restaurant"},"name":"Hard Rock Cafe","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Harvester":{"tags":{"name":"Harvester","amenity":"restaurant"},"name":"Harvester","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hellas":{"tags":{"name":"Hellas","amenity":"restaurant"},"name":"Hellas","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hippopotamus":{"tags":{"name":"Hippopotamus","amenity":"restaurant"},"name":"Hippopotamus","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hirsch":{"tags":{"name":"Hirsch","amenity":"restaurant"},"name":"Hirsch","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hirschen":{"tags":{"name":"Hirschen","amenity":"restaurant"},"name":"Hirschen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hong Kong":{"tags":{"name":"Hong Kong","amenity":"restaurant"},"name":"Hong Kong","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hooters":{"tags":{"name":"Hooters","amenity":"restaurant"},"name":"Hooters","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/IHOP":{"tags":{"name":"IHOP","amenity":"restaurant"},"name":"IHOP","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/IL Патио":{"tags":{"name":"IL Патио","amenity":"restaurant"},"name":"IL Патио","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Jason's Deli":{"tags":{"name":"Jason's Deli","amenity":"restaurant"},"name":"Jason's Deli","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Joe's Crab Shack":{"tags":{"name":"Joe's Crab Shack","amenity":"restaurant"},"name":"Joe's Crab Shack","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Jägerhof":{"tags":{"name":"Jägerhof","amenity":"restaurant"},"name":"Jägerhof","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kantine":{"tags":{"name":"Kantine","amenity":"restaurant"},"name":"Kantine","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kelsey's":{"tags":{"name":"Kelsey's","amenity":"restaurant"},"name":"Kelsey's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kirchenwirt":{"tags":{"name":"Kirchenwirt","amenity":"restaurant"},"name":"Kirchenwirt","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kreta":{"tags":{"name":"Kreta","amenity":"restaurant"},"name":"Kreta","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kreuz":{"tags":{"name":"Kreuz","amenity":"restaurant"},"name":"Kreuz","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Krone":{"tags":{"name":"Krone","amenity":"restaurant"},"name":"Krone","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kudu":{"tags":{"name":"Kudu","amenity":"restaurant"},"name":"Kudu","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/L'Escale":{"tags":{"name":"L'Escale","amenity":"restaurant"},"name":"L'Escale","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/L'Osteria":{"tags":{"name":"L'Osteria","amenity":"restaurant"},"name":"L'Osteria","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Bodega":{"tags":{"name":"La Bodega","amenity":"restaurant"},"name":"La Bodega","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Boucherie":{"tags":{"name":"La Boucherie","amenity":"restaurant"},"name":"La Boucherie","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Cantina":{"tags":{"name":"La Cantina","amenity":"restaurant"},"name":"La Cantina","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Casa":{"tags":{"name":"La Casa","amenity":"restaurant"},"name":"La Casa","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Casona":{"tags":{"name":"La Casona","amenity":"restaurant"},"name":"La Casona","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Dolce Vita":{"tags":{"name":"La Dolce Vita","amenity":"restaurant"},"name":"La Dolce Vita","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Fontana":{"tags":{"name":"La Fontana","amenity":"restaurant"},"name":"La Fontana","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Gondola":{"tags":{"name":"La Gondola","amenity":"restaurant"},"name":"La Gondola","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Hacienda":{"tags":{"name":"La Hacienda","amenity":"restaurant"},"name":"La Hacienda","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Pataterie":{"tags":{"name":"La Pataterie","amenity":"restaurant"},"name":"La Pataterie","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Pergola":{"tags":{"name":"La Pergola","amenity":"restaurant"},"name":"La Pergola","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Perla":{"tags":{"name":"La Perla","amenity":"restaurant"},"name":"La Perla","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Piazza":{"tags":{"name":"La Piazza","amenity":"restaurant"},"name":"La Piazza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Piazzetta":{"tags":{"name":"La Piazzetta","amenity":"restaurant"},"name":"La Piazzetta","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Place":{"tags":{"name":"La Place","amenity":"restaurant"},"name":"La Place","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Scala":{"tags":{"name":"La Scala","amenity":"restaurant"},"name":"La Scala","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Strada":{"tags":{"name":"La Strada","amenity":"restaurant"},"name":"La Strada","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Tagliatella":{"tags":{"name":"La Tagliatella","amenity":"restaurant"},"name":"La Tagliatella","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Tasca":{"tags":{"name":"La Tasca","amenity":"restaurant"},"name":"La Tasca","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Taverna":{"tags":{"name":"La Taverna","amenity":"restaurant"},"name":"La Taverna","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Terrasse":{"tags":{"name":"La Terrasse","amenity":"restaurant"},"name":"La Terrasse","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Terraza":{"tags":{"name":"La Terraza","amenity":"restaurant"},"name":"La Terraza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Terrazza":{"tags":{"name":"La Terrazza","amenity":"restaurant"},"name":"La Terrazza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Trattoria":{"tags":{"name":"La Trattoria","amenity":"restaurant"},"name":"La Trattoria","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Lamm":{"tags":{"name":"Lamm","amenity":"restaurant"},"name":"Lamm","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Linde":{"tags":{"name":"Linde","amenity":"restaurant"},"name":"Linde","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Lindenhof":{"tags":{"name":"Lindenhof","amenity":"restaurant"},"name":"Lindenhof","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Little Chef":{"tags":{"name":"Little Chef","amenity":"restaurant"},"name":"Little Chef","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Little Italy":{"tags":{"name":"Little Italy","amenity":"restaurant"},"name":"Little Italy","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Logan's Roadhouse":{"tags":{"name":"Logan's Roadhouse","amenity":"restaurant"},"name":"Logan's Roadhouse","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/LongHorn Steakhouse":{"tags":{"name":"LongHorn Steakhouse","amenity":"restaurant"},"name":"LongHorn Steakhouse","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Lotus":{"tags":{"name":"Lotus","amenity":"restaurant"},"name":"Lotus","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Léon de Bruxelles":{"tags":{"name":"Léon de Bruxelles","amenity":"restaurant"},"name":"Léon de Bruxelles","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Löwen":{"tags":{"name":"Löwen","amenity":"restaurant"},"name":"Löwen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/MK Restaurants":{"tags":{"name":"MK Restaurants","amenity":"restaurant"},"name":"MK Restaurants","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Maharaja":{"tags":{"name":"Maharaja","amenity":"restaurant"},"name":"Maharaja","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mamma Mia":{"tags":{"name":"Mamma Mia","amenity":"restaurant"},"name":"Mamma Mia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mandarin":{"tags":{"name":"Mandarin","amenity":"restaurant"},"name":"Mandarin","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mang Inasal":{"tags":{"name":"Mang Inasal","amenity":"restaurant"},"name":"Mang Inasal","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Marco Polo":{"tags":{"name":"Marco Polo","amenity":"restaurant"},"name":"Marco Polo","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Marco's Pizza":{"tags":{"name":"Marco's Pizza","amenity":"restaurant"},"name":"Marco's Pizza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/McAlister's Deli":{"tags":{"name":"McAlister's Deli","amenity":"restaurant"},"name":"McAlister's Deli","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mediterraneo":{"tags":{"name":"Mediterraneo","amenity":"restaurant"},"name":"Mediterraneo","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mellow Mushroom":{"tags":{"name":"Mellow Mushroom","amenity":"restaurant"},"name":"Mellow Mushroom","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mensa":{"tags":{"name":"Mensa","amenity":"restaurant"},"name":"Mensa","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Milano":{"tags":{"name":"Milano","amenity":"restaurant"},"name":"Milano","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mimi's Cafe":{"tags":{"name":"Mimi's Cafe","amenity":"restaurant"},"name":"Mimi's Cafe","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Moe's Southwest Grill":{"tags":{"name":"Moe's Southwest Grill","amenity":"restaurant"},"name":"Moe's Southwest Grill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mykonos":{"tags":{"name":"Mykonos","amenity":"restaurant"},"name":"Mykonos","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mythos":{"tags":{"name":"Mythos","amenity":"restaurant"},"name":"Mythos","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Nando's":{"tags":{"name":"Nando's","amenity":"restaurant"},"name":"Nando's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Noodles & Company":{"tags":{"name":"Noodles & Company","amenity":"restaurant"},"name":"Noodles & Company","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/O'Charley's":{"tags":{"name":"O'Charley's","amenity":"restaurant"},"name":"O'Charley's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Oasis":{"tags":{"name":"Oasis","amenity":"restaurant"},"name":"Oasis","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ocean Basket":{"tags":{"name":"Ocean Basket","amenity":"restaurant"},"name":"Ocean Basket","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ochsen":{"tags":{"name":"Ochsen","amenity":"restaurant"},"name":"Ochsen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Old Chicago":{"tags":{"name":"Old Chicago","amenity":"restaurant"},"name":"Old Chicago","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Olive Garden":{"tags":{"name":"Olive Garden","amenity":"restaurant"},"name":"Olive Garden","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Olympia":{"tags":{"name":"Olympia","amenity":"restaurant"},"name":"Olympia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Osaka":{"tags":{"name":"Osaka","amenity":"restaurant"},"name":"Osaka","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Outback Steakhouse":{"tags":{"name":"Outback Steakhouse","amenity":"restaurant"},"name":"Outback Steakhouse","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/P.F. Chang's":{"tags":{"name":"P.F. Chang's","amenity":"restaurant"},"name":"P.F. Chang's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pancake House":{"tags":{"name":"Pancake House","amenity":"restaurant"},"name":"Pancake House","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Panda":{"tags":{"name":"Panda","amenity":"restaurant"},"name":"Panda","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Panera Bread":{"tags":{"name":"Panera Bread","amenity":"restaurant"},"name":"Panera Bread","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Panorama":{"tags":{"name":"Panorama","amenity":"restaurant"},"name":"Panorama","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Parrilla":{"tags":{"name":"Parrilla","amenity":"restaurant"},"name":"Parrilla","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Peking":{"tags":{"name":"Peking","amenity":"restaurant"},"name":"Peking","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Perkins":{"tags":{"name":"Perkins","amenity":"restaurant"},"name":"Perkins","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pinocchio":{"tags":{"name":"Pinocchio","amenity":"restaurant"},"name":"Pinocchio","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza Express":{"tags":{"name":"Pizza Express","amenity":"restaurant"},"name":"Pizza Express","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza Factory":{"tags":{"name":"Pizza Factory","amenity":"restaurant"},"name":"Pizza Factory","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza House":{"tags":{"name":"Pizza House","amenity":"restaurant"},"name":"Pizza House","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza Hut":{"tags":{"name":"Pizza Hut","cuisine":"pizza","amenity":"restaurant"},"name":"Pizza Hut","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza Ranch":{"tags":{"name":"Pizza Ranch","amenity":"restaurant"},"name":"Pizza Ranch","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizzeria Italia":{"tags":{"name":"Pizzeria Italia","amenity":"restaurant"},"name":"Pizzeria Italia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizzeria Milano":{"tags":{"name":"Pizzeria Milano","amenity":"restaurant"},"name":"Pizzeria Milano","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizzeria Napoli":{"tags":{"name":"Pizzeria Napoli","amenity":"restaurant"},"name":"Pizzeria Napoli","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizzeria Roma":{"tags":{"name":"Pizzeria Roma","amenity":"restaurant"},"name":"Pizzeria Roma","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizzeria Venezia":{"tags":{"name":"Pizzeria Venezia","amenity":"restaurant"},"name":"Pizzeria Venezia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Poivre Rouge":{"tags":{"name":"Poivre Rouge","amenity":"restaurant"},"name":"Poivre Rouge","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pomodoro":{"tags":{"name":"Pomodoro","amenity":"restaurant"},"name":"Pomodoro","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Portofino":{"tags":{"name":"Portofino","amenity":"restaurant"},"name":"Portofino","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Poseidon":{"tags":{"name":"Poseidon","amenity":"restaurant"},"name":"Poseidon","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Prezzo":{"tags":{"name":"Prezzo","amenity":"restaurant"},"name":"Prezzo","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Qdoba Mexican Grill":{"tags":{"name":"Qdoba Mexican Grill","amenity":"restaurant"},"name":"Qdoba Mexican Grill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ratskeller":{"tags":{"name":"Ratskeller","amenity":"restaurant"},"name":"Ratskeller","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Red Lobster":{"tags":{"name":"Red Lobster","amenity":"restaurant"},"name":"Red Lobster","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Red Robin":{"tags":{"name":"Red Robin","amenity":"restaurant"},"name":"Red Robin","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Restaurante Universitário":{"tags":{"name":"Restaurante Universitário","amenity":"restaurant"},"name":"Restaurante Universitário","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Rhodos":{"tags":{"name":"Rhodos","amenity":"restaurant"},"name":"Rhodos","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ristorante Del Arte":{"tags":{"name":"Ristorante Del Arte","amenity":"restaurant"},"name":"Ristorante Del Arte","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Roma":{"tags":{"name":"Roma","amenity":"restaurant"},"name":"Roma","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Rose":{"tags":{"name":"Rose","amenity":"restaurant"},"name":"Rose","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Round Table Pizza":{"tags":{"name":"Round Table Pizza","amenity":"restaurant"},"name":"Round Table Pizza","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ruby Tuesday":{"tags":{"name":"Ruby Tuesday","amenity":"restaurant"},"name":"Ruby Tuesday","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Rössle":{"tags":{"name":"Rössle","amenity":"restaurant"},"name":"Rössle","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Rössli":{"tags":{"name":"Rössli","amenity":"restaurant"},"name":"Rössli","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Saigon":{"tags":{"name":"Saigon","amenity":"restaurant"},"name":"Saigon","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sakura":{"tags":{"name":"Sakura","amenity":"restaurant"},"name":"Sakura","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/San Marco":{"tags":{"name":"San Marco","amenity":"restaurant"},"name":"San Marco","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Santorini":{"tags":{"name":"Santorini","amenity":"restaurant"},"name":"Santorini","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Schwarzer Adler":{"tags":{"name":"Schwarzer Adler","amenity":"restaurant"},"name":"Schwarzer Adler","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Schützenhaus":{"tags":{"name":"Schützenhaus","amenity":"restaurant"},"name":"Schützenhaus","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shakey's":{"tags":{"name":"Shakey's","amenity":"restaurant"},"name":"Shakey's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shalimar":{"tags":{"name":"Shalimar","amenity":"restaurant"},"name":"Shalimar","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shanghai":{"tags":{"name":"Shanghai","amenity":"restaurant"},"name":"Shanghai","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shari's":{"tags":{"name":"Shari's","amenity":"restaurant"},"name":"Shari's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shoney's":{"tags":{"name":"Shoney's","amenity":"restaurant"},"name":"Shoney's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sizzler":{"tags":{"name":"Sizzler","amenity":"restaurant"},"name":"Sizzler","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sonne":{"tags":{"name":"Sonne","amenity":"restaurant"},"name":"Sonne","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sphinx":{"tags":{"name":"Sphinx","amenity":"restaurant"},"name":"Sphinx","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sportheim":{"tags":{"name":"Sportheim","amenity":"restaurant"},"name":"Sportheim","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Spur":{"tags":{"name":"Spur","amenity":"restaurant"},"name":"Spur","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Steak 'n Shake":{"tags":{"name":"Steak 'n Shake","cuisine":"burger","amenity":"restaurant"},"name":"Steak 'n Shake","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sternen":{"tags":{"name":"Sternen","amenity":"restaurant"},"name":"Sternen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sunset Grill":{"tags":{"name":"Sunset Grill","amenity":"restaurant"},"name":"Sunset Grill","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sushi":{"tags":{"name":"Sushi","amenity":"restaurant"},"name":"Sushi","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sushi Bar":{"tags":{"name":"Sushi Bar","amenity":"restaurant"},"name":"Sushi Bar","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Swiss Chalet":{"tags":{"name":"Swiss Chalet","amenity":"restaurant"},"name":"Swiss Chalet","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Syrtaki":{"tags":{"name":"Syrtaki","amenity":"restaurant"},"name":"Syrtaki","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/TGI Friday's":{"tags":{"name":"TGI Friday's","amenity":"restaurant"},"name":"TGI Friday's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Taj Mahal":{"tags":{"name":"Taj Mahal","amenity":"restaurant"},"name":"Taj Mahal","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Taste of India":{"tags":{"name":"Taste of India","amenity":"restaurant"},"name":"Taste of India","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Taverna":{"tags":{"name":"Taverna","amenity":"restaurant"},"name":"Taverna","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Texas Roadhouse":{"tags":{"name":"Texas Roadhouse","amenity":"restaurant"},"name":"Texas Roadhouse","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/The Cheesecake Factory":{"tags":{"name":"The Cheesecake Factory","amenity":"restaurant"},"name":"The Cheesecake Factory","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Toby Carvery":{"tags":{"name":"Toby Carvery","amenity":"restaurant"},"name":"Toby Carvery","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Tony Roma's":{"tags":{"name":"Tony Roma's","amenity":"restaurant"},"name":"Tony Roma's","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Toscana":{"tags":{"name":"Toscana","amenity":"restaurant"},"name":"Toscana","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Trattoria":{"tags":{"name":"Trattoria","amenity":"restaurant"},"name":"Trattoria","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Traube":{"tags":{"name":"Traube","amenity":"restaurant"},"name":"Traube","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Vapiano":{"tags":{"name":"Vapiano","amenity":"restaurant"},"name":"Vapiano","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Venezia":{"tags":{"name":"Venezia","amenity":"restaurant"},"name":"Venezia","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Village Inn":{"tags":{"name":"Village Inn","amenity":"restaurant"},"name":"Village Inn","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Vips":{"tags":{"name":"Vips","amenity":"restaurant"},"name":"Vips","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Waffle House":{"tags":{"name":"Waffle House","amenity":"restaurant"},"name":"Waffle House","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Wagamama":{"tags":{"name":"Wagamama","amenity":"restaurant"},"name":"Wagamama","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Waldschänke":{"tags":{"name":"Waldschänke","amenity":"restaurant"},"name":"Waldschänke","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Warung":{"tags":{"name":"Warung","amenity":"restaurant"},"name":"Warung","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Wasabi":{"tags":{"name":"Wasabi","amenity":"restaurant"},"name":"Wasabi","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zizzi":{"tags":{"name":"Zizzi","amenity":"restaurant"},"name":"Zizzi","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zorbas":{"tags":{"name":"Zorbas","amenity":"restaurant"},"name":"Zorbas","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zum Hirschen":{"tags":{"name":"Zum Hirschen","amenity":"restaurant"},"name":"Zum Hirschen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zum Löwen":{"tags":{"name":"Zum Löwen","amenity":"restaurant"},"name":"Zum Löwen","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Krone":{"tags":{"name":"Zur Krone","amenity":"restaurant"},"name":"Zur Krone","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Linde":{"tags":{"name":"Zur Linde","amenity":"restaurant"},"name":"Zur Linde","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Post":{"tags":{"name":"Zur Post","amenity":"restaurant"},"name":"Zur Post","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Sonne":{"tags":{"name":"Zur Sonne","amenity":"restaurant"},"name":"Zur Sonne","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Евразия":{"tags":{"name":"Евразия","amenity":"restaurant"},"name":"Евразия","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ресторан":{"tags":{"name":"Ресторан","amenity":"restaurant"},"name":"Ресторан","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Тануки":{"tags":{"name":"Тануки","amenity":"restaurant"},"name":"Тануки","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Якитория":{"tags":{"name":"Якитория","amenity":"restaurant"},"name":"Якитория","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/رستوران":{"tags":{"name":"رستوران","amenity":"restaurant"},"name":"رستوران","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/مطعم":{"tags":{"name":"مطعم","amenity":"restaurant"},"name":"مطعم","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/はま寿司":{"tags":{"name":"はま寿司","amenity":"restaurant"},"name":"はま寿司","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/びっくりドンキー":{"tags":{"name":"びっくりドンキー","amenity":"restaurant"},"name":"びっくりドンキー","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/やよい軒":{"tags":{"name":"やよい軒","amenity":"restaurant"},"name":"やよい軒","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ガスト":{"tags":{"name":"ガスト","name:en":"Gusto","amenity":"restaurant"},"name":"ガスト","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ココス":{"tags":{"name":"ココス","amenity":"restaurant"},"name":"ココス","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/サイゼリア":{"tags":{"name":"サイゼリア","amenity":"restaurant"},"name":"サイゼリア","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/サイゼリヤ":{"tags":{"name":"サイゼリヤ","amenity":"restaurant"},"name":"サイゼリヤ","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ジョイフル":{"tags":{"name":"ジョイフル","amenity":"restaurant"},"name":"ジョイフル","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ジョナサン":{"tags":{"name":"ジョナサン","amenity":"restaurant"},"name":"ジョナサン","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ジョリーパスタ":{"tags":{"name":"ジョリーパスタ","amenity":"restaurant"},"name":"ジョリーパスタ","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/デニーズ":{"tags":{"name":"デニーズ","amenity":"restaurant"},"name":"デニーズ","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/バーミヤン":{"tags":{"name":"バーミヤン","amenity":"restaurant"},"name":"バーミヤン","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ロイヤルホスト":{"tags":{"name":"ロイヤルホスト","amenity":"restaurant"},"name":"ロイヤルホスト","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/丸亀製麺":{"tags":{"name":"丸亀製麺","amenity":"restaurant"},"name":"丸亀製麺","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/八方雲集":{"tags":{"name":"八方雲集","amenity":"restaurant"},"name":"八方雲集","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/夢庵":{"tags":{"name":"夢庵","amenity":"restaurant"},"name":"夢庵","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/大戸屋":{"tags":{"name":"大戸屋","amenity":"restaurant"},"name":"大戸屋","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/大阪王将":{"tags":{"name":"大阪王将","amenity":"restaurant"},"name":"大阪王将","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/天下一品":{"tags":{"name":"天下一品","amenity":"restaurant"},"name":"天下一品","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/安楽亭":{"tags":{"name":"安楽亭","amenity":"restaurant"},"name":"安楽亭","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/牛角":{"tags":{"name":"牛角","amenity":"restaurant"},"name":"牛角","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/食堂":{"tags":{"name":"食堂","amenity":"restaurant"},"name":"食堂","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/餃子の王将":{"tags":{"name":"餃子の王将","amenity":"restaurant"},"name":"餃子の王将","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/바다횟집 (Bada Fish Restaurant)":{"tags":{"name":"바다횟집 (Bada Fish Restaurant)","amenity":"restaurant"},"name":"바다횟집 (Bada Fish Restaurant)","icon":"restaurant","geometry":["point","area"],"fields":["name","cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/school/Adolfo Lopez Mateos":{"tags":{"name":"Adolfo Lopez Mateos","amenity":"school"},"name":"Adolfo Lopez Mateos","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Agustin Ya�ez":{"tags":{"name":"Agustin Ya�ez","amenity":"school"},"name":"Agustin Ya�ez","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Albert-Schweitzer-Schule":{"tags":{"name":"Albert-Schweitzer-Schule","amenity":"school"},"name":"Albert-Schweitzer-Schule","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Amado Nervo":{"tags":{"name":"Amado Nervo","amenity":"school"},"name":"Amado Nervo","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Astrid-Lindgren-Schule":{"tags":{"name":"Astrid-Lindgren-Schule","amenity":"school"},"name":"Astrid-Lindgren-Schule","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Benito Juarez":{"tags":{"name":"Benito Juarez","amenity":"school"},"name":"Benito Juarez","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Brown School":{"tags":{"name":"Brown School","amenity":"school"},"name":"Brown School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/CEM":{"tags":{"name":"CEM","amenity":"school"},"name":"CEM","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Center School":{"tags":{"name":"Center School","amenity":"school"},"name":"Center School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Central Elementary School":{"tags":{"name":"Central Elementary School","amenity":"school"},"name":"Central Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Central High School":{"tags":{"name":"Central High School","amenity":"school"},"name":"Central High School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Central School":{"tags":{"name":"Central School","amenity":"school"},"name":"Central School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Colegio San José":{"tags":{"name":"Colegio San José","amenity":"school"},"name":"Colegio San José","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Collège Jean Moulin":{"tags":{"name":"Collège Jean Moulin","amenity":"school"},"name":"Collège Jean Moulin","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Collège privé Saint-Joseph":{"tags":{"name":"Collège privé Saint-Joseph","amenity":"school"},"name":"Collège privé Saint-Joseph","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Cuauhtemoc":{"tags":{"name":"Cuauhtemoc","amenity":"school"},"name":"Cuauhtemoc","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Curso Comunitario":{"tags":{"name":"Curso Comunitario","amenity":"school"},"name":"Curso Comunitario","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Cursos Comunitarios":{"tags":{"name":"Cursos Comunitarios","amenity":"school"},"name":"Cursos Comunitarios","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/EPP":{"tags":{"name":"EPP","amenity":"school"},"name":"EPP","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Emiliano Zapata":{"tags":{"name":"Emiliano Zapata","amenity":"school"},"name":"Emiliano Zapata","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Fairview Elementary School":{"tags":{"name":"Fairview Elementary School","amenity":"school"},"name":"Fairview Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Fairview School":{"tags":{"name":"Fairview School","amenity":"school"},"name":"Fairview School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Francisco I Madero":{"tags":{"name":"Francisco I Madero","amenity":"school"},"name":"Francisco I Madero","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Francisco I. Madero":{"tags":{"name":"Francisco I. Madero","amenity":"school"},"name":"Francisco I. Madero","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Francisco Villa":{"tags":{"name":"Francisco Villa","amenity":"school"},"name":"Francisco Villa","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Franklin Elementary School":{"tags":{"name":"Franklin Elementary School","amenity":"school"},"name":"Franklin Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Franklin School":{"tags":{"name":"Franklin School","amenity":"school"},"name":"Franklin School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Garfield Elementary School":{"tags":{"name":"Garfield Elementary School","amenity":"school"},"name":"Garfield Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Garfield School":{"tags":{"name":"Garfield School","amenity":"school"},"name":"Garfield School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Gimnazjum nr 1":{"tags":{"name":"Gimnazjum nr 1","amenity":"school"},"name":"Gimnazjum nr 1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Government School":{"tags":{"name":"Government School","amenity":"school"},"name":"Government School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Gregorio Torres Quintero":{"tags":{"name":"Gregorio Torres Quintero","amenity":"school"},"name":"Gregorio Torres Quintero","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Groupe Scolaire":{"tags":{"name":"Groupe Scolaire","amenity":"school"},"name":"Groupe Scolaire","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Guadalupe Victoria":{"tags":{"name":"Guadalupe Victoria","amenity":"school"},"name":"Guadalupe Victoria","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Highland School":{"tags":{"name":"Highland School","amenity":"school"},"name":"Highland School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Hillcrest Elementary School":{"tags":{"name":"Hillcrest Elementary School","amenity":"school"},"name":"Hillcrest Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Holy Cross School":{"tags":{"name":"Holy Cross School","amenity":"school"},"name":"Holy Cross School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Holy Family School":{"tags":{"name":"Holy Family School","amenity":"school"},"name":"Holy Family School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Holy Trinity School":{"tags":{"name":"Holy Trinity School","amenity":"school"},"name":"Holy Trinity School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Ignacio Allende":{"tags":{"name":"Ignacio Allende","amenity":"school"},"name":"Ignacio Allende","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Ignacio Zaragoza":{"tags":{"name":"Ignacio Zaragoza","amenity":"school"},"name":"Ignacio Zaragoza","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Immaculate Conception School":{"tags":{"name":"Immaculate Conception School","amenity":"school"},"name":"Immaculate Conception School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jackson Elementary School":{"tags":{"name":"Jackson Elementary School","amenity":"school"},"name":"Jackson Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jackson School":{"tags":{"name":"Jackson School","amenity":"school"},"name":"Jackson School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jefferson Elementary School":{"tags":{"name":"Jefferson Elementary School","amenity":"school"},"name":"Jefferson Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jefferson School":{"tags":{"name":"Jefferson School","amenity":"school"},"name":"Jefferson School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jose Clemente Orozco":{"tags":{"name":"Jose Clemente Orozco","amenity":"school"},"name":"Jose Clemente Orozco","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jose Ma Morelos Y Pavon":{"tags":{"name":"Jose Ma Morelos Y Pavon","amenity":"school"},"name":"Jose Ma Morelos Y Pavon","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Jose Vasconcelos":{"tags":{"name":"Jose Vasconcelos","amenity":"school"},"name":"Jose Vasconcelos","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Josefa Ortiz De Dominguez":{"tags":{"name":"Josefa Ortiz De Dominguez","amenity":"school"},"name":"Josefa Ortiz De Dominguez","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Juan Escutia":{"tags":{"name":"Juan Escutia","amenity":"school"},"name":"Juan Escutia","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Justo Sierra":{"tags":{"name":"Justo Sierra","amenity":"school"},"name":"Justo Sierra","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Kumon":{"tags":{"name":"Kumon","amenity":"school"},"name":"Kumon","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Lazaro Cardenas":{"tags":{"name":"Lazaro Cardenas","amenity":"school"},"name":"Lazaro Cardenas","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Lazaro Cardenas Del Rio":{"tags":{"name":"Lazaro Cardenas Del Rio","amenity":"school"},"name":"Lazaro Cardenas Del Rio","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Leona Vicario":{"tags":{"name":"Leona Vicario","amenity":"school"},"name":"Leona Vicario","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Liberty Elementary School":{"tags":{"name":"Liberty Elementary School","amenity":"school"},"name":"Liberty Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Liberty School":{"tags":{"name":"Liberty School","amenity":"school"},"name":"Liberty School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Lincoln Elementary School":{"tags":{"name":"Lincoln Elementary School","amenity":"school"},"name":"Lincoln Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Lincoln School":{"tags":{"name":"Lincoln School","amenity":"school"},"name":"Lincoln School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Longfellow Elementary School":{"tags":{"name":"Longfellow Elementary School","amenity":"school"},"name":"Longfellow Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Longfellow School":{"tags":{"name":"Longfellow School","amenity":"school"},"name":"Longfellow School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Madison Elementary School":{"tags":{"name":"Madison Elementary School","amenity":"school"},"name":"Madison Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Manuel Lopez Cotilla":{"tags":{"name":"Manuel Lopez Cotilla","amenity":"school"},"name":"Manuel Lopez Cotilla","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Maple Grove School":{"tags":{"name":"Maple Grove School","amenity":"school"},"name":"Maple Grove School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/McKinley Elementary School":{"tags":{"name":"McKinley Elementary School","amenity":"school"},"name":"McKinley Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/McKinley School":{"tags":{"name":"McKinley School","amenity":"school"},"name":"McKinley School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Miguel Hidalgo":{"tags":{"name":"Miguel Hidalgo","amenity":"school"},"name":"Miguel Hidalgo","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Miguel Hidalgo Y Costilla":{"tags":{"name":"Miguel Hidalgo Y Costilla","amenity":"school"},"name":"Miguel Hidalgo Y Costilla","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Miller School":{"tags":{"name":"Miller School","amenity":"school"},"name":"Miller School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Mount Pleasant School":{"tags":{"name":"Mount Pleasant School","amenity":"school"},"name":"Mount Pleasant School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Mount Zion School":{"tags":{"name":"Mount Zion School","amenity":"school"},"name":"Mount Zion School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Mountain View Elementary School":{"tags":{"name":"Mountain View Elementary School","amenity":"school"},"name":"Mountain View Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/New Hope School":{"tags":{"name":"New Hope School","amenity":"school"},"name":"New Hope School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Nicolas Bravo":{"tags":{"name":"Nicolas Bravo","amenity":"school"},"name":"Nicolas Bravo","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Ni�os Heroes":{"tags":{"name":"Ni�os Heroes","amenity":"school"},"name":"Ni�os Heroes","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Nombre En Tramite":{"tags":{"name":"Nombre En Tramite","amenity":"school"},"name":"Nombre En Tramite","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/North Elementary School":{"tags":{"name":"North Elementary School","amenity":"school"},"name":"North Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Oak Grove School":{"tags":{"name":"Oak Grove School","amenity":"school"},"name":"Oak Grove School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Pedro Moreno":{"tags":{"name":"Pedro Moreno","amenity":"school"},"name":"Pedro Moreno","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Pestalozzischule":{"tags":{"name":"Pestalozzischule","amenity":"school"},"name":"Pestalozzischule","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Pine Grove School":{"tags":{"name":"Pine Grove School","amenity":"school"},"name":"Pine Grove School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Pleasant Hill School":{"tags":{"name":"Pleasant Hill School","amenity":"school"},"name":"Pleasant Hill School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Pleasant Valley School":{"tags":{"name":"Pleasant Valley School","amenity":"school"},"name":"Pleasant Valley School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Pleasant View School":{"tags":{"name":"Pleasant View School","amenity":"school"},"name":"Pleasant View School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Primaria Comunitaria":{"tags":{"name":"Primaria Comunitaria","amenity":"school"},"name":"Primaria Comunitaria","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Ramon Corona":{"tags":{"name":"Ramon Corona","amenity":"school"},"name":"Ramon Corona","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Ricardo Flores Magon":{"tags":{"name":"Ricardo Flores Magon","amenity":"school"},"name":"Ricardo Flores Magon","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Riverside School":{"tags":{"name":"Riverside School","amenity":"school"},"name":"Riverside School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Roosevelt Elementary School":{"tags":{"name":"Roosevelt Elementary School","amenity":"school"},"name":"Roosevelt Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Roosevelt School":{"tags":{"name":"Roosevelt School","amenity":"school"},"name":"Roosevelt School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/SD":{"tags":{"name":"SD","amenity":"school"},"name":"SD","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/SDN":{"tags":{"name":"SDN","amenity":"school"},"name":"SDN","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Sacred Heart School":{"tags":{"name":"Sacred Heart School","amenity":"school"},"name":"Sacred Heart School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Francis School":{"tags":{"name":"Saint Francis School","amenity":"school"},"name":"Saint Francis School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint James School":{"tags":{"name":"Saint James School","amenity":"school"},"name":"Saint James School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Johns School":{"tags":{"name":"Saint Johns School","amenity":"school"},"name":"Saint Johns School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Joseph School":{"tags":{"name":"Saint Joseph School","amenity":"school"},"name":"Saint Joseph School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Josephs School":{"tags":{"name":"Saint Josephs School","amenity":"school"},"name":"Saint Josephs School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Kizito Primary School":{"tags":{"name":"Saint Kizito Primary School","amenity":"school"},"name":"Saint Kizito Primary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Mary School":{"tags":{"name":"Saint Mary School","amenity":"school"},"name":"Saint Mary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Marys School":{"tags":{"name":"Saint Marys School","amenity":"school"},"name":"Saint Marys School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Patricks School":{"tags":{"name":"Saint Patricks School","amenity":"school"},"name":"Saint Patricks School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Paul School":{"tags":{"name":"Saint Paul School","amenity":"school"},"name":"Saint Paul School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Pauls School":{"tags":{"name":"Saint Pauls School","amenity":"school"},"name":"Saint Pauls School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Saint Peters School":{"tags":{"name":"Saint Peters School","amenity":"school"},"name":"Saint Peters School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Schillerschule":{"tags":{"name":"Schillerschule","amenity":"school"},"name":"Schillerschule","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/School Number 1":{"tags":{"name":"School Number 1","amenity":"school"},"name":"School Number 1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/School Number 2":{"tags":{"name":"School Number 2","amenity":"school"},"name":"School Number 2","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/School Number 3":{"tags":{"name":"School Number 3","amenity":"school"},"name":"School Number 3","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/School Number 4":{"tags":{"name":"School Number 4","amenity":"school"},"name":"School Number 4","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Smith School":{"tags":{"name":"Smith School","amenity":"school"},"name":"Smith School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/South Elementary School":{"tags":{"name":"South Elementary School","amenity":"school"},"name":"South Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Sunnyside School":{"tags":{"name":"Sunnyside School","amenity":"school"},"name":"Sunnyside School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Szkoła Podstawowa nr 1":{"tags":{"name":"Szkoła Podstawowa nr 1","amenity":"school"},"name":"Szkoła Podstawowa nr 1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Szkoła Podstawowa nr 2":{"tags":{"name":"Szkoła Podstawowa nr 2","amenity":"school"},"name":"Szkoła Podstawowa nr 2","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Szkoła Podstawowa nr 3":{"tags":{"name":"Szkoła Podstawowa nr 3","amenity":"school"},"name":"Szkoła Podstawowa nr 3","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Trinity School":{"tags":{"name":"Trinity School","amenity":"school"},"name":"Trinity School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/UNIDAD EDUCATIVA":{"tags":{"name":"UNIDAD EDUCATIVA","amenity":"school"},"name":"UNIDAD EDUCATIVA","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Union School":{"tags":{"name":"Union School","amenity":"school"},"name":"Union School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Valentin Gomez Farias":{"tags":{"name":"Valentin Gomez Farias","amenity":"school"},"name":"Valentin Gomez Farias","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Venustiano Carranza":{"tags":{"name":"Venustiano Carranza","amenity":"school"},"name":"Venustiano Carranza","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Vicente Guerrero":{"tags":{"name":"Vicente Guerrero","amenity":"school"},"name":"Vicente Guerrero","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Volkshochschule":{"tags":{"name":"Volkshochschule","amenity":"school"},"name":"Volkshochschule","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Volksschule":{"tags":{"name":"Volksschule","amenity":"school"},"name":"Volksschule","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Washington Elementary School":{"tags":{"name":"Washington Elementary School","amenity":"school"},"name":"Washington Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Washington School":{"tags":{"name":"Washington School","amenity":"school"},"name":"Washington School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/West Elementary School":{"tags":{"name":"West Elementary School","amenity":"school"},"name":"West Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/White School":{"tags":{"name":"White School","amenity":"school"},"name":"White School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Wilson Elementary School":{"tags":{"name":"Wilson Elementary School","amenity":"school"},"name":"Wilson Elementary School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Wilson School":{"tags":{"name":"Wilson School","amenity":"school"},"name":"Wilson School","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Általános iskola":{"tags":{"name":"Általános iskola","amenity":"school"},"name":"Általános iskola","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École Jules Ferry":{"tags":{"name":"École Jules Ferry","amenity":"school"},"name":"École Jules Ferry","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École Notre-Dame":{"tags":{"name":"École Notre-Dame","amenity":"school"},"name":"École Notre-Dame","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École Saint-Joseph":{"tags":{"name":"École Saint-Joseph","amenity":"school"},"name":"École Saint-Joseph","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École primaire Jean Jaurès":{"tags":{"name":"École primaire Jean Jaurès","amenity":"school"},"name":"École primaire Jean Jaurès","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École primaire Jules Ferry":{"tags":{"name":"École primaire Jules Ferry","amenity":"school"},"name":"École primaire Jules Ferry","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École primaire privée Notre-Dame":{"tags":{"name":"École primaire privée Notre-Dame","amenity":"school"},"name":"École primaire privée Notre-Dame","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École primaire privée Saint-Joseph":{"tags":{"name":"École primaire privée Saint-Joseph","amenity":"school"},"name":"École primaire privée Saint-Joseph","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École primaire privée Sainte-Marie":{"tags":{"name":"École primaire privée Sainte-Marie","amenity":"school"},"name":"École primaire privée Sainte-Marie","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/École élémentaire Jules Ferry":{"tags":{"name":"École élémentaire Jules Ferry","amenity":"school"},"name":"École élémentaire Jules Ferry","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Școala Generală":{"tags":{"name":"Școala Generală","amenity":"school"},"name":"Școala Generală","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Școală":{"tags":{"name":"Școală","amenity":"school"},"name":"Școală","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Вечерняя школа":{"tags":{"name":"Вечерняя школа","amenity":"school"},"name":"Вечерняя школа","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Гимназия №1":{"tags":{"name":"Гимназия №1","amenity":"school"},"name":"Гимназия №1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Средняя школа №1":{"tags":{"name":"Средняя школа №1","amenity":"school"},"name":"Средняя школа №1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Средняя школа №2":{"tags":{"name":"Средняя школа №2","amenity":"school"},"name":"Средняя школа №2","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Средняя школа №3":{"tags":{"name":"Средняя школа №3","amenity":"school"},"name":"Средняя школа №3","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа № 1":{"tags":{"name":"Школа № 1","amenity":"school"},"name":"Школа № 1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа № 2":{"tags":{"name":"Школа № 2","amenity":"school"},"name":"Школа № 2","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа № 3":{"tags":{"name":"Школа № 3","amenity":"school"},"name":"Школа № 3","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа № 4":{"tags":{"name":"Школа № 4","amenity":"school"},"name":"Школа № 4","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа № 5":{"tags":{"name":"Школа № 5","amenity":"school"},"name":"Школа № 5","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №1":{"tags":{"name":"Школа №1","amenity":"school"},"name":"Школа №1","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №10":{"tags":{"name":"Школа №10","amenity":"school"},"name":"Школа №10","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №11":{"tags":{"name":"Школа №11","amenity":"school"},"name":"Школа №11","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №12":{"tags":{"name":"Школа №12","amenity":"school"},"name":"Школа №12","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №13":{"tags":{"name":"Школа №13","amenity":"school"},"name":"Школа №13","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №14":{"tags":{"name":"Школа №14","amenity":"school"},"name":"Школа №14","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №15":{"tags":{"name":"Школа №15","amenity":"school"},"name":"Школа №15","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №16":{"tags":{"name":"Школа №16","amenity":"school"},"name":"Школа №16","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №17":{"tags":{"name":"Школа №17","amenity":"school"},"name":"Школа №17","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №18":{"tags":{"name":"Школа №18","amenity":"school"},"name":"Школа №18","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №19":{"tags":{"name":"Школа №19","amenity":"school"},"name":"Школа №19","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №2":{"tags":{"name":"Школа №2","amenity":"school"},"name":"Школа №2","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №20":{"tags":{"name":"Школа №20","amenity":"school"},"name":"Школа №20","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №21":{"tags":{"name":"Школа №21","amenity":"school"},"name":"Школа №21","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №22":{"tags":{"name":"Школа №22","amenity":"school"},"name":"Школа №22","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №23":{"tags":{"name":"Школа №23","amenity":"school"},"name":"Школа №23","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №24":{"tags":{"name":"Школа №24","amenity":"school"},"name":"Школа №24","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №25":{"tags":{"name":"Школа №25","amenity":"school"},"name":"Школа №25","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №26":{"tags":{"name":"Школа №26","amenity":"school"},"name":"Школа №26","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №27":{"tags":{"name":"Школа №27","amenity":"school"},"name":"Школа №27","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №28":{"tags":{"name":"Школа №28","amenity":"school"},"name":"Школа №28","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №3":{"tags":{"name":"Школа №3","amenity":"school"},"name":"Школа №3","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №31":{"tags":{"name":"Школа №31","amenity":"school"},"name":"Школа №31","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №35":{"tags":{"name":"Школа №35","amenity":"school"},"name":"Школа №35","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №4":{"tags":{"name":"Школа №4","amenity":"school"},"name":"Школа №4","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №5":{"tags":{"name":"Школа №5","amenity":"school"},"name":"Школа №5","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №6":{"tags":{"name":"Школа №6","amenity":"school"},"name":"Школа №6","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №7":{"tags":{"name":"Школа №7","amenity":"school"},"name":"Школа №7","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №8":{"tags":{"name":"Школа №8","amenity":"school"},"name":"Школа №8","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/Школа №9":{"tags":{"name":"Школа №9","amenity":"school"},"name":"Школа №9","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/مدرسة":{"tags":{"name":"مدرسة","amenity":"school"},"name":"مدرسة","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/مدرسه":{"tags":{"name":"مدرسه","amenity":"school"},"name":"مدرسه","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/市立南中学校":{"tags":{"name":"市立南中学校","amenity":"school"},"name":"市立南中学校","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/市立南小学校":{"tags":{"name":"市立南小学校","amenity":"school"},"name":"市立南小学校","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/school/市立東中学校":{"tags":{"name":"市立東中学校","amenity":"school"},"name":"市立東中学校","icon":"school","geometry":["point","area"],"fields":["name","operator","address","religion","denomination"],"suggestion":true},"amenity/social_facility/Safe Haven":{"tags":{"name":"Safe Haven","amenity":"social_facility"},"name":"Safe Haven","icon":"poi-social-facility","geometry":["point","area"],"fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"suggestion":true},"amenity/social_facility/Детский дом":{"tags":{"name":"Детский дом","amenity":"social_facility"},"name":"Детский дом","icon":"poi-social-facility","geometry":["point","area"],"fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"suggestion":true},"amenity/social_facility/Социальный участковый":{"tags":{"name":"Социальный участковый","amenity":"social_facility"},"name":"Социальный участковый","icon":"poi-social-facility","geometry":["point","area"],"fields":["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"suggestion":true},"amenity/theatre/Amfiteatr":{"tags":{"name":"Amfiteatr","amenity":"theatre"},"name":"Amfiteatr","icon":"theatre","geometry":["point","area"],"fields":["name","operator","address","building_area"],"suggestion":true},"amenity/theatre/Amphitheater":{"tags":{"name":"Amphitheater","amenity":"theatre"},"name":"Amphitheater","icon":"theatre","geometry":["point","area"],"fields":["name","operator","address","building_area"],"suggestion":true},"amenity/theatre/Amphitheatre":{"tags":{"name":"Amphitheatre","amenity":"theatre"},"name":"Amphitheatre","icon":"theatre","geometry":["point","area"],"fields":["name","operator","address","building_area"],"suggestion":true},"amenity/theatre/Freilichtbühne":{"tags":{"name":"Freilichtbühne","amenity":"theatre"},"name":"Freilichtbühne","icon":"theatre","geometry":["point","area"],"fields":["name","operator","address","building_area"],"suggestion":true},"amenity/theatre/Teatro Comunale":{"tags":{"name":"Teatro Comunale","amenity":"theatre"},"name":"Teatro Comunale","icon":"theatre","geometry":["point","area"],"fields":["name","operator","address","building_area"],"suggestion":true},"leisure/fitness_centre/LA Fitness":{"tags":{"name":"LA Fitness","leisure":"fitness_centre"},"name":"LA Fitness","icon":"pitch","geometry":["point","area"],"fields":["name","sport","address","building_area","opening_hours"],"suggestion":true},"leisure/fitness_centre/Planet Fitness":{"tags":{"name":"Planet Fitness","leisure":"fitness_centre"},"name":"Planet Fitness","icon":"pitch","geometry":["point","area"],"fields":["name","sport","address","building_area","opening_hours"],"suggestion":true},"leisure/fitness_centre/Snap Fitness":{"tags":{"name":"Snap Fitness","leisure":"fitness_centre"},"name":"Snap Fitness","icon":"pitch","geometry":["point","area"],"fields":["name","sport","address","building_area","opening_hours"],"suggestion":true},"leisure/playground/Çocuk Parkı":{"tags":{"name":"Çocuk Parkı","leisure":"playground"},"name":"Çocuk Parkı","icon":"playground","geometry":["point","area"],"fields":["name","operator","surface","playground/max_age","playground/min_age","access_simple"],"suggestion":true},"leisure/playground/놀이터":{"tags":{"name":"놀이터","leisure":"playground"},"name":"놀이터","icon":"playground","geometry":["point","area"],"fields":["name","operator","surface","playground/max_age","playground/min_age","access_simple"],"suggestion":true},"leisure/sports_centre/Anytime Fitness":{"tags":{"name":"Anytime Fitness","leisure":"sports_centre"},"name":"Anytime Fitness","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Complejo Municipal de Deportes":{"tags":{"name":"Complejo Municipal de Deportes","leisure":"sports_centre"},"name":"Complejo Municipal de Deportes","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Complexe Sportif":{"tags":{"name":"Complexe Sportif","leisure":"sports_centre"},"name":"Complexe Sportif","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Curves":{"tags":{"name":"Curves","leisure":"sports_centre"},"name":"Curves","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Fitness First":{"tags":{"name":"Fitness First","leisure":"sports_centre"},"name":"Fitness First","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Gold's Gym":{"tags":{"name":"Gold's Gym","leisure":"sports_centre"},"name":"Gold's Gym","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Kieser Training":{"tags":{"name":"Kieser Training","leisure":"sports_centre"},"name":"Kieser Training","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Life Time Fitness":{"tags":{"name":"Life Time Fitness","leisure":"sports_centre"},"name":"Life Time Fitness","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/McFit":{"tags":{"name":"McFit","leisure":"sports_centre"},"name":"McFit","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Mrs. Sporty":{"tags":{"name":"Mrs. Sporty","leisure":"sports_centre"},"name":"Mrs. Sporty","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Orlik":{"tags":{"name":"Orlik","leisure":"sports_centre"},"name":"Orlik","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Pabellón Municipal de Deportes":{"tags":{"name":"Pabellón Municipal de Deportes","leisure":"sports_centre"},"name":"Pabellón Municipal de Deportes","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Palestra Comunale":{"tags":{"name":"Palestra Comunale","leisure":"sports_centre"},"name":"Palestra Comunale","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Salle Omnisport":{"tags":{"name":"Salle Omnisport","leisure":"sports_centre"},"name":"Salle Omnisport","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Virgin Active":{"tags":{"name":"Virgin Active","leisure":"sports_centre"},"name":"Virgin Active","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/YMCA":{"tags":{"name":"YMCA","leisure":"sports_centre"},"name":"YMCA","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/ДЮСШ":{"tags":{"name":"ДЮСШ","leisure":"sports_centre"},"name":"ДЮСШ","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/Ледовый дворец":{"tags":{"name":"Ледовый дворец","leisure":"sports_centre"},"name":"Ледовый дворец","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/sports_centre/体育館":{"tags":{"name":"体育館","leisure":"sports_centre"},"name":"体育館","icon":"pitch","geometry":["point","area"],"fields":["name","sport","building","address","opening_hours"],"suggestion":true},"leisure/swimming_pool/Schwimmerbecken":{"tags":{"name":"Schwimmerbecken","leisure":"swimming_pool"},"name":"Schwimmerbecken","icon":"swimming","geometry":["point","area"],"fields":["name","access_simple","operator","address"],"suggestion":true},"leisure/swimming_pool/Yüzme Havuzu":{"tags":{"name":"Yüzme Havuzu","leisure":"swimming_pool"},"name":"Yüzme Havuzu","icon":"swimming","geometry":["point","area"],"fields":["name","access_simple","operator","address"],"suggestion":true},"leisure/swimming_pool/プール":{"tags":{"name":"プール","leisure":"swimming_pool"},"name":"プール","icon":"swimming","geometry":["point","area"],"fields":["name","access_simple","operator","address"],"suggestion":true},"leisure/swimming_pool/游泳池":{"tags":{"name":"游泳池","leisure":"swimming_pool"},"name":"游泳池","icon":"swimming","geometry":["point","area"],"fields":["name","access_simple","operator","address"],"suggestion":true},"man_made/windmill/De Hoop":{"tags":{"name":"De Hoop","man_made":"windmill"},"name":"De Hoop","icon":"poi-windmill","geometry":["point","area"],"fields":["building_area"],"suggestion":true},"shop/alcohol/Alko":{"tags":{"name":"Alko","shop":"alcohol"},"name":"Alko","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/BC Liquor Store":{"tags":{"name":"BC Liquor Store","shop":"alcohol"},"name":"BC Liquor Store","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/BWS":{"tags":{"name":"BWS","shop":"alcohol"},"name":"BWS","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Bargain Booze":{"tags":{"name":"Bargain Booze","shop":"alcohol"},"name":"Bargain Booze","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Beer Store":{"tags":{"name":"Beer Store","shop":"alcohol"},"name":"Beer Store","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Botilleria":{"tags":{"name":"Botilleria","shop":"alcohol"},"name":"Botilleria","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Dan Murphy's":{"tags":{"name":"Dan Murphy's","shop":"alcohol"},"name":"Dan Murphy's","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Gall & Gall":{"tags":{"name":"Gall & Gall","shop":"alcohol"},"name":"Gall & Gall","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/LCBO":{"tags":{"name":"LCBO","shop":"alcohol"},"name":"LCBO","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Liquor Depot":{"tags":{"name":"Liquor Depot","shop":"alcohol"},"name":"Liquor Depot","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Liquor Store":{"tags":{"name":"Liquor Store","shop":"alcohol"},"name":"Liquor Store","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Liquorland":{"tags":{"name":"Liquorland","shop":"alcohol"},"name":"Liquorland","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Mitra":{"tags":{"name":"Mitra","shop":"alcohol"},"name":"Mitra","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Nicolas":{"tags":{"name":"Nicolas","shop":"alcohol"},"name":"Nicolas","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/SAQ":{"tags":{"name":"SAQ","shop":"alcohol"},"name":"SAQ","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Systembolaget":{"tags":{"name":"Systembolaget","shop":"alcohol"},"name":"Systembolaget","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/The Beer Store":{"tags":{"name":"The Beer Store","shop":"alcohol"},"name":"The Beer Store","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Vinmonopolet":{"tags":{"name":"Vinmonopolet","shop":"alcohol"},"name":"Vinmonopolet","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Алкомаркет":{"tags":{"name":"Алкомаркет","shop":"alcohol"},"name":"Алкомаркет","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Ароматный мир":{"tags":{"name":"Ароматный мир","shop":"alcohol"},"name":"Ароматный мир","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Бристоль":{"tags":{"name":"Бристоль","shop":"alcohol"},"name":"Бристоль","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Градус":{"tags":{"name":"Градус","shop":"alcohol"},"name":"Градус","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Живое пиво":{"tags":{"name":"Живое пиво","shop":"alcohol"},"name":"Живое пиво","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Красное & Белое":{"tags":{"name":"Красное & Белое","shop":"alcohol"},"name":"Красное & Белое","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Норман":{"tags":{"name":"Норман","shop":"alcohol"},"name":"Норман","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Отдохни":{"tags":{"name":"Отдохни","shop":"alcohol"},"name":"Отдохни","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Пиво":{"tags":{"name":"Пиво","shop":"alcohol"},"name":"Пиво","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/alcohol/Разливное пиво":{"tags":{"name":"Разливное пиво","shop":"alcohol"},"name":"Разливное пиво","icon":"alcohol-shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi","drive_through"],"suggestion":true},"shop/baby_goods/Aubert":{"tags":{"name":"Aubert","shop":"baby_goods"},"name":"Aubert","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/baby_goods/Babies R Us":{"tags":{"name":"Babies R Us","shop":"baby_goods"},"name":"Babies R Us","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/baby_goods/BabyOne":{"tags":{"name":"BabyOne","shop":"baby_goods"},"name":"BabyOne","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/AILI":{"tags":{"name":"AILI","shop":"bakery"},"name":"AILI","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Anker":{"tags":{"name":"Anker","shop":"bakery"},"name":"Anker","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Awiteks":{"tags":{"name":"Awiteks","shop":"bakery"},"name":"Awiteks","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Backshop":{"tags":{"name":"Backshop","shop":"bakery"},"name":"Backshop","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Backwerk":{"tags":{"name":"Backwerk","shop":"bakery"},"name":"Backwerk","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Baguette":{"tags":{"name":"Baguette","shop":"bakery"},"name":"Baguette","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bakers Delight":{"tags":{"name":"Bakers Delight","shop":"bakery"},"name":"Bakers Delight","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bakker Bart":{"tags":{"name":"Bakker Bart","shop":"bakery"},"name":"Bakker Bart","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Banette":{"tags":{"name":"Banette","shop":"bakery"},"name":"Banette","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bäckerei Fuchs":{"tags":{"name":"Bäckerei Fuchs","shop":"bakery"},"name":"Bäckerei Fuchs","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bäckerei Grimminger":{"tags":{"name":"Bäckerei Grimminger","shop":"bakery"},"name":"Bäckerei Grimminger","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bäckerei Müller":{"tags":{"name":"Bäckerei Müller","shop":"bakery"},"name":"Bäckerei Müller","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bäckerei Schmidt":{"tags":{"name":"Bäckerei Schmidt","shop":"bakery"},"name":"Bäckerei Schmidt","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Bäckerei Schneider":{"tags":{"name":"Bäckerei Schneider","shop":"bakery"},"name":"Bäckerei Schneider","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Cooplands":{"tags":{"name":"Cooplands","shop":"bakery"},"name":"Cooplands","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Dat Backhus":{"tags":{"name":"Dat Backhus","shop":"bakery"},"name":"Dat Backhus","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Der Beck":{"tags":{"name":"Der Beck","shop":"bakery"},"name":"Der Beck","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Der Mann":{"tags":{"name":"Der Mann","shop":"bakery"},"name":"Der Mann","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Ditsch":{"tags":{"name":"Ditsch","shop":"bakery"},"name":"Ditsch","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Fornetti":{"tags":{"name":"Fornetti","shop":"bakery"},"name":"Fornetti","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Goeken backen":{"tags":{"name":"Goeken backen","shop":"bakery"},"name":"Goeken backen","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Goldilocks":{"tags":{"name":"Goldilocks","shop":"bakery"},"name":"Goldilocks","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Greggs":{"tags":{"name":"Greggs","shop":"bakery"},"name":"Greggs","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Hofpfisterei":{"tags":{"name":"Hofpfisterei","shop":"bakery"},"name":"Hofpfisterei","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Ihle":{"tags":{"name":"Ihle","shop":"bakery"},"name":"Ihle","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Julie's Bakeshop":{"tags":{"name":"Julie's Bakeshop","shop":"bakery"},"name":"Julie's Bakeshop","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/K&U":{"tags":{"name":"K&U","shop":"bakery"},"name":"K&U","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/K&U Bäckerei":{"tags":{"name":"K&U Bäckerei","shop":"bakery"},"name":"K&U Bäckerei","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Kamps":{"tags":{"name":"Kamps","shop":"bakery"},"name":"Kamps","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/La Mie Câline":{"tags":{"name":"La Mie Câline","shop":"bakery"},"name":"La Mie Câline","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Le Crobag":{"tags":{"name":"Le Crobag","shop":"bakery"},"name":"Le Crobag","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Le Fournil":{"tags":{"name":"Le Fournil","shop":"bakery"},"name":"Le Fournil","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Lila Bäcker":{"tags":{"name":"Lila Bäcker","shop":"bakery"},"name":"Lila Bäcker","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Lipóti Pékség":{"tags":{"name":"Lipóti Pékség","shop":"bakery"},"name":"Lipóti Pékség","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Marie Blachère":{"tags":{"name":"Marie Blachère","shop":"bakery"},"name":"Marie Blachère","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Mlinar":{"tags":{"name":"Mlinar","shop":"bakery"},"name":"Mlinar","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Musmanni":{"tags":{"name":"Musmanni","shop":"bakery"},"name":"Musmanni","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Oebel":{"tags":{"name":"Oebel","shop":"bakery"},"name":"Oebel","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Paul":{"tags":{"name":"Paul","shop":"bakery"},"name":"Paul","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Red Ribbon":{"tags":{"name":"Red Ribbon","shop":"bakery"},"name":"Red Ribbon","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Schäfer's":{"tags":{"name":"Schäfer's","shop":"bakery"},"name":"Schäfer's","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Sehne":{"tags":{"name":"Sehne","shop":"bakery"},"name":"Sehne","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Stadtbäckerei":{"tags":{"name":"Stadtbäckerei","shop":"bakery"},"name":"Stadtbäckerei","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Steinecke":{"tags":{"name":"Steinecke","shop":"bakery"},"name":"Steinecke","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Sternenbäck":{"tags":{"name":"Sternenbäck","shop":"bakery"},"name":"Sternenbäck","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Ströck":{"tags":{"name":"Ströck","shop":"bakery"},"name":"Ströck","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Wiener Feinbäcker":{"tags":{"name":"Wiener Feinbäcker","shop":"bakery"},"name":"Wiener Feinbäcker","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/von Allwörden":{"tags":{"name":"von Allwörden","shop":"bakery"},"name":"von Allwörden","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Булочная":{"tags":{"name":"Булочная","shop":"bakery"},"name":"Булочная","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Горячий хлеб":{"tags":{"name":"Горячий хлеб","shop":"bakery"},"name":"Горячий хлеб","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Каравай":{"tags":{"name":"Каравай","shop":"bakery"},"name":"Каравай","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Кулиничи":{"tags":{"name":"Кулиничи","shop":"bakery"},"name":"Кулиничи","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Кулиничі":{"tags":{"name":"Кулиничі","shop":"bakery"},"name":"Кулиничі","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Свежий хлеб":{"tags":{"name":"Свежий хлеб","shop":"bakery"},"name":"Свежий хлеб","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/Хлеб":{"tags":{"name":"Хлеб","shop":"bakery"},"name":"Хлеб","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/مخبز":{"tags":{"name":"مخبز","shop":"bakery"},"name":"مخبز","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/مخبزة":{"tags":{"name":"مخبزة","shop":"bakery"},"name":"مخبزة","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/نان لواش":{"tags":{"name":"نان لواش","shop":"bakery"},"name":"نان لواش","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/نانوایی":{"tags":{"name":"نانوایی","shop":"bakery"},"name":"نانوایی","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/نانوایی بربری":{"tags":{"name":"نانوایی بربری","shop":"bakery"},"name":"نانوایی بربری","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/نانوایی سنگک":{"tags":{"name":"نانوایی سنگک","shop":"bakery"},"name":"نانوایی سنگک","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/نانوایی سنگکی":{"tags":{"name":"نانوایی سنگکی","shop":"bakery"},"name":"نانوایی سنگکی","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bakery/نانوایی لواش":{"tags":{"name":"نانوایی لواش","shop":"bakery"},"name":"نانوایی لواش","icon":"bakery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beauty/Sally Beauty Supply":{"tags":{"name":"Sally Beauty Supply","shop":"beauty"},"name":"Sally Beauty Supply","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","beauty","opening_hours","payment_multi"],"suggestion":true},"shop/beauty/Yves Rocher":{"tags":{"name":"Yves Rocher","shop":"beauty"},"name":"Yves Rocher","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","beauty","opening_hours","payment_multi"],"suggestion":true},"shop/bed/Matratzen Concord":{"tags":{"name":"Matratzen Concord","shop":"bed"},"name":"Matratzen Concord","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bed/Mattress Firm":{"tags":{"name":"Mattress Firm","shop":"bed"},"name":"Mattress Firm","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bed/Sleepy's":{"tags":{"name":"Sleepy's","shop":"bed"},"name":"Sleepy's","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/50嵐":{"tags":{"name":"50嵐","shop":"beverages"},"name":"50嵐","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Dursty":{"tags":{"name":"Dursty","shop":"beverages"},"name":"Dursty","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Edeka Getränkemarkt":{"tags":{"name":"Edeka Getränkemarkt","shop":"beverages"},"name":"Edeka Getränkemarkt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Fristo":{"tags":{"name":"Fristo","shop":"beverages"},"name":"Fristo","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Getränke Hoffmann":{"tags":{"name":"Getränke Hoffmann","shop":"beverages"},"name":"Getränke Hoffmann","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Getränkeland":{"tags":{"name":"Getränkeland","shop":"beverages"},"name":"Getränkeland","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Getränkemarkt":{"tags":{"name":"Getränkemarkt","shop":"beverages"},"name":"Getränkemarkt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Orterer Getränkemarkt":{"tags":{"name":"Orterer Getränkemarkt","shop":"beverages"},"name":"Orterer Getränkemarkt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Rewe Getränkemarkt":{"tags":{"name":"Rewe Getränkemarkt","shop":"beverages"},"name":"Rewe Getränkemarkt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/Trinkgut":{"tags":{"name":"Trinkgut","shop":"beverages"},"name":"Trinkgut","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/beverages/茶湯會":{"tags":{"name":"茶湯會","shop":"beverages"},"name":"茶湯會","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bicycle/Halfords":{"tags":{"name":"Halfords","shop":"bicycle"},"name":"Halfords","icon":"bicycle","geometry":["point","area"],"fields":["name","operator","address","building_area","service/bicycle","opening_hours","payment_multi"],"suggestion":true},"shop/bicycle/Веломарка":{"tags":{"name":"Веломарка","shop":"bicycle"},"name":"Веломарка","icon":"bicycle","geometry":["point","area"],"fields":["name","operator","address","building_area","service/bicycle","opening_hours","payment_multi"],"suggestion":true},"shop/bicycle/サイクルベースあさひ":{"tags":{"name":"サイクルベースあさひ","shop":"bicycle"},"name":"サイクルベースあさひ","icon":"bicycle","geometry":["point","area"],"fields":["name","operator","address","building_area","service/bicycle","opening_hours","payment_multi"],"suggestion":true},"shop/bookmaker/Betfred":{"tags":{"name":"Betfred","shop":"bookmaker"},"name":"Betfred","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bookmaker/Coral":{"tags":{"name":"Coral","shop":"bookmaker"},"name":"Coral","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bookmaker/Ladbrokes":{"tags":{"name":"Ladbrokes","shop":"bookmaker"},"name":"Ladbrokes","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bookmaker/Paddy Power":{"tags":{"name":"Paddy Power","shop":"bookmaker"},"name":"Paddy Power","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bookmaker/William Hill":{"tags":{"name":"William Hill","shop":"bookmaker"},"name":"William Hill","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/bookmaker/ΟΠΑΠ":{"tags":{"name":"ΟΠΑΠ","shop":"bookmaker"},"name":"ΟΠΑΠ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Boucherie Charcuterie":{"tags":{"name":"Boucherie Charcuterie","shop":"butcher"},"name":"Boucherie Charcuterie","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Carnicería":{"tags":{"name":"Carnicería","shop":"butcher"},"name":"Carnicería","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Fleischerei Richter":{"tags":{"name":"Fleischerei Richter","shop":"butcher"},"name":"Fleischerei Richter","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Húsbolt":{"tags":{"name":"Húsbolt","shop":"butcher"},"name":"Húsbolt","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Macelleria":{"tags":{"name":"Macelleria","shop":"butcher"},"name":"Macelleria","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Vinzenzmurr":{"tags":{"name":"Vinzenzmurr","shop":"butcher"},"name":"Vinzenzmurr","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Ариант":{"tags":{"name":"Ариант","shop":"butcher"},"name":"Ариант","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Великолукский мясокомбинат":{"tags":{"name":"Великолукский мясокомбинат","shop":"butcher"},"name":"Великолукский мясокомбинат","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Мясная лавка":{"tags":{"name":"Мясная лавка","shop":"butcher"},"name":"Мясная лавка","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Мясницкий ряд":{"tags":{"name":"Мясницкий ряд","shop":"butcher"},"name":"Мясницкий ряд","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Мясной":{"tags":{"name":"Мясной","shop":"butcher"},"name":"Мясной","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Мясо":{"tags":{"name":"Мясо","shop":"butcher"},"name":"Мясо","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Наша Ряба":{"tags":{"name":"Наша Ряба","shop":"butcher"},"name":"Наша Ряба","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/butcher/Свежее мясо":{"tags":{"name":"Свежее мясо","shop":"butcher"},"name":"Свежее мясо","icon":"slaughterhouse","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car/Audi":{"tags":{"name":"Audi","shop":"car"},"name":"Audi","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/BMW":{"tags":{"name":"BMW","shop":"car"},"name":"BMW","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Chevrolet":{"tags":{"name":"Chevrolet","shop":"car"},"name":"Chevrolet","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Citroën":{"tags":{"name":"Citroën","shop":"car"},"name":"Citroën","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Dacia":{"tags":{"name":"Dacia","shop":"car"},"name":"Dacia","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Fiat":{"tags":{"name":"Fiat","shop":"car"},"name":"Fiat","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Ford":{"tags":{"name":"Ford","shop":"car"},"name":"Ford","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Honda":{"tags":{"name":"Honda","shop":"car"},"name":"Honda","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Hyundai":{"tags":{"name":"Hyundai","shop":"car"},"name":"Hyundai","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Isuzu":{"tags":{"name":"Isuzu","shop":"car"},"name":"Isuzu","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Kia":{"tags":{"name":"Kia","shop":"car"},"name":"Kia","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Land Rover":{"tags":{"name":"Land Rover","shop":"car"},"name":"Land Rover","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Lexus":{"tags":{"name":"Lexus","shop":"car"},"name":"Lexus","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Mazda":{"tags":{"name":"Mazda","shop":"car"},"name":"Mazda","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Mercedes-Benz":{"tags":{"name":"Mercedes-Benz","shop":"car"},"name":"Mercedes-Benz","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Mitsubishi":{"tags":{"name":"Mitsubishi","shop":"car"},"name":"Mitsubishi","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Mitsubishi Motors":{"tags":{"name":"Mitsubishi Motors","shop":"car"},"name":"Mitsubishi Motors","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/NISSAN":{"tags":{"name":"NISSAN","shop":"car"},"name":"NISSAN","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Nissan":{"tags":{"name":"Nissan","shop":"car"},"name":"Nissan","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Opel":{"tags":{"name":"Opel","shop":"car"},"name":"Opel","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Peugeot":{"tags":{"name":"Peugeot","shop":"car"},"name":"Peugeot","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Porsche":{"tags":{"name":"Porsche","shop":"car"},"name":"Porsche","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Renault":{"tags":{"name":"Renault","shop":"car"},"name":"Renault","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Seat":{"tags":{"name":"Seat","shop":"car"},"name":"Seat","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Skoda":{"tags":{"name":"Skoda","shop":"car"},"name":"Skoda","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Subaru":{"tags":{"name":"Subaru","shop":"car"},"name":"Subaru","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Suzuki":{"tags":{"name":"Suzuki","shop":"car"},"name":"Suzuki","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Toyota":{"tags":{"name":"Toyota","shop":"car"},"name":"Toyota","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Volkswagen":{"tags":{"name":"Volkswagen","shop":"car"},"name":"Volkswagen","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car/Volvo":{"tags":{"name":"Volvo","shop":"car"},"name":"Volvo","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","brand","second_hand","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Advance Auto Parts":{"tags":{"name":"Advance Auto Parts","shop":"car_parts"},"name":"Advance Auto Parts","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/AutoZone":{"tags":{"name":"AutoZone","shop":"car_parts"},"name":"AutoZone","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Brezan":{"tags":{"name":"Brezan","shop":"car_parts"},"name":"Brezan","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/NAPA Auto Parts":{"tags":{"name":"NAPA Auto Parts","shop":"car_parts"},"name":"NAPA Auto Parts","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Napa Auto Parts":{"tags":{"name":"Napa Auto Parts","shop":"car_parts"},"name":"Napa Auto Parts","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/O'Reilly Auto Parts":{"tags":{"name":"O'Reilly Auto Parts","shop":"car_parts"},"name":"O'Reilly Auto Parts","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Repco":{"tags":{"name":"Repco","shop":"car_parts"},"name":"Repco","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Tokić":{"tags":{"name":"Tokić","shop":"car_parts"},"name":"Tokić","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/repuestos automotrices":{"tags":{"name":"repuestos automotrices","shop":"car_parts"},"name":"repuestos automotrices","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Автозапчастини":{"tags":{"name":"Автозапчастини","shop":"car_parts"},"name":"Автозапчастини","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/Автомир":{"tags":{"name":"Автомир","shop":"car_parts"},"name":"Автомир","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/イエローハット":{"tags":{"name":"イエローハット","shop":"car_parts"},"name":"イエローハット","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/オートバックス":{"tags":{"name":"オートバックス","shop":"car_parts"},"name":"オートバックス","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_parts/タイヤ館":{"tags":{"name":"タイヤ館","shop":"car_parts"},"name":"タイヤ館","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/A.T.U":{"tags":{"name":"A.T.U","shop":"car_repair"},"name":"A.T.U","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Bosch Car Service":{"tags":{"name":"Bosch Car Service","shop":"car_repair"},"name":"Bosch Car Service","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Carglass":{"tags":{"name":"Carglass","shop":"car_repair"},"name":"Carglass","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Euromaster":{"tags":{"name":"Euromaster","shop":"car_repair"},"name":"Euromaster","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Feu Vert":{"tags":{"name":"Feu Vert","shop":"car_repair"},"name":"Feu Vert","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Firestone":{"tags":{"name":"Firestone","shop":"car_repair"},"name":"Firestone","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Firestone Complete Auto Care":{"tags":{"name":"Firestone Complete Auto Care","shop":"car_repair"},"name":"Firestone Complete Auto Care","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Garage Renault":{"tags":{"name":"Garage Renault","shop":"car_repair"},"name":"Garage Renault","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Gomeria":{"tags":{"name":"Gomeria","shop":"car_repair"},"name":"Gomeria","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Gomería":{"tags":{"name":"Gomería","shop":"car_repair"},"name":"Gomería","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Goodyear":{"tags":{"name":"Goodyear","shop":"car_repair"},"name":"Goodyear","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Grease Monkey":{"tags":{"name":"Grease Monkey","shop":"car_repair"},"name":"Grease Monkey","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Jiffy Lube":{"tags":{"name":"Jiffy Lube","shop":"car_repair"},"name":"Jiffy Lube","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Kwik Fit":{"tags":{"name":"Kwik Fit","shop":"car_repair"},"name":"Kwik Fit","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Lubricentro":{"tags":{"name":"Lubricentro","shop":"car_repair"},"name":"Lubricentro","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Meineke":{"tags":{"name":"Meineke","shop":"car_repair"},"name":"Meineke","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Mekonomen":{"tags":{"name":"Mekonomen","shop":"car_repair"},"name":"Mekonomen","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Midas":{"tags":{"name":"Midas","shop":"car_repair"},"name":"Midas","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Mr. Lube":{"tags":{"name":"Mr. Lube","shop":"car_repair"},"name":"Mr. Lube","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Norauto":{"tags":{"name":"Norauto","shop":"car_repair"},"name":"Norauto","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Pep Boys":{"tags":{"name":"Pep Boys","shop":"car_repair"},"name":"Pep Boys","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Pit Stop":{"tags":{"name":"Pit Stop","shop":"car_repair"},"name":"Pit Stop","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Point S":{"tags":{"name":"Point S","shop":"car_repair"},"name":"Point S","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Roady":{"tags":{"name":"Roady","shop":"car_repair"},"name":"Roady","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Sears Auto Center":{"tags":{"name":"Sears Auto Center","shop":"car_repair"},"name":"Sears Auto Center","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Speedy":{"tags":{"name":"Speedy","shop":"car_repair"},"name":"Speedy","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Stacja Kontroli Pojazdów":{"tags":{"name":"Stacja Kontroli Pojazdów","shop":"car_repair"},"name":"Stacja Kontroli Pojazdów","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Taller":{"tags":{"name":"Taller","shop":"car_repair"},"name":"Taller","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Valvoline":{"tags":{"name":"Valvoline","shop":"car_repair"},"name":"Valvoline","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Valvoline Instant Oil Change":{"tags":{"name":"Valvoline Instant Oil Change","shop":"car_repair"},"name":"Valvoline Instant Oil Change","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Wulkanizacja":{"tags":{"name":"Wulkanizacja","shop":"car_repair"},"name":"Wulkanizacja","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/ÖAMTC":{"tags":{"name":"ÖAMTC","shop":"car_repair"},"name":"ÖAMTC","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Автомастерская":{"tags":{"name":"Автомастерская","shop":"car_repair"},"name":"Автомастерская","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Авторемонт":{"tags":{"name":"Авторемонт","shop":"car_repair"},"name":"Авторемонт","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Автосервис":{"tags":{"name":"Автосервис","shop":"car_repair"},"name":"Автосервис","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Автосервис+шиномонтаж":{"tags":{"name":"Автосервис+шиномонтаж","shop":"car_repair"},"name":"Автосервис+шиномонтаж","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Замена масла":{"tags":{"name":"Замена масла","shop":"car_repair"},"name":"Замена масла","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/СТО":{"tags":{"name":"СТО","shop":"car_repair"},"name":"СТО","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/Шиномонтаж":{"tags":{"name":"Шиномонтаж","shop":"car_repair"},"name":"Шиномонтаж","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/car_repair/шиномонтаж":{"tags":{"name":"шиномонтаж","shop":"car_repair"},"name":"шиномонтаж","icon":"car","geometry":["point","area"],"fields":["name","operator","address","building_area","service/vehicle","opening_hours","payment_multi"],"suggestion":true},"shop/carpet/Carpet Right":{"tags":{"name":"Carpet Right","shop":"carpet"},"name":"Carpet Right","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/carpet/Carpetright":{"tags":{"name":"Carpetright","shop":"carpet"},"name":"Carpetright","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Age UK":{"tags":{"name":"Age UK","shop":"charity"},"name":"Age UK","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Barnardo's":{"tags":{"name":"Barnardo's","shop":"charity"},"name":"Barnardo's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/British Heart Foundation":{"tags":{"name":"British Heart Foundation","shop":"charity"},"name":"British Heart Foundation","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Cancer Research UK":{"tags":{"name":"Cancer Research UK","shop":"charity"},"name":"Cancer Research UK","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Oxfam":{"tags":{"name":"Oxfam","shop":"charity"},"name":"Oxfam","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Salvation Army":{"tags":{"name":"Salvation Army","shop":"charity"},"name":"Salvation Army","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Scope":{"tags":{"name":"Scope","shop":"charity"},"name":"Scope","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/charity/Sue Ryder":{"tags":{"name":"Sue Ryder","shop":"charity"},"name":"Sue Ryder","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/7 Дней":{"tags":{"name":"7 Дней","shop":"chemist"},"name":"7 Дней","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Bipa":{"tags":{"name":"Bipa","shop":"chemist"},"name":"Bipa","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Budnikowsky":{"tags":{"name":"Budnikowsky","shop":"chemist"},"name":"Budnikowsky","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Etos":{"tags":{"name":"Etos","shop":"chemist"},"name":"Etos","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Kruidvat":{"tags":{"name":"Kruidvat","shop":"chemist"},"name":"Kruidvat","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Matas":{"tags":{"name":"Matas","shop":"chemist"},"name":"Matas","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Müller":{"tags":{"name":"Müller","shop":"chemist"},"name":"Müller","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Rossmann":{"tags":{"name":"Rossmann","shop":"chemist"},"name":"Rossmann","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Schlecker":{"tags":{"name":"Schlecker","shop":"chemist"},"name":"Schlecker","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Teta":{"tags":{"name":"Teta","shop":"chemist"},"name":"Teta","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Trekpleister":{"tags":{"name":"Trekpleister","shop":"chemist"},"name":"Trekpleister","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Watsons":{"tags":{"name":"Watsons","shop":"chemist"},"name":"Watsons","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/dm":{"tags":{"name":"dm","shop":"chemist"},"name":"dm","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Бытовая химия":{"tags":{"name":"Бытовая химия","shop":"chemist"},"name":"Бытовая химия","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Магнит Косметик":{"tags":{"name":"Магнит Косметик","shop":"chemist"},"name":"Магнит Косметик","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Мила":{"tags":{"name":"Мила","shop":"chemist"},"name":"Мила","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Остров чистоты":{"tags":{"name":"Остров чистоты","shop":"chemist"},"name":"Остров чистоты","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Рубль Бум":{"tags":{"name":"Рубль Бум","shop":"chemist"},"name":"Рубль Бум","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/Улыбка радуги":{"tags":{"name":"Улыбка радуги","shop":"chemist"},"name":"Улыбка радуги","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/屈臣氏":{"tags":{"name":"屈臣氏","shop":"chemist"},"name":"屈臣氏","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/chemist/康是美":{"tags":{"name":"康是美","shop":"chemist"},"name":"康是美","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/AOKI":{"tags":{"name":"AOKI","shop":"clothes"},"name":"AOKI","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/AWG":{"tags":{"name":"AWG","shop":"clothes"},"name":"AWG","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Ackermans":{"tags":{"name":"Ackermans","shop":"clothes"},"name":"Ackermans","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Adidas":{"tags":{"name":"Adidas","shop":"clothes"},"name":"Adidas","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/American Apparel":{"tags":{"name":"American Apparel","shop":"clothes"},"name":"American Apparel","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/American Eagle Outfitters":{"tags":{"name":"American Eagle Outfitters","shop":"clothes"},"name":"American Eagle Outfitters","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Anthropologie":{"tags":{"name":"Anthropologie","shop":"clothes"},"name":"Anthropologie","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Ardene":{"tags":{"name":"Ardene","shop":"clothes"},"name":"Ardene","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Armand Thiery":{"tags":{"name":"Armand Thiery","shop":"clothes"},"name":"Armand Thiery","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Banana Republic":{"tags":{"name":"Banana Republic","shop":"clothes"},"name":"Banana Republic","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Benetton":{"tags":{"name":"Benetton","shop":"clothes"},"name":"Benetton","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Bershka":{"tags":{"name":"Bershka","shop":"clothes"},"name":"Bershka","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Bonita":{"tags":{"name":"Bonita","shop":"clothes"},"name":"Bonita","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Bonobo":{"tags":{"name":"Bonobo","shop":"clothes"},"name":"Bonobo","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Brooks Brothers":{"tags":{"name":"Brooks Brothers","shop":"clothes"},"name":"Brooks Brothers","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Burberry":{"tags":{"name":"Burberry","shop":"clothes"},"name":"Burberry","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Burlington Coat Factory":{"tags":{"name":"Burlington Coat Factory","shop":"clothes"},"name":"Burlington Coat Factory","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Burton":{"tags":{"name":"Burton","shop":"clothes"},"name":"Burton","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/C&A":{"tags":{"name":"C&A","shop":"clothes"},"name":"C&A","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Cache Cache":{"tags":{"name":"Cache Cache","shop":"clothes"},"name":"Cache Cache","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Calvin Klein":{"tags":{"name":"Calvin Klein","shop":"clothes"},"name":"Calvin Klein","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Calzedonia":{"tags":{"name":"Calzedonia","shop":"clothes"},"name":"Calzedonia","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Camaïeu":{"tags":{"name":"Camaïeu","shop":"clothes"},"name":"Camaïeu","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Caroll":{"tags":{"name":"Caroll","shop":"clothes"},"name":"Caroll","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Carter's":{"tags":{"name":"Carter's","shop":"clothes"},"name":"Carter's","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Cecil":{"tags":{"name":"Cecil","shop":"clothes"},"name":"Cecil","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Celio":{"tags":{"name":"Celio","shop":"clothes"},"name":"Celio","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Charles Vögele":{"tags":{"name":"Charles Vögele","shop":"clothes"},"name":"Charles Vögele","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Chico's":{"tags":{"name":"Chico's","shop":"clothes"},"name":"Chico's","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Cropp":{"tags":{"name":"Cropp","shop":"clothes"},"name":"Cropp","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Cubus":{"tags":{"name":"Cubus","shop":"clothes"},"name":"Cubus","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Desigual":{"tags":{"name":"Desigual","shop":"clothes"},"name":"Desigual","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Devred":{"tags":{"name":"Devred","shop":"clothes"},"name":"Devred","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Didi":{"tags":{"name":"Didi","shop":"clothes"},"name":"Didi","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Diesel":{"tags":{"name":"Diesel","shop":"clothes"},"name":"Diesel","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Dorothy Perkins":{"tags":{"name":"Dorothy Perkins","shop":"clothes"},"name":"Dorothy Perkins","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Dress Barn":{"tags":{"name":"Dress Barn","shop":"clothes"},"name":"Dress Barn","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Dressmann":{"tags":{"name":"Dressmann","shop":"clothes"},"name":"Dressmann","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Eddie Bauer":{"tags":{"name":"Eddie Bauer","shop":"clothes"},"name":"Eddie Bauer","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Edgars":{"tags":{"name":"Edgars","shop":"clothes"},"name":"Edgars","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Engbers":{"tags":{"name":"Engbers","shop":"clothes"},"name":"Engbers","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Ernsting's family":{"tags":{"name":"Ernsting's family","shop":"clothes"},"name":"Ernsting's family","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Esprit":{"tags":{"name":"Esprit","shop":"clothes"},"name":"Esprit","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Etam":{"tags":{"name":"Etam","shop":"clothes"},"name":"Etam","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Express":{"tags":{"name":"Express","shop":"clothes"},"name":"Express","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Fat Face":{"tags":{"name":"Fat Face","shop":"clothes"},"name":"Fat Face","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Forever 21":{"tags":{"name":"Forever 21","shop":"clothes"},"name":"Forever 21","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Gant":{"tags":{"name":"Gant","shop":"clothes"},"name":"Gant","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Gap":{"tags":{"name":"Gap","shop":"clothes"},"name":"Gap","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Gerry Weber":{"tags":{"name":"Gerry Weber","shop":"clothes"},"name":"Gerry Weber","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Gina Laura":{"tags":{"name":"Gina Laura","shop":"clothes"},"name":"Gina Laura","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Guess":{"tags":{"name":"Guess","shop":"clothes"},"name":"Guess","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Gymboree":{"tags":{"name":"Gymboree","shop":"clothes"},"name":"Gymboree","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Gémo":{"tags":{"name":"Gémo","shop":"clothes"},"name":"Gémo","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/H&M":{"tags":{"name":"H&M","shop":"clothes"},"name":"H&M","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Hallhuber":{"tags":{"name":"Hallhuber","shop":"clothes"},"name":"Hallhuber","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/House":{"tags":{"name":"House","shop":"clothes"},"name":"House","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Hugo Boss":{"tags":{"name":"Hugo Boss","shop":"clothes"},"name":"Hugo Boss","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Humana":{"tags":{"name":"Humana","shop":"clothes"},"name":"Humana","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Hunkemöller":{"tags":{"name":"Hunkemöller","shop":"clothes"},"name":"Hunkemöller","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Intimissimi":{"tags":{"name":"Intimissimi","shop":"clothes"},"name":"Intimissimi","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/JBC":{"tags":{"name":"JBC","shop":"clothes"},"name":"JBC","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Jack & Jones":{"tags":{"name":"Jack & Jones","shop":"clothes"},"name":"Jack & Jones","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Jack Wolfskin":{"tags":{"name":"Jack Wolfskin","shop":"clothes"},"name":"Jack Wolfskin","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Jeans Fritz":{"tags":{"name":"Jeans Fritz","shop":"clothes"},"name":"Jeans Fritz","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Jennyfer":{"tags":{"name":"Jennyfer","shop":"clothes"},"name":"Jennyfer","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Jigsaw":{"tags":{"name":"Jigsaw","shop":"clothes"},"name":"Jigsaw","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Jules":{"tags":{"name":"Jules","shop":"clothes"},"name":"Jules","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Justice":{"tags":{"name":"Justice","shop":"clothes"},"name":"Justice","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/KappAhl":{"tags":{"name":"KappAhl","shop":"clothes"},"name":"KappAhl","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/KiK":{"tags":{"name":"KiK","shop":"clothes"},"name":"KiK","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Kiabi":{"tags":{"name":"Kiabi","shop":"clothes"},"name":"Kiabi","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/La Halle":{"tags":{"name":"La Halle","shop":"clothes"},"name":"La Halle","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Lacoste":{"tags":{"name":"Lacoste","shop":"clothes"},"name":"Lacoste","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Lane Bryant":{"tags":{"name":"Lane Bryant","shop":"clothes"},"name":"Lane Bryant","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Levi's":{"tags":{"name":"Levi's","shop":"clothes"},"name":"Levi's","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Lindex":{"tags":{"name":"Lindex","shop":"clothes"},"name":"Lindex","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Loft":{"tags":{"name":"Loft","shop":"clothes"},"name":"Loft","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Mango":{"tags":{"name":"Mango","shop":"clothes"},"name":"Mango","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Marc O'Polo":{"tags":{"name":"Marc O'Polo","shop":"clothes"},"name":"Marc O'Polo","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Mark's":{"tags":{"name":"Mark's","shop":"clothes"},"name":"Mark's","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Marshalls":{"tags":{"name":"Marshalls","shop":"clothes"},"name":"Marshalls","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Massimo Dutti":{"tags":{"name":"Massimo Dutti","shop":"clothes"},"name":"Massimo Dutti","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Matalan":{"tags":{"name":"Matalan","shop":"clothes"},"name":"Matalan","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Maurices":{"tags":{"name":"Maurices","shop":"clothes"},"name":"Maurices","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Max Mara":{"tags":{"name":"Max Mara","shop":"clothes"},"name":"Max Mara","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Men's Wearhouse":{"tags":{"name":"Men's Wearhouse","shop":"clothes"},"name":"Men's Wearhouse","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Mexx":{"tags":{"name":"Mexx","shop":"clothes"},"name":"Mexx","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Michael Kors":{"tags":{"name":"Michael Kors","shop":"clothes"},"name":"Michael Kors","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Mim":{"tags":{"name":"Mim","shop":"clothes"},"name":"Mim","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Monsoon":{"tags":{"name":"Monsoon","shop":"clothes"},"name":"Monsoon","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Mr Price":{"tags":{"name":"Mr Price","shop":"clothes"},"name":"Mr Price","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/NKD":{"tags":{"name":"NKD","shop":"clothes"},"name":"NKD","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/New Look":{"tags":{"name":"New Look","shop":"clothes"},"name":"New Look","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/New Yorker":{"tags":{"name":"New Yorker","shop":"clothes"},"name":"New Yorker","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/NewYorker":{"tags":{"name":"NewYorker","shop":"clothes"},"name":"NewYorker","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Next":{"tags":{"name":"Next","shop":"clothes"},"name":"Next","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Nike":{"tags":{"name":"Nike","shop":"clothes"},"name":"Nike","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Nordstrom Rack":{"tags":{"name":"Nordstrom Rack","shop":"clothes"},"name":"Nordstrom Rack","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/OVS":{"tags":{"name":"OVS","shop":"clothes"},"name":"OVS","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Okaïdi":{"tags":{"name":"Okaïdi","shop":"clothes"},"name":"Okaïdi","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Old Navy":{"tags":{"name":"Old Navy","shop":"clothes"},"name":"Old Navy","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Only":{"tags":{"name":"Only","shop":"clothes"},"name":"Only","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Orchestra":{"tags":{"name":"Orchestra","shop":"clothes"},"name":"Orchestra","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Original Marines":{"tags":{"name":"Original Marines","shop":"clothes"},"name":"Original Marines","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Orsay":{"tags":{"name":"Orsay","shop":"clothes"},"name":"Orsay","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Outfit":{"tags":{"name":"Outfit","shop":"clothes"},"name":"Outfit","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Outlet":{"tags":{"name":"Outlet","shop":"clothes"},"name":"Outlet","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Palmers":{"tags":{"name":"Palmers","shop":"clothes"},"name":"Palmers","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Peacocks":{"tags":{"name":"Peacocks","shop":"clothes"},"name":"Peacocks","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Peek & Cloppenburg":{"tags":{"name":"Peek & Cloppenburg","shop":"clothes"},"name":"Peek & Cloppenburg","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Pep":{"tags":{"name":"Pep","shop":"clothes"},"name":"Pep","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Pepco":{"tags":{"name":"Pepco","shop":"clothes"},"name":"Pepco","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Petit Bateau":{"tags":{"name":"Petit Bateau","shop":"clothes"},"name":"Petit Bateau","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Pimkie":{"tags":{"name":"Pimkie","shop":"clothes"},"name":"Pimkie","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Plato's Closet":{"tags":{"name":"Plato's Closet","shop":"clothes"},"name":"Plato's Closet","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Primark":{"tags":{"name":"Primark","shop":"clothes"},"name":"Primark","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Promod":{"tags":{"name":"Promod","shop":"clothes"},"name":"Promod","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Pull & Bear":{"tags":{"name":"Pull & Bear","shop":"clothes"},"name":"Pull & Bear","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Reitmans":{"tags":{"name":"Reitmans","shop":"clothes"},"name":"Reitmans","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Reserved":{"tags":{"name":"Reserved","shop":"clothes"},"name":"Reserved","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/River Island":{"tags":{"name":"River Island","shop":"clothes"},"name":"River Island","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Ross":{"tags":{"name":"Ross","shop":"clothes"},"name":"Ross","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Sela":{"tags":{"name":"Sela","shop":"clothes"},"name":"Sela","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Sergent Major":{"tags":{"name":"Sergent Major","shop":"clothes"},"name":"Sergent Major","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Shoeby":{"tags":{"name":"Shoeby","shop":"clothes"},"name":"Shoeby","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Sisley":{"tags":{"name":"Sisley","shop":"clothes"},"name":"Sisley","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Springfield":{"tags":{"name":"Springfield","shop":"clothes"},"name":"Springfield","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Stefanel":{"tags":{"name":"Stefanel","shop":"clothes"},"name":"Stefanel","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Steps":{"tags":{"name":"Steps","shop":"clothes"},"name":"Steps","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Stradivarius":{"tags":{"name":"Stradivarius","shop":"clothes"},"name":"Stradivarius","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Street One":{"tags":{"name":"Street One","shop":"clothes"},"name":"Street One","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Superdry":{"tags":{"name":"Superdry","shop":"clothes"},"name":"Superdry","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/TJ Maxx":{"tags":{"name":"TJ Maxx","shop":"clothes"},"name":"TJ Maxx","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/TK Maxx":{"tags":{"name":"TK Maxx","shop":"clothes"},"name":"TK Maxx","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Takko":{"tags":{"name":"Takko","shop":"clothes"},"name":"Takko","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Talbots":{"tags":{"name":"Talbots","shop":"clothes"},"name":"Talbots","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Tally Weijl":{"tags":{"name":"Tally Weijl","shop":"clothes"},"name":"Tally Weijl","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Tati":{"tags":{"name":"Tati","shop":"clothes"},"name":"Tati","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Terranova":{"tags":{"name":"Terranova","shop":"clothes"},"name":"Terranova","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Tesha":{"tags":{"name":"Tesha","shop":"clothes"},"name":"Tesha","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Tezenis":{"tags":{"name":"Tezenis","shop":"clothes"},"name":"Tezenis","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/The Children's Place":{"tags":{"name":"The Children's Place","shop":"clothes"},"name":"The Children's Place","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/The North Face":{"tags":{"name":"The North Face","shop":"clothes"},"name":"The North Face","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/The Sting":{"tags":{"name":"The Sting","shop":"clothes"},"name":"The Sting","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Timberland":{"tags":{"name":"Timberland","shop":"clothes"},"name":"Timberland","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Toko Pakaian":{"tags":{"name":"Toko Pakaian","shop":"clothes"},"name":"Toko Pakaian","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Tom Tailor":{"tags":{"name":"Tom Tailor","shop":"clothes"},"name":"Tom Tailor","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Tommy Hilfiger":{"tags":{"name":"Tommy Hilfiger","shop":"clothes"},"name":"Tommy Hilfiger","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Topshop":{"tags":{"name":"Topshop","shop":"clothes"},"name":"Topshop","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Triumph":{"tags":{"name":"Triumph","shop":"clothes"},"name":"Triumph","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Truworths":{"tags":{"name":"Truworths","shop":"clothes"},"name":"Truworths","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Ulla Popken":{"tags":{"name":"Ulla Popken","shop":"clothes"},"name":"Ulla Popken","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Uniqlo":{"tags":{"name":"Uniqlo","shop":"clothes"},"name":"Uniqlo","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/United Colors of Benetton":{"tags":{"name":"United Colors of Benetton","shop":"clothes"},"name":"United Colors of Benetton","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Urban Outfitters":{"tags":{"name":"Urban Outfitters","shop":"clothes"},"name":"Urban Outfitters","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Vero Moda":{"tags":{"name":"Vero Moda","shop":"clothes"},"name":"Vero Moda","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Victoria's Secret":{"tags":{"name":"Victoria's Secret","shop":"clothes"},"name":"Victoria's Secret","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Vögele":{"tags":{"name":"Vögele","shop":"clothes"},"name":"Vögele","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/WE":{"tags":{"name":"WE","shop":"clothes"},"name":"WE","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Wibra":{"tags":{"name":"Wibra","shop":"clothes"},"name":"Wibra","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Winners":{"tags":{"name":"Winners","shop":"clothes"},"name":"Winners","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Yamamay":{"tags":{"name":"Yamamay","shop":"clothes"},"name":"Yamamay","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Zara":{"tags":{"name":"Zara","shop":"clothes"},"name":"Zara","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Zeeman":{"tags":{"name":"Zeeman","shop":"clothes"},"name":"Zeeman","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/mister*lady":{"tags":{"name":"mister*lady","shop":"clothes"},"name":"mister*lady","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/s.Oliver":{"tags":{"name":"s.Oliver","shop":"clothes"},"name":"s.Oliver","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Детская одежда":{"tags":{"name":"Детская одежда","shop":"clothes"},"name":"Детская одежда","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Женская одежда":{"tags":{"name":"Женская одежда","shop":"clothes"},"name":"Женская одежда","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Липненски":{"tags":{"name":"Липненски","shop":"clothes"},"name":"Липненски","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Московская ярмарка":{"tags":{"name":"Московская ярмарка","shop":"clothes"},"name":"Московская ярмарка","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Одежда":{"tags":{"name":"Одежда","shop":"clothes"},"name":"Одежда","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Смешные цены":{"tags":{"name":"Смешные цены","shop":"clothes"},"name":"Смешные цены","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/Спецодежда":{"tags":{"name":"Спецодежда","shop":"clothes"},"name":"Спецодежда","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/しまむら":{"tags":{"name":"しまむら","shop":"clothes"},"name":"しまむら","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/ユニクロ":{"tags":{"name":"ユニクロ","shop":"clothes"},"name":"ユニクロ","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/ワークマン":{"tags":{"name":"ワークマン","shop":"clothes"},"name":"ワークマン","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/洋服の青山":{"tags":{"name":"洋服の青山","shop":"clothes"},"name":"洋服の青山","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/clothes/西松屋":{"tags":{"name":"西松屋","shop":"clothes"},"name":"西松屋","icon":"clothing-store","geometry":["point","area"],"fields":["name","clothes","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/coffee/Nespresso":{"tags":{"name":"Nespresso","shop":"coffee"},"name":"Nespresso","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/coffee/Tchibo":{"tags":{"name":"Tchibo","shop":"coffee"},"name":"Tchibo","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/computer/Apple Store":{"tags":{"name":"Apple Store","shop":"computer"},"name":"Apple Store","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/computer/DNS":{"tags":{"name":"DNS","shop":"computer"},"name":"DNS","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/computer/PC World":{"tags":{"name":"PC World","shop":"computer"},"name":"PC World","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/computer/ДНС":{"tags":{"name":"ДНС","shop":"computer"},"name":"ДНС","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/confectionery/Fagyizó":{"tags":{"name":"Fagyizó","shop":"confectionery"},"name":"Fagyizó","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/confectionery/Hussel":{"tags":{"name":"Hussel","shop":"confectionery"},"name":"Hussel","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/confectionery/Leonidas":{"tags":{"name":"Leonidas","shop":"confectionery"},"name":"Leonidas","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/confectionery/T. SN":{"tags":{"name":"T. SN","shop":"confectionery"},"name":"T. SN","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/confectionery/Thorntons":{"tags":{"name":"Thorntons","shop":"confectionery"},"name":"Thorntons","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/711":{"tags":{"name":"711","shop":"convenience"},"name":"711","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/777":{"tags":{"name":"777","shop":"convenience"},"name":"777","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/24 часа":{"tags":{"name":"24 часа","shop":"convenience"},"name":"24 часа","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/7-Eleven":{"tags":{"name":"7-Eleven","shop":"convenience"},"name":"7-Eleven","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/8 à Huit":{"tags":{"name":"8 à Huit","shop":"convenience"},"name":"8 à Huit","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/99 Speedmart":{"tags":{"name":"99 Speedmart","shop":"convenience"},"name":"99 Speedmart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ABC":{"tags":{"name":"ABC","shop":"convenience"},"name":"ABC","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/AMPM":{"tags":{"name":"AMPM","shop":"convenience"},"name":"AMPM","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Aibė":{"tags":{"name":"Aibė","shop":"convenience"},"name":"Aibė","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Alepa":{"tags":{"name":"Alepa","shop":"convenience"},"name":"Alepa","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Alfamart":{"tags":{"name":"Alfamart","shop":"convenience"},"name":"Alfamart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Alimentara":{"tags":{"name":"Alimentara","shop":"convenience"},"name":"Alimentara","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Almacen":{"tags":{"name":"Almacen","shop":"convenience"},"name":"Almacen","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Almacén":{"tags":{"name":"Almacén","shop":"convenience"},"name":"Almacén","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/BP Shop":{"tags":{"name":"BP Shop","shop":"convenience"},"name":"BP Shop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Baqala":{"tags":{"name":"Baqala","shop":"convenience"},"name":"Baqala","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Best One":{"tags":{"name":"Best One","shop":"convenience"},"name":"Best One","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Best-One":{"tags":{"name":"Best-One","shop":"convenience"},"name":"Best-One","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Bodega":{"tags":{"name":"Bodega","shop":"convenience"},"name":"Bodega","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Bonjour":{"tags":{"name":"Bonjour","shop":"convenience"},"name":"Bonjour","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/CBA":{"tags":{"name":"CBA","shop":"convenience"},"name":"CBA","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/COOP":{"tags":{"name":"COOP","shop":"convenience"},"name":"COOP","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/COOP Jednota":{"tags":{"name":"COOP Jednota","shop":"convenience"},"name":"COOP Jednota","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/CU":{"tags":{"name":"CU","shop":"convenience"},"name":"CU","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Casino Shop":{"tags":{"name":"Casino Shop","shop":"convenience"},"name":"Casino Shop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Centra":{"tags":{"name":"Centra","shop":"convenience"},"name":"Centra","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Central Convenience Store":{"tags":{"name":"Central Convenience Store","shop":"convenience"},"name":"Central Convenience Store","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Circle K":{"tags":{"name":"Circle K","shop":"convenience"},"name":"Circle K","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Coop Jednota":{"tags":{"name":"Coop Jednota","shop":"convenience"},"name":"Coop Jednota","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Corner Store":{"tags":{"name":"Corner Store","shop":"convenience"},"name":"Corner Store","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Costcutter":{"tags":{"name":"Costcutter","shop":"convenience"},"name":"Costcutter","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Couche-Tard":{"tags":{"name":"Couche-Tard","shop":"convenience"},"name":"Couche-Tard","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Cumberland Farms":{"tags":{"name":"Cumberland Farms","shop":"convenience"},"name":"Cumberland Farms","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Daisy Mart":{"tags":{"name":"Daisy Mart","shop":"convenience"},"name":"Daisy Mart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Delikatesy":{"tags":{"name":"Delikatesy","shop":"convenience"},"name":"Delikatesy","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Dollar General":{"tags":{"name":"Dollar General","shop":"convenience"},"name":"Dollar General","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Dépanneur":{"tags":{"name":"Dépanneur","shop":"convenience"},"name":"Dépanneur","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/FamilyMart":{"tags":{"name":"FamilyMart","shop":"convenience"},"name":"FamilyMart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Food Mart":{"tags":{"name":"Food Mart","shop":"convenience"},"name":"Food Mart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Four Square":{"tags":{"name":"Four Square","shop":"convenience"},"name":"Four Square","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Fresh":{"tags":{"name":"Fresh","shop":"convenience"},"name":"Fresh","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Freshmarket":{"tags":{"name":"Freshmarket","shop":"convenience"},"name":"Freshmarket","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/GS25":{"tags":{"name":"GS25","shop":"convenience"},"name":"GS25","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Groszek":{"tags":{"name":"Groszek","shop":"convenience"},"name":"Groszek","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Hasty Market":{"tags":{"name":"Hasty Market","shop":"convenience"},"name":"Hasty Market","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Hruška":{"tags":{"name":"Hruška","shop":"convenience"},"name":"Hruška","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Indomaret":{"tags":{"name":"Indomaret","shop":"convenience"},"name":"Indomaret","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Jednota":{"tags":{"name":"Jednota","shop":"convenience"},"name":"Jednota","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Joker":{"tags":{"name":"Joker","shop":"convenience"},"name":"Joker","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/K-Market":{"tags":{"name":"K-Market","shop":"convenience"},"name":"K-Market","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Kangaroo Express":{"tags":{"name":"Kangaroo Express","shop":"convenience"},"name":"Kangaroo Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Kisbolt":{"tags":{"name":"Kisbolt","shop":"convenience"},"name":"Kisbolt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Lawson":{"tags":{"name":"Lawson","shop":"convenience"},"name":"Lawson","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Lewiatan":{"tags":{"name":"Lewiatan","shop":"convenience"},"name":"Lewiatan","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Lifestyle Express":{"tags":{"name":"Lifestyle Express","shop":"convenience"},"name":"Lifestyle Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Londis":{"tags":{"name":"Londis","shop":"convenience"},"name":"Londis","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/M&S Simply Food":{"tags":{"name":"M&S Simply Food","shop":"convenience"},"name":"M&S Simply Food","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mac's":{"tags":{"name":"Mac's","shop":"convenience"},"name":"Mac's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mace":{"tags":{"name":"Mace","shop":"convenience"},"name":"Mace","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Magazin":{"tags":{"name":"Magazin","shop":"convenience"},"name":"Magazin","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Magazin Mixt":{"tags":{"name":"Magazin Mixt","shop":"convenience"},"name":"Magazin Mixt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Magazin Non-Stop":{"tags":{"name":"Magazin Non-Stop","shop":"convenience"},"name":"Magazin Non-Stop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Magazin mixt":{"tags":{"name":"Magazin mixt","shop":"convenience"},"name":"Magazin mixt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Maxikiosco":{"tags":{"name":"Maxikiosco","shop":"convenience"},"name":"Maxikiosco","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Małpka Express":{"tags":{"name":"Małpka Express","shop":"convenience"},"name":"Małpka Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/McColl's":{"tags":{"name":"McColl's","shop":"convenience"},"name":"McColl's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Migrolino":{"tags":{"name":"Migrolino","shop":"convenience"},"name":"Migrolino","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mini ABC":{"tags":{"name":"Mini ABC","shop":"convenience"},"name":"Mini ABC","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mini Market":{"tags":{"name":"Mini Market","shop":"convenience"},"name":"Mini Market","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mini Market Non-Stop":{"tags":{"name":"Mini Market Non-Stop","shop":"convenience"},"name":"Mini Market Non-Stop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mini Mart":{"tags":{"name":"Mini Mart","shop":"convenience"},"name":"Mini Mart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mini Stop":{"tags":{"name":"Mini Stop","shop":"convenience"},"name":"Mini Stop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Minimercado":{"tags":{"name":"Minimercado","shop":"convenience"},"name":"Minimercado","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Mlin i pekare":{"tags":{"name":"Mlin i pekare","shop":"convenience"},"name":"Mlin i pekare","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Nasz Sklep":{"tags":{"name":"Nasz Sklep","shop":"convenience"},"name":"Nasz Sklep","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Nisa":{"tags":{"name":"Nisa","shop":"convenience"},"name":"Nisa","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Nisa Local":{"tags":{"name":"Nisa Local","shop":"convenience"},"name":"Nisa Local","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/OK-Mart":{"tags":{"name":"OK-Mart","shop":"convenience"},"name":"OK-Mart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/OK便利商店":{"tags":{"name":"OK便利商店","shop":"convenience"},"name":"OK便利商店","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/OK便利店 Circle K":{"tags":{"name":"OK便利店 Circle K","shop":"convenience"},"name":"OK便利店 Circle K","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Odido":{"tags":{"name":"Odido","shop":"convenience"},"name":"Odido","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/On The Run":{"tags":{"name":"On The Run","shop":"convenience"},"name":"On The Run","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/On the Run":{"tags":{"name":"On the Run","shop":"convenience"},"name":"On the Run","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/One Stop":{"tags":{"name":"One Stop","shop":"convenience"},"name":"One Stop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Oxxo":{"tags":{"name":"Oxxo","shop":"convenience"},"name":"Oxxo","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Parduotuvė":{"tags":{"name":"Parduotuvė","shop":"convenience"},"name":"Parduotuvė","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Petit Casino":{"tags":{"name":"Petit Casino","shop":"convenience"},"name":"Petit Casino","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Plaid Pantry":{"tags":{"name":"Plaid Pantry","shop":"convenience"},"name":"Plaid Pantry","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Potraviny":{"tags":{"name":"Potraviny","shop":"convenience"},"name":"Potraviny","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Prehrana":{"tags":{"name":"Prehrana","shop":"convenience"},"name":"Prehrana","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Premier":{"tags":{"name":"Premier","shop":"convenience"},"name":"Premier","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Proxi":{"tags":{"name":"Proxi","shop":"convenience"},"name":"Proxi","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Proxy":{"tags":{"name":"Proxy","shop":"convenience"},"name":"Proxy","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Pulperia":{"tags":{"name":"Pulperia","shop":"convenience"},"name":"Pulperia","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Royal Farms":{"tags":{"name":"Royal Farms","shop":"convenience"},"name":"Royal Farms","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Sale":{"tags":{"name":"Sale","shop":"convenience"},"name":"Sale","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Sari-sari Store":{"tags":{"name":"Sari-sari Store","shop":"convenience"},"name":"Sari-sari Store","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Select":{"tags":{"name":"Select","shop":"convenience"},"name":"Select","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Shell Select":{"tags":{"name":"Shell Select","shop":"convenience"},"name":"Shell Select","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Shop & Go":{"tags":{"name":"Shop & Go","shop":"convenience"},"name":"Shop & Go","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Siwa":{"tags":{"name":"Siwa","shop":"convenience"},"name":"Siwa","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Sklep spożywczy":{"tags":{"name":"Sklep spożywczy","shop":"convenience"},"name":"Sklep spożywczy","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Smíšené zboží":{"tags":{"name":"Smíšené zboží","shop":"convenience"},"name":"Smíšené zboží","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Społem":{"tags":{"name":"Społem","shop":"convenience"},"name":"Społem","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Spätkauf":{"tags":{"name":"Spätkauf","shop":"convenience"},"name":"Spätkauf","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Stewart's":{"tags":{"name":"Stewart's","shop":"convenience"},"name":"Stewart's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Stores":{"tags":{"name":"Stores","shop":"convenience"},"name":"Stores","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Stripes":{"tags":{"name":"Stripes","shop":"convenience"},"name":"Stripes","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Studenac":{"tags":{"name":"Studenac","shop":"convenience"},"name":"Studenac","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Sunkus":{"tags":{"name":"Sunkus","shop":"convenience"},"name":"Sunkus","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Słoneczko":{"tags":{"name":"Słoneczko","shop":"convenience"},"name":"Słoneczko","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/TESCO Lotus Express":{"tags":{"name":"TESCO Lotus Express","shop":"convenience"},"name":"TESCO Lotus Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Tesco Express":{"tags":{"name":"Tesco Express","shop":"convenience"},"name":"Tesco Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Tesco Lotus Express":{"tags":{"name":"Tesco Lotus Express","shop":"convenience"},"name":"Tesco Lotus Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Tom Market 89":{"tags":{"name":"Tom Market 89","shop":"convenience"},"name":"Tom Market 89","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/United Dairy Farmers":{"tags":{"name":"United Dairy Farmers","shop":"convenience"},"name":"United Dairy Farmers","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Vegyesbolt":{"tags":{"name":"Vegyesbolt","shop":"convenience"},"name":"Vegyesbolt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Večerka":{"tags":{"name":"Večerka","shop":"convenience"},"name":"Večerka","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Vival":{"tags":{"name":"Vival","shop":"convenience"},"name":"Vival","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Wawa":{"tags":{"name":"Wawa","shop":"convenience"},"name":"Wawa","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Weltladen":{"tags":{"name":"Weltladen","shop":"convenience"},"name":"Weltladen","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/abc":{"tags":{"name":"abc","shop":"convenience"},"name":"abc","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ampm":{"tags":{"name":"ampm","shop":"convenience"},"name":"ampm","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/best-one":{"tags":{"name":"best-one","shop":"convenience"},"name":"best-one","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/odido":{"tags":{"name":"odido","shop":"convenience"},"name":"odido","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Élelmiszer":{"tags":{"name":"Élelmiszer","shop":"convenience"},"name":"Élelmiszer","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Élelmiszerbolt":{"tags":{"name":"Élelmiszerbolt","shop":"convenience"},"name":"Élelmiszerbolt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Żabka":{"tags":{"name":"Żabka","shop":"convenience"},"name":"Żabka","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Žabka":{"tags":{"name":"Žabka","shop":"convenience"},"name":"Žabka","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Августина":{"tags":{"name":"Августина","shop":"convenience"},"name":"Августина","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Авоська":{"tags":{"name":"Авоська","shop":"convenience"},"name":"Авоська","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Агрокомплекс":{"tags":{"name":"Агрокомплекс","shop":"convenience"},"name":"Агрокомплекс","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Альянс":{"tags":{"name":"Альянс","shop":"convenience"},"name":"Альянс","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Апельсин":{"tags":{"name":"Апельсин","shop":"convenience"},"name":"Апельсин","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Ассорти":{"tags":{"name":"Ассорти","shop":"convenience"},"name":"Ассорти","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Белорусские продукты":{"tags":{"name":"Белорусские продукты","shop":"convenience"},"name":"Белорусские продукты","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Берёзка":{"tags":{"name":"Берёзка","shop":"convenience"},"name":"Берёзка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Везунчик":{"tags":{"name":"Везунчик","shop":"convenience"},"name":"Везунчик","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Весна":{"tags":{"name":"Весна","shop":"convenience"},"name":"Весна","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Ветеран":{"tags":{"name":"Ветеран","shop":"convenience"},"name":"Ветеран","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Визит":{"tags":{"name":"Визит","shop":"convenience"},"name":"Визит","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Виктория":{"tags":{"name":"Виктория","shop":"convenience"},"name":"Виктория","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ВкусВилл":{"tags":{"name":"ВкусВилл","shop":"convenience"},"name":"ВкусВилл","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Гастроном":{"tags":{"name":"Гастроном","shop":"convenience"},"name":"Гастроном","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Гермес":{"tags":{"name":"Гермес","shop":"convenience"},"name":"Гермес","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Гурман":{"tags":{"name":"Гурман","shop":"convenience"},"name":"Гурман","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Домашний":{"tags":{"name":"Домашний","shop":"convenience"},"name":"Домашний","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Елена":{"tags":{"name":"Елена","shop":"convenience"},"name":"Елена","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Ермолино":{"tags":{"name":"Ермолино","shop":"convenience"},"name":"Ермолино","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Калинка":{"tags":{"name":"Калинка","shop":"convenience"},"name":"Калинка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Кировский":{"tags":{"name":"Кировский","shop":"convenience"},"name":"Кировский","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Колобок":{"tags":{"name":"Колобок","shop":"convenience"},"name":"Колобок","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Колосок":{"tags":{"name":"Колосок","shop":"convenience"},"name":"Колосок","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Копеечка":{"tags":{"name":"Копеечка","shop":"convenience"},"name":"Копеечка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Копейка":{"tags":{"name":"Копейка","shop":"convenience"},"name":"Копейка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Корзинка":{"tags":{"name":"Корзинка","shop":"convenience"},"name":"Корзинка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Крамниця":{"tags":{"name":"Крамниця","shop":"convenience"},"name":"Крамниця","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Кристалл":{"tags":{"name":"Кристалл","shop":"convenience"},"name":"Кристалл","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Кулинария":{"tags":{"name":"Кулинария","shop":"convenience"},"name":"Кулинария","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Купец":{"tags":{"name":"Купец","shop":"convenience"},"name":"Купец","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Ласточка":{"tags":{"name":"Ласточка","shop":"convenience"},"name":"Ласточка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Лидер":{"tags":{"name":"Лидер","shop":"convenience"},"name":"Лидер","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Любимый":{"tags":{"name":"Любимый","shop":"convenience"},"name":"Любимый","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Люкс":{"tags":{"name":"Люкс","shop":"convenience"},"name":"Люкс","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Магазин при АЗС":{"tags":{"name":"Магазин при АЗС","shop":"convenience"},"name":"Магазин при АЗС","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Мария-Ра":{"tags":{"name":"Мария-Ра","shop":"convenience"},"name":"Мария-Ра","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Маяк":{"tags":{"name":"Маяк","shop":"convenience"},"name":"Маяк","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Меркурий":{"tags":{"name":"Меркурий","shop":"convenience"},"name":"Меркурий","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Мечта":{"tags":{"name":"Мечта","shop":"convenience"},"name":"Мечта","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Минимаркет":{"tags":{"name":"Минимаркет","shop":"convenience"},"name":"Минимаркет","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Мираж":{"tags":{"name":"Мираж","shop":"convenience"},"name":"Мираж","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Надежда":{"tags":{"name":"Надежда","shop":"convenience"},"name":"Надежда","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Ника":{"tags":{"name":"Ника","shop":"convenience"},"name":"Ника","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Оазис":{"tags":{"name":"Оазис","shop":"convenience"},"name":"Оазис","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Олимп":{"tags":{"name":"Олимп","shop":"convenience"},"name":"Олимп","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Подсолнух":{"tags":{"name":"Подсолнух","shop":"convenience"},"name":"Подсолнух","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Престиж":{"tags":{"name":"Престиж","shop":"convenience"},"name":"Престиж","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Продукти":{"tags":{"name":"Продукти","shop":"convenience"},"name":"Продукти","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Продуктовый":{"tags":{"name":"Продуктовый","shop":"convenience"},"name":"Продуктовый","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Продуктовый магазин":{"tags":{"name":"Продуктовый магазин","shop":"convenience"},"name":"Продуктовый магазин","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Продукты":{"tags":{"name":"Продукты","shop":"convenience"},"name":"Продукты","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Продукты 24":{"tags":{"name":"Продукты 24","shop":"convenience"},"name":"Продукты 24","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Радуга":{"tags":{"name":"Радуга","shop":"convenience"},"name":"Радуга","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Родны кут":{"tags":{"name":"Родны кут","shop":"convenience"},"name":"Родны кут","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Ромашка":{"tags":{"name":"Ромашка","shop":"convenience"},"name":"Ромашка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Русь":{"tags":{"name":"Русь","shop":"convenience"},"name":"Русь","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Светлана":{"tags":{"name":"Светлана","shop":"convenience"},"name":"Светлана","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Смак":{"tags":{"name":"Смак","shop":"convenience"},"name":"Смак","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Солнечный":{"tags":{"name":"Солнечный","shop":"convenience"},"name":"Солнечный","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Татьяна":{"tags":{"name":"Татьяна","shop":"convenience"},"name":"Татьяна","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Тройка":{"tags":{"name":"Тройка","shop":"convenience"},"name":"Тройка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/У Палыча":{"tags":{"name":"У Палыча","shop":"convenience"},"name":"У Палыча","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Универсам":{"tags":{"name":"Универсам","shop":"convenience"},"name":"Универсам","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Фортуна":{"tags":{"name":"Фортуна","shop":"convenience"},"name":"Фортуна","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Хороший":{"tags":{"name":"Хороший","shop":"convenience"},"name":"Хороший","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Центральный":{"tags":{"name":"Центральный","shop":"convenience"},"name":"Центральный","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Чайка":{"tags":{"name":"Чайка","shop":"convenience"},"name":"Чайка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Шанс":{"tags":{"name":"Шанс","shop":"convenience"},"name":"Шанс","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Эконом":{"tags":{"name":"Эконом","shop":"convenience"},"name":"Эконом","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Юбилейный":{"tags":{"name":"Юбилейный","shop":"convenience"},"name":"Юбилейный","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/Юлия":{"tags":{"name":"Юлия","shop":"convenience"},"name":"Юлия","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/продукты":{"tags":{"name":"продукты","shop":"convenience"},"name":"продукты","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/მარკეტი":{"tags":{"name":"მარკეტი","shop":"convenience"},"name":"მარკეტი","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/サンクス":{"tags":{"name":"サンクス","name:en":"sunkus","shop":"convenience"},"name":"サンクス","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/サークルK":{"tags":{"name":"サークルK","name:en":"Circle K","shop":"convenience"},"name":"サークルK","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/スリーエフ":{"tags":{"name":"スリーエフ","shop":"convenience"},"name":"スリーエフ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/セイコーマート":{"tags":{"name":"セイコーマート","shop":"convenience"},"name":"セイコーマート","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/セブンイレブン":{"tags":{"name":"セブンイレブン","name:en":"7-Eleven","shop":"convenience"},"name":"セブンイレブン","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/セブンイレブン(Seven-Eleven)":{"tags":{"name":"セブンイレブン(Seven-Eleven)","shop":"convenience"},"name":"セブンイレブン(Seven-Eleven)","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/セーブオン":{"tags":{"name":"セーブオン","shop":"convenience"},"name":"セーブオン","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/デイリーヤマザキ":{"tags":{"name":"デイリーヤマザキ","shop":"convenience"},"name":"デイリーヤマザキ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ファミリーマート":{"tags":{"name":"ファミリーマート","name:en":"FamilyMart","shop":"convenience"},"name":"ファミリーマート","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ポプラ":{"tags":{"name":"ポプラ","shop":"convenience"},"name":"ポプラ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ミニストップ":{"tags":{"name":"ミニストップ","name:en":"MINISTOP","shop":"convenience"},"name":"ミニストップ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ヤマザキショップ":{"tags":{"name":"ヤマザキショップ","shop":"convenience"},"name":"ヤマザキショップ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ローソン":{"tags":{"name":"ローソン","name:en":"LAWSON","shop":"convenience"},"name":"ローソン","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/ローソンストア100":{"tags":{"name":"ローソンストア100","shop":"convenience"},"name":"ローソンストア100","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/全家":{"tags":{"name":"全家","shop":"convenience"},"name":"全家","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/全家便利商店":{"tags":{"name":"全家便利商店","shop":"convenience"},"name":"全家便利商店","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/萊爾富":{"tags":{"name":"萊爾富","shop":"convenience"},"name":"萊爾富","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/convenience/세븐일레븐":{"tags":{"name":"세븐일레븐","shop":"convenience"},"name":"세븐일레븐","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/copyshop/FedEx Office":{"tags":{"name":"FedEx Office","shop":"copyshop"},"name":"FedEx Office","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/copyshop/FedEx Office Print and Ship Center":{"tags":{"name":"FedEx Office Print and Ship Center","shop":"copyshop"},"name":"FedEx Office Print and Ship Center","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Douglas":{"tags":{"name":"Douglas","shop":"cosmetics"},"name":"Douglas","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Lush":{"tags":{"name":"Lush","shop":"cosmetics"},"name":"Lush","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Marionnaud":{"tags":{"name":"Marionnaud","shop":"cosmetics"},"name":"Marionnaud","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Sephora":{"tags":{"name":"Sephora","shop":"cosmetics"},"name":"Sephora","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/The Body Shop":{"tags":{"name":"The Body Shop","shop":"cosmetics"},"name":"The Body Shop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Л'Этуаль":{"tags":{"name":"Л'Этуаль","shop":"cosmetics"},"name":"Л'Этуаль","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Магнит косметик":{"tags":{"name":"Магнит косметик","shop":"cosmetics"},"name":"Магнит косметик","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Магнит-Косметик":{"tags":{"name":"Магнит-Косметик","shop":"cosmetics"},"name":"Магнит-Косметик","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/cosmetics/Подружка":{"tags":{"name":"Подружка","shop":"cosmetics"},"name":"Подружка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/craft/Hobby Lobby":{"tags":{"name":"Hobby Lobby","shop":"craft"},"name":"Hobby Lobby","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/craft/Michaels":{"tags":{"name":"Michaels","shop":"craft"},"name":"Michaels","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Argos":{"tags":{"name":"Argos","shop":"department_store"},"name":"Argos","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Bed Bath & Beyond":{"tags":{"name":"Bed Bath & Beyond","shop":"department_store"},"name":"Bed Bath & Beyond","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Big Lots":{"tags":{"name":"Big Lots","shop":"department_store"},"name":"Big Lots","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Big W":{"tags":{"name":"Big W","shop":"department_store"},"name":"Big W","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Canadian Tire":{"tags":{"name":"Canadian Tire","shop":"department_store"},"name":"Canadian Tire","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Coppel":{"tags":{"name":"Coppel","shop":"department_store"},"name":"Coppel","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Debenhams":{"tags":{"name":"Debenhams","shop":"department_store"},"name":"Debenhams","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Dillard's":{"tags":{"name":"Dillard's","shop":"department_store"},"name":"Dillard's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/El Corte Inglés":{"tags":{"name":"El Corte Inglés","shop":"department_store"},"name":"El Corte Inglés","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Galeria Kaufhof":{"tags":{"name":"Galeria Kaufhof","shop":"department_store"},"name":"Galeria Kaufhof","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/HEMA":{"tags":{"name":"HEMA","shop":"department_store"},"name":"HEMA","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Harvey Norman":{"tags":{"name":"Harvey Norman","shop":"department_store"},"name":"Harvey Norman","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/JCPenney":{"tags":{"name":"JCPenney","shop":"department_store"},"name":"JCPenney","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Karstadt":{"tags":{"name":"Karstadt","shop":"department_store"},"name":"Karstadt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Kmart":{"tags":{"name":"Kmart","shop":"department_store"},"name":"Kmart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Kohl's":{"tags":{"name":"Kohl's","shop":"department_store"},"name":"Kohl's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Lojas Americanas":{"tags":{"name":"Lojas Americanas","shop":"department_store"},"name":"Lojas Americanas","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Macy's":{"tags":{"name":"Macy's","shop":"department_store"},"name":"Macy's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Marks & Spencer":{"tags":{"name":"Marks & Spencer","shop":"department_store"},"name":"Marks & Spencer","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Myer":{"tags":{"name":"Myer","shop":"department_store"},"name":"Myer","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Nordstrom":{"tags":{"name":"Nordstrom","shop":"department_store"},"name":"Nordstrom","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Sears":{"tags":{"name":"Sears","shop":"department_store"},"name":"Sears","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Shopko":{"tags":{"name":"Shopko","shop":"department_store"},"name":"Shopko","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Target":{"tags":{"name":"Target","shop":"department_store"},"name":"Target","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/The Warehouse":{"tags":{"name":"The Warehouse","shop":"department_store"},"name":"The Warehouse","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Woolworth":{"tags":{"name":"Woolworth","shop":"department_store"},"name":"Woolworth","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/department_store/Универмаг":{"tags":{"name":"Универмаг","shop":"department_store"},"name":"Универмаг","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Ace Hardware":{"tags":{"name":"Ace Hardware","shop":"doityourself"},"name":"Ace Hardware","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/B&Q":{"tags":{"name":"B&Q","shop":"doityourself"},"name":"B&Q","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Bauhaus":{"tags":{"name":"Bauhaus","shop":"doityourself"},"name":"Bauhaus","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Biltema":{"tags":{"name":"Biltema","shop":"doityourself"},"name":"Biltema","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Brico":{"tags":{"name":"Brico","shop":"doityourself"},"name":"Brico","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Bricomarché":{"tags":{"name":"Bricomarché","shop":"doityourself"},"name":"Bricomarché","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Bricorama":{"tags":{"name":"Bricorama","shop":"doityourself"},"name":"Bricorama","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Bunnings Warehouse":{"tags":{"name":"Bunnings Warehouse","shop":"doityourself"},"name":"Bunnings Warehouse","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Castorama":{"tags":{"name":"Castorama","shop":"doityourself"},"name":"Castorama","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Easy":{"tags":{"name":"Easy","shop":"doityourself"},"name":"Easy","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Gamma":{"tags":{"name":"Gamma","shop":"doityourself"},"name":"Gamma","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Globus Baumarkt":{"tags":{"name":"Globus Baumarkt","shop":"doityourself"},"name":"Globus Baumarkt","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Hagebaumarkt":{"tags":{"name":"Hagebaumarkt","shop":"doityourself"},"name":"Hagebaumarkt","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Hellweg":{"tags":{"name":"Hellweg","shop":"doityourself"},"name":"Hellweg","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Home Depot":{"tags":{"name":"Home Depot","shop":"doityourself"},"name":"Home Depot","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Home Hardware":{"tags":{"name":"Home Hardware","shop":"doityourself"},"name":"Home Hardware","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Homebase":{"tags":{"name":"Homebase","shop":"doityourself"},"name":"Homebase","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Hornbach":{"tags":{"name":"Hornbach","shop":"doityourself"},"name":"Hornbach","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Hubo":{"tags":{"name":"Hubo","shop":"doityourself"},"name":"Hubo","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Karwei":{"tags":{"name":"Karwei","shop":"doityourself"},"name":"Karwei","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Lagerhaus":{"tags":{"name":"Lagerhaus","shop":"doityourself"},"name":"Lagerhaus","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Leroy Merlin":{"tags":{"name":"Leroy Merlin","shop":"doityourself"},"name":"Leroy Merlin","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Lowe's":{"tags":{"name":"Lowe's","shop":"doityourself"},"name":"Lowe's","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Lowes":{"tags":{"name":"Lowes","shop":"doityourself"},"name":"Lowes","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Menards":{"tags":{"name":"Menards","shop":"doityourself"},"name":"Menards","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Mr Bricolage":{"tags":{"name":"Mr Bricolage","shop":"doityourself"},"name":"Mr Bricolage","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Mr.Bricolage":{"tags":{"name":"Mr.Bricolage","shop":"doityourself"},"name":"Mr.Bricolage","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/OBI":{"tags":{"name":"OBI","shop":"doityourself"},"name":"OBI","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Point P":{"tags":{"name":"Point P","shop":"doityourself"},"name":"Point P","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Praktiker":{"tags":{"name":"Praktiker","shop":"doityourself"},"name":"Praktiker","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Praxis":{"tags":{"name":"Praxis","shop":"doityourself"},"name":"Praxis","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Rona":{"tags":{"name":"Rona","shop":"doityourself"},"name":"Rona","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Screwfix":{"tags":{"name":"Screwfix","shop":"doityourself"},"name":"Screwfix","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Sonderpreis Baumarkt":{"tags":{"name":"Sonderpreis Baumarkt","shop":"doityourself"},"name":"Sonderpreis Baumarkt","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Tekzen":{"tags":{"name":"Tekzen","shop":"doityourself"},"name":"Tekzen","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Toom Baumarkt":{"tags":{"name":"Toom Baumarkt","shop":"doityourself"},"name":"Toom Baumarkt","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Weldom":{"tags":{"name":"Weldom","shop":"doityourself"},"name":"Weldom","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Wickes":{"tags":{"name":"Wickes","shop":"doityourself"},"name":"Wickes","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Леруа Мерлен":{"tags":{"name":"Леруа Мерлен","shop":"doityourself"},"name":"Леруа Мерлен","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Мастер":{"tags":{"name":"Мастер","shop":"doityourself"},"name":"Мастер","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Строитель":{"tags":{"name":"Строитель","shop":"doityourself"},"name":"Строитель","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/Стройматериалы":{"tags":{"name":"Стройматериалы","shop":"doityourself"},"name":"Стройматериалы","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/カインズホーム":{"tags":{"name":"カインズホーム","shop":"doityourself"},"name":"カインズホーム","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/コメリ":{"tags":{"name":"コメリ","shop":"doityourself"},"name":"コメリ","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/doityourself/コーナン":{"tags":{"name":"コーナン","shop":"doityourself"},"name":"コーナン","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/dry_cleaning/Cleaners":{"tags":{"name":"Cleaners","shop":"dry_cleaning"},"name":"Cleaners","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/dry_cleaning/Pressing":{"tags":{"name":"Pressing","shop":"dry_cleaning"},"name":"Pressing","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/dry_cleaning/Диана":{"tags":{"name":"Диана","shop":"dry_cleaning"},"name":"Диана","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/dry_cleaning/Химчистка":{"tags":{"name":"Химчистка","shop":"dry_cleaning"},"name":"Химчистка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/dry_cleaning/ホワイト急便":{"tags":{"name":"ホワイト急便","shop":"dry_cleaning"},"name":"ホワイト急便","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/BCC":{"tags":{"name":"BCC","shop":"electronics"},"name":"BCC","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Batteries Plus Bulbs":{"tags":{"name":"Batteries Plus Bulbs","shop":"electronics"},"name":"Batteries Plus Bulbs","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Best Buy":{"tags":{"name":"Best Buy","shop":"electronics"},"name":"Best Buy","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Boulanger":{"tags":{"name":"Boulanger","shop":"electronics"},"name":"Boulanger","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Currys":{"tags":{"name":"Currys","shop":"electronics"},"name":"Currys","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Currys PC World":{"tags":{"name":"Currys PC World","shop":"electronics"},"name":"Currys PC World","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Darty":{"tags":{"name":"Darty","shop":"electronics"},"name":"Darty","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Elektra":{"tags":{"name":"Elektra","shop":"electronics"},"name":"Elektra","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Elgiganten":{"tags":{"name":"Elgiganten","shop":"electronics"},"name":"Elgiganten","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Euronics":{"tags":{"name":"Euronics","shop":"electronics"},"name":"Euronics","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Expert":{"tags":{"name":"Expert","shop":"electronics"},"name":"Expert","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Hartlauer":{"tags":{"name":"Hartlauer","shop":"electronics"},"name":"Hartlauer","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Interdiscount":{"tags":{"name":"Interdiscount","shop":"electronics"},"name":"Interdiscount","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/La Curacao":{"tags":{"name":"La Curacao","shop":"electronics"},"name":"La Curacao","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Maplin":{"tags":{"name":"Maplin","shop":"electronics"},"name":"Maplin","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Media Expert":{"tags":{"name":"Media Expert","shop":"electronics"},"name":"Media Expert","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Media Markt":{"tags":{"name":"Media Markt","shop":"electronics"},"name":"Media Markt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Musimundo":{"tags":{"name":"Musimundo","shop":"electronics"},"name":"Musimundo","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Neonet":{"tags":{"name":"Neonet","shop":"electronics"},"name":"Neonet","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/RTV Euro AGD":{"tags":{"name":"RTV Euro AGD","shop":"electronics"},"name":"RTV Euro AGD","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Radio Shack":{"tags":{"name":"Radio Shack","shop":"electronics"},"name":"Radio Shack","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Rogers":{"tags":{"name":"Rogers","shop":"electronics"},"name":"Rogers","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Samsung":{"tags":{"name":"Samsung","shop":"electronics"},"name":"Samsung","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Saturn":{"tags":{"name":"Saturn","shop":"electronics"},"name":"Saturn","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Sony":{"tags":{"name":"Sony","shop":"electronics"},"name":"Sony","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/The Source":{"tags":{"name":"The Source","shop":"electronics"},"name":"The Source","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Unieuro":{"tags":{"name":"Unieuro","shop":"electronics"},"name":"Unieuro","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/М.Видео":{"tags":{"name":"М.Видео","shop":"electronics"},"name":"М.Видео","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Фокстрот":{"tags":{"name":"Фокстрот","shop":"electronics"},"name":"Фокстрот","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Эксперт":{"tags":{"name":"Эксперт","shop":"electronics"},"name":"Эксперт","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/Эльдорадо":{"tags":{"name":"Эльдорадо","shop":"electronics"},"name":"Эльдорадо","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/エディオン":{"tags":{"name":"エディオン","shop":"electronics"},"name":"エディオン","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/ケーズデンキ":{"tags":{"name":"ケーズデンキ","shop":"electronics"},"name":"ケーズデンキ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/コジマ":{"tags":{"name":"コジマ","shop":"electronics"},"name":"コジマ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/ヤマダ電機":{"tags":{"name":"ヤマダ電機","shop":"electronics"},"name":"ヤマダ電機","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/全國電子":{"tags":{"name":"全國電子","shop":"electronics"},"name":"全國電子","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/electronics/燦坤3C":{"tags":{"name":"燦坤3C","shop":"electronics"},"name":"燦坤3C","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/erotic/Orion":{"tags":{"name":"Orion","shop":"erotic"},"name":"Orion","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/fabric/Ткани":{"tags":{"name":"Ткани","shop":"fabric"},"name":"Ткани","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/farm/Hofladen":{"tags":{"name":"Hofladen","shop":"farm"},"name":"Hofladen","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Blume 2000":{"tags":{"name":"Blume 2000","shop":"florist"},"name":"Blume 2000","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Blumen Risse":{"tags":{"name":"Blumen Risse","shop":"florist"},"name":"Blumen Risse","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Fleuriste":{"tags":{"name":"Fleuriste","shop":"florist"},"name":"Fleuriste","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Interflora":{"tags":{"name":"Interflora","shop":"florist"},"name":"Interflora","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Monceau Fleurs":{"tags":{"name":"Monceau Fleurs","shop":"florist"},"name":"Monceau Fleurs","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Virágbolt":{"tags":{"name":"Virágbolt","shop":"florist"},"name":"Virágbolt","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Квіти":{"tags":{"name":"Квіти","shop":"florist"},"name":"Квіти","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Цветочный магазин":{"tags":{"name":"Цветочный магазин","shop":"florist"},"name":"Цветочный магазин","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/florist/Цветы":{"tags":{"name":"Цветы","shop":"florist"},"name":"Цветы","icon":"florist","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/frame/rumah penduduk":{"tags":{"name":"rumah penduduk","shop":"frame"},"name":"rumah penduduk","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/funeral_directors/The Co-operative Funeralcare":{"tags":{"name":"The Co-operative Funeralcare","shop":"funeral_directors"},"name":"The Co-operative Funeralcare","icon":"cemetery","geometry":["point","area"],"fields":["name","operator","address","building_area","religion","denomination"],"suggestion":true},"shop/funeral_directors/Ритуальные услуги":{"tags":{"name":"Ритуальные услуги","shop":"funeral_directors"},"name":"Ритуальные услуги","icon":"cemetery","geometry":["point","area"],"fields":["name","operator","address","building_area","religion","denomination"],"suggestion":true},"shop/furniture/Aaron's":{"tags":{"name":"Aaron's","shop":"furniture"},"name":"Aaron's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Black Red White":{"tags":{"name":"Black Red White","shop":"furniture"},"name":"Black Red White","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Bodzio":{"tags":{"name":"Bodzio","shop":"furniture"},"name":"Bodzio","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/But":{"tags":{"name":"But","shop":"furniture"},"name":"But","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Conforama":{"tags":{"name":"Conforama","shop":"furniture"},"name":"Conforama","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/DFS":{"tags":{"name":"DFS","shop":"furniture"},"name":"DFS","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Dänisches Bettenlager":{"tags":{"name":"Dänisches Bettenlager","shop":"furniture"},"name":"Dänisches Bettenlager","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Fly":{"tags":{"name":"Fly","shop":"furniture"},"name":"Fly","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Harveys":{"tags":{"name":"Harveys","shop":"furniture"},"name":"Harveys","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/IKEA":{"tags":{"name":"IKEA","shop":"furniture"},"name":"IKEA","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/JYSK":{"tags":{"name":"JYSK","shop":"furniture"},"name":"JYSK","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Kwantum":{"tags":{"name":"Kwantum","shop":"furniture"},"name":"Kwantum","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Leen Bakker":{"tags":{"name":"Leen Bakker","shop":"furniture"},"name":"Leen Bakker","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Pier 1 Imports":{"tags":{"name":"Pier 1 Imports","shop":"furniture"},"name":"Pier 1 Imports","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Roller":{"tags":{"name":"Roller","shop":"furniture"},"name":"Roller","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/The Brick":{"tags":{"name":"The Brick","shop":"furniture"},"name":"The Brick","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/Меблі":{"tags":{"name":"Меблі","shop":"furniture"},"name":"Меблі","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/furniture/ニトリ":{"tags":{"name":"ニトリ","shop":"furniture"},"name":"ニトリ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/garden_centre/Dehner":{"tags":{"name":"Dehner","shop":"garden_centre"},"name":"Dehner","icon":"garden-center","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/garden_centre/Gamm Vert":{"tags":{"name":"Gamm Vert","shop":"garden_centre"},"name":"Gamm Vert","icon":"garden-center","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/garden_centre/Jardiland":{"tags":{"name":"Jardiland","shop":"garden_centre"},"name":"Jardiland","icon":"garden-center","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/garden_centre/Point Vert":{"tags":{"name":"Point Vert","shop":"garden_centre"},"name":"Point Vert","icon":"garden-center","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/garden_centre/Welkoop":{"tags":{"name":"Welkoop","shop":"garden_centre"},"name":"Welkoop","icon":"garden-center","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/garden_centre/Семена":{"tags":{"name":"Семена","shop":"garden_centre"},"name":"Семена","icon":"garden-center","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/gift/Card Factory":{"tags":{"name":"Card Factory","shop":"gift"},"name":"Card Factory","icon":"gift","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/gift/Hallmark":{"tags":{"name":"Hallmark","shop":"gift"},"name":"Hallmark","icon":"gift","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/gift/Подарки":{"tags":{"name":"Подарки","shop":"gift"},"name":"Подарки","icon":"gift","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/greengrocer/Frutería":{"tags":{"name":"Frutería","shop":"greengrocer"},"name":"Frutería","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/greengrocer/Овощи и фрукты":{"tags":{"name":"Овощи и фрукты","shop":"greengrocer"},"name":"Овощи и фрукты","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Berber":{"tags":{"name":"Berber","shop":"hairdresser"},"name":"Berber","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Cost Cutters":{"tags":{"name":"Cost Cutters","shop":"hairdresser"},"name":"Cost Cutters","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Fantastic Sams":{"tags":{"name":"Fantastic Sams","shop":"hairdresser"},"name":"Fantastic Sams","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Figaro":{"tags":{"name":"Figaro","shop":"hairdresser"},"name":"Figaro","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/First Choice Haircutters":{"tags":{"name":"First Choice Haircutters","shop":"hairdresser"},"name":"First Choice Haircutters","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Franck Provost":{"tags":{"name":"Franck Provost","shop":"hairdresser"},"name":"Franck Provost","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Frizerie":{"tags":{"name":"Frizerie","shop":"hairdresser"},"name":"Frizerie","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Great Clips":{"tags":{"name":"Great Clips","shop":"hairdresser"},"name":"Great Clips","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Haarmonie":{"tags":{"name":"Haarmonie","shop":"hairdresser"},"name":"Haarmonie","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Haarscharf":{"tags":{"name":"Haarscharf","shop":"hairdresser"},"name":"Haarscharf","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Hair Cuttery":{"tags":{"name":"Hair Cuttery","shop":"hairdresser"},"name":"Hair Cuttery","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Hairkiller":{"tags":{"name":"Hairkiller","shop":"hairdresser"},"name":"Hairkiller","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Jean Louis David":{"tags":{"name":"Jean Louis David","shop":"hairdresser"},"name":"Jean Louis David","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Jean-Louis David":{"tags":{"name":"Jean-Louis David","shop":"hairdresser"},"name":"Jean-Louis David","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Klier":{"tags":{"name":"Klier","shop":"hairdresser"},"name":"Klier","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Klipp":{"tags":{"name":"Klipp","shop":"hairdresser"},"name":"Klipp","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Le Salon":{"tags":{"name":"Le Salon","shop":"hairdresser"},"name":"Le Salon","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Marco Aldany":{"tags":{"name":"Marco Aldany","shop":"hairdresser"},"name":"Marco Aldany","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Peluquería":{"tags":{"name":"Peluquería","shop":"hairdresser"},"name":"Peluquería","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Salon fryzjerski":{"tags":{"name":"Salon fryzjerski","shop":"hairdresser"},"name":"Salon fryzjerski","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Sport Clips":{"tags":{"name":"Sport Clips","shop":"hairdresser"},"name":"Sport Clips","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Super Cuts":{"tags":{"name":"Super Cuts","shop":"hairdresser"},"name":"Super Cuts","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Supercuts":{"tags":{"name":"Supercuts","shop":"hairdresser"},"name":"Supercuts","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Tchip":{"tags":{"name":"Tchip","shop":"hairdresser"},"name":"Tchip","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/The Barber Shop":{"tags":{"name":"The Barber Shop","shop":"hairdresser"},"name":"The Barber Shop","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Toni & Guy":{"tags":{"name":"Toni & Guy","shop":"hairdresser"},"name":"Toni & Guy","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Top Hair":{"tags":{"name":"Top Hair","shop":"hairdresser"},"name":"Top Hair","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Локон":{"tags":{"name":"Локон","shop":"hairdresser"},"name":"Локон","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Парикмахерская":{"tags":{"name":"Парикмахерская","shop":"hairdresser"},"name":"Парикмахерская","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Перукарня":{"tags":{"name":"Перукарня","shop":"hairdresser"},"name":"Перукарня","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Салон красоты":{"tags":{"name":"Салон красоты","shop":"hairdresser"},"name":"Салон красоты","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Стиль":{"tags":{"name":"Стиль","shop":"hairdresser"},"name":"Стиль","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/Шарм":{"tags":{"name":"Шарм","shop":"hairdresser"},"name":"Шарм","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hairdresser/حلاق":{"tags":{"name":"حلاق","shop":"hairdresser"},"name":"حلاق","icon":"hairdresser","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/1000 мелочей":{"tags":{"name":"1000 мелочей","shop":"hardware"},"name":"1000 мелочей","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Ferretería":{"tags":{"name":"Ferretería","shop":"hardware"},"name":"Ferretería","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Harbor Freight Tools":{"tags":{"name":"Harbor Freight Tools","shop":"hardware"},"name":"Harbor Freight Tools","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Quincaillerie":{"tags":{"name":"Quincaillerie","shop":"hardware"},"name":"Quincaillerie","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/True Value":{"tags":{"name":"True Value","shop":"hardware"},"name":"True Value","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Würth":{"tags":{"name":"Würth","shop":"hardware"},"name":"Würth","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Промтовары":{"tags":{"name":"Промтовары","shop":"hardware"},"name":"Промтовары","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Сантехника":{"tags":{"name":"Сантехника","shop":"hardware"},"name":"Сантехника","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Товары для дома":{"tags":{"name":"Товары для дома","shop":"hardware"},"name":"Товары для дома","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hardware/Хозтовары":{"tags":{"name":"Хозтовары","shop":"hardware"},"name":"Хозтовары","icon":"poi-tool","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hearing_aids/Amplifon":{"tags":{"name":"Amplifon","shop":"hearing_aids"},"name":"Amplifon","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hearing_aids/Geers":{"tags":{"name":"Geers","shop":"hearing_aids"},"name":"Geers","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hearing_aids/Kind Hörgeräte":{"tags":{"name":"Kind Hörgeräte","shop":"hearing_aids"},"name":"Kind Hörgeräte","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hearing_aids/amplifon":{"tags":{"name":"amplifon","shop":"hearing_aids"},"name":"amplifon","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/hifi/Bang & Olufsen":{"tags":{"name":"Bang & Olufsen","shop":"hifi"},"name":"Bang & Olufsen","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/houseware/Blokker":{"tags":{"name":"Blokker","shop":"houseware"},"name":"Blokker","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/houseware/Marskramer":{"tags":{"name":"Marskramer","shop":"houseware"},"name":"Marskramer","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/houseware/Xenos":{"tags":{"name":"Xenos","shop":"houseware"},"name":"Xenos","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/interior_decoration/Casa":{"tags":{"name":"Casa","shop":"interior_decoration"},"name":"Casa","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/interior_decoration/Depot":{"tags":{"name":"Depot","shop":"interior_decoration"},"name":"Depot","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/585":{"tags":{"name":"585","shop":"jewelry"},"name":"585","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Apart":{"tags":{"name":"Apart","shop":"jewelry"},"name":"Apart","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Bijou Brigitte":{"tags":{"name":"Bijou Brigitte","shop":"jewelry"},"name":"Bijou Brigitte","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Christ":{"tags":{"name":"Christ","shop":"jewelry"},"name":"Christ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Claire's":{"tags":{"name":"Claire's","shop":"jewelry"},"name":"Claire's","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Ernest Jones":{"tags":{"name":"Ernest Jones","shop":"jewelry"},"name":"Ernest Jones","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/H Samuel":{"tags":{"name":"H Samuel","shop":"jewelry"},"name":"H Samuel","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/James Avery Jewelry":{"tags":{"name":"James Avery Jewelry","shop":"jewelry"},"name":"James Avery Jewelry","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Julien d'Orcel":{"tags":{"name":"Julien d'Orcel","shop":"jewelry"},"name":"Julien d'Orcel","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Kay Jewelers":{"tags":{"name":"Kay Jewelers","shop":"jewelry"},"name":"Kay Jewelers","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Pandora":{"tags":{"name":"Pandora","shop":"jewelry"},"name":"Pandora","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Swarovski":{"tags":{"name":"Swarovski","shop":"jewelry"},"name":"Swarovski","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Адамас":{"tags":{"name":"Адамас","shop":"jewelry"},"name":"Адамас","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/jewelry/Золото":{"tags":{"name":"Золото","shop":"jewelry"},"name":"Золото","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/KIOS":{"tags":{"name":"KIOS","shop":"kiosk"},"name":"KIOS","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Kiosko":{"tags":{"name":"Kiosko","shop":"kiosk"},"name":"Kiosko","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Kiosque":{"tags":{"name":"Kiosque","shop":"kiosk"},"name":"Kiosque","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Kolporter":{"tags":{"name":"Kolporter","shop":"kiosk"},"name":"Kolporter","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Lietuvos spauda":{"tags":{"name":"Lietuvos spauda","shop":"kiosk"},"name":"Lietuvos spauda","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Narvesen":{"tags":{"name":"Narvesen","shop":"kiosk"},"name":"Narvesen","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Pressbyrån":{"tags":{"name":"Pressbyrån","shop":"kiosk"},"name":"Pressbyrån","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Pulpería":{"tags":{"name":"Pulpería","shop":"kiosk"},"name":"Pulpería","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/R-Kioski":{"tags":{"name":"R-Kioski","shop":"kiosk"},"name":"R-Kioski","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Ruch":{"tags":{"name":"Ruch","shop":"kiosk"},"name":"Ruch","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Tabak Trafik":{"tags":{"name":"Tabak Trafik","shop":"kiosk"},"name":"Tabak Trafik","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Tisak":{"tags":{"name":"Tisak","shop":"kiosk"},"name":"Tisak","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Trafik":{"tags":{"name":"Trafik","shop":"kiosk"},"name":"Trafik","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Trafika":{"tags":{"name":"Trafika","shop":"kiosk"},"name":"Trafika","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Trinkhalle":{"tags":{"name":"Trinkhalle","shop":"kiosk"},"name":"Trinkhalle","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Белсоюзпечать":{"tags":{"name":"Белсоюзпечать","shop":"kiosk"},"name":"Белсоюзпечать","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/Киоск":{"tags":{"name":"Киоск","shop":"kiosk"},"name":"Киоск","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kiosk/მარკეტი (Market)":{"tags":{"name":"მარკეტი (Market)","shop":"kiosk"},"name":"მარკეტი (Market)","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kitchen/Cuisinella":{"tags":{"name":"Cuisinella","shop":"kitchen"},"name":"Cuisinella","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/kitchen/Home Utensils":{"tags":{"name":"Home Utensils","shop":"kitchen"},"name":"Home Utensils","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/laundry/Launderette":{"tags":{"name":"Launderette","shop":"laundry"},"name":"Launderette","icon":"laundry","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/laundry/Lavandería":{"tags":{"name":"Lavandería","shop":"laundry"},"name":"Lavandería","icon":"laundry","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/laundry/コインランドリー":{"tags":{"name":"コインランドリー","shop":"laundry"},"name":"コインランドリー","icon":"laundry","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/lottery/Loteria de la Provincia":{"tags":{"name":"Loteria de la Provincia","shop":"lottery"},"name":"Loteria de la Provincia","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/lottery/Lotería Nacional":{"tags":{"name":"Lotería Nacional","shop":"lottery"},"name":"Lotería Nacional","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/lottery/Lotería de la Provincia":{"tags":{"name":"Lotería de la Provincia","shop":"lottery"},"name":"Lotería de la Provincia","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/lottery/Lotto":{"tags":{"name":"Lotto","shop":"lottery"},"name":"Lotto","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/lottery/Lottózó":{"tags":{"name":"Lottózó","shop":"lottery"},"name":"Lottózó","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/lottery/ONCE":{"tags":{"name":"ONCE","shop":"lottery"},"name":"ONCE","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mall/Торговый центр":{"tags":{"name":"Торговый центр","shop":"mall"},"name":"Торговый центр","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours"],"suggestion":true},"shop/massage/Massage Envy":{"tags":{"name":"Massage Envy","shop":"massage"},"name":"Massage Envy","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/medical_supply/Pofam-Poznań":{"tags":{"name":"Pofam-Poznań","shop":"medical_supply"},"name":"Pofam-Poznań","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/3 Store":{"tags":{"name":"3 Store","shop":"mobile_phone"},"name":"3 Store","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/AT&T":{"tags":{"name":"AT&T","shop":"mobile_phone"},"name":"AT&T","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Bell":{"tags":{"name":"Bell","shop":"mobile_phone"},"name":"Bell","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Bitė":{"tags":{"name":"Bitė","shop":"mobile_phone"},"name":"Bitė","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Boost Mobile":{"tags":{"name":"Boost Mobile","shop":"mobile_phone"},"name":"Boost Mobile","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Carphone Warehouse":{"tags":{"name":"Carphone Warehouse","shop":"mobile_phone"},"name":"Carphone Warehouse","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Claro":{"tags":{"name":"Claro","shop":"mobile_phone"},"name":"Claro","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Cricket Wireless":{"tags":{"name":"Cricket Wireless","shop":"mobile_phone"},"name":"Cricket Wireless","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Digicel":{"tags":{"name":"Digicel","shop":"mobile_phone"},"name":"Digicel","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/EE":{"tags":{"name":"EE","shop":"mobile_phone"},"name":"EE","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/MetroPCS":{"tags":{"name":"MetroPCS","shop":"mobile_phone"},"name":"MetroPCS","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Movistar":{"tags":{"name":"Movistar","shop":"mobile_phone"},"name":"Movistar","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/O2":{"tags":{"name":"O2","shop":"mobile_phone"},"name":"O2","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Orange":{"tags":{"name":"Orange","shop":"mobile_phone"},"name":"Orange","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Personal":{"tags":{"name":"Personal","shop":"mobile_phone"},"name":"Personal","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Play":{"tags":{"name":"Play","shop":"mobile_phone"},"name":"Play","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Plus":{"tags":{"name":"Plus","shop":"mobile_phone"},"name":"Plus","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/SFR":{"tags":{"name":"SFR","shop":"mobile_phone"},"name":"SFR","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Sprint":{"tags":{"name":"Sprint","shop":"mobile_phone"},"name":"Sprint","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/T-Mobile":{"tags":{"name":"T-Mobile","shop":"mobile_phone"},"name":"T-Mobile","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/TIM":{"tags":{"name":"TIM","shop":"mobile_phone"},"name":"TIM","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Telcel":{"tags":{"name":"Telcel","shop":"mobile_phone"},"name":"Telcel","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Tele2":{"tags":{"name":"Tele2","shop":"mobile_phone"},"name":"Tele2","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Telekom":{"tags":{"name":"Telekom","shop":"mobile_phone"},"name":"Telekom","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Telekom Shop":{"tags":{"name":"Telekom Shop","shop":"mobile_phone"},"name":"Telekom Shop","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Telenor":{"tags":{"name":"Telenor","shop":"mobile_phone"},"name":"Telenor","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Telus":{"tags":{"name":"Telus","shop":"mobile_phone"},"name":"Telus","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/The Phone House":{"tags":{"name":"The Phone House","shop":"mobile_phone"},"name":"The Phone House","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Three":{"tags":{"name":"Three","shop":"mobile_phone"},"name":"Three","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Tim":{"tags":{"name":"Tim","shop":"mobile_phone"},"name":"Tim","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Télécentre":{"tags":{"name":"Télécentre","shop":"mobile_phone"},"name":"Télécentre","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Verizon":{"tags":{"name":"Verizon","shop":"mobile_phone"},"name":"Verizon","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Verizon Wireless":{"tags":{"name":"Verizon Wireless","shop":"mobile_phone"},"name":"Verizon Wireless","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Vodafone":{"tags":{"name":"Vodafone","shop":"mobile_phone"},"name":"Vodafone","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Vodafone Shop":{"tags":{"name":"Vodafone Shop","shop":"mobile_phone"},"name":"Vodafone Shop","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Wind":{"tags":{"name":"Wind","shop":"mobile_phone"},"name":"Wind","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Yoigo":{"tags":{"name":"Yoigo","shop":"mobile_phone"},"name":"Yoigo","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/au":{"tags":{"name":"au","shop":"mobile_phone"},"name":"au","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/auショップ":{"tags":{"name":"auショップ","shop":"mobile_phone"},"name":"auショップ","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/mobilcom debitel":{"tags":{"name":"mobilcom debitel","shop":"mobile_phone"},"name":"mobilcom debitel","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Алло":{"tags":{"name":"Алло","shop":"mobile_phone"},"name":"Алло","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Билайн":{"tags":{"name":"Билайн","shop":"mobile_phone"},"name":"Билайн","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Евросеть":{"tags":{"name":"Евросеть","shop":"mobile_phone"},"name":"Евросеть","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Київстар":{"tags":{"name":"Київстар","shop":"mobile_phone"},"name":"Київстар","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/МТС":{"tags":{"name":"МТС","shop":"mobile_phone"},"name":"МТС","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Мегафон":{"tags":{"name":"Мегафон","shop":"mobile_phone"},"name":"Мегафон","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Связной":{"tags":{"name":"Связной","shop":"mobile_phone"},"name":"Связной","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/Теле2":{"tags":{"name":"Теле2","shop":"mobile_phone"},"name":"Теле2","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/ソフトバンクショップ":{"tags":{"name":"ソフトバンクショップ","shop":"mobile_phone"},"name":"ソフトバンクショップ","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/mobile_phone/ドコモショップ":{"tags":{"name":"ドコモショップ","shop":"mobile_phone"},"name":"ドコモショップ","icon":"mobile-phone","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/money_lender/Money Mart":{"tags":{"name":"Money Mart","shop":"money_lender"},"name":"Money Mart","icon":"bank","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","currency_multi"],"suggestion":true},"shop/motorcycle/Harley Davidson":{"tags":{"name":"Harley Davidson","shop":"motorcycle"},"name":"Harley Davidson","icon":"scooter","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/motorcycle/Yamaha":{"tags":{"name":"Yamaha","shop":"motorcycle"},"name":"Yamaha","icon":"scooter","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/music/HMV":{"tags":{"name":"HMV","shop":"music"},"name":"HMV","icon":"music","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/musical_instrument/Guitar Center":{"tags":{"name":"Guitar Center","shop":"musical_instrument"},"name":"Guitar Center","icon":"music","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Edicola":{"tags":{"name":"Edicola","shop":"newsagent"},"name":"Edicola","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Maison de la Presse":{"tags":{"name":"Maison de la Presse","shop":"newsagent"},"name":"Maison de la Presse","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Relay":{"tags":{"name":"Relay","shop":"newsagent"},"name":"Relay","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Tabac Presse":{"tags":{"name":"Tabac Presse","shop":"newsagent"},"name":"Tabac Presse","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/WHSmith":{"tags":{"name":"WHSmith","shop":"newsagent"},"name":"WHSmith","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Витебскоблсоюзпечать":{"tags":{"name":"Витебскоблсоюзпечать","shop":"newsagent"},"name":"Витебскоблсоюзпечать","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Первая полоса":{"tags":{"name":"Первая полоса","shop":"newsagent"},"name":"Первая полоса","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Печать":{"tags":{"name":"Печать","shop":"newsagent"},"name":"Печать","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Роспечать":{"tags":{"name":"Роспечать","shop":"newsagent"},"name":"Роспечать","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/newsagent/Союзпечать":{"tags":{"name":"Союзпечать","shop":"newsagent"},"name":"Союзпечать","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Alain Afflelou":{"tags":{"name":"Alain Afflelou","shop":"optician"},"name":"Alain Afflelou","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Apollo":{"tags":{"name":"Apollo","shop":"optician"},"name":"Apollo","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Atol":{"tags":{"name":"Atol","shop":"optician"},"name":"Atol","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Boots Opticians":{"tags":{"name":"Boots Opticians","shop":"optician"},"name":"Boots Opticians","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Fielmann":{"tags":{"name":"Fielmann","shop":"optician"},"name":"Fielmann","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/General Óptica":{"tags":{"name":"General Óptica","shop":"optician"},"name":"General Óptica","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Grand Optical":{"tags":{"name":"Grand Optical","shop":"optician"},"name":"Grand Optical","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Générale d'Optique":{"tags":{"name":"Générale d'Optique","shop":"optician"},"name":"Générale d'Optique","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Hakim Optical":{"tags":{"name":"Hakim Optical","shop":"optician"},"name":"Hakim Optical","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Hans Anders":{"tags":{"name":"Hans Anders","shop":"optician"},"name":"Hans Anders","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Krys":{"tags":{"name":"Krys","shop":"optician"},"name":"Krys","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Les Opticiens Mutualistes":{"tags":{"name":"Les Opticiens Mutualistes","shop":"optician"},"name":"Les Opticiens Mutualistes","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Optic 2000":{"tags":{"name":"Optic 2000","shop":"optician"},"name":"Optic 2000","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Optical Center":{"tags":{"name":"Optical Center","shop":"optician"},"name":"Optical Center","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Pearle":{"tags":{"name":"Pearle","shop":"optician"},"name":"Pearle","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Pearle Vision":{"tags":{"name":"Pearle Vision","shop":"optician"},"name":"Pearle Vision","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Specsavers":{"tags":{"name":"Specsavers","shop":"optician"},"name":"Specsavers","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Sunglass Hut":{"tags":{"name":"Sunglass Hut","shop":"optician"},"name":"Sunglass Hut","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Synoptik":{"tags":{"name":"Synoptik","shop":"optician"},"name":"Synoptik","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/Vision Express":{"tags":{"name":"Vision Express","shop":"optician"},"name":"Vision Express","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/แว่นท็อปเจริญ":{"tags":{"name":"แว่นท็อปเจริญ","shop":"optician"},"name":"แว่นท็อปเจริญ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/メガネスーパー":{"tags":{"name":"メガネスーパー","shop":"optician"},"name":"メガネスーパー","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/optician/眼鏡市場":{"tags":{"name":"眼鏡市場","shop":"optician"},"name":"眼鏡市場","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/outdoor/Mountain Warehouse":{"tags":{"name":"Mountain Warehouse","shop":"outdoor"},"name":"Mountain Warehouse","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/outdoor/REI":{"tags":{"name":"REI","shop":"outdoor"},"name":"REI","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/outdoor/Рыболов":{"tags":{"name":"Рыболов","shop":"outdoor"},"name":"Рыболов","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/paint/Benjamin Moore":{"tags":{"name":"Benjamin Moore","shop":"paint"},"name":"Benjamin Moore","icon":"water","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/paint/Comex":{"tags":{"name":"Comex","shop":"paint"},"name":"Comex","icon":"water","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/paint/Jotun":{"tags":{"name":"Jotun","shop":"paint"},"name":"Jotun","icon":"water","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/paint/National Paints":{"tags":{"name":"National Paints","shop":"paint"},"name":"National Paints","icon":"water","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/paint/Sherwin Williams":{"tags":{"name":"Sherwin Williams","shop":"paint"},"name":"Sherwin Williams","icon":"water","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/paint/Sherwin-Williams Paints":{"tags":{"name":"Sherwin-Williams Paints","shop":"paint"},"name":"Sherwin-Williams Paints","icon":"water","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pawnbroker/Cash Converters":{"tags":{"name":"Cash Converters","shop":"pawnbroker"},"name":"Cash Converters","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pawnbroker/Lombard":{"tags":{"name":"Lombard","shop":"pawnbroker"},"name":"Lombard","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pawnbroker/Palawan Pawnshop":{"tags":{"name":"Palawan Pawnshop","shop":"pawnbroker"},"name":"Palawan Pawnshop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Das Futterhaus":{"tags":{"name":"Das Futterhaus","shop":"pet"},"name":"Das Futterhaus","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Fressnapf":{"tags":{"name":"Fressnapf","shop":"pet"},"name":"Fressnapf","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Global Pet Foods":{"tags":{"name":"Global Pet Foods","shop":"pet"},"name":"Global Pet Foods","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Maxi Zoo":{"tags":{"name":"Maxi Zoo","shop":"pet"},"name":"Maxi Zoo","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Pet Valu":{"tags":{"name":"Pet Valu","shop":"pet"},"name":"Pet Valu","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/PetSmart":{"tags":{"name":"PetSmart","shop":"pet"},"name":"PetSmart","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Petco":{"tags":{"name":"Petco","shop":"pet"},"name":"Petco","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Pets at Home":{"tags":{"name":"Pets at Home","shop":"pet"},"name":"Pets at Home","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Бетховен":{"tags":{"name":"Бетховен","shop":"pet"},"name":"Бетховен","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Зоотовары":{"tags":{"name":"Зоотовары","shop":"pet"},"name":"Зоотовары","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/pet/Четыре лапы":{"tags":{"name":"Четыре лапы","shop":"pet"},"name":"Четыре лапы","icon":"dog-park","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/second_hand/Goodwill":{"tags":{"name":"Goodwill","shop":"second_hand"},"name":"Goodwill","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/second_hand/Value Village":{"tags":{"name":"Value Village","shop":"second_hand"},"name":"Value Village","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","second_hand","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Aldo":{"tags":{"name":"Aldo","shop":"shoes"},"name":"Aldo","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Bata":{"tags":{"name":"Bata","shop":"shoes"},"name":"Bata","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Besson Chaussures":{"tags":{"name":"Besson Chaussures","shop":"shoes"},"name":"Besson Chaussures","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Brantano":{"tags":{"name":"Brantano","shop":"shoes"},"name":"Brantano","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/CCC":{"tags":{"name":"CCC","shop":"shoes"},"name":"CCC","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Camper":{"tags":{"name":"Camper","shop":"shoes"},"name":"Camper","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Chaussea":{"tags":{"name":"Chaussea","shop":"shoes"},"name":"Chaussea","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Clarks":{"tags":{"name":"Clarks","shop":"shoes"},"name":"Clarks","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Converse":{"tags":{"name":"Converse","shop":"shoes"},"name":"Converse","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Crocs":{"tags":{"name":"Crocs","shop":"shoes"},"name":"Crocs","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/DSW":{"tags":{"name":"DSW","shop":"shoes"},"name":"DSW","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Deichmann":{"tags":{"name":"Deichmann","shop":"shoes"},"name":"Deichmann","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Dosenbach":{"tags":{"name":"Dosenbach","shop":"shoes"},"name":"Dosenbach","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Ecco":{"tags":{"name":"Ecco","shop":"shoes"},"name":"Ecco","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Famous Footwear":{"tags":{"name":"Famous Footwear","shop":"shoes"},"name":"Famous Footwear","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Foot Locker":{"tags":{"name":"Foot Locker","shop":"shoes"},"name":"Foot Locker","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Geox":{"tags":{"name":"Geox","shop":"shoes"},"name":"Geox","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Kari":{"tags":{"name":"Kari","shop":"shoes"},"name":"Kari","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/La Halle aux Chaussures":{"tags":{"name":"La Halle aux Chaussures","shop":"shoes"},"name":"La Halle aux Chaussures","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Mephisto":{"tags":{"name":"Mephisto","shop":"shoes"},"name":"Mephisto","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Minelli":{"tags":{"name":"Minelli","shop":"shoes"},"name":"Minelli","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/New Balance":{"tags":{"name":"New Balance","shop":"shoes"},"name":"New Balance","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Payless":{"tags":{"name":"Payless","shop":"shoes"},"name":"Payless","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Payless Shoe Source":{"tags":{"name":"Payless Shoe Source","shop":"shoes"},"name":"Payless Shoe Source","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Payless ShoeSource":{"tags":{"name":"Payless ShoeSource","shop":"shoes"},"name":"Payless ShoeSource","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Quick Schuh":{"tags":{"name":"Quick Schuh","shop":"shoes"},"name":"Quick Schuh","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Rack Room Shoes":{"tags":{"name":"Rack Room Shoes","shop":"shoes"},"name":"Rack Room Shoes","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Reno":{"tags":{"name":"Reno","shop":"shoes"},"name":"Reno","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Rieker":{"tags":{"name":"Rieker","shop":"shoes"},"name":"Rieker","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Salamander":{"tags":{"name":"Salamander","shop":"shoes"},"name":"Salamander","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/San Marina":{"tags":{"name":"San Marina","shop":"shoes"},"name":"San Marina","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Scapino":{"tags":{"name":"Scapino","shop":"shoes"},"name":"Scapino","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Shoe Carnival":{"tags":{"name":"Shoe Carnival","shop":"shoes"},"name":"Shoe Carnival","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Shoe Zone":{"tags":{"name":"Shoe Zone","shop":"shoes"},"name":"Shoe Zone","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Siemes Schuhcenter":{"tags":{"name":"Siemes Schuhcenter","shop":"shoes"},"name":"Siemes Schuhcenter","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Skechers":{"tags":{"name":"Skechers","shop":"shoes"},"name":"Skechers","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Tamaris":{"tags":{"name":"Tamaris","shop":"shoes"},"name":"Tamaris","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/vanHaren":{"tags":{"name":"vanHaren","shop":"shoes"},"name":"vanHaren","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Éram":{"tags":{"name":"Éram","shop":"shoes"},"name":"Éram","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Ремонт обуви":{"tags":{"name":"Ремонт обуви","shop":"shoes"},"name":"Ремонт обуви","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/ЦентрОбувь":{"tags":{"name":"ЦентрОбувь","shop":"shoes"},"name":"ЦентрОбувь","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/Юничел":{"tags":{"name":"Юничел","shop":"shoes"},"name":"Юничел","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/shoes/東京靴流通センター":{"tags":{"name":"東京靴流通センター","shop":"shoes"},"name":"東京靴流通センター","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Aktiesport":{"tags":{"name":"Aktiesport","shop":"sports"},"name":"Aktiesport","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Big 5 Sporting Goods":{"tags":{"name":"Big 5 Sporting Goods","shop":"sports"},"name":"Big 5 Sporting Goods","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Decathlon":{"tags":{"name":"Decathlon","shop":"sports"},"name":"Decathlon","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Dick's Sporting Goods":{"tags":{"name":"Dick's Sporting Goods","shop":"sports"},"name":"Dick's Sporting Goods","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Hervis":{"tags":{"name":"Hervis","shop":"sports"},"name":"Hervis","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Intersport":{"tags":{"name":"Intersport","shop":"sports"},"name":"Intersport","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/JD Sports":{"tags":{"name":"JD Sports","shop":"sports"},"name":"JD Sports","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Sport 2000":{"tags":{"name":"Sport 2000","shop":"sports"},"name":"Sport 2000","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Sports Authority":{"tags":{"name":"Sports Authority","shop":"sports"},"name":"Sports Authority","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Sports Direct":{"tags":{"name":"Sports Direct","shop":"sports"},"name":"Sports Direct","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Спортмастер":{"tags":{"name":"Спортмастер","shop":"sports"},"name":"Спортмастер","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/sports/Спорттовары":{"tags":{"name":"Спорттовары","shop":"sports"},"name":"Спорттовары","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Bureau Vallée":{"tags":{"name":"Bureau Vallée","shop":"stationery"},"name":"Bureau Vallée","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Libro":{"tags":{"name":"Libro","shop":"stationery"},"name":"Libro","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/McPaper":{"tags":{"name":"McPaper","shop":"stationery"},"name":"McPaper","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Office Depot":{"tags":{"name":"Office Depot","shop":"stationery"},"name":"Office Depot","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Office Max":{"tags":{"name":"Office Max","shop":"stationery"},"name":"Office Max","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Officeworks":{"tags":{"name":"Officeworks","shop":"stationery"},"name":"Officeworks","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Pagro":{"tags":{"name":"Pagro","shop":"stationery"},"name":"Pagro","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Paperchase":{"tags":{"name":"Paperchase","shop":"stationery"},"name":"Paperchase","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Ryman":{"tags":{"name":"Ryman","shop":"stationery"},"name":"Ryman","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Staples":{"tags":{"name":"Staples","shop":"stationery"},"name":"Staples","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/stationery/Канцтовары":{"tags":{"name":"Канцтовары","shop":"stationery"},"name":"Канцтовары","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/A&O":{"tags":{"name":"A&O","shop":"supermarket"},"name":"A&O","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/A101":{"tags":{"name":"A101","shop":"supermarket"},"name":"A101","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/AD Delhaize":{"tags":{"name":"AD Delhaize","shop":"supermarket"},"name":"AD Delhaize","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/ADEG":{"tags":{"name":"ADEG","shop":"supermarket"},"name":"ADEG","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Ahorramás":{"tags":{"name":"Ahorramás","shop":"supermarket"},"name":"Ahorramás","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Albert":{"tags":{"name":"Albert","shop":"supermarket"},"name":"Albert","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Albert Heijn":{"tags":{"name":"Albert Heijn","shop":"supermarket"},"name":"Albert Heijn","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Albertsons":{"tags":{"name":"Albertsons","shop":"supermarket"},"name":"Albertsons","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Aldi":{"tags":{"name":"Aldi","shop":"supermarket"},"name":"Aldi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Aldi Nord":{"tags":{"name":"Aldi Nord","shop":"supermarket"},"name":"Aldi Nord","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Aldi Süd":{"tags":{"name":"Aldi Süd","shop":"supermarket"},"name":"Aldi Süd","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Alimerka":{"tags":{"name":"Alimerka","shop":"supermarket"},"name":"Alimerka","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Alnatura":{"tags":{"name":"Alnatura","shop":"supermarket"},"name":"Alnatura","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Asda":{"tags":{"name":"Asda","shop":"supermarket"},"name":"Asda","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Atac":{"tags":{"name":"Atac","shop":"supermarket"},"name":"Atac","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Atacadão":{"tags":{"name":"Atacadão","shop":"supermarket"},"name":"Atacadão","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Auchan":{"tags":{"name":"Auchan","shop":"supermarket"},"name":"Auchan","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/BM":{"tags":{"name":"BM","shop":"supermarket"},"name":"BM","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Biedronka":{"tags":{"name":"Biedronka","shop":"supermarket"},"name":"Biedronka","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Big C":{"tags":{"name":"Big C","shop":"supermarket"},"name":"Big C","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Billa":{"tags":{"name":"Billa","shop":"supermarket"},"name":"Billa","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Bim":{"tags":{"name":"Bim","shop":"supermarket"},"name":"Bim","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Biocoop":{"tags":{"name":"Biocoop","shop":"supermarket"},"name":"Biocoop","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Bodega Aurrera":{"tags":{"name":"Bodega Aurrera","shop":"supermarket"},"name":"Bodega Aurrera","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Budgens":{"tags":{"name":"Budgens","shop":"supermarket"},"name":"Budgens","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Bulk Barn":{"tags":{"name":"Bulk Barn","shop":"supermarket"},"name":"Bulk Barn","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Bunnpris":{"tags":{"name":"Bunnpris","shop":"supermarket"},"name":"Bunnpris","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/CONAD":{"tags":{"name":"CONAD","shop":"supermarket"},"name":"CONAD","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/CRAI":{"tags":{"name":"CRAI","shop":"supermarket"},"name":"CRAI","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Caprabo":{"tags":{"name":"Caprabo","shop":"supermarket"},"name":"Caprabo","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Cargills Food City":{"tags":{"name":"Cargills Food City","shop":"supermarket"},"name":"Cargills Food City","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Carrefour":{"tags":{"name":"Carrefour","shop":"supermarket"},"name":"Carrefour","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Carrefour City":{"tags":{"name":"Carrefour City","shop":"supermarket"},"name":"Carrefour City","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Carrefour Contact":{"tags":{"name":"Carrefour Contact","shop":"supermarket"},"name":"Carrefour Contact","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Carrefour Express":{"tags":{"name":"Carrefour Express","shop":"supermarket"},"name":"Carrefour Express","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Centre Commercial E. Leclerc":{"tags":{"name":"Centre Commercial E. Leclerc","shop":"supermarket"},"name":"Centre Commercial E. Leclerc","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Checkers":{"tags":{"name":"Checkers","shop":"supermarket"},"name":"Checkers","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Chedraui":{"tags":{"name":"Chedraui","shop":"supermarket"},"name":"Chedraui","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Co-Op":{"tags":{"name":"Co-Op","shop":"supermarket"},"name":"Co-Op","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Co-op":{"tags":{"name":"Co-op","shop":"supermarket"},"name":"Co-op","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Co-operative":{"tags":{"name":"Co-operative","shop":"supermarket"},"name":"Co-operative","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Coles":{"tags":{"name":"Coles","shop":"supermarket"},"name":"Coles","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Colmado":{"tags":{"name":"Colmado","shop":"supermarket"},"name":"Colmado","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Colruyt":{"tags":{"name":"Colruyt","shop":"supermarket"},"name":"Colruyt","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Combi":{"tags":{"name":"Combi","shop":"supermarket"},"name":"Combi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Comercial Mexicana":{"tags":{"name":"Comercial Mexicana","shop":"supermarket"},"name":"Comercial Mexicana","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Conad":{"tags":{"name":"Conad","shop":"supermarket"},"name":"Conad","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Conad City":{"tags":{"name":"Conad City","shop":"supermarket"},"name":"Conad City","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Condis":{"tags":{"name":"Condis","shop":"supermarket"},"name":"Condis","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Consum":{"tags":{"name":"Consum","shop":"supermarket"},"name":"Consum","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Continente":{"tags":{"name":"Continente","shop":"supermarket"},"name":"Continente","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Coop":{"tags":{"name":"Coop","shop":"supermarket"},"name":"Coop","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Coop Extra":{"tags":{"name":"Coop Extra","shop":"supermarket"},"name":"Coop Extra","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Coop Konsum":{"tags":{"name":"Coop Konsum","shop":"supermarket"},"name":"Coop Konsum","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Costco Gasoline":{"tags":{"name":"Costco Gasoline","shop":"supermarket"},"name":"Costco Gasoline","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Coto":{"tags":{"name":"Coto","shop":"supermarket"},"name":"Coto","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Countdown":{"tags":{"name":"Countdown","shop":"supermarket"},"name":"Countdown","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Coviran":{"tags":{"name":"Coviran","shop":"supermarket"},"name":"Coviran","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Covirán":{"tags":{"name":"Covirán","shop":"supermarket"},"name":"Covirán","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Crai":{"tags":{"name":"Crai","shop":"supermarket"},"name":"Crai","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Cub Foods":{"tags":{"name":"Cub Foods","shop":"supermarket"},"name":"Cub Foods","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dagli'Brugsen":{"tags":{"name":"Dagli'Brugsen","shop":"supermarket"},"name":"Dagli'Brugsen","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Deen":{"tags":{"name":"Deen","shop":"supermarket"},"name":"Deen","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Delhaize":{"tags":{"name":"Delhaize","shop":"supermarket"},"name":"Delhaize","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Delikatesy Centrum":{"tags":{"name":"Delikatesy Centrum","shop":"supermarket"},"name":"Delikatesy Centrum","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Denner":{"tags":{"name":"Denner","shop":"supermarket"},"name":"Denner","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Despar":{"tags":{"name":"Despar","shop":"supermarket"},"name":"Despar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Despensa Familiar":{"tags":{"name":"Despensa Familiar","shop":"supermarket"},"name":"Despensa Familiar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dia":{"tags":{"name":"Dia","shop":"supermarket"},"name":"Dia","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dia %":{"tags":{"name":"Dia %","shop":"supermarket"},"name":"Dia %","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dia Market":{"tags":{"name":"Dia Market","shop":"supermarket"},"name":"Dia Market","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dino":{"tags":{"name":"Dino","shop":"supermarket"},"name":"Dino","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dirk van den Broek":{"tags":{"name":"Dirk van den Broek","shop":"supermarket"},"name":"Dirk van den Broek","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Disco":{"tags":{"name":"Disco","shop":"supermarket"},"name":"Disco","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Diska":{"tags":{"name":"Diska","shop":"supermarket"},"name":"Diska","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Dunnes Stores":{"tags":{"name":"Dunnes Stores","shop":"supermarket"},"name":"Dunnes Stores","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/E-Center":{"tags":{"name":"E-Center","shop":"supermarket"},"name":"E-Center","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/E. Leclerc":{"tags":{"name":"E. Leclerc","shop":"supermarket"},"name":"E. Leclerc","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/E. Leclerc Drive":{"tags":{"name":"E. Leclerc Drive","shop":"supermarket"},"name":"E. Leclerc Drive","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/EMTÉ":{"tags":{"name":"EMTÉ","shop":"supermarket"},"name":"EMTÉ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Edeka":{"tags":{"name":"Edeka","shop":"supermarket"},"name":"Edeka","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Ekom":{"tags":{"name":"Ekom","shop":"supermarket"},"name":"Ekom","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Ekono":{"tags":{"name":"Ekono","shop":"supermarket"},"name":"Ekono","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/El Árbol":{"tags":{"name":"El Árbol","shop":"supermarket"},"name":"El Árbol","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Eroski":{"tags":{"name":"Eroski","shop":"supermarket"},"name":"Eroski","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Esselunga":{"tags":{"name":"Esselunga","shop":"supermarket"},"name":"Esselunga","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/EuroSpin":{"tags":{"name":"EuroSpin","shop":"supermarket"},"name":"EuroSpin","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Eurospar":{"tags":{"name":"Eurospar","shop":"supermarket"},"name":"Eurospar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Eurospin":{"tags":{"name":"Eurospin","shop":"supermarket"},"name":"Eurospin","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Extra":{"tags":{"name":"Extra","shop":"supermarket"},"name":"Extra","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Famiglia Cooperativa":{"tags":{"name":"Famiglia Cooperativa","shop":"supermarket"},"name":"Famiglia Cooperativa","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Famila":{"tags":{"name":"Famila","shop":"supermarket"},"name":"Famila","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Fareway":{"tags":{"name":"Fareway","shop":"supermarket"},"name":"Fareway","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Farmfoods":{"tags":{"name":"Farmfoods","shop":"supermarket"},"name":"Farmfoods","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Feneberg":{"tags":{"name":"Feneberg","shop":"supermarket"},"name":"Feneberg","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Food Basics":{"tags":{"name":"Food Basics","shop":"supermarket"},"name":"Food Basics","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Food Lion":{"tags":{"name":"Food Lion","shop":"supermarket"},"name":"Food Lion","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Foodland":{"tags":{"name":"Foodland","shop":"supermarket"},"name":"Foodland","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Foodworks":{"tags":{"name":"Foodworks","shop":"supermarket"},"name":"Foodworks","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Franprix":{"tags":{"name":"Franprix","shop":"supermarket"},"name":"Franprix","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Fred Meyer":{"tags":{"name":"Fred Meyer","shop":"supermarket"},"name":"Fred Meyer","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Froiz":{"tags":{"name":"Froiz","shop":"supermarket"},"name":"Froiz","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Føtex":{"tags":{"name":"Føtex","shop":"supermarket"},"name":"Føtex","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/G20":{"tags":{"name":"G20","shop":"supermarket"},"name":"G20","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Gadis":{"tags":{"name":"Gadis","shop":"supermarket"},"name":"Gadis","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Giant":{"tags":{"name":"Giant","shop":"supermarket"},"name":"Giant","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Giant Eagle":{"tags":{"name":"Giant Eagle","shop":"supermarket"},"name":"Giant Eagle","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Grand Frais":{"tags":{"name":"Grand Frais","shop":"supermarket"},"name":"Grand Frais","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Grocery Outlet":{"tags":{"name":"Grocery Outlet","shop":"supermarket"},"name":"Grocery Outlet","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Géant Casino":{"tags":{"name":"Géant Casino","shop":"supermarket"},"name":"Géant Casino","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/H-E-B":{"tags":{"name":"H-E-B","shop":"supermarket"},"name":"H-E-B","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/HIT":{"tags":{"name":"HIT","shop":"supermarket"},"name":"HIT","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Hannaford":{"tags":{"name":"Hannaford","shop":"supermarket"},"name":"Hannaford","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Harris Teeter":{"tags":{"name":"Harris Teeter","shop":"supermarket"},"name":"Harris Teeter","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Hemköp":{"tags":{"name":"Hemköp","shop":"supermarket"},"name":"Hemköp","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Heron Foods":{"tags":{"name":"Heron Foods","shop":"supermarket"},"name":"Heron Foods","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Hofer":{"tags":{"name":"Hofer","shop":"supermarket"},"name":"Hofer","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Hoogvliet":{"tags":{"name":"Hoogvliet","shop":"supermarket"},"name":"Hoogvliet","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Hy-Vee":{"tags":{"name":"Hy-Vee","shop":"supermarket"},"name":"Hy-Vee","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/ICA":{"tags":{"name":"ICA","shop":"supermarket"},"name":"ICA","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/ICA Kvantum":{"tags":{"name":"ICA Kvantum","shop":"supermarket"},"name":"ICA Kvantum","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/IDEA":{"tags":{"name":"IDEA","shop":"supermarket"},"name":"IDEA","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/IGA":{"tags":{"name":"IGA","shop":"supermarket"},"name":"IGA","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Iceland":{"tags":{"name":"Iceland","shop":"supermarket"},"name":"Iceland","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Intermarché":{"tags":{"name":"Intermarché","shop":"supermarket"},"name":"Intermarché","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Intermarché Contact":{"tags":{"name":"Intermarché Contact","shop":"supermarket"},"name":"Intermarché Contact","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Intermarché Super":{"tags":{"name":"Intermarché Super","shop":"supermarket"},"name":"Intermarché Super","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Interspar":{"tags":{"name":"Interspar","shop":"supermarket"},"name":"Interspar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Irma":{"tags":{"name":"Irma","shop":"supermarket"},"name":"Irma","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Jewel-Osco":{"tags":{"name":"Jewel-Osco","shop":"supermarket"},"name":"Jewel-Osco","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Jumbo":{"tags":{"name":"Jumbo","shop":"supermarket"},"name":"Jumbo","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/K+K":{"tags":{"name":"K+K","shop":"supermarket"},"name":"K+K","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Kaufland":{"tags":{"name":"Kaufland","shop":"supermarket"},"name":"Kaufland","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/King Soopers":{"tags":{"name":"King Soopers","shop":"supermarket"},"name":"King Soopers","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Kiwi":{"tags":{"name":"Kiwi","shop":"supermarket"},"name":"Kiwi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Konsum":{"tags":{"name":"Konsum","shop":"supermarket"},"name":"Konsum","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Konzum":{"tags":{"name":"Konzum","shop":"supermarket"},"name":"Konzum","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Kroger":{"tags":{"name":"Kroger","shop":"supermarket"},"name":"Kroger","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Kvickly":{"tags":{"name":"Kvickly","shop":"supermarket"},"name":"Kvickly","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/La Vie Claire":{"tags":{"name":"La Vie Claire","shop":"supermarket"},"name":"La Vie Claire","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Landi":{"tags":{"name":"Landi","shop":"supermarket"},"name":"Landi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Leader Price":{"tags":{"name":"Leader Price","shop":"supermarket"},"name":"Leader Price","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Leclerc Drive":{"tags":{"name":"Leclerc Drive","shop":"supermarket"},"name":"Leclerc Drive","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Lider":{"tags":{"name":"Lider","shop":"supermarket"},"name":"Lider","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Lidl":{"tags":{"name":"Lidl","shop":"supermarket"},"name":"Lidl","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Lupa":{"tags":{"name":"Lupa","shop":"supermarket"},"name":"Lupa","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/MPREIS":{"tags":{"name":"MPREIS","shop":"supermarket"},"name":"MPREIS","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Makro":{"tags":{"name":"Makro","shop":"supermarket"},"name":"Makro","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Markant":{"tags":{"name":"Markant","shop":"supermarket"},"name":"Markant","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Market Basket":{"tags":{"name":"Market Basket","shop":"supermarket"},"name":"Market Basket","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Marktkauf":{"tags":{"name":"Marktkauf","shop":"supermarket"},"name":"Marktkauf","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Match":{"tags":{"name":"Match","shop":"supermarket"},"name":"Match","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Maxi":{"tags":{"name":"Maxi","shop":"supermarket"},"name":"Maxi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Maxi Dia":{"tags":{"name":"Maxi Dia","shop":"supermarket"},"name":"Maxi Dia","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Maxima":{"tags":{"name":"Maxima","shop":"supermarket"},"name":"Maxima","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Maxima X":{"tags":{"name":"Maxima X","shop":"supermarket"},"name":"Maxima X","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Maxima XX":{"tags":{"name":"Maxima XX","shop":"supermarket"},"name":"Maxima XX","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mega Image":{"tags":{"name":"Mega Image","shop":"supermarket"},"name":"Mega Image","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mego":{"tags":{"name":"Mego","shop":"supermarket"},"name":"Mego","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Meijer":{"tags":{"name":"Meijer","shop":"supermarket"},"name":"Meijer","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Meny":{"tags":{"name":"Meny","shop":"supermarket"},"name":"Meny","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mercado Municipal":{"tags":{"name":"Mercado Municipal","shop":"supermarket"},"name":"Mercado Municipal","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mercado de Abastos":{"tags":{"name":"Mercado de Abastos","shop":"supermarket"},"name":"Mercado de Abastos","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mercadona":{"tags":{"name":"Mercadona","shop":"supermarket"},"name":"Mercadona","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mercator":{"tags":{"name":"Mercator","shop":"supermarket"},"name":"Mercator","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Merkur":{"tags":{"name":"Merkur","shop":"supermarket"},"name":"Merkur","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Metro":{"tags":{"name":"Metro","shop":"supermarket"},"name":"Metro","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Migros":{"tags":{"name":"Migros","shop":"supermarket"},"name":"Migros","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mila":{"tags":{"name":"Mila","shop":"supermarket"},"name":"Mila","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Minipreço":{"tags":{"name":"Minipreço","shop":"supermarket"},"name":"Minipreço","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Mix Markt":{"tags":{"name":"Mix Markt","shop":"supermarket"},"name":"Mix Markt","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Monoprix":{"tags":{"name":"Monoprix","shop":"supermarket"},"name":"Monoprix","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/More":{"tags":{"name":"More","shop":"supermarket"},"name":"More","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Morrisons":{"tags":{"name":"Morrisons","shop":"supermarket"},"name":"Morrisons","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/NORMA":{"tags":{"name":"NORMA","shop":"supermarket"},"name":"NORMA","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/NP":{"tags":{"name":"NP","shop":"supermarket"},"name":"NP","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Nah & Frisch":{"tags":{"name":"Nah & Frisch","shop":"supermarket"},"name":"Nah & Frisch","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Nahkauf":{"tags":{"name":"Nahkauf","shop":"supermarket"},"name":"Nahkauf","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Netto":{"tags":{"name":"Netto","shop":"supermarket"},"name":"Netto","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Netto Marken-Discount":{"tags":{"name":"Netto Marken-Discount","shop":"supermarket"},"name":"Netto Marken-Discount","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/New World":{"tags":{"name":"New World","shop":"supermarket"},"name":"New World","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/No Frills":{"tags":{"name":"No Frills","shop":"supermarket"},"name":"No Frills","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Norfa XL":{"tags":{"name":"Norfa XL","shop":"supermarket"},"name":"Norfa XL","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Norma":{"tags":{"name":"Norma","shop":"supermarket"},"name":"Norma","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/PENNY":{"tags":{"name":"PENNY","shop":"supermarket"},"name":"PENNY","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/PLUS":{"tags":{"name":"PLUS","shop":"supermarket"},"name":"PLUS","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/POLOmarket":{"tags":{"name":"POLOmarket","shop":"supermarket"},"name":"POLOmarket","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Palí":{"tags":{"name":"Palí","shop":"supermarket"},"name":"Palí","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Pam":{"tags":{"name":"Pam","shop":"supermarket"},"name":"Pam","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Penny":{"tags":{"name":"Penny","shop":"supermarket"},"name":"Penny","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Penny Markt":{"tags":{"name":"Penny Markt","shop":"supermarket"},"name":"Penny Markt","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Pick n Pay":{"tags":{"name":"Pick n Pay","shop":"supermarket"},"name":"Pick n Pay","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Piggly Wiggly":{"tags":{"name":"Piggly Wiggly","shop":"supermarket"},"name":"Piggly Wiggly","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Pingo Doce":{"tags":{"name":"Pingo Doce","shop":"supermarket"},"name":"Pingo Doce","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Piotr i Paweł":{"tags":{"name":"Piotr i Paweł","shop":"supermarket"},"name":"Piotr i Paweł","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Plaza Vea":{"tags":{"name":"Plaza Vea","shop":"supermarket"},"name":"Plaza Vea","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Plodine":{"tags":{"name":"Plodine","shop":"supermarket"},"name":"Plodine","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Poiesz":{"tags":{"name":"Poiesz","shop":"supermarket"},"name":"Poiesz","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Price Chopper":{"tags":{"name":"Price Chopper","shop":"supermarket"},"name":"Price Chopper","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Prix":{"tags":{"name":"Prix","shop":"supermarket"},"name":"Prix","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Profi":{"tags":{"name":"Profi","shop":"supermarket"},"name":"Profi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Proxy Delhaize":{"tags":{"name":"Proxy Delhaize","shop":"supermarket"},"name":"Proxy Delhaize","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Publix":{"tags":{"name":"Publix","shop":"supermarket"},"name":"Publix","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Punto Simply":{"tags":{"name":"Punto Simply","shop":"supermarket"},"name":"Punto Simply","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Puregold":{"tags":{"name":"Puregold","shop":"supermarket"},"name":"Puregold","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Pão de Açúcar":{"tags":{"name":"Pão de Açúcar","shop":"supermarket"},"name":"Pão de Açúcar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/QFC":{"tags":{"name":"QFC","shop":"supermarket"},"name":"QFC","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/REMA 1000":{"tags":{"name":"REMA 1000","shop":"supermarket"},"name":"REMA 1000","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Ralphs":{"tags":{"name":"Ralphs","shop":"supermarket"},"name":"Ralphs","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Real":{"tags":{"name":"Real","shop":"supermarket"},"name":"Real","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Real Canadian Superstore":{"tags":{"name":"Real Canadian Superstore","shop":"supermarket"},"name":"Real Canadian Superstore","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Reliance Fresh":{"tags":{"name":"Reliance Fresh","shop":"supermarket"},"name":"Reliance Fresh","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Rema 1000":{"tags":{"name":"Rema 1000","shop":"supermarket"},"name":"Rema 1000","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Rewe":{"tags":{"name":"Rewe","shop":"supermarket"},"name":"Rewe","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Rewe City":{"tags":{"name":"Rewe City","shop":"supermarket"},"name":"Rewe City","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Rimi":{"tags":{"name":"Rimi","shop":"supermarket"},"name":"Rimi","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/S-Market":{"tags":{"name":"S-Market","shop":"supermarket"},"name":"S-Market","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Safeway":{"tags":{"name":"Safeway","shop":"supermarket"},"name":"Safeway","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sainsbury's":{"tags":{"name":"Sainsbury's","shop":"supermarket"},"name":"Sainsbury's","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sainsbury's Local":{"tags":{"name":"Sainsbury's Local","shop":"supermarket"},"name":"Sainsbury's Local","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sam's Club":{"tags":{"name":"Sam's Club","shop":"supermarket"},"name":"Sam's Club","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Santa Isabel":{"tags":{"name":"Santa Isabel","shop":"supermarket"},"name":"Santa Isabel","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Save-A-Lot":{"tags":{"name":"Save-A-Lot","shop":"supermarket"},"name":"Save-A-Lot","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/ShopRite":{"tags":{"name":"ShopRite","shop":"supermarket"},"name":"ShopRite","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Shoprite":{"tags":{"name":"Shoprite","shop":"supermarket"},"name":"Shoprite","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sigma":{"tags":{"name":"Sigma","shop":"supermarket"},"name":"Sigma","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Simply Market":{"tags":{"name":"Simply Market","shop":"supermarket"},"name":"Simply Market","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sky":{"tags":{"name":"Sky","shop":"supermarket"},"name":"Sky","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Smith's":{"tags":{"name":"Smith's","shop":"supermarket"},"name":"Smith's","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sobeys":{"tags":{"name":"Sobeys","shop":"supermarket"},"name":"Sobeys","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Soriana":{"tags":{"name":"Soriana","shop":"supermarket"},"name":"Soriana","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Spar":{"tags":{"name":"Spar","shop":"supermarket"},"name":"Spar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Sprouts Farmers Market":{"tags":{"name":"Sprouts Farmers Market","shop":"supermarket"},"name":"Sprouts Farmers Market","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Stokrotka":{"tags":{"name":"Stokrotka","shop":"supermarket"},"name":"Stokrotka","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Stop & Shop":{"tags":{"name":"Stop & Shop","shop":"supermarket"},"name":"Stop & Shop","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Super C":{"tags":{"name":"Super C","shop":"supermarket"},"name":"Super C","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Super U":{"tags":{"name":"Super U","shop":"supermarket"},"name":"Super U","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/SuperBrugsen":{"tags":{"name":"SuperBrugsen","shop":"supermarket"},"name":"SuperBrugsen","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/SuperValu":{"tags":{"name":"SuperValu","shop":"supermarket"},"name":"SuperValu","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Superama":{"tags":{"name":"Superama","shop":"supermarket"},"name":"Superama","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Supersol":{"tags":{"name":"Supersol","shop":"supermarket"},"name":"Supersol","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Superspar":{"tags":{"name":"Superspar","shop":"supermarket"},"name":"Superspar","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tegut":{"tags":{"name":"Tegut","shop":"supermarket"},"name":"Tegut","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tengelmann":{"tags":{"name":"Tengelmann","shop":"supermarket"},"name":"Tengelmann","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tesco":{"tags":{"name":"Tesco","shop":"supermarket"},"name":"Tesco","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tesco Extra":{"tags":{"name":"Tesco Extra","shop":"supermarket"},"name":"Tesco Extra","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tesco Lotus":{"tags":{"name":"Tesco Lotus","shop":"supermarket"},"name":"Tesco Lotus","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tesco Metro":{"tags":{"name":"Tesco Metro","shop":"supermarket"},"name":"Tesco Metro","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/The Co-operative":{"tags":{"name":"The Co-operative","shop":"supermarket"},"name":"The Co-operative","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/The Co-operative Food":{"tags":{"name":"The Co-operative Food","shop":"supermarket"},"name":"The Co-operative Food","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tommy":{"tags":{"name":"Tommy","shop":"supermarket"},"name":"Tommy","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Tottus":{"tags":{"name":"Tottus","shop":"supermarket"},"name":"Tottus","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Trader Joe's":{"tags":{"name":"Trader Joe's","shop":"supermarket"},"name":"Trader Joe's","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Treff 3000":{"tags":{"name":"Treff 3000","shop":"supermarket"},"name":"Treff 3000","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/U Express":{"tags":{"name":"U Express","shop":"supermarket"},"name":"U Express","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Unimarc":{"tags":{"name":"Unimarc","shop":"supermarket"},"name":"Unimarc","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Unimarkt":{"tags":{"name":"Unimarkt","shop":"supermarket"},"name":"Unimarkt","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Utile":{"tags":{"name":"Utile","shop":"supermarket"},"name":"Utile","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Vea":{"tags":{"name":"Vea","shop":"supermarket"},"name":"Vea","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Volg":{"tags":{"name":"Volg","shop":"supermarket"},"name":"Volg","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Waitrose":{"tags":{"name":"Waitrose","shop":"supermarket"},"name":"Waitrose","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Walmart":{"tags":{"name":"Walmart","shop":"supermarket"},"name":"Walmart","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Walmart Neighborhood Market":{"tags":{"name":"Walmart Neighborhood Market","shop":"supermarket"},"name":"Walmart Neighborhood Market","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Walmart Supercenter":{"tags":{"name":"Walmart Supercenter","shop":"supermarket"},"name":"Walmart Supercenter","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Wasgau":{"tags":{"name":"Wasgau","shop":"supermarket"},"name":"Wasgau","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Wegmans":{"tags":{"name":"Wegmans","shop":"supermarket"},"name":"Wegmans","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Wellcome":{"tags":{"name":"Wellcome","shop":"supermarket"},"name":"Wellcome","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Whole Foods Market":{"tags":{"name":"Whole Foods Market","shop":"supermarket"},"name":"Whole Foods Market","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Willys":{"tags":{"name":"Willys","shop":"supermarket"},"name":"Willys","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/WinCo Foods":{"tags":{"name":"WinCo Foods","shop":"supermarket"},"name":"WinCo Foods","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Winn Dixie":{"tags":{"name":"Winn Dixie","shop":"supermarket"},"name":"Winn Dixie","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Woolworths":{"tags":{"name":"Woolworths","shop":"supermarket"},"name":"Woolworths","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/denn's Biomarkt":{"tags":{"name":"denn's Biomarkt","shop":"supermarket"},"name":"denn's Biomarkt","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/fakta":{"tags":{"name":"fakta","shop":"supermarket"},"name":"fakta","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/real":{"tags":{"name":"real","shop":"supermarket"},"name":"real","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/tegut":{"tags":{"name":"tegut","shop":"supermarket"},"name":"tegut","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Şok":{"tags":{"name":"Şok","shop":"supermarket"},"name":"Şok","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/ΑΒ Βασιλόπουλος":{"tags":{"name":"ΑΒ Βασιλόπουλος","shop":"supermarket"},"name":"ΑΒ Βασιλόπουλος","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Γαλαξίας":{"tags":{"name":"Γαλαξίας","shop":"supermarket"},"name":"Γαλαξίας","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Μασούτης":{"tags":{"name":"Μασούτης","shop":"supermarket"},"name":"Μασούτης","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Σκλαβενίτης":{"tags":{"name":"Σκλαβενίτης","shop":"supermarket"},"name":"Σκλαβενίτης","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/АТБ":{"tags":{"name":"АТБ","shop":"supermarket"},"name":"АТБ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Абсолют":{"tags":{"name":"Абсолют","shop":"supermarket"},"name":"Абсолют","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Азбука Вкуса":{"tags":{"name":"Азбука Вкуса","shop":"supermarket"},"name":"Азбука Вкуса","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Атак":{"tags":{"name":"Атак","shop":"supermarket"},"name":"Атак","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Ашан":{"tags":{"name":"Ашан","shop":"supermarket"},"name":"Ашан","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Верный":{"tags":{"name":"Верный","shop":"supermarket"},"name":"Верный","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Вопак":{"tags":{"name":"Вопак","shop":"supermarket"},"name":"Вопак","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Гроздь":{"tags":{"name":"Гроздь","shop":"supermarket"},"name":"Гроздь","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Десяточка":{"tags":{"name":"Десяточка","shop":"supermarket"},"name":"Десяточка","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Дикси":{"tags":{"name":"Дикси","shop":"supermarket"},"name":"Дикси","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Евроопт":{"tags":{"name":"Евроопт","shop":"supermarket"},"name":"Евроопт","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Карусель":{"tags":{"name":"Карусель","shop":"supermarket"},"name":"Карусель","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Квартал":{"tags":{"name":"Квартал","shop":"supermarket"},"name":"Квартал","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Командор":{"tags":{"name":"Командор","shop":"supermarket"},"name":"Командор","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Красный Яр":{"tags":{"name":"Красный Яр","shop":"supermarket"},"name":"Красный Яр","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Лента":{"tags":{"name":"Лента","shop":"supermarket"},"name":"Лента","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Магнит":{"tags":{"name":"Магнит","shop":"supermarket"},"name":"Магнит","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Магнолия":{"tags":{"name":"Магнолия","shop":"supermarket"},"name":"Магнолия","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Монетка":{"tags":{"name":"Монетка","shop":"supermarket"},"name":"Монетка","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Народная 7Я семьЯ":{"tags":{"name":"Народная 7Я семьЯ","shop":"supermarket"},"name":"Народная 7Я семьЯ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Перекресток":{"tags":{"name":"Перекресток","shop":"supermarket"},"name":"Перекресток","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Покупочка":{"tags":{"name":"Покупочка","shop":"supermarket"},"name":"Покупочка","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Полушка":{"tags":{"name":"Полушка","shop":"supermarket"},"name":"Полушка","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Пятёрочка":{"tags":{"name":"Пятёрочка","shop":"supermarket"},"name":"Пятёрочка","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Радеж":{"tags":{"name":"Радеж","shop":"supermarket"},"name":"Радеж","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Рукавичка":{"tags":{"name":"Рукавичка","shop":"supermarket"},"name":"Рукавичка","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Светофор":{"tags":{"name":"Светофор","shop":"supermarket"},"name":"Светофор","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Седьмой континент":{"tags":{"name":"Седьмой континент","shop":"supermarket"},"name":"Седьмой континент","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Семейный":{"tags":{"name":"Семейный","shop":"supermarket"},"name":"Семейный","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Семья":{"tags":{"name":"Семья","shop":"supermarket"},"name":"Семья","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Супермаркет":{"tags":{"name":"Супермаркет","shop":"supermarket"},"name":"Супермаркет","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Сільпо":{"tags":{"name":"Сільпо","shop":"supermarket"},"name":"Сільпо","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Таврія‑В":{"tags":{"name":"Таврія‑В","shop":"supermarket"},"name":"Таврія‑В","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Фора":{"tags":{"name":"Фора","shop":"supermarket"},"name":"Фора","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Фуршет":{"tags":{"name":"Фуршет","shop":"supermarket"},"name":"Фуршет","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Хүнсний дэлгүүр":{"tags":{"name":"Хүнсний дэлгүүр","shop":"supermarket"},"name":"Хүнсний дэлгүүр","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/Эдельвейс":{"tags":{"name":"Эдельвейс","shop":"supermarket"},"name":"Эдельвейс","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/хүнсний дэлгүүр":{"tags":{"name":"хүнсний дэлгүүр","shop":"supermarket"},"name":"хүнсний дэлгүүр","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/بقالة":{"tags":{"name":"بقالة","shop":"supermarket"},"name":"بقالة","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/سوپر مارکت":{"tags":{"name":"سوپر مارکت","shop":"supermarket"},"name":"سوپر مارکت","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/سوپرمارکت":{"tags":{"name":"سوپرمارکت","shop":"supermarket"},"name":"سوپرمارکت","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/いなげや":{"tags":{"name":"いなげや","shop":"supermarket"},"name":"いなげや","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/まいばすけっと":{"tags":{"name":"まいばすけっと","shop":"supermarket"},"name":"まいばすけっと","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/イオン":{"tags":{"name":"イオン","shop":"supermarket"},"name":"イオン","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/イトーヨーカドー":{"tags":{"name":"イトーヨーカドー","shop":"supermarket"},"name":"イトーヨーカドー","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/カスミ":{"tags":{"name":"カスミ","shop":"supermarket"},"name":"カスミ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/マックスバリュ":{"tags":{"name":"マックスバリュ","shop":"supermarket"},"name":"マックスバリュ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/マルエツ":{"tags":{"name":"マルエツ","shop":"supermarket"},"name":"マルエツ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/ライフ":{"tags":{"name":"ライフ","shop":"supermarket"},"name":"ライフ","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/全聯":{"tags":{"name":"全聯","shop":"supermarket"},"name":"全聯","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/全聯福利中心":{"tags":{"name":"全聯福利中心","shop":"supermarket"},"name":"全聯福利中心","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/惠康 Wellcome":{"tags":{"name":"惠康 Wellcome","shop":"supermarket"},"name":"惠康 Wellcome","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/業務スーパー":{"tags":{"name":"業務スーパー","shop":"supermarket"},"name":"業務スーパー","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/美廉社":{"tags":{"name":"美廉社","shop":"supermarket"},"name":"美廉社","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/supermarket/西友":{"tags":{"name":"西友","shop":"supermarket"},"name":"西友","icon":"grocery","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tailor/Atelier de couture":{"tags":{"name":"Atelier de couture","shop":"tailor"},"name":"Atelier de couture","icon":"clothing-store","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/ticket/Boutique Grandes Lignes":{"tags":{"name":"Boutique Grandes Lignes","shop":"ticket"},"name":"Boutique Grandes Lignes","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/ticket/Guichet Transilien":{"tags":{"name":"Guichet Transilien","shop":"ticket"},"name":"Guichet Transilien","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/ticket/Касса":{"tags":{"name":"Касса","shop":"ticket"},"name":"Касса","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/ticket/Проездные билеты":{"tags":{"name":"Проездные билеты","shop":"ticket"},"name":"Проездные билеты","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tobacco/Dohánybolt":{"tags":{"name":"Dohánybolt","shop":"tobacco"},"name":"Dohánybolt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tobacco/Estanco":{"tags":{"name":"Estanco","shop":"tobacco"},"name":"Estanco","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tobacco/Nemzeti Dohánybolt":{"tags":{"name":"Nemzeti Dohánybolt","shop":"tobacco"},"name":"Nemzeti Dohánybolt","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tobacco/Tabacos":{"tags":{"name":"Tabacos","shop":"tobacco"},"name":"Tabacos","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tobacco/Табакерка":{"tags":{"name":"Табакерка","shop":"tobacco"},"name":"Табакерка","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/Dráčik":{"tags":{"name":"Dráčik","shop":"toys"},"name":"Dráčik","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/Intertoys":{"tags":{"name":"Intertoys","shop":"toys"},"name":"Intertoys","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/King Jouet":{"tags":{"name":"King Jouet","shop":"toys"},"name":"King Jouet","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/La Grande Récré":{"tags":{"name":"La Grande Récré","shop":"toys"},"name":"La Grande Récré","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/Maxi Toys":{"tags":{"name":"Maxi Toys","shop":"toys"},"name":"Maxi Toys","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/Toys R Us":{"tags":{"name":"Toys R Us","shop":"toys"},"name":"Toys R Us","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/Детский мир":{"tags":{"name":"Детский мир","shop":"toys"},"name":"Детский мир","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/toys/Игрушки":{"tags":{"name":"Игрушки","shop":"toys"},"name":"Игрушки","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/D-reizen":{"tags":{"name":"D-reizen","shop":"travel_agency"},"name":"D-reizen","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/DER Reisebüro":{"tags":{"name":"DER Reisebüro","shop":"travel_agency"},"name":"DER Reisebüro","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/First Reisebüro":{"tags":{"name":"First Reisebüro","shop":"travel_agency"},"name":"First Reisebüro","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/Flight Centre":{"tags":{"name":"Flight Centre","shop":"travel_agency"},"name":"Flight Centre","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/Reiseland":{"tags":{"name":"Reiseland","shop":"travel_agency"},"name":"Reiseland","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/TUI":{"tags":{"name":"TUI","shop":"travel_agency"},"name":"TUI","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/The Co-operative Travel":{"tags":{"name":"The Co-operative Travel","shop":"travel_agency"},"name":"The Co-operative Travel","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/Thomas Cook":{"tags":{"name":"Thomas Cook","shop":"travel_agency"},"name":"Thomas Cook","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/travel_agency/Thomson":{"tags":{"name":"Thomson","shop":"travel_agency"},"name":"Thomson","icon":"suitcase","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tyres/Borracharia":{"tags":{"name":"Borracharia","shop":"tyres"},"name":"Borracharia","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tyres/Bridgestone":{"tags":{"name":"Bridgestone","shop":"tyres"},"name":"Bridgestone","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tyres/Discount Tire":{"tags":{"name":"Discount Tire","shop":"tyres"},"name":"Discount Tire","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tyres/Les Schwab Tire Center":{"tags":{"name":"Les Schwab Tire Center","shop":"tyres"},"name":"Les Schwab Tire Center","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tyres/Vianor":{"tags":{"name":"Vianor","shop":"tyres"},"name":"Vianor","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/tyres/Вулканизация":{"tags":{"name":"Вулканизация","shop":"tyres"},"name":"Вулканизация","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Action":{"tags":{"name":"Action","shop":"variety_store"},"name":"Action","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Bazar":{"tags":{"name":"Bazar","shop":"variety_store"},"name":"Bazar","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Big Bazar":{"tags":{"name":"Big Bazar","shop":"variety_store"},"name":"Big Bazar","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Dollar Tree":{"tags":{"name":"Dollar Tree","shop":"variety_store"},"name":"Dollar Tree","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Dollarama":{"tags":{"name":"Dollarama","shop":"variety_store"},"name":"Dollarama","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/EuroShop":{"tags":{"name":"EuroShop","shop":"variety_store"},"name":"EuroShop","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Family Dollar":{"tags":{"name":"Family Dollar","shop":"variety_store"},"name":"Family Dollar","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Fix Price":{"tags":{"name":"Fix Price","shop":"variety_store"},"name":"Fix Price","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Fix price":{"tags":{"name":"Fix price","shop":"variety_store"},"name":"Fix price","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/FixPrice":{"tags":{"name":"FixPrice","shop":"variety_store"},"name":"FixPrice","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/GiFi":{"tags":{"name":"GiFi","shop":"variety_store"},"name":"GiFi","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Home Bargains":{"tags":{"name":"Home Bargains","shop":"variety_store"},"name":"Home Bargains","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Mäc-Geiz":{"tags":{"name":"Mäc-Geiz","shop":"variety_store"},"name":"Mäc-Geiz","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/NOZ":{"tags":{"name":"NOZ","shop":"variety_store"},"name":"NOZ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Poundland":{"tags":{"name":"Poundland","shop":"variety_store"},"name":"Poundland","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Poundworld":{"tags":{"name":"Poundworld","shop":"variety_store"},"name":"Poundworld","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/Tedi":{"tags":{"name":"Tedi","shop":"variety_store"},"name":"Tedi","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/variety_store/ダイソー":{"tags":{"name":"ダイソー","shop":"variety_store"},"name":"ダイソー","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video/Blockbuster":{"tags":{"name":"Blockbuster","shop":"video"},"name":"Blockbuster","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video/Family Video":{"tags":{"name":"Family Video","shop":"video"},"name":"Family Video","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video/TSUTAYA":{"tags":{"name":"TSUTAYA","shop":"video"},"name":"TSUTAYA","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video/World of Video":{"tags":{"name":"World of Video","shop":"video"},"name":"World of Video","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video/ゲオ":{"tags":{"name":"ゲオ","shop":"video"},"name":"ゲオ","icon":"shop","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video_games/EB Games":{"tags":{"name":"EB Games","shop":"video_games"},"name":"EB Games","icon":"gaming","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video_games/Game":{"tags":{"name":"Game","shop":"video_games"},"name":"Game","icon":"gaming","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video_games/GameStop":{"tags":{"name":"GameStop","shop":"video_games"},"name":"GameStop","icon":"gaming","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"shop/video_games/Micromania":{"tags":{"name":"Micromania","shop":"video_games"},"name":"Micromania","icon":"gaming","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours","payment_multi"],"suggestion":true},"tourism/alpine_hut/КОШ":{"tags":{"name":"КОШ","tourism":"alpine_hut"},"name":"КОШ","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/apartment/Двухкомнатная квартира на сутки":{"tags":{"name":"Двухкомнатная квартира на сутки","tourism":"apartment"},"name":"Двухкомнатная квартира на сутки","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/attraction/Arch":{"tags":{"name":"Arch","tourism":"attraction"},"name":"Arch","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Kursächsische Postmeilensäule":{"tags":{"name":"Kursächsische Postmeilensäule","tourism":"attraction"},"name":"Kursächsische Postmeilensäule","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Maibaum":{"tags":{"name":"Maibaum","tourism":"attraction"},"name":"Maibaum","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Moab trail":{"tags":{"name":"Moab trail","tourism":"attraction"},"name":"Moab trail","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Moai":{"tags":{"name":"Moai","tourism":"attraction"},"name":"Moai","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/OWŚ":{"tags":{"name":"OWŚ","tourism":"attraction"},"name":"OWŚ","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Sommerrodelbahn":{"tags":{"name":"Sommerrodelbahn","tourism":"attraction"},"name":"Sommerrodelbahn","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/path contiunes":{"tags":{"name":"path contiunes","tourism":"attraction"},"name":"path contiunes","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/white blaze":{"tags":{"name":"white blaze","tourism":"attraction"},"name":"white blaze","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Кладбище еврейское":{"tags":{"name":"Кладбище еврейское","tourism":"attraction"},"name":"Кладбище еврейское","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Колесо обозрения":{"tags":{"name":"Колесо обозрения","tourism":"attraction"},"name":"Колесо обозрения","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Приусадебный парк":{"tags":{"name":"Приусадебный парк","tourism":"attraction"},"name":"Приусадебный парк","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Усадьба":{"tags":{"name":"Усадьба","tourism":"attraction"},"name":"Усадьба","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Хозяйственный двор":{"tags":{"name":"Хозяйственный двор","tourism":"attraction"},"name":"Хозяйственный двор","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/Часовня":{"tags":{"name":"Часовня","tourism":"attraction"},"name":"Часовня","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/attraction/дольмен":{"tags":{"name":"дольмен","tourism":"attraction"},"name":"дольмен","icon":"star","geometry":["point","vertex","area"],"fields":["name","operator","address"],"suggestion":true},"tourism/camp_site/Camping Municipal":{"tags":{"name":"Camping Municipal","tourism":"camp_site"},"name":"Camping Municipal","icon":"campsite","geometry":["point","vertex","area"],"fields":["name","operator","address","capacity","fee","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/camp_site/Camping municipal":{"tags":{"name":"Camping municipal","tourism":"camp_site"},"name":"Camping municipal","icon":"campsite","geometry":["point","vertex","area"],"fields":["name","operator","address","capacity","fee","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/guest_house/Home":{"tags":{"name":"Home","tourism":"guest_house"},"name":"Home","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/guest_house/OW Bielanka":{"tags":{"name":"OW Bielanka","tourism":"guest_house"},"name":"OW Bielanka","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hostel/Albergue de Peregrinos":{"tags":{"name":"Albergue de Peregrinos","tourism":"hostel"},"name":"Albergue de Peregrinos","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hostel/Hospedaje":{"tags":{"name":"Hospedaje","tourism":"hostel"},"name":"Hospedaje","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hostel/Hostal":{"tags":{"name":"Hostal","tourism":"hostel"},"name":"Hostal","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/B&B Hôtel":{"tags":{"name":"B&B Hôtel","tourism":"hotel"},"name":"B&B Hôtel","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/B&b Hôtel":{"tags":{"name":"B&b Hôtel","tourism":"hotel"},"name":"B&b Hôtel","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Best Western":{"tags":{"name":"Best Western","tourism":"hotel"},"name":"Best Western","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Campanile":{"tags":{"name":"Campanile","tourism":"hotel"},"name":"Campanile","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Central Hotel":{"tags":{"name":"Central Hotel","tourism":"hotel"},"name":"Central Hotel","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/City Hotel":{"tags":{"name":"City Hotel","tourism":"hotel"},"name":"City Hotel","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Comfort Inn":{"tags":{"name":"Comfort Inn","tourism":"hotel"},"name":"Comfort Inn","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Comfort Inn & Suites":{"tags":{"name":"Comfort Inn & Suites","tourism":"hotel"},"name":"Comfort Inn & Suites","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Comfort Suites":{"tags":{"name":"Comfort Suites","tourism":"hotel"},"name":"Comfort Suites","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Country Inn & Suites":{"tags":{"name":"Country Inn & Suites","tourism":"hotel"},"name":"Country Inn & Suites","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Courtyard by Marriott":{"tags":{"name":"Courtyard by Marriott","tourism":"hotel"},"name":"Courtyard by Marriott","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Crowne Plaza":{"tags":{"name":"Crowne Plaza","tourism":"hotel"},"name":"Crowne Plaza","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Days Inn":{"tags":{"name":"Days Inn","tourism":"hotel"},"name":"Days Inn","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Embassy Suites":{"tags":{"name":"Embassy Suites","tourism":"hotel"},"name":"Embassy Suites","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Extended Stay America":{"tags":{"name":"Extended Stay America","tourism":"hotel"},"name":"Extended Stay America","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Fairfield Inn":{"tags":{"name":"Fairfield Inn","tourism":"hotel"},"name":"Fairfield Inn","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Fairfield Inn & Suites":{"tags":{"name":"Fairfield Inn & Suites","tourism":"hotel"},"name":"Fairfield Inn & Suites","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Formule 1":{"tags":{"name":"Formule 1","tourism":"hotel"},"name":"Formule 1","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Grand Hotel":{"tags":{"name":"Grand Hotel","tourism":"hotel"},"name":"Grand Hotel","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hampton Inn":{"tags":{"name":"Hampton Inn","tourism":"hotel"},"name":"Hampton Inn","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hampton Inn & Suites":{"tags":{"name":"Hampton Inn & Suites","tourism":"hotel"},"name":"Hampton Inn & Suites","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hilton Garden Inn":{"tags":{"name":"Hilton Garden Inn","tourism":"hotel"},"name":"Hilton Garden Inn","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Holiday Inn":{"tags":{"name":"Holiday Inn","tourism":"hotel"},"name":"Holiday Inn","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Holiday Inn Express":{"tags":{"name":"Holiday Inn Express","tourism":"hotel"},"name":"Holiday Inn Express","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Holiday Inn Express & Suites":{"tags":{"name":"Holiday Inn Express & Suites","tourism":"hotel"},"name":"Holiday Inn Express & Suites","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Homewood Suites":{"tags":{"name":"Homewood Suites","tourism":"hotel"},"name":"Homewood Suites","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Central":{"tags":{"name":"Hotel Central","tourism":"hotel"},"name":"Hotel Central","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Europa":{"tags":{"name":"Hotel Europa","tourism":"hotel"},"name":"Hotel Europa","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Ibis":{"tags":{"name":"Hotel Ibis","tourism":"hotel"},"name":"Hotel Ibis","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Krone":{"tags":{"name":"Hotel Krone","tourism":"hotel"},"name":"Hotel Krone","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Panorama":{"tags":{"name":"Hotel Panorama","tourism":"hotel"},"name":"Hotel Panorama","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Plaza":{"tags":{"name":"Hotel Plaza","tourism":"hotel"},"name":"Hotel Plaza","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Post":{"tags":{"name":"Hotel Post","tourism":"hotel"},"name":"Hotel Post","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Royal":{"tags":{"name":"Hotel Royal","tourism":"hotel"},"name":"Hotel Royal","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel Victoria":{"tags":{"name":"Hotel Victoria","tourism":"hotel"},"name":"Hotel Victoria","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hotel zur Post":{"tags":{"name":"Hotel zur Post","tourism":"hotel"},"name":"Hotel zur Post","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hôtel Ibis":{"tags":{"name":"Hôtel Ibis","tourism":"hotel"},"name":"Hôtel Ibis","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Hôtel de France":{"tags":{"name":"Hôtel de France","tourism":"hotel"},"name":"Hôtel de France","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Ibis":{"tags":{"name":"Ibis","tourism":"hotel"},"name":"Ibis","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Ibis Budget":{"tags":{"name":"Ibis Budget","tourism":"hotel"},"name":"Ibis Budget","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Ibis Styles":{"tags":{"name":"Ibis Styles","tourism":"hotel"},"name":"Ibis Styles","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Kyriad":{"tags":{"name":"Kyriad","tourism":"hotel"},"name":"Kyriad","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/La Quinta":{"tags":{"name":"La Quinta","tourism":"hotel"},"name":"La Quinta","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Marriott":{"tags":{"name":"Marriott","tourism":"hotel"},"name":"Marriott","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Mercure":{"tags":{"name":"Mercure","tourism":"hotel"},"name":"Mercure","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Novotel":{"tags":{"name":"Novotel","tourism":"hotel"},"name":"Novotel","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Palace Hotel":{"tags":{"name":"Palace Hotel","tourism":"hotel"},"name":"Palace Hotel","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Park Hotel":{"tags":{"name":"Park Hotel","tourism":"hotel"},"name":"Park Hotel","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Parkhotel":{"tags":{"name":"Parkhotel","tourism":"hotel"},"name":"Parkhotel","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Premier Inn":{"tags":{"name":"Premier Inn","tourism":"hotel"},"name":"Premier Inn","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Première Classe":{"tags":{"name":"Première Classe","tourism":"hotel"},"name":"Première Classe","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Quality Inn":{"tags":{"name":"Quality Inn","tourism":"hotel"},"name":"Quality Inn","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Quality Inn & Suites":{"tags":{"name":"Quality Inn & Suites","tourism":"hotel"},"name":"Quality Inn & Suites","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Ramada":{"tags":{"name":"Ramada","tourism":"hotel"},"name":"Ramada","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Residence Inn":{"tags":{"name":"Residence Inn","tourism":"hotel"},"name":"Residence Inn","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Royal Hotel":{"tags":{"name":"Royal Hotel","tourism":"hotel"},"name":"Royal Hotel","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Sheraton":{"tags":{"name":"Sheraton","tourism":"hotel"},"name":"Sheraton","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Sleep Inn":{"tags":{"name":"Sleep Inn","tourism":"hotel"},"name":"Sleep Inn","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Staybridge Suites":{"tags":{"name":"Staybridge Suites","tourism":"hotel"},"name":"Staybridge Suites","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Super 8":{"tags":{"name":"Super 8","tourism":"hotel"},"name":"Super 8","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Travelodge":{"tags":{"name":"Travelodge","tourism":"hotel"},"name":"Travelodge","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/Гостиница":{"tags":{"name":"Гостиница","tourism":"hotel"},"name":"Гостиница","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/hotel/東横イン":{"tags":{"name":"東横イン","tourism":"hotel"},"name":"東横イン","icon":"lodging","geometry":["point","area"],"fields":["name","brand","operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/motel/Budget Inn":{"tags":{"name":"Budget Inn","tourism":"motel"},"name":"Budget Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/motel/Econo Lodge":{"tags":{"name":"Econo Lodge","tourism":"motel"},"name":"Econo Lodge","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/motel/Motel 6":{"tags":{"name":"Motel 6","tourism":"motel"},"name":"Motel 6","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/motel/Rodeway Inn":{"tags":{"name":"Rodeway Inn","tourism":"motel"},"name":"Rodeway Inn","icon":"lodging","geometry":["point","area"],"fields":["name","operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"tourism/museum/Heimatmuseum":{"tags":{"name":"Heimatmuseum","tourism":"museum"},"name":"Heimatmuseum","icon":"museum","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours"],"suggestion":true},"tourism/museum/Stadtmuseum":{"tags":{"name":"Stadtmuseum","tourism":"museum"},"name":"Stadtmuseum","icon":"museum","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours"],"suggestion":true},"tourism/museum/Tájház":{"tags":{"name":"Tájház","tourism":"museum"},"name":"Tájház","icon":"museum","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours"],"suggestion":true},"tourism/museum/Краеведческий музей":{"tags":{"name":"Краеведческий музей","tourism":"museum"},"name":"Краеведческий музей","icon":"museum","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours"],"suggestion":true},"tourism/museum/Музей":{"tags":{"name":"Музей","tourism":"museum"},"name":"Музей","icon":"museum","geometry":["point","area"],"fields":["name","operator","address","building_area","opening_hours"],"suggestion":true}}; + + var defaults = {"area":["category-landuse","category-building","category-water-area","category-natural-area","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","area"],"line":["category-road","category-rail","category-path","category-water-line","category-barrier","category-natural-line","power/line","line"],"point":["category-natural-point","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","amenity/fast_food","amenity/bar","amenity/bank","shop/supermarket","point"],"vertex":["highway/crosswalk","highway/crossing","railway/level_crossing","highway/traffic_signals","highway/turning_circle","highway/turning_loop","traffic_calming","highway/mini_roundabout","highway/motorway_junction","vertex"],"relation":["category-route","category-restriction","public_transport/stop_area","type/boundary","type/waterway","type/multipolygon","type/site","relation"]}; + + var categories = {"category-barrier":{"icon":"roadblock","geometry":"line","name":"Barrier Features","members":["barrier/fence","barrier/wall","barrier/ditch","barrier/gate","barrier/hedge","barrier/kerb","barrier"]},"category-building":{"icon":"building","geometry":"area","name":"Building Features","members":["building","building/house","building/apartments","building/retail","building/commercial","building/industrial","building/residential"]},"category-golf":{"icon":"golf","geometry":"area","name":"Golf Features","members":["golf/fairway","golf/green","golf/lateral_water_hazard_area","golf/rough","golf/bunker","golf/tee","golf/water_hazard_area"]},"category-landuse":{"icon":"landuse","geometry":"area","name":"Land Use Features","members":["landuse/residential","landuse/industrial","landuse/commercial","landuse/retail","landuse/farmland","landuse/farmyard","landuse/forest","landuse/meadow","landuse/aquaculture","landuse/cemetery","landuse/military","landuse/religious"]},"category-natural-area":{"icon":"natural","geometry":"area","name":"Natural Features","members":["natural/water","natural/wood","natural/scrub","natural/wetland","natural/grassland","natural/heath","natural/bare_rock","natural/beach","natural/cave_entrance","natural/glacier"]},"category-natural-line":{"icon":"natural","geometry":"line","name":"Natural Features","members":["natural/coastline","natural/tree_row"]},"category-natural-point":{"icon":"natural","geometry":"point","name":"Natural Features","members":["natural/peak","natural/cliff","natural/beach","natural/cave_entrance"]},"category-path":{"icon":"category-path","geometry":"line","name":"Path Features","members":["footway/crosswalk","footway/sidewalk","highway/steps","highway/path","highway/footway","highway/cycleway","highway/bridleway","highway/pedestrian_line"]},"category-rail":{"icon":"category-rail","geometry":"line","name":"Rail Features","members":["railway/rail","railway/subway","railway/tram","railway/monorail","railway/disused","railway/abandoned"]},"category-restriction":{"icon":"restriction","geometry":"relation","name":"Restriction Features","members":["type/restriction/no_left_turn","type/restriction/no_right_turn","type/restriction/no_straight_on","type/restriction/no_u_turn","type/restriction/only_left_turn","type/restriction/only_right_turn","type/restriction/only_straight_on","type/restriction/only_u_turn","type/restriction"]},"category-road":{"icon":"category-roads","geometry":"line","name":"Road Features","members":["highway/residential","highway/motorway","highway/trunk","highway/primary","highway/secondary","highway/tertiary","highway/living_street","highway/unclassified","highway/service","highway/track","highway/motorway_link","highway/trunk_link","highway/primary_link","highway/secondary_link","highway/tertiary_link","highway/road"]},"category-route":{"icon":"route","geometry":"relation","name":"Route Features","members":["type/route/road","type/route/bicycle","type/route/foot","type/route/hiking","type/route/horse","type/route/piste","type/route/bus","type/route/train","type/route/light_rail","type/route/tram","type/route/subway","type/route/ferry","type/route/power","type/route/pipeline","type/route/detour","type/route_master","type/route"]},"category-water-area":{"icon":"water","geometry":"area","name":"Water Features","members":["natural/water/lake","natural/water/pond","natural/water/reservoir","natural/water"]},"category-water-line":{"icon":"category-water","geometry":"line","name":"Water Features","members":["waterway/river","waterway/stream","waterway/canal","waterway/ditch","waterway/drain"]}}; + + var fields = {"access_simple":{"key":"access","type":"combo","label":"Allowed Access","options":["yes","permissive","private","customers","no"]},"access":{"keys":["access","foot","motor_vehicle","bicycle","horse"],"reference":{"key":"access"},"type":"access","label":"Allowed Access","placeholder":"Not Specified","strings":{"types":{"access":"All","foot":"Foot","motor_vehicle":"Motor Vehicles","bicycle":"Bicycles","horse":"Horses"},"options":{"yes":{"title":"Allowed","description":"Access permitted by law; a right of way"},"no":{"title":"Prohibited","description":"Access not permitted to the general public"},"permissive":{"title":"Permissive","description":"Access permitted until such time as the owner revokes the permission"},"private":{"title":"Private","description":"Access permitted only with permission of the owner on an individual basis"},"designated":{"title":"Designated","description":"Access permitted according to signs or specific local laws"},"destination":{"title":"Destination","description":"Access permitted only to reach a destination"},"dismount":{"title":"Dismount","description":"Access permitted but rider must dismount"}}}},"address":{"type":"address","keys":["addr:block_number","addr:city","addr:block_number","addr:conscriptionnumber","addr:county","addr:country","addr:county","addr:district","addr:floor","addr:hamlet","addr:housename","addr:housenumber","addr:neighbourhood","addr:place","addr:postcode","addr:province","addr:quarter","addr:state","addr:street","addr:subdistrict","addr:suburb","addr:unit"],"reference":{"key":"addr"},"icon":"address","universal":true,"label":"Address","strings":{"placeholders":{"block_number":"Block Number","block_number!jp":"Block No.","city":"City","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town","conscriptionnumber":"123","country":"Country","county":"County","county!jp":"District","district":"District","district!vn":"Arrondissement/Town/District","floor":"Floor","hamlet":"Hamlet","housename":"Housename","housenumber":"123","housenumber!jp":"Building No./Lot No.","neighbourhood":"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza","place":"Place","postcode":"Postcode","province":"Province","province!jp":"Prefecture","quarter":"Quarter","quarter!jp":"Ōaza/Machi","state":"State","street":"Street","subdistrict":"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet","suburb":"Suburb","suburb!jp":"Ward","unit":"Unit"}}},"admin_level":{"key":"admin_level","type":"number","label":"Admin Level"},"aerialway":{"key":"aerialway","type":"typeCombo","label":"Type"},"aerialway/access":{"key":"aerialway:access","type":"combo","label":"Access","strings":{"options":{"entry":"Entry","exit":"Exit","both":"Both"}}},"aerialway/bubble":{"key":"aerialway:bubble","type":"check","label":"Bubble"},"aerialway/capacity":{"key":"aerialway:capacity","type":"number","label":"Capacity (per hour)","placeholder":"500, 2500, 5000..."},"aerialway/duration":{"key":"aerialway:duration","type":"number","label":"Duration (minutes)","placeholder":"1, 2, 3..."},"aerialway/heating":{"key":"aerialway:heating","type":"check","label":"Heated"},"aerialway/occupancy":{"key":"aerialway:occupancy","type":"number","label":"Occupancy","placeholder":"2, 4, 8..."},"aerialway/summer/access":{"key":"aerialway:summer:access","type":"combo","label":"Access (summer)","strings":{"options":{"entry":"Entry","exit":"Exit","both":"Both"}}},"aeroway":{"key":"aeroway","type":"typeCombo","label":"Type"},"agrarian":{"key":"agrarian","type":"semiCombo","label":"Products"},"amenity":{"key":"amenity","type":"typeCombo","label":"Type"},"animal_boarding":{"key":"animal_boarding","type":"semiCombo","label":"For Animals"},"animal_breeding":{"key":"animal_breeding","type":"semiCombo","label":"For Animals"},"animal_shelter":{"key":"animal_shelter","type":"semiCombo","label":"For Animals"},"area/highway":{"key":"area:highway","type":"typeCombo","label":"Type"},"artist":{"key":"artist_name","type":"text","label":"Artist"},"artwork_type":{"key":"artwork_type","type":"combo","label":"Type"},"atm":{"key":"atm","type":"check","label":"ATM"},"backrest":{"key":"backrest","type":"check","label":"Backrest"},"barrier":{"key":"barrier","type":"typeCombo","label":"Type"},"bath/open_air":{"key":"bath:open_air","label":"Open Air","type":"check"},"bath/sand_bath":{"key":"bath:sand_bath","label":"Sand Bath","type":"check"},"bath/type":{"key":"bath:type","type":"combo","label":"Specialty","strings":{"options":{"onsen":"Japanese Onsen","foot_bath":"Foot Bath","hot_spring":"Hot Spring"}}},"beauty":{"key":"beauty","type":"combo","label":"Shop Type"},"bench":{"key":"bench","type":"check","label":"Bench"},"bicycle_parking":{"key":"bicycle_parking","type":"combo","label":"Type"},"bin":{"key":"bin","type":"check","label":"Waste Bin"},"blood_components":{"key":"blood:","type":"multiCombo","label":"Blood Components","strings":{"options":{"whole":"whole blood","plasma":"plasma","platelets":"platelets","stemcells":"stem cell samples"}}},"board_type":{"key":"board_type","type":"typeCombo","label":"Type"},"boules":{"key":"boules","type":"typeCombo","label":"Type"},"boundary":{"key":"boundary","type":"combo","label":"Type"},"brand":{"key":"brand","type":"text","label":"Brand"},"brewery":{"key":"brewery","type":"semiCombo","label":"Draft Beers"},"bridge":{"key":"bridge","type":"typeCombo","label":"Type","placeholder":"Default"},"building_area":{"key":"building","type":"combo","default":"yes","geometry":"area","label":"Building"},"building":{"key":"building","type":"combo","label":"Building"},"bunker_type":{"key":"bunker_type","type":"combo","label":"Type"},"cables":{"key":"cables","type":"number","label":"Cables","placeholder":"1, 2, 3..."},"camera/direction":{"key":"camera:direction","type":"number","label":"Direction (Degrees Clockwise)","placeholder":"45, 90, 180, 270"},"camera/mount":{"key":"camera:mount","type":"combo","label":"Camera Mount"},"camera/type":{"key":"camera:type","type":"combo","label":"Camera Type","strings":{"options":{"fixed":"Fixed","panning":"Panning","dome":"Dome"}}},"capacity":{"key":"capacity","type":"number","label":"Capacity","placeholder":"50, 100, 200..."},"castle_type":{"key":"castle_type","type":"combo","label":"Type"},"clothes":{"key":"clothes","type":"semiCombo","label":"Clothes"},"club":{"key":"club","type":"typeCombo","label":"Type"},"collection_times":{"key":"collection_times","type":"text","label":"Collection Times"},"comment":{"key":"comment","type":"textarea","label":"Changeset Comment","placeholder":"Brief description of your contributions (required)"},"communication_multi":{"key":"communication:","type":"multiCombo","label":"Communication Types"},"construction":{"key":"construction","type":"combo","label":"Type"},"contact/webcam":{"key":"contact:webcam","type":"url","icon":"website","label":"Webcam URL","placeholder":"http://example.com/"},"content":{"key":"content","type":"combo","label":"Content"},"country":{"key":"country","type":"combo","label":"Country"},"covered":{"key":"covered","type":"check","label":"Covered"},"craft":{"key":"craft","type":"typeCombo","label":"Type"},"crane/type":{"key":"crane:type","type":"combo","label":"Crane Type","strings":{"options":{"portal_crane":"Portal Crane","floor-mounted_crane":"Floor-mounted Crane","travel_lift":"Travel Lift"}}},"crop":{"key":"crop","type":"semiCombo","label":"Crops"},"crossing":{"key":"crossing","type":"combo","label":"Type"},"cuisine":{"key":"cuisine","type":"semiCombo","label":"Cuisines"},"currency_multi":{"key":"currency:","type":"multiCombo","label":"Currency Types"},"cutting":{"key":"cutting","type":"typeCombo","label":"Type","placeholder":"Default"},"cycle_network":{"key":"cycle_network","type":"networkCombo","label":"Network"},"cycleway":{"keys":["cycleway:left","cycleway:right"],"reference":{"key":"cycleway"},"type":"cycleway","label":"Bike Lanes","placeholder":"none","strings":{"types":{"cycleway:left":"Left side","cycleway:right":"Right side"},"options":{"none":{"title":"None","description":"No bike lane"},"lane":{"title":"Standard bike lane","description":"A bike lane separated from auto traffic by a painted line"},"shared_lane":{"title":"Shared bike lane","description":"A bike lane with no separation from auto traffic"},"track":{"title":"Bike track","description":"A bike lane separated from traffic by a physical barrier"},"share_busway":{"title":"Bike lane shared with bus","description":"A bike lane shared with a bus lane"},"opposite_lane":{"title":"Opposite bike lane","description":"A bike lane that travels in the opposite direction of traffic"},"opposite":{"title":"Contraflow bike lane","description":"A bike lane that travels in both directions on a one-way street"}}}},"dance/style":{"key":"dance:style","type":"semiCombo","label":"Dance Styles"},"date":{"key":"date","type":"check","label":"Date"},"delivery":{"key":"delivery","type":"check","label":"Delivery"},"denomination":{"key":"denomination","type":"combo","label":"Denomination"},"denotation":{"key":"denotation","type":"combo","label":"Denotation"},"description":{"key":"description","type":"textarea","label":"Description","universal":true},"devices":{"key":"devices","type":"number","label":"Devices","placeholder":"1, 2, 3..."},"diaper":{"key":"diaper","type":"combo","label":"Diaper Changing Available","options":["yes","no","room","1","2","3","4","5"]},"direction_cardinal":{"key":"direction","type":"combo","label":"Direction","strings":{"options":{"N":"North","E":"East","S":"South","W":"West","NE":"Northeast","SE":"Southeast","SW":"Southwest","NW":"Northwest","NNE":"North-northeast","ENE":"East-northeast","ESE":"East-southeast","SSE":"South-southeast","SSW":"South-southwest","WSW":"West-southwest","WNW":"West-northwest","NNW":"North-northwest"}}},"direction_clock":{"key":"direction","type":"combo","label":"Direction","strings":{"options":{"clockwise":"Clockwise","anticlockwise":"Counterclockwise"}}},"direction_vertex":{"key":"direction","type":"combo","label":"Direction","strings":{"options":{"forward":"Forward","backward":"Backward","both":"Both / All"}}},"direction":{"key":"direction","type":"number","label":"Direction (Degrees Clockwise)","placeholder":"45, 90, 180, 270"},"dispensing":{"key":"dispensing","type":"check","label":"Dispenses Prescriptions","default":"yes"},"display":{"key":"display","type":"combo","label":"Display","options":["analog","digital","sundial","unorthodox"]},"distance":{"key":"distance","type":"text","label":"Total Distance"},"dock":{"key":"dock","type":"combo","label":"Type"},"drive_through":{"key":"drive_through","type":"check","label":"Drive-Through"},"duration":{"key":"duration","type":"text","label":"Duration","placeholder":"00:00"},"electrified":{"key":"electrified","type":"combo","label":"Electrification","placeholder":"Contact Line, Electrified Rail...","strings":{"options":{"contact_line":"Contact Line","rail":"Electrified Rail","yes":"Yes (unspecified)","no":"No"}}},"elevation":{"key":"ele","type":"number","icon":"elevation","universal":true,"label":"Elevation"},"email":{"key":"email","type":"email","placeholder":"example@example.com","universal":true,"label":"Email"},"embankment":{"key":"embankment","type":"typeCombo","label":"Type","placeholder":"Default"},"emergency":{"key":"emergency","type":"check","label":"Emergency"},"entrance":{"key":"entrance","type":"typeCombo","label":"Type"},"except":{"key":"except","type":"combo","label":"Exceptions"},"faces":{"key":"faces","type":"number","label":"Faces"},"fax":{"key":"fax","type":"tel","label":"Fax","universal":true,"placeholder":"+31 42 123 4567"},"fee":{"key":"fee","type":"check","label":"Fee"},"fence_type":{"key":"fence_type","type":"combo","label":"Type"},"fire_hydrant/position":{"key":"fire_hydrant:position","type":"combo","label":"Position","strings":{"options":{"lane":"Lane","parking_lot":"Parking Lot","sidewalk":"Sidewalk","green":"Green"}}},"fire_hydrant/type":{"key":"fire_hydrant:type","type":"combo","label":"Type","strings":{"options":{"pillar":"Pillar/Aboveground","underground":"Underground","wall":"Wall","pond":"Pond"}}},"fitness_station":{"key":"fitness_station","type":"typeCombo","label":"Equipment Type"},"fixme":{"key":"fixme","type":"textarea","label":"Fix Me","universal":true},"ford":{"key":"ford","type":"typeCombo","label":"Type","placeholder":"Default"},"frequency":{"key":"frequency","type":"combo","label":"Operating Frequency"},"fuel_multi":{"key":"fuel:","type":"multiCombo","label":"Fuel Types"},"fuel":{"key":"fuel","type":"combo","label":"Fuel"},"gauge":{"key":"gauge","type":"combo","label":"Gauge"},"gender":{"type":"radio","keys":["male","female","unisex"],"label":"Gender","placeholder":"Unknown","strings":{"options":{"male":"Male","female":"Female","unisex":"Unisex"}}},"generator/method":{"key":"generator:method","type":"combo","label":"Method"},"generator/output/electricity":{"key":"generator:output:electricity","type":"text","label":"Power Output","placeholder":"50 MW, 100 MW, 200 MW..."},"generator/source":{"key":"generator:source","type":"combo","label":"Source"},"generator/type":{"key":"generator:type","type":"combo","label":"Type"},"government":{"key":"government","type":"typeCombo","label":"Type"},"grape_variety":{"key":"grape_variety","type":"semiCombo","label":"Grape Varieties"},"handicap":{"key":"handicap","type":"number","label":"Handicap","placeholder":"1-18"},"handrail":{"key":"handrail","type":"check","label":"Handrail"},"hashtags":{"key":"hashtags","type":"semiCombo","label":"Suggested Hashtags","placeholder":"#example"},"healthcare":{"key":"healthcare","type":"typeCombo","label":"Type"},"healthcare/speciality":{"key":"healthcare:speciality","type":"semiCombo","reference":{"key":"healthcare"},"label":"Specialties"},"height":{"key":"height","type":"number","label":"Height (Meters)"},"highway":{"key":"highway","type":"typeCombo","label":"Type"},"historic":{"key":"historic","type":"typeCombo","label":"Type"},"historic/civilization":{"key":"historic:civilization","type":"combo","label":"Historic Civilization"},"hoops":{"key":"hoops","type":"number","label":"Hoops","placeholder":"1, 2, 4..."},"horse_dressage":{"key":"sport","type":"check","label":"Dressage Riding","strings":{"options":{"undefined":"No","equestrian":"Yes"}},"reference":{"key":"sport","value":"equestrian"}},"horse_riding":{"key":"leisure","type":"check","label":"Horseback Riding","strings":{"options":{"undefined":"No","horse_riding":"Yes"}},"reference":{"key":"leisure","value":"horse_riding"}},"horse_scale":{"key":"horse_scale","type":"combo","label":"Horseback Riding Difficulty","placeholder":"Difficult, Dangerous...","strings":{"options":{"common":"Easy: No problems or difficulties. (default)","demanding":"Use with caution: Uneven way, occasional difficult passages.","difficult":"Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.","critical":"Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.","dangerous":"Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.","impossible":"Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life."}}},"horse_stables":{"key":"amenity","type":"check","label":"Riding Stable","strings":{"options":{"undefined":"No","stables":"Yes"}},"reference":{"key":"amenity","value":"stables"}},"iata":{"key":"iata","type":"text","label":"IATA"},"icao":{"key":"icao","type":"text","label":"ICAO"},"incline_steps":{"key":"incline","type":"combo","label":"Incline","strings":{"options":{"up":"Up","down":"Down"}}},"incline":{"key":"incline","type":"combo","label":"Incline"},"indoor":{"key":"indoor","type":"check","label":"Indoor"},"industrial":{"key":"industrial","type":"combo","label":"Type"},"information":{"key":"information","type":"typeCombo","label":"Type"},"inscription":{"key":"inscription","type":"textarea","label":"Inscription"},"intermittent":{"key":"intermittent","type":"check","label":"Intermittent"},"internet_access":{"key":"internet_access","type":"combo","label":"Internet Access","strings":{"options":{"yes":"Yes","no":"No","wlan":"Wifi","wired":"Wired","terminal":"Terminal"}}},"internet_access/fee":{"key":"internet_access:fee","type":"check","label":"Internet Access Fee"},"internet_access/ssid":{"key":"internet_access:ssid","type":"text","label":"SSID (Network Name)"},"kerb":{"key":"kerb","type":"combo","label":"Curb"},"label":{"key":"label","type":"textarea","label":"Label"},"lamp_type":{"key":"lamp_type","type":"combo","label":"Type"},"landuse":{"key":"landuse","type":"typeCombo","label":"Type"},"lanes":{"key":"lanes","type":"number","label":"Lanes","placeholder":"1, 2, 3..."},"layer":{"key":"layer","type":"number","label":"Layer","placeholder":"0"},"leaf_cycle_singular":{"key":"leaf_cycle","type":"combo","label":"Leaf Cycle","strings":{"options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous"}}},"leaf_cycle":{"key":"leaf_cycle","type":"combo","label":"Leaf Cycle","strings":{"options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous","mixed":"Mixed"}}},"leaf_type_singular":{"key":"leaf_type","type":"combo","label":"Leaf Type","strings":{"options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","leafless":"Leafless"}}},"leaf_type":{"key":"leaf_type","type":"combo","label":"Leaf Type","strings":{"options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","mixed":"Mixed","leafless":"Leafless"}}},"leisure":{"key":"leisure","type":"typeCombo","label":"Type"},"length":{"key":"length","type":"number","label":"Length (Meters)"},"level":{"key":"level","type":"combo","label":"Level","universal":true},"levels":{"key":"building:levels","type":"number","label":"Levels","placeholder":"2, 4, 6..."},"lit":{"key":"lit","type":"check","label":"Lit"},"location":{"key":"location","type":"combo","label":"Location"},"man_made":{"key":"man_made","type":"typeCombo","label":"Type"},"manhole":{"key":"manhole","type":"typeCombo","label":"Type"},"map_size":{"key":"map_size","type":"typeCombo","label":"Coverage"},"map_type":{"key":"map_type","type":"typeCombo","label":"Type"},"maxheight":{"key":"maxheight","type":"combo","label":"Max Height","placeholder":"4, 4.5, 5, 14'0\", 14'6\", 15'0\"","snake_case":false},"maxspeed":{"key":"maxspeed","type":"maxspeed","label":"Speed Limit","placeholder":"40, 50, 60..."},"maxspeed/advisory":{"key":"maxspeed:advisory","type":"maxspeed","label":"Advisory Speed Limit","placeholder":"40, 50, 60..."},"maxstay":{"key":"maxstay","type":"combo","label":"Max Stay","options":["15 min","30 min","45 min","1 hr","1.5 hr","2 hr","2.5 hr","3 hr","4 hr","1 day","2 day"],"snake_case":false},"maxweight":{"key":"maxweight","type":"combo","label":"Max Weight","snake_case":false},"memorial":{"key":"memorial","type":"typeCombo","label":"Type"},"monitoring_multi":{"key":"monitoring:","type":"multiCombo","label":"Monitoring"},"mtb/scale":{"key":"mtb:scale","type":"combo","label":"Mountain Biking Difficulty","placeholder":"0, 1, 2, 3...","strings":{"options":{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}}},"mtb/scale/imba":{"key":"mtb:scale:imba","type":"combo","label":"IMBA Trail Difficulty","placeholder":"Easy, Medium, Difficult...","strings":{"options":{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}}},"mtb/scale/uphill":{"key":"mtb:scale:uphill","type":"combo","label":"Mountain Biking Uphill Difficulty","placeholder":"0, 1, 2, 3...","strings":{"options":{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}}},"name":{"key":"name","type":"localized","label":"Name","universal":true,"placeholder":"Common name (if any)"},"natural":{"key":"natural","type":"typeCombo","label":"Natural"},"network_bicycle":{"key":"network","type":"combo","label":"Network Type","placeholder":"Local, Regional, National, International","strings":{"options":{"lcn":"Local","rcn":"Regional","ncn":"National","icn":"International"}}},"network_foot":{"key":"network","type":"combo","label":"Network Type","placeholder":"Local, Regional, National, International","strings":{"options":{"lwn":"Local","rwn":"Regional","nwn":"National","iwn":"International"}}},"network_horse":{"key":"network","type":"combo","label":"Network Type","placeholder":"Local, Regional, National, International","strings":{"options":{"lhn":"Local","rhn":"Regional","nhn":"National","ihn":"International"}}},"network_road":{"key":"network","type":"networkCombo","label":"Network"},"network":{"key":"network","type":"text","label":"Network"},"note":{"key":"note","type":"textarea","universal":true,"icon":"note","label":"Note"},"office":{"key":"office","type":"typeCombo","label":"Type"},"oneway_yes":{"key":"oneway","type":"onewayCheck","label":"One Way","strings":{"options":{"undefined":"Assumed to be Yes","yes":"Yes","no":"No","reversible":"Reversible","alternating":"Alternating"}}},"oneway":{"key":"oneway","type":"onewayCheck","label":"One Way","strings":{"options":{"undefined":"Assumed to be No","yes":"Yes","no":"No","reversible":"Reversible","alternating":"Alternating"}}},"opening_hours":{"key":"opening_hours","type":"combo","label":"Hours","snake_case":false},"operator":{"key":"operator","type":"text","label":"Operator"},"outdoor_seating":{"key":"outdoor_seating","type":"check","label":"Outdoor Seating"},"par":{"key":"par","type":"number","label":"Par","placeholder":"3, 4, 5..."},"park_ride":{"key":"park_ride","type":"check","label":"Park and Ride"},"parking":{"key":"parking","type":"combo","label":"Type","strings":{"options":{"surface":"Surface","multi-storey":"Multilevel","underground":"Underground","sheds":"Sheds","carports":"Carports","garage_boxes":"Garage Boxes","lane":"Roadside Lane"}}},"payment_multi":{"key":"payment:","type":"multiCombo","label":"Payment Types","universal":true},"phases":{"key":"phases","type":"number","label":"Phases","placeholder":"1, 2, 3..."},"phone":{"key":"phone","type":"tel","icon":"telephone","universal":true,"label":"Phone","placeholder":"+31 42 123 4567"},"piste/difficulty":{"key":"piste:difficulty","type":"combo","label":"Difficulty","placeholder":"Easy, Intermediate, Advanced...","strings":{"options":{"novice":"Novice (instructional)","easy":"Easy (green circle)","intermediate":"Intermediate (blue square)","advanced":"Advanced (black diamond)","expert":"Expert (double black diamond)","freeride":"Freeride (off-piste)","extreme":"Extreme (climbing equipment required)"}}},"piste/grooming":{"key":"piste:grooming","type":"combo","label":"Grooming","strings":{"options":{"classic":"Classic","mogul":"Mogul","backcountry":"Backcountry","classic+skating":"Classic and Skating","scooter":"Scooter/Snowmobile","skating":"Skating"}}},"piste/type":{"key":"piste:type","type":"typeCombo","label":"Type","strings":{"options":{"downhill":"Downhill","nordic":"Nordic","skitour":"Skitour","sled":"Sled","hike":"Hike","sleigh":"Sleigh","ice_skate":"Ice Skate","snow_park":"Snow Park","playground":"Playground"}}},"place":{"key":"place","type":"typeCombo","label":"Type"},"plant":{"key":"plant","type":"combo","label":"Plant"},"plant/output/electricity":{"key":"plant:output:electricity","type":"text","label":"Power Output","placeholder":"500 MW, 1000 MW, 2000 MW..."},"playground/baby":{"key":"baby","type":"check","label":"Baby Seat"},"playground/max_age":{"key":"max_age","type":"number","label":"Maximum Age"},"playground/min_age":{"key":"min_age","type":"number","label":"Minimum Age"},"population":{"key":"population","type":"text","label":"Population"},"power_supply":{"key":"power_supply","type":"check","label":"Power Supply"},"power":{"key":"power","type":"typeCombo","label":"Type"},"produce":{"key":"produce","type":"semiCombo","label":"Produce"},"product":{"key":"product","type":"semiCombo","label":"Products"},"railway":{"key":"railway","type":"typeCombo","label":"Type"},"railway/position":{"key":"railway:position","type":"text","placeholder":"Distance to one decimal (123.4)","label":"Milestone Position"},"railway/signal/direction":{"key":"railway:signal:direction","type":"combo","label":"Direction","strings":{"options":{"forward":"Forward","backward":"Backward","both":"Both / All"}}},"rating":{"key":"rating","type":"combo","label":"Power Rating","snake_case":false},"recycling_accepts":{"key":"recycling:","type":"multiCombo","label":"Accepts"},"ref_aeroway_gate":{"key":"ref","type":"text","label":"Gate Number"},"ref_golf_hole":{"key":"ref","type":"text","label":"Hole Number","placeholder":"1-18"},"ref_highway_junction":{"key":"ref","type":"text","label":"Junction Number"},"ref_platform":{"key":"ref","type":"text","label":"Platform Number"},"ref_road_number":{"key":"ref","type":"text","label":"Road Number"},"ref_route":{"key":"ref","type":"text","label":"Route Number"},"ref_runway":{"key":"ref","type":"text","label":"Runway Number","placeholder":"e.g. 01L/19R"},"ref_stop_position":{"key":"ref","type":"text","label":"Stop Number"},"ref_taxiway":{"key":"ref","type":"text","label":"Taxiway Name","placeholder":"e.g. A5"},"ref":{"key":"ref","type":"text","label":"Reference Code"},"ref/isil":{"key":"ref:isil","type":"text","label":"ISIL Code"},"relation":{"key":"type","type":"combo","label":"Type"},"religion":{"key":"religion","type":"combo","label":"Religion"},"restriction":{"key":"restriction","type":"combo","label":"Type"},"restrictions":{"type":"restrictions","geometry":"vertex","icon":"restrictions","reference":{"rtype":"restriction"},"label":"Turn Restrictions"},"rooms":{"key":"rooms","type":"number","label":"Rooms"},"route_master":{"key":"route_master","type":"combo","label":"Type"},"route":{"key":"route","type":"combo","label":"Type"},"sac_scale":{"key":"sac_scale","type":"combo","label":"Hiking Difficulty","placeholder":"Mountain Hiking, Alpine Hiking...","strings":{"options":{"hiking":"T1: Hiking","mountain_hiking":"T2: Mountain Hiking","demanding_mountain_hiking":"T3: Demanding Mountain Hiking","alpine_hiking":"T4: Alpine Hiking","demanding_alpine_hiking":"T5: Demanding Alpine Hiking","difficult_alpine_hiking":"T6: Difficult Alpine Hiking"}}},"sanitary_dump_station":{"key":"sanitary_dump_station","type":"check","label":"Toilet Disposal"},"seasonal":{"key":"seasonal","type":"check","label":"Seasonal"},"second_hand":{"key":"second_hand","type":"combo","label":"Sells Used","placeholder":"Yes, No, Only","strings":{"options":{"yes":"Yes","no":"No","only":"Only"}}},"service_rail":{"key":"service","type":"combo","label":"Service Type","strings":{"options":{"spur":"Spur","yard":"Yard","siding":"Siding","crossover":"Crossover"}}},"service_times":{"key":"service_times","type":"text","label":"Service Times"},"service":{"key":"service","type":"combo","label":"Type","options":["parking_aisle","driveway","alley","emergency_access","drive-through"]},"service/bicycle":{"key":"service:bicycle:","type":"multiCombo","label":"Services"},"service/vehicle":{"key":"service:vehicle:","type":"multiCombo","label":"Services"},"shelter_type":{"key":"shelter_type","type":"combo","label":"Type"},"shelter":{"key":"shelter","type":"check","label":"Shelter"},"shop":{"key":"shop","type":"typeCombo","label":"Type"},"site":{"key":"site","type":"combo","label":"Type"},"smoking":{"key":"smoking","type":"combo","label":"Smoking","placeholder":"No, Separated, Yes...","strings":{"options":{"no":"No smoking anywhere","separated":"In smoking areas, not physically isolated","isolated":"In smoking areas, physically isolated","outside":"Allowed outside","yes":"Allowed everywhere","dedicated":"Dedicated to smokers (e.g. smokers' club)"}}},"smoothness":{"key":"smoothness","type":"combo","label":"Smoothness","placeholder":"Thin Rollers, Wheels, Off-Road...","strings":{"options":{"excellent":"Thin Rollers: rollerblade, skateboard","good":"Thin Wheels: racing bike","intermediate":"Wheels: city bike, wheelchair, scooter","bad":"Robust Wheels: trekking bike, car, rickshaw","very_bad":"High Clearance: light duty off-road vehicle","horrible":"Off-Road: heavy duty off-road vehicle","very_horrible":"Specialized off-road: tractor, ATV","impassable":"Impassable / No wheeled vehicle"}}},"social_facility_for":{"key":"social_facility:for","type":"combo","label":"People Served"},"social_facility":{"key":"social_facility","type":"combo","label":"Type"},"source":{"key":"source","type":"semiCombo","icon":"source","universal":true,"label":"Sources","snake_case":false,"caseSensitive":true,"options":["survey","local knowledge","gps","aerial imagery","streetlevel imagery"]},"sport_ice":{"key":"sport","type":"semiCombo","label":"Sports","options":["skating","hockey","multi","curling","ice_stock"]},"sport_racing_motor":{"key":"sport","type":"semiCombo","label":"Sports","options":["motor","karting","motocross"]},"sport_racing_nonmotor":{"key":"sport","type":"semiCombo","label":"Sports","options":["bmx","cycling","dog_racing","horse_racing","running"]},"sport":{"key":"sport","type":"semiCombo","label":"Sports"},"stars":{"key":"stars","type":"number","label":"Stars"},"start_date":{"key":"start_date","type":"text","universal":true,"label":"Start Date"},"step_count":{"key":"step_count","type":"number","label":"Number of Steps"},"stop":{"key":"stop","type":"combo","label":"Stop Type","strings":{"options":{"all":"All Ways","minor":"Minor Road"}}},"structure_waterway":{"type":"structureRadio","keys":["tunnel"],"label":"Structure","placeholder":"Unknown","strings":{"options":{"tunnel":"Tunnel"}}},"structure":{"type":"structureRadio","keys":["bridge","tunnel","embankment","cutting","ford"],"label":"Structure","placeholder":"Unknown","strings":{"options":{"bridge":"Bridge","tunnel":"Tunnel","embankment":"Embankment","cutting":"Cutting","ford":"Ford"}}},"studio":{"key":"studio","type":"combo","label":"Type"},"substance":{"key":"substance","type":"combo","label":"Substance"},"substation":{"key":"substation","type":"typeCombo","label":"Type"},"supervised":{"key":"supervised","type":"check","label":"Supervised"},"support":{"key":"support","type":"combo","label":"Support"},"surface":{"key":"surface","type":"combo","label":"Surface"},"surveillance":{"key":"surveillance","type":"combo","label":"Surveillance Kind"},"surveillance/type":{"key":"surveillance:type","type":"combo","label":"Surveillance Type","strings":{"options":{"camera":"Camera","guard":"Guard","ALPR":"Automatic License Plate Reader"}}},"surveillance/zone":{"key":"surveillance:zone","type":"combo","label":"Surveillance Zone"},"switch":{"key":"switch","type":"combo","label":"Type","strings":{"options":{"mechanical":"Mechanical","circuit_breaker":"Circuit Breaker","disconnector":"Disconnector","earthing":"Earthing"}}},"tactile_paving":{"key":"tactile_paving","type":"check","label":"Tactile Paving"},"takeaway":{"key":"takeaway","type":"combo","label":"Takeaway","placeholder":"Yes, No, Takeaway Only...","strings":{"options":{"yes":"Yes","no":"No","only":"Takeaway Only"}}},"toilets/disposal":{"key":"toilets:disposal","type":"combo","label":"Disposal","strings":{"options":{"flush":"Flush","pitlatrine":"Pit/Latrine","chemical":"Chemical","bucket":"Bucket"}}},"toll":{"key":"toll","type":"check","label":"Toll"},"tomb":{"key":"tomb","type":"typeCombo","label":"Type"},"tourism_attraction":{"key":"tourism","default":"attraction","type":"typeCombo","universal":true,"label":"Tourism"},"tourism":{"key":"tourism","type":"typeCombo","label":"Type"},"tower/construction":{"key":"tower:construction","type":"combo","label":"Construction","placeholder":"Guyed, Lattice, Concealed, ..."},"tower/type":{"key":"tower:type","type":"combo","label":"Type"},"tracktype":{"key":"tracktype","type":"combo","label":"Track Type","placeholder":"Solid, Mostly Solid, Soft...","strings":{"options":{"grade1":"Solid: paved or heavily compacted hardcore surface","grade2":"Mostly Solid: gravel/rock with some soft material mixed in","grade3":"Even mixture of hard and soft materials","grade4":"Mostly Soft: soil/sand/grass with some hard material mixed in","grade5":"Soft: soil/sand/grass"}}},"trade":{"key":"trade","type":"typeCombo","label":"Type"},"traffic_calming":{"key":"traffic_calming","type":"typeCombo","label":"Type"},"traffic_signals":{"key":"traffic_signals","type":"combo","label":"Type","default":"signal"},"traffic_signals/direction":{"key":"traffic_signals:direction","type":"combo","label":"Direction","strings":{"options":{"forward":"Forward","backward":"Backward","both":"Both / All"}}},"trail_visibility":{"key":"trail_visibility","type":"combo","label":"Trail Visibility","placeholder":"Excellent, Good, Bad...","strings":{"options":{"excellent":"Excellent: unambiguous path or markers everywhere","good":"Good: markers visible, sometimes require searching","intermediate":"Intermediate: few markers, path mostly visible","bad":"Bad: no markers, path sometimes invisible/pathless","horrible":"Horrible: often pathless, some orientation skills required","no":"No: pathless, excellent orientation skills required"}}},"transformer":{"key":"transformer","type":"combo","label":"Type","strings":{"options":{"distribution":"Distribution","generator":"Generator","converter":"Converter","traction":"Traction","auto":"Autotransformer","phase_angle_regulator":"Phase Angle Regulator","auxiliary":"Auxiliary","yes":"Unknown"}}},"trees":{"key":"trees","type":"semiCombo","label":"Trees"},"tunnel":{"key":"tunnel","type":"typeCombo","label":"Type","placeholder":"Default"},"usage_rail":{"key":"usage","type":"combo","label":"Usage Type","strings":{"options":{"main":"Main","branch":"Branch","industrial":"Industrial","military":"Military","test":"Test","tourism":"Tourism"}}},"vending":{"key":"vending","type":"semiCombo","label":"Types of Goods"},"visibility":{"key":"visibility","type":"combo","label":"Visibility","strings":{"options":{"house":"Up to 5m (16ft)","street":"5 to 20m (16 to 65ft)","area":"Over 20m (65ft)"}}},"volcano/status":{"key":"volcano:status","type":"combo","label":"Volcano Status","strings":{"options":{"active":"Active","dormant":"Dormant","extinct":"Extinct"}}},"volcano/type":{"key":"volcano:type","type":"combo","label":"Volcano Type","strings":{"options":{"stratovolcano":"Stratovolcano","shield":"Shield","scoria":"Scoria"}}},"voltage":{"key":"voltage","type":"combo","label":"Voltage"},"voltage/primary":{"key":"voltage:primary","type":"combo","label":"Primary Voltage"},"voltage/secondary":{"key":"voltage:secondary","type":"combo","label":"Secondary Voltage"},"voltage/tertiary":{"key":"voltage:tertiary","type":"combo","label":"Tertiary Voltage"},"wall":{"key":"wall","type":"combo","label":"Type"},"water_point":{"key":"water_point","type":"check","label":"Water Point"},"water":{"key":"water","type":"combo","label":"Type"},"waterway":{"key":"waterway","type":"typeCombo","label":"Type"},"website":{"key":"website","type":"url","icon":"website","placeholder":"http://example.com/","universal":true,"label":"Website"},"wetland":{"key":"wetland","type":"combo","label":"Type"},"wheelchair":{"key":"wheelchair","type":"radio","options":["yes","limited","no"],"icon":"wheelchair","universal":true,"label":"Wheelchair Access"},"wholesale":{"key":"wholesale","type":"typeCombo","label":"Wholesale"},"width":{"key":"width","type":"number","label":"Width (Meters)"},"wikipedia":{"key":"wikipedia","keys":["wikipedia","wikidata"],"type":"wikipedia","icon":"wikipedia","universal":true,"label":"Wikipedia"},"windings":{"key":"windings","type":"number","label":"Windings","placeholder":"1, 2, 3..."},"windings/configuration":{"key":"windings:configuration","type":"combo","label":"Windings Configuration","strings":{"options":{"star":"Star / Wye","delta":"Delta","open-delta":"Open Delta","zigzag":"Zig Zag","open":"Open","scott":"Scott","leblanc":"Leblanc"}}}}; + + var all = ["aerialway","airfield","airport","alcohol-shop","america-football","amusement-park","aquarium","art-gallery","attraction","bakery","bank","bar","barrier","baseball","basketball","bbq","beer","bicycle","bicycle-share","blood-bank","buddhism","building","building-alt1","bus","cafe","campsite","car","castle","cemetery","cinema","circle","circle-stroked","city","clothing-store","college","commercial","cricket","cross","dam","danger","defibrillator","dentist","doctor","dog-park","drinking-water","embassy","emergency-phone","entrance","entrance-alt1","farm","fast-food","fence","ferry","fire-station","florist","fuel","gaming","garden","garden-center","gift","golf","grocery","hairdresser","harbor","heart","heliport","home","horse-riding","hospital","ice-cream","industry","information","karaoke","landmark","landuse","laundry","library","lighthouse","lodging","logging","marker","marker-stroked","mobile-phone","monument","mountain","museum","music","natural","park","park-alt1","parking","parking-garage","pharmacy","picnic-site","pitch","place-of-worship","playground","police","post","prison","rail","rail-light","rail-metro","ranger-station","recycling","religious-christian","religious-jewish","religious-muslim","residential-community","restaurant","roadblock","rocket","school","scooter","shelter","shop","skiing","slaughterhouse","snowmobile","soccer","square","square-stroked","stadium","star","star-stroked","suitcase","sushi","swimming","teahouse","telephone","tennis","theatre","toilet","town","town-hall","triangle","triangle-stroked","veterinary","village","volcano","warehouse","waste-basket","water","wetland","wheelchair","zoo"]; + var all$1 = { + all: all + }; + + var all$2 = /*#__PURE__*/Object.freeze({ + all: all, + default: all$1 + }); + + var Airport = ["airfield","airport","heliport","rocket"]; + var Dining = ["bakery","bar","beer","cafe","fast-food","ice-cream","restaurant"]; + var Education = ["college","school"]; + var General = ["alcohol-shop","amusement-park","aquarium","art-gallery","attraction","bank","bicycle","bicycle-share","car","castle","cinema","circle","circle-stroked","clothing-store","drinking-water","embassy","fire-station","fuel","grocery","harbor","information","laundry","library","lodging","marker","monument","museum","music","place-of-worship","police","post","prison","religious-christian","religious-jewish","religious-muslim","shop","stadium","star","suitcase","swimming","theatre","toilet","town-hall","triangle","triangle-stroked","veterinary"]; + var Health = ["dentist","doctor","hospital","pharmacy"]; + var Outdoors = ["campsite","cemetery","dog-park","garden","golf","park","picnic-site","playground","zoo"]; + var Transit = ["bus","ferry"]; + var streets = { + Airport: Airport, + Dining: Dining, + Education: Education, + General: General, + Health: Health, + Outdoors: Outdoors, + Transit: Transit, + "Mountain peak": ["mountain","volcano"], + "Rail station": ["entrance","rail","rail-light","rail-metro"] + }; + + var streets$1 = /*#__PURE__*/Object.freeze({ + Airport: Airport, + Dining: Dining, + Education: Education, + General: General, + Health: Health, + Outdoors: Outdoors, + Transit: Transit, + default: streets + }); + + var require$$0$1 = ( all$2 && all$1 ) || all$2; + + var require$$1$1 = ( streets$1 && streets ) || streets$1; + + var maki = { + layouts: { + all: require$$0$1, + streets: require$$1$1 + } + }; + + var quickselect_1 = quickselect; + var default_1 = quickselect; + + function quickselect(arr, k, left, right, compare) { + quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare); + } + function quickselectStep(arr, k, left, right, compare) { + + while (right > left) { + if (right - left > 600) { + var n = right - left + 1; + var m = k - left + 1; + var z = Math.log(n); + var s = 0.5 * Math.exp(2 * z / 3); + var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1); + var newLeft = Math.max(left, Math.floor(k - m * s / n + sd)); + var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd)); + quickselectStep(arr, k, newLeft, newRight, compare); + } + + var t = arr[k]; + var i = left; + var j = right; + + swap(arr, left, k); + if (compare(arr[right], t) > 0) swap(arr, left, right); + + while (i < j) { + swap(arr, i, j); + i++; + j--; + while (compare(arr[i], t) < 0) i++; + while (compare(arr[j], t) > 0) j--; + } + + if (compare(arr[left], t) === 0) swap(arr, left, j); + else { + j++; + swap(arr, j, right); + } + + if (j <= k) left = j + 1; + if (k <= j) right = j - 1; + } + } + + function swap(arr, i, j) { + var tmp = arr[i]; + arr[i] = arr[j]; + arr[j] = tmp; + } + + function defaultCompare(a, b) { + return a < b ? -1 : a > b ? 1 : 0; + } + quickselect_1.default = default_1; + + var quickselect$1 = /*#__PURE__*/Object.freeze({ + default: quickselect_1, + __moduleExports: quickselect_1 + }); + + var quickselect$2 = ( quickselect$1 && quickselect_1 ) || quickselect$1; + + var rbush_1 = rbush; + var default_1$1 = rbush; + + + + function rbush(maxEntries, format) { + if (!(this instanceof rbush)) return new rbush(maxEntries, format); + + // max entries in a node is 9 by default; min node fill is 40% for best performance + this._maxEntries = Math.max(4, maxEntries || 9); + this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4)); + + if (format) { + this._initFormat(format); + } + + this.clear(); + } + + rbush.prototype = { + + all: function () { + return this._all(this.data, []); + }, + + search: function (bbox) { + + var node = this.data, + result = [], + toBBox = this.toBBox; + + if (!intersects$1(bbox, node)) return result; + + var nodesToSearch = [], + i, len, child, childBBox; + + while (node) { + for (i = 0, len = node.children.length; i < len; i++) { + + child = node.children[i]; + childBBox = node.leaf ? toBBox(child) : child; + + if (intersects$1(bbox, childBBox)) { + if (node.leaf) result.push(child); + else if (contains$2(bbox, childBBox)) this._all(child, result); + else nodesToSearch.push(child); + } + } + node = nodesToSearch.pop(); + } + + return result; + }, + + collides: function (bbox) { + + var node = this.data, + toBBox = this.toBBox; + + if (!intersects$1(bbox, node)) return false; + + var nodesToSearch = [], + i, len, child, childBBox; + + while (node) { + for (i = 0, len = node.children.length; i < len; i++) { + + child = node.children[i]; + childBBox = node.leaf ? toBBox(child) : child; + + if (intersects$1(bbox, childBBox)) { + if (node.leaf || contains$2(bbox, childBBox)) return true; + nodesToSearch.push(child); + } + } + node = nodesToSearch.pop(); + } + + return false; + }, + + load: function (data) { + if (!(data && data.length)) return this; + + if (data.length < this._minEntries) { + for (var i = 0, len = data.length; i < len; i++) { + this.insert(data[i]); + } + return this; + } + + // recursively build the tree with the given data from scratch using OMT algorithm + var node = this._build(data.slice(), 0, data.length - 1, 0); + + if (!this.data.children.length) { + // save as is if tree is empty + this.data = node; + + } else if (this.data.height === node.height) { + // split root if trees have the same height + this._splitRoot(this.data, node); + + } else { + if (this.data.height < node.height) { + // swap trees if inserted one is bigger + var tmpNode = this.data; + this.data = node; + node = tmpNode; + } + + // insert the small tree into the large tree at appropriate level + this._insert(node, this.data.height - node.height - 1, true); + } + + return this; + }, + + insert: function (item) { + if (item) this._insert(item, this.data.height - 1); + return this; + }, + + clear: function () { + this.data = createNode([]); + return this; + }, + + remove: function (item, equalsFn) { + if (!item) return this; + + var node = this.data, + bbox = this.toBBox(item), + path = [], + indexes = [], + i, parent, index, goingUp; + + // depth-first iterative tree traversal + while (node || path.length) { + + if (!node) { // go up + node = path.pop(); + parent = path[path.length - 1]; + i = indexes.pop(); + goingUp = true; + } + + if (node.leaf) { // check current node + index = findItem(item, node.children, equalsFn); + + if (index !== -1) { + // item found, remove the item and condense tree upwards + node.children.splice(index, 1); + path.push(node); + this._condense(path); + return this; + } + } + + if (!goingUp && !node.leaf && contains$2(node, bbox)) { // go down + path.push(node); + indexes.push(i); + i = 0; + parent = node; + node = node.children[0]; + + } else if (parent) { // go right + i++; + node = parent.children[i]; + goingUp = false; + + } else node = null; // nothing found + } + + return this; + }, + + toBBox: function (item) { return item; }, + + compareMinX: compareNodeMinX, + compareMinY: compareNodeMinY, + + toJSON: function () { return this.data; }, + + fromJSON: function (data) { + this.data = data; + return this; + }, + + _all: function (node, result) { + var nodesToSearch = []; + while (node) { + if (node.leaf) result.push.apply(result, node.children); + else nodesToSearch.push.apply(nodesToSearch, node.children); + + node = nodesToSearch.pop(); + } + return result; + }, + + _build: function (items, left, right, height) { + + var N = right - left + 1, + M = this._maxEntries, + node; + + if (N <= M) { + // reached leaf level; return leaf + node = createNode(items.slice(left, right + 1)); + calcBBox(node, this.toBBox); + return node; + } + + if (!height) { + // target height of the bulk-loaded tree + height = Math.ceil(Math.log(N) / Math.log(M)); + + // target number of root entries to maximize storage utilization + M = Math.ceil(N / Math.pow(M, height - 1)); + } + + node = createNode([]); + node.leaf = false; + node.height = height; + + // split the items into M mostly square tiles + + var N2 = Math.ceil(N / M), + N1 = N2 * Math.ceil(Math.sqrt(M)), + i, j, right2, right3; + + multiSelect(items, left, right, N1, this.compareMinX); + + for (i = left; i <= right; i += N1) { + + right2 = Math.min(i + N1 - 1, right); + + multiSelect(items, i, right2, N2, this.compareMinY); + + for (j = i; j <= right2; j += N2) { + + right3 = Math.min(j + N2 - 1, right2); + + // pack each entry recursively + node.children.push(this._build(items, j, right3, height - 1)); + } + } + + calcBBox(node, this.toBBox); + + return node; + }, + + _chooseSubtree: function (bbox, node, level, path) { + + var i, len, child, targetNode, area, enlargement, minArea, minEnlargement; + + while (true) { + path.push(node); + + if (node.leaf || path.length - 1 === level) break; + + minArea = minEnlargement = Infinity; + + for (i = 0, len = node.children.length; i < len; i++) { + child = node.children[i]; + area = bboxArea(child); + enlargement = enlargedArea(bbox, child) - area; + + // choose entry with the least area enlargement + if (enlargement < minEnlargement) { + minEnlargement = enlargement; + minArea = area < minArea ? area : minArea; + targetNode = child; + + } else if (enlargement === minEnlargement) { + // otherwise choose one with the smallest area + if (area < minArea) { + minArea = area; + targetNode = child; + } + } + } + + node = targetNode || node.children[0]; + } + + return node; + }, + + _insert: function (item, level, isNode) { + + var toBBox = this.toBBox, + bbox = isNode ? item : toBBox(item), + insertPath = []; + + // find the best node for accommodating the item, saving all nodes along the path too + var node = this._chooseSubtree(bbox, this.data, level, insertPath); + + // put the item into the node + node.children.push(item); + extend$1(node, bbox); + + // split on node overflow; propagate upwards if necessary + while (level >= 0) { + if (insertPath[level].children.length > this._maxEntries) { + this._split(insertPath, level); + level--; + } else break; + } + + // adjust bboxes along the insertion path + this._adjustParentBBoxes(bbox, insertPath, level); + }, + + // split overflowed node into two + _split: function (insertPath, level) { + + var node = insertPath[level], + M = node.children.length, + m = this._minEntries; + + this._chooseSplitAxis(node, m, M); + + var splitIndex = this._chooseSplitIndex(node, m, M); + + var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex)); + newNode.height = node.height; + newNode.leaf = node.leaf; + + calcBBox(node, this.toBBox); + calcBBox(newNode, this.toBBox); + + if (level) insertPath[level - 1].children.push(newNode); + else this._splitRoot(node, newNode); + }, + + _splitRoot: function (node, newNode) { + // split root node + this.data = createNode([node, newNode]); + this.data.height = node.height + 1; + this.data.leaf = false; + calcBBox(this.data, this.toBBox); + }, + + _chooseSplitIndex: function (node, m, M) { + + var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index; + + minOverlap = minArea = Infinity; + + for (i = m; i <= M - m; i++) { + bbox1 = distBBox(node, 0, i, this.toBBox); + bbox2 = distBBox(node, i, M, this.toBBox); + + overlap = intersectionArea(bbox1, bbox2); + area = bboxArea(bbox1) + bboxArea(bbox2); + + // choose distribution with minimum overlap + if (overlap < minOverlap) { + minOverlap = overlap; + index = i; + + minArea = area < minArea ? area : minArea; + + } else if (overlap === minOverlap) { + // otherwise choose distribution with minimum area + if (area < minArea) { + minArea = area; + index = i; + } + } + } + + return index; + }, + + // sorts node children by the best axis for split + _chooseSplitAxis: function (node, m, M) { + + var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX, + compareMinY = node.leaf ? this.compareMinY : compareNodeMinY, + xMargin = this._allDistMargin(node, m, M, compareMinX), + yMargin = this._allDistMargin(node, m, M, compareMinY); + + // if total distributions margin value is minimal for x, sort by minX, + // otherwise it's already sorted by minY + if (xMargin < yMargin) node.children.sort(compareMinX); + }, + + // total margin of all possible split distributions where each node is at least m full + _allDistMargin: function (node, m, M, compare) { + + node.children.sort(compare); + + var toBBox = this.toBBox, + leftBBox = distBBox(node, 0, m, toBBox), + rightBBox = distBBox(node, M - m, M, toBBox), + margin = bboxMargin(leftBBox) + bboxMargin(rightBBox), + i, child; + + for (i = m; i < M - m; i++) { + child = node.children[i]; + extend$1(leftBBox, node.leaf ? toBBox(child) : child); + margin += bboxMargin(leftBBox); + } + + for (i = M - m - 1; i >= m; i--) { + child = node.children[i]; + extend$1(rightBBox, node.leaf ? toBBox(child) : child); + margin += bboxMargin(rightBBox); + } + + return margin; + }, + + _adjustParentBBoxes: function (bbox, path, level) { + // adjust bboxes along the given tree path + for (var i = level; i >= 0; i--) { + extend$1(path[i], bbox); + } + }, + + _condense: function (path) { + // go through the path, removing empty nodes and updating bboxes + for (var i = path.length - 1, siblings; i >= 0; i--) { + if (path[i].children.length === 0) { + if (i > 0) { + siblings = path[i - 1].children; + siblings.splice(siblings.indexOf(path[i]), 1); + + } else this.clear(); + + } else calcBBox(path[i], this.toBBox); + } + }, + + _initFormat: function (format) { + // data format (minX, minY, maxX, maxY accessors) + + // uses eval-type function compilation instead of just accepting a toBBox function + // because the algorithms are very sensitive to sorting functions performance, + // so they should be dead simple and without inner calls + + var compareArr = ['return a', ' - b', ';']; + + this.compareMinX = new Function('a', 'b', compareArr.join(format[0])); + this.compareMinY = new Function('a', 'b', compareArr.join(format[1])); + + this.toBBox = new Function('a', + 'return {minX: a' + format[0] + + ', minY: a' + format[1] + + ', maxX: a' + format[2] + + ', maxY: a' + format[3] + '};'); + } + }; + + function findItem(item, items, equalsFn) { + if (!equalsFn) return items.indexOf(item); + + for (var i = 0; i < items.length; i++) { + if (equalsFn(item, items[i])) return i; + } + return -1; + } + + // calculate node's bbox from bboxes of its children + function calcBBox(node, toBBox) { + distBBox(node, 0, node.children.length, toBBox, node); + } + + // min bounding rectangle of node children from k to p-1 + function distBBox(node, k, p, toBBox, destNode) { + if (!destNode) destNode = createNode(null); + destNode.minX = Infinity; + destNode.minY = Infinity; + destNode.maxX = -Infinity; + destNode.maxY = -Infinity; + + for (var i = k, child; i < p; i++) { + child = node.children[i]; + extend$1(destNode, node.leaf ? toBBox(child) : child); + } + + return destNode; + } + + function extend$1(a, b) { + a.minX = Math.min(a.minX, b.minX); + a.minY = Math.min(a.minY, b.minY); + a.maxX = Math.max(a.maxX, b.maxX); + a.maxY = Math.max(a.maxY, b.maxY); + return a; + } + + function compareNodeMinX(a, b) { return a.minX - b.minX; } + function compareNodeMinY(a, b) { return a.minY - b.minY; } + + function bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); } + function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); } + + function enlargedArea(a, b) { + return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) * + (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY)); + } + + function intersectionArea(a, b) { + var minX = Math.max(a.minX, b.minX), + minY = Math.max(a.minY, b.minY), + maxX = Math.min(a.maxX, b.maxX), + maxY = Math.min(a.maxY, b.maxY); + + return Math.max(0, maxX - minX) * + Math.max(0, maxY - minY); + } + + function contains$2(a, b) { + return a.minX <= b.minX && + a.minY <= b.minY && + b.maxX <= a.maxX && + b.maxY <= a.maxY; + } + + function intersects$1(a, b) { + return b.minX <= a.maxX && + b.minY <= a.maxY && + b.maxX >= a.minX && + b.maxY >= a.minY; + } + + function createNode(children) { + return { + children: children, + height: 1, + leaf: true, + minX: Infinity, + minY: Infinity, + maxX: -Infinity, + maxY: -Infinity + }; + } + + // sort an array so that items come in groups of n unsorted items, with groups sorted between each other; + // combines selection algorithm with binary divide & conquer approach + + function multiSelect(arr, left, right, n, compare) { + var stack = [left, right], + mid; + + while (stack.length) { + right = stack.pop(); + left = stack.pop(); + + if (right - left <= n) continue; + + mid = left + Math.ceil((right - left) / n / 2) * n; + quickselect$2(arr, mid, left, right, compare); + + stack.push(left, mid, mid, right); + } + } + rbush_1.default = default_1$1; + + var lineclip_1 = lineclip; + + lineclip.polyline = lineclip; + lineclip.polygon = polygonclip; + + + // Cohen-Sutherland line clippign algorithm, adapted to efficiently + // handle polylines rather than just segments + + function lineclip(points, bbox, result) { + + var len = points.length, + codeA = bitCode(points[0], bbox), + part = [], + i, a, b, codeB, lastCode; + + if (!result) result = []; + + for (i = 1; i < len; i++) { + a = points[i - 1]; + b = points[i]; + codeB = lastCode = bitCode(b, bbox); + + while (true) { + + if (!(codeA | codeB)) { // accept + part.push(a); + + if (codeB !== lastCode) { // segment went outside + part.push(b); + + if (i < len - 1) { // start a new line + result.push(part); + part = []; + } + } else if (i === len - 1) { + part.push(b); + } + break; + + } else if (codeA & codeB) { // trivial reject + break; + + } else if (codeA) { // a outside, intersect with clip edge + a = intersect$1(a, b, codeA, bbox); + codeA = bitCode(a, bbox); + + } else { // b outside + b = intersect$1(a, b, codeB, bbox); + codeB = bitCode(b, bbox); + } + } + + codeA = lastCode; + } + + if (part.length) result.push(part); + + return result; + } -var streets$1 = Object.freeze({ - Airport: Airport, - Dining: Dining, - Education: Education, - General: General, - Health: Health, - Outdoors: Outdoors, - Transit: Transit, - default: streets -}); + // Sutherland-Hodgeman polygon clipping algorithm -var require$$0$1 = ( all$2 && all$1 ) || all$2; + function polygonclip(points, bbox) { -var require$$1$1 = ( streets$1 && streets ) || streets$1; + var result, edge, prev, prevInside, i, p, inside; -var maki = { - layouts: { - all: require$$0$1, - streets: require$$1$1 - } -}; + // clip against each side of the clip rectangle + for (edge = 1; edge <= 8; edge *= 2) { + result = []; + prev = points[points.length - 1]; + prevInside = !(bitCode(prev, bbox) & edge); -var dataFeatureIcons = maki.layouts.all.all; + for (i = 0; i < points.length; i++) { + p = points[i]; + inside = !(bitCode(p, bbox) & edge); -var data = { - imagery: dataImagery, - presets: { - presets: presets, - defaults: defaults, - categories: categories, - fields: fields - } -}; + // if segment goes through the clip window, add an intersection + if (inside !== prevInside) result.push(intersect$1(prev, p, edge, bbox)); -function osmEntity$$1(attrs) { - // For prototypal inheritance. - if (this instanceof osmEntity$$1) return; + if (inside) result.push(p); // add a point if it's inside - // Create the appropriate subtype. - if (attrs && attrs.type) { - return osmEntity$$1[attrs.type].apply(this, arguments); - } else if (attrs && attrs.id) { - return osmEntity$$1[osmEntity$$1.id.type(attrs.id)].apply(this, arguments); - } + prev = p; + prevInside = inside; + } - // Initialize a generic Entity (used only in tests). - return (new osmEntity$$1()).initialize(arguments); -} + points = result; + if (!points.length) break; + } -osmEntity$$1.id = function(type) { - return osmEntity$$1.id.fromOSM(type, osmEntity$$1.id.next[type]--); -}; + return result; + } + // intersect a segment against one of the 4 lines that make up the bbox -osmEntity$$1.id.next = { - changeset: -1, node: -1, way: -1, relation: -1 -}; + function intersect$1(a, b, edge, bbox) { + return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top + edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom + edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right + edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left + null; + } + // bit code reflects the point position relative to the bbox: -osmEntity$$1.id.fromOSM = function(type, id) { - return type[0] + id; -}; + // left mid right + // top 1001 1000 1010 + // mid 0001 0000 0010 + // bottom 0101 0100 0110 + function bitCode(p, bbox) { + var code = 0; -osmEntity$$1.id.toOSM = function(id) { - return id.slice(1); -}; + if (p[0] < bbox[0]) code |= 1; // left + else if (p[0] > bbox[2]) code |= 2; // right + if (p[1] < bbox[1]) code |= 4; // bottom + else if (p[1] > bbox[3]) code |= 8; // top -osmEntity$$1.id.type = function(id) { - return { 'c': 'changeset', 'n': 'node', 'w': 'way', 'r': 'relation' }[id[0]]; -}; + return code; + } + var lineclip$1 = /*#__PURE__*/Object.freeze({ + default: lineclip_1, + __moduleExports: lineclip_1 + }); -// A function suitable for use as the second argument to d3.selection#data(). -osmEntity$$1.key = function(entity) { - return entity.id + 'v' + (entity.v || 0); -}; + var lineclip$2 = ( lineclip$1 && lineclip_1 ) || lineclip$1; + var whichPolygon_1 = whichPolygon; -osmEntity$$1.prototype = { + function whichPolygon(data) { + var bboxes = []; + for (var i = 0; i < data.features.length; i++) { + var feature = data.features[i]; + var coords = feature.geometry.coordinates; - tags: {}, + if (feature.geometry.type === 'Polygon') { + bboxes.push(treeItem(coords, feature.properties)); + } else if (feature.geometry.type === 'MultiPolygon') { + for (var j = 0; j < coords.length; j++) { + bboxes.push(treeItem(coords[j], feature.properties)); + } + } + } - initialize: function(sources) { - for (var i = 0; i < sources.length; ++i) { - var source = sources[i]; - for (var prop in source) { - if (Object.prototype.hasOwnProperty.call(source, prop)) { - if (source[prop] === undefined) { - delete this[prop]; - } else { - this[prop] = source[prop]; - } - } - } - } + var tree = rbush_1().load(bboxes); + + function query(p, multi) { + var output = [], + result = tree.search({ + minX: p[0], + minY: p[1], + maxX: p[0], + maxY: p[1] + }); + for (var i = 0; i < result.length; i++) { + if (insidePolygon(result[i].coords, p)) { + if (multi) + output.push(result[i].props); + else + return result[i].props; + } + } + return multi && output.length ? output : null; + } - if (!this.id && this.type) { - this.id = osmEntity$$1.id(this.type); - } - if (!this.hasOwnProperty('visible')) { - this.visible = true; - } + query.tree = tree; + query.bbox = function queryBBox(bbox) { + var output = []; + var result = tree.search({ + minX: bbox[0], + minY: bbox[1], + maxX: bbox[2], + maxY: bbox[3] + }); + for (var i = 0; i < result.length; i++) { + if (polygonIntersectsBBox(result[i].coords, bbox)) { + output.push(result[i].props); + } + } + return output; + }; - if (debug) { - Object.freeze(this); - Object.freeze(this.tags); + return query; + } - if (this.loc) Object.freeze(this.loc); - if (this.nodes) Object.freeze(this.nodes); - if (this.members) Object.freeze(this.members); - } + function polygonIntersectsBBox(polygon, bbox) { + var bboxCenter = [ + (bbox[0] + bbox[2]) / 2, + (bbox[1] + bbox[3]) / 2 + ]; + if (insidePolygon(polygon, bboxCenter)) return true; + for (var i = 0; i < polygon.length; i++) { + if (lineclip$2(polygon[i], bbox).length > 0) return true; + } + return false; + } - return this; - }, + // ray casting algorithm for detecting if point is in polygon + function insidePolygon(rings, p) { + var inside = false; + for (var i = 0, len = rings.length; i < len; i++) { + var ring = rings[i]; + for (var j = 0, len2 = ring.length, k = len2 - 1; j < len2; k = j++) { + if (rayIntersect(p, ring[j], ring[k])) inside = !inside; + } + } + return inside; + } + function rayIntersect(p, p1, p2) { + return ((p1[1] > p[1]) !== (p2[1] > p[1])) && (p[0] < (p2[0] - p1[0]) * (p[1] - p1[1]) / (p2[1] - p1[1]) + p1[0]); + } - copy: function(resolver, copies) { - if (copies[this.id]) - return copies[this.id]; + function treeItem(coords, props) { + var item = { + minX: Infinity, + minY: Infinity, + maxX: -Infinity, + maxY: -Infinity, + coords: coords, + props: props + }; - var copy = osmEntity$$1(this, {id: undefined, user: undefined, version: undefined}); - copies[this.id] = copy; + for (var i = 0; i < coords[0].length; i++) { + var p = coords[0][i]; + item.minX = Math.min(item.minX, p[0]); + item.minY = Math.min(item.minY, p[1]); + item.maxX = Math.max(item.maxX, p[0]); + item.maxY = Math.max(item.maxY, p[1]); + } + return item; + } - return copy; - }, + var dataFeatureIcons = maki.layouts.all.all; + var features$4 = values$1(features$2).map(function(feature) { + // workaround for which-polygon + // only supports `properties`, not `id` + // https://github.com/mapbox/which-polygon/pull/6 + feature.properties = { + id: feature.id, + area: d3_geoArea(feature) // also precompute areas + }; - osmId: function() { - return osmEntity$$1.id.toOSM(this.id); - }, + return feature; + }); + var data = { + community: { + features: features$2, + resources: resources, + query: whichPolygon_1({ + type: 'FeatureCollection', + features: features$4 + }) + }, + imagery: dataImagery, + presets: { + presets: presets, + defaults: defaults, + categories: categories, + fields: fields + } + }; - isNew: function() { - return this.osmId() < 0; - }, + function osmEntity$$1(attrs) { + // For prototypal inheritance. + if (this instanceof osmEntity$$1) return; + // Create the appropriate subtype. + if (attrs && attrs.type) { + return osmEntity$$1[attrs.type].apply(this, arguments); + } else if (attrs && attrs.id) { + return osmEntity$$1[osmEntity$$1.id.type(attrs.id)].apply(this, arguments); + } - update: function(attrs) { - return osmEntity$$1(this, attrs, {v: 1 + (this.v || 0)}); - }, + // Initialize a generic Entity (used only in tests). + return (new osmEntity$$1()).initialize(arguments); + } - mergeTags: function(tags) { - var merged = clone(this.tags), changed = false; - for (var k in tags) { - var t1 = merged[k], - t2 = tags[k]; - if (!t1) { - changed = true; - merged[k] = t2; - } else if (t1 !== t2) { - changed = true; - merged[k] = union(t1.split(/;\s*/), t2.split(/;\s*/)).join(';'); - } - } - return changed ? this.update({tags: merged}) : this; - }, + osmEntity$$1.id = function(type) { + return osmEntity$$1.id.fromOSM(type, osmEntity$$1.id.next[type]--); + }; - intersects: function(extent, resolver) { - return this.extent(resolver).intersects(extent); - }, + osmEntity$$1.id.next = { + changeset: -1, node: -1, way: -1, relation: -1 + }; - isUsed: function(resolver) { - return without(Object.keys(this.tags), 'area').length > 0 || - resolver.parentRelations(this).length > 0; - }, + osmEntity$$1.id.fromOSM = function(type, id) { + return type[0] + id; + }; - hasInterestingTags: function() { - return keys$1(this.tags).some(osmIsInterestingTag); - }, + osmEntity$$1.id.toOSM = function(id) { + return id.slice(1); + }; - isHighwayIntersection: function() { - return false; - }, + osmEntity$$1.id.type = function(id) { + return { 'c': 'changeset', 'n': 'node', 'w': 'way', 'r': 'relation' }[id[0]]; + }; - isDegenerate: function() { - return true; - }, - deprecatedTags: function() { - var tags = toPairs(this.tags); - var deprecated = {}; - - dataDeprecated.forEach(function(d) { - var match = toPairs(d.old)[0]; - tags.forEach(function(t) { - if (t[0] === match[0] && - (t[1] === match[1] || match[1] === '*')) { - deprecated[t[0]] = t[1]; - } - }); - }); + // A function suitable for use as the second argument to d3.selection#data(). + osmEntity$$1.key = function(entity) { + return entity.id + 'v' + (entity.v || 0); + }; - return deprecated; - } -}; -function geoExtent$$1(min, max) { - if (!(this instanceof geoExtent$$1)) return new geoExtent$$1(min, max); - if (min instanceof geoExtent$$1) { - return min; - } else if (min && min.length === 2 && min[0].length === 2 && min[1].length === 2) { - this[0] = min[0]; - this[1] = min[1]; - } else { - this[0] = min || [ Infinity, Infinity]; - this[1] = max || min || [-Infinity, -Infinity]; - } -} + osmEntity$$1.prototype = { -geoExtent$$1.prototype = new Array(2); + tags: {}, -assignIn(geoExtent$$1.prototype, { - equals: function (obj) { - return this[0][0] === obj[0][0] && - this[0][1] === obj[0][1] && - this[1][0] === obj[1][0] && - this[1][1] === obj[1][1]; - }, + initialize: function(sources) { + for (var i = 0; i < sources.length; ++i) { + var source = sources[i]; + for (var prop in source) { + if (Object.prototype.hasOwnProperty.call(source, prop)) { + if (source[prop] === undefined) { + delete this[prop]; + } else { + this[prop] = source[prop]; + } + } + } + } + if (!this.id && this.type) { + this.id = osmEntity$$1.id(this.type); + } + if (!this.hasOwnProperty('visible')) { + this.visible = true; + } - extend: function(obj) { - if (!(obj instanceof geoExtent$$1)) obj = new geoExtent$$1(obj); - return geoExtent$$1( - [Math.min(obj[0][0], this[0][0]), Math.min(obj[0][1], this[0][1])], - [Math.max(obj[1][0], this[1][0]), Math.max(obj[1][1], this[1][1])] - ); - }, + if (debug) { + Object.freeze(this); + Object.freeze(this.tags); + if (this.loc) Object.freeze(this.loc); + if (this.nodes) Object.freeze(this.nodes); + if (this.members) Object.freeze(this.members); + } - _extend: function(extent) { - this[0][0] = Math.min(extent[0][0], this[0][0]); - this[0][1] = Math.min(extent[0][1], this[0][1]); - this[1][0] = Math.max(extent[1][0], this[1][0]); - this[1][1] = Math.max(extent[1][1], this[1][1]); - }, + return this; + }, - area: function() { - return Math.abs((this[1][0] - this[0][0]) * (this[1][1] - this[0][1])); - }, + copy: function(resolver, copies) { + if (copies[this.id]) + return copies[this.id]; + var copy = osmEntity$$1(this, {id: undefined, user: undefined, version: undefined}); + copies[this.id] = copy; - center: function() { - return [(this[0][0] + this[1][0]) / 2, - (this[0][1] + this[1][1]) / 2]; - }, + return copy; + }, - rectangle: function() { - return [this[0][0], this[0][1], this[1][0], this[1][1]]; - }, + osmId: function() { + return osmEntity$$1.id.toOSM(this.id); + }, - bbox: function() { - return { minX: this[0][0], minY: this[0][1], maxX: this[1][0], maxY: this[1][1] }; - }, + isNew: function() { + return this.osmId() < 0; + }, - polygon: function() { - return [ - [this[0][0], this[0][1]], - [this[0][0], this[1][1]], - [this[1][0], this[1][1]], - [this[1][0], this[0][1]], - [this[0][0], this[0][1]] - ]; - }, + update: function(attrs) { + return osmEntity$$1(this, attrs, {v: 1 + (this.v || 0)}); + }, - contains: function(obj) { - if (!(obj instanceof geoExtent$$1)) obj = new geoExtent$$1(obj); - return obj[0][0] >= this[0][0] && - obj[0][1] >= this[0][1] && - obj[1][0] <= this[1][0] && - obj[1][1] <= this[1][1]; - }, + mergeTags: function(tags) { + var merged = clone(this.tags), changed = false; + for (var k in tags) { + var t1 = merged[k], + t2 = tags[k]; + if (!t1) { + changed = true; + merged[k] = t2; + } else if (t1 !== t2) { + changed = true; + merged[k] = union(t1.split(/;\s*/), t2.split(/;\s*/)).join(';'); + } + } + return changed ? this.update({tags: merged}) : this; + }, - intersects: function(obj) { - if (!(obj instanceof geoExtent$$1)) obj = new geoExtent$$1(obj); - return obj[0][0] <= this[1][0] && - obj[0][1] <= this[1][1] && - obj[1][0] >= this[0][0] && - obj[1][1] >= this[0][1]; - }, + intersects: function(extent, resolver) { + return this.extent(resolver).intersects(extent); + }, - intersection: function(obj) { - if (!this.intersects(obj)) return new geoExtent$$1(); - return new geoExtent$$1( - [Math.max(obj[0][0], this[0][0]), Math.max(obj[0][1], this[0][1])], - [Math.min(obj[1][0], this[1][0]), Math.min(obj[1][1], this[1][1])] - ); - }, + isUsed: function(resolver) { + return without(Object.keys(this.tags), 'area').length > 0 || + resolver.parentRelations(this).length > 0; + }, - percentContainedIn: function(obj) { - if (!(obj instanceof geoExtent$$1)) obj = new geoExtent$$1(obj); - var a1 = this.intersection(obj).area(), - a2 = this.area(); + hasInterestingTags: function() { + return keys$1(this.tags).some(osmIsInterestingTag); + }, - if (a1 === Infinity || a2 === Infinity || a1 === 0 || a2 === 0) { - return 0; - } else { - return a1 / a2; - } - }, + isHighwayIntersection: function() { + return false; + }, - padByMeters: function(meters) { - var dLat = geoMetersToLat(meters), - dLon = geoMetersToLon(meters, this.center()[1]); - return geoExtent$$1( - [this[0][0] - dLon, this[0][1] - dLat], - [this[1][0] + dLon, this[1][1] + dLat] - ); - }, + isDegenerate: function() { + return true; + }, + deprecatedTags: function() { + var tags = toPairs(this.tags); + var deprecated = {}; + + dataDeprecated.forEach(function(d) { + var match = toPairs(d.old)[0]; + tags.forEach(function(t) { + if (t[0] === match[0] && + (t[1] === match[1] || match[1] === '*')) { + deprecated[t[0]] = t[1]; + } + }); + }); - toParam: function() { - return this.rectangle().join(','); - } + return deprecated; + } + }; -}); + function geoExtent$$1(min, max) { + if (!(this instanceof geoExtent$$1)) { + return new geoExtent$$1(min, max); + } else if (min instanceof geoExtent$$1) { + return min; + } else if (min && min.length === 2 && min[0].length === 2 && min[1].length === 2) { + this[0] = min[0]; + this[1] = min[1]; + } else { + this[0] = min || [ Infinity, Infinity]; + this[1] = max || min || [-Infinity, -Infinity]; + } + } -// constants -var TAU = 2 * Math.PI; -var EQUATORIAL_RADIUS = 6356752.314245179; -var POLAR_RADIUS = 6378137.0; + // $FlowFixMe + geoExtent$$1.prototype = new Array(2); + assignIn(geoExtent$$1.prototype, { -function geoLatToMeters(dLat) { - return dLat * (TAU * POLAR_RADIUS / 360); -} + equals: function (obj) { + return this[0][0] === obj[0][0] && + this[0][1] === obj[0][1] && + this[1][0] === obj[1][0] && + this[1][1] === obj[1][1]; + }, -function geoLonToMeters(dLon, atLat) { - return Math.abs(atLat) >= 90 ? 0 : - dLon * (TAU * EQUATORIAL_RADIUS / 360) * Math.abs(Math.cos(atLat * (Math.PI / 180))); -} + extend: function(obj) { + if (!(obj instanceof geoExtent$$1)) obj = new geoExtent$$1(obj); + return geoExtent$$1( + [Math.min(obj[0][0], this[0][0]), Math.min(obj[0][1], this[0][1])], + [Math.max(obj[1][0], this[1][0]), Math.max(obj[1][1], this[1][1])] + ); + }, -function geoMetersToLat(m) { - return m / (TAU * POLAR_RADIUS / 360); -} + _extend: function(extent) { + this[0][0] = Math.min(extent[0][0], this[0][0]); + this[0][1] = Math.min(extent[0][1], this[0][1]); + this[1][0] = Math.max(extent[1][0], this[1][0]); + this[1][1] = Math.max(extent[1][1], this[1][1]); + }, -function geoMetersToLon(m, atLat) { - return Math.abs(atLat) >= 90 ? 0 : - m / (TAU * EQUATORIAL_RADIUS / 360) / Math.abs(Math.cos(atLat * (Math.PI / 180))); -} + area: function() { + return Math.abs((this[1][0] - this[0][0]) * (this[1][1] - this[0][1])); + }, -function geoMetersToOffset(meters, tileSize) { - tileSize = tileSize || 256; - return [ - meters[0] * tileSize / (TAU * EQUATORIAL_RADIUS), - -meters[1] * tileSize / (TAU * POLAR_RADIUS) - ]; -} + center: function() { + return [(this[0][0] + this[1][0]) / 2, (this[0][1] + this[1][1]) / 2]; + }, -function geoOffsetToMeters(offset, tileSize) { - tileSize = tileSize || 256; - return [ - offset[0] * TAU * EQUATORIAL_RADIUS / tileSize, - -offset[1] * TAU * POLAR_RADIUS / tileSize - ]; -} - - -// Equirectangular approximation of spherical distances on Earth -function geoSphericalDistance(a, b) { - var x = geoLonToMeters(a[0] - b[0], (a[1] + b[1]) / 2); - var y = geoLatToMeters(a[1] - b[1]); - return Math.sqrt((x * x) + (y * y)); -} - - -// scale to zoom -function geoScaleToZoom(k, tileSize) { - tileSize = tileSize || 256; - var log2ts = Math.log(tileSize) * Math.LOG2E; - return Math.log(k * TAU) / Math.LN2 - log2ts; -} - - -// zoom to scale -function geoZoomToScale(z, tileSize) { - tileSize = tileSize || 256; - return tileSize * Math.pow(2, z) / TAU; -} - -/** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ -function arrayEvery(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; -} - -/** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ -function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; -} - -/** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ -function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, baseIteratee(predicate, 3)); -} - -/** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; -} - -/** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ -function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, baseIteratee(predicate, 3)); -} - -// vector equals -function geoVecEqual(a, b, epsilon) { - if (epsilon) { - return (Math.abs(a[0] - b[0]) <= epsilon) && (Math.abs(a[1] - b[1]) <= epsilon); - } else { - return (a[0] === b[0]) && (a[1] === b[1]); - } -} + rectangle: function() { + return [this[0][0], this[0][1], this[1][0], this[1][1]]; + }, -// vector addition -function geoVecAdd(a, b) { - return [ a[0] + b[0], a[1] + b[1] ]; -} -// vector subtraction -function geoVecSubtract(a, b) { - return [ a[0] - b[0], a[1] - b[1] ]; -} + bbox: function() { + return { minX: this[0][0], minY: this[0][1], maxX: this[1][0], maxY: this[1][1] }; + }, -// vector scaling -function geoVecScale(a, mag) { - return [ a[0] * mag, a[1] * mag ]; -} -// vector rounding (was: geoRoundCoordinates) -function geoVecFloor(a) { - return [ Math.floor(a[0]), Math.floor(a[1]) ]; -} + polygon: function() { + return [ + [this[0][0], this[0][1]], + [this[0][0], this[1][1]], + [this[1][0], this[1][1]], + [this[1][0], this[0][1]], + [this[0][0], this[0][1]] + ]; + }, -// linear interpolation -function geoVecInterp(a, b, t) { - return [ - a[0] + (b[0] - a[0]) * t, - a[1] + (b[1] - a[1]) * t - ]; -} - -// http://jsperf.com/id-dist-optimization -function geoVecLength(a, b) { - var x = a[0] - b[0]; - var y = a[1] - b[1]; - return Math.sqrt((x * x) + (y * y)); -} - -// Return the counterclockwise angle in the range (-pi, pi) -// between the positive X axis and the line intersecting a and b. -function geoVecAngle(a, b) { - return Math.atan2(b[1] - a[1], b[0] - a[0]); -} - -// dot product -function geoVecDot(a, b, origin) { - origin = origin || [0, 0]; - return (a[0] - origin[0]) * (b[0] - origin[0]) + - (a[1] - origin[1]) * (b[1] - origin[1]); -} - -// 2D cross product of OA and OB vectors, returns magnitude of Z vector -// Returns a positive value, if OAB makes a counter-clockwise turn, -// negative for clockwise turn, and zero if the points are collinear. -function geoVecCross(a, b, origin) { - origin = origin || [0, 0]; - return (a[0] - origin[0]) * (b[1] - origin[1]) - - (a[1] - origin[1]) * (b[0] - origin[0]); -} - -// Return the counterclockwise angle in the range (-pi, pi) -// between the positive X axis and the line intersecting a and b. -function geoAngle(a, b, projection) { - return geoVecAngle(projection(a.loc), projection(b.loc)); -} - -function geoEdgeEqual(a, b) { - return (a[0] === b[0] && a[1] === b[1]) || - (a[0] === b[1] && a[1] === b[0]); -} - -// Rotate all points counterclockwise around a pivot point by given angle -function geoRotate(points, angle, around) { - return points.map(function(point) { - var radial = geoVecSubtract(point, around); - return [ - radial[0] * Math.cos(angle) - radial[1] * Math.sin(angle) + around[0], - radial[0] * Math.sin(angle) + radial[1] * Math.cos(angle) + around[1] - ]; - }); -} - - -// Choose the edge with the minimal distance from `point` to its orthogonal -// projection onto that edge, if such a projection exists, or the distance to -// the closest vertex on that edge. Returns an object with the `index` of the -// chosen edge, the chosen `loc` on that edge, and the `distance` to to it. -function geoChooseEdge(nodes, point, projection, activeID) { - var dist = geoVecLength; - var points = nodes.map(function(n) { return projection(n.loc); }); - var ids = nodes.map(function(n) { return n.id; }); - var min = Infinity; - var idx; - var loc; - - for (var i = 0; i < points.length - 1; i++) { - if (ids[i] === activeID || ids[i + 1] === activeID) continue; - - var o = points[i]; - var s = geoVecSubtract(points[i + 1], o); - var v = geoVecSubtract(point, o); - var proj = geoVecDot(v, s) / geoVecDot(s, s); - var p; - - if (proj < 0) { - p = o; - } else if (proj > 1) { - p = points[i + 1]; - } else { - p = [o[0] + proj * s[0], o[1] + proj * s[1]]; - } - var d = dist(p, point); - if (d < min) { - min = d; - idx = i + 1; - loc = projection.invert(p); - } - } + contains: function(obj) { + if (!(obj instanceof geoExtent$$1)) obj = new geoExtent$$1(obj); + return obj[0][0] >= this[0][0] && + obj[0][1] >= this[0][1] && + obj[1][0] <= this[1][0] && + obj[1][1] <= this[1][1]; + }, - if (idx !== undefined) { - return { index: idx, distance: min, loc: loc }; - } else { - return null; - } -} - - -// Test active (dragged or drawing) segments against inactive segments -// This is used to test e.g. multipolygon rings that cross -// `activeNodes` is the ring containing the activeID being dragged. -// `inactiveNodes` is the other ring to test against -function geoHasLineIntersections(activeNodes, inactiveNodes, activeID) { - var actives = []; - var inactives = []; - var j, k, n1, n2, segment; - - // gather active segments (only segments in activeNodes that contain the activeID) - for (j = 0; j < activeNodes.length - 1; j++) { - n1 = activeNodes[j]; - n2 = activeNodes[j+1]; - segment = [n1.loc, n2.loc]; - if (n1.id === activeID || n2.id === activeID) { - actives.push(segment); - } - } - // gather inactive segments - for (j = 0; j < inactiveNodes.length - 1; j++) { - n1 = inactiveNodes[j]; - n2 = inactiveNodes[j+1]; - segment = [n1.loc, n2.loc]; - inactives.push(segment); - } + intersects: function(obj) { + if (!(obj instanceof geoExtent$$1)) obj = new geoExtent$$1(obj); + return obj[0][0] <= this[1][0] && + obj[0][1] <= this[1][1] && + obj[1][0] >= this[0][0] && + obj[1][1] >= this[0][1]; + }, - // test - for (j = 0; j < actives.length; j++) { - for (k = 0; k < inactives.length; k++) { - var p = actives[j]; - var q = inactives[k]; - var hit = geoLineIntersection(p, q); - if (hit) { - return true; - } - } - } - return false; -} - - -// Test active (dragged or drawing) segments against inactive segments -// This is used to test whether a way intersects with itself. -function geoHasSelfIntersections(nodes, activeID) { - var actives = []; - var inactives = []; - var j, k; - - // group active and passive segments along the nodes - for (j = 0; j < nodes.length - 1; j++) { - var n1 = nodes[j]; - var n2 = nodes[j+1]; - var segment = [n1.loc, n2.loc]; - if (n1.id === activeID || n2.id === activeID) { - actives.push(segment); - } else { - inactives.push(segment); - } - } + intersection: function(obj) { + if (!this.intersects(obj)) return new geoExtent$$1(); + return new geoExtent$$1( + [Math.max(obj[0][0], this[0][0]), Math.max(obj[0][1], this[0][1])], + [Math.min(obj[1][0], this[1][0]), Math.min(obj[1][1], this[1][1])] + ); + }, - // test - for (j = 0; j < actives.length; j++) { - for (k = 0; k < inactives.length; k++) { - var p = actives[j]; - var q = inactives[k]; - // skip if segments share an endpoint - if (geoVecEqual(p[1], q[0]) || geoVecEqual(p[0], q[1]) || - geoVecEqual(p[0], q[0]) || geoVecEqual(p[1], q[1]) ) { - continue; - } - var hit = geoLineIntersection(p, q); - if (hit) { - var epsilon = 1e-8; - // skip if the hit is at the segment's endpoint - if (geoVecEqual(p[1], hit, epsilon) || geoVecEqual(p[0], hit, epsilon) || - geoVecEqual(q[1], hit, epsilon) || geoVecEqual(q[0], hit, epsilon) ) { - continue; - } else { - return true; - } - } - } - } + percentContainedIn: function(obj) { + if (!(obj instanceof geoExtent$$1)) obj = new geoExtent$$1(obj); + var a1 = this.intersection(obj).area(); + var a2 = this.area(); - return false; -} - - -// Return the intersection point of 2 line segments. -// From https://github.com/pgkelley4/line-segments-intersect -// This uses the vector cross product approach described below: -// http://stackoverflow.com/a/565282/786339 -function geoLineIntersection(a, b) { - var p = [a[0][0], a[0][1]]; - var p2 = [a[1][0], a[1][1]]; - var q = [b[0][0], b[0][1]]; - var q2 = [b[1][0], b[1][1]]; - var r = geoVecSubtract(p2, p); - var s = geoVecSubtract(q2, q); - var uNumerator = geoVecCross(geoVecSubtract(q, p), r); - var denominator = geoVecCross(r, s); - - if (uNumerator && denominator) { - var u = uNumerator / denominator; - var t = geoVecCross(geoVecSubtract(q, p), s) / denominator; - - if ((t >= 0) && (t <= 1) && (u >= 0) && (u <= 1)) { - return geoVecInterp(p, p2, t); - } - } + if (a1 === Infinity || a2 === Infinity || a1 === 0 || a2 === 0) { + return 0; + } else { + return a1 / a2; + } + }, - return null; -} - - -function geoPathIntersections(path1, path2) { - var intersections = []; - for (var i = 0; i < path1.length - 1; i++) { - for (var j = 0; j < path2.length - 1; j++) { - var a = [ path1[i], path1[i+1] ]; - var b = [ path2[j], path2[j+1] ]; - var hit = geoLineIntersection(a, b); - if (hit) { - intersections.push(hit); - } - } - } - return intersections; -} - -function geoPathHasIntersections(path1, path2) { - for (var i = 0; i < path1.length - 1; i++) { - for (var j = 0; j < path2.length - 1; j++) { - var a = [ path1[i], path1[i+1] ]; - var b = [ path2[j], path2[j+1] ]; - var hit = geoLineIntersection(a, b); - if (hit) { - return true; - } - } - } - return false; -} - - -// Return whether point is contained in polygon. -// -// `point` should be a 2-item array of coordinates. -// `polygon` should be an array of 2-item arrays of coordinates. -// -// From https://github.com/substack/point-in-polygon. -// ray-casting algorithm based on -// http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html -// -function geoPointInPolygon(point, polygon) { - var x = point[0]; - var y = point[1]; - var inside = false; - - for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { - var xi = polygon[i][0]; - var yi = polygon[i][1]; - var xj = polygon[j][0]; - var yj = polygon[j][1]; - - var intersect = ((yi > y) !== (yj > y)) && - (x < (xj - xi) * (y - yi) / (yj - yi) + xi); - if (intersect) inside = !inside; - } - return inside; -} + padByMeters: function(meters) { + var dLat = geoMetersToLat(meters); + var dLon = geoMetersToLon(meters, this.center()[1]); + return geoExtent$$1( + [this[0][0] - dLon, this[0][1] - dLat], + [this[1][0] + dLon, this[1][1] + dLat] + ); + }, -function geoPolygonContainsPolygon(outer, inner) { - return every(inner, function(point) { - return geoPointInPolygon(point, outer); - }); -} + toParam: function() { + return this.rectangle().join(','); + } + }); -function geoPolygonIntersectsPolygon(outer, inner, checkSegments) { - function testPoints(outer, inner) { - return some(inner, function(point) { - return geoPointInPolygon(point, outer); - }); - } + // constants + var TAU = 2 * Math.PI; + var EQUATORIAL_RADIUS = 6356752.314245179; + var POLAR_RADIUS = 6378137.0; - return testPoints(outer, inner) || (!!checkSegments && geoPathHasIntersections(outer, inner)); -} + function geoLatToMeters(dLat) { + return dLat * (TAU * POLAR_RADIUS / 360); + } -function geoPathLength(path) { - var length = 0; - for (var i = 0; i < path.length - 1; i++) { - length += geoVecLength(path[i], path[i + 1]); - } - return length; -} + function geoLonToMeters(dLon, atLat) { + return Math.abs(atLat) >= 90 ? 0 : + dLon * (TAU * EQUATORIAL_RADIUS / 360) * Math.abs(Math.cos(atLat * (Math.PI / 180))); + } -// If the given point is at the edge of the padded viewport, -// return a vector that will nudge the viewport in that direction -function geoViewportEdge(point, dimensions) { - var pad = [80, 20, 50, 20]; // top, right, bottom, left - var x = 0; - var y = 0; - if (point[0] > dimensions[0] - pad[1]) - x = -10; - if (point[0] < pad[3]) - x = 10; - if (point[1] > dimensions[1] - pad[2]) - y = -10; - if (point[1] < pad[0]) - y = 10; + function geoMetersToLat(m) { + return m / (TAU * POLAR_RADIUS / 360); + } - if (x || y) { - return [x, y]; - } else { - return null; - } -} -/* - Bypasses features of D3's default projection stream pipeline that are unnecessary: - * Antimeridian clipping - * Spherical rotation - * Resampling -*/ -function geoRawMercator() { - var project = mercatorRaw, - k = 512 / Math.PI, // scale - x = 0, y = 0, // translate - clipExtent = [[0, 0], [0, 0]]; + function geoMetersToLon(m, atLat) { + return Math.abs(atLat) >= 90 ? 0 : + m / (TAU * EQUATORIAL_RADIUS / 360) / Math.abs(Math.cos(atLat * (Math.PI / 180))); + } - function projection$$1(point) { - point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180); - return [point[0] * k + x, y - point[1] * k]; - } + function geoMetersToOffset(meters, tileSize) { + tileSize = tileSize || 256; + return [ + meters[0] * tileSize / (TAU * EQUATORIAL_RADIUS), + -meters[1] * tileSize / (TAU * POLAR_RADIUS) + ]; + } - projection$$1.invert = function(point) { - point = project.invert((point[0] - x) / k, (y - point[1]) / k); - return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI]; - }; + function geoOffsetToMeters(offset, tileSize) { + tileSize = tileSize || 256; + return [ + offset[0] * TAU * EQUATORIAL_RADIUS / tileSize, + -offset[1] * TAU * POLAR_RADIUS / tileSize + ]; + } - projection$$1.scale = function(_) { - if (!arguments.length) return k; - k = +_; - return projection$$1; - }; + // Equirectangular approximation of spherical distances on Earth + function geoSphericalDistance(a, b) { + var x = geoLonToMeters(a[0] - b[0], (a[1] + b[1]) / 2); + var y = geoLatToMeters(a[1] - b[1]); + return Math.sqrt((x * x) + (y * y)); + } - projection$$1.translate = function(_) { - if (!arguments.length) return [x, y]; - x = +_[0]; - y = +_[1]; - return projection$$1; - }; + // scale to zoom + function geoScaleToZoom(k, tileSize) { + tileSize = tileSize || 256; + var log2ts = Math.log(tileSize) * Math.LOG2E; + return Math.log(k * TAU) / Math.LN2 - log2ts; + } - projection$$1.clipExtent = function(_) { - if (!arguments.length) return clipExtent; - clipExtent = _; - return projection$$1; - }; + // zoom to scale + function geoZoomToScale(z, tileSize) { + tileSize = tileSize || 256; + return tileSize * Math.pow(2, z) / TAU; + } + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; - projection$$1.transform = function(_) { - if (!arguments.length) return identity$7.translate(x, y).scale(k); - x = +_.x; - y = +_.y; - k = +_.k; - return projection$$1; - }; + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } - projection$$1.stream = d3_geoTransform({ - point: function(x, y) { - x = projection$$1([x, y]); - this.stream.point(x[0], x[1]); - } - }).stream; + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, baseIteratee(predicate, 3)); + } + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; - return projection$$1; -} + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } -function osmChangeset() { - if (!(this instanceof osmChangeset)) { - return (new osmChangeset()).initialize(arguments); - } else if (arguments.length) { - this.initialize(arguments); + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; } -} + return func(collection, baseIteratee(predicate, 3)); + } + + // vector equals + function geoVecEqual(a, b, epsilon) { + if (epsilon) { + return (Math.abs(a[0] - b[0]) <= epsilon) && (Math.abs(a[1] - b[1]) <= epsilon); + } else { + return (a[0] === b[0]) && (a[1] === b[1]); + } + } + // vector addition + function geoVecAdd(a, b) { + return [ a[0] + b[0], a[1] + b[1] ]; + } + + // vector subtraction + function geoVecSubtract(a, b) { + return [ a[0] - b[0], a[1] - b[1] ]; + } + + // vector scaling + function geoVecScale(a, mag) { + return [ a[0] * mag, a[1] * mag ]; + } + + // vector rounding (was: geoRoundCoordinates) + function geoVecFloor(a) { + return [ Math.floor(a[0]), Math.floor(a[1]) ]; + } -osmEntity$$1.changeset = osmChangeset; + // linear interpolation + function geoVecInterp(a, b, t) { + return [ + a[0] + (b[0] - a[0]) * t, + a[1] + (b[1] - a[1]) * t + ]; + } -osmChangeset.prototype = Object.create(osmEntity$$1.prototype); + // http://jsperf.com/id-dist-optimization + function geoVecLength(a, b) { + var x = a[0] - b[0]; + var y = a[1] - b[1]; + return Math.sqrt((x * x) + (y * y)); + } -assignIn(osmChangeset.prototype, { + // Return the counterclockwise angle in the range (-pi, pi) + // between the positive X axis and the line intersecting a and b. + function geoVecAngle(a, b) { + return Math.atan2(b[1] - a[1], b[0] - a[0]); + } - type: 'changeset', + // dot product + function geoVecDot(a, b, origin) { + origin = origin || [0, 0]; + return (a[0] - origin[0]) * (b[0] - origin[0]) + + (a[1] - origin[1]) * (b[1] - origin[1]); + } + // 2D cross product of OA and OB vectors, returns magnitude of Z vector + // Returns a positive value, if OAB makes a counter-clockwise turn, + // negative for clockwise turn, and zero if the points are collinear. + function geoVecCross(a, b, origin) { + origin = origin || [0, 0]; + return (a[0] - origin[0]) * (b[1] - origin[1]) - + (a[1] - origin[1]) * (b[0] - origin[0]); + } - extent: function() { - return new geoExtent$$1(); - }, + // Return the counterclockwise angle in the range (-pi, pi) + // between the positive X axis and the line intersecting a and b. + function geoAngle(a, b, projection) { + return geoVecAngle(projection(a.loc), projection(b.loc)); + } + function geoEdgeEqual(a, b) { + return (a[0] === b[0] && a[1] === b[1]) || + (a[0] === b[1] && a[1] === b[0]); + } - geometry: function() { - return 'changeset'; - }, + // Rotate all points counterclockwise around a pivot point by given angle + function geoRotate(points, angle, around) { + return points.map(function(point) { + var radial = geoVecSubtract(point, around); + return [ + radial[0] * Math.cos(angle) - radial[1] * Math.sin(angle) + around[0], + radial[0] * Math.sin(angle) + radial[1] * Math.cos(angle) + around[1] + ]; + }); + } - asJXON: function() { - return { - osm: { - changeset: { - tag: map$3(this.tags, function(value, key) { - return { '@k': key, '@v': value }; - }), - '@version': 0.6, - '@generator': 'iD' - } - } - }; - }, + // Choose the edge with the minimal distance from `point` to its orthogonal + // projection onto that edge, if such a projection exists, or the distance to + // the closest vertex on that edge. Returns an object with the `index` of the + // chosen edge, the chosen `loc` on that edge, and the `distance` to to it. + function geoChooseEdge(nodes, point, projection, activeID) { + var dist = geoVecLength; + var points = nodes.map(function(n) { return projection(n.loc); }); + var ids = nodes.map(function(n) { return n.id; }); + var min = Infinity; + var idx; + var loc; + + for (var i = 0; i < points.length - 1; i++) { + if (ids[i] === activeID || ids[i + 1] === activeID) continue; + + var o = points[i]; + var s = geoVecSubtract(points[i + 1], o); + var v = geoVecSubtract(point, o); + var proj = geoVecDot(v, s) / geoVecDot(s, s); + var p; + + if (proj < 0) { + p = o; + } else if (proj > 1) { + p = points[i + 1]; + } else { + p = [o[0] + proj * s[0], o[1] + proj * s[1]]; + } + var d = dist(p, point); + if (d < min) { + min = d; + idx = i + 1; + loc = projection.invert(p); + } + } - // Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange) - // XML. Returns a string. - osmChangeJXON: function(changes) { - var changeset_id = this.id; + if (idx !== undefined) { + return { index: idx, distance: min, loc: loc }; + } else { + return null; + } + } - function nest(x, order) { - var groups = {}; - for (var i = 0; i < x.length; i++) { - var tagName = Object.keys(x[i])[0]; - if (!groups[tagName]) groups[tagName] = []; - groups[tagName].push(x[i][tagName]); - } - var ordered = {}; - order.forEach(function(o) { - if (groups[o]) ordered[o] = groups[o]; - }); - return ordered; - } + // Test active (dragged or drawing) segments against inactive segments + // This is used to test e.g. multipolygon rings that cross + // `activeNodes` is the ring containing the activeID being dragged. + // `inactiveNodes` is the other ring to test against + function geoHasLineIntersections(activeNodes, inactiveNodes, activeID) { + var actives = []; + var inactives = []; + var j, k, n1, n2, segment; - // sort relations in a changeset by dependencies - function sort(changes) { + // gather active segments (only segments in activeNodes that contain the activeID) + for (j = 0; j < activeNodes.length - 1; j++) { + n1 = activeNodes[j]; + n2 = activeNodes[j+1]; + segment = [n1.loc, n2.loc]; + if (n1.id === activeID || n2.id === activeID) { + actives.push(segment); + } + } - // find a referenced relation in the current changeset - function resolve(item) { - return find$1(relations, function(relation) { - return item.keyAttributes.type === 'relation' - && item.keyAttributes.ref === relation['@id']; - }); - } + // gather inactive segments + for (j = 0; j < inactiveNodes.length - 1; j++) { + n1 = inactiveNodes[j]; + n2 = inactiveNodes[j+1]; + segment = [n1.loc, n2.loc]; + inactives.push(segment); + } - // a new item is an item that has not been already processed - function isNew(item) { - return !sorted[ item['@id'] ] && !find$1(processing, function(proc) { - return proc['@id'] === item['@id']; - }); - } + // test + for (j = 0; j < actives.length; j++) { + for (k = 0; k < inactives.length; k++) { + var p = actives[j]; + var q = inactives[k]; + var hit = geoLineIntersection(p, q); + if (hit) { + return true; + } + } + } - var processing = [], - sorted = {}, - relations = changes.relation; - - if (!relations) return changes; - - for (var i = 0; i < relations.length; i++) { - var relation = relations[i]; - - // skip relation if already sorted - if (!sorted[relation['@id']]) { - processing.push(relation); - } - - while (processing.length > 0) { - var next = processing[0], - deps = filter(compact(next.member.map(resolve)), isNew); - if (deps.length === 0) { - sorted[next['@id']] = next; - processing.shift(); - } else { - processing = deps.concat(processing); - } - } - } + return false; + } - changes.relation = values$1(sorted); - return changes; - } - function rep(entity) { - return entity.asJXON(changeset_id); - } + // Test active (dragged or drawing) segments against inactive segments + // This is used to test whether a way intersects with itself. + function geoHasSelfIntersections(nodes, activeID) { + var actives = []; + var inactives = []; + var j, k; - return { - osmChange: { - '@version': 0.6, - '@generator': 'iD', - 'create': sort(nest(changes.created.map(rep), ['node', 'way', 'relation'])), - 'modify': nest(changes.modified.map(rep), ['node', 'way', 'relation']), - 'delete': assignIn(nest(changes.deleted.map(rep), ['relation', 'way', 'node']), { '@if-unused': true }) - } - }; - }, + // group active and passive segments along the nodes + for (j = 0; j < nodes.length - 1; j++) { + var n1 = nodes[j]; + var n2 = nodes[j+1]; + var segment = [n1.loc, n2.loc]; + if (n1.id === activeID || n2.id === activeID) { + actives.push(segment); + } else { + inactives.push(segment); + } + } + // test + for (j = 0; j < actives.length; j++) { + for (k = 0; k < inactives.length; k++) { + var p = actives[j]; + var q = inactives[k]; + // skip if segments share an endpoint + if (geoVecEqual(p[1], q[0]) || geoVecEqual(p[0], q[1]) || + geoVecEqual(p[0], q[0]) || geoVecEqual(p[1], q[1]) ) { + continue; + } + + var hit = geoLineIntersection(p, q); + if (hit) { + var epsilon = 1e-8; + // skip if the hit is at the segment's endpoint + if (geoVecEqual(p[1], hit, epsilon) || geoVecEqual(p[0], hit, epsilon) || + geoVecEqual(q[1], hit, epsilon) || geoVecEqual(q[0], hit, epsilon) ) { + continue; + } else { + return true; + } + } + } + } - asGeoJSON: function() { - return {}; - } + return false; + } -}); -/** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurrence of each element - * is kept. The order of result values is determined by the order they occur - * in the array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniq([2, 1, 2]); - * // => [2, 1] - */ -function uniq(array) { - return (array && array.length) ? baseUniq(array) : []; -} + // Return the intersection point of 2 line segments. + // From https://github.com/pgkelley4/line-segments-intersect + // This uses the vector cross product approach described below: + // http://stackoverflow.com/a/565282/786339 + function geoLineIntersection(a, b) { + var p = [a[0][0], a[0][1]]; + var p2 = [a[1][0], a[1][1]]; + var q = [b[0][0], b[0][1]]; + var q2 = [b[1][0], b[1][1]]; + var r = geoVecSubtract(p2, p); + var s = geoVecSubtract(q2, q); + var uNumerator = geoVecCross(geoVecSubtract(q, p), r); + var denominator = geoVecCross(r, s); -function osmNode() { - if (!(this instanceof osmNode)) { - return (new osmNode()).initialize(arguments); - } else if (arguments.length) { - this.initialize(arguments); - } -} + if (uNumerator && denominator) { + var u = uNumerator / denominator; + var t = geoVecCross(geoVecSubtract(q, p), s) / denominator; -osmEntity$$1.node = osmNode; + if ((t >= 0) && (t <= 1) && (u >= 0) && (u <= 1)) { + return geoVecInterp(p, p2, t); + } + } -osmNode.prototype = Object.create(osmEntity$$1.prototype); + return null; + } -assignIn(osmNode.prototype, { - type: 'node', + function geoPathIntersections(path1, path2) { + var intersections = []; + for (var i = 0; i < path1.length - 1; i++) { + for (var j = 0; j < path2.length - 1; j++) { + var a = [ path1[i], path1[i+1] ]; + var b = [ path2[j], path2[j+1] ]; + var hit = geoLineIntersection(a, b); + if (hit) { + intersections.push(hit); + } + } + } + return intersections; + } + + function geoPathHasIntersections(path1, path2) { + for (var i = 0; i < path1.length - 1; i++) { + for (var j = 0; j < path2.length - 1; j++) { + var a = [ path1[i], path1[i+1] ]; + var b = [ path2[j], path2[j+1] ]; + var hit = geoLineIntersection(a, b); + if (hit) { + return true; + } + } + } + return false; + } - extent: function() { - return new geoExtent$$1(this.loc); - }, + // Return whether point is contained in polygon. + // + // `point` should be a 2-item array of coordinates. + // `polygon` should be an array of 2-item arrays of coordinates. + // + // From https://github.com/substack/point-in-polygon. + // ray-casting algorithm based on + // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html + // + function geoPointInPolygon(point, polygon) { + var x = point[0]; + var y = point[1]; + var inside = false; + + for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { + var xi = polygon[i][0]; + var yi = polygon[i][1]; + var xj = polygon[j][0]; + var yj = polygon[j][1]; + + var intersect = ((yi > y) !== (yj > y)) && + (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + if (intersect) inside = !inside; + } + return inside; + } - geometry: function(graph) { - return graph.transient(this, 'geometry', function() { - return graph.isPoi(this) ? 'point' : 'vertex'; - }); - }, + function geoPolygonContainsPolygon(outer, inner) { + return every(inner, function(point) { + return geoPointInPolygon(point, outer); + }); + } - move: function(loc) { - return this.update({loc: loc}); - }, + function geoPolygonIntersectsPolygon(outer, inner, checkSegments) { + function testPoints(outer, inner) { + return some(inner, function(point) { + return geoPointInPolygon(point, outer); + }); + } - isDegenerate: function() { - return !( - Array.isArray(this.loc) && this.loc.length === 2 && - this.loc[0] >= -180 && this.loc[0] <= 180 && - this.loc[1] >= -90 && this.loc[1] <= 90 - ); - }, + return testPoints(outer, inner) || (!!checkSegments && geoPathHasIntersections(outer, inner)); + } - // Inspect tags and geometry to determine which direction(s) this node/vertex points - directions: function(resolver, projection) { - var val; - var i; + function geoPathLength(path) { + var length = 0; + for (var i = 0; i < path.length - 1; i++) { + length += geoVecLength(path[i], path[i + 1]); + } + return length; + } - // which tag to use? - if (this.isHighwayIntersection(resolver) && (this.tags.stop || '').toLowerCase() === 'all') { - // all-way stop tag on a highway intersection - val = 'all'; - } else { - // generic direction tag - val = (this.tags.direction || '').toLowerCase(); - - // better suffix-style direction tag - var re = /:direction$/i; - var keys = Object.keys(this.tags); - for (i = 0; i < keys.length; i++) { - if (re.test(keys[i])) { - val = this.tags[keys[i]].toLowerCase(); - break; - } - } - } - if (val === '') return []; - - var cardinal = { - north: 0, n: 0, - northnortheast: 22, nne: 22, - northeast: 45, ne: 45, - eastnortheast: 67, ene: 67, - east: 90, e: 90, - eastsoutheast: 112, ese: 112, - southeast: 135, se: 135, - southsoutheast: 157, sse: 157, - south: 180, s: 180, - southsouthwest: 202, ssw: 202, - southwest: 225, sw: 225, - westsouthwest: 247, wsw: 247, - west: 270, w: 270, - westnorthwest: 292, wnw: 292, - northwest: 315, nw: 315, - northnorthwest: 337, nnw: 337 - }; + // If the given point is at the edge of the padded viewport, + // return a vector that will nudge the viewport in that direction + function geoViewportEdge(point, dimensions) { + var pad = [80, 20, 50, 20]; // top, right, bottom, left + var x = 0; + var y = 0; + if (point[0] > dimensions[0] - pad[1]) + x = -10; + if (point[0] < pad[3]) + x = 10; + if (point[1] > dimensions[1] - pad[2]) + y = -10; + if (point[1] < pad[0]) + y = 10; - var values = val.split(';'); - var results = []; + if (x || y) { + return [x, y]; + } else { + return null; + } + } - values.forEach(function(v) { - // swap cardinal for numeric directions - if (cardinal[v] !== undefined) { - v = cardinal[v]; - } + /* + Bypasses features of D3's default projection stream pipeline that are unnecessary: + * Antimeridian clipping + * Spherical rotation + * Resampling + */ + function geoRawMercator() { + var project = mercatorRaw; + var k = 512 / Math.PI; // scale + var x = 0; + var y = 0; // translate + var clipExtent = [[0, 0], [0, 0]]; - // numeric direction - just add to results - if (v !== '' && !isNaN(+v)) { - results.push(+v); - return; - } - // string direction - inspect parent ways - var lookBackward = - (this.tags['traffic_sign:backward'] || v === 'backward' || v === 'both' || v === 'all'); - var lookForward = - (this.tags['traffic_sign:forward'] || v === 'forward' || v === 'both' || v === 'all'); - - if (!lookForward && !lookBackward) return; - - var nodeIds = {}; - resolver.parentWays(this).forEach(function(parent) { - var nodes = parent.nodes; - for (i = 0; i < nodes.length; i++) { - if (nodes[i] === this.id) { // match current entity - if (lookForward && i > 0) { - nodeIds[nodes[i - 1]] = true; // look back to prev node - } - if (lookBackward && i < nodes.length - 1) { - nodeIds[nodes[i + 1]] = true; // look ahead to next node - } - } - } - }, this); - - Object.keys(nodeIds).forEach(function(nodeId) { - // +90 because geoAngle returns angle from X axis, not Y (north) - results.push( - (geoAngle(this, resolver.entity(nodeId), projection) * (180 / Math.PI)) + 90 - ); - }, this); - - }, this); - - return uniq(results); - }, + function projection$$1(point) { + point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180); + return [point[0] * k + x, y - point[1] * k]; + } - isEndpoint: function(resolver) { - return resolver.transient(this, 'isEndpoint', function() { - var id = this.id; - return resolver.parentWays(this).filter(function(parent) { - return !parent.isClosed() && !!parent.affix(id); - }).length > 0; - }); - }, + projection$$1.invert = function(point) { + point = project.invert((point[0] - x) / k, (y - point[1]) / k); + return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI]; + }; - isConnected: function(resolver) { - return resolver.transient(this, 'isConnected', function() { - var parents = resolver.parentWays(this); + projection$$1.scale = function(_) { + if (!arguments.length) return k; + k = +_; + return projection$$1; + }; - function isLine(entity) { - return entity.geometry(resolver) === 'line' && - entity.hasInterestingTags(); - } - // vertex is connected to multiple parent lines - if (parents.length > 1 && some(parents, isLine)) { - return true; + projection$$1.translate = function(_) { + if (!arguments.length) return [x, y]; + x = +_[0]; + y = +_[1]; + return projection$$1; + }; - } else if (parents.length === 1) { - var way = parents[0], - nodes = way.nodes.slice(); - if (way.isClosed()) { nodes.pop(); } // ignore connecting node if closed - // return true if vertex appears multiple times (way is self intersecting) - return nodes.indexOf(this.id) !== nodes.lastIndexOf(this.id); - } + projection$$1.clipExtent = function(_) { + if (!arguments.length) return clipExtent; + clipExtent = _; + return projection$$1; + }; - return false; - }); - }, + projection$$1.transform = function(obj) { + if (!arguments.length) return identity$7.translate(x, y).scale(k); + x = +obj.x; + y = +obj.y; + k = +obj.k; + return projection$$1; + }; - isIntersection: function(resolver) { - return resolver.transient(this, 'isIntersection', function() { - return resolver.parentWays(this).filter(function(parent) { - return (parent.tags.highway || - parent.tags.waterway || - parent.tags.railway || - parent.tags.aeroway) && - parent.geometry(resolver) === 'line'; - }).length > 1; - }); - }, + projection$$1.stream = d3_geoTransform({ + point: function(x, y) { + var vec = projection$$1([x, y]); + this.stream.point(vec[0], vec[1]); + } + }).stream; - isHighwayIntersection: function(resolver) { - return resolver.transient(this, 'isHighwayIntersection', function() { - return resolver.parentWays(this).filter(function(parent) { - return parent.tags.highway && parent.geometry(resolver) === 'line'; - }).length > 1; - }); - }, + return projection$$1; + } - isOnAddressLine: function(resolver) { - return resolver.transient(this, 'isOnAddressLine', function() { - return resolver.parentWays(this).filter(function(parent) { - return parent.tags.hasOwnProperty('addr:interpolation') && - parent.geometry(resolver) === 'line'; - }).length > 0; - }); - }, + function osmChangeset() { + if (!(this instanceof osmChangeset)) { + return (new osmChangeset()).initialize(arguments); + } else if (arguments.length) { + this.initialize(arguments); + } + } - asJXON: function(changeset_id) { - var r = { - node: { - '@id': this.osmId(), - '@lon': this.loc[0], - '@lat': this.loc[1], - '@version': (this.version || 0), - tag: map$3(this.tags, function(v, k) { - return { keyAttributes: { k: k, v: v } }; - }) - } - }; - if (changeset_id) r.node['@changeset'] = changeset_id; - return r; - }, + osmEntity$$1.changeset = osmChangeset; + osmChangeset.prototype = Object.create(osmEntity$$1.prototype); - asGeoJSON: function() { - return { - type: 'Point', - coordinates: this.loc - }; - } -}); - -/** Error message constants. */ -var FUNC_ERROR_TEXT$1 = 'Expected a function'; - -/** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ -function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT$1); - } - return function() { - var args = arguments; - switch (args.length) { - case 0: return !predicate.call(this); - case 1: return !predicate.call(this, args[0]); - case 2: return !predicate.call(this, args[0], args[1]); - case 3: return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; -} - -/** - * The opposite of `_.filter`; this method returns the elements of `collection` - * that `predicate` does **not** return truthy for. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.filter - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true } - * ]; - * - * _.reject(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.reject(users, { 'age': 40, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.reject(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.reject(users, 'active'); - * // => objects for ['barney'] - */ -function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, negate(baseIteratee(predicate, 3))); -} - -/** - * An alternative to `_.reduce`; this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable string keyed properties thru `iteratee`, with each invocation - * potentially mutating the `accumulator` object. If `accumulator` is not - * provided, a new object with the same `[[Prototype]]` will be used. The - * iteratee is invoked with four arguments: (accumulator, value, key, object). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @returns {*} Returns the accumulated value. - * @example - * - * _.transform([2, 3, 4], function(result, n) { - * result.push(n *= n); - * return n % 2 == 0; - * }, []); - * // => [4, 9] - * - * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } - */ -function transform$1(object, iteratee, accumulator) { - var isArr = isArray(object), - isArrLike = isArr || isBuffer(object) || isTypedArray(object); - - iteratee = baseIteratee(iteratee, 4); - if (accumulator == null) { - var Ctor = object && object.constructor; - if (isArrLike) { - accumulator = isArr ? new Ctor : []; - } - else if (isObject(object)) { - accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; - } - else { - accumulator = {}; - } - } - (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { - return iteratee(accumulator, value, index, object); - }); - return accumulator; -} - -/* - Order the nodes of a way in reverse order and reverse any direction dependent tags - other than `oneway`. (We assume that correcting a backwards oneway is the primary - reason for reversing a way.) - - The following transforms are performed: - - Keys: - *:right=* ⟺ *:left=* - *:forward=* ⟺ *:backward=* - direction=up ⟺ direction=down - incline=up ⟺ incline=down - *=right ⟺ *=left - - Relation members: - role=forward ⟺ role=backward - role=north ⟺ role=south - role=east ⟺ role=west - - In addition, numeric-valued `incline` tags are negated. - - The JOSM implementation was used as a guide, but transformations that were of unclear benefit - or adjusted tags that don't seem to be used in practice were omitted. - - Also, each node on the way is examined for its own tags and the following transformations are performed - in order to ensure associated nodes (eg a Stop Sign) is also reversed - - Node Keys: - *direction=forward ⟺ *direction=backward - *direction=left ⟺ *direction=right - *:forward=* ⟺ *:backward=* - *:left=* ⟺ *:right=* - - References: - http://wiki.openstreetmap.org/wiki/Forward_%26_backward,_left_%26_right - http://wiki.openstreetmap.org/wiki/Key:direction#Steps - http://wiki.openstreetmap.org/wiki/Key:incline - http://wiki.openstreetmap.org/wiki/Route#Members - http://josm.openstreetmap.de/browser/josm/trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java - http://wiki.openstreetmap.org/wiki/Tag:highway%3Dstop - http://wiki.openstreetmap.org/wiki/Key:traffic_sign#On_a_way_or_area - */ -function actionReverse(wayId, options) { - var replacements = [ - [/:right$/, ':left'], [/:left$/, ':right'], - [/:forward$/, ':backward'], [/:backward$/, ':forward'] - ], - numeric = /^([+\-]?)(?=[\d.])/, - roleReversals = { - forward: 'backward', - backward: 'forward', - north: 'south', - south: 'north', - east: 'west', - west: 'east' - }; + assignIn(osmChangeset.prototype, { + type: 'changeset', - function reverseKey(key) { - for (var i = 0; i < replacements.length; ++i) { - var replacement = replacements[i]; - if (replacement[0].test(key)) { - return key.replace(replacement[0], replacement[1]); - } - } - return key; - } + extent: function() { + return new geoExtent$$1(); + }, - function reverseValue(key, value) { - if (key === 'incline' && numeric.test(value)) { - return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; }); - } else if (key === 'incline' || key === 'direction') { - return {up: 'down', down: 'up'}[value] || value; - } else if (options && options.reverseOneway && key === 'oneway') { - return {yes: '-1', '1': '-1', '-1': 'yes'}[value] || value; - } else { - return {left: 'right', right: 'left'}[value] || value; - } - } + geometry: function() { + return 'changeset'; + }, - function reverseDirectionTags(node) { - // Update the direction based tags as appropriate then return an updated node - return node.update({tags: transform$1(node.tags, function(acc, tagValue, tagKey) { - // See if this is a direction tag and reverse (or use existing value if not recognised) - var re = /direction$/; - if (re.test(tagKey)) { - acc[tagKey] = {forward: 'backward', backward: 'forward', left: 'right', right: 'left'}[tagValue] || tagValue; - } else { - // Use the reverseKey method to cater for situations such as traffic_sign:forward=stop - // This will pass through other tags unchanged - acc[reverseKey(tagKey)] = tagValue; - } - return acc; - }, {})}); - } + asJXON: function() { + return { + osm: { + changeset: { + tag: map$3(this.tags, function(value, key) { + return { '@k': key, '@v': value }; + }), + '@version': 0.6, + '@generator': 'iD' + } + } + }; + }, - function reverseTagsOnNodes(graph, nodeIds) { - // Reverse the direction of appropriate tags attached to the nodes (#3076) - return nodeIds - // Get each node from the graph - .map(function(nodeId) { return graph.entity(nodeId);}) - // Check tags on the node, if there aren't any, we can skip - .filter(function(existingNode) { return existingNode.tags !== undefined;}) - // Get a new version of each node with the appropriate tags reversed - .map(function(existingNode) { return reverseDirectionTags(existingNode);}) - // Chain together consecutive updates to the graph for each updated node and return - .reduce(function (accGraph, value) { return accGraph.replace(value); }, graph); - } + // Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange) + // XML. Returns a string. + osmChangeJXON: function(changes) { + var changeset_id = this.id; + + function nest(x, order) { + var groups = {}; + for (var i = 0; i < x.length; i++) { + var tagName = Object.keys(x[i])[0]; + if (!groups[tagName]) groups[tagName] = []; + groups[tagName].push(x[i][tagName]); + } + var ordered = {}; + order.forEach(function(o) { + if (groups[o]) ordered[o] = groups[o]; + }); + return ordered; + } - return function(graph) { - var way = graph.entity(wayId), - nodes = way.nodes.slice().reverse(), - tags = {}, key, role; - for (key in way.tags) { - tags[reverseKey(key)] = reverseValue(key, way.tags[key]); - } + // sort relations in a changeset by dependencies + function sort(changes) { + + // find a referenced relation in the current changeset + function resolve(item) { + return find$1(relations, function(relation) { + return item.keyAttributes.type === 'relation' + && item.keyAttributes.ref === relation['@id']; + }); + } + + // a new item is an item that has not been already processed + function isNew(item) { + return !sorted[ item['@id'] ] && !find$1(processing, function(proc) { + return proc['@id'] === item['@id']; + }); + } + + var processing = [], + sorted = {}, + relations = changes.relation; + + if (!relations) return changes; + + for (var i = 0; i < relations.length; i++) { + var relation = relations[i]; + + // skip relation if already sorted + if (!sorted[relation['@id']]) { + processing.push(relation); + } + + while (processing.length > 0) { + var next = processing[0], + deps = filter(compact(next.member.map(resolve)), isNew); + if (deps.length === 0) { + sorted[next['@id']] = next; + processing.shift(); + } else { + processing = deps.concat(processing); + } + } + } + + changes.relation = values$1(sorted); + return changes; + } - graph.parentRelations(way).forEach(function(relation) { - relation.members.forEach(function(member, index) { - if (member.id === way.id && (role = roleReversals[member.role])) { - relation = relation.updateMember({role: role}, index); - graph = graph.replace(relation); - } - }); - }); + function rep(entity) { + return entity.asJXON(changeset_id); + } - // Reverse any associated directions on nodes on the way and then replace - // the way itself with the reversed node ids and updated way tags - return reverseTagsOnNodes(graph, nodes).replace(way.update({nodes: nodes, tags: tags})); - }; -} - -/** `Object#toString` result references. */ -var numberTag$4 = '[object Number]'; - -/** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ -function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && baseGetTag(value) == numberTag$4); -} - -/** `Object#toString` result references. */ -var stringTag$4 = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag$4); -} - -/** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ -function isNaN$1(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; -} - -function osmLanes(entity) { - if (entity.type !== 'way') return null; - if (!entity.tags.highway) return null; - - var tags = entity.tags; - var isOneWay = entity.isOneWay(); - var laneCount = getLaneCount(tags, isOneWay); - var maxspeed = parseMaxspeed(tags); - - var laneDirections = parseLaneDirections(tags, isOneWay, laneCount); - var forward = laneDirections.forward; - var backward = laneDirections.backward; - var bothways = laneDirections.bothways; - - // parse the piped string 'x|y|z' format - var turnLanes = {}; - turnLanes.unspecified = parseTurnLanes(tags['turn:lanes']); - turnLanes.forward = parseTurnLanes(tags['turn:lanes:forward']); - turnLanes.backward = parseTurnLanes(tags['turn:lanes:backward']); - - var maxspeedLanes = {}; - maxspeedLanes.unspecified = parseMaxspeedLanes(tags['maxspeed:lanes'], maxspeed); - maxspeedLanes.forward = parseMaxspeedLanes(tags['maxspeed:lanes:forward'], maxspeed); - maxspeedLanes.backward = parseMaxspeedLanes(tags['maxspeed:lanes:backward'], maxspeed); - - var psvLanes = {}; - psvLanes.unspecified = parseMiscLanes(tags['psv:lanes']); - psvLanes.forward = parseMiscLanes(tags['psv:lanes:forward']); - psvLanes.backward = parseMiscLanes(tags['psv:lanes:backward']); - - var busLanes = {}; - busLanes.unspecified = parseMiscLanes(tags['bus:lanes']); - busLanes.forward = parseMiscLanes(tags['bus:lanes:forward']); - busLanes.backward = parseMiscLanes(tags['bus:lanes:backward']); - - var taxiLanes = {}; - taxiLanes.unspecified = parseMiscLanes(tags['taxi:lanes']); - taxiLanes.forward = parseMiscLanes(tags['taxi:lanes:forward']); - taxiLanes.backward = parseMiscLanes(tags['taxi:lanes:backward']); - - var hovLanes = {}; - hovLanes.unspecified = parseMiscLanes(tags['hov:lanes']); - hovLanes.forward = parseMiscLanes(tags['hov:lanes:forward']); - hovLanes.backward = parseMiscLanes(tags['hov:lanes:backward']); - - var hgvLanes = {}; - hgvLanes.unspecified = parseMiscLanes(tags['hgv:lanes']); - hgvLanes.forward = parseMiscLanes(tags['hgv:lanes:forward']); - hgvLanes.backward = parseMiscLanes(tags['hgv:lanes:backward']); - - var bicyclewayLanes = {}; - bicyclewayLanes.unspecified = parseBicycleWay(tags['bicycleway:lanes']); - bicyclewayLanes.forward = parseBicycleWay(tags['bicycleway:lanes:forward']); - bicyclewayLanes.backward = parseBicycleWay(tags['bicycleway:lanes:backward']); - - var lanesObj = { - forward: [], - backward: [], - unspecified: [] - }; + return { + osmChange: { + '@version': 0.6, + '@generator': 'iD', + 'create': sort(nest(changes.created.map(rep), ['node', 'way', 'relation'])), + 'modify': nest(changes.modified.map(rep), ['node', 'way', 'relation']), + 'delete': assignIn(nest(changes.deleted.map(rep), ['relation', 'way', 'node']), { '@if-unused': true }) + } + }; + }, - // map forward/backward/unspecified of each lane type to lanesObj - mapToLanesObj(lanesObj, turnLanes, 'turnLane'); - mapToLanesObj(lanesObj, maxspeedLanes, 'maxspeed'); - mapToLanesObj(lanesObj, psvLanes, 'psv'); - mapToLanesObj(lanesObj, busLanes, 'bus'); - mapToLanesObj(lanesObj, taxiLanes, 'taxi'); - mapToLanesObj(lanesObj, hovLanes, 'hov'); - mapToLanesObj(lanesObj, hgvLanes, 'hgv'); - mapToLanesObj(lanesObj, bicyclewayLanes, 'bicycleway'); - return { - metadata: { - count: laneCount, - oneway: isOneWay, - forward: forward, - backward: backward, - bothways: bothways, - turnLanes: turnLanes, - maxspeed: maxspeed, - maxspeedLanes: maxspeedLanes, - psvLanes: psvLanes, - busLanes: busLanes, - taxiLanes: taxiLanes, - hovLanes: hovLanes, - hgvLanes: hgvLanes, - bicyclewayLanes: bicyclewayLanes - }, - lanes: lanesObj - }; -} + asGeoJSON: function() { + return {}; + } + }); -function getLaneCount(tags, isOneWay) { - var count; - if (tags.lanes) { - count = parseInt(tags.lanes, 10); - if (count > 0) { - return count; - } - } + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + function osmNode() { + if (!(this instanceof osmNode)) { + return (new osmNode()).initialize(arguments); + } else if (arguments.length) { + this.initialize(arguments); + } + } - switch (tags.highway) { - case 'trunk': - case 'motorway': - count = isOneWay ? 2 : 4; - break; - default: - count = isOneWay ? 1 : 2; - break; - } + osmEntity$$1.node = osmNode; - return count; -} + osmNode.prototype = Object.create(osmEntity$$1.prototype); + assignIn(osmNode.prototype, { -function parseMaxspeed(tags) { - var maxspeed = tags.maxspeed; - if (isNumber(maxspeed)) return maxspeed; - if (isString(maxspeed)) { - maxspeed = maxspeed.match(/^([0-9][\.0-9]+?)(?:[ ]?(?:km\/h|kmh|kph|mph|knots))?$/g); - if (!maxspeed) return; - return parseInt(maxspeed, 10); - } -} + type: 'node', -function parseLaneDirections(tags, isOneWay, laneCount) { - var forward = parseInt(tags['lanes:forward'], 10); - var backward = parseInt(tags['lanes:backward'], 10); - var bothways = parseInt(tags['lanes:both_ways'], 10) > 0 ? 1 : 0; + extent: function() { + return new geoExtent$$1(this.loc); + }, - if (parseInt(tags.oneway, 10) === -1) { - forward = 0; - bothways = 0; - backward = laneCount; - } - else if (isOneWay) { - forward = laneCount; - bothways = 0; - backward = 0; - } - else if (isNaN$1(forward) && isNaN$1(backward)) { - backward = Math.floor((laneCount - bothways) / 2); - forward = laneCount - bothways - backward; - } - else if (isNaN$1(forward)) { - if (backward > laneCount - bothways) { - backward = laneCount - bothways; - } - forward = laneCount - bothways - backward; - } - else if (isNaN$1(backward)) { - if (forward > laneCount - bothways) { - forward = laneCount - bothways; - } - backward = laneCount - bothways - forward; - } - return { - forward: forward, - backward: backward, - bothways: bothways - }; -} + geometry: function(graph) { + return graph.transient(this, 'geometry', function() { + return graph.isPoi(this) ? 'point' : 'vertex'; + }); + }, -function parseTurnLanes(tag){ - if (!tag) return; - var validValues = [ - 'left', 'slight_left', 'sharp_left', 'through', 'right', 'slight_right', - 'sharp_right', 'reverse', 'merge_to_left', 'merge_to_right', 'none' - ]; + move: function(loc) { + return this.update({loc: loc}); + }, - return tag.split('|') - .map(function (s) { - if (s === '') s = 'none'; - return s.split(';') - .map(function (d) { - return validValues.indexOf(d) === -1 ? 'unknown': d; - }); - }); -} + isDegenerate: function() { + return !( + Array.isArray(this.loc) && this.loc.length === 2 && + this.loc[0] >= -180 && this.loc[0] <= 180 && + this.loc[1] >= -90 && this.loc[1] <= 90 + ); + }, -function parseMaxspeedLanes(tag, maxspeed) { - if (!tag) return; - return tag.split('|') - .map(function (s) { - if (s === 'none') return s; - var m = parseInt(s, 10); - if (s === '' || m === maxspeed) return null; - return isNaN$1(m) ? 'unknown': m; - }); -} + // Inspect tags and geometry to determine which direction(s) this node/vertex points + directions: function(resolver, projection) { + var val; + var i; + // which tag to use? + if (this.isHighwayIntersection(resolver) && (this.tags.stop || '').toLowerCase() === 'all') { + // all-way stop tag on a highway intersection + val = 'all'; + } else { + // generic direction tag + val = (this.tags.direction || '').toLowerCase(); + + // better suffix-style direction tag + var re = /:direction$/i; + var keys = Object.keys(this.tags); + for (i = 0; i < keys.length; i++) { + if (re.test(keys[i])) { + val = this.tags[keys[i]].toLowerCase(); + break; + } + } + } -function parseMiscLanes(tag) { - if (!tag) return; + if (val === '') return []; + + var cardinal = { + north: 0, n: 0, + northnortheast: 22, nne: 22, + northeast: 45, ne: 45, + eastnortheast: 67, ene: 67, + east: 90, e: 90, + eastsoutheast: 112, ese: 112, + southeast: 135, se: 135, + southsoutheast: 157, sse: 157, + south: 180, s: 180, + southsouthwest: 202, ssw: 202, + southwest: 225, sw: 225, + westsouthwest: 247, wsw: 247, + west: 270, w: 270, + westnorthwest: 292, wnw: 292, + northwest: 315, nw: 315, + northnorthwest: 337, nnw: 337 + }; - var validValues = [ - 'yes', 'no', 'designated' - ]; - return tag.split('|') - .map(function (s) { - if (s === '') s = 'no'; - return validValues.indexOf(s) === -1 ? 'unknown': s; - }); -} + var values = val.split(';'); + var results = []; + + values.forEach(function(v) { + // swap cardinal for numeric directions + if (cardinal[v] !== undefined) { + v = cardinal[v]; + } + + // numeric direction - just add to results + if (v !== '' && !isNaN(+v)) { + results.push(+v); + return; + } + + // string direction - inspect parent ways + var lookBackward = + (this.tags['traffic_sign:backward'] || v === 'backward' || v === 'both' || v === 'all'); + var lookForward = + (this.tags['traffic_sign:forward'] || v === 'forward' || v === 'both' || v === 'all'); + + if (!lookForward && !lookBackward) return; + + var nodeIds = {}; + resolver.parentWays(this).forEach(function(parent) { + var nodes = parent.nodes; + for (i = 0; i < nodes.length; i++) { + if (nodes[i] === this.id) { // match current entity + if (lookForward && i > 0) { + nodeIds[nodes[i - 1]] = true; // look back to prev node + } + if (lookBackward && i < nodes.length - 1) { + nodeIds[nodes[i + 1]] = true; // look ahead to next node + } + } + } + }, this); + + Object.keys(nodeIds).forEach(function(nodeId) { + // +90 because geoAngle returns angle from X axis, not Y (north) + results.push( + (geoAngle(this, resolver.entity(nodeId), projection) * (180 / Math.PI)) + 90 + ); + }, this); + + }, this); + + return uniq(results); + }, -function parseBicycleWay(tag) { - if (!tag) return; + isEndpoint: function(resolver) { + return resolver.transient(this, 'isEndpoint', function() { + var id = this.id; + return resolver.parentWays(this).filter(function(parent) { + return !parent.isClosed() && !!parent.affix(id); + }).length > 0; + }); + }, - var validValues = [ - 'yes', 'no', 'designated', 'lane' - ]; - return tag.split('|') - .map(function (s) { - if (s === '') s = 'no'; - return validValues.indexOf(s) === -1 ? 'unknown': s; - }); -} + isConnected: function(resolver) { + return resolver.transient(this, 'isConnected', function() { + var parents = resolver.parentWays(this); + function isLine(entity) { + return entity.geometry(resolver) === 'line' && + entity.hasInterestingTags(); + } -function mapToLanesObj(lanesObj, data, key) { - if (data.forward) data.forward.forEach(function(l, i) { - if (!lanesObj.forward[i]) lanesObj.forward[i] = {}; - lanesObj.forward[i][key] = l; - }); - if (data.backward) data.backward.forEach(function(l, i) { - if (!lanesObj.backward[i]) lanesObj.backward[i] = {}; - lanesObj.backward[i][key] = l; - }); - if (data.unspecified) data.unspecified.forEach(function(l, i) { - if (!lanesObj.unspecified[i]) lanesObj.unspecified[i] = {}; - lanesObj.unspecified[i][key] = l; - }); -} - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG$2 = 1, - CLONE_SYMBOLS_FLAG$3 = 4; - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG$2 | CLONE_SYMBOLS_FLAG$3); -} - -/** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ -var now$1 = function() { - return root$2.Date.now(); -}; - -/** Error message constants. */ -var FUNC_ERROR_TEXT$2 = 'Expected a function'; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax$2 = Math.max, - nativeMin = Math.min; - -/** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ -function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT$2); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax$2(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } + // vertex is connected to multiple parent lines + if (parents.length > 1 && some(parents, isLine)) { + return true; - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } + } else if (parents.length === 1) { + var way = parents[0], + nodes = way.nodes.slice(); + if (way.isClosed()) { nodes.pop(); } // ignore connecting node if closed - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - timeWaiting = wait - timeSinceLastCall; + // return true if vertex appears multiple times (way is self intersecting) + return nodes.indexOf(this.id) !== nodes.lastIndexOf(this.id); + } - return maxing - ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) - : timeWaiting; - } + return false; + }); + }, - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } + isIntersection: function(resolver) { + return resolver.transient(this, 'isIntersection', function() { + return resolver.parentWays(this).filter(function(parent) { + return (parent.tags.highway || + parent.tags.waterway || + parent.tags.railway || + parent.tags.aeroway) && + parent.geometry(resolver) === 'line'; + }).length > 1; + }); + }, - function timerExpired() { - var time = now$1(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - function trailingEdge(time) { - timerId = undefined; + isHighwayIntersection: function(resolver) { + return resolver.transient(this, 'isHighwayIntersection', function() { + return resolver.parentWays(this).filter(function(parent) { + return parent.tags.highway && parent.geometry(resolver) === 'line'; + }).length > 1; + }); + }, - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } + isOnAddressLine: function(resolver) { + return resolver.transient(this, 'isOnAddressLine', function() { + return resolver.parentWays(this).filter(function(parent) { + return parent.tags.hasOwnProperty('addr:interpolation') && + parent.geometry(resolver) === 'line'; + }).length > 0; + }); + }, - function flush() { - return timerId === undefined ? result : trailingEdge(now$1()); - } - function debounced() { - var time = now$1(), - isInvoking = shouldInvoke(time); + asJXON: function(changeset_id) { + var r = { + node: { + '@id': this.osmId(), + '@lon': this.loc[0], + '@lat': this.loc[1], + '@version': (this.version || 0), + tag: map$3(this.tags, function(v, k) { + return { keyAttributes: { k: k, v: v } }; + }) + } + }; + if (changeset_id) r.node['@changeset'] = changeset_id; + return r; + }, - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); + asGeoJSON: function() { + return { + type: 'Point', + coordinates: this.loc + }; } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; -} - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : identity$8; -} - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, castFunction(iteratee)); -} - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && baseForOwn(object, castFunction(iteratee)); -} - -// -var translations = Object.create(null); - -var currentLocale = 'en'; -var textDirection = 'ltr'; - -function setLocale(_ ) { - if (translations[_] !== undefined) { - currentLocale = _; - } else if (translations[_.split('-')[0]]) { - currentLocale = _.split('-')[0]; - } -} - -function addTranslation(id , value ) { - translations[id] = value; -} - -/** - * Given a string identifier, try to find that string in the current - * language, and return it. - * - * @param {string} s string identifier - * @returns {string?} locale string - */ -function t(s , o , loc ) { - loc = loc || currentLocale; - - var path = s - .split('.') - .map(function (s) { - return s.replace('', '.'); - }) - .reverse(); - - var rep = translations[loc]; - - while (rep !== undefined && path.length) rep = rep[path.pop()]; - - if (rep !== undefined) { - if (o) - for (var k in o) rep = rep.replace('{' + k + '}', o[k]); - return rep; - } - - if (loc !== 'en') { - return t(s, o, 'en'); - } - - if (o && 'default' in o) { - return o.default; - } - - var missing = 'Missing ' + loc + ' translation: ' + s; - if (typeof console !== 'undefined') console.error(missing); // eslint-disable-line - - return missing; -} - -/** - * Given string 'ltr' or 'rtl', save that setting - * - * @param {string} s ltr or rtl - */ - -function setTextDirection(dir ) { - textDirection = dir; -} - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG$3 = 1, - CLONE_SYMBOLS_FLAG$4 = 4; - -/** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ -function cloneDeepWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_DEEP_FLAG$3 | CLONE_SYMBOLS_FLAG$4, customizer); -} - -/** - * Creates an array of `array` values not included in the other given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * **Note:** Unlike `_.pullAll`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ -var difference = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; -}); - -/** `Object#toString` result references. */ -var mapTag$7 = '[object Map]', - setTag$7 = '[object Set]'; - -/** Used for built-in method references. */ -var objectProto$17 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$14 = objectProto$17.hasOwnProperty; - -/** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ -function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag$1(value); - if (tag == mapTag$7 || tag == setTag$7) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty$14.call(value, key)) { - return false; - } - } - return true; -} - -var detected; - -function utilDetect(force) { - if (detected && !force) return detected; - detected = {}; + }); - var ua = navigator.userAgent, - m = null; + /** Error message constants. */ + var FUNC_ERROR_TEXT$1 = 'Expected a function'; - m = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i); // Edge - if (m !== null) { - detected.browser = m[1]; - detected.version = m[2]; - } - if (!detected.browser) { - m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i); // IE11 - if (m !== null) { - detected.browser = 'msie'; - detected.version = m[1]; - } - } - if (!detected.browser) { - m = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i); // Opera 15+ - if (m !== null) { - detected.browser = 'Opera'; - detected.version = m[2]; - } - } - if (!detected.browser) { - m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i); - if (m !== null) { - detected.browser = m[1]; - detected.version = m[2]; - m = ua.match(/version\/([\.\d]+)/i); - if (m !== null) detected.version = m[1]; - } - } - if (!detected.browser) { - detected.browser = navigator.appName; - detected.version = navigator.appVersion; + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT$1); } + return function() { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; + } - // keep major.minor version only.. - detected.version = detected.version.split(/\W/).slice(0,2).join('.'); + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(baseIteratee(predicate, 3))); + } - if (detected.browser.toLowerCase() === 'msie') { - detected.ie = true; - detected.browser = 'Internet Explorer'; - detected.support = parseFloat(detected.version) >= 11; - } else { - detected.ie = false; - detected.support = true; + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform$1(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = baseIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; + } + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; + } + else { + accumulator = {}; + } } + (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /* + Order the nodes of a way in reverse order and reverse any direction dependent tags + other than `oneway`. (We assume that correcting a backwards oneway is the primary + reason for reversing a way.) + + The following transforms are performed: + + Keys: + *:right=* ⟺ *:left=* + *:forward=* ⟺ *:backward=* + direction=up ⟺ direction=down + incline=up ⟺ incline=down + *=right ⟺ *=left + + Relation members: + role=forward ⟺ role=backward + role=north ⟺ role=south + role=east ⟺ role=west + + In addition, numeric-valued `incline` tags are negated. + + The JOSM implementation was used as a guide, but transformations that were of unclear benefit + or adjusted tags that don't seem to be used in practice were omitted. + + Also, each node on the way is examined for its own tags and the following transformations are performed + in order to ensure associated nodes (eg a Stop Sign) is also reversed + + Node Keys: + *direction=forward ⟺ *direction=backward + *direction=left ⟺ *direction=right + *:forward=* ⟺ *:backward=* + *:left=* ⟺ *:right=* + + References: + http://wiki.openstreetmap.org/wiki/Forward_%26_backward,_left_%26_right + http://wiki.openstreetmap.org/wiki/Key:direction#Steps + http://wiki.openstreetmap.org/wiki/Key:incline + http://wiki.openstreetmap.org/wiki/Route#Members + http://josm.openstreetmap.de/browser/josm/trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java + http://wiki.openstreetmap.org/wiki/Tag:highway%3Dstop + http://wiki.openstreetmap.org/wiki/Key:traffic_sign#On_a_way_or_area + */ + function actionReverse(wayId, options) { + var replacements = [ + [/:right$/, ':left'], [/:left$/, ':right'], + [/:forward$/, ':backward'], [/:backward$/, ':forward'] + ], + numeric = /^([+\-]?)(?=[\d.])/, + roleReversals = { + forward: 'backward', + backward: 'forward', + north: 'south', + south: 'north', + east: 'west', + west: 'east' + }; - // Added due to incomplete svg style support. See #715 - detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 ); - detected.locale = (navigator.language || navigator.userLanguage || 'en-US'); - detected.language = detected.locale.split('-')[0]; + function reverseKey(key) { + for (var i = 0; i < replacements.length; ++i) { + var replacement = replacements[i]; + if (replacement[0].test(key)) { + return key.replace(replacement[0], replacement[1]); + } + } + return key; + } - // Search `navigator.languages` for a better locale.. Prefer the first language, - // unless the second language is a culture-specific version of the first one, see #3842 - if (navigator.languages && navigator.languages.length > 0) { - var code0 = navigator.languages[0], - parts0 = code0.split('-'); - detected.locale = code0; - detected.language = parts0[0]; + function reverseValue(key, value) { + if (key === 'incline' && numeric.test(value)) { + return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; }); + } else if (key === 'incline' || key === 'direction') { + return {up: 'down', down: 'up'}[value] || value; + } else if (options && options.reverseOneway && key === 'oneway') { + return {yes: '-1', '1': '-1', '-1': 'yes'}[value] || value; + } else { + return {left: 'right', right: 'left'}[value] || value; + } + } - if (navigator.languages.length > 1 && parts0.length === 1) { - var code1 = navigator.languages[1], - parts1 = code1.split('-'); - if (parts1[0] === parts0[0]) { - detected.locale = code1; - } - } - } + function reverseDirectionTags(node) { + // Update the direction based tags as appropriate then return an updated node + return node.update({tags: transform$1(node.tags, function(acc, tagValue, tagKey) { + // See if this is a direction tag and reverse (or use existing value if not recognised) + var re = /direction$/; + if (re.test(tagKey)) { + acc[tagKey] = {forward: 'backward', backward: 'forward', left: 'right', right: 'left'}[tagValue] || tagValue; + } else { + // Use the reverseKey method to cater for situations such as traffic_sign:forward=stop + // This will pass through other tags unchanged + acc[reverseKey(tagKey)] = tagValue; + } + return acc; + }, {})}); + } - // Loaded locale is stored in currentLocale - // return that instead (except in the situation where 'en' might override 'en-US') - var loadedLocale = currentLocale || 'en'; - if (loadedLocale !== 'en') { - detected.locale = loadedLocale; - detected.language = detected.locale.split('-')[0]; - } - // detect text direction - var q = utilStringQs(window.location.hash.substring(1)); - var lang = dataLocales[detected.locale]; - if ((lang && lang.rtl) || (q.rtl === 'true')) { - detected.textDirection = 'rtl'; - } else { - detected.textDirection = 'ltr'; - } - setTextDirection(detected.textDirection); + function reverseTagsOnNodes(graph, nodeIds) { + // Reverse the direction of appropriate tags attached to the nodes (#3076) + return nodeIds + // Get each node from the graph + .map(function(nodeId) { return graph.entity(nodeId);}) + // Check tags on the node, if there aren't any, we can skip + .filter(function(existingNode) { return existingNode.tags !== undefined;}) + // Get a new version of each node with the appropriate tags reversed + .map(function(existingNode) { return reverseDirectionTags(existingNode);}) + // Chain together consecutive updates to the graph for each updated node and return + .reduce(function (accGraph, value) { return accGraph.replace(value); }, graph); + } - // detect host - var loc = window.top.location; - var origin = loc.origin; - if (!origin) { // for unpatched IE11 - origin = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port: ''); - } - detected.host = origin + loc.pathname; + return function(graph) { + var way = graph.entity(wayId), + nodes = way.nodes.slice().reverse(), + tags = {}, key, role; - detected.filedrop = (window.FileReader && 'ondrop' in window); + for (key in way.tags) { + tags[reverseKey(key)] = reverseValue(key, way.tags[key]); + } - detected.download = !(detected.ie || detected.browser.toLowerCase() === 'edge'); + graph.parentRelations(way).forEach(function(relation) { + relation.members.forEach(function(member, index) { + if (member.id === way.id && (role = roleReversals[member.role])) { + relation = relation.updateMember({role: role}, index); + graph = graph.replace(relation); + } + }); + }); - detected.cssfilters = !(detected.ie || detected.browser.toLowerCase() === 'edge'); + // Reverse any associated directions on nodes on the way and then replace + // the way itself with the reversed node ids and updated way tags + return reverseTagsOnNodes(graph, nodes).replace(way.update({nodes: nodes, tags: tags})); + }; + } - function nav(x) { - return navigator.userAgent.indexOf(x) !== -1; - } + /** `Object#toString` result references. */ + var numberTag$4 = '[object Number]'; - if (nav('Win')) { - detected.os = 'win'; - detected.platform = 'Windows'; - } - else if (nav('Mac')) { - detected.os = 'mac'; - detected.platform = 'Macintosh'; - } - else if (nav('X11') || nav('Linux')) { - detected.os = 'linux'; - detected.platform = 'Linux'; - } - else { - detected.os = 'win'; - detected.platform = 'Unknown'; - } + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag$4); + } - return detected; -} + /** `Object#toString` result references. */ + var stringTag$4 = '[object String]'; -var remove$1 = removeDiacritics; + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag$4); + } -var replacementList = [ - { - base: ' ', - chars: "\u00A0", - }, { - base: '0', - chars: "\u07C0", - }, { - base: 'A', - chars: "\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F", - }, { - base: 'AA', - chars: "\uA732", - }, { - base: 'AE', - chars: "\u00C6\u01FC\u01E2", - }, { - base: 'AO', - chars: "\uA734", - }, { - base: 'AU', - chars: "\uA736", - }, { - base: 'AV', - chars: "\uA738\uA73A", - }, { - base: 'AY', - chars: "\uA73C", - }, { - base: 'B', - chars: "\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0181", - }, { - base: 'C', - chars: "\u24b8\uff23\uA73E\u1E08\u0106\u0043\u0108\u010A\u010C\u00C7\u0187\u023B", - }, { - base: 'D', - chars: "\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018A\u0189\u1D05\uA779", - }, { - base: 'Dh', - chars: "\u00D0", - }, { - base: 'DZ', - chars: "\u01F1\u01C4", - }, { - base: 'Dz', - chars: "\u01F2\u01C5", - }, { - base: 'E', - chars: "\u025B\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E\u1D07", - }, { - base: 'F', - chars: "\uA77C\u24BB\uFF26\u1E1E\u0191\uA77B", - }, { - base: 'G', - chars: "\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E\u0262", - }, { - base: 'H', - chars: "\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D", - }, { - base: 'I', - chars: "\u24BE\uFF29\xCC\xCD\xCE\u0128\u012A\u012C\u0130\xCF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197", - }, { - base: 'J', - chars: "\u24BF\uFF2A\u0134\u0248\u0237", - }, { - base: 'K', - chars: "\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2", - }, { - base: 'L', - chars: "\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780", - }, { - base: 'LJ', - chars: "\u01C7", - }, { - base: 'Lj', - chars: "\u01C8", - }, { - base: 'M', - chars: "\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C\u03FB", - }, { - base: 'N', - chars: "\uA7A4\u0220\u24C3\uFF2E\u01F8\u0143\xD1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u019D\uA790\u1D0E", - }, { - base: 'NJ', - chars: "\u01CA", - }, { - base: 'Nj', - chars: "\u01CB", - }, { - base: 'O', - chars: "\u24C4\uFF2F\xD2\xD3\xD4\u1ED2\u1ED0\u1ED6\u1ED4\xD5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\xD6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\xD8\u01FE\u0186\u019F\uA74A\uA74C", - }, { - base: 'OE', - chars: "\u0152", - }, { - base: 'OI', - chars: "\u01A2", - }, { - base: 'OO', - chars: "\uA74E", - }, { - base: 'OU', - chars: "\u0222", - }, { - base: 'P', - chars: "\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754", - }, { - base: 'Q', - chars: "\u24C6\uFF31\uA756\uA758\u024A", - }, { - base: 'R', - chars: "\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782", - }, { - base: 'S', - chars: "\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784", - }, { - base: 'T', - chars: "\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786", - }, { - base: 'Th', - chars: "\u00DE", - }, { - base: 'TZ', - chars: "\uA728", - }, { - base: 'U', - chars: "\u24CA\uFF35\xD9\xDA\xDB\u0168\u1E78\u016A\u1E7A\u016C\xDC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244", - }, { - base: 'V', - chars: "\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245", - }, { - base: 'VY', - chars: "\uA760", - }, { - base: 'W', - chars: "\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72", - }, { - base: 'X', - chars: "\u24CD\uFF38\u1E8A\u1E8C", - }, { - base: 'Y', - chars: "\u24CE\uFF39\u1EF2\xDD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE", - }, { - base: 'Z', - chars: "\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762", - }, { - base: 'a', - chars: "\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250\u0251", - }, { - base: 'aa', - chars: "\uA733", - }, { - base: 'ae', - chars: "\u00E6\u01FD\u01E3", - }, { - base: 'ao', - chars: "\uA735", - }, { - base: 'au', - chars: "\uA737", - }, { - base: 'av', - chars: "\uA739\uA73B", - }, { - base: 'ay', - chars: "\uA73D", - }, { - base: 'b', - chars: "\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253\u0182", - }, { - base: 'c', - chars: "\uFF43\u24D2\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184", - }, { - base: 'd', - chars: "\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\u018B\u13E7\u0501\uA7AA", - }, { - base: 'dh', - chars: "\u00F0", - }, { - base: 'dz', - chars: "\u01F3\u01C6", - }, { - base: 'e', - chars: "\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u01DD", - }, { - base: 'f', - chars: "\u24D5\uFF46\u1E1F\u0192", - }, { - base: 'ff', - chars: "\uFB00", - }, { - base: 'fi', - chars: "\uFB01", - }, { - base: 'fl', - chars: "\uFB02", - }, { - base: 'ffi', - chars: "\uFB03", - }, { - base: 'ffl', - chars: "\uFB04", - }, { - base: 'g', - chars: "\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\uA77F\u1D79", - }, { - base: 'h', - chars: "\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265", - }, { - base: 'hv', - chars: "\u0195", - }, { - base: 'i', - chars: "\u24D8\uFF49\xEC\xED\xEE\u0129\u012B\u012D\xEF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131", - }, { - base: 'j', - chars: "\u24D9\uFF4A\u0135\u01F0\u0249", - }, { - base: 'k', - chars: "\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3", - }, { - base: 'l', - chars: "\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747\u026D", - }, { - base: 'lj', - chars: "\u01C9", - }, { - base: 'm', - chars: "\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F", - }, { - base: 'n', - chars: "\u24DD\uFF4E\u01F9\u0144\xF1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u043B\u0509", - }, { - base: 'nj', - chars: "\u01CC", - }, { - base: 'o', - chars: "\u24DE\uFF4F\xF2\xF3\xF4\u1ED3\u1ED1\u1ED7\u1ED5\xF5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\xF6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\xF8\u01FF\uA74B\uA74D\u0275\u0254\u1D11", - }, { - base: 'oe', - chars: "\u0153", - }, { - base: 'oi', - chars: "\u01A3", - }, { - base: 'oo', - chars: "\uA74F", - }, { - base: 'ou', - chars: "\u0223", - }, { - base: 'p', - chars: "\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755\u03C1", - }, { - base: 'q', - chars: "\u24E0\uFF51\u024B\uA757\uA759", - }, { - base: 'r', - chars: "\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783", - }, { - base: 's', - chars: "\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u0282", - }, { - base: 'ss', - chars: "\xDF", - }, { - base: 't', - chars: "\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787", - }, { - base: 'th', - chars: "\u00FE", - }, { - base: 'tz', - chars: "\uA729", - }, { - base: 'u', - chars: "\u24E4\uFF55\xF9\xFA\xFB\u0169\u1E79\u016B\u1E7B\u016D\xFC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289", - }, { - base: 'v', - chars: "\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C", - }, { - base: 'vy', - chars: "\uA761", - }, { - base: 'w', - chars: "\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73", - }, { - base: 'x', - chars: "\u24E7\uFF58\u1E8B\u1E8D", - }, { - base: 'y', - chars: "\u24E8\uFF59\u1EF3\xFD\u0177\u1EF9\u0233\u1E8F\xFF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF", - }, { - base: 'z', - chars: "\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763", - } -]; - -var diacriticsMap = {}; -for (var i = 0; i < replacementList.length; i += 1) { - var chars = replacementList[i].chars; - for (var j = 0; j < chars.length; j += 1) { - diacriticsMap[chars[j]] = replacementList[i].base; - } -} - -function removeDiacritics(str) { - return str.replace(/[^\u0000-\u007e]/g, function(c) { - return diacriticsMap[c] || c; - }); -} - -// see https://github.com/openstreetmap/iD/pull/3707 -// https://gist.github.com/mapmeld/556b09ddec07a2044c76e1ef45f01c60 - -var chars$1 = { - // madda above alef - 1570: { initial: 'آ‎', isolated: 'ﺁ', medial: 'ﺁ', final: 'ﺂ' }, - - // hamza above and below alef - 1571: { initial: 'أ', isolated: 'ﺃ', medial: '', final: 'ﺄ' }, - // 1572 is ؤ - 1573: { initial: 'إ', isolated: 'ﺇ', medial: '', final: 'ﺈ' }, - // 1574 is ئ - 1575: { initial: 'ا', isolated: 'ا', medial: '', final: 'ﺎ' }, - 1576: { initial: 'ﺑ', isolated: 'ﺏ', medial: 'ﺒ', final: 'ﺐ' }, - - // 1577 ة - 1577: { initial: '', isolated: 'ة', medial: '', final: 'ﺔ' }, - - 1578: { initial: 'ﺗ', isolated: 'ﺕ', medial: 'ﺘ', final: 'ﺖ' }, - 1579: { initial: 'ﺛ', isolated: 'ﺙ', medial: 'ﺜ', final: 'ﺚ' }, - 1580: { initial: 'ﺟ', isolated: 'ﺝ', medial: 'ﺠ', final: 'ﺞ' }, - 1581: { initial: 'ﺣ', isolated: 'ﺡ', medial: 'ﺤ', final: 'ﺢ' }, - 1582: { initial: 'ﺧ', isolated: 'ﺥ', medial: 'ﺨ', final: 'ﺦ' }, - 1583: { initial: 'ﺩ', isolated: 'ﺩ', medial: '', final: 'ﺪ' }, - 1584: { initial: 'ﺫ', isolated: 'ﺫ', medial: '', final: 'ﺬ' }, - 1585: { initial: 'ﺭ', isolated: 'ﺭ', medial: '', final: 'ﺮ' }, - 1586: { initial: 'ﺯ', isolated: 'ﺯ', medial: '', final: 'ﺰ' }, - 1688: { initial: 'ﮊ', isolated: 'ﮊ', medial: '', final: 'ﮋ' }, - 1587: { initial: 'ﺳ', isolated: 'ﺱ', medial: 'ﺴ', final: 'ﺲ' }, - 1588: { initial: 'ﺷ', isolated: 'ﺵ', medial: 'ﺸ', final: 'ﺶ' }, - 1589: { initial: 'ﺻ', isolated: 'ﺹ', medial: 'ﺼ', final: 'ﺺ' }, - 1590: { initial: 'ﺿ', isolated: 'ﺽ', medial: 'ﻀ', final: 'ﺾ' }, - 1591: { initial: 'ﻃ', isolated: 'ﻁ', medial: 'ﻄ', final: 'ﻂ' }, - 1592: { initial: 'ﻇ', isolated: 'ﻅ', medial: 'ﻈ', final: 'ﻆ' }, - 1593: { initial: 'ﻋ', isolated: 'ﻉ', medial: 'ﻌ', final: 'ﻊ' }, - 1594: { initial: 'ﻏ', isolated: 'ﻍ', medial: 'ﻐ', final: 'ﻎ' }, - - // 1595 ػ - may be very rare - - 1601: { initial: 'ﻓ', isolated: 'ﻑ', medial: 'ﻔ', final: 'ﻒ' }, - 1602: { initial: 'ﻗ', isolated: 'ﻕ', medial: 'ﻘ', final: 'ﻖ' }, - 1604: { initial: 'ﻟ', isolated: 'ﻝ', medial: 'ﻠ', final: 'ﻞ' }, - 1605: { initial: 'ﻣ', isolated: 'ﻡ', medial: 'ﻤ', final: 'ﻢ' }, - 1606: { initial: 'ﻧ', isolated: 'ﻥ', medial: 'ﻨ', final: 'ﻦ' }, - 1607: { initial: 'ﻫ', isolated: 'ﻩ', medial: 'ﻬ', final: 'ﻪ' }, - 1608: { initial: 'ﻭ', isolated: 'ﻭ', medial: '', final: 'ﻮ' }, - - // 1609 ى - 1609: { initial: 'ﯨ', isolated: 'ﻯ', medial: 'ﯩ', final: 'ﻰ' }, - // 1610 ي - 1610: { initial: 'ﻳ', isolated: 'ﻱ', medial: 'ﻴ', final: 'ﻲ' }, - - // short vowel sounds / tashkil markings - - 1662: { initial: 'ﭘ', isolated: 'ﭖ', medial: 'ﭙ', final: 'ﭗ' }, - - 1670: { initial: 'ﭼ', isolated: 'ﭺ', medial: 'ﭽ', final: 'ﭻ' }, - 1603: { initial: 'ﻛ', isolated: 'ﻙ', medial: 'ﻜ', final: 'ﻚ' }, - 1705: { initial: 'ﻛ', isolated: 'ﮎ', medial: 'ﻜ', final: 'ﮏ' }, - 1711: { initial: 'ﮔ', isolated: 'ﮒ', medial: 'ﮕ', final: 'ﮓ' }, - 1740: { initial: 'ﻳ', isolated: 'ﻯ', medial: 'ﻴ', final: 'ﻰ' }, - 5000: { initial: 'ﻻ', isolated: 'ﻻ', medial: '', final: 'ﻼ' } -}; - -var rtlRegex = /[\u0590-\u05FF\u0600-\u06FF\u0780-\u07BF]/; - -function fixRTLTextForSvg(inputText) { - var context = true; - var ret = ''; - var rtlBuffer = []; - var arabicRegex = /[\u0600-\u06FF]/g; - var arabicTashkil = /[\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/; - var thaanaVowel = /[\u07A6-\u07B0]/; - var hebrewSign = /[\u0591-\u05bd\u05bf\u05c1-\u05c5\u05c7]/; - - if (!arabicRegex.test(inputText)) { - // Hebrew or Thaana RTL script - for (var n = 0; n < inputText.length; n++) { - var c = inputText[n]; - if ((thaanaVowel.test(c) || hebrewSign.test(c)) && rtlBuffer.length) { - rtlBuffer[rtlBuffer.length - 1] += c; - } else if (rtlRegex.test(c)) { - rtlBuffer.push(c); - } else if (c === ' ' && rtlBuffer.length) { - // whitespace within RTL text - rtlBuffer = [rtlBuffer.reverse().join('') + ' ']; - } else { - // non-RTL character - ret += rtlBuffer.reverse().join('') + c; - rtlBuffer = []; - } - } - } else { - for (var i = 0, l = inputText.length; i < l; i++) { - var code = inputText[i].charCodeAt(0); - var nextCode = inputText[i + 1] ? inputText[i + 1].charCodeAt(0) : 0; - - if (!chars$1[code]) { - if (code === 32 && rtlBuffer.length) { - // whitespace - rtlBuffer = [rtlBuffer.reverse().join('') + ' ']; - } else if (arabicTashkil.test(inputText[i]) && rtlBuffer.length) { - // tashkil mark - rtlBuffer[rtlBuffer.length - 1] += inputText[i]; - } else { - // non-RTL character - ret += rtlBuffer.reverse().join('') + inputText[i]; - rtlBuffer = []; - } - continue; - } - if (context) { - if (i === l - 1 || nextCode === 32) { - rtlBuffer.push(chars$1[code].isolated); - } else { - // special case for لا - if (code === 1604 && nextCode === 1575) { - rtlBuffer.push(chars$1[5000].initial); - i++; - context = true; - continue; - } - rtlBuffer.push(chars$1[code].initial); - } - } else { - if (i === l - 1 || nextCode === 32){ - rtlBuffer.push(chars$1[code].final); - } else { - // special case for ﻼ - if (code === 1604 && nextCode === 1575){ - rtlBuffer.push(chars$1[5000].final); - i++; - context = true; - continue; - } - if (chars$1[code].medial === ''){ - rtlBuffer.push(chars$1[code].final); - } else { - rtlBuffer.push(chars$1[code].medial); - } - } - } - context = (chars$1[code].medial === '') || nextCode === 32; - } - } - ret += rtlBuffer.reverse().join(''); - return ret; -} + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN$1(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + function osmLanes(entity) { + if (entity.type !== 'way') return null; + if (!entity.tags.highway) return null; + + var tags = entity.tags; + var isOneWay = entity.isOneWay(); + var laneCount = getLaneCount(tags, isOneWay); + var maxspeed = parseMaxspeed(tags); + + var laneDirections = parseLaneDirections(tags, isOneWay, laneCount); + var forward = laneDirections.forward; + var backward = laneDirections.backward; + var bothways = laneDirections.bothways; + + // parse the piped string 'x|y|z' format + var turnLanes = {}; + turnLanes.unspecified = parseTurnLanes(tags['turn:lanes']); + turnLanes.forward = parseTurnLanes(tags['turn:lanes:forward']); + turnLanes.backward = parseTurnLanes(tags['turn:lanes:backward']); + + var maxspeedLanes = {}; + maxspeedLanes.unspecified = parseMaxspeedLanes(tags['maxspeed:lanes'], maxspeed); + maxspeedLanes.forward = parseMaxspeedLanes(tags['maxspeed:lanes:forward'], maxspeed); + maxspeedLanes.backward = parseMaxspeedLanes(tags['maxspeed:lanes:backward'], maxspeed); + + var psvLanes = {}; + psvLanes.unspecified = parseMiscLanes(tags['psv:lanes']); + psvLanes.forward = parseMiscLanes(tags['psv:lanes:forward']); + psvLanes.backward = parseMiscLanes(tags['psv:lanes:backward']); + + var busLanes = {}; + busLanes.unspecified = parseMiscLanes(tags['bus:lanes']); + busLanes.forward = parseMiscLanes(tags['bus:lanes:forward']); + busLanes.backward = parseMiscLanes(tags['bus:lanes:backward']); + + var taxiLanes = {}; + taxiLanes.unspecified = parseMiscLanes(tags['taxi:lanes']); + taxiLanes.forward = parseMiscLanes(tags['taxi:lanes:forward']); + taxiLanes.backward = parseMiscLanes(tags['taxi:lanes:backward']); + + var hovLanes = {}; + hovLanes.unspecified = parseMiscLanes(tags['hov:lanes']); + hovLanes.forward = parseMiscLanes(tags['hov:lanes:forward']); + hovLanes.backward = parseMiscLanes(tags['hov:lanes:backward']); + + var hgvLanes = {}; + hgvLanes.unspecified = parseMiscLanes(tags['hgv:lanes']); + hgvLanes.forward = parseMiscLanes(tags['hgv:lanes:forward']); + hgvLanes.backward = parseMiscLanes(tags['hgv:lanes:backward']); + + var bicyclewayLanes = {}; + bicyclewayLanes.unspecified = parseBicycleWay(tags['bicycleway:lanes']); + bicyclewayLanes.forward = parseBicycleWay(tags['bicycleway:lanes:forward']); + bicyclewayLanes.backward = parseBicycleWay(tags['bicycleway:lanes:backward']); + + var lanesObj = { + forward: [], + backward: [], + unspecified: [] + }; -function utilTagText(entity) { - return map$3(entity.tags, function(v, k) { - return k + '=' + v; - }).join(', '); -} + // map forward/backward/unspecified of each lane type to lanesObj + mapToLanesObj(lanesObj, turnLanes, 'turnLane'); + mapToLanesObj(lanesObj, maxspeedLanes, 'maxspeed'); + mapToLanesObj(lanesObj, psvLanes, 'psv'); + mapToLanesObj(lanesObj, busLanes, 'bus'); + mapToLanesObj(lanesObj, taxiLanes, 'taxi'); + mapToLanesObj(lanesObj, hovLanes, 'hov'); + mapToLanesObj(lanesObj, hgvLanes, 'hgv'); + mapToLanesObj(lanesObj, bicyclewayLanes, 'bicycleway'); + return { + metadata: { + count: laneCount, + oneway: isOneWay, + forward: forward, + backward: backward, + bothways: bothways, + turnLanes: turnLanes, + maxspeed: maxspeed, + maxspeedLanes: maxspeedLanes, + psvLanes: psvLanes, + busLanes: busLanes, + taxiLanes: taxiLanes, + hovLanes: hovLanes, + hgvLanes: hgvLanes, + bicyclewayLanes: bicyclewayLanes + }, + lanes: lanesObj + }; + } -function utilEntitySelector(ids) { - return ids.length ? '.' + ids.join(',.') : 'nothing'; -} + function getLaneCount(tags, isOneWay) { + var count; + if (tags.lanes) { + count = parseInt(tags.lanes, 10); + if (count > 0) { + return count; + } + } -function utilEntityOrMemberSelector(ids, graph) { - var s = utilEntitySelector(ids); - ids.forEach(function(id) { - var entity = graph.hasEntity(id); - if (entity && entity.type === 'relation') { - entity.members.forEach(function(member) { - s += ',.' + member.id; - }); - } - }); + switch (tags.highway) { + case 'trunk': + case 'motorway': + count = isOneWay ? 2 : 4; + break; + default: + count = isOneWay ? 1 : 2; + break; + } - return s; -} + return count; + } -function utilGetAllNodes(ids, graph) { - var seen = {}; - var nodes = []; - ids.forEach(getNodes); - return nodes; + function parseMaxspeed(tags) { + var maxspeed = tags.maxspeed; + if (isNumber(maxspeed)) return maxspeed; + if (isString(maxspeed)) { + maxspeed = maxspeed.match(/^([0-9][\.0-9]+?)(?:[ ]?(?:km\/h|kmh|kph|mph|knots))?$/g); + if (!maxspeed) return; + return parseInt(maxspeed, 10); + } + } - function getNodes(id) { - if (seen[id]) return; - seen[id] = true; - var entity = graph.hasEntity(id); - if (!entity) return; + function parseLaneDirections(tags, isOneWay, laneCount) { + var forward = parseInt(tags['lanes:forward'], 10); + var backward = parseInt(tags['lanes:backward'], 10); + var bothways = parseInt(tags['lanes:both_ways'], 10) > 0 ? 1 : 0; - if (entity.type === 'node') { - nodes.push(entity); - } else if (entity.type === 'way') { - entity.nodes.forEach(getNodes); - } else { - entity.members.map(function(member) { return member.id; }).forEach(getNodes); - } - } -} + if (parseInt(tags.oneway, 10) === -1) { + forward = 0; + bothways = 0; + backward = laneCount; + } + else if (isOneWay) { + forward = laneCount; + bothways = 0; + backward = 0; + } + else if (isNaN$1(forward) && isNaN$1(backward)) { + backward = Math.floor((laneCount - bothways) / 2); + forward = laneCount - bothways - backward; + } + else if (isNaN$1(forward)) { + if (backward > laneCount - bothways) { + backward = laneCount - bothways; + } + forward = laneCount - bothways - backward; + } + else if (isNaN$1(backward)) { + if (forward > laneCount - bothways) { + forward = laneCount - bothways; + } + backward = laneCount - bothways - forward; + } + return { + forward: forward, + backward: backward, + bothways: bothways + }; + } -function utilDisplayName(entity) { - var localizedNameKey = 'name:' + utilDetect().locale.toLowerCase().split('-')[0], - name = entity.tags[localizedNameKey] || entity.tags.name || '', - network = entity.tags.cycle_network || entity.tags.network; + function parseTurnLanes(tag){ + if (!tag) return; - if (!name && entity.tags.ref) { - name = entity.tags.ref; - if (network) { - name = network + ' ' + name; - } - } + var validValues = [ + 'left', 'slight_left', 'sharp_left', 'through', 'right', 'slight_right', + 'sharp_right', 'reverse', 'merge_to_left', 'merge_to_right', 'none' + ]; - return name; -} + return tag.split('|') + .map(function (s) { + if (s === '') s = 'none'; + return s.split(';') + .map(function (d) { + return validValues.indexOf(d) === -1 ? 'unknown': d; + }); + }); + } -function utilDisplayNameForPath(entity) { - var name = utilDisplayName(entity); - var isFirefox = utilDetect().browser.toLowerCase().indexOf('firefox') > -1; + function parseMaxspeedLanes(tag, maxspeed) { + if (!tag) return; - if (!isFirefox && name && rtlRegex.test(name)) { - name = fixRTLTextForSvg(name); - } + return tag.split('|') + .map(function (s) { + if (s === 'none') return s; + var m = parseInt(s, 10); + if (s === '' || m === maxspeed) return null; + return isNaN$1(m) ? 'unknown': m; + }); + } - return name; -} + function parseMiscLanes(tag) { + if (!tag) return; -function utilDisplayType(id) { - return { - n: t('inspector.node'), - w: t('inspector.way'), - r: t('inspector.relation') - }[id.charAt(0)]; -} - - -function utilStringQs(str) { - return str.split('&').reduce(function(obj, pair){ - var parts = pair.split('='); - if (parts.length === 2) { - obj[parts[0]] = (null === parts[1]) ? '' : decodeURIComponent(parts[1]); - } - return obj; - }, {}); -} + var validValues = [ + 'yes', 'no', 'designated' + ]; + return tag.split('|') + .map(function (s) { + if (s === '') s = 'no'; + return validValues.indexOf(s) === -1 ? 'unknown': s; + }); + } -function utilQsString(obj, noencode) { - function softEncode(s) { - // encode everything except special characters used in certain hash parameters: - // "/" in map states, ":", ",", {" and "}" in background - return encodeURIComponent(s).replace(/(%2F|%3A|%2C|%7B|%7D)/g, decodeURIComponent); - } - return Object.keys(obj).sort().map(function(key) { - return encodeURIComponent(key) + '=' + ( - noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key])); - }).join('&'); -} + function parseBicycleWay(tag) { + if (!tag) return; -function utilPrefixDOMProperty(property) { - var prefixes = ['webkit', 'ms', 'moz', 'o'], - i = -1, - n = prefixes.length, - s = document.body; + var validValues = [ + 'yes', 'no', 'designated', 'lane' + ]; - if (property in s) - return property; + return tag.split('|') + .map(function (s) { + if (s === '') s = 'no'; + return validValues.indexOf(s) === -1 ? 'unknown': s; + }); + } - property = property.substr(0, 1).toUpperCase() + property.substr(1); - while (++i < n) - if (prefixes[i] + property in s) - return prefixes[i] + property; + function mapToLanesObj(lanesObj, data, key) { + if (data.forward) data.forward.forEach(function(l, i) { + if (!lanesObj.forward[i]) lanesObj.forward[i] = {}; + lanesObj.forward[i][key] = l; + }); + if (data.backward) data.backward.forEach(function(l, i) { + if (!lanesObj.backward[i]) lanesObj.backward[i] = {}; + lanesObj.backward[i][key] = l; + }); + if (data.unspecified) data.unspecified.forEach(function(l, i) { + if (!lanesObj.unspecified[i]) lanesObj.unspecified[i] = {}; + lanesObj.unspecified[i][key] = l; + }); + } - return false; -} + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG$2 = 1, + CLONE_SYMBOLS_FLAG$3 = 4; + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG$2 | CLONE_SYMBOLS_FLAG$3); + } -function utilPrefixCSSProperty(property) { - var prefixes = ['webkit', 'ms', 'Moz', 'O'], - i = -1, - n = prefixes.length, - s = document.body.style; + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now$1 = function() { + return root$2.Date.now(); + }; - if (property.toLowerCase() in s) - return property.toLowerCase(); + /** Error message constants. */ + var FUNC_ERROR_TEXT$2 = 'Expected a function'; - while (++i < n) - if (prefixes[i] + property in s) - return '-' + prefixes[i].toLowerCase() + property.replace(/([A-Z])/g, '-$1').toLowerCase(); + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax$2 = Math.max, + nativeMin = Math.min; - return false; -} - - -var transformProperty; -function utilSetTransform(el, x, y, scale) { - var prop = transformProperty = transformProperty || utilPrefixCSSProperty('Transform'), - translate = utilDetect().opera ? - 'translate(' + x + 'px,' + y + 'px)' : - 'translate3d(' + x + 'px,' + y + 'px,0)'; - return el.style(prop, translate + (scale ? ' scale(' + scale + ')' : '')); -} - - -// Calculates Levenshtein distance between two strings -// see: https://en.wikipedia.org/wiki/Levenshtein_distance -// first converts the strings to lowercase and replaces diacritic marks with ascii equivalents. -function utilEditDistance(a, b) { - a = remove$1(a.toLowerCase()); - b = remove$1(b.toLowerCase()); - if (a.length === 0) return b.length; - if (b.length === 0) return a.length; - var matrix = []; - for (var i = 0; i <= b.length; i++) { matrix[i] = [i]; } - for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; } - for (i = 1; i <= b.length; i++) { - for (j = 1; j <= a.length; j++) { - if (b.charAt(i-1) === a.charAt(j-1)) { - matrix[i][j] = matrix[i-1][j-1]; - } else { - matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution - Math.min(matrix[i][j-1] + 1, // insertion - matrix[i-1][j] + 1)); // deletion - } - } + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT$2); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax$2(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; } - return matrix[b.length][a.length]; -} - -// a d3.mouse-alike which -// 1. Only works on HTML elements, not SVG -// 2. Does not cause style recalculation -function utilFastMouse(container) { - var rect = container.getBoundingClientRect(), - rectLeft = rect.left, - rectTop = rect.top, - clientLeft = +container.clientLeft, - clientTop = +container.clientTop; - if (textDirection === 'rtl') { - rectLeft = 0; + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; } - return function(e) { - return [ - e.clientX - rectLeft - clientLeft, - e.clientY - rectTop - clientTop]; - }; -} - - -/* eslint-disable no-proto */ -var utilGetPrototypeOf = Object.getPrototypeOf || function(obj) { return obj.__proto__; }; -/* eslint-enable no-proto */ + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; -function utilAsyncMap(inputs, func, callback) { - var remaining = inputs.length, - results = [], - errors = []; + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } - inputs.forEach(function(d, i) { - func(d, function done(err, data) { - errors[i] = err; - results[i] = data; - remaining--; - if (!remaining) callback(errors, results); - }); - }); -} + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } -// wraps an index to an interval [0..length-1] -function utilWrap(index, length) { - if (index < 0) - index += Math.ceil(-index/length)*length; - return index % length; -} + function timerExpired() { + var time = now$1(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + function trailingEdge(time) { + timerId = undefined; -/** - * a replacement for functor - * - * @param {*} value any value - * @returns {Function} a function that returns that value or the value if it's a function - */ -function utilFunctor(value) { - if (typeof value === 'function') return value; - return function() { - return value; - }; -} + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } -function utilNoAuto(selection) { - var isText = (selection.size() && selection.node().tagName.toLowerCase() === 'textarea'); + function flush() { + return timerId === undefined ? result : trailingEdge(now$1()); + } - return selection - .attr('autocomplete', 'off') - .attr('autocorrect', 'off') - .attr('autocapitalize', 'off') - .attr('spellcheck', isText ? 'true' : 'false'); -} + function debounced() { + var time = now$1(), + isInvoking = shouldInvoke(time); -// note the function should be of low priority -// and should not be returning a value. -function utilCallWhenIdle(func, timeout) { - return function() { - var args = arguments; - var that = this; - window.requestIdleCallback(function() { - func.apply(that, args); - }, {timeout: timeout}); - }; -} - -// Like selection.property('value', ...), but avoids no-op value sets, -// which can result in layout/repaint thrashing in some situations. -function utilGetSetValue(selection, value) { - function d3_selection_value(value) { - function valueNull() { - delete this.value; - } + lastArgs = arguments; + lastThis = this; + lastCallTime = time; - function valueConstant() { - if (this.value !== value) { - this.value = value; - } + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); } - - function valueFunction() { - var x = value.apply(this, arguments); - if (x == null) { - delete this.value; - } else if (this.value !== x) { - this.value = x; - } + if (maxing) { + // Handle invocations in a tight loop. + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); } - - return value == null - ? valueNull : (typeof value === 'function' - ? valueFunction : valueConstant); - } - - if (arguments.length === 1) { - return selection.property('value'); - } - - return selection.each(d3_selection_value(value)); -} - -function utilIdleWorker(tasks, processor, callback) { - var results = [], result; - for (var i = 0; i < tasks.length; i++) { - result = processor(tasks[i]); - if (result) results.push(result); + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; } - callback(results); - - // var processed = []; - // var currentPos = 0; - // var totalTasks = tasks.length; - - // function worker(deadline) { - // while (deadline.timeRemaining() > 0 && currentPos < totalTasks) { - // var result = processor(tasks[currentPos]); + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } - // // if falsy dont add to the processed list - // if (result) processed.push(result); - // currentPos++; - // } + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity$8; + } - // // more tasks are left, we might need more idleCallbacks - // if (currentPos < totalTasks) { - // return window.requestIdleCallback(function(deadline) {worker(deadline);}); - // } + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, castFunction(iteratee)); + } - // // tasks are completed - // return callback(processed); - // } + /** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, castFunction(iteratee)); + } - // window.requestIdleCallback(function(deadline) {worker(deadline);}); -} + var translations = Object.create(null); -// shim -window.requestIdleCallback = - window.requestIdleCallback || - function(cb) { - var start = Date.now(); - return setTimeout(function() { - cb({ - didTimeout: false, - timeRemaining: function() { - return Math.max(0, 50 - (Date.now() - start)); - } - }); - }, 1); - }; + var currentLocale = 'en'; + var textDirection = 'ltr'; -window.cancelIdleCallback = - window.cancelIdleCallback || - function(id) { - clearTimeout(id); - }; + function setLocale(_) { + if (translations[_] !== undefined) { + currentLocale = _; + } else if (translations[_.split('-')[0]]) { + currentLocale = _.split('-')[0]; + } + } -// Copies a variable number of methods from source to target. -function utilRebind(target, source) { - var i = 1, n = arguments.length, method; - while (++i < n) { - target[method = arguments[i]] = d3_rebind(target, source, source[method]); - } - return target; -} + function addTranslation(id, value) { + translations[id] = value; + } -// Method is assumed to be a standard D3 getter-setter: -// If passed with no arguments, gets the value. -// If passed with arguments, sets the value and returns the target. -function d3_rebind(target, source, method) { - return function() { - var value = method.apply(source, arguments); - return value === source ? target : value; - }; -} - -// -// A per-domain session mutex backed by a cookie and dead man's -// switch. If the session crashes, the mutex will auto-release -// after 5 seconds. - -// This is a type alias (https://flow.org/en/docs/types/aliases/) which allows flow to understand the object returned by utilSessionMutex in other files. - - - - - - -// This accepts a string and returns an object that complies with utilSessionMutexType -function utilSessionMutex(name ) { - var mutex = {}; - var intervalID ; // This indicates a Maybe type - intervalId can be null so we need to use "?IntervalID", not "IntervalID" - - function renew() { - var expires = new Date(); - expires.setSeconds(expires.getSeconds() + 5); - document.cookie = name + '=1; expires=' + expires.toUTCString(); - } - - mutex.lock = function () { - if (intervalID) return true; - var cookie = document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1'); - if (cookie) return false; - renew(); - intervalID = window.setInterval(renew, 4000); - return true; - }; + /** + * Given a string identifier, try to find that string in the current + * language, and return it. This function will be called recursively + * with locale `en` if a string can not be found in the requested language. + * + * @param {string} s string identifier + * @param {object?} o object of token replacements and default string + * @param {string?} loc locale to use + * @returns {string?} locale string + */ + function t(s, o, loc) { + loc = loc || currentLocale; - mutex.unlock = function () { - if (!intervalID) return; - document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT'; - clearInterval(intervalID); - intervalID = null; - }; + var path = s + .split('.') + .map(function (s) { return s.replace('', '.'); }) + .reverse(); - mutex.locked = function () { - return !!intervalID; - }; + var rep = translations[loc]; - return mutex; -} - -function utilSuggestNames(preset, suggestions) { - preset = preset.id.split('/', 2); - var k = preset[0], - v = preset[1]; - - return function(value, callback) { - var result = []; - if (value && value.length > 2) { - if (suggestions[k] && suggestions[k][v]) { - for (var sugg in suggestions[k][v]) { - var dist = utilEditDistance(value, sugg.substring(0, value.length)); - if (dist < 3) { - result.push({ - title: sugg, - value: sugg, - dist: dist - }); - } - } - } - result.sort(function(a, b) { - return a.dist - b.dist; - }); - } - result = result.slice(0,3); - callback(result); - }; -} + while (rep !== undefined && path.length) { + rep = rep[path.pop()]; + } -function utilTriggerEvent(target, type) { - target.each(function() { - var evt = document.createEvent('HTMLEvents'); - evt.initEvent(type, true, true); - this.dispatchEvent(evt); - }); -} - -function validationDeprecatedTag() { - - var validation = function(changes) { - var warnings = []; - for (var i = 0; i < changes.created.length; i++) { - var change = changes.created[i], - deprecatedTags = change.deprecatedTags(); - - if (!isEmpty(deprecatedTags)) { - var tags = utilTagText({ tags: deprecatedTags }); - warnings.push({ - id: 'deprecated_tags', - message: t('validations.deprecated_tags', { tags: tags }), - entity: change - }); - } - } + if (rep !== undefined) { + if (o) { + for (var k in o) { + rep = rep.replace('{' + k + '}', o[k]); + } + } + return rep; + } - return warnings; - }; + if (loc !== 'en') { + return t(s, o, 'en'); + } + if (o && 'default' in o) { + return o.default; + } - return validation; -} + var missing = 'Missing ' + loc + ' translation: ' + s; + if (typeof console !== 'undefined') console.error(missing); // eslint-disable-line -function validationDisconnectedHighway() { + return missing; + } - function isDisconnectedHighway(entity, graph) { - if (!entity.tags.highway) return false; - if (entity.geometry(graph) !== 'line') return false; + /** + * Given string 'ltr' or 'rtl', save that setting + * + * @param {string} dir ltr or rtl + */ - return graph.childNodes(entity) - .every(function(vertex) { - var parents = graph.parentWays(vertex); - if (parents.length === 1) { // standalone vertex - return true; - } else { // shared vertex - return !vertex.tags.entrance && - parents.filter(function(parent) { - return parent.tags.highway && parent !== entity; - }).length === 0; - } - }); - } + function setTextDirection(dir) { + textDirection = dir; + } + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG$3 = 1, + CLONE_SYMBOLS_FLAG$4 = 4; - var validation = function(changes, graph) { - var warnings = []; - for (var i = 0; i < changes.created.length; i++) { - var entity = changes.created[i]; + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_DEEP_FLAG$3 | CLONE_SYMBOLS_FLAG$4, customizer); + } - if (isDisconnectedHighway(entity, graph)) { - warnings.push({ - id: 'disconnected_highway', - message: t('validations.disconnected_highway'), - tooltip: t('validations.disconnected_highway_tooltip'), - entity: entity - }); - } - } + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); - return warnings; - }; + /** `Object#toString` result references. */ + var mapTag$7 = '[object Map]', + setTag$7 = '[object Set]'; + /** Used for built-in method references. */ + var objectProto$17 = Object.prototype; - return validation; -} + /** Used to check objects for own properties. */ + var hasOwnProperty$14 = objectProto$17.hasOwnProperty; -function validationManyDeletions() { - var threshold = 100; + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag$1(value); + if (tag == mapTag$7 || tag == setTag$7) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty$14.call(value, key)) { + return false; + } + } + return true; + } - var validation = function(changes, graph) { - var warnings = []; - var nodes=0, ways=0, areas=0, relations=0; + var detected; - changes.deleted.forEach(function(c) { - if (c.type === 'node') {nodes++;} - else if (c.type === 'way' && c.geometry(graph) === 'line') {ways++;} - else if (c.type === 'way' && c.geometry(graph) === 'area') {areas++;} - else if (c.type === 'relation') {relations++;} - }); - if (changes.deleted.length > threshold) { - warnings.push({ - id: 'many_deletions', - message: t('validations.many_deletions', - { n: changes.deleted.length, p: nodes, l: ways, a:areas, r: relations }) - }); - } + function utilDetect(force) { + if (detected && !force) return detected; + detected = {}; - return warnings; - }; + var ua = navigator.userAgent, + m = null; + m = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i); // Edge + if (m !== null) { + detected.browser = m[1]; + detected.version = m[2]; + } + if (!detected.browser) { + m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i); // IE11 + if (m !== null) { + detected.browser = 'msie'; + detected.version = m[1]; + } + } + if (!detected.browser) { + m = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i); // Opera 15+ + if (m !== null) { + detected.browser = 'Opera'; + detected.version = m[2]; + } + } + if (!detected.browser) { + m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i); + if (m !== null) { + detected.browser = m[1]; + detected.version = m[2]; + m = ua.match(/version\/([\.\d]+)/i); + if (m !== null) detected.version = m[1]; + } + } + if (!detected.browser) { + detected.browser = navigator.appName; + detected.version = navigator.appVersion; + } - return validation; -} + // keep major.minor version only.. + detected.version = detected.version.split(/\W/).slice(0,2).join('.'); -function validationMissingTag() { + if (detected.browser.toLowerCase() === 'msie') { + detected.ie = true; + detected.browser = 'Internet Explorer'; + detected.support = parseFloat(detected.version) >= 11; + } else { + detected.ie = false; + detected.support = true; + } - // Slightly stricter check than Entity#isUsed (#3091) - function hasTags(entity, graph) { - return without(Object.keys(entity.tags), 'area', 'name').length > 0 || - graph.parentRelations(entity).length > 0; - } + // Added due to incomplete svg style support. See #715 + detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 ); - var validation = function(changes, graph) { - var types = ['point', 'line', 'area', 'relation'], - warnings = []; + detected.locale = (navigator.language || navigator.userLanguage || 'en-US'); + detected.language = detected.locale.split('-')[0]; - for (var i = 0; i < changes.created.length; i++) { - var change = changes.created[i], - geometry = change.geometry(graph); + // Search `navigator.languages` for a better locale.. Prefer the first language, + // unless the second language is a culture-specific version of the first one, see #3842 + if (navigator.languages && navigator.languages.length > 0) { + var code0 = navigator.languages[0], + parts0 = code0.split('-'); - if (types.indexOf(geometry) !== -1 && !hasTags(change, graph)) { - warnings.push({ - id: 'missing_tag', - message: t('validations.untagged_' + geometry), - tooltip: t('validations.untagged_' + geometry + '_tooltip'), - entity: change - }); - } - } + detected.locale = code0; + detected.language = parts0[0]; - return warnings; - }; + if (navigator.languages.length > 1 && parts0.length === 1) { + var code1 = navigator.languages[1], + parts1 = code1.split('-'); + if (parts1[0] === parts0[0]) { + detected.locale = code1; + } + } + } - return validation; -} + // Loaded locale is stored in currentLocale + // return that instead (except in the situation where 'en' might override 'en-US') + var loadedLocale = currentLocale || 'en'; + if (loadedLocale !== 'en') { + detected.locale = loadedLocale; + detected.language = detected.locale.split('-')[0]; + } -function validationOldMultipolygon() { + // detect text direction + var q = utilStringQs(window.location.hash.substring(1)); + var lang = dataLocales[detected.locale]; + if ((lang && lang.rtl) || (q.rtl === 'true')) { + detected.textDirection = 'rtl'; + } else { + detected.textDirection = 'ltr'; + } + setTextDirection(detected.textDirection); - return function validation(changes, graph) { - var warnings = []; - for (var i = 0; i < changes.created.length; i++) { - var entity = changes.created[i]; - var parent = osmIsSimpleMultipolygonOuterMember(entity, graph); - if (parent) { - warnings.push({ - id: 'old_multipolygon', - message: t('validations.old_multipolygon'), - tooltip: t('validations.old_multipolygon_tooltip'), - entity: parent - }); - } - } - return warnings; - }; -} + // detect host + var loc = window.top.location; + var origin = loc.origin; + if (!origin) { // for unpatched IE11 + origin = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port: ''); + } -// https://github.com/openstreetmap/josm/blob/mirror/src/org/ -// openstreetmap/josm/data/validation/tests/UnclosedWays.java#L80 -function validationTagSuggestsArea() { + detected.host = origin + loc.pathname; - function tagSuggestsArea(tags) { - if (isEmpty(tags)) return false; + detected.filedrop = (window.FileReader && 'ondrop' in window); - var presence = ['landuse', 'amenities', 'tourism', 'shop']; - for (var i = 0; i < presence.length; i++) { - if (tags[presence[i]] !== undefined) { - return presence[i] + '=' + tags[presence[i]]; - } - } + detected.download = !(detected.ie || detected.browser.toLowerCase() === 'edge'); - if (tags.building && tags.building === 'yes') return 'building=yes'; - } + detected.cssfilters = !(detected.ie || detected.browser.toLowerCase() === 'edge'); + function nav(x) { + return navigator.userAgent.indexOf(x) !== -1; + } - var validation = function(changes, graph) { - var warnings = []; - for (var i = 0; i < changes.created.length; i++) { - var change = changes.created[i], - geometry = change.geometry(graph), - suggestion = (geometry === 'line' ? tagSuggestsArea(change.tags) : undefined); + if (nav('Win')) { + detected.os = 'win'; + detected.platform = 'Windows'; + } + else if (nav('Mac')) { + detected.os = 'mac'; + detected.platform = 'Macintosh'; + } + else if (nav('X11') || nav('Linux')) { + detected.os = 'linux'; + detected.platform = 'Linux'; + } + else { + detected.os = 'win'; + detected.platform = 'Unknown'; + } - if (suggestion) { - warnings.push({ - id: 'tag_suggests_area', - message: t('validations.tag_suggests_area', { tag: suggestion }), - entity: change - }); - } - } + return detected; + } - return warnings; - }; + var remove$1 = removeDiacritics; + var replacementList = [ + { + base: ' ', + chars: "\u00A0", + }, { + base: '0', + chars: "\u07C0", + }, { + base: 'A', + chars: "\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F", + }, { + base: 'AA', + chars: "\uA732", + }, { + base: 'AE', + chars: "\u00C6\u01FC\u01E2", + }, { + base: 'AO', + chars: "\uA734", + }, { + base: 'AU', + chars: "\uA736", + }, { + base: 'AV', + chars: "\uA738\uA73A", + }, { + base: 'AY', + chars: "\uA73C", + }, { + base: 'B', + chars: "\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0181", + }, { + base: 'C', + chars: "\u24b8\uff23\uA73E\u1E08\u0106\u0043\u0108\u010A\u010C\u00C7\u0187\u023B", + }, { + base: 'D', + chars: "\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018A\u0189\u1D05\uA779", + }, { + base: 'Dh', + chars: "\u00D0", + }, { + base: 'DZ', + chars: "\u01F1\u01C4", + }, { + base: 'Dz', + chars: "\u01F2\u01C5", + }, { + base: 'E', + chars: "\u025B\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E\u1D07", + }, { + base: 'F', + chars: "\uA77C\u24BB\uFF26\u1E1E\u0191\uA77B", + }, { + base: 'G', + chars: "\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E\u0262", + }, { + base: 'H', + chars: "\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D", + }, { + base: 'I', + chars: "\u24BE\uFF29\xCC\xCD\xCE\u0128\u012A\u012C\u0130\xCF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197", + }, { + base: 'J', + chars: "\u24BF\uFF2A\u0134\u0248\u0237", + }, { + base: 'K', + chars: "\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2", + }, { + base: 'L', + chars: "\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780", + }, { + base: 'LJ', + chars: "\u01C7", + }, { + base: 'Lj', + chars: "\u01C8", + }, { + base: 'M', + chars: "\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C\u03FB", + }, { + base: 'N', + chars: "\uA7A4\u0220\u24C3\uFF2E\u01F8\u0143\xD1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u019D\uA790\u1D0E", + }, { + base: 'NJ', + chars: "\u01CA", + }, { + base: 'Nj', + chars: "\u01CB", + }, { + base: 'O', + chars: "\u24C4\uFF2F\xD2\xD3\xD4\u1ED2\u1ED0\u1ED6\u1ED4\xD5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\xD6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\xD8\u01FE\u0186\u019F\uA74A\uA74C", + }, { + base: 'OE', + chars: "\u0152", + }, { + base: 'OI', + chars: "\u01A2", + }, { + base: 'OO', + chars: "\uA74E", + }, { + base: 'OU', + chars: "\u0222", + }, { + base: 'P', + chars: "\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754", + }, { + base: 'Q', + chars: "\u24C6\uFF31\uA756\uA758\u024A", + }, { + base: 'R', + chars: "\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782", + }, { + base: 'S', + chars: "\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784", + }, { + base: 'T', + chars: "\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786", + }, { + base: 'Th', + chars: "\u00DE", + }, { + base: 'TZ', + chars: "\uA728", + }, { + base: 'U', + chars: "\u24CA\uFF35\xD9\xDA\xDB\u0168\u1E78\u016A\u1E7A\u016C\xDC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244", + }, { + base: 'V', + chars: "\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245", + }, { + base: 'VY', + chars: "\uA760", + }, { + base: 'W', + chars: "\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72", + }, { + base: 'X', + chars: "\u24CD\uFF38\u1E8A\u1E8C", + }, { + base: 'Y', + chars: "\u24CE\uFF39\u1EF2\xDD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE", + }, { + base: 'Z', + chars: "\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762", + }, { + base: 'a', + chars: "\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250\u0251", + }, { + base: 'aa', + chars: "\uA733", + }, { + base: 'ae', + chars: "\u00E6\u01FD\u01E3", + }, { + base: 'ao', + chars: "\uA735", + }, { + base: 'au', + chars: "\uA737", + }, { + base: 'av', + chars: "\uA739\uA73B", + }, { + base: 'ay', + chars: "\uA73D", + }, { + base: 'b', + chars: "\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253\u0182", + }, { + base: 'c', + chars: "\uFF43\u24D2\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184", + }, { + base: 'd', + chars: "\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\u018B\u13E7\u0501\uA7AA", + }, { + base: 'dh', + chars: "\u00F0", + }, { + base: 'dz', + chars: "\u01F3\u01C6", + }, { + base: 'e', + chars: "\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u01DD", + }, { + base: 'f', + chars: "\u24D5\uFF46\u1E1F\u0192", + }, { + base: 'ff', + chars: "\uFB00", + }, { + base: 'fi', + chars: "\uFB01", + }, { + base: 'fl', + chars: "\uFB02", + }, { + base: 'ffi', + chars: "\uFB03", + }, { + base: 'ffl', + chars: "\uFB04", + }, { + base: 'g', + chars: "\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\uA77F\u1D79", + }, { + base: 'h', + chars: "\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265", + }, { + base: 'hv', + chars: "\u0195", + }, { + base: 'i', + chars: "\u24D8\uFF49\xEC\xED\xEE\u0129\u012B\u012D\xEF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131", + }, { + base: 'j', + chars: "\u24D9\uFF4A\u0135\u01F0\u0249", + }, { + base: 'k', + chars: "\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3", + }, { + base: 'l', + chars: "\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747\u026D", + }, { + base: 'lj', + chars: "\u01C9", + }, { + base: 'm', + chars: "\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F", + }, { + base: 'n', + chars: "\u24DD\uFF4E\u01F9\u0144\xF1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u043B\u0509", + }, { + base: 'nj', + chars: "\u01CC", + }, { + base: 'o', + chars: "\u24DE\uFF4F\xF2\xF3\xF4\u1ED3\u1ED1\u1ED7\u1ED5\xF5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\xF6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\xF8\u01FF\uA74B\uA74D\u0275\u0254\u1D11", + }, { + base: 'oe', + chars: "\u0153", + }, { + base: 'oi', + chars: "\u01A3", + }, { + base: 'oo', + chars: "\uA74F", + }, { + base: 'ou', + chars: "\u0223", + }, { + base: 'p', + chars: "\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755\u03C1", + }, { + base: 'q', + chars: "\u24E0\uFF51\u024B\uA757\uA759", + }, { + base: 'r', + chars: "\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783", + }, { + base: 's', + chars: "\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u0282", + }, { + base: 'ss', + chars: "\xDF", + }, { + base: 't', + chars: "\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787", + }, { + base: 'th', + chars: "\u00FE", + }, { + base: 'tz', + chars: "\uA729", + }, { + base: 'u', + chars: "\u24E4\uFF55\xF9\xFA\xFB\u0169\u1E79\u016B\u1E7B\u016D\xFC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289", + }, { + base: 'v', + chars: "\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C", + }, { + base: 'vy', + chars: "\uA761", + }, { + base: 'w', + chars: "\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73", + }, { + base: 'x', + chars: "\u24E7\uFF58\u1E8B\u1E8D", + }, { + base: 'y', + chars: "\u24E8\uFF59\u1EF3\xFD\u0177\u1EF9\u0233\u1E8F\xFF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF", + }, { + base: 'z', + chars: "\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763", + } + ]; - return validation; -} - - - -var Validations = Object.freeze({ - validationDeprecatedTag: validationDeprecatedTag, - validationDisconnectedHighway: validationDisconnectedHighway, - validationManyDeletions: validationManyDeletions, - validationMissingTag: validationMissingTag, - validationOldMultipolygon: validationOldMultipolygon, - validationTagSuggestsArea: validationTagSuggestsArea -}); - -/** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are compared by strict equality, i.e. `===`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ -function isEqual(value, other) { - return baseIsEqual(value, other); -} - -/* - iD.Difference represents the difference between two graphs. - It knows how to calculate the set of entities that were - created, modified, or deleted, and also contains the logic - for recursively extending a difference to the complete set - of entities that will require a redraw, taking into account - child and parent relationships. - */ -function coreDifference(base, head) { - var _changes = {}; - var _diff = {}; - var _length = 0; - var i, k, h, b, keys; - - function changed(h, b) { - if (h === b) return false; - if (!h || !b) return true; - - if (h.loc || b.loc) { - if (!h.loc && b.loc || h.loc && !b.loc || - h.loc[0] !== b.loc[0] || h.loc[1] !== b.loc[1]) return true; - } - if (h.nodes || b.nodes) { - if (!isEqual(h.nodes, b.nodes)) return true; - } - if (h.members || b.members) { - if (!isEqual(h.members, b.members)) return true; - } - return !isEqual(h.tags, b.tags); + var diacriticsMap = {}; + for (var i = 0; i < replacementList.length; i += 1) { + var chars = replacementList[i].chars; + for (var j = 0; j < chars.length; j += 1) { + diacriticsMap[chars[j]] = replacementList[i].base; } + } + function removeDiacritics(str) { + return str.replace(/[^\u0000-\u007e]/g, function(c) { + return diacriticsMap[c] || c; + }); + } - keys = Object.keys(head.entities); - for (i = 0; i < keys.length; i++) { - k = keys[i]; - h = head.entities[k]; - b = base.entities[k]; - if (changed(h, b)) { - _changes[k] = {base: b, head: h}; - _length++; - } - } + // see https://github.com/openstreetmap/iD/pull/3707 + // https://gist.github.com/mapmeld/556b09ddec07a2044c76e1ef45f01c60 + + var chars$1 = { + // madda above alef + 1570: { initial: 'آ‎', isolated: 'ﺁ', medial: 'ﺁ', final: 'ﺂ' }, + + // hamza above and below alef + 1571: { initial: 'أ', isolated: 'ﺃ', medial: '', final: 'ﺄ' }, + // 1572 is ؤ + 1573: { initial: 'إ', isolated: 'ﺇ', medial: '', final: 'ﺈ' }, + // 1574 is ئ + 1575: { initial: 'ا', isolated: 'ا', medial: '', final: 'ﺎ' }, + 1576: { initial: 'ﺑ', isolated: 'ﺏ', medial: 'ﺒ', final: 'ﺐ' }, + + // 1577 ة + 1577: { initial: '', isolated: 'ة', medial: '', final: 'ﺔ' }, + + 1578: { initial: 'ﺗ', isolated: 'ﺕ', medial: 'ﺘ', final: 'ﺖ' }, + 1579: { initial: 'ﺛ', isolated: 'ﺙ', medial: 'ﺜ', final: 'ﺚ' }, + 1580: { initial: 'ﺟ', isolated: 'ﺝ', medial: 'ﺠ', final: 'ﺞ' }, + 1581: { initial: 'ﺣ', isolated: 'ﺡ', medial: 'ﺤ', final: 'ﺢ' }, + 1582: { initial: 'ﺧ', isolated: 'ﺥ', medial: 'ﺨ', final: 'ﺦ' }, + 1583: { initial: 'ﺩ', isolated: 'ﺩ', medial: '', final: 'ﺪ' }, + 1584: { initial: 'ﺫ', isolated: 'ﺫ', medial: '', final: 'ﺬ' }, + 1585: { initial: 'ﺭ', isolated: 'ﺭ', medial: '', final: 'ﺮ' }, + 1586: { initial: 'ﺯ', isolated: 'ﺯ', medial: '', final: 'ﺰ' }, + 1688: { initial: 'ﮊ', isolated: 'ﮊ', medial: '', final: 'ﮋ' }, + 1587: { initial: 'ﺳ', isolated: 'ﺱ', medial: 'ﺴ', final: 'ﺲ' }, + 1588: { initial: 'ﺷ', isolated: 'ﺵ', medial: 'ﺸ', final: 'ﺶ' }, + 1589: { initial: 'ﺻ', isolated: 'ﺹ', medial: 'ﺼ', final: 'ﺺ' }, + 1590: { initial: 'ﺿ', isolated: 'ﺽ', medial: 'ﻀ', final: 'ﺾ' }, + 1591: { initial: 'ﻃ', isolated: 'ﻁ', medial: 'ﻄ', final: 'ﻂ' }, + 1592: { initial: 'ﻇ', isolated: 'ﻅ', medial: 'ﻈ', final: 'ﻆ' }, + 1593: { initial: 'ﻋ', isolated: 'ﻉ', medial: 'ﻌ', final: 'ﻊ' }, + 1594: { initial: 'ﻏ', isolated: 'ﻍ', medial: 'ﻐ', final: 'ﻎ' }, + + // 1595 ػ - may be very rare + + 1601: { initial: 'ﻓ', isolated: 'ﻑ', medial: 'ﻔ', final: 'ﻒ' }, + 1602: { initial: 'ﻗ', isolated: 'ﻕ', medial: 'ﻘ', final: 'ﻖ' }, + 1604: { initial: 'ﻟ', isolated: 'ﻝ', medial: 'ﻠ', final: 'ﻞ' }, + 1605: { initial: 'ﻣ', isolated: 'ﻡ', medial: 'ﻤ', final: 'ﻢ' }, + 1606: { initial: 'ﻧ', isolated: 'ﻥ', medial: 'ﻨ', final: 'ﻦ' }, + 1607: { initial: 'ﻫ', isolated: 'ﻩ', medial: 'ﻬ', final: 'ﻪ' }, + 1608: { initial: 'ﻭ', isolated: 'ﻭ', medial: '', final: 'ﻮ' }, + + // 1609 ى + 1609: { initial: 'ﯨ', isolated: 'ﻯ', medial: 'ﯩ', final: 'ﻰ' }, + // 1610 ي + 1610: { initial: 'ﻳ', isolated: 'ﻱ', medial: 'ﻴ', final: 'ﻲ' }, + + // short vowel sounds / tashkil markings + + 1662: { initial: 'ﭘ', isolated: 'ﭖ', medial: 'ﭙ', final: 'ﭗ' }, + + 1670: { initial: 'ﭼ', isolated: 'ﭺ', medial: 'ﭽ', final: 'ﭻ' }, + 1603: { initial: 'ﻛ', isolated: 'ﻙ', medial: 'ﻜ', final: 'ﻚ' }, + 1705: { initial: 'ﻛ', isolated: 'ﮎ', medial: 'ﻜ', final: 'ﮏ' }, + 1711: { initial: 'ﮔ', isolated: 'ﮒ', medial: 'ﮕ', final: 'ﮓ' }, + 1740: { initial: 'ﻳ', isolated: 'ﻯ', medial: 'ﻴ', final: 'ﻰ' }, + 5000: { initial: 'ﻻ', isolated: 'ﻻ', medial: '', final: 'ﻼ' } + }; - keys = Object.keys(base.entities); - for (i = 0; i < keys.length; i++) { - k = keys[i]; - h = head.entities[k]; - b = base.entities[k]; - if (!_changes[k] && changed(h, b)) { - _changes[k] = {base: b, head: h}; - _length++; - } - } + var rtlRegex = /[\u0590-\u05FF\u0600-\u06FF\u0780-\u07BF]/; + + function fixRTLTextForSvg(inputText) { + var context = true; + var ret = ''; + var rtlBuffer = []; + var arabicRegex = /[\u0600-\u06FF]/g; + var arabicTashkil = /[\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/; + var thaanaVowel = /[\u07A6-\u07B0]/; + var hebrewSign = /[\u0591-\u05bd\u05bf\u05c1-\u05c5\u05c7]/; + + if (!arabicRegex.test(inputText)) { + // Hebrew or Thaana RTL script + for (var n = 0; n < inputText.length; n++) { + var c = inputText[n]; + if ((thaanaVowel.test(c) || hebrewSign.test(c)) && rtlBuffer.length) { + rtlBuffer[rtlBuffer.length - 1] += c; + } else if (rtlRegex.test(c)) { + rtlBuffer.push(c); + } else if (c === ' ' && rtlBuffer.length) { + // whitespace within RTL text + rtlBuffer = [rtlBuffer.reverse().join('') + ' ']; + } else { + // non-RTL character + ret += rtlBuffer.reverse().join('') + c; + rtlBuffer = []; + } + } + } else { + for (var i = 0, l = inputText.length; i < l; i++) { + var code = inputText[i].charCodeAt(0); + var nextCode = inputText[i + 1] ? inputText[i + 1].charCodeAt(0) : 0; + + if (!chars$1[code]) { + if (code === 32 && rtlBuffer.length) { + // whitespace + rtlBuffer = [rtlBuffer.reverse().join('') + ' ']; + } else if (arabicTashkil.test(inputText[i]) && rtlBuffer.length) { + // tashkil mark + rtlBuffer[rtlBuffer.length - 1] += inputText[i]; + } else { + // non-RTL character + ret += rtlBuffer.reverse().join('') + inputText[i]; + rtlBuffer = []; + } + continue; + } + if (context) { + if (i === l - 1 || nextCode === 32) { + rtlBuffer.push(chars$1[code].isolated); + } else { + // special case for لا + if (code === 1604 && nextCode === 1575) { + rtlBuffer.push(chars$1[5000].initial); + i++; + context = true; + continue; + } + rtlBuffer.push(chars$1[code].initial); + } + } else { + if (i === l - 1 || nextCode === 32){ + rtlBuffer.push(chars$1[code].final); + } else { + // special case for ﻼ + if (code === 1604 && nextCode === 1575){ + rtlBuffer.push(chars$1[5000].final); + i++; + context = true; + continue; + } + if (chars$1[code].medial === ''){ + rtlBuffer.push(chars$1[code].final); + } else { + rtlBuffer.push(chars$1[code].medial); + } + } + } + context = (chars$1[code].medial === '') || nextCode === 32; + } + } + ret += rtlBuffer.reverse().join(''); + return ret; + } + function utilTagText(entity) { + return map$3(entity.tags, function(v, k) { + return k + '=' + v; + }).join(', '); + } - function addParents(parents, result) { - for (var i = 0; i < parents.length; i++) { - var parent = parents[i]; - if (parent.id in result) - continue; + function utilEntitySelector(ids) { + return ids.length ? '.' + ids.join(',.') : 'nothing'; + } - result[parent.id] = parent; - addParents(head.parentRelations(parent), result); - } - } + function utilEntityOrMemberSelector(ids, graph) { + var s = utilEntitySelector(ids); - _diff.length = function length() { - return _length; - }; + ids.forEach(function(id) { + var entity = graph.hasEntity(id); + if (entity && entity.type === 'relation') { + entity.members.forEach(function(member) { + s += ',.' + member.id; + }); + } + }); + return s; + } - _diff.changes = function changes() { - return _changes; - }; + function utilGetAllNodes(ids, graph) { + var seen = {}; + var nodes = []; + ids.forEach(getNodes); + return nodes; - _diff.extantIDs = function extantIDs() { - var result = []; - forEach(_changes, function(change, id) { - if (change.head) result.push(id); - }); - return result; - }; + function getNodes(id) { + if (seen[id]) return; + seen[id] = true; + var entity = graph.hasEntity(id); + if (!entity) return; - _diff.modified = function modified() { - var result = []; - forEach(_changes, function(change) { - if (change.base && change.head) result.push(change.head); - }); - return result; - }; + if (entity.type === 'node') { + nodes.push(entity); + } else if (entity.type === 'way') { + entity.nodes.forEach(getNodes); + } else { + entity.members.map(function(member) { return member.id; }).forEach(getNodes); + } + } + } - _diff.created = function created() { - var result = []; - forEach(_changes, function(change) { - if (!change.base && change.head) result.push(change.head); - }); - return result; - }; + function utilDisplayName(entity) { + var localizedNameKey = 'name:' + utilDetect().locale.toLowerCase().split('-')[0], + name = entity.tags[localizedNameKey] || entity.tags.name || '', + network = entity.tags.cycle_network || entity.tags.network; + if (!name && entity.tags.ref) { + name = entity.tags.ref; + if (network) { + name = network + ' ' + name; + } + } - _diff.deleted = function deleted() { - var result = []; - forEach(_changes, function(change) { - if (change.base && !change.head) result.push(change.base); - }); - return result; - }; + return name; + } - _diff.summary = function summary() { - var relevant = {}; + function utilDisplayNameForPath(entity) { + var name = utilDisplayName(entity); + var isFirefox = utilDetect().browser.toLowerCase().indexOf('firefox') > -1; - function addEntity(entity, graph, changeType) { - relevant[entity.id] = { - entity: entity, - graph: graph, - changeType: changeType - }; - } + if (!isFirefox && name && rtlRegex.test(name)) { + name = fixRTLTextForSvg(name); + } - function addParents(entity) { - var parents = head.parentWays(entity); - for (var j = parents.length - 1; j >= 0; j--) { - var parent = parents[j]; - if (!(parent.id in relevant)) addEntity(parent, head, 'modified'); - } - } + return name; + } - var keys = Object.keys(_changes); - for (var i = 0; i < keys.length; i++) { - var change = _changes[keys[i]]; - if (change.head && change.head.geometry(head) !== 'vertex') { - addEntity(change.head, head, change.base ? 'modified' : 'created'); + function utilDisplayType(id) { + return { + n: t('inspector.node'), + w: t('inspector.way'), + r: t('inspector.relation') + }[id.charAt(0)]; + } - } else if (change.base && change.base.geometry(base) !== 'vertex') { - addEntity(change.base, base, 'deleted'); - } else if (change.base && change.head) { // modified vertex - var moved = !isEqual(change.base.loc, change.head.loc); - var retagged = !isEqual(change.base.tags, change.head.tags); + function utilStringQs(str) { + return str.split('&').reduce(function(obj, pair){ + var parts = pair.split('='); + if (parts.length === 2) { + obj[parts[0]] = (null === parts[1]) ? '' : decodeURIComponent(parts[1]); + } + return obj; + }, {}); + } - if (moved) { - addParents(change.head); - } - if (retagged || (moved && change.head.hasInterestingTags())) { - addEntity(change.head, head, 'modified'); - } + function utilQsString(obj, noencode) { + function softEncode(s) { + // encode everything except special characters used in certain hash parameters: + // "/" in map states, ":", ",", {" and "}" in background + return encodeURIComponent(s).replace(/(%2F|%3A|%2C|%7B|%7D)/g, decodeURIComponent); + } + return Object.keys(obj).sort().map(function(key) { + return encodeURIComponent(key) + '=' + ( + noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key])); + }).join('&'); + } - } else if (change.head && change.head.hasInterestingTags()) { // created vertex - addEntity(change.head, head, 'created'); - } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex - addEntity(change.base, base, 'deleted'); - } - } + function utilPrefixDOMProperty(property) { + var prefixes = ['webkit', 'ms', 'moz', 'o'], + i = -1, + n = prefixes.length, + s = document.body; - return values$1(relevant); - }; + if (property in s) + return property; + property = property.substr(0, 1).toUpperCase() + property.substr(1); - _diff.complete = function complete(extent) { - var result = {}; - var id, change; + while (++i < n) + if (prefixes[i] + property in s) + return prefixes[i] + property; - for (id in _changes) { - change = _changes[id]; + return false; + } - var h = change.head; - var b = change.base; - var entity = h || b; - if (extent && - (!h || !h.intersects(extent, head)) && - (!b || !b.intersects(extent, base))) - continue; + function utilPrefixCSSProperty(property) { + var prefixes = ['webkit', 'ms', 'Moz', 'O'], + i = -1, + n = prefixes.length, + s = document.body.style; - result[id] = h; + if (property.toLowerCase() in s) + return property.toLowerCase(); - if (entity.type === 'way') { - var nh = h ? h.nodes : []; - var nb = b ? b.nodes : []; - var diff, i; + while (++i < n) + if (prefixes[i] + property in s) + return '-' + prefixes[i].toLowerCase() + property.replace(/([A-Z])/g, '-$1').toLowerCase(); - diff = difference(nh, nb); - for (i = 0; i < diff.length; i++) { - result[diff[i]] = head.hasEntity(diff[i]); - } + return false; + } - diff = difference(nb, nh); - for (i = 0; i < diff.length; i++) { - result[diff[i]] = head.hasEntity(diff[i]); - } - } - addParents(head.parentWays(entity), result); - addParents(head.parentRelations(entity), result); - } + var transformProperty; + function utilSetTransform(el, x, y, scale) { + var prop = transformProperty = transformProperty || utilPrefixCSSProperty('Transform'), + translate = utilDetect().opera ? + 'translate(' + x + 'px,' + y + 'px)' : + 'translate3d(' + x + 'px,' + y + 'px,0)'; + return el.style(prop, translate + (scale ? ' scale(' + scale + ')' : '')); + } + + + // Calculates Levenshtein distance between two strings + // see: https://en.wikipedia.org/wiki/Levenshtein_distance + // first converts the strings to lowercase and replaces diacritic marks with ascii equivalents. + function utilEditDistance(a, b) { + a = remove$1(a.toLowerCase()); + b = remove$1(b.toLowerCase()); + if (a.length === 0) return b.length; + if (b.length === 0) return a.length; + var matrix = []; + for (var i = 0; i <= b.length; i++) { matrix[i] = [i]; } + for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; } + for (i = 1; i <= b.length; i++) { + for (j = 1; j <= a.length; j++) { + if (b.charAt(i-1) === a.charAt(j-1)) { + matrix[i][j] = matrix[i-1][j-1]; + } else { + matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution + Math.min(matrix[i][j-1] + 1, // insertion + matrix[i-1][j] + 1)); // deletion + } + } + } + return matrix[b.length][a.length]; + } - return result; - }; + + // a d3.mouse-alike which + // 1. Only works on HTML elements, not SVG + // 2. Does not cause style recalculation + function utilFastMouse(container) { + var rect = container.getBoundingClientRect(), + rectLeft = rect.left, + rectTop = rect.top, + clientLeft = +container.clientLeft, + clientTop = +container.clientTop; + if (textDirection === 'rtl') { + rectLeft = 0; + } + return function(e) { + return [ + e.clientX - rectLeft - clientLeft, + e.clientY - rectTop - clientTop]; + }; + } - return _diff; -} - -/** Used for built-in method references. */ -var objectProto$18 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$15 = objectProto$18.hasOwnProperty; - -/** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ -var assign = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys$1(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty$15.call(source, key)) { - assignValue(object, key, source[key]); - } - } -}); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax$3 = Math.max; - -/** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'a': 1, 'b': 2 }, 1); - * // => true - * - * _.includes('abcd', 'bc'); - * // => true - */ -function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values$1(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax$3(length + fromIndex, 0); - } - return isString(collection) - ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); -} - -function coreGraph$$1(other, mutable) { - if (!(this instanceof coreGraph$$1)) return new coreGraph$$1(other, mutable); - - if (other instanceof coreGraph$$1) { - var base = other.base(); - this.entities = assign(Object.create(base.entities), other.entities); - this._parentWays = assign(Object.create(base.parentWays), other._parentWays); - this._parentRels = assign(Object.create(base.parentRels), other._parentRels); + /* eslint-disable no-proto */ + var utilGetPrototypeOf = Object.getPrototypeOf || function(obj) { return obj.__proto__; }; + /* eslint-enable no-proto */ - } else { - this.entities = Object.create({}); - this._parentWays = Object.create({}); - this._parentRels = Object.create({}); - this.rebase(other || [], [this]); - } - this.transients = {}; - this._childNodes = {}; - this.frozen = !mutable; -} + function utilAsyncMap(inputs, func, callback) { + var remaining = inputs.length, + results = [], + errors = []; + inputs.forEach(function(d, i) { + func(d, function done(err, data) { + errors[i] = err; + results[i] = data; + remaining--; + if (!remaining) callback(errors, results); + }); + }); + } -coreGraph$$1.prototype = { - hasEntity: function(id) { - return this.entities[id]; - }, + // wraps an index to an interval [0..length-1] + function utilWrap(index, length) { + if (index < 0) + index += Math.ceil(-index/length)*length; + return index % length; + } - entity: function(id) { - var entity = this.entities[id]; + /** + * a replacement for functor + * + * @param {*} value any value + * @returns {Function} a function that returns that value or the value if it's a function + */ + function utilFunctor(value) { + if (typeof value === 'function') return value; + return function() { + return value; + }; + } - //https://github.com/openstreetmap/iD/issues/3973#issuecomment-307052376 - if (!entity) { - entity = this.entities.__proto__[id]; // eslint-disable-line no-proto - } - if (!entity) { - throw new Error('entity ' + id + ' not found'); - } - return entity; - }, + function utilNoAuto(selection) { + var isText = (selection.size() && selection.node().tagName.toLowerCase() === 'textarea'); + return selection + .attr('autocomplete', 'off') + .attr('autocorrect', 'off') + .attr('autocapitalize', 'off') + .attr('spellcheck', isText ? 'true' : 'false'); + } - transient: function(entity, key, fn) { - var id = entity.id, - transients = this.transients[id] || - (this.transients[id] = {}); + // note the function should be of low priority + // and should not be returning a value. + function utilCallWhenIdle(func, timeout) { + return function() { + var args = arguments; + var that = this; + window.requestIdleCallback(function() { + func.apply(that, args); + }, {timeout: timeout}); + }; + } - if (transients[key] !== undefined) { - return transients[key]; - } + function utilCleanTags(tags) { + var out = {}; + for (var k in tags) { + if (!k) continue; + var v = tags[k]; + if (v !== undefined) { + out[k] = cleanValue(k, v); + } + } - transients[key] = fn.call(entity); + return out; - return transients[key]; - }, + function cleanValue(k, v) { + function keepSpaces(k) { + return /_hours|_times|:conditional$/.test(k); + } - parentWays: function(entity) { - var parents = this._parentWays[entity.id], - result = []; + function skip(k) { + return /^(description|note|fixme)$/.test(k); + } - if (parents) { - for (var i = 0; i < parents.length; i++) { - result.push(this.entity(parents[i])); - } - } - return result; - }, + if (skip(k)) return v; + var cleaned = v + .split(';') + .map(function(s) { return s.trim(); }) + .join(keepSpaces(k) ? '; ' : ';'); - isPoi: function(entity) { - var parentWays = this._parentWays[entity.id]; - return !parentWays || parentWays.length === 0; - }, + // The code below is not intended to validate websites and emails. + // It is only intended to prevent obvious copy-paste errors. (#2323) + // clean website- and email-like tags + if (k.indexOf('website') !== -1 || + k.indexOf('email') !== -1 || + cleaned.indexOf('http') === 0) { + cleaned = cleaned + .replace(/[\u200B-\u200F\uFEFF]/g, ''); // strip LRM and other zero width chars + } - isShared: function(entity) { - var parentWays = this._parentWays[entity.id]; - return parentWays && parentWays.length > 1; - }, + return cleaned; + } + } + // Like selection.property('value', ...), but avoids no-op value sets, + // which can result in layout/repaint thrashing in some situations. + function utilGetSetValue(selection, value) { + function d3_selection_value(value) { + function valueNull() { + delete this.value; + } - parentRelations: function(entity) { - var parents = this._parentRels[entity.id], - result = []; + function valueConstant() { + if (this.value !== value) { + this.value = value; + } + } - if (parents) { - for (var i = 0; i < parents.length; i++) { - result.push(this.entity(parents[i])); - } - } - return result; - }, + function valueFunction() { + var x = value.apply(this, arguments); + if (x == null) { + delete this.value; + } else if (this.value !== x) { + this.value = x; + } + } + return value == null + ? valueNull : (typeof value === 'function' + ? valueFunction : valueConstant); + } - childNodes: function(entity) { - if (this._childNodes[entity.id]) return this._childNodes[entity.id]; - if (!entity.nodes) return []; + if (arguments.length === 1) { + return selection.property('value'); + } - var nodes = []; - for (var i = 0; i < entity.nodes.length; i++) { - nodes[i] = this.entity(entity.nodes[i]); - } + return selection.each(d3_selection_value(value)); + } - if (debug) Object.freeze(nodes); + function utilIdleWorker(tasks, processor, callback) { + var results = [], result; + for (var i = 0; i < tasks.length; i++) { + result = processor(tasks[i]); + if (result) results.push(result); + } + callback(results); + + // var processed = []; + // var currentPos = 0; + // var totalTasks = tasks.length; + + // function worker(deadline) { + // while (deadline.timeRemaining() > 0 && currentPos < totalTasks) { + // var result = processor(tasks[currentPos]); + + // // if falsy dont add to the processed list + // if (result) processed.push(result); + // currentPos++; + // } + + // // more tasks are left, we might need more idleCallbacks + // if (currentPos < totalTasks) { + // return window.requestIdleCallback(function(deadline) {worker(deadline);}); + // } + + // // tasks are completed + // return callback(processed); + // } + + // window.requestIdleCallback(function(deadline) {worker(deadline);}); + } + + // shim + window.requestIdleCallback = + window.requestIdleCallback || + function(cb) { + var start = Date.now(); + return setTimeout(function() { + cb({ + didTimeout: false, + timeRemaining: function() { + return Math.max(0, 50 - (Date.now() - start)); + } + }); + }, 1); + }; - this._childNodes[entity.id] = nodes; - return this._childNodes[entity.id]; - }, + window.cancelIdleCallback = + window.cancelIdleCallback || + function(id) { + clearTimeout(id); + }; + // Copies a variable number of methods from source to target. + function utilRebind(target, source) { + var i = 1, n = arguments.length, method; + while (++i < n) { + target[method = arguments[i]] = d3_rebind(target, source, source[method]); + } + return target; + } - base: function() { - return { - 'entities': utilGetPrototypeOf(this.entities), - 'parentWays': utilGetPrototypeOf(this._parentWays), - 'parentRels': utilGetPrototypeOf(this._parentRels) - }; - }, + // Method is assumed to be a standard D3 getter-setter: + // If passed with no arguments, gets the value. + // If passed with arguments, sets the value and returns the target. + function d3_rebind(target, source, method) { + return function() { + var value = method.apply(source, arguments); + return value === source ? target : value; + }; + } + // A per-domain session mutex backed by a cookie and dead man's + // switch. If the session crashes, the mutex will auto-release + // after 5 seconds. - // Unlike other graph methods, rebase mutates in place. This is because it - // is used only during the history operation that merges newly downloaded - // data into each state. To external consumers, it should appear as if the - // graph always contained the newly downloaded data. - rebase: function(entities, stack, force) { - var base = this.base(), - i, j, k, id; - - for (i = 0; i < entities.length; i++) { - var entity = entities[i]; - - if (!entity.visible || (!force && base.entities[entity.id])) - continue; - - // Merging data into the base graph - base.entities[entity.id] = entity; - this._updateCalculated(undefined, entity, base.parentWays, base.parentRels); - - // Restore provisionally-deleted nodes that are discovered to have an extant parent - if (entity.type === 'way') { - for (j = 0; j < entity.nodes.length; j++) { - id = entity.nodes[j]; - for (k = 1; k < stack.length; k++) { - var ents = stack[k].entities; - if (ents.hasOwnProperty(id) && ents[id] === undefined) { - delete ents[id]; - } - } - } - } - } + // This accepts a string and returns an object that complies with utilSessionMutexType + function utilSessionMutex(name) { + var mutex = {}; + var intervalID; - for (i = 0; i < stack.length; i++) { - stack[i]._updateRebased(); - } - }, + function renew() { + var expires = new Date(); + expires.setSeconds(expires.getSeconds() + 5); + document.cookie = name + '=1; expires=' + expires.toUTCString(); + } + mutex.lock = function () { + if (intervalID) return true; + var cookie = document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1'); + if (cookie) return false; + renew(); + intervalID = window.setInterval(renew, 4000); + return true; + }; - _updateRebased: function() { - var base = this.base(), - i, k, child, id, keys; - - keys = Object.keys(this._parentWays); - for (i = 0; i < keys.length; i++) { - child = keys[i]; - if (base.parentWays[child]) { - for (k = 0; k < base.parentWays[child].length; k++) { - id = base.parentWays[child][k]; - if (!this.entities.hasOwnProperty(id) && !includes(this._parentWays[child], id)) { - this._parentWays[child].push(id); - } - } - } - } + mutex.unlock = function () { + if (!intervalID) return; + document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT'; + clearInterval(intervalID); + intervalID = null; + }; - keys = Object.keys(this._parentRels); - for (i = 0; i < keys.length; i++) { - child = keys[i]; - if (base.parentRels[child]) { - for (k = 0; k < base.parentRels[child].length; k++) { - id = base.parentRels[child][k]; - if (!this.entities.hasOwnProperty(id) && !includes(this._parentRels[child], id)) { - this._parentRels[child].push(id); - } - } - } - } + mutex.locked = function () { + return !!intervalID; + }; - this.transients = {}; + return mutex; + } + + function utilSuggestNames(preset, suggestions) { + preset = preset.id.split('/', 2); + var k = preset[0], + v = preset[1]; + + return function(value, callback) { + var result = []; + if (value && value.length > 2) { + if (suggestions[k] && suggestions[k][v]) { + for (var sugg in suggestions[k][v]) { + var dist = utilEditDistance(value, sugg.substring(0, value.length)); + if (dist < 3) { + result.push({ + title: sugg, + value: sugg, + dist: dist + }); + } + } + } + result.sort(function(a, b) { + return a.dist - b.dist; + }); + } + result = result.slice(0,3); + callback(result); + }; + } - // this._childNodes is not updated, under the assumption that - // ways are always downloaded with their child nodes. - }, + function utilTriggerEvent(target, type) { + target.each(function() { + var evt = document.createEvent('HTMLEvents'); + evt.initEvent(type, true, true); + this.dispatchEvent(evt); + }); + } + function validationDeprecatedTag() { - // Updates calculated properties (parentWays, parentRels) for the specified change - _updateCalculated: function(oldentity, entity, parentWays, parentRels) { + var validation = function(changes) { + var warnings = []; + for (var i = 0; i < changes.created.length; i++) { + var change = changes.created[i], + deprecatedTags = change.deprecatedTags(); - parentWays = parentWays || this._parentWays; - parentRels = parentRels || this._parentRels; + if (!isEmpty(deprecatedTags)) { + var tags = utilTagText({ tags: deprecatedTags }); + warnings.push({ + id: 'deprecated_tags', + message: t('validations.deprecated_tags', { tags: tags }), + entity: change + }); + } + } - var type = entity && entity.type || oldentity && oldentity.type, - removed, added, ways, rels, i; + return warnings; + }; - if (type === 'way') { + return validation; + } - // Update parentWays - if (oldentity && entity) { - removed = difference(oldentity.nodes, entity.nodes); - added = difference(entity.nodes, oldentity.nodes); - } else if (oldentity) { - removed = oldentity.nodes; - added = []; - } else if (entity) { - removed = []; - added = entity.nodes; - } - for (i = 0; i < removed.length; i++) { - parentWays[removed[i]] = without(parentWays[removed[i]], oldentity.id); - } - for (i = 0; i < added.length; i++) { - ways = without(parentWays[added[i]], entity.id); - ways.push(entity.id); - parentWays[added[i]] = ways; - } + function validationDisconnectedHighway() { - } else if (type === 'relation') { - - // Update parentRels - if (oldentity && entity) { - removed = difference(oldentity.members, entity.members); - added = difference(entity.members, oldentity); - } else if (oldentity) { - removed = oldentity.members; - added = []; - } else if (entity) { - removed = []; - added = entity.members; - } - for (i = 0; i < removed.length; i++) { - parentRels[removed[i].id] = without(parentRels[removed[i].id], oldentity.id); - } - for (i = 0; i < added.length; i++) { - rels = without(parentRels[added[i].id], entity.id); - rels.push(entity.id); - parentRels[added[i].id] = rels; - } - } - }, + function isDisconnectedHighway(entity, graph) { + if (!entity.tags.highway) return false; + if (entity.geometry(graph) !== 'line') return false; + return graph.childNodes(entity) + .every(function(vertex) { + var parents = graph.parentWays(vertex); + if (parents.length === 1) { // standalone vertex + return true; + } else { // shared vertex + return !vertex.tags.entrance && + parents.filter(function(parent) { + return parent.tags.highway && parent !== entity; + }).length === 0; + } + }); + } - replace: function(entity) { - if (this.entities[entity.id] === entity) - return this; - return this.update(function() { - this._updateCalculated(this.entities[entity.id], entity); - this.entities[entity.id] = entity; - }); - }, + var validation = function(changes, graph) { + var warnings = []; + for (var i = 0; i < changes.created.length; i++) { + var entity = changes.created[i]; + if (isDisconnectedHighway(entity, graph)) { + warnings.push({ + id: 'disconnected_highway', + message: t('validations.disconnected_highway'), + tooltip: t('validations.disconnected_highway_tooltip'), + entity: entity + }); + } + } - remove: function(entity) { - return this.update(function() { - this._updateCalculated(entity, undefined); - this.entities[entity.id] = undefined; - }); - }, + return warnings; + }; - revert: function(id) { - var baseEntity = this.base().entities[id], - headEntity = this.entities[id]; + return validation; + } - if (headEntity === baseEntity) - return this; + function validationManyDeletions() { + var threshold = 100; - return this.update(function() { - this._updateCalculated(headEntity, baseEntity); - delete this.entities[id]; - }); - }, + var validation = function(changes, graph) { + var warnings = []; + var nodes=0, ways=0, areas=0, relations=0; + changes.deleted.forEach(function(c) { + if (c.type === 'node') {nodes++;} + else if (c.type === 'way' && c.geometry(graph) === 'line') {ways++;} + else if (c.type === 'way' && c.geometry(graph) === 'area') {areas++;} + else if (c.type === 'relation') {relations++;} + }); + if (changes.deleted.length > threshold) { + warnings.push({ + id: 'many_deletions', + message: t('validations.many_deletions', + { n: changes.deleted.length, p: nodes, l: ways, a:areas, r: relations }) + }); + } - update: function() { - var graph = this.frozen ? coreGraph$$1(this, true) : this; + return warnings; + }; - for (var i = 0; i < arguments.length; i++) { - arguments[i].call(graph, graph); - } - if (this.frozen) graph.frozen = true; + return validation; + } - return graph; - }, + function validationMissingTag() { + // Slightly stricter check than Entity#isUsed (#3091) + function hasTags(entity, graph) { + return without(Object.keys(entity.tags), 'area', 'name').length > 0 || + graph.parentRelations(entity).length > 0; + } - // Obliterates any existing entities - load: function(entities) { - var base = this.base(); - this.entities = Object.create(base.entities); + var validation = function(changes, graph) { + var types = ['point', 'line', 'area', 'relation'], + warnings = []; + + for (var i = 0; i < changes.created.length; i++) { + var change = changes.created[i], + geometry = change.geometry(graph); + + if (types.indexOf(geometry) !== -1 && !hasTags(change, graph)) { + warnings.push({ + id: 'missing_tag', + message: t('validations.untagged_' + geometry), + tooltip: t('validations.untagged_' + geometry + '_tooltip'), + entity: change + }); + } + } - for (var i in entities) { - this.entities[i] = entities[i]; - this._updateCalculated(base.entities[i], this.entities[i]); - } + return warnings; + }; - return this; - } -}; - -var quickselect_1 = quickselect; -var default_1 = quickselect; - -function quickselect(arr, k, left, right, compare) { - quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare); -} -function quickselectStep(arr, k, left, right, compare) { - - while (right > left) { - if (right - left > 600) { - var n = right - left + 1; - var m = k - left + 1; - var z = Math.log(n); - var s = 0.5 * Math.exp(2 * z / 3); - var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1); - var newLeft = Math.max(left, Math.floor(k - m * s / n + sd)); - var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd)); - quickselectStep(arr, k, newLeft, newRight, compare); - } - var t = arr[k]; - var i = left; - var j = right; + return validation; + } - swap(arr, left, k); - if (compare(arr[right], t) > 0) swap(arr, left, right); + function validationOldMultipolygon() { - while (i < j) { - swap(arr, i, j); - i++; - j--; - while (compare(arr[i], t) < 0) i++; - while (compare(arr[j], t) > 0) j--; - } + return function validation(changes, graph) { + var warnings = []; + for (var i = 0; i < changes.created.length; i++) { + var entity = changes.created[i]; + var parent = osmIsSimpleMultipolygonOuterMember(entity, graph); + if (parent) { + warnings.push({ + id: 'old_multipolygon', + message: t('validations.old_multipolygon'), + tooltip: t('validations.old_multipolygon_tooltip'), + entity: parent + }); + } + } + return warnings; + }; + } - if (compare(arr[left], t) === 0) swap(arr, left, j); - else { - j++; - swap(arr, j, right); - } + // https://github.com/openstreetmap/josm/blob/mirror/src/org/ + // openstreetmap/josm/data/validation/tests/UnclosedWays.java#L80 + function validationTagSuggestsArea() { - if (j <= k) left = j + 1; - if (k <= j) right = j - 1; - } -} + function tagSuggestsArea(tags) { + if (isEmpty(tags)) return false; -function swap(arr, i, j) { - var tmp = arr[i]; - arr[i] = arr[j]; - arr[j] = tmp; -} + var presence = ['landuse', 'amenities', 'tourism', 'shop']; + for (var i = 0; i < presence.length; i++) { + if (tags[presence[i]] !== undefined) { + return presence[i] + '=' + tags[presence[i]]; + } + } -function defaultCompare(a, b) { - return a < b ? -1 : a > b ? 1 : 0; -} -quickselect_1.default = default_1; + if (tags.building && tags.building === 'yes') return 'building=yes'; + } -var rbush_1 = rbush; -var default_1$1 = rbush; + var validation = function(changes, graph) { + var warnings = []; + for (var i = 0; i < changes.created.length; i++) { + var change = changes.created[i], + geometry = change.geometry(graph), + suggestion = (geometry === 'line' ? tagSuggestsArea(change.tags) : undefined); + + if (suggestion) { + warnings.push({ + id: 'tag_suggests_area', + message: t('validations.tag_suggests_area', { tag: suggestion }), + entity: change + }); + } + } + return warnings; + }; -function rbush(maxEntries, format) { - if (!(this instanceof rbush)) return new rbush(maxEntries, format); - // max entries in a node is 9 by default; min node fill is 40% for best performance - this._maxEntries = Math.max(4, maxEntries || 9); - this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4)); + return validation; + } - if (format) { - this._initFormat(format); - } - this.clear(); -} -rbush.prototype = { + var Validations = /*#__PURE__*/Object.freeze({ + validationDeprecatedTag: validationDeprecatedTag, + validationDisconnectedHighway: validationDisconnectedHighway, + validationManyDeletions: validationManyDeletions, + validationMissingTag: validationMissingTag, + validationOldMultipolygon: validationOldMultipolygon, + validationTagSuggestsArea: validationTagSuggestsArea + }); - all: function () { - return this._all(this.data, []); - }, + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } - search: function (bbox) { + /* + iD.Difference represents the difference between two graphs. + It knows how to calculate the set of entities that were + created, modified, or deleted, and also contains the logic + for recursively extending a difference to the complete set + of entities that will require a redraw, taking into account + child and parent relationships. + */ + function coreDifference(base, head) { + var _changes = {}; + var _diff = {}; + var _length = 0; + var i, k, h, b, keys; + + function changed(h, b) { + if (h === b) return false; + if (!h || !b) return true; + + if (h.loc || b.loc) { + if (!h.loc && b.loc || h.loc && !b.loc || + h.loc[0] !== b.loc[0] || h.loc[1] !== b.loc[1]) return true; + } + if (h.nodes || b.nodes) { + if (!isEqual(h.nodes, b.nodes)) return true; + } + if (h.members || b.members) { + if (!isEqual(h.members, b.members)) return true; + } + return !isEqual(h.tags, b.tags); + } - var node = this.data, - result = [], - toBBox = this.toBBox; - if (!intersects$1(bbox, node)) return result; + keys = Object.keys(head.entities); + for (i = 0; i < keys.length; i++) { + k = keys[i]; + h = head.entities[k]; + b = base.entities[k]; + if (changed(h, b)) { + _changes[k] = {base: b, head: h}; + _length++; + } + } - var nodesToSearch = [], - i, len, child, childBBox; + keys = Object.keys(base.entities); + for (i = 0; i < keys.length; i++) { + k = keys[i]; + h = head.entities[k]; + b = base.entities[k]; + if (!_changes[k] && changed(h, b)) { + _changes[k] = {base: b, head: h}; + _length++; + } + } - while (node) { - for (i = 0, len = node.children.length; i < len; i++) { - child = node.children[i]; - childBBox = node.leaf ? toBBox(child) : child; + function addParents(parents, result) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; - if (intersects$1(bbox, childBBox)) { - if (node.leaf) result.push(child); - else if (contains$2(bbox, childBBox)) this._all(child, result); - else nodesToSearch.push(child); - } - } - node = nodesToSearch.pop(); - } + if (parent.id in result) + continue; - return result; - }, + result[parent.id] = parent; + addParents(head.parentRelations(parent), result); + } + } - collides: function (bbox) { - var node = this.data, - toBBox = this.toBBox; + _diff.length = function length() { + return _length; + }; - if (!intersects$1(bbox, node)) return false; - var nodesToSearch = [], - i, len, child, childBBox; + _diff.changes = function changes() { + return _changes; + }; - while (node) { - for (i = 0, len = node.children.length; i < len; i++) { - child = node.children[i]; - childBBox = node.leaf ? toBBox(child) : child; + _diff.extantIDs = function extantIDs() { + var result = []; + forEach(_changes, function(change, id) { + if (change.head) result.push(id); + }); + return result; + }; - if (intersects$1(bbox, childBBox)) { - if (node.leaf || contains$2(bbox, childBBox)) return true; - nodesToSearch.push(child); - } - } - node = nodesToSearch.pop(); - } - return false; - }, + _diff.modified = function modified() { + var result = []; + forEach(_changes, function(change) { + if (change.base && change.head) result.push(change.head); + }); + return result; + }; - load: function (data) { - if (!(data && data.length)) return this; - if (data.length < this._minEntries) { - for (var i = 0, len = data.length; i < len; i++) { - this.insert(data[i]); - } - return this; - } + _diff.created = function created() { + var result = []; + forEach(_changes, function(change) { + if (!change.base && change.head) result.push(change.head); + }); + return result; + }; - // recursively build the tree with the given data from scratch using OMT algorithm - var node = this._build(data.slice(), 0, data.length - 1, 0); - if (!this.data.children.length) { - // save as is if tree is empty - this.data = node; + _diff.deleted = function deleted() { + var result = []; + forEach(_changes, function(change) { + if (change.base && !change.head) result.push(change.base); + }); + return result; + }; - } else if (this.data.height === node.height) { - // split root if trees have the same height - this._splitRoot(this.data, node); - } else { - if (this.data.height < node.height) { - // swap trees if inserted one is bigger - var tmpNode = this.data; - this.data = node; - node = tmpNode; - } + _diff.summary = function summary() { + var relevant = {}; - // insert the small tree into the large tree at appropriate level - this._insert(node, this.data.height - node.height - 1, true); - } + function addEntity(entity, graph, changeType) { + relevant[entity.id] = { + entity: entity, + graph: graph, + changeType: changeType + }; + } - return this; - }, + function addParents(entity) { + var parents = head.parentWays(entity); + for (var j = parents.length - 1; j >= 0; j--) { + var parent = parents[j]; + if (!(parent.id in relevant)) addEntity(parent, head, 'modified'); + } + } - insert: function (item) { - if (item) this._insert(item, this.data.height - 1); - return this; - }, + var keys = Object.keys(_changes); + for (var i = 0; i < keys.length; i++) { + var change = _changes[keys[i]]; - clear: function () { - this.data = createNode([]); - return this; - }, + if (change.head && change.head.geometry(head) !== 'vertex') { + addEntity(change.head, head, change.base ? 'modified' : 'created'); - remove: function (item, equalsFn) { - if (!item) return this; + } else if (change.base && change.base.geometry(base) !== 'vertex') { + addEntity(change.base, base, 'deleted'); - var node = this.data, - bbox = this.toBBox(item), - path = [], - indexes = [], - i, parent, index, goingUp; + } else if (change.base && change.head) { // modified vertex + var moved = !isEqual(change.base.loc, change.head.loc); + var retagged = !isEqual(change.base.tags, change.head.tags); - // depth-first iterative tree traversal - while (node || path.length) { + if (moved) { + addParents(change.head); + } - if (!node) { // go up - node = path.pop(); - parent = path[path.length - 1]; - i = indexes.pop(); - goingUp = true; - } + if (retagged || (moved && change.head.hasInterestingTags())) { + addEntity(change.head, head, 'modified'); + } - if (node.leaf) { // check current node - index = findItem(item, node.children, equalsFn); + } else if (change.head && change.head.hasInterestingTags()) { // created vertex + addEntity(change.head, head, 'created'); - if (index !== -1) { - // item found, remove the item and condense tree upwards - node.children.splice(index, 1); - path.push(node); - this._condense(path); - return this; - } - } + } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex + addEntity(change.base, base, 'deleted'); + } + } - if (!goingUp && !node.leaf && contains$2(node, bbox)) { // go down - path.push(node); - indexes.push(i); - i = 0; - parent = node; - node = node.children[0]; + return values$1(relevant); + }; - } else if (parent) { // go right - i++; - node = parent.children[i]; - goingUp = false; - } else node = null; // nothing found - } + _diff.complete = function complete(extent) { + var result = {}; + var id, change; - return this; - }, + for (id in _changes) { + change = _changes[id]; - toBBox: function (item) { return item; }, + var h = change.head; + var b = change.base; + var entity = h || b; - compareMinX: compareNodeMinX, - compareMinY: compareNodeMinY, + if (extent && + (!h || !h.intersects(extent, head)) && + (!b || !b.intersects(extent, base))) + continue; - toJSON: function () { return this.data; }, + result[id] = h; - fromJSON: function (data) { - this.data = data; - return this; - }, + if (entity.type === 'way') { + var nh = h ? h.nodes : []; + var nb = b ? b.nodes : []; + var diff, i; - _all: function (node, result) { - var nodesToSearch = []; - while (node) { - if (node.leaf) result.push.apply(result, node.children); - else nodesToSearch.push.apply(nodesToSearch, node.children); + diff = difference(nh, nb); + for (i = 0; i < diff.length; i++) { + result[diff[i]] = head.hasEntity(diff[i]); + } - node = nodesToSearch.pop(); - } - return result; - }, + diff = difference(nb, nh); + for (i = 0; i < diff.length; i++) { + result[diff[i]] = head.hasEntity(diff[i]); + } + } - _build: function (items, left, right, height) { + addParents(head.parentWays(entity), result); + addParents(head.parentRelations(entity), result); + } - var N = right - left + 1, - M = this._maxEntries, - node; + return result; + }; - if (N <= M) { - // reached leaf level; return leaf - node = createNode(items.slice(left, right + 1)); - calcBBox(node, this.toBBox); - return node; - } - if (!height) { - // target height of the bulk-loaded tree - height = Math.ceil(Math.log(N) / Math.log(M)); + return _diff; + } - // target number of root entries to maximize storage utilization - M = Math.ceil(N / Math.pow(M, height - 1)); - } + /** Used for built-in method references. */ + var objectProto$18 = Object.prototype; - node = createNode([]); - node.leaf = false; - node.height = height; + /** Used to check objects for own properties. */ + var hasOwnProperty$15 = objectProto$18.hasOwnProperty; - // split the items into M mostly square tiles + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys$1(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty$15.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); - var N2 = Math.ceil(N / M), - N1 = N2 * Math.ceil(Math.sqrt(M)), - i, j, right2, right3; + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax$3 = Math.max; - multiSelect(items, left, right, N1, this.compareMinX); + /** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values$1(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - for (i = left; i <= right; i += N1) { + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax$3(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } - right2 = Math.min(i + N1 - 1, right); + function coreGraph$$1(other, mutable) { + if (!(this instanceof coreGraph$$1)) return new coreGraph$$1(other, mutable); - multiSelect(items, i, right2, N2, this.compareMinY); + if (other instanceof coreGraph$$1) { + var base = other.base(); + this.entities = assign(Object.create(base.entities), other.entities); + this._parentWays = assign(Object.create(base.parentWays), other._parentWays); + this._parentRels = assign(Object.create(base.parentRels), other._parentRels); - for (j = i; j <= right2; j += N2) { + } else { + this.entities = Object.create({}); + this._parentWays = Object.create({}); + this._parentRels = Object.create({}); + this.rebase(other || [], [this]); + } - right3 = Math.min(j + N2 - 1, right2); + this.transients = {}; + this._childNodes = {}; + this.frozen = !mutable; + } - // pack each entry recursively - node.children.push(this._build(items, j, right3, height - 1)); - } - } - calcBBox(node, this.toBBox); + coreGraph$$1.prototype = { - return node; - }, + hasEntity: function(id) { + return this.entities[id]; + }, - _chooseSubtree: function (bbox, node, level, path) { - var i, len, child, targetNode, area, enlargement, minArea, minEnlargement; + entity: function(id) { + var entity = this.entities[id]; - while (true) { - path.push(node); + //https://github.com/openstreetmap/iD/issues/3973#issuecomment-307052376 + if (!entity) { + entity = this.entities.__proto__[id]; // eslint-disable-line no-proto + } - if (node.leaf || path.length - 1 === level) break; + if (!entity) { + throw new Error('entity ' + id + ' not found'); + } + return entity; + }, - minArea = minEnlargement = Infinity; - for (i = 0, len = node.children.length; i < len; i++) { - child = node.children[i]; - area = bboxArea(child); - enlargement = enlargedArea(bbox, child) - area; + transient: function(entity, key, fn) { + var id = entity.id, + transients = this.transients[id] || + (this.transients[id] = {}); - // choose entry with the least area enlargement - if (enlargement < minEnlargement) { - minEnlargement = enlargement; - minArea = area < minArea ? area : minArea; - targetNode = child; + if (transients[key] !== undefined) { + return transients[key]; + } - } else if (enlargement === minEnlargement) { - // otherwise choose one with the smallest area - if (area < minArea) { - minArea = area; - targetNode = child; - } - } - } + transients[key] = fn.call(entity); - node = targetNode || node.children[0]; - } + return transients[key]; + }, - return node; - }, - _insert: function (item, level, isNode) { + parentWays: function(entity) { + var parents = this._parentWays[entity.id], + result = []; - var toBBox = this.toBBox, - bbox = isNode ? item : toBBox(item), - insertPath = []; + if (parents) { + for (var i = 0; i < parents.length; i++) { + result.push(this.entity(parents[i])); + } + } + return result; + }, - // find the best node for accommodating the item, saving all nodes along the path too - var node = this._chooseSubtree(bbox, this.data, level, insertPath); - // put the item into the node - node.children.push(item); - extend$1(node, bbox); + isPoi: function(entity) { + var parentWays = this._parentWays[entity.id]; + return !parentWays || parentWays.length === 0; + }, - // split on node overflow; propagate upwards if necessary - while (level >= 0) { - if (insertPath[level].children.length > this._maxEntries) { - this._split(insertPath, level); - level--; - } else break; - } - // adjust bboxes along the insertion path - this._adjustParentBBoxes(bbox, insertPath, level); - }, + isShared: function(entity) { + var parentWays = this._parentWays[entity.id]; + return parentWays && parentWays.length > 1; + }, - // split overflowed node into two - _split: function (insertPath, level) { - var node = insertPath[level], - M = node.children.length, - m = this._minEntries; + parentRelations: function(entity) { + var parents = this._parentRels[entity.id], + result = []; - this._chooseSplitAxis(node, m, M); + if (parents) { + for (var i = 0; i < parents.length; i++) { + result.push(this.entity(parents[i])); + } + } + return result; + }, - var splitIndex = this._chooseSplitIndex(node, m, M); - var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex)); - newNode.height = node.height; - newNode.leaf = node.leaf; + childNodes: function(entity) { + if (this._childNodes[entity.id]) return this._childNodes[entity.id]; + if (!entity.nodes) return []; - calcBBox(node, this.toBBox); - calcBBox(newNode, this.toBBox); + var nodes = []; + for (var i = 0; i < entity.nodes.length; i++) { + nodes[i] = this.entity(entity.nodes[i]); + } - if (level) insertPath[level - 1].children.push(newNode); - else this._splitRoot(node, newNode); - }, + if (debug) Object.freeze(nodes); - _splitRoot: function (node, newNode) { - // split root node - this.data = createNode([node, newNode]); - this.data.height = node.height + 1; - this.data.leaf = false; - calcBBox(this.data, this.toBBox); - }, + this._childNodes[entity.id] = nodes; + return this._childNodes[entity.id]; + }, - _chooseSplitIndex: function (node, m, M) { - var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index; + base: function() { + return { + 'entities': utilGetPrototypeOf(this.entities), + 'parentWays': utilGetPrototypeOf(this._parentWays), + 'parentRels': utilGetPrototypeOf(this._parentRels) + }; + }, - minOverlap = minArea = Infinity; - for (i = m; i <= M - m; i++) { - bbox1 = distBBox(node, 0, i, this.toBBox); - bbox2 = distBBox(node, i, M, this.toBBox); + // Unlike other graph methods, rebase mutates in place. This is because it + // is used only during the history operation that merges newly downloaded + // data into each state. To external consumers, it should appear as if the + // graph always contained the newly downloaded data. + rebase: function(entities, stack, force) { + var base = this.base(), + i, j, k, id; + + for (i = 0; i < entities.length; i++) { + var entity = entities[i]; + + if (!entity.visible || (!force && base.entities[entity.id])) + continue; + + // Merging data into the base graph + base.entities[entity.id] = entity; + this._updateCalculated(undefined, entity, base.parentWays, base.parentRels); + + // Restore provisionally-deleted nodes that are discovered to have an extant parent + if (entity.type === 'way') { + for (j = 0; j < entity.nodes.length; j++) { + id = entity.nodes[j]; + for (k = 1; k < stack.length; k++) { + var ents = stack[k].entities; + if (ents.hasOwnProperty(id) && ents[id] === undefined) { + delete ents[id]; + } + } + } + } + } - overlap = intersectionArea(bbox1, bbox2); - area = bboxArea(bbox1) + bboxArea(bbox2); + for (i = 0; i < stack.length; i++) { + stack[i]._updateRebased(); + } + }, - // choose distribution with minimum overlap - if (overlap < minOverlap) { - minOverlap = overlap; - index = i; - minArea = area < minArea ? area : minArea; + _updateRebased: function() { + var base = this.base(), + i, k, child, id, keys; + + keys = Object.keys(this._parentWays); + for (i = 0; i < keys.length; i++) { + child = keys[i]; + if (base.parentWays[child]) { + for (k = 0; k < base.parentWays[child].length; k++) { + id = base.parentWays[child][k]; + if (!this.entities.hasOwnProperty(id) && !includes(this._parentWays[child], id)) { + this._parentWays[child].push(id); + } + } + } + } - } else if (overlap === minOverlap) { - // otherwise choose distribution with minimum area - if (area < minArea) { - minArea = area; - index = i; - } - } - } + keys = Object.keys(this._parentRels); + for (i = 0; i < keys.length; i++) { + child = keys[i]; + if (base.parentRels[child]) { + for (k = 0; k < base.parentRels[child].length; k++) { + id = base.parentRels[child][k]; + if (!this.entities.hasOwnProperty(id) && !includes(this._parentRels[child], id)) { + this._parentRels[child].push(id); + } + } + } + } - return index; - }, + this.transients = {}; - // sorts node children by the best axis for split - _chooseSplitAxis: function (node, m, M) { + // this._childNodes is not updated, under the assumption that + // ways are always downloaded with their child nodes. + }, - var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX, - compareMinY = node.leaf ? this.compareMinY : compareNodeMinY, - xMargin = this._allDistMargin(node, m, M, compareMinX), - yMargin = this._allDistMargin(node, m, M, compareMinY); - // if total distributions margin value is minimal for x, sort by minX, - // otherwise it's already sorted by minY - if (xMargin < yMargin) node.children.sort(compareMinX); - }, + // Updates calculated properties (parentWays, parentRels) for the specified change + _updateCalculated: function(oldentity, entity, parentWays, parentRels) { + + parentWays = parentWays || this._parentWays; + parentRels = parentRels || this._parentRels; + + var type = entity && entity.type || oldentity && oldentity.type, + removed, added, ways, rels, i; + + + if (type === 'way') { + + // Update parentWays + if (oldentity && entity) { + removed = difference(oldentity.nodes, entity.nodes); + added = difference(entity.nodes, oldentity.nodes); + } else if (oldentity) { + removed = oldentity.nodes; + added = []; + } else if (entity) { + removed = []; + added = entity.nodes; + } + for (i = 0; i < removed.length; i++) { + parentWays[removed[i]] = without(parentWays[removed[i]], oldentity.id); + } + for (i = 0; i < added.length; i++) { + ways = without(parentWays[added[i]], entity.id); + ways.push(entity.id); + parentWays[added[i]] = ways; + } + + } else if (type === 'relation') { + + // Update parentRels + if (oldentity && entity) { + removed = difference(oldentity.members, entity.members); + added = difference(entity.members, oldentity); + } else if (oldentity) { + removed = oldentity.members; + added = []; + } else if (entity) { + removed = []; + added = entity.members; + } + for (i = 0; i < removed.length; i++) { + parentRels[removed[i].id] = without(parentRels[removed[i].id], oldentity.id); + } + for (i = 0; i < added.length; i++) { + rels = without(parentRels[added[i].id], entity.id); + rels.push(entity.id); + parentRels[added[i].id] = rels; + } + } + }, - // total margin of all possible split distributions where each node is at least m full - _allDistMargin: function (node, m, M, compare) { - node.children.sort(compare); + replace: function(entity) { + if (this.entities[entity.id] === entity) + return this; - var toBBox = this.toBBox, - leftBBox = distBBox(node, 0, m, toBBox), - rightBBox = distBBox(node, M - m, M, toBBox), - margin = bboxMargin(leftBBox) + bboxMargin(rightBBox), - i, child; + return this.update(function() { + this._updateCalculated(this.entities[entity.id], entity); + this.entities[entity.id] = entity; + }); + }, - for (i = m; i < M - m; i++) { - child = node.children[i]; - extend$1(leftBBox, node.leaf ? toBBox(child) : child); - margin += bboxMargin(leftBBox); - } - for (i = M - m - 1; i >= m; i--) { - child = node.children[i]; - extend$1(rightBBox, node.leaf ? toBBox(child) : child); - margin += bboxMargin(rightBBox); - } + remove: function(entity) { + return this.update(function() { + this._updateCalculated(entity, undefined); + this.entities[entity.id] = undefined; + }); + }, - return margin; - }, - _adjustParentBBoxes: function (bbox, path, level) { - // adjust bboxes along the given tree path - for (var i = level; i >= 0; i--) { - extend$1(path[i], bbox); - } - }, + revert: function(id) { + var baseEntity = this.base().entities[id], + headEntity = this.entities[id]; - _condense: function (path) { - // go through the path, removing empty nodes and updating bboxes - for (var i = path.length - 1, siblings; i >= 0; i--) { - if (path[i].children.length === 0) { - if (i > 0) { - siblings = path[i - 1].children; - siblings.splice(siblings.indexOf(path[i]), 1); + if (headEntity === baseEntity) + return this; - } else this.clear(); + return this.update(function() { + this._updateCalculated(headEntity, baseEntity); + delete this.entities[id]; + }); + }, - } else calcBBox(path[i], this.toBBox); - } - }, - _initFormat: function (format) { - // data format (minX, minY, maxX, maxY accessors) + update: function() { + var graph = this.frozen ? coreGraph$$1(this, true) : this; - // uses eval-type function compilation instead of just accepting a toBBox function - // because the algorithms are very sensitive to sorting functions performance, - // so they should be dead simple and without inner calls + for (var i = 0; i < arguments.length; i++) { + arguments[i].call(graph, graph); + } - var compareArr = ['return a', ' - b', ';']; + if (this.frozen) graph.frozen = true; - this.compareMinX = new Function('a', 'b', compareArr.join(format[0])); - this.compareMinY = new Function('a', 'b', compareArr.join(format[1])); + return graph; + }, - this.toBBox = new Function('a', - 'return {minX: a' + format[0] + - ', minY: a' + format[1] + - ', maxX: a' + format[2] + - ', maxY: a' + format[3] + '};'); - } -}; -function findItem(item, items, equalsFn) { - if (!equalsFn) return items.indexOf(item); + // Obliterates any existing entities + load: function(entities) { + var base = this.base(); + this.entities = Object.create(base.entities); - for (var i = 0; i < items.length; i++) { - if (equalsFn(item, items[i])) return i; - } - return -1; -} - -// calculate node's bbox from bboxes of its children -function calcBBox(node, toBBox) { - distBBox(node, 0, node.children.length, toBBox, node); -} - -// min bounding rectangle of node children from k to p-1 -function distBBox(node, k, p, toBBox, destNode) { - if (!destNode) destNode = createNode(null); - destNode.minX = Infinity; - destNode.minY = Infinity; - destNode.maxX = -Infinity; - destNode.maxY = -Infinity; - - for (var i = k, child; i < p; i++) { - child = node.children[i]; - extend$1(destNode, node.leaf ? toBBox(child) : child); - } - - return destNode; -} - -function extend$1(a, b) { - a.minX = Math.min(a.minX, b.minX); - a.minY = Math.min(a.minY, b.minY); - a.maxX = Math.max(a.maxX, b.maxX); - a.maxY = Math.max(a.maxY, b.maxY); - return a; -} - -function compareNodeMinX(a, b) { return a.minX - b.minX; } -function compareNodeMinY(a, b) { return a.minY - b.minY; } - -function bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); } -function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); } - -function enlargedArea(a, b) { - return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) * - (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY)); -} - -function intersectionArea(a, b) { - var minX = Math.max(a.minX, b.minX), - minY = Math.max(a.minY, b.minY), - maxX = Math.min(a.maxX, b.maxX), - maxY = Math.min(a.maxY, b.maxY); - - return Math.max(0, maxX - minX) * - Math.max(0, maxY - minY); -} - -function contains$2(a, b) { - return a.minX <= b.minX && - a.minY <= b.minY && - b.maxX <= a.maxX && - b.maxY <= a.maxY; -} - -function intersects$1(a, b) { - return b.minX <= a.maxX && - b.minY <= a.maxY && - b.maxX >= a.minX && - b.maxY >= a.minY; -} - -function createNode(children) { - return { - children: children, - height: 1, - leaf: true, - minX: Infinity, - minY: Infinity, - maxX: -Infinity, - maxY: -Infinity - }; -} + for (var i in entities) { + this.entities[i] = entities[i]; + this._updateCalculated(base.entities[i], this.entities[i]); + } -// sort an array so that items come in groups of n unsorted items, with groups sorted between each other; -// combines selection algorithm with binary divide & conquer approach + return this; + } + }; -function multiSelect(arr, left, right, n, compare) { - var stack = [left, right], - mid; + function coreTree(head) { + var rtree = rbush_1(), + bboxes = {}, + tree = {}; - while (stack.length) { - right = stack.pop(); - left = stack.pop(); - if (right - left <= n) continue; + function entityBBox(entity) { + var bbox = entity.extent(head).bbox(); + bbox.id = entity.id; + bboxes[entity.id] = bbox; + return bbox; + } - mid = left + Math.ceil((right - left) / n / 2) * n; - quickselect_1(arr, mid, left, right, compare); - stack.push(left, mid, mid, right); - } -} -rbush_1.default = default_1$1; + function updateParents(entity, insertions, memo) { + head.parentWays(entity).forEach(function(way) { + if (bboxes[way.id]) { + rtree.remove(bboxes[way.id]); + insertions[way.id] = way; + } + updateParents(way, insertions, memo); + }); -function coreTree(head) { - var rtree = rbush_1(), - bboxes = {}, - tree = {}; + head.parentRelations(entity).forEach(function(relation) { + if (memo[entity.id]) return; + memo[entity.id] = true; + if (bboxes[relation.id]) { + rtree.remove(bboxes[relation.id]); + insertions[relation.id] = relation; + } + updateParents(relation, insertions, memo); + }); + } - function entityBBox(entity) { - var bbox = entity.extent(head).bbox(); - bbox.id = entity.id; - bboxes[entity.id] = bbox; - return bbox; - } + tree.rebase = function(entities, force) { + var insertions = {}; + for (var i = 0; i < entities.length; i++) { + var entity = entities[i]; - function updateParents(entity, insertions, memo) { - head.parentWays(entity).forEach(function(way) { - if (bboxes[way.id]) { - rtree.remove(bboxes[way.id]); - insertions[way.id] = way; - } - updateParents(way, insertions, memo); - }); + if (!entity.visible) + continue; - head.parentRelations(entity).forEach(function(relation) { - if (memo[entity.id]) return; - memo[entity.id] = true; - if (bboxes[relation.id]) { - rtree.remove(bboxes[relation.id]); - insertions[relation.id] = relation; - } - updateParents(relation, insertions, memo); - }); - } + if (head.entities.hasOwnProperty(entity.id) || bboxes[entity.id]) { + if (!force) { + continue; + } else if (bboxes[entity.id]) { + rtree.remove(bboxes[entity.id]); + } + } + insertions[entity.id] = entity; + updateParents(entity, insertions, {}); + } - tree.rebase = function(entities, force) { - var insertions = {}; + rtree.load(map$3(insertions, entityBBox)); - for (var i = 0; i < entities.length; i++) { - var entity = entities[i]; + return tree; + }; - if (!entity.visible) - continue; - if (head.entities.hasOwnProperty(entity.id) || bboxes[entity.id]) { - if (!force) { - continue; - } else if (bboxes[entity.id]) { - rtree.remove(bboxes[entity.id]); - } - } + tree.intersects = function(extent, graph) { + if (graph !== head) { + var diff = coreDifference(head, graph), + insertions = {}; - insertions[entity.id] = entity; - updateParents(entity, insertions, {}); - } + head = graph; - rtree.load(map$3(insertions, entityBBox)); + diff.deleted().forEach(function(entity) { + rtree.remove(bboxes[entity.id]); + delete bboxes[entity.id]; + }); - return tree; - }; + diff.modified().forEach(function(entity) { + rtree.remove(bboxes[entity.id]); + insertions[entity.id] = entity; + updateParents(entity, insertions, {}); + }); + diff.created().forEach(function(entity) { + insertions[entity.id] = entity; + }); - tree.intersects = function(extent, graph) { - if (graph !== head) { - var diff = coreDifference(head, graph), - insertions = {}; + rtree.load(map$3(insertions, entityBBox)); + } - head = graph; + return rtree.search(extent.bbox()).map(function(bbox) { + return head.entity(bbox.id); + }); + }; - diff.deleted().forEach(function(entity) { - rtree.remove(bboxes[entity.id]); - delete bboxes[entity.id]; - }); - diff.modified().forEach(function(entity) { - rtree.remove(bboxes[entity.id]); - insertions[entity.id] = entity; - updateParents(entity, insertions, {}); - }); + return tree; + } - diff.created().forEach(function(entity) { - insertions[entity.id] = entity; - }); + /* + * This code is licensed under the MIT license. + * + * Copyright © 2013, iD authors. + * + * Portions copyright © 2011, Keith Cirkel + * See https://github.com/keithamus/jwerty + * + */ + function d3keybinding(namespace$$1) { + var bindings = []; + + + function testBindings(isCapturing) { + var didMatch = false, + i, binding; + + // Most key shortcuts will accept either lower or uppercase ('h' or 'H'), + // so we don't strictly match on the shift key, but we prioritize + // shifted bindings first, and fallback to unshifted only if no match. + // (This lets us differentiate between '←'/'⇧←' or '⌘Z'/'⌘⇧Z') + + // priority match shifted bindings first + for (i = 0; i < bindings.length; i++) { + binding = bindings[i]; + if (!binding.event.modifiers.shiftKey) continue; // no shift + if (!!binding.capture !== isCapturing) continue; + if (matches(binding, true)) { + binding.callback(); + didMatch = true; + } + } - rtree.load(map$3(insertions, entityBBox)); - } + // then unshifted bindings + if (didMatch) return; + for (i = 0; i < bindings.length; i++) { + binding = bindings[i]; + if (binding.event.modifiers.shiftKey) continue; // shift + if (!!binding.capture !== isCapturing) continue; + if (matches(binding, false)) { + binding.callback(); + } + } - return rtree.search(extent.bbox()).map(function(bbox) { - return head.entity(bbox.id); - }); - }; + function matches(binding, testShift) { + var event$$1 = event; + var isMatch = false; + var tryKeyCode = true; + + // Prefer a match on `KeyboardEvent.key` + if (event$$1.key !== undefined) { + tryKeyCode = (event$$1.key.charCodeAt(0) > 255); // outside ISO-Latin-1 + isMatch = true; + + if (binding.event.key === undefined) { + isMatch = false; + } else if (Array.isArray(binding.event.key)) { + if (binding.event.key.map(function(s) { return s.toLowerCase(); }).indexOf(event$$1.key.toLowerCase()) === -1) + isMatch = false; + } else { + if (event$$1.key.toLowerCase() !== binding.event.key.toLowerCase()) + isMatch = false; + } + } + + // Fallback match on `KeyboardEvent.keyCode`, can happen if: + // - browser doesn't support `KeyboardEvent.key` + // - `KeyboardEvent.key` is outside ISO-Latin-1 range (cyrillic?) + if (!isMatch && tryKeyCode) { + isMatch = (event$$1.keyCode === binding.event.keyCode); + } + + if (!isMatch) return false; + + // test modifier keys + if (!(event$$1.ctrlKey && event$$1.altKey)) { // if both are set, assume AltGr and skip it - #4096 + if (event$$1.ctrlKey !== binding.event.modifiers.ctrlKey) return false; + if (event$$1.altKey !== binding.event.modifiers.altKey) return false; + } + if (event$$1.metaKey !== binding.event.modifiers.metaKey) return false; + if (testShift && event$$1.shiftKey !== binding.event.modifiers.shiftKey) return false; + + return true; + } + } - return tree; -} - -/* - * This code is licensed under the MIT license. - * - * Copyright © 2013, iD authors. - * - * Portions copyright © 2011, Keith Cirkel - * See https://github.com/keithamus/jwerty - * - */ -function d3keybinding(namespace$$1) { - var bindings = []; - - - function testBindings(isCapturing) { - var didMatch = false, - i, binding; - - // Most key shortcuts will accept either lower or uppercase ('h' or 'H'), - // so we don't strictly match on the shift key, but we prioritize - // shifted bindings first, and fallback to unshifted only if no match. - // (This lets us differentiate between '←'/'⇧←' or '⌘Z'/'⌘⇧Z') - - // priority match shifted bindings first - for (i = 0; i < bindings.length; i++) { - binding = bindings[i]; - if (!binding.event.modifiers.shiftKey) continue; // no shift - if (!!binding.capture !== isCapturing) continue; - if (matches(binding, true)) { - binding.callback(); - didMatch = true; - } - } - // then unshifted bindings - if (didMatch) return; - for (i = 0; i < bindings.length; i++) { - binding = bindings[i]; - if (binding.event.modifiers.shiftKey) continue; // shift - if (!!binding.capture !== isCapturing) continue; - if (matches(binding, false)) { - binding.callback(); - } - } + function capture() { + testBindings(true); + } - function matches(binding, testShift) { - var event$$1 = event; - var isMatch = false; - var tryKeyCode = true; - - // Prefer a match on `KeyboardEvent.key` - if (event$$1.key !== undefined) { - tryKeyCode = (event$$1.key.charCodeAt(0) > 255); // outside ISO-Latin-1 - isMatch = true; - - if (binding.event.key === undefined) { - isMatch = false; - } else if (Array.isArray(binding.event.key)) { - if (binding.event.key.map(function(s) { return s.toLowerCase(); }).indexOf(event$$1.key.toLowerCase()) === -1) - isMatch = false; - } else { - if (event$$1.key.toLowerCase() !== binding.event.key.toLowerCase()) - isMatch = false; - } - } + function bubble() { + var tagName = select(event.target).node().tagName; + if (tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA') { + return; + } + testBindings(false); + } - // Fallback match on `KeyboardEvent.keyCode`, can happen if: - // - browser doesn't support `KeyboardEvent.key` - // - `KeyboardEvent.key` is outside ISO-Latin-1 range (cyrillic?) - if (!isMatch && tryKeyCode) { - isMatch = (event$$1.keyCode === binding.event.keyCode); - } - if (!isMatch) return false; + function keybinding(selection$$1) { + selection$$1 = selection$$1 || select(document); + selection$$1.on('keydown.capture' + namespace$$1, capture, true); + selection$$1.on('keydown.bubble' + namespace$$1, bubble, false); + return keybinding; + } - // test modifier keys - if (!(event$$1.ctrlKey && event$$1.altKey)) { // if both are set, assume AltGr and skip it - #4096 - if (event$$1.ctrlKey !== binding.event.modifiers.ctrlKey) return false; - if (event$$1.altKey !== binding.event.modifiers.altKey) return false; - } - if (event$$1.metaKey !== binding.event.modifiers.metaKey) return false; - if (testShift && event$$1.shiftKey !== binding.event.modifiers.shiftKey) return false; - return true; - } - } + keybinding.off = function(selection$$1) { + bindings = []; + selection$$1 = selection$$1 || select(document); + selection$$1.on('keydown.capture' + namespace$$1, null); + selection$$1.on('keydown.bubble' + namespace$$1, null); + return keybinding; + }; - function capture() { - testBindings(true); - } + keybinding.on = function(codes, callback, capture) { + var arr = [].concat(codes); + for (var i = 0; i < arr.length; i++) { + var code = arr[i]; + var binding = { + event: { + key: undefined, // preferred + keyCode: 0, // fallback + modifiers: { + shiftKey: false, + ctrlKey: false, + altKey: false, + metaKey: false + } + }, + capture: capture, + callback: callback + }; + + code = code.toLowerCase().match(/(?:(?:[^+⇧⌃⌥⌘])+|[⇧⌃⌥⌘]|\+\+|^\+$)/g); + + for (var j = 0; j < code.length; j++) { + // Normalise matching errors + if (code[j] === '++') code[j] = '+'; + + if (code[j] in d3keybinding.modifierCodes) { + binding.event.modifiers[d3keybinding.modifierProperties[d3keybinding.modifierCodes[code[j]]]] = true; + } else { + binding.event.key = d3keybinding.keys[code[j]] || code[j]; + if (code[j] in d3keybinding.keyCodes) { + binding.event.keyCode = d3keybinding.keyCodes[code[j]]; + } + } + } + + bindings.push(binding); + } + return keybinding; + }; - function bubble() { - var tagName = d3_select(event.target).node().tagName; - if (tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA') { - return; - } - testBindings(false); - } + return keybinding; + } - function keybinding(selection$$1) { - selection$$1 = selection$$1 || d3_select(document); - selection$$1.on('keydown.capture' + namespace$$1, capture, true); - selection$$1.on('keydown.bubble' + namespace$$1, bubble, false); - return keybinding; - } + d3keybinding.modifierCodes = { + // Shift key, ⇧ + '⇧': 16, shift: 16, + // CTRL key, on Mac: ⌃ + '⌃': 17, ctrl: 17, + // ALT key, on Mac: ⌥ (Alt) + '⌥': 18, alt: 18, option: 18, + // META, on Mac: ⌘ (CMD), on Windows (Win), on Linux (Super) + '⌘': 91, meta: 91, cmd: 91, 'super': 91, win: 91 + }; + d3keybinding.modifierProperties = { + 16: 'shiftKey', + 17: 'ctrlKey', + 18: 'altKey', + 91: 'metaKey' + }; - keybinding.off = function(selection$$1) { - bindings = []; - selection$$1 = selection$$1 || d3_select(document); - selection$$1.on('keydown.capture' + namespace$$1, null); - selection$$1.on('keydown.bubble' + namespace$$1, null); - return keybinding; - }; + d3keybinding.keys = { + // Backspace key, on Mac: ⌫ (Backspace) + '⌫': 'Backspace', backspace: 'Backspace', + // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥ + '⇥': 'Tab', '⇆': 'Tab', tab: 'Tab', + // Return key, ↩ + '↩': 'Enter', 'return': 'Enter', enter: 'Enter', '⌅': 'Enter', + // Pause/Break key + 'pause': 'Pause', 'pause-break': 'Pause', + // Caps Lock key, ⇪ + '⇪': 'CapsLock', caps: 'CapsLock', 'caps-lock': 'CapsLock', + // Escape key, on Mac: ⎋, on Windows: Esc + '⎋': ['Escape', 'Esc'], escape: ['Escape', 'Esc'], esc: ['Escape', 'Esc'], + // Space key + space: [' ', 'Spacebar'], + // Page-Up key, or pgup, on Mac: ↖ + '↖': 'PageUp', pgup: 'PageUp', 'page-up': 'PageUp', + // Page-Down key, or pgdown, on Mac: ↘ + '↘': 'PageDown', pgdown: 'PageDown', 'page-down': 'PageDown', + // END key, on Mac: ⇟ + '⇟': 'End', end: 'End', + // HOME key, on Mac: ⇞ + '⇞': 'Home', home: 'Home', + // Insert key, or ins + ins: 'Insert', insert: 'Insert', + // Delete key, on Mac: ⌦ (Delete) + '⌦': ['Delete', 'Del'], del: ['Delete', 'Del'], 'delete': ['Delete', 'Del'], + // Left Arrow Key, or ← + '←': ['ArrowLeft', 'Left'], left: ['ArrowLeft', 'Left'], 'arrow-left': ['ArrowLeft', 'Left'], + // Up Arrow Key, or ↑ + '↑': ['ArrowUp', 'Up'], up: ['ArrowUp', 'Up'], 'arrow-up': ['ArrowUp', 'Up'], + // Right Arrow Key, or → + '→': ['ArrowRight', 'Right'], right: ['ArrowRight', 'Right'], 'arrow-right': ['ArrowRight', 'Right'], + // Up Arrow Key, or ↓ + '↓': ['ArrowDown', 'Down'], down: ['ArrowDown', 'Down'], 'arrow-down': ['ArrowDown', 'Down'], + // odities, stuff for backward compatibility (browsers and code): + // Num-Multiply, or * + '*': ['*', 'Multiply'], star: ['*', 'Multiply'], asterisk: ['*', 'Multiply'], multiply: ['*', 'Multiply'], + // Num-Plus or + + '+': ['+', 'Add'], 'plus': ['+', 'Add'], + // Num-Subtract, or - + '-': ['-', 'Subtract'], subtract: ['-', 'Subtract'], 'dash': ['-', 'Subtract'], + // Semicolon + semicolon: ';', + // = or equals + equals: '=', + // Comma, or , + comma: ',', + // Period, or ., or full-stop + period: '.', 'full-stop': '.', + // Slash, or /, or forward-slash + slash: '/', 'forward-slash': '/', + // Tick, or `, or back-quote + tick: '`', 'back-quote': '`', + // Open bracket, or [ + 'open-bracket': '[', + // Back slash, or \ + 'back-slash': '\\', + // Close backet, or ] + 'close-bracket': ']', + // Apostrophe, or Quote, or ' + quote: '\'', apostrophe: '\'', + // NUMPAD 0-9 + 'num-0': '0', + 'num-1': '1', + 'num-2': '2', + 'num-3': '3', + 'num-4': '4', + 'num-5': '5', + 'num-6': '6', + 'num-7': '7', + 'num-8': '8', + 'num-9': '9', + // F1-F25 + f1: 'F1', + f2: 'F2', + f3: 'F3', + f4: 'F4', + f5: 'F5', + f6: 'F6', + f7: 'F7', + f8: 'F8', + f9: 'F9', + f10: 'F10', + f11: 'F11', + f12: 'F12', + f13: 'F13', + f14: 'F14', + f15: 'F15', + f16: 'F16', + f17: 'F17', + f18: 'F18', + f19: 'F19', + f20: 'F20', + f21: 'F21', + f22: 'F22', + f23: 'F23', + f24: 'F24', + f25: 'F25' + }; + d3keybinding.keyCodes = { + // Backspace key, on Mac: ⌫ (Backspace) + '⌫': 8, backspace: 8, + // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥ + '⇥': 9, '⇆': 9, tab: 9, + // Return key, ↩ + '↩': 13, 'return': 13, enter: 13, '⌅': 13, + // Pause/Break key + 'pause': 19, 'pause-break': 19, + // Caps Lock key, ⇪ + '⇪': 20, caps: 20, 'caps-lock': 20, + // Escape key, on Mac: ⎋, on Windows: Esc + '⎋': 27, escape: 27, esc: 27, + // Space key + space: 32, + // Page-Up key, or pgup, on Mac: ↖ + '↖': 33, pgup: 33, 'page-up': 33, + // Page-Down key, or pgdown, on Mac: ↘ + '↘': 34, pgdown: 34, 'page-down': 34, + // END key, on Mac: ⇟ + '⇟': 35, end: 35, + // HOME key, on Mac: ⇞ + '⇞': 36, home: 36, + // Insert key, or ins + ins: 45, insert: 45, + // Delete key, on Mac: ⌦ (Delete) + '⌦': 46, del: 46, 'delete': 46, + // Left Arrow Key, or ← + '←': 37, left: 37, 'arrow-left': 37, + // Up Arrow Key, or ↑ + '↑': 38, up: 38, 'arrow-up': 38, + // Right Arrow Key, or → + '→': 39, right: 39, 'arrow-right': 39, + // Up Arrow Key, or ↓ + '↓': 40, down: 40, 'arrow-down': 40, + // odities, printing characters that come out wrong: + // Firefox Equals + 'ffequals': 61, + // Num-Multiply, or * + '*': 106, star: 106, asterisk: 106, multiply: 106, + // Num-Plus or + + '+': 107, 'plus': 107, + // Num-Subtract, or - + '-': 109, subtract: 109, + // Firefox Plus + 'ffplus': 171, + // Firefox Minus + 'ffminus': 173, + // Semicolon + ';': 186, semicolon: 186, + // = or equals + '=': 187, 'equals': 187, + // Comma, or , + ',': 188, comma: 188, + // Dash / Underscore key + 'dash': 189, + // Period, or ., or full-stop + '.': 190, period: 190, 'full-stop': 190, + // Slash, or /, or forward-slash + '/': 191, slash: 191, 'forward-slash': 191, + // Tick, or `, or back-quote + '`': 192, tick: 192, 'back-quote': 192, + // Open bracket, or [ + '[': 219, 'open-bracket': 219, + // Back slash, or \ + '\\': 220, 'back-slash': 220, + // Close backet, or ] + ']': 221, 'close-bracket': 221, + // Apostrophe, or Quote, or ' + '\'': 222, quote: 222, apostrophe: 222 + }; - keybinding.on = function(codes, callback, capture) { - var arr = [].concat(codes); - for (var i = 0; i < arr.length; i++) { - var code = arr[i]; - var binding = { - event: { - key: undefined, // preferred - keyCode: 0, // fallback - modifiers: { - shiftKey: false, - ctrlKey: false, - altKey: false, - metaKey: false - } - }, - capture: capture, - callback: callback - }; + // NUMPAD 0-9 + var i$1 = 95, n = 0; + while (++i$1 < 106) { + d3keybinding.keyCodes['num-' + n] = i$1; + ++n; + } - code = code.toLowerCase().match(/(?:(?:[^+⇧⌃⌥⌘])+|[⇧⌃⌥⌘]|\+\+|^\+$)/g); + // 0-9 + i$1 = 47; n = 0; + while (++i$1 < 58) { + d3keybinding.keyCodes[n] = i$1; + ++n; + } - for (var j = 0; j < code.length; j++) { - // Normalise matching errors - if (code[j] === '++') code[j] = '+'; + // F1-F25 + i$1 = 111; n = 1; + while (++i$1 < 136) { + d3keybinding.keyCodes['f' + n] = i$1; + ++n; + } - if (code[j] in d3keybinding.modifierCodes) { - binding.event.modifiers[d3keybinding.modifierProperties[d3keybinding.modifierCodes[code[j]]]] = true; - } else { - binding.event.key = d3keybinding.keys[code[j]] || code[j]; - if (code[j] in d3keybinding.keyCodes) { - binding.event.keyCode = d3keybinding.keyCodes[code[j]]; - } - } - } + // a-z + i$1 = 64; + while (++i$1 < 91) { + d3keybinding.keyCodes[String.fromCharCode(i$1).toLowerCase()] = i$1; + } - bindings.push(binding); + function tooltip() { + var tooltip = function(selection$$1) { + selection$$1.each(setup); + }, + animation = utilFunctor(false), + html = utilFunctor(false), + title = function() { + var title = this.getAttribute('data-original-title'); + if (title) { + return title; + } else { + title = this.getAttribute('title'); + this.removeAttribute('title'); + this.setAttribute('data-original-title', title); } + return title; + }, + over = 'mouseenter.tooltip', + out = 'mouseleave.tooltip', + placement = utilFunctor('top'); - return keybinding; - }; - return keybinding; -} - - -d3keybinding.modifierCodes = { - // Shift key, ⇧ - '⇧': 16, shift: 16, - // CTRL key, on Mac: ⌃ - '⌃': 17, ctrl: 17, - // ALT key, on Mac: ⌥ (Alt) - '⌥': 18, alt: 18, option: 18, - // META, on Mac: ⌘ (CMD), on Windows (Win), on Linux (Super) - '⌘': 91, meta: 91, cmd: 91, 'super': 91, win: 91 -}; - -d3keybinding.modifierProperties = { - 16: 'shiftKey', - 17: 'ctrlKey', - 18: 'altKey', - 91: 'metaKey' -}; - -d3keybinding.keys = { - // Backspace key, on Mac: ⌫ (Backspace) - '⌫': 'Backspace', backspace: 'Backspace', - // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥ - '⇥': 'Tab', '⇆': 'Tab', tab: 'Tab', - // Return key, ↩ - '↩': 'Enter', 'return': 'Enter', enter: 'Enter', '⌅': 'Enter', - // Pause/Break key - 'pause': 'Pause', 'pause-break': 'Pause', - // Caps Lock key, ⇪ - '⇪': 'CapsLock', caps: 'CapsLock', 'caps-lock': 'CapsLock', - // Escape key, on Mac: ⎋, on Windows: Esc - '⎋': ['Escape', 'Esc'], escape: ['Escape', 'Esc'], esc: ['Escape', 'Esc'], - // Space key - space: [' ', 'Spacebar'], - // Page-Up key, or pgup, on Mac: ↖ - '↖': 'PageUp', pgup: 'PageUp', 'page-up': 'PageUp', - // Page-Down key, or pgdown, on Mac: ↘ - '↘': 'PageDown', pgdown: 'PageDown', 'page-down': 'PageDown', - // END key, on Mac: ⇟ - '⇟': 'End', end: 'End', - // HOME key, on Mac: ⇞ - '⇞': 'Home', home: 'Home', - // Insert key, or ins - ins: 'Insert', insert: 'Insert', - // Delete key, on Mac: ⌦ (Delete) - '⌦': ['Delete', 'Del'], del: ['Delete', 'Del'], 'delete': ['Delete', 'Del'], - // Left Arrow Key, or ← - '←': ['ArrowLeft', 'Left'], left: ['ArrowLeft', 'Left'], 'arrow-left': ['ArrowLeft', 'Left'], - // Up Arrow Key, or ↑ - '↑': ['ArrowUp', 'Up'], up: ['ArrowUp', 'Up'], 'arrow-up': ['ArrowUp', 'Up'], - // Right Arrow Key, or → - '→': ['ArrowRight', 'Right'], right: ['ArrowRight', 'Right'], 'arrow-right': ['ArrowRight', 'Right'], - // Up Arrow Key, or ↓ - '↓': ['ArrowDown', 'Down'], down: ['ArrowDown', 'Down'], 'arrow-down': ['ArrowDown', 'Down'], - // odities, stuff for backward compatibility (browsers and code): - // Num-Multiply, or * - '*': ['*', 'Multiply'], star: ['*', 'Multiply'], asterisk: ['*', 'Multiply'], multiply: ['*', 'Multiply'], - // Num-Plus or + - '+': ['+', 'Add'], 'plus': ['+', 'Add'], - // Num-Subtract, or - - '-': ['-', 'Subtract'], subtract: ['-', 'Subtract'], 'dash': ['-', 'Subtract'], - // Semicolon - semicolon: ';', - // = or equals - equals: '=', - // Comma, or , - comma: ',', - // Period, or ., or full-stop - period: '.', 'full-stop': '.', - // Slash, or /, or forward-slash - slash: '/', 'forward-slash': '/', - // Tick, or `, or back-quote - tick: '`', 'back-quote': '`', - // Open bracket, or [ - 'open-bracket': '[', - // Back slash, or \ - 'back-slash': '\\', - // Close backet, or ] - 'close-bracket': ']', - // Apostrophe, or Quote, or ' - quote: '\'', apostrophe: '\'', - // NUMPAD 0-9 - 'num-0': '0', - 'num-1': '1', - 'num-2': '2', - 'num-3': '3', - 'num-4': '4', - 'num-5': '5', - 'num-6': '6', - 'num-7': '7', - 'num-8': '8', - 'num-9': '9', - // F1-F25 - f1: 'F1', - f2: 'F2', - f3: 'F3', - f4: 'F4', - f5: 'F5', - f6: 'F6', - f7: 'F7', - f8: 'F8', - f9: 'F9', - f10: 'F10', - f11: 'F11', - f12: 'F12', - f13: 'F13', - f14: 'F14', - f15: 'F15', - f16: 'F16', - f17: 'F17', - f18: 'F18', - f19: 'F19', - f20: 'F20', - f21: 'F21', - f22: 'F22', - f23: 'F23', - f24: 'F24', - f25: 'F25' -}; - -d3keybinding.keyCodes = { - // Backspace key, on Mac: ⌫ (Backspace) - '⌫': 8, backspace: 8, - // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥ - '⇥': 9, '⇆': 9, tab: 9, - // Return key, ↩ - '↩': 13, 'return': 13, enter: 13, '⌅': 13, - // Pause/Break key - 'pause': 19, 'pause-break': 19, - // Caps Lock key, ⇪ - '⇪': 20, caps: 20, 'caps-lock': 20, - // Escape key, on Mac: ⎋, on Windows: Esc - '⎋': 27, escape: 27, esc: 27, - // Space key - space: 32, - // Page-Up key, or pgup, on Mac: ↖ - '↖': 33, pgup: 33, 'page-up': 33, - // Page-Down key, or pgdown, on Mac: ↘ - '↘': 34, pgdown: 34, 'page-down': 34, - // END key, on Mac: ⇟ - '⇟': 35, end: 35, - // HOME key, on Mac: ⇞ - '⇞': 36, home: 36, - // Insert key, or ins - ins: 45, insert: 45, - // Delete key, on Mac: ⌦ (Delete) - '⌦': 46, del: 46, 'delete': 46, - // Left Arrow Key, or ← - '←': 37, left: 37, 'arrow-left': 37, - // Up Arrow Key, or ↑ - '↑': 38, up: 38, 'arrow-up': 38, - // Right Arrow Key, or → - '→': 39, right: 39, 'arrow-right': 39, - // Up Arrow Key, or ↓ - '↓': 40, down: 40, 'arrow-down': 40, - // odities, printing characters that come out wrong: - // Firefox Equals - 'ffequals': 61, - // Num-Multiply, or * - '*': 106, star: 106, asterisk: 106, multiply: 106, - // Num-Plus or + - '+': 107, 'plus': 107, - // Num-Subtract, or - - '-': 109, subtract: 109, - // Firefox Plus - 'ffplus': 171, - // Firefox Minus - 'ffminus': 173, - // Semicolon - ';': 186, semicolon: 186, - // = or equals - '=': 187, 'equals': 187, - // Comma, or , - ',': 188, comma: 188, - // Dash / Underscore key - 'dash': 189, - // Period, or ., or full-stop - '.': 190, period: 190, 'full-stop': 190, - // Slash, or /, or forward-slash - '/': 191, slash: 191, 'forward-slash': 191, - // Tick, or `, or back-quote - '`': 192, tick: 192, 'back-quote': 192, - // Open bracket, or [ - '[': 219, 'open-bracket': 219, - // Back slash, or \ - '\\': 220, 'back-slash': 220, - // Close backet, or ] - ']': 221, 'close-bracket': 221, - // Apostrophe, or Quote, or ' - '\'': 222, quote: 222, apostrophe: 222 -}; - -// NUMPAD 0-9 -var i$1 = 95, n = 0; -while (++i$1 < 106) { - d3keybinding.keyCodes['num-' + n] = i$1; - ++n; -} - -// 0-9 -i$1 = 47; n = 0; -while (++i$1 < 58) { - d3keybinding.keyCodes[n] = i$1; - ++n; -} - -// F1-F25 -i$1 = 111; n = 1; -while (++i$1 < 136) { - d3keybinding.keyCodes['f' + n] = i$1; - ++n; -} - -// a-z -i$1 = 64; -while (++i$1 < 91) { - d3keybinding.keyCodes[String.fromCharCode(i$1).toLowerCase()] = i$1; -} - -function tooltip() { - var tooltip = function(selection$$1) { - selection$$1.each(setup); - }, - animation = utilFunctor(false), - html = utilFunctor(false), - title = function() { - var title = this.getAttribute('data-original-title'); - if (title) { - return title; + tooltip.title = function(_) { + if (arguments.length) { + title = utilFunctor(_); + return tooltip; } else { - title = this.getAttribute('title'); - this.removeAttribute('title'); - this.setAttribute('data-original-title', title); + return title; } - return title; - }, - over = 'mouseenter.tooltip', - out = 'mouseleave.tooltip', - placement = utilFunctor('top'); + }; - tooltip.title = function(_) { - if (arguments.length) { - title = utilFunctor(_); - return tooltip; - } else { - return title; - } - }; + tooltip.html = function(_) { + if (arguments.length) { + html = utilFunctor(_); + return tooltip; + } else { + return html; + } + }; - tooltip.html = function(_) { - if (arguments.length) { - html = utilFunctor(_); - return tooltip; - } else { - return html; - } - }; + tooltip.placement = function(_) { + if (arguments.length) { + placement = utilFunctor(_); + return tooltip; + } else { + return placement; + } + }; - tooltip.placement = function(_) { - if (arguments.length) { - placement = utilFunctor(_); - return tooltip; - } else { - return placement; - } - }; + tooltip.show = function(selection$$1) { + selection$$1.each(show); + }; - tooltip.show = function(selection$$1) { - selection$$1.each(show); - }; + tooltip.hide = function(selection$$1) { + selection$$1.each(hide); + }; - tooltip.hide = function(selection$$1) { - selection$$1.each(hide); - }; + tooltip.toggle = function(selection$$1) { + selection$$1.each(toggle); + }; - tooltip.toggle = function(selection$$1) { - selection$$1.each(toggle); - }; + tooltip.destroy = function(selection$$1) { + selection$$1 + .on(over, null) + .on(out, null) + .attr('title', function() { + return this.getAttribute('data-original-title') || this.getAttribute('title'); + }) + .attr('data-original-title', null) + .selectAll('.tooltip') + .remove(); + }; - tooltip.destroy = function(selection$$1) { - selection$$1 - .on(over, null) - .on(out, null) - .attr('title', function() { - return this.getAttribute('data-original-title') || this.getAttribute('title'); - }) - .attr('data-original-title', null) - .selectAll('.tooltip') - .remove(); - }; + function setup() { + var root = select(this), + animate = animation.apply(this, arguments), + tip = root.selectAll('.tooltip').data([0]); + var enter = tip.enter() + .append('div') + .attr('class', 'tooltip'); - function setup() { - var root = d3_select(this), - animate = animation.apply(this, arguments), - tip = root.selectAll('.tooltip').data([0]); + enter + .append('div') + .attr('class', 'tooltip-arrow'); - var enter = tip.enter() - .append('div') - .attr('class', 'tooltip'); + enter + .append('div') + .attr('class', 'tooltip-inner'); - enter - .append('div') - .attr('class', 'tooltip-arrow'); + tip = enter + .merge(tip); - enter - .append('div') - .attr('class', 'tooltip-inner'); + if (animate) { + tip.classed('fade', true); + } - tip = enter - .merge(tip); + var place = placement.apply(this, arguments); + tip.classed(place, true); - if (animate) { - tip.classed('fade', true); + root.on(over, show); + root.on(out, hide); } - var place = placement.apply(this, arguments); - tip.classed(place, true); - root.on(over, show); - root.on(out, hide); - } + function show() { + var root = select(this), + content = title.apply(this, arguments), + tip = root.selectAll('.tooltip') + .classed('in', true), + markup = html.apply(this, arguments); + + tip.selectAll('.tooltip-inner')[markup ? 'html' : 'text'](content); + var place = placement.apply(this, arguments), + outer = getPosition(root.node()), + inner = getPosition(tip.node()), + pos; + + switch (place) { + case 'top': + pos = {x: outer.x + (outer.w - inner.w) / 2, y: outer.y - inner.h}; + break; + case 'right': + pos = {x: outer.x + outer.w, y: outer.y + (outer.h - inner.h) / 2}; + break; + case 'left': + pos = {x: outer.x - inner.w, y: outer.y + (outer.h - inner.h) / 2}; + break; + case 'bottom': + pos = {x: Math.max(0, outer.x + (outer.w - inner.w) / 2), y: outer.y + outer.h}; + break; + } + if (pos) { + tip.style('left', ~~pos.x + 'px').style('top', ~~pos.y + 'px'); + } else { + tip.style('left', null).style('top', null); + } - function show() { - var root = d3_select(this), - content = title.apply(this, arguments), - tip = root.selectAll('.tooltip') - .classed('in', true), - markup = html.apply(this, arguments); + this.tooltipVisible = true; + } - tip.selectAll('.tooltip-inner')[markup ? 'html' : 'text'](content); - var place = placement.apply(this, arguments), - outer = getPosition(root.node()), - inner = getPosition(tip.node()), - pos; - switch (place) { - case 'top': - pos = {x: outer.x + (outer.w - inner.w) / 2, y: outer.y - inner.h}; - break; - case 'right': - pos = {x: outer.x + outer.w, y: outer.y + (outer.h - inner.h) / 2}; - break; - case 'left': - pos = {x: outer.x - inner.w, y: outer.y + (outer.h - inner.h) / 2}; - break; - case 'bottom': - pos = {x: Math.max(0, outer.x + (outer.w - inner.w) / 2), y: outer.y + outer.h}; - break; - } + function hide() { + select(this).selectAll('.tooltip') + .classed('in', false); - if (pos) { - tip.style('left', ~~pos.x + 'px').style('top', ~~pos.y + 'px'); - } else { - tip.style('left', null).style('top', null); + this.tooltipVisible = false; } - this.tooltipVisible = true; - } - - function hide() { - d3_select(this).selectAll('.tooltip') - .classed('in', false); + function toggle() { + if (this.tooltipVisible) { + hide.apply(this, arguments); + } else { + show.apply(this, arguments); + } + } - this.tooltipVisible = false; + return tooltip; } - function toggle() { - if (this.tooltipVisible) { - hide.apply(this, arguments); + function getPosition(node) { + var mode = select(node).style('position'); + if (mode === 'absolute' || mode === 'static') { + return { + x: node.offsetLeft, + y: node.offsetTop, + w: node.offsetWidth, + h: node.offsetHeight + }; } else { - show.apply(this, arguments); + return { + x: 0, + y: 0, + w: node.offsetWidth, + h: node.offsetHeight + }; } } - return tooltip; -} - - -function getPosition(node) { - var mode = d3_select(node).style('position'); - if (mode === 'absolute' || mode === 'static') { - return { - x: node.offsetLeft, - y: node.offsetTop, - w: node.offsetWidth, - h: node.offsetHeight - }; - } else { - return { - x: 0, - y: 0, - w: node.offsetWidth, - h: node.offsetHeight - }; - } -} - -function behaviorEdit(context) { - - function edit() { - context.map() - .minzoom(context.minEditableZoom()); - } - + function behaviorEdit(context) { - edit.off = function() { - context.map() - .minzoom(0); - }; + function edit() { + context.map() + .minzoom(context.minEditableZoom()); + } - return edit; -} + edit.off = function() { + context.map() + .minzoom(0); + }; -/* - The hover behavior adds the `.hover` class on mouseover to all elements to which - the identical datum is bound, and removes it on mouseout. - The :hover pseudo-class is insufficient for iD's purposes because a datum's visual - representation may consist of several elements scattered throughout the DOM hierarchy. - Only one of these elements can have the :hover pseudo-class, but all of them will - have the .hover class. - */ -function behaviorHover(context) { - var dispatch$$1 = dispatch('hover'); - var _selection = d3_select(null); - var _newId = null; - var _buttonDown; - var _altDisables; - var _target; + return edit; + } + /* + The hover behavior adds the `.hover` class on mouseover to all elements to which + the identical datum is bound, and removes it on mouseout. - function keydown() { - if (_altDisables && event.keyCode === d3keybinding.modifierCodes.alt) { - _selection.selectAll('.hover') - .classed('hover-suppressed', true) - .classed('hover', false); + The :hover pseudo-class is insufficient for iD's purposes because a datum's visual + representation may consist of several elements scattered throughout the DOM hierarchy. + Only one of these elements can have the :hover pseudo-class, but all of them will + have the .hover class. + */ + function behaviorHover(context) { + var dispatch$$1 = dispatch('hover'); + var _selection = select(null); + var _newId = null; + var _buttonDown; + var _altDisables; + var _target; - _selection - .classed('hover-disabled', true); - dispatch$$1.call('hover', this, null); - } - } + function keydown() { + if (_altDisables && event.keyCode === d3keybinding.modifierCodes.alt) { + _selection.selectAll('.hover') + .classed('hover-suppressed', true) + .classed('hover', false); + _selection + .classed('hover-disabled', true); - function keyup() { - if (_altDisables && event.keyCode === d3keybinding.modifierCodes.alt) { - _selection.selectAll('.hover-suppressed') - .classed('hover-suppressed', false) - .classed('hover', true); + dispatch$$1.call('hover', this, null); + } + } - _selection - .classed('hover-disabled', false); - dispatch$$1.call('hover', this, _target ? _target.id : null); - } - } + function keyup() { + if (_altDisables && event.keyCode === d3keybinding.modifierCodes.alt) { + _selection.selectAll('.hover-suppressed') + .classed('hover-suppressed', false) + .classed('hover', true); + _selection + .classed('hover-disabled', false); - var hover = function(selection$$1) { - _selection = selection$$1; - _newId = null; + dispatch$$1.call('hover', this, _target ? _target.id : null); + } + } - _selection - .on('mouseover.hover', mouseover) - .on('mouseout.hover', mouseout) - .on('mousedown.hover', mousedown); - d3_select(window) - .on('keydown.hover', keydown) - .on('keyup.hover', keyup); + var hover = function(selection$$1) { + _selection = selection$$1; + _newId = null; + _selection + .on('mouseover.hover', mouseover) + .on('mouseout.hover', mouseout) + .on('mousedown.hover', mousedown); - function mouseover() { - if (_buttonDown) return; - var target = event.target; - enter(target ? target.__data__ : null); - } + select(window) + .on('keydown.hover', keydown) + .on('keyup.hover', keyup); - function mouseout() { - if (_buttonDown) return; - var target = event.relatedTarget; - enter(target ? target.__data__ : null); - } + function mouseover() { + if (_buttonDown) return; + var target = event.target; + enter(target ? target.__data__ : null); + } - function mousedown() { - _buttonDown = true; - d3_select(window) - .on('mouseup.hover', mouseup, true); - } + function mouseout() { + if (_buttonDown) return; + var target = event.relatedTarget; + enter(target ? target.__data__ : null); + } - function mouseup() { - _buttonDown = false; - d3_select(window) - .on('mouseup.hover', null, true); - } + function mousedown() { + _buttonDown = true; + select(window) + .on('mouseup.hover', mouseup, true); + } - function enter(datum) { - if (datum === _target) return; - _target = datum; + function mouseup() { + _buttonDown = false; + select(window) + .on('mouseup.hover', null, true); + } - _selection.selectAll('.hover') - .classed('hover', false); - _selection.selectAll('.hover-suppressed') - .classed('hover-suppressed', false); - var entity; - if (datum instanceof osmEntity$$1) { - entity = datum; - } else { - entity = datum && datum.properties && datum.properties.entity; - } + function enter(datum) { + if (datum === _target) return; + _target = datum; - if (entity && entity.id !== _newId) { - // If drawing a way, don't hover on a node that was just placed. #3974 - var mode = context.mode() && context.mode().id; - if ((mode === 'draw-line' || mode === 'draw-area') && !_newId && entity.type === 'node') { - _newId = entity.id; - return; - } + _selection.selectAll('.hover') + .classed('hover', false); + _selection.selectAll('.hover-suppressed') + .classed('hover-suppressed', false); - var selector$$1 = '.' + entity.id; + var entity; + if (datum instanceof osmEntity$$1) { + entity = datum; + } else { + entity = datum && datum.properties && datum.properties.entity; + } - if (entity.type === 'relation') { - entity.members.forEach(function(member) { - selector$$1 += ', .' + member.id; - }); - } + if (entity && entity.id !== _newId) { + // If drawing a way, don't hover on a node that was just placed. #3974 + var mode = context.mode() && context.mode().id; + if ((mode === 'draw-line' || mode === 'draw-area') && !_newId && entity.type === 'node') { + _newId = entity.id; + return; + } - var suppressed = _altDisables && event && event.altKey; + var selector$$1 = '.' + entity.id; - _selection.selectAll(selector$$1) - .classed(suppressed ? 'hover-suppressed' : 'hover', true); + if (entity.type === 'relation') { + entity.members.forEach(function(member) { + selector$$1 += ', .' + member.id; + }); + } - dispatch$$1.call('hover', this, !suppressed && entity.id); + var suppressed = _altDisables && event && event.altKey; - } else { - dispatch$$1.call('hover', this, null); - } - } + _selection.selectAll(selector$$1) + .classed(suppressed ? 'hover-suppressed' : 'hover', true); - }; + dispatch$$1.call('hover', this, !suppressed && entity.id); + } else { + dispatch$$1.call('hover', this, null); + } + } - hover.off = function(selection$$1) { - selection$$1.selectAll('.hover') - .classed('hover', false); - selection$$1.selectAll('.hover-suppressed') - .classed('hover-suppressed', false); - selection$$1 - .classed('hover-disabled', false); + }; - selection$$1 - .on('mouseover.hover', null) - .on('mouseout.hover', null) - .on('mousedown.hover', null); - d3_select(window) - .on('keydown.hover', null) - .on('keyup.hover', null); - }; + hover.off = function(selection$$1) { + selection$$1.selectAll('.hover') + .classed('hover', false); + selection$$1.selectAll('.hover-suppressed') + .classed('hover-suppressed', false); + selection$$1 + .classed('hover-disabled', false); + selection$$1 + .on('mouseover.hover', null) + .on('mouseout.hover', null) + .on('mousedown.hover', null); - hover.altDisables = function(_) { - if (!arguments.length) return _altDisables; - _altDisables = _; - return hover; - }; + select(window) + .on('keydown.hover', null) + .on('keyup.hover', null); + }; - return utilRebind(hover, dispatch$$1, 'on'); -} + hover.altDisables = function(_) { + if (!arguments.length) return _altDisables; + _altDisables = _; + return hover; + }; -function refresh(selection, node) { - var cr = node.getBoundingClientRect(); - var prop = [cr.width, cr.height]; - selection.property('__dimensions__', prop); - return prop; -} -function utilGetDimensions(selection, force) { - if (!selection || selection.empty()) { - return [0, 0]; - } - var node = selection.node(), - cached = selection.property('__dimensions__'); - return (!cached || force) ? refresh(selection, node) : cached; -} + return utilRebind(hover, dispatch$$1, 'on'); + } + function refresh(selection, node) { + var cr = node.getBoundingClientRect(); + var prop = [cr.width, cr.height]; + selection.property('__dimensions__', prop); + return prop; + } -function utilSetDimensions(selection, dimensions) { - if (!selection || selection.empty()) { - return selection; - } - var node = selection.node(); - if (dimensions === null) { - refresh(selection, node); - return selection; - } - return selection - .property('__dimensions__', [dimensions[0], dimensions[1]]) - .attr('width', dimensions[0]) - .attr('height', dimensions[1]); -} + function utilGetDimensions(selection, force) { + if (!selection || selection.empty()) { + return [0, 0]; + } + var node = selection.node(), + cached = selection.property('__dimensions__'); + return (!cached || force) ? refresh(selection, node) : cached; + } -function behaviorTail() { - var text, - container, - xmargin = 25, - tooltipSize = [0, 0], - selectionSize = [0, 0]; + function utilSetDimensions(selection, dimensions) { + if (!selection || selection.empty()) { + return selection; + } + var node = selection.node(); + if (dimensions === null) { + refresh(selection, node); + return selection; + } + return selection + .property('__dimensions__', [dimensions[0], dimensions[1]]) + .attr('width', dimensions[0]) + .attr('height', dimensions[1]); + } - function tail(selection$$1) { - if (!text) return; + function behaviorTail() { + var text, + container, + xmargin = 25, + tooltipSize = [0, 0], + selectionSize = [0, 0]; - d3_select(window) - .on('resize.tail', function() { selectionSize = utilGetDimensions(selection$$1); }); - container = d3_select(document.body) - .append('div') - .style('display', 'none') - .attr('class', 'tail tooltip-inner'); + function tail(selection$$1) { + if (!text) return; - container.append('div') - .text(text); + select(window) + .on('resize.tail', function() { selectionSize = utilGetDimensions(selection$$1); }); - selection$$1 - .on('mousemove.tail', mousemove) - .on('mouseenter.tail', mouseenter) - .on('mouseleave.tail', mouseleave); + container = select(document.body) + .append('div') + .style('display', 'none') + .attr('class', 'tail tooltip-inner'); - container - .on('mousemove.tail', mousemove); + container.append('div') + .text(text); - tooltipSize = utilGetDimensions(container); - selectionSize = utilGetDimensions(selection$$1); + selection$$1 + .on('mousemove.tail', mousemove) + .on('mouseenter.tail', mouseenter) + .on('mouseleave.tail', mouseleave); + container + .on('mousemove.tail', mousemove); - function show() { - container.style('display', 'block'); - tooltipSize = utilGetDimensions(container); - } + tooltipSize = utilGetDimensions(container); + selectionSize = utilGetDimensions(selection$$1); - function mousemove() { - if (container.style('display') === 'none') show(); - var xoffset = ((event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ? - -tooltipSize[0] - xmargin : xmargin; - container.classed('left', xoffset > 0); - utilSetTransform(container, event.clientX + xoffset, event.clientY); - } + function show() { + container.style('display', 'block'); + tooltipSize = utilGetDimensions(container); + } - function mouseleave() { - if (event.relatedTarget !== container.node()) { - container.style('display', 'none'); - } - } + function mousemove() { + if (container.style('display') === 'none') show(); + var xoffset = ((event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ? + -tooltipSize[0] - xmargin : xmargin; + container.classed('left', xoffset > 0); + utilSetTransform(container, event.clientX + xoffset, event.clientY); + } - function mouseenter() { - if (event.relatedTarget !== container.node()) { - show(); - } - } - } + function mouseleave() { + if (event.relatedTarget !== container.node()) { + container.style('display', 'none'); + } + } - tail.off = function(selection$$1) { - if (!text) return; + function mouseenter() { + if (event.relatedTarget !== container.node()) { + show(); + } + } + } - container - .on('mousemove.tail', null) - .remove(); - selection$$1 - .on('mousemove.tail', null) - .on('mouseenter.tail', null) - .on('mouseleave.tail', null); + tail.off = function(selection$$1) { + if (!text) return; - d3_select(window) - .on('resize.tail', null); - }; + container + .on('mousemove.tail', null) + .remove(); + selection$$1 + .on('mousemove.tail', null) + .on('mouseenter.tail', null) + .on('mouseleave.tail', null); - tail.text = function(_) { - if (!arguments.length) return text; - text = _; - return tail; - }; + select(window) + .on('resize.tail', null); + }; - return tail; -} + tail.text = function(_) { + if (!arguments.length) return text; + text = _; + return tail; + }; -var _usedTails = {}; -var _disableSpace = false; -var _lastSpace = null; + return tail; + } -function behaviorDraw(context) { - var dispatch$$1 = dispatch( - 'move', 'click', 'clickWay', 'clickNode', 'undo', 'cancel', 'finish' - ); + var _usedTails = {}; + var _disableSpace = false; + var _lastSpace = null; - var keybinding = d3keybinding('draw'); - var hover = behaviorHover(context).altDisables(true) - .on('hover', context.ui().sidebar.hover); - var tail = behaviorTail(); - var edit = behaviorEdit(context); + function behaviorDraw(context) { + var dispatch$$1 = dispatch( + 'move', 'click', 'clickWay', 'clickNode', 'undo', 'cancel', 'finish' + ); - var closeTolerance = 4; - var tolerance = 12; - var _mouseLeave = false; - var _lastMouse = null; + var keybinding = d3keybinding('draw'); + var hover = behaviorHover(context).altDisables(true) + .on('hover', context.ui().sidebar.hover); + var tail = behaviorTail(); + var edit = behaviorEdit(context); - // related code - // - `mode/drag_node.js` `datum()` - function datum() { - if (event.altKey) return {}; + var closeTolerance = 4; + var tolerance = 12; + var _mouseLeave = false; + var _lastMouse = null; - var element; - if (event.type === 'keydown') { - element = _lastMouse && _lastMouse.target; - } else { - element = event.target; - } - // When drawing, snap only to touch targets.. - // (this excludes area fills and active drawing elements) - var d = element.__data__; - return (d && d.properties && d.properties.target) ? d : {}; - } + // related code + // - `mode/drag_node.js` `datum()` + function datum() { + if (event.altKey) return {}; + var element; + if (event.type === 'keydown') { + element = _lastMouse && _lastMouse.target; + } else { + element = event.target; + } - function mousedown() { + // When drawing, snap only to touch targets.. + // (this excludes area fills and active drawing elements) + var d = element.__data__; + return (d && d.properties && d.properties.target) ? d : {}; + } - function point$$1() { - var p = context.container().node(); - return touchId !== null ? d3_touches(p).filter(function(p) { - return p.identifier === touchId; - })[0] : d3_mouse(p); - } - var element = d3_select(this); - var touchId = event.touches ? event.changedTouches[0].identifier : null; - var t1 = +new Date(); - var p1 = point$$1(); + function mousedown() { - element.on('mousemove.draw', null); + function point$$1() { + var p = context.container().node(); + return touchId !== null ? d3_touches(p).filter(function(p) { + return p.identifier === touchId; + })[0] : mouse(p); + } - d3_select(window).on('mouseup.draw', function() { - var t2 = +new Date(); - var p2 = point$$1(); - var dist = geoVecLength(p1, p2); + var element = select(this); + var touchId = event.touches ? event.changedTouches[0].identifier : null; + var t1 = +new Date(); + var p1 = point$$1(); - element.on('mousemove.draw', mousemove); - d3_select(window).on('mouseup.draw', null); + element.on('mousemove.draw', null); - if (dist < closeTolerance || (dist < tolerance && (t2 - t1) < 500)) { - // Prevent a quick second click - d3_select(window).on('click.draw-block', function() { - event.stopPropagation(); - }, true); + select(window).on('mouseup.draw', function() { + var t2 = +new Date(); + var p2 = point$$1(); + var dist = geoVecLength(p1, p2); - context.map().dblclickEnable(false); + element.on('mousemove.draw', mousemove); + select(window).on('mouseup.draw', null); - window.setTimeout(function() { - context.map().dblclickEnable(true); - d3_select(window).on('click.draw-block', null); - }, 500); + if (dist < closeTolerance || (dist < tolerance && (t2 - t1) < 500)) { + // Prevent a quick second click + select(window).on('click.draw-block', function() { + event.stopPropagation(); + }, true); - click(); - } - }, true); - } + context.map().dblclickEnable(false); + window.setTimeout(function() { + context.map().dblclickEnable(true); + select(window).on('click.draw-block', null); + }, 500); - function mousemove() { - _lastMouse = event; - dispatch$$1.call('move', this, datum()); - } + click(); + } + }, true); + } - function mouseenter() { - _mouseLeave = false; - } + function mousemove() { + _lastMouse = event; + dispatch$$1.call('move', this, datum()); + } - function mouseleave() { - _mouseLeave = true; - } + function mouseenter() { + _mouseLeave = false; + } - // related code - // - `mode/drag_node.js` `doMode()` - // - `behavior/draw.js` `click()` - // - `behavior/draw_way.js` `move()` - function click() { - var d = datum(); - var target = d && d.properties && d.properties.entity; + function mouseleave() { + _mouseLeave = true; + } - if (target && target.type === 'node') { // Snap to a node - dispatch$$1.call('clickNode', this, target, d); - return; - } else if (target && target.type === 'way') { // Snap to a way - var choice = geoChooseEdge( - context.childNodes(target), context.mouse(), context.projection, context.activeID() - ); - if (choice) { - var edge = [target.nodes[choice.index - 1], target.nodes[choice.index]]; - dispatch$$1.call('clickWay', this, choice.loc, edge, d); - return; - } - } + // related code + // - `mode/drag_node.js` `doMode()` + // - `behavior/draw.js` `click()` + // - `behavior/draw_way.js` `move()` + function click() { + var d = datum(); + var target = d && d.properties && d.properties.entity; + + if (target && target.type === 'node') { // Snap to a node + dispatch$$1.call('clickNode', this, target, d); + return; + + } else if (target && target.type === 'way') { // Snap to a way + var choice = geoChooseEdge( + context.childNodes(target), context.mouse(), context.projection, context.activeID() + ); + if (choice) { + var edge = [target.nodes[choice.index - 1], target.nodes[choice.index]]; + dispatch$$1.call('clickWay', this, choice.loc, edge, d); + return; + } + } - dispatch$$1.call('click', this, context.map().mouseCoordinates(), d); - } + dispatch$$1.call('click', this, context.map().mouseCoordinates(), d); + } - function space() { - event.preventDefault(); - event.stopPropagation(); + function space() { + event.preventDefault(); + event.stopPropagation(); - var currSpace = context.mouse(); - if (_disableSpace && _lastSpace) { - var dist = geoVecLength(_lastSpace, currSpace); - if (dist > tolerance) { - _disableSpace = false; - } - } + var currSpace = context.mouse(); + if (_disableSpace && _lastSpace) { + var dist = geoVecLength(_lastSpace, currSpace); + if (dist > tolerance) { + _disableSpace = false; + } + } - if (_disableSpace || _mouseLeave || !_lastMouse) return; + if (_disableSpace || _mouseLeave || !_lastMouse) return; - // user must move mouse or release space bar to allow another click - _lastSpace = currSpace; - _disableSpace = true; + // user must move mouse or release space bar to allow another click + _lastSpace = currSpace; + _disableSpace = true; - d3_select(window).on('keyup.space-block', function() { - event.preventDefault(); - event.stopPropagation(); - _disableSpace = false; - d3_select(window).on('keyup.space-block', null); - }); + select(window).on('keyup.space-block', function() { + event.preventDefault(); + event.stopPropagation(); + _disableSpace = false; + select(window).on('keyup.space-block', null); + }); - click(); - } + click(); + } - function backspace() { - event.preventDefault(); - dispatch$$1.call('undo'); - } + function backspace() { + event.preventDefault(); + dispatch$$1.call('undo'); + } - function del() { - event.preventDefault(); - dispatch$$1.call('cancel'); - } + function del() { + event.preventDefault(); + dispatch$$1.call('cancel'); + } - function ret() { - event.preventDefault(); - dispatch$$1.call('finish'); - } + function ret() { + event.preventDefault(); + dispatch$$1.call('finish'); + } - function draw(selection$$1) { - context.install(hover); - context.install(edit); + function draw(selection$$1) { + context.install(hover); + context.install(edit); - if (!context.inIntro() && !_usedTails[tail.text()]) { - context.install(tail); - } + if (!context.inIntro() && !_usedTails[tail.text()]) { + context.install(tail); + } - keybinding - .on('⌫', backspace) - .on('⌦', del) - .on('⎋', ret) - .on('↩', ret) - .on('space', space) - .on('⌥space', space); + keybinding + .on('⌫', backspace) + .on('⌦', del) + .on('⎋', ret) + .on('↩', ret) + .on('space', space) + .on('⌥space', space); - selection$$1 - .on('mouseenter.draw', mouseenter) - .on('mouseleave.draw', mouseleave) - .on('mousedown.draw', mousedown) - .on('mousemove.draw', mousemove); + selection$$1 + .on('mouseenter.draw', mouseenter) + .on('mouseleave.draw', mouseleave) + .on('mousedown.draw', mousedown) + .on('mousemove.draw', mousemove); - d3_select(document) - .call(keybinding); + select(document) + .call(keybinding); - return draw; - } + return draw; + } - draw.off = function(selection$$1) { - context.ui().sidebar.hover.cancel(); - context.uninstall(hover); - context.uninstall(edit); + draw.off = function(selection$$1) { + context.ui().sidebar.hover.cancel(); + context.uninstall(hover); + context.uninstall(edit); - if (!context.inIntro() && !_usedTails[tail.text()]) { - context.uninstall(tail); - _usedTails[tail.text()] = true; - } + if (!context.inIntro() && !_usedTails[tail.text()]) { + context.uninstall(tail); + _usedTails[tail.text()] = true; + } - selection$$1 - .on('mouseenter.draw', null) - .on('mouseleave.draw', null) - .on('mousedown.draw', null) - .on('mousemove.draw', null); + selection$$1 + .on('mouseenter.draw', null) + .on('mouseleave.draw', null) + .on('mousedown.draw', null) + .on('mousemove.draw', null); - d3_select(window) - .on('mouseup.draw', null); - // note: keyup.space-block, click.draw-block should remain + select(window) + .on('mouseup.draw', null); + // note: keyup.space-block, click.draw-block should remain - d3_select(document) - .call(keybinding.off); - }; + select(document) + .call(keybinding.off); + }; - draw.tail = function(_) { - tail.text(_); - return draw; - }; + draw.tail = function(_) { + tail.text(_); + return draw; + }; - return utilRebind(draw, dispatch$$1, 'on'); -} + return utilRebind(draw, dispatch$$1, 'on'); + } -function modeAddArea$$1(context) { - var mode = { - id: 'add-area', - button: 'area', - title: t('modes.add_area.title'), - description: t('modes.add_area.description'), - key: '3' - }; + function modeAddArea$$1(context) { + var mode = { + id: 'add-area', + button: 'area', + title: t('modes.add_area.title'), + description: t('modes.add_area.description'), + key: '3' + }; - var behavior = behaviorAddWay(context) - .tail(t('modes.add_area.tail')) - .on('start', start) - .on('startFromWay', startFromWay) - .on('startFromNode', startFromNode), - defaultTags = { area: 'yes' }; + var behavior = behaviorAddWay(context) + .tail(t('modes.add_area.tail')) + .on('start', start) + .on('startFromWay', startFromWay) + .on('startFromNode', startFromNode), + defaultTags = { area: 'yes' }; - function actionClose(wayId) { - return function (graph) { - return graph.replace(graph.entity(wayId).close()); - }; - } + function actionClose(wayId) { + return function (graph) { + return graph.replace(graph.entity(wayId).close()); + }; + } - function start(loc) { - var startGraph = context.graph(), - node = osmNode({ loc: loc }), - way = osmWay({ tags: defaultTags }); + function start(loc) { + var startGraph = context.graph(), + node = osmNode({ loc: loc }), + way = osmWay({ tags: defaultTags }); - context.perform( - actionAddEntity(node), - actionAddEntity(way), - actionAddVertex(way.id, node.id), - actionClose(way.id) - ); + context.perform( + actionAddEntity(node), + actionAddEntity(way), + actionAddVertex(way.id, node.id), + actionClose(way.id) + ); - context.enter(modeDrawArea(context, way.id, startGraph)); - } + context.enter(modeDrawArea(context, way.id, startGraph)); + } - function startFromWay(loc, edge) { - var startGraph = context.graph(), - node = osmNode({ loc: loc }), - way = osmWay({ tags: defaultTags }); + function startFromWay(loc, edge) { + var startGraph = context.graph(), + node = osmNode({ loc: loc }), + way = osmWay({ tags: defaultTags }); - context.perform( - actionAddEntity(node), - actionAddEntity(way), - actionAddVertex(way.id, node.id), - actionClose(way.id), - actionAddMidpoint({ loc: loc, edge: edge }, node) - ); + context.perform( + actionAddEntity(node), + actionAddEntity(way), + actionAddVertex(way.id, node.id), + actionClose(way.id), + actionAddMidpoint({ loc: loc, edge: edge }, node) + ); - context.enter(modeDrawArea(context, way.id, startGraph)); - } + context.enter(modeDrawArea(context, way.id, startGraph)); + } - function startFromNode(node) { - var startGraph = context.graph(), - way = osmWay({ tags: defaultTags }); + function startFromNode(node) { + var startGraph = context.graph(), + way = osmWay({ tags: defaultTags }); - context.perform( - actionAddEntity(way), - actionAddVertex(way.id, node.id), - actionClose(way.id) - ); + context.perform( + actionAddEntity(way), + actionAddVertex(way.id, node.id), + actionClose(way.id) + ); - context.enter(modeDrawArea(context, way.id, startGraph)); - } + context.enter(modeDrawArea(context, way.id, startGraph)); + } - mode.enter = function() { - context.install(behavior); - }; + mode.enter = function() { + context.install(behavior); + }; - mode.exit = function() { - context.uninstall(behavior); - }; + mode.exit = function() { + context.uninstall(behavior); + }; - return mode; -} + return mode; + } -function modeAddLine$$1(context) { - var mode = { - id: 'add-line', - button: 'line', - title: t('modes.add_line.title'), - description: t('modes.add_line.description'), - key: '2' - }; + function modeAddLine$$1(context) { + var mode = { + id: 'add-line', + button: 'line', + title: t('modes.add_line.title'), + description: t('modes.add_line.description'), + key: '2' + }; - var behavior = behaviorAddWay(context) - .tail(t('modes.add_line.tail')) - .on('start', start) - .on('startFromWay', startFromWay) - .on('startFromNode', startFromNode); + var behavior = behaviorAddWay(context) + .tail(t('modes.add_line.tail')) + .on('start', start) + .on('startFromWay', startFromWay) + .on('startFromNode', startFromNode); - function start(loc) { - var startGraph = context.graph(), - node = osmNode({ loc: loc }), - way = osmWay(); + function start(loc) { + var startGraph = context.graph(), + node = osmNode({ loc: loc }), + way = osmWay(); - context.perform( - actionAddEntity(node), - actionAddEntity(way), - actionAddVertex(way.id, node.id) - ); + context.perform( + actionAddEntity(node), + actionAddEntity(way), + actionAddVertex(way.id, node.id) + ); - context.enter(modeDrawLine(context, way.id, startGraph)); - } + context.enter(modeDrawLine(context, way.id, startGraph)); + } - function startFromWay(loc, edge) { - var startGraph = context.graph(), - node = osmNode({ loc: loc }), - way = osmWay(); + function startFromWay(loc, edge) { + var startGraph = context.graph(), + node = osmNode({ loc: loc }), + way = osmWay(); - context.perform( - actionAddEntity(node), - actionAddEntity(way), - actionAddVertex(way.id, node.id), - actionAddMidpoint({ loc: loc, edge: edge }, node) - ); + context.perform( + actionAddEntity(node), + actionAddEntity(way), + actionAddVertex(way.id, node.id), + actionAddMidpoint({ loc: loc, edge: edge }, node) + ); - context.enter(modeDrawLine(context, way.id, startGraph)); - } + context.enter(modeDrawLine(context, way.id, startGraph)); + } - function startFromNode(node) { - var startGraph = context.graph(), - way = osmWay(); + function startFromNode(node) { + var startGraph = context.graph(), + way = osmWay(); - context.perform( - actionAddEntity(way), - actionAddVertex(way.id, node.id) - ); + context.perform( + actionAddEntity(way), + actionAddVertex(way.id, node.id) + ); - context.enter(modeDrawLine(context, way.id, startGraph)); - } + context.enter(modeDrawLine(context, way.id, startGraph)); + } - mode.enter = function() { - context.install(behavior); - }; + mode.enter = function() { + context.install(behavior); + }; - mode.exit = function() { - context.uninstall(behavior); - }; + mode.exit = function() { + context.uninstall(behavior); + }; - return mode; -} + return mode; + } -function modeAddPoint$$1(context) { - var mode = { - id: 'add-point', - button: 'point', - title: t('modes.add_point.title'), - description: t('modes.add_point.description'), - key: '1' - }; + function modeAddPoint$$1(context) { + var mode = { + id: 'add-point', + button: 'point', + title: t('modes.add_point.title'), + description: t('modes.add_point.description'), + key: '1' + }; - var behavior = behaviorDraw(context) - .tail(t('modes.add_point.tail')) - .on('click', add) - .on('clickWay', addWay) - .on('clickNode', addNode) - .on('cancel', cancel) - .on('finish', cancel); + var behavior = behaviorDraw(context) + .tail(t('modes.add_point.tail')) + .on('click', add) + .on('clickWay', addWay) + .on('clickNode', addNode) + .on('cancel', cancel) + .on('finish', cancel); - function add(loc) { - var node = osmNode({ loc: loc }); + function add(loc) { + var node = osmNode({ loc: loc }); - context.perform( - actionAddEntity(node), - t('operations.add.annotation.point') - ); + context.perform( + actionAddEntity(node), + t('operations.add.annotation.point') + ); - context.enter( - modeSelect(context, [node.id]).newFeature(true) - ); - } + context.enter( + modeSelect(context, [node.id]).newFeature(true) + ); + } - function addWay(loc) { - add(loc); - } + function addWay(loc) { + add(loc); + } - function addNode(node) { - add(node.loc); - } + function addNode(node) { + add(node.loc); + } - function cancel() { - context.enter(modeBrowse(context)); - } + function cancel() { + context.enter(modeBrowse(context)); + } - mode.enter = function() { - context.install(behavior); - }; + mode.enter = function() { + context.install(behavior); + }; - mode.exit = function() { - context.uninstall(behavior); - }; + mode.exit = function() { + context.uninstall(behavior); + }; - return mode; -} + return mode; + } -function modeDragNode$$1(context) { - var mode = { - id: 'drag-node', - button: 'browse' - }; - var hover = behaviorHover(context).altDisables(true) - .on('hover', context.ui().sidebar.hover); - var edit = behaviorEdit(context); + function modeDragNode$$1(context) { + var mode = { + id: 'drag-node', + button: 'browse' + }; + var hover = behaviorHover(context).altDisables(true) + .on('hover', context.ui().sidebar.hover); + var edit = behaviorEdit(context); + + var _nudgeInterval; + var _restoreSelectedIDs = []; + var _wasMidpoint = false; + var _isCancelled = false; + var _activeEntity; + var _startLoc; + var _lastLoc; + + + function startNudge(entity, nudge) { + if (_nudgeInterval) window.clearInterval(_nudgeInterval); + _nudgeInterval = window.setInterval(function() { + context.pan(nudge); + doMove(entity, nudge); + }, 50); + } - var _nudgeInterval; - var _restoreSelectedIDs = []; - var _wasMidpoint = false; - var _isCancelled = false; - var _activeEntity; - var _startLoc; - var _lastLoc; + function stopNudge() { + if (_nudgeInterval) { + window.clearInterval(_nudgeInterval); + _nudgeInterval = null; + } + } - function startNudge(entity, nudge) { - if (_nudgeInterval) window.clearInterval(_nudgeInterval); - _nudgeInterval = window.setInterval(function() { - context.pan(nudge); - doMove(entity, nudge); - }, 50); - } + function moveAnnotation(entity) { + return t('operations.move.annotation.' + entity.geometry(context.graph())); + } - function stopNudge() { - if (_nudgeInterval) { - window.clearInterval(_nudgeInterval); - _nudgeInterval = null; - } - } + function connectAnnotation(entity) { + return t('operations.connect.annotation.' + entity.geometry(context.graph())); + } - function moveAnnotation(entity) { - return t('operations.move.annotation.' + entity.geometry(context.graph())); - } + function origin(entity) { + return context.projection(entity.loc); + } - function connectAnnotation(entity) { - return t('operations.connect.annotation.' + entity.geometry(context.graph())); - } + function keydown() { + if (event.keyCode === d3keybinding.modifierCodes.alt) { + if (context.surface().classed('nope')) { + context.surface() + .classed('nope-suppressed', true); + } + context.surface() + .classed('nope', false) + .classed('nope-disabled', true); + } + } - function origin(entity) { - return context.projection(entity.loc); - } + function keyup() { + if (event.keyCode === d3keybinding.modifierCodes.alt) { + if (context.surface().classed('nope-suppressed')) { + context.surface() + .classed('nope', true); + } + context.surface() + .classed('nope-suppressed', false) + .classed('nope-disabled', false); + } + } - function keydown() { - if (event.keyCode === d3keybinding.modifierCodes.alt) { - if (context.surface().classed('nope')) { - context.surface() - .classed('nope-suppressed', true); - } - context.surface() - .classed('nope', false) - .classed('nope-disabled', true); - } - } + function start(entity) { + _wasMidpoint = entity.type === 'midpoint'; + var hasHidden = context.features().hasHiddenConnections(entity, context.graph()); + _isCancelled = event.sourceEvent.shiftKey || hasHidden; - function keyup() { - if (event.keyCode === d3keybinding.modifierCodes.alt) { - if (context.surface().classed('nope-suppressed')) { - context.surface() - .classed('nope', true); - } - context.surface() - .classed('nope-suppressed', false) - .classed('nope-disabled', false); - } - } + if (_isCancelled) { + if (hasHidden) { + uiFlash() + .duration(4000) + .text(t('modes.drag_node.connected_to_hidden'))(); + } + return drag.cancel(); + } - function start(entity) { - _wasMidpoint = entity.type === 'midpoint'; - var hasHidden = context.features().hasHiddenConnections(entity, context.graph()); - _isCancelled = event.sourceEvent.shiftKey || hasHidden; + if (_wasMidpoint) { + var midpoint = entity; + entity = osmNode(); + context.perform(actionAddMidpoint(midpoint, entity)); + entity = context.entity(entity.id); // get post-action entity + var vertex = context.surface().selectAll('.' + entity.id); + drag.target(vertex.node(), entity); - if (_isCancelled) { - if (hasHidden) { - uiFlash().text(t('modes.drag_node.connected_to_hidden'))(); - } - return drag.cancel(); - } + } else { + context.perform(actionNoop()); + } - if (_wasMidpoint) { - var midpoint = entity; - entity = osmNode(); - context.perform(actionAddMidpoint(midpoint, entity)); - entity = context.entity(entity.id); // get post-action entity + _activeEntity = entity; + _startLoc = entity.loc; - var vertex = context.surface().selectAll('.' + entity.id); - drag.target(vertex.node(), entity); + context.surface().selectAll('.' + _activeEntity.id) + .classed('active', true); - } else { - context.perform(actionNoop()); - } + context.enter(mode); + } - _activeEntity = entity; - _startLoc = entity.loc; - context.surface().selectAll('.' + _activeEntity.id) - .classed('active', true); + // related code + // - `behavior/draw.js` `datum()` + function datum() { + var event$$1 = event && event.sourceEvent; + if (!event$$1 || event$$1.altKey) { + return {}; + } else { + // When dragging, snap only to touch targets.. + // (this excludes area fills and active drawing elements) + var d = event$$1.target.__data__; + return (d && d.properties && d.properties.target) ? d : {}; + } + } - context.enter(mode); - } + function doMove(entity, nudge) { + nudge = nudge || [0, 0]; + + var currPoint = (event && event.point) || context.projection(_lastLoc); + var currMouse = geoVecSubtract(currPoint, nudge); + var loc = context.projection.invert(currMouse); + + if (!_nudgeInterval) { // If not nudging at the edge of the viewport, try to snap.. + // related code + // - `mode/drag_node.js` `doMode()` + // - `behavior/draw.js` `click()` + // - `behavior/draw_way.js` `move()` + var d = datum(); + var target = d && d.properties && d.properties.entity; + var targetLoc = target && target.loc; + var targetNodes = d && d.properties && d.properties.nodes; + var edge; + + if (targetLoc) { // snap to node/vertex - a point target with `.loc` + loc = targetLoc; + + } else if (targetNodes) { // snap to way - a line target with `.nodes` + edge = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id); + if (edge) { + loc = edge.loc; + } + } + } - // related code - // - `behavior/draw.js` `datum()` - function datum() { - var event$$1 = event && event.sourceEvent; - if (!event$$1 || event$$1.altKey) { - return {}; - } else { - // When dragging, snap only to touch targets.. - // (this excludes area fills and active drawing elements) - var d = event$$1.target.__data__; - return (d && d.properties && d.properties.target) ? d : {}; - } - } + context.replace( + actionMoveNode(entity.id, loc), + moveAnnotation(entity) + ); + // Below here: validations + var isInvalid = false; - function doMove(entity, nudge) { - nudge = nudge || [0, 0]; + // Check if this connection to `target` could cause relations to break.. + if (target) { + isInvalid = hasRelationConflict(entity, target, edge, context.graph()); + } - var currPoint = (event && event.point) || context.projection(_lastLoc); - var currMouse = geoVecSubtract(currPoint, nudge); - var loc = context.projection.invert(currMouse); + // Check if this drag causes the geometry to break.. + if (!isInvalid) { + isInvalid = hasInvalidGeometry(entity, context.graph()); + } - if (!_nudgeInterval) { // If not nudging at the edge of the viewport, try to snap.. - // related code - // - `mode/drag_node.js` `doMode()` - // - `behavior/draw.js` `click()` - // - `behavior/draw_way.js` `move()` - var d = datum(); - var targetLoc = d && d.properties && d.properties.entity && d.properties.entity.loc; - var targetNodes = d && d.properties && d.properties.nodes; - if (targetLoc) { // snap to node/vertex - a point target with `.loc` - loc = targetLoc; + var nope = context.surface().classed('nope'); + if (isInvalid === 'relation' || isInvalid === 'restriction') { + if (!nope) { // about to nope - show hint + uiFlash() + .duration(4000) + .text(t('operations.connect.' + isInvalid, + { relation: context.presets().item('type/restriction').name() } + ))(); + } + } else { + if (nope) { // about to un-nope, remove hint + uiFlash() + .duration(1) + .text('')(); + } + } - } else if (targetNodes) { // snap to way - a line target with `.nodes` - var choice = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id); - if (choice) { - loc = choice.loc; - } - } - } - context.replace( - actionMoveNode(entity.id, loc), - moveAnnotation(entity) - ); + var nopeDisabled = context.surface().classed('nope-disabled'); + if (nopeDisabled) { + context.surface() + .classed('nope', false) + .classed('nope-suppressed', isInvalid); + } else { + context.surface() + .classed('nope', isInvalid) + .classed('nope-suppressed', false); + } + _lastLoc = loc; + } - // check if this movement causes the geometry to break - var nopeDisabled = context.surface().classed('nope-disabled'); - var isInvalid = isInvalidGeometry(entity, context.graph()); - if (nopeDisabled) { - context.surface() - .classed('nope', false) - .classed('nope-suppressed', isInvalid); - } else { - context.surface() - .classed('nope', isInvalid) - .classed('nope-suppressed', false); - } - _lastLoc = loc; - } + // Uses `actionConnect.disabled()` to know whether this connection is ok.. + function hasRelationConflict(entity, target, edge, graph) { + var testGraph = graph.update(); // copy + // if snapping to way - add midpoint there and consider that the target.. + if (edge) { + var midpoint = osmNode(); + var action = actionAddMidpoint({ + loc: edge.loc, + edge: [target.nodes[edge.index - 1], target.nodes[edge.index]] + }, midpoint); - function isInvalidGeometry(entity, graph) { - var parents = graph.parentWays(entity); - var i, j, k; + testGraph = action(testGraph); + target = midpoint; + } - for (i = 0; i < parents.length; i++) { - var parent = parents[i]; - var nodes = []; - var activeIndex = null; // which multipolygon ring contains node being dragged + // can we connect to it? + var ids = [entity.id, target.id]; + return actionConnect(ids).disabled(testGraph); + } - // test any parent multipolygons for valid geometry - var relations = graph.parentRelations(parent); - for (j = 0; j < relations.length; j++) { - if (!relations[j].isMultipolygon()) continue; - var rings = osmJoinWays(relations[j].members, graph); + function hasInvalidGeometry(entity, graph) { + var parents = graph.parentWays(entity); + var i, j, k; + + for (i = 0; i < parents.length; i++) { + var parent = parents[i]; + var nodes = []; + var activeIndex = null; // which multipolygon ring contains node being dragged + + // test any parent multipolygons for valid geometry + var relations = graph.parentRelations(parent); + for (j = 0; j < relations.length; j++) { + if (!relations[j].isMultipolygon()) continue; + + var rings = osmJoinWays(relations[j].members, graph); + + // find active ring and test it for self intersections + for (k = 0; k < rings.length; k++) { + nodes = rings[k].nodes; + if (find$1(nodes, function(n) { return n.id === entity.id; })) { + activeIndex = k; + if (geoHasSelfIntersections(nodes, entity.id)) { + return true; + } + } + rings[k].coords = nodes.map(function(n) { return n.loc; }); + } + + // test active ring for intersections with other rings in the multipolygon + for (k = 0; k < rings.length; k++) { + if (k === activeIndex) continue; + + // make sure active ring doesnt cross passive rings + if (geoHasLineIntersections(rings[activeIndex].nodes, rings[k].nodes, entity.id)) { + return true; + } + } + } + + + // If we still haven't tested this node's parent way for self-intersections. + // (because it's not a member of a multipolygon), test it now. + if (activeIndex === null) { + nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); }); + if (nodes.length && geoHasSelfIntersections(nodes, entity.id)) { + return true; + } + } - // find active ring and test it for self intersections - for (k = 0; k < rings.length; k++) { - nodes = rings[k].nodes; - if (find$1(nodes, function(n) { return n.id === entity.id; })) { - activeIndex = k; - if (geoHasSelfIntersections(nodes, entity.id)) { - return true; - } - } - rings[k].coords = nodes.map(function(n) { return n.loc; }); - } + } - // test active ring for intersections with other rings in the multipolygon - for (k = 0; k < rings.length; k++) { - if (k === activeIndex) continue; + return false; + } - // make sure active ring doesnt cross passive rings - if (geoHasLineIntersections(rings[activeIndex].nodes, rings[k].nodes, entity.id)) { - return true; - } - } - } + function move(entity) { + if (_isCancelled) return; + event.sourceEvent.stopPropagation(); - // If we still haven't tested this node's parent way for self-intersections. - // (because it's not a member of a multipolygon), test it now. - if (activeIndex === null) { - nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); }); - if (nodes.length && geoHasSelfIntersections(nodes, entity.id)) { - return true; - } - } + context.surface().classed('nope-disabled', event.sourceEvent.altKey); - } + _lastLoc = context.projection.invert(event.point); - return false; - } + doMove(entity); + var nudge = geoViewportEdge(event.point, context.map().dimensions()); + if (nudge) { + startNudge(entity, nudge); + } else { + stopNudge(); + } + } - function move(entity) { - if (_isCancelled) return; - event.sourceEvent.stopPropagation(); + function end(entity) { + if (_isCancelled) return; + + var d = datum(); + var nope = (d && d.properties && d.properties.nope) || context.surface().classed('nope'); + var target = d && d.properties && d.properties.entity; // entity to snap to + + if (nope) { // bounce back + context.perform( + _actionBounceBack(entity.id, _startLoc) + ); + + } else if (target && target.type === 'way') { + var choice = geoChooseEdge(context.childNodes(target), context.mouse(), context.projection, entity.id); + context.replace( + actionAddMidpoint({ + loc: choice.loc, + edge: [target.nodes[choice.index - 1], target.nodes[choice.index]] + }, entity), + connectAnnotation(target) + ); + + } else if (target && target.type === 'node') { + context.replace( + actionConnect([target.id, entity.id]), + connectAnnotation(target) + ); + + } else if (_wasMidpoint) { + context.replace( + actionNoop(), + t('operations.add.annotation.vertex') + ); - context.surface().classed('nope-disabled', event.sourceEvent.altKey); + } else { + context.replace( + actionNoop(), + moveAnnotation(entity) + ); + } - _lastLoc = context.projection.invert(event.point); + var reselection = _restoreSelectedIDs.filter(function(id) { + return context.graph().hasEntity(id); + }); - doMove(entity); - var nudge = geoViewportEdge(event.point, context.map().dimensions()); - if (nudge) { - startNudge(entity, nudge); - } else { - stopNudge(); - } - } + if (reselection.length) { + context.enter(modeSelect(context, reselection)); + } else { + context.enter(modeBrowse(context)); + } + } - function end(entity) { - if (_isCancelled) return; + function _actionBounceBack(nodeID, toLoc) { + var moveNode = actionMoveNode(nodeID, toLoc); + var action = function(graph, t$$1) { + // last time through, pop off the bounceback perform. + // it will then overwrite the initial perform with a moveNode that does nothing + if (t$$1 === 1) context.pop(); + return moveNode(graph, t$$1); + }; + action.transitionable = true; + return action; + } - var d = datum(); - var nope = (d && d.properties && d.properties.nope) || context.surface().classed('nope'); - var target = d && d.properties && d.properties.entity; // entity to snap to - if (nope) { // bounce back - context.perform( - _actionBounceBack(entity.id, _startLoc) - ); + function cancel() { + drag.cancel(); + context.enter(modeBrowse(context)); + } - } else if (target && target.type === 'way') { - var choice = geoChooseEdge(context.childNodes(target), context.mouse(), context.projection, entity.id); - context.replace( - actionAddMidpoint({ - loc: choice.loc, - edge: [target.nodes[choice.index - 1], target.nodes[choice.index]] - }, entity), - connectAnnotation(target) - ); - } else if (target && target.type === 'node') { - context.replace( - actionConnect([target.id, entity.id]), - connectAnnotation(target) - ); + var drag = behaviorDrag() + .selector('.layer-points-targets .target') + .surface(select('#map').node()) + .origin(origin) + .on('start', start) + .on('move', move) + .on('end', end); - } else if (_wasMidpoint) { - context.replace( - actionNoop(), - t('operations.add.annotation.vertex') - ); - } else { - context.replace( - actionNoop(), - moveAnnotation(entity) - ); - } + mode.enter = function() { + context.install(hover); + context.install(edit); - var reselection = _restoreSelectedIDs.filter(function(id) { - return context.graph().hasEntity(id); - }); + select(window) + .on('keydown.drawWay', keydown) + .on('keyup.drawWay', keyup); - if (reselection.length) { - context.enter(modeSelect(context, reselection)); - } else { - context.enter(modeBrowse(context)); - } - } + context.history() + .on('undone.drag-node', cancel); + }; - function _actionBounceBack(nodeID, toLoc) { - var moveNode = actionMoveNode(nodeID, toLoc); - var action = function(graph, t$$1) { - // last time through, pop off the bounceback perform. - // it will then overwrite the initial perform with a moveNode that does nothing - if (t$$1 === 1) context.pop(); - return moveNode(graph, t$$1); - }; - action.transitionable = true; - return action; - } + mode.exit = function() { + context.ui().sidebar.hover.cancel(); + context.uninstall(hover); + context.uninstall(edit); + select(window) + .on('keydown.hover', null) + .on('keyup.hover', null); - function cancel() { - drag.cancel(); - context.enter(modeBrowse(context)); - } + context.history() + .on('undone.drag-node', null); + context.map() + .on('drawn.drag-node', null); - var drag = behaviorDrag() - .selector('.layer-points-targets .target') - .surface(d3_select('#map').node()) - .origin(origin) - .on('start', start) - .on('move', move) - .on('end', end); + _activeEntity = null; + context.surface() + .classed('nope', false) + .classed('nope-suppressed', false) + .classed('nope-disabled', false) + .selectAll('.active') + .classed('active', false); - mode.enter = function() { - context.install(hover); - context.install(edit); + stopNudge(); + }; - d3_select(window) - .on('keydown.drawWay', keydown) - .on('keyup.drawWay', keyup); - context.history() - .on('undone.drag-node', cancel); - }; + mode.selectedIDs = function() { + if (!arguments.length) return _activeEntity ? [_activeEntity.id] : []; + // no assign + return mode; + }; - mode.exit = function() { - context.ui().sidebar.hover.cancel(); - context.uninstall(hover); - context.uninstall(edit); + mode.activeID = function() { + if (!arguments.length) return _activeEntity && _activeEntity.id; + // no assign + return mode; + }; - d3_select(window) - .on('keydown.hover', null) - .on('keyup.hover', null); - context.history() - .on('undone.drag-node', null); + mode.restoreSelectedIDs = function(_) { + if (!arguments.length) return _restoreSelectedIDs; + _restoreSelectedIDs = _; + return mode; + }; - context.map() - .on('drawn.drag-node', null); - _activeEntity = null; + mode.behavior = drag; - context.surface() - .classed('nope', false) - .classed('nope-suppressed', false) - .classed('nope-disabled', false) - .selectAll('.active') - .classed('active', false); - stopNudge(); - }; + return mode; + } + function modeBrowse(context) { + var mode = { + button: 'browse', + id: 'browse', + title: t('modes.browse.title'), + description: t('modes.browse.description') + }, sidebar; - mode.selectedIDs = function() { - if (!arguments.length) return _activeEntity ? [_activeEntity.id] : []; - // no assign - return mode; - }; + var behaviors = [ + behaviorPaste(context), + behaviorHover(context).on('hover', context.ui().sidebar.hover), + behaviorSelect(context), + behaviorLasso(context), + modeDragNode$$1(context).behavior + ]; - mode.activeID = function() { - if (!arguments.length) return _activeEntity && _activeEntity.id; - // no assign - return mode; - }; + mode.enter = function() { + behaviors.forEach(function(behavior) { + context.install(behavior); + }); + // Get focus on the body. + if (document.activeElement && document.activeElement.blur) { + document.activeElement.blur(); + } - mode.restoreSelectedIDs = function(_) { - if (!arguments.length) return _restoreSelectedIDs; - _restoreSelectedIDs = _; - return mode; - }; + if (sidebar) { + context.ui().sidebar.show(sidebar); + } else { + context.ui().sidebar.select(null); + } + }; - mode.behavior = drag; + mode.exit = function() { + context.ui().sidebar.hover.cancel(); + behaviors.forEach(function(behavior) { + context.uninstall(behavior); + }); + if (sidebar) { + context.ui().sidebar.hide(); + } + }; - return mode; -} -function modeBrowse(context) { - var mode = { - button: 'browse', - id: 'browse', - title: t('modes.browse.title'), - description: t('modes.browse.description') - }, sidebar; + mode.sidebar = function(_) { + if (!arguments.length) return sidebar; + sidebar = _; + return mode; + }; - var behaviors = [ - behaviorPaste(context), - behaviorHover(context).on('hover', context.ui().sidebar.hover), - behaviorSelect(context), - behaviorLasso(context), - modeDragNode$$1(context).behavior - ]; + return mode; + } - mode.enter = function() { - behaviors.forEach(function(behavior) { - context.install(behavior); - }); + function modeDrawArea(context, wayId, startGraph) { + var mode = { + button: 'area', + id: 'draw-area' + }; - // Get focus on the body. - if (document.activeElement && document.activeElement.blur) { - document.activeElement.blur(); - } + var behavior; - if (sidebar) { - context.ui().sidebar.show(sidebar); - } else { - context.ui().sidebar.select(null); - } - }; + mode.enter = function() { + var way = context.entity(wayId); - mode.exit = function() { - context.ui().sidebar.hover.cancel(); - behaviors.forEach(function(behavior) { - context.uninstall(behavior); - }); + behavior = behaviorDrawWay(context, wayId, undefined, mode, startGraph) + .tail(t('modes.draw_area.tail')); - if (sidebar) { - context.ui().sidebar.hide(); - } - }; + var addNode = behavior.addNode; + behavior.addNode = function(node, d) { + var length = way.nodes.length; + var penultimate = length > 2 ? way.nodes[length - 2] : null; - mode.sidebar = function(_) { - if (!arguments.length) return sidebar; - sidebar = _; - return mode; - }; + if (node.id === way.first() || node.id === penultimate) { + behavior.finish(); + } else { + addNode(node, d); + } + }; + context.install(behavior); + }; - return mode; -} -function modeDrawArea(context, wayId, startGraph) { - var mode = { - button: 'area', - id: 'draw-area' - }; + mode.exit = function() { + context.uninstall(behavior); + }; - var behavior; + mode.selectedIDs = function() { + return [wayId]; + }; - mode.enter = function() { - var way = context.entity(wayId); - behavior = behaviorDrawWay(context, wayId, undefined, mode, startGraph) - .tail(t('modes.draw_area.tail')); + mode.activeID = function() { + return (behavior && behavior.activeID()) || []; + }; - var addNode = behavior.addNode; - behavior.addNode = function(node, d) { - var length = way.nodes.length; - var penultimate = length > 2 ? way.nodes[length - 2] : null; + return mode; + } - if (node.id === way.first() || node.id === penultimate) { - behavior.finish(); - } else { - addNode(node, d); - } - }; + function modeDrawLine(context, wayId, startGraph, affix) { + var mode = { + button: 'line', + id: 'draw-line' + }; - context.install(behavior); - }; + var behavior; - mode.exit = function() { - context.uninstall(behavior); - }; + mode.enter = function() { + var way = context.entity(wayId); + var index = (affix === 'prefix') ? 0 : undefined; + var headId = (affix === 'prefix') ? way.first() : way.last(); + behavior = behaviorDrawWay(context, wayId, index, mode, startGraph) + .tail(t('modes.draw_line.tail')); - mode.selectedIDs = function() { - return [wayId]; - }; + var addNode = behavior.addNode; + behavior.addNode = function(node, d) { + if (node.id === headId) { + behavior.finish(); + } else { + addNode(node, d); + } + }; + context.install(behavior); + }; - mode.activeID = function() { - return (behavior && behavior.activeID()) || []; - }; + mode.exit = function() { + context.uninstall(behavior); + }; - return mode; -} -function modeDrawLine(context, wayId, startGraph, affix) { - var mode = { - button: 'line', - id: 'draw-line' - }; + mode.selectedIDs = function() { + return [wayId]; + }; - var behavior; + mode.activeID = function() { + return (behavior && behavior.activeID()) || []; + }; - mode.enter = function() { - var way = context.entity(wayId); - var index = (affix === 'prefix') ? 0 : undefined; - var headId = (affix === 'prefix') ? way.first() : way.last(); + return mode; + } - behavior = behaviorDrawWay(context, wayId, index, mode, startGraph) - .tail(t('modes.draw_line.tail')); + function operationCircularize(selectedIDs, context) { + var entityId = selectedIDs[0], + entity = context.entity(entityId), + extent = entity.extent(context.graph()), + geometry = context.geometry(entityId), + action = actionCircularize(entityId, context.projection); - var addNode = behavior.addNode; - behavior.addNode = function(node, d) { - if (node.id === headId) { - behavior.finish(); - } else { - addNode(node, d); - } - }; - context.install(behavior); - }; + var operation = function() { + context.perform(action, operation.annotation()); + }; - mode.exit = function() { - context.uninstall(behavior); - }; + operation.available = function() { + return selectedIDs.length === 1 && + entity.type === 'way' && + uniq(entity.nodes).length > 1; + }; - mode.selectedIDs = function() { - return [wayId]; - }; + operation.disabled = function() { + var reason; + if (extent.percentContainedIn(context.extent()) < 0.8) { + reason = 'too_large'; + } else if (context.hasHiddenConnections(entityId)) { + reason = 'connected_to_hidden'; + } + return action.disabled(context.graph()) || reason; + }; - mode.activeID = function() { - return (behavior && behavior.activeID()) || []; - }; + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.circularize.' + disable) : + t('operations.circularize.description.' + geometry); + }; - return mode; -} -function operationCircularize(selectedIDs, context) { - var entityId = selectedIDs[0], - entity = context.entity(entityId), - extent = entity.extent(context.graph()), - geometry = context.geometry(entityId), - action = actionCircularize(entityId, context.projection); + operation.annotation = function() { + return t('operations.circularize.annotation.' + geometry); + }; - var operation = function() { - context.perform(action, operation.annotation()); - }; + operation.id = 'circularize'; + operation.keys = [t('operations.circularize.key')]; + operation.title = t('operations.circularize.title'); + operation.behavior = behaviorOperation(context).which(operation); + return operation; + } - operation.available = function() { - return selectedIDs.length === 1 && - entity.type === 'way' && - uniq(entity.nodes).length > 1; - }; + function operationContinue(selectedIDs, context) { + var graph = context.graph(), + entities = selectedIDs.map(function(id) { return graph.entity(id); }), + geometries = assignIn({ line: [], vertex: [] }, + groupBy(entities, function(entity) { return entity.geometry(graph); })), + vertex = geometries.vertex[0]; - operation.disabled = function() { - var reason; - if (extent.percentContainedIn(context.extent()) < 0.8) { - reason = 'too_large'; - } else if (context.hasHiddenConnections(entityId)) { - reason = 'connected_to_hidden'; - } - return action.disabled(context.graph()) || reason; - }; + function candidateWays() { + return graph.parentWays(vertex).filter(function(parent) { + return parent.geometry(graph) === 'line' && + !parent.isClosed() && + parent.affix(vertex.id) && + (geometries.line.length === 0 || geometries.line[0] === parent); + }); + } - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.circularize.' + disable) : - t('operations.circularize.description.' + geometry); - }; + var operation = function() { + var candidate = candidateWays()[0]; + context.enter( + modeDrawLine(context, candidate.id, context.graph(), candidate.affix(vertex.id)) + ); + }; - operation.annotation = function() { - return t('operations.circularize.annotation.' + geometry); - }; + operation.available = function() { + return geometries.vertex.length === 1 && geometries.line.length <= 1 && + !context.features().hasHiddenConnections(vertex, context.graph()); + }; - operation.id = 'circularize'; - operation.keys = [t('operations.circularize.key')]; - operation.title = t('operations.circularize.title'); - operation.behavior = behaviorOperation(context).which(operation); + operation.disabled = function() { + var candidates = candidateWays(); + if (candidates.length === 0) + return 'not_eligible'; + if (candidates.length > 1) + return 'multiple'; + }; - return operation; -} -function operationContinue(selectedIDs, context) { - var graph = context.graph(), - entities = selectedIDs.map(function(id) { return graph.entity(id); }), - geometries = assignIn({ line: [], vertex: [] }, - groupBy(entities, function(entity) { return entity.geometry(graph); })), - vertex = geometries.vertex[0]; + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.continue.' + disable) : + t('operations.continue.description'); + }; - function candidateWays() { - return graph.parentWays(vertex).filter(function(parent) { - return parent.geometry(graph) === 'line' && - !parent.isClosed() && - parent.affix(vertex.id) && - (geometries.line.length === 0 || geometries.line[0] === parent); - }); - } + operation.annotation = function() { + return t('operations.continue.annotation.line'); + }; - var operation = function() { - var candidate = candidateWays()[0]; - context.enter( - modeDrawLine(context, candidate.id, context.graph(), candidate.affix(vertex.id)) - ); - }; + operation.id = 'continue'; + operation.keys = [t('operations.continue.key')]; + operation.title = t('operations.continue.title'); + operation.behavior = behaviorOperation(context).which(operation); + return operation; + } - operation.available = function() { - return geometries.vertex.length === 1 && geometries.line.length <= 1 && - !context.features().hasHiddenConnections(vertex, context.graph()); - }; + function operationDelete(selectedIDs, context) { + var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'), + action = actionDeleteMultiple(selectedIDs), + extent = selectedIDs.reduce(function(extent, id) { + return extent.extend(context.entity(id).extent(context.graph())); + }, geoExtent$$1()); - operation.disabled = function() { - var candidates = candidateWays(); - if (candidates.length === 0) - return 'not_eligible'; - if (candidates.length > 1) - return 'multiple'; - }; + var operation = function() { + var nextSelectedID; + var nextSelectedLoc; + if (selectedIDs.length === 1) { + var id = selectedIDs[0], + entity = context.entity(id), + geometry = context.geometry(id), + parents = context.graph().parentWays(entity), + parent = parents[0]; - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.continue.' + disable) : - t('operations.continue.description'); - }; + // Select the next closest node in the way. + if (geometry === 'vertex') { + var nodes = parent.nodes, + i = nodes.indexOf(id); + if (i === 0) { + i++; + } else if (i === nodes.length - 1) { + i--; + } else { + var a = geoSphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc), + b = geoSphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc); + i = a < b ? i - 1 : i + 1; + } - operation.annotation = function() { - return t('operations.continue.annotation.line'); - }; + nextSelectedID = nodes[i]; + nextSelectedLoc = context.entity(nextSelectedID).loc; + } + } + context.perform(action, operation.annotation()); - operation.id = 'continue'; - operation.keys = [t('operations.continue.key')]; - operation.title = t('operations.continue.title'); - operation.behavior = behaviorOperation(context).which(operation); - - return operation; -} - -function operationDelete(selectedIDs, context) { - var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'), - action = actionDeleteMultiple(selectedIDs), - extent = selectedIDs.reduce(function(extent, id) { - return extent.extend(context.entity(id).extent(context.graph())); - }, geoExtent$$1()); - - - var operation = function() { - var nextSelectedID; - var nextSelectedLoc; - - if (selectedIDs.length === 1) { - var id = selectedIDs[0], - entity = context.entity(id), - geometry = context.geometry(id), - parents = context.graph().parentWays(entity), - parent = parents[0]; - - // Select the next closest node in the way. - if (geometry === 'vertex') { - var nodes = parent.nodes, - i = nodes.indexOf(id); - - if (i === 0) { - i++; - } else if (i === nodes.length - 1) { - i--; - } else { - var a = geoSphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc), - b = geoSphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc); - i = a < b ? i - 1 : i + 1; - } - - nextSelectedID = nodes[i]; - nextSelectedLoc = context.entity(nextSelectedID).loc; - } - } + if (nextSelectedID && nextSelectedLoc) { + if (context.hasEntity(nextSelectedID)) { + context.enter(modeSelect(context, [nextSelectedID]).follow(true)); + } else { + context.map().centerEase(nextSelectedLoc); + context.enter(modeBrowse(context)); + } + } else { + context.enter(modeBrowse(context)); + } - context.perform(action, operation.annotation()); + }; - if (nextSelectedID && nextSelectedLoc) { - if (context.hasEntity(nextSelectedID)) { - context.enter(modeSelect(context, [nextSelectedID]).follow(true)); - } else { - context.map().centerEase(nextSelectedLoc); - context.enter(modeBrowse(context)); - } - } else { - context.enter(modeBrowse(context)); - } - }; + operation.available = function() { + return true; + }; - operation.available = function() { - return true; - }; + operation.disabled = function() { + var reason; + if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) { + reason = 'too_large'; + } else if (some(selectedIDs, context.hasHiddenConnections)) { + reason = 'connected_to_hidden'; + } else if (some(selectedIDs, protectedMember)) { + reason = 'part_of_relation'; + } else if (some(selectedIDs, incompleteRelation)) { + reason = 'incomplete_relation'; + } + return reason; + function incompleteRelation(id) { + var entity = context.entity(id); + return entity.type === 'relation' && !entity.isComplete(context.graph()); + } - operation.disabled = function() { - var reason; - if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) { - reason = 'too_large'; - } else if (some(selectedIDs, context.hasHiddenConnections)) { - reason = 'connected_to_hidden'; - } else if (some(selectedIDs, protectedMember)) { - reason = 'part_of_relation'; - } else if (some(selectedIDs, incompleteRelation)) { - reason = 'incomplete_relation'; - } - return reason; + function protectedMember(id) { + var entity = context.entity(id); + if (entity.type !== 'way') return false; + + var parents = context.graph().parentRelations(entity); + for (var i = 0; i < parents.length; i++) { + var parent = parents[i], + type = parent.tags.type, + role = parent.memberById(id).role || 'outer'; + if (type === 'route' || type === 'boundary' || (type === 'multipolygon' && role === 'outer')) { + return true; + } + } + return false; + } - function incompleteRelation(id) { - var entity = context.entity(id); - return entity.type === 'relation' && !entity.isComplete(context.graph()); - } + }; - function protectedMember(id) { - var entity = context.entity(id); - if (entity.type !== 'way') return false; - - var parents = context.graph().parentRelations(entity); - for (var i = 0; i < parents.length; i++) { - var parent = parents[i], - type = parent.tags.type, - role = parent.memberById(id).role || 'outer'; - if (type === 'route' || type === 'boundary' || (type === 'multipolygon' && role === 'outer')) { - return true; - } - } - return false; - } - }; + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.delete.' + disable + '.' + multi) : + t('operations.delete.description' + '.' + multi); + }; - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.delete.' + disable + '.' + multi) : - t('operations.delete.description' + '.' + multi); - }; + operation.annotation = function() { + return selectedIDs.length === 1 ? + t('operations.delete.annotation.' + context.geometry(selectedIDs[0])) : + t('operations.delete.annotation.multiple', { n: selectedIDs.length }); + }; - operation.annotation = function() { - return selectedIDs.length === 1 ? - t('operations.delete.annotation.' + context.geometry(selectedIDs[0])) : - t('operations.delete.annotation.multiple', { n: selectedIDs.length }); - }; + operation.id = 'delete'; + operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')]; + operation.title = t('operations.delete.title'); + operation.behavior = behaviorOperation(context).which(operation); + return operation; + } - operation.id = 'delete'; - operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')]; - operation.title = t('operations.delete.title'); - operation.behavior = behaviorOperation(context).which(operation); + function operationDisconnect(selectedIDs, context) { + var vertices = filter(selectedIDs, function(entityId) { + return context.geometry(entityId) === 'vertex'; + }); - return operation; -} + var entityId = vertices[0], + action = actionDisconnect(entityId); -function operationDisconnect(selectedIDs, context) { - var vertices = filter(selectedIDs, function(entityId) { - return context.geometry(entityId) === 'vertex'; - }); + if (selectedIDs.length > 1) { + action.limitWays(without(selectedIDs, entityId)); + } - var entityId = vertices[0], - action = actionDisconnect(entityId); - if (selectedIDs.length > 1) { - action.limitWays(without(selectedIDs, entityId)); - } + var operation = function() { + context.perform(action, operation.annotation()); + }; - var operation = function() { - context.perform(action, operation.annotation()); - }; + operation.available = function() { + return vertices.length === 1; + }; - operation.available = function() { - return vertices.length === 1; - }; + operation.disabled = function() { + var reason; + if (some(selectedIDs, context.hasHiddenConnections)) { + reason = 'connected_to_hidden'; + } + return action.disabled(context.graph()) || reason; + }; - operation.disabled = function() { - var reason; - if (some(selectedIDs, context.hasHiddenConnections)) { - reason = 'connected_to_hidden'; - } - return action.disabled(context.graph()) || reason; - }; + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.disconnect.' + disable) : + t('operations.disconnect.description'); + }; - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.disconnect.' + disable) : - t('operations.disconnect.description'); - }; + operation.annotation = function() { + return t('operations.disconnect.annotation'); + }; - operation.annotation = function() { - return t('operations.disconnect.annotation'); - }; + operation.id = 'disconnect'; + operation.keys = [t('operations.disconnect.key')]; + operation.title = t('operations.disconnect.title'); + operation.behavior = behaviorOperation(context).which(operation); + return operation; + } - operation.id = 'disconnect'; - operation.keys = [t('operations.disconnect.key')]; - operation.title = t('operations.disconnect.title'); - operation.behavior = behaviorOperation(context).which(operation); + function operationMerge(selectedIDs, context) { - return operation; -} + function updatePresetTags(newGraph, ids) { + var id = ids[0], + newEntity = newGraph.hasEntity(id); -function operationMerge(selectedIDs, context) { + if (!newEntity) return; - function updatePresetTags(newGraph, ids) { - var id = ids[0], - newEntity = newGraph.hasEntity(id); + var newPreset = context.presets().match(newEntity, newGraph); - if (!newEntity) return; + context.replace(actionChangePreset(id, null, newPreset), operation.annotation()); + } - var newPreset = context.presets().match(newEntity, newGraph); - context.replace(actionChangePreset(id, null, newPreset), operation.annotation()); - } + var join = actionJoin(selectedIDs), + merge = actionMerge(selectedIDs), + mergePolygon = actionMergePolygon(selectedIDs); - var join = actionJoin(selectedIDs), - merge = actionMerge(selectedIDs), - mergePolygon = actionMergePolygon(selectedIDs); + var operation = function() { + var origGraph = context.graph(), + action; + if (!join.disabled(origGraph)) { + action = join; + } else if (!merge.disabled(origGraph)) { + action = merge; + } else { + action = mergePolygon; + } - var operation = function() { - var origGraph = context.graph(), - action; + context.perform(action, operation.annotation()); - if (!join.disabled(origGraph)) { - action = join; - } else if (!merge.disabled(origGraph)) { - action = merge; - } else { - action = mergePolygon; - } + var ids = selectedIDs.filter(function(id) { + var entity = context.hasEntity(id); + return entity && entity.type !== 'node'; + }); - context.perform(action, operation.annotation()); + // if we merged tags, rematch preset to update tags if necessary (#3851) + if (action === merge) { + updatePresetTags(context.graph(), ids); + } - var ids = selectedIDs.filter(function(id) { - var entity = context.hasEntity(id); - return entity && entity.type !== 'node'; - }); + context.enter(modeSelect(context, ids)); + }; - // if we merged tags, rematch preset to update tags if necessary (#3851) - if (action === merge) { - updatePresetTags(context.graph(), ids); - } - context.enter(modeSelect(context, ids)); - }; + operation.available = function() { + return selectedIDs.length >= 2; + }; - operation.available = function() { - return selectedIDs.length >= 2; - }; + operation.disabled = function() { + return join.disabled(context.graph()) && + merge.disabled(context.graph()) && + mergePolygon.disabled(context.graph()); + }; - operation.disabled = function() { - return join.disabled(context.graph()) && - merge.disabled(context.graph()) && - mergePolygon.disabled(context.graph()); - }; + operation.tooltip = function() { + var j = join.disabled(context.graph()), + m = merge.disabled(context.graph()), + p = mergePolygon.disabled(context.graph()); + if (j === 'restriction' && m && p) { + return t('operations.merge.restriction', + { relation: context.presets().item('type/restriction').name() }); + } - operation.tooltip = function() { - var j = join.disabled(context.graph()), - m = merge.disabled(context.graph()), - p = mergePolygon.disabled(context.graph()); + if (p === 'incomplete_relation' && j && m) { + return t('operations.merge.incomplete_relation'); + } - if (j === 'restriction' && m && p) { - return t('operations.merge.restriction', - { relation: context.presets().item('type/restriction').name() }); - } + if (j && m && p) { + return t('operations.merge.' + j); + } - if (p === 'incomplete_relation' && j && m) { - return t('operations.merge.incomplete_relation'); - } + return t('operations.merge.description'); + }; - if (j && m && p) { - return t('operations.merge.' + j); - } - return t('operations.merge.description'); - }; + operation.annotation = function() { + return t('operations.merge.annotation', { n: selectedIDs.length }); + }; - operation.annotation = function() { - return t('operations.merge.annotation', { n: selectedIDs.length }); - }; + operation.id = 'merge'; + operation.keys = [t('operations.merge.key')]; + operation.title = t('operations.merge.title'); + operation.behavior = behaviorOperation(context).which(operation); + return operation; + } - operation.id = 'merge'; - operation.keys = [t('operations.merge.key')]; - operation.title = t('operations.merge.title'); - operation.behavior = behaviorOperation(context).which(operation); + function operationMove(selectedIDs, context) { + var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'); + var extent = selectedIDs.reduce(function(extent, id) { + return extent.extend(context.entity(id).extent(context.graph())); + }, geoExtent$$1()); - return operation; -} -function operationMove(selectedIDs, context) { - var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'); - var extent = selectedIDs.reduce(function(extent, id) { - return extent.extend(context.entity(id).extent(context.graph())); - }, geoExtent$$1()); + var operation = function() { + context.enter(modeMove$$1(context, selectedIDs)); + }; - var operation = function() { - context.enter(modeMove$$1(context, selectedIDs)); - }; + operation.available = function() { + return selectedIDs.length > 1 || + context.entity(selectedIDs[0]).type !== 'node'; + }; - operation.available = function() { - return selectedIDs.length > 1 || - context.entity(selectedIDs[0]).type !== 'node'; - }; + operation.disabled = function() { + var reason; + if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) { + reason = 'too_large'; + } else if (some(selectedIDs, context.hasHiddenConnections)) { + reason = 'connected_to_hidden'; + } else if (some(selectedIDs, incompleteRelation)) { + reason = 'incomplete_relation'; + } + return reason; + function incompleteRelation(id) { + var entity = context.entity(id); + return entity.type === 'relation' && !entity.isComplete(context.graph()); + } + }; - operation.disabled = function() { - var reason; - if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) { - reason = 'too_large'; - } else if (some(selectedIDs, context.hasHiddenConnections)) { - reason = 'connected_to_hidden'; - } else if (some(selectedIDs, incompleteRelation)) { - reason = 'incomplete_relation'; - } - return reason; - function incompleteRelation(id) { - var entity = context.entity(id); - return entity.type === 'relation' && !entity.isComplete(context.graph()); - } - }; + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.move.' + disable + '.' + multi) : + t('operations.move.description.' + multi); + }; - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.move.' + disable + '.' + multi) : - t('operations.move.description.' + multi); - }; + operation.annotation = function() { + return selectedIDs.length === 1 ? + t('operations.move.annotation.' + context.geometry(selectedIDs[0])) : + t('operations.move.annotation.multiple'); + }; - operation.annotation = function() { - return selectedIDs.length === 1 ? - t('operations.move.annotation.' + context.geometry(selectedIDs[0])) : - t('operations.move.annotation.multiple'); - }; + operation.id = 'move'; + operation.keys = [t('operations.move.key')]; + operation.title = t('operations.move.title'); + operation.behavior = behaviorOperation(context).which(operation); + return operation; + } - operation.id = 'move'; - operation.keys = [t('operations.move.key')]; - operation.title = t('operations.move.title'); - operation.behavior = behaviorOperation(context).which(operation); + function operationOrthogonalize(selectedIDs, context) { + var entityId = selectedIDs[0], + entity = context.entity(entityId), + extent = entity.extent(context.graph()), + geometry = context.geometry(entityId), + action = actionOrthogonalize(entityId, context.projection); - return operation; -} -function operationOrthogonalize(selectedIDs, context) { - var entityId = selectedIDs[0], - entity = context.entity(entityId), - extent = entity.extent(context.graph()), - geometry = context.geometry(entityId), - action = actionOrthogonalize(entityId, context.projection); + var operation = function() { + context.perform(action, operation.annotation()); + }; - var operation = function() { - context.perform(action, operation.annotation()); - }; + operation.available = function() { + return selectedIDs.length === 1 && + entity.type === 'way' && + entity.isClosed() && + uniq(entity.nodes).length > 2; + }; - operation.available = function() { - return selectedIDs.length === 1 && - entity.type === 'way' && - entity.isClosed() && - uniq(entity.nodes).length > 2; - }; + operation.disabled = function() { + var reason; + if (extent.percentContainedIn(context.extent()) < 0.8) { + reason = 'too_large'; + } else if (context.hasHiddenConnections(entityId)) { + reason = 'connected_to_hidden'; + } + return action.disabled(context.graph()) || reason; + }; - operation.disabled = function() { - var reason; - if (extent.percentContainedIn(context.extent()) < 0.8) { - reason = 'too_large'; - } else if (context.hasHiddenConnections(entityId)) { - reason = 'connected_to_hidden'; - } - return action.disabled(context.graph()) || reason; - }; + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.orthogonalize.' + disable) : + t('operations.orthogonalize.description.' + geometry); + }; - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.orthogonalize.' + disable) : - t('operations.orthogonalize.description.' + geometry); - }; + operation.annotation = function() { + return t('operations.orthogonalize.annotation.' + geometry); + }; - operation.annotation = function() { - return t('operations.orthogonalize.annotation.' + geometry); - }; + operation.id = 'orthogonalize'; + operation.keys = [t('operations.orthogonalize.key')]; + operation.title = t('operations.orthogonalize.title'); + operation.behavior = behaviorOperation(context).which(operation); + return operation; + } - operation.id = 'orthogonalize'; - operation.keys = [t('operations.orthogonalize.key')]; - operation.title = t('operations.orthogonalize.title'); - operation.behavior = behaviorOperation(context).which(operation); - - return operation; -} - -/** - * This method is like `_.uniq` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * uniqueness is computed. The order of result values is determined by the - * order they occur in the array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniqBy([2.1, 1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ -function uniqBy(array, iteratee) { - return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : []; -} - -function operationReflectShort(selectedIDs, context) { - return operationReflect(selectedIDs, context, 'short'); -} - - -function operationReflectLong(selectedIDs, context) { - return operationReflect(selectedIDs, context, 'long'); -} - - -function operationReflect(selectedIDs, context, axis) { - axis = axis || 'long'; - var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'), - extent = selectedIDs.reduce(function(extent, id) { - return extent.extend(context.entity(id).extent(context.graph())); - }, geoExtent$$1()); - - - var operation = function() { - var action = actionReflect(selectedIDs, context.projection) - .useLongAxis(Boolean(axis === 'long')); - context.perform(action, operation.annotation()); - }; + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : []; + } + function operationReflectShort(selectedIDs, context) { + return operationReflect(selectedIDs, context, 'short'); + } - operation.available = function() { - var nodes = utilGetAllNodes(selectedIDs, context.graph()); - return uniqBy(nodes, function(n) { return n.loc; }).length >= 3; - }; + function operationReflectLong(selectedIDs, context) { + return operationReflect(selectedIDs, context, 'long'); + } - operation.disabled = function() { - var reason; - if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) { - reason = 'too_large'; - } else if (some(selectedIDs, context.hasHiddenConnections)) { - reason = 'connected_to_hidden'; - } else if (some(selectedIDs, incompleteRelation)) { - reason = 'incomplete_relation'; - } - return reason; - function incompleteRelation(id) { - var entity = context.entity(id); - return entity.type === 'relation' && !entity.isComplete(context.graph()); - } - }; + function operationReflect(selectedIDs, context, axis) { + axis = axis || 'long'; + var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'), + extent = selectedIDs.reduce(function(extent, id) { + return extent.extend(context.entity(id).extent(context.graph())); + }, geoExtent$$1()); - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.reflect.' + disable + '.' + multi) : - t('operations.reflect.description.' + axis + '.' + multi); - }; + var operation = function() { + var action = actionReflect(selectedIDs, context.projection) + .useLongAxis(Boolean(axis === 'long')); + context.perform(action, operation.annotation()); + }; - operation.annotation = function() { - return t('operations.reflect.annotation.' + axis + '.' + multi); - }; + operation.available = function() { + var nodes = utilGetAllNodes(selectedIDs, context.graph()); + return uniqBy(nodes, function(n) { return n.loc; }).length >= 3; + }; - operation.id = 'reflect-' + axis; - operation.keys = [t('operations.reflect.key.' + axis)]; - operation.title = t('operations.reflect.title.' + axis); - operation.behavior = behaviorOperation(context).which(operation); + operation.disabled = function() { + var reason; + if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) { + reason = 'too_large'; + } else if (some(selectedIDs, context.hasHiddenConnections)) { + reason = 'connected_to_hidden'; + } else if (some(selectedIDs, incompleteRelation)) { + reason = 'incomplete_relation'; + } + return reason; - return operation; -} + function incompleteRelation(id) { + var entity = context.entity(id); + return entity.type === 'relation' && !entity.isComplete(context.graph()); + } + }; -function operationReverse(selectedIDs, context) { - var entityId = selectedIDs[0]; - var operation = function() { - context.perform(actionReverse(entityId), operation.annotation()); - }; + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.reflect.' + disable + '.' + multi) : + t('operations.reflect.description.' + axis + '.' + multi); + }; - operation.available = function() { - return selectedIDs.length === 1 && context.geometry(entityId) === 'line'; - }; + operation.annotation = function() { + return t('operations.reflect.annotation.' + axis + '.' + multi); + }; - operation.disabled = function() { - return false; - }; + operation.id = 'reflect-' + axis; + operation.keys = [t('operations.reflect.key.' + axis)]; + operation.title = t('operations.reflect.title.' + axis); + operation.behavior = behaviorOperation(context).which(operation); + return operation; + } - operation.tooltip = function() { - return t('operations.reverse.description'); - }; + function operationReverse(selectedIDs, context) { + var entityId = selectedIDs[0]; + var operation = function() { + context.perform(actionReverse(entityId), operation.annotation()); + }; - operation.annotation = function() { - return t('operations.reverse.annotation'); - }; + operation.available = function() { + return selectedIDs.length === 1 && context.geometry(entityId) === 'line'; + }; - operation.id = 'reverse'; - operation.keys = [t('operations.reverse.key')]; - operation.title = t('operations.reverse.title'); - operation.behavior = behaviorOperation(context).which(operation); - return operation; -} + operation.disabled = function() { + return false; + }; -function operationRotate(selectedIDs, context) { - var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'), - extent = selectedIDs.reduce(function(extent, id) { - return extent.extend(context.entity(id).extent(context.graph())); - }, geoExtent$$1()); + operation.tooltip = function() { + return t('operations.reverse.description'); + }; - var operation = function() { - context.enter(modeRotate$$1(context, selectedIDs)); - }; + operation.annotation = function() { + return t('operations.reverse.annotation'); + }; - operation.available = function() { - var nodes = utilGetAllNodes(selectedIDs, context.graph()); - return uniqBy(nodes, function(n) { return n.loc; }).length >= 2; - }; + operation.id = 'reverse'; + operation.keys = [t('operations.reverse.key')]; + operation.title = t('operations.reverse.title'); + operation.behavior = behaviorOperation(context).which(operation); - operation.disabled = function() { - var reason; - if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) { - reason = 'too_large'; - } else if (some(selectedIDs, context.hasHiddenConnections)) { - reason = 'connected_to_hidden'; - } else if (some(selectedIDs, incompleteRelation)) { - reason = 'incomplete_relation'; - } - return reason; + return operation; + } - function incompleteRelation(id) { - var entity = context.entity(id); - return entity.type === 'relation' && !entity.isComplete(context.graph()); - } - }; + function operationRotate(selectedIDs, context) { + var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'), + extent = selectedIDs.reduce(function(extent, id) { + return extent.extend(context.entity(id).extent(context.graph())); + }, geoExtent$$1()); - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.rotate.' + disable + '.' + multi) : - t('operations.rotate.description.' + multi); - }; + var operation = function() { + context.enter(modeRotate$$1(context, selectedIDs)); + }; - operation.annotation = function() { - return selectedIDs.length === 1 ? - t('operations.rotate.annotation.' + context.geometry(selectedIDs[0])) : - t('operations.rotate.annotation.multiple'); - }; + operation.available = function() { + var nodes = utilGetAllNodes(selectedIDs, context.graph()); + return uniqBy(nodes, function(n) { return n.loc; }).length >= 2; + }; - operation.id = 'rotate'; - operation.keys = [t('operations.rotate.key')]; - operation.title = t('operations.rotate.title'); - operation.behavior = behaviorOperation(context).which(operation); + operation.disabled = function() { + var reason; + if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) { + reason = 'too_large'; + } else if (some(selectedIDs, context.hasHiddenConnections)) { + reason = 'connected_to_hidden'; + } else if (some(selectedIDs, incompleteRelation)) { + reason = 'incomplete_relation'; + } + return reason; - return operation; -} + function incompleteRelation(id) { + var entity = context.entity(id); + return entity.type === 'relation' && !entity.isComplete(context.graph()); + } + }; -function operationSplit(selectedIDs, context) { - var vertices = filter(selectedIDs, function(entityId) { - return context.geometry(entityId) === 'vertex'; - }); - var entityId = vertices[0], - action = actionSplit(entityId), - ways = []; + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.rotate.' + disable + '.' + multi) : + t('operations.rotate.description.' + multi); + }; - if (vertices.length === 1) { - if (selectedIDs.length > 1) { - action.limitWays(without(selectedIDs, entityId)); - } - ways = action.ways(context.graph()); - } + operation.annotation = function() { + return selectedIDs.length === 1 ? + t('operations.rotate.annotation.' + context.geometry(selectedIDs[0])) : + t('operations.rotate.annotation.multiple'); + }; - var operation = function() { - var difference = context.perform(action, operation.annotation()); - context.enter(modeSelect(context, difference.extantIDs())); - }; + operation.id = 'rotate'; + operation.keys = [t('operations.rotate.key')]; + operation.title = t('operations.rotate.title'); + operation.behavior = behaviorOperation(context).which(operation); - operation.available = function() { - return vertices.length === 1; - }; + return operation; + } + function operationSplit(selectedIDs, context) { + var vertices = filter(selectedIDs, function(entityId) { + return context.geometry(entityId) === 'vertex'; + }); - operation.disabled = function() { - var reason; - if (some(selectedIDs, context.hasHiddenConnections)) { - reason = 'connected_to_hidden'; - } - return action.disabled(context.graph()) || reason; - }; + var entityId = vertices[0], + action = actionSplit(entityId), + ways = []; + if (vertices.length === 1) { + if (selectedIDs.length > 1) { + action.limitWays(without(selectedIDs, entityId)); + } + ways = action.ways(context.graph()); + } - operation.tooltip = function() { - var disable = operation.disabled(); - if (disable) { - return t('operations.split.' + disable); - } - if (ways.length === 1) { - return t('operations.split.description.' + context.geometry(ways[0].id)); - } else { - return t('operations.split.description.multiple'); - } - }; + var operation = function() { + var difference = context.perform(action, operation.annotation()); + context.enter(modeSelect(context, difference.extantIDs())); + }; - operation.annotation = function() { - return ways.length === 1 ? - t('operations.split.annotation.' + context.geometry(ways[0].id)) : - t('operations.split.annotation.multiple', { n: ways.length }); - }; + operation.available = function() { + return vertices.length === 1; + }; - operation.id = 'split'; - operation.keys = [t('operations.split.key')]; - operation.title = t('operations.split.title'); - operation.behavior = behaviorOperation(context).which(operation); - return operation; -} + operation.disabled = function() { + var reason; + if (some(selectedIDs, context.hasHiddenConnections)) { + reason = 'connected_to_hidden'; + } + return action.disabled(context.graph()) || reason; + }; -function operationStraighten(selectedIDs, context) { - var entityId = selectedIDs[0], - action = actionStraighten(entityId, context.projection); + operation.tooltip = function() { + var disable = operation.disabled(); + if (disable) { + return t('operations.split.' + disable); + } + if (ways.length === 1) { + return t('operations.split.description.' + context.geometry(ways[0].id)); + } else { + return t('operations.split.description.multiple'); + } + }; - function operation() { - context.perform(action, operation.annotation()); - } + operation.annotation = function() { + return ways.length === 1 ? + t('operations.split.annotation.' + context.geometry(ways[0].id)) : + t('operations.split.annotation.multiple', { n: ways.length }); + }; - operation.available = function() { - var entity = context.entity(entityId); - return selectedIDs.length === 1 && - entity.type === 'way' && - !entity.isClosed() && - uniq(entity.nodes).length > 2; - }; + operation.id = 'split'; + operation.keys = [t('operations.split.key')]; + operation.title = t('operations.split.title'); + operation.behavior = behaviorOperation(context).which(operation); - operation.disabled = function() { - var reason; - if (context.hasHiddenConnections(entityId)) { - reason = 'connected_to_hidden'; - } - return action.disabled(context.graph()) || reason; - }; + return operation; + } + function operationStraighten(selectedIDs, context) { + var entityId = selectedIDs[0], + action = actionStraighten(entityId, context.projection); - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.straighten.' + disable) : - t('operations.straighten.description'); - }; + function operation() { + context.perform(action, operation.annotation()); + } - operation.annotation = function() { - return t('operations.straighten.annotation'); - }; + operation.available = function() { + var entity = context.entity(entityId); + return selectedIDs.length === 1 && + entity.type === 'way' && + !entity.isClosed() && + uniq(entity.nodes).length > 2; + }; - operation.id = 'straighten'; - operation.keys = [t('operations.straighten.key')]; - operation.title = t('operations.straighten.title'); - operation.behavior = behaviorOperation(context).which(operation); - - return operation; -} - - - -var Operations = Object.freeze({ - operationCircularize: operationCircularize, - operationContinue: operationContinue, - operationDelete: operationDelete, - operationDisconnect: operationDisconnect, - operationMerge: operationMerge, - operationMove: operationMove, - operationOrthogonalize: operationOrthogonalize, - operationReflectShort: operationReflectShort, - operationReflectLong: operationReflectLong, - operationReverse: operationReverse, - operationRotate: operationRotate, - operationSplit: operationSplit, - operationStraighten: operationStraighten -}); - -function modeMove$$1(context, entityIDs, baseGraph) { - var mode = { - id: 'move', - button: 'browse' - }; - var keybinding = d3keybinding('move'); - var behaviors = [ - behaviorEdit(context), - operationCircularize(entityIDs, context).behavior, - operationDelete(entityIDs, context).behavior, - operationOrthogonalize(entityIDs, context).behavior, - operationReflectLong(entityIDs, context).behavior, - operationReflectShort(entityIDs, context).behavior, - operationRotate(entityIDs, context).behavior - ]; - var annotation = entityIDs.length === 1 ? - t('operations.move.annotation.' + context.geometry(entityIDs[0])) : - t('operations.move.annotation.multiple'); + operation.disabled = function() { + var reason; + if (context.hasHiddenConnections(entityId)) { + reason = 'connected_to_hidden'; + } + return action.disabled(context.graph()) || reason; + }; - var _prevGraph; - var _cache; - var _origin; - var _nudgeInterval; + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.straighten.' + disable) : + t('operations.straighten.description'); + }; - function doMove(nudge) { - nudge = nudge || [0, 0]; - var fn; - if (_prevGraph !== context.graph()) { - _cache = {}; - _origin = context.map().mouseCoordinates(); - fn = context.perform; - } else { - fn = context.overwrite; - } + operation.annotation = function() { + return t('operations.straighten.annotation'); + }; - var currMouse = context.mouse(); - var origMouse = context.projection(_origin); - var delta = geoVecSubtract(geoVecSubtract(currMouse, origMouse), nudge); - fn(actionMove(entityIDs, delta, context.projection, _cache), annotation); - _prevGraph = context.graph(); - } + operation.id = 'straighten'; + operation.keys = [t('operations.straighten.key')]; + operation.title = t('operations.straighten.title'); + operation.behavior = behaviorOperation(context).which(operation); + return operation; + } - function startNudge(nudge) { - if (_nudgeInterval) window.clearInterval(_nudgeInterval); - _nudgeInterval = window.setInterval(function() { - context.pan(nudge); - doMove(nudge); - }, 50); - } - function stopNudge() { - if (_nudgeInterval) { - window.clearInterval(_nudgeInterval); - _nudgeInterval = null; - } - } + var Operations = /*#__PURE__*/Object.freeze({ + operationCircularize: operationCircularize, + operationContinue: operationContinue, + operationDelete: operationDelete, + operationDisconnect: operationDisconnect, + operationMerge: operationMerge, + operationMove: operationMove, + operationOrthogonalize: operationOrthogonalize, + operationReflectShort: operationReflectShort, + operationReflectLong: operationReflectLong, + operationReverse: operationReverse, + operationRotate: operationRotate, + operationSplit: operationSplit, + operationStraighten: operationStraighten + }); + function modeMove$$1(context, entityIDs, baseGraph) { + var mode = { + id: 'move', + button: 'browse' + }; - function move() { - doMove(); - var nudge = geoViewportEdge(context.mouse(), context.map().dimensions()); - if (nudge) { - startNudge(nudge); - } else { - stopNudge(); - } - } + var keybinding = d3keybinding('move'); + var behaviors = [ + behaviorEdit(context), + operationCircularize(entityIDs, context).behavior, + operationDelete(entityIDs, context).behavior, + operationOrthogonalize(entityIDs, context).behavior, + operationReflectLong(entityIDs, context).behavior, + operationReflectShort(entityIDs, context).behavior, + operationRotate(entityIDs, context).behavior + ]; + var annotation = entityIDs.length === 1 ? + t('operations.move.annotation.' + context.geometry(entityIDs[0])) : + t('operations.move.annotation.multiple'); + var _prevGraph; + var _cache; + var _origin; + var _nudgeInterval; - function finish() { - event.stopPropagation(); - context.enter(modeSelect(context, entityIDs)); - stopNudge(); - } + function doMove(nudge) { + nudge = nudge || [0, 0]; - function cancel() { - if (baseGraph) { - while (context.graph() !== baseGraph) context.pop(); - context.enter(modeBrowse(context)); - } else { - context.pop(); - context.enter(modeSelect(context, entityIDs)); - } - stopNudge(); - } + var fn; + if (_prevGraph !== context.graph()) { + _cache = {}; + _origin = context.map().mouseCoordinates(); + fn = context.perform; + } else { + fn = context.overwrite; + } + var currMouse = context.mouse(); + var origMouse = context.projection(_origin); + var delta = geoVecSubtract(geoVecSubtract(currMouse, origMouse), nudge); - function undone() { - context.enter(modeBrowse(context)); - } + fn(actionMove(entityIDs, delta, context.projection, _cache), annotation); + _prevGraph = context.graph(); + } - mode.enter = function() { - _origin = context.map().mouseCoordinates(); - _prevGraph = null; - _cache = {}; + function startNudge(nudge) { + if (_nudgeInterval) window.clearInterval(_nudgeInterval); + _nudgeInterval = window.setInterval(function() { + context.pan(nudge); + doMove(nudge); + }, 50); + } - behaviors.forEach(function(behavior) { - context.install(behavior); - }); - context.surface() - .on('mousemove.move', move) - .on('click.move', finish); + function stopNudge() { + if (_nudgeInterval) { + window.clearInterval(_nudgeInterval); + _nudgeInterval = null; + } + } - context.history() - .on('undone.move', undone); - keybinding - .on('⎋', cancel) - .on('↩', finish); + function move() { + doMove(); + var nudge = geoViewportEdge(context.mouse(), context.map().dimensions()); + if (nudge) { + startNudge(nudge); + } else { + stopNudge(); + } + } - d3_select(document) - .call(keybinding); - }; + function finish() { + event.stopPropagation(); + context.enter(modeSelect(context, entityIDs)); + stopNudge(); + } - mode.exit = function() { - stopNudge(); - behaviors.forEach(function(behavior) { - context.uninstall(behavior); - }); + function cancel() { + if (baseGraph) { + while (context.graph() !== baseGraph) context.pop(); + context.enter(modeBrowse(context)); + } else { + context.pop(); + context.enter(modeSelect(context, entityIDs)); + } + stopNudge(); + } - context.surface() - .on('mousemove.move', null) - .on('click.move', null); - context.history() - .on('undone.move', null); + function undone() { + context.enter(modeBrowse(context)); + } - keybinding.off(); - }; + mode.enter = function() { + _origin = context.map().mouseCoordinates(); + _prevGraph = null; + _cache = {}; - mode.selectedIDs = function() { - if (!arguments.length) return entityIDs; - // no assign - return mode; - }; + behaviors.forEach(function(behavior) { + context.install(behavior); + }); + context.surface() + .on('mousemove.move', move) + .on('click.move', finish); - return mode; -} + context.history() + .on('undone.move', undone); -function modeRotate$$1(context, entityIDs) { - var mode = { - id: 'rotate', - button: 'browse' - }; + keybinding + .on('⎋', cancel) + .on('↩', finish); - var keybinding = d3keybinding('rotate'); - var behaviors = [ - behaviorEdit(context), - operationCircularize(entityIDs, context).behavior, - operationDelete(entityIDs, context).behavior, - operationMove(entityIDs, context).behavior, - operationOrthogonalize(entityIDs, context).behavior, - operationReflectLong(entityIDs, context).behavior, - operationReflectShort(entityIDs, context).behavior - ]; - var annotation = entityIDs.length === 1 ? - t('operations.rotate.annotation.' + context.geometry(entityIDs[0])) : - t('operations.rotate.annotation.multiple'); + select(document) + .call(keybinding); + }; - var _prevGraph; - var _prevAngle; - var _prevTransform; - var _pivot; + mode.exit = function() { + stopNudge(); - function doRotate() { - var fn; - if (context.graph() !== _prevGraph) { - fn = context.perform; - } else { - fn = context.replace; - } + behaviors.forEach(function(behavior) { + context.uninstall(behavior); + }); - // projection changed, recalculate _pivot - var projection = context.projection; - var currTransform = projection.transform(); - if (!_prevTransform || - currTransform.k !== _prevTransform.k || - currTransform.x !== _prevTransform.x || - currTransform.y !== _prevTransform.y) { - - var nodes = utilGetAllNodes(entityIDs, context.graph()); - var points = nodes.map(function(n) { return projection(n.loc); }); - - if (points.length === 1) { // degenerate case - _pivot = points[0]; - } else if (points.length === 2) { - _pivot = geoVecInterp(points[0], points[1], 0.5); - } else { - _pivot = d3_polygonCentroid(d3_polygonHull(points)); - } - _prevAngle = undefined; - } + context.surface() + .on('mousemove.move', null) + .on('click.move', null); + context.history() + .on('undone.move', null); - var currMouse = context.mouse(); - var currAngle = Math.atan2(currMouse[1] - _pivot[1], currMouse[0] - _pivot[0]); + keybinding.off(); + }; - if (typeof _prevAngle === 'undefined') _prevAngle = currAngle; - var delta = currAngle - _prevAngle; - fn(actionRotate(entityIDs, _pivot, delta, projection), annotation); + mode.selectedIDs = function() { + if (!arguments.length) return entityIDs; + // no assign + return mode; + }; - _prevTransform = currTransform; - _prevAngle = currAngle; - _prevGraph = context.graph(); - } + return mode; + } - function finish() { - event.stopPropagation(); - context.enter(modeSelect(context, entityIDs)); - } + function modeRotate$$1(context, entityIDs) { + var mode = { + id: 'rotate', + button: 'browse' + }; + var keybinding = d3keybinding('rotate'); + var behaviors = [ + behaviorEdit(context), + operationCircularize(entityIDs, context).behavior, + operationDelete(entityIDs, context).behavior, + operationMove(entityIDs, context).behavior, + operationOrthogonalize(entityIDs, context).behavior, + operationReflectLong(entityIDs, context).behavior, + operationReflectShort(entityIDs, context).behavior + ]; + var annotation = entityIDs.length === 1 ? + t('operations.rotate.annotation.' + context.geometry(entityIDs[0])) : + t('operations.rotate.annotation.multiple'); - function cancel() { - context.pop(); - context.enter(modeSelect(context, entityIDs)); - } + var _prevGraph; + var _prevAngle; + var _prevTransform; + var _pivot; - function undone() { - context.enter(modeBrowse(context)); - } + function doRotate() { + var fn; + if (context.graph() !== _prevGraph) { + fn = context.perform; + } else { + fn = context.replace; + } + // projection changed, recalculate _pivot + var projection = context.projection; + var currTransform = projection.transform(); + if (!_prevTransform || + currTransform.k !== _prevTransform.k || + currTransform.x !== _prevTransform.x || + currTransform.y !== _prevTransform.y) { + + var nodes = utilGetAllNodes(entityIDs, context.graph()); + var points = nodes.map(function(n) { return projection(n.loc); }); + + if (points.length === 1) { // degenerate case + _pivot = points[0]; + } else if (points.length === 2) { + _pivot = geoVecInterp(points[0], points[1], 0.5); + } else { + _pivot = d3_polygonCentroid(d3_polygonHull(points)); + } + _prevAngle = undefined; + } - mode.enter = function() { - behaviors.forEach(function(behavior) { - context.install(behavior); - }); - context.surface() - .on('mousemove.rotate', doRotate) - .on('click.rotate', finish); + var currMouse = context.mouse(); + var currAngle = Math.atan2(currMouse[1] - _pivot[1], currMouse[0] - _pivot[0]); - context.history() - .on('undone.rotate', undone); + if (typeof _prevAngle === 'undefined') _prevAngle = currAngle; + var delta = currAngle - _prevAngle; - keybinding - .on('⎋', cancel) - .on('↩', finish); + fn(actionRotate(entityIDs, _pivot, delta, projection), annotation); - d3_select(document) - .call(keybinding); - }; + _prevTransform = currTransform; + _prevAngle = currAngle; + _prevGraph = context.graph(); + } - mode.exit = function() { - behaviors.forEach(function(behavior) { - context.uninstall(behavior); - }); + function finish() { + event.stopPropagation(); + context.enter(modeSelect(context, entityIDs)); + } - context.surface() - .on('mousemove.rotate', null) - .on('click.rotate', null); - context.history() - .on('undone.rotate', null); + function cancel() { + context.pop(); + context.enter(modeSelect(context, entityIDs)); + } - keybinding.off(); - }; + function undone() { + context.enter(modeBrowse(context)); + } - mode.selectedIDs = function() { - if (!arguments.length) return entityIDs; - // no assign - return mode; - }; + mode.enter = function() { + behaviors.forEach(function(behavior) { + context.install(behavior); + }); - return mode; -} - -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -/** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ -function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach); -} - -var _isSaving = false; - - -function modeSave$$1(context) { - var mode = { id: 'save' }; - var keybinding = d3keybinding('modeSave'); - - var loading = uiLoading(context) - .message(t('save.uploading')) - .blocking(true); - - var commit = uiCommit(context) - .on('cancel', cancel) - .on('save', save); - - var _toCheck = []; - var _toLoad = []; - var _loaded = {}; - var _toLoadCount = 0; - var _toLoadTotal = 0; - - var _conflicts = []; - var _errors = []; - var _origChanges; - - - function cancel(selectedID) { - if (selectedID) { - context.enter(modeSelect(context, [selectedID])); - } else { - context.enter(modeBrowse(context)); - } - } + context.surface() + .on('mousemove.rotate', doRotate) + .on('click.rotate', finish); + context.history() + .on('undone.rotate', undone); - function save(changeset, tryAgain, checkConflicts) { - // Guard against accidentally entering save code twice - #4641 - if (_isSaving && !tryAgain) { - return; - } + keybinding + .on('⎋', cancel) + .on('↩', finish); - var osm = context.connection(); - if (!osm) { - cancel(); - return; - } + select(document) + .call(keybinding); + }; - // If user somehow got logged out mid-save, try to reauthenticate.. - // This can happen if they were logged in from before, but the tokens are no longer valid. - if (!osm.authenticated()) { - osm.authenticate(function(err) { - if (err) { - cancel(); // quit save mode.. - } else { - save(changeset, tryAgain, checkConflicts); // continue where we left off.. - } - }); - return; - } - if (!_isSaving) { - keybindingOff(); - context.container().call(loading); // block input - _isSaving = true; - } + mode.exit = function() { + behaviors.forEach(function(behavior) { + context.uninstall(behavior); + }); - var history = context.history(); - var localGraph = context.graph(); - var remoteGraph = coreGraph$$1(history.base(), true); + context.surface() + .on('mousemove.rotate', null) + .on('click.rotate', null); - _conflicts = []; - _errors = []; + context.history() + .on('undone.rotate', null); - // Store original changes, in case user wants to download them as an .osc file - _origChanges = history.changes(actionDiscardTags(history.difference())); + keybinding.off(); + }; - // First time, `history.perform` a no-op action. - // Any conflict resolutions will be done as `history.replace` - if (!tryAgain) { - history.perform(actionNoop()); - } - // Attempt a fast upload.. If there are conflicts, re-enter with `checkConflicts = true` - if (!checkConflicts) { - upload(changeset); + mode.selectedIDs = function() { + if (!arguments.length) return entityIDs; + // no assign + return mode; + }; - // Do the full (slow) conflict check.. - } else { - var modified = filter(history.difference().summary(), { changeType: 'modified' }); - _toCheck = map$3(map$3(modified, 'entity'), 'id'); - _toLoad = withChildNodes(_toCheck, localGraph); - _loaded = {}; - _toLoadCount = 0; - _toLoadTotal = _toLoad.length; - - if (_toCheck.length) { - showProgress(_toLoadCount, _toLoadTotal); - _toLoad.forEach(function(id) { _loaded[id] = false; }); - osm.loadMultiple(_toLoad, loaded); - } else { - upload(changeset); - } - } - return; + return mode; + } + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; - function withChildNodes(ids, graph) { - return uniq(reduce(ids, function(result, id) { - var entity = graph.entity(id); - if (entity.type === 'way') { - try { - var children = graph.childNodes(entity); - result.push.apply(result, map$3(filter(children, 'version'), 'id')); - } catch (err) { - /* eslint-disable no-console */ - if (typeof console !== 'undefined') console.error(err); - /* eslint-enable no-console */ - } - } - return result; - }, clone(ids))); - } + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } - // Reload modified entities into an alternate graph and check for conflicts.. - function loaded(err, result) { - if (_errors.length) return; + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; - if (err) { - _errors.push({ - msg: err.message || err.responseText, - details: [ t('save.status_code', { code: err.status }) ] - }); - showErrors(); + return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } - } else { - var loadMore = []; - - result.data.forEach(function(entity) { - remoteGraph.replace(entity); - _loaded[entity.id] = true; - _toLoad = without(_toLoad, entity.id); - - if (!entity.visible) return; - - // Because loadMultiple doesn't download /full like loadEntity, - // need to also load children that aren't already being checked.. - var i, id; - if (entity.type === 'way') { - for (i = 0; i < entity.nodes.length; i++) { - id = entity.nodes[i]; - if (_loaded[id] === undefined) { - _loaded[id] = false; - loadMore.push(id); - } - } - } else if (entity.type === 'relation' && entity.isMultipolygon()) { - for (i = 0; i < entity.members.length; i++) { - id = entity.members[i].id; - if (_loaded[id] === undefined) { - _loaded[id] = false; - loadMore.push(id); - } - } - } - }); - - _toLoadCount += result.data.length; - _toLoadTotal += loadMore.length; - showProgress(_toLoadCount, _toLoadTotal); - - if (loadMore.length) { - _toLoad.push.apply(_toLoad, loadMore); - osm.loadMultiple(loadMore, loaded); - } - - if (!_toLoad.length) { - detectConflicts(); - } - } - } + function d3geoTile() { + var size = [960, 500], + scale = 256, + scaleExtent = [0, 20], + translate = [size[0] / 2, size[1] / 2], + zoomDelta = 0; + function bound(_) { + return Math.min(scaleExtent[1], Math.max(scaleExtent[0], _)); + } - function detectConflicts() { - function choice(id, text, action) { - return { id: id, text: text, action: function() { history.replace(action); } }; - } - function formatUser(d) { - return '' + d + ''; - } - function entityName(entity) { - return utilDisplayName(entity) || (utilDisplayType(entity.id) + ' ' + entity.id); - } + function tile() { + var z = Math.max(Math.log(scale) / Math.LN2 - 8, 0), + z0 = bound(Math.round(z + zoomDelta)), + k = Math.pow(2, z - z0 + 8), + origin = [(translate[0] - scale / 2) / k, (translate[1] - scale / 2) / k], + tiles = [], + cols = range(Math.max(0, Math.floor(-origin[0])), Math.max(0, Math.ceil(size[0] / k - origin[0]))), + rows = range(Math.max(0, Math.floor(-origin[1])), Math.max(0, Math.ceil(size[1] / k - origin[1]))); - function sameVersions(local$$1, remote) { - if (local$$1.version !== remote.version) return false; + rows.forEach(function(y) { + cols.forEach(function(x) { + tiles.push([x, y, z0]); + }); + }); - if (local$$1.type === 'way') { - var children = union(local$$1.nodes, remote.nodes); - for (var i = 0; i < children.length; i++) { - var a = localGraph.hasEntity(children[i]); - var b = remoteGraph.hasEntity(children[i]); - if (a && b && a.version !== b.version) return false; - } - } + tiles.translate = origin; + tiles.scale = k; - return true; - } + return tiles; + } - _toCheck.forEach(function(id) { - var local$$1 = localGraph.entity(id); - var remote = remoteGraph.entity(id); + tile.scaleExtent = function(_) { + if (!arguments.length) return scaleExtent; + scaleExtent = _; + return tile; + }; - if (sameVersions(local$$1, remote)) return; + tile.size = function(_) { + if (!arguments.length) return size; + size = _; + return tile; + }; - var action = actionMergeRemoteChanges; - var merge = action(id, localGraph, remoteGraph, formatUser); + tile.scale = function(_) { + if (!arguments.length) return scale; + scale = _; + return tile; + }; - history.replace(merge); + tile.translate = function(_) { + if (!arguments.length) return translate; + translate = _; + return tile; + }; - var mergeConflicts = merge.conflicts(); - if (!mergeConflicts.length) return; // merged safely + tile.zoomDelta = function(_) { + if (!arguments.length) return zoomDelta; + zoomDelta = +_; + return tile; + }; - var forceLocal = action(id, localGraph, remoteGraph).withOption('force_local'); - var forceRemote = action(id, localGraph, remoteGraph).withOption('force_remote'); - var keepMine = t('save.conflict.' + (remote.visible ? 'keep_local' : 'restore')); - var keepTheirs = t('save.conflict.' + (remote.visible ? 'keep_remote' : 'delete')); + return tile; + } - _conflicts.push({ - id: id, - name: entityName(local$$1), - details: mergeConflicts, - chosen: 1, - choices: [ - choice(id, keepMine, forceLocal), - choice(id, keepTheirs, forceRemote) - ] - }); - }); + /* global Mapillary:false */ - upload(changeset); - } - } + var apibase = 'https://a.mapillary.com/v3/', + viewercss = 'mapillary-js/mapillary.min.css', + viewerjs = 'mapillary-js/mapillary.min.js', + clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi', + maxResults = 1000, + tileZoom = 14, + dispatch$1 = dispatch('loadedImages', 'loadedSigns'), + _mlyFallback = false, + _mlyCache, + _mlyClicks, + _mlySelectedImage, + _mlySignDefs, + _mlySignSprite, + _mlyViewer; - function upload(changeset) { - var osm = context.connection(); - if (!osm) { - _errors.push({ msg: 'No OSM Service' }); - } - if (_conflicts.length) { - _conflicts.sort(function(a, b) { return b.id.localeCompare(a.id); }); - showConflicts(changeset); + function abortRequest(i) { + i.abort(); + } - } else if (_errors.length) { - showErrors(); - } else { - var history = context.history(); - var changes = history.changes(actionDiscardTags(history.difference())); - if (changes.modified.length || changes.created.length || changes.deleted.length) { - osm.putChangeset(changeset, changes, uploadCallback); - } else { // changes were insignificant or reverted by user - d3_select('.inspector-wrap *').remove(); - loading.close(); - _isSaving = false; - context.flush(); - cancel(); - } - } - } + function nearNullIsland(x, y, z) { + if (z >= 7) { + var center = Math.pow(2, z - 1), + width = Math.pow(2, z - 6), + min$$1 = center - (width / 2), + max$$1 = center + (width / 2) - 1; + return x >= min$$1 && x <= max$$1 && y >= min$$1 && y <= max$$1; + } + return false; + } - function uploadCallback(err, changeset) { - if (err) { - if (err.status === 409) { // 409 Conflict - save(changeset, true, true); // tryAgain = true, checkConflicts = true - } else { - _errors.push({ - msg: err.message || err.responseText, - details: [ t('save.status_code', { code: err.status }) ] - }); - showErrors(); - } + function maxPageAtZoom(z) { + if (z < 15) return 2; + if (z === 15) return 5; + if (z === 16) return 10; + if (z === 17) return 20; + if (z === 18) return 40; + if (z > 18) return 80; + } - } else { - context.history().clearSaved(); - success(changeset); - // Add delay to allow for postgres replication #1646 #2678 - window.setTimeout(function() { - d3_select('.inspector-wrap *').remove(); - loading.close(); - _isSaving = false; - context.flush(); - }, 2500); - } - } + function localeTimestamp(s) { + if (!s) return null; + var detected = utilDetect(); + var options = { + day: 'numeric', month: 'short', year: 'numeric', + hour: 'numeric', minute: 'numeric', second: 'numeric', + timeZone: 'UTC' + }; + var d = new Date(s); + if (isNaN(d.getTime())) return null; + return d.toLocaleString(detected.locale, options); + } + + + function getTiles(projection) { + var s = projection.scale() * 2 * Math.PI, + z = Math.max(Math.log(s) / Math.log(2) - 8, 0), + ts = 256 * Math.pow(2, z - tileZoom), + origin = [ + s / 2 - projection.translate()[0], + s / 2 - projection.translate()[1]]; + + return d3geoTile() + .scaleExtent([tileZoom, tileZoom]) + .scale(s) + .size(projection.clipExtent()[1]) + .translate(projection.translate())() + .map(function(tile) { + var x = tile[0] * ts - origin[0], + y = tile[1] * ts - origin[1]; + + return { + id: tile.toString(), + xyz: tile, + extent: geoExtent$$1( + projection.invert([x, y + ts]), + projection.invert([x + ts, y]) + ) + }; + }); + } - function showProgress(num, total) { - var modal = context.container().select('.loading-modal .modal-section'); - var progress = modal.selectAll('.progress') - .data([0]); - - // enter/update - progress.enter() - .append('div') - .attr('class', 'progress') - .merge(progress) - .text(t('save.conflict_progress', { num: num, total: total })); - } - - - function showConflicts(changeset) { - var history = context.history(); - var selection$$1 = context.container() - .select('#sidebar') - .append('div') - .attr('class','sidebar-component'); - - loading.close(); - _isSaving = false; - - var ui = uiConflicts(context) - .conflictList(_conflicts) - .origChanges(_origChanges) - .on('cancel', function() { - history.pop(); - selection$$1.remove(); - keybindingOn(); - }) - .on('save', function() { - for (var i = 0; i < _conflicts.length; i++) { - if (_conflicts[i].chosen === 1) { // user chose "keep theirs" - var entity = context.hasEntity(_conflicts[i].id); - if (entity && entity.type === 'way') { - var children = uniq(entity.nodes); - for (var j = 0; j < children.length; j++) { - history.replace(actionRevert(children[j])); - } - } - history.replace(actionRevert(_conflicts[i].id)); - } - } - - selection$$1.remove(); - save(changeset, true, false); // tryAgain = true, checkConflicts = false - }); - selection$$1.call(ui); - } + function loadTiles(which, url, projection) { + var s = projection.scale() * 2 * Math.PI, + currZoom = Math.floor(Math.max(Math.log(s) / Math.log(2) - 8, 0)); + var tiles = getTiles(projection).filter(function(t) { + return !nearNullIsland(t.xyz[0], t.xyz[1], t.xyz[2]); + }); - function showErrors() { - keybindingOn(); - context.history().pop(); - loading.close(); - _isSaving = false; + filter(which.inflight, function(v, k) { + var wanted = find$1(tiles, function(tile) { return k === (tile.id + ',0'); }); + if (!wanted) delete which.inflight[k]; + return !wanted; + }).map(abortRequest); - var selection$$1 = uiConfirm(context.container()); - selection$$1 - .select('.modal-section.header') - .append('h3') - .text(t('save.error')); + tiles.forEach(function(tile) { + loadNextTilePage(which, currZoom, url, tile); + }); + } - addErrors(selection$$1, _errors); - selection$$1.okButton(); - } + function loadNextTilePage(which, currZoom, url, tile) { + var cache = _mlyCache[which], + rect = tile.extent.rectangle(), + maxPages = maxPageAtZoom(currZoom), + nextPage = cache.nextPage[tile.id] || 0, + nextURL = cache.nextURL[tile.id] || url + + utilQsString({ + per_page: maxResults, + page: nextPage, + client_id: clientId, + bbox: [rect[0], rect[1], rect[2], rect[3]].join(','), + }); + + if (nextPage > maxPages) return; + + var id = tile.id + ',' + String(nextPage); + if (cache.loaded[id] || cache.inflight[id]) return; + cache.inflight[id] = request(nextURL) + .mimeType('application/json') + .response(function(xhr) { + var linkHeader = xhr.getResponseHeader('Link'); + if (linkHeader) { + var pagination = parsePagination(xhr.getResponseHeader('Link')); + if (pagination.next) { + cache.nextURL[tile.id] = pagination.next; + } + } + return JSON.parse(xhr.responseText); + }) + .get(function(err, data) { + cache.loaded[id] = true; + delete cache.inflight[id]; + if (err || !data.features || !data.features.length) return; + + var features = data.features.map(function(feature) { + var loc = feature.geometry.coordinates, + d; + + if (which === 'images') { + d = { + loc: loc, + key: feature.properties.key, + ca: feature.properties.ca, + captured_at: feature.properties.captured_at, + captured_by: feature.properties.username, + pano: feature.properties.pano + }; + cache.forImageKey[d.key] = d; // cache imageKey -> image + + } else if (which === 'sequences') { + var sequenceKey = feature.properties.key; + cache.lineString[sequenceKey] = feature; // cache sequenceKey -> lineString + feature.properties.coordinateProperties.image_keys.forEach(function(imageKey) { + cache.forImageKey[imageKey] = sequenceKey; // cache imageKey -> sequenceKey + }); + return false; // because no `d` data worth loading into an rbush + + } else if (which === 'objects') { + d = { + loc: loc, + key: feature.properties.key, + value: feature.properties.value, + package: feature.properties.package, + detections: feature.properties.detections + }; + + // cache imageKey -> detectionKey + feature.properties.detections.forEach(function(detection) { + var imageKey = detection.image_key; + var detectionKey = detection.detection_key; + if (!_mlyCache.detections[imageKey]) { + _mlyCache.detections[imageKey] = {}; + } + if (!_mlyCache.detections[imageKey][detectionKey]) { + _mlyCache.detections[imageKey][detectionKey] = {}; + } + }); + } + + return { + minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d + }; + + }).filter(Boolean); + + cache.rtree.load(features); + + if (which === 'images' || which === 'sequences') { + dispatch$1.call('loadedImages'); + } else if (which === 'objects') { + dispatch$1.call('loadedSigns'); + } + + if (data.features.length === maxResults) { // more pages to load + cache.nextPage[tile.id] = nextPage + 1; + loadNextTilePage(which, currZoom, url, tile); + } else { + cache.nextPage[tile.id] = Infinity; // no more pages to load + } + }); + } - function addErrors(selection$$1, data) { - var message = selection$$1 - .select('.modal-section.message-text'); + // extract links to pages of API results + function parsePagination(links) { + return links.split(',').map(function(rel) { + var elements = rel.split(';'); + if (elements.length === 2) { + return [ + /<(.+)>/.exec(elements[0])[1], + /rel="(.+)"/.exec(elements[1])[1] + ]; + } else { + return ['','']; + } + }).reduce(function(pagination, val) { + pagination[val[1]] = val[0]; + return pagination; + }, {}); + } + + + // partition viewport into `psize` x `psize` regions + function partitionViewport(psize, projection) { + var dimensions = projection.clipExtent()[1]; + psize = psize || 16; + var cols = range(0, dimensions[0], psize), + rows = range(0, dimensions[1], psize), + partitions = []; + + rows.forEach(function(y) { + cols.forEach(function(x) { + var min$$1 = [x, y + psize], + max$$1 = [x + psize, y]; + partitions.push( + geoExtent$$1(projection.invert(min$$1), projection.invert(max$$1))); + }); + }); - var items = message - .selectAll('.error-container') - .data(data); + return partitions; + } - var enter = items.enter() - .append('div') - .attr('class', 'error-container'); - enter - .append('a') - .attr('class', 'error-description') - .attr('href', '#') - .classed('hide-toggle', true) - .text(function(d) { return d.msg || t('save.unknown_error_details'); }) - .on('click', function() { - event.preventDefault(); + // no more than `limit` results per partition. + function searchLimited(psize, limit, projection, rtree) { + limit = limit || 3; - var error = d3_select(this); - var detail = d3_select(this.nextElementSibling); - var exp = error.classed('expanded'); + var partitions = partitionViewport(psize, projection); + var results; - detail.style('display', exp ? 'none' : 'block'); - error.classed('expanded', !exp); - }); + // console.time('previous'); + results = flatten(map$3(partitions, function(extent$$1) { + return rtree.search(extent$$1.bbox()) + .slice(0, limit) + .map(function(d) { return d.data; }); + })); + // console.timeEnd('previous'); - var details = enter - .append('div') - .attr('class', 'error-detail-container') - .style('display', 'none'); + // console.time('new'); + // results = partitions.reduce(function(result, extent) { + // var found = rtree.search(extent.bbox()) + // .map(function(d) { return d.data; }) + // .sort(function(a, b) { + // return a.loc[1] - b.loc[1]; + // // return a.key.localeCompare(b.key); + // }) + // .slice(0, limit); - details - .append('ul') - .attr('class', 'error-detail-list') - .selectAll('li') - .data(function(d) { return d.details || []; }) - .enter() - .append('li') - .attr('class', 'error-detail-item') - .text(function(d) { return d; }); + // return (found.length ? result.concat(found) : result); + // }, []); + // console.timeEnd('new'); - items.exit() - .remove(); - } + return results; + } - function success(changeset) { - commit.reset(); - var ui = uiSuccess(context) - .changeset(changeset) - .on('cancel', function() { context.ui().sidebar.hide(); }); + var serviceMapillary = { - context.enter(modeBrowse(context).sidebar(ui)); - } + init: function() { + if (!_mlyCache) { + this.reset(); + } + this.event = utilRebind(this, dispatch$1, 'on'); + }, - function keybindingOn() { - d3_select(document) - .call(keybinding.on('⎋', cancel, true)); - } + reset: function() { + var cache = _mlyCache; + + if (cache) { + if (cache.images && cache.images.inflight) { + forEach(cache.images.inflight, abortRequest); + } + if (cache.objects && cache.objects.inflight) { + forEach(cache.objects.inflight, abortRequest); + } + if (cache.sequences && cache.sequences.inflight) { + forEach(cache.sequences.inflight, abortRequest); + } + } + _mlyCache = { + images: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {} }, + objects: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1() }, + sequences: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {}, lineString: {} }, + detections: {} + }; - function keybindingOff() { - d3_select(document) - .call(keybinding.off); - } + _mlySelectedImage = null; + _mlyClicks = []; + }, - mode.enter = function() { - function done() { - context.ui().sidebar.show(commit); - } + images: function(projection) { + var psize = 16, limit = 3; + return searchLimited(psize, limit, projection, _mlyCache.images.rtree); + }, - keybindingOn(); - context.container().selectAll('#content') - .attr('class', 'inactive'); + signs: function(projection) { + var psize = 32, limit = 3; + return searchLimited(psize, limit, projection, _mlyCache.objects.rtree); + }, - var osm = context.connection(); - if (!osm) { - cancel(); - return; - } - if (osm.authenticated()) { - done(); - } else { - osm.authenticate(function(err) { - if (err) { - cancel(); - } else { - done(); - } - }); - } - }; + sequences: function(projection) { + var viewport = projection.clipExtent(); + var min$$1 = [viewport[0][0], viewport[1][1]]; + var max$$1 = [viewport[1][0], viewport[0][1]]; + var bbox = geoExtent$$1(projection.invert(min$$1), projection.invert(max$$1)).bbox(); + var sequenceKeys = {}; + + // all sequences for images in viewport + _mlyCache.images.rtree.search(bbox) + .forEach(function(d) { + var sequenceKey = _mlyCache.sequences.forImageKey[d.data.key]; + if (sequenceKey) { + sequenceKeys[sequenceKey] = true; + } + }); + + // Return lineStrings for the sequences + return Object.keys(sequenceKeys).map(function(sequenceKey) { + return _mlyCache.sequences.lineString[sequenceKey]; + }); + }, - mode.exit = function() { - _isSaving = false; + signsSupported: function() { + var detected = utilDetect(); + if (detected.ie) return false; + if ((detected.browser.toLowerCase() === 'safari') && (parseFloat(detected.version) < 10)) return false; + return true; + }, - keybindingOff(); - context.container().selectAll('#content') - .attr('class', 'active'); + signHTML: function(d) { + if (!_mlySignDefs || !_mlySignSprite) return; + var position = _mlySignDefs[d.value]; + if (!position) return '
        '; + var iconStyle = [ + 'background-image:url(' + _mlySignSprite + ')', + 'background-repeat:no-repeat', + 'height:' + position.height + 'px', + 'width:' + position.width + 'px', + 'background-position-x:-' + position.x + 'px', + 'background-position-y:-' + position.y + 'px', + ]; - context.ui().sidebar.hide(); - }; + return '
        '; + }, - return mode; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin$1 = Math.min; - -/** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ -function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin$1(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; - - var index = -1, - seen = caches[0]; - - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -/** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ -function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; -} - -/** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ -var intersection = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; -}); - -// Translate a MacOS key command into the appropriate Windows/Linux equivalent. -// For example, ⌘Z -> Ctrl+Z -var uiCmd = function (code) { - var detected = utilDetect(); - - if (detected.os === 'mac') { - return code; - } - - if (detected.os === 'win') { - if (code === '⌘⇧Z') return 'Ctrl+Y'; - } - - var result = '', - replacements = { - '⌘': 'Ctrl', - '⇧': 'Shift', - '⌥': 'Alt', - '⌫': 'Backspace', - '⌦': 'Delete' - }; - for (var i = 0; i < code.length; i++) { - if (code[i] in replacements) { - result += replacements[code[i]] + (i < code.length - 1 ? '+' : ''); - } else { - result += code[i]; - } - } + loadImages: function(projection) { + loadTiles('images', apibase + 'images?', projection); + loadTiles('sequences', apibase + 'sequences?', projection); + }, - return result; -}; - - -// return a display-focused string for a given keyboard code -uiCmd.display = function(code) { - if (code.length !== 1) return code; - - var detected = utilDetect(); - var mac = (detected.os === 'mac'); - var replacements = { - '⌘': mac ? '⌘ ' + t('shortcuts.key.cmd') : t('shortcuts.key.ctrl'), - '⇧': mac ? '⇧ ' + t('shortcuts.key.shift') : t('shortcuts.key.shift'), - '⌥': mac ? '⌥ ' + t('shortcuts.key.option') : t('shortcuts.key.alt'), - '⌃': mac ? '⌃ ' + t('shortcuts.key.ctrl') : t('shortcuts.key.ctrl'), - '⌫': mac ? '⌫ ' + t('shortcuts.key.delete') : t('shortcuts.key.backspace'), - '⌦': mac ? '⌦ ' + t('shortcuts.key.del') : t('shortcuts.key.del'), - '↖': mac ? '↖ ' + t('shortcuts.key.pgup') : t('shortcuts.key.pgup'), - '↘': mac ? '↘ ' + t('shortcuts.key.pgdn') : t('shortcuts.key.pgdn'), - '⇞': mac ? '⇞ ' + t('shortcuts.key.home') : t('shortcuts.key.home'), - '⇟': mac ? '⇟ ' + t('shortcuts.key.end') : t('shortcuts.key.end'), - '↵': mac ? '↵ ' + t('shortcuts.key.return') : t('shortcuts.key.enter'), - '⎋': mac ? '⎋ ' + t('shortcuts.key.esc') : t('shortcuts.key.esc'), - }; - return replacements[code] || code; -}; + loadSigns: function(context, projection) { + // if we are looking at signs, we'll actually need to fetch images too + loadTiles('images', apibase + 'images?', projection); + loadTiles('objects', apibase + 'objects?', projection); -var relatedParent; + // load traffic sign defs + if (!_mlySignDefs) { + _mlySignSprite = context.asset('img/traffic-signs/traffic-signs.png'); + _mlySignDefs = {}; + d3_json(context.asset('img/traffic-signs/traffic-signs.json'), function(err, data) { + if (err) return; + _mlySignDefs = data; + }); + } + }, -function modeSelect(context, selectedIDs) { - var mode = { - id: 'select', - button: 'browse' - }; + loadViewer: function(context) { + // add mly-wrapper + var wrap = select('#photoviewer').selectAll('.mly-wrapper') + .data([0]); + + var wrapEnter = wrap.enter() + .append('div') + .attr('id', 'mly') + .attr('class', 'photo-wrapper mly-wrapper') + .classed('hide', true); + + wrapEnter + .append('div') + .attr('class', 'photo-attribution fillD'); + + + // load mapillary-viewercss + select('head').selectAll('#mapillary-viewercss') + .data([0]) + .enter() + .append('link') + .attr('id', 'mapillary-viewercss') + .attr('rel', 'stylesheet') + .attr('href', context.asset(viewercss)); + + // load mapillary-viewerjs + select('head').selectAll('#mapillary-viewerjs') + .data([0]) + .enter() + .append('script') + .attr('id', 'mapillary-viewerjs') + .attr('src', context.asset(viewerjs)); + }, - var keybinding = d3keybinding('select'); - var timeout = null; - var behaviors = [ - behaviorCopy(context), - behaviorPaste(context), - behaviorBreathe(context), - behaviorHover(context), - behaviorSelect(context), - behaviorLasso(context), - modeDragNode$$1(context).restoreSelectedIDs(selectedIDs).behavior - ]; - var inspector; - var editMenu; - var newFeature = false; - var suppressMenu = true; - var follow = false; + showViewer: function() { + var wrap = select('#photoviewer') + .classed('hide', false); - var wrap = context.container() - .select('.inspector-wrap'); + var isHidden = wrap.selectAll('.photo-wrapper.mly-wrapper.hide').size(); + if (isHidden) { + wrap + .selectAll('.photo-wrapper:not(.mly-wrapper)') + .classed('hide', true); - function singular() { - if (selectedIDs.length === 1) { - return context.hasEntity(selectedIDs[0]); - } - } + wrap + .selectAll('.photo-wrapper.mly-wrapper') + .classed('hide', false); + _mlyViewer.resize(); + } - function checkSelectedIDs() { - var ids = []; - if (Array.isArray(selectedIDs)) { - ids = selectedIDs.filter(function(id) { - return context.hasEntity(id); - }); - } + return this; + }, - if (ids.length) { - selectedIDs = ids; - } else { - context.enter(modeBrowse(context)); - } - return !!ids.length; - } + hideViewer: function() { + _mlySelectedImage = null; - // find the common parent ways for nextVertex, previousVertex - function commonParents() { - var graph = context.graph(); - var commonParents = []; + if (!_mlyFallback && _mlyViewer) { + _mlyViewer.getComponent('sequence').stop(); + } - for (var i = 0; i < selectedIDs.length; i++) { - var entity = context.hasEntity(selectedIDs[i]); - if (!entity || entity.geometry(graph) !== 'vertex') { - return []; // selection includes some not vertexes - } + var viewer = select('#photoviewer'); + if (!viewer.empty()) viewer.datum(null); - var currParents = map$3(graph.parentWays(entity), 'id'); - if (!commonParents.length) { - commonParents = currParents; - continue; - } + viewer + .classed('hide', true) + .selectAll('.photo-wrapper') + .classed('hide', true); - commonParents = intersection(commonParents, currParents); - if (!commonParents.length) { - return []; - } - } + d3_selectAll('.viewfield-group, .sequence, .icon-sign') + .classed('selected', false); - return commonParents; - } + return this.setStyles(null, true); + }, - function singularParent() { - var parents = commonParents(); - if (!parents || parents.length === 0) { - relatedParent = null; - return null; - } + parsePagination: parsePagination, - // relatedParent is used when we visit a vertex with multiple - // parents, and we want to remember which parent line we started on. - if (parents.length === 1) { - relatedParent = parents[0]; // remember this parent for later - return relatedParent; - } + updateViewer: function(imageKey, context) { + if (!imageKey) return this; - if (parents.indexOf(relatedParent) !== -1) { - return relatedParent; // prefer the previously seen parent - } + if (!_mlyViewer) { + this.initViewer(imageKey, context); + } else { + _mlyViewer.moveToKey(imageKey) + .catch(function(e) { console.error('mly3', e); }); // eslint-disable-line no-console + } - return parents[0]; - } + return this; + }, - function closeMenu() { - if (editMenu) { - context.surface().call(editMenu.close); - } - } + initViewer: function(imageKey, context) { + var that = this; + if (Mapillary && imageKey) { + var opts = { + baseImageSize: 320, + component: { + cover: false, + keyboard: false, + tag: true + } + }; + + // Disable components requiring WebGL support + if (!Mapillary.isSupported() && Mapillary.isFallbackSupported()) { + _mlyFallback = true; + opts.component = { + cover: false, + direction: false, + imagePlane: false, + keyboard: false, + mouse: false, + sequence: false, + tag: false, + image: true, // fallback + navigation: true // fallback + }; + } + + _mlyViewer = new Mapillary.Viewer('mly', clientId, null, opts); + _mlyViewer.on('nodechanged', nodeChanged); + _mlyViewer.moveToKey(imageKey) + .catch(function(e) { console.error('mly3', e); }); // eslint-disable-line no-console + } + // nodeChanged: called after the viewer has changed images and is ready. + // + // There is some logic here to batch up clicks into a _mlyClicks array + // because the user might click on a lot of markers quickly and nodechanged + // may be called out of order asychronously. + // + // Clicks are added to the array in `selectedImage` and removed here. + // + function nodeChanged(node) { + if (!_mlyFallback) { + _mlyViewer.getComponent('tag').removeAll(); // remove previous detections + } + + var clicks = _mlyClicks; + var index = clicks.indexOf(node.key); + var selectedKey = _mlySelectedImage && _mlySelectedImage.key; + + if (index > -1) { // `nodechanged` initiated from clicking on a marker.. + clicks.splice(index, 1); // remove the click + // If `node.key` matches the current _mlySelectedImage, call `selectImage()` + // one more time to update the detections and attribution.. + if (node.key === selectedKey) { + that.selectImage(_mlySelectedImage, node.key, true); + } + } else { // `nodechanged` initiated from the Mapillary viewer controls.. + var loc = node.computedLatLon ? [node.computedLatLon.lon, node.computedLatLon.lat] : [node.latLon.lon, node.latLon.lat]; + context.map().centerEase(loc); + that.selectImage(undefined, node.key, true); + } + } + }, - function positionMenu() { - if (!editMenu) { return; } - var entity = singular(); - if (entity && context.geometry(entity.id) === 'relation') { - suppressMenu = true; - } else { - var point$$1 = context.mouse(); - var viewport = geoExtent$$1(context.projection.clipExtent()).polygon(); + // Pass the image datum itself in `d` or the `imageKey` string. + // This allows images to be selected from places that dont have access + // to the full image datum (like the street signs layer or the js viewer) + selectImage: function(d, imageKey, fromViewer) { + if (!d && imageKey) { + // If the user clicked on something that's not an image marker, we + // might get in here.. Cache lookup can fail, e.g. if the user + // clicked a streetsign, but images are loading slowly asynchronously. + // We'll try to carry on anyway if there is no datum. There just + // might be a delay before user sees detections, captured_at, etc. + d = _mlyCache.images.forImageKey[imageKey]; + } - if (point$$1 && geoPointInPolygon(point$$1, viewport)) { - editMenu.center(point$$1); - } else { - suppressMenu = true; - } - } - } + _mlySelectedImage = d; + var viewer = select('#photoviewer'); + if (!viewer.empty()) viewer.datum(d); + imageKey = (d && d.key) || imageKey; + if (!fromViewer && imageKey) { + _mlyClicks.push(imageKey); + } - function showMenu() { - closeMenu(); - if (editMenu) { - context.surface().call(editMenu); - } - } + this.setStyles(null, true); + + d3_selectAll('.layer-mapillary-signs .icon-sign') + .classed('selected', function(d) { + return some(d.detections, function(detection) { + return detection.image_key === imageKey; + }); + }); + + var wrap = select('#photoviewer .mly-wrapper'); + var attribution = wrap.selectAll('.photo-attribution').html(''); + + if (d) { + if (d.captured_by) { + attribution + .append('a') + .attr('class', 'captured_by') + .attr('target', '_blank') + .attr('href', 'https://www.mapillary.com/app/user/' + encodeURIComponent(d.captured_by)) + .text('@' + d.captured_by); + + attribution + .append('span') + .text('|'); + } + + if (d.captured_at) { + attribution + .append('span') + .attr('class', 'captured_at') + .text(localeTimestamp(d.captured_at)); + + attribution + .append('span') + .text('|'); + } + + attribution + .append('a') + .attr('class', 'image_link') + .attr('target', '_blank') + .attr('href', 'https://www.mapillary.com/app/?pKey=' + encodeURIComponent(d.key) + + '&focus=photo&lat=' + d.loc[1] + '&lng=' + d.loc[0] + '&z=17') + .text('mapillary.com'); + + this.updateDetections(d); + } + return this; + }, - function toggleMenu() { - // deprecation warning - Radial Menu to be removed in iD v3 - if (d3_select('.edit-menu, .radial-menu').empty()) { - positionMenu(); - showMenu(); - } else { - closeMenu(); - } - } + getSelectedImage: function() { + return _mlySelectedImage; + }, - mode.selectedIDs = function() { - return selectedIDs; - }; + getSequenceKeyForImage: function(d) { + var imageKey = d && d.key; + return imageKey && _mlyCache.sequences.forImageKey[imageKey]; + }, - mode.reselect = function() { - if (!checkSelectedIDs()) return; - var surfaceNode = context.surface().node(); - if (surfaceNode.focus) { // FF doesn't support it - surfaceNode.focus(); - } + setStyles: function(hovered, reset) { + if (reset) { // reset all layers + d3_selectAll('.viewfield-group') + .classed('highlighted', false) + .classed('hovered', false) + .classed('selected', false); - positionMenu(); - if (!suppressMenu) { - showMenu(); - } - }; + d3_selectAll('.sequence') + .classed('highlighted', false) + .classed('selected', false); + } + var hoveredImageKey = hovered && hovered.key; + var hoveredSequenceKey = this.getSequenceKeyForImage(hovered); + var hoveredLineString = hoveredSequenceKey && _mlyCache.sequences.lineString[hoveredSequenceKey]; + var hoveredImageKeys = (hoveredLineString && hoveredLineString.properties.coordinateProperties.image_keys) || []; - mode.newFeature = function(_) { - if (!arguments.length) return newFeature; - newFeature = _; - return mode; - }; + var viewer = select('#photoviewer'); + var selected = viewer.empty() ? undefined : viewer.datum(); + var selectedImageKey = selected && selected.key; + var selectedSequenceKey = this.getSequenceKeyForImage(selected); + var selectedLineString = selectedSequenceKey && _mlyCache.sequences.lineString[selectedSequenceKey]; + var selectedImageKeys = (selectedLineString && selectedLineString.properties.coordinateProperties.image_keys) || []; + // highlight sibling viewfields on either the selected or the hovered sequences + var highlightedImageKeys = union(hoveredImageKeys, selectedImageKeys); - mode.suppressMenu = function(_) { - if (!arguments.length) return suppressMenu; - suppressMenu = _; - return mode; - }; + d3_selectAll('.layer-mapillary-images .viewfield-group') + .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; }) + .classed('hovered', function(d) { return d.key === hoveredImageKey; }) + .classed('selected', function(d) { return d.key === selectedImageKey; }); + d3_selectAll('.layer-mapillary-images .sequence') + .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; }) + .classed('selected', function(d) { return d.properties.key === selectedSequenceKey; }); - mode.follow = function(_) { - if (!arguments.length) return follow; - follow = _; - return mode; - }; + return this; + }, - mode.enter = function() { + updateDetections: function(d) { + if (!_mlyViewer || _mlyFallback) return; - function update() { - closeMenu(); - checkSelectedIDs(); - } + var imageKey = d && d.key; + var detections = (imageKey && _mlyCache.detections[imageKey]) || []; + forEach(detections, function(data, k) { + if (isEmpty(data)) { + loadDetection(k); + } else { + var tag = makeTag(data); + if (tag) { + var tagComponent = _mlyViewer.getComponent('tag'); + tagComponent.add([tag]); + } + } + }); - function dblclick() { - var target = d3_select(event.target); - var datum = target.datum(); - var entity = datum && datum.properties && datum.properties.entity; - if (!entity) return; + function loadDetection(detectionKey) { + var url = apibase + 'detections/'+ + detectionKey + '?' + utilQsString({ + client_id: clientId, + }); + + request(url) + .mimeType('application/json') + .response(function(xhr) { + return JSON.parse(xhr.responseText); + }) + .get(function(err, data) { + if (!data || !data.properties) return; + + var imageKey = data.properties.image_key; + _mlyCache.detections[imageKey][detectionKey] = data; + + var selectedKey = _mlySelectedImage && _mlySelectedImage.key; + if (imageKey === selectedKey) { + var tag = makeTag(data); + if (tag) { + var tagComponent = _mlyViewer.getComponent('tag'); + tagComponent.add([tag]); + } + } + }); + } - if (entity instanceof osmWay && target.classed('target')) { - var choice = geoChooseEdge(context.childNodes(entity), context.mouse(), context.projection); - var prev = entity.nodes[choice.index - 1]; - var next = entity.nodes[choice.index]; - context.perform( - actionAddMidpoint({loc: choice.loc, edge: [prev, next]}, osmNode()), - t('operations.add.annotation.vertex') - ); + function makeTag(data) { + var valueParts = data.properties.value.split('--'); + if (valueParts.length !== 3) return; + + var text = valueParts[1].replace(/-/g, ' '); + var tag; + + // Currently only two shapes + if (data.properties.shape.type === 'Polygon') { + var polygonGeometry = new Mapillary + .TagComponent + .PolygonGeometry(data.properties.shape.coordinates[0]); + + tag = new Mapillary.TagComponent.OutlineTag( + data.properties.key, + polygonGeometry, + { + text: text, + textColor: 0xffff00, + lineColor: 0xffff00, + lineWidth: 2, + fillColor: 0xffff00, + fillOpacity: 0.3, + } + ); + + } else if (data.properties.shape.type === 'Point') { + var pointGeometry = new Mapillary + .TagComponent + .PointGeometry(data.properties.shape.coordinates[0]); + + tag = new Mapillary.TagComponent.SpotTag( + data.properties.key, + pointGeometry, + { + text: text, + color: 0xffff00, + textColor: 0xffff00 + } + ); + } + + return tag; + } + }, - event.preventDefault(); - event.stopPropagation(); - } else if (entity.type === 'midpoint') { - context.perform( - actionAddMidpoint({loc: entity.loc, edge: entity.edge}, osmNode()), - t('operations.add.annotation.vertex')); + cache: function() { + return _mlyCache; + }, - event.preventDefault(); - event.stopPropagation(); - } - } + signDefs: function(_) { + if (!arguments.length) return _mlySignDefs; + _mlySignDefs = _; + return this; + } - function selectElements(drawn) { - if (!checkSelectedIDs()) return; + }; - var surface = context.surface(); - var entity = singular(); + var apibase$1 = 'https://nominatim.openstreetmap.org/', + inflight = {}, + nominatimCache; - if (entity && context.geometry(entity.id) === 'relation') { - suppressMenu = true; - return; - } - surface.selectAll('.related') - .classed('related', false); + var serviceNominatim = { - singularParent(); - if (relatedParent) { - surface.selectAll(utilEntitySelector([relatedParent])) - .classed('related', true); - } + init: function() { + inflight = {}; + nominatimCache = rbush_1(); + }, - var selection$$1 = context.surface() - .selectAll(utilEntityOrMemberSelector(selectedIDs, context.graph())); + reset: function() { + forEach(inflight, function(req) { req.abort(); }); + inflight = {}; + nominatimCache = rbush_1(); + }, - if (selection$$1.empty()) { - // Return to browse mode if selected DOM elements have - // disappeared because the user moved them out of view.. - var source = event && event.type === 'zoom' && event.sourceEvent; - if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) { - context.enter(modeBrowse(context)); - } - } else { - selection$$1 - .classed('selected', true); - } - } + countryCode: function (location, callback) { + this.reverse(location, function(err, result) { + if (err) { + return callback(err); + } else if (result.address) { + return callback(null, result.address.country_code); + } else { + return callback('Unable to geocode', null); + } + }); + }, - function esc() { - context.enter(modeBrowse(context)); - } + reverse: function (location, callback) { + var cached = nominatimCache.search( + { minX: location[0], minY: location[1], maxX: location[0], maxY: location[1] } + ); - function firstVertex() { - event.preventDefault(); - var entity = singular(); - var parent = singularParent(); - var way; + if (cached.length > 0) { + return callback(null, cached[0].data); + } - if (entity && entity.type === 'way') { - way = entity; - } else if (parent) { - way = context.entity(parent); - } + var params = { zoom: 13, format: 'json', addressdetails: 1, lat: location[1], lon: location[0] }; + var url = apibase$1 + 'reverse?' + utilQsString(params); + if (inflight[url]) return; - if (way) { - context.enter( - modeSelect(context, [way.first()]).follow(true) - ); - } - } + inflight[url] = d3_json(url, function(err, result) { + delete inflight[url]; + if (err) { + return callback(err); + } else if (result && result.error) { + return callback(result.error); + } - function lastVertex() { - event.preventDefault(); - var entity = singular(); - var parent = singularParent(); - var way; + var extent = geoExtent$$1(location).padByMeters(200); + nominatimCache.insert(assign(extent.bbox(), {data: result})); - if (entity && entity.type === 'way') { - way = entity; - } else if (parent) { - way = context.entity(parent); - } + callback(null, result); + }); + }, - if (way) { - context.enter( - modeSelect(context, [way.last()]).follow(true) - ); - } - } + search: function (val, callback) { + var searchVal = encodeURIComponent(val); + var url = apibase$1 + 'search/' + searchVal + '?limit=10&format=json'; + if (inflight[url]) return; - function previousVertex() { - event.preventDefault(); - var parent = singularParent(); - if (!parent) return; + inflight[url] = d3_json(url, function(err, result) { + delete inflight[url]; + callback(err, result); + }); + } - var way = context.entity(parent); - var length = way.nodes.length; - var curr = way.nodes.indexOf(selectedIDs[0]); - var index = -1; + }; - if (curr > 0) { - index = curr - 1; - } else if (way.isClosed()) { - index = length - 2; - } + var apibase$2 = 'https://openstreetcam.org', + maxResults$1 = 1000, + tileZoom$1 = 14, + dispatch$2 = dispatch('loadedImages'), + imgZoom = d3_zoom() + .extent([[0, 0], [320, 240]]) + .translateExtent([[0, 0], [320, 240]]) + .scaleExtent([1, 15]) + .on('zoom', zoomPan), + _oscCache, + _oscSelectedImage; - if (index !== -1) { - context.enter( - modeSelect(context, [way.nodes[index]]).follow(true) - ); - } - } + function abortRequest$1(i) { + i.abort(); + } - function nextVertex() { - event.preventDefault(); - var parent = singularParent(); - if (!parent) return; - var way = context.entity(parent); - var length = way.nodes.length; - var curr = way.nodes.indexOf(selectedIDs[0]); - var index = -1; + function nearNullIsland$1(x, y, z) { + if (z >= 7) { + var center = Math.pow(2, z - 1), + width = Math.pow(2, z - 6), + min$$1 = center - (width / 2), + max$$1 = center + (width / 2) - 1; + return x >= min$$1 && x <= max$$1 && y >= min$$1 && y <= max$$1; + } + return false; + } - if (curr < length - 1) { - index = curr + 1; - } else if (way.isClosed()) { - index = 0; - } - if (index !== -1) { - context.enter( - modeSelect(context, [way.nodes[index]]).follow(true) - ); - } - } + function maxPageAtZoom$1(z) { + if (z < 15) return 2; + if (z === 15) return 5; + if (z === 16) return 10; + if (z === 17) return 20; + if (z === 18) return 40; + if (z > 18) return 80; + } + + + function getTiles$1(projection) { + var s = projection.scale() * 2 * Math.PI, + z = Math.max(Math.log(s) / Math.log(2) - 8, 0), + ts = 256 * Math.pow(2, z - tileZoom$1), + origin = [ + s / 2 - projection.translate()[0], + s / 2 - projection.translate()[1]]; + + return d3geoTile() + .scaleExtent([tileZoom$1, tileZoom$1]) + .scale(s) + .size(projection.clipExtent()[1]) + .translate(projection.translate())() + .map(function(tile) { + var x = tile[0] * ts - origin[0], + y = tile[1] * ts - origin[1]; + + return { + id: tile.toString(), + xyz: tile, + extent: geoExtent$$1( + projection.invert([x, y + ts]), + projection.invert([x + ts, y]) + ) + }; + }); + } - function nextParent() { - event.preventDefault(); - var parents = uniq(commonParents()); - if (!parents || parents.length < 2) return; + function loadTiles$1(which, url, projection) { + var s = projection.scale() * 2 * Math.PI, + currZoom = Math.floor(Math.max(Math.log(s) / Math.log(2) - 8, 0)); - var index = parents.indexOf(relatedParent); - if (index < 0 || index > parents.length - 2) { - relatedParent = parents[0]; - } else { - relatedParent = parents[index + 1]; - } + var tiles = getTiles$1(projection).filter(function(t) { + return !nearNullIsland$1(t.xyz[0], t.xyz[1], t.xyz[2]); + }); - var surface = context.surface(); - surface.selectAll('.related') - .classed('related', false); + filter(which.inflight, function(v, k) { + var wanted = find$1(tiles, function(tile) { return k === (tile.id + ',0'); }); + if (!wanted) delete which.inflight[k]; + return !wanted; + }).map(abortRequest$1); - if (relatedParent) { - surface.selectAll(utilEntitySelector([relatedParent])) - .classed('related', true); - } - } + tiles.forEach(function(tile) { + loadNextTilePage$1(which, currZoom, url, tile); + }); + } - if (!checkSelectedIDs()) return; + function loadNextTilePage$1(which, currZoom, url, tile) { + var cache = _oscCache[which]; + var bbox = tile.extent.bbox(); + var maxPages = maxPageAtZoom$1(currZoom); + var nextPage = cache.nextPage[tile.id] || 1; + var params = utilQsString({ + ipp: maxResults$1, + page: nextPage, + // client_id: clientId, + bbTopLeft: [bbox.maxY, bbox.minX].join(','), + bbBottomRight: [bbox.minY, bbox.maxX].join(',') + }, true); + + if (nextPage > maxPages) return; + + var id = tile.id + ',' + String(nextPage); + if (cache.loaded[id] || cache.inflight[id]) return; + + cache.inflight[id] = request(url) + .mimeType('application/json') + .header('Content-type', 'application/x-www-form-urlencoded') + .response(function(xhr) { return JSON.parse(xhr.responseText); }) + .post(params, function(err, data) { + cache.loaded[id] = true; + delete cache.inflight[id]; + if (err || !data.currentPageItems || !data.currentPageItems.length) return; + + function localeDateString(s) { + if (!s) return null; + var detected = utilDetect(); + var options = { day: 'numeric', month: 'short', year: 'numeric' }; + var d = new Date(s); + if (isNaN(d.getTime())) return null; + return d.toLocaleDateString(detected.locale, options); + } + + var features = data.currentPageItems.map(function(item) { + var loc = [+item.lng, +item.lat], + d; + + if (which === 'images') { + d = { + loc: loc, + key: item.id, + ca: +item.heading, + captured_at: localeDateString(item.shot_date || item.date_added), + captured_by: item.username, + imagePath: item.lth_name, + sequence_id: item.sequence_id, + sequence_index: +item.sequence_index + }; + + // cache sequence info + var seq = _oscCache.sequences[d.sequence_id]; + if (!seq) { + seq = { rotation: 0, images: [] }; + _oscCache.sequences[d.sequence_id] = seq; + } + seq.images[d.sequence_index] = d; + } + + return { + minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d + }; + }); + + cache.rtree.load(features); + + if (which === 'images') { + dispatch$2.call('loadedImages'); + } + + if (data.currentPageItems.length === maxResults$1) { // more pages to load + cache.nextPage[tile.id] = nextPage + 1; + loadNextTilePage$1(which, currZoom, url, tile); + } else { + cache.nextPage[tile.id] = Infinity; // no more pages to load + } + }); + } - var operations = without(values$1(Operations), operationDelete) - .map(function(o) { return o(selectedIDs, context); }) - .filter(function(o) { return o.available(); }); - // deprecation warning - Radial Menu to be removed in iD v3 - var isRadialMenu = context.storage('edit-menu-style') === 'radial'; - if (isRadialMenu) { - operations = operations.slice(0,7); - operations.unshift(operationDelete(selectedIDs, context)); - } else { - operations.push(operationDelete(selectedIDs, context)); - } + // partition viewport into `psize` x `psize` regions + function partitionViewport$1(psize, projection) { + var dimensions = projection.clipExtent()[1]; + psize = psize || 16; + var cols = range(0, dimensions[0], psize), + rows = range(0, dimensions[1], psize), + partitions = []; - operations.forEach(function(operation) { - if (operation.behavior) { - behaviors.push(operation.behavior); - } - }); + rows.forEach(function(y) { + cols.forEach(function(x) { + var min$$1 = [x, y + psize], + max$$1 = [x + psize, y]; + partitions.push( + geoExtent$$1(projection.invert(min$$1), projection.invert(max$$1))); + }); + }); - behaviors.forEach(function(behavior) { - context.install(behavior); - }); + return partitions; + } - keybinding - .on(['[', 'pgup'], previousVertex) - .on([']', 'pgdown'], nextVertex) - .on(['{', uiCmd('⌘['), 'home'], firstVertex) - .on(['}', uiCmd('⌘]'), 'end'], lastVertex) - .on(['\\', 'pause'], nextParent) - .on('⎋', esc, true) - .on('space', toggleMenu); - d3_select(document) - .call(keybinding); + // no more than `limit` results per partition. + function searchLimited$1(psize, limit, projection, rtree) { + limit = limit || 3; + var partitions = partitionViewport$1(psize, projection); + var results; - // deprecation warning - Radial Menu to be removed in iD v3 - editMenu = isRadialMenu - ? uiRadialMenu(context, operations) - : uiEditMenu(context, operations); + results = flatten(map$3(partitions, function(extent$$1) { + return rtree.search(extent$$1.bbox()) + .slice(0, limit) + .map(function(d) { return d.data; }); + })); + return results; + } - context.ui().sidebar - .select(singular() ? singular().id : null, newFeature); - context.history() - .on('undone.select', update) - .on('redone.select', update); + function zoomPan() { + var t = event.transform; + select('#photoviewer .osc-image-wrap') + .call(utilSetTransform, t.x, t.y, t.k); + } - context.map() - .on('move.select', closeMenu) - .on('drawn.select', selectElements); - context.surface() - .on('dblclick.select', dblclick); + var serviceOpenstreetcam = { + init: function() { + if (!_oscCache) { + this.reset(); + } - selectElements(); + this.event = utilRebind(this, dispatch$2, 'on'); + }, - if (selectedIDs.length > 1) { - var entities = uiSelectionList(context, selectedIDs); - context.ui().sidebar.show(entities); - } + reset: function() { + var cache = _oscCache; - if (follow) { - var extent = geoExtent$$1(); - var graph = context.graph(); - selectedIDs.forEach(function(id) { - var entity = context.entity(id); - extent._extend(entity.extent(graph)); - }); + if (cache) { + if (cache.images && cache.images.inflight) { + forEach(cache.images.inflight, abortRequest$1); + } + } - var loc = extent.center(); - context.map().centerEase(loc); - } else if (singular() && singular().type === 'way') { - context.map().pan([0,0]); // full redraw, to adjust z-sorting #2914 - } + _oscCache = { + images: { inflight: {}, loaded: {}, nextPage: {}, rtree: rbush_1() }, + sequences: {} + }; - timeout = window.setTimeout(function() { - positionMenu(); - if (!suppressMenu) { - showMenu(); - } - }, 270); /* after any centerEase completes */ + _oscSelectedImage = null; + }, - }; + + images: function(projection) { + var psize = 16, limit = 3; + return searchLimited$1(psize, limit, projection, _oscCache.images.rtree); + }, - mode.exit = function() { - if (timeout) window.clearTimeout(timeout); - if (inspector) wrap.call(inspector.close); + sequences: function(projection) { + var viewport = projection.clipExtent(); + var min$$1 = [viewport[0][0], viewport[1][1]]; + var max$$1 = [viewport[1][0], viewport[0][1]]; + var bbox = geoExtent$$1(projection.invert(min$$1), projection.invert(max$$1)).bbox(); + var sequenceKeys = {}; + + // all sequences for images in viewport + _oscCache.images.rtree.search(bbox) + .forEach(function(d) { sequenceKeys[d.data.sequence_id] = true; }); + + // make linestrings from those sequences + var lineStrings = []; + Object.keys(sequenceKeys) + .forEach(function(sequenceKey) { + var seq = _oscCache.sequences[sequenceKey]; + var images = seq && seq.images; + if (images) { + lineStrings.push({ + type: 'LineString', + coordinates: images.map(function (d) { return d.loc; }).filter(Boolean), + properties: { key: sequenceKey } + }); + } + }); + return lineStrings; + }, - behaviors.forEach(function(behavior) { - context.uninstall(behavior); - }); - keybinding.off(); - closeMenu(); - editMenu = undefined; + loadImages: function(projection) { + var url = apibase$2 + '/1.0/list/nearby-photos/'; + loadTiles$1('images', url, projection); + }, - context.history() - .on('undone.select', null) - .on('redone.select', null); - var surface = context.surface(); + loadViewer: function(context) { + var that = this; + + // add osc-wrapper + var wrap = select('#photoviewer').selectAll('.osc-wrapper') + .data([0]); + + var wrapEnter = wrap.enter() + .append('div') + .attr('class', 'photo-wrapper osc-wrapper') + .classed('hide', true) + .call(imgZoom) + .on('dblclick.zoom', null); + + wrapEnter + .append('div') + .attr('class', 'photo-attribution fillD'); + + var controlsEnter = wrapEnter + .append('div') + .attr('class', 'osc-controls-wrap') + .append('div') + .attr('class', 'osc-controls'); + + controlsEnter + .append('button') + .on('click.back', step(-1)) + .text('◄'); + + controlsEnter + .append('button') + .on('click.rotate-ccw', rotate(-90)) + .text('⤿'); + + controlsEnter + .append('button') + .on('click.rotate-cw', rotate(90)) + .text('⤾'); + + controlsEnter + .append('button') + .on('click.forward', step(1)) + .text('►'); + + wrapEnter + .append('div') + .attr('class', 'osc-image-wrap'); + + + function rotate(deg) { + return function() { + if (!_oscSelectedImage) return; + var sequenceKey = _oscSelectedImage.sequence_id; + var sequence = _oscCache.sequences[sequenceKey]; + if (!sequence) return; + + var r = sequence.rotation || 0; + r += deg; + + if (r > 180) r -= 360; + if (r < -180) r += 360; + sequence.rotation = r; + + var wrap = select('#photoviewer .osc-wrapper'); + + wrap + .transition() + .duration(100) + .call(imgZoom.transform, identity$7); + + wrap.selectAll('.osc-image') + .transition() + .duration(100) + .style('transform', 'rotate(' + r + 'deg)'); + }; + } - surface - .on('dblclick.select', null); + function step(stepBy) { + return function() { + if (!_oscSelectedImage) return; + var sequenceKey = _oscSelectedImage.sequence_id; + var sequence = _oscCache.sequences[sequenceKey]; + if (!sequence) return; - surface - .selectAll('.selected') - .classed('selected', false); + var nextIndex = _oscSelectedImage.sequence_index + stepBy; + var nextImage = sequence.images[nextIndex]; + if (!nextImage) return; - surface - .selectAll('.related') - .classed('related', false); + context.map().centerEase(nextImage.loc); - context.map().on('drawn.select', null); - context.ui().sidebar.hide(); - }; + that + .selectImage(nextImage) + .updateViewer(nextImage); + }; + } + }, - return mode; -} + showViewer: function() { + var viewer = select('#photoviewer') + .classed('hide', false); -function behaviorAddWay(context) { - var dispatch$$1 = dispatch('start', 'startFromWay', 'startFromNode'), - draw = behaviorDraw(context); + var isHidden = viewer.selectAll('.photo-wrapper.osc-wrapper.hide').size(); - var addWay = function(surface) { - draw.on('click', function() { dispatch$$1.apply('start', this, arguments); }) - .on('clickWay', function() { dispatch$$1.apply('startFromWay', this, arguments); }) - .on('clickNode', function() { dispatch$$1.apply('startFromNode', this, arguments); }) - .on('cancel', addWay.cancel) - .on('finish', addWay.cancel); + if (isHidden) { + viewer + .selectAll('.photo-wrapper:not(.osc-wrapper)') + .classed('hide', true); - context.map() - .dblclickEnable(false); + viewer + .selectAll('.photo-wrapper.osc-wrapper') + .classed('hide', false); + } - surface.call(draw); - }; + return this; + }, - addWay.off = function(surface) { - surface.call(draw.off); - }; + hideViewer: function() { + _oscSelectedImage = null; + var viewer = select('#photoviewer'); + if (!viewer.empty()) viewer.datum(null); - addWay.cancel = function() { - window.setTimeout(function() { - context.map().dblclickEnable(true); - }, 1000); + viewer + .classed('hide', true) + .selectAll('.photo-wrapper') + .classed('hide', true); - context.enter(modeBrowse(context)); - }; + d3_selectAll('.viewfield-group, .sequence, .icon-sign') + .classed('selected', false); + return this.setStyles(null, true); + }, - addWay.tail = function(text) { - draw.tail(text); - return addWay; - }; + updateViewer: function(d) { + var wrap = select('#photoviewer .osc-wrapper'); + var imageWrap = wrap.selectAll('.osc-image-wrap'); + var attribution = wrap.selectAll('.photo-attribution').html(''); + + wrap + .transition() + .duration(100) + .call(imgZoom.transform, identity$7); + + imageWrap + .selectAll('.osc-image') + .remove(); + + if (d) { + var sequence = _oscCache.sequences[d.sequence_id]; + var r = (sequence && sequence.rotation) || 0; + + imageWrap + .append('img') + .attr('class', 'osc-image') + .attr('src', apibase$2 + '/' + d.imagePath) + .style('transform', 'rotate(' + r + 'deg)'); + + if (d.captured_by) { + attribution + .append('a') + .attr('class', 'captured_by') + .attr('target', '_blank') + .attr('href', 'https://openstreetcam.org/user/' + encodeURIComponent(d.captured_by)) + .text('@' + d.captured_by); + + attribution + .append('span') + .text('|'); + } + + if (d.captured_at) { + attribution + .append('span') + .attr('class', 'captured_at') + .text(d.captured_at); + + attribution + .append('span') + .text('|'); + } + + attribution + .append('a') + .attr('class', 'image_link') + .attr('target', '_blank') + .attr('href', 'https://openstreetcam.org/details/' + d.sequence_id + '/' + d.sequence_index) + .text('openstreetcam.org'); + } + return this; + }, - return utilRebind(addWay, dispatch$$1, 'on'); -} -function behaviorBreathe() { - var duration = 800, - steps = 4, - selector$$1 = '.selected.shadow, .selected .shadow', - selected = d3_select(null), - classed = '', - params = {}, - done = false, - timer$$1; + selectImage: function(d) { + _oscSelectedImage = d; + var viewer = select('#photoviewer'); + if (!viewer.empty()) viewer.datum(d); + this.setStyles(null, true); - function ratchetyInterpolator(a, b, steps, units) { - a = parseFloat(a); - b = parseFloat(b); - var sample = quantize() - .domain([0, 1]) - .range(d3_quantize(d3_interpolateNumber(a, b), steps)); + d3_selectAll('.icon-sign') + .classed('selected', false); - return function(t) { - return String(sample(t)) + (units || ''); - }; - } + return this; + }, - function reset(selection$$1) { - selection$$1 - .style('stroke-opacity', null) - .style('stroke-width', null) - .style('fill-opacity', null) - .style('r', null); - } - - - function setAnimationParams(transition, fromTo) { - var toFrom = (fromTo === 'from' ? 'to' : 'from'); - - transition - .styleTween('stroke-opacity', function(d) { - return ratchetyInterpolator( - params[d.id][toFrom].opacity, - params[d.id][fromTo].opacity, - steps - ); - }) - .styleTween('stroke-width', function(d) { - return ratchetyInterpolator( - params[d.id][toFrom].width, - params[d.id][fromTo].width, - steps, - 'px' - ); - }) - .styleTween('fill-opacity', function(d) { - return ratchetyInterpolator( - params[d.id][toFrom].opacity, - params[d.id][fromTo].opacity, - steps - ); - }) - .styleTween('r', function(d) { - return ratchetyInterpolator( - params[d.id][toFrom].width, - params[d.id][fromTo].width, - steps, - 'px' - ); - }); - } + getSelectedImage: function() { + return _oscSelectedImage; + }, - function calcAnimationParams(selection$$1) { - selection$$1 - .call(reset) - .each(function(d) { - var s = d3_select(this), - tag = s.node().tagName, - p = {'from': {}, 'to': {}}, - opacity, width; - - // determine base opacity and width - if (tag === 'circle') { - opacity = parseFloat(s.style('fill-opacity') || 0.5); - width = parseFloat(s.style('r') || 15.5); - } else { - opacity = parseFloat(s.style('stroke-opacity') || 0.7); - width = parseFloat(s.style('stroke-width') || 10); - } - - // calculate from/to interpolation params.. - p.tag = tag; - p.from.opacity = opacity * 0.6; - p.to.opacity = opacity * 1.25; - p.from.width = width * 0.7; - p.to.width = width * (tag === 'circle' ? 1.5 : 1); - params[d.id] = p; - }); - } + getSequenceKeyForImage: function(d) { + return d && d.sequence_id; + }, - function run(surface, fromTo) { - var toFrom = (fromTo === 'from' ? 'to' : 'from'), - currSelected = surface.selectAll(selector$$1), - currClassed = surface.attr('class'); + setStyles: function(hovered, reset) { + if (reset) { // reset all layers + d3_selectAll('.viewfield-group') + .classed('highlighted', false) + .classed('hovered', false) + .classed('selected', false); - if (done || currSelected.empty()) { - selected.call(reset); - return; - } + d3_selectAll('.sequence') + .classed('highlighted', false) + .classed('selected', false); + } - if (!isEqual(currSelected.data(), selected.data()) || currClassed !== classed) { - selected.call(reset); - classed = currClassed; - selected = currSelected.call(calcAnimationParams); - } + var hoveredImageKey = hovered && hovered.key; + var hoveredSequenceKey = this.getSequenceKeyForImage(hovered); + var hoveredSequence = hoveredSequenceKey && _oscCache.sequences[hoveredSequenceKey]; + var hoveredImageKeys = (hoveredSequence && hoveredSequence.images.map(function (d) { return d.key; })) || []; - selected - .transition() - .duration(duration) - .call(setAnimationParams, fromTo) - .on('end', function() { - surface.call(run, toFrom); - }); - } + var viewer = select('#photoviewer'); + var selected = viewer.empty() ? undefined : viewer.datum(); + var selectedImageKey = selected && selected.key; + var selectedSequenceKey = this.getSequenceKeyForImage(selected); + var selectedSequence = selectedSequenceKey && _oscCache.sequences[selectedSequenceKey]; + var selectedImageKeys = (selectedSequence && selectedSequence.images.map(function (d) { return d.key; })) || []; + // highlight sibling viewfields on either the selected or the hovered sequences + var highlightedImageKeys = union(hoveredImageKeys, selectedImageKeys); - var breathe = function(surface) { - done = false; - timer$$1 = timer(function() { - // wait for elements to actually become selected - if (surface.selectAll(selector$$1).empty()) { - return false; - } + d3_selectAll('.layer-openstreetcam-images .viewfield-group') + .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; }) + .classed('hovered', function(d) { return d.key === hoveredImageKey; }) + .classed('selected', function(d) { return d.key === selectedImageKey; }); - surface.call(run, 'from'); - timer$$1.stop(); - return true; - }, 20); - }; + d3_selectAll('.layer-openstreetcam-images .sequence') + .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; }) + .classed('selected', function(d) { return d.properties.key === selectedSequenceKey; }); + return this; + }, - breathe.off = function() { - done = true; - if (timer$$1) { - timer$$1.stop(); - } - selected - .interrupt() - .call(reset); - }; + cache: function() { + return _oscCache; + } - return breathe; -} + }; -function behaviorCopy(context) { - var keybinding = d3keybinding('copy'); + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeMax$4 = Math.max; + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax$4(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); - function groupEntities(ids, graph) { - var entities = ids.map(function (id) { return graph.entity(id); }); - return assignIn({relation: [], way: [], node: []}, - groupBy(entities, function(entity) { return entity.type; })); + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); } + return result; + } + var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - function getDescendants(id, graph, descendants) { - var entity = graph.entity(id), - i, children; + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } - descendants = descendants || {}; + var hashes = createCommonjsModule(function (module, exports) { + /** + * jshashes - https://github.com/h2non/jshashes + * Released under the "New BSD" license + * + * Algorithms specification: + * + * MD5 - http://www.ietf.org/rfc/rfc1321.txt + * RIPEMD-160 - http://homes.esat.kuleuven.be/~bosselae/ripemd160.html + * SHA1 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf + * SHA256 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf + * SHA512 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf + * HMAC - http://www.ietf.org/rfc/rfc2104.txt + */ + (function() { + var Hashes; - if (entity.type === 'relation') { - children = map$3(entity.members, 'id'); - } else if (entity.type === 'way') { - children = entity.nodes; - } else { - children = []; + function utf8Encode(str) { + var x, y, output = '', + i = -1, + l; + + if (str && str.length) { + l = str.length; + while ((i += 1) < l) { + /* Decode utf-16 surrogate pairs */ + x = str.charCodeAt(i); + y = i + 1 < l ? str.charCodeAt(i + 1) : 0; + if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) { + x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF); + i += 1; + } + /* Encode output as utf-8 */ + if (x <= 0x7F) { + output += String.fromCharCode(x); + } else if (x <= 0x7FF) { + output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F), + 0x80 | (x & 0x3F)); + } else if (x <= 0xFFFF) { + output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), + 0x80 | ((x >>> 6) & 0x3F), + 0x80 | (x & 0x3F)); + } else if (x <= 0x1FFFFF) { + output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), + 0x80 | ((x >>> 12) & 0x3F), + 0x80 | ((x >>> 6) & 0x3F), + 0x80 | (x & 0x3F)); + } } + } + return output; + } - for (i = 0; i < children.length; i++) { - if (!descendants[children[i]]) { - descendants[children[i]] = true; - descendants = getDescendants(children[i], graph, descendants); - } - } + function utf8Decode(str) { + var i, ac, c1, c2, c3, arr = [], + l; + i = ac = c1 = c2 = c3 = 0; - return descendants; + if (str && str.length) { + l = str.length; + str += ''; + + while (i < l) { + c1 = str.charCodeAt(i); + ac += 1; + if (c1 < 128) { + arr[ac] = String.fromCharCode(c1); + i += 1; + } else if (c1 > 191 && c1 < 224) { + c2 = str.charCodeAt(i + 1); + arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63)); + i += 2; + } else { + c2 = str.charCodeAt(i + 1); + c3 = str.charCodeAt(i + 2); + arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + } + } + return arr.join(''); } + /** + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ - function doCopy() { - if (!getSelectionText()) event.preventDefault(); - - var graph = context.graph(), - selected = groupEntities(context.selectedIDs(), graph), - canCopy = [], - skip = {}, - i, entity; + function safe_add(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF), + msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); + } - for (i = 0; i < selected.relation.length; i++) { - entity = selected.relation[i]; - if (!skip[entity.id] && entity.isComplete(graph)) { - canCopy.push(entity.id); - skip = getDescendants(entity.id, graph, skip); - } - } - for (i = 0; i < selected.way.length; i++) { - entity = selected.way[i]; - if (!skip[entity.id]) { - canCopy.push(entity.id); - skip = getDescendants(entity.id, graph, skip); - } - } - for (i = 0; i < selected.node.length; i++) { - entity = selected.node[i]; - if (!skip[entity.id]) { - canCopy.push(entity.id); - } - } + /** + * Bitwise rotate a 32-bit number to the left. + */ - context.copyIDs(canCopy); + function bit_rol(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)); } + /** + * Convert a raw string to a hex string + */ - function copy() { - keybinding.on(uiCmd('⌘C'), doCopy); - d3_select(document).call(keybinding); - return copy; + function rstr2hex(input, hexcase) { + var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef', + output = '', + x, i = 0, + l = input.length; + for (; i < l; i += 1) { + x = input.charCodeAt(i); + output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F); + } + return output; } - function getSelectionText() { - return window.getSelection().toString(); - } + /** + * Convert an array of big-endian words to a string + */ - copy.off = function() { - d3_select(document).call(keybinding.off); - }; + function binb2rstr(input) { + var i, l = input.length * 32, + output = ''; + for (i = 0; i < l; i += 8) { + output += String.fromCharCode((input[i >> 5] >>> (24 - i % 32)) & 0xFF); + } + return output; + } + /** + * Convert an array of little-endian words to a string + */ - return copy; -} - -/* - `behaviorDrag` is like `d3_behavior.drag`, with the following differences: - - * The `origin` function is expected to return an [x, y] tuple rather than an - {x, y} object. - * The events are `start`, `move`, and `end`. - (https://github.com/mbostock/d3/issues/563) - * The `start` event is not dispatched until the first cursor movement occurs. - (https://github.com/mbostock/d3/pull/368) - * The `move` event has a `point` and `delta` [x, y] tuple properties rather - than `x`, `y`, `dx`, and `dy` properties. - * The `end` event is not dispatched if no movement occurs. - * An `off` function is available that unbinds the drag's internal event handlers. - */ - -function behaviorDrag() { - var dispatch$$1 = dispatch('start', 'move', 'end'); - var _origin = null; - var _selector = ''; - var _event; - var _target; - var _surface; - - - var d3_event_userSelectProperty = utilPrefixCSSProperty('UserSelect'); - var d3_event_userSelectSuppress = function() { - var selection$$1 = selection(); - var select$$1 = selection$$1.style(d3_event_userSelectProperty); - selection$$1.style(d3_event_userSelectProperty, 'none'); - return function() { - selection$$1.style(d3_event_userSelectProperty, select$$1); - }; - }; + function binl2rstr(input) { + var i, l = input.length * 32, + output = ''; + for (i = 0; i < l; i += 8) { + output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF); + } + return output; + } + /** + * Convert a raw string to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ - function d3_eventCancel() { - event.stopPropagation(); - event.preventDefault(); + function rstr2binl(input) { + var i, l = input.length * 8, + output = Array(input.length >> 2), + lo = output.length; + for (i = 0; i < lo; i += 1) { + output[i] = 0; + } + for (i = 0; i < l; i += 8) { + output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32); + } + return output; } + /** + * Convert a raw string to an array of big-endian words + * Characters >255 have their high-byte silently ignored. + */ - function eventOf(thiz, argumentz) { - return function(e1) { - e1.target = drag; - customEvent(e1, dispatch$$1.apply, dispatch$$1, [e1.type, thiz, argumentz]); - }; + function rstr2binb(input) { + var i, l = input.length * 8, + output = Array(input.length >> 2), + lo = output.length; + for (i = 0; i < lo; i += 1) { + output[i] = 0; + } + for (i = 0; i < l; i += 8) { + output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32); + } + return output; } + /** + * Convert a raw string to an arbitrary string encoding + */ - function dragstart() { - _target = this; - _event = eventOf(_target, arguments); - - var eventTarget = event.target; - var touchId = event.touches ? event.changedTouches[0].identifier : null; - var offset; - var startOrigin = point$$1(); - var started = false; - var selectEnable = d3_event_userSelectSuppress(touchId !== null ? 'drag-' + touchId : 'drag'); + function rstr2any(input, encoding) { + var divisor = encoding.length, + remainders = Array(), + i, q, x, ld, quotient, dividend, output, full_length; - d3_select(window) - .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove) - .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true); + /* Convert to an array of 16-bit big-endian values, forming the dividend */ + dividend = Array(Math.ceil(input.length / 2)); + ld = dividend.length; + for (i = 0; i < ld; i += 1) { + dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1); + } - if (_origin) { - offset = _origin.apply(_target, arguments); - offset = [offset[0] - startOrigin[0], offset[1] - startOrigin[1]]; - } else { - offset = [0, 0]; + /** + * Repeatedly perform a long division. The binary array forms the dividend, + * the length of the encoding is the divisor. Once computed, the quotient + * forms the dividend for the next step. We stop when the dividend is zerHashes. + * All remainders are stored for later use. + */ + while (dividend.length > 0) { + quotient = Array(); + x = 0; + for (i = 0; i < dividend.length; i += 1) { + x = (x << 16) + dividend[i]; + q = Math.floor(x / divisor); + x -= q * divisor; + if (quotient.length > 0 || q > 0) { + quotient[quotient.length] = q; + } } + remainders[remainders.length] = x; + dividend = quotient; + } - if (touchId === null) { - event.stopPropagation(); - } + /* Convert the remainders to the output string */ + output = ''; + for (i = remainders.length - 1; i >= 0; i--) { + output += encoding.charAt(remainders[i]); + } + + /* Append leading zero equivalents */ + full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2))); + for (i = output.length; i < full_length; i += 1) { + output = encoding[0] + output; + } + return output; + } + /** + * Convert a raw string to a base-64 string + */ - function point$$1() { - var p = _surface || _target.parentNode; - return touchId !== null ? d3_touches(p).filter(function(p) { - return p.identifier === touchId; - })[0] : d3_mouse(p); + function rstr2b64(input, b64pad) { + var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', + output = '', + len = input.length, + i, j, triplet; + b64pad = b64pad || '='; + for (i = 0; i < len; i += 3) { + triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0); + for (j = 0; j < 4; j += 1) { + if (i * 8 + j * 6 > input.length * 8) { + output += b64pad; + } else { + output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F); + } } + } + return output; + } + + Hashes = { + /** + * @property {String} version + * @readonly + */ + VERSION: '1.0.6', + /** + * @member Hashes + * @class Base64 + * @constructor + */ + Base64: function() { + // private properties + var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', + pad = '=', // default pad according with the RFC standard + utf8 = true; // by default enable UTF-8 support encoding + + // public method for encoding + this.encode = function(input) { + var i, j, triplet, + output = '', + len = input.length; + + pad = pad || '='; + input = (utf8) ? utf8Encode(input) : input; + + for (i = 0; i < len; i += 3) { + triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0); + for (j = 0; j < 4; j += 1) { + if (i * 8 + j * 6 > len * 8) { + output += pad; + } else { + output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F); + } + } + } + return output; + }; + // public method for decoding + this.decode = function(input) { + // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var i, o1, o2, o3, h1, h2, h3, h4, bits, ac, + dec = '', + arr = []; + if (!input) { + return input; + } + + i = ac = 0; + input = input.replace(new RegExp('\\' + pad, 'gi'), ''); // use '=' + //input += ''; - function dragmove() { - var p = point$$1(); - var dx = p[0] - startOrigin[0]; - var dy = p[1] - startOrigin[1]; + do { // unpack four hexets into three octets using index points in b64 + h1 = tab.indexOf(input.charAt(i += 1)); + h2 = tab.indexOf(input.charAt(i += 1)); + h3 = tab.indexOf(input.charAt(i += 1)); + h4 = tab.indexOf(input.charAt(i += 1)); - if (dx === 0 && dy === 0) - return; + bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; - startOrigin = p; - d3_eventCancel(); + o1 = bits >> 16 & 0xff; + o2 = bits >> 8 & 0xff; + o3 = bits & 0xff; + ac += 1; - if (!started) { - started = true; - _event({ type: 'start' }); + if (h3 === 64) { + arr[ac] = String.fromCharCode(o1); + } else if (h4 === 64) { + arr[ac] = String.fromCharCode(o1, o2); } else { - _event({ - type: 'move', - point: [p[0] + offset[0], p[1] + offset[1]], - delta: [dx, dy] - }); + arr[ac] = String.fromCharCode(o1, o2, o3); } - } + } while (i < input.length); + dec = arr.join(''); + dec = (utf8) ? utf8Decode(dec) : dec; - function dragend() { - if (started) { - _event({ type: 'end' }); + return dec; + }; - d3_eventCancel(); - if (event.target === eventTarget) { - d3_select(window) - .on('click.drag', click, true); - } - } + // set custom pad string + this.setPad = function(str) { + pad = str || pad; + return this; + }; + // set custom tab string characters + this.setTab = function(str) { + tab = str || tab; + return this; + }; + this.setUTF8 = function(bool) { + if (typeof bool === 'boolean') { + utf8 = bool; + } + return this; + }; + }, - d3_select(window) - .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null) - .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null); + /** + * CRC-32 calculation + * @member Hashes + * @method CRC32 + * @static + * @param {String} str Input String + * @return {String} + */ + CRC32: function(str) { + var crc = 0, + x = 0, + y = 0, + table, i, iTop; + str = utf8Encode(str); + + table = [ + '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ', + '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ', + '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ', + '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ', + 'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ', + '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ', + 'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ', + '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ', + 'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ', + '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ', + 'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ', + '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ', + 'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ', + '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ', + '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ', + '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ', + '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ', + 'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ', + '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ', + 'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ', + '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ', + 'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ', + '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ', + 'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ', + '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ', + 'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D' + ].join(''); + + crc = crc ^ (-1); + for (i = 0, iTop = str.length; i < iTop; i += 1) { + y = (crc ^ str.charCodeAt(i)) & 0xFF; + x = '0x' + table.substr(y * 9, 8); + crc = (crc >>> 8) ^ x; + } + // always return a positive number (that's what >>> 0 does) + return (crc ^ (-1)) >>> 0; + }, + /** + * @member Hashes + * @class MD5 + * @constructor + * @param {Object} [config] + * + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * See for more infHashes. + */ + MD5: function(options) { + /** + * Private config properties. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase} + */ + var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase + b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance + utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding + + // privileged (public) methods + this.hex = function(s) { + return rstr2hex(rstr(s, utf8), hexcase); + }; + this.b64 = function(s) { + return rstr2b64(rstr(s), b64pad); + }; + this.any = function(s, e) { + return rstr2any(rstr(s, utf8), e); + }; + this.raw = function(s) { + return rstr(s, utf8); + }; + this.hex_hmac = function(k, d) { + return rstr2hex(rstr_hmac(k, d), hexcase); + }; + this.b64_hmac = function(k, d) { + return rstr2b64(rstr_hmac(k, d), b64pad); + }; + this.any_hmac = function(k, d, e) { + return rstr2any(rstr_hmac(k, d), e); + }; + /** + * Perform a simple self-test to see if the VM is working + * @return {String} Hexadecimal hash sample + */ + this.vm_test = function() { + return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; + }; + /** + * Enable/disable uppercase hexadecimal returned string + * @param {Boolean} + * @return {Object} this + */ + this.setUpperCase = function(a) { + if (typeof a === 'boolean') { + hexcase = a; + } + return this; + }; + /** + * Defines a base64 pad string + * @param {String} Pad + * @return {Object} this + */ + this.setPad = function(a) { + b64pad = a || b64pad; + return this; + }; + /** + * Defines a base64 pad string + * @param {Boolean} + * @return {Object} [this] + */ + this.setUTF8 = function(a) { + if (typeof a === 'boolean') { + utf8 = a; + } + return this; + }; - selectEnable(); - } + // private methods + /** + * Calculate the MD5 of a raw string + */ - function click() { - d3_eventCancel(); - d3_select(window) - .on('click.drag', null); + function rstr(s) { + s = (utf8) ? utf8Encode(s) : s; + return binl2rstr(binl(rstr2binl(s), s.length * 8)); } - } + /** + * Calculate the HMAC-MD5, of a key and some data (raw strings) + */ - function drag(selection$$1) { - var matchesSelector = utilPrefixDOMProperty('matchesSelector'); - var delegate = dragstart; - - if (_selector) { - delegate = function() { - var root = this; - var target = event.target; - for (; target && target !== root; target = target.parentNode) { - var datum = target.__data__; - var entity = datum && datum.properties && datum.properties.entity; - if (entity && target[matchesSelector](_selector)) { - return dragstart.call(target, entity); - } - } - }; - } - - selection$$1 - .on('mousedown.drag' + _selector, delegate) - .on('touchstart.drag' + _selector, delegate); - } + function rstr_hmac(key, data) { + var bkey, ipad, opad, hash, i; + key = (utf8) ? utf8Encode(key) : key; + data = (utf8) ? utf8Encode(data) : data; + bkey = rstr2binl(key); + if (bkey.length > 16) { + bkey = binl(bkey, key.length * 8); + } - drag.off = function(selection$$1) { - selection$$1 - .on('mousedown.drag' + _selector, null) - .on('touchstart.drag' + _selector, null); - }; + ipad = Array(16), opad = Array(16); + for (i = 0; i < 16; i += 1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } + hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8); + return binl2rstr(binl(opad.concat(hash), 512 + 128)); + } + + /** + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + + function binl(x, len) { + var i, olda, oldb, oldc, oldd, + a = 1732584193, + b = -271733879, + c = -1732584194, + d = 271733878; + + /* append padding */ + x[len >> 5] |= 0x80 << ((len) % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + + a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); + d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); + + a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); + + a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); + + a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844); + d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); + + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + } + return Array(a, b, c, d); + } + /** + * These functions implement the four basic operations the algorithm uses. + */ - drag.selector = function(_) { - if (!arguments.length) return _selector; - _selector = _; - return drag; - }; + function md5_cmn(q, a, b, x, s, t) { + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); + } + function md5_ff(a, b, c, d, x, s, t) { + return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); + } - drag.origin = function (_) { - if (!arguments.length) return _origin; - _origin = _; - return drag; - }; + function md5_gg(a, b, c, d, x, s, t) { + return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); + } + function md5_hh(a, b, c, d, x, s, t) { + return md5_cmn(b ^ c ^ d, a, b, x, s, t); + } - drag.cancel = function() { - d3_select(window) - .on('mousemove.drag', null) - .on('mouseup.drag', null); - return drag; - }; + function md5_ii(a, b, c, d, x, s, t) { + return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); + } + }, + /** + * @member Hashes + * @class Hashes.SHA1 + * @param {Object} [config] + * @constructor + * + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1 + * Version 2.2 Copyright Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * See http://pajhome.org.uk/crypt/md5 for details. + */ + SHA1: function(options) { + /** + * Private config properties. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase} + */ + var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase + b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance + utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding + + // public methods + this.hex = function(s) { + return rstr2hex(rstr(s, utf8), hexcase); + }; + this.b64 = function(s) { + return rstr2b64(rstr(s, utf8), b64pad); + }; + this.any = function(s, e) { + return rstr2any(rstr(s, utf8), e); + }; + this.raw = function(s) { + return rstr(s, utf8); + }; + this.hex_hmac = function(k, d) { + return rstr2hex(rstr_hmac(k, d)); + }; + this.b64_hmac = function(k, d) { + return rstr2b64(rstr_hmac(k, d), b64pad); + }; + this.any_hmac = function(k, d, e) { + return rstr2any(rstr_hmac(k, d), e); + }; + /** + * Perform a simple self-test to see if the VM is working + * @return {String} Hexadecimal hash sample + * @public + */ + this.vm_test = function() { + return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; + }; + /** + * @description Enable/disable uppercase hexadecimal returned string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUpperCase = function(a) { + if (typeof a === 'boolean') { + hexcase = a; + } + return this; + }; + /** + * @description Defines a base64 pad string + * @param {string} Pad + * @return {Object} this + * @public + */ + this.setPad = function(a) { + b64pad = a || b64pad; + return this; + }; + /** + * @description Defines a base64 pad string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUTF8 = function(a) { + if (typeof a === 'boolean') { + utf8 = a; + } + return this; + }; + // private methods - drag.target = function() { - if (!arguments.length) return _target; - _target = arguments[0]; - _event = eventOf(_target, Array.prototype.slice.call(arguments, 1)); - return drag; - }; + /** + * Calculate the SHA-512 of a raw string + */ + function rstr(s) { + s = (utf8) ? utf8Encode(s) : s; + return binb2rstr(binb(rstr2binb(s), s.length * 8)); + } - drag.surface = function() { - if (!arguments.length) return _surface; - _surface = arguments[0]; - return drag; - }; + /** + * Calculate the HMAC-SHA1 of a key and some data (raw strings) + */ + function rstr_hmac(key, data) { + var bkey, ipad, opad, i, hash; + key = (utf8) ? utf8Encode(key) : key; + data = (utf8) ? utf8Encode(data) : data; + bkey = rstr2binb(key); - return utilRebind(drag, dispatch$$1, 'on'); -} + if (bkey.length > 16) { + bkey = binb(bkey, key.length * 8); + } + ipad = Array(16), opad = Array(16); + for (i = 0; i < 16; i += 1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } + hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8); + return binb2rstr(binb(opad.concat(hash), 512 + 160)); + } + + /** + * Calculate the SHA-1 of an array of big-endian words, and a bit length + */ + + function binb(x, len) { + var i, j, t, olda, oldb, oldc, oldd, olde, + w = Array(80), + a = 1732584193, + b = -271733879, + c = -1732584194, + d = 271733878, + e = -1009589776; + + /* append padding */ + x[len >> 5] |= 0x80 << (24 - len % 32); + x[((len + 64 >> 9) << 4) + 15] = len; + + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + olde = e; + + for (j = 0; j < 80; j += 1) { + if (j < 16) { + w[j] = x[i + j]; + } else { + w[j] = bit_rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1); + } + t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)), + safe_add(safe_add(e, w[j]), sha1_kt(j))); + e = d; + d = c; + c = bit_rol(b, 30); + b = a; + a = t; + } + + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + e = safe_add(e, olde); + } + return Array(a, b, c, d, e); + } -function behaviorDrawWay(context, wayId, index, mode, startGraph) { - var origWay = context.entity(wayId); - var annotation = t((origWay.isDegenerate() ? - 'operations.start.annotation.' : - 'operations.continue.annotation.') + context.geometry(wayId) - ); - var behavior = behaviorDraw(context); - var _tempEdits = 0; + /** + * Perform the appropriate triplet combination function for the current + * iteration + */ - var end = osmNode({ loc: context.map().mouseCoordinates() }); + function sha1_ft(t, b, c, d) { + if (t < 20) { + return (b & c) | ((~b) & d); + } + if (t < 40) { + return b ^ c ^ d; + } + if (t < 60) { + return (b & c) | (b & d) | (c & d); + } + return b ^ c ^ d; + } - // Push an annotated state for undo to return back to. - // We must make sure to remove this edit later. - context.perform(actionNoop(), annotation); - _tempEdits++; + /** + * Determine the appropriate additive constant for the current iteration + */ - // Add the drawing node to the graph. - // We must make sure to remove this edit later. - context.perform(_actionAddDrawNode()); - _tempEdits++; + function sha1_kt(t) { + return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : + (t < 60) ? -1894007588 : -899497514; + } + }, + /** + * @class Hashes.SHA256 + * @param {config} + * + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2 + * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * See http://pajhome.org.uk/crypt/md5 for details. + * Also http://anmar.eu.org/projects/jssha2/ + */ + SHA256: function(options) { + /** + * Private properties configuration variables. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + * @see this.setUpperCase() method + * @see this.setPad() method + */ + var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase */ + b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', + /* base-64 pad character. Default '=' for strict RFC compliance */ + utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, + /* enable/disable utf8 encoding */ + sha256_K; + + /* privileged (public) methods */ + this.hex = function(s) { + return rstr2hex(rstr(s, utf8)); + }; + this.b64 = function(s) { + return rstr2b64(rstr(s, utf8), b64pad); + }; + this.any = function(s, e) { + return rstr2any(rstr(s, utf8), e); + }; + this.raw = function(s) { + return rstr(s, utf8); + }; + this.hex_hmac = function(k, d) { + return rstr2hex(rstr_hmac(k, d)); + }; + this.b64_hmac = function(k, d) { + return rstr2b64(rstr_hmac(k, d), b64pad); + }; + this.any_hmac = function(k, d, e) { + return rstr2any(rstr_hmac(k, d), e); + }; + /** + * Perform a simple self-test to see if the VM is working + * @return {String} Hexadecimal hash sample + * @public + */ + this.vm_test = function() { + return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; + }; + /** + * Enable/disable uppercase hexadecimal returned string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUpperCase = function(a) { + if (typeof a === 'boolean') { + hexcase = a; + } + return this; + }; + /** + * @description Defines a base64 pad string + * @param {string} Pad + * @return {Object} this + * @public + */ + this.setPad = function(a) { + b64pad = a || b64pad; + return this; + }; + /** + * Defines a base64 pad string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUTF8 = function(a) { + if (typeof a === 'boolean') { + utf8 = a; + } + return this; + }; + // private methods + /** + * Calculate the SHA-512 of a raw string + */ - function keydown() { - if (event.keyCode === d3keybinding.modifierCodes.alt) { - if (context.surface().classed('nope')) { - context.surface() - .classed('nope-suppressed', true); - } - context.surface() - .classed('nope', false) - .classed('nope-disabled', true); + function rstr(s, utf8) { + s = (utf8) ? utf8Encode(s) : s; + return binb2rstr(binb(rstr2binb(s), s.length * 8)); } - } + /** + * Calculate the HMAC-sha256 of a key and some data (raw strings) + */ - function keyup() { - if (event.keyCode === d3keybinding.modifierCodes.alt) { - if (context.surface().classed('nope-suppressed')) { - context.surface() - .classed('nope', true); - } - context.surface() - .classed('nope-suppressed', false) - .classed('nope-disabled', false); - } - } + function rstr_hmac(key, data) { + key = (utf8) ? utf8Encode(key) : key; + data = (utf8) ? utf8Encode(data) : data; + var hash, i = 0, + bkey = rstr2binb(key), + ipad = Array(16), + opad = Array(16); + if (bkey.length > 16) { + bkey = binb(bkey, key.length * 8); + } - // related code - // - `mode/drag_node.js` `doMode()` - // - `behavior/draw.js` `click()` - // - `behavior/draw_way.js` `move()` - function move(datum) { - context.surface().classed('nope-disabled', event.altKey); + for (; i < 16; i += 1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } - var targetLoc = datum && datum.properties && datum.properties.entity && datum.properties.entity.loc; - var targetNodes = datum && datum.properties && datum.properties.nodes; - var loc = context.map().mouseCoordinates(); + hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8); + return binb2rstr(binb(opad.concat(hash), 512 + 256)); + } - if (targetLoc) { // snap to node/vertex - a point target with `.loc` - loc = targetLoc; + /* + * Main sha256 function, with its support functions + */ - } else if (targetNodes) { // snap to way - a line target with `.nodes` - var choice = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id); - if (choice) { - loc = choice.loc; - } + function sha256_S(X, n) { + return (X >>> n) | (X << (32 - n)); } - context.replace(actionMoveNode(end.id, loc)); - end = context.entity(end.id); - checkGeometry(false); - } + function sha256_R(X, n) { + return (X >>> n); + } + function sha256_Ch(x, y, z) { + return ((x & y) ^ ((~x) & z)); + } - // Check whether this edit causes the geometry to break. - // If so, class the surface with a nope cursor. - // `finishDraw` - Only checks the relevant line segments if finishing drawing - function checkGeometry(finishDraw) { - var nopeDisabled = context.surface().classed('nope-disabled'); - var isInvalid = isInvalidGeometry(end, context.graph(), finishDraw); + function sha256_Maj(x, y, z) { + return ((x & y) ^ (x & z) ^ (y & z)); + } - if (nopeDisabled) { - context.surface() - .classed('nope', false) - .classed('nope-suppressed', isInvalid); - } else { - context.surface() - .classed('nope', isInvalid) - .classed('nope-suppressed', false); + function sha256_Sigma0256(x) { + return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22)); } - } + function sha256_Sigma1256(x) { + return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25)); + } - function isInvalidGeometry(entity, graph, finishDraw) { - var parents = graph.parentWays(entity); - - for (var i = 0; i < parents.length; i++) { - var parent = parents[i]; - var nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); }); - - if (origWay.isClosed()) { // Check if Area - if (finishDraw) { - nodes.splice(-2, 1); - entity = nodes[nodes.length-2]; - } else { - nodes.pop(); - } - } else { // Line - if (finishDraw) { - nodes.pop(); - } - } + function sha256_Gamma0256(x) { + return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3)); + } - if (geoHasSelfIntersections(nodes, entity.id)) { - return true; - } + function sha256_Gamma1256(x) { + return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10)); } - return false; - } + sha256_K = [ + 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987, + 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522, + 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585, + 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, + 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344, + 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, + 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998 + ]; + function binb(m, l) { + var HASH = [1779033703, -1150833019, 1013904242, -1521486534, + 1359893119, -1694144372, 528734635, 1541459225 + ]; + var W = new Array(64); + var a, b, c, d, e, f, g, h; + var i, j, T1, T2; + + /* append padding */ + m[l >> 5] |= 0x80 << (24 - l % 32); + m[((l + 64 >> 9) << 4) + 15] = l; + + for (i = 0; i < m.length; i += 16) { + a = HASH[0]; + b = HASH[1]; + c = HASH[2]; + d = HASH[3]; + e = HASH[4]; + f = HASH[5]; + g = HASH[6]; + h = HASH[7]; + + for (j = 0; j < 64; j += 1) { + if (j < 16) { + W[j] = m[j + i]; + } else { + W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]), + sha256_Gamma0256(W[j - 15])), W[j - 16]); + } + + T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)), + sha256_K[j]), W[j]); + T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c)); + h = g; + g = f; + f = e; + e = safe_add(d, T1); + d = c; + c = b; + b = a; + a = safe_add(T1, T2); + } + + HASH[0] = safe_add(a, HASH[0]); + HASH[1] = safe_add(b, HASH[1]); + HASH[2] = safe_add(c, HASH[2]); + HASH[3] = safe_add(d, HASH[3]); + HASH[4] = safe_add(e, HASH[4]); + HASH[5] = safe_add(f, HASH[5]); + HASH[6] = safe_add(g, HASH[6]); + HASH[7] = safe_add(h, HASH[7]); + } + return HASH; + } - function undone() { - // Undo popped the history back to the initial annotated no-op edit. - // Remove initial no-op edit and whatever edit happened immediately before it. - context.pop(2); - _tempEdits = 0; + }, - if (context.hasEntity(wayId)) { - context.enter(mode); - } else { - context.enter(modeBrowse(context)); - } - } + /** + * @class Hashes.SHA512 + * @param {config} + * + * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2 + * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * See http://pajhome.org.uk/crypt/md5 for details. + */ + SHA512: function(options) { + /** + * Private properties configuration variables. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + * @see this.setUpperCase() method + * @see this.setPad() method + */ + var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, + /* hexadecimal output case format. false - lowercase; true - uppercase */ + b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', + /* base-64 pad character. Default '=' for strict RFC compliance */ + utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, + /* enable/disable utf8 encoding */ + sha512_k; + + /* privileged (public) methods */ + this.hex = function(s) { + return rstr2hex(rstr(s)); + }; + this.b64 = function(s) { + return rstr2b64(rstr(s), b64pad); + }; + this.any = function(s, e) { + return rstr2any(rstr(s), e); + }; + this.raw = function(s) { + return rstr(s, utf8); + }; + this.hex_hmac = function(k, d) { + return rstr2hex(rstr_hmac(k, d)); + }; + this.b64_hmac = function(k, d) { + return rstr2b64(rstr_hmac(k, d), b64pad); + }; + this.any_hmac = function(k, d, e) { + return rstr2any(rstr_hmac(k, d), e); + }; + /** + * Perform a simple self-test to see if the VM is working + * @return {String} Hexadecimal hash sample + * @public + */ + this.vm_test = function() { + return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; + }; + /** + * @description Enable/disable uppercase hexadecimal returned string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUpperCase = function(a) { + if (typeof a === 'boolean') { + hexcase = a; + } + return this; + }; + /** + * @description Defines a base64 pad string + * @param {string} Pad + * @return {Object} this + * @public + */ + this.setPad = function(a) { + b64pad = a || b64pad; + return this; + }; + /** + * @description Defines a base64 pad string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUTF8 = function(a) { + if (typeof a === 'boolean') { + utf8 = a; + } + return this; + }; + /* private methods */ - function setActiveElements() { - context.surface().selectAll('.' + end.id) - .classed('active', true); - } + /** + * Calculate the SHA-512 of a raw string + */ + function rstr(s) { + s = (utf8) ? utf8Encode(s) : s; + return binb2rstr(binb(rstr2binb(s), s.length * 8)); + } + /* + * Calculate the HMAC-SHA-512 of a key and some data (raw strings) + */ - var drawWay = function(surface) { - behavior - .on('move', move) - .on('click', drawWay.add) - .on('clickWay', drawWay.addWay) - .on('clickNode', drawWay.addNode) - .on('undo', context.undo) - .on('cancel', drawWay.cancel) - .on('finish', drawWay.finish); + function rstr_hmac(key, data) { + key = (utf8) ? utf8Encode(key) : key; + data = (utf8) ? utf8Encode(data) : data; - d3_select(window) - .on('keydown.drawWay', keydown) - .on('keyup.drawWay', keyup); + var hash, i = 0, + bkey = rstr2binb(key), + ipad = Array(32), + opad = Array(32); - context.map() - .dblclickEnable(false) - .on('drawn.draw', setActiveElements); + if (bkey.length > 32) { + bkey = binb(bkey, key.length * 8); + } - setActiveElements(); + for (; i < 32; i += 1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } - surface.call(behavior); + hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8); + return binb2rstr(binb(opad.concat(hash), 1024 + 512)); + } + + /** + * Calculate the SHA-512 of an array of big-endian dwords, and a bit length + */ + + function binb(x, len) { + var j, i, l, + W = new Array(80), + hash = new Array(16), + //Initial hash values + H = [ + new int64(0x6a09e667, -205731576), + new int64(-1150833019, -2067093701), + new int64(0x3c6ef372, -23791573), + new int64(-1521486534, 0x5f1d36f1), + new int64(0x510e527f, -1377402159), + new int64(-1694144372, 0x2b3e6c1f), + new int64(0x1f83d9ab, -79577749), + new int64(0x5be0cd19, 0x137e2179) + ], + T1 = new int64(0, 0), + T2 = new int64(0, 0), + a = new int64(0, 0), + b = new int64(0, 0), + c = new int64(0, 0), + d = new int64(0, 0), + e = new int64(0, 0), + f = new int64(0, 0), + g = new int64(0, 0), + h = new int64(0, 0), + //Temporary variables not specified by the document + s0 = new int64(0, 0), + s1 = new int64(0, 0), + Ch = new int64(0, 0), + Maj = new int64(0, 0), + r1 = new int64(0, 0), + r2 = new int64(0, 0), + r3 = new int64(0, 0); + + if (sha512_k === undefined) { + //SHA512 constants + sha512_k = [ + new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd), + new int64(-1245643825, -330482897), new int64(-373957723, -2121671748), + new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031), + new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736), + new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe), + new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302), + new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1), + new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428), + new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3), + new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65), + new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483), + new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459), + new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210), + new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340), + new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395), + new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70), + new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926), + new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473), + new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8), + new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b), + new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023), + new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30), + new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910), + new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8), + new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53), + new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016), + new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893), + new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397), + new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60), + new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec), + new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047), + new int64(-1090935817, -1295615723), new int64(-965641998, -479046869), + new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207), + new int64(-354779690, -840897762), new int64(-176337025, -294727304), + new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026), + new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b), + new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493), + new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620), + new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430), + new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817) + ]; + } - context.history() - .on('undone.draw', undone); - }; + for (i = 0; i < 80; i += 1) { + W[i] = new int64(0, 0); + } + // append padding to the source string. The format is described in the FIPS. + x[len >> 5] |= 0x80 << (24 - (len & 0x1f)); + x[((len + 128 >> 10) << 5) + 31] = len; + l = x.length; + for (i = 0; i < l; i += 32) { //32 dwords is the block size + int64copy(a, H[0]); + int64copy(b, H[1]); + int64copy(c, H[2]); + int64copy(d, H[3]); + int64copy(e, H[4]); + int64copy(f, H[5]); + int64copy(g, H[6]); + int64copy(h, H[7]); + + for (j = 0; j < 16; j += 1) { + W[j].h = x[i + 2 * j]; + W[j].l = x[i + 2 * j + 1]; + } + + for (j = 16; j < 80; j += 1) { + //sigma1 + int64rrot(r1, W[j - 2], 19); + int64revrrot(r2, W[j - 2], 29); + int64shr(r3, W[j - 2], 6); + s1.l = r1.l ^ r2.l ^ r3.l; + s1.h = r1.h ^ r2.h ^ r3.h; + //sigma0 + int64rrot(r1, W[j - 15], 1); + int64rrot(r2, W[j - 15], 8); + int64shr(r3, W[j - 15], 7); + s0.l = r1.l ^ r2.l ^ r3.l; + s0.h = r1.h ^ r2.h ^ r3.h; + + int64add4(W[j], s1, W[j - 7], s0, W[j - 16]); + } + + for (j = 0; j < 80; j += 1) { + //Ch + Ch.l = (e.l & f.l) ^ (~e.l & g.l); + Ch.h = (e.h & f.h) ^ (~e.h & g.h); + + //Sigma1 + int64rrot(r1, e, 14); + int64rrot(r2, e, 18); + int64revrrot(r3, e, 9); + s1.l = r1.l ^ r2.l ^ r3.l; + s1.h = r1.h ^ r2.h ^ r3.h; + + //Sigma0 + int64rrot(r1, a, 28); + int64revrrot(r2, a, 2); + int64revrrot(r3, a, 7); + s0.l = r1.l ^ r2.l ^ r3.l; + s0.h = r1.h ^ r2.h ^ r3.h; + + //Maj + Maj.l = (a.l & b.l) ^ (a.l & c.l) ^ (b.l & c.l); + Maj.h = (a.h & b.h) ^ (a.h & c.h) ^ (b.h & c.h); + + int64add5(T1, h, s1, Ch, sha512_k[j], W[j]); + int64add(T2, s0, Maj); + + int64copy(h, g); + int64copy(g, f); + int64copy(f, e); + int64add(e, d, T1); + int64copy(d, c); + int64copy(c, b); + int64copy(b, a); + int64add(a, T1, T2); + } + int64add(H[0], H[0], a); + int64add(H[1], H[1], b); + int64add(H[2], H[2], c); + int64add(H[3], H[3], d); + int64add(H[4], H[4], e); + int64add(H[5], H[5], f); + int64add(H[6], H[6], g); + int64add(H[7], H[7], h); + } - drawWay.off = function(surface) { - // Drawing was interrupted unexpectedly. - // This can happen if the user changes modes, - // clicks geolocate button, a hashchange event occurs, etc. - if (_tempEdits) { - context.pop(_tempEdits); - while (context.graph() !== startGraph) { - context.pop(); - } + //represent the hash as an array of 32-bit dwords + for (i = 0; i < 8; i += 1) { + hash[2 * i] = H[i].h; + hash[2 * i + 1] = H[i].l; + } + return hash; } - context.map() - .on('drawn.draw', null); - - surface.call(behavior.off) - .selectAll('.active') - .classed('active', false); + //A constructor for 64-bit numbers - surface - .classed('nope', false) - .classed('nope-suppressed', false) - .classed('nope-disabled', false); + function int64(h, l) { + this.h = h; + this.l = l; + //this.toString = int64toString; + } - d3_select(window) - .on('keydown.hover', null) - .on('keyup.hover', null); + //Copies src into dst, assuming both are 64-bit numbers - context.history() - .on('undone.draw', null); - }; + function int64copy(dst, src) { + dst.h = src.h; + dst.l = src.l; + } + //Right-rotates a 64-bit number by shift + //Won't handle cases of shift>=32 + //The function revrrot() is for that - function _actionAddDrawNode() { - return function(graph) { - return graph - .replace(end) - .replace(origWay.addNode(end.id, index)); - }; - } + function int64rrot(dst, x, shift) { + dst.l = (x.l >>> shift) | (x.h << (32 - shift)); + dst.h = (x.h >>> shift) | (x.l << (32 - shift)); + } + //Reverses the dwords of the source and then rotates right by shift. + //This is equivalent to rotation by 32+shift - function _actionReplaceDrawNode(newNode) { - return function(graph) { - return graph - .replace(origWay.addNode(newNode.id, index)) - .remove(end); - }; - } + function int64revrrot(dst, x, shift) { + dst.l = (x.h >>> shift) | (x.l << (32 - shift)); + dst.h = (x.l >>> shift) | (x.h << (32 - shift)); + } + //Bitwise-shifts right a 64-bit number by shift + //Won't handle shift>=32, but it's never needed in SHA512 - // Accept the current position of the drawing node and continue drawing. - drawWay.add = function(loc, d) { - if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) { - return; // can't click here + function int64shr(dst, x, shift) { + dst.l = (x.l >>> shift) | (x.h << (32 - shift)); + dst.h = (x.h >>> shift); } - context.pop(_tempEdits); - _tempEdits = 0; - - context.perform( - _actionAddDrawNode(), - annotation - ); + //Adds two 64-bit numbers + //Like the original implementation, does not rely on 32-bit operations - checkGeometry(false); // finishDraw = false - context.enter(mode); - }; + function int64add(dst, x, y) { + var w0 = (x.l & 0xffff) + (y.l & 0xffff); + var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16); + var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16); + var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16); + dst.l = (w0 & 0xffff) | (w1 << 16); + dst.h = (w2 & 0xffff) | (w3 << 16); + } + //Same, except with 4 addends. Works faster than adding them one by one. - // Connect the way to an existing way. - drawWay.addWay = function(loc, edge, d) { - if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) { - return; // can't click here + function int64add4(dst, a, b, c, d) { + var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff); + var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16); + var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16); + var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16); + dst.l = (w0 & 0xffff) | (w1 << 16); + dst.h = (w2 & 0xffff) | (w3 << 16); } - context.pop(_tempEdits); - _tempEdits = 0; + //Same, except with 5 addends - context.perform( - _actionAddDrawNode(), - actionAddMidpoint({ loc: loc, edge: edge }, end), - annotation - ); + function int64add5(dst, a, b, c, d, e) { + var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff), + w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16), + w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16), + w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16); + dst.l = (w0 & 0xffff) | (w1 << 16); + dst.h = (w2 & 0xffff) | (w3 << 16); + } + }, + /** + * @class Hashes.RMD160 + * @constructor + * @param {Object} [config] + * + * A JavaScript implementation of the RIPEMD-160 Algorithm + * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * See http://pajhome.org.uk/crypt/md5 for details. + * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/ + */ + RMD160: function(options) { + /** + * Private properties configuration variables. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + * @see this.setUpperCase() method + * @see this.setPad() method + */ + var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, + /* hexadecimal output case format. false - lowercase; true - uppercase */ + b64pad = (options && typeof options.pad === 'string') ? options.pa : '=', + /* base-64 pad character. Default '=' for strict RFC compliance */ + utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, + /* enable/disable utf8 encoding */ + rmd160_r1 = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 + ], + rmd160_r2 = [ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 + ], + rmd160_s1 = [ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 + ], + rmd160_s2 = [ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 + ]; - checkGeometry(false); // finishDraw = false - context.enter(mode); - }; + /* privileged (public) methods */ + this.hex = function(s) { + return rstr2hex(rstr(s, utf8)); + }; + this.b64 = function(s) { + return rstr2b64(rstr(s, utf8), b64pad); + }; + this.any = function(s, e) { + return rstr2any(rstr(s, utf8), e); + }; + this.raw = function(s) { + return rstr(s, utf8); + }; + this.hex_hmac = function(k, d) { + return rstr2hex(rstr_hmac(k, d)); + }; + this.b64_hmac = function(k, d) { + return rstr2b64(rstr_hmac(k, d), b64pad); + }; + this.any_hmac = function(k, d, e) { + return rstr2any(rstr_hmac(k, d), e); + }; + /** + * Perform a simple self-test to see if the VM is working + * @return {String} Hexadecimal hash sample + * @public + */ + this.vm_test = function() { + return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; + }; + /** + * @description Enable/disable uppercase hexadecimal returned string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUpperCase = function(a) { + if (typeof a === 'boolean') { + hexcase = a; + } + return this; + }; + /** + * @description Defines a base64 pad string + * @param {string} Pad + * @return {Object} this + * @public + */ + this.setPad = function(a) { + if (typeof a !== 'undefined') { + b64pad = a; + } + return this; + }; + /** + * @description Defines a base64 pad string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUTF8 = function(a) { + if (typeof a === 'boolean') { + utf8 = a; + } + return this; + }; + + /* private methods */ + /** + * Calculate the rmd160 of a raw string + */ - // Connect the way to an existing node and continue drawing. - drawWay.addNode = function(node, d) { - if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) { - return; // can't click here + function rstr(s) { + s = (utf8) ? utf8Encode(s) : s; + return binl2rstr(binl(rstr2binl(s), s.length * 8)); } - context.pop(_tempEdits); - _tempEdits = 0; + /** + * Calculate the HMAC-rmd160 of a key and some data (raw strings) + */ - context.perform( - _actionReplaceDrawNode(node), - annotation - ); - - checkGeometry(false); // finishDraw = false - context.enter(mode); - }; + function rstr_hmac(key, data) { + key = (utf8) ? utf8Encode(key) : key; + data = (utf8) ? utf8Encode(data) : data; + var i, hash, + bkey = rstr2binl(key), + ipad = Array(16), + opad = Array(16); + if (bkey.length > 16) { + bkey = binl(bkey, key.length * 8); + } - // Finish the draw operation, removing the temporary edits. - // If the way has enough nodes to be valid, it's selected. - // Otherwise, delete everything and return to browse mode. - drawWay.finish = function() { - checkGeometry(true); // finishDraw = true - if (context.surface().classed('nope')) { - return; // can't click here + for (i = 0; i < 16; i += 1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } + hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8); + return binl2rstr(binl(opad.concat(hash), 512 + 160)); } - context.pop(_tempEdits); - _tempEdits = 0; + /** + * Convert an array of little-endian words to a string + */ - var way = context.hasEntity(wayId); - if (!way || way.isDegenerate()) { - drawWay.cancel(); - return; + function binl2rstr(input) { + var i, output = '', + l = input.length * 32; + for (i = 0; i < l; i += 8) { + output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF); + } + return output; + } + + /** + * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length. + */ + + function binl(x, len) { + var T, j, i, l, + h0 = 0x67452301, + h1 = 0xefcdab89, + h2 = 0x98badcfe, + h3 = 0x10325476, + h4 = 0xc3d2e1f0, + A1, B1, C1, D1, E1, + A2, B2, C2, D2, E2; + + /* append padding */ + x[len >> 5] |= 0x80 << (len % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + l = x.length; + + for (i = 0; i < l; i += 16) { + A1 = A2 = h0; + B1 = B2 = h1; + C1 = C2 = h2; + D1 = D2 = h3; + E1 = E2 = h4; + for (j = 0; j <= 79; j += 1) { + T = safe_add(A1, rmd160_f(j, B1, C1, D1)); + T = safe_add(T, x[i + rmd160_r1[j]]); + T = safe_add(T, rmd160_K1(j)); + T = safe_add(bit_rol(T, rmd160_s1[j]), E1); + A1 = E1; + E1 = D1; + D1 = bit_rol(C1, 10); + C1 = B1; + B1 = T; + T = safe_add(A2, rmd160_f(79 - j, B2, C2, D2)); + T = safe_add(T, x[i + rmd160_r2[j]]); + T = safe_add(T, rmd160_K2(j)); + T = safe_add(bit_rol(T, rmd160_s2[j]), E2); + A2 = E2; + E2 = D2; + D2 = bit_rol(C2, 10); + C2 = B2; + B2 = T; + } + + T = safe_add(h1, safe_add(C1, D2)); + h1 = safe_add(h2, safe_add(D1, E2)); + h2 = safe_add(h3, safe_add(E1, A2)); + h3 = safe_add(h4, safe_add(A1, B2)); + h4 = safe_add(h0, safe_add(B1, C2)); + h0 = T; + } + return [h0, h1, h2, h3, h4]; } - window.setTimeout(function() { - context.map().dblclickEnable(true); - }, 1000); + // specific algorithm methods - context.enter(modeSelect(context, [wayId]).newFeature(true)); - }; + function rmd160_f(j, x, y, z) { + return (0 <= j && j <= 15) ? (x ^ y ^ z) : + (16 <= j && j <= 31) ? (x & y) | (~x & z) : + (32 <= j && j <= 47) ? (x | ~y) ^ z : + (48 <= j && j <= 63) ? (x & z) | (y & ~z) : + (64 <= j && j <= 79) ? x ^ (y | ~z) : + 'rmd160_f: j out of range'; + } + function rmd160_K1(j) { + return (0 <= j && j <= 15) ? 0x00000000 : + (16 <= j && j <= 31) ? 0x5a827999 : + (32 <= j && j <= 47) ? 0x6ed9eba1 : + (48 <= j && j <= 63) ? 0x8f1bbcdc : + (64 <= j && j <= 79) ? 0xa953fd4e : + 'rmd160_K1: j out of range'; + } - // Cancel the draw operation, delete everything, and return to browse mode. - drawWay.cancel = function() { - context.pop(_tempEdits); - _tempEdits = 0; + function rmd160_K2(j) { + return (0 <= j && j <= 15) ? 0x50a28be6 : + (16 <= j && j <= 31) ? 0x5c4dd124 : + (32 <= j && j <= 47) ? 0x6d703ef3 : + (48 <= j && j <= 63) ? 0x7a6d76e9 : + (64 <= j && j <= 79) ? 0x00000000 : + 'rmd160_K2: j out of range'; + } + } + }; - while (context.graph() !== startGraph) { - context.pop(); + // exposes Hashes + (function(window, undefined) { + var freeExports = false; + { + freeExports = exports; + if (exports && typeof commonjsGlobal === 'object' && commonjsGlobal && commonjsGlobal === commonjsGlobal.global) { + window = commonjsGlobal; } + } - window.setTimeout(function() { - context.map().dblclickEnable(true); - }, 1000); + if (typeof undefined === 'function' && typeof undefined.amd === 'object' && undefined.amd) { + // define as an anonymous module, so, through path mapping, it can be aliased + undefined(function() { + return Hashes; + }); + } else if (freeExports) { + // in Node.js or RingoJS v0.8.0+ + if (module && module.exports === freeExports) { + module.exports = Hashes; + } + // in Narwhal or RingoJS v0.7.0- + else { + freeExports.Hashes = Hashes; + } + } else { + // in a browser or Rhino + window.Hashes = Hashes; + } + }(this)); + }()); // IIFE + }); - context.surface() - .classed('nope', false) - .classed('nope-disabled', false) - .classed('nope-suppressed', false); + var hashes$1 = /*#__PURE__*/Object.freeze({ + default: hashes, + __moduleExports: hashes + }); - context.enter(modeBrowse(context)); - }; + var immutable = extend$2; + var hasOwnProperty$16 = Object.prototype.hasOwnProperty; - drawWay.activeID = function() { - if (!arguments.length) return end.id; - // no assign - return drawWay; - }; + function extend$2() { + var target = {}; + for (var i = 0; i < arguments.length; i++) { + var source = arguments[i]; - drawWay.tail = function(text) { - behavior.tail(text); - return drawWay; - }; + for (var key in source) { + if (hasOwnProperty$16.call(source, key)) { + target[key] = source[key]; + } + } + } + return target + } - return drawWay; -} - -/** Error message constants. */ -var FUNC_ERROR_TEXT$3 = 'Expected a function'; - -/** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed `func` invocations and a `flush` method to - * immediately invoke them. Provide `options` to indicate whether `func` - * should be invoked on the leading and/or trailing edge of the `wait` - * timeout. The `func` is invoked with the last arguments provided to the - * throttled function. Subsequent calls to the throttled function return the - * result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the throttled function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=true] - * Specify invoking on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // Avoid excessively updating the position while scrolling. - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. - * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); - * jQuery(element).on('click', throttled); - * - * // Cancel the trailing throttled invocation. - * jQuery(window).on('popstate', throttled.cancel); - */ -function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT$3); - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - 'leading': leading, - 'maxWait': wait, - 'trailing': trailing + var immutable$1 = /*#__PURE__*/Object.freeze({ + default: immutable, + __moduleExports: immutable }); -} - -function behaviorHash(context) { - var s0 = null, // cached window.location.hash - lat = 90 - 1e-8; // allowable latitude range - - - var parser = function(map, s) { - var q = utilStringQs(s); - var args = (q.map || '').split('/').map(Number); - if (args.length < 3 || args.some(isNaN)) { - return true; // replace bogus hash + var hashes$2 = ( hashes$1 && hashes ) || hashes$1; - } else if (s !== formatter(map).slice(1)) { // hash has changed - var mode = context.mode(), - dist = geoSphericalDistance(map.center(), [args[2], args[1]]), - maxdist = 500; + var xtend = ( immutable$1 && immutable ) || immutable$1; - // Don't allow the hash location to change too much while drawing - // This can happen if the user accidently hit the back button. #3996 - if (mode && mode.id.match(/^draw/) !== null && dist > maxdist) { - context.enter(modeBrowse(context)); - } + var sha1 = new hashes$2.SHA1(); - map.centerZoom([args[2], Math.min(lat, Math.max(-lat, args[1]))], args[0]); - } - }; + var ohauth = {}; + ohauth.qsString = function(obj) { + return Object.keys(obj).sort().map(function(key) { + return ohauth.percentEncode(key) + '=' + + ohauth.percentEncode(obj[key]); + }).join('&'); + }; - var formatter = function(map) { - var center = map.center(), - zoom = map.zoom(), - precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2)), - q = omit(utilStringQs(window.location.hash.substring(1)), - ['comment', 'hashtags', 'walkthrough'] - ), - newParams = {}; + ohauth.stringQs = function(str) { + return str.split('&').filter(function (pair) { + return pair !== ''; + }).reduce(function(obj, pair){ + var parts = pair.split('='); + obj[decodeURIComponent(parts[0])] = (null === parts[1]) ? + '' : decodeURIComponent(parts[1]); + return obj; + }, {}); + }; - delete q.id; - var selected = context.selectedIDs().filter(function(id) { - return !context.entity(id).isNew(); - }); - if (selected.length) { - newParams.id = selected.join(','); - } + ohauth.rawxhr = function(method, url, data, headers, callback) { + var xhr = new XMLHttpRequest(), + twoHundred = /^20\d$/; + xhr.onreadystatechange = function() { + if (4 === xhr.readyState && 0 !== xhr.status) { + if (twoHundred.test(xhr.status)) callback(null, xhr); + else return callback(xhr, null); + } + }; + xhr.onerror = function(e) { return callback(e, null); }; + xhr.open(method, url, true); + for (var h in headers) xhr.setRequestHeader(h, headers[h]); + xhr.send(data); + return xhr; + }; - newParams.map = zoom.toFixed(2) + - '/' + center[1].toFixed(precision) + - '/' + center[0].toFixed(precision); + ohauth.xhr = function(method, url, auth, data, options, callback) { + var headers = (options && options.header) || { + 'Content-Type': 'application/x-www-form-urlencoded' + }; + headers.Authorization = 'OAuth ' + ohauth.authHeader(auth); + return ohauth.rawxhr(method, url, data, headers, callback); + }; - return '#' + utilQsString(assign(q, newParams), true); - }; + ohauth.nonce = function() { + for (var o = ''; o.length < 6;) { + o += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'[Math.floor(Math.random() * 61)]; + } + return o; + }; + ohauth.authHeader = function(obj) { + return Object.keys(obj).sort().map(function(key) { + return encodeURIComponent(key) + '="' + encodeURIComponent(obj[key]) + '"'; + }).join(', '); + }; - function update() { - if (context.inIntro()) return; - var s1 = formatter(context.map()); - if (s0 !== s1) { - window.location.replace(s0 = s1); // don't recenter the map! - } - } + ohauth.timestamp = function() { return ~~((+new Date()) / 1000); }; + ohauth.percentEncode = function(s) { + return encodeURIComponent(s) + .replace(/\!/g, '%21').replace(/\'/g, '%27') + .replace(/\*/g, '%2A').replace(/\(/g, '%28').replace(/\)/g, '%29'); + }; - var throttledUpdate = throttle(update, 500); + ohauth.baseString = function(method, url, params) { + if (params.oauth_signature) delete params.oauth_signature; + return [ + method, + ohauth.percentEncode(url), + ohauth.percentEncode(ohauth.qsString(params))].join('&'); + }; + ohauth.signature = function(oauth_secret, token_secret, baseString) { + return sha1.b64_hmac( + ohauth.percentEncode(oauth_secret) + '&' + + ohauth.percentEncode(token_secret), + baseString); + }; - function hashchange() { - if (window.location.hash === s0) return; // ignore spurious hashchange events - if (parser(context.map(), (s0 = window.location.hash).substring(1))) { - update(); // replace bogus hash - } - } + /** + * Takes an options object for configuration (consumer_key, + * consumer_secret, version, signature_method, token, token_secret) + * and returns a function that generates the Authorization header + * for given data. + * + * The returned function takes these parameters: + * - method: GET/POST/... + * - uri: full URI with protocol, port, path and query string + * - extra_params: any extra parameters (that are passed in the POST data), + * can be an object or a from-urlencoded string. + * + * Returned function returns full OAuth header with "OAuth" string in it. + */ + ohauth.headerGenerator = function(options) { + options = options || {}; + var consumer_key = options.consumer_key || '', + consumer_secret = options.consumer_secret || '', + signature_method = options.signature_method || 'HMAC-SHA1', + version = options.version || '1.0', + token = options.token || '', + token_secret = options.token_secret || ''; + + return function(method, uri, extra_params) { + method = method.toUpperCase(); + if (typeof extra_params === 'string' && extra_params.length > 0) { + extra_params = ohauth.stringQs(extra_params); + } - function hash() { - context.map() - .on('move.hash', throttledUpdate); + var uri_parts = uri.split('?', 2), + base_uri = uri_parts[0]; - context - .on('enter.hash', throttledUpdate); + var query_params = uri_parts.length === 2 ? + ohauth.stringQs(uri_parts[1]) : {}; - d3_select(window) - .on('hashchange.hash', hashchange); + var oauth_params = { + oauth_consumer_key: consumer_key, + oauth_signature_method: signature_method, + oauth_version: version, + oauth_timestamp: ohauth.timestamp(), + oauth_nonce: ohauth.nonce() + }; - if (window.location.hash) { + if (token) oauth_params.oauth_token = token; - var q = utilStringQs(window.location.hash.substring(1)); + var all_params = xtend({}, oauth_params, query_params, extra_params), + base_str = ohauth.baseString(method, base_uri, all_params); - if (q.id) { - context.zoomToEntity(q.id.split(',')[0], !q.map); - } + oauth_params.oauth_signature = ohauth.signature(consumer_secret, token_secret, base_str); - if (q.comment) { - context.storage('comment', q.comment); - context.storage('commentDate', Date.now()); - } + return 'OAuth ' + ohauth.authHeader(oauth_params); + }; + }; - if (q.hashtags) { - context.storage('hashtags', q.hashtags); - } + var ohauth_1 = ohauth; - if (q.walkthrough === 'true') { - hash.startWalkthrough = true; - } + var ohauth$1 = /*#__PURE__*/Object.freeze({ + default: ohauth_1, + __moduleExports: ohauth_1 + }); - hashchange(); + var resolveUrl = createCommonjsModule(function (module, exports) { + // Copyright 2014 Simon Lydell + // X11 (“MIT”) Licensed. (See LICENSE.) - if (q.map) { - hash.hadHash = true; - } - } + void (function(root, factory) { + if (typeof undefined === "function" && undefined.amd) { + undefined(factory); + } else { + module.exports = factory(); } + }(commonjsGlobal, function() { + function resolveUrl(/* ...urls */) { + var numUrls = arguments.length; - hash.off = function() { - throttledUpdate.cancel(); - - context.map() - .on('move.hash', null); - - context - .on('enter.hash', null); + if (numUrls === 0) { + throw new Error("resolveUrl requires at least one argument; got none.") + } - d3_select(window) - .on('hashchange.hash', null); + var base = document.createElement("base"); + base.href = arguments[0]; - window.location.hash = ''; - }; + if (numUrls === 1) { + return base.href + } + var head = document.getElementsByTagName("head")[0]; + head.insertBefore(base, head.firstChild); - return hash; -} + var a = document.createElement("a"); + var resolved; -function behaviorLasso(context) { + for (var index = 1; index < numUrls; index++) { + a.href = arguments[index]; + resolved = a.href; + base.href = resolved; + } - var behavior = function(selection$$1) { - var lasso; + head.removeChild(base); + return resolved + } - function mousedown() { - var button = 0; // left - if (event.button === button && event.shiftKey === true) { - lasso = null; + return resolveUrl - d3_select(window) - .on('mousemove.lasso', mousemove) - .on('mouseup.lasso', mouseup); + })); + }); - event.stopPropagation(); - } - } + var resolveUrl$1 = /*#__PURE__*/Object.freeze({ + default: resolveUrl, + __moduleExports: resolveUrl + }); + var assign$1 = make_assign(); + var create$2 = make_create(); + var trim = make_trim(); + var Global = (typeof window !== 'undefined' ? window : commonjsGlobal); + + var util = { + assign: assign$1, + create: create$2, + trim: trim, + bind: bind, + slice: slice$7, + each: each, + map: map$4, + pluck: pluck, + isList: isList, + isFunction: isFunction$1, + isObject: isObject$1, + Global: Global + }; - function mousemove() { - if (!lasso) { - lasso = uiLasso(context); - context.surface().call(lasso); - } + function make_assign() { + if (Object.assign) { + return Object.assign + } else { + return function shimAssign(obj, props1, props2, etc) { + for (var i = 1; i < arguments.length; i++) { + each(Object(arguments[i]), function(val, key) { + obj[key] = val; + }); + } + return obj + } + } + } + + function make_create() { + if (Object.create) { + return function create(obj, assignProps1, assignProps2, etc) { + var assignArgsList = slice$7(arguments, 1); + return assign$1.apply(this, [Object.create(obj)].concat(assignArgsList)) + } + } else { + function F() {} // eslint-disable-line no-inner-declarations + return function create(obj, assignProps1, assignProps2, etc) { + var assignArgsList = slice$7(arguments, 1); + F.prototype = obj; + return assign$1.apply(this, [new F()].concat(assignArgsList)) + } + } + } + + function make_trim() { + if (String.prototype.trim) { + return function trim(str) { + return String.prototype.trim.call(str) + } + } else { + return function trim(str) { + return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '') + } + } + } + + function bind(obj, fn) { + return function() { + return fn.apply(obj, Array.prototype.slice.call(arguments, 0)) + } + } + + function slice$7(arr, index) { + return Array.prototype.slice.call(arr, index || 0) + } + + function each(obj, fn) { + pluck(obj, function(val, key) { + fn(val, key); + return false + }); + } + + function map$4(obj, fn) { + var res = (isList(obj) ? [] : {}); + pluck(obj, function(v, k) { + res[k] = fn(v, k); + return false + }); + return res + } + + function pluck(obj, fn) { + if (isList(obj)) { + for (var i=0; i= 0; i--) { + var key = localStorage$1().key(i); + fn(read(key), key); + } + } - if (ids.length) { - context.enter(modeSelect(context, ids)); - } - } + function remove$2(key) { + return localStorage$1().removeItem(key) + } - selection$$1 - .on('mousedown.lasso', mousedown); - }; + function clearAll() { + return localStorage$1().clear() + } + var localStorage_2 = localStorage_1.name; + var localStorage_3 = localStorage_1.read; + var localStorage_4 = localStorage_1.write; + var localStorage_5 = localStorage_1.each; + var localStorage_6 = localStorage_1.remove; + var localStorage_7 = localStorage_1.clearAll; + var localStorage$2 = /*#__PURE__*/Object.freeze({ + default: localStorage_1, + __moduleExports: localStorage_1, + name: localStorage_2, + read: localStorage_3, + write: localStorage_4, + each: localStorage_5, + remove: localStorage_6, + clearAll: localStorage_7 + }); - behavior.off = function(selection$$1) { - selection$$1.on('mousedown.lasso', null); - }; + // oldFF-globalStorage provides storage for Firefox + // versions 6 and 7, where no localStorage, etc + // is available. - return behavior; -} - -/* Creates a keybinding behavior for an operation */ -function behaviorOperation() { - var _operation, keybinding; - - var behavior = function () { - if (_operation && _operation.available()) { - keybinding = d3keybinding('behavior.key.' + _operation.id); - keybinding.on(_operation.keys, function() { - event.preventDefault(); - var disabled = _operation.disabled(); - var flash; - - if (disabled) { - flash = uiFlash() - .duration(4000) - .iconName('#operation-' + _operation.id) - .iconClass('operation disabled') - .text(_operation.tooltip); - - flash(); - - } else { - flash = uiFlash() - .duration(2000) - .iconName('#operation-' + _operation.id) - .iconClass('operation') - .text(_operation.annotation() || _operation.title); - - flash(); - _operation(); - } - }); + var Global$2 = util$2.Global; - d3_select(document).call(keybinding); - } + var oldFFGlobalStorage = { + name: 'oldFF-globalStorage', + read: read$1, + write: write$1, + each: each$3, + remove: remove$3, + clearAll: clearAll$1, + }; - return behavior; - }; + var globalStorage = Global$2.globalStorage; + function read$1(key) { + return globalStorage[key] + } - behavior.off = function() { - if (keybinding) { - d3_select(document).call(keybinding.off); - } - }; + function write$1(key, data) { + globalStorage[key] = data; + } + function each$3(fn) { + for (var i = globalStorage.length - 1; i >= 0; i--) { + var key = globalStorage.key(i); + fn(globalStorage[key], key); + } + } - behavior.which = function (_) { - if (!arguments.length) return _operation; - _operation = _; - return behavior; - }; + function remove$3(key) { + return globalStorage.removeItem(key) + } + function clearAll$1() { + each$3(function(key, _) { + delete globalStorage[key]; + }); + } + var oldFFGlobalStorage_1 = oldFFGlobalStorage.name; + var oldFFGlobalStorage_2 = oldFFGlobalStorage.read; + var oldFFGlobalStorage_3 = oldFFGlobalStorage.write; + var oldFFGlobalStorage_4 = oldFFGlobalStorage.each; + var oldFFGlobalStorage_5 = oldFFGlobalStorage.remove; + var oldFFGlobalStorage_6 = oldFFGlobalStorage.clearAll; - return behavior; -} - -/** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ -function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; -} - -/** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ -function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; -} - -/** Used for built-in method references. */ -var objectProto$19 = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString$2 = objectProto$19.toString; - -/** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ -var invert = createInverter(function(result, value, key) { - if (value != null && - typeof value.toString != 'function') { - value = nativeObjectToString$2.call(value); - } - - result[value] = key; -}, constant$13(identity$8)); - -/** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ -function mapValues(object, iteratee) { - var result = {}; - iteratee = baseIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, key, iteratee(value, key, object)); + var oldFFGlobalStorage$1 = /*#__PURE__*/Object.freeze({ + default: oldFFGlobalStorage, + __moduleExports: oldFFGlobalStorage, + name: oldFFGlobalStorage_1, + read: oldFFGlobalStorage_2, + write: oldFFGlobalStorage_3, + each: oldFFGlobalStorage_4, + remove: oldFFGlobalStorage_5, + clearAll: oldFFGlobalStorage_6 }); - return result; -} - -function behaviorPaste(context) { - var keybinding = d3keybinding('paste'); - - - function doPaste() { - event.preventDefault(); - - var baseGraph = context.graph(), - mouse = context.mouse(), - projection = context.projection, - viewport = geoExtent$$1(projection.clipExtent()).polygon(); - if (!geoPointInPolygon(mouse, viewport)) return; + // oldIE-userDataStorage provides storage for Internet Explorer + // versions 6 and 7, where no localStorage, sessionStorage, etc + // is available. - var extent = geoExtent$$1(), - oldIDs = context.copyIDs(), - oldGraph = context.copyGraph(), - newIDs = []; - if (!oldIDs.length) return; + var Global$3 = util$2.Global; - var action = actionCopyEntities(oldIDs, oldGraph); - context.perform(action); - - var copies = action.copies(); - var originals = invert(mapValues(copies, 'id')); - for (var id in copies) { - var oldEntity = oldGraph.entity(id), - newEntity = copies[id]; + var oldIEUserDataStorage = { + name: 'oldIE-userDataStorage', + write: write$2, + read: read$2, + each: each$4, + remove: remove$4, + clearAll: clearAll$2, + }; - extent._extend(oldEntity.extent(oldGraph)); + var storageName = 'storejs'; + var doc = Global$3.document; + var _withStorageEl = _makeIEStorageElFunction(); + var disable = (Global$3.navigator ? Global$3.navigator.userAgent : '').match(/ (MSIE 8|MSIE 9|MSIE 10)\./); // MSIE 9.x, MSIE 10.x + + function write$2(unfixedKey, data) { + if (disable) { return } + var fixedKey = fixKey(unfixedKey); + _withStorageEl(function(storageEl) { + storageEl.setAttribute(fixedKey, data); + storageEl.save(storageName); + }); + } + + function read$2(unfixedKey) { + if (disable) { return } + var fixedKey = fixKey(unfixedKey); + var res = null; + _withStorageEl(function(storageEl) { + res = storageEl.getAttribute(fixedKey); + }); + return res + } + + function each$4(callback) { + _withStorageEl(function(storageEl) { + var attributes = storageEl.XMLDocument.documentElement.attributes; + for (var i=attributes.length-1; i>=0; i--) { + var attr = attributes[i]; + callback(storageEl.getAttribute(attr.name), attr.name); + } + }); + } + + function remove$4(unfixedKey) { + var fixedKey = fixKey(unfixedKey); + _withStorageEl(function(storageEl) { + storageEl.removeAttribute(fixedKey); + storageEl.save(storageName); + }); + } + + function clearAll$2() { + _withStorageEl(function(storageEl) { + var attributes = storageEl.XMLDocument.documentElement.attributes; + storageEl.load(storageName); + for (var i=attributes.length-1; i>=0; i--) { + storageEl.removeAttribute(attributes[i].name); + } + storageEl.save(storageName); + }); + } + + // Helpers + ////////// + + // In IE7, keys cannot start with a digit or contain certain chars. + // See https://github.com/marcuswestin/store.js/issues/40 + // See https://github.com/marcuswestin/store.js/issues/83 + var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g"); + function fixKey(key) { + return key.replace(/^\d/, '___$&').replace(forbiddenCharsRegex, '___') + } + + function _makeIEStorageElFunction() { + if (!doc || !doc.documentElement || !doc.documentElement.addBehavior) { + return null + } + var scriptTag = 'script', + storageOwner, + storageContainer, + storageEl; + + // Since #userData storage applies only to specific paths, we need to + // somehow link our data to a specific path. We choose /favicon.ico + // as a pretty safe option, since all browsers already make a request to + // this URL anyway and being a 404 will not hurt us here. We wrap an + // iframe pointing to the favicon in an ActiveXObject(htmlfile) object + // (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx) + // since the iframe access rules appear to allow direct access and + // manipulation of the document element, even for a 404 page. This + // document can be used instead of the current document (which would + // have been limited to the current path) to perform #userData storage. + try { + /* global ActiveXObject */ + storageContainer = new ActiveXObject('htmlfile'); + storageContainer.open(); + storageContainer.write('<'+scriptTag+'>document.w=window'); + storageContainer.close(); + storageOwner = storageContainer.w.frames[0].document; + storageEl = storageOwner.createElement('div'); + } catch(e) { + // somehow ActiveXObject instantiation failed (perhaps some special + // security settings or otherwse), fall back to per-path storage + storageEl = doc.createElement('div'); + storageOwner = doc.body; + } + + return function(storeFunction) { + var args = [].slice.call(arguments, 0); + args.unshift(storageEl); + // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx + // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx + storageOwner.appendChild(storageEl); + storageEl.addBehavior('#default#userData'); + storageEl.load(storageName); + storeFunction.apply(this, args); + storageOwner.removeChild(storageEl); + return + } + } + var oldIEUserDataStorage_1 = oldIEUserDataStorage.name; + var oldIEUserDataStorage_2 = oldIEUserDataStorage.write; + var oldIEUserDataStorage_3 = oldIEUserDataStorage.read; + var oldIEUserDataStorage_4 = oldIEUserDataStorage.each; + var oldIEUserDataStorage_5 = oldIEUserDataStorage.remove; + var oldIEUserDataStorage_6 = oldIEUserDataStorage.clearAll; + + var oldIEUserDataStorage$1 = /*#__PURE__*/Object.freeze({ + default: oldIEUserDataStorage, + __moduleExports: oldIEUserDataStorage, + name: oldIEUserDataStorage_1, + write: oldIEUserDataStorage_2, + read: oldIEUserDataStorage_3, + each: oldIEUserDataStorage_4, + remove: oldIEUserDataStorage_5, + clearAll: oldIEUserDataStorage_6 + }); - // Exclude child nodes from newIDs if their parent way was also copied. - var parents = context.graph().parentWays(newEntity), - parentCopied = false; - for (var i = 0; i < parents.length; i++) { - if (originals[parents[i].id]) { - parentCopied = true; - break; - } - } + // cookieStorage is useful Safari private browser mode, where localStorage + // doesn't work but cookies do. This implementation is adopted from + // https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage - if (!parentCopied) { - newIDs.push(newEntity.id); - } - } - // Put pasted objects where mouse pointer is.. - var center = projection(extent.center()), - delta = [ mouse[0] - center[0], mouse[1] - center[1] ]; + var Global$4 = util$2.Global; + var trim$1 = util$2.trim; - context.perform(actionMove(newIDs, delta, projection)); - context.enter(modeMove$$1(context, newIDs, baseGraph)); - } + var cookieStorage = { + name: 'cookieStorage', + read: read$3, + write: write$3, + each: each$5, + remove: remove$5, + clearAll: clearAll$3, + }; + var doc$1 = Global$4.document; + + function read$3(key) { + if (!key || !_has(key)) { return null } + var regexpStr = "(?:^|.*;\\s*)" + + escape(key).replace(/[\-\.\+\*]/g, "\\$&") + + "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"; + return unescape(doc$1.cookie.replace(new RegExp(regexpStr), "$1")) + } + + function each$5(callback) { + var cookies = doc$1.cookie.split(/; ?/g); + for (var i = cookies.length - 1; i >= 0; i--) { + if (!trim$1(cookies[i])) { + continue + } + var kvp = cookies[i].split('='); + var key = unescape(kvp[0]); + var val = unescape(kvp[1]); + callback(val, key); + } + } + + function write$3(key, data) { + if(!key) { return } + doc$1.cookie = escape(key) + "=" + escape(data) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/"; + } + + function remove$5(key) { + if (!key || !_has(key)) { + return + } + doc$1.cookie = escape(key) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/"; + } + + function clearAll$3() { + each$5(function(_, key) { + remove$5(key); + }); + } + + function _has(key) { + return (new RegExp("(?:^|;\\s*)" + escape(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(doc$1.cookie) + } + var cookieStorage_1 = cookieStorage.name; + var cookieStorage_2 = cookieStorage.read; + var cookieStorage_3 = cookieStorage.write; + var cookieStorage_4 = cookieStorage.each; + var cookieStorage_5 = cookieStorage.remove; + var cookieStorage_6 = cookieStorage.clearAll; + + var cookieStorage$1 = /*#__PURE__*/Object.freeze({ + default: cookieStorage, + __moduleExports: cookieStorage, + name: cookieStorage_1, + read: cookieStorage_2, + write: cookieStorage_3, + each: cookieStorage_4, + remove: cookieStorage_5, + clearAll: cookieStorage_6 + }); - function paste() { - keybinding.on(uiCmd('⌘V'), doPaste); - d3_select(document).call(keybinding); - return paste; - } + var Global$5 = util$2.Global; + var sessionStorage_1 = { + name: 'sessionStorage', + read: read$4, + write: write$4, + each: each$6, + remove: remove$6, + clearAll: clearAll$4 + }; - paste.off = function() { - d3_select(document).call(keybinding.off); - }; + function sessionStorage() { + return Global$5.sessionStorage + } + function read$4(key) { + return sessionStorage().getItem(key) + } - return paste; -} + function write$4(key, data) { + return sessionStorage().setItem(key, data) + } -function behaviorSelect(context) { - var lastMouse = null; - var suppressMenu = true; - var tolerance = 4; - var p1 = null; + function each$6(fn) { + for (var i = sessionStorage().length - 1; i >= 0; i--) { + var key = sessionStorage().key(i); + fn(read$4(key), key); + } + } + function remove$6(key) { + return sessionStorage().removeItem(key) + } - function point$$1() { - return d3_mouse(context.container().node()); - } + function clearAll$4() { + return sessionStorage().clear() + } + var sessionStorage_2 = sessionStorage_1.name; + var sessionStorage_3 = sessionStorage_1.read; + var sessionStorage_4 = sessionStorage_1.write; + var sessionStorage_5 = sessionStorage_1.each; + var sessionStorage_6 = sessionStorage_1.remove; + var sessionStorage_7 = sessionStorage_1.clearAll; + var sessionStorage$1 = /*#__PURE__*/Object.freeze({ + default: sessionStorage_1, + __moduleExports: sessionStorage_1, + name: sessionStorage_2, + read: sessionStorage_3, + write: sessionStorage_4, + each: sessionStorage_5, + remove: sessionStorage_6, + clearAll: sessionStorage_7 + }); - function keydown() { - var e = event; - if (e && e.shiftKey) { - context.surface() - .classed('behavior-multiselect', true); - } + // memoryStorage is a useful last fallback to ensure that the store + // is functions (meaning store.get(), store.set(), etc will all function). + // However, stored values will not persist when the browser navigates to + // a new page or reloads the current page. + + var memoryStorage_1 = { + name: 'memoryStorage', + read: read$5, + write: write$5, + each: each$7, + remove: remove$7, + clearAll: clearAll$5, + }; - if (e && e.keyCode === 93) { // context menu - e.preventDefault(); - e.stopPropagation(); - } - } + var memoryStorage = {}; + function read$5(key) { + return memoryStorage[key] + } - function keyup() { - var e = event; - if (!e || !e.shiftKey) { - context.surface() - .classed('behavior-multiselect', false); - } + function write$5(key, data) { + memoryStorage[key] = data; + } + function each$7(callback) { + for (var key in memoryStorage) { + if (memoryStorage.hasOwnProperty(key)) { + callback(memoryStorage[key], key); + } + } + } - if (e && e.keyCode === 93) { // context menu - e.preventDefault(); - e.stopPropagation(); - contextmenu(); - } - } + function remove$7(key) { + delete memoryStorage[key]; + } + function clearAll$5(key) { + memoryStorage = {}; + } + var memoryStorage_2 = memoryStorage_1.name; + var memoryStorage_3 = memoryStorage_1.read; + var memoryStorage_4 = memoryStorage_1.write; + var memoryStorage_5 = memoryStorage_1.each; + var memoryStorage_6 = memoryStorage_1.remove; + var memoryStorage_7 = memoryStorage_1.clearAll; - function mousedown() { - if (!p1) p1 = point$$1(); - d3_select(window) - .on('mouseup.select', mouseup, true); + var memoryStorage$1 = /*#__PURE__*/Object.freeze({ + default: memoryStorage_1, + __moduleExports: memoryStorage_1, + name: memoryStorage_2, + read: memoryStorage_3, + write: memoryStorage_4, + each: memoryStorage_5, + remove: memoryStorage_6, + clearAll: memoryStorage_7 + }); - var isShowAlways = +context.storage('edit-menu-show-always') === 1; - suppressMenu = !isShowAlways; - } + var require$$0$2 = ( localStorage$2 && localStorage_1 ) || localStorage$2; + var require$$1$2 = ( oldFFGlobalStorage$1 && oldFFGlobalStorage ) || oldFFGlobalStorage$1; - function mousemove() { - if (event) lastMouse = event; - } + var require$$2$1 = ( oldIEUserDataStorage$1 && oldIEUserDataStorage ) || oldIEUserDataStorage$1; + var require$$3$1 = ( cookieStorage$1 && cookieStorage ) || cookieStorage$1; - function mouseup() { - click(); - } + var require$$4$1 = ( sessionStorage$1 && sessionStorage_1 ) || sessionStorage$1; + var require$$5$1 = ( memoryStorage$1 && memoryStorage_1 ) || memoryStorage$1; - function contextmenu() { - var e = event; - e.preventDefault(); - e.stopPropagation(); + var all$3 = [ + // Listed in order of usage preference + require$$0$2, + require$$1$2, + require$$2$1, + require$$3$1, + require$$4$1, + require$$5$1 + ]; - if (!+e.clientX && !+e.clientY) { - if (lastMouse) { - e.sourceEvent = lastMouse; - } else { - return; - } - } + var all$4 = /*#__PURE__*/Object.freeze({ + default: all$3, + __moduleExports: all$3 + }); - if (!p1) p1 = point$$1(); - suppressMenu = false; - click(); - } + /* eslint-disable */ + + // json2.js + // 2016-10-28 + // Public Domain. + // NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. + // See http://www.JSON.org/js.html + // This code should be minified before deployment. + // See http://javascript.crockford.com/jsmin.html + + // USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO + // NOT CONTROL. + + // This file creates a global JSON object containing two methods: stringify + // and parse. This file provides the ES5 JSON capability to ES3 systems. + // If a project might run on IE8 or earlier, then this file should be included. + // This file does nothing on ES5 systems. + + // JSON.stringify(value, replacer, space) + // value any JavaScript value, usually an object or array. + // replacer an optional parameter that determines how object + // values are stringified for objects. It can be a + // function or an array of strings. + // space an optional parameter that specifies the indentation + // of nested structures. If it is omitted, the text will + // be packed without extra whitespace. If it is a number, + // it will specify the number of spaces to indent at each + // level. If it is a string (such as "\t" or " "), + // it contains the characters used to indent at each level. + // This method produces a JSON text from a JavaScript value. + // When an object value is found, if the object contains a toJSON + // method, its toJSON method will be called and the result will be + // stringified. A toJSON method does not serialize: it returns the + // value represented by the name/value pair that should be serialized, + // or undefined if nothing should be serialized. The toJSON method + // will be passed the key associated with the value, and this will be + // bound to the value. + + // For example, this would serialize Dates as ISO strings. + + // Date.prototype.toJSON = function (key) { + // function f(n) { + // // Format integers to have at least two digits. + // return (n < 10) + // ? "0" + n + // : n; + // } + // return this.getUTCFullYear() + "-" + + // f(this.getUTCMonth() + 1) + "-" + + // f(this.getUTCDate()) + "T" + + // f(this.getUTCHours()) + ":" + + // f(this.getUTCMinutes()) + ":" + + // f(this.getUTCSeconds()) + "Z"; + // }; + + // You can provide an optional replacer method. It will be passed the + // key and value of each member, with this bound to the containing + // object. The value that is returned from your method will be + // serialized. If your method returns undefined, then the member will + // be excluded from the serialization. + + // If the replacer parameter is an array of strings, then it will be + // used to select the members to be serialized. It filters the results + // such that only members with keys listed in the replacer array are + // stringified. + + // Values that do not have JSON representations, such as undefined or + // functions, will not be serialized. Such values in objects will be + // dropped; in arrays they will be replaced with null. You can use + // a replacer function to replace those with JSON values. + + // JSON.stringify(undefined) returns undefined. + + // The optional space parameter produces a stringification of the + // value that is filled with line breaks and indentation to make it + // easier to read. + + // If the space parameter is a non-empty string, then that string will + // be used for indentation. If the space parameter is a number, then + // the indentation will be that many spaces. + + // Example: + + // text = JSON.stringify(["e", {pluribus: "unum"}]); + // // text is '["e",{"pluribus":"unum"}]' + + // text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t"); + // // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' + + // text = JSON.stringify([new Date()], function (key, value) { + // return this[key] instanceof Date + // ? "Date(" + this[key] + ")" + // : value; + // }); + // // text is '["Date(---current time---)"]' + + // JSON.parse(text, reviver) + // This method parses a JSON text to produce an object or array. + // It can throw a SyntaxError exception. + + // The optional reviver parameter is a function that can filter and + // transform the results. It receives each of the keys and values, + // and its return value is used instead of the original value. + // If it returns what it received, then the structure is not modified. + // If it returns undefined then the member is deleted. + + // Example: + + // // Parse the text. Values that look like ISO date strings will + // // be converted to Date objects. + + // myData = JSON.parse(text, function (key, value) { + // var a; + // if (typeof value === "string") { + // a = + // /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); + // if (a) { + // return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], + // +a[5], +a[6])); + // } + // } + // return value; + // }); + + // myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { + // var d; + // if (typeof value === "string" && + // value.slice(0, 5) === "Date(" && + // value.slice(-1) === ")") { + // d = new Date(value.slice(5, -1)); + // if (d) { + // return d; + // } + // } + // return value; + // }); + + // This is a reference implementation. You are free to copy, modify, or + // redistribute. + + /*jslint + eval, for, this + */ + + /*property + JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, + getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, + lastIndex, length, parse, prototype, push, replace, slice, stringify, + test, toJSON, toString, valueOf + */ + + + // Create a JSON object only if one does not already exist. We create the + // methods in a closure to avoid creating global variables. + + if (typeof JSON !== "object") { + JSON = {}; + } + + (function () { + + var rx_one = /^[\],:{}\s]*$/; + var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g; + var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g; + var rx_four = /(?:^|:|,)(?:\s*\[)+/g; + var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + + function f(n) { + // Format integers to have at least two digits. + return n < 10 + ? "0" + n + : n; + } + function this_value() { + return this.valueOf(); + } - function click() { - d3_select(window) - .on('mouseup.select', null, true); + if (typeof Date.prototype.toJSON !== "function") { - if (!p1) return; - var p2 = point$$1(); - var dist = geoVecLength(p1, p2); + Date.prototype.toJSON = function () { - p1 = null; - if (dist > tolerance) { - return; - } + return isFinite(this.valueOf()) + ? this.getUTCFullYear() + "-" + + f(this.getUTCMonth() + 1) + "-" + + f(this.getUTCDate()) + "T" + + f(this.getUTCHours()) + ":" + + f(this.getUTCMinutes()) + ":" + + f(this.getUTCSeconds()) + "Z" + : null; + }; - var isMultiselect = event.shiftKey || d3_select('#surface .lasso').node(); - var isShowAlways = +context.storage('edit-menu-show-always') === 1; - var datum = event.target.__data__ || (lastMouse && lastMouse.target.__data__); - var mode = context.mode(); + Boolean.prototype.toJSON = this_value; + Number.prototype.toJSON = this_value; + String.prototype.toJSON = this_value; + } - var entity = datum && datum.properties && datum.properties.entity; - if (entity) datum = entity; + var gap; + var indent; + var meta; + var rep; - if (datum && datum.type === 'midpoint') { - datum = datum.parents[0]; - } - if (!(datum instanceof osmEntity$$1)) { - // clicked nothing.. - if (!isMultiselect && mode.id !== 'browse') { - context.enter(modeBrowse(context)); - } + function quote(string) { - } else { - // clicked an entity.. - var selectedIDs = context.selectedIDs(); - - if (!isMultiselect) { - if (selectedIDs.length > 1 && (!suppressMenu && !isShowAlways)) { - // multiple things already selected, just show the menu... - mode.suppressMenu(false).reselect(); - } else { - // select a single thing.. - context.enter(modeSelect(context, [datum.id]).suppressMenu(suppressMenu)); - } + // If the string contains no control characters, no quote characters, and no + // backslash characters, then we can safely slap some quotes around it. + // Otherwise we must also replace the offending characters with safe escape + // sequences. - } else { - if (selectedIDs.indexOf(datum.id) !== -1) { - // clicked entity is already in the selectedIDs list.. - if (!suppressMenu && !isShowAlways) { - // don't deselect clicked entity, just show the menu. - mode.suppressMenu(false).reselect(); - } else { - // deselect clicked entity, then reenter select mode or return to browse mode.. - selectedIDs = without(selectedIDs, datum.id); - context.enter(selectedIDs.length ? modeSelect(context, selectedIDs) : modeBrowse(context)); - } - } else { - // clicked entity is not in the selected list, add it.. - selectedIDs = selectedIDs.concat([datum.id]); - context.enter(modeSelect(context, selectedIDs).suppressMenu(suppressMenu)); - } - } - } + rx_escapable.lastIndex = 0; + return rx_escapable.test(string) + ? "\"" + string.replace(rx_escapable, function (a) { + var c = meta[a]; + return typeof c === "string" + ? c + : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4); + }) + "\"" + : "\"" + string + "\""; + } - // reset for next time.. - suppressMenu = true; - } + function str(key, holder) { - var behavior = function(selection$$1) { - lastMouse = null; - suppressMenu = true; - p1 = null; + // Produce a string from holder[key]. - d3_select(window) - .on('keydown.select', keydown) - .on('keyup.select', keyup) - .on('contextmenu.select-window', function() { - // Edge and IE really like to show the contextmenu on the - // menubar when user presses a keyboard menu button - // even after we've already preventdefaulted the key event. - var e = event; - if (+e.clientX === 0 && +e.clientY === 0) { - event.preventDefault(); - event.stopPropagation(); - } - }); + var i; // The loop counter. + var k; // The member key. + var v; // The member value. + var length; + var mind = gap; + var partial; + var value = holder[key]; - selection$$1 - .on('mousedown.select', mousedown) - .on('mousemove.select', mousemove) - .on('contextmenu.select', contextmenu); + // If the value has a toJSON method, call it to obtain a replacement value. - if (event && event.shiftKey) { - context.surface() - .classed('behavior-multiselect', true); - } - }; + if (value && typeof value === "object" && + typeof value.toJSON === "function") { + value = value.toJSON(key); + } + // If we were called with a replacer function, then call the replacer to + // obtain a replacement value. - behavior.off = function(selection$$1) { - d3_select(window) - .on('keydown.select', null) - .on('keyup.select', null) - .on('contextmenu.select-window', null) - .on('mouseup.select', null, true); + if (typeof rep === "function") { + value = rep.call(holder, key, value); + } - selection$$1 - .on('mousedown.select', null) - .on('mousemove.select', null) - .on('contextmenu.select', null); + // What happens next depends on the value's type. - context.surface() - .classed('behavior-multiselect', false); - }; + switch (typeof value) { + case "string": + return quote(value); + case "number": + + // JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) + ? String(value) + : "null"; + + case "boolean": + case "null": + + // If the value is a boolean or null, convert it to a string. Note: + // typeof null does not produce "null". The case is included here in + // the remote chance that this gets fixed someday. + + return String(value); + + // If the type is "object", we might be dealing with an object or an array or + // null. + + case "object": + + // Due to a specification blunder in ECMAScript, typeof null is "object", + // so watch out for that case. + + if (!value) { + return "null"; + } + + // Make an array to hold the partial results of stringifying this object value. + + gap += indent; + partial = []; + + // Is the value an array? + + if (Object.prototype.toString.apply(value) === "[object Array]") { + + // The value is an array. Stringify every element. Use null as a placeholder + // for non-JSON values. + + length = value.length; + for (i = 0; i < length; i += 1) { + partial[i] = str(i, value) || "null"; + } + + // Join all of the elements together, separated with commas, and wrap them in + // brackets. + + v = partial.length === 0 + ? "[]" + : gap + ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]" + : "[" + partial.join(",") + "]"; + gap = mind; + return v; + } + + // If the replacer is an array, use it to select the members to be stringified. + + if (rep && typeof rep === "object") { + length = rep.length; + for (i = 0; i < length; i += 1) { + if (typeof rep[i] === "string") { + k = rep[i]; + v = str(k, value); + if (v) { + partial.push(quote(k) + ( + gap + ? ": " + : ":" + ) + v); + } + } + } + } else { + + // Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = str(k, value); + if (v) { + partial.push(quote(k) + ( + gap + ? ": " + : ":" + ) + v); + } + } + } + } + + // Join all of the member texts together, separated with commas, + // and wrap them in braces. + + v = partial.length === 0 + ? "{}" + : gap + ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}" + : "{" + partial.join(",") + "}"; + gap = mind; + return v; + } + } - return behavior; -} + // If the JSON object does not yet have a stringify method, give it one. + + if (typeof JSON.stringify !== "function") { + meta = { // table of character substitutions + "\b": "\\b", + "\t": "\\t", + "\n": "\\n", + "\f": "\\f", + "\r": "\\r", + "\"": "\\\"", + "\\": "\\\\" + }; + JSON.stringify = function (value, replacer, space) { -function d3geoTile() { - var size = [960, 500], - scale = 256, - scaleExtent = [0, 20], - translate = [size[0] / 2, size[1] / 2], - zoomDelta = 0; + // The stringify method takes a value and an optional replacer, and an optional + // space parameter, and returns a JSON text. The replacer can be a function + // that can replace values, or an array of strings that will select the keys. + // A default replacer method can be provided. Use of the space parameter can + // produce text that is more easily readable. - function bound(_) { - return Math.min(scaleExtent[1], Math.max(scaleExtent[0], _)); - } + var i; + gap = ""; + indent = ""; - function tile() { - var z = Math.max(Math.log(scale) / Math.LN2 - 8, 0), - z0 = bound(Math.round(z + zoomDelta)), - k = Math.pow(2, z - z0 + 8), - origin = [(translate[0] - scale / 2) / k, (translate[1] - scale / 2) / k], - tiles = [], - cols = d3_range(Math.max(0, Math.floor(-origin[0])), Math.max(0, Math.ceil(size[0] / k - origin[0]))), - rows = d3_range(Math.max(0, Math.floor(-origin[1])), Math.max(0, Math.ceil(size[1] / k - origin[1]))); + // If the space parameter is a number, make an indent string containing that + // many spaces. - rows.forEach(function(y) { - cols.forEach(function(x) { - tiles.push([x, y, z0]); - }); - }); + if (typeof space === "number") { + for (i = 0; i < space; i += 1) { + indent += " "; + } - tiles.translate = origin; - tiles.scale = k; + // If the space parameter is a string, it will be used as the indent string. - return tiles; - } + } else if (typeof space === "string") { + indent = space; + } - tile.scaleExtent = function(_) { - if (!arguments.length) return scaleExtent; - scaleExtent = _; - return tile; - }; + // If there is a replacer, it must be a function or an array. + // Otherwise, throw an error. - tile.size = function(_) { - if (!arguments.length) return size; - size = _; - return tile; - }; + rep = replacer; + if (replacer && typeof replacer !== "function" && + (typeof replacer !== "object" || + typeof replacer.length !== "number")) { + throw new Error("JSON.stringify"); + } - tile.scale = function(_) { - if (!arguments.length) return scale; - scale = _; - return tile; - }; + // Make a fake root object containing our value under the key of "". + // Return the result of stringifying the value. - tile.translate = function(_) { - if (!arguments.length) return translate; - translate = _; - return tile; - }; + return str("", {"": value}); + }; + } - tile.zoomDelta = function(_) { - if (!arguments.length) return zoomDelta; - zoomDelta = +_; - return tile; - }; - return tile; -} + // If the JSON object does not yet have a parse method, give it one. + + if (typeof JSON.parse !== "function") { + JSON.parse = function (text, reviver) { + + // The parse method takes a text and an optional reviver function, and returns + // a JavaScript value if the text is a valid JSON text. + + var j; + + function walk(holder, key) { + + // The walk method is used to recursively walk the resulting structure so + // that modifications can be made. + + var k; + var v; + var value = holder[key]; + if (value && typeof value === "object") { + for (k in value) { + if (Object.prototype.hasOwnProperty.call(value, k)) { + v = walk(value, k); + if (v !== undefined) { + value[k] = v; + } else { + delete value[k]; + } + } + } + } + return reviver.call(holder, key, value); + } + + + // Parsing happens in four stages. In the first stage, we replace certain + // Unicode characters with escape sequences. JavaScript handles many characters + // incorrectly, either silently deleting them, or treating them as line endings. + + text = String(text); + rx_dangerous.lastIndex = 0; + if (rx_dangerous.test(text)) { + text = text.replace(rx_dangerous, function (a) { + return "\\u" + + ("0000" + a.charCodeAt(0).toString(16)).slice(-4); + }); + } + + // In the second stage, we run the text against regular expressions that look + // for non-JSON patterns. We are especially concerned with "()" and "new" + // because they can cause invocation, and "=" because it can cause mutation. + // But just to be safe, we want to reject all unexpected forms. + + // We split the second stage into 4 regexp operations in order to work around + // crippling inefficiencies in IE's and Safari's regexp engines. First we + // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we + // replace all simple value tokens with "]" characters. Third, we delete all + // open brackets that follow a colon or comma or that begin the text. Finally, + // we look to see that the remaining characters are only whitespace or "]" or + // "," or ":" or "{" or "}". If that is so, then the text is safe for eval. + + if ( + rx_one.test( + text + .replace(rx_two, "@") + .replace(rx_three, "]") + .replace(rx_four, "") + ) + ) { + + // In the third stage we use the eval function to compile the text into a + // JavaScript structure. The "{" operator is subject to a syntactic ambiguity + // in JavaScript: it can begin a block or an object literal. We wrap the text + // in parens to eliminate the ambiguity. + + j = eval("(" + text + ")"); + + // In the optional fourth stage, we recursively walk the new structure, passing + // each name/value pair to a reviver function for possible transformation. + + return (typeof reviver === "function") + ? walk({"": j}, "") + : j; + } + + // If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError("JSON.parse"); + }; + } + }()); -/* global Mapillary:false */ + var json2$1 = json2Plugin; + function json2Plugin() { + + return {} + } -var apibase = 'https://a.mapillary.com/v3/', - viewercss = 'mapillary-js/mapillary.min.css', - viewerjs = 'mapillary-js/mapillary.min.js', - clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi', - maxResults = 1000, - tileZoom = 14, - dispatch$1 = dispatch('loadedImages', 'loadedSigns'), - _mlyFallback = false, - _mlyCache, - _mlyClicks, - _mlySelectedImage, - _mlySignDefs, - _mlySignSprite, - _mlyViewer; + var json2$2 = /*#__PURE__*/Object.freeze({ + default: json2$1, + __moduleExports: json2$1 + }); + var engine = ( storeEngine$1 && storeEngine ) || storeEngine$1; -function abortRequest(i) { - i.abort(); -} + var storages = ( all$4 && all$3 ) || all$4; + var require$$0$3 = ( json2$2 && json2$1 ) || json2$2; -function nearNullIsland(x, y, z) { - if (z >= 7) { - var center = Math.pow(2, z - 1), - width = Math.pow(2, z - 6), - min$$1 = center - (width / 2), - max$$1 = center + (width / 2) - 1; - return x >= min$$1 && x <= max$$1 && y >= min$$1 && y <= max$$1; - } - return false; -} - - -function maxPageAtZoom(z) { - if (z < 15) return 2; - if (z === 15) return 5; - if (z === 16) return 10; - if (z === 17) return 20; - if (z === 18) return 40; - if (z > 18) return 80; -} - - -function localeTimestamp(s) { - if (!s) return null; - var detected = utilDetect(); - var options = { - day: 'numeric', month: 'short', year: 'numeric', - hour: 'numeric', minute: 'numeric', second: 'numeric', - timeZone: 'UTC' - }; - var d = new Date(s); - if (isNaN(d.getTime())) return null; - return d.toLocaleString(detected.locale, options); -} - - -function getTiles(projection) { - var s = projection.scale() * 2 * Math.PI, - z = Math.max(Math.log(s) / Math.log(2) - 8, 0), - ts = 256 * Math.pow(2, z - tileZoom), - origin = [ - s / 2 - projection.translate()[0], - s / 2 - projection.translate()[1]]; - - return d3geoTile() - .scaleExtent([tileZoom, tileZoom]) - .scale(s) - .size(projection.clipExtent()[1]) - .translate(projection.translate())() - .map(function(tile) { - var x = tile[0] * ts - origin[0], - y = tile[1] * ts - origin[1]; - - return { - id: tile.toString(), - xyz: tile, - extent: geoExtent$$1( - projection.invert([x, y + ts]), - projection.invert([x + ts, y]) - ) - }; - }); -} + var plugins = [require$$0$3]; + var store_legacy = engine.createStore(storages, plugins); -function loadTiles(which, url, projection) { - var s = projection.scale() * 2 * Math.PI, - currZoom = Math.floor(Math.max(Math.log(s) / Math.log(2) - 8, 0)); + var store_legacy$1 = /*#__PURE__*/Object.freeze({ + default: store_legacy, + __moduleExports: store_legacy + }); - var tiles = getTiles(projection).filter(function(t) { - return !nearNullIsland(t.xyz[0], t.xyz[1], t.xyz[2]); - }); + var ohauth$2 = ( ohauth$1 && ohauth_1 ) || ohauth$1; - filter(which.inflight, function(v, k) { - var wanted = find$1(tiles, function(tile) { return k === (tile.id + ',0'); }); - if (!wanted) delete which.inflight[k]; - return !wanted; - }).map(abortRequest); + var resolveUrl$2 = ( resolveUrl$1 && resolveUrl ) || resolveUrl$1; - tiles.forEach(function(tile) { - loadNextTilePage(which, currZoom, url, tile); - }); -} - - -function loadNextTilePage(which, currZoom, url, tile) { - var cache = _mlyCache[which], - rect = tile.extent.rectangle(), - maxPages = maxPageAtZoom(currZoom), - nextPage = cache.nextPage[tile.id] || 0, - nextURL = cache.nextURL[tile.id] || url + - utilQsString({ - per_page: maxResults, - page: nextPage, - client_id: clientId, - bbox: [rect[0], rect[1], rect[2], rect[3]].join(','), - }); + var store = ( store_legacy$1 && store_legacy ) || store_legacy$1; - if (nextPage > maxPages) return; - - var id = tile.id + ',' + String(nextPage); - if (cache.loaded[id] || cache.inflight[id]) return; - cache.inflight[id] = d3_request(nextURL) - .mimeType('application/json') - .response(function(xhr) { - var linkHeader = xhr.getResponseHeader('Link'); - if (linkHeader) { - var pagination = parsePagination(xhr.getResponseHeader('Link')); - if (pagination.next) { - cache.nextURL[tile.id] = pagination.next; - } - } - return JSON.parse(xhr.responseText); - }) - .get(function(err, data) { - cache.loaded[id] = true; - delete cache.inflight[id]; - if (err || !data.features || !data.features.length) return; - - var features = data.features.map(function(feature) { - var loc = feature.geometry.coordinates, - d; - - if (which === 'images') { - d = { - loc: loc, - key: feature.properties.key, - ca: feature.properties.ca, - captured_at: feature.properties.captured_at, - captured_by: feature.properties.username, - pano: feature.properties.pano - }; - cache.forImageKey[d.key] = d; // cache imageKey -> image - - } else if (which === 'sequences') { - var sequenceKey = feature.properties.key; - cache.lineString[sequenceKey] = feature; // cache sequenceKey -> lineString - feature.properties.coordinateProperties.image_keys.forEach(function(imageKey) { - cache.forImageKey[imageKey] = sequenceKey; // cache imageKey -> sequenceKey - }); - return false; // because no `d` data worth loading into an rbush - - } else if (which === 'objects') { - d = { - loc: loc, - key: feature.properties.key, - value: feature.properties.value, - package: feature.properties.package, - detections: feature.properties.detections - }; - - // cache imageKey -> detectionKey - feature.properties.detections.forEach(function(detection) { - var imageKey = detection.image_key; - var detectionKey = detection.detection_key; - if (!_mlyCache.detections[imageKey]) { - _mlyCache.detections[imageKey] = {}; - } - if (!_mlyCache.detections[imageKey][detectionKey]) { - _mlyCache.detections[imageKey][detectionKey] = {}; - } - }); - } - - return { - minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d - }; - - }).filter(Boolean); - - cache.rtree.load(features); - - if (which === 'images' || which === 'sequences') { - dispatch$1.call('loadedImages'); - } else if (which === 'objects') { - dispatch$1.call('loadedSigns'); - } + // # osm-auth + // + // This code is only compatible with IE10+ because the [XDomainRequest](http://bit.ly/LfO7xo) + // object, IE<10's idea of [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing), + // does not support custom headers, which this uses everywhere. + var osmAuth = function(o) { - if (data.features.length === maxResults) { // more pages to load - cache.nextPage[tile.id] = nextPage + 1; - loadNextTilePage(which, currZoom, url, tile); - } else { - cache.nextPage[tile.id] = Infinity; // no more pages to load - } - }); -} - -// extract links to pages of API results -function parsePagination(links) { - return links.split(',').map(function(rel) { - var elements = rel.split(';'); - if (elements.length === 2) { - return [ - /<(.+)>/.exec(elements[0])[1], - /rel="(.+)"/.exec(elements[1])[1] - ]; - } else { - return ['','']; - } - }).reduce(function(pagination, val) { - pagination[val[1]] = val[0]; - return pagination; - }, {}); -} - - -// partition viewport into `psize` x `psize` regions -function partitionViewport(psize, projection) { - var dimensions = projection.clipExtent()[1]; - psize = psize || 16; - var cols = d3_range(0, dimensions[0], psize), - rows = d3_range(0, dimensions[1], psize), - partitions = []; - - rows.forEach(function(y) { - cols.forEach(function(x) { - var min$$1 = [x, y + psize], - max$$1 = [x + psize, y]; - partitions.push( - geoExtent$$1(projection.invert(min$$1), projection.invert(max$$1))); - }); - }); + var oauth = {}; - return partitions; -} + // authenticated users will also have a request token secret, but it's + // not used in transactions with the server + oauth.authenticated = function() { + return !!(token('oauth_token') && token('oauth_token_secret')); + }; + oauth.logout = function() { + token('oauth_token', ''); + token('oauth_token_secret', ''); + token('oauth_request_token_secret', ''); + return oauth; + }; -// no more than `limit` results per partition. -function searchLimited(psize, limit, projection, rtree) { - limit = limit || 3; + // TODO: detect lack of click event + oauth.authenticate = function(callback) { + if (oauth.authenticated()) return callback(); + + oauth.logout(); + + // ## Getting a request token + var params = timenonce(getAuth(o)), + url = o.url + '/oauth/request_token'; + + params.oauth_signature = ohauth$2.signature( + o.oauth_secret, '', + ohauth$2.baseString('POST', url, params)); + + if (!o.singlepage) { + // Create a 600x550 popup window in the center of the screen + var w = 600, h = 550, + settings = [ + ['width', w], ['height', h], + ['left', screen.width / 2 - w / 2], + ['top', screen.height / 2 - h / 2]].map(function(x) { + return x.join('='); + }).join(','), + popup = window.open('about:blank', 'oauth_window', settings); + } - var partitions = partitionViewport(psize, projection); - var results; + // Request a request token. When this is complete, the popup + // window is redirected to OSM's authorization page. + ohauth$2.xhr('POST', url, params, null, {}, reqTokenDone); + o.loading(); + + function reqTokenDone(err, xhr) { + o.done(); + if (err) return callback(err); + var resp = ohauth$2.stringQs(xhr.response); + token('oauth_request_token_secret', resp.oauth_token_secret); + var authorize_url = o.url + '/oauth/authorize?' + ohauth$2.qsString({ + oauth_token: resp.oauth_token, + oauth_callback: resolveUrl$2(o.landing) + }); + + if (o.singlepage) { + location.href = authorize_url; + } else { + popup.location = authorize_url; + } + } - // console.time('previous'); - results = flatten(map$3(partitions, function(extent$$1) { - return rtree.search(extent$$1.bbox()) - .slice(0, limit) - .map(function(d) { return d.data; }); - })); - // console.timeEnd('previous'); + // Called by a function in a landing page, in the popup window. The + // window closes itself. + window.authComplete = function(token) { + var oauth_token = ohauth$2.stringQs(token.split('?')[1]); + get_access_token(oauth_token.oauth_token); + delete window.authComplete; + }; - // console.time('new'); - // results = partitions.reduce(function(result, extent) { - // var found = rtree.search(extent.bbox()) - // .map(function(d) { return d.data; }) - // .sort(function(a, b) { - // return a.loc[1] - b.loc[1]; - // // return a.key.localeCompare(b.key); - // }) - // .slice(0, limit); + // ## Getting an request token + // + // At this point we have an `oauth_token`, brought in from a function + // call on a landing page popup. + function get_access_token(oauth_token) { + var url = o.url + '/oauth/access_token', + params = timenonce(getAuth(o)), + request_token_secret = token('oauth_request_token_secret'); + params.oauth_token = oauth_token; + params.oauth_signature = ohauth$2.signature( + o.oauth_secret, + request_token_secret, + ohauth$2.baseString('POST', url, params)); + + // ## Getting an access token + // + // The final token required for authentication. At this point + // we have a `request token secret` + ohauth$2.xhr('POST', url, params, null, {}, accessTokenDone); + o.loading(); + } - // return (found.length ? result.concat(found) : result); - // }, []); - // console.timeEnd('new'); + function accessTokenDone(err, xhr) { + o.done(); + if (err) return callback(err); + var access_token = ohauth$2.stringQs(xhr.response); + token('oauth_token', access_token.oauth_token); + token('oauth_token_secret', access_token.oauth_token_secret); + callback(null, oauth); + } + }; - return results; -} + oauth.bootstrapToken = function(oauth_token, callback) { + // ## Getting an request token + // At this point we have an `oauth_token`, brought in from a function + // call on a landing page popup. + function get_access_token(oauth_token) { + var url = o.url + '/oauth/access_token', + params = timenonce(getAuth(o)), + request_token_secret = token('oauth_request_token_secret'); + params.oauth_token = oauth_token; + params.oauth_signature = ohauth$2.signature( + o.oauth_secret, + request_token_secret, + ohauth$2.baseString('POST', url, params)); + + // ## Getting an access token + // The final token required for authentication. At this point + // we have a `request token secret` + ohauth$2.xhr('POST', url, params, null, {}, accessTokenDone); + o.loading(); + } + function accessTokenDone(err, xhr) { + o.done(); + if (err) return callback(err); + var access_token = ohauth$2.stringQs(xhr.response); + token('oauth_token', access_token.oauth_token); + token('oauth_token_secret', access_token.oauth_token_secret); + callback(null, oauth); + } + get_access_token(oauth_token); + }; -var serviceMapillary = { + // # xhr + // + // A single XMLHttpRequest wrapper that does authenticated calls if the + // user has logged in. + oauth.xhr = function(options, callback) { + if (!oauth.authenticated()) { + if (o.auto) { + return oauth.authenticate(run); + } else { + callback('not authenticated', null); + return; + } + } else { + return run(); + } - init: function() { - if (!_mlyCache) { - this.reset(); - } + function run() { + var params = timenonce(getAuth(o)), + oauth_token_secret = token('oauth_token_secret'), + url = (options.prefix !== false) ? o.url + options.path : options.path, + url_parts = url.replace(/#.*$/, '').split('?', 2), + base_url = url_parts[0], + query = (url_parts.length === 2) ? url_parts[1] : ''; + + // https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1 + if ((!options.options || !options.options.header || + options.options.header['Content-Type'] === 'application/x-www-form-urlencoded') && + options.content) { + params = xtend(params, ohauth$2.stringQs(options.content)); + } + + params.oauth_token = token('oauth_token'); + params.oauth_signature = ohauth$2.signature( + o.oauth_secret, + oauth_token_secret, + ohauth$2.baseString(options.method, base_url, xtend(params, ohauth$2.stringQs(query))) + ); + + return ohauth$2.xhr(options.method, url, params, options.content, options.options, done); + } - this.event = utilRebind(this, dispatch$1, 'on'); - }, + function done(err, xhr) { + if (err) return callback(err); + else if (xhr.responseXML) return callback(err, xhr.responseXML); + else return callback(err, xhr.response); + } + }; - reset: function() { - var cache = _mlyCache; + // pre-authorize this object, if we can just get a token and token_secret + // from the start + oauth.preauth = function(c) { + if (!c) return; + if (c.oauth_token) token('oauth_token', c.oauth_token); + if (c.oauth_token_secret) token('oauth_token_secret', c.oauth_token_secret); + return oauth; + }; - if (cache) { - if (cache.images && cache.images.inflight) { - forEach(cache.images.inflight, abortRequest); - } - if (cache.objects && cache.objects.inflight) { - forEach(cache.objects.inflight, abortRequest); - } - if (cache.sequences && cache.sequences.inflight) { - forEach(cache.sequences.inflight, abortRequest); - } - } + oauth.options = function(_) { + if (!arguments.length) return o; - _mlyCache = { - images: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {} }, - objects: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1() }, - sequences: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {}, lineString: {} }, - detections: {} - }; + o = _; + o.url = o.url || 'https://www.openstreetmap.org'; + o.landing = o.landing || 'land.html'; + o.singlepage = o.singlepage || false; - _mlySelectedImage = null; - _mlyClicks = []; - }, + // Optional loading and loading-done functions for nice UI feedback. + // by default, no-ops + o.loading = o.loading || function() {}; + o.done = o.done || function() {}; + return oauth.preauth(o); + }; - images: function(projection) { - var psize = 16, limit = 3; - return searchLimited(psize, limit, projection, _mlyCache.images.rtree); - }, + // 'stamp' an authentication object from `getAuth()` + // with a [nonce](http://en.wikipedia.org/wiki/Cryptographic_nonce) + // and timestamp + function timenonce(o) { + o.oauth_timestamp = ohauth$2.timestamp(); + o.oauth_nonce = ohauth$2.nonce(); + return o; + } + // get/set tokens. These are prefixed with the base URL so that `osm-auth` + // can be used with multiple APIs and the keys in `localStorage` + // will not clash + var token; - signs: function(projection) { - var psize = 32, limit = 3; - return searchLimited(psize, limit, projection, _mlyCache.objects.rtree); - }, + if (store.enabled) { + token = function (x, y) { + if (arguments.length === 1) return store.get(o.url + x); + else if (arguments.length === 2) return store.set(o.url + x, y); + }; + } else { + var storage = {}; + token = function (x, y) { + if (arguments.length === 1) return storage[o.url + x]; + else if (arguments.length === 2) return storage[o.url + x] = y; + }; + } + // Get an authentication object. If you just add and remove properties + // from a single object, you'll need to use `delete` to make sure that + // it doesn't contain undesired properties for authentication + function getAuth(o) { + return { + oauth_consumer_key: o.oauth_consumer_key, + oauth_signature_method: 'HMAC-SHA1' + }; + } - sequences: function(projection) { - var viewport = projection.clipExtent(); - var min$$1 = [viewport[0][0], viewport[1][1]]; - var max$$1 = [viewport[1][0], viewport[0][1]]; - var bbox = geoExtent$$1(projection.invert(min$$1), projection.invert(max$$1)).bbox(); - var sequenceKeys = {}; - - // all sequences for images in viewport - _mlyCache.images.rtree.search(bbox) - .forEach(function(d) { - var sequenceKey = _mlyCache.sequences.forImageKey[d.data.key]; - if (sequenceKey) { - sequenceKeys[sequenceKey] = true; - } - }); + // potentially pre-authorize + oauth.options(o); - // Return lineStrings for the sequences - return Object.keys(sequenceKeys).map(function(sequenceKey) { - return _mlyCache.sequences.lineString[sequenceKey]; - }); - }, + return oauth; + }; + var JXON = new (function () { + var + sValueProp = 'keyValue', sAttributesProp = 'keyAttributes', sAttrPref = '@', /* you can customize these values */ + aCache = [], rIsNull = /^\s*$/, rIsBool = /^(?:true|false)$/i; - signsSupported: function() { - var detected = utilDetect(); - if (detected.ie) return false; - if ((detected.browser.toLowerCase() === 'safari') && (parseFloat(detected.version) < 10)) return false; - return true; - }, + function parseText (sValue) { + if (rIsNull.test(sValue)) { return null; } + if (rIsBool.test(sValue)) { return sValue.toLowerCase() === 'true'; } + if (isFinite(sValue)) { return parseFloat(sValue); } + if (isFinite(Date.parse(sValue))) { return new Date(sValue); } + return sValue; + } + function EmptyTree () { } + EmptyTree.prototype.toString = function () { return 'null'; }; + EmptyTree.prototype.valueOf = function () { return null; }; - signHTML: function(d) { - if (!_mlySignDefs || !_mlySignSprite) return; - var position = _mlySignDefs[d.value]; - if (!position) return '
        '; - var iconStyle = [ - 'background-image:url(' + _mlySignSprite + ')', - 'background-repeat:no-repeat', - 'height:' + position.height + 'px', - 'width:' + position.width + 'px', - 'background-position-x:-' + position.x + 'px', - 'background-position-y:-' + position.y + 'px', - ]; + function objectify (vValue) { + return vValue === null ? new EmptyTree() : vValue instanceof Object ? vValue : new vValue.constructor(vValue); + } - return '
        '; - }, + function createObjTree (oParentNode, nVerb, bFreeze, bNesteAttr) { + var + nLevelStart = aCache.length, bChildren = oParentNode.hasChildNodes(), + bAttributes = oParentNode.hasAttributes(), bHighVerb = Boolean(nVerb & 2); + var + sProp, vContent, nLength = 0, sCollectedTxt = '', + vResult = bHighVerb ? {} : /* put here the default value for empty nodes: */ true; - loadImages: function(projection) { - loadTiles('images', apibase + 'images?', projection); - loadTiles('sequences', apibase + 'sequences?', projection); - }, + if (bChildren) { + for (var oNode, nItem = 0; nItem < oParentNode.childNodes.length; nItem++) { + oNode = oParentNode.childNodes.item(nItem); + if (oNode.nodeType === 4) { sCollectedTxt += oNode.nodeValue; } /* nodeType is 'CDATASection' (4) */ + else if (oNode.nodeType === 3) { sCollectedTxt += oNode.nodeValue.trim(); } /* nodeType is 'Text' (3) */ + else if (oNode.nodeType === 1 && !oNode.prefix) { aCache.push(oNode); } /* nodeType is 'Element' (1) */ + } + } + var nLevelEnd = aCache.length, vBuiltVal = parseText(sCollectedTxt); - loadSigns: function(context, projection) { - // if we are looking at signs, we'll actually need to fetch images too - loadTiles('images', apibase + 'images?', projection); - loadTiles('objects', apibase + 'objects?', projection); + if (!bHighVerb && (bChildren || bAttributes)) { vResult = nVerb === 0 ? objectify(vBuiltVal) : {}; } - // load traffic sign defs - if (!_mlySignDefs) { - _mlySignSprite = context.asset('img/traffic-signs/traffic-signs.png'); - _mlySignDefs = {}; - d3_json(context.asset('img/traffic-signs/traffic-signs.json'), function(err, data) { - if (err) return; - _mlySignDefs = data; - }); + for (var nElId = nLevelStart; nElId < nLevelEnd; nElId++) { + sProp = aCache[nElId].nodeName.toLowerCase(); + vContent = createObjTree(aCache[nElId], nVerb, bFreeze, bNesteAttr); + if (vResult.hasOwnProperty(sProp)) { + if (vResult[sProp].constructor !== Array) { vResult[sProp] = [vResult[sProp]]; } + vResult[sProp].push(vContent); + } else { + vResult[sProp] = vContent; + nLength++; } - }, - + } - loadViewer: function(context) { - // add mly-wrapper - var wrap = d3_select('#photoviewer').selectAll('.mly-wrapper') - .data([0]); - - var wrapEnter = wrap.enter() - .append('div') - .attr('id', 'mly') - .attr('class', 'photo-wrapper mly-wrapper') - .classed('hide', true); - - wrapEnter - .append('div') - .attr('class', 'photo-attribution fillD'); - - - // load mapillary-viewercss - d3_select('head').selectAll('#mapillary-viewercss') - .data([0]) - .enter() - .append('link') - .attr('id', 'mapillary-viewercss') - .attr('rel', 'stylesheet') - .attr('href', context.asset(viewercss)); - - // load mapillary-viewerjs - d3_select('head').selectAll('#mapillary-viewerjs') - .data([0]) - .enter() - .append('script') - .attr('id', 'mapillary-viewerjs') - .attr('src', context.asset(viewerjs)); - }, + if (bAttributes) { + var + nAttrLen = oParentNode.attributes.length, + sAPrefix = bNesteAttr ? '' : sAttrPref, oAttrParent = bNesteAttr ? {} : vResult; + for (var oAttrib, nAttrib = 0; nAttrib < nAttrLen; nLength++, nAttrib++) { + oAttrib = oParentNode.attributes.item(nAttrib); + oAttrParent[sAPrefix + oAttrib.name.toLowerCase()] = parseText(oAttrib.value.trim()); + } - showViewer: function() { - var wrap = d3_select('#photoviewer') - .classed('hide', false); + if (bNesteAttr) { + if (bFreeze) { Object.freeze(oAttrParent); } + vResult[sAttributesProp] = oAttrParent; + nLength -= nAttrLen - 1; + } + } - var isHidden = wrap.selectAll('.photo-wrapper.mly-wrapper.hide').size(); + if (nVerb === 3 || (nVerb === 2 || nVerb === 1 && nLength > 0) && sCollectedTxt) { + vResult[sValueProp] = vBuiltVal; + } else if (!bHighVerb && nLength === 0 && sCollectedTxt) { + vResult = vBuiltVal; + } - if (isHidden) { - wrap - .selectAll('.photo-wrapper:not(.mly-wrapper)') - .classed('hide', true); + if (bFreeze && (bHighVerb || nLength > 0)) { Object.freeze(vResult); } - wrap - .selectAll('.photo-wrapper.mly-wrapper') - .classed('hide', false); + aCache.length = nLevelStart; - _mlyViewer.resize(); - } + return vResult; + } - return this; - }, + function loadObjTree (oXMLDoc, oParentEl, oParentObj) { + var vValue, oChild; + if (oParentObj instanceof String || oParentObj instanceof Number || oParentObj instanceof Boolean) { + oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toString())); /* verbosity level is 0 */ + } else if (oParentObj.constructor === Date) { + oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toGMTString())); + } - hideViewer: function() { - _mlySelectedImage = null; + for (var sName in oParentObj) { + vValue = oParentObj[sName]; + if (isFinite(sName) || vValue instanceof Function) { continue; } /* verbosity level is 0 */ + if (sName === sValueProp) { + if (vValue !== null && vValue !== true) { oParentEl.appendChild(oXMLDoc.createTextNode(vValue.constructor === Date ? vValue.toGMTString() : String(vValue))); } + } else if (sName === sAttributesProp) { /* verbosity level is 3 */ + for (var sAttrib in vValue) { oParentEl.setAttribute(sAttrib, vValue[sAttrib]); } + } else if (sName.charAt(0) === sAttrPref) { + oParentEl.setAttribute(sName.slice(1), vValue); + } else if (vValue.constructor === Array) { + for (var nItem = 0; nItem < vValue.length; nItem++) { + oChild = oXMLDoc.createElement(sName); + loadObjTree(oXMLDoc, oChild, vValue[nItem]); + oParentEl.appendChild(oChild); + } + } else { + oChild = oXMLDoc.createElement(sName); + if (vValue instanceof Object) { + loadObjTree(oXMLDoc, oChild, vValue); + } else if (vValue !== null && vValue !== true) { + oChild.appendChild(oXMLDoc.createTextNode(vValue.toString())); + } + oParentEl.appendChild(oChild); + } + } + } - if (!_mlyFallback && _mlyViewer) { - _mlyViewer.getComponent('sequence').stop(); - } + this.build = function (oXMLParent, nVerbosity /* optional */, bFreeze /* optional */, bNesteAttributes /* optional */) { + var _nVerb = arguments.length > 1 && typeof nVerbosity === 'number' ? nVerbosity & 3 : /* put here the default verbosity level: */ 1; + return createObjTree(oXMLParent, _nVerb, bFreeze || false, arguments.length > 3 ? bNesteAttributes : _nVerb === 3); + }; - var viewer = d3_select('#photoviewer'); - if (!viewer.empty()) viewer.datum(null); + this.unbuild = function (oObjTree) { + var oNewDoc = document.implementation.createDocument('', '', null); + loadObjTree(oNewDoc, oNewDoc, oObjTree); + return oNewDoc; + }; - viewer - .classed('hide', true) - .selectAll('.photo-wrapper') - .classed('hide', true); + this.stringify = function (oObjTree) { + return (new XMLSerializer()).serializeToString(JXON.unbuild(oObjTree)); + }; + })(); - d3_selectAll('.viewfield-group, .sequence, .icon-sign') - .classed('selected', false); + // var myObject = JXON.build(doc); + // we got our javascript object! try: alert(JSON.stringify(myObject)); - return this.setStyles(null, true); - }, + // var newDoc = JXON.unbuild(myObject); + // we got our Document instance! try: alert((new XMLSerializer()).serializeToString(newDoc)); + var dispatch$3 = dispatch('authLoading', 'authDone', 'change', 'loading', 'loaded'); + var urlroot = 'https://www.openstreetmap.org'; + var oauth = osmAuth({ + url: urlroot, + oauth_consumer_key: '5A043yRSEugj4DJ5TljuapfnrflWDte8jTOcWLlT', + oauth_secret: 'aB3jKq1TRsCOUrfOIZ6oQMEDmv2ptV76PA54NGLL', + loading: authLoading, + done: authDone + }); - parsePagination: parsePagination, + var _blacklists = ['.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*']; + var _tiles = { loaded: {}, inflight: {} }; + var _changeset = {}; + var _entityCache = {}; + var _connectionID = 1; + var _tileZoom = 16; + var _rateLimitError; + var _userChangesets; + var _userDetails; + var _off; - updateViewer: function(imageKey, context) { - if (!imageKey) return this; + function authLoading() { + dispatch$3.call('authLoading'); + } - if (!_mlyViewer) { - this.initViewer(imageKey, context); - } else { - _mlyViewer.moveToKey(imageKey) - .catch(function(e) { console.error('mly3', e); }); // eslint-disable-line no-console - } - return this; - }, + function authDone() { + dispatch$3.call('authDone'); + } - initViewer: function(imageKey, context) { - var that = this; - if (Mapillary && imageKey) { - var opts = { - baseImageSize: 320, - component: { - cover: false, - keyboard: false, - tag: true - } - }; + function abortRequest$2(i) { + if (i) { + i.abort(); + } + } - // Disable components requiring WebGL support - if (!Mapillary.isSupported() && Mapillary.isFallbackSupported()) { - _mlyFallback = true; - opts.component = { - cover: false, - direction: false, - imagePlane: false, - keyboard: false, - mouse: false, - sequence: false, - tag: false, - image: true, // fallback - navigation: true // fallback - }; - } - _mlyViewer = new Mapillary.Viewer('mly', clientId, null, opts); - _mlyViewer.on('nodechanged', nodeChanged); - _mlyViewer.moveToKey(imageKey) - .catch(function(e) { console.error('mly3', e); }); // eslint-disable-line no-console - } + function getLoc(attrs) { + var lon = attrs.lon && attrs.lon.value; + var lat = attrs.lat && attrs.lat.value; + return [parseFloat(lon), parseFloat(lat)]; + } - // nodeChanged: called after the viewer has changed images and is ready. - // - // There is some logic here to batch up clicks into a _mlyClicks array - // because the user might click on a lot of markers quickly and nodechanged - // may be called out of order asychronously. - // - // Clicks are added to the array in `selectedImage` and removed here. - // - function nodeChanged(node) { - if (!_mlyFallback) { - _mlyViewer.getComponent('tag').removeAll(); // remove previous detections - } - var clicks = _mlyClicks; - var index = clicks.indexOf(node.key); - var selectedKey = _mlySelectedImage && _mlySelectedImage.key; - - if (index > -1) { // `nodechanged` initiated from clicking on a marker.. - clicks.splice(index, 1); // remove the click - // If `node.key` matches the current _mlySelectedImage, call `selectImage()` - // one more time to update the detections and attribution.. - if (node.key === selectedKey) { - that.selectImage(_mlySelectedImage, node.key, true); - } - } else { // `nodechanged` initiated from the Mapillary viewer controls.. - var loc = node.computedLatLon ? [node.computedLatLon.lon, node.computedLatLon.lat] : [node.latLon.lon, node.latLon.lat]; - context.map().centerEase(loc); - that.selectImage(undefined, node.key, true); - } - } - }, + function getNodes(obj) { + var elems = obj.getElementsByTagName('nd'); + var nodes = new Array(elems.length); + for (var i = 0, l = elems.length; i < l; i++) { + nodes[i] = 'n' + elems[i].attributes.ref.value; + } + return nodes; + } - // Pass the image datum itself in `d` or the `imageKey` string. - // This allows images to be selected from places that dont have access - // to the full image datum (like the street signs layer or the js viewer) - selectImage: function(d, imageKey, fromViewer) { - if (!d && imageKey) { - // If the user clicked on something that's not an image marker, we - // might get in here.. Cache lookup can fail, e.g. if the user - // clicked a streetsign, but images are loading slowly asynchronously. - // We'll try to carry on anyway if there is no datum. There just - // might be a delay before user sees detections, captured_at, etc. - d = _mlyCache.images.forImageKey[imageKey]; - } + function getTags(obj) { + var elems = obj.getElementsByTagName('tag'); + var tags = {}; + for (var i = 0, l = elems.length; i < l; i++) { + var attrs = elems[i].attributes; + tags[attrs.k.value] = attrs.v.value; + } - _mlySelectedImage = d; - var viewer = d3_select('#photoviewer'); - if (!viewer.empty()) viewer.datum(d); + return tags; + } - imageKey = (d && d.key) || imageKey; - if (!fromViewer && imageKey) { - _mlyClicks.push(imageKey); - } - this.setStyles(null, true); + function getMembers(obj) { + var elems = obj.getElementsByTagName('member'); + var members = new Array(elems.length); + for (var i = 0, l = elems.length; i < l; i++) { + var attrs = elems[i].attributes; + members[i] = { + id: attrs.type.value[0] + attrs.ref.value, + type: attrs.type.value, + role: attrs.role.value + }; + } + return members; + } - d3_selectAll('.layer-mapillary-signs .icon-sign') - .classed('selected', function(d) { - return some(d.detections, function(detection) { - return detection.image_key === imageKey; - }); - }); - var wrap = d3_select('#photoviewer .mly-wrapper'); - var attribution = wrap.selectAll('.photo-attribution').html(''); + function getVisible(attrs) { + return (!attrs.visible || attrs.visible.value !== 'false'); + } - if (d) { - if (d.captured_by) { - attribution - .append('a') - .attr('class', 'captured_by') - .attr('target', '_blank') - .attr('href', 'https://www.mapillary.com/app/user/' + encodeURIComponent(d.captured_by)) - .text('@' + d.captured_by); - attribution - .append('span') - .text('|'); - } + var parsers = { + node: function nodeData(obj, uid) { + var attrs = obj.attributes; + return new osmNode({ + id:uid, + visible: getVisible(attrs), + version: attrs.version.value, + changeset: attrs.changeset && attrs.changeset.value, + timestamp: attrs.timestamp && attrs.timestamp.value, + user: attrs.user && attrs.user.value, + uid: attrs.uid && attrs.uid.value, + loc: getLoc(attrs), + tags: getTags(obj) + }); + }, - if (d.captured_at) { - attribution - .append('span') - .attr('class', 'captured_at') - .text(localeTimestamp(d.captured_at)); + way: function wayData(obj, uid) { + var attrs = obj.attributes; + return new osmWay({ + id: uid, + visible: getVisible(attrs), + version: attrs.version.value, + changeset: attrs.changeset && attrs.changeset.value, + timestamp: attrs.timestamp && attrs.timestamp.value, + user: attrs.user && attrs.user.value, + uid: attrs.uid && attrs.uid.value, + tags: getTags(obj), + nodes: getNodes(obj), + }); + }, - attribution - .append('span') - .text('|'); - } + relation: function relationData(obj, uid) { + var attrs = obj.attributes; + return new osmRelation({ + id: uid, + visible: getVisible(attrs), + version: attrs.version.value, + changeset: attrs.changeset && attrs.changeset.value, + timestamp: attrs.timestamp && attrs.timestamp.value, + user: attrs.user && attrs.user.value, + uid: attrs.uid && attrs.uid.value, + tags: getTags(obj), + members: getMembers(obj) + }); + } + }; - attribution - .append('a') - .attr('class', 'image_link') - .attr('target', '_blank') - .attr('href', 'https://www.mapillary.com/app/?pKey=' + encodeURIComponent(d.key) + - '&focus=photo&lat=' + d.loc[1] + '&lng=' + d.loc[0] + '&z=17') - .text('mapillary.com'); - this.updateDetections(d); - } + function parse(xml$$1, callback, options) { + options = assignIn({ cache: true }, options); + if (!xml$$1 || !xml$$1.childNodes) return; - return this; - }, + var root = xml$$1.childNodes[0]; + var children = root.childNodes; + function parseChild(child) { + var parser = parsers[child.nodeName]; + if (parser) { + var uid = osmEntity$$1.id.fromOSM(child.nodeName, child.attributes.id.value); + if (options.cache && _entityCache[uid]) { + return null; + } + return parser(child, uid); + } + } - getSelectedImage: function() { - return _mlySelectedImage; - }, + utilIdleWorker(children, parseChild, callback); + } - getSequenceKeyForImage: function(d) { - var imageKey = d && d.key; - return imageKey && _mlyCache.sequences.forImageKey[imageKey]; - }, + var serviceOsm = { + init: function() { + utilRebind(this, dispatch$3, 'on'); + }, - setStyles: function(hovered, reset) { - if (reset) { // reset all layers - d3_selectAll('.viewfield-group') - .classed('highlighted', false) - .classed('hovered', false) - .classed('selected', false); - d3_selectAll('.sequence') - .classed('highlighted', false) - .classed('selected', false); - } + reset: function() { + _connectionID++; + _userChangesets = undefined; + _userDetails = undefined; + _rateLimitError = undefined; + forEach(_tiles.inflight, abortRequest$2); + if (_changeset.inflight) abortRequest$2(_changeset.inflight); + _tiles = { loaded: {}, inflight: {} }; + _changeset = {}; + _entityCache = {}; + return this; + }, - var hoveredImageKey = hovered && hovered.key; - var hoveredSequenceKey = this.getSequenceKeyForImage(hovered); - var hoveredLineString = hoveredSequenceKey && _mlyCache.sequences.lineString[hoveredSequenceKey]; - var hoveredImageKeys = (hoveredLineString && hoveredLineString.properties.coordinateProperties.image_keys) || []; - var viewer = d3_select('#photoviewer'); - var selected = viewer.empty() ? undefined : viewer.datum(); - var selectedImageKey = selected && selected.key; - var selectedSequenceKey = this.getSequenceKeyForImage(selected); - var selectedLineString = selectedSequenceKey && _mlyCache.sequences.lineString[selectedSequenceKey]; - var selectedImageKeys = (selectedLineString && selectedLineString.properties.coordinateProperties.image_keys) || []; + getConnectionId: function() { + return _connectionID; + }, - // highlight sibling viewfields on either the selected or the hovered sequences - var highlightedImageKeys = union(hoveredImageKeys, selectedImageKeys); - d3_selectAll('.layer-mapillary-images .viewfield-group') - .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; }) - .classed('hovered', function(d) { return d.key === hoveredImageKey; }) - .classed('selected', function(d) { return d.key === selectedImageKey; }); + changesetURL: function(changesetId) { + return urlroot + '/changeset/' + changesetId; + }, - d3_selectAll('.layer-mapillary-images .sequence') - .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; }) - .classed('selected', function(d) { return d.properties.key === selectedSequenceKey; }); - return this; - }, + changesetsURL: function(center, zoom) { + var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2)); + return urlroot + '/history#map=' + + Math.floor(zoom) + '/' + + center[1].toFixed(precision) + '/' + + center[0].toFixed(precision); + }, - updateDetections: function(d) { - if (!_mlyViewer || _mlyFallback) return; + entityURL: function(entity) { + return urlroot + '/' + entity.type + '/' + entity.osmId(); + }, - var imageKey = d && d.key; - var detections = (imageKey && _mlyCache.detections[imageKey]) || []; - forEach(detections, function(data, k) { - if (isEmpty(data)) { - loadDetection(k); - } else { - var tag = makeTag(data); - if (tag) { - var tagComponent = _mlyViewer.getComponent('tag'); - tagComponent.add([tag]); - } - } - }); + historyURL: function(entity) { + return urlroot + '/' + entity.type + '/' + entity.osmId() + '/history'; + }, - function loadDetection(detectionKey) { - var url = apibase + 'detections/'+ - detectionKey + '?' + utilQsString({ - client_id: clientId, - }); - - d3_request(url) - .mimeType('application/json') - .response(function(xhr) { - return JSON.parse(xhr.responseText); - }) - .get(function(err, data) { - if (!data || !data.properties) return; - - var imageKey = data.properties.image_key; - _mlyCache.detections[imageKey][detectionKey] = data; - - var selectedKey = _mlySelectedImage && _mlySelectedImage.key; - if (imageKey === selectedKey) { - var tag = makeTag(data); - if (tag) { - var tagComponent = _mlyViewer.getComponent('tag'); - tagComponent.add([tag]); - } - } - }); - } + userURL: function(username) { + return urlroot + '/user/' + username; + }, - function makeTag(data) { - var valueParts = data.properties.value.split('--'); - if (valueParts.length !== 3) return; - - var text = valueParts[1].replace(/-/g, ' '); - var tag; - - // Currently only two shapes - if (data.properties.shape.type === 'Polygon') { - var polygonGeometry = new Mapillary - .TagComponent - .PolygonGeometry(data.properties.shape.coordinates[0]); - - tag = new Mapillary.TagComponent.OutlineTag( - data.properties.key, - polygonGeometry, - { - text: text, - textColor: 0xffff00, - lineColor: 0xffff00, - lineWidth: 2, - fillColor: 0xffff00, - fillOpacity: 0.3, - } - ); - - } else if (data.properties.shape.type === 'Point') { - var pointGeometry = new Mapillary - .TagComponent - .PointGeometry(data.properties.shape.coordinates[0]); - - tag = new Mapillary.TagComponent.SpotTag( - data.properties.key, - pointGeometry, - { - text: text, - color: 0xffff00, - textColor: 0xffff00 - } - ); - } + loadFromAPI: function(path, callback, options) { + options = assignIn({ cache: true }, options); + var that = this; + var cid = _connectionID; + + function done(err, xml$$1) { + if (that.getConnectionId() !== cid) { + if (callback) callback({ message: 'Connection Switched', status: -1 }); + return; + } + + var isAuthenticated = that.authenticated(); + + // 400 Bad Request, 401 Unauthorized, 403 Forbidden + // Logout and retry the request.. + if (isAuthenticated && err && (err.status === 400 || err.status === 401 || err.status === 403)) { + that.logout(); + that.loadFromAPI(path, callback); + + // else, no retry.. + } else { + // 509 Bandwidth Limit Exceeded, 429 Too Many Requests + // Set the rateLimitError flag and trigger a warning.. + if (!isAuthenticated && !_rateLimitError && err && + (err.status === 509 || err.status === 429)) { + _rateLimitError = err; + dispatch$3.call('change'); + } + + if (callback) { + if (err) return callback(err, null); + parse(xml$$1, function (entities) { + if (options.cache) { + for (var i in entities) { + _entityCache[entities[i].id] = true; + } + } + callback(null, entities); + }, options); + } + } + } - return tag; - } - }, + if (this.authenticated()) { + return oauth.xhr({ method: 'GET', path: path }, done); + } else { + var url = urlroot + path; + return d3_xml(url).get(done); + } + }, - cache: function() { - return _mlyCache; - }, + loadEntity: function(id, callback) { + var type = osmEntity$$1.id.type(id); + var osmID = osmEntity$$1.id.toOSM(id); + var options = { cache: false }; + this.loadFromAPI( + '/api/0.6/' + type + '/' + osmID + (type !== 'node' ? '/full' : ''), + function(err, entities) { + if (callback) callback(err, { data: entities }); + }, + options + ); + }, - signDefs: function(_) { - if (!arguments.length) return _mlySignDefs; - _mlySignDefs = _; - return this; - } -}; + loadEntityVersion: function(id, version, callback) { + var type = osmEntity$$1.id.type(id); + var osmID = osmEntity$$1.id.toOSM(id); + var options = { cache: false }; -var apibase$1 = 'https://nominatim.openstreetmap.org/', - inflight = {}, - nominatimCache; + this.loadFromAPI( + '/api/0.6/' + type + '/' + osmID + '/' + version, + function(err, entities) { + if (callback) callback(err, { data: entities }); + }, + options + ); + }, -var serviceNominatim = { + loadMultiple: function(ids, callback) { + var that = this; - init: function() { - inflight = {}; - nominatimCache = rbush_1(); - }, + forEach(groupBy(uniq(ids), osmEntity$$1.id.type), function(v, k) { + var type = k + 's'; + var osmIDs = map$3(v, osmEntity$$1.id.toOSM); + var options = { cache: false }; - reset: function() { - forEach(inflight, function(req) { req.abort(); }); - inflight = {}; - nominatimCache = rbush_1(); - }, + forEach(chunk(osmIDs, 150), function(arr) { + that.loadFromAPI( + '/api/0.6/' + type + '?' + type + '=' + arr.join(), + function(err, entities) { + if (callback) callback(err, { data: entities }); + }, + options + ); + }); + }); + }, - countryCode: function (location, callback) { - this.reverse(location, function(err, result) { - if (err) { - return callback(err); - } else if (result.address) { - return callback(null, result.address.country_code); - } else { - return callback('Unable to geocode', null); - } - }); - }, + authenticated: function() { + return oauth.authenticated(); + }, - reverse: function (location, callback) { - var cached = nominatimCache.search( - { minX: location[0], minY: location[1], maxX: location[0], maxY: location[1] } - ); + putChangeset: function(changeset, changes, callback) { + if (_changeset.inflight) { + return callback({ message: 'Changeset already inflight', status: -2 }, changeset); + } - if (cached.length > 0) { - return callback(null, cached[0].data); - } + var that = this; + var cid = _connectionID; + + if (_changeset.open) { // reuse existing open changeset.. + createdChangeset(null, _changeset.open); + } else { // open a new changeset.. + _changeset.inflight = oauth.xhr({ + method: 'PUT', + path: '/api/0.6/changeset/create', + options: { header: { 'Content-Type': 'text/xml' } }, + content: JXON.stringify(changeset.asJXON()) + }, createdChangeset); + } - var params = { zoom: 13, format: 'json', addressdetails: 1, lat: location[1], lon: location[0] }; - var url = apibase$1 + 'reverse?' + utilQsString(params); - if (inflight[url]) return; - inflight[url] = d3_json(url, function(err, result) { - delete inflight[url]; + function createdChangeset(err, changesetID) { + _changeset.inflight = null; + + if (err) { + // 400 Bad Request, 401 Unauthorized, 403 Forbidden.. + if (err.status === 400 || err.status === 401 || err.status === 403) { + that.logout(); + } + return callback(err, changeset); + } + if (that.getConnectionId() !== cid) { + return callback({ message: 'Connection Switched', status: -1 }, changeset); + } + + _changeset.open = changesetID; + changeset = changeset.update({ id: changesetID }); + + // Upload the changeset.. + _changeset.inflight = oauth.xhr({ + method: 'POST', + path: '/api/0.6/changeset/' + changesetID + '/upload', + options: { header: { 'Content-Type': 'text/xml' } }, + content: JXON.stringify(changeset.osmChangeJXON(changes)) + }, uploadedChangeset); + } - if (err) { - return callback(err); - } else if (result && result.error) { - return callback(result.error); - } - var extent = geoExtent$$1(location).padByMeters(200); - nominatimCache.insert(assign(extent.bbox(), {data: result})); + function uploadedChangeset(err) { + _changeset.inflight = null; - callback(null, result); - }); - }, + if (err) return callback(err, changeset); + // Upload was successful, safe to call the callback. + // Add delay to allow for postgres replication #1646 #2678 + window.setTimeout(function() { + callback(null, changeset); + }, 2500); - search: function (val, callback) { - var searchVal = encodeURIComponent(val); - var url = apibase$1 + 'search/' + searchVal + '?limit=10&format=json'; - if (inflight[url]) return; + _changeset.open = null; - inflight[url] = d3_json(url, function(err, result) { - delete inflight[url]; - callback(err, result); - }); - } + // At this point, we don't really care if the connection was switched.. + // Only try to close the changeset if we're still talking to the same server. + if (that.getConnectionId() === cid) { + // Still attempt to close changeset, but ignore response because #2667 + oauth.xhr({ + method: 'PUT', + path: '/api/0.6/changeset/' + changeset.id + '/close', + options: { header: { 'Content-Type': 'text/xml' } } + }, function() { return true; }); + } + } + }, -}; -var apibase$2 = 'https://openstreetcam.org', - maxResults$1 = 1000, - tileZoom$1 = 14, - dispatch$2 = dispatch('loadedImages'), - imgZoom = d3_zoom() - .extent([[0, 0], [320, 240]]) - .translateExtent([[0, 0], [320, 240]]) - .scaleExtent([1, 15]) - .on('zoom', zoomPan), - _oscCache, - _oscSelectedImage; + userDetails: function(callback) { + if (_userDetails) { + callback(undefined, _userDetails); + return; + } + var that = this; + var cid = _connectionID; + + function done(err, user_details) { + if (err) { + // 400 Bad Request, 401 Unauthorized, 403 Forbidden.. + if (err.status === 400 || err.status === 401 || err.status === 403) { + that.logout(); + } + return callback(err); + } + if (that.getConnectionId() !== cid) { + return callback({ message: 'Connection Switched', status: -1 }); + } + + + var u = user_details.getElementsByTagName('user')[0]; + var img = u.getElementsByTagName('img'); + var image_url = ''; + + if (img && img[0] && img[0].getAttribute('href')) { + image_url = img[0].getAttribute('href'); + } + + var changesets = u.getElementsByTagName('changesets'); + var changesets_count = 0; + + if (changesets && changesets[0] && changesets[0].getAttribute('count')) { + changesets_count = changesets[0].getAttribute('count'); + } + + _userDetails = { + id: u.attributes.id.value, + display_name: u.attributes.display_name.value, + image_url: image_url, + changesets_count: changesets_count + }; + + callback(undefined, _userDetails); + } -function abortRequest$1(i) { - i.abort(); -} + oauth.xhr({ method: 'GET', path: '/api/0.6/user/details' }, done); + }, -function nearNullIsland$1(x, y, z) { - if (z >= 7) { - var center = Math.pow(2, z - 1), - width = Math.pow(2, z - 6), - min$$1 = center - (width / 2), - max$$1 = center + (width / 2) - 1; - return x >= min$$1 && x <= max$$1 && y >= min$$1 && y <= max$$1; - } - return false; -} - - -function maxPageAtZoom$1(z) { - if (z < 15) return 2; - if (z === 15) return 5; - if (z === 16) return 10; - if (z === 17) return 20; - if (z === 18) return 40; - if (z > 18) return 80; -} - - -function getTiles$1(projection) { - var s = projection.scale() * 2 * Math.PI, - z = Math.max(Math.log(s) / Math.log(2) - 8, 0), - ts = 256 * Math.pow(2, z - tileZoom$1), - origin = [ - s / 2 - projection.translate()[0], - s / 2 - projection.translate()[1]]; - - return d3geoTile() - .scaleExtent([tileZoom$1, tileZoom$1]) - .scale(s) - .size(projection.clipExtent()[1]) - .translate(projection.translate())() - .map(function(tile) { - var x = tile[0] * ts - origin[0], - y = tile[1] * ts - origin[1]; - - return { - id: tile.toString(), - xyz: tile, - extent: geoExtent$$1( - projection.invert([x, y + ts]), - projection.invert([x + ts, y]) - ) - }; - }); -} + userChangesets: function(callback) { + if (_userChangesets) { + callback(undefined, _userChangesets); + return; + } + var that = this; + var cid = _connectionID; + + this.userDetails(function(err, user) { + if (err) { + return callback(err); + } + if (that.getConnectionId() !== cid) { + return callback({ message: 'Connection Switched', status: -1 }); + } + + function done(err, changesets) { + if (err) { + // 400 Bad Request, 401 Unauthorized, 403 Forbidden.. + if (err.status === 400 || err.status === 401 || err.status === 403) { + that.logout(); + } + return callback(err); + } + if (that.getConnectionId() !== cid) { + return callback({ message: 'Connection Switched', status: -1 }); + } + + _userChangesets = Array.prototype.map.call( + changesets.getElementsByTagName('changeset'), + function (changeset) { + return { tags: getTags(changeset) }; + } + ).filter(function (changeset) { + var comment = changeset.tags.comment; + return comment && comment !== ''; + }); + + callback(undefined, _userChangesets); + } + + oauth.xhr({ method: 'GET', path: '/api/0.6/changesets?user=' + user.id }, done); + }); + }, -function loadTiles$1(which, url, projection) { - var s = projection.scale() * 2 * Math.PI, - currZoom = Math.floor(Math.max(Math.log(s) / Math.log(2) - 8, 0)); - var tiles = getTiles$1(projection).filter(function(t) { - return !nearNullIsland$1(t.xyz[0], t.xyz[1], t.xyz[2]); - }); + status: function(callback) { + var that = this; + var cid = _connectionID; + + function done(xml$$1) { + if (that.getConnectionId() !== cid) { + return callback({ message: 'Connection Switched', status: -1 }, 'connectionSwitched'); + } + + // update blacklists + var elements = xml$$1.getElementsByTagName('blacklist'); + var regexes = []; + for (var i = 0; i < elements.length; i++) { + var regex = elements[i].getAttribute('regex'); // needs unencode? + if (regex) { + regexes.push(regex); + } + } + if (regexes.length) { + _blacklists = regexes; + } + + + if (_rateLimitError) { + callback(_rateLimitError, 'rateLimited'); + } else { + var apiStatus = xml$$1.getElementsByTagName('status'); + var val = apiStatus[0].getAttribute('api'); + + callback(undefined, val); + } + } - filter(which.inflight, function(v, k) { - var wanted = find$1(tiles, function(tile) { return k === (tile.id + ',0'); }); - if (!wanted) delete which.inflight[k]; - return !wanted; - }).map(abortRequest$1); + d3_xml(urlroot + '/api/capabilities').get() + .on('load', done) + .on('error', callback); + }, - tiles.forEach(function(tile) { - loadNextTilePage$1(which, currZoom, url, tile); - }); -} - - -function loadNextTilePage$1(which, currZoom, url, tile) { - var cache = _oscCache[which]; - var bbox = tile.extent.bbox(); - var maxPages = maxPageAtZoom$1(currZoom); - var nextPage = cache.nextPage[tile.id] || 1; - var params = utilQsString({ - ipp: maxResults$1, - page: nextPage, - // client_id: clientId, - bbTopLeft: [bbox.maxY, bbox.minX].join(','), - bbBottomRight: [bbox.minY, bbox.maxX].join(',') - }, true); - - if (nextPage > maxPages) return; - - var id = tile.id + ',' + String(nextPage); - if (cache.loaded[id] || cache.inflight[id]) return; - - cache.inflight[id] = d3_request(url) - .mimeType('application/json') - .header('Content-type', 'application/x-www-form-urlencoded') - .response(function(xhr) { return JSON.parse(xhr.responseText); }) - .post(params, function(err, data) { - cache.loaded[id] = true; - delete cache.inflight[id]; - if (err || !data.currentPageItems || !data.currentPageItems.length) return; - - function localeDateString(s) { - if (!s) return null; - var detected = utilDetect(); - var options = { day: 'numeric', month: 'short', year: 'numeric' }; - var d = new Date(s); - if (isNaN(d.getTime())) return null; - return d.toLocaleDateString(detected.locale, options); - } - var features = data.currentPageItems.map(function(item) { - var loc = [+item.lng, +item.lat], - d; - - if (which === 'images') { - d = { - loc: loc, - key: item.id, - ca: +item.heading, - captured_at: localeDateString(item.shot_date || item.date_added), - captured_by: item.username, - imagePath: item.lth_name, - sequence_id: item.sequence_id, - sequence_index: +item.sequence_index - }; - - // cache sequence info - var seq = _oscCache.sequences[d.sequence_id]; - if (!seq) { - seq = { rotation: 0, images: [] }; - _oscCache.sequences[d.sequence_id] = seq; - } - seq.images[d.sequence_index] = d; - } - - return { - minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d - }; - }); + imageryBlacklists: function() { + return _blacklists; + }, - cache.rtree.load(features); - if (which === 'images') { - dispatch$2.call('loadedImages'); - } + tileZoom: function(_) { + if (!arguments.length) return _tileZoom; + _tileZoom = _; + return this; + }, - if (data.currentPageItems.length === maxResults$1) { // more pages to load - cache.nextPage[tile.id] = nextPage + 1; - loadNextTilePage$1(which, currZoom, url, tile); - } else { - cache.nextPage[tile.id] = Infinity; // no more pages to load - } - }); -} + loadTiles: function(projection, dimensions, callback) { + if (_off) return; -// partition viewport into `psize` x `psize` regions -function partitionViewport$1(psize, projection) { - var dimensions = projection.clipExtent()[1]; - psize = psize || 16; - var cols = d3_range(0, dimensions[0], psize), - rows = d3_range(0, dimensions[1], psize), - partitions = []; + var that = this; + var s = projection.scale() * 2 * Math.PI; + var z = Math.max(Math.log(s) / Math.log(2) - 8, 0); + var ts = 256 * Math.pow(2, z - _tileZoom); + var origin = [ + s / 2 - projection.translate()[0], + s / 2 - projection.translate()[1] + ]; - rows.forEach(function(y) { - cols.forEach(function(x) { - var min$$1 = [x, y + psize], - max$$1 = [x + psize, y]; - partitions.push( - geoExtent$$1(projection.invert(min$$1), projection.invert(max$$1))); - }); - }); + var tiles = d3geoTile() + .scaleExtent([_tileZoom, _tileZoom]) + .scale(s) + .size(dimensions) + .translate(projection.translate())() + .map(function(tile) { + var x = tile[0] * ts - origin[0]; + var y = tile[1] * ts - origin[1]; + + return { + id: tile.toString(), + extent: geoExtent$$1( + projection.invert([x, y + ts]), + projection.invert([x + ts, y])) + }; + }); + + filter(_tiles.inflight, function(v, i) { + var wanted = find$1(tiles, function(tile) { + return i === tile.id; + }); + if (!wanted) delete _tiles.inflight[i]; + return !wanted; + }).map(abortRequest$2); + + tiles.forEach(function(tile) { + var id = tile.id; + + if (_tiles.loaded[id] || _tiles.inflight[id]) return; + + if (isEmpty(_tiles.inflight)) { + dispatch$3.call('loading'); + } + + _tiles.inflight[id] = that.loadFromAPI( + '/api/0.6/map?bbox=' + tile.extent.toParam(), + function(err, parsed) { + delete _tiles.inflight[id]; + if (!err) { + _tiles.loaded[id] = true; + } + + if (callback) { + callback(err, assignIn({ data: parsed }, tile)); + } + + if (isEmpty(_tiles.inflight)) { + dispatch$3.call('loaded'); + } + } + ); + }); + }, - return partitions; -} + switch: function(options) { + urlroot = options.urlroot; -// no more than `limit` results per partition. -function searchLimited$1(psize, limit, projection, rtree) { - limit = limit || 3; + oauth.options(assignIn({ + url: urlroot, + loading: authLoading, + done: authDone + }, options)); - var partitions = partitionViewport$1(psize, projection); - var results; + this.reset(); + this.userChangesets(function() {}); // eagerly load user details/changesets + dispatch$3.call('change'); + return this; + }, - results = flatten(map$3(partitions, function(extent$$1) { - return rtree.search(extent$$1.bbox()) - .slice(0, limit) - .map(function(d) { return d.data; }); - })); - return results; -} + toggle: function(_) { + _off = !_; + return this; + }, -function zoomPan() { - var t = event.transform; - d3_select('#photoviewer .osc-image-wrap') - .call(utilSetTransform, t.x, t.y, t.k); -} + loadedTiles: function(_) { + if (!arguments.length) return _tiles.loaded; + _tiles.loaded = _; + return this; + }, -var serviceOpenstreetcam = { - init: function() { - if (!_oscCache) { - this.reset(); - } + logout: function() { + _userChangesets = undefined; + _userDetails = undefined; + oauth.logout(); + dispatch$3.call('change'); + return this; + }, - this.event = utilRebind(this, dispatch$2, 'on'); - }, - reset: function() { - var cache = _oscCache; + authenticate: function(callback) { + var that = this; + var cid = _connectionID; + _userChangesets = undefined; + _userDetails = undefined; + + function done(err, res) { + if (err) { + if (callback) callback(err); + return; + } + if (that.getConnectionId() !== cid) { + if (callback) callback({ message: 'Connection Switched', status: -1 }); + return; + } + _rateLimitError = undefined; + dispatch$3.call('change'); + if (callback) callback(err, res); + that.userChangesets(function() {}); // eagerly load user details/changesets + } - if (cache) { - if (cache.images && cache.images.inflight) { - forEach(cache.images.inflight, abortRequest$1); - } - } + return oauth.authenticate(done); + } + }; - _oscCache = { - images: { inflight: {}, loaded: {}, nextPage: {}, rtree: rbush_1() }, - sequences: {} - }; + var apibase$3 = 'https://taginfo.openstreetmap.org/api/4/', + inflight$1 = {}, + popularKeys = {}, + taginfoCache = {}, + tag_sorts = { + point: 'count_nodes', + vertex: 'count_nodes', + area: 'count_ways', + line: 'count_ways' + }, + tag_sort_members = { + point: 'count_node_members', + vertex: 'count_node_members', + area: 'count_way_members', + line: 'count_way_members', + relation: 'count_relation_members' + }, + tag_filters = { + point: 'nodes', + vertex: 'nodes', + area: 'ways', + line: 'ways' + }, + tag_members_fractions = { + point: 'count_node_members_fraction', + vertex: 'count_node_members_fraction', + area: 'count_way_members_fraction', + line: 'count_way_members_fraction', + relation: 'count_relation_members_fraction' + }; - _oscSelectedImage = null; - }, + function sets(params, n, o) { + if (params.geometry && o[params.geometry]) { + params[n] = o[params.geometry]; + } + return params; + } - images: function(projection) { - var psize = 16, limit = 3; - return searchLimited$1(psize, limit, projection, _oscCache.images.rtree); - }, + function setFilter(params) { + return sets(params, 'filter', tag_filters); + } - sequences: function(projection) { - var viewport = projection.clipExtent(); - var min$$1 = [viewport[0][0], viewport[1][1]]; - var max$$1 = [viewport[1][0], viewport[0][1]]; - var bbox = geoExtent$$1(projection.invert(min$$1), projection.invert(max$$1)).bbox(); - var sequenceKeys = {}; - - // all sequences for images in viewport - _oscCache.images.rtree.search(bbox) - .forEach(function(d) { sequenceKeys[d.data.sequence_id] = true; }); - - // make linestrings from those sequences - var lineStrings = []; - Object.keys(sequenceKeys) - .forEach(function(sequenceKey) { - var seq = _oscCache.sequences[sequenceKey]; - var images = seq && seq.images; - if (images) { - lineStrings.push({ - type: 'LineString', - coordinates: images.map(function (d) { return d.loc; }).filter(Boolean), - properties: { key: sequenceKey } - }); - } - }); - return lineStrings; - }, + function setSort(params) { + return sets(params, 'sortname', tag_sorts); + } - loadImages: function(projection) { - var url = apibase$2 + '/1.0/list/nearby-photos/'; - loadTiles$1('images', url, projection); - }, + function setSortMembers(params) { + return sets(params, 'sortname', tag_sort_members); + } - loadViewer: function(context) { - var that = this; - - // add osc-wrapper - var wrap = d3_select('#photoviewer').selectAll('.osc-wrapper') - .data([0]); - - var wrapEnter = wrap.enter() - .append('div') - .attr('class', 'photo-wrapper osc-wrapper') - .classed('hide', true) - .call(imgZoom) - .on('dblclick.zoom', null); - - wrapEnter - .append('div') - .attr('class', 'photo-attribution fillD'); - - var controlsEnter = wrapEnter - .append('div') - .attr('class', 'osc-controls-wrap') - .append('div') - .attr('class', 'osc-controls'); - - controlsEnter - .append('button') - .on('click.back', step(-1)) - .text('◄'); - - controlsEnter - .append('button') - .on('click.rotate-ccw', rotate(-90)) - .text('⤿'); - - controlsEnter - .append('button') - .on('click.rotate-cw', rotate(90)) - .text('⤾'); - - controlsEnter - .append('button') - .on('click.forward', step(1)) - .text('►'); - - wrapEnter - .append('div') - .attr('class', 'osc-image-wrap'); - - - function rotate(deg) { - return function() { - if (!_oscSelectedImage) return; - var sequenceKey = _oscSelectedImage.sequence_id; - var sequence = _oscCache.sequences[sequenceKey]; - if (!sequence) return; - - var r = sequence.rotation || 0; - r += deg; - - if (r > 180) r -= 360; - if (r < -180) r += 360; - sequence.rotation = r; - - var wrap = d3_select('#photoviewer .osc-wrapper'); - - wrap - .transition() - .duration(100) - .call(imgZoom.transform, identity$7); - - wrap.selectAll('.osc-image') - .transition() - .duration(100) - .style('transform', 'rotate(' + r + 'deg)'); - }; - } - function step(stepBy) { - return function() { - if (!_oscSelectedImage) return; - var sequenceKey = _oscSelectedImage.sequence_id; - var sequence = _oscCache.sequences[sequenceKey]; - if (!sequence) return; + function clean(params) { + return omit(params, ['geometry', 'debounce']); + } - var nextIndex = _oscSelectedImage.sequence_index + stepBy; - var nextImage = sequence.images[nextIndex]; - if (!nextImage) return; - context.map().centerEase(nextImage.loc); + function filterKeys(type) { + var count_type = type ? 'count_' + type : 'count_all'; + return function(d) { + return parseFloat(d[count_type]) > 2500 || d.in_wiki; + }; + } - that - .selectImage(nextImage) - .updateViewer(nextImage); - }; - } - }, + function filterMultikeys(prefix) { + return function(d) { + // d.key begins with prefix, and d.key contains no additional ':'s + var re = new RegExp('^' + prefix + '(.*)$'); + var matches = d.key.match(re) || []; + return (matches.length === 2 && matches[1].indexOf(':') === -1); + }; + } - showViewer: function() { - var viewer = d3_select('#photoviewer') - .classed('hide', false); - var isHidden = viewer.selectAll('.photo-wrapper.osc-wrapper.hide').size(); + function filterValues(allowUpperCase) { + return function(d) { + if (d.value.match(/[;,]/) !== null) return false; // exclude some punctuation + if (!allowUpperCase && d.value.match(/[A-Z*]/) !== null) return false; // exclude uppercase letters + return parseFloat(d.fraction) > 0.0 || d.in_wiki; + }; + } - if (isHidden) { - viewer - .selectAll('.photo-wrapper:not(.osc-wrapper)') - .classed('hide', true); - viewer - .selectAll('.photo-wrapper.osc-wrapper') - .classed('hide', false); - } + function filterRoles(geometry) { + return function(d) { + if (d.role === '') return false; // exclude empty role + if (d.role.match(/[A-Z*;,]/) !== null) return false; // exclude uppercase letters and some punctuation + return parseFloat(d[tag_members_fractions[geometry]]) > 0.0; + }; + } - return this; - }, + function valKey(d) { + return { + value: d.key, + title: d.key + }; + } - hideViewer: function() { - _oscSelectedImage = null; - var viewer = d3_select('#photoviewer'); - if (!viewer.empty()) viewer.datum(null); + function valKeyDescription(d) { + return { + value: d.value, + title: d.description || d.value + }; + } - viewer - .classed('hide', true) - .selectAll('.photo-wrapper') - .classed('hide', true); - d3_selectAll('.viewfield-group, .sequence, .icon-sign') - .classed('selected', false); + function roleKey(d) { + return { + value: d.role, + title: d.role + }; + } - return this.setStyles(null, true); - }, + // sort keys with ':' lower than keys without ':' + function sortKeys(a, b) { + return (a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1) ? -1 + : (a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1) ? 1 + : 0; + } - updateViewer: function(d) { - var wrap = d3_select('#photoviewer .osc-wrapper'); - var imageWrap = wrap.selectAll('.osc-image-wrap'); - var attribution = wrap.selectAll('.photo-attribution').html(''); - wrap - .transition() - .duration(100) - .call(imgZoom.transform, identity$7); + var debouncedRequest = debounce(request$1, 500, { leading: false }); - imageWrap - .selectAll('.osc-image') - .remove(); + function request$1(url, params, exactMatch, callback, loaded) { + if (inflight$1[url]) return; - if (d) { - var sequence = _oscCache.sequences[d.sequence_id]; - var r = (sequence && sequence.rotation) || 0; + if (checkCache(url, params, exactMatch, callback)) return; - imageWrap - .append('img') - .attr('class', 'osc-image') - .attr('src', apibase$2 + '/' + d.imagePath) - .style('transform', 'rotate(' + r + 'deg)'); + inflight$1[url] = d3_json(url, function (err, data) { + delete inflight$1[url]; + loaded(err, data); + }); + } - if (d.captured_by) { - attribution - .append('a') - .attr('class', 'captured_by') - .attr('target', '_blank') - .attr('href', 'https://openstreetcam.org/user/' + encodeURIComponent(d.captured_by)) - .text('@' + d.captured_by); - attribution - .append('span') - .text('|'); - } + function checkCache(url, params, exactMatch, callback) { + var rp = params.rp || 25, + testQuery = params.query || '', + testUrl = url; - if (d.captured_at) { - attribution - .append('span') - .attr('class', 'captured_at') - .text(d.captured_at); + do { + var hit = taginfoCache[testUrl]; - attribution - .append('span') - .text('|'); - } + // exact match, or shorter match yielding fewer than max results (rp) + if (hit && (url === testUrl || hit.length < rp)) { + callback(null, hit); + return true; + } - attribution - .append('a') - .attr('class', 'image_link') - .attr('target', '_blank') - .attr('href', 'https://openstreetcam.org/details/' + d.sequence_id + '/' + d.sequence_index) - .text('openstreetcam.org'); - } - return this; - }, + // don't try to shorten the query + if (exactMatch || !testQuery.length) return false; + // do shorten the query to see if we already have a cached result + // that has returned fewer than max results (rp) + testQuery = testQuery.slice(0, -1); + testUrl = url.replace(/&query=(.*?)&/, '&query=' + testQuery + '&'); + } while (testQuery.length >= 0); - selectImage: function(d) { - _oscSelectedImage = d; - var viewer = d3_select('#photoviewer'); - if (!viewer.empty()) viewer.datum(d); + return false; + } - this.setStyles(null, true); - d3_selectAll('.icon-sign') - .classed('selected', false); + var serviceTaginfo = { - return this; - }, + init: function() { + inflight$1 = {}; + taginfoCache = {}; + popularKeys = {}; + // Fetch popular keys. We'll exclude these from `values` + // lookups because they stress taginfo, and they aren't likely + // to yield meaningful autocomplete results.. see #3955 + var params = { rp: 100, sortname: 'values_all', sortorder: 'desc', page: 1, debounce: false }; + this.keys(params, function(err, data) { + if (err) return; + data.forEach(function(d) { + if (d.value === 'opening_hours') return; // exception + popularKeys[d.value] = true; + }); + }); + }, - getSelectedImage: function() { - return _oscSelectedImage; - }, + reset: function() { + forEach(inflight$1, function(req) { req.abort(); }); + inflight$1 = {}; + }, - getSequenceKeyForImage: function(d) { - return d && d.sequence_id; - }, + keys: function(params, callback) { + var doRequest = params.debounce ? debouncedRequest : request$1; + params = clean(setSort(params)); + params = assignIn({ rp: 10, sortname: 'count_all', sortorder: 'desc', page: 1 }, params); + + var url = apibase$3 + 'keys/all?' + utilQsString(params); + doRequest(url, params, false, callback, function(err, d) { + if (err) { + callback(err); + } else { + var f = filterKeys(params.filter); + var result = d.data.filter(f).sort(sortKeys).map(valKey); + taginfoCache[url] = result; + callback(null, result); + } + }); + }, - setStyles: function(hovered, reset) { - if (reset) { // reset all layers - d3_selectAll('.viewfield-group') - .classed('highlighted', false) - .classed('hovered', false) - .classed('selected', false); - d3_selectAll('.sequence') - .classed('highlighted', false) - .classed('selected', false); - } + multikeys: function(params, callback) { + var doRequest = params.debounce ? debouncedRequest : request$1; + params = clean(setSort(params)); + params = assignIn({ rp: 25, sortname: 'count_all', sortorder: 'desc', page: 1 }, params); + var prefix = params.query; + + var url = apibase$3 + 'keys/all?' + utilQsString(params); + doRequest(url, params, true, callback, function(err, d) { + if (err) { + callback(err); + } else { + var f = filterMultikeys(prefix); + var result = d.data.filter(f).map(valKey); + taginfoCache[url] = result; + callback(null, result); + } + }); + }, - var hoveredImageKey = hovered && hovered.key; - var hoveredSequenceKey = this.getSequenceKeyForImage(hovered); - var hoveredSequence = hoveredSequenceKey && _oscCache.sequences[hoveredSequenceKey]; - var hoveredImageKeys = (hoveredSequence && hoveredSequence.images.map(function (d) { return d.key; })) || []; - var viewer = d3_select('#photoviewer'); - var selected = viewer.empty() ? undefined : viewer.datum(); - var selectedImageKey = selected && selected.key; - var selectedSequenceKey = this.getSequenceKeyForImage(selected); - var selectedSequence = selectedSequenceKey && _oscCache.sequences[selectedSequenceKey]; - var selectedImageKeys = (selectedSequence && selectedSequence.images.map(function (d) { return d.key; })) || []; + values: function(params, callback) { + // Exclude popular keys from values lookups.. see #3955 + var key = params.key; + if (key && popularKeys[key]) { + callback(null, []); + return; + } - // highlight sibling viewfields on either the selected or the hovered sequences - var highlightedImageKeys = union(hoveredImageKeys, selectedImageKeys); + var doRequest = params.debounce ? debouncedRequest : request$1; + params = clean(setSort(setFilter(params))); + params = assignIn({ rp: 25, sortname: 'count_all', sortorder: 'desc', page: 1 }, params); + + var url = apibase$3 + 'key/values?' + utilQsString(params); + doRequest(url, params, false, callback, function(err, d) { + if (err) { + callback(err); + } else { + // In most cases we prefer taginfo value results with lowercase letters. + // A few OSM keys expect values to contain uppercase values (see #3377). + // This is not an exhaustive list (e.g. `name` also has uppercase values) + // but these are the fields where taginfo value lookup is most useful. + var re = /network|taxon|genus|species|brand|grape_variety|rating|:output|_hours|_times/; + var allowUpperCase = (params.key.match(re) !== null); + var f = filterValues(allowUpperCase); + + var result = d.data.filter(f).map(valKeyDescription); + taginfoCache[url] = result; + callback(null, result); + } + }); + }, - d3_selectAll('.layer-openstreetcam-images .viewfield-group') - .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; }) - .classed('hovered', function(d) { return d.key === hoveredImageKey; }) - .classed('selected', function(d) { return d.key === selectedImageKey; }); - d3_selectAll('.layer-openstreetcam-images .sequence') - .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; }) - .classed('selected', function(d) { return d.properties.key === selectedSequenceKey; }); + roles: function(params, callback) { + var doRequest = params.debounce ? debouncedRequest : request$1; + var geometry = params.geometry; + params = clean(setSortMembers(params)); + params = assignIn({ rp: 25, sortname: 'count_all_members', sortorder: 'desc', page: 1 }, params); + + var url = apibase$3 + 'relation/roles?' + utilQsString(params); + doRequest(url, params, true, callback, function(err, d) { + if (err) { + callback(err); + } else { + var f = filterRoles(geometry); + var result = d.data.filter(f).map(roleKey); + taginfoCache[url] = result; + callback(null, result); + } + }); + }, - return this; - }, + docs: function(params, callback) { + var doRequest = params.debounce ? debouncedRequest : request$1; + params = clean(setSort(params)); - cache: function() { - return _oscCache; - } - -}; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax$4 = Math.max; - -/** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ -function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax$4(toInteger(size), 0); - } - var length = array == null ? 0 : array.length; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; -} - -var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; -} - -var hashes = createCommonjsModule(function (module, exports) { -/** - * jshashes - https://github.com/h2non/jshashes - * Released under the "New BSD" license - * - * Algorithms specification: - * - * MD5 - http://www.ietf.org/rfc/rfc1321.txt - * RIPEMD-160 - http://homes.esat.kuleuven.be/~bosselae/ripemd160.html - * SHA1 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf - * SHA256 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf - * SHA512 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf - * HMAC - http://www.ietf.org/rfc/rfc2104.txt - */ -(function() { - var Hashes; - - function utf8Encode(str) { - var x, y, output = '', - i = -1, - l; - - if (str && str.length) { - l = str.length; - while ((i += 1) < l) { - /* Decode utf-16 surrogate pairs */ - x = str.charCodeAt(i); - y = i + 1 < l ? str.charCodeAt(i + 1) : 0; - if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) { - x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF); - i += 1; - } - /* Encode output as utf-8 */ - if (x <= 0x7F) { - output += String.fromCharCode(x); - } else if (x <= 0x7FF) { - output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F), - 0x80 | (x & 0x3F)); - } else if (x <= 0xFFFF) { - output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), - 0x80 | ((x >>> 6) & 0x3F), - 0x80 | (x & 0x3F)); - } else if (x <= 0x1FFFFF) { - output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), - 0x80 | ((x >>> 12) & 0x3F), - 0x80 | ((x >>> 6) & 0x3F), - 0x80 | (x & 0x3F)); - } - } - } - return output; - } + var path = 'key/wiki_pages?'; + if (params.value) path = 'tag/wiki_pages?'; + else if (params.rtype) path = 'relation/wiki_pages?'; - function utf8Decode(str) { - var i, ac, c1, c2, c3, arr = [], - l; - i = ac = c1 = c2 = c3 = 0; + var url = apibase$3 + path + utilQsString(params); + doRequest(url, params, true, callback, function(err, d) { + if (err) { + callback(err); + } else { + taginfoCache[url] = d.data; + callback(null, d.data); + } + }); + }, - if (str && str.length) { - l = str.length; - str += ''; - while (i < l) { - c1 = str.charCodeAt(i); - ac += 1; - if (c1 < 128) { - arr[ac] = String.fromCharCode(c1); - i += 1; - } else if (c1 > 191 && c1 < 224) { - c2 = str.charCodeAt(i + 1); - arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63)); - i += 2; - } else { - c2 = str.charCodeAt(i + 1); - c3 = str.charCodeAt(i + 2); - arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); - i += 3; - } + apibase: function(_) { + if (!arguments.length) return apibase$3; + apibase$3 = _; + return this; } - } - return arr.join(''); - } - - /** - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ - - function safe_add(x, y) { - var lsw = (x & 0xFFFF) + (y & 0xFFFF), - msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); - } - /** - * Bitwise rotate a 32-bit number to the left. - */ + }; - function bit_rol(num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)); - } + var jsonpCache = {}; + window.jsonpCache = jsonpCache; - /** - * Convert a raw string to a hex string - */ + function jsonpRequest(url, callback) { - function rstr2hex(input, hexcase) { - var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef', - output = '', - x, i = 0, - l = input.length; - for (; i < l; i += 1) { - x = input.charCodeAt(i); - output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F); + if (window.JSONP_FIX) { + if (window.JSONP_DELAY === 0) { + callback(window.JSONP_FIX); + } else { + setTimeout(function() { + callback(window.JSONP_FIX); + }, window.JSONP_DELAY || 0); + } + return; } - return output; - } - /** - * Convert an array of big-endian words to a string - */ - - function binb2rstr(input) { - var i, l = input.length * 32, - output = ''; - for (i = 0; i < l; i += 8) { - output += String.fromCharCode((input[i >> 5] >>> (24 - i % 32)) & 0xFF); + function rand() { + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', + c = '', i = -1; + while (++i < 15) c += chars.charAt(Math.floor(Math.random() * 52)); + return c; } - return output; - } - - /** - * Convert an array of little-endian words to a string - */ - function binl2rstr(input) { - var i, l = input.length * 32, - output = ''; - for (i = 0; i < l; i += 8) { - output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF); + function create$$1(url) { + var e = url.match(/callback=(\w+)/), + c = e ? e[1] : rand(); + jsonpCache[c] = function(data) { + callback(data); + delete jsonpCache[c]; + script.remove(); + }; + return 'jsonpCache.' + c; } - return output; - } - - /** - * Convert a raw string to an array of little-endian words - * Characters >255 have their high-byte silently ignored. - */ - function rstr2binl(input) { - var i, l = input.length * 8, - output = Array(input.length >> 2), - lo = output.length; - for (i = 0; i < lo; i += 1) { - output[i] = 0; - } - for (i = 0; i < l; i += 8) { - output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32); - } - return output; + var cb = create$$1(url), + script = select('head') + .append('script') + .attr('type', 'text/javascript') + .attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb)); } - /** - * Convert a raw string to an array of big-endian words - * Characters >255 have their high-byte silently ignored. - */ + var endpoint = 'https://www.wikidata.org/w/api.php?'; - function rstr2binb(input) { - var i, l = input.length * 8, - output = Array(input.length >> 2), - lo = output.length; - for (i = 0; i < lo; i += 1) { - output[i] = 0; - } - for (i = 0; i < l; i += 8) { - output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32); - } - return output; - } + var serviceWikidata = { - /** - * Convert a raw string to an arbitrary string encoding - */ + init: function() {}, + reset: function() {}, - function rstr2any(input, encoding) { - var divisor = encoding.length, - remainders = Array(), - i, q, x, ld, quotient, dividend, output, full_length; - /* Convert to an array of 16-bit big-endian values, forming the dividend */ - dividend = Array(Math.ceil(input.length / 2)); - ld = dividend.length; - for (i = 0; i < ld; i += 1) { - dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1); - } + // Given a Wikipedia language and article title, return an array of + // corresponding Wikidata entities. + itemsByTitle: function(lang, title, callback) { + if (!title) { + callback('', {}); + return; + } - /** - * Repeatedly perform a long division. The binary array forms the dividend, - * the length of the encoding is the divisor. Once computed, the quotient - * forms the dividend for the next step. We stop when the dividend is zerHashes. - * All remainders are stored for later use. - */ - while (dividend.length > 0) { - quotient = Array(); - x = 0; - for (i = 0; i < dividend.length; i += 1) { - x = (x << 16) + dividend[i]; - q = Math.floor(x / divisor); - x -= q * divisor; - if (quotient.length > 0 || q > 0) { - quotient[quotient.length] = q; - } + lang = lang || 'en'; + jsonpRequest(endpoint + utilQsString({ + action: 'wbgetentities', + format: 'json', + sites: lang.replace(/-/g, '_') + 'wiki', + titles: title, + languages: 'en', // shrink response by filtering to one language + callback: '{callback}' + }), function(data) { + if (!data || data.error) { + callback('', {}); + } else { + callback(title, data.entities || {}); + } + }); } - remainders[remainders.length] = x; - dividend = quotient; - } - /* Convert the remainders to the output string */ - output = ''; - for (i = remainders.length - 1; i >= 0; i--) { - output += encoding.charAt(remainders[i]); - } + }; - /* Append leading zero equivalents */ - full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2))); - for (i = output.length; i < full_length; i += 1) { - output = encoding[0] + output; - } - return output; - } + var endpoint$1 = 'https://en.wikipedia.org/w/api.php?'; - /** - * Convert a raw string to a base-64 string - */ + var serviceWikipedia = { - function rstr2b64(input, b64pad) { - var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', - output = '', - len = input.length, - i, j, triplet; - b64pad = b64pad || '='; - for (i = 0; i < len; i += 3) { - triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0); - for (j = 0; j < 4; j += 1) { - if (i * 8 + j * 6 > input.length * 8) { - output += b64pad; - } else { - output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F); - } - } - } - return output; - } + init: function() {}, + reset: function() {}, - Hashes = { - /** - * @property {String} version - * @readonly - */ - VERSION: '1.0.6', - /** - * @member Hashes - * @class Base64 - * @constructor - */ - Base64: function() { - // private properties - var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', - pad = '=', // default pad according with the RFC standard - utf8 = true; // by default enable UTF-8 support encoding - - // public method for encoding - this.encode = function(input) { - var i, j, triplet, - output = '', - len = input.length; - - pad = pad || '='; - input = (utf8) ? utf8Encode(input) : input; - - for (i = 0; i < len; i += 3) { - triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0); - for (j = 0; j < 4; j += 1) { - if (i * 8 + j * 6 > len * 8) { - output += pad; - } else { - output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F); - } + + search: function(lang, query, callback) { + if (!query) { + callback('', []); + return; } - } - return output; - }; - // public method for decoding - this.decode = function(input) { - // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - var i, o1, o2, o3, h1, h2, h3, h4, bits, ac, - dec = '', - arr = []; - if (!input) { - return input; - } + lang = lang || 'en'; + jsonpRequest(endpoint$1.replace('en', lang) + + utilQsString({ + action: 'query', + list: 'search', + srlimit: '10', + srinfo: 'suggestion', + format: 'json', + callback: '{callback}', + srsearch: query + }), function(data) { + if (!data || !data.query || !data.query.search || data.error) { + callback('', []); + } else { + var results = data.query.search.map(function(d) { return d.title; }); + callback(query, results); + } + } + ); + }, - i = ac = 0; - input = input.replace(new RegExp('\\' + pad, 'gi'), ''); // use '=' - //input += ''; - do { // unpack four hexets into three octets using index points in b64 - h1 = tab.indexOf(input.charAt(i += 1)); - h2 = tab.indexOf(input.charAt(i += 1)); - h3 = tab.indexOf(input.charAt(i += 1)); - h4 = tab.indexOf(input.charAt(i += 1)); + suggestions: function(lang, query, callback) { + if (!query) { + callback('', []); + return; + } - bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; + lang = lang || 'en'; + jsonpRequest(endpoint$1.replace('en', lang) + + utilQsString({ + action: 'opensearch', + namespace: 0, + suggest: '', + format: 'json', + callback: '{callback}', + search: query + }), function(data) { + if (!data || data.error) { + callback('', []); + } else { + callback(data[0], data[1] || []); + } + } + ); + }, - o1 = bits >> 16 & 0xff; - o2 = bits >> 8 & 0xff; - o3 = bits & 0xff; - ac += 1; - if (h3 === 64) { - arr[ac] = String.fromCharCode(o1); - } else if (h4 === 64) { - arr[ac] = String.fromCharCode(o1, o2); - } else { - arr[ac] = String.fromCharCode(o1, o2, o3); + translations: function(lang, title, callback) { + if (!title) { + callback({}); + return; } - } while (i < input.length); - dec = arr.join(''); - dec = (utf8) ? utf8Decode(dec) : dec; + jsonpRequest(endpoint$1.replace('en', lang) + + utilQsString({ + action: 'query', + prop: 'langlinks', + format: 'json', + callback: '{callback}', + lllimit: 500, + titles: title + }), function(data) { + if (!data || !data.query || !data.query.pages || data.error) { + callback({}); + } else { + var list = data.query.pages[Object.keys(data.query.pages)[0]], + translations = {}; + if (list && list.langlinks) { + list.langlinks.forEach(function(d) { + translations[d.lang] = d['*']; + }); + } + callback(translations); + } + } + ); + } - return dec; - }; + }; - // set custom pad string - this.setPad = function(str) { - pad = str || pad; - return this; - }; - // set custom tab string characters - this.setTab = function(str) { - tab = str || tab; - return this; - }; - this.setUTF8 = function(bool) { - if (typeof bool === 'boolean') { - utf8 = bool; - } - return this; - }; - }, + var services = { + geocoder: serviceNominatim, + mapillary: serviceMapillary, + openstreetcam: serviceOpenstreetcam, + osm: serviceOsm, + taginfo: serviceTaginfo, + wikidata: serviceWikidata, + wikipedia: serviceWikipedia + }; - /** - * CRC-32 calculation - * @member Hashes - * @method CRC32 - * @static - * @param {String} str Input String - * @return {String} - */ - CRC32: function(str) { - var crc = 0, - x = 0, - y = 0, - table, i, iTop; - str = utf8Encode(str); - - table = [ - '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ', - '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ', - '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ', - '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ', - 'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ', - '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ', - 'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ', - '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ', - 'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ', - '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ', - 'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ', - '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ', - 'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ', - '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ', - '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ', - '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ', - '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ', - 'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ', - '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ', - 'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ', - '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ', - 'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ', - '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ', - 'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ', - '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ', - 'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D' - ].join(''); - - crc = crc ^ (-1); - for (i = 0, iTop = str.length; i < iTop; i += 1) { - y = (crc ^ str.charCodeAt(i)) & 0xFF; - x = '0x' + table.substr(y * 9, 8); - crc = (crc >>> 8) ^ x; - } - // always return a positive number (that's what >>> 0 does) - return (crc ^ (-1)) >>> 0; - }, - /** - * @member Hashes - * @class MD5 - * @constructor - * @param {Object} [config] - * - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See for more infHashes. - */ - MD5: function(options) { - /** - * Private config properties. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase} - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase - b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding + var _isSaving = false; - // privileged (public) methods - this.hex = function(s) { - return rstr2hex(rstr(s, utf8), hexcase); - }; - this.b64 = function(s) { - return rstr2b64(rstr(s), b64pad); - }; - this.any = function(s, e) { - return rstr2any(rstr(s, utf8), e); - }; - this.raw = function(s) { - return rstr(s, utf8); - }; - this.hex_hmac = function(k, d) { - return rstr2hex(rstr_hmac(k, d), hexcase); - }; - this.b64_hmac = function(k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); - }; - this.any_hmac = function(k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - */ - this.vm_test = function() { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * Enable/disable uppercase hexadecimal returned string - * @param {Boolean} - * @return {Object} this - */ - this.setUpperCase = function(a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; - }; - /** - * Defines a base64 pad string - * @param {String} Pad - * @return {Object} this - */ - this.setPad = function(a) { - b64pad = a || b64pad; - return this; - }; - /** - * Defines a base64 pad string - * @param {Boolean} - * @return {Object} [this] - */ - this.setUTF8 = function(a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; - }; - // private methods + function modeSave$$1(context) { + var mode = { id: 'save' }; + var keybinding = d3keybinding('modeSave'); - /** - * Calculate the MD5 of a raw string - */ + var loading = uiLoading(context) + .message(t('save.uploading')) + .blocking(true); - function rstr(s) { - s = (utf8) ? utf8Encode(s) : s; - return binl2rstr(binl(rstr2binl(s), s.length * 8)); - } + var commit = uiCommit(context) + .on('cancel', cancel) + .on('save', save); - /** - * Calculate the HMAC-MD5, of a key and some data (raw strings) - */ + var _toCheck = []; + var _toLoad = []; + var _loaded = {}; + var _toLoadCount = 0; + var _toLoadTotal = 0; - function rstr_hmac(key, data) { - var bkey, ipad, opad, hash, i; + var _conflicts = []; + var _errors = []; + var _origChanges; + var _location; - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - bkey = rstr2binl(key); - if (bkey.length > 16) { - bkey = binl(bkey, key.length * 8); - } - ipad = Array(16), opad = Array(16); - for (i = 0; i < 16; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8); - return binl2rstr(binl(opad.concat(hash), 512 + 128)); + function cancel(selectedID) { + if (selectedID) { + context.enter(modeSelect(context, [selectedID])); + } else { + context.enter(modeBrowse(context)); + } } - /** - * Calculate the MD5 of an array of little-endian words, and a bit length. - */ - function binl(x, len) { - var i, olda, oldb, oldc, oldd, - a = 1732584193, - b = -271733879, - c = -1732584194, - d = 271733878; - - /* append padding */ - x[len >> 5] |= 0x80 << ((len) % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - - for (i = 0; i < x.length; i += 16) { - olda = a; - oldb = b; - oldc = c; - oldd = d; - - a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); - d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); - c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); - b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); - a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); - d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); - c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); - b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); - a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); - d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); - c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); - b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); - a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); - d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); - c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); - b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); - - a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); - d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); - c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); - b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); - a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); - d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); - c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); - b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); - a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); - d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); - c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); - b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); - a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); - d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); - c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); - b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); - - a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); - d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); - c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); - b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); - a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); - d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); - c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); - b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); - a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); - d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222); - c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); - b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); - a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); - d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); - c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); - b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); - - a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844); - d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); - c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); - b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); - a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); - d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); - c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); - b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); - a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); - d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); - c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); - b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); - a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); - d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); - c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); - b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); - - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - } - return Array(a, b, c, d); - } + function save(changeset, tryAgain, checkConflicts) { + // Guard against accidentally entering save code twice - #4641 + if (_isSaving && !tryAgain) { + return; + } - /** - * These functions implement the four basic operations the algorithm uses. - */ + var osm = context.connection(); + if (!osm) { + cancel(); + return; + } - function md5_cmn(q, a, b, x, s, t) { - return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); - } + // If user somehow got logged out mid-save, try to reauthenticate.. + // This can happen if they were logged in from before, but the tokens are no longer valid. + if (!osm.authenticated()) { + osm.authenticate(function(err) { + if (err) { + cancel(); // quit save mode.. + } else { + save(changeset, tryAgain, checkConflicts); // continue where we left off.. + } + }); + return; + } - function md5_ff(a, b, c, d, x, s, t) { - return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); - } + if (!_isSaving) { + keybindingOff(); + context.container().call(loading); // block input + _isSaving = true; + } - function md5_gg(a, b, c, d, x, s, t) { - return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); - } + var history = context.history(); + var localGraph = context.graph(); + var remoteGraph = coreGraph$$1(history.base(), true); - function md5_hh(a, b, c, d, x, s, t) { - return md5_cmn(b ^ c ^ d, a, b, x, s, t); - } + _conflicts = []; + _errors = []; - function md5_ii(a, b, c, d, x, s, t) { - return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); - } - }, - /** - * @member Hashes - * @class Hashes.SHA1 - * @param {Object} [config] - * @constructor - * - * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1 - * Version 2.2 Copyright Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See http://pajhome.org.uk/crypt/md5 for details. - */ - SHA1: function(options) { - /** - * Private config properties. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase} - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase - b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding + // Store original changes, in case user wants to download them as an .osc file + _origChanges = history.changes(actionDiscardTags(history.difference())); - // public methods - this.hex = function(s) { - return rstr2hex(rstr(s, utf8), hexcase); - }; - this.b64 = function(s) { - return rstr2b64(rstr(s, utf8), b64pad); - }; - this.any = function(s, e) { - return rstr2any(rstr(s, utf8), e); - }; - this.raw = function(s) { - return rstr(s, utf8); - }; - this.hex_hmac = function(k, d) { - return rstr2hex(rstr_hmac(k, d)); - }; - this.b64_hmac = function(k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); - }; - this.any_hmac = function(k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - * @public - */ - this.vm_test = function() { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * @description Enable/disable uppercase hexadecimal returned string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUpperCase = function(a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; - }; - /** - * @description Defines a base64 pad string - * @param {string} Pad - * @return {Object} this - * @public - */ - this.setPad = function(a) { - b64pad = a || b64pad; - return this; - }; - /** - * @description Defines a base64 pad string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUTF8 = function(a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; - }; + // First time, `history.perform` a no-op action. + // Any conflict resolutions will be done as `history.replace` + if (!tryAgain) { + history.perform(actionNoop()); + } - // private methods + // Attempt a fast upload.. If there are conflicts, re-enter with `checkConflicts = true` + if (!checkConflicts) { + upload(changeset); - /** - * Calculate the SHA-512 of a raw string - */ + // Do the full (slow) conflict check.. + } else { + var modified = filter(history.difference().summary(), { changeType: 'modified' }); + _toCheck = map$3(map$3(modified, 'entity'), 'id'); + _toLoad = withChildNodes(_toCheck, localGraph); + _loaded = {}; + _toLoadCount = 0; + _toLoadTotal = _toLoad.length; + + if (_toCheck.length) { + showProgress(_toLoadCount, _toLoadTotal); + _toLoad.forEach(function(id) { _loaded[id] = false; }); + osm.loadMultiple(_toLoad, loaded); + } else { + upload(changeset); + } + } - function rstr(s) { - s = (utf8) ? utf8Encode(s) : s; - return binb2rstr(binb(rstr2binb(s), s.length * 8)); - } + return; - /** - * Calculate the HMAC-SHA1 of a key and some data (raw strings) - */ - function rstr_hmac(key, data) { - var bkey, ipad, opad, i, hash; - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - bkey = rstr2binb(key); + function withChildNodes(ids, graph) { + return uniq(reduce(ids, function(result, id) { + var entity = graph.entity(id); + if (entity.type === 'way') { + try { + var children = graph.childNodes(entity); + result.push.apply(result, map$3(filter(children, 'version'), 'id')); + } catch (err) { + /* eslint-disable no-console */ + if (typeof console !== 'undefined') console.error(err); + /* eslint-enable no-console */ + } + } + return result; + }, clone(ids))); + } - if (bkey.length > 16) { - bkey = binb(bkey, key.length * 8); - } - ipad = Array(16), opad = Array(16); - for (i = 0; i < 16; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8); - return binb2rstr(binb(opad.concat(hash), 512 + 160)); - } - /** - * Calculate the SHA-1 of an array of big-endian words, and a bit length - */ + // Reload modified entities into an alternate graph and check for conflicts.. + function loaded(err, result) { + if (_errors.length) return; + + if (err) { + _errors.push({ + msg: err.message || err.responseText, + details: [ t('save.status_code', { code: err.status }) ] + }); + showErrors(); + + } else { + var loadMore = []; + + result.data.forEach(function(entity) { + remoteGraph.replace(entity); + _loaded[entity.id] = true; + _toLoad = without(_toLoad, entity.id); + + if (!entity.visible) return; + + // Because loadMultiple doesn't download /full like loadEntity, + // need to also load children that aren't already being checked.. + var i, id; + if (entity.type === 'way') { + for (i = 0; i < entity.nodes.length; i++) { + id = entity.nodes[i]; + if (_loaded[id] === undefined) { + _loaded[id] = false; + loadMore.push(id); + } + } + } else if (entity.type === 'relation' && entity.isMultipolygon()) { + for (i = 0; i < entity.members.length; i++) { + id = entity.members[i].id; + if (_loaded[id] === undefined) { + _loaded[id] = false; + loadMore.push(id); + } + } + } + }); + + _toLoadCount += result.data.length; + _toLoadTotal += loadMore.length; + showProgress(_toLoadCount, _toLoadTotal); + + if (loadMore.length) { + _toLoad.push.apply(_toLoad, loadMore); + osm.loadMultiple(loadMore, loaded); + } + + if (!_toLoad.length) { + detectConflicts(); + } + } + } - function binb(x, len) { - var i, j, t, olda, oldb, oldc, oldd, olde, - w = Array(80), - a = 1732584193, - b = -271733879, - c = -1732584194, - d = 271733878, - e = -1009589776; - - /* append padding */ - x[len >> 5] |= 0x80 << (24 - len % 32); - x[((len + 64 >> 9) << 4) + 15] = len; - - for (i = 0; i < x.length; i += 16) { - olda = a; - oldb = b; - oldc = c; - oldd = d; - olde = e; - - for (j = 0; j < 80; j += 1) { - if (j < 16) { - w[j] = x[i + j]; - } else { - w[j] = bit_rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1); - } - t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)), - safe_add(safe_add(e, w[j]), sha1_kt(j))); - e = d; - d = c; - c = bit_rol(b, 30); - b = a; - a = t; - } - - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - e = safe_add(e, olde); - } - return Array(a, b, c, d, e); + + function detectConflicts() { + function choice(id, text, action) { + return { id: id, text: text, action: function() { history.replace(action); } }; + } + function formatUser(d) { + return '' + d + ''; + } + function entityName(entity) { + return utilDisplayName(entity) || (utilDisplayType(entity.id) + ' ' + entity.id); + } + + function sameVersions(local$$1, remote) { + if (local$$1.version !== remote.version) return false; + + if (local$$1.type === 'way') { + var children = union(local$$1.nodes, remote.nodes); + for (var i = 0; i < children.length; i++) { + var a = localGraph.hasEntity(children[i]); + var b = remoteGraph.hasEntity(children[i]); + if (a && b && a.version !== b.version) return false; + } + } + + return true; + } + + _toCheck.forEach(function(id) { + var local$$1 = localGraph.entity(id); + var remote = remoteGraph.entity(id); + + if (sameVersions(local$$1, remote)) return; + + var action = actionMergeRemoteChanges; + var merge = action(id, localGraph, remoteGraph, formatUser); + + history.replace(merge); + + var mergeConflicts = merge.conflicts(); + if (!mergeConflicts.length) return; // merged safely + + var forceLocal = action(id, localGraph, remoteGraph).withOption('force_local'); + var forceRemote = action(id, localGraph, remoteGraph).withOption('force_remote'); + var keepMine = t('save.conflict.' + (remote.visible ? 'keep_local' : 'restore')); + var keepTheirs = t('save.conflict.' + (remote.visible ? 'keep_remote' : 'delete')); + + _conflicts.push({ + id: id, + name: entityName(local$$1), + details: mergeConflicts, + chosen: 1, + choices: [ + choice(id, keepMine, forceLocal), + choice(id, keepTheirs, forceRemote) + ] + }); + }); + + upload(changeset); + } } - /** - * Perform the appropriate triplet combination function for the current - * iteration - */ - function sha1_ft(t, b, c, d) { - if (t < 20) { - return (b & c) | ((~b) & d); - } - if (t < 40) { - return b ^ c ^ d; - } - if (t < 60) { - return (b & c) | (b & d) | (c & d); - } - return b ^ c ^ d; - } + function upload(changeset) { + var osm = context.connection(); + if (!osm) { + _errors.push({ msg: 'No OSM Service' }); + } - /** - * Determine the appropriate additive constant for the current iteration - */ + if (_conflicts.length) { + _conflicts.sort(function(a, b) { return b.id.localeCompare(a.id); }); + showConflicts(changeset); - function sha1_kt(t) { - return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : - (t < 60) ? -1894007588 : -899497514; - } - }, - /** - * @class Hashes.SHA256 - * @param {config} - * - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2 - * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See http://pajhome.org.uk/crypt/md5 for details. - * Also http://anmar.eu.org/projects/jssha2/ - */ - SHA256: function(options) { - /** - * Private properties configuration variables. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * @see this.setUpperCase() method - * @see this.setPad() method - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase */ - b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', - /* base-64 pad character. Default '=' for strict RFC compliance */ - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, - /* enable/disable utf8 encoding */ - sha256_K; + } else if (_errors.length) { + showErrors(); - /* privileged (public) methods */ - this.hex = function(s) { - return rstr2hex(rstr(s, utf8)); - }; - this.b64 = function(s) { - return rstr2b64(rstr(s, utf8), b64pad); - }; - this.any = function(s, e) { - return rstr2any(rstr(s, utf8), e); - }; - this.raw = function(s) { - return rstr(s, utf8); - }; - this.hex_hmac = function(k, d) { - return rstr2hex(rstr_hmac(k, d)); - }; - this.b64_hmac = function(k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); - }; - this.any_hmac = function(k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - * @public - */ - this.vm_test = function() { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * Enable/disable uppercase hexadecimal returned string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUpperCase = function(a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; - }; - /** - * @description Defines a base64 pad string - * @param {string} Pad - * @return {Object} this - * @public - */ - this.setPad = function(a) { - b64pad = a || b64pad; - return this; - }; - /** - * Defines a base64 pad string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUTF8 = function(a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; - }; + } else { + var history = context.history(); + var changes = history.changes(actionDiscardTags(history.difference())); + if (changes.modified.length || changes.created.length || changes.deleted.length) { + loadLocation(); // so it is ready when we display the save screen + osm.putChangeset(changeset, changes, uploadCallback); + } else { // changes were insignificant or reverted by user + select('.inspector-wrap *').remove(); + loading.close(); + _isSaving = false; + context.flush(); + cancel(); + } + } + } - // private methods - /** - * Calculate the SHA-512 of a raw string - */ + function uploadCallback(err, changeset) { + if (err) { + if (err.status === 409) { // 409 Conflict + save(changeset, true, true); // tryAgain = true, checkConflicts = true + } else { + _errors.push({ + msg: err.message || err.responseText, + details: [ t('save.status_code', { code: err.status }) ] + }); + showErrors(); + } - function rstr(s, utf8) { - s = (utf8) ? utf8Encode(s) : s; - return binb2rstr(binb(rstr2binb(s), s.length * 8)); + } else { + context.history().clearSaved(); + success(changeset); + // Add delay to allow for postgres replication #1646 #2678 + window.setTimeout(function() { + select('.inspector-wrap *').remove(); + loading.close(); + _isSaving = false; + context.flush(); + }, 2500); + } } - /** - * Calculate the HMAC-sha256 of a key and some data (raw strings) - */ - function rstr_hmac(key, data) { - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - var hash, i = 0, - bkey = rstr2binb(key), - ipad = Array(16), - opad = Array(16); + function showProgress(num, total) { + var modal = context.container().select('.loading-modal .modal-section'); + var progress = modal.selectAll('.progress') + .data([0]); - if (bkey.length > 16) { - bkey = binb(bkey, key.length * 8); - } + // enter/update + progress.enter() + .append('div') + .attr('class', 'progress') + .merge(progress) + .text(t('save.conflict_progress', { num: num, total: total })); + } - for (; i < 16; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8); - return binb2rstr(binb(opad.concat(hash), 512 + 256)); + function showConflicts(changeset) { + var history = context.history(); + var selection$$1 = context.container() + .select('#sidebar') + .append('div') + .attr('class','sidebar-component'); + + loading.close(); + _isSaving = false; + + var ui = uiConflicts(context) + .conflictList(_conflicts) + .origChanges(_origChanges) + .on('cancel', function() { + history.pop(); + selection$$1.remove(); + keybindingOn(); + }) + .on('save', function() { + for (var i = 0; i < _conflicts.length; i++) { + if (_conflicts[i].chosen === 1) { // user chose "keep theirs" + var entity = context.hasEntity(_conflicts[i].id); + if (entity && entity.type === 'way') { + var children = uniq(entity.nodes); + for (var j = 0; j < children.length; j++) { + history.replace(actionRevert(children[j])); + } + } + history.replace(actionRevert(_conflicts[i].id)); + } + } + + selection$$1.remove(); + save(changeset, true, false); // tryAgain = true, checkConflicts = false + }); + + selection$$1.call(ui); } - /* - * Main sha256 function, with its support functions - */ - function sha256_S(X, n) { - return (X >>> n) | (X << (32 - n)); - } + function showErrors() { + keybindingOn(); + context.history().pop(); + loading.close(); + _isSaving = false; - function sha256_R(X, n) { - return (X >>> n); - } + var selection$$1 = uiConfirm(context.container()); + selection$$1 + .select('.modal-section.header') + .append('h3') + .text(t('save.error')); - function sha256_Ch(x, y, z) { - return ((x & y) ^ ((~x) & z)); + addErrors(selection$$1, _errors); + selection$$1.okButton(); } - function sha256_Maj(x, y, z) { - return ((x & y) ^ (x & z) ^ (y & z)); - } - function sha256_Sigma0256(x) { - return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22)); + function addErrors(selection$$1, data) { + var message = selection$$1 + .select('.modal-section.message-text'); + + var items = message + .selectAll('.error-container') + .data(data); + + var enter = items.enter() + .append('div') + .attr('class', 'error-container'); + + enter + .append('a') + .attr('class', 'error-description') + .attr('href', '#') + .classed('hide-toggle', true) + .text(function(d) { return d.msg || t('save.unknown_error_details'); }) + .on('click', function() { + event.preventDefault(); + + var error = select(this); + var detail = select(this.nextElementSibling); + var exp = error.classed('expanded'); + + detail.style('display', exp ? 'none' : 'block'); + error.classed('expanded', !exp); + }); + + var details = enter + .append('div') + .attr('class', 'error-detail-container') + .style('display', 'none'); + + details + .append('ul') + .attr('class', 'error-detail-list') + .selectAll('li') + .data(function(d) { return d.details || []; }) + .enter() + .append('li') + .attr('class', 'error-detail-item') + .text(function(d) { return d; }); + + items.exit() + .remove(); } - function sha256_Sigma1256(x) { - return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25)); + + function success(changeset) { + commit.reset(); + + var ui = uiSuccess$$1(context) + .changeset(changeset) + .location(_location) + .on('cancel', function() { context.ui().sidebar.hide(); }); + + context.enter(modeBrowse(context).sidebar(ui)); } - function sha256_Gamma0256(x) { - return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3)); + + function keybindingOn() { + select(document) + .call(keybinding.on('⎋', cancel, true)); } - function sha256_Gamma1256(x) { - return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10)); + + function keybindingOff() { + select(document) + .call(keybinding.off); } - sha256_K = [ - 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987, - 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522, - 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585, - 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, - 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344, - 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, - 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998 - ]; - function binb(m, l) { - var HASH = [1779033703, -1150833019, 1013904242, -1521486534, - 1359893119, -1694144372, 528734635, 1541459225 - ]; - var W = new Array(64); - var a, b, c, d, e, f, g, h; - var i, j, T1, T2; - - /* append padding */ - m[l >> 5] |= 0x80 << (24 - l % 32); - m[((l + 64 >> 9) << 4) + 15] = l; - - for (i = 0; i < m.length; i += 16) { - a = HASH[0]; - b = HASH[1]; - c = HASH[2]; - d = HASH[3]; - e = HASH[4]; - f = HASH[5]; - g = HASH[6]; - h = HASH[7]; - - for (j = 0; j < 64; j += 1) { - if (j < 16) { - W[j] = m[j + i]; - } else { - W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]), - sha256_Gamma0256(W[j - 15])), W[j - 16]); - } + // Reverse geocode current map location so we can display a message on + // the success screen like "Thank you for editing around city, state." + function loadLocation() { + _location = null; + if (!services.geocoder) return; - T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)), - sha256_K[j]), W[j]); - T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c)); - h = g; - g = f; - f = e; - e = safe_add(d, T1); - d = c; - c = b; - b = a; - a = safe_add(T1, T2); - } - - HASH[0] = safe_add(a, HASH[0]); - HASH[1] = safe_add(b, HASH[1]); - HASH[2] = safe_add(c, HASH[2]); - HASH[3] = safe_add(d, HASH[3]); - HASH[4] = safe_add(e, HASH[4]); - HASH[5] = safe_add(f, HASH[5]); - HASH[6] = safe_add(g, HASH[6]); - HASH[7] = safe_add(h, HASH[7]); - } - return HASH; + services.geocoder.reverse(context.map().center(), function(err, result) { + if (err || !result || !result.address) return; + + var parts = []; + var addr = result.address; + var city = addr && (addr.suburb || addr.city || addr.county); + if (city) parts.push(city); + var region = addr && (addr.state || addr.country); + if (region) parts.push(region); + + _location = parts.join(', '); + }); } - }, - /** - * @class Hashes.SHA512 - * @param {config} - * - * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2 - * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See http://pajhome.org.uk/crypt/md5 for details. - */ - SHA512: function(options) { - /** - * Private properties configuration variables. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * @see this.setUpperCase() method - * @see this.setPad() method - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, - /* hexadecimal output case format. false - lowercase; true - uppercase */ - b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', - /* base-64 pad character. Default '=' for strict RFC compliance */ - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, - /* enable/disable utf8 encoding */ - sha512_k; + mode.enter = function() { + function done() { + context.ui().sidebar.show(commit); + } - /* privileged (public) methods */ - this.hex = function(s) { - return rstr2hex(rstr(s)); - }; - this.b64 = function(s) { - return rstr2b64(rstr(s), b64pad); - }; - this.any = function(s, e) { - return rstr2any(rstr(s), e); - }; - this.raw = function(s) { - return rstr(s, utf8); - }; - this.hex_hmac = function(k, d) { - return rstr2hex(rstr_hmac(k, d)); - }; - this.b64_hmac = function(k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); - }; - this.any_hmac = function(k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - * @public - */ - this.vm_test = function() { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * @description Enable/disable uppercase hexadecimal returned string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUpperCase = function(a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; - }; - /** - * @description Defines a base64 pad string - * @param {string} Pad - * @return {Object} this - * @public - */ - this.setPad = function(a) { - b64pad = a || b64pad; - return this; + keybindingOn(); + + context.container().selectAll('#content') + .attr('class', 'inactive'); + + var osm = context.connection(); + if (!osm) { + cancel(); + return; + } + + if (osm.authenticated()) { + done(); + } else { + osm.authenticate(function(err) { + if (err) { + cancel(); + } else { + done(); + } + }); + } }; - /** - * @description Defines a base64 pad string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUTF8 = function(a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; + + + mode.exit = function() { + _isSaving = false; + + keybindingOff(); + + context.container().selectAll('#content') + .attr('class', 'active'); + + context.ui().sidebar.hide(); }; - /* private methods */ + return mode; + } - /** - * Calculate the SHA-512 of a raw string - */ + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMin$1 = Math.min; - function rstr(s) { - s = (utf8) ? utf8Encode(s) : s; - return binb2rstr(binb(rstr2binb(s), s.length * 8)); + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); } - /* - * Calculate the HMAC-SHA-512 of a key and some data (raw strings) - */ + maxLength = nativeMin$1(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; - function rstr_hmac(key, data) { - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; + var index = -1, + seen = caches[0]; - var hash, i = 0, - bkey = rstr2binb(key), - ipad = Array(32), - opad = Array(32); + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; - if (bkey.length > 32) { - bkey = binb(bkey, key.length * 8); + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } } - - for (; i < 32; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; + if (seen) { + seen.push(computed); } - - hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8); - return binb2rstr(binb(opad.concat(hash), 1024 + 512)); + result.push(value); } + } + return result; + } - /** - * Calculate the SHA-512 of an array of big-endian dwords, and a bit length - */ + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } - function binb(x, len) { - var j, i, l, - W = new Array(80), - hash = new Array(16), - //Initial hash values - H = [ - new int64(0x6a09e667, -205731576), - new int64(-1150833019, -2067093701), - new int64(0x3c6ef372, -23791573), - new int64(-1521486534, 0x5f1d36f1), - new int64(0x510e527f, -1377402159), - new int64(-1694144372, 0x2b3e6c1f), - new int64(0x1f83d9ab, -79577749), - new int64(0x5be0cd19, 0x137e2179) - ], - T1 = new int64(0, 0), - T2 = new int64(0, 0), - a = new int64(0, 0), - b = new int64(0, 0), - c = new int64(0, 0), - d = new int64(0, 0), - e = new int64(0, 0), - f = new int64(0, 0), - g = new int64(0, 0), - h = new int64(0, 0), - //Temporary variables not specified by the document - s0 = new int64(0, 0), - s1 = new int64(0, 0), - Ch = new int64(0, 0), - Maj = new int64(0, 0), - r1 = new int64(0, 0), - r2 = new int64(0, 0), - r3 = new int64(0, 0); - - if (sha512_k === undefined) { - //SHA512 constants - sha512_k = [ - new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd), - new int64(-1245643825, -330482897), new int64(-373957723, -2121671748), - new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031), - new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736), - new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe), - new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302), - new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1), - new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428), - new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3), - new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65), - new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483), - new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459), - new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210), - new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340), - new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395), - new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70), - new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926), - new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473), - new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8), - new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b), - new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023), - new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30), - new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910), - new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8), - new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53), - new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016), - new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893), - new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397), - new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60), - new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec), - new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047), - new int64(-1090935817, -1295615723), new int64(-965641998, -479046869), - new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207), - new int64(-354779690, -840897762), new int64(-176337025, -294727304), - new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026), - new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b), - new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493), - new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620), - new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430), - new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817) - ]; - } + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); - for (i = 0; i < 80; i += 1) { - W[i] = new int64(0, 0); - } + // Translate a MacOS key command into the appropriate Windows/Linux equivalent. + // For example, ⌘Z -> Ctrl+Z + var uiCmd = function (code) { + var detected = utilDetect(); - // append padding to the source string. The format is described in the FIPS. - x[len >> 5] |= 0x80 << (24 - (len & 0x1f)); - x[((len + 128 >> 10) << 5) + 31] = len; - l = x.length; - for (i = 0; i < l; i += 32) { //32 dwords is the block size - int64copy(a, H[0]); - int64copy(b, H[1]); - int64copy(c, H[2]); - int64copy(d, H[3]); - int64copy(e, H[4]); - int64copy(f, H[5]); - int64copy(g, H[6]); - int64copy(h, H[7]); - - for (j = 0; j < 16; j += 1) { - W[j].h = x[i + 2 * j]; - W[j].l = x[i + 2 * j + 1]; - } - - for (j = 16; j < 80; j += 1) { - //sigma1 - int64rrot(r1, W[j - 2], 19); - int64revrrot(r2, W[j - 2], 29); - int64shr(r3, W[j - 2], 6); - s1.l = r1.l ^ r2.l ^ r3.l; - s1.h = r1.h ^ r2.h ^ r3.h; - //sigma0 - int64rrot(r1, W[j - 15], 1); - int64rrot(r2, W[j - 15], 8); - int64shr(r3, W[j - 15], 7); - s0.l = r1.l ^ r2.l ^ r3.l; - s0.h = r1.h ^ r2.h ^ r3.h; - - int64add4(W[j], s1, W[j - 7], s0, W[j - 16]); - } - - for (j = 0; j < 80; j += 1) { - //Ch - Ch.l = (e.l & f.l) ^ (~e.l & g.l); - Ch.h = (e.h & f.h) ^ (~e.h & g.h); - - //Sigma1 - int64rrot(r1, e, 14); - int64rrot(r2, e, 18); - int64revrrot(r3, e, 9); - s1.l = r1.l ^ r2.l ^ r3.l; - s1.h = r1.h ^ r2.h ^ r3.h; - - //Sigma0 - int64rrot(r1, a, 28); - int64revrrot(r2, a, 2); - int64revrrot(r3, a, 7); - s0.l = r1.l ^ r2.l ^ r3.l; - s0.h = r1.h ^ r2.h ^ r3.h; - - //Maj - Maj.l = (a.l & b.l) ^ (a.l & c.l) ^ (b.l & c.l); - Maj.h = (a.h & b.h) ^ (a.h & c.h) ^ (b.h & c.h); - - int64add5(T1, h, s1, Ch, sha512_k[j], W[j]); - int64add(T2, s0, Maj); - - int64copy(h, g); - int64copy(g, f); - int64copy(f, e); - int64add(e, d, T1); - int64copy(d, c); - int64copy(c, b); - int64copy(b, a); - int64add(a, T1, T2); - } - int64add(H[0], H[0], a); - int64add(H[1], H[1], b); - int64add(H[2], H[2], c); - int64add(H[3], H[3], d); - int64add(H[4], H[4], e); - int64add(H[5], H[5], f); - int64add(H[6], H[6], g); - int64add(H[7], H[7], h); - } + if (detected.os === 'mac') { + return code; + } - //represent the hash as an array of 32-bit dwords - for (i = 0; i < 8; i += 1) { - hash[2 * i] = H[i].h; - hash[2 * i + 1] = H[i].l; - } - return hash; + if (detected.os === 'win') { + if (code === '⌘⇧Z') return 'Ctrl+Y'; } - //A constructor for 64-bit numbers + var result = '', + replacements = { + '⌘': 'Ctrl', + '⇧': 'Shift', + '⌥': 'Alt', + '⌫': 'Backspace', + '⌦': 'Delete' + }; - function int64(h, l) { - this.h = h; - this.l = l; - //this.toString = int64toString; + for (var i = 0; i < code.length; i++) { + if (code[i] in replacements) { + result += replacements[code[i]] + (i < code.length - 1 ? '+' : ''); + } else { + result += code[i]; + } } - //Copies src into dst, assuming both are 64-bit numbers + return result; + }; - function int64copy(dst, src) { - dst.h = src.h; - dst.l = src.l; - } - //Right-rotates a 64-bit number by shift - //Won't handle cases of shift>=32 - //The function revrrot() is for that + // return a display-focused string for a given keyboard code + uiCmd.display = function(code) { + if (code.length !== 1) return code; + + var detected = utilDetect(); + var mac = (detected.os === 'mac'); + var replacements = { + '⌘': mac ? '⌘ ' + t('shortcuts.key.cmd') : t('shortcuts.key.ctrl'), + '⇧': mac ? '⇧ ' + t('shortcuts.key.shift') : t('shortcuts.key.shift'), + '⌥': mac ? '⌥ ' + t('shortcuts.key.option') : t('shortcuts.key.alt'), + '⌃': mac ? '⌃ ' + t('shortcuts.key.ctrl') : t('shortcuts.key.ctrl'), + '⌫': mac ? '⌫ ' + t('shortcuts.key.delete') : t('shortcuts.key.backspace'), + '⌦': mac ? '⌦ ' + t('shortcuts.key.del') : t('shortcuts.key.del'), + '↖': mac ? '↖ ' + t('shortcuts.key.pgup') : t('shortcuts.key.pgup'), + '↘': mac ? '↘ ' + t('shortcuts.key.pgdn') : t('shortcuts.key.pgdn'), + '⇞': mac ? '⇞ ' + t('shortcuts.key.home') : t('shortcuts.key.home'), + '⇟': mac ? '⇟ ' + t('shortcuts.key.end') : t('shortcuts.key.end'), + '↵': mac ? '↵ ' + t('shortcuts.key.return') : t('shortcuts.key.enter'), + '⎋': mac ? '⎋ ' + t('shortcuts.key.esc') : t('shortcuts.key.esc'), + }; - function int64rrot(dst, x, shift) { - dst.l = (x.l >>> shift) | (x.h << (32 - shift)); - dst.h = (x.h >>> shift) | (x.l << (32 - shift)); - } + return replacements[code] || code; + }; - //Reverses the dwords of the source and then rotates right by shift. - //This is equivalent to rotation by 32+shift + var relatedParent; - function int64revrrot(dst, x, shift) { - dst.l = (x.h >>> shift) | (x.l << (32 - shift)); - dst.h = (x.l >>> shift) | (x.h << (32 - shift)); - } - //Bitwise-shifts right a 64-bit number by shift - //Won't handle shift>=32, but it's never needed in SHA512 + function modeSelect(context, selectedIDs) { + var mode = { + id: 'select', + button: 'browse' + }; - function int64shr(dst, x, shift) { - dst.l = (x.l >>> shift) | (x.h << (32 - shift)); - dst.h = (x.h >>> shift); - } + var keybinding = d3keybinding('select'); + var timeout = null; + var behaviors = [ + behaviorCopy(context), + behaviorPaste(context), + behaviorBreathe(context), + behaviorHover(context), + behaviorSelect(context), + behaviorLasso(context), + modeDragNode$$1(context).restoreSelectedIDs(selectedIDs).behavior + ]; + var inspector; + var editMenu; + var newFeature = false; + var suppressMenu = true; + var follow = false; - //Adds two 64-bit numbers - //Like the original implementation, does not rely on 32-bit operations - function int64add(dst, x, y) { - var w0 = (x.l & 0xffff) + (y.l & 0xffff); - var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16); - var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16); - var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16); - dst.l = (w0 & 0xffff) | (w1 << 16); - dst.h = (w2 & 0xffff) | (w3 << 16); - } + var wrap = context.container() + .select('.inspector-wrap'); - //Same, except with 4 addends. Works faster than adding them one by one. - function int64add4(dst, a, b, c, d) { - var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff); - var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16); - var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16); - var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16); - dst.l = (w0 & 0xffff) | (w1 << 16); - dst.h = (w2 & 0xffff) | (w3 << 16); + function singular() { + if (selectedIDs.length === 1) { + return context.hasEntity(selectedIDs[0]); + } } - //Same, except with 5 addends - function int64add5(dst, a, b, c, d, e) { - var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff), - w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16), - w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16), - w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16); - dst.l = (w0 & 0xffff) | (w1 << 16); - dst.h = (w2 & 0xffff) | (w3 << 16); + function checkSelectedIDs() { + var ids = []; + if (Array.isArray(selectedIDs)) { + ids = selectedIDs.filter(function(id) { + return context.hasEntity(id); + }); + } + + if (ids.length) { + selectedIDs = ids; + } else { + context.enter(modeBrowse(context)); + } + return !!ids.length; } - }, - /** - * @class Hashes.RMD160 - * @constructor - * @param {Object} [config] - * - * A JavaScript implementation of the RIPEMD-160 Algorithm - * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See http://pajhome.org.uk/crypt/md5 for details. - * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/ - */ - RMD160: function(options) { - /** - * Private properties configuration variables. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * @see this.setUpperCase() method - * @see this.setPad() method - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, - /* hexadecimal output case format. false - lowercase; true - uppercase */ - b64pad = (options && typeof options.pad === 'string') ? options.pa : '=', - /* base-64 pad character. Default '=' for strict RFC compliance */ - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, - /* enable/disable utf8 encoding */ - rmd160_r1 = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 - ], - rmd160_r2 = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 - ], - rmd160_s1 = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 - ], - rmd160_s2 = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 - ]; - /* privileged (public) methods */ - this.hex = function(s) { - return rstr2hex(rstr(s, utf8)); - }; - this.b64 = function(s) { - return rstr2b64(rstr(s, utf8), b64pad); - }; - this.any = function(s, e) { - return rstr2any(rstr(s, utf8), e); - }; - this.raw = function(s) { - return rstr(s, utf8); - }; - this.hex_hmac = function(k, d) { - return rstr2hex(rstr_hmac(k, d)); - }; - this.b64_hmac = function(k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); - }; - this.any_hmac = function(k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - * @public - */ - this.vm_test = function() { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * @description Enable/disable uppercase hexadecimal returned string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUpperCase = function(a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; - }; - /** - * @description Defines a base64 pad string - * @param {string} Pad - * @return {Object} this - * @public - */ - this.setPad = function(a) { - if (typeof a !== 'undefined') { - b64pad = a; - } - return this; - }; - /** - * @description Defines a base64 pad string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUTF8 = function(a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; - }; - /* private methods */ + // find the common parent ways for nextVertex, previousVertex + function commonParents() { + var graph = context.graph(); + var commonParents = []; - /** - * Calculate the rmd160 of a raw string - */ + for (var i = 0; i < selectedIDs.length; i++) { + var entity = context.hasEntity(selectedIDs[i]); + if (!entity || entity.geometry(graph) !== 'vertex') { + return []; // selection includes some not vertexes + } - function rstr(s) { - s = (utf8) ? utf8Encode(s) : s; - return binl2rstr(binl(rstr2binl(s), s.length * 8)); - } + var currParents = map$3(graph.parentWays(entity), 'id'); + if (!commonParents.length) { + commonParents = currParents; + continue; + } - /** - * Calculate the HMAC-rmd160 of a key and some data (raw strings) - */ + commonParents = intersection(commonParents, currParents); + if (!commonParents.length) { + return []; + } + } - function rstr_hmac(key, data) { - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - var i, hash, - bkey = rstr2binl(key), - ipad = Array(16), - opad = Array(16); + return commonParents; + } - if (bkey.length > 16) { - bkey = binl(bkey, key.length * 8); - } - for (i = 0; i < 16; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8); - return binl2rstr(binl(opad.concat(hash), 512 + 160)); - } + function singularParent() { + var parents = commonParents(); + if (!parents || parents.length === 0) { + relatedParent = null; + return null; + } - /** - * Convert an array of little-endian words to a string - */ + // relatedParent is used when we visit a vertex with multiple + // parents, and we want to remember which parent line we started on. - function binl2rstr(input) { - var i, output = '', - l = input.length * 32; - for (i = 0; i < l; i += 8) { - output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF); - } - return output; - } + if (parents.length === 1) { + relatedParent = parents[0]; // remember this parent for later + return relatedParent; + } - /** - * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length. - */ + if (parents.indexOf(relatedParent) !== -1) { + return relatedParent; // prefer the previously seen parent + } - function binl(x, len) { - var T, j, i, l, - h0 = 0x67452301, - h1 = 0xefcdab89, - h2 = 0x98badcfe, - h3 = 0x10325476, - h4 = 0xc3d2e1f0, - A1, B1, C1, D1, E1, - A2, B2, C2, D2, E2; - - /* append padding */ - x[len >> 5] |= 0x80 << (len % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - l = x.length; - - for (i = 0; i < l; i += 16) { - A1 = A2 = h0; - B1 = B2 = h1; - C1 = C2 = h2; - D1 = D2 = h3; - E1 = E2 = h4; - for (j = 0; j <= 79; j += 1) { - T = safe_add(A1, rmd160_f(j, B1, C1, D1)); - T = safe_add(T, x[i + rmd160_r1[j]]); - T = safe_add(T, rmd160_K1(j)); - T = safe_add(bit_rol(T, rmd160_s1[j]), E1); - A1 = E1; - E1 = D1; - D1 = bit_rol(C1, 10); - C1 = B1; - B1 = T; - T = safe_add(A2, rmd160_f(79 - j, B2, C2, D2)); - T = safe_add(T, x[i + rmd160_r2[j]]); - T = safe_add(T, rmd160_K2(j)); - T = safe_add(bit_rol(T, rmd160_s2[j]), E2); - A2 = E2; - E2 = D2; - D2 = bit_rol(C2, 10); - C2 = B2; - B2 = T; - } - - T = safe_add(h1, safe_add(C1, D2)); - h1 = safe_add(h2, safe_add(D1, E2)); - h2 = safe_add(h3, safe_add(E1, A2)); - h3 = safe_add(h4, safe_add(A1, B2)); - h4 = safe_add(h0, safe_add(B1, C2)); - h0 = T; - } - return [h0, h1, h2, h3, h4]; + return parents[0]; } - // specific algorithm methods - function rmd160_f(j, x, y, z) { - return (0 <= j && j <= 15) ? (x ^ y ^ z) : - (16 <= j && j <= 31) ? (x & y) | (~x & z) : - (32 <= j && j <= 47) ? (x | ~y) ^ z : - (48 <= j && j <= 63) ? (x & z) | (y & ~z) : - (64 <= j && j <= 79) ? x ^ (y | ~z) : - 'rmd160_f: j out of range'; + function closeMenu() { + if (editMenu) { + context.surface().call(editMenu.close); + } } - function rmd160_K1(j) { - return (0 <= j && j <= 15) ? 0x00000000 : - (16 <= j && j <= 31) ? 0x5a827999 : - (32 <= j && j <= 47) ? 0x6ed9eba1 : - (48 <= j && j <= 63) ? 0x8f1bbcdc : - (64 <= j && j <= 79) ? 0xa953fd4e : - 'rmd160_K1: j out of range'; - } - function rmd160_K2(j) { - return (0 <= j && j <= 15) ? 0x50a28be6 : - (16 <= j && j <= 31) ? 0x5c4dd124 : - (32 <= j && j <= 47) ? 0x6d703ef3 : - (48 <= j && j <= 63) ? 0x7a6d76e9 : - (64 <= j && j <= 79) ? 0x00000000 : - 'rmd160_K2: j out of range'; - } - } - }; + function positionMenu() { + if (!editMenu) { return; } - // exposes Hashes - (function(window, undefined) { - var freeExports = false; - { - freeExports = exports; - if (exports && typeof commonjsGlobal === 'object' && commonjsGlobal && commonjsGlobal === commonjsGlobal.global) { - window = commonjsGlobal; + var entity = singular(); + if (entity && context.geometry(entity.id) === 'relation') { + suppressMenu = true; + } else { + var point$$1 = context.mouse(); + var viewport = geoExtent$$1(context.projection.clipExtent()).polygon(); + + if (point$$1 && geoPointInPolygon(point$$1, viewport)) { + editMenu.center(point$$1); + } else { + suppressMenu = true; + } + } } - } - if (typeof undefined === 'function' && typeof undefined.amd === 'object' && undefined.amd) { - // define as an anonymous module, so, through path mapping, it can be aliased - undefined(function() { - return Hashes; - }); - } else if (freeExports) { - // in Node.js or RingoJS v0.8.0+ - if ('object' === 'object' && module && module.exports === freeExports) { - module.exports = Hashes; - } - // in Narwhal or RingoJS v0.7.0- - else { - freeExports.Hashes = Hashes; - } - } else { - // in a browser or Rhino - window.Hashes = Hashes; - } - }(this)); -}()); // IIFE -}); -var immutable = extend$2; + function showMenu() { + closeMenu(); + if (editMenu) { + context.surface().call(editMenu); + } + } -var hasOwnProperty$16 = Object.prototype.hasOwnProperty; -function extend$2() { - var target = {}; + function toggleMenu() { + // deprecation warning - Radial Menu to be removed in iD v3 + if (select('.edit-menu, .radial-menu').empty()) { + positionMenu(); + showMenu(); + } else { + closeMenu(); + } + } - for (var i = 0; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) { - if (hasOwnProperty$16.call(source, key)) { - target[key] = source[key]; - } - } - } + mode.selectedIDs = function() { + return selectedIDs; + }; - return target -} - -var sha1 = new hashes.SHA1(); - -var ohauth = {}; - -ohauth.qsString = function(obj) { - return Object.keys(obj).sort().map(function(key) { - return ohauth.percentEncode(key) + '=' + - ohauth.percentEncode(obj[key]); - }).join('&'); -}; - -ohauth.stringQs = function(str) { - return str.split('&').filter(function (pair) { - return pair !== ''; - }).reduce(function(obj, pair){ - var parts = pair.split('='); - obj[decodeURIComponent(parts[0])] = (null === parts[1]) ? - '' : decodeURIComponent(parts[1]); - return obj; - }, {}); -}; - -ohauth.rawxhr = function(method, url, data, headers, callback) { - var xhr = new XMLHttpRequest(), - twoHundred = /^20\d$/; - xhr.onreadystatechange = function() { - if (4 === xhr.readyState && 0 !== xhr.status) { - if (twoHundred.test(xhr.status)) callback(null, xhr); - else return callback(xhr, null); - } - }; - xhr.onerror = function(e) { return callback(e, null); }; - xhr.open(method, url, true); - for (var h in headers) xhr.setRequestHeader(h, headers[h]); - xhr.send(data); - return xhr; -}; - -ohauth.xhr = function(method, url, auth, data, options, callback) { - var headers = (options && options.header) || { - 'Content-Type': 'application/x-www-form-urlencoded' - }; - headers.Authorization = 'OAuth ' + ohauth.authHeader(auth); - return ohauth.rawxhr(method, url, data, headers, callback); -}; -ohauth.nonce = function() { - for (var o = ''; o.length < 6;) { - o += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'[Math.floor(Math.random() * 61)]; - } - return o; -}; + mode.reselect = function() { + if (!checkSelectedIDs()) return; -ohauth.authHeader = function(obj) { - return Object.keys(obj).sort().map(function(key) { - return encodeURIComponent(key) + '="' + encodeURIComponent(obj[key]) + '"'; - }).join(', '); -}; + var surfaceNode = context.surface().node(); + if (surfaceNode.focus) { // FF doesn't support it + surfaceNode.focus(); + } -ohauth.timestamp = function() { return ~~((+new Date()) / 1000); }; + positionMenu(); + if (!suppressMenu) { + showMenu(); + } + }; -ohauth.percentEncode = function(s) { - return encodeURIComponent(s) - .replace(/\!/g, '%21').replace(/\'/g, '%27') - .replace(/\*/g, '%2A').replace(/\(/g, '%28').replace(/\)/g, '%29'); -}; -ohauth.baseString = function(method, url, params) { - if (params.oauth_signature) delete params.oauth_signature; - return [ - method, - ohauth.percentEncode(url), - ohauth.percentEncode(ohauth.qsString(params))].join('&'); -}; - -ohauth.signature = function(oauth_secret, token_secret, baseString) { - return sha1.b64_hmac( - ohauth.percentEncode(oauth_secret) + '&' + - ohauth.percentEncode(token_secret), - baseString); -}; - -/** - * Takes an options object for configuration (consumer_key, - * consumer_secret, version, signature_method, token, token_secret) - * and returns a function that generates the Authorization header - * for given data. - * - * The returned function takes these parameters: - * - method: GET/POST/... - * - uri: full URI with protocol, port, path and query string - * - extra_params: any extra parameters (that are passed in the POST data), - * can be an object or a from-urlencoded string. - * - * Returned function returns full OAuth header with "OAuth" string in it. - */ - -ohauth.headerGenerator = function(options) { - options = options || {}; - var consumer_key = options.consumer_key || '', - consumer_secret = options.consumer_secret || '', - signature_method = options.signature_method || 'HMAC-SHA1', - version = options.version || '1.0', - token = options.token || '', - token_secret = options.token_secret || ''; - - return function(method, uri, extra_params) { - method = method.toUpperCase(); - if (typeof extra_params === 'string' && extra_params.length > 0) { - extra_params = ohauth.stringQs(extra_params); - } + mode.newFeature = function(_) { + if (!arguments.length) return newFeature; + newFeature = _; + return mode; + }; - var uri_parts = uri.split('?', 2), - base_uri = uri_parts[0]; - var query_params = uri_parts.length === 2 ? - ohauth.stringQs(uri_parts[1]) : {}; + mode.suppressMenu = function(_) { + if (!arguments.length) return suppressMenu; + suppressMenu = _; + return mode; + }; - var oauth_params = { - oauth_consumer_key: consumer_key, - oauth_signature_method: signature_method, - oauth_version: version, - oauth_timestamp: ohauth.timestamp(), - oauth_nonce: ohauth.nonce() - }; - if (token) oauth_params.oauth_token = token; + mode.follow = function(_) { + if (!arguments.length) return follow; + follow = _; + return mode; + }; - var all_params = immutable({}, oauth_params, query_params, extra_params), - base_str = ohauth.baseString(method, base_uri, all_params); - oauth_params.oauth_signature = ohauth.signature(consumer_secret, token_secret, base_str); + mode.enter = function() { - return 'OAuth ' + ohauth.authHeader(oauth_params); - }; -}; - -var ohauth_1 = ohauth; - -var resolveUrl = createCommonjsModule(function (module, exports) { -// Copyright 2014 Simon Lydell -// X11 (“MIT”) Licensed. (See LICENSE.) - -void (function(root, factory) { - if (typeof undefined === "function" && undefined.amd) { - undefined(factory); - } else { - module.exports = factory(); - } -}(commonjsGlobal, function() { - - function resolveUrl(/* ...urls */) { - var numUrls = arguments.length; - - if (numUrls === 0) { - throw new Error("resolveUrl requires at least one argument; got none.") - } - - var base = document.createElement("base"); - base.href = arguments[0]; - - if (numUrls === 1) { - return base.href - } - - var head = document.getElementsByTagName("head")[0]; - head.insertBefore(base, head.firstChild); - - var a = document.createElement("a"); - var resolved; - - for (var index = 1; index < numUrls; index++) { - a.href = arguments[index]; - resolved = a.href; - base.href = resolved; - } - - head.removeChild(base); - - return resolved - } - - return resolveUrl - -})); -}); - -var assign$1 = make_assign(); -var create$2 = make_create(); -var trim = make_trim(); -var Global = (typeof window !== 'undefined' ? window : commonjsGlobal); - -var util = { - assign: assign$1, - create: create$2, - trim: trim, - bind: bind, - slice: slice$7, - each: each, - map: map$4, - pluck: pluck, - isList: isList, - isFunction: isFunction$1, - isObject: isObject$1, - Global: Global -}; - -function make_assign() { - if (Object.assign) { - return Object.assign - } else { - return function shimAssign(obj, props1, props2, etc) { - for (var i = 1; i < arguments.length; i++) { - each(Object(arguments[i]), function(val, key) { - obj[key] = val; - }); - } - return obj - } - } -} - -function make_create() { - if (Object.create) { - return function create(obj, assignProps1, assignProps2, etc) { - var assignArgsList = slice$7(arguments, 1); - return assign$1.apply(this, [Object.create(obj)].concat(assignArgsList)) - } - } else { - function F() {} // eslint-disable-line no-inner-declarations - return function create(obj, assignProps1, assignProps2, etc) { - var assignArgsList = slice$7(arguments, 1); - F.prototype = obj; - return assign$1.apply(this, [new F()].concat(assignArgsList)) - } - } -} - -function make_trim() { - if (String.prototype.trim) { - return function trim(str) { - return String.prototype.trim.call(str) - } - } else { - return function trim(str) { - return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '') - } - } -} - -function bind(obj, fn) { - return function() { - return fn.apply(obj, Array.prototype.slice.call(arguments, 0)) - } -} - -function slice$7(arr, index) { - return Array.prototype.slice.call(arr, index || 0) -} - -function each(obj, fn) { - pluck(obj, function(val, key) { - fn(val, key); - return false - }); -} - -function map$4(obj, fn) { - var res = (isList(obj) ? [] : {}); - pluck(obj, function(v, k) { - res[k] = fn(v, k); - return false - }); - return res -} - -function pluck(obj, fn) { - if (isList(obj)) { - for (var i=0; i= 0; i--) { - var key = localStorage$1().key(i); - fn(read(key), key); - } -} - -function remove$2(key) { - return localStorage$1().removeItem(key) -} - -function clearAll() { - return localStorage$1().clear() -} - -// oldFF-globalStorage provides storage for Firefox -// versions 6 and 7, where no localStorage, etc -// is available. - - -var Global$2 = util.Global; - -var oldFFGlobalStorage = { - name: 'oldFF-globalStorage', - read: read$1, - write: write$1, - each: each$3, - remove: remove$3, - clearAll: clearAll$1, -}; - -var globalStorage = Global$2.globalStorage; - -function read$1(key) { - return globalStorage[key] -} - -function write$1(key, data) { - globalStorage[key] = data; -} - -function each$3(fn) { - for (var i = globalStorage.length - 1; i >= 0; i--) { - var key = globalStorage.key(i); - fn(globalStorage[key], key); - } -} - -function remove$3(key) { - return globalStorage.removeItem(key) -} - -function clearAll$1() { - each$3(function(key, _) { - delete globalStorage[key]; - }); -} - -// oldIE-userDataStorage provides storage for Internet Explorer -// versions 6 and 7, where no localStorage, sessionStorage, etc -// is available. - - -var Global$3 = util.Global; - -var oldIEUserDataStorage = { - name: 'oldIE-userDataStorage', - write: write$2, - read: read$2, - each: each$4, - remove: remove$4, - clearAll: clearAll$2, -}; - -var storageName = 'storejs'; -var doc = Global$3.document; -var _withStorageEl = _makeIEStorageElFunction(); -var disable = (Global$3.navigator ? Global$3.navigator.userAgent : '').match(/ (MSIE 8|MSIE 9|MSIE 10)\./); // MSIE 9.x, MSIE 10.x - -function write$2(unfixedKey, data) { - if (disable) { return } - var fixedKey = fixKey(unfixedKey); - _withStorageEl(function(storageEl) { - storageEl.setAttribute(fixedKey, data); - storageEl.save(storageName); - }); -} - -function read$2(unfixedKey) { - if (disable) { return } - var fixedKey = fixKey(unfixedKey); - var res = null; - _withStorageEl(function(storageEl) { - res = storageEl.getAttribute(fixedKey); - }); - return res -} - -function each$4(callback) { - _withStorageEl(function(storageEl) { - var attributes = storageEl.XMLDocument.documentElement.attributes; - for (var i=attributes.length-1; i>=0; i--) { - var attr = attributes[i]; - callback(storageEl.getAttribute(attr.name), attr.name); - } - }); -} - -function remove$4(unfixedKey) { - var fixedKey = fixKey(unfixedKey); - _withStorageEl(function(storageEl) { - storageEl.removeAttribute(fixedKey); - storageEl.save(storageName); - }); -} - -function clearAll$2() { - _withStorageEl(function(storageEl) { - var attributes = storageEl.XMLDocument.documentElement.attributes; - storageEl.load(storageName); - for (var i=attributes.length-1; i>=0; i--) { - storageEl.removeAttribute(attributes[i].name); - } - storageEl.save(storageName); - }); -} - -// Helpers -////////// - -// In IE7, keys cannot start with a digit or contain certain chars. -// See https://github.com/marcuswestin/store.js/issues/40 -// See https://github.com/marcuswestin/store.js/issues/83 -var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g"); -function fixKey(key) { - return key.replace(/^\d/, '___$&').replace(forbiddenCharsRegex, '___') -} - -function _makeIEStorageElFunction() { - if (!doc || !doc.documentElement || !doc.documentElement.addBehavior) { - return null - } - var scriptTag = 'script', - storageOwner, - storageContainer, - storageEl; - - // Since #userData storage applies only to specific paths, we need to - // somehow link our data to a specific path. We choose /favicon.ico - // as a pretty safe option, since all browsers already make a request to - // this URL anyway and being a 404 will not hurt us here. We wrap an - // iframe pointing to the favicon in an ActiveXObject(htmlfile) object - // (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx) - // since the iframe access rules appear to allow direct access and - // manipulation of the document element, even for a 404 page. This - // document can be used instead of the current document (which would - // have been limited to the current path) to perform #userData storage. - try { - /* global ActiveXObject */ - storageContainer = new ActiveXObject('htmlfile'); - storageContainer.open(); - storageContainer.write('<'+scriptTag+'>document.w=window'); - storageContainer.close(); - storageOwner = storageContainer.w.frames[0].document; - storageEl = storageOwner.createElement('div'); - } catch(e) { - // somehow ActiveXObject instantiation failed (perhaps some special - // security settings or otherwse), fall back to per-path storage - storageEl = doc.createElement('div'); - storageOwner = doc.body; - } - - return function(storeFunction) { - var args = [].slice.call(arguments, 0); - args.unshift(storageEl); - // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx - // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx - storageOwner.appendChild(storageEl); - storageEl.addBehavior('#default#userData'); - storageEl.load(storageName); - storeFunction.apply(this, args); - storageOwner.removeChild(storageEl); - return - } -} - -// cookieStorage is useful Safari private browser mode, where localStorage -// doesn't work but cookies do. This implementation is adopted from -// https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage - - -var Global$4 = util.Global; -var trim$1 = util.trim; - -var cookieStorage = { - name: 'cookieStorage', - read: read$3, - write: write$3, - each: each$5, - remove: remove$5, - clearAll: clearAll$3, -}; - -var doc$1 = Global$4.document; - -function read$3(key) { - if (!key || !_has(key)) { return null } - var regexpStr = "(?:^|.*;\\s*)" + - escape(key).replace(/[\-\.\+\*]/g, "\\$&") + - "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"; - return unescape(doc$1.cookie.replace(new RegExp(regexpStr), "$1")) -} - -function each$5(callback) { - var cookies = doc$1.cookie.split(/; ?/g); - for (var i = cookies.length - 1; i >= 0; i--) { - if (!trim$1(cookies[i])) { - continue - } - var kvp = cookies[i].split('='); - var key = unescape(kvp[0]); - var val = unescape(kvp[1]); - callback(val, key); - } -} - -function write$3(key, data) { - if(!key) { return } - doc$1.cookie = escape(key) + "=" + escape(data) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/"; -} - -function remove$5(key) { - if (!key || !_has(key)) { - return - } - doc$1.cookie = escape(key) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/"; -} - -function clearAll$3() { - each$5(function(_, key) { - remove$5(key); - }); -} - -function _has(key) { - return (new RegExp("(?:^|;\\s*)" + escape(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(doc$1.cookie) -} - -var Global$5 = util.Global; - -var sessionStorage_1 = { - name: 'sessionStorage', - read: read$4, - write: write$4, - each: each$6, - remove: remove$6, - clearAll: clearAll$4 -}; - -function sessionStorage() { - return Global$5.sessionStorage -} - -function read$4(key) { - return sessionStorage().getItem(key) -} - -function write$4(key, data) { - return sessionStorage().setItem(key, data) -} - -function each$6(fn) { - for (var i = sessionStorage().length - 1; i >= 0; i--) { - var key = sessionStorage().key(i); - fn(read$4(key), key); - } -} - -function remove$6(key) { - return sessionStorage().removeItem(key) -} - -function clearAll$4() { - return sessionStorage().clear() -} - -// memoryStorage is a useful last fallback to ensure that the store -// is functions (meaning store.get(), store.set(), etc will all function). -// However, stored values will not persist when the browser navigates to -// a new page or reloads the current page. - -var memoryStorage_1 = { - name: 'memoryStorage', - read: read$5, - write: write$5, - each: each$7, - remove: remove$7, - clearAll: clearAll$5, -}; - -var memoryStorage = {}; - -function read$5(key) { - return memoryStorage[key] -} - -function write$5(key, data) { - memoryStorage[key] = data; -} - -function each$7(callback) { - for (var key in memoryStorage) { - if (memoryStorage.hasOwnProperty(key)) { - callback(memoryStorage[key], key); - } - } -} - -function remove$7(key) { - delete memoryStorage[key]; -} - -function clearAll$5(key) { - memoryStorage = {}; -} - -var all$3 = [ - // Listed in order of usage preference - localStorage_1, - oldFFGlobalStorage, - oldIEUserDataStorage, - cookieStorage, - sessionStorage_1, - memoryStorage_1 -]; - -/* eslint-disable */ - -// json2.js -// 2016-10-28 -// Public Domain. -// NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. -// See http://www.JSON.org/js.html -// This code should be minified before deployment. -// See http://javascript.crockford.com/jsmin.html - -// USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO -// NOT CONTROL. - -// This file creates a global JSON object containing two methods: stringify -// and parse. This file provides the ES5 JSON capability to ES3 systems. -// If a project might run on IE8 or earlier, then this file should be included. -// This file does nothing on ES5 systems. - -// JSON.stringify(value, replacer, space) -// value any JavaScript value, usually an object or array. -// replacer an optional parameter that determines how object -// values are stringified for objects. It can be a -// function or an array of strings. -// space an optional parameter that specifies the indentation -// of nested structures. If it is omitted, the text will -// be packed without extra whitespace. If it is a number, -// it will specify the number of spaces to indent at each -// level. If it is a string (such as "\t" or " "), -// it contains the characters used to indent at each level. -// This method produces a JSON text from a JavaScript value. -// When an object value is found, if the object contains a toJSON -// method, its toJSON method will be called and the result will be -// stringified. A toJSON method does not serialize: it returns the -// value represented by the name/value pair that should be serialized, -// or undefined if nothing should be serialized. The toJSON method -// will be passed the key associated with the value, and this will be -// bound to the value. - -// For example, this would serialize Dates as ISO strings. - -// Date.prototype.toJSON = function (key) { -// function f(n) { -// // Format integers to have at least two digits. -// return (n < 10) -// ? "0" + n -// : n; -// } -// return this.getUTCFullYear() + "-" + -// f(this.getUTCMonth() + 1) + "-" + -// f(this.getUTCDate()) + "T" + -// f(this.getUTCHours()) + ":" + -// f(this.getUTCMinutes()) + ":" + -// f(this.getUTCSeconds()) + "Z"; -// }; - -// You can provide an optional replacer method. It will be passed the -// key and value of each member, with this bound to the containing -// object. The value that is returned from your method will be -// serialized. If your method returns undefined, then the member will -// be excluded from the serialization. - -// If the replacer parameter is an array of strings, then it will be -// used to select the members to be serialized. It filters the results -// such that only members with keys listed in the replacer array are -// stringified. - -// Values that do not have JSON representations, such as undefined or -// functions, will not be serialized. Such values in objects will be -// dropped; in arrays they will be replaced with null. You can use -// a replacer function to replace those with JSON values. - -// JSON.stringify(undefined) returns undefined. - -// The optional space parameter produces a stringification of the -// value that is filled with line breaks and indentation to make it -// easier to read. - -// If the space parameter is a non-empty string, then that string will -// be used for indentation. If the space parameter is a number, then -// the indentation will be that many spaces. - -// Example: - -// text = JSON.stringify(["e", {pluribus: "unum"}]); -// // text is '["e",{"pluribus":"unum"}]' - -// text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t"); -// // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - -// text = JSON.stringify([new Date()], function (key, value) { -// return this[key] instanceof Date -// ? "Date(" + this[key] + ")" -// : value; -// }); -// // text is '["Date(---current time---)"]' - -// JSON.parse(text, reviver) -// This method parses a JSON text to produce an object or array. -// It can throw a SyntaxError exception. - -// The optional reviver parameter is a function that can filter and -// transform the results. It receives each of the keys and values, -// and its return value is used instead of the original value. -// If it returns what it received, then the structure is not modified. -// If it returns undefined then the member is deleted. - -// Example: - -// // Parse the text. Values that look like ISO date strings will -// // be converted to Date objects. - -// myData = JSON.parse(text, function (key, value) { -// var a; -// if (typeof value === "string") { -// a = -// /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); -// if (a) { -// return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], -// +a[5], +a[6])); -// } -// } -// return value; -// }); - -// myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { -// var d; -// if (typeof value === "string" && -// value.slice(0, 5) === "Date(" && -// value.slice(-1) === ")") { -// d = new Date(value.slice(5, -1)); -// if (d) { -// return d; -// } -// } -// return value; -// }); - -// This is a reference implementation. You are free to copy, modify, or -// redistribute. - -/*jslint - eval, for, this -*/ - -/*property - JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -if (typeof JSON !== "object") { - JSON = {}; -} + function update() { + closeMenu(); + checkSelectedIDs(); + } -(function () { - var rx_one = /^[\],:{}\s]*$/; - var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g; - var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g; - var rx_four = /(?:^|:|,)(?:\s*\[)+/g; - var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; - var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + function dblclick() { + var target = select(event.target); - function f(n) { - // Format integers to have at least two digits. - return n < 10 - ? "0" + n - : n; - } + var datum = target.datum(); + var entity = datum && datum.properties && datum.properties.entity; + if (!entity) return; - function this_value() { - return this.valueOf(); - } + if (entity instanceof osmWay && target.classed('target')) { + var choice = geoChooseEdge(context.childNodes(entity), context.mouse(), context.projection); + var prev = entity.nodes[choice.index - 1]; + var next = entity.nodes[choice.index]; - if (typeof Date.prototype.toJSON !== "function") { + context.perform( + actionAddMidpoint({loc: choice.loc, edge: [prev, next]}, osmNode()), + t('operations.add.annotation.vertex') + ); - Date.prototype.toJSON = function () { + event.preventDefault(); + event.stopPropagation(); - return isFinite(this.valueOf()) - ? this.getUTCFullYear() + "-" + - f(this.getUTCMonth() + 1) + "-" + - f(this.getUTCDate()) + "T" + - f(this.getUTCHours()) + ":" + - f(this.getUTCMinutes()) + ":" + - f(this.getUTCSeconds()) + "Z" - : null; - }; + } else if (entity.type === 'midpoint') { + context.perform( + actionAddMidpoint({loc: entity.loc, edge: entity.edge}, osmNode()), + t('operations.add.annotation.vertex')); - Boolean.prototype.toJSON = this_value; - Number.prototype.toJSON = this_value; - String.prototype.toJSON = this_value; - } + event.preventDefault(); + event.stopPropagation(); + } + } - var gap; - var indent; - var meta; - var rep; + function selectElements(drawn) { + if (!checkSelectedIDs()) return; + + var surface = context.surface(); + var entity = singular(); + + if (entity && context.geometry(entity.id) === 'relation') { + suppressMenu = true; + return; + } + + surface.selectAll('.related') + .classed('related', false); + + singularParent(); + if (relatedParent) { + surface.selectAll(utilEntitySelector([relatedParent])) + .classed('related', true); + } + + var selection$$1 = context.surface() + .selectAll(utilEntityOrMemberSelector(selectedIDs, context.graph())); + + if (selection$$1.empty()) { + // Return to browse mode if selected DOM elements have + // disappeared because the user moved them out of view.. + var source = event && event.type === 'zoom' && event.sourceEvent; + if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) { + context.enter(modeBrowse(context)); + } + } else { + selection$$1 + .classed('selected', true); + } + } - function quote(string) { -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. + function esc() { + context.enter(modeBrowse(context)); + } - rx_escapable.lastIndex = 0; - return rx_escapable.test(string) - ? "\"" + string.replace(rx_escapable, function (a) { - var c = meta[a]; - return typeof c === "string" - ? c - : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4); - }) + "\"" - : "\"" + string + "\""; - } + function firstVertex() { + event.preventDefault(); + var entity = singular(); + var parent = singularParent(); + var way; - function str(key, holder) { + if (entity && entity.type === 'way') { + way = entity; + } else if (parent) { + way = context.entity(parent); + } -// Produce a string from holder[key]. + if (way) { + context.enter( + modeSelect(context, [way.first()]).follow(true) + ); + } + } - var i; // The loop counter. - var k; // The member key. - var v; // The member value. - var length; - var mind = gap; - var partial; - var value = holder[key]; -// If the value has a toJSON method, call it to obtain a replacement value. + function lastVertex() { + event.preventDefault(); + var entity = singular(); + var parent = singularParent(); + var way; - if (value && typeof value === "object" && - typeof value.toJSON === "function") { - value = value.toJSON(key); - } + if (entity && entity.type === 'way') { + way = entity; + } else if (parent) { + way = context.entity(parent); + } -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. + if (way) { + context.enter( + modeSelect(context, [way.last()]).follow(true) + ); + } + } - if (typeof rep === "function") { - value = rep.call(holder, key, value); - } -// What happens next depends on the value's type. + function previousVertex() { + event.preventDefault(); + var parent = singularParent(); + if (!parent) return; - switch (typeof value) { - case "string": - return quote(value); + var way = context.entity(parent); + var length = way.nodes.length; + var curr = way.nodes.indexOf(selectedIDs[0]); + var index = -1; - case "number": + if (curr > 0) { + index = curr - 1; + } else if (way.isClosed()) { + index = length - 2; + } -// JSON numbers must be finite. Encode non-finite numbers as null. + if (index !== -1) { + context.enter( + modeSelect(context, [way.nodes[index]]).follow(true) + ); + } + } - return isFinite(value) - ? String(value) - : "null"; - case "boolean": - case "null": + function nextVertex() { + event.preventDefault(); + var parent = singularParent(); + if (!parent) return; -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce "null". The case is included here in -// the remote chance that this gets fixed someday. + var way = context.entity(parent); + var length = way.nodes.length; + var curr = way.nodes.indexOf(selectedIDs[0]); + var index = -1; - return String(value); + if (curr < length - 1) { + index = curr + 1; + } else if (way.isClosed()) { + index = 0; + } -// If the type is "object", we might be dealing with an object or an array or -// null. + if (index !== -1) { + context.enter( + modeSelect(context, [way.nodes[index]]).follow(true) + ); + } + } - case "object": -// Due to a specification blunder in ECMAScript, typeof null is "object", -// so watch out for that case. + function nextParent() { + event.preventDefault(); + var parents = uniq(commonParents()); + if (!parents || parents.length < 2) return; - if (!value) { - return "null"; - } + var index = parents.indexOf(relatedParent); + if (index < 0 || index > parents.length - 2) { + relatedParent = parents[0]; + } else { + relatedParent = parents[index + 1]; + } -// Make an array to hold the partial results of stringifying this object value. + var surface = context.surface(); + surface.selectAll('.related') + .classed('related', false); - gap += indent; - partial = []; + if (relatedParent) { + surface.selectAll(utilEntitySelector([relatedParent])) + .classed('related', true); + } + } -// Is the value an array? - if (Object.prototype.toString.apply(value) === "[object Array]") { + if (!checkSelectedIDs()) return; -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. + var operations = without(values$1(Operations), operationDelete) + .map(function(o) { return o(selectedIDs, context); }) + .filter(function(o) { return o.available(); }); - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || "null"; - } + // deprecation warning - Radial Menu to be removed in iD v3 + var isRadialMenu = context.storage('edit-menu-style') === 'radial'; + if (isRadialMenu) { + operations = operations.slice(0,7); + operations.unshift(operationDelete(selectedIDs, context)); + } else { + operations.push(operationDelete(selectedIDs, context)); + } -// Join all of the elements together, separated with commas, and wrap them in -// brackets. + operations.forEach(function(operation) { + if (operation.behavior) { + behaviors.push(operation.behavior); + } + }); - v = partial.length === 0 - ? "[]" - : gap - ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]" - : "[" + partial.join(",") + "]"; - gap = mind; - return v; - } + behaviors.forEach(function(behavior) { + context.install(behavior); + }); -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === "object") { - length = rep.length; - for (i = 0; i < length; i += 1) { - if (typeof rep[i] === "string") { - k = rep[i]; - v = str(k, value); - if (v) { - partial.push(quote(k) + ( - gap - ? ": " - : ":" - ) + v); - } - } - } - } else { + keybinding + .on(['[', 'pgup'], previousVertex) + .on([']', 'pgdown'], nextVertex) + .on(['{', uiCmd('⌘['), 'home'], firstVertex) + .on(['}', uiCmd('⌘]'), 'end'], lastVertex) + .on(['\\', 'pause'], nextParent) + .on('⎋', esc, true) + .on('space', toggleMenu); -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + ( - gap - ? ": " - : ":" - ) + v); - } - } - } - } + select(document) + .call(keybinding); -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - v = partial.length === 0 - ? "{}" - : gap - ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}" - : "{" + partial.join(",") + "}"; - gap = mind; - return v; - } - } + // deprecation warning - Radial Menu to be removed in iD v3 + editMenu = isRadialMenu + ? uiRadialMenu(context, operations) + : uiEditMenu(context, operations); -// If the JSON object does not yet have a stringify method, give it one. + context.ui().sidebar + .select(singular() ? singular().id : null, newFeature); - if (typeof JSON.stringify !== "function") { - meta = { // table of character substitutions - "\b": "\\b", - "\t": "\\t", - "\n": "\\n", - "\f": "\\f", - "\r": "\\r", - "\"": "\\\"", - "\\": "\\\\" - }; - JSON.stringify = function (value, replacer, space) { + context.history() + .on('undone.select', update) + .on('redone.select', update); -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. + context.map() + .on('move.select', closeMenu) + .on('drawn.select', selectElements); - var i; - gap = ""; - indent = ""; + context.surface() + .on('dblclick.select', dblclick); -// If the space parameter is a number, make an indent string containing that -// many spaces. - if (typeof space === "number") { - for (i = 0; i < space; i += 1) { - indent += " "; - } + selectElements(); -// If the space parameter is a string, it will be used as the indent string. + if (selectedIDs.length > 1) { + var entities = uiSelectionList(context, selectedIDs); + context.ui().sidebar.show(entities); + } - } else if (typeof space === "string") { - indent = space; - } + if (follow) { + var extent = geoExtent$$1(); + var graph = context.graph(); + selectedIDs.forEach(function(id) { + var entity = context.entity(id); + extent._extend(entity.extent(graph)); + }); + + var loc = extent.center(); + context.map().centerEase(loc); + } else if (singular() && singular().type === 'way') { + context.map().pan([0,0]); // full redraw, to adjust z-sorting #2914 + } -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. + timeout = window.setTimeout(function() { + positionMenu(); + if (!suppressMenu) { + showMenu(); + } + }, 270); /* after any centerEase completes */ - rep = replacer; - if (replacer && typeof replacer !== "function" && - (typeof replacer !== "object" || - typeof replacer.length !== "number")) { - throw new Error("JSON.stringify"); - } + }; -// Make a fake root object containing our value under the key of "". -// Return the result of stringifying the value. - return str("", {"": value}); - }; - } + mode.exit = function() { + if (timeout) window.clearTimeout(timeout); + if (inspector) wrap.call(inspector.close); + behaviors.forEach(function(behavior) { + context.uninstall(behavior); + }); -// If the JSON object does not yet have a parse method, give it one. + keybinding.off(); + closeMenu(); + editMenu = undefined; - if (typeof JSON.parse !== "function") { - JSON.parse = function (text, reviver) { + context.history() + .on('undone.select', null) + .on('redone.select', null); -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. + var surface = context.surface(); - var j; + surface + .on('dblclick.select', null); - function walk(holder, key) { + surface + .selectAll('.selected') + .classed('selected', false); -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. + surface + .selectAll('.related') + .classed('related', false); - var k; - var v; - var value = holder[key]; - if (value && typeof value === "object") { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } + context.map().on('drawn.select', null); + context.ui().sidebar.hide(); + }; -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. + return mode; + } - text = String(text); - rx_dangerous.lastIndex = 0; - if (rx_dangerous.test(text)) { - text = text.replace(rx_dangerous, function (a) { - return "\\u" + - ("0000" + a.charCodeAt(0).toString(16)).slice(-4); - }); - } + function behaviorAddWay(context) { + var dispatch$$1 = dispatch('start', 'startFromWay', 'startFromNode'), + draw = behaviorDraw(context); -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with "()" and "new" -// because they can cause invocation, and "=" because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with "@" (a non-JSON character). Second, we -// replace all simple value tokens with "]" characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or "]" or -// "," or ":" or "{" or "}". If that is so, then the text is safe for eval. - - if ( - rx_one.test( - text - .replace(rx_two, "@") - .replace(rx_three, "]") - .replace(rx_four, "") - ) - ) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The "{" operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval("(" + text + ")"); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return (typeof reviver === "function") - ? walk({"": j}, "") - : j; - } + var addWay = function(surface) { + draw.on('click', function() { dispatch$$1.apply('start', this, arguments); }) + .on('clickWay', function() { dispatch$$1.apply('startFromWay', this, arguments); }) + .on('clickNode', function() { dispatch$$1.apply('startFromNode', this, arguments); }) + .on('cancel', addWay.cancel) + .on('finish', addWay.cancel); -// If the text is not JSON parseable, then a SyntaxError is thrown. + context.map() + .dblclickEnable(false); - throw new SyntaxError("JSON.parse"); - }; - } -}()); + surface.call(draw); + }; -var json2 = json2Plugin; -function json2Plugin() { - - return {} -} + addWay.off = function(surface) { + surface.call(draw.off); + }; -var plugins = [json2]; -var store_legacy = storeEngine.createStore(all$3, plugins); + addWay.cancel = function() { + window.setTimeout(function() { + context.map().dblclickEnable(true); + }, 1000); -// # osm-auth -// -// This code is only compatible with IE10+ because the [XDomainRequest](http://bit.ly/LfO7xo) -// object, IE<10's idea of [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing), -// does not support custom headers, which this uses everywhere. -var osmAuth = function(o) { + context.enter(modeBrowse(context)); + }; - var oauth = {}; - // authenticated users will also have a request token secret, but it's - // not used in transactions with the server - oauth.authenticated = function() { - return !!(token('oauth_token') && token('oauth_token_secret')); - }; + addWay.tail = function(text) { + draw.tail(text); + return addWay; + }; - oauth.logout = function() { - token('oauth_token', ''); - token('oauth_token_secret', ''); - token('oauth_request_token_secret', ''); - return oauth; - }; - // TODO: detect lack of click event - oauth.authenticate = function(callback) { - if (oauth.authenticated()) return callback(); - - oauth.logout(); - - // ## Getting a request token - var params = timenonce(getAuth(o)), - url = o.url + '/oauth/request_token'; - - params.oauth_signature = ohauth_1.signature( - o.oauth_secret, '', - ohauth_1.baseString('POST', url, params)); - - if (!o.singlepage) { - // Create a 600x550 popup window in the center of the screen - var w = 600, h = 550, - settings = [ - ['width', w], ['height', h], - ['left', screen.width / 2 - w / 2], - ['top', screen.height / 2 - h / 2]].map(function(x) { - return x.join('='); - }).join(','), - popup = window.open('about:blank', 'oauth_window', settings); - } + return utilRebind(addWay, dispatch$$1, 'on'); + } - // Request a request token. When this is complete, the popup - // window is redirected to OSM's authorization page. - ohauth_1.xhr('POST', url, params, null, {}, reqTokenDone); - o.loading(); - - function reqTokenDone(err, xhr) { - o.done(); - if (err) return callback(err); - var resp = ohauth_1.stringQs(xhr.response); - token('oauth_request_token_secret', resp.oauth_token_secret); - var authorize_url = o.url + '/oauth/authorize?' + ohauth_1.qsString({ - oauth_token: resp.oauth_token, - oauth_callback: resolveUrl(o.landing) - }); + function behaviorBreathe() { + var duration = 800, + steps = 4, + selector$$1 = '.selected.shadow, .selected .shadow', + selected = select(null), + classed = '', + params = {}, + done = false, + timer$$1; - if (o.singlepage) { - location.href = authorize_url; - } else { - popup.location = authorize_url; - } - } - // Called by a function in a landing page, in the popup window. The - // window closes itself. - window.authComplete = function(token) { - var oauth_token = ohauth_1.stringQs(token.split('?')[1]); - get_access_token(oauth_token.oauth_token); - delete window.authComplete; - }; + function ratchetyInterpolator(a, b, steps, units) { + a = parseFloat(a); + b = parseFloat(b); + var sample = quantize() + .domain([0, 1]) + .range(d3_quantize(interpolateNumber(a, b), steps)); - // ## Getting an request token - // - // At this point we have an `oauth_token`, brought in from a function - // call on a landing page popup. - function get_access_token(oauth_token) { - var url = o.url + '/oauth/access_token', - params = timenonce(getAuth(o)), - request_token_secret = token('oauth_request_token_secret'); - params.oauth_token = oauth_token; - params.oauth_signature = ohauth_1.signature( - o.oauth_secret, - request_token_secret, - ohauth_1.baseString('POST', url, params)); - - // ## Getting an access token - // - // The final token required for authentication. At this point - // we have a `request token secret` - ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone); - o.loading(); - } + return function(t) { + return String(sample(t)) + (units || ''); + }; + } - function accessTokenDone(err, xhr) { - o.done(); - if (err) return callback(err); - var access_token = ohauth_1.stringQs(xhr.response); - token('oauth_token', access_token.oauth_token); - token('oauth_token_secret', access_token.oauth_token_secret); - callback(null, oauth); - } - }; - oauth.bootstrapToken = function(oauth_token, callback) { - // ## Getting an request token - // At this point we have an `oauth_token`, brought in from a function - // call on a landing page popup. - function get_access_token(oauth_token) { - var url = o.url + '/oauth/access_token', - params = timenonce(getAuth(o)), - request_token_secret = token('oauth_request_token_secret'); - params.oauth_token = oauth_token; - params.oauth_signature = ohauth_1.signature( - o.oauth_secret, - request_token_secret, - ohauth_1.baseString('POST', url, params)); - - // ## Getting an access token - // The final token required for authentication. At this point - // we have a `request token secret` - ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone); - o.loading(); - } + function reset(selection$$1) { + selection$$1 + .style('stroke-opacity', null) + .style('stroke-width', null) + .style('fill-opacity', null) + .style('r', null); + } - function accessTokenDone(err, xhr) { - o.done(); - if (err) return callback(err); - var access_token = ohauth_1.stringQs(xhr.response); - token('oauth_token', access_token.oauth_token); - token('oauth_token_secret', access_token.oauth_token_secret); - callback(null, oauth); - } - get_access_token(oauth_token); - }; + function setAnimationParams(transition, fromTo) { + var toFrom = (fromTo === 'from' ? 'to' : 'from'); + + transition + .styleTween('stroke-opacity', function(d) { + return ratchetyInterpolator( + params[d.id][toFrom].opacity, + params[d.id][fromTo].opacity, + steps + ); + }) + .styleTween('stroke-width', function(d) { + return ratchetyInterpolator( + params[d.id][toFrom].width, + params[d.id][fromTo].width, + steps, + 'px' + ); + }) + .styleTween('fill-opacity', function(d) { + return ratchetyInterpolator( + params[d.id][toFrom].opacity, + params[d.id][fromTo].opacity, + steps + ); + }) + .styleTween('r', function(d) { + return ratchetyInterpolator( + params[d.id][toFrom].width, + params[d.id][fromTo].width, + steps, + 'px' + ); + }); + } - // # xhr - // - // A single XMLHttpRequest wrapper that does authenticated calls if the - // user has logged in. - oauth.xhr = function(options, callback) { - if (!oauth.authenticated()) { - if (o.auto) { - return oauth.authenticate(run); - } else { - callback('not authenticated', null); - return; - } - } else { - return run(); - } - function run() { - var params = timenonce(getAuth(o)), - oauth_token_secret = token('oauth_token_secret'), - url = (options.prefix !== false) ? o.url + options.path : options.path, - url_parts = url.replace(/#.*$/, '').split('?', 2), - base_url = url_parts[0], - query = (url_parts.length === 2) ? url_parts[1] : ''; - - // https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1 - if ((!options.options || !options.options.header || - options.options.header['Content-Type'] === 'application/x-www-form-urlencoded') && - options.content) { - params = immutable(params, ohauth_1.stringQs(options.content)); - } + function calcAnimationParams(selection$$1) { + selection$$1 + .call(reset) + .each(function(d) { + var s = select(this), + tag = s.node().tagName, + p = {'from': {}, 'to': {}}, + opacity, width; + + // determine base opacity and width + if (tag === 'circle') { + opacity = parseFloat(s.style('fill-opacity') || 0.5); + width = parseFloat(s.style('r') || 15.5); + } else { + opacity = parseFloat(s.style('stroke-opacity') || 0.7); + width = parseFloat(s.style('stroke-width') || 10); + } + + // calculate from/to interpolation params.. + p.tag = tag; + p.from.opacity = opacity * 0.6; + p.to.opacity = opacity * 1.25; + p.from.width = width * 0.7; + p.to.width = width * (tag === 'circle' ? 1.5 : 1); + params[d.id] = p; + }); + } - params.oauth_token = token('oauth_token'); - params.oauth_signature = ohauth_1.signature( - o.oauth_secret, - oauth_token_secret, - ohauth_1.baseString(options.method, base_url, immutable(params, ohauth_1.stringQs(query))) - ); - return ohauth_1.xhr(options.method, url, params, options.content, options.options, done); - } + function run(surface, fromTo) { + var toFrom = (fromTo === 'from' ? 'to' : 'from'), + currSelected = surface.selectAll(selector$$1), + currClassed = surface.attr('class'); - function done(err, xhr) { - if (err) return callback(err); - else if (xhr.responseXML) return callback(err, xhr.responseXML); - else return callback(err, xhr.response); - } - }; + if (done || currSelected.empty()) { + selected.call(reset); + return; + } - // pre-authorize this object, if we can just get a token and token_secret - // from the start - oauth.preauth = function(c) { - if (!c) return; - if (c.oauth_token) token('oauth_token', c.oauth_token); - if (c.oauth_token_secret) token('oauth_token_secret', c.oauth_token_secret); - return oauth; - }; + if (!isEqual(currSelected.data(), selected.data()) || currClassed !== classed) { + selected.call(reset); + classed = currClassed; + selected = currSelected.call(calcAnimationParams); + } - oauth.options = function(_) { - if (!arguments.length) return o; + selected + .transition() + .duration(duration) + .call(setAnimationParams, fromTo) + .on('end', function() { + surface.call(run, toFrom); + }); + } - o = _; - o.url = o.url || 'https://www.openstreetmap.org'; - o.landing = o.landing || 'land.html'; - o.singlepage = o.singlepage || false; - // Optional loading and loading-done functions for nice UI feedback. - // by default, no-ops - o.loading = o.loading || function() {}; - o.done = o.done || function() {}; + var breathe = function(surface) { + done = false; + timer$$1 = timer(function() { + // wait for elements to actually become selected + if (surface.selectAll(selector$$1).empty()) { + return false; + } - return oauth.preauth(o); - }; + surface.call(run, 'from'); + timer$$1.stop(); + return true; + }, 20); + }; - // 'stamp' an authentication object from `getAuth()` - // with a [nonce](http://en.wikipedia.org/wiki/Cryptographic_nonce) - // and timestamp - function timenonce(o) { - o.oauth_timestamp = ohauth_1.timestamp(); - o.oauth_nonce = ohauth_1.nonce(); - return o; - } - // get/set tokens. These are prefixed with the base URL so that `osm-auth` - // can be used with multiple APIs and the keys in `localStorage` - // will not clash - var token; + breathe.off = function() { + done = true; + if (timer$$1) { + timer$$1.stop(); + } + selected + .interrupt() + .call(reset); + }; - if (store_legacy.enabled) { - token = function (x, y) { - if (arguments.length === 1) return store_legacy.get(o.url + x); - else if (arguments.length === 2) return store_legacy.set(o.url + x, y); - }; - } else { - var storage = {}; - token = function (x, y) { - if (arguments.length === 1) return storage[o.url + x]; - else if (arguments.length === 2) return storage[o.url + x] = y; - }; - } - // Get an authentication object. If you just add and remove properties - // from a single object, you'll need to use `delete` to make sure that - // it doesn't contain undesired properties for authentication - function getAuth(o) { - return { - oauth_consumer_key: o.oauth_consumer_key, - oauth_signature_method: 'HMAC-SHA1' - }; - } + return breathe; + } - // potentially pre-authorize - oauth.options(o); + function behaviorCopy(context) { + var keybinding = d3keybinding('copy'); - return oauth; -}; -var JXON = new (function () { - var - sValueProp = 'keyValue', sAttributesProp = 'keyAttributes', sAttrPref = '@', /* you can customize these values */ - aCache = [], rIsNull = /^\s*$/, rIsBool = /^(?:true|false)$/i; + function groupEntities(ids, graph) { + var entities = ids.map(function (id) { return graph.entity(id); }); + return assignIn({relation: [], way: [], node: []}, + groupBy(entities, function(entity) { return entity.type; })); + } - function parseText (sValue) { - if (rIsNull.test(sValue)) { return null; } - if (rIsBool.test(sValue)) { return sValue.toLowerCase() === 'true'; } - if (isFinite(sValue)) { return parseFloat(sValue); } - if (isFinite(Date.parse(sValue))) { return new Date(sValue); } - return sValue; - } - function EmptyTree () { } - EmptyTree.prototype.toString = function () { return 'null'; }; - EmptyTree.prototype.valueOf = function () { return null; }; + function getDescendants(id, graph, descendants) { + var entity = graph.entity(id), + i, children; - function objectify (vValue) { - return vValue === null ? new EmptyTree() : vValue instanceof Object ? vValue : new vValue.constructor(vValue); - } + descendants = descendants || {}; - function createObjTree (oParentNode, nVerb, bFreeze, bNesteAttr) { - var - nLevelStart = aCache.length, bChildren = oParentNode.hasChildNodes(), - bAttributes = oParentNode.hasAttributes(), bHighVerb = Boolean(nVerb & 2); + if (entity.type === 'relation') { + children = map$3(entity.members, 'id'); + } else if (entity.type === 'way') { + children = entity.nodes; + } else { + children = []; + } - var - sProp, vContent, nLength = 0, sCollectedTxt = '', - vResult = bHighVerb ? {} : /* put here the default value for empty nodes: */ true; + for (i = 0; i < children.length; i++) { + if (!descendants[children[i]]) { + descendants[children[i]] = true; + descendants = getDescendants(children[i], graph, descendants); + } + } - if (bChildren) { - for (var oNode, nItem = 0; nItem < oParentNode.childNodes.length; nItem++) { - oNode = oParentNode.childNodes.item(nItem); - if (oNode.nodeType === 4) { sCollectedTxt += oNode.nodeValue; } /* nodeType is 'CDATASection' (4) */ - else if (oNode.nodeType === 3) { sCollectedTxt += oNode.nodeValue.trim(); } /* nodeType is 'Text' (3) */ - else if (oNode.nodeType === 1 && !oNode.prefix) { aCache.push(oNode); } /* nodeType is 'Element' (1) */ + return descendants; } - } - var nLevelEnd = aCache.length, vBuiltVal = parseText(sCollectedTxt); - if (!bHighVerb && (bChildren || bAttributes)) { vResult = nVerb === 0 ? objectify(vBuiltVal) : {}; } + function doCopy() { + if (!getSelectionText()) event.preventDefault(); - for (var nElId = nLevelStart; nElId < nLevelEnd; nElId++) { - sProp = aCache[nElId].nodeName.toLowerCase(); - vContent = createObjTree(aCache[nElId], nVerb, bFreeze, bNesteAttr); - if (vResult.hasOwnProperty(sProp)) { - if (vResult[sProp].constructor !== Array) { vResult[sProp] = [vResult[sProp]]; } - vResult[sProp].push(vContent); - } else { - vResult[sProp] = vContent; - nLength++; - } - } + var graph = context.graph(), + selected = groupEntities(context.selectedIDs(), graph), + canCopy = [], + skip = {}, + i, entity; - if (bAttributes) { - var - nAttrLen = oParentNode.attributes.length, - sAPrefix = bNesteAttr ? '' : sAttrPref, oAttrParent = bNesteAttr ? {} : vResult; + for (i = 0; i < selected.relation.length; i++) { + entity = selected.relation[i]; + if (!skip[entity.id] && entity.isComplete(graph)) { + canCopy.push(entity.id); + skip = getDescendants(entity.id, graph, skip); + } + } + for (i = 0; i < selected.way.length; i++) { + entity = selected.way[i]; + if (!skip[entity.id]) { + canCopy.push(entity.id); + skip = getDescendants(entity.id, graph, skip); + } + } + for (i = 0; i < selected.node.length; i++) { + entity = selected.node[i]; + if (!skip[entity.id]) { + canCopy.push(entity.id); + } + } - for (var oAttrib, nAttrib = 0; nAttrib < nAttrLen; nLength++, nAttrib++) { - oAttrib = oParentNode.attributes.item(nAttrib); - oAttrParent[sAPrefix + oAttrib.name.toLowerCase()] = parseText(oAttrib.value.trim()); + context.copyIDs(canCopy); } - if (bNesteAttr) { - if (bFreeze) { Object.freeze(oAttrParent); } - vResult[sAttributesProp] = oAttrParent; - nLength -= nAttrLen - 1; + + function copy() { + keybinding.on(uiCmd('⌘C'), doCopy); + select(document).call(keybinding); + return copy; } - } - if (nVerb === 3 || (nVerb === 2 || nVerb === 1 && nLength > 0) && sCollectedTxt) { - vResult[sValueProp] = vBuiltVal; - } else if (!bHighVerb && nLength === 0 && sCollectedTxt) { - vResult = vBuiltVal; - } + function getSelectionText() { + return window.getSelection().toString(); + } - if (bFreeze && (bHighVerb || nLength > 0)) { Object.freeze(vResult); } + copy.off = function() { + select(document).call(keybinding.off); + }; - aCache.length = nLevelStart; - return vResult; + return copy; } - function loadObjTree (oXMLDoc, oParentEl, oParentObj) { - var vValue, oChild; + /* + `behaviorDrag` is like `d3_behavior.drag`, with the following differences: - if (oParentObj instanceof String || oParentObj instanceof Number || oParentObj instanceof Boolean) { - oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toString())); /* verbosity level is 0 */ - } else if (oParentObj.constructor === Date) { - oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toGMTString())); - } + * The `origin` function is expected to return an [x, y] tuple rather than an + {x, y} object. + * The events are `start`, `move`, and `end`. + (https://github.com/mbostock/d3/issues/563) + * The `start` event is not dispatched until the first cursor movement occurs. + (https://github.com/mbostock/d3/pull/368) + * The `move` event has a `point` and `delta` [x, y] tuple properties rather + than `x`, `y`, `dx`, and `dy` properties. + * The `end` event is not dispatched if no movement occurs. + * An `off` function is available that unbinds the drag's internal event handlers. + */ - for (var sName in oParentObj) { - vValue = oParentObj[sName]; - if (isFinite(sName) || vValue instanceof Function) { continue; } /* verbosity level is 0 */ - if (sName === sValueProp) { - if (vValue !== null && vValue !== true) { oParentEl.appendChild(oXMLDoc.createTextNode(vValue.constructor === Date ? vValue.toGMTString() : String(vValue))); } - } else if (sName === sAttributesProp) { /* verbosity level is 3 */ - for (var sAttrib in vValue) { oParentEl.setAttribute(sAttrib, vValue[sAttrib]); } - } else if (sName.charAt(0) === sAttrPref) { - oParentEl.setAttribute(sName.slice(1), vValue); - } else if (vValue.constructor === Array) { - for (var nItem = 0; nItem < vValue.length; nItem++) { - oChild = oXMLDoc.createElement(sName); - loadObjTree(oXMLDoc, oChild, vValue[nItem]); - oParentEl.appendChild(oChild); - } - } else { - oChild = oXMLDoc.createElement(sName); - if (vValue instanceof Object) { - loadObjTree(oXMLDoc, oChild, vValue); - } else if (vValue !== null && vValue !== true) { - oChild.appendChild(oXMLDoc.createTextNode(vValue.toString())); - } - oParentEl.appendChild(oChild); - } - } - } + function behaviorDrag() { + var dispatch$$1 = dispatch('start', 'move', 'end'); + var _origin = null; + var _selector = ''; + var _event; + var _target; + var _surface; + + + var d3_event_userSelectProperty = utilPrefixCSSProperty('UserSelect'); + var d3_event_userSelectSuppress = function() { + var selection$$1 = selection(); + var select$$1 = selection$$1.style(d3_event_userSelectProperty); + selection$$1.style(d3_event_userSelectProperty, 'none'); + return function() { + selection$$1.style(d3_event_userSelectProperty, select$$1); + }; + }; - this.build = function (oXMLParent, nVerbosity /* optional */, bFreeze /* optional */, bNesteAttributes /* optional */) { - var _nVerb = arguments.length > 1 && typeof nVerbosity === 'number' ? nVerbosity & 3 : /* put here the default verbosity level: */ 1; - return createObjTree(oXMLParent, _nVerb, bFreeze || false, arguments.length > 3 ? bNesteAttributes : _nVerb === 3); - }; - this.unbuild = function (oObjTree) { - var oNewDoc = document.implementation.createDocument('', '', null); - loadObjTree(oNewDoc, oNewDoc, oObjTree); - return oNewDoc; - }; + function d3_eventCancel() { + event.stopPropagation(); + event.preventDefault(); + } - this.stringify = function (oObjTree) { - return (new XMLSerializer()).serializeToString(JXON.unbuild(oObjTree)); - }; -})(); -// var myObject = JXON.build(doc); -// we got our javascript object! try: alert(JSON.stringify(myObject)); + function eventOf(thiz, argumentz) { + return function(e1) { + e1.target = drag; + customEvent(e1, dispatch$$1.apply, dispatch$$1, [e1.type, thiz, argumentz]); + }; + } -// var newDoc = JXON.unbuild(myObject); -// we got our Document instance! try: alert((new XMLSerializer()).serializeToString(newDoc)); -var dispatch$3 = dispatch('authLoading', 'authDone', 'change', 'loading', 'loaded'); -var urlroot = 'https://www.openstreetmap.org'; -var oauth = osmAuth({ - url: urlroot, - oauth_consumer_key: '5A043yRSEugj4DJ5TljuapfnrflWDte8jTOcWLlT', - oauth_secret: 'aB3jKq1TRsCOUrfOIZ6oQMEDmv2ptV76PA54NGLL', - loading: authLoading, - done: authDone -}); + function dragstart() { + _target = this; + _event = eventOf(_target, arguments); -var _blacklists = ['.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*']; -var _tiles = { loaded: {}, inflight: {} }; -var _changeset = {}; -var _entityCache = {}; -var _connectionID = 1; -var _tileZoom = 16; -var _rateLimitError; -var _userChangesets; -var _userDetails; -var _off; + var eventTarget = event.target; + var touchId = event.touches ? event.changedTouches[0].identifier : null; + var offset; + var startOrigin = point$$1(); + var started = false; + var selectEnable = d3_event_userSelectSuppress(touchId !== null ? 'drag-' + touchId : 'drag'); + select(window) + .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove) + .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true); -function authLoading() { - dispatch$3.call('authLoading'); -} + if (_origin) { + offset = _origin.apply(_target, arguments); + offset = [offset[0] - startOrigin[0], offset[1] - startOrigin[1]]; + } else { + offset = [0, 0]; + } + if (touchId === null) { + event.stopPropagation(); + } -function authDone() { - dispatch$3.call('authDone'); -} + function point$$1() { + var p = _surface || _target.parentNode; + return touchId !== null ? d3_touches(p).filter(function(p) { + return p.identifier === touchId; + })[0] : mouse(p); + } -function abortRequest$2(i) { - if (i) { - i.abort(); - } -} + function dragmove() { + var p = point$$1(); + var dx = p[0] - startOrigin[0]; + var dy = p[1] - startOrigin[1]; -function getLoc(attrs) { - var lon = attrs.lon && attrs.lon.value; - var lat = attrs.lat && attrs.lat.value; - return [parseFloat(lon), parseFloat(lat)]; -} + if (dx === 0 && dy === 0) + return; + startOrigin = p; + d3_eventCancel(); -function getNodes(obj) { - var elems = obj.getElementsByTagName('nd'); - var nodes = new Array(elems.length); - for (var i = 0, l = elems.length; i < l; i++) { - nodes[i] = 'n' + elems[i].attributes.ref.value; - } - return nodes; -} + if (!started) { + started = true; + _event({ type: 'start' }); + } else { + _event({ + type: 'move', + point: [p[0] + offset[0], p[1] + offset[1]], + delta: [dx, dy] + }); + } + } -function getTags(obj) { - var elems = obj.getElementsByTagName('tag'); - var tags = {}; - for (var i = 0, l = elems.length; i < l; i++) { - var attrs = elems[i].attributes; - tags[attrs.k.value] = attrs.v.value; - } + function dragend() { + if (started) { + _event({ type: 'end' }); - return tags; -} + d3_eventCancel(); + if (event.target === eventTarget) { + select(window) + .on('click.drag', click, true); + } + } + select(window) + .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null) + .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null); -function getMembers(obj) { - var elems = obj.getElementsByTagName('member'); - var members = new Array(elems.length); - for (var i = 0, l = elems.length; i < l; i++) { - var attrs = elems[i].attributes; - members[i] = { - id: attrs.type.value[0] + attrs.ref.value, - type: attrs.type.value, - role: attrs.role.value - }; - } - return members; -} + selectEnable(); + } -function getVisible(attrs) { - return (!attrs.visible || attrs.visible.value !== 'false'); -} + function click() { + d3_eventCancel(); + select(window) + .on('click.drag', null); + } + } -var parsers = { - node: function nodeData(obj, uid) { - var attrs = obj.attributes; - return new osmNode({ - id:uid, - visible: getVisible(attrs), - version: attrs.version.value, - changeset: attrs.changeset && attrs.changeset.value, - timestamp: attrs.timestamp && attrs.timestamp.value, - user: attrs.user && attrs.user.value, - uid: attrs.uid && attrs.uid.value, - loc: getLoc(attrs), - tags: getTags(obj) - }); - }, + function drag(selection$$1) { + var matchesSelector = utilPrefixDOMProperty('matchesSelector'); + var delegate = dragstart; + + if (_selector) { + delegate = function() { + var root = this; + var target = event.target; + for (; target && target !== root; target = target.parentNode) { + var datum = target.__data__; + var entity = datum && datum.properties && datum.properties.entity; + if (entity && target[matchesSelector](_selector)) { + return dragstart.call(target, entity); + } + } + }; + } - way: function wayData(obj, uid) { - var attrs = obj.attributes; - return new osmWay({ - id: uid, - visible: getVisible(attrs), - version: attrs.version.value, - changeset: attrs.changeset && attrs.changeset.value, - timestamp: attrs.timestamp && attrs.timestamp.value, - user: attrs.user && attrs.user.value, - uid: attrs.uid && attrs.uid.value, - tags: getTags(obj), - nodes: getNodes(obj), - }); - }, + selection$$1 + .on('mousedown.drag' + _selector, delegate) + .on('touchstart.drag' + _selector, delegate); + } - relation: function relationData(obj, uid) { - var attrs = obj.attributes; - return new osmRelation({ - id: uid, - visible: getVisible(attrs), - version: attrs.version.value, - changeset: attrs.changeset && attrs.changeset.value, - timestamp: attrs.timestamp && attrs.timestamp.value, - user: attrs.user && attrs.user.value, - uid: attrs.uid && attrs.uid.value, - tags: getTags(obj), - members: getMembers(obj) - }); - } -}; + drag.off = function(selection$$1) { + selection$$1 + .on('mousedown.drag' + _selector, null) + .on('touchstart.drag' + _selector, null); + }; -function parse(xml$$1, callback, options) { - options = assignIn({ cache: true }, options); - if (!xml$$1 || !xml$$1.childNodes) return; - var root = xml$$1.childNodes[0]; - var children = root.childNodes; + drag.selector = function(_) { + if (!arguments.length) return _selector; + _selector = _; + return drag; + }; - function parseChild(child) { - var parser = parsers[child.nodeName]; - if (parser) { - var uid = osmEntity$$1.id.fromOSM(child.nodeName, child.attributes.id.value); - if (options.cache && _entityCache[uid]) { - return null; - } - return parser(child, uid); - } - } - utilIdleWorker(children, parseChild, callback); -} + drag.origin = function (_) { + if (!arguments.length) return _origin; + _origin = _; + return drag; + }; -var serviceOsm = { + drag.cancel = function() { + select(window) + .on('mousemove.drag', null) + .on('mouseup.drag', null); + return drag; + }; - init: function() { - utilRebind(this, dispatch$3, 'on'); - }, + drag.target = function() { + if (!arguments.length) return _target; + _target = arguments[0]; + _event = eventOf(_target, Array.prototype.slice.call(arguments, 1)); + return drag; + }; - reset: function() { - _connectionID++; - _userChangesets = undefined; - _userDetails = undefined; - _rateLimitError = undefined; - forEach(_tiles.inflight, abortRequest$2); - if (_changeset.inflight) abortRequest$2(_changeset.inflight); - _tiles = { loaded: {}, inflight: {} }; - _changeset = {}; - _entityCache = {}; - return this; - }, + drag.surface = function() { + if (!arguments.length) return _surface; + _surface = arguments[0]; + return drag; + }; - getConnectionId: function() { - return _connectionID; - }, + return utilRebind(drag, dispatch$$1, 'on'); + } - changesetURL: function(changesetId) { - return urlroot + '/changeset/' + changesetId; - }, + function behaviorDrawWay(context, wayId, index, mode, startGraph) { + var origWay = context.entity(wayId); + var annotation = t((origWay.isDegenerate() ? + 'operations.start.annotation.' : + 'operations.continue.annotation.') + context.geometry(wayId) + ); + var behavior = behaviorDraw(context); + var _tempEdits = 0; + var end = osmNode({ loc: context.map().mouseCoordinates() }); - changesetsURL: function(center, zoom) { - var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2)); - return urlroot + '/history#map=' + - Math.floor(zoom) + '/' + - center[1].toFixed(precision) + '/' + - center[0].toFixed(precision); - }, + // Push an annotated state for undo to return back to. + // We must make sure to remove this edit later. + context.perform(actionNoop(), annotation); + _tempEdits++; + // Add the drawing node to the graph. + // We must make sure to remove this edit later. + context.perform(_actionAddDrawNode()); + _tempEdits++; - entityURL: function(entity) { - return urlroot + '/' + entity.type + '/' + entity.osmId(); - }, - historyURL: function(entity) { - return urlroot + '/' + entity.type + '/' + entity.osmId() + '/history'; - }, + function keydown() { + if (event.keyCode === d3keybinding.modifierCodes.alt) { + if (context.surface().classed('nope')) { + context.surface() + .classed('nope-suppressed', true); + } + context.surface() + .classed('nope', false) + .classed('nope-disabled', true); + } + } - userURL: function(username) { - return urlroot + '/user/' + username; - }, + function keyup() { + if (event.keyCode === d3keybinding.modifierCodes.alt) { + if (context.surface().classed('nope-suppressed')) { + context.surface() + .classed('nope', true); + } + context.surface() + .classed('nope-suppressed', false) + .classed('nope-disabled', false); + } + } - loadFromAPI: function(path, callback, options) { - options = assignIn({ cache: true }, options); - var that = this; - var cid = _connectionID; + // related code + // - `mode/drag_node.js` `doMode()` + // - `behavior/draw.js` `click()` + // - `behavior/draw_way.js` `move()` + function move(datum) { + context.surface().classed('nope-disabled', event.altKey); - function done(err, xml$$1) { - if (that.getConnectionId() !== cid) { - if (callback) callback({ message: 'Connection Switched', status: -1 }); - return; - } + var targetLoc = datum && datum.properties && datum.properties.entity && datum.properties.entity.loc; + var targetNodes = datum && datum.properties && datum.properties.nodes; + var loc = context.map().mouseCoordinates(); - var isAuthenticated = that.authenticated(); + if (targetLoc) { // snap to node/vertex - a point target with `.loc` + loc = targetLoc; - // 400 Bad Request, 401 Unauthorized, 403 Forbidden - // Logout and retry the request.. - if (isAuthenticated && err && (err.status === 400 || err.status === 401 || err.status === 403)) { - that.logout(); - that.loadFromAPI(path, callback); + } else if (targetNodes) { // snap to way - a line target with `.nodes` + var choice = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id); + if (choice) { + loc = choice.loc; + } + } - // else, no retry.. - } else { - // 509 Bandwidth Limit Exceeded, 429 Too Many Requests - // Set the rateLimitError flag and trigger a warning.. - if (!isAuthenticated && !_rateLimitError && err && - (err.status === 509 || err.status === 429)) { - _rateLimitError = err; - dispatch$3.call('change'); - } - - if (callback) { - if (err) return callback(err, null); - parse(xml$$1, function (entities) { - if (options.cache) { - for (var i in entities) { - _entityCache[entities[i].id] = true; - } - } - callback(null, entities); - }, options); - } - } - } + context.replace(actionMoveNode(end.id, loc)); + end = context.entity(end.id); + checkGeometry(false); + } - if (this.authenticated()) { - return oauth.xhr({ method: 'GET', path: path }, done); - } else { - var url = urlroot + path; - return d3_xml(url).get(done); - } - }, + // Check whether this edit causes the geometry to break. + // If so, class the surface with a nope cursor. + // `finishDraw` - Only checks the relevant line segments if finishing drawing + function checkGeometry(finishDraw) { + var nopeDisabled = context.surface().classed('nope-disabled'); + var isInvalid = isInvalidGeometry(end, context.graph(), finishDraw); - loadEntity: function(id, callback) { - var type = osmEntity$$1.id.type(id); - var osmID = osmEntity$$1.id.toOSM(id); - var options = { cache: false }; + if (nopeDisabled) { + context.surface() + .classed('nope', false) + .classed('nope-suppressed', isInvalid); + } else { + context.surface() + .classed('nope', isInvalid) + .classed('nope-suppressed', false); + } + } - this.loadFromAPI( - '/api/0.6/' + type + '/' + osmID + (type !== 'node' ? '/full' : ''), - function(err, entities) { - if (callback) callback(err, { data: entities }); - }, - options - ); - }, + function isInvalidGeometry(entity, graph, finishDraw) { + var parents = graph.parentWays(entity); + + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; + var nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); }); + + if (origWay.isClosed()) { // Check if Area + if (finishDraw) { + nodes.splice(-2, 1); + entity = nodes[nodes.length-2]; + } else { + nodes.pop(); + } + } else { // Line + if (finishDraw) { + nodes.pop(); + } + } + + if (geoHasSelfIntersections(nodes, entity.id)) { + return true; + } + } - loadEntityVersion: function(id, version, callback) { - var type = osmEntity$$1.id.type(id); - var osmID = osmEntity$$1.id.toOSM(id); - var options = { cache: false }; + return false; + } - this.loadFromAPI( - '/api/0.6/' + type + '/' + osmID + '/' + version, - function(err, entities) { - if (callback) callback(err, { data: entities }); - }, - options - ); - }, + function undone() { + // Undo popped the history back to the initial annotated no-op edit. + // Remove initial no-op edit and whatever edit happened immediately before it. + context.pop(2); + _tempEdits = 0; - loadMultiple: function(ids, callback) { - var that = this; + if (context.hasEntity(wayId)) { + context.enter(mode); + } else { + context.enter(modeBrowse(context)); + } + } - forEach(groupBy(uniq(ids), osmEntity$$1.id.type), function(v, k) { - var type = k + 's'; - var osmIDs = map$3(v, osmEntity$$1.id.toOSM); - var options = { cache: false }; - forEach(chunk(osmIDs, 150), function(arr) { - that.loadFromAPI( - '/api/0.6/' + type + '?' + type + '=' + arr.join(), - function(err, entities) { - if (callback) callback(err, { data: entities }); - }, - options - ); - }); - }); - }, + function setActiveElements() { + context.surface().selectAll('.' + end.id) + .classed('active', true); + } - authenticated: function() { - return oauth.authenticated(); - }, + var drawWay = function(surface) { + behavior + .on('move', move) + .on('click', drawWay.add) + .on('clickWay', drawWay.addWay) + .on('clickNode', drawWay.addNode) + .on('undo', context.undo) + .on('cancel', drawWay.cancel) + .on('finish', drawWay.finish); + select(window) + .on('keydown.drawWay', keydown) + .on('keyup.drawWay', keyup); - putChangeset: function(changeset, changes, callback) { - if (_changeset.inflight) { - return callback({ message: 'Changeset already inflight', status: -2 }, changeset); - } + context.map() + .dblclickEnable(false) + .on('drawn.draw', setActiveElements); - var that = this; - var cid = _connectionID; - - if (_changeset.open) { // reuse existing open changeset.. - createdChangeset(null, _changeset.open); - } else { // open a new changeset.. - _changeset.inflight = oauth.xhr({ - method: 'PUT', - path: '/api/0.6/changeset/create', - options: { header: { 'Content-Type': 'text/xml' } }, - content: JXON.stringify(changeset.asJXON()) - }, createdChangeset); - } + setActiveElements(); + surface.call(behavior); - function createdChangeset(err, changesetID) { - _changeset.inflight = null; + context.history() + .on('undone.draw', undone); + }; - if (err) { - // 400 Bad Request, 401 Unauthorized, 403 Forbidden.. - if (err.status === 400 || err.status === 401 || err.status === 403) { - that.logout(); - } - return callback(err, changeset); - } - if (that.getConnectionId() !== cid) { - return callback({ message: 'Connection Switched', status: -1 }, changeset); - } - _changeset.open = changesetID; - changeset = changeset.update({ id: changesetID }); + drawWay.off = function(surface) { + // Drawing was interrupted unexpectedly. + // This can happen if the user changes modes, + // clicks geolocate button, a hashchange event occurs, etc. + if (_tempEdits) { + context.pop(_tempEdits); + while (context.graph() !== startGraph) { + context.pop(); + } + } - // Upload the changeset.. - _changeset.inflight = oauth.xhr({ - method: 'POST', - path: '/api/0.6/changeset/' + changesetID + '/upload', - options: { header: { 'Content-Type': 'text/xml' } }, - content: JXON.stringify(changeset.osmChangeJXON(changes)) - }, uploadedChangeset); - } + context.map() + .on('drawn.draw', null); + surface.call(behavior.off) + .selectAll('.active') + .classed('active', false); - function uploadedChangeset(err) { - _changeset.inflight = null; + surface + .classed('nope', false) + .classed('nope-suppressed', false) + .classed('nope-disabled', false); - if (err) return callback(err, changeset); + select(window) + .on('keydown.hover', null) + .on('keyup.hover', null); - // Upload was successful, safe to call the callback. - // Add delay to allow for postgres replication #1646 #2678 - window.setTimeout(function() { - callback(null, changeset); - }, 2500); + context.history() + .on('undone.draw', null); + }; - _changeset.open = null; - // At this point, we don't really care if the connection was switched.. - // Only try to close the changeset if we're still talking to the same server. - if (that.getConnectionId() === cid) { - // Still attempt to close changeset, but ignore response because #2667 - oauth.xhr({ - method: 'PUT', - path: '/api/0.6/changeset/' + changeset.id + '/close', - options: { header: { 'Content-Type': 'text/xml' } } - }, function() { return true; }); - } - } - }, + function _actionAddDrawNode() { + return function(graph) { + return graph + .replace(end) + .replace(origWay.addNode(end.id, index)); + }; + } - userDetails: function(callback) { - if (_userDetails) { - callback(undefined, _userDetails); - return; - } + function _actionReplaceDrawNode(newNode) { + return function(graph) { + return graph + .replace(origWay.addNode(newNode.id, index)) + .remove(end); + }; + } - var that = this; - var cid = _connectionID; - function done(err, user_details) { - if (err) { - // 400 Bad Request, 401 Unauthorized, 403 Forbidden.. - if (err.status === 400 || err.status === 401 || err.status === 403) { - that.logout(); - } - return callback(err); - } - if (that.getConnectionId() !== cid) { - return callback({ message: 'Connection Switched', status: -1 }); - } + // Accept the current position of the drawing node and continue drawing. + drawWay.add = function(loc, d) { + if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) { + return; // can't click here + } + context.pop(_tempEdits); + _tempEdits = 0; - var u = user_details.getElementsByTagName('user')[0]; - var img = u.getElementsByTagName('img'); - var image_url = ''; + context.perform( + _actionAddDrawNode(), + annotation + ); - if (img && img[0] && img[0].getAttribute('href')) { - image_url = img[0].getAttribute('href'); - } + checkGeometry(false); // finishDraw = false + context.enter(mode); + }; - var changesets = u.getElementsByTagName('changesets'); - var changesets_count = 0; - if (changesets && changesets[0] && changesets[0].getAttribute('count')) { - changesets_count = changesets[0].getAttribute('count'); - } + // Connect the way to an existing way. + drawWay.addWay = function(loc, edge, d) { + if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) { + return; // can't click here + } - _userDetails = { - id: u.attributes.id.value, - display_name: u.attributes.display_name.value, - image_url: image_url, - changesets_count: changesets_count - }; + context.pop(_tempEdits); + _tempEdits = 0; - callback(undefined, _userDetails); - } + context.perform( + _actionAddDrawNode(), + actionAddMidpoint({ loc: loc, edge: edge }, end), + annotation + ); - oauth.xhr({ method: 'GET', path: '/api/0.6/user/details' }, done); - }, + checkGeometry(false); // finishDraw = false + context.enter(mode); + }; - userChangesets: function(callback) { - if (_userChangesets) { - callback(undefined, _userChangesets); - return; - } + // Connect the way to an existing node and continue drawing. + drawWay.addNode = function(node, d) { + if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) { + return; // can't click here + } - var that = this; - var cid = _connectionID; + context.pop(_tempEdits); + _tempEdits = 0; - this.userDetails(function(err, user) { - if (err) { - return callback(err); - } - if (that.getConnectionId() !== cid) { - return callback({ message: 'Connection Switched', status: -1 }); - } + context.perform( + _actionReplaceDrawNode(node), + annotation + ); - function done(err, changesets) { - if (err) { - // 400 Bad Request, 401 Unauthorized, 403 Forbidden.. - if (err.status === 400 || err.status === 401 || err.status === 403) { - that.logout(); - } - return callback(err); - } - if (that.getConnectionId() !== cid) { - return callback({ message: 'Connection Switched', status: -1 }); - } - - _userChangesets = Array.prototype.map.call( - changesets.getElementsByTagName('changeset'), - function (changeset) { - return { tags: getTags(changeset) }; - } - ).filter(function (changeset) { - var comment = changeset.tags.comment; - return comment && comment !== ''; - }); - - callback(undefined, _userChangesets); - } + checkGeometry(false); // finishDraw = false + context.enter(mode); + }; - oauth.xhr({ method: 'GET', path: '/api/0.6/changesets?user=' + user.id }, done); - }); - }, + // Finish the draw operation, removing the temporary edits. + // If the way has enough nodes to be valid, it's selected. + // Otherwise, delete everything and return to browse mode. + drawWay.finish = function() { + checkGeometry(true); // finishDraw = true + if (context.surface().classed('nope')) { + return; // can't click here + } - status: function(callback) { - var that = this; - var cid = _connectionID; + context.pop(_tempEdits); + _tempEdits = 0; - function done(xml$$1) { - if (that.getConnectionId() !== cid) { - return callback({ message: 'Connection Switched', status: -1 }, 'connectionSwitched'); - } + var way = context.hasEntity(wayId); + if (!way || way.isDegenerate()) { + drawWay.cancel(); + return; + } - // update blacklists - var elements = xml$$1.getElementsByTagName('blacklist'); - var regexes = []; - for (var i = 0; i < elements.length; i++) { - var regex = elements[i].getAttribute('regex'); // needs unencode? - if (regex) { - regexes.push(regex); - } - } - if (regexes.length) { - _blacklists = regexes; - } + window.setTimeout(function() { + context.map().dblclickEnable(true); + }, 1000); + context.enter(modeSelect(context, [wayId]).newFeature(true)); + }; - if (_rateLimitError) { - callback(_rateLimitError, 'rateLimited'); - } else { - var apiStatus = xml$$1.getElementsByTagName('status'); - var val = apiStatus[0].getAttribute('api'); - callback(undefined, val); - } - } + // Cancel the draw operation, delete everything, and return to browse mode. + drawWay.cancel = function() { + context.pop(_tempEdits); + _tempEdits = 0; - d3_xml(urlroot + '/api/capabilities').get() - .on('load', done) - .on('error', callback); - }, + while (context.graph() !== startGraph) { + context.pop(); + } + window.setTimeout(function() { + context.map().dblclickEnable(true); + }, 1000); - imageryBlacklists: function() { - return _blacklists; - }, + context.surface() + .classed('nope', false) + .classed('nope-disabled', false) + .classed('nope-suppressed', false); + context.enter(modeBrowse(context)); + }; - tileZoom: function(_) { - if (!arguments.length) return _tileZoom; - _tileZoom = _; - return this; - }, + drawWay.activeID = function() { + if (!arguments.length) return end.id; + // no assign + return drawWay; + }; - loadTiles: function(projection, dimensions, callback) { - if (_off) return; - var that = this; - var s = projection.scale() * 2 * Math.PI; - var z = Math.max(Math.log(s) / Math.log(2) - 8, 0); - var ts = 256 * Math.pow(2, z - _tileZoom); - var origin = [ - s / 2 - projection.translate()[0], - s / 2 - projection.translate()[1] - ]; + drawWay.tail = function(text) { + behavior.tail(text); + return drawWay; + }; - var tiles = d3geoTile() - .scaleExtent([_tileZoom, _tileZoom]) - .scale(s) - .size(dimensions) - .translate(projection.translate())() - .map(function(tile) { - var x = tile[0] * ts - origin[0]; - var y = tile[1] * ts - origin[1]; - - return { - id: tile.toString(), - extent: geoExtent$$1( - projection.invert([x, y + ts]), - projection.invert([x + ts, y])) - }; - }); - filter(_tiles.inflight, function(v, i) { - var wanted = find$1(tiles, function(tile) { - return i === tile.id; - }); - if (!wanted) delete _tiles.inflight[i]; - return !wanted; - }).map(abortRequest$2); + return drawWay; + } - tiles.forEach(function(tile) { - var id = tile.id; + /** Error message constants. */ + var FUNC_ERROR_TEXT$3 = 'Expected a function'; - if (_tiles.loaded[id] || _tiles.inflight[id]) return; + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; - if (isEmpty(_tiles.inflight)) { - dispatch$3.call('loading'); - } + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT$3); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } - _tiles.inflight[id] = that.loadFromAPI( - '/api/0.6/map?bbox=' + tile.extent.toParam(), - function(err, parsed) { - delete _tiles.inflight[id]; - if (!err) { - _tiles.loaded[id] = true; - } - - if (callback) { - callback(err, assignIn({ data: parsed }, tile)); - } - - if (isEmpty(_tiles.inflight)) { - dispatch$3.call('loaded'); - } - } - ); - }); - }, + function behaviorHash(context) { + var s0 = null; // cached window.location.hash + var lat = 90 - 1e-8; // allowable latitude range - switch: function(options) { - urlroot = options.urlroot; + var parser = function(map, s) { + var q = utilStringQs(s); + var args = (q.map || '').split('/').map(Number); - oauth.options(assignIn({ - url: urlroot, - loading: authLoading, - done: authDone - }, options)); + if (args.length < 3 || args.some(isNaN)) { + return true; // replace bogus hash - this.reset(); - this.userChangesets(function() {}); // eagerly load user details/changesets - dispatch$3.call('change'); - return this; - }, + } else if (s !== formatter(map).slice(1)) { // hash has changed + var mode = context.mode(), + dist = geoSphericalDistance(map.center(), [args[2], args[1]]), + maxdist = 500; + // Don't allow the hash location to change too much while drawing + // This can happen if the user accidently hit the back button. #3996 + if (mode && mode.id.match(/^draw/) !== null && dist > maxdist) { + context.enter(modeBrowse(context)); + } - toggle: function(_) { - _off = !_; - return this; - }, + map.centerZoom([args[2], Math.min(lat, Math.max(-lat, args[1]))], args[0]); + } + }; - loadedTiles: function(_) { - if (!arguments.length) return _tiles.loaded; - _tiles.loaded = _; - return this; - }, + var formatter = function(map) { + var center = map.center(); + var zoom = map.zoom(); + var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2)); + var q = omit(utilStringQs(window.location.hash.substring(1)), + ['comment', 'source', 'hashtags', 'walkthrough'] + ); + var newParams = {}; + delete q.id; + var selected = context.selectedIDs().filter(function(id) { + return !context.entity(id).isNew(); + }); + if (selected.length) { + newParams.id = selected.join(','); + } - logout: function() { - _userChangesets = undefined; - _userDetails = undefined; - oauth.logout(); - dispatch$3.call('change'); - return this; - }, + newParams.map = zoom.toFixed(2) + + '/' + center[1].toFixed(precision) + + '/' + center[0].toFixed(precision); + return '#' + utilQsString(assign(q, newParams), true); + }; - authenticate: function(callback) { - var that = this; - var cid = _connectionID; - _userChangesets = undefined; - _userDetails = undefined; - function done(err, res) { - if (err) { - if (callback) callback(err); - return; - } - if (that.getConnectionId() !== cid) { - if (callback) callback({ message: 'Connection Switched', status: -1 }); - return; - } - _rateLimitError = undefined; - dispatch$3.call('change'); - if (callback) callback(err, res); - that.userChangesets(function() {}); // eagerly load user details/changesets - } + function update() { + if (context.inIntro()) return; + var s1 = formatter(context.map()); + if (s0 !== s1) { + window.location.replace(s0 = s1); // don't recenter the map! + } + } - return oauth.authenticate(done); - } -}; -var apibase$3 = 'https://taginfo.openstreetmap.org/api/4/', - inflight$1 = {}, - popularKeys = {}, - taginfoCache = {}, - tag_sorts = { - point: 'count_nodes', - vertex: 'count_nodes', - area: 'count_ways', - line: 'count_ways' - }, - tag_sort_members = { - point: 'count_node_members', - vertex: 'count_node_members', - area: 'count_way_members', - line: 'count_way_members', - relation: 'count_relation_members' - }, - tag_filters = { - point: 'nodes', - vertex: 'nodes', - area: 'ways', - line: 'ways' - }, - tag_members_fractions = { - point: 'count_node_members_fraction', - vertex: 'count_node_members_fraction', - area: 'count_way_members_fraction', - line: 'count_way_members_fraction', - relation: 'count_relation_members_fraction' - }; + var throttledUpdate = throttle(update, 500); + + + function hashchange() { + if (window.location.hash === s0) return; // ignore spurious hashchange events + if (parser(context.map(), (s0 = window.location.hash).substring(1))) { + update(); // replace bogus hash + } + } -function sets(params, n, o) { - if (params.geometry && o[params.geometry]) { - params[n] = o[params.geometry]; - } - return params; -} + function hash() { + context.map() + .on('move.hash', throttledUpdate); + context + .on('enter.hash', throttledUpdate); -function setFilter(params) { - return sets(params, 'filter', tag_filters); -} + select(window) + .on('hashchange.hash', hashchange); + if (window.location.hash) { -function setSort(params) { - return sets(params, 'sortname', tag_sorts); -} + var q = utilStringQs(window.location.hash.substring(1)); + if (q.id) { + context.zoomToEntity(q.id.split(',')[0], !q.map); + } -function setSortMembers(params) { - return sets(params, 'sortname', tag_sort_members); -} + if (q.comment) { + context.storage('comment', q.comment); + context.storage('commentDate', Date.now()); + } + if (q.source) { + context.storage('source', q.source); + context.storage('commentDate', Date.now()); + } -function clean(params) { - return omit(params, ['geometry', 'debounce']); -} + if (q.hashtags) { + context.storage('hashtags', q.hashtags); + } + if (q.walkthrough === 'true') { + hash.startWalkthrough = true; + } -function filterKeys(type) { - var count_type = type ? 'count_' + type : 'count_all'; - return function(d) { - return parseFloat(d[count_type]) > 2500 || d.in_wiki; - }; -} + hashchange(); + if (q.map) { + hash.hadHash = true; + } + } + } -function filterMultikeys(prefix) { - return function(d) { - // d.key begins with prefix, and d.key contains no additional ':'s - var re = new RegExp('^' + prefix + '(.*)$'); - var matches = d.key.match(re) || []; - return (matches.length === 2 && matches[1].indexOf(':') === -1); - }; -} + hash.off = function() { + throttledUpdate.cancel(); -function filterValues(allowUpperCase) { - return function(d) { - if (d.value.match(/[;,]/) !== null) return false; // exclude some punctuation - if (!allowUpperCase && d.value.match(/[A-Z*]/) !== null) return false; // exclude uppercase letters - return parseFloat(d.fraction) > 0.0 || d.in_wiki; - }; -} + context.map() + .on('move.hash', null); + context + .on('enter.hash', null); -function filterRoles(geometry) { - return function(d) { - if (d.role === '') return false; // exclude empty role - if (d.role.match(/[A-Z*;,]/) !== null) return false; // exclude uppercase letters and some punctuation - return parseFloat(d[tag_members_fractions[geometry]]) > 0.0; - }; -} + select(window) + .on('hashchange.hash', null); + window.location.hash = ''; + }; -function valKey(d) { - return { - value: d.key, - title: d.key - }; -} + return hash; + } -function valKeyDescription(d) { - return { - value: d.value, - title: d.description || d.value - }; -} + function behaviorLasso(context) { + var behavior = function(selection$$1) { + var lasso; -function roleKey(d) { - return { - value: d.role, - title: d.role - }; -} + function mousedown() { + var button = 0; // left + if (event.button === button && event.shiftKey === true) { + lasso = null; -// sort keys with ':' lower than keys without ':' -function sortKeys(a, b) { - return (a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1) ? -1 - : (a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1) ? 1 - : 0; -} + select(window) + .on('mousemove.lasso', mousemove) + .on('mouseup.lasso', mouseup); + event.stopPropagation(); + } + } -var debouncedRequest = debounce(request, 500, { leading: false }); -function request(url, params, exactMatch, callback, loaded) { - if (inflight$1[url]) return; + function mousemove() { + if (!lasso) { + lasso = uiLasso(context); + context.surface().call(lasso); + } - if (checkCache(url, params, exactMatch, callback)) return; + lasso.p(context.mouse()); + } - inflight$1[url] = d3_json(url, function (err, data) { - delete inflight$1[url]; - loaded(err, data); - }); -} + function normalize(a, b) { + return [ + [Math.min(a[0], b[0]), Math.min(a[1], b[1])], + [Math.max(a[0], b[0]), Math.max(a[1], b[1])]]; + } -function checkCache(url, params, exactMatch, callback) { - var rp = params.rp || 25, - testQuery = params.query || '', - testUrl = url; - do { - var hit = taginfoCache[testUrl]; + function lassoed() { + if (!lasso) return []; - // exact match, or shorter match yielding fewer than max results (rp) - if (hit && (url === testUrl || hit.length < rp)) { - callback(null, hit); - return true; - } + var graph = context.graph(), + bounds = lasso.extent().map(context.projection.invert), + extent = geoExtent$$1(normalize(bounds[0], bounds[1])); - // don't try to shorten the query - if (exactMatch || !testQuery.length) return false; + return map$3(context.intersects(extent).filter(function(entity) { + return entity.type === 'node' && + geoPointInPolygon(context.projection(entity.loc), lasso.coordinates) && + !context.features().isHidden(entity, graph, entity.geometry(graph)); + }), 'id'); + } - // do shorten the query to see if we already have a cached result - // that has returned fewer than max results (rp) - testQuery = testQuery.slice(0, -1); - testUrl = url.replace(/&query=(.*?)&/, '&query=' + testQuery + '&'); - } while (testQuery.length >= 0); - return false; -} + function mouseup() { + select(window) + .on('mousemove.lasso', null) + .on('mouseup.lasso', null); + if (!lasso) return; -var serviceTaginfo = { + var ids = lassoed(); + lasso.close(); - init: function() { - inflight$1 = {}; - taginfoCache = {}; - popularKeys = {}; + if (ids.length) { + context.enter(modeSelect(context, ids)); + } + } - // Fetch popular keys. We'll exclude these from `values` - // lookups because they stress taginfo, and they aren't likely - // to yield meaningful autocomplete results.. see #3955 - var params = { rp: 100, sortname: 'values_all', sortorder: 'desc', page: 1, debounce: false }; - this.keys(params, function(err, data) { - if (err) return; - data.forEach(function(d) { - if (d.value === 'opening_hours') return; // exception - popularKeys[d.value] = true; - }); - }); - }, + selection$$1 + .on('mousedown.lasso', mousedown); + }; - reset: function() { - forEach(inflight$1, function(req) { req.abort(); }); - inflight$1 = {}; - }, + behavior.off = function(selection$$1) { + selection$$1.on('mousedown.lasso', null); + }; - keys: function(params, callback) { - var doRequest = params.debounce ? debouncedRequest : request; - params = clean(setSort(params)); - params = assignIn({ rp: 10, sortname: 'count_all', sortorder: 'desc', page: 1 }, params); + return behavior; + } - var url = apibase$3 + 'keys/all?' + utilQsString(params); - doRequest(url, params, false, callback, function(err, d) { - if (err) { - callback(err); - } else { - var f = filterKeys(params.filter); - var result = d.data.filter(f).sort(sortKeys).map(valKey); - taginfoCache[url] = result; - callback(null, result); - } - }); - }, + /* Creates a keybinding behavior for an operation */ + function behaviorOperation() { + var _operation, keybinding; + var behavior = function () { + if (_operation && _operation.available()) { + keybinding = d3keybinding('behavior.key.' + _operation.id); + keybinding.on(_operation.keys, function() { + event.preventDefault(); + var disabled = _operation.disabled(); + var flash; - multikeys: function(params, callback) { - var doRequest = params.debounce ? debouncedRequest : request; - params = clean(setSort(params)); - params = assignIn({ rp: 25, sortname: 'count_all', sortorder: 'desc', page: 1 }, params); - var prefix = params.query; + if (disabled) { + flash = uiFlash() + .duration(4000) + .iconName('#operation-' + _operation.id) + .iconClass('operation disabled') + .text(_operation.tooltip); - var url = apibase$3 + 'keys/all?' + utilQsString(params); - doRequest(url, params, true, callback, function(err, d) { - if (err) { - callback(err); - } else { - var f = filterMultikeys(prefix); - var result = d.data.filter(f).map(valKey); - taginfoCache[url] = result; - callback(null, result); - } - }); - }, + flash(); + } else { + flash = uiFlash() + .duration(2000) + .iconName('#operation-' + _operation.id) + .iconClass('operation') + .text(_operation.annotation() || _operation.title); - values: function(params, callback) { - // Exclude popular keys from values lookups.. see #3955 - var key = params.key; - if (key && popularKeys[key]) { - callback(null, []); - return; - } + flash(); + _operation(); + } + }); - var doRequest = params.debounce ? debouncedRequest : request; - params = clean(setSort(setFilter(params))); - params = assignIn({ rp: 25, sortname: 'count_all', sortorder: 'desc', page: 1 }, params); + select(document).call(keybinding); + } - var url = apibase$3 + 'key/values?' + utilQsString(params); - doRequest(url, params, false, callback, function(err, d) { - if (err) { - callback(err); - } else { - // In most cases we prefer taginfo value results with lowercase letters. - // A few OSM keys expect values to contain uppercase values (see #3377). - // This is not an exhaustive list (e.g. `name` also has uppercase values) - // but these are the fields where taginfo value lookup is most useful. - var re = /network|taxon|genus|species|brand|grape_variety|rating|:output|_hours|_times/; - var allowUpperCase = (params.key.match(re) !== null); - var f = filterValues(allowUpperCase); - - var result = d.data.filter(f).map(valKeyDescription); - taginfoCache[url] = result; - callback(null, result); - } - }); - }, + return behavior; + }; - roles: function(params, callback) { - var doRequest = params.debounce ? debouncedRequest : request; - var geometry = params.geometry; - params = clean(setSortMembers(params)); - params = assignIn({ rp: 25, sortname: 'count_all_members', sortorder: 'desc', page: 1 }, params); + behavior.off = function() { + if (keybinding) { + select(document).call(keybinding.off); + } + }; - var url = apibase$3 + 'relation/roles?' + utilQsString(params); - doRequest(url, params, true, callback, function(err, d) { - if (err) { - callback(err); - } else { - var f = filterRoles(geometry); - var result = d.data.filter(f).map(roleKey); - taginfoCache[url] = result; - callback(null, result); - } - }); - }, + behavior.which = function (_) { + if (!arguments.length) return _operation; + _operation = _; + return behavior; + }; - docs: function(params, callback) { - var doRequest = params.debounce ? debouncedRequest : request; - params = clean(setSort(params)); - var path = 'key/wiki_pages?'; - if (params.value) path = 'tag/wiki_pages?'; - else if (params.rtype) path = 'relation/wiki_pages?'; + return behavior; + } - var url = apibase$3 + path + utilQsString(params); - doRequest(url, params, true, callback, function(err, d) { - if (err) { - callback(err); - } else { - taginfoCache[url] = d.data; - callback(null, d.data); - } - }); - }, + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } - apibase: function(_) { - if (!arguments.length) return apibase$3; - apibase$3 = _; - return this; - } + /** Used for built-in method references. */ + var objectProto$19 = Object.prototype; -}; + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString$2 = objectProto$19.toString; -var jsonpCache = {}; -window.jsonpCache = jsonpCache; + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString$2.call(value); + } -function jsonpRequest(url, callback) { + result[value] = key; + }, constant$13(identity$8)); - if (window.JSONP_FIX) { - if (window.JSONP_DELAY === 0) { - callback(window.JSONP_FIX); - } else { - setTimeout(function() { - callback(window.JSONP_FIX); - }, window.JSONP_DELAY || 0); - } - return; - } + /** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = baseIteratee(iteratee, 3); - function rand() { - var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', - c = '', i = -1; - while (++i < 15) c += chars.charAt(Math.floor(Math.random() * 52)); - return c; + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); + }); + return result; } - function create$$1(url) { - var e = url.match(/callback=(\w+)/), - c = e ? e[1] : rand(); - jsonpCache[c] = function(data) { - callback(data); - delete jsonpCache[c]; - script.remove(); - }; - return 'jsonpCache.' + c; - } + function behaviorPaste(context) { + var keybinding = d3keybinding('paste'); - var cb = create$$1(url), - script = d3_select('head') - .append('script') - .attr('type', 'text/javascript') - .attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb)); -} -var endpoint = 'https://www.wikidata.org/w/api.php?'; + function doPaste() { + event.preventDefault(); -var serviceWikidata = { + var baseGraph = context.graph(), + mouse$$1 = context.mouse(), + projection = context.projection, + viewport = geoExtent$$1(projection.clipExtent()).polygon(); - init: function() {}, - reset: function() {}, + if (!geoPointInPolygon(mouse$$1, viewport)) return; + var extent = geoExtent$$1(), + oldIDs = context.copyIDs(), + oldGraph = context.copyGraph(), + newIDs = []; - // Given a Wikipedia language and article title, return an array of - // corresponding Wikidata entities. - itemsByTitle: function(lang, title, callback) { - if (!title) { - callback('', {}); - return; - } + if (!oldIDs.length) return; - lang = lang || 'en'; - jsonpRequest(endpoint + utilQsString({ - action: 'wbgetentities', - format: 'json', - sites: lang.replace(/-/g, '_') + 'wiki', - titles: title, - languages: 'en', // shrink response by filtering to one language - callback: '{callback}' - }), function(data) { - if (!data || data.error) { - callback('', {}); - } else { - callback(title, data.entities || {}); - } - }); - } + var action = actionCopyEntities(oldIDs, oldGraph); + context.perform(action); -}; + var copies = action.copies(); + var originals = invert(mapValues(copies, 'id')); + for (var id in copies) { + var oldEntity = oldGraph.entity(id), + newEntity = copies[id]; -var endpoint$1 = 'https://en.wikipedia.org/w/api.php?'; + extent._extend(oldEntity.extent(oldGraph)); -var serviceWikipedia = { + // Exclude child nodes from newIDs if their parent way was also copied. + var parents = context.graph().parentWays(newEntity), + parentCopied = false; + for (var i = 0; i < parents.length; i++) { + if (originals[parents[i].id]) { + parentCopied = true; + break; + } + } - init: function() {}, - reset: function() {}, + if (!parentCopied) { + newIDs.push(newEntity.id); + } + } + // Put pasted objects where mouse pointer is.. + var center = projection(extent.center()), + delta = [ mouse$$1[0] - center[0], mouse$$1[1] - center[1] ]; - search: function(lang, query, callback) { - if (!query) { - callback('', []); - return; - } + context.perform(actionMove(newIDs, delta, projection)); + context.enter(modeMove$$1(context, newIDs, baseGraph)); + } - lang = lang || 'en'; - jsonpRequest(endpoint$1.replace('en', lang) + - utilQsString({ - action: 'query', - list: 'search', - srlimit: '10', - srinfo: 'suggestion', - format: 'json', - callback: '{callback}', - srsearch: query - }), function(data) { - if (!data || !data.query || !data.query.search || data.error) { - callback('', []); - } else { - var results = data.query.search.map(function(d) { return d.title; }); - callback(query, results); - } - } - ); - }, + function paste() { + keybinding.on(uiCmd('⌘V'), doPaste); + select(document).call(keybinding); + return paste; + } - suggestions: function(lang, query, callback) { - if (!query) { - callback('', []); - return; - } - lang = lang || 'en'; - jsonpRequest(endpoint$1.replace('en', lang) + - utilQsString({ - action: 'opensearch', - namespace: 0, - suggest: '', - format: 'json', - callback: '{callback}', - search: query - }), function(data) { - if (!data || data.error) { - callback('', []); - } else { - callback(data[0], data[1] || []); - } - } - ); - }, + paste.off = function() { + select(document).call(keybinding.off); + }; - translations: function(lang, title, callback) { - if (!title) { - callback({}); - return; - } + return paste; + } - jsonpRequest(endpoint$1.replace('en', lang) + - utilQsString({ - action: 'query', - prop: 'langlinks', - format: 'json', - callback: '{callback}', - lllimit: 500, - titles: title - }), function(data) { - if (!data || !data.query || !data.query.pages || data.error) { - callback({}); - } else { - var list = data.query.pages[Object.keys(data.query.pages)[0]], - translations = {}; - if (list && list.langlinks) { - list.langlinks.forEach(function(d) { - translations[d.lang] = d['*']; - }); - } - callback(translations); - } - } - ); - } + function behaviorSelect(context) { + var lastMouse = null; + var suppressMenu = true; + var tolerance = 4; + var p1 = null; -}; - -var services = { - geocoder: serviceNominatim, - mapillary: serviceMapillary, - openstreetcam: serviceOpenstreetcam, - osm: serviceOsm, - taginfo: serviceTaginfo, - wikidata: serviceWikidata, - wikipedia: serviceWikipedia -}; - -function svgAreas$$1(projection, context) { - // Patterns only work in Firefox when set directly on element. - // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632) - var patterns = { - beach: 'beach', - cemetery: 'cemetery', - construction: 'construction', - farm: 'farmland', - farmland: 'farmland', - grave_yard: 'cemetery', - meadow: 'meadow', - military: 'construction', - orchard: 'orchard', - sand: 'beach', - scrub: 'scrub', - wetland: 'wetland', - }; - var patternKeys = ['landuse', 'natural', 'amenity']; + function point$$1() { + return mouse(context.container().node()); + } - function setPattern(d) { - for (var i = 0; i < patternKeys.length; i++) { - if (d.tags.building && d.tags.building !== 'no') continue; + function keydown() { + var e = event; + if (e && e.shiftKey) { + context.surface() + .classed('behavior-multiselect', true); + } - if (patterns.hasOwnProperty(d.tags[patternKeys[i]])) { - this.style.fill = this.style.stroke = 'url("#pattern-' + patterns[d.tags[patternKeys[i]]] + '")'; - return; - } - } - this.style.fill = this.style.stroke = ''; - } + if (e && e.keyCode === 93) { // context menu + e.preventDefault(); + e.stopPropagation(); + } + } - function drawTargets(selection, graph, entities, filter) { - var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor '; - var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor '; - var getPath = svgPath(projection).geojson; - var activeID = context.activeID(); + function keyup() { + var e = event; + if (!e || !e.shiftKey) { + context.surface() + .classed('behavior-multiselect', false); + } - // The targets and nopes will be MultiLineString sub-segments of the ways - var data = { targets: [], nopes: [] }; - entities.forEach(function(way) { - var features = svgSegmentWay(way, graph, activeID); - data.targets.push.apply(data.targets, features.passive); - data.nopes.push.apply(data.nopes, features.active); - }); + if (e && e.keyCode === 93) { // context menu + e.preventDefault(); + e.stopPropagation(); + contextmenu(); + } + } - // Targets allow hover and vertex snapping - var targetData = data.targets.filter(getPath); - var targets = selection.selectAll('.area.target-allowed') - .filter(function(d) { return filter(d.properties.entity); }) - .data(targetData, function key(d) { return d.id; }); - - // exit - targets.exit() - .remove(); - - // enter/update - targets.enter() - .append('path') - .merge(targets) - .attr('d', getPath) - .attr('class', function(d) { return 'way area target target-allowed ' + targetClass + d.id; }); - - - // NOPE - var nopeData = data.nopes.filter(getPath); - var nopes = selection.selectAll('.area.target-nope') - .filter(function(d) { return filter(d.properties.entity); }) - .data(nopeData, function key(d) { return d.id; }); - - // exit - nopes.exit() - .remove(); - - // enter/update - nopes.enter() - .append('path') - .merge(nopes) - .attr('d', getPath) - .attr('class', function(d) { return 'way area target target-nope ' + nopeClass + d.id; }); - } - - - function drawAreas(selection, graph, entities, filter) { - var path = svgPath(projection, graph, true), - areas = {}, - multipolygon; - - for (var i = 0; i < entities.length; i++) { - var entity = entities[i]; - if (entity.geometry(graph) !== 'area') continue; - - multipolygon = osmIsSimpleMultipolygonOuterMember(entity, graph); - if (multipolygon) { - areas[multipolygon.id] = { - entity: multipolygon.mergeTags(entity.tags), - area: Math.abs(entity.area(graph)) - }; - } else if (!areas[entity.id]) { - areas[entity.id] = { - entity: entity, - area: Math.abs(entity.area(graph)) - }; - } - } + function mousedown() { + if (!p1) p1 = point$$1(); + select(window) + .on('mouseup.select', mouseup, true); - areas = values$1(areas).filter(function hasPath(a) { return path(a.entity); }); - areas.sort(function areaSort(a, b) { return b.area - a.area; }); - areas = map$3(areas, 'entity'); + var isShowAlways = +context.storage('edit-menu-show-always') === 1; + suppressMenu = !isShowAlways; + } - var strokes = areas.filter(function(area) { - return area.type === 'way'; - }); - var data = { - clip: areas, - shadow: strokes, - stroke: strokes, - fill: areas - }; + function mousemove() { + if (event) lastMouse = event; + } - var clipPaths = context.surface().selectAll('defs').selectAll('.clipPath') - .filter(filter) - .data(data.clip, osmEntity$$1.key); - clipPaths.exit() - .remove(); + function mouseup() { + click(); + } - var clipPathsEnter = clipPaths.enter() - .append('clipPath') - .attr('class', 'clipPath') - .attr('id', function(entity) { return entity.id + '-clippath'; }); - clipPathsEnter - .append('path'); + function contextmenu() { + var e = event; + e.preventDefault(); + e.stopPropagation(); - clipPaths.merge(clipPathsEnter) - .selectAll('path') - .attr('d', path); + if (!+e.clientX && !+e.clientY) { + if (lastMouse) { + e.sourceEvent = lastMouse; + } else { + return; + } + } + if (!p1) p1 = point$$1(); + suppressMenu = false; + click(); + } - var layer = selection.selectAll('.layer-areas .layer-areas-areas'); - var areagroup = layer - .selectAll('g.areagroup') - .data(['fill', 'shadow', 'stroke']); + function click() { + select(window) + .on('mouseup.select', null, true); - areagroup = areagroup.enter() - .append('g') - .attr('class', function(d) { return 'areagroup area-' + d; }) - .merge(areagroup); + if (!p1) return; + var p2 = point$$1(); + var dist = geoVecLength(p1, p2); - var paths = areagroup - .selectAll('path') - .filter(filter) - .data(function(layer) { return data[layer]; }, osmEntity$$1.key); + p1 = null; + if (dist > tolerance) { + return; + } - paths.exit() - .remove(); + var isMultiselect = event.shiftKey || select('#surface .lasso').node(); + var isShowAlways = +context.storage('edit-menu-show-always') === 1; + var datum = event.target.__data__ || (lastMouse && lastMouse.target.__data__); + var mode = context.mode(); - var fills = selection.selectAll('.area-fill path.area').nodes(); + var entity = datum && datum.properties && datum.properties.entity; + if (entity) datum = entity; - var bisect = d3_bisector(function(node) { - return -node.__data__.area(graph); - }).left; + if (datum && datum.type === 'midpoint') { + datum = datum.parents[0]; + } - function sortedByArea(entity) { - if (this._parent.__data__ === 'fill') { - return fills[bisect(fills, -entity.area(graph))]; - } - } + if (!(datum instanceof osmEntity$$1)) { + // clicked nothing.. + if (!isMultiselect && mode.id !== 'browse') { + context.enter(modeBrowse(context)); + } - paths = paths.enter() - .insert('path', sortedByArea) - .merge(paths) - .each(function(entity) { - var layer = this.parentNode.__data__; + } else { + // clicked an entity.. + var selectedIDs = context.selectedIDs(); + + if (!isMultiselect) { + if (selectedIDs.length > 1 && (!suppressMenu && !isShowAlways)) { + // multiple things already selected, just show the menu... + mode.suppressMenu(false).reselect(); + } else { + // select a single thing.. + context.enter(modeSelect(context, [datum.id]).suppressMenu(suppressMenu)); + } + + } else { + if (selectedIDs.indexOf(datum.id) !== -1) { + // clicked entity is already in the selectedIDs list.. + if (!suppressMenu && !isShowAlways) { + // don't deselect clicked entity, just show the menu. + mode.suppressMenu(false).reselect(); + } else { + // deselect clicked entity, then reenter select mode or return to browse mode.. + selectedIDs = without(selectedIDs, datum.id); + context.enter(selectedIDs.length ? modeSelect(context, selectedIDs) : modeBrowse(context)); + } + } else { + // clicked entity is not in the selected list, add it.. + selectedIDs = selectedIDs.concat([datum.id]); + context.enter(modeSelect(context, selectedIDs).suppressMenu(suppressMenu)); + } + } + } - this.setAttribute('class', entity.type + ' area ' + layer + ' ' + entity.id); + // reset for next time.. + suppressMenu = true; + } - if (layer === 'fill') { - this.setAttribute('clip-path', 'url(#' + entity.id + '-clippath)'); - setPattern.apply(this, arguments); - } - }) - .call(svgTagClasses()) - .attr('d', path); + var behavior = function(selection$$1) { + lastMouse = null; + suppressMenu = true; + p1 = null; + + select(window) + .on('keydown.select', keydown) + .on('keyup.select', keyup) + .on('contextmenu.select-window', function() { + // Edge and IE really like to show the contextmenu on the + // menubar when user presses a keyboard menu button + // even after we've already preventdefaulted the key event. + var e = event; + if (+e.clientX === 0 && +e.clientY === 0) { + event.preventDefault(); + event.stopPropagation(); + } + }); + + selection$$1 + .on('mousedown.select', mousedown) + .on('mousemove.select', mousemove) + .on('contextmenu.select', contextmenu); + + if (event && event.shiftKey) { + context.surface() + .classed('behavior-multiselect', true); + } + }; - // touch targets - selection.selectAll('.layer-areas .layer-areas-targets') - .call(drawTargets, graph, data.stroke, filter); - } - return drawAreas; -} + behavior.off = function(selection$$1) { + select(window) + .on('keydown.select', null) + .on('keyup.select', null) + .on('contextmenu.select-window', null) + .on('mouseup.select', null, true); -function svgDebug$$1(projection, context) { + selection$$1 + .on('mousedown.select', null) + .on('mousemove.select', null) + .on('contextmenu.select', null); - function multipolygons(imagery) { - return imagery.map(function(data$$1) { - return { - type: 'MultiPolygon', - coordinates: [ data$$1.polygon ] - }; - }); - } + context.surface() + .classed('behavior-multiselect', false); + }; - function drawDebug(selection$$1) { - var showsTile = context.getDebug('tile'); - var showsCollision = context.getDebug('collision'); - var showsImagery = context.getDebug('imagery'); - var showsImperial = context.getDebug('imperial'); - var showsDriveLeft = context.getDebug('driveLeft'); - var showsTouchTargets = context.getDebug('target'); - var debugData = []; - if (showsTile) { - debugData.push({ class: 'red', label: 'tile' }); - } - if (showsCollision) { - debugData.push({ class: 'yellow', label: 'collision' }); - } - if (showsImagery) { - debugData.push({ class: 'orange', label: 'imagery' }); - } - if (showsImperial) { - debugData.push({ class: 'cyan', label: 'imperial' }); - } - if (showsDriveLeft) { - debugData.push({ class: 'green', label: 'driveLeft' }); - } - if (showsTouchTargets) { - debugData.push({ class: 'pink', label: 'touchTargets' }); - } + return behavior; + } + + function svgAreas$$1(projection, context) { + // Patterns only work in Firefox when set directly on element. + // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632) + var patterns = { + beach: 'beach', + cemetery: 'cemetery', + construction: 'construction', + farm: 'farmland', + farmland: 'farmland', + grave_yard: 'cemetery', + meadow: 'meadow', + military: 'construction', + orchard: 'orchard', + sand: 'beach', + scrub: 'scrub', + wetland: 'wetland', + }; + var patternKeys = ['landuse', 'natural', 'amenity']; - var legend = d3_select('#content') - .selectAll('.debug-legend') - .data(debugData.length ? [0] : []); - legend.exit() - .remove(); + function setPattern(d) { + for (var i = 0; i < patternKeys.length; i++) { + if (d.tags.building && d.tags.building !== 'no') continue; - legend = legend.enter() - .append('div') - .attr('class', 'fillD debug-legend') - .merge(legend); + if (patterns.hasOwnProperty(d.tags[patternKeys[i]])) { + this.style.fill = this.style.stroke = 'url("#pattern-' + patterns[d.tags[patternKeys[i]]] + '")'; + return; + } + } + this.style.fill = this.style.stroke = ''; + } - var legendItems = legend.selectAll('.debug-legend-item') - .data(debugData, function(d) { return d.label; }); + function drawTargets(selection, graph, entities, filter) { + var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor '; + var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor '; + var getPath = svgPath(projection).geojson; + var activeID = context.activeID(); - legendItems.exit() - .remove(); + // The targets and nopes will be MultiLineString sub-segments of the ways + var data = { targets: [], nopes: [] }; - legendItems.enter() - .append('span') - .attr('class', function(d) { return 'debug-legend-item ' + d.class; }) - .text(function(d) { return d.label; }); + entities.forEach(function(way) { + var features = svgSegmentWay(way, graph, activeID); + data.targets.push.apply(data.targets, features.passive); + data.nopes.push.apply(data.nopes, features.active); + }); - var layer = selection$$1.selectAll('.layer-debug') - .data(showsImagery || showsImperial || showsDriveLeft ? [0] : []); + // Targets allow hover and vertex snapping + var targetData = data.targets.filter(getPath); + var targets = selection.selectAll('.area.target-allowed') + .filter(function(d) { return filter(d.properties.entity); }) + .data(targetData, function key(d) { return d.id; }); + + // exit + targets.exit() + .remove(); + + // enter/update + targets.enter() + .append('path') + .merge(targets) + .attr('d', getPath) + .attr('class', function(d) { return 'way area target target-allowed ' + targetClass + d.id; }); + + + // NOPE + var nopeData = data.nopes.filter(getPath); + var nopes = selection.selectAll('.area.target-nope') + .filter(function(d) { return filter(d.properties.entity); }) + .data(nopeData, function key(d) { return d.id; }); + + // exit + nopes.exit() + .remove(); + + // enter/update + nopes.enter() + .append('path') + .merge(nopes) + .attr('d', getPath) + .attr('class', function(d) { return 'way area target target-nope ' + nopeClass + d.id; }); + } - layer.exit() - .remove(); - layer = layer.enter() - .append('g') - .attr('class', 'layer-debug') - .merge(layer); + function drawAreas(selection, graph, entities, filter) { + var path = svgPath(projection, graph, true), + areas = {}, + multipolygon; + + for (var i = 0; i < entities.length; i++) { + var entity = entities[i]; + if (entity.geometry(graph) !== 'area') continue; + + multipolygon = osmIsSimpleMultipolygonOuterMember(entity, graph); + if (multipolygon) { + areas[multipolygon.id] = { + entity: multipolygon.mergeTags(entity.tags), + area: Math.abs(entity.area(graph)) + }; + } else if (!areas[entity.id]) { + areas[entity.id] = { + entity: entity, + area: Math.abs(entity.area(graph)) + }; + } + } + areas = values$1(areas).filter(function hasPath(a) { return path(a.entity); }); + areas.sort(function areaSort(a, b) { return b.area - a.area; }); + areas = map$3(areas, 'entity'); - var extent = context.map().extent(); - var dataImagery = data.imagery || []; - var availableImagery = showsImagery && multipolygons(dataImagery.filter(function(source) { - if (!source.polygon) return false; - return source.polygon.some(function(polygon) { - return geoPolygonIntersectsPolygon(polygon, extent, true); - }); - })); + var strokes = areas.filter(function(area) { + return area.type === 'way'; + }); - var imagery = layer.selectAll('path.debug-imagery') - .data(showsImagery ? availableImagery : []); + var data = { + clip: areas, + shadow: strokes, + stroke: strokes, + fill: areas + }; - imagery.exit() - .remove(); + var clipPaths = context.surface().selectAll('defs').selectAll('.clipPath') + .filter(filter) + .data(data.clip, osmEntity$$1.key); - imagery.enter() - .append('path') - .attr('class', 'debug-imagery debug orange'); + clipPaths.exit() + .remove(); + var clipPathsEnter = clipPaths.enter() + .append('clipPath') + .attr('class', 'clipPath') + .attr('id', function(entity) { return entity.id + '-clippath'; }); - var imperial = layer - .selectAll('path.debug-imperial') - .data(showsImperial ? [dataImperial] : []); + clipPathsEnter + .append('path'); - imperial.exit() - .remove(); + clipPaths.merge(clipPathsEnter) + .selectAll('path') + .attr('d', path); - imperial.enter() - .append('path') - .attr('class', 'debug-imperial debug cyan'); + var layer = selection.selectAll('.layer-areas .layer-areas-areas'); - var driveLeft = layer - .selectAll('path.debug-drive-left') - .data(showsDriveLeft ? [dataDriveLeft] : []); + var areagroup = layer + .selectAll('g.areagroup') + .data(['fill', 'shadow', 'stroke']); - driveLeft.exit() - .remove(); + areagroup = areagroup.enter() + .append('g') + .attr('class', function(d) { return 'areagroup area-' + d; }) + .merge(areagroup); - driveLeft.enter() - .append('path') - .attr('class', 'debug-drive-left debug green'); + var paths = areagroup + .selectAll('path') + .filter(filter) + .data(function(layer) { return data[layer]; }, osmEntity$$1.key); + paths.exit() + .remove(); - // update - layer.selectAll('path') - .attr('d', svgPath(projection).geojson); - } + var fills = selection.selectAll('.area-fill path.area').nodes(); + var bisect = bisector(function(node) { + return -node.__data__.area(graph); + }).left; - // This looks strange because `enabled` methods on other layers are - // chainable getter/setters, and this one is just a getter. - drawDebug.enabled = function() { - if (!arguments.length) { - return context.getDebug('tile') || - context.getDebug('collision') || - context.getDebug('imagery') || - context.getDebug('imperial') || - context.getDebug('driveLeft') || - context.getDebug('target'); - } else { - return this; - } - }; + function sortedByArea(entity) { + if (this._parent.__data__ === 'fill') { + return fills[bisect(fills, -entity.area(graph))]; + } + } + paths = paths.enter() + .insert('path', sortedByArea) + .merge(paths) + .each(function(entity) { + var layer = this.parentNode.__data__; - return drawDebug; -} - -/* - A standalone SVG element that contains only a `defs` sub-element. To be - used once globally, since defs IDs must be unique within a document. -*/ -function svgDefs(context) { - - function SVGSpriteDefinition(id, href) { - return function(defs) { - d3_request(href) - .mimeType('image/svg+xml') - .response(function(xhr) { return xhr.responseXML; }) - .get(function(err, svg) { - if (err) return; - defs.node().appendChild( - d3_select(svg.documentElement).attr('id', id).node() - ); - }); - }; - } + this.setAttribute('class', entity.type + ' area ' + layer + ' ' + entity.id); + if (layer === 'fill') { + this.setAttribute('clip-path', 'url(#' + entity.id + '-clippath)'); + setPattern.apply(this, arguments); + } + }) + .call(svgTagClasses()) + .attr('d', path); - return function drawDefs(selection$$1) { - var defs = selection$$1.append('defs'); - - // markers - defs - .append('marker') - .attr('id', 'oneway-marker') - .attr('viewBox', '0 0 10 5') - .attr('refX', 2.5) - .attr('refY', 2.5) - .attr('markerWidth', 2) - .attr('markerHeight', 2) - .attr('markerUnits', 'strokeWidth') - .attr('orient', 'auto') - .append('path') - .attr('class', 'oneway-marker-path') - .attr('d', 'M 5,3 L 0,3 L 0,2 L 5,2 L 5,0 L 10,2.5 L 5,5 z') - .attr('stroke', 'none') - .attr('fill', '#000') - .attr('opacity', '0.75'); - - defs - .append('marker') - .attr('id', 'viewfield-marker') - .attr('viewBox', '0 0 16 16') - .attr('refX', 8) - .attr('refY', 16) - .attr('markerWidth', 4) - .attr('markerHeight', 4) - .attr('markerUnits', 'strokeWidth') - .attr('orient', 'auto') - .append('path') - .attr('class', 'viewfield-marker-path') - .attr('d', 'M 6,14 C 8,13.4 8,13.4 10,14 L 16,3 C 12,0 4,0 0,3 z') - .attr('fill', '#333') - .attr('fill-opacity', '0.75') - .attr('stroke', '#fff') - .attr('stroke-width', '0.5px') - .attr('stroke-opacity', '0.75'); - - defs - .append('marker') - .attr('id', 'viewfield-marker-wireframe') - .attr('viewBox', '0 0 16 16') - .attr('refX', 8) - .attr('refY', 16) - .attr('markerWidth', 4) - .attr('markerHeight', 4) - .attr('markerUnits', 'strokeWidth') - .attr('orient', 'auto') - .append('path') - .attr('class', 'viewfield-marker-path') - .attr('d', 'M 6,14 C 8,13.4 8,13.4 10,14 L 16,3 C 12,0 4,0 0,3 z') - .attr('fill', 'none') - .attr('stroke', '#fff') - .attr('stroke-width', '0.5px') - .attr('stroke-opacity', '0.75'); - - // patterns - var patterns = defs.selectAll('pattern') - .data([ - // pattern name, pattern image name - ['wetland', 'wetland'], - ['construction', 'construction'], - ['cemetery', 'cemetery'], - ['orchard', 'orchard'], - ['farmland', 'farmland'], - ['beach', 'dots'], - ['scrub', 'dots'], - ['meadow', 'dots'] - ]) - .enter() - .append('pattern') - .attr('id', function (d) { return 'pattern-' + d[0]; }) - .attr('width', 32) - .attr('height', 32) - .attr('patternUnits', 'userSpaceOnUse'); - - patterns - .append('rect') - .attr('x', 0) - .attr('y', 0) - .attr('width', 32) - .attr('height', 32) - .attr('class', function (d) { return 'pattern-color-' + d[0]; }); - - patterns - .append('image') - .attr('x', 0) - .attr('y', 0) - .attr('width', 32) - .attr('height', 32) - .attr('xlink:href', function (d) { - return context.imagePath('pattern/' + d[1] + '.png'); - }); - // clip paths - defs.selectAll('clipPath') - .data([12, 18, 20, 32, 45]) - .enter() - .append('clipPath') - .attr('id', function (d) { return 'clip-square-' + d; }) - .append('rect') - .attr('x', 0) - .attr('y', 0) - .attr('width', function (d) { return d; }) - .attr('height', function (d) { return d; }); - - // symbol spritesheets - defs - .call(SVGSpriteDefinition('iD-sprite', context.imagePath('iD-sprite.svg'))) - .call(SVGSpriteDefinition('maki-sprite', context.imagePath('maki-sprite.svg'))); - }; -} - -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -//[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] -//[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] -//[5] Name ::= NameStartChar (NameChar)* -var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;//\u10000-\uEFFFF -var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"); -var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$'); -//var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/ -//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',') - -//S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE -//S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE -var S_TAG = 0;//tag name offerring -var S_ATTR = 1;//attr name offerring -var S_ATTR_SPACE=2;//attr name end and space offer -var S_EQ = 3;//=space? -var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only) -var S_ATTR_END = 5;//attr value end and no space(quot end) -var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer) -var S_TAG_CLOSE = 7;//closed el - -function XMLReader(){ - -} - -XMLReader.prototype = { - parse:function(source,defaultNSMap,entityMap){ - var domBuilder = this.domBuilder; - domBuilder.startDocument(); - _copy(defaultNSMap ,defaultNSMap = {}); - parse$1(source,defaultNSMap,entityMap, - domBuilder,this.errorHandler); - domBuilder.endDocument(); - } -}; -function parse$1(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ - function fixedFromCharCode(code) { - // String.prototype.fromCharCode does not supports - // > 2 bytes unicode chars directly - if (code > 0xffff) { - code -= 0x10000; - var surrogate1 = 0xd800 + (code >> 10) - , surrogate2 = 0xdc00 + (code & 0x3ff); - - return String.fromCharCode(surrogate1, surrogate2); - } else { - return String.fromCharCode(code); - } - } - function entityReplacer(a){ - var k = a.slice(1,-1); - if(k in entityMap){ - return entityMap[k]; - }else if(k.charAt(0) === '#'){ - return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) - }else{ - errorHandler.error('entity not found:'+a); - return a; - } - } - function appendText(end){//has some bugs - if(end>start){ - var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); - locator&&position(start); - domBuilder.characters(xt,0,end-start); - start = end; - } - } - function position(p,m){ - while(p>=lineEnd && (m = linePattern.exec(source))){ - lineStart = m.index; - lineEnd = lineStart + m[0].length; - locator.lineNumber++; - //console.log('line++:',locator,startPos,endPos) - } - locator.columnNumber = p-lineStart+1; - } - var lineStart = 0; - var lineEnd = 0; - var linePattern = /.*(?:\r\n?|\n)|.*$/g; - var locator = domBuilder.locator; - - var parseStack = [{currentNSMap:defaultNSMapCopy}]; - var closeMap = {}; - var start = 0; - while(true){ - try{ - var tagStart = source.indexOf('<',start); - if(tagStart<0){ - if(!source.substr(start).match(/^\s*$/)){ - var doc = domBuilder.doc; - var text = doc.createTextNode(source.substr(start)); - doc.appendChild(text); - domBuilder.currentElement = text; - } - return; - } - if(tagStart>start){ - appendText(tagStart); - } - switch(source.charAt(tagStart+1)){ - case '/': - var end = source.indexOf('>',tagStart+3); - var tagName = source.substring(tagStart+2,end); - var config = parseStack.pop(); - if(end<0){ - - tagName = source.substring(tagStart+2).replace(/[\s<].*/,''); - //console.error('#@@@@@@'+tagName) - errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName); - end = tagStart+1+tagName.length; - }else if(tagName.match(/\s - locator&&position(tagStart); - end = parseInstruction(source,tagStart,domBuilder); - break; - case '!':// start){ - start = end; - }else{ - //TODO: 这里有可能sax回退,有位置错误风险 - appendText(Math.max(tagStart,start)+1); - } - } -} -function copyLocator(f,t){ - t.lineNumber = f.lineNumber; - t.columnNumber = f.columnNumber; - return t; -} - -/** - * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack); - * @return end of the elementStartPart(end of elementEndPart for selfClosed el) - */ -function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){ - var attrName; - var value; - var p = ++start; - var s = S_TAG;//status - while(true){ - var c = source.charAt(p); - switch(c){ - case '=': - if(s === S_ATTR){//attrName - attrName = source.slice(start,p); - s = S_EQ; - }else if(s === S_ATTR_SPACE){ - s = S_EQ; - }else{ - //fatalError: equal must after attrName or space after attrName - throw new Error('attribute equal must after attrName'); - } - break; - case '\'': - case '"': - if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE - ){//equal - if(s === S_ATTR){ - errorHandler.warning('attribute value must after "="'); - attrName = source.slice(start,p); - } - start = p+1; - p = source.indexOf(c,start); - if(p>0){ - value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); - el.add(attrName,value,start-1); - s = S_ATTR_END; - }else{ - //fatalError: no end quot match - throw new Error('attribute value no end \''+c+'\' match'); - } - }else if(s == S_ATTR_NOQUOT_VALUE){ - value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); - //console.log(attrName,value,start,p) - el.add(attrName,value,start); - //console.dir(el) - errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); - start = p+1; - s = S_ATTR_END; - }else{ - //fatalError: no equal before - throw new Error('attribute value must after "="'); - } - break; - case '/': - switch(s){ - case S_TAG: - el.setTagName(source.slice(start,p)); - case S_ATTR_END: - case S_TAG_SPACE: - case S_TAG_CLOSE: - s =S_TAG_CLOSE; - el.closed = true; - case S_ATTR_NOQUOT_VALUE: - case S_ATTR: - case S_ATTR_SPACE: - break; - //case S_EQ: - default: - throw new Error("attribute invalid close char('/')") - } - break; - case ''://end document - //throw new Error('unexpected end of input') - errorHandler.error('unexpected end of input'); - if(s == S_TAG){ - el.setTagName(source.slice(start,p)); - } - return p; - case '>': - switch(s){ - case S_TAG: - el.setTagName(source.slice(start,p)); - case S_ATTR_END: - case S_TAG_SPACE: - case S_TAG_CLOSE: - break;//normal - case S_ATTR_NOQUOT_VALUE://Compatible state - case S_ATTR: - value = source.slice(start,p); - if(value.slice(-1) === '/'){ - el.closed = true; - value = value.slice(0,-1); - } - case S_ATTR_SPACE: - if(s === S_ATTR_SPACE){ - value = attrName; - } - if(s == S_ATTR_NOQUOT_VALUE){ - errorHandler.warning('attribute "'+value+'" missed quot(")!!'); - el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start); - }else{ - if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){ - errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!'); - } - el.add(value,value,start); - } - break; - case S_EQ: - throw new Error('attribute value missed!!'); - } -// console.log(tagName,tagNamePattern,tagNamePattern.test(tagName)) - return p; - /*xml space '\x20' | #x9 | #xD | #xA; */ - case '\u0080': - c = ' '; - default: - if(c<= ' '){//space - switch(s){ - case S_TAG: - el.setTagName(source.slice(start,p));//tagName - s = S_TAG_SPACE; - break; - case S_ATTR: - attrName = source.slice(start,p); - s = S_ATTR_SPACE; - break; - case S_ATTR_NOQUOT_VALUE: - var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); - errorHandler.warning('attribute "'+value+'" missed quot(")!!'); - el.add(attrName,value,start); - case S_ATTR_END: - s = S_TAG_SPACE; - break; - //case S_TAG_SPACE: - //case S_EQ: - //case S_ATTR_SPACE: - // void();break; - //case S_TAG_CLOSE: - //ignore warning - } - }else{//not space -//S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE -//S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE - switch(s){ - //case S_TAG:void();break; - //case S_ATTR:void();break; - //case S_ATTR_NOQUOT_VALUE:void();break; - case S_ATTR_SPACE: - var tagName = el.tagName; - if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){ - errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!'); - } - el.add(attrName,attrName,start); - start = p; - s = S_ATTR; - break; - case S_ATTR_END: - errorHandler.warning('attribute space is required"'+attrName+'"!!'); - case S_TAG_SPACE: - s = S_ATTR; - start = p; - break; - case S_EQ: - s = S_ATTR_NOQUOT_VALUE; - start = p; - break; - case S_TAG_CLOSE: - throw new Error("elements closed character '/' and '>' must be connected to"); - } - } - }//end outer switch - //console.log('p++',p) - p++; - } -} -/** - * @return true if has new namespace define - */ -function appendElement(el,domBuilder,currentNSMap){ - var tagName = el.tagName; - var localNSMap = null; - //var currentNSMap = parseStack[parseStack.length-1].currentNSMap; - var i = el.length; - while(i--){ - var a = el[i]; - var qName = a.qName; - var value = a.value; - var nsp = qName.indexOf(':'); - if(nsp>0){ - var prefix = a.prefix = qName.slice(0,nsp); - var localName = qName.slice(nsp+1); - var nsPrefix = prefix === 'xmlns' && localName; - }else{ - localName = qName; - prefix = null; - nsPrefix = qName === 'xmlns' && ''; - } - //can not set prefix,because prefix !== '' - a.localName = localName ; - //prefix == null for no ns prefix attribute - if(nsPrefix !== false){//hack!! - if(localNSMap == null){ - localNSMap = {}; - //console.log(currentNSMap,0) - _copy(currentNSMap,currentNSMap={}); - //console.log(currentNSMap,1) - } - currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; - a.uri = 'http://www.w3.org/2000/xmlns/'; - domBuilder.startPrefixMapping(nsPrefix, value); - } - } - var i = el.length; - while(i--){ - a = el[i]; - var prefix = a.prefix; - if(prefix){//no prefix attribute has no namespace - if(prefix === 'xml'){ - a.uri = 'http://www.w3.org/XML/1998/namespace'; - }if(prefix !== 'xmlns'){ - a.uri = currentNSMap[prefix || '']; - - //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)} - } - } - } - var nsp = tagName.indexOf(':'); - if(nsp>0){ - prefix = el.prefix = tagName.slice(0,nsp); - localName = el.localName = tagName.slice(nsp+1); - }else{ - prefix = null;//important!! - localName = el.localName = tagName; - } - //no prefix element has default namespace - var ns = el.uri = currentNSMap[prefix || '']; - domBuilder.startElement(ns,localName,tagName,el); - //endPrefixMapping and startPrefixMapping have not any help for dom builder - //localNSMap = null - if(el.closed){ - domBuilder.endElement(ns,localName,tagName); - if(localNSMap){ - for(prefix in localNSMap){ - domBuilder.endPrefixMapping(prefix); - } - } - }else{ - el.currentNSMap = currentNSMap; - el.localNSMap = localNSMap; - //parseStack.push(el); - return true; - } -} -function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ - if(/^(?:script|textarea)$/i.test(tagName)){ - var elEndStart = source.indexOf('',elStartEnd); - var text = source.substring(elStartEnd+1,elEndStart); - if(/[&<]/.test(text)){ - if(/^script$/i.test(tagName)){ - //if(!/\]\]>/.test(text)){ - //lexHandler.startCDATA(); - domBuilder.characters(text,0,text.length); - //lexHandler.endCDATA(); - return elEndStart; - //} - }//}else{//text area - text = text.replace(/&#?\w+;/g,entityReplacer); - domBuilder.characters(text,0,text.length); - return elEndStart; - //} - - } - } - return elStartEnd+1; -} -function fixSelfClosed(source,elStartEnd,tagName,closeMap){ - //if(tagName in closeMap){ - var pos = closeMap[tagName]; - if(pos == null){ - //console.log(tagName) - pos = source.lastIndexOf(''); - if(pos',start+4); - //append comment source.substring(4,end)//"); - case DOCUMENT_TYPE_NODE: - var pubid = node.publicId; - var sysid = node.systemId; - buf.push(''); - }else if(sysid && sysid!='.'){ - buf.push(' SYSTEM "',sysid,'">'); - }else{ - var sub = node.internalSubset; - if(sub){ - buf.push(" [",sub,"]"); - } - buf.push(">"); - } - return; - case PROCESSING_INSTRUCTION_NODE: - return buf.push( ""); - case ENTITY_REFERENCE_NODE: - return buf.push( '&',node.nodeName,';'); - //case ENTITY_NODE: - //case NOTATION_NODE: - default: - buf.push('??',node.nodeName); - } -} -function importNode(doc,node,deep){ - var node2; - switch (node.nodeType) { - case ELEMENT_NODE: - node2 = node.cloneNode(false); - node2.ownerDocument = doc; - //var attrs = node2.attributes; - //var len = attrs.length; - //for(var i=0;i','amp':'&','quot':'"','apos':"'"}; - if(locator){ - domBuilder.setDocumentLocator(locator); - } - - sax$$1.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); - sax$$1.domBuilder = options.domBuilder || domBuilder; - if(/\/x?html?$/.test(mimeType)){ - entityMap.nbsp = '\xa0'; - entityMap.copy = '\xa9'; - defaultNSMap['']= 'http://www.w3.org/1999/xhtml'; - } - defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace'; - if(source){ - sax$$1.parse(source,defaultNSMap,entityMap); - }else{ - sax$$1.errorHandler.error("invalid doc source"); - } - return domBuilder.doc; -}; -function buildErrorHandler(errorImpl,domBuilder,locator){ - if(!errorImpl){ - if(domBuilder instanceof DOMHandler){ - return domBuilder; - } - errorImpl = domBuilder ; - } - var errorHandler = {}; - var isCallback = errorImpl instanceof Function; - locator = locator||{}; - function build(key){ - var fn = errorImpl[key]; - if(!fn && isCallback){ - fn = errorImpl.length == 2?function(msg){errorImpl(key,msg);}:errorImpl; - } - errorHandler[key] = fn && function(msg){ - fn('[xmldom '+key+']\t'+msg+_locator(locator)); - }||function(){}; - } - build('warning'); - build('error'); - build('fatalError'); - return errorHandler; -} - -//console.log('#\n\n\n\n\n\n\n####') -/** - * +ContentHandler+ErrorHandler - * +LexicalHandler+EntityResolver2 - * -DeclHandler-DTDHandler - * - * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler - * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2 - * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html - */ -function DOMHandler() { - this.cdata = false; -} -function position(locator,node){ - node.lineNumber = locator.lineNumber; - node.columnNumber = locator.columnNumber; -} -/** - * @see org.xml.sax.ContentHandler#startDocument - * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html - */ -DOMHandler.prototype = { - startDocument : function() { - this.doc = new DOMImplementation().createDocument(null, null, null); - if (this.locator) { - this.doc.documentURI = this.locator.systemId; - } - }, - startElement:function(namespaceURI, localName, qName, attrs) { - var doc = this.doc; - var el = doc.createElementNS(namespaceURI, qName||localName); - var len = attrs.length; - appendElement(this, el); - this.currentElement = el; - - this.locator && position(this.locator,el); - for (var i = 0 ; i < len; i++) { - var namespaceURI = attrs.getURI(i); - var value = attrs.getValue(i); - var qName = attrs.getQName(i); - var attr = doc.createAttributeNS(namespaceURI, qName); - this.locator &&position(attrs.getLocator(i),attr); - attr.value = attr.nodeValue = value; - el.setAttributeNode(attr); - } - }, - endElement:function(namespaceURI, localName, qName) { - var current = this.currentElement; - var tagName = current.tagName; - this.currentElement = current.parentNode; - }, - startPrefixMapping:function(prefix, uri) { - }, - endPrefixMapping:function(prefix) { - }, - processingInstruction:function(target, data) { - var ins = this.doc.createProcessingInstruction(target, data); - this.locator && position(this.locator,ins); - appendElement(this, ins); - }, - ignorableWhitespace:function(ch, start, length) { - }, - characters:function(chars, start, length) { - chars = _toString.apply(this,arguments); - //console.log(chars) - if(chars){ - if (this.cdata) { - var charNode = this.doc.createCDATASection(chars); - } else { - var charNode = this.doc.createTextNode(chars); - } - if(this.currentElement){ - this.currentElement.appendChild(charNode); - }else if(/^\s*$/.test(chars)){ - this.doc.appendChild(charNode); - //process xml - } - this.locator && position(this.locator,charNode); - } - }, - skippedEntity:function(name) { - }, - endDocument:function() { - this.doc.normalize(); - }, - setDocumentLocator:function (locator) { - if(this.locator = locator){// && !('lineNumber' in locator)){ - locator.lineNumber = 0; - } - }, - //LexicalHandler - comment:function(chars, start, length) { - chars = _toString.apply(this,arguments); - var comm = this.doc.createComment(chars); - this.locator && position(this.locator,comm); - appendElement(this, comm); - }, - - startCDATA:function() { - //used in characters() methods - this.cdata = true; - }, - endCDATA:function() { - this.cdata = false; - }, - - startDTD:function(name, publicId, systemId) { - var impl = this.doc.implementation; - if (impl && impl.createDocumentType) { - var dt = impl.createDocumentType(name, publicId, systemId); - this.locator && position(this.locator,dt); - appendElement(this, dt); - } - }, - /** - * @see org.xml.sax.ErrorHandler - * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html - */ - warning:function(error) { - console.warn('[xmldom warning]\t'+error,_locator(this.locator)); - }, - error:function(error) { - console.error('[xmldom error]\t'+error,_locator(this.locator)); - }, - fatalError:function(error) { - console.error('[xmldom fatalError]\t'+error,_locator(this.locator)); - throw error; - } -}; -function _locator(l){ - if(l){ - return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' - } -} -function _toString(chars,start,length){ - if(typeof chars == 'string'){ - return chars.substr(start,length) - }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)") - if(chars.length >= start+length || start){ - return new java.lang.String(chars,start,length)+''; - } - return chars; - } -} - -/* - * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html - * used method of org.xml.sax.ext.LexicalHandler: - * #comment(chars, start, length) - * #startCDATA() - * #endCDATA() - * #startDTD(name, publicId, systemId) - * - * - * IGNORED method of org.xml.sax.ext.LexicalHandler: - * #endDTD() - * #startEntity(name) - * #endEntity(name) - * - * - * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html - * IGNORED method of org.xml.sax.ext.DeclHandler - * #attributeDecl(eName, aName, type, mode, value) - * #elementDecl(name, model) - * #externalEntityDecl(name, publicId, systemId) - * #internalEntityDecl(name, value) - * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html - * IGNORED method of org.xml.sax.EntityResolver2 - * #resolveEntity(String name,String publicId,String baseURI,String systemId) - * #resolveEntity(publicId, systemId) - * #getExternalSubset(name, baseURI) - * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html - * IGNORED method of org.xml.sax.DTDHandler - * #notationDecl(name, publicId, systemId) {}; - * #unparsedEntityDecl(name, publicId, systemId, notationName) {}; - */ -"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ - DOMHandler.prototype[key] = function(){return null}; -}); - -/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */ -function appendElement (hander,node) { - if (!hander.currentElement) { - hander.doc.appendChild(node); - } else { - hander.currentElement.appendChild(node); - } -}//appendChild and setAttributeNS are preformance key - -//if(typeof require == 'function'){ - var XMLReader = sax.XMLReader; - var DOMImplementation = exports.DOMImplementation = dom.DOMImplementation; - exports.XMLSerializer = dom.XMLSerializer ; - exports.DOMParser = DOMParser; -//} -}); -var domParser_1 = domParser.DOMImplementation; -var domParser_2 = domParser.XMLSerializer; -var domParser_3 = domParser.DOMParser; - -var togeojson = createCommonjsModule(function (module, exports) { -var toGeoJSON = (function() { - - var removeSpace = /\s*/g, - trimSpace = /^\s*|\s*$/g, - splitSpace = /\s+/; - // generate a short, numeric hash of a string - function okhash(x) { - if (!x || !x.length) return 0; - for (var i = 0, h = 0; i < x.length; i++) { - h = ((h << 5) - h) + x.charCodeAt(i) | 0; - } return h; - } - // all Y children of X - function get(x, y) { return x.getElementsByTagName(y); } - function attr(x, y) { return x.getAttribute(y); } - function attrf(x, y) { return parseFloat(attr(x, y)); } - // one Y child of X, if any, otherwise null - function get1(x, y) { var n = get(x, y); return n.length ? n[0] : null; } - // https://developer.mozilla.org/en-US/docs/Web/API/Node.normalize - function norm(el) { if (el.normalize) { el.normalize(); } return el; } - // cast array x into numbers - function numarray(x) { - for (var j = 0, o = []; j < x.length; j++) { o[j] = parseFloat(x[j]); } - return o; - } - // get the content of a text node, if any - function nodeVal(x) { - if (x) { norm(x); } - return (x && x.textContent) || ''; - } - // get the contents of multiple text nodes, if present - function getMulti(x, ys) { - var o = {}, n, k; - for (k = 0; k < ys.length; k++) { - n = get1(x, ys[k]); - if (n) o[ys[k]] = nodeVal(n); - } - return o; - } - // add properties of Y to X, overwriting if present in both - function extend(x, y) { for (var k in y) x[k] = y[k]; } - // get one coordinate from a coordinate array, if any - function coord1(v) { return numarray(v.replace(removeSpace, '').split(',')); } - // get all coordinates from a coordinate array as [[],[]] - function coord(v) { - var coords = v.replace(trimSpace, '').split(splitSpace), - o = []; - for (var i = 0; i < coords.length; i++) { - o.push(coord1(coords[i])); - } - return o; - } - function coordPair(x) { - var ll = [attrf(x, 'lon'), attrf(x, 'lat')], - ele = get1(x, 'ele'), - // handle namespaced attribute in browser - heartRate = get1(x, 'gpxtpx:hr') || get1(x, 'hr'), - time = get1(x, 'time'), - e; - if (ele) { - e = parseFloat(nodeVal(ele)); - if (!isNaN(e)) { - ll.push(e); - } - } - return { - coordinates: ll, - time: time ? nodeVal(time) : null, - heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null - }; - } + // touch targets + selection.selectAll('.layer-areas .layer-areas-targets') + .call(drawTargets, graph, data.stroke, filter); + } - // create a new feature collection parent object - function fc() { - return { - type: 'FeatureCollection', - features: [] - }; - } + return drawAreas; + } - var serializer; - if (typeof XMLSerializer !== 'undefined') { - /* istanbul ignore next */ - serializer = new XMLSerializer(); - // only require xmldom in a node environment - } else if ('object' === 'object' && typeof process === 'object' && !process.browser) { - serializer = new (domParser.XMLSerializer)(); - } - function xml2str(str) { - // IE9 will create a new XMLSerializer but it'll crash immediately. - // This line is ignored because we don't run coverage tests in IE9 - /* istanbul ignore next */ - if (str.xml !== undefined) return str.xml; - return serializer.serializeToString(str); - } - - var t = { - kml: function(doc) { - - var gj = fc(), - // styleindex keeps track of hashed styles in order to match features - styleIndex = {}, styleByHash = {}, - // stylemapindex keeps track of style maps to expose in properties - styleMapIndex = {}, - // atomic geospatial types supported by KML - MultiGeometry is - // handled separately - geotypes = ['Polygon', 'LineString', 'Point', 'Track', 'gx:Track'], - // all root placemarks in the file - placemarks = get(doc, 'Placemark'), - styles = get(doc, 'Style'), - styleMaps = get(doc, 'StyleMap'); - - for (var k = 0; k < styles.length; k++) { - var hash = okhash(xml2str(styles[k])).toString(16); - styleIndex['#' + attr(styles[k], 'id')] = hash; - styleByHash[hash] = styles[k]; - } - for (var l = 0; l < styleMaps.length; l++) { - styleIndex['#' + attr(styleMaps[l], 'id')] = okhash(xml2str(styleMaps[l])).toString(16); - var pairs = get(styleMaps[l], 'Pair'); - var pairsMap = {}; - for (var m = 0; m < pairs.length; m++) { - pairsMap[nodeVal(get1(pairs[m], 'key'))] = nodeVal(get1(pairs[m], 'styleUrl')); - } - styleMapIndex['#' + attr(styleMaps[l], 'id')] = pairsMap; + function svgDebug$$1(projection, context) { - } - for (var j = 0; j < placemarks.length; j++) { - gj.features = gj.features.concat(getPlacemark(placemarks[j])); - } - function kmlColor(v) { - var color, opacity; - v = v || ''; - if (v.substr(0, 1) === '#') { v = v.substr(1); } - if (v.length === 6 || v.length === 3) { color = v; } - if (v.length === 8) { - opacity = parseInt(v.substr(0, 2), 16) / 255; - color = '#' + v.substr(6, 2) + - v.substr(4, 2) + - v.substr(2, 2); - } - return [color, isNaN(opacity) ? undefined : opacity]; - } - function gxCoord(v) { return numarray(v.split(' ')); } - function gxCoords(root) { - var elems = get(root, 'coord', 'gx'), coords = [], times = []; - if (elems.length === 0) elems = get(root, 'gx:coord'); - for (var i = 0; i < elems.length; i++) coords.push(gxCoord(nodeVal(elems[i]))); - var timeElems = get(root, 'when'); - for (var j = 0; j < timeElems.length; j++) times.push(nodeVal(timeElems[j])); - return { - coords: coords, - times: times - }; - } - function getGeometry(root) { - var geomNode, geomNodes, i, j, k, geoms = [], coordTimes = []; - if (get1(root, 'MultiGeometry')) { return getGeometry(get1(root, 'MultiGeometry')); } - if (get1(root, 'MultiTrack')) { return getGeometry(get1(root, 'MultiTrack')); } - if (get1(root, 'gx:MultiTrack')) { return getGeometry(get1(root, 'gx:MultiTrack')); } - for (i = 0; i < geotypes.length; i++) { - geomNodes = get(root, geotypes[i]); - if (geomNodes) { - for (j = 0; j < geomNodes.length; j++) { - geomNode = geomNodes[j]; - if (geotypes[i] === 'Point') { - geoms.push({ - type: 'Point', - coordinates: coord1(nodeVal(get1(geomNode, 'coordinates'))) - }); - } else if (geotypes[i] === 'LineString') { - geoms.push({ - type: 'LineString', - coordinates: coord(nodeVal(get1(geomNode, 'coordinates'))) - }); - } else if (geotypes[i] === 'Polygon') { - var rings = get(geomNode, 'LinearRing'), - coords = []; - for (k = 0; k < rings.length; k++) { - coords.push(coord(nodeVal(get1(rings[k], 'coordinates')))); - } - geoms.push({ - type: 'Polygon', - coordinates: coords - }); - } else if (geotypes[i] === 'Track' || - geotypes[i] === 'gx:Track') { - var track = gxCoords(geomNode); - geoms.push({ - type: 'LineString', - coordinates: track.coords - }); - if (track.times.length) coordTimes.push(track.times); - } - } - } - } - return { - geoms: geoms, - coordTimes: coordTimes - }; - } - function getPlacemark(root) { - var geomsAndTimes = getGeometry(root), i, properties = {}, - name = nodeVal(get1(root, 'name')), - address = nodeVal(get1(root, 'address')), - styleUrl = nodeVal(get1(root, 'styleUrl')), - description = nodeVal(get1(root, 'description')), - timeSpan = get1(root, 'TimeSpan'), - timeStamp = get1(root, 'TimeStamp'), - extendedData = get1(root, 'ExtendedData'), - lineStyle = get1(root, 'LineStyle'), - polyStyle = get1(root, 'PolyStyle'), - visibility = get1(root, 'visibility'); - - if (!geomsAndTimes.geoms.length) return []; - if (name) properties.name = name; - if (address) properties.address = address; - if (styleUrl) { - if (styleUrl[0] !== '#') { - styleUrl = '#' + styleUrl; - } - - properties.styleUrl = styleUrl; - if (styleIndex[styleUrl]) { - properties.styleHash = styleIndex[styleUrl]; - } - if (styleMapIndex[styleUrl]) { - properties.styleMapHash = styleMapIndex[styleUrl]; - properties.styleHash = styleIndex[styleMapIndex[styleUrl].normal]; - } - // Try to populate the lineStyle or polyStyle since we got the style hash - var style = styleByHash[properties.styleHash]; - if (style) { - if (!lineStyle) lineStyle = get1(style, 'LineStyle'); - if (!polyStyle) polyStyle = get1(style, 'PolyStyle'); - } - } - if (description) properties.description = description; - if (timeSpan) { - var begin = nodeVal(get1(timeSpan, 'begin')); - var end = nodeVal(get1(timeSpan, 'end')); - properties.timespan = { begin: begin, end: end }; - } - if (timeStamp) { - properties.timestamp = nodeVal(get1(timeStamp, 'when')); - } - if (lineStyle) { - var linestyles = kmlColor(nodeVal(get1(lineStyle, 'color'))), - color = linestyles[0], - opacity = linestyles[1], - width = parseFloat(nodeVal(get1(lineStyle, 'width'))); - if (color) properties.stroke = color; - if (!isNaN(opacity)) properties['stroke-opacity'] = opacity; - if (!isNaN(width)) properties['stroke-width'] = width; - } - if (polyStyle) { - var polystyles = kmlColor(nodeVal(get1(polyStyle, 'color'))), - pcolor = polystyles[0], - popacity = polystyles[1], - fill = nodeVal(get1(polyStyle, 'fill')), - outline = nodeVal(get1(polyStyle, 'outline')); - if (pcolor) properties.fill = pcolor; - if (!isNaN(popacity)) properties['fill-opacity'] = popacity; - if (fill) properties['fill-opacity'] = fill === '1' ? properties['fill-opacity'] || 1 : 0; - if (outline) properties['stroke-opacity'] = outline === '1' ? properties['stroke-opacity'] || 1 : 0; - } - if (extendedData) { - var datas = get(extendedData, 'Data'), - simpleDatas = get(extendedData, 'SimpleData'); - - for (i = 0; i < datas.length; i++) { - properties[datas[i].getAttribute('name')] = nodeVal(get1(datas[i], 'value')); - } - for (i = 0; i < simpleDatas.length; i++) { - properties[simpleDatas[i].getAttribute('name')] = nodeVal(simpleDatas[i]); - } - } - if (visibility) { - properties.visibility = nodeVal(visibility); - } - if (geomsAndTimes.coordTimes.length) { - properties.coordTimes = (geomsAndTimes.coordTimes.length === 1) ? - geomsAndTimes.coordTimes[0] : geomsAndTimes.coordTimes; - } - var feature = { - type: 'Feature', - geometry: (geomsAndTimes.geoms.length === 1) ? geomsAndTimes.geoms[0] : { - type: 'GeometryCollection', - geometries: geomsAndTimes.geoms - }, - properties: properties - }; - if (attr(root, 'id')) feature.id = attr(root, 'id'); - return [feature]; - } - return gj; - }, - gpx: function(doc) { - var i, - tracks = get(doc, 'trk'), - routes = get(doc, 'rte'), - waypoints = get(doc, 'wpt'), - // a feature collection - gj = fc(), - feature; - for (i = 0; i < tracks.length; i++) { - feature = getTrack(tracks[i]); - if (feature) gj.features.push(feature); - } - for (i = 0; i < routes.length; i++) { - feature = getRoute(routes[i]); - if (feature) gj.features.push(feature); - } - for (i = 0; i < waypoints.length; i++) { - gj.features.push(getPoint(waypoints[i])); - } - function getPoints(node, pointname) { - var pts = get(node, pointname), - line = [], - times = [], - heartRates = [], - l = pts.length; - if (l < 2) return {}; // Invalid line in GeoJSON - for (var i = 0; i < l; i++) { - var c = coordPair(pts[i]); - line.push(c.coordinates); - if (c.time) times.push(c.time); - if (c.heartRate) heartRates.push(c.heartRate); - } - return { - line: line, - times: times, - heartRates: heartRates - }; - } - function getTrack(node) { - var segments = get(node, 'trkseg'), - track = [], - times = [], - heartRates = [], - line; - for (var i = 0; i < segments.length; i++) { - line = getPoints(segments[i], 'trkpt'); - if (line) { - if (line.line) track.push(line.line); - if (line.times && line.times.length) times.push(line.times); - if (line.heartRates && line.heartRates.length) heartRates.push(line.heartRates); - } - } - if (track.length === 0) return; - var properties = getProperties(node); - extend(properties, getLineStyle(get1(node, 'extensions'))); - if (times.length) properties.coordTimes = track.length === 1 ? times[0] : times; - if (heartRates.length) properties.heartRates = track.length === 1 ? heartRates[0] : heartRates; - return { - type: 'Feature', - properties: properties, - geometry: { - type: track.length === 1 ? 'LineString' : 'MultiLineString', - coordinates: track.length === 1 ? track[0] : track - } - }; - } - function getRoute(node) { - var line = getPoints(node, 'rtept'); - if (!line.line) return; - var prop = getProperties(node); - extend(prop, getLineStyle(get1(node, 'extensions'))); - var routeObj = { - type: 'Feature', - properties: prop, - geometry: { - type: 'LineString', - coordinates: line.line - } - }; - return routeObj; - } - function getPoint(node) { - var prop = getProperties(node); - extend(prop, getMulti(node, ['sym'])); - return { - type: 'Feature', - properties: prop, - geometry: { - type: 'Point', - coordinates: coordPair(node).coordinates - } - }; - } - function getLineStyle(extensions) { - var style = {}; - if (extensions) { - var lineStyle = get1(extensions, 'line'); - if (lineStyle) { - var color = nodeVal(get1(lineStyle, 'color')), - opacity = parseFloat(nodeVal(get1(lineStyle, 'opacity'))), - width = parseFloat(nodeVal(get1(lineStyle, 'width'))); - if (color) style.stroke = color; - if (!isNaN(opacity)) style['stroke-opacity'] = opacity; - // GPX width is in mm, convert to px with 96 px per inch - if (!isNaN(width)) style['stroke-width'] = width * 96 / 25.4; - } - } - return style; - } - function getProperties(node) { - var prop = getMulti(node, ['name', 'cmt', 'desc', 'type', 'time', 'keywords']), - links = get(node, 'link'); - if (links.length) prop.links = []; - for (var i = 0, link; i < links.length; i++) { - link = { href: attr(links[i], 'href') }; - extend(link, getMulti(links[i], ['text', 'type'])); - prop.links.push(link); - } - return prop; - } - return gj; - } - }; - return t; -})(); + function multipolygons(imagery) { + return imagery.map(function(data$$1) { + return { + type: 'MultiPolygon', + coordinates: [ data$$1.polygon ] + }; + }); + } -module.exports = toGeoJSON; -}); + function drawDebug(selection$$1) { + var showsTile = context.getDebug('tile'); + var showsCollision = context.getDebug('collision'); + var showsImagery = context.getDebug('imagery'); + var showsCommunity = context.getDebug('community'); + var showsImperial = context.getDebug('imperial'); + var showsDriveLeft = context.getDebug('driveLeft'); + var showsTouchTargets = context.getDebug('target'); + + var debugData = []; + if (showsTile) { + debugData.push({ class: 'red', label: 'tile' }); + } + if (showsCollision) { + debugData.push({ class: 'yellow', label: 'collision' }); + } + if (showsImagery) { + debugData.push({ class: 'orange', label: 'imagery' }); + } + if (showsCommunity) { + debugData.push({ class: 'blue', label: 'community' }); + } + if (showsImperial) { + debugData.push({ class: 'cyan', label: 'imperial' }); + } + if (showsDriveLeft) { + debugData.push({ class: 'green', label: 'driveLeft' }); + } + if (showsTouchTargets) { + debugData.push({ class: 'pink', label: 'touchTargets' }); + } -var _initialized = false; -var _enabled = false; -var _geojson; + var legend = select('#content') + .selectAll('.debug-legend') + .data(debugData.length ? [0] : []); -function svgGpx$$1(projection$$1, context, dispatch) { - var _showLabels = true; - var detected = utilDetect(); - var layer; - var _src; + legend.exit() + .remove(); + legend = legend.enter() + .append('div') + .attr('class', 'fillD debug-legend') + .merge(legend); - function init() { - if (_initialized) return; // run once - _geojson = {}; - _enabled = true; + var legendItems = legend.selectAll('.debug-legend-item') + .data(debugData, function(d) { return d.label; }); - function over() { - event.stopPropagation(); - event.preventDefault(); - event.dataTransfer.dropEffect = 'copy'; - } + legendItems.exit() + .remove(); - d3_select('body') - .attr('dropzone', 'copy') - .on('drop.localgpx', function() { - event.stopPropagation(); - event.preventDefault(); - if (!detected.filedrop) return; - drawGpx.files(event.dataTransfer.files); - }) - .on('dragenter.localgpx', over) - .on('dragexit.localgpx', over) - .on('dragover.localgpx', over); + legendItems.enter() + .append('span') + .attr('class', function(d) { return 'debug-legend-item ' + d.class; }) + .text(function(d) { return d.label; }); - _initialized = true; - } + var layer = selection$$1.selectAll('.layer-debug') + .data(showsImagery || showsCommunity || showsImperial || showsDriveLeft ? [0] : []); - function drawGpx(selection$$1) { - var getPath = svgPath(projection$$1).geojson; + layer.exit() + .remove(); - layer = selection$$1.selectAll('.layer-gpx') - .data(_enabled ? [0] : []); + layer = layer.enter() + .append('g') + .attr('class', 'layer-debug') + .merge(layer); - layer.exit() - .remove(); - layer = layer.enter() - .append('g') - .attr('class', 'layer-gpx') - .merge(layer); + var extent = context.map().extent(); + var dataImagery = data.imagery || []; + var availableImagery = showsImagery && multipolygons(dataImagery.filter(function(source) { + if (!source.polygon) return false; + return source.polygon.some(function(polygon) { + return geoPolygonIntersectsPolygon(polygon, extent, true); + }); + })); + var imagery = layer.selectAll('path.debug-imagery') + .data(showsImagery ? availableImagery : []); - var paths = layer - .selectAll('path') - .data([_geojson]); + imagery.exit() + .remove(); - paths.exit() - .remove(); + imagery.enter() + .append('path') + .attr('class', 'debug-imagery debug orange'); - paths = paths.enter() - .append('path') - .attr('class', 'gpx') - .merge(paths); - paths - .attr('d', getPath); + var community = layer.selectAll('path.debug-community') + .data(showsCommunity ? values$1(data.community.features) : []); + community.exit() + .remove(); - var labelData = _showLabels && _geojson.features ? _geojson.features : []; - labelData = labelData.filter(getPath); + community.enter() + .append('path') + .attr('class', 'debug-community debug blue'); - layer - .call(drawLabels, 'gpxlabel-halo', labelData) - .call(drawLabels, 'gpxlabel', labelData); + var imperial = layer + .selectAll('path.debug-imperial') + .data(showsImperial ? [dataImperial] : []); - function drawLabels(selection$$1, textClass, data) { - var labels = selection$$1.selectAll('text.' + textClass) - .data(data); + imperial.exit() + .remove(); - // exit - labels.exit() - .remove(); + imperial.enter() + .append('path') + .attr('class', 'debug-imperial debug cyan'); - // enter/update - labels = labels.enter() - .append('text') - .attr('class', textClass) - .merge(labels) - .text(function(d) { - if (d.properties) { - return d.properties.desc || d.properties.name; - } - return null; - }) - .attr('x', function(d) { - var centroid = getPath.centroid(d); - return centroid[0] + 11; - }) - .attr('y', function(d) { - var centroid = getPath.centroid(d); - return centroid[1]; - }); - } - } + var driveLeft = layer + .selectAll('path.debug-drive-left') + .data(showsDriveLeft ? [dataDriveLeft] : []); - function toDom(x) { - return (new DOMParser()).parseFromString(x, 'text/xml'); - } + driveLeft.exit() + .remove(); + driveLeft.enter() + .append('path') + .attr('class', 'debug-drive-left debug green'); - function getExtension(fileName) { - if (isUndefined(fileName)) { - return ''; - } - var lastDotIndex = fileName.lastIndexOf('.'); - if (lastDotIndex < 0) { - return ''; - } + // update + layer.selectAll('path') + .attr('d', svgPath(projection).geojson); + } - return fileName.substr(lastDotIndex); - } + + // This looks strange because `enabled` methods on other layers are + // chainable getter/setters, and this one is just a getter. + drawDebug.enabled = function() { + if (!arguments.length) { + return context.getDebug('tile') || + context.getDebug('collision') || + context.getDebug('imagery') || + context.getDebug('imperial') || + context.getDebug('driveLeft') || + context.getDebug('target'); + } else { + return this; + } + }; - function parseSaveAndZoom(extension, data) { - switch (extension) { - default: - drawGpx.geojson(togeojson.gpx(toDom(data))).fitZoom(); - break; - case '.kml': - drawGpx.geojson(togeojson.kml(toDom(data))).fitZoom(); - break; - case '.geojson': - case '.json': - drawGpx.geojson(JSON.parse(data)).fitZoom(); - break; - } - } + return drawDebug; + } + /* + A standalone SVG element that contains only a `defs` sub-element. To be + used once globally, since defs IDs must be unique within a document. + */ + function svgDefs(context) { - drawGpx.showLabels = function(_) { - if (!arguments.length) return _showLabels; - _showLabels = _; - return this; - }; + function SVGSpriteDefinition(id, href) { + return function(defs) { + request(href) + .mimeType('image/svg+xml') + .response(function(xhr) { return xhr.responseXML; }) + .get(function(err, svg) { + if (err) return; + defs.node().appendChild( + select(svg.documentElement).attr('id', id).node() + ); + }); + }; + } - drawGpx.enabled = function(_) { - if (!arguments.length) return _enabled; - _enabled = _; - dispatch.call('change'); - return this; - }; + return function drawDefs(selection$$1) { + var defs = selection$$1.append('defs'); + + // markers + defs + .append('marker') + .attr('id', 'oneway-marker') + .attr('viewBox', '0 0 10 5') + .attr('refX', 2.5) + .attr('refY', 2.5) + .attr('markerWidth', 2) + .attr('markerHeight', 2) + .attr('markerUnits', 'strokeWidth') + .attr('orient', 'auto') + .append('path') + .attr('class', 'oneway-marker-path') + .attr('d', 'M 5,3 L 0,3 L 0,2 L 5,2 L 5,0 L 10,2.5 L 5,5 z') + .attr('stroke', 'none') + .attr('fill', '#000') + .attr('opacity', '0.75'); + + defs + .append('marker') + .attr('id', 'viewfield-marker') + .attr('viewBox', '0 0 16 16') + .attr('refX', 8) + .attr('refY', 16) + .attr('markerWidth', 4) + .attr('markerHeight', 4) + .attr('markerUnits', 'strokeWidth') + .attr('orient', 'auto') + .append('path') + .attr('class', 'viewfield-marker-path') + .attr('d', 'M 6,14 C 8,13.4 8,13.4 10,14 L 16,3 C 12,0 4,0 0,3 z') + .attr('fill', '#333') + .attr('fill-opacity', '0.75') + .attr('stroke', '#fff') + .attr('stroke-width', '0.5px') + .attr('stroke-opacity', '0.75'); + + defs + .append('marker') + .attr('id', 'viewfield-marker-wireframe') + .attr('viewBox', '0 0 16 16') + .attr('refX', 8) + .attr('refY', 16) + .attr('markerWidth', 4) + .attr('markerHeight', 4) + .attr('markerUnits', 'strokeWidth') + .attr('orient', 'auto') + .append('path') + .attr('class', 'viewfield-marker-path') + .attr('d', 'M 6,14 C 8,13.4 8,13.4 10,14 L 16,3 C 12,0 4,0 0,3 z') + .attr('fill', 'none') + .attr('stroke', '#fff') + .attr('stroke-width', '0.5px') + .attr('stroke-opacity', '0.75'); + + // patterns + var patterns = defs.selectAll('pattern') + .data([ + // pattern name, pattern image name + ['wetland', 'wetland'], + ['construction', 'construction'], + ['cemetery', 'cemetery'], + ['orchard', 'orchard'], + ['farmland', 'farmland'], + ['beach', 'dots'], + ['scrub', 'dots'], + ['meadow', 'dots'] + ]) + .enter() + .append('pattern') + .attr('id', function (d) { return 'pattern-' + d[0]; }) + .attr('width', 32) + .attr('height', 32) + .attr('patternUnits', 'userSpaceOnUse'); + + patterns + .append('rect') + .attr('x', 0) + .attr('y', 0) + .attr('width', 32) + .attr('height', 32) + .attr('class', function (d) { return 'pattern-color-' + d[0]; }); + + patterns + .append('image') + .attr('x', 0) + .attr('y', 0) + .attr('width', 32) + .attr('height', 32) + .attr('xlink:href', function (d) { + return context.imagePath('pattern/' + d[1] + '.png'); + }); + + // clip paths + defs.selectAll('clipPath') + .data([12, 18, 20, 32, 45]) + .enter() + .append('clipPath') + .attr('id', function (d) { return 'clip-square-' + d; }) + .append('rect') + .attr('x', 0) + .attr('y', 0) + .attr('width', function (d) { return d; }) + .attr('height', function (d) { return d; }); + + // symbol spritesheets + defs + .call(SVGSpriteDefinition('iD-sprite', context.imagePath('iD-sprite.svg'))) + .call(SVGSpriteDefinition('maki-sprite', context.imagePath('maki-sprite.svg'))) + .call(SVGSpriteDefinition('community-sprite', context.imagePath('community-sprite.svg'))); + }; + } + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + //[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] + //[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] + //[5] Name ::= NameStartChar (NameChar)* + var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;//\u10000-\uEFFFF + var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"); + var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$'); + //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/ + //var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',') + + //S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE + //S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE + var S_TAG = 0;//tag name offerring + var S_ATTR = 1;//attr name offerring + var S_ATTR_SPACE=2;//attr name end and space offer + var S_EQ = 3;//=space? + var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only) + var S_ATTR_END = 5;//attr value end and no space(quot end) + var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer) + var S_TAG_CLOSE = 7;//closed el + + function XMLReader(){ + + } + + XMLReader.prototype = { + parse:function(source,defaultNSMap,entityMap){ + var domBuilder = this.domBuilder; + domBuilder.startDocument(); + _copy(defaultNSMap ,defaultNSMap = {}); + parse$1(source,defaultNSMap,entityMap, + domBuilder,this.errorHandler); + domBuilder.endDocument(); + } + }; + function parse$1(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){ + function fixedFromCharCode(code) { + // String.prototype.fromCharCode does not supports + // > 2 bytes unicode chars directly + if (code > 0xffff) { + code -= 0x10000; + var surrogate1 = 0xd800 + (code >> 10) + , surrogate2 = 0xdc00 + (code & 0x3ff); + + return String.fromCharCode(surrogate1, surrogate2); + } else { + return String.fromCharCode(code); + } + } + function entityReplacer(a){ + var k = a.slice(1,-1); + if(k in entityMap){ + return entityMap[k]; + }else if(k.charAt(0) === '#'){ + return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x'))) + }else{ + errorHandler.error('entity not found:'+a); + return a; + } + } + function appendText(end){//has some bugs + if(end>start){ + var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer); + locator&&position(start); + domBuilder.characters(xt,0,end-start); + start = end; + } + } + function position(p,m){ + while(p>=lineEnd && (m = linePattern.exec(source))){ + lineStart = m.index; + lineEnd = lineStart + m[0].length; + locator.lineNumber++; + //console.log('line++:',locator,startPos,endPos) + } + locator.columnNumber = p-lineStart+1; + } + var lineStart = 0; + var lineEnd = 0; + var linePattern = /.*(?:\r\n?|\n)|.*$/g; + var locator = domBuilder.locator; + + var parseStack = [{currentNSMap:defaultNSMapCopy}]; + var closeMap = {}; + var start = 0; + while(true){ + try{ + var tagStart = source.indexOf('<',start); + if(tagStart<0){ + if(!source.substr(start).match(/^\s*$/)){ + var doc = domBuilder.doc; + var text = doc.createTextNode(source.substr(start)); + doc.appendChild(text); + domBuilder.currentElement = text; + } + return; + } + if(tagStart>start){ + appendText(tagStart); + } + switch(source.charAt(tagStart+1)){ + case '/': + var end = source.indexOf('>',tagStart+3); + var tagName = source.substring(tagStart+2,end); + var config = parseStack.pop(); + if(end<0){ + + tagName = source.substring(tagStart+2).replace(/[\s<].*/,''); + //console.error('#@@@@@@'+tagName) + errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName); + end = tagStart+1+tagName.length; + }else if(tagName.match(/\s + locator&&position(tagStart); + end = parseInstruction(source,tagStart,domBuilder); + break; + case '!':// start){ + start = end; + }else{ + //TODO: 这里有可能sax回退,有位置错误风险 + appendText(Math.max(tagStart,start)+1); + } + } + } + function copyLocator(f,t){ + t.lineNumber = f.lineNumber; + t.columnNumber = f.columnNumber; + return t; + } - drawGpx.hasGpx = function() { - return (!(isEmpty(_geojson) || isEmpty(_geojson.features))); - }; + /** + * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack); + * @return end of the elementStartPart(end of elementEndPart for selfClosed el) + */ + function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){ + var attrName; + var value; + var p = ++start; + var s = S_TAG;//status + while(true){ + var c = source.charAt(p); + switch(c){ + case '=': + if(s === S_ATTR){//attrName + attrName = source.slice(start,p); + s = S_EQ; + }else if(s === S_ATTR_SPACE){ + s = S_EQ; + }else{ + //fatalError: equal must after attrName or space after attrName + throw new Error('attribute equal must after attrName'); + } + break; + case '\'': + case '"': + if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE + ){//equal + if(s === S_ATTR){ + errorHandler.warning('attribute value must after "="'); + attrName = source.slice(start,p); + } + start = p+1; + p = source.indexOf(c,start); + if(p>0){ + value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + el.add(attrName,value,start-1); + s = S_ATTR_END; + }else{ + //fatalError: no end quot match + throw new Error('attribute value no end \''+c+'\' match'); + } + }else if(s == S_ATTR_NOQUOT_VALUE){ + value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + //console.log(attrName,value,start,p) + el.add(attrName,value,start); + //console.dir(el) + errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!'); + start = p+1; + s = S_ATTR_END; + }else{ + //fatalError: no equal before + throw new Error('attribute value must after "="'); + } + break; + case '/': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_ATTR_END: + case S_TAG_SPACE: + case S_TAG_CLOSE: + s =S_TAG_CLOSE; + el.closed = true; + case S_ATTR_NOQUOT_VALUE: + case S_ATTR: + case S_ATTR_SPACE: + break; + //case S_EQ: + default: + throw new Error("attribute invalid close char('/')") + } + break; + case ''://end document + //throw new Error('unexpected end of input') + errorHandler.error('unexpected end of input'); + if(s == S_TAG){ + el.setTagName(source.slice(start,p)); + } + return p; + case '>': + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p)); + case S_ATTR_END: + case S_TAG_SPACE: + case S_TAG_CLOSE: + break;//normal + case S_ATTR_NOQUOT_VALUE://Compatible state + case S_ATTR: + value = source.slice(start,p); + if(value.slice(-1) === '/'){ + el.closed = true; + value = value.slice(0,-1); + } + case S_ATTR_SPACE: + if(s === S_ATTR_SPACE){ + value = attrName; + } + if(s == S_ATTR_NOQUOT_VALUE){ + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start); + }else{ + if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){ + errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!'); + } + el.add(value,value,start); + } + break; + case S_EQ: + throw new Error('attribute value missed!!'); + } + // console.log(tagName,tagNamePattern,tagNamePattern.test(tagName)) + return p; + /*xml space '\x20' | #x9 | #xD | #xA; */ + case '\u0080': + c = ' '; + default: + if(c<= ' '){//space + switch(s){ + case S_TAG: + el.setTagName(source.slice(start,p));//tagName + s = S_TAG_SPACE; + break; + case S_ATTR: + attrName = source.slice(start,p); + s = S_ATTR_SPACE; + break; + case S_ATTR_NOQUOT_VALUE: + var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer); + errorHandler.warning('attribute "'+value+'" missed quot(")!!'); + el.add(attrName,value,start); + case S_ATTR_END: + s = S_TAG_SPACE; + break; + //case S_TAG_SPACE: + //case S_EQ: + //case S_ATTR_SPACE: + // void();break; + //case S_TAG_CLOSE: + //ignore warning + } + }else{//not space + //S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE + //S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE + switch(s){ + //case S_TAG:void();break; + //case S_ATTR:void();break; + //case S_ATTR_NOQUOT_VALUE:void();break; + case S_ATTR_SPACE: + var tagName = el.tagName; + if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){ + errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!'); + } + el.add(attrName,attrName,start); + start = p; + s = S_ATTR; + break; + case S_ATTR_END: + errorHandler.warning('attribute space is required"'+attrName+'"!!'); + case S_TAG_SPACE: + s = S_ATTR; + start = p; + break; + case S_EQ: + s = S_ATTR_NOQUOT_VALUE; + start = p; + break; + case S_TAG_CLOSE: + throw new Error("elements closed character '/' and '>' must be connected to"); + } + } + }//end outer switch + //console.log('p++',p) + p++; + } + } + /** + * @return true if has new namespace define + */ + function appendElement(el,domBuilder,currentNSMap){ + var tagName = el.tagName; + var localNSMap = null; + //var currentNSMap = parseStack[parseStack.length-1].currentNSMap; + var i = el.length; + while(i--){ + var a = el[i]; + var qName = a.qName; + var value = a.value; + var nsp = qName.indexOf(':'); + if(nsp>0){ + var prefix = a.prefix = qName.slice(0,nsp); + var localName = qName.slice(nsp+1); + var nsPrefix = prefix === 'xmlns' && localName; + }else{ + localName = qName; + prefix = null; + nsPrefix = qName === 'xmlns' && ''; + } + //can not set prefix,because prefix !== '' + a.localName = localName ; + //prefix == null for no ns prefix attribute + if(nsPrefix !== false){//hack!! + if(localNSMap == null){ + localNSMap = {}; + //console.log(currentNSMap,0) + _copy(currentNSMap,currentNSMap={}); + //console.log(currentNSMap,1) + } + currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value; + a.uri = 'http://www.w3.org/2000/xmlns/'; + domBuilder.startPrefixMapping(nsPrefix, value); + } + } + var i = el.length; + while(i--){ + a = el[i]; + var prefix = a.prefix; + if(prefix){//no prefix attribute has no namespace + if(prefix === 'xml'){ + a.uri = 'http://www.w3.org/XML/1998/namespace'; + }if(prefix !== 'xmlns'){ + a.uri = currentNSMap[prefix || '']; + + //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)} + } + } + } + var nsp = tagName.indexOf(':'); + if(nsp>0){ + prefix = el.prefix = tagName.slice(0,nsp); + localName = el.localName = tagName.slice(nsp+1); + }else{ + prefix = null;//important!! + localName = el.localName = tagName; + } + //no prefix element has default namespace + var ns = el.uri = currentNSMap[prefix || '']; + domBuilder.startElement(ns,localName,tagName,el); + //endPrefixMapping and startPrefixMapping have not any help for dom builder + //localNSMap = null + if(el.closed){ + domBuilder.endElement(ns,localName,tagName); + if(localNSMap){ + for(prefix in localNSMap){ + domBuilder.endPrefixMapping(prefix); + } + } + }else{ + el.currentNSMap = currentNSMap; + el.localNSMap = localNSMap; + //parseStack.push(el); + return true; + } + } + function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){ + if(/^(?:script|textarea)$/i.test(tagName)){ + var elEndStart = source.indexOf('',elStartEnd); + var text = source.substring(elStartEnd+1,elEndStart); + if(/[&<]/.test(text)){ + if(/^script$/i.test(tagName)){ + //if(!/\]\]>/.test(text)){ + //lexHandler.startCDATA(); + domBuilder.characters(text,0,text.length); + //lexHandler.endCDATA(); + return elEndStart; + //} + }//}else{//text area + text = text.replace(/&#?\w+;/g,entityReplacer); + domBuilder.characters(text,0,text.length); + return elEndStart; + //} + + } + } + return elStartEnd+1; + } + function fixSelfClosed(source,elStartEnd,tagName,closeMap){ + //if(tagName in closeMap){ + var pos = closeMap[tagName]; + if(pos == null){ + //console.log(tagName) + pos = source.lastIndexOf(''); + if(pos',start+4); + //append comment source.substring(4,end)//"); + case DOCUMENT_TYPE_NODE: + var pubid = node.publicId; + var sysid = node.systemId; + buf.push(''); + }else if(sysid && sysid!='.'){ + buf.push(' SYSTEM "',sysid,'">'); + }else{ + var sub = node.internalSubset; + if(sub){ + buf.push(" [",sub,"]"); + } + buf.push(">"); + } + return; + case PROCESSING_INSTRUCTION_NODE: + return buf.push( ""); + case ENTITY_REFERENCE_NODE: + return buf.push( '&',node.nodeName,';'); + //case ENTITY_NODE: + //case NOTATION_NODE: + default: + buf.push('??',node.nodeName); + } + } + function importNode(doc,node,deep){ + var node2; + switch (node.nodeType) { + case ELEMENT_NODE: + node2 = node.cloneNode(false); + node2.ownerDocument = doc; + //var attrs = node2.attributes; + //var len = attrs.length; + //for(var i=0;i','amp':'&','quot':'"','apos':"'"}; + if(locator){ + domBuilder.setDocumentLocator(locator); + } + + sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator); + sax.domBuilder = options.domBuilder || domBuilder; + if(/\/x?html?$/.test(mimeType)){ + entityMap.nbsp = '\xa0'; + entityMap.copy = '\xa9'; + defaultNSMap['']= 'http://www.w3.org/1999/xhtml'; + } + defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace'; + if(source){ + sax.parse(source,defaultNSMap,entityMap); + }else{ + sax.errorHandler.error("invalid doc source"); + } + return domBuilder.doc; + }; + function buildErrorHandler(errorImpl,domBuilder,locator){ + if(!errorImpl){ + if(domBuilder instanceof DOMHandler){ + return domBuilder; + } + errorImpl = domBuilder ; + } + var errorHandler = {}; + var isCallback = errorImpl instanceof Function; + locator = locator||{}; + function build(key){ + var fn = errorImpl[key]; + if(!fn && isCallback){ + fn = errorImpl.length == 2?function(msg){errorImpl(key,msg);}:errorImpl; + } + errorHandler[key] = fn && function(msg){ + fn('[xmldom '+key+']\t'+msg+_locator(locator)); + }||function(){}; + } + build('warning'); + build('error'); + build('fatalError'); + return errorHandler; + } + + //console.log('#\n\n\n\n\n\n\n####') + /** + * +ContentHandler+ErrorHandler + * +LexicalHandler+EntityResolver2 + * -DeclHandler-DTDHandler + * + * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler + * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2 + * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html + */ + function DOMHandler() { + this.cdata = false; + } + function position(locator,node){ + node.lineNumber = locator.lineNumber; + node.columnNumber = locator.columnNumber; + } + /** + * @see org.xml.sax.ContentHandler#startDocument + * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html + */ + DOMHandler.prototype = { + startDocument : function() { + this.doc = new DOMImplementation().createDocument(null, null, null); + if (this.locator) { + this.doc.documentURI = this.locator.systemId; + } + }, + startElement:function(namespaceURI, localName, qName, attrs) { + var doc = this.doc; + var el = doc.createElementNS(namespaceURI, qName||localName); + var len = attrs.length; + appendElement(this, el); + this.currentElement = el; + + this.locator && position(this.locator,el); + for (var i = 0 ; i < len; i++) { + var namespaceURI = attrs.getURI(i); + var value = attrs.getValue(i); + var qName = attrs.getQName(i); + var attr = doc.createAttributeNS(namespaceURI, qName); + this.locator &&position(attrs.getLocator(i),attr); + attr.value = attr.nodeValue = value; + el.setAttributeNode(attr); + } + }, + endElement:function(namespaceURI, localName, qName) { + var current = this.currentElement; + var tagName = current.tagName; + this.currentElement = current.parentNode; + }, + startPrefixMapping:function(prefix, uri) { + }, + endPrefixMapping:function(prefix) { + }, + processingInstruction:function(target, data) { + var ins = this.doc.createProcessingInstruction(target, data); + this.locator && position(this.locator,ins); + appendElement(this, ins); + }, + ignorableWhitespace:function(ch, start, length) { + }, + characters:function(chars, start, length) { + chars = _toString.apply(this,arguments); + //console.log(chars) + if(chars){ + if (this.cdata) { + var charNode = this.doc.createCDATASection(chars); + } else { + var charNode = this.doc.createTextNode(chars); + } + if(this.currentElement){ + this.currentElement.appendChild(charNode); + }else if(/^\s*$/.test(chars)){ + this.doc.appendChild(charNode); + //process xml + } + this.locator && position(this.locator,charNode); + } + }, + skippedEntity:function(name) { + }, + endDocument:function() { + this.doc.normalize(); + }, + setDocumentLocator:function (locator) { + if(this.locator = locator){// && !('lineNumber' in locator)){ + locator.lineNumber = 0; + } + }, + //LexicalHandler + comment:function(chars, start, length) { + chars = _toString.apply(this,arguments); + var comm = this.doc.createComment(chars); + this.locator && position(this.locator,comm); + appendElement(this, comm); + }, + + startCDATA:function() { + //used in characters() methods + this.cdata = true; + }, + endCDATA:function() { + this.cdata = false; + }, + + startDTD:function(name, publicId, systemId) { + var impl = this.doc.implementation; + if (impl && impl.createDocumentType) { + var dt = impl.createDocumentType(name, publicId, systemId); + this.locator && position(this.locator,dt); + appendElement(this, dt); + } + }, + /** + * @see org.xml.sax.ErrorHandler + * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html + */ + warning:function(error) { + console.warn('[xmldom warning]\t'+error,_locator(this.locator)); + }, + error:function(error) { + console.error('[xmldom error]\t'+error,_locator(this.locator)); + }, + fatalError:function(error) { + console.error('[xmldom fatalError]\t'+error,_locator(this.locator)); + throw error; + } + }; + function _locator(l){ + if(l){ + return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']' + } + } + function _toString(chars,start,length){ + if(typeof chars == 'string'){ + return chars.substr(start,length) + }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)") + if(chars.length >= start+length || start){ + return new java.lang.String(chars,start,length)+''; + } + return chars; + } + } + + /* + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html + * used method of org.xml.sax.ext.LexicalHandler: + * #comment(chars, start, length) + * #startCDATA() + * #endCDATA() + * #startDTD(name, publicId, systemId) + * + * + * IGNORED method of org.xml.sax.ext.LexicalHandler: + * #endDTD() + * #startEntity(name) + * #endEntity(name) + * + * + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html + * IGNORED method of org.xml.sax.ext.DeclHandler + * #attributeDecl(eName, aName, type, mode, value) + * #elementDecl(name, model) + * #externalEntityDecl(name, publicId, systemId) + * #internalEntityDecl(name, value) + * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html + * IGNORED method of org.xml.sax.EntityResolver2 + * #resolveEntity(String name,String publicId,String baseURI,String systemId) + * #resolveEntity(publicId, systemId) + * #getExternalSubset(name, baseURI) + * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html + * IGNORED method of org.xml.sax.DTDHandler + * #notationDecl(name, publicId, systemId) {}; + * #unparsedEntityDecl(name, publicId, systemId, notationName) {}; + */ + "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){ + DOMHandler.prototype[key] = function(){return null}; + }); - var gj = []; - if (context.getDebug('collision')) { - gj = rtree.all().map(function(d) { - return { type: 'Polygon', coordinates: [[ - [d.minX, d.minY], - [d.maxX, d.minY], - [d.maxX, d.maxY], - [d.minX, d.maxY], - [d.minX, d.minY] - ]]}; - }); - } + /* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */ + function appendElement (hander,node) { + if (!hander.currentElement) { + hander.doc.appendChild(node); + } else { + hander.currentElement.appendChild(node); + } + }//appendChild and setAttributeNS are preformance key + + //if(typeof require == 'function'){ + var XMLReader = require$$0$4.XMLReader; + var DOMImplementation = exports.DOMImplementation = require$$1$3.DOMImplementation; + exports.XMLSerializer = require$$1$3.XMLSerializer ; + exports.DOMParser = DOMParser; + //} + }); + var domParser_1 = domParser.DOMImplementation; + var domParser_2 = domParser.XMLSerializer; + var domParser_3 = domParser.DOMParser; + + var domParser$1 = /*#__PURE__*/Object.freeze({ + default: domParser, + __moduleExports: domParser, + DOMImplementation: domParser_1, + XMLSerializer: domParser_2, + DOMParser: domParser_3 + }); - var boxes = selection.selectAll('.' + which) - .data(gj); + var require$$0$5 = ( domParser$1 && domParser ) || domParser$1; - // exit - boxes.exit() - .remove(); + var togeojson = createCommonjsModule(function (module, exports) { + var toGeoJSON = (function() { - // enter/update - boxes.enter() - .append('path') - .attr('class', classes) - .merge(boxes) - .attr('d', d3_geoPath()); - } + var removeSpace = /\s*/g, + trimSpace = /^\s*|\s*$/g, + splitSpace = /\s+/; + // generate a short, numeric hash of a string + function okhash(x) { + if (!x || !x.length) return 0; + for (var i = 0, h = 0; i < x.length; i++) { + h = ((h << 5) - h) + x.charCodeAt(i) | 0; + } return h; + } + // all Y children of X + function get(x, y) { return x.getElementsByTagName(y); } + function attr(x, y) { return x.getAttribute(y); } + function attrf(x, y) { return parseFloat(attr(x, y)); } + // one Y child of X, if any, otherwise null + function get1(x, y) { var n = get(x, y); return n.length ? n[0] : null; } + // https://developer.mozilla.org/en-US/docs/Web/API/Node.normalize + function norm(el) { if (el.normalize) { el.normalize(); } return el; } + // cast array x into numbers + function numarray(x) { + for (var j = 0, o = []; j < x.length; j++) { o[j] = parseFloat(x[j]); } + return o; + } + // get the content of a text node, if any + function nodeVal(x) { + if (x) { norm(x); } + return (x && x.textContent) || ''; + } + // get the contents of multiple text nodes, if present + function getMulti(x, ys) { + var o = {}, n, k; + for (k = 0; k < ys.length; k++) { + n = get1(x, ys[k]); + if (n) o[ys[k]] = nodeVal(n); + } + return o; + } + // add properties of Y to X, overwriting if present in both + function extend(x, y) { for (var k in y) x[k] = y[k]; } + // get one coordinate from a coordinate array, if any + function coord1(v) { return numarray(v.replace(removeSpace, '').split(',')); } + // get all coordinates from a coordinate array as [[],[]] + function coord(v) { + var coords = v.replace(trimSpace, '').split(splitSpace), + o = []; + for (var i = 0; i < coords.length; i++) { + o.push(coord1(coords[i])); + } + return o; + } + function coordPair(x) { + var ll = [attrf(x, 'lon'), attrf(x, 'lat')], + ele = get1(x, 'ele'), + // handle namespaced attribute in browser + heartRate = get1(x, 'gpxtpx:hr') || get1(x, 'hr'), + time = get1(x, 'time'), + e; + if (ele) { + e = parseFloat(nodeVal(ele)); + if (!isNaN(e)) { + ll.push(e); + } + } + return { + coordinates: ll, + time: time ? nodeVal(time) : null, + heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null + }; + } + // create a new feature collection parent object + function fc() { + return { + type: 'FeatureCollection', + features: [] + }; + } - function drawLabels(selection, graph, entities, filter, dimensions, fullRedraw) { - var wireframe = context.surface().classed('fill-wireframe'); - var zoom = geoScaleToZoom(projection$$1.scale()); + var serializer; + if (typeof XMLSerializer !== 'undefined') { + /* istanbul ignore next */ + serializer = new XMLSerializer(); + // only require xmldom in a node environment + } else if (typeof process === 'object' && !process.browser) { + serializer = new (require$$0$5.XMLSerializer)(); + } + function xml2str(str) { + // IE9 will create a new XMLSerializer but it'll crash immediately. + // This line is ignored because we don't run coverage tests in IE9 + /* istanbul ignore next */ + if (str.xml !== undefined) return str.xml; + return serializer.serializeToString(str); + } - var labelable = []; - var renderNodeAs = {}; - var i, j, k, entity, geometry; + var t = { + kml: function(doc) { + + var gj = fc(), + // styleindex keeps track of hashed styles in order to match features + styleIndex = {}, styleByHash = {}, + // stylemapindex keeps track of style maps to expose in properties + styleMapIndex = {}, + // atomic geospatial types supported by KML - MultiGeometry is + // handled separately + geotypes = ['Polygon', 'LineString', 'Point', 'Track', 'gx:Track'], + // all root placemarks in the file + placemarks = get(doc, 'Placemark'), + styles = get(doc, 'Style'), + styleMaps = get(doc, 'StyleMap'); + + for (var k = 0; k < styles.length; k++) { + var hash = okhash(xml2str(styles[k])).toString(16); + styleIndex['#' + attr(styles[k], 'id')] = hash; + styleByHash[hash] = styles[k]; + } + for (var l = 0; l < styleMaps.length; l++) { + styleIndex['#' + attr(styleMaps[l], 'id')] = okhash(xml2str(styleMaps[l])).toString(16); + var pairs = get(styleMaps[l], 'Pair'); + var pairsMap = {}; + for (var m = 0; m < pairs.length; m++) { + pairsMap[nodeVal(get1(pairs[m], 'key'))] = nodeVal(get1(pairs[m], 'styleUrl')); + } + styleMapIndex['#' + attr(styleMaps[l], 'id')] = pairsMap; + + } + for (var j = 0; j < placemarks.length; j++) { + gj.features = gj.features.concat(getPlacemark(placemarks[j])); + } + function kmlColor(v) { + var color, opacity; + v = v || ''; + if (v.substr(0, 1) === '#') { v = v.substr(1); } + if (v.length === 6 || v.length === 3) { color = v; } + if (v.length === 8) { + opacity = parseInt(v.substr(0, 2), 16) / 255; + color = '#' + v.substr(6, 2) + + v.substr(4, 2) + + v.substr(2, 2); + } + return [color, isNaN(opacity) ? undefined : opacity]; + } + function gxCoord(v) { return numarray(v.split(' ')); } + function gxCoords(root) { + var elems = get(root, 'coord', 'gx'), coords = [], times = []; + if (elems.length === 0) elems = get(root, 'gx:coord'); + for (var i = 0; i < elems.length; i++) coords.push(gxCoord(nodeVal(elems[i]))); + var timeElems = get(root, 'when'); + for (var j = 0; j < timeElems.length; j++) times.push(nodeVal(timeElems[j])); + return { + coords: coords, + times: times + }; + } + function getGeometry(root) { + var geomNode, geomNodes, i, j, k, geoms = [], coordTimes = []; + if (get1(root, 'MultiGeometry')) { return getGeometry(get1(root, 'MultiGeometry')); } + if (get1(root, 'MultiTrack')) { return getGeometry(get1(root, 'MultiTrack')); } + if (get1(root, 'gx:MultiTrack')) { return getGeometry(get1(root, 'gx:MultiTrack')); } + for (i = 0; i < geotypes.length; i++) { + geomNodes = get(root, geotypes[i]); + if (geomNodes) { + for (j = 0; j < geomNodes.length; j++) { + geomNode = geomNodes[j]; + if (geotypes[i] === 'Point') { + geoms.push({ + type: 'Point', + coordinates: coord1(nodeVal(get1(geomNode, 'coordinates'))) + }); + } else if (geotypes[i] === 'LineString') { + geoms.push({ + type: 'LineString', + coordinates: coord(nodeVal(get1(geomNode, 'coordinates'))) + }); + } else if (geotypes[i] === 'Polygon') { + var rings = get(geomNode, 'LinearRing'), + coords = []; + for (k = 0; k < rings.length; k++) { + coords.push(coord(nodeVal(get1(rings[k], 'coordinates')))); + } + geoms.push({ + type: 'Polygon', + coordinates: coords + }); + } else if (geotypes[i] === 'Track' || + geotypes[i] === 'gx:Track') { + var track = gxCoords(geomNode); + geoms.push({ + type: 'LineString', + coordinates: track.coords + }); + if (track.times.length) coordTimes.push(track.times); + } + } + } + } + return { + geoms: geoms, + coordTimes: coordTimes + }; + } + function getPlacemark(root) { + var geomsAndTimes = getGeometry(root), i, properties = {}, + name = nodeVal(get1(root, 'name')), + address = nodeVal(get1(root, 'address')), + styleUrl = nodeVal(get1(root, 'styleUrl')), + description = nodeVal(get1(root, 'description')), + timeSpan = get1(root, 'TimeSpan'), + timeStamp = get1(root, 'TimeStamp'), + extendedData = get1(root, 'ExtendedData'), + lineStyle = get1(root, 'LineStyle'), + polyStyle = get1(root, 'PolyStyle'), + visibility = get1(root, 'visibility'); + + if (!geomsAndTimes.geoms.length) return []; + if (name) properties.name = name; + if (address) properties.address = address; + if (styleUrl) { + if (styleUrl[0] !== '#') { + styleUrl = '#' + styleUrl; + } + + properties.styleUrl = styleUrl; + if (styleIndex[styleUrl]) { + properties.styleHash = styleIndex[styleUrl]; + } + if (styleMapIndex[styleUrl]) { + properties.styleMapHash = styleMapIndex[styleUrl]; + properties.styleHash = styleIndex[styleMapIndex[styleUrl].normal]; + } + // Try to populate the lineStyle or polyStyle since we got the style hash + var style = styleByHash[properties.styleHash]; + if (style) { + if (!lineStyle) lineStyle = get1(style, 'LineStyle'); + if (!polyStyle) polyStyle = get1(style, 'PolyStyle'); + } + } + if (description) properties.description = description; + if (timeSpan) { + var begin = nodeVal(get1(timeSpan, 'begin')); + var end = nodeVal(get1(timeSpan, 'end')); + properties.timespan = { begin: begin, end: end }; + } + if (timeStamp) { + properties.timestamp = nodeVal(get1(timeStamp, 'when')); + } + if (lineStyle) { + var linestyles = kmlColor(nodeVal(get1(lineStyle, 'color'))), + color = linestyles[0], + opacity = linestyles[1], + width = parseFloat(nodeVal(get1(lineStyle, 'width'))); + if (color) properties.stroke = color; + if (!isNaN(opacity)) properties['stroke-opacity'] = opacity; + if (!isNaN(width)) properties['stroke-width'] = width; + } + if (polyStyle) { + var polystyles = kmlColor(nodeVal(get1(polyStyle, 'color'))), + pcolor = polystyles[0], + popacity = polystyles[1], + fill = nodeVal(get1(polyStyle, 'fill')), + outline = nodeVal(get1(polyStyle, 'outline')); + if (pcolor) properties.fill = pcolor; + if (!isNaN(popacity)) properties['fill-opacity'] = popacity; + if (fill) properties['fill-opacity'] = fill === '1' ? properties['fill-opacity'] || 1 : 0; + if (outline) properties['stroke-opacity'] = outline === '1' ? properties['stroke-opacity'] || 1 : 0; + } + if (extendedData) { + var datas = get(extendedData, 'Data'), + simpleDatas = get(extendedData, 'SimpleData'); + + for (i = 0; i < datas.length; i++) { + properties[datas[i].getAttribute('name')] = nodeVal(get1(datas[i], 'value')); + } + for (i = 0; i < simpleDatas.length; i++) { + properties[simpleDatas[i].getAttribute('name')] = nodeVal(simpleDatas[i]); + } + } + if (visibility) { + properties.visibility = nodeVal(visibility); + } + if (geomsAndTimes.coordTimes.length) { + properties.coordTimes = (geomsAndTimes.coordTimes.length === 1) ? + geomsAndTimes.coordTimes[0] : geomsAndTimes.coordTimes; + } + var feature = { + type: 'Feature', + geometry: (geomsAndTimes.geoms.length === 1) ? geomsAndTimes.geoms[0] : { + type: 'GeometryCollection', + geometries: geomsAndTimes.geoms + }, + properties: properties + }; + if (attr(root, 'id')) feature.id = attr(root, 'id'); + return [feature]; + } + return gj; + }, + gpx: function(doc) { + var i, + tracks = get(doc, 'trk'), + routes = get(doc, 'rte'), + waypoints = get(doc, 'wpt'), + // a feature collection + gj = fc(), + feature; + for (i = 0; i < tracks.length; i++) { + feature = getTrack(tracks[i]); + if (feature) gj.features.push(feature); + } + for (i = 0; i < routes.length; i++) { + feature = getRoute(routes[i]); + if (feature) gj.features.push(feature); + } + for (i = 0; i < waypoints.length; i++) { + gj.features.push(getPoint(waypoints[i])); + } + function getPoints(node, pointname) { + var pts = get(node, pointname), + line = [], + times = [], + heartRates = [], + l = pts.length; + if (l < 2) return {}; // Invalid line in GeoJSON + for (var i = 0; i < l; i++) { + var c = coordPair(pts[i]); + line.push(c.coordinates); + if (c.time) times.push(c.time); + if (c.heartRate) heartRates.push(c.heartRate); + } + return { + line: line, + times: times, + heartRates: heartRates + }; + } + function getTrack(node) { + var segments = get(node, 'trkseg'), + track = [], + times = [], + heartRates = [], + line; + for (var i = 0; i < segments.length; i++) { + line = getPoints(segments[i], 'trkpt'); + if (line) { + if (line.line) track.push(line.line); + if (line.times && line.times.length) times.push(line.times); + if (line.heartRates && line.heartRates.length) heartRates.push(line.heartRates); + } + } + if (track.length === 0) return; + var properties = getProperties(node); + extend(properties, getLineStyle(get1(node, 'extensions'))); + if (times.length) properties.coordTimes = track.length === 1 ? times[0] : times; + if (heartRates.length) properties.heartRates = track.length === 1 ? heartRates[0] : heartRates; + return { + type: 'Feature', + properties: properties, + geometry: { + type: track.length === 1 ? 'LineString' : 'MultiLineString', + coordinates: track.length === 1 ? track[0] : track + } + }; + } + function getRoute(node) { + var line = getPoints(node, 'rtept'); + if (!line.line) return; + var prop = getProperties(node); + extend(prop, getLineStyle(get1(node, 'extensions'))); + var routeObj = { + type: 'Feature', + properties: prop, + geometry: { + type: 'LineString', + coordinates: line.line + } + }; + return routeObj; + } + function getPoint(node) { + var prop = getProperties(node); + extend(prop, getMulti(node, ['sym'])); + return { + type: 'Feature', + properties: prop, + geometry: { + type: 'Point', + coordinates: coordPair(node).coordinates + } + }; + } + function getLineStyle(extensions) { + var style = {}; + if (extensions) { + var lineStyle = get1(extensions, 'line'); + if (lineStyle) { + var color = nodeVal(get1(lineStyle, 'color')), + opacity = parseFloat(nodeVal(get1(lineStyle, 'opacity'))), + width = parseFloat(nodeVal(get1(lineStyle, 'width'))); + if (color) style.stroke = color; + if (!isNaN(opacity)) style['stroke-opacity'] = opacity; + // GPX width is in mm, convert to px with 96 px per inch + if (!isNaN(width)) style['stroke-width'] = width * 96 / 25.4; + } + } + return style; + } + function getProperties(node) { + var prop = getMulti(node, ['name', 'cmt', 'desc', 'type', 'time', 'keywords']), + links = get(node, 'link'); + if (links.length) prop.links = []; + for (var i = 0, link; i < links.length; i++) { + link = { href: attr(links[i], 'href') }; + extend(link, getMulti(links[i], ['text', 'type'])); + prop.links.push(link); + } + return prop; + } + return gj; + } + }; + return t; + })(); - for (i = 0; i < labelStack.length; i++) { - labelable.push([]); - } + module.exports = toGeoJSON; + }); - if (fullRedraw) { - _rdrawn.clear(); - _rskipped.clear(); - _entitybboxes = {}; + var _initialized = false; + var _enabled = false; + var _geojson; - } else { - for (i = 0; i < entities.length; i++) { - entity = entities[i]; - var toRemove = [] - .concat(_entitybboxes[entity.id] || []) - .concat(_entitybboxes[entity.id + 'I'] || []); - - for (j = 0; j < toRemove.length; j++) { - _rdrawn.remove(toRemove[j]); - _rskipped.remove(toRemove[j]); - } - } - } - // Loop through all the entities to do some preprocessing - for (i = 0; i < entities.length; i++) { - entity = entities[i]; - geometry = entity.geometry(graph); - - // Insert collision boxes around interesting points/vertices - if (geometry === 'point' || (geometry === 'vertex' && isInterestingVertex(entity))) { - var hasDirections = entity.directions(graph, projection$$1).length; - var markerPadding; - - if (!wireframe && geometry === 'point' && !(zoom >= 18 && hasDirections)) { - renderNodeAs[entity.id] = 'point'; - markerPadding = 20; // extra y for marker height - } else { - renderNodeAs[entity.id] = 'vertex'; - markerPadding = 0; - } - - var coord = projection$$1(entity.loc); - var nodePadding = 10; - var bbox = { - minX: coord[0] - nodePadding, - minY: coord[1] - nodePadding - markerPadding, - maxX: coord[0] + nodePadding, - maxY: coord[1] + nodePadding - }; - - doInsert(bbox, entity.id + 'P'); - } + function svgGpx$$1(projection$$1, context, dispatch) { + var _showLabels = true; + var detected = utilDetect(); + var layer; + var _src; - // From here on, treat vertices like points - if (geometry === 'vertex') { - geometry = 'point'; - } - // Determine which entities are label-able - var preset = geometry === 'area' && context.presets().match(entity, graph); - var icon = preset && !blacklisted(preset) && preset.icon; + function init() { + if (_initialized) return; // run once - if (!icon && !utilDisplayName(entity)) - continue; + _geojson = {}; + _enabled = true; - for (k = 0; k < labelStack.length; k++) { - var matchGeom = labelStack[k][0]; - var matchKey = labelStack[k][1]; - var matchVal = labelStack[k][2]; - var hasVal = entity.tags[matchKey]; + function over() { + event.stopPropagation(); + event.preventDefault(); + event.dataTransfer.dropEffect = 'copy'; + } - if (geometry === matchGeom && hasVal && (matchVal === '*' || matchVal === hasVal)) { - labelable[k].push(entity); - break; - } - } - } + select('body') + .attr('dropzone', 'copy') + .on('drop.localgpx', function() { + event.stopPropagation(); + event.preventDefault(); + if (!detected.filedrop) return; + drawGpx.files(event.dataTransfer.files); + }) + .on('dragenter.localgpx', over) + .on('dragexit.localgpx', over) + .on('dragover.localgpx', over); + + _initialized = true; + } - var positions = { - point: [], - line: [], - area: [] - }; - var labelled = { - point: [], - line: [], - area: [] - }; + function drawGpx(selection$$1) { + var getPath = svgPath(projection$$1).geojson; - // Try and find a valid label for labellable entities - for (k = 0; k < labelable.length; k++) { - var fontSize = labelStack[k][3]; - - for (i = 0; i < labelable[k].length; i++) { - entity = labelable[k][i]; - geometry = entity.geometry(graph); - - var getName = (geometry === 'line') ? utilDisplayNameForPath : utilDisplayName; - var name = getName(entity); - var width = name && textWidth(name, fontSize); - var p = null; - - if (geometry === 'point' || geometry === 'vertex') { - // no point or vertex labels in wireframe mode - // no vertex labels at low zooms (vertices have no icons) - if (wireframe) continue; - var renderAs = renderNodeAs[entity.id]; - if (renderAs === 'vertex' && zoom < 17) continue; - - p = getPointLabel(entity, width, fontSize, renderAs); - - } else if (geometry === 'line') { - p = getLineLabel(entity, width, fontSize); - - } else if (geometry === 'area') { - p = getAreaLabel(entity, width, fontSize); - } - - if (p) { - if (geometry === 'vertex') { geometry = 'point'; } // treat vertex like point - p.classes = geometry + ' tag-' + labelStack[k][1]; - positions[geometry].push(p); - labelled[geometry].push(entity); - } - } - } + layer = selection$$1.selectAll('.layer-gpx') + .data(_enabled ? [0] : []); + layer.exit() + .remove(); - function isInterestingVertex(entity) { - var selectedIDs = context.selectedIDs(); + layer = layer.enter() + .append('g') + .attr('class', 'layer-gpx') + .merge(layer); - return entity.hasInterestingTags() || - entity.isEndpoint(graph) || - entity.isConnected(graph) || - selectedIDs.indexOf(entity.id) !== -1 || - some(graph.parentWays(entity), function(parent) { - return selectedIDs.indexOf(parent.id) !== -1; - }); - } + var paths = layer + .selectAll('path') + .data([_geojson]); - function getPointLabel(entity, width, height, geometry) { - var y = (geometry === 'point' ? -12 : 0); - var pointOffsets = { - ltr: [15, y, 'start'], - rtl: [-15, y, 'end'] - }; + paths.exit() + .remove(); - var coord = projection$$1(entity.loc); - var textPadding = 2; - var offset = pointOffsets[textDirection]; - var p = { - height: height, - width: width, - x: coord[0] + offset[0], - y: coord[1] + offset[1], - textAnchor: offset[2] - }; + paths = paths.enter() + .append('path') + .attr('class', 'gpx') + .merge(paths); - // insert a collision box for the text label.. - var bbox; - if (textDirection === 'rtl') { - bbox = { - minX: p.x - width - textPadding, - minY: p.y - (height / 2) - textPadding, - maxX: p.x + textPadding, - maxY: p.y + (height / 2) + textPadding - }; - } else { - bbox = { - minX: p.x - textPadding, - minY: p.y - (height / 2) - textPadding, - maxX: p.x + width + textPadding, - maxY: p.y + (height / 2) + textPadding - }; - } + paths + .attr('d', getPath); - if (tryInsert([bbox], entity.id, true)) { - return p; - } - } + var labelData = _showLabels && _geojson.features ? _geojson.features : []; + labelData = labelData.filter(getPath); - function getLineLabel(entity, width, height) { - var viewport = geoExtent$$1(context.projection.clipExtent()).polygon(); - var points = map$3(graph.childNodes(entity), 'loc').map(projection$$1); - var length = geoPathLength(points); - - if (length < width + 20) return; - - // todo: properly clip points to viewport - - // % along the line to attempt to place the label - var lineOffsets = [50, 45, 55, 40, 60, 35, 65, 30, 70, - 25, 75, 20, 80, 15, 95, 10, 90, 5, 95]; - var padding = 3; - - for (var i = 0; i < lineOffsets.length; i++) { - var offset = lineOffsets[i]; - var middle = offset / 100 * length; - var start = middle - width / 2; - - if (start < 0 || start + width > length) continue; - - // generate subpath and ignore paths that are invalid or don't cross viewport. - var sub = subpath(points, start, start + width); - if (!sub || !geoPolygonIntersectsPolygon(viewport, sub, true)) { - continue; - } - - var isReverse = reverse(sub); - if (isReverse) { - sub = sub.reverse(); - } - - var bboxes = []; - var boxsize = (height + 2) / 2; - - for (var j = 0; j < sub.length - 1; j++) { - var a = sub[j]; - var b = sub[j + 1]; - - // split up the text into small collision boxes - var num = Math.max(1, Math.floor(geoVecLength(a, b) / boxsize / 2)); - - for (var box = 0; box < num; box++) { - var p = geoVecInterp(a, b, box / num); - var x0 = p[0] - boxsize - padding; - var y0 = p[1] - boxsize - padding; - var x1 = p[0] + boxsize + padding; - var y1 = p[1] + boxsize + padding; - - bboxes.push({ - minX: Math.min(x0, x1), - minY: Math.min(y0, y1), - maxX: Math.max(x0, x1), - maxY: Math.max(y0, y1) - }); - } - } - - if (tryInsert(bboxes, entity.id, false)) { // accept this one - return { - 'font-size': height + 2, - lineString: lineString(sub), - startOffset: offset + '%' - }; - } - } + layer + .call(drawLabels, 'gpxlabel-halo', labelData) + .call(drawLabels, 'gpxlabel', labelData); - function reverse(p) { - var angle = Math.atan2(p[1][1] - p[0][1], p[1][0] - p[0][0]); - return !(p[0][0] < p[p.length - 1][0] && angle < Math.PI/2 && angle > -Math.PI/2); - } - function lineString(points) { - return 'M' + points.join('L'); - } + function drawLabels(selection$$1, textClass, data) { + var labels = selection$$1.selectAll('text.' + textClass) + .data(data); - function subpath(points, from, to) { - var sofar = 0; - var start, end, i0, i1; - - for (var i = 0; i < points.length - 1; i++) { - var a = points[i]; - var b = points[i + 1]; - var current = geoVecLength(a, b); - var portion; - if (!start && sofar + current >= from) { - portion = (from - sofar) / current; - start = [ - a[0] + portion * (b[0] - a[0]), - a[1] + portion * (b[1] - a[1]) - ]; - i0 = i + 1; - } - if (!end && sofar + current >= to) { - portion = (to - sofar) / current; - end = [ - a[0] + portion * (b[0] - a[0]), - a[1] + portion * (b[1] - a[1]) - ]; - i1 = i + 1; - } - sofar += current; - } - - var result = points.slice(i0, i1); - result.unshift(start); - result.push(end); - return result; - } - } + // exit + labels.exit() + .remove(); + // enter/update + labels = labels.enter() + .append('text') + .attr('class', textClass) + .merge(labels) + .text(function(d) { + if (d.properties) { + return d.properties.desc || d.properties.name; + } + return null; + }) + .attr('x', function(d) { + var centroid = getPath.centroid(d); + return centroid[0] + 11; + }) + .attr('y', function(d) { + var centroid = getPath.centroid(d); + return centroid[1]; + }); + } + } - function getAreaLabel(entity, width, height) { - var centroid = path.centroid(entity.asGeoJSON(graph, true)); - var extent = entity.extent(graph); - var areaWidth = projection$$1(extent[1])[0] - projection$$1(extent[0])[0]; - - if (isNaN(centroid[0]) || areaWidth < 20) return; - - var preset = context.presets().match(entity, context.graph()); - var picon = preset && preset.icon; - var iconSize = 17; - var padding = 2; - var p = {}; - - if (picon) { // icon and label.. - if (addIcon()) { - addLabel(iconSize + padding); - return p; - } - } else { // label only.. - if (addLabel(0)) { - return p; - } - } + function toDom(x) { + return (new DOMParser()).parseFromString(x, 'text/xml'); + } - function addIcon() { - var iconX = centroid[0] - (iconSize / 2); - var iconY = centroid[1] - (iconSize / 2); - var bbox = { - minX: iconX, - minY: iconY, - maxX: iconX + iconSize, - maxY: iconY + iconSize - }; - - if (tryInsert([bbox], entity.id + 'I', true)) { - p.transform = 'translate(' + iconX + ',' + iconY + ')'; - return true; - } - return false; - } - function addLabel(yOffset) { - if (width && areaWidth >= width + 20) { - var labelX = centroid[0]; - var labelY = centroid[1] + yOffset; - var bbox = { - minX: labelX - (width / 2) - padding, - minY: labelY - (height / 2) - padding, - maxX: labelX + (width / 2) + padding, - maxY: labelY + (height / 2) + padding - }; - - if (tryInsert([bbox], entity.id, true)) { - p.x = labelX; - p.y = labelY; - p.textAnchor = 'middle'; - p.height = height; - return true; - } - } - return false; - } - } + function getExtension(fileName) { + if (isUndefined(fileName)) { + return ''; + } + var lastDotIndex = fileName.lastIndexOf('.'); + if (lastDotIndex < 0) { + return ''; + } - // force insert a singular bounding box - // singular box only, no array, id better be unique - function doInsert(bbox, id) { - bbox.id = id; + return fileName.substr(lastDotIndex); + } - var oldbox = _entitybboxes[id]; - if (oldbox) { - _rdrawn.remove(oldbox); - } - _entitybboxes[id] = bbox; - _rdrawn.insert(bbox); - } + function parseSaveAndZoom(extension, data) { + switch (extension) { + default: + drawGpx.geojson(togeojson.gpx(toDom(data))).fitZoom(); + break; + case '.kml': + drawGpx.geojson(togeojson.kml(toDom(data))).fitZoom(); + break; + case '.geojson': + case '.json': + drawGpx.geojson(JSON.parse(data)).fitZoom(); + break; + } + } - function tryInsert(bboxes, id, saveSkipped) { - var skipped = false; - for (var i = 0; i < bboxes.length; i++) { - var bbox = bboxes[i]; - bbox.id = id; + drawGpx.showLabels = function(_) { + if (!arguments.length) return _showLabels; + _showLabels = _; + return this; + }; - // Check that label is visible - if (bbox.minX < 0 || bbox.minY < 0 || bbox.maxX > dimensions[0] || bbox.maxY > dimensions[1]) { - skipped = true; - break; - } - if (_rdrawn.collides(bbox)) { - skipped = true; - break; - } - } - _entitybboxes[id] = bboxes; + drawGpx.enabled = function(_) { + if (!arguments.length) return _enabled; + _enabled = _; + dispatch.call('change'); + return this; + }; - if (skipped) { - if (saveSkipped) { - _rskipped.load(bboxes); - } - } else { - _rdrawn.load(bboxes); - } - return !skipped; - } + drawGpx.hasGpx = function() { + return (!(isEmpty(_geojson) || isEmpty(_geojson.features))); + }; - var layer = selection.selectAll('.layer-labels'); - var halo = layer.selectAll('.layer-labels-halo'); - var label = layer.selectAll('.layer-labels-label'); - var debug = layer.selectAll('.layer-labels-debug'); + drawGpx.geojson = function(gj) { + if (!arguments.length) return _geojson; + if (isEmpty(gj) || isEmpty(gj.features)) return this; + _geojson = gj; + dispatch.call('change'); + return this; + }; - // points - drawPointLabels(label, labelled.point, filter, 'pointlabel', positions.point); - drawPointLabels(halo, labelled.point, filter, 'pointlabel-halo', positions.point); - // lines - drawLinePaths(halo, labelled.line, filter, '', positions.line); - drawLineLabels(label, labelled.line, filter, 'linelabel', positions.line); - drawLineLabels(halo, labelled.line, filter, 'linelabel-halo', positions.line); + drawGpx.url = function(url) { + d3_text(url, function(err, data) { + if (!err) { + _src = url; + var extension = getExtension(url); + parseSaveAndZoom(extension, data); + } + }); + return this; + }; - // areas - drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area); - drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area); - drawAreaIcons(label, labelled.area, filter, 'areaicon', positions.area); - drawAreaIcons(halo, labelled.area, filter, 'areaicon-halo', positions.area); - // debug - drawCollisionBoxes(debug, _rskipped, 'debug-skipped'); - drawCollisionBoxes(debug, _rdrawn, 'debug-drawn'); + drawGpx.files = function(fileList) { + if (!fileList.length) return this; + var f = fileList[0], + reader = new FileReader(); - layer.call(filterLabels); - } + reader.onload = (function(file) { + _src = file.name; + var extension = getExtension(file.name); + return function (e) { + parseSaveAndZoom(extension, e.target.result); + }; + })(f); + reader.readAsText(f); + return this; + }; - function filterLabels(selection) { - var layers = selection - .selectAll('.layer-labels-label, .layer-labels-halo'); - layers.selectAll('.nolabel') - .classed('nolabel', false); + drawGpx.getSrc = function () { + return _src; + }; - var mouse = context.mouse(); - var graph = context.graph(); - var selectedIDs = context.selectedIDs(); - var ids = []; - var pad, bbox; - // hide labels near the mouse - if (mouse) { - pad = 20; - bbox = { minX: mouse[0] - pad, minY: mouse[1] - pad, maxX: mouse[0] + pad, maxY: mouse[1] + pad }; - ids.push.apply(ids, map$3(_rdrawn.search(bbox), 'id')); - } + drawGpx.fitZoom = function() { + if (!this.hasGpx()) return this; + + var map = context.map(); + var viewport = map.trimmedExtent().polygon(); + var coords = reduce(_geojson.features, function(coords, feature) { + var c = feature.geometry.coordinates; + + /* eslint-disable no-fallthrough */ + switch (feature.geometry.type) { + case 'Point': + c = [c]; + case 'MultiPoint': + case 'LineString': + break; + + case 'MultiPolygon': + c = flatten(c); + case 'Polygon': + case 'MultiLineString': + c = flatten(c); + break; + } + /* eslint-enable no-fallthrough */ + + return union(coords, c); + }, []); + + if (!geoPolygonIntersectsPolygon(viewport, coords, true)) { + var extent = geoExtent$$1(d3_geoBounds({ type: 'LineString', coordinates: coords })); + map.centerZoom(extent.center(), map.trimmedExtentZoom(extent)); + } - // hide labels on selected nodes (they look weird when dragging / haloed) - for (var i = 0; i < selectedIDs.length; i++) { - var entity = graph.hasEntity(selectedIDs[i]); - if (entity && entity.type === 'node') { - ids.push(selectedIDs[i]); - } - } + return this; + }; - layers.selectAll(utilEntitySelector(ids)) - .classed('nolabel', true); - - - // draw the mouse bbox if debugging is on.. - var debug = selection.selectAll('.layer-labels-debug'); - var gj = []; - if (context.getDebug('collision')) { - gj = bbox ? [{ - type: 'Polygon', - coordinates: [[ - [bbox.minX, bbox.minY], - [bbox.maxX, bbox.minY], - [bbox.maxX, bbox.maxY], - [bbox.minX, bbox.maxY], - [bbox.minX, bbox.minY] - ]] - }] : []; - } - var box = debug.selectAll('.debug-mouse') - .data(gj); + init(); + return drawGpx; + } - // exit - box.exit() - .remove(); + function svgIcon(name, svgklass, useklass) { + return function drawIcon(selection) { + selection.selectAll('svg') + .data([0]) + .enter() + .append('svg') + .attr('class', 'icon ' + (svgklass || '')) + .append('use') + .attr('xlink:href', name) + .attr('class', useklass); + }; + } - // enter/update - box.enter() - .append('path') - .attr('class', 'debug debug-mouse yellow') - .merge(box) - .attr('d', d3_geoPath()); - } + function svgLabels(projection$$1, context) { + var path = d3_geoPath(projection$$1); + var detected = utilDetect(); + var baselineHack = (detected.ie || detected.browser.toLowerCase() === 'edge'); + var _rdrawn = rbush_1(); + var _rskipped = rbush_1(); + var _textWidthCache = {}; + var _entitybboxes = {}; + + // Listed from highest to lowest priority + var labelStack = [ + ['line', 'aeroway', '*', 12], + ['line', 'highway', 'motorway', 12], + ['line', 'highway', 'trunk', 12], + ['line', 'highway', 'primary', 12], + ['line', 'highway', 'secondary', 12], + ['line', 'highway', 'tertiary', 12], + ['line', 'highway', '*', 12], + ['line', 'railway', '*', 12], + ['line', 'waterway', '*', 12], + ['area', 'aeroway', '*', 12], + ['area', 'amenity', '*', 12], + ['area', 'building', '*', 12], + ['area', 'historic', '*', 12], + ['area', 'leisure', '*', 12], + ['area', 'man_made', '*', 12], + ['area', 'natural', '*', 12], + ['area', 'shop', '*', 12], + ['area', 'tourism', '*', 12], + ['area', 'camp_site', '*', 12], + ['point', 'aeroway', '*', 10], + ['point', 'amenity', '*', 10], + ['point', 'building', '*', 10], + ['point', 'historic', '*', 10], + ['point', 'leisure', '*', 10], + ['point', 'man_made', '*', 10], + ['point', 'natural', '*', 10], + ['point', 'shop', '*', 10], + ['point', 'tourism', '*', 10], + ['point', 'camp_site', '*', 10], + ['line', 'name', '*', 12], + ['area', 'name', '*', 12], + ['point', 'name', '*', 10] + ]; - var throttleFilterLabels = throttle(utilCallWhenIdle(filterLabels), 100); + function blacklisted(preset) { + var noIcons = ['building', 'landuse', 'natural']; + return some(noIcons, function(s) { + return preset.id.indexOf(s) >= 0; + }); + } - drawLabels.observe = function(selection) { - var listener = function() { throttleFilterLabels(selection); }; - selection.on('mousemove.hidelabels', listener); - context.on('enter.hidelabels', listener); - }; + function get(array, prop) { + return function(d, i) { return array[i][prop]; }; + } - drawLabels.off = function(selection) { - throttleFilterLabels.cancel(); - selection.on('mousemove.hidelabels', null); - context.on('enter.hidelabels', null); - }; + function textWidth(text, size, elem) { + var c = _textWidthCache[size]; + if (!c) c = _textWidthCache[size] = {}; + if (c[text]) { + return c[text]; - return drawLabels; -} + } else if (elem) { + c[text] = elem.getComputedTextLength(); + return c[text]; -function svgMapillaryImages$$1(projection, context, dispatch) { - var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000); - var minZoom = 12; - var minMarkerZoom = 16; - var minViewfieldZoom = 18; - var layer = d3_select(null); - var _mapillary; + } else { + var str = encodeURIComponent(text).match(/%[CDEFcdef]/g); + if (str === null) { + return size / 3 * 2 * text.length; + } else { + return size / 3 * (2 * text.length + str.length); + } + } + } - function init() { - if (svgMapillaryImages$$1.initialized) return; // run once - svgMapillaryImages$$1.enabled = false; - svgMapillaryImages$$1.initialized = true; - } + function drawLinePaths(selection, entities, filter, classes, labels) { + var paths = selection.selectAll('path') + .filter(filter) + .data(entities, osmEntity$$1.key); + // exit + paths.exit() + .remove(); - function getService() { - if (services.mapillary && !_mapillary) { - _mapillary = services.mapillary; - _mapillary.event.on('loadedImages', throttledRedraw); - } else if (!services.mapillary && _mapillary) { - _mapillary = null; - } + // enter/update + paths.enter() + .append('path') + .style('stroke-width', get(labels, 'font-size')) + .attr('id', function(d) { return 'labelpath-' + d.id; }) + .attr('class', classes) + .merge(paths) + .attr('d', get(labels, 'lineString')); + } - return _mapillary; - } + function drawLineLabels(selection, entities, filter, classes, labels) { + var texts = selection.selectAll('text.' + classes) + .filter(filter) + .data(entities, osmEntity$$1.key); + + // exit + texts.exit() + .remove(); + + // enter + texts.enter() + .append('text') + .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; }) + .attr('dy', baselineHack ? '0.35em' : null) + .append('textPath') + .attr('class', 'textpath'); + + // update + selection.selectAll('text.' + classes).selectAll('.textpath') + .filter(filter) + .data(entities, osmEntity$$1.key) + .attr('startOffset', '50%') + .attr('xlink:href', function(d) { return '#labelpath-' + d.id; }) + .text(utilDisplayNameForPath); + } - function showLayer() { - var service = getService(); - if (!service) return; - service.loadViewer(context); - editOn(); + function drawPointLabels(selection, entities, filter, classes, labels) { + var texts = selection.selectAll('text.' + classes) + .filter(filter) + .data(entities, osmEntity$$1.key); + + // exit + texts.exit() + .remove(); + + // enter/update + texts.enter() + .append('text') + .attr('class', function(d, i) { + return classes + ' ' + labels[i].classes + ' ' + d.id; + }) + .merge(texts) + .attr('x', get(labels, 'x')) + .attr('y', get(labels, 'y')) + .style('text-anchor', get(labels, 'textAnchor')) + .text(utilDisplayName) + .each(function(d, i) { + textWidth(utilDisplayName(d), labels[i].height, this); + }); + } - layer - .style('opacity', 0) - .transition() - .duration(250) - .style('opacity', 1) - .on('end', function () { dispatch.call('change'); }); - } + function drawAreaLabels(selection, entities, filter, classes, labels) { + entities = entities.filter(hasText); + labels = labels.filter(hasText); + drawPointLabels(selection, entities, filter, classes, labels); - function hideLayer() { - var service = getService(); - if (service) { - service.hideViewer(); - } + function hasText(d, i) { + return labels[i].hasOwnProperty('x') && labels[i].hasOwnProperty('y'); + } + } - throttledRedraw.cancel(); - layer - .transition() - .duration(250) - .style('opacity', 0) - .on('end', editOff); - } + function drawAreaIcons(selection, entities, filter, classes, labels) { + var icons = selection.selectAll('use.' + classes) + .filter(filter) + .data(entities, osmEntity$$1.key); + + // exit + icons.exit() + .remove(); + + // enter/update + icons.enter() + .append('use') + .attr('class', 'icon ' + classes) + .attr('width', '17px') + .attr('height', '17px') + .merge(icons) + .attr('transform', get(labels, 'transform')) + .attr('xlink:href', function(d) { + var preset = context.presets().match(d, context.graph()); + var picon = preset && preset.icon; + + if (!picon) { + return ''; + } else { + var isMaki = dataFeatureIcons.indexOf(picon) !== -1; + return '#' + picon + (isMaki ? '-15' : ''); + } + }); + } - function editOn() { - layer.style('display', 'block'); - } + function drawCollisionBoxes(selection, rtree, which) { + var classes = 'debug ' + which + ' ' + (which === 'debug-skipped' ? 'orange' : 'yellow'); + + var gj = []; + if (context.getDebug('collision')) { + gj = rtree.all().map(function(d) { + return { type: 'Polygon', coordinates: [[ + [d.minX, d.minY], + [d.maxX, d.minY], + [d.maxX, d.maxY], + [d.minX, d.maxY], + [d.minX, d.minY] + ]]}; + }); + } + var boxes = selection.selectAll('.' + which) + .data(gj); - function editOff() { - layer.selectAll('.viewfield-group').remove(); - layer.style('display', 'none'); - } + // exit + boxes.exit() + .remove(); + // enter/update + boxes.enter() + .append('path') + .attr('class', classes) + .merge(boxes) + .attr('d', d3_geoPath()); + } - function click(d) { - var service = getService(); - if (!service) return; - service - .selectImage(d) - .updateViewer(d.key, context) - .showViewer(); + function drawLabels(selection, graph, entities, filter, dimensions, fullRedraw) { + var wireframe = context.surface().classed('fill-wireframe'); + var zoom = geoScaleToZoom(projection$$1.scale()); - context.map().centerEase(d.loc); - } + var labelable = []; + var renderNodeAs = {}; + var i, j, k, entity, geometry; + for (i = 0; i < labelStack.length; i++) { + labelable.push([]); + } - function mouseover(d) { - var service = getService(); - if (service) service.setStyles(d); - } + if (fullRedraw) { + _rdrawn.clear(); + _rskipped.clear(); + _entitybboxes = {}; + } else { + for (i = 0; i < entities.length; i++) { + entity = entities[i]; + var toRemove = [] + .concat(_entitybboxes[entity.id] || []) + .concat(_entitybboxes[entity.id + 'I'] || []); + + for (j = 0; j < toRemove.length; j++) { + _rdrawn.remove(toRemove[j]); + _rskipped.remove(toRemove[j]); + } + } + } - function mouseout() { - var service = getService(); - if (service) service.setStyles(null); - } + // Loop through all the entities to do some preprocessing + for (i = 0; i < entities.length; i++) { + entity = entities[i]; + geometry = entity.geometry(graph); + + // Insert collision boxes around interesting points/vertices + if (geometry === 'point' || (geometry === 'vertex' && isInterestingVertex(entity))) { + var hasDirections = entity.directions(graph, projection$$1).length; + var markerPadding; + + if (!wireframe && geometry === 'point' && !(zoom >= 18 && hasDirections)) { + renderNodeAs[entity.id] = 'point'; + markerPadding = 20; // extra y for marker height + } else { + renderNodeAs[entity.id] = 'vertex'; + markerPadding = 0; + } + + var coord = projection$$1(entity.loc); + var nodePadding = 10; + var bbox = { + minX: coord[0] - nodePadding, + minY: coord[1] - nodePadding - markerPadding, + maxX: coord[0] + nodePadding, + maxY: coord[1] + nodePadding + }; + + doInsert(bbox, entity.id + 'P'); + } + + // From here on, treat vertices like points + if (geometry === 'vertex') { + geometry = 'point'; + } + + // Determine which entities are label-able + var preset = geometry === 'area' && context.presets().match(entity, graph); + var icon = preset && !blacklisted(preset) && preset.icon; + + if (!icon && !utilDisplayName(entity)) + continue; + + for (k = 0; k < labelStack.length; k++) { + var matchGeom = labelStack[k][0]; + var matchKey = labelStack[k][1]; + var matchVal = labelStack[k][2]; + var hasVal = entity.tags[matchKey]; + + if (geometry === matchGeom && hasVal && (matchVal === '*' || matchVal === hasVal)) { + labelable[k].push(entity); + break; + } + } + } + var positions = { + point: [], + line: [], + area: [] + }; - function transform(d) { - var t = svgPointTransform(projection)(d); - if (d.ca) { - t += ' rotate(' + Math.floor(d.ca) + ',0,0)'; - } - return t; - } - - - function update() { - var viewer = d3_select('#photoviewer'); - var selected = viewer.empty() ? undefined : viewer.datum(); - - var z = ~~context.map().zoom(); - var showMarkers = (z >= minMarkerZoom); - var showViewfields = (z >= minViewfieldZoom); - - var service = getService(); - var sequences = (service ? service.sequences(projection) : []); - var images = (service && showMarkers ? service.images(projection) : []); - - var traces = layer.selectAll('.sequences').selectAll('.sequence') - .data(sequences, function(d) { return d.properties.key; }); - - // exit - traces.exit() - .remove(); - - // enter/update - traces = traces.enter() - .append('path') - .attr('class', 'sequence') - .merge(traces) - .attr('d', svgPath(projection).geojson); - - - var groups = layer.selectAll('.markers').selectAll('.viewfield-group') - .data(images, function(d) { return d.key; }); - - // exit - groups.exit() - .remove(); - - // enter - var groupsEnter = groups.enter() - .append('g') - .attr('class', 'viewfield-group') - .on('mouseover', mouseover) - .on('mouseout', mouseout) - .on('click', click); - - groupsEnter - .append('g') - .attr('class', 'viewfield-scale'); - - // update - var markers = groups - .merge(groupsEnter) - .sort(function(a, b) { - return (a === selected) ? 1 - : (b === selected) ? -1 - : b.loc[1] - a.loc[1]; // sort Y - }) - .attr('transform', transform) - .select('.viewfield-scale'); - - - markers.selectAll('circle') - .data([0]) - .enter() - .append('circle') - .attr('dx', '0') - .attr('dy', '0') - .attr('r', '6'); - - var viewfields = markers.selectAll('.viewfield') - .data(showViewfields ? [0] : []); - - viewfields.exit() - .remove(); - - viewfields.enter() // viewfields may or may not be drawn... - .insert('path', 'circle') // but if they are, draw below the circles - .attr('class', 'viewfield') - .attr('transform', 'scale(1.5,1.5),translate(-8, -13)') - .attr('d', viewfieldPath); - - function viewfieldPath() { - var d = this.parentNode.__data__; - if (d.pano) { - return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0'; - } else { - return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z'; - } - } - } + var labelled = { + point: [], + line: [], + area: [] + }; + // Try and find a valid label for labellable entities + for (k = 0; k < labelable.length; k++) { + var fontSize = labelStack[k][3]; + + for (i = 0; i < labelable[k].length; i++) { + entity = labelable[k][i]; + geometry = entity.geometry(graph); + + var getName = (geometry === 'line') ? utilDisplayNameForPath : utilDisplayName; + var name = getName(entity); + var width = name && textWidth(name, fontSize); + var p = null; + + if (geometry === 'point' || geometry === 'vertex') { + // no point or vertex labels in wireframe mode + // no vertex labels at low zooms (vertices have no icons) + if (wireframe) continue; + var renderAs = renderNodeAs[entity.id]; + if (renderAs === 'vertex' && zoom < 17) continue; + + p = getPointLabel(entity, width, fontSize, renderAs); + + } else if (geometry === 'line') { + p = getLineLabel(entity, width, fontSize); + + } else if (geometry === 'area') { + p = getAreaLabel(entity, width, fontSize); + } + + if (p) { + if (geometry === 'vertex') { geometry = 'point'; } // treat vertex like point + p.classes = geometry + ' tag-' + labelStack[k][1]; + positions[geometry].push(p); + labelled[geometry].push(entity); + } + } + } - function drawImages(selection$$1) { - var enabled = svgMapillaryImages$$1.enabled, - service = getService(); - layer = selection$$1.selectAll('.layer-mapillary-images') - .data(service ? [0] : []); + function isInterestingVertex(entity) { + var selectedIDs = context.selectedIDs(); - layer.exit() - .remove(); + return entity.hasInterestingTags() || + entity.isEndpoint(graph) || + entity.isConnected(graph) || + selectedIDs.indexOf(entity.id) !== -1 || + some(graph.parentWays(entity), function(parent) { + return selectedIDs.indexOf(parent.id) !== -1; + }); + } - var layerEnter = layer.enter() - .append('g') - .attr('class', 'layer-mapillary-images') - .style('display', enabled ? 'block' : 'none'); - layerEnter - .append('g') - .attr('class', 'sequences'); + function getPointLabel(entity, width, height, geometry) { + var y = (geometry === 'point' ? -12 : 0); + var pointOffsets = { + ltr: [15, y, 'start'], + rtl: [-15, y, 'end'] + }; + + var coord = projection$$1(entity.loc); + var textPadding = 2; + var offset = pointOffsets[textDirection]; + var p = { + height: height, + width: width, + x: coord[0] + offset[0], + y: coord[1] + offset[1], + textAnchor: offset[2] + }; + + // insert a collision box for the text label.. + var bbox; + if (textDirection === 'rtl') { + bbox = { + minX: p.x - width - textPadding, + minY: p.y - (height / 2) - textPadding, + maxX: p.x + textPadding, + maxY: p.y + (height / 2) + textPadding + }; + } else { + bbox = { + minX: p.x - textPadding, + minY: p.y - (height / 2) - textPadding, + maxX: p.x + width + textPadding, + maxY: p.y + (height / 2) + textPadding + }; + } + + if (tryInsert([bbox], entity.id, true)) { + return p; + } + } - layerEnter - .append('g') - .attr('class', 'markers'); - layer = layerEnter - .merge(layer); + function getLineLabel(entity, width, height) { + var viewport = geoExtent$$1(context.projection.clipExtent()).polygon(); + var points = map$3(graph.childNodes(entity), 'loc').map(projection$$1); + var length = geoPathLength(points); + + if (length < width + 20) return; + + // todo: properly clip points to viewport + + // % along the line to attempt to place the label + var lineOffsets = [50, 45, 55, 40, 60, 35, 65, 30, 70, + 25, 75, 20, 80, 15, 95, 10, 90, 5, 95]; + var padding = 3; + + for (var i = 0; i < lineOffsets.length; i++) { + var offset = lineOffsets[i]; + var middle = offset / 100 * length; + var start = middle - width / 2; + + if (start < 0 || start + width > length) continue; + + // generate subpath and ignore paths that are invalid or don't cross viewport. + var sub = subpath(points, start, start + width); + if (!sub || !geoPolygonIntersectsPolygon(viewport, sub, true)) { + continue; + } + + var isReverse = reverse(sub); + if (isReverse) { + sub = sub.reverse(); + } + + var bboxes = []; + var boxsize = (height + 2) / 2; + + for (var j = 0; j < sub.length - 1; j++) { + var a = sub[j]; + var b = sub[j + 1]; + + // split up the text into small collision boxes + var num = Math.max(1, Math.floor(geoVecLength(a, b) / boxsize / 2)); + + for (var box = 0; box < num; box++) { + var p = geoVecInterp(a, b, box / num); + var x0 = p[0] - boxsize - padding; + var y0 = p[1] - boxsize - padding; + var x1 = p[0] + boxsize + padding; + var y1 = p[1] + boxsize + padding; + + bboxes.push({ + minX: Math.min(x0, x1), + minY: Math.min(y0, y1), + maxX: Math.max(x0, x1), + maxY: Math.max(y0, y1) + }); + } + } + + if (tryInsert(bboxes, entity.id, false)) { // accept this one + return { + 'font-size': height + 2, + lineString: lineString(sub), + startOffset: offset + '%' + }; + } + } + + function reverse(p) { + var angle = Math.atan2(p[1][1] - p[0][1], p[1][0] - p[0][0]); + return !(p[0][0] < p[p.length - 1][0] && angle < Math.PI/2 && angle > -Math.PI/2); + } + + function lineString(points) { + return 'M' + points.join('L'); + } + + function subpath(points, from, to) { + var sofar = 0; + var start, end, i0, i1; + + for (var i = 0; i < points.length - 1; i++) { + var a = points[i]; + var b = points[i + 1]; + var current = geoVecLength(a, b); + var portion; + if (!start && sofar + current >= from) { + portion = (from - sofar) / current; + start = [ + a[0] + portion * (b[0] - a[0]), + a[1] + portion * (b[1] - a[1]) + ]; + i0 = i + 1; + } + if (!end && sofar + current >= to) { + portion = (to - sofar) / current; + end = [ + a[0] + portion * (b[0] - a[0]), + a[1] + portion * (b[1] - a[1]) + ]; + i1 = i + 1; + } + sofar += current; + } + + var result = points.slice(i0, i1); + result.unshift(start); + result.push(end); + return result; + } + } - if (enabled) { - if (service && ~~context.map().zoom() >= minZoom) { - editOn(); - update(); - service.loadImages(projection); - } else { - editOff(); - } - } - } + function getAreaLabel(entity, width, height) { + var centroid = path.centroid(entity.asGeoJSON(graph, true)); + var extent = entity.extent(graph); + var areaWidth = projection$$1(extent[1])[0] - projection$$1(extent[0])[0]; + + if (isNaN(centroid[0]) || areaWidth < 20) return; + + var preset = context.presets().match(entity, context.graph()); + var picon = preset && preset.icon; + var iconSize = 17; + var padding = 2; + var p = {}; + + if (picon) { // icon and label.. + if (addIcon()) { + addLabel(iconSize + padding); + return p; + } + } else { // label only.. + if (addLabel(0)) { + return p; + } + } + + + function addIcon() { + var iconX = centroid[0] - (iconSize / 2); + var iconY = centroid[1] - (iconSize / 2); + var bbox = { + minX: iconX, + minY: iconY, + maxX: iconX + iconSize, + maxY: iconY + iconSize + }; + + if (tryInsert([bbox], entity.id + 'I', true)) { + p.transform = 'translate(' + iconX + ',' + iconY + ')'; + return true; + } + return false; + } + + function addLabel(yOffset) { + if (width && areaWidth >= width + 20) { + var labelX = centroid[0]; + var labelY = centroid[1] + yOffset; + var bbox = { + minX: labelX - (width / 2) - padding, + minY: labelY - (height / 2) - padding, + maxX: labelX + (width / 2) + padding, + maxY: labelY + (height / 2) + padding + }; + + if (tryInsert([bbox], entity.id, true)) { + p.x = labelX; + p.y = labelY; + p.textAnchor = 'middle'; + p.height = height; + return true; + } + } + return false; + } + } - drawImages.enabled = function(_) { - if (!arguments.length) return svgMapillaryImages$$1.enabled; - svgMapillaryImages$$1.enabled = _; - if (svgMapillaryImages$$1.enabled) { - showLayer(); - } else { - hideLayer(); - } - dispatch.call('change'); - return this; - }; + // force insert a singular bounding box + // singular box only, no array, id better be unique + function doInsert(bbox, id) { + bbox.id = id; - drawImages.supported = function() { - return !!getService(); - }; + var oldbox = _entitybboxes[id]; + if (oldbox) { + _rdrawn.remove(oldbox); + } + _entitybboxes[id] = bbox; + _rdrawn.insert(bbox); + } - init(); - return drawImages; -} + function tryInsert(bboxes, id, saveSkipped) { + var skipped = false; -function svgMapillarySigns(projection, context, dispatch) { - var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000); - var minZoom = 12; - var layer = d3_select(null); - var _mapillary; + for (var i = 0; i < bboxes.length; i++) { + var bbox = bboxes[i]; + bbox.id = id; + // Check that label is visible + if (bbox.minX < 0 || bbox.minY < 0 || bbox.maxX > dimensions[0] || bbox.maxY > dimensions[1]) { + skipped = true; + break; + } + if (_rdrawn.collides(bbox)) { + skipped = true; + break; + } + } - function init() { - if (svgMapillarySigns.initialized) return; // run once - svgMapillarySigns.enabled = false; - svgMapillarySigns.initialized = true; - } + _entitybboxes[id] = bboxes; + if (skipped) { + if (saveSkipped) { + _rskipped.load(bboxes); + } + } else { + _rdrawn.load(bboxes); + } - function getService() { - if (services.mapillary && !_mapillary) { - _mapillary = services.mapillary; - _mapillary.event.on('loadedSigns', throttledRedraw); - } else if (!services.mapillary && _mapillary) { - _mapillary = null; - } - return _mapillary; - } + return !skipped; + } - function showLayer() { - var service = getService(); - if (!service) return; + var layer = selection.selectAll('.layer-labels'); + var halo = layer.selectAll('.layer-labels-halo'); + var label = layer.selectAll('.layer-labels-label'); + var debug = layer.selectAll('.layer-labels-debug'); - service.loadViewer(context); - editOn(); - } + // points + drawPointLabels(label, labelled.point, filter, 'pointlabel', positions.point); + drawPointLabels(halo, labelled.point, filter, 'pointlabel-halo', positions.point); + // lines + drawLinePaths(halo, labelled.line, filter, '', positions.line); + drawLineLabels(label, labelled.line, filter, 'linelabel', positions.line); + drawLineLabels(halo, labelled.line, filter, 'linelabel-halo', positions.line); - function hideLayer() { - throttledRedraw.cancel(); - editOff(); - } + // areas + drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area); + drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area); + drawAreaIcons(label, labelled.area, filter, 'areaicon', positions.area); + drawAreaIcons(halo, labelled.area, filter, 'areaicon-halo', positions.area); + // debug + drawCollisionBoxes(debug, _rskipped, 'debug-skipped'); + drawCollisionBoxes(debug, _rdrawn, 'debug-drawn'); - function editOn() { - layer.style('display', 'block'); - } + layer.call(filterLabels); + } - function editOff() { - layer.selectAll('.icon-sign').remove(); - layer.style('display', 'none'); - } + function filterLabels(selection) { + var layers = selection + .selectAll('.layer-labels-label, .layer-labels-halo'); + layers.selectAll('.nolabel') + .classed('nolabel', false); - function click(d) { - var service = getService(); - if (!service) return; + var mouse = context.mouse(); + var graph = context.graph(); + var selectedIDs = context.selectedIDs(); + var ids = []; + var pad, bbox; - context.map().centerEase(d.loc); + // hide labels near the mouse + if (mouse) { + pad = 20; + bbox = { minX: mouse[0] - pad, minY: mouse[1] - pad, maxX: mouse[0] + pad, maxY: mouse[1] + pad }; + ids.push.apply(ids, map$3(_rdrawn.search(bbox), 'id')); + } - var selected = service.getSelectedImage(); - var selectedImageKey = selected && selected.key; - var imageKey; + // hide labels on selected nodes (they look weird when dragging / haloed) + for (var i = 0; i < selectedIDs.length; i++) { + var entity = graph.hasEntity(selectedIDs[i]); + if (entity && entity.type === 'node') { + ids.push(selectedIDs[i]); + } + } - // Pick one of the images the sign was detected in, - // preference given to an image already selected. - d.detections.forEach(function(detection) { - if (!imageKey || selectedImageKey === detection.image_key) { - imageKey = detection.image_key; - } - }); + layers.selectAll(utilEntitySelector(ids)) + .classed('nolabel', true); + + + // draw the mouse bbox if debugging is on.. + var debug = selection.selectAll('.layer-labels-debug'); + var gj = []; + if (context.getDebug('collision')) { + gj = bbox ? [{ + type: 'Polygon', + coordinates: [[ + [bbox.minX, bbox.minY], + [bbox.maxX, bbox.minY], + [bbox.maxX, bbox.maxY], + [bbox.minX, bbox.maxY], + [bbox.minX, bbox.minY] + ]] + }] : []; + } - service - .selectImage(null, imageKey) - .updateViewer(imageKey, context) - .showViewer(); - } + var box = debug.selectAll('.debug-mouse') + .data(gj); + // exit + box.exit() + .remove(); - function update() { - var service = getService(); - var data = (service ? service.signs(projection) : []); - var viewer = d3_select('#photoviewer'); - var selected = viewer.empty() ? undefined : viewer.datum(); - var selectedImageKey = selected && selected.key; + // enter/update + box.enter() + .append('path') + .attr('class', 'debug debug-mouse yellow') + .merge(box) + .attr('d', d3_geoPath()); + } - var signs = layer.selectAll('.icon-sign') - .data(data, function(d) { return d.key; }); - signs.exit() - .remove(); + var throttleFilterLabels = throttle(utilCallWhenIdle(filterLabels), 100); - var enter = signs.enter() - .append('foreignObject') - .attr('class', 'icon-sign') - .attr('width', '24px') // for Firefox - .attr('height', '24px') // for Firefox - .classed('selected', function(d) { - return some(d.detections, function(detection) { - return detection.image_key === selectedImageKey; - }); - }) - .on('click', click); - enter - .append('xhtml:body') - .attr('class', 'icon-sign-body') - .html(service.signHTML); + drawLabels.observe = function(selection) { + var listener = function() { throttleFilterLabels(selection); }; + selection.on('mousemove.hidelabels', listener); + context.on('enter.hidelabels', listener); + }; - signs - .merge(enter) - .attr('x', function(d) { return projection(d.loc)[0] - 12; }) // offset by -12px to - .attr('y', function(d) { return projection(d.loc)[1] - 12; }); // center signs on loc - } + drawLabels.off = function(selection) { + throttleFilterLabels.cancel(); + selection.on('mousemove.hidelabels', null); + context.on('enter.hidelabels', null); + }; - function drawSigns(selection$$1) { - var enabled = svgMapillarySigns.enabled, - service = getService(); - layer = selection$$1.selectAll('.layer-mapillary-signs') - .data(service ? [0] : []); + return drawLabels; + } - layer.exit() - .remove(); + function svgMapillaryImages$$1(projection, context, dispatch) { + var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000); + var minZoom = 12; + var minMarkerZoom = 16; + var minViewfieldZoom = 18; + var layer = select(null); + var _mapillary; - layer = layer.enter() - .append('g') - .attr('class', 'layer-mapillary-signs') - .style('display', enabled ? 'block' : 'none') - .merge(layer); - if (enabled) { - if (service && ~~context.map().zoom() >= minZoom) { - editOn(); - update(); - service.loadSigns(context, projection); - } else { - editOff(); - } - } - } + function init() { + if (svgMapillaryImages$$1.initialized) return; // run once + svgMapillaryImages$$1.enabled = false; + svgMapillaryImages$$1.initialized = true; + } - drawSigns.enabled = function(_) { - if (!arguments.length) return svgMapillarySigns.enabled; - svgMapillarySigns.enabled = _; - if (svgMapillarySigns.enabled) { - showLayer(); - } else { - hideLayer(); - } - dispatch.call('change'); - return this; - }; + function getService() { + if (services.mapillary && !_mapillary) { + _mapillary = services.mapillary; + _mapillary.event.on('loadedImages', throttledRedraw); + } else if (!services.mapillary && _mapillary) { + _mapillary = null; + } + return _mapillary; + } - drawSigns.supported = function() { - var service = getService(); - return (service && service.signsSupported()); - }; + function showLayer() { + var service = getService(); + if (!service) return; - init(); - return drawSigns; -} + service.loadViewer(context); + editOn(); -function svgOpenstreetcamImages$$1(projection, context, dispatch) { - var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000); - var minZoom = 12; - var minMarkerZoom = 16; - var minViewfieldZoom = 18; - var layer = d3_select(null); - var _openstreetcam; + layer + .style('opacity', 0) + .transition() + .duration(250) + .style('opacity', 1) + .on('end', function () { dispatch.call('change'); }); + } - function init() { - if (svgOpenstreetcamImages$$1.initialized) return; // run once - svgOpenstreetcamImages$$1.enabled = false; - svgOpenstreetcamImages$$1.initialized = true; - } + function hideLayer() { + var service = getService(); + if (service) { + service.hideViewer(); + } + throttledRedraw.cancel(); - function getService() { - if (services.openstreetcam && !_openstreetcam) { - _openstreetcam = services.openstreetcam; - _openstreetcam.event.on('loadedImages', throttledRedraw); - } else if (!services.openstreetcam && _openstreetcam) { - _openstreetcam = null; - } + layer + .transition() + .duration(250) + .style('opacity', 0) + .on('end', editOff); + } - return _openstreetcam; - } + function editOn() { + layer.style('display', 'block'); + } - function showLayer() { - var service = getService(); - if (!service) return; - service.loadViewer(context); - editOn(); + function editOff() { + layer.selectAll('.viewfield-group').remove(); + layer.style('display', 'none'); + } - layer - .style('opacity', 0) - .transition() - .duration(250) - .style('opacity', 1) - .on('end', function () { dispatch.call('change'); }); - } + function click(d) { + var service = getService(); + if (!service) return; - function hideLayer() { - var service = getService(); - if (service) { - service.hideViewer(); - } + service + .selectImage(d) + .updateViewer(d.key, context) + .showViewer(); - throttledRedraw.cancel(); + context.map().centerEase(d.loc); + } - layer - .transition() - .duration(250) - .style('opacity', 0) - .on('end', editOff); - } + function mouseover(d) { + var service = getService(); + if (service) service.setStyles(d); + } - function editOn() { - layer.style('display', 'block'); - } + function mouseout() { + var service = getService(); + if (service) service.setStyles(null); + } - function editOff() { - layer.selectAll('.viewfield-group').remove(); - layer.style('display', 'none'); - } + function transform(d) { + var t = svgPointTransform(projection)(d); + if (d.ca) { + t += ' rotate(' + Math.floor(d.ca) + ',0,0)'; + } + return t; + } - function click(d) { - var service = getService(); - if (!service) return; - service - .selectImage(d) - .updateViewer(d) - .showViewer(); + function update() { + var viewer = select('#photoviewer'); + var selected = viewer.empty() ? undefined : viewer.datum(); + + var z = ~~context.map().zoom(); + var showMarkers = (z >= minMarkerZoom); + var showViewfields = (z >= minViewfieldZoom); + + var service = getService(); + var sequences = (service ? service.sequences(projection) : []); + var images = (service && showMarkers ? service.images(projection) : []); + + var traces = layer.selectAll('.sequences').selectAll('.sequence') + .data(sequences, function(d) { return d.properties.key; }); + + // exit + traces.exit() + .remove(); + + // enter/update + traces = traces.enter() + .append('path') + .attr('class', 'sequence') + .merge(traces) + .attr('d', svgPath(projection).geojson); + + + var groups = layer.selectAll('.markers').selectAll('.viewfield-group') + .data(images, function(d) { return d.key; }); + + // exit + groups.exit() + .remove(); + + // enter + var groupsEnter = groups.enter() + .append('g') + .attr('class', 'viewfield-group') + .on('mouseover', mouseover) + .on('mouseout', mouseout) + .on('click', click); + + groupsEnter + .append('g') + .attr('class', 'viewfield-scale'); + + // update + var markers = groups + .merge(groupsEnter) + .sort(function(a, b) { + return (a === selected) ? 1 + : (b === selected) ? -1 + : b.loc[1] - a.loc[1]; // sort Y + }) + .attr('transform', transform) + .select('.viewfield-scale'); + + + markers.selectAll('circle') + .data([0]) + .enter() + .append('circle') + .attr('dx', '0') + .attr('dy', '0') + .attr('r', '6'); + + var viewfields = markers.selectAll('.viewfield') + .data(showViewfields ? [0] : []); + + viewfields.exit() + .remove(); + + viewfields.enter() // viewfields may or may not be drawn... + .insert('path', 'circle') // but if they are, draw below the circles + .attr('class', 'viewfield') + .attr('transform', 'scale(1.5,1.5),translate(-8, -13)') + .attr('d', viewfieldPath); + + function viewfieldPath() { + var d = this.parentNode.__data__; + if (d.pano) { + return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0'; + } else { + return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z'; + } + } + } - context.map().centerEase(d.loc); - } + function drawImages(selection$$1) { + var enabled = svgMapillaryImages$$1.enabled, + service = getService(); - function mouseover(d) { - var service = getService(); - if (service) service.setStyles(d); - } + layer = selection$$1.selectAll('.layer-mapillary-images') + .data(service ? [0] : []); + layer.exit() + .remove(); - function mouseout() { - var service = getService(); - if (service) service.setStyles(null); - } + var layerEnter = layer.enter() + .append('g') + .attr('class', 'layer-mapillary-images') + .style('display', enabled ? 'block' : 'none'); + layerEnter + .append('g') + .attr('class', 'sequences'); - function transform(d) { - var t = svgPointTransform(projection)(d); - if (d.ca) { - t += ' rotate(' + Math.floor(d.ca) + ',0,0)'; - } - return t; - } + layerEnter + .append('g') + .attr('class', 'markers'); + layer = layerEnter + .merge(layer); - function update() { - var viewer = d3_select('#photoviewer'); - var selected = viewer.empty() ? undefined : viewer.datum(); + if (enabled) { + if (service && ~~context.map().zoom() >= minZoom) { + editOn(); + update(); + service.loadImages(projection); + } else { + editOff(); + } + } + } - var z = ~~context.map().zoom(); - var showMarkers = (z >= minMarkerZoom); - var showViewfields = (z >= minViewfieldZoom); - var service = getService(); - var sequences = (service ? service.sequences(projection) : []); - var images = (service && showMarkers ? service.images(projection) : []); + drawImages.enabled = function(_) { + if (!arguments.length) return svgMapillaryImages$$1.enabled; + svgMapillaryImages$$1.enabled = _; + if (svgMapillaryImages$$1.enabled) { + showLayer(); + } else { + hideLayer(); + } + dispatch.call('change'); + return this; + }; - var traces = layer.selectAll('.sequences').selectAll('.sequence') - .data(sequences, function(d) { return d.properties.key; }); - // exit - traces.exit() - .remove(); + drawImages.supported = function() { + return !!getService(); + }; - // enter/update - traces = traces.enter() - .append('path') - .attr('class', 'sequence') - .merge(traces) - .attr('d', svgPath(projection).geojson); + init(); + return drawImages; + } - var groups = layer.selectAll('.markers').selectAll('.viewfield-group') - .data(images, function(d) { return d.key; }); + function svgMapillarySigns(projection, context, dispatch) { + var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000); + var minZoom = 12; + var layer = select(null); + var _mapillary; - // exit - groups.exit() - .remove(); - // enter - var groupsEnter = groups.enter() - .append('g') - .attr('class', 'viewfield-group') - .on('mouseover', mouseover) - .on('mouseout', mouseout) - .on('click', click); + function init() { + if (svgMapillarySigns.initialized) return; // run once + svgMapillarySigns.enabled = false; + svgMapillarySigns.initialized = true; + } - groupsEnter - .append('g') - .attr('class', 'viewfield-scale'); - // update - var markers = groups - .merge(groupsEnter) - .sort(function(a, b) { - return (a === selected) ? 1 - : (b === selected) ? -1 - : b.loc[1] - a.loc[1]; // sort Y - }) - .attr('transform', transform) - .select('.viewfield-scale'); + function getService() { + if (services.mapillary && !_mapillary) { + _mapillary = services.mapillary; + _mapillary.event.on('loadedSigns', throttledRedraw); + } else if (!services.mapillary && _mapillary) { + _mapillary = null; + } + return _mapillary; + } - markers.selectAll('circle') - .data([0]) - .enter() - .append('circle') - .attr('dx', '0') - .attr('dy', '0') - .attr('r', '6'); + function showLayer() { + var service = getService(); + if (!service) return; - var viewfields = markers.selectAll('.viewfield') - .data(showViewfields ? [0] : []); + service.loadViewer(context); + editOn(); + } - viewfields.exit() - .remove(); - viewfields.enter() // viewfields may or may not be drawn... - .insert('path', 'circle') // but if they are, draw below the circles - .attr('class', 'viewfield') - .attr('transform', 'scale(1.5,1.5),translate(-8, -13)') - .attr('d', 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z'); - } + function hideLayer() { + throttledRedraw.cancel(); + editOff(); + } - function drawImages(selection$$1) { - var enabled = svgOpenstreetcamImages$$1.enabled, - service = getService(); + function editOn() { + layer.style('display', 'block'); + } - layer = selection$$1.selectAll('.layer-openstreetcam-images') - .data(service ? [0] : []); - layer.exit() - .remove(); + function editOff() { + layer.selectAll('.icon-sign').remove(); + layer.style('display', 'none'); + } - var layerEnter = layer.enter() - .append('g') - .attr('class', 'layer-openstreetcam-images') - .style('display', enabled ? 'block' : 'none'); - layerEnter - .append('g') - .attr('class', 'sequences'); + function click(d) { + var service = getService(); + if (!service) return; - layerEnter - .append('g') - .attr('class', 'markers'); - - layer = layerEnter - .merge(layer); - - if (enabled) { - if (service && ~~context.map().zoom() >= minZoom) { - editOn(); - update(); - service.loadImages(projection); - } else { - editOff(); - } - } - } + context.map().centerEase(d.loc); + var selected = service.getSelectedImage(); + var selectedImageKey = selected && selected.key; + var imageKey; - drawImages.enabled = function(_) { - if (!arguments.length) return svgOpenstreetcamImages$$1.enabled; - svgOpenstreetcamImages$$1.enabled = _; - if (svgOpenstreetcamImages$$1.enabled) { - showLayer(); - } else { - hideLayer(); - } - dispatch.call('change'); - return this; - }; + // Pick one of the images the sign was detected in, + // preference given to an image already selected. + d.detections.forEach(function(detection) { + if (!imageKey || selectedImageKey === detection.image_key) { + imageKey = detection.image_key; + } + }); + service + .selectImage(null, imageKey) + .updateViewer(imageKey, context) + .showViewer(); + } - drawImages.supported = function() { - return !!getService(); - }; + function update() { + var service = getService(); + var data = (service ? service.signs(projection) : []); + var viewer = select('#photoviewer'); + var selected = viewer.empty() ? undefined : viewer.datum(); + var selectedImageKey = selected && selected.key; + + var signs = layer.selectAll('.icon-sign') + .data(data, function(d) { return d.key; }); + + signs.exit() + .remove(); + + var enter = signs.enter() + .append('foreignObject') + .attr('class', 'icon-sign') + .attr('width', '24px') // for Firefox + .attr('height', '24px') // for Firefox + .classed('selected', function(d) { + return some(d.detections, function(detection) { + return detection.image_key === selectedImageKey; + }); + }) + .on('click', click); + + enter + .append('xhtml:body') + .attr('class', 'icon-sign-body') + .html(service.signHTML); + + signs + .merge(enter) + .attr('x', function(d) { return projection(d.loc)[0] - 12; }) // offset by -12px to + .attr('y', function(d) { return projection(d.loc)[1] - 12; }); // center signs on loc + } - init(); - return drawImages; -} -function svgOsm(projection, context, dispatch) { - var enabled = true; + function drawSigns(selection$$1) { + var enabled = svgMapillarySigns.enabled, + service = getService(); + layer = selection$$1.selectAll('.layer-mapillary-signs') + .data(service ? [0] : []); - function drawOsm(selection) { - selection.selectAll('.layer-osm') - .data(['covered', 'areas', 'lines', 'points', 'labels']) - .enter() - .append('g') - .attr('class', function(d) { return 'layer-osm layer-' + d; }); + layer.exit() + .remove(); - selection.selectAll('.layer-areas').selectAll('.layer-areas-group') - .data(['areas', 'targets']) - .enter() - .append('g') - .attr('class', function(d) { return 'layer-areas-group layer-areas-' + d; }); + layer = layer.enter() + .append('g') + .attr('class', 'layer-mapillary-signs') + .style('display', enabled ? 'block' : 'none') + .merge(layer); - selection.selectAll('.layer-lines').selectAll('.layer-lines-group') - .data(['lines', 'targets']) - .enter() - .append('g') - .attr('class', function(d) { return 'layer-lines-group layer-lines-' + d; }); + if (enabled) { + if (service && ~~context.map().zoom() >= minZoom) { + editOn(); + update(); + service.loadSigns(context, projection); + } else { + editOff(); + } + } + } - selection.selectAll('.layer-points').selectAll('.layer-points-group') - .data(['points', 'midpoints', 'vertices', 'turns', 'targets']) - .enter() - .append('g') - .attr('class', function(d) { return 'layer-points-group layer-points-' + d; }); - selection.selectAll('.layer-labels').selectAll('.layer-labels-group') - .data(['halo', 'label', 'debug']) - .enter() - .append('g') - .attr('class', function(d) { return 'layer-labels-group layer-labels-' + d; }); - } + drawSigns.enabled = function(_) { + if (!arguments.length) return svgMapillarySigns.enabled; + svgMapillarySigns.enabled = _; + if (svgMapillarySigns.enabled) { + showLayer(); + } else { + hideLayer(); + } + dispatch.call('change'); + return this; + }; - function showLayer() { - var layer = context.surface().selectAll('.data-layer-osm'); - layer.interrupt(); + drawSigns.supported = function() { + var service = getService(); + return (service && service.signsSupported()); + }; - layer - .classed('disabled', false) - .style('opacity', 0) - .transition() - .duration(250) - .style('opacity', 1) - .on('end interrupt', function () { - dispatch.call('change'); - }); - } + init(); + return drawSigns; + } - function hideLayer() { - var layer = context.surface().selectAll('.data-layer-osm'); - layer.interrupt(); + function svgOpenstreetcamImages$$1(projection, context, dispatch) { + var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000); + var minZoom = 12; + var minMarkerZoom = 16; + var minViewfieldZoom = 18; + var layer = select(null); + var _openstreetcam; - layer - .transition() - .duration(250) - .style('opacity', 0) - .on('end interrupt', function () { - layer.classed('disabled', true); - dispatch.call('change'); - }); - } + function init() { + if (svgOpenstreetcamImages$$1.initialized) return; // run once + svgOpenstreetcamImages$$1.enabled = false; + svgOpenstreetcamImages$$1.initialized = true; + } - drawOsm.enabled = function(_) { - if (!arguments.length) return enabled; - enabled = _; - if (enabled) { - showLayer(); - } else { - hideLayer(); - } + function getService() { + if (services.openstreetcam && !_openstreetcam) { + _openstreetcam = services.openstreetcam; + _openstreetcam.event.on('loadedImages', throttledRedraw); + } else if (!services.openstreetcam && _openstreetcam) { + _openstreetcam = null; + } - dispatch.call('change'); - return this; - }; + return _openstreetcam; + } - return drawOsm; -} + function showLayer() { + var service = getService(); + if (!service) return; -function svgLayers(projection, context) { - var dispatch$$1 = dispatch('change'), - svg = d3_select(null), - layers = [ - { id: 'osm', layer: svgOsm(projection, context, dispatch$$1) }, - { id: 'gpx', layer: svgGpx$$1(projection, context, dispatch$$1) }, - { id: 'mapillary-images', layer: svgMapillaryImages$$1(projection, context, dispatch$$1) }, - { id: 'mapillary-signs', layer: svgMapillarySigns(projection, context, dispatch$$1) }, - { id: 'openstreetcam-images', layer: svgOpenstreetcamImages$$1(projection, context, dispatch$$1) }, - { id: 'debug', layer: svgDebug$$1(projection, context, dispatch$$1) } - ]; + service.loadViewer(context); + editOn(); + layer + .style('opacity', 0) + .transition() + .duration(250) + .style('opacity', 1) + .on('end', function () { dispatch.call('change'); }); + } - function drawLayers(selection$$1) { - svg = selection$$1.selectAll('.surface') - .data([0]); - svg = svg.enter() - .append('svg') - .attr('class', 'surface') - .merge(svg); + function hideLayer() { + var service = getService(); + if (service) { + service.hideViewer(); + } - var defs = svg.selectAll('.surface-defs') - .data([0]); + throttledRedraw.cancel(); - defs.enter() - .append('defs') - .attr('class', 'surface-defs'); + layer + .transition() + .duration(250) + .style('opacity', 0) + .on('end', editOff); + } - var groups = svg.selectAll('.data-layer') - .data(layers); - groups.exit() - .remove(); + function editOn() { + layer.style('display', 'block'); + } - groups.enter() - .append('g') - .attr('class', function(d) { return 'data-layer data-layer-' + d.id; }) - .merge(groups) - .each(function(d) { d3_select(this).call(d.layer); }); - } + function editOff() { + layer.selectAll('.viewfield-group').remove(); + layer.style('display', 'none'); + } - drawLayers.all = function() { - return layers; - }; + function click(d) { + var service = getService(); + if (!service) return; - drawLayers.layer = function(id) { - var obj = find$1(layers, function(o) {return o.id === id;}); - return obj && obj.layer; - }; + service + .selectImage(d) + .updateViewer(d) + .showViewer(); + context.map().centerEase(d.loc); + } - drawLayers.only = function(what) { - var arr = [].concat(what); - drawLayers.remove(difference(map$3(layers, 'id'), arr)); - return this; - }; + function mouseover(d) { + var service = getService(); + if (service) service.setStyles(d); + } - drawLayers.remove = function(what) { - var arr = [].concat(what); - arr.forEach(function(id) { - layers = reject(layers, function(o) {return o.id === id;}); - }); - dispatch$$1.call('change'); - return this; - }; + function mouseout() { + var service = getService(); + if (service) service.setStyles(null); + } - drawLayers.add = function(what) { - var arr = [].concat(what); - arr.forEach(function(obj) { - if ('id' in obj && 'layer' in obj) { - layers.push(obj); - } - }); - dispatch$$1.call('change'); - return this; - }; + function transform(d) { + var t = svgPointTransform(projection)(d); + if (d.ca) { + t += ' rotate(' + Math.floor(d.ca) + ',0,0)'; + } + return t; + } - drawLayers.dimensions = function(_) { - if (!arguments.length) return utilGetDimensions(svg); - utilSetDimensions(svg, _); - return this; - }; + function update() { + var viewer = select('#photoviewer'); + var selected = viewer.empty() ? undefined : viewer.datum(); + + var z = ~~context.map().zoom(); + var showMarkers = (z >= minMarkerZoom); + var showViewfields = (z >= minViewfieldZoom); + + var service = getService(); + var sequences = (service ? service.sequences(projection) : []); + var images = (service && showMarkers ? service.images(projection) : []); + + var traces = layer.selectAll('.sequences').selectAll('.sequence') + .data(sequences, function(d) { return d.properties.key; }); + + // exit + traces.exit() + .remove(); + + // enter/update + traces = traces.enter() + .append('path') + .attr('class', 'sequence') + .merge(traces) + .attr('d', svgPath(projection).geojson); + + + var groups = layer.selectAll('.markers').selectAll('.viewfield-group') + .data(images, function(d) { return d.key; }); + + // exit + groups.exit() + .remove(); + + // enter + var groupsEnter = groups.enter() + .append('g') + .attr('class', 'viewfield-group') + .on('mouseover', mouseover) + .on('mouseout', mouseout) + .on('click', click); + + groupsEnter + .append('g') + .attr('class', 'viewfield-scale'); + + // update + var markers = groups + .merge(groupsEnter) + .sort(function(a, b) { + return (a === selected) ? 1 + : (b === selected) ? -1 + : b.loc[1] - a.loc[1]; // sort Y + }) + .attr('transform', transform) + .select('.viewfield-scale'); + + + markers.selectAll('circle') + .data([0]) + .enter() + .append('circle') + .attr('dx', '0') + .attr('dy', '0') + .attr('r', '6'); + + var viewfields = markers.selectAll('.viewfield') + .data(showViewfields ? [0] : []); + + viewfields.exit() + .remove(); + + viewfields.enter() // viewfields may or may not be drawn... + .insert('path', 'circle') // but if they are, draw below the circles + .attr('class', 'viewfield') + .attr('transform', 'scale(1.5,1.5),translate(-8, -13)') + .attr('d', 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z'); + } - return utilRebind(drawLayers, dispatch$$1, 'on'); -} - -function svgLines$$1(projection, context) { - var detected = utilDetect(); - - var highway_stack = { - motorway: 0, - motorway_link: 1, - trunk: 2, - trunk_link: 3, - primary: 4, - primary_link: 5, - secondary: 6, - tertiary: 7, - unclassified: 8, - residential: 9, - service: 10, - footway: 11 - }; + function drawImages(selection$$1) { + var enabled = svgOpenstreetcamImages$$1.enabled, + service = getService(); - function drawTargets(selection, graph, entities, filter$$1) { - var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor '; - var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor '; - var getPath = svgPath(projection).geojson; - var activeID = context.activeID(); + layer = selection$$1.selectAll('.layer-openstreetcam-images') + .data(service ? [0] : []); - // The targets and nopes will be MultiLineString sub-segments of the ways - var data = { targets: [], nopes: [] }; + layer.exit() + .remove(); - entities.forEach(function(way) { - var features = svgSegmentWay(way, graph, activeID); - data.targets.push.apply(data.targets, features.passive); - data.nopes.push.apply(data.nopes, features.active); - }); + var layerEnter = layer.enter() + .append('g') + .attr('class', 'layer-openstreetcam-images') + .style('display', enabled ? 'block' : 'none'); + layerEnter + .append('g') + .attr('class', 'sequences'); - // Targets allow hover and vertex snapping - var targetData = data.targets.filter(getPath); - var targets = selection.selectAll('.line.target-allowed') - .filter(function(d) { return filter$$1(d.properties.entity); }) - .data(targetData, function key(d) { return d.id; }); + layerEnter + .append('g') + .attr('class', 'markers'); - // exit - targets.exit() - .remove(); + layer = layerEnter + .merge(layer); - // enter/update - targets.enter() - .append('path') - .merge(targets) - .attr('d', getPath) - .attr('class', function(d) { return 'way line target target-allowed ' + targetClass + d.id; }); + if (enabled) { + if (service && ~~context.map().zoom() >= minZoom) { + editOn(); + update(); + service.loadImages(projection); + } else { + editOff(); + } + } + } - // NOPE - var nopeData = data.nopes.filter(getPath); - var nopes = selection.selectAll('.line.target-nope') - .filter(function(d) { return filter$$1(d.properties.entity); }) - .data(nopeData, function key(d) { return d.id; }); + drawImages.enabled = function(_) { + if (!arguments.length) return svgOpenstreetcamImages$$1.enabled; + svgOpenstreetcamImages$$1.enabled = _; + if (svgOpenstreetcamImages$$1.enabled) { + showLayer(); + } else { + hideLayer(); + } + dispatch.call('change'); + return this; + }; - // exit - nopes.exit() - .remove(); - // enter/update - nopes.enter() - .append('path') - .merge(nopes) - .attr('d', getPath) - .attr('class', function(d) { return 'way line target target-nope ' + nopeClass + d.id; }); - } + drawImages.supported = function() { + return !!getService(); + }; - function drawLines(selection, graph, entities, filter$$1) { + init(); + return drawImages; + } - function waystack(a, b) { - var selected = context.selectedIDs(); - var scoreA = selected.indexOf(a.id) !== -1 ? 20 : 0; - var scoreB = selected.indexOf(b.id) !== -1 ? 20 : 0; + function svgOsm(projection, context, dispatch) { + var enabled = true; - if (a.tags.highway) { scoreA -= highway_stack[a.tags.highway]; } - if (b.tags.highway) { scoreB -= highway_stack[b.tags.highway]; } - return scoreA - scoreB; - } + function drawOsm(selection) { + selection.selectAll('.layer-osm') + .data(['covered', 'areas', 'lines', 'points', 'labels']) + .enter() + .append('g') + .attr('class', function(d) { return 'layer-osm layer-' + d; }); - function drawLineGroup(selection, klass, isSelected) { - // Note: Don't add `.selected` class in draw modes - var mode = context.mode(); - var isDrawing = mode && /^draw/.test(mode.id); - var selectedClass = (!isDrawing && isSelected) ? 'selected ' : ''; - - var lines = selection - .selectAll('path') - .filter(filter$$1) - .data(getPathData(isSelected), osmEntity$$1.key); - - lines.exit() - .remove(); - - // Optimization: Call expensive TagClasses only on enter selection. This - // works because osmEntity.key is defined to include the entity v attribute. - lines.enter() - .append('path') - .attr('class', function(d) { - var oldMPClass = oldMultiPolygonOuters[d.id] ? 'old-multipolygon ' : ''; - return 'way line ' + klass + ' ' + selectedClass + oldMPClass + d.id; - }) - .call(svgTagClasses()) - .merge(lines) - .sort(waystack) - .attr('d', getPath) - .call(svgTagClasses().tags(svgRelationMemberTags(graph))); - - return selection; - } + selection.selectAll('.layer-areas').selectAll('.layer-areas-group') + .data(['areas', 'targets']) + .enter() + .append('g') + .attr('class', function(d) { return 'layer-areas-group layer-areas-' + d; }); + selection.selectAll('.layer-lines').selectAll('.layer-lines-group') + .data(['lines', 'targets']) + .enter() + .append('g') + .attr('class', function(d) { return 'layer-lines-group layer-lines-' + d; }); - function getPathData(isSelected) { - return function() { - var layer = this.parentNode.__data__; - var data = pathdata[layer] || []; - return data.filter(function(d) { - if (isSelected) - return context.selectedIDs().indexOf(d.id) !== -1; - else - return context.selectedIDs().indexOf(d.id) === -1; - }); - }; - } + selection.selectAll('.layer-points').selectAll('.layer-points-group') + .data(['points', 'midpoints', 'vertices', 'turns', 'targets']) + .enter() + .append('g') + .attr('class', function(d) { return 'layer-points-group layer-points-' + d; }); + selection.selectAll('.layer-labels').selectAll('.layer-labels-group') + .data(['halo', 'label', 'debug']) + .enter() + .append('g') + .attr('class', function(d) { return 'layer-labels-group layer-labels-' + d; }); + } - var getPath = svgPath(projection, graph); - var ways = []; - var pathdata = {}; - var onewaydata = {}; - var oldMultiPolygonOuters = {}; - - for (var i = 0; i < entities.length; i++) { - var entity = entities[i]; - var outer = osmSimpleMultipolygonOuterMember(entity, graph); - if (outer) { - ways.push(entity.mergeTags(outer.tags)); - oldMultiPolygonOuters[outer.id] = true; - } else if (entity.geometry(graph) === 'line') { - ways.push(entity); - } - } - ways = ways.filter(getPath); - pathdata = groupBy(ways, function(way) { return way.layer(); }); + function showLayer() { + var layer = context.surface().selectAll('.data-layer-osm'); + layer.interrupt(); - forOwn(pathdata, function(v, k) { - var arr = filter(v, function(d) { return d.isOneWay(); }); - onewaydata[k] = flatten(map$3(arr, svgOneWaySegments(projection, graph, 35))); - }); + layer + .classed('disabled', false) + .style('opacity', 0) + .transition() + .duration(250) + .style('opacity', 1) + .on('end interrupt', function () { + dispatch.call('change'); + }); + } - var covered = selection.selectAll('.layer-covered'); // under areas - var uncovered = selection.selectAll('.layer-lines .layer-lines-lines'); // over areas - - [covered, uncovered].forEach(function(selection) { - var range$$1 = (selection === covered ? d3_range(-10,0) : d3_range(0,11)); - var layergroup = selection - .selectAll('g.layergroup') - .data(range$$1); - - layergroup = layergroup.enter() - .append('g') - .attr('class', function(d) { return 'layergroup layer' + String(d); }) - .merge(layergroup); - - layergroup - .selectAll('g.linegroup') - .data(['shadow', 'casing', 'stroke', 'shadow-highlighted', 'casing-highlighted', 'stroke-highlighted']) - .enter() - .append('g') - .attr('class', function(d) { return 'linegroup line-' + d; }); - - layergroup.selectAll('g.line-shadow') - .call(drawLineGroup, 'shadow', false); - layergroup.selectAll('g.line-casing') - .call(drawLineGroup, 'casing', false); - layergroup.selectAll('g.line-stroke') - .call(drawLineGroup, 'stroke', false); - - layergroup.selectAll('g.line-shadow-highlighted') - .call(drawLineGroup, 'shadow', true); - layergroup.selectAll('g.line-casing-highlighted') - .call(drawLineGroup, 'casing', true); - layergroup.selectAll('g.line-stroke-highlighted') - .call(drawLineGroup, 'stroke', true); - - - var onewaygroup = layergroup - .selectAll('g.onewaygroup') - .data(['oneway']); - - onewaygroup = onewaygroup.enter() - .append('g') - .attr('class', 'onewaygroup') - .merge(onewaygroup); - - var oneways = onewaygroup - .selectAll('path') - .filter(filter$$1) - .data( - function data() { return onewaydata[this.parentNode.__data__] || []; }, - function key(d) { return [d.id, d.index]; } - ); - - oneways.exit() - .remove(); - - oneways = oneways.enter() - .append('path') - .attr('class', 'oneway') - .attr('marker-mid', 'url(#oneway-marker)') - .merge(oneways) - .attr('d', function(d) { return d.d; }); - - if (detected.ie) { - oneways.each(function() { this.parentNode.insertBefore(this, this); }); - } - }); + function hideLayer() { + var layer = context.surface().selectAll('.data-layer-osm'); + layer.interrupt(); - // touch targets - selection.selectAll('.layer-lines .layer-lines-targets') - .call(drawTargets, graph, ways, filter$$1); - } + layer + .transition() + .duration(250) + .style('opacity', 0) + .on('end interrupt', function () { + layer.classed('disabled', true); + dispatch.call('change'); + }); + } - return drawLines; -} + drawOsm.enabled = function(_) { + if (!arguments.length) return enabled; + enabled = _; -function svgMidpoints$$1(projection, context) { - var targetRadius = 8; + if (enabled) { + showLayer(); + } else { + hideLayer(); + } - function drawTargets(selection, graph, entities, filter) { - var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor '; - var getTransform = svgPointTransform(projection).geojson; + dispatch.call('change'); + return this; + }; - var data = entities.map(function(midpoint) { - return { - type: 'Feature', - id: midpoint.id, - properties: { - target: true, - entity: midpoint - }, - geometry: { - type: 'Point', - coordinates: midpoint.loc - } - }; - }); - var targets = selection.selectAll('.midpoint.target') - .filter(function(d) { return filter(d.properties.entity); }) - .data(data, function key(d) { return d.id; }); + return drawOsm; + } - // exit - targets.exit() - .remove(); + function svgLayers(projection, context) { + var dispatch$$1 = dispatch('change'), + svg = select(null), + layers = [ + { id: 'osm', layer: svgOsm(projection, context, dispatch$$1) }, + { id: 'gpx', layer: svgGpx$$1(projection, context, dispatch$$1) }, + { id: 'mapillary-images', layer: svgMapillaryImages$$1(projection, context, dispatch$$1) }, + { id: 'mapillary-signs', layer: svgMapillarySigns(projection, context, dispatch$$1) }, + { id: 'openstreetcam-images', layer: svgOpenstreetcamImages$$1(projection, context, dispatch$$1) }, + { id: 'debug', layer: svgDebug$$1(projection, context, dispatch$$1) } + ]; - // enter/update - targets.enter() - .append('circle') - .attr('r', targetRadius) - .merge(targets) - .attr('class', function(d) { return 'node midpoint target ' + fillClass + d.id; }) - .attr('transform', getTransform); - } + function drawLayers(selection$$1) { + svg = selection$$1.selectAll('.surface') + .data([0]); - function drawMidpoints(selection, graph, entities, filter, extent) { - var layer = selection.selectAll('.layer-points .layer-points-midpoints'); + svg = svg.enter() + .append('svg') + .attr('class', 'surface') + .merge(svg); - var mode = context.mode(); - if (mode && mode.id !== 'select') { - layer.selectAll('g.midpoint') - .remove(); + var defs = svg.selectAll('.surface-defs') + .data([0]); - selection.selectAll('.layer-points .layer-points-targets .midpoint.target') - .remove(); + defs.enter() + .append('defs') + .attr('class', 'surface-defs'); - return; - } + var groups = svg.selectAll('.data-layer') + .data(layers); - var poly = extent.polygon(); - var midpoints = {}; - - for (var i = 0; i < entities.length; i++) { - var entity = entities[i]; - - if (entity.type !== 'way') - continue; - if (!filter(entity)) - continue; - if (context.selectedIDs().indexOf(entity.id) < 0) - continue; - - var nodes = graph.childNodes(entity); - for (var j = 0; j < nodes.length - 1; j++) { - - var a = nodes[j]; - var b = nodes[j + 1]; - var id = [a.id, b.id].sort().join('-'); - - if (midpoints[id]) { - midpoints[id].parents.push(entity); - } else { - if (geoVecLength(projection(a.loc), projection(b.loc)) > 40) { - var point = geoVecInterp(a.loc, b.loc, 0.5); - var loc = null; - - if (extent.intersects(point)) { - loc = point; - } else { - for (var k = 0; k < 4; k++) { - point = geoLineIntersection([a.loc, b.loc], [poly[k], poly[k + 1]]); - if (point && - geoVecLength(projection(a.loc), projection(point)) > 20 && - geoVecLength(projection(b.loc), projection(point)) > 20) - { - loc = point; - break; - } - } - } - - if (loc) { - midpoints[id] = { - type: 'midpoint', - id: id, - loc: loc, - edge: [a.id, b.id], - parents: [entity] - }; - } - } - } - } - } + groups.exit() + .remove(); + groups.enter() + .append('g') + .attr('class', function(d) { return 'data-layer data-layer-' + d.id; }) + .merge(groups) + .each(function(d) { select(this).call(d.layer); }); + } - function midpointFilter(d) { - if (midpoints[d.id]) - return true; - for (var i = 0; i < d.parents.length; i++) { - if (filter(d.parents[i])) { - return true; - } - } + drawLayers.all = function() { + return layers; + }; - return false; - } + drawLayers.layer = function(id) { + var obj = find$1(layers, function(o) {return o.id === id;}); + return obj && obj.layer; + }; - var groups = layer - .selectAll('g.midpoint') - .filter(midpointFilter) - .data(values$1(midpoints), function(d) { return d.id; }); - - groups.exit() - .remove(); - - var enter = groups.enter() - .insert('g', ':first-child') - .attr('class', 'midpoint'); - - enter - .append('polygon') - .attr('points', '-6,8 10,0 -6,-8') - .attr('class', 'shadow'); - - enter - .append('polygon') - .attr('points', '-3,4 5,0 -3,-4') - .attr('class', 'fill'); - - groups = groups - .merge(enter) - .attr('transform', function(d) { - var translate = svgPointTransform(projection); - var a = graph.entity(d.edge[0]); - var b = graph.entity(d.edge[1]); - var angle = geoAngle(a, b, projection) * (180 / Math.PI); - return translate(d) + ' rotate(' + angle + ')'; - }) - .call(svgTagClasses().tags( - function(d) { return d.parents[0].tags; } - )); - - // Propagate data bindings. - groups.select('polygon.shadow'); - groups.select('polygon.fill'); - - - // Draw touch targets.. - selection.selectAll('.layer-points .layer-points-targets') - .call(drawTargets, graph, values$1(midpoints), midpointFilter); - } - - return drawMidpoints; -} - -// Touch targets control which other vertices we can drag a vertex onto. -// -// - the activeID - nope -// - 1 away (adjacent) to the activeID - yes (vertices will be merged) -// - 2 away from the activeID - nope (would create a self intersecting segment) -// - all others on a linear way - yes -// - all others on a closed way - nope (would create a self intersecting polygon) -// -// returns -// 0 = active vertex - no touch/connect -// 1 = passive vertex - yes touch/connect -// 2 = adjacent vertex - yes but pay attention segmenting a line here -// -function svgPassiveVertex(node, graph, activeID) { - if (!activeID) return 1; - if (activeID === node.id) return 0; - - var parents = graph.parentWays(node); - - for (var i = 0; i < parents.length; i++) { - var nodes = parents[i].nodes; - var isClosed = parents[i].isClosed(); - for (var j = 0; j < nodes.length; j++) { // find this vertex, look nearby - if (nodes[j] === node.id) { - var ix1 = j - 2; - var ix2 = j - 1; - var ix3 = j + 1; - var ix4 = j + 2; - - if (isClosed) { // wraparound if needed - var max = nodes.length - 1; - if (ix1 < 0) ix1 = max + ix1; - if (ix2 < 0) ix2 = max + ix2; - if (ix3 > max) ix3 = ix3 - max; - if (ix4 > max) ix4 = ix4 - max; - } - - if (nodes[ix1] === activeID) return 0; // no - prevent self intersect - else if (nodes[ix2] === activeID) return 2; // ok - adjacent - else if (nodes[ix3] === activeID) return 2; // ok - adjacent - else if (nodes[ix4] === activeID) return 0; // no - prevent self intersect - else if (isClosed && nodes.indexOf(activeID) !== -1) return 0; // no - prevent self intersect - } - } - } - return 1; // ok -} + drawLayers.only = function(what) { + var arr = [].concat(what); + drawLayers.remove(difference(map$3(layers, 'id'), arr)); + return this; + }; -function svgOneWaySegments(projection$$1, graph, dt) { - return function(entity) { - var i = 0; - var offset = dt; - var segments = []; - var clip = d3_geoIdentity().clipExtent(projection$$1.clipExtent()).stream; - var coordinates = graph.childNodes(entity).map(function(n) { return n.loc; }); - var a, b; + drawLayers.remove = function(what) { + var arr = [].concat(what); + arr.forEach(function(id) { + layers = reject(layers, function(o) {return o.id === id;}); + }); + dispatch$$1.call('change'); + return this; + }; - if (entity.tags.oneway === '-1') { - coordinates.reverse(); - } - var isReversible = (entity.tags.oneway === 'reversible' || entity.tags.oneway === 'alternating'); - - d3_geoStream({ - type: 'LineString', - coordinates: coordinates - }, projection$$1.stream(clip({ - lineStart: function() {}, - lineEnd: function() { a = null; }, - point: function(x, y) { - b = [x, y]; - - if (a) { - var span = geoVecLength(a, b) - offset; - - if (span >= 0) { - var heading = geoVecAngle(a, b); - var dx = dt * Math.cos(heading); - var dy = dt * Math.sin(heading); - var p = [ - a[0] + offset * Math.cos(heading), - a[1] + offset * Math.sin(heading) - ]; - - // gather coordinates - var coord = [a, p]; - for (span -= dt; span >= 0; span -= dt) { - p = geoVecAdd(p, [dx, dy]); - coord.push(p); - } - coord.push(b); - - // generate svg paths - var segment = ''; - var j; - - for (j = 0; j < coord.length; j++) { - segment += (j === 0 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1]; - } - segments.push({ id: entity.id, index: i++, d: segment }); - - if (isReversible) { - segment = ''; - for (j = coord.length - 1; j >= 0; j--) { - segment += (j === coord.length - 1 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1]; - } - segments.push({ id: entity.id, index: i++, d: segment }); - } - } - - offset = -span; - } - - a = b; - } - }))); + drawLayers.add = function(what) { + var arr = [].concat(what); + arr.forEach(function(obj) { + if ('id' in obj && 'layer' in obj) { + layers.push(obj); + } + }); + dispatch$$1.call('change'); + return this; + }; - return segments; - }; -} + drawLayers.dimensions = function(_) { + if (!arguments.length) return utilGetDimensions(svg); + utilSetDimensions(svg, _); + return this; + }; -function svgPath(projection$$1, graph, isArea) { - // Explanation of magic numbers: - // "padding" here allows space for strokes to extend beyond the viewport, - // so that the stroke isn't drawn along the edge of the viewport when - // the shape is clipped. - // - // When drawing lines, pad viewport by 5px. - // When drawing areas, pad viewport by 65px in each direction to allow - // for 60px area fill stroke (see ".fill-partial path.fill" css rule) - - var cache = {}; - var padding = isArea ? 65 : 5; - var viewport = projection$$1.clipExtent(); - var paddedExtent = [ - [viewport[0][0] - padding, viewport[0][1] - padding], - [viewport[1][0] + padding, viewport[1][1] + padding] - ]; - var clip = d3_geoIdentity().clipExtent(paddedExtent).stream; - var project = projection$$1.stream; - var path = d3_geoPath() - .projection({stream: function(output) { return project(clip(output)); }}); - - var svgpath = function(entity) { - if (entity.id in cache) { - return cache[entity.id]; - } else { - return cache[entity.id] = path(entity.asGeoJSON(graph)); - } - }; + return utilRebind(drawLayers, dispatch$$1, 'on'); + } - svgpath.geojson = path; + function svgLines$$1(projection, context) { + var detected = utilDetect(); - return svgpath; -} + var highway_stack = { + motorway: 0, + motorway_link: 1, + trunk: 2, + trunk_link: 3, + primary: 4, + primary_link: 5, + secondary: 6, + tertiary: 7, + unclassified: 8, + residential: 9, + service: 10, + footway: 11 + }; -function svgPointTransform(projection$$1) { - var svgpoint = function(entity) { - // http://jsperf.com/short-array-join - var pt = projection$$1(entity.loc); - return 'translate(' + pt[0] + ',' + pt[1] + ')'; - }; + function drawTargets(selection, graph, entities, filter$$1) { + var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor '; + var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor '; + var getPath = svgPath(projection).geojson; + var activeID = context.activeID(); - svgpoint.geojson = function(d) { - return svgpoint(d.properties.entity); - }; + // The targets and nopes will be MultiLineString sub-segments of the ways + var data = { targets: [], nopes: [] }; - return svgpoint; -} + entities.forEach(function(way) { + var features = svgSegmentWay(way, graph, activeID); + data.targets.push.apply(data.targets, features.passive); + data.nopes.push.apply(data.nopes, features.active); + }); -function svgRelationMemberTags(graph) { - return function(entity) { - var tags = entity.tags; - graph.parentRelations(entity).forEach(function(relation) { - var type = relation.tags.type; - if (type === 'multipolygon' || type === 'boundary') { - tags = assignIn({}, relation.tags, tags); - } - }); - return tags; - }; -} - - -function svgSegmentWay(way, graph, activeID) { - var isActiveWay = (way.nodes.indexOf(activeID) !== -1); - var features = { passive: [], active: [] }; - var start = {}; - var end = {}; - var node, type; - - for (var i = 0; i < way.nodes.length; i++) { - node = graph.entity(way.nodes[i]); - type = svgPassiveVertex(node, graph, activeID); - end = { node: node, type: type }; - - if (start.type !== undefined) { - if (start.node.id === activeID || end.node.id === activeID) { - // push nothing - } else if (isActiveWay && (start.type === 2 || end.type === 2)) { // one adjacent vertex - pushActive(start, end, i); - } else if (start.type === 0 && end.type === 0) { // both active vertices - pushActive(start, end, i); - } else { - pushPassive(start, end, i); - } - } + // Targets allow hover and vertex snapping + var targetData = data.targets.filter(getPath); + var targets = selection.selectAll('.line.target-allowed') + .filter(function(d) { return filter$$1(d.properties.entity); }) + .data(targetData, function key(d) { return d.id; }); + + // exit + targets.exit() + .remove(); + + // enter/update + targets.enter() + .append('path') + .merge(targets) + .attr('d', getPath) + .attr('class', function(d) { return 'way line target target-allowed ' + targetClass + d.id; }); + + + // NOPE + var nopeData = data.nopes.filter(getPath); + var nopes = selection.selectAll('.line.target-nope') + .filter(function(d) { return filter$$1(d.properties.entity); }) + .data(nopeData, function key(d) { return d.id; }); + + // exit + nopes.exit() + .remove(); + + // enter/update + nopes.enter() + .append('path') + .merge(nopes) + .attr('d', getPath) + .attr('class', function(d) { return 'way line target target-nope ' + nopeClass + d.id; }); + } - start = end; - } - return features; + function drawLines(selection, graph, entities, filter$$1) { + function waystack(a, b) { + var selected = context.selectedIDs(); + var scoreA = selected.indexOf(a.id) !== -1 ? 20 : 0; + var scoreB = selected.indexOf(b.id) !== -1 ? 20 : 0; - function pushActive(start, end, index) { - features.active.push({ - type: 'Feature', - id: way.id + '-' + index + '-nope', - properties: { - nope: true, - target: true, - entity: way, - nodes: [start.node, end.node], - index: index - }, - geometry: { - type: 'LineString', - coordinates: [start.node.loc, end.node.loc] - } - }); - } + if (a.tags.highway) { scoreA -= highway_stack[a.tags.highway]; } + if (b.tags.highway) { scoreB -= highway_stack[b.tags.highway]; } + return scoreA - scoreB; + } - function pushPassive(start, end, index) { - features.passive.push({ - type: 'Feature', - id: way.id + '-' + index, - properties: { - target: true, - entity: way, - nodes: [start.node, end.node], - index: index - }, - geometry: { - type: 'LineString', - coordinates: [start.node.loc, end.node.loc] - } - }); - } -} -function svgPoints$$1(projection, context) { + function drawLineGroup(selection, klass, isSelected) { + // Note: Don't add `.selected` class in draw modes + var mode = context.mode(); + var isDrawing = mode && /^draw/.test(mode.id); + var selectedClass = (!isDrawing && isSelected) ? 'selected ' : ''; + + var lines = selection + .selectAll('path') + .filter(filter$$1) + .data(getPathData(isSelected), osmEntity$$1.key); + + lines.exit() + .remove(); + + // Optimization: Call expensive TagClasses only on enter selection. This + // works because osmEntity.key is defined to include the entity v attribute. + lines.enter() + .append('path') + .attr('class', function(d) { + var oldMPClass = oldMultiPolygonOuters[d.id] ? 'old-multipolygon ' : ''; + return 'way line ' + klass + ' ' + selectedClass + oldMPClass + d.id; + }) + .call(svgTagClasses()) + .merge(lines) + .sort(waystack) + .attr('d', getPath) + .call(svgTagClasses().tags(svgRelationMemberTags(graph))); + + return selection; + } - function markerPath(selection, klass) { - selection - .attr('class', klass) - .attr('transform', 'translate(-8, -23)') - .attr('d', 'M 17,8 C 17,13 11,21 8.5,23.5 C 6,21 0,13 0,8 C 0,4 4,-0.5 8.5,-0.5 C 13,-0.5 17,4 17,8 z'); - } - function sortY(a, b) { - return b.loc[1] - a.loc[1]; - } + function getPathData(isSelected) { + return function() { + var layer = this.parentNode.__data__; + var data = pathdata[layer] || []; + return data.filter(function(d) { + if (isSelected) + return context.selectedIDs().indexOf(d.id) !== -1; + else + return context.selectedIDs().indexOf(d.id) === -1; + }); + }; + } - // Avoid exit/enter if we're just moving stuff around. - // The node will get a new version but we only need to run the update selection. - function fastEntityKey(d) { - var mode = context.mode(); - var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id); - return isMoving ? d.id : osmEntity$$1.key(d); - } + var getPath = svgPath(projection, graph); + var ways = []; + var pathdata = {}; + var onewaydata = {}; + var oldMultiPolygonOuters = {}; + + for (var i = 0; i < entities.length; i++) { + var entity = entities[i]; + var outer = osmSimpleMultipolygonOuterMember(entity, graph); + if (outer) { + ways.push(entity.mergeTags(outer.tags)); + oldMultiPolygonOuters[outer.id] = true; + } else if (entity.geometry(graph) === 'line') { + ways.push(entity); + } + } + ways = ways.filter(getPath); + pathdata = groupBy(ways, function(way) { return way.layer(); }); - function drawTargets(selection, graph, entities, filter) { - var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor '; - var getTransform = svgPointTransform(projection).geojson; - var activeID = context.activeID(); - var data$$1 = []; + forOwn(pathdata, function(v, k) { + var arr = filter(v, function(d) { return d.isOneWay(); }); + onewaydata[k] = flatten(map$3(arr, svgOneWaySegments(projection, graph, 35))); + }); - entities.forEach(function(node) { - if (activeID === node.id) return; // draw no target on the activeID - data$$1.push({ - type: 'Feature', - id: node.id, - properties: { - target: true, - entity: node - }, - geometry: node.asGeoJSON() - }); - }); + var covered = selection.selectAll('.layer-covered'); // under areas + var uncovered = selection.selectAll('.layer-lines .layer-lines-lines'); // over areas - var targets = selection.selectAll('.point.target') - .filter(function(d) { return filter(d.properties.entity); }) - .data(data$$1, function key(d) { return d.id; }); + [covered, uncovered].forEach(function(selection) { + var range$$1 = (selection === covered ? range(-10,0) : range(0,11)); + var layergroup = selection + .selectAll('g.layergroup') + .data(range$$1); - // exit - targets.exit() - .remove(); + layergroup = layergroup.enter() + .append('g') + .attr('class', function(d) { return 'layergroup layer' + String(d); }) + .merge(layergroup); - // enter/update - targets.enter() - .append('rect') - .attr('x', -10) - .attr('y', -26) - .attr('width', 20) - .attr('height', 30) - .merge(targets) - .attr('class', function(d) { return 'node point target ' + fillClass + d.id; }) - .attr('transform', getTransform); - } + layergroup + .selectAll('g.linegroup') + .data(['shadow', 'casing', 'stroke', 'shadow-highlighted', 'casing-highlighted', 'stroke-highlighted']) + .enter() + .append('g') + .attr('class', function(d) { return 'linegroup line-' + d; }); + + layergroup.selectAll('g.line-shadow') + .call(drawLineGroup, 'shadow', false); + layergroup.selectAll('g.line-casing') + .call(drawLineGroup, 'casing', false); + layergroup.selectAll('g.line-stroke') + .call(drawLineGroup, 'stroke', false); + + layergroup.selectAll('g.line-shadow-highlighted') + .call(drawLineGroup, 'shadow', true); + layergroup.selectAll('g.line-casing-highlighted') + .call(drawLineGroup, 'casing', true); + layergroup.selectAll('g.line-stroke-highlighted') + .call(drawLineGroup, 'stroke', true); + + + var onewaygroup = layergroup + .selectAll('g.onewaygroup') + .data(['oneway']); + + onewaygroup = onewaygroup.enter() + .append('g') + .attr('class', 'onewaygroup') + .merge(onewaygroup); + + var oneways = onewaygroup + .selectAll('path') + .filter(filter$$1) + .data( + function data() { return onewaydata[this.parentNode.__data__] || []; }, + function key(d) { return [d.id, d.index]; } + ); + + oneways.exit() + .remove(); + + oneways = oneways.enter() + .append('path') + .attr('class', 'oneway') + .attr('marker-mid', 'url(#oneway-marker)') + .merge(oneways) + .attr('d', function(d) { return d.d; }); + + if (detected.ie) { + oneways.each(function() { this.parentNode.insertBefore(this, this); }); + } + }); + // touch targets + selection.selectAll('.layer-lines .layer-lines-targets') + .call(drawTargets, graph, ways, filter$$1); + } - function drawPoints(selection, graph, entities, filter) { - var wireframe = context.surface().classed('fill-wireframe'); - var zoom = geoScaleToZoom(projection.scale()); - // points with a direction will render as vertices at higher zooms - function renderAsPoint(entity) { - return entity.geometry(graph) === 'point' && - !(zoom >= 18 && entity.directions(graph, projection).length); - } + return drawLines; + } - // all points will render as vertices in wireframe mode too - var points = wireframe ? [] : entities.filter(renderAsPoint); - - points.sort(sortY); - - - var layer = selection.selectAll('.layer-points .layer-points-points'); - - var groups = layer.selectAll('g.point') - .filter(filter) - .data(points, fastEntityKey); - - groups.exit() - .remove(); - - var enter = groups.enter() - .append('g') - .attr('class', function(d) { return 'node point ' + d.id; }) - .order(); - - enter - .append('path') - .call(markerPath, 'shadow'); - - enter - .append('ellipse') - .attr('cx', 0.5) - .attr('cy', 1) - .attr('rx', 6.5) - .attr('ry', 3) - .attr('class', 'stroke'); - - enter - .append('path') - .call(markerPath, 'stroke'); - - enter - .append('use') - .attr('transform', 'translate(-5, -19)') - .attr('class', 'icon') - .attr('width', '11px') - .attr('height', '11px'); - - groups = groups - .merge(enter) - .attr('transform', svgPointTransform(projection)) - .call(svgTagClasses()); - - // Selecting the following implicitly - // sets the data (point entity) on the element - groups.select('.shadow'); - groups.select('.stroke'); - groups.select('.icon') - .attr('xlink:href', function(entity) { - var preset = context.presets().match(entity, graph); - var picon = preset && preset.icon; - - if (!picon) - return ''; - else { - var isMaki = dataFeatureIcons.indexOf(picon) !== -1; - return '#' + picon + (isMaki ? '-11' : ''); - } - }); + function svgMidpoints$$1(projection, context) { + var targetRadius = 8; + function drawTargets(selection, graph, entities, filter) { + var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor '; + var getTransform = svgPointTransform(projection).geojson; - // touch targets - selection.selectAll('.layer-points .layer-points-targets') - .call(drawTargets, graph, points, filter); - } + var data = entities.map(function(midpoint) { + return { + type: 'Feature', + id: midpoint.id, + properties: { + target: true, + entity: midpoint + }, + geometry: { + type: 'Point', + coordinates: midpoint.loc + } + }; + }); + var targets = selection.selectAll('.midpoint.target') + .filter(function(d) { return filter(d.properties.entity); }) + .data(data, function key(d) { return d.id; }); + + // exit + targets.exit() + .remove(); + + // enter/update + targets.enter() + .append('circle') + .attr('r', targetRadius) + .merge(targets) + .attr('class', function(d) { return 'node midpoint target ' + fillClass + d.id; }) + .attr('transform', getTransform); + } - return drawPoints; -} -function svgTagClasses() { - var primaries = [ - 'building', 'highway', 'railway', 'waterway', 'aeroway', - 'motorway', 'boundary', 'power', 'amenity', 'natural', 'landuse', - 'leisure', 'military', 'place' - ], - statuses = [ - 'proposed', 'construction', 'disused', 'abandoned', 'dismantled', - 'razed', 'demolished', 'obliterated', 'intermittent' - ], - secondaries = [ - 'oneway', 'bridge', 'tunnel', 'embankment', 'cutting', 'barrier', - 'surface', 'tracktype', 'crossing', 'service', 'sport' - ], - tagClassRe = /^tag-/, - tags = function(entity) { return entity.tags; }; + function drawMidpoints(selection, graph, entities, filter, extent) { + var layer = selection.selectAll('.layer-points .layer-points-midpoints'); + var mode = context.mode(); + if (mode && mode.id !== 'select') { + layer.selectAll('g.midpoint') + .remove(); - var tagClasses = function(selection$$1) { - selection$$1.each(function tagClassesEach(entity) { - var value = this.className, - classes, primary, status; + selection.selectAll('.layer-points .layer-points-targets .midpoint.target') + .remove(); - if (value.baseVal !== undefined) value = value.baseVal; + return; + } - classes = value.trim().split(/\s+/).filter(function(name) { - return name.length && !tagClassRe.test(name); - }).join(' '); + var poly = extent.polygon(); + var midpoints = {}; + + for (var i = 0; i < entities.length; i++) { + var entity = entities[i]; + + if (entity.type !== 'way') + continue; + if (!filter(entity)) + continue; + if (context.selectedIDs().indexOf(entity.id) < 0) + continue; + + var nodes = graph.childNodes(entity); + for (var j = 0; j < nodes.length - 1; j++) { + + var a = nodes[j]; + var b = nodes[j + 1]; + var id = [a.id, b.id].sort().join('-'); + + if (midpoints[id]) { + midpoints[id].parents.push(entity); + } else { + if (geoVecLength(projection(a.loc), projection(b.loc)) > 40) { + var point = geoVecInterp(a.loc, b.loc, 0.5); + var loc = null; + + if (extent.intersects(point)) { + loc = point; + } else { + for (var k = 0; k < 4; k++) { + point = geoLineIntersection([a.loc, b.loc], [poly[k], poly[k + 1]]); + if (point && + geoVecLength(projection(a.loc), projection(point)) > 20 && + geoVecLength(projection(b.loc), projection(point)) > 20) + { + loc = point; + break; + } + } + } + + if (loc) { + midpoints[id] = { + type: 'midpoint', + id: id, + loc: loc, + edge: [a.id, b.id], + parents: [entity] + }; + } + } + } + } + } - var t = tags(entity), i, k, v; - // pick at most one primary classification tag.. - for (i = 0; i < primaries.length; i++) { - k = primaries[i]; - v = t[k]; - if (!v || v === 'no') continue; + function midpointFilter(d) { + if (midpoints[d.id]) + return true; - primary = k; - if (statuses.indexOf(v) !== -1) { // e.g. `railway=abandoned` - status = v; - classes += ' tag-' + k; - } else { - classes += ' tag-' + k + ' tag-' + k + '-' + v; - } + for (var i = 0; i < d.parents.length; i++) { + if (filter(d.parents[i])) { + return true; + } + } - break; - } + return false; + } - // add at most one status tag, only if relates to primary tag.. - if (!status) { - for (i = 0; i < statuses.length; i++) { - k = statuses[i]; - v = t[k]; - if (!v || v === 'no') continue; - - if (v === 'yes') { // e.g. `railway=rail + abandoned=yes` - status = k; - } - else if (primary && primary === v) { // e.g. `railway=rail + abandoned=railway` - status = k; - } else if (!primary && primaries.indexOf(v) !== -1) { // e.g. `abandoned=railway` - status = k; - primary = v; - classes += ' tag-' + v; - } // else ignore e.g. `highway=path + abandoned=railway` - - if (status) break; - } - } - if (status) { - classes += ' tag-status tag-status-' + status; - } + var groups = layer + .selectAll('g.midpoint') + .filter(midpointFilter) + .data(values$1(midpoints), function(d) { return d.id; }); + + groups.exit() + .remove(); + + var enter = groups.enter() + .insert('g', ':first-child') + .attr('class', 'midpoint'); + + enter + .append('polygon') + .attr('points', '-6,8 10,0 -6,-8') + .attr('class', 'shadow'); + + enter + .append('polygon') + .attr('points', '-3,4 5,0 -3,-4') + .attr('class', 'fill'); + + groups = groups + .merge(enter) + .attr('transform', function(d) { + var translate = svgPointTransform(projection); + var a = graph.entity(d.edge[0]); + var b = graph.entity(d.edge[1]); + var angle = geoAngle(a, b, projection) * (180 / Math.PI); + return translate(d) + ' rotate(' + angle + ')'; + }) + .call(svgTagClasses().tags( + function(d) { return d.parents[0].tags; } + )); + + // Propagate data bindings. + groups.select('polygon.shadow'); + groups.select('polygon.fill'); + + + // Draw touch targets.. + selection.selectAll('.layer-points .layer-points-targets') + .call(drawTargets, graph, values$1(midpoints), midpointFilter); + } - // add any secondary (structure) tags - for (i = 0; i < secondaries.length; i++) { - k = secondaries[i]; - v = t[k]; - if (!v || v === 'no') continue; - classes += ' tag-' + k + ' tag-' + k + '-' + v; - } + return drawMidpoints; + } - // For highways, look for surface tagging.. - if (primary === 'highway') { - var paved = (t.highway !== 'track'); - for (k in t) { - v = t[k]; - if (k in osmPavedTags) { - paved = !!osmPavedTags[k][v]; - break; - } - } - if (!paved) { - classes += ' tag-unpaved'; - } - } + // Touch targets control which other vertices we can drag a vertex onto. + // + // - the activeID - nope + // - 1 away (adjacent) to the activeID - yes (vertices will be merged) + // - 2 away from the activeID - nope (would create a self intersecting segment) + // - all others on a linear way - yes + // - all others on a closed way - nope (would create a self intersecting polygon) + // + // returns + // 0 = active vertex - no touch/connect + // 1 = passive vertex - yes touch/connect + // 2 = adjacent vertex - yes but pay attention segmenting a line here + // + function svgPassiveVertex(node, graph, activeID) { + if (!activeID) return 1; + if (activeID === node.id) return 0; + + var parents = graph.parentWays(node); + + for (var i = 0; i < parents.length; i++) { + var nodes = parents[i].nodes; + var isClosed = parents[i].isClosed(); + for (var j = 0; j < nodes.length; j++) { // find this vertex, look nearby + if (nodes[j] === node.id) { + var ix1 = j - 2; + var ix2 = j - 1; + var ix3 = j + 1; + var ix4 = j + 2; + + if (isClosed) { // wraparound if needed + var max = nodes.length - 1; + if (ix1 < 0) ix1 = max + ix1; + if (ix2 < 0) ix2 = max + ix2; + if (ix3 > max) ix3 = ix3 - max; + if (ix4 > max) ix4 = ix4 - max; + } + + if (nodes[ix1] === activeID) return 0; // no - prevent self intersect + else if (nodes[ix2] === activeID) return 2; // ok - adjacent + else if (nodes[ix3] === activeID) return 2; // ok - adjacent + else if (nodes[ix4] === activeID) return 0; // no - prevent self intersect + else if (isClosed && nodes.indexOf(activeID) !== -1) return 0; // no - prevent self intersect + } + } + } - classes = classes.trim(); + return 1; // ok + } - if (classes !== value) { - d3_select(this).attr('class', classes); - } - }); - }; + function svgOneWaySegments(projection$$1, graph, dt) { + return function(entity) { + var i = 0; + var offset = dt; + var segments = []; + var clip = d3_geoIdentity().clipExtent(projection$$1.clipExtent()).stream; + var coordinates = graph.childNodes(entity).map(function(n) { return n.loc; }); + var a, b; - tagClasses.tags = function(_) { - if (!arguments.length) return tags; - tags = _; - return tagClasses; - }; + if (entity.tags.oneway === '-1') { + coordinates.reverse(); + } - return tagClasses; -} + var isReversible = (entity.tags.oneway === 'reversible' || entity.tags.oneway === 'alternating'); + + geoStream({ + type: 'LineString', + coordinates: coordinates + }, projection$$1.stream(clip({ + lineStart: function() {}, + lineEnd: function() { a = null; }, + point: function(x, y) { + b = [x, y]; + + if (a) { + var span = geoVecLength(a, b) - offset; + + if (span >= 0) { + var heading = geoVecAngle(a, b); + var dx = dt * Math.cos(heading); + var dy = dt * Math.sin(heading); + var p = [ + a[0] + offset * Math.cos(heading), + a[1] + offset * Math.sin(heading) + ]; + + // gather coordinates + var coord = [a, p]; + for (span -= dt; span >= 0; span -= dt) { + p = geoVecAdd(p, [dx, dy]); + coord.push(p); + } + coord.push(b); + + // generate svg paths + var segment = ''; + var j; + + for (j = 0; j < coord.length; j++) { + segment += (j === 0 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1]; + } + segments.push({ id: entity.id, index: i++, d: segment }); + + if (isReversible) { + segment = ''; + for (j = coord.length - 1; j >= 0; j--) { + segment += (j === coord.length - 1 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1]; + } + segments.push({ id: entity.id, index: i++, d: segment }); + } + } + + offset = -span; + } + + a = b; + } + }))); + + return segments; + }; + } -function svgTurns(projection) { - return function drawTurns(selection, graph, turns) { + function svgPath(projection$$1, graph, isArea) { - function icon(turn) { - var u = turn.u ? '-u' : ''; - if (turn.no) return '#turn-no' + u; - if (turn.only) return '#turn-only' + u; - return '#turn-yes' + u; - } + // Explanation of magic numbers: + // "padding" here allows space for strokes to extend beyond the viewport, + // so that the stroke isn't drawn along the edge of the viewport when + // the shape is clipped. + // + // When drawing lines, pad viewport by 5px. + // When drawing areas, pad viewport by 65px in each direction to allow + // for 60px area fill stroke (see ".fill-partial path.fill" css rule) - var layer = selection.selectAll('.data-layer-osm').selectAll('.layer-turns') - .data([0]); + var cache = {}; + var padding = isArea ? 65 : 5; + var viewport = projection$$1.clipExtent(); + var paddedExtent = [ + [viewport[0][0] - padding, viewport[0][1] - padding], + [viewport[1][0] + padding, viewport[1][1] + padding] + ]; + var clip = d3_geoIdentity().clipExtent(paddedExtent).stream; + var project = projection$$1.stream; + var path = d3_geoPath() + .projection({stream: function(output) { return project(clip(output)); }}); + + var svgpath = function(entity) { + if (entity.id in cache) { + return cache[entity.id]; + } else { + return cache[entity.id] = path(entity.asGeoJSON(graph)); + } + }; - layer = layer.enter() - .append('g') - .attr('class', 'layer-osm layer-turns') - .merge(layer); + svgpath.geojson = path; + return svgpath; + } - var groups = layer.selectAll('g.turn') - .data(turns, function(d) { return d.key; }); - groups.exit() - .remove(); + function svgPointTransform(projection$$1) { + var svgpoint = function(entity) { + // http://jsperf.com/short-array-join + var pt = projection$$1(entity.loc); + return 'translate(' + pt[0] + ',' + pt[1] + ')'; + }; + svgpoint.geojson = function(d) { + return svgpoint(d.properties.entity); + }; - var enter = groups.enter() - .append('g') - .attr('class', function(d) { return 'turn ' + d.key; }); + return svgpoint; + } - var nEnter = enter - .filter(function(d) { return !d.u; }); - nEnter.append('rect') - .attr('transform', 'translate(-22, -12)') - .attr('width', '44') - .attr('height', '24'); + function svgRelationMemberTags(graph) { + return function(entity) { + var tags = entity.tags; + graph.parentRelations(entity).forEach(function(relation) { + var type = relation.tags.type; + if (type === 'multipolygon' || type === 'boundary') { + tags = assignIn({}, relation.tags, tags); + } + }); + return tags; + }; + } - nEnter.append('use') - .attr('transform', 'translate(-22, -12)') - .attr('width', '44') - .attr('height', '24'); + function svgSegmentWay(way, graph, activeID) { + var isActiveWay = (way.nodes.indexOf(activeID) !== -1); + var features = { passive: [], active: [] }; + var start = {}; + var end = {}; + var node, type; + + for (var i = 0; i < way.nodes.length; i++) { + node = graph.entity(way.nodes[i]); + type = svgPassiveVertex(node, graph, activeID); + end = { node: node, type: type }; + + if (start.type !== undefined) { + if (start.node.id === activeID || end.node.id === activeID) { + // push nothing + } else if (isActiveWay && (start.type === 2 || end.type === 2)) { // one adjacent vertex + pushActive(start, end, i); + } else if (start.type === 0 && end.type === 0) { // both active vertices + pushActive(start, end, i); + } else { + pushPassive(start, end, i); + } + } - var uEnter = enter - .filter(function(d) { return d.u; }); + start = end; + } - uEnter.append('circle') - .attr('r', '16'); + return features; + + + function pushActive(start, end, index) { + features.active.push({ + type: 'Feature', + id: way.id + '-' + index + '-nope', + properties: { + nope: true, + target: true, + entity: way, + nodes: [start.node, end.node], + index: index + }, + geometry: { + type: 'LineString', + coordinates: [start.node.loc, end.node.loc] + } + }); + } - uEnter.append('use') - .attr('transform', 'translate(-16, -16)') - .attr('width', '32') - .attr('height', '32'); + function pushPassive(start, end, index) { + features.passive.push({ + type: 'Feature', + id: way.id + '-' + index, + properties: { + target: true, + entity: way, + nodes: [start.node, end.node], + index: index + }, + geometry: { + type: 'LineString', + coordinates: [start.node.loc, end.node.loc] + } + }); + } + } + function svgPoints$$1(projection, context) { - groups = groups - .merge(enter); + function markerPath(selection, klass) { + selection + .attr('class', klass) + .attr('transform', 'translate(-8, -23)') + .attr('d', 'M 17,8 C 17,13 11,21 8.5,23.5 C 6,21 0,13 0,8 C 0,4 4,-0.5 8.5,-0.5 C 13,-0.5 17,4 17,8 z'); + } - groups - .attr('opacity', function(d) { - return d.direct === false ? '0.7' : null; - }) - .attr('transform', function(d) { - var pxRadius = 50; - var toWay = graph.entity(d.to.way); - var toPoints = graph.childNodes(toWay) - .map(function (n) { return n.loc; }) - .map(projection); - var toLength = geoPathLength(toPoints); - var mid = toLength / 2; // midpoint of destination way + function sortY(a, b) { + return b.loc[1] - a.loc[1]; + } - var toNode = graph.entity(d.to.node); - var toVertex = graph.entity(d.to.vertex); - var a = geoAngle(toVertex, toNode, projection); - var o = projection(toVertex.loc); - var r = d.u ? 0 // u-turn: no radius - : !toWay.__via ? pxRadius // leaf way: put marker at pxRadius - : Math.min(mid, pxRadius); // via way: prefer pxRadius, fallback to mid for very short ways - return 'translate(' + (r * Math.cos(a) + o[0]) + ',' + (r * Math.sin(a) + o[1]) + ') ' + - 'rotate(' + a * 180 / Math.PI + ')'; - }); + // Avoid exit/enter if we're just moving stuff around. + // The node will get a new version but we only need to run the update selection. + function fastEntityKey(d) { + var mode = context.mode(); + var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id); + return isMoving ? d.id : osmEntity$$1.key(d); + } - groups.select('use') - .attr('xlink:href', icon); - groups.select('rect'); - groups.select('circle'); + function drawTargets(selection, graph, entities, filter) { + var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor '; + var getTransform = svgPointTransform(projection).geojson; + var activeID = context.activeID(); + var data$$1 = []; + + entities.forEach(function(node) { + if (activeID === node.id) return; // draw no target on the activeID + + data$$1.push({ + type: 'Feature', + id: node.id, + properties: { + target: true, + entity: node + }, + geometry: node.asGeoJSON() + }); + }); - return this; - }; -} - -function svgVertices$$1(projection, context) { - var radiuses = { - // z16-, z17, z18+, w/icon - shadow: [6, 7.5, 7.5, 12], - stroke: [2.5, 3.5, 3.5, 8], - fill: [1, 1.5, 1.5, 1.5] - }; + var targets = selection.selectAll('.point.target') + .filter(function(d) { return filter(d.properties.entity); }) + .data(data$$1, function key(d) { return d.id; }); + + // exit + targets.exit() + .remove(); + + // enter/update + targets.enter() + .append('rect') + .attr('x', -10) + .attr('y', -26) + .attr('width', 20) + .attr('height', 30) + .merge(targets) + .attr('class', function(d) { return 'node point target ' + fillClass + d.id; }) + .attr('transform', getTransform); + } - var _currHoverTarget; - var _currPersistent = {}; - var _currHover = {}; - var _prevHover = {}; - var _currSelected = {}; - var _prevSelected = {}; - var _radii = {}; + function drawPoints(selection, graph, entities, filter) { + var wireframe = context.surface().classed('fill-wireframe'); + var zoom = geoScaleToZoom(projection.scale()); - function sortY(a, b) { - return b.loc[1] - a.loc[1]; - } + // points with a direction will render as vertices at higher zooms + function renderAsPoint(entity) { + return entity.geometry(graph) === 'point' && + !(zoom >= 18 && entity.directions(graph, projection).length); + } - // Avoid exit/enter if we're just moving stuff around. - // The node will get a new version but we only need to run the update selection. - function fastEntityKey(d) { - var mode = context.mode(); - var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id); - return isMoving ? d.id : osmEntity$$1.key(d); - } + // all points will render as vertices in wireframe mode too + var points = wireframe ? [] : entities.filter(renderAsPoint); + + points.sort(sortY); + + + var layer = selection.selectAll('.layer-points .layer-points-points'); + + var groups = layer.selectAll('g.point') + .filter(filter) + .data(points, fastEntityKey); + + groups.exit() + .remove(); + + var enter = groups.enter() + .append('g') + .attr('class', function(d) { return 'node point ' + d.id; }) + .order(); + + enter + .append('path') + .call(markerPath, 'shadow'); + + enter + .append('ellipse') + .attr('cx', 0.5) + .attr('cy', 1) + .attr('rx', 6.5) + .attr('ry', 3) + .attr('class', 'stroke'); + + enter + .append('path') + .call(markerPath, 'stroke'); + + enter + .append('use') + .attr('transform', 'translate(-5, -19)') + .attr('class', 'icon') + .attr('width', '11px') + .attr('height', '11px'); + + groups = groups + .merge(enter) + .attr('transform', svgPointTransform(projection)) + .call(svgTagClasses()); + + // Selecting the following implicitly + // sets the data (point entity) on the element + groups.select('.shadow'); + groups.select('.stroke'); + groups.select('.icon') + .attr('xlink:href', function(entity) { + var preset = context.presets().match(entity, graph); + var picon = preset && preset.icon; + + if (!picon) + return ''; + else { + var isMaki = dataFeatureIcons.indexOf(picon) !== -1; + return '#' + picon + (isMaki ? '-11' : ''); + } + }); + + + // touch targets + selection.selectAll('.layer-points .layer-points-targets') + .call(drawTargets, graph, points, filter); + } - function draw(selection$$1, graph, vertices, sets, filter) { - sets = sets || { selected: {}, important: {}, hovered: {} }; + return drawPoints; + } - var icons = {}; - var directions = {}; - var wireframe = context.surface().classed('fill-wireframe'); - var zoom = geoScaleToZoom(projection.scale()); - var z = (zoom < 17 ? 0 : zoom < 18 ? 1 : 2); + function svgTagClasses() { + var primaries = [ + 'building', 'highway', 'railway', 'waterway', 'aeroway', + 'motorway', 'boundary', 'power', 'amenity', 'natural', 'landuse', + 'leisure', 'military', 'place' + ], + statuses = [ + 'proposed', 'construction', 'disused', 'abandoned', 'dismantled', + 'razed', 'demolished', 'obliterated', 'intermittent' + ], + secondaries = [ + 'oneway', 'bridge', 'tunnel', 'embankment', 'cutting', 'barrier', + 'surface', 'tracktype', 'crossing', 'service', 'sport' + ], + tagClassRe = /^tag-/, + tags = function(entity) { return entity.tags; }; + + + var tagClasses = function(selection$$1) { + selection$$1.each(function tagClassesEach(entity) { + var value = this.className, + classes, primary, status; + + if (value.baseVal !== undefined) value = value.baseVal; + + classes = value.trim().split(/\s+/).filter(function(name) { + return name.length && !tagClassRe.test(name); + }).join(' '); + + var t = tags(entity), i, k, v; + + // pick at most one primary classification tag.. + for (i = 0; i < primaries.length; i++) { + k = primaries[i]; + v = t[k]; + if (!v || v === 'no') continue; + + primary = k; + if (statuses.indexOf(v) !== -1) { // e.g. `railway=abandoned` + status = v; + classes += ' tag-' + k; + } else { + classes += ' tag-' + k + ' tag-' + k + '-' + v; + } + + break; + } + + // add at most one status tag, only if relates to primary tag.. + if (!status) { + for (i = 0; i < statuses.length; i++) { + k = statuses[i]; + v = t[k]; + if (!v || v === 'no') continue; + + if (v === 'yes') { // e.g. `railway=rail + abandoned=yes` + status = k; + } + else if (primary && primary === v) { // e.g. `railway=rail + abandoned=railway` + status = k; + } else if (!primary && primaries.indexOf(v) !== -1) { // e.g. `abandoned=railway` + status = k; + primary = v; + classes += ' tag-' + v; + } // else ignore e.g. `highway=path + abandoned=railway` + + if (status) break; + } + } + + if (status) { + classes += ' tag-status tag-status-' + status; + } + + // add any secondary (structure) tags + for (i = 0; i < secondaries.length; i++) { + k = secondaries[i]; + v = t[k]; + if (!v || v === 'no') continue; + classes += ' tag-' + k + ' tag-' + k + '-' + v; + } + + // For highways, look for surface tagging.. + if (primary === 'highway') { + var paved = (t.highway !== 'track'); + for (k in t) { + v = t[k]; + if (k in osmPavedTags) { + paved = !!osmPavedTags[k][v]; + break; + } + } + if (!paved) { + classes += ' tag-unpaved'; + } + } + + classes = classes.trim(); + + if (classes !== value) { + select(this).attr('class', classes); + } + }); + }; - function getIcon(entity) { - if (entity.id in icons) return icons[entity.id]; + tagClasses.tags = function(_) { + if (!arguments.length) return tags; + tags = _; + return tagClasses; + }; - icons[entity.id] = - entity.hasInterestingTags() && - context.presets().match(entity, graph).icon; - return icons[entity.id]; - } + return tagClasses; + } + function svgTurns(projection) { - // memoize directions results, return false for empty arrays (for use in filter) - function getDirections(entity) { - if (entity.id in directions) return directions[entity.id]; + return function drawTurns(selection, graph, turns) { - var angles = entity.directions(graph, projection); - directions[entity.id] = angles.length ? angles : false; - return angles; - } + function icon(turn) { + var u = turn.u ? '-u' : ''; + if (turn.no) return '#turn-no' + u; + if (turn.only) return '#turn-only' + u; + return '#turn-yes' + u; + } + var layer = selection.selectAll('.data-layer-osm').selectAll('.layer-turns') + .data([0]); - function updateAttributes(selection$$1) { - ['shadow', 'stroke', 'fill'].forEach(function(klass) { - var rads = radiuses[klass]; - selection$$1.selectAll('.' + klass) - .each(function(entity) { - var i = z && getIcon(entity); - var r = rads[i ? 3 : z]; + layer = layer.enter() + .append('g') + .attr('class', 'layer-osm layer-turns') + .merge(layer); - // slightly increase the size of unconnected endpoints #3775 - if (entity.isEndpoint(graph) && !entity.isConnected(graph)) { - r += 1.5; - } - if (klass === 'shadow') { // remember this value, so we don't need to - _radii[entity.id] = r; // recompute it when we draw the touch targets - } + var groups = layer.selectAll('g.turn') + .data(turns, function(d) { return d.key; }); - d3_select(this) - .attr('r', r) - .attr('visibility', (i && klass === 'fill') ? 'hidden' : null); - }); - }); + groups.exit() + .remove(); - selection$$1.selectAll('use') - .attr('visibility', (z === 0 ? 'hidden' : null)); - } - vertices.sort(sortY); - - var groups = selection$$1.selectAll('g.vertex') - .filter(filter) - .data(vertices, fastEntityKey); - - // exit - groups.exit() - .remove(); - - // enter - var enter = groups.enter() - .append('g') - .attr('class', function(d) { return 'node vertex ' + d.id; }) - .order(); - - enter - .append('circle') - .attr('class', 'shadow'); - - enter - .append('circle') - .attr('class', 'stroke'); - - // Vertices with icons get a `use`. - enter.filter(function(d) { return getIcon(d); }) - .append('use') - .attr('class', 'icon') - .attr('width', '11px') - .attr('height', '11px') - .attr('transform', 'translate(-5.5, -5.5)') - .attr('xlink:href', function(d) { - var picon = getIcon(d); - var isMaki = dataFeatureIcons.indexOf(picon) !== -1; - return '#' + picon + (isMaki ? '-11' : ''); - }); + var enter = groups.enter() + .append('g') + .attr('class', function(d) { return 'turn ' + d.key; }); - // Vertices with tags get a fill. - enter.filter(function(d) { return d.hasInterestingTags(); }) - .append('circle') - .attr('class', 'fill'); - - // update - groups = groups - .merge(enter) - .attr('transform', svgPointTransform(projection)) - .classed('sibling', function(d) { return d.id in sets.selected; }) - .classed('shared', function(d) { return graph.isShared(d); }) - .classed('endpoint', function(d) { return d.isEndpoint(graph); }) - .call(updateAttributes); - - - // Directional vertices get viewfields - var dgroups = groups.filter(function(d) { return getDirections(d); }) - .selectAll('.viewfieldgroup') - .data(function data$$1(d) { return zoom >= 18 ? [d] : []; }, osmEntity$$1.key); - - // exit - dgroups.exit() - .remove(); - - // enter/update - dgroups = dgroups.enter() - .insert('g', '.shadow') - .attr('class', 'viewfieldgroup') - .merge(dgroups); - - var viewfields = dgroups.selectAll('.viewfield') - .data(getDirections, function key(d) { return d; }); - - // exit - viewfields.exit() - .remove(); - - // enter/update - viewfields.enter() - .append('path') - .attr('class', 'viewfield') - .attr('d', 'M0,0H0') - .merge(viewfields) - .attr('marker-start', 'url(#viewfield-marker' + (wireframe ? '-wireframe' : '') + ')') - .attr('transform', function(d) { return 'rotate(' + d + ')'; }); - } - - - function drawTargets(selection$$1, graph, entities, filter) { - var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor '; - var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor '; - var getTransform = svgPointTransform(projection).geojson; - var activeID = context.activeID(); - var data$$1 = { targets: [], nopes: [] }; - - entities.forEach(function(node) { - if (activeID === node.id) return; // draw no target on the activeID - - var vertexType = svgPassiveVertex(node, graph, activeID); - if (vertexType !== 0) { // passive or adjacent - allow to connect - data$$1.targets.push({ - type: 'Feature', - id: node.id, - properties: { - target: true, - entity: node - }, - geometry: node.asGeoJSON() - }); - } else { - data$$1.nopes.push({ - type: 'Feature', - id: node.id + '-nope', - properties: { - nope: true, - target: true, - entity: node - }, - geometry: node.asGeoJSON() - }); - } - }); + var nEnter = enter + .filter(function(d) { return !d.u; }); + nEnter.append('rect') + .attr('transform', 'translate(-22, -12)') + .attr('width', '44') + .attr('height', '24'); - // Targets allow hover and vertex snapping - var targets = selection$$1.selectAll('.vertex.target-allowed') - .filter(function(d) { return filter(d.properties.entity); }) - .data(data$$1.targets, function key(d) { return d.id; }); - - // exit - targets.exit() - .remove(); - - // enter/update - targets.enter() - .append('circle') - .attr('r', function(d) { return (_radii[d.id] || radiuses.shadow[3]); }) - .merge(targets) - .attr('class', function(d) { return 'node vertex target target-allowed ' + targetClass + d.id; }) - .attr('transform', getTransform); - - - // NOPE - var nopes = selection$$1.selectAll('.vertex.target-nope') - .filter(function(d) { return filter(d.properties.entity); }) - .data(data$$1.nopes, function key(d) { return d.id; }); - - // exit - nopes.exit() - .remove(); - - // enter/update - nopes.enter() - .append('circle') - .attr('r', function(d) { return (_radii[d.properties.entity.id] || radiuses.shadow[3]); }) - .merge(nopes) - .attr('class', function(d) { return 'node vertex target target-nope ' + nopeClass + d.id; }) - .attr('transform', getTransform); - } - - - // Points can also render as vertices: - // 1. in wireframe mode or - // 2. at higher zooms if they have a direction - function renderAsVertex(entity, graph, wireframe, zoom) { - var geometry = entity.geometry(graph); - return geometry === 'vertex' || (geometry === 'point' && ( - wireframe || (zoom >= 18 && entity.directions(graph, projection).length) - )); - } - - - function getSiblingAndChildVertices(ids, graph, wireframe, zoom) { - var results = {}; - - function addChildVertices(entity) { - var geometry = entity.geometry(graph); - if (!context.features().isHiddenFeature(entity, graph, geometry)) { - var i; - if (entity.type === 'way') { - for (i = 0; i < entity.nodes.length; i++) { - var child = graph.hasEntity(entity.nodes[i]); - if (child) { - addChildVertices(child); - } - } - } else if (entity.type === 'relation') { - for (i = 0; i < entity.members.length; i++) { - var member = graph.hasEntity(entity.members[i].id); - if (member) { - addChildVertices(member); - } - } - } else if (renderAsVertex(entity, graph, wireframe, zoom)) { - results[entity.id] = entity; - } - } - } + nEnter.append('use') + .attr('transform', 'translate(-22, -12)') + .attr('width', '44') + .attr('height', '24'); - ids.forEach(function(id) { - var entity = graph.hasEntity(id); - if (!entity) return; - - if (entity.type === 'node') { - if (renderAsVertex(entity, graph, wireframe, zoom)) { - results[entity.id] = entity; - graph.parentWays(entity).forEach(function(entity) { - addChildVertices(entity); - }); - } - } else { // way, relation - addChildVertices(entity); - } - }); - return results; - } + var uEnter = enter + .filter(function(d) { return d.u; }); + uEnter.append('circle') + .attr('r', '16'); - function drawVertices(selection$$1, graph, entities, filter, extent, fullRedraw) { - var wireframe = context.surface().classed('fill-wireframe'); - var zoom = geoScaleToZoom(projection.scale()); - var mode = context.mode(); - var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id); + uEnter.append('use') + .attr('transform', 'translate(-16, -16)') + .attr('width', '32') + .attr('height', '32'); - if (fullRedraw) { - _currPersistent = {}; - _radii = {}; - } - // Collect important vertices from the `entities` list.. - // (during a paritial redraw, it will not contain everything) - for (var i = 0; i < entities.length; i++) { - var entity = entities[i]; - var geometry = entity.geometry(graph); - var keep = false; - - // a point that looks like a vertex.. - if ((geometry === 'point') && renderAsVertex(entity, graph, wireframe, zoom)) { - _currPersistent[entity.id] = entity; - keep = true; - - // a vertex of some importance.. - } else if (geometry === 'vertex' && - (entity.hasInterestingTags() || entity.isEndpoint(graph) || entity.isConnected(graph))) { - _currPersistent[entity.id] = entity; - keep = true; - } + groups = groups + .merge(enter); - // whatever this is, it's not a persistent vertex.. - if (!keep && !fullRedraw) { - delete _currPersistent[entity.id]; - } - } + groups + .attr('opacity', function(d) { + return d.direct === false ? '0.7' : null; + }) + .attr('transform', function(d) { + var pxRadius = 50; + var toWay = graph.entity(d.to.way); + var toPoints = graph.childNodes(toWay) + .map(function (n) { return n.loc; }) + .map(projection); + var toLength = geoPathLength(toPoints); + var mid = toLength / 2; // midpoint of destination way - // 3 sets of vertices to consider: - var sets = { - persistent: _currPersistent, // persistent = important vertices (render always) - selected: _currSelected, // selected + siblings of selected (render always) - hovered: _currHover // hovered + siblings of hovered (render only in draw modes) - }; + var toNode = graph.entity(d.to.node); + var toVertex = graph.entity(d.to.vertex); + var a = geoAngle(toVertex, toNode, projection); + var o = projection(toVertex.loc); + var r = d.u ? 0 // u-turn: no radius + : !toWay.__via ? pxRadius // leaf way: put marker at pxRadius + : Math.min(mid, pxRadius); // via way: prefer pxRadius, fallback to mid for very short ways - var all = assign({}, (isMoving ? _currHover : {}), _currSelected, _currPersistent); + return 'translate(' + (r * Math.cos(a) + o[0]) + ',' + (r * Math.sin(a) + o[1]) + ') ' + + 'rotate(' + a * 180 / Math.PI + ')'; + }); - // Draw the vertices.. - // The filter function controls the scope of what objects d3 will touch (exit/enter/update) - // Adjust the filter function to expand the scope beyond whatever entities were passed in. - var filterRendered = function(d) { - return d.id in _currPersistent || d.id in _currSelected || d.id in _currHover || filter(d); - }; - selection$$1.selectAll('.layer-points .layer-points-vertices') - .call(draw, graph, currentVisible(all), sets, filterRendered); + groups.select('use') + .attr('xlink:href', icon); - // Draw touch targets.. - // When drawing, render all targets (not just those affected by a partial redraw) - var filterTouch = function(d) { - return isMoving ? true : filterRendered(d); - }; - selection$$1.selectAll('.layer-points .layer-points-targets') - .call(drawTargets, graph, currentVisible(all), filterTouch); + groups.select('rect'); + groups.select('circle'); + return this; + }; + } - function currentVisible(which) { - return Object.keys(which) - .map(graph.hasEntity, graph) // the current version of this entity - .filter(function (entity) { return entity && entity.intersects(extent, graph); }); - } - } + function svgVertices$$1(projection, context) { + var radiuses = { + // z16-, z17, z18+, w/icon + shadow: [6, 7.5, 7.5, 12], + stroke: [2.5, 3.5, 3.5, 8], + fill: [1, 1.5, 1.5, 1.5] + }; + var _currHoverTarget; + var _currPersistent = {}; + var _currHover = {}; + var _prevHover = {}; + var _currSelected = {}; + var _prevSelected = {}; + var _radii = {}; - // partial redraw - only update the selected items.. - drawVertices.drawSelected = function(selection$$1, graph, extent) { - var wireframe = context.surface().classed('fill-wireframe'); - var zoom = geoScaleToZoom(projection.scale()); - _prevSelected = _currSelected || {}; - _currSelected = getSiblingAndChildVertices(context.selectedIDs(), graph, wireframe, zoom); + function sortY(a, b) { + return b.loc[1] - a.loc[1]; + } - // note that drawVertices will add `_currSelected` automatically if needed.. - var filter = function(d) { return d.id in _prevSelected; }; - drawVertices(selection$$1, graph, values$1(_prevSelected), filter, extent, false); - }; + // Avoid exit/enter if we're just moving stuff around. + // The node will get a new version but we only need to run the update selection. + function fastEntityKey(d) { + var mode = context.mode(); + var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id); + return isMoving ? d.id : osmEntity$$1.key(d); + } - // partial redraw - only update the hovered items.. - drawVertices.drawHover = function(selection$$1, graph, target, extent) { - if (target === _currHoverTarget) return; // continue only if something changed + function draw(selection$$1, graph, vertices, sets, filter) { + sets = sets || { selected: {}, important: {}, hovered: {} }; - var wireframe = context.surface().classed('fill-wireframe'); - var zoom = geoScaleToZoom(projection.scale()); + var icons = {}; + var directions = {}; + var wireframe = context.surface().classed('fill-wireframe'); + var zoom = geoScaleToZoom(projection.scale()); + var z = (zoom < 17 ? 0 : zoom < 18 ? 1 : 2); - _prevHover = _currHover || {}; - _currHoverTarget = target; - var entity = target && target.properties && target.properties.entity; - if (entity) { - _currHover = getSiblingAndChildVertices([entity.id], graph, wireframe, zoom); - } else { - _currHover = {}; - } + function getIcon(entity) { + if (entity.id in icons) return icons[entity.id]; - // note that drawVertices will add `_currHover` automatically if needed.. - var filter = function(d) { return d.id in _prevHover; }; - drawVertices(selection$$1, graph, values$1(_prevHover), filter, extent, false); - }; + icons[entity.id] = + entity.hasInterestingTags() && + context.presets().match(entity, graph).icon; + return icons[entity.id]; + } - return drawVertices; -} -function uiAccount(context) { - var osm = context.connection(); + // memoize directions results, return false for empty arrays (for use in filter) + function getDirections(entity) { + if (entity.id in directions) return directions[entity.id]; + var angles = entity.directions(graph, projection); + directions[entity.id] = angles.length ? angles : false; + return angles; + } - function update(selection$$1) { - if (!osm) return; - if (!osm.authenticated()) { - selection$$1.selectAll('#userLink, #logoutLink') - .classed('hide', true); - return; - } + function updateAttributes(selection$$1) { + ['shadow', 'stroke', 'fill'].forEach(function(klass) { + var rads = radiuses[klass]; + selection$$1.selectAll('.' + klass) + .each(function(entity) { + var i = z && getIcon(entity); + var r = rads[i ? 3 : z]; - osm.userDetails(function(err, details) { - var userLink = selection$$1.select('#userLink'), - logoutLink = selection$$1.select('#logoutLink'); + // slightly increase the size of unconnected endpoints #3775 + if (entity.isEndpoint(graph) && !entity.isConnected(graph)) { + r += 1.5; + } - userLink.html(''); - logoutLink.html(''); + if (klass === 'shadow') { // remember this value, so we don't need to + _radii[entity.id] = r; // recompute it when we draw the touch targets + } - if (err) return; + select(this) + .attr('r', r) + .attr('visibility', (i && klass === 'fill') ? 'hidden' : null); + }); + }); - selection$$1.selectAll('#userLink, #logoutLink') - .classed('hide', false); + selection$$1.selectAll('use') + .attr('visibility', (z === 0 ? 'hidden' : null)); + } - // Link - userLink.append('a') - .attr('href', osm.userURL(details.display_name)) - .attr('target', '_blank'); + vertices.sort(sortY); + + var groups = selection$$1.selectAll('g.vertex') + .filter(filter) + .data(vertices, fastEntityKey); + + // exit + groups.exit() + .remove(); + + // enter + var enter = groups.enter() + .append('g') + .attr('class', function(d) { return 'node vertex ' + d.id; }) + .order(); + + enter + .append('circle') + .attr('class', 'shadow'); + + enter + .append('circle') + .attr('class', 'stroke'); + + // Vertices with icons get a `use`. + enter.filter(function(d) { return getIcon(d); }) + .append('use') + .attr('class', 'icon') + .attr('width', '11px') + .attr('height', '11px') + .attr('transform', 'translate(-5.5, -5.5)') + .attr('xlink:href', function(d) { + var picon = getIcon(d); + var isMaki = dataFeatureIcons.indexOf(picon) !== -1; + return '#' + picon + (isMaki ? '-11' : ''); + }); + + // Vertices with tags get a fill. + enter.filter(function(d) { return d.hasInterestingTags(); }) + .append('circle') + .attr('class', 'fill'); + + // update + groups = groups + .merge(enter) + .attr('transform', svgPointTransform(projection)) + .classed('sibling', function(d) { return d.id in sets.selected; }) + .classed('shared', function(d) { return graph.isShared(d); }) + .classed('endpoint', function(d) { return d.isEndpoint(graph); }) + .call(updateAttributes); + + + // Directional vertices get viewfields + var dgroups = groups.filter(function(d) { return getDirections(d); }) + .selectAll('.viewfieldgroup') + .data(function data$$1(d) { return zoom >= 18 ? [d] : []; }, osmEntity$$1.key); + + // exit + dgroups.exit() + .remove(); + + // enter/update + dgroups = dgroups.enter() + .insert('g', '.shadow') + .attr('class', 'viewfieldgroup') + .merge(dgroups); + + var viewfields = dgroups.selectAll('.viewfield') + .data(getDirections, function key(d) { return d; }); + + // exit + viewfields.exit() + .remove(); + + // enter/update + viewfields.enter() + .append('path') + .attr('class', 'viewfield') + .attr('d', 'M0,0H0') + .merge(viewfields) + .attr('marker-start', 'url(#viewfield-marker' + (wireframe ? '-wireframe' : '') + ')') + .attr('transform', function(d) { return 'rotate(' + d + ')'; }); + } - // Add thumbnail or dont - if (details.image_url) { - userLink.append('img') - .attr('class', 'icon pre-text user-icon') - .attr('src', details.image_url); - } else { - userLink - .call(svgIcon('#icon-avatar', 'pre-text light')); - } - // Add user name - userLink.append('span') - .attr('class', 'label') - .text(details.display_name); - - logoutLink.append('a') - .attr('class', 'logout') - .attr('href', '#') - .text(t('logout')) - .on('click.logout', function() { - event.preventDefault(); - osm.logout(); - }); - }); - } + function drawTargets(selection$$1, graph, entities, filter) { + var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor '; + var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor '; + var getTransform = svgPointTransform(projection).geojson; + var activeID = context.activeID(); + var data$$1 = { targets: [], nopes: [] }; + + entities.forEach(function(node) { + if (activeID === node.id) return; // draw no target on the activeID + + var vertexType = svgPassiveVertex(node, graph, activeID); + if (vertexType !== 0) { // passive or adjacent - allow to connect + data$$1.targets.push({ + type: 'Feature', + id: node.id, + properties: { + target: true, + entity: node + }, + geometry: node.asGeoJSON() + }); + } else { + data$$1.nopes.push({ + type: 'Feature', + id: node.id + '-nope', + properties: { + nope: true, + target: true, + entity: node + }, + geometry: node.asGeoJSON() + }); + } + }); - return function(selection$$1) { - selection$$1.append('li') - .attr('id', 'logoutLink') - .classed('hide', true); + // Targets allow hover and vertex snapping + var targets = selection$$1.selectAll('.vertex.target-allowed') + .filter(function(d) { return filter(d.properties.entity); }) + .data(data$$1.targets, function key(d) { return d.id; }); + + // exit + targets.exit() + .remove(); + + // enter/update + targets.enter() + .append('circle') + .attr('r', function(d) { return (_radii[d.id] || radiuses.shadow[3]); }) + .merge(targets) + .attr('class', function(d) { return 'node vertex target target-allowed ' + targetClass + d.id; }) + .attr('transform', getTransform); + + + // NOPE + var nopes = selection$$1.selectAll('.vertex.target-nope') + .filter(function(d) { return filter(d.properties.entity); }) + .data(data$$1.nopes, function key(d) { return d.id; }); + + // exit + nopes.exit() + .remove(); + + // enter/update + nopes.enter() + .append('circle') + .attr('r', function(d) { return (_radii[d.properties.entity.id] || radiuses.shadow[3]); }) + .merge(nopes) + .attr('class', function(d) { return 'node vertex target target-nope ' + nopeClass + d.id; }) + .attr('transform', getTransform); + } - selection$$1.append('li') - .attr('id', 'userLink') - .classed('hide', true); - if (osm) { - osm.on('change.account', function() { update(selection$$1); }); - update(selection$$1); - } - }; -} - -function uiAttribution(context) { - var selection$$1; - - - function attribution(data, klass) { - var div = selection$$1.selectAll('.' + klass) - .data([0]); - - div = div.enter() - .append('div') - .attr('class', klass) - .merge(div); - - - var background = div.selectAll('.attribution') - .data(data, function(d) { return d.name(); }); - - background.exit() - .remove(); - - background = background.enter() - .append('span') - .attr('class', 'attribution') - .each(function(d) { - if (d.terms_html) { - d3_select(this) - .html(d.terms_html); - return; - } - - var selection$$1; - if (d.terms_url) { - selection$$1 = d3_select(this) - .append('a') - .attr('href', d.terms_url) - .attr('target', '_blank'); - } else { - selection$$1 = d3_select(this); - } - - - var id_safe = d.id.replace('.', ''); - var terms_text = t('imagery.' + id_safe + '.attribution.text', - { default: d.terms_text || d.id || d.name() } - ); - - if (d.icon && !d.overlay) { - selection$$1 - .append('img') - .attr('class', 'source-image') - .attr('src', d.icon); - } - - selection$$1 - .append('span') - .attr('class', 'attribution-text') - .text(terms_text); - }) - .merge(background); + // Points can also render as vertices: + // 1. in wireframe mode or + // 2. at higher zooms if they have a direction + function renderAsVertex(entity, graph, wireframe, zoom) { + var geometry = entity.geometry(graph); + return geometry === 'vertex' || (geometry === 'point' && ( + wireframe || (zoom >= 18 && entity.directions(graph, projection).length) + )); + } - var copyright = background.selectAll('.copyright-notice') - .data(function(d) { - var notice = d.copyrightNotices(context.map().zoom(), context.map().extent()); - return notice ? [notice] : []; - }); + function getSiblingAndChildVertices(ids, graph, wireframe, zoom) { + var results = {}; + + function addChildVertices(entity) { + var geometry = entity.geometry(graph); + if (!context.features().isHiddenFeature(entity, graph, geometry)) { + var i; + if (entity.type === 'way') { + for (i = 0; i < entity.nodes.length; i++) { + var child = graph.hasEntity(entity.nodes[i]); + if (child) { + addChildVertices(child); + } + } + } else if (entity.type === 'relation') { + for (i = 0; i < entity.members.length; i++) { + var member = graph.hasEntity(entity.members[i].id); + if (member) { + addChildVertices(member); + } + } + } else if (renderAsVertex(entity, graph, wireframe, zoom)) { + results[entity.id] = entity; + } + } + } - copyright.exit() - .remove(); + ids.forEach(function(id) { + var entity = graph.hasEntity(id); + if (!entity) return; + + if (entity.type === 'node') { + if (renderAsVertex(entity, graph, wireframe, zoom)) { + results[entity.id] = entity; + graph.parentWays(entity).forEach(function(entity) { + addChildVertices(entity); + }); + } + } else { // way, relation + addChildVertices(entity); + } + }); - copyright = copyright.enter() - .append('span') - .attr('class', 'copyright-notice') - .merge(copyright); + return results; + } - copyright - .text(String); - } + function drawVertices(selection$$1, graph, entities, filter, extent, fullRedraw) { + var wireframe = context.surface().classed('fill-wireframe'); + var zoom = geoScaleToZoom(projection.scale()); + var mode = context.mode(); + var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id); - function update() { - attribution([context.background().baseLayerSource()], 'base-layer-attribution'); - attribution(context.background().overlayLayerSources().filter(function (s) { - return s.validZoom(context.map().zoom()); - }), 'overlay-layer-attribution'); - } + if (fullRedraw) { + _currPersistent = {}; + _radii = {}; + } + // Collect important vertices from the `entities` list.. + // (during a paritial redraw, it will not contain everything) + for (var i = 0; i < entities.length; i++) { + var entity = entities[i]; + var geometry = entity.geometry(graph); + var keep = false; + + // a point that looks like a vertex.. + if ((geometry === 'point') && renderAsVertex(entity, graph, wireframe, zoom)) { + _currPersistent[entity.id] = entity; + keep = true; + + // a vertex of some importance.. + } else if (geometry === 'vertex' && + (entity.hasInterestingTags() || entity.isEndpoint(graph) || entity.isConnected(graph))) { + _currPersistent[entity.id] = entity; + keep = true; + } + + // whatever this is, it's not a persistent vertex.. + if (!keep && !fullRedraw) { + delete _currPersistent[entity.id]; + } + } - return function(select$$1) { - selection$$1 = select$$1; + // 3 sets of vertices to consider: + var sets = { + persistent: _currPersistent, // persistent = important vertices (render always) + selected: _currSelected, // selected + siblings of selected (render always) + hovered: _currHover // hovered + siblings of hovered (render only in draw modes) + }; - context.background() - .on('change.attribution', update); + var all = assign({}, (isMoving ? _currHover : {}), _currSelected, _currPersistent); - context.map() - .on('move.attribution', throttle(update, 400, {leading: false})); + // Draw the vertices.. + // The filter function controls the scope of what objects d3 will touch (exit/enter/update) + // Adjust the filter function to expand the scope beyond whatever entities were passed in. + var filterRendered = function(d) { + return d.id in _currPersistent || d.id in _currSelected || d.id in _currHover || filter(d); + }; + selection$$1.selectAll('.layer-points .layer-points-vertices') + .call(draw, graph, currentVisible(all), sets, filterRendered); - update(); - }; -} - -// toggles the visibility of ui elements, using a combination of the -// hide class, which sets display=none, and a d3 transition for opacity. -// this will cause blinking when called repeatedly, so check that the -// value actually changes between calls. -function uiToggle(show, callback) { - return function(selection$$1) { - selection$$1 - .style('opacity', show ? 0 : 1) - .classed('hide', false) - .transition() - .style('opacity', show ? 1 : 0) - .on('end', function() { - d3_select(this) - .classed('hide', !show) - .style('opacity', null); - if (callback) callback.apply(this); - }); - }; -} - -function uiDisclosure(context, key, expandedDefault) { - var dispatch$$1 = dispatch('toggled'), - _preference = (context.storage('disclosure.' + key + '.expanded')), - _expanded = (_preference === null ? !!expandedDefault : (_preference === 'true')), - _title, - _updatePreference = true, - _content = function () {}; - - - var disclosure = function(selection$$1) { - var hideToggle = selection$$1.selectAll('.hide-toggle-' + key) - .data([0]); - - // enter - var hideToggleEnter = hideToggle.enter() - .append('a') - .attr('href', '#') - .attr('class', 'hide-toggle hide-toggle-' + key) - .call(svgIcon('', 'pre-text', 'hide-toggle-icon')); - - hideToggleEnter - .append('span') - .attr('class', 'hide-toggle-text'); - - // update - hideToggle = hideToggleEnter - .merge(hideToggle); - - hideToggle - .on('click', toggle) - .classed('expanded', _expanded); - - hideToggle.selectAll('.hide-toggle-text') - .text(_title); - - hideToggle.selectAll('.hide-toggle-icon') - .attr('xlink:href', _expanded ? '#icon-down' - : (textDirection === 'rtl') ? '#icon-backward' : '#icon-forward' - ); + // Draw touch targets.. + // When drawing, render all targets (not just those affected by a partial redraw) + var filterTouch = function(d) { + return isMoving ? true : filterRendered(d); + }; + selection$$1.selectAll('.layer-points .layer-points-targets') + .call(drawTargets, graph, currentVisible(all), filterTouch); - var wrap = selection$$1.selectAll('.disclosure-wrap') - .data([0]); + function currentVisible(which) { + return Object.keys(which) + .map(graph.hasEntity, graph) // the current version of this entity + .filter(function (entity) { return entity && entity.intersects(extent, graph); }); + } + } - wrap = wrap.enter() - .append('div') - .attr('class', 'disclosure-wrap disclosure-wrap-' + key) - .merge(wrap); - wrap - .classed('hide', !_expanded) - .call(_content); + // partial redraw - only update the selected items.. + drawVertices.drawSelected = function(selection$$1, graph, extent) { + var wireframe = context.surface().classed('fill-wireframe'); + var zoom = geoScaleToZoom(projection.scale()); + _prevSelected = _currSelected || {}; + _currSelected = getSiblingAndChildVertices(context.selectedIDs(), graph, wireframe, zoom); - function toggle() { - event.preventDefault(); + // note that drawVertices will add `_currSelected` automatically if needed.. + var filter = function(d) { return d.id in _prevSelected; }; + drawVertices(selection$$1, graph, values$1(_prevSelected), filter, extent, false); + }; - _expanded = !_expanded; - if (_updatePreference) { - context.storage('disclosure.' + key + '.expanded', _expanded); - } + // partial redraw - only update the hovered items.. + drawVertices.drawHover = function(selection$$1, graph, target, extent) { + if (target === _currHoverTarget) return; // continue only if something changed - hideToggle - .classed('expanded', _expanded); + var wireframe = context.surface().classed('fill-wireframe'); + var zoom = geoScaleToZoom(projection.scale()); - hideToggle.selectAll('.hide-toggle-icon') - .attr('xlink:href', _expanded ? '#icon-down' - : (textDirection === 'rtl') ? '#icon-backward' : '#icon-forward' - ); + _prevHover = _currHover || {}; + _currHoverTarget = target; + var entity = target && target.properties && target.properties.entity; - wrap - .call(uiToggle(_expanded)); + if (entity) { + _currHover = getSiblingAndChildVertices([entity.id], graph, wireframe, zoom); + } else { + _currHover = {}; + } - dispatch$$1.call('toggled', this, _expanded); - } - }; + // note that drawVertices will add `_currHover` automatically if needed.. + var filter = function(d) { return d.id in _prevHover; }; + drawVertices(selection$$1, graph, values$1(_prevHover), filter, extent, false); + }; + return drawVertices; + } - disclosure.title = function(_) { - if (!arguments.length) return _title; - _title = _; - return disclosure; - }; + function uiAccount(context) { + var osm = context.connection(); - disclosure.expanded = function(_) { - if (!arguments.length) return _expanded; - _expanded = _; - return disclosure; - }; + function update(selection$$1) { + if (!osm) return; + if (!osm.authenticated()) { + selection$$1.selectAll('#userLink, #logoutLink') + .classed('hide', true); + return; + } - disclosure.updatePreference = function(_) { - if (!arguments.length) return _updatePreference; - _updatePreference = _; - return disclosure; - }; + osm.userDetails(function(err, details) { + var userLink = selection$$1.select('#userLink'), + logoutLink = selection$$1.select('#logoutLink'); + userLink.html(''); + logoutLink.html(''); - disclosure.content = function(_) { - if (!arguments.length) return _content; - _content = _; - return disclosure; - }; + if (err) return; + selection$$1.selectAll('#userLink, #logoutLink') + .classed('hide', false); - return utilRebind(disclosure, dispatch$$1, 'on'); -} + // Link + userLink.append('a') + .attr('href', osm.userURL(details.display_name)) + .attr('target', '_blank'); -function uiBackgroundDisplayOptions(context) { - var detected = utilDetect(); - var storedOpacity = context.storage('background-opacity'); - var minVal = 0.25; - var maxVal = detected.cssfilters ? 2 : 1; + // Add thumbnail or dont + if (details.image_url) { + userLink.append('img') + .attr('class', 'icon pre-text user-icon') + .attr('src', details.image_url); + } else { + userLink + .call(svgIcon('#icon-avatar', 'pre-text light')); + } - var sliders = detected.cssfilters - ? ['brightness', 'contrast', 'saturation', 'sharpness'] - : ['brightness']; + // Add user name + userLink.append('span') + .attr('class', 'label') + .text(details.display_name); + + logoutLink.append('a') + .attr('class', 'logout') + .attr('href', '#') + .text(t('logout')) + .on('click.logout', function() { + event.preventDefault(); + osm.logout(); + }); + }); + } - var _options = { - brightness: (storedOpacity !== null ? (+storedOpacity) : 1), - contrast: 1, - saturation: 1, - sharpness: 1 - }; - var _selection = d3_select(null); + return function(selection$$1) { + selection$$1.append('li') + .attr('id', 'logoutLink') + .classed('hide', true); + selection$$1.append('li') + .attr('id', 'userLink') + .classed('hide', true); - function clamp(x, min, max) { - return Math.max(min, Math.min(x, max)); - } + if (osm) { + osm.on('change.account', function() { update(selection$$1); }); + update(selection$$1); + } + }; + } + function uiAttribution(context) { + var selection$$1; - function updateValue(d, val) { - if (!val && event && event.target) { - val = event.target.value; - } - val = clamp(val, minVal, maxVal); + function attribution(data, klass) { + var div = selection$$1.selectAll('.' + klass) + .data([0]); - _options[d] = val; - context.background()[d](val); + div = div.enter() + .append('div') + .attr('class', klass) + .merge(div); - if (d === 'brightness') { - context.storage('background-opacity', val); - } - _selection - .call(render); - } - - - function render(selection$$1) { - var container = selection$$1.selectAll('.display-options-container') - .data([0]); - - var containerEnter = container.enter() - .append('div') - .attr('class', 'display-options-container controls-list'); - - // add slider controls - var slidersEnter = containerEnter.selectAll('.display-control') - .data(sliders) - .enter() - .append('div') - .attr('class', function(d) { return 'display-control display-control-' + d; }); - - slidersEnter - .append('h5') - .text(function(d) { return t('background.' + d); }) - .append('span') - .attr('class', function(d) { return 'display-option-value display-option-value-' + d; }); - - slidersEnter - .append('input') - .attr('class', function(d) { return 'display-option-input display-option-input-' + d; }) - .attr('type', 'range') - .attr('min', minVal) - .attr('max', maxVal) - .attr('step', '0.05') - .on('input', function(d) { - var val = d3_select(this).property('value'); - updateValue(d, val); - }); + var background = div.selectAll('.attribution') + .data(data, function(d) { return d.name(); }); - slidersEnter - .append('button') - .attr('title', t('background.reset')) - .attr('class', function(d) { return 'display-option-reset display-option-reset-' + d; }) - .on('click', function(d) { - if (event.button !== 0) return; - updateValue(d, 1); - }) - .call(svgIcon('#icon-' + (textDirection === 'rtl' ? 'redo' : 'undo'))); + background.exit() + .remove(); + background = background.enter() + .append('span') + .attr('class', 'attribution') + .each(function(d) { + if (d.terms_html) { + select(this) + .html(d.terms_html); + return; + } - // update - container = containerEnter - .merge(container); + var selection$$1; + if (d.terms_url) { + selection$$1 = select(this) + .append('a') + .attr('href', d.terms_url) + .attr('target', '_blank'); + } else { + selection$$1 = select(this); + } - container.selectAll('.display-option-input') - .property('value', function(d) { return _options[d]; }); - container.selectAll('.display-option-value') - .text(function(d) { return Math.floor(_options[d] * 100) + '%'; }); + var id_safe = d.id.replace('.', ''); + var terms_text = t('imagery.' + id_safe + '.attribution.text', + { default: d.terms_text || d.id || d.name() } + ); - container.selectAll('.display-option-reset') - .classed('disabled', function(d) { return _options[d] === 1; }); + if (d.icon && !d.overlay) { + selection$$1 + .append('img') + .attr('class', 'source-image') + .attr('src', d.icon); + } - // first time only, set brightness if needed - if (containerEnter.size() && _options.brightness !== 1) { - context.background().brightness(_options.brightness); - } - } + selection$$1 + .append('span') + .attr('class', 'attribution-text') + .text(terms_text); + }) + .merge(background); - function backgroundDisplayOptions(selection$$1) { - _selection = selection$$1; + var copyright = background.selectAll('.copyright-notice') + .data(function(d) { + var notice = d.copyrightNotices(context.map().zoom(), context.map().extent()); + return notice ? [notice] : []; + }); - selection$$1 - .call(uiDisclosure(context, 'background_display_options', true) - .title(t('background.display_options')) - .content(render) - ); - } + copyright.exit() + .remove(); + copyright = copyright.enter() + .append('span') + .attr('class', 'copyright-notice') + .merge(copyright); - return backgroundDisplayOptions; -} + copyright + .text(String); + } -function uiBackgroundOffset(context) { - var directions = [ - ['right', [0.5, 0]], - ['top', [0, -0.5]], - ['left', [-0.5, 0]], - ['bottom', [0, 0.5]] - ]; + function update() { + attribution([context.background().baseLayerSource()], 'base-layer-attribution'); + attribution(context.background().overlayLayerSources().filter(function (s) { + return s.validZoom(context.map().zoom()); + }), 'overlay-layer-attribution'); + } - function d3_eventCancel() { - event.stopPropagation(); - event.preventDefault(); - } + return function(select$$1) { + selection$$1 = select$$1; - function updateValue() { - var meters = geoOffsetToMeters(context.background().offset()); - var x = +meters[0].toFixed(2); - var y = +meters[1].toFixed(2); + context.background() + .on('change.attribution', update); - d3_selectAll('.nudge-inner-rect') - .select('input') - .classed('error', false) - .property('value', x + ', ' + y); + context.map() + .on('move.attribution', throttle(update, 400, {leading: false})); - d3_selectAll('.nudge-reset') - .classed('disabled', function() { - return (x === 0 && y === 0); - }); - } + update(); + }; + } + // toggles the visibility of ui elements, using a combination of the + // hide class, which sets display=none, and a d3 transition for opacity. + // this will cause blinking when called repeatedly, so check that the + // value actually changes between calls. + function uiToggle(show, callback) { + return function(selection$$1) { + selection$$1 + .style('opacity', show ? 0 : 1) + .classed('hide', false) + .transition() + .style('opacity', show ? 1 : 0) + .on('end', function() { + select(this) + .classed('hide', !show) + .style('opacity', null); + if (callback) callback.apply(this); + }); + }; + } - function resetOffset() { - context.background().offset([0, 0]); - updateValue(); - } + function uiDisclosure(context, key, expandedDefault) { + var dispatch$$1 = dispatch('toggled'), + _preference = (context.storage('disclosure.' + key + '.expanded')), + _expanded = (_preference === null ? !!expandedDefault : (_preference === 'true')), + _title, + _updatePreference = true, + _content = function () {}; - function nudge(d) { - context.background().nudge(d, context.map().zoom()); - updateValue(); - } + var disclosure = function(selection$$1) { + var hideToggle = selection$$1.selectAll('.hide-toggle-' + key) + .data([0]); + // enter + var hideToggleEnter = hideToggle.enter() + .append('a') + .attr('href', '#') + .attr('class', 'hide-toggle hide-toggle-' + key) + .call(svgIcon('', 'pre-text', 'hide-toggle-icon')); - function clickNudgeButton(d) { - var interval; - var timeout = window.setTimeout(function() { - interval = window.setInterval(nudge.bind(null, d), 100); - }, 500); + hideToggleEnter + .append('span') + .attr('class', 'hide-toggle-text'); - function doneNudge() { - window.clearTimeout(timeout); - window.clearInterval(interval); - d3_select(window) - .on('mouseup.buttonoffset', null, true) - .on('mousedown.buttonoffset', null, true); - } + // update + hideToggle = hideToggleEnter + .merge(hideToggle); - d3_select(window) - .on('mouseup.buttonoffset', doneNudge, true) - .on('mousedown.buttonoffset', doneNudge, true); + hideToggle + .on('click', toggle) + .classed('expanded', _expanded); - nudge(d); - } + hideToggle.selectAll('.hide-toggle-text') + .text(_title); + hideToggle.selectAll('.hide-toggle-icon') + .attr('xlink:href', _expanded ? '#icon-down' + : (textDirection === 'rtl') ? '#icon-backward' : '#icon-forward' + ); - function inputOffset() { - var input = d3_select(this); - var d = input.node().value; - if (d === '') return resetOffset(); + var wrap = selection$$1.selectAll('.disclosure-wrap') + .data([0]); - d = d.replace(/;/g, ',').split(',').map(function(n) { - // if n is NaN, it will always get mapped to false. - return !isNaN(n) && n; - }); + wrap = wrap.enter() + .append('div') + .attr('class', 'disclosure-wrap disclosure-wrap-' + key) + .merge(wrap); - if (d.length !== 2 || !d[0] || !d[1]) { - input.classed('error', true); - return; - } + wrap + .classed('hide', !_expanded) + .call(_content); - context.background().offset(geoMetersToOffset(d)); - updateValue(); - } + function toggle() { + event.preventDefault(); - function dragOffset() { - event.preventDefault(); - if (event.button !== 0) return; + _expanded = !_expanded; - var origin = [event.clientX, event.clientY]; + if (_updatePreference) { + context.storage('disclosure.' + key + '.expanded', _expanded); + } - context.container() - .append('div') - .attr('class', 'nudge-surface'); + hideToggle + .classed('expanded', _expanded); - d3_select(window) - .on('mousemove.offset', function() { - var latest = [event.clientX, event.clientY]; - var d = [ - -(origin[0] - latest[0]) / 4, - -(origin[1] - latest[1]) / 4 - ]; + hideToggle.selectAll('.hide-toggle-icon') + .attr('xlink:href', _expanded ? '#icon-down' + : (textDirection === 'rtl') ? '#icon-backward' : '#icon-forward' + ); - origin = latest; - nudge(d); - }) - .on('mouseup.offset', function() { - if (event.button !== 0) return; - d3_selectAll('.nudge-surface') - .remove(); + wrap + .call(uiToggle(_expanded)); - d3_select(window) - .on('mousemove.offset', null) - .on('mouseup.offset', null); - }); - } + dispatch$$1.call('toggled', this, _expanded); + } + }; - function render(selection$$1) { - var container = selection$$1.selectAll('.nudge-container') - .data([0]); - - var containerEnter = container.enter() - .append('div') - .attr('class', 'nudge-container cf'); - - containerEnter - .append('div') - .attr('class', 'nudge-instructions') - .text(t('background.offset')); - - var nudgeEnter = containerEnter - .append('div') - .attr('class', 'nudge-outer-rect') - .on('mousedown', dragOffset); - - nudgeEnter - .append('div') - .attr('class', 'nudge-inner-rect') - .append('input') - .on('change', inputOffset); - - containerEnter - .append('div') - .selectAll('button') - .data(directions).enter() - .append('button') - .attr('class', function(d) { return d[0] + ' nudge'; }) - .on('contextmenu', d3_eventCancel) - .on('mousedown', function(d) { - if (event.button !== 0) return; - clickNudgeButton(d[1]); - }); + disclosure.title = function(_) { + if (!arguments.length) return _title; + _title = _; + return disclosure; + }; - containerEnter - .append('button') - .attr('title', t('background.reset')) - .attr('class', 'nudge-reset disabled') - .on('contextmenu', d3_eventCancel) - .on('click', function() { - if (event.button !== 0) return; - resetOffset(); - }) - .call(svgIcon('#icon-' + (textDirection === 'rtl' ? 'redo' : 'undo'))); - updateValue(); - } + disclosure.expanded = function(_) { + if (!arguments.length) return _expanded; + _expanded = _; + return disclosure; + }; - function backgroundOffset(selection$$1) { - selection$$1 - .call(uiDisclosure(context, 'background_offset', false) - .title(t('background.fix_misalignment')) - .content(render) - ); - } + disclosure.updatePreference = function(_) { + if (!arguments.length) return _updatePreference; + _updatePreference = _; + return disclosure; + }; - context.background() - .on('change.backgroundOffset-update', updateValue); - - return backgroundOffset; -} - -var marked = createCommonjsModule(function (module, exports) { -(function(root) { - -/** - * Block-Level Grammar - */ - -var block = { - newline: /^\n+/, - code: /^( {4}[^\n]+\n*)+/, - fences: noop, - hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/, - heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, - nptable: noop, - blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/, - list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, - html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/, - def: /^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/, - table: noop, - lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, - paragraph: /^([^\n]+(?:\n?(?!hr|heading|lheading| {0,3}>|tag)[^\n]+)+)/, - text: /^[^\n]+/ -}; - -block._label = /(?:\\[\[\]]|[^\[\]])+/; -block._title = /(?:"(?:\\"|[^"]|"[^"\n]*")*"|'\n?(?:[^'\n]+\n?)*'|\([^()]*\))/; -block.def = edit(block.def) - .replace('label', block._label) - .replace('title', block._title) - .getRegex(); - -block.bullet = /(?:[*+-]|\d+\.)/; -block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; -block.item = edit(block.item, 'gm') - .replace(/bull/g, block.bullet) - .getRegex(); - -block.list = edit(block.list) - .replace(/bull/g, block.bullet) - .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))') - .replace('def', '\\n+(?=' + block.def.source + ')') - .getRegex(); - -block._tag = '(?!(?:' - + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' - + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' - + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b'; - -block.html = edit(block.html) - .replace('comment', //) - .replace('closed', /<(tag)[\s\S]+?<\/\1>/) - .replace('closing', /\s]*)*?\/?>/) - .replace(/tag/g, block._tag) - .getRegex(); - -block.paragraph = edit(block.paragraph) - .replace('hr', block.hr) - .replace('heading', block.heading) - .replace('lheading', block.lheading) - .replace('tag', '<' + block._tag) - .getRegex(); - -block.blockquote = edit(block.blockquote) - .replace('paragraph', block.paragraph) - .getRegex(); - -/** - * Normal Block Grammar - */ - -block.normal = merge({}, block); - -/** - * GFM Block Grammar - */ - -block.gfm = merge({}, block.normal, { - fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/, - paragraph: /^/, - heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/ -}); - -block.gfm.paragraph = edit(block.paragraph) - .replace('(?!', '(?!' - + block.gfm.fences.source.replace('\\1', '\\2') + '|' - + block.list.source.replace('\\1', '\\3') + '|') - .getRegex(); - -/** - * GFM + Tables Block Grammar - */ - -block.tables = merge({}, block.gfm, { - nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, - table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ -}); - -/** - * Block Lexer - */ - -function Lexer(options) { - this.tokens = []; - this.tokens.links = {}; - this.options = options || marked.defaults; - this.rules = block.normal; - - if (this.options.gfm) { - if (this.options.tables) { - this.rules = block.tables; - } else { - this.rules = block.gfm; - } - } -} - -/** - * Expose Block Rules - */ - -Lexer.rules = block; - -/** - * Static Lex Method - */ - -Lexer.lex = function(src, options) { - var lexer = new Lexer(options); - return lexer.lex(src); -}; - -/** - * Preprocessing - */ - -Lexer.prototype.lex = function(src) { - src = src - .replace(/\r\n|\r/g, '\n') - .replace(/\t/g, ' ') - .replace(/\u00a0/g, ' ') - .replace(/\u2424/g, '\n'); - - return this.token(src, true); -}; - -/** - * Lexing - */ - -Lexer.prototype.token = function(src, top) { - src = src.replace(/^ +$/gm, ''); - var next, - loose, - cap, - bull, - b, - item, - space, - i, - tag, - l; - - while (src) { - // newline - if (cap = this.rules.newline.exec(src)) { - src = src.substring(cap[0].length); - if (cap[0].length > 1) { - this.tokens.push({ - type: 'space' - }); - } - } + disclosure.content = function(_) { + if (!arguments.length) return _content; + _content = _; + return disclosure; + }; - // code - if (cap = this.rules.code.exec(src)) { - src = src.substring(cap[0].length); - cap = cap[0].replace(/^ {4}/gm, ''); - this.tokens.push({ - type: 'code', - text: !this.options.pedantic - ? cap.replace(/\n+$/, '') - : cap - }); - continue; - } - // fences (gfm) - if (cap = this.rules.fences.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'code', - lang: cap[2], - text: cap[3] || '' - }); - continue; - } + return utilRebind(disclosure, dispatch$$1, 'on'); + } - // heading - if (cap = this.rules.heading.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'heading', - depth: cap[1].length, - text: cap[2] - }); - continue; - } + function uiBackgroundDisplayOptions(context) { + var detected = utilDetect(); + var storedOpacity = context.storage('background-opacity'); + var minVal = 0.25; + var maxVal = detected.cssfilters ? 2 : 1; - // table no leading pipe (gfm) - if (top && (cap = this.rules.nptable.exec(src))) { - src = src.substring(cap[0].length); + var sliders = detected.cssfilters + ? ['brightness', 'contrast', 'saturation', 'sharpness'] + : ['brightness']; - item = { - type: 'table', - header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), - align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), - cells: cap[3].replace(/\n$/, '').split('\n') + var _options = { + brightness: (storedOpacity !== null ? (+storedOpacity) : 1), + contrast: 1, + saturation: 1, + sharpness: 1 }; - for (i = 0; i < item.align.length; i++) { - if (/^ *-+: *$/.test(item.align[i])) { - item.align[i] = 'right'; - } else if (/^ *:-+: *$/.test(item.align[i])) { - item.align[i] = 'center'; - } else if (/^ *:-+ *$/.test(item.align[i])) { - item.align[i] = 'left'; - } else { - item.align[i] = null; - } - } + var _selection = select(null); - for (i = 0; i < item.cells.length; i++) { - item.cells[i] = item.cells[i].split(/ *\| */); - } - this.tokens.push(item); + function clamp(x, min, max) { + return Math.max(min, Math.min(x, max)); + } - continue; - } - // hr - if (cap = this.rules.hr.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'hr' - }); - continue; - } + function updateValue(d, val) { + if (!val && event && event.target) { + val = event.target.value; + } - // blockquote - if (cap = this.rules.blockquote.exec(src)) { - src = src.substring(cap[0].length); + val = clamp(val, minVal, maxVal); - this.tokens.push({ - type: 'blockquote_start' - }); + _options[d] = val; + context.background()[d](val); - cap = cap[0].replace(/^ *> ?/gm, ''); + if (d === 'brightness') { + context.storage('background-opacity', val); + } - // Pass `top` to keep the current - // "toplevel" state. This is exactly - // how markdown.pl works. - this.token(cap, top); + _selection + .call(render); + } - this.tokens.push({ - type: 'blockquote_end' - }); - continue; - } + function render(selection$$1) { + var container = selection$$1.selectAll('.display-options-container') + .data([0]); + + var containerEnter = container.enter() + .append('div') + .attr('class', 'display-options-container controls-list'); + + // add slider controls + var slidersEnter = containerEnter.selectAll('.display-control') + .data(sliders) + .enter() + .append('div') + .attr('class', function(d) { return 'display-control display-control-' + d; }); + + slidersEnter + .append('h5') + .text(function(d) { return t('background.' + d); }) + .append('span') + .attr('class', function(d) { return 'display-option-value display-option-value-' + d; }); + + slidersEnter + .append('input') + .attr('class', function(d) { return 'display-option-input display-option-input-' + d; }) + .attr('type', 'range') + .attr('min', minVal) + .attr('max', maxVal) + .attr('step', '0.05') + .on('input', function(d) { + var val = select(this).property('value'); + updateValue(d, val); + }); + + slidersEnter + .append('button') + .attr('title', t('background.reset')) + .attr('class', function(d) { return 'display-option-reset display-option-reset-' + d; }) + .on('click', function(d) { + if (event.button !== 0) return; + updateValue(d, 1); + }) + .call(svgIcon('#icon-' + (textDirection === 'rtl' ? 'redo' : 'undo'))); + + + // update + container = containerEnter + .merge(container); + + container.selectAll('.display-option-input') + .property('value', function(d) { return _options[d]; }); + + container.selectAll('.display-option-value') + .text(function(d) { return Math.floor(_options[d] * 100) + '%'; }); + + container.selectAll('.display-option-reset') + .classed('disabled', function(d) { return _options[d] === 1; }); + + // first time only, set brightness if needed + if (containerEnter.size() && _options.brightness !== 1) { + context.background().brightness(_options.brightness); + } + } - // list - if (cap = this.rules.list.exec(src)) { - src = src.substring(cap[0].length); - bull = cap[2]; - this.tokens.push({ - type: 'list_start', - ordered: bull.length > 1 - }); + function backgroundDisplayOptions(selection$$1) { + _selection = selection$$1; - // Get each top-level item. - cap = cap[0].match(this.rules.item); + selection$$1 + .call(uiDisclosure(context, 'background_display_options', true) + .title(t('background.display_options')) + .content(render) + ); + } - next = false; - l = cap.length; - i = 0; - for (; i < l; i++) { - item = cap[i]; + return backgroundDisplayOptions; + } - // Remove the list item's bullet - // so it is seen as the next token. - space = item.length; - item = item.replace(/^ *([*+-]|\d+\.) +/, ''); + function uiBackgroundOffset(context) { + var directions = [ + ['right', [0.5, 0]], + ['top', [0, -0.5]], + ['left', [-0.5, 0]], + ['bottom', [0, 0.5]] + ]; - // Outdent whatever the - // list item contains. Hacky. - if (~item.indexOf('\n ')) { - space -= item.length; - item = !this.options.pedantic - ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') - : item.replace(/^ {1,4}/gm, ''); - } - // Determine whether the next list item belongs here. - // Backpedal if it does not belong in this list. - if (this.options.smartLists && i !== l - 1) { - b = block.bullet.exec(cap[i + 1])[0]; - if (bull !== b && !(bull.length > 1 && b.length > 1)) { - src = cap.slice(i + 1).join('\n') + src; - i = l - 1; - } - } + function d3_eventCancel() { + event.stopPropagation(); + event.preventDefault(); + } - // Determine whether item is loose or not. - // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ - // for discount behavior. - loose = next || /\n\n(?!\s*$)/.test(item); - if (i !== l - 1) { - next = item.charAt(item.length - 1) === '\n'; - if (!loose) loose = next; - } - this.tokens.push({ - type: loose - ? 'loose_item_start' - : 'list_item_start' - }); + function updateValue() { + var meters = geoOffsetToMeters(context.background().offset()); + var x = +meters[0].toFixed(2); + var y = +meters[1].toFixed(2); - // Recurse. - this.token(item, false); + d3_selectAll('.nudge-inner-rect') + .select('input') + .classed('error', false) + .property('value', x + ', ' + y); - this.tokens.push({ - type: 'list_item_end' - }); + d3_selectAll('.nudge-reset') + .classed('disabled', function() { + return (x === 0 && y === 0); + }); } - this.tokens.push({ - type: 'list_end' - }); - continue; - } + function resetOffset() { + context.background().offset([0, 0]); + updateValue(); + } - // html - if (cap = this.rules.html.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: this.options.sanitize - ? 'paragraph' - : 'html', - pre: !this.options.sanitizer - && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), - text: cap[0] - }); - continue; - } - // def - if (top && (cap = this.rules.def.exec(src))) { - src = src.substring(cap[0].length); - if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1); - tag = cap[1].toLowerCase(); - if (!this.tokens.links[tag]) { - this.tokens.links[tag] = { - href: cap[2], - title: cap[3] - }; + function nudge(d) { + context.background().nudge(d, context.map().zoom()); + updateValue(); } - continue; - } - // table (gfm) - if (top && (cap = this.rules.table.exec(src))) { - src = src.substring(cap[0].length); - item = { - type: 'table', - header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), - align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), - cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') - }; + function clickNudgeButton(d) { + var interval; + var timeout = window.setTimeout(function() { + interval = window.setInterval(nudge.bind(null, d), 100); + }, 500); - for (i = 0; i < item.align.length; i++) { - if (/^ *-+: *$/.test(item.align[i])) { - item.align[i] = 'right'; - } else if (/^ *:-+: *$/.test(item.align[i])) { - item.align[i] = 'center'; - } else if (/^ *:-+ *$/.test(item.align[i])) { - item.align[i] = 'left'; - } else { - item.align[i] = null; - } - } + function doneNudge() { + window.clearTimeout(timeout); + window.clearInterval(interval); + select(window) + .on('mouseup.buttonoffset', null, true) + .on('mousedown.buttonoffset', null, true); + } + + select(window) + .on('mouseup.buttonoffset', doneNudge, true) + .on('mousedown.buttonoffset', doneNudge, true); - for (i = 0; i < item.cells.length; i++) { - item.cells[i] = item.cells[i] - .replace(/^ *\| *| *\| *$/g, '') - .split(/ *\| */); + nudge(d); } - this.tokens.push(item); - continue; - } + function inputOffset() { + var input = select(this); + var d = input.node().value; - // lheading - if (cap = this.rules.lheading.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'heading', - depth: cap[2] === '=' ? 1 : 2, - text: cap[1] - }); - continue; - } + if (d === '') return resetOffset(); - // top-level paragraph - if (top && (cap = this.rules.paragraph.exec(src))) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'paragraph', - text: cap[1].charAt(cap[1].length - 1) === '\n' - ? cap[1].slice(0, -1) - : cap[1] - }); - continue; - } + d = d.replace(/;/g, ',').split(',').map(function(n) { + // if n is NaN, it will always get mapped to false. + return !isNaN(n) && n; + }); - // text - if (cap = this.rules.text.exec(src)) { - // Top-level should never reach here. - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'text', - text: cap[0] - }); - continue; - } + if (d.length !== 2 || !d[0] || !d[1]) { + input.classed('error', true); + return; + } - if (src) { - throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); - } - } + context.background().offset(geoMetersToOffset(d)); + updateValue(); + } - return this.tokens; -}; -/** - * Inline-Level Grammar - */ + function dragOffset() { + event.preventDefault(); + if (event.button !== 0) return; + + var origin = [event.clientX, event.clientY]; + + context.container() + .append('div') + .attr('class', 'nudge-surface'); + + select(window) + .on('mousemove.offset', function() { + var latest = [event.clientX, event.clientY]; + var d = [ + -(origin[0] - latest[0]) / 4, + -(origin[1] - latest[1]) / 4 + ]; + + origin = latest; + nudge(d); + }) + .on('mouseup.offset', function() { + if (event.button !== 0) return; + d3_selectAll('.nudge-surface') + .remove(); + + select(window) + .on('mousemove.offset', null) + .on('mouseup.offset', null); + }); + } -var inline = { - escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, - autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, - url: noop, - tag: /^|^<\/?[a-zA-Z0-9\-]+(?:"[^"]*"|'[^']*'|\s[^<'">\/\s]*)*?\/?>/, - link: /^!?\[(inside)\]\(href\)/, - reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, - nolink: /^!?\[((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\]/, - strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, - em: /^_([^\s_](?:[^_]|__)+?[^\s_])_\b|^\*((?:\*\*|[^*])+?)\*(?!\*)/, - code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/, - br: /^ {2,}\n(?!\s*$)/, - del: noop, - text: /^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/; + function backgroundOffset(selection$$1) { + selection$$1 + .call(uiDisclosure(context, 'background_offset', false) + .title(t('background.fix_misalignment')) + .content(render) + ); + } -inline.link = edit(inline.link) - .replace('inside', inline._inside) - .replace('href', inline._href) - .getRegex(); -inline.reflink = edit(inline.reflink) - .replace('inside', inline._inside) - .getRegex(); + context.background() + .on('change.backgroundOffset-update', updateValue); -/** - * Normal Inline Grammar - */ + return backgroundOffset; + } -inline.normal = merge({}, inline); + var marked = createCommonjsModule(function (module, exports) { + (function(root) { -/** - * Pedantic Inline Grammar - */ + /** + * Block-Level Grammar + */ -inline.pedantic = merge({}, inline.normal, { - strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, - em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ -}); + var block = { + newline: /^\n+/, + code: /^( {4}[^\n]+\n*)+/, + fences: noop, + hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/, + heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, + nptable: noop, + blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/, + list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, + html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/, + def: /^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/, + table: noop, + lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, + paragraph: /^([^\n]+(?:\n?(?!hr|heading|lheading| {0,3}>|tag)[^\n]+)+)/, + text: /^[^\n]+/ + }; -/** - * GFM Inline Grammar - */ + block._label = /(?:\\[\[\]]|[^\[\]])+/; + block._title = /(?:"(?:\\"|[^"]|"[^"\n]*")*"|'\n?(?:[^'\n]+\n?)*'|\([^()]*\))/; + block.def = edit(block.def) + .replace('label', block._label) + .replace('title', block._title) + .getRegex(); + + block.bullet = /(?:[*+-]|\d+\.)/; + block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; + block.item = edit(block.item, 'gm') + .replace(/bull/g, block.bullet) + .getRegex(); + + block.list = edit(block.list) + .replace(/bull/g, block.bullet) + .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))') + .replace('def', '\\n+(?=' + block.def.source + ')') + .getRegex(); + + block._tag = '(?!(?:' + + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' + + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' + + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b'; + + block.html = edit(block.html) + .replace('comment', //) + .replace('closed', /<(tag)[\s\S]+?<\/\1>/) + .replace('closing', /\s]*)*?\/?>/) + .replace(/tag/g, block._tag) + .getRegex(); + + block.paragraph = edit(block.paragraph) + .replace('hr', block.hr) + .replace('heading', block.heading) + .replace('lheading', block.lheading) + .replace('tag', '<' + block._tag) + .getRegex(); + + block.blockquote = edit(block.blockquote) + .replace('paragraph', block.paragraph) + .getRegex(); -inline.gfm = merge({}, inline.normal, { - escape: edit(inline.escape).replace('])', '~|])').getRegex(), - url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/) - .replace('email', inline._email) - .getRegex(), - _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/, - del: /^~~(?=\S)([\s\S]*?\S)~~/, - text: edit(inline.text) - .replace(']|', '~]|') - .replace('|', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|') - .getRegex() -}); - -/** - * GFM + Line Breaks Inline Grammar - */ - -inline.breaks = merge({}, inline.gfm, { - br: edit(inline.br).replace('{2,}', '*').getRegex(), - text: edit(inline.gfm.text).replace('{2,}', '*').getRegex() -}); - -/** - * Inline Lexer & Compiler - */ - -function InlineLexer(links, options) { - this.options = options || marked.defaults; - this.links = links; - this.rules = inline.normal; - this.renderer = this.options.renderer || new Renderer(); - this.renderer.options = this.options; - - if (!this.links) { - throw new Error('Tokens array requires a `links` property.'); - } - - if (this.options.gfm) { - if (this.options.breaks) { - this.rules = inline.breaks; - } else { - this.rules = inline.gfm; - } - } else if (this.options.pedantic) { - this.rules = inline.pedantic; - } -} + /** + * Normal Block Grammar + */ -/** - * Expose Inline Rules - */ + block.normal = merge({}, block); -InlineLexer.rules = inline; + /** + * GFM Block Grammar + */ -/** - * Static Lexing/Compiling Method - */ + block.gfm = merge({}, block.normal, { + fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/, + paragraph: /^/, + heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/ + }); -InlineLexer.output = function(src, links, options) { - var inline = new InlineLexer(links, options); - return inline.output(src); -}; + block.gfm.paragraph = edit(block.paragraph) + .replace('(?!', '(?!' + + block.gfm.fences.source.replace('\\1', '\\2') + '|' + + block.list.source.replace('\\1', '\\3') + '|') + .getRegex(); -/** - * Lexing/Compiling - */ + /** + * GFM + Tables Block Grammar + */ -InlineLexer.prototype.output = function(src) { - var out = '', - link, - text, - href, - cap; + block.tables = merge({}, block.gfm, { + nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, + table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ + }); - while (src) { - // escape - if (cap = this.rules.escape.exec(src)) { - src = src.substring(cap[0].length); - out += cap[1]; - continue; - } + /** + * Block Lexer + */ - // autolink - if (cap = this.rules.autolink.exec(src)) { - src = src.substring(cap[0].length); - if (cap[2] === '@') { - text = escape(this.mangle(cap[1])); - href = 'mailto:' + text; - } else { - text = escape(cap[1]); - href = text; - } - out += this.renderer.link(href, null, text); - continue; - } + function Lexer(options) { + this.tokens = []; + this.tokens.links = {}; + this.options = options || marked.defaults; + this.rules = block.normal; - // url (gfm) - if (!this.inLink && (cap = this.rules.url.exec(src))) { - cap[0] = this.rules._backpedal.exec(cap[0])[0]; - src = src.substring(cap[0].length); - if (cap[2] === '@') { - text = escape(cap[0]); - href = 'mailto:' + text; + if (this.options.gfm) { + if (this.options.tables) { + this.rules = block.tables; } else { - text = escape(cap[0]); - if (cap[1] === 'www.') { - href = 'http://' + text; - } else { - href = text; - } - } - out += this.renderer.link(href, null, text); - continue; - } - - // tag - if (cap = this.rules.tag.exec(src)) { - if (!this.inLink && /^/i.test(cap[0])) { - this.inLink = false; - } - src = src.substring(cap[0].length); - out += this.options.sanitize - ? this.options.sanitizer - ? this.options.sanitizer(cap[0]) - : escape(cap[0]) - : cap[0]; - continue; - } - - // link - if (cap = this.rules.link.exec(src)) { - src = src.substring(cap[0].length); - this.inLink = true; - out += this.outputLink(cap, { - href: cap[2], - title: cap[3] - }); - this.inLink = false; - continue; - } - - // reflink, nolink - if ((cap = this.rules.reflink.exec(src)) - || (cap = this.rules.nolink.exec(src))) { - src = src.substring(cap[0].length); - link = (cap[2] || cap[1]).replace(/\s+/g, ' '); - link = this.links[link.toLowerCase()]; - if (!link || !link.href) { - out += cap[0].charAt(0); - src = cap[0].substring(1) + src; - continue; + this.rules = block.gfm; } - this.inLink = true; - out += this.outputLink(cap, link); - this.inLink = false; - continue; - } - - // strong - if (cap = this.rules.strong.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.strong(this.output(cap[2] || cap[1])); - continue; } + } - // em - if (cap = this.rules.em.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.em(this.output(cap[2] || cap[1])); - continue; - } + /** + * Expose Block Rules + */ - // code - if (cap = this.rules.code.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.codespan(escape(cap[2].trim(), true)); - continue; - } + Lexer.rules = block; - // br - if (cap = this.rules.br.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.br(); - continue; - } + /** + * Static Lex Method + */ - // del (gfm) - if (cap = this.rules.del.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.del(this.output(cap[1])); - continue; - } + Lexer.lex = function(src, options) { + var lexer = new Lexer(options); + return lexer.lex(src); + }; - // text - if (cap = this.rules.text.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.text(escape(this.smartypants(cap[0]))); - continue; - } + /** + * Preprocessing + */ - if (src) { - throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); - } - } + Lexer.prototype.lex = function(src) { + src = src + .replace(/\r\n|\r/g, '\n') + .replace(/\t/g, ' ') + .replace(/\u00a0/g, ' ') + .replace(/\u2424/g, '\n'); - return out; -}; + return this.token(src, true); + }; -/** - * Compile Link - */ + /** + * Lexing + */ -InlineLexer.prototype.outputLink = function(cap, link) { - var href = escape(link.href), - title = link.title ? escape(link.title) : null; + Lexer.prototype.token = function(src, top) { + src = src.replace(/^ +$/gm, ''); + var next, + loose, + cap, + bull, + b, + item, + space, + i, + tag, + l, + isordered; + + while (src) { + // newline + if (cap = this.rules.newline.exec(src)) { + src = src.substring(cap[0].length); + if (cap[0].length > 1) { + this.tokens.push({ + type: 'space' + }); + } + } - return cap[0].charAt(0) !== '!' - ? this.renderer.link(href, title, this.output(cap[1])) - : this.renderer.image(href, title, escape(cap[1])); -}; + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + cap = cap[0].replace(/^ {4}/gm, ''); + this.tokens.push({ + type: 'code', + text: !this.options.pedantic + ? cap.replace(/\n+$/, '') + : cap + }); + continue; + } -/** - * Smartypants Transformations - */ + // fences (gfm) + if (cap = this.rules.fences.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'code', + lang: cap[2], + text: cap[3] || '' + }); + continue; + } -InlineLexer.prototype.smartypants = function(text) { - if (!this.options.smartypants) return text; - return text - // em-dashes - .replace(/---/g, '\u2014') - // en-dashes - .replace(/--/g, '\u2013') - // opening singles - .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') - // closing singles & apostrophes - .replace(/'/g, '\u2019') - // opening doubles - .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') - // closing doubles - .replace(/"/g, '\u201d') - // ellipses - .replace(/\.{3}/g, '\u2026'); -}; + // heading + if (cap = this.rules.heading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[1].length, + text: cap[2] + }); + continue; + } -/** - * Mangle Links - */ + // table no leading pipe (gfm) + if (top && (cap = this.rules.nptable.exec(src))) { + src = src.substring(cap[0].length); -InlineLexer.prototype.mangle = function(text) { - if (!this.options.mangle) return text; - var out = '', - l = text.length, - i = 0, - ch; + item = { + type: 'table', + header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3].replace(/\n$/, '').split('\n') + }; - for (; i < l; i++) { - ch = text.charCodeAt(i); - if (Math.random() > 0.5) { - ch = 'x' + ch.toString(16); - } - out += '&#' + ch + ';'; - } + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } - return out; -}; + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = item.cells[i].split(/ *\| */); + } -/** - * Renderer - */ + this.tokens.push(item); -function Renderer(options) { - this.options = options || {}; -} + continue; + } -Renderer.prototype.code = function(code, lang, escaped) { - if (this.options.highlight) { - var out = this.options.highlight(code, lang); - if (out != null && out !== code) { - escaped = true; - code = out; - } - } + // hr + if (cap = this.rules.hr.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'hr' + }); + continue; + } - if (!lang) { - return '
        '
        -      + (escaped ? code : escape(code, true))
        -      + '\n
        '; - } - - return '
        '
        -    + (escaped ? code : escape(code, true))
        -    + '\n
        \n'; -}; - -Renderer.prototype.blockquote = function(quote) { - return '
        \n' + quote + '
        \n'; -}; - -Renderer.prototype.html = function(html) { - return html; -}; - -Renderer.prototype.heading = function(text, level, raw) { - return '' - + text - + '\n'; -}; - -Renderer.prototype.hr = function() { - return this.options.xhtml ? '
        \n' : '
        \n'; -}; - -Renderer.prototype.list = function(body, ordered) { - var type = ordered ? 'ol' : 'ul'; - return '<' + type + '>\n' + body + '\n'; -}; - -Renderer.prototype.listitem = function(text) { - return '
      • ' + text + '
      • \n'; -}; - -Renderer.prototype.paragraph = function(text) { - return '

        ' + text + '

        \n'; -}; - -Renderer.prototype.table = function(header, body) { - return '

      <%= t'user_block.partial.display_name' %><%= t '.display_name' %><%= t'user_block.partial.creator_name' %><%= t '.creator_name' %><%= t'user_block.partial.reason' %><%= t'user_block.partial.status' %><%= t'user_block.partial.revoker_name' %><%= t '.reason' %><%= t '.status' %><%= t '.revoker_name' %>
      \n' - + '\n' - + header - + '\n' - + '\n' - + body - + '\n' - + '
      \n'; -}; - -Renderer.prototype.tablerow = function(content) { - return '\n' + content + '\n'; -}; - -Renderer.prototype.tablecell = function(content, flags) { - var type = flags.header ? 'th' : 'td'; - var tag = flags.align - ? '<' + type + ' style="text-align:' + flags.align + '">' - : '<' + type + '>'; - return tag + content + '\n'; -}; - -// span level renderer -Renderer.prototype.strong = function(text) { - return '' + text + ''; -}; - -Renderer.prototype.em = function(text) { - return '' + text + ''; -}; - -Renderer.prototype.codespan = function(text) { - return '' + text + ''; -}; - -Renderer.prototype.br = function() { - return this.options.xhtml ? '
      ' : '
      '; -}; - -Renderer.prototype.del = function(text) { - return '' + text + ''; -}; - -Renderer.prototype.link = function(href, title, text) { - if (this.options.sanitize) { - try { - var prot = decodeURIComponent(unescape(href)) - .replace(/[^\w:]/g, '') - .toLowerCase(); - } catch (e) { - return text; - } - if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { - return text; - } - } - if (this.options.baseUrl && !originIndependentUrl.test(href)) { - href = resolveUrl(this.options.baseUrl, href); - } - var out = '
      '; - return out; -}; - -Renderer.prototype.image = function(href, title, text) { - if (this.options.baseUrl && !originIndependentUrl.test(href)) { - href = resolveUrl(this.options.baseUrl, href); - } - var out = '' + text + '' : '>'; - return out; -}; - -Renderer.prototype.text = function(text) { - return text; -}; - -/** - * TextRenderer - * returns only the textual part of the token - */ - -function TextRenderer() {} - -// no need for block level renderers - -TextRenderer.prototype.strong = -TextRenderer.prototype.em = -TextRenderer.prototype.codespan = -TextRenderer.prototype.del = -TextRenderer.prototype.text = function (text) { - return text; -}; - -TextRenderer.prototype.link = -TextRenderer.prototype.image = function(href, title, text) { - return '' + text; -}; - -TextRenderer.prototype.br = function() { - return ''; -}; - -/** - * Parsing & Compiling - */ - -function Parser(options) { - this.tokens = []; - this.token = null; - this.options = options || marked.defaults; - this.options.renderer = this.options.renderer || new Renderer(); - this.renderer = this.options.renderer; - this.renderer.options = this.options; -} - -/** - * Static Parse Method - */ - -Parser.parse = function(src, options) { - var parser = new Parser(options); - return parser.parse(src); -}; - -/** - * Parse Loop - */ - -Parser.prototype.parse = function(src) { - this.inline = new InlineLexer(src.links, this.options); - // use an InlineLexer with a TextRenderer to extract pure text - this.inlineText = new InlineLexer( - src.links, - merge({}, this.options, {renderer: new TextRenderer()}) - ); - this.tokens = src.reverse(); + // blockquote + if (cap = this.rules.blockquote.exec(src)) { + src = src.substring(cap[0].length); - var out = ''; - while (this.next()) { - out += this.tok(); - } + this.tokens.push({ + type: 'blockquote_start' + }); - return out; -}; + cap = cap[0].replace(/^ *> ?/gm, ''); -/** - * Next Token - */ + // Pass `top` to keep the current + // "toplevel" state. This is exactly + // how markdown.pl works. + this.token(cap, top); -Parser.prototype.next = function() { - return this.token = this.tokens.pop(); -}; + this.tokens.push({ + type: 'blockquote_end' + }); -/** - * Preview Next Token - */ + continue; + } -Parser.prototype.peek = function() { - return this.tokens[this.tokens.length - 1] || 0; -}; + // list + if (cap = this.rules.list.exec(src)) { + src = src.substring(cap[0].length); + bull = cap[2]; + isordered = bull.length > 1; -/** - * Parse Text Tokens - */ + this.tokens.push({ + type: 'list_start', + ordered: isordered, + start: isordered ? +bull : '' + }); -Parser.prototype.parseText = function() { - var body = this.token.text; + // Get each top-level item. + cap = cap[0].match(this.rules.item); - while (this.peek().type === 'text') { - body += '\n' + this.next().text; - } + next = false; + l = cap.length; + i = 0; - return this.inline.output(body); -}; + for (; i < l; i++) { + item = cap[i]; + + // Remove the list item's bullet + // so it is seen as the next token. + space = item.length; + item = item.replace(/^ *([*+-]|\d+\.) +/, ''); + + // Outdent whatever the + // list item contains. Hacky. + if (~item.indexOf('\n ')) { + space -= item.length; + item = !this.options.pedantic + ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') + : item.replace(/^ {1,4}/gm, ''); + } -/** - * Parse Current Token - */ + // Determine whether the next list item belongs here. + // Backpedal if it does not belong in this list. + if (this.options.smartLists && i !== l - 1) { + b = block.bullet.exec(cap[i + 1])[0]; + if (bull !== b && !(bull.length > 1 && b.length > 1)) { + src = cap.slice(i + 1).join('\n') + src; + i = l - 1; + } + } -Parser.prototype.tok = function() { - switch (this.token.type) { - case 'space': { - return ''; - } - case 'hr': { - return this.renderer.hr(); - } - case 'heading': { - return this.renderer.heading( - this.inline.output(this.token.text), - this.token.depth, - unescape(this.inlineText.output(this.token.text))); - } - case 'code': { - return this.renderer.code(this.token.text, - this.token.lang, - this.token.escaped); - } - case 'table': { - var header = '', - body = '', - i, - row, - cell, - j; + // Determine whether item is loose or not. + // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ + // for discount behavior. + loose = next || /\n\n(?!\s*$)/.test(item); + if (i !== l - 1) { + next = item.charAt(item.length - 1) === '\n'; + if (!loose) loose = next; + } - // header - cell = ''; - for (i = 0; i < this.token.header.length; i++) { - cell += this.renderer.tablecell( - this.inline.output(this.token.header[i]), - { header: true, align: this.token.align[i] } - ); - } - header += this.renderer.tablerow(cell); + this.tokens.push({ + type: loose + ? 'loose_item_start' + : 'list_item_start' + }); - for (i = 0; i < this.token.cells.length; i++) { - row = this.token.cells[i]; + // Recurse. + this.token(item, false); - cell = ''; - for (j = 0; j < row.length; j++) { - cell += this.renderer.tablecell( - this.inline.output(row[j]), - { header: false, align: this.token.align[j] } - ); + this.tokens.push({ + type: 'list_item_end' + }); } - body += this.renderer.tablerow(cell); - } - return this.renderer.table(header, body); - } - case 'blockquote_start': { - body = ''; + this.tokens.push({ + type: 'list_end' + }); - while (this.next().type !== 'blockquote_end') { - body += this.tok(); + continue; } - return this.renderer.blockquote(body); - } - case 'list_start': { - body = ''; - var ordered = this.token.ordered; - - while (this.next().type !== 'list_end') { - body += this.tok(); + // html + if (cap = this.rules.html.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: this.options.sanitize + ? 'paragraph' + : 'html', + pre: !this.options.sanitizer + && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), + text: cap[0] + }); + continue; } - return this.renderer.list(body, ordered); - } - case 'list_item_start': { - body = ''; - - while (this.next().type !== 'list_item_end') { - body += this.token.type === 'text' - ? this.parseText() - : this.tok(); + // def + if (top && (cap = this.rules.def.exec(src))) { + src = src.substring(cap[0].length); + if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1); + tag = cap[1].toLowerCase(); + if (!this.tokens.links[tag]) { + this.tokens.links[tag] = { + href: cap[2], + title: cap[3] + }; + } + continue; } - return this.renderer.listitem(body); - } - case 'loose_item_start': { - body = ''; + // table (gfm) + if (top && (cap = this.rules.table.exec(src))) { + src = src.substring(cap[0].length); - while (this.next().type !== 'list_item_end') { - body += this.tok(); - } + item = { + type: 'table', + header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') + }; - return this.renderer.listitem(body); - } - case 'html': { - var html = !this.token.pre && !this.options.pedantic - ? this.inline.output(this.token.text) - : this.token.text; - return this.renderer.html(html); - } - case 'paragraph': { - return this.renderer.paragraph(this.inline.output(this.token.text)); - } - case 'text': { - return this.renderer.paragraph(this.parseText()); - } - } -}; + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } -/** - * Helpers - */ + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = item.cells[i] + .replace(/^ *\| *| *\| *$/g, '') + .split(/ *\| */); + } -function escape(html, encode) { - return html - .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); -} + this.tokens.push(item); -function unescape(html) { - // explicitly match decimal, hex, and named HTML entities - return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) { - n = n.toLowerCase(); - if (n === 'colon') return ':'; - if (n.charAt(0) === '#') { - return n.charAt(1) === 'x' - ? String.fromCharCode(parseInt(n.substring(2), 16)) - : String.fromCharCode(+n.substring(1)); - } - return ''; - }); -} - -function edit(regex, opt) { - regex = regex.source; - opt = opt || ''; - return { - replace: function(name, val) { - val = val.source || val; - val = val.replace(/(^|[^\[])\^/g, '$1'); - regex = regex.replace(name, val); - return this; - }, - getRegex: function() { - return new RegExp(regex, opt); - } - }; -} - -function resolveUrl(base, href) { - if (!baseUrls[' ' + base]) { - // we can ignore everything in base after the last slash of its path component, - // but we might need to add _that_ - // https://tools.ietf.org/html/rfc3986#section-3 - if (/^[^:]+:\/*[^/]*$/.test(base)) { - baseUrls[' ' + base] = base + '/'; - } else { - baseUrls[' ' + base] = base.replace(/[^/]*$/, ''); - } - } - base = baseUrls[' ' + base]; + continue; + } - if (href.slice(0, 2) === '//') { - return base.replace(/:[\s\S]*/, ':') + href; - } else if (href.charAt(0) === '/') { - return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href; - } else { - return base + href; - } -} -var baseUrls = {}; -var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; + // lheading + if (cap = this.rules.lheading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[2] === '=' ? 1 : 2, + text: cap[1] + }); + continue; + } -function noop() {} -noop.exec = noop; + // top-level paragraph + if (top && (cap = this.rules.paragraph.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'paragraph', + text: cap[1].charAt(cap[1].length - 1) === '\n' + ? cap[1].slice(0, -1) + : cap[1] + }); + continue; + } -function merge(obj) { - var i = 1, - target, - key; + // text + if (cap = this.rules.text.exec(src)) { + // Top-level should never reach here. + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'text', + text: cap[0] + }); + continue; + } - for (; i < arguments.length; i++) { - target = arguments[i]; - for (key in target) { - if (Object.prototype.hasOwnProperty.call(target, key)) { - obj[key] = target[key]; + if (src) { + throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); } } - } - return obj; -} + return this.tokens; + }; -/** - * Marked - */ + /** + * Inline-Level Grammar + */ -function marked(src, opt, callback) { - // throw error in case of non string input - if (typeof src === 'undefined' || src === null) { - throw new Error('marked(): input parameter is undefined or null'); - } - if (typeof src !== 'string') { - throw new Error('marked(): input parameter is of type ' - + Object.prototype.toString.call(src) + ', string expected'); - } + var inline = { + escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, + autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, + url: noop, + tag: /^|^<\/?[a-zA-Z0-9\-]+(?:"[^"]*"|'[^']*'|\s[^<'">\/\s]*)*?\/?>/, + link: /^!?\[(inside)\]\(href\)/, + reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, + nolink: /^!?\[((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\]/, + strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, + em: /^_([^\s_](?:[^_]|__)+?[^\s_])_\b|^\*((?:\*\*|[^*])+?)\*(?!\*)/, + code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/, + br: /^ {2,}\n(?!\s*$)/, + del: noop, + text: /^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/; - try { - tokens = Lexer.lex(src, opt); - } catch (e) { - return callback(e); - } + inline.link = edit(inline.link) + .replace('inside', inline._inside) + .replace('href', inline._href) + .getRegex(); - pending = tokens.length; + inline.reflink = edit(inline.reflink) + .replace('inside', inline._inside) + .getRegex(); - var done = function(err) { - if (err) { - opt.highlight = highlight; - return callback(err); - } + /** + * Normal Inline Grammar + */ - var out; + inline.normal = merge({}, inline); - try { - out = Parser.parse(tokens, opt); - } catch (e) { - err = e; - } + /** + * Pedantic Inline Grammar + */ - opt.highlight = highlight; + inline.pedantic = merge({}, inline.normal, { + strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ + }); - return err - ? callback(err) - : callback(null, out); - }; + /** + * GFM Inline Grammar + */ - if (!highlight || highlight.length < 3) { - return done(); - } + inline.gfm = merge({}, inline.normal, { + escape: edit(inline.escape).replace('])', '~|])').getRegex(), + url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/) + .replace('email', inline._email) + .getRegex(), + _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/, + del: /^~~(?=\S)([\s\S]*?\S)~~/, + text: edit(inline.text) + .replace(']|', '~]|') + .replace('|', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|') + .getRegex() + }); - delete opt.highlight; + /** + * GFM + Line Breaks Inline Grammar + */ - if (!pending) return done(); + inline.breaks = merge({}, inline.gfm, { + br: edit(inline.br).replace('{2,}', '*').getRegex(), + text: edit(inline.gfm.text).replace('{2,}', '*').getRegex() + }); - for (; i < tokens.length; i++) { - (function(token) { - if (token.type !== 'code') { - return --pending || done(); - } - return highlight(token.text, token.lang, function(err, code) { - if (err) return done(err); - if (code == null || code === token.text) { - return --pending || done(); - } - token.text = code; - token.escaped = true; - --pending || done(); - }); - })(tokens[i]); - } - - return; - } - try { - if (opt) opt = merge({}, marked.defaults, opt); - return Parser.parse(Lexer.lex(src, opt), opt); - } catch (e) { - e.message += '\nPlease report this to https://github.com/chjj/marked.'; - if ((opt || marked.defaults).silent) { - return '

      An error occurred:

      '
      -        + escape(e.message + '', true)
      -        + '
      '; - } - throw e; - } -} - -/** - * Options - */ - -marked.options = -marked.setOptions = function(opt) { - merge(marked.defaults, opt); - return marked; -}; - -marked.defaults = { - gfm: true, - tables: true, - breaks: false, - pedantic: false, - sanitize: false, - sanitizer: null, - mangle: true, - smartLists: false, - silent: false, - highlight: null, - langPrefix: 'lang-', - smartypants: false, - headerPrefix: '', - renderer: new Renderer(), - xhtml: false, - baseUrl: null -}; - -/** - * Expose - */ - -marked.Parser = Parser; -marked.parser = Parser.parse; - -marked.Renderer = Renderer; -marked.TextRenderer = TextRenderer; - -marked.Lexer = Lexer; -marked.lexer = Lexer.lex; - -marked.InlineLexer = InlineLexer; -marked.inlineLexer = InlineLexer.output; - -marked.parse = marked; - -{ - module.exports = marked; -} -})(commonjsGlobal || (typeof window !== 'undefined' ? window : commonjsGlobal)); -}); - -function pointBox(loc, context) { - var rect = context.surfaceRect(); - var point$$1 = context.curtainProjection(loc); - return { - left: point$$1[0] + rect.left - 40, - top: point$$1[1] + rect.top - 60, - width: 80, - height: 90 - }; -} + /** + * Inline Lexer & Compiler + */ + function InlineLexer(links, options) { + this.options = options || marked.defaults; + this.links = links; + this.rules = inline.normal; + this.renderer = this.options.renderer || new Renderer(); + this.renderer.options = this.options; -function pad$1(locOrBox, padding, context) { - var box; - if (locOrBox instanceof Array) { - var rect = context.surfaceRect(); - var point$$1 = context.curtainProjection(locOrBox); - box = { - left: point$$1[0] + rect.left, - top: point$$1[1] + rect.top - }; - } else { - box = locOrBox; + if (!this.links) { + throw new Error('Tokens array requires a `links` property.'); } - return { - left: box.left - padding, - top: box.top - padding, - width: (box.width || 0) + 2 * padding, - height: (box.width || 0) + 2 * padding - }; -} - + if (this.options.gfm) { + if (this.options.breaks) { + this.rules = inline.breaks; + } else { + this.rules = inline.gfm; + } + } else if (this.options.pedantic) { + this.rules = inline.pedantic; + } + } -function icon(name, svgklass, useklass) { - return '' + - ''; -} + /** + * Expose Inline Rules + */ + InlineLexer.rules = inline; -function slugify(text) { - return text.toString().toLowerCase() - .replace(/\s+/g, '-') // Replace spaces with - - .replace(/[^\w\-]+/g, '') // Remove all non-word chars - .replace(/\-\-+/g, '-') // Replace multiple - with single - - .replace(/^-+/, '') // Trim - from start of text - .replace(/-+$/, ''); // Trim - from end of text -} + /** + * Static Lexing/Compiling Method + */ + InlineLexer.output = function(src, links, options) { + var inline = new InlineLexer(links, options); + return inline.output(src); + }; -// console warning for missing walkthrough names -var missingStrings = {}; -function checkKey(key, text) { - if (t(key, { default: undefined}) === undefined) { - if (missingStrings.hasOwnProperty(key)) return; // warn once - missingStrings[key] = text; - var missing = key + ': ' + text; - if (typeof console !== 'undefined') console.log(missing); // eslint-disable-line - } -} + /** + * Lexing/Compiling + */ + InlineLexer.prototype.output = function(src) { + var out = '', + link, + text, + href, + cap; + + while (src) { + // escape + if (cap = this.rules.escape.exec(src)) { + src = src.substring(cap[0].length); + out += cap[1]; + continue; + } -function localize(obj) { - var key; + // autolink + if (cap = this.rules.autolink.exec(src)) { + src = src.substring(cap[0].length); + if (cap[2] === '@') { + text = escape(this.mangle(cap[1])); + href = 'mailto:' + text; + } else { + text = escape(cap[1]); + href = text; + } + out += this.renderer.link(href, null, text); + continue; + } - // Assign name if entity has one.. - var name = obj.tags && obj.tags.name; - if (name) { - key = 'intro.graph.name.' + slugify(name); - obj.tags.name = t(key, { default: name }); - checkKey(key, name); - } + // url (gfm) + if (!this.inLink && (cap = this.rules.url.exec(src))) { + cap[0] = this.rules._backpedal.exec(cap[0])[0]; + src = src.substring(cap[0].length); + if (cap[2] === '@') { + text = escape(cap[0]); + href = 'mailto:' + text; + } else { + text = escape(cap[0]); + if (cap[1] === 'www.') { + href = 'http://' + text; + } else { + href = text; + } + } + out += this.renderer.link(href, null, text); + continue; + } - // Assign street name if entity has one.. - var street = obj.tags && obj.tags['addr:street']; - if (street) { - key = 'intro.graph.name.' + slugify(street); - obj.tags['addr:street'] = t(key, { default: street }); - checkKey(key, street); + // tag + if (cap = this.rules.tag.exec(src)) { + if (!this.inLink && /^
      /i.test(cap[0])) { + this.inLink = false; + } + src = src.substring(cap[0].length); + out += this.options.sanitize + ? this.options.sanitizer + ? this.options.sanitizer(cap[0]) + : escape(cap[0]) + : cap[0]; + continue; + } - // Add address details common across walkthrough.. - var addrTags = [ - 'block_number', 'city', 'county', 'district', 'hamlet', 'neighbourhood', - 'postcode', 'province', 'quarter', 'state', 'subdistrict', 'suburb' - ]; - addrTags.forEach(function(k) { - var key = 'intro.graph.' + k, - tag = 'addr:' + k, - val = obj.tags && obj.tags[tag], - str = t(key, { default: val }); - - if (str) { - if (str.match(/^<.*>$/) !== null) { - delete obj.tags[tag]; - } else { - obj.tags[tag] = str; - } - } + // link + if (cap = this.rules.link.exec(src)) { + src = src.substring(cap[0].length); + this.inLink = true; + out += this.outputLink(cap, { + href: cap[2], + title: cap[3] }); - } + this.inLink = false; + continue; + } - return obj; -} - - -// Used to detect squareness.. some duplicataion of code from actionOrthogonalize. -function isMostlySquare(points) { - // note: uses 15 here instead of the 12 from actionOrthogonalize because - // actionOrthogonalize can actually straighten some larger angles as it iterates - var threshold = 15, // degrees within right or straight - lowerBound = Math.cos((90 - threshold) * Math.PI / 180), // near right - upperBound = Math.cos(threshold * Math.PI / 180), // near straight - mag; - - for (var i = 0; i < points.length; i++) { - mag = Math.abs(normalizedDotProduct(i, points)); - if (mag > lowerBound && mag < upperBound) { - return false; + // reflink, nolink + if ((cap = this.rules.reflink.exec(src)) + || (cap = this.rules.nolink.exec(src))) { + src = src.substring(cap[0].length); + link = (cap[2] || cap[1]).replace(/\s+/g, ' '); + link = this.links[link.toLowerCase()]; + if (!link || !link.href) { + out += cap[0].charAt(0); + src = cap[0].substring(1) + src; + continue; } - } - - return true; + this.inLink = true; + out += this.outputLink(cap, link); + this.inLink = false; + continue; + } + // strong + if (cap = this.rules.strong.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.strong(this.output(cap[2] || cap[1])); + continue; + } - function normalizedDotProduct(i, points) { - var a = points[(i - 1 + points.length) % points.length], - b = points[i], - c = points[(i + 1) % points.length], - p = subtractPoints(a, b), - q = subtractPoints(c, b); + // em + if (cap = this.rules.em.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.em(this.output(cap[2] || cap[1])); + continue; + } - p = normalizePoint(p); - q = normalizePoint(q); + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.codespan(escape(cap[2].trim(), true)); + continue; + } - return p[0] * q[0] + p[1] * q[1]; + // br + if (cap = this.rules.br.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.br(); + continue; + } + // del (gfm) + if (cap = this.rules.del.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.del(this.output(cap[1])); + continue; + } - function subtractPoints(a, b) { - return [a[0] - b[0], a[1] - b[1]]; - } + // text + if (cap = this.rules.text.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.text(escape(this.smartypants(cap[0]))); + continue; + } - function normalizePoint(point$$1) { - var vector = [0, 0]; - var length = Math.sqrt(point$$1[0] * point$$1[0] + point$$1[1] * point$$1[1]); - if (length !== 0) { - vector[0] = point$$1[0] / length; - vector[1] = point$$1[1] / length; - } - return vector; - } + if (src) { + throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } } -} - -function selectMenuItem(operation) { - var selector$$1 = '.edit-menu .edit-menu-item-' + operation + - ', .radial-menu .radial-menu-item-' + operation; - return d3_select(selector$$1); -} - - -function transitionTime(point1, point2) { - var distance = geoSphericalDistance(point1, point2); - if (distance === 0) - return 0; - else if (distance < 80) - return 500; - else - return 1000; -} + return out; + }; -var dataIntroGraph = {"n1":{"id":"n1","loc":[-85.631039,41.948829]},"n10":{"id":"n10","loc":[-85.634733,41.941588]},"n100":{"id":"n100","loc":[-85.637395,41.942252]},"n1000":{"id":"n1000","loc":[-85.632699,41.944763]},"n1001":{"id":"n1001","loc":[-85.632685,41.944763]},"n1002":{"id":"n1002","loc":[-85.632673,41.944755]},"n1003":{"id":"n1003","loc":[-85.632595,41.944682]},"n1004":{"id":"n1004","loc":[-85.632576,41.944673]},"n1005":{"id":"n1005","loc":[-85.632551,41.944667]},"n1006":{"id":"n1006","loc":[-85.63253,41.944667]},"n1007":{"id":"n1007","loc":[-85.632502,41.944669]},"n1008":{"id":"n1008","loc":[-85.632483,41.944677]},"n1009":{"id":"n1009","loc":[-85.632383,41.944731]},"n101":{"id":"n101","loc":[-85.637357,41.942252]},"n1010":{"id":"n1010","loc":[-85.63349,41.944976],"tags":{"addr:city":"Three Rivers","addr:housenumber":"31","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Sherwin-Williams","shop":"paint"}},"n1011":{"id":"n1011","loc":[-85.633548,41.945034],"tags":{"addr:city":"Three Rivers","addr:housenumber":"33","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Unique Jewelry","shop":"jewelry"}},"n1012":{"id":"n1012","loc":[-85.633683,41.945129],"tags":{"addr:city":"Three Rivers","addr:housenumber":"37","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"World Fare","shop":"gift"}},"n1013":{"id":"n1013","loc":[-85.634563,41.945469],"tags":{"addr:city":"Three Rivers","addr:housenumber":"62","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Golden Finch Framing","shop":"frame"}},"n1014":{"id":"n1014","loc":[-85.634469,41.945379],"tags":{"addr:city":"Three Rivers","addr:housenumber":"58","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Dollar Tree","shop":"second_hand"}},"n1015":{"id":"n1015","loc":[-85.634227,41.945159],"tags":{"addr:city":"Three Rivers","addr:housenumber":"48","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","amenity":"theatre","name":"Riviera Theatre"}},"n1016":{"id":"n1016","loc":[-85.634057,41.945012],"tags":{"addr:city":"Three Rivers","addr:housenumber":"42","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"River City Appliance","shop":"appliance"}},"n1017":{"id":"n1017","loc":[-85.633879,41.945325],"tags":{"addr:city":"Three Rivers","addr:housenumber":"45","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Paparazzi Tattoo","shop":"tattoo"}},"n1018":{"id":"n1018","loc":[-85.634914,41.945839],"tags":{"addr:city":"Three Rivers","addr:housenumber":"88","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","amenity":"bank","name":"Southern Michigan Bank"}},"n1019":{"id":"n1019","loc":[-85.634514,41.946176]},"n102":{"id":"n102","loc":[-85.637357,41.942216]},"n1020":{"id":"n1020","loc":[-85.634087,41.946178]},"n1021":{"id":"n1021","loc":[-85.634357,41.945805]},"n1022":{"id":"n1022","loc":[-85.634389,41.945788]},"n1023":{"id":"n1023","loc":[-85.634491,41.94581]},"n1024":{"id":"n1024","loc":[-85.634513,41.945853]},"n1025":{"id":"n1025","loc":[-85.634506,41.94583]},"n1026":{"id":"n1026","loc":[-85.634762,41.946056],"tags":{"crossing":"zebra","highway":"crossing"}},"n1027":{"id":"n1027","loc":[-85.634767,41.946172]},"n1028":{"id":"n1028","loc":[-85.634622,41.946175],"tags":{"crossing":"zebra","highway":"crossing"}},"n1029":{"id":"n1029","loc":[-85.640655,41.942057]},"n103":{"id":"n103","loc":[-85.637386,41.942054]},"n1030":{"id":"n1030","loc":[-85.640947,41.942057]},"n1031":{"id":"n1031","loc":[-85.640957,41.942593]},"n1032":{"id":"n1032","loc":[-85.630953,41.960873]},"n1033":{"id":"n1033","loc":[-85.632174,41.960679]},"n1034":{"id":"n1034","loc":[-85.638785,41.943066]},"n1035":{"id":"n1035","loc":[-85.638853,41.943065]},"n1036":{"id":"n1036","loc":[-85.638855,41.943183]},"n1037":{"id":"n1037","loc":[-85.638552,41.943189]},"n1038":{"id":"n1038","loc":[-85.63855,41.943149]},"n1039":{"id":"n1039","loc":[-85.638638,41.943068]},"n104":{"id":"n104","loc":[-85.637387,41.942125]},"n1040":{"id":"n1040","loc":[-85.638638,41.943078]},"n1041":{"id":"n1041","loc":[-85.638813,41.943163]},"n1042":{"id":"n1042","loc":[-85.638684,41.943165]},"n1043":{"id":"n1043","loc":[-85.638682,41.943105]},"n1044":{"id":"n1044","loc":[-85.638706,41.943105]},"n1045":{"id":"n1045","loc":[-85.638707,41.943117]},"n1046":{"id":"n1046","loc":[-85.638812,41.943115]},"n1047":{"id":"n1047","loc":[-85.638769,41.943407]},"n1048":{"id":"n1048","loc":[-85.638549,41.943407]},"n1049":{"id":"n1049","loc":[-85.638567,41.943555]},"n105":{"id":"n105","loc":[-85.637319,41.942125]},"n1050":{"id":"n1050","loc":[-85.638426,41.943554]},"n1051":{"id":"n1051","loc":[-85.638427,41.94346]},"n1052":{"id":"n1052","loc":[-85.638568,41.943461]},"n1053":{"id":"n1053","loc":[-85.639264,41.943415]},"n1054":{"id":"n1054","loc":[-85.639082,41.943417]},"n1055":{"id":"n1055","loc":[-85.63908,41.943331]},"n1056":{"id":"n1056","loc":[-85.639136,41.94333]},"n1057":{"id":"n1057","loc":[-85.639158,41.943312]},"n1058":{"id":"n1058","loc":[-85.639188,41.943313]},"n1059":{"id":"n1059","loc":[-85.639211,41.943331]},"n106":{"id":"n106","loc":[-85.637319,41.942137]},"n1060":{"id":"n1060","loc":[-85.639262,41.943331]},"n1061":{"id":"n1061","loc":[-85.638986,41.943515]},"n1062":{"id":"n1062","loc":[-85.63888,41.943521]},"n1063":{"id":"n1063","loc":[-85.638871,41.943436]},"n1064":{"id":"n1064","loc":[-85.638958,41.943431]},"n1065":{"id":"n1065","loc":[-85.638979,41.943443]},"n1066":{"id":"n1066","loc":[-85.63926,41.943703]},"n1067":{"id":"n1067","loc":[-85.639152,41.943704]},"n1068":{"id":"n1068","loc":[-85.639152,41.943691]},"n1069":{"id":"n1069","loc":[-85.639063,41.943691]},"n107":{"id":"n107","loc":[-85.637259,41.942137]},"n1070":{"id":"n1070","loc":[-85.639062,41.943613]},"n1071":{"id":"n1071","loc":[-85.639259,41.943611]},"n1072":{"id":"n1072","loc":[-85.639117,41.943726]},"n1073":{"id":"n1073","loc":[-85.639118,41.943767]},"n1074":{"id":"n1074","loc":[-85.639051,41.943768]},"n1075":{"id":"n1075","loc":[-85.63905,41.943727]},"n1076":{"id":"n1076","loc":[-85.638627,41.943716]},"n1077":{"id":"n1077","loc":[-85.63863,41.943634]},"n1078":{"id":"n1078","loc":[-85.63844,41.943631]},"n1079":{"id":"n1079","loc":[-85.638437,41.943729]},"n108":{"id":"n108","loc":[-85.637259,41.942126]},"n1080":{"id":"n1080","loc":[-85.638533,41.94373]},"n1081":{"id":"n1081","loc":[-85.638534,41.943715]},"n1082":{"id":"n1082","loc":[-85.638678,41.943941]},"n1083":{"id":"n1083","loc":[-85.638522,41.943944]},"n1084":{"id":"n1084","loc":[-85.63852,41.943864]},"n1085":{"id":"n1085","loc":[-85.638676,41.943861]},"n1086":{"id":"n1086","loc":[-85.638663,41.944059]},"n1087":{"id":"n1087","loc":[-85.638513,41.944061]},"n1088":{"id":"n1088","loc":[-85.638511,41.943991]},"n1089":{"id":"n1089","loc":[-85.638661,41.943989]},"n109":{"id":"n109","loc":[-85.637193,41.942126]},"n1090":{"id":"n1090","loc":[-85.63865,41.944134]},"n1091":{"id":"n1091","loc":[-85.638429,41.944144]},"n1092":{"id":"n1092","loc":[-85.638426,41.944106]},"n1093":{"id":"n1093","loc":[-85.638476,41.944104]},"n1094":{"id":"n1094","loc":[-85.638475,41.94409]},"n1095":{"id":"n1095","loc":[-85.638594,41.944084]},"n1096":{"id":"n1096","loc":[-85.638595,41.944101]},"n1097":{"id":"n1097","loc":[-85.638647,41.944099]},"n1098":{"id":"n1098","loc":[-85.63829,41.944154]},"n1099":{"id":"n1099","loc":[-85.638558,41.944155]},"n11":{"id":"n11","loc":[-85.634602,41.941523]},"n110":{"id":"n110","loc":[-85.637192,41.942053]},"n1100":{"id":"n1100","loc":[-85.638558,41.944338]},"n1101":{"id":"n1101","loc":[-85.638851,41.944408]},"n1102":{"id":"n1102","loc":[-85.637771,41.943989]},"n1103":{"id":"n1103","loc":[-85.639345,41.943964]},"n1104":{"id":"n1104","loc":[-85.638515,41.94397]},"n1105":{"id":"n1105","loc":[-85.639256,41.943928]},"n1106":{"id":"n1106","loc":[-85.639157,41.943929]},"n1107":{"id":"n1107","loc":[-85.639156,41.9439]},"n1108":{"id":"n1108","loc":[-85.639118,41.9439]},"n1109":{"id":"n1109","loc":[-85.639116,41.94382]},"n111":{"id":"n111","loc":[-85.637248,41.942053]},"n1110":{"id":"n1110","loc":[-85.639202,41.943819]},"n1111":{"id":"n1111","loc":[-85.639202,41.943837]},"n1112":{"id":"n1112","loc":[-85.639293,41.943836]},"n1113":{"id":"n1113","loc":[-85.639295,41.943898]},"n1114":{"id":"n1114","loc":[-85.639255,41.943898]},"n1115":{"id":"n1115","loc":[-85.639296,41.944083]},"n1116":{"id":"n1116","loc":[-85.639144,41.944084]},"n1117":{"id":"n1117","loc":[-85.639143,41.944026]},"n1118":{"id":"n1118","loc":[-85.639162,41.944026]},"n1119":{"id":"n1119","loc":[-85.639162,41.944]},"n112":{"id":"n112","loc":[-85.637248,41.942042]},"n1120":{"id":"n1120","loc":[-85.639295,41.943999]},"n1121":{"id":"n1121","loc":[-85.639131,41.944139]},"n1122":{"id":"n1122","loc":[-85.63901,41.94414]},"n1123":{"id":"n1123","loc":[-85.63901,41.944076]},"n1124":{"id":"n1124","loc":[-85.63913,41.944075]},"n1125":{"id":"n1125","loc":[-85.639092,41.944155]},"n1126":{"id":"n1126","loc":[-85.639093,41.944308]},"n1127":{"id":"n1127","loc":[-85.639225,41.944308]},"n1128":{"id":"n1128","loc":[-85.639225,41.94429]},"n1129":{"id":"n1129","loc":[-85.639253,41.944289]},"n113":{"id":"n113","loc":[-85.637338,41.942041]},"n1130":{"id":"n1130","loc":[-85.639253,41.944269]},"n1131":{"id":"n1131","loc":[-85.639243,41.944269]},"n1132":{"id":"n1132","loc":[-85.639243,41.944229]},"n1133":{"id":"n1133","loc":[-85.639224,41.944229]},"n1134":{"id":"n1134","loc":[-85.639224,41.944196]},"n1135":{"id":"n1135","loc":[-85.639195,41.944196]},"n1136":{"id":"n1136","loc":[-85.639195,41.944155]},"n1137":{"id":"n1137","loc":[-85.639072,41.944154]},"n1138":{"id":"n1138","loc":[-85.638865,41.944154]},"n1139":{"id":"n1139","loc":[-85.638863,41.943967]},"n114":{"id":"n114","loc":[-85.637338,41.942055]},"n1140":{"id":"n1140","loc":[-85.6386,41.942698]},"n1141":{"id":"n1141","loc":[-85.639348,41.942698]},"n1142":{"id":"n1142","loc":[-85.639377,41.944984]},"n1143":{"id":"n1143","loc":[-85.63937,41.945013]},"n1144":{"id":"n1144","loc":[-85.639357,41.945033]},"n1145":{"id":"n1145","loc":[-85.639353,41.945053]},"n1146":{"id":"n1146","loc":[-85.639352,41.945084]},"n1147":{"id":"n1147","loc":[-85.638278,41.945516]},"n1148":{"id":"n1148","loc":[-85.637505,41.945801]},"n1149":{"id":"n1149","loc":[-85.637327,41.945857]},"n115":{"id":"n115","loc":[-85.637583,41.941943]},"n1150":{"id":"n1150","loc":[-85.637168,41.945899]},"n1151":{"id":"n1151","loc":[-85.637017,41.94593]},"n1152":{"id":"n1152","loc":[-85.637185,41.945938]},"n1153":{"id":"n1153","loc":[-85.63682,41.945963]},"n1154":{"id":"n1154","loc":[-85.636639,41.945984]},"n1155":{"id":"n1155","loc":[-85.636439,41.945999]},"n1156":{"id":"n1156","loc":[-85.635801,41.945999]},"n1157":{"id":"n1157","loc":[-85.635769,41.945908]},"n1158":{"id":"n1158","loc":[-85.635953,41.946154]},"n1159":{"id":"n1159","loc":[-85.635472,41.94598]},"n116":{"id":"n116","loc":[-85.637584,41.941983]},"n1160":{"id":"n1160","loc":[-85.635409,41.945981]},"n1161":{"id":"n1161","loc":[-85.635583,41.945987]},"n1162":{"id":"n1162","loc":[-85.636452,41.945805]},"n1163":{"id":"n1163","loc":[-85.636425,41.94582]},"n1164":{"id":"n1164","loc":[-85.636396,41.945817]},"n1165":{"id":"n1165","loc":[-85.636368,41.945797]},"n1166":{"id":"n1166","loc":[-85.636346,41.945767]},"n1167":{"id":"n1167","loc":[-85.636307,41.945745]},"n1168":{"id":"n1168","loc":[-85.636194,41.94565]},"n1169":{"id":"n1169","loc":[-85.636121,41.945579]},"n117":{"id":"n117","loc":[-85.63751,41.941983]},"n1170":{"id":"n1170","loc":[-85.635995,41.945432]},"n1171":{"id":"n1171","loc":[-85.637564,41.943538]},"n1172":{"id":"n1172","loc":[-85.63756,41.943505]},"n1173":{"id":"n1173","loc":[-85.637435,41.943489]},"n1174":{"id":"n1174","loc":[-85.637093,41.943556]},"n1175":{"id":"n1175","loc":[-85.634836,41.941574]},"n1176":{"id":"n1176","loc":[-85.634692,41.9415]},"n1177":{"id":"n1177","loc":[-85.634261,41.941337]},"n1178":{"id":"n1178","loc":[-85.634208,41.940962]},"n1179":{"id":"n1179","loc":[-85.635247,41.940968]},"n118":{"id":"n118","loc":[-85.637509,41.941944]},"n1180":{"id":"n1180","loc":[-85.63514,41.941205]},"n1181":{"id":"n1181","loc":[-85.634858,41.941511]},"n1182":{"id":"n1182","loc":[-85.630725,41.943465]},"n1183":{"id":"n1183","loc":[-85.632591,41.942826]},"n1184":{"id":"n1184","loc":[-85.634487,41.941928]},"n1185":{"id":"n1185","loc":[-85.634499,41.942056]},"n1186":{"id":"n1186","loc":[-85.63433,41.943102]},"n1187":{"id":"n1187","loc":[-85.634158,41.943151]},"n1188":{"id":"n1188","loc":[-85.634107,41.94305]},"n1189":{"id":"n1189","loc":[-85.634279,41.943002]},"n119":{"id":"n119","loc":[-85.637724,41.941973]},"n1190":{"id":"n1190","loc":[-85.634362,41.943762]},"n1191":{"id":"n1191","loc":[-85.634331,41.943731]},"n1192":{"id":"n1192","loc":[-85.634396,41.943695]},"n1193":{"id":"n1193","loc":[-85.634426,41.943726]},"n1194":{"id":"n1194","loc":[-85.621569,41.956021]},"n1195":{"id":"n1195","loc":[-85.621574,41.956164]},"n1196":{"id":"n1196","loc":[-85.621489,41.956165]},"n1197":{"id":"n1197","loc":[-85.621488,41.956136]},"n1198":{"id":"n1198","loc":[-85.621372,41.956139]},"n1199":{"id":"n1199","loc":[-85.621369,41.956049]},"n12":{"id":"n12","loc":[-85.63359,41.941093]},"n120":{"id":"n120","loc":[-85.637633,41.941973]},"n1200":{"id":"n1200","loc":[-85.621493,41.956047]},"n1201":{"id":"n1201","loc":[-85.621492,41.956022]},"n1202":{"id":"n1202","loc":[-85.619744,41.953192]},"n1203":{"id":"n1203","loc":[-85.619059,41.953902]},"n1204":{"id":"n1204","loc":[-85.623984,41.95469]},"n1205":{"id":"n1205","loc":[-85.630159,41.958208]},"n1206":{"id":"n1206","loc":[-85.63002,41.958208]},"n1207":{"id":"n1207","loc":[-85.630021,41.95814]},"n1208":{"id":"n1208","loc":[-85.63,41.95814]},"n1209":{"id":"n1209","loc":[-85.63,41.958043]},"n121":{"id":"n121","loc":[-85.637633,41.941853]},"n1210":{"id":"n1210","loc":[-85.630159,41.958043]},"n1211":{"id":"n1211","loc":[-85.630304,41.957566]},"n1212":{"id":"n1212","loc":[-85.630303,41.957684]},"n1213":{"id":"n1213","loc":[-85.630073,41.957683]},"n1214":{"id":"n1214","loc":[-85.630072,41.957721]},"n1215":{"id":"n1215","loc":[-85.629993,41.95772]},"n1216":{"id":"n1216","loc":[-85.629993,41.95768]},"n1217":{"id":"n1217","loc":[-85.629968,41.95768]},"n1218":{"id":"n1218","loc":[-85.629969,41.957588]},"n1219":{"id":"n1219","loc":[-85.630219,41.95759]},"n122":{"id":"n122","loc":[-85.637724,41.941853]},"n1220":{"id":"n1220","loc":[-85.630219,41.957566]},"n1221":{"id":"n1221","loc":[-85.630717,41.957744]},"n1222":{"id":"n1222","loc":[-85.630596,41.957745]},"n1223":{"id":"n1223","loc":[-85.630598,41.957553]},"n1224":{"id":"n1224","loc":[-85.630717,41.957555]},"n1225":{"id":"n1225","loc":[-85.630609,41.957745]},"n1226":{"id":"n1226","loc":[-85.63061,41.957789]},"n1227":{"id":"n1227","loc":[-85.630327,41.957791]},"n1228":{"id":"n1228","loc":[-85.630324,41.95752]},"n1229":{"id":"n1229","loc":[-85.630325,41.95756]},"n123":{"id":"n123","loc":[-85.637773,41.941988]},"n1230":{"id":"n1230","loc":[-85.63057,41.95756]},"n1231":{"id":"n1231","loc":[-85.63069,41.958016]},"n1232":{"id":"n1232","loc":[-85.630586,41.958017]},"n1233":{"id":"n1233","loc":[-85.630584,41.957956]},"n1234":{"id":"n1234","loc":[-85.630614,41.957956]},"n1235":{"id":"n1235","loc":[-85.630611,41.957835]},"n1236":{"id":"n1236","loc":[-85.630737,41.957833]},"n1237":{"id":"n1237","loc":[-85.630739,41.957921]},"n1238":{"id":"n1238","loc":[-85.630688,41.957922]},"n1239":{"id":"n1239","loc":[-85.630719,41.958291]},"n124":{"id":"n124","loc":[-85.637773,41.942046]},"n1240":{"id":"n1240","loc":[-85.630592,41.958291]},"n1241":{"id":"n1241","loc":[-85.630593,41.958108]},"n1242":{"id":"n1242","loc":[-85.630701,41.958109]},"n1243":{"id":"n1243","loc":[-85.6307,41.958173]},"n1244":{"id":"n1244","loc":[-85.630711,41.958173]},"n1245":{"id":"n1245","loc":[-85.630711,41.958233]},"n1246":{"id":"n1246","loc":[-85.630719,41.958233]},"n1247":{"id":"n1247","loc":[-85.630523,41.958329]},"n1248":{"id":"n1248","loc":[-85.630388,41.958329]},"n1249":{"id":"n1249","loc":[-85.630387,41.958262]},"n125":{"id":"n125","loc":[-85.637693,41.942047]},"n1250":{"id":"n1250","loc":[-85.630523,41.958261]},"n1251":{"id":"n1251","loc":[-85.63072,41.958636]},"n1252":{"id":"n1252","loc":[-85.630721,41.958709]},"n1253":{"id":"n1253","loc":[-85.630503,41.958712]},"n1254":{"id":"n1254","loc":[-85.630498,41.958511]},"n1255":{"id":"n1255","loc":[-85.630635,41.95851]},"n1256":{"id":"n1256","loc":[-85.630638,41.958636]},"n1257":{"id":"n1257","loc":[-85.630437,41.958822]},"n1258":{"id":"n1258","loc":[-85.630437,41.958849]},"n1259":{"id":"n1259","loc":[-85.630393,41.958849]},"n126":{"id":"n126","loc":[-85.637692,41.941988]},"n1260":{"id":"n1260","loc":[-85.630393,41.958822]},"n1261":{"id":"n1261","loc":[-85.630605,41.959102]},"n1262":{"id":"n1262","loc":[-85.63049,41.959104]},"n1263":{"id":"n1263","loc":[-85.630487,41.958996]},"n1264":{"id":"n1264","loc":[-85.630462,41.958996]},"n1265":{"id":"n1265","loc":[-85.63046,41.958922]},"n1266":{"id":"n1266","loc":[-85.630562,41.958921]},"n1267":{"id":"n1267","loc":[-85.630564,41.958992]},"n1268":{"id":"n1268","loc":[-85.630602,41.958992]},"n1269":{"id":"n1269","loc":[-85.630126,41.957096]},"n127":{"id":"n127","loc":[-85.637604,41.941994]},"n1270":{"id":"n1270","loc":[-85.630129,41.957283]},"n1271":{"id":"n1271","loc":[-85.629993,41.957284]},"n1272":{"id":"n1272","loc":[-85.629992,41.957216]},"n1273":{"id":"n1273","loc":[-85.630015,41.957215]},"n1274":{"id":"n1274","loc":[-85.630013,41.957097]},"n1275":{"id":"n1275","loc":[-85.630211,41.956592]},"n1276":{"id":"n1276","loc":[-85.630211,41.956676]},"n1277":{"id":"n1277","loc":[-85.630162,41.956676]},"n1278":{"id":"n1278","loc":[-85.630162,41.95676]},"n1279":{"id":"n1279","loc":[-85.630037,41.956761]},"n128":{"id":"n128","loc":[-85.637604,41.942057]},"n1280":{"id":"n1280","loc":[-85.630037,41.956592]},"n1281":{"id":"n1281","loc":[-85.630309,41.95653]},"n1282":{"id":"n1282","loc":[-85.630326,41.957065]},"n1283":{"id":"n1283","loc":[-85.630118,41.957065]},"n1284":{"id":"n1284","loc":[-85.630119,41.957096]},"n1285":{"id":"n1285","loc":[-85.63067,41.957307]},"n1286":{"id":"n1286","loc":[-85.630536,41.957308]},"n1287":{"id":"n1287","loc":[-85.630533,41.957111]},"n1288":{"id":"n1288","loc":[-85.630667,41.95711]},"n1289":{"id":"n1289","loc":[-85.630676,41.956808]},"n129":{"id":"n129","loc":[-85.63748,41.942057]},"n1290":{"id":"n1290","loc":[-85.630551,41.956808]},"n1291":{"id":"n1291","loc":[-85.630552,41.956982]},"n1292":{"id":"n1292","loc":[-85.63059,41.956982]},"n1293":{"id":"n1293","loc":[-85.63059,41.957001]},"n1294":{"id":"n1294","loc":[-85.630692,41.957001]},"n1295":{"id":"n1295","loc":[-85.630692,41.956936]},"n1296":{"id":"n1296","loc":[-85.630676,41.956936]},"n1297":{"id":"n1297","loc":[-85.630496,41.956889]},"n1298":{"id":"n1298","loc":[-85.630501,41.956947]},"n1299":{"id":"n1299","loc":[-85.630377,41.956953]},"n13":{"id":"n13","loc":[-85.633643,41.941143]},"n130":{"id":"n130","loc":[-85.63748,41.941994]},"n1300":{"id":"n1300","loc":[-85.630359,41.956938]},"n1301":{"id":"n1301","loc":[-85.630359,41.956912]},"n1302":{"id":"n1302","loc":[-85.63038,41.956894]},"n1303":{"id":"n1303","loc":[-85.630679,41.956747]},"n1304":{"id":"n1304","loc":[-85.630572,41.956748]},"n1305":{"id":"n1305","loc":[-85.63057,41.956668]},"n1306":{"id":"n1306","loc":[-85.630501,41.956669]},"n1307":{"id":"n1307","loc":[-85.630499,41.95659]},"n1308":{"id":"n1308","loc":[-85.630565,41.956589]},"n1309":{"id":"n1309","loc":[-85.630564,41.956541]},"n131":{"id":"n131","loc":[-85.637431,41.941832]},"n1310":{"id":"n1310","loc":[-85.630686,41.956539]},"n1311":{"id":"n1311","loc":[-85.630688,41.956631]},"n1312":{"id":"n1312","loc":[-85.630676,41.956631]},"n1313":{"id":"n1313","loc":[-85.630686,41.956487]},"n1314":{"id":"n1314","loc":[-85.63059,41.956487]},"n1315":{"id":"n1315","loc":[-85.63059,41.956396]},"n1316":{"id":"n1316","loc":[-85.630686,41.956396]},"n1317":{"id":"n1317","loc":[-85.630643,41.9563]},"n1318":{"id":"n1318","loc":[-85.630548,41.956301]},"n1319":{"id":"n1319","loc":[-85.630545,41.956217]},"n132":{"id":"n132","loc":[-85.637432,41.94189]},"n1320":{"id":"n1320","loc":[-85.630529,41.956214]},"n1321":{"id":"n1321","loc":[-85.630521,41.956202]},"n1322":{"id":"n1322","loc":[-85.63052,41.95618]},"n1323":{"id":"n1323","loc":[-85.630527,41.956169]},"n1324":{"id":"n1324","loc":[-85.630544,41.956163]},"n1325":{"id":"n1325","loc":[-85.630543,41.956094]},"n1326":{"id":"n1326","loc":[-85.630641,41.956093]},"n1327":{"id":"n1327","loc":[-85.630642,41.956134]},"n1328":{"id":"n1328","loc":[-85.630656,41.956134]},"n1329":{"id":"n1329","loc":[-85.630657,41.956252]},"n133":{"id":"n133","loc":[-85.637412,41.94189]},"n1330":{"id":"n1330","loc":[-85.630643,41.956252]},"n1331":{"id":"n1331","loc":[-85.630409,41.956044]},"n1332":{"id":"n1332","loc":[-85.630409,41.956075]},"n1333":{"id":"n1333","loc":[-85.630195,41.956078]},"n1334":{"id":"n1334","loc":[-85.630195,41.9561]},"n1335":{"id":"n1335","loc":[-85.630088,41.956101]},"n1336":{"id":"n1336","loc":[-85.630087,41.956048]},"n1337":{"id":"n1337","loc":[-85.630345,41.956114]},"n1338":{"id":"n1338","loc":[-85.630328,41.956113]},"n1339":{"id":"n1339","loc":[-85.63034,41.956189]},"n134":{"id":"n134","loc":[-85.637413,41.941938]},"n1340":{"id":"n1340","loc":[-85.630355,41.956185]},"n1341":{"id":"n1341","loc":[-85.630311,41.956117]},"n1342":{"id":"n1342","loc":[-85.630297,41.956125]},"n1343":{"id":"n1343","loc":[-85.630287,41.956136]},"n1344":{"id":"n1344","loc":[-85.630283,41.956149]},"n1345":{"id":"n1345","loc":[-85.630285,41.956162]},"n1346":{"id":"n1346","loc":[-85.630293,41.956174]},"n1347":{"id":"n1347","loc":[-85.630306,41.956183]},"n1348":{"id":"n1348","loc":[-85.630322,41.956188]},"n1349":{"id":"n1349","loc":[-85.630368,41.956179]},"n135":{"id":"n135","loc":[-85.637342,41.941939]},"n1350":{"id":"n1350","loc":[-85.630378,41.95617]},"n1351":{"id":"n1351","loc":[-85.630384,41.956159]},"n1352":{"id":"n1352","loc":[-85.630385,41.956147]},"n1353":{"id":"n1353","loc":[-85.630381,41.956136]},"n1354":{"id":"n1354","loc":[-85.630372,41.956126]},"n1355":{"id":"n1355","loc":[-85.63036,41.956118]},"n1356":{"id":"n1356","loc":[-85.630776,41.956041]},"n1357":{"id":"n1357","loc":[-85.630195,41.956036]},"n1358":{"id":"n1358","loc":[-85.630137,41.956037]},"n1359":{"id":"n1359","loc":[-85.630136,41.956006]},"n136":{"id":"n136","loc":[-85.637342,41.941914]},"n1360":{"id":"n1360","loc":[-85.630194,41.956005]},"n1361":{"id":"n1361","loc":[-85.629864,41.956039]},"n1362":{"id":"n1362","loc":[-85.629864,41.955862]},"n1363":{"id":"n1363","loc":[-85.629541,41.958291]},"n1364":{"id":"n1364","loc":[-85.629419,41.958292]},"n1365":{"id":"n1365","loc":[-85.629417,41.958168]},"n1366":{"id":"n1366","loc":[-85.629445,41.958168]},"n1367":{"id":"n1367","loc":[-85.629444,41.958109]},"n1368":{"id":"n1368","loc":[-85.629537,41.958108]},"n1369":{"id":"n1369","loc":[-85.629351,41.958136]},"n137":{"id":"n137","loc":[-85.637212,41.941916]},"n1370":{"id":"n1370","loc":[-85.629352,41.958202]},"n1371":{"id":"n1371","loc":[-85.629365,41.958202]},"n1372":{"id":"n1372","loc":[-85.629365,41.958223]},"n1373":{"id":"n1373","loc":[-85.629291,41.958224]},"n1374":{"id":"n1374","loc":[-85.62929,41.958137]},"n1375":{"id":"n1375","loc":[-85.629443,41.958073]},"n1376":{"id":"n1376","loc":[-85.629252,41.958075]},"n1377":{"id":"n1377","loc":[-85.629253,41.95827]},"n1378":{"id":"n1378","loc":[-85.629566,41.957585]},"n1379":{"id":"n1379","loc":[-85.629566,41.957692]},"n138":{"id":"n138","loc":[-85.637211,41.941835]},"n1380":{"id":"n1380","loc":[-85.629281,41.957693]},"n1381":{"id":"n1381","loc":[-85.62928,41.957585]},"n1382":{"id":"n1382","loc":[-85.629004,41.957599]},"n1383":{"id":"n1383","loc":[-85.629004,41.957682]},"n1384":{"id":"n1384","loc":[-85.628902,41.957682]},"n1385":{"id":"n1385","loc":[-85.628902,41.957723]},"n1386":{"id":"n1386","loc":[-85.628731,41.957724]},"n1387":{"id":"n1387","loc":[-85.628731,41.9576]},"n1388":{"id":"n1388","loc":[-85.62836,41.957679]},"n1389":{"id":"n1389","loc":[-85.628359,41.957759]},"n139":{"id":"n139","loc":[-85.637293,41.941834]},"n1390":{"id":"n1390","loc":[-85.628062,41.957757]},"n1391":{"id":"n1391","loc":[-85.628063,41.957657]},"n1392":{"id":"n1392","loc":[-85.628198,41.957657]},"n1393":{"id":"n1393","loc":[-85.628198,41.957678]},"n1394":{"id":"n1394","loc":[-85.627775,41.958095]},"n1395":{"id":"n1395","loc":[-85.627608,41.958095]},"n1396":{"id":"n1396","loc":[-85.627606,41.957829]},"n1397":{"id":"n1397","loc":[-85.627774,41.957829]},"n1398":{"id":"n1398","loc":[-85.626816,41.957636]},"n1399":{"id":"n1399","loc":[-85.626787,41.957681]},"n14":{"id":"n14","loc":[-85.633643,41.940122]},"n140":{"id":"n140","loc":[-85.637293,41.941823]},"n1400":{"id":"n1400","loc":[-85.626673,41.95764]},"n1401":{"id":"n1401","loc":[-85.626703,41.957594]},"n1402":{"id":"n1402","loc":[-85.62694,41.95752]},"n1403":{"id":"n1403","loc":[-85.62688,41.957611]},"n1404":{"id":"n1404","loc":[-85.626798,41.957582]},"n1405":{"id":"n1405","loc":[-85.626793,41.95759]},"n1406":{"id":"n1406","loc":[-85.626657,41.95754]},"n1407":{"id":"n1407","loc":[-85.626666,41.957526]},"n1408":{"id":"n1408","loc":[-85.626584,41.957497]},"n1409":{"id":"n1409","loc":[-85.626638,41.957415]},"n141":{"id":"n141","loc":[-85.637363,41.941822]},"n1410":{"id":"n1410","loc":[-85.626731,41.957449]},"n1411":{"id":"n1411","loc":[-85.626725,41.957457]},"n1412":{"id":"n1412","loc":[-85.626843,41.9575]},"n1413":{"id":"n1413","loc":[-85.626851,41.957487]},"n1414":{"id":"n1414","loc":[-85.626579,41.957521]},"n1415":{"id":"n1415","loc":[-85.626537,41.957587]},"n1416":{"id":"n1416","loc":[-85.626427,41.957551]},"n1417":{"id":"n1417","loc":[-85.626468,41.957483]},"n1418":{"id":"n1418","loc":[-85.626592,41.957639]},"n1419":{"id":"n1419","loc":[-85.626807,41.957713]},"n142":{"id":"n142","loc":[-85.637364,41.941833]},"n1420":{"id":"n1420","loc":[-85.627129,41.957401]},"n1421":{"id":"n1421","loc":[-85.627209,41.95742]},"n1422":{"id":"n1422","loc":[-85.627302,41.957435]},"n1423":{"id":"n1423","loc":[-85.629566,41.957048]},"n1424":{"id":"n1424","loc":[-85.629568,41.957215]},"n1425":{"id":"n1425","loc":[-85.629383,41.957216]},"n1426":{"id":"n1426","loc":[-85.629384,41.95727]},"n1427":{"id":"n1427","loc":[-85.629231,41.957271]},"n1428":{"id":"n1428","loc":[-85.62923,41.957198]},"n1429":{"id":"n1429","loc":[-85.629322,41.957198]},"n143":{"id":"n143","loc":[-85.637559,41.942448]},"n1430":{"id":"n1430","loc":[-85.629321,41.957108]},"n1431":{"id":"n1431","loc":[-85.629441,41.957108]},"n1432":{"id":"n1432","loc":[-85.62944,41.957049]},"n1433":{"id":"n1433","loc":[-85.629337,41.957018]},"n1434":{"id":"n1434","loc":[-85.629366,41.957028]},"n1435":{"id":"n1435","loc":[-85.629375,41.957044]},"n1436":{"id":"n1436","loc":[-85.629354,41.957071]},"n1437":{"id":"n1437","loc":[-85.629317,41.957071]},"n1438":{"id":"n1438","loc":[-85.62929,41.957074]},"n1439":{"id":"n1439","loc":[-85.62927,41.957084]},"n144":{"id":"n144","loc":[-85.637036,41.942454]},"n1440":{"id":"n1440","loc":[-85.629232,41.957081]},"n1441":{"id":"n1441","loc":[-85.629222,41.957057]},"n1442":{"id":"n1442","loc":[-85.629259,41.957025]},"n1443":{"id":"n1443","loc":[-85.629293,41.957017]},"n1444":{"id":"n1444","loc":[-85.629251,41.957085]},"n1445":{"id":"n1445","loc":[-85.629235,41.957041]},"n1446":{"id":"n1446","loc":[-85.62937,41.95706]},"n1447":{"id":"n1447","loc":[-85.629531,41.956909]},"n1448":{"id":"n1448","loc":[-85.629408,41.956909]},"n1449":{"id":"n1449","loc":[-85.629402,41.956681]},"n145":{"id":"n145","loc":[-85.636692,41.942828]},"n1450":{"id":"n1450","loc":[-85.62953,41.956681]},"n1451":{"id":"n1451","loc":[-85.629402,41.956728]},"n1452":{"id":"n1452","loc":[-85.629408,41.956845]},"n1453":{"id":"n1453","loc":[-85.629385,41.956845]},"n1454":{"id":"n1454","loc":[-85.629384,41.956728]},"n1455":{"id":"n1455","loc":[-85.629063,41.956973]},"n1456":{"id":"n1456","loc":[-85.629064,41.957009]},"n1457":{"id":"n1457","loc":[-85.62902,41.957009]},"n1458":{"id":"n1458","loc":[-85.629019,41.956973]},"n1459":{"id":"n1459","loc":[-85.629136,41.956633]},"n146":{"id":"n146","loc":[-85.635929,41.942826]},"n1460":{"id":"n1460","loc":[-85.629084,41.956632]},"n1461":{"id":"n1461","loc":[-85.629084,41.956605]},"n1462":{"id":"n1462","loc":[-85.629136,41.956605]},"n1463":{"id":"n1463","loc":[-85.629153,41.956657]},"n1464":{"id":"n1464","loc":[-85.627914,41.956661]},"n1465":{"id":"n1465","loc":[-85.630096,41.956101]},"n1466":{"id":"n1466","loc":[-85.630097,41.95612]},"n1467":{"id":"n1467","loc":[-85.630011,41.956121]},"n1468":{"id":"n1468","loc":[-85.630015,41.956374]},"n1469":{"id":"n1469","loc":[-85.629148,41.95626]},"n147":{"id":"n147","loc":[-85.636433,41.942828]},"n1470":{"id":"n1470","loc":[-85.629527,41.956591]},"n1471":{"id":"n1471","loc":[-85.629405,41.956591]},"n1472":{"id":"n1472","loc":[-85.629405,41.956459]},"n1473":{"id":"n1473","loc":[-85.629369,41.956459]},"n1474":{"id":"n1474","loc":[-85.629369,41.956424]},"n1475":{"id":"n1475","loc":[-85.629413,41.956424]},"n1476":{"id":"n1476","loc":[-85.629414,41.956326]},"n1477":{"id":"n1477","loc":[-85.629522,41.956326]},"n1478":{"id":"n1478","loc":[-85.629522,41.956487]},"n1479":{"id":"n1479","loc":[-85.629527,41.956487]},"n148":{"id":"n148","loc":[-85.636435,41.942864],"tags":{"entrance":"yes"}},"n1480":{"id":"n1480","loc":[-85.629414,41.95634]},"n1481":{"id":"n1481","loc":[-85.629149,41.956338]},"n1482":{"id":"n1482","loc":[-85.62931,41.956531]},"n1483":{"id":"n1483","loc":[-85.629291,41.95655]},"n1484":{"id":"n1484","loc":[-85.629255,41.95655]},"n1485":{"id":"n1485","loc":[-85.629236,41.956533]},"n1486":{"id":"n1486","loc":[-85.629237,41.956461]},"n1487":{"id":"n1487","loc":[-85.629257,41.956445]},"n1488":{"id":"n1488","loc":[-85.629257,41.956428]},"n1489":{"id":"n1489","loc":[-85.629287,41.956428]},"n149":{"id":"n149","loc":[-85.637235,41.942622]},"n1490":{"id":"n1490","loc":[-85.629287,41.956445]},"n1491":{"id":"n1491","loc":[-85.62931,41.95646]},"n1492":{"id":"n1492","loc":[-85.629049,41.956425]},"n1493":{"id":"n1493","loc":[-85.628907,41.956427]},"n1494":{"id":"n1494","loc":[-85.628907,41.956455]},"n1495":{"id":"n1495","loc":[-85.628841,41.956455]},"n1496":{"id":"n1496","loc":[-85.62884,41.956424]},"n1497":{"id":"n1497","loc":[-85.628764,41.956425]},"n1498":{"id":"n1498","loc":[-85.628762,41.956323]},"n1499":{"id":"n1499","loc":[-85.628808,41.956323]},"n15":{"id":"n15","loc":[-85.633477,41.940187]},"n150":{"id":"n150","loc":[-85.637247,41.943116]},"n1500":{"id":"n1500","loc":[-85.628808,41.956314]},"n1501":{"id":"n1501","loc":[-85.628911,41.956313]},"n1502":{"id":"n1502","loc":[-85.628911,41.956322]},"n1503":{"id":"n1503","loc":[-85.62896,41.956322]},"n1504":{"id":"n1504","loc":[-85.62896,41.956348]},"n1505":{"id":"n1505","loc":[-85.629047,41.956347]},"n1506":{"id":"n1506","loc":[-85.628893,41.957263]},"n1507":{"id":"n1507","loc":[-85.628788,41.957264]},"n1508":{"id":"n1508","loc":[-85.628786,41.95711]},"n1509":{"id":"n1509","loc":[-85.628894,41.957109]},"n151":{"id":"n151","loc":[-85.637564,41.943116]},"n1510":{"id":"n1510","loc":[-85.628893,41.957075]},"n1511":{"id":"n1511","loc":[-85.628965,41.957075]},"n1512":{"id":"n1512","loc":[-85.628965,41.957111]},"n1513":{"id":"n1513","loc":[-85.629035,41.95711]},"n1514":{"id":"n1514","loc":[-85.629036,41.957209]},"n1515":{"id":"n1515","loc":[-85.628893,41.95721]},"n1516":{"id":"n1516","loc":[-85.631348,41.95773]},"n1517":{"id":"n1517","loc":[-85.631101,41.957732]},"n1518":{"id":"n1518","loc":[-85.631099,41.957558]},"n1519":{"id":"n1519","loc":[-85.63123,41.957557]},"n152":{"id":"n152","loc":[-85.637552,41.942619]},"n1520":{"id":"n1520","loc":[-85.631231,41.957618]},"n1521":{"id":"n1521","loc":[-85.63129,41.957618]},"n1522":{"id":"n1522","loc":[-85.63129,41.957651]},"n1523":{"id":"n1523","loc":[-85.631346,41.957651]},"n1524":{"id":"n1524","loc":[-85.631366,41.95802]},"n1525":{"id":"n1525","loc":[-85.631141,41.958021]},"n1526":{"id":"n1526","loc":[-85.63114,41.957943]},"n1527":{"id":"n1527","loc":[-85.631167,41.957943]},"n1528":{"id":"n1528","loc":[-85.631166,41.957808]},"n1529":{"id":"n1529","loc":[-85.631301,41.957807]},"n153":{"id":"n153","loc":[-85.63763,41.942528]},"n1530":{"id":"n1530","loc":[-85.631302,41.95789]},"n1531":{"id":"n1531","loc":[-85.631364,41.95789]},"n1532":{"id":"n1532","loc":[-85.631539,41.957754]},"n1533":{"id":"n1533","loc":[-85.631069,41.957756]},"n1534":{"id":"n1534","loc":[-85.631536,41.957518]},"n1535":{"id":"n1535","loc":[-85.631543,41.957995]},"n1536":{"id":"n1536","loc":[-85.631531,41.957748]},"n1537":{"id":"n1537","loc":[-85.631485,41.957748]},"n1538":{"id":"n1538","loc":[-85.631484,41.957698]},"n1539":{"id":"n1539","loc":[-85.631531,41.957698]},"n154":{"id":"n154","loc":[-85.637151,41.94253]},"n1540":{"id":"n1540","loc":[-85.631586,41.957742]},"n1541":{"id":"n1541","loc":[-85.63155,41.957742]},"n1542":{"id":"n1542","loc":[-85.631551,41.957702]},"n1543":{"id":"n1543","loc":[-85.631587,41.957702]},"n1544":{"id":"n1544","loc":[-85.631534,41.95807]},"n1545":{"id":"n1545","loc":[-85.631534,41.958097]},"n1546":{"id":"n1546","loc":[-85.631491,41.958097]},"n1547":{"id":"n1547","loc":[-85.631491,41.95807]},"n1548":{"id":"n1548","loc":[-85.631304,41.958861]},"n1549":{"id":"n1549","loc":[-85.631186,41.958862]},"n155":{"id":"n155","loc":[-85.63715,41.942424]},"n1550":{"id":"n1550","loc":[-85.631182,41.958653]},"n1551":{"id":"n1551","loc":[-85.6313,41.958651]},"n1552":{"id":"n1552","loc":[-85.631293,41.95854]},"n1553":{"id":"n1553","loc":[-85.631176,41.958539]},"n1554":{"id":"n1554","loc":[-85.631176,41.958377]},"n1555":{"id":"n1555","loc":[-85.631297,41.958377]},"n1556":{"id":"n1556","loc":[-85.631297,41.958422]},"n1557":{"id":"n1557","loc":[-85.631333,41.958422]},"n1558":{"id":"n1558","loc":[-85.631333,41.958479]},"n1559":{"id":"n1559","loc":[-85.631293,41.958479]},"n156":{"id":"n156","loc":[-85.637629,41.942422]},"n1560":{"id":"n1560","loc":[-85.631951,41.958908]},"n1561":{"id":"n1561","loc":[-85.631838,41.958909]},"n1562":{"id":"n1562","loc":[-85.631837,41.958847]},"n1563":{"id":"n1563","loc":[-85.631859,41.958847]},"n1564":{"id":"n1564","loc":[-85.631858,41.958746]},"n1565":{"id":"n1565","loc":[-85.631961,41.958745]},"n1566":{"id":"n1566","loc":[-85.631962,41.958812]},"n1567":{"id":"n1567","loc":[-85.631949,41.958813]},"n1568":{"id":"n1568","loc":[-85.631579,41.958913]},"n1569":{"id":"n1569","loc":[-85.631567,41.95864]},"n157":{"id":"n157","loc":[-85.638232,41.942477]},"n1570":{"id":"n1570","loc":[-85.631942,41.958639]},"n1571":{"id":"n1571","loc":[-85.631543,41.958594]},"n1572":{"id":"n1572","loc":[-85.631543,41.958065]},"n1573":{"id":"n1573","loc":[-85.631888,41.958546]},"n1574":{"id":"n1574","loc":[-85.631804,41.958546]},"n1575":{"id":"n1575","loc":[-85.631803,41.95841]},"n1576":{"id":"n1576","loc":[-85.631886,41.958409]},"n1577":{"id":"n1577","loc":[-85.631897,41.958125]},"n1578":{"id":"n1578","loc":[-85.631755,41.958126]},"n1579":{"id":"n1579","loc":[-85.631756,41.958174]},"n158":{"id":"n158","loc":[-85.637775,41.942483]},"n1580":{"id":"n1580","loc":[-85.63178,41.958174]},"n1581":{"id":"n1581","loc":[-85.631782,41.958272]},"n1582":{"id":"n1582","loc":[-85.631922,41.958271]},"n1583":{"id":"n1583","loc":[-85.631922,41.958244]},"n1584":{"id":"n1584","loc":[-85.631883,41.958245]},"n1585":{"id":"n1585","loc":[-85.631882,41.958175]},"n1586":{"id":"n1586","loc":[-85.631898,41.958175]},"n1587":{"id":"n1587","loc":[-85.631924,41.958032]},"n1588":{"id":"n1588","loc":[-85.631762,41.958032]},"n1589":{"id":"n1589","loc":[-85.63176,41.957827]},"n159":{"id":"n159","loc":[-85.638107,41.942512]},"n1590":{"id":"n1590","loc":[-85.631888,41.957826]},"n1591":{"id":"n1591","loc":[-85.631888,41.957892]},"n1592":{"id":"n1592","loc":[-85.631871,41.957892]},"n1593":{"id":"n1593","loc":[-85.631872,41.957949]},"n1594":{"id":"n1594","loc":[-85.631923,41.957949]},"n1595":{"id":"n1595","loc":[-85.631695,41.95795]},"n1596":{"id":"n1596","loc":[-85.631666,41.957975]},"n1597":{"id":"n1597","loc":[-85.63163,41.957975]},"n1598":{"id":"n1598","loc":[-85.6316,41.957951]},"n1599":{"id":"n1599","loc":[-85.6316,41.95785]},"n16":{"id":"n16","loc":[-85.63341,41.94032]},"n160":{"id":"n160","loc":[-85.637763,41.942514]},"n1600":{"id":"n1600","loc":[-85.63166,41.95785]},"n1601":{"id":"n1601","loc":[-85.631696,41.957873]},"n1602":{"id":"n1602","loc":[-85.631924,41.957762]},"n1603":{"id":"n1603","loc":[-85.631762,41.957762]},"n1604":{"id":"n1604","loc":[-85.631762,41.957708]},"n1605":{"id":"n1605","loc":[-85.631785,41.957708]},"n1606":{"id":"n1606","loc":[-85.631785,41.957606]},"n1607":{"id":"n1607","loc":[-85.631734,41.957606]},"n1608":{"id":"n1608","loc":[-85.631734,41.957538]},"n1609":{"id":"n1609","loc":[-85.631821,41.957538]},"n161":{"id":"n161","loc":[-85.637763,41.942445]},"n1610":{"id":"n1610","loc":[-85.631935,41.957545]},"n1611":{"id":"n1611","loc":[-85.631821,41.957544]},"n1612":{"id":"n1612","loc":[-85.631935,41.957645]},"n1613":{"id":"n1613","loc":[-85.631924,41.957645]},"n1614":{"id":"n1614","loc":[-85.627135,41.953828]},"n1615":{"id":"n1615","loc":[-85.633517,41.941353],"tags":{"man_made":"lighthouse"}},"n1616":{"id":"n1616","loc":[-85.633659,41.942041],"tags":{"amenity":"bbq"}},"n1617":{"id":"n1617","loc":[-85.63662,41.942911],"tags":{"amenity":"toilets"}},"n1618":{"id":"n1618","loc":[-85.637487,41.943876],"tags":{"amenity":"toilets"}},"n1619":{"id":"n1619","loc":[-85.634938,41.941917],"tags":{"amenity":"toilets"}},"n162":{"id":"n162","loc":[-85.638107,41.942443]},"n1620":{"id":"n1620","loc":[-85.632427,41.941678],"tags":{"amenity":"bbq"}},"n1621":{"id":"n1621","loc":[-85.638033,41.944568],"tags":{"amenity":"bbq"}},"n1622":{"id":"n1622","loc":[-85.638052,41.944522],"tags":{"amenity":"bbq"}},"n1623":{"id":"n1623","loc":[-85.635001,41.941965]},"n1624":{"id":"n1624","loc":[-85.634635,41.941884]},"n1625":{"id":"n1625","loc":[-85.634667,41.941894]},"n1626":{"id":"n1626","loc":[-85.634791,41.942011]},"n1627":{"id":"n1627","loc":[-85.634749,41.941938]},"n1628":{"id":"n1628","loc":[-85.627295,41.953946],"tags":{"barrier":"gate"}},"n1629":{"id":"n1629","loc":[-85.629076,41.954689]},"n163":{"id":"n163","loc":[-85.638813,41.942475]},"n1630":{"id":"n1630","loc":[-85.640667,41.942595]},"n1631":{"id":"n1631","loc":[-85.639455,41.94261]},"n1632":{"id":"n1632","loc":[-85.643407,41.942336]},"n1633":{"id":"n1633","loc":[-85.641845,41.941316]},"n1634":{"id":"n1634","loc":[-85.643322,41.942224]},"n1635":{"id":"n1635","loc":[-85.643301,41.942124]},"n1636":{"id":"n1636","loc":[-85.640639,41.941326]},"n1637":{"id":"n1637","loc":[-85.640614,41.940058]},"n1638":{"id":"n1638","loc":[-85.639428,41.941335]},"n1639":{"id":"n1639","loc":[-85.643078,41.941293]},"n164":{"id":"n164","loc":[-85.63883,41.942422]},"n1640":{"id":"n1640","loc":[-85.64371,41.942302]},"n1641":{"id":"n1641","loc":[-85.643056,41.94001]},"n1642":{"id":"n1642","loc":[-85.643097,41.942575],"tags":{"highway":"traffic_signals","traffic_signals":"signal","traffic_signals:direction":"both"}},"n1643":{"id":"n1643","loc":[-85.641855,41.942586]},"n1644":{"id":"n1644","loc":[-85.643549,41.942209]},"n1645":{"id":"n1645","loc":[-85.639359,41.94007]},"n1646":{"id":"n1646","loc":[-85.642797,41.940522]},"n1647":{"id":"n1647","loc":[-85.642589,41.940523]},"n1648":{"id":"n1648","loc":[-85.642587,41.940287]},"n1649":{"id":"n1649","loc":[-85.642797,41.940286]},"n165":{"id":"n165","loc":[-85.63883,41.942508]},"n1650":{"id":"n1650","loc":[-85.642571,41.940523]},"n1651":{"id":"n1651","loc":[-85.642568,41.940286]},"n1652":{"id":"n1652","loc":[-85.642316,41.940289]},"n1653":{"id":"n1653","loc":[-85.642321,41.940436]},"n1654":{"id":"n1654","loc":[-85.642292,41.940458]},"n1655":{"id":"n1655","loc":[-85.642287,41.940483]},"n1656":{"id":"n1656","loc":[-85.642323,41.940509]},"n1657":{"id":"n1657","loc":[-85.642385,41.940511]},"n1658":{"id":"n1658","loc":[-85.642408,41.940526]},"n1659":{"id":"n1659","loc":[-85.641962,41.94109]},"n166":{"id":"n166","loc":[-85.638364,41.942508]},"n1660":{"id":"n1660","loc":[-85.642753,41.941084]},"n1661":{"id":"n1661","loc":[-85.642752,41.941004]},"n1662":{"id":"n1662","loc":[-85.642806,41.941003]},"n1663":{"id":"n1663","loc":[-85.642803,41.940731]},"n1664":{"id":"n1664","loc":[-85.642741,41.940732]},"n1665":{"id":"n1665","loc":[-85.64274,41.940645]},"n1666":{"id":"n1666","loc":[-85.641957,41.940651]},"n1667":{"id":"n1667","loc":[-85.642937,41.941241]},"n1668":{"id":"n1668","loc":[-85.641776,41.941253]},"n1669":{"id":"n1669","loc":[-85.641766,41.940598]},"n167":{"id":"n167","loc":[-85.638836,41.942167]},"n1670":{"id":"n1670","loc":[-85.64198,41.940598]},"n1671":{"id":"n1671","loc":[-85.641961,41.940137]},"n1672":{"id":"n1672","loc":[-85.642934,41.94012]},"n1673":{"id":"n1673","loc":[-85.643074,41.941173]},"n1674":{"id":"n1674","loc":[-85.642841,41.940997]},"n1675":{"id":"n1675","loc":[-85.642839,41.940721]},"n1676":{"id":"n1676","loc":[-85.643065,41.940552]},"n1677":{"id":"n1677","loc":[-85.642732,41.94124]},"n1678":{"id":"n1678","loc":[-85.641815,41.941246]},"n1679":{"id":"n1679","loc":[-85.641813,41.941132]},"n168":{"id":"n168","loc":[-85.638836,41.94229]},"n1680":{"id":"n1680","loc":[-85.641839,41.941111]},"n1681":{"id":"n1681","loc":[-85.641884,41.941098]},"n1682":{"id":"n1682","loc":[-85.642732,41.941092]},"n1683":{"id":"n1683","loc":[-85.642776,41.941302]},"n1684":{"id":"n1684","loc":[-85.632788,41.946236]},"n1685":{"id":"n1685","loc":[-85.622342,41.953127]},"n1686":{"id":"n1686","loc":[-85.641848,41.941167]},"n1687":{"id":"n1687","loc":[-85.643753,41.941503]},"n1688":{"id":"n1688","loc":[-85.643762,41.942119]},"n1689":{"id":"n1689","loc":[-85.64238,41.942262]},"n169":{"id":"n169","loc":[-85.638594,41.94229]},"n1690":{"id":"n1690","loc":[-85.642374,41.941944]},"n1691":{"id":"n1691","loc":[-85.642518,41.941943]},"n1692":{"id":"n1692","loc":[-85.642519,41.94198]},"n1693":{"id":"n1693","loc":[-85.642831,41.941977]},"n1694":{"id":"n1694","loc":[-85.642837,41.942312]},"n1695":{"id":"n1695","loc":[-85.642495,41.942315]},"n1696":{"id":"n1696","loc":[-85.642494,41.942261]},"n1697":{"id":"n1697","loc":[-85.641087,41.942433]},"n1698":{"id":"n1698","loc":[-85.641081,41.942006]},"n1699":{"id":"n1699","loc":[-85.641244,41.942005]},"n17":{"id":"n17","loc":[-85.633478,41.94081]},"n170":{"id":"n170","loc":[-85.638594,41.942422]},"n1700":{"id":"n1700","loc":[-85.64125,41.942431]},"n1701":{"id":"n1701","loc":[-85.641331,41.942968]},"n1702":{"id":"n1702","loc":[-85.641328,41.942713]},"n1703":{"id":"n1703","loc":[-85.641521,41.942712]},"n1704":{"id":"n1704","loc":[-85.641523,41.942924]},"n1705":{"id":"n1705","loc":[-85.641504,41.942924]},"n1706":{"id":"n1706","loc":[-85.641505,41.942967]},"n1707":{"id":"n1707","loc":[-85.638612,41.942408]},"n1708":{"id":"n1708","loc":[-85.638612,41.942327]},"n1709":{"id":"n1709","loc":[-85.638775,41.942327]},"n171":{"id":"n171","loc":[-85.638364,41.942356]},"n1710":{"id":"n1710","loc":[-85.638775,41.942299]},"n1711":{"id":"n1711","loc":[-85.638835,41.942298]},"n1712":{"id":"n1712","loc":[-85.638835,41.942407]},"n1713":{"id":"n1713","loc":[-85.639116,41.942444]},"n1714":{"id":"n1714","loc":[-85.639114,41.942362]},"n1715":{"id":"n1715","loc":[-85.639294,41.94236]},"n1716":{"id":"n1716","loc":[-85.639296,41.942442]},"n1717":{"id":"n1717","loc":[-85.639808,41.942385]},"n1718":{"id":"n1718","loc":[-85.639805,41.942285]},"n1719":{"id":"n1719","loc":[-85.639988,41.942283]},"n172":{"id":"n172","loc":[-85.638364,41.942167]},"n1720":{"id":"n1720","loc":[-85.63999,41.942383]},"n1721":{"id":"n1721","loc":[-85.639633,41.943023]},"n1722":{"id":"n1722","loc":[-85.639867,41.943019]},"n1723":{"id":"n1723","loc":[-85.639866,41.942964]},"n1724":{"id":"n1724","loc":[-85.639888,41.942963]},"n1725":{"id":"n1725","loc":[-85.639883,41.942779]},"n1726":{"id":"n1726","loc":[-85.639851,41.94278]},"n1727":{"id":"n1727","loc":[-85.63985,41.94274]},"n1728":{"id":"n1728","loc":[-85.639789,41.942741]},"n1729":{"id":"n1729","loc":[-85.639789,41.942753]},"n173":{"id":"n173","loc":[-85.639038,41.942463]},"n1730":{"id":"n1730","loc":[-85.639698,41.942754]},"n1731":{"id":"n1731","loc":[-85.639699,41.942788]},"n1732":{"id":"n1732","loc":[-85.639675,41.942789]},"n1733":{"id":"n1733","loc":[-85.639676,41.94283]},"n1734":{"id":"n1734","loc":[-85.639701,41.942829]},"n1735":{"id":"n1735","loc":[-85.639702,41.942869]},"n1736":{"id":"n1736","loc":[-85.639629,41.94287]},"n1737":{"id":"n1737","loc":[-85.643568,41.942946]},"n1738":{"id":"n1738","loc":[-85.643568,41.942777]},"n1739":{"id":"n1739","loc":[-85.643401,41.942777]},"n174":{"id":"n174","loc":[-85.638897,41.942464]},"n1740":{"id":"n1740","loc":[-85.643401,41.942863]},"n1741":{"id":"n1741","loc":[-85.643448,41.942863]},"n1742":{"id":"n1742","loc":[-85.643448,41.942946]},"n1743":{"id":"n1743","loc":[-85.642836,41.942981]},"n1744":{"id":"n1744","loc":[-85.642917,41.942979]},"n1745":{"id":"n1745","loc":[-85.642914,41.942904]},"n1746":{"id":"n1746","loc":[-85.642938,41.942903]},"n1747":{"id":"n1747","loc":[-85.642935,41.942813]},"n1748":{"id":"n1748","loc":[-85.642775,41.942816]},"n1749":{"id":"n1749","loc":[-85.642778,41.942906]},"n175":{"id":"n175","loc":[-85.638897,41.942423]},"n1750":{"id":"n1750","loc":[-85.642833,41.942905]},"n1751":{"id":"n1751","loc":[-85.642302,41.942886]},"n1752":{"id":"n1752","loc":[-85.642299,41.942721]},"n1753":{"id":"n1753","loc":[-85.642422,41.94272]},"n1754":{"id":"n1754","loc":[-85.642425,41.942868]},"n1755":{"id":"n1755","loc":[-85.642385,41.942869]},"n1756":{"id":"n1756","loc":[-85.642385,41.942885]},"n1757":{"id":"n1757","loc":[-85.641533,41.942939]},"n1758":{"id":"n1758","loc":[-85.64161,41.942877]},"n1759":{"id":"n1759","loc":[-85.641676,41.942922]},"n176":{"id":"n176","loc":[-85.638853,41.942423]},"n1760":{"id":"n1760","loc":[-85.6416,41.942985]},"n1761":{"id":"n1761","loc":[-85.64206,41.942802]},"n1762":{"id":"n1762","loc":[-85.642059,41.942741]},"n1763":{"id":"n1763","loc":[-85.642196,41.942741]},"n1764":{"id":"n1764","loc":[-85.642196,41.942818]},"n1765":{"id":"n1765","loc":[-85.642128,41.942819]},"n1766":{"id":"n1766","loc":[-85.642128,41.942801]},"n1767":{"id":"n1767","loc":[-85.640943,41.942934]},"n1768":{"id":"n1768","loc":[-85.641035,41.942933]},"n1769":{"id":"n1769","loc":[-85.641032,41.942797]},"n177":{"id":"n177","loc":[-85.638852,41.94237]},"n1770":{"id":"n1770","loc":[-85.640997,41.942798]},"n1771":{"id":"n1771","loc":[-85.640996,41.942764]},"n1772":{"id":"n1772","loc":[-85.640861,41.942766]},"n1773":{"id":"n1773","loc":[-85.640862,41.942848]},"n1774":{"id":"n1774","loc":[-85.640941,41.942847]},"n1775":{"id":"n1775","loc":[-85.643766,41.942226]},"n1776":{"id":"n1776","loc":[-85.643768,41.942407]},"n1777":{"id":"n1777","loc":[-85.643218,41.94177]},"n1778":{"id":"n1778","loc":[-85.64321,41.941327]},"n1779":{"id":"n1779","loc":[-85.643649,41.941323]},"n178":{"id":"n178","loc":[-85.638892,41.94237]},"n1780":{"id":"n1780","loc":[-85.643656,41.941716]},"n1781":{"id":"n1781","loc":[-85.64358,41.941717]},"n1782":{"id":"n1782","loc":[-85.64358,41.941767]},"n1783":{"id":"n1783","loc":[-85.64382,41.941495]},"n1784":{"id":"n1784","loc":[-85.643817,41.941317]},"n1785":{"id":"n1785","loc":[-85.643235,41.941833]},"n1786":{"id":"n1786","loc":[-85.64335,41.941842]},"n1787":{"id":"n1787","loc":[-85.643504,41.941903]},"n1788":{"id":"n1788","loc":[-85.643554,41.941946]},"n1789":{"id":"n1789","loc":[-85.643618,41.942015]},"n179":{"id":"n179","loc":[-85.638891,41.942334]},"n1790":{"id":"n1790","loc":[-85.64346,41.941971]},"n1791":{"id":"n1791","loc":[-85.643528,41.942468]},"n1792":{"id":"n1792","loc":[-85.643621,41.942363]},"n1793":{"id":"n1793","loc":[-85.643496,41.942297]},"n1794":{"id":"n1794","loc":[-85.643446,41.942246]},"n1795":{"id":"n1795","loc":[-85.643398,41.942177]},"n1796":{"id":"n1796","loc":[-85.643398,41.942031]},"n1797":{"id":"n1797","loc":[-85.621531,41.952693]},"n1798":{"id":"n1798","loc":[-85.643221,41.942028]},"n1799":{"id":"n1799","loc":[-85.643225,41.942276]},"n18":{"id":"n18","loc":[-85.63345,41.94071]},"n180":{"id":"n180","loc":[-85.639037,41.942334]},"n1800":{"id":"n1800","loc":[-85.643265,41.942347]},"n1801":{"id":"n1801","loc":[-85.643323,41.942413]},"n1802":{"id":"n1802","loc":[-85.643411,41.94247]},"n1803":{"id":"n1803","loc":[-85.643459,41.942435]},"n1804":{"id":"n1804","loc":[-85.643767,41.942307]},"n1805":{"id":"n1805","loc":[-85.643661,41.942293]},"n1806":{"id":"n1806","loc":[-85.643578,41.942247]},"n1807":{"id":"n1807","loc":[-85.643522,41.942125]},"n1808":{"id":"n1808","loc":[-85.643515,41.942061]},"n1809":{"id":"n1809","loc":[-85.643346,41.941924]},"n181":{"id":"n181","loc":[-85.638074,41.941839]},"n1810":{"id":"n1810","loc":[-85.643086,41.94192]},"n1811":{"id":"n1811","loc":[-85.643529,41.94217]},"n1812":{"id":"n1812","loc":[-85.643489,41.942003]},"n1813":{"id":"n1813","loc":[-85.643295,41.941919]},"n1814":{"id":"n1814","loc":[-85.643305,41.942163]},"n1815":{"id":"n1815","loc":[-85.643354,41.942285]},"n1816":{"id":"n1816","loc":[-85.643472,41.942389]},"n1817":{"id":"n1817","loc":[-85.643608,41.942271]},"n1818":{"id":"n1818","loc":[-85.643876,41.941402]},"n1819":{"id":"n1819","loc":[-85.643818,41.941369]},"n182":{"id":"n182","loc":[-85.638076,41.941942]},"n1820":{"id":"n1820","loc":[-85.643682,41.941304]},"n1821":{"id":"n1821","loc":[-85.64359,41.941286]},"n1822":{"id":"n1822","loc":[-85.643317,41.941727]},"n1823":{"id":"n1823","loc":[-85.643301,41.941286]},"n1824":{"id":"n1824","loc":[-85.643553,41.941698]},"n1825":{"id":"n1825","loc":[-85.643543,41.941286]},"n1826":{"id":"n1826","loc":[-85.636967,41.940118]},"n1827":{"id":"n1827","loc":[-85.63378,41.940114]},"n1828":{"id":"n1828","loc":[-85.637254,41.940075]},"n1829":{"id":"n1829","loc":[-85.637002,41.941355]},"n183":{"id":"n183","loc":[-85.637955,41.941944]},"n1830":{"id":"n1830","loc":[-85.643532,41.94204]},"n1831":{"id":"n1831","loc":[-85.638235,41.942615]},"n1832":{"id":"n1832","loc":[-85.637039,41.942624]},"n1833":{"id":"n1833","loc":[-85.636369,41.94266]},"n1834":{"id":"n1834","loc":[-85.63582,41.942771],"tags":{"highway":"traffic_signals","traffic_signals":"emergency","traffic_signals:direction":"both"}},"n1835":{"id":"n1835","loc":[-85.634873,41.943044]},"n1836":{"id":"n1836","loc":[-85.643482,41.941976]},"n1837":{"id":"n1837","loc":[-85.64345,41.941945]},"n1838":{"id":"n1838","loc":[-85.641885,41.943851]},"n1839":{"id":"n1839","loc":[-85.641915,41.945121]},"n184":{"id":"n184","loc":[-85.637953,41.94184]},"n1840":{"id":"n1840","loc":[-85.639454,41.943871]},"n1841":{"id":"n1841","loc":[-85.639491,41.945191]},"n1842":{"id":"n1842","loc":[-85.635768,41.940113]},"n1843":{"id":"n1843","loc":[-85.638206,41.941345]},"n1844":{"id":"n1844","loc":[-85.640721,41.94513]},"n1845":{"id":"n1845","loc":[-85.643137,41.945103]},"n1846":{"id":"n1846","loc":[-85.638199,41.940079]},"n1847":{"id":"n1847","loc":[-85.640688,41.943861]},"n1848":{"id":"n1848","loc":[-85.643397,41.941924]},"n1849":{"id":"n1849","loc":[-85.643117,41.943841]},"n185":{"id":"n185","loc":[-85.637953,41.941866]},"n1850":{"id":"n1850","loc":[-85.636731,41.94263]},"n1851":{"id":"n1851","loc":[-85.63518,41.942955],"tags":{"highway":"crossing"}},"n1852":{"id":"n1852","loc":[-85.636152,41.942695]},"n1853":{"id":"n1853","loc":[-85.644202,41.941499]},"n1854":{"id":"n1854","loc":[-85.644211,41.942116]},"n1855":{"id":"n1855","loc":[-85.644233,41.942404]},"n1856":{"id":"n1856","loc":[-85.644231,41.942223]},"n1857":{"id":"n1857","loc":[-85.644133,41.941315]},"n1858":{"id":"n1858","loc":[-85.644136,41.941493]},"n1859":{"id":"n1859","loc":[-85.644345,41.942307]},"n186":{"id":"n186","loc":[-85.637873,41.941867]},"n1860":{"id":"n1860","loc":[-85.644232,41.942304]},"n1861":{"id":"n1861","loc":[-85.644134,41.941403]},"n1862":{"id":"n1862","loc":[-85.63607,41.943005],"tags":{"addr:city":"Three Rivers","addr:housenumber":"333","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","amenity":"fire_station","name":"Three Rivers Fire Department"}},"n1863":{"id":"n1863","loc":[-85.637,41.941236]},"n1864":{"id":"n1864","loc":[-85.634476,41.941475]},"n1865":{"id":"n1865","loc":[-85.635036,41.941858]},"n1866":{"id":"n1866","loc":[-85.635362,41.941962]},"n1867":{"id":"n1867","loc":[-85.635796,41.941962]},"n1868":{"id":"n1868","loc":[-85.63295,41.943006]},"n1869":{"id":"n1869","loc":[-85.634692,41.943098]},"n187":{"id":"n187","loc":[-85.637877,41.941975]},"n1870":{"id":"n1870","loc":[-85.633128,41.940484]},"n1871":{"id":"n1871","loc":[-85.633117,41.942798]},"n1872":{"id":"n1872","loc":[-85.633303,41.942412]},"n1873":{"id":"n1873","loc":[-85.633482,41.941912]},"n1874":{"id":"n1874","loc":[-85.633455,41.941359]},"n1875":{"id":"n1875","loc":[-85.633162,41.942679]},"n1876":{"id":"n1876","loc":[-85.634274,41.943479]},"n1877":{"id":"n1877","loc":[-85.634678,41.942909]},"n1878":{"id":"n1878","loc":[-85.6339,41.941453]},"n1879":{"id":"n1879","loc":[-85.634571,41.942774]},"n188":{"id":"n188","loc":[-85.636855,41.942488]},"n1880":{"id":"n1880","loc":[-85.63419,41.941732]},"n1881":{"id":"n1881","loc":[-85.634067,41.941565]},"n1882":{"id":"n1882","loc":[-85.63436,41.942358]},"n1883":{"id":"n1883","loc":[-85.634327,41.942247]},"n1884":{"id":"n1884","loc":[-85.633391,41.941231]},"n1885":{"id":"n1885","loc":[-85.634303,41.941972]},"n1886":{"id":"n1886","loc":[-85.633541,41.940147]},"n1887":{"id":"n1887","loc":[-85.633433,41.940252]},"n1888":{"id":"n1888","loc":[-85.633402,41.940411]},"n1889":{"id":"n1889","loc":[-85.633551,41.941023]},"n189":{"id":"n189","loc":[-85.636702,41.942488]},"n1890":{"id":"n1890","loc":[-85.633719,41.941186]},"n1891":{"id":"n1891","loc":[-85.633067,41.941845]},"n1892":{"id":"n1892","loc":[-85.634902,41.942766]},"n1893":{"id":"n1893","loc":[-85.634603,41.942202]},"n1894":{"id":"n1894","loc":[-85.634858,41.942152]},"n1895":{"id":"n1895","loc":[-85.634842,41.942269]},"n1896":{"id":"n1896","loc":[-85.634907,41.942313]},"n1897":{"id":"n1897","loc":[-85.635049,41.942331]},"n1898":{"id":"n1898","loc":[-85.635101,41.942281]},"n1899":{"id":"n1899","loc":[-85.635129,41.942144]},"n19":{"id":"n19","loc":[-85.633009,41.942229]},"n190":{"id":"n190","loc":[-85.636702,41.942434]},"n1900":{"id":"n1900","loc":[-85.635531,41.942143]},"n1901":{"id":"n1901","loc":[-85.635534,41.942577]},"n1902":{"id":"n1902","loc":[-85.635158,41.942656]},"n1903":{"id":"n1903","loc":[-85.635121,41.942703]},"n1904":{"id":"n1904","loc":[-85.635087,41.941508]},"n1905":{"id":"n1905","loc":[-85.63536,41.941106]},"n1906":{"id":"n1906","loc":[-85.635442,41.941094]},"n1907":{"id":"n1907","loc":[-85.635508,41.941104]},"n1908":{"id":"n1908","loc":[-85.635569,41.941125]},"n1909":{"id":"n1909","loc":[-85.635583,41.941106]},"n191":{"id":"n191","loc":[-85.636761,41.942434]},"n1910":{"id":"n1910","loc":[-85.635555,41.940976]},"n1911":{"id":"n1911","loc":[-85.635501,41.940915]},"n1912":{"id":"n1912","loc":[-85.635392,41.940922]},"n1913":{"id":"n1913","loc":[-85.635276,41.940974]},"n1914":{"id":"n1914","loc":[-85.63517,41.941204]},"n1915":{"id":"n1915","loc":[-85.634888,41.941517]},"n1916":{"id":"n1916","loc":[-85.634897,41.941576]},"n1917":{"id":"n1917","loc":[-85.634961,41.94164]},"n1918":{"id":"n1918","loc":[-85.635028,41.941659]},"n1919":{"id":"n1919","loc":[-85.635118,41.941621]},"n192":{"id":"n192","loc":[-85.636761,41.942369]},"n1920":{"id":"n1920","loc":[-85.635085,41.941558]},"n1921":{"id":"n1921","loc":[-85.63504,41.94136]},"n1922":{"id":"n1922","loc":[-85.635221,41.941077]},"n1923":{"id":"n1923","loc":[-85.634387,41.941559]},"n1924":{"id":"n1924","loc":[-85.634351,41.941587]},"n1925":{"id":"n1925","loc":[-85.634416,41.941756]},"n1926":{"id":"n1926","loc":[-85.634461,41.941797]},"n1927":{"id":"n1927","loc":[-85.634501,41.941819]},"n1928":{"id":"n1928","loc":[-85.634597,41.941816]},"n1929":{"id":"n1929","loc":[-85.634732,41.941724]},"n193":{"id":"n193","loc":[-85.636855,41.942369]},"n1930":{"id":"n1930","loc":[-85.634672,41.941775]},"n1931":{"id":"n1931","loc":[-85.633403,41.939101]},"n1932":{"id":"n1932","loc":[-85.633297,41.939397]},"n1933":{"id":"n1933","loc":[-85.633205,41.939674]},"n1934":{"id":"n1934","loc":[-85.63322,41.939777]},"n1935":{"id":"n1935","loc":[-85.633345,41.939936]},"n1936":{"id":"n1936","loc":[-85.633376,41.940002]},"n1937":{"id":"n1937","loc":[-85.633266,41.940228]},"n1938":{"id":"n1938","loc":[-85.633236,41.940352]},"n1939":{"id":"n1939","loc":[-85.633282,41.94063]},"n194":{"id":"n194","loc":[-85.636645,41.94249]},"n1940":{"id":"n1940","loc":[-85.633364,41.940874]},"n1941":{"id":"n1941","loc":[-85.633439,41.941052]},"n1942":{"id":"n1942","loc":[-85.633582,41.941172]},"n1943":{"id":"n1943","loc":[-85.633748,41.941273]},"n1944":{"id":"n1944","loc":[-85.634317,41.941527]},"n1945":{"id":"n1945","loc":[-85.634389,41.94174]},"n1946":{"id":"n1946","loc":[-85.634441,41.941801]},"n1947":{"id":"n1947","loc":[-85.634514,41.941837]},"n1948":{"id":"n1948","loc":[-85.634485,41.942005]},"n1949":{"id":"n1949","loc":[-85.63457,41.942202]},"n195":{"id":"n195","loc":[-85.636565,41.94249]},"n1950":{"id":"n1950","loc":[-85.634869,41.942769]},"n1951":{"id":"n1951","loc":[-85.634943,41.942792]},"n1952":{"id":"n1952","loc":[-85.635139,41.942882]},"n1953":{"id":"n1953","loc":[-85.634962,41.943161]},"n1954":{"id":"n1954","loc":[-85.635002,41.943131]},"n1955":{"id":"n1955","loc":[-85.635005,41.943091]},"n1956":{"id":"n1956","loc":[-85.635216,41.943033]},"n1957":{"id":"n1957","loc":[-85.634817,41.94267]},"n1958":{"id":"n1958","loc":[-85.634614,41.942599]},"n1959":{"id":"n1959","loc":[-85.634494,41.942381]},"n196":{"id":"n196","loc":[-85.636565,41.942474]},"n1960":{"id":"n1960","loc":[-85.634486,41.9423]},"n1961":{"id":"n1961","loc":[-85.634671,41.941795]},"n1962":{"id":"n1962","loc":[-85.634595,41.941831]},"n1963":{"id":"n1963","loc":[-85.634332,41.941866]},"n1964":{"id":"n1964","loc":[-85.634207,41.941885]},"n1965":{"id":"n1965","loc":[-85.634133,41.941892]},"n1966":{"id":"n1966","loc":[-85.634131,41.942203]},"n1967":{"id":"n1967","loc":[-85.634047,41.942327]},"n1968":{"id":"n1968","loc":[-85.634219,41.942793]},"n1969":{"id":"n1969","loc":[-85.634061,41.942392]},"n197":{"id":"n197","loc":[-85.636514,41.942474]},"n1970":{"id":"n1970","loc":[-85.633989,41.942407]},"n1971":{"id":"n1971","loc":[-85.633971,41.942356]},"n1972":{"id":"n1972","loc":[-85.63361,41.942423]},"n1973":{"id":"n1973","loc":[-85.633714,41.942682]},"n1974":{"id":"n1974","loc":[-85.633698,41.942863]},"n1975":{"id":"n1975","loc":[-85.633882,41.942865]},"n1976":{"id":"n1976","loc":[-85.633941,41.943007]},"n1977":{"id":"n1977","loc":[-85.633887,41.943035]},"n1978":{"id":"n1978","loc":[-85.633768,41.942815]},"n1979":{"id":"n1979","loc":[-85.633682,41.942351]},"n198":{"id":"n198","loc":[-85.636514,41.942326]},"n1980":{"id":"n1980","loc":[-85.634037,41.942273]},"n1981":{"id":"n1981","loc":[-85.634029,41.942252]},"n1982":{"id":"n1982","loc":[-85.633673,41.942331]},"n1983":{"id":"n1983","loc":[-85.634219,41.942571]},"n1984":{"id":"n1984","loc":[-85.634252,41.942565]},"n1985":{"id":"n1985","loc":[-85.634144,41.942299]},"n1986":{"id":"n1986","loc":[-85.634115,41.942306]},"n1987":{"id":"n1987","loc":[-85.634059,41.943094]},"n1988":{"id":"n1988","loc":[-85.633944,41.942903]},"n1989":{"id":"n1989","loc":[-85.634311,41.942821]},"n199":{"id":"n199","loc":[-85.636561,41.942326]},"n1990":{"id":"n1990","loc":[-85.634351,41.94277]},"n1991":{"id":"n1991","loc":[-85.634153,41.942254]},"n1992":{"id":"n1992","loc":[-85.634092,41.94222]},"n1993":{"id":"n1993","loc":[-85.633571,41.942336]},"n1994":{"id":"n1994","loc":[-85.633513,41.942387]},"n1995":{"id":"n1995","loc":[-85.633509,41.942455]},"n1996":{"id":"n1996","loc":[-85.63363,41.942665]},"n1997":{"id":"n1997","loc":[-85.63414,41.94286]},"n1998":{"id":"n1998","loc":[-85.63397,41.942449]},"n1999":{"id":"n1999","loc":[-85.633551,41.942529]},"n2":{"id":"n2","loc":[-85.627421,41.953877]},"n20":{"id":"n20","loc":[-85.633013,41.941438]},"n200":{"id":"n200","loc":[-85.636561,41.942311]},"n2000":{"id":"n2000","loc":[-85.633741,41.942493]},"n2001":{"id":"n2001","loc":[-85.633894,41.942869]},"n2002":{"id":"n2002","loc":[-85.634132,41.941954]},"n2003":{"id":"n2003","loc":[-85.634032,41.942038]},"n2004":{"id":"n2004","loc":[-85.633765,41.942238]},"n2005":{"id":"n2005","loc":[-85.63376,41.942268]},"n2006":{"id":"n2006","loc":[-85.633768,41.942293]},"n2007":{"id":"n2007","loc":[-85.633808,41.942386]},"n2008":{"id":"n2008","loc":[-85.634946,41.941663]},"n2009":{"id":"n2009","loc":[-85.63511,41.941697]},"n201":{"id":"n201","loc":[-85.636621,41.942311]},"n2010":{"id":"n2010","loc":[-85.635337,41.94168]},"n2011":{"id":"n2011","loc":[-85.634997,41.942251]},"n2012":{"id":"n2012","loc":[-85.635013,41.942173]},"n2013":{"id":"n2013","loc":[-85.634876,41.942157]},"n2014":{"id":"n2014","loc":[-85.634859,41.942235]},"n2015":{"id":"n2015","loc":[-85.634992,41.941951]},"n2016":{"id":"n2016","loc":[-85.634952,41.941877]},"n2017":{"id":"n2017","loc":[-85.634844,41.94191]},"n2018":{"id":"n2018","loc":[-85.634884,41.941983]},"n2019":{"id":"n2019","loc":[-85.635189,41.941691]},"n202":{"id":"n202","loc":[-85.636621,41.942351]},"n2020":{"id":"n2020","loc":[-85.635089,41.941896]},"n2021":{"id":"n2021","loc":[-85.635077,41.941964]},"n2022":{"id":"n2022","loc":[-85.635058,41.942147]},"n2023":{"id":"n2023","loc":[-85.635099,41.942161]},"n2024":{"id":"n2024","loc":[-85.635099,41.942213]},"n2025":{"id":"n2025","loc":[-85.635079,41.942285]},"n2026":{"id":"n2026","loc":[-85.635047,41.942316]},"n2027":{"id":"n2027","loc":[-85.634925,41.9423]},"n2028":{"id":"n2028","loc":[-85.634911,41.942276]},"n2029":{"id":"n2029","loc":[-85.634917,41.942242]},"n203":{"id":"n203","loc":[-85.63666,41.942351]},"n2030":{"id":"n2030","loc":[-85.634698,41.941898]},"n2031":{"id":"n2031","loc":[-85.634964,41.941878]},"n2032":{"id":"n2032","loc":[-85.635025,41.941929]},"n2033":{"id":"n2033","loc":[-85.634862,41.941887]},"n2034":{"id":"n2034","loc":[-85.634811,41.94181]},"n2035":{"id":"n2035","loc":[-85.634731,41.941745]},"n2036":{"id":"n2036","loc":[-85.634933,41.94176]},"n2037":{"id":"n2037","loc":[-85.634942,41.942145]},"n2038":{"id":"n2038","loc":[-85.634944,41.942065]},"n2039":{"id":"n2039","loc":[-85.634914,41.941996]},"n204":{"id":"n204","loc":[-85.63666,41.942453]},"n2040":{"id":"n2040","loc":[-85.634981,41.941979]},"n2041":{"id":"n2041","loc":[-85.633419,41.942172]},"n2042":{"id":"n2042","loc":[-85.633509,41.941631]},"n2043":{"id":"n2043","loc":[-85.633686,41.942937]},"n2044":{"id":"n2044","loc":[-85.633371,41.942722]},"n2045":{"id":"n2045","loc":[-85.633291,41.942538]},"n2046":{"id":"n2046","loc":[-85.633902,41.940941]},"n2047":{"id":"n2047","loc":[-85.635254,41.940939]},"n2048":{"id":"n2048","loc":[-85.635686,41.940829]},"n2049":{"id":"n2049","loc":[-85.635712,41.942681]},"n205":{"id":"n205","loc":[-85.636645,41.942453]},"n2050":{"id":"n2050","loc":[-85.633721,41.942118]},"n2051":{"id":"n2051","loc":[-85.633698,41.942057]},"n2052":{"id":"n2052","loc":[-85.633591,41.942079]},"n2053":{"id":"n2053","loc":[-85.633614,41.94214]},"n2054":{"id":"n2054","loc":[-85.633968,41.941099]},"n2055":{"id":"n2055","loc":[-85.633907,41.941138]},"n2056":{"id":"n2056","loc":[-85.633968,41.941197]},"n2057":{"id":"n2057","loc":[-85.63404,41.941162]},"n2058":{"id":"n2058","loc":[-85.634839,41.941665]},"n2059":{"id":"n2059","loc":[-85.635314,41.943035]},"n206":{"id":"n206","loc":[-85.636394,41.942471]},"n2060":{"id":"n2060","loc":[-85.634919,41.943142]},"n2061":{"id":"n2061","loc":[-85.636433,41.942959],"tags":{"addr:city":"Three Rivers","addr:housenumber":"333","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","amenity":"townhall","name":"Three Rivers City Hall"}},"n2062":{"id":"n2062","loc":[-85.637039,41.942789]},"n2063":{"id":"n2063","loc":[-85.636333,41.94279]},"n2064":{"id":"n2064","loc":[-85.634484,41.940726]},"n2065":{"id":"n2065","loc":[-85.634483,41.940603]},"n2066":{"id":"n2066","loc":[-85.634908,41.940601]},"n2067":{"id":"n2067","loc":[-85.634908,41.94053]},"n2068":{"id":"n2068","loc":[-85.634934,41.94053]},"n2069":{"id":"n2069","loc":[-85.634934,41.940496]},"n207":{"id":"n207","loc":[-85.636262,41.942472]},"n2070":{"id":"n2070","loc":[-85.63504,41.940495]},"n2071":{"id":"n2071","loc":[-85.63504,41.940531]},"n2072":{"id":"n2072","loc":[-85.635068,41.940531]},"n2073":{"id":"n2073","loc":[-85.635071,41.940794]},"n2074":{"id":"n2074","loc":[-85.635183,41.940793]},"n2075":{"id":"n2075","loc":[-85.635185,41.940916]},"n2076":{"id":"n2076","loc":[-85.634799,41.940919]},"n2077":{"id":"n2077","loc":[-85.634798,41.940798]},"n2078":{"id":"n2078","loc":[-85.634925,41.940797]},"n2079":{"id":"n2079","loc":[-85.634924,41.940724]},"n208":{"id":"n208","loc":[-85.636261,41.94233]},"n2080":{"id":"n2080","loc":[-85.637448,41.938233]},"n2081":{"id":"n2081","loc":[-85.634168,41.943279]},"n2082":{"id":"n2082","loc":[-85.635744,41.938248]},"n2083":{"id":"n2083","loc":[-85.638744,41.951211]},"n2084":{"id":"n2084","loc":[-85.636421,41.946392]},"n2085":{"id":"n2085","loc":[-85.635965,41.945809]},"n2086":{"id":"n2086","loc":[-85.635683,41.945449]},"n2087":{"id":"n2087","loc":[-85.635281,41.945025]},"n2088":{"id":"n2088","loc":[-85.632443,41.942574]},"n2089":{"id":"n2089","loc":[-85.638243,41.943674]},"n209":{"id":"n209","loc":[-85.636353,41.942329]},"n2090":{"id":"n2090","loc":[-85.638228,41.943747]},"n2091":{"id":"n2091","loc":[-85.638163,41.943797]},"n2092":{"id":"n2092","loc":[-85.638089,41.943832]},"n2093":{"id":"n2093","loc":[-85.637969,41.943841]},"n2094":{"id":"n2094","loc":[-85.637841,41.943833]},"n2095":{"id":"n2095","loc":[-85.637342,41.943734]},"n2096":{"id":"n2096","loc":[-85.637232,41.943707]},"n2097":{"id":"n2097","loc":[-85.637163,41.943668]},"n2098":{"id":"n2098","loc":[-85.637118,41.943615]},"n2099":{"id":"n2099","loc":[-85.637078,41.943494]},"n21":{"id":"n21","loc":[-85.634126,41.942228]},"n210":{"id":"n210","loc":[-85.636354,41.94239]},"n2100":{"id":"n2100","loc":[-85.632903,41.998429],"tags":{"railway":"level_crossing"}},"n2101":{"id":"n2101","loc":[-85.633616,41.943581],"tags":{"railway":"level_crossing"}},"n2102":{"id":"n2102","loc":[-85.636943,41.947311]},"n2103":{"id":"n2103","loc":[-85.6376,41.94854]},"n2104":{"id":"n2104","loc":[-85.634565,41.93631]},"n2105":{"id":"n2105","loc":[-85.629597,41.942562]},"n2106":{"id":"n2106","loc":[-85.630821,41.943077]},"n2107":{"id":"n2107","loc":[-85.627473,41.940659]},"n2108":{"id":"n2108","loc":[-85.629708,41.942872]},"n2109":{"id":"n2109","loc":[-85.634093,41.935448]},"n211":{"id":"n211","loc":[-85.636393,41.94239]},"n2110":{"id":"n2110","loc":[-85.630413,41.94366]},"n2111":{"id":"n2111","loc":[-85.630488,41.942662]},"n2112":{"id":"n2112","loc":[-85.63361,41.936749]},"n2113":{"id":"n2113","loc":[-85.630038,41.941808]},"n2114":{"id":"n2114","loc":[-85.632016,41.942922]},"n2115":{"id":"n2115","loc":[-85.631525,41.944303]},"n2116":{"id":"n2116","loc":[-85.626862,41.94022]},"n2117":{"id":"n2117","loc":[-85.629673,41.94121]},"n2118":{"id":"n2118","loc":[-85.632752,41.943101]},"n2119":{"id":"n2119","loc":[-85.631147,41.943201]},"n212":{"id":"n212","loc":[-85.63444,41.943176]},"n2120":{"id":"n2120","loc":[-85.624974,41.940579]},"n2121":{"id":"n2121","loc":[-85.629518,41.941783]},"n2122":{"id":"n2122","loc":[-85.632349,41.942699]},"n2123":{"id":"n2123","loc":[-85.628418,41.940356]},"n2124":{"id":"n2124","loc":[-85.629147,41.94129]},"n2125":{"id":"n2125","loc":[-85.631111,41.943979]},"n2126":{"id":"n2126","loc":[-85.632087,41.940013]},"n2127":{"id":"n2127","loc":[-85.634469,41.935057]},"n2128":{"id":"n2128","loc":[-85.630097,41.943449]},"n2129":{"id":"n2129","loc":[-85.6331,41.937878]},"n213":{"id":"n213","loc":[-85.63375,41.942814]},"n2130":{"id":"n2130","loc":[-85.625274,41.941114]},"n2131":{"id":"n2131","loc":[-85.632632,41.941217]},"n2132":{"id":"n2132","loc":[-85.632739,41.941926]},"n2133":{"id":"n2133","loc":[-85.631647,41.94366]},"n2134":{"id":"n2134","loc":[-85.635059,41.935456]},"n2135":{"id":"n2135","loc":[-85.631259,41.944349]},"n2136":{"id":"n2136","loc":[-85.626336,41.940811]},"n2137":{"id":"n2137","loc":[-85.631507,41.943875]},"n2138":{"id":"n2138","loc":[-85.625081,41.940859]},"n2139":{"id":"n2139","loc":[-85.625778,41.940093]},"n214":{"id":"n214","loc":[-85.633674,41.942869]},"n2140":{"id":"n2140","loc":[-85.632641,41.942436]},"n2141":{"id":"n2141","loc":[-85.628825,41.941034]},"n2142":{"id":"n2142","loc":[-85.627913,41.940292]},"n2143":{"id":"n2143","loc":[-85.628943,41.940516]},"n2144":{"id":"n2144","loc":[-85.63139,41.943941]},"n2145":{"id":"n2145","loc":[-85.630081,41.94204]},"n2146":{"id":"n2146","loc":[-85.632194,41.93963]},"n2147":{"id":"n2147","loc":[-85.632913,41.93939]},"n2148":{"id":"n2148","loc":[-85.632001,41.943492]},"n2149":{"id":"n2149","loc":[-85.63149,41.943154]},"n215":{"id":"n215","loc":[-85.633542,41.942768]},"n2150":{"id":"n2150","loc":[-85.625167,41.940117]},"n2151":{"id":"n2151","loc":[-85.63287,41.939941]},"n2152":{"id":"n2152","loc":[-85.630789,41.943732]},"n2153":{"id":"n2153","loc":[-85.632173,41.940348]},"n2154":{"id":"n2154","loc":[-85.626587,41.940113]},"n2155":{"id":"n2155","loc":[-85.62684,41.940667]},"n2156":{"id":"n2156","loc":[-85.632527,41.938904]},"n2157":{"id":"n2157","loc":[-85.624866,41.94018]},"n2158":{"id":"n2158","loc":[-85.633267,41.93872]},"n2159":{"id":"n2159","loc":[-85.62934,41.940843]},"n216":{"id":"n216","loc":[-85.633618,41.942714]},"n2160":{"id":"n2160","loc":[-85.62272,41.953817]},"n2161":{"id":"n2161","loc":[-85.622555,41.954453]},"n2162":{"id":"n2162","loc":[-85.637225,41.944128]},"n2163":{"id":"n2163","loc":[-85.622628,41.953683]},"n2164":{"id":"n2164","loc":[-85.635441,41.943989]},"n2165":{"id":"n2165","loc":[-85.622629,41.953807]},"n2166":{"id":"n2166","loc":[-85.62262,41.953807]},"n2167":{"id":"n2167","loc":[-85.62262,41.953837]},"n2168":{"id":"n2168","loc":[-85.622532,41.953838]},"n2169":{"id":"n2169","loc":[-85.637469,41.944579]},"n217":{"id":"n217","loc":[-85.634001,41.942336]},"n2170":{"id":"n2170","loc":[-85.63688,41.943935]},"n2171":{"id":"n2171","loc":[-85.638263,41.946367]},"n2172":{"id":"n2172","loc":[-85.622532,41.953807]},"n2173":{"id":"n2173","loc":[-85.622353,41.953808]},"n2174":{"id":"n2174","loc":[-85.622352,41.953685]},"n2175":{"id":"n2175","loc":[-85.622464,41.953684]},"n2176":{"id":"n2176","loc":[-85.622464,41.953648]},"n2177":{"id":"n2177","loc":[-85.637136,41.94576]},"n2178":{"id":"n2178","loc":[-85.622521,41.953648]},"n2179":{"id":"n2179","loc":[-85.637129,41.945415]},"n218":{"id":"n218","loc":[-85.633825,41.942376]},"n2180":{"id":"n2180","loc":[-85.637473,41.94607]},"n2181":{"id":"n2181","loc":[-85.622521,41.953683]},"n2182":{"id":"n2182","loc":[-85.622717,41.954104]},"n2183":{"id":"n2183","loc":[-85.637769,41.946095]},"n2184":{"id":"n2184","loc":[-85.623872,41.953515]},"n2185":{"id":"n2185","loc":[-85.623851,41.953588]},"n2186":{"id":"n2186","loc":[-85.631385,41.94433]},"n2187":{"id":"n2187","loc":[-85.623608,41.953543]},"n2188":{"id":"n2188","loc":[-85.637308,41.944882]},"n2189":{"id":"n2189","loc":[-85.634898,41.944041]},"n219":{"id":"n219","loc":[-85.633807,41.942334]},"n2190":{"id":"n2190","loc":[-85.623604,41.953442]},"n2191":{"id":"n2191","loc":[-85.623705,41.953442]},"n2192":{"id":"n2192","loc":[-85.623708,41.953493]},"n2193":{"id":"n2193","loc":[-85.624064,41.952655]},"n2194":{"id":"n2194","loc":[-85.62395,41.952654]},"n2195":{"id":"n2195","loc":[-85.623951,41.952579]},"n2196":{"id":"n2196","loc":[-85.637435,41.944342]},"n2197":{"id":"n2197","loc":[-85.624064,41.952579]},"n2198":{"id":"n2198","loc":[-85.623812,41.952648]},"n2199":{"id":"n2199","loc":[-85.623813,41.952705]},"n22":{"id":"n22","loc":[-85.633531,41.942357]},"n220":{"id":"n220","loc":[-85.633983,41.942294]},"n2200":{"id":"n2200","loc":[-85.637169,41.945098]},"n2201":{"id":"n2201","loc":[-85.623552,41.952707]},"n2202":{"id":"n2202","loc":[-85.623551,41.95263]},"n2203":{"id":"n2203","loc":[-85.623701,41.952629]},"n2204":{"id":"n2204","loc":[-85.635894,41.943719]},"n2205":{"id":"n2205","loc":[-85.637297,41.945992]},"n2206":{"id":"n2206","loc":[-85.623724,41.952648]},"n2207":{"id":"n2207","loc":[-85.623812,41.952438]},"n2208":{"id":"n2208","loc":[-85.625239,41.952197]},"n2209":{"id":"n2209","loc":[-85.625232,41.952257]},"n221":{"id":"n221","loc":[-85.634182,41.942495]},"n2210":{"id":"n2210","loc":[-85.635175,41.94408]},"n2211":{"id":"n2211","loc":[-85.636381,41.943761]},"n2212":{"id":"n2212","loc":[-85.625115,41.952249]},"n2213":{"id":"n2213","loc":[-85.638578,41.946644]},"n2214":{"id":"n2214","loc":[-85.625122,41.952189]},"n2215":{"id":"n2215","loc":[-85.625085,41.952031]},"n2216":{"id":"n2216","loc":[-85.636126,41.943713]},"n2217":{"id":"n2217","loc":[-85.635005,41.944041]},"n2218":{"id":"n2218","loc":[-85.63714,41.945328]},"n2219":{"id":"n2219","loc":[-85.634871,41.943292]},"n222":{"id":"n222","loc":[-85.634149,41.942503]},"n2220":{"id":"n2220","loc":[-85.635705,41.943799]},"n2221":{"id":"n2221","loc":[-85.634995,41.943576]},"n2222":{"id":"n2222","loc":[-85.635026,41.943829]},"n2223":{"id":"n2223","loc":[-85.632874,41.941031]},"n2224":{"id":"n2224","loc":[-85.632531,41.940233]},"n2225":{"id":"n2225","loc":[-85.634247,41.936003]},"n2226":{"id":"n2226","loc":[-85.62929,41.941127]},"n2227":{"id":"n2227","loc":[-85.630428,41.943266]},"n2228":{"id":"n2228","loc":[-85.631608,41.943425]},"n2229":{"id":"n2229","loc":[-85.632316,41.943042]},"n223":{"id":"n223","loc":[-85.634098,41.942373]},"n2230":{"id":"n2230","loc":[-85.628711,41.940744]},"n2231":{"id":"n2231","loc":[-85.627831,41.940536]},"n2232":{"id":"n2232","loc":[-85.625514,41.94052]},"n2233":{"id":"n2233","loc":[-85.631127,41.943545]},"n2234":{"id":"n2234","loc":[-85.632909,41.942531]},"n2235":{"id":"n2235","loc":[-85.632917,41.938796]},"n2236":{"id":"n2236","loc":[-85.626716,41.94044]},"n2237":{"id":"n2237","loc":[-85.630122,41.942852]},"n2238":{"id":"n2238","loc":[-85.632509,41.939674]},"n2239":{"id":"n2239","loc":[-85.634762,41.935237]},"n224":{"id":"n224","loc":[-85.634131,41.942366]},"n2240":{"id":"n2240","loc":[-85.63384,41.937025]},"n2241":{"id":"n2241","loc":[-85.629741,41.941909]},"n2242":{"id":"n2242","loc":[-85.635254,41.945001],"tags":{"railway":"level_crossing"}},"n2243":{"id":"n2243","loc":[-85.634005,41.938168]},"n2244":{"id":"n2244","loc":[-85.63393,41.938335]},"n2245":{"id":"n2245","loc":[-85.633859,41.93846]},"n2246":{"id":"n2246","loc":[-85.633663,41.938776]},"n2247":{"id":"n2247","loc":[-85.633513,41.938936]},"n2248":{"id":"n2248","loc":[-85.635295,41.943225]},"n2249":{"id":"n2249","loc":[-85.635393,41.943293]},"n225":{"id":"n225","loc":[-85.635986,41.94177]},"n2250":{"id":"n2250","loc":[-85.635645,41.94332]},"n2251":{"id":"n2251","loc":[-85.63629,41.943328]},"n2252":{"id":"n2252","loc":[-85.636554,41.943372]},"n2253":{"id":"n2253","loc":[-85.636869,41.943526]},"n2254":{"id":"n2254","loc":[-85.637099,41.943704]},"n2255":{"id":"n2255","loc":[-85.637268,41.943773]},"n2256":{"id":"n2256","loc":[-85.637483,41.943821]},"n2257":{"id":"n2257","loc":[-85.637616,41.943929]},"n2258":{"id":"n2258","loc":[-85.637752,41.944114]},"n2259":{"id":"n2259","loc":[-85.638399,41.944308]},"n226":{"id":"n226","loc":[-85.635982,41.941523]},"n2260":{"id":"n2260","loc":[-85.638573,41.944451]},"n2261":{"id":"n2261","loc":[-85.638702,41.944574]},"n2262":{"id":"n2262","loc":[-85.638718,41.944652]},"n2263":{"id":"n2263","loc":[-85.638715,41.944809]},"n2264":{"id":"n2264","loc":[-85.638766,41.944988]},"n2265":{"id":"n2265","loc":[-85.638773,41.945136]},"n2266":{"id":"n2266","loc":[-85.638705,41.945251]},"n2267":{"id":"n2267","loc":[-85.638335,41.944291]},"n2268":{"id":"n2268","loc":[-85.638474,41.944352]},"n2269":{"id":"n2269","loc":[-85.635408,41.943429]},"n227":{"id":"n227","loc":[-85.636108,41.941521]},"n2270":{"id":"n2270","loc":[-85.635271,41.943654]},"n2271":{"id":"n2271","loc":[-85.635266,41.943744]},"n2272":{"id":"n2272","loc":[-85.635271,41.943819]},"n2273":{"id":"n2273","loc":[-85.635192,41.943876]},"n2274":{"id":"n2274","loc":[-85.635129,41.943857]},"n2275":{"id":"n2275","loc":[-85.635122,41.943764]},"n2276":{"id":"n2276","loc":[-85.635124,41.943664]},"n2277":{"id":"n2277","loc":[-85.63515,41.943611]},"n2278":{"id":"n2278","loc":[-85.635106,41.943534]},"n2279":{"id":"n2279","loc":[-85.634972,41.943197]},"n228":{"id":"n228","loc":[-85.636109,41.941559]},"n2280":{"id":"n2280","loc":[-85.633978,41.938227]},"n2281":{"id":"n2281","loc":[-85.634216,41.943255]},"n2282":{"id":"n2282","loc":[-85.634434,41.943622]},"n2283":{"id":"n2283","loc":[-85.632406,41.940854]},"n2284":{"id":"n2284","loc":[-85.632488,41.941063],"tags":{"leisure":"slipway"}},"n2285":{"id":"n2285","loc":[-85.632726,41.941537]},"n2286":{"id":"n2286","loc":[-85.632639,41.94136]},"n2287":{"id":"n2287","loc":[-85.632704,41.941439]},"n2288":{"id":"n2288","loc":[-85.632289,41.940601]},"n2289":{"id":"n2289","loc":[-85.632541,41.942526]},"n229":{"id":"n229","loc":[-85.636145,41.941559]},"n2290":{"id":"n2290","loc":[-85.634058,41.943173]},"n2291":{"id":"n2291","loc":[-85.636175,41.945974]},"n2292":{"id":"n2292","loc":[-85.636528,41.945975]},"n2293":{"id":"n2293","loc":[-85.637092,41.945893]},"n2294":{"id":"n2294","loc":[-85.637881,41.945647]},"n2295":{"id":"n2295","loc":[-85.639329,41.945162]},"n2296":{"id":"n2296","loc":[-85.639323,41.945026]},"n2297":{"id":"n2297","loc":[-85.638826,41.945032]},"n2298":{"id":"n2298","loc":[-85.638817,41.944174]},"n2299":{"id":"n2299","loc":[-85.638291,41.94418]},"n23":{"id":"n23","loc":[-85.633504,41.942418]},"n230":{"id":"n230","loc":[-85.636145,41.941551]},"n2300":{"id":"n2300","loc":[-85.63828,41.943811]},"n2301":{"id":"n2301","loc":[-85.638195,41.943601]},"n2302":{"id":"n2302","loc":[-85.63719,41.943592]},"n2303":{"id":"n2303","loc":[-85.636697,41.943273]},"n2304":{"id":"n2304","loc":[-85.635375,41.943274]},"n2305":{"id":"n2305","loc":[-85.635091,41.943547]},"n2306":{"id":"n2306","loc":[-85.63442,41.944117]},"n2307":{"id":"n2307","loc":[-85.635117,41.943717]},"n2308":{"id":"n2308","loc":[-85.635601,41.945177]},"n2309":{"id":"n2309","loc":[-85.635819,41.945494]},"n231":{"id":"n231","loc":[-85.636312,41.941549]},"n2310":{"id":"n2310","loc":[-85.635303,41.944891]},"n2311":{"id":"n2311","loc":[-85.637674,41.943802]},"n2312":{"id":"n2312","loc":[-85.638263,41.944272]},"n2313":{"id":"n2313","loc":[-85.634267,41.935266]},"n2314":{"id":"n2314","loc":[-85.639788,41.945152]},"n2315":{"id":"n2315","loc":[-85.639645,41.945167]},"n2316":{"id":"n2316","loc":[-85.639362,41.945233]},"n2317":{"id":"n2317","loc":[-85.638616,41.945163]},"n2318":{"id":"n2318","loc":[-85.638514,41.944936]},"n2319":{"id":"n2319","loc":[-85.638578,41.94503]},"n232":{"id":"n232","loc":[-85.636314,41.941649]},"n2320":{"id":"n2320","loc":[-85.638578,41.945215]},"n2321":{"id":"n2321","loc":[-85.640495,41.947015]},"n2322":{"id":"n2322","loc":[-85.639577,41.946495]},"n2323":{"id":"n2323","loc":[-85.638935,41.946087]},"n2324":{"id":"n2324","loc":[-85.637535,41.94584]},"n2325":{"id":"n2325","loc":[-85.638357,41.945404]},"n2326":{"id":"n2326","loc":[-85.638051,41.94553]},"n2327":{"id":"n2327","loc":[-85.637732,41.945555]},"n2328":{"id":"n2328","loc":[-85.637657,41.945524]},"n2329":{"id":"n2329","loc":[-85.637598,41.945467]},"n233":{"id":"n233","loc":[-85.636152,41.94165]},"n2330":{"id":"n2330","loc":[-85.637669,41.945318]},"n2331":{"id":"n2331","loc":[-85.637894,41.945171]},"n2332":{"id":"n2332","loc":[-85.637923,41.945082]},"n2333":{"id":"n2333","loc":[-85.63793,41.944756]},"n2334":{"id":"n2334","loc":[-85.637976,41.944696]},"n2335":{"id":"n2335","loc":[-85.638044,41.944671]},"n2336":{"id":"n2336","loc":[-85.638129,41.944597]},"n2337":{"id":"n2337","loc":[-85.638252,41.944413]},"n2338":{"id":"n2338","loc":[-85.638092,41.945442]},"n2339":{"id":"n2339","loc":[-85.638409,41.945315]},"n234":{"id":"n234","loc":[-85.636152,41.941628]},"n2340":{"id":"n2340","loc":[-85.638325,41.944771]},"n2341":{"id":"n2341","loc":[-85.638103,41.944744]},"n2342":{"id":"n2342","loc":[-85.637976,41.944781]},"n2343":{"id":"n2343","loc":[-85.637983,41.944865]},"n2344":{"id":"n2344","loc":[-85.638063,41.945074]},"n2345":{"id":"n2345","loc":[-85.638041,41.945206]},"n2346":{"id":"n2346","loc":[-85.637907,41.945309]},"n2347":{"id":"n2347","loc":[-85.637925,41.94539]},"n2348":{"id":"n2348","loc":[-85.637998,41.94545]},"n2349":{"id":"n2349","loc":[-85.637135,41.946254]},"n235":{"id":"n235","loc":[-85.63611,41.941628]},"n2350":{"id":"n2350","loc":[-85.636837,41.946615]},"n2351":{"id":"n2351","loc":[-85.637954,41.948909]},"n2352":{"id":"n2352","loc":[-85.638382,41.949786]},"n2353":{"id":"n2353","loc":[-85.639367,41.951242]},"n2354":{"id":"n2354","loc":[-85.640554,41.951777]},"n2355":{"id":"n2355","loc":[-85.6411,41.952234]},"n2356":{"id":"n2356","loc":[-85.641742,41.952657]},"n2357":{"id":"n2357","loc":[-85.642321,41.952941]},"n2358":{"id":"n2358","loc":[-85.64277,41.953228]},"n2359":{"id":"n2359","loc":[-85.643333,41.953825]},"n236":{"id":"n236","loc":[-85.636113,41.941768]},"n2360":{"id":"n2360","loc":[-85.643579,41.954365]},"n2361":{"id":"n2361","loc":[-85.644439,41.954105]},"n2362":{"id":"n2362","loc":[-85.64506,41.954]},"n2363":{"id":"n2363","loc":[-85.645483,41.953911]},"n2364":{"id":"n2364","loc":[-85.646046,41.953853]},"n2365":{"id":"n2365","loc":[-85.646318,41.953717]},"n2366":{"id":"n2366","loc":[-85.646276,41.953414]},"n2367":{"id":"n2367","loc":[-85.631063,41.957478],"tags":{"emergency":"fire_hydrant"}},"n2368":{"id":"n2368","loc":[-85.630996,41.955857],"tags":{"emergency":"fire_hydrant"}},"n2369":{"id":"n2369","loc":[-85.630976,41.954608],"tags":{"emergency":"fire_hydrant"}},"n237":{"id":"n237","loc":[-85.635983,41.941589],"tags":{"entrance":"yes"}},"n2370":{"id":"n2370","loc":[-85.646,41.953154]},"n2371":{"id":"n2371","loc":[-85.645222,41.953193]},"n2372":{"id":"n2372","loc":[-85.644732,41.953181]},"n2373":{"id":"n2373","loc":[-85.644064,41.953298]},"n2374":{"id":"n2374","loc":[-85.643818,41.953177]},"n2375":{"id":"n2375","loc":[-85.644001,41.95284]},"n2376":{"id":"n2376","loc":[-85.628174,41.95456],"tags":{"emergency":"fire_hydrant"}},"n2377":{"id":"n2377","loc":[-85.644267,41.952591]},"n2378":{"id":"n2378","loc":[-85.644288,41.952328]},"n2379":{"id":"n2379","loc":[-85.627276,41.953987],"tags":{"emergency":"fire_hydrant"}},"n238":{"id":"n238","loc":[-85.635906,41.94159]},"n2380":{"id":"n2380","loc":[-85.644262,41.952153]},"n2381":{"id":"n2381","loc":[-85.644168,41.95204]},"n2382":{"id":"n2382","loc":[-85.64421,41.951749]},"n2383":{"id":"n2383","loc":[-85.64385,41.951586]},"n2384":{"id":"n2384","loc":[-85.62736,41.955964],"tags":{"emergency":"fire_hydrant"}},"n2385":{"id":"n2385","loc":[-85.626307,41.957198],"tags":{"emergency":"fire_hydrant"}},"n2386":{"id":"n2386","loc":[-85.643589,41.951323]},"n2387":{"id":"n2387","loc":[-85.62747,41.957509],"tags":{"emergency":"fire_hydrant"}},"n2388":{"id":"n2388","loc":[-85.628665,41.957492],"tags":{"emergency":"fire_hydrant"}},"n2389":{"id":"n2389","loc":[-85.642535,41.951031]},"n239":{"id":"n239","loc":[-85.635883,41.940182]},"n2390":{"id":"n2390","loc":[-85.642269,41.95088]},"n2391":{"id":"n2391","loc":[-85.641878,41.950814]},"n2392":{"id":"n2392","loc":[-85.641549,41.950806]},"n2393":{"id":"n2393","loc":[-85.641103,41.950549]},"n2394":{"id":"n2394","loc":[-85.630864,41.959046],"tags":{"emergency":"fire_hydrant"}},"n2395":{"id":"n2395","loc":[-85.632249,41.958969],"tags":{"emergency":"fire_hydrant"}},"n2396":{"id":"n2396","loc":[-85.641037,41.949821]},"n2397":{"id":"n2397","loc":[-85.641006,41.949433]},"n2398":{"id":"n2398","loc":[-85.632232,41.95859],"tags":{"emergency":"fire_hydrant"}},"n2399":{"id":"n2399","loc":[-85.632071,41.958345],"tags":{"emergency":"fire_hydrant"}},"n24":{"id":"n24","loc":[-85.634346,41.942792]},"n240":{"id":"n240","loc":[-85.635916,41.94264]},"n2400":{"id":"n2400","loc":[-85.632228,41.9573],"tags":{"emergency":"fire_hydrant"}},"n2401":{"id":"n2401","loc":[-85.641152,41.948257]},"n2402":{"id":"n2402","loc":[-85.641055,41.947304]},"n2403":{"id":"n2403","loc":[-85.638022,41.945897]},"n2404":{"id":"n2404","loc":[-85.638672,41.950778]},"n2405":{"id":"n2405","loc":[-85.63666,41.944492],"tags":{"name":"Memory Isle","place":"island"}},"n2406":{"id":"n2406","loc":[-85.635,41.946389],"tags":{"amenity":"post_office","name":"Three Rivers Post Office"}},"n2407":{"id":"n2407","loc":[-85.633676,41.946036]},"n2408":{"id":"n2408","loc":[-85.633736,41.946078]},"n2409":{"id":"n2409","loc":[-85.633997,41.946185]},"n241":{"id":"n241","loc":[-85.635795,41.941906]},"n2410":{"id":"n2410","loc":[-85.634448,41.945626],"tags":{"highway":"traffic_signals","traffic_signals":"signal"}},"n2411":{"id":"n2411","loc":[-85.63456,41.945731],"tags":{"crossing":"zebra","highway":"crossing"}},"n2412":{"id":"n2412","loc":[-85.634592,41.94578]},"n2413":{"id":"n2413","loc":[-85.634607,41.945815]},"n2414":{"id":"n2414","loc":[-85.634614,41.945864]},"n2415":{"id":"n2415","loc":[-85.636066,41.946185]},"n2416":{"id":"n2416","loc":[-85.636128,41.946352]},"n2417":{"id":"n2417","loc":[-85.636142,41.946452]},"n2418":{"id":"n2418","loc":[-85.635327,41.945292]},"n2419":{"id":"n2419","loc":[-85.635648,41.94558]},"n242":{"id":"n242","loc":[-85.635909,41.941906]},"n2420":{"id":"n2420","loc":[-85.635769,41.945729]},"n2421":{"id":"n2421","loc":[-85.637349,41.945897]},"n2422":{"id":"n2422","loc":[-85.632211,41.95596],"tags":{"emergency":"fire_hydrant"}},"n2423":{"id":"n2423","loc":[-85.635942,41.94598]},"n2424":{"id":"n2424","loc":[-85.636443,41.946042]},"n2425":{"id":"n2425","loc":[-85.635819,41.946052]},"n2426":{"id":"n2426","loc":[-85.636669,41.946025]},"n2427":{"id":"n2427","loc":[-85.636832,41.946005]},"n2428":{"id":"n2428","loc":[-85.637039,41.945968]},"n2429":{"id":"n2429","loc":[-85.636291,41.946046]},"n243":{"id":"n243","loc":[-85.636359,41.941904]},"n2430":{"id":"n2430","loc":[-85.634005,41.943367]},"n2431":{"id":"n2431","loc":[-85.633366,41.943724]},"n2432":{"id":"n2432","loc":[-85.634617,41.946057]},"n2433":{"id":"n2433","loc":[-85.636534,41.944793]},"n2434":{"id":"n2434","loc":[-85.637055,41.945188]},"n2435":{"id":"n2435","loc":[-85.636153,41.944618]},"n2436":{"id":"n2436","loc":[-85.636803,41.944944]},"n2437":{"id":"n2437","loc":[-85.633389,41.945735]},"n2438":{"id":"n2438","loc":[-85.633536,41.94585]},"n2439":{"id":"n2439","loc":[-85.63363,41.945993]},"n244":{"id":"n244","loc":[-85.636351,41.941438]},"n2440":{"id":"n2440","loc":[-85.633268,41.94568]},"n2441":{"id":"n2441","loc":[-85.635947,41.94546]},"n2442":{"id":"n2442","loc":[-85.636277,41.945268]},"n2443":{"id":"n2443","loc":[-85.635203,41.944287]},"n2444":{"id":"n2444","loc":[-85.634876,41.944477]},"n2445":{"id":"n2445","loc":[-85.634975,41.944419]},"n2446":{"id":"n2446","loc":[-85.633877,41.943438]},"n2447":{"id":"n2447","loc":[-85.63508,41.945113]},"n2448":{"id":"n2448","loc":[-85.635372,41.944932]},"n2449":{"id":"n2449","loc":[-85.636594,41.945935]},"n245":{"id":"n245","loc":[-85.635903,41.941436]},"n2450":{"id":"n2450","loc":[-85.636901,41.945747]},"n2451":{"id":"n2451","loc":[-85.636329,41.945228]},"n2452":{"id":"n2452","loc":[-85.636025,41.945417]},"n2453":{"id":"n2453","loc":[-85.634002,41.944644]},"n2454":{"id":"n2454","loc":[-85.63407,41.944692]},"n2455":{"id":"n2455","loc":[-85.634114,41.944756]},"n2456":{"id":"n2456","loc":[-85.633762,41.944809]},"n2457":{"id":"n2457","loc":[-85.634184,41.944807]},"n2458":{"id":"n2458","loc":[-85.634291,41.944819]},"n2459":{"id":"n2459","loc":[-85.634639,41.944845]},"n246":{"id":"n246","loc":[-85.635788,41.941436]},"n2460":{"id":"n2460","loc":[-85.633822,41.944861]},"n2461":{"id":"n2461","loc":[-85.63411,41.944855]},"n2462":{"id":"n2462","loc":[-85.63435,41.944872]},"n2463":{"id":"n2463","loc":[-85.63441,41.944903]},"n2464":{"id":"n2464","loc":[-85.633883,41.944913]},"n2465":{"id":"n2465","loc":[-85.634164,41.944896]},"n2466":{"id":"n2466","loc":[-85.633487,41.944926]},"n2467":{"id":"n2467","loc":[-85.634736,41.944929]},"n2468":{"id":"n2468","loc":[-85.633944,41.944965]},"n2469":{"id":"n2469","loc":[-85.633555,41.944983]},"n247":{"id":"n247","loc":[-85.635929,41.941511]},"n2470":{"id":"n2470","loc":[-85.633995,41.945013]},"n2471":{"id":"n2471","loc":[-85.633614,41.945037]},"n2472":{"id":"n2472","loc":[-85.634848,41.945031]},"n2473":{"id":"n2473","loc":[-85.634049,41.945061]},"n2474":{"id":"n2474","loc":[-85.633678,41.945094]},"n2475":{"id":"n2475","loc":[-85.63317,41.945111]},"n2476":{"id":"n2476","loc":[-85.633357,41.945103]},"n2477":{"id":"n2477","loc":[-85.633728,41.945136]},"n2478":{"id":"n2478","loc":[-85.634146,41.945148]},"n2479":{"id":"n2479","loc":[-85.633416,41.945157]},"n248":{"id":"n248","loc":[-85.635929,41.941317]},"n2480":{"id":"n2480","loc":[-85.634625,41.945172]},"n2481":{"id":"n2481","loc":[-85.633239,41.945174]},"n2482":{"id":"n2482","loc":[-85.63469,41.945185]},"n2483":{"id":"n2483","loc":[-85.634661,41.945203]},"n2484":{"id":"n2484","loc":[-85.63348,41.945214]},"n2485":{"id":"n2485","loc":[-85.633578,41.945221]},"n2486":{"id":"n2486","loc":[-85.634742,41.945231]},"n2487":{"id":"n2487","loc":[-85.634251,41.94525]},"n2488":{"id":"n2488","loc":[-85.633524,41.945254]},"n2489":{"id":"n2489","loc":[-85.63468,41.945271]},"n249":{"id":"n249","loc":[-85.636414,41.941316]},"n2490":{"id":"n2490","loc":[-85.633885,41.945272]},"n2491":{"id":"n2491","loc":[-85.634795,41.945288]},"n2492":{"id":"n2492","loc":[-85.634742,41.94532]},"n2493":{"id":"n2493","loc":[-85.633946,41.945327]},"n2494":{"id":"n2494","loc":[-85.634844,41.945331]},"n2495":{"id":"n2495","loc":[-85.63435,41.945349]},"n2496":{"id":"n2496","loc":[-85.633733,41.945357]},"n2497":{"id":"n2497","loc":[-85.633987,41.945375]},"n2498":{"id":"n2498","loc":[-85.634911,41.945419]},"n2499":{"id":"n2499","loc":[-85.634049,41.945431]},"n25":{"id":"n25","loc":[-85.634333,41.942809]},"n250":{"id":"n250","loc":[-85.636414,41.941511]},"n2500":{"id":"n2500","loc":[-85.633705,41.945461]},"n2501":{"id":"n2501","loc":[-85.633642,41.945408]},"n2502":{"id":"n2502","loc":[-85.634493,41.945475]},"n2503":{"id":"n2503","loc":[-85.634106,41.945484]},"n2504":{"id":"n2504","loc":[-85.635008,41.945505]},"n2505":{"id":"n2505","loc":[-85.633757,41.945506]},"n2506":{"id":"n2506","loc":[-85.634542,41.945519]},"n2507":{"id":"n2507","loc":[-85.634162,41.945536]},"n2508":{"id":"n2508","loc":[-85.633843,41.945547]},"n2509":{"id":"n2509","loc":[-85.634919,41.94556]},"n251":{"id":"n251","loc":[-85.636819,41.941617]},"n2510":{"id":"n2510","loc":[-85.633818,41.945561]},"n2511":{"id":"n2511","loc":[-85.634638,41.94559]},"n2512":{"id":"n2512","loc":[-85.633901,41.945598]},"n2513":{"id":"n2513","loc":[-85.634257,41.945626]},"n2514":{"id":"n2514","loc":[-85.633967,41.945652]},"n2515":{"id":"n2515","loc":[-85.634735,41.945676]},"n2516":{"id":"n2516","loc":[-85.635057,41.945683]},"n2517":{"id":"n2517","loc":[-85.635296,41.945703]},"n2518":{"id":"n2518","loc":[-85.635112,41.945703]},"n2519":{"id":"n2519","loc":[-85.634782,41.945729]},"n252":{"id":"n252","loc":[-85.636718,41.941619]},"n2520":{"id":"n2520","loc":[-85.634052,41.945747]},"n2521":{"id":"n2521","loc":[-85.635296,41.945757]},"n2522":{"id":"n2522","loc":[-85.635314,41.945757]},"n2523":{"id":"n2523","loc":[-85.635112,41.945761]},"n2524":{"id":"n2524","loc":[-85.63484,41.945778]},"n2525":{"id":"n2525","loc":[-85.635314,41.945938]},"n2526":{"id":"n2526","loc":[-85.63484,41.945922]},"n2527":{"id":"n2527","loc":[-85.635461,41.944879]},"n2528":{"id":"n2528","loc":[-85.636024,41.945384]},"n2529":{"id":"n2529","loc":[-85.636145,41.945312]},"n253":{"id":"n253","loc":[-85.636716,41.941509]},"n2530":{"id":"n2530","loc":[-85.6356,41.944797]},"n2531":{"id":"n2531","loc":[-85.635135,41.944354]},"n2532":{"id":"n2532","loc":[-85.632988,41.945369]},"n2533":{"id":"n2533","loc":[-85.633376,41.94563]},"n2534":{"id":"n2534","loc":[-85.633539,41.945534]},"n2535":{"id":"n2535","loc":[-85.633238,41.945248]},"n2536":{"id":"n2536","loc":[-85.633166,41.945216]},"n2537":{"id":"n2537","loc":[-85.633114,41.945188]},"n2538":{"id":"n2538","loc":[-85.633078,41.945127]},"n2539":{"id":"n2539","loc":[-85.633066,41.94508]},"n254":{"id":"n254","loc":[-85.636732,41.941509]},"n2540":{"id":"n2540","loc":[-85.633222,41.945358]},"n2541":{"id":"n2541","loc":[-85.633425,41.945541]},"n2542":{"id":"n2542","loc":[-85.63299,41.9455]},"n2543":{"id":"n2543","loc":[-85.634374,41.944327]},"n2544":{"id":"n2544","loc":[-85.633648,41.943697]},"n2545":{"id":"n2545","loc":[-85.633533,41.943764]},"n2546":{"id":"n2546","loc":[-85.634239,41.944417]},"n2547":{"id":"n2547","loc":[-85.634122,41.944395]},"n2548":{"id":"n2548","loc":[-85.634235,41.944326]},"n2549":{"id":"n2549","loc":[-85.633613,41.943787]},"n255":{"id":"n255","loc":[-85.636731,41.941461]},"n2550":{"id":"n2550","loc":[-85.633915,41.943613]},"n2551":{"id":"n2551","loc":[-85.634015,41.943555]},"n2552":{"id":"n2552","loc":[-85.63433,41.943839]},"n2553":{"id":"n2553","loc":[-85.634236,41.943894]},"n2554":{"id":"n2554","loc":[-85.635413,41.946052]},"n2555":{"id":"n2555","loc":[-85.635405,41.94569]},"n2556":{"id":"n2556","loc":[-85.635684,41.945925]},"n2557":{"id":"n2557","loc":[-85.635614,41.945742]},"n2558":{"id":"n2558","loc":[-85.635401,41.945745]},"n2559":{"id":"n2559","loc":[-85.635406,41.945928]},"n256":{"id":"n256","loc":[-85.636799,41.941461]},"n2560":{"id":"n2560","loc":[-85.633478,41.943663]},"n2561":{"id":"n2561","loc":[-85.633291,41.943526]},"n2562":{"id":"n2562","loc":[-85.633094,41.943541]},"n2563":{"id":"n2563","loc":[-85.633302,41.943492]},"n2564":{"id":"n2564","loc":[-85.633047,41.943623]},"n2565":{"id":"n2565","loc":[-85.633275,41.943562]},"n2566":{"id":"n2566","loc":[-85.633351,41.943518]},"n2567":{"id":"n2567","loc":[-85.633224,41.9434]},"n2568":{"id":"n2568","loc":[-85.633235,41.943369]},"n2569":{"id":"n2569","loc":[-85.635179,41.943911]},"n257":{"id":"n257","loc":[-85.6368,41.9415]},"n2570":{"id":"n2570","loc":[-85.635146,41.943918]},"n2571":{"id":"n2571","loc":[-85.634888,41.943905]},"n2572":{"id":"n2572","loc":[-85.634832,41.943911]},"n2573":{"id":"n2573","loc":[-85.634638,41.944007]},"n2574":{"id":"n2574","loc":[-85.634568,41.94405]},"n2575":{"id":"n2575","loc":[-85.635994,41.94501]},"n2576":{"id":"n2576","loc":[-85.636388,41.944608]},"n2577":{"id":"n2577","loc":[-85.636215,41.944787]},"n2578":{"id":"n2578","loc":[-85.637948,41.944587]},"n2579":{"id":"n2579","loc":[-85.637849,41.944567]},"n258":{"id":"n258","loc":[-85.636814,41.9415]},"n2580":{"id":"n2580","loc":[-85.637895,41.944455]},"n2581":{"id":"n2581","loc":[-85.637996,41.944477]},"n2582":{"id":"n2582","loc":[-85.635525,41.94337]},"n2583":{"id":"n2583","loc":[-85.637847,41.943923]},"n2584":{"id":"n2584","loc":[-85.637891,41.944124]},"n2585":{"id":"n2585","loc":[-85.638167,41.944229]},"n2586":{"id":"n2586","loc":[-85.638236,41.944097]},"n2587":{"id":"n2587","loc":[-85.638207,41.944025]},"n2588":{"id":"n2588","loc":[-85.638141,41.943997]},"n2589":{"id":"n2589","loc":[-85.638057,41.944015]},"n259":{"id":"n259","loc":[-85.636815,41.941538]},"n2590":{"id":"n2590","loc":[-85.637902,41.944231]},"n2591":{"id":"n2591","loc":[-85.638134,41.944307]},"n2592":{"id":"n2592","loc":[-85.638242,41.944294]},"n2593":{"id":"n2593","loc":[-85.638274,41.944222]},"n2594":{"id":"n2594","loc":[-85.638236,41.944174]},"n2595":{"id":"n2595","loc":[-85.638207,41.944157]},"n2596":{"id":"n2596","loc":[-85.637818,41.943984]},"n2597":{"id":"n2597","loc":[-85.634996,41.944439]},"n2598":{"id":"n2598","loc":[-85.633946,41.945804]},"n2599":{"id":"n2599","loc":[-85.634102,41.945864]},"n26":{"id":"n26","loc":[-85.634346,41.942744]},"n260":{"id":"n260","loc":[-85.636827,41.941538]},"n2600":{"id":"n2600","loc":[-85.633819,41.945756]},"n2601":{"id":"n2601","loc":[-85.634025,41.945975]},"n2602":{"id":"n2602","loc":[-85.633742,41.945867]},"n2603":{"id":"n2603","loc":[-85.63373,41.946004]},"n2604":{"id":"n2604","loc":[-85.633947,41.946081]},"n2605":{"id":"n2605","loc":[-85.633872,41.945917]},"n2606":{"id":"n2606","loc":[-85.633825,41.945985]},"n2607":{"id":"n2607","loc":[-85.633762,41.94596]},"n2608":{"id":"n2608","loc":[-85.634224,41.946037]},"n2609":{"id":"n2609","loc":[-85.634357,41.945851]},"n261":{"id":"n261","loc":[-85.636828,41.941584]},"n2610":{"id":"n2610","loc":[-85.634398,41.945813]},"n2611":{"id":"n2611","loc":[-85.634461,41.945812]},"n2612":{"id":"n2612","loc":[-85.634501,41.945852]},"n2613":{"id":"n2613","loc":[-85.634503,41.94597]},"n2614":{"id":"n2614","loc":[-85.634462,41.945971]},"n2615":{"id":"n2615","loc":[-85.634465,41.946036]},"n2616":{"id":"n2616","loc":[-85.634235,41.946072]},"n2617":{"id":"n2617","loc":[-85.634447,41.946036]},"n2618":{"id":"n2618","loc":[-85.634448,41.946052]},"n2619":{"id":"n2619","loc":[-85.634494,41.946051]},"n262":{"id":"n262","loc":[-85.636819,41.941585]},"n2620":{"id":"n2620","loc":[-85.634497,41.946144]},"n2621":{"id":"n2621","loc":[-85.634453,41.946144]},"n2622":{"id":"n2622","loc":[-85.634454,41.94616]},"n2623":{"id":"n2623","loc":[-85.634393,41.946161]},"n2624":{"id":"n2624","loc":[-85.634394,41.94618]},"n2625":{"id":"n2625","loc":[-85.634345,41.94618]},"n2626":{"id":"n2626","loc":[-85.634344,41.946162]},"n2627":{"id":"n2627","loc":[-85.63427,41.946163]},"n2628":{"id":"n2628","loc":[-85.634266,41.946071]},"n2629":{"id":"n2629","loc":[-85.634148,41.946163]},"n263":{"id":"n263","loc":[-85.636854,41.941714]},"n2630":{"id":"n2630","loc":[-85.634213,41.946072]},"n2631":{"id":"n2631","loc":[-85.633293,41.946309]},"n2632":{"id":"n2632","loc":[-85.633122,41.946239]},"n2633":{"id":"n2633","loc":[-85.633295,41.946005]},"n2634":{"id":"n2634","loc":[-85.633395,41.946047]},"n2635":{"id":"n2635","loc":[-85.633404,41.946035]},"n2636":{"id":"n2636","loc":[-85.633459,41.946057]},"n2637":{"id":"n2637","loc":[-85.633387,41.946154]},"n2638":{"id":"n2638","loc":[-85.633403,41.946161]},"n2639":{"id":"n2639","loc":[-85.634176,41.946415]},"n264":{"id":"n264","loc":[-85.636855,41.941774]},"n2640":{"id":"n2640","loc":[-85.634179,41.946339]},"n2641":{"id":"n2641","loc":[-85.634455,41.946345]},"n2642":{"id":"n2642","loc":[-85.634452,41.946422]},"n2643":{"id":"n2643","loc":[-85.63437,41.946421]},"n2644":{"id":"n2644","loc":[-85.634367,41.946497]},"n2645":{"id":"n2645","loc":[-85.634289,41.946495]},"n2646":{"id":"n2646","loc":[-85.634291,41.946448]},"n2647":{"id":"n2647","loc":[-85.634269,41.946448]},"n2648":{"id":"n2648","loc":[-85.63427,41.946417]},"n2649":{"id":"n2649","loc":[-85.63484,41.946328]},"n265":{"id":"n265","loc":[-85.636822,41.941774]},"n2650":{"id":"n2650","loc":[-85.634839,41.946187]},"n2651":{"id":"n2651","loc":[-85.635148,41.946186]},"n2652":{"id":"n2652","loc":[-85.635148,41.946216]},"n2653":{"id":"n2653","loc":[-85.63521,41.946216]},"n2654":{"id":"n2654","loc":[-85.63521,41.946348]},"n2655":{"id":"n2655","loc":[-85.635154,41.946348]},"n2656":{"id":"n2656","loc":[-85.635153,41.946327]},"n2657":{"id":"n2657","loc":[-85.634037,41.946957]},"n2658":{"id":"n2658","loc":[-85.634253,41.946953]},"n2659":{"id":"n2659","loc":[-85.63481,41.946543]},"n266":{"id":"n266","loc":[-85.636822,41.941778]},"n2660":{"id":"n2660","loc":[-85.634809,41.946459]},"n2661":{"id":"n2661","loc":[-85.635154,41.946458]},"n2662":{"id":"n2662","loc":[-85.635155,41.946554]},"n2663":{"id":"n2663","loc":[-85.635022,41.946547]},"n2664":{"id":"n2664","loc":[-85.635022,41.946573]},"n2665":{"id":"n2665","loc":[-85.634909,41.946574]},"n2666":{"id":"n2666","loc":[-85.634909,41.946561]},"n2667":{"id":"n2667","loc":[-85.634896,41.947159]},"n2668":{"id":"n2668","loc":[-85.634894,41.947032]},"n2669":{"id":"n2669","loc":[-85.635024,41.947031]},"n267":{"id":"n267","loc":[-85.636756,41.941779]},"n2670":{"id":"n2670","loc":[-85.635026,41.947158]},"n2671":{"id":"n2671","loc":[-85.635233,41.947105]},"n2672":{"id":"n2672","loc":[-85.635236,41.946991]},"n2673":{"id":"n2673","loc":[-85.635369,41.946993]},"n2674":{"id":"n2674","loc":[-85.635366,41.947107]},"n2675":{"id":"n2675","loc":[-85.634824,41.946929]},"n2676":{"id":"n2676","loc":[-85.634825,41.946818]},"n2677":{"id":"n2677","loc":[-85.63512,41.946819]},"n2678":{"id":"n2678","loc":[-85.635119,41.94693]},"n2679":{"id":"n2679","loc":[-85.634796,41.946806]},"n268":{"id":"n268","loc":[-85.636756,41.941774]},"n2680":{"id":"n2680","loc":[-85.634792,41.946604]},"n2681":{"id":"n2681","loc":[-85.634948,41.946602]},"n2682":{"id":"n2682","loc":[-85.634949,41.946645]},"n2683":{"id":"n2683","loc":[-85.634975,41.946644]},"n2684":{"id":"n2684","loc":[-85.634974,41.946599]},"n2685":{"id":"n2685","loc":[-85.635117,41.946598]},"n2686":{"id":"n2686","loc":[-85.635122,41.946801]},"n2687":{"id":"n2687","loc":[-85.634981,41.946803]},"n2688":{"id":"n2688","loc":[-85.634979,41.946752]},"n2689":{"id":"n2689","loc":[-85.634952,41.946752]},"n269":{"id":"n269","loc":[-85.636721,41.941774]},"n2690":{"id":"n2690","loc":[-85.634953,41.946804]},"n2691":{"id":"n2691","loc":[-85.634649,41.946841]},"n2692":{"id":"n2692","loc":[-85.634331,41.94684]},"n2693":{"id":"n2693","loc":[-85.634183,41.946809]},"n2694":{"id":"n2694","loc":[-85.633699,41.946607]},"n2695":{"id":"n2695","loc":[-85.634487,41.946664]},"n2696":{"id":"n2696","loc":[-85.634486,41.946598]},"n2697":{"id":"n2697","loc":[-85.63423,41.946599]},"n2698":{"id":"n2698","loc":[-85.634231,41.946662]},"n2699":{"id":"n2699","loc":[-85.634284,41.946662]},"n27":{"id":"n27","loc":[-85.634136,41.943183]},"n270":{"id":"n270","loc":[-85.63672,41.941714]},"n2700":{"id":"n2700","loc":[-85.634284,41.946679]},"n2701":{"id":"n2701","loc":[-85.634365,41.946679]},"n2702":{"id":"n2702","loc":[-85.634365,41.946664]},"n2703":{"id":"n2703","loc":[-85.635443,41.947015]},"n2704":{"id":"n2704","loc":[-85.635442,41.946801]},"n2705":{"id":"n2705","loc":[-85.63603,41.9468]},"n2706":{"id":"n2706","loc":[-85.636028,41.947016]},"n2707":{"id":"n2707","loc":[-85.635457,41.946582]},"n2708":{"id":"n2708","loc":[-85.635455,41.946211]},"n2709":{"id":"n2709","loc":[-85.635636,41.946579]},"n271":{"id":"n271","loc":[-85.636767,41.941713]},"n2710":{"id":"n2710","loc":[-85.635716,41.9468]},"n2711":{"id":"n2711","loc":[-85.635969,41.9468]},"n2712":{"id":"n2712","loc":[-85.635973,41.946295]},"n2713":{"id":"n2713","loc":[-85.636019,41.946484]},"n2714":{"id":"n2714","loc":[-85.636022,41.946388]},"n2715":{"id":"n2715","loc":[-85.635961,41.946493]},"n2716":{"id":"n2716","loc":[-85.635713,41.94621]},"n2717":{"id":"n2717","loc":[-85.635416,41.946142]},"n2718":{"id":"n2718","loc":[-85.635759,41.946203]},"n2719":{"id":"n2719","loc":[-85.636153,41.946747]},"n272":{"id":"n272","loc":[-85.636767,41.941706]},"n2720":{"id":"n2720","loc":[-85.635417,41.946915]},"n2721":{"id":"n2721","loc":[-85.636154,41.946915]},"n2722":{"id":"n2722","loc":[-85.635866,41.946473]},"n2723":{"id":"n2723","loc":[-85.635717,41.946633]},"n2724":{"id":"n2724","loc":[-85.635556,41.946166]},"n2725":{"id":"n2725","loc":[-85.63556,41.946556]},"n2726":{"id":"n2726","loc":[-85.635731,41.946594]},"n2727":{"id":"n2727","loc":[-85.635866,41.946595]},"n2728":{"id":"n2728","loc":[-85.635456,41.947028]},"n2729":{"id":"n2729","loc":[-85.635796,41.947023]},"n273":{"id":"n273","loc":[-85.636779,41.941698]},"n2730":{"id":"n2730","loc":[-85.635798,41.947091]},"n2731":{"id":"n2731","loc":[-85.63573,41.947092]},"n2732":{"id":"n2732","loc":[-85.635733,41.947233]},"n2733":{"id":"n2733","loc":[-85.636283,41.946863]},"n2734":{"id":"n2734","loc":[-85.63628,41.946706]},"n2735":{"id":"n2735","loc":[-85.636341,41.946705]},"n2736":{"id":"n2736","loc":[-85.636273,41.946584]},"n2737":{"id":"n2737","loc":[-85.636396,41.946545]},"n2738":{"id":"n2738","loc":[-85.636474,41.946684]},"n2739":{"id":"n2739","loc":[-85.636511,41.946861]},"n274":{"id":"n274","loc":[-85.636798,41.941697]},"n2740":{"id":"n2740","loc":[-85.633713,41.947184]},"n2741":{"id":"n2741","loc":[-85.633651,41.94716]},"n2742":{"id":"n2742","loc":[-85.633704,41.947085]},"n2743":{"id":"n2743","loc":[-85.6336,41.947044]},"n2744":{"id":"n2744","loc":[-85.633506,41.947177]},"n2745":{"id":"n2745","loc":[-85.629586,41.952469]},"n2746":{"id":"n2746","loc":[-85.634723,41.953681]},"n2747":{"id":"n2747","loc":[-85.63478,41.959007]},"n2748":{"id":"n2748","loc":[-85.632793,41.94405],"tags":{"highway":"traffic_signals","traffic_signals":"signal","traffic_signals:direction":"both"}},"n2749":{"id":"n2749","loc":[-85.634648,41.947325]},"n275":{"id":"n275","loc":[-85.63681,41.941705]},"n2750":{"id":"n2750","loc":[-85.625078,41.952097]},"n2751":{"id":"n2751","loc":[-85.633195,41.94734]},"n2752":{"id":"n2752","loc":[-85.626447,41.957168]},"n2753":{"id":"n2753","loc":[-85.632023,41.949012]},"n2754":{"id":"n2754","loc":[-85.630835,41.950656]},"n2755":{"id":"n2755","loc":[-85.634655,41.948612]},"n2756":{"id":"n2756","loc":[-85.636182,41.948605]},"n2757":{"id":"n2757","loc":[-85.634729,41.954667]},"n2758":{"id":"n2758","loc":[-85.634686,41.951159]},"n2759":{"id":"n2759","loc":[-85.636206,41.951146]},"n276":{"id":"n276","loc":[-85.63681,41.941714]},"n2760":{"id":"n2760","loc":[-85.634668,41.949891]},"n2761":{"id":"n2761","loc":[-85.634701,41.952422]},"n2762":{"id":"n2762","loc":[-85.634747,41.955907]},"n2763":{"id":"n2763","loc":[-85.627975,41.954695]},"n2764":{"id":"n2764","loc":[-85.626832,41.954698]},"n2765":{"id":"n2765","loc":[-85.632278,41.948624]},"n2766":{"id":"n2766","loc":[-85.628639,41.953725]},"n2767":{"id":"n2767","loc":[-85.636233,41.95241]},"n2768":{"id":"n2768","loc":[-85.631385,41.949913]},"n2769":{"id":"n2769","loc":[-85.630486,41.951194]},"n277":{"id":"n277","loc":[-85.636861,41.942041]},"n2770":{"id":"n2770","loc":[-85.624937,41.952088]},"n2771":{"id":"n2771","loc":[-85.624945,41.952022]},"n2772":{"id":"n2772","loc":[-85.636162,41.94731]},"n2773":{"id":"n2773","loc":[-85.636188,41.949881]},"n2774":{"id":"n2774","loc":[-85.631422,41.948294]},"n2775":{"id":"n2775","loc":[-85.632844,41.945547]},"n2776":{"id":"n2776","loc":[-85.632484,41.945344]},"n2777":{"id":"n2777","loc":[-85.631775,41.944636]},"n2778":{"id":"n2778","loc":[-85.632656,41.945471]},"n2779":{"id":"n2779","loc":[-85.631959,41.944827]},"n278":{"id":"n278","loc":[-85.636862,41.942099]},"n2780":{"id":"n2780","loc":[-85.631679,41.94438]},"n2781":{"id":"n2781","loc":[-85.625129,41.959272]},"n2782":{"id":"n2782","loc":[-85.632446,41.944861]},"n2783":{"id":"n2783","loc":[-85.632804,41.945477]},"n2784":{"id":"n2784","loc":[-85.632255,41.944962]},"n2785":{"id":"n2785","loc":[-85.632736,41.944757]},"n2786":{"id":"n2786","loc":[-85.632543,41.94486]},"n2787":{"id":"n2787","loc":[-85.632889,41.945561]},"n2788":{"id":"n2788","loc":[-85.632091,41.944949]},"n2789":{"id":"n2789","loc":[-85.632537,41.944713]},"n279":{"id":"n279","loc":[-85.636807,41.942099]},"n2790":{"id":"n2790","loc":[-85.632279,41.94485]},"n2791":{"id":"n2791","loc":[-85.632749,41.943247]},"n2792":{"id":"n2792","loc":[-85.632824,41.943152]},"n2793":{"id":"n2793","loc":[-85.632929,41.94317]},"n2794":{"id":"n2794","loc":[-85.632897,41.943078]},"n2795":{"id":"n2795","loc":[-85.632626,41.943231]},"n2796":{"id":"n2796","loc":[-85.634048,41.947257]},"n2797":{"id":"n2797","loc":[-85.634264,41.947252]},"n2798":{"id":"n2798","loc":[-85.635418,41.947317]},"n2799":{"id":"n2799","loc":[-85.635461,41.947237]},"n28":{"id":"n28","loc":[-85.63821,41.944308]},"n280":{"id":"n280","loc":[-85.636807,41.942126]},"n2800":{"id":"n2800","loc":[-85.632868,41.946229]},"n2801":{"id":"n2801","loc":[-85.633673,41.947242]},"n2802":{"id":"n2802","loc":[-85.623604,41.945881],"tags":{"amenity":"school","name":"Barrows School"}},"n2803":{"id":"n2803","loc":[-85.627401,41.943496]},"n2804":{"id":"n2804","loc":[-85.627403,41.943625]},"n2805":{"id":"n2805","loc":[-85.626409,41.943215]},"n2806":{"id":"n2806","loc":[-85.624884,41.943508]},"n2807":{"id":"n2807","loc":[-85.625191,41.943509]},"n2808":{"id":"n2808","loc":[-85.624882,41.94382]},"n2809":{"id":"n2809","loc":[-85.624893,41.945618]},"n281":{"id":"n281","loc":[-85.636726,41.942126]},"n2810":{"id":"n2810","loc":[-85.624912,41.946524]},"n2811":{"id":"n2811","loc":[-85.622721,41.946535]},"n2812":{"id":"n2812","loc":[-85.627399,41.94469]},"n2813":{"id":"n2813","loc":[-85.622716,41.945622]},"n2814":{"id":"n2814","loc":[-85.624886,41.944724]},"n2815":{"id":"n2815","loc":[-85.622674,41.944737]},"n2816":{"id":"n2816","loc":[-85.625092,41.945063]},"n2817":{"id":"n2817","loc":[-85.625233,41.945064]},"n2818":{"id":"n2818","loc":[-85.625229,41.944871]},"n2819":{"id":"n2819","loc":[-85.625066,41.944871]},"n282":{"id":"n282","loc":[-85.636726,41.942098]},"n2820":{"id":"n2820","loc":[-85.625024,41.944901]},"n2821":{"id":"n2821","loc":[-85.625025,41.944924]},"n2822":{"id":"n2822","loc":[-85.625087,41.944926]},"n2823":{"id":"n2823","loc":[-85.625349,41.944506]},"n2824":{"id":"n2824","loc":[-85.625347,41.944388]},"n2825":{"id":"n2825","loc":[-85.625152,41.94439]},"n2826":{"id":"n2826","loc":[-85.625152,41.944431]},"n2827":{"id":"n2827","loc":[-85.625134,41.944431]},"n2828":{"id":"n2828","loc":[-85.625136,41.944508]},"n2829":{"id":"n2829","loc":[-85.623236,41.946341]},"n283":{"id":"n283","loc":[-85.636708,41.942098]},"n2830":{"id":"n2830","loc":[-85.623241,41.946067]},"n2831":{"id":"n2831","loc":[-85.623207,41.946067]},"n2832":{"id":"n2832","loc":[-85.623212,41.945827]},"n2833":{"id":"n2833","loc":[-85.622981,41.945825]},"n2834":{"id":"n2834","loc":[-85.622976,41.946063]},"n2835":{"id":"n2835","loc":[-85.623006,41.946063]},"n2836":{"id":"n2836","loc":[-85.623002,41.946256]},"n2837":{"id":"n2837","loc":[-85.623075,41.946256]},"n2838":{"id":"n2838","loc":[-85.623074,41.946339]},"n2839":{"id":"n2839","loc":[-85.624574,41.951755]},"n284":{"id":"n284","loc":[-85.636708,41.942041]},"n2840":{"id":"n2840","loc":[-85.62498,41.951844]},"n2841":{"id":"n2841","loc":[-85.625086,41.95188]},"n2842":{"id":"n2842","loc":[-85.625135,41.951922]},"n2843":{"id":"n2843","loc":[-85.615273,41.945637]},"n2844":{"id":"n2844","loc":[-85.620172,41.945627]},"n2845":{"id":"n2845","loc":[-85.625167,41.951985]},"n2846":{"id":"n2846","loc":[-85.622741,41.947437]},"n2847":{"id":"n2847","loc":[-85.624907,41.947428]},"n2848":{"id":"n2848","loc":[-85.627046,41.940995]},"n2849":{"id":"n2849","loc":[-85.627295,41.941304]},"n285":{"id":"n285","loc":[-85.635618,41.941852]},"n2850":{"id":"n2850","loc":[-85.627352,41.94148]},"n2851":{"id":"n2851","loc":[-85.62737,41.942261]},"n2852":{"id":"n2852","loc":[-85.6264,41.942263]},"n2853":{"id":"n2853","loc":[-85.622769,41.949228]},"n2854":{"id":"n2854","loc":[-85.624937,41.949218]},"n2855":{"id":"n2855","loc":[-85.630001,41.944664]},"n2856":{"id":"n2856","loc":[-85.624873,41.942022]},"n2857":{"id":"n2857","loc":[-85.622761,41.948333]},"n2858":{"id":"n2858","loc":[-85.624924,41.948334]},"n2859":{"id":"n2859","loc":[-85.620051,41.94383]},"n286":{"id":"n286","loc":[-85.635621,41.94202]},"n2860":{"id":"n2860","loc":[-85.627629,41.946498]},"n2861":{"id":"n2861","loc":[-85.622757,41.950111]},"n2862":{"id":"n2862","loc":[-85.623685,41.954624]},"n2863":{"id":"n2863","loc":[-85.621459,41.944756]},"n2864":{"id":"n2864","loc":[-85.628637,41.944676]},"n2865":{"id":"n2865","loc":[-85.630125,41.944654]},"n2866":{"id":"n2866","loc":[-85.625196,41.952097]},"n2867":{"id":"n2867","loc":[-85.630257,41.944637]},"n2868":{"id":"n2868","loc":[-85.631247,41.944459]},"n2869":{"id":"n2869","loc":[-85.624867,41.94159]},"n287":{"id":"n287","loc":[-85.63524,41.942023]},"n2870":{"id":"n2870","loc":[-85.624958,41.950343]},"n2871":{"id":"n2871","loc":[-85.624948,41.950484]},"n2872":{"id":"n2872","loc":[-85.624813,41.950983]},"n2873":{"id":"n2873","loc":[-85.624723,41.951789]},"n2874":{"id":"n2874","loc":[-85.624262,41.9512]},"n2875":{"id":"n2875","loc":[-85.62414,41.951201]},"n2876":{"id":"n2876","loc":[-85.624139,41.95112]},"n2877":{"id":"n2877","loc":[-85.628481,41.945611]},"n2878":{"id":"n2878","loc":[-85.620072,41.946538]},"n2879":{"id":"n2879","loc":[-85.622763,41.95099]},"n288":{"id":"n288","loc":[-85.635237,41.941855]},"n2880":{"id":"n2880","loc":[-85.62814,41.946963]},"n2881":{"id":"n2881","loc":[-85.628245,41.947031]},"n2882":{"id":"n2882","loc":[-85.628331,41.947066]},"n2883":{"id":"n2883","loc":[-85.629722,41.944444],"tags":{"leisure":"park","name":"Scouter Park"}},"n2884":{"id":"n2884","loc":[-85.629977,41.943907]},"n2885":{"id":"n2885","loc":[-85.629947,41.943775]},"n2886":{"id":"n2886","loc":[-85.629899,41.943625]},"n2887":{"id":"n2887","loc":[-85.632286,41.944257]},"n2888":{"id":"n2888","loc":[-85.632523,41.944179]},"n2889":{"id":"n2889","loc":[-85.632141,41.944293]},"n289":{"id":"n289","loc":[-85.635568,41.940475]},"n2890":{"id":"n2890","loc":[-85.631571,41.9444]},"n2891":{"id":"n2891","loc":[-85.643236,41.941895]},"n2892":{"id":"n2892","loc":[-85.62865,41.945353]},"n2893":{"id":"n2893","loc":[-85.628594,41.945481]},"n2894":{"id":"n2894","loc":[-85.628581,41.947169]},"n2895":{"id":"n2895","loc":[-85.631843,41.943793]},"n2896":{"id":"n2896","loc":[-85.632299,41.943472]},"n2897":{"id":"n2897","loc":[-85.631519,41.944881]},"n2898":{"id":"n2898","loc":[-85.628429,41.947219]},"n2899":{"id":"n2899","loc":[-85.63145,41.945162]},"n29":{"id":"n29","loc":[-85.637963,41.944263]},"n290":{"id":"n290","loc":[-85.634584,41.940477]},"n2900":{"id":"n2900","loc":[-85.630939,41.945519]},"n2901":{"id":"n2901","loc":[-85.62903,41.945719]},"n2902":{"id":"n2902","loc":[-85.630521,41.945559]},"n2903":{"id":"n2903","loc":[-85.629294,41.945585]},"n2904":{"id":"n2904","loc":[-85.629845,41.945543]},"n2905":{"id":"n2905","loc":[-85.631497,41.944625]},"n2906":{"id":"n2906","loc":[-85.630281,41.945553]},"n2907":{"id":"n2907","loc":[-85.628553,41.946973]},"n2908":{"id":"n2908","loc":[-85.631383,41.945338]},"n2909":{"id":"n2909","loc":[-85.628843,41.946103]},"n291":{"id":"n291","loc":[-85.634583,41.940203]},"n2910":{"id":"n2910","loc":[-85.631193,41.945473]},"n2911":{"id":"n2911","loc":[-85.628897,41.945944]},"n2912":{"id":"n2912","loc":[-85.628789,41.946454]},"n2913":{"id":"n2913","loc":[-85.632548,41.944563]},"n2914":{"id":"n2914","loc":[-85.627527,41.944555]},"n2915":{"id":"n2915","loc":[-85.62752,41.943726]},"n2916":{"id":"n2916","loc":[-85.627894,41.943723]},"n2917":{"id":"n2917","loc":[-85.627897,41.943919]},"n2918":{"id":"n2918","loc":[-85.627991,41.943934]},"n2919":{"id":"n2919","loc":[-85.628082,41.943966]},"n292":{"id":"n292","loc":[-85.635567,41.940201]},"n2920":{"id":"n2920","loc":[-85.628177,41.944015]},"n2921":{"id":"n2921","loc":[-85.628193,41.944048]},"n2922":{"id":"n2922","loc":[-85.628167,41.944054]},"n2923":{"id":"n2923","loc":[-85.628193,41.944094]},"n2924":{"id":"n2924","loc":[-85.628213,41.944144]},"n2925":{"id":"n2925","loc":[-85.628214,41.944199]},"n2926":{"id":"n2926","loc":[-85.62833,41.944196]},"n2927":{"id":"n2927","loc":[-85.628328,41.944262]},"n2928":{"id":"n2928","loc":[-85.628173,41.944262]},"n2929":{"id":"n2929","loc":[-85.628171,41.944293]},"n293":{"id":"n293","loc":[-85.635816,41.942673],"tags":{"crossing":"zebra","highway":"crossing"}},"n2930":{"id":"n2930","loc":[-85.628039,41.944296]},"n2931":{"id":"n2931","loc":[-85.62804,41.944329]},"n2932":{"id":"n2932","loc":[-85.627829,41.944335]},"n2933":{"id":"n2933","loc":[-85.627835,41.94455]},"n2936":{"id":"n2936","loc":[-85.632823,41.945994]},"n294":{"id":"n294","loc":[-85.635696,41.942712]},"n2940":{"id":"n2940","loc":[-85.632192,41.945973]},"n2941":{"id":"n2941","loc":[-85.63226,41.94587]},"n2942":{"id":"n2942","loc":[-85.632721,41.946036]},"n2943":{"id":"n2943","loc":[-85.632641,41.946142]},"n2944":{"id":"n2944","loc":[-85.62937,41.947467]},"n2945":{"id":"n2945","loc":[-85.62959,41.942936]},"n2946":{"id":"n2946","loc":[-85.629551,41.94284]},"n2947":{"id":"n2947","loc":[-85.629501,41.942704]},"n2948":{"id":"n2948","loc":[-85.629472,41.942578]},"n2949":{"id":"n2949","loc":[-85.629361,41.941801]},"n295":{"id":"n295","loc":[-85.635679,41.941962]},"n2950":{"id":"n2950","loc":[-85.629339,41.941716]},"n2951":{"id":"n2951","loc":[-85.629315,41.94166]},"n2952":{"id":"n2952","loc":[-85.629279,41.941602]},"n2953":{"id":"n2953","loc":[-85.629227,41.941556]},"n2954":{"id":"n2954","loc":[-85.624261,41.95112]},"n2955":{"id":"n2955","loc":[-85.629153,41.941524]},"n2956":{"id":"n2956","loc":[-85.626904,41.941098]},"n2957":{"id":"n2957","loc":[-85.624588,41.951294]},"n2958":{"id":"n2958","loc":[-85.631844,41.942945]},"n2959":{"id":"n2959","loc":[-85.625854,41.949222]},"n296":{"id":"n296","loc":[-85.635672,41.941337]},"n2960":{"id":"n2960","loc":[-85.625146,41.955238]},"n2961":{"id":"n2961","loc":[-85.626745,41.948296]},"n2962":{"id":"n2962","loc":[-85.625721,41.95524]},"n2963":{"id":"n2963","loc":[-85.624706,41.952317]},"n2964":{"id":"n2964","loc":[-85.62609,41.956147]},"n2965":{"id":"n2965","loc":[-85.624401,41.954928]},"n2966":{"id":"n2966","loc":[-85.626558,41.955367]},"n2967":{"id":"n2967","loc":[-85.62468,41.955096]},"n2968":{"id":"n2968","loc":[-85.624159,41.953929]},"n2969":{"id":"n2969","loc":[-85.62506,41.951113]},"n297":{"id":"n297","loc":[-85.635658,41.941284]},"n2970":{"id":"n2970","loc":[-85.624942,41.951591]},"n2971":{"id":"n2971","loc":[-85.627399,41.947546]},"n2972":{"id":"n2972","loc":[-85.627695,41.947404]},"n2973":{"id":"n2973","loc":[-85.625925,41.94896]},"n2974":{"id":"n2974","loc":[-85.625725,41.950211]},"n2975":{"id":"n2975","loc":[-85.627008,41.947963]},"n2976":{"id":"n2976","loc":[-85.624373,41.953458]},"n2977":{"id":"n2977","loc":[-85.624137,41.954392]},"n2978":{"id":"n2978","loc":[-85.628257,41.947307]},"n2979":{"id":"n2979","loc":[-85.625281,41.95066]},"n298":{"id":"n298","loc":[-85.635602,41.941166]},"n2980":{"id":"n2980","loc":[-85.625865,41.949804]},"n2981":{"id":"n2981","loc":[-85.626508,41.955932]},"n2982":{"id":"n2982","loc":[-85.626333,41.955216]},"n2983":{"id":"n2983","loc":[-85.626637,41.955676]},"n2984":{"id":"n2984","loc":[-85.624223,41.954599]},"n2985":{"id":"n2985","loc":[-85.626219,41.948671]},"n2986":{"id":"n2986","loc":[-85.624556,41.953043]},"n2987":{"id":"n2987","loc":[-85.625598,41.956302]},"n2988":{"id":"n2988","loc":[-85.624571,41.952971]},"n2989":{"id":"n2989","loc":[-85.627141,41.940727]},"n299":{"id":"n299","loc":[-85.635598,41.941138]},"n2990":{"id":"n2990","loc":[-85.627102,41.939144]},"n2991":{"id":"n2991","loc":[-85.627127,41.940086]},"n2992":{"id":"n2992","loc":[-85.627116,41.940843]},"n2993":{"id":"n2993","loc":[-85.627132,41.9402]},"n2994":{"id":"n2994","loc":[-85.629734,41.940078]},"n2995":{"id":"n2995","loc":[-85.6276,41.937412]},"n2996":{"id":"n2996","loc":[-85.627451,41.937549]},"n2997":{"id":"n2997","loc":[-85.627375,41.937618]},"n2998":{"id":"n2998","loc":[-85.627278,41.937728]},"n2999":{"id":"n2999","loc":[-85.627199,41.937842]},"n3":{"id":"n3","loc":[-85.627345,41.953983]},"n30":{"id":"n30","loc":[-85.637882,41.944205]},"n300":{"id":"n300","loc":[-85.635614,41.941076]},"n3000":{"id":"n3000","loc":[-85.627141,41.937981]},"n3001":{"id":"n3001","loc":[-85.627109,41.938153]},"n3002":{"id":"n3002","loc":[-85.627101,41.938699]},"n3003":{"id":"n3003","loc":[-85.628311,41.942261]},"n3004":{"id":"n3004","loc":[-85.628439,41.940082]},"n3005":{"id":"n3005","loc":[-85.619538,41.942622],"tags":{"leisure":"slipway"}},"n3006":{"id":"n3006","loc":[-85.619872,41.942618]},"n3007":{"id":"n3007","loc":[-85.619755,41.942612]},"n3008":{"id":"n3008","loc":[-85.619647,41.942628]},"n3009":{"id":"n3009","loc":[-85.619415,41.942626]},"n301":{"id":"n301","loc":[-85.635659,41.940956]},"n3010":{"id":"n3010","loc":[-85.619212,41.942623]},"n3011":{"id":"n3011","loc":[-85.631485,41.942472]},"n3012":{"id":"n3012","loc":[-85.630986,41.941786]},"n3013":{"id":"n3013","loc":[-85.631797,41.942006]},"n3014":{"id":"n3014","loc":[-85.630972,41.941162]},"n3015":{"id":"n3015","loc":[-85.631396,41.941611],"tags":{"railway":"level_crossing"}},"n3016":{"id":"n3016","loc":[-85.631878,41.941545]},"n3017":{"id":"n3017","loc":[-85.630461,41.94055]},"n3018":{"id":"n3018","loc":[-85.629751,41.939539],"tags":{"railway":"level_crossing"}},"n3019":{"id":"n3019","loc":[-85.631663,41.941513]},"n302":{"id":"n302","loc":[-85.635666,41.940922]},"n3020":{"id":"n3020","loc":[-85.631328,41.941375]},"n3021":{"id":"n3021","loc":[-85.632554,41.941779]},"n3022":{"id":"n3022","loc":[-85.63245,41.941769]},"n3023":{"id":"n3023","loc":[-85.632475,41.941644]},"n3024":{"id":"n3024","loc":[-85.632581,41.941654]},"n3025":{"id":"n3025","loc":[-85.631957,41.941352]},"n3026":{"id":"n3026","loc":[-85.632293,41.941139]},"n3027":{"id":"n3027","loc":[-85.632315,41.941153]},"n3028":{"id":"n3028","loc":[-85.632302,41.941262]},"n3029":{"id":"n3029","loc":[-85.63237,41.941267]},"n303":{"id":"n303","loc":[-85.635667,41.940877]},"n3030":{"id":"n3030","loc":[-85.632356,41.941538]},"n3031":{"id":"n3031","loc":[-85.632134,41.941678]},"n3032":{"id":"n3032","loc":[-85.631942,41.941687]},"n3033":{"id":"n3033","loc":[-85.63203,41.941694]},"n3034":{"id":"n3034","loc":[-85.632166,41.941555]},"n3035":{"id":"n3035","loc":[-85.632412,41.941416]},"n3036":{"id":"n3036","loc":[-85.63248,41.941342]},"n3037":{"id":"n3037","loc":[-85.632502,41.941259]},"n3038":{"id":"n3038","loc":[-85.632453,41.941161]},"n3039":{"id":"n3039","loc":[-85.63235,41.941103]},"n304":{"id":"n304","loc":[-85.635668,41.940655]},"n3040":{"id":"n3040","loc":[-85.632236,41.941118]},"n3041":{"id":"n3041","loc":[-85.631894,41.941355]},"n3042":{"id":"n3042","loc":[-85.631859,41.941411]},"n3043":{"id":"n3043","loc":[-85.632011,41.941587]},"n3044":{"id":"n3044","loc":[-85.632446,41.941379]},"n3045":{"id":"n3045","loc":[-85.632511,41.941416]},"n3046":{"id":"n3046","loc":[-85.632545,41.941634]},"n3047":{"id":"n3047","loc":[-85.632612,41.94164]},"n3048":{"id":"n3048","loc":[-85.632595,41.942197]},"n3049":{"id":"n3049","loc":[-85.632565,41.942241]},"n305":{"id":"n305","loc":[-85.635628,41.940617]},"n3050":{"id":"n3050","loc":[-85.632515,41.942256]},"n3051":{"id":"n3051","loc":[-85.63245,41.94223]},"n3052":{"id":"n3052","loc":[-85.632401,41.942174]},"n3053":{"id":"n3053","loc":[-85.632391,41.942115]},"n3054":{"id":"n3054","loc":[-85.632029,41.941859]},"n3055":{"id":"n3055","loc":[-85.631828,41.941639]},"n3056":{"id":"n3056","loc":[-85.631829,41.941508]},"n3057":{"id":"n3057","loc":[-85.631281,41.94312]},"n3058":{"id":"n3058","loc":[-85.631421,41.943065]},"n3059":{"id":"n3059","loc":[-85.631339,41.942949]},"n306":{"id":"n306","loc":[-85.635623,41.940272]},"n3060":{"id":"n3060","loc":[-85.631199,41.943004]},"n3061":{"id":"n3061","loc":[-85.631102,41.942931]},"n3062":{"id":"n3062","loc":[-85.631009,41.942809]},"n3063":{"id":"n3063","loc":[-85.631383,41.94265]},"n3064":{"id":"n3064","loc":[-85.631477,41.942773]},"n3065":{"id":"n3065","loc":[-85.630638,41.942809]},"n3066":{"id":"n3066","loc":[-85.630738,41.942943]},"n3067":{"id":"n3067","loc":[-85.630841,41.9429]},"n3068":{"id":"n3068","loc":[-85.630741,41.942766]},"n3069":{"id":"n3069","loc":[-85.63054,41.942603]},"n307":{"id":"n307","loc":[-85.635651,41.940183]},"n3070":{"id":"n3070","loc":[-85.630498,41.942619]},"n3071":{"id":"n3071","loc":[-85.630567,41.942718]},"n3072":{"id":"n3072","loc":[-85.630616,41.942698]},"n3073":{"id":"n3073","loc":[-85.630642,41.94273]},"n3074":{"id":"n3074","loc":[-85.630686,41.942714]},"n3075":{"id":"n3075","loc":[-85.630715,41.942754]},"n3076":{"id":"n3076","loc":[-85.6309,41.942681]},"n3077":{"id":"n3077","loc":[-85.630843,41.942605]},"n3078":{"id":"n3078","loc":[-85.6309,41.942581]},"n3079":{"id":"n3079","loc":[-85.630832,41.942487]},"n308":{"id":"n308","loc":[-85.63577,41.940183],"tags":{"crossing":"zebra","highway":"crossing"}},"n3080":{"id":"n3080","loc":[-85.630773,41.942509]},"n3081":{"id":"n3081","loc":[-85.630718,41.942436]},"n3082":{"id":"n3082","loc":[-85.630485,41.942524]},"n3083":{"id":"n3083","loc":[-85.631468,41.941233]},"n3084":{"id":"n3084","loc":[-85.631334,41.94114]},"n3085":{"id":"n3085","loc":[-85.632052,41.940568]},"n3086":{"id":"n3086","loc":[-85.63219,41.940663]},"n3087":{"id":"n3087","loc":[-85.631323,41.940834]},"n3088":{"id":"n3088","loc":[-85.631122,41.941002]},"n3089":{"id":"n3089","loc":[-85.631321,41.941133]},"n309":{"id":"n309","loc":[-85.636939,41.942544]},"n3090":{"id":"n3090","loc":[-85.631521,41.940966]},"n3091":{"id":"n3091","loc":[-85.631103,41.940253]},"n3092":{"id":"n3092","loc":[-85.631226,41.940211]},"n3093":{"id":"n3093","loc":[-85.631597,41.940805]},"n3094":{"id":"n3094","loc":[-85.631474,41.940847]},"n3095":{"id":"n3095","loc":[-85.631811,41.940534]},"n3096":{"id":"n3096","loc":[-85.631588,41.94061]},"n3097":{"id":"n3097","loc":[-85.631438,41.940366]},"n3098":{"id":"n3098","loc":[-85.631661,41.94029]},"n3099":{"id":"n3099","loc":[-85.630621,41.940041]},"n31":{"id":"n31","loc":[-85.63827,41.944203]},"n310":{"id":"n310","loc":[-85.636323,41.942552]},"n3100":{"id":"n3100","loc":[-85.630436,41.939773]},"n3101":{"id":"n3101","loc":[-85.63059,41.939714]},"n3102":{"id":"n3102","loc":[-85.630775,41.939983]},"n3103":{"id":"n3103","loc":[-85.63047,41.940167]},"n3104":{"id":"n3104","loc":[-85.63013,41.939686]},"n3105":{"id":"n3105","loc":[-85.630302,41.939618]},"n3106":{"id":"n3106","loc":[-85.630641,41.9401]},"n3107":{"id":"n3107","loc":[-85.630966,41.940619]},"n3108":{"id":"n3108","loc":[-85.630874,41.940493]},"n3109":{"id":"n3109","loc":[-85.630933,41.940469]},"n311":{"id":"n311","loc":[-85.636257,41.942555]},"n3110":{"id":"n3110","loc":[-85.630763,41.940236]},"n3111":{"id":"n3111","loc":[-85.63088,41.940189]},"n3112":{"id":"n3112","loc":[-85.631142,41.940548]},"n3113":{"id":"n3113","loc":[-85.630958,41.940871]},"n3114":{"id":"n3114","loc":[-85.630874,41.940778]},"n3115":{"id":"n3115","loc":[-85.631062,41.940684]},"n3116":{"id":"n3116","loc":[-85.631146,41.940777]},"n3117":{"id":"n3117","loc":[-85.632031,41.940575]},"n3118":{"id":"n3118","loc":[-85.631777,41.940186]},"n3119":{"id":"n3119","loc":[-85.631346,41.940179]},"n312":{"id":"n312","loc":[-85.636208,41.942561]},"n3120":{"id":"n3120","loc":[-85.631342,41.94012]},"n3121":{"id":"n3121","loc":[-85.631831,41.940118]},"n3122":{"id":"n3122","loc":[-85.632115,41.940543]},"n3123":{"id":"n3123","loc":[-85.631031,41.941683]},"n3124":{"id":"n3124","loc":[-85.630981,41.941608]},"n3125":{"id":"n3125","loc":[-85.631209,41.941516]},"n3126":{"id":"n3126","loc":[-85.631264,41.941586]},"n3127":{"id":"n3127","loc":[-85.630938,41.94155]},"n3128":{"id":"n3128","loc":[-85.631156,41.941462]},"n3129":{"id":"n3129","loc":[-85.631197,41.94152]},"n313":{"id":"n313","loc":[-85.636159,41.942573]},"n3130":{"id":"n3130","loc":[-85.630895,41.941485]},"n3131":{"id":"n3131","loc":[-85.630824,41.941389]},"n3132":{"id":"n3132","loc":[-85.630986,41.941323]},"n3133":{"id":"n3133","loc":[-85.631057,41.941419]},"n3134":{"id":"n3134","loc":[-85.630777,41.941328]},"n3135":{"id":"n3135","loc":[-85.630907,41.941274]},"n3136":{"id":"n3136","loc":[-85.630953,41.941335]},"n3137":{"id":"n3137","loc":[-85.630797,41.941247]},"n3138":{"id":"n3138","loc":[-85.630701,41.94117]},"n3139":{"id":"n3139","loc":[-85.630829,41.941113]},"n314":{"id":"n314","loc":[-85.635743,41.942881]},"n3140":{"id":"n3140","loc":[-85.6309,41.941201]},"n3141":{"id":"n3141","loc":[-85.630765,41.941206]},"n3142":{"id":"n3142","loc":[-85.630739,41.941218]},"n3143":{"id":"n3143","loc":[-85.630582,41.941039]},"n3144":{"id":"n3144","loc":[-85.630412,41.940818]},"n3145":{"id":"n3145","loc":[-85.630509,41.940777]},"n3146":{"id":"n3146","loc":[-85.630678,41.941004]},"n3147":{"id":"n3147","loc":[-85.630773,41.942166]},"n3148":{"id":"n3148","loc":[-85.630708,41.942074]},"n3149":{"id":"n3149","loc":[-85.630863,41.942013]},"n315":{"id":"n315","loc":[-85.635452,41.942966]},"n3150":{"id":"n3150","loc":[-85.630928,41.942105]},"n3151":{"id":"n3151","loc":[-85.630701,41.942026]},"n3152":{"id":"n3152","loc":[-85.630665,41.941971]},"n3153":{"id":"n3153","loc":[-85.630793,41.941918]},"n3154":{"id":"n3154","loc":[-85.630837,41.94197]},"n3155":{"id":"n3155","loc":[-85.630757,41.941871]},"n3156":{"id":"n3156","loc":[-85.630629,41.941923]},"n3157":{"id":"n3157","loc":[-85.630694,41.941783]},"n3158":{"id":"n3158","loc":[-85.630534,41.941847]},"n3159":{"id":"n3159","loc":[-85.630598,41.941935]},"n316":{"id":"n316","loc":[-85.634911,41.943118]},"n3160":{"id":"n3160","loc":[-85.631548,41.93938]},"n3161":{"id":"n3161","loc":[-85.631525,41.939919]},"n3162":{"id":"n3162","loc":[-85.631648,41.940043]},"n3163":{"id":"n3163","loc":[-85.624586,41.951121]},"n3164":{"id":"n3164","loc":[-85.622139,41.952064]},"n3165":{"id":"n3165","loc":[-85.622141,41.952144]},"n3166":{"id":"n3166","loc":[-85.621977,41.952146]},"n3167":{"id":"n3167","loc":[-85.621978,41.952211]},"n3168":{"id":"n3168","loc":[-85.62191,41.952212]},"n3169":{"id":"n3169","loc":[-85.633628,41.935437]},"n317":{"id":"n317","loc":[-85.634743,41.943167]},"n3170":{"id":"n3170","loc":[-85.632849,41.935518]},"n3171":{"id":"n3171","loc":[-85.632376,41.93574]},"n3172":{"id":"n3172","loc":[-85.631517,41.935897]},"n3173":{"id":"n3173","loc":[-85.630433,41.936124]},"n3174":{"id":"n3174","loc":[-85.630207,41.936427]},"n3175":{"id":"n3175","loc":[-85.630346,41.936795]},"n3176":{"id":"n3176","loc":[-85.62996,41.936974]},"n3177":{"id":"n3177","loc":[-85.629916,41.937488]},"n3178":{"id":"n3178","loc":[-85.629946,41.937802]},"n3179":{"id":"n3179","loc":[-85.629977,41.937905]},"n318":{"id":"n318","loc":[-85.634401,41.94328]},"n3180":{"id":"n3180","loc":[-85.63016,41.937909]},"n3181":{"id":"n3181","loc":[-85.630804,41.937791]},"n3182":{"id":"n3182","loc":[-85.631688,41.937808]},"n3183":{"id":"n3183","loc":[-85.631685,41.938008]},"n3184":{"id":"n3184","loc":[-85.631845,41.938116]},"n3185":{"id":"n3185","loc":[-85.63207,41.938181]},"n3186":{"id":"n3186","loc":[-85.632143,41.938371]},"n3187":{"id":"n3187","loc":[-85.632056,41.938435]},"n3188":{"id":"n3188","loc":[-85.631787,41.938457]},"n3189":{"id":"n3189","loc":[-85.631657,41.938728]},"n319":{"id":"n319","loc":[-85.634345,41.943299]},"n3190":{"id":"n3190","loc":[-85.631595,41.93775]},"n3191":{"id":"n3191","loc":[-85.630264,41.937839]},"n3192":{"id":"n3192","loc":[-85.628591,41.948536]},"n3193":{"id":"n3193","loc":[-85.63205,41.951181]},"n3194":{"id":"n3194","loc":[-85.632034,41.949909]},"n3195":{"id":"n3195","loc":[-85.630841,41.951191]},"n3196":{"id":"n3196","loc":[-85.632083,41.9537]},"n3197":{"id":"n3197","loc":[-85.630929,41.959037]},"n3198":{"id":"n3198","loc":[-85.632151,41.959028]},"n3199":{"id":"n3199","loc":[-85.630911,41.957428]},"n32":{"id":"n32","loc":[-85.638273,41.944246]},"n320":{"id":"n320","loc":[-85.634287,41.943326]},"n3200":{"id":"n3200","loc":[-85.63213,41.957427]},"n3201":{"id":"n3201","loc":[-85.632072,41.952447]},"n3202":{"id":"n3202","loc":[-85.632095,41.954677]},"n3203":{"id":"n3203","loc":[-85.632111,41.955911]},"n3204":{"id":"n3204","loc":[-85.630855,41.952457]},"n3205":{"id":"n3205","loc":[-85.630869,41.953709]},"n3206":{"id":"n3206","loc":[-85.63088,41.954682]},"n3207":{"id":"n3207","loc":[-85.630894,41.955913]},"n3208":{"id":"n3208","loc":[-85.633214,41.948619]},"n3209":{"id":"n3209","loc":[-85.633253,41.951171]},"n321":{"id":"n321","loc":[-85.634233,41.943354]},"n3210":{"id":"n3210","loc":[-85.633234,41.949901]},"n3211":{"id":"n3211","loc":[-85.633922,41.948616]},"n3212":{"id":"n3212","loc":[-85.625188,41.947832]},"n3213":{"id":"n3213","loc":[-85.625208,41.947775]},"n3214":{"id":"n3214","loc":[-85.625229,41.94776]},"n3215":{"id":"n3215","loc":[-85.625201,41.947749]},"n3216":{"id":"n3216","loc":[-85.625168,41.947707]},"n3217":{"id":"n3217","loc":[-85.625171,41.947609]},"n3218":{"id":"n3218","loc":[-85.625213,41.947564]},"n3219":{"id":"n3219","loc":[-85.62529,41.94756]},"n322":{"id":"n322","loc":[-85.634099,41.943429]},"n3220":{"id":"n3220","loc":[-85.625303,41.947533]},"n3221":{"id":"n3221","loc":[-85.625344,41.947482]},"n3222":{"id":"n3222","loc":[-85.625442,41.947468]},"n3223":{"id":"n3223","loc":[-85.62565,41.947494]},"n3224":{"id":"n3224","loc":[-85.625726,41.947613]},"n3225":{"id":"n3225","loc":[-85.625703,41.947728]},"n3226":{"id":"n3226","loc":[-85.625534,41.94781]},"n3227":{"id":"n3227","loc":[-85.625391,41.947822]},"n3228":{"id":"n3228","loc":[-85.625304,41.947859]},"n3229":{"id":"n3229","loc":[-85.625203,41.947885]},"n323":{"id":"n323","loc":[-85.633958,41.943507],"tags":{"highway":"crossing"}},"n3230":{"id":"n3230","loc":[-85.624691,41.948659]},"n3231":{"id":"n3231","loc":[-85.624328,41.948661]},"n3232":{"id":"n3232","loc":[-85.624331,41.949046]},"n3233":{"id":"n3233","loc":[-85.624694,41.949045]},"n3234":{"id":"n3234","loc":[-85.623623,41.949606]},"n3235":{"id":"n3235","loc":[-85.623623,41.9497]},"n3236":{"id":"n3236","loc":[-85.623357,41.9497]},"n3237":{"id":"n3237","loc":[-85.623357,41.949614]},"n3238":{"id":"n3238","loc":[-85.623974,41.949429]},"n3239":{"id":"n3239","loc":[-85.623974,41.949605]},"n324":{"id":"n324","loc":[-85.633698,41.943651],"tags":{"railway":"crossing"}},"n3240":{"id":"n3240","loc":[-85.624501,41.951226]},"n3241":{"id":"n3241","loc":[-85.624501,41.951123]},"n3242":{"id":"n3242","loc":[-85.624319,41.951123]},"n3243":{"id":"n3243","loc":[-85.624319,41.951226]},"n3244":{"id":"n3244","loc":[-85.624121,41.950866]},"n3245":{"id":"n3245","loc":[-85.624115,41.950525]},"n3246":{"id":"n3246","loc":[-85.624315,41.950523]},"n3247":{"id":"n3247","loc":[-85.62432,41.950865]},"n3248":{"id":"n3248","loc":[-85.624393,41.950867]},"n3249":{"id":"n3249","loc":[-85.62439,41.950596]},"n325":{"id":"n325","loc":[-85.633508,41.943757]},"n3250":{"id":"n3250","loc":[-85.624673,41.950594]},"n3251":{"id":"n3251","loc":[-85.624675,41.95082]},"n3252":{"id":"n3252","loc":[-85.62451,41.950821]},"n3253":{"id":"n3253","loc":[-85.62451,41.950866]},"n3254":{"id":"n3254","loc":[-85.624101,41.949346]},"n3255":{"id":"n3255","loc":[-85.624244,41.949346]},"n3256":{"id":"n3256","loc":[-85.624244,41.949368]},"n3257":{"id":"n3257","loc":[-85.62434,41.949368]},"n3258":{"id":"n3258","loc":[-85.624342,41.949351]},"n3259":{"id":"n3259","loc":[-85.624725,41.949348]},"n326":{"id":"n326","loc":[-85.634839,41.942974]},"n3260":{"id":"n3260","loc":[-85.624755,41.950495]},"n3261":{"id":"n3261","loc":[-85.624121,41.950502]},"n3262":{"id":"n3262","loc":[-85.625453,41.950163]},"n3263":{"id":"n3263","loc":[-85.625454,41.949976]},"n3264":{"id":"n3264","loc":[-85.625549,41.949977]},"n3265":{"id":"n3265","loc":[-85.62555,41.949833]},"n3266":{"id":"n3266","loc":[-85.625577,41.949833]},"n3267":{"id":"n3267","loc":[-85.625578,41.949656]},"n3268":{"id":"n3268","loc":[-85.625195,41.949655]},"n3269":{"id":"n3269","loc":[-85.625192,41.950162]},"n327":{"id":"n327","loc":[-85.634657,41.943028]},"n3270":{"id":"n3270","loc":[-85.622992,41.949614]},"n3271":{"id":"n3271","loc":[-85.622991,41.949431]},"n3272":{"id":"n3272","loc":[-85.620103,41.951]},"n3273":{"id":"n3273","loc":[-85.605644,41.947468]},"n3274":{"id":"n3274","loc":[-85.617421,41.947457]},"n3275":{"id":"n3275","loc":[-85.620078,41.947444]},"n3276":{"id":"n3276","loc":[-85.620087,41.94924]},"n3277":{"id":"n3277","loc":[-85.62156,41.948333]},"n3278":{"id":"n3278","loc":[-85.620106,41.950132]},"n3279":{"id":"n3279","loc":[-85.637412,41.951136]},"n328":{"id":"n328","loc":[-85.634222,41.943152]},"n3280":{"id":"n3280","loc":[-85.635429,41.948608]},"n3281":{"id":"n3281","loc":[-85.635047,41.947788]},"n3282":{"id":"n3282","loc":[-85.635048,41.947796]},"n3283":{"id":"n3283","loc":[-85.635002,41.947797]},"n3284":{"id":"n3284","loc":[-85.635002,41.947788]},"n3285":{"id":"n3285","loc":[-85.634914,41.94779]},"n3286":{"id":"n3286","loc":[-85.634913,41.947753]},"n3287":{"id":"n3287","loc":[-85.63494,41.947753]},"n3288":{"id":"n3288","loc":[-85.634938,41.947708]},"n3289":{"id":"n3289","loc":[-85.635124,41.947705]},"n329":{"id":"n329","loc":[-85.634099,41.943202]},"n3290":{"id":"n3290","loc":[-85.635126,41.947787]},"n3291":{"id":"n3291","loc":[-85.634972,41.947599]},"n3292":{"id":"n3292","loc":[-85.634921,41.9476]},"n3293":{"id":"n3293","loc":[-85.63485,41.947546]},"n3294":{"id":"n3294","loc":[-85.63485,41.947508]},"n3295":{"id":"n3295","loc":[-85.634924,41.947457]},"n3296":{"id":"n3296","loc":[-85.634967,41.947456]},"n3297":{"id":"n3297","loc":[-85.635041,41.947512]},"n3298":{"id":"n3298","loc":[-85.635041,41.947542]},"n3299":{"id":"n3299","loc":[-85.634244,41.947839]},"n33":{"id":"n33","loc":[-85.638257,41.944188]},"n330":{"id":"n330","loc":[-85.634093,41.943138]},"n3300":{"id":"n3300","loc":[-85.634243,41.947793]},"n3301":{"id":"n3301","loc":[-85.634244,41.947686]},"n3302":{"id":"n3302","loc":[-85.634243,41.947657]},"n3303":{"id":"n3303","loc":[-85.634462,41.947653]},"n3304":{"id":"n3304","loc":[-85.634468,41.947835]},"n3305":{"id":"n3305","loc":[-85.634416,41.948006]},"n3306":{"id":"n3306","loc":[-85.634415,41.947898]},"n3307":{"id":"n3307","loc":[-85.634275,41.947899]},"n3308":{"id":"n3308","loc":[-85.634275,41.947927]},"n3309":{"id":"n3309","loc":[-85.63425,41.947927]},"n331":{"id":"n331","loc":[-85.633938,41.943291]},"n3310":{"id":"n3310","loc":[-85.63425,41.947976]},"n3311":{"id":"n3311","loc":[-85.634274,41.947976]},"n3312":{"id":"n3312","loc":[-85.634275,41.948007]},"n3313":{"id":"n3313","loc":[-85.634342,41.947635]},"n3314":{"id":"n3314","loc":[-85.634339,41.947497]},"n3315":{"id":"n3315","loc":[-85.634313,41.94748]},"n3316":{"id":"n3316","loc":[-85.634287,41.947474]},"n3317":{"id":"n3317","loc":[-85.63498,41.94815]},"n3318":{"id":"n3318","loc":[-85.634891,41.94815]},"n3319":{"id":"n3319","loc":[-85.634892,41.948169]},"n332":{"id":"n332","loc":[-85.633535,41.943511],"tags":{"railway":"crossing"}},"n3320":{"id":"n3320","loc":[-85.634852,41.948169]},"n3321":{"id":"n3321","loc":[-85.634853,41.948268]},"n3322":{"id":"n3322","loc":[-85.634832,41.948268]},"n3323":{"id":"n3323","loc":[-85.634832,41.948296]},"n3324":{"id":"n3324","loc":[-85.634965,41.948295]},"n3325":{"id":"n3325","loc":[-85.634966,41.948321]},"n3326":{"id":"n3326","loc":[-85.634999,41.948321]},"n3327":{"id":"n3327","loc":[-85.634999,41.948295]},"n3328":{"id":"n3328","loc":[-85.635175,41.948293]},"n3329":{"id":"n3329","loc":[-85.635175,41.948262]},"n333":{"id":"n333","loc":[-85.63339,41.943596]},"n3330":{"id":"n3330","loc":[-85.635159,41.948262]},"n3331":{"id":"n3331","loc":[-85.635158,41.948152]},"n3332":{"id":"n3332","loc":[-85.635067,41.948152]},"n3333":{"id":"n3333","loc":[-85.635065,41.947966]},"n3334":{"id":"n3334","loc":[-85.634979,41.947966]},"n3335":{"id":"n3335","loc":[-85.634307,41.948326]},"n3336":{"id":"n3336","loc":[-85.634305,41.948298]},"n3337":{"id":"n3337","loc":[-85.634331,41.948055]},"n3338":{"id":"n3338","loc":[-85.634331,41.948046]},"n3339":{"id":"n3339","loc":[-85.634435,41.948047]},"n334":{"id":"n334","loc":[-85.632842,41.943895]},"n3340":{"id":"n3340","loc":[-85.634434,41.948375]},"n3341":{"id":"n3341","loc":[-85.634463,41.948373]},"n3342":{"id":"n3342","loc":[-85.634464,41.948456]},"n3343":{"id":"n3343","loc":[-85.63443,41.948457]},"n3344":{"id":"n3344","loc":[-85.634432,41.948505]},"n3345":{"id":"n3345","loc":[-85.637386,41.94906]},"n3346":{"id":"n3346","loc":[-85.637113,41.9486]},"n3347":{"id":"n3347","loc":[-85.635448,41.949424]},"n335":{"id":"n335","loc":[-85.633856,41.943315]},"n3352":{"id":"n3352","loc":[-85.635457,41.949787]},"n3353":{"id":"n3353","loc":[-85.635459,41.949886]},"n336":{"id":"n336","loc":[-85.633697,41.943405]},"n337":{"id":"n337","loc":[-85.63347,41.943181]},"n3372":{"id":"n3372","loc":[-85.634423,41.950964]},"n3373":{"id":"n3373","loc":[-85.634424,41.95074]},"n3374":{"id":"n3374","loc":[-85.634394,41.950284]},"n3375":{"id":"n3375","loc":[-85.634398,41.950626]},"n3376":{"id":"n3376","loc":[-85.63452,41.951063]},"n3377":{"id":"n3377","loc":[-85.634511,41.949977]},"n3378":{"id":"n3378","loc":[-85.637409,41.949873]},"n3379":{"id":"n3379","loc":[-85.634824,41.94996]},"n338":{"id":"n338","loc":[-85.633597,41.943109]},"n3380":{"id":"n3380","loc":[-85.635437,41.949954]},"n3381":{"id":"n3381","loc":[-85.634844,41.951064]},"n3382":{"id":"n3382","loc":[-85.635458,41.951058]},"n3383":{"id":"n3383","loc":[-85.633921,41.947333]},"n3384":{"id":"n3384","loc":[-85.634208,41.947793]},"n3385":{"id":"n3385","loc":[-85.634204,41.947687]},"n3386":{"id":"n3386","loc":[-85.63424,41.947475]},"n3387":{"id":"n3387","loc":[-85.63424,41.947635]},"n3388":{"id":"n3388","loc":[-85.634089,41.948328]},"n3389":{"id":"n3389","loc":[-85.63424,41.948299]},"n339":{"id":"n339","loc":[-85.633673,41.943184]},"n3390":{"id":"n3390","loc":[-85.634239,41.948212]},"n3391":{"id":"n3391","loc":[-85.634086,41.948214]},"n3392":{"id":"n3392","loc":[-85.63408,41.948056]},"n3393":{"id":"n3393","loc":[-85.634093,41.948506]},"n3394":{"id":"n3394","loc":[-85.64344,41.941866]},"n3395":{"id":"n3395","loc":[-85.63378,41.95099]},"n3396":{"id":"n3396","loc":[-85.633779,41.950967]},"n3397":{"id":"n3397","loc":[-85.63375,41.950746]},"n3398":{"id":"n3398","loc":[-85.63375,41.950697]},"n3399":{"id":"n3399","loc":[-85.633903,41.950696]},"n34":{"id":"n34","loc":[-85.638176,41.944312]},"n340":{"id":"n340","loc":[-85.633714,41.94316]},"n3400":{"id":"n3400","loc":[-85.633901,41.950436]},"n3401":{"id":"n3401","loc":[-85.633492,41.950438]},"n3402":{"id":"n3402","loc":[-85.633494,41.950756]},"n3403":{"id":"n3403","loc":[-85.633454,41.950756]},"n3404":{"id":"n3404","loc":[-85.633456,41.950992]},"n3405":{"id":"n3405","loc":[-85.633994,41.950284]},"n3406":{"id":"n3406","loc":[-85.633998,41.950628]},"n3407":{"id":"n3407","loc":[-85.633364,41.951068]},"n3408":{"id":"n3408","loc":[-85.633356,41.949982]},"n3409":{"id":"n3409","loc":[-85.643327,41.941903]},"n341":{"id":"n341","loc":[-85.633811,41.943256]},"n3410":{"id":"n3410","loc":[-85.633292,41.953691]},"n3411":{"id":"n3411","loc":[-85.637432,41.952399]},"n3412":{"id":"n3412","loc":[-85.633349,41.957422]},"n3413":{"id":"n3413","loc":[-85.633326,41.955909]},"n3414":{"id":"n3414","loc":[-85.633307,41.954673]},"n3415":{"id":"n3415","loc":[-85.633273,41.952436]},"n3416":{"id":"n3416","loc":[-85.633361,41.95823],"tags":{"highway":"turning_circle"}},"n3417":{"id":"n3417","loc":[-85.619899,41.945527]},"n3418":{"id":"n3418","loc":[-85.643422,41.941946]},"n3419":{"id":"n3419","loc":[-85.643505,41.942033]},"n342":{"id":"n342","loc":[-85.633801,41.943261]},"n3420":{"id":"n3420","loc":[-85.620088,41.945571]},"n3421":{"id":"n3421","loc":[-85.620051,41.945505]},"n3422":{"id":"n3422","loc":[-85.62001,41.94541]},"n3423":{"id":"n3423","loc":[-85.620982,41.944742]},"n3424":{"id":"n3424","loc":[-85.621305,41.944782]},"n3425":{"id":"n3425","loc":[-85.621174,41.944819]},"n3426":{"id":"n3426","loc":[-85.621029,41.944871]},"n3427":{"id":"n3427","loc":[-85.620741,41.945011]},"n3428":{"id":"n3428","loc":[-85.620616,41.945085]},"n3429":{"id":"n3429","loc":[-85.620506,41.945172]},"n343":{"id":"n343","loc":[-85.63374,41.943514]},"n3430":{"id":"n3430","loc":[-85.620394,41.945273]},"n3431":{"id":"n3431","loc":[-85.620316,41.94536]},"n3432":{"id":"n3432","loc":[-85.620257,41.945452]},"n3433":{"id":"n3433","loc":[-85.620212,41.945535]},"n3434":{"id":"n3434","loc":[-85.620101,41.945811]},"n3435":{"id":"n3435","loc":[-85.620081,41.945937]},"n3436":{"id":"n3436","loc":[-85.619899,41.943718]},"n3437":{"id":"n3437","loc":[-85.619969,41.943211]},"n3438":{"id":"n3438","loc":[-85.619894,41.943292]},"n3439":{"id":"n3439","loc":[-85.620047,41.944738]},"n344":{"id":"n344","loc":[-85.633665,41.943441]},"n3440":{"id":"n3440","loc":[-85.620226,41.946088]},"n3441":{"id":"n3441","loc":[-85.620225,41.945864]},"n3442":{"id":"n3442","loc":[-85.620518,41.945863]},"n3443":{"id":"n3443","loc":[-85.620519,41.945944]},"n3444":{"id":"n3444","loc":[-85.620388,41.945944]},"n3445":{"id":"n3445","loc":[-85.620389,41.946088]},"n3446":{"id":"n3446","loc":[-85.618405,41.946566]},"n3447":{"id":"n3447","loc":[-85.619156,41.946562]},"n3448":{"id":"n3448","loc":[-85.619154,41.946319]},"n3449":{"id":"n3449","loc":[-85.618736,41.946322]},"n345":{"id":"n345","loc":[-85.633162,41.942947]},"n3450":{"id":"n3450","loc":[-85.618733,41.94612]},"n3451":{"id":"n3451","loc":[-85.619317,41.946116]},"n3452":{"id":"n3452","loc":[-85.619316,41.946023]},"n3453":{"id":"n3453","loc":[-85.619622,41.946021]},"n3454":{"id":"n3454","loc":[-85.619624,41.946171]},"n3455":{"id":"n3455","loc":[-85.61977,41.94617]},"n3456":{"id":"n3456","loc":[-85.619769,41.94602]},"n3457":{"id":"n3457","loc":[-85.619732,41.94602]},"n3458":{"id":"n3458","loc":[-85.619731,41.945856]},"n3459":{"id":"n3459","loc":[-85.619617,41.945857]},"n346":{"id":"n346","loc":[-85.633598,41.943083]},"n3460":{"id":"n3460","loc":[-85.619616,41.945776]},"n3461":{"id":"n3461","loc":[-85.619447,41.945777]},"n3462":{"id":"n3462","loc":[-85.619415,41.945778]},"n3463":{"id":"n3463","loc":[-85.618378,41.945788]},"n3464":{"id":"n3464","loc":[-85.618384,41.946132]},"n3465":{"id":"n3465","loc":[-85.618503,41.94613]},"n3466":{"id":"n3466","loc":[-85.618506,41.946319]},"n3467":{"id":"n3467","loc":[-85.6184,41.94632]},"n3468":{"id":"n3468","loc":[-85.618248,41.946416]},"n3469":{"id":"n3469","loc":[-85.618247,41.946319]},"n347":{"id":"n347","loc":[-85.63343,41.943179]},"n3470":{"id":"n3470","loc":[-85.618039,41.946321]},"n3471":{"id":"n3471","loc":[-85.61804,41.946418]},"n3472":{"id":"n3472","loc":[-85.620118,41.951895]},"n3473":{"id":"n3473","loc":[-85.617075,41.95469]},"n3474":{"id":"n3474","loc":[-85.620107,41.952113]},"n3475":{"id":"n3475","loc":[-85.620091,41.95232]},"n3476":{"id":"n3476","loc":[-85.620047,41.952505]},"n3477":{"id":"n3477","loc":[-85.61998,41.952715]},"n3478":{"id":"n3478","loc":[-85.619861,41.952986]},"n3479":{"id":"n3479","loc":[-85.619622,41.953365]},"n348":{"id":"n348","loc":[-85.633669,41.94341]},"n3480":{"id":"n3480","loc":[-85.619441,41.953567]},"n3481":{"id":"n3481","loc":[-85.619259,41.953741]},"n3482":{"id":"n3482","loc":[-85.618835,41.954056]},"n3483":{"id":"n3483","loc":[-85.618602,41.954194]},"n3484":{"id":"n3484","loc":[-85.618305,41.954347]},"n3485":{"id":"n3485","loc":[-85.618006,41.954466]},"n3486":{"id":"n3486","loc":[-85.617611,41.954587]},"n3487":{"id":"n3487","loc":[-85.615094,41.943412]},"n3488":{"id":"n3488","loc":[-85.619337,41.943025]},"n3489":{"id":"n3489","loc":[-85.610477,41.945527]},"n349":{"id":"n349","loc":[-85.633566,41.943466]},"n3490":{"id":"n3490","loc":[-85.610477,41.943718]},"n3491":{"id":"n3491","loc":[-85.619804,41.942976]},"n3492":{"id":"n3492","loc":[-85.61921,41.942672]},"n3493":{"id":"n3493","loc":[-85.619862,41.942836]},"n3494":{"id":"n3494","loc":[-85.616326,41.942769]},"n3495":{"id":"n3495","loc":[-85.617953,41.942917]},"n3496":{"id":"n3496","loc":[-85.61972,41.942728]},"n3497":{"id":"n3497","loc":[-85.61944,41.942784]},"n3498":{"id":"n3498","loc":[-85.615323,41.942841]},"n3499":{"id":"n3499","loc":[-85.612923,41.943718]},"n35":{"id":"n35","loc":[-85.637928,41.944249]},"n350":{"id":"n350","loc":[-85.633031,41.942986]},"n3500":{"id":"n3500","loc":[-85.61958,41.942756]},"n3501":{"id":"n3501","loc":[-85.619643,41.942647],"tags":{"leisure":"fishing"}},"n3502":{"id":"n3502","loc":[-85.619935,41.942962]},"n3503":{"id":"n3503","loc":[-85.629677,41.954687]},"n3504":{"id":"n3504","loc":[-85.629083,41.953722]},"n3505":{"id":"n3505","loc":[-85.621907,41.952067]},"n3506":{"id":"n3506","loc":[-85.621788,41.952058]},"n3507":{"id":"n3507","loc":[-85.629665,41.953718]},"n3508":{"id":"n3508","loc":[-85.624454,41.954707]},"n3509":{"id":"n3509","loc":[-85.634609,41.954585]},"n351":{"id":"n351","loc":[-85.633238,41.94283]},"n3510":{"id":"n3510","loc":[-85.634595,41.953772]},"n3511":{"id":"n3511","loc":[-85.633425,41.953783]},"n3512":{"id":"n3512","loc":[-85.633439,41.954596]},"n3517":{"id":"n3517","loc":[-85.621789,41.952179]},"n3518":{"id":"n3518","loc":[-85.624105,41.954704]},"n3519":{"id":"n3519","loc":[-85.623306,41.954542]},"n352":{"id":"n352","loc":[-85.633173,41.943556]},"n3520":{"id":"n3520","loc":[-85.623123,41.954502]},"n3521":{"id":"n3521","loc":[-85.622965,41.954473]},"n3522":{"id":"n3522","loc":[-85.622822,41.954455]},"n3523":{"id":"n3523","loc":[-85.62269,41.954448]},"n3524":{"id":"n3524","loc":[-85.622388,41.954467]},"n3525":{"id":"n3525","loc":[-85.62403,41.954895]},"n3526":{"id":"n3526","loc":[-85.623579,41.954855]},"n3527":{"id":"n3527","loc":[-85.623836,41.954951]},"n3528":{"id":"n3528","loc":[-85.622473,41.954592]},"n3529":{"id":"n3529","loc":[-85.622753,41.95458]},"n353":{"id":"n353","loc":[-85.633127,41.943552]},"n3530":{"id":"n3530","loc":[-85.62404,41.955078]},"n3531":{"id":"n3531","loc":[-85.624126,41.954999]},"n3532":{"id":"n3532","loc":[-85.623171,41.954687]},"n3533":{"id":"n3533","loc":[-85.624276,41.955206]},"n3534":{"id":"n3534","loc":[-85.62491,41.952801]},"n3535":{"id":"n3535","loc":[-85.625186,41.952756]},"n3536":{"id":"n3536","loc":[-85.625552,41.952792]},"n3537":{"id":"n3537","loc":[-85.626001,41.952948]},"n3538":{"id":"n3538","loc":[-85.626528,41.952984]},"n3539":{"id":"n3539","loc":[-85.626942,41.952886]},"n354":{"id":"n354","loc":[-85.632745,41.943222]},"n3540":{"id":"n3540","loc":[-85.627092,41.952685]},"n3541":{"id":"n3541","loc":[-85.627212,41.95244]},"n3542":{"id":"n3542","loc":[-85.627158,41.952226]},"n3543":{"id":"n3543","loc":[-85.627002,41.951972]},"n3544":{"id":"n3544","loc":[-85.626822,41.951838]},"n3545":{"id":"n3545","loc":[-85.626528,41.951807]},"n3546":{"id":"n3546","loc":[-85.625653,41.951852]},"n3547":{"id":"n3547","loc":[-85.625348,41.951834]},"n3548":{"id":"n3548","loc":[-85.625114,41.951767]},"n3549":{"id":"n3549","loc":[-85.620627,41.954682]},"n355":{"id":"n355","loc":[-85.632756,41.943199]},"n3550":{"id":"n3550","loc":[-85.622758,41.951884]},"n3551":{"id":"n3551","loc":[-85.618135,41.954734]},"n3552":{"id":"n3552","loc":[-85.620229,41.95472]},"n3553":{"id":"n3553","loc":[-85.624491,41.955573]},"n3554":{"id":"n3554","loc":[-85.621792,41.958314]},"n3555":{"id":"n3555","loc":[-85.623395,41.960001]},"n3556":{"id":"n3556","loc":[-85.620461,41.956212]},"n3557":{"id":"n3557","loc":[-85.62109,41.956766]},"n3558":{"id":"n3558","loc":[-85.620246,41.956224]},"n3559":{"id":"n3559","loc":[-85.625017,41.956068]},"n356":{"id":"n356","loc":[-85.632855,41.943147]},"n3560":{"id":"n3560","loc":[-85.622795,41.959702]},"n3561":{"id":"n3561","loc":[-85.621573,41.958457]},"n3562":{"id":"n3562","loc":[-85.619631,41.9573]},"n3563":{"id":"n3563","loc":[-85.62095,41.956311]},"n3564":{"id":"n3564","loc":[-85.619694,41.957408]},"n3565":{"id":"n3565","loc":[-85.621079,41.957751]},"n3566":{"id":"n3566","loc":[-85.622426,41.961142]},"n3567":{"id":"n3567","loc":[-85.623251,41.960484]},"n3568":{"id":"n3568","loc":[-85.619084,41.956291]},"n3569":{"id":"n3569","loc":[-85.622227,41.959303]},"n357":{"id":"n357","loc":[-85.632888,41.94315]},"n3570":{"id":"n3570","loc":[-85.620976,41.959104]},"n3571":{"id":"n3571","loc":[-85.621208,41.95653]},"n3572":{"id":"n3572","loc":[-85.623531,41.95951]},"n3573":{"id":"n3573","loc":[-85.623556,41.957935]},"n3574":{"id":"n3574","loc":[-85.623037,41.95746]},"n3575":{"id":"n3575","loc":[-85.621175,41.956427]},"n3576":{"id":"n3576","loc":[-85.622651,41.960109]},"n3577":{"id":"n3577","loc":[-85.621803,41.960747]},"n3578":{"id":"n3578","loc":[-85.620791,41.961874]},"n3579":{"id":"n3579","loc":[-85.625295,41.956786]},"n358":{"id":"n358","loc":[-85.633232,41.943547]},"n3580":{"id":"n3580","loc":[-85.619662,41.956894]},"n3581":{"id":"n3581","loc":[-85.622442,41.958708]},"n3582":{"id":"n3582","loc":[-85.621744,41.955864]},"n3583":{"id":"n3583","loc":[-85.621336,41.959212]},"n3584":{"id":"n3584","loc":[-85.622801,41.957304]},"n3585":{"id":"n3585","loc":[-85.619973,41.957433]},"n3586":{"id":"n3586","loc":[-85.619556,41.955717]},"n3587":{"id":"n3587","loc":[-85.622978,41.958601]},"n3588":{"id":"n3588","loc":[-85.625396,41.956264]},"n3589":{"id":"n3589","loc":[-85.623525,41.958034]},"n359":{"id":"n359","loc":[-85.633302,41.94351]},"n3590":{"id":"n3590","loc":[-85.623299,41.959631]},"n3591":{"id":"n3591","loc":[-85.622678,41.959873]},"n3592":{"id":"n3592","loc":[-85.625553,41.956179]},"n3593":{"id":"n3593","loc":[-85.623557,41.959231]},"n3594":{"id":"n3594","loc":[-85.622843,41.957373]},"n3595":{"id":"n3595","loc":[-85.619378,41.955677]},"n3596":{"id":"n3596","loc":[-85.620092,41.955425]},"n3597":{"id":"n3597","loc":[-85.622666,41.96044]},"n3598":{"id":"n3598","loc":[-85.621996,41.960256]},"n3599":{"id":"n3599","loc":[-85.623273,41.959997]},"n36":{"id":"n36","loc":[-85.637894,41.945551]},"n360":{"id":"n360","loc":[-85.633442,41.943794],"tags":{"highway":"crossing"}},"n3600":{"id":"n3600","loc":[-85.62477,41.95689]},"n3601":{"id":"n3601","loc":[-85.621641,41.955015]},"n3602":{"id":"n3602","loc":[-85.622495,41.960392]},"n3603":{"id":"n3603","loc":[-85.61918,41.955565]},"n3604":{"id":"n3604","loc":[-85.620017,41.955505]},"n3605":{"id":"n3605","loc":[-85.621739,41.956315]},"n3606":{"id":"n3606","loc":[-85.622957,41.959837]},"n3607":{"id":"n3607","loc":[-85.620912,41.960919]},"n3608":{"id":"n3608","loc":[-85.625231,41.956235]},"n3609":{"id":"n3609","loc":[-85.620976,41.961868]},"n361":{"id":"n361","loc":[-85.633381,41.94383]},"n3610":{"id":"n3610","loc":[-85.620956,41.958908]},"n3611":{"id":"n3611","loc":[-85.619035,41.956139]},"n3612":{"id":"n3612","loc":[-85.623643,41.958669]},"n3613":{"id":"n3613","loc":[-85.61949,41.956539]},"n3614":{"id":"n3614","loc":[-85.621927,41.958242]},"n3615":{"id":"n3615","loc":[-85.620826,41.955721]},"n3616":{"id":"n3616","loc":[-85.621202,41.961321]},"n3617":{"id":"n3617","loc":[-85.624877,41.95594]},"n3618":{"id":"n3618","loc":[-85.62065,41.958369]},"n3619":{"id":"n3619","loc":[-85.621524,41.956279]},"n362":{"id":"n362","loc":[-85.632977,41.944053]},"n3620":{"id":"n3620","loc":[-85.624662,41.955932]},"n3621":{"id":"n3621","loc":[-85.623048,41.958509]},"n3622":{"id":"n3622","loc":[-85.62111,41.95754]},"n3623":{"id":"n3623","loc":[-85.621508,41.954847]},"n3624":{"id":"n3624","loc":[-85.620655,41.958601]},"n3625":{"id":"n3625","loc":[-85.62154,41.954971]},"n3626":{"id":"n3626","loc":[-85.621691,41.955521]},"n3627":{"id":"n3627","loc":[-85.62154,41.954739]},"n3628":{"id":"n3628","loc":[-85.621996,41.959913]},"n3629":{"id":"n3629","loc":[-85.622286,41.960699]},"n363":{"id":"n363","loc":[-85.632915,41.943981],"tags":{"crossing":"zebra","highway":"crossing"}},"n3630":{"id":"n3630","loc":[-85.622844,41.9572]},"n3631":{"id":"n3631","loc":[-85.620252,41.955446]},"n3632":{"id":"n3632","loc":[-85.623434,41.957528]},"n3633":{"id":"n3633","loc":[-85.623429,41.956858]},"n3634":{"id":"n3634","loc":[-85.622957,41.957137]},"n3635":{"id":"n3635","loc":[-85.622554,41.959027]},"n3636":{"id":"n3636","loc":[-85.623289,41.958314]},"n3637":{"id":"n3637","loc":[-85.622977,41.960855]},"n3638":{"id":"n3638","loc":[-85.624008,41.956953]},"n3639":{"id":"n3639","loc":[-85.621278,41.960855]},"n364":{"id":"n364","loc":[-85.632724,41.943969],"tags":{"crossing":"zebra","highway":"crossing"}},"n3640":{"id":"n3640","loc":[-85.623128,41.956993]},"n3641":{"id":"n3641","loc":[-85.622452,41.959183]},"n3642":{"id":"n3642","loc":[-85.621095,41.961082]},"n3643":{"id":"n3643","loc":[-85.622011,41.960544]},"n3644":{"id":"n3644","loc":[-85.621637,41.955385]},"n3645":{"id":"n3645","loc":[-85.620999,41.959271]},"n3646":{"id":"n3646","loc":[-85.620044,41.956347]},"n3647":{"id":"n3647","loc":[-85.621936,41.959682]},"n3648":{"id":"n3648","loc":[-85.623761,41.95685]},"n3649":{"id":"n3649","loc":[-85.621239,41.959343]},"n365":{"id":"n365","loc":[-85.632621,41.944034]},"n3650":{"id":"n3650","loc":[-85.621073,41.956012]},"n3651":{"id":"n3651","loc":[-85.621271,41.956184]},"n3652":{"id":"n3652","loc":[-85.623444,41.95778]},"n3653":{"id":"n3653","loc":[-85.62125,41.96186]},"n3654":{"id":"n3654","loc":[-85.62169,41.961059]},"n3655":{"id":"n3655","loc":[-85.620012,41.955637]},"n3656":{"id":"n3656","loc":[-85.621058,41.9573]},"n3657":{"id":"n3657","loc":[-85.621138,41.957663]},"n3658":{"id":"n3658","loc":[-85.620773,41.957895]},"n3659":{"id":"n3659","loc":[-85.62007,41.957157]},"n366":{"id":"n366","loc":[-85.632684,41.944109],"tags":{"crossing":"zebra","highway":"crossing"}},"n3660":{"id":"n3660","loc":[-85.624534,41.955844]},"n3661":{"id":"n3661","loc":[-85.621932,41.960807]},"n3662":{"id":"n3662","loc":[-85.623358,41.958138]},"n3663":{"id":"n3663","loc":[-85.620456,41.955514]},"n3664":{"id":"n3664","loc":[-85.623504,41.957607]},"n3665":{"id":"n3665","loc":[-85.621444,41.960751]},"n3666":{"id":"n3666","loc":[-85.623492,41.960213]},"n3667":{"id":"n3667","loc":[-85.621669,41.954655]},"n3668":{"id":"n3668","loc":[-85.623106,41.958685]},"n3669":{"id":"n3669","loc":[-85.620922,41.957867]},"n367":{"id":"n367","loc":[-85.632738,41.944172]},"n3670":{"id":"n3670","loc":[-85.620092,41.957296]},"n3671":{"id":"n3671","loc":[-85.621669,41.955222]},"n3672":{"id":"n3672","loc":[-85.621614,41.960967]},"n3673":{"id":"n3673","loc":[-85.621691,41.955732]},"n3674":{"id":"n3674","loc":[-85.619207,41.956419]},"n3675":{"id":"n3675","loc":[-85.621116,41.956603]},"n3676":{"id":"n3676","loc":[-85.623311,41.956929]},"n3677":{"id":"n3677","loc":[-85.625671,41.956499]},"n3678":{"id":"n3678","loc":[-85.623525,41.956738]},"n3679":{"id":"n3679","loc":[-85.625381,41.956634]},"n368":{"id":"n368","loc":[-85.63287,41.944135],"tags":{"crossing":"zebra","highway":"crossing"}},"n3680":{"id":"n3680","loc":[-85.620096,41.95677]},"n3681":{"id":"n3681","loc":[-85.623803,41.958745]},"n3682":{"id":"n3682","loc":[-85.623498,41.958457]},"n3683":{"id":"n3683","loc":[-85.624223,41.957009]},"n3684":{"id":"n3684","loc":[-85.620026,41.956946]},"n3685":{"id":"n3685","loc":[-85.623005,41.960124]},"n3686":{"id":"n3686","loc":[-85.619073,41.955832]},"n3687":{"id":"n3687","loc":[-85.621744,41.95501]},"n3688":{"id":"n3688","loc":[-85.620804,41.958781]},"n3689":{"id":"n3689","loc":[-85.619844,41.957448]},"n369":{"id":"n369","loc":[-85.63298,41.944076]},"n3690":{"id":"n3690","loc":[-85.623713,41.958872]},"n3691":{"id":"n3691","loc":[-85.622329,41.960507]},"n3692":{"id":"n3692","loc":[-85.620804,41.956244]},"n3693":{"id":"n3693","loc":[-85.621818,41.955968]},"n3694":{"id":"n3694","loc":[-85.621405,41.958697]},"n3695":{"id":"n3695","loc":[-85.620998,41.960996]},"n3696":{"id":"n3696","loc":[-85.621621,41.960444]},"n3697":{"id":"n3697","loc":[-85.620941,41.961637]},"n3698":{"id":"n3698","loc":[-85.622195,41.958333]},"n3699":{"id":"n3699","loc":[-85.621668,41.961529]},"n37":{"id":"n37","loc":[-85.637611,41.945383]},"n370":{"id":"n370","loc":[-85.633191,41.944471]},"n3700":{"id":"n3700","loc":[-85.621015,41.957049]},"n3701":{"id":"n3701","loc":[-85.619368,41.955521]},"n3702":{"id":"n3702","loc":[-85.651578,41.942534]},"n3703":{"id":"n3703","loc":[-85.651541,41.943847]},"n3704":{"id":"n3704","loc":[-85.651365,41.944817]},"n3705":{"id":"n3705","loc":[-85.651076,41.945985]},"n3706":{"id":"n3706","loc":[-85.650626,41.947213]},"n3707":{"id":"n3707","loc":[-85.649669,41.949161]},"n3708":{"id":"n3708","loc":[-85.641802,41.961801]},"n3709":{"id":"n3709","loc":[-85.623333,41.961987]},"n371":{"id":"n371","loc":[-85.633132,41.94372]},"n3710":{"id":"n3710","loc":[-85.620621,41.965658]},"n3711":{"id":"n3711","loc":[-85.605673,41.965764]},"n3712":{"id":"n3712","loc":[-85.605664,41.962094]},"n3713":{"id":"n3713","loc":[-85.583774,41.962178]},"n3714":{"id":"n3714","loc":[-85.583774,41.961789]},"n3715":{"id":"n3715","loc":[-85.581303,41.961783]},"n3716":{"id":"n3716","loc":[-85.581245,41.958394]},"n3717":{"id":"n3717","loc":[-85.585299,41.955483]},"n3718":{"id":"n3718","loc":[-85.585588,41.955331]},"n3719":{"id":"n3719","loc":[-85.586053,41.955163]},"n372":{"id":"n372","loc":[-85.633011,41.943788]},"n3720":{"id":"n3720","loc":[-85.58632,41.955076]},"n3721":{"id":"n3721","loc":[-85.586478,41.955025]},"n3722":{"id":"n3722","loc":[-85.58692,41.954947]},"n3723":{"id":"n3723","loc":[-85.587345,41.954913]},"n3724":{"id":"n3724","loc":[-85.605592,41.954766]},"n3725":{"id":"n3725","loc":[-85.605303,41.936236]},"n3726":{"id":"n3726","loc":[-85.606941,41.936117]},"n3727":{"id":"n3727","loc":[-85.60876,41.935856]},"n3728":{"id":"n3728","loc":[-85.610092,41.935451]},"n3729":{"id":"n3729","loc":[-85.610681,41.935247]},"n373":{"id":"n373","loc":[-85.632854,41.943632]},"n3730":{"id":"n3730","loc":[-85.611446,41.934955]},"n3731":{"id":"n3731","loc":[-85.612057,41.934696]},"n3732":{"id":"n3732","loc":[-85.613256,41.934084]},"n3733":{"id":"n3733","loc":[-85.613948,41.933682]},"n3734":{"id":"n3734","loc":[-85.614638,41.933212]},"n3735":{"id":"n3735","loc":[-85.619801,41.929305]},"n3736":{"id":"n3736","loc":[-85.619768,41.925548]},"n3737":{"id":"n3737","loc":[-85.625761,41.925597]},"n3738":{"id":"n3738","loc":[-85.6263,41.927323]},"n3739":{"id":"n3739","loc":[-85.633708,41.927402]},"n374":{"id":"n374","loc":[-85.632974,41.943565]},"n3740":{"id":"n3740","loc":[-85.633927,41.929109]},"n3741":{"id":"n3741","loc":[-85.639213,41.929088]},"n3742":{"id":"n3742","loc":[-85.639204,41.925488]},"n3743":{"id":"n3743","loc":[-85.651425,41.925406]},"n3744":{"id":"n3744","loc":[-85.643386,41.941933]},"n3745":{"id":"n3745","loc":[-85.642776,41.941161]},"n3746":{"id":"n3746","loc":[-85.637277,41.948812]},"n3747":{"id":"n3747","loc":[-85.637366,41.94897]},"n3748":{"id":"n3748","loc":[-85.637329,41.94889]},"n3749":{"id":"n3749","loc":[-85.629649,41.952596]},"n375":{"id":"n375","loc":[-85.632741,41.943351]},"n3750":{"id":"n3750","loc":[-85.630291,41.954684]},"n3751":{"id":"n3751","loc":[-85.630284,41.953713]},"n3752":{"id":"n3752","loc":[-85.630269,41.952463]},"n3753":{"id":"n3753","loc":[-85.633933,41.949896]},"n3754":{"id":"n3754","loc":[-85.629339,41.941467]},"n3755":{"id":"n3755","loc":[-85.629857,41.94316]},"n3756":{"id":"n3756","loc":[-85.629987,41.944025]},"n3757":{"id":"n3757","loc":[-85.628538,41.948604]},"n3758":{"id":"n3758","loc":[-85.627415,41.957442]},"n3759":{"id":"n3759","loc":[-85.627019,41.957369]},"n376":{"id":"n376","loc":[-85.63251,41.943481]},"n3760":{"id":"n3760","loc":[-85.62167,41.952179]},"n3761":{"id":"n3761","loc":[-85.62167,41.952138]},"n3762":{"id":"n3762","loc":[-85.621562,41.952139]},"n3763":{"id":"n3763","loc":[-85.621562,41.952058]},"n3764":{"id":"n3764","loc":[-85.621476,41.952043]},"n3765":{"id":"n3765","loc":[-85.621477,41.952132]},"n3766":{"id":"n3766","loc":[-85.621386,41.952132]},"n3767":{"id":"n3767","loc":[-85.621387,41.95214]},"n3768":{"id":"n3768","loc":[-85.621262,41.95214]},"n3769":{"id":"n3769","loc":[-85.621261,41.952038]},"n377":{"id":"n377","loc":[-85.632706,41.943715]},"n3770":{"id":"n3770","loc":[-85.621389,41.952038]},"n3771":{"id":"n3771","loc":[-85.621389,41.952043]},"n3772":{"id":"n3772","loc":[-85.620898,41.952024]},"n3773":{"id":"n3773","loc":[-85.620898,41.952085]},"n3774":{"id":"n3774","loc":[-85.620774,41.952084]},"n3775":{"id":"n3775","loc":[-85.620774,41.952023]},"n3776":{"id":"n3776","loc":[-85.620749,41.952036]},"n3777":{"id":"n3777","loc":[-85.620723,41.952097]},"n3778":{"id":"n3778","loc":[-85.626158,41.958996]},"n3779":{"id":"n3779","loc":[-85.626319,41.958686]},"n378":{"id":"n378","loc":[-85.638683,41.943295]},"n3780":{"id":"n3780","loc":[-85.626119,41.958629]},"n3781":{"id":"n3781","loc":[-85.626064,41.958733]},"n3782":{"id":"n3782","loc":[-85.626155,41.958759]},"n3783":{"id":"n3783","loc":[-85.626048,41.958965]},"n3784":{"id":"n3784","loc":[-85.620648,41.952079]},"n3785":{"id":"n3785","loc":[-85.63826,41.961213]},"n3786":{"id":"n3786","loc":[-85.638003,41.961614]},"n3787":{"id":"n3787","loc":[-85.638817,41.961902]},"n3788":{"id":"n3788","loc":[-85.639073,41.961501]},"n3789":{"id":"n3789","loc":[-85.620674,41.952018]},"n379":{"id":"n379","loc":[-85.638684,41.94323]},"n3790":{"id":"n3790","loc":[-85.62082,41.952106]},"n3791":{"id":"n3791","loc":[-85.620819,41.952143]},"n3792":{"id":"n3792","loc":[-85.620778,41.952143]},"n3793":{"id":"n3793","loc":[-85.620778,41.952106]},"n3794":{"id":"n3794","loc":[-85.620563,41.952276]},"n3795":{"id":"n3795","loc":[-85.620543,41.95238]},"n3796":{"id":"n3796","loc":[-85.620422,41.952367]},"n3797":{"id":"n3797","loc":[-85.620441,41.952263]},"n3798":{"id":"n3798","loc":[-85.620561,41.952266]},"n3799":{"id":"n3799","loc":[-85.620444,41.952254]},"n38":{"id":"n38","loc":[-85.63879,41.943295]},"n380":{"id":"n380","loc":[-85.638627,41.94322]},"n3800":{"id":"n3800","loc":[-85.620773,41.955585]},"n3801":{"id":"n3801","loc":[-85.621265,41.955989]},"n3802":{"id":"n3802","loc":[-85.620692,41.954969]},"n3803":{"id":"n3803","loc":[-85.620691,41.955367]},"n3804":{"id":"n3804","loc":[-85.620458,41.952178]},"n3805":{"id":"n3805","loc":[-85.620575,41.95219]},"n3806":{"id":"n3806","loc":[-85.617609,41.952712]},"n3807":{"id":"n3807","loc":[-85.617533,41.952801],"tags":{"entrance":"yes"}},"n3808":{"id":"n3808","loc":[-85.616816,41.952911]},"n3809":{"id":"n3809","loc":[-85.616797,41.952901]},"n381":{"id":"n381","loc":[-85.638624,41.943294]},"n3810":{"id":"n3810","loc":[-85.616343,41.952694]},"n3811":{"id":"n3811","loc":[-85.616336,41.952729]},"n3812":{"id":"n3812","loc":[-85.616343,41.952772]},"n3813":{"id":"n3813","loc":[-85.628479,41.948649]},"n3814":{"id":"n3814","loc":[-85.628413,41.948679]},"n3815":{"id":"n3815","loc":[-85.628336,41.948694]},"n3816":{"id":"n3816","loc":[-85.62826,41.948694]},"n3817":{"id":"n3817","loc":[-85.628185,41.948679]},"n3818":{"id":"n3818","loc":[-85.628103,41.948649]},"n3819":{"id":"n3819","loc":[-85.627482,41.948395]},"n382":{"id":"n382","loc":[-85.638437,41.943291]},"n3820":{"id":"n3820","loc":[-85.619957,41.951168]},"n3821":{"id":"n3821","loc":[-85.619955,41.952077]},"n3822":{"id":"n3822","loc":[-85.619843,41.952666]},"n3823":{"id":"n3823","loc":[-85.619513,41.95324]},"n3824":{"id":"n3824","loc":[-85.619163,41.953668]},"n3825":{"id":"n3825","loc":[-85.618813,41.953947]},"n3826":{"id":"n3826","loc":[-85.618265,41.954252]},"n3827":{"id":"n3827","loc":[-85.617691,41.954458]},"n3828":{"id":"n3828","loc":[-85.616978,41.95459]},"n3829":{"id":"n3829","loc":[-85.615408,41.954628]},"n383":{"id":"n383","loc":[-85.63844,41.943209]},"n3830":{"id":"n3830","loc":[-85.615374,41.951076]},"n3831":{"id":"n3831","loc":[-85.61932,41.947564]},"n3832":{"id":"n3832","loc":[-85.610553,41.94755]},"n3833":{"id":"n3833","loc":[-85.610572,41.951065]},"n3834":{"id":"n3834","loc":[-85.617548,41.94757]},"n3835":{"id":"n3835","loc":[-85.619842,41.947939]},"n3836":{"id":"n3836","loc":[-85.619874,41.950905]},"n3837":{"id":"n3837","loc":[-85.619695,41.950911]},"n3838":{"id":"n3838","loc":[-85.617591,41.951078]},"n3839":{"id":"n3839","loc":[-85.619551,41.951065]},"n384":{"id":"n384","loc":[-85.632616,41.944021]},"n3840":{"id":"n3840","loc":[-85.626813,41.947337]},"n3841":{"id":"n3841","loc":[-85.616371,41.952814]},"n3842":{"id":"n3842","loc":[-85.617205,41.951308]},"n3843":{"id":"n3843","loc":[-85.616795,41.950953]},"n3844":{"id":"n3844","loc":[-85.617441,41.950889]},"n3845":{"id":"n3845","loc":[-85.619155,41.949377]},"n3846":{"id":"n3846","loc":[-85.618556,41.949377]},"n3847":{"id":"n3847","loc":[-85.618557,41.948372]},"n3848":{"id":"n3848","loc":[-85.619156,41.948372]},"n3849":{"id":"n3849","loc":[-85.61927,41.949796]},"n385":{"id":"n385","loc":[-85.632319,41.944172]},"n3850":{"id":"n3850","loc":[-85.61926,41.948344]},"n3851":{"id":"n3851","loc":[-85.619219,41.948264]},"n3852":{"id":"n3852","loc":[-85.619147,41.948196]},"n3853":{"id":"n3853","loc":[-85.619049,41.948144]},"n3854":{"id":"n3854","loc":[-85.618942,41.948116]},"n3855":{"id":"n3855","loc":[-85.618822,41.948109]},"n3856":{"id":"n3856","loc":[-85.618699,41.94813]},"n3857":{"id":"n3857","loc":[-85.618937,41.951943]},"n3858":{"id":"n3858","loc":[-85.616762,41.952222]},"n3859":{"id":"n3859","loc":[-85.616799,41.95472]},"n386":{"id":"n386","loc":[-85.63221,41.944066]},"n3860":{"id":"n3860","loc":[-85.616458,41.954735]},"n3861":{"id":"n3861","loc":[-85.61763,41.951515]},"n3862":{"id":"n3862","loc":[-85.617735,41.951572]},"n3863":{"id":"n3863","loc":[-85.61929,41.951573]},"n3864":{"id":"n3864","loc":[-85.617134,41.951348]},"n3865":{"id":"n3865","loc":[-85.616598,41.95192]},"n3866":{"id":"n3866","loc":[-85.616557,41.951997]},"n3867":{"id":"n3867","loc":[-85.61658,41.952093]},"n3868":{"id":"n3868","loc":[-85.616636,41.952145]},"n3869":{"id":"n3869","loc":[-85.616918,41.952276]},"n387":{"id":"n387","loc":[-85.632524,41.943912]},"n3870":{"id":"n3870","loc":[-85.617098,41.952235]},"n3871":{"id":"n3871","loc":[-85.61892,41.951467]},"n3872":{"id":"n3872","loc":[-85.618035,41.951473]},"n3873":{"id":"n3873","loc":[-85.618036,41.951572]},"n3874":{"id":"n3874","loc":[-85.61892,41.951573]},"n3875":{"id":"n3875","loc":[-85.618919,41.951957]},"n3876":{"id":"n3876","loc":[-85.619457,41.952237]},"n3877":{"id":"n3877","loc":[-85.618178,41.953618]},"n3878":{"id":"n3878","loc":[-85.617658,41.953366]},"n3879":{"id":"n3879","loc":[-85.617987,41.953024]},"n388":{"id":"n388","loc":[-85.632268,41.943621]},"n3880":{"id":"n3880","loc":[-85.618429,41.953248]},"n3881":{"id":"n3881","loc":[-85.618554,41.953119]},"n3882":{"id":"n3882","loc":[-85.618077,41.952868]},"n3883":{"id":"n3883","loc":[-85.618039,41.952886]},"n3884":{"id":"n3884","loc":[-85.619375,41.952169]},"n3885":{"id":"n3885","loc":[-85.618137,41.953538]},"n3886":{"id":"n3886","loc":[-85.61799,41.953555]},"n3887":{"id":"n3887","loc":[-85.617729,41.953423]},"n3888":{"id":"n3888","loc":[-85.618101,41.953029]},"n3889":{"id":"n3889","loc":[-85.618516,41.953119]},"n389":{"id":"n389","loc":[-85.631951,41.943773]},"n3890":{"id":"n3890","loc":[-85.619132,41.952042]},"n3891":{"id":"n3891","loc":[-85.618235,41.952981]},"n3892":{"id":"n3892","loc":[-85.618485,41.952425]},"n3893":{"id":"n3893","loc":[-85.618676,41.952519]},"n3894":{"id":"n3894","loc":[-85.618942,41.952648]},"n3895":{"id":"n3895","loc":[-85.618287,41.953122]},"n3896":{"id":"n3896","loc":[-85.617914,41.953516]},"n3897":{"id":"n3897","loc":[-85.617836,41.953573]},"n3898":{"id":"n3898","loc":[-85.616477,41.95289]},"n3899":{"id":"n3899","loc":[-85.618441,41.953201]},"n39":{"id":"n39","loc":[-85.619931,41.951013]},"n390":{"id":"n390","loc":[-85.631981,41.943654]},"n3900":{"id":"n3900","loc":[-85.617537,41.953335]},"n3901":{"id":"n3901","loc":[-85.617221,41.953166]},"n3902":{"id":"n3902","loc":[-85.617253,41.953135]},"n3903":{"id":"n3903","loc":[-85.617211,41.953114]},"n3904":{"id":"n3904","loc":[-85.617197,41.95313]},"n3905":{"id":"n3905","loc":[-85.616802,41.952925]},"n3906":{"id":"n3906","loc":[-85.616771,41.952928]},"n3907":{"id":"n3907","loc":[-85.616493,41.952785]},"n3908":{"id":"n3908","loc":[-85.616823,41.952426]},"n3909":{"id":"n3909","loc":[-85.617191,41.952616]},"n391":{"id":"n391","loc":[-85.631886,41.943699]},"n3910":{"id":"n3910","loc":[-85.61724,41.952559]},"n3911":{"id":"n3911","loc":[-85.61721,41.952542]},"n3912":{"id":"n3912","loc":[-85.617395,41.952351]},"n3913":{"id":"n3913","loc":[-85.617426,41.952368]},"n3914":{"id":"n3914","loc":[-85.617483,41.952309]},"n3915":{"id":"n3915","loc":[-85.617332,41.952229]},"n3916":{"id":"n3916","loc":[-85.617451,41.952102]},"n3917":{"id":"n3917","loc":[-85.617477,41.952115]},"n3918":{"id":"n3918","loc":[-85.617658,41.951923]},"n3919":{"id":"n3919","loc":[-85.617634,41.95191]},"n392":{"id":"n392","loc":[-85.631807,41.943606]},"n3920":{"id":"n3920","loc":[-85.617747,41.951786]},"n3921":{"id":"n3921","loc":[-85.618268,41.952056]},"n3922":{"id":"n3922","loc":[-85.618211,41.952122]},"n3923":{"id":"n3923","loc":[-85.618386,41.95222]},"n3924":{"id":"n3924","loc":[-85.618098,41.952527]},"n3925":{"id":"n3925","loc":[-85.617916,41.95243]},"n3926":{"id":"n3926","loc":[-85.617854,41.952498]},"n3927":{"id":"n3927","loc":[-85.617769,41.952453]},"n3928":{"id":"n3928","loc":[-85.617476,41.952773]},"n3929":{"id":"n3929","loc":[-85.617876,41.952973]},"n393":{"id":"n393","loc":[-85.631902,41.943561]},"n3930":{"id":"n3930","loc":[-85.617174,41.953638]},"n3931":{"id":"n3931","loc":[-85.618016,41.953578]},"n3932":{"id":"n3932","loc":[-85.618107,41.953628]},"n3933":{"id":"n3933","loc":[-85.618067,41.954268]},"n3934":{"id":"n3934","loc":[-85.617864,41.954263]},"n3935":{"id":"n3935","loc":[-85.61762,41.954205]},"n3936":{"id":"n3936","loc":[-85.617437,41.954103]},"n3937":{"id":"n3937","loc":[-85.617294,41.953978]},"n3938":{"id":"n3938","loc":[-85.617217,41.95384]},"n3939":{"id":"n3939","loc":[-85.616814,41.954327]},"n394":{"id":"n394","loc":[-85.63236,41.943543]},"n3940":{"id":"n3940","loc":[-85.616778,41.95381]},"n3941":{"id":"n3941","loc":[-85.616585,41.953707]},"n3942":{"id":"n3942","loc":[-85.616458,41.954318]},"n3943":{"id":"n3943","loc":[-85.616643,41.954345]},"n3944":{"id":"n3944","loc":[-85.618133,41.951412]},"n3945":{"id":"n3945","loc":[-85.618326,41.951411]},"n3946":{"id":"n3946","loc":[-85.618503,41.95141]},"n3947":{"id":"n3947","loc":[-85.618681,41.951409]},"n3948":{"id":"n3948","loc":[-85.618868,41.951408]},"n3949":{"id":"n3949","loc":[-85.617047,41.95136]},"n395":{"id":"n395","loc":[-85.633839,41.944082]},"n3950":{"id":"n3950","loc":[-85.616502,41.951946]},"n3951":{"id":"n3951","loc":[-85.616497,41.952072]},"n3952":{"id":"n3952","loc":[-85.616565,41.952165]},"n3953":{"id":"n3953","loc":[-85.616663,41.952218]},"n3954":{"id":"n3954","loc":[-85.616733,41.952255]},"n3955":{"id":"n3955","loc":[-85.617238,41.952512],"tags":{"entrance":"yes"}},"n3956":{"id":"n3956","loc":[-85.617043,41.952406]},"n3957":{"id":"n3957","loc":[-85.617691,41.951711]},"n3958":{"id":"n3958","loc":[-85.617773,41.951679]},"n3959":{"id":"n3959","loc":[-85.619085,41.951681]},"n396":{"id":"n396","loc":[-85.63376,41.944097]},"n3960":{"id":"n3960","loc":[-85.617943,41.952895]},"n3961":{"id":"n3961","loc":[-85.618039,41.952938]},"n3962":{"id":"n3962","loc":[-85.61763,41.95336]},"n3963":{"id":"n3963","loc":[-85.617554,41.95344]},"n3964":{"id":"n3964","loc":[-85.617381,41.952366],"tags":{"entrance":"yes"}},"n3965":{"id":"n3965","loc":[-85.617184,41.952254]},"n3966":{"id":"n3966","loc":[-85.617208,41.952496]},"n3967":{"id":"n3967","loc":[-85.617124,41.952581],"tags":{"entrance":"yes"}},"n3968":{"id":"n3968","loc":[-85.618094,41.952735]},"n3969":{"id":"n3969","loc":[-85.617702,41.952525],"tags":{"entrance":"yes"}},"n397":{"id":"n397","loc":[-85.63361,41.943957]},"n3970":{"id":"n3970","loc":[-85.617554,41.952686],"tags":{"entrance":"yes"}},"n3971":{"id":"n3971","loc":[-85.617959,41.952878]},"n3972":{"id":"n3972","loc":[-85.616367,41.952655]},"n3973":{"id":"n3973","loc":[-85.616416,41.952851]},"n3974":{"id":"n3974","loc":[-85.619777,41.951075]},"n3975":{"id":"n3975","loc":[-85.618611,41.94817]},"n3976":{"id":"n3976","loc":[-85.618538,41.948229]},"n3977":{"id":"n3977","loc":[-85.617421,41.947559]},"n3978":{"id":"n3978","loc":[-85.617395,41.951039]},"n3979":{"id":"n3979","loc":[-85.618488,41.94829]},"n398":{"id":"n398","loc":[-85.633309,41.943886]},"n3980":{"id":"n3980","loc":[-85.610238,41.954774]},"n3981":{"id":"n3981","loc":[-85.617449,41.950756]},"n3982":{"id":"n3982","loc":[-85.617288,41.951286]},"n3983":{"id":"n3983","loc":[-85.61745,41.950197]},"n3984":{"id":"n3984","loc":[-85.617436,41.948908]},"n3985":{"id":"n3985","loc":[-85.615915,41.953804]},"n3986":{"id":"n3986","loc":[-85.615953,41.953968]},"n3987":{"id":"n3987","loc":[-85.616031,41.954085]},"n3988":{"id":"n3988","loc":[-85.616135,41.954181]},"n3989":{"id":"n3989","loc":[-85.616273,41.954263]},"n399":{"id":"n399","loc":[-85.633226,41.943931]},"n3990":{"id":"n3990","loc":[-85.618327,41.951083]},"n3991":{"id":"n3991","loc":[-85.618135,41.951084]},"n3992":{"id":"n3992","loc":[-85.618503,41.951082]},"n3993":{"id":"n3993","loc":[-85.618682,41.951081]},"n3994":{"id":"n3994","loc":[-85.618864,41.951082]},"n3995":{"id":"n3995","loc":[-85.616761,41.950101]},"n3996":{"id":"n3996","loc":[-85.617317,41.947558]},"n3997":{"id":"n3997","loc":[-85.617336,41.948883]},"n3998":{"id":"n3998","loc":[-85.616779,41.949295]},"n3999":{"id":"n3999","loc":[-85.616754,41.949349]},"n4":{"id":"n4","loc":[-85.622764,41.950892],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n40":{"id":"n40","loc":[-85.619841,41.951037]},"n400":{"id":"n400","loc":[-85.63326,41.943966]},"n4000":{"id":"n4000","loc":[-85.616761,41.950865]},"n4001":{"id":"n4001","loc":[-85.616883,41.951041]},"n4002":{"id":"n4002","loc":[-85.617004,41.951142]},"n4003":{"id":"n4003","loc":[-85.617062,41.951248]},"n4004":{"id":"n4004","loc":[-85.616809,41.949273]},"n4005":{"id":"n4005","loc":[-85.616755,41.949489]},"n4006":{"id":"n4006","loc":[-85.616759,41.949971]},"n4007":{"id":"n4007","loc":[-85.616757,41.949702]},"n4008":{"id":"n4008","loc":[-85.618456,41.94836]},"n4009":{"id":"n4009","loc":[-85.618447,41.948428]},"n401":{"id":"n401","loc":[-85.63324,41.943976]},"n4010":{"id":"n4010","loc":[-85.618437,41.949322]},"n4011":{"id":"n4011","loc":[-85.618447,41.949418]},"n4012":{"id":"n4012","loc":[-85.618478,41.949491]},"n4013":{"id":"n4013","loc":[-85.618535,41.949559]},"n4014":{"id":"n4014","loc":[-85.618623,41.94962]},"n4015":{"id":"n4015","loc":[-85.618721,41.94966]},"n4016":{"id":"n4016","loc":[-85.618838,41.949674]},"n4017":{"id":"n4017","loc":[-85.618967,41.949667]},"n4018":{"id":"n4018","loc":[-85.619065,41.949632]},"n4019":{"id":"n4019","loc":[-85.61915,41.949578]},"n402":{"id":"n402","loc":[-85.63327,41.944006]},"n4020":{"id":"n4020","loc":[-85.619216,41.949507]},"n4021":{"id":"n4021","loc":[-85.61927,41.949399]},"n4022":{"id":"n4022","loc":[-85.619074,41.947639]},"n4023":{"id":"n4023","loc":[-85.619073,41.947793]},"n4024":{"id":"n4024","loc":[-85.618912,41.947793]},"n4025":{"id":"n4025","loc":[-85.618911,41.947947]},"n4026":{"id":"n4026","loc":[-85.618752,41.947947]},"n4027":{"id":"n4027","loc":[-85.618754,41.947637]},"n4028":{"id":"n4028","loc":[-85.617896,41.947599]},"n4029":{"id":"n4029","loc":[-85.617898,41.947811]},"n403":{"id":"n403","loc":[-85.633278,41.944002]},"n4030":{"id":"n4030","loc":[-85.617717,41.947812]},"n4031":{"id":"n4031","loc":[-85.617715,41.9476]},"n4032":{"id":"n4032","loc":[-85.619003,41.949828]},"n4033":{"id":"n4033","loc":[-85.619003,41.949882]},"n4034":{"id":"n4034","loc":[-85.618926,41.949882]},"n4035":{"id":"n4035","loc":[-85.618926,41.949828]},"n4036":{"id":"n4036","loc":[-85.618861,41.949809]},"n4037":{"id":"n4037","loc":[-85.618861,41.949898]},"n4038":{"id":"n4038","loc":[-85.618688,41.949898]},"n4039":{"id":"n4039","loc":[-85.618687,41.94981]},"n404":{"id":"n404","loc":[-85.63331,41.944036]},"n4040":{"id":"n4040","loc":[-85.618349,41.949473]},"n4041":{"id":"n4041","loc":[-85.618287,41.949473]},"n4042":{"id":"n4042","loc":[-85.618287,41.94942]},"n4043":{"id":"n4043","loc":[-85.618348,41.949419]},"n4044":{"id":"n4044","loc":[-85.62316,41.951604]},"n4045":{"id":"n4045","loc":[-85.623026,41.951605]},"n4046":{"id":"n4046","loc":[-85.623023,41.951466]},"n4047":{"id":"n4047","loc":[-85.623134,41.951465]},"n4048":{"id":"n4048","loc":[-85.623136,41.951539]},"n4049":{"id":"n4049","loc":[-85.623159,41.951539]},"n405":{"id":"n405","loc":[-85.633348,41.944015]},"n4050":{"id":"n4050","loc":[-85.623025,41.95155]},"n4051":{"id":"n4051","loc":[-85.622955,41.951551]},"n4052":{"id":"n4052","loc":[-85.622953,41.951507]},"n4053":{"id":"n4053","loc":[-85.623024,41.951506]},"n4054":{"id":"n4054","loc":[-85.623318,41.951242]},"n4055":{"id":"n4055","loc":[-85.623175,41.951241]},"n4056":{"id":"n4056","loc":[-85.623176,41.951153]},"n4057":{"id":"n4057","loc":[-85.623319,41.951154]},"n4058":{"id":"n4058","loc":[-85.623077,41.951191]},"n4059":{"id":"n4059","loc":[-85.622973,41.951191]},"n406":{"id":"n406","loc":[-85.63338,41.944048]},"n4060":{"id":"n4060","loc":[-85.622972,41.951349]},"n4061":{"id":"n4061","loc":[-85.623059,41.95135]},"n4062":{"id":"n4062","loc":[-85.62306,41.951301]},"n4063":{"id":"n4063","loc":[-85.623077,41.951301]},"n4064":{"id":"n4064","loc":[-85.623117,41.951405]},"n4065":{"id":"n4065","loc":[-85.62312,41.951087]},"n4066":{"id":"n4066","loc":[-85.623118,41.951274]},"n4067":{"id":"n4067","loc":[-85.62328,41.951275]},"n4068":{"id":"n4068","loc":[-85.62328,41.951242]},"n4069":{"id":"n4069","loc":[-85.623179,41.951392]},"n407":{"id":"n407","loc":[-85.633431,41.94402]},"n4070":{"id":"n4070","loc":[-85.623141,41.951392]},"n4071":{"id":"n4071","loc":[-85.623142,41.95136]},"n4072":{"id":"n4072","loc":[-85.623179,41.951361]},"n4073":{"id":"n4073","loc":[-85.622565,41.951639]},"n4074":{"id":"n4074","loc":[-85.622565,41.951741]},"n4075":{"id":"n4075","loc":[-85.622463,41.95174]},"n4076":{"id":"n4076","loc":[-85.622463,41.95173]},"n4077":{"id":"n4077","loc":[-85.622442,41.95173]},"n4078":{"id":"n4078","loc":[-85.622442,41.951742]},"n4079":{"id":"n4079","loc":[-85.622361,41.951742]},"n408":{"id":"n408","loc":[-85.633425,41.944014]},"n4080":{"id":"n4080","loc":[-85.622362,41.951667]},"n4081":{"id":"n4081","loc":[-85.622441,41.951667]},"n4082":{"id":"n4082","loc":[-85.622441,41.951688]},"n4083":{"id":"n4083","loc":[-85.622461,41.951688]},"n4084":{"id":"n4084","loc":[-85.622461,41.951638]},"n4085":{"id":"n4085","loc":[-85.62255,41.951587]},"n4086":{"id":"n4086","loc":[-85.622449,41.95159]},"n4087":{"id":"n4087","loc":[-85.622441,41.951448]},"n4088":{"id":"n4088","loc":[-85.62253,41.951445]},"n4089":{"id":"n4089","loc":[-85.622532,41.951486]},"n409":{"id":"n409","loc":[-85.633457,41.943997]},"n4090":{"id":"n4090","loc":[-85.622555,41.951485]},"n4091":{"id":"n4091","loc":[-85.622558,41.951531]},"n4092":{"id":"n4092","loc":[-85.622547,41.951531]},"n4093":{"id":"n4093","loc":[-85.622451,41.95159]},"n4094":{"id":"n4094","loc":[-85.622452,41.95161]},"n4095":{"id":"n4095","loc":[-85.622106,41.951617]},"n4096":{"id":"n4096","loc":[-85.622133,41.951443]},"n4097":{"id":"n4097","loc":[-85.622552,41.951379]},"n4098":{"id":"n4098","loc":[-85.622443,41.95138]},"n4099":{"id":"n4099","loc":[-85.622441,41.951281]},"n41":{"id":"n41","loc":[-85.636233,41.942764]},"n410":{"id":"n410","loc":[-85.633429,41.943969]},"n4100":{"id":"n4100","loc":[-85.62255,41.95128]},"n4101":{"id":"n4101","loc":[-85.622541,41.951437]},"n4102":{"id":"n4102","loc":[-85.622441,41.951438]},"n4103":{"id":"n4103","loc":[-85.621561,41.951444]},"n4104":{"id":"n4104","loc":[-85.622302,41.951479]},"n4105":{"id":"n4105","loc":[-85.6223,41.95152]},"n4106":{"id":"n4106","loc":[-85.622169,41.951517]},"n4107":{"id":"n4107","loc":[-85.622171,41.951476]},"n4108":{"id":"n4108","loc":[-85.622543,41.951228]},"n4109":{"id":"n4109","loc":[-85.622433,41.951228]},"n411":{"id":"n411","loc":[-85.633442,41.943962]},"n4110":{"id":"n4110","loc":[-85.622433,41.951133]},"n4111":{"id":"n4111","loc":[-85.622543,41.951133]},"n4112":{"id":"n4112","loc":[-85.622356,41.951256]},"n4113":{"id":"n4113","loc":[-85.622293,41.951256]},"n4114":{"id":"n4114","loc":[-85.622292,41.9512]},"n4115":{"id":"n4115","loc":[-85.622313,41.9512]},"n4116":{"id":"n4116","loc":[-85.622312,41.951173]},"n4117":{"id":"n4117","loc":[-85.622364,41.951173]},"n4118":{"id":"n4118","loc":[-85.622365,41.951231]},"n4119":{"id":"n4119","loc":[-85.622355,41.951231]},"n412":{"id":"n412","loc":[-85.633411,41.943932]},"n4120":{"id":"n4120","loc":[-85.62197,41.951155]},"n4121":{"id":"n4121","loc":[-85.62197,41.951213]},"n4122":{"id":"n4122","loc":[-85.621848,41.951213]},"n4123":{"id":"n4123","loc":[-85.621848,41.951155]},"n4124":{"id":"n4124","loc":[-85.622193,41.951268]},"n4125":{"id":"n4125","loc":[-85.622194,41.951305]},"n4126":{"id":"n4126","loc":[-85.622121,41.951306]},"n4127":{"id":"n4127","loc":[-85.622121,41.951322]},"n4128":{"id":"n4128","loc":[-85.621984,41.951324]},"n4129":{"id":"n4129","loc":[-85.621983,41.951271]},"n413":{"id":"n413","loc":[-85.633421,41.943926]},"n4130":{"id":"n4130","loc":[-85.622171,41.9514]},"n4131":{"id":"n4131","loc":[-85.622148,41.951382]},"n4132":{"id":"n4132","loc":[-85.6221,41.951414]},"n4133":{"id":"n4133","loc":[-85.622122,41.951433]},"n4134":{"id":"n4134","loc":[-85.621782,41.951148]},"n4135":{"id":"n4135","loc":[-85.621783,41.951219]},"n4136":{"id":"n4136","loc":[-85.62164,41.951221]},"n4137":{"id":"n4137","loc":[-85.62164,41.951236]},"n4138":{"id":"n4138","loc":[-85.621556,41.951237]},"n4139":{"id":"n4139","loc":[-85.621555,41.95117]},"n414":{"id":"n414","loc":[-85.633376,41.94388]},"n4140":{"id":"n4140","loc":[-85.621644,41.951169]},"n4141":{"id":"n4141","loc":[-85.621643,41.951139]},"n4142":{"id":"n4142","loc":[-85.621719,41.951138]},"n4143":{"id":"n4143","loc":[-85.621719,41.951148]},"n4144":{"id":"n4144","loc":[-85.621409,41.951322]},"n4145":{"id":"n4145","loc":[-85.621338,41.951322]},"n4146":{"id":"n4146","loc":[-85.621336,41.95115]},"n4147":{"id":"n4147","loc":[-85.621521,41.951149]},"n4148":{"id":"n4148","loc":[-85.621522,41.951228]},"n4149":{"id":"n4149","loc":[-85.621408,41.951228]},"n415":{"id":"n415","loc":[-85.633348,41.943895]},"n4150":{"id":"n4150","loc":[-85.621284,41.951219]},"n4151":{"id":"n4151","loc":[-85.621153,41.951219]},"n4152":{"id":"n4152","loc":[-85.621152,41.951152]},"n4153":{"id":"n4153","loc":[-85.621283,41.951152]},"n4154":{"id":"n4154","loc":[-85.621159,41.951241]},"n4155":{"id":"n4155","loc":[-85.62116,41.951301]},"n4156":{"id":"n4156","loc":[-85.621088,41.951302]},"n4157":{"id":"n4157","loc":[-85.621088,41.951241]},"n4158":{"id":"n4158","loc":[-85.621049,41.951158]},"n4159":{"id":"n4159","loc":[-85.62105,41.951229]},"n416":{"id":"n416","loc":[-85.633341,41.943888]},"n4160":{"id":"n4160","loc":[-85.620976,41.951229]},"n4161":{"id":"n4161","loc":[-85.620977,41.951295]},"n4162":{"id":"n4162","loc":[-85.620887,41.951296]},"n4163":{"id":"n4163","loc":[-85.620886,41.951229]},"n4164":{"id":"n4164","loc":[-85.620862,41.951229]},"n4165":{"id":"n4165","loc":[-85.620861,41.951159]},"n4166":{"id":"n4166","loc":[-85.620626,41.951133]},"n4167":{"id":"n4167","loc":[-85.620626,41.951205]},"n4168":{"id":"n4168","loc":[-85.620412,41.951206]},"n4169":{"id":"n4169","loc":[-85.620411,41.951134]},"n417":{"id":"n417","loc":[-85.633321,41.943898]},"n4170":{"id":"n4170","loc":[-85.621775,41.951443]},"n4171":{"id":"n4171","loc":[-85.621777,41.951264]},"n4172":{"id":"n4172","loc":[-85.621565,41.951654]},"n4173":{"id":"n4173","loc":[-85.621331,41.951439]},"n4174":{"id":"n4174","loc":[-85.621031,41.951443]},"n4175":{"id":"n4175","loc":[-85.621836,41.951724]},"n4176":{"id":"n4176","loc":[-85.621834,41.951621]},"n4177":{"id":"n4177","loc":[-85.62197,41.951619]},"n4178":{"id":"n4178","loc":[-85.621972,41.951722]},"n4179":{"id":"n4179","loc":[-85.621772,41.951638]},"n418":{"id":"n418","loc":[-85.633547,41.943896]},"n4180":{"id":"n4180","loc":[-85.621772,41.951715]},"n4181":{"id":"n4181","loc":[-85.621699,41.951716]},"n4182":{"id":"n4182","loc":[-85.6217,41.951722]},"n4183":{"id":"n4183","loc":[-85.621641,41.951722]},"n4184":{"id":"n4184","loc":[-85.62164,41.951639]},"n4185":{"id":"n4185","loc":[-85.621505,41.951655]},"n4186":{"id":"n4186","loc":[-85.621505,41.951729]},"n4187":{"id":"n4187","loc":[-85.621389,41.951729]},"n4188":{"id":"n4188","loc":[-85.62139,41.951654]},"n4189":{"id":"n4189","loc":[-85.621105,41.951635]},"n419":{"id":"n419","loc":[-85.633467,41.944075]},"n4190":{"id":"n4190","loc":[-85.621104,41.951576]},"n4191":{"id":"n4191","loc":[-85.621168,41.951576]},"n4192":{"id":"n4192","loc":[-85.621168,41.951595]},"n4193":{"id":"n4193","loc":[-85.621261,41.951595]},"n4194":{"id":"n4194","loc":[-85.621261,41.951646]},"n4195":{"id":"n4195","loc":[-85.621294,41.951646]},"n4196":{"id":"n4196","loc":[-85.621294,41.951732]},"n4197":{"id":"n4197","loc":[-85.621251,41.951732]},"n4198":{"id":"n4198","loc":[-85.621251,41.95174]},"n4199":{"id":"n4199","loc":[-85.621175,41.951741]},"n42":{"id":"n42","loc":[-85.635996,41.942727]},"n420":{"id":"n420","loc":[-85.633578,41.944055]},"n4200":{"id":"n4200","loc":[-85.621175,41.951651]},"n4201":{"id":"n4201","loc":[-85.621189,41.951651]},"n4202":{"id":"n4202","loc":[-85.621189,41.951635]},"n4203":{"id":"n4203","loc":[-85.620554,41.951641]},"n4204":{"id":"n4204","loc":[-85.620555,41.951742]},"n4205":{"id":"n4205","loc":[-85.620719,41.951742]},"n4206":{"id":"n4206","loc":[-85.620719,41.951731]},"n4207":{"id":"n4207","loc":[-85.620803,41.95173]},"n4208":{"id":"n4208","loc":[-85.620803,41.951603]},"n4209":{"id":"n4209","loc":[-85.62072,41.951603]},"n421":{"id":"n421","loc":[-85.633462,41.944125]},"n4210":{"id":"n4210","loc":[-85.620721,41.951641]},"n4211":{"id":"n4211","loc":[-85.620269,41.953053]},"n4212":{"id":"n4212","loc":[-85.620229,41.953051]},"n4213":{"id":"n4213","loc":[-85.620231,41.953013]},"n4214":{"id":"n4214","loc":[-85.620271,41.953015]},"n4215":{"id":"n4215","loc":[-85.620215,41.953133]},"n4216":{"id":"n4216","loc":[-85.62013,41.953134]},"n4217":{"id":"n4217","loc":[-85.620129,41.953083]},"n4218":{"id":"n4218","loc":[-85.620214,41.953082]},"n4219":{"id":"n4219","loc":[-85.62016,41.953272]},"n422":{"id":"n422","loc":[-85.633372,41.944061]},"n4220":{"id":"n4220","loc":[-85.620046,41.953273]},"n4221":{"id":"n4221","loc":[-85.620045,41.953171]},"n4222":{"id":"n4222","loc":[-85.620088,41.953171]},"n4223":{"id":"n4223","loc":[-85.620087,41.953162]},"n4224":{"id":"n4224","loc":[-85.620121,41.953162]},"n4225":{"id":"n4225","loc":[-85.620121,41.953173]},"n4226":{"id":"n4226","loc":[-85.620157,41.953173]},"n4227":{"id":"n4227","loc":[-85.620158,41.953196]},"n4228":{"id":"n4228","loc":[-85.620189,41.953196]},"n4229":{"id":"n4229","loc":[-85.620189,41.953246]},"n423":{"id":"n423","loc":[-85.633509,41.943981]},"n4230":{"id":"n4230","loc":[-85.62016,41.953246]},"n4231":{"id":"n4231","loc":[-85.6195,41.954012]},"n4232":{"id":"n4232","loc":[-85.619438,41.954057]},"n4233":{"id":"n4233","loc":[-85.619418,41.954043]},"n4234":{"id":"n4234","loc":[-85.619381,41.954069]},"n4235":{"id":"n4235","loc":[-85.619399,41.954083]},"n4236":{"id":"n4236","loc":[-85.619339,41.954126]},"n4237":{"id":"n4237","loc":[-85.619584,41.954313]},"n4238":{"id":"n4238","loc":[-85.619743,41.954198]},"n4239":{"id":"n4239","loc":[-85.619453,41.954727]},"n424":{"id":"n424","loc":[-85.635421,41.945367]},"n4240":{"id":"n4240","loc":[-85.619503,41.954581]},"n4241":{"id":"n4241","loc":[-85.619597,41.954472]},"n4242":{"id":"n4242","loc":[-85.619862,41.95419]},"n4243":{"id":"n4243","loc":[-85.619506,41.953907]},"n4244":{"id":"n4244","loc":[-85.619261,41.9541]},"n4245":{"id":"n4245","loc":[-85.619246,41.954139]},"n4246":{"id":"n4246","loc":[-85.619244,41.9542]},"n4247":{"id":"n4247","loc":[-85.619259,41.954243]},"n4248":{"id":"n4248","loc":[-85.619285,41.954274]},"n4249":{"id":"n4249","loc":[-85.619123,41.954381]},"n425":{"id":"n425","loc":[-85.634425,41.943552]},"n4250":{"id":"n4250","loc":[-85.619641,41.954607]},"n4251":{"id":"n4251","loc":[-85.619383,41.954615]},"n4252":{"id":"n4252","loc":[-85.61896,41.954391]},"n4253":{"id":"n4253","loc":[-85.619211,41.954178]},"n4254":{"id":"n4254","loc":[-85.619115,41.954102]},"n4255":{"id":"n4255","loc":[-85.619519,41.953821]},"n4256":{"id":"n4256","loc":[-85.619956,41.954156]},"n4257":{"id":"n4257","loc":[-85.619851,41.954266]},"n4258":{"id":"n4258","loc":[-85.619779,41.95436]},"n4259":{"id":"n4259","loc":[-85.620525,41.954364]},"n426":{"id":"n426","loc":[-85.634248,41.943654]},"n4260":{"id":"n4260","loc":[-85.620398,41.954365]},"n4261":{"id":"n4261","loc":[-85.620398,41.954324]},"n4262":{"id":"n4262","loc":[-85.620525,41.954323]},"n4263":{"id":"n4263","loc":[-85.620359,41.954588]},"n4264":{"id":"n4264","loc":[-85.620321,41.954588]},"n4265":{"id":"n4265","loc":[-85.620321,41.954599]},"n4266":{"id":"n4266","loc":[-85.620296,41.954599]},"n4267":{"id":"n4267","loc":[-85.620296,41.954587]},"n4268":{"id":"n4268","loc":[-85.620262,41.954588]},"n4269":{"id":"n4269","loc":[-85.620261,41.954516]},"n427":{"id":"n427","loc":[-85.634177,41.943585]},"n4270":{"id":"n4270","loc":[-85.620282,41.954516]},"n4271":{"id":"n4271","loc":[-85.620282,41.954373]},"n4272":{"id":"n4272","loc":[-85.620378,41.954373]},"n4273":{"id":"n4273","loc":[-85.620379,41.954486]},"n4274":{"id":"n4274","loc":[-85.620348,41.954486]},"n4275":{"id":"n4275","loc":[-85.620348,41.954537]},"n4276":{"id":"n4276","loc":[-85.620359,41.954537]},"n4277":{"id":"n4277","loc":[-85.620463,41.95521]},"n4278":{"id":"n4278","loc":[-85.620409,41.955273]},"n4279":{"id":"n4279","loc":[-85.620205,41.955177]},"n428":{"id":"n428","loc":[-85.634354,41.943484]},"n4280":{"id":"n4280","loc":[-85.620288,41.955079]},"n4281":{"id":"n4281","loc":[-85.620379,41.955121]},"n4282":{"id":"n4282","loc":[-85.620349,41.955157]},"n4283":{"id":"n4283","loc":[-85.620083,41.955101]},"n4284":{"id":"n4284","loc":[-85.620083,41.954986]},"n4285":{"id":"n4285","loc":[-85.620016,41.954986]},"n4286":{"id":"n4286","loc":[-85.620016,41.954999]},"n4287":{"id":"n4287","loc":[-85.619941,41.954999]},"n4288":{"id":"n4288","loc":[-85.619941,41.954988]},"n4289":{"id":"n4289","loc":[-85.619815,41.954988]},"n429":{"id":"n429","loc":[-85.638577,41.943212]},"n4290":{"id":"n4290","loc":[-85.619815,41.955075]},"n4291":{"id":"n4291","loc":[-85.619948,41.955075]},"n4292":{"id":"n4292","loc":[-85.619948,41.955082]},"n4293":{"id":"n4293","loc":[-85.620004,41.955082]},"n4294":{"id":"n4294","loc":[-85.620004,41.955101]},"n4295":{"id":"n4295","loc":[-85.619293,41.955127]},"n4296":{"id":"n4296","loc":[-85.619208,41.955124]},"n4297":{"id":"n4297","loc":[-85.619212,41.955061]},"n4298":{"id":"n4298","loc":[-85.619297,41.955064]},"n4299":{"id":"n4299","loc":[-85.619068,41.954936]},"n43":{"id":"n43","loc":[-85.637047,41.943054]},"n430":{"id":"n430","loc":[-85.638576,41.943219]},"n4300":{"id":"n4300","loc":[-85.619003,41.954936]},"n4301":{"id":"n4301","loc":[-85.619004,41.955003]},"n4302":{"id":"n4302","loc":[-85.618994,41.955003]},"n4303":{"id":"n4303","loc":[-85.618994,41.955016]},"n4304":{"id":"n4304","loc":[-85.618973,41.955016]},"n4305":{"id":"n4305","loc":[-85.618973,41.955071]},"n4306":{"id":"n4306","loc":[-85.619061,41.955071]},"n4307":{"id":"n4307","loc":[-85.61906,41.955024]},"n4308":{"id":"n4308","loc":[-85.619105,41.955024]},"n4309":{"id":"n4309","loc":[-85.619105,41.954956]},"n431":{"id":"n431","loc":[-85.638653,41.943078]},"n4310":{"id":"n4310","loc":[-85.619068,41.954956]},"n4311":{"id":"n4311","loc":[-85.618294,41.954596]},"n4312":{"id":"n4312","loc":[-85.618235,41.954602]},"n4313":{"id":"n4313","loc":[-85.618222,41.954535]},"n4314":{"id":"n4314","loc":[-85.618281,41.954529]},"n4315":{"id":"n4315","loc":[-85.618593,41.954556]},"n4316":{"id":"n4316","loc":[-85.618551,41.954565]},"n4317":{"id":"n4317","loc":[-85.618545,41.954552]},"n4318":{"id":"n4318","loc":[-85.618493,41.954563]},"n4319":{"id":"n4319","loc":[-85.618449,41.954455]},"n432":{"id":"n432","loc":[-85.638654,41.943148]},"n4320":{"id":"n4320","loc":[-85.618544,41.954434]},"n4321":{"id":"n4321","loc":[-85.622545,41.950775]},"n4322":{"id":"n4322","loc":[-85.622546,41.950843]},"n4323":{"id":"n4323","loc":[-85.622503,41.950844]},"n4324":{"id":"n4324","loc":[-85.622503,41.950853]},"n4325":{"id":"n4325","loc":[-85.622479,41.950853]},"n4326":{"id":"n4326","loc":[-85.622478,41.950843]},"n4327":{"id":"n4327","loc":[-85.622425,41.950843]},"n4328":{"id":"n4328","loc":[-85.622425,41.950808]},"n4329":{"id":"n4329","loc":[-85.622366,41.950809]},"n433":{"id":"n433","loc":[-85.638387,41.943151]},"n4330":{"id":"n4330","loc":[-85.622364,41.950673]},"n4331":{"id":"n4331","loc":[-85.622448,41.950673]},"n4332":{"id":"n4332","loc":[-85.622449,41.950732]},"n4333":{"id":"n4333","loc":[-85.622479,41.950731]},"n4334":{"id":"n4334","loc":[-85.622479,41.950775]},"n4335":{"id":"n4335","loc":[-85.621909,41.950641]},"n4336":{"id":"n4336","loc":[-85.621864,41.950641]},"n4337":{"id":"n4337","loc":[-85.621865,41.950567]},"n4338":{"id":"n4338","loc":[-85.62191,41.950567]},"n4339":{"id":"n4339","loc":[-85.621787,41.950829]},"n434":{"id":"n434","loc":[-85.638386,41.94308]},"n4340":{"id":"n4340","loc":[-85.621786,41.950775]},"n4341":{"id":"n4341","loc":[-85.621588,41.950776]},"n4342":{"id":"n4342","loc":[-85.621589,41.950848]},"n4343":{"id":"n4343","loc":[-85.621737,41.950847]},"n4344":{"id":"n4344","loc":[-85.621737,41.950829]},"n4345":{"id":"n4345","loc":[-85.621509,41.950846]},"n4346":{"id":"n4346","loc":[-85.621399,41.950846]},"n4347":{"id":"n4347","loc":[-85.621398,41.95073]},"n4348":{"id":"n4348","loc":[-85.621509,41.95073]},"n4349":{"id":"n4349","loc":[-85.621217,41.950841]},"n435":{"id":"n435","loc":[-85.634427,41.943533]},"n4350":{"id":"n4350","loc":[-85.6211,41.95084]},"n4351":{"id":"n4351","loc":[-85.6211,41.950777]},"n4352":{"id":"n4352","loc":[-85.621218,41.950778]},"n4353":{"id":"n4353","loc":[-85.621055,41.950764]},"n4354":{"id":"n4354","loc":[-85.621054,41.950826]},"n4355":{"id":"n4355","loc":[-85.620988,41.950826]},"n4356":{"id":"n4356","loc":[-85.620988,41.950843]},"n4357":{"id":"n4357","loc":[-85.620842,41.950843]},"n4358":{"id":"n4358","loc":[-85.620842,41.950764]},"n4359":{"id":"n4359","loc":[-85.620825,41.950922]},"n436":{"id":"n436","loc":[-85.63428,41.943229]},"n4360":{"id":"n4360","loc":[-85.620824,41.950553]},"n4361":{"id":"n4361","loc":[-85.620543,41.950771]},"n4362":{"id":"n4362","loc":[-85.620431,41.950772]},"n4363":{"id":"n4363","loc":[-85.62043,41.950585]},"n4364":{"id":"n4364","loc":[-85.620542,41.950585]},"n4365":{"id":"n4365","loc":[-85.62068,41.950505]},"n4366":{"id":"n4366","loc":[-85.620681,41.950552]},"n4367":{"id":"n4367","loc":[-85.620589,41.950553]},"n4368":{"id":"n4368","loc":[-85.620588,41.950506]},"n4369":{"id":"n4369","loc":[-85.620539,41.950407]},"n437":{"id":"n437","loc":[-85.634499,41.943461]},"n4370":{"id":"n4370","loc":[-85.62054,41.950504]},"n4371":{"id":"n4371","loc":[-85.620416,41.950504]},"n4372":{"id":"n4372","loc":[-85.620416,41.950408]},"n4373":{"id":"n4373","loc":[-85.620742,41.95038]},"n4374":{"id":"n4374","loc":[-85.620527,41.95038]},"n4375":{"id":"n4375","loc":[-85.620528,41.950408]},"n4376":{"id":"n4376","loc":[-85.622449,41.950373]},"n4377":{"id":"n4377","loc":[-85.622452,41.950397]},"n4378":{"id":"n4378","loc":[-85.622336,41.950404]},"n4379":{"id":"n4379","loc":[-85.622333,41.950379]},"n438":{"id":"n438","loc":[-85.634514,41.943486]},"n4380":{"id":"n4380","loc":[-85.622263,41.950324]},"n4381":{"id":"n4381","loc":[-85.622261,41.950256]},"n4382":{"id":"n4382","loc":[-85.62236,41.950254]},"n4383":{"id":"n4383","loc":[-85.62236,41.95027]},"n4384":{"id":"n4384","loc":[-85.622402,41.950281]},"n4385":{"id":"n4385","loc":[-85.622403,41.9503]},"n4386":{"id":"n4386","loc":[-85.622439,41.950299]},"n4387":{"id":"n4387","loc":[-85.62244,41.950334]},"n4388":{"id":"n4388","loc":[-85.622414,41.950335]},"n4389":{"id":"n4389","loc":[-85.622414,41.95036]},"n439":{"id":"n439","loc":[-85.63452,41.943511]},"n4390":{"id":"n4390","loc":[-85.62231,41.950362]},"n4391":{"id":"n4391","loc":[-85.622309,41.950323]},"n4392":{"id":"n4392","loc":[-85.622015,41.950539]},"n4393":{"id":"n4393","loc":[-85.621909,41.95054]},"n4394":{"id":"n4394","loc":[-85.621909,41.950472]},"n4395":{"id":"n4395","loc":[-85.622015,41.950471]},"n4396":{"id":"n4396","loc":[-85.62199,41.950439]},"n4397":{"id":"n4397","loc":[-85.621956,41.95044]},"n4398":{"id":"n4398","loc":[-85.621955,41.950405]},"n4399":{"id":"n4399","loc":[-85.621988,41.950404]},"n44":{"id":"n44","loc":[-85.636799,41.943055]},"n440":{"id":"n440","loc":[-85.63451,41.943534]},"n4400":{"id":"n4400","loc":[-85.621668,41.950418]},"n4401":{"id":"n4401","loc":[-85.621667,41.950343]},"n4402":{"id":"n4402","loc":[-85.621745,41.950342]},"n4403":{"id":"n4403","loc":[-85.621744,41.950306]},"n4404":{"id":"n4404","loc":[-85.621764,41.950306]},"n4405":{"id":"n4405","loc":[-85.621763,41.950254]},"n4406":{"id":"n4406","loc":[-85.621861,41.950253]},"n4407":{"id":"n4407","loc":[-85.621861,41.950274]},"n4408":{"id":"n4408","loc":[-85.621896,41.950273]},"n4409":{"id":"n4409","loc":[-85.621898,41.950389]},"n441":{"id":"n441","loc":[-85.634483,41.943556]},"n4410":{"id":"n4410","loc":[-85.621843,41.95039]},"n4411":{"id":"n4411","loc":[-85.621843,41.950425]},"n4412":{"id":"n4412","loc":[-85.621789,41.950425]},"n4413":{"id":"n4413","loc":[-85.621789,41.950386]},"n4414":{"id":"n4414","loc":[-85.621752,41.950387]},"n4415":{"id":"n4415","loc":[-85.621753,41.950417]},"n4416":{"id":"n4416","loc":[-85.621556,41.950562]},"n4417":{"id":"n4417","loc":[-85.621552,41.950217]},"n4418":{"id":"n4418","loc":[-85.621788,41.950562]},"n4419":{"id":"n4419","loc":[-85.621155,41.950562]},"n442":{"id":"n442","loc":[-85.63419,41.943713]},"n4420":{"id":"n4420","loc":[-85.622473,41.950551]},"n4421":{"id":"n4421","loc":[-85.622043,41.950551]},"n4422":{"id":"n4422","loc":[-85.62142,41.950454]},"n4423":{"id":"n4423","loc":[-85.621315,41.950455]},"n4424":{"id":"n4424","loc":[-85.621313,41.950311]},"n4425":{"id":"n4425","loc":[-85.621388,41.950311]},"n4426":{"id":"n4426","loc":[-85.621387,41.950261]},"n4427":{"id":"n4427","loc":[-85.621468,41.95026]},"n4428":{"id":"n4428","loc":[-85.621468,41.950271]},"n4429":{"id":"n4429","loc":[-85.621503,41.95027]},"n443":{"id":"n443","loc":[-85.634462,41.943294]},"n4430":{"id":"n4430","loc":[-85.621505,41.950353]},"n4431":{"id":"n4431","loc":[-85.621483,41.950354]},"n4432":{"id":"n4432","loc":[-85.621483,41.950392]},"n4433":{"id":"n4433","loc":[-85.621419,41.950393]},"n4434":{"id":"n4434","loc":[-85.621213,41.95039]},"n4435":{"id":"n4435","loc":[-85.621127,41.950391]},"n4436":{"id":"n4436","loc":[-85.621126,41.950357]},"n4437":{"id":"n4437","loc":[-85.621094,41.950357]},"n4438":{"id":"n4438","loc":[-85.621094,41.950391]},"n4439":{"id":"n4439","loc":[-85.620977,41.950392]},"n444":{"id":"n444","loc":[-85.634298,41.943389]},"n4440":{"id":"n4440","loc":[-85.620975,41.950278]},"n4441":{"id":"n4441","loc":[-85.621087,41.950277]},"n4442":{"id":"n4442","loc":[-85.621088,41.950331]},"n4443":{"id":"n4443","loc":[-85.621211,41.950312]},"n4444":{"id":"n4444","loc":[-85.621104,41.950313]},"n4445":{"id":"n4445","loc":[-85.621105,41.950331]},"n4446":{"id":"n4446","loc":[-85.620706,41.950328]},"n4447":{"id":"n4447","loc":[-85.620606,41.950327]},"n4448":{"id":"n4448","loc":[-85.620607,41.950261]},"n4449":{"id":"n4449","loc":[-85.620707,41.950262]},"n445":{"id":"n445","loc":[-85.634527,41.943623]},"n4450":{"id":"n4450","loc":[-85.620599,41.950336]},"n4451":{"id":"n4451","loc":[-85.620559,41.950336]},"n4452":{"id":"n4452","loc":[-85.620559,41.950299]},"n4453":{"id":"n4453","loc":[-85.620599,41.950299]},"n4454":{"id":"n4454","loc":[-85.620545,41.950357]},"n4455":{"id":"n4455","loc":[-85.620418,41.950357]},"n4456":{"id":"n4456","loc":[-85.620417,41.950257]},"n4457":{"id":"n4457","loc":[-85.620544,41.950256]},"n4458":{"id":"n4458","loc":[-85.620246,41.950131],"tags":{"highway":"crossing"}},"n4459":{"id":"n4459","loc":[-85.620252,41.950956]},"n446":{"id":"n446","loc":[-85.634608,41.943577]},"n4460":{"id":"n4460","loc":[-85.620245,41.950179]},"n4461":{"id":"n4461","loc":[-85.620246,41.950088]},"n4462":{"id":"n4462","loc":[-85.620251,41.950885]},"n4463":{"id":"n4463","loc":[-85.620103,41.950884],"tags":{"crossing":"zebra","highway":"crossing"}},"n4464":{"id":"n4464","loc":[-85.619992,41.950884]},"n4465":{"id":"n4465","loc":[-85.619704,41.951008]},"n4466":{"id":"n4466","loc":[-85.619599,41.951122]},"n4467":{"id":"n4467","loc":[-85.619264,41.951486]},"n4468":{"id":"n4468","loc":[-85.619179,41.951573],"tags":{"highway":"crossing"}},"n4469":{"id":"n4469","loc":[-85.620251,41.950999],"tags":{"highway":"crossing"}},"n447":{"id":"n447","loc":[-85.634555,41.943531]},"n4470":{"id":"n4470","loc":[-85.620249,41.951066]},"n4471":{"id":"n4471","loc":[-85.620256,41.951374]},"n4472":{"id":"n4472","loc":[-85.620249,41.951389]},"n4473":{"id":"n4473","loc":[-85.620249,41.951407]},"n4474":{"id":"n4474","loc":[-85.620255,41.951423]},"n4475":{"id":"n4475","loc":[-85.62026,41.951853]},"n4476":{"id":"n4476","loc":[-85.620262,41.951894],"tags":{"highway":"crossing"}},"n4477":{"id":"n4477","loc":[-85.620265,41.951957]},"n4478":{"id":"n4478","loc":[-85.620262,41.952135]},"n4479":{"id":"n4479","loc":[-85.620241,41.952424]},"n448":{"id":"n448","loc":[-85.634555,41.943482]},"n4480":{"id":"n4480","loc":[-85.620213,41.952583]},"n4481":{"id":"n4481","loc":[-85.620158,41.952754]},"n4482":{"id":"n4482","loc":[-85.620065,41.952942]},"n4483":{"id":"n4483","loc":[-85.619753,41.953439]},"n4484":{"id":"n4484","loc":[-85.619605,41.953626]},"n4485":{"id":"n4485","loc":[-85.619381,41.953834]},"n4486":{"id":"n4486","loc":[-85.619069,41.954066]},"n4487":{"id":"n4487","loc":[-85.618674,41.95429]},"n4488":{"id":"n4488","loc":[-85.621816,41.952389]},"n4489":{"id":"n4489","loc":[-85.6217,41.952386]},"n449":{"id":"n449","loc":[-85.634509,41.943427]},"n4490":{"id":"n4490","loc":[-85.621705,41.952306]},"n4491":{"id":"n4491","loc":[-85.621821,41.95231]},"n4492":{"id":"n4492","loc":[-85.621819,41.952272]},"n4493":{"id":"n4493","loc":[-85.621778,41.952272]},"n4494":{"id":"n4494","loc":[-85.621778,41.952199]},"n4495":{"id":"n4495","loc":[-85.621818,41.952199]},"n4496":{"id":"n4496","loc":[-85.621754,41.952281]},"n4497":{"id":"n4497","loc":[-85.621701,41.95228]},"n4498":{"id":"n4498","loc":[-85.621702,41.952197]},"n4499":{"id":"n4499","loc":[-85.621755,41.952197]},"n45":{"id":"n45","loc":[-85.636791,41.942792]},"n450":{"id":"n450","loc":[-85.63453,41.943365]},"n4500":{"id":"n4500","loc":[-85.628201,41.954694],"tags":{"highway":"stop","stop":"all","direction":"forward"}},"n4501":{"id":"n4501","loc":[-85.627921,41.954783],"tags":{"highway":"stop","stop":"all","direction":"backward"}},"n4502":{"id":"n4502","loc":[-85.62775,41.954696],"tags":{"highway":"stop","stop":"all","direction":"backward"}},"n4503":{"id":"n4503","loc":[-85.628046,41.954591],"tags":{"highway":"stop","stop":"all","direction":"forward"}},"n4504":{"id":"n4504","loc":[-85.631074,41.957428],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4505":{"id":"n4505","loc":[-85.630768,41.957429],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4506":{"id":"n4506","loc":[-85.629888,41.957432],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4507":{"id":"n4507","loc":[-85.629565,41.957433],"tags":{"highway":"stop","stop":"minor","direction":"forward"}},"n4508":{"id":"n4508","loc":[-85.629559,41.957343]},"n4509":{"id":"n4509","loc":[-85.628723,41.95735]},"n451":{"id":"n451","loc":[-85.634356,41.943468]},"n4510":{"id":"n4510","loc":[-85.62842,41.957515]},"n4511":{"id":"n4511","loc":[-85.627561,41.957525]},"n4512":{"id":"n4512","loc":[-85.630323,41.957508]},"n4513":{"id":"n4513","loc":[-85.630811,41.957506]},"n4514":{"id":"n4514","loc":[-85.630839,41.960874]},"n4515":{"id":"n4515","loc":[-85.631035,41.957506]},"n4516":{"id":"n4516","loc":[-85.632027,41.9575]},"n4517":{"id":"n4517","loc":[-85.631038,41.958066]},"n4518":{"id":"n4518","loc":[-85.630787,41.954769]},"n4519":{"id":"n4519","loc":[-85.630806,41.957342]},"n452":{"id":"n452","loc":[-85.634123,41.943596]},"n4520":{"id":"n4520","loc":[-85.630809,41.957428],"tags":{"highway":"crossing"}},"n4521":{"id":"n4521","loc":[-85.630912,41.957506],"tags":{"highway":"crossing"}},"n4522":{"id":"n4522","loc":[-85.631033,41.957428],"tags":{"highway":"crossing"}},"n4523":{"id":"n4523","loc":[-85.631032,41.957341]},"n4524":{"id":"n4524","loc":[-85.63091,41.957341],"tags":{"highway":"crossing"}},"n4525":{"id":"n4525","loc":[-85.631027,41.95597]},"n4526":{"id":"n4526","loc":[-85.631027,41.955913],"tags":{"highway":"crossing"}},"n4527":{"id":"n4527","loc":[-85.631025,41.955873]},"n4528":{"id":"n4528","loc":[-85.631073,41.955913],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4529":{"id":"n4529","loc":[-85.631007,41.954766]},"n453":{"id":"n453","loc":[-85.634709,41.943926]},"n4530":{"id":"n4530","loc":[-85.630881,41.954768],"tags":{"highway":"crossing"}},"n4531":{"id":"n4531","loc":[-85.628022,41.954776]},"n4532":{"id":"n4532","loc":[-85.627385,41.95584]},"n4533":{"id":"n4533","loc":[-85.627329,41.955937]},"n4534":{"id":"n4534","loc":[-85.626583,41.957153]},"n4535":{"id":"n4535","loc":[-85.629675,41.954564],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4536":{"id":"n4536","loc":[-85.630881,41.954806],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4537":{"id":"n4537","loc":[-85.630879,41.954564],"tags":{"highway":"stop","stop":"minor","direction":"forward"}},"n4538":{"id":"n4538","loc":[-85.630784,41.954682],"tags":{"highway":"crossing"}},"n4539":{"id":"n4539","loc":[-85.63078,41.954595]},"n454":{"id":"n454","loc":[-85.63525,41.943855]},"n4540":{"id":"n4540","loc":[-85.630879,41.954595],"tags":{"highway":"crossing"}},"n4541":{"id":"n4541","loc":[-85.631004,41.954594]},"n4542":{"id":"n4542","loc":[-85.631006,41.954681],"tags":{"highway":"crossing"}},"n4543":{"id":"n4543","loc":[-85.631045,41.959036],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4544":{"id":"n4544","loc":[-85.632071,41.959029],"tags":{"highway":"stop","stop":"minor","direction":"forward"}},"n4545":{"id":"n4545","loc":[-85.632257,41.959027],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4546":{"id":"n4546","loc":[-85.631966,41.957427],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4547":{"id":"n4547","loc":[-85.632297,41.957426],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4548":{"id":"n4548","loc":[-85.631976,41.955911],"tags":{"highway":"give_way","direction":"forward"}},"n4549":{"id":"n4549","loc":[-85.632272,41.955911],"tags":{"highway":"give_way","direction":"backward"}},"n455":{"id":"n455","loc":[-85.635224,41.943869]},"n4550":{"id":"n4550","loc":[-85.632097,41.954805],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4551":{"id":"n4551","loc":[-85.632094,41.954566],"tags":{"highway":"stop","stop":"minor","direction":"forward"}},"n4552":{"id":"n4552","loc":[-85.626519,41.957256]},"n4553":{"id":"n4553","loc":[-85.625334,41.959165]},"n4554":{"id":"n4554","loc":[-85.626483,41.95806]},"n4555":{"id":"n4555","loc":[-85.626481,41.958175]},"n4556":{"id":"n4556","loc":[-85.626412,41.958174]},"n4557":{"id":"n4557","loc":[-85.626412,41.958202]},"n4558":{"id":"n4558","loc":[-85.62628,41.958201]},"n4559":{"id":"n4559","loc":[-85.626283,41.958057]},"n456":{"id":"n456","loc":[-85.638854,41.943104]},"n4560":{"id":"n4560","loc":[-85.622763,41.95109],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4561":{"id":"n4561","loc":[-85.622858,41.950876],"tags":{"emergency":"fire_hydrant"}},"n4562":{"id":"n4562","loc":[-85.624073,41.950393]},"n4563":{"id":"n4563","loc":[-85.624077,41.950924]},"n4564":{"id":"n4564","loc":[-85.624599,41.950984],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4565":{"id":"n4565","loc":[-85.624831,41.95119],"tags":{"emergency":"fire_hydrant"}},"n4566":{"id":"n4566","loc":[-85.624437,41.952568],"tags":{"emergency":"fire_hydrant"}},"n4567":{"id":"n4567","loc":[-85.624077,41.954606],"tags":{"emergency":"fire_hydrant"}},"n4568":{"id":"n4568","loc":[-85.624263,41.954888]},"n4569":{"id":"n4569","loc":[-85.624206,41.954919]},"n457":{"id":"n457","loc":[-85.635186,41.943901]},"n4570":{"id":"n4570","loc":[-85.624154,41.954865]},"n4571":{"id":"n4571","loc":[-85.624212,41.954835]},"n4572":{"id":"n4572","loc":[-85.622442,41.954401],"tags":{"emergency":"fire_hydrant"}},"n4573":{"id":"n4573","loc":[-85.619751,41.954658],"tags":{"emergency":"fire_hydrant"}},"n4574":{"id":"n4574","loc":[-85.617785,41.954534]},"n4575":{"id":"n4575","loc":[-85.617416,41.954721]},"n4576":{"id":"n4576","loc":[-85.617662,41.95474]},"n4577":{"id":"n4577","loc":[-85.618014,41.954717]},"n4578":{"id":"n4578","loc":[-85.617886,41.954671]},"n4579":{"id":"n4579","loc":[-85.617831,41.954612]},"n458":{"id":"n458","loc":[-85.635162,41.943917]},"n4580":{"id":"n4580","loc":[-85.617968,41.954752]},"n4581":{"id":"n4581","loc":[-85.617815,41.954752]},"n4582":{"id":"n4582","loc":[-85.617938,41.954695]},"n4583":{"id":"n4583","loc":[-85.617856,41.954642],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4584":{"id":"n4584","loc":[-85.619116,41.954164],"tags":{"man_made":"flagpole"}},"n4585":{"id":"n4585","loc":[-85.619569,41.953255],"tags":{"emergency":"fire_hydrant"}},"n4586":{"id":"n4586","loc":[-85.620352,41.951894],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4587":{"id":"n4587","loc":[-85.620485,41.951948],"tags":{"emergency":"fire_hydrant"}},"n4588":{"id":"n4588","loc":[-85.620316,41.950999],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4589":{"id":"n4589","loc":[-85.620311,41.950131],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n459":{"id":"n459","loc":[-85.634856,41.943905]},"n4590":{"id":"n4590","loc":[-85.620374,41.95018],"tags":{"emergency":"fire_hydrant"}},"n4591":{"id":"n4591","loc":[-85.620301,41.949239],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4592":{"id":"n4592","loc":[-85.620278,41.947443],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4593":{"id":"n4593","loc":[-85.619844,41.947444],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4594":{"id":"n4594","loc":[-85.620191,41.947352],"tags":{"emergency":"fire_hydrant"}},"n4595":{"id":"n4595","loc":[-85.622819,41.947493],"tags":{"emergency":"fire_hydrant"}},"n4596":{"id":"n4596","loc":[-85.622744,41.947541],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4597":{"id":"n4597","loc":[-85.622739,41.947316],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4598":{"id":"n4598","loc":[-85.622909,41.948333],"tags":{"highway":"give_way"}},"n4599":{"id":"n4599","loc":[-85.622593,41.948333],"tags":{"highway":"give_way"}},"n46":{"id":"n46","loc":[-85.637131,41.94307]},"n460":{"id":"n460","loc":[-85.634811,41.944007]},"n4600":{"id":"n4600","loc":[-85.622835,41.948387],"tags":{"emergency":"fire_hydrant"}},"n4601":{"id":"n4601","loc":[-85.622768,41.949125],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4602":{"id":"n4602","loc":[-85.622769,41.949325],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4603":{"id":"n4603","loc":[-85.622837,41.949329],"tags":{"emergency":"fire_hydrant"}},"n4604":{"id":"n4604","loc":[-85.622614,41.950113],"tags":{"highway":"give_way","direction":"forward"}},"n4605":{"id":"n4605","loc":[-85.624777,41.949219],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4606":{"id":"n4606","loc":[-85.624849,41.949106],"tags":{"emergency":"fire_hydrant"}},"n4607":{"id":"n4607","loc":[-85.624858,41.950119],"tags":{"emergency":"fire_hydrant"}},"n4608":{"id":"n4608","loc":[-85.624752,41.948334],"tags":{"highway":"give_way"}},"n4609":{"id":"n4609","loc":[-85.624845,41.948422],"tags":{"emergency":"fire_hydrant"}},"n461":{"id":"n461","loc":[-85.634987,41.943112]},"n4610":{"id":"n4610","loc":[-85.62484,41.947539],"tags":{"emergency":"fire_hydrant"}},"n4611":{"id":"n4611","loc":[-85.62476,41.947428],"tags":{"highway":"stop","stop":"minor","direction":"forward"}},"n4612":{"id":"n4612","loc":[-85.620286,41.950926]},"n4613":{"id":"n4613","loc":[-85.618237,41.950963]},"n4614":{"id":"n4614","loc":[-85.618107,41.950876]},"n4615":{"id":"n4615","loc":[-85.618131,41.950393]},"n4616":{"id":"n4616","loc":[-85.618232,41.949913]},"n4617":{"id":"n4617","loc":[-85.619138,41.950212]},"n4618":{"id":"n4618","loc":[-85.619299,41.950388]},"n4619":{"id":"n4619","loc":[-85.619306,41.950897]},"n462":{"id":"n462","loc":[-85.634698,41.943194]},"n4620":{"id":"n4620","loc":[-85.619155,41.950958]},"n4621":{"id":"n4621","loc":[-85.620079,41.947715]},"n4622":{"id":"n4622","loc":[-85.619674,41.947728]},"n4623":{"id":"n4623","loc":[-85.619634,41.947735]},"n4624":{"id":"n4624","loc":[-85.619587,41.947756],"tags":{"barrier":"gate"}},"n4625":{"id":"n4625","loc":[-85.61953,41.947796]},"n4626":{"id":"n4626","loc":[-85.619475,41.947847]},"n4627":{"id":"n4627","loc":[-85.619433,41.947903]},"n4628":{"id":"n4628","loc":[-85.619402,41.947982]},"n4629":{"id":"n4629","loc":[-85.619394,41.948043]},"n463":{"id":"n463","loc":[-85.634632,41.943219]},"n4630":{"id":"n4630","loc":[-85.619395,41.948476]},"n4631":{"id":"n4631","loc":[-85.618367,41.947452]},"n4632":{"id":"n4632","loc":[-85.618371,41.947567],"tags":{"barrier":"gate"}},"n4633":{"id":"n4633","loc":[-85.618341,41.947622]},"n4634":{"id":"n4634","loc":[-85.618138,41.94773]},"n4635":{"id":"n4635","loc":[-85.618078,41.947814]},"n4636":{"id":"n4636","loc":[-85.618072,41.948009]},"n4637":{"id":"n4637","loc":[-85.618269,41.947666]},"n4638":{"id":"n4638","loc":[-85.618099,41.947765]},"n4639":{"id":"n4639","loc":[-85.618378,41.954453]},"n464":{"id":"n464","loc":[-85.63459,41.943239]},"n4640":{"id":"n4640","loc":[-85.618198,41.95453]},"n4641":{"id":"n4641","loc":[-85.618212,41.954623]},"n4642":{"id":"n4642","loc":[-85.635211,41.943103],"tags":{"leisure":"picnic_table"}},"n4643":{"id":"n4643","loc":[-85.635345,41.943448],"tags":{"leisure":"picnic_table"}},"n4644":{"id":"n4644","loc":[-85.635901,41.943353],"tags":{"amenity":"bench"}},"n4645":{"id":"n4645","loc":[-85.635815,41.942638],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4646":{"id":"n4646","loc":[-85.635355,41.942044],"tags":{"leisure":"picnic_table"}},"n4647":{"id":"n4647","loc":[-85.635206,41.942045],"tags":{"leisure":"picnic_table"}},"n4648":{"id":"n4648","loc":[-85.63504,41.941992],"tags":{"leisure":"picnic_table"}},"n4649":{"id":"n4649","loc":[-85.635185,41.942001]},"n465":{"id":"n465","loc":[-85.634555,41.943263]},"n4650":{"id":"n4650","loc":[-85.635176,41.942021]},"n4651":{"id":"n4651","loc":[-85.635127,41.942008]},"n4652":{"id":"n4652","loc":[-85.635136,41.941988]},"n4653":{"id":"n4653","loc":[-85.635,41.941709],"tags":{"emergency":"fire_hydrant"}},"n4654":{"id":"n4654","loc":[-85.634893,41.941801]},"n4655":{"id":"n4655","loc":[-85.634937,41.941843]},"n4656":{"id":"n4656","loc":[-85.634963,41.941859]},"n4657":{"id":"n4657","loc":[-85.635027,41.941904]},"n4658":{"id":"n4658","loc":[-85.63494,41.94187]},"n4659":{"id":"n4659","loc":[-85.634951,41.941871]},"n466":{"id":"n466","loc":[-85.634526,41.943289]},"n4660":{"id":"n4660","loc":[-85.634753,41.941701],"tags":{"amenity":"drinking_water"}},"n4661":{"id":"n4661","loc":[-85.634717,41.941804],"tags":{"amenity":"bench"}},"n4662":{"id":"n4662","loc":[-85.634554,41.941883],"tags":{"amenity":"bench"}},"n4663":{"id":"n4663","loc":[-85.635002,41.941579],"tags":{"amenity":"fountain"}},"n4664":{"id":"n4664","loc":[-85.635258,41.94188],"tags":{"amenity":"waste_basket"}},"n4665":{"id":"n4665","loc":[-85.635262,41.941581],"tags":{"amenity":"bench"}},"n4666":{"id":"n4666","loc":[-85.635319,41.941744],"tags":{"amenity":"bench"}},"n4667":{"id":"n4667","loc":[-85.634702,41.941473],"tags":{"amenity":"waste_basket"}},"n4668":{"id":"n4668","loc":[-85.633981,41.941966],"tags":{"amenity":"bench"}},"n4669":{"id":"n4669","loc":[-85.63388,41.941743]},"n467":{"id":"n467","loc":[-85.635163,41.944985]},"n4670":{"id":"n4670","loc":[-85.633746,41.941741]},"n4671":{"id":"n4671","loc":[-85.633749,41.941664]},"n4672":{"id":"n4672","loc":[-85.633883,41.941667]},"n4673":{"id":"n4673","loc":[-85.634283,41.941183],"tags":{"leisure":"picnic_table"}},"n4674":{"id":"n4674","loc":[-85.634046,41.941102],"tags":{"amenity":"bbq"}},"n4675":{"id":"n4675","loc":[-85.63401,41.941093],"tags":{"amenity":"bbq"}},"n4676":{"id":"n4676","loc":[-85.633408,41.940862],"tags":{"amenity":"bench"}},"n4677":{"id":"n4677","loc":[-85.633359,41.940651],"tags":{"amenity":"bench"}},"n4678":{"id":"n4678","loc":[-85.634109,41.940831]},"n4679":{"id":"n4679","loc":[-85.63396,41.940867]},"n468":{"id":"n468","loc":[-85.635095,41.945035]},"n4680":{"id":"n4680","loc":[-85.633816,41.940913]},"n4681":{"id":"n4681","loc":[-85.633237,41.940455]},"n4682":{"id":"n4682","loc":[-85.634453,41.940025],"tags":{"emergency":"fire_hydrant"}},"n4683":{"id":"n4683","loc":[-85.635692,41.940218],"tags":{"emergency":"fire_hydrant"}},"n4684":{"id":"n4684","loc":[-85.635566,41.940102],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4685":{"id":"n4685","loc":[-85.635961,41.940125],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4686":{"id":"n4686","loc":[-85.635883,41.94012],"tags":{"crossing":"zebra","highway":"crossing"}},"n4687":{"id":"n4687","loc":[-85.635883,41.94006]},"n4688":{"id":"n4688","loc":[-85.635768,41.940051],"tags":{"crossing":"zebra","highway":"crossing"}},"n4689":{"id":"n4689","loc":[-85.635669,41.940043]},"n469":{"id":"n469","loc":[-85.634269,41.944431]},"n4690":{"id":"n4690","loc":[-85.635661,41.940107],"tags":{"crossing":"zebra","highway":"crossing"}},"n4691":{"id":"n4691","loc":[-85.635424,41.941005],"tags":{"amenity":"fountain"}},"n4692":{"id":"n4692","loc":[-85.635542,41.941371],"tags":{"amenity":"bench"}},"n4693":{"id":"n4693","loc":[-85.635709,41.941341],"tags":{"emergency":"fire_hydrant"}},"n4694":{"id":"n4694","loc":[-85.637038,41.942513],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4695":{"id":"n4695","loc":[-85.637174,41.941354],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4696":{"id":"n4696","loc":[-85.637091,41.941273],"tags":{"emergency":"fire_hydrant"}},"n4697":{"id":"n4697","loc":[-85.638058,41.941346],"tags":{"highway":"give_way","direction":"forward"}},"n4698":{"id":"n4698","loc":[-85.638359,41.941344],"tags":{"highway":"give_way","direction":"backward"}},"n4699":{"id":"n4699","loc":[-85.638288,41.941236],"tags":{"emergency":"fire_hydrant"}},"n47":{"id":"n47","loc":[-85.636693,41.943073]},"n470":{"id":"n470","loc":[-85.634352,41.944376]},"n4700":{"id":"n4700","loc":[-85.63935,41.94128],"tags":{"emergency":"fire_hydrant"}},"n4701":{"id":"n4701","loc":[-85.639277,41.941337],"tags":{"highway":"give_way","direction":"forward"}},"n4702":{"id":"n4702","loc":[-85.639548,41.941334],"tags":{"highway":"give_way","direction":"backward"}},"n4703":{"id":"n4703","loc":[-85.642191,41.940039]},"n4704":{"id":"n4704","loc":[-85.640585,41.941263],"tags":{"emergency":"fire_hydrant"}},"n4705":{"id":"n4705","loc":[-85.64049,41.941327],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4706":{"id":"n4706","loc":[-85.640803,41.941324],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4707":{"id":"n4707","loc":[-85.641717,41.941317],"tags":{"highway":"stop","direction":"forward","stop":"all"}},"n4708":{"id":"n4708","loc":[-85.641846,41.941415],"tags":{"highway":"stop","direction":"backward","stop":"all"}},"n4709":{"id":"n4709","loc":[-85.641756,41.941392],"tags":{"emergency":"fire_hydrant"}},"n471":{"id":"n471","loc":[-85.634747,41.944561],"tags":{"railway":"crossing"}},"n4710":{"id":"n4710","loc":[-85.642014,41.941313],"tags":{"highway":"stop","direction":"forward","stop":"all"}},"n4711":{"id":"n4711","loc":[-85.641854,41.942455],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4712":{"id":"n4712","loc":[-85.641859,41.942739],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4713":{"id":"n4713","loc":[-85.640754,41.942707],"tags":{"emergency":"fire_hydrant"}},"n4714":{"id":"n4714","loc":[-85.640669,41.942716],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4715":{"id":"n4715","loc":[-85.640664,41.942478],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4716":{"id":"n4716","loc":[-85.63964,41.94274],"tags":{"man_made":"flagpole"}},"n4717":{"id":"n4717","loc":[-85.639455,41.942731],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4718":{"id":"n4718","loc":[-85.63945,41.942492],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4719":{"id":"n4719","loc":[-85.639527,41.942505],"tags":{"emergency":"fire_hydrant"}},"n472":{"id":"n472","loc":[-85.634667,41.944613]},"n4720":{"id":"n4720","loc":[-85.638238,41.942745],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4721":{"id":"n4721","loc":[-85.638233,41.942511],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4722":{"id":"n4722","loc":[-85.638018,41.94299],"tags":{"amenity":"waste_disposal"}},"n4723":{"id":"n4723","loc":[-85.637918,41.944152],"tags":{"amenity":"waste_basket"}},"n4724":{"id":"n4724","loc":[-85.635902,41.943291],"tags":{"leisure":"picnic_table"}},"n4725":{"id":"n4725","loc":[-85.63704,41.942741],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4726":{"id":"n4726","loc":[-85.633467,41.943818],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4727":{"id":"n4727","loc":[-85.633987,41.943531],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4728":{"id":"n4728","loc":[-85.632154,41.943539],"tags":{"emergency":"fire_hydrant"}},"n4729":{"id":"n4729","loc":[-85.633567,41.944641],"tags":{"amenity":"bench"}},"n473":{"id":"n473","loc":[-85.634161,41.944371]},"n4730":{"id":"n4730","loc":[-85.633127,41.944574],"tags":{"amenity":"bench"}},"n4731":{"id":"n4731","loc":[-85.633439,41.944871],"tags":{"amenity":"bench"}},"n4732":{"id":"n4732","loc":[-85.633676,41.944799],"tags":{"amenity":"waste_basket"}},"n4733":{"id":"n4733","loc":[-85.633466,41.944862],"tags":{"amenity":"waste_basket"}},"n4734":{"id":"n4734","loc":[-85.633451,41.944847],"tags":{"emergency":"fire_hydrant"}},"n4735":{"id":"n4735","loc":[-85.634202,41.945543],"tags":{"amenity":"waste_basket"}},"n4736":{"id":"n4736","loc":[-85.634652,41.945472],"tags":{"leisure":"picnic_table"}},"n4737":{"id":"n4737","loc":[-85.6347,41.945445],"tags":{"leisure":"picnic_table"}},"n4738":{"id":"n4738","loc":[-85.634646,41.945662],"tags":{"emergency":"fire_hydrant"}},"n4739":{"id":"n4739","loc":[-85.634673,41.945687],"tags":{"amenity":"waste_basket"}},"n474":{"id":"n474","loc":[-85.633861,41.944117]},"n4740":{"id":"n4740","loc":[-85.63449,41.945827],"tags":{"amenity":"clock","display":"analog"}},"n4741":{"id":"n4741","loc":[-85.63481,41.946056],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4742":{"id":"n4742","loc":[-85.634814,41.946176],"tags":{"amenity":"post_box"}},"n4743":{"id":"n4743","loc":[-85.638744,41.945328]},"n4744":{"id":"n4744","loc":[-85.63867,41.945228],"tags":{"amenity":"bench"}},"n4745":{"id":"n4745","loc":[-85.639487,41.945042],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4746":{"id":"n4746","loc":[-85.639635,41.94387],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4747":{"id":"n4747","loc":[-85.639549,41.943756],"tags":{"emergency":"fire_hydrant"}},"n4748":{"id":"n4748","loc":[-85.64055,41.943862],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4749":{"id":"n4749","loc":[-85.640864,41.943859],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n475":{"id":"n475","loc":[-85.633906,41.943535]},"n4750":{"id":"n4750","loc":[-85.640718,41.945022],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4751":{"id":"n4751","loc":[-85.640664,41.945076],"tags":{"emergency":"fire_hydrant"}},"n4752":{"id":"n4752","loc":[-85.641913,41.94502],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4753":{"id":"n4753","loc":[-85.641838,41.945076],"tags":{"emergency":"fire_hydrant"}},"n4754":{"id":"n4754","loc":[-85.642045,41.94385],"tags":{"highway":"give_way","direction":"backward"}},"n4755":{"id":"n4755","loc":[-85.641738,41.943852],"tags":{"highway":"give_way","direction":"forward"}},"n4756":{"id":"n4756","loc":[-85.642928,41.943843],"tags":{"highway":"stop","stop":"minor","direction":"forward"}},"n4757":{"id":"n4757","loc":[-85.64305,41.943902],"tags":{"emergency":"fire_hydrant"}},"n4758":{"id":"n4758","loc":[-85.642986,41.945105],"tags":{"highway":"stop","direction":"backward","stop":"all"}},"n4759":{"id":"n4759","loc":[-85.643136,41.94502],"tags":{"highway":"stop","stop":"all","direction":"forward"}},"n476":{"id":"n476","loc":[-85.63423,41.943692]},"n4760":{"id":"n4760","loc":[-85.63169,41.947812]},"n4761":{"id":"n4761","loc":[-85.631307,41.947655]},"n4762":{"id":"n4762","loc":[-85.631407,41.947413]},"n4763":{"id":"n4763","loc":[-85.631173,41.947306]},"n4764":{"id":"n4764","loc":[-85.631316,41.947145]},"n4765":{"id":"n4765","loc":[-85.631476,41.947087]},"n4766":{"id":"n4766","loc":[-85.631793,41.946871]},"n4767":{"id":"n4767","loc":[-85.631884,41.946723]},"n4768":{"id":"n4768","loc":[-85.631814,41.946397]},"n4769":{"id":"n4769","loc":[-85.631382,41.947685]},"n477":{"id":"n477","loc":[-85.635096,41.942814]},"n4770":{"id":"n4770","loc":[-85.63109,41.947819]},"n4771":{"id":"n4771","loc":[-85.630921,41.947961]},"n4772":{"id":"n4772","loc":[-85.630249,41.947709]},"n4773":{"id":"n4773","loc":[-85.630149,41.947451]},"n4774":{"id":"n4774","loc":[-85.629733,41.947339]},"n4775":{"id":"n4775","loc":[-85.629755,41.946948]},"n4776":{"id":"n4776","loc":[-85.630457,41.947103]},"n4777":{"id":"n4777","loc":[-85.630934,41.946939]},"n4778":{"id":"n4778","loc":[-85.631277,41.946852]},"n4779":{"id":"n4779","loc":[-85.63142,41.946781]},"n478":{"id":"n478","loc":[-85.635058,41.942795]},"n4780":{"id":"n4780","loc":[-85.631116,41.946474]},"n4781":{"id":"n4781","loc":[-85.63073,41.945965]},"n4782":{"id":"n4782","loc":[-85.631337,41.94571]},"n4783":{"id":"n4783","loc":[-85.631589,41.945487]},"n4784":{"id":"n4784","loc":[-85.632278,41.945784]},"n4785":{"id":"n4785","loc":[-85.632105,41.946034]},"n4786":{"id":"n4786","loc":[-85.632532,41.946198]},"n4787":{"id":"n4787","loc":[-85.632566,41.946151]},"n4788":{"id":"n4788","loc":[-85.632684,41.946196]},"n4789":{"id":"n4789","loc":[-85.628676,41.947106]},"n479":{"id":"n479","loc":[-85.635002,41.94279]},"n4790":{"id":"n4790","loc":[-85.628973,41.946476]},"n4791":{"id":"n4791","loc":[-85.629094,41.946079]},"n4792":{"id":"n4792","loc":[-85.629226,41.94578]},"n4793":{"id":"n4793","loc":[-85.629479,41.945682]},"n4794":{"id":"n4794","loc":[-85.630606,41.94569]},"n4795":{"id":"n4795","loc":[-85.631255,41.945588]},"n4796":{"id":"n4796","loc":[-85.631546,41.945281]},"n4797":{"id":"n4797","loc":[-85.631629,41.944823]},"n4798":{"id":"n4798","loc":[-85.631766,41.944958]},"n4799":{"id":"n4799","loc":[-85.631689,41.945318]},"n48":{"id":"n48","loc":[-85.636689,41.94276]},"n480":{"id":"n480","loc":[-85.634908,41.94279]},"n4800":{"id":"n4800","loc":[-85.615069,41.945527]},"n4801":{"id":"n4801","loc":[-85.615058,41.946677]},"n4802":{"id":"n4802","loc":[-85.613692,41.946689]},"n4803":{"id":"n4803","loc":[-85.613475,41.946531]},"n4804":{"id":"n4804","loc":[-85.611717,41.946252]},"n4805":{"id":"n4805","loc":[-85.611353,41.946385]},"n4806":{"id":"n4806","loc":[-85.611304,41.947397]},"n4807":{"id":"n4807","loc":[-85.610564,41.947401]},"n4808":{"id":"n4808","loc":[-85.610553,41.947122]},"n4809":{"id":"n4809","loc":[-85.610194,41.946992]},"n481":{"id":"n481","loc":[-85.634478,41.942342]},"n4810":{"id":"n4810","loc":[-85.609976,41.946628]},"n4811":{"id":"n4811","loc":[-85.609769,41.946523]},"n4812":{"id":"n4812","loc":[-85.609307,41.946523]},"n4813":{"id":"n4813","loc":[-85.609035,41.946462]},"n4814":{"id":"n4814","loc":[-85.609018,41.943277]},"n4815":{"id":"n4815","loc":[-85.609617,41.943423]},"n4816":{"id":"n4816","loc":[-85.610471,41.943447]},"n4817":{"id":"n4817","loc":[-85.621491,41.949168]},"n4818":{"id":"n4818","loc":[-85.620266,41.94917]},"n4819":{"id":"n4819","loc":[-85.620262,41.947557]},"n482":{"id":"n482","loc":[-85.634521,41.942254]},"n4820":{"id":"n4820","loc":[-85.620825,41.947556]},"n4821":{"id":"n4821","loc":[-85.620827,41.948371]},"n4822":{"id":"n4822","loc":[-85.621489,41.94837]},"n4823":{"id":"n4823","loc":[-85.622865,41.950928]},"n4824":{"id":"n4824","loc":[-85.622858,41.949744]},"n4825":{"id":"n4825","loc":[-85.623696,41.949714]},"n4826":{"id":"n4826","loc":[-85.623696,41.949647]},"n4827":{"id":"n4827","loc":[-85.624019,41.949647]},"n4828":{"id":"n4828","loc":[-85.624024,41.950093]},"n4829":{"id":"n4829","loc":[-85.622885,41.949711]},"n483":{"id":"n483","loc":[-85.63425,41.941819]},"n4830":{"id":"n4830","loc":[-85.624584,41.951049]},"n4831":{"id":"n4831","loc":[-85.624669,41.9511]},"n4832":{"id":"n4832","loc":[-85.624316,41.952218]},"n4833":{"id":"n4833","loc":[-85.623819,41.952094]},"n4834":{"id":"n4834","loc":[-85.623385,41.952101]},"n4835":{"id":"n4835","loc":[-85.623456,41.951238]},"n4836":{"id":"n4836","loc":[-85.623535,41.951051]},"n4837":{"id":"n4837","loc":[-85.624693,41.950921]},"n4838":{"id":"n4838","loc":[-85.624727,41.950897]},"n4839":{"id":"n4839","loc":[-85.624869,41.950341]},"n484":{"id":"n484","loc":[-85.634324,41.942131]},"n4840":{"id":"n4840","loc":[-85.624859,41.949284]},"n4841":{"id":"n4841","loc":[-85.624788,41.949262]},"n4842":{"id":"n4842","loc":[-85.62402,41.949265]},"n4843":{"id":"n4843","loc":[-85.610382,41.954663]},"n4844":{"id":"n4844","loc":[-85.605675,41.954667]},"n4845":{"id":"n4845","loc":[-85.605669,41.949407]},"n4846":{"id":"n4846","loc":[-85.610376,41.949404]},"n4847":{"id":"n4847","loc":[-85.605552,41.958536]},"n4848":{"id":"n4848","loc":[-85.595755,41.958588]},"n4849":{"id":"n4849","loc":[-85.595732,41.956419]},"n485":{"id":"n485","loc":[-85.634211,41.941374]},"n4850":{"id":"n4850","loc":[-85.596908,41.955605]},"n4851":{"id":"n4851","loc":[-85.597723,41.955596]},"n4852":{"id":"n4852","loc":[-85.597715,41.954967]},"n4853":{"id":"n4853","loc":[-85.5874,41.955018]},"n4854":{"id":"n4854","loc":[-85.586615,41.955124]},"n4855":{"id":"n4855","loc":[-85.58613,41.955293]},"n4856":{"id":"n4856","loc":[-85.586166,41.962122]},"n4857":{"id":"n4857","loc":[-85.587008,41.955052]},"n4858":{"id":"n4858","loc":[-85.591685,41.95499]},"n4859":{"id":"n4859","loc":[-85.591718,41.956649]},"n486":{"id":"n486","loc":[-85.634085,41.940704]},"n4860":{"id":"n4860","loc":[-85.591133,41.956649]},"n4861":{"id":"n4861","loc":[-85.591061,41.95582]},"n4862":{"id":"n4862","loc":[-85.590677,41.95613]},"n4863":{"id":"n4863","loc":[-85.590826,41.956369]},"n4864":{"id":"n4864","loc":[-85.591016,41.954991]},"n4865":{"id":"n4865","loc":[-85.587656,41.954855]},"n4866":{"id":"n4866","loc":[-85.5964,41.955274]},"n4867":{"id":"n4867","loc":[-85.58776,41.96178]},"n4868":{"id":"n4868","loc":[-85.601172,41.960448]},"n4869":{"id":"n4869","loc":[-85.589489,41.960478]},"n487":{"id":"n487","loc":[-85.635567,41.940944]},"n4870":{"id":"n4870","loc":[-85.586664,41.960493]},"n4871":{"id":"n4871","loc":[-85.591227,41.95676]},"n4872":{"id":"n4872","loc":[-85.589424,41.958093]},"n4873":{"id":"n4873","loc":[-85.588779,41.957611]},"n4874":{"id":"n4874","loc":[-85.590583,41.956278]},"n4875":{"id":"n4875","loc":[-85.590759,41.957106]},"n4876":{"id":"n4876","loc":[-85.592213,41.958218]},"n4877":{"id":"n4877","loc":[-85.592262,41.958279]},"n4878":{"id":"n4878","loc":[-85.592304,41.958358]},"n4879":{"id":"n4879","loc":[-85.592351,41.95849]},"n488":{"id":"n488","loc":[-85.635542,41.940919]},"n4880":{"id":"n4880","loc":[-85.592363,41.958605]},"n4881":{"id":"n4881","loc":[-85.592383,41.96047]},"n4882":{"id":"n4882","loc":[-85.592376,41.959808]},"n4883":{"id":"n4883","loc":[-85.600825,41.959779]},"n4884":{"id":"n4884","loc":[-85.601084,41.959844]},"n4885":{"id":"n4885","loc":[-85.601144,41.959908]},"n4886":{"id":"n4886","loc":[-85.601164,41.960008]},"n4887":{"id":"n4887","loc":[-85.601162,41.960125]},"n4888":{"id":"n4888","loc":[-85.601134,41.960221]},"n4889":{"id":"n4889","loc":[-85.600993,41.960353]},"n489":{"id":"n489","loc":[-85.635514,41.940906]},"n4890":{"id":"n4890","loc":[-85.600794,41.960449]},"n4891":{"id":"n4891","loc":[-85.60098,41.959792]},"n4892":{"id":"n4892","loc":[-85.601067,41.960294]},"n4893":{"id":"n4893","loc":[-85.596829,41.959793]},"n4894":{"id":"n4894","loc":[-85.596839,41.960459]},"n4895":{"id":"n4895","loc":[-85.589364,41.958048]},"n4896":{"id":"n4896","loc":[-85.587374,41.959511]},"n4897":{"id":"n4897","loc":[-85.587286,41.959564]},"n4898":{"id":"n4898","loc":[-85.587163,41.959632]},"n4899":{"id":"n4899","loc":[-85.586694,41.959865]},"n49":{"id":"n49","loc":[-85.637127,41.942757]},"n490":{"id":"n490","loc":[-85.635469,41.940896]},"n4900":{"id":"n4900","loc":[-85.586634,41.959921]},"n4901":{"id":"n4901","loc":[-85.586607,41.960001]},"n4902":{"id":"n4902","loc":[-85.586599,41.960099]},"n4903":{"id":"n4903","loc":[-85.586602,41.96034]},"n4904":{"id":"n4904","loc":[-85.586669,41.960439]},"n4905":{"id":"n4905","loc":[-85.586758,41.960493]},"n4906":{"id":"n4906","loc":[-85.586618,41.960391]},"n4907":{"id":"n4907","loc":[-85.591201,41.956352]},"n4908":{"id":"n4908","loc":[-85.59112,41.954843]},"n4909":{"id":"n4909","loc":[-85.591536,41.956349]},"n491":{"id":"n491","loc":[-85.635667,41.940826]},"n4910":{"id":"n4910","loc":[-85.590953,41.956354]},"n4911":{"id":"n4911","loc":[-85.591468,41.956406]},"n4912":{"id":"n4912","loc":[-85.591469,41.956478]},"n4913":{"id":"n4913","loc":[-85.591123,41.956481]},"n4914":{"id":"n4914","loc":[-85.591121,41.956409]},"n4915":{"id":"n4915","loc":[-85.590826,41.955954]},"n4916":{"id":"n4916","loc":[-85.590612,41.956115]},"n4917":{"id":"n4917","loc":[-85.590402,41.955962]},"n4918":{"id":"n4918","loc":[-85.590622,41.955804]},"n4919":{"id":"n4919","loc":[-85.59011,41.956502]},"n492":{"id":"n492","loc":[-85.636197,41.940599]},"n4920":{"id":"n4920","loc":[-85.589877,41.956668]},"n4921":{"id":"n4921","loc":[-85.589777,41.95659]},"n4922":{"id":"n4922","loc":[-85.59001,41.956424]},"n4923":{"id":"n4923","loc":[-85.589595,41.956427]},"n4924":{"id":"n4924","loc":[-85.589434,41.956549]},"n4925":{"id":"n4925","loc":[-85.589262,41.956424]},"n4926":{"id":"n4926","loc":[-85.589422,41.956302]},"n4927":{"id":"n4927","loc":[-85.589358,41.956286]},"n4928":{"id":"n4928","loc":[-85.5892,41.956408]},"n4929":{"id":"n4929","loc":[-85.589032,41.956288]},"n493":{"id":"n493","loc":[-85.6362,41.940686]},"n4930":{"id":"n4930","loc":[-85.58919,41.956166]},"n4931":{"id":"n4931","loc":[-85.589165,41.956132]},"n4932":{"id":"n4932","loc":[-85.589002,41.956253]},"n4933":{"id":"n4933","loc":[-85.588826,41.956122]},"n4934":{"id":"n4934","loc":[-85.588989,41.956001]},"n4935":{"id":"n4935","loc":[-85.588673,41.955757]},"n4936":{"id":"n4936","loc":[-85.588502,41.955882]},"n4937":{"id":"n4937","loc":[-85.588339,41.955759]},"n4938":{"id":"n4938","loc":[-85.58851,41.955633]},"n4939":{"id":"n4939","loc":[-85.590382,41.955892]},"n494":{"id":"n494","loc":[-85.635969,41.94069]},"n4940":{"id":"n4940","loc":[-85.589923,41.956231]},"n4941":{"id":"n4941","loc":[-85.58984,41.956168]},"n4942":{"id":"n4942","loc":[-85.5903,41.95583]},"n4943":{"id":"n4943","loc":[-85.589636,41.956038]},"n4944":{"id":"n4944","loc":[-85.589546,41.956105]},"n4945":{"id":"n4945","loc":[-85.589045,41.955729]},"n4946":{"id":"n4946","loc":[-85.589135,41.955662]},"n4947":{"id":"n4947","loc":[-85.590718,41.955293]},"n4948":{"id":"n4948","loc":[-85.590718,41.955374]},"n4949":{"id":"n4949","loc":[-85.589211,41.955369]},"n495":{"id":"n495","loc":[-85.635965,41.940561]},"n4950":{"id":"n4950","loc":[-85.589212,41.955287]},"n4951":{"id":"n4951","loc":[-85.589675,41.956817]},"n4952":{"id":"n4952","loc":[-85.58947,41.95697]},"n4953":{"id":"n4953","loc":[-85.589219,41.956784]},"n4954":{"id":"n4954","loc":[-85.589425,41.95663]},"n4955":{"id":"n4955","loc":[-85.589373,41.95702]},"n4956":{"id":"n4956","loc":[-85.589171,41.957172]},"n4957":{"id":"n4957","loc":[-85.588962,41.957019]},"n4958":{"id":"n4958","loc":[-85.589164,41.956867]},"n4959":{"id":"n4959","loc":[-85.588881,41.955006]},"n496":{"id":"n496","loc":[-85.636031,41.94056]},"n4960":{"id":"n4960","loc":[-85.588804,41.955006]},"n4961":{"id":"n4961","loc":[-85.604773,41.954521]},"n4962":{"id":"n4962","loc":[-85.601603,41.954527]},"n4963":{"id":"n4963","loc":[-85.600823,41.954169]},"n4964":{"id":"n4964","loc":[-85.600828,41.950191]},"n4965":{"id":"n4965","loc":[-85.601673,41.949457]},"n4966":{"id":"n4966","loc":[-85.604464,41.949488]},"n4967":{"id":"n4967","loc":[-85.60538,41.950212]},"n4968":{"id":"n4968","loc":[-85.605395,41.954108]},"n4969":{"id":"n4969","loc":[-85.604771,41.954109]},"n497":{"id":"n497","loc":[-85.636032,41.940602]},"n4970":{"id":"n4970","loc":[-85.600613,41.953916]},"n4971":{"id":"n4971","loc":[-85.599758,41.954649]},"n4972":{"id":"n4972","loc":[-85.591194,41.954663]},"n4973":{"id":"n4973","loc":[-85.591182,41.950465]},"n4974":{"id":"n4974","loc":[-85.591871,41.950464]},"n4975":{"id":"n4975","loc":[-85.591868,41.949209]},"n4976":{"id":"n4976","loc":[-85.592155,41.949209]},"n4977":{"id":"n4977","loc":[-85.592155,41.94848]},"n4978":{"id":"n4978","loc":[-85.600615,41.948482]},"n4979":{"id":"n4979","loc":[-85.605421,41.949378]},"n498":{"id":"n498","loc":[-85.635776,41.940583]},"n4980":{"id":"n4980","loc":[-85.600614,41.949373]},"n4981":{"id":"n4981","loc":[-85.601316,41.94849]},"n4982":{"id":"n4982","loc":[-85.601592,41.947641]},"n4983":{"id":"n4983","loc":[-85.60395,41.947618]},"n4984":{"id":"n4984","loc":[-85.603973,41.948114]},"n4985":{"id":"n4985","loc":[-85.605398,41.948103]},"n4986":{"id":"n4986","loc":[-85.614017,41.965566]},"n4987":{"id":"n4987","loc":[-85.605787,41.965619]},"n4988":{"id":"n4988","loc":[-85.60577,41.963821]},"n4989":{"id":"n4989","loc":[-85.612886,41.963808]},"n499":{"id":"n499","loc":[-85.63589,41.940578]},"n4990":{"id":"n4990","loc":[-85.613207,41.963705]},"n4991":{"id":"n4991","loc":[-85.613511,41.963525]},"n4992":{"id":"n4992","loc":[-85.613667,41.963305]},"n4993":{"id":"n4993","loc":[-85.613779,41.962983]},"n4994":{"id":"n4994","loc":[-85.613797,41.959709]},"n4995":{"id":"n4995","loc":[-85.613663,41.95936]},"n4996":{"id":"n4996","loc":[-85.61339,41.959064]},"n4997":{"id":"n4997","loc":[-85.610503,41.956898]},"n4998":{"id":"n4998","loc":[-85.610485,41.956595]},"n4999":{"id":"n4999","loc":[-85.613892,41.956621]},"n5":{"id":"n5","loc":[-85.622744,41.95268]},"n50":{"id":"n50","loc":[-85.636673,41.943143]},"n500":{"id":"n500","loc":[-85.636198,41.940578]},"n5000":{"id":"n5000","loc":[-85.613866,41.958574]},"n5001":{"id":"n5001","loc":[-85.615262,41.958561]},"n5002":{"id":"n5002","loc":[-85.615279,41.959541]},"n5003":{"id":"n5003","loc":[-85.615314,41.95597]},"n5004":{"id":"n5004","loc":[-85.613887,41.955988]},"n5005":{"id":"n5005","loc":[-85.613074,41.962244]},"n5006":{"id":"n5006","loc":[-85.611678,41.963354]},"n5007":{"id":"n5007","loc":[-85.611678,41.963487]},"n5008":{"id":"n5008","loc":[-85.606906,41.963502]},"n5009":{"id":"n5009","loc":[-85.605777,41.962657]},"n501":{"id":"n501","loc":[-85.636251,41.940584]},"n5010":{"id":"n5010","loc":[-85.605711,41.9599]},"n5011":{"id":"n5011","loc":[-85.608139,41.9585]},"n5012":{"id":"n5012","loc":[-85.60814,41.956306]},"n5013":{"id":"n5013","loc":[-85.608854,41.95581]},"n5014":{"id":"n5014","loc":[-85.610039,41.955883]},"n5015":{"id":"n5015","loc":[-85.610068,41.956754]},"n5016":{"id":"n5016","loc":[-85.613058,41.959411]},"n5017":{"id":"n5017","loc":[-85.610234,41.957068]},"n5018":{"id":"n5018","loc":[-85.609826,41.95581]},"n5019":{"id":"n5019","loc":[-85.606987,41.958505]},"n502":{"id":"n502","loc":[-85.636279,41.940605]},"n5020":{"id":"n5020","loc":[-85.606498,41.958846]},"n5021":{"id":"n5021","loc":[-85.606013,41.959342]},"n5022":{"id":"n5022","loc":[-85.614553,41.961581]},"n5023":{"id":"n5023","loc":[-85.61465,41.96214]},"n5024":{"id":"n5024","loc":[-85.615277,41.962442]},"n5025":{"id":"n5025","loc":[-85.615451,41.962972]},"n5026":{"id":"n5026","loc":[-85.614355,41.964826]},"n5027":{"id":"n5027","loc":[-85.615133,41.964589]},"n5028":{"id":"n5028","loc":[-85.615342,41.963818]},"n5029":{"id":"n5029","loc":[-85.615971,41.963792]},"n503":{"id":"n503","loc":[-85.636285,41.940633]},"n5030":{"id":"n5030","loc":[-85.615751,41.963122]},"n5031":{"id":"n5031","loc":[-85.616575,41.963123]},"n5032":{"id":"n5032","loc":[-85.612527,41.963846]},"n5033":{"id":"n5033","loc":[-85.630653,41.940709]},"n5034":{"id":"n5034","loc":[-85.629858,41.939568]},"n5035":{"id":"n5035","loc":[-85.629847,41.937926]},"n504":{"id":"n504","loc":[-85.636281,41.940662]},"n505":{"id":"n505","loc":[-85.636266,41.940688]},"n506":{"id":"n506","loc":[-85.636236,41.940701]},"n507":{"id":"n507","loc":[-85.63619,41.940706]},"n508":{"id":"n508","loc":[-85.635892,41.940707]},"n509":{"id":"n509","loc":[-85.635777,41.9407]},"n51":{"id":"n51","loc":[-85.636673,41.942864]},"n510":{"id":"n510","loc":[-85.636044,41.940578]},"n511":{"id":"n511","loc":[-85.635946,41.940578]},"n512":{"id":"n512","loc":[-85.636475,41.940732]},"n513":{"id":"n513","loc":[-85.636475,41.940777]},"n514":{"id":"n514","loc":[-85.636405,41.940777]},"n515":{"id":"n515","loc":[-85.636405,41.940732]},"n516":{"id":"n516","loc":[-85.636471,41.940916]},"n517":{"id":"n517","loc":[-85.636471,41.940961]},"n518":{"id":"n518","loc":[-85.636404,41.940961]},"n519":{"id":"n519","loc":[-85.636404,41.940916]},"n52":{"id":"n52","loc":[-85.636227,41.942864]},"n520":{"id":"n520","loc":[-85.636286,41.941127]},"n521":{"id":"n521","loc":[-85.636203,41.941126]},"n522":{"id":"n522","loc":[-85.636204,41.941083]},"n523":{"id":"n523","loc":[-85.636287,41.941083]},"n524":{"id":"n524","loc":[-85.636124,41.941064]},"n525":{"id":"n525","loc":[-85.636,41.941065]},"n526":{"id":"n526","loc":[-85.636,41.940964]},"n527":{"id":"n527","loc":[-85.636045,41.940964]},"n528":{"id":"n528","loc":[-85.636045,41.940928]},"n529":{"id":"n529","loc":[-85.636111,41.940928]},"n53":{"id":"n53","loc":[-85.636227,41.943143]},"n530":{"id":"n530","loc":[-85.636111,41.940961]},"n531":{"id":"n531","loc":[-85.636123,41.940961]},"n532":{"id":"n532","loc":[-85.636124,41.940997]},"n533":{"id":"n533","loc":[-85.636164,41.940997]},"n534":{"id":"n534","loc":[-85.636164,41.941044]},"n535":{"id":"n535","loc":[-85.636124,41.941044]},"n536":{"id":"n536","loc":[-85.636534,41.941256]},"n537":{"id":"n537","loc":[-85.63645,41.941246]},"n538":{"id":"n538","loc":[-85.636462,41.941189]},"n539":{"id":"n539","loc":[-85.636546,41.941199]},"n54":{"id":"n54","loc":[-85.636198,41.943119]},"n540":{"id":"n540","loc":[-85.636802,41.941226]},"n541":{"id":"n541","loc":[-85.636701,41.941215]},"n542":{"id":"n542","loc":[-85.636709,41.941174]},"n543":{"id":"n543","loc":[-85.636656,41.941168]},"n544":{"id":"n544","loc":[-85.636666,41.941122]},"n545":{"id":"n545","loc":[-85.636781,41.941136]},"n546":{"id":"n546","loc":[-85.636774,41.94117]},"n547":{"id":"n547","loc":[-85.636812,41.941175]},"n548":{"id":"n548","loc":[-85.636803,41.941047]},"n549":{"id":"n549","loc":[-85.636785,41.941047]},"n55":{"id":"n55","loc":[-85.635945,41.94312]},"n550":{"id":"n550","loc":[-85.636785,41.941058]},"n551":{"id":"n551","loc":[-85.636644,41.941059]},"n552":{"id":"n552","loc":[-85.636644,41.941038]},"n553":{"id":"n553","loc":[-85.636581,41.941039]},"n554":{"id":"n554","loc":[-85.636581,41.940995]},"n555":{"id":"n555","loc":[-85.636746,41.940995]},"n556":{"id":"n556","loc":[-85.636746,41.940978]},"n557":{"id":"n557","loc":[-85.636803,41.940978]},"n558":{"id":"n558","loc":[-85.636781,41.940768]},"n559":{"id":"n559","loc":[-85.636783,41.940828]},"n56":{"id":"n56","loc":[-85.635943,41.942909]},"n560":{"id":"n560","loc":[-85.636761,41.940828]},"n561":{"id":"n561","loc":[-85.636762,41.940857]},"n562":{"id":"n562","loc":[-85.636641,41.940859]},"n563":{"id":"n563","loc":[-85.63664,41.940805]},"n564":{"id":"n564","loc":[-85.636676,41.940804]},"n565":{"id":"n565","loc":[-85.636675,41.940769]},"n566":{"id":"n566","loc":[-85.636733,41.94033]},"n567":{"id":"n567","loc":[-85.636471,41.940334]},"n568":{"id":"n568","loc":[-85.636469,41.940262]},"n569":{"id":"n569","loc":[-85.636731,41.940257]},"n57":{"id":"n57","loc":[-85.636227,41.942909]},"n570":{"id":"n570","loc":[-85.636798,41.940419]},"n571":{"id":"n571","loc":[-85.6368,41.940524]},"n572":{"id":"n572","loc":[-85.63664,41.940526]},"n573":{"id":"n573","loc":[-85.636638,41.940421]},"n574":{"id":"n574","loc":[-85.636372,41.940551]},"n575":{"id":"n575","loc":[-85.636338,41.94055]},"n576":{"id":"n576","loc":[-85.636339,41.940524]},"n577":{"id":"n577","loc":[-85.636373,41.940525]},"n578":{"id":"n578","loc":[-85.636388,41.940435]},"n579":{"id":"n579","loc":[-85.636222,41.940436]},"n58":{"id":"n58","loc":[-85.63627,41.943175]},"n580":{"id":"n580","loc":[-85.636222,41.940366]},"n581":{"id":"n581","loc":[-85.636387,41.940365]},"n582":{"id":"n582","loc":[-85.636158,41.940482]},"n583":{"id":"n583","loc":[-85.635963,41.940484]},"n584":{"id":"n584","loc":[-85.635961,41.940399]},"n585":{"id":"n585","loc":[-85.636156,41.940397]},"n586":{"id":"n586","loc":[-85.635987,41.940314]},"n587":{"id":"n587","loc":[-85.635987,41.940268]},"n588":{"id":"n588","loc":[-85.635968,41.940268]},"n589":{"id":"n589","loc":[-85.635967,41.940212]},"n59":{"id":"n59","loc":[-85.635531,41.943176]},"n590":{"id":"n590","loc":[-85.636082,41.940211]},"n591":{"id":"n591","loc":[-85.636083,41.94027]},"n592":{"id":"n592","loc":[-85.636064,41.94027]},"n593":{"id":"n593","loc":[-85.636064,41.940313]},"n594":{"id":"n594","loc":[-85.638071,41.941562]},"n595":{"id":"n595","loc":[-85.637953,41.941562]},"n596":{"id":"n596","loc":[-85.637952,41.941522]},"n597":{"id":"n597","loc":[-85.637876,41.941523]},"n598":{"id":"n598","loc":[-85.637876,41.941471]},"n599":{"id":"n599","loc":[-85.638035,41.94147]},"n6":{"id":"n6","loc":[-85.624925,41.950604]},"n60":{"id":"n60","loc":[-85.63542,41.942883]},"n600":{"id":"n600","loc":[-85.638035,41.941513]},"n601":{"id":"n601","loc":[-85.638071,41.941512]},"n602":{"id":"n602","loc":[-85.637038,41.942543],"tags":{"crossing":"zebra","highway":"crossing"}},"n603":{"id":"n603","loc":[-85.637134,41.942542]},"n604":{"id":"n604","loc":[-85.638122,41.942532]},"n605":{"id":"n605","loc":[-85.638121,41.942478]},"n606":{"id":"n606","loc":[-85.638104,41.941424]},"n607":{"id":"n607","loc":[-85.637115,41.941438]},"n608":{"id":"n608","loc":[-85.637133,41.942453]},"n609":{"id":"n609","loc":[-85.637429,41.942004]},"n61":{"id":"n61","loc":[-85.635701,41.942802]},"n610":{"id":"n610","loc":[-85.637125,41.942004]},"n611":{"id":"n611","loc":[-85.637022,41.942004]},"n612":{"id":"n612","loc":[-85.635952,41.943579]},"n613":{"id":"n613","loc":[-85.635872,41.943594]},"n614":{"id":"n614","loc":[-85.635857,41.943551]},"n615":{"id":"n615","loc":[-85.635937,41.943535]},"n616":{"id":"n616","loc":[-85.63671,41.94344]},"n617":{"id":"n617","loc":[-85.636427,41.94334]},"n618":{"id":"n618","loc":[-85.635353,41.943279]},"n619":{"id":"n619","loc":[-85.635319,41.943257]},"n62":{"id":"n62","loc":[-85.6358,41.942997]},"n620":{"id":"n620","loc":[-85.638786,41.943105]},"n621":{"id":"n621","loc":[-85.634957,41.943146]},"n622":{"id":"n622","loc":[-85.635012,41.943119]},"n623":{"id":"n623","loc":[-85.632409,41.944222]},"n624":{"id":"n624","loc":[-85.631863,41.944749]},"n625":{"id":"n625","loc":[-85.631915,41.944722]},"n626":{"id":"n626","loc":[-85.631884,41.94464]},"n627":{"id":"n627","loc":[-85.631792,41.944359]},"n628":{"id":"n628","loc":[-85.631817,41.944703]},"n629":{"id":"n629","loc":[-85.633464,41.945787]},"n63":{"id":"n63","loc":[-85.635808,41.943176]},"n630":{"id":"n630","loc":[-85.633583,41.945919]},"n631":{"id":"n631","loc":[-85.63382,41.945698]},"n632":{"id":"n632","loc":[-85.633681,41.945571]},"n633":{"id":"n633","loc":[-85.634217,41.946824]},"n634":{"id":"n634","loc":[-85.634271,41.946836]},"n635":{"id":"n635","loc":[-85.634319,41.94573]},"n636":{"id":"n636","loc":[-85.634377,41.945672]},"n637":{"id":"n637","loc":[-85.634909,41.945354]},"n638":{"id":"n638","loc":[-85.634726,41.945493],"tags":{"artwork_type":"mural","tourism":"artwork"}},"n639":{"id":"n639","loc":[-85.63546,41.945612]},"n64":{"id":"n64","loc":[-85.63631,41.943253]},"n640":{"id":"n640","loc":[-85.635561,41.945493]},"n641":{"id":"n641","loc":[-85.635417,41.945565]},"n642":{"id":"n642","loc":[-85.635315,41.945583]},"n643":{"id":"n643","loc":[-85.63506,41.945383]},"n644":{"id":"n644","loc":[-85.635198,41.945199]},"n645":{"id":"n645","loc":[-85.635361,41.94558]},"n646":{"id":"n646","loc":[-85.635017,41.945066]},"n647":{"id":"n647","loc":[-85.634779,41.945206]},"n648":{"id":"n648","loc":[-85.63425,41.945655]},"n649":{"id":"n649","loc":[-85.634247,41.945631]},"n65":{"id":"n65","loc":[-85.635398,41.943259]},"n650":{"id":"n650","loc":[-85.634889,41.945921]},"n651":{"id":"n651","loc":[-85.634889,41.945939]},"n652":{"id":"n652","loc":[-85.634889,41.945761]},"n653":{"id":"n653","loc":[-85.634889,41.945778]},"n654":{"id":"n654","loc":[-85.635112,41.945715]},"n655":{"id":"n655","loc":[-85.635025,41.945714]},"n656":{"id":"n656","loc":[-85.635027,41.945761]},"n657":{"id":"n657","loc":[-85.635438,41.945665]},"n658":{"id":"n658","loc":[-85.635416,41.945676]},"n659":{"id":"n659","loc":[-85.635401,41.945709]},"n66":{"id":"n66","loc":[-85.635336,41.943036]},"n660":{"id":"n660","loc":[-85.635271,41.945566]},"n661":{"id":"n661","loc":[-85.636106,41.946268]},"n662":{"id":"n662","loc":[-85.635867,41.946747]},"n663":{"id":"n663","loc":[-85.636476,41.946797]},"n664":{"id":"n664","loc":[-85.63651,41.946796]},"n665":{"id":"n665","loc":[-85.635367,41.946389]},"n666":{"id":"n666","loc":[-85.635367,41.946437]},"n667":{"id":"n667","loc":[-85.634787,41.946441]},"n668":{"id":"n668","loc":[-85.6358,41.946243]},"n669":{"id":"n669","loc":[-85.635784,41.94622]},"n67":{"id":"n67","loc":[-85.635911,41.942899]},"n670":{"id":"n670","loc":[-85.635727,41.946195]},"n671":{"id":"n671","loc":[-85.635708,41.946588]},"n672":{"id":"n672","loc":[-85.635648,41.946561]},"n673":{"id":"n673","loc":[-85.635624,41.946555]},"n674":{"id":"n674","loc":[-85.635417,41.946559]},"n675":{"id":"n675","loc":[-85.634866,41.946561]},"n676":{"id":"n676","loc":[-85.634866,41.946543]},"n677":{"id":"n677","loc":[-85.635085,41.946546]},"n678":{"id":"n678","loc":[-85.635085,41.946554]},"n679":{"id":"n679","loc":[-85.634584,41.94488]},"n68":{"id":"n68","loc":[-85.635915,41.943156]},"n680":{"id":"n680","loc":[-85.634557,41.944882]},"n681":{"id":"n681","loc":[-85.634455,41.944943]},"n682":{"id":"n682","loc":[-85.634305,41.944968]},"n683":{"id":"n683","loc":[-85.634261,41.944927]},"n684":{"id":"n684","loc":[-85.634132,41.944741]},"n685":{"id":"n685","loc":[-85.633705,41.944759]},"n686":{"id":"n686","loc":[-85.633918,41.944616]},"n687":{"id":"n687","loc":[-85.633974,41.944663]},"n688":{"id":"n688","loc":[-85.6336,41.944665]},"n689":{"id":"n689","loc":[-85.633817,41.944528]},"n69":{"id":"n69","loc":[-85.63631,41.943157]},"n690":{"id":"n690","loc":[-85.633889,41.944485]},"n691":{"id":"n691","loc":[-85.633931,41.944525]},"n692":{"id":"n692","loc":[-85.633864,41.944563]},"n693":{"id":"n693","loc":[-85.633456,41.944524]},"n694":{"id":"n694","loc":[-85.633676,41.944399]},"n695":{"id":"n695","loc":[-85.633352,41.944415]},"n696":{"id":"n696","loc":[-85.633655,41.944234]},"n697":{"id":"n697","loc":[-85.633761,41.94435]},"n698":{"id":"n698","loc":[-85.633254,41.944318]},"n699":{"id":"n699","loc":[-85.633472,41.944188]},"n7":{"id":"n7","loc":[-85.638791,41.943231]},"n70":{"id":"n70","loc":[-85.63579,41.942967]},"n700":{"id":"n700","loc":[-85.633524,41.944237]},"n701":{"id":"n701","loc":[-85.633583,41.944202]},"n702":{"id":"n702","loc":[-85.633632,41.944247]},"n703":{"id":"n703","loc":[-85.633165,41.944228]},"n704":{"id":"n704","loc":[-85.633388,41.944105]},"n705":{"id":"n705","loc":[-85.633117,41.944175]},"n706":{"id":"n706","loc":[-85.633302,41.944077]},"n707":{"id":"n707","loc":[-85.633352,41.944126]},"n708":{"id":"n708","loc":[-85.633052,41.944107]},"n709":{"id":"n709","loc":[-85.633237,41.944009]},"n71":{"id":"n71","loc":[-85.637506,41.942824]},"n710":{"id":"n710","loc":[-85.633187,41.943955]},"n711":{"id":"n711","loc":[-85.633,41.944054]},"n712":{"id":"n712","loc":[-85.633155,41.944265]},"n713":{"id":"n713","loc":[-85.633669,41.944765]},"n714":{"id":"n714","loc":[-85.634468,41.945503]},"n715":{"id":"n715","loc":[-85.63455,41.945566]},"n716":{"id":"n716","loc":[-85.634737,41.945729]},"n717":{"id":"n717","loc":[-85.634753,41.945752]},"n718":{"id":"n718","loc":[-85.634756,41.945781]},"n719":{"id":"n719","loc":[-85.634758,41.945978]},"n72":{"id":"n72","loc":[-85.637511,41.943056]},"n720":{"id":"n720","loc":[-85.634363,41.945548],"tags":{"crossing":"zebra","highway":"crossing"}},"n721":{"id":"n721","loc":[-85.634245,41.945599]},"n722":{"id":"n722","loc":[-85.633474,41.944889]},"n723":{"id":"n723","loc":[-85.632997,41.944418]},"n724":{"id":"n724","loc":[-85.63278,41.944183]},"n725":{"id":"n725","loc":[-85.63331,41.944429]},"n726":{"id":"n726","loc":[-85.633568,41.944829],"tags":{"crossing":"zebra","highway":"crossing"}},"n727":{"id":"n727","loc":[-85.634669,41.94567]},"n728":{"id":"n728","loc":[-85.634462,41.945787]},"n729":{"id":"n729","loc":[-85.634272,41.945625]},"n73":{"id":"n73","loc":[-85.637361,41.943058]},"n730":{"id":"n730","loc":[-85.634344,41.945699],"tags":{"crossing":"zebra","highway":"crossing"}},"n731":{"id":"n731","loc":[-85.634426,41.945783]},"n732":{"id":"n732","loc":[-85.632425,41.944137]},"n733":{"id":"n733","loc":[-85.632302,41.944192]},"n734":{"id":"n734","loc":[-85.632762,41.944174]},"n735":{"id":"n735","loc":[-85.632713,41.944179]},"n736":{"id":"n736","loc":[-85.632411,41.944327]},"n737":{"id":"n737","loc":[-85.632362,41.944341]},"n738":{"id":"n738","loc":[-85.632236,41.944204]},"n739":{"id":"n739","loc":[-85.634939,41.942165]},"n74":{"id":"n74","loc":[-85.637356,41.942825]},"n740":{"id":"n740","loc":[-85.635079,41.941535]},"n741":{"id":"n741","loc":[-85.635112,41.941595]},"n742":{"id":"n742","loc":[-85.635113,41.941633]},"n743":{"id":"n743","loc":[-85.635067,41.941652]},"n744":{"id":"n744","loc":[-85.634989,41.941651]},"n745":{"id":"n745","loc":[-85.634921,41.941609]},"n746":{"id":"n746","loc":[-85.634881,41.941544]},"n747":{"id":"n747","loc":[-85.635537,41.940939]},"n748":{"id":"n748","loc":[-85.635573,41.941048]},"n749":{"id":"n749","loc":[-85.635453,41.94091]},"n75":{"id":"n75","loc":[-85.638097,41.942833]},"n750":{"id":"n750","loc":[-85.635319,41.940943]},"n751":{"id":"n751","loc":[-85.637057,41.943224]},"n752":{"id":"n752","loc":[-85.636989,41.943296]},"n753":{"id":"n753","loc":[-85.636851,41.943299]},"n754":{"id":"n754","loc":[-85.636848,41.94322]},"n755":{"id":"n755","loc":[-85.636986,41.943217]},"n756":{"id":"n756","loc":[-85.637569,41.943454]},"n757":{"id":"n757","loc":[-85.637437,41.943458]},"n758":{"id":"n758","loc":[-85.637432,41.943384]},"n759":{"id":"n759","loc":[-85.637564,41.94338]},"n76":{"id":"n76","loc":[-85.638098,41.942912]},"n760":{"id":"n760","loc":[-85.637213,41.943378]},"n761":{"id":"n761","loc":[-85.637217,41.943435]},"n762":{"id":"n762","loc":[-85.637235,41.943434]},"n763":{"id":"n763","loc":[-85.637237,41.943465]},"n764":{"id":"n764","loc":[-85.637424,41.943459]},"n765":{"id":"n765","loc":[-85.637418,41.943371]},"n766":{"id":"n766","loc":[-85.638094,41.943149]},"n767":{"id":"n767","loc":[-85.638096,41.943201]},"n768":{"id":"n768","loc":[-85.638041,41.943202]},"n769":{"id":"n769","loc":[-85.638042,41.943216]},"n77":{"id":"n77","loc":[-85.637705,41.942913]},"n770":{"id":"n770","loc":[-85.637927,41.943218]},"n771":{"id":"n771","loc":[-85.637926,41.943201]},"n772":{"id":"n772","loc":[-85.637897,41.943201]},"n773":{"id":"n773","loc":[-85.637896,41.943155]},"n774":{"id":"n774","loc":[-85.637962,41.943153]},"n775":{"id":"n775","loc":[-85.637962,41.943134]},"n776":{"id":"n776","loc":[-85.638017,41.943132]},"n777":{"id":"n777","loc":[-85.638018,41.943151]},"n778":{"id":"n778","loc":[-85.638045,41.943289]},"n779":{"id":"n779","loc":[-85.638048,41.943363]},"n78":{"id":"n78","loc":[-85.637705,41.942834]},"n780":{"id":"n780","loc":[-85.637842,41.943367]},"n781":{"id":"n781","loc":[-85.637839,41.943296]},"n782":{"id":"n782","loc":[-85.637896,41.943295]},"n783":{"id":"n783","loc":[-85.637897,41.943314]},"n784":{"id":"n784","loc":[-85.637957,41.943312]},"n785":{"id":"n785","loc":[-85.637957,41.943291]},"n786":{"id":"n786","loc":[-85.637816,41.943375]},"n787":{"id":"n787","loc":[-85.637815,41.943416]},"n788":{"id":"n788","loc":[-85.637715,41.943415]},"n789":{"id":"n789","loc":[-85.637716,41.943374]},"n79":{"id":"n79","loc":[-85.638071,41.942298]},"n790":{"id":"n790","loc":[-85.637912,41.943545]},"n791":{"id":"n791","loc":[-85.637909,41.943479]},"n792":{"id":"n792","loc":[-85.637967,41.943477]},"n793":{"id":"n793","loc":[-85.637967,41.94346]},"n794":{"id":"n794","loc":[-85.638077,41.943457]},"n795":{"id":"n795","loc":[-85.638078,41.943473]},"n796":{"id":"n796","loc":[-85.638124,41.943471]},"n797":{"id":"n797","loc":[-85.638126,41.943514]},"n798":{"id":"n798","loc":[-85.638079,41.943515]},"n799":{"id":"n799","loc":[-85.638079,41.943532]},"n8":{"id":"n8","loc":[-85.635241,41.941948]},"n80":{"id":"n80","loc":[-85.638074,41.942431]},"n800":{"id":"n800","loc":[-85.638028,41.943534]},"n801":{"id":"n801","loc":[-85.638028,41.943542]},"n802":{"id":"n802","loc":[-85.638845,41.942983]},"n803":{"id":"n803","loc":[-85.638846,41.94305]},"n804":{"id":"n804","loc":[-85.638661,41.943052]},"n805":{"id":"n805","loc":[-85.63866,41.942984]},"n806":{"id":"n806","loc":[-85.638579,41.942753]},"n807":{"id":"n807","loc":[-85.638445,41.942755]},"n808":{"id":"n808","loc":[-85.638452,41.942978]},"n809":{"id":"n809","loc":[-85.638545,41.942976]},"n81":{"id":"n81","loc":[-85.637836,41.942433]},"n810":{"id":"n810","loc":[-85.638543,41.942935]},"n811":{"id":"n811","loc":[-85.638571,41.942934]},"n812":{"id":"n812","loc":[-85.63857,41.942901]},"n813":{"id":"n813","loc":[-85.638611,41.9429]},"n814":{"id":"n814","loc":[-85.638607,41.942769]},"n815":{"id":"n815","loc":[-85.63858,41.94277]},"n816":{"id":"n816","loc":[-85.638597,41.942614]},"n817":{"id":"n817","loc":[-85.638601,41.94273]},"n818":{"id":"n818","loc":[-85.638686,41.942731]},"n819":{"id":"n819","loc":[-85.638689,41.942917]},"n82":{"id":"n82","loc":[-85.637835,41.94242]},"n820":{"id":"n820","loc":[-85.638558,41.943018]},"n821":{"id":"n821","loc":[-85.638243,41.943019]},"n822":{"id":"n822","loc":[-85.637536,41.943887]},"n823":{"id":"n823","loc":[-85.63749,41.943926]},"n824":{"id":"n824","loc":[-85.63743,41.943886]},"n825":{"id":"n825","loc":[-85.637476,41.943847]},"n826":{"id":"n826","loc":[-85.637527,41.943846]},"n827":{"id":"n827","loc":[-85.637141,41.943728]},"n828":{"id":"n828","loc":[-85.637201,41.943755]},"n829":{"id":"n829","loc":[-85.636987,41.943608]},"n83":{"id":"n83","loc":[-85.63776,41.942421]},"n830":{"id":"n830","loc":[-85.637441,41.943807]},"n831":{"id":"n831","loc":[-85.637673,41.94399]},"n832":{"id":"n832","loc":[-85.637783,41.944137]},"n833":{"id":"n833","loc":[-85.63845,41.944333]},"n834":{"id":"n834","loc":[-85.638159,41.944248]},"n835":{"id":"n835","loc":[-85.637859,41.94416]},"n836":{"id":"n836","loc":[-85.638685,41.944542]},"n837":{"id":"n837","loc":[-85.638714,41.944611]},"n838":{"id":"n838","loc":[-85.638711,41.944757]},"n839":{"id":"n839","loc":[-85.638774,41.945069]},"n84":{"id":"n84","loc":[-85.637758,41.942339]},"n840":{"id":"n840","loc":[-85.638742,41.945205]},"n841":{"id":"n841","loc":[-85.640267,41.942403]},"n842":{"id":"n842","loc":[-85.640154,41.942404]},"n843":{"id":"n843","loc":[-85.640152,41.942249]},"n844":{"id":"n844","loc":[-85.640266,41.942248]},"n845":{"id":"n845","loc":[-85.640366,41.942599]},"n846":{"id":"n846","loc":[-85.640362,41.942192]},"n847":{"id":"n847","loc":[-85.640146,41.942191]},"n848":{"id":"n848","loc":[-85.640122,41.942196]},"n849":{"id":"n849","loc":[-85.640108,41.942211]},"n85":{"id":"n85","loc":[-85.637836,41.942339]},"n850":{"id":"n850","loc":[-85.640101,41.942236]},"n851":{"id":"n851","loc":[-85.640103,41.94241]},"n852":{"id":"n852","loc":[-85.64011,41.942435]},"n853":{"id":"n853","loc":[-85.640126,41.942445]},"n854":{"id":"n854","loc":[-85.640153,41.942451]},"n855":{"id":"n855","loc":[-85.640183,41.942452]},"n856":{"id":"n856","loc":[-85.640364,41.942452]},"n857":{"id":"n857","loc":[-85.640007,41.942452]},"n858":{"id":"n858","loc":[-85.639449,41.942461]},"n859":{"id":"n859","loc":[-85.640049,41.942391]},"n86":{"id":"n86","loc":[-85.637835,41.942301]},"n860":{"id":"n860","loc":[-85.640052,41.942503]},"n861":{"id":"n861","loc":[-85.639575,41.94251]},"n862":{"id":"n862","loc":[-85.639572,41.942398]},"n863":{"id":"n863","loc":[-85.638782,41.942227]},"n864":{"id":"n864","loc":[-85.63843,41.942226]},"n865":{"id":"n865","loc":[-85.63823,41.942183]},"n866":{"id":"n866","loc":[-85.638363,41.942216],"tags":{"barrier":"gate"}},"n867":{"id":"n867","loc":[-85.6384,41.942223]},"n868":{"id":"n868","loc":[-85.636042,41.942797]},"n869":{"id":"n869","loc":[-85.636308,41.942752]},"n87":{"id":"n87","loc":[-85.637566,41.942367]},"n870":{"id":"n870","loc":[-85.636516,41.942729]},"n871":{"id":"n871","loc":[-85.636782,41.942712]},"n872":{"id":"n872","loc":[-85.636944,41.942706]},"n873":{"id":"n873","loc":[-85.63704,41.942706]},"n874":{"id":"n874","loc":[-85.637237,41.942703]},"n875":{"id":"n875","loc":[-85.637553,41.9427]},"n876":{"id":"n876","loc":[-85.638236,41.942697]},"n877":{"id":"n877","loc":[-85.636284,41.942781]},"n878":{"id":"n878","loc":[-85.636551,41.942641]},"n879":{"id":"n879","loc":[-85.633914,41.943693]},"n88":{"id":"n88","loc":[-85.637566,41.94241]},"n880":{"id":"n880","loc":[-85.63389,41.943708]},"n881":{"id":"n881","loc":[-85.633866,41.943686]},"n882":{"id":"n882","loc":[-85.63389,41.943671]},"n883":{"id":"n883","loc":[-85.633857,41.943609]},"n884":{"id":"n884","loc":[-85.634858,41.944474]},"n885":{"id":"n885","loc":[-85.633988,41.943234]},"n886":{"id":"n886","loc":[-85.633999,41.943485]},"n887":{"id":"n887","loc":[-85.634109,41.943449],"tags":{"emergency":"fire_hydrant"}},"n888":{"id":"n888","loc":[-85.635728,41.942655],"tags":{"emergency":"fire_hydrant"}},"n889":{"id":"n889","loc":[-85.636499,41.942845],"tags":{"man_made":"flagpole"}},"n89":{"id":"n89","loc":[-85.637455,41.94241]},"n890":{"id":"n890","loc":[-85.636197,41.943073]},"n891":{"id":"n891","loc":[-85.636227,41.943073]},"n892":{"id":"n892","loc":[-85.637433,41.942933],"tags":{"addr:city":"Three Rivers","addr:housenumber":"401","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","amenity":"restaurant","cuisine":"pizza","name":"Pizza Hut"}},"n893":{"id":"n893","loc":[-85.637907,41.942879],"tags":{"amenity":"car_wash"}},"n894":{"id":"n894","loc":[-85.637661,41.943018]},"n895":{"id":"n895","loc":[-85.636933,41.942733],"tags":{"emergency":"fire_hydrant"}},"n896":{"id":"n896","loc":[-85.637661,41.94304]},"n897":{"id":"n897","loc":[-85.637562,41.943041]},"n898":{"id":"n898","loc":[-85.637556,41.942725]},"n899":{"id":"n899","loc":[-85.637656,41.942724]},"n9":{"id":"n9","loc":[-85.635159,41.941926]},"n90":{"id":"n90","loc":[-85.637454,41.942367]},"n900":{"id":"n900","loc":[-85.637657,41.942779]},"n901":{"id":"n901","loc":[-85.637983,41.942777]},"n902":{"id":"n902","loc":[-85.637982,41.942616]},"n903":{"id":"n903","loc":[-85.637777,41.942778]},"n904":{"id":"n904","loc":[-85.637775,41.942699]},"n905":{"id":"n905","loc":[-85.637772,41.942618]},"n906":{"id":"n906","loc":[-85.637982,41.942698]},"n907":{"id":"n907","loc":[-85.637941,41.942378],"tags":{"addr:city":"Three Rivers","addr:housenumber":"416","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","name":"Gem Pawnbroker","shop":"pawnbroker"}},"n908":{"id":"n908","loc":[-85.637515,41.942394],"tags":{"second_hand":"only","shop":"car"}},"n909":{"id":"n909","loc":[-85.638743,41.942374],"tags":{"addr:city":"Three Rivers","addr:housenumber":"500","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","name":"William Towing","service:vehicle:towing":"yes","service:vehicle:tyres":"yes","shop":"car_repair"}},"n91":{"id":"n91","loc":[-85.637565,41.942341]},"n910":{"id":"n910","loc":[-85.638594,41.942357]},"n911":{"id":"n911","loc":[-85.634312,41.943562],"tags":{"addr:city":"Three Rivers","addr:housenumber":"145","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","amenity":"cafe","cuisine":"coffee_shop","name":"L.A.'s Coffee Cafe","outdoor_seating":"yes"}},"n912":{"id":"n912","loc":[-85.634404,41.943512]},"n913":{"id":"n913","loc":[-85.634391,41.943519],"tags":{"entrance":"yes"}},"n914":{"id":"n914","loc":[-85.634259,41.943538],"tags":{"entrance":"yes"}},"n915":{"id":"n915","loc":[-85.634247,41.943528]},"n916":{"id":"n916","loc":[-85.633747,41.943322],"tags":{"addr:city":"Three Rivers","addr:housenumber":"132","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","name":"Preferred Insurance Services","office":"insurance"}},"n917":{"id":"n917","loc":[-85.63299,41.943686],"tags":{"addr:city":"Three Rivers","addr:housenumber":"101","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Lynn's Garage","service:vehicle:tyres":"yes","shop":"car_repair"}},"n918":{"id":"n918","loc":[-85.633438,41.944883]},"n919":{"id":"n919","loc":[-85.633265,41.944983]},"n92":{"id":"n92","loc":[-85.637481,41.942341]},"n920":{"id":"n920","loc":[-85.633315,41.945027]},"n921":{"id":"n921","loc":[-85.633376,41.944827]},"n922":{"id":"n922","loc":[-85.633199,41.944922]},"n923":{"id":"n923","loc":[-85.633316,41.944772]},"n924":{"id":"n924","loc":[-85.633147,41.944867]},"n925":{"id":"n925","loc":[-85.633261,41.944719]},"n926":{"id":"n926","loc":[-85.633096,41.944812]},"n927":{"id":"n927","loc":[-85.633191,41.944645]},"n928":{"id":"n928","loc":[-85.632981,41.94476]},"n929":{"id":"n929","loc":[-85.633062,41.94483]},"n93":{"id":"n93","loc":[-85.637481,41.94226]},"n930":{"id":"n930","loc":[-85.633146,41.944602]},"n931":{"id":"n931","loc":[-85.632969,41.944703]},"n932":{"id":"n932","loc":[-85.633008,41.944745]},"n933":{"id":"n933","loc":[-85.633088,41.944545]},"n934":{"id":"n934","loc":[-85.632868,41.944655]},"n935":{"id":"n935","loc":[-85.632941,41.944718]},"n936":{"id":"n936","loc":[-85.633028,41.944483]},"n937":{"id":"n937","loc":[-85.632817,41.944605]},"n938":{"id":"n938","loc":[-85.632923,41.944373]},"n939":{"id":"n939","loc":[-85.632692,41.944485]},"n94":{"id":"n94","loc":[-85.637565,41.94226]},"n940":{"id":"n940","loc":[-85.632871,41.944316]},"n941":{"id":"n941","loc":[-85.632655,41.944421]},"n942":{"id":"n942","loc":[-85.632711,41.944478]},"n943":{"id":"n943","loc":[-85.632825,41.94426]},"n944":{"id":"n944","loc":[-85.632606,41.944363]},"n945":{"id":"n945","loc":[-85.63275,41.94418]},"n946":{"id":"n946","loc":[-85.632588,41.944256]},"n947":{"id":"n947","loc":[-85.632611,41.944279]},"n948":{"id":"n948","loc":[-85.632548,41.944306]},"n949":{"id":"n949","loc":[-85.632512,41.944406]},"n95":{"id":"n95","loc":[-85.637188,41.942217]},"n950":{"id":"n950","loc":[-85.632565,41.944463]},"n951":{"id":"n951","loc":[-85.632579,41.944456]},"n952":{"id":"n952","loc":[-85.632634,41.944518]},"n953":{"id":"n953","loc":[-85.632686,41.944569]},"n954":{"id":"n954","loc":[-85.632745,41.944537]},"n955":{"id":"n955","loc":[-85.632659,41.944587]},"n956":{"id":"n956","loc":[-85.632778,41.944705]},"n957":{"id":"n957","loc":[-85.632815,41.944301],"tags":{"addr:city":"Three Rivers","addr:housenumber":"5","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Access Point Employment","office":"employment_agency"}},"n958":{"id":"n958","loc":[-85.6332,41.944174],"tags":{"addr:city":"Three Rivers","addr:housenumber":"6","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Paisley Emporium","shop":"second_hand"}},"n959":{"id":"n959","loc":[-85.633578,41.944568],"tags":{"addr:city":"Three Rivers","addr:housenumber":"22","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Lowry's Books","shop":"books"}},"n96":{"id":"n96","loc":[-85.637189,41.942303]},"n960":{"id":"n960","loc":[-85.63344,41.944443],"tags":{"addr:city":"Three Rivers","addr:housenumber":"16","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","amenity":"restaurant","cuisine":"pizza","name":"Paisano's Bar and Grill"}},"n961":{"id":"n961","loc":[-85.633009,41.944542],"tags":{"addr:city":"Three Rivers","addr:housenumber":"13","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","amenity":"cafe","cuisine":"american","internet_access":"yes","name":"Main Street Cafe"}},"n962":{"id":"n962","loc":[-85.633674,41.944682],"tags":{"addr:city":"Three Rivers","addr:housenumber":"28","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","leisure":"fitness_centre","name":"Main Street Fitness"}},"n963":{"id":"n963","loc":[-85.633376,41.944868],"tags":{"addr:city":"Three Rivers","addr:housenumber":"27","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","leisure":"fitness_centre","name":"Main Street Barbell"}},"n964":{"id":"n964","loc":[-85.633366,41.944783]},"n965":{"id":"n965","loc":[-85.633296,41.94482]},"n966":{"id":"n966","loc":[-85.633214,41.94487]},"n967":{"id":"n967","loc":[-85.633005,41.944988]},"n968":{"id":"n968","loc":[-85.633269,41.944816]},"n969":{"id":"n969","loc":[-85.633215,41.944842]},"n97":{"id":"n97","loc":[-85.637299,41.942302]},"n970":{"id":"n970","loc":[-85.633245,41.944871]},"n971":{"id":"n971","loc":[-85.633296,41.944845]},"n972":{"id":"n972","loc":[-85.633254,41.944845],"tags":{"natural":"tree"}},"n973":{"id":"n973","loc":[-85.633557,41.945515]},"n974":{"id":"n974","loc":[-85.633279,41.945246]},"n975":{"id":"n975","loc":[-85.63324,41.945226]},"n976":{"id":"n976","loc":[-85.6332,41.945213]},"n977":{"id":"n977","loc":[-85.633133,41.945164]},"n978":{"id":"n978","loc":[-85.63312,41.945132]},"n979":{"id":"n979","loc":[-85.633095,41.945081]},"n98":{"id":"n98","loc":[-85.637299,41.942314]},"n980":{"id":"n980","loc":[-85.633064,41.945047]},"n981":{"id":"n981","loc":[-85.632739,41.944742]},"n982":{"id":"n982","loc":[-85.633281,41.945026]},"n983":{"id":"n983","loc":[-85.633155,41.944903]},"n984":{"id":"n984","loc":[-85.633079,41.944829]},"n985":{"id":"n985","loc":[-85.63304,41.944853]},"n986":{"id":"n986","loc":[-85.632949,41.944776]},"n987":{"id":"n987","loc":[-85.632921,41.944725]},"n988":{"id":"n988","loc":[-85.632859,41.944673]},"n989":{"id":"n989","loc":[-85.632895,41.94505]},"n99":{"id":"n99","loc":[-85.637396,41.942313]},"n990":{"id":"n990","loc":[-85.633336,41.945138]},"n991":{"id":"n991","loc":[-85.633466,41.945265]},"n992":{"id":"n992","loc":[-85.633367,41.945327]},"n993":{"id":"n993","loc":[-85.633163,41.945189]},"n994":{"id":"n994","loc":[-85.633678,41.945309]},"n995":{"id":"n995","loc":[-85.633619,41.945261]},"n996":{"id":"n996","loc":[-85.63355,41.945301]},"n997":{"id":"n997","loc":[-85.633607,41.945352]},"n998":{"id":"n998","loc":[-85.633579,41.945327],"tags":{"entrance":"yes"}},"n999":{"id":"n999","loc":[-85.633445,41.945404]},"r2":{"id":"r2","members":[{"id":"w225","role":"outer","type":"way"}],"tags":{"type":"multipolygon","waterway":"riverbank"}},"r5":{"id":"r5","members":[{"id":"w642","role":"outer","type":"way"}],"tags":{"admin_level":"8","border_type":"city","boundary":"administrative","name":"Three Rivers","place":"city","type":"boundary"}},"w1":{"id":"w1","nodes":["n5","n1797"],"tags":{"highway":"residential","name":"12th Avenue"}},"w10":{"id":"w10","nodes":["n54","n55","n56","n57","n891","n890","n54"],"tags":{"building":"yes"}},"w100":{"id":"w100","nodes":["n451","n915","n452"],"tags":{"highway":"footway"}},"w101":{"id":"w101","nodes":["n461","n462","n463","n464","n465","n466"],"tags":{"barrier":"fence"}},"w102":{"id":"w102","nodes":["n467","n468","n469","n470","n472","n467"],"tags":{"amenity":"parking"}},"w103":{"id":"w103","nodes":["n2597","n2444","n471","n472"],"tags":{"highway":"footway"}},"w104":{"id":"w104","nodes":["n473","n474","n325"],"tags":{"footway":"sidewalk","highway":"footway"}},"w105":{"id":"w105","nodes":["n475","n324","n325"],"tags":{"footway":"sidewalk","highway":"footway"}},"w106":{"id":"w106","nodes":["n886","n452","n476"],"tags":{"footway":"sidewalk","highway":"footway"}},"w107":{"id":"w107","nodes":["n485","n4678","n486","n18"],"tags":{"highway":"service"}},"w108":{"id":"w108","nodes":["n300","n487","n488","n489","n490"],"tags":{"highway":"footway"}},"w109":{"id":"w109","nodes":["n490","n491"],"tags":{"highway":"footway"}},"w11":{"id":"w11","nodes":["n58","n63","n59","n315","n60"],"tags":{"highway":"service"}},"w110":{"id":"w110","nodes":["n492","n493","n494","n495","n496","n497","n492"],"tags":{"building":"yes"}},"w111":{"id":"w111","nodes":["n498","n499","n511"],"tags":{"highway":"service"}},"w112":{"id":"w112","nodes":["n510","n500","n501","n502","n503","n504","n505","n506","n507","n508","n509"],"tags":{"highway":"service"}},"w113":{"id":"w113","nodes":["n511","n510"],"tags":{"covered":"yes","highway":"service"}},"w114":{"id":"w114","nodes":["n512","n513","n514","n515","n512"],"tags":{"building":"yes"}},"w115":{"id":"w115","nodes":["n516","n517","n518","n519","n516"],"tags":{"building":"yes"}},"w116":{"id":"w116","nodes":["n520","n521","n522","n523","n520"],"tags":{"building":"yes"}},"w117":{"id":"w117","nodes":["n524","n525","n526","n527","n528","n529","n530","n531","n532","n533","n534","n535","n524"],"tags":{"building":"yes"}},"w118":{"id":"w118","nodes":["n536","n537","n538","n539","n536"],"tags":{"building":"yes"}},"w119":{"id":"w119","nodes":["n540","n541","n542","n543","n544","n545","n546","n547","n540"],"tags":{"building":"yes"}},"w12":{"id":"w12","nodes":["n61","n314","n70","n62","n63"],"tags":{"highway":"service"}},"w120":{"id":"w120","nodes":["n548","n549","n550","n551","n552","n553","n554","n555","n556","n557","n548"],"tags":{"building":"yes"}},"w121":{"id":"w121","nodes":["n558","n559","n560","n561","n562","n563","n564","n565","n558"],"tags":{"building":"yes"}},"w122":{"id":"w122","nodes":["n566","n567","n568","n569","n566"],"tags":{"building":"yes"}},"w123":{"id":"w123","nodes":["n570","n571","n572","n573","n570"],"tags":{"building":"yes"}},"w124":{"id":"w124","nodes":["n574","n575","n576","n577","n574"],"tags":{"building":"yes"}},"w125":{"id":"w125","nodes":["n578","n579","n580","n581","n578"],"tags":{"building":"yes"}},"w126":{"id":"w126","nodes":["n582","n583","n584","n585","n582"],"tags":{"building":"yes"}},"w127":{"id":"w127","nodes":["n586","n587","n588","n589","n590","n591","n592","n593","n586"],"tags":{"building":"yes"}},"w128":{"id":"w128","nodes":["n594","n595","n596","n597","n598","n599","n600","n601","n594"],"tags":{"building":"yes"}},"w129":{"id":"w129","nodes":["n309","n602","n603"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w13":{"id":"w13","nodes":["n64","n65","n66","n67","n68","n69","n64"],"tags":{"amenity":"parking"}},"w130":{"id":"w130","nodes":["n603","n604"],"tags":{"footway":"sidewalk","highway":"footway"}},"w131":{"id":"w131","nodes":["n604","n605","n606"],"tags":{"footway":"sidewalk","highway":"footway"}},"w132":{"id":"w132","nodes":["n606","n607"],"tags":{"footway":"sidewalk","highway":"footway"}},"w133":{"id":"w133","nodes":["n607","n610","n608","n603"],"tags":{"footway":"sidewalk","highway":"footway"}},"w134":{"id":"w134","nodes":["n609","n610","n611"],"tags":{"highway":"service","service":"driveway","surface":"unpaved"}},"w135":{"id":"w135","nodes":["n244","n245","n246"],"tags":{"highway":"service"}},"w136":{"id":"w136","nodes":["n612","n613","n614","n615","n612"],"tags":{"amenity":"shelter"}},"w137":{"id":"w137","nodes":["n2779","n2788","n2776","n2778","n2775","n2787","n2440","n2437","n629","n2438","n630","n2439","n2407","n2408","n2409"],"tags":{"highway":"residential","name":"Foster Street"}},"w138":{"id":"w138","nodes":["n2779","n625","n626","n627"],"tags":{"highway":"residential","name":"Foster Street","oneway":"yes"}},"w139":{"id":"w139","nodes":["n630","n631","n632","n2437"],"tags":{"highway":"service"}},"w14":{"id":"w14","nodes":["n71","n72","n73","n74","n71"],"tags":{"building":"yes"}},"w140":{"id":"w140","nodes":["n643","n637","n715","n2410"],"tags":{"highway":"footway","name":"Mural Mall"}},"w141":{"id":"w141","nodes":["n639","n2516"],"tags":{"barrier":"wall"}},"w142":{"id":"w142","nodes":["n640","n641","n645","n642","n660","n643","n644"],"tags":{"highway":"service"}},"w143":{"id":"w143","nodes":["n646","n647"],"tags":{"highway":"service"}},"w144":{"id":"w144","nodes":["n654","n655","n656"],"tags":{"barrier":"wall"}},"w145":{"id":"w145","nodes":["n665","n666","n667"],"tags":{"barrier":"wall"}},"w146":{"id":"w146","nodes":["n2727","n662","n2719"],"tags":{"highway":"service","oneway":"yes","service":"parking_aisle"}},"w147":{"id":"w147","nodes":["n2725","n674"],"tags":{"highway":"service","oneway":"yes"}},"w148":{"id":"w148","nodes":["n2464","n2460","n2454","n684","n2455","n2464"],"tags":{"building":"yes"}},"w149":{"id":"w149","nodes":["n2456","n685","n686","n687","n2456"],"tags":{"building":"yes"}},"w15":{"id":"w15","nodes":["n75","n76","n77","n78","n75"],"tags":{"building":"yes"}},"w150":{"id":"w150","nodes":["n685","n688","n689","n690","n691","n692","n686","n685"],"tags":{"building":"yes"}},"w151":{"id":"w151","nodes":["n688","n693","n694","n689","n688"],"tags":{"building":"yes"}},"w152":{"id":"w152","nodes":["n693","n695","n702","n696","n697","n694","n693"],"tags":{"building":"yes"}},"w153":{"id":"w153","nodes":["n695","n698","n699","n700","n701","n702","n695"],"tags":{"building":"yes"}},"w154":{"id":"w154","nodes":["n698","n703","n707","n704","n699","n698"],"tags":{"building":"yes"}},"w155":{"id":"w155","nodes":["n703","n705","n706","n707","n703"],"tags":{"building":"yes"}},"w156":{"id":"w156","nodes":["n705","n708","n709","n706","n705"],"tags":{"building":"yes"}},"w157":{"id":"w157","nodes":["n709","n710","n711","n708","n709"],"tags":{"building":"yes"}},"w158":{"id":"w158","nodes":["n369","n712","n725","n713","n714","n715","n727","n716","n717","n718","n719"],"tags":{"footway":"sidewalk","highway":"footway"}},"w159":{"id":"w159","nodes":["n714","n720","n721"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w16":{"id":"w16","nodes":["n79","n80","n81","n82","n83","n84","n85","n86","n79"],"tags":{"building":"yes"}},"w160":{"id":"w160","nodes":["n729","n721","n722","n964","n723","n724"],"tags":{"footway":"sidewalk","highway":"footway"}},"w161":{"id":"w161","nodes":["n713","n726","n722"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w162":{"id":"w162","nodes":["n727","n2411","n728"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w163":{"id":"w163","nodes":["n729","n730","n731"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w164":{"id":"w164","nodes":["n365","n732","n733","n738"],"tags":{"footway":"sidewalk","highway":"footway"}},"w165":{"id":"w165","nodes":["n724","n734","n367","n735","n736","n737"],"tags":{"footway":"sidewalk","highway":"footway"}},"w166":{"id":"w166","nodes":["n739","n2037","n2038","n2039","n2040","n1623","n2032"],"tags":{"highway":"footway"}},"w167":{"id":"w167","nodes":["n150","n751"],"tags":{"highway":"service"}},"w168":{"id":"w168","nodes":["n752","n753","n754","n755","n752"],"tags":{"building":"yes"}},"w169":{"id":"w169","nodes":["n756","n757","n758","n759","n756"],"tags":{"building":"yes"}},"w17":{"id":"w17","nodes":["n87","n88","n89","n90","n87"],"tags":{"building":"yes"}},"w170":{"id":"w170","nodes":["n760","n761","n762","n763","n764","n765","n760"],"tags":{"building":"yes"}},"w171":{"id":"w171","nodes":["n766","n767","n768","n769","n770","n771","n772","n773","n774","n775","n776","n777","n766"],"tags":{"building":"yes"}},"w172":{"id":"w172","nodes":["n778","n779","n780","n781","n782","n783","n784","n785","n778"],"tags":{"building":"yes"}},"w173":{"id":"w173","nodes":["n786","n787","n788","n789","n786"],"tags":{"building":"yes"}},"w174":{"id":"w174","nodes":["n790","n791","n792","n793","n794","n795","n796","n797","n798","n799","n800","n801","n790"],"tags":{"building":"yes"}},"w175":{"id":"w175","nodes":["n802","n803","n804","n805","n802"],"tags":{"building":"yes"}},"w176":{"id":"w176","nodes":["n806","n807","n808","n809","n810","n811","n812","n813","n814","n815","n806"],"tags":{"building":"yes"}},"w177":{"id":"w177","nodes":["n816","n1140","n817","n818","n819","n820","n821"],"tags":{"highway":"service"}},"w178":{"id":"w178","nodes":["n822","n823","n824","n825","n822"],"tags":{"building":"yes"}},"w179":{"id":"w179","nodes":["n841","n842","n843","n844","n841"],"tags":{"building":"yes"}},"w18":{"id":"w18","nodes":["n91","n92","n93","n94","n91"],"tags":{"building":"yes"}},"w180":{"id":"w180","nodes":["n845","n856","n846"],"tags":{"highway":"service"}},"w181":{"id":"w181","nodes":["n846","n847","n848","n849","n850","n851","n852","n853","n854","n855","n856"],"tags":{"highway":"service","oneway":"yes","service":"drive-through"}},"w182":{"id":"w182","nodes":["n857","n858"],"tags":{"highway":"service"}},"w183":{"id":"w183","nodes":["n859","n860","n861","n862","n859"],"tags":{"amenity":"parking"}},"w184":{"id":"w184","nodes":["n863","n864","n867","n866","n865"],"tags":{"highway":"service"}},"w185":{"id":"w185","nodes":["n883","n884"],"tags":{"barrier":"fence"}},"w186":{"id":"w186","nodes":["n1954","n622","n1955"],"tags":{"highway":"path","name":"Riverwalk Trail"}},"w187":{"id":"w187","nodes":["n621","n1954"],"tags":{"highway":"steps","incline":"up","name":"Riverwalk Trail","surface":"wood"}},"w188":{"id":"w188","nodes":["n2274","n2275","n2276","n2277","n2278","n2279","n1953","n621"],"tags":{"highway":"path","name":"Riverwalk Trail","surface":"wood"}},"w189":{"id":"w189","nodes":["n2273","n2274"],"tags":{"highway":"steps","incline":"down","name":"Riverwalk Trail","surface":"wood"}},"w19":{"id":"w19","nodes":["n95","n96","n97","n98","n99","n100","n101","n102","n95"],"tags":{"building":"yes"}},"w190":{"id":"w190","nodes":["n821","n894","n900","n903","n901"],"tags":{"highway":"service"}},"w191":{"id":"w191","nodes":["n896","n897","n898","n899","n900","n894","n896"],"tags":{"amenity":"parking"}},"w192":{"id":"w192","nodes":["n903","n904","n905"],"tags":{"highway":"service"}},"w193":{"id":"w193","nodes":["n901","n906","n902"],"tags":{"highway":"service"}},"w194":{"id":"w194","nodes":["n912","n913"],"tags":{"highway":"footway"}},"w195":{"id":"w195","nodes":["n914","n915"],"tags":{"highway":"footway"}},"w196":{"id":"w196","nodes":["n2466","n918","n919","n920","n2466"],"tags":{"building":"yes"}},"w197":{"id":"w197","nodes":["n918","n921","n922","n919","n918"],"tags":{"building":"yes"}},"w198":{"id":"w198","nodes":["n923","n925","n926","n924","n923"],"tags":{"building":"yes"}},"w199":{"id":"w199","nodes":["n925","n927","n932","n928","n929","n926","n925"],"tags":{"building":"yes"}},"w2":{"id":"w2","nodes":["n3523","n2182","n2160"],"tags":{"highway":"service"}},"w20":{"id":"w20","nodes":["n103","n104","n105","n106","n107","n108","n109","n110","n111","n112","n113","n114","n103"],"tags":{"building":"yes"}},"w200":{"id":"w200","nodes":["n927","n930","n931","n932","n927"],"tags":{"building":"yes"}},"w201":{"id":"w201","nodes":["n930","n933","n934","n935","n931","n930"],"tags":{"building":"yes"}},"w202":{"id":"w202","nodes":["n933","n936","n937","n934","n933"],"tags":{"building":"yes"}},"w203":{"id":"w203","nodes":["n936","n938","n942","n939","n954","n937","n936"],"tags":{"building":"yes"}},"w204":{"id":"w204","nodes":["n938","n940","n941","n942","n938"],"tags":{"building":"yes"}},"w205":{"id":"w205","nodes":["n940","n943","n944","n941","n940"],"tags":{"building":"yes"}},"w206":{"id":"w206","nodes":["n943","n945","n946","n947","n948","n944","n943"],"tags":{"building":"yes"}},"w207":{"id":"w207","nodes":["n944","n949","n950","n951","n941","n944"],"tags":{"building":"yes"}},"w208":{"id":"w208","nodes":["n941","n951","n952","n939","n942","n941"],"tags":{"building":"yes"}},"w209":{"id":"w209","nodes":["n952","n953","n954","n939","n952"],"tags":{"building":"yes"}},"w21":{"id":"w21","nodes":["n115","n116","n117","n118","n115"],"tags":{"building":"yes"}},"w210":{"id":"w210","nodes":["n953","n955","n956","n934","n937","n954","n953"],"tags":{"building":"yes"}},"w211":{"id":"w211","nodes":["n964","n965"],"tags":{"highway":"footway"}},"w212":{"id":"w212","nodes":["n966","n983","n967","n989"],"tags":{"highway":"footway"}},"w213":{"id":"w213","nodes":["n965","n968","n969","n966","n970","n971","n965"],"tags":{"highway":"footway"}},"w214":{"id":"w214","nodes":["n973","n999","n992","n974","n975","n976","n993","n977","n978","n979","n980","n967","n981","n1000","n1001","n1002","n1003","n1004","n1005","n1006","n1007","n1008","n1009"],"tags":{"footway":"sidewalk","highway":"footway"}},"w215":{"id":"w215","nodes":["n978","n982","n983","n984","n985","n986","n987","n988","n981"],"tags":{"highway":"footway"}},"w216":{"id":"w216","nodes":["n976","n990","n991","n992"],"tags":{"highway":"footway"}},"w217":{"id":"w217","nodes":["n998","n999"],"tags":{"highway":"footway"}},"w218":{"id":"w218","nodes":["n1019","n1020","n1021","n1022","n731","n728","n1023","n1025","n1024","n1019"],"tags":{"footway":"sidewalk","highway":"footway"}},"w219":{"id":"w219","nodes":["n719","n1026","n1027"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w22":{"id":"w22","nodes":["n119","n120","n121","n122","n119"],"tags":{"building":"yes"}},"w220":{"id":"w220","nodes":["n1027","n1028","n1019"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w221":{"id":"w221","nodes":["n2080","n1828","n1863","n1829"],"tags":{"highway":"tertiary","name":"Constantine Street"}},"w222":{"id":"w222","nodes":["n1029","n1030","n1031"],"tags":{"highway":"service"}},"w223":{"id":"w223","nodes":["n2213","n2171","n2183","n2180","n2205","n2177","n2179","n2218","n2200","n2188","n2169","n2196","n2162","n2170","n2211","n2216","n2204","n2220","n2164","n2210","n2217","n2189","n460","n453","n2282"],"tags":{"name":"Rocky River","waterway":"river"}},"w224":{"id":"w224","nodes":["n3750","n3751","n3752"],"tags":{"highway":"service","service":"alley","surface":"unpaved"}},"w225":{"id":"w225","nodes":["n2134","n2127","n2313","n2109","n2112","n2129","n2156","n2146","n2126","n2153","n2288","n2283","n2284","n2131","n2286","n2287","n2285","n2132","n2140","n2289","n2122","n2114","n2149","n2119","n2106","n2111","n2145","n2113","n2117","n2159","n2143","n2123","n2142","n2116","n2154","n2139","n2150","n2157","n2120","n2138","n2130","n2136","n2155","n2107","n2141","n2124","n3754","n2121","n2105","n2108","n3755","n2128","n2110","n2152","n2125","n2135","n2186","n2115","n2144","n2137","n2133","n2148","n2118","n1871","n1875","n1872","n2041","n1873","n2042","n1874","n1884","n1870","n2151","n2147","n2158","n2104","n2134"]},"w226":{"id":"w226","nodes":["n2243","n2280","n2244","n2245","n2246","n2247","n1931","n1932","n1933","n1934","n1935","n1936","n1937","n1938","n4681","n1939","n1940","n1941","n1942","n1943","n1944","n1945","n1946","n1947"],"tags":{"highway":"path","name":"Riverwalk Trail","surface":"asphalt","width":"3"}},"w227":{"id":"w227","nodes":["n2994","n3012","n3011","n2958"],"tags":{"highway":"secondary","name":"Main Street"}},"w228":{"id":"w228","nodes":["n2747","n2762","n2757","n2746","n2761","n2758","n2760","n2755","n2749","n2691","n1028","n2432","n2414","n2413","n2412","n2411","n2410","n720","n726","n370","n368","n2748"],"tags":{"highway":"primary","name":"Main Street"}},"w229":{"id":"w229","nodes":["n2083","n2103","n2102","n2084","n2085","n2086","n2087","n2242","n471","n324","n2101","n332","n1868"],"tags":{"name":"Conrail Railroad","railway":"rail"}},"w23":{"id":"w23","nodes":["n123","n124","n125","n126","n123"],"tags":{"building":"yes"}},"w230":{"id":"w230","nodes":["n2232","n2236","n2231","n2230","n2226","n2241","n2237","n2227","n1182","n2233","n2228","n2229","n1183","n2234","n19","n1891","n20","n2223","n2224","n2238","n2235","n2240","n2225","n2239"],"tags":{"name":"Saint Joseph River","waterway":"river"}},"w231":{"id":"w231","nodes":["n456","n1036","n1037","n1038"],"tags":{"barrier":"wall"}},"w232":{"id":"w232","nodes":["n1034","n1039","n1040"],"tags":{"barrier":"wall"}},"w233":{"id":"w233","nodes":["n1041","n1042","n1043","n1044","n1045","n1046","n1041"],"tags":{"access":"private","leisure":"swimming_pool"}},"w234":{"id":"w234","nodes":["n1047","n1048"],"tags":{"barrier":"hedge"}},"w235":{"id":"w235","nodes":["n1049","n1050","n1051","n1052","n1049"],"tags":{"building":"yes"}},"w236":{"id":"w236","nodes":["n1053","n1054","n1055","n1056","n1057","n1058","n1059","n1060","n1053"],"tags":{"building":"yes"}},"w237":{"id":"w237","nodes":["n1061","n1062","n1063","n1064","n1065","n1061"],"tags":{"building":"yes"}},"w238":{"id":"w238","nodes":["n1066","n1067","n1068","n1069","n1070","n1071","n1066"],"tags":{"building":"yes"}},"w239":{"id":"w239","nodes":["n1072","n1073","n1074","n1075","n1072"],"tags":{"building":"yes"}},"w24":{"id":"w24","nodes":["n127","n128","n129","n130","n127"],"tags":{"building":"yes"}},"w240":{"id":"w240","nodes":["n1076","n1077","n1078","n1079","n1080","n1081","n1076"],"tags":{"building":"yes"}},"w241":{"id":"w241","nodes":["n1082","n1083","n1084","n1085","n1082"],"tags":{"building":"yes"}},"w242":{"id":"w242","nodes":["n1086","n1087","n1088","n1089","n1086"],"tags":{"building":"yes"}},"w243":{"id":"w243","nodes":["n1090","n1091","n1092","n1093","n1094","n1095","n1096","n1097","n1090"],"tags":{"building":"yes"}},"w244":{"id":"w244","nodes":["n1098","n1099","n1100","n1101"],"tags":{"barrier":"fence"}},"w245":{"id":"w245","nodes":["n1102","n835","n30","n2590","n35","n29","n2591","n34","n28","n2592","n2312","n32","n2593","n31","n33","n2594","n2595","n1102"],"tags":{"highway":"service"}},"w246":{"id":"w246","nodes":["n1103","n1139","n1104"],"tags":{"barrier":"fence"}},"w247":{"id":"w247","nodes":["n1105","n1106","n1107","n1108","n1109","n1110","n1111","n1112","n1113","n1114","n1105"],"tags":{"building":"yes"}},"w248":{"id":"w248","nodes":["n1115","n1116","n1117","n1118","n1119","n1120","n1115"],"tags":{"building":"yes"}},"w249":{"id":"w249","nodes":["n1121","n1122","n1123","n1124","n1121"],"tags":{"building":"yes"}},"w25":{"id":"w25","nodes":["n131","n132","n133","n134","n135","n136","n137","n138","n139","n140","n141","n142","n131"],"tags":{"building":"yes"}},"w250":{"id":"w250","nodes":["n1125","n1126","n1127","n1128","n1129","n1130","n1131","n1132","n1133","n1134","n1135","n1136","n1125"],"tags":{"building":"yes"}},"w251":{"id":"w251","nodes":["n1137","n1138","n1139"],"tags":{"barrier":"fence"}},"w252":{"id":"w252","nodes":["n876","n1140","n1141"],"tags":{"footway":"sidewalk","highway":"footway"}},"w253":{"id":"w253","nodes":["n1141","n1142","n1143","n1144","n1145","n1146"],"tags":{"footway":"sidewalk","highway":"footway"}},"w254":{"id":"w254","nodes":["n1146","n4743","n1147","n1148"],"tags":{"footway":"sidewalk","highway":"footway"}},"w255":{"id":"w255","nodes":["n1148","n1149","n1150","n1151"],"tags":{"bridge":"yes","footway":"sidewalk","highway":"footway","layer":"1"}},"w256":{"id":"w256","nodes":["n1151","n1153","n1154","n1155"],"tags":{"footway":"sidewalk","highway":"footway"}},"w257":{"id":"w257","nodes":["n1155","n1156"],"tags":{"bridge":"yes","footway":"sidewalk","highway":"footway","layer":"1"}},"w258":{"id":"w258","nodes":["n1157","n1158"],"tags":{"barrier":"retaining_wall"}},"w259":{"id":"w259","nodes":["n1156","n1161","n1159","n1160","n719"],"tags":{"footway":"sidewalk","highway":"footway"}},"w26":{"id":"w26","nodes":["n143","n608","n144"],"tags":{"highway":"service"}},"w260":{"id":"w260","nodes":["n1162","n1163","n1164","n1165","n1166","n1167","n1168","n1169","n1170","n2528"],"tags":{"highway":"footway"}},"w261":{"id":"w261","nodes":["n1171","n1172","n1173"],"tags":{"barrier":"wall"}},"w262":{"id":"w262","nodes":["n1175","n1176","n1177","n1178","n1179","n1180","n1181","n1175"],"tags":{"natural":"wood"}},"w263":{"id":"w263","nodes":["n1947","n1184","n1948","n1185","n1949","n1957","n1950","n480","n1951","n479","n478","n477","n1952","n1851","n1956","n2248","n619","n618","n2249","n2250","n2251","n617","n2252","n616","n2253","n829","n2254","n827","n828","n2255","n830","n2256","n826","n2257","n831","n2258","n832","n835","n834","n2312","n2267","n2259","n833","n2268","n2260","n836","n2261","n837","n2262","n838","n2263","n2264","n839","n2265","n840","n2266"],"tags":{"highway":"path","name":"Riverwalk Trail","surface":"asphalt","width":"3"}},"w264":{"id":"w264","nodes":["n1186","n1187","n1188","n1189","n1186"],"tags":{"building":"yes"}},"w265":{"id":"w265","nodes":["n1190","n1191","n1192","n1193","n1190"],"tags":{"building":"yes"}},"w266":{"id":"w266","nodes":["n1194","n1195","n1196","n1197","n1198","n1199","n1200","n1201","n1194"],"tags":{"building":"yes"}},"w267":{"id":"w267","nodes":["n1205","n1206","n1207","n1208","n1209","n1210","n1205"],"tags":{"building":"house"}},"w268":{"id":"w268","nodes":["n1211","n1212","n1213","n1214","n1215","n1216","n1217","n1218","n1219","n1220","n1211"],"tags":{"building":"house"}},"w269":{"id":"w269","nodes":["n1221","n1225","n1222","n1223","n1224","n1221"],"tags":{"building":"house"}},"w27":{"id":"w27","nodes":["n145","n147","n146"],"tags":{"highway":"footway"}},"w270":{"id":"w270","nodes":["n1225","n1226","n1227","n1229","n1228"],"tags":{"barrier":"fence"}},"w271":{"id":"w271","nodes":["n1229","n1230"],"tags":{"barrier":"fence"}},"w272":{"id":"w272","nodes":["n1231","n1232","n1233","n1234","n1235","n1236","n1237","n1238","n1231"],"tags":{"building":"house"}},"w273":{"id":"w273","nodes":["n1239","n1240","n1241","n1242","n1243","n1244","n1245","n1246","n1239"],"tags":{"building":"house"}},"w274":{"id":"w274","nodes":["n1247","n1248","n1249","n1250","n1247"],"tags":{"building":"house"}},"w275":{"id":"w275","nodes":["n1251","n1252","n1253","n1254","n1255","n1256","n1251"],"tags":{"building":"house"}},"w276":{"id":"w276","nodes":["n1257","n1258","n1259","n1260","n1257"],"tags":{"building":"shed"}},"w277":{"id":"w277","nodes":["n1261","n1262","n1263","n1264","n1265","n1266","n1267","n1268","n1261"],"tags":{"building":"house"}},"w278":{"id":"w278","nodes":["n1269","n1270","n1271","n1272","n1273","n1274","n1284","n1269"],"tags":{"building":"house"}},"w279":{"id":"w279","nodes":["n1275","n1276","n1277","n1278","n1279","n1280","n1275"],"tags":{"building":"house"}},"w28":{"id":"w28","nodes":["n147","n148"],"tags":{"highway":"footway"}},"w280":{"id":"w280","nodes":["n1281","n1282","n1283","n1284"],"tags":{"barrier":"fence"}},"w281":{"id":"w281","nodes":["n1285","n1286","n1287","n1288","n1285"],"tags":{"building":"house"}},"w282":{"id":"w282","nodes":["n1289","n1290","n1291","n1292","n1293","n1294","n1295","n1296","n1289"],"tags":{"building":"house"}},"w283":{"id":"w283","nodes":["n1297","n1298","n1299","n1300","n1301","n1302","n1297"],"tags":{"access":"private","leisure":"swimming_pool"}},"w284":{"id":"w284","nodes":["n1303","n1304","n1305","n1306","n1307","n1308","n1309","n1310","n1311","n1312","n1303"],"tags":{"building":"house"}},"w285":{"id":"w285","nodes":["n1313","n1314","n1315","n1316","n1313"],"tags":{"building":"house"}},"w286":{"id":"w286","nodes":["n1317","n1318","n1319","n1320","n1321","n1322","n1323","n1324","n1325","n1326","n1327","n1328","n1329","n1330","n1317"],"tags":{"building":"house"}},"w287":{"id":"w287","nodes":["n1331","n1332","n1333","n1334","n1465","n1335","n1336","n1331"],"tags":{"building":"yes"}},"w288":{"id":"w288","nodes":["n1349","n1350","n1351","n1352","n1353","n1354","n1355","n1337","n1338","n1341","n1342","n1343","n1344","n1345","n1346","n1347","n1348","n1339","n1340","n1349"],"tags":{"access":"private","leisure":"swimming_pool"}},"w289":{"id":"w289","nodes":["n1356","n1331"],"tags":{"barrier":"fence"}},"w29":{"id":"w29","nodes":["n149","n874","n150","n151","n897","n898","n875","n152"],"tags":{"highway":"service","oneway":"yes"}},"w290":{"id":"w290","nodes":["n1357","n1358","n1359","n1360","n1357"],"tags":{"building":"shed"}},"w291":{"id":"w291","nodes":["n1358","n1361","n1362"],"tags":{"barrier":"fence"}},"w292":{"id":"w292","nodes":["n1363","n1364","n1365","n1366","n1367","n1368","n1363"],"tags":{"building":"house"}},"w293":{"id":"w293","nodes":["n1369","n1370","n1371","n1372","n1373","n1374","n1369"],"tags":{"leisure":"swimming_pool"}},"w294":{"id":"w294","nodes":["n1367","n1375","n1376","n1377"],"tags":{"barrier":"fence"}},"w295":{"id":"w295","nodes":["n1378","n1379","n1380","n1381","n1378"],"tags":{"building":"house"}},"w296":{"id":"w296","nodes":["n1382","n1383","n1384","n1385","n1386","n1387","n1382"],"tags":{"building":"house"}},"w297":{"id":"w297","nodes":["n1388","n1389","n1390","n1391","n1392","n1393","n1388"],"tags":{"building":"house"}},"w298":{"id":"w298","nodes":["n1394","n1395","n1396","n1397","n1394"],"tags":{"building":"house"}},"w299":{"id":"w299","nodes":["n1398","n1399","n1400","n1401","n1398"],"tags":{"access":"private3","leisure":"swimming_pool"}},"w3":{"id":"w3","nodes":["n1","n2"],"tags":{"highway":"track","name":"Water Street"}},"w30":{"id":"w30","nodes":["n153","n154","n155","n156","n153"],"tags":{"amenity":"parking"}},"w300":{"id":"w300","nodes":["n1402","n1403","n1404","n1405","n1406","n1407","n1408","n1409","n1410","n1411","n1412","n1413","n1402"],"tags":{"building":"house"}},"w301":{"id":"w301","nodes":["n1414","n1415","n1416","n1417","n1414"],"tags":{"building":"garage"}},"w302":{"id":"w302","nodes":["n1406","n1418","n1419","n1403"],"tags":{"barrier":"fence"}},"w303":{"id":"w303","nodes":["n1423","n1424","n1425","n1426","n1427","n1428","n1429","n1430","n1431","n1432","n1423"],"tags":{"building":"house"}},"w304":{"id":"w304","nodes":["n1433","n1434","n1435","n1446","n1436","n1437","n1438","n1439","n1444","n1440","n1441","n1445","n1442","n1443","n1433"],"tags":{"access":"private","leisure":"swimming_pool"}},"w305":{"id":"w305","nodes":["n1447","n1448","n1452","n1453","n1454","n1451","n1449","n1450","n1447"],"tags":{"building":"house"}},"w306":{"id":"w306","nodes":["n1455","n1456","n1457","n1458","n1455"],"tags":{"building":"shed"}},"w307":{"id":"w307","nodes":["n1459","n1460","n1461","n1462","n1459"],"tags":{"building":"shed"}},"w308":{"id":"w308","nodes":["n1463","n1464"],"tags":{"barrier":"fence"}},"w309":{"id":"w309","nodes":["n1465","n1466","n1467","n1468"],"tags":{"barrier":"fence"}},"w31":{"id":"w31","nodes":["n157","n605","n158"],"tags":{"highway":"service"}},"w310":{"id":"w310","nodes":["n1469","n1481","n1463"],"tags":{"barrier":"hedge"}},"w311":{"id":"w311","nodes":["n1470","n1471","n1472","n1473","n1474","n1475","n1480","n1476","n1477","n1478","n1479","n1470"],"tags":{"building":"house"}},"w312":{"id":"w312","nodes":["n1480","n1481"],"tags":{"barrier":"wall"}},"w313":{"id":"w313","nodes":["n1482","n1483","n1484","n1485","n1486","n1487","n1488","n1489","n1490","n1491","n1482"],"tags":{"access":"private","leisure":"swimming_pool"}},"w314":{"id":"w314","nodes":["n1492","n1493","n1494","n1495","n1496","n1497","n1498","n1499","n1500","n1501","n1502","n1503","n1504","n1505","n1492"],"tags":{"building":"house"}},"w315":{"id":"w315","nodes":["n1506","n1507","n1508","n1509","n1510","n1511","n1512","n1513","n1514","n1515","n1506"],"tags":{"building":"house"}},"w316":{"id":"w316","nodes":["n1516","n1517","n1518","n1519","n1520","n1521","n1522","n1523","n1516"],"tags":{"building":"house"}},"w317":{"id":"w317","nodes":["n1524","n1525","n1526","n1527","n1528","n1529","n1530","n1531","n1524"],"tags":{"building":"house"}},"w318":{"id":"w318","nodes":["n1532","n1533"],"tags":{"barrier":"fence"}},"w319":{"id":"w319","nodes":["n1534","n1532","n1535"],"tags":{"barrier":"fence"}},"w32":{"id":"w32","nodes":["n159","n160","n161","n162","n159"],"tags":{"amenity":"parking"}},"w320":{"id":"w320","nodes":["n1536","n1537","n1538","n1539","n1536"],"tags":{"building":"shed"}},"w321":{"id":"w321","nodes":["n1540","n1541","n1542","n1543","n1540"],"tags":{"building":"shed"}},"w322":{"id":"w322","nodes":["n1544","n1545","n1546","n1547","n1544"],"tags":{"building":"shed"}},"w323":{"id":"w323","nodes":["n1548","n1549","n1550","n1551","n1548"],"tags":{"building":"house"}},"w324":{"id":"w324","nodes":["n1552","n1553","n1554","n1555","n1556","n1557","n1558","n1559","n1552"],"tags":{"building":"house"}},"w325":{"id":"w325","nodes":["n1560","n1561","n1562","n1563","n1564","n1565","n1566","n1567","n1560"],"tags":{"building":"house"}},"w326":{"id":"w326","nodes":["n1561","n1568","n1569","n1570"],"tags":{"barrier":"wall"}},"w327":{"id":"w327","nodes":["n1571","n1572"],"tags":{"barrier":"fence"}},"w328":{"id":"w328","nodes":["n1573","n1574","n1575","n1576","n1573"],"tags":{"building":"house"}},"w329":{"id":"w329","nodes":["n1577","n1578","n1579","n1580","n1581","n1582","n1583","n1584","n1585","n1586","n1577"],"tags":{"building":"house"}},"w33":{"id":"w33","nodes":["n157","n163"],"tags":{"highway":"service"}},"w330":{"id":"w330","nodes":["n1587","n1588","n1589","n1590","n1591","n1592","n1593","n1594","n1587"],"tags":{"building":"house"}},"w331":{"id":"w331","nodes":["n1595","n1596","n1597","n1598","n1599","n1600","n1601","n1595"],"tags":{"access":"private","leisure":"swimming_pool"}},"w332":{"id":"w332","nodes":["n1602","n1603","n1604","n1605","n1606","n1607","n1608","n1609","n1611","n1610","n1612","n1613","n1602"],"tags":{"building":"house"}},"w333":{"id":"w333","nodes":["n2018","n1626","n1627","n2017","n2018"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelter"}},"w334":{"id":"w334","nodes":["n2","n3","n2764"],"tags":{"highway":"service","name":"Water Street"}},"w335":{"id":"w335","nodes":["n3","n1628","n1614"],"tags":{"highway":"service"}},"w336":{"id":"w336","nodes":["n3198","n4545","n2747"],"tags":{"highway":"residential","name":"Morris Avenue"}},"w337":{"id":"w337","nodes":["n1629","n3504"],"tags":{"highway":"service","service":"alley","surface":"unpaved"}},"w338":{"id":"w338","nodes":["n1813","n1635","n1814","n1634","n1815","n1632","n1816","n1817"],"tags":{"highway":"service","service":"parking_aisle"}},"w339":{"id":"w339","nodes":["n1827","n4684","n4690","n1842","n4686","n4685","n1826","n1828","n1846","n1645","n1637","n4703","n1641"],"tags":{"highway":"residential","name":"Millard Street"}},"w34":{"id":"w34","nodes":["n164","n165","n166","n171","n866","n172","n167","n168","n169","n910","n170","n164"],"tags":{"amenity":"parking"}},"w340":{"id":"w340","nodes":["n1824","n1825"],"tags":{"highway":"service","service":"parking_aisle"}},"w341":{"id":"w341","nodes":["n1701","n1702","n1703","n1704","n1705","n1706","n1701"],"tags":{"building":"yes"}},"w342":{"id":"w342","nodes":["n1855","n1860","n1856","n1775","n1804","n1776","n1855"],"tags":{"amenity":"parking","fee":"no"}},"w343":{"id":"w343","nodes":["n1757","n1758","n1759","n1760","n1757"],"tags":{"building":"yes"}},"w344":{"id":"w344","nodes":["n1659","n1660","n1661","n1662","n1663","n1664","n1665","n1666","n1659"],"tags":{"building":"school"}},"w345":{"id":"w345","nodes":["n1751","n1752","n1753","n1754","n1755","n1756","n1751"],"tags":{"building":"yes"}},"w346":{"id":"w346","nodes":["n1641","n1676","n1673","n1639","n1810","n1642","n1849","n4759","n1845"],"tags":{"highway":"residential","name":"Douglas Avenue"}},"w347":{"id":"w347","nodes":["n1642","n1643","n1031","n1630","n845","n1631","n816","n1831","n902","n905","n152","n149","n1832","n1850","n878","n1833","n1852","n42","n1834","n61","n60","n1851","n1835"],"tags":{"highway":"primary","name":"Michigan Avenue"}},"w348":{"id":"w348","nodes":["n1650","n1651","n1652","n1653","n1654","n1655","n1656","n1657","n1658","n1650"],"tags":{"leisure":"playground"}},"w349":{"id":"w349","nodes":["n1861","n1818","n1819","n1820","n1821","n1825","n1823","n1639"],"tags":{"highway":"service"}},"w35":{"id":"w35","nodes":["n168","n167","n172"],"tags":{"barrier":"fence","fence_type":"chain_link"}},"w350":{"id":"w350","nodes":["n1783","n1819","n1784","n1857","n1861","n1858","n1783"],"tags":{"amenity":"parking"}},"w351":{"id":"w351","nodes":["n1717","n1718","n1719","n1720","n1717"],"tags":{"building":"yes"}},"w352":{"id":"w352","nodes":["n1743","n1744","n1745","n1746","n1747","n1748","n1749","n1750","n1743"],"tags":{"building":"yes"}},"w353":{"id":"w353","nodes":["n1637","n1636","n1029","n4715","n1630"],"tags":{"highway":"residential","name":"Lincoln Avenue"}},"w354":{"id":"w354","nodes":["n1713","n1714","n1715","n1716","n1713"],"tags":{"building":"yes"}},"w355":{"id":"w355","nodes":["n1689","n1690","n1691","n1692","n1693","n1694","n1695","n1696","n1689"],"tags":{"building":"yes"}},"w356":{"id":"w356","nodes":["n1631","n4717","n1840","n4745","n1841"],"tags":{"highway":"residential","name":"Hook Avenue"}},"w357":{"id":"w357","nodes":["n1737","n1738","n1739","n1740","n1741","n1742","n1737"],"tags":{"building":"yes"}},"w358":{"id":"w358","nodes":["n1707","n1708","n1709","n1710","n1711","n1712","n1707"],"tags":{"building":"yes"}},"w359":{"id":"w359","nodes":["n1829","n4695","n4697","n1843","n4698","n4701","n1638","n4702","n4705","n1636","n4706","n4707","n1633"],"tags":{"highway":"residential","name":"South Street"}},"w36":{"id":"w36","nodes":["n910","n171","n866","n172"],"tags":{"barrier":"fence","fence_type":"chain_link"}},"w360":{"id":"w360","nodes":["n1767","n1768","n1769","n1770","n1771","n1772","n1773","n1774","n1767"],"tags":{"building":"yes"}},"w361":{"id":"w361","nodes":["n1859","n1860","n1804","n1640","n1805","n1817","n1806","n1644","n1811","n1807","n1808","n3419","n1812","n1790","n3418","n3744","n1809","n1813","n1810"],"tags":{"highway":"service"}},"w362":{"id":"w362","nodes":["n1639","n1683","n4710","n1633"],"tags":{"highway":"residential","name":"South Street","oneway":"yes"}},"w363":{"id":"w363","nodes":["n1646","n1647","n1648","n1649","n1646"],"tags":{"leisure":"pitch","pitch":"basketball"}},"w364":{"id":"w364","nodes":["n3820","n3821","n3822","n3823","n3824","n3825","n3826","n3827","n3828","n3829","n3830","n3838","n3839","n3820"],"tags":{"amenity":"school","name":"Three Rivers Middle School"}},"w365":{"id":"w365","nodes":["n1721","n1722","n1723","n1724","n1725","n1726","n1727","n1728","n1729","n1730","n1731","n1732","n1733","n1734","n1735","n1736","n1721"],"tags":{"building":"yes"}},"w366":{"id":"w366","nodes":["n1791","n1792","n1793","n1794","n1795","n1796","n1798","n1799","n1800","n1801","n1802","n1803","n1791"],"tags":{"amenity":"parking"}},"w367":{"id":"w367","nodes":["n1633","n4708","n4711","n1643","n4712","n1838","n4752","n1839"],"tags":{"highway":"residential","name":"Grant Avenue"}},"w368":{"id":"w368","nodes":["n1853","n1687","n1688","n1854","n1853"],"tags":{"amenity":"library","building":"yes","name":"Three Rivers Public Library"}},"w369":{"id":"w369","nodes":["n1777","n1778","n1779","n1780","n1781","n1782","n1777"],"tags":{"amenity":"parking"}},"w37":{"id":"w37","nodes":["n173","n174","n175","n176","n177","n178","n179","n180","n173"],"tags":{"building":"yes"}},"w370":{"id":"w370","nodes":["n1645","n1638","n858","n4718","n1631"],"tags":{"highway":"residential","name":"Hook Avenue"}},"w371":{"id":"w371","nodes":["n3836","n3835","n4624","n3831","n4632","n3834","n3832","n3833","n3830","n3838","n3839","n3837","n3836"],"tags":{"amenity":"school","name":"Three Rivers High School"}},"w372":{"id":"w372","nodes":["n1697","n1698","n1699","n1700","n1697"],"tags":{"building":"yes"}},"w373":{"id":"w373","nodes":["n2891","n1785","n1786","n3394","n1787","n1788","n1789","n1830","n1836","n1837","n1848","n3409","n2891"],"tags":{"amenity":"parking"}},"w374":{"id":"w374","nodes":["n1761","n1762","n1763","n1764","n1765","n1766","n1761"],"tags":{"building":"yes"}},"w375":{"id":"w375","nodes":["n1822","n1823"],"tags":{"highway":"service","service":"parking_aisle"}},"w376":{"id":"w376","nodes":["n1677","n1678","n1679","n1680","n1681","n1682","n1677"],"tags":{"amenity":"parking"}},"w377":{"id":"w377","nodes":["n1676","n1675","n1674","n1673"],"tags":{"highway":"service","oneway":"yes"}},"w378":{"id":"w378","nodes":["n1667","n1668","n1669","n1670","n1671","n1672","n1667"],"tags":{"amenity":"school","name":"Andrews Elementary School"}},"w379":{"id":"w379","nodes":["n1630","n4714","n1847","n4750","n1844"],"tags":{"highway":"residential","name":"Lincoln Avenue"}},"w38":{"id":"w38","nodes":["n181","n182","n183","n185","n184","n181"],"tags":{"building":"yes"}},"w380":{"id":"w380","nodes":["n1683","n3745","n1686","n1633"],"tags":{"highway":"service","oneway":"yes","service":"parking_aisle"}},"w381":{"id":"w381","nodes":["n2022","n2037"],"tags":{"highway":"footway"}},"w382":{"id":"w382","nodes":["n1826","n1863"],"tags":{"highway":"residential"}},"w383":{"id":"w383","nodes":["n2011","n2012","n739","n2013","n2014","n2029","n2011"],"tags":{"amenity":"shelter","building":"yes","shelter_type":"picnic_shelter"}},"w384":{"id":"w384","nodes":["n2064","n2065","n2066","n2067","n2068","n2069","n2070","n2071","n2072","n2073","n2074","n2075","n2076","n2077","n2078","n2079","n2064"],"tags":{"building":"yes"}},"w385":{"id":"w385","nodes":["n1923","n1924","n1925","n1926","n1927","n1928","n1930","n1929","n1923"],"tags":{"natural":"water"}},"w386":{"id":"w386","nodes":["n1827","n14","n1886","n15","n1887","n16","n1888","n18","n17","n1889","n12","n13","n1890","n485","n1864","n11","n10","n2058","n2036","n1865","n2020","n9","n8","n1866","n295","n1867"],"tags":{"highway":"service"}},"w387":{"id":"w387","nodes":["n1846","n1843","n865","n157","n4721","n1831"],"tags":{"highway":"residential","name":"Andrews Street"}},"w388":{"id":"w388","nodes":["n2019","n2020","n2021","n2022","n2023","n2024","n2025","n2026","n2027","n2028","n2029"],"tags":{"highway":"footway"}},"w389":{"id":"w389","nodes":["n2217","n2222","n2221","n2219","n1877","n1879","n1882","n1883","n484","n1885","n483","n1880","n1881","n1878","n1884","n2223"],"tags":{"name":"Rocky River","waterway":"river"}},"w39":{"id":"w39","nodes":["n185","n186","n187"],"tags":{"barrier":"fence"}},"w390":{"id":"w390","nodes":["n2050","n2051","n2052","n2053","n2050"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelter"}},"w391":{"id":"w391","nodes":["n2089","n2090","n2091","n2092","n2093","n2094","n2311","n2095","n2096","n2097","n2098","n1174","n2099","n751","n43","n2062","n4725","n873","n1832"],"tags":{"highway":"residential","name":"Constantine Street"}},"w392":{"id":"w392","nodes":["n1869","n212","n436","n2281","n2081"],"tags":{"highway":"primary","name":"Michigan Avenue"}},"w393":{"id":"w393","nodes":["n1829","n611","n144","n4694","n602","n1832"],"tags":{"highway":"tertiary","name":"Constantine Street"}},"w394":{"id":"w394","nodes":["n1997","n1998","n2000","n1999"],"tags":{"highway":"service","service":"parking_aisle"}},"w395":{"id":"w395","nodes":["n1835","n1869"],"tags":{"bridge":"yes","highway":"primary","name":"Michigan Avenue"}},"w396":{"id":"w396","nodes":["n2000","n2001"],"tags":{"highway":"service","service":"parking_aisle"}},"w397":{"id":"w397","nodes":["n2082","n4688","n1842","n308","n498","n509","n246","n241","n1867","n4645","n293","n1834"],"tags":{"highway":"residential","name":"Spring Street"}},"w398":{"id":"w398","nodes":["n2015","n2016","n2017","n2018","n2015"],"tags":{"building":"yes"}},"w399":{"id":"w399","nodes":["n2062","n45","n2063","n877","n41","n1852"],"tags":{"highway":"service"}},"w4":{"id":"w4","nodes":["n7","n38","n378","n379","n7"],"tags":{"building":"yes"}},"w40":{"id":"w40","nodes":["n188","n189","n190","n191","n192","n193","n188"],"tags":{"building":"house"}},"w400":{"id":"w400","nodes":["n1968","n1969","n1970","n1971","n2007","n1972","n1973","n1978","n1974","n1977","n1976","n1975","n1968"],"tags":{"amenity":"parking"}},"w401":{"id":"w401","nodes":["n1963","n1964"],"tags":{"bridge":"yes","highway":"footway"}},"w402":{"id":"w402","nodes":["n1892","n1893","n1894","n1895","n1896","n1897","n1898","n1899","n1900","n1901","n1902","n1903","n1892"],"tags":{"addr:city":"Three Rivers","addr:housenumber":"112","addr:postcode":"49093","addr:state":"MI","addr:street":"Spring Street","barrier":"fence","name":"Scidmore Park Petting Zoo","tourism":"zoo","zoo":"petting_zoo"}},"w403":{"id":"w403","nodes":["n1957","n1958","n1959","n481","n1960","n482","n1949"],"tags":{"highway":"path"}},"w404":{"id":"w404","nodes":["n2281","n27","n330","n1987","n1988"],"tags":{"highway":"service"}},"w405":{"id":"w405","nodes":["n2249","n2269","n2270","n2271","n2272","n454","n455","n2273"],"tags":{"highway":"path","name":"Riverwalk Trail"}},"w406":{"id":"w406","nodes":["n1947","n1624","n1625","n2030","n2033","n4658","n4659","n2031","n2032","n2021"],"tags":{"highway":"footway"}},"w407":{"id":"w407","nodes":["n2034","n2036","n2009"],"tags":{"highway":"footway"}},"w408":{"id":"w408","nodes":["n1964","n1965","n2002","n1966","n21","n1967","n1969"],"tags":{"highway":"footway"}},"w409":{"id":"w409","nodes":["n1904","n1905","n1906","n1907","n1908","n1909","n748","n1910","n747","n1911","n749","n1912","n750","n1913","n1922","n1914","n1921","n1915","n746","n1916","n745","n1917","n744","n1918","n743","n742","n1919","n741","n1920","n740","n1904"],"tags":{"natural":"water"}},"w41":{"id":"w41","nodes":["n194","n195","n196","n197","n198","n199","n200","n201","n202","n203","n204","n205","n194"],"tags":{"building":"house"}},"w410":{"id":"w410","nodes":["n1868","n2088"],"tags":{"bridge":"yes","name":"Conrail Railroad","railway":"rail"}},"w411":{"id":"w411","nodes":["n2010","n2019","n2009","n2008","n2058","n2035","n1961","n1962","n1947","n1963"],"tags":{"highway":"footway"}},"w412":{"id":"w412","nodes":["n2290","n2043","n2044","n2045","n1872","n2041","n1873","n2042","n1874","n2046","n2047","n2048","n2049","n2290"],"tags":{"addr:city":"Three Rivers","addr:housenumber":"112","addr:postcode":"49093","addr:state":"MI","addr:street":"Spring Street","leisure":"park","name":"Scidmore Park"}},"w413":{"id":"w413","nodes":["n1831","n876","n4720","n821","n2089"],"tags":{"highway":"residential","name":"Andrews Street"}},"w414":{"id":"w414","nodes":["n2002","n2003","n2004","n2005","n2006","n2007"],"tags":{"highway":"footway"}},"w415":{"id":"w415","nodes":["n1979","n1980","n1981","n1982","n1979"],"tags":{"amenity":"parking"}},"w416":{"id":"w416","nodes":["n2054","n2055","n2056","n2057","n2054"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelter"}},"w417":{"id":"w417","nodes":["n2291","n2292","n2293","n2294","n2295","n2296","n2297","n2298","n2299","n1098","n2300","n2301","n2302","n2303","n2304","n2059","n2060","n2305","n2307","n2306","n2310","n2308","n2309","n2291"],"tags":{"leisure":"park","name":"Memory Isle Park"}},"w418":{"id":"w418","nodes":["n2033","n2034","n2035"],"tags":{"highway":"footway"}},"w419":{"id":"w419","nodes":["n1983","n1984","n1985","n1986","n1983"],"tags":{"amenity":"parking"}},"w42":{"id":"w42","nodes":["n206","n207","n208","n209","n210","n211","n206"],"tags":{"building":"house"}},"w420":{"id":"w420","nodes":["n1840","n4746","n4748","n1847","n4749","n4755","n1838","n4754","n4756","n1849"],"tags":{"highway":"residential","name":"French Street"}},"w421":{"id":"w421","nodes":["n2337","n2268"],"tags":{"highway":"path"}},"w422":{"id":"w422","nodes":["n2338","n2339","n2320","n2317","n2319","n2318","n2340","n2341","n2342","n2343","n2344","n2345","n2346","n2347","n2348","n2338"],"tags":{"natural":"water"}},"w423":{"id":"w423","nodes":["n2180","n2349","n2350","n2351","n2352","n2404","n2353","n2354","n2355","n2356","n2357","n2358","n2359","n2360","n2361","n2362","n2363","n2364","n2365","n2366","n2370","n2371","n2372","n2373","n2374","n2375","n2377","n2378","n2380","n2381","n2382","n2383","n2386","n2389","n2390","n2391","n2392","n2393","n2396","n2397","n2401","n2402","n2321","n2322","n2323","n2403","n2180"],"tags":{"natural":"wetland"}},"w424":{"id":"w424","nodes":["n2324","n2316","n1841","n2315","n2314","n1844","n1839","n4758","n1845"],"tags":{"highway":"residential","name":"Pealer Street"}},"w425":{"id":"w425","nodes":["n2267","n2337","n2336","n2335","n2334","n2333","n2332","n2331","n2330","n37","n2329","n2328","n2327","n36","n2326","n2325","n2266"],"tags":{"highway":"path","name":"Riverwalk Trail"}},"w426":{"id":"w426","nodes":["n2478","n681","n680","n679","n2459","n2467","n2487","n2478"],"tags":{"building":"yes"}},"w427":{"id":"w427","nodes":["n2671","n2672","n2673","n2674","n2671"],"tags":{"building":"yes"}},"w428":{"id":"w428","nodes":["n2483","n2482","n2486","n2489","n2492","n2502","n2495","n2480","n2483"],"tags":{"building":"yes"}},"w429":{"id":"w429","nodes":["n2707","n2708","n2716","n2712","n2714","n2713","n2715","n2711","n2710","n2723","n2709","n2707"],"tags":{"amenity":"parking"}},"w43":{"id":"w43","nodes":["n1955","n1956"],"tags":{"footway":"sidewalk","highway":"footway","name":"Riverwalk Trail"}},"w430":{"id":"w430","nodes":["n2471","n2474","n2484","n2479","n2471"],"tags":{"building":"yes"}},"w431":{"id":"w431","nodes":["n2218","n2434","n2436","n2433","n2435","n2210"],"tags":{"name":"Rocky River","waterway":"river"}},"w432":{"id":"w432","nodes":["n2782","n2532","n2783","n2784","n2782"],"tags":{"amenity":"parking"}},"w433":{"id":"w433","nodes":["n2513","n649","n2520","n2514","n2507","n2513"],"tags":{"building":"yes"}},"w434":{"id":"w434","nodes":["n2470","n2468","n2461","n2465","n2470"],"tags":{"building":"yes"}},"w435":{"id":"w435","nodes":["n2598","n2599","n648","n649","n2520","n2598"],"tags":{"building":"yes"}},"w436":{"id":"w436","nodes":["n2639","n2640","n2641","n2642","n2643","n2644","n2645","n2646","n2647","n2648","n2639"],"tags":{"building":"yes"}},"w437":{"id":"w437","nodes":["n2503","n2512","n2508","n2499","n2503"],"tags":{"building":"yes"}},"w438":{"id":"w438","nodes":["n2440","n2800","n2774","n1"],"tags":{"highway":"residential","name":"Water Street"}},"w439":{"id":"w439","nodes":["n2675","n2676","n2677","n2678","n2675"],"tags":{"building":"yes"}},"w44":{"id":"w44","nodes":["n213","n214","n215","n216","n213"],"tags":{"building":"yes"}},"w440":{"id":"w440","nodes":["n2512","n2503","n2507","n2514","n2512"],"tags":{"building":"yes"}},"w441":{"id":"w441","nodes":["n2554","n2717","n674","n2720","n2798"],"tags":{"highway":"service","oneway":"yes"}},"w442":{"id":"w442","nodes":["n2583","n2596","n2584","n2585","n2595","n2586","n2587","n2588","n2589","n2583"],"tags":{"amenity":"parking"}},"w443":{"id":"w443","nodes":["n2629","n2627","n2628","n2616","n2630","n2629"],"tags":{"building":"yes"}},"w444":{"id":"w444","nodes":["n2717","n2724","n670","n2718","n669","n668","n2722","n2727"],"tags":{"highway":"service","oneway":"yes","service":"parking_aisle"}},"w445":{"id":"w445","nodes":["n2572","n2573"],"tags":{"bridge":"yes","highway":"path","name":"Riverwalk Trail"}},"w446":{"id":"w446","nodes":["n2603","n2604","n2601","n2605","n2606","n2607","n2603"],"tags":{"building":"yes"}},"w447":{"id":"w447","nodes":["n2780","n2777","n628","n624","n2779"],"tags":{"highway":"residential","name":"Foster Street","oneway":"yes"}},"w448":{"id":"w448","nodes":["n2733","n2734","n2735","n2736","n2737","n2738","n663","n664","n2739","n2733"],"tags":{"building":"yes"}},"w449":{"id":"w449","nodes":["n2564","n2565","n2566","n2567","n2568","n2794","n2795","n2564"],"tags":{"amenity":"parking"}},"w45":{"id":"w45","nodes":["n217","n218","n219","n220","n217"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelter"}},"w450":{"id":"w450","nodes":["n2799","n2728","n2729","n2730","n2731","n2732","n2799"],"tags":{"building":"yes"}},"w451":{"id":"w451","nodes":["n2441","n1170","n2442","n2575","n2443","n2445","n2444","n2448","n2441"],"tags":{"amenity":"parking"}},"w452":{"id":"w452","nodes":["n2273","n457","n2569","n458","n2570"],"tags":{"highway":"path","name":"Riverwalk Trail"}},"w453":{"id":"w453","nodes":["n2447","n2242","n2448","n2527","n2530"],"tags":{"highway":"service"}},"w454":{"id":"w454","nodes":["n2560","n333","n2561"],"tags":{"highway":"service","service":"parking_aisle"}},"w455":{"id":"w455","nodes":["n2679","n2680","n2681","n2682","n2683","n2684","n2685","n2686","n2687","n2688","n2689","n2690","n2679"],"tags":{"building":"yes"}},"w456":{"id":"w456","nodes":["n2425","n2429","n2424"],"tags":{"bridge":"yes","highway":"residential","name":"Moore Street"}},"w457":{"id":"w457","nodes":["n2487","n2467","n2472","n2480","n2495","n2487"],"tags":{"building":"yes"}},"w458":{"id":"w458","nodes":["n2659","n2660","n2661","n2662","n678","n677","n2663","n2664","n2665","n2666","n675","n676","n2659"],"tags":{"building":"yes"}},"w459":{"id":"w459","nodes":["n2600","n2598","n2599","n2601","n2605","n2602","n2600"],"tags":{"building":"yes"}},"w46":{"id":"w46","nodes":["n221","n222","n223","n224","n221"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelter"}},"w460":{"id":"w460","nodes":["n2468","n2464","n2455","n2457","n2461","n2468"],"tags":{"building":"yes"}},"w461":{"id":"w461","nodes":["n2478","n2473","n683","n682","n2463","n681","n2478"],"tags":{"building":"yes"}},"w462":{"id":"w462","nodes":["n2547","n473","n2548","n2549"],"tags":{"highway":"service","service":"parking_aisle"}},"w463":{"id":"w463","nodes":["n2573","n2574"],"tags":{"highway":"path","name":"Riverwalk Trail"}},"w464":{"id":"w464","nodes":["n2445","n2597","n2527","n2528","n2529","n2530","n2531","n2597"],"tags":{"highway":"service","service":"parking_aisle"}},"w465":{"id":"w465","nodes":["n2571","n459","n2572"],"tags":{"highway":"path","name":"Riverwalk Trail"}},"w466":{"id":"w466","nodes":["n2445","n2574","n2552","n442","n2551","n4727","n323","n2446"],"tags":{"highway":"service"}},"w467":{"id":"w467","nodes":["n2484","n2474","n2477","n2485","n2488","n2484"],"tags":{"building":"yes"}},"w468":{"id":"w468","nodes":["n2695","n2696","n2697","n2698","n2699","n2700","n2701","n2702","n2695"],"tags":{"building":"yes"}},"w469":{"id":"w469","nodes":["n2469","n2476","n2481","n2475","n920","n2466","n2469"],"tags":{"building":"yes"}},"w47":{"id":"w47","nodes":["n1988","n1997","n1989","n25","n24","n1990","n26","n1991","n21","n1992","n2006","n1993","n22","n1994","n23","n1995","n1999","n1996","n2001","n1988"],"tags":{"highway":"service"}},"w470":{"id":"w470","nodes":["n2473","n2470","n2465","n2458","n2462","n683","n2473"],"tags":{"building":"yes"}},"w471":{"id":"w471","nodes":["n2490","n2496","n994","n997","n998","n996","n995","n2485","n2477","n2490"],"tags":{"building":"yes"}},"w472":{"id":"w472","nodes":["n2424","n2426","n2427","n2428"],"tags":{"highway":"residential","name":"Moore Street"}},"w473":{"id":"w473","nodes":["n2432","n1026","n4741","n2554","n2425"],"tags":{"highway":"residential","name":"Moore Street"}},"w474":{"id":"w474","nodes":["n2577","n2576"],"tags":{"bridge":"yes","highway":"footway"}},"w475":{"id":"w475","nodes":["n2497","n2505","n2500","n2493","n2497"],"tags":{"building":"yes"}},"w476":{"id":"w476","nodes":["n2493","n2500","n2501","n2496","n2490","n2493"],"tags":{"building":"yes"}},"w477":{"id":"w477","nodes":["n2431","n360","n4726","n418","n397","n396","n2547","n646","n2447","n644","n2418","n424","n640","n2419","n2420","n2423"],"tags":{"highway":"residential","name":"Railroad Drive"}},"w478":{"id":"w478","nodes":["n2515","n2511","n2498","n2504","n2509","n2515"],"tags":{"building":"yes"}},"w479":{"id":"w479","nodes":["n2525","n651","n650","n2526","n2524","n653","n652","n656","n2523","n654","n2518","n2517","n2521","n2522","n2525"],"tags":{"building":"yes"}},"w48":{"id":"w48","nodes":["n225","n237","n226","n227","n228","n229","n230","n231","n232","n233","n234","n235","n236","n225"],"tags":{"building":"yes"}},"w480":{"id":"w480","nodes":["n2703","n2704","n2710","n2711","n2705","n2706","n2703"],"tags":{"amenity":"parking"}},"w481":{"id":"w481","nodes":["n2796","n2657","n2658","n2797","n2796"],"tags":{"building":"yes"}},"w482":{"id":"w482","nodes":["n2550","n2551","n442","n2552","n2553","n2550"],"tags":{"amenity":"parking"}},"w483":{"id":"w483","nodes":["n2790","n2542"],"tags":{"highway":"service","service":"parking_aisle"}},"w484":{"id":"w484","nodes":["n2311","n1102"],"tags":{"highway":"service"}},"w485":{"id":"w485","nodes":["n2515","n2509","n2516","n2519","n2515"],"tags":{"building":"yes"}},"w486":{"id":"w486","nodes":["n2506","n2502","n2492","n2491","n2494","n2506"],"tags":{"building":"yes"}},"w487":{"id":"w487","nodes":["n2667","n2668","n2669","n2670","n2667"],"tags":{"building":"yes"}},"w488":{"id":"w488","nodes":["n2616","n2608","n2617","n2618","n2619","n2620","n2621","n2622","n2623","n2624","n2625","n2626","n2627","n2628","n2616"],"tags":{"building":"yes"}},"w489":{"id":"w489","nodes":["n2081","n2430"],"tags":{"bridge":"yes","highway":"primary","name":"Michigan Avenue"}},"w49":{"id":"w49","nodes":["n237","n238"],"tags":{"highway":"footway"}},"w490":{"id":"w490","nodes":["n2410","n636","n730","n635","n2409","n2694","n2751","n2765","n2753","n2768","n2754","n2769","n2745","n2766","n4503","n2763","n4501","n2752","n2781"],"tags":{"highway":"residential","name":"Portage Avenue"}},"w491":{"id":"w491","nodes":["n2578","n2579","n2580","n2581","n2578"],"tags":{"amenity":"shelter","building":"yes","shelter_type":"picnic_shelter"}},"w492":{"id":"w492","nodes":["n2556","n2557","n2558","n2559","n2556"],"tags":{"amenity":"parking"}},"w493":{"id":"w493","nodes":["n2460","n2456","n687","n2453","n2454","n2460"],"tags":{"building":"yes"}},"w494":{"id":"w494","nodes":["n2471","n2479","n2476","n2469","n2471"],"tags":{"building":"yes"}},"w495":{"id":"w495","nodes":["n2724","n2725","n673","n672","n671","n2726","n2727"],"tags":{"highway":"service","oneway":"yes","service":"parking_aisle"}},"w496":{"id":"w496","nodes":["n2649","n2650","n2651","n2652","n2653","n2654","n2655","n2656","n2649"],"tags":{"building":"yes"}},"w497":{"id":"w497","nodes":["n2430","n2446","n343","n2101","n2560","n2431","n363","n2748"],"tags":{"highway":"primary","name":"Michigan Avenue"}},"w498":{"id":"w498","nodes":["n2691","n2692","n634","n633","n2693","n2694"],"tags":{"highway":"service"}},"w499":{"id":"w499","nodes":["n2423","n2415","n661","n2416","n2417","n2719","n2721","n2772","n2756","n2773","n2759","n2767"],"tags":{"highway":"residential","name":"West Street"}},"w5":{"id":"w5","nodes":["n380","n381","n382","n383","n429","n430","n380"],"tags":{"building":"yes"}},"w50":{"id":"w50","nodes":["n239","n499","n508","n245","n238","n242","n240"],"tags":{"footway":"sidewalk","highway":"footway"}},"w500":{"id":"w500","nodes":["n2428","n1152","n2421","n2324"],"tags":{"bridge":"yes","highway":"residential","name":"Moore Street"}},"w501":{"id":"w501","nodes":["n2608","n2609","n2610","n2611","n2612","n2613","n2614","n2615","n2617","n2608"],"tags":{"building":"yes"}},"w502":{"id":"w502","nodes":["n2570","n2571"],"tags":{"bridge":"yes","highway":"path","name":"Riverwalk Trail"}},"w503":{"id":"w503","nodes":["n2540","n2542","n2787"],"tags":{"highway":"service"}},"w504":{"id":"w504","nodes":["n2269","n2582","n2250"],"tags":{"highway":"path"}},"w505":{"id":"w505","nodes":["n2631","n2632","n2633","n2634","n2635","n2636","n2637","n2638","n2631"],"tags":{"building":"yes"}},"w506":{"id":"w506","nodes":["n2543","n2544","n2545","n395","n2546","n2543"],"tags":{"amenity":"parking"}},"w507":{"id":"w507","nodes":["n2449","n2450","n2451","n2452","n1162","n2449"],"tags":{"leisure":"pitch","sport":"tennis"}},"w508":{"id":"w508","nodes":["n2554","n1160","n2559","n2558","n659","n2555","n658","n657","n2419"],"tags":{"highway":"service"}},"w509":{"id":"w509","nodes":["n2499","n2508","n2510","n2505","n2497","n2499"],"tags":{"building":"yes"}},"w51":{"id":"w51","nodes":["n241","n242","n243","n244"],"tags":{"highway":"service","surface":"unpaved"}},"w510":{"id":"w510","nodes":["n2575","n2577"],"tags":{"highway":"footway"}},"w511":{"id":"w511","nodes":["n2533","n2534","n2535","n2536","n2537","n2538","n2539","n2785","n2786","n2533"],"tags":{"amenity":"parking"}},"w512":{"id":"w512","nodes":["n2801","n2740","n2741","n2742","n2743","n2744","n2801"],"tags":{"building":"yes"}},"w513":{"id":"w513","nodes":["n2720","n2721"],"tags":{"highway":"service","service":"parking_aisle"}},"w514":{"id":"w514","nodes":["n2788","n2790","n2789","n989","n2540","n2541"],"tags":{"highway":"service","service":"parking_aisle"}},"w515":{"id":"w515","nodes":["n2848","n2849","n2850","n2851","n2803","n2804","n2812"],"tags":{"highway":"residential","name":"Middle Street"}},"w516":{"id":"w516","nodes":["n2852","n2805"],"tags":{"access":"private","highway":"service","name":"Battle Street"}},"w517":{"id":"w517","nodes":["n2863","n2815","n2814","n2812","n2864","n2855","n2865","n2867","n2868"],"tags":{"highway":"secondary","name":"Michigan Avenue","name_1":"State Highway 60","ref":"M 60"}},"w518":{"id":"w518","nodes":["n2859","n2808"],"tags":{"highway":"residential","name":"2nd Avenue"}},"w519":{"id":"w519","nodes":["n2823","n2824","n2825","n2826","n2827","n2828","n2823"],"tags":{"building":"yes"}},"w52":{"id":"w52","nodes":["n247","n248","n249","n250","n247"],"tags":{"amenity":"parking"}},"w520":{"id":"w520","nodes":["n2806","n2807","n2803"],"tags":{"highway":"residential","name":"2nd Avenue"}},"w521":{"id":"w521","nodes":["n2829","n2830","n2831","n2832","n2833","n2834","n2835","n2836","n2837","n2838","n2829"],"tags":{"building":"yes"}},"w522":{"id":"w522","nodes":["n2815","n2813","n2811","n4597","n2846","n4596","n2857","n4601","n2853","n4602","n2861","n4","n2879","n4560","n3550","n5","n1685"],"tags":{"highway":"residential","name":"Washington Street"}},"w523":{"id":"w523","nodes":["n2878","n2811","n2810","n2860","n2880","n2881","n2882"],"tags":{"highway":"residential","name":"5th Avenue"}},"w524":{"id":"w524","nodes":["n2816","n2817","n2818","n2819","n2820","n2821","n2822","n2816"],"tags":{"building":"yes"}},"w525":{"id":"w525","nodes":["n2869","n2856","n2806","n2808","n2814","n2809","n2810","n2847","n2858","n2854","n2870","n2871","n6","n2872","n2839","n2862"],"tags":{"highway":"residential","name":"Wood Street"}},"w526":{"id":"w526","nodes":["n2877","n2809","n2813","n2844","n2843"],"tags":{"highway":"residential","name":"4th Avenue"}},"w527":{"id":"w527","nodes":["n4785","n4784","n2936","n4788","n4787","n4786","n4785"],"tags":{"amenity":"parking"}},"w528":{"id":"w528","nodes":["n2864","n2892","n2893","n2877","n2860","n3840"],"tags":{"highway":"residential","name":"Garden Street"}},"w529":{"id":"w529","nodes":["n2868","n2890"],"tags":{"bridge":"yes","highway":"secondary","name":"Michigan Avenue","name_1":"State Highway 60","ref":"M 60"}},"w53":{"id":"w53","nodes":["n251","n252","n253","n254","n255","n256","n257","n258","n259","n260","n261","n262","n251"],"tags":{"building":"yes"}},"w530":{"id":"w530","nodes":["n2914","n2915","n2916","n2917","n2918","n2919","n2920","n2921","n2922","n2923","n2924","n2925","n2926","n2927","n2928","n2929","n2930","n2931","n2932","n2933","n2914"],"tags":{"building":"yes"}},"w531":{"id":"w531","nodes":["n2958","n2896"],"tags":{"bridge":"yes","highway":"secondary","name":"Main Street"}},"w532":{"id":"w532","nodes":["n2896","n394","n364","n2748"],"tags":{"highway":"secondary","name":"Main Street"}},"w533":{"id":"w533","nodes":["n2800","n2943","n2940","n2941","n2942","n2943"],"tags":{"highway":"service","service":"parking_aisle"}},"w534":{"id":"w534","nodes":["n3836","n3837","n3839","n3838","n3834","n4632","n3831","n4624","n3835","n3836"],"tags":{"barrier":"fence"}},"w535":{"id":"w535","nodes":["n2894","n2944","n2774","n2765"],"tags":{"highway":"residential","name":"5th Avenue"}},"w536":{"id":"w536","nodes":["n2890","n2780","n627","n2889","n2887","n623","n2888","n366","n2748"],"tags":{"highway":"secondary","name":"Michigan Avenue","name_1":"State Highway 60","ref":"M 60"}},"w537":{"id":"w537","nodes":["n2895","n738","n2887","n737","n2913"],"tags":{"highway":"residential","name":"Water Street"}},"w538":{"id":"w538","nodes":["n2855","n3756","n2884","n2885","n2886","n2945","n2946","n2947","n2948","n2949","n2950","n2951","n2952","n2953","n2955","n2848","n2956","n2856"],"tags":{"highway":"residential","name":"River Drive"}},"w539":{"id":"w539","nodes":["n2882","n2894"],"tags":{"bridge":"yes","highway":"residential","name":"5th Avenue"}},"w54":{"id":"w54","nodes":["n263","n264","n265","n266","n267","n268","n269","n270","n271","n272","n273","n274","n275","n276","n263"],"tags":{"building":"yes"}},"w540":{"id":"w540","nodes":["n2987","n2964","n2981","n2983","n2966","n2982","n2962","n2960","n2967","n2965","n2984","n2977","n2968","n2976","n2986","n2988","n2963","n2970","n2969","n2979","n2974","n2980","n2959","n2973","n2985","n2961","n2975","n2971","n2972","n2978","n2898","n2907","n2912","n2909","n2911","n2901","n2903","n2904","n2906","n2902","n2900","n2910","n2908","n2899","n2897","n2905","n2186","n2233"],"tags":{"name":"Portage River","waterway":"river"}},"w541":{"id":"w541","nodes":["n2852","n2851","n3003"],"tags":{"highway":"residential","name":"1st Avenue"}},"w542":{"id":"w542","nodes":["n2991","n3004","n2994"],"tags":{"highway":"residential","name":"River Street"}},"w543":{"id":"w543","nodes":["n2993","n2989"],"tags":{"bridge":"yes","highway":"residential","name":"6th Street"}},"w544":{"id":"w544","nodes":["n2995","n2996","n2997","n2998","n2999","n3000","n3001","n3002","n2990","n2991","n2993"],"tags":{"highway":"residential","name":"6th Street"}},"w545":{"id":"w545","nodes":["n2989","n2992","n2848"],"tags":{"highway":"residential","name":"6th Street"}},"w546":{"id":"w546","nodes":["n2313","n3169","n3170","n3171","n3172","n3173","n3174","n3175","n3176","n3177","n3178","n3179","n3180","n3191","n3181","n3190","n3182","n3183","n3184","n3185","n3186","n3187","n3188","n3189","n3160","n3161","n3162","n2126","n2146","n2156","n2129","n2112","n2109","n2313"],"tags":{"natural":"wetland"}},"w547":{"id":"w547","nodes":["n2088","n3013","n3015","n3014","n3017","n3018"],"tags":{"name":"Conrail Railroad","railway":"rail"}},"w548":{"id":"w548","nodes":["n3083","n3084","n3085","n3086","n3083"],"tags":{"building":"yes"}},"w549":{"id":"w549","nodes":["n3020","n2288","n2283","n2284","n2131","n2286","n2287","n2285","n2132","n2140","n2289","n3020"],"tags":{"leisure":"park","name":"Conservation Park"}},"w55":{"id":"w55","nodes":["n277","n278","n279","n280","n281","n282","n283","n284","n277"],"tags":{"building":"yes"}},"w550":{"id":"w550","nodes":["n3056","n3042","n3041","n3040","n3039","n3038","n3037","n3036","n3044","n3035","n3034","n3043","n3016","n3056","n3019","n3015","n3012"],"tags":{"highway":"service"}},"w551":{"id":"w551","nodes":["n3044","n3045","n3046","n3047","n3048","n3049","n3050","n3051","n3052","n3053","n3054","n3055","n3016"],"tags":{"highway":"footway"}},"w552":{"id":"w552","nodes":["n3117","n3118","n3119","n3120","n3121","n3122","n3117"],"tags":{"building":"yes"}},"w553":{"id":"w553","nodes":["n3123","n3124","n3129","n3125","n3126","n3123"],"tags":{"building":"yes"}},"w554":{"id":"w554","nodes":["n3069","n3070","n3071","n3072","n3073","n3074","n3075","n3076","n3077","n3078","n3079","n3080","n3081","n3082","n3069"],"tags":{"building":"yes"}},"w555":{"id":"w555","nodes":["n3087","n3088","n3089","n3090","n3087"],"tags":{"building":"yes"}},"w556":{"id":"w556","nodes":["n3113","n3114","n3115","n3116","n3113"],"tags":{"building":"yes"}},"w557":{"id":"w557","nodes":["n3103","n3104","n3105","n3106","n3103"],"tags":{"building":"yes"}},"w558":{"id":"w558","nodes":["n3127","n3128","n3129","n3124","n3127"],"tags":{"building":"yes"}},"w559":{"id":"w559","nodes":["n3137","n3141","n3142","n3138","n3139","n3140","n3137"],"tags":{"building":"yes"}},"w56":{"id":"w56","nodes":["n285","n286","n287","n288","n285"],"tags":{"amenity":"parking"}},"w560":{"id":"w560","nodes":["n3091","n3092","n3093","n3094","n3091"],"tags":{"building":"yes"}},"w561":{"id":"w561","nodes":["n3155","n3157","n3158","n3159","n3156","n3155"],"tags":{"building":"yes"}},"w562":{"id":"w562","nodes":["n3057","n3058","n3059","n3060","n3057"],"tags":{"building":"yes"}},"w563":{"id":"w563","nodes":["n3107","n3108","n3109","n3110","n3111","n3112","n3107"],"tags":{"building":"yes"}},"w564":{"id":"w564","nodes":["n3134","n3135","n3136","n3131","n3134"],"tags":{"building":"yes"}},"w565":{"id":"w565","nodes":["n3143","n3144","n3145","n3146","n3143"],"tags":{"building":"yes"}},"w566":{"id":"w566","nodes":["n3095","n3096","n3097","n3098","n3095"],"tags":{"building":"yes"}},"w567":{"id":"w567","nodes":["n3130","n3131","n3136","n3132","n3133","n3130"],"tags":{"building":"yes"}},"w568":{"id":"w568","nodes":["n3025","n3026","n3027","n3028","n3029","n3030","n3031","n3033","n3032","n3025"],"tags":{"amenity":"parking"}},"w569":{"id":"w569","nodes":["n3061","n3062","n3063","n3064","n3061"],"tags":{"building":"yes"}},"w57":{"id":"w57","nodes":["n289","n290","n291","n292","n289"],"tags":{"amenity":"parking"}},"w570":{"id":"w570","nodes":["n3155","n3156","n3152","n3153","n3155"],"tags":{"building":"yes"}},"w571":{"id":"w571","nodes":["n3099","n3100","n3101","n3102","n3099"],"tags":{"building":"yes"}},"w572":{"id":"w572","nodes":["n3147","n3148","n3149","n3150","n3147"],"tags":{"building":"yes"}},"w573":{"id":"w573","nodes":["n3039","n2284"],"tags":{"highway":"service"}},"w574":{"id":"w574","nodes":["n3151","n3152","n3153","n3154","n3151"],"tags":{"building":"yes"}},"w575":{"id":"w575","nodes":["n3021","n3022","n3023","n3024","n3021"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelter"}},"w576":{"id":"w576","nodes":["n3065","n3066","n3067","n3068","n3065"],"tags":{"building":"yes"}},"w577":{"id":"w577","nodes":["n2944","n3192","n3757","n3813","n3814","n3815","n3816","n3817","n3818","n3819"],"tags":{"highway":"service","name":"Willow Drive","service":"driveway","surface":"unpaved"}},"w578":{"id":"w578","nodes":["n2163","n2165","n2166","n2167","n2168","n2172","n2173","n2174","n2175","n2176","n2178","n2181","n2163"],"tags":{"building":"yes"}},"w579":{"id":"w579","nodes":["n2754","n3195","n3204","n3205","n4537","n4540","n3206","n4530","n4536","n3207","n4524","n3199","n4521","n3197","n1032"],"tags":{"highway":"residential","name":"Elm Street"}},"w58":{"id":"w58","nodes":["n240","n293","n294"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w580":{"id":"w580","nodes":["n2184","n2185","n2187","n2190","n2191","n2192","n2184"],"tags":{"building":"yes"}},"w581":{"id":"w581","nodes":["n2765","n3208","n3211","n2755","n3280","n2756","n3346"],"tags":{"highway":"residential","name":"Kelsey Street"}},"w582":{"id":"w582","nodes":["n2753","n3194","n3193","n3201","n3196","n4551","n3202","n4550","n3203","n3200","n3198","n1033"],"tags":{"highway":"residential","name":"Walnut Street"}},"w583":{"id":"w583","nodes":["n3272","n4469","n4588","n2879","n4564","n2872"],"tags":{"highway":"residential","name":"10th Avenue"}},"w584":{"id":"w584","nodes":["n3243","n3242","n3241","n3240","n3243"],"tags":{"building":"industrial"}},"w585":{"id":"w585","nodes":["n3273","n3274","n4631","n4593","n3275","n4592","n2846","n4611","n2847"],"tags":{"highway":"residential","name":"6th Avenue"}},"w586":{"id":"w586","nodes":["n3276","n4591","n2853","n4605","n2854"],"tags":{"highway":"residential","name":"8th Avenue"}},"w587":{"id":"w587","nodes":["n3269","n3268","n3267","n3266","n3265","n3264","n3263","n3262","n3269"],"tags":{"building":"industrial"}},"w588":{"id":"w588","nodes":["n3277","n4599","n2857","n4598","n4608","n2858"],"tags":{"highway":"residential","name":"7th Avenue"}},"w589":{"id":"w589","nodes":["n3239","n3238","n3271","n3270","n3237","n3236","n3235","n3234","n3239"],"tags":{"building":"yes"}},"w59":{"id":"w59","nodes":["n294","n295","n296","n297","n298","n299","n300","n301","n302","n303","n491","n304","n305","n306","n307"],"tags":{"footway":"sidewalk","highway":"footway"}},"w590":{"id":"w590","nodes":["n3278","n4458","n4589","n4604","n2861"],"tags":{"highway":"residential","name":"9th Avenue"}},"w591":{"id":"w591","nodes":["n3253","n3252","n3251","n3250","n3249","n3248","n3253"],"tags":{"building":"industrial"}},"w592":{"id":"w592","nodes":["n3229","n3228","n3227","n3226","n3225","n3224","n3223","n3222","n3221","n3220","n3219","n3218","n3217","n3216","n3215","n3214","n3213","n3212","n3229"],"tags":{"natural":"water","water":"pond"}},"w593":{"id":"w593","nodes":["n3261","n3260","n3259","n3258","n3257","n3256","n3255","n3254","n3261"],"tags":{"building":"industrial"}},"w594":{"id":"w594","nodes":["n3233","n3232","n3231","n3230","n3233"],"tags":{"building":"yes"}},"w595":{"id":"w595","nodes":["n3247","n3246","n3245","n3244","n3247"],"tags":{"building":"industrial"}},"w596":{"id":"w596","nodes":["n2769","n3195","n3193","n3209","n2758","n2759","n3279"],"tags":{"highway":"residential","name":"Armitage Street"}},"w597":{"id":"w597","nodes":["n2193","n2194","n2195","n2197","n2193"],"tags":{"building":"yes"}},"w598":{"id":"w598","nodes":["n3404","n3403","n3402","n3401","n3400","n3399","n3398","n3397","n3373","n3372","n3396","n3395","n3404"],"tags":{"building":"school"}},"w6":{"id":"w6","nodes":["n879","n880","n881","n882","n879"],"tags":{"building":"shed"}},"w60":{"id":"w60","nodes":["n239","n308","n307"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w600":{"id":"w600","nodes":["n3387","n3386","n3316","n3315","n3314","n3313","n3387"],"tags":{"building":"yes"}},"w601":{"id":"w601","nodes":["n3304","n3303","n3302","n3301","n3385","n3384","n3300","n3299","n3304"],"tags":{"building":"yes"}},"w602":{"id":"w602","nodes":["n3334","n3333","n3332","n3331","n3330","n3329","n3328","n3327","n3326","n3325","n3324","n3323","n3322","n3321","n3320","n3319","n3318","n3317","n3334"],"tags":{"building":"yes"}},"w603":{"id":"w603","nodes":["n3353","n3352","n3347","n3280","n2798"],"tags":{"highway":"service","service":"alley","surface":"unpaved"}},"w604":{"id":"w604","nodes":["n3753","n3211","n3383"],"tags":{"highway":"service","service":"alley"}},"w605":{"id":"w605","nodes":["n3290","n3289","n3288","n3287","n3286","n3285","n3284","n3283","n3282","n3281","n3290"],"tags":{"building":"yes"}},"w606":{"id":"w606","nodes":["n2198","n2199","n2201","n2202","n2203","n2206","n2198"],"tags":{"building":"yes"}},"w607":{"id":"w607","nodes":["n2198","n2207"],"tags":{"barrier":"wall"}},"w608":{"id":"w608","nodes":["n2751","n3208","n3210","n3209","n3415","n3410","n3414","n3413","n3412","n3416"],"tags":{"highway":"residential","name":"East Street"}},"w609":{"id":"w609","nodes":["n2772","n3346","n3746","n3748","n3747","n3345","n3378","n3279","n3411"],"tags":{"highway":"residential","name":"Maple Street"}},"w61":{"id":"w61","nodes":["n309","n310","n311","n312","n313","n240"],"tags":{"footway":"sidewalk","highway":"footway"}},"w610":{"id":"w610","nodes":["n3379","n3380","n3382","n3381","n3379"],"tags":{"leisure":"park","name":"LaFayette Park"}},"w611":{"id":"w611","nodes":["n2768","n3194","n3210","n3753","n2760","n3353","n2773","n3378"],"tags":{"highway":"residential","name":"Bennett Street"}},"w612":{"id":"w612","nodes":["n2751","n3383","n2749","n2798","n2772"],"tags":{"highway":"residential","name":"Market Street"}},"w613":{"id":"w613","nodes":["n3298","n3297","n3296","n3295","n3294","n3293","n3292","n3291","n3298"],"tags":{"building":"yes"}},"w614":{"id":"w614","nodes":["n3375","n3406","n3405","n3374","n3375"],"tags":{"leisure":"playground"}},"w615":{"id":"w615","nodes":["n3393","n3344","n3343","n3342","n3341","n3340","n3339","n3338","n3337","n3392","n3391","n3390","n3389","n3336","n3335","n3388","n3393"],"tags":{"building":"yes"}},"w616":{"id":"w616","nodes":["n3376","n3407","n3408","n3377","n3376"],"tags":{"amenity":"school","name":"Three Rivers Elementary School"}},"w617":{"id":"w617","nodes":["n3312","n3311","n3310","n3309","n3308","n3307","n3306","n3305","n3312"],"tags":{"building":"yes"}},"w619":{"id":"w619","nodes":["n2863","n3424","n3425","n3426","n3427","n3428","n3429","n3430","n3431","n3432","n3433","n2844"],"tags":{"highway":"secondary","name":"Michigan Avenue","ref":"M 60"}},"w62":{"id":"w62","nodes":["n876","n906","n904","n875","n874","n873","n872","n871","n870","n869","n41","n868","n146","n314","n315","n1956"],"tags":{"footway":"sidewalk","highway":"footway"}},"w620":{"id":"w620","nodes":["n2844","n3420","n3421","n3422","n3439","n2859","n3437","n3493","n3496","n3500","n3497"],"tags":{"highway":"residential"}},"w621":{"id":"w621","nodes":["n3468","n3469","n3470","n3471","n3468"],"tags":{"building":"yes"}},"w622":{"id":"w622","nodes":["n3417","n3436","n3438","n3491","n3488","n3492","n3495","n3494","n3498","n3487","n3499","n3490","n3489","n4800","n3417"],"tags":{"landuse":"cemetery","name":"Riverside Cemetery"}},"w623":{"id":"w623","nodes":["n3440","n3441","n3442","n3443","n3444","n3445","n3440"],"tags":{"building":"yes"}},"w624":{"id":"w624","nodes":["n3446","n3447","n3448","n3449","n3450","n3451","n3452","n3453","n3454","n3455","n3456","n3457","n3458","n3459","n3460","n3461","n3462","n3463","n3464","n3465","n3466","n3467","n3446"],"tags":{"building":"yes"}},"w625":{"id":"w625","nodes":["n2844","n3434","n3435","n2878","n3275","n4621","n3276","n3278","n4463","n3272","n3472","n3474","n3475","n3476","n3477","n3478","n1202","n3479","n3480","n3481","n1203","n3482","n3483","n3484","n3485","n4574","n3486","n3473"],"tags":{"highway":"secondary","name":"Jefferson Street","name_1":"State Highway 60","ref":"M 60"}},"w626":{"id":"w626","nodes":["n3439","n3423","n2863"],"tags":{"highway":"unclassified","name":"Michigan Avenue","name_1":"State Highway 60"}},"w627":{"id":"w627","nodes":["n3500","n3005"],"tags":{"highway":"service"}},"w628":{"id":"w628","nodes":["n3491","n3488","n3492","n3010","n3009","n3005","n3008","n3007","n3006","n3502","n3491"],"tags":{"leisure":"park","name":"Marina Park"}},"w629":{"id":"w629","nodes":["n2208","n2209","n2212","n2214","n2208"],"tags":{"building":"yes"}},"w63":{"id":"w63","nodes":["n1955","n316"],"tags":{"footway":"sidewalk","highway":"footway"}},"w630":{"id":"w630","nodes":["n2757","n3414","n3202","n4542","n3206","n4538","n3750","n3503","n1629","n4500","n2763","n4502","n2764","n3508"],"tags":{"highway":"residential","name":"Hoffman Street"}},"w631":{"id":"w631","nodes":["n2215","n2750","n2770","n2771","n2215"],"tags":{"building":"yes"}},"w632":{"id":"w632","nodes":["n2766","n3504","n3507","n3751","n3205","n3196","n3410","n2746"],"tags":{"highway":"residential","name":"Cushman Street"}},"w633":{"id":"w633","nodes":["n2745","n3749","n3507","n4535","n3503"],"tags":{"highway":"residential","name":"Pine Street"}},"w634":{"id":"w634","nodes":["n3510","n3511","n3512","n3509","n3510"],"tags":{"leisure":"park","name":"Bowman Park"}},"w636":{"id":"w636","nodes":["n2745","n3752","n3204","n3201","n3415","n2761","n2767","n3411"],"tags":{"highway":"residential","name":"Wheeler Street"}},"w637":{"id":"w637","nodes":["n3550","n4586","n4476","n3472"],"tags":{"highway":"residential","name":"11th Avenue"}},"w638":{"id":"w638","nodes":["n3508","n3518"],"tags":{"bridge":"yes","highway":"residential","name":"Hoffman Street"}},"w639":{"id":"w639","nodes":["n3518","n1204","n2862","n3519","n3520","n3521","n3522","n3523","n2161","n3524","n3549","n3552","n4239","n3551","n4577","n4582","n4578","n4583","n4579","n4574"],"tags":{"highway":"residential","name":"Hoffman Street"}},"w64":{"id":"w64","nodes":["n316","n317"],"tags":{"bridge":"yes","footway":"sidewalk","highway":"footway","layer":"1"}},"w640":{"id":"w640","nodes":["n3634","n3640","n3676","n3633","n3678","n3648","n3638","n3683","n3600","n3579","n3679","n3677","n2987","n3592","n3588","n3608","n3559","n3617","n3620","n3660","n3553","n3533","n3530","n3531","n3525","n3527","n3526","n3532","n3529","n3528","n3667","n3627","n3623","n3625","n3601","n3687","n3671","n3644","n3626","n3673","n3582","n3693","n3605","n3619","n3651","n3650","n3615","n3663","n3631","n3596","n3604","n3655","n3586","n3595","n3701","n3603","n3686","n3611","n3568","n3674","n3613","n3580","n3562","n3564","n3689","n3585","n3670","n3659","n3684","n3680","n3646","n3558","n3556","n3692","n3563","n3575","n3571","n3675","n3557","n3700","n3656","n3622","n3657","n3565","n3669","n3658","n3618","n3624","n3688","n3610","n3570","n3645","n3649","n3583","n3694","n3561","n3554","n3614","n3698","n3581","n3635","n3641","n3569","n3647","n3628","n3598","n3696","n3665","n3639","n3607","n3695","n3642","n3672","n3577","n3643","n3691","n3602","n3576","n3591","n3560","n3606","n3685","n3597","n3629","n3661","n3654","n3616","n3697","n3578","n3609","n3653","n3699","n3566","n3637","n3567","n3666","n3555","n3599","n3590","n3572","n3593","n3690","n3681","n3612","n3682","n3668","n3587","n3621","n3636","n3662","n3589","n3573","n3652","n3664","n3632","n3574","n3594","n3584","n3630","n3634"],"tags":{"landuse":"reservoir","name":"Hoffman Pond","natural":"water"}},"w641":{"id":"w641","nodes":["n2988","n3534","n3535","n3536","n3537","n3538","n3539","n3540","n3541","n3542","n3543","n3544","n3545","n3546","n3547","n3548","n2970"],"tags":{"waterway":"river"}},"w642":{"id":"w642","nodes":["n3702","n3703","n3704","n3705","n3706","n3707","n3708","n3709","n3710","n3711","n3712","n3713","n3714","n3715","n3716","n3717","n3718","n3719","n3720","n3721","n3722","n3723","n3724","n3725","n3726","n3727","n3728","n3729","n3730","n3731","n3732","n3733","n3734","n3735","n3736","n3737","n3738","n3739","n3740","n3741","n3742","n3743","n3702"],"tags":{"admin_level":"8","boundary":"administrative"}},"w643":{"id":"w643","nodes":["n2839","n2873"],"tags":{"highway":"service","service":"driveway"}},"w644":{"id":"w644","nodes":["n2873","n2840"],"tags":{"bridge":"yes","highway":"service","layer":"1","service":"driveway"}},"w645":{"id":"w645","nodes":["n2840","n2841","n2842","n2845","n2866"],"tags":{"highway":"service","service":"driveway","surface":"unpaved"}},"w646":{"id":"w646","nodes":["n2752","n3759","n1420","n1421","n1422","n3758","n4507","n4506","n4505","n4520","n3199","n4522","n4504","n4546","n3200","n4547","n3412"],"tags":{"highway":"residential","name":"Flower Street"}},"w647":{"id":"w647","nodes":["n2874","n2875","n2876","n2954","n2874"],"tags":{"building":"industrial"}},"w648":{"id":"w648","nodes":["n3778","n3779","n3780","n3781","n3782","n3783","n3778"],"tags":{"building":"yes"}},"w649":{"id":"w649","nodes":["n3197","n4543","n4544","n3198"],"tags":{"highway":"residential","name":"Morris Avenue","surface":"unpaved"}},"w65":{"id":"w65","nodes":["n317","n318","n319","n320","n321"],"tags":{"footway":"sidewalk","highway":"footway"}},"w650":{"id":"w650","nodes":["n3207","n4526","n4528","n4548","n3203","n4549","n3413","n2762"],"tags":{"highway":"residential","name":"Adams Street"}},"w651":{"id":"w651","nodes":["n3788","n3785","n3786","n3787","n3788"],"tags":{"power":"station"}},"w652":{"id":"w652","nodes":["n2957","n3163","n3241"],"tags":{"barrier":"wall"}},"w653":{"id":"w653","nodes":["n3549","n3802","n3803","n3800","n3801"],"tags":{"highway":"service","surface":"unpaved"}},"w654":{"id":"w654","nodes":["n3164","n3165","n3166","n3167","n3168","n3505","n3164"],"tags":{"building":"yes"}},"w655":{"id":"w655","nodes":["n3506","n3517","n3760","n3761","n3762","n3763","n3506"],"tags":{"building":"yes"}},"w656":{"id":"w656","nodes":["n3764","n3765","n3766","n3767","n3768","n3769","n3770","n3771","n3764"],"tags":{"building":"yes"}},"w657":{"id":"w657","nodes":["n3772","n3773","n3774","n3775","n3772"],"tags":{"building":"yes"}},"w658":{"id":"w658","nodes":["n3776","n3777","n3784","n3789","n3776"],"tags":{"building":"yes"}},"w659":{"id":"w659","nodes":["n3930","n3931","n3932","n3933","n3934","n3935","n3936","n3937","n3938","n3930"],"tags":{"leisure":"pitch","sport":"baseball"}},"w66":{"id":"w66","nodes":["n321","n322"],"tags":{"bridge":"yes","footway":"sidewalk","highway":"footway","layer":"1"}},"w660":{"id":"w660","nodes":["n3982","n3842","n3864","n3865","n2938","n3866","n2939","n3867","n3868","n3858","n2937","n3869","n2935","n2934","n3870","n3348","n3862"],"tags":{"highway":"service"}},"w661":{"id":"w661","nodes":["n3968","n3969"],"tags":{"highway":"footway"}},"w662":{"id":"w662","nodes":["n3875","n3876","n3877","n3878","n3879","n3880","n3881","n3882","n3875"],"tags":{"amenity":"parking"}},"w663":{"id":"w663","nodes":["n3964","n3965"],"tags":{"highway":"footway"}},"w664":{"id":"w664","nodes":["n3966","n3967"],"tags":{"highway":"footway"}},"w665":{"id":"w665","nodes":["n3857","n3890","n3884","n3894","n3889","n3899","n3885","n3886","n3896","n3887"],"tags":{"highway":"service","service":"parking_aisle"}},"w666":{"id":"w666","nodes":["n3895","n3896"],"tags":{"highway":"service","service":"parking_aisle"}},"w667":{"id":"w667","nodes":["n3274","n3977","n3984","n3983","n3981","n3844","n3978","n3982","n3861","n3862","n3873","n3874","n4468","n3863"],"tags":{"access":"private","highway":"service","name":"Collins Drive"}},"w668":{"id":"w668","nodes":["n3900","n3901","n3902","n3903","n3904","n3905","n3808","n3809","n3906","n3907","n3908","n3967","n3909","n3910","n3911","n3955","n3964","n3912","n3913","n3914","n3915","n3916","n3917","n3918","n3919","n3920","n3921","n3922","n3923","n3924","n3925","n3926","n3927","n3969","n3970","n3928","n3807","n3929","n3900"],"tags":{"building":"school"}},"w669":{"id":"w669","nodes":["n3272","n39","n40","n3974","n3863","n3857","n3892","n3883","n3891","n3889"],"tags":{"highway":"service"}},"w67":{"id":"w67","nodes":["n322","n886","n323","n475"],"tags":{"footway":"crossing","highway":"footway"}},"w670":{"id":"w670","nodes":["n3473","n3859","n3860","n3980","n4908","n4865"],"tags":{"highway":"secondary","name":"Hoffman Street","ref":"M 60"}},"w671":{"id":"w671","nodes":["n3970","n3806","n3971"],"tags":{"highway":"footway"}},"w672":{"id":"w672","nodes":["n3892","n3893","n3894"],"tags":{"highway":"service","service":"parking_aisle"}},"w673":{"id":"w673","nodes":["n3945","n3946","n3992","n3990","n3945"],"tags":{"leisure":"pitch","sport":"tennis"}},"w674":{"id":"w674","nodes":["n3890","n3893","n3891"],"tags":{"highway":"service","service":"parking_aisle"}},"w675":{"id":"w675","nodes":["n3947","n3948","n3994","n3993","n3947"],"tags":{"leisure":"pitch","sport":"tennis"}},"w676":{"id":"w676","nodes":["n3858","n3954","n3972","n3810","n3811","n3812","n3841","n3973","n3898","n3963","n3897","n3896"],"tags":{"highway":"service"}},"w677":{"id":"w677","nodes":["n3977","n3996","n3997","n4004","n3998","n3999","n4005","n4007","n4006","n3995","n4000","n3843","n4001","n4002","n4003","n3949","n3351","n3950","n3354","n3350","n3951","n3349","n3952","n3953","n3954","n3956","n3966","n3955"],"tags":{"highway":"footway"}},"w678":{"id":"w678","nodes":["n3887","n3888","n3895","n3899"],"tags":{"highway":"service","service":"parking_aisle"}},"w679":{"id":"w679","nodes":["n3946","n3947","n3993","n3992","n3946"],"tags":{"leisure":"pitch","sport":"tennis"}},"w68":{"id":"w68","nodes":["n294","n1952","n326"],"tags":{"footway":"sidewalk","highway":"footway"}},"w680":{"id":"w680","nodes":["n3939","n3940","n3941","n3985","n3986","n3987","n3988","n3989","n3942","n3943","n3939"],"tags":{"leisure":"pitch","sport":"baseball"}},"w681":{"id":"w681","nodes":["n3990","n3991","n3944","n3945","n3990"],"tags":{"leisure":"pitch","sport":"tennis"}},"w682":{"id":"w682","nodes":["n3871","n3872","n3873","n3874","n3871"],"tags":{"amenity":"parking"}},"w683":{"id":"w683","nodes":["n3956","n3965","n3957","n3958","n3959"],"tags":{"footway":"sidewalk","highway":"footway"}},"w684":{"id":"w684","nodes":["n3790","n3791","n3792","n3793","n3790"],"tags":{"building":"shed"}},"w685":{"id":"w685","nodes":["n3794","n3795","n3796","n3797","n3794"],"tags":{"building":"yes"}},"w686":{"id":"w686","nodes":["n3798","n3799","n3804","n3805","n3798"],"tags":{"building":"yes"}},"w687":{"id":"w687","nodes":["n3806","n3807"],"tags":{"highway":"footway"}},"w688":{"id":"w688","nodes":["n3845","n3846","n3847","n3848","n3845"],"tags":{"leisure":"pitch","sport":"american_football"}},"w689":{"id":"w689","nodes":["n3849","n4021","n3850","n3851","n3852","n3853","n3854","n3855","n3856","n3975","n3976","n3979","n4008","n4009","n4010","n4011","n4012","n4013","n4014","n4015","n4016","n4017","n4018","n4019","n4020","n4021"],"tags":{"leisure":"track","sport":"running"}},"w69":{"id":"w69","nodes":["n326","n327"],"tags":{"bridge":"yes","footway":"sidewalk","highway":"footway","layer":"1"}},"w690":{"id":"w690","nodes":["n4022","n4023","n4024","n4025","n4026","n4027","n4022"],"tags":{"building":"yes"}},"w691":{"id":"w691","nodes":["n4028","n4029","n4030","n4031","n4028"],"tags":{"building":"yes"}},"w692":{"id":"w692","nodes":["n4032","n4033","n4034","n4035","n4032"],"tags":{"building":"yes"}},"w693":{"id":"w693","nodes":["n4036","n4037","n4038","n4039","n4036"],"tags":{"building":"yes"}},"w694":{"id":"w694","nodes":["n4040","n4041","n4042","n4043","n4040"],"tags":{"building":"yes"}},"w695":{"id":"w695","nodes":["n4044","n4045","n4050","n4053","n4046","n4047","n4048","n4049","n4044"],"tags":{"building":"yes"}},"w696":{"id":"w696","nodes":["n4050","n4051","n4052","n4053","n4050"],"tags":{"building":"roof"}},"w697":{"id":"w697","nodes":["n4054","n4068","n4055","n4056","n4057","n4054"],"tags":{"building":"yes"}},"w698":{"id":"w698","nodes":["n4058","n4059","n4060","n4061","n4062","n4063","n4058"],"tags":{"building":"yes"}},"w699":{"id":"w699","nodes":["n4064","n4066","n4065"],"tags":{"barrier":"fence"}},"w7":{"id":"w7","nodes":["n43","n44","n45"],"tags":{"highway":"service"}},"w70":{"id":"w70","nodes":["n327","n328","n27","n329"],"tags":{"footway":"sidewalk","highway":"footway"}},"w700":{"id":"w700","nodes":["n4066","n4067","n4068"],"tags":{"barrier":"fence"}},"w701":{"id":"w701","nodes":["n4069","n4070","n4071","n4072","n4069"],"tags":{"building":"shed"}},"w702":{"id":"w702","nodes":["n4073","n4074","n4075","n4076","n4077","n4078","n4079","n4080","n4081","n4082","n4083","n4084","n4073"],"tags":{"building":"yes"}},"w703":{"id":"w703","nodes":["n4085","n4093","n4086","n4087","n4088","n4089","n4090","n4091","n4092","n4085"],"tags":{"building":"yes"}},"w704":{"id":"w704","nodes":["n4093","n4094","n4095","n4096"],"tags":{"barrier":"fence"}},"w705":{"id":"w705","nodes":["n4097","n4098","n4099","n4100","n4097"],"tags":{"building":"yes"}},"w706":{"id":"w706","nodes":["n4098","n4102","n4087"],"tags":{"barrier":"fence"}},"w707":{"id":"w707","nodes":["n4101","n4102","n4096","n4170","n4103"],"tags":{"barrier":"fence"}},"w708":{"id":"w708","nodes":["n4104","n4105","n4106","n4107","n4104"],"tags":{"access":"private","leisure":"swimming_pool"}},"w709":{"id":"w709","nodes":["n4108","n4109","n4110","n4111","n4108"],"tags":{"building":"yes"}},"w71":{"id":"w71","nodes":["n329","n331"],"tags":{"bridge":"yes","footway":"sidewalk","highway":"footway","layer":"1"}},"w710":{"id":"w710","nodes":["n4112","n4113","n4114","n4115","n4116","n4117","n4118","n4119","n4112"],"tags":{"building":"yes"}},"w711":{"id":"w711","nodes":["n4120","n4121","n4122","n4123","n4120"],"tags":{"building":"yes"}},"w712":{"id":"w712","nodes":["n4124","n4125","n4126","n4127","n4128","n4129","n4124"],"tags":{"building":"yes"}},"w713":{"id":"w713","nodes":["n4130","n4131","n4132","n4133","n4130"],"tags":{"building":"shed"}},"w714":{"id":"w714","nodes":["n4134","n4135","n4136","n4137","n4138","n4139","n4140","n4141","n4142","n4143","n4134"],"tags":{"building":"yes"}},"w715":{"id":"w715","nodes":["n4144","n4145","n4146","n4147","n4148","n4149","n4144"],"tags":{"building":"yes"}},"w716":{"id":"w716","nodes":["n4150","n4151","n4152","n4153","n4150"],"tags":{"building":"yes"}},"w717":{"id":"w717","nodes":["n4154","n4155","n4156","n4157","n4154"],"tags":{"building":"yes"}},"w718":{"id":"w718","nodes":["n4158","n4159","n4160","n4161","n4162","n4163","n4164","n4165","n4158"],"tags":{"building":"yes"}},"w719":{"id":"w719","nodes":["n4166","n4167","n4168","n4169","n4166"],"tags":{"building":"yes"}},"w72":{"id":"w72","nodes":["n331","n344","n332","n333","n334"],"tags":{"footway":"sidewalk","highway":"footway"}},"w720":{"id":"w720","nodes":["n4170","n4171"],"tags":{"barrier":"fence"}},"w721":{"id":"w721","nodes":["n4138","n4103"],"tags":{"barrier":"fence"}},"w722":{"id":"w722","nodes":["n4103","n4172"],"tags":{"barrier":"fence"}},"w723":{"id":"w723","nodes":["n4173","n4174"],"tags":{"barrier":"fence"}},"w724":{"id":"w724","nodes":["n4175","n4176","n4177","n4178","n4175"],"tags":{"building":"yes"}},"w725":{"id":"w725","nodes":["n4179","n4180","n4181","n4182","n4183","n4184","n4179"],"tags":{"building":"yes"}},"w726":{"id":"w726","nodes":["n4185","n4186","n4187","n4188","n4185"],"tags":{"building":"yes"}},"w727":{"id":"w727","nodes":["n4189","n4190","n4191","n4192","n4193","n4194","n4195","n4196","n4197","n4198","n4199","n4200","n4201","n4202","n4189"],"tags":{"building":"yes"}},"w728":{"id":"w728","nodes":["n4203","n4204","n4205","n4206","n4207","n4208","n4209","n4210","n4203"],"tags":{"building":"yes"}},"w729":{"id":"w729","nodes":["n4211","n4212","n4213","n4214","n4211"],"tags":{"building":"shed"}},"w73":{"id":"w73","nodes":["n335","n336","n337","n338","n339","n340","n341","n342","n335"],"tags":{"building":"yes"}},"w730":{"id":"w730","nodes":["n4215","n4216","n4217","n4218","n4215"],"tags":{"building":"yes"}},"w731":{"id":"w731","nodes":["n4219","n4220","n4221","n4222","n4223","n4224","n4225","n4226","n4227","n4228","n4229","n4230","n4219"],"tags":{"building":"yes"}},"w732":{"id":"w732","nodes":["n4231","n4232","n4233","n4234","n4235","n4236","n4237","n4238","n4231"],"tags":{"building":"yes"}},"w733":{"id":"w733","nodes":["n4239","n4240","n4241","n4242","n4243","n4244","n4245","n4246","n4247","n4248","n4241"],"tags":{"highway":"service"}},"w734":{"id":"w734","nodes":["n4240","n4249","n4248"],"tags":{"highway":"service","service":"parking_aisle"}},"w735":{"id":"w735","nodes":["n4250","n4251","n4252","n4253","n4254","n4255","n4256","n4257","n4258","n4250"],"tags":{"amenity":"parking"}},"w736":{"id":"w736","nodes":["n4259","n4260","n4261","n4262","n4259"],"tags":{"building":"yes"}},"w737":{"id":"w737","nodes":["n4263","n4264","n4265","n4266","n4267","n4268","n4269","n4270","n4271","n4272","n4273","n4274","n4275","n4276","n4263"],"tags":{"building":"yes"}},"w738":{"id":"w738","nodes":["n4277","n4278","n4279","n4280","n4281","n4282","n4277"],"tags":{"building":"yes"}},"w739":{"id":"w739","nodes":["n4283","n4284","n4285","n4286","n4287","n4288","n4289","n4290","n4291","n4292","n4293","n4294","n4283"],"tags":{"building":"yes"}},"w74":{"id":"w74","nodes":["n343","n344","n345"],"tags":{"highway":"service"}},"w740":{"id":"w740","nodes":["n4295","n4296","n4297","n4298","n4295"],"tags":{"building":"yes"}},"w741":{"id":"w741","nodes":["n4299","n4300","n4301","n4302","n4303","n4304","n4305","n4306","n4307","n4308","n4309","n4310","n4299"],"tags":{"building":"yes"}},"w742":{"id":"w742","nodes":["n4311","n4312","n4313","n4314","n4311"],"tags":{"building":"shed"}},"w743":{"id":"w743","nodes":["n4315","n4316","n4317","n4318","n4319","n4320","n4315"],"tags":{"building":"yes"}},"w744":{"id":"w744","nodes":["n4321","n4322","n4323","n4324","n4325","n4326","n4327","n4328","n4329","n4330","n4331","n4332","n4333","n4334","n4321"],"tags":{"building":"yes"}},"w745":{"id":"w745","nodes":["n4335","n4336","n4337","n4338","n4335"],"tags":{"building":"shed"}},"w746":{"id":"w746","nodes":["n4339","n4340","n4341","n4342","n4343","n4344","n4339"],"tags":{"building":"yes"}},"w747":{"id":"w747","nodes":["n4345","n4346","n4347","n4348","n4345"],"tags":{"building":"yes"}},"w748":{"id":"w748","nodes":["n4349","n4350","n4351","n4352","n4349"],"tags":{"building":"yes"}},"w749":{"id":"w749","nodes":["n4353","n4354","n4355","n4356","n4357","n4358","n4353"],"tags":{"building":"yes"}},"w75":{"id":"w75","nodes":["n346","n347","n348","n349","n350","n351","n346"],"tags":{"amenity":"parking"}},"w750":{"id":"w750","nodes":["n4612","n4359","n4360"],"tags":{"barrier":"fence"}},"w751":{"id":"w751","nodes":["n4361","n4362","n4363","n4364","n4361"],"tags":{"building":"yes"}},"w752":{"id":"w752","nodes":["n4365","n4366","n4367","n4368","n4365"],"tags":{"building":"yes"}},"w753":{"id":"w753","nodes":["n4369","n4370","n4371","n4372","n4375","n4369"],"tags":{"building":"yes"}},"w754":{"id":"w754","nodes":["n4373","n4374","n4375"],"tags":{"barrier":"fence"}},"w755":{"id":"w755","nodes":["n4376","n4377","n4378","n4379","n4376"],"tags":{"building":"shed"}},"w756":{"id":"w756","nodes":["n4380","n4381","n4382","n4383","n4384","n4385","n4386","n4387","n4388","n4389","n4390","n4391","n4380"],"tags":{"building":"yes"}},"w757":{"id":"w757","nodes":["n4392","n4393","n4394","n4395","n4392"],"tags":{"building":"yes"}},"w758":{"id":"w758","nodes":["n4396","n4397","n4398","n4399","n4396"],"tags":{"building":"shed"}},"w759":{"id":"w759","nodes":["n4400","n4401","n4402","n4403","n4404","n4405","n4406","n4407","n4408","n4409","n4410","n4411","n4412","n4413","n4414","n4415","n4400"],"tags":{"building":"yes"}},"w76":{"id":"w76","nodes":["n2561","n359","n2563","n2793","n357","n356","n2792","n355","n354","n2791","n2562","n353","n352","n358","n2561"],"tags":{"highway":"service","oneway":"yes","service":"parking_aisle"}},"w760":{"id":"w760","nodes":["n4416","n4417"],"tags":{"barrier":"fence"}},"w761":{"id":"w761","nodes":["n4418","n4416","n4419"],"tags":{"barrier":"fence"}},"w762":{"id":"w762","nodes":["n4420","n4421"],"tags":{"barrier":"fence"}},"w763":{"id":"w763","nodes":["n4422","n4423","n4424","n4425","n4426","n4427","n4428","n4429","n4430","n4431","n4432","n4433","n4422"],"tags":{"building":"yes"}},"w764":{"id":"w764","nodes":["n4434","n4435","n4436","n4437","n4438","n4439","n4440","n4441","n4442","n4445","n4444","n4443","n4434"],"tags":{"building":"yes"}},"w765":{"id":"w765","nodes":["n4446","n4447","n4448","n4449","n4446"],"tags":{"building":"yes"}},"w766":{"id":"w766","nodes":["n4450","n4451","n4452","n4453","n4450"],"tags":{"building":"yes"}},"w767":{"id":"w767","nodes":["n4454","n4455","n4456","n4457","n4454"],"tags":{"building":"yes"}},"w768":{"id":"w768","nodes":["n4461","n4458","n4460"],"tags":{"footway":"crossing","highway":"footway"}},"w769":{"id":"w769","nodes":["n4460","n4462","n4459"],"tags":{"footway":"sidewalk","highway":"footway"}},"w77":{"id":"w77","nodes":["n325","n360","n361"],"tags":{"footway":"crossing","highway":"footway"}},"w770":{"id":"w770","nodes":["n4462","n4463","n4464"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w771":{"id":"w771","nodes":["n4464","n4465","n4466","n4467"],"tags":{"footway":"sidewalk","highway":"footway"}},"w772":{"id":"w772","nodes":["n3959","n3968","n3971","n3960","n3961","n3962","n3963"],"tags":{"footway":"sidewalk","highway":"footway"}},"w773":{"id":"w773","nodes":["n4467","n4468","n3959"],"tags":{"footway":"crossing","highway":"footway"}},"w774":{"id":"w774","nodes":["n4459","n4469","n4470"],"tags":{"footway":"crossing","highway":"footway"}},"w775":{"id":"w775","nodes":["n4470","n4471","n4472","n4473","n4474","n4475"],"tags":{"footway":"sidewalk","highway":"footway"}},"w776":{"id":"w776","nodes":["n4475","n4476","n4477"],"tags":{"footway":"crossing","highway":"footway"}},"w777":{"id":"w777","nodes":["n4477","n4478","n4479","n4480","n4481","n4482","n4483","n4484","n4485","n4486","n4487"],"tags":{"footway":"sidewalk","highway":"footway"}},"w778":{"id":"w778","nodes":["n4488","n4489","n4490","n4491","n4488"],"tags":{"building":"yes"}},"w779":{"id":"w779","nodes":["n4492","n4493","n4494","n4495","n4492"],"tags":{"building":"yes"}},"w78":{"id":"w78","nodes":["n361","n362","n369"],"tags":{"footway":"sidewalk","highway":"footway"}},"w780":{"id":"w780","nodes":["n4496","n4497","n4498","n4499","n4496"],"tags":{"access":"private","leisure":"swimming_pool"}},"w781":{"id":"w781","nodes":["n4508","n4509"],"tags":{"footway":"sidewalk","highway":"footway"}},"w782":{"id":"w782","nodes":["n4510","n4511"],"tags":{"footway":"sidewalk","highway":"footway"}},"w783":{"id":"w783","nodes":["n4512","n4513"],"tags":{"footway":"sidewalk","highway":"footway"}},"w784":{"id":"w784","nodes":["n4513","n4514"],"tags":{"footway":"sidewalk","highway":"footway"}},"w785":{"id":"w785","nodes":["n4515","n4516"],"tags":{"footway":"sidewalk","highway":"footway"}},"w786":{"id":"w786","nodes":["n4517","n4515"],"tags":{"footway":"sidewalk","highway":"footway"}},"w787":{"id":"w787","nodes":["n4518","n4519"],"tags":{"footway":"sidewalk","highway":"footway"}},"w788":{"id":"w788","nodes":["n4519","n4520","n4513"],"tags":{"footway":"crossing","highway":"footway"}},"w789":{"id":"w789","nodes":["n4515","n4521","n4513"],"tags":{"footway":"crossing","highway":"footway"}},"w79":{"id":"w79","nodes":["n362","n363","n334"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w790":{"id":"w790","nodes":["n4515","n4522","n4523"],"tags":{"footway":"crossing","highway":"footway"}},"w791":{"id":"w791","nodes":["n4523","n4524","n4519"],"tags":{"footway":"crossing","highway":"footway"}},"w792":{"id":"w792","nodes":["n4523","n4525"],"tags":{"footway":"sidewalk","highway":"footway"}},"w793":{"id":"w793","nodes":["n4525","n4526","n4527"],"tags":{"footway":"crossing","highway":"footway"}},"w794":{"id":"w794","nodes":["n4527","n4529"],"tags":{"footway":"sidewalk","highway":"footway"}},"w795":{"id":"w795","nodes":["n4529","n4530","n4518"],"tags":{"footway":"crossing","highway":"footway"}},"w796":{"id":"w796","nodes":["n4518","n4531"],"tags":{"footway":"sidewalk","highway":"footway"}},"w797":{"id":"w797","nodes":["n4531","n4532"],"tags":{"footway":"sidewalk","highway":"footway"}},"w798":{"id":"w798","nodes":["n4533","n4534"],"tags":{"footway":"sidewalk","highway":"footway"}},"w799":{"id":"w799","nodes":["n4518","n4538","n4539"],"tags":{"footway":"crossing","highway":"footway"}},"w8":{"id":"w8","nodes":["n46","n47","n145","n48","n49","n46"],"tags":{"amenity":"parking"}},"w80":{"id":"w80","nodes":["n334","n364","n365"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w800":{"id":"w800","nodes":["n4539","n4540","n4541"],"tags":{"footway":"crossing","highway":"footway"}},"w801":{"id":"w801","nodes":["n4541","n4542","n4529"],"tags":{"footway":"crossing","highway":"footway"}},"w802":{"id":"w802","nodes":["n4552","n4553"],"tags":{"footway":"sidewalk","highway":"footway"}},"w803":{"id":"w803","nodes":["n4554","n4555","n4556","n4557","n4558","n4559","n4554"],"tags":{"building":"yes"}},"w804":{"id":"w804","nodes":["n4562","n4563"],"tags":{"barrier":"retaining_wall"}},"w805":{"id":"w805","nodes":["n4568","n4569","n4570","n4571","n4568"],"tags":{"building":"yes"}},"w806":{"id":"w806","nodes":["n3473","n4575","n4576","n4581","n4580","n3551"],"tags":{"highway":"residential","oneway":"yes"}},"w807":{"id":"w807","nodes":["n4613","n4614","n4615","n4616","n4617","n4618","n4619","n4620","n4613"],"tags":{"leisure":"pitch","sport":"baseball"}},"w808":{"id":"w808","nodes":["n4621","n4622","n4623","n4624","n4625","n4626","n4627","n4628","n4629","n4630"],"tags":{"highway":"service"}},"w809":{"id":"w809","nodes":["n4631","n4632","n4633","n4637","n4634","n4638","n4635","n4636"],"tags":{"highway":"service"}},"w81":{"id":"w81","nodes":["n365","n366","n367"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w810":{"id":"w810","nodes":["n4639","n4640","n4641"],"tags":{"barrier":"fence"}},"w811":{"id":"w811","nodes":["n4649","n4650","n4651","n4652","n4649"],"tags":{"building":"yes"}},"w812":{"id":"w812","nodes":["n4654","n4655"],"tags":{"barrier":"fence"}},"w813":{"id":"w813","nodes":["n4656","n4657"],"tags":{"barrier":"fence"}},"w814":{"id":"w814","nodes":["n4669","n4670","n4671","n4672","n4669"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelters"}},"w815":{"id":"w815","nodes":["n4678","n4679","n4680","n1889"],"tags":{"highway":"service"}},"w816":{"id":"w816","nodes":["n239","n4686","n4687"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w817":{"id":"w817","nodes":["n4687","n4688","n4689"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w818":{"id":"w818","nodes":["n4689","n4690","n307"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w819":{"id":"w819","nodes":["n2266","n4743"],"tags":{"highway":"path"}},"w82":{"id":"w82","nodes":["n724","n368","n369"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w820":{"id":"w820","nodes":["n4785","n4786","n4787","n4788","n1684","n4760","n4769","n4761","n4762","n4763","n4764","n4765","n4766","n4767","n4768","n4785"],"tags":{"natural":"wood"}},"w821":{"id":"w821","nodes":["n4769","n4770","n4771","n4772","n4773","n4774","n4775","n4776","n4777","n4778","n4779","n4780","n4781","n4782","n4783","n4784","n4785","n4768","n4767","n4766","n4765","n4764","n4763","n4762","n4761","n4769"],"tags":{"natural":"scrub"}},"w822":{"id":"w822","nodes":["n4772","n4789","n4790","n4791","n4792","n4793","n4794","n4795","n4796","n4797","n4798","n4799","n4783","n4782","n4781","n4780","n4779","n4778","n4777","n4776","n4775","n4774","n4773","n4772"],"tags":{"natural":"wood"}},"w823":{"id":"w823","nodes":["n4800","n4801","n4802","n4803","n4804","n4805","n4806","n4807","n4808","n4809","n4810","n4811","n4812","n4813","n4814","n4815","n4816","n3490","n3489","n4800"],"tags":{"natural":"wood"}},"w824":{"id":"w824","nodes":["n4817","n4818","n4819","n4820","n4821","n4822","n4817"],"tags":{"landuse":"recreation_ground"}},"w825":{"id":"w825","nodes":["n4563","n4823","n4824","n4829","n4825","n4826","n4827","n4828","n4562","n4563"],"tags":{"landuse":"recreation_ground"}},"w826":{"id":"w826","nodes":["n4830","n4831","n4832","n4833","n4834","n4835","n4836","n4830"],"tags":{"landuse":"industrial"}},"w827":{"id":"w827","nodes":["n4563","n4837","n4838","n4839","n4840","n4841","n4842","n4827","n4828","n4562","n4563"],"tags":{"landuse":"industrial"}},"w828":{"id":"w828","nodes":["n4843","n4844","n4845","n4846","n4843"],"tags":{"landuse":"farmland"}},"w829":{"id":"w829","nodes":["n3712","n4847","n4848","n4849","n4850","n4851","n4852","n4858","n4864","n4959","n4960","n4853","n4857","n4854","n4855","n4856","n3712"],"tags":{"aeroway":"aerodrome","name":"Three Rivers Municipal Airport"}},"w83":{"id":"w83","nodes":["n371","n372","n373","n374","n371"],"tags":{"building":"yes"}},"w830":{"id":"w830","nodes":["n4855","n4854","n4857","n4853","n4960"],"tags":{"barrier":"fence"}},"w831":{"id":"w831","nodes":["n4860","n4859","n4858","n4852","n4851"],"tags":{"barrier":"fence"}},"w832":{"id":"w832","nodes":["n4866","n4878","n4869","n4867"],"tags":{"aeroway":"runway","ref":"5/23"}},"w833":{"id":"w833","nodes":["n4868","n4890","n4894","n4881","n4869","n4905","n4870"],"tags":{"aeroway":"runway","ref":"9/27"}},"w834":{"id":"w834","nodes":["n4871","n4875","n4872","n4895","n4873","n4874","n4871"],"tags":{"aeroway":"apron"}},"w835":{"id":"w835","nodes":["n4875","n4876","n4877","n4878","n4879","n4880","n4882","n4881"],"tags":{"aeroway":"taxiway"}},"w836":{"id":"w836","nodes":["n4882","n4893","n4883","n4891","n4884","n4885","n4886","n4887","n4888","n4892","n4889","n4890"],"tags":{"aeroway":"taxiway"}},"w837":{"id":"w837","nodes":["n4893","n4894"],"tags":{"aeroway":"taxiway"}},"w838":{"id":"w838","nodes":["n4895","n4896","n4897","n4898","n4899","n4900","n4901","n4902","n4903","n4906","n4904","n4905"],"tags":{"aeroway":"taxiway"}},"w839":{"id":"w839","nodes":["n4907","n4908"],"tags":{"highway":"service"}},"w84":{"id":"w84","nodes":["n374","n375","n376","n377","n373","n374"],"tags":{"building":"yes"}},"w840":{"id":"w840","nodes":["n4909","n4907","n4910"],"tags":{"highway":"service"}},"w841":{"id":"w841","nodes":["n4911","n4912","n4913","n4914","n4911"],"tags":{"building":"yes"}},"w842":{"id":"w842","nodes":["n4915","n4916","n4917","n4918","n4915"],"tags":{"aeroway":"hangar","building":"yes"}},"w843":{"id":"w843","nodes":["n4919","n4920","n4921","n4922","n4919"],"tags":{"building":"yes"}},"w844":{"id":"w844","nodes":["n4923","n4924","n4925","n4926","n4923"],"tags":{"aeroway":"hangar","building":"yes"}},"w845":{"id":"w845","nodes":["n4927","n4928","n4929","n4930","n4927"],"tags":{"aeroway":"hangar","building":"yes"}},"w846":{"id":"w846","nodes":["n4931","n4932","n4933","n4934","n4931"],"tags":{"aeroway":"hangar","building":"yes"}},"w847":{"id":"w847","nodes":["n4935","n4936","n4937","n4938","n4935"],"tags":{"aeroway":"hangar","building":"yes"}},"w848":{"id":"w848","nodes":["n4939","n4940","n4941","n4942","n4939"],"tags":{"aeroway":"hangar","building":"yes"}},"w849":{"id":"w849","nodes":["n4943","n4944","n4945","n4946","n4943"],"tags":{"aeroway":"hangar","building":"yes"}},"w85":{"id":"w85","nodes":["n431","n432","n1038","n433","n434","n1040","n431"],"tags":{"building":"yes"}},"w850":{"id":"w850","nodes":["n4947","n4948","n4949","n4950","n4947"],"tags":{"aeroway":"hangar","building":"yes"}},"w851":{"id":"w851","nodes":["n4951","n4952","n4953","n4954","n4951"],"tags":{"aeroway":"hangar","building":"yes"}},"w852":{"id":"w852","nodes":["n4955","n4956","n4957","n4958","n4955"],"tags":{"aeroway":"hangar","building":"yes"}},"w853":{"id":"w853","nodes":["n4959","n4864","n4861","n4862","n4863"],"tags":{"barrier":"fence"}},"w854":{"id":"w854","nodes":["n4961","n4962","n4963","n4964","n4965","n4966","n4967","n4968","n4969","n4961"],"tags":{"landuse":"farmland"}},"w855":{"id":"w855","nodes":["n4970","n4971","n4972","n4973","n4974","n4975","n4976","n4977","n4978","n4980","n4970"],"tags":{"landuse":"farmland"}},"w856":{"id":"w856","nodes":["n4979","n4980","n4978","n4981","n4982","n4983","n4984","n4985","n4979"],"tags":{"natural":"scrub"}},"w857":{"id":"w857","nodes":["n4986","n4987","n4988","n5032","n4989","n4990","n4991","n4992","n4993","n4994","n4995","n4996","n4997","n4998","n4999","n5000","n5001","n5002","n5022","n5023","n5024","n5025","n5030","n5031","n5029","n5028","n5027","n5026","n4986"],"tags":{"landuse":"farmland"}},"w858":{"id":"w858","nodes":["n5001","n5003","n5004","n4999","n5000","n5001"],"tags":{"natural":"scrub"}},"w859":{"id":"w859","nodes":["n5005","n5006","n5007","n5008","n5009","n5010","n5021","n5020","n5019","n5011","n5012","n5013","n5018","n5014","n5015","n5017","n5016","n5005"],"tags":{"landuse":"farmland"}},"w86":{"id":"w86","nodes":["n384","n385","n386","n387","n384"],"tags":{"building":"yes"}},"w860":{"id":"w860","nodes":["n3020","n5033","n5034","n5035","n3179","n3180","n3191","n3181","n3190","n3182","n3183","n3184","n3185","n3186","n3187","n3188","n3189","n3160","n3161","n3162","n2126","n2153","n2288","n3020"],"tags":{"landuse":"industrial"}},"w87":{"id":"w87","nodes":["n387","n388","n389","n386","n387"],"tags":{"building":"yes"}},"w88":{"id":"w88","nodes":["n390","n391","n392","n393","n390"],"tags":{"building":"yes"}},"w89":{"id":"w89","nodes":["n394","n2895"],"tags":{"highway":"service"}},"w9":{"id":"w9","nodes":["n50","n51","n148","n52","n57","n891","n53","n50"],"tags":{"building":"yes"}},"w90":{"id":"w90","nodes":["n398","n399","n400","n401","n402","n403","n404","n405","n406","n407","n408","n409","n410","n411","n412","n413","n414","n415","n416","n417","n398"],"tags":{"building":"yes"}},"w91":{"id":"w91","nodes":["n418","n423","n419"],"tags":{"highway":"service"}},"w92":{"id":"w92","nodes":["n420","n421","n422","n423","n420"],"tags":{"amenity":"parking"}},"w93":{"id":"w93","nodes":["n2282","n1876"],"tags":{"name":"Rocky River","tunnel":"building_passage","waterway":"river"}},"w94":{"id":"w94","nodes":["n1876","n885","n1875","n2234"],"tags":{"name":"Rocky River","waterway":"river"}},"w95":{"id":"w95","nodes":["n425","n426","n427","n914","n428","n913","n425"],"tags":{"building":"yes"}},"w96":{"id":"w96","nodes":["n456","n620","n1034","n1035","n456"],"tags":{"building":"yes"}},"w97":{"id":"w97","nodes":["n435","n912","n451","n321"],"tags":{"highway":"footway"}},"w98":{"id":"w98","nodes":["n436","n319","n437","n438","n439","n440","n441","n476","n442"],"tags":{"highway":"service"}},"w99":{"id":"w99","nodes":["n443","n444","n445","n446","n447","n448","n449","n450","n443"],"tags":{"amenity":"parking"}},"n2934":{"id":"n2934","loc":[-85.617051,41.952263]},"n2935":{"id":"n2935","loc":[-85.61699,41.952276]},"n2937":{"id":"n2937","loc":[-85.616847,41.952262]},"n2938":{"id":"n2938","loc":[-85.616577,41.951956]},"n2939":{"id":"n2939","loc":[-85.61656,41.952044]},"n3348":{"id":"n3348","loc":[-85.61714,41.9522]},"n3349":{"id":"n3349","loc":[-85.616517,41.95212]},"n3350":{"id":"n3350","loc":[-85.616489,41.952033]},"n3351":{"id":"n3351","loc":[-85.616529,41.951907]},"n3354":{"id":"n3354","loc":[-85.616488,41.951994]}}; + /** + * Compile Link + */ -// Tooltips and svg mask used to highlight certain features -function uiCurtain() { + InlineLexer.prototype.outputLink = function(cap, link) { + var href = escape(link.href), + title = link.title ? escape(link.title) : null; - var surface = d3_select(null), - tooltip = d3_select(null), - darkness = d3_select(null); + return cap[0].charAt(0) !== '!' + ? this.renderer.link(href, title, this.output(cap[1])) + : this.renderer.image(href, title, escape(cap[1])); + }; - function curtain(selection$$1) { - surface = selection$$1 - .append('svg') - .attr('id', 'curtain') - .style('z-index', 1000) - .style('pointer-events', 'none') - .style('position', 'absolute') - .style('top', 0) - .style('left', 0); + /** + * Smartypants Transformations + */ - darkness = surface.append('path') - .attr('x', 0) - .attr('y', 0) - .attr('class', 'curtain-darkness'); + InlineLexer.prototype.smartypants = function(text) { + if (!this.options.smartypants) return text; + return text + // em-dashes + .replace(/---/g, '\u2014') + // en-dashes + .replace(/--/g, '\u2013') + // opening singles + .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') + // closing singles & apostrophes + .replace(/'/g, '\u2019') + // opening doubles + .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') + // closing doubles + .replace(/"/g, '\u201d') + // ellipses + .replace(/\.{3}/g, '\u2026'); + }; - d3_select(window).on('resize.curtain', resize); + /** + * Mangle Links + */ - tooltip = selection$$1.append('div') - .attr('class', 'tooltip') - .style('z-index', 1002); + InlineLexer.prototype.mangle = function(text) { + if (!this.options.mangle) return text; + var out = '', + l = text.length, + i = 0, + ch; + + for (; i < l; i++) { + ch = text.charCodeAt(i); + if (Math.random() > 0.5) { + ch = 'x' + ch.toString(16); + } + out += '&#' + ch + ';'; + } - tooltip - .append('div') - .attr('class', 'tooltip-arrow'); + return out; + }; - tooltip - .append('div') - .attr('class', 'tooltip-inner'); + /** + * Renderer + */ - resize(); + function Renderer(options) { + this.options = options || {}; + } + Renderer.prototype.code = function(code, lang, escaped) { + if (this.options.highlight) { + var out = this.options.highlight(code, lang); + if (out != null && out !== code) { + escaped = true; + code = out; + } + } - function resize() { - surface - .attr('width', window.innerWidth) - .attr('height', window.innerHeight); - curtain.cut(darkness.datum()); - } + if (!lang) { + return '
      '
      +        + (escaped ? code : escape(code, true))
      +        + '\n
      '; } + return '
      '
      +      + (escaped ? code : escape(code, true))
      +      + '\n
      \n'; + }; + + Renderer.prototype.blockquote = function(quote) { + return '
      \n' + quote + '
      \n'; + }; - /** - * Reveal cuts the curtain to highlight the given box, - * and shows a tooltip with instructions next to the box. - * - * @param {String|ClientRect} [box] box used to cut the curtain - * @param {String} [text] text for a tooltip - * @param {Object} [options] - * @param {string} [options.tooltipClass] optional class to add to the tooltip - * @param {integer} [options.duration] transition time in milliseconds - * @param {string} [options.buttonText] if set, create a button with this text label - * @param {function} [options.buttonCallback] if set, the callback for the button - * @param {String|ClientRect} [options.tooltipBox] box for tooltip position, if different from box for the curtain - */ - curtain.reveal = function(box, text, options) { - if (typeof box === 'string') { - box = d3_select(box).node(); - } - if (box && box.getBoundingClientRect) { - box = copyBox(box.getBoundingClientRect()); - } + Renderer.prototype.html = function(html) { + return html; + }; - options = options || {}; + Renderer.prototype.heading = function(text, level, raw) { + return '' + + text + + '\n'; + }; - var tooltipBox; - if (options.tooltipBox) { - tooltipBox = options.tooltipBox; - if (typeof tooltipBox === 'string') { - tooltipBox = d3_select(tooltipBox).node(); - } - if (tooltipBox && tooltipBox.getBoundingClientRect) { - tooltipBox = copyBox(tooltipBox.getBoundingClientRect()); - } - } else { - tooltipBox = box; - } + Renderer.prototype.hr = function() { + return this.options.xhtml ? '
      \n' : '
      \n'; + }; - if (tooltipBox && text) { - // pseudo markdown bold text for the instruction section.. - var parts = text.split('**'); - var html = parts[0] ? '' + parts[0] + '' : ''; - if (parts[1]) { - html += '' + parts[1] + ''; - } + Renderer.prototype.list = function(body, ordered, start) { + var type = ordered ? 'ol' : 'ul', + startatt = (ordered && start !== 1) ? (' start="' + start + '"') : ''; + return '<' + type + startatt + '>\n' + body + '\n'; + }; - html = html.replace(/\*(.*?)\*/g, '$1'); // emphasis - html = html.replace(/\{br\}/g, '

      '); // linebreak + Renderer.prototype.listitem = function(text) { + return '
    • ' + text + '
    • \n'; + }; - if (options.buttonText && options.buttonCallback) { - html += '
      ' + - '
      '; - } + Renderer.prototype.paragraph = function(text) { + return '

      ' + text + '

      \n'; + }; - var classes = 'curtain-tooltip tooltip in ' + (options.tooltipClass || ''); - tooltip - .classed(classes, true) - .selectAll('.tooltip-inner') - .html(html); - - if (options.buttonText && options.buttonCallback) { - var button = tooltip.selectAll('.button-section .button.action'); - button - .on('click', function() { - event.preventDefault(); - options.buttonCallback(); - }); - } + Renderer.prototype.table = function(header, body) { + return '\n' + + '\n' + + header + + '\n' + + '\n' + + body + + '\n' + + '
      \n'; + }; - var tip = copyBox(tooltip.node().getBoundingClientRect()), - w = window.innerWidth, - h = window.innerHeight, - tooltipWidth = 200, - tooltipArrow = 5, - side, pos; + Renderer.prototype.tablerow = function(content) { + return '\n' + content + '\n'; + }; + Renderer.prototype.tablecell = function(content, flags) { + var type = flags.header ? 'th' : 'td'; + var tag = flags.align + ? '<' + type + ' style="text-align:' + flags.align + '">' + : '<' + type + '>'; + return tag + content + '\n'; + }; - // hack: this will have bottom placement, - // so need to reserve extra space for the tooltip illustration. - if (options.tooltipClass === 'intro-mouse') { - tip.height += 80; - } + // span level renderer + Renderer.prototype.strong = function(text) { + return '' + text + ''; + }; - // trim box dimensions to just the portion that fits in the window.. - if (tooltipBox.top + tooltipBox.height > h) { - tooltipBox.height -= (tooltipBox.top + tooltipBox.height - h); - } - if (tooltipBox.left + tooltipBox.width > w) { - tooltipBox.width -= (tooltipBox.left + tooltipBox.width - w); - } + Renderer.prototype.em = function(text) { + return '' + text + ''; + }; - // determine tooltip placement.. + Renderer.prototype.codespan = function(text) { + return '' + text + ''; + }; - if (tooltipBox.top + tooltipBox.height < 100) { - // tooltip below box.. - side = 'bottom'; - pos = [ - tooltipBox.left + tooltipBox.width / 2 - tip.width / 2, - tooltipBox.top + tooltipBox.height - ]; + Renderer.prototype.br = function() { + return this.options.xhtml ? '
      ' : '
      '; + }; - } else if (tooltipBox.top > h - 140) { - // tooltip above box.. - side = 'top'; - pos = [ - tooltipBox.left + tooltipBox.width / 2 - tip.width / 2, - tooltipBox.top - tip.height - ]; + Renderer.prototype.del = function(text) { + return '' + text + ''; + }; - } else { - // tooltip to the side of the tooltipBox.. - var tipY = tooltipBox.top + tooltipBox.height / 2 - tip.height / 2; - - if (textDirection === 'rtl') { - if (tooltipBox.left - tooltipWidth - tooltipArrow < 70) { - side = 'right'; - pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY]; - - } else { - side = 'left'; - pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY]; - } - - } else { - if (tooltipBox.left + tooltipBox.width + tooltipArrow + tooltipWidth > w - 70) { - side = 'left'; - pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY]; - } - else { - side = 'right'; - pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY]; - } - } - } + Renderer.prototype.link = function(href, title, text) { + if (this.options.sanitize) { + try { + var prot = decodeURIComponent(unescape(href)) + .replace(/[^\w:]/g, '') + .toLowerCase(); + } catch (e) { + return text; + } + if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { + return text; + } + } + if (this.options.baseUrl && !originIndependentUrl.test(href)) { + href = resolveUrl(this.options.baseUrl, href); + } + var out = '
      '; + return out; + }; - if (options.duration !== 0 || !tooltip.classed(side)) { - tooltip.call(uiToggle(true)); - } + Renderer.prototype.image = function(href, title, text) { + if (this.options.baseUrl && !originIndependentUrl.test(href)) { + href = resolveUrl(this.options.baseUrl, href); + } + var out = '' + text + '' : '>'; + return out; + }; - tooltip - .style('top', pos[1] + 'px') - .style('left', pos[0] + 'px') - .attr('class', classes + ' ' + side); - - - // shift tooltip-inner if it is very close to the top or bottom edge - // (doesn't affect the placement of the tooltip-arrow) - var shiftY = 0; - if (side === 'left' || side === 'right') { - if (pos[1] < 60) { - shiftY = 60 - pos[1]; - } - else if (pos[1] + tip.height > h - 100) { - shiftY = h - pos[1] - tip.height - 100; - } - } - tooltip.selectAll('.tooltip-inner') - .style('top', shiftY + 'px'); + Renderer.prototype.text = function(text) { + return text; + }; - } else { - tooltip - .classed('in', false) - .call(uiToggle(false)); - } + /** + * TextRenderer + * returns only the textual part of the token + */ - curtain.cut(box, options.duration); + function TextRenderer() {} - return tooltip; - }; + // no need for block level renderers + TextRenderer.prototype.strong = + TextRenderer.prototype.em = + TextRenderer.prototype.codespan = + TextRenderer.prototype.del = + TextRenderer.prototype.text = function (text) { + return text; + }; - curtain.cut = function(datum, duration) { - darkness.datum(datum) - .interrupt(); + TextRenderer.prototype.link = + TextRenderer.prototype.image = function(href, title, text) { + return '' + text; + }; - var selection$$1; - if (duration === 0) { - selection$$1 = darkness; - } else { - selection$$1 = darkness - .transition() - .duration(duration || 600) - .ease(linear$1); - } + TextRenderer.prototype.br = function() { + return ''; + }; - selection$$1 - .attr('d', function(d) { - var string = 'M 0,0 L 0,' + window.innerHeight + ' L ' + - window.innerWidth + ',' + window.innerHeight + 'L' + - window.innerWidth + ',0 Z'; + /** + * Parsing & Compiling + */ - if (!d) return string; - return string + 'M' + - d.left + ',' + d.top + 'L' + - d.left + ',' + (d.top + d.height) + 'L' + - (d.left + d.width) + ',' + (d.top + d.height) + 'L' + - (d.left + d.width) + ',' + (d.top) + 'Z'; + function Parser(options) { + this.tokens = []; + this.token = null; + this.options = options || marked.defaults; + this.options.renderer = this.options.renderer || new Renderer(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; + } - }); - }; + /** + * Static Parse Method + */ + Parser.parse = function(src, options) { + var parser = new Parser(options); + return parser.parse(src); + }; - curtain.remove = function() { - surface.remove(); - tooltip.remove(); - d3_select(window).on('resize.curtain', null); - }; + /** + * Parse Loop + */ + Parser.prototype.parse = function(src) { + this.inline = new InlineLexer(src.links, this.options); + // use an InlineLexer with a TextRenderer to extract pure text + this.inlineText = new InlineLexer( + src.links, + merge({}, this.options, {renderer: new TextRenderer()}) + ); + this.tokens = src.reverse(); - // ClientRects are immutable, so copy them to an object, - // in case we need to trim the height/width. - function copyBox(src) { - return { - top: src.top, - right: src.right, - bottom: src.bottom, - left: src.left, - width: src.width, - height: src.height - }; + var out = ''; + while (this.next()) { + out += this.tok(); } + return out; + }; - return curtain; -} + /** + * Next Token + */ -function uiIntroWelcome(context, reveal) { - var dispatch$$1 = dispatch('done'), - listener = clickListener(); + Parser.prototype.next = function() { + return this.token = this.tokens.pop(); + }; - var chapter = { - title: 'intro.welcome.title' - }; + /** + * Preview Next Token + */ + Parser.prototype.peek = function() { + return this.tokens[this.tokens.length - 1] || 0; + }; - function welcome() { - context.map().centerZoom([-85.63591, 41.94285], 19); - reveal('.intro-nav-wrap .chapter-welcome', - t('intro.welcome.welcome'), - { buttonText: t('intro.ok'), buttonCallback: practice } - ); - } + /** + * Parse Text Tokens + */ - function practice() { - reveal('.intro-nav-wrap .chapter-welcome', - t('intro.welcome.practice'), - { buttonText: t('intro.ok'), buttonCallback: words } - ); - } + Parser.prototype.parseText = function() { + var body = this.token.text; - function words() { - reveal('.intro-nav-wrap .chapter-welcome', - t('intro.welcome.words'), - { buttonText: t('intro.ok'), buttonCallback: mouse } - ); + while (this.peek().type === 'text') { + body += '\n' + this.next().text; } + return this.inline.output(body); + }; - function mouse() { - reveal('.intro-nav-wrap .chapter-welcome', - t('intro.welcome.mouse'), - { buttonText: t('intro.ok'), buttonCallback: leftClick } - ); - } + /** + * Parse Current Token + */ + + Parser.prototype.tok = function() { + switch (this.token.type) { + case 'space': { + return ''; + } + case 'hr': { + return this.renderer.hr(); + } + case 'heading': { + return this.renderer.heading( + this.inline.output(this.token.text), + this.token.depth, + unescape(this.inlineText.output(this.token.text))); + } + case 'code': { + return this.renderer.code(this.token.text, + this.token.lang, + this.token.escaped); + } + case 'table': { + var header = '', + body = '', + i, + row, + cell, + j; + + // header + cell = ''; + for (i = 0; i < this.token.header.length; i++) { + cell += this.renderer.tablecell( + this.inline.output(this.token.header[i]), + { header: true, align: this.token.align[i] } + ); + } + header += this.renderer.tablerow(cell); + for (i = 0; i < this.token.cells.length; i++) { + row = this.token.cells[i]; - function leftClick() { - var counter = 0, - times = 5; + cell = ''; + for (j = 0; j < row.length; j++) { + cell += this.renderer.tablecell( + this.inline.output(row[j]), + { header: false, align: this.token.align[j] } + ); + } - var tooltip = reveal('.intro-nav-wrap .chapter-welcome', - t('intro.welcome.leftclick', { num: times }), - { tooltipClass: 'intro-mouse' } - ); + body += this.renderer.tablerow(cell); + } + return this.renderer.table(header, body); + } + case 'blockquote_start': { + body = ''; - tooltip.selectAll('.tooltip-inner') - .insert('svg', 'span') - .attr('class', 'tooltip-illustration') - .append('use') - .attr('xlink:href', '#walkthrough-mouse'); + while (this.next().type !== 'blockquote_end') { + body += this.tok(); + } + + return this.renderer.blockquote(body); + } + case 'list_start': { + body = ''; + var ordered = this.token.ordered, + start = this.token.start; - tooltip - .append('div') - .attr('class', 'counter'); + while (this.next().type !== 'list_end') { + body += this.tok(); + } - tooltip.call(listener); + return this.renderer.list(body, ordered, start); + } + case 'list_item_start': { + body = ''; - listener.on('click', function(which) { - if (which === 'left') { - d3_select('.curtain-tooltip.intro-mouse .counter') - .text(String(++counter)); + while (this.next().type !== 'list_item_end') { + body += this.token.type === 'text' + ? this.parseText() + : this.tok(); + } - if (counter === times) { - window.setTimeout(function() { continueTo(rightClick); }, 1000); - } - } - }); + return this.renderer.listitem(body); + } + case 'loose_item_start': { + body = ''; - function continueTo(nextStep) { - listener.on('click', null); - tooltip.call(listener.off); - tooltip.select('.counter').remove(); - nextStep(); + while (this.next().type !== 'list_item_end') { + body += this.tok(); } - } + return this.renderer.listitem(body); + } + case 'html': { + var html = !this.token.pre && !this.options.pedantic + ? this.inline.output(this.token.text) + : this.token.text; + return this.renderer.html(html); + } + case 'paragraph': { + return this.renderer.paragraph(this.inline.output(this.token.text)); + } + case 'text': { + return this.renderer.paragraph(this.parseText()); + } + } + }; - function rightClick() { - var counter = 0, - times = 5; + /** + * Helpers + */ - var tooltip = reveal('.intro-nav-wrap .chapter-welcome', - t('intro.welcome.rightclick', { num: times }), - { tooltipClass: 'intro-mouse' } - ); + function escape(html, encode) { + return html + .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + } + + function unescape(html) { + // explicitly match decimal, hex, and named HTML entities + return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) { + n = n.toLowerCase(); + if (n === 'colon') return ':'; + if (n.charAt(0) === '#') { + return n.charAt(1) === 'x' + ? String.fromCharCode(parseInt(n.substring(2), 16)) + : String.fromCharCode(+n.substring(1)); + } + return ''; + }); + } - tooltip.selectAll('.tooltip-inner') - .insert('svg', 'span') - .attr('class', 'tooltip-illustration') - .append('use') - .attr('xlink:href', '#walkthrough-mouse'); + function edit(regex, opt) { + regex = regex.source; + opt = opt || ''; + return { + replace: function(name, val) { + val = val.source || val; + val = val.replace(/(^|[^\[])\^/g, '$1'); + regex = regex.replace(name, val); + return this; + }, + getRegex: function() { + return new RegExp(regex, opt); + } + }; + } - tooltip - .append('div') - .attr('class', 'counter'); + function resolveUrl(base, href) { + if (!baseUrls[' ' + base]) { + // we can ignore everything in base after the last slash of its path component, + // but we might need to add _that_ + // https://tools.ietf.org/html/rfc3986#section-3 + if (/^[^:]+:\/*[^/]*$/.test(base)) { + baseUrls[' ' + base] = base + '/'; + } else { + baseUrls[' ' + base] = base.replace(/[^/]*$/, ''); + } + } + base = baseUrls[' ' + base]; - tooltip.call(listener); + if (href.slice(0, 2) === '//') { + return base.replace(/:[\s\S]*/, ':') + href; + } else if (href.charAt(0) === '/') { + return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href; + } else { + return base + href; + } + } + var baseUrls = {}; + var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; - listener.on('click', function(which) { - if (which === 'right') { - d3_select('.curtain-tooltip.intro-mouse .counter') - .text(String(++counter)); + function noop() {} + noop.exec = noop; - if (counter === times) { - window.setTimeout(function() { continueTo(chapters); }, 1000); - } - } - }); + function merge(obj) { + var i = 1, + target, + key; - function continueTo(nextStep) { - listener.on('click', null); - tooltip.call(listener.off); - tooltip.select('.counter').remove(); - nextStep(); + for (; i < arguments.length; i++) { + target = arguments[i]; + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; } + } } + return obj; + } + + /** + * Marked + */ - function chapters() { - dispatch$$1.call('done'); - reveal('.intro-nav-wrap .chapter-navigation', - t('intro.welcome.chapters', { next: t('intro.navigation.title') }) - ); + function marked(src, opt, callback) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked(): input parameter is undefined or null'); + } + if (typeof src !== 'string') { + throw new Error('marked(): input parameter is of type ' + + Object.prototype.toString.call(src) + ', string expected'); } + if (callback || typeof opt === 'function') { + if (!callback) { + callback = opt; + opt = null; + } - chapter.enter = function() { - welcome(); - }; + opt = merge({}, marked.defaults, opt || {}); + var highlight = opt.highlight, + tokens, + pending, + i = 0; - chapter.exit = function() { - listener.off(); - d3_select('.curtain-tooltip.intro-mouse') - .selectAll('.counter') - .remove(); - }; + try { + tokens = Lexer.lex(src, opt); + } catch (e) { + return callback(e); + } + pending = tokens.length; - chapter.restart = function() { - chapter.exit(); - chapter.enter(); - }; + var done = function(err) { + if (err) { + opt.highlight = highlight; + return callback(err); + } + var out; - return utilRebind(chapter, dispatch$$1, 'on'); -} + try { + out = Parser.parse(tokens, opt); + } catch (e) { + err = e; + } + opt.highlight = highlight; + return err + ? callback(err) + : callback(null, out); + }; -function clickListener() { - var dispatch$$1 = dispatch('click'), - minTime = 120, - tooltip = d3_select(null), - down = {}; + if (!highlight || highlight.length < 3) { + return done(); + } - // `down` keeps track of which buttons/keys are down. - // Setting a property in `down` happens immediately. - // Unsetting a property in `down` is delayed because - // on Windows a contextmenu event happens after keyup/mouseup + delete opt.highlight; - function keydown() { - if (event.keyCode === 93) { // context menu - event.preventDefault(); - event.stopPropagation(); - down.menu = event.timeStamp; - tooltip.classed('rightclick', true); - } - } + if (!pending) return done(); + for (; i < tokens.length; i++) { + (function(token) { + if (token.type !== 'code') { + return --pending || done(); + } + return highlight(token.text, token.lang, function(err, code) { + if (err) return done(err); + if (code == null || code === token.text) { + return --pending || done(); + } + token.text = code; + token.escaped = true; + --pending || done(); + }); + })(tokens[i]); + } - function keyup() { - if (event.keyCode === 93) { // context menu - event.preventDefault(); - event.stopPropagation(); - var endTime = event.timeStamp, - startTime = down.menu || endTime, - delay = (endTime - startTime < minTime) ? minTime : 0; + return; + } + try { + if (opt) opt = merge({}, marked.defaults, opt); + return Parser.parse(Lexer.lex(src, opt), opt); + } catch (e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + if ((opt || marked.defaults).silent) { + return '

      An error occurred:

      '
      +          + escape(e.message + '', true)
      +          + '
      '; + } + throw e; + } + } - window.setTimeout(function() { - tooltip.classed('rightclick', false); - down.menu = undefined; // delayed, for Windows - }, delay); + /** + * Options + */ - dispatch$$1.call('click', this, 'right'); - } - } + marked.options = + marked.setOptions = function(opt) { + merge(marked.defaults, opt); + return marked; + }; + marked.defaults = { + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: false, + sanitizer: null, + mangle: true, + smartLists: false, + silent: false, + highlight: null, + langPrefix: 'lang-', + smartypants: false, + headerPrefix: '', + renderer: new Renderer(), + xhtml: false, + baseUrl: null + }; - function mousedown() { - var button = event.button; - if (button === 0 && !event.ctrlKey) { - tooltip.classed('leftclick', true); - } else if (button === 2) { - tooltip.classed('rightclick', true); - } - down[button] = event.timeStamp; - } + /** + * Expose + */ + marked.Parser = Parser; + marked.parser = Parser.parse; - function mouseup() { - var button = event.button, - endTime = event.timeStamp, - startTime = down[button] || endTime, - delay = (endTime - startTime < minTime) ? minTime : 0; + marked.Renderer = Renderer; + marked.TextRenderer = TextRenderer; - if (button === 0 && !event.ctrlKey) { - window.setTimeout(function() { - tooltip.classed('leftclick', false); - down[button] = undefined; // delayed, for Windows - }, delay); + marked.Lexer = Lexer; + marked.lexer = Lexer.lex; - dispatch$$1.call('click', this, 'left'); + marked.InlineLexer = InlineLexer; + marked.inlineLexer = InlineLexer.output; - } else if (button === 2) { - window.setTimeout(function() { - tooltip.classed('rightclick', false); - down[button] = undefined; // delayed, for Windows - }, delay); + marked.parse = marked; - dispatch$$1.call('click', this, 'right'); + { + module.exports = marked; + } + })(commonjsGlobal || (typeof window !== 'undefined' ? window : commonjsGlobal)); + }); - } else { - window.setTimeout(function() { - down[button] = undefined; // delayed, for Windows - }, delay); - } - } + function pointBox(loc, context) { + var rect = context.surfaceRect(); + var point$$1 = context.curtainProjection(loc); + return { + left: point$$1[0] + rect.left - 40, + top: point$$1[1] + rect.top - 60, + width: 80, + height: 90 + }; + } - function contextmenu() { - event.preventDefault(); - event.stopPropagation(); - if (!down[2] && !down.menu) { - tooltip.classed('rightclick', true); - window.setTimeout(function() { - tooltip.classed('rightclick', false); - }, minTime); - dispatch$$1.call('click', this, 'right'); - } - } + function pad$1(locOrBox, padding, context) { + var box; + if (locOrBox instanceof Array) { + var rect = context.surfaceRect(); + var point$$1 = context.curtainProjection(locOrBox); + box = { + left: point$$1[0] + rect.left, + top: point$$1[1] + rect.top + }; + } else { + box = locOrBox; + } + return { + left: box.left - padding, + top: box.top - padding, + width: (box.width || 0) + 2 * padding, + height: (box.width || 0) + 2 * padding + }; + } - var behavior = function(selection$$1) { - tooltip = selection$$1; - down = {}; - d3_select(window) - .on('keydown.intro', keydown) - .on('keyup.intro', keyup) - .on('mousedown.intro', mousedown) - .on('mouseup.intro', mouseup) - .on('contextmenu.intro', contextmenu); - }; + function icon(name, svgklass, useklass) { + return '' + + ''; + } - behavior.off = function() { - d3_select(window) - .on('keydown.intro', null) - .on('keyup.intro', null) - .on('mousedown.intro', null) - .on('mouseup.intro', null) - .on('contextmenu.intro', null); + function slugify(text) { + return text.toString().toLowerCase() + .replace(/\s+/g, '-') // Replace spaces with - + .replace(/[^\w\-]+/g, '') // Remove all non-word chars + .replace(/\-\-+/g, '-') // Replace multiple - with single - + .replace(/^-+/, '') // Trim - from start of text + .replace(/-+$/, ''); // Trim - from end of text + } - tooltip - .classed('leftclick', false) - .classed('rightclick', false); - }; - return utilRebind(behavior, dispatch$$1, 'on'); -} + // console warning for missing walkthrough names + var missingStrings = {}; + function checkKey(key, text) { + if (t(key, { default: undefined}) === undefined) { + if (missingStrings.hasOwnProperty(key)) return; // warn once + missingStrings[key] = text; + var missing = key + ': ' + text; + if (typeof console !== 'undefined') console.log(missing); // eslint-disable-line + } + } -function uiIntroNavigation(context, reveal) { - var dispatch$$1 = dispatch('done'), - timeouts = [], - hallId = 'n2061', - townHall = [-85.63591, 41.94285], - springStreetId = 'w397', - springStreetEndId = 'n1834', - springStreet = [-85.63582, 41.94255], - onewayField = context.presets().field('oneway'), - maxspeedField = context.presets().field('maxspeed'); + function localize(obj) { + var key; - var chapter = { - title: 'intro.navigation.title' - }; + // Assign name if entity has one.. + var name = obj.tags && obj.tags.name; + if (name) { + key = 'intro.graph.name.' + slugify(name); + obj.tags.name = t(key, { default: name }); + checkKey(key, name); + } + // Assign street name if entity has one.. + var street = obj.tags && obj.tags['addr:street']; + if (street) { + key = 'intro.graph.name.' + slugify(street); + obj.tags['addr:street'] = t(key, { default: street }); + checkKey(key, street); + + // Add address details common across walkthrough.. + var addrTags = [ + 'block_number', 'city', 'county', 'district', 'hamlet', 'neighbourhood', + 'postcode', 'province', 'quarter', 'state', 'subdistrict', 'suburb' + ]; + addrTags.forEach(function(k) { + var key = 'intro.graph.' + k, + tag = 'addr:' + k, + val = obj.tags && obj.tags[tag], + str = t(key, { default: val }); + + if (str) { + if (str.match(/^<.*>$/) !== null) { + delete obj.tags[tag]; + } else { + obj.tags[tag] = str; + } + } + }); + } - function timeout(f, t$$1) { - timeouts.push(window.setTimeout(f, t$$1)); - } + return obj; + } - function eventCancel() { - event.stopPropagation(); - event.preventDefault(); - } + // Used to detect squareness.. some duplicataion of code from actionOrthogonalize. + function isMostlySquare(points) { + // note: uses 15 here instead of the 12 from actionOrthogonalize because + // actionOrthogonalize can actually straighten some larger angles as it iterates + var threshold = 15, // degrees within right or straight + lowerBound = Math.cos((90 - threshold) * Math.PI / 180), // near right + upperBound = Math.cos(threshold * Math.PI / 180), // near straight + mag; + for (var i = 0; i < points.length; i++) { + mag = Math.abs(normalizedDotProduct(i, points)); + if (mag > lowerBound && mag < upperBound) { + return false; + } + } - function isTownHallSelected() { - var ids = context.selectedIDs(); - return ids.length === 1 && ids[0] === hallId; - } + return true; - function dragMap() { - context.enter(modeBrowse(context)); - context.history().reset('initial'); + function normalizedDotProduct(i, points) { + var a = points[(i - 1 + points.length) % points.length], + b = points[i], + c = points[(i + 1) % points.length], + p = subtractPoints(a, b), + q = subtractPoints(c, b); - var msec = transitionTime(townHall, context.map().center()); - if (msec) { reveal(null, null, { duration: 0 }); } - context.map().zoom(19).centerEase(townHall, msec); + p = normalizePoint(p); + q = normalizePoint(q); - timeout(function() { - var centerStart = context.map().center(); + return p[0] * q[0] + p[1] * q[1]; - reveal('#surface', t('intro.navigation.drag')); - context.map().on('drawn.intro', function() { - reveal('#surface', t('intro.navigation.drag'), { duration: 0 }); - }); - context.map().on('move.intro', function() { - var centerNow = context.map().center(); - if (centerStart[0] !== centerNow[0] || centerStart[1] !== centerNow[1]) { - context.map().on('move.intro', null); - timeout(function() { continueTo(zoomMap); }, 3000); - } - }); + function subtractPoints(a, b) { + return [a[0] - b[0], a[1] - b[1]]; + } - }, msec + 100); + function normalizePoint(point$$1) { + var vector = [0, 0]; + var length = Math.sqrt(point$$1[0] * point$$1[0] + point$$1[1] * point$$1[1]); + if (length !== 0) { + vector[0] = point$$1[0] / length; + vector[1] = point$$1[1] / length; + } + return vector; + } + } + } - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - nextStep(); - } - } + function selectMenuItem(operation) { + var selector$$1 = '.edit-menu .edit-menu-item-' + operation + + ', .radial-menu .radial-menu-item-' + operation; + return select(selector$$1); + } - function zoomMap() { - var zoomStart = context.map().zoom(); - reveal('#surface', - t('intro.navigation.zoom', { - plus: icon('#icon-plus', 'pre-text'), - minus: icon('#icon-minus', 'pre-text') - }) - ); + function transitionTime(point1, point2) { + var distance = geoSphericalDistance(point1, point2); + if (distance === 0) + return 0; + else if (distance < 80) + return 500; + else + return 1000; + } - context.map().on('drawn.intro', function() { - reveal('#surface', - t('intro.navigation.zoom', { - plus: icon('#icon-plus', 'pre-text'), - minus: icon('#icon-minus', 'pre-text') - }), { duration: 0 } - ); - }); + var dataIntroGraph = {"n1":{"id":"n1","loc":[-85.631039,41.948829]},"n10":{"id":"n10","loc":[-85.634733,41.941588]},"n100":{"id":"n100","loc":[-85.637395,41.942252]},"n1000":{"id":"n1000","loc":[-85.632699,41.944763]},"n1001":{"id":"n1001","loc":[-85.632685,41.944763]},"n1002":{"id":"n1002","loc":[-85.632673,41.944755]},"n1003":{"id":"n1003","loc":[-85.632595,41.944682]},"n1004":{"id":"n1004","loc":[-85.632576,41.944673]},"n1005":{"id":"n1005","loc":[-85.632551,41.944667]},"n1006":{"id":"n1006","loc":[-85.63253,41.944667]},"n1007":{"id":"n1007","loc":[-85.632502,41.944669]},"n1008":{"id":"n1008","loc":[-85.632483,41.944677]},"n1009":{"id":"n1009","loc":[-85.632383,41.944731]},"n101":{"id":"n101","loc":[-85.637357,41.942252]},"n1010":{"id":"n1010","loc":[-85.63349,41.944976],"tags":{"addr:city":"Three Rivers","addr:housenumber":"31","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Sherwin-Williams","shop":"paint"}},"n1011":{"id":"n1011","loc":[-85.633548,41.945034],"tags":{"addr:city":"Three Rivers","addr:housenumber":"33","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Unique Jewelry","shop":"jewelry"}},"n1012":{"id":"n1012","loc":[-85.633683,41.945129],"tags":{"addr:city":"Three Rivers","addr:housenumber":"37","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"World Fare","shop":"gift"}},"n1013":{"id":"n1013","loc":[-85.634563,41.945469],"tags":{"addr:city":"Three Rivers","addr:housenumber":"62","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Golden Finch Framing","shop":"frame"}},"n1014":{"id":"n1014","loc":[-85.634469,41.945379],"tags":{"addr:city":"Three Rivers","addr:housenumber":"58","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Dollar Tree","shop":"second_hand"}},"n1015":{"id":"n1015","loc":[-85.634227,41.945159],"tags":{"addr:city":"Three Rivers","addr:housenumber":"48","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","amenity":"theatre","name":"Riviera Theatre"}},"n1016":{"id":"n1016","loc":[-85.634057,41.945012],"tags":{"addr:city":"Three Rivers","addr:housenumber":"42","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"River City Appliance","shop":"appliance"}},"n1017":{"id":"n1017","loc":[-85.633879,41.945325],"tags":{"addr:city":"Three Rivers","addr:housenumber":"45","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Paparazzi Tattoo","shop":"tattoo"}},"n1018":{"id":"n1018","loc":[-85.634914,41.945839],"tags":{"addr:city":"Three Rivers","addr:housenumber":"88","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","amenity":"bank","name":"Southern Michigan Bank"}},"n1019":{"id":"n1019","loc":[-85.634514,41.946176]},"n102":{"id":"n102","loc":[-85.637357,41.942216]},"n1020":{"id":"n1020","loc":[-85.634087,41.946178]},"n1021":{"id":"n1021","loc":[-85.634357,41.945805]},"n1022":{"id":"n1022","loc":[-85.634389,41.945788]},"n1023":{"id":"n1023","loc":[-85.634491,41.94581]},"n1024":{"id":"n1024","loc":[-85.634513,41.945853]},"n1025":{"id":"n1025","loc":[-85.634506,41.94583]},"n1026":{"id":"n1026","loc":[-85.634762,41.946056],"tags":{"crossing":"zebra","highway":"crossing"}},"n1027":{"id":"n1027","loc":[-85.634767,41.946172]},"n1028":{"id":"n1028","loc":[-85.634622,41.946175],"tags":{"crossing":"zebra","highway":"crossing"}},"n1029":{"id":"n1029","loc":[-85.640655,41.942057]},"n103":{"id":"n103","loc":[-85.637386,41.942054]},"n1030":{"id":"n1030","loc":[-85.640947,41.942057]},"n1031":{"id":"n1031","loc":[-85.640957,41.942593]},"n1032":{"id":"n1032","loc":[-85.630953,41.960873]},"n1033":{"id":"n1033","loc":[-85.632174,41.960679]},"n1034":{"id":"n1034","loc":[-85.638785,41.943066]},"n1035":{"id":"n1035","loc":[-85.638853,41.943065]},"n1036":{"id":"n1036","loc":[-85.638855,41.943183]},"n1037":{"id":"n1037","loc":[-85.638552,41.943189]},"n1038":{"id":"n1038","loc":[-85.63855,41.943149]},"n1039":{"id":"n1039","loc":[-85.638638,41.943068]},"n104":{"id":"n104","loc":[-85.637387,41.942125]},"n1040":{"id":"n1040","loc":[-85.638638,41.943078]},"n1041":{"id":"n1041","loc":[-85.638813,41.943163]},"n1042":{"id":"n1042","loc":[-85.638684,41.943165]},"n1043":{"id":"n1043","loc":[-85.638682,41.943105]},"n1044":{"id":"n1044","loc":[-85.638706,41.943105]},"n1045":{"id":"n1045","loc":[-85.638707,41.943117]},"n1046":{"id":"n1046","loc":[-85.638812,41.943115]},"n1047":{"id":"n1047","loc":[-85.638769,41.943407]},"n1048":{"id":"n1048","loc":[-85.638549,41.943407]},"n1049":{"id":"n1049","loc":[-85.638567,41.943555]},"n105":{"id":"n105","loc":[-85.637319,41.942125]},"n1050":{"id":"n1050","loc":[-85.638426,41.943554]},"n1051":{"id":"n1051","loc":[-85.638427,41.94346]},"n1052":{"id":"n1052","loc":[-85.638568,41.943461]},"n1053":{"id":"n1053","loc":[-85.639264,41.943415]},"n1054":{"id":"n1054","loc":[-85.639082,41.943417]},"n1055":{"id":"n1055","loc":[-85.63908,41.943331]},"n1056":{"id":"n1056","loc":[-85.639136,41.94333]},"n1057":{"id":"n1057","loc":[-85.639158,41.943312]},"n1058":{"id":"n1058","loc":[-85.639188,41.943313]},"n1059":{"id":"n1059","loc":[-85.639211,41.943331]},"n106":{"id":"n106","loc":[-85.637319,41.942137]},"n1060":{"id":"n1060","loc":[-85.639262,41.943331]},"n1061":{"id":"n1061","loc":[-85.638986,41.943515]},"n1062":{"id":"n1062","loc":[-85.63888,41.943521]},"n1063":{"id":"n1063","loc":[-85.638871,41.943436]},"n1064":{"id":"n1064","loc":[-85.638958,41.943431]},"n1065":{"id":"n1065","loc":[-85.638979,41.943443]},"n1066":{"id":"n1066","loc":[-85.63926,41.943703]},"n1067":{"id":"n1067","loc":[-85.639152,41.943704]},"n1068":{"id":"n1068","loc":[-85.639152,41.943691]},"n1069":{"id":"n1069","loc":[-85.639063,41.943691]},"n107":{"id":"n107","loc":[-85.637259,41.942137]},"n1070":{"id":"n1070","loc":[-85.639062,41.943613]},"n1071":{"id":"n1071","loc":[-85.639259,41.943611]},"n1072":{"id":"n1072","loc":[-85.639117,41.943726]},"n1073":{"id":"n1073","loc":[-85.639118,41.943767]},"n1074":{"id":"n1074","loc":[-85.639051,41.943768]},"n1075":{"id":"n1075","loc":[-85.63905,41.943727]},"n1076":{"id":"n1076","loc":[-85.638627,41.943716]},"n1077":{"id":"n1077","loc":[-85.63863,41.943634]},"n1078":{"id":"n1078","loc":[-85.63844,41.943631]},"n1079":{"id":"n1079","loc":[-85.638437,41.943729]},"n108":{"id":"n108","loc":[-85.637259,41.942126]},"n1080":{"id":"n1080","loc":[-85.638533,41.94373]},"n1081":{"id":"n1081","loc":[-85.638534,41.943715]},"n1082":{"id":"n1082","loc":[-85.638678,41.943941]},"n1083":{"id":"n1083","loc":[-85.638522,41.943944]},"n1084":{"id":"n1084","loc":[-85.63852,41.943864]},"n1085":{"id":"n1085","loc":[-85.638676,41.943861]},"n1086":{"id":"n1086","loc":[-85.638663,41.944059]},"n1087":{"id":"n1087","loc":[-85.638513,41.944061]},"n1088":{"id":"n1088","loc":[-85.638511,41.943991]},"n1089":{"id":"n1089","loc":[-85.638661,41.943989]},"n109":{"id":"n109","loc":[-85.637193,41.942126]},"n1090":{"id":"n1090","loc":[-85.63865,41.944134]},"n1091":{"id":"n1091","loc":[-85.638429,41.944144]},"n1092":{"id":"n1092","loc":[-85.638426,41.944106]},"n1093":{"id":"n1093","loc":[-85.638476,41.944104]},"n1094":{"id":"n1094","loc":[-85.638475,41.94409]},"n1095":{"id":"n1095","loc":[-85.638594,41.944084]},"n1096":{"id":"n1096","loc":[-85.638595,41.944101]},"n1097":{"id":"n1097","loc":[-85.638647,41.944099]},"n1098":{"id":"n1098","loc":[-85.63829,41.944154]},"n1099":{"id":"n1099","loc":[-85.638558,41.944155]},"n11":{"id":"n11","loc":[-85.634602,41.941523]},"n110":{"id":"n110","loc":[-85.637192,41.942053]},"n1100":{"id":"n1100","loc":[-85.638558,41.944338]},"n1101":{"id":"n1101","loc":[-85.638851,41.944408]},"n1102":{"id":"n1102","loc":[-85.637771,41.943989]},"n1103":{"id":"n1103","loc":[-85.639345,41.943964]},"n1104":{"id":"n1104","loc":[-85.638515,41.94397]},"n1105":{"id":"n1105","loc":[-85.639256,41.943928]},"n1106":{"id":"n1106","loc":[-85.639157,41.943929]},"n1107":{"id":"n1107","loc":[-85.639156,41.9439]},"n1108":{"id":"n1108","loc":[-85.639118,41.9439]},"n1109":{"id":"n1109","loc":[-85.639116,41.94382]},"n111":{"id":"n111","loc":[-85.637248,41.942053]},"n1110":{"id":"n1110","loc":[-85.639202,41.943819]},"n1111":{"id":"n1111","loc":[-85.639202,41.943837]},"n1112":{"id":"n1112","loc":[-85.639293,41.943836]},"n1113":{"id":"n1113","loc":[-85.639295,41.943898]},"n1114":{"id":"n1114","loc":[-85.639255,41.943898]},"n1115":{"id":"n1115","loc":[-85.639296,41.944083]},"n1116":{"id":"n1116","loc":[-85.639144,41.944084]},"n1117":{"id":"n1117","loc":[-85.639143,41.944026]},"n1118":{"id":"n1118","loc":[-85.639162,41.944026]},"n1119":{"id":"n1119","loc":[-85.639162,41.944]},"n112":{"id":"n112","loc":[-85.637248,41.942042]},"n1120":{"id":"n1120","loc":[-85.639295,41.943999]},"n1121":{"id":"n1121","loc":[-85.639131,41.944139]},"n1122":{"id":"n1122","loc":[-85.63901,41.94414]},"n1123":{"id":"n1123","loc":[-85.63901,41.944076]},"n1124":{"id":"n1124","loc":[-85.63913,41.944075]},"n1125":{"id":"n1125","loc":[-85.639092,41.944155]},"n1126":{"id":"n1126","loc":[-85.639093,41.944308]},"n1127":{"id":"n1127","loc":[-85.639225,41.944308]},"n1128":{"id":"n1128","loc":[-85.639225,41.94429]},"n1129":{"id":"n1129","loc":[-85.639253,41.944289]},"n113":{"id":"n113","loc":[-85.637338,41.942041]},"n1130":{"id":"n1130","loc":[-85.639253,41.944269]},"n1131":{"id":"n1131","loc":[-85.639243,41.944269]},"n1132":{"id":"n1132","loc":[-85.639243,41.944229]},"n1133":{"id":"n1133","loc":[-85.639224,41.944229]},"n1134":{"id":"n1134","loc":[-85.639224,41.944196]},"n1135":{"id":"n1135","loc":[-85.639195,41.944196]},"n1136":{"id":"n1136","loc":[-85.639195,41.944155]},"n1137":{"id":"n1137","loc":[-85.639072,41.944154]},"n1138":{"id":"n1138","loc":[-85.638865,41.944154]},"n1139":{"id":"n1139","loc":[-85.638863,41.943967]},"n114":{"id":"n114","loc":[-85.637338,41.942055]},"n1140":{"id":"n1140","loc":[-85.6386,41.942698]},"n1141":{"id":"n1141","loc":[-85.639348,41.942698]},"n1142":{"id":"n1142","loc":[-85.639377,41.944984]},"n1143":{"id":"n1143","loc":[-85.63937,41.945013]},"n1144":{"id":"n1144","loc":[-85.639357,41.945033]},"n1145":{"id":"n1145","loc":[-85.639353,41.945053]},"n1146":{"id":"n1146","loc":[-85.639352,41.945084]},"n1147":{"id":"n1147","loc":[-85.638278,41.945516]},"n1148":{"id":"n1148","loc":[-85.637505,41.945801]},"n1149":{"id":"n1149","loc":[-85.637327,41.945857]},"n115":{"id":"n115","loc":[-85.637583,41.941943]},"n1150":{"id":"n1150","loc":[-85.637168,41.945899]},"n1151":{"id":"n1151","loc":[-85.637017,41.94593]},"n1152":{"id":"n1152","loc":[-85.637185,41.945938]},"n1153":{"id":"n1153","loc":[-85.63682,41.945963]},"n1154":{"id":"n1154","loc":[-85.636639,41.945984]},"n1155":{"id":"n1155","loc":[-85.636439,41.945999]},"n1156":{"id":"n1156","loc":[-85.635801,41.945999]},"n1157":{"id":"n1157","loc":[-85.635769,41.945908]},"n1158":{"id":"n1158","loc":[-85.635953,41.946154]},"n1159":{"id":"n1159","loc":[-85.635472,41.94598]},"n116":{"id":"n116","loc":[-85.637584,41.941983]},"n1160":{"id":"n1160","loc":[-85.635409,41.945981]},"n1161":{"id":"n1161","loc":[-85.635583,41.945987]},"n1162":{"id":"n1162","loc":[-85.636452,41.945805]},"n1163":{"id":"n1163","loc":[-85.636425,41.94582]},"n1164":{"id":"n1164","loc":[-85.636396,41.945817]},"n1165":{"id":"n1165","loc":[-85.636368,41.945797]},"n1166":{"id":"n1166","loc":[-85.636346,41.945767]},"n1167":{"id":"n1167","loc":[-85.636307,41.945745]},"n1168":{"id":"n1168","loc":[-85.636194,41.94565]},"n1169":{"id":"n1169","loc":[-85.636121,41.945579]},"n117":{"id":"n117","loc":[-85.63751,41.941983]},"n1170":{"id":"n1170","loc":[-85.635995,41.945432]},"n1171":{"id":"n1171","loc":[-85.637564,41.943538]},"n1172":{"id":"n1172","loc":[-85.63756,41.943505]},"n1173":{"id":"n1173","loc":[-85.637435,41.943489]},"n1174":{"id":"n1174","loc":[-85.637093,41.943556]},"n1175":{"id":"n1175","loc":[-85.634836,41.941574]},"n1176":{"id":"n1176","loc":[-85.634692,41.9415]},"n1177":{"id":"n1177","loc":[-85.634261,41.941337]},"n1178":{"id":"n1178","loc":[-85.634208,41.940962]},"n1179":{"id":"n1179","loc":[-85.635247,41.940968]},"n118":{"id":"n118","loc":[-85.637509,41.941944]},"n1180":{"id":"n1180","loc":[-85.63514,41.941205]},"n1181":{"id":"n1181","loc":[-85.634858,41.941511]},"n1182":{"id":"n1182","loc":[-85.630725,41.943465]},"n1183":{"id":"n1183","loc":[-85.632591,41.942826]},"n1184":{"id":"n1184","loc":[-85.634487,41.941928]},"n1185":{"id":"n1185","loc":[-85.634499,41.942056]},"n1186":{"id":"n1186","loc":[-85.63433,41.943102]},"n1187":{"id":"n1187","loc":[-85.634158,41.943151]},"n1188":{"id":"n1188","loc":[-85.634107,41.94305]},"n1189":{"id":"n1189","loc":[-85.634279,41.943002]},"n119":{"id":"n119","loc":[-85.637724,41.941973]},"n1190":{"id":"n1190","loc":[-85.634362,41.943762]},"n1191":{"id":"n1191","loc":[-85.634331,41.943731]},"n1192":{"id":"n1192","loc":[-85.634396,41.943695]},"n1193":{"id":"n1193","loc":[-85.634426,41.943726]},"n1194":{"id":"n1194","loc":[-85.621569,41.956021]},"n1195":{"id":"n1195","loc":[-85.621574,41.956164]},"n1196":{"id":"n1196","loc":[-85.621489,41.956165]},"n1197":{"id":"n1197","loc":[-85.621488,41.956136]},"n1198":{"id":"n1198","loc":[-85.621372,41.956139]},"n1199":{"id":"n1199","loc":[-85.621369,41.956049]},"n12":{"id":"n12","loc":[-85.63359,41.941093]},"n120":{"id":"n120","loc":[-85.637633,41.941973]},"n1200":{"id":"n1200","loc":[-85.621493,41.956047]},"n1201":{"id":"n1201","loc":[-85.621492,41.956022]},"n1202":{"id":"n1202","loc":[-85.619744,41.953192]},"n1203":{"id":"n1203","loc":[-85.619059,41.953902]},"n1204":{"id":"n1204","loc":[-85.623984,41.95469]},"n1205":{"id":"n1205","loc":[-85.630159,41.958208]},"n1206":{"id":"n1206","loc":[-85.63002,41.958208]},"n1207":{"id":"n1207","loc":[-85.630021,41.95814]},"n1208":{"id":"n1208","loc":[-85.63,41.95814]},"n1209":{"id":"n1209","loc":[-85.63,41.958043]},"n121":{"id":"n121","loc":[-85.637633,41.941853]},"n1210":{"id":"n1210","loc":[-85.630159,41.958043]},"n1211":{"id":"n1211","loc":[-85.630304,41.957566]},"n1212":{"id":"n1212","loc":[-85.630303,41.957684]},"n1213":{"id":"n1213","loc":[-85.630073,41.957683]},"n1214":{"id":"n1214","loc":[-85.630072,41.957721]},"n1215":{"id":"n1215","loc":[-85.629993,41.95772]},"n1216":{"id":"n1216","loc":[-85.629993,41.95768]},"n1217":{"id":"n1217","loc":[-85.629968,41.95768]},"n1218":{"id":"n1218","loc":[-85.629969,41.957588]},"n1219":{"id":"n1219","loc":[-85.630219,41.95759]},"n122":{"id":"n122","loc":[-85.637724,41.941853]},"n1220":{"id":"n1220","loc":[-85.630219,41.957566]},"n1221":{"id":"n1221","loc":[-85.630717,41.957744]},"n1222":{"id":"n1222","loc":[-85.630596,41.957745]},"n1223":{"id":"n1223","loc":[-85.630598,41.957553]},"n1224":{"id":"n1224","loc":[-85.630717,41.957555]},"n1225":{"id":"n1225","loc":[-85.630609,41.957745]},"n1226":{"id":"n1226","loc":[-85.63061,41.957789]},"n1227":{"id":"n1227","loc":[-85.630327,41.957791]},"n1228":{"id":"n1228","loc":[-85.630324,41.95752]},"n1229":{"id":"n1229","loc":[-85.630325,41.95756]},"n123":{"id":"n123","loc":[-85.637773,41.941988]},"n1230":{"id":"n1230","loc":[-85.63057,41.95756]},"n1231":{"id":"n1231","loc":[-85.63069,41.958016]},"n1232":{"id":"n1232","loc":[-85.630586,41.958017]},"n1233":{"id":"n1233","loc":[-85.630584,41.957956]},"n1234":{"id":"n1234","loc":[-85.630614,41.957956]},"n1235":{"id":"n1235","loc":[-85.630611,41.957835]},"n1236":{"id":"n1236","loc":[-85.630737,41.957833]},"n1237":{"id":"n1237","loc":[-85.630739,41.957921]},"n1238":{"id":"n1238","loc":[-85.630688,41.957922]},"n1239":{"id":"n1239","loc":[-85.630719,41.958291]},"n124":{"id":"n124","loc":[-85.637773,41.942046]},"n1240":{"id":"n1240","loc":[-85.630592,41.958291]},"n1241":{"id":"n1241","loc":[-85.630593,41.958108]},"n1242":{"id":"n1242","loc":[-85.630701,41.958109]},"n1243":{"id":"n1243","loc":[-85.6307,41.958173]},"n1244":{"id":"n1244","loc":[-85.630711,41.958173]},"n1245":{"id":"n1245","loc":[-85.630711,41.958233]},"n1246":{"id":"n1246","loc":[-85.630719,41.958233]},"n1247":{"id":"n1247","loc":[-85.630523,41.958329]},"n1248":{"id":"n1248","loc":[-85.630388,41.958329]},"n1249":{"id":"n1249","loc":[-85.630387,41.958262]},"n125":{"id":"n125","loc":[-85.637693,41.942047]},"n1250":{"id":"n1250","loc":[-85.630523,41.958261]},"n1251":{"id":"n1251","loc":[-85.63072,41.958636]},"n1252":{"id":"n1252","loc":[-85.630721,41.958709]},"n1253":{"id":"n1253","loc":[-85.630503,41.958712]},"n1254":{"id":"n1254","loc":[-85.630498,41.958511]},"n1255":{"id":"n1255","loc":[-85.630635,41.95851]},"n1256":{"id":"n1256","loc":[-85.630638,41.958636]},"n1257":{"id":"n1257","loc":[-85.630437,41.958822]},"n1258":{"id":"n1258","loc":[-85.630437,41.958849]},"n1259":{"id":"n1259","loc":[-85.630393,41.958849]},"n126":{"id":"n126","loc":[-85.637692,41.941988]},"n1260":{"id":"n1260","loc":[-85.630393,41.958822]},"n1261":{"id":"n1261","loc":[-85.630605,41.959102]},"n1262":{"id":"n1262","loc":[-85.63049,41.959104]},"n1263":{"id":"n1263","loc":[-85.630487,41.958996]},"n1264":{"id":"n1264","loc":[-85.630462,41.958996]},"n1265":{"id":"n1265","loc":[-85.63046,41.958922]},"n1266":{"id":"n1266","loc":[-85.630562,41.958921]},"n1267":{"id":"n1267","loc":[-85.630564,41.958992]},"n1268":{"id":"n1268","loc":[-85.630602,41.958992]},"n1269":{"id":"n1269","loc":[-85.630126,41.957096]},"n127":{"id":"n127","loc":[-85.637604,41.941994]},"n1270":{"id":"n1270","loc":[-85.630129,41.957283]},"n1271":{"id":"n1271","loc":[-85.629993,41.957284]},"n1272":{"id":"n1272","loc":[-85.629992,41.957216]},"n1273":{"id":"n1273","loc":[-85.630015,41.957215]},"n1274":{"id":"n1274","loc":[-85.630013,41.957097]},"n1275":{"id":"n1275","loc":[-85.630211,41.956592]},"n1276":{"id":"n1276","loc":[-85.630211,41.956676]},"n1277":{"id":"n1277","loc":[-85.630162,41.956676]},"n1278":{"id":"n1278","loc":[-85.630162,41.95676]},"n1279":{"id":"n1279","loc":[-85.630037,41.956761]},"n128":{"id":"n128","loc":[-85.637604,41.942057]},"n1280":{"id":"n1280","loc":[-85.630037,41.956592]},"n1281":{"id":"n1281","loc":[-85.630309,41.95653]},"n1282":{"id":"n1282","loc":[-85.630326,41.957065]},"n1283":{"id":"n1283","loc":[-85.630118,41.957065]},"n1284":{"id":"n1284","loc":[-85.630119,41.957096]},"n1285":{"id":"n1285","loc":[-85.63067,41.957307]},"n1286":{"id":"n1286","loc":[-85.630536,41.957308]},"n1287":{"id":"n1287","loc":[-85.630533,41.957111]},"n1288":{"id":"n1288","loc":[-85.630667,41.95711]},"n1289":{"id":"n1289","loc":[-85.630676,41.956808]},"n129":{"id":"n129","loc":[-85.63748,41.942057]},"n1290":{"id":"n1290","loc":[-85.630551,41.956808]},"n1291":{"id":"n1291","loc":[-85.630552,41.956982]},"n1292":{"id":"n1292","loc":[-85.63059,41.956982]},"n1293":{"id":"n1293","loc":[-85.63059,41.957001]},"n1294":{"id":"n1294","loc":[-85.630692,41.957001]},"n1295":{"id":"n1295","loc":[-85.630692,41.956936]},"n1296":{"id":"n1296","loc":[-85.630676,41.956936]},"n1297":{"id":"n1297","loc":[-85.630496,41.956889]},"n1298":{"id":"n1298","loc":[-85.630501,41.956947]},"n1299":{"id":"n1299","loc":[-85.630377,41.956953]},"n13":{"id":"n13","loc":[-85.633643,41.941143]},"n130":{"id":"n130","loc":[-85.63748,41.941994]},"n1300":{"id":"n1300","loc":[-85.630359,41.956938]},"n1301":{"id":"n1301","loc":[-85.630359,41.956912]},"n1302":{"id":"n1302","loc":[-85.63038,41.956894]},"n1303":{"id":"n1303","loc":[-85.630679,41.956747]},"n1304":{"id":"n1304","loc":[-85.630572,41.956748]},"n1305":{"id":"n1305","loc":[-85.63057,41.956668]},"n1306":{"id":"n1306","loc":[-85.630501,41.956669]},"n1307":{"id":"n1307","loc":[-85.630499,41.95659]},"n1308":{"id":"n1308","loc":[-85.630565,41.956589]},"n1309":{"id":"n1309","loc":[-85.630564,41.956541]},"n131":{"id":"n131","loc":[-85.637431,41.941832]},"n1310":{"id":"n1310","loc":[-85.630686,41.956539]},"n1311":{"id":"n1311","loc":[-85.630688,41.956631]},"n1312":{"id":"n1312","loc":[-85.630676,41.956631]},"n1313":{"id":"n1313","loc":[-85.630686,41.956487]},"n1314":{"id":"n1314","loc":[-85.63059,41.956487]},"n1315":{"id":"n1315","loc":[-85.63059,41.956396]},"n1316":{"id":"n1316","loc":[-85.630686,41.956396]},"n1317":{"id":"n1317","loc":[-85.630643,41.9563]},"n1318":{"id":"n1318","loc":[-85.630548,41.956301]},"n1319":{"id":"n1319","loc":[-85.630545,41.956217]},"n132":{"id":"n132","loc":[-85.637432,41.94189]},"n1320":{"id":"n1320","loc":[-85.630529,41.956214]},"n1321":{"id":"n1321","loc":[-85.630521,41.956202]},"n1322":{"id":"n1322","loc":[-85.63052,41.95618]},"n1323":{"id":"n1323","loc":[-85.630527,41.956169]},"n1324":{"id":"n1324","loc":[-85.630544,41.956163]},"n1325":{"id":"n1325","loc":[-85.630543,41.956094]},"n1326":{"id":"n1326","loc":[-85.630641,41.956093]},"n1327":{"id":"n1327","loc":[-85.630642,41.956134]},"n1328":{"id":"n1328","loc":[-85.630656,41.956134]},"n1329":{"id":"n1329","loc":[-85.630657,41.956252]},"n133":{"id":"n133","loc":[-85.637412,41.94189]},"n1330":{"id":"n1330","loc":[-85.630643,41.956252]},"n1331":{"id":"n1331","loc":[-85.630409,41.956044]},"n1332":{"id":"n1332","loc":[-85.630409,41.956075]},"n1333":{"id":"n1333","loc":[-85.630195,41.956078]},"n1334":{"id":"n1334","loc":[-85.630195,41.9561]},"n1335":{"id":"n1335","loc":[-85.630088,41.956101]},"n1336":{"id":"n1336","loc":[-85.630087,41.956048]},"n1337":{"id":"n1337","loc":[-85.630345,41.956114]},"n1338":{"id":"n1338","loc":[-85.630328,41.956113]},"n1339":{"id":"n1339","loc":[-85.63034,41.956189]},"n134":{"id":"n134","loc":[-85.637413,41.941938]},"n1340":{"id":"n1340","loc":[-85.630355,41.956185]},"n1341":{"id":"n1341","loc":[-85.630311,41.956117]},"n1342":{"id":"n1342","loc":[-85.630297,41.956125]},"n1343":{"id":"n1343","loc":[-85.630287,41.956136]},"n1344":{"id":"n1344","loc":[-85.630283,41.956149]},"n1345":{"id":"n1345","loc":[-85.630285,41.956162]},"n1346":{"id":"n1346","loc":[-85.630293,41.956174]},"n1347":{"id":"n1347","loc":[-85.630306,41.956183]},"n1348":{"id":"n1348","loc":[-85.630322,41.956188]},"n1349":{"id":"n1349","loc":[-85.630368,41.956179]},"n135":{"id":"n135","loc":[-85.637342,41.941939]},"n1350":{"id":"n1350","loc":[-85.630378,41.95617]},"n1351":{"id":"n1351","loc":[-85.630384,41.956159]},"n1352":{"id":"n1352","loc":[-85.630385,41.956147]},"n1353":{"id":"n1353","loc":[-85.630381,41.956136]},"n1354":{"id":"n1354","loc":[-85.630372,41.956126]},"n1355":{"id":"n1355","loc":[-85.63036,41.956118]},"n1356":{"id":"n1356","loc":[-85.630776,41.956041]},"n1357":{"id":"n1357","loc":[-85.630195,41.956036]},"n1358":{"id":"n1358","loc":[-85.630137,41.956037]},"n1359":{"id":"n1359","loc":[-85.630136,41.956006]},"n136":{"id":"n136","loc":[-85.637342,41.941914]},"n1360":{"id":"n1360","loc":[-85.630194,41.956005]},"n1361":{"id":"n1361","loc":[-85.629864,41.956039]},"n1362":{"id":"n1362","loc":[-85.629864,41.955862]},"n1363":{"id":"n1363","loc":[-85.629541,41.958291]},"n1364":{"id":"n1364","loc":[-85.629419,41.958292]},"n1365":{"id":"n1365","loc":[-85.629417,41.958168]},"n1366":{"id":"n1366","loc":[-85.629445,41.958168]},"n1367":{"id":"n1367","loc":[-85.629444,41.958109]},"n1368":{"id":"n1368","loc":[-85.629537,41.958108]},"n1369":{"id":"n1369","loc":[-85.629351,41.958136]},"n137":{"id":"n137","loc":[-85.637212,41.941916]},"n1370":{"id":"n1370","loc":[-85.629352,41.958202]},"n1371":{"id":"n1371","loc":[-85.629365,41.958202]},"n1372":{"id":"n1372","loc":[-85.629365,41.958223]},"n1373":{"id":"n1373","loc":[-85.629291,41.958224]},"n1374":{"id":"n1374","loc":[-85.62929,41.958137]},"n1375":{"id":"n1375","loc":[-85.629443,41.958073]},"n1376":{"id":"n1376","loc":[-85.629252,41.958075]},"n1377":{"id":"n1377","loc":[-85.629253,41.95827]},"n1378":{"id":"n1378","loc":[-85.629566,41.957585]},"n1379":{"id":"n1379","loc":[-85.629566,41.957692]},"n138":{"id":"n138","loc":[-85.637211,41.941835]},"n1380":{"id":"n1380","loc":[-85.629281,41.957693]},"n1381":{"id":"n1381","loc":[-85.62928,41.957585]},"n1382":{"id":"n1382","loc":[-85.629004,41.957599]},"n1383":{"id":"n1383","loc":[-85.629004,41.957682]},"n1384":{"id":"n1384","loc":[-85.628902,41.957682]},"n1385":{"id":"n1385","loc":[-85.628902,41.957723]},"n1386":{"id":"n1386","loc":[-85.628731,41.957724]},"n1387":{"id":"n1387","loc":[-85.628731,41.9576]},"n1388":{"id":"n1388","loc":[-85.62836,41.957679]},"n1389":{"id":"n1389","loc":[-85.628359,41.957759]},"n139":{"id":"n139","loc":[-85.637293,41.941834]},"n1390":{"id":"n1390","loc":[-85.628062,41.957757]},"n1391":{"id":"n1391","loc":[-85.628063,41.957657]},"n1392":{"id":"n1392","loc":[-85.628198,41.957657]},"n1393":{"id":"n1393","loc":[-85.628198,41.957678]},"n1394":{"id":"n1394","loc":[-85.627775,41.958095]},"n1395":{"id":"n1395","loc":[-85.627608,41.958095]},"n1396":{"id":"n1396","loc":[-85.627606,41.957829]},"n1397":{"id":"n1397","loc":[-85.627774,41.957829]},"n1398":{"id":"n1398","loc":[-85.626816,41.957636]},"n1399":{"id":"n1399","loc":[-85.626787,41.957681]},"n14":{"id":"n14","loc":[-85.633643,41.940122]},"n140":{"id":"n140","loc":[-85.637293,41.941823]},"n1400":{"id":"n1400","loc":[-85.626673,41.95764]},"n1401":{"id":"n1401","loc":[-85.626703,41.957594]},"n1402":{"id":"n1402","loc":[-85.62694,41.95752]},"n1403":{"id":"n1403","loc":[-85.62688,41.957611]},"n1404":{"id":"n1404","loc":[-85.626798,41.957582]},"n1405":{"id":"n1405","loc":[-85.626793,41.95759]},"n1406":{"id":"n1406","loc":[-85.626657,41.95754]},"n1407":{"id":"n1407","loc":[-85.626666,41.957526]},"n1408":{"id":"n1408","loc":[-85.626584,41.957497]},"n1409":{"id":"n1409","loc":[-85.626638,41.957415]},"n141":{"id":"n141","loc":[-85.637363,41.941822]},"n1410":{"id":"n1410","loc":[-85.626731,41.957449]},"n1411":{"id":"n1411","loc":[-85.626725,41.957457]},"n1412":{"id":"n1412","loc":[-85.626843,41.9575]},"n1413":{"id":"n1413","loc":[-85.626851,41.957487]},"n1414":{"id":"n1414","loc":[-85.626579,41.957521]},"n1415":{"id":"n1415","loc":[-85.626537,41.957587]},"n1416":{"id":"n1416","loc":[-85.626427,41.957551]},"n1417":{"id":"n1417","loc":[-85.626468,41.957483]},"n1418":{"id":"n1418","loc":[-85.626592,41.957639]},"n1419":{"id":"n1419","loc":[-85.626807,41.957713]},"n142":{"id":"n142","loc":[-85.637364,41.941833]},"n1420":{"id":"n1420","loc":[-85.627129,41.957401]},"n1421":{"id":"n1421","loc":[-85.627209,41.95742]},"n1422":{"id":"n1422","loc":[-85.627302,41.957435]},"n1423":{"id":"n1423","loc":[-85.629566,41.957048]},"n1424":{"id":"n1424","loc":[-85.629568,41.957215]},"n1425":{"id":"n1425","loc":[-85.629383,41.957216]},"n1426":{"id":"n1426","loc":[-85.629384,41.95727]},"n1427":{"id":"n1427","loc":[-85.629231,41.957271]},"n1428":{"id":"n1428","loc":[-85.62923,41.957198]},"n1429":{"id":"n1429","loc":[-85.629322,41.957198]},"n143":{"id":"n143","loc":[-85.637559,41.942448]},"n1430":{"id":"n1430","loc":[-85.629321,41.957108]},"n1431":{"id":"n1431","loc":[-85.629441,41.957108]},"n1432":{"id":"n1432","loc":[-85.62944,41.957049]},"n1433":{"id":"n1433","loc":[-85.629337,41.957018]},"n1434":{"id":"n1434","loc":[-85.629366,41.957028]},"n1435":{"id":"n1435","loc":[-85.629375,41.957044]},"n1436":{"id":"n1436","loc":[-85.629354,41.957071]},"n1437":{"id":"n1437","loc":[-85.629317,41.957071]},"n1438":{"id":"n1438","loc":[-85.62929,41.957074]},"n1439":{"id":"n1439","loc":[-85.62927,41.957084]},"n144":{"id":"n144","loc":[-85.637036,41.942454]},"n1440":{"id":"n1440","loc":[-85.629232,41.957081]},"n1441":{"id":"n1441","loc":[-85.629222,41.957057]},"n1442":{"id":"n1442","loc":[-85.629259,41.957025]},"n1443":{"id":"n1443","loc":[-85.629293,41.957017]},"n1444":{"id":"n1444","loc":[-85.629251,41.957085]},"n1445":{"id":"n1445","loc":[-85.629235,41.957041]},"n1446":{"id":"n1446","loc":[-85.62937,41.95706]},"n1447":{"id":"n1447","loc":[-85.629531,41.956909]},"n1448":{"id":"n1448","loc":[-85.629408,41.956909]},"n1449":{"id":"n1449","loc":[-85.629402,41.956681]},"n145":{"id":"n145","loc":[-85.636692,41.942828]},"n1450":{"id":"n1450","loc":[-85.62953,41.956681]},"n1451":{"id":"n1451","loc":[-85.629402,41.956728]},"n1452":{"id":"n1452","loc":[-85.629408,41.956845]},"n1453":{"id":"n1453","loc":[-85.629385,41.956845]},"n1454":{"id":"n1454","loc":[-85.629384,41.956728]},"n1455":{"id":"n1455","loc":[-85.629063,41.956973]},"n1456":{"id":"n1456","loc":[-85.629064,41.957009]},"n1457":{"id":"n1457","loc":[-85.62902,41.957009]},"n1458":{"id":"n1458","loc":[-85.629019,41.956973]},"n1459":{"id":"n1459","loc":[-85.629136,41.956633]},"n146":{"id":"n146","loc":[-85.635929,41.942826]},"n1460":{"id":"n1460","loc":[-85.629084,41.956632]},"n1461":{"id":"n1461","loc":[-85.629084,41.956605]},"n1462":{"id":"n1462","loc":[-85.629136,41.956605]},"n1463":{"id":"n1463","loc":[-85.629153,41.956657]},"n1464":{"id":"n1464","loc":[-85.627914,41.956661]},"n1465":{"id":"n1465","loc":[-85.630096,41.956101]},"n1466":{"id":"n1466","loc":[-85.630097,41.95612]},"n1467":{"id":"n1467","loc":[-85.630011,41.956121]},"n1468":{"id":"n1468","loc":[-85.630015,41.956374]},"n1469":{"id":"n1469","loc":[-85.629148,41.95626]},"n147":{"id":"n147","loc":[-85.636433,41.942828]},"n1470":{"id":"n1470","loc":[-85.629527,41.956591]},"n1471":{"id":"n1471","loc":[-85.629405,41.956591]},"n1472":{"id":"n1472","loc":[-85.629405,41.956459]},"n1473":{"id":"n1473","loc":[-85.629369,41.956459]},"n1474":{"id":"n1474","loc":[-85.629369,41.956424]},"n1475":{"id":"n1475","loc":[-85.629413,41.956424]},"n1476":{"id":"n1476","loc":[-85.629414,41.956326]},"n1477":{"id":"n1477","loc":[-85.629522,41.956326]},"n1478":{"id":"n1478","loc":[-85.629522,41.956487]},"n1479":{"id":"n1479","loc":[-85.629527,41.956487]},"n148":{"id":"n148","loc":[-85.636435,41.942864],"tags":{"entrance":"yes"}},"n1480":{"id":"n1480","loc":[-85.629414,41.95634]},"n1481":{"id":"n1481","loc":[-85.629149,41.956338]},"n1482":{"id":"n1482","loc":[-85.62931,41.956531]},"n1483":{"id":"n1483","loc":[-85.629291,41.95655]},"n1484":{"id":"n1484","loc":[-85.629255,41.95655]},"n1485":{"id":"n1485","loc":[-85.629236,41.956533]},"n1486":{"id":"n1486","loc":[-85.629237,41.956461]},"n1487":{"id":"n1487","loc":[-85.629257,41.956445]},"n1488":{"id":"n1488","loc":[-85.629257,41.956428]},"n1489":{"id":"n1489","loc":[-85.629287,41.956428]},"n149":{"id":"n149","loc":[-85.637235,41.942622]},"n1490":{"id":"n1490","loc":[-85.629287,41.956445]},"n1491":{"id":"n1491","loc":[-85.62931,41.95646]},"n1492":{"id":"n1492","loc":[-85.629049,41.956425]},"n1493":{"id":"n1493","loc":[-85.628907,41.956427]},"n1494":{"id":"n1494","loc":[-85.628907,41.956455]},"n1495":{"id":"n1495","loc":[-85.628841,41.956455]},"n1496":{"id":"n1496","loc":[-85.62884,41.956424]},"n1497":{"id":"n1497","loc":[-85.628764,41.956425]},"n1498":{"id":"n1498","loc":[-85.628762,41.956323]},"n1499":{"id":"n1499","loc":[-85.628808,41.956323]},"n15":{"id":"n15","loc":[-85.633477,41.940187]},"n150":{"id":"n150","loc":[-85.637247,41.943116]},"n1500":{"id":"n1500","loc":[-85.628808,41.956314]},"n1501":{"id":"n1501","loc":[-85.628911,41.956313]},"n1502":{"id":"n1502","loc":[-85.628911,41.956322]},"n1503":{"id":"n1503","loc":[-85.62896,41.956322]},"n1504":{"id":"n1504","loc":[-85.62896,41.956348]},"n1505":{"id":"n1505","loc":[-85.629047,41.956347]},"n1506":{"id":"n1506","loc":[-85.628893,41.957263]},"n1507":{"id":"n1507","loc":[-85.628788,41.957264]},"n1508":{"id":"n1508","loc":[-85.628786,41.95711]},"n1509":{"id":"n1509","loc":[-85.628894,41.957109]},"n151":{"id":"n151","loc":[-85.637564,41.943116]},"n1510":{"id":"n1510","loc":[-85.628893,41.957075]},"n1511":{"id":"n1511","loc":[-85.628965,41.957075]},"n1512":{"id":"n1512","loc":[-85.628965,41.957111]},"n1513":{"id":"n1513","loc":[-85.629035,41.95711]},"n1514":{"id":"n1514","loc":[-85.629036,41.957209]},"n1515":{"id":"n1515","loc":[-85.628893,41.95721]},"n1516":{"id":"n1516","loc":[-85.631348,41.95773]},"n1517":{"id":"n1517","loc":[-85.631101,41.957732]},"n1518":{"id":"n1518","loc":[-85.631099,41.957558]},"n1519":{"id":"n1519","loc":[-85.63123,41.957557]},"n152":{"id":"n152","loc":[-85.637552,41.942619]},"n1520":{"id":"n1520","loc":[-85.631231,41.957618]},"n1521":{"id":"n1521","loc":[-85.63129,41.957618]},"n1522":{"id":"n1522","loc":[-85.63129,41.957651]},"n1523":{"id":"n1523","loc":[-85.631346,41.957651]},"n1524":{"id":"n1524","loc":[-85.631366,41.95802]},"n1525":{"id":"n1525","loc":[-85.631141,41.958021]},"n1526":{"id":"n1526","loc":[-85.63114,41.957943]},"n1527":{"id":"n1527","loc":[-85.631167,41.957943]},"n1528":{"id":"n1528","loc":[-85.631166,41.957808]},"n1529":{"id":"n1529","loc":[-85.631301,41.957807]},"n153":{"id":"n153","loc":[-85.63763,41.942528]},"n1530":{"id":"n1530","loc":[-85.631302,41.95789]},"n1531":{"id":"n1531","loc":[-85.631364,41.95789]},"n1532":{"id":"n1532","loc":[-85.631539,41.957754]},"n1533":{"id":"n1533","loc":[-85.631069,41.957756]},"n1534":{"id":"n1534","loc":[-85.631536,41.957518]},"n1535":{"id":"n1535","loc":[-85.631543,41.957995]},"n1536":{"id":"n1536","loc":[-85.631531,41.957748]},"n1537":{"id":"n1537","loc":[-85.631485,41.957748]},"n1538":{"id":"n1538","loc":[-85.631484,41.957698]},"n1539":{"id":"n1539","loc":[-85.631531,41.957698]},"n154":{"id":"n154","loc":[-85.637151,41.94253]},"n1540":{"id":"n1540","loc":[-85.631586,41.957742]},"n1541":{"id":"n1541","loc":[-85.63155,41.957742]},"n1542":{"id":"n1542","loc":[-85.631551,41.957702]},"n1543":{"id":"n1543","loc":[-85.631587,41.957702]},"n1544":{"id":"n1544","loc":[-85.631534,41.95807]},"n1545":{"id":"n1545","loc":[-85.631534,41.958097]},"n1546":{"id":"n1546","loc":[-85.631491,41.958097]},"n1547":{"id":"n1547","loc":[-85.631491,41.95807]},"n1548":{"id":"n1548","loc":[-85.631304,41.958861]},"n1549":{"id":"n1549","loc":[-85.631186,41.958862]},"n155":{"id":"n155","loc":[-85.63715,41.942424]},"n1550":{"id":"n1550","loc":[-85.631182,41.958653]},"n1551":{"id":"n1551","loc":[-85.6313,41.958651]},"n1552":{"id":"n1552","loc":[-85.631293,41.95854]},"n1553":{"id":"n1553","loc":[-85.631176,41.958539]},"n1554":{"id":"n1554","loc":[-85.631176,41.958377]},"n1555":{"id":"n1555","loc":[-85.631297,41.958377]},"n1556":{"id":"n1556","loc":[-85.631297,41.958422]},"n1557":{"id":"n1557","loc":[-85.631333,41.958422]},"n1558":{"id":"n1558","loc":[-85.631333,41.958479]},"n1559":{"id":"n1559","loc":[-85.631293,41.958479]},"n156":{"id":"n156","loc":[-85.637629,41.942422]},"n1560":{"id":"n1560","loc":[-85.631951,41.958908]},"n1561":{"id":"n1561","loc":[-85.631838,41.958909]},"n1562":{"id":"n1562","loc":[-85.631837,41.958847]},"n1563":{"id":"n1563","loc":[-85.631859,41.958847]},"n1564":{"id":"n1564","loc":[-85.631858,41.958746]},"n1565":{"id":"n1565","loc":[-85.631961,41.958745]},"n1566":{"id":"n1566","loc":[-85.631962,41.958812]},"n1567":{"id":"n1567","loc":[-85.631949,41.958813]},"n1568":{"id":"n1568","loc":[-85.631579,41.958913]},"n1569":{"id":"n1569","loc":[-85.631567,41.95864]},"n157":{"id":"n157","loc":[-85.638232,41.942477]},"n1570":{"id":"n1570","loc":[-85.631942,41.958639]},"n1571":{"id":"n1571","loc":[-85.631543,41.958594]},"n1572":{"id":"n1572","loc":[-85.631543,41.958065]},"n1573":{"id":"n1573","loc":[-85.631888,41.958546]},"n1574":{"id":"n1574","loc":[-85.631804,41.958546]},"n1575":{"id":"n1575","loc":[-85.631803,41.95841]},"n1576":{"id":"n1576","loc":[-85.631886,41.958409]},"n1577":{"id":"n1577","loc":[-85.631897,41.958125]},"n1578":{"id":"n1578","loc":[-85.631755,41.958126]},"n1579":{"id":"n1579","loc":[-85.631756,41.958174]},"n158":{"id":"n158","loc":[-85.637775,41.942483]},"n1580":{"id":"n1580","loc":[-85.63178,41.958174]},"n1581":{"id":"n1581","loc":[-85.631782,41.958272]},"n1582":{"id":"n1582","loc":[-85.631922,41.958271]},"n1583":{"id":"n1583","loc":[-85.631922,41.958244]},"n1584":{"id":"n1584","loc":[-85.631883,41.958245]},"n1585":{"id":"n1585","loc":[-85.631882,41.958175]},"n1586":{"id":"n1586","loc":[-85.631898,41.958175]},"n1587":{"id":"n1587","loc":[-85.631924,41.958032]},"n1588":{"id":"n1588","loc":[-85.631762,41.958032]},"n1589":{"id":"n1589","loc":[-85.63176,41.957827]},"n159":{"id":"n159","loc":[-85.638107,41.942512]},"n1590":{"id":"n1590","loc":[-85.631888,41.957826]},"n1591":{"id":"n1591","loc":[-85.631888,41.957892]},"n1592":{"id":"n1592","loc":[-85.631871,41.957892]},"n1593":{"id":"n1593","loc":[-85.631872,41.957949]},"n1594":{"id":"n1594","loc":[-85.631923,41.957949]},"n1595":{"id":"n1595","loc":[-85.631695,41.95795]},"n1596":{"id":"n1596","loc":[-85.631666,41.957975]},"n1597":{"id":"n1597","loc":[-85.63163,41.957975]},"n1598":{"id":"n1598","loc":[-85.6316,41.957951]},"n1599":{"id":"n1599","loc":[-85.6316,41.95785]},"n16":{"id":"n16","loc":[-85.63341,41.94032]},"n160":{"id":"n160","loc":[-85.637763,41.942514]},"n1600":{"id":"n1600","loc":[-85.63166,41.95785]},"n1601":{"id":"n1601","loc":[-85.631696,41.957873]},"n1602":{"id":"n1602","loc":[-85.631924,41.957762]},"n1603":{"id":"n1603","loc":[-85.631762,41.957762]},"n1604":{"id":"n1604","loc":[-85.631762,41.957708]},"n1605":{"id":"n1605","loc":[-85.631785,41.957708]},"n1606":{"id":"n1606","loc":[-85.631785,41.957606]},"n1607":{"id":"n1607","loc":[-85.631734,41.957606]},"n1608":{"id":"n1608","loc":[-85.631734,41.957538]},"n1609":{"id":"n1609","loc":[-85.631821,41.957538]},"n161":{"id":"n161","loc":[-85.637763,41.942445]},"n1610":{"id":"n1610","loc":[-85.631935,41.957545]},"n1611":{"id":"n1611","loc":[-85.631821,41.957544]},"n1612":{"id":"n1612","loc":[-85.631935,41.957645]},"n1613":{"id":"n1613","loc":[-85.631924,41.957645]},"n1614":{"id":"n1614","loc":[-85.627135,41.953828]},"n1615":{"id":"n1615","loc":[-85.633517,41.941353],"tags":{"man_made":"lighthouse"}},"n1616":{"id":"n1616","loc":[-85.633659,41.942041],"tags":{"amenity":"bbq"}},"n1617":{"id":"n1617","loc":[-85.63662,41.942911],"tags":{"amenity":"toilets"}},"n1618":{"id":"n1618","loc":[-85.637487,41.943876],"tags":{"amenity":"toilets"}},"n1619":{"id":"n1619","loc":[-85.634938,41.941917],"tags":{"amenity":"toilets"}},"n162":{"id":"n162","loc":[-85.638107,41.942443]},"n1620":{"id":"n1620","loc":[-85.632427,41.941678],"tags":{"amenity":"bbq"}},"n1621":{"id":"n1621","loc":[-85.638033,41.944568],"tags":{"amenity":"bbq"}},"n1622":{"id":"n1622","loc":[-85.638052,41.944522],"tags":{"amenity":"bbq"}},"n1623":{"id":"n1623","loc":[-85.635001,41.941965]},"n1624":{"id":"n1624","loc":[-85.634635,41.941884]},"n1625":{"id":"n1625","loc":[-85.634667,41.941894]},"n1626":{"id":"n1626","loc":[-85.634791,41.942011]},"n1627":{"id":"n1627","loc":[-85.634749,41.941938]},"n1628":{"id":"n1628","loc":[-85.627295,41.953946],"tags":{"barrier":"gate"}},"n1629":{"id":"n1629","loc":[-85.629076,41.954689]},"n163":{"id":"n163","loc":[-85.638813,41.942475]},"n1630":{"id":"n1630","loc":[-85.640667,41.942595]},"n1631":{"id":"n1631","loc":[-85.639455,41.94261]},"n1632":{"id":"n1632","loc":[-85.643407,41.942336]},"n1633":{"id":"n1633","loc":[-85.641845,41.941316]},"n1634":{"id":"n1634","loc":[-85.643322,41.942224]},"n1635":{"id":"n1635","loc":[-85.643301,41.942124]},"n1636":{"id":"n1636","loc":[-85.640639,41.941326]},"n1637":{"id":"n1637","loc":[-85.640614,41.940058]},"n1638":{"id":"n1638","loc":[-85.639428,41.941335]},"n1639":{"id":"n1639","loc":[-85.643078,41.941293]},"n164":{"id":"n164","loc":[-85.63883,41.942422]},"n1640":{"id":"n1640","loc":[-85.64371,41.942302]},"n1641":{"id":"n1641","loc":[-85.643056,41.94001]},"n1642":{"id":"n1642","loc":[-85.643097,41.942575],"tags":{"highway":"traffic_signals","traffic_signals":"signal","traffic_signals:direction":"both"}},"n1643":{"id":"n1643","loc":[-85.641855,41.942586]},"n1644":{"id":"n1644","loc":[-85.643549,41.942209]},"n1645":{"id":"n1645","loc":[-85.639359,41.94007]},"n1646":{"id":"n1646","loc":[-85.642797,41.940522]},"n1647":{"id":"n1647","loc":[-85.642589,41.940523]},"n1648":{"id":"n1648","loc":[-85.642587,41.940287]},"n1649":{"id":"n1649","loc":[-85.642797,41.940286]},"n165":{"id":"n165","loc":[-85.63883,41.942508]},"n1650":{"id":"n1650","loc":[-85.642571,41.940523]},"n1651":{"id":"n1651","loc":[-85.642568,41.940286]},"n1652":{"id":"n1652","loc":[-85.642316,41.940289]},"n1653":{"id":"n1653","loc":[-85.642321,41.940436]},"n1654":{"id":"n1654","loc":[-85.642292,41.940458]},"n1655":{"id":"n1655","loc":[-85.642287,41.940483]},"n1656":{"id":"n1656","loc":[-85.642323,41.940509]},"n1657":{"id":"n1657","loc":[-85.642385,41.940511]},"n1658":{"id":"n1658","loc":[-85.642408,41.940526]},"n1659":{"id":"n1659","loc":[-85.641962,41.94109]},"n166":{"id":"n166","loc":[-85.638364,41.942508]},"n1660":{"id":"n1660","loc":[-85.642753,41.941084]},"n1661":{"id":"n1661","loc":[-85.642752,41.941004]},"n1662":{"id":"n1662","loc":[-85.642806,41.941003]},"n1663":{"id":"n1663","loc":[-85.642803,41.940731]},"n1664":{"id":"n1664","loc":[-85.642741,41.940732]},"n1665":{"id":"n1665","loc":[-85.64274,41.940645]},"n1666":{"id":"n1666","loc":[-85.641957,41.940651]},"n1667":{"id":"n1667","loc":[-85.642937,41.941241]},"n1668":{"id":"n1668","loc":[-85.641776,41.941253]},"n1669":{"id":"n1669","loc":[-85.641766,41.940598]},"n167":{"id":"n167","loc":[-85.638836,41.942167]},"n1670":{"id":"n1670","loc":[-85.64198,41.940598]},"n1671":{"id":"n1671","loc":[-85.641961,41.940137]},"n1672":{"id":"n1672","loc":[-85.642934,41.94012]},"n1673":{"id":"n1673","loc":[-85.643074,41.941173]},"n1674":{"id":"n1674","loc":[-85.642841,41.940997]},"n1675":{"id":"n1675","loc":[-85.642839,41.940721]},"n1676":{"id":"n1676","loc":[-85.643065,41.940552]},"n1677":{"id":"n1677","loc":[-85.642732,41.94124]},"n1678":{"id":"n1678","loc":[-85.641815,41.941246]},"n1679":{"id":"n1679","loc":[-85.641813,41.941132]},"n168":{"id":"n168","loc":[-85.638836,41.94229]},"n1680":{"id":"n1680","loc":[-85.641839,41.941111]},"n1681":{"id":"n1681","loc":[-85.641884,41.941098]},"n1682":{"id":"n1682","loc":[-85.642732,41.941092]},"n1683":{"id":"n1683","loc":[-85.642776,41.941302]},"n1684":{"id":"n1684","loc":[-85.632788,41.946236]},"n1685":{"id":"n1685","loc":[-85.622342,41.953127]},"n1686":{"id":"n1686","loc":[-85.641848,41.941167]},"n1687":{"id":"n1687","loc":[-85.643753,41.941503]},"n1688":{"id":"n1688","loc":[-85.643762,41.942119]},"n1689":{"id":"n1689","loc":[-85.64238,41.942262]},"n169":{"id":"n169","loc":[-85.638594,41.94229]},"n1690":{"id":"n1690","loc":[-85.642374,41.941944]},"n1691":{"id":"n1691","loc":[-85.642518,41.941943]},"n1692":{"id":"n1692","loc":[-85.642519,41.94198]},"n1693":{"id":"n1693","loc":[-85.642831,41.941977]},"n1694":{"id":"n1694","loc":[-85.642837,41.942312]},"n1695":{"id":"n1695","loc":[-85.642495,41.942315]},"n1696":{"id":"n1696","loc":[-85.642494,41.942261]},"n1697":{"id":"n1697","loc":[-85.641087,41.942433]},"n1698":{"id":"n1698","loc":[-85.641081,41.942006]},"n1699":{"id":"n1699","loc":[-85.641244,41.942005]},"n17":{"id":"n17","loc":[-85.633478,41.94081]},"n170":{"id":"n170","loc":[-85.638594,41.942422]},"n1700":{"id":"n1700","loc":[-85.64125,41.942431]},"n1701":{"id":"n1701","loc":[-85.641331,41.942968]},"n1702":{"id":"n1702","loc":[-85.641328,41.942713]},"n1703":{"id":"n1703","loc":[-85.641521,41.942712]},"n1704":{"id":"n1704","loc":[-85.641523,41.942924]},"n1705":{"id":"n1705","loc":[-85.641504,41.942924]},"n1706":{"id":"n1706","loc":[-85.641505,41.942967]},"n1707":{"id":"n1707","loc":[-85.638612,41.942408]},"n1708":{"id":"n1708","loc":[-85.638612,41.942327]},"n1709":{"id":"n1709","loc":[-85.638775,41.942327]},"n171":{"id":"n171","loc":[-85.638364,41.942356]},"n1710":{"id":"n1710","loc":[-85.638775,41.942299]},"n1711":{"id":"n1711","loc":[-85.638835,41.942298]},"n1712":{"id":"n1712","loc":[-85.638835,41.942407]},"n1713":{"id":"n1713","loc":[-85.639116,41.942444]},"n1714":{"id":"n1714","loc":[-85.639114,41.942362]},"n1715":{"id":"n1715","loc":[-85.639294,41.94236]},"n1716":{"id":"n1716","loc":[-85.639296,41.942442]},"n1717":{"id":"n1717","loc":[-85.639808,41.942385]},"n1718":{"id":"n1718","loc":[-85.639805,41.942285]},"n1719":{"id":"n1719","loc":[-85.639988,41.942283]},"n172":{"id":"n172","loc":[-85.638364,41.942167]},"n1720":{"id":"n1720","loc":[-85.63999,41.942383]},"n1721":{"id":"n1721","loc":[-85.639633,41.943023]},"n1722":{"id":"n1722","loc":[-85.639867,41.943019]},"n1723":{"id":"n1723","loc":[-85.639866,41.942964]},"n1724":{"id":"n1724","loc":[-85.639888,41.942963]},"n1725":{"id":"n1725","loc":[-85.639883,41.942779]},"n1726":{"id":"n1726","loc":[-85.639851,41.94278]},"n1727":{"id":"n1727","loc":[-85.63985,41.94274]},"n1728":{"id":"n1728","loc":[-85.639789,41.942741]},"n1729":{"id":"n1729","loc":[-85.639789,41.942753]},"n173":{"id":"n173","loc":[-85.639038,41.942463]},"n1730":{"id":"n1730","loc":[-85.639698,41.942754]},"n1731":{"id":"n1731","loc":[-85.639699,41.942788]},"n1732":{"id":"n1732","loc":[-85.639675,41.942789]},"n1733":{"id":"n1733","loc":[-85.639676,41.94283]},"n1734":{"id":"n1734","loc":[-85.639701,41.942829]},"n1735":{"id":"n1735","loc":[-85.639702,41.942869]},"n1736":{"id":"n1736","loc":[-85.639629,41.94287]},"n1737":{"id":"n1737","loc":[-85.643568,41.942946]},"n1738":{"id":"n1738","loc":[-85.643568,41.942777]},"n1739":{"id":"n1739","loc":[-85.643401,41.942777]},"n174":{"id":"n174","loc":[-85.638897,41.942464]},"n1740":{"id":"n1740","loc":[-85.643401,41.942863]},"n1741":{"id":"n1741","loc":[-85.643448,41.942863]},"n1742":{"id":"n1742","loc":[-85.643448,41.942946]},"n1743":{"id":"n1743","loc":[-85.642836,41.942981]},"n1744":{"id":"n1744","loc":[-85.642917,41.942979]},"n1745":{"id":"n1745","loc":[-85.642914,41.942904]},"n1746":{"id":"n1746","loc":[-85.642938,41.942903]},"n1747":{"id":"n1747","loc":[-85.642935,41.942813]},"n1748":{"id":"n1748","loc":[-85.642775,41.942816]},"n1749":{"id":"n1749","loc":[-85.642778,41.942906]},"n175":{"id":"n175","loc":[-85.638897,41.942423]},"n1750":{"id":"n1750","loc":[-85.642833,41.942905]},"n1751":{"id":"n1751","loc":[-85.642302,41.942886]},"n1752":{"id":"n1752","loc":[-85.642299,41.942721]},"n1753":{"id":"n1753","loc":[-85.642422,41.94272]},"n1754":{"id":"n1754","loc":[-85.642425,41.942868]},"n1755":{"id":"n1755","loc":[-85.642385,41.942869]},"n1756":{"id":"n1756","loc":[-85.642385,41.942885]},"n1757":{"id":"n1757","loc":[-85.641533,41.942939]},"n1758":{"id":"n1758","loc":[-85.64161,41.942877]},"n1759":{"id":"n1759","loc":[-85.641676,41.942922]},"n176":{"id":"n176","loc":[-85.638853,41.942423]},"n1760":{"id":"n1760","loc":[-85.6416,41.942985]},"n1761":{"id":"n1761","loc":[-85.64206,41.942802]},"n1762":{"id":"n1762","loc":[-85.642059,41.942741]},"n1763":{"id":"n1763","loc":[-85.642196,41.942741]},"n1764":{"id":"n1764","loc":[-85.642196,41.942818]},"n1765":{"id":"n1765","loc":[-85.642128,41.942819]},"n1766":{"id":"n1766","loc":[-85.642128,41.942801]},"n1767":{"id":"n1767","loc":[-85.640943,41.942934]},"n1768":{"id":"n1768","loc":[-85.641035,41.942933]},"n1769":{"id":"n1769","loc":[-85.641032,41.942797]},"n177":{"id":"n177","loc":[-85.638852,41.94237]},"n1770":{"id":"n1770","loc":[-85.640997,41.942798]},"n1771":{"id":"n1771","loc":[-85.640996,41.942764]},"n1772":{"id":"n1772","loc":[-85.640861,41.942766]},"n1773":{"id":"n1773","loc":[-85.640862,41.942848]},"n1774":{"id":"n1774","loc":[-85.640941,41.942847]},"n1775":{"id":"n1775","loc":[-85.643766,41.942226]},"n1776":{"id":"n1776","loc":[-85.643768,41.942407]},"n1777":{"id":"n1777","loc":[-85.643218,41.94177]},"n1778":{"id":"n1778","loc":[-85.64321,41.941327]},"n1779":{"id":"n1779","loc":[-85.643649,41.941323]},"n178":{"id":"n178","loc":[-85.638892,41.94237]},"n1780":{"id":"n1780","loc":[-85.643656,41.941716]},"n1781":{"id":"n1781","loc":[-85.64358,41.941717]},"n1782":{"id":"n1782","loc":[-85.64358,41.941767]},"n1783":{"id":"n1783","loc":[-85.64382,41.941495]},"n1784":{"id":"n1784","loc":[-85.643817,41.941317]},"n1785":{"id":"n1785","loc":[-85.643235,41.941833]},"n1786":{"id":"n1786","loc":[-85.64335,41.941842]},"n1787":{"id":"n1787","loc":[-85.643504,41.941903]},"n1788":{"id":"n1788","loc":[-85.643554,41.941946]},"n1789":{"id":"n1789","loc":[-85.643618,41.942015]},"n179":{"id":"n179","loc":[-85.638891,41.942334]},"n1790":{"id":"n1790","loc":[-85.64346,41.941971]},"n1791":{"id":"n1791","loc":[-85.643528,41.942468]},"n1792":{"id":"n1792","loc":[-85.643621,41.942363]},"n1793":{"id":"n1793","loc":[-85.643496,41.942297]},"n1794":{"id":"n1794","loc":[-85.643446,41.942246]},"n1795":{"id":"n1795","loc":[-85.643398,41.942177]},"n1796":{"id":"n1796","loc":[-85.643398,41.942031]},"n1797":{"id":"n1797","loc":[-85.621531,41.952693]},"n1798":{"id":"n1798","loc":[-85.643221,41.942028]},"n1799":{"id":"n1799","loc":[-85.643225,41.942276]},"n18":{"id":"n18","loc":[-85.63345,41.94071]},"n180":{"id":"n180","loc":[-85.639037,41.942334]},"n1800":{"id":"n1800","loc":[-85.643265,41.942347]},"n1801":{"id":"n1801","loc":[-85.643323,41.942413]},"n1802":{"id":"n1802","loc":[-85.643411,41.94247]},"n1803":{"id":"n1803","loc":[-85.643459,41.942435]},"n1804":{"id":"n1804","loc":[-85.643767,41.942307]},"n1805":{"id":"n1805","loc":[-85.643661,41.942293]},"n1806":{"id":"n1806","loc":[-85.643578,41.942247]},"n1807":{"id":"n1807","loc":[-85.643522,41.942125]},"n1808":{"id":"n1808","loc":[-85.643515,41.942061]},"n1809":{"id":"n1809","loc":[-85.643346,41.941924]},"n181":{"id":"n181","loc":[-85.638074,41.941839]},"n1810":{"id":"n1810","loc":[-85.643086,41.94192]},"n1811":{"id":"n1811","loc":[-85.643529,41.94217]},"n1812":{"id":"n1812","loc":[-85.643489,41.942003]},"n1813":{"id":"n1813","loc":[-85.643295,41.941919]},"n1814":{"id":"n1814","loc":[-85.643305,41.942163]},"n1815":{"id":"n1815","loc":[-85.643354,41.942285]},"n1816":{"id":"n1816","loc":[-85.643472,41.942389]},"n1817":{"id":"n1817","loc":[-85.643608,41.942271]},"n1818":{"id":"n1818","loc":[-85.643876,41.941402]},"n1819":{"id":"n1819","loc":[-85.643818,41.941369]},"n182":{"id":"n182","loc":[-85.638076,41.941942]},"n1820":{"id":"n1820","loc":[-85.643682,41.941304]},"n1821":{"id":"n1821","loc":[-85.64359,41.941286]},"n1822":{"id":"n1822","loc":[-85.643317,41.941727]},"n1823":{"id":"n1823","loc":[-85.643301,41.941286]},"n1824":{"id":"n1824","loc":[-85.643553,41.941698]},"n1825":{"id":"n1825","loc":[-85.643543,41.941286]},"n1826":{"id":"n1826","loc":[-85.636967,41.940118]},"n1827":{"id":"n1827","loc":[-85.63378,41.940114]},"n1828":{"id":"n1828","loc":[-85.637254,41.940075]},"n1829":{"id":"n1829","loc":[-85.637002,41.941355]},"n183":{"id":"n183","loc":[-85.637955,41.941944]},"n1830":{"id":"n1830","loc":[-85.643532,41.94204]},"n1831":{"id":"n1831","loc":[-85.638235,41.942615]},"n1832":{"id":"n1832","loc":[-85.637039,41.942624]},"n1833":{"id":"n1833","loc":[-85.636369,41.94266]},"n1834":{"id":"n1834","loc":[-85.63582,41.942771],"tags":{"highway":"traffic_signals","traffic_signals":"emergency","traffic_signals:direction":"both"}},"n1835":{"id":"n1835","loc":[-85.634873,41.943044]},"n1836":{"id":"n1836","loc":[-85.643482,41.941976]},"n1837":{"id":"n1837","loc":[-85.64345,41.941945]},"n1838":{"id":"n1838","loc":[-85.641885,41.943851]},"n1839":{"id":"n1839","loc":[-85.641915,41.945121]},"n184":{"id":"n184","loc":[-85.637953,41.94184]},"n1840":{"id":"n1840","loc":[-85.639454,41.943871]},"n1841":{"id":"n1841","loc":[-85.639491,41.945191]},"n1842":{"id":"n1842","loc":[-85.635768,41.940113]},"n1843":{"id":"n1843","loc":[-85.638206,41.941345]},"n1844":{"id":"n1844","loc":[-85.640721,41.94513]},"n1845":{"id":"n1845","loc":[-85.643137,41.945103]},"n1846":{"id":"n1846","loc":[-85.638199,41.940079]},"n1847":{"id":"n1847","loc":[-85.640688,41.943861]},"n1848":{"id":"n1848","loc":[-85.643397,41.941924]},"n1849":{"id":"n1849","loc":[-85.643117,41.943841]},"n185":{"id":"n185","loc":[-85.637953,41.941866]},"n1850":{"id":"n1850","loc":[-85.636731,41.94263]},"n1851":{"id":"n1851","loc":[-85.63518,41.942955],"tags":{"highway":"crossing"}},"n1852":{"id":"n1852","loc":[-85.636152,41.942695]},"n1853":{"id":"n1853","loc":[-85.644202,41.941499]},"n1854":{"id":"n1854","loc":[-85.644211,41.942116]},"n1855":{"id":"n1855","loc":[-85.644233,41.942404]},"n1856":{"id":"n1856","loc":[-85.644231,41.942223]},"n1857":{"id":"n1857","loc":[-85.644133,41.941315]},"n1858":{"id":"n1858","loc":[-85.644136,41.941493]},"n1859":{"id":"n1859","loc":[-85.644345,41.942307]},"n186":{"id":"n186","loc":[-85.637873,41.941867]},"n1860":{"id":"n1860","loc":[-85.644232,41.942304]},"n1861":{"id":"n1861","loc":[-85.644134,41.941403]},"n1862":{"id":"n1862","loc":[-85.63607,41.943005],"tags":{"addr:city":"Three Rivers","addr:housenumber":"333","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","amenity":"fire_station","name":"Three Rivers Fire Department"}},"n1863":{"id":"n1863","loc":[-85.637,41.941236]},"n1864":{"id":"n1864","loc":[-85.634476,41.941475]},"n1865":{"id":"n1865","loc":[-85.635036,41.941858]},"n1866":{"id":"n1866","loc":[-85.635362,41.941962]},"n1867":{"id":"n1867","loc":[-85.635796,41.941962]},"n1868":{"id":"n1868","loc":[-85.63295,41.943006]},"n1869":{"id":"n1869","loc":[-85.634692,41.943098]},"n187":{"id":"n187","loc":[-85.637877,41.941975]},"n1870":{"id":"n1870","loc":[-85.633128,41.940484]},"n1871":{"id":"n1871","loc":[-85.633117,41.942798]},"n1872":{"id":"n1872","loc":[-85.633303,41.942412]},"n1873":{"id":"n1873","loc":[-85.633482,41.941912]},"n1874":{"id":"n1874","loc":[-85.633455,41.941359]},"n1875":{"id":"n1875","loc":[-85.633162,41.942679]},"n1876":{"id":"n1876","loc":[-85.634274,41.943479]},"n1877":{"id":"n1877","loc":[-85.634678,41.942909]},"n1878":{"id":"n1878","loc":[-85.6339,41.941453]},"n1879":{"id":"n1879","loc":[-85.634571,41.942774]},"n188":{"id":"n188","loc":[-85.636855,41.942488]},"n1880":{"id":"n1880","loc":[-85.63419,41.941732]},"n1881":{"id":"n1881","loc":[-85.634067,41.941565]},"n1882":{"id":"n1882","loc":[-85.63436,41.942358]},"n1883":{"id":"n1883","loc":[-85.634327,41.942247]},"n1884":{"id":"n1884","loc":[-85.633391,41.941231]},"n1885":{"id":"n1885","loc":[-85.634303,41.941972]},"n1886":{"id":"n1886","loc":[-85.633541,41.940147]},"n1887":{"id":"n1887","loc":[-85.633433,41.940252]},"n1888":{"id":"n1888","loc":[-85.633402,41.940411]},"n1889":{"id":"n1889","loc":[-85.633551,41.941023]},"n189":{"id":"n189","loc":[-85.636702,41.942488]},"n1890":{"id":"n1890","loc":[-85.633719,41.941186]},"n1891":{"id":"n1891","loc":[-85.633067,41.941845]},"n1892":{"id":"n1892","loc":[-85.634902,41.942766]},"n1893":{"id":"n1893","loc":[-85.634603,41.942202]},"n1894":{"id":"n1894","loc":[-85.634858,41.942152]},"n1895":{"id":"n1895","loc":[-85.634842,41.942269]},"n1896":{"id":"n1896","loc":[-85.634907,41.942313]},"n1897":{"id":"n1897","loc":[-85.635049,41.942331]},"n1898":{"id":"n1898","loc":[-85.635101,41.942281]},"n1899":{"id":"n1899","loc":[-85.635129,41.942144]},"n19":{"id":"n19","loc":[-85.633009,41.942229]},"n190":{"id":"n190","loc":[-85.636702,41.942434]},"n1900":{"id":"n1900","loc":[-85.635531,41.942143]},"n1901":{"id":"n1901","loc":[-85.635534,41.942577]},"n1902":{"id":"n1902","loc":[-85.635158,41.942656]},"n1903":{"id":"n1903","loc":[-85.635121,41.942703]},"n1904":{"id":"n1904","loc":[-85.635087,41.941508]},"n1905":{"id":"n1905","loc":[-85.63536,41.941106]},"n1906":{"id":"n1906","loc":[-85.635442,41.941094]},"n1907":{"id":"n1907","loc":[-85.635508,41.941104]},"n1908":{"id":"n1908","loc":[-85.635569,41.941125]},"n1909":{"id":"n1909","loc":[-85.635583,41.941106]},"n191":{"id":"n191","loc":[-85.636761,41.942434]},"n1910":{"id":"n1910","loc":[-85.635555,41.940976]},"n1911":{"id":"n1911","loc":[-85.635501,41.940915]},"n1912":{"id":"n1912","loc":[-85.635392,41.940922]},"n1913":{"id":"n1913","loc":[-85.635276,41.940974]},"n1914":{"id":"n1914","loc":[-85.63517,41.941204]},"n1915":{"id":"n1915","loc":[-85.634888,41.941517]},"n1916":{"id":"n1916","loc":[-85.634897,41.941576]},"n1917":{"id":"n1917","loc":[-85.634961,41.94164]},"n1918":{"id":"n1918","loc":[-85.635028,41.941659]},"n1919":{"id":"n1919","loc":[-85.635118,41.941621]},"n192":{"id":"n192","loc":[-85.636761,41.942369]},"n1920":{"id":"n1920","loc":[-85.635085,41.941558]},"n1921":{"id":"n1921","loc":[-85.63504,41.94136]},"n1922":{"id":"n1922","loc":[-85.635221,41.941077]},"n1923":{"id":"n1923","loc":[-85.634387,41.941559]},"n1924":{"id":"n1924","loc":[-85.634351,41.941587]},"n1925":{"id":"n1925","loc":[-85.634416,41.941756]},"n1926":{"id":"n1926","loc":[-85.634461,41.941797]},"n1927":{"id":"n1927","loc":[-85.634501,41.941819]},"n1928":{"id":"n1928","loc":[-85.634597,41.941816]},"n1929":{"id":"n1929","loc":[-85.634732,41.941724]},"n193":{"id":"n193","loc":[-85.636855,41.942369]},"n1930":{"id":"n1930","loc":[-85.634672,41.941775]},"n1931":{"id":"n1931","loc":[-85.633403,41.939101]},"n1932":{"id":"n1932","loc":[-85.633297,41.939397]},"n1933":{"id":"n1933","loc":[-85.633205,41.939674]},"n1934":{"id":"n1934","loc":[-85.63322,41.939777]},"n1935":{"id":"n1935","loc":[-85.633345,41.939936]},"n1936":{"id":"n1936","loc":[-85.633376,41.940002]},"n1937":{"id":"n1937","loc":[-85.633266,41.940228]},"n1938":{"id":"n1938","loc":[-85.633236,41.940352]},"n1939":{"id":"n1939","loc":[-85.633282,41.94063]},"n194":{"id":"n194","loc":[-85.636645,41.94249]},"n1940":{"id":"n1940","loc":[-85.633364,41.940874]},"n1941":{"id":"n1941","loc":[-85.633439,41.941052]},"n1942":{"id":"n1942","loc":[-85.633582,41.941172]},"n1943":{"id":"n1943","loc":[-85.633748,41.941273]},"n1944":{"id":"n1944","loc":[-85.634317,41.941527]},"n1945":{"id":"n1945","loc":[-85.634389,41.94174]},"n1946":{"id":"n1946","loc":[-85.634441,41.941801]},"n1947":{"id":"n1947","loc":[-85.634514,41.941837]},"n1948":{"id":"n1948","loc":[-85.634485,41.942005]},"n1949":{"id":"n1949","loc":[-85.63457,41.942202]},"n195":{"id":"n195","loc":[-85.636565,41.94249]},"n1950":{"id":"n1950","loc":[-85.634869,41.942769]},"n1951":{"id":"n1951","loc":[-85.634943,41.942792]},"n1952":{"id":"n1952","loc":[-85.635139,41.942882]},"n1953":{"id":"n1953","loc":[-85.634962,41.943161]},"n1954":{"id":"n1954","loc":[-85.635002,41.943131]},"n1955":{"id":"n1955","loc":[-85.635005,41.943091]},"n1956":{"id":"n1956","loc":[-85.635216,41.943033]},"n1957":{"id":"n1957","loc":[-85.634817,41.94267]},"n1958":{"id":"n1958","loc":[-85.634614,41.942599]},"n1959":{"id":"n1959","loc":[-85.634494,41.942381]},"n196":{"id":"n196","loc":[-85.636565,41.942474]},"n1960":{"id":"n1960","loc":[-85.634486,41.9423]},"n1961":{"id":"n1961","loc":[-85.634671,41.941795]},"n1962":{"id":"n1962","loc":[-85.634595,41.941831]},"n1963":{"id":"n1963","loc":[-85.634332,41.941866]},"n1964":{"id":"n1964","loc":[-85.634207,41.941885]},"n1965":{"id":"n1965","loc":[-85.634133,41.941892]},"n1966":{"id":"n1966","loc":[-85.634131,41.942203]},"n1967":{"id":"n1967","loc":[-85.634047,41.942327]},"n1968":{"id":"n1968","loc":[-85.634219,41.942793]},"n1969":{"id":"n1969","loc":[-85.634061,41.942392]},"n197":{"id":"n197","loc":[-85.636514,41.942474]},"n1970":{"id":"n1970","loc":[-85.633989,41.942407]},"n1971":{"id":"n1971","loc":[-85.633971,41.942356]},"n1972":{"id":"n1972","loc":[-85.63361,41.942423]},"n1973":{"id":"n1973","loc":[-85.633714,41.942682]},"n1974":{"id":"n1974","loc":[-85.633698,41.942863]},"n1975":{"id":"n1975","loc":[-85.633882,41.942865]},"n1976":{"id":"n1976","loc":[-85.633941,41.943007]},"n1977":{"id":"n1977","loc":[-85.633887,41.943035]},"n1978":{"id":"n1978","loc":[-85.633768,41.942815]},"n1979":{"id":"n1979","loc":[-85.633682,41.942351]},"n198":{"id":"n198","loc":[-85.636514,41.942326]},"n1980":{"id":"n1980","loc":[-85.634037,41.942273]},"n1981":{"id":"n1981","loc":[-85.634029,41.942252]},"n1982":{"id":"n1982","loc":[-85.633673,41.942331]},"n1983":{"id":"n1983","loc":[-85.634219,41.942571]},"n1984":{"id":"n1984","loc":[-85.634252,41.942565]},"n1985":{"id":"n1985","loc":[-85.634144,41.942299]},"n1986":{"id":"n1986","loc":[-85.634115,41.942306]},"n1987":{"id":"n1987","loc":[-85.634059,41.943094]},"n1988":{"id":"n1988","loc":[-85.633944,41.942903]},"n1989":{"id":"n1989","loc":[-85.634311,41.942821]},"n199":{"id":"n199","loc":[-85.636561,41.942326]},"n1990":{"id":"n1990","loc":[-85.634351,41.94277]},"n1991":{"id":"n1991","loc":[-85.634153,41.942254]},"n1992":{"id":"n1992","loc":[-85.634092,41.94222]},"n1993":{"id":"n1993","loc":[-85.633571,41.942336]},"n1994":{"id":"n1994","loc":[-85.633513,41.942387]},"n1995":{"id":"n1995","loc":[-85.633509,41.942455]},"n1996":{"id":"n1996","loc":[-85.63363,41.942665]},"n1997":{"id":"n1997","loc":[-85.63414,41.94286]},"n1998":{"id":"n1998","loc":[-85.63397,41.942449]},"n1999":{"id":"n1999","loc":[-85.633551,41.942529]},"n2":{"id":"n2","loc":[-85.627421,41.953877]},"n20":{"id":"n20","loc":[-85.633013,41.941438]},"n200":{"id":"n200","loc":[-85.636561,41.942311]},"n2000":{"id":"n2000","loc":[-85.633741,41.942493]},"n2001":{"id":"n2001","loc":[-85.633894,41.942869]},"n2002":{"id":"n2002","loc":[-85.634132,41.941954]},"n2003":{"id":"n2003","loc":[-85.634032,41.942038]},"n2004":{"id":"n2004","loc":[-85.633765,41.942238]},"n2005":{"id":"n2005","loc":[-85.63376,41.942268]},"n2006":{"id":"n2006","loc":[-85.633768,41.942293]},"n2007":{"id":"n2007","loc":[-85.633808,41.942386]},"n2008":{"id":"n2008","loc":[-85.634946,41.941663]},"n2009":{"id":"n2009","loc":[-85.63511,41.941697]},"n201":{"id":"n201","loc":[-85.636621,41.942311]},"n2010":{"id":"n2010","loc":[-85.635337,41.94168]},"n2011":{"id":"n2011","loc":[-85.634997,41.942251]},"n2012":{"id":"n2012","loc":[-85.635013,41.942173]},"n2013":{"id":"n2013","loc":[-85.634876,41.942157]},"n2014":{"id":"n2014","loc":[-85.634859,41.942235]},"n2015":{"id":"n2015","loc":[-85.634992,41.941951]},"n2016":{"id":"n2016","loc":[-85.634952,41.941877]},"n2017":{"id":"n2017","loc":[-85.634844,41.94191]},"n2018":{"id":"n2018","loc":[-85.634884,41.941983]},"n2019":{"id":"n2019","loc":[-85.635189,41.941691]},"n202":{"id":"n202","loc":[-85.636621,41.942351]},"n2020":{"id":"n2020","loc":[-85.635089,41.941896]},"n2021":{"id":"n2021","loc":[-85.635077,41.941964]},"n2022":{"id":"n2022","loc":[-85.635058,41.942147]},"n2023":{"id":"n2023","loc":[-85.635099,41.942161]},"n2024":{"id":"n2024","loc":[-85.635099,41.942213]},"n2025":{"id":"n2025","loc":[-85.635079,41.942285]},"n2026":{"id":"n2026","loc":[-85.635047,41.942316]},"n2027":{"id":"n2027","loc":[-85.634925,41.9423]},"n2028":{"id":"n2028","loc":[-85.634911,41.942276]},"n2029":{"id":"n2029","loc":[-85.634917,41.942242]},"n203":{"id":"n203","loc":[-85.63666,41.942351]},"n2030":{"id":"n2030","loc":[-85.634698,41.941898]},"n2031":{"id":"n2031","loc":[-85.634964,41.941878]},"n2032":{"id":"n2032","loc":[-85.635025,41.941929]},"n2033":{"id":"n2033","loc":[-85.634862,41.941887]},"n2034":{"id":"n2034","loc":[-85.634811,41.94181]},"n2035":{"id":"n2035","loc":[-85.634731,41.941745]},"n2036":{"id":"n2036","loc":[-85.634933,41.94176]},"n2037":{"id":"n2037","loc":[-85.634942,41.942145]},"n2038":{"id":"n2038","loc":[-85.634944,41.942065]},"n2039":{"id":"n2039","loc":[-85.634914,41.941996]},"n204":{"id":"n204","loc":[-85.63666,41.942453]},"n2040":{"id":"n2040","loc":[-85.634981,41.941979]},"n2041":{"id":"n2041","loc":[-85.633419,41.942172]},"n2042":{"id":"n2042","loc":[-85.633509,41.941631]},"n2043":{"id":"n2043","loc":[-85.633686,41.942937]},"n2044":{"id":"n2044","loc":[-85.633371,41.942722]},"n2045":{"id":"n2045","loc":[-85.633291,41.942538]},"n2046":{"id":"n2046","loc":[-85.633902,41.940941]},"n2047":{"id":"n2047","loc":[-85.635254,41.940939]},"n2048":{"id":"n2048","loc":[-85.635686,41.940829]},"n2049":{"id":"n2049","loc":[-85.635712,41.942681]},"n205":{"id":"n205","loc":[-85.636645,41.942453]},"n2050":{"id":"n2050","loc":[-85.633721,41.942118]},"n2051":{"id":"n2051","loc":[-85.633698,41.942057]},"n2052":{"id":"n2052","loc":[-85.633591,41.942079]},"n2053":{"id":"n2053","loc":[-85.633614,41.94214]},"n2054":{"id":"n2054","loc":[-85.633968,41.941099]},"n2055":{"id":"n2055","loc":[-85.633907,41.941138]},"n2056":{"id":"n2056","loc":[-85.633968,41.941197]},"n2057":{"id":"n2057","loc":[-85.63404,41.941162]},"n2058":{"id":"n2058","loc":[-85.634839,41.941665]},"n2059":{"id":"n2059","loc":[-85.635314,41.943035]},"n206":{"id":"n206","loc":[-85.636394,41.942471]},"n2060":{"id":"n2060","loc":[-85.634919,41.943142]},"n2061":{"id":"n2061","loc":[-85.636433,41.942959],"tags":{"addr:city":"Three Rivers","addr:housenumber":"333","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","amenity":"townhall","name":"Three Rivers City Hall"}},"n2062":{"id":"n2062","loc":[-85.637039,41.942789]},"n2063":{"id":"n2063","loc":[-85.636333,41.94279]},"n2064":{"id":"n2064","loc":[-85.634484,41.940726]},"n2065":{"id":"n2065","loc":[-85.634483,41.940603]},"n2066":{"id":"n2066","loc":[-85.634908,41.940601]},"n2067":{"id":"n2067","loc":[-85.634908,41.94053]},"n2068":{"id":"n2068","loc":[-85.634934,41.94053]},"n2069":{"id":"n2069","loc":[-85.634934,41.940496]},"n207":{"id":"n207","loc":[-85.636262,41.942472]},"n2070":{"id":"n2070","loc":[-85.63504,41.940495]},"n2071":{"id":"n2071","loc":[-85.63504,41.940531]},"n2072":{"id":"n2072","loc":[-85.635068,41.940531]},"n2073":{"id":"n2073","loc":[-85.635071,41.940794]},"n2074":{"id":"n2074","loc":[-85.635183,41.940793]},"n2075":{"id":"n2075","loc":[-85.635185,41.940916]},"n2076":{"id":"n2076","loc":[-85.634799,41.940919]},"n2077":{"id":"n2077","loc":[-85.634798,41.940798]},"n2078":{"id":"n2078","loc":[-85.634925,41.940797]},"n2079":{"id":"n2079","loc":[-85.634924,41.940724]},"n208":{"id":"n208","loc":[-85.636261,41.94233]},"n2080":{"id":"n2080","loc":[-85.637448,41.938233]},"n2081":{"id":"n2081","loc":[-85.634168,41.943279]},"n2082":{"id":"n2082","loc":[-85.635744,41.938248]},"n2083":{"id":"n2083","loc":[-85.638744,41.951211]},"n2084":{"id":"n2084","loc":[-85.636421,41.946392]},"n2085":{"id":"n2085","loc":[-85.635965,41.945809]},"n2086":{"id":"n2086","loc":[-85.635683,41.945449]},"n2087":{"id":"n2087","loc":[-85.635281,41.945025]},"n2088":{"id":"n2088","loc":[-85.632443,41.942574]},"n2089":{"id":"n2089","loc":[-85.638243,41.943674]},"n209":{"id":"n209","loc":[-85.636353,41.942329]},"n2090":{"id":"n2090","loc":[-85.638228,41.943747]},"n2091":{"id":"n2091","loc":[-85.638163,41.943797]},"n2092":{"id":"n2092","loc":[-85.638089,41.943832]},"n2093":{"id":"n2093","loc":[-85.637969,41.943841]},"n2094":{"id":"n2094","loc":[-85.637841,41.943833]},"n2095":{"id":"n2095","loc":[-85.637342,41.943734]},"n2096":{"id":"n2096","loc":[-85.637232,41.943707]},"n2097":{"id":"n2097","loc":[-85.637163,41.943668]},"n2098":{"id":"n2098","loc":[-85.637118,41.943615]},"n2099":{"id":"n2099","loc":[-85.637078,41.943494]},"n21":{"id":"n21","loc":[-85.634126,41.942228]},"n210":{"id":"n210","loc":[-85.636354,41.94239]},"n2100":{"id":"n2100","loc":[-85.632903,41.998429],"tags":{"railway":"level_crossing"}},"n2101":{"id":"n2101","loc":[-85.633616,41.943581],"tags":{"railway":"level_crossing"}},"n2102":{"id":"n2102","loc":[-85.636943,41.947311]},"n2103":{"id":"n2103","loc":[-85.6376,41.94854]},"n2104":{"id":"n2104","loc":[-85.634565,41.93631]},"n2105":{"id":"n2105","loc":[-85.629597,41.942562]},"n2106":{"id":"n2106","loc":[-85.630821,41.943077]},"n2107":{"id":"n2107","loc":[-85.627473,41.940659]},"n2108":{"id":"n2108","loc":[-85.629708,41.942872]},"n2109":{"id":"n2109","loc":[-85.634093,41.935448]},"n211":{"id":"n211","loc":[-85.636393,41.94239]},"n2110":{"id":"n2110","loc":[-85.630413,41.94366]},"n2111":{"id":"n2111","loc":[-85.630488,41.942662]},"n2112":{"id":"n2112","loc":[-85.63361,41.936749]},"n2113":{"id":"n2113","loc":[-85.630038,41.941808]},"n2114":{"id":"n2114","loc":[-85.632016,41.942922]},"n2115":{"id":"n2115","loc":[-85.631525,41.944303]},"n2116":{"id":"n2116","loc":[-85.626862,41.94022]},"n2117":{"id":"n2117","loc":[-85.629673,41.94121]},"n2118":{"id":"n2118","loc":[-85.632752,41.943101]},"n2119":{"id":"n2119","loc":[-85.631147,41.943201]},"n212":{"id":"n212","loc":[-85.63444,41.943176]},"n2120":{"id":"n2120","loc":[-85.624974,41.940579]},"n2121":{"id":"n2121","loc":[-85.629518,41.941783]},"n2122":{"id":"n2122","loc":[-85.632349,41.942699]},"n2123":{"id":"n2123","loc":[-85.628418,41.940356]},"n2124":{"id":"n2124","loc":[-85.629147,41.94129]},"n2125":{"id":"n2125","loc":[-85.631111,41.943979]},"n2126":{"id":"n2126","loc":[-85.632087,41.940013]},"n2127":{"id":"n2127","loc":[-85.634469,41.935057]},"n2128":{"id":"n2128","loc":[-85.630097,41.943449]},"n2129":{"id":"n2129","loc":[-85.6331,41.937878]},"n213":{"id":"n213","loc":[-85.63375,41.942814]},"n2130":{"id":"n2130","loc":[-85.625274,41.941114]},"n2131":{"id":"n2131","loc":[-85.632632,41.941217]},"n2132":{"id":"n2132","loc":[-85.632739,41.941926]},"n2133":{"id":"n2133","loc":[-85.631647,41.94366]},"n2134":{"id":"n2134","loc":[-85.635059,41.935456]},"n2135":{"id":"n2135","loc":[-85.631259,41.944349]},"n2136":{"id":"n2136","loc":[-85.626336,41.940811]},"n2137":{"id":"n2137","loc":[-85.631507,41.943875]},"n2138":{"id":"n2138","loc":[-85.625081,41.940859]},"n2139":{"id":"n2139","loc":[-85.625778,41.940093]},"n214":{"id":"n214","loc":[-85.633674,41.942869]},"n2140":{"id":"n2140","loc":[-85.632641,41.942436]},"n2141":{"id":"n2141","loc":[-85.628825,41.941034]},"n2142":{"id":"n2142","loc":[-85.627913,41.940292]},"n2143":{"id":"n2143","loc":[-85.628943,41.940516]},"n2144":{"id":"n2144","loc":[-85.63139,41.943941]},"n2145":{"id":"n2145","loc":[-85.630081,41.94204]},"n2146":{"id":"n2146","loc":[-85.632194,41.93963]},"n2147":{"id":"n2147","loc":[-85.632913,41.93939]},"n2148":{"id":"n2148","loc":[-85.632001,41.943492]},"n2149":{"id":"n2149","loc":[-85.63149,41.943154]},"n215":{"id":"n215","loc":[-85.633542,41.942768]},"n2150":{"id":"n2150","loc":[-85.625167,41.940117]},"n2151":{"id":"n2151","loc":[-85.63287,41.939941]},"n2152":{"id":"n2152","loc":[-85.630789,41.943732]},"n2153":{"id":"n2153","loc":[-85.632173,41.940348]},"n2154":{"id":"n2154","loc":[-85.626587,41.940113]},"n2155":{"id":"n2155","loc":[-85.62684,41.940667]},"n2156":{"id":"n2156","loc":[-85.632527,41.938904]},"n2157":{"id":"n2157","loc":[-85.624866,41.94018]},"n2158":{"id":"n2158","loc":[-85.633267,41.93872]},"n2159":{"id":"n2159","loc":[-85.62934,41.940843]},"n216":{"id":"n216","loc":[-85.633618,41.942714]},"n2160":{"id":"n2160","loc":[-85.62272,41.953817]},"n2161":{"id":"n2161","loc":[-85.622555,41.954453]},"n2162":{"id":"n2162","loc":[-85.637225,41.944128]},"n2163":{"id":"n2163","loc":[-85.622628,41.953683]},"n2164":{"id":"n2164","loc":[-85.635441,41.943989]},"n2165":{"id":"n2165","loc":[-85.622629,41.953807]},"n2166":{"id":"n2166","loc":[-85.62262,41.953807]},"n2167":{"id":"n2167","loc":[-85.62262,41.953837]},"n2168":{"id":"n2168","loc":[-85.622532,41.953838]},"n2169":{"id":"n2169","loc":[-85.637469,41.944579]},"n217":{"id":"n217","loc":[-85.634001,41.942336]},"n2170":{"id":"n2170","loc":[-85.63688,41.943935]},"n2171":{"id":"n2171","loc":[-85.638263,41.946367]},"n2172":{"id":"n2172","loc":[-85.622532,41.953807]},"n2173":{"id":"n2173","loc":[-85.622353,41.953808]},"n2174":{"id":"n2174","loc":[-85.622352,41.953685]},"n2175":{"id":"n2175","loc":[-85.622464,41.953684]},"n2176":{"id":"n2176","loc":[-85.622464,41.953648]},"n2177":{"id":"n2177","loc":[-85.637136,41.94576]},"n2178":{"id":"n2178","loc":[-85.622521,41.953648]},"n2179":{"id":"n2179","loc":[-85.637129,41.945415]},"n218":{"id":"n218","loc":[-85.633825,41.942376]},"n2180":{"id":"n2180","loc":[-85.637473,41.94607]},"n2181":{"id":"n2181","loc":[-85.622521,41.953683]},"n2182":{"id":"n2182","loc":[-85.622717,41.954104]},"n2183":{"id":"n2183","loc":[-85.637769,41.946095]},"n2184":{"id":"n2184","loc":[-85.623872,41.953515]},"n2185":{"id":"n2185","loc":[-85.623851,41.953588]},"n2186":{"id":"n2186","loc":[-85.631385,41.94433]},"n2187":{"id":"n2187","loc":[-85.623608,41.953543]},"n2188":{"id":"n2188","loc":[-85.637308,41.944882]},"n2189":{"id":"n2189","loc":[-85.634898,41.944041]},"n219":{"id":"n219","loc":[-85.633807,41.942334]},"n2190":{"id":"n2190","loc":[-85.623604,41.953442]},"n2191":{"id":"n2191","loc":[-85.623705,41.953442]},"n2192":{"id":"n2192","loc":[-85.623708,41.953493]},"n2193":{"id":"n2193","loc":[-85.624064,41.952655]},"n2194":{"id":"n2194","loc":[-85.62395,41.952654]},"n2195":{"id":"n2195","loc":[-85.623951,41.952579]},"n2196":{"id":"n2196","loc":[-85.637435,41.944342]},"n2197":{"id":"n2197","loc":[-85.624064,41.952579]},"n2198":{"id":"n2198","loc":[-85.623812,41.952648]},"n2199":{"id":"n2199","loc":[-85.623813,41.952705]},"n22":{"id":"n22","loc":[-85.633531,41.942357]},"n220":{"id":"n220","loc":[-85.633983,41.942294]},"n2200":{"id":"n2200","loc":[-85.637169,41.945098]},"n2201":{"id":"n2201","loc":[-85.623552,41.952707]},"n2202":{"id":"n2202","loc":[-85.623551,41.95263]},"n2203":{"id":"n2203","loc":[-85.623701,41.952629]},"n2204":{"id":"n2204","loc":[-85.635894,41.943719]},"n2205":{"id":"n2205","loc":[-85.637297,41.945992]},"n2206":{"id":"n2206","loc":[-85.623724,41.952648]},"n2207":{"id":"n2207","loc":[-85.623812,41.952438]},"n2208":{"id":"n2208","loc":[-85.625239,41.952197]},"n2209":{"id":"n2209","loc":[-85.625232,41.952257]},"n221":{"id":"n221","loc":[-85.634182,41.942495]},"n2210":{"id":"n2210","loc":[-85.635175,41.94408]},"n2211":{"id":"n2211","loc":[-85.636381,41.943761]},"n2212":{"id":"n2212","loc":[-85.625115,41.952249]},"n2213":{"id":"n2213","loc":[-85.638578,41.946644]},"n2214":{"id":"n2214","loc":[-85.625122,41.952189]},"n2215":{"id":"n2215","loc":[-85.625085,41.952031]},"n2216":{"id":"n2216","loc":[-85.636126,41.943713]},"n2217":{"id":"n2217","loc":[-85.635005,41.944041]},"n2218":{"id":"n2218","loc":[-85.63714,41.945328]},"n2219":{"id":"n2219","loc":[-85.634871,41.943292]},"n222":{"id":"n222","loc":[-85.634149,41.942503]},"n2220":{"id":"n2220","loc":[-85.635705,41.943799]},"n2221":{"id":"n2221","loc":[-85.634995,41.943576]},"n2222":{"id":"n2222","loc":[-85.635026,41.943829]},"n2223":{"id":"n2223","loc":[-85.632874,41.941031]},"n2224":{"id":"n2224","loc":[-85.632531,41.940233]},"n2225":{"id":"n2225","loc":[-85.634247,41.936003]},"n2226":{"id":"n2226","loc":[-85.62929,41.941127]},"n2227":{"id":"n2227","loc":[-85.630428,41.943266]},"n2228":{"id":"n2228","loc":[-85.631608,41.943425]},"n2229":{"id":"n2229","loc":[-85.632316,41.943042]},"n223":{"id":"n223","loc":[-85.634098,41.942373]},"n2230":{"id":"n2230","loc":[-85.628711,41.940744]},"n2231":{"id":"n2231","loc":[-85.627831,41.940536]},"n2232":{"id":"n2232","loc":[-85.625514,41.94052]},"n2233":{"id":"n2233","loc":[-85.631127,41.943545]},"n2234":{"id":"n2234","loc":[-85.632909,41.942531]},"n2235":{"id":"n2235","loc":[-85.632917,41.938796]},"n2236":{"id":"n2236","loc":[-85.626716,41.94044]},"n2237":{"id":"n2237","loc":[-85.630122,41.942852]},"n2238":{"id":"n2238","loc":[-85.632509,41.939674]},"n2239":{"id":"n2239","loc":[-85.634762,41.935237]},"n224":{"id":"n224","loc":[-85.634131,41.942366]},"n2240":{"id":"n2240","loc":[-85.63384,41.937025]},"n2241":{"id":"n2241","loc":[-85.629741,41.941909]},"n2242":{"id":"n2242","loc":[-85.635254,41.945001],"tags":{"railway":"level_crossing"}},"n2243":{"id":"n2243","loc":[-85.634005,41.938168]},"n2244":{"id":"n2244","loc":[-85.63393,41.938335]},"n2245":{"id":"n2245","loc":[-85.633859,41.93846]},"n2246":{"id":"n2246","loc":[-85.633663,41.938776]},"n2247":{"id":"n2247","loc":[-85.633513,41.938936]},"n2248":{"id":"n2248","loc":[-85.635295,41.943225]},"n2249":{"id":"n2249","loc":[-85.635393,41.943293]},"n225":{"id":"n225","loc":[-85.635986,41.94177]},"n2250":{"id":"n2250","loc":[-85.635645,41.94332]},"n2251":{"id":"n2251","loc":[-85.63629,41.943328]},"n2252":{"id":"n2252","loc":[-85.636554,41.943372]},"n2253":{"id":"n2253","loc":[-85.636869,41.943526]},"n2254":{"id":"n2254","loc":[-85.637099,41.943704]},"n2255":{"id":"n2255","loc":[-85.637268,41.943773]},"n2256":{"id":"n2256","loc":[-85.637483,41.943821]},"n2257":{"id":"n2257","loc":[-85.637616,41.943929]},"n2258":{"id":"n2258","loc":[-85.637752,41.944114]},"n2259":{"id":"n2259","loc":[-85.638399,41.944308]},"n226":{"id":"n226","loc":[-85.635982,41.941523]},"n2260":{"id":"n2260","loc":[-85.638573,41.944451]},"n2261":{"id":"n2261","loc":[-85.638702,41.944574]},"n2262":{"id":"n2262","loc":[-85.638718,41.944652]},"n2263":{"id":"n2263","loc":[-85.638715,41.944809]},"n2264":{"id":"n2264","loc":[-85.638766,41.944988]},"n2265":{"id":"n2265","loc":[-85.638773,41.945136]},"n2266":{"id":"n2266","loc":[-85.638705,41.945251]},"n2267":{"id":"n2267","loc":[-85.638335,41.944291]},"n2268":{"id":"n2268","loc":[-85.638474,41.944352]},"n2269":{"id":"n2269","loc":[-85.635408,41.943429]},"n227":{"id":"n227","loc":[-85.636108,41.941521]},"n2270":{"id":"n2270","loc":[-85.635271,41.943654]},"n2271":{"id":"n2271","loc":[-85.635266,41.943744]},"n2272":{"id":"n2272","loc":[-85.635271,41.943819]},"n2273":{"id":"n2273","loc":[-85.635192,41.943876]},"n2274":{"id":"n2274","loc":[-85.635129,41.943857]},"n2275":{"id":"n2275","loc":[-85.635122,41.943764]},"n2276":{"id":"n2276","loc":[-85.635124,41.943664]},"n2277":{"id":"n2277","loc":[-85.63515,41.943611]},"n2278":{"id":"n2278","loc":[-85.635106,41.943534]},"n2279":{"id":"n2279","loc":[-85.634972,41.943197]},"n228":{"id":"n228","loc":[-85.636109,41.941559]},"n2280":{"id":"n2280","loc":[-85.633978,41.938227]},"n2281":{"id":"n2281","loc":[-85.634216,41.943255]},"n2282":{"id":"n2282","loc":[-85.634434,41.943622]},"n2283":{"id":"n2283","loc":[-85.632406,41.940854]},"n2284":{"id":"n2284","loc":[-85.632488,41.941063],"tags":{"leisure":"slipway"}},"n2285":{"id":"n2285","loc":[-85.632726,41.941537]},"n2286":{"id":"n2286","loc":[-85.632639,41.94136]},"n2287":{"id":"n2287","loc":[-85.632704,41.941439]},"n2288":{"id":"n2288","loc":[-85.632289,41.940601]},"n2289":{"id":"n2289","loc":[-85.632541,41.942526]},"n229":{"id":"n229","loc":[-85.636145,41.941559]},"n2290":{"id":"n2290","loc":[-85.634058,41.943173]},"n2291":{"id":"n2291","loc":[-85.636175,41.945974]},"n2292":{"id":"n2292","loc":[-85.636528,41.945975]},"n2293":{"id":"n2293","loc":[-85.637092,41.945893]},"n2294":{"id":"n2294","loc":[-85.637881,41.945647]},"n2295":{"id":"n2295","loc":[-85.639329,41.945162]},"n2296":{"id":"n2296","loc":[-85.639323,41.945026]},"n2297":{"id":"n2297","loc":[-85.638826,41.945032]},"n2298":{"id":"n2298","loc":[-85.638817,41.944174]},"n2299":{"id":"n2299","loc":[-85.638291,41.94418]},"n23":{"id":"n23","loc":[-85.633504,41.942418]},"n230":{"id":"n230","loc":[-85.636145,41.941551]},"n2300":{"id":"n2300","loc":[-85.63828,41.943811]},"n2301":{"id":"n2301","loc":[-85.638195,41.943601]},"n2302":{"id":"n2302","loc":[-85.63719,41.943592]},"n2303":{"id":"n2303","loc":[-85.636697,41.943273]},"n2304":{"id":"n2304","loc":[-85.635375,41.943274]},"n2305":{"id":"n2305","loc":[-85.635091,41.943547]},"n2306":{"id":"n2306","loc":[-85.63442,41.944117]},"n2307":{"id":"n2307","loc":[-85.635117,41.943717]},"n2308":{"id":"n2308","loc":[-85.635601,41.945177]},"n2309":{"id":"n2309","loc":[-85.635819,41.945494]},"n231":{"id":"n231","loc":[-85.636312,41.941549]},"n2310":{"id":"n2310","loc":[-85.635303,41.944891]},"n2311":{"id":"n2311","loc":[-85.637674,41.943802]},"n2312":{"id":"n2312","loc":[-85.638263,41.944272]},"n2313":{"id":"n2313","loc":[-85.634267,41.935266]},"n2314":{"id":"n2314","loc":[-85.639788,41.945152]},"n2315":{"id":"n2315","loc":[-85.639645,41.945167]},"n2316":{"id":"n2316","loc":[-85.639362,41.945233]},"n2317":{"id":"n2317","loc":[-85.638616,41.945163]},"n2318":{"id":"n2318","loc":[-85.638514,41.944936]},"n2319":{"id":"n2319","loc":[-85.638578,41.94503]},"n232":{"id":"n232","loc":[-85.636314,41.941649]},"n2320":{"id":"n2320","loc":[-85.638578,41.945215]},"n2321":{"id":"n2321","loc":[-85.640495,41.947015]},"n2322":{"id":"n2322","loc":[-85.639577,41.946495]},"n2323":{"id":"n2323","loc":[-85.638935,41.946087]},"n2324":{"id":"n2324","loc":[-85.637535,41.94584]},"n2325":{"id":"n2325","loc":[-85.638357,41.945404]},"n2326":{"id":"n2326","loc":[-85.638051,41.94553]},"n2327":{"id":"n2327","loc":[-85.637732,41.945555]},"n2328":{"id":"n2328","loc":[-85.637657,41.945524]},"n2329":{"id":"n2329","loc":[-85.637598,41.945467]},"n233":{"id":"n233","loc":[-85.636152,41.94165]},"n2330":{"id":"n2330","loc":[-85.637669,41.945318]},"n2331":{"id":"n2331","loc":[-85.637894,41.945171]},"n2332":{"id":"n2332","loc":[-85.637923,41.945082]},"n2333":{"id":"n2333","loc":[-85.63793,41.944756]},"n2334":{"id":"n2334","loc":[-85.637976,41.944696]},"n2335":{"id":"n2335","loc":[-85.638044,41.944671]},"n2336":{"id":"n2336","loc":[-85.638129,41.944597]},"n2337":{"id":"n2337","loc":[-85.638252,41.944413]},"n2338":{"id":"n2338","loc":[-85.638092,41.945442]},"n2339":{"id":"n2339","loc":[-85.638409,41.945315]},"n234":{"id":"n234","loc":[-85.636152,41.941628]},"n2340":{"id":"n2340","loc":[-85.638325,41.944771]},"n2341":{"id":"n2341","loc":[-85.638103,41.944744]},"n2342":{"id":"n2342","loc":[-85.637976,41.944781]},"n2343":{"id":"n2343","loc":[-85.637983,41.944865]},"n2344":{"id":"n2344","loc":[-85.638063,41.945074]},"n2345":{"id":"n2345","loc":[-85.638041,41.945206]},"n2346":{"id":"n2346","loc":[-85.637907,41.945309]},"n2347":{"id":"n2347","loc":[-85.637925,41.94539]},"n2348":{"id":"n2348","loc":[-85.637998,41.94545]},"n2349":{"id":"n2349","loc":[-85.637135,41.946254]},"n235":{"id":"n235","loc":[-85.63611,41.941628]},"n2350":{"id":"n2350","loc":[-85.636837,41.946615]},"n2351":{"id":"n2351","loc":[-85.637954,41.948909]},"n2352":{"id":"n2352","loc":[-85.638382,41.949786]},"n2353":{"id":"n2353","loc":[-85.639367,41.951242]},"n2354":{"id":"n2354","loc":[-85.640554,41.951777]},"n2355":{"id":"n2355","loc":[-85.6411,41.952234]},"n2356":{"id":"n2356","loc":[-85.641742,41.952657]},"n2357":{"id":"n2357","loc":[-85.642321,41.952941]},"n2358":{"id":"n2358","loc":[-85.64277,41.953228]},"n2359":{"id":"n2359","loc":[-85.643333,41.953825]},"n236":{"id":"n236","loc":[-85.636113,41.941768]},"n2360":{"id":"n2360","loc":[-85.643579,41.954365]},"n2361":{"id":"n2361","loc":[-85.644439,41.954105]},"n2362":{"id":"n2362","loc":[-85.64506,41.954]},"n2363":{"id":"n2363","loc":[-85.645483,41.953911]},"n2364":{"id":"n2364","loc":[-85.646046,41.953853]},"n2365":{"id":"n2365","loc":[-85.646318,41.953717]},"n2366":{"id":"n2366","loc":[-85.646276,41.953414]},"n2367":{"id":"n2367","loc":[-85.631063,41.957478],"tags":{"emergency":"fire_hydrant"}},"n2368":{"id":"n2368","loc":[-85.630996,41.955857],"tags":{"emergency":"fire_hydrant"}},"n2369":{"id":"n2369","loc":[-85.630976,41.954608],"tags":{"emergency":"fire_hydrant"}},"n237":{"id":"n237","loc":[-85.635983,41.941589],"tags":{"entrance":"yes"}},"n2370":{"id":"n2370","loc":[-85.646,41.953154]},"n2371":{"id":"n2371","loc":[-85.645222,41.953193]},"n2372":{"id":"n2372","loc":[-85.644732,41.953181]},"n2373":{"id":"n2373","loc":[-85.644064,41.953298]},"n2374":{"id":"n2374","loc":[-85.643818,41.953177]},"n2375":{"id":"n2375","loc":[-85.644001,41.95284]},"n2376":{"id":"n2376","loc":[-85.628174,41.95456],"tags":{"emergency":"fire_hydrant"}},"n2377":{"id":"n2377","loc":[-85.644267,41.952591]},"n2378":{"id":"n2378","loc":[-85.644288,41.952328]},"n2379":{"id":"n2379","loc":[-85.627276,41.953987],"tags":{"emergency":"fire_hydrant"}},"n238":{"id":"n238","loc":[-85.635906,41.94159]},"n2380":{"id":"n2380","loc":[-85.644262,41.952153]},"n2381":{"id":"n2381","loc":[-85.644168,41.95204]},"n2382":{"id":"n2382","loc":[-85.64421,41.951749]},"n2383":{"id":"n2383","loc":[-85.64385,41.951586]},"n2384":{"id":"n2384","loc":[-85.62736,41.955964],"tags":{"emergency":"fire_hydrant"}},"n2385":{"id":"n2385","loc":[-85.626307,41.957198],"tags":{"emergency":"fire_hydrant"}},"n2386":{"id":"n2386","loc":[-85.643589,41.951323]},"n2387":{"id":"n2387","loc":[-85.62747,41.957509],"tags":{"emergency":"fire_hydrant"}},"n2388":{"id":"n2388","loc":[-85.628665,41.957492],"tags":{"emergency":"fire_hydrant"}},"n2389":{"id":"n2389","loc":[-85.642535,41.951031]},"n239":{"id":"n239","loc":[-85.635883,41.940182]},"n2390":{"id":"n2390","loc":[-85.642269,41.95088]},"n2391":{"id":"n2391","loc":[-85.641878,41.950814]},"n2392":{"id":"n2392","loc":[-85.641549,41.950806]},"n2393":{"id":"n2393","loc":[-85.641103,41.950549]},"n2394":{"id":"n2394","loc":[-85.630864,41.959046],"tags":{"emergency":"fire_hydrant"}},"n2395":{"id":"n2395","loc":[-85.632249,41.958969],"tags":{"emergency":"fire_hydrant"}},"n2396":{"id":"n2396","loc":[-85.641037,41.949821]},"n2397":{"id":"n2397","loc":[-85.641006,41.949433]},"n2398":{"id":"n2398","loc":[-85.632232,41.95859],"tags":{"emergency":"fire_hydrant"}},"n2399":{"id":"n2399","loc":[-85.632071,41.958345],"tags":{"emergency":"fire_hydrant"}},"n24":{"id":"n24","loc":[-85.634346,41.942792]},"n240":{"id":"n240","loc":[-85.635916,41.94264]},"n2400":{"id":"n2400","loc":[-85.632228,41.9573],"tags":{"emergency":"fire_hydrant"}},"n2401":{"id":"n2401","loc":[-85.641152,41.948257]},"n2402":{"id":"n2402","loc":[-85.641055,41.947304]},"n2403":{"id":"n2403","loc":[-85.638022,41.945897]},"n2404":{"id":"n2404","loc":[-85.638672,41.950778]},"n2405":{"id":"n2405","loc":[-85.63666,41.944492],"tags":{"name":"Memory Isle","place":"island"}},"n2406":{"id":"n2406","loc":[-85.635,41.946389],"tags":{"amenity":"post_office","name":"Three Rivers Post Office"}},"n2407":{"id":"n2407","loc":[-85.633676,41.946036]},"n2408":{"id":"n2408","loc":[-85.633736,41.946078]},"n2409":{"id":"n2409","loc":[-85.633997,41.946185]},"n241":{"id":"n241","loc":[-85.635795,41.941906]},"n2410":{"id":"n2410","loc":[-85.634448,41.945626],"tags":{"highway":"traffic_signals","traffic_signals":"signal"}},"n2411":{"id":"n2411","loc":[-85.63456,41.945731],"tags":{"crossing":"zebra","highway":"crossing"}},"n2412":{"id":"n2412","loc":[-85.634592,41.94578]},"n2413":{"id":"n2413","loc":[-85.634607,41.945815]},"n2414":{"id":"n2414","loc":[-85.634614,41.945864]},"n2415":{"id":"n2415","loc":[-85.636066,41.946185]},"n2416":{"id":"n2416","loc":[-85.636128,41.946352]},"n2417":{"id":"n2417","loc":[-85.636142,41.946452]},"n2418":{"id":"n2418","loc":[-85.635327,41.945292]},"n2419":{"id":"n2419","loc":[-85.635648,41.94558]},"n242":{"id":"n242","loc":[-85.635909,41.941906]},"n2420":{"id":"n2420","loc":[-85.635769,41.945729]},"n2421":{"id":"n2421","loc":[-85.637349,41.945897]},"n2422":{"id":"n2422","loc":[-85.632211,41.95596],"tags":{"emergency":"fire_hydrant"}},"n2423":{"id":"n2423","loc":[-85.635942,41.94598]},"n2424":{"id":"n2424","loc":[-85.636443,41.946042]},"n2425":{"id":"n2425","loc":[-85.635819,41.946052]},"n2426":{"id":"n2426","loc":[-85.636669,41.946025]},"n2427":{"id":"n2427","loc":[-85.636832,41.946005]},"n2428":{"id":"n2428","loc":[-85.637039,41.945968]},"n2429":{"id":"n2429","loc":[-85.636291,41.946046]},"n243":{"id":"n243","loc":[-85.636359,41.941904]},"n2430":{"id":"n2430","loc":[-85.634005,41.943367]},"n2431":{"id":"n2431","loc":[-85.633366,41.943724]},"n2432":{"id":"n2432","loc":[-85.634617,41.946057]},"n2433":{"id":"n2433","loc":[-85.636534,41.944793]},"n2434":{"id":"n2434","loc":[-85.637055,41.945188]},"n2435":{"id":"n2435","loc":[-85.636153,41.944618]},"n2436":{"id":"n2436","loc":[-85.636803,41.944944]},"n2437":{"id":"n2437","loc":[-85.633389,41.945735]},"n2438":{"id":"n2438","loc":[-85.633536,41.94585]},"n2439":{"id":"n2439","loc":[-85.63363,41.945993]},"n244":{"id":"n244","loc":[-85.636351,41.941438]},"n2440":{"id":"n2440","loc":[-85.633268,41.94568]},"n2441":{"id":"n2441","loc":[-85.635947,41.94546]},"n2442":{"id":"n2442","loc":[-85.636277,41.945268]},"n2443":{"id":"n2443","loc":[-85.635203,41.944287]},"n2444":{"id":"n2444","loc":[-85.634876,41.944477]},"n2445":{"id":"n2445","loc":[-85.634975,41.944419]},"n2446":{"id":"n2446","loc":[-85.633877,41.943438]},"n2447":{"id":"n2447","loc":[-85.63508,41.945113]},"n2448":{"id":"n2448","loc":[-85.635372,41.944932]},"n2449":{"id":"n2449","loc":[-85.636594,41.945935]},"n245":{"id":"n245","loc":[-85.635903,41.941436]},"n2450":{"id":"n2450","loc":[-85.636901,41.945747]},"n2451":{"id":"n2451","loc":[-85.636329,41.945228]},"n2452":{"id":"n2452","loc":[-85.636025,41.945417]},"n2453":{"id":"n2453","loc":[-85.634002,41.944644]},"n2454":{"id":"n2454","loc":[-85.63407,41.944692]},"n2455":{"id":"n2455","loc":[-85.634114,41.944756]},"n2456":{"id":"n2456","loc":[-85.633762,41.944809]},"n2457":{"id":"n2457","loc":[-85.634184,41.944807]},"n2458":{"id":"n2458","loc":[-85.634291,41.944819]},"n2459":{"id":"n2459","loc":[-85.634639,41.944845]},"n246":{"id":"n246","loc":[-85.635788,41.941436]},"n2460":{"id":"n2460","loc":[-85.633822,41.944861]},"n2461":{"id":"n2461","loc":[-85.63411,41.944855]},"n2462":{"id":"n2462","loc":[-85.63435,41.944872]},"n2463":{"id":"n2463","loc":[-85.63441,41.944903]},"n2464":{"id":"n2464","loc":[-85.633883,41.944913]},"n2465":{"id":"n2465","loc":[-85.634164,41.944896]},"n2466":{"id":"n2466","loc":[-85.633487,41.944926]},"n2467":{"id":"n2467","loc":[-85.634736,41.944929]},"n2468":{"id":"n2468","loc":[-85.633944,41.944965]},"n2469":{"id":"n2469","loc":[-85.633555,41.944983]},"n247":{"id":"n247","loc":[-85.635929,41.941511]},"n2470":{"id":"n2470","loc":[-85.633995,41.945013]},"n2471":{"id":"n2471","loc":[-85.633614,41.945037]},"n2472":{"id":"n2472","loc":[-85.634848,41.945031]},"n2473":{"id":"n2473","loc":[-85.634049,41.945061]},"n2474":{"id":"n2474","loc":[-85.633678,41.945094]},"n2475":{"id":"n2475","loc":[-85.63317,41.945111]},"n2476":{"id":"n2476","loc":[-85.633357,41.945103]},"n2477":{"id":"n2477","loc":[-85.633728,41.945136]},"n2478":{"id":"n2478","loc":[-85.634146,41.945148]},"n2479":{"id":"n2479","loc":[-85.633416,41.945157]},"n248":{"id":"n248","loc":[-85.635929,41.941317]},"n2480":{"id":"n2480","loc":[-85.634625,41.945172]},"n2481":{"id":"n2481","loc":[-85.633239,41.945174]},"n2482":{"id":"n2482","loc":[-85.63469,41.945185]},"n2483":{"id":"n2483","loc":[-85.634661,41.945203]},"n2484":{"id":"n2484","loc":[-85.63348,41.945214]},"n2485":{"id":"n2485","loc":[-85.633578,41.945221]},"n2486":{"id":"n2486","loc":[-85.634742,41.945231]},"n2487":{"id":"n2487","loc":[-85.634251,41.94525]},"n2488":{"id":"n2488","loc":[-85.633524,41.945254]},"n2489":{"id":"n2489","loc":[-85.63468,41.945271]},"n249":{"id":"n249","loc":[-85.636414,41.941316]},"n2490":{"id":"n2490","loc":[-85.633885,41.945272]},"n2491":{"id":"n2491","loc":[-85.634795,41.945288]},"n2492":{"id":"n2492","loc":[-85.634742,41.94532]},"n2493":{"id":"n2493","loc":[-85.633946,41.945327]},"n2494":{"id":"n2494","loc":[-85.634844,41.945331]},"n2495":{"id":"n2495","loc":[-85.63435,41.945349]},"n2496":{"id":"n2496","loc":[-85.633733,41.945357]},"n2497":{"id":"n2497","loc":[-85.633987,41.945375]},"n2498":{"id":"n2498","loc":[-85.634911,41.945419]},"n2499":{"id":"n2499","loc":[-85.634049,41.945431]},"n25":{"id":"n25","loc":[-85.634333,41.942809]},"n250":{"id":"n250","loc":[-85.636414,41.941511]},"n2500":{"id":"n2500","loc":[-85.633705,41.945461]},"n2501":{"id":"n2501","loc":[-85.633642,41.945408]},"n2502":{"id":"n2502","loc":[-85.634493,41.945475]},"n2503":{"id":"n2503","loc":[-85.634106,41.945484]},"n2504":{"id":"n2504","loc":[-85.635008,41.945505]},"n2505":{"id":"n2505","loc":[-85.633757,41.945506]},"n2506":{"id":"n2506","loc":[-85.634542,41.945519]},"n2507":{"id":"n2507","loc":[-85.634162,41.945536]},"n2508":{"id":"n2508","loc":[-85.633843,41.945547]},"n2509":{"id":"n2509","loc":[-85.634919,41.94556]},"n251":{"id":"n251","loc":[-85.636819,41.941617]},"n2510":{"id":"n2510","loc":[-85.633818,41.945561]},"n2511":{"id":"n2511","loc":[-85.634638,41.94559]},"n2512":{"id":"n2512","loc":[-85.633901,41.945598]},"n2513":{"id":"n2513","loc":[-85.634257,41.945626]},"n2514":{"id":"n2514","loc":[-85.633967,41.945652]},"n2515":{"id":"n2515","loc":[-85.634735,41.945676]},"n2516":{"id":"n2516","loc":[-85.635057,41.945683]},"n2517":{"id":"n2517","loc":[-85.635296,41.945703]},"n2518":{"id":"n2518","loc":[-85.635112,41.945703]},"n2519":{"id":"n2519","loc":[-85.634782,41.945729]},"n252":{"id":"n252","loc":[-85.636718,41.941619]},"n2520":{"id":"n2520","loc":[-85.634052,41.945747]},"n2521":{"id":"n2521","loc":[-85.635296,41.945757]},"n2522":{"id":"n2522","loc":[-85.635314,41.945757]},"n2523":{"id":"n2523","loc":[-85.635112,41.945761]},"n2524":{"id":"n2524","loc":[-85.63484,41.945778]},"n2525":{"id":"n2525","loc":[-85.635314,41.945938]},"n2526":{"id":"n2526","loc":[-85.63484,41.945922]},"n2527":{"id":"n2527","loc":[-85.635461,41.944879]},"n2528":{"id":"n2528","loc":[-85.636024,41.945384]},"n2529":{"id":"n2529","loc":[-85.636145,41.945312]},"n253":{"id":"n253","loc":[-85.636716,41.941509]},"n2530":{"id":"n2530","loc":[-85.6356,41.944797]},"n2531":{"id":"n2531","loc":[-85.635135,41.944354]},"n2532":{"id":"n2532","loc":[-85.632988,41.945369]},"n2533":{"id":"n2533","loc":[-85.633376,41.94563]},"n2534":{"id":"n2534","loc":[-85.633539,41.945534]},"n2535":{"id":"n2535","loc":[-85.633238,41.945248]},"n2536":{"id":"n2536","loc":[-85.633166,41.945216]},"n2537":{"id":"n2537","loc":[-85.633114,41.945188]},"n2538":{"id":"n2538","loc":[-85.633078,41.945127]},"n2539":{"id":"n2539","loc":[-85.633066,41.94508]},"n254":{"id":"n254","loc":[-85.636732,41.941509]},"n2540":{"id":"n2540","loc":[-85.633222,41.945358]},"n2541":{"id":"n2541","loc":[-85.633425,41.945541]},"n2542":{"id":"n2542","loc":[-85.63299,41.9455]},"n2543":{"id":"n2543","loc":[-85.634374,41.944327]},"n2544":{"id":"n2544","loc":[-85.633648,41.943697]},"n2545":{"id":"n2545","loc":[-85.633533,41.943764]},"n2546":{"id":"n2546","loc":[-85.634239,41.944417]},"n2547":{"id":"n2547","loc":[-85.634122,41.944395]},"n2548":{"id":"n2548","loc":[-85.634235,41.944326]},"n2549":{"id":"n2549","loc":[-85.633613,41.943787]},"n255":{"id":"n255","loc":[-85.636731,41.941461]},"n2550":{"id":"n2550","loc":[-85.633915,41.943613]},"n2551":{"id":"n2551","loc":[-85.634015,41.943555]},"n2552":{"id":"n2552","loc":[-85.63433,41.943839]},"n2553":{"id":"n2553","loc":[-85.634236,41.943894]},"n2554":{"id":"n2554","loc":[-85.635413,41.946052]},"n2555":{"id":"n2555","loc":[-85.635405,41.94569]},"n2556":{"id":"n2556","loc":[-85.635684,41.945925]},"n2557":{"id":"n2557","loc":[-85.635614,41.945742]},"n2558":{"id":"n2558","loc":[-85.635401,41.945745]},"n2559":{"id":"n2559","loc":[-85.635406,41.945928]},"n256":{"id":"n256","loc":[-85.636799,41.941461]},"n2560":{"id":"n2560","loc":[-85.633478,41.943663]},"n2561":{"id":"n2561","loc":[-85.633291,41.943526]},"n2562":{"id":"n2562","loc":[-85.633094,41.943541]},"n2563":{"id":"n2563","loc":[-85.633302,41.943492]},"n2564":{"id":"n2564","loc":[-85.633047,41.943623]},"n2565":{"id":"n2565","loc":[-85.633275,41.943562]},"n2566":{"id":"n2566","loc":[-85.633351,41.943518]},"n2567":{"id":"n2567","loc":[-85.633224,41.9434]},"n2568":{"id":"n2568","loc":[-85.633235,41.943369]},"n2569":{"id":"n2569","loc":[-85.635179,41.943911]},"n257":{"id":"n257","loc":[-85.6368,41.9415]},"n2570":{"id":"n2570","loc":[-85.635146,41.943918]},"n2571":{"id":"n2571","loc":[-85.634888,41.943905]},"n2572":{"id":"n2572","loc":[-85.634832,41.943911]},"n2573":{"id":"n2573","loc":[-85.634638,41.944007]},"n2574":{"id":"n2574","loc":[-85.634568,41.94405]},"n2575":{"id":"n2575","loc":[-85.635994,41.94501]},"n2576":{"id":"n2576","loc":[-85.636388,41.944608]},"n2577":{"id":"n2577","loc":[-85.636215,41.944787]},"n2578":{"id":"n2578","loc":[-85.637948,41.944587]},"n2579":{"id":"n2579","loc":[-85.637849,41.944567]},"n258":{"id":"n258","loc":[-85.636814,41.9415]},"n2580":{"id":"n2580","loc":[-85.637895,41.944455]},"n2581":{"id":"n2581","loc":[-85.637996,41.944477]},"n2582":{"id":"n2582","loc":[-85.635525,41.94337]},"n2583":{"id":"n2583","loc":[-85.637847,41.943923]},"n2584":{"id":"n2584","loc":[-85.637891,41.944124]},"n2585":{"id":"n2585","loc":[-85.638167,41.944229]},"n2586":{"id":"n2586","loc":[-85.638236,41.944097]},"n2587":{"id":"n2587","loc":[-85.638207,41.944025]},"n2588":{"id":"n2588","loc":[-85.638141,41.943997]},"n2589":{"id":"n2589","loc":[-85.638057,41.944015]},"n259":{"id":"n259","loc":[-85.636815,41.941538]},"n2590":{"id":"n2590","loc":[-85.637902,41.944231]},"n2591":{"id":"n2591","loc":[-85.638134,41.944307]},"n2592":{"id":"n2592","loc":[-85.638242,41.944294]},"n2593":{"id":"n2593","loc":[-85.638274,41.944222]},"n2594":{"id":"n2594","loc":[-85.638236,41.944174]},"n2595":{"id":"n2595","loc":[-85.638207,41.944157]},"n2596":{"id":"n2596","loc":[-85.637818,41.943984]},"n2597":{"id":"n2597","loc":[-85.634996,41.944439]},"n2598":{"id":"n2598","loc":[-85.633946,41.945804]},"n2599":{"id":"n2599","loc":[-85.634102,41.945864]},"n26":{"id":"n26","loc":[-85.634346,41.942744]},"n260":{"id":"n260","loc":[-85.636827,41.941538]},"n2600":{"id":"n2600","loc":[-85.633819,41.945756]},"n2601":{"id":"n2601","loc":[-85.634025,41.945975]},"n2602":{"id":"n2602","loc":[-85.633742,41.945867]},"n2603":{"id":"n2603","loc":[-85.63373,41.946004]},"n2604":{"id":"n2604","loc":[-85.633947,41.946081]},"n2605":{"id":"n2605","loc":[-85.633872,41.945917]},"n2606":{"id":"n2606","loc":[-85.633825,41.945985]},"n2607":{"id":"n2607","loc":[-85.633762,41.94596]},"n2608":{"id":"n2608","loc":[-85.634224,41.946037]},"n2609":{"id":"n2609","loc":[-85.634357,41.945851]},"n261":{"id":"n261","loc":[-85.636828,41.941584]},"n2610":{"id":"n2610","loc":[-85.634398,41.945813]},"n2611":{"id":"n2611","loc":[-85.634461,41.945812]},"n2612":{"id":"n2612","loc":[-85.634501,41.945852]},"n2613":{"id":"n2613","loc":[-85.634503,41.94597]},"n2614":{"id":"n2614","loc":[-85.634462,41.945971]},"n2615":{"id":"n2615","loc":[-85.634465,41.946036]},"n2616":{"id":"n2616","loc":[-85.634235,41.946072]},"n2617":{"id":"n2617","loc":[-85.634447,41.946036]},"n2618":{"id":"n2618","loc":[-85.634448,41.946052]},"n2619":{"id":"n2619","loc":[-85.634494,41.946051]},"n262":{"id":"n262","loc":[-85.636819,41.941585]},"n2620":{"id":"n2620","loc":[-85.634497,41.946144]},"n2621":{"id":"n2621","loc":[-85.634453,41.946144]},"n2622":{"id":"n2622","loc":[-85.634454,41.94616]},"n2623":{"id":"n2623","loc":[-85.634393,41.946161]},"n2624":{"id":"n2624","loc":[-85.634394,41.94618]},"n2625":{"id":"n2625","loc":[-85.634345,41.94618]},"n2626":{"id":"n2626","loc":[-85.634344,41.946162]},"n2627":{"id":"n2627","loc":[-85.63427,41.946163]},"n2628":{"id":"n2628","loc":[-85.634266,41.946071]},"n2629":{"id":"n2629","loc":[-85.634148,41.946163]},"n263":{"id":"n263","loc":[-85.636854,41.941714]},"n2630":{"id":"n2630","loc":[-85.634213,41.946072]},"n2631":{"id":"n2631","loc":[-85.633293,41.946309]},"n2632":{"id":"n2632","loc":[-85.633122,41.946239]},"n2633":{"id":"n2633","loc":[-85.633295,41.946005]},"n2634":{"id":"n2634","loc":[-85.633395,41.946047]},"n2635":{"id":"n2635","loc":[-85.633404,41.946035]},"n2636":{"id":"n2636","loc":[-85.633459,41.946057]},"n2637":{"id":"n2637","loc":[-85.633387,41.946154]},"n2638":{"id":"n2638","loc":[-85.633403,41.946161]},"n2639":{"id":"n2639","loc":[-85.634176,41.946415]},"n264":{"id":"n264","loc":[-85.636855,41.941774]},"n2640":{"id":"n2640","loc":[-85.634179,41.946339]},"n2641":{"id":"n2641","loc":[-85.634455,41.946345]},"n2642":{"id":"n2642","loc":[-85.634452,41.946422]},"n2643":{"id":"n2643","loc":[-85.63437,41.946421]},"n2644":{"id":"n2644","loc":[-85.634367,41.946497]},"n2645":{"id":"n2645","loc":[-85.634289,41.946495]},"n2646":{"id":"n2646","loc":[-85.634291,41.946448]},"n2647":{"id":"n2647","loc":[-85.634269,41.946448]},"n2648":{"id":"n2648","loc":[-85.63427,41.946417]},"n2649":{"id":"n2649","loc":[-85.63484,41.946328]},"n265":{"id":"n265","loc":[-85.636822,41.941774]},"n2650":{"id":"n2650","loc":[-85.634839,41.946187]},"n2651":{"id":"n2651","loc":[-85.635148,41.946186]},"n2652":{"id":"n2652","loc":[-85.635148,41.946216]},"n2653":{"id":"n2653","loc":[-85.63521,41.946216]},"n2654":{"id":"n2654","loc":[-85.63521,41.946348]},"n2655":{"id":"n2655","loc":[-85.635154,41.946348]},"n2656":{"id":"n2656","loc":[-85.635153,41.946327]},"n2657":{"id":"n2657","loc":[-85.634037,41.946957]},"n2658":{"id":"n2658","loc":[-85.634253,41.946953]},"n2659":{"id":"n2659","loc":[-85.63481,41.946543]},"n266":{"id":"n266","loc":[-85.636822,41.941778]},"n2660":{"id":"n2660","loc":[-85.634809,41.946459]},"n2661":{"id":"n2661","loc":[-85.635154,41.946458]},"n2662":{"id":"n2662","loc":[-85.635155,41.946554]},"n2663":{"id":"n2663","loc":[-85.635022,41.946547]},"n2664":{"id":"n2664","loc":[-85.635022,41.946573]},"n2665":{"id":"n2665","loc":[-85.634909,41.946574]},"n2666":{"id":"n2666","loc":[-85.634909,41.946561]},"n2667":{"id":"n2667","loc":[-85.634896,41.947159]},"n2668":{"id":"n2668","loc":[-85.634894,41.947032]},"n2669":{"id":"n2669","loc":[-85.635024,41.947031]},"n267":{"id":"n267","loc":[-85.636756,41.941779]},"n2670":{"id":"n2670","loc":[-85.635026,41.947158]},"n2671":{"id":"n2671","loc":[-85.635233,41.947105]},"n2672":{"id":"n2672","loc":[-85.635236,41.946991]},"n2673":{"id":"n2673","loc":[-85.635369,41.946993]},"n2674":{"id":"n2674","loc":[-85.635366,41.947107]},"n2675":{"id":"n2675","loc":[-85.634824,41.946929]},"n2676":{"id":"n2676","loc":[-85.634825,41.946818]},"n2677":{"id":"n2677","loc":[-85.63512,41.946819]},"n2678":{"id":"n2678","loc":[-85.635119,41.94693]},"n2679":{"id":"n2679","loc":[-85.634796,41.946806]},"n268":{"id":"n268","loc":[-85.636756,41.941774]},"n2680":{"id":"n2680","loc":[-85.634792,41.946604]},"n2681":{"id":"n2681","loc":[-85.634948,41.946602]},"n2682":{"id":"n2682","loc":[-85.634949,41.946645]},"n2683":{"id":"n2683","loc":[-85.634975,41.946644]},"n2684":{"id":"n2684","loc":[-85.634974,41.946599]},"n2685":{"id":"n2685","loc":[-85.635117,41.946598]},"n2686":{"id":"n2686","loc":[-85.635122,41.946801]},"n2687":{"id":"n2687","loc":[-85.634981,41.946803]},"n2688":{"id":"n2688","loc":[-85.634979,41.946752]},"n2689":{"id":"n2689","loc":[-85.634952,41.946752]},"n269":{"id":"n269","loc":[-85.636721,41.941774]},"n2690":{"id":"n2690","loc":[-85.634953,41.946804]},"n2691":{"id":"n2691","loc":[-85.634649,41.946841]},"n2692":{"id":"n2692","loc":[-85.634331,41.94684]},"n2693":{"id":"n2693","loc":[-85.634183,41.946809]},"n2694":{"id":"n2694","loc":[-85.633699,41.946607]},"n2695":{"id":"n2695","loc":[-85.634487,41.946664]},"n2696":{"id":"n2696","loc":[-85.634486,41.946598]},"n2697":{"id":"n2697","loc":[-85.63423,41.946599]},"n2698":{"id":"n2698","loc":[-85.634231,41.946662]},"n2699":{"id":"n2699","loc":[-85.634284,41.946662]},"n27":{"id":"n27","loc":[-85.634136,41.943183]},"n270":{"id":"n270","loc":[-85.63672,41.941714]},"n2700":{"id":"n2700","loc":[-85.634284,41.946679]},"n2701":{"id":"n2701","loc":[-85.634365,41.946679]},"n2702":{"id":"n2702","loc":[-85.634365,41.946664]},"n2703":{"id":"n2703","loc":[-85.635443,41.947015]},"n2704":{"id":"n2704","loc":[-85.635442,41.946801]},"n2705":{"id":"n2705","loc":[-85.63603,41.9468]},"n2706":{"id":"n2706","loc":[-85.636028,41.947016]},"n2707":{"id":"n2707","loc":[-85.635457,41.946582]},"n2708":{"id":"n2708","loc":[-85.635455,41.946211]},"n2709":{"id":"n2709","loc":[-85.635636,41.946579]},"n271":{"id":"n271","loc":[-85.636767,41.941713]},"n2710":{"id":"n2710","loc":[-85.635716,41.9468]},"n2711":{"id":"n2711","loc":[-85.635969,41.9468]},"n2712":{"id":"n2712","loc":[-85.635973,41.946295]},"n2713":{"id":"n2713","loc":[-85.636019,41.946484]},"n2714":{"id":"n2714","loc":[-85.636022,41.946388]},"n2715":{"id":"n2715","loc":[-85.635961,41.946493]},"n2716":{"id":"n2716","loc":[-85.635713,41.94621]},"n2717":{"id":"n2717","loc":[-85.635416,41.946142]},"n2718":{"id":"n2718","loc":[-85.635759,41.946203]},"n2719":{"id":"n2719","loc":[-85.636153,41.946747]},"n272":{"id":"n272","loc":[-85.636767,41.941706]},"n2720":{"id":"n2720","loc":[-85.635417,41.946915]},"n2721":{"id":"n2721","loc":[-85.636154,41.946915]},"n2722":{"id":"n2722","loc":[-85.635866,41.946473]},"n2723":{"id":"n2723","loc":[-85.635717,41.946633]},"n2724":{"id":"n2724","loc":[-85.635556,41.946166]},"n2725":{"id":"n2725","loc":[-85.63556,41.946556]},"n2726":{"id":"n2726","loc":[-85.635731,41.946594]},"n2727":{"id":"n2727","loc":[-85.635866,41.946595]},"n2728":{"id":"n2728","loc":[-85.635456,41.947028]},"n2729":{"id":"n2729","loc":[-85.635796,41.947023]},"n273":{"id":"n273","loc":[-85.636779,41.941698]},"n2730":{"id":"n2730","loc":[-85.635798,41.947091]},"n2731":{"id":"n2731","loc":[-85.63573,41.947092]},"n2732":{"id":"n2732","loc":[-85.635733,41.947233]},"n2733":{"id":"n2733","loc":[-85.636283,41.946863]},"n2734":{"id":"n2734","loc":[-85.63628,41.946706]},"n2735":{"id":"n2735","loc":[-85.636341,41.946705]},"n2736":{"id":"n2736","loc":[-85.636273,41.946584]},"n2737":{"id":"n2737","loc":[-85.636396,41.946545]},"n2738":{"id":"n2738","loc":[-85.636474,41.946684]},"n2739":{"id":"n2739","loc":[-85.636511,41.946861]},"n274":{"id":"n274","loc":[-85.636798,41.941697]},"n2740":{"id":"n2740","loc":[-85.633713,41.947184]},"n2741":{"id":"n2741","loc":[-85.633651,41.94716]},"n2742":{"id":"n2742","loc":[-85.633704,41.947085]},"n2743":{"id":"n2743","loc":[-85.6336,41.947044]},"n2744":{"id":"n2744","loc":[-85.633506,41.947177]},"n2745":{"id":"n2745","loc":[-85.629586,41.952469]},"n2746":{"id":"n2746","loc":[-85.634723,41.953681]},"n2747":{"id":"n2747","loc":[-85.63478,41.959007]},"n2748":{"id":"n2748","loc":[-85.632793,41.94405],"tags":{"highway":"traffic_signals","traffic_signals":"signal","traffic_signals:direction":"both"}},"n2749":{"id":"n2749","loc":[-85.634648,41.947325]},"n275":{"id":"n275","loc":[-85.63681,41.941705]},"n2750":{"id":"n2750","loc":[-85.625078,41.952097]},"n2751":{"id":"n2751","loc":[-85.633195,41.94734]},"n2752":{"id":"n2752","loc":[-85.626447,41.957168]},"n2753":{"id":"n2753","loc":[-85.632023,41.949012]},"n2754":{"id":"n2754","loc":[-85.630835,41.950656]},"n2755":{"id":"n2755","loc":[-85.634655,41.948612]},"n2756":{"id":"n2756","loc":[-85.636182,41.948605]},"n2757":{"id":"n2757","loc":[-85.634729,41.954667]},"n2758":{"id":"n2758","loc":[-85.634686,41.951159]},"n2759":{"id":"n2759","loc":[-85.636206,41.951146]},"n276":{"id":"n276","loc":[-85.63681,41.941714]},"n2760":{"id":"n2760","loc":[-85.634668,41.949891]},"n2761":{"id":"n2761","loc":[-85.634701,41.952422]},"n2762":{"id":"n2762","loc":[-85.634747,41.955907]},"n2763":{"id":"n2763","loc":[-85.627975,41.954695]},"n2764":{"id":"n2764","loc":[-85.626832,41.954698]},"n2765":{"id":"n2765","loc":[-85.632278,41.948624]},"n2766":{"id":"n2766","loc":[-85.628639,41.953725]},"n2767":{"id":"n2767","loc":[-85.636233,41.95241]},"n2768":{"id":"n2768","loc":[-85.631385,41.949913]},"n2769":{"id":"n2769","loc":[-85.630486,41.951194]},"n277":{"id":"n277","loc":[-85.636861,41.942041]},"n2770":{"id":"n2770","loc":[-85.624937,41.952088]},"n2771":{"id":"n2771","loc":[-85.624945,41.952022]},"n2772":{"id":"n2772","loc":[-85.636162,41.94731]},"n2773":{"id":"n2773","loc":[-85.636188,41.949881]},"n2774":{"id":"n2774","loc":[-85.631422,41.948294]},"n2775":{"id":"n2775","loc":[-85.632844,41.945547]},"n2776":{"id":"n2776","loc":[-85.632484,41.945344]},"n2777":{"id":"n2777","loc":[-85.631775,41.944636]},"n2778":{"id":"n2778","loc":[-85.632656,41.945471]},"n2779":{"id":"n2779","loc":[-85.631959,41.944827]},"n278":{"id":"n278","loc":[-85.636862,41.942099]},"n2780":{"id":"n2780","loc":[-85.631679,41.94438]},"n2781":{"id":"n2781","loc":[-85.625129,41.959272]},"n2782":{"id":"n2782","loc":[-85.632446,41.944861]},"n2783":{"id":"n2783","loc":[-85.632804,41.945477]},"n2784":{"id":"n2784","loc":[-85.632255,41.944962]},"n2785":{"id":"n2785","loc":[-85.632736,41.944757]},"n2786":{"id":"n2786","loc":[-85.632543,41.94486]},"n2787":{"id":"n2787","loc":[-85.632889,41.945561]},"n2788":{"id":"n2788","loc":[-85.632091,41.944949]},"n2789":{"id":"n2789","loc":[-85.632537,41.944713]},"n279":{"id":"n279","loc":[-85.636807,41.942099]},"n2790":{"id":"n2790","loc":[-85.632279,41.94485]},"n2791":{"id":"n2791","loc":[-85.632749,41.943247]},"n2792":{"id":"n2792","loc":[-85.632824,41.943152]},"n2793":{"id":"n2793","loc":[-85.632929,41.94317]},"n2794":{"id":"n2794","loc":[-85.632897,41.943078]},"n2795":{"id":"n2795","loc":[-85.632626,41.943231]},"n2796":{"id":"n2796","loc":[-85.634048,41.947257]},"n2797":{"id":"n2797","loc":[-85.634264,41.947252]},"n2798":{"id":"n2798","loc":[-85.635418,41.947317]},"n2799":{"id":"n2799","loc":[-85.635461,41.947237]},"n28":{"id":"n28","loc":[-85.63821,41.944308]},"n280":{"id":"n280","loc":[-85.636807,41.942126]},"n2800":{"id":"n2800","loc":[-85.632868,41.946229]},"n2801":{"id":"n2801","loc":[-85.633673,41.947242]},"n2802":{"id":"n2802","loc":[-85.623604,41.945881],"tags":{"amenity":"school","name":"Barrows School"}},"n2803":{"id":"n2803","loc":[-85.627401,41.943496]},"n2804":{"id":"n2804","loc":[-85.627403,41.943625]},"n2805":{"id":"n2805","loc":[-85.626409,41.943215]},"n2806":{"id":"n2806","loc":[-85.624884,41.943508]},"n2807":{"id":"n2807","loc":[-85.625191,41.943509]},"n2808":{"id":"n2808","loc":[-85.624882,41.94382]},"n2809":{"id":"n2809","loc":[-85.624893,41.945618]},"n281":{"id":"n281","loc":[-85.636726,41.942126]},"n2810":{"id":"n2810","loc":[-85.624912,41.946524]},"n2811":{"id":"n2811","loc":[-85.622721,41.946535]},"n2812":{"id":"n2812","loc":[-85.627399,41.94469]},"n2813":{"id":"n2813","loc":[-85.622716,41.945622]},"n2814":{"id":"n2814","loc":[-85.624886,41.944724]},"n2815":{"id":"n2815","loc":[-85.622674,41.944737]},"n2816":{"id":"n2816","loc":[-85.625092,41.945063]},"n2817":{"id":"n2817","loc":[-85.625233,41.945064]},"n2818":{"id":"n2818","loc":[-85.625229,41.944871]},"n2819":{"id":"n2819","loc":[-85.625066,41.944871]},"n282":{"id":"n282","loc":[-85.636726,41.942098]},"n2820":{"id":"n2820","loc":[-85.625024,41.944901]},"n2821":{"id":"n2821","loc":[-85.625025,41.944924]},"n2822":{"id":"n2822","loc":[-85.625087,41.944926]},"n2823":{"id":"n2823","loc":[-85.625349,41.944506]},"n2824":{"id":"n2824","loc":[-85.625347,41.944388]},"n2825":{"id":"n2825","loc":[-85.625152,41.94439]},"n2826":{"id":"n2826","loc":[-85.625152,41.944431]},"n2827":{"id":"n2827","loc":[-85.625134,41.944431]},"n2828":{"id":"n2828","loc":[-85.625136,41.944508]},"n2829":{"id":"n2829","loc":[-85.623236,41.946341]},"n283":{"id":"n283","loc":[-85.636708,41.942098]},"n2830":{"id":"n2830","loc":[-85.623241,41.946067]},"n2831":{"id":"n2831","loc":[-85.623207,41.946067]},"n2832":{"id":"n2832","loc":[-85.623212,41.945827]},"n2833":{"id":"n2833","loc":[-85.622981,41.945825]},"n2834":{"id":"n2834","loc":[-85.622976,41.946063]},"n2835":{"id":"n2835","loc":[-85.623006,41.946063]},"n2836":{"id":"n2836","loc":[-85.623002,41.946256]},"n2837":{"id":"n2837","loc":[-85.623075,41.946256]},"n2838":{"id":"n2838","loc":[-85.623074,41.946339]},"n2839":{"id":"n2839","loc":[-85.624574,41.951755]},"n284":{"id":"n284","loc":[-85.636708,41.942041]},"n2840":{"id":"n2840","loc":[-85.62498,41.951844]},"n2841":{"id":"n2841","loc":[-85.625086,41.95188]},"n2842":{"id":"n2842","loc":[-85.625135,41.951922]},"n2843":{"id":"n2843","loc":[-85.615273,41.945637]},"n2844":{"id":"n2844","loc":[-85.620172,41.945627]},"n2845":{"id":"n2845","loc":[-85.625167,41.951985]},"n2846":{"id":"n2846","loc":[-85.622741,41.947437]},"n2847":{"id":"n2847","loc":[-85.624907,41.947428]},"n2848":{"id":"n2848","loc":[-85.627046,41.940995]},"n2849":{"id":"n2849","loc":[-85.627295,41.941304]},"n285":{"id":"n285","loc":[-85.635618,41.941852]},"n2850":{"id":"n2850","loc":[-85.627352,41.94148]},"n2851":{"id":"n2851","loc":[-85.62737,41.942261]},"n2852":{"id":"n2852","loc":[-85.6264,41.942263]},"n2853":{"id":"n2853","loc":[-85.622769,41.949228]},"n2854":{"id":"n2854","loc":[-85.624937,41.949218]},"n2855":{"id":"n2855","loc":[-85.630001,41.944664]},"n2856":{"id":"n2856","loc":[-85.624873,41.942022]},"n2857":{"id":"n2857","loc":[-85.622761,41.948333]},"n2858":{"id":"n2858","loc":[-85.624924,41.948334]},"n2859":{"id":"n2859","loc":[-85.620051,41.94383]},"n286":{"id":"n286","loc":[-85.635621,41.94202]},"n2860":{"id":"n2860","loc":[-85.627629,41.946498]},"n2861":{"id":"n2861","loc":[-85.622757,41.950111]},"n2862":{"id":"n2862","loc":[-85.623685,41.954624]},"n2863":{"id":"n2863","loc":[-85.621459,41.944756]},"n2864":{"id":"n2864","loc":[-85.628637,41.944676]},"n2865":{"id":"n2865","loc":[-85.630125,41.944654]},"n2866":{"id":"n2866","loc":[-85.625196,41.952097]},"n2867":{"id":"n2867","loc":[-85.630257,41.944637]},"n2868":{"id":"n2868","loc":[-85.631247,41.944459]},"n2869":{"id":"n2869","loc":[-85.624867,41.94159]},"n287":{"id":"n287","loc":[-85.63524,41.942023]},"n2870":{"id":"n2870","loc":[-85.624958,41.950343]},"n2871":{"id":"n2871","loc":[-85.624948,41.950484]},"n2872":{"id":"n2872","loc":[-85.624813,41.950983]},"n2873":{"id":"n2873","loc":[-85.624723,41.951789]},"n2874":{"id":"n2874","loc":[-85.624262,41.9512]},"n2875":{"id":"n2875","loc":[-85.62414,41.951201]},"n2876":{"id":"n2876","loc":[-85.624139,41.95112]},"n2877":{"id":"n2877","loc":[-85.628481,41.945611]},"n2878":{"id":"n2878","loc":[-85.620072,41.946538]},"n2879":{"id":"n2879","loc":[-85.622763,41.95099]},"n288":{"id":"n288","loc":[-85.635237,41.941855]},"n2880":{"id":"n2880","loc":[-85.62814,41.946963]},"n2881":{"id":"n2881","loc":[-85.628245,41.947031]},"n2882":{"id":"n2882","loc":[-85.628331,41.947066]},"n2883":{"id":"n2883","loc":[-85.629722,41.944444],"tags":{"leisure":"park","name":"Scouter Park"}},"n2884":{"id":"n2884","loc":[-85.629977,41.943907]},"n2885":{"id":"n2885","loc":[-85.629947,41.943775]},"n2886":{"id":"n2886","loc":[-85.629899,41.943625]},"n2887":{"id":"n2887","loc":[-85.632286,41.944257]},"n2888":{"id":"n2888","loc":[-85.632523,41.944179]},"n2889":{"id":"n2889","loc":[-85.632141,41.944293]},"n289":{"id":"n289","loc":[-85.635568,41.940475]},"n2890":{"id":"n2890","loc":[-85.631571,41.9444]},"n2891":{"id":"n2891","loc":[-85.643236,41.941895]},"n2892":{"id":"n2892","loc":[-85.62865,41.945353]},"n2893":{"id":"n2893","loc":[-85.628594,41.945481]},"n2894":{"id":"n2894","loc":[-85.628581,41.947169]},"n2895":{"id":"n2895","loc":[-85.631843,41.943793]},"n2896":{"id":"n2896","loc":[-85.632299,41.943472]},"n2897":{"id":"n2897","loc":[-85.631519,41.944881]},"n2898":{"id":"n2898","loc":[-85.628429,41.947219]},"n2899":{"id":"n2899","loc":[-85.63145,41.945162]},"n29":{"id":"n29","loc":[-85.637963,41.944263]},"n290":{"id":"n290","loc":[-85.634584,41.940477]},"n2900":{"id":"n2900","loc":[-85.630939,41.945519]},"n2901":{"id":"n2901","loc":[-85.62903,41.945719]},"n2902":{"id":"n2902","loc":[-85.630521,41.945559]},"n2903":{"id":"n2903","loc":[-85.629294,41.945585]},"n2904":{"id":"n2904","loc":[-85.629845,41.945543]},"n2905":{"id":"n2905","loc":[-85.631497,41.944625]},"n2906":{"id":"n2906","loc":[-85.630281,41.945553]},"n2907":{"id":"n2907","loc":[-85.628553,41.946973]},"n2908":{"id":"n2908","loc":[-85.631383,41.945338]},"n2909":{"id":"n2909","loc":[-85.628843,41.946103]},"n291":{"id":"n291","loc":[-85.634583,41.940203]},"n2910":{"id":"n2910","loc":[-85.631193,41.945473]},"n2911":{"id":"n2911","loc":[-85.628897,41.945944]},"n2912":{"id":"n2912","loc":[-85.628789,41.946454]},"n2913":{"id":"n2913","loc":[-85.632548,41.944563]},"n2914":{"id":"n2914","loc":[-85.627527,41.944555]},"n2915":{"id":"n2915","loc":[-85.62752,41.943726]},"n2916":{"id":"n2916","loc":[-85.627894,41.943723]},"n2917":{"id":"n2917","loc":[-85.627897,41.943919]},"n2918":{"id":"n2918","loc":[-85.627991,41.943934]},"n2919":{"id":"n2919","loc":[-85.628082,41.943966]},"n292":{"id":"n292","loc":[-85.635567,41.940201]},"n2920":{"id":"n2920","loc":[-85.628177,41.944015]},"n2921":{"id":"n2921","loc":[-85.628193,41.944048]},"n2922":{"id":"n2922","loc":[-85.628167,41.944054]},"n2923":{"id":"n2923","loc":[-85.628193,41.944094]},"n2924":{"id":"n2924","loc":[-85.628213,41.944144]},"n2925":{"id":"n2925","loc":[-85.628214,41.944199]},"n2926":{"id":"n2926","loc":[-85.62833,41.944196]},"n2927":{"id":"n2927","loc":[-85.628328,41.944262]},"n2928":{"id":"n2928","loc":[-85.628173,41.944262]},"n2929":{"id":"n2929","loc":[-85.628171,41.944293]},"n293":{"id":"n293","loc":[-85.635816,41.942673],"tags":{"crossing":"zebra","highway":"crossing"}},"n2930":{"id":"n2930","loc":[-85.628039,41.944296]},"n2931":{"id":"n2931","loc":[-85.62804,41.944329]},"n2932":{"id":"n2932","loc":[-85.627829,41.944335]},"n2933":{"id":"n2933","loc":[-85.627835,41.94455]},"n2936":{"id":"n2936","loc":[-85.632823,41.945994]},"n294":{"id":"n294","loc":[-85.635696,41.942712]},"n2940":{"id":"n2940","loc":[-85.632192,41.945973]},"n2941":{"id":"n2941","loc":[-85.63226,41.94587]},"n2942":{"id":"n2942","loc":[-85.632721,41.946036]},"n2943":{"id":"n2943","loc":[-85.632641,41.946142]},"n2944":{"id":"n2944","loc":[-85.62937,41.947467]},"n2945":{"id":"n2945","loc":[-85.62959,41.942936]},"n2946":{"id":"n2946","loc":[-85.629551,41.94284]},"n2947":{"id":"n2947","loc":[-85.629501,41.942704]},"n2948":{"id":"n2948","loc":[-85.629472,41.942578]},"n2949":{"id":"n2949","loc":[-85.629361,41.941801]},"n295":{"id":"n295","loc":[-85.635679,41.941962]},"n2950":{"id":"n2950","loc":[-85.629339,41.941716]},"n2951":{"id":"n2951","loc":[-85.629315,41.94166]},"n2952":{"id":"n2952","loc":[-85.629279,41.941602]},"n2953":{"id":"n2953","loc":[-85.629227,41.941556]},"n2954":{"id":"n2954","loc":[-85.624261,41.95112]},"n2955":{"id":"n2955","loc":[-85.629153,41.941524]},"n2956":{"id":"n2956","loc":[-85.626904,41.941098]},"n2957":{"id":"n2957","loc":[-85.624588,41.951294]},"n2958":{"id":"n2958","loc":[-85.631844,41.942945]},"n2959":{"id":"n2959","loc":[-85.625854,41.949222]},"n296":{"id":"n296","loc":[-85.635672,41.941337]},"n2960":{"id":"n2960","loc":[-85.625146,41.955238]},"n2961":{"id":"n2961","loc":[-85.626745,41.948296]},"n2962":{"id":"n2962","loc":[-85.625721,41.95524]},"n2963":{"id":"n2963","loc":[-85.624706,41.952317]},"n2964":{"id":"n2964","loc":[-85.62609,41.956147]},"n2965":{"id":"n2965","loc":[-85.624401,41.954928]},"n2966":{"id":"n2966","loc":[-85.626558,41.955367]},"n2967":{"id":"n2967","loc":[-85.62468,41.955096]},"n2968":{"id":"n2968","loc":[-85.624159,41.953929]},"n2969":{"id":"n2969","loc":[-85.62506,41.951113]},"n297":{"id":"n297","loc":[-85.635658,41.941284]},"n2970":{"id":"n2970","loc":[-85.624942,41.951591]},"n2971":{"id":"n2971","loc":[-85.627399,41.947546]},"n2972":{"id":"n2972","loc":[-85.627695,41.947404]},"n2973":{"id":"n2973","loc":[-85.625925,41.94896]},"n2974":{"id":"n2974","loc":[-85.625725,41.950211]},"n2975":{"id":"n2975","loc":[-85.627008,41.947963]},"n2976":{"id":"n2976","loc":[-85.624373,41.953458]},"n2977":{"id":"n2977","loc":[-85.624137,41.954392]},"n2978":{"id":"n2978","loc":[-85.628257,41.947307]},"n2979":{"id":"n2979","loc":[-85.625281,41.95066]},"n298":{"id":"n298","loc":[-85.635602,41.941166]},"n2980":{"id":"n2980","loc":[-85.625865,41.949804]},"n2981":{"id":"n2981","loc":[-85.626508,41.955932]},"n2982":{"id":"n2982","loc":[-85.626333,41.955216]},"n2983":{"id":"n2983","loc":[-85.626637,41.955676]},"n2984":{"id":"n2984","loc":[-85.624223,41.954599]},"n2985":{"id":"n2985","loc":[-85.626219,41.948671]},"n2986":{"id":"n2986","loc":[-85.624556,41.953043]},"n2987":{"id":"n2987","loc":[-85.625598,41.956302]},"n2988":{"id":"n2988","loc":[-85.624571,41.952971]},"n2989":{"id":"n2989","loc":[-85.627141,41.940727]},"n299":{"id":"n299","loc":[-85.635598,41.941138]},"n2990":{"id":"n2990","loc":[-85.627102,41.939144]},"n2991":{"id":"n2991","loc":[-85.627127,41.940086]},"n2992":{"id":"n2992","loc":[-85.627116,41.940843]},"n2993":{"id":"n2993","loc":[-85.627132,41.9402]},"n2994":{"id":"n2994","loc":[-85.629734,41.940078]},"n2995":{"id":"n2995","loc":[-85.6276,41.937412]},"n2996":{"id":"n2996","loc":[-85.627451,41.937549]},"n2997":{"id":"n2997","loc":[-85.627375,41.937618]},"n2998":{"id":"n2998","loc":[-85.627278,41.937728]},"n2999":{"id":"n2999","loc":[-85.627199,41.937842]},"n3":{"id":"n3","loc":[-85.627345,41.953983]},"n30":{"id":"n30","loc":[-85.637882,41.944205]},"n300":{"id":"n300","loc":[-85.635614,41.941076]},"n3000":{"id":"n3000","loc":[-85.627141,41.937981]},"n3001":{"id":"n3001","loc":[-85.627109,41.938153]},"n3002":{"id":"n3002","loc":[-85.627101,41.938699]},"n3003":{"id":"n3003","loc":[-85.628311,41.942261]},"n3004":{"id":"n3004","loc":[-85.628439,41.940082]},"n3005":{"id":"n3005","loc":[-85.619538,41.942622],"tags":{"leisure":"slipway"}},"n3006":{"id":"n3006","loc":[-85.619872,41.942618]},"n3007":{"id":"n3007","loc":[-85.619755,41.942612]},"n3008":{"id":"n3008","loc":[-85.619647,41.942628]},"n3009":{"id":"n3009","loc":[-85.619415,41.942626]},"n301":{"id":"n301","loc":[-85.635659,41.940956]},"n3010":{"id":"n3010","loc":[-85.619212,41.942623]},"n3011":{"id":"n3011","loc":[-85.631485,41.942472]},"n3012":{"id":"n3012","loc":[-85.630986,41.941786]},"n3013":{"id":"n3013","loc":[-85.631797,41.942006]},"n3014":{"id":"n3014","loc":[-85.630972,41.941162]},"n3015":{"id":"n3015","loc":[-85.631396,41.941611],"tags":{"railway":"level_crossing"}},"n3016":{"id":"n3016","loc":[-85.631878,41.941545]},"n3017":{"id":"n3017","loc":[-85.630461,41.94055]},"n3018":{"id":"n3018","loc":[-85.629751,41.939539],"tags":{"railway":"level_crossing"}},"n3019":{"id":"n3019","loc":[-85.631663,41.941513]},"n302":{"id":"n302","loc":[-85.635666,41.940922]},"n3020":{"id":"n3020","loc":[-85.631328,41.941375]},"n3021":{"id":"n3021","loc":[-85.632554,41.941779]},"n3022":{"id":"n3022","loc":[-85.63245,41.941769]},"n3023":{"id":"n3023","loc":[-85.632475,41.941644]},"n3024":{"id":"n3024","loc":[-85.632581,41.941654]},"n3025":{"id":"n3025","loc":[-85.631957,41.941352]},"n3026":{"id":"n3026","loc":[-85.632293,41.941139]},"n3027":{"id":"n3027","loc":[-85.632315,41.941153]},"n3028":{"id":"n3028","loc":[-85.632302,41.941262]},"n3029":{"id":"n3029","loc":[-85.63237,41.941267]},"n303":{"id":"n303","loc":[-85.635667,41.940877]},"n3030":{"id":"n3030","loc":[-85.632356,41.941538]},"n3031":{"id":"n3031","loc":[-85.632134,41.941678]},"n3032":{"id":"n3032","loc":[-85.631942,41.941687]},"n3033":{"id":"n3033","loc":[-85.63203,41.941694]},"n3034":{"id":"n3034","loc":[-85.632166,41.941555]},"n3035":{"id":"n3035","loc":[-85.632412,41.941416]},"n3036":{"id":"n3036","loc":[-85.63248,41.941342]},"n3037":{"id":"n3037","loc":[-85.632502,41.941259]},"n3038":{"id":"n3038","loc":[-85.632453,41.941161]},"n3039":{"id":"n3039","loc":[-85.63235,41.941103]},"n304":{"id":"n304","loc":[-85.635668,41.940655]},"n3040":{"id":"n3040","loc":[-85.632236,41.941118]},"n3041":{"id":"n3041","loc":[-85.631894,41.941355]},"n3042":{"id":"n3042","loc":[-85.631859,41.941411]},"n3043":{"id":"n3043","loc":[-85.632011,41.941587]},"n3044":{"id":"n3044","loc":[-85.632446,41.941379]},"n3045":{"id":"n3045","loc":[-85.632511,41.941416]},"n3046":{"id":"n3046","loc":[-85.632545,41.941634]},"n3047":{"id":"n3047","loc":[-85.632612,41.94164]},"n3048":{"id":"n3048","loc":[-85.632595,41.942197]},"n3049":{"id":"n3049","loc":[-85.632565,41.942241]},"n305":{"id":"n305","loc":[-85.635628,41.940617]},"n3050":{"id":"n3050","loc":[-85.632515,41.942256]},"n3051":{"id":"n3051","loc":[-85.63245,41.94223]},"n3052":{"id":"n3052","loc":[-85.632401,41.942174]},"n3053":{"id":"n3053","loc":[-85.632391,41.942115]},"n3054":{"id":"n3054","loc":[-85.632029,41.941859]},"n3055":{"id":"n3055","loc":[-85.631828,41.941639]},"n3056":{"id":"n3056","loc":[-85.631829,41.941508]},"n3057":{"id":"n3057","loc":[-85.631281,41.94312]},"n3058":{"id":"n3058","loc":[-85.631421,41.943065]},"n3059":{"id":"n3059","loc":[-85.631339,41.942949]},"n306":{"id":"n306","loc":[-85.635623,41.940272]},"n3060":{"id":"n3060","loc":[-85.631199,41.943004]},"n3061":{"id":"n3061","loc":[-85.631102,41.942931]},"n3062":{"id":"n3062","loc":[-85.631009,41.942809]},"n3063":{"id":"n3063","loc":[-85.631383,41.94265]},"n3064":{"id":"n3064","loc":[-85.631477,41.942773]},"n3065":{"id":"n3065","loc":[-85.630638,41.942809]},"n3066":{"id":"n3066","loc":[-85.630738,41.942943]},"n3067":{"id":"n3067","loc":[-85.630841,41.9429]},"n3068":{"id":"n3068","loc":[-85.630741,41.942766]},"n3069":{"id":"n3069","loc":[-85.63054,41.942603]},"n307":{"id":"n307","loc":[-85.635651,41.940183]},"n3070":{"id":"n3070","loc":[-85.630498,41.942619]},"n3071":{"id":"n3071","loc":[-85.630567,41.942718]},"n3072":{"id":"n3072","loc":[-85.630616,41.942698]},"n3073":{"id":"n3073","loc":[-85.630642,41.94273]},"n3074":{"id":"n3074","loc":[-85.630686,41.942714]},"n3075":{"id":"n3075","loc":[-85.630715,41.942754]},"n3076":{"id":"n3076","loc":[-85.6309,41.942681]},"n3077":{"id":"n3077","loc":[-85.630843,41.942605]},"n3078":{"id":"n3078","loc":[-85.6309,41.942581]},"n3079":{"id":"n3079","loc":[-85.630832,41.942487]},"n308":{"id":"n308","loc":[-85.63577,41.940183],"tags":{"crossing":"zebra","highway":"crossing"}},"n3080":{"id":"n3080","loc":[-85.630773,41.942509]},"n3081":{"id":"n3081","loc":[-85.630718,41.942436]},"n3082":{"id":"n3082","loc":[-85.630485,41.942524]},"n3083":{"id":"n3083","loc":[-85.631468,41.941233]},"n3084":{"id":"n3084","loc":[-85.631334,41.94114]},"n3085":{"id":"n3085","loc":[-85.632052,41.940568]},"n3086":{"id":"n3086","loc":[-85.63219,41.940663]},"n3087":{"id":"n3087","loc":[-85.631323,41.940834]},"n3088":{"id":"n3088","loc":[-85.631122,41.941002]},"n3089":{"id":"n3089","loc":[-85.631321,41.941133]},"n309":{"id":"n309","loc":[-85.636939,41.942544]},"n3090":{"id":"n3090","loc":[-85.631521,41.940966]},"n3091":{"id":"n3091","loc":[-85.631103,41.940253]},"n3092":{"id":"n3092","loc":[-85.631226,41.940211]},"n3093":{"id":"n3093","loc":[-85.631597,41.940805]},"n3094":{"id":"n3094","loc":[-85.631474,41.940847]},"n3095":{"id":"n3095","loc":[-85.631811,41.940534]},"n3096":{"id":"n3096","loc":[-85.631588,41.94061]},"n3097":{"id":"n3097","loc":[-85.631438,41.940366]},"n3098":{"id":"n3098","loc":[-85.631661,41.94029]},"n3099":{"id":"n3099","loc":[-85.630621,41.940041]},"n31":{"id":"n31","loc":[-85.63827,41.944203]},"n310":{"id":"n310","loc":[-85.636323,41.942552]},"n3100":{"id":"n3100","loc":[-85.630436,41.939773]},"n3101":{"id":"n3101","loc":[-85.63059,41.939714]},"n3102":{"id":"n3102","loc":[-85.630775,41.939983]},"n3103":{"id":"n3103","loc":[-85.63047,41.940167]},"n3104":{"id":"n3104","loc":[-85.63013,41.939686]},"n3105":{"id":"n3105","loc":[-85.630302,41.939618]},"n3106":{"id":"n3106","loc":[-85.630641,41.9401]},"n3107":{"id":"n3107","loc":[-85.630966,41.940619]},"n3108":{"id":"n3108","loc":[-85.630874,41.940493]},"n3109":{"id":"n3109","loc":[-85.630933,41.940469]},"n311":{"id":"n311","loc":[-85.636257,41.942555]},"n3110":{"id":"n3110","loc":[-85.630763,41.940236]},"n3111":{"id":"n3111","loc":[-85.63088,41.940189]},"n3112":{"id":"n3112","loc":[-85.631142,41.940548]},"n3113":{"id":"n3113","loc":[-85.630958,41.940871]},"n3114":{"id":"n3114","loc":[-85.630874,41.940778]},"n3115":{"id":"n3115","loc":[-85.631062,41.940684]},"n3116":{"id":"n3116","loc":[-85.631146,41.940777]},"n3117":{"id":"n3117","loc":[-85.632031,41.940575]},"n3118":{"id":"n3118","loc":[-85.631777,41.940186]},"n3119":{"id":"n3119","loc":[-85.631346,41.940179]},"n312":{"id":"n312","loc":[-85.636208,41.942561]},"n3120":{"id":"n3120","loc":[-85.631342,41.94012]},"n3121":{"id":"n3121","loc":[-85.631831,41.940118]},"n3122":{"id":"n3122","loc":[-85.632115,41.940543]},"n3123":{"id":"n3123","loc":[-85.631031,41.941683]},"n3124":{"id":"n3124","loc":[-85.630981,41.941608]},"n3125":{"id":"n3125","loc":[-85.631209,41.941516]},"n3126":{"id":"n3126","loc":[-85.631264,41.941586]},"n3127":{"id":"n3127","loc":[-85.630938,41.94155]},"n3128":{"id":"n3128","loc":[-85.631156,41.941462]},"n3129":{"id":"n3129","loc":[-85.631197,41.94152]},"n313":{"id":"n313","loc":[-85.636159,41.942573]},"n3130":{"id":"n3130","loc":[-85.630895,41.941485]},"n3131":{"id":"n3131","loc":[-85.630824,41.941389]},"n3132":{"id":"n3132","loc":[-85.630986,41.941323]},"n3133":{"id":"n3133","loc":[-85.631057,41.941419]},"n3134":{"id":"n3134","loc":[-85.630777,41.941328]},"n3135":{"id":"n3135","loc":[-85.630907,41.941274]},"n3136":{"id":"n3136","loc":[-85.630953,41.941335]},"n3137":{"id":"n3137","loc":[-85.630797,41.941247]},"n3138":{"id":"n3138","loc":[-85.630701,41.94117]},"n3139":{"id":"n3139","loc":[-85.630829,41.941113]},"n314":{"id":"n314","loc":[-85.635743,41.942881]},"n3140":{"id":"n3140","loc":[-85.6309,41.941201]},"n3141":{"id":"n3141","loc":[-85.630765,41.941206]},"n3142":{"id":"n3142","loc":[-85.630739,41.941218]},"n3143":{"id":"n3143","loc":[-85.630582,41.941039]},"n3144":{"id":"n3144","loc":[-85.630412,41.940818]},"n3145":{"id":"n3145","loc":[-85.630509,41.940777]},"n3146":{"id":"n3146","loc":[-85.630678,41.941004]},"n3147":{"id":"n3147","loc":[-85.630773,41.942166]},"n3148":{"id":"n3148","loc":[-85.630708,41.942074]},"n3149":{"id":"n3149","loc":[-85.630863,41.942013]},"n315":{"id":"n315","loc":[-85.635452,41.942966]},"n3150":{"id":"n3150","loc":[-85.630928,41.942105]},"n3151":{"id":"n3151","loc":[-85.630701,41.942026]},"n3152":{"id":"n3152","loc":[-85.630665,41.941971]},"n3153":{"id":"n3153","loc":[-85.630793,41.941918]},"n3154":{"id":"n3154","loc":[-85.630837,41.94197]},"n3155":{"id":"n3155","loc":[-85.630757,41.941871]},"n3156":{"id":"n3156","loc":[-85.630629,41.941923]},"n3157":{"id":"n3157","loc":[-85.630694,41.941783]},"n3158":{"id":"n3158","loc":[-85.630534,41.941847]},"n3159":{"id":"n3159","loc":[-85.630598,41.941935]},"n316":{"id":"n316","loc":[-85.634911,41.943118]},"n3160":{"id":"n3160","loc":[-85.631548,41.93938]},"n3161":{"id":"n3161","loc":[-85.631525,41.939919]},"n3162":{"id":"n3162","loc":[-85.631648,41.940043]},"n3163":{"id":"n3163","loc":[-85.624586,41.951121]},"n3164":{"id":"n3164","loc":[-85.622139,41.952064]},"n3165":{"id":"n3165","loc":[-85.622141,41.952144]},"n3166":{"id":"n3166","loc":[-85.621977,41.952146]},"n3167":{"id":"n3167","loc":[-85.621978,41.952211]},"n3168":{"id":"n3168","loc":[-85.62191,41.952212]},"n3169":{"id":"n3169","loc":[-85.633628,41.935437]},"n317":{"id":"n317","loc":[-85.634743,41.943167]},"n3170":{"id":"n3170","loc":[-85.632849,41.935518]},"n3171":{"id":"n3171","loc":[-85.632376,41.93574]},"n3172":{"id":"n3172","loc":[-85.631517,41.935897]},"n3173":{"id":"n3173","loc":[-85.630433,41.936124]},"n3174":{"id":"n3174","loc":[-85.630207,41.936427]},"n3175":{"id":"n3175","loc":[-85.630346,41.936795]},"n3176":{"id":"n3176","loc":[-85.62996,41.936974]},"n3177":{"id":"n3177","loc":[-85.629916,41.937488]},"n3178":{"id":"n3178","loc":[-85.629946,41.937802]},"n3179":{"id":"n3179","loc":[-85.629977,41.937905]},"n318":{"id":"n318","loc":[-85.634401,41.94328]},"n3180":{"id":"n3180","loc":[-85.63016,41.937909]},"n3181":{"id":"n3181","loc":[-85.630804,41.937791]},"n3182":{"id":"n3182","loc":[-85.631688,41.937808]},"n3183":{"id":"n3183","loc":[-85.631685,41.938008]},"n3184":{"id":"n3184","loc":[-85.631845,41.938116]},"n3185":{"id":"n3185","loc":[-85.63207,41.938181]},"n3186":{"id":"n3186","loc":[-85.632143,41.938371]},"n3187":{"id":"n3187","loc":[-85.632056,41.938435]},"n3188":{"id":"n3188","loc":[-85.631787,41.938457]},"n3189":{"id":"n3189","loc":[-85.631657,41.938728]},"n319":{"id":"n319","loc":[-85.634345,41.943299]},"n3190":{"id":"n3190","loc":[-85.631595,41.93775]},"n3191":{"id":"n3191","loc":[-85.630264,41.937839]},"n3192":{"id":"n3192","loc":[-85.628591,41.948536]},"n3193":{"id":"n3193","loc":[-85.63205,41.951181]},"n3194":{"id":"n3194","loc":[-85.632034,41.949909]},"n3195":{"id":"n3195","loc":[-85.630841,41.951191]},"n3196":{"id":"n3196","loc":[-85.632083,41.9537]},"n3197":{"id":"n3197","loc":[-85.630929,41.959037]},"n3198":{"id":"n3198","loc":[-85.632151,41.959028]},"n3199":{"id":"n3199","loc":[-85.630911,41.957428]},"n32":{"id":"n32","loc":[-85.638273,41.944246]},"n320":{"id":"n320","loc":[-85.634287,41.943326]},"n3200":{"id":"n3200","loc":[-85.63213,41.957427]},"n3201":{"id":"n3201","loc":[-85.632072,41.952447]},"n3202":{"id":"n3202","loc":[-85.632095,41.954677]},"n3203":{"id":"n3203","loc":[-85.632111,41.955911]},"n3204":{"id":"n3204","loc":[-85.630855,41.952457]},"n3205":{"id":"n3205","loc":[-85.630869,41.953709]},"n3206":{"id":"n3206","loc":[-85.63088,41.954682]},"n3207":{"id":"n3207","loc":[-85.630894,41.955913]},"n3208":{"id":"n3208","loc":[-85.633214,41.948619]},"n3209":{"id":"n3209","loc":[-85.633253,41.951171]},"n321":{"id":"n321","loc":[-85.634233,41.943354]},"n3210":{"id":"n3210","loc":[-85.633234,41.949901]},"n3211":{"id":"n3211","loc":[-85.633922,41.948616]},"n3212":{"id":"n3212","loc":[-85.625188,41.947832]},"n3213":{"id":"n3213","loc":[-85.625208,41.947775]},"n3214":{"id":"n3214","loc":[-85.625229,41.94776]},"n3215":{"id":"n3215","loc":[-85.625201,41.947749]},"n3216":{"id":"n3216","loc":[-85.625168,41.947707]},"n3217":{"id":"n3217","loc":[-85.625171,41.947609]},"n3218":{"id":"n3218","loc":[-85.625213,41.947564]},"n3219":{"id":"n3219","loc":[-85.62529,41.94756]},"n322":{"id":"n322","loc":[-85.634099,41.943429]},"n3220":{"id":"n3220","loc":[-85.625303,41.947533]},"n3221":{"id":"n3221","loc":[-85.625344,41.947482]},"n3222":{"id":"n3222","loc":[-85.625442,41.947468]},"n3223":{"id":"n3223","loc":[-85.62565,41.947494]},"n3224":{"id":"n3224","loc":[-85.625726,41.947613]},"n3225":{"id":"n3225","loc":[-85.625703,41.947728]},"n3226":{"id":"n3226","loc":[-85.625534,41.94781]},"n3227":{"id":"n3227","loc":[-85.625391,41.947822]},"n3228":{"id":"n3228","loc":[-85.625304,41.947859]},"n3229":{"id":"n3229","loc":[-85.625203,41.947885]},"n323":{"id":"n323","loc":[-85.633958,41.943507],"tags":{"highway":"crossing"}},"n3230":{"id":"n3230","loc":[-85.624691,41.948659]},"n3231":{"id":"n3231","loc":[-85.624328,41.948661]},"n3232":{"id":"n3232","loc":[-85.624331,41.949046]},"n3233":{"id":"n3233","loc":[-85.624694,41.949045]},"n3234":{"id":"n3234","loc":[-85.623623,41.949606]},"n3235":{"id":"n3235","loc":[-85.623623,41.9497]},"n3236":{"id":"n3236","loc":[-85.623357,41.9497]},"n3237":{"id":"n3237","loc":[-85.623357,41.949614]},"n3238":{"id":"n3238","loc":[-85.623974,41.949429]},"n3239":{"id":"n3239","loc":[-85.623974,41.949605]},"n324":{"id":"n324","loc":[-85.633698,41.943651],"tags":{"railway":"crossing"}},"n3240":{"id":"n3240","loc":[-85.624501,41.951226]},"n3241":{"id":"n3241","loc":[-85.624501,41.951123]},"n3242":{"id":"n3242","loc":[-85.624319,41.951123]},"n3243":{"id":"n3243","loc":[-85.624319,41.951226]},"n3244":{"id":"n3244","loc":[-85.624121,41.950866]},"n3245":{"id":"n3245","loc":[-85.624115,41.950525]},"n3246":{"id":"n3246","loc":[-85.624315,41.950523]},"n3247":{"id":"n3247","loc":[-85.62432,41.950865]},"n3248":{"id":"n3248","loc":[-85.624393,41.950867]},"n3249":{"id":"n3249","loc":[-85.62439,41.950596]},"n325":{"id":"n325","loc":[-85.633508,41.943757]},"n3250":{"id":"n3250","loc":[-85.624673,41.950594]},"n3251":{"id":"n3251","loc":[-85.624675,41.95082]},"n3252":{"id":"n3252","loc":[-85.62451,41.950821]},"n3253":{"id":"n3253","loc":[-85.62451,41.950866]},"n3254":{"id":"n3254","loc":[-85.624101,41.949346]},"n3255":{"id":"n3255","loc":[-85.624244,41.949346]},"n3256":{"id":"n3256","loc":[-85.624244,41.949368]},"n3257":{"id":"n3257","loc":[-85.62434,41.949368]},"n3258":{"id":"n3258","loc":[-85.624342,41.949351]},"n3259":{"id":"n3259","loc":[-85.624725,41.949348]},"n326":{"id":"n326","loc":[-85.634839,41.942974]},"n3260":{"id":"n3260","loc":[-85.624755,41.950495]},"n3261":{"id":"n3261","loc":[-85.624121,41.950502]},"n3262":{"id":"n3262","loc":[-85.625453,41.950163]},"n3263":{"id":"n3263","loc":[-85.625454,41.949976]},"n3264":{"id":"n3264","loc":[-85.625549,41.949977]},"n3265":{"id":"n3265","loc":[-85.62555,41.949833]},"n3266":{"id":"n3266","loc":[-85.625577,41.949833]},"n3267":{"id":"n3267","loc":[-85.625578,41.949656]},"n3268":{"id":"n3268","loc":[-85.625195,41.949655]},"n3269":{"id":"n3269","loc":[-85.625192,41.950162]},"n327":{"id":"n327","loc":[-85.634657,41.943028]},"n3270":{"id":"n3270","loc":[-85.622992,41.949614]},"n3271":{"id":"n3271","loc":[-85.622991,41.949431]},"n3272":{"id":"n3272","loc":[-85.620103,41.951]},"n3273":{"id":"n3273","loc":[-85.605644,41.947468]},"n3274":{"id":"n3274","loc":[-85.617421,41.947457]},"n3275":{"id":"n3275","loc":[-85.620078,41.947444]},"n3276":{"id":"n3276","loc":[-85.620087,41.94924]},"n3277":{"id":"n3277","loc":[-85.62156,41.948333]},"n3278":{"id":"n3278","loc":[-85.620106,41.950132]},"n3279":{"id":"n3279","loc":[-85.637412,41.951136]},"n328":{"id":"n328","loc":[-85.634222,41.943152]},"n3280":{"id":"n3280","loc":[-85.635429,41.948608]},"n3281":{"id":"n3281","loc":[-85.635047,41.947788]},"n3282":{"id":"n3282","loc":[-85.635048,41.947796]},"n3283":{"id":"n3283","loc":[-85.635002,41.947797]},"n3284":{"id":"n3284","loc":[-85.635002,41.947788]},"n3285":{"id":"n3285","loc":[-85.634914,41.94779]},"n3286":{"id":"n3286","loc":[-85.634913,41.947753]},"n3287":{"id":"n3287","loc":[-85.63494,41.947753]},"n3288":{"id":"n3288","loc":[-85.634938,41.947708]},"n3289":{"id":"n3289","loc":[-85.635124,41.947705]},"n329":{"id":"n329","loc":[-85.634099,41.943202]},"n3290":{"id":"n3290","loc":[-85.635126,41.947787]},"n3291":{"id":"n3291","loc":[-85.634972,41.947599]},"n3292":{"id":"n3292","loc":[-85.634921,41.9476]},"n3293":{"id":"n3293","loc":[-85.63485,41.947546]},"n3294":{"id":"n3294","loc":[-85.63485,41.947508]},"n3295":{"id":"n3295","loc":[-85.634924,41.947457]},"n3296":{"id":"n3296","loc":[-85.634967,41.947456]},"n3297":{"id":"n3297","loc":[-85.635041,41.947512]},"n3298":{"id":"n3298","loc":[-85.635041,41.947542]},"n3299":{"id":"n3299","loc":[-85.634244,41.947839]},"n33":{"id":"n33","loc":[-85.638257,41.944188]},"n330":{"id":"n330","loc":[-85.634093,41.943138]},"n3300":{"id":"n3300","loc":[-85.634243,41.947793]},"n3301":{"id":"n3301","loc":[-85.634244,41.947686]},"n3302":{"id":"n3302","loc":[-85.634243,41.947657]},"n3303":{"id":"n3303","loc":[-85.634462,41.947653]},"n3304":{"id":"n3304","loc":[-85.634468,41.947835]},"n3305":{"id":"n3305","loc":[-85.634416,41.948006]},"n3306":{"id":"n3306","loc":[-85.634415,41.947898]},"n3307":{"id":"n3307","loc":[-85.634275,41.947899]},"n3308":{"id":"n3308","loc":[-85.634275,41.947927]},"n3309":{"id":"n3309","loc":[-85.63425,41.947927]},"n331":{"id":"n331","loc":[-85.633938,41.943291]},"n3310":{"id":"n3310","loc":[-85.63425,41.947976]},"n3311":{"id":"n3311","loc":[-85.634274,41.947976]},"n3312":{"id":"n3312","loc":[-85.634275,41.948007]},"n3313":{"id":"n3313","loc":[-85.634342,41.947635]},"n3314":{"id":"n3314","loc":[-85.634339,41.947497]},"n3315":{"id":"n3315","loc":[-85.634313,41.94748]},"n3316":{"id":"n3316","loc":[-85.634287,41.947474]},"n3317":{"id":"n3317","loc":[-85.63498,41.94815]},"n3318":{"id":"n3318","loc":[-85.634891,41.94815]},"n3319":{"id":"n3319","loc":[-85.634892,41.948169]},"n332":{"id":"n332","loc":[-85.633535,41.943511],"tags":{"railway":"crossing"}},"n3320":{"id":"n3320","loc":[-85.634852,41.948169]},"n3321":{"id":"n3321","loc":[-85.634853,41.948268]},"n3322":{"id":"n3322","loc":[-85.634832,41.948268]},"n3323":{"id":"n3323","loc":[-85.634832,41.948296]},"n3324":{"id":"n3324","loc":[-85.634965,41.948295]},"n3325":{"id":"n3325","loc":[-85.634966,41.948321]},"n3326":{"id":"n3326","loc":[-85.634999,41.948321]},"n3327":{"id":"n3327","loc":[-85.634999,41.948295]},"n3328":{"id":"n3328","loc":[-85.635175,41.948293]},"n3329":{"id":"n3329","loc":[-85.635175,41.948262]},"n333":{"id":"n333","loc":[-85.63339,41.943596]},"n3330":{"id":"n3330","loc":[-85.635159,41.948262]},"n3331":{"id":"n3331","loc":[-85.635158,41.948152]},"n3332":{"id":"n3332","loc":[-85.635067,41.948152]},"n3333":{"id":"n3333","loc":[-85.635065,41.947966]},"n3334":{"id":"n3334","loc":[-85.634979,41.947966]},"n3335":{"id":"n3335","loc":[-85.634307,41.948326]},"n3336":{"id":"n3336","loc":[-85.634305,41.948298]},"n3337":{"id":"n3337","loc":[-85.634331,41.948055]},"n3338":{"id":"n3338","loc":[-85.634331,41.948046]},"n3339":{"id":"n3339","loc":[-85.634435,41.948047]},"n334":{"id":"n334","loc":[-85.632842,41.943895]},"n3340":{"id":"n3340","loc":[-85.634434,41.948375]},"n3341":{"id":"n3341","loc":[-85.634463,41.948373]},"n3342":{"id":"n3342","loc":[-85.634464,41.948456]},"n3343":{"id":"n3343","loc":[-85.63443,41.948457]},"n3344":{"id":"n3344","loc":[-85.634432,41.948505]},"n3345":{"id":"n3345","loc":[-85.637386,41.94906]},"n3346":{"id":"n3346","loc":[-85.637113,41.9486]},"n3347":{"id":"n3347","loc":[-85.635448,41.949424]},"n335":{"id":"n335","loc":[-85.633856,41.943315]},"n3352":{"id":"n3352","loc":[-85.635457,41.949787]},"n3353":{"id":"n3353","loc":[-85.635459,41.949886]},"n336":{"id":"n336","loc":[-85.633697,41.943405]},"n337":{"id":"n337","loc":[-85.63347,41.943181]},"n3372":{"id":"n3372","loc":[-85.634423,41.950964]},"n3373":{"id":"n3373","loc":[-85.634424,41.95074]},"n3374":{"id":"n3374","loc":[-85.634394,41.950284]},"n3375":{"id":"n3375","loc":[-85.634398,41.950626]},"n3376":{"id":"n3376","loc":[-85.63452,41.951063]},"n3377":{"id":"n3377","loc":[-85.634511,41.949977]},"n3378":{"id":"n3378","loc":[-85.637409,41.949873]},"n3379":{"id":"n3379","loc":[-85.634824,41.94996]},"n338":{"id":"n338","loc":[-85.633597,41.943109]},"n3380":{"id":"n3380","loc":[-85.635437,41.949954]},"n3381":{"id":"n3381","loc":[-85.634844,41.951064]},"n3382":{"id":"n3382","loc":[-85.635458,41.951058]},"n3383":{"id":"n3383","loc":[-85.633921,41.947333]},"n3384":{"id":"n3384","loc":[-85.634208,41.947793]},"n3385":{"id":"n3385","loc":[-85.634204,41.947687]},"n3386":{"id":"n3386","loc":[-85.63424,41.947475]},"n3387":{"id":"n3387","loc":[-85.63424,41.947635]},"n3388":{"id":"n3388","loc":[-85.634089,41.948328]},"n3389":{"id":"n3389","loc":[-85.63424,41.948299]},"n339":{"id":"n339","loc":[-85.633673,41.943184]},"n3390":{"id":"n3390","loc":[-85.634239,41.948212]},"n3391":{"id":"n3391","loc":[-85.634086,41.948214]},"n3392":{"id":"n3392","loc":[-85.63408,41.948056]},"n3393":{"id":"n3393","loc":[-85.634093,41.948506]},"n3394":{"id":"n3394","loc":[-85.64344,41.941866]},"n3395":{"id":"n3395","loc":[-85.63378,41.95099]},"n3396":{"id":"n3396","loc":[-85.633779,41.950967]},"n3397":{"id":"n3397","loc":[-85.63375,41.950746]},"n3398":{"id":"n3398","loc":[-85.63375,41.950697]},"n3399":{"id":"n3399","loc":[-85.633903,41.950696]},"n34":{"id":"n34","loc":[-85.638176,41.944312]},"n340":{"id":"n340","loc":[-85.633714,41.94316]},"n3400":{"id":"n3400","loc":[-85.633901,41.950436]},"n3401":{"id":"n3401","loc":[-85.633492,41.950438]},"n3402":{"id":"n3402","loc":[-85.633494,41.950756]},"n3403":{"id":"n3403","loc":[-85.633454,41.950756]},"n3404":{"id":"n3404","loc":[-85.633456,41.950992]},"n3405":{"id":"n3405","loc":[-85.633994,41.950284]},"n3406":{"id":"n3406","loc":[-85.633998,41.950628]},"n3407":{"id":"n3407","loc":[-85.633364,41.951068]},"n3408":{"id":"n3408","loc":[-85.633356,41.949982]},"n3409":{"id":"n3409","loc":[-85.643327,41.941903]},"n341":{"id":"n341","loc":[-85.633811,41.943256]},"n3410":{"id":"n3410","loc":[-85.633292,41.953691]},"n3411":{"id":"n3411","loc":[-85.637432,41.952399]},"n3412":{"id":"n3412","loc":[-85.633349,41.957422]},"n3413":{"id":"n3413","loc":[-85.633326,41.955909]},"n3414":{"id":"n3414","loc":[-85.633307,41.954673]},"n3415":{"id":"n3415","loc":[-85.633273,41.952436]},"n3416":{"id":"n3416","loc":[-85.633361,41.95823],"tags":{"highway":"turning_circle"}},"n3417":{"id":"n3417","loc":[-85.619899,41.945527]},"n3418":{"id":"n3418","loc":[-85.643422,41.941946]},"n3419":{"id":"n3419","loc":[-85.643505,41.942033]},"n342":{"id":"n342","loc":[-85.633801,41.943261]},"n3420":{"id":"n3420","loc":[-85.620088,41.945571]},"n3421":{"id":"n3421","loc":[-85.620051,41.945505]},"n3422":{"id":"n3422","loc":[-85.62001,41.94541]},"n3423":{"id":"n3423","loc":[-85.620982,41.944742]},"n3424":{"id":"n3424","loc":[-85.621305,41.944782]},"n3425":{"id":"n3425","loc":[-85.621174,41.944819]},"n3426":{"id":"n3426","loc":[-85.621029,41.944871]},"n3427":{"id":"n3427","loc":[-85.620741,41.945011]},"n3428":{"id":"n3428","loc":[-85.620616,41.945085]},"n3429":{"id":"n3429","loc":[-85.620506,41.945172]},"n343":{"id":"n343","loc":[-85.63374,41.943514]},"n3430":{"id":"n3430","loc":[-85.620394,41.945273]},"n3431":{"id":"n3431","loc":[-85.620316,41.94536]},"n3432":{"id":"n3432","loc":[-85.620257,41.945452]},"n3433":{"id":"n3433","loc":[-85.620212,41.945535]},"n3434":{"id":"n3434","loc":[-85.620101,41.945811]},"n3435":{"id":"n3435","loc":[-85.620081,41.945937]},"n3436":{"id":"n3436","loc":[-85.619899,41.943718]},"n3437":{"id":"n3437","loc":[-85.619969,41.943211]},"n3438":{"id":"n3438","loc":[-85.619894,41.943292]},"n3439":{"id":"n3439","loc":[-85.620047,41.944738]},"n344":{"id":"n344","loc":[-85.633665,41.943441]},"n3440":{"id":"n3440","loc":[-85.620226,41.946088]},"n3441":{"id":"n3441","loc":[-85.620225,41.945864]},"n3442":{"id":"n3442","loc":[-85.620518,41.945863]},"n3443":{"id":"n3443","loc":[-85.620519,41.945944]},"n3444":{"id":"n3444","loc":[-85.620388,41.945944]},"n3445":{"id":"n3445","loc":[-85.620389,41.946088]},"n3446":{"id":"n3446","loc":[-85.618405,41.946566]},"n3447":{"id":"n3447","loc":[-85.619156,41.946562]},"n3448":{"id":"n3448","loc":[-85.619154,41.946319]},"n3449":{"id":"n3449","loc":[-85.618736,41.946322]},"n345":{"id":"n345","loc":[-85.633162,41.942947]},"n3450":{"id":"n3450","loc":[-85.618733,41.94612]},"n3451":{"id":"n3451","loc":[-85.619317,41.946116]},"n3452":{"id":"n3452","loc":[-85.619316,41.946023]},"n3453":{"id":"n3453","loc":[-85.619622,41.946021]},"n3454":{"id":"n3454","loc":[-85.619624,41.946171]},"n3455":{"id":"n3455","loc":[-85.61977,41.94617]},"n3456":{"id":"n3456","loc":[-85.619769,41.94602]},"n3457":{"id":"n3457","loc":[-85.619732,41.94602]},"n3458":{"id":"n3458","loc":[-85.619731,41.945856]},"n3459":{"id":"n3459","loc":[-85.619617,41.945857]},"n346":{"id":"n346","loc":[-85.633598,41.943083]},"n3460":{"id":"n3460","loc":[-85.619616,41.945776]},"n3461":{"id":"n3461","loc":[-85.619447,41.945777]},"n3462":{"id":"n3462","loc":[-85.619415,41.945778]},"n3463":{"id":"n3463","loc":[-85.618378,41.945788]},"n3464":{"id":"n3464","loc":[-85.618384,41.946132]},"n3465":{"id":"n3465","loc":[-85.618503,41.94613]},"n3466":{"id":"n3466","loc":[-85.618506,41.946319]},"n3467":{"id":"n3467","loc":[-85.6184,41.94632]},"n3468":{"id":"n3468","loc":[-85.618248,41.946416]},"n3469":{"id":"n3469","loc":[-85.618247,41.946319]},"n347":{"id":"n347","loc":[-85.63343,41.943179]},"n3470":{"id":"n3470","loc":[-85.618039,41.946321]},"n3471":{"id":"n3471","loc":[-85.61804,41.946418]},"n3472":{"id":"n3472","loc":[-85.620118,41.951895]},"n3473":{"id":"n3473","loc":[-85.617075,41.95469]},"n3474":{"id":"n3474","loc":[-85.620107,41.952113]},"n3475":{"id":"n3475","loc":[-85.620091,41.95232]},"n3476":{"id":"n3476","loc":[-85.620047,41.952505]},"n3477":{"id":"n3477","loc":[-85.61998,41.952715]},"n3478":{"id":"n3478","loc":[-85.619861,41.952986]},"n3479":{"id":"n3479","loc":[-85.619622,41.953365]},"n348":{"id":"n348","loc":[-85.633669,41.94341]},"n3480":{"id":"n3480","loc":[-85.619441,41.953567]},"n3481":{"id":"n3481","loc":[-85.619259,41.953741]},"n3482":{"id":"n3482","loc":[-85.618835,41.954056]},"n3483":{"id":"n3483","loc":[-85.618602,41.954194]},"n3484":{"id":"n3484","loc":[-85.618305,41.954347]},"n3485":{"id":"n3485","loc":[-85.618006,41.954466]},"n3486":{"id":"n3486","loc":[-85.617611,41.954587]},"n3487":{"id":"n3487","loc":[-85.615094,41.943412]},"n3488":{"id":"n3488","loc":[-85.619337,41.943025]},"n3489":{"id":"n3489","loc":[-85.610477,41.945527]},"n349":{"id":"n349","loc":[-85.633566,41.943466]},"n3490":{"id":"n3490","loc":[-85.610477,41.943718]},"n3491":{"id":"n3491","loc":[-85.619804,41.942976]},"n3492":{"id":"n3492","loc":[-85.61921,41.942672]},"n3493":{"id":"n3493","loc":[-85.619862,41.942836]},"n3494":{"id":"n3494","loc":[-85.616326,41.942769]},"n3495":{"id":"n3495","loc":[-85.617953,41.942917]},"n3496":{"id":"n3496","loc":[-85.61972,41.942728]},"n3497":{"id":"n3497","loc":[-85.61944,41.942784]},"n3498":{"id":"n3498","loc":[-85.615323,41.942841]},"n3499":{"id":"n3499","loc":[-85.612923,41.943718]},"n35":{"id":"n35","loc":[-85.637928,41.944249]},"n350":{"id":"n350","loc":[-85.633031,41.942986]},"n3500":{"id":"n3500","loc":[-85.61958,41.942756]},"n3501":{"id":"n3501","loc":[-85.619643,41.942647],"tags":{"leisure":"fishing"}},"n3502":{"id":"n3502","loc":[-85.619935,41.942962]},"n3503":{"id":"n3503","loc":[-85.629677,41.954687]},"n3504":{"id":"n3504","loc":[-85.629083,41.953722]},"n3505":{"id":"n3505","loc":[-85.621907,41.952067]},"n3506":{"id":"n3506","loc":[-85.621788,41.952058]},"n3507":{"id":"n3507","loc":[-85.629665,41.953718]},"n3508":{"id":"n3508","loc":[-85.624454,41.954707]},"n3509":{"id":"n3509","loc":[-85.634609,41.954585]},"n351":{"id":"n351","loc":[-85.633238,41.94283]},"n3510":{"id":"n3510","loc":[-85.634595,41.953772]},"n3511":{"id":"n3511","loc":[-85.633425,41.953783]},"n3512":{"id":"n3512","loc":[-85.633439,41.954596]},"n3517":{"id":"n3517","loc":[-85.621789,41.952179]},"n3518":{"id":"n3518","loc":[-85.624105,41.954704]},"n3519":{"id":"n3519","loc":[-85.623306,41.954542]},"n352":{"id":"n352","loc":[-85.633173,41.943556]},"n3520":{"id":"n3520","loc":[-85.623123,41.954502]},"n3521":{"id":"n3521","loc":[-85.622965,41.954473]},"n3522":{"id":"n3522","loc":[-85.622822,41.954455]},"n3523":{"id":"n3523","loc":[-85.62269,41.954448]},"n3524":{"id":"n3524","loc":[-85.622388,41.954467]},"n3525":{"id":"n3525","loc":[-85.62403,41.954895]},"n3526":{"id":"n3526","loc":[-85.623579,41.954855]},"n3527":{"id":"n3527","loc":[-85.623836,41.954951]},"n3528":{"id":"n3528","loc":[-85.622473,41.954592]},"n3529":{"id":"n3529","loc":[-85.622753,41.95458]},"n353":{"id":"n353","loc":[-85.633127,41.943552]},"n3530":{"id":"n3530","loc":[-85.62404,41.955078]},"n3531":{"id":"n3531","loc":[-85.624126,41.954999]},"n3532":{"id":"n3532","loc":[-85.623171,41.954687]},"n3533":{"id":"n3533","loc":[-85.624276,41.955206]},"n3534":{"id":"n3534","loc":[-85.62491,41.952801]},"n3535":{"id":"n3535","loc":[-85.625186,41.952756]},"n3536":{"id":"n3536","loc":[-85.625552,41.952792]},"n3537":{"id":"n3537","loc":[-85.626001,41.952948]},"n3538":{"id":"n3538","loc":[-85.626528,41.952984]},"n3539":{"id":"n3539","loc":[-85.626942,41.952886]},"n354":{"id":"n354","loc":[-85.632745,41.943222]},"n3540":{"id":"n3540","loc":[-85.627092,41.952685]},"n3541":{"id":"n3541","loc":[-85.627212,41.95244]},"n3542":{"id":"n3542","loc":[-85.627158,41.952226]},"n3543":{"id":"n3543","loc":[-85.627002,41.951972]},"n3544":{"id":"n3544","loc":[-85.626822,41.951838]},"n3545":{"id":"n3545","loc":[-85.626528,41.951807]},"n3546":{"id":"n3546","loc":[-85.625653,41.951852]},"n3547":{"id":"n3547","loc":[-85.625348,41.951834]},"n3548":{"id":"n3548","loc":[-85.625114,41.951767]},"n3549":{"id":"n3549","loc":[-85.620627,41.954682]},"n355":{"id":"n355","loc":[-85.632756,41.943199]},"n3550":{"id":"n3550","loc":[-85.622758,41.951884]},"n3551":{"id":"n3551","loc":[-85.618135,41.954734]},"n3552":{"id":"n3552","loc":[-85.620229,41.95472]},"n3553":{"id":"n3553","loc":[-85.624491,41.955573]},"n3554":{"id":"n3554","loc":[-85.621792,41.958314]},"n3555":{"id":"n3555","loc":[-85.623395,41.960001]},"n3556":{"id":"n3556","loc":[-85.620461,41.956212]},"n3557":{"id":"n3557","loc":[-85.62109,41.956766]},"n3558":{"id":"n3558","loc":[-85.620246,41.956224]},"n3559":{"id":"n3559","loc":[-85.625017,41.956068]},"n356":{"id":"n356","loc":[-85.632855,41.943147]},"n3560":{"id":"n3560","loc":[-85.622795,41.959702]},"n3561":{"id":"n3561","loc":[-85.621573,41.958457]},"n3562":{"id":"n3562","loc":[-85.619631,41.9573]},"n3563":{"id":"n3563","loc":[-85.62095,41.956311]},"n3564":{"id":"n3564","loc":[-85.619694,41.957408]},"n3565":{"id":"n3565","loc":[-85.621079,41.957751]},"n3566":{"id":"n3566","loc":[-85.622426,41.961142]},"n3567":{"id":"n3567","loc":[-85.623251,41.960484]},"n3568":{"id":"n3568","loc":[-85.619084,41.956291]},"n3569":{"id":"n3569","loc":[-85.622227,41.959303]},"n357":{"id":"n357","loc":[-85.632888,41.94315]},"n3570":{"id":"n3570","loc":[-85.620976,41.959104]},"n3571":{"id":"n3571","loc":[-85.621208,41.95653]},"n3572":{"id":"n3572","loc":[-85.623531,41.95951]},"n3573":{"id":"n3573","loc":[-85.623556,41.957935]},"n3574":{"id":"n3574","loc":[-85.623037,41.95746]},"n3575":{"id":"n3575","loc":[-85.621175,41.956427]},"n3576":{"id":"n3576","loc":[-85.622651,41.960109]},"n3577":{"id":"n3577","loc":[-85.621803,41.960747]},"n3578":{"id":"n3578","loc":[-85.620791,41.961874]},"n3579":{"id":"n3579","loc":[-85.625295,41.956786]},"n358":{"id":"n358","loc":[-85.633232,41.943547]},"n3580":{"id":"n3580","loc":[-85.619662,41.956894]},"n3581":{"id":"n3581","loc":[-85.622442,41.958708]},"n3582":{"id":"n3582","loc":[-85.621744,41.955864]},"n3583":{"id":"n3583","loc":[-85.621336,41.959212]},"n3584":{"id":"n3584","loc":[-85.622801,41.957304]},"n3585":{"id":"n3585","loc":[-85.619973,41.957433]},"n3586":{"id":"n3586","loc":[-85.619556,41.955717]},"n3587":{"id":"n3587","loc":[-85.622978,41.958601]},"n3588":{"id":"n3588","loc":[-85.625396,41.956264]},"n3589":{"id":"n3589","loc":[-85.623525,41.958034]},"n359":{"id":"n359","loc":[-85.633302,41.94351]},"n3590":{"id":"n3590","loc":[-85.623299,41.959631]},"n3591":{"id":"n3591","loc":[-85.622678,41.959873]},"n3592":{"id":"n3592","loc":[-85.625553,41.956179]},"n3593":{"id":"n3593","loc":[-85.623557,41.959231]},"n3594":{"id":"n3594","loc":[-85.622843,41.957373]},"n3595":{"id":"n3595","loc":[-85.619378,41.955677]},"n3596":{"id":"n3596","loc":[-85.620092,41.955425]},"n3597":{"id":"n3597","loc":[-85.622666,41.96044]},"n3598":{"id":"n3598","loc":[-85.621996,41.960256]},"n3599":{"id":"n3599","loc":[-85.623273,41.959997]},"n36":{"id":"n36","loc":[-85.637894,41.945551]},"n360":{"id":"n360","loc":[-85.633442,41.943794],"tags":{"highway":"crossing"}},"n3600":{"id":"n3600","loc":[-85.62477,41.95689]},"n3601":{"id":"n3601","loc":[-85.621641,41.955015]},"n3602":{"id":"n3602","loc":[-85.622495,41.960392]},"n3603":{"id":"n3603","loc":[-85.61918,41.955565]},"n3604":{"id":"n3604","loc":[-85.620017,41.955505]},"n3605":{"id":"n3605","loc":[-85.621739,41.956315]},"n3606":{"id":"n3606","loc":[-85.622957,41.959837]},"n3607":{"id":"n3607","loc":[-85.620912,41.960919]},"n3608":{"id":"n3608","loc":[-85.625231,41.956235]},"n3609":{"id":"n3609","loc":[-85.620976,41.961868]},"n361":{"id":"n361","loc":[-85.633381,41.94383]},"n3610":{"id":"n3610","loc":[-85.620956,41.958908]},"n3611":{"id":"n3611","loc":[-85.619035,41.956139]},"n3612":{"id":"n3612","loc":[-85.623643,41.958669]},"n3613":{"id":"n3613","loc":[-85.61949,41.956539]},"n3614":{"id":"n3614","loc":[-85.621927,41.958242]},"n3615":{"id":"n3615","loc":[-85.620826,41.955721]},"n3616":{"id":"n3616","loc":[-85.621202,41.961321]},"n3617":{"id":"n3617","loc":[-85.624877,41.95594]},"n3618":{"id":"n3618","loc":[-85.62065,41.958369]},"n3619":{"id":"n3619","loc":[-85.621524,41.956279]},"n362":{"id":"n362","loc":[-85.632977,41.944053]},"n3620":{"id":"n3620","loc":[-85.624662,41.955932]},"n3621":{"id":"n3621","loc":[-85.623048,41.958509]},"n3622":{"id":"n3622","loc":[-85.62111,41.95754]},"n3623":{"id":"n3623","loc":[-85.621508,41.954847]},"n3624":{"id":"n3624","loc":[-85.620655,41.958601]},"n3625":{"id":"n3625","loc":[-85.62154,41.954971]},"n3626":{"id":"n3626","loc":[-85.621691,41.955521]},"n3627":{"id":"n3627","loc":[-85.62154,41.954739]},"n3628":{"id":"n3628","loc":[-85.621996,41.959913]},"n3629":{"id":"n3629","loc":[-85.622286,41.960699]},"n363":{"id":"n363","loc":[-85.632915,41.943981],"tags":{"crossing":"zebra","highway":"crossing"}},"n3630":{"id":"n3630","loc":[-85.622844,41.9572]},"n3631":{"id":"n3631","loc":[-85.620252,41.955446]},"n3632":{"id":"n3632","loc":[-85.623434,41.957528]},"n3633":{"id":"n3633","loc":[-85.623429,41.956858]},"n3634":{"id":"n3634","loc":[-85.622957,41.957137]},"n3635":{"id":"n3635","loc":[-85.622554,41.959027]},"n3636":{"id":"n3636","loc":[-85.623289,41.958314]},"n3637":{"id":"n3637","loc":[-85.622977,41.960855]},"n3638":{"id":"n3638","loc":[-85.624008,41.956953]},"n3639":{"id":"n3639","loc":[-85.621278,41.960855]},"n364":{"id":"n364","loc":[-85.632724,41.943969],"tags":{"crossing":"zebra","highway":"crossing"}},"n3640":{"id":"n3640","loc":[-85.623128,41.956993]},"n3641":{"id":"n3641","loc":[-85.622452,41.959183]},"n3642":{"id":"n3642","loc":[-85.621095,41.961082]},"n3643":{"id":"n3643","loc":[-85.622011,41.960544]},"n3644":{"id":"n3644","loc":[-85.621637,41.955385]},"n3645":{"id":"n3645","loc":[-85.620999,41.959271]},"n3646":{"id":"n3646","loc":[-85.620044,41.956347]},"n3647":{"id":"n3647","loc":[-85.621936,41.959682]},"n3648":{"id":"n3648","loc":[-85.623761,41.95685]},"n3649":{"id":"n3649","loc":[-85.621239,41.959343]},"n365":{"id":"n365","loc":[-85.632621,41.944034]},"n3650":{"id":"n3650","loc":[-85.621073,41.956012]},"n3651":{"id":"n3651","loc":[-85.621271,41.956184]},"n3652":{"id":"n3652","loc":[-85.623444,41.95778]},"n3653":{"id":"n3653","loc":[-85.62125,41.96186]},"n3654":{"id":"n3654","loc":[-85.62169,41.961059]},"n3655":{"id":"n3655","loc":[-85.620012,41.955637]},"n3656":{"id":"n3656","loc":[-85.621058,41.9573]},"n3657":{"id":"n3657","loc":[-85.621138,41.957663]},"n3658":{"id":"n3658","loc":[-85.620773,41.957895]},"n3659":{"id":"n3659","loc":[-85.62007,41.957157]},"n366":{"id":"n366","loc":[-85.632684,41.944109],"tags":{"crossing":"zebra","highway":"crossing"}},"n3660":{"id":"n3660","loc":[-85.624534,41.955844]},"n3661":{"id":"n3661","loc":[-85.621932,41.960807]},"n3662":{"id":"n3662","loc":[-85.623358,41.958138]},"n3663":{"id":"n3663","loc":[-85.620456,41.955514]},"n3664":{"id":"n3664","loc":[-85.623504,41.957607]},"n3665":{"id":"n3665","loc":[-85.621444,41.960751]},"n3666":{"id":"n3666","loc":[-85.623492,41.960213]},"n3667":{"id":"n3667","loc":[-85.621669,41.954655]},"n3668":{"id":"n3668","loc":[-85.623106,41.958685]},"n3669":{"id":"n3669","loc":[-85.620922,41.957867]},"n367":{"id":"n367","loc":[-85.632738,41.944172]},"n3670":{"id":"n3670","loc":[-85.620092,41.957296]},"n3671":{"id":"n3671","loc":[-85.621669,41.955222]},"n3672":{"id":"n3672","loc":[-85.621614,41.960967]},"n3673":{"id":"n3673","loc":[-85.621691,41.955732]},"n3674":{"id":"n3674","loc":[-85.619207,41.956419]},"n3675":{"id":"n3675","loc":[-85.621116,41.956603]},"n3676":{"id":"n3676","loc":[-85.623311,41.956929]},"n3677":{"id":"n3677","loc":[-85.625671,41.956499]},"n3678":{"id":"n3678","loc":[-85.623525,41.956738]},"n3679":{"id":"n3679","loc":[-85.625381,41.956634]},"n368":{"id":"n368","loc":[-85.63287,41.944135],"tags":{"crossing":"zebra","highway":"crossing"}},"n3680":{"id":"n3680","loc":[-85.620096,41.95677]},"n3681":{"id":"n3681","loc":[-85.623803,41.958745]},"n3682":{"id":"n3682","loc":[-85.623498,41.958457]},"n3683":{"id":"n3683","loc":[-85.624223,41.957009]},"n3684":{"id":"n3684","loc":[-85.620026,41.956946]},"n3685":{"id":"n3685","loc":[-85.623005,41.960124]},"n3686":{"id":"n3686","loc":[-85.619073,41.955832]},"n3687":{"id":"n3687","loc":[-85.621744,41.95501]},"n3688":{"id":"n3688","loc":[-85.620804,41.958781]},"n3689":{"id":"n3689","loc":[-85.619844,41.957448]},"n369":{"id":"n369","loc":[-85.63298,41.944076]},"n3690":{"id":"n3690","loc":[-85.623713,41.958872]},"n3691":{"id":"n3691","loc":[-85.622329,41.960507]},"n3692":{"id":"n3692","loc":[-85.620804,41.956244]},"n3693":{"id":"n3693","loc":[-85.621818,41.955968]},"n3694":{"id":"n3694","loc":[-85.621405,41.958697]},"n3695":{"id":"n3695","loc":[-85.620998,41.960996]},"n3696":{"id":"n3696","loc":[-85.621621,41.960444]},"n3697":{"id":"n3697","loc":[-85.620941,41.961637]},"n3698":{"id":"n3698","loc":[-85.622195,41.958333]},"n3699":{"id":"n3699","loc":[-85.621668,41.961529]},"n37":{"id":"n37","loc":[-85.637611,41.945383]},"n370":{"id":"n370","loc":[-85.633191,41.944471]},"n3700":{"id":"n3700","loc":[-85.621015,41.957049]},"n3701":{"id":"n3701","loc":[-85.619368,41.955521]},"n3702":{"id":"n3702","loc":[-85.651578,41.942534]},"n3703":{"id":"n3703","loc":[-85.651541,41.943847]},"n3704":{"id":"n3704","loc":[-85.651365,41.944817]},"n3705":{"id":"n3705","loc":[-85.651076,41.945985]},"n3706":{"id":"n3706","loc":[-85.650626,41.947213]},"n3707":{"id":"n3707","loc":[-85.649669,41.949161]},"n3708":{"id":"n3708","loc":[-85.641802,41.961801]},"n3709":{"id":"n3709","loc":[-85.623333,41.961987]},"n371":{"id":"n371","loc":[-85.633132,41.94372]},"n3710":{"id":"n3710","loc":[-85.620621,41.965658]},"n3711":{"id":"n3711","loc":[-85.605673,41.965764]},"n3712":{"id":"n3712","loc":[-85.605664,41.962094]},"n3713":{"id":"n3713","loc":[-85.583774,41.962178]},"n3714":{"id":"n3714","loc":[-85.583774,41.961789]},"n3715":{"id":"n3715","loc":[-85.581303,41.961783]},"n3716":{"id":"n3716","loc":[-85.581245,41.958394]},"n3717":{"id":"n3717","loc":[-85.585299,41.955483]},"n3718":{"id":"n3718","loc":[-85.585588,41.955331]},"n3719":{"id":"n3719","loc":[-85.586053,41.955163]},"n372":{"id":"n372","loc":[-85.633011,41.943788]},"n3720":{"id":"n3720","loc":[-85.58632,41.955076]},"n3721":{"id":"n3721","loc":[-85.586478,41.955025]},"n3722":{"id":"n3722","loc":[-85.58692,41.954947]},"n3723":{"id":"n3723","loc":[-85.587345,41.954913]},"n3724":{"id":"n3724","loc":[-85.605592,41.954766]},"n3725":{"id":"n3725","loc":[-85.605303,41.936236]},"n3726":{"id":"n3726","loc":[-85.606941,41.936117]},"n3727":{"id":"n3727","loc":[-85.60876,41.935856]},"n3728":{"id":"n3728","loc":[-85.610092,41.935451]},"n3729":{"id":"n3729","loc":[-85.610681,41.935247]},"n373":{"id":"n373","loc":[-85.632854,41.943632]},"n3730":{"id":"n3730","loc":[-85.611446,41.934955]},"n3731":{"id":"n3731","loc":[-85.612057,41.934696]},"n3732":{"id":"n3732","loc":[-85.613256,41.934084]},"n3733":{"id":"n3733","loc":[-85.613948,41.933682]},"n3734":{"id":"n3734","loc":[-85.614638,41.933212]},"n3735":{"id":"n3735","loc":[-85.619801,41.929305]},"n3736":{"id":"n3736","loc":[-85.619768,41.925548]},"n3737":{"id":"n3737","loc":[-85.625761,41.925597]},"n3738":{"id":"n3738","loc":[-85.6263,41.927323]},"n3739":{"id":"n3739","loc":[-85.633708,41.927402]},"n374":{"id":"n374","loc":[-85.632974,41.943565]},"n3740":{"id":"n3740","loc":[-85.633927,41.929109]},"n3741":{"id":"n3741","loc":[-85.639213,41.929088]},"n3742":{"id":"n3742","loc":[-85.639204,41.925488]},"n3743":{"id":"n3743","loc":[-85.651425,41.925406]},"n3744":{"id":"n3744","loc":[-85.643386,41.941933]},"n3745":{"id":"n3745","loc":[-85.642776,41.941161]},"n3746":{"id":"n3746","loc":[-85.637277,41.948812]},"n3747":{"id":"n3747","loc":[-85.637366,41.94897]},"n3748":{"id":"n3748","loc":[-85.637329,41.94889]},"n3749":{"id":"n3749","loc":[-85.629649,41.952596]},"n375":{"id":"n375","loc":[-85.632741,41.943351]},"n3750":{"id":"n3750","loc":[-85.630291,41.954684]},"n3751":{"id":"n3751","loc":[-85.630284,41.953713]},"n3752":{"id":"n3752","loc":[-85.630269,41.952463]},"n3753":{"id":"n3753","loc":[-85.633933,41.949896]},"n3754":{"id":"n3754","loc":[-85.629339,41.941467]},"n3755":{"id":"n3755","loc":[-85.629857,41.94316]},"n3756":{"id":"n3756","loc":[-85.629987,41.944025]},"n3757":{"id":"n3757","loc":[-85.628538,41.948604]},"n3758":{"id":"n3758","loc":[-85.627415,41.957442]},"n3759":{"id":"n3759","loc":[-85.627019,41.957369]},"n376":{"id":"n376","loc":[-85.63251,41.943481]},"n3760":{"id":"n3760","loc":[-85.62167,41.952179]},"n3761":{"id":"n3761","loc":[-85.62167,41.952138]},"n3762":{"id":"n3762","loc":[-85.621562,41.952139]},"n3763":{"id":"n3763","loc":[-85.621562,41.952058]},"n3764":{"id":"n3764","loc":[-85.621476,41.952043]},"n3765":{"id":"n3765","loc":[-85.621477,41.952132]},"n3766":{"id":"n3766","loc":[-85.621386,41.952132]},"n3767":{"id":"n3767","loc":[-85.621387,41.95214]},"n3768":{"id":"n3768","loc":[-85.621262,41.95214]},"n3769":{"id":"n3769","loc":[-85.621261,41.952038]},"n377":{"id":"n377","loc":[-85.632706,41.943715]},"n3770":{"id":"n3770","loc":[-85.621389,41.952038]},"n3771":{"id":"n3771","loc":[-85.621389,41.952043]},"n3772":{"id":"n3772","loc":[-85.620898,41.952024]},"n3773":{"id":"n3773","loc":[-85.620898,41.952085]},"n3774":{"id":"n3774","loc":[-85.620774,41.952084]},"n3775":{"id":"n3775","loc":[-85.620774,41.952023]},"n3776":{"id":"n3776","loc":[-85.620749,41.952036]},"n3777":{"id":"n3777","loc":[-85.620723,41.952097]},"n3778":{"id":"n3778","loc":[-85.626158,41.958996]},"n3779":{"id":"n3779","loc":[-85.626319,41.958686]},"n378":{"id":"n378","loc":[-85.638683,41.943295]},"n3780":{"id":"n3780","loc":[-85.626119,41.958629]},"n3781":{"id":"n3781","loc":[-85.626064,41.958733]},"n3782":{"id":"n3782","loc":[-85.626155,41.958759]},"n3783":{"id":"n3783","loc":[-85.626048,41.958965]},"n3784":{"id":"n3784","loc":[-85.620648,41.952079]},"n3785":{"id":"n3785","loc":[-85.63826,41.961213]},"n3786":{"id":"n3786","loc":[-85.638003,41.961614]},"n3787":{"id":"n3787","loc":[-85.638817,41.961902]},"n3788":{"id":"n3788","loc":[-85.639073,41.961501]},"n3789":{"id":"n3789","loc":[-85.620674,41.952018]},"n379":{"id":"n379","loc":[-85.638684,41.94323]},"n3790":{"id":"n3790","loc":[-85.62082,41.952106]},"n3791":{"id":"n3791","loc":[-85.620819,41.952143]},"n3792":{"id":"n3792","loc":[-85.620778,41.952143]},"n3793":{"id":"n3793","loc":[-85.620778,41.952106]},"n3794":{"id":"n3794","loc":[-85.620563,41.952276]},"n3795":{"id":"n3795","loc":[-85.620543,41.95238]},"n3796":{"id":"n3796","loc":[-85.620422,41.952367]},"n3797":{"id":"n3797","loc":[-85.620441,41.952263]},"n3798":{"id":"n3798","loc":[-85.620561,41.952266]},"n3799":{"id":"n3799","loc":[-85.620444,41.952254]},"n38":{"id":"n38","loc":[-85.63879,41.943295]},"n380":{"id":"n380","loc":[-85.638627,41.94322]},"n3800":{"id":"n3800","loc":[-85.620773,41.955585]},"n3801":{"id":"n3801","loc":[-85.621265,41.955989]},"n3802":{"id":"n3802","loc":[-85.620692,41.954969]},"n3803":{"id":"n3803","loc":[-85.620691,41.955367]},"n3804":{"id":"n3804","loc":[-85.620458,41.952178]},"n3805":{"id":"n3805","loc":[-85.620575,41.95219]},"n3806":{"id":"n3806","loc":[-85.617609,41.952712]},"n3807":{"id":"n3807","loc":[-85.617533,41.952801],"tags":{"entrance":"yes"}},"n3808":{"id":"n3808","loc":[-85.616816,41.952911]},"n3809":{"id":"n3809","loc":[-85.616797,41.952901]},"n381":{"id":"n381","loc":[-85.638624,41.943294]},"n3810":{"id":"n3810","loc":[-85.616343,41.952694]},"n3811":{"id":"n3811","loc":[-85.616336,41.952729]},"n3812":{"id":"n3812","loc":[-85.616343,41.952772]},"n3813":{"id":"n3813","loc":[-85.628479,41.948649]},"n3814":{"id":"n3814","loc":[-85.628413,41.948679]},"n3815":{"id":"n3815","loc":[-85.628336,41.948694]},"n3816":{"id":"n3816","loc":[-85.62826,41.948694]},"n3817":{"id":"n3817","loc":[-85.628185,41.948679]},"n3818":{"id":"n3818","loc":[-85.628103,41.948649]},"n3819":{"id":"n3819","loc":[-85.627482,41.948395]},"n382":{"id":"n382","loc":[-85.638437,41.943291]},"n3820":{"id":"n3820","loc":[-85.619957,41.951168]},"n3821":{"id":"n3821","loc":[-85.619955,41.952077]},"n3822":{"id":"n3822","loc":[-85.619843,41.952666]},"n3823":{"id":"n3823","loc":[-85.619513,41.95324]},"n3824":{"id":"n3824","loc":[-85.619163,41.953668]},"n3825":{"id":"n3825","loc":[-85.618813,41.953947]},"n3826":{"id":"n3826","loc":[-85.618265,41.954252]},"n3827":{"id":"n3827","loc":[-85.617691,41.954458]},"n3828":{"id":"n3828","loc":[-85.616978,41.95459]},"n3829":{"id":"n3829","loc":[-85.615408,41.954628]},"n383":{"id":"n383","loc":[-85.63844,41.943209]},"n3830":{"id":"n3830","loc":[-85.615374,41.951076]},"n3831":{"id":"n3831","loc":[-85.61932,41.947564]},"n3832":{"id":"n3832","loc":[-85.610553,41.94755]},"n3833":{"id":"n3833","loc":[-85.610572,41.951065]},"n3834":{"id":"n3834","loc":[-85.617548,41.94757]},"n3835":{"id":"n3835","loc":[-85.619842,41.947939]},"n3836":{"id":"n3836","loc":[-85.619874,41.950905]},"n3837":{"id":"n3837","loc":[-85.619695,41.950911]},"n3838":{"id":"n3838","loc":[-85.617591,41.951078]},"n3839":{"id":"n3839","loc":[-85.619551,41.951065]},"n384":{"id":"n384","loc":[-85.632616,41.944021]},"n3840":{"id":"n3840","loc":[-85.626813,41.947337]},"n3841":{"id":"n3841","loc":[-85.616371,41.952814]},"n3842":{"id":"n3842","loc":[-85.617205,41.951308]},"n3843":{"id":"n3843","loc":[-85.616795,41.950953]},"n3844":{"id":"n3844","loc":[-85.617441,41.950889]},"n3845":{"id":"n3845","loc":[-85.619155,41.949377]},"n3846":{"id":"n3846","loc":[-85.618556,41.949377]},"n3847":{"id":"n3847","loc":[-85.618557,41.948372]},"n3848":{"id":"n3848","loc":[-85.619156,41.948372]},"n3849":{"id":"n3849","loc":[-85.61927,41.949796]},"n385":{"id":"n385","loc":[-85.632319,41.944172]},"n3850":{"id":"n3850","loc":[-85.61926,41.948344]},"n3851":{"id":"n3851","loc":[-85.619219,41.948264]},"n3852":{"id":"n3852","loc":[-85.619147,41.948196]},"n3853":{"id":"n3853","loc":[-85.619049,41.948144]},"n3854":{"id":"n3854","loc":[-85.618942,41.948116]},"n3855":{"id":"n3855","loc":[-85.618822,41.948109]},"n3856":{"id":"n3856","loc":[-85.618699,41.94813]},"n3857":{"id":"n3857","loc":[-85.618937,41.951943]},"n3858":{"id":"n3858","loc":[-85.616762,41.952222]},"n3859":{"id":"n3859","loc":[-85.616799,41.95472]},"n386":{"id":"n386","loc":[-85.63221,41.944066]},"n3860":{"id":"n3860","loc":[-85.616458,41.954735]},"n3861":{"id":"n3861","loc":[-85.61763,41.951515]},"n3862":{"id":"n3862","loc":[-85.617735,41.951572]},"n3863":{"id":"n3863","loc":[-85.61929,41.951573]},"n3864":{"id":"n3864","loc":[-85.617134,41.951348]},"n3865":{"id":"n3865","loc":[-85.616598,41.95192]},"n3866":{"id":"n3866","loc":[-85.616557,41.951997]},"n3867":{"id":"n3867","loc":[-85.61658,41.952093]},"n3868":{"id":"n3868","loc":[-85.616636,41.952145]},"n3869":{"id":"n3869","loc":[-85.616918,41.952276]},"n387":{"id":"n387","loc":[-85.632524,41.943912]},"n3870":{"id":"n3870","loc":[-85.617098,41.952235]},"n3871":{"id":"n3871","loc":[-85.61892,41.951467]},"n3872":{"id":"n3872","loc":[-85.618035,41.951473]},"n3873":{"id":"n3873","loc":[-85.618036,41.951572]},"n3874":{"id":"n3874","loc":[-85.61892,41.951573]},"n3875":{"id":"n3875","loc":[-85.618919,41.951957]},"n3876":{"id":"n3876","loc":[-85.619457,41.952237]},"n3877":{"id":"n3877","loc":[-85.618178,41.953618]},"n3878":{"id":"n3878","loc":[-85.617658,41.953366]},"n3879":{"id":"n3879","loc":[-85.617987,41.953024]},"n388":{"id":"n388","loc":[-85.632268,41.943621]},"n3880":{"id":"n3880","loc":[-85.618429,41.953248]},"n3881":{"id":"n3881","loc":[-85.618554,41.953119]},"n3882":{"id":"n3882","loc":[-85.618077,41.952868]},"n3883":{"id":"n3883","loc":[-85.618039,41.952886]},"n3884":{"id":"n3884","loc":[-85.619375,41.952169]},"n3885":{"id":"n3885","loc":[-85.618137,41.953538]},"n3886":{"id":"n3886","loc":[-85.61799,41.953555]},"n3887":{"id":"n3887","loc":[-85.617729,41.953423]},"n3888":{"id":"n3888","loc":[-85.618101,41.953029]},"n3889":{"id":"n3889","loc":[-85.618516,41.953119]},"n389":{"id":"n389","loc":[-85.631951,41.943773]},"n3890":{"id":"n3890","loc":[-85.619132,41.952042]},"n3891":{"id":"n3891","loc":[-85.618235,41.952981]},"n3892":{"id":"n3892","loc":[-85.618485,41.952425]},"n3893":{"id":"n3893","loc":[-85.618676,41.952519]},"n3894":{"id":"n3894","loc":[-85.618942,41.952648]},"n3895":{"id":"n3895","loc":[-85.618287,41.953122]},"n3896":{"id":"n3896","loc":[-85.617914,41.953516]},"n3897":{"id":"n3897","loc":[-85.617836,41.953573]},"n3898":{"id":"n3898","loc":[-85.616477,41.95289]},"n3899":{"id":"n3899","loc":[-85.618441,41.953201]},"n39":{"id":"n39","loc":[-85.619931,41.951013]},"n390":{"id":"n390","loc":[-85.631981,41.943654]},"n3900":{"id":"n3900","loc":[-85.617537,41.953335]},"n3901":{"id":"n3901","loc":[-85.617221,41.953166]},"n3902":{"id":"n3902","loc":[-85.617253,41.953135]},"n3903":{"id":"n3903","loc":[-85.617211,41.953114]},"n3904":{"id":"n3904","loc":[-85.617197,41.95313]},"n3905":{"id":"n3905","loc":[-85.616802,41.952925]},"n3906":{"id":"n3906","loc":[-85.616771,41.952928]},"n3907":{"id":"n3907","loc":[-85.616493,41.952785]},"n3908":{"id":"n3908","loc":[-85.616823,41.952426]},"n3909":{"id":"n3909","loc":[-85.617191,41.952616]},"n391":{"id":"n391","loc":[-85.631886,41.943699]},"n3910":{"id":"n3910","loc":[-85.61724,41.952559]},"n3911":{"id":"n3911","loc":[-85.61721,41.952542]},"n3912":{"id":"n3912","loc":[-85.617395,41.952351]},"n3913":{"id":"n3913","loc":[-85.617426,41.952368]},"n3914":{"id":"n3914","loc":[-85.617483,41.952309]},"n3915":{"id":"n3915","loc":[-85.617332,41.952229]},"n3916":{"id":"n3916","loc":[-85.617451,41.952102]},"n3917":{"id":"n3917","loc":[-85.617477,41.952115]},"n3918":{"id":"n3918","loc":[-85.617658,41.951923]},"n3919":{"id":"n3919","loc":[-85.617634,41.95191]},"n392":{"id":"n392","loc":[-85.631807,41.943606]},"n3920":{"id":"n3920","loc":[-85.617747,41.951786]},"n3921":{"id":"n3921","loc":[-85.618268,41.952056]},"n3922":{"id":"n3922","loc":[-85.618211,41.952122]},"n3923":{"id":"n3923","loc":[-85.618386,41.95222]},"n3924":{"id":"n3924","loc":[-85.618098,41.952527]},"n3925":{"id":"n3925","loc":[-85.617916,41.95243]},"n3926":{"id":"n3926","loc":[-85.617854,41.952498]},"n3927":{"id":"n3927","loc":[-85.617769,41.952453]},"n3928":{"id":"n3928","loc":[-85.617476,41.952773]},"n3929":{"id":"n3929","loc":[-85.617876,41.952973]},"n393":{"id":"n393","loc":[-85.631902,41.943561]},"n3930":{"id":"n3930","loc":[-85.617174,41.953638]},"n3931":{"id":"n3931","loc":[-85.618016,41.953578]},"n3932":{"id":"n3932","loc":[-85.618107,41.953628]},"n3933":{"id":"n3933","loc":[-85.618067,41.954268]},"n3934":{"id":"n3934","loc":[-85.617864,41.954263]},"n3935":{"id":"n3935","loc":[-85.61762,41.954205]},"n3936":{"id":"n3936","loc":[-85.617437,41.954103]},"n3937":{"id":"n3937","loc":[-85.617294,41.953978]},"n3938":{"id":"n3938","loc":[-85.617217,41.95384]},"n3939":{"id":"n3939","loc":[-85.616814,41.954327]},"n394":{"id":"n394","loc":[-85.63236,41.943543]},"n3940":{"id":"n3940","loc":[-85.616778,41.95381]},"n3941":{"id":"n3941","loc":[-85.616585,41.953707]},"n3942":{"id":"n3942","loc":[-85.616458,41.954318]},"n3943":{"id":"n3943","loc":[-85.616643,41.954345]},"n3944":{"id":"n3944","loc":[-85.618133,41.951412]},"n3945":{"id":"n3945","loc":[-85.618326,41.951411]},"n3946":{"id":"n3946","loc":[-85.618503,41.95141]},"n3947":{"id":"n3947","loc":[-85.618681,41.951409]},"n3948":{"id":"n3948","loc":[-85.618868,41.951408]},"n3949":{"id":"n3949","loc":[-85.617047,41.95136]},"n395":{"id":"n395","loc":[-85.633839,41.944082]},"n3950":{"id":"n3950","loc":[-85.616502,41.951946]},"n3951":{"id":"n3951","loc":[-85.616497,41.952072]},"n3952":{"id":"n3952","loc":[-85.616565,41.952165]},"n3953":{"id":"n3953","loc":[-85.616663,41.952218]},"n3954":{"id":"n3954","loc":[-85.616733,41.952255]},"n3955":{"id":"n3955","loc":[-85.617238,41.952512],"tags":{"entrance":"yes"}},"n3956":{"id":"n3956","loc":[-85.617043,41.952406]},"n3957":{"id":"n3957","loc":[-85.617691,41.951711]},"n3958":{"id":"n3958","loc":[-85.617773,41.951679]},"n3959":{"id":"n3959","loc":[-85.619085,41.951681]},"n396":{"id":"n396","loc":[-85.63376,41.944097]},"n3960":{"id":"n3960","loc":[-85.617943,41.952895]},"n3961":{"id":"n3961","loc":[-85.618039,41.952938]},"n3962":{"id":"n3962","loc":[-85.61763,41.95336]},"n3963":{"id":"n3963","loc":[-85.617554,41.95344]},"n3964":{"id":"n3964","loc":[-85.617381,41.952366],"tags":{"entrance":"yes"}},"n3965":{"id":"n3965","loc":[-85.617184,41.952254]},"n3966":{"id":"n3966","loc":[-85.617208,41.952496]},"n3967":{"id":"n3967","loc":[-85.617124,41.952581],"tags":{"entrance":"yes"}},"n3968":{"id":"n3968","loc":[-85.618094,41.952735]},"n3969":{"id":"n3969","loc":[-85.617702,41.952525],"tags":{"entrance":"yes"}},"n397":{"id":"n397","loc":[-85.63361,41.943957]},"n3970":{"id":"n3970","loc":[-85.617554,41.952686],"tags":{"entrance":"yes"}},"n3971":{"id":"n3971","loc":[-85.617959,41.952878]},"n3972":{"id":"n3972","loc":[-85.616367,41.952655]},"n3973":{"id":"n3973","loc":[-85.616416,41.952851]},"n3974":{"id":"n3974","loc":[-85.619777,41.951075]},"n3975":{"id":"n3975","loc":[-85.618611,41.94817]},"n3976":{"id":"n3976","loc":[-85.618538,41.948229]},"n3977":{"id":"n3977","loc":[-85.617421,41.947559]},"n3978":{"id":"n3978","loc":[-85.617395,41.951039]},"n3979":{"id":"n3979","loc":[-85.618488,41.94829]},"n398":{"id":"n398","loc":[-85.633309,41.943886]},"n3980":{"id":"n3980","loc":[-85.610238,41.954774]},"n3981":{"id":"n3981","loc":[-85.617449,41.950756]},"n3982":{"id":"n3982","loc":[-85.617288,41.951286]},"n3983":{"id":"n3983","loc":[-85.61745,41.950197]},"n3984":{"id":"n3984","loc":[-85.617436,41.948908]},"n3985":{"id":"n3985","loc":[-85.615915,41.953804]},"n3986":{"id":"n3986","loc":[-85.615953,41.953968]},"n3987":{"id":"n3987","loc":[-85.616031,41.954085]},"n3988":{"id":"n3988","loc":[-85.616135,41.954181]},"n3989":{"id":"n3989","loc":[-85.616273,41.954263]},"n399":{"id":"n399","loc":[-85.633226,41.943931]},"n3990":{"id":"n3990","loc":[-85.618327,41.951083]},"n3991":{"id":"n3991","loc":[-85.618135,41.951084]},"n3992":{"id":"n3992","loc":[-85.618503,41.951082]},"n3993":{"id":"n3993","loc":[-85.618682,41.951081]},"n3994":{"id":"n3994","loc":[-85.618864,41.951082]},"n3995":{"id":"n3995","loc":[-85.616761,41.950101]},"n3996":{"id":"n3996","loc":[-85.617317,41.947558]},"n3997":{"id":"n3997","loc":[-85.617336,41.948883]},"n3998":{"id":"n3998","loc":[-85.616779,41.949295]},"n3999":{"id":"n3999","loc":[-85.616754,41.949349]},"n4":{"id":"n4","loc":[-85.622764,41.950892],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n40":{"id":"n40","loc":[-85.619841,41.951037]},"n400":{"id":"n400","loc":[-85.63326,41.943966]},"n4000":{"id":"n4000","loc":[-85.616761,41.950865]},"n4001":{"id":"n4001","loc":[-85.616883,41.951041]},"n4002":{"id":"n4002","loc":[-85.617004,41.951142]},"n4003":{"id":"n4003","loc":[-85.617062,41.951248]},"n4004":{"id":"n4004","loc":[-85.616809,41.949273]},"n4005":{"id":"n4005","loc":[-85.616755,41.949489]},"n4006":{"id":"n4006","loc":[-85.616759,41.949971]},"n4007":{"id":"n4007","loc":[-85.616757,41.949702]},"n4008":{"id":"n4008","loc":[-85.618456,41.94836]},"n4009":{"id":"n4009","loc":[-85.618447,41.948428]},"n401":{"id":"n401","loc":[-85.63324,41.943976]},"n4010":{"id":"n4010","loc":[-85.618437,41.949322]},"n4011":{"id":"n4011","loc":[-85.618447,41.949418]},"n4012":{"id":"n4012","loc":[-85.618478,41.949491]},"n4013":{"id":"n4013","loc":[-85.618535,41.949559]},"n4014":{"id":"n4014","loc":[-85.618623,41.94962]},"n4015":{"id":"n4015","loc":[-85.618721,41.94966]},"n4016":{"id":"n4016","loc":[-85.618838,41.949674]},"n4017":{"id":"n4017","loc":[-85.618967,41.949667]},"n4018":{"id":"n4018","loc":[-85.619065,41.949632]},"n4019":{"id":"n4019","loc":[-85.61915,41.949578]},"n402":{"id":"n402","loc":[-85.63327,41.944006]},"n4020":{"id":"n4020","loc":[-85.619216,41.949507]},"n4021":{"id":"n4021","loc":[-85.61927,41.949399]},"n4022":{"id":"n4022","loc":[-85.619074,41.947639]},"n4023":{"id":"n4023","loc":[-85.619073,41.947793]},"n4024":{"id":"n4024","loc":[-85.618912,41.947793]},"n4025":{"id":"n4025","loc":[-85.618911,41.947947]},"n4026":{"id":"n4026","loc":[-85.618752,41.947947]},"n4027":{"id":"n4027","loc":[-85.618754,41.947637]},"n4028":{"id":"n4028","loc":[-85.617896,41.947599]},"n4029":{"id":"n4029","loc":[-85.617898,41.947811]},"n403":{"id":"n403","loc":[-85.633278,41.944002]},"n4030":{"id":"n4030","loc":[-85.617717,41.947812]},"n4031":{"id":"n4031","loc":[-85.617715,41.9476]},"n4032":{"id":"n4032","loc":[-85.619003,41.949828]},"n4033":{"id":"n4033","loc":[-85.619003,41.949882]},"n4034":{"id":"n4034","loc":[-85.618926,41.949882]},"n4035":{"id":"n4035","loc":[-85.618926,41.949828]},"n4036":{"id":"n4036","loc":[-85.618861,41.949809]},"n4037":{"id":"n4037","loc":[-85.618861,41.949898]},"n4038":{"id":"n4038","loc":[-85.618688,41.949898]},"n4039":{"id":"n4039","loc":[-85.618687,41.94981]},"n404":{"id":"n404","loc":[-85.63331,41.944036]},"n4040":{"id":"n4040","loc":[-85.618349,41.949473]},"n4041":{"id":"n4041","loc":[-85.618287,41.949473]},"n4042":{"id":"n4042","loc":[-85.618287,41.94942]},"n4043":{"id":"n4043","loc":[-85.618348,41.949419]},"n4044":{"id":"n4044","loc":[-85.62316,41.951604]},"n4045":{"id":"n4045","loc":[-85.623026,41.951605]},"n4046":{"id":"n4046","loc":[-85.623023,41.951466]},"n4047":{"id":"n4047","loc":[-85.623134,41.951465]},"n4048":{"id":"n4048","loc":[-85.623136,41.951539]},"n4049":{"id":"n4049","loc":[-85.623159,41.951539]},"n405":{"id":"n405","loc":[-85.633348,41.944015]},"n4050":{"id":"n4050","loc":[-85.623025,41.95155]},"n4051":{"id":"n4051","loc":[-85.622955,41.951551]},"n4052":{"id":"n4052","loc":[-85.622953,41.951507]},"n4053":{"id":"n4053","loc":[-85.623024,41.951506]},"n4054":{"id":"n4054","loc":[-85.623318,41.951242]},"n4055":{"id":"n4055","loc":[-85.623175,41.951241]},"n4056":{"id":"n4056","loc":[-85.623176,41.951153]},"n4057":{"id":"n4057","loc":[-85.623319,41.951154]},"n4058":{"id":"n4058","loc":[-85.623077,41.951191]},"n4059":{"id":"n4059","loc":[-85.622973,41.951191]},"n406":{"id":"n406","loc":[-85.63338,41.944048]},"n4060":{"id":"n4060","loc":[-85.622972,41.951349]},"n4061":{"id":"n4061","loc":[-85.623059,41.95135]},"n4062":{"id":"n4062","loc":[-85.62306,41.951301]},"n4063":{"id":"n4063","loc":[-85.623077,41.951301]},"n4064":{"id":"n4064","loc":[-85.623117,41.951405]},"n4065":{"id":"n4065","loc":[-85.62312,41.951087]},"n4066":{"id":"n4066","loc":[-85.623118,41.951274]},"n4067":{"id":"n4067","loc":[-85.62328,41.951275]},"n4068":{"id":"n4068","loc":[-85.62328,41.951242]},"n4069":{"id":"n4069","loc":[-85.623179,41.951392]},"n407":{"id":"n407","loc":[-85.633431,41.94402]},"n4070":{"id":"n4070","loc":[-85.623141,41.951392]},"n4071":{"id":"n4071","loc":[-85.623142,41.95136]},"n4072":{"id":"n4072","loc":[-85.623179,41.951361]},"n4073":{"id":"n4073","loc":[-85.622565,41.951639]},"n4074":{"id":"n4074","loc":[-85.622565,41.951741]},"n4075":{"id":"n4075","loc":[-85.622463,41.95174]},"n4076":{"id":"n4076","loc":[-85.622463,41.95173]},"n4077":{"id":"n4077","loc":[-85.622442,41.95173]},"n4078":{"id":"n4078","loc":[-85.622442,41.951742]},"n4079":{"id":"n4079","loc":[-85.622361,41.951742]},"n408":{"id":"n408","loc":[-85.633425,41.944014]},"n4080":{"id":"n4080","loc":[-85.622362,41.951667]},"n4081":{"id":"n4081","loc":[-85.622441,41.951667]},"n4082":{"id":"n4082","loc":[-85.622441,41.951688]},"n4083":{"id":"n4083","loc":[-85.622461,41.951688]},"n4084":{"id":"n4084","loc":[-85.622461,41.951638]},"n4085":{"id":"n4085","loc":[-85.62255,41.951587]},"n4086":{"id":"n4086","loc":[-85.622449,41.95159]},"n4087":{"id":"n4087","loc":[-85.622441,41.951448]},"n4088":{"id":"n4088","loc":[-85.62253,41.951445]},"n4089":{"id":"n4089","loc":[-85.622532,41.951486]},"n409":{"id":"n409","loc":[-85.633457,41.943997]},"n4090":{"id":"n4090","loc":[-85.622555,41.951485]},"n4091":{"id":"n4091","loc":[-85.622558,41.951531]},"n4092":{"id":"n4092","loc":[-85.622547,41.951531]},"n4093":{"id":"n4093","loc":[-85.622451,41.95159]},"n4094":{"id":"n4094","loc":[-85.622452,41.95161]},"n4095":{"id":"n4095","loc":[-85.622106,41.951617]},"n4096":{"id":"n4096","loc":[-85.622133,41.951443]},"n4097":{"id":"n4097","loc":[-85.622552,41.951379]},"n4098":{"id":"n4098","loc":[-85.622443,41.95138]},"n4099":{"id":"n4099","loc":[-85.622441,41.951281]},"n41":{"id":"n41","loc":[-85.636233,41.942764]},"n410":{"id":"n410","loc":[-85.633429,41.943969]},"n4100":{"id":"n4100","loc":[-85.62255,41.95128]},"n4101":{"id":"n4101","loc":[-85.622541,41.951437]},"n4102":{"id":"n4102","loc":[-85.622441,41.951438]},"n4103":{"id":"n4103","loc":[-85.621561,41.951444]},"n4104":{"id":"n4104","loc":[-85.622302,41.951479]},"n4105":{"id":"n4105","loc":[-85.6223,41.95152]},"n4106":{"id":"n4106","loc":[-85.622169,41.951517]},"n4107":{"id":"n4107","loc":[-85.622171,41.951476]},"n4108":{"id":"n4108","loc":[-85.622543,41.951228]},"n4109":{"id":"n4109","loc":[-85.622433,41.951228]},"n411":{"id":"n411","loc":[-85.633442,41.943962]},"n4110":{"id":"n4110","loc":[-85.622433,41.951133]},"n4111":{"id":"n4111","loc":[-85.622543,41.951133]},"n4112":{"id":"n4112","loc":[-85.622356,41.951256]},"n4113":{"id":"n4113","loc":[-85.622293,41.951256]},"n4114":{"id":"n4114","loc":[-85.622292,41.9512]},"n4115":{"id":"n4115","loc":[-85.622313,41.9512]},"n4116":{"id":"n4116","loc":[-85.622312,41.951173]},"n4117":{"id":"n4117","loc":[-85.622364,41.951173]},"n4118":{"id":"n4118","loc":[-85.622365,41.951231]},"n4119":{"id":"n4119","loc":[-85.622355,41.951231]},"n412":{"id":"n412","loc":[-85.633411,41.943932]},"n4120":{"id":"n4120","loc":[-85.62197,41.951155]},"n4121":{"id":"n4121","loc":[-85.62197,41.951213]},"n4122":{"id":"n4122","loc":[-85.621848,41.951213]},"n4123":{"id":"n4123","loc":[-85.621848,41.951155]},"n4124":{"id":"n4124","loc":[-85.622193,41.951268]},"n4125":{"id":"n4125","loc":[-85.622194,41.951305]},"n4126":{"id":"n4126","loc":[-85.622121,41.951306]},"n4127":{"id":"n4127","loc":[-85.622121,41.951322]},"n4128":{"id":"n4128","loc":[-85.621984,41.951324]},"n4129":{"id":"n4129","loc":[-85.621983,41.951271]},"n413":{"id":"n413","loc":[-85.633421,41.943926]},"n4130":{"id":"n4130","loc":[-85.622171,41.9514]},"n4131":{"id":"n4131","loc":[-85.622148,41.951382]},"n4132":{"id":"n4132","loc":[-85.6221,41.951414]},"n4133":{"id":"n4133","loc":[-85.622122,41.951433]},"n4134":{"id":"n4134","loc":[-85.621782,41.951148]},"n4135":{"id":"n4135","loc":[-85.621783,41.951219]},"n4136":{"id":"n4136","loc":[-85.62164,41.951221]},"n4137":{"id":"n4137","loc":[-85.62164,41.951236]},"n4138":{"id":"n4138","loc":[-85.621556,41.951237]},"n4139":{"id":"n4139","loc":[-85.621555,41.95117]},"n414":{"id":"n414","loc":[-85.633376,41.94388]},"n4140":{"id":"n4140","loc":[-85.621644,41.951169]},"n4141":{"id":"n4141","loc":[-85.621643,41.951139]},"n4142":{"id":"n4142","loc":[-85.621719,41.951138]},"n4143":{"id":"n4143","loc":[-85.621719,41.951148]},"n4144":{"id":"n4144","loc":[-85.621409,41.951322]},"n4145":{"id":"n4145","loc":[-85.621338,41.951322]},"n4146":{"id":"n4146","loc":[-85.621336,41.95115]},"n4147":{"id":"n4147","loc":[-85.621521,41.951149]},"n4148":{"id":"n4148","loc":[-85.621522,41.951228]},"n4149":{"id":"n4149","loc":[-85.621408,41.951228]},"n415":{"id":"n415","loc":[-85.633348,41.943895]},"n4150":{"id":"n4150","loc":[-85.621284,41.951219]},"n4151":{"id":"n4151","loc":[-85.621153,41.951219]},"n4152":{"id":"n4152","loc":[-85.621152,41.951152]},"n4153":{"id":"n4153","loc":[-85.621283,41.951152]},"n4154":{"id":"n4154","loc":[-85.621159,41.951241]},"n4155":{"id":"n4155","loc":[-85.62116,41.951301]},"n4156":{"id":"n4156","loc":[-85.621088,41.951302]},"n4157":{"id":"n4157","loc":[-85.621088,41.951241]},"n4158":{"id":"n4158","loc":[-85.621049,41.951158]},"n4159":{"id":"n4159","loc":[-85.62105,41.951229]},"n416":{"id":"n416","loc":[-85.633341,41.943888]},"n4160":{"id":"n4160","loc":[-85.620976,41.951229]},"n4161":{"id":"n4161","loc":[-85.620977,41.951295]},"n4162":{"id":"n4162","loc":[-85.620887,41.951296]},"n4163":{"id":"n4163","loc":[-85.620886,41.951229]},"n4164":{"id":"n4164","loc":[-85.620862,41.951229]},"n4165":{"id":"n4165","loc":[-85.620861,41.951159]},"n4166":{"id":"n4166","loc":[-85.620626,41.951133]},"n4167":{"id":"n4167","loc":[-85.620626,41.951205]},"n4168":{"id":"n4168","loc":[-85.620412,41.951206]},"n4169":{"id":"n4169","loc":[-85.620411,41.951134]},"n417":{"id":"n417","loc":[-85.633321,41.943898]},"n4170":{"id":"n4170","loc":[-85.621775,41.951443]},"n4171":{"id":"n4171","loc":[-85.621777,41.951264]},"n4172":{"id":"n4172","loc":[-85.621565,41.951654]},"n4173":{"id":"n4173","loc":[-85.621331,41.951439]},"n4174":{"id":"n4174","loc":[-85.621031,41.951443]},"n4175":{"id":"n4175","loc":[-85.621836,41.951724]},"n4176":{"id":"n4176","loc":[-85.621834,41.951621]},"n4177":{"id":"n4177","loc":[-85.62197,41.951619]},"n4178":{"id":"n4178","loc":[-85.621972,41.951722]},"n4179":{"id":"n4179","loc":[-85.621772,41.951638]},"n418":{"id":"n418","loc":[-85.633547,41.943896]},"n4180":{"id":"n4180","loc":[-85.621772,41.951715]},"n4181":{"id":"n4181","loc":[-85.621699,41.951716]},"n4182":{"id":"n4182","loc":[-85.6217,41.951722]},"n4183":{"id":"n4183","loc":[-85.621641,41.951722]},"n4184":{"id":"n4184","loc":[-85.62164,41.951639]},"n4185":{"id":"n4185","loc":[-85.621505,41.951655]},"n4186":{"id":"n4186","loc":[-85.621505,41.951729]},"n4187":{"id":"n4187","loc":[-85.621389,41.951729]},"n4188":{"id":"n4188","loc":[-85.62139,41.951654]},"n4189":{"id":"n4189","loc":[-85.621105,41.951635]},"n419":{"id":"n419","loc":[-85.633467,41.944075]},"n4190":{"id":"n4190","loc":[-85.621104,41.951576]},"n4191":{"id":"n4191","loc":[-85.621168,41.951576]},"n4192":{"id":"n4192","loc":[-85.621168,41.951595]},"n4193":{"id":"n4193","loc":[-85.621261,41.951595]},"n4194":{"id":"n4194","loc":[-85.621261,41.951646]},"n4195":{"id":"n4195","loc":[-85.621294,41.951646]},"n4196":{"id":"n4196","loc":[-85.621294,41.951732]},"n4197":{"id":"n4197","loc":[-85.621251,41.951732]},"n4198":{"id":"n4198","loc":[-85.621251,41.95174]},"n4199":{"id":"n4199","loc":[-85.621175,41.951741]},"n42":{"id":"n42","loc":[-85.635996,41.942727]},"n420":{"id":"n420","loc":[-85.633578,41.944055]},"n4200":{"id":"n4200","loc":[-85.621175,41.951651]},"n4201":{"id":"n4201","loc":[-85.621189,41.951651]},"n4202":{"id":"n4202","loc":[-85.621189,41.951635]},"n4203":{"id":"n4203","loc":[-85.620554,41.951641]},"n4204":{"id":"n4204","loc":[-85.620555,41.951742]},"n4205":{"id":"n4205","loc":[-85.620719,41.951742]},"n4206":{"id":"n4206","loc":[-85.620719,41.951731]},"n4207":{"id":"n4207","loc":[-85.620803,41.95173]},"n4208":{"id":"n4208","loc":[-85.620803,41.951603]},"n4209":{"id":"n4209","loc":[-85.62072,41.951603]},"n421":{"id":"n421","loc":[-85.633462,41.944125]},"n4210":{"id":"n4210","loc":[-85.620721,41.951641]},"n4211":{"id":"n4211","loc":[-85.620269,41.953053]},"n4212":{"id":"n4212","loc":[-85.620229,41.953051]},"n4213":{"id":"n4213","loc":[-85.620231,41.953013]},"n4214":{"id":"n4214","loc":[-85.620271,41.953015]},"n4215":{"id":"n4215","loc":[-85.620215,41.953133]},"n4216":{"id":"n4216","loc":[-85.62013,41.953134]},"n4217":{"id":"n4217","loc":[-85.620129,41.953083]},"n4218":{"id":"n4218","loc":[-85.620214,41.953082]},"n4219":{"id":"n4219","loc":[-85.62016,41.953272]},"n422":{"id":"n422","loc":[-85.633372,41.944061]},"n4220":{"id":"n4220","loc":[-85.620046,41.953273]},"n4221":{"id":"n4221","loc":[-85.620045,41.953171]},"n4222":{"id":"n4222","loc":[-85.620088,41.953171]},"n4223":{"id":"n4223","loc":[-85.620087,41.953162]},"n4224":{"id":"n4224","loc":[-85.620121,41.953162]},"n4225":{"id":"n4225","loc":[-85.620121,41.953173]},"n4226":{"id":"n4226","loc":[-85.620157,41.953173]},"n4227":{"id":"n4227","loc":[-85.620158,41.953196]},"n4228":{"id":"n4228","loc":[-85.620189,41.953196]},"n4229":{"id":"n4229","loc":[-85.620189,41.953246]},"n423":{"id":"n423","loc":[-85.633509,41.943981]},"n4230":{"id":"n4230","loc":[-85.62016,41.953246]},"n4231":{"id":"n4231","loc":[-85.6195,41.954012]},"n4232":{"id":"n4232","loc":[-85.619438,41.954057]},"n4233":{"id":"n4233","loc":[-85.619418,41.954043]},"n4234":{"id":"n4234","loc":[-85.619381,41.954069]},"n4235":{"id":"n4235","loc":[-85.619399,41.954083]},"n4236":{"id":"n4236","loc":[-85.619339,41.954126]},"n4237":{"id":"n4237","loc":[-85.619584,41.954313]},"n4238":{"id":"n4238","loc":[-85.619743,41.954198]},"n4239":{"id":"n4239","loc":[-85.619453,41.954727]},"n424":{"id":"n424","loc":[-85.635421,41.945367]},"n4240":{"id":"n4240","loc":[-85.619503,41.954581]},"n4241":{"id":"n4241","loc":[-85.619597,41.954472]},"n4242":{"id":"n4242","loc":[-85.619862,41.95419]},"n4243":{"id":"n4243","loc":[-85.619506,41.953907]},"n4244":{"id":"n4244","loc":[-85.619261,41.9541]},"n4245":{"id":"n4245","loc":[-85.619246,41.954139]},"n4246":{"id":"n4246","loc":[-85.619244,41.9542]},"n4247":{"id":"n4247","loc":[-85.619259,41.954243]},"n4248":{"id":"n4248","loc":[-85.619285,41.954274]},"n4249":{"id":"n4249","loc":[-85.619123,41.954381]},"n425":{"id":"n425","loc":[-85.634425,41.943552]},"n4250":{"id":"n4250","loc":[-85.619641,41.954607]},"n4251":{"id":"n4251","loc":[-85.619383,41.954615]},"n4252":{"id":"n4252","loc":[-85.61896,41.954391]},"n4253":{"id":"n4253","loc":[-85.619211,41.954178]},"n4254":{"id":"n4254","loc":[-85.619115,41.954102]},"n4255":{"id":"n4255","loc":[-85.619519,41.953821]},"n4256":{"id":"n4256","loc":[-85.619956,41.954156]},"n4257":{"id":"n4257","loc":[-85.619851,41.954266]},"n4258":{"id":"n4258","loc":[-85.619779,41.95436]},"n4259":{"id":"n4259","loc":[-85.620525,41.954364]},"n426":{"id":"n426","loc":[-85.634248,41.943654]},"n4260":{"id":"n4260","loc":[-85.620398,41.954365]},"n4261":{"id":"n4261","loc":[-85.620398,41.954324]},"n4262":{"id":"n4262","loc":[-85.620525,41.954323]},"n4263":{"id":"n4263","loc":[-85.620359,41.954588]},"n4264":{"id":"n4264","loc":[-85.620321,41.954588]},"n4265":{"id":"n4265","loc":[-85.620321,41.954599]},"n4266":{"id":"n4266","loc":[-85.620296,41.954599]},"n4267":{"id":"n4267","loc":[-85.620296,41.954587]},"n4268":{"id":"n4268","loc":[-85.620262,41.954588]},"n4269":{"id":"n4269","loc":[-85.620261,41.954516]},"n427":{"id":"n427","loc":[-85.634177,41.943585]},"n4270":{"id":"n4270","loc":[-85.620282,41.954516]},"n4271":{"id":"n4271","loc":[-85.620282,41.954373]},"n4272":{"id":"n4272","loc":[-85.620378,41.954373]},"n4273":{"id":"n4273","loc":[-85.620379,41.954486]},"n4274":{"id":"n4274","loc":[-85.620348,41.954486]},"n4275":{"id":"n4275","loc":[-85.620348,41.954537]},"n4276":{"id":"n4276","loc":[-85.620359,41.954537]},"n4277":{"id":"n4277","loc":[-85.620463,41.95521]},"n4278":{"id":"n4278","loc":[-85.620409,41.955273]},"n4279":{"id":"n4279","loc":[-85.620205,41.955177]},"n428":{"id":"n428","loc":[-85.634354,41.943484]},"n4280":{"id":"n4280","loc":[-85.620288,41.955079]},"n4281":{"id":"n4281","loc":[-85.620379,41.955121]},"n4282":{"id":"n4282","loc":[-85.620349,41.955157]},"n4283":{"id":"n4283","loc":[-85.620083,41.955101]},"n4284":{"id":"n4284","loc":[-85.620083,41.954986]},"n4285":{"id":"n4285","loc":[-85.620016,41.954986]},"n4286":{"id":"n4286","loc":[-85.620016,41.954999]},"n4287":{"id":"n4287","loc":[-85.619941,41.954999]},"n4288":{"id":"n4288","loc":[-85.619941,41.954988]},"n4289":{"id":"n4289","loc":[-85.619815,41.954988]},"n429":{"id":"n429","loc":[-85.638577,41.943212]},"n4290":{"id":"n4290","loc":[-85.619815,41.955075]},"n4291":{"id":"n4291","loc":[-85.619948,41.955075]},"n4292":{"id":"n4292","loc":[-85.619948,41.955082]},"n4293":{"id":"n4293","loc":[-85.620004,41.955082]},"n4294":{"id":"n4294","loc":[-85.620004,41.955101]},"n4295":{"id":"n4295","loc":[-85.619293,41.955127]},"n4296":{"id":"n4296","loc":[-85.619208,41.955124]},"n4297":{"id":"n4297","loc":[-85.619212,41.955061]},"n4298":{"id":"n4298","loc":[-85.619297,41.955064]},"n4299":{"id":"n4299","loc":[-85.619068,41.954936]},"n43":{"id":"n43","loc":[-85.637047,41.943054]},"n430":{"id":"n430","loc":[-85.638576,41.943219]},"n4300":{"id":"n4300","loc":[-85.619003,41.954936]},"n4301":{"id":"n4301","loc":[-85.619004,41.955003]},"n4302":{"id":"n4302","loc":[-85.618994,41.955003]},"n4303":{"id":"n4303","loc":[-85.618994,41.955016]},"n4304":{"id":"n4304","loc":[-85.618973,41.955016]},"n4305":{"id":"n4305","loc":[-85.618973,41.955071]},"n4306":{"id":"n4306","loc":[-85.619061,41.955071]},"n4307":{"id":"n4307","loc":[-85.61906,41.955024]},"n4308":{"id":"n4308","loc":[-85.619105,41.955024]},"n4309":{"id":"n4309","loc":[-85.619105,41.954956]},"n431":{"id":"n431","loc":[-85.638653,41.943078]},"n4310":{"id":"n4310","loc":[-85.619068,41.954956]},"n4311":{"id":"n4311","loc":[-85.618294,41.954596]},"n4312":{"id":"n4312","loc":[-85.618235,41.954602]},"n4313":{"id":"n4313","loc":[-85.618222,41.954535]},"n4314":{"id":"n4314","loc":[-85.618281,41.954529]},"n4315":{"id":"n4315","loc":[-85.618593,41.954556]},"n4316":{"id":"n4316","loc":[-85.618551,41.954565]},"n4317":{"id":"n4317","loc":[-85.618545,41.954552]},"n4318":{"id":"n4318","loc":[-85.618493,41.954563]},"n4319":{"id":"n4319","loc":[-85.618449,41.954455]},"n432":{"id":"n432","loc":[-85.638654,41.943148]},"n4320":{"id":"n4320","loc":[-85.618544,41.954434]},"n4321":{"id":"n4321","loc":[-85.622545,41.950775]},"n4322":{"id":"n4322","loc":[-85.622546,41.950843]},"n4323":{"id":"n4323","loc":[-85.622503,41.950844]},"n4324":{"id":"n4324","loc":[-85.622503,41.950853]},"n4325":{"id":"n4325","loc":[-85.622479,41.950853]},"n4326":{"id":"n4326","loc":[-85.622478,41.950843]},"n4327":{"id":"n4327","loc":[-85.622425,41.950843]},"n4328":{"id":"n4328","loc":[-85.622425,41.950808]},"n4329":{"id":"n4329","loc":[-85.622366,41.950809]},"n433":{"id":"n433","loc":[-85.638387,41.943151]},"n4330":{"id":"n4330","loc":[-85.622364,41.950673]},"n4331":{"id":"n4331","loc":[-85.622448,41.950673]},"n4332":{"id":"n4332","loc":[-85.622449,41.950732]},"n4333":{"id":"n4333","loc":[-85.622479,41.950731]},"n4334":{"id":"n4334","loc":[-85.622479,41.950775]},"n4335":{"id":"n4335","loc":[-85.621909,41.950641]},"n4336":{"id":"n4336","loc":[-85.621864,41.950641]},"n4337":{"id":"n4337","loc":[-85.621865,41.950567]},"n4338":{"id":"n4338","loc":[-85.62191,41.950567]},"n4339":{"id":"n4339","loc":[-85.621787,41.950829]},"n434":{"id":"n434","loc":[-85.638386,41.94308]},"n4340":{"id":"n4340","loc":[-85.621786,41.950775]},"n4341":{"id":"n4341","loc":[-85.621588,41.950776]},"n4342":{"id":"n4342","loc":[-85.621589,41.950848]},"n4343":{"id":"n4343","loc":[-85.621737,41.950847]},"n4344":{"id":"n4344","loc":[-85.621737,41.950829]},"n4345":{"id":"n4345","loc":[-85.621509,41.950846]},"n4346":{"id":"n4346","loc":[-85.621399,41.950846]},"n4347":{"id":"n4347","loc":[-85.621398,41.95073]},"n4348":{"id":"n4348","loc":[-85.621509,41.95073]},"n4349":{"id":"n4349","loc":[-85.621217,41.950841]},"n435":{"id":"n435","loc":[-85.634427,41.943533]},"n4350":{"id":"n4350","loc":[-85.6211,41.95084]},"n4351":{"id":"n4351","loc":[-85.6211,41.950777]},"n4352":{"id":"n4352","loc":[-85.621218,41.950778]},"n4353":{"id":"n4353","loc":[-85.621055,41.950764]},"n4354":{"id":"n4354","loc":[-85.621054,41.950826]},"n4355":{"id":"n4355","loc":[-85.620988,41.950826]},"n4356":{"id":"n4356","loc":[-85.620988,41.950843]},"n4357":{"id":"n4357","loc":[-85.620842,41.950843]},"n4358":{"id":"n4358","loc":[-85.620842,41.950764]},"n4359":{"id":"n4359","loc":[-85.620825,41.950922]},"n436":{"id":"n436","loc":[-85.63428,41.943229]},"n4360":{"id":"n4360","loc":[-85.620824,41.950553]},"n4361":{"id":"n4361","loc":[-85.620543,41.950771]},"n4362":{"id":"n4362","loc":[-85.620431,41.950772]},"n4363":{"id":"n4363","loc":[-85.62043,41.950585]},"n4364":{"id":"n4364","loc":[-85.620542,41.950585]},"n4365":{"id":"n4365","loc":[-85.62068,41.950505]},"n4366":{"id":"n4366","loc":[-85.620681,41.950552]},"n4367":{"id":"n4367","loc":[-85.620589,41.950553]},"n4368":{"id":"n4368","loc":[-85.620588,41.950506]},"n4369":{"id":"n4369","loc":[-85.620539,41.950407]},"n437":{"id":"n437","loc":[-85.634499,41.943461]},"n4370":{"id":"n4370","loc":[-85.62054,41.950504]},"n4371":{"id":"n4371","loc":[-85.620416,41.950504]},"n4372":{"id":"n4372","loc":[-85.620416,41.950408]},"n4373":{"id":"n4373","loc":[-85.620742,41.95038]},"n4374":{"id":"n4374","loc":[-85.620527,41.95038]},"n4375":{"id":"n4375","loc":[-85.620528,41.950408]},"n4376":{"id":"n4376","loc":[-85.622449,41.950373]},"n4377":{"id":"n4377","loc":[-85.622452,41.950397]},"n4378":{"id":"n4378","loc":[-85.622336,41.950404]},"n4379":{"id":"n4379","loc":[-85.622333,41.950379]},"n438":{"id":"n438","loc":[-85.634514,41.943486]},"n4380":{"id":"n4380","loc":[-85.622263,41.950324]},"n4381":{"id":"n4381","loc":[-85.622261,41.950256]},"n4382":{"id":"n4382","loc":[-85.62236,41.950254]},"n4383":{"id":"n4383","loc":[-85.62236,41.95027]},"n4384":{"id":"n4384","loc":[-85.622402,41.950281]},"n4385":{"id":"n4385","loc":[-85.622403,41.9503]},"n4386":{"id":"n4386","loc":[-85.622439,41.950299]},"n4387":{"id":"n4387","loc":[-85.62244,41.950334]},"n4388":{"id":"n4388","loc":[-85.622414,41.950335]},"n4389":{"id":"n4389","loc":[-85.622414,41.95036]},"n439":{"id":"n439","loc":[-85.63452,41.943511]},"n4390":{"id":"n4390","loc":[-85.62231,41.950362]},"n4391":{"id":"n4391","loc":[-85.622309,41.950323]},"n4392":{"id":"n4392","loc":[-85.622015,41.950539]},"n4393":{"id":"n4393","loc":[-85.621909,41.95054]},"n4394":{"id":"n4394","loc":[-85.621909,41.950472]},"n4395":{"id":"n4395","loc":[-85.622015,41.950471]},"n4396":{"id":"n4396","loc":[-85.62199,41.950439]},"n4397":{"id":"n4397","loc":[-85.621956,41.95044]},"n4398":{"id":"n4398","loc":[-85.621955,41.950405]},"n4399":{"id":"n4399","loc":[-85.621988,41.950404]},"n44":{"id":"n44","loc":[-85.636799,41.943055]},"n440":{"id":"n440","loc":[-85.63451,41.943534]},"n4400":{"id":"n4400","loc":[-85.621668,41.950418]},"n4401":{"id":"n4401","loc":[-85.621667,41.950343]},"n4402":{"id":"n4402","loc":[-85.621745,41.950342]},"n4403":{"id":"n4403","loc":[-85.621744,41.950306]},"n4404":{"id":"n4404","loc":[-85.621764,41.950306]},"n4405":{"id":"n4405","loc":[-85.621763,41.950254]},"n4406":{"id":"n4406","loc":[-85.621861,41.950253]},"n4407":{"id":"n4407","loc":[-85.621861,41.950274]},"n4408":{"id":"n4408","loc":[-85.621896,41.950273]},"n4409":{"id":"n4409","loc":[-85.621898,41.950389]},"n441":{"id":"n441","loc":[-85.634483,41.943556]},"n4410":{"id":"n4410","loc":[-85.621843,41.95039]},"n4411":{"id":"n4411","loc":[-85.621843,41.950425]},"n4412":{"id":"n4412","loc":[-85.621789,41.950425]},"n4413":{"id":"n4413","loc":[-85.621789,41.950386]},"n4414":{"id":"n4414","loc":[-85.621752,41.950387]},"n4415":{"id":"n4415","loc":[-85.621753,41.950417]},"n4416":{"id":"n4416","loc":[-85.621556,41.950562]},"n4417":{"id":"n4417","loc":[-85.621552,41.950217]},"n4418":{"id":"n4418","loc":[-85.621788,41.950562]},"n4419":{"id":"n4419","loc":[-85.621155,41.950562]},"n442":{"id":"n442","loc":[-85.63419,41.943713]},"n4420":{"id":"n4420","loc":[-85.622473,41.950551]},"n4421":{"id":"n4421","loc":[-85.622043,41.950551]},"n4422":{"id":"n4422","loc":[-85.62142,41.950454]},"n4423":{"id":"n4423","loc":[-85.621315,41.950455]},"n4424":{"id":"n4424","loc":[-85.621313,41.950311]},"n4425":{"id":"n4425","loc":[-85.621388,41.950311]},"n4426":{"id":"n4426","loc":[-85.621387,41.950261]},"n4427":{"id":"n4427","loc":[-85.621468,41.95026]},"n4428":{"id":"n4428","loc":[-85.621468,41.950271]},"n4429":{"id":"n4429","loc":[-85.621503,41.95027]},"n443":{"id":"n443","loc":[-85.634462,41.943294]},"n4430":{"id":"n4430","loc":[-85.621505,41.950353]},"n4431":{"id":"n4431","loc":[-85.621483,41.950354]},"n4432":{"id":"n4432","loc":[-85.621483,41.950392]},"n4433":{"id":"n4433","loc":[-85.621419,41.950393]},"n4434":{"id":"n4434","loc":[-85.621213,41.95039]},"n4435":{"id":"n4435","loc":[-85.621127,41.950391]},"n4436":{"id":"n4436","loc":[-85.621126,41.950357]},"n4437":{"id":"n4437","loc":[-85.621094,41.950357]},"n4438":{"id":"n4438","loc":[-85.621094,41.950391]},"n4439":{"id":"n4439","loc":[-85.620977,41.950392]},"n444":{"id":"n444","loc":[-85.634298,41.943389]},"n4440":{"id":"n4440","loc":[-85.620975,41.950278]},"n4441":{"id":"n4441","loc":[-85.621087,41.950277]},"n4442":{"id":"n4442","loc":[-85.621088,41.950331]},"n4443":{"id":"n4443","loc":[-85.621211,41.950312]},"n4444":{"id":"n4444","loc":[-85.621104,41.950313]},"n4445":{"id":"n4445","loc":[-85.621105,41.950331]},"n4446":{"id":"n4446","loc":[-85.620706,41.950328]},"n4447":{"id":"n4447","loc":[-85.620606,41.950327]},"n4448":{"id":"n4448","loc":[-85.620607,41.950261]},"n4449":{"id":"n4449","loc":[-85.620707,41.950262]},"n445":{"id":"n445","loc":[-85.634527,41.943623]},"n4450":{"id":"n4450","loc":[-85.620599,41.950336]},"n4451":{"id":"n4451","loc":[-85.620559,41.950336]},"n4452":{"id":"n4452","loc":[-85.620559,41.950299]},"n4453":{"id":"n4453","loc":[-85.620599,41.950299]},"n4454":{"id":"n4454","loc":[-85.620545,41.950357]},"n4455":{"id":"n4455","loc":[-85.620418,41.950357]},"n4456":{"id":"n4456","loc":[-85.620417,41.950257]},"n4457":{"id":"n4457","loc":[-85.620544,41.950256]},"n4458":{"id":"n4458","loc":[-85.620246,41.950131],"tags":{"highway":"crossing"}},"n4459":{"id":"n4459","loc":[-85.620252,41.950956]},"n446":{"id":"n446","loc":[-85.634608,41.943577]},"n4460":{"id":"n4460","loc":[-85.620245,41.950179]},"n4461":{"id":"n4461","loc":[-85.620246,41.950088]},"n4462":{"id":"n4462","loc":[-85.620251,41.950885]},"n4463":{"id":"n4463","loc":[-85.620103,41.950884],"tags":{"crossing":"zebra","highway":"crossing"}},"n4464":{"id":"n4464","loc":[-85.619992,41.950884]},"n4465":{"id":"n4465","loc":[-85.619704,41.951008]},"n4466":{"id":"n4466","loc":[-85.619599,41.951122]},"n4467":{"id":"n4467","loc":[-85.619264,41.951486]},"n4468":{"id":"n4468","loc":[-85.619179,41.951573],"tags":{"highway":"crossing"}},"n4469":{"id":"n4469","loc":[-85.620251,41.950999],"tags":{"highway":"crossing"}},"n447":{"id":"n447","loc":[-85.634555,41.943531]},"n4470":{"id":"n4470","loc":[-85.620249,41.951066]},"n4471":{"id":"n4471","loc":[-85.620256,41.951374]},"n4472":{"id":"n4472","loc":[-85.620249,41.951389]},"n4473":{"id":"n4473","loc":[-85.620249,41.951407]},"n4474":{"id":"n4474","loc":[-85.620255,41.951423]},"n4475":{"id":"n4475","loc":[-85.62026,41.951853]},"n4476":{"id":"n4476","loc":[-85.620262,41.951894],"tags":{"highway":"crossing"}},"n4477":{"id":"n4477","loc":[-85.620265,41.951957]},"n4478":{"id":"n4478","loc":[-85.620262,41.952135]},"n4479":{"id":"n4479","loc":[-85.620241,41.952424]},"n448":{"id":"n448","loc":[-85.634555,41.943482]},"n4480":{"id":"n4480","loc":[-85.620213,41.952583]},"n4481":{"id":"n4481","loc":[-85.620158,41.952754]},"n4482":{"id":"n4482","loc":[-85.620065,41.952942]},"n4483":{"id":"n4483","loc":[-85.619753,41.953439]},"n4484":{"id":"n4484","loc":[-85.619605,41.953626]},"n4485":{"id":"n4485","loc":[-85.619381,41.953834]},"n4486":{"id":"n4486","loc":[-85.619069,41.954066]},"n4487":{"id":"n4487","loc":[-85.618674,41.95429]},"n4488":{"id":"n4488","loc":[-85.621816,41.952389]},"n4489":{"id":"n4489","loc":[-85.6217,41.952386]},"n449":{"id":"n449","loc":[-85.634509,41.943427]},"n4490":{"id":"n4490","loc":[-85.621705,41.952306]},"n4491":{"id":"n4491","loc":[-85.621821,41.95231]},"n4492":{"id":"n4492","loc":[-85.621819,41.952272]},"n4493":{"id":"n4493","loc":[-85.621778,41.952272]},"n4494":{"id":"n4494","loc":[-85.621778,41.952199]},"n4495":{"id":"n4495","loc":[-85.621818,41.952199]},"n4496":{"id":"n4496","loc":[-85.621754,41.952281]},"n4497":{"id":"n4497","loc":[-85.621701,41.95228]},"n4498":{"id":"n4498","loc":[-85.621702,41.952197]},"n4499":{"id":"n4499","loc":[-85.621755,41.952197]},"n45":{"id":"n45","loc":[-85.636791,41.942792]},"n450":{"id":"n450","loc":[-85.63453,41.943365]},"n4500":{"id":"n4500","loc":[-85.628201,41.954694],"tags":{"highway":"stop","stop":"all","direction":"forward"}},"n4501":{"id":"n4501","loc":[-85.627921,41.954783],"tags":{"highway":"stop","stop":"all","direction":"backward"}},"n4502":{"id":"n4502","loc":[-85.62775,41.954696],"tags":{"highway":"stop","stop":"all","direction":"backward"}},"n4503":{"id":"n4503","loc":[-85.628046,41.954591],"tags":{"highway":"stop","stop":"all","direction":"forward"}},"n4504":{"id":"n4504","loc":[-85.631074,41.957428],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4505":{"id":"n4505","loc":[-85.630768,41.957429],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4506":{"id":"n4506","loc":[-85.629888,41.957432],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4507":{"id":"n4507","loc":[-85.629565,41.957433],"tags":{"highway":"stop","stop":"minor","direction":"forward"}},"n4508":{"id":"n4508","loc":[-85.629559,41.957343]},"n4509":{"id":"n4509","loc":[-85.628723,41.95735]},"n451":{"id":"n451","loc":[-85.634356,41.943468]},"n4510":{"id":"n4510","loc":[-85.62842,41.957515]},"n4511":{"id":"n4511","loc":[-85.627561,41.957525]},"n4512":{"id":"n4512","loc":[-85.630323,41.957508]},"n4513":{"id":"n4513","loc":[-85.630811,41.957506]},"n4514":{"id":"n4514","loc":[-85.630839,41.960874]},"n4515":{"id":"n4515","loc":[-85.631035,41.957506]},"n4516":{"id":"n4516","loc":[-85.632027,41.9575]},"n4517":{"id":"n4517","loc":[-85.631038,41.958066]},"n4518":{"id":"n4518","loc":[-85.630787,41.954769]},"n4519":{"id":"n4519","loc":[-85.630806,41.957342]},"n452":{"id":"n452","loc":[-85.634123,41.943596]},"n4520":{"id":"n4520","loc":[-85.630809,41.957428],"tags":{"highway":"crossing"}},"n4521":{"id":"n4521","loc":[-85.630912,41.957506],"tags":{"highway":"crossing"}},"n4522":{"id":"n4522","loc":[-85.631033,41.957428],"tags":{"highway":"crossing"}},"n4523":{"id":"n4523","loc":[-85.631032,41.957341]},"n4524":{"id":"n4524","loc":[-85.63091,41.957341],"tags":{"highway":"crossing"}},"n4525":{"id":"n4525","loc":[-85.631027,41.95597]},"n4526":{"id":"n4526","loc":[-85.631027,41.955913],"tags":{"highway":"crossing"}},"n4527":{"id":"n4527","loc":[-85.631025,41.955873]},"n4528":{"id":"n4528","loc":[-85.631073,41.955913],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4529":{"id":"n4529","loc":[-85.631007,41.954766]},"n453":{"id":"n453","loc":[-85.634709,41.943926]},"n4530":{"id":"n4530","loc":[-85.630881,41.954768],"tags":{"highway":"crossing"}},"n4531":{"id":"n4531","loc":[-85.628022,41.954776]},"n4532":{"id":"n4532","loc":[-85.627385,41.95584]},"n4533":{"id":"n4533","loc":[-85.627329,41.955937]},"n4534":{"id":"n4534","loc":[-85.626583,41.957153]},"n4535":{"id":"n4535","loc":[-85.629675,41.954564],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4536":{"id":"n4536","loc":[-85.630881,41.954806],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4537":{"id":"n4537","loc":[-85.630879,41.954564],"tags":{"highway":"stop","stop":"minor","direction":"forward"}},"n4538":{"id":"n4538","loc":[-85.630784,41.954682],"tags":{"highway":"crossing"}},"n4539":{"id":"n4539","loc":[-85.63078,41.954595]},"n454":{"id":"n454","loc":[-85.63525,41.943855]},"n4540":{"id":"n4540","loc":[-85.630879,41.954595],"tags":{"highway":"crossing"}},"n4541":{"id":"n4541","loc":[-85.631004,41.954594]},"n4542":{"id":"n4542","loc":[-85.631006,41.954681],"tags":{"highway":"crossing"}},"n4543":{"id":"n4543","loc":[-85.631045,41.959036],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4544":{"id":"n4544","loc":[-85.632071,41.959029],"tags":{"highway":"stop","stop":"minor","direction":"forward"}},"n4545":{"id":"n4545","loc":[-85.632257,41.959027],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4546":{"id":"n4546","loc":[-85.631966,41.957427],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4547":{"id":"n4547","loc":[-85.632297,41.957426],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4548":{"id":"n4548","loc":[-85.631976,41.955911],"tags":{"highway":"give_way","direction":"forward"}},"n4549":{"id":"n4549","loc":[-85.632272,41.955911],"tags":{"highway":"give_way","direction":"backward"}},"n455":{"id":"n455","loc":[-85.635224,41.943869]},"n4550":{"id":"n4550","loc":[-85.632097,41.954805],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4551":{"id":"n4551","loc":[-85.632094,41.954566],"tags":{"highway":"stop","stop":"minor","direction":"forward"}},"n4552":{"id":"n4552","loc":[-85.626519,41.957256]},"n4553":{"id":"n4553","loc":[-85.625334,41.959165]},"n4554":{"id":"n4554","loc":[-85.626483,41.95806]},"n4555":{"id":"n4555","loc":[-85.626481,41.958175]},"n4556":{"id":"n4556","loc":[-85.626412,41.958174]},"n4557":{"id":"n4557","loc":[-85.626412,41.958202]},"n4558":{"id":"n4558","loc":[-85.62628,41.958201]},"n4559":{"id":"n4559","loc":[-85.626283,41.958057]},"n456":{"id":"n456","loc":[-85.638854,41.943104]},"n4560":{"id":"n4560","loc":[-85.622763,41.95109],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4561":{"id":"n4561","loc":[-85.622858,41.950876],"tags":{"emergency":"fire_hydrant"}},"n4562":{"id":"n4562","loc":[-85.624073,41.950393]},"n4563":{"id":"n4563","loc":[-85.624077,41.950924]},"n4564":{"id":"n4564","loc":[-85.624599,41.950984],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4565":{"id":"n4565","loc":[-85.624831,41.95119],"tags":{"emergency":"fire_hydrant"}},"n4566":{"id":"n4566","loc":[-85.624437,41.952568],"tags":{"emergency":"fire_hydrant"}},"n4567":{"id":"n4567","loc":[-85.624077,41.954606],"tags":{"emergency":"fire_hydrant"}},"n4568":{"id":"n4568","loc":[-85.624263,41.954888]},"n4569":{"id":"n4569","loc":[-85.624206,41.954919]},"n457":{"id":"n457","loc":[-85.635186,41.943901]},"n4570":{"id":"n4570","loc":[-85.624154,41.954865]},"n4571":{"id":"n4571","loc":[-85.624212,41.954835]},"n4572":{"id":"n4572","loc":[-85.622442,41.954401],"tags":{"emergency":"fire_hydrant"}},"n4573":{"id":"n4573","loc":[-85.619751,41.954658],"tags":{"emergency":"fire_hydrant"}},"n4574":{"id":"n4574","loc":[-85.617785,41.954534]},"n4575":{"id":"n4575","loc":[-85.617416,41.954721]},"n4576":{"id":"n4576","loc":[-85.617662,41.95474]},"n4577":{"id":"n4577","loc":[-85.618014,41.954717]},"n4578":{"id":"n4578","loc":[-85.617886,41.954671]},"n4579":{"id":"n4579","loc":[-85.617831,41.954612]},"n458":{"id":"n458","loc":[-85.635162,41.943917]},"n4580":{"id":"n4580","loc":[-85.617968,41.954752]},"n4581":{"id":"n4581","loc":[-85.617815,41.954752]},"n4582":{"id":"n4582","loc":[-85.617938,41.954695]},"n4583":{"id":"n4583","loc":[-85.617856,41.954642],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4584":{"id":"n4584","loc":[-85.619116,41.954164],"tags":{"man_made":"flagpole"}},"n4585":{"id":"n4585","loc":[-85.619569,41.953255],"tags":{"emergency":"fire_hydrant"}},"n4586":{"id":"n4586","loc":[-85.620352,41.951894],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4587":{"id":"n4587","loc":[-85.620485,41.951948],"tags":{"emergency":"fire_hydrant"}},"n4588":{"id":"n4588","loc":[-85.620316,41.950999],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4589":{"id":"n4589","loc":[-85.620311,41.950131],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n459":{"id":"n459","loc":[-85.634856,41.943905]},"n4590":{"id":"n4590","loc":[-85.620374,41.95018],"tags":{"emergency":"fire_hydrant"}},"n4591":{"id":"n4591","loc":[-85.620301,41.949239],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4592":{"id":"n4592","loc":[-85.620278,41.947443],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4593":{"id":"n4593","loc":[-85.619844,41.947444],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4594":{"id":"n4594","loc":[-85.620191,41.947352],"tags":{"emergency":"fire_hydrant"}},"n4595":{"id":"n4595","loc":[-85.622819,41.947493],"tags":{"emergency":"fire_hydrant"}},"n4596":{"id":"n4596","loc":[-85.622744,41.947541],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4597":{"id":"n4597","loc":[-85.622739,41.947316],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4598":{"id":"n4598","loc":[-85.622909,41.948333],"tags":{"highway":"give_way"}},"n4599":{"id":"n4599","loc":[-85.622593,41.948333],"tags":{"highway":"give_way"}},"n46":{"id":"n46","loc":[-85.637131,41.94307]},"n460":{"id":"n460","loc":[-85.634811,41.944007]},"n4600":{"id":"n4600","loc":[-85.622835,41.948387],"tags":{"emergency":"fire_hydrant"}},"n4601":{"id":"n4601","loc":[-85.622768,41.949125],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4602":{"id":"n4602","loc":[-85.622769,41.949325],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4603":{"id":"n4603","loc":[-85.622837,41.949329],"tags":{"emergency":"fire_hydrant"}},"n4604":{"id":"n4604","loc":[-85.622614,41.950113],"tags":{"highway":"give_way","direction":"forward"}},"n4605":{"id":"n4605","loc":[-85.624777,41.949219],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4606":{"id":"n4606","loc":[-85.624849,41.949106],"tags":{"emergency":"fire_hydrant"}},"n4607":{"id":"n4607","loc":[-85.624858,41.950119],"tags":{"emergency":"fire_hydrant"}},"n4608":{"id":"n4608","loc":[-85.624752,41.948334],"tags":{"highway":"give_way"}},"n4609":{"id":"n4609","loc":[-85.624845,41.948422],"tags":{"emergency":"fire_hydrant"}},"n461":{"id":"n461","loc":[-85.634987,41.943112]},"n4610":{"id":"n4610","loc":[-85.62484,41.947539],"tags":{"emergency":"fire_hydrant"}},"n4611":{"id":"n4611","loc":[-85.62476,41.947428],"tags":{"highway":"stop","stop":"minor","direction":"forward"}},"n4612":{"id":"n4612","loc":[-85.620286,41.950926]},"n4613":{"id":"n4613","loc":[-85.618237,41.950963]},"n4614":{"id":"n4614","loc":[-85.618107,41.950876]},"n4615":{"id":"n4615","loc":[-85.618131,41.950393]},"n4616":{"id":"n4616","loc":[-85.618232,41.949913]},"n4617":{"id":"n4617","loc":[-85.619138,41.950212]},"n4618":{"id":"n4618","loc":[-85.619299,41.950388]},"n4619":{"id":"n4619","loc":[-85.619306,41.950897]},"n462":{"id":"n462","loc":[-85.634698,41.943194]},"n4620":{"id":"n4620","loc":[-85.619155,41.950958]},"n4621":{"id":"n4621","loc":[-85.620079,41.947715]},"n4622":{"id":"n4622","loc":[-85.619674,41.947728]},"n4623":{"id":"n4623","loc":[-85.619634,41.947735]},"n4624":{"id":"n4624","loc":[-85.619587,41.947756],"tags":{"barrier":"gate"}},"n4625":{"id":"n4625","loc":[-85.61953,41.947796]},"n4626":{"id":"n4626","loc":[-85.619475,41.947847]},"n4627":{"id":"n4627","loc":[-85.619433,41.947903]},"n4628":{"id":"n4628","loc":[-85.619402,41.947982]},"n4629":{"id":"n4629","loc":[-85.619394,41.948043]},"n463":{"id":"n463","loc":[-85.634632,41.943219]},"n4630":{"id":"n4630","loc":[-85.619395,41.948476]},"n4631":{"id":"n4631","loc":[-85.618367,41.947452]},"n4632":{"id":"n4632","loc":[-85.618371,41.947567],"tags":{"barrier":"gate"}},"n4633":{"id":"n4633","loc":[-85.618341,41.947622]},"n4634":{"id":"n4634","loc":[-85.618138,41.94773]},"n4635":{"id":"n4635","loc":[-85.618078,41.947814]},"n4636":{"id":"n4636","loc":[-85.618072,41.948009]},"n4637":{"id":"n4637","loc":[-85.618269,41.947666]},"n4638":{"id":"n4638","loc":[-85.618099,41.947765]},"n4639":{"id":"n4639","loc":[-85.618378,41.954453]},"n464":{"id":"n464","loc":[-85.63459,41.943239]},"n4640":{"id":"n4640","loc":[-85.618198,41.95453]},"n4641":{"id":"n4641","loc":[-85.618212,41.954623]},"n4642":{"id":"n4642","loc":[-85.635211,41.943103],"tags":{"leisure":"picnic_table"}},"n4643":{"id":"n4643","loc":[-85.635345,41.943448],"tags":{"leisure":"picnic_table"}},"n4644":{"id":"n4644","loc":[-85.635901,41.943353],"tags":{"amenity":"bench"}},"n4645":{"id":"n4645","loc":[-85.635815,41.942638],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4646":{"id":"n4646","loc":[-85.635355,41.942044],"tags":{"leisure":"picnic_table"}},"n4647":{"id":"n4647","loc":[-85.635206,41.942045],"tags":{"leisure":"picnic_table"}},"n4648":{"id":"n4648","loc":[-85.63504,41.941992],"tags":{"leisure":"picnic_table"}},"n4649":{"id":"n4649","loc":[-85.635185,41.942001]},"n465":{"id":"n465","loc":[-85.634555,41.943263]},"n4650":{"id":"n4650","loc":[-85.635176,41.942021]},"n4651":{"id":"n4651","loc":[-85.635127,41.942008]},"n4652":{"id":"n4652","loc":[-85.635136,41.941988]},"n4653":{"id":"n4653","loc":[-85.635,41.941709],"tags":{"emergency":"fire_hydrant"}},"n4654":{"id":"n4654","loc":[-85.634893,41.941801]},"n4655":{"id":"n4655","loc":[-85.634937,41.941843]},"n4656":{"id":"n4656","loc":[-85.634963,41.941859]},"n4657":{"id":"n4657","loc":[-85.635027,41.941904]},"n4658":{"id":"n4658","loc":[-85.63494,41.94187]},"n4659":{"id":"n4659","loc":[-85.634951,41.941871]},"n466":{"id":"n466","loc":[-85.634526,41.943289]},"n4660":{"id":"n4660","loc":[-85.634753,41.941701],"tags":{"amenity":"drinking_water"}},"n4661":{"id":"n4661","loc":[-85.634717,41.941804],"tags":{"amenity":"bench"}},"n4662":{"id":"n4662","loc":[-85.634554,41.941883],"tags":{"amenity":"bench"}},"n4663":{"id":"n4663","loc":[-85.635002,41.941579],"tags":{"amenity":"fountain"}},"n4664":{"id":"n4664","loc":[-85.635258,41.94188],"tags":{"amenity":"waste_basket"}},"n4665":{"id":"n4665","loc":[-85.635262,41.941581],"tags":{"amenity":"bench"}},"n4666":{"id":"n4666","loc":[-85.635319,41.941744],"tags":{"amenity":"bench"}},"n4667":{"id":"n4667","loc":[-85.634702,41.941473],"tags":{"amenity":"waste_basket"}},"n4668":{"id":"n4668","loc":[-85.633981,41.941966],"tags":{"amenity":"bench"}},"n4669":{"id":"n4669","loc":[-85.63388,41.941743]},"n467":{"id":"n467","loc":[-85.635163,41.944985]},"n4670":{"id":"n4670","loc":[-85.633746,41.941741]},"n4671":{"id":"n4671","loc":[-85.633749,41.941664]},"n4672":{"id":"n4672","loc":[-85.633883,41.941667]},"n4673":{"id":"n4673","loc":[-85.634283,41.941183],"tags":{"leisure":"picnic_table"}},"n4674":{"id":"n4674","loc":[-85.634046,41.941102],"tags":{"amenity":"bbq"}},"n4675":{"id":"n4675","loc":[-85.63401,41.941093],"tags":{"amenity":"bbq"}},"n4676":{"id":"n4676","loc":[-85.633408,41.940862],"tags":{"amenity":"bench"}},"n4677":{"id":"n4677","loc":[-85.633359,41.940651],"tags":{"amenity":"bench"}},"n4678":{"id":"n4678","loc":[-85.634109,41.940831]},"n4679":{"id":"n4679","loc":[-85.63396,41.940867]},"n468":{"id":"n468","loc":[-85.635095,41.945035]},"n4680":{"id":"n4680","loc":[-85.633816,41.940913]},"n4681":{"id":"n4681","loc":[-85.633237,41.940455]},"n4682":{"id":"n4682","loc":[-85.634453,41.940025],"tags":{"emergency":"fire_hydrant"}},"n4683":{"id":"n4683","loc":[-85.635692,41.940218],"tags":{"emergency":"fire_hydrant"}},"n4684":{"id":"n4684","loc":[-85.635566,41.940102],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4685":{"id":"n4685","loc":[-85.635961,41.940125],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4686":{"id":"n4686","loc":[-85.635883,41.94012],"tags":{"crossing":"zebra","highway":"crossing"}},"n4687":{"id":"n4687","loc":[-85.635883,41.94006]},"n4688":{"id":"n4688","loc":[-85.635768,41.940051],"tags":{"crossing":"zebra","highway":"crossing"}},"n4689":{"id":"n4689","loc":[-85.635669,41.940043]},"n469":{"id":"n469","loc":[-85.634269,41.944431]},"n4690":{"id":"n4690","loc":[-85.635661,41.940107],"tags":{"crossing":"zebra","highway":"crossing"}},"n4691":{"id":"n4691","loc":[-85.635424,41.941005],"tags":{"amenity":"fountain"}},"n4692":{"id":"n4692","loc":[-85.635542,41.941371],"tags":{"amenity":"bench"}},"n4693":{"id":"n4693","loc":[-85.635709,41.941341],"tags":{"emergency":"fire_hydrant"}},"n4694":{"id":"n4694","loc":[-85.637038,41.942513],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4695":{"id":"n4695","loc":[-85.637174,41.941354],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4696":{"id":"n4696","loc":[-85.637091,41.941273],"tags":{"emergency":"fire_hydrant"}},"n4697":{"id":"n4697","loc":[-85.638058,41.941346],"tags":{"highway":"give_way","direction":"forward"}},"n4698":{"id":"n4698","loc":[-85.638359,41.941344],"tags":{"highway":"give_way","direction":"backward"}},"n4699":{"id":"n4699","loc":[-85.638288,41.941236],"tags":{"emergency":"fire_hydrant"}},"n47":{"id":"n47","loc":[-85.636693,41.943073]},"n470":{"id":"n470","loc":[-85.634352,41.944376]},"n4700":{"id":"n4700","loc":[-85.63935,41.94128],"tags":{"emergency":"fire_hydrant"}},"n4701":{"id":"n4701","loc":[-85.639277,41.941337],"tags":{"highway":"give_way","direction":"forward"}},"n4702":{"id":"n4702","loc":[-85.639548,41.941334],"tags":{"highway":"give_way","direction":"backward"}},"n4703":{"id":"n4703","loc":[-85.642191,41.940039]},"n4704":{"id":"n4704","loc":[-85.640585,41.941263],"tags":{"emergency":"fire_hydrant"}},"n4705":{"id":"n4705","loc":[-85.64049,41.941327],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4706":{"id":"n4706","loc":[-85.640803,41.941324],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4707":{"id":"n4707","loc":[-85.641717,41.941317],"tags":{"highway":"stop","direction":"forward","stop":"all"}},"n4708":{"id":"n4708","loc":[-85.641846,41.941415],"tags":{"highway":"stop","direction":"backward","stop":"all"}},"n4709":{"id":"n4709","loc":[-85.641756,41.941392],"tags":{"emergency":"fire_hydrant"}},"n471":{"id":"n471","loc":[-85.634747,41.944561],"tags":{"railway":"crossing"}},"n4710":{"id":"n4710","loc":[-85.642014,41.941313],"tags":{"highway":"stop","direction":"forward","stop":"all"}},"n4711":{"id":"n4711","loc":[-85.641854,41.942455],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4712":{"id":"n4712","loc":[-85.641859,41.942739],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4713":{"id":"n4713","loc":[-85.640754,41.942707],"tags":{"emergency":"fire_hydrant"}},"n4714":{"id":"n4714","loc":[-85.640669,41.942716],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4715":{"id":"n4715","loc":[-85.640664,41.942478],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4716":{"id":"n4716","loc":[-85.63964,41.94274],"tags":{"man_made":"flagpole"}},"n4717":{"id":"n4717","loc":[-85.639455,41.942731],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4718":{"id":"n4718","loc":[-85.63945,41.942492],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4719":{"id":"n4719","loc":[-85.639527,41.942505],"tags":{"emergency":"fire_hydrant"}},"n472":{"id":"n472","loc":[-85.634667,41.944613]},"n4720":{"id":"n4720","loc":[-85.638238,41.942745],"tags":{"highway":"stop","direction":"backward","stop":"minor"}},"n4721":{"id":"n4721","loc":[-85.638233,41.942511],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4722":{"id":"n4722","loc":[-85.638018,41.94299],"tags":{"amenity":"waste_disposal"}},"n4723":{"id":"n4723","loc":[-85.637918,41.944152],"tags":{"amenity":"waste_basket"}},"n4724":{"id":"n4724","loc":[-85.635902,41.943291],"tags":{"leisure":"picnic_table"}},"n4725":{"id":"n4725","loc":[-85.63704,41.942741],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4726":{"id":"n4726","loc":[-85.633467,41.943818],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4727":{"id":"n4727","loc":[-85.633987,41.943531],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4728":{"id":"n4728","loc":[-85.632154,41.943539],"tags":{"emergency":"fire_hydrant"}},"n4729":{"id":"n4729","loc":[-85.633567,41.944641],"tags":{"amenity":"bench"}},"n473":{"id":"n473","loc":[-85.634161,41.944371]},"n4730":{"id":"n4730","loc":[-85.633127,41.944574],"tags":{"amenity":"bench"}},"n4731":{"id":"n4731","loc":[-85.633439,41.944871],"tags":{"amenity":"bench"}},"n4732":{"id":"n4732","loc":[-85.633676,41.944799],"tags":{"amenity":"waste_basket"}},"n4733":{"id":"n4733","loc":[-85.633466,41.944862],"tags":{"amenity":"waste_basket"}},"n4734":{"id":"n4734","loc":[-85.633451,41.944847],"tags":{"emergency":"fire_hydrant"}},"n4735":{"id":"n4735","loc":[-85.634202,41.945543],"tags":{"amenity":"waste_basket"}},"n4736":{"id":"n4736","loc":[-85.634652,41.945472],"tags":{"leisure":"picnic_table"}},"n4737":{"id":"n4737","loc":[-85.6347,41.945445],"tags":{"leisure":"picnic_table"}},"n4738":{"id":"n4738","loc":[-85.634646,41.945662],"tags":{"emergency":"fire_hydrant"}},"n4739":{"id":"n4739","loc":[-85.634673,41.945687],"tags":{"amenity":"waste_basket"}},"n474":{"id":"n474","loc":[-85.633861,41.944117]},"n4740":{"id":"n4740","loc":[-85.63449,41.945827],"tags":{"amenity":"clock","display":"analog"}},"n4741":{"id":"n4741","loc":[-85.63481,41.946056],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4742":{"id":"n4742","loc":[-85.634814,41.946176],"tags":{"amenity":"post_box"}},"n4743":{"id":"n4743","loc":[-85.638744,41.945328]},"n4744":{"id":"n4744","loc":[-85.63867,41.945228],"tags":{"amenity":"bench"}},"n4745":{"id":"n4745","loc":[-85.639487,41.945042],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4746":{"id":"n4746","loc":[-85.639635,41.94387],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n4747":{"id":"n4747","loc":[-85.639549,41.943756],"tags":{"emergency":"fire_hydrant"}},"n4748":{"id":"n4748","loc":[-85.64055,41.943862],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4749":{"id":"n4749","loc":[-85.640864,41.943859],"tags":{"highway":"stop","stop":"minor","direction":"backward"}},"n475":{"id":"n475","loc":[-85.633906,41.943535]},"n4750":{"id":"n4750","loc":[-85.640718,41.945022],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4751":{"id":"n4751","loc":[-85.640664,41.945076],"tags":{"emergency":"fire_hydrant"}},"n4752":{"id":"n4752","loc":[-85.641913,41.94502],"tags":{"highway":"stop","direction":"forward","stop":"minor"}},"n4753":{"id":"n4753","loc":[-85.641838,41.945076],"tags":{"emergency":"fire_hydrant"}},"n4754":{"id":"n4754","loc":[-85.642045,41.94385],"tags":{"highway":"give_way","direction":"backward"}},"n4755":{"id":"n4755","loc":[-85.641738,41.943852],"tags":{"highway":"give_way","direction":"forward"}},"n4756":{"id":"n4756","loc":[-85.642928,41.943843],"tags":{"highway":"stop","stop":"minor","direction":"forward"}},"n4757":{"id":"n4757","loc":[-85.64305,41.943902],"tags":{"emergency":"fire_hydrant"}},"n4758":{"id":"n4758","loc":[-85.642986,41.945105],"tags":{"highway":"stop","direction":"backward","stop":"all"}},"n4759":{"id":"n4759","loc":[-85.643136,41.94502],"tags":{"highway":"stop","stop":"all","direction":"forward"}},"n476":{"id":"n476","loc":[-85.63423,41.943692]},"n4760":{"id":"n4760","loc":[-85.63169,41.947812]},"n4761":{"id":"n4761","loc":[-85.631307,41.947655]},"n4762":{"id":"n4762","loc":[-85.631407,41.947413]},"n4763":{"id":"n4763","loc":[-85.631173,41.947306]},"n4764":{"id":"n4764","loc":[-85.631316,41.947145]},"n4765":{"id":"n4765","loc":[-85.631476,41.947087]},"n4766":{"id":"n4766","loc":[-85.631793,41.946871]},"n4767":{"id":"n4767","loc":[-85.631884,41.946723]},"n4768":{"id":"n4768","loc":[-85.631814,41.946397]},"n4769":{"id":"n4769","loc":[-85.631382,41.947685]},"n477":{"id":"n477","loc":[-85.635096,41.942814]},"n4770":{"id":"n4770","loc":[-85.63109,41.947819]},"n4771":{"id":"n4771","loc":[-85.630921,41.947961]},"n4772":{"id":"n4772","loc":[-85.630249,41.947709]},"n4773":{"id":"n4773","loc":[-85.630149,41.947451]},"n4774":{"id":"n4774","loc":[-85.629733,41.947339]},"n4775":{"id":"n4775","loc":[-85.629755,41.946948]},"n4776":{"id":"n4776","loc":[-85.630457,41.947103]},"n4777":{"id":"n4777","loc":[-85.630934,41.946939]},"n4778":{"id":"n4778","loc":[-85.631277,41.946852]},"n4779":{"id":"n4779","loc":[-85.63142,41.946781]},"n478":{"id":"n478","loc":[-85.635058,41.942795]},"n4780":{"id":"n4780","loc":[-85.631116,41.946474]},"n4781":{"id":"n4781","loc":[-85.63073,41.945965]},"n4782":{"id":"n4782","loc":[-85.631337,41.94571]},"n4783":{"id":"n4783","loc":[-85.631589,41.945487]},"n4784":{"id":"n4784","loc":[-85.632278,41.945784]},"n4785":{"id":"n4785","loc":[-85.632105,41.946034]},"n4786":{"id":"n4786","loc":[-85.632532,41.946198]},"n4787":{"id":"n4787","loc":[-85.632566,41.946151]},"n4788":{"id":"n4788","loc":[-85.632684,41.946196]},"n4789":{"id":"n4789","loc":[-85.628676,41.947106]},"n479":{"id":"n479","loc":[-85.635002,41.94279]},"n4790":{"id":"n4790","loc":[-85.628973,41.946476]},"n4791":{"id":"n4791","loc":[-85.629094,41.946079]},"n4792":{"id":"n4792","loc":[-85.629226,41.94578]},"n4793":{"id":"n4793","loc":[-85.629479,41.945682]},"n4794":{"id":"n4794","loc":[-85.630606,41.94569]},"n4795":{"id":"n4795","loc":[-85.631255,41.945588]},"n4796":{"id":"n4796","loc":[-85.631546,41.945281]},"n4797":{"id":"n4797","loc":[-85.631629,41.944823]},"n4798":{"id":"n4798","loc":[-85.631766,41.944958]},"n4799":{"id":"n4799","loc":[-85.631689,41.945318]},"n48":{"id":"n48","loc":[-85.636689,41.94276]},"n480":{"id":"n480","loc":[-85.634908,41.94279]},"n4800":{"id":"n4800","loc":[-85.615069,41.945527]},"n4801":{"id":"n4801","loc":[-85.615058,41.946677]},"n4802":{"id":"n4802","loc":[-85.613692,41.946689]},"n4803":{"id":"n4803","loc":[-85.613475,41.946531]},"n4804":{"id":"n4804","loc":[-85.611717,41.946252]},"n4805":{"id":"n4805","loc":[-85.611353,41.946385]},"n4806":{"id":"n4806","loc":[-85.611304,41.947397]},"n4807":{"id":"n4807","loc":[-85.610564,41.947401]},"n4808":{"id":"n4808","loc":[-85.610553,41.947122]},"n4809":{"id":"n4809","loc":[-85.610194,41.946992]},"n481":{"id":"n481","loc":[-85.634478,41.942342]},"n4810":{"id":"n4810","loc":[-85.609976,41.946628]},"n4811":{"id":"n4811","loc":[-85.609769,41.946523]},"n4812":{"id":"n4812","loc":[-85.609307,41.946523]},"n4813":{"id":"n4813","loc":[-85.609035,41.946462]},"n4814":{"id":"n4814","loc":[-85.609018,41.943277]},"n4815":{"id":"n4815","loc":[-85.609617,41.943423]},"n4816":{"id":"n4816","loc":[-85.610471,41.943447]},"n4817":{"id":"n4817","loc":[-85.621491,41.949168]},"n4818":{"id":"n4818","loc":[-85.620266,41.94917]},"n4819":{"id":"n4819","loc":[-85.620262,41.947557]},"n482":{"id":"n482","loc":[-85.634521,41.942254]},"n4820":{"id":"n4820","loc":[-85.620825,41.947556]},"n4821":{"id":"n4821","loc":[-85.620827,41.948371]},"n4822":{"id":"n4822","loc":[-85.621489,41.94837]},"n4823":{"id":"n4823","loc":[-85.622865,41.950928]},"n4824":{"id":"n4824","loc":[-85.622858,41.949744]},"n4825":{"id":"n4825","loc":[-85.623696,41.949714]},"n4826":{"id":"n4826","loc":[-85.623696,41.949647]},"n4827":{"id":"n4827","loc":[-85.624019,41.949647]},"n4828":{"id":"n4828","loc":[-85.624024,41.950093]},"n4829":{"id":"n4829","loc":[-85.622885,41.949711]},"n483":{"id":"n483","loc":[-85.63425,41.941819]},"n4830":{"id":"n4830","loc":[-85.624584,41.951049]},"n4831":{"id":"n4831","loc":[-85.624669,41.9511]},"n4832":{"id":"n4832","loc":[-85.624316,41.952218]},"n4833":{"id":"n4833","loc":[-85.623819,41.952094]},"n4834":{"id":"n4834","loc":[-85.623385,41.952101]},"n4835":{"id":"n4835","loc":[-85.623456,41.951238]},"n4836":{"id":"n4836","loc":[-85.623535,41.951051]},"n4837":{"id":"n4837","loc":[-85.624693,41.950921]},"n4838":{"id":"n4838","loc":[-85.624727,41.950897]},"n4839":{"id":"n4839","loc":[-85.624869,41.950341]},"n484":{"id":"n484","loc":[-85.634324,41.942131]},"n4840":{"id":"n4840","loc":[-85.624859,41.949284]},"n4841":{"id":"n4841","loc":[-85.624788,41.949262]},"n4842":{"id":"n4842","loc":[-85.62402,41.949265]},"n4843":{"id":"n4843","loc":[-85.610382,41.954663]},"n4844":{"id":"n4844","loc":[-85.605675,41.954667]},"n4845":{"id":"n4845","loc":[-85.605669,41.949407]},"n4846":{"id":"n4846","loc":[-85.610376,41.949404]},"n4847":{"id":"n4847","loc":[-85.605552,41.958536]},"n4848":{"id":"n4848","loc":[-85.595755,41.958588]},"n4849":{"id":"n4849","loc":[-85.595732,41.956419]},"n485":{"id":"n485","loc":[-85.634211,41.941374]},"n4850":{"id":"n4850","loc":[-85.596908,41.955605]},"n4851":{"id":"n4851","loc":[-85.597723,41.955596]},"n4852":{"id":"n4852","loc":[-85.597715,41.954967]},"n4853":{"id":"n4853","loc":[-85.5874,41.955018]},"n4854":{"id":"n4854","loc":[-85.586615,41.955124]},"n4855":{"id":"n4855","loc":[-85.58613,41.955293]},"n4856":{"id":"n4856","loc":[-85.586166,41.962122]},"n4857":{"id":"n4857","loc":[-85.587008,41.955052]},"n4858":{"id":"n4858","loc":[-85.591685,41.95499]},"n4859":{"id":"n4859","loc":[-85.591718,41.956649]},"n486":{"id":"n486","loc":[-85.634085,41.940704]},"n4860":{"id":"n4860","loc":[-85.591133,41.956649]},"n4861":{"id":"n4861","loc":[-85.591061,41.95582]},"n4862":{"id":"n4862","loc":[-85.590677,41.95613]},"n4863":{"id":"n4863","loc":[-85.590826,41.956369]},"n4864":{"id":"n4864","loc":[-85.591016,41.954991]},"n4865":{"id":"n4865","loc":[-85.587656,41.954855]},"n4866":{"id":"n4866","loc":[-85.5964,41.955274]},"n4867":{"id":"n4867","loc":[-85.58776,41.96178]},"n4868":{"id":"n4868","loc":[-85.601172,41.960448]},"n4869":{"id":"n4869","loc":[-85.589489,41.960478]},"n487":{"id":"n487","loc":[-85.635567,41.940944]},"n4870":{"id":"n4870","loc":[-85.586664,41.960493]},"n4871":{"id":"n4871","loc":[-85.591227,41.95676]},"n4872":{"id":"n4872","loc":[-85.589424,41.958093]},"n4873":{"id":"n4873","loc":[-85.588779,41.957611]},"n4874":{"id":"n4874","loc":[-85.590583,41.956278]},"n4875":{"id":"n4875","loc":[-85.590759,41.957106]},"n4876":{"id":"n4876","loc":[-85.592213,41.958218]},"n4877":{"id":"n4877","loc":[-85.592262,41.958279]},"n4878":{"id":"n4878","loc":[-85.592304,41.958358]},"n4879":{"id":"n4879","loc":[-85.592351,41.95849]},"n488":{"id":"n488","loc":[-85.635542,41.940919]},"n4880":{"id":"n4880","loc":[-85.592363,41.958605]},"n4881":{"id":"n4881","loc":[-85.592383,41.96047]},"n4882":{"id":"n4882","loc":[-85.592376,41.959808]},"n4883":{"id":"n4883","loc":[-85.600825,41.959779]},"n4884":{"id":"n4884","loc":[-85.601084,41.959844]},"n4885":{"id":"n4885","loc":[-85.601144,41.959908]},"n4886":{"id":"n4886","loc":[-85.601164,41.960008]},"n4887":{"id":"n4887","loc":[-85.601162,41.960125]},"n4888":{"id":"n4888","loc":[-85.601134,41.960221]},"n4889":{"id":"n4889","loc":[-85.600993,41.960353]},"n489":{"id":"n489","loc":[-85.635514,41.940906]},"n4890":{"id":"n4890","loc":[-85.600794,41.960449]},"n4891":{"id":"n4891","loc":[-85.60098,41.959792]},"n4892":{"id":"n4892","loc":[-85.601067,41.960294]},"n4893":{"id":"n4893","loc":[-85.596829,41.959793]},"n4894":{"id":"n4894","loc":[-85.596839,41.960459]},"n4895":{"id":"n4895","loc":[-85.589364,41.958048]},"n4896":{"id":"n4896","loc":[-85.587374,41.959511]},"n4897":{"id":"n4897","loc":[-85.587286,41.959564]},"n4898":{"id":"n4898","loc":[-85.587163,41.959632]},"n4899":{"id":"n4899","loc":[-85.586694,41.959865]},"n49":{"id":"n49","loc":[-85.637127,41.942757]},"n490":{"id":"n490","loc":[-85.635469,41.940896]},"n4900":{"id":"n4900","loc":[-85.586634,41.959921]},"n4901":{"id":"n4901","loc":[-85.586607,41.960001]},"n4902":{"id":"n4902","loc":[-85.586599,41.960099]},"n4903":{"id":"n4903","loc":[-85.586602,41.96034]},"n4904":{"id":"n4904","loc":[-85.586669,41.960439]},"n4905":{"id":"n4905","loc":[-85.586758,41.960493]},"n4906":{"id":"n4906","loc":[-85.586618,41.960391]},"n4907":{"id":"n4907","loc":[-85.591201,41.956352]},"n4908":{"id":"n4908","loc":[-85.59112,41.954843]},"n4909":{"id":"n4909","loc":[-85.591536,41.956349]},"n491":{"id":"n491","loc":[-85.635667,41.940826]},"n4910":{"id":"n4910","loc":[-85.590953,41.956354]},"n4911":{"id":"n4911","loc":[-85.591468,41.956406]},"n4912":{"id":"n4912","loc":[-85.591469,41.956478]},"n4913":{"id":"n4913","loc":[-85.591123,41.956481]},"n4914":{"id":"n4914","loc":[-85.591121,41.956409]},"n4915":{"id":"n4915","loc":[-85.590826,41.955954]},"n4916":{"id":"n4916","loc":[-85.590612,41.956115]},"n4917":{"id":"n4917","loc":[-85.590402,41.955962]},"n4918":{"id":"n4918","loc":[-85.590622,41.955804]},"n4919":{"id":"n4919","loc":[-85.59011,41.956502]},"n492":{"id":"n492","loc":[-85.636197,41.940599]},"n4920":{"id":"n4920","loc":[-85.589877,41.956668]},"n4921":{"id":"n4921","loc":[-85.589777,41.95659]},"n4922":{"id":"n4922","loc":[-85.59001,41.956424]},"n4923":{"id":"n4923","loc":[-85.589595,41.956427]},"n4924":{"id":"n4924","loc":[-85.589434,41.956549]},"n4925":{"id":"n4925","loc":[-85.589262,41.956424]},"n4926":{"id":"n4926","loc":[-85.589422,41.956302]},"n4927":{"id":"n4927","loc":[-85.589358,41.956286]},"n4928":{"id":"n4928","loc":[-85.5892,41.956408]},"n4929":{"id":"n4929","loc":[-85.589032,41.956288]},"n493":{"id":"n493","loc":[-85.6362,41.940686]},"n4930":{"id":"n4930","loc":[-85.58919,41.956166]},"n4931":{"id":"n4931","loc":[-85.589165,41.956132]},"n4932":{"id":"n4932","loc":[-85.589002,41.956253]},"n4933":{"id":"n4933","loc":[-85.588826,41.956122]},"n4934":{"id":"n4934","loc":[-85.588989,41.956001]},"n4935":{"id":"n4935","loc":[-85.588673,41.955757]},"n4936":{"id":"n4936","loc":[-85.588502,41.955882]},"n4937":{"id":"n4937","loc":[-85.588339,41.955759]},"n4938":{"id":"n4938","loc":[-85.58851,41.955633]},"n4939":{"id":"n4939","loc":[-85.590382,41.955892]},"n494":{"id":"n494","loc":[-85.635969,41.94069]},"n4940":{"id":"n4940","loc":[-85.589923,41.956231]},"n4941":{"id":"n4941","loc":[-85.58984,41.956168]},"n4942":{"id":"n4942","loc":[-85.5903,41.95583]},"n4943":{"id":"n4943","loc":[-85.589636,41.956038]},"n4944":{"id":"n4944","loc":[-85.589546,41.956105]},"n4945":{"id":"n4945","loc":[-85.589045,41.955729]},"n4946":{"id":"n4946","loc":[-85.589135,41.955662]},"n4947":{"id":"n4947","loc":[-85.590718,41.955293]},"n4948":{"id":"n4948","loc":[-85.590718,41.955374]},"n4949":{"id":"n4949","loc":[-85.589211,41.955369]},"n495":{"id":"n495","loc":[-85.635965,41.940561]},"n4950":{"id":"n4950","loc":[-85.589212,41.955287]},"n4951":{"id":"n4951","loc":[-85.589675,41.956817]},"n4952":{"id":"n4952","loc":[-85.58947,41.95697]},"n4953":{"id":"n4953","loc":[-85.589219,41.956784]},"n4954":{"id":"n4954","loc":[-85.589425,41.95663]},"n4955":{"id":"n4955","loc":[-85.589373,41.95702]},"n4956":{"id":"n4956","loc":[-85.589171,41.957172]},"n4957":{"id":"n4957","loc":[-85.588962,41.957019]},"n4958":{"id":"n4958","loc":[-85.589164,41.956867]},"n4959":{"id":"n4959","loc":[-85.588881,41.955006]},"n496":{"id":"n496","loc":[-85.636031,41.94056]},"n4960":{"id":"n4960","loc":[-85.588804,41.955006]},"n4961":{"id":"n4961","loc":[-85.604773,41.954521]},"n4962":{"id":"n4962","loc":[-85.601603,41.954527]},"n4963":{"id":"n4963","loc":[-85.600823,41.954169]},"n4964":{"id":"n4964","loc":[-85.600828,41.950191]},"n4965":{"id":"n4965","loc":[-85.601673,41.949457]},"n4966":{"id":"n4966","loc":[-85.604464,41.949488]},"n4967":{"id":"n4967","loc":[-85.60538,41.950212]},"n4968":{"id":"n4968","loc":[-85.605395,41.954108]},"n4969":{"id":"n4969","loc":[-85.604771,41.954109]},"n497":{"id":"n497","loc":[-85.636032,41.940602]},"n4970":{"id":"n4970","loc":[-85.600613,41.953916]},"n4971":{"id":"n4971","loc":[-85.599758,41.954649]},"n4972":{"id":"n4972","loc":[-85.591194,41.954663]},"n4973":{"id":"n4973","loc":[-85.591182,41.950465]},"n4974":{"id":"n4974","loc":[-85.591871,41.950464]},"n4975":{"id":"n4975","loc":[-85.591868,41.949209]},"n4976":{"id":"n4976","loc":[-85.592155,41.949209]},"n4977":{"id":"n4977","loc":[-85.592155,41.94848]},"n4978":{"id":"n4978","loc":[-85.600615,41.948482]},"n4979":{"id":"n4979","loc":[-85.605421,41.949378]},"n498":{"id":"n498","loc":[-85.635776,41.940583]},"n4980":{"id":"n4980","loc":[-85.600614,41.949373]},"n4981":{"id":"n4981","loc":[-85.601316,41.94849]},"n4982":{"id":"n4982","loc":[-85.601592,41.947641]},"n4983":{"id":"n4983","loc":[-85.60395,41.947618]},"n4984":{"id":"n4984","loc":[-85.603973,41.948114]},"n4985":{"id":"n4985","loc":[-85.605398,41.948103]},"n4986":{"id":"n4986","loc":[-85.614017,41.965566]},"n4987":{"id":"n4987","loc":[-85.605787,41.965619]},"n4988":{"id":"n4988","loc":[-85.60577,41.963821]},"n4989":{"id":"n4989","loc":[-85.612886,41.963808]},"n499":{"id":"n499","loc":[-85.63589,41.940578]},"n4990":{"id":"n4990","loc":[-85.613207,41.963705]},"n4991":{"id":"n4991","loc":[-85.613511,41.963525]},"n4992":{"id":"n4992","loc":[-85.613667,41.963305]},"n4993":{"id":"n4993","loc":[-85.613779,41.962983]},"n4994":{"id":"n4994","loc":[-85.613797,41.959709]},"n4995":{"id":"n4995","loc":[-85.613663,41.95936]},"n4996":{"id":"n4996","loc":[-85.61339,41.959064]},"n4997":{"id":"n4997","loc":[-85.610503,41.956898]},"n4998":{"id":"n4998","loc":[-85.610485,41.956595]},"n4999":{"id":"n4999","loc":[-85.613892,41.956621]},"n5":{"id":"n5","loc":[-85.622744,41.95268]},"n50":{"id":"n50","loc":[-85.636673,41.943143]},"n500":{"id":"n500","loc":[-85.636198,41.940578]},"n5000":{"id":"n5000","loc":[-85.613866,41.958574]},"n5001":{"id":"n5001","loc":[-85.615262,41.958561]},"n5002":{"id":"n5002","loc":[-85.615279,41.959541]},"n5003":{"id":"n5003","loc":[-85.615314,41.95597]},"n5004":{"id":"n5004","loc":[-85.613887,41.955988]},"n5005":{"id":"n5005","loc":[-85.613074,41.962244]},"n5006":{"id":"n5006","loc":[-85.611678,41.963354]},"n5007":{"id":"n5007","loc":[-85.611678,41.963487]},"n5008":{"id":"n5008","loc":[-85.606906,41.963502]},"n5009":{"id":"n5009","loc":[-85.605777,41.962657]},"n501":{"id":"n501","loc":[-85.636251,41.940584]},"n5010":{"id":"n5010","loc":[-85.605711,41.9599]},"n5011":{"id":"n5011","loc":[-85.608139,41.9585]},"n5012":{"id":"n5012","loc":[-85.60814,41.956306]},"n5013":{"id":"n5013","loc":[-85.608854,41.95581]},"n5014":{"id":"n5014","loc":[-85.610039,41.955883]},"n5015":{"id":"n5015","loc":[-85.610068,41.956754]},"n5016":{"id":"n5016","loc":[-85.613058,41.959411]},"n5017":{"id":"n5017","loc":[-85.610234,41.957068]},"n5018":{"id":"n5018","loc":[-85.609826,41.95581]},"n5019":{"id":"n5019","loc":[-85.606987,41.958505]},"n502":{"id":"n502","loc":[-85.636279,41.940605]},"n5020":{"id":"n5020","loc":[-85.606498,41.958846]},"n5021":{"id":"n5021","loc":[-85.606013,41.959342]},"n5022":{"id":"n5022","loc":[-85.614553,41.961581]},"n5023":{"id":"n5023","loc":[-85.61465,41.96214]},"n5024":{"id":"n5024","loc":[-85.615277,41.962442]},"n5025":{"id":"n5025","loc":[-85.615451,41.962972]},"n5026":{"id":"n5026","loc":[-85.614355,41.964826]},"n5027":{"id":"n5027","loc":[-85.615133,41.964589]},"n5028":{"id":"n5028","loc":[-85.615342,41.963818]},"n5029":{"id":"n5029","loc":[-85.615971,41.963792]},"n503":{"id":"n503","loc":[-85.636285,41.940633]},"n5030":{"id":"n5030","loc":[-85.615751,41.963122]},"n5031":{"id":"n5031","loc":[-85.616575,41.963123]},"n5032":{"id":"n5032","loc":[-85.612527,41.963846]},"n5033":{"id":"n5033","loc":[-85.630653,41.940709]},"n5034":{"id":"n5034","loc":[-85.629858,41.939568]},"n5035":{"id":"n5035","loc":[-85.629847,41.937926]},"n504":{"id":"n504","loc":[-85.636281,41.940662]},"n505":{"id":"n505","loc":[-85.636266,41.940688]},"n506":{"id":"n506","loc":[-85.636236,41.940701]},"n507":{"id":"n507","loc":[-85.63619,41.940706]},"n508":{"id":"n508","loc":[-85.635892,41.940707]},"n509":{"id":"n509","loc":[-85.635777,41.9407]},"n51":{"id":"n51","loc":[-85.636673,41.942864]},"n510":{"id":"n510","loc":[-85.636044,41.940578]},"n511":{"id":"n511","loc":[-85.635946,41.940578]},"n512":{"id":"n512","loc":[-85.636475,41.940732]},"n513":{"id":"n513","loc":[-85.636475,41.940777]},"n514":{"id":"n514","loc":[-85.636405,41.940777]},"n515":{"id":"n515","loc":[-85.636405,41.940732]},"n516":{"id":"n516","loc":[-85.636471,41.940916]},"n517":{"id":"n517","loc":[-85.636471,41.940961]},"n518":{"id":"n518","loc":[-85.636404,41.940961]},"n519":{"id":"n519","loc":[-85.636404,41.940916]},"n52":{"id":"n52","loc":[-85.636227,41.942864]},"n520":{"id":"n520","loc":[-85.636286,41.941127]},"n521":{"id":"n521","loc":[-85.636203,41.941126]},"n522":{"id":"n522","loc":[-85.636204,41.941083]},"n523":{"id":"n523","loc":[-85.636287,41.941083]},"n524":{"id":"n524","loc":[-85.636124,41.941064]},"n525":{"id":"n525","loc":[-85.636,41.941065]},"n526":{"id":"n526","loc":[-85.636,41.940964]},"n527":{"id":"n527","loc":[-85.636045,41.940964]},"n528":{"id":"n528","loc":[-85.636045,41.940928]},"n529":{"id":"n529","loc":[-85.636111,41.940928]},"n53":{"id":"n53","loc":[-85.636227,41.943143]},"n530":{"id":"n530","loc":[-85.636111,41.940961]},"n531":{"id":"n531","loc":[-85.636123,41.940961]},"n532":{"id":"n532","loc":[-85.636124,41.940997]},"n533":{"id":"n533","loc":[-85.636164,41.940997]},"n534":{"id":"n534","loc":[-85.636164,41.941044]},"n535":{"id":"n535","loc":[-85.636124,41.941044]},"n536":{"id":"n536","loc":[-85.636534,41.941256]},"n537":{"id":"n537","loc":[-85.63645,41.941246]},"n538":{"id":"n538","loc":[-85.636462,41.941189]},"n539":{"id":"n539","loc":[-85.636546,41.941199]},"n54":{"id":"n54","loc":[-85.636198,41.943119]},"n540":{"id":"n540","loc":[-85.636802,41.941226]},"n541":{"id":"n541","loc":[-85.636701,41.941215]},"n542":{"id":"n542","loc":[-85.636709,41.941174]},"n543":{"id":"n543","loc":[-85.636656,41.941168]},"n544":{"id":"n544","loc":[-85.636666,41.941122]},"n545":{"id":"n545","loc":[-85.636781,41.941136]},"n546":{"id":"n546","loc":[-85.636774,41.94117]},"n547":{"id":"n547","loc":[-85.636812,41.941175]},"n548":{"id":"n548","loc":[-85.636803,41.941047]},"n549":{"id":"n549","loc":[-85.636785,41.941047]},"n55":{"id":"n55","loc":[-85.635945,41.94312]},"n550":{"id":"n550","loc":[-85.636785,41.941058]},"n551":{"id":"n551","loc":[-85.636644,41.941059]},"n552":{"id":"n552","loc":[-85.636644,41.941038]},"n553":{"id":"n553","loc":[-85.636581,41.941039]},"n554":{"id":"n554","loc":[-85.636581,41.940995]},"n555":{"id":"n555","loc":[-85.636746,41.940995]},"n556":{"id":"n556","loc":[-85.636746,41.940978]},"n557":{"id":"n557","loc":[-85.636803,41.940978]},"n558":{"id":"n558","loc":[-85.636781,41.940768]},"n559":{"id":"n559","loc":[-85.636783,41.940828]},"n56":{"id":"n56","loc":[-85.635943,41.942909]},"n560":{"id":"n560","loc":[-85.636761,41.940828]},"n561":{"id":"n561","loc":[-85.636762,41.940857]},"n562":{"id":"n562","loc":[-85.636641,41.940859]},"n563":{"id":"n563","loc":[-85.63664,41.940805]},"n564":{"id":"n564","loc":[-85.636676,41.940804]},"n565":{"id":"n565","loc":[-85.636675,41.940769]},"n566":{"id":"n566","loc":[-85.636733,41.94033]},"n567":{"id":"n567","loc":[-85.636471,41.940334]},"n568":{"id":"n568","loc":[-85.636469,41.940262]},"n569":{"id":"n569","loc":[-85.636731,41.940257]},"n57":{"id":"n57","loc":[-85.636227,41.942909]},"n570":{"id":"n570","loc":[-85.636798,41.940419]},"n571":{"id":"n571","loc":[-85.6368,41.940524]},"n572":{"id":"n572","loc":[-85.63664,41.940526]},"n573":{"id":"n573","loc":[-85.636638,41.940421]},"n574":{"id":"n574","loc":[-85.636372,41.940551]},"n575":{"id":"n575","loc":[-85.636338,41.94055]},"n576":{"id":"n576","loc":[-85.636339,41.940524]},"n577":{"id":"n577","loc":[-85.636373,41.940525]},"n578":{"id":"n578","loc":[-85.636388,41.940435]},"n579":{"id":"n579","loc":[-85.636222,41.940436]},"n58":{"id":"n58","loc":[-85.63627,41.943175]},"n580":{"id":"n580","loc":[-85.636222,41.940366]},"n581":{"id":"n581","loc":[-85.636387,41.940365]},"n582":{"id":"n582","loc":[-85.636158,41.940482]},"n583":{"id":"n583","loc":[-85.635963,41.940484]},"n584":{"id":"n584","loc":[-85.635961,41.940399]},"n585":{"id":"n585","loc":[-85.636156,41.940397]},"n586":{"id":"n586","loc":[-85.635987,41.940314]},"n587":{"id":"n587","loc":[-85.635987,41.940268]},"n588":{"id":"n588","loc":[-85.635968,41.940268]},"n589":{"id":"n589","loc":[-85.635967,41.940212]},"n59":{"id":"n59","loc":[-85.635531,41.943176]},"n590":{"id":"n590","loc":[-85.636082,41.940211]},"n591":{"id":"n591","loc":[-85.636083,41.94027]},"n592":{"id":"n592","loc":[-85.636064,41.94027]},"n593":{"id":"n593","loc":[-85.636064,41.940313]},"n594":{"id":"n594","loc":[-85.638071,41.941562]},"n595":{"id":"n595","loc":[-85.637953,41.941562]},"n596":{"id":"n596","loc":[-85.637952,41.941522]},"n597":{"id":"n597","loc":[-85.637876,41.941523]},"n598":{"id":"n598","loc":[-85.637876,41.941471]},"n599":{"id":"n599","loc":[-85.638035,41.94147]},"n6":{"id":"n6","loc":[-85.624925,41.950604]},"n60":{"id":"n60","loc":[-85.63542,41.942883]},"n600":{"id":"n600","loc":[-85.638035,41.941513]},"n601":{"id":"n601","loc":[-85.638071,41.941512]},"n602":{"id":"n602","loc":[-85.637038,41.942543],"tags":{"crossing":"zebra","highway":"crossing"}},"n603":{"id":"n603","loc":[-85.637134,41.942542]},"n604":{"id":"n604","loc":[-85.638122,41.942532]},"n605":{"id":"n605","loc":[-85.638121,41.942478]},"n606":{"id":"n606","loc":[-85.638104,41.941424]},"n607":{"id":"n607","loc":[-85.637115,41.941438]},"n608":{"id":"n608","loc":[-85.637133,41.942453]},"n609":{"id":"n609","loc":[-85.637429,41.942004]},"n61":{"id":"n61","loc":[-85.635701,41.942802]},"n610":{"id":"n610","loc":[-85.637125,41.942004]},"n611":{"id":"n611","loc":[-85.637022,41.942004]},"n612":{"id":"n612","loc":[-85.635952,41.943579]},"n613":{"id":"n613","loc":[-85.635872,41.943594]},"n614":{"id":"n614","loc":[-85.635857,41.943551]},"n615":{"id":"n615","loc":[-85.635937,41.943535]},"n616":{"id":"n616","loc":[-85.63671,41.94344]},"n617":{"id":"n617","loc":[-85.636427,41.94334]},"n618":{"id":"n618","loc":[-85.635353,41.943279]},"n619":{"id":"n619","loc":[-85.635319,41.943257]},"n62":{"id":"n62","loc":[-85.6358,41.942997]},"n620":{"id":"n620","loc":[-85.638786,41.943105]},"n621":{"id":"n621","loc":[-85.634957,41.943146]},"n622":{"id":"n622","loc":[-85.635012,41.943119]},"n623":{"id":"n623","loc":[-85.632409,41.944222]},"n624":{"id":"n624","loc":[-85.631863,41.944749]},"n625":{"id":"n625","loc":[-85.631915,41.944722]},"n626":{"id":"n626","loc":[-85.631884,41.94464]},"n627":{"id":"n627","loc":[-85.631792,41.944359]},"n628":{"id":"n628","loc":[-85.631817,41.944703]},"n629":{"id":"n629","loc":[-85.633464,41.945787]},"n63":{"id":"n63","loc":[-85.635808,41.943176]},"n630":{"id":"n630","loc":[-85.633583,41.945919]},"n631":{"id":"n631","loc":[-85.63382,41.945698]},"n632":{"id":"n632","loc":[-85.633681,41.945571]},"n633":{"id":"n633","loc":[-85.634217,41.946824]},"n634":{"id":"n634","loc":[-85.634271,41.946836]},"n635":{"id":"n635","loc":[-85.634319,41.94573]},"n636":{"id":"n636","loc":[-85.634377,41.945672]},"n637":{"id":"n637","loc":[-85.634909,41.945354]},"n638":{"id":"n638","loc":[-85.634726,41.945493],"tags":{"artwork_type":"mural","tourism":"artwork"}},"n639":{"id":"n639","loc":[-85.63546,41.945612]},"n64":{"id":"n64","loc":[-85.63631,41.943253]},"n640":{"id":"n640","loc":[-85.635561,41.945493]},"n641":{"id":"n641","loc":[-85.635417,41.945565]},"n642":{"id":"n642","loc":[-85.635315,41.945583]},"n643":{"id":"n643","loc":[-85.63506,41.945383]},"n644":{"id":"n644","loc":[-85.635198,41.945199]},"n645":{"id":"n645","loc":[-85.635361,41.94558]},"n646":{"id":"n646","loc":[-85.635017,41.945066]},"n647":{"id":"n647","loc":[-85.634779,41.945206]},"n648":{"id":"n648","loc":[-85.63425,41.945655]},"n649":{"id":"n649","loc":[-85.634247,41.945631]},"n65":{"id":"n65","loc":[-85.635398,41.943259]},"n650":{"id":"n650","loc":[-85.634889,41.945921]},"n651":{"id":"n651","loc":[-85.634889,41.945939]},"n652":{"id":"n652","loc":[-85.634889,41.945761]},"n653":{"id":"n653","loc":[-85.634889,41.945778]},"n654":{"id":"n654","loc":[-85.635112,41.945715]},"n655":{"id":"n655","loc":[-85.635025,41.945714]},"n656":{"id":"n656","loc":[-85.635027,41.945761]},"n657":{"id":"n657","loc":[-85.635438,41.945665]},"n658":{"id":"n658","loc":[-85.635416,41.945676]},"n659":{"id":"n659","loc":[-85.635401,41.945709]},"n66":{"id":"n66","loc":[-85.635336,41.943036]},"n660":{"id":"n660","loc":[-85.635271,41.945566]},"n661":{"id":"n661","loc":[-85.636106,41.946268]},"n662":{"id":"n662","loc":[-85.635867,41.946747]},"n663":{"id":"n663","loc":[-85.636476,41.946797]},"n664":{"id":"n664","loc":[-85.63651,41.946796]},"n665":{"id":"n665","loc":[-85.635367,41.946389]},"n666":{"id":"n666","loc":[-85.635367,41.946437]},"n667":{"id":"n667","loc":[-85.634787,41.946441]},"n668":{"id":"n668","loc":[-85.6358,41.946243]},"n669":{"id":"n669","loc":[-85.635784,41.94622]},"n67":{"id":"n67","loc":[-85.635911,41.942899]},"n670":{"id":"n670","loc":[-85.635727,41.946195]},"n671":{"id":"n671","loc":[-85.635708,41.946588]},"n672":{"id":"n672","loc":[-85.635648,41.946561]},"n673":{"id":"n673","loc":[-85.635624,41.946555]},"n674":{"id":"n674","loc":[-85.635417,41.946559]},"n675":{"id":"n675","loc":[-85.634866,41.946561]},"n676":{"id":"n676","loc":[-85.634866,41.946543]},"n677":{"id":"n677","loc":[-85.635085,41.946546]},"n678":{"id":"n678","loc":[-85.635085,41.946554]},"n679":{"id":"n679","loc":[-85.634584,41.94488]},"n68":{"id":"n68","loc":[-85.635915,41.943156]},"n680":{"id":"n680","loc":[-85.634557,41.944882]},"n681":{"id":"n681","loc":[-85.634455,41.944943]},"n682":{"id":"n682","loc":[-85.634305,41.944968]},"n683":{"id":"n683","loc":[-85.634261,41.944927]},"n684":{"id":"n684","loc":[-85.634132,41.944741]},"n685":{"id":"n685","loc":[-85.633705,41.944759]},"n686":{"id":"n686","loc":[-85.633918,41.944616]},"n687":{"id":"n687","loc":[-85.633974,41.944663]},"n688":{"id":"n688","loc":[-85.6336,41.944665]},"n689":{"id":"n689","loc":[-85.633817,41.944528]},"n69":{"id":"n69","loc":[-85.63631,41.943157]},"n690":{"id":"n690","loc":[-85.633889,41.944485]},"n691":{"id":"n691","loc":[-85.633931,41.944525]},"n692":{"id":"n692","loc":[-85.633864,41.944563]},"n693":{"id":"n693","loc":[-85.633456,41.944524]},"n694":{"id":"n694","loc":[-85.633676,41.944399]},"n695":{"id":"n695","loc":[-85.633352,41.944415]},"n696":{"id":"n696","loc":[-85.633655,41.944234]},"n697":{"id":"n697","loc":[-85.633761,41.94435]},"n698":{"id":"n698","loc":[-85.633254,41.944318]},"n699":{"id":"n699","loc":[-85.633472,41.944188]},"n7":{"id":"n7","loc":[-85.638791,41.943231]},"n70":{"id":"n70","loc":[-85.63579,41.942967]},"n700":{"id":"n700","loc":[-85.633524,41.944237]},"n701":{"id":"n701","loc":[-85.633583,41.944202]},"n702":{"id":"n702","loc":[-85.633632,41.944247]},"n703":{"id":"n703","loc":[-85.633165,41.944228]},"n704":{"id":"n704","loc":[-85.633388,41.944105]},"n705":{"id":"n705","loc":[-85.633117,41.944175]},"n706":{"id":"n706","loc":[-85.633302,41.944077]},"n707":{"id":"n707","loc":[-85.633352,41.944126]},"n708":{"id":"n708","loc":[-85.633052,41.944107]},"n709":{"id":"n709","loc":[-85.633237,41.944009]},"n71":{"id":"n71","loc":[-85.637506,41.942824]},"n710":{"id":"n710","loc":[-85.633187,41.943955]},"n711":{"id":"n711","loc":[-85.633,41.944054]},"n712":{"id":"n712","loc":[-85.633155,41.944265]},"n713":{"id":"n713","loc":[-85.633669,41.944765]},"n714":{"id":"n714","loc":[-85.634468,41.945503]},"n715":{"id":"n715","loc":[-85.63455,41.945566]},"n716":{"id":"n716","loc":[-85.634737,41.945729]},"n717":{"id":"n717","loc":[-85.634753,41.945752]},"n718":{"id":"n718","loc":[-85.634756,41.945781]},"n719":{"id":"n719","loc":[-85.634758,41.945978]},"n72":{"id":"n72","loc":[-85.637511,41.943056]},"n720":{"id":"n720","loc":[-85.634363,41.945548],"tags":{"crossing":"zebra","highway":"crossing"}},"n721":{"id":"n721","loc":[-85.634245,41.945599]},"n722":{"id":"n722","loc":[-85.633474,41.944889]},"n723":{"id":"n723","loc":[-85.632997,41.944418]},"n724":{"id":"n724","loc":[-85.63278,41.944183]},"n725":{"id":"n725","loc":[-85.63331,41.944429]},"n726":{"id":"n726","loc":[-85.633568,41.944829],"tags":{"crossing":"zebra","highway":"crossing"}},"n727":{"id":"n727","loc":[-85.634669,41.94567]},"n728":{"id":"n728","loc":[-85.634462,41.945787]},"n729":{"id":"n729","loc":[-85.634272,41.945625]},"n73":{"id":"n73","loc":[-85.637361,41.943058]},"n730":{"id":"n730","loc":[-85.634344,41.945699],"tags":{"crossing":"zebra","highway":"crossing"}},"n731":{"id":"n731","loc":[-85.634426,41.945783]},"n732":{"id":"n732","loc":[-85.632425,41.944137]},"n733":{"id":"n733","loc":[-85.632302,41.944192]},"n734":{"id":"n734","loc":[-85.632762,41.944174]},"n735":{"id":"n735","loc":[-85.632713,41.944179]},"n736":{"id":"n736","loc":[-85.632411,41.944327]},"n737":{"id":"n737","loc":[-85.632362,41.944341]},"n738":{"id":"n738","loc":[-85.632236,41.944204]},"n739":{"id":"n739","loc":[-85.634939,41.942165]},"n74":{"id":"n74","loc":[-85.637356,41.942825]},"n740":{"id":"n740","loc":[-85.635079,41.941535]},"n741":{"id":"n741","loc":[-85.635112,41.941595]},"n742":{"id":"n742","loc":[-85.635113,41.941633]},"n743":{"id":"n743","loc":[-85.635067,41.941652]},"n744":{"id":"n744","loc":[-85.634989,41.941651]},"n745":{"id":"n745","loc":[-85.634921,41.941609]},"n746":{"id":"n746","loc":[-85.634881,41.941544]},"n747":{"id":"n747","loc":[-85.635537,41.940939]},"n748":{"id":"n748","loc":[-85.635573,41.941048]},"n749":{"id":"n749","loc":[-85.635453,41.94091]},"n75":{"id":"n75","loc":[-85.638097,41.942833]},"n750":{"id":"n750","loc":[-85.635319,41.940943]},"n751":{"id":"n751","loc":[-85.637057,41.943224]},"n752":{"id":"n752","loc":[-85.636989,41.943296]},"n753":{"id":"n753","loc":[-85.636851,41.943299]},"n754":{"id":"n754","loc":[-85.636848,41.94322]},"n755":{"id":"n755","loc":[-85.636986,41.943217]},"n756":{"id":"n756","loc":[-85.637569,41.943454]},"n757":{"id":"n757","loc":[-85.637437,41.943458]},"n758":{"id":"n758","loc":[-85.637432,41.943384]},"n759":{"id":"n759","loc":[-85.637564,41.94338]},"n76":{"id":"n76","loc":[-85.638098,41.942912]},"n760":{"id":"n760","loc":[-85.637213,41.943378]},"n761":{"id":"n761","loc":[-85.637217,41.943435]},"n762":{"id":"n762","loc":[-85.637235,41.943434]},"n763":{"id":"n763","loc":[-85.637237,41.943465]},"n764":{"id":"n764","loc":[-85.637424,41.943459]},"n765":{"id":"n765","loc":[-85.637418,41.943371]},"n766":{"id":"n766","loc":[-85.638094,41.943149]},"n767":{"id":"n767","loc":[-85.638096,41.943201]},"n768":{"id":"n768","loc":[-85.638041,41.943202]},"n769":{"id":"n769","loc":[-85.638042,41.943216]},"n77":{"id":"n77","loc":[-85.637705,41.942913]},"n770":{"id":"n770","loc":[-85.637927,41.943218]},"n771":{"id":"n771","loc":[-85.637926,41.943201]},"n772":{"id":"n772","loc":[-85.637897,41.943201]},"n773":{"id":"n773","loc":[-85.637896,41.943155]},"n774":{"id":"n774","loc":[-85.637962,41.943153]},"n775":{"id":"n775","loc":[-85.637962,41.943134]},"n776":{"id":"n776","loc":[-85.638017,41.943132]},"n777":{"id":"n777","loc":[-85.638018,41.943151]},"n778":{"id":"n778","loc":[-85.638045,41.943289]},"n779":{"id":"n779","loc":[-85.638048,41.943363]},"n78":{"id":"n78","loc":[-85.637705,41.942834]},"n780":{"id":"n780","loc":[-85.637842,41.943367]},"n781":{"id":"n781","loc":[-85.637839,41.943296]},"n782":{"id":"n782","loc":[-85.637896,41.943295]},"n783":{"id":"n783","loc":[-85.637897,41.943314]},"n784":{"id":"n784","loc":[-85.637957,41.943312]},"n785":{"id":"n785","loc":[-85.637957,41.943291]},"n786":{"id":"n786","loc":[-85.637816,41.943375]},"n787":{"id":"n787","loc":[-85.637815,41.943416]},"n788":{"id":"n788","loc":[-85.637715,41.943415]},"n789":{"id":"n789","loc":[-85.637716,41.943374]},"n79":{"id":"n79","loc":[-85.638071,41.942298]},"n790":{"id":"n790","loc":[-85.637912,41.943545]},"n791":{"id":"n791","loc":[-85.637909,41.943479]},"n792":{"id":"n792","loc":[-85.637967,41.943477]},"n793":{"id":"n793","loc":[-85.637967,41.94346]},"n794":{"id":"n794","loc":[-85.638077,41.943457]},"n795":{"id":"n795","loc":[-85.638078,41.943473]},"n796":{"id":"n796","loc":[-85.638124,41.943471]},"n797":{"id":"n797","loc":[-85.638126,41.943514]},"n798":{"id":"n798","loc":[-85.638079,41.943515]},"n799":{"id":"n799","loc":[-85.638079,41.943532]},"n8":{"id":"n8","loc":[-85.635241,41.941948]},"n80":{"id":"n80","loc":[-85.638074,41.942431]},"n800":{"id":"n800","loc":[-85.638028,41.943534]},"n801":{"id":"n801","loc":[-85.638028,41.943542]},"n802":{"id":"n802","loc":[-85.638845,41.942983]},"n803":{"id":"n803","loc":[-85.638846,41.94305]},"n804":{"id":"n804","loc":[-85.638661,41.943052]},"n805":{"id":"n805","loc":[-85.63866,41.942984]},"n806":{"id":"n806","loc":[-85.638579,41.942753]},"n807":{"id":"n807","loc":[-85.638445,41.942755]},"n808":{"id":"n808","loc":[-85.638452,41.942978]},"n809":{"id":"n809","loc":[-85.638545,41.942976]},"n81":{"id":"n81","loc":[-85.637836,41.942433]},"n810":{"id":"n810","loc":[-85.638543,41.942935]},"n811":{"id":"n811","loc":[-85.638571,41.942934]},"n812":{"id":"n812","loc":[-85.63857,41.942901]},"n813":{"id":"n813","loc":[-85.638611,41.9429]},"n814":{"id":"n814","loc":[-85.638607,41.942769]},"n815":{"id":"n815","loc":[-85.63858,41.94277]},"n816":{"id":"n816","loc":[-85.638597,41.942614]},"n817":{"id":"n817","loc":[-85.638601,41.94273]},"n818":{"id":"n818","loc":[-85.638686,41.942731]},"n819":{"id":"n819","loc":[-85.638689,41.942917]},"n82":{"id":"n82","loc":[-85.637835,41.94242]},"n820":{"id":"n820","loc":[-85.638558,41.943018]},"n821":{"id":"n821","loc":[-85.638243,41.943019]},"n822":{"id":"n822","loc":[-85.637536,41.943887]},"n823":{"id":"n823","loc":[-85.63749,41.943926]},"n824":{"id":"n824","loc":[-85.63743,41.943886]},"n825":{"id":"n825","loc":[-85.637476,41.943847]},"n826":{"id":"n826","loc":[-85.637527,41.943846]},"n827":{"id":"n827","loc":[-85.637141,41.943728]},"n828":{"id":"n828","loc":[-85.637201,41.943755]},"n829":{"id":"n829","loc":[-85.636987,41.943608]},"n83":{"id":"n83","loc":[-85.63776,41.942421]},"n830":{"id":"n830","loc":[-85.637441,41.943807]},"n831":{"id":"n831","loc":[-85.637673,41.94399]},"n832":{"id":"n832","loc":[-85.637783,41.944137]},"n833":{"id":"n833","loc":[-85.63845,41.944333]},"n834":{"id":"n834","loc":[-85.638159,41.944248]},"n835":{"id":"n835","loc":[-85.637859,41.94416]},"n836":{"id":"n836","loc":[-85.638685,41.944542]},"n837":{"id":"n837","loc":[-85.638714,41.944611]},"n838":{"id":"n838","loc":[-85.638711,41.944757]},"n839":{"id":"n839","loc":[-85.638774,41.945069]},"n84":{"id":"n84","loc":[-85.637758,41.942339]},"n840":{"id":"n840","loc":[-85.638742,41.945205]},"n841":{"id":"n841","loc":[-85.640267,41.942403]},"n842":{"id":"n842","loc":[-85.640154,41.942404]},"n843":{"id":"n843","loc":[-85.640152,41.942249]},"n844":{"id":"n844","loc":[-85.640266,41.942248]},"n845":{"id":"n845","loc":[-85.640366,41.942599]},"n846":{"id":"n846","loc":[-85.640362,41.942192]},"n847":{"id":"n847","loc":[-85.640146,41.942191]},"n848":{"id":"n848","loc":[-85.640122,41.942196]},"n849":{"id":"n849","loc":[-85.640108,41.942211]},"n85":{"id":"n85","loc":[-85.637836,41.942339]},"n850":{"id":"n850","loc":[-85.640101,41.942236]},"n851":{"id":"n851","loc":[-85.640103,41.94241]},"n852":{"id":"n852","loc":[-85.64011,41.942435]},"n853":{"id":"n853","loc":[-85.640126,41.942445]},"n854":{"id":"n854","loc":[-85.640153,41.942451]},"n855":{"id":"n855","loc":[-85.640183,41.942452]},"n856":{"id":"n856","loc":[-85.640364,41.942452]},"n857":{"id":"n857","loc":[-85.640007,41.942452]},"n858":{"id":"n858","loc":[-85.639449,41.942461]},"n859":{"id":"n859","loc":[-85.640049,41.942391]},"n86":{"id":"n86","loc":[-85.637835,41.942301]},"n860":{"id":"n860","loc":[-85.640052,41.942503]},"n861":{"id":"n861","loc":[-85.639575,41.94251]},"n862":{"id":"n862","loc":[-85.639572,41.942398]},"n863":{"id":"n863","loc":[-85.638782,41.942227]},"n864":{"id":"n864","loc":[-85.63843,41.942226]},"n865":{"id":"n865","loc":[-85.63823,41.942183]},"n866":{"id":"n866","loc":[-85.638363,41.942216],"tags":{"barrier":"gate"}},"n867":{"id":"n867","loc":[-85.6384,41.942223]},"n868":{"id":"n868","loc":[-85.636042,41.942797]},"n869":{"id":"n869","loc":[-85.636308,41.942752]},"n87":{"id":"n87","loc":[-85.637566,41.942367]},"n870":{"id":"n870","loc":[-85.636516,41.942729]},"n871":{"id":"n871","loc":[-85.636782,41.942712]},"n872":{"id":"n872","loc":[-85.636944,41.942706]},"n873":{"id":"n873","loc":[-85.63704,41.942706]},"n874":{"id":"n874","loc":[-85.637237,41.942703]},"n875":{"id":"n875","loc":[-85.637553,41.9427]},"n876":{"id":"n876","loc":[-85.638236,41.942697]},"n877":{"id":"n877","loc":[-85.636284,41.942781]},"n878":{"id":"n878","loc":[-85.636551,41.942641]},"n879":{"id":"n879","loc":[-85.633914,41.943693]},"n88":{"id":"n88","loc":[-85.637566,41.94241]},"n880":{"id":"n880","loc":[-85.63389,41.943708]},"n881":{"id":"n881","loc":[-85.633866,41.943686]},"n882":{"id":"n882","loc":[-85.63389,41.943671]},"n883":{"id":"n883","loc":[-85.633857,41.943609]},"n884":{"id":"n884","loc":[-85.634858,41.944474]},"n885":{"id":"n885","loc":[-85.633988,41.943234]},"n886":{"id":"n886","loc":[-85.633999,41.943485]},"n887":{"id":"n887","loc":[-85.634109,41.943449],"tags":{"emergency":"fire_hydrant"}},"n888":{"id":"n888","loc":[-85.635728,41.942655],"tags":{"emergency":"fire_hydrant"}},"n889":{"id":"n889","loc":[-85.636499,41.942845],"tags":{"man_made":"flagpole"}},"n89":{"id":"n89","loc":[-85.637455,41.94241]},"n890":{"id":"n890","loc":[-85.636197,41.943073]},"n891":{"id":"n891","loc":[-85.636227,41.943073]},"n892":{"id":"n892","loc":[-85.637433,41.942933],"tags":{"addr:city":"Three Rivers","addr:housenumber":"401","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","amenity":"restaurant","cuisine":"pizza","name":"Pizza Hut"}},"n893":{"id":"n893","loc":[-85.637907,41.942879],"tags":{"amenity":"car_wash"}},"n894":{"id":"n894","loc":[-85.637661,41.943018]},"n895":{"id":"n895","loc":[-85.636933,41.942733],"tags":{"emergency":"fire_hydrant"}},"n896":{"id":"n896","loc":[-85.637661,41.94304]},"n897":{"id":"n897","loc":[-85.637562,41.943041]},"n898":{"id":"n898","loc":[-85.637556,41.942725]},"n899":{"id":"n899","loc":[-85.637656,41.942724]},"n9":{"id":"n9","loc":[-85.635159,41.941926]},"n90":{"id":"n90","loc":[-85.637454,41.942367]},"n900":{"id":"n900","loc":[-85.637657,41.942779]},"n901":{"id":"n901","loc":[-85.637983,41.942777]},"n902":{"id":"n902","loc":[-85.637982,41.942616]},"n903":{"id":"n903","loc":[-85.637777,41.942778]},"n904":{"id":"n904","loc":[-85.637775,41.942699]},"n905":{"id":"n905","loc":[-85.637772,41.942618]},"n906":{"id":"n906","loc":[-85.637982,41.942698]},"n907":{"id":"n907","loc":[-85.637941,41.942378],"tags":{"addr:city":"Three Rivers","addr:housenumber":"416","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","name":"Gem Pawnbroker","shop":"pawnbroker"}},"n908":{"id":"n908","loc":[-85.637515,41.942394],"tags":{"second_hand":"only","shop":"car"}},"n909":{"id":"n909","loc":[-85.638743,41.942374],"tags":{"addr:city":"Three Rivers","addr:housenumber":"500","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","name":"William Towing","service:vehicle:towing":"yes","service:vehicle:tyres":"yes","shop":"car_repair"}},"n91":{"id":"n91","loc":[-85.637565,41.942341]},"n910":{"id":"n910","loc":[-85.638594,41.942357]},"n911":{"id":"n911","loc":[-85.634312,41.943562],"tags":{"addr:city":"Three Rivers","addr:housenumber":"145","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","amenity":"cafe","cuisine":"coffee_shop","name":"L.A.'s Coffee Cafe","outdoor_seating":"yes"}},"n912":{"id":"n912","loc":[-85.634404,41.943512]},"n913":{"id":"n913","loc":[-85.634391,41.943519],"tags":{"entrance":"yes"}},"n914":{"id":"n914","loc":[-85.634259,41.943538],"tags":{"entrance":"yes"}},"n915":{"id":"n915","loc":[-85.634247,41.943528]},"n916":{"id":"n916","loc":[-85.633747,41.943322],"tags":{"addr:city":"Three Rivers","addr:housenumber":"132","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue","name":"Preferred Insurance Services","office":"insurance"}},"n917":{"id":"n917","loc":[-85.63299,41.943686],"tags":{"addr:city":"Three Rivers","addr:housenumber":"101","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Lynn's Garage","service:vehicle:tyres":"yes","shop":"car_repair"}},"n918":{"id":"n918","loc":[-85.633438,41.944883]},"n919":{"id":"n919","loc":[-85.633265,41.944983]},"n92":{"id":"n92","loc":[-85.637481,41.942341]},"n920":{"id":"n920","loc":[-85.633315,41.945027]},"n921":{"id":"n921","loc":[-85.633376,41.944827]},"n922":{"id":"n922","loc":[-85.633199,41.944922]},"n923":{"id":"n923","loc":[-85.633316,41.944772]},"n924":{"id":"n924","loc":[-85.633147,41.944867]},"n925":{"id":"n925","loc":[-85.633261,41.944719]},"n926":{"id":"n926","loc":[-85.633096,41.944812]},"n927":{"id":"n927","loc":[-85.633191,41.944645]},"n928":{"id":"n928","loc":[-85.632981,41.94476]},"n929":{"id":"n929","loc":[-85.633062,41.94483]},"n93":{"id":"n93","loc":[-85.637481,41.94226]},"n930":{"id":"n930","loc":[-85.633146,41.944602]},"n931":{"id":"n931","loc":[-85.632969,41.944703]},"n932":{"id":"n932","loc":[-85.633008,41.944745]},"n933":{"id":"n933","loc":[-85.633088,41.944545]},"n934":{"id":"n934","loc":[-85.632868,41.944655]},"n935":{"id":"n935","loc":[-85.632941,41.944718]},"n936":{"id":"n936","loc":[-85.633028,41.944483]},"n937":{"id":"n937","loc":[-85.632817,41.944605]},"n938":{"id":"n938","loc":[-85.632923,41.944373]},"n939":{"id":"n939","loc":[-85.632692,41.944485]},"n94":{"id":"n94","loc":[-85.637565,41.94226]},"n940":{"id":"n940","loc":[-85.632871,41.944316]},"n941":{"id":"n941","loc":[-85.632655,41.944421]},"n942":{"id":"n942","loc":[-85.632711,41.944478]},"n943":{"id":"n943","loc":[-85.632825,41.94426]},"n944":{"id":"n944","loc":[-85.632606,41.944363]},"n945":{"id":"n945","loc":[-85.63275,41.94418]},"n946":{"id":"n946","loc":[-85.632588,41.944256]},"n947":{"id":"n947","loc":[-85.632611,41.944279]},"n948":{"id":"n948","loc":[-85.632548,41.944306]},"n949":{"id":"n949","loc":[-85.632512,41.944406]},"n95":{"id":"n95","loc":[-85.637188,41.942217]},"n950":{"id":"n950","loc":[-85.632565,41.944463]},"n951":{"id":"n951","loc":[-85.632579,41.944456]},"n952":{"id":"n952","loc":[-85.632634,41.944518]},"n953":{"id":"n953","loc":[-85.632686,41.944569]},"n954":{"id":"n954","loc":[-85.632745,41.944537]},"n955":{"id":"n955","loc":[-85.632659,41.944587]},"n956":{"id":"n956","loc":[-85.632778,41.944705]},"n957":{"id":"n957","loc":[-85.632815,41.944301],"tags":{"addr:city":"Three Rivers","addr:housenumber":"5","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Access Point Employment","office":"employment_agency"}},"n958":{"id":"n958","loc":[-85.6332,41.944174],"tags":{"addr:city":"Three Rivers","addr:housenumber":"6","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Paisley Emporium","shop":"second_hand"}},"n959":{"id":"n959","loc":[-85.633578,41.944568],"tags":{"addr:city":"Three Rivers","addr:housenumber":"22","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","name":"Lowry's Books","shop":"books"}},"n96":{"id":"n96","loc":[-85.637189,41.942303]},"n960":{"id":"n960","loc":[-85.63344,41.944443],"tags":{"addr:city":"Three Rivers","addr:housenumber":"16","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","amenity":"restaurant","cuisine":"pizza","name":"Paisano's Bar and Grill"}},"n961":{"id":"n961","loc":[-85.633009,41.944542],"tags":{"addr:city":"Three Rivers","addr:housenumber":"13","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","amenity":"cafe","cuisine":"american","internet_access":"yes","name":"Main Street Cafe"}},"n962":{"id":"n962","loc":[-85.633674,41.944682],"tags":{"addr:city":"Three Rivers","addr:housenumber":"28","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","leisure":"fitness_centre","name":"Main Street Fitness"}},"n963":{"id":"n963","loc":[-85.633376,41.944868],"tags":{"addr:city":"Three Rivers","addr:housenumber":"27","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street","leisure":"fitness_centre","name":"Main Street Barbell"}},"n964":{"id":"n964","loc":[-85.633366,41.944783]},"n965":{"id":"n965","loc":[-85.633296,41.94482]},"n966":{"id":"n966","loc":[-85.633214,41.94487]},"n967":{"id":"n967","loc":[-85.633005,41.944988]},"n968":{"id":"n968","loc":[-85.633269,41.944816]},"n969":{"id":"n969","loc":[-85.633215,41.944842]},"n97":{"id":"n97","loc":[-85.637299,41.942302]},"n970":{"id":"n970","loc":[-85.633245,41.944871]},"n971":{"id":"n971","loc":[-85.633296,41.944845]},"n972":{"id":"n972","loc":[-85.633254,41.944845],"tags":{"natural":"tree"}},"n973":{"id":"n973","loc":[-85.633557,41.945515]},"n974":{"id":"n974","loc":[-85.633279,41.945246]},"n975":{"id":"n975","loc":[-85.63324,41.945226]},"n976":{"id":"n976","loc":[-85.6332,41.945213]},"n977":{"id":"n977","loc":[-85.633133,41.945164]},"n978":{"id":"n978","loc":[-85.63312,41.945132]},"n979":{"id":"n979","loc":[-85.633095,41.945081]},"n98":{"id":"n98","loc":[-85.637299,41.942314]},"n980":{"id":"n980","loc":[-85.633064,41.945047]},"n981":{"id":"n981","loc":[-85.632739,41.944742]},"n982":{"id":"n982","loc":[-85.633281,41.945026]},"n983":{"id":"n983","loc":[-85.633155,41.944903]},"n984":{"id":"n984","loc":[-85.633079,41.944829]},"n985":{"id":"n985","loc":[-85.63304,41.944853]},"n986":{"id":"n986","loc":[-85.632949,41.944776]},"n987":{"id":"n987","loc":[-85.632921,41.944725]},"n988":{"id":"n988","loc":[-85.632859,41.944673]},"n989":{"id":"n989","loc":[-85.632895,41.94505]},"n99":{"id":"n99","loc":[-85.637396,41.942313]},"n990":{"id":"n990","loc":[-85.633336,41.945138]},"n991":{"id":"n991","loc":[-85.633466,41.945265]},"n992":{"id":"n992","loc":[-85.633367,41.945327]},"n993":{"id":"n993","loc":[-85.633163,41.945189]},"n994":{"id":"n994","loc":[-85.633678,41.945309]},"n995":{"id":"n995","loc":[-85.633619,41.945261]},"n996":{"id":"n996","loc":[-85.63355,41.945301]},"n997":{"id":"n997","loc":[-85.633607,41.945352]},"n998":{"id":"n998","loc":[-85.633579,41.945327],"tags":{"entrance":"yes"}},"n999":{"id":"n999","loc":[-85.633445,41.945404]},"r2":{"id":"r2","members":[{"id":"w225","role":"outer","type":"way"}],"tags":{"type":"multipolygon","waterway":"riverbank"}},"r5":{"id":"r5","members":[{"id":"w642","role":"outer","type":"way"}],"tags":{"admin_level":"8","border_type":"city","boundary":"administrative","name":"Three Rivers","place":"city","type":"boundary"}},"w1":{"id":"w1","nodes":["n5","n1797"],"tags":{"highway":"residential","name":"12th Avenue"}},"w10":{"id":"w10","nodes":["n54","n55","n56","n57","n891","n890","n54"],"tags":{"building":"yes"}},"w100":{"id":"w100","nodes":["n451","n915","n452"],"tags":{"highway":"footway"}},"w101":{"id":"w101","nodes":["n461","n462","n463","n464","n465","n466"],"tags":{"barrier":"fence"}},"w102":{"id":"w102","nodes":["n467","n468","n469","n470","n472","n467"],"tags":{"amenity":"parking"}},"w103":{"id":"w103","nodes":["n2597","n2444","n471","n472"],"tags":{"highway":"footway"}},"w104":{"id":"w104","nodes":["n473","n474","n325"],"tags":{"footway":"sidewalk","highway":"footway"}},"w105":{"id":"w105","nodes":["n475","n324","n325"],"tags":{"footway":"sidewalk","highway":"footway"}},"w106":{"id":"w106","nodes":["n886","n452","n476"],"tags":{"footway":"sidewalk","highway":"footway"}},"w107":{"id":"w107","nodes":["n485","n4678","n486","n18"],"tags":{"highway":"service"}},"w108":{"id":"w108","nodes":["n300","n487","n488","n489","n490"],"tags":{"highway":"footway"}},"w109":{"id":"w109","nodes":["n490","n491"],"tags":{"highway":"footway"}},"w11":{"id":"w11","nodes":["n58","n63","n59","n315","n60"],"tags":{"highway":"service"}},"w110":{"id":"w110","nodes":["n492","n493","n494","n495","n496","n497","n492"],"tags":{"building":"yes"}},"w111":{"id":"w111","nodes":["n498","n499","n511"],"tags":{"highway":"service"}},"w112":{"id":"w112","nodes":["n510","n500","n501","n502","n503","n504","n505","n506","n507","n508","n509"],"tags":{"highway":"service"}},"w113":{"id":"w113","nodes":["n511","n510"],"tags":{"covered":"yes","highway":"service"}},"w114":{"id":"w114","nodes":["n512","n513","n514","n515","n512"],"tags":{"building":"yes"}},"w115":{"id":"w115","nodes":["n516","n517","n518","n519","n516"],"tags":{"building":"yes"}},"w116":{"id":"w116","nodes":["n520","n521","n522","n523","n520"],"tags":{"building":"yes"}},"w117":{"id":"w117","nodes":["n524","n525","n526","n527","n528","n529","n530","n531","n532","n533","n534","n535","n524"],"tags":{"building":"yes"}},"w118":{"id":"w118","nodes":["n536","n537","n538","n539","n536"],"tags":{"building":"yes"}},"w119":{"id":"w119","nodes":["n540","n541","n542","n543","n544","n545","n546","n547","n540"],"tags":{"building":"yes"}},"w12":{"id":"w12","nodes":["n61","n314","n70","n62","n63"],"tags":{"highway":"service"}},"w120":{"id":"w120","nodes":["n548","n549","n550","n551","n552","n553","n554","n555","n556","n557","n548"],"tags":{"building":"yes"}},"w121":{"id":"w121","nodes":["n558","n559","n560","n561","n562","n563","n564","n565","n558"],"tags":{"building":"yes"}},"w122":{"id":"w122","nodes":["n566","n567","n568","n569","n566"],"tags":{"building":"yes"}},"w123":{"id":"w123","nodes":["n570","n571","n572","n573","n570"],"tags":{"building":"yes"}},"w124":{"id":"w124","nodes":["n574","n575","n576","n577","n574"],"tags":{"building":"yes"}},"w125":{"id":"w125","nodes":["n578","n579","n580","n581","n578"],"tags":{"building":"yes"}},"w126":{"id":"w126","nodes":["n582","n583","n584","n585","n582"],"tags":{"building":"yes"}},"w127":{"id":"w127","nodes":["n586","n587","n588","n589","n590","n591","n592","n593","n586"],"tags":{"building":"yes"}},"w128":{"id":"w128","nodes":["n594","n595","n596","n597","n598","n599","n600","n601","n594"],"tags":{"building":"yes"}},"w129":{"id":"w129","nodes":["n309","n602","n603"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w13":{"id":"w13","nodes":["n64","n65","n66","n67","n68","n69","n64"],"tags":{"amenity":"parking"}},"w130":{"id":"w130","nodes":["n603","n604"],"tags":{"footway":"sidewalk","highway":"footway"}},"w131":{"id":"w131","nodes":["n604","n605","n606"],"tags":{"footway":"sidewalk","highway":"footway"}},"w132":{"id":"w132","nodes":["n606","n607"],"tags":{"footway":"sidewalk","highway":"footway"}},"w133":{"id":"w133","nodes":["n607","n610","n608","n603"],"tags":{"footway":"sidewalk","highway":"footway"}},"w134":{"id":"w134","nodes":["n609","n610","n611"],"tags":{"highway":"service","service":"driveway","surface":"unpaved"}},"w135":{"id":"w135","nodes":["n244","n245","n246"],"tags":{"highway":"service"}},"w136":{"id":"w136","nodes":["n612","n613","n614","n615","n612"],"tags":{"amenity":"shelter"}},"w137":{"id":"w137","nodes":["n2779","n2788","n2776","n2778","n2775","n2787","n2440","n2437","n629","n2438","n630","n2439","n2407","n2408","n2409"],"tags":{"highway":"residential","name":"Foster Street"}},"w138":{"id":"w138","nodes":["n2779","n625","n626","n627"],"tags":{"highway":"residential","name":"Foster Street","oneway":"yes"}},"w139":{"id":"w139","nodes":["n630","n631","n632","n2437"],"tags":{"highway":"service"}},"w14":{"id":"w14","nodes":["n71","n72","n73","n74","n71"],"tags":{"building":"yes"}},"w140":{"id":"w140","nodes":["n643","n637","n715","n2410"],"tags":{"highway":"footway","name":"Mural Mall"}},"w141":{"id":"w141","nodes":["n639","n2516"],"tags":{"barrier":"wall"}},"w142":{"id":"w142","nodes":["n640","n641","n645","n642","n660","n643","n644"],"tags":{"highway":"service"}},"w143":{"id":"w143","nodes":["n646","n647"],"tags":{"highway":"service"}},"w144":{"id":"w144","nodes":["n654","n655","n656"],"tags":{"barrier":"wall"}},"w145":{"id":"w145","nodes":["n665","n666","n667"],"tags":{"barrier":"wall"}},"w146":{"id":"w146","nodes":["n2727","n662","n2719"],"tags":{"highway":"service","oneway":"yes","service":"parking_aisle"}},"w147":{"id":"w147","nodes":["n2725","n674"],"tags":{"highway":"service","oneway":"yes"}},"w148":{"id":"w148","nodes":["n2464","n2460","n2454","n684","n2455","n2464"],"tags":{"building":"yes"}},"w149":{"id":"w149","nodes":["n2456","n685","n686","n687","n2456"],"tags":{"building":"yes"}},"w15":{"id":"w15","nodes":["n75","n76","n77","n78","n75"],"tags":{"building":"yes"}},"w150":{"id":"w150","nodes":["n685","n688","n689","n690","n691","n692","n686","n685"],"tags":{"building":"yes"}},"w151":{"id":"w151","nodes":["n688","n693","n694","n689","n688"],"tags":{"building":"yes"}},"w152":{"id":"w152","nodes":["n693","n695","n702","n696","n697","n694","n693"],"tags":{"building":"yes"}},"w153":{"id":"w153","nodes":["n695","n698","n699","n700","n701","n702","n695"],"tags":{"building":"yes"}},"w154":{"id":"w154","nodes":["n698","n703","n707","n704","n699","n698"],"tags":{"building":"yes"}},"w155":{"id":"w155","nodes":["n703","n705","n706","n707","n703"],"tags":{"building":"yes"}},"w156":{"id":"w156","nodes":["n705","n708","n709","n706","n705"],"tags":{"building":"yes"}},"w157":{"id":"w157","nodes":["n709","n710","n711","n708","n709"],"tags":{"building":"yes"}},"w158":{"id":"w158","nodes":["n369","n712","n725","n713","n714","n715","n727","n716","n717","n718","n719"],"tags":{"footway":"sidewalk","highway":"footway"}},"w159":{"id":"w159","nodes":["n714","n720","n721"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w16":{"id":"w16","nodes":["n79","n80","n81","n82","n83","n84","n85","n86","n79"],"tags":{"building":"yes"}},"w160":{"id":"w160","nodes":["n729","n721","n722","n964","n723","n724"],"tags":{"footway":"sidewalk","highway":"footway"}},"w161":{"id":"w161","nodes":["n713","n726","n722"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w162":{"id":"w162","nodes":["n727","n2411","n728"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w163":{"id":"w163","nodes":["n729","n730","n731"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w164":{"id":"w164","nodes":["n365","n732","n733","n738"],"tags":{"footway":"sidewalk","highway":"footway"}},"w165":{"id":"w165","nodes":["n724","n734","n367","n735","n736","n737"],"tags":{"footway":"sidewalk","highway":"footway"}},"w166":{"id":"w166","nodes":["n739","n2037","n2038","n2039","n2040","n1623","n2032"],"tags":{"highway":"footway"}},"w167":{"id":"w167","nodes":["n150","n751"],"tags":{"highway":"service"}},"w168":{"id":"w168","nodes":["n752","n753","n754","n755","n752"],"tags":{"building":"yes"}},"w169":{"id":"w169","nodes":["n756","n757","n758","n759","n756"],"tags":{"building":"yes"}},"w17":{"id":"w17","nodes":["n87","n88","n89","n90","n87"],"tags":{"building":"yes"}},"w170":{"id":"w170","nodes":["n760","n761","n762","n763","n764","n765","n760"],"tags":{"building":"yes"}},"w171":{"id":"w171","nodes":["n766","n767","n768","n769","n770","n771","n772","n773","n774","n775","n776","n777","n766"],"tags":{"building":"yes"}},"w172":{"id":"w172","nodes":["n778","n779","n780","n781","n782","n783","n784","n785","n778"],"tags":{"building":"yes"}},"w173":{"id":"w173","nodes":["n786","n787","n788","n789","n786"],"tags":{"building":"yes"}},"w174":{"id":"w174","nodes":["n790","n791","n792","n793","n794","n795","n796","n797","n798","n799","n800","n801","n790"],"tags":{"building":"yes"}},"w175":{"id":"w175","nodes":["n802","n803","n804","n805","n802"],"tags":{"building":"yes"}},"w176":{"id":"w176","nodes":["n806","n807","n808","n809","n810","n811","n812","n813","n814","n815","n806"],"tags":{"building":"yes"}},"w177":{"id":"w177","nodes":["n816","n1140","n817","n818","n819","n820","n821"],"tags":{"highway":"service"}},"w178":{"id":"w178","nodes":["n822","n823","n824","n825","n822"],"tags":{"building":"yes"}},"w179":{"id":"w179","nodes":["n841","n842","n843","n844","n841"],"tags":{"building":"yes"}},"w18":{"id":"w18","nodes":["n91","n92","n93","n94","n91"],"tags":{"building":"yes"}},"w180":{"id":"w180","nodes":["n845","n856","n846"],"tags":{"highway":"service"}},"w181":{"id":"w181","nodes":["n846","n847","n848","n849","n850","n851","n852","n853","n854","n855","n856"],"tags":{"highway":"service","oneway":"yes","service":"drive-through"}},"w182":{"id":"w182","nodes":["n857","n858"],"tags":{"highway":"service"}},"w183":{"id":"w183","nodes":["n859","n860","n861","n862","n859"],"tags":{"amenity":"parking"}},"w184":{"id":"w184","nodes":["n863","n864","n867","n866","n865"],"tags":{"highway":"service"}},"w185":{"id":"w185","nodes":["n883","n884"],"tags":{"barrier":"fence"}},"w186":{"id":"w186","nodes":["n1954","n622","n1955"],"tags":{"highway":"path","name":"Riverwalk Trail"}},"w187":{"id":"w187","nodes":["n621","n1954"],"tags":{"highway":"steps","incline":"up","name":"Riverwalk Trail","surface":"wood"}},"w188":{"id":"w188","nodes":["n2274","n2275","n2276","n2277","n2278","n2279","n1953","n621"],"tags":{"highway":"path","name":"Riverwalk Trail","surface":"wood"}},"w189":{"id":"w189","nodes":["n2273","n2274"],"tags":{"highway":"steps","incline":"down","name":"Riverwalk Trail","surface":"wood"}},"w19":{"id":"w19","nodes":["n95","n96","n97","n98","n99","n100","n101","n102","n95"],"tags":{"building":"yes"}},"w190":{"id":"w190","nodes":["n821","n894","n900","n903","n901"],"tags":{"highway":"service"}},"w191":{"id":"w191","nodes":["n896","n897","n898","n899","n900","n894","n896"],"tags":{"amenity":"parking"}},"w192":{"id":"w192","nodes":["n903","n904","n905"],"tags":{"highway":"service"}},"w193":{"id":"w193","nodes":["n901","n906","n902"],"tags":{"highway":"service"}},"w194":{"id":"w194","nodes":["n912","n913"],"tags":{"highway":"footway"}},"w195":{"id":"w195","nodes":["n914","n915"],"tags":{"highway":"footway"}},"w196":{"id":"w196","nodes":["n2466","n918","n919","n920","n2466"],"tags":{"building":"yes"}},"w197":{"id":"w197","nodes":["n918","n921","n922","n919","n918"],"tags":{"building":"yes"}},"w198":{"id":"w198","nodes":["n923","n925","n926","n924","n923"],"tags":{"building":"yes"}},"w199":{"id":"w199","nodes":["n925","n927","n932","n928","n929","n926","n925"],"tags":{"building":"yes"}},"w2":{"id":"w2","nodes":["n3523","n2182","n2160"],"tags":{"highway":"service"}},"w20":{"id":"w20","nodes":["n103","n104","n105","n106","n107","n108","n109","n110","n111","n112","n113","n114","n103"],"tags":{"building":"yes"}},"w200":{"id":"w200","nodes":["n927","n930","n931","n932","n927"],"tags":{"building":"yes"}},"w201":{"id":"w201","nodes":["n930","n933","n934","n935","n931","n930"],"tags":{"building":"yes"}},"w202":{"id":"w202","nodes":["n933","n936","n937","n934","n933"],"tags":{"building":"yes"}},"w203":{"id":"w203","nodes":["n936","n938","n942","n939","n954","n937","n936"],"tags":{"building":"yes"}},"w204":{"id":"w204","nodes":["n938","n940","n941","n942","n938"],"tags":{"building":"yes"}},"w205":{"id":"w205","nodes":["n940","n943","n944","n941","n940"],"tags":{"building":"yes"}},"w206":{"id":"w206","nodes":["n943","n945","n946","n947","n948","n944","n943"],"tags":{"building":"yes"}},"w207":{"id":"w207","nodes":["n944","n949","n950","n951","n941","n944"],"tags":{"building":"yes"}},"w208":{"id":"w208","nodes":["n941","n951","n952","n939","n942","n941"],"tags":{"building":"yes"}},"w209":{"id":"w209","nodes":["n952","n953","n954","n939","n952"],"tags":{"building":"yes"}},"w21":{"id":"w21","nodes":["n115","n116","n117","n118","n115"],"tags":{"building":"yes"}},"w210":{"id":"w210","nodes":["n953","n955","n956","n934","n937","n954","n953"],"tags":{"building":"yes"}},"w211":{"id":"w211","nodes":["n964","n965"],"tags":{"highway":"footway"}},"w212":{"id":"w212","nodes":["n966","n983","n967","n989"],"tags":{"highway":"footway"}},"w213":{"id":"w213","nodes":["n965","n968","n969","n966","n970","n971","n965"],"tags":{"highway":"footway"}},"w214":{"id":"w214","nodes":["n973","n999","n992","n974","n975","n976","n993","n977","n978","n979","n980","n967","n981","n1000","n1001","n1002","n1003","n1004","n1005","n1006","n1007","n1008","n1009"],"tags":{"footway":"sidewalk","highway":"footway"}},"w215":{"id":"w215","nodes":["n978","n982","n983","n984","n985","n986","n987","n988","n981"],"tags":{"highway":"footway"}},"w216":{"id":"w216","nodes":["n976","n990","n991","n992"],"tags":{"highway":"footway"}},"w217":{"id":"w217","nodes":["n998","n999"],"tags":{"highway":"footway"}},"w218":{"id":"w218","nodes":["n1019","n1020","n1021","n1022","n731","n728","n1023","n1025","n1024","n1019"],"tags":{"footway":"sidewalk","highway":"footway"}},"w219":{"id":"w219","nodes":["n719","n1026","n1027"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w22":{"id":"w22","nodes":["n119","n120","n121","n122","n119"],"tags":{"building":"yes"}},"w220":{"id":"w220","nodes":["n1027","n1028","n1019"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w221":{"id":"w221","nodes":["n2080","n1828","n1863","n1829"],"tags":{"highway":"tertiary","name":"Constantine Street"}},"w222":{"id":"w222","nodes":["n1029","n1030","n1031"],"tags":{"highway":"service"}},"w223":{"id":"w223","nodes":["n2213","n2171","n2183","n2180","n2205","n2177","n2179","n2218","n2200","n2188","n2169","n2196","n2162","n2170","n2211","n2216","n2204","n2220","n2164","n2210","n2217","n2189","n460","n453","n2282"],"tags":{"name":"Rocky River","waterway":"river"}},"w224":{"id":"w224","nodes":["n3750","n3751","n3752"],"tags":{"highway":"service","service":"alley","surface":"unpaved"}},"w225":{"id":"w225","nodes":["n2134","n2127","n2313","n2109","n2112","n2129","n2156","n2146","n2126","n2153","n2288","n2283","n2284","n2131","n2286","n2287","n2285","n2132","n2140","n2289","n2122","n2114","n2149","n2119","n2106","n2111","n2145","n2113","n2117","n2159","n2143","n2123","n2142","n2116","n2154","n2139","n2150","n2157","n2120","n2138","n2130","n2136","n2155","n2107","n2141","n2124","n3754","n2121","n2105","n2108","n3755","n2128","n2110","n2152","n2125","n2135","n2186","n2115","n2144","n2137","n2133","n2148","n2118","n1871","n1875","n1872","n2041","n1873","n2042","n1874","n1884","n1870","n2151","n2147","n2158","n2104","n2134"]},"w226":{"id":"w226","nodes":["n2243","n2280","n2244","n2245","n2246","n2247","n1931","n1932","n1933","n1934","n1935","n1936","n1937","n1938","n4681","n1939","n1940","n1941","n1942","n1943","n1944","n1945","n1946","n1947"],"tags":{"highway":"path","name":"Riverwalk Trail","surface":"asphalt","width":"3"}},"w227":{"id":"w227","nodes":["n2994","n3012","n3011","n2958"],"tags":{"highway":"secondary","name":"Main Street"}},"w228":{"id":"w228","nodes":["n2747","n2762","n2757","n2746","n2761","n2758","n2760","n2755","n2749","n2691","n1028","n2432","n2414","n2413","n2412","n2411","n2410","n720","n726","n370","n368","n2748"],"tags":{"highway":"primary","name":"Main Street"}},"w229":{"id":"w229","nodes":["n2083","n2103","n2102","n2084","n2085","n2086","n2087","n2242","n471","n324","n2101","n332","n1868"],"tags":{"name":"Conrail Railroad","railway":"rail"}},"w23":{"id":"w23","nodes":["n123","n124","n125","n126","n123"],"tags":{"building":"yes"}},"w230":{"id":"w230","nodes":["n2232","n2236","n2231","n2230","n2226","n2241","n2237","n2227","n1182","n2233","n2228","n2229","n1183","n2234","n19","n1891","n20","n2223","n2224","n2238","n2235","n2240","n2225","n2239"],"tags":{"name":"Saint Joseph River","waterway":"river"}},"w231":{"id":"w231","nodes":["n456","n1036","n1037","n1038"],"tags":{"barrier":"wall"}},"w232":{"id":"w232","nodes":["n1034","n1039","n1040"],"tags":{"barrier":"wall"}},"w233":{"id":"w233","nodes":["n1041","n1042","n1043","n1044","n1045","n1046","n1041"],"tags":{"access":"private","leisure":"swimming_pool"}},"w234":{"id":"w234","nodes":["n1047","n1048"],"tags":{"barrier":"hedge"}},"w235":{"id":"w235","nodes":["n1049","n1050","n1051","n1052","n1049"],"tags":{"building":"yes"}},"w236":{"id":"w236","nodes":["n1053","n1054","n1055","n1056","n1057","n1058","n1059","n1060","n1053"],"tags":{"building":"yes"}},"w237":{"id":"w237","nodes":["n1061","n1062","n1063","n1064","n1065","n1061"],"tags":{"building":"yes"}},"w238":{"id":"w238","nodes":["n1066","n1067","n1068","n1069","n1070","n1071","n1066"],"tags":{"building":"yes"}},"w239":{"id":"w239","nodes":["n1072","n1073","n1074","n1075","n1072"],"tags":{"building":"yes"}},"w24":{"id":"w24","nodes":["n127","n128","n129","n130","n127"],"tags":{"building":"yes"}},"w240":{"id":"w240","nodes":["n1076","n1077","n1078","n1079","n1080","n1081","n1076"],"tags":{"building":"yes"}},"w241":{"id":"w241","nodes":["n1082","n1083","n1084","n1085","n1082"],"tags":{"building":"yes"}},"w242":{"id":"w242","nodes":["n1086","n1087","n1088","n1089","n1086"],"tags":{"building":"yes"}},"w243":{"id":"w243","nodes":["n1090","n1091","n1092","n1093","n1094","n1095","n1096","n1097","n1090"],"tags":{"building":"yes"}},"w244":{"id":"w244","nodes":["n1098","n1099","n1100","n1101"],"tags":{"barrier":"fence"}},"w245":{"id":"w245","nodes":["n1102","n835","n30","n2590","n35","n29","n2591","n34","n28","n2592","n2312","n32","n2593","n31","n33","n2594","n2595","n1102"],"tags":{"highway":"service"}},"w246":{"id":"w246","nodes":["n1103","n1139","n1104"],"tags":{"barrier":"fence"}},"w247":{"id":"w247","nodes":["n1105","n1106","n1107","n1108","n1109","n1110","n1111","n1112","n1113","n1114","n1105"],"tags":{"building":"yes"}},"w248":{"id":"w248","nodes":["n1115","n1116","n1117","n1118","n1119","n1120","n1115"],"tags":{"building":"yes"}},"w249":{"id":"w249","nodes":["n1121","n1122","n1123","n1124","n1121"],"tags":{"building":"yes"}},"w25":{"id":"w25","nodes":["n131","n132","n133","n134","n135","n136","n137","n138","n139","n140","n141","n142","n131"],"tags":{"building":"yes"}},"w250":{"id":"w250","nodes":["n1125","n1126","n1127","n1128","n1129","n1130","n1131","n1132","n1133","n1134","n1135","n1136","n1125"],"tags":{"building":"yes"}},"w251":{"id":"w251","nodes":["n1137","n1138","n1139"],"tags":{"barrier":"fence"}},"w252":{"id":"w252","nodes":["n876","n1140","n1141"],"tags":{"footway":"sidewalk","highway":"footway"}},"w253":{"id":"w253","nodes":["n1141","n1142","n1143","n1144","n1145","n1146"],"tags":{"footway":"sidewalk","highway":"footway"}},"w254":{"id":"w254","nodes":["n1146","n4743","n1147","n1148"],"tags":{"footway":"sidewalk","highway":"footway"}},"w255":{"id":"w255","nodes":["n1148","n1149","n1150","n1151"],"tags":{"bridge":"yes","footway":"sidewalk","highway":"footway","layer":"1"}},"w256":{"id":"w256","nodes":["n1151","n1153","n1154","n1155"],"tags":{"footway":"sidewalk","highway":"footway"}},"w257":{"id":"w257","nodes":["n1155","n1156"],"tags":{"bridge":"yes","footway":"sidewalk","highway":"footway","layer":"1"}},"w258":{"id":"w258","nodes":["n1157","n1158"],"tags":{"barrier":"retaining_wall"}},"w259":{"id":"w259","nodes":["n1156","n1161","n1159","n1160","n719"],"tags":{"footway":"sidewalk","highway":"footway"}},"w26":{"id":"w26","nodes":["n143","n608","n144"],"tags":{"highway":"service"}},"w260":{"id":"w260","nodes":["n1162","n1163","n1164","n1165","n1166","n1167","n1168","n1169","n1170","n2528"],"tags":{"highway":"footway"}},"w261":{"id":"w261","nodes":["n1171","n1172","n1173"],"tags":{"barrier":"wall"}},"w262":{"id":"w262","nodes":["n1175","n1176","n1177","n1178","n1179","n1180","n1181","n1175"],"tags":{"natural":"wood"}},"w263":{"id":"w263","nodes":["n1947","n1184","n1948","n1185","n1949","n1957","n1950","n480","n1951","n479","n478","n477","n1952","n1851","n1956","n2248","n619","n618","n2249","n2250","n2251","n617","n2252","n616","n2253","n829","n2254","n827","n828","n2255","n830","n2256","n826","n2257","n831","n2258","n832","n835","n834","n2312","n2267","n2259","n833","n2268","n2260","n836","n2261","n837","n2262","n838","n2263","n2264","n839","n2265","n840","n2266"],"tags":{"highway":"path","name":"Riverwalk Trail","surface":"asphalt","width":"3"}},"w264":{"id":"w264","nodes":["n1186","n1187","n1188","n1189","n1186"],"tags":{"building":"yes"}},"w265":{"id":"w265","nodes":["n1190","n1191","n1192","n1193","n1190"],"tags":{"building":"yes"}},"w266":{"id":"w266","nodes":["n1194","n1195","n1196","n1197","n1198","n1199","n1200","n1201","n1194"],"tags":{"building":"yes"}},"w267":{"id":"w267","nodes":["n1205","n1206","n1207","n1208","n1209","n1210","n1205"],"tags":{"building":"house"}},"w268":{"id":"w268","nodes":["n1211","n1212","n1213","n1214","n1215","n1216","n1217","n1218","n1219","n1220","n1211"],"tags":{"building":"house"}},"w269":{"id":"w269","nodes":["n1221","n1225","n1222","n1223","n1224","n1221"],"tags":{"building":"house"}},"w27":{"id":"w27","nodes":["n145","n147","n146"],"tags":{"highway":"footway"}},"w270":{"id":"w270","nodes":["n1225","n1226","n1227","n1229","n1228"],"tags":{"barrier":"fence"}},"w271":{"id":"w271","nodes":["n1229","n1230"],"tags":{"barrier":"fence"}},"w272":{"id":"w272","nodes":["n1231","n1232","n1233","n1234","n1235","n1236","n1237","n1238","n1231"],"tags":{"building":"house"}},"w273":{"id":"w273","nodes":["n1239","n1240","n1241","n1242","n1243","n1244","n1245","n1246","n1239"],"tags":{"building":"house"}},"w274":{"id":"w274","nodes":["n1247","n1248","n1249","n1250","n1247"],"tags":{"building":"house"}},"w275":{"id":"w275","nodes":["n1251","n1252","n1253","n1254","n1255","n1256","n1251"],"tags":{"building":"house"}},"w276":{"id":"w276","nodes":["n1257","n1258","n1259","n1260","n1257"],"tags":{"building":"shed"}},"w277":{"id":"w277","nodes":["n1261","n1262","n1263","n1264","n1265","n1266","n1267","n1268","n1261"],"tags":{"building":"house"}},"w278":{"id":"w278","nodes":["n1269","n1270","n1271","n1272","n1273","n1274","n1284","n1269"],"tags":{"building":"house"}},"w279":{"id":"w279","nodes":["n1275","n1276","n1277","n1278","n1279","n1280","n1275"],"tags":{"building":"house"}},"w28":{"id":"w28","nodes":["n147","n148"],"tags":{"highway":"footway"}},"w280":{"id":"w280","nodes":["n1281","n1282","n1283","n1284"],"tags":{"barrier":"fence"}},"w281":{"id":"w281","nodes":["n1285","n1286","n1287","n1288","n1285"],"tags":{"building":"house"}},"w282":{"id":"w282","nodes":["n1289","n1290","n1291","n1292","n1293","n1294","n1295","n1296","n1289"],"tags":{"building":"house"}},"w283":{"id":"w283","nodes":["n1297","n1298","n1299","n1300","n1301","n1302","n1297"],"tags":{"access":"private","leisure":"swimming_pool"}},"w284":{"id":"w284","nodes":["n1303","n1304","n1305","n1306","n1307","n1308","n1309","n1310","n1311","n1312","n1303"],"tags":{"building":"house"}},"w285":{"id":"w285","nodes":["n1313","n1314","n1315","n1316","n1313"],"tags":{"building":"house"}},"w286":{"id":"w286","nodes":["n1317","n1318","n1319","n1320","n1321","n1322","n1323","n1324","n1325","n1326","n1327","n1328","n1329","n1330","n1317"],"tags":{"building":"house"}},"w287":{"id":"w287","nodes":["n1331","n1332","n1333","n1334","n1465","n1335","n1336","n1331"],"tags":{"building":"yes"}},"w288":{"id":"w288","nodes":["n1349","n1350","n1351","n1352","n1353","n1354","n1355","n1337","n1338","n1341","n1342","n1343","n1344","n1345","n1346","n1347","n1348","n1339","n1340","n1349"],"tags":{"access":"private","leisure":"swimming_pool"}},"w289":{"id":"w289","nodes":["n1356","n1331"],"tags":{"barrier":"fence"}},"w29":{"id":"w29","nodes":["n149","n874","n150","n151","n897","n898","n875","n152"],"tags":{"highway":"service","oneway":"yes"}},"w290":{"id":"w290","nodes":["n1357","n1358","n1359","n1360","n1357"],"tags":{"building":"shed"}},"w291":{"id":"w291","nodes":["n1358","n1361","n1362"],"tags":{"barrier":"fence"}},"w292":{"id":"w292","nodes":["n1363","n1364","n1365","n1366","n1367","n1368","n1363"],"tags":{"building":"house"}},"w293":{"id":"w293","nodes":["n1369","n1370","n1371","n1372","n1373","n1374","n1369"],"tags":{"leisure":"swimming_pool"}},"w294":{"id":"w294","nodes":["n1367","n1375","n1376","n1377"],"tags":{"barrier":"fence"}},"w295":{"id":"w295","nodes":["n1378","n1379","n1380","n1381","n1378"],"tags":{"building":"house"}},"w296":{"id":"w296","nodes":["n1382","n1383","n1384","n1385","n1386","n1387","n1382"],"tags":{"building":"house"}},"w297":{"id":"w297","nodes":["n1388","n1389","n1390","n1391","n1392","n1393","n1388"],"tags":{"building":"house"}},"w298":{"id":"w298","nodes":["n1394","n1395","n1396","n1397","n1394"],"tags":{"building":"house"}},"w299":{"id":"w299","nodes":["n1398","n1399","n1400","n1401","n1398"],"tags":{"access":"private3","leisure":"swimming_pool"}},"w3":{"id":"w3","nodes":["n1","n2"],"tags":{"highway":"track","name":"Water Street"}},"w30":{"id":"w30","nodes":["n153","n154","n155","n156","n153"],"tags":{"amenity":"parking"}},"w300":{"id":"w300","nodes":["n1402","n1403","n1404","n1405","n1406","n1407","n1408","n1409","n1410","n1411","n1412","n1413","n1402"],"tags":{"building":"house"}},"w301":{"id":"w301","nodes":["n1414","n1415","n1416","n1417","n1414"],"tags":{"building":"garage"}},"w302":{"id":"w302","nodes":["n1406","n1418","n1419","n1403"],"tags":{"barrier":"fence"}},"w303":{"id":"w303","nodes":["n1423","n1424","n1425","n1426","n1427","n1428","n1429","n1430","n1431","n1432","n1423"],"tags":{"building":"house"}},"w304":{"id":"w304","nodes":["n1433","n1434","n1435","n1446","n1436","n1437","n1438","n1439","n1444","n1440","n1441","n1445","n1442","n1443","n1433"],"tags":{"access":"private","leisure":"swimming_pool"}},"w305":{"id":"w305","nodes":["n1447","n1448","n1452","n1453","n1454","n1451","n1449","n1450","n1447"],"tags":{"building":"house"}},"w306":{"id":"w306","nodes":["n1455","n1456","n1457","n1458","n1455"],"tags":{"building":"shed"}},"w307":{"id":"w307","nodes":["n1459","n1460","n1461","n1462","n1459"],"tags":{"building":"shed"}},"w308":{"id":"w308","nodes":["n1463","n1464"],"tags":{"barrier":"fence"}},"w309":{"id":"w309","nodes":["n1465","n1466","n1467","n1468"],"tags":{"barrier":"fence"}},"w31":{"id":"w31","nodes":["n157","n605","n158"],"tags":{"highway":"service"}},"w310":{"id":"w310","nodes":["n1469","n1481","n1463"],"tags":{"barrier":"hedge"}},"w311":{"id":"w311","nodes":["n1470","n1471","n1472","n1473","n1474","n1475","n1480","n1476","n1477","n1478","n1479","n1470"],"tags":{"building":"house"}},"w312":{"id":"w312","nodes":["n1480","n1481"],"tags":{"barrier":"wall"}},"w313":{"id":"w313","nodes":["n1482","n1483","n1484","n1485","n1486","n1487","n1488","n1489","n1490","n1491","n1482"],"tags":{"access":"private","leisure":"swimming_pool"}},"w314":{"id":"w314","nodes":["n1492","n1493","n1494","n1495","n1496","n1497","n1498","n1499","n1500","n1501","n1502","n1503","n1504","n1505","n1492"],"tags":{"building":"house"}},"w315":{"id":"w315","nodes":["n1506","n1507","n1508","n1509","n1510","n1511","n1512","n1513","n1514","n1515","n1506"],"tags":{"building":"house"}},"w316":{"id":"w316","nodes":["n1516","n1517","n1518","n1519","n1520","n1521","n1522","n1523","n1516"],"tags":{"building":"house"}},"w317":{"id":"w317","nodes":["n1524","n1525","n1526","n1527","n1528","n1529","n1530","n1531","n1524"],"tags":{"building":"house"}},"w318":{"id":"w318","nodes":["n1532","n1533"],"tags":{"barrier":"fence"}},"w319":{"id":"w319","nodes":["n1534","n1532","n1535"],"tags":{"barrier":"fence"}},"w32":{"id":"w32","nodes":["n159","n160","n161","n162","n159"],"tags":{"amenity":"parking"}},"w320":{"id":"w320","nodes":["n1536","n1537","n1538","n1539","n1536"],"tags":{"building":"shed"}},"w321":{"id":"w321","nodes":["n1540","n1541","n1542","n1543","n1540"],"tags":{"building":"shed"}},"w322":{"id":"w322","nodes":["n1544","n1545","n1546","n1547","n1544"],"tags":{"building":"shed"}},"w323":{"id":"w323","nodes":["n1548","n1549","n1550","n1551","n1548"],"tags":{"building":"house"}},"w324":{"id":"w324","nodes":["n1552","n1553","n1554","n1555","n1556","n1557","n1558","n1559","n1552"],"tags":{"building":"house"}},"w325":{"id":"w325","nodes":["n1560","n1561","n1562","n1563","n1564","n1565","n1566","n1567","n1560"],"tags":{"building":"house"}},"w326":{"id":"w326","nodes":["n1561","n1568","n1569","n1570"],"tags":{"barrier":"wall"}},"w327":{"id":"w327","nodes":["n1571","n1572"],"tags":{"barrier":"fence"}},"w328":{"id":"w328","nodes":["n1573","n1574","n1575","n1576","n1573"],"tags":{"building":"house"}},"w329":{"id":"w329","nodes":["n1577","n1578","n1579","n1580","n1581","n1582","n1583","n1584","n1585","n1586","n1577"],"tags":{"building":"house"}},"w33":{"id":"w33","nodes":["n157","n163"],"tags":{"highway":"service"}},"w330":{"id":"w330","nodes":["n1587","n1588","n1589","n1590","n1591","n1592","n1593","n1594","n1587"],"tags":{"building":"house"}},"w331":{"id":"w331","nodes":["n1595","n1596","n1597","n1598","n1599","n1600","n1601","n1595"],"tags":{"access":"private","leisure":"swimming_pool"}},"w332":{"id":"w332","nodes":["n1602","n1603","n1604","n1605","n1606","n1607","n1608","n1609","n1611","n1610","n1612","n1613","n1602"],"tags":{"building":"house"}},"w333":{"id":"w333","nodes":["n2018","n1626","n1627","n2017","n2018"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelter"}},"w334":{"id":"w334","nodes":["n2","n3","n2764"],"tags":{"highway":"service","name":"Water Street"}},"w335":{"id":"w335","nodes":["n3","n1628","n1614"],"tags":{"highway":"service"}},"w336":{"id":"w336","nodes":["n3198","n4545","n2747"],"tags":{"highway":"residential","name":"Morris Avenue"}},"w337":{"id":"w337","nodes":["n1629","n3504"],"tags":{"highway":"service","service":"alley","surface":"unpaved"}},"w338":{"id":"w338","nodes":["n1813","n1635","n1814","n1634","n1815","n1632","n1816","n1817"],"tags":{"highway":"service","service":"parking_aisle"}},"w339":{"id":"w339","nodes":["n1827","n4684","n4690","n1842","n4686","n4685","n1826","n1828","n1846","n1645","n1637","n4703","n1641"],"tags":{"highway":"residential","name":"Millard Street"}},"w34":{"id":"w34","nodes":["n164","n165","n166","n171","n866","n172","n167","n168","n169","n910","n170","n164"],"tags":{"amenity":"parking"}},"w340":{"id":"w340","nodes":["n1824","n1825"],"tags":{"highway":"service","service":"parking_aisle"}},"w341":{"id":"w341","nodes":["n1701","n1702","n1703","n1704","n1705","n1706","n1701"],"tags":{"building":"yes"}},"w342":{"id":"w342","nodes":["n1855","n1860","n1856","n1775","n1804","n1776","n1855"],"tags":{"amenity":"parking","fee":"no"}},"w343":{"id":"w343","nodes":["n1757","n1758","n1759","n1760","n1757"],"tags":{"building":"yes"}},"w344":{"id":"w344","nodes":["n1659","n1660","n1661","n1662","n1663","n1664","n1665","n1666","n1659"],"tags":{"building":"school"}},"w345":{"id":"w345","nodes":["n1751","n1752","n1753","n1754","n1755","n1756","n1751"],"tags":{"building":"yes"}},"w346":{"id":"w346","nodes":["n1641","n1676","n1673","n1639","n1810","n1642","n1849","n4759","n1845"],"tags":{"highway":"residential","name":"Douglas Avenue"}},"w347":{"id":"w347","nodes":["n1642","n1643","n1031","n1630","n845","n1631","n816","n1831","n902","n905","n152","n149","n1832","n1850","n878","n1833","n1852","n42","n1834","n61","n60","n1851","n1835"],"tags":{"highway":"primary","name":"Michigan Avenue"}},"w348":{"id":"w348","nodes":["n1650","n1651","n1652","n1653","n1654","n1655","n1656","n1657","n1658","n1650"],"tags":{"leisure":"playground"}},"w349":{"id":"w349","nodes":["n1861","n1818","n1819","n1820","n1821","n1825","n1823","n1639"],"tags":{"highway":"service"}},"w35":{"id":"w35","nodes":["n168","n167","n172"],"tags":{"barrier":"fence","fence_type":"chain_link"}},"w350":{"id":"w350","nodes":["n1783","n1819","n1784","n1857","n1861","n1858","n1783"],"tags":{"amenity":"parking"}},"w351":{"id":"w351","nodes":["n1717","n1718","n1719","n1720","n1717"],"tags":{"building":"yes"}},"w352":{"id":"w352","nodes":["n1743","n1744","n1745","n1746","n1747","n1748","n1749","n1750","n1743"],"tags":{"building":"yes"}},"w353":{"id":"w353","nodes":["n1637","n1636","n1029","n4715","n1630"],"tags":{"highway":"residential","name":"Lincoln Avenue"}},"w354":{"id":"w354","nodes":["n1713","n1714","n1715","n1716","n1713"],"tags":{"building":"yes"}},"w355":{"id":"w355","nodes":["n1689","n1690","n1691","n1692","n1693","n1694","n1695","n1696","n1689"],"tags":{"building":"yes"}},"w356":{"id":"w356","nodes":["n1631","n4717","n1840","n4745","n1841"],"tags":{"highway":"residential","name":"Hook Avenue"}},"w357":{"id":"w357","nodes":["n1737","n1738","n1739","n1740","n1741","n1742","n1737"],"tags":{"building":"yes"}},"w358":{"id":"w358","nodes":["n1707","n1708","n1709","n1710","n1711","n1712","n1707"],"tags":{"building":"yes"}},"w359":{"id":"w359","nodes":["n1829","n4695","n4697","n1843","n4698","n4701","n1638","n4702","n4705","n1636","n4706","n4707","n1633"],"tags":{"highway":"residential","name":"South Street"}},"w36":{"id":"w36","nodes":["n910","n171","n866","n172"],"tags":{"barrier":"fence","fence_type":"chain_link"}},"w360":{"id":"w360","nodes":["n1767","n1768","n1769","n1770","n1771","n1772","n1773","n1774","n1767"],"tags":{"building":"yes"}},"w361":{"id":"w361","nodes":["n1859","n1860","n1804","n1640","n1805","n1817","n1806","n1644","n1811","n1807","n1808","n3419","n1812","n1790","n3418","n3744","n1809","n1813","n1810"],"tags":{"highway":"service"}},"w362":{"id":"w362","nodes":["n1639","n1683","n4710","n1633"],"tags":{"highway":"residential","name":"South Street","oneway":"yes"}},"w363":{"id":"w363","nodes":["n1646","n1647","n1648","n1649","n1646"],"tags":{"leisure":"pitch","pitch":"basketball"}},"w364":{"id":"w364","nodes":["n3820","n3821","n3822","n3823","n3824","n3825","n3826","n3827","n3828","n3829","n3830","n3838","n3839","n3820"],"tags":{"amenity":"school","name":"Three Rivers Middle School"}},"w365":{"id":"w365","nodes":["n1721","n1722","n1723","n1724","n1725","n1726","n1727","n1728","n1729","n1730","n1731","n1732","n1733","n1734","n1735","n1736","n1721"],"tags":{"building":"yes"}},"w366":{"id":"w366","nodes":["n1791","n1792","n1793","n1794","n1795","n1796","n1798","n1799","n1800","n1801","n1802","n1803","n1791"],"tags":{"amenity":"parking"}},"w367":{"id":"w367","nodes":["n1633","n4708","n4711","n1643","n4712","n1838","n4752","n1839"],"tags":{"highway":"residential","name":"Grant Avenue"}},"w368":{"id":"w368","nodes":["n1853","n1687","n1688","n1854","n1853"],"tags":{"amenity":"library","building":"yes","name":"Three Rivers Public Library"}},"w369":{"id":"w369","nodes":["n1777","n1778","n1779","n1780","n1781","n1782","n1777"],"tags":{"amenity":"parking"}},"w37":{"id":"w37","nodes":["n173","n174","n175","n176","n177","n178","n179","n180","n173"],"tags":{"building":"yes"}},"w370":{"id":"w370","nodes":["n1645","n1638","n858","n4718","n1631"],"tags":{"highway":"residential","name":"Hook Avenue"}},"w371":{"id":"w371","nodes":["n3836","n3835","n4624","n3831","n4632","n3834","n3832","n3833","n3830","n3838","n3839","n3837","n3836"],"tags":{"amenity":"school","name":"Three Rivers High School"}},"w372":{"id":"w372","nodes":["n1697","n1698","n1699","n1700","n1697"],"tags":{"building":"yes"}},"w373":{"id":"w373","nodes":["n2891","n1785","n1786","n3394","n1787","n1788","n1789","n1830","n1836","n1837","n1848","n3409","n2891"],"tags":{"amenity":"parking"}},"w374":{"id":"w374","nodes":["n1761","n1762","n1763","n1764","n1765","n1766","n1761"],"tags":{"building":"yes"}},"w375":{"id":"w375","nodes":["n1822","n1823"],"tags":{"highway":"service","service":"parking_aisle"}},"w376":{"id":"w376","nodes":["n1677","n1678","n1679","n1680","n1681","n1682","n1677"],"tags":{"amenity":"parking"}},"w377":{"id":"w377","nodes":["n1676","n1675","n1674","n1673"],"tags":{"highway":"service","oneway":"yes"}},"w378":{"id":"w378","nodes":["n1667","n1668","n1669","n1670","n1671","n1672","n1667"],"tags":{"amenity":"school","name":"Andrews Elementary School"}},"w379":{"id":"w379","nodes":["n1630","n4714","n1847","n4750","n1844"],"tags":{"highway":"residential","name":"Lincoln Avenue"}},"w38":{"id":"w38","nodes":["n181","n182","n183","n185","n184","n181"],"tags":{"building":"yes"}},"w380":{"id":"w380","nodes":["n1683","n3745","n1686","n1633"],"tags":{"highway":"service","oneway":"yes","service":"parking_aisle"}},"w381":{"id":"w381","nodes":["n2022","n2037"],"tags":{"highway":"footway"}},"w382":{"id":"w382","nodes":["n1826","n1863"],"tags":{"highway":"residential"}},"w383":{"id":"w383","nodes":["n2011","n2012","n739","n2013","n2014","n2029","n2011"],"tags":{"amenity":"shelter","building":"yes","shelter_type":"picnic_shelter"}},"w384":{"id":"w384","nodes":["n2064","n2065","n2066","n2067","n2068","n2069","n2070","n2071","n2072","n2073","n2074","n2075","n2076","n2077","n2078","n2079","n2064"],"tags":{"building":"yes"}},"w385":{"id":"w385","nodes":["n1923","n1924","n1925","n1926","n1927","n1928","n1930","n1929","n1923"],"tags":{"natural":"water"}},"w386":{"id":"w386","nodes":["n1827","n14","n1886","n15","n1887","n16","n1888","n18","n17","n1889","n12","n13","n1890","n485","n1864","n11","n10","n2058","n2036","n1865","n2020","n9","n8","n1866","n295","n1867"],"tags":{"highway":"service"}},"w387":{"id":"w387","nodes":["n1846","n1843","n865","n157","n4721","n1831"],"tags":{"highway":"residential","name":"Andrews Street"}},"w388":{"id":"w388","nodes":["n2019","n2020","n2021","n2022","n2023","n2024","n2025","n2026","n2027","n2028","n2029"],"tags":{"highway":"footway"}},"w389":{"id":"w389","nodes":["n2217","n2222","n2221","n2219","n1877","n1879","n1882","n1883","n484","n1885","n483","n1880","n1881","n1878","n1884","n2223"],"tags":{"name":"Rocky River","waterway":"river"}},"w39":{"id":"w39","nodes":["n185","n186","n187"],"tags":{"barrier":"fence"}},"w390":{"id":"w390","nodes":["n2050","n2051","n2052","n2053","n2050"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelter"}},"w391":{"id":"w391","nodes":["n2089","n2090","n2091","n2092","n2093","n2094","n2311","n2095","n2096","n2097","n2098","n1174","n2099","n751","n43","n2062","n4725","n873","n1832"],"tags":{"highway":"residential","name":"Constantine Street"}},"w392":{"id":"w392","nodes":["n1869","n212","n436","n2281","n2081"],"tags":{"highway":"primary","name":"Michigan Avenue"}},"w393":{"id":"w393","nodes":["n1829","n611","n144","n4694","n602","n1832"],"tags":{"highway":"tertiary","name":"Constantine Street"}},"w394":{"id":"w394","nodes":["n1997","n1998","n2000","n1999"],"tags":{"highway":"service","service":"parking_aisle"}},"w395":{"id":"w395","nodes":["n1835","n1869"],"tags":{"bridge":"yes","highway":"primary","name":"Michigan Avenue"}},"w396":{"id":"w396","nodes":["n2000","n2001"],"tags":{"highway":"service","service":"parking_aisle"}},"w397":{"id":"w397","nodes":["n2082","n4688","n1842","n308","n498","n509","n246","n241","n1867","n4645","n293","n1834"],"tags":{"highway":"residential","name":"Spring Street"}},"w398":{"id":"w398","nodes":["n2015","n2016","n2017","n2018","n2015"],"tags":{"building":"yes"}},"w399":{"id":"w399","nodes":["n2062","n45","n2063","n877","n41","n1852"],"tags":{"highway":"service"}},"w4":{"id":"w4","nodes":["n7","n38","n378","n379","n7"],"tags":{"building":"yes"}},"w40":{"id":"w40","nodes":["n188","n189","n190","n191","n192","n193","n188"],"tags":{"building":"house"}},"w400":{"id":"w400","nodes":["n1968","n1969","n1970","n1971","n2007","n1972","n1973","n1978","n1974","n1977","n1976","n1975","n1968"],"tags":{"amenity":"parking"}},"w401":{"id":"w401","nodes":["n1963","n1964"],"tags":{"bridge":"yes","highway":"footway"}},"w402":{"id":"w402","nodes":["n1892","n1893","n1894","n1895","n1896","n1897","n1898","n1899","n1900","n1901","n1902","n1903","n1892"],"tags":{"addr:city":"Three Rivers","addr:housenumber":"112","addr:postcode":"49093","addr:state":"MI","addr:street":"Spring Street","barrier":"fence","name":"Scidmore Park Petting Zoo","tourism":"zoo","zoo":"petting_zoo"}},"w403":{"id":"w403","nodes":["n1957","n1958","n1959","n481","n1960","n482","n1949"],"tags":{"highway":"path"}},"w404":{"id":"w404","nodes":["n2281","n27","n330","n1987","n1988"],"tags":{"highway":"service"}},"w405":{"id":"w405","nodes":["n2249","n2269","n2270","n2271","n2272","n454","n455","n2273"],"tags":{"highway":"path","name":"Riverwalk Trail"}},"w406":{"id":"w406","nodes":["n1947","n1624","n1625","n2030","n2033","n4658","n4659","n2031","n2032","n2021"],"tags":{"highway":"footway"}},"w407":{"id":"w407","nodes":["n2034","n2036","n2009"],"tags":{"highway":"footway"}},"w408":{"id":"w408","nodes":["n1964","n1965","n2002","n1966","n21","n1967","n1969"],"tags":{"highway":"footway"}},"w409":{"id":"w409","nodes":["n1904","n1905","n1906","n1907","n1908","n1909","n748","n1910","n747","n1911","n749","n1912","n750","n1913","n1922","n1914","n1921","n1915","n746","n1916","n745","n1917","n744","n1918","n743","n742","n1919","n741","n1920","n740","n1904"],"tags":{"natural":"water"}},"w41":{"id":"w41","nodes":["n194","n195","n196","n197","n198","n199","n200","n201","n202","n203","n204","n205","n194"],"tags":{"building":"house"}},"w410":{"id":"w410","nodes":["n1868","n2088"],"tags":{"bridge":"yes","name":"Conrail Railroad","railway":"rail"}},"w411":{"id":"w411","nodes":["n2010","n2019","n2009","n2008","n2058","n2035","n1961","n1962","n1947","n1963"],"tags":{"highway":"footway"}},"w412":{"id":"w412","nodes":["n2290","n2043","n2044","n2045","n1872","n2041","n1873","n2042","n1874","n2046","n2047","n2048","n2049","n2290"],"tags":{"addr:city":"Three Rivers","addr:housenumber":"112","addr:postcode":"49093","addr:state":"MI","addr:street":"Spring Street","leisure":"park","name":"Scidmore Park"}},"w413":{"id":"w413","nodes":["n1831","n876","n4720","n821","n2089"],"tags":{"highway":"residential","name":"Andrews Street"}},"w414":{"id":"w414","nodes":["n2002","n2003","n2004","n2005","n2006","n2007"],"tags":{"highway":"footway"}},"w415":{"id":"w415","nodes":["n1979","n1980","n1981","n1982","n1979"],"tags":{"amenity":"parking"}},"w416":{"id":"w416","nodes":["n2054","n2055","n2056","n2057","n2054"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelter"}},"w417":{"id":"w417","nodes":["n2291","n2292","n2293","n2294","n2295","n2296","n2297","n2298","n2299","n1098","n2300","n2301","n2302","n2303","n2304","n2059","n2060","n2305","n2307","n2306","n2310","n2308","n2309","n2291"],"tags":{"leisure":"park","name":"Memory Isle Park"}},"w418":{"id":"w418","nodes":["n2033","n2034","n2035"],"tags":{"highway":"footway"}},"w419":{"id":"w419","nodes":["n1983","n1984","n1985","n1986","n1983"],"tags":{"amenity":"parking"}},"w42":{"id":"w42","nodes":["n206","n207","n208","n209","n210","n211","n206"],"tags":{"building":"house"}},"w420":{"id":"w420","nodes":["n1840","n4746","n4748","n1847","n4749","n4755","n1838","n4754","n4756","n1849"],"tags":{"highway":"residential","name":"French Street"}},"w421":{"id":"w421","nodes":["n2337","n2268"],"tags":{"highway":"path"}},"w422":{"id":"w422","nodes":["n2338","n2339","n2320","n2317","n2319","n2318","n2340","n2341","n2342","n2343","n2344","n2345","n2346","n2347","n2348","n2338"],"tags":{"natural":"water"}},"w423":{"id":"w423","nodes":["n2180","n2349","n2350","n2351","n2352","n2404","n2353","n2354","n2355","n2356","n2357","n2358","n2359","n2360","n2361","n2362","n2363","n2364","n2365","n2366","n2370","n2371","n2372","n2373","n2374","n2375","n2377","n2378","n2380","n2381","n2382","n2383","n2386","n2389","n2390","n2391","n2392","n2393","n2396","n2397","n2401","n2402","n2321","n2322","n2323","n2403","n2180"],"tags":{"natural":"wetland"}},"w424":{"id":"w424","nodes":["n2324","n2316","n1841","n2315","n2314","n1844","n1839","n4758","n1845"],"tags":{"highway":"residential","name":"Pealer Street"}},"w425":{"id":"w425","nodes":["n2267","n2337","n2336","n2335","n2334","n2333","n2332","n2331","n2330","n37","n2329","n2328","n2327","n36","n2326","n2325","n2266"],"tags":{"highway":"path","name":"Riverwalk Trail"}},"w426":{"id":"w426","nodes":["n2478","n681","n680","n679","n2459","n2467","n2487","n2478"],"tags":{"building":"yes"}},"w427":{"id":"w427","nodes":["n2671","n2672","n2673","n2674","n2671"],"tags":{"building":"yes"}},"w428":{"id":"w428","nodes":["n2483","n2482","n2486","n2489","n2492","n2502","n2495","n2480","n2483"],"tags":{"building":"yes"}},"w429":{"id":"w429","nodes":["n2707","n2708","n2716","n2712","n2714","n2713","n2715","n2711","n2710","n2723","n2709","n2707"],"tags":{"amenity":"parking"}},"w43":{"id":"w43","nodes":["n1955","n1956"],"tags":{"footway":"sidewalk","highway":"footway","name":"Riverwalk Trail"}},"w430":{"id":"w430","nodes":["n2471","n2474","n2484","n2479","n2471"],"tags":{"building":"yes"}},"w431":{"id":"w431","nodes":["n2218","n2434","n2436","n2433","n2435","n2210"],"tags":{"name":"Rocky River","waterway":"river"}},"w432":{"id":"w432","nodes":["n2782","n2532","n2783","n2784","n2782"],"tags":{"amenity":"parking"}},"w433":{"id":"w433","nodes":["n2513","n649","n2520","n2514","n2507","n2513"],"tags":{"building":"yes"}},"w434":{"id":"w434","nodes":["n2470","n2468","n2461","n2465","n2470"],"tags":{"building":"yes"}},"w435":{"id":"w435","nodes":["n2598","n2599","n648","n649","n2520","n2598"],"tags":{"building":"yes"}},"w436":{"id":"w436","nodes":["n2639","n2640","n2641","n2642","n2643","n2644","n2645","n2646","n2647","n2648","n2639"],"tags":{"building":"yes"}},"w437":{"id":"w437","nodes":["n2503","n2512","n2508","n2499","n2503"],"tags":{"building":"yes"}},"w438":{"id":"w438","nodes":["n2440","n2800","n2774","n1"],"tags":{"highway":"residential","name":"Water Street"}},"w439":{"id":"w439","nodes":["n2675","n2676","n2677","n2678","n2675"],"tags":{"building":"yes"}},"w44":{"id":"w44","nodes":["n213","n214","n215","n216","n213"],"tags":{"building":"yes"}},"w440":{"id":"w440","nodes":["n2512","n2503","n2507","n2514","n2512"],"tags":{"building":"yes"}},"w441":{"id":"w441","nodes":["n2554","n2717","n674","n2720","n2798"],"tags":{"highway":"service","oneway":"yes"}},"w442":{"id":"w442","nodes":["n2583","n2596","n2584","n2585","n2595","n2586","n2587","n2588","n2589","n2583"],"tags":{"amenity":"parking"}},"w443":{"id":"w443","nodes":["n2629","n2627","n2628","n2616","n2630","n2629"],"tags":{"building":"yes"}},"w444":{"id":"w444","nodes":["n2717","n2724","n670","n2718","n669","n668","n2722","n2727"],"tags":{"highway":"service","oneway":"yes","service":"parking_aisle"}},"w445":{"id":"w445","nodes":["n2572","n2573"],"tags":{"bridge":"yes","highway":"path","name":"Riverwalk Trail"}},"w446":{"id":"w446","nodes":["n2603","n2604","n2601","n2605","n2606","n2607","n2603"],"tags":{"building":"yes"}},"w447":{"id":"w447","nodes":["n2780","n2777","n628","n624","n2779"],"tags":{"highway":"residential","name":"Foster Street","oneway":"yes"}},"w448":{"id":"w448","nodes":["n2733","n2734","n2735","n2736","n2737","n2738","n663","n664","n2739","n2733"],"tags":{"building":"yes"}},"w449":{"id":"w449","nodes":["n2564","n2565","n2566","n2567","n2568","n2794","n2795","n2564"],"tags":{"amenity":"parking"}},"w45":{"id":"w45","nodes":["n217","n218","n219","n220","n217"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelter"}},"w450":{"id":"w450","nodes":["n2799","n2728","n2729","n2730","n2731","n2732","n2799"],"tags":{"building":"yes"}},"w451":{"id":"w451","nodes":["n2441","n1170","n2442","n2575","n2443","n2445","n2444","n2448","n2441"],"tags":{"amenity":"parking"}},"w452":{"id":"w452","nodes":["n2273","n457","n2569","n458","n2570"],"tags":{"highway":"path","name":"Riverwalk Trail"}},"w453":{"id":"w453","nodes":["n2447","n2242","n2448","n2527","n2530"],"tags":{"highway":"service"}},"w454":{"id":"w454","nodes":["n2560","n333","n2561"],"tags":{"highway":"service","service":"parking_aisle"}},"w455":{"id":"w455","nodes":["n2679","n2680","n2681","n2682","n2683","n2684","n2685","n2686","n2687","n2688","n2689","n2690","n2679"],"tags":{"building":"yes"}},"w456":{"id":"w456","nodes":["n2425","n2429","n2424"],"tags":{"bridge":"yes","highway":"residential","name":"Moore Street"}},"w457":{"id":"w457","nodes":["n2487","n2467","n2472","n2480","n2495","n2487"],"tags":{"building":"yes"}},"w458":{"id":"w458","nodes":["n2659","n2660","n2661","n2662","n678","n677","n2663","n2664","n2665","n2666","n675","n676","n2659"],"tags":{"building":"yes"}},"w459":{"id":"w459","nodes":["n2600","n2598","n2599","n2601","n2605","n2602","n2600"],"tags":{"building":"yes"}},"w46":{"id":"w46","nodes":["n221","n222","n223","n224","n221"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelter"}},"w460":{"id":"w460","nodes":["n2468","n2464","n2455","n2457","n2461","n2468"],"tags":{"building":"yes"}},"w461":{"id":"w461","nodes":["n2478","n2473","n683","n682","n2463","n681","n2478"],"tags":{"building":"yes"}},"w462":{"id":"w462","nodes":["n2547","n473","n2548","n2549"],"tags":{"highway":"service","service":"parking_aisle"}},"w463":{"id":"w463","nodes":["n2573","n2574"],"tags":{"highway":"path","name":"Riverwalk Trail"}},"w464":{"id":"w464","nodes":["n2445","n2597","n2527","n2528","n2529","n2530","n2531","n2597"],"tags":{"highway":"service","service":"parking_aisle"}},"w465":{"id":"w465","nodes":["n2571","n459","n2572"],"tags":{"highway":"path","name":"Riverwalk Trail"}},"w466":{"id":"w466","nodes":["n2445","n2574","n2552","n442","n2551","n4727","n323","n2446"],"tags":{"highway":"service"}},"w467":{"id":"w467","nodes":["n2484","n2474","n2477","n2485","n2488","n2484"],"tags":{"building":"yes"}},"w468":{"id":"w468","nodes":["n2695","n2696","n2697","n2698","n2699","n2700","n2701","n2702","n2695"],"tags":{"building":"yes"}},"w469":{"id":"w469","nodes":["n2469","n2476","n2481","n2475","n920","n2466","n2469"],"tags":{"building":"yes"}},"w47":{"id":"w47","nodes":["n1988","n1997","n1989","n25","n24","n1990","n26","n1991","n21","n1992","n2006","n1993","n22","n1994","n23","n1995","n1999","n1996","n2001","n1988"],"tags":{"highway":"service"}},"w470":{"id":"w470","nodes":["n2473","n2470","n2465","n2458","n2462","n683","n2473"],"tags":{"building":"yes"}},"w471":{"id":"w471","nodes":["n2490","n2496","n994","n997","n998","n996","n995","n2485","n2477","n2490"],"tags":{"building":"yes"}},"w472":{"id":"w472","nodes":["n2424","n2426","n2427","n2428"],"tags":{"highway":"residential","name":"Moore Street"}},"w473":{"id":"w473","nodes":["n2432","n1026","n4741","n2554","n2425"],"tags":{"highway":"residential","name":"Moore Street"}},"w474":{"id":"w474","nodes":["n2577","n2576"],"tags":{"bridge":"yes","highway":"footway"}},"w475":{"id":"w475","nodes":["n2497","n2505","n2500","n2493","n2497"],"tags":{"building":"yes"}},"w476":{"id":"w476","nodes":["n2493","n2500","n2501","n2496","n2490","n2493"],"tags":{"building":"yes"}},"w477":{"id":"w477","nodes":["n2431","n360","n4726","n418","n397","n396","n2547","n646","n2447","n644","n2418","n424","n640","n2419","n2420","n2423"],"tags":{"highway":"residential","name":"Railroad Drive"}},"w478":{"id":"w478","nodes":["n2515","n2511","n2498","n2504","n2509","n2515"],"tags":{"building":"yes"}},"w479":{"id":"w479","nodes":["n2525","n651","n650","n2526","n2524","n653","n652","n656","n2523","n654","n2518","n2517","n2521","n2522","n2525"],"tags":{"building":"yes"}},"w48":{"id":"w48","nodes":["n225","n237","n226","n227","n228","n229","n230","n231","n232","n233","n234","n235","n236","n225"],"tags":{"building":"yes"}},"w480":{"id":"w480","nodes":["n2703","n2704","n2710","n2711","n2705","n2706","n2703"],"tags":{"amenity":"parking"}},"w481":{"id":"w481","nodes":["n2796","n2657","n2658","n2797","n2796"],"tags":{"building":"yes"}},"w482":{"id":"w482","nodes":["n2550","n2551","n442","n2552","n2553","n2550"],"tags":{"amenity":"parking"}},"w483":{"id":"w483","nodes":["n2790","n2542"],"tags":{"highway":"service","service":"parking_aisle"}},"w484":{"id":"w484","nodes":["n2311","n1102"],"tags":{"highway":"service"}},"w485":{"id":"w485","nodes":["n2515","n2509","n2516","n2519","n2515"],"tags":{"building":"yes"}},"w486":{"id":"w486","nodes":["n2506","n2502","n2492","n2491","n2494","n2506"],"tags":{"building":"yes"}},"w487":{"id":"w487","nodes":["n2667","n2668","n2669","n2670","n2667"],"tags":{"building":"yes"}},"w488":{"id":"w488","nodes":["n2616","n2608","n2617","n2618","n2619","n2620","n2621","n2622","n2623","n2624","n2625","n2626","n2627","n2628","n2616"],"tags":{"building":"yes"}},"w489":{"id":"w489","nodes":["n2081","n2430"],"tags":{"bridge":"yes","highway":"primary","name":"Michigan Avenue"}},"w49":{"id":"w49","nodes":["n237","n238"],"tags":{"highway":"footway"}},"w490":{"id":"w490","nodes":["n2410","n636","n730","n635","n2409","n2694","n2751","n2765","n2753","n2768","n2754","n2769","n2745","n2766","n4503","n2763","n4501","n2752","n2781"],"tags":{"highway":"residential","name":"Portage Avenue"}},"w491":{"id":"w491","nodes":["n2578","n2579","n2580","n2581","n2578"],"tags":{"amenity":"shelter","building":"yes","shelter_type":"picnic_shelter"}},"w492":{"id":"w492","nodes":["n2556","n2557","n2558","n2559","n2556"],"tags":{"amenity":"parking"}},"w493":{"id":"w493","nodes":["n2460","n2456","n687","n2453","n2454","n2460"],"tags":{"building":"yes"}},"w494":{"id":"w494","nodes":["n2471","n2479","n2476","n2469","n2471"],"tags":{"building":"yes"}},"w495":{"id":"w495","nodes":["n2724","n2725","n673","n672","n671","n2726","n2727"],"tags":{"highway":"service","oneway":"yes","service":"parking_aisle"}},"w496":{"id":"w496","nodes":["n2649","n2650","n2651","n2652","n2653","n2654","n2655","n2656","n2649"],"tags":{"building":"yes"}},"w497":{"id":"w497","nodes":["n2430","n2446","n343","n2101","n2560","n2431","n363","n2748"],"tags":{"highway":"primary","name":"Michigan Avenue"}},"w498":{"id":"w498","nodes":["n2691","n2692","n634","n633","n2693","n2694"],"tags":{"highway":"service"}},"w499":{"id":"w499","nodes":["n2423","n2415","n661","n2416","n2417","n2719","n2721","n2772","n2756","n2773","n2759","n2767"],"tags":{"highway":"residential","name":"West Street"}},"w5":{"id":"w5","nodes":["n380","n381","n382","n383","n429","n430","n380"],"tags":{"building":"yes"}},"w50":{"id":"w50","nodes":["n239","n499","n508","n245","n238","n242","n240"],"tags":{"footway":"sidewalk","highway":"footway"}},"w500":{"id":"w500","nodes":["n2428","n1152","n2421","n2324"],"tags":{"bridge":"yes","highway":"residential","name":"Moore Street"}},"w501":{"id":"w501","nodes":["n2608","n2609","n2610","n2611","n2612","n2613","n2614","n2615","n2617","n2608"],"tags":{"building":"yes"}},"w502":{"id":"w502","nodes":["n2570","n2571"],"tags":{"bridge":"yes","highway":"path","name":"Riverwalk Trail"}},"w503":{"id":"w503","nodes":["n2540","n2542","n2787"],"tags":{"highway":"service"}},"w504":{"id":"w504","nodes":["n2269","n2582","n2250"],"tags":{"highway":"path"}},"w505":{"id":"w505","nodes":["n2631","n2632","n2633","n2634","n2635","n2636","n2637","n2638","n2631"],"tags":{"building":"yes"}},"w506":{"id":"w506","nodes":["n2543","n2544","n2545","n395","n2546","n2543"],"tags":{"amenity":"parking"}},"w507":{"id":"w507","nodes":["n2449","n2450","n2451","n2452","n1162","n2449"],"tags":{"leisure":"pitch","sport":"tennis"}},"w508":{"id":"w508","nodes":["n2554","n1160","n2559","n2558","n659","n2555","n658","n657","n2419"],"tags":{"highway":"service"}},"w509":{"id":"w509","nodes":["n2499","n2508","n2510","n2505","n2497","n2499"],"tags":{"building":"yes"}},"w51":{"id":"w51","nodes":["n241","n242","n243","n244"],"tags":{"highway":"service","surface":"unpaved"}},"w510":{"id":"w510","nodes":["n2575","n2577"],"tags":{"highway":"footway"}},"w511":{"id":"w511","nodes":["n2533","n2534","n2535","n2536","n2537","n2538","n2539","n2785","n2786","n2533"],"tags":{"amenity":"parking"}},"w512":{"id":"w512","nodes":["n2801","n2740","n2741","n2742","n2743","n2744","n2801"],"tags":{"building":"yes"}},"w513":{"id":"w513","nodes":["n2720","n2721"],"tags":{"highway":"service","service":"parking_aisle"}},"w514":{"id":"w514","nodes":["n2788","n2790","n2789","n989","n2540","n2541"],"tags":{"highway":"service","service":"parking_aisle"}},"w515":{"id":"w515","nodes":["n2848","n2849","n2850","n2851","n2803","n2804","n2812"],"tags":{"highway":"residential","name":"Middle Street"}},"w516":{"id":"w516","nodes":["n2852","n2805"],"tags":{"access":"private","highway":"service","name":"Battle Street"}},"w517":{"id":"w517","nodes":["n2863","n2815","n2814","n2812","n2864","n2855","n2865","n2867","n2868"],"tags":{"highway":"secondary","name":"Michigan Avenue","name_1":"State Highway 60","ref":"M 60"}},"w518":{"id":"w518","nodes":["n2859","n2808"],"tags":{"highway":"residential","name":"2nd Avenue"}},"w519":{"id":"w519","nodes":["n2823","n2824","n2825","n2826","n2827","n2828","n2823"],"tags":{"building":"yes"}},"w52":{"id":"w52","nodes":["n247","n248","n249","n250","n247"],"tags":{"amenity":"parking"}},"w520":{"id":"w520","nodes":["n2806","n2807","n2803"],"tags":{"highway":"residential","name":"2nd Avenue"}},"w521":{"id":"w521","nodes":["n2829","n2830","n2831","n2832","n2833","n2834","n2835","n2836","n2837","n2838","n2829"],"tags":{"building":"yes"}},"w522":{"id":"w522","nodes":["n2815","n2813","n2811","n4597","n2846","n4596","n2857","n4601","n2853","n4602","n2861","n4","n2879","n4560","n3550","n5","n1685"],"tags":{"highway":"residential","name":"Washington Street"}},"w523":{"id":"w523","nodes":["n2878","n2811","n2810","n2860","n2880","n2881","n2882"],"tags":{"highway":"residential","name":"5th Avenue"}},"w524":{"id":"w524","nodes":["n2816","n2817","n2818","n2819","n2820","n2821","n2822","n2816"],"tags":{"building":"yes"}},"w525":{"id":"w525","nodes":["n2869","n2856","n2806","n2808","n2814","n2809","n2810","n2847","n2858","n2854","n2870","n2871","n6","n2872","n2839","n2862"],"tags":{"highway":"residential","name":"Wood Street"}},"w526":{"id":"w526","nodes":["n2877","n2809","n2813","n2844","n2843"],"tags":{"highway":"residential","name":"4th Avenue"}},"w527":{"id":"w527","nodes":["n4785","n4784","n2936","n4788","n4787","n4786","n4785"],"tags":{"amenity":"parking"}},"w528":{"id":"w528","nodes":["n2864","n2892","n2893","n2877","n2860","n3840"],"tags":{"highway":"residential","name":"Garden Street"}},"w529":{"id":"w529","nodes":["n2868","n2890"],"tags":{"bridge":"yes","highway":"secondary","name":"Michigan Avenue","name_1":"State Highway 60","ref":"M 60"}},"w53":{"id":"w53","nodes":["n251","n252","n253","n254","n255","n256","n257","n258","n259","n260","n261","n262","n251"],"tags":{"building":"yes"}},"w530":{"id":"w530","nodes":["n2914","n2915","n2916","n2917","n2918","n2919","n2920","n2921","n2922","n2923","n2924","n2925","n2926","n2927","n2928","n2929","n2930","n2931","n2932","n2933","n2914"],"tags":{"building":"yes"}},"w531":{"id":"w531","nodes":["n2958","n2896"],"tags":{"bridge":"yes","highway":"secondary","name":"Main Street"}},"w532":{"id":"w532","nodes":["n2896","n394","n364","n2748"],"tags":{"highway":"secondary","name":"Main Street"}},"w533":{"id":"w533","nodes":["n2800","n2943","n2940","n2941","n2942","n2943"],"tags":{"highway":"service","service":"parking_aisle"}},"w534":{"id":"w534","nodes":["n3836","n3837","n3839","n3838","n3834","n4632","n3831","n4624","n3835","n3836"],"tags":{"barrier":"fence"}},"w535":{"id":"w535","nodes":["n2894","n2944","n2774","n2765"],"tags":{"highway":"residential","name":"5th Avenue"}},"w536":{"id":"w536","nodes":["n2890","n2780","n627","n2889","n2887","n623","n2888","n366","n2748"],"tags":{"highway":"secondary","name":"Michigan Avenue","name_1":"State Highway 60","ref":"M 60"}},"w537":{"id":"w537","nodes":["n2895","n738","n2887","n737","n2913"],"tags":{"highway":"residential","name":"Water Street"}},"w538":{"id":"w538","nodes":["n2855","n3756","n2884","n2885","n2886","n2945","n2946","n2947","n2948","n2949","n2950","n2951","n2952","n2953","n2955","n2848","n2956","n2856"],"tags":{"highway":"residential","name":"River Drive"}},"w539":{"id":"w539","nodes":["n2882","n2894"],"tags":{"bridge":"yes","highway":"residential","name":"5th Avenue"}},"w54":{"id":"w54","nodes":["n263","n264","n265","n266","n267","n268","n269","n270","n271","n272","n273","n274","n275","n276","n263"],"tags":{"building":"yes"}},"w540":{"id":"w540","nodes":["n2987","n2964","n2981","n2983","n2966","n2982","n2962","n2960","n2967","n2965","n2984","n2977","n2968","n2976","n2986","n2988","n2963","n2970","n2969","n2979","n2974","n2980","n2959","n2973","n2985","n2961","n2975","n2971","n2972","n2978","n2898","n2907","n2912","n2909","n2911","n2901","n2903","n2904","n2906","n2902","n2900","n2910","n2908","n2899","n2897","n2905","n2186","n2233"],"tags":{"name":"Portage River","waterway":"river"}},"w541":{"id":"w541","nodes":["n2852","n2851","n3003"],"tags":{"highway":"residential","name":"1st Avenue"}},"w542":{"id":"w542","nodes":["n2991","n3004","n2994"],"tags":{"highway":"residential","name":"River Street"}},"w543":{"id":"w543","nodes":["n2993","n2989"],"tags":{"bridge":"yes","highway":"residential","name":"6th Street"}},"w544":{"id":"w544","nodes":["n2995","n2996","n2997","n2998","n2999","n3000","n3001","n3002","n2990","n2991","n2993"],"tags":{"highway":"residential","name":"6th Street"}},"w545":{"id":"w545","nodes":["n2989","n2992","n2848"],"tags":{"highway":"residential","name":"6th Street"}},"w546":{"id":"w546","nodes":["n2313","n3169","n3170","n3171","n3172","n3173","n3174","n3175","n3176","n3177","n3178","n3179","n3180","n3191","n3181","n3190","n3182","n3183","n3184","n3185","n3186","n3187","n3188","n3189","n3160","n3161","n3162","n2126","n2146","n2156","n2129","n2112","n2109","n2313"],"tags":{"natural":"wetland"}},"w547":{"id":"w547","nodes":["n2088","n3013","n3015","n3014","n3017","n3018"],"tags":{"name":"Conrail Railroad","railway":"rail"}},"w548":{"id":"w548","nodes":["n3083","n3084","n3085","n3086","n3083"],"tags":{"building":"yes"}},"w549":{"id":"w549","nodes":["n3020","n2288","n2283","n2284","n2131","n2286","n2287","n2285","n2132","n2140","n2289","n3020"],"tags":{"leisure":"park","name":"Conservation Park"}},"w55":{"id":"w55","nodes":["n277","n278","n279","n280","n281","n282","n283","n284","n277"],"tags":{"building":"yes"}},"w550":{"id":"w550","nodes":["n3056","n3042","n3041","n3040","n3039","n3038","n3037","n3036","n3044","n3035","n3034","n3043","n3016","n3056","n3019","n3015","n3012"],"tags":{"highway":"service"}},"w551":{"id":"w551","nodes":["n3044","n3045","n3046","n3047","n3048","n3049","n3050","n3051","n3052","n3053","n3054","n3055","n3016"],"tags":{"highway":"footway"}},"w552":{"id":"w552","nodes":["n3117","n3118","n3119","n3120","n3121","n3122","n3117"],"tags":{"building":"yes"}},"w553":{"id":"w553","nodes":["n3123","n3124","n3129","n3125","n3126","n3123"],"tags":{"building":"yes"}},"w554":{"id":"w554","nodes":["n3069","n3070","n3071","n3072","n3073","n3074","n3075","n3076","n3077","n3078","n3079","n3080","n3081","n3082","n3069"],"tags":{"building":"yes"}},"w555":{"id":"w555","nodes":["n3087","n3088","n3089","n3090","n3087"],"tags":{"building":"yes"}},"w556":{"id":"w556","nodes":["n3113","n3114","n3115","n3116","n3113"],"tags":{"building":"yes"}},"w557":{"id":"w557","nodes":["n3103","n3104","n3105","n3106","n3103"],"tags":{"building":"yes"}},"w558":{"id":"w558","nodes":["n3127","n3128","n3129","n3124","n3127"],"tags":{"building":"yes"}},"w559":{"id":"w559","nodes":["n3137","n3141","n3142","n3138","n3139","n3140","n3137"],"tags":{"building":"yes"}},"w56":{"id":"w56","nodes":["n285","n286","n287","n288","n285"],"tags":{"amenity":"parking"}},"w560":{"id":"w560","nodes":["n3091","n3092","n3093","n3094","n3091"],"tags":{"building":"yes"}},"w561":{"id":"w561","nodes":["n3155","n3157","n3158","n3159","n3156","n3155"],"tags":{"building":"yes"}},"w562":{"id":"w562","nodes":["n3057","n3058","n3059","n3060","n3057"],"tags":{"building":"yes"}},"w563":{"id":"w563","nodes":["n3107","n3108","n3109","n3110","n3111","n3112","n3107"],"tags":{"building":"yes"}},"w564":{"id":"w564","nodes":["n3134","n3135","n3136","n3131","n3134"],"tags":{"building":"yes"}},"w565":{"id":"w565","nodes":["n3143","n3144","n3145","n3146","n3143"],"tags":{"building":"yes"}},"w566":{"id":"w566","nodes":["n3095","n3096","n3097","n3098","n3095"],"tags":{"building":"yes"}},"w567":{"id":"w567","nodes":["n3130","n3131","n3136","n3132","n3133","n3130"],"tags":{"building":"yes"}},"w568":{"id":"w568","nodes":["n3025","n3026","n3027","n3028","n3029","n3030","n3031","n3033","n3032","n3025"],"tags":{"amenity":"parking"}},"w569":{"id":"w569","nodes":["n3061","n3062","n3063","n3064","n3061"],"tags":{"building":"yes"}},"w57":{"id":"w57","nodes":["n289","n290","n291","n292","n289"],"tags":{"amenity":"parking"}},"w570":{"id":"w570","nodes":["n3155","n3156","n3152","n3153","n3155"],"tags":{"building":"yes"}},"w571":{"id":"w571","nodes":["n3099","n3100","n3101","n3102","n3099"],"tags":{"building":"yes"}},"w572":{"id":"w572","nodes":["n3147","n3148","n3149","n3150","n3147"],"tags":{"building":"yes"}},"w573":{"id":"w573","nodes":["n3039","n2284"],"tags":{"highway":"service"}},"w574":{"id":"w574","nodes":["n3151","n3152","n3153","n3154","n3151"],"tags":{"building":"yes"}},"w575":{"id":"w575","nodes":["n3021","n3022","n3023","n3024","n3021"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelter"}},"w576":{"id":"w576","nodes":["n3065","n3066","n3067","n3068","n3065"],"tags":{"building":"yes"}},"w577":{"id":"w577","nodes":["n2944","n3192","n3757","n3813","n3814","n3815","n3816","n3817","n3818","n3819"],"tags":{"highway":"service","name":"Willow Drive","service":"driveway","surface":"unpaved"}},"w578":{"id":"w578","nodes":["n2163","n2165","n2166","n2167","n2168","n2172","n2173","n2174","n2175","n2176","n2178","n2181","n2163"],"tags":{"building":"yes"}},"w579":{"id":"w579","nodes":["n2754","n3195","n3204","n3205","n4537","n4540","n3206","n4530","n4536","n3207","n4524","n3199","n4521","n3197","n1032"],"tags":{"highway":"residential","name":"Elm Street"}},"w58":{"id":"w58","nodes":["n240","n293","n294"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w580":{"id":"w580","nodes":["n2184","n2185","n2187","n2190","n2191","n2192","n2184"],"tags":{"building":"yes"}},"w581":{"id":"w581","nodes":["n2765","n3208","n3211","n2755","n3280","n2756","n3346"],"tags":{"highway":"residential","name":"Kelsey Street"}},"w582":{"id":"w582","nodes":["n2753","n3194","n3193","n3201","n3196","n4551","n3202","n4550","n3203","n3200","n3198","n1033"],"tags":{"highway":"residential","name":"Walnut Street"}},"w583":{"id":"w583","nodes":["n3272","n4469","n4588","n2879","n4564","n2872"],"tags":{"highway":"residential","name":"10th Avenue"}},"w584":{"id":"w584","nodes":["n3243","n3242","n3241","n3240","n3243"],"tags":{"building":"industrial"}},"w585":{"id":"w585","nodes":["n3273","n3274","n4631","n4593","n3275","n4592","n2846","n4611","n2847"],"tags":{"highway":"residential","name":"6th Avenue"}},"w586":{"id":"w586","nodes":["n3276","n4591","n2853","n4605","n2854"],"tags":{"highway":"residential","name":"8th Avenue"}},"w587":{"id":"w587","nodes":["n3269","n3268","n3267","n3266","n3265","n3264","n3263","n3262","n3269"],"tags":{"building":"industrial"}},"w588":{"id":"w588","nodes":["n3277","n4599","n2857","n4598","n4608","n2858"],"tags":{"highway":"residential","name":"7th Avenue"}},"w589":{"id":"w589","nodes":["n3239","n3238","n3271","n3270","n3237","n3236","n3235","n3234","n3239"],"tags":{"building":"yes"}},"w59":{"id":"w59","nodes":["n294","n295","n296","n297","n298","n299","n300","n301","n302","n303","n491","n304","n305","n306","n307"],"tags":{"footway":"sidewalk","highway":"footway"}},"w590":{"id":"w590","nodes":["n3278","n4458","n4589","n4604","n2861"],"tags":{"highway":"residential","name":"9th Avenue"}},"w591":{"id":"w591","nodes":["n3253","n3252","n3251","n3250","n3249","n3248","n3253"],"tags":{"building":"industrial"}},"w592":{"id":"w592","nodes":["n3229","n3228","n3227","n3226","n3225","n3224","n3223","n3222","n3221","n3220","n3219","n3218","n3217","n3216","n3215","n3214","n3213","n3212","n3229"],"tags":{"natural":"water","water":"pond"}},"w593":{"id":"w593","nodes":["n3261","n3260","n3259","n3258","n3257","n3256","n3255","n3254","n3261"],"tags":{"building":"industrial"}},"w594":{"id":"w594","nodes":["n3233","n3232","n3231","n3230","n3233"],"tags":{"building":"yes"}},"w595":{"id":"w595","nodes":["n3247","n3246","n3245","n3244","n3247"],"tags":{"building":"industrial"}},"w596":{"id":"w596","nodes":["n2769","n3195","n3193","n3209","n2758","n2759","n3279"],"tags":{"highway":"residential","name":"Armitage Street"}},"w597":{"id":"w597","nodes":["n2193","n2194","n2195","n2197","n2193"],"tags":{"building":"yes"}},"w598":{"id":"w598","nodes":["n3404","n3403","n3402","n3401","n3400","n3399","n3398","n3397","n3373","n3372","n3396","n3395","n3404"],"tags":{"building":"school"}},"w6":{"id":"w6","nodes":["n879","n880","n881","n882","n879"],"tags":{"building":"shed"}},"w60":{"id":"w60","nodes":["n239","n308","n307"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w600":{"id":"w600","nodes":["n3387","n3386","n3316","n3315","n3314","n3313","n3387"],"tags":{"building":"yes"}},"w601":{"id":"w601","nodes":["n3304","n3303","n3302","n3301","n3385","n3384","n3300","n3299","n3304"],"tags":{"building":"yes"}},"w602":{"id":"w602","nodes":["n3334","n3333","n3332","n3331","n3330","n3329","n3328","n3327","n3326","n3325","n3324","n3323","n3322","n3321","n3320","n3319","n3318","n3317","n3334"],"tags":{"building":"yes"}},"w603":{"id":"w603","nodes":["n3353","n3352","n3347","n3280","n2798"],"tags":{"highway":"service","service":"alley","surface":"unpaved"}},"w604":{"id":"w604","nodes":["n3753","n3211","n3383"],"tags":{"highway":"service","service":"alley"}},"w605":{"id":"w605","nodes":["n3290","n3289","n3288","n3287","n3286","n3285","n3284","n3283","n3282","n3281","n3290"],"tags":{"building":"yes"}},"w606":{"id":"w606","nodes":["n2198","n2199","n2201","n2202","n2203","n2206","n2198"],"tags":{"building":"yes"}},"w607":{"id":"w607","nodes":["n2198","n2207"],"tags":{"barrier":"wall"}},"w608":{"id":"w608","nodes":["n2751","n3208","n3210","n3209","n3415","n3410","n3414","n3413","n3412","n3416"],"tags":{"highway":"residential","name":"East Street"}},"w609":{"id":"w609","nodes":["n2772","n3346","n3746","n3748","n3747","n3345","n3378","n3279","n3411"],"tags":{"highway":"residential","name":"Maple Street"}},"w61":{"id":"w61","nodes":["n309","n310","n311","n312","n313","n240"],"tags":{"footway":"sidewalk","highway":"footway"}},"w610":{"id":"w610","nodes":["n3379","n3380","n3382","n3381","n3379"],"tags":{"leisure":"park","name":"LaFayette Park"}},"w611":{"id":"w611","nodes":["n2768","n3194","n3210","n3753","n2760","n3353","n2773","n3378"],"tags":{"highway":"residential","name":"Bennett Street"}},"w612":{"id":"w612","nodes":["n2751","n3383","n2749","n2798","n2772"],"tags":{"highway":"residential","name":"Market Street"}},"w613":{"id":"w613","nodes":["n3298","n3297","n3296","n3295","n3294","n3293","n3292","n3291","n3298"],"tags":{"building":"yes"}},"w614":{"id":"w614","nodes":["n3375","n3406","n3405","n3374","n3375"],"tags":{"leisure":"playground"}},"w615":{"id":"w615","nodes":["n3393","n3344","n3343","n3342","n3341","n3340","n3339","n3338","n3337","n3392","n3391","n3390","n3389","n3336","n3335","n3388","n3393"],"tags":{"building":"yes"}},"w616":{"id":"w616","nodes":["n3376","n3407","n3408","n3377","n3376"],"tags":{"amenity":"school","name":"Three Rivers Elementary School"}},"w617":{"id":"w617","nodes":["n3312","n3311","n3310","n3309","n3308","n3307","n3306","n3305","n3312"],"tags":{"building":"yes"}},"w619":{"id":"w619","nodes":["n2863","n3424","n3425","n3426","n3427","n3428","n3429","n3430","n3431","n3432","n3433","n2844"],"tags":{"highway":"secondary","name":"Michigan Avenue","ref":"M 60"}},"w62":{"id":"w62","nodes":["n876","n906","n904","n875","n874","n873","n872","n871","n870","n869","n41","n868","n146","n314","n315","n1956"],"tags":{"footway":"sidewalk","highway":"footway"}},"w620":{"id":"w620","nodes":["n2844","n3420","n3421","n3422","n3439","n2859","n3437","n3493","n3496","n3500","n3497"],"tags":{"highway":"residential"}},"w621":{"id":"w621","nodes":["n3468","n3469","n3470","n3471","n3468"],"tags":{"building":"yes"}},"w622":{"id":"w622","nodes":["n3417","n3436","n3438","n3491","n3488","n3492","n3495","n3494","n3498","n3487","n3499","n3490","n3489","n4800","n3417"],"tags":{"landuse":"cemetery","name":"Riverside Cemetery"}},"w623":{"id":"w623","nodes":["n3440","n3441","n3442","n3443","n3444","n3445","n3440"],"tags":{"building":"yes"}},"w624":{"id":"w624","nodes":["n3446","n3447","n3448","n3449","n3450","n3451","n3452","n3453","n3454","n3455","n3456","n3457","n3458","n3459","n3460","n3461","n3462","n3463","n3464","n3465","n3466","n3467","n3446"],"tags":{"building":"yes"}},"w625":{"id":"w625","nodes":["n2844","n3434","n3435","n2878","n3275","n4621","n3276","n3278","n4463","n3272","n3472","n3474","n3475","n3476","n3477","n3478","n1202","n3479","n3480","n3481","n1203","n3482","n3483","n3484","n3485","n4574","n3486","n3473"],"tags":{"highway":"secondary","name":"Jefferson Street","name_1":"State Highway 60","ref":"M 60"}},"w626":{"id":"w626","nodes":["n3439","n3423","n2863"],"tags":{"highway":"unclassified","name":"Michigan Avenue","name_1":"State Highway 60"}},"w627":{"id":"w627","nodes":["n3500","n3005"],"tags":{"highway":"service"}},"w628":{"id":"w628","nodes":["n3491","n3488","n3492","n3010","n3009","n3005","n3008","n3007","n3006","n3502","n3491"],"tags":{"leisure":"park","name":"Marina Park"}},"w629":{"id":"w629","nodes":["n2208","n2209","n2212","n2214","n2208"],"tags":{"building":"yes"}},"w63":{"id":"w63","nodes":["n1955","n316"],"tags":{"footway":"sidewalk","highway":"footway"}},"w630":{"id":"w630","nodes":["n2757","n3414","n3202","n4542","n3206","n4538","n3750","n3503","n1629","n4500","n2763","n4502","n2764","n3508"],"tags":{"highway":"residential","name":"Hoffman Street"}},"w631":{"id":"w631","nodes":["n2215","n2750","n2770","n2771","n2215"],"tags":{"building":"yes"}},"w632":{"id":"w632","nodes":["n2766","n3504","n3507","n3751","n3205","n3196","n3410","n2746"],"tags":{"highway":"residential","name":"Cushman Street"}},"w633":{"id":"w633","nodes":["n2745","n3749","n3507","n4535","n3503"],"tags":{"highway":"residential","name":"Pine Street"}},"w634":{"id":"w634","nodes":["n3510","n3511","n3512","n3509","n3510"],"tags":{"leisure":"park","name":"Bowman Park"}},"w636":{"id":"w636","nodes":["n2745","n3752","n3204","n3201","n3415","n2761","n2767","n3411"],"tags":{"highway":"residential","name":"Wheeler Street"}},"w637":{"id":"w637","nodes":["n3550","n4586","n4476","n3472"],"tags":{"highway":"residential","name":"11th Avenue"}},"w638":{"id":"w638","nodes":["n3508","n3518"],"tags":{"bridge":"yes","highway":"residential","name":"Hoffman Street"}},"w639":{"id":"w639","nodes":["n3518","n1204","n2862","n3519","n3520","n3521","n3522","n3523","n2161","n3524","n3549","n3552","n4239","n3551","n4577","n4582","n4578","n4583","n4579","n4574"],"tags":{"highway":"residential","name":"Hoffman Street"}},"w64":{"id":"w64","nodes":["n316","n317"],"tags":{"bridge":"yes","footway":"sidewalk","highway":"footway","layer":"1"}},"w640":{"id":"w640","nodes":["n3634","n3640","n3676","n3633","n3678","n3648","n3638","n3683","n3600","n3579","n3679","n3677","n2987","n3592","n3588","n3608","n3559","n3617","n3620","n3660","n3553","n3533","n3530","n3531","n3525","n3527","n3526","n3532","n3529","n3528","n3667","n3627","n3623","n3625","n3601","n3687","n3671","n3644","n3626","n3673","n3582","n3693","n3605","n3619","n3651","n3650","n3615","n3663","n3631","n3596","n3604","n3655","n3586","n3595","n3701","n3603","n3686","n3611","n3568","n3674","n3613","n3580","n3562","n3564","n3689","n3585","n3670","n3659","n3684","n3680","n3646","n3558","n3556","n3692","n3563","n3575","n3571","n3675","n3557","n3700","n3656","n3622","n3657","n3565","n3669","n3658","n3618","n3624","n3688","n3610","n3570","n3645","n3649","n3583","n3694","n3561","n3554","n3614","n3698","n3581","n3635","n3641","n3569","n3647","n3628","n3598","n3696","n3665","n3639","n3607","n3695","n3642","n3672","n3577","n3643","n3691","n3602","n3576","n3591","n3560","n3606","n3685","n3597","n3629","n3661","n3654","n3616","n3697","n3578","n3609","n3653","n3699","n3566","n3637","n3567","n3666","n3555","n3599","n3590","n3572","n3593","n3690","n3681","n3612","n3682","n3668","n3587","n3621","n3636","n3662","n3589","n3573","n3652","n3664","n3632","n3574","n3594","n3584","n3630","n3634"],"tags":{"landuse":"reservoir","name":"Hoffman Pond","natural":"water"}},"w641":{"id":"w641","nodes":["n2988","n3534","n3535","n3536","n3537","n3538","n3539","n3540","n3541","n3542","n3543","n3544","n3545","n3546","n3547","n3548","n2970"],"tags":{"waterway":"river"}},"w642":{"id":"w642","nodes":["n3702","n3703","n3704","n3705","n3706","n3707","n3708","n3709","n3710","n3711","n3712","n3713","n3714","n3715","n3716","n3717","n3718","n3719","n3720","n3721","n3722","n3723","n3724","n3725","n3726","n3727","n3728","n3729","n3730","n3731","n3732","n3733","n3734","n3735","n3736","n3737","n3738","n3739","n3740","n3741","n3742","n3743","n3702"],"tags":{"admin_level":"8","boundary":"administrative"}},"w643":{"id":"w643","nodes":["n2839","n2873"],"tags":{"highway":"service","service":"driveway"}},"w644":{"id":"w644","nodes":["n2873","n2840"],"tags":{"bridge":"yes","highway":"service","layer":"1","service":"driveway"}},"w645":{"id":"w645","nodes":["n2840","n2841","n2842","n2845","n2866"],"tags":{"highway":"service","service":"driveway","surface":"unpaved"}},"w646":{"id":"w646","nodes":["n2752","n3759","n1420","n1421","n1422","n3758","n4507","n4506","n4505","n4520","n3199","n4522","n4504","n4546","n3200","n4547","n3412"],"tags":{"highway":"residential","name":"Flower Street"}},"w647":{"id":"w647","nodes":["n2874","n2875","n2876","n2954","n2874"],"tags":{"building":"industrial"}},"w648":{"id":"w648","nodes":["n3778","n3779","n3780","n3781","n3782","n3783","n3778"],"tags":{"building":"yes"}},"w649":{"id":"w649","nodes":["n3197","n4543","n4544","n3198"],"tags":{"highway":"residential","name":"Morris Avenue","surface":"unpaved"}},"w65":{"id":"w65","nodes":["n317","n318","n319","n320","n321"],"tags":{"footway":"sidewalk","highway":"footway"}},"w650":{"id":"w650","nodes":["n3207","n4526","n4528","n4548","n3203","n4549","n3413","n2762"],"tags":{"highway":"residential","name":"Adams Street"}},"w651":{"id":"w651","nodes":["n3788","n3785","n3786","n3787","n3788"],"tags":{"power":"station"}},"w652":{"id":"w652","nodes":["n2957","n3163","n3241"],"tags":{"barrier":"wall"}},"w653":{"id":"w653","nodes":["n3549","n3802","n3803","n3800","n3801"],"tags":{"highway":"service","surface":"unpaved"}},"w654":{"id":"w654","nodes":["n3164","n3165","n3166","n3167","n3168","n3505","n3164"],"tags":{"building":"yes"}},"w655":{"id":"w655","nodes":["n3506","n3517","n3760","n3761","n3762","n3763","n3506"],"tags":{"building":"yes"}},"w656":{"id":"w656","nodes":["n3764","n3765","n3766","n3767","n3768","n3769","n3770","n3771","n3764"],"tags":{"building":"yes"}},"w657":{"id":"w657","nodes":["n3772","n3773","n3774","n3775","n3772"],"tags":{"building":"yes"}},"w658":{"id":"w658","nodes":["n3776","n3777","n3784","n3789","n3776"],"tags":{"building":"yes"}},"w659":{"id":"w659","nodes":["n3930","n3931","n3932","n3933","n3934","n3935","n3936","n3937","n3938","n3930"],"tags":{"leisure":"pitch","sport":"baseball"}},"w66":{"id":"w66","nodes":["n321","n322"],"tags":{"bridge":"yes","footway":"sidewalk","highway":"footway","layer":"1"}},"w660":{"id":"w660","nodes":["n3982","n3842","n3864","n3865","n2938","n3866","n2939","n3867","n3868","n3858","n2937","n3869","n2935","n2934","n3870","n3348","n3862"],"tags":{"highway":"service"}},"w661":{"id":"w661","nodes":["n3968","n3969"],"tags":{"highway":"footway"}},"w662":{"id":"w662","nodes":["n3875","n3876","n3877","n3878","n3879","n3880","n3881","n3882","n3875"],"tags":{"amenity":"parking"}},"w663":{"id":"w663","nodes":["n3964","n3965"],"tags":{"highway":"footway"}},"w664":{"id":"w664","nodes":["n3966","n3967"],"tags":{"highway":"footway"}},"w665":{"id":"w665","nodes":["n3857","n3890","n3884","n3894","n3889","n3899","n3885","n3886","n3896","n3887"],"tags":{"highway":"service","service":"parking_aisle"}},"w666":{"id":"w666","nodes":["n3895","n3896"],"tags":{"highway":"service","service":"parking_aisle"}},"w667":{"id":"w667","nodes":["n3274","n3977","n3984","n3983","n3981","n3844","n3978","n3982","n3861","n3862","n3873","n3874","n4468","n3863"],"tags":{"access":"private","highway":"service","name":"Collins Drive"}},"w668":{"id":"w668","nodes":["n3900","n3901","n3902","n3903","n3904","n3905","n3808","n3809","n3906","n3907","n3908","n3967","n3909","n3910","n3911","n3955","n3964","n3912","n3913","n3914","n3915","n3916","n3917","n3918","n3919","n3920","n3921","n3922","n3923","n3924","n3925","n3926","n3927","n3969","n3970","n3928","n3807","n3929","n3900"],"tags":{"building":"school"}},"w669":{"id":"w669","nodes":["n3272","n39","n40","n3974","n3863","n3857","n3892","n3883","n3891","n3889"],"tags":{"highway":"service"}},"w67":{"id":"w67","nodes":["n322","n886","n323","n475"],"tags":{"footway":"crossing","highway":"footway"}},"w670":{"id":"w670","nodes":["n3473","n3859","n3860","n3980","n4908","n4865"],"tags":{"highway":"secondary","name":"Hoffman Street","ref":"M 60"}},"w671":{"id":"w671","nodes":["n3970","n3806","n3971"],"tags":{"highway":"footway"}},"w672":{"id":"w672","nodes":["n3892","n3893","n3894"],"tags":{"highway":"service","service":"parking_aisle"}},"w673":{"id":"w673","nodes":["n3945","n3946","n3992","n3990","n3945"],"tags":{"leisure":"pitch","sport":"tennis"}},"w674":{"id":"w674","nodes":["n3890","n3893","n3891"],"tags":{"highway":"service","service":"parking_aisle"}},"w675":{"id":"w675","nodes":["n3947","n3948","n3994","n3993","n3947"],"tags":{"leisure":"pitch","sport":"tennis"}},"w676":{"id":"w676","nodes":["n3858","n3954","n3972","n3810","n3811","n3812","n3841","n3973","n3898","n3963","n3897","n3896"],"tags":{"highway":"service"}},"w677":{"id":"w677","nodes":["n3977","n3996","n3997","n4004","n3998","n3999","n4005","n4007","n4006","n3995","n4000","n3843","n4001","n4002","n4003","n3949","n3351","n3950","n3354","n3350","n3951","n3349","n3952","n3953","n3954","n3956","n3966","n3955"],"tags":{"highway":"footway"}},"w678":{"id":"w678","nodes":["n3887","n3888","n3895","n3899"],"tags":{"highway":"service","service":"parking_aisle"}},"w679":{"id":"w679","nodes":["n3946","n3947","n3993","n3992","n3946"],"tags":{"leisure":"pitch","sport":"tennis"}},"w68":{"id":"w68","nodes":["n294","n1952","n326"],"tags":{"footway":"sidewalk","highway":"footway"}},"w680":{"id":"w680","nodes":["n3939","n3940","n3941","n3985","n3986","n3987","n3988","n3989","n3942","n3943","n3939"],"tags":{"leisure":"pitch","sport":"baseball"}},"w681":{"id":"w681","nodes":["n3990","n3991","n3944","n3945","n3990"],"tags":{"leisure":"pitch","sport":"tennis"}},"w682":{"id":"w682","nodes":["n3871","n3872","n3873","n3874","n3871"],"tags":{"amenity":"parking"}},"w683":{"id":"w683","nodes":["n3956","n3965","n3957","n3958","n3959"],"tags":{"footway":"sidewalk","highway":"footway"}},"w684":{"id":"w684","nodes":["n3790","n3791","n3792","n3793","n3790"],"tags":{"building":"shed"}},"w685":{"id":"w685","nodes":["n3794","n3795","n3796","n3797","n3794"],"tags":{"building":"yes"}},"w686":{"id":"w686","nodes":["n3798","n3799","n3804","n3805","n3798"],"tags":{"building":"yes"}},"w687":{"id":"w687","nodes":["n3806","n3807"],"tags":{"highway":"footway"}},"w688":{"id":"w688","nodes":["n3845","n3846","n3847","n3848","n3845"],"tags":{"leisure":"pitch","sport":"american_football"}},"w689":{"id":"w689","nodes":["n3849","n4021","n3850","n3851","n3852","n3853","n3854","n3855","n3856","n3975","n3976","n3979","n4008","n4009","n4010","n4011","n4012","n4013","n4014","n4015","n4016","n4017","n4018","n4019","n4020","n4021"],"tags":{"leisure":"track","sport":"running"}},"w69":{"id":"w69","nodes":["n326","n327"],"tags":{"bridge":"yes","footway":"sidewalk","highway":"footway","layer":"1"}},"w690":{"id":"w690","nodes":["n4022","n4023","n4024","n4025","n4026","n4027","n4022"],"tags":{"building":"yes"}},"w691":{"id":"w691","nodes":["n4028","n4029","n4030","n4031","n4028"],"tags":{"building":"yes"}},"w692":{"id":"w692","nodes":["n4032","n4033","n4034","n4035","n4032"],"tags":{"building":"yes"}},"w693":{"id":"w693","nodes":["n4036","n4037","n4038","n4039","n4036"],"tags":{"building":"yes"}},"w694":{"id":"w694","nodes":["n4040","n4041","n4042","n4043","n4040"],"tags":{"building":"yes"}},"w695":{"id":"w695","nodes":["n4044","n4045","n4050","n4053","n4046","n4047","n4048","n4049","n4044"],"tags":{"building":"yes"}},"w696":{"id":"w696","nodes":["n4050","n4051","n4052","n4053","n4050"],"tags":{"building":"roof"}},"w697":{"id":"w697","nodes":["n4054","n4068","n4055","n4056","n4057","n4054"],"tags":{"building":"yes"}},"w698":{"id":"w698","nodes":["n4058","n4059","n4060","n4061","n4062","n4063","n4058"],"tags":{"building":"yes"}},"w699":{"id":"w699","nodes":["n4064","n4066","n4065"],"tags":{"barrier":"fence"}},"w7":{"id":"w7","nodes":["n43","n44","n45"],"tags":{"highway":"service"}},"w70":{"id":"w70","nodes":["n327","n328","n27","n329"],"tags":{"footway":"sidewalk","highway":"footway"}},"w700":{"id":"w700","nodes":["n4066","n4067","n4068"],"tags":{"barrier":"fence"}},"w701":{"id":"w701","nodes":["n4069","n4070","n4071","n4072","n4069"],"tags":{"building":"shed"}},"w702":{"id":"w702","nodes":["n4073","n4074","n4075","n4076","n4077","n4078","n4079","n4080","n4081","n4082","n4083","n4084","n4073"],"tags":{"building":"yes"}},"w703":{"id":"w703","nodes":["n4085","n4093","n4086","n4087","n4088","n4089","n4090","n4091","n4092","n4085"],"tags":{"building":"yes"}},"w704":{"id":"w704","nodes":["n4093","n4094","n4095","n4096"],"tags":{"barrier":"fence"}},"w705":{"id":"w705","nodes":["n4097","n4098","n4099","n4100","n4097"],"tags":{"building":"yes"}},"w706":{"id":"w706","nodes":["n4098","n4102","n4087"],"tags":{"barrier":"fence"}},"w707":{"id":"w707","nodes":["n4101","n4102","n4096","n4170","n4103"],"tags":{"barrier":"fence"}},"w708":{"id":"w708","nodes":["n4104","n4105","n4106","n4107","n4104"],"tags":{"access":"private","leisure":"swimming_pool"}},"w709":{"id":"w709","nodes":["n4108","n4109","n4110","n4111","n4108"],"tags":{"building":"yes"}},"w71":{"id":"w71","nodes":["n329","n331"],"tags":{"bridge":"yes","footway":"sidewalk","highway":"footway","layer":"1"}},"w710":{"id":"w710","nodes":["n4112","n4113","n4114","n4115","n4116","n4117","n4118","n4119","n4112"],"tags":{"building":"yes"}},"w711":{"id":"w711","nodes":["n4120","n4121","n4122","n4123","n4120"],"tags":{"building":"yes"}},"w712":{"id":"w712","nodes":["n4124","n4125","n4126","n4127","n4128","n4129","n4124"],"tags":{"building":"yes"}},"w713":{"id":"w713","nodes":["n4130","n4131","n4132","n4133","n4130"],"tags":{"building":"shed"}},"w714":{"id":"w714","nodes":["n4134","n4135","n4136","n4137","n4138","n4139","n4140","n4141","n4142","n4143","n4134"],"tags":{"building":"yes"}},"w715":{"id":"w715","nodes":["n4144","n4145","n4146","n4147","n4148","n4149","n4144"],"tags":{"building":"yes"}},"w716":{"id":"w716","nodes":["n4150","n4151","n4152","n4153","n4150"],"tags":{"building":"yes"}},"w717":{"id":"w717","nodes":["n4154","n4155","n4156","n4157","n4154"],"tags":{"building":"yes"}},"w718":{"id":"w718","nodes":["n4158","n4159","n4160","n4161","n4162","n4163","n4164","n4165","n4158"],"tags":{"building":"yes"}},"w719":{"id":"w719","nodes":["n4166","n4167","n4168","n4169","n4166"],"tags":{"building":"yes"}},"w72":{"id":"w72","nodes":["n331","n344","n332","n333","n334"],"tags":{"footway":"sidewalk","highway":"footway"}},"w720":{"id":"w720","nodes":["n4170","n4171"],"tags":{"barrier":"fence"}},"w721":{"id":"w721","nodes":["n4138","n4103"],"tags":{"barrier":"fence"}},"w722":{"id":"w722","nodes":["n4103","n4172"],"tags":{"barrier":"fence"}},"w723":{"id":"w723","nodes":["n4173","n4174"],"tags":{"barrier":"fence"}},"w724":{"id":"w724","nodes":["n4175","n4176","n4177","n4178","n4175"],"tags":{"building":"yes"}},"w725":{"id":"w725","nodes":["n4179","n4180","n4181","n4182","n4183","n4184","n4179"],"tags":{"building":"yes"}},"w726":{"id":"w726","nodes":["n4185","n4186","n4187","n4188","n4185"],"tags":{"building":"yes"}},"w727":{"id":"w727","nodes":["n4189","n4190","n4191","n4192","n4193","n4194","n4195","n4196","n4197","n4198","n4199","n4200","n4201","n4202","n4189"],"tags":{"building":"yes"}},"w728":{"id":"w728","nodes":["n4203","n4204","n4205","n4206","n4207","n4208","n4209","n4210","n4203"],"tags":{"building":"yes"}},"w729":{"id":"w729","nodes":["n4211","n4212","n4213","n4214","n4211"],"tags":{"building":"shed"}},"w73":{"id":"w73","nodes":["n335","n336","n337","n338","n339","n340","n341","n342","n335"],"tags":{"building":"yes"}},"w730":{"id":"w730","nodes":["n4215","n4216","n4217","n4218","n4215"],"tags":{"building":"yes"}},"w731":{"id":"w731","nodes":["n4219","n4220","n4221","n4222","n4223","n4224","n4225","n4226","n4227","n4228","n4229","n4230","n4219"],"tags":{"building":"yes"}},"w732":{"id":"w732","nodes":["n4231","n4232","n4233","n4234","n4235","n4236","n4237","n4238","n4231"],"tags":{"building":"yes"}},"w733":{"id":"w733","nodes":["n4239","n4240","n4241","n4242","n4243","n4244","n4245","n4246","n4247","n4248","n4241"],"tags":{"highway":"service"}},"w734":{"id":"w734","nodes":["n4240","n4249","n4248"],"tags":{"highway":"service","service":"parking_aisle"}},"w735":{"id":"w735","nodes":["n4250","n4251","n4252","n4253","n4254","n4255","n4256","n4257","n4258","n4250"],"tags":{"amenity":"parking"}},"w736":{"id":"w736","nodes":["n4259","n4260","n4261","n4262","n4259"],"tags":{"building":"yes"}},"w737":{"id":"w737","nodes":["n4263","n4264","n4265","n4266","n4267","n4268","n4269","n4270","n4271","n4272","n4273","n4274","n4275","n4276","n4263"],"tags":{"building":"yes"}},"w738":{"id":"w738","nodes":["n4277","n4278","n4279","n4280","n4281","n4282","n4277"],"tags":{"building":"yes"}},"w739":{"id":"w739","nodes":["n4283","n4284","n4285","n4286","n4287","n4288","n4289","n4290","n4291","n4292","n4293","n4294","n4283"],"tags":{"building":"yes"}},"w74":{"id":"w74","nodes":["n343","n344","n345"],"tags":{"highway":"service"}},"w740":{"id":"w740","nodes":["n4295","n4296","n4297","n4298","n4295"],"tags":{"building":"yes"}},"w741":{"id":"w741","nodes":["n4299","n4300","n4301","n4302","n4303","n4304","n4305","n4306","n4307","n4308","n4309","n4310","n4299"],"tags":{"building":"yes"}},"w742":{"id":"w742","nodes":["n4311","n4312","n4313","n4314","n4311"],"tags":{"building":"shed"}},"w743":{"id":"w743","nodes":["n4315","n4316","n4317","n4318","n4319","n4320","n4315"],"tags":{"building":"yes"}},"w744":{"id":"w744","nodes":["n4321","n4322","n4323","n4324","n4325","n4326","n4327","n4328","n4329","n4330","n4331","n4332","n4333","n4334","n4321"],"tags":{"building":"yes"}},"w745":{"id":"w745","nodes":["n4335","n4336","n4337","n4338","n4335"],"tags":{"building":"shed"}},"w746":{"id":"w746","nodes":["n4339","n4340","n4341","n4342","n4343","n4344","n4339"],"tags":{"building":"yes"}},"w747":{"id":"w747","nodes":["n4345","n4346","n4347","n4348","n4345"],"tags":{"building":"yes"}},"w748":{"id":"w748","nodes":["n4349","n4350","n4351","n4352","n4349"],"tags":{"building":"yes"}},"w749":{"id":"w749","nodes":["n4353","n4354","n4355","n4356","n4357","n4358","n4353"],"tags":{"building":"yes"}},"w75":{"id":"w75","nodes":["n346","n347","n348","n349","n350","n351","n346"],"tags":{"amenity":"parking"}},"w750":{"id":"w750","nodes":["n4612","n4359","n4360"],"tags":{"barrier":"fence"}},"w751":{"id":"w751","nodes":["n4361","n4362","n4363","n4364","n4361"],"tags":{"building":"yes"}},"w752":{"id":"w752","nodes":["n4365","n4366","n4367","n4368","n4365"],"tags":{"building":"yes"}},"w753":{"id":"w753","nodes":["n4369","n4370","n4371","n4372","n4375","n4369"],"tags":{"building":"yes"}},"w754":{"id":"w754","nodes":["n4373","n4374","n4375"],"tags":{"barrier":"fence"}},"w755":{"id":"w755","nodes":["n4376","n4377","n4378","n4379","n4376"],"tags":{"building":"shed"}},"w756":{"id":"w756","nodes":["n4380","n4381","n4382","n4383","n4384","n4385","n4386","n4387","n4388","n4389","n4390","n4391","n4380"],"tags":{"building":"yes"}},"w757":{"id":"w757","nodes":["n4392","n4393","n4394","n4395","n4392"],"tags":{"building":"yes"}},"w758":{"id":"w758","nodes":["n4396","n4397","n4398","n4399","n4396"],"tags":{"building":"shed"}},"w759":{"id":"w759","nodes":["n4400","n4401","n4402","n4403","n4404","n4405","n4406","n4407","n4408","n4409","n4410","n4411","n4412","n4413","n4414","n4415","n4400"],"tags":{"building":"yes"}},"w76":{"id":"w76","nodes":["n2561","n359","n2563","n2793","n357","n356","n2792","n355","n354","n2791","n2562","n353","n352","n358","n2561"],"tags":{"highway":"service","oneway":"yes","service":"parking_aisle"}},"w760":{"id":"w760","nodes":["n4416","n4417"],"tags":{"barrier":"fence"}},"w761":{"id":"w761","nodes":["n4418","n4416","n4419"],"tags":{"barrier":"fence"}},"w762":{"id":"w762","nodes":["n4420","n4421"],"tags":{"barrier":"fence"}},"w763":{"id":"w763","nodes":["n4422","n4423","n4424","n4425","n4426","n4427","n4428","n4429","n4430","n4431","n4432","n4433","n4422"],"tags":{"building":"yes"}},"w764":{"id":"w764","nodes":["n4434","n4435","n4436","n4437","n4438","n4439","n4440","n4441","n4442","n4445","n4444","n4443","n4434"],"tags":{"building":"yes"}},"w765":{"id":"w765","nodes":["n4446","n4447","n4448","n4449","n4446"],"tags":{"building":"yes"}},"w766":{"id":"w766","nodes":["n4450","n4451","n4452","n4453","n4450"],"tags":{"building":"yes"}},"w767":{"id":"w767","nodes":["n4454","n4455","n4456","n4457","n4454"],"tags":{"building":"yes"}},"w768":{"id":"w768","nodes":["n4461","n4458","n4460"],"tags":{"footway":"crossing","highway":"footway"}},"w769":{"id":"w769","nodes":["n4460","n4462","n4459"],"tags":{"footway":"sidewalk","highway":"footway"}},"w77":{"id":"w77","nodes":["n325","n360","n361"],"tags":{"footway":"crossing","highway":"footway"}},"w770":{"id":"w770","nodes":["n4462","n4463","n4464"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w771":{"id":"w771","nodes":["n4464","n4465","n4466","n4467"],"tags":{"footway":"sidewalk","highway":"footway"}},"w772":{"id":"w772","nodes":["n3959","n3968","n3971","n3960","n3961","n3962","n3963"],"tags":{"footway":"sidewalk","highway":"footway"}},"w773":{"id":"w773","nodes":["n4467","n4468","n3959"],"tags":{"footway":"crossing","highway":"footway"}},"w774":{"id":"w774","nodes":["n4459","n4469","n4470"],"tags":{"footway":"crossing","highway":"footway"}},"w775":{"id":"w775","nodes":["n4470","n4471","n4472","n4473","n4474","n4475"],"tags":{"footway":"sidewalk","highway":"footway"}},"w776":{"id":"w776","nodes":["n4475","n4476","n4477"],"tags":{"footway":"crossing","highway":"footway"}},"w777":{"id":"w777","nodes":["n4477","n4478","n4479","n4480","n4481","n4482","n4483","n4484","n4485","n4486","n4487"],"tags":{"footway":"sidewalk","highway":"footway"}},"w778":{"id":"w778","nodes":["n4488","n4489","n4490","n4491","n4488"],"tags":{"building":"yes"}},"w779":{"id":"w779","nodes":["n4492","n4493","n4494","n4495","n4492"],"tags":{"building":"yes"}},"w78":{"id":"w78","nodes":["n361","n362","n369"],"tags":{"footway":"sidewalk","highway":"footway"}},"w780":{"id":"w780","nodes":["n4496","n4497","n4498","n4499","n4496"],"tags":{"access":"private","leisure":"swimming_pool"}},"w781":{"id":"w781","nodes":["n4508","n4509"],"tags":{"footway":"sidewalk","highway":"footway"}},"w782":{"id":"w782","nodes":["n4510","n4511"],"tags":{"footway":"sidewalk","highway":"footway"}},"w783":{"id":"w783","nodes":["n4512","n4513"],"tags":{"footway":"sidewalk","highway":"footway"}},"w784":{"id":"w784","nodes":["n4513","n4514"],"tags":{"footway":"sidewalk","highway":"footway"}},"w785":{"id":"w785","nodes":["n4515","n4516"],"tags":{"footway":"sidewalk","highway":"footway"}},"w786":{"id":"w786","nodes":["n4517","n4515"],"tags":{"footway":"sidewalk","highway":"footway"}},"w787":{"id":"w787","nodes":["n4518","n4519"],"tags":{"footway":"sidewalk","highway":"footway"}},"w788":{"id":"w788","nodes":["n4519","n4520","n4513"],"tags":{"footway":"crossing","highway":"footway"}},"w789":{"id":"w789","nodes":["n4515","n4521","n4513"],"tags":{"footway":"crossing","highway":"footway"}},"w79":{"id":"w79","nodes":["n362","n363","n334"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w790":{"id":"w790","nodes":["n4515","n4522","n4523"],"tags":{"footway":"crossing","highway":"footway"}},"w791":{"id":"w791","nodes":["n4523","n4524","n4519"],"tags":{"footway":"crossing","highway":"footway"}},"w792":{"id":"w792","nodes":["n4523","n4525"],"tags":{"footway":"sidewalk","highway":"footway"}},"w793":{"id":"w793","nodes":["n4525","n4526","n4527"],"tags":{"footway":"crossing","highway":"footway"}},"w794":{"id":"w794","nodes":["n4527","n4529"],"tags":{"footway":"sidewalk","highway":"footway"}},"w795":{"id":"w795","nodes":["n4529","n4530","n4518"],"tags":{"footway":"crossing","highway":"footway"}},"w796":{"id":"w796","nodes":["n4518","n4531"],"tags":{"footway":"sidewalk","highway":"footway"}},"w797":{"id":"w797","nodes":["n4531","n4532"],"tags":{"footway":"sidewalk","highway":"footway"}},"w798":{"id":"w798","nodes":["n4533","n4534"],"tags":{"footway":"sidewalk","highway":"footway"}},"w799":{"id":"w799","nodes":["n4518","n4538","n4539"],"tags":{"footway":"crossing","highway":"footway"}},"w8":{"id":"w8","nodes":["n46","n47","n145","n48","n49","n46"],"tags":{"amenity":"parking"}},"w80":{"id":"w80","nodes":["n334","n364","n365"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w800":{"id":"w800","nodes":["n4539","n4540","n4541"],"tags":{"footway":"crossing","highway":"footway"}},"w801":{"id":"w801","nodes":["n4541","n4542","n4529"],"tags":{"footway":"crossing","highway":"footway"}},"w802":{"id":"w802","nodes":["n4552","n4553"],"tags":{"footway":"sidewalk","highway":"footway"}},"w803":{"id":"w803","nodes":["n4554","n4555","n4556","n4557","n4558","n4559","n4554"],"tags":{"building":"yes"}},"w804":{"id":"w804","nodes":["n4562","n4563"],"tags":{"barrier":"retaining_wall"}},"w805":{"id":"w805","nodes":["n4568","n4569","n4570","n4571","n4568"],"tags":{"building":"yes"}},"w806":{"id":"w806","nodes":["n3473","n4575","n4576","n4581","n4580","n3551"],"tags":{"highway":"residential","oneway":"yes"}},"w807":{"id":"w807","nodes":["n4613","n4614","n4615","n4616","n4617","n4618","n4619","n4620","n4613"],"tags":{"leisure":"pitch","sport":"baseball"}},"w808":{"id":"w808","nodes":["n4621","n4622","n4623","n4624","n4625","n4626","n4627","n4628","n4629","n4630"],"tags":{"highway":"service"}},"w809":{"id":"w809","nodes":["n4631","n4632","n4633","n4637","n4634","n4638","n4635","n4636"],"tags":{"highway":"service"}},"w81":{"id":"w81","nodes":["n365","n366","n367"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w810":{"id":"w810","nodes":["n4639","n4640","n4641"],"tags":{"barrier":"fence"}},"w811":{"id":"w811","nodes":["n4649","n4650","n4651","n4652","n4649"],"tags":{"building":"yes"}},"w812":{"id":"w812","nodes":["n4654","n4655"],"tags":{"barrier":"fence"}},"w813":{"id":"w813","nodes":["n4656","n4657"],"tags":{"barrier":"fence"}},"w814":{"id":"w814","nodes":["n4669","n4670","n4671","n4672","n4669"],"tags":{"amenity":"shelter","shelter_type":"picnic_shelters"}},"w815":{"id":"w815","nodes":["n4678","n4679","n4680","n1889"],"tags":{"highway":"service"}},"w816":{"id":"w816","nodes":["n239","n4686","n4687"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w817":{"id":"w817","nodes":["n4687","n4688","n4689"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w818":{"id":"w818","nodes":["n4689","n4690","n307"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w819":{"id":"w819","nodes":["n2266","n4743"],"tags":{"highway":"path"}},"w82":{"id":"w82","nodes":["n724","n368","n369"],"tags":{"crossing":"zebra","footway":"crossing","highway":"footway"}},"w820":{"id":"w820","nodes":["n4785","n4786","n4787","n4788","n1684","n4760","n4769","n4761","n4762","n4763","n4764","n4765","n4766","n4767","n4768","n4785"],"tags":{"natural":"wood"}},"w821":{"id":"w821","nodes":["n4769","n4770","n4771","n4772","n4773","n4774","n4775","n4776","n4777","n4778","n4779","n4780","n4781","n4782","n4783","n4784","n4785","n4768","n4767","n4766","n4765","n4764","n4763","n4762","n4761","n4769"],"tags":{"natural":"scrub"}},"w822":{"id":"w822","nodes":["n4772","n4789","n4790","n4791","n4792","n4793","n4794","n4795","n4796","n4797","n4798","n4799","n4783","n4782","n4781","n4780","n4779","n4778","n4777","n4776","n4775","n4774","n4773","n4772"],"tags":{"natural":"wood"}},"w823":{"id":"w823","nodes":["n4800","n4801","n4802","n4803","n4804","n4805","n4806","n4807","n4808","n4809","n4810","n4811","n4812","n4813","n4814","n4815","n4816","n3490","n3489","n4800"],"tags":{"natural":"wood"}},"w824":{"id":"w824","nodes":["n4817","n4818","n4819","n4820","n4821","n4822","n4817"],"tags":{"landuse":"recreation_ground"}},"w825":{"id":"w825","nodes":["n4563","n4823","n4824","n4829","n4825","n4826","n4827","n4828","n4562","n4563"],"tags":{"landuse":"recreation_ground"}},"w826":{"id":"w826","nodes":["n4830","n4831","n4832","n4833","n4834","n4835","n4836","n4830"],"tags":{"landuse":"industrial"}},"w827":{"id":"w827","nodes":["n4563","n4837","n4838","n4839","n4840","n4841","n4842","n4827","n4828","n4562","n4563"],"tags":{"landuse":"industrial"}},"w828":{"id":"w828","nodes":["n4843","n4844","n4845","n4846","n4843"],"tags":{"landuse":"farmland"}},"w829":{"id":"w829","nodes":["n3712","n4847","n4848","n4849","n4850","n4851","n4852","n4858","n4864","n4959","n4960","n4853","n4857","n4854","n4855","n4856","n3712"],"tags":{"aeroway":"aerodrome","name":"Three Rivers Municipal Airport"}},"w83":{"id":"w83","nodes":["n371","n372","n373","n374","n371"],"tags":{"building":"yes"}},"w830":{"id":"w830","nodes":["n4855","n4854","n4857","n4853","n4960"],"tags":{"barrier":"fence"}},"w831":{"id":"w831","nodes":["n4860","n4859","n4858","n4852","n4851"],"tags":{"barrier":"fence"}},"w832":{"id":"w832","nodes":["n4866","n4878","n4869","n4867"],"tags":{"aeroway":"runway","ref":"5/23"}},"w833":{"id":"w833","nodes":["n4868","n4890","n4894","n4881","n4869","n4905","n4870"],"tags":{"aeroway":"runway","ref":"9/27"}},"w834":{"id":"w834","nodes":["n4871","n4875","n4872","n4895","n4873","n4874","n4871"],"tags":{"aeroway":"apron"}},"w835":{"id":"w835","nodes":["n4875","n4876","n4877","n4878","n4879","n4880","n4882","n4881"],"tags":{"aeroway":"taxiway"}},"w836":{"id":"w836","nodes":["n4882","n4893","n4883","n4891","n4884","n4885","n4886","n4887","n4888","n4892","n4889","n4890"],"tags":{"aeroway":"taxiway"}},"w837":{"id":"w837","nodes":["n4893","n4894"],"tags":{"aeroway":"taxiway"}},"w838":{"id":"w838","nodes":["n4895","n4896","n4897","n4898","n4899","n4900","n4901","n4902","n4903","n4906","n4904","n4905"],"tags":{"aeroway":"taxiway"}},"w839":{"id":"w839","nodes":["n4907","n4908"],"tags":{"highway":"service"}},"w84":{"id":"w84","nodes":["n374","n375","n376","n377","n373","n374"],"tags":{"building":"yes"}},"w840":{"id":"w840","nodes":["n4909","n4907","n4910"],"tags":{"highway":"service"}},"w841":{"id":"w841","nodes":["n4911","n4912","n4913","n4914","n4911"],"tags":{"building":"yes"}},"w842":{"id":"w842","nodes":["n4915","n4916","n4917","n4918","n4915"],"tags":{"aeroway":"hangar","building":"yes"}},"w843":{"id":"w843","nodes":["n4919","n4920","n4921","n4922","n4919"],"tags":{"building":"yes"}},"w844":{"id":"w844","nodes":["n4923","n4924","n4925","n4926","n4923"],"tags":{"aeroway":"hangar","building":"yes"}},"w845":{"id":"w845","nodes":["n4927","n4928","n4929","n4930","n4927"],"tags":{"aeroway":"hangar","building":"yes"}},"w846":{"id":"w846","nodes":["n4931","n4932","n4933","n4934","n4931"],"tags":{"aeroway":"hangar","building":"yes"}},"w847":{"id":"w847","nodes":["n4935","n4936","n4937","n4938","n4935"],"tags":{"aeroway":"hangar","building":"yes"}},"w848":{"id":"w848","nodes":["n4939","n4940","n4941","n4942","n4939"],"tags":{"aeroway":"hangar","building":"yes"}},"w849":{"id":"w849","nodes":["n4943","n4944","n4945","n4946","n4943"],"tags":{"aeroway":"hangar","building":"yes"}},"w85":{"id":"w85","nodes":["n431","n432","n1038","n433","n434","n1040","n431"],"tags":{"building":"yes"}},"w850":{"id":"w850","nodes":["n4947","n4948","n4949","n4950","n4947"],"tags":{"aeroway":"hangar","building":"yes"}},"w851":{"id":"w851","nodes":["n4951","n4952","n4953","n4954","n4951"],"tags":{"aeroway":"hangar","building":"yes"}},"w852":{"id":"w852","nodes":["n4955","n4956","n4957","n4958","n4955"],"tags":{"aeroway":"hangar","building":"yes"}},"w853":{"id":"w853","nodes":["n4959","n4864","n4861","n4862","n4863"],"tags":{"barrier":"fence"}},"w854":{"id":"w854","nodes":["n4961","n4962","n4963","n4964","n4965","n4966","n4967","n4968","n4969","n4961"],"tags":{"landuse":"farmland"}},"w855":{"id":"w855","nodes":["n4970","n4971","n4972","n4973","n4974","n4975","n4976","n4977","n4978","n4980","n4970"],"tags":{"landuse":"farmland"}},"w856":{"id":"w856","nodes":["n4979","n4980","n4978","n4981","n4982","n4983","n4984","n4985","n4979"],"tags":{"natural":"scrub"}},"w857":{"id":"w857","nodes":["n4986","n4987","n4988","n5032","n4989","n4990","n4991","n4992","n4993","n4994","n4995","n4996","n4997","n4998","n4999","n5000","n5001","n5002","n5022","n5023","n5024","n5025","n5030","n5031","n5029","n5028","n5027","n5026","n4986"],"tags":{"landuse":"farmland"}},"w858":{"id":"w858","nodes":["n5001","n5003","n5004","n4999","n5000","n5001"],"tags":{"natural":"scrub"}},"w859":{"id":"w859","nodes":["n5005","n5006","n5007","n5008","n5009","n5010","n5021","n5020","n5019","n5011","n5012","n5013","n5018","n5014","n5015","n5017","n5016","n5005"],"tags":{"landuse":"farmland"}},"w86":{"id":"w86","nodes":["n384","n385","n386","n387","n384"],"tags":{"building":"yes"}},"w860":{"id":"w860","nodes":["n3020","n5033","n5034","n5035","n3179","n3180","n3191","n3181","n3190","n3182","n3183","n3184","n3185","n3186","n3187","n3188","n3189","n3160","n3161","n3162","n2126","n2153","n2288","n3020"],"tags":{"landuse":"industrial"}},"w87":{"id":"w87","nodes":["n387","n388","n389","n386","n387"],"tags":{"building":"yes"}},"w88":{"id":"w88","nodes":["n390","n391","n392","n393","n390"],"tags":{"building":"yes"}},"w89":{"id":"w89","nodes":["n394","n2895"],"tags":{"highway":"service"}},"w9":{"id":"w9","nodes":["n50","n51","n148","n52","n57","n891","n53","n50"],"tags":{"building":"yes"}},"w90":{"id":"w90","nodes":["n398","n399","n400","n401","n402","n403","n404","n405","n406","n407","n408","n409","n410","n411","n412","n413","n414","n415","n416","n417","n398"],"tags":{"building":"yes"}},"w91":{"id":"w91","nodes":["n418","n423","n419"],"tags":{"highway":"service"}},"w92":{"id":"w92","nodes":["n420","n421","n422","n423","n420"],"tags":{"amenity":"parking"}},"w93":{"id":"w93","nodes":["n2282","n1876"],"tags":{"name":"Rocky River","tunnel":"building_passage","waterway":"river"}},"w94":{"id":"w94","nodes":["n1876","n885","n1875","n2234"],"tags":{"name":"Rocky River","waterway":"river"}},"w95":{"id":"w95","nodes":["n425","n426","n427","n914","n428","n913","n425"],"tags":{"building":"yes"}},"w96":{"id":"w96","nodes":["n456","n620","n1034","n1035","n456"],"tags":{"building":"yes"}},"w97":{"id":"w97","nodes":["n435","n912","n451","n321"],"tags":{"highway":"footway"}},"w98":{"id":"w98","nodes":["n436","n319","n437","n438","n439","n440","n441","n476","n442"],"tags":{"highway":"service"}},"w99":{"id":"w99","nodes":["n443","n444","n445","n446","n447","n448","n449","n450","n443"],"tags":{"amenity":"parking"}},"n2934":{"id":"n2934","loc":[-85.617051,41.952263]},"n2935":{"id":"n2935","loc":[-85.61699,41.952276]},"n2937":{"id":"n2937","loc":[-85.616847,41.952262]},"n2938":{"id":"n2938","loc":[-85.616577,41.951956]},"n2939":{"id":"n2939","loc":[-85.61656,41.952044]},"n3348":{"id":"n3348","loc":[-85.61714,41.9522]},"n3349":{"id":"n3349","loc":[-85.616517,41.95212]},"n3350":{"id":"n3350","loc":[-85.616489,41.952033]},"n3351":{"id":"n3351","loc":[-85.616529,41.951907]},"n3354":{"id":"n3354","loc":[-85.616488,41.951994]}}; - context.map().on('move.intro', function() { - if (context.map().zoom() !== zoomStart) { - context.map().on('move.intro', null); - timeout(function() { continueTo(features); }, 3000); - } - }); + // Tooltips and svg mask used to highlight certain features + function uiCurtain() { - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - nextStep(); - } - } + var surface = select(null), + tooltip = select(null), + darkness = select(null); + function curtain(selection$$1) { + surface = selection$$1 + .append('svg') + .attr('id', 'curtain') + .style('z-index', 1000) + .style('pointer-events', 'none') + .style('position', 'absolute') + .style('top', 0) + .style('left', 0); - function features() { - var onClick = function() { continueTo(pointsLinesAreas); }; + darkness = surface.append('path') + .attr('x', 0) + .attr('y', 0) + .attr('class', 'curtain-darkness'); - reveal('#surface', t('intro.navigation.features'), - { buttonText: t('intro.ok'), buttonCallback: onClick } - ); + select(window).on('resize.curtain', resize); - context.map().on('drawn.intro', function() { - reveal('#surface', t('intro.navigation.features'), - { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick } - ); - }); + tooltip = selection$$1.append('div') + .attr('class', 'tooltip') + .style('z-index', 1002); - function continueTo(nextStep) { - context.map().on('drawn.intro', null); - nextStep(); - } - } + tooltip + .append('div') + .attr('class', 'tooltip-arrow'); - function pointsLinesAreas() { - var onClick = function() { continueTo(nodesWays); }; + tooltip + .append('div') + .attr('class', 'tooltip-inner'); - reveal('#surface', t('intro.navigation.points_lines_areas'), - { buttonText: t('intro.ok'), buttonCallback: onClick } - ); + resize(); - context.map().on('drawn.intro', function() { - reveal('#surface', t('intro.navigation.points_lines_areas'), - { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick } - ); - }); - function continueTo(nextStep) { - context.map().on('drawn.intro', null); - nextStep(); - } - } + function resize() { + surface + .attr('width', window.innerWidth) + .attr('height', window.innerHeight); + curtain.cut(darkness.datum()); + } + } - function nodesWays() { - var onClick = function() { continueTo(clickTownHall); }; - reveal('#surface', t('intro.navigation.nodes_ways'), - { buttonText: t('intro.ok'), buttonCallback: onClick } - ); + /** + * Reveal cuts the curtain to highlight the given box, + * and shows a tooltip with instructions next to the box. + * + * @param {String|ClientRect} [box] box used to cut the curtain + * @param {String} [text] text for a tooltip + * @param {Object} [options] + * @param {string} [options.tooltipClass] optional class to add to the tooltip + * @param {integer} [options.duration] transition time in milliseconds + * @param {string} [options.buttonText] if set, create a button with this text label + * @param {function} [options.buttonCallback] if set, the callback for the button + * @param {String|ClientRect} [options.tooltipBox] box for tooltip position, if different from box for the curtain + */ + curtain.reveal = function(box, text, options) { + if (typeof box === 'string') { + box = select(box).node(); + } + if (box && box.getBoundingClientRect) { + box = copyBox(box.getBoundingClientRect()); + } - context.map().on('drawn.intro', function() { - reveal('#surface', t('intro.navigation.nodes_ways'), - { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick } - ); - }); + options = options || {}; + + var tooltipBox; + if (options.tooltipBox) { + tooltipBox = options.tooltipBox; + if (typeof tooltipBox === 'string') { + tooltipBox = select(tooltipBox).node(); + } + if (tooltipBox && tooltipBox.getBoundingClientRect) { + tooltipBox = copyBox(tooltipBox.getBoundingClientRect()); + } + } else { + tooltipBox = box; + } - function continueTo(nextStep) { - context.map().on('drawn.intro', null); - nextStep(); - } - } + if (tooltipBox && text) { + // pseudo markdown bold text for the instruction section.. + var parts = text.split('**'); + var html = parts[0] ? '' + parts[0] + '' : ''; + if (parts[1]) { + html += '' + parts[1] + ''; + } + + html = html.replace(/\*(.*?)\*/g, '$1'); // emphasis + html = html.replace(/\{br\}/g, '

      '); // linebreak + + if (options.buttonText && options.buttonCallback) { + html += '
      ' + + '
      '; + } + + var classes = 'curtain-tooltip tooltip in ' + (options.tooltipClass || ''); + tooltip + .classed(classes, true) + .selectAll('.tooltip-inner') + .html(html); + + if (options.buttonText && options.buttonCallback) { + var button = tooltip.selectAll('.button-section .button.action'); + button + .on('click', function() { + event.preventDefault(); + options.buttonCallback(); + }); + } + + var tip = copyBox(tooltip.node().getBoundingClientRect()), + w = window.innerWidth, + h = window.innerHeight, + tooltipWidth = 200, + tooltipArrow = 5, + side, pos; + + + // hack: this will have bottom placement, + // so need to reserve extra space for the tooltip illustration. + if (options.tooltipClass === 'intro-mouse') { + tip.height += 80; + } + + // trim box dimensions to just the portion that fits in the window.. + if (tooltipBox.top + tooltipBox.height > h) { + tooltipBox.height -= (tooltipBox.top + tooltipBox.height - h); + } + if (tooltipBox.left + tooltipBox.width > w) { + tooltipBox.width -= (tooltipBox.left + tooltipBox.width - w); + } + + // determine tooltip placement.. + + if (tooltipBox.top + tooltipBox.height < 100) { + // tooltip below box.. + side = 'bottom'; + pos = [ + tooltipBox.left + tooltipBox.width / 2 - tip.width / 2, + tooltipBox.top + tooltipBox.height + ]; + + } else if (tooltipBox.top > h - 140) { + // tooltip above box.. + side = 'top'; + pos = [ + tooltipBox.left + tooltipBox.width / 2 - tip.width / 2, + tooltipBox.top - tip.height + ]; + + } else { + // tooltip to the side of the tooltipBox.. + var tipY = tooltipBox.top + tooltipBox.height / 2 - tip.height / 2; + + if (textDirection === 'rtl') { + if (tooltipBox.left - tooltipWidth - tooltipArrow < 70) { + side = 'right'; + pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY]; + + } else { + side = 'left'; + pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY]; + } + + } else { + if (tooltipBox.left + tooltipBox.width + tooltipArrow + tooltipWidth > w - 70) { + side = 'left'; + pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY]; + } + else { + side = 'right'; + pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY]; + } + } + } + + if (options.duration !== 0 || !tooltip.classed(side)) { + tooltip.call(uiToggle(true)); + } + + tooltip + .style('top', pos[1] + 'px') + .style('left', pos[0] + 'px') + .attr('class', classes + ' ' + side); + + + // shift tooltip-inner if it is very close to the top or bottom edge + // (doesn't affect the placement of the tooltip-arrow) + var shiftY = 0; + if (side === 'left' || side === 'right') { + if (pos[1] < 60) { + shiftY = 60 - pos[1]; + } + else if (pos[1] + tip.height > h - 100) { + shiftY = h - pos[1] - tip.height - 100; + } + } + tooltip.selectAll('.tooltip-inner') + .style('top', shiftY + 'px'); - function clickTownHall() { - context.enter(modeBrowse(context)); - context.history().reset('initial'); + } else { + tooltip + .classed('in', false) + .call(uiToggle(false)); + } - reveal(null, null, { duration: 0 }); - context.map().zoomEase(19, 500); + curtain.cut(box, options.duration); - timeout(function() { - var entity = context.hasEntity(hallId); - if (!entity) return; - context.map().centerEase(entity.loc, 500); + return tooltip; + }; - timeout(function() { - var entity = context.hasEntity(hallId); - if (!entity) return; - var box = pointBox(entity.loc, context); - reveal(box, t('intro.navigation.click_townhall')); - context.map().on('move.intro drawn.intro', function() { - var entity = context.hasEntity(hallId); - if (!entity) return; - var box = pointBox(entity.loc, context); - reveal(box, t('intro.navigation.click_townhall'), { duration: 0 }); - }); + curtain.cut = function(datum, duration) { + darkness.datum(datum) + .interrupt(); - context.on('enter.intro', function() { - if (isTownHallSelected()) continueTo(selectedTownHall); - }); + var selection$$1; + if (duration === 0) { + selection$$1 = darkness; + } else { + selection$$1 = darkness + .transition() + .duration(duration || 600) + .ease(linear$1); + } - }, 550); // after centerEase + selection$$1 + .attr('d', function(d) { + var string = 'M 0,0 L 0,' + window.innerHeight + ' L ' + + window.innerWidth + ',' + window.innerHeight + 'L' + + window.innerWidth + ',0 Z'; - }, 550); // after zoomEase + if (!d) return string; + return string + 'M' + + d.left + ',' + d.top + 'L' + + d.left + ',' + (d.top + d.height) + 'L' + + (d.left + d.width) + ',' + (d.top + d.height) + 'L' + + (d.left + d.width) + ',' + (d.top) + 'Z'; - context.history().on('change.intro', function() { - if (!context.hasEntity(hallId)) { - continueTo(clickTownHall); - } - }); + }); + }; - function continueTo(nextStep) { - context.on('enter.intro', null); - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + curtain.remove = function() { + surface.remove(); + tooltip.remove(); + select(window).on('resize.curtain', null); + }; - function selectedTownHall() { - if (!isTownHallSelected()) return clickTownHall(); - var entity = context.hasEntity(hallId); - if (!entity) return clickTownHall(); + // ClientRects are immutable, so copy them to an object, + // in case we need to trim the height/width. + function copyBox(src) { + return { + top: src.top, + right: src.right, + bottom: src.bottom, + left: src.left, + width: src.width, + height: src.height + }; + } - var box = pointBox(entity.loc, context); - var onClick = function() { continueTo(editorTownHall); }; - reveal(box, t('intro.navigation.selected_townhall'), - { buttonText: t('intro.ok'), buttonCallback: onClick } - ); + return curtain; + } - context.map().on('move.intro drawn.intro', function() { - var entity = context.hasEntity(hallId); - if (!entity) return; - var box = pointBox(entity.loc, context); - reveal(box, t('intro.navigation.selected_townhall'), - { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick } - ); - }); + function uiIntroWelcome(context, reveal) { + var dispatch$$1 = dispatch('done'), + listener = clickListener(); - context.history().on('change.intro', function() { - if (!context.hasEntity(hallId)) { - continueTo(clickTownHall); - } - }); + var chapter = { + title: 'intro.welcome.title' + }; - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + function welcome() { + context.map().centerZoom([-85.63591, 41.94285], 19); + reveal('.intro-nav-wrap .chapter-welcome', + t('intro.welcome.welcome'), + { buttonText: t('intro.ok'), buttonCallback: practice } + ); + } - function editorTownHall() { - if (!isTownHallSelected()) return clickTownHall(); + function practice() { + reveal('.intro-nav-wrap .chapter-welcome', + t('intro.welcome.practice'), + { buttonText: t('intro.ok'), buttonCallback: words } + ); + } - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + function words() { + reveal('.intro-nav-wrap .chapter-welcome', + t('intro.welcome.words'), + { buttonText: t('intro.ok'), buttonCallback: mouse$$1 } + ); + } - var onClick = function() { continueTo(presetTownHall); }; - reveal('.entity-editor-pane', - t('intro.navigation.editor_townhall'), - { buttonText: t('intro.ok'), buttonCallback: onClick } - ); + function mouse$$1() { + reveal('.intro-nav-wrap .chapter-welcome', + t('intro.welcome.mouse'), + { buttonText: t('intro.ok'), buttonCallback: leftClick } + ); + } - context.on('exit.intro', function() { - continueTo(clickTownHall); - }); - context.history().on('change.intro', function() { - if (!context.hasEntity(hallId)) { - continueTo(clickTownHall); - } - }); + function leftClick() { + var counter = 0, + times = 5; - function continueTo(nextStep) { - context.on('exit.intro', null); - context.history().on('change.intro', null); - d3_select('.inspector-wrap').on('wheel.intro', null); - nextStep(); - } - } + var tooltip = reveal('.intro-nav-wrap .chapter-welcome', + t('intro.welcome.leftclick', { num: times }), + { tooltipClass: 'intro-mouse' } + ); + tooltip.selectAll('.tooltip-inner') + .insert('svg', 'span') + .attr('class', 'tooltip-illustration') + .append('use') + .attr('xlink:href', '#walkthrough-mouse'); - function presetTownHall() { - if (!isTownHallSelected()) return clickTownHall(); + tooltip + .append('div') + .attr('class', 'counter'); - // reset pane, in case user happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '0%'); - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + tooltip.call(listener); - // preset match, in case the user happened to change it. - var entity = context.entity(context.selectedIDs()[0]); - var preset = context.presets().match(entity, context.graph()); + listener.on('click', function(which) { + if (which === 'left') { + select('.curtain-tooltip.intro-mouse .counter') + .text(String(++counter)); - var onClick = function() { continueTo(fieldsTownHall); }; + if (counter === times) { + window.setTimeout(function() { continueTo(rightClick); }, 1000); + } + } + }); - context.on('exit.intro', function() { - continueTo(clickTownHall); - }); + function continueTo(nextStep) { + listener.on('click', null); + tooltip.call(listener.off); + tooltip.select('.counter').remove(); + nextStep(); + } + } - context.history().on('change.intro', function() { - if (!context.hasEntity(hallId)) { - continueTo(clickTownHall); - } - }); - reveal('.inspector-body .preset-list-item.inspector-inner', - t('intro.navigation.preset_townhall', { preset: preset.name() }), - { buttonText: t('intro.ok'), buttonCallback: onClick } - ); + function rightClick() { + var counter = 0, + times = 5; - function continueTo(nextStep) { - context.on('exit.intro', null); - context.history().on('change.intro', null); - d3_select('.inspector-wrap').on('wheel.intro', null); - nextStep(); - } - } + var tooltip = reveal('.intro-nav-wrap .chapter-welcome', + t('intro.welcome.rightclick', { num: times }), + { tooltipClass: 'intro-mouse' } + ); + tooltip.selectAll('.tooltip-inner') + .insert('svg', 'span') + .attr('class', 'tooltip-illustration') + .append('use') + .attr('xlink:href', '#walkthrough-mouse'); - function fieldsTownHall() { - if (!isTownHallSelected()) return clickTownHall(); + tooltip + .append('div') + .attr('class', 'counter'); - // reset pane, in case user happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '0%'); - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + tooltip.call(listener); - var onClick = function() { continueTo(closeTownHall); }; + listener.on('click', function(which) { + if (which === 'right') { + select('.curtain-tooltip.intro-mouse .counter') + .text(String(++counter)); - reveal('.inspector-body .preset-editor', - t('intro.navigation.fields_townhall'), - { buttonText: t('intro.ok'), buttonCallback: onClick } - ); + if (counter === times) { + window.setTimeout(function() { continueTo(chapters); }, 1000); + } + } + }); - context.on('exit.intro', function() { - continueTo(clickTownHall); - }); + function continueTo(nextStep) { + listener.on('click', null); + tooltip.call(listener.off); + tooltip.select('.counter').remove(); + nextStep(); + } + } - context.history().on('change.intro', function() { - if (!context.hasEntity(hallId)) { - continueTo(clickTownHall); - } - }); - function continueTo(nextStep) { - context.on('exit.intro', null); - context.history().on('change.intro', null); - d3_select('.inspector-wrap').on('wheel.intro', null); - nextStep(); - } - } + function chapters() { + dispatch$$1.call('done'); + reveal('.intro-nav-wrap .chapter-navigation', + t('intro.welcome.chapters', { next: t('intro.navigation.title') }) + ); + } - function closeTownHall() { - if (!isTownHallSelected()) return clickTownHall(); + chapter.enter = function() { + welcome(); + }; - var selector$$1 = '.entity-editor-pane button.preset-close svg use'; - var href = d3_select(selector$$1).attr('href') || '#icon-close'; - reveal('.entity-editor-pane', - t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') }) - ); + chapter.exit = function() { + listener.off(); + select('.curtain-tooltip.intro-mouse') + .selectAll('.counter') + .remove(); + }; - context.on('exit.intro', function() { - continueTo(searchStreet); - }); - context.history().on('change.intro', function() { - // update the close icon in the tooltip if the user edits something. - var selector$$1 = '.entity-editor-pane button.preset-close svg use'; - var href = d3_select(selector$$1).attr('href') || '#icon-close'; + chapter.restart = function() { + chapter.exit(); + chapter.enter(); + }; - reveal('.entity-editor-pane', - t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') }), - { duration: 0 } - ); - }); - function continueTo(nextStep) { - context.on('exit.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + return utilRebind(chapter, dispatch$$1, 'on'); + } - function searchStreet() { - context.enter(modeBrowse(context)); - context.history().reset('initial'); // ensure spring street exists - var msec = transitionTime(springStreet, context.map().center()); - if (msec) { reveal(null, null, { duration: 0 }); } - context.map().zoom(19).centerEase(springStreet, msec); // ..and user can see it + function clickListener() { + var dispatch$$1 = dispatch('click'), + minTime = 120, + tooltip = select(null), + down = {}; - timeout(function() { - reveal('.search-header input', - t('intro.navigation.search_street', { name: t('intro.graph.name.spring-street') }) - ); + // `down` keeps track of which buttons/keys are down. + // Setting a property in `down` happens immediately. + // Unsetting a property in `down` is delayed because + // on Windows a contextmenu event happens after keyup/mouseup - d3_select('.search-header input') - .on('keyup.intro', checkSearchResult); - }, msec + 100); - } + function keydown() { + if (event.keyCode === 93) { // context menu + event.preventDefault(); + event.stopPropagation(); + down.menu = event.timeStamp; + tooltip.classed('rightclick', true); + } + } - function checkSearchResult() { - var first = d3_select('.feature-list-item:nth-child(0n+2)'), // skip "No Results" item - firstName = first.select('.entity-name'), - name = t('intro.graph.name.spring-street'); + function keyup() { + if (event.keyCode === 93) { // context menu + event.preventDefault(); + event.stopPropagation(); + var endTime = event.timeStamp, + startTime = down.menu || endTime, + delay = (endTime - startTime < minTime) ? minTime : 0; - if (!firstName.empty() && firstName.text() === name) { - reveal(first.node(), - t('intro.navigation.choose_street', { name: name }), - { duration: 300 } - ); + window.setTimeout(function() { + tooltip.classed('rightclick', false); + down.menu = undefined; // delayed, for Windows + }, delay); - context.on('exit.intro', function() { - continueTo(selectedStreet); - }); + dispatch$$1.call('click', this, 'right'); + } + } - d3_select('.search-header input') - .on('keydown.intro', eventCancel, true) - .on('keyup.intro', null); - } - function continueTo(nextStep) { - context.on('exit.intro', null); - d3_select('.search-header input') - .on('keydown.intro', null) - .on('keyup.intro', null); - nextStep(); - } - } + function mousedown() { + var button = event.button; + if (button === 0 && !event.ctrlKey) { + tooltip.classed('leftclick', true); + } else if (button === 2) { + tooltip.classed('rightclick', true); + } + down[button] = event.timeStamp; + } - function selectedStreet() { - if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) { - return searchStreet(); - } + function mouseup() { + var button = event.button, + endTime = event.timeStamp, + startTime = down[button] || endTime, + delay = (endTime - startTime < minTime) ? minTime : 0; - var onClick = function() { continueTo(editorStreet); }; - var entity = context.entity(springStreetEndId); - var box = pointBox(entity.loc, context); - box.height = 500; + if (button === 0 && !event.ctrlKey) { + window.setTimeout(function() { + tooltip.classed('leftclick', false); + down[button] = undefined; // delayed, for Windows + }, delay); - reveal(box, - t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }), - { duration: 600, buttonText: t('intro.ok'), buttonCallback: onClick } - ); + dispatch$$1.call('click', this, 'left'); - timeout(function() { - context.map().on('move.intro drawn.intro', function() { - var entity = context.hasEntity(springStreetEndId); - if (!entity) return; - var box = pointBox(entity.loc, context); - box.height = 500; - reveal(box, - t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }), - { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick } - ); - }); - }, 600); // after reveal. + } else if (button === 2) { + window.setTimeout(function() { + tooltip.classed('rightclick', false); + down[button] = undefined; // delayed, for Windows + }, delay); - context.on('enter.intro', function(mode) { - if (!context.hasEntity(springStreetId)) { - return continueTo(searchStreet); - } - var ids = context.selectedIDs(); - if (mode.id !== 'select' || !ids.length || ids[0] !== springStreetId) { - // keep Spring Street selected.. - context.enter(modeSelect(context, [springStreetId])); - } - }); + dispatch$$1.call('click', this, 'right'); - context.history().on('change.intro', function() { - if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) { - timeout(function() { - continueTo(searchStreet); - }, 300); // after any transition (e.g. if user deleted intersection) - } - }); + } else { + window.setTimeout(function() { + down[button] = undefined; // delayed, for Windows + }, delay); + } + } - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + function contextmenu() { + event.preventDefault(); + event.stopPropagation(); + if (!down[2] && !down.menu) { + tooltip.classed('rightclick', true); + window.setTimeout(function() { + tooltip.classed('rightclick', false); + }, minTime); + dispatch$$1.call('click', this, 'right'); + } + } - function editorStreet() { - var selector$$1 = '.entity-editor-pane button.preset-close svg use'; - var href = d3_select(selector$$1).attr('href') || '#icon-close'; - reveal('.entity-editor-pane', - t('intro.navigation.editor_street', { - button: icon(href, 'pre-text'), - field1: onewayField.label(), - field2: maxspeedField.label() - }) - ); + var behavior = function(selection$$1) { + tooltip = selection$$1; + down = {}; - context.on('exit.intro', function() { - continueTo(play); - }); + select(window) + .on('keydown.intro', keydown) + .on('keyup.intro', keyup) + .on('mousedown.intro', mousedown) + .on('mouseup.intro', mouseup) + .on('contextmenu.intro', contextmenu); + }; - context.history().on('change.intro', function() { - // update the close icon in the tooltip if the user edits something. - var selector$$1 = '.entity-editor-pane button.preset-close svg use'; - var href = d3_select(selector$$1).attr('href') || '#icon-close'; - - reveal('.entity-editor-pane', - t('intro.navigation.editor_street', { - button: icon(href, 'pre-text'), - field1: onewayField.label().toLowerCase(), - field2: maxspeedField.label().toLowerCase() - }), { duration: 0 } - ); - }); - function continueTo(nextStep) { - context.on('exit.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + behavior.off = function() { + select(window) + .on('keydown.intro', null) + .on('keyup.intro', null) + .on('mousedown.intro', null) + .on('mouseup.intro', null) + .on('contextmenu.intro', null); + tooltip + .classed('leftclick', false) + .classed('rightclick', false); + }; - function play() { - dispatch$$1.call('done'); - reveal('#id-container', - t('intro.navigation.play', { next: t('intro.points.title') }), { - tooltipBox: '.intro-nav-wrap .chapter-point', - buttonText: t('intro.ok'), - buttonCallback: function() { reveal('#id-container'); } - } - ); - } + return utilRebind(behavior, dispatch$$1, 'on'); + } + function uiIntroNavigation(context, reveal) { + var dispatch$$1 = dispatch('done'), + timeouts = [], + hallId = 'n2061', + townHall = [-85.63591, 41.94285], + springStreetId = 'w397', + springStreetEndId = 'n1834', + springStreet = [-85.63582, 41.94255], + onewayField = context.presets().field('oneway'), + maxspeedField = context.presets().field('maxspeed'); - chapter.enter = function() { - dragMap(); - }; + var chapter = { + title: 'intro.navigation.title' + }; - chapter.exit = function() { - timeouts.forEach(window.clearTimeout); - context.on('enter.intro exit.intro', null); - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - d3_select('.inspector-wrap').on('wheel.intro', null); - d3_select('.search-header input').on('keydown.intro keyup.intro', null); - }; + function timeout(f, t$$1) { + timeouts.push(window.setTimeout(f, t$$1)); + } - chapter.restart = function() { - chapter.exit(); - chapter.enter(); - }; + function eventCancel() { + event.stopPropagation(); + event.preventDefault(); + } - return utilRebind(chapter, dispatch$$1, 'on'); -} -function uiIntroPoint(context, reveal) { - var dispatch$$1 = dispatch('done'), - timeouts = [], - intersection = [-85.63279, 41.94394], - building = [-85.632422, 41.944045], - cafePreset = context.presets().item('amenity/cafe'), - pointId = null; + function isTownHallSelected() { + var ids = context.selectedIDs(); + return ids.length === 1 && ids[0] === hallId; + } - var chapter = { - title: 'intro.points.title' - }; + function dragMap() { + context.enter(modeBrowse(context)); + context.history().reset('initial'); + var msec = transitionTime(townHall, context.map().center()); + if (msec) { reveal(null, null, { duration: 0 }); } + context.map().zoom(19).centerEase(townHall, msec); - function timeout(f, t$$1) { - timeouts.push(window.setTimeout(f, t$$1)); - } + timeout(function() { + var centerStart = context.map().center(); + reveal('#surface', t('intro.navigation.drag')); + context.map().on('drawn.intro', function() { + reveal('#surface', t('intro.navigation.drag'), { duration: 0 }); + }); - function revealEditMenu(loc, text, options) { - var rect = context.surfaceRect(); - var point$$1 = context.curtainProjection(loc); - var pad = 40; - var width = 250 + (2 * pad); - var height = 250; - var startX = rect.left + point$$1[0]; - var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad); - var box = { - left: left, - top: point$$1[1] + rect.top - 60, - width: width, - height: height - }; - reveal(box, text, options); - } + context.map().on('move.intro', function() { + var centerNow = context.map().center(); + if (centerStart[0] !== centerNow[0] || centerStart[1] !== centerNow[1]) { + context.map().on('move.intro', null); + timeout(function() { continueTo(zoomMap); }, 3000); + } + }); + }, msec + 100); - function eventCancel() { - event.stopPropagation(); - event.preventDefault(); - } + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + nextStep(); + } + } - function addPoint() { - context.enter(modeBrowse(context)); - context.history().reset('initial'); + function zoomMap() { + var zoomStart = context.map().zoom(); - var msec = transitionTime(intersection, context.map().center()); - if (msec) { reveal(null, null, { duration: 0 }); } - context.map().zoom(19).centerEase(intersection, msec); + reveal('#surface', + t('intro.navigation.zoom', { + plus: icon('#icon-plus', 'pre-text'), + minus: icon('#icon-minus', 'pre-text') + }) + ); - timeout(function() { - var tooltip = reveal('button.add-point', - t('intro.points.add_point', { button: icon('#icon-point', 'pre-text') })); + context.map().on('drawn.intro', function() { + reveal('#surface', + t('intro.navigation.zoom', { + plus: icon('#icon-plus', 'pre-text'), + minus: icon('#icon-minus', 'pre-text') + }), { duration: 0 } + ); + }); - pointId = null; + context.map().on('move.intro', function() { + if (context.map().zoom() !== zoomStart) { + context.map().on('move.intro', null); + timeout(function() { continueTo(features); }, 3000); + } + }); - tooltip.selectAll('.tooltip-inner') - .insert('svg', 'span') - .attr('class', 'tooltip-illustration') - .append('use') - .attr('xlink:href', '#poi-images'); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + nextStep(); + } + } - context.on('enter.intro', function(mode) { - if (mode.id !== 'add-point') return; - continueTo(placePoint); - }); - }, msec + 100); - function continueTo(nextStep) { - context.on('enter.intro', null); - nextStep(); - } - } + function features() { + var onClick = function() { continueTo(pointsLinesAreas); }; + reveal('#surface', t('intro.navigation.features'), + { buttonText: t('intro.ok'), buttonCallback: onClick } + ); - function placePoint() { - if (context.mode().id !== 'add-point') { - return chapter.restart(); - } + context.map().on('drawn.intro', function() { + reveal('#surface', t('intro.navigation.features'), + { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick } + ); + }); - var pointBox$$1 = pad$1(building, 150, context); - reveal(pointBox$$1, t('intro.points.place_point')); + function continueTo(nextStep) { + context.map().on('drawn.intro', null); + nextStep(); + } + } - context.map().on('move.intro drawn.intro', function() { - pointBox$$1 = pad$1(building, 150, context); - reveal(pointBox$$1, t('intro.points.place_point'), { duration: 0 }); - }); + function pointsLinesAreas() { + var onClick = function() { continueTo(nodesWays); }; - context.on('enter.intro', function(mode) { - if (mode.id !== 'select') return chapter.restart(); - pointId = context.mode().selectedIDs()[0]; - continueTo(searchPreset); - }); + reveal('#surface', t('intro.navigation.points_lines_areas'), + { buttonText: t('intro.ok'), buttonCallback: onClick } + ); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + context.map().on('drawn.intro', function() { + reveal('#surface', t('intro.navigation.points_lines_areas'), + { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick } + ); + }); + function continueTo(nextStep) { + context.map().on('drawn.intro', null); + nextStep(); + } + } - function searchPreset() { - if (context.mode().id !== 'select' || !pointId || !context.hasEntity(pointId)) { - return addPoint(); - } + function nodesWays() { + var onClick = function() { continueTo(clickTownHall); }; - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + reveal('#surface', t('intro.navigation.nodes_ways'), + { buttonText: t('intro.ok'), buttonCallback: onClick } + ); - d3_select('.preset-search-input') - .on('keydown.intro', null) - .on('keyup.intro', checkPresetSearch); + context.map().on('drawn.intro', function() { + reveal('#surface', t('intro.navigation.nodes_ways'), + { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick } + ); + }); - reveal('.preset-search-input', - t('intro.points.search_cafe', { preset: cafePreset.name() }) - ); + function continueTo(nextStep) { + context.map().on('drawn.intro', null); + nextStep(); + } + } - context.on('enter.intro', function(mode) { - if (!pointId || !context.hasEntity(pointId)) { - return continueTo(addPoint); - } + function clickTownHall() { + context.enter(modeBrowse(context)); + context.history().reset('initial'); - var ids = context.selectedIDs(); - if (mode.id !== 'select' || !ids.length || ids[0] !== pointId) { - // keep the user's point selected.. - context.enter(modeSelect(context, [pointId])); + reveal(null, null, { duration: 0 }); + context.map().zoomEase(19, 500); - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + timeout(function() { + var entity = context.hasEntity(hallId); + if (!entity) return; + context.map().centerEase(entity.loc, 500); - d3_select('.preset-search-input') - .on('keydown.intro', null) - .on('keyup.intro', checkPresetSearch); + timeout(function() { + var entity = context.hasEntity(hallId); + if (!entity) return; + var box = pointBox(entity.loc, context); + reveal(box, t('intro.navigation.click_townhall')); - reveal('.preset-search-input', - t('intro.points.search_cafe', { preset: cafePreset.name() }) - ); + context.map().on('move.intro drawn.intro', function() { + var entity = context.hasEntity(hallId); + if (!entity) return; + var box = pointBox(entity.loc, context); + reveal(box, t('intro.navigation.click_townhall'), { duration: 0 }); + }); - context.history().on('change.intro', null); - } - }); + context.on('enter.intro', function() { + if (isTownHallSelected()) continueTo(selectedTownHall); + }); + }, 550); // after centerEase - function checkPresetSearch() { - var first = d3_select('.preset-list-item:first-child'); + }, 550); // after zoomEase - if (first.classed('preset-amenity-cafe')) { - d3_select('.preset-search-input') - .on('keydown.intro', eventCancel, true) - .on('keyup.intro', null); + context.history().on('change.intro', function() { + if (!context.hasEntity(hallId)) { + continueTo(clickTownHall); + } + }); - reveal(first.select('.preset-list-button').node(), - t('intro.points.choose_cafe', { preset: cafePreset.name() }), - { duration: 300 } - ); + function continueTo(nextStep) { + context.on('enter.intro', null); + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - context.history().on('change.intro', function() { - continueTo(aboutFeatureEditor); - }); - } - } - function continueTo(nextStep) { - context.on('enter.intro', null); - context.history().on('change.intro', null); - d3_select('.inspector-wrap').on('wheel.intro', null); - d3_select('.preset-search-input').on('keydown.intro keyup.intro', null); - nextStep(); - } - } + function selectedTownHall() { + if (!isTownHallSelected()) return clickTownHall(); + var entity = context.hasEntity(hallId); + if (!entity) return clickTownHall(); - function aboutFeatureEditor() { - if (context.mode().id !== 'select' || !pointId || !context.hasEntity(pointId)) { - return addPoint(); - } + var box = pointBox(entity.loc, context); + var onClick = function() { continueTo(editorTownHall); }; - timeout(function() { - reveal('.entity-editor-pane', t('intro.points.feature_editor'), { - tooltipClass: 'intro-points-describe', - buttonText: t('intro.ok'), - buttonCallback: function() { continueTo(addName); } - }); - }, 400); + reveal(box, t('intro.navigation.selected_townhall'), + { buttonText: t('intro.ok'), buttonCallback: onClick } + ); - context.on('exit.intro', function() { - // if user leaves select mode here, just continue with the tutorial. - continueTo(reselectPoint); - }); + context.map().on('move.intro drawn.intro', function() { + var entity = context.hasEntity(hallId); + if (!entity) return; + var box = pointBox(entity.loc, context); + reveal(box, t('intro.navigation.selected_townhall'), + { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick } + ); + }); - function continueTo(nextStep) { - context.on('exit.intro', null); - nextStep(); - } - } + context.history().on('change.intro', function() { + if (!context.hasEntity(hallId)) { + continueTo(clickTownHall); + } + }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - function addName() { - if (context.mode().id !== 'select' || !pointId || !context.hasEntity(pointId)) { - return addPoint(); - } - // reset pane, in case user happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '0%'); - - timeout(function() { - // It's possible for the user to add a name in a previous step.. - // If so, don't tell them to add the name in this step. - // Give them an OK button instead. - var entity = context.entity(pointId); - if (entity.tags.name) { - var tooltip = reveal('.entity-editor-pane', t('intro.points.add_name'), { - tooltipClass: 'intro-points-describe', - buttonText: t('intro.ok'), - buttonCallback: function() { continueTo(addCloseEditor); } - }); - tooltip.select('.instruction').style('display', 'none'); + function editorTownHall() { + if (!isTownHallSelected()) return clickTownHall(); - } else { - reveal('.entity-editor-pane', t('intro.points.add_name'), - { tooltipClass: 'intro-points-describe' } - ); - } - }, 400); + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - context.history().on('change.intro', function() { - continueTo(addCloseEditor); - }); + var onClick = function() { continueTo(presetTownHall); }; - context.on('exit.intro', function() { - // if user leaves select mode here, just continue with the tutorial. - continueTo(reselectPoint); - }); + reveal('.entity-editor-pane', + t('intro.navigation.editor_townhall'), + { buttonText: t('intro.ok'), buttonCallback: onClick } + ); - function continueTo(nextStep) { - context.on('exit.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + context.on('exit.intro', function() { + continueTo(clickTownHall); + }); + context.history().on('change.intro', function() { + if (!context.hasEntity(hallId)) { + continueTo(clickTownHall); + } + }); - function addCloseEditor() { - // reset pane, in case user happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '0%'); + function continueTo(nextStep) { + context.on('exit.intro', null); + context.history().on('change.intro', null); + select('.inspector-wrap').on('wheel.intro', null); + nextStep(); + } + } - var selector$$1 = '.entity-editor-pane button.preset-close svg use'; - var href = d3_select(selector$$1).attr('href') || '#icon-close'; - context.on('exit.intro', function() { - continueTo(reselectPoint); - }); + function presetTownHall() { + if (!isTownHallSelected()) return clickTownHall(); - reveal('.entity-editor-pane', - t('intro.points.add_close', { button: icon(href, 'pre-text') }) - ); + // reset pane, in case user happened to change it.. + select('.inspector-wrap .panewrap').style('right', '0%'); + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - function continueTo(nextStep) { - context.on('exit.intro', null); - nextStep(); - } - } + // preset match, in case the user happened to change it. + var entity = context.entity(context.selectedIDs()[0]); + var preset = context.presets().match(entity, context.graph()); + var onClick = function() { continueTo(fieldsTownHall); }; - function reselectPoint() { - if (!pointId) return chapter.restart(); - var entity = context.hasEntity(pointId); - if (!entity) return chapter.restart(); + context.on('exit.intro', function() { + continueTo(clickTownHall); + }); - // make sure it's still a cafe, in case user somehow changed it.. - var oldPreset = context.presets().match(entity, context.graph()); - context.replace(actionChangePreset(pointId, oldPreset, cafePreset)); + context.history().on('change.intro', function() { + if (!context.hasEntity(hallId)) { + continueTo(clickTownHall); + } + }); - context.enter(modeBrowse(context)); + reveal('.inspector-body .preset-list-item.inspector-inner', + t('intro.navigation.preset_townhall', { preset: preset.name() }), + { buttonText: t('intro.ok'), buttonCallback: onClick } + ); - var msec = transitionTime(entity.loc, context.map().center()); - if (msec) { reveal(null, null, { duration: 0 }); } - context.map().centerEase(entity.loc, msec); + function continueTo(nextStep) { + context.on('exit.intro', null); + context.history().on('change.intro', null); + select('.inspector-wrap').on('wheel.intro', null); + nextStep(); + } + } - timeout(function() { - var box = pointBox(entity.loc, context); - reveal(box, t('intro.points.reselect'), { duration: 600 }); - timeout(function() { - context.map().on('move.intro drawn.intro', function() { - var entity = context.hasEntity(pointId); - if (!entity) return chapter.restart(); - var box = pointBox(entity.loc, context); - reveal(box, t('intro.points.reselect'), { duration: 0 }); - }); - }, 600); // after reveal.. + function fieldsTownHall() { + if (!isTownHallSelected()) return clickTownHall(); - context.on('enter.intro', function(mode) { - if (mode.id !== 'select') return; - continueTo(updatePoint); - }); + // reset pane, in case user happened to change it.. + select('.inspector-wrap .panewrap').style('right', '0%'); + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - }, msec + 100); + var onClick = function() { continueTo(closeTownHall); }; - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + reveal('.inspector-body .preset-editor', + t('intro.navigation.fields_townhall'), + { buttonText: t('intro.ok'), buttonCallback: onClick } + ); + context.on('exit.intro', function() { + continueTo(clickTownHall); + }); - function updatePoint() { - if (context.mode().id !== 'select' || !pointId || !context.hasEntity(pointId)) { - return continueTo(reselectPoint); - } + context.history().on('change.intro', function() { + if (!context.hasEntity(hallId)) { + continueTo(clickTownHall); + } + }); - // reset pane, in case user happened to untag the point.. - d3_select('.inspector-wrap .panewrap').style('right', '0%'); + function continueTo(nextStep) { + context.on('exit.intro', null); + context.history().on('change.intro', null); + select('.inspector-wrap').on('wheel.intro', null); + nextStep(); + } + } - context.on('exit.intro', function() { - continueTo(reselectPoint); - }); - context.history().on('change.intro', function() { - continueTo(updateCloseEditor); - }); + function closeTownHall() { + if (!isTownHallSelected()) return clickTownHall(); - timeout(function() { - reveal('.entity-editor-pane', t('intro.points.update'), - { tooltipClass: 'intro-points-describe' } - ); - }, 400); + var selector$$1 = '.entity-editor-pane button.preset-close svg use'; + var href = select(selector$$1).attr('href') || '#icon-close'; - function continueTo(nextStep) { - context.on('exit.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + reveal('.entity-editor-pane', + t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') }) + ); + context.on('exit.intro', function() { + continueTo(searchStreet); + }); - function updateCloseEditor() { - if (context.mode().id !== 'select' || !pointId || !context.hasEntity(pointId)) { - return continueTo(reselectPoint); - } + context.history().on('change.intro', function() { + // update the close icon in the tooltip if the user edits something. + var selector$$1 = '.entity-editor-pane button.preset-close svg use'; + var href = select(selector$$1).attr('href') || '#icon-close'; - // reset pane, in case user happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '0%'); + reveal('.entity-editor-pane', + t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') }), + { duration: 0 } + ); + }); - context.on('exit.intro', function() { - continueTo(rightClickPoint); - }); + function continueTo(nextStep) { + context.on('exit.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - timeout(function() { - reveal('.entity-editor-pane', - t('intro.points.update_close', { button: icon('#icon-apply', 'pre-text') }) - ); - }, 500); - function continueTo(nextStep) { - context.on('exit.intro', null); - nextStep(); - } - } + function searchStreet() { + context.enter(modeBrowse(context)); + context.history().reset('initial'); // ensure spring street exists + var msec = transitionTime(springStreet, context.map().center()); + if (msec) { reveal(null, null, { duration: 0 }); } + context.map().zoom(19).centerEase(springStreet, msec); // ..and user can see it - function rightClickPoint() { - if (!pointId) return chapter.restart(); - var entity = context.hasEntity(pointId); - if (!entity) return chapter.restart(); + timeout(function() { + reveal('.search-header input', + t('intro.navigation.search_street', { name: t('intro.graph.name.spring-street') }) + ); - context.enter(modeBrowse(context)); + select('.search-header input') + .on('keyup.intro', checkSearchResult); + }, msec + 100); + } - var box = pointBox(entity.loc, context); - reveal(box, t('intro.points.rightclick'), { duration: 600 }); - timeout(function() { - context.map().on('move.intro drawn.intro', function() { - var entity = context.hasEntity(pointId); - if (!entity) return chapter.restart(); - var box = pointBox(entity.loc, context); - reveal(box, t('intro.points.rightclick'), { duration: 0 }); - }); - }, 600); // after reveal - - context.on('enter.intro', function(mode) { - if (mode.id !== 'select') return; - var ids = context.selectedIDs(); - if (ids.length !== 1 || ids[0] !== pointId) return; - - timeout(function() { - var node = selectMenuItem('delete').node(); - if (!node) return; - continueTo(enterDelete); - }, 300); // after menu visible - }); + function checkSearchResult() { + var first = select('.feature-list-item:nth-child(0n+2)'), // skip "No Results" item + firstName = first.select('.entity-name'), + name = t('intro.graph.name.spring-street'); - function continueTo(nextStep) { - context.on('enter.intro', null); - context.map().on('move.intro drawn.intro', null); - nextStep(); - } - } + if (!firstName.empty() && firstName.text() === name) { + reveal(first.node(), + t('intro.navigation.choose_street', { name: name }), + { duration: 300 } + ); + context.on('exit.intro', function() { + continueTo(selectedStreet); + }); - function enterDelete() { - if (!pointId) return chapter.restart(); - var entity = context.hasEntity(pointId); - if (!entity) return chapter.restart(); + select('.search-header input') + .on('keydown.intro', eventCancel, true) + .on('keyup.intro', null); + } - var node = selectMenuItem('delete').node(); - if (!node) { return continueTo(rightClickPoint); } + function continueTo(nextStep) { + context.on('exit.intro', null); + select('.search-header input') + .on('keydown.intro', null) + .on('keyup.intro', null); + nextStep(); + } + } - revealEditMenu(entity.loc, - t('intro.points.delete', { button: icon('#operation-delete', 'pre-text') }) - ); - timeout(function() { - context.map().on('move.intro drawn.intro', function() { - revealEditMenu(entity.loc, - t('intro.points.delete', { button: icon('#operation-delete', 'pre-text') }), - { duration: 0} - ); - }); - }, 300); // after menu visible + function selectedStreet() { + if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) { + return searchStreet(); + } - context.on('exit.intro', function() { - if (!pointId) return chapter.restart(); - var entity = context.hasEntity(pointId); - if (entity) return continueTo(rightClickPoint); // point still exists - }); + var onClick = function() { continueTo(editorStreet); }; + var entity = context.entity(springStreetEndId); + var box = pointBox(entity.loc, context); + box.height = 500; - context.history().on('change.intro', function(changed) { - if (changed.deleted().length) { - continueTo(undo); - } - }); + reveal(box, + t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }), + { duration: 600, buttonText: t('intro.ok'), buttonCallback: onClick } + ); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - context.on('exit.intro', null); - nextStep(); - } - } + timeout(function() { + context.map().on('move.intro drawn.intro', function() { + var entity = context.hasEntity(springStreetEndId); + if (!entity) return; + var box = pointBox(entity.loc, context); + box.height = 500; + reveal(box, + t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }), + { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick } + ); + }); + }, 600); // after reveal. + + context.on('enter.intro', function(mode) { + if (!context.hasEntity(springStreetId)) { + return continueTo(searchStreet); + } + var ids = context.selectedIDs(); + if (mode.id !== 'select' || !ids.length || ids[0] !== springStreetId) { + // keep Spring Street selected.. + context.enter(modeSelect(context, [springStreetId])); + } + }); + context.history().on('change.intro', function() { + if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) { + timeout(function() { + continueTo(searchStreet); + }, 300); // after any transition (e.g. if user deleted intersection) + } + }); - function undo() { - context.history().on('change.intro', function() { - continueTo(play); - }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - var iconName = '#icon-' + (textDirection === 'rtl' ? 'redo' : 'undo'); - reveal('#bar button.undo-button', - t('intro.points.undo', { button: icon(iconName, 'pre-text') }) - ); - function continueTo(nextStep) { - context.history().on('change.intro', null); - nextStep(); - } - } + function editorStreet() { + var selector$$1 = '.entity-editor-pane button.preset-close svg use'; + var href = select(selector$$1).attr('href') || '#icon-close'; + reveal('.entity-editor-pane', + t('intro.navigation.editor_street', { + button: icon(href, 'pre-text'), + field1: onewayField.label(), + field2: maxspeedField.label() + }) + ); - function play() { - dispatch$$1.call('done'); - reveal('#id-container', - t('intro.points.play', { next: t('intro.areas.title') }), { - tooltipBox: '.intro-nav-wrap .chapter-area', - buttonText: t('intro.ok'), - buttonCallback: function() { reveal('#id-container'); } - } - ); - } + context.on('exit.intro', function() { + continueTo(play); + }); + context.history().on('change.intro', function() { + // update the close icon in the tooltip if the user edits something. + var selector$$1 = '.entity-editor-pane button.preset-close svg use'; + var href = select(selector$$1).attr('href') || '#icon-close'; + + reveal('.entity-editor-pane', + t('intro.navigation.editor_street', { + button: icon(href, 'pre-text'), + field1: onewayField.label().toLowerCase(), + field2: maxspeedField.label().toLowerCase() + }), { duration: 0 } + ); + }); - chapter.enter = function() { - addPoint(); - }; + function continueTo(nextStep) { + context.on('exit.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - chapter.exit = function() { - timeouts.forEach(window.clearTimeout); - context.on('enter.intro exit.intro', null); - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); - d3_select('.preset-search-input').on('keydown.intro keyup.intro', null); - }; + function play() { + dispatch$$1.call('done'); + reveal('#id-container', + t('intro.navigation.play', { next: t('intro.points.title') }), { + tooltipBox: '.intro-nav-wrap .chapter-point', + buttonText: t('intro.ok'), + buttonCallback: function() { reveal('#id-container'); } + } + ); + } - chapter.restart = function() { - chapter.exit(); - chapter.enter(); - }; + chapter.enter = function() { + dragMap(); + }; - return utilRebind(chapter, dispatch$$1, 'on'); -} + chapter.exit = function() { + timeouts.forEach(window.clearTimeout); + context.on('enter.intro exit.intro', null); + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + select('.inspector-wrap').on('wheel.intro', null); + select('.search-header input').on('keydown.intro keyup.intro', null); + }; -function uiIntroArea(context, reveal) { - var dispatch$$1 = dispatch('done'), - playground = [-85.63552, 41.94159], - playgroundPreset = context.presets().item('leisure/playground'), - descriptionField = context.presets().field('description'), - timeouts = [], - areaId; + chapter.restart = function() { + chapter.exit(); + chapter.enter(); + }; - var chapter = { - title: 'intro.areas.title' - }; + return utilRebind(chapter, dispatch$$1, 'on'); + } - function timeout(f, t$$1) { - timeouts.push(window.setTimeout(f, t$$1)); - } + function uiIntroPoint(context, reveal) { + var dispatch$$1 = dispatch('done'), + timeouts = [], + intersection = [-85.63279, 41.94394], + building = [-85.632422, 41.944045], + cafePreset = context.presets().item('amenity/cafe'), + pointId = null; - function eventCancel() { - event.stopPropagation(); - event.preventDefault(); - } + var chapter = { + title: 'intro.points.title' + }; - function revealPlayground(center, text, options) { - var padding = 180 * Math.pow(2, context.map().zoom() - 19.5); - var box = pad$1(center, padding, context); - reveal(box, text, options); - } + function timeout(f, t$$1) { + timeouts.push(window.setTimeout(f, t$$1)); + } - function addArea() { - context.enter(modeBrowse(context)); - context.history().reset('initial'); - areaId = null; + function revealEditMenu(loc, text, options) { + var rect = context.surfaceRect(); + var point$$1 = context.curtainProjection(loc); + var pad = 40; + var width = 250 + (2 * pad); + var height = 250; + var startX = rect.left + point$$1[0]; + var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad); + var box = { + left: left, + top: point$$1[1] + rect.top - 60, + width: width, + height: height + }; + reveal(box, text, options); + } - var msec = transitionTime(playground, context.map().center()); - if (msec) { reveal(null, null, { duration: 0 }); } - context.map().zoom(19).centerEase(playground, msec); - timeout(function() { - var tooltip = reveal('button.add-area', - t('intro.areas.add_playground', { button: icon('#icon-area', 'pre-text') })); + function eventCancel() { + event.stopPropagation(); + event.preventDefault(); + } - tooltip.selectAll('.tooltip-inner') - .insert('svg', 'span') - .attr('class', 'tooltip-illustration') - .append('use') - .attr('xlink:href', '#landuse-images'); - context.on('enter.intro', function(mode) { - if (mode.id !== 'add-area') return; - continueTo(startPlayground); - }); - }, msec + 100); + function addPoint() { + context.enter(modeBrowse(context)); + context.history().reset('initial'); - function continueTo(nextStep) { - context.on('enter.intro', null); - nextStep(); - } - } + var msec = transitionTime(intersection, context.map().center()); + if (msec) { reveal(null, null, { duration: 0 }); } + context.map().zoom(19).centerEase(intersection, msec); + timeout(function() { + var tooltip = reveal('button.add-point', + t('intro.points.add_point', { button: icon('#icon-point', 'pre-text') })); - function startPlayground() { - if (context.mode().id !== 'add-area') { - return chapter.restart(); - } + pointId = null; - areaId = null; - context.map().zoomEase(19.5, 500); + tooltip.selectAll('.tooltip-inner') + .insert('svg', 'span') + .attr('class', 'tooltip-illustration') + .append('use') + .attr('xlink:href', '#poi-images'); - timeout(function() { - revealPlayground(playground, - t('intro.areas.start_playground'), { duration: 250 } - ); + context.on('enter.intro', function(mode) { + if (mode.id !== 'add-point') return; + continueTo(placePoint); + }); + }, msec + 100); - timeout(function() { - context.map().on('move.intro drawn.intro', function() { - revealPlayground(playground, - t('intro.areas.start_playground'), { duration: 0 } - ); - }); - context.on('enter.intro', function(mode) { - if (mode.id !== 'draw-area') return chapter.restart(); - continueTo(continuePlayground); - }); - }, 250); // after reveal - - }, 550); // after easing - - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + function continueTo(nextStep) { + context.on('enter.intro', null); + nextStep(); + } + } - function continuePlayground() { - if (context.mode().id !== 'draw-area') { - return chapter.restart(); - } + function placePoint() { + if (context.mode().id !== 'add-point') { + return chapter.restart(); + } - areaId = null; - revealPlayground(playground, - t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }), - { duration: 250 } - ); + var pointBox$$1 = pad$1(building, 150, context); + reveal(pointBox$$1, t('intro.points.place_point')); - timeout(function() { - context.map().on('move.intro drawn.intro', function() { - revealPlayground(playground, - t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }), - { duration: 0 } - ); - }); - }, 250); // after reveal - - context.on('enter.intro', function(mode) { - if (mode.id === 'draw-area') { - var entity = context.hasEntity(context.selectedIDs()[0]); - if (entity && entity.nodes.length >= 6) { - return continueTo(finishPlayground); - } else { - return; - } - } else if (mode.id === 'select') { - areaId = context.selectedIDs()[0]; - return continueTo(searchPresets); - } else { - return chapter.restart(); - } - }); + context.map().on('move.intro drawn.intro', function() { + pointBox$$1 = pad$1(building, 150, context); + reveal(pointBox$$1, t('intro.points.place_point'), { duration: 0 }); + }); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + context.on('enter.intro', function(mode) { + if (mode.id !== 'select') return chapter.restart(); + pointId = context.mode().selectedIDs()[0]; + continueTo(searchPreset); + }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - function finishPlayground() { - if (context.mode().id !== 'draw-area') { - return chapter.restart(); - } - areaId = null; - revealPlayground(playground, - t('intro.areas.finish_playground'), { duration: 250 } - ); + function searchPreset() { + if (context.mode().id !== 'select' || !pointId || !context.hasEntity(pointId)) { + return addPoint(); + } - timeout(function() { - context.map().on('move.intro drawn.intro', function() { - revealPlayground(playground, - t('intro.areas.finish_playground'), { duration: 0 } - ); - }); - }, 250); // after reveal - - context.on('enter.intro', function(mode) { - if (mode.id === 'draw-area') { - return; - } else if (mode.id === 'select') { - areaId = context.selectedIDs()[0]; - return continueTo(searchPresets); - } else { - return chapter.restart(); - } - }); + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + select('.preset-search-input') + .on('keydown.intro', null) + .on('keyup.intro', checkPresetSearch); + reveal('.preset-search-input', + t('intro.points.search_cafe', { preset: cafePreset.name() }) + ); - function searchPresets() { - if (!areaId || !context.hasEntity(areaId)) { - return addArea(); - } - var ids = context.selectedIDs(); - if (context.mode().id !== 'select' || !ids.length || ids[0] !== areaId) { - context.enter(modeSelect(context, [areaId])); - } + context.on('enter.intro', function(mode) { + if (!pointId || !context.hasEntity(pointId)) { + return continueTo(addPoint); + } - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + var ids = context.selectedIDs(); + if (mode.id !== 'select' || !ids.length || ids[0] !== pointId) { + // keep the user's point selected.. + context.enter(modeSelect(context, [pointId])); - timeout(function() { - // reset pane, in case user somehow happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '-100%'); + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - d3_select('.preset-search-input') - .on('keydown.intro', null) - .on('keyup.intro', checkPresetSearch); + select('.preset-search-input') + .on('keydown.intro', null) + .on('keyup.intro', checkPresetSearch); - reveal('.preset-search-input', - t('intro.areas.search_playground', { preset: playgroundPreset.name() }) - ); - }, 400); // after preset list pane visible.. + reveal('.preset-search-input', + t('intro.points.search_cafe', { preset: cafePreset.name() }) + ); - context.on('enter.intro', function(mode) { - if (!areaId || !context.hasEntity(areaId)) { - return continueTo(addArea); - } + context.history().on('change.intro', null); + } + }); - var ids = context.selectedIDs(); - if (mode.id !== 'select' || !ids.length || ids[0] !== areaId) { - // keep the user's area selected.. - context.enter(modeSelect(context, [areaId])); - // reset pane, in case user somehow happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '-100%'); - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + function checkPresetSearch() { + var first = select('.preset-list-item:first-child'); - d3_select('.preset-search-input') - .on('keydown.intro', null) - .on('keyup.intro', checkPresetSearch); + if (first.classed('preset-amenity-cafe')) { + select('.preset-search-input') + .on('keydown.intro', eventCancel, true) + .on('keyup.intro', null); - reveal('.preset-search-input', - t('intro.areas.search_playground', { preset: playgroundPreset.name() }) - ); + reveal(first.select('.preset-list-button').node(), + t('intro.points.choose_cafe', { preset: cafePreset.name() }), + { duration: 300 } + ); - context.history().on('change.intro', null); - } - }); + context.history().on('change.intro', function() { + continueTo(aboutFeatureEditor); + }); + } + } - function checkPresetSearch() { - var first = d3_select('.preset-list-item:first-child'); + function continueTo(nextStep) { + context.on('enter.intro', null); + context.history().on('change.intro', null); + select('.inspector-wrap').on('wheel.intro', null); + select('.preset-search-input').on('keydown.intro keyup.intro', null); + nextStep(); + } + } - if (first.classed('preset-leisure-playground')) { - reveal(first.select('.preset-list-button').node(), - t('intro.areas.choose_playground', { preset: playgroundPreset.name() }), - { duration: 300 } - ); - d3_select('.preset-search-input') - .on('keydown.intro', eventCancel, true) - .on('keyup.intro', null); + function aboutFeatureEditor() { + if (context.mode().id !== 'select' || !pointId || !context.hasEntity(pointId)) { + return addPoint(); + } - context.history().on('change.intro', function() { - continueTo(clickAddField); - }); - } - } + timeout(function() { + reveal('.entity-editor-pane', t('intro.points.feature_editor'), { + tooltipClass: 'intro-points-describe', + buttonText: t('intro.ok'), + buttonCallback: function() { continueTo(addName); } + }); + }, 400); + + context.on('exit.intro', function() { + // if user leaves select mode here, just continue with the tutorial. + continueTo(reselectPoint); + }); - function continueTo(nextStep) { - d3_select('.inspector-wrap').on('wheel.intro', null); - context.on('enter.intro', null); - context.history().on('change.intro', null); - d3_select('.preset-search-input').on('keydown.intro keyup.intro', null); - nextStep(); - } - } + function continueTo(nextStep) { + context.on('exit.intro', null); + nextStep(); + } + } - function clickAddField() { - if (!areaId || !context.hasEntity(areaId)) { - return addArea(); - } - var ids = context.selectedIDs(); - if (context.mode().id !== 'select' || !ids.length || ids[0] !== areaId) { - return searchPresets(); - } + function addName() { + if (context.mode().id !== 'select' || !pointId || !context.hasEntity(pointId)) { + return addPoint(); + } - if (!d3_select('.form-field-description').empty()) { - return continueTo(describePlayground); - } + // reset pane, in case user happened to change it.. + select('.inspector-wrap .panewrap').style('right', '0%'); + + timeout(function() { + // It's possible for the user to add a name in a previous step.. + // If so, don't tell them to add the name in this step. + // Give them an OK button instead. + var entity = context.entity(pointId); + if (entity.tags.name) { + var tooltip = reveal('.entity-editor-pane', t('intro.points.add_name'), { + tooltipClass: 'intro-points-describe', + buttonText: t('intro.ok'), + buttonCallback: function() { continueTo(addCloseEditor); } + }); + tooltip.select('.instruction').style('display', 'none'); + + } else { + reveal('.entity-editor-pane', t('intro.points.add_name'), + { tooltipClass: 'intro-points-describe' } + ); + } + }, 400); + + context.history().on('change.intro', function() { + continueTo(addCloseEditor); + }); - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + context.on('exit.intro', function() { + // if user leaves select mode here, just continue with the tutorial. + continueTo(reselectPoint); + }); - timeout(function() { - // reset pane, in case user somehow happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '0%'); + function continueTo(nextStep) { + context.on('exit.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - // It's possible for the user to add a description in a previous step.. - // If they did this already, just continue to next step. - var entity = context.entity(areaId); - if (entity.tags.description) { - return continueTo(play); - } - // scroll "Add field" into view - var box = d3_select('.more-fields').node().getBoundingClientRect(); - if (box.top > 300) { - var pane = d3_select('.entity-editor-pane .inspector-body'); - var start = pane.node().scrollTop; - var end = start + (box.top - 300); - - pane - .transition() - .duration(250) - .tween('scroll.inspector', function() { - var node = this; - var i = d3_interpolateNumber(start, end); - return function(t$$1) { - node.scrollTop = i(t$$1); - }; - }); - } + function addCloseEditor() { + // reset pane, in case user happened to change it.. + select('.inspector-wrap .panewrap').style('right', '0%'); - timeout(function() { - reveal('.more-fields .combobox-input', - t('intro.areas.add_field'), - { duration: 300 } - ); + var selector$$1 = '.entity-editor-pane button.preset-close svg use'; + var href = select(selector$$1).attr('href') || '#icon-close'; - d3_select('.more-fields .combobox-input') - .on('click.intro', function() { - continueTo(chooseDescriptionField); - }); - }, 300); // after "Add Field" visible + context.on('exit.intro', function() { + continueTo(reselectPoint); + }); - }, 400); // after editor pane visible + reveal('.entity-editor-pane', + t('intro.points.add_close', { button: icon(href, 'pre-text') }) + ); - context.on('exit.intro', function() { - return continueTo(searchPresets); - }); + function continueTo(nextStep) { + context.on('exit.intro', null); + nextStep(); + } + } - function continueTo(nextStep) { - d3_select('.inspector-wrap').on('wheel.intro', null); - d3_select('.more-fields .combobox-input').on('click.intro', null); - context.on('exit.intro', null); - nextStep(); - } - } + function reselectPoint() { + if (!pointId) return chapter.restart(); + var entity = context.hasEntity(pointId); + if (!entity) return chapter.restart(); - function chooseDescriptionField() { - if (!areaId || !context.hasEntity(areaId)) { - return addArea(); - } - var ids = context.selectedIDs(); - if (context.mode().id !== 'select' || !ids.length || ids[0] !== areaId) { - return searchPresets(); - } + // make sure it's still a cafe, in case user somehow changed it.. + var oldPreset = context.presets().match(entity, context.graph()); + context.replace(actionChangePreset(pointId, oldPreset, cafePreset)); - if (!d3_select('.form-field-description').empty()) { - return continueTo(describePlayground); - } + context.enter(modeBrowse(context)); - // Make sure combobox is ready.. - if (d3_select('div.combobox').empty()) { - return continueTo(clickAddField); - } - // Watch for the combobox to go away.. - var watcher; - watcher = window.setInterval(function() { - if (d3_select('div.combobox').empty()) { - window.clearInterval(watcher); - timeout(function() { - if (d3_select('.form-field-description').empty()) { - continueTo(retryChooseDescription); - } else { - continueTo(describePlayground); - } - }, 300); // after description field added. - } - }, 300); + var msec = transitionTime(entity.loc, context.map().center()); + if (msec) { reveal(null, null, { duration: 0 }); } + context.map().centerEase(entity.loc, msec); - reveal('div.combobox', - t('intro.areas.choose_field', { field: descriptionField.label() }), - { duration: 300 } - ); + timeout(function() { + var box = pointBox(entity.loc, context); + reveal(box, t('intro.points.reselect'), { duration: 600 }); - context.on('exit.intro', function() { - return continueTo(searchPresets); - }); + timeout(function() { + context.map().on('move.intro drawn.intro', function() { + var entity = context.hasEntity(pointId); + if (!entity) return chapter.restart(); + var box = pointBox(entity.loc, context); + reveal(box, t('intro.points.reselect'), { duration: 0 }); + }); + }, 600); // after reveal.. - function continueTo(nextStep) { - if (watcher) window.clearInterval(watcher); - context.on('exit.intro', null); - nextStep(); - } - } + context.on('enter.intro', function(mode) { + if (mode.id !== 'select') return; + continueTo(updatePoint); + }); + }, msec + 100); - function describePlayground() { - if (!areaId || !context.hasEntity(areaId)) { - return addArea(); - } - var ids = context.selectedIDs(); - if (context.mode().id !== 'select' || !ids.length || ids[0] !== areaId) { - return searchPresets(); - } + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - // reset pane, in case user happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '0%'); - if (d3_select('.form-field-description').empty()) { - return continueTo(retryChooseDescription); - } + function updatePoint() { + if (context.mode().id !== 'select' || !pointId || !context.hasEntity(pointId)) { + return continueTo(reselectPoint); + } - context.on('exit.intro', function() { - continueTo(play); - }); + // reset pane, in case user happened to untag the point.. + select('.inspector-wrap .panewrap').style('right', '0%'); - reveal('.entity-editor-pane', - t('intro.areas.describe_playground', { button: icon('#icon-apply', 'pre-text') }), - { duration: 300 } - ); + context.on('exit.intro', function() { + continueTo(reselectPoint); + }); - function continueTo(nextStep) { - context.on('exit.intro', null); - nextStep(); - } - } + context.history().on('change.intro', function() { + continueTo(updateCloseEditor); + }); + timeout(function() { + reveal('.entity-editor-pane', t('intro.points.update'), + { tooltipClass: 'intro-points-describe' } + ); + }, 400); - function retryChooseDescription() { - if (!areaId || !context.hasEntity(areaId)) { - return addArea(); - } - var ids = context.selectedIDs(); - if (context.mode().id !== 'select' || !ids.length || ids[0] !== areaId) { - return searchPresets(); - } + function continueTo(nextStep) { + context.on('exit.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - // reset pane, in case user happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '0%'); - reveal('.entity-editor-pane', - t('intro.areas.retry_add_field', { field: descriptionField.label() }), { - buttonText: t('intro.ok'), - buttonCallback: function() { continueTo(clickAddField); } - }); + function updateCloseEditor() { + if (context.mode().id !== 'select' || !pointId || !context.hasEntity(pointId)) { + return continueTo(reselectPoint); + } - context.on('exit.intro', function() { - return continueTo(searchPresets); - }); + // reset pane, in case user happened to change it.. + select('.inspector-wrap .panewrap').style('right', '0%'); - function continueTo(nextStep) { - context.on('exit.intro', null); - nextStep(); - } - } + context.on('exit.intro', function() { + continueTo(rightClickPoint); + }); + timeout(function() { + reveal('.entity-editor-pane', + t('intro.points.update_close', { button: icon('#icon-apply', 'pre-text') }) + ); + }, 500); - function play() { - dispatch$$1.call('done'); - reveal('#id-container', - t('intro.areas.play', { next: t('intro.lines.title') }), { - tooltipBox: '.intro-nav-wrap .chapter-line', - buttonText: t('intro.ok'), - buttonCallback: function() { reveal('#id-container'); } - } - ); - } + function continueTo(nextStep) { + context.on('exit.intro', null); + nextStep(); + } + } - chapter.enter = function() { - addArea(); - }; + function rightClickPoint() { + if (!pointId) return chapter.restart(); + var entity = context.hasEntity(pointId); + if (!entity) return chapter.restart(); + context.enter(modeBrowse(context)); - chapter.exit = function() { - timeouts.forEach(window.clearTimeout); - context.on('enter.intro exit.intro', null); - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - d3_select('.inspector-wrap').on('wheel.intro', null); - d3_select('.preset-search-input').on('keydown.intro keyup.intro', null); - d3_select('.more-fields .combobox-input').on('click.intro', null); - }; + var box = pointBox(entity.loc, context); + reveal(box, t('intro.points.rightclick'), { duration: 600 }); + timeout(function() { + context.map().on('move.intro drawn.intro', function() { + var entity = context.hasEntity(pointId); + if (!entity) return chapter.restart(); + var box = pointBox(entity.loc, context); + reveal(box, t('intro.points.rightclick'), { duration: 0 }); + }); + }, 600); // after reveal - chapter.restart = function() { - chapter.exit(); - chapter.enter(); - }; + context.on('enter.intro', function(mode) { + if (mode.id !== 'select') return; + var ids = context.selectedIDs(); + if (ids.length !== 1 || ids[0] !== pointId) return; + timeout(function() { + var node = selectMenuItem('delete').node(); + if (!node) return; + continueTo(enterDelete); + }, 300); // after menu visible + }); - return utilRebind(chapter, dispatch$$1, 'on'); -} - -function uiIntroLine(context, reveal) { - var dispatch$$1 = dispatch('done'), - timeouts = [], - tulipRoadId = null, - flowerRoadId = 'w646', - tulipRoadStart = [-85.6297754121684, 41.95805253325314], - tulipRoadMidpoint = [-85.62975395449628, 41.95787501510204], - tulipRoadIntersection = [-85.62974496187628, 41.95742515554585], - roadCategory = context.presets().item('category-road'), - residentialPreset = context.presets().item('highway/residential'), - woodRoadId = 'w525', - woodRoadEndId = 'n2862', - woodRoadAddNode = [-85.62390110349587, 41.95397111462291], - woodRoadDragEndpoint = [-85.623867390213, 41.95466987786487], - woodRoadDragMidpoint = [-85.62386254803509, 41.95430395953872], - washingtonStreetId = 'w522', - twelfthAvenueId = 'w1', - eleventhAvenueEndId = 'n3550', - twelfthAvenueEndId = 'n5', - washingtonSegmentId = null, - eleventhAvenueEnd = context.entity(eleventhAvenueEndId).loc, - twelfthAvenueEnd = context.entity(twelfthAvenueEndId).loc, - deleteLinesLoc = [-85.6219395542764, 41.95228033922477], - twelfthAvenue = [-85.62219310052491, 41.952505413152956]; - - - var chapter = { - title: 'intro.lines.title' - }; + function continueTo(nextStep) { + context.on('enter.intro', null); + context.map().on('move.intro drawn.intro', null); + nextStep(); + } + } - function timeout(f, t$$1) { - timeouts.push(window.setTimeout(f, t$$1)); - } + function enterDelete() { + if (!pointId) return chapter.restart(); + var entity = context.hasEntity(pointId); + if (!entity) return chapter.restart(); + var node = selectMenuItem('delete').node(); + if (!node) { return continueTo(rightClickPoint); } - function eventCancel() { - event.stopPropagation(); - event.preventDefault(); - } + revealEditMenu(entity.loc, + t('intro.points.delete', { button: icon('#operation-delete', 'pre-text') }) + ); + timeout(function() { + context.map().on('move.intro drawn.intro', function() { + revealEditMenu(entity.loc, + t('intro.points.delete', { button: icon('#operation-delete', 'pre-text') }), + { duration: 0} + ); + }); + }, 300); // after menu visible + + context.on('exit.intro', function() { + if (!pointId) return chapter.restart(); + var entity = context.hasEntity(pointId); + if (entity) return continueTo(rightClickPoint); // point still exists + }); - function revealEditMenu(loc, text, options) { - var rect = context.surfaceRect(); - var point$$1 = context.curtainProjection(loc); - var pad = 40; - var width = 250 + (2 * pad); - var height = 350; - var startX = rect.left + point$$1[0]; - var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad); - var box = { - left: left, - top: point$$1[1] + rect.top - 60, - width: width, - height: height - }; - reveal(box, text, options); - } + context.history().on('change.intro', function(changed) { + if (changed.deleted().length) { + continueTo(undo); + } + }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + context.on('exit.intro', null); + nextStep(); + } + } - function addLine() { - context.enter(modeBrowse(context)); - context.history().reset('initial'); - var msec = transitionTime(tulipRoadStart, context.map().center()); - if (msec) { reveal(null, null, { duration: 0 }); } - context.map().zoom(18.5).centerEase(tulipRoadStart, msec); + function undo() { + context.history().on('change.intro', function() { + continueTo(play); + }); - timeout(function() { - var tooltip = reveal('button.add-line', - t('intro.lines.add_line', { button: icon('#icon-line', 'pre-text') })); + var iconName = '#icon-' + (textDirection === 'rtl' ? 'redo' : 'undo'); + reveal('#bar button.undo-button', + t('intro.points.undo', { button: icon(iconName, 'pre-text') }) + ); - tooltip.selectAll('.tooltip-inner') - .insert('svg', 'span') - .attr('class', 'tooltip-illustration') - .append('use') - .attr('xlink:href', '#feature-images'); + function continueTo(nextStep) { + context.history().on('change.intro', null); + nextStep(); + } + } - context.on('enter.intro', function(mode) { - if (mode.id !== 'add-line') return; - continueTo(startLine); - }); - }, msec + 100); - function continueTo(nextStep) { - context.on('enter.intro', null); - nextStep(); - } - } + function play() { + dispatch$$1.call('done'); + reveal('#id-container', + t('intro.points.play', { next: t('intro.areas.title') }), { + tooltipBox: '.intro-nav-wrap .chapter-area', + buttonText: t('intro.ok'), + buttonCallback: function() { reveal('#id-container'); } + } + ); + } - function startLine() { - if (context.mode().id !== 'add-line') { - return chapter.restart(); - } + chapter.enter = function() { + addPoint(); + }; - tulipRoadId = null; - var padding = 70 * Math.pow(2, context.map().zoom() - 18); - var box = pad$1(tulipRoadStart, padding, context); - box.height = box.height + 100; - reveal(box, t('intro.lines.start_line')); + chapter.exit = function() { + timeouts.forEach(window.clearTimeout); + context.on('enter.intro exit.intro', null); + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + select('.inspector-wrap').on('wheel.intro', eventCancel); + select('.preset-search-input').on('keydown.intro keyup.intro', null); + }; - context.map().on('move.intro drawn.intro', function() { - padding = 70 * Math.pow(2, context.map().zoom() - 18); - box = pad$1(tulipRoadStart, padding, context); - box.height = box.height + 100; - reveal(box, t('intro.lines.start_line'), { duration: 0 }); - }); - context.on('enter.intro', function(mode) { - if (mode.id !== 'draw-line') return chapter.restart(); - continueTo(drawLine); - }); + chapter.restart = function() { + chapter.exit(); + chapter.enter(); + }; - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + return utilRebind(chapter, dispatch$$1, 'on'); + } - function drawLine() { - if (context.mode().id !== 'draw-line') { - return chapter.restart(); - } + function uiIntroArea(context, reveal) { + var dispatch$$1 = dispatch('done'), + playground = [-85.63552, 41.94159], + playgroundPreset = context.presets().item('leisure/playground'), + descriptionField = context.presets().field('description'), + timeouts = [], + areaId; - tulipRoadId = context.mode().selectedIDs()[0]; - context.map().centerEase(tulipRoadMidpoint, 500); - timeout(function() { - var padding = 200 * Math.pow(2, context.map().zoom() - 18.5); - var box = pad$1(tulipRoadMidpoint, padding, context); - box.height = box.height * 2; - reveal(box, - t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') }) - ); + var chapter = { + title: 'intro.areas.title' + }; - context.map().on('move.intro drawn.intro', function() { - padding = 200 * Math.pow(2, context.map().zoom() - 18.5); - box = pad$1(tulipRoadMidpoint, padding, context); - box.height = box.height * 2; - reveal(box, - t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') }), - { duration: 0 } - ); - }); - }, 550); // after easing.. - context.history().on('change.intro', function() { - var entity = tulipRoadId && context.hasEntity(tulipRoadId); - if (!entity) return chapter.restart(); + function timeout(f, t$$1) { + timeouts.push(window.setTimeout(f, t$$1)); + } - if (isLineConnected()) { - continueTo(continueLine); - } - }); - context.on('enter.intro', function(mode) { - if (mode.id === 'draw-line') - return; - else if (mode.id === 'select') { - continueTo(retryIntersect); - return; - } - else - return chapter.restart(); - }); + function eventCancel() { + event.stopPropagation(); + event.preventDefault(); + } - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + function revealPlayground(center, text, options) { + var padding = 180 * Math.pow(2, context.map().zoom() - 19.5); + var box = pad$1(center, padding, context); + reveal(box, text, options); + } - function isLineConnected() { - var entity = tulipRoadId && context.hasEntity(tulipRoadId); - if (!entity) return false; - var drawNodes = context.graph().childNodes(entity); - return some(drawNodes, function(node) { - return some(context.graph().parentWays(node), function(parent) { - return parent.id === flowerRoadId; - }); - }); - } + function addArea() { + context.enter(modeBrowse(context)); + context.history().reset('initial'); + areaId = null; + var msec = transitionTime(playground, context.map().center()); + if (msec) { reveal(null, null, { duration: 0 }); } + context.map().zoom(19).centerEase(playground, msec); - function retryIntersect() { - d3_select(window).on('mousedown.intro', eventCancel, true); + timeout(function() { + var tooltip = reveal('button.add-area', + t('intro.areas.add_playground', { button: icon('#icon-area', 'pre-text') })); - var box = pad$1(tulipRoadIntersection, 80, context); - reveal(box, - t('intro.lines.retry_intersect', { name: t('intro.graph.name.flower-street') }) - ); + tooltip.selectAll('.tooltip-inner') + .insert('svg', 'span') + .attr('class', 'tooltip-illustration') + .append('use') + .attr('xlink:href', '#landuse-images'); - timeout(chapter.restart, 3000); - } + context.on('enter.intro', function(mode) { + if (mode.id !== 'add-area') return; + continueTo(startPlayground); + }); + }, msec + 100); + function continueTo(nextStep) { + context.on('enter.intro', null); + nextStep(); + } + } - function continueLine() { - if (context.mode().id !== 'draw-line') return chapter.restart(); - var entity = tulipRoadId && context.hasEntity(tulipRoadId); - if (!entity) return chapter.restart(); - context.map().centerEase(tulipRoadIntersection, 500); + function startPlayground() { + if (context.mode().id !== 'add-area') { + return chapter.restart(); + } - reveal('#surface', t('intro.lines.continue_line')); + areaId = null; + context.map().zoomEase(19.5, 500); + + timeout(function() { + revealPlayground(playground, + t('intro.areas.start_playground'), { duration: 250 } + ); + + timeout(function() { + context.map().on('move.intro drawn.intro', function() { + revealPlayground(playground, + t('intro.areas.start_playground'), { duration: 0 } + ); + }); + context.on('enter.intro', function(mode) { + if (mode.id !== 'draw-area') return chapter.restart(); + continueTo(continuePlayground); + }); + }, 250); // after reveal + + }, 550); // after easing + + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - context.on('enter.intro', function(mode) { - if (mode.id === 'draw-line') - return; - else if (mode.id === 'select') - return continueTo(chooseCategoryRoad); - else - return chapter.restart(); - }); - function continueTo(nextStep) { - context.on('enter.intro', null); - nextStep(); - } - } + function continuePlayground() { + if (context.mode().id !== 'draw-area') { + return chapter.restart(); + } + areaId = null; + revealPlayground(playground, + t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }), + { duration: 250 } + ); - function chooseCategoryRoad() { - if (context.mode().id !== 'select') { - return chapter.restart(); - } + timeout(function() { + context.map().on('move.intro drawn.intro', function() { + revealPlayground(playground, + t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }), + { duration: 0 } + ); + }); + }, 250); // after reveal + + context.on('enter.intro', function(mode) { + if (mode.id === 'draw-area') { + var entity = context.hasEntity(context.selectedIDs()[0]); + if (entity && entity.nodes.length >= 6) { + return continueTo(finishPlayground); + } else { + return; + } + } else if (mode.id === 'select') { + areaId = context.selectedIDs()[0]; + return continueTo(searchPresets); + } else { + return chapter.restart(); + } + }); - context.on('exit.intro', function() { - return chapter.restart(); - }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - var button = d3_select('.preset-category-road .preset-list-button'); - if (button.empty()) return chapter.restart(); - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + function finishPlayground() { + if (context.mode().id !== 'draw-area') { + return chapter.restart(); + } - timeout(function() { - // reset pane, in case user somehow happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '-100%'); + areaId = null; + revealPlayground(playground, + t('intro.areas.finish_playground'), { duration: 250 } + ); - reveal(button.node(), - t('intro.lines.choose_category_road', { category: roadCategory.name() }) - ); + timeout(function() { + context.map().on('move.intro drawn.intro', function() { + revealPlayground(playground, + t('intro.areas.finish_playground'), { duration: 0 } + ); + }); + }, 250); // after reveal + + context.on('enter.intro', function(mode) { + if (mode.id === 'draw-area') { + return; + } else if (mode.id === 'select') { + areaId = context.selectedIDs()[0]; + return continueTo(searchPresets); + } else { + return chapter.restart(); + } + }); - button.on('click.intro', function() { - continueTo(choosePresetResidential); - }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - }, 400); // after editor pane visible - function continueTo(nextStep) { - d3_select('.inspector-wrap').on('wheel.intro', null); - d3_select('.preset-list-button').on('click.intro', null); - context.on('exit.intro', null); - nextStep(); - } - } + function searchPresets() { + if (!areaId || !context.hasEntity(areaId)) { + return addArea(); + } + var ids = context.selectedIDs(); + if (context.mode().id !== 'select' || !ids.length || ids[0] !== areaId) { + context.enter(modeSelect(context, [areaId])); + } + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - function choosePresetResidential() { - if (context.mode().id !== 'select') { - return chapter.restart(); - } + timeout(function() { + // reset pane, in case user somehow happened to change it.. + select('.inspector-wrap .panewrap').style('right', '-100%'); - context.on('exit.intro', function() { - return chapter.restart(); - }); + select('.preset-search-input') + .on('keydown.intro', null) + .on('keyup.intro', checkPresetSearch); - var subgrid = d3_select('.preset-category-road .subgrid'); - if (subgrid.empty()) return chapter.restart(); + reveal('.preset-search-input', + t('intro.areas.search_playground', { preset: playgroundPreset.name() }) + ); + }, 400); // after preset list pane visible.. - subgrid.selectAll(':not(.preset-highway-residential) .preset-list-button') - .on('click.intro', function() { - continueTo(retryPresetResidential); - }); + context.on('enter.intro', function(mode) { + if (!areaId || !context.hasEntity(areaId)) { + return continueTo(addArea); + } - subgrid.selectAll('.preset-highway-residential .preset-list-button') - .on('click.intro', function() { - continueTo(nameRoad); - }); + var ids = context.selectedIDs(); + if (mode.id !== 'select' || !ids.length || ids[0] !== areaId) { + // keep the user's area selected.. + context.enter(modeSelect(context, [areaId])); - timeout(function() { - reveal(subgrid.node(), - t('intro.lines.choose_preset_residential', { preset: residentialPreset.name() }), - { tooltipBox: '.preset-highway-residential .preset-list-button', duration: 300 } - ); - }, 300); + // reset pane, in case user somehow happened to change it.. + select('.inspector-wrap .panewrap').style('right', '-100%'); + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - function continueTo(nextStep) { - d3_select('.preset-list-button').on('click.intro', null); - context.on('exit.intro', null); - nextStep(); - } - } + select('.preset-search-input') + .on('keydown.intro', null) + .on('keyup.intro', checkPresetSearch); + reveal('.preset-search-input', + t('intro.areas.search_playground', { preset: playgroundPreset.name() }) + ); - // selected wrong road type - function retryPresetResidential() { - if (context.mode().id !== 'select') { - return chapter.restart(); - } + context.history().on('change.intro', null); + } + }); - context.on('exit.intro', function() { - return chapter.restart(); - }); + function checkPresetSearch() { + var first = select('.preset-list-item:first-child'); - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + if (first.classed('preset-leisure-playground')) { + reveal(first.select('.preset-list-button').node(), + t('intro.areas.choose_playground', { preset: playgroundPreset.name() }), + { duration: 300 } + ); - timeout(function() { - var button = d3_select('.entity-editor-pane .preset-list-button'); + select('.preset-search-input') + .on('keydown.intro', eventCancel, true) + .on('keyup.intro', null); - reveal(button.node(), - t('intro.lines.retry_preset_residential', { preset: residentialPreset.name() }) - ); + context.history().on('change.intro', function() { + continueTo(clickAddField); + }); + } + } - button.on('click.intro', function() { - continueTo(chooseCategoryRoad); - }); + function continueTo(nextStep) { + select('.inspector-wrap').on('wheel.intro', null); + context.on('enter.intro', null); + context.history().on('change.intro', null); + select('.preset-search-input').on('keydown.intro keyup.intro', null); + nextStep(); + } + } - }, 500); - function continueTo(nextStep) { - d3_select('.inspector-wrap').on('wheel.intro', null); - d3_select('.preset-list-button').on('click.intro', null); - context.on('exit.intro', null); - nextStep(); - } - } + function clickAddField() { + if (!areaId || !context.hasEntity(areaId)) { + return addArea(); + } + var ids = context.selectedIDs(); + if (context.mode().id !== 'select' || !ids.length || ids[0] !== areaId) { + return searchPresets(); + } + if (!select('.form-field-description').empty()) { + return continueTo(describePlayground); + } - function nameRoad() { - context.on('exit.intro', function() { - continueTo(didNameRoad); - }); + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); + + timeout(function() { + // reset pane, in case user somehow happened to change it.. + select('.inspector-wrap .panewrap').style('right', '0%'); + + // It's possible for the user to add a description in a previous step.. + // If they did this already, just continue to next step. + var entity = context.entity(areaId); + if (entity.tags.description) { + return continueTo(play); + } + + // scroll "Add field" into view + var box = select('.more-fields').node().getBoundingClientRect(); + if (box.top > 300) { + var pane = select('.entity-editor-pane .inspector-body'); + var start = pane.node().scrollTop; + var end = start + (box.top - 300); + + pane + .transition() + .duration(250) + .tween('scroll.inspector', function() { + var node = this; + var i = interpolateNumber(start, end); + return function(t$$1) { + node.scrollTop = i(t$$1); + }; + }); + } + + timeout(function() { + reveal('.more-fields .combobox-input', + t('intro.areas.add_field'), + { duration: 300 } + ); + + select('.more-fields .combobox-input') + .on('click.intro', function() { + continueTo(chooseDescriptionField); + }); + }, 300); // after "Add Field" visible + + }, 400); // after editor pane visible + + context.on('exit.intro', function() { + return continueTo(searchPresets); + }); - timeout(function() { - reveal('.entity-editor-pane', - t('intro.lines.name_road', { button: icon('#icon-apply', 'pre-text') }), - { tooltipClass: 'intro-lines-name_road' } - ); - }, 500); + function continueTo(nextStep) { + select('.inspector-wrap').on('wheel.intro', null); + select('.more-fields .combobox-input').on('click.intro', null); + context.on('exit.intro', null); + nextStep(); + } + } - function continueTo(nextStep) { - context.on('exit.intro', null); - nextStep(); - } - } + function chooseDescriptionField() { + if (!areaId || !context.hasEntity(areaId)) { + return addArea(); + } + var ids = context.selectedIDs(); + if (context.mode().id !== 'select' || !ids.length || ids[0] !== areaId) { + return searchPresets(); + } - function didNameRoad() { - context.history().checkpoint('doneAddLine'); + if (!select('.form-field-description').empty()) { + return continueTo(describePlayground); + } - timeout(function() { - reveal('#surface', t('intro.lines.did_name_road'), { - buttonText: t('intro.ok'), - buttonCallback: function() { continueTo(updateLine); } - }); - }, 500); + // Make sure combobox is ready.. + if (select('div.combobox').empty()) { + return continueTo(clickAddField); + } + // Watch for the combobox to go away.. + var watcher; + watcher = window.setInterval(function() { + if (select('div.combobox').empty()) { + window.clearInterval(watcher); + timeout(function() { + if (select('.form-field-description').empty()) { + continueTo(retryChooseDescription); + } else { + continueTo(describePlayground); + } + }, 300); // after description field added. + } + }, 300); + + reveal('div.combobox', + t('intro.areas.choose_field', { field: descriptionField.label() }), + { duration: 300 } + ); - function continueTo(nextStep) { - nextStep(); - } - } + context.on('exit.intro', function() { + return continueTo(searchPresets); + }); + function continueTo(nextStep) { + if (watcher) window.clearInterval(watcher); + context.on('exit.intro', null); + nextStep(); + } + } - function updateLine() { - context.history().reset('doneAddLine'); - if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { - return chapter.restart(); - } - var msec = transitionTime(woodRoadDragMidpoint, context.map().center()); - if (msec) { reveal(null, null, { duration: 0 }); } - context.map().zoom(19).centerEase(woodRoadDragMidpoint, msec); + function describePlayground() { + if (!areaId || !context.hasEntity(areaId)) { + return addArea(); + } + var ids = context.selectedIDs(); + if (context.mode().id !== 'select' || !ids.length || ids[0] !== areaId) { + return searchPresets(); + } - timeout(function() { - var padding = 250 * Math.pow(2, context.map().zoom() - 19); - var box = pad$1(woodRoadDragMidpoint, padding, context); - var advance = function() { continueTo(addNode); }; + // reset pane, in case user happened to change it.. + select('.inspector-wrap .panewrap').style('right', '0%'); - reveal(box, t('intro.lines.update_line'), - { buttonText: t('intro.ok'), buttonCallback: advance } - ); + if (select('.form-field-description').empty()) { + return continueTo(retryChooseDescription); + } - context.map().on('move.intro drawn.intro', function() { - var padding = 250 * Math.pow(2, context.map().zoom() - 19); - var box = pad$1(woodRoadDragMidpoint, padding, context); - reveal(box, t('intro.lines.update_line'), - { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance } - ); - }); - }, msec + 100); + context.on('exit.intro', function() { + continueTo(play); + }); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - nextStep(); - } - } + reveal('.entity-editor-pane', + t('intro.areas.describe_playground', { button: icon('#icon-apply', 'pre-text') }), + { duration: 300 } + ); + function continueTo(nextStep) { + context.on('exit.intro', null); + nextStep(); + } + } - function addNode() { - context.history().reset('doneAddLine'); - if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { - return chapter.restart(); - } - var padding = 40 * Math.pow(2, context.map().zoom() - 19); - var box = pad$1(woodRoadAddNode, padding, context); - reveal(box, t('intro.lines.add_node')); + function retryChooseDescription() { + if (!areaId || !context.hasEntity(areaId)) { + return addArea(); + } + var ids = context.selectedIDs(); + if (context.mode().id !== 'select' || !ids.length || ids[0] !== areaId) { + return searchPresets(); + } - context.map().on('move.intro drawn.intro', function() { - var padding = 40 * Math.pow(2, context.map().zoom() - 19); - var box = pad$1(woodRoadAddNode, padding, context); - reveal(box, t('intro.lines.add_node'), { duration: 0 }); - }); + // reset pane, in case user happened to change it.. + select('.inspector-wrap .panewrap').style('right', '0%'); - context.history().on('change.intro', function(changed) { - if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { - return continueTo(updateLine); - } - if (changed.created().length === 1) { - timeout(function() { continueTo(startDragEndpoint); }, 500); - } - }); + reveal('.entity-editor-pane', + t('intro.areas.retry_add_field', { field: descriptionField.label() }), { + buttonText: t('intro.ok'), + buttonCallback: function() { continueTo(clickAddField); } + }); - context.on('enter.intro', function(mode) { - if (mode.id !== 'select') { - continueTo(updateLine); - } - }); + context.on('exit.intro', function() { + return continueTo(searchPresets); + }); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + function continueTo(nextStep) { + context.on('exit.intro', null); + nextStep(); + } + } - function startDragEndpoint() { - if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { - return continueTo(updateLine); - } - var padding = 100 * Math.pow(2, context.map().zoom() - 19); - var box = pad$1(woodRoadDragEndpoint, padding, context); - reveal(box, t('intro.lines.start_drag_endpoint')); + function play() { + dispatch$$1.call('done'); + reveal('#id-container', + t('intro.areas.play', { next: t('intro.lines.title') }), { + tooltipBox: '.intro-nav-wrap .chapter-line', + buttonText: t('intro.ok'), + buttonCallback: function() { reveal('#id-container'); } + } + ); + } - context.map().on('move.intro drawn.intro', function() { - if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { - return continueTo(updateLine); - } - var padding = 100 * Math.pow(2, context.map().zoom() - 19); - var box = pad$1(woodRoadDragEndpoint, padding, context); - reveal(box, t('intro.lines.start_drag_endpoint'), { duration: 0 }); - var entity = context.entity(woodRoadEndId); - if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) <= 4) { - continueTo(finishDragEndpoint); - } - }); + chapter.enter = function() { + addArea(); + }; - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - nextStep(); - } - } + chapter.exit = function() { + timeouts.forEach(window.clearTimeout); + context.on('enter.intro exit.intro', null); + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + select('.inspector-wrap').on('wheel.intro', null); + select('.preset-search-input').on('keydown.intro keyup.intro', null); + select('.more-fields .combobox-input').on('click.intro', null); + }; - function finishDragEndpoint() { - if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { - return continueTo(updateLine); - } - var padding = 100 * Math.pow(2, context.map().zoom() - 19); - var box = pad$1(woodRoadDragEndpoint, padding, context); - reveal(box, t('intro.lines.finish_drag_endpoint')); + chapter.restart = function() { + chapter.exit(); + chapter.enter(); + }; - context.map().on('move.intro drawn.intro', function() { - if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { - return continueTo(updateLine); - } - var padding = 100 * Math.pow(2, context.map().zoom() - 19); - var box = pad$1(woodRoadDragEndpoint, padding, context); - reveal(box, t('intro.lines.finish_drag_endpoint'), { duration: 0 }); - var entity = context.entity(woodRoadEndId); - if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) > 4) { - continueTo(startDragEndpoint); - } - }); + return utilRebind(chapter, dispatch$$1, 'on'); + } + + function uiIntroLine(context, reveal) { + var dispatch$$1 = dispatch('done'), + timeouts = [], + tulipRoadId = null, + flowerRoadId = 'w646', + tulipRoadStart = [-85.6297754121684, 41.95805253325314], + tulipRoadMidpoint = [-85.62975395449628, 41.95787501510204], + tulipRoadIntersection = [-85.62974496187628, 41.95742515554585], + roadCategory = context.presets().item('category-road'), + residentialPreset = context.presets().item('highway/residential'), + woodRoadId = 'w525', + woodRoadEndId = 'n2862', + woodRoadAddNode = [-85.62390110349587, 41.95397111462291], + woodRoadDragEndpoint = [-85.623867390213, 41.95466987786487], + woodRoadDragMidpoint = [-85.62386254803509, 41.95430395953872], + washingtonStreetId = 'w522', + twelfthAvenueId = 'w1', + eleventhAvenueEndId = 'n3550', + twelfthAvenueEndId = 'n5', + washingtonSegmentId = null, + eleventhAvenueEnd = context.entity(eleventhAvenueEndId).loc, + twelfthAvenueEnd = context.entity(twelfthAvenueEndId).loc, + deleteLinesLoc = [-85.6219395542764, 41.95228033922477], + twelfthAvenue = [-85.62219310052491, 41.952505413152956]; + + + var chapter = { + title: 'intro.lines.title' + }; - context.on('enter.intro', function() { - continueTo(startDragMidpoint); - }); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + function timeout(f, t$$1) { + timeouts.push(window.setTimeout(f, t$$1)); + } - function startDragMidpoint() { - if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { - return continueTo(updateLine); - } - if (context.selectedIDs().indexOf(woodRoadId) === -1) { - context.enter(modeSelect(context, [woodRoadId])); - } + function eventCancel() { + event.stopPropagation(); + event.preventDefault(); + } - var padding = 80 * Math.pow(2, context.map().zoom() - 19); - var box = pad$1(woodRoadDragMidpoint, padding, context); - reveal(box, t('intro.lines.start_drag_midpoint')); - context.map().on('move.intro drawn.intro', function() { - if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { - return continueTo(updateLine); - } - var padding = 80 * Math.pow(2, context.map().zoom() - 19); - var box = pad$1(woodRoadDragMidpoint, padding, context); - reveal(box, t('intro.lines.start_drag_midpoint'), { duration: 0 }); - }); + function revealEditMenu(loc, text, options) { + var rect = context.surfaceRect(); + var point$$1 = context.curtainProjection(loc); + var pad = 40; + var width = 250 + (2 * pad); + var height = 350; + var startX = rect.left + point$$1[0]; + var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad); + var box = { + left: left, + top: point$$1[1] + rect.top - 60, + width: width, + height: height + }; + reveal(box, text, options); + } - context.history().on('change.intro', function(changed) { - if (changed.created().length === 1) { - continueTo(continueDragMidpoint); - } - }); - context.on('enter.intro', function(mode) { - if (mode.id !== 'select') { - // keep Wood Road selected so midpoint triangles are drawn.. - context.enter(modeSelect(context, [woodRoadId])); - } - }); + function addLine() { + context.enter(modeBrowse(context)); + context.history().reset('initial'); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + var msec = transitionTime(tulipRoadStart, context.map().center()); + if (msec) { reveal(null, null, { duration: 0 }); } + context.map().zoom(18.5).centerEase(tulipRoadStart, msec); + timeout(function() { + var tooltip = reveal('button.add-line', + t('intro.lines.add_line', { button: icon('#icon-line', 'pre-text') })); - function continueDragMidpoint() { - if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { - return continueTo(updateLine); - } + tooltip.selectAll('.tooltip-inner') + .insert('svg', 'span') + .attr('class', 'tooltip-illustration') + .append('use') + .attr('xlink:href', '#feature-images'); - var padding = 100 * Math.pow(2, context.map().zoom() - 19); - var box = pad$1(woodRoadDragEndpoint, padding, context); - box.height += 400; + context.on('enter.intro', function(mode) { + if (mode.id !== 'add-line') return; + continueTo(startLine); + }); + }, msec + 100); - var advance = function() { - context.history().checkpoint('doneUpdateLine'); - continueTo(deleteLines); - }; + function continueTo(nextStep) { + context.on('enter.intro', null); + nextStep(); + } + } - reveal(box, t('intro.lines.continue_drag_midpoint'), - { buttonText: t('intro.ok'), buttonCallback: advance } - ); - context.map().on('move.intro drawn.intro', function() { - if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { - return continueTo(updateLine); - } - var padding = 100 * Math.pow(2, context.map().zoom() - 19); - var box = pad$1(woodRoadDragEndpoint, padding, context); - box.height += 400; - reveal(box, t('intro.lines.continue_drag_midpoint'), - { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance } - ); - }); + function startLine() { + if (context.mode().id !== 'add-line') { + return chapter.restart(); + } - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - nextStep(); - } - } + tulipRoadId = null; + var padding = 70 * Math.pow(2, context.map().zoom() - 18); + var box = pad$1(tulipRoadStart, padding, context); + box.height = box.height + 100; + reveal(box, t('intro.lines.start_line')); - function deleteLines() { - context.history().reset('doneUpdateLine'); - context.enter(modeBrowse(context)); + context.map().on('move.intro drawn.intro', function() { + padding = 70 * Math.pow(2, context.map().zoom() - 18); + box = pad$1(tulipRoadStart, padding, context); + box.height = box.height + 100; + reveal(box, t('intro.lines.start_line'), { duration: 0 }); + }); - if (!context.hasEntity(washingtonStreetId) || - !context.hasEntity(twelfthAvenueId) || - !context.hasEntity(eleventhAvenueEndId)) { - return chapter.restart(); - } + context.on('enter.intro', function(mode) { + if (mode.id !== 'draw-line') return chapter.restart(); + continueTo(drawLine); + }); - var msec = transitionTime(deleteLinesLoc, context.map().center()); - if (msec) { reveal(null, null, { duration: 0 }); } - context.map().zoom(18).centerEase(deleteLinesLoc, msec); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - timeout(function() { - var padding = 200 * Math.pow(2, context.map().zoom() - 18); - var box = pad$1(deleteLinesLoc, padding, context); - box.top -= 200; - box.height += 400; - var advance = function() { continueTo(rightClickIntersection); }; - reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }), - { buttonText: t('intro.ok'), buttonCallback: advance } - ); + function drawLine() { + if (context.mode().id !== 'draw-line') { + return chapter.restart(); + } - context.map().on('move.intro drawn.intro', function() { - var padding = 200 * Math.pow(2, context.map().zoom() - 18); - var box = pad$1(deleteLinesLoc, padding, context); - box.top -= 200; - box.height += 400; - reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }), - { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance } - ); - }); + tulipRoadId = context.mode().selectedIDs()[0]; + context.map().centerEase(tulipRoadMidpoint, 500); + + timeout(function() { + var padding = 200 * Math.pow(2, context.map().zoom() - 18.5); + var box = pad$1(tulipRoadMidpoint, padding, context); + box.height = box.height * 2; + reveal(box, + t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') }) + ); + + context.map().on('move.intro drawn.intro', function() { + padding = 200 * Math.pow(2, context.map().zoom() - 18.5); + box = pad$1(tulipRoadMidpoint, padding, context); + box.height = box.height * 2; + reveal(box, + t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') }), + { duration: 0 } + ); + }); + }, 550); // after easing.. + + context.history().on('change.intro', function() { + var entity = tulipRoadId && context.hasEntity(tulipRoadId); + if (!entity) return chapter.restart(); + + if (isLineConnected()) { + continueTo(continueLine); + } + }); - context.history().on('change.intro', function() { - timeout(function() { - continueTo(deleteLines); - }, 500); // after any transition (e.g. if user deleted intersection) - }); + context.on('enter.intro', function(mode) { + if (mode.id === 'draw-line') + return; + else if (mode.id === 'select') { + continueTo(retryIntersect); + return; + } + else + return chapter.restart(); + }); - }, msec + 100); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + function isLineConnected() { + var entity = tulipRoadId && context.hasEntity(tulipRoadId); + if (!entity) return false; - function rightClickIntersection() { - context.history().reset('doneUpdateLine'); - context.enter(modeBrowse(context)); + var drawNodes = context.graph().childNodes(entity); + return some(drawNodes, function(node) { + return some(context.graph().parentWays(node), function(parent) { + return parent.id === flowerRoadId; + }); + }); + } - context.map().zoom(18).centerEase(eleventhAvenueEnd, 500); - timeout(function() { - var padding = 60 * Math.pow(2, context.map().zoom() - 18); - var box = pad$1(eleventhAvenueEnd, padding, context); - reveal(box, t('intro.lines.rightclick_intersection', - { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') }) - ); + function retryIntersect() { + select(window).on('mousedown.intro', eventCancel, true); - context.map().on('move.intro drawn.intro', function() { - var padding = 60 * Math.pow(2, context.map().zoom() - 18); - var box = pad$1(eleventhAvenueEnd, padding, context); - reveal(box, t('intro.lines.rightclick_intersection', - { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') }), - { duration: 0 } - ); - }); + var box = pad$1(tulipRoadIntersection, 80, context); + reveal(box, + t('intro.lines.retry_intersect', { name: t('intro.graph.name.flower-street') }) + ); - context.on('enter.intro', function(mode) { - if (mode.id !== 'select') return; - var ids = context.selectedIDs(); - if (ids.length !== 1 || ids[0] !== eleventhAvenueEndId) return; + timeout(chapter.restart, 3000); + } - timeout(function() { - var node = selectMenuItem('split').node(); - if (!node) return; - continueTo(splitIntersection); - }, 300); // after menu visible - }); - context.history().on('change.intro', function() { - timeout(function() { - continueTo(deleteLines); - }, 300); // after any transition (e.g. if user deleted intersection) - }); + function continueLine() { + if (context.mode().id !== 'draw-line') return chapter.restart(); + var entity = tulipRoadId && context.hasEntity(tulipRoadId); + if (!entity) return chapter.restart(); - }, 600); + context.map().centerEase(tulipRoadIntersection, 500); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + reveal('#surface', t('intro.lines.continue_line')); + context.on('enter.intro', function(mode) { + if (mode.id === 'draw-line') + return; + else if (mode.id === 'select') + return continueTo(chooseCategoryRoad); + else + return chapter.restart(); + }); - function splitIntersection() { - if (!context.hasEntity(washingtonStreetId) || - !context.hasEntity(twelfthAvenueId) || - !context.hasEntity(eleventhAvenueEndId)) { - return continueTo(deleteLines); - } + function continueTo(nextStep) { + context.on('enter.intro', null); + nextStep(); + } + } - var node = selectMenuItem('split').node(); - if (!node) { return continueTo(rightClickIntersection); } - var wasChanged = false; - var menuCoords = context.map().mouseCoordinates(); - washingtonSegmentId = null; + function chooseCategoryRoad() { + if (context.mode().id !== 'select') { + return chapter.restart(); + } - revealEditMenu(menuCoords, t('intro.lines.split_intersection', - { button: icon('#operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') }) - ); + context.on('exit.intro', function() { + return chapter.restart(); + }); - context.map().on('move.intro drawn.intro', function() { - var node = selectMenuItem('split').node(); - if (!wasChanged && !node) { return continueTo(rightClickIntersection); } + var button = select('.preset-category-road .preset-list-button'); + if (button.empty()) return chapter.restart(); - revealEditMenu(menuCoords, t('intro.lines.split_intersection', - { button: icon('#operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') }), - { duration: 0 } - ); - }); + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - context.history().on('change.intro', function(changed) { - wasChanged = true; - timeout(function() { - if (context.history().undoAnnotation() === t('operations.split.annotation.line')) { - washingtonSegmentId = changed.created()[0].id; - continueTo(didSplit); - } else { - washingtonSegmentId = null; - continueTo(retrySplit); - } - }, 300); // after any transition (e.g. if user deleted intersection) - }); + timeout(function() { + // reset pane, in case user somehow happened to change it.. + select('.inspector-wrap .panewrap').style('right', '-100%'); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + reveal(button.node(), + t('intro.lines.choose_category_road', { category: roadCategory.name() }) + ); + button.on('click.intro', function() { + continueTo(choosePresetResidential); + }); - function retrySplit() { - context.enter(modeBrowse(context)); - context.map().zoom(18).centerEase(eleventhAvenueEnd, 500); - var advance = function() { continueTo(rightClickIntersection); }; + }, 400); // after editor pane visible - var padding = 60 * Math.pow(2, context.map().zoom() - 18); - var box = pad$1(eleventhAvenueEnd, padding, context); - reveal(box, t('intro.lines.retry_split'), - { buttonText: t('intro.ok'), buttonCallback: advance } - ); + function continueTo(nextStep) { + select('.inspector-wrap').on('wheel.intro', null); + select('.preset-list-button').on('click.intro', null); + context.on('exit.intro', null); + nextStep(); + } + } - context.map().on('move.intro drawn.intro', function() { - var padding = 60 * Math.pow(2, context.map().zoom() - 18); - var box = pad$1(eleventhAvenueEnd, padding, context); - reveal(box, t('intro.lines.retry_split'), - { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance } - ); - }); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - nextStep(); - } - } + function choosePresetResidential() { + if (context.mode().id !== 'select') { + return chapter.restart(); + } + context.on('exit.intro', function() { + return chapter.restart(); + }); - function didSplit() { - if (!washingtonSegmentId || - !context.hasEntity(washingtonSegmentId) || - !context.hasEntity(washingtonStreetId) || - !context.hasEntity(twelfthAvenueId) || - !context.hasEntity(eleventhAvenueEndId)) { - return continueTo(rightClickIntersection); - } + var subgrid = select('.preset-category-road .subgrid'); + if (subgrid.empty()) return chapter.restart(); + + subgrid.selectAll(':not(.preset-highway-residential) .preset-list-button') + .on('click.intro', function() { + continueTo(retryPresetResidential); + }); + + subgrid.selectAll('.preset-highway-residential .preset-list-button') + .on('click.intro', function() { + continueTo(nameRoad); + }); + + timeout(function() { + reveal(subgrid.node(), + t('intro.lines.choose_preset_residential', { preset: residentialPreset.name() }), + { tooltipBox: '.preset-highway-residential .preset-list-button', duration: 300 } + ); + }, 300); + + function continueTo(nextStep) { + select('.preset-list-button').on('click.intro', null); + context.on('exit.intro', null); + nextStep(); + } + } - var ids = context.selectedIDs(); - var string = 'intro.lines.did_split_' + (ids.length > 1 ? 'multi' : 'single'); - var street = t('intro.graph.name.washington-street'); - var padding = 200 * Math.pow(2, context.map().zoom() - 18); - var box = pad$1(twelfthAvenue, padding, context); - box.width = box.width / 2; - reveal(box, t(string, { street1: street, street2: street }), - { duration: 500 } - ); + // selected wrong road type + function retryPresetResidential() { + if (context.mode().id !== 'select') { + return chapter.restart(); + } - timeout(function() { - context.map().zoom(18).centerEase(twelfthAvenue, 500); + context.on('exit.intro', function() { + return chapter.restart(); + }); - context.map().on('move.intro drawn.intro', function() { - var padding = 200 * Math.pow(2, context.map().zoom() - 18); - var box = pad$1(twelfthAvenue, padding, context); - box.width = box.width / 2; - reveal(box, t(string, { street1: street, street2: street }), - { duration: 0 } - ); - }); - }, 600); // after initial reveal and curtain cut + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - context.on('enter.intro', function() { - var ids = context.selectedIDs(); - if (ids.length === 1 && ids[0] === washingtonSegmentId) { - continueTo(multiSelect); - } - }); + timeout(function() { + var button = select('.entity-editor-pane .preset-list-button'); - context.history().on('change.intro', function() { - if (!washingtonSegmentId || - !context.hasEntity(washingtonSegmentId) || - !context.hasEntity(washingtonStreetId) || - !context.hasEntity(twelfthAvenueId) || - !context.hasEntity(eleventhAvenueEndId)) { - return continueTo(rightClickIntersection); - } - }); + reveal(button.node(), + t('intro.lines.retry_preset_residential', { preset: residentialPreset.name() }) + ); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + button.on('click.intro', function() { + continueTo(chooseCategoryRoad); + }); + }, 500); - function multiSelect() { - if (!washingtonSegmentId || - !context.hasEntity(washingtonSegmentId) || - !context.hasEntity(washingtonStreetId) || - !context.hasEntity(twelfthAvenueId) || - !context.hasEntity(eleventhAvenueEndId)) { - return continueTo(rightClickIntersection); - } + function continueTo(nextStep) { + select('.inspector-wrap').on('wheel.intro', null); + select('.preset-list-button').on('click.intro', null); + context.on('exit.intro', null); + nextStep(); + } + } - var ids = context.selectedIDs(); - var hasWashington = ids.indexOf(washingtonSegmentId) !== -1; - var hasTwelfth = ids.indexOf(twelfthAvenueId) !== -1; - if (hasWashington && hasTwelfth) { - return continueTo(multiRightClick); - } else if (!hasWashington && !hasTwelfth) { - return continueTo(didSplit); - } + function nameRoad() { + context.on('exit.intro', function() { + continueTo(didNameRoad); + }); - context.map().zoom(18).centerEase(twelfthAvenue, 500); + timeout(function() { + reveal('.entity-editor-pane', + t('intro.lines.name_road', { button: icon('#icon-apply', 'pre-text') }), + { tooltipClass: 'intro-lines-name_road' } + ); + }, 500); - timeout(function() { - var selected, other, padding, box; - if (hasWashington) { - selected = t('intro.graph.name.washington-street'); - other = t('intro.graph.name.12th-avenue'); - padding = 60 * Math.pow(2, context.map().zoom() - 18); - box = pad$1(twelfthAvenueEnd, padding, context); - box.width *= 3; - } else { - selected = t('intro.graph.name.12th-avenue'); - other = t('intro.graph.name.washington-street'); - padding = 200 * Math.pow(2, context.map().zoom() - 18); - box = pad$1(twelfthAvenue, padding, context); - box.width /= 2; - } + function continueTo(nextStep) { + context.on('exit.intro', null); + nextStep(); + } + } - reveal(box, - t('intro.lines.multi_select', { selected: selected, other1: other, other2: other }) - ); - context.map().on('move.intro drawn.intro', function() { - if (hasWashington) { - selected = t('intro.graph.name.washington-street'); - other = t('intro.graph.name.12th-avenue'); - padding = 60 * Math.pow(2, context.map().zoom() - 18); - box = pad$1(twelfthAvenueEnd, padding, context); - box.width *= 3; - } else { - selected = t('intro.graph.name.12th-avenue'); - other = t('intro.graph.name.washington-street'); - padding = 200 * Math.pow(2, context.map().zoom() - 18); - box = pad$1(twelfthAvenue, padding, context); - box.width /= 2; - } - - reveal(box, - t('intro.lines.multi_select', { selected: selected, other1: other, other2: other }), - { duration: 0 } - ); - }); + function didNameRoad() { + context.history().checkpoint('doneAddLine'); - context.on('enter.intro', function() { - continueTo(multiSelect); - }); + timeout(function() { + reveal('#surface', t('intro.lines.did_name_road'), { + buttonText: t('intro.ok'), + buttonCallback: function() { continueTo(updateLine); } + }); + }, 500); - context.history().on('change.intro', function() { - if (!washingtonSegmentId || - !context.hasEntity(washingtonSegmentId) || - !context.hasEntity(washingtonStreetId) || - !context.hasEntity(twelfthAvenueId) || - !context.hasEntity(eleventhAvenueEndId)) { - return continueTo(rightClickIntersection); - } - }); - }, 600); + function continueTo(nextStep) { + nextStep(); + } + } - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + function updateLine() { + context.history().reset('doneAddLine'); + if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { + return chapter.restart(); + } - function multiRightClick() { - if (!washingtonSegmentId || - !context.hasEntity(washingtonSegmentId) || - !context.hasEntity(washingtonStreetId) || - !context.hasEntity(twelfthAvenueId) || - !context.hasEntity(eleventhAvenueEndId)) { - return continueTo(rightClickIntersection); - } + var msec = transitionTime(woodRoadDragMidpoint, context.map().center()); + if (msec) { reveal(null, null, { duration: 0 }); } + context.map().zoom(19).centerEase(woodRoadDragMidpoint, msec); + + timeout(function() { + var padding = 250 * Math.pow(2, context.map().zoom() - 19); + var box = pad$1(woodRoadDragMidpoint, padding, context); + var advance = function() { continueTo(addNode); }; + + reveal(box, t('intro.lines.update_line'), + { buttonText: t('intro.ok'), buttonCallback: advance } + ); + + context.map().on('move.intro drawn.intro', function() { + var padding = 250 * Math.pow(2, context.map().zoom() - 19); + var box = pad$1(woodRoadDragMidpoint, padding, context); + reveal(box, t('intro.lines.update_line'), + { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance } + ); + }); + }, msec + 100); + + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + nextStep(); + } + } - var padding = 200 * Math.pow(2, context.map().zoom() - 18); - var box = pad$1(twelfthAvenue, padding, context); - reveal(box, t('intro.lines.multi_rightclick')); - context.map().on('move.intro drawn.intro', function() { - var padding = 200 * Math.pow(2, context.map().zoom() - 18); - var box = pad$1(twelfthAvenue, padding, context); - reveal(box, t('intro.lines.multi_rightclick'), { duration: 0 }); - }); + function addNode() { + context.history().reset('doneAddLine'); + if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { + return chapter.restart(); + } - d3_select(window).on('click.intro contextmenu.intro', function() { - timeout(function() { - var ids = context.selectedIDs(); - if (ids.length === 2 && - ids.indexOf(twelfthAvenueId) !== -1 && - ids.indexOf(washingtonSegmentId) !== -1) { - var node = selectMenuItem('delete').node(); - if (!node) return; - continueTo(multiDelete); - } else if (ids.length === 1 && - ids.indexOf(washingtonSegmentId) !== -1) { - return continueTo(multiSelect); - } else { - return continueTo(didSplit); - } - }, 300); // after edit menu visible - }, true); - - context.history().on('change.intro', function() { - if (!washingtonSegmentId || - !context.hasEntity(washingtonSegmentId) || - !context.hasEntity(washingtonStreetId) || - !context.hasEntity(twelfthAvenueId) || - !context.hasEntity(eleventhAvenueEndId)) { - return continueTo(rightClickIntersection); - } - }); + var padding = 40 * Math.pow(2, context.map().zoom() - 19); + var box = pad$1(woodRoadAddNode, padding, context); + reveal(box, t('intro.lines.add_node')); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - d3_select(window).on('click.intro contextmenu.intro', null, true); - context.history().on('change.intro', null); - nextStep(); - } - } + context.map().on('move.intro drawn.intro', function() { + var padding = 40 * Math.pow(2, context.map().zoom() - 19); + var box = pad$1(woodRoadAddNode, padding, context); + reveal(box, t('intro.lines.add_node'), { duration: 0 }); + }); + context.history().on('change.intro', function(changed) { + if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { + return continueTo(updateLine); + } + if (changed.created().length === 1) { + timeout(function() { continueTo(startDragEndpoint); }, 500); + } + }); - function multiDelete() { - if (!washingtonSegmentId || - !context.hasEntity(washingtonSegmentId) || - !context.hasEntity(washingtonStreetId) || - !context.hasEntity(twelfthAvenueId) || - !context.hasEntity(eleventhAvenueEndId)) { - return continueTo(rightClickIntersection); - } + context.on('enter.intro', function(mode) { + if (mode.id !== 'select') { + continueTo(updateLine); + } + }); - var node = selectMenuItem('delete').node(); - if (!node) return continueTo(multiRightClick); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - var menuCoords = context.map().mouseCoordinates(); - revealEditMenu(menuCoords, - t('intro.lines.multi_delete', { button: icon('#operation-delete', 'pre-text') }) - ); - context.map().on('move.intro drawn.intro', function() { - revealEditMenu(menuCoords, - t('intro.lines.multi_delete', { button: icon('#operation-delete', 'pre-text') }), - { duration: 0 } - ); - }); + function startDragEndpoint() { + if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { + return continueTo(updateLine); + } + var padding = 100 * Math.pow(2, context.map().zoom() - 19); + var box = pad$1(woodRoadDragEndpoint, padding, context); + reveal(box, t('intro.lines.start_drag_endpoint')); + + context.map().on('move.intro drawn.intro', function() { + if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { + return continueTo(updateLine); + } + var padding = 100 * Math.pow(2, context.map().zoom() - 19); + var box = pad$1(woodRoadDragEndpoint, padding, context); + reveal(box, t('intro.lines.start_drag_endpoint'), { duration: 0 }); + + var entity = context.entity(woodRoadEndId); + if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) <= 4) { + continueTo(finishDragEndpoint); + } + }); - context.on('exit.intro', function() { - if (context.hasEntity(washingtonSegmentId) || context.hasEntity(twelfthAvenueId)) { - return continueTo(multiSelect); // left select mode but roads still exist - } - }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + nextStep(); + } + } - context.history().on('change.intro', function() { - if (context.hasEntity(washingtonSegmentId) || context.hasEntity(twelfthAvenueId)) { - continueTo(retryDelete); // changed something but roads still exist - } else { - continueTo(play); - } - }); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('exit.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + function finishDragEndpoint() { + if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { + return continueTo(updateLine); + } + var padding = 100 * Math.pow(2, context.map().zoom() - 19); + var box = pad$1(woodRoadDragEndpoint, padding, context); + reveal(box, t('intro.lines.finish_drag_endpoint')); + + context.map().on('move.intro drawn.intro', function() { + if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { + return continueTo(updateLine); + } + var padding = 100 * Math.pow(2, context.map().zoom() - 19); + var box = pad$1(woodRoadDragEndpoint, padding, context); + reveal(box, t('intro.lines.finish_drag_endpoint'), { duration: 0 }); + + var entity = context.entity(woodRoadEndId); + if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) > 4) { + continueTo(startDragEndpoint); + } + }); - function retryDelete() { - context.enter(modeBrowse(context)); + context.on('enter.intro', function() { + continueTo(startDragMidpoint); + }); - var padding = 200 * Math.pow(2, context.map().zoom() - 18); - var box = pad$1(twelfthAvenue, padding, context); - reveal(box, t('intro.lines.retry_delete'), { - buttonText: t('intro.ok'), - buttonCallback: function() { continueTo(multiSelect); } - }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - function continueTo(nextStep) { - nextStep(); - } - } + function startDragMidpoint() { + if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { + return continueTo(updateLine); + } + if (context.selectedIDs().indexOf(woodRoadId) === -1) { + context.enter(modeSelect(context, [woodRoadId])); + } - function play() { - dispatch$$1.call('done'); - reveal('#id-container', - t('intro.lines.play', { next: t('intro.buildings.title') }), { - tooltipBox: '.intro-nav-wrap .chapter-building', - buttonText: t('intro.ok'), - buttonCallback: function() { reveal('#id-container'); } - } - ); - } + var padding = 80 * Math.pow(2, context.map().zoom() - 19); + var box = pad$1(woodRoadDragMidpoint, padding, context); + reveal(box, t('intro.lines.start_drag_midpoint')); + + context.map().on('move.intro drawn.intro', function() { + if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { + return continueTo(updateLine); + } + var padding = 80 * Math.pow(2, context.map().zoom() - 19); + var box = pad$1(woodRoadDragMidpoint, padding, context); + reveal(box, t('intro.lines.start_drag_midpoint'), { duration: 0 }); + }); + context.history().on('change.intro', function(changed) { + if (changed.created().length === 1) { + continueTo(continueDragMidpoint); + } + }); - chapter.enter = function() { - addLine(); - }; + context.on('enter.intro', function(mode) { + if (mode.id !== 'select') { + // keep Wood Road selected so midpoint triangles are drawn.. + context.enter(modeSelect(context, [woodRoadId])); + } + }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - chapter.exit = function() { - timeouts.forEach(window.clearTimeout); - d3_select(window).on('mousedown.intro', null, true); - context.on('enter.intro exit.intro', null); - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - d3_select('.inspector-wrap').on('wheel.intro', null); - d3_select('.preset-list-button').on('click.intro', null); - }; + function continueDragMidpoint() { + if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { + return continueTo(updateLine); + } - chapter.restart = function() { - chapter.exit(); - chapter.enter(); - }; + var padding = 100 * Math.pow(2, context.map().zoom() - 19); + var box = pad$1(woodRoadDragEndpoint, padding, context); + box.height += 400; + var advance = function() { + context.history().checkpoint('doneUpdateLine'); + continueTo(deleteLines); + }; - return utilRebind(chapter, dispatch$$1, 'on'); -} + reveal(box, t('intro.lines.continue_drag_midpoint'), + { buttonText: t('intro.ok'), buttonCallback: advance } + ); -function uiIntroBuilding(context, reveal) { - var dispatch$$1 = dispatch('done'), - house = [-85.62815, 41.95638], - tank = [-85.62732, 41.95347], - buildingCatetory = context.presets().item('category-building'), - housePreset = context.presets().item('building/house'), - tankPreset = context.presets().item('man_made/storage_tank'), - timeouts = [], - houseId = null, - tankId = null; + context.map().on('move.intro drawn.intro', function() { + if (!context.hasEntity(woodRoadId) || !context.hasEntity(woodRoadEndId)) { + return continueTo(updateLine); + } + var padding = 100 * Math.pow(2, context.map().zoom() - 19); + var box = pad$1(woodRoadDragEndpoint, padding, context); + box.height += 400; + reveal(box, t('intro.lines.continue_drag_midpoint'), + { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance } + ); + }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + nextStep(); + } + } - var chapter = { - title: 'intro.buildings.title' - }; + function deleteLines() { + context.history().reset('doneUpdateLine'); + context.enter(modeBrowse(context)); - function timeout(f, t$$1) { - timeouts.push(window.setTimeout(f, t$$1)); - } + if (!context.hasEntity(washingtonStreetId) || + !context.hasEntity(twelfthAvenueId) || + !context.hasEntity(eleventhAvenueEndId)) { + return chapter.restart(); + } + var msec = transitionTime(deleteLinesLoc, context.map().center()); + if (msec) { reveal(null, null, { duration: 0 }); } + context.map().zoom(18).centerEase(deleteLinesLoc, msec); + + timeout(function() { + var padding = 200 * Math.pow(2, context.map().zoom() - 18); + var box = pad$1(deleteLinesLoc, padding, context); + box.top -= 200; + box.height += 400; + var advance = function() { continueTo(rightClickIntersection); }; + + reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }), + { buttonText: t('intro.ok'), buttonCallback: advance } + ); + + context.map().on('move.intro drawn.intro', function() { + var padding = 200 * Math.pow(2, context.map().zoom() - 18); + var box = pad$1(deleteLinesLoc, padding, context); + box.top -= 200; + box.height += 400; + reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }), + { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance } + ); + }); + + context.history().on('change.intro', function() { + timeout(function() { + continueTo(deleteLines); + }, 500); // after any transition (e.g. if user deleted intersection) + }); + + }, msec + 100); + + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - function eventCancel() { - event.stopPropagation(); - event.preventDefault(); - } + function rightClickIntersection() { + context.history().reset('doneUpdateLine'); + context.enter(modeBrowse(context)); + + context.map().zoom(18).centerEase(eleventhAvenueEnd, 500); + + timeout(function() { + var padding = 60 * Math.pow(2, context.map().zoom() - 18); + var box = pad$1(eleventhAvenueEnd, padding, context); + reveal(box, t('intro.lines.rightclick_intersection', + { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') }) + ); + + context.map().on('move.intro drawn.intro', function() { + var padding = 60 * Math.pow(2, context.map().zoom() - 18); + var box = pad$1(eleventhAvenueEnd, padding, context); + reveal(box, t('intro.lines.rightclick_intersection', + { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') }), + { duration: 0 } + ); + }); + + context.on('enter.intro', function(mode) { + if (mode.id !== 'select') return; + var ids = context.selectedIDs(); + if (ids.length !== 1 || ids[0] !== eleventhAvenueEndId) return; + + timeout(function() { + var node = selectMenuItem('split').node(); + if (!node) return; + continueTo(splitIntersection); + }, 300); // after menu visible + }); + + context.history().on('change.intro', function() { + timeout(function() { + continueTo(deleteLines); + }, 300); // after any transition (e.g. if user deleted intersection) + }); + + }, 600); + + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - function revealHouse(center, text, options) { - var padding = 160 * Math.pow(2, context.map().zoom() - 20); - var box = pad$1(center, padding, context); - reveal(box, text, options); - } + function splitIntersection() { + if (!context.hasEntity(washingtonStreetId) || + !context.hasEntity(twelfthAvenueId) || + !context.hasEntity(eleventhAvenueEndId)) { + return continueTo(deleteLines); + } - function revealTank(center, text, options) { - var padding = 190 * Math.pow(2, context.map().zoom() - 19.5); - var box = pad$1(center, padding, context); - reveal(box, text, options); - } + var node = selectMenuItem('split').node(); + if (!node) { return continueTo(rightClickIntersection); } + var wasChanged = false; + var menuCoords = context.map().mouseCoordinates(); + washingtonSegmentId = null; - function revealEditMenu(loc, text, options) { - var rect = context.surfaceRect(); - var point$$1 = context.curtainProjection(loc); - var pad = 40; - var width = 250 + (2 * pad); - var height = 350; - var startX = rect.left + point$$1[0]; - var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad); - var box = { - left: left, - top: point$$1[1] + rect.top - 60, - width: width, - height: height - }; - reveal(box, text, options); - } + revealEditMenu(menuCoords, t('intro.lines.split_intersection', + { button: icon('#operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') }) + ); + context.map().on('move.intro drawn.intro', function() { + var node = selectMenuItem('split').node(); + if (!wasChanged && !node) { return continueTo(rightClickIntersection); } - function addHouse() { - context.enter(modeBrowse(context)); - context.history().reset('initial'); - houseId = null; + revealEditMenu(menuCoords, t('intro.lines.split_intersection', + { button: icon('#operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') }), + { duration: 0 } + ); + }); - var msec = transitionTime(house, context.map().center()); - if (msec) { reveal(null, null, { duration: 0 }); } - context.map().zoom(19).centerEase(house, msec); + context.history().on('change.intro', function(changed) { + wasChanged = true; + timeout(function() { + if (context.history().undoAnnotation() === t('operations.split.annotation.line')) { + washingtonSegmentId = changed.created()[0].id; + continueTo(didSplit); + } else { + washingtonSegmentId = null; + continueTo(retrySplit); + } + }, 300); // after any transition (e.g. if user deleted intersection) + }); - timeout(function() { - var tooltip = reveal('button.add-area', - t('intro.buildings.add_building', { button: icon('#icon-area', 'pre-text') })); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - tooltip.selectAll('.tooltip-inner') - .insert('svg', 'span') - .attr('class', 'tooltip-illustration') - .append('use') - .attr('xlink:href', '#building-images'); - context.on('enter.intro', function(mode) { - if (mode.id !== 'add-area') return; - continueTo(startHouse); - }); - }, msec + 100); + function retrySplit() { + context.enter(modeBrowse(context)); + context.map().zoom(18).centerEase(eleventhAvenueEnd, 500); + var advance = function() { continueTo(rightClickIntersection); }; - function continueTo(nextStep) { - context.on('enter.intro', null); - nextStep(); - } - } + var padding = 60 * Math.pow(2, context.map().zoom() - 18); + var box = pad$1(eleventhAvenueEnd, padding, context); + reveal(box, t('intro.lines.retry_split'), + { buttonText: t('intro.ok'), buttonCallback: advance } + ); + context.map().on('move.intro drawn.intro', function() { + var padding = 60 * Math.pow(2, context.map().zoom() - 18); + var box = pad$1(eleventhAvenueEnd, padding, context); + reveal(box, t('intro.lines.retry_split'), + { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance } + ); + }); - function startHouse() { - if (context.mode().id !== 'add-area') { - return continueTo(addHouse); - } + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + nextStep(); + } + } - houseId = null; - context.map().zoomEase(20, 500); - timeout(function() { - revealHouse(house, t('intro.buildings.start_building')); + function didSplit() { + if (!washingtonSegmentId || + !context.hasEntity(washingtonSegmentId) || + !context.hasEntity(washingtonStreetId) || + !context.hasEntity(twelfthAvenueId) || + !context.hasEntity(eleventhAvenueEndId)) { + return continueTo(rightClickIntersection); + } - context.map().on('move.intro drawn.intro', function() { - revealHouse(house, t('intro.buildings.start_building'), { duration: 0 }); - }); + var ids = context.selectedIDs(); + var string = 'intro.lines.did_split_' + (ids.length > 1 ? 'multi' : 'single'); + var street = t('intro.graph.name.washington-street'); - context.on('enter.intro', function(mode) { - if (mode.id !== 'draw-area') return chapter.restart(); - continueTo(continueHouse); - }); + var padding = 200 * Math.pow(2, context.map().zoom() - 18); + var box = pad$1(twelfthAvenue, padding, context); + box.width = box.width / 2; + reveal(box, t(string, { street1: street, street2: street }), + { duration: 500 } + ); - }, 550); // after easing + timeout(function() { + context.map().zoom(18).centerEase(twelfthAvenue, 500); + + context.map().on('move.intro drawn.intro', function() { + var padding = 200 * Math.pow(2, context.map().zoom() - 18); + var box = pad$1(twelfthAvenue, padding, context); + box.width = box.width / 2; + reveal(box, t(string, { street1: street, street2: street }), + { duration: 0 } + ); + }); + }, 600); // after initial reveal and curtain cut + + context.on('enter.intro', function() { + var ids = context.selectedIDs(); + if (ids.length === 1 && ids[0] === washingtonSegmentId) { + continueTo(multiSelect); + } + }); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + context.history().on('change.intro', function() { + if (!washingtonSegmentId || + !context.hasEntity(washingtonSegmentId) || + !context.hasEntity(washingtonStreetId) || + !context.hasEntity(twelfthAvenueId) || + !context.hasEntity(eleventhAvenueEndId)) { + return continueTo(rightClickIntersection); + } + }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - function continueHouse() { - if (context.mode().id !== 'draw-area') { - return continueTo(addHouse); - } - houseId = null; + function multiSelect() { + if (!washingtonSegmentId || + !context.hasEntity(washingtonSegmentId) || + !context.hasEntity(washingtonStreetId) || + !context.hasEntity(twelfthAvenueId) || + !context.hasEntity(eleventhAvenueEndId)) { + return continueTo(rightClickIntersection); + } - revealHouse(house, t('intro.buildings.continue_building')); + var ids = context.selectedIDs(); + var hasWashington = ids.indexOf(washingtonSegmentId) !== -1; + var hasTwelfth = ids.indexOf(twelfthAvenueId) !== -1; - context.map().on('move.intro drawn.intro', function() { - revealHouse(house, t('intro.buildings.continue_building'), { duration: 0 }); - }); + if (hasWashington && hasTwelfth) { + return continueTo(multiRightClick); + } else if (!hasWashington && !hasTwelfth) { + return continueTo(didSplit); + } - context.on('enter.intro', function(mode) { - if (mode.id === 'draw-area') { - return; - } else if (mode.id === 'select') { - var graph = context.graph(), - way = context.entity(context.selectedIDs()[0]), - nodes = graph.childNodes(way), - points = uniq(nodes).map(function(n) { return context.projection(n.loc); }); - - if (isMostlySquare(points)) { - houseId = way.id; - return continueTo(chooseCategoryBuilding); - } else { - return continueTo(retryHouse); - } + context.map().zoom(18).centerEase(twelfthAvenue, 500); + + timeout(function() { + var selected, other, padding, box; + if (hasWashington) { + selected = t('intro.graph.name.washington-street'); + other = t('intro.graph.name.12th-avenue'); + padding = 60 * Math.pow(2, context.map().zoom() - 18); + box = pad$1(twelfthAvenueEnd, padding, context); + box.width *= 3; + } else { + selected = t('intro.graph.name.12th-avenue'); + other = t('intro.graph.name.washington-street'); + padding = 200 * Math.pow(2, context.map().zoom() - 18); + box = pad$1(twelfthAvenue, padding, context); + box.width /= 2; + } + + reveal(box, + t('intro.lines.multi_select', { selected: selected, other1: other, other2: other }) + ); + + context.map().on('move.intro drawn.intro', function() { + if (hasWashington) { + selected = t('intro.graph.name.washington-street'); + other = t('intro.graph.name.12th-avenue'); + padding = 60 * Math.pow(2, context.map().zoom() - 18); + box = pad$1(twelfthAvenueEnd, padding, context); + box.width *= 3; + } else { + selected = t('intro.graph.name.12th-avenue'); + other = t('intro.graph.name.washington-street'); + padding = 200 * Math.pow(2, context.map().zoom() - 18); + box = pad$1(twelfthAvenue, padding, context); + box.width /= 2; + } + + reveal(box, + t('intro.lines.multi_select', { selected: selected, other1: other, other2: other }), + { duration: 0 } + ); + }); + + context.on('enter.intro', function() { + continueTo(multiSelect); + }); + + context.history().on('change.intro', function() { + if (!washingtonSegmentId || + !context.hasEntity(washingtonSegmentId) || + !context.hasEntity(washingtonStreetId) || + !context.hasEntity(twelfthAvenueId) || + !context.hasEntity(eleventhAvenueEndId)) { + return continueTo(rightClickIntersection); + } + }); + }, 600); + + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - } else { - return chapter.restart(); - } - }); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + function multiRightClick() { + if (!washingtonSegmentId || + !context.hasEntity(washingtonSegmentId) || + !context.hasEntity(washingtonStreetId) || + !context.hasEntity(twelfthAvenueId) || + !context.hasEntity(eleventhAvenueEndId)) { + return continueTo(rightClickIntersection); + } + var padding = 200 * Math.pow(2, context.map().zoom() - 18); + var box = pad$1(twelfthAvenue, padding, context); + reveal(box, t('intro.lines.multi_rightclick')); - function retryHouse() { - var onClick = function() { continueTo(addHouse); }; + context.map().on('move.intro drawn.intro', function() { + var padding = 200 * Math.pow(2, context.map().zoom() - 18); + var box = pad$1(twelfthAvenue, padding, context); + reveal(box, t('intro.lines.multi_rightclick'), { duration: 0 }); + }); - revealHouse(house, t('intro.buildings.retry_building'), - { buttonText: t('intro.ok'), buttonCallback: onClick } - ); + select(window).on('click.intro contextmenu.intro', function() { + timeout(function() { + var ids = context.selectedIDs(); + if (ids.length === 2 && + ids.indexOf(twelfthAvenueId) !== -1 && + ids.indexOf(washingtonSegmentId) !== -1) { + var node = selectMenuItem('delete').node(); + if (!node) return; + continueTo(multiDelete); + } else if (ids.length === 1 && + ids.indexOf(washingtonSegmentId) !== -1) { + return continueTo(multiSelect); + } else { + return continueTo(didSplit); + } + }, 300); // after edit menu visible + }, true); + + context.history().on('change.intro', function() { + if (!washingtonSegmentId || + !context.hasEntity(washingtonSegmentId) || + !context.hasEntity(washingtonStreetId) || + !context.hasEntity(twelfthAvenueId) || + !context.hasEntity(eleventhAvenueEndId)) { + return continueTo(rightClickIntersection); + } + }); - context.map().on('move.intro drawn.intro', function() { - revealHouse(house, t('intro.buildings.retry_building'), - { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick } - ); - }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + select(window).on('click.intro contextmenu.intro', null, true); + context.history().on('change.intro', null); + nextStep(); + } + } - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - nextStep(); - } - } + function multiDelete() { + if (!washingtonSegmentId || + !context.hasEntity(washingtonSegmentId) || + !context.hasEntity(washingtonStreetId) || + !context.hasEntity(twelfthAvenueId) || + !context.hasEntity(eleventhAvenueEndId)) { + return continueTo(rightClickIntersection); + } - function chooseCategoryBuilding() { - if (!houseId || !context.hasEntity(houseId)) { - return addHouse(); - } - var ids = context.selectedIDs(); - if (context.mode().id !== 'select' || !ids.length || ids[0] !== houseId) { - context.enter(modeSelect(context, [houseId])); - } + var node = selectMenuItem('delete').node(); + if (!node) return continueTo(multiRightClick); - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + var menuCoords = context.map().mouseCoordinates(); + revealEditMenu(menuCoords, + t('intro.lines.multi_delete', { button: icon('#operation-delete', 'pre-text') }) + ); - timeout(function() { - // reset pane, in case user somehow happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '-100%'); + context.map().on('move.intro drawn.intro', function() { + revealEditMenu(menuCoords, + t('intro.lines.multi_delete', { button: icon('#operation-delete', 'pre-text') }), + { duration: 0 } + ); + }); - var button = d3_select('.preset-category-building .preset-list-button'); + context.on('exit.intro', function() { + if (context.hasEntity(washingtonSegmentId) || context.hasEntity(twelfthAvenueId)) { + return continueTo(multiSelect); // left select mode but roads still exist + } + }); - reveal(button.node(), - t('intro.buildings.choose_category_building', { category: buildingCatetory.name() }) - ); + context.history().on('change.intro', function() { + if (context.hasEntity(washingtonSegmentId) || context.hasEntity(twelfthAvenueId)) { + continueTo(retryDelete); // changed something but roads still exist + } else { + continueTo(play); + } + }); - button.on('click.intro', function() { - button.on('click.intro', null); - continueTo(choosePresetHouse); - }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('exit.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - }, 400); // after preset list pane visible.. + function retryDelete() { + context.enter(modeBrowse(context)); - context.on('enter.intro', function(mode) { - if (!houseId || !context.hasEntity(houseId)) { - return continueTo(addHouse); - } - var ids = context.selectedIDs(); - if (mode.id !== 'select' || !ids.length || ids[0] !== houseId) { - return continueTo(chooseCategoryBuilding); - } - }); + var padding = 200 * Math.pow(2, context.map().zoom() - 18); + var box = pad$1(twelfthAvenue, padding, context); + reveal(box, t('intro.lines.retry_delete'), { + buttonText: t('intro.ok'), + buttonCallback: function() { continueTo(multiSelect); } + }); - function continueTo(nextStep) { - d3_select('.inspector-wrap').on('wheel.intro', null); - d3_select('.preset-list-button').on('click.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + function continueTo(nextStep) { + nextStep(); + } + } - function choosePresetHouse() { - if (!houseId || !context.hasEntity(houseId)) { - return addHouse(); - } - var ids = context.selectedIDs(); - if (context.mode().id !== 'select' || !ids.length || ids[0] !== houseId) { - context.enter(modeSelect(context, [houseId])); - } + function play() { + dispatch$$1.call('done'); + reveal('#id-container', + t('intro.lines.play', { next: t('intro.buildings.title') }), { + tooltipBox: '.intro-nav-wrap .chapter-building', + buttonText: t('intro.ok'), + buttonCallback: function() { reveal('#id-container'); } + } + ); + } - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); - timeout(function() { - // reset pane, in case user somehow happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '-100%'); + chapter.enter = function() { + addLine(); + }; - var button = d3_select('.preset-building-house .preset-list-button'); - reveal(button.node(), - t('intro.buildings.choose_preset_house', { preset: housePreset.name() }), - { duration: 300 } - ); + chapter.exit = function() { + timeouts.forEach(window.clearTimeout); + select(window).on('mousedown.intro', null, true); + context.on('enter.intro exit.intro', null); + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + select('.inspector-wrap').on('wheel.intro', null); + select('.preset-list-button').on('click.intro', null); + }; - button.on('click.intro', function() { - button.on('click.intro', null); - continueTo(closeEditorHouse); - }); + chapter.restart = function() { + chapter.exit(); + chapter.enter(); + }; - }, 400); // after preset list pane visible.. - context.on('enter.intro', function(mode) { - if (!houseId || !context.hasEntity(houseId)) { - return continueTo(addHouse); - } - var ids = context.selectedIDs(); - if (mode.id !== 'select' || !ids.length || ids[0] !== houseId) { - return continueTo(chooseCategoryBuilding); - } - }); + return utilRebind(chapter, dispatch$$1, 'on'); + } - function continueTo(nextStep) { - d3_select('.inspector-wrap').on('wheel.intro', null); - d3_select('.preset-list-button').on('click.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + function uiIntroBuilding(context, reveal) { + var dispatch$$1 = dispatch('done'), + house = [-85.62815, 41.95638], + tank = [-85.62732, 41.95347], + buildingCatetory = context.presets().item('category-building'), + housePreset = context.presets().item('building/house'), + tankPreset = context.presets().item('man_made/storage_tank'), + timeouts = [], + houseId = null, + tankId = null; - function closeEditorHouse() { - if (!houseId || !context.hasEntity(houseId)) { - return addHouse(); - } - var ids = context.selectedIDs(); - if (context.mode().id !== 'select' || !ids.length || ids[0] !== houseId) { - context.enter(modeSelect(context, [houseId])); - } + var chapter = { + title: 'intro.buildings.title' + }; - context.history().checkpoint('hasHouse'); - context.on('exit.intro', function() { - continueTo(rightClickHouse); - }); + function timeout(f, t$$1) { + timeouts.push(window.setTimeout(f, t$$1)); + } - timeout(function() { - reveal('.entity-editor-pane', - t('intro.buildings.close', { button: icon('#icon-apply', 'pre-text') }) - ); - }, 500); - function continueTo(nextStep) { - context.on('exit.intro', null); - nextStep(); - } - } + function eventCancel() { + event.stopPropagation(); + event.preventDefault(); + } - function rightClickHouse() { - if (!houseId) return chapter.restart(); + function revealHouse(center, text, options) { + var padding = 160 * Math.pow(2, context.map().zoom() - 20); + var box = pad$1(center, padding, context); + reveal(box, text, options); + } - context.enter(modeBrowse(context)); - context.history().reset('hasHouse'); - context.map().centerEase(house, 500); - timeout(function() { - if (context.map().zoom() < 20) { - context.map().zoomEase(20, 500); - } - }, 520); - - context.on('enter.intro', function(mode) { - if (mode.id !== 'select') return; - var ids = context.selectedIDs(); - if (ids.length !== 1 || ids[0] !== houseId) return; - - timeout(function() { - var node = selectMenuItem('orthogonalize').node(); - if (!node) return; - continueTo(clickSquare); - }, 300); // after menu visible - }); + function revealTank(center, text, options) { + var padding = 190 * Math.pow(2, context.map().zoom() - 19.5); + var box = pad$1(center, padding, context); + reveal(box, text, options); + } - context.map().on('move.intro drawn.intro', function() { - revealHouse(house, t('intro.buildings.rightclick_building'), { duration: 0 }); - }); - context.history().on('change.intro', function() { - continueTo(rightClickHouse); - }); + function revealEditMenu(loc, text, options) { + var rect = context.surfaceRect(); + var point$$1 = context.curtainProjection(loc); + var pad = 40; + var width = 250 + (2 * pad); + var height = 350; + var startX = rect.left + point$$1[0]; + var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad); + var box = { + left: left, + top: point$$1[1] + rect.top - 60, + width: width, + height: height + }; + reveal(box, text, options); + } - function continueTo(nextStep) { - context.on('enter.intro', null); - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + function addHouse() { + context.enter(modeBrowse(context)); + context.history().reset('initial'); + houseId = null; - function clickSquare() { - if (!houseId) return chapter.restart(); - var entity = context.hasEntity(houseId); - if (!entity) return continueTo(rightClickHouse); + var msec = transitionTime(house, context.map().center()); + if (msec) { reveal(null, null, { duration: 0 }); } + context.map().zoom(19).centerEase(house, msec); - var node = selectMenuItem('orthogonalize').node(); - if (!node) { return continueTo(rightClickHouse); } + timeout(function() { + var tooltip = reveal('button.add-area', + t('intro.buildings.add_building', { button: icon('#icon-area', 'pre-text') })); - var wasChanged = false; - var menuCoords = context.map().mouseCoordinates(); + tooltip.selectAll('.tooltip-inner') + .insert('svg', 'span') + .attr('class', 'tooltip-illustration') + .append('use') + .attr('xlink:href', '#building-images'); - revealEditMenu(menuCoords, - t('intro.buildings.square_building', { button: icon('#operation-orthogonalize', 'pre-text') }) - ); + context.on('enter.intro', function(mode) { + if (mode.id !== 'add-area') return; + continueTo(startHouse); + }); + }, msec + 100); - context.on('enter.intro', function(mode) { - if (mode.id === 'browse') { - continueTo(rightClickHouse); - } else if (mode.id === 'move' || mode.id === 'rotate') { - continueTo(retryClickSquare); - } - }); + function continueTo(nextStep) { + context.on('enter.intro', null); + nextStep(); + } + } - context.map().on('move.intro drawn.intro', function() { - var node = selectMenuItem('orthogonalize').node(); - if (!wasChanged && !node) { return continueTo(rightClickHouse); } - revealEditMenu(menuCoords, - t('intro.buildings.square_building', { button: icon('#operation-orthogonalize', 'pre-text') }), - { duration: 0 } - ); - }); + function startHouse() { + if (context.mode().id !== 'add-area') { + return continueTo(addHouse); + } - context.history().on('change.intro', function() { - wasChanged = true; - context.history().on('change.intro', null); - - // Something changed. Wait for transition to complete and check undo annotation. - timeout(function() { - if (context.history().undoAnnotation() === t('operations.orthogonalize.annotation.area')) { - continueTo(doneSquare); - } else { - continueTo(retryClickSquare); - } - }, 500); // after transitioned actions - }); + houseId = null; + context.map().zoomEase(20, 500); - function continueTo(nextStep) { - context.on('enter.intro', null); - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + timeout(function() { + revealHouse(house, t('intro.buildings.start_building')); + context.map().on('move.intro drawn.intro', function() { + revealHouse(house, t('intro.buildings.start_building'), { duration: 0 }); + }); - function retryClickSquare() { - context.enter(modeBrowse(context)); + context.on('enter.intro', function(mode) { + if (mode.id !== 'draw-area') return chapter.restart(); + continueTo(continueHouse); + }); - revealHouse(house, t('intro.buildings.retry_square'), { - buttonText: t('intro.ok'), - buttonCallback: function() { continueTo(rightClickHouse); } - }); + }, 550); // after easing - function continueTo(nextStep) { - nextStep(); - } - } + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - function doneSquare() { - context.history().checkpoint('doneSquare'); + function continueHouse() { + if (context.mode().id !== 'draw-area') { + return continueTo(addHouse); + } - revealHouse(house, t('intro.buildings.done_square'), { - buttonText: t('intro.ok'), - buttonCallback: function() { continueTo(addTank); } - }); + houseId = null; - function continueTo(nextStep) { - nextStep(); - } - } + revealHouse(house, t('intro.buildings.continue_building')); + context.map().on('move.intro drawn.intro', function() { + revealHouse(house, t('intro.buildings.continue_building'), { duration: 0 }); + }); - function addTank() { - context.enter(modeBrowse(context)); - context.history().reset('doneSquare'); - tankId = null; + context.on('enter.intro', function(mode) { + if (mode.id === 'draw-area') { + return; + } else if (mode.id === 'select') { + var graph = context.graph(), + way = context.entity(context.selectedIDs()[0]), + nodes = graph.childNodes(way), + points = uniq(nodes).map(function(n) { return context.projection(n.loc); }); + + if (isMostlySquare(points)) { + houseId = way.id; + return continueTo(chooseCategoryBuilding); + } else { + return continueTo(retryHouse); + } + + } else { + return chapter.restart(); + } + }); - var msec = transitionTime(tank, context.map().center()); - if (msec) { reveal(null, null, { duration: 0 }); } - context.map().zoom(19.5).centerEase(tank, msec); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - timeout(function() { - reveal('button.add-area', - t('intro.buildings.add_tank', { button: icon('#icon-area', 'pre-text') }) - ); - context.on('enter.intro', function(mode) { - if (mode.id !== 'add-area') return; - continueTo(startTank); - }); - }, msec + 100); + function retryHouse() { + var onClick = function() { continueTo(addHouse); }; - function continueTo(nextStep) { - context.on('enter.intro', null); - nextStep(); - } - } + revealHouse(house, t('intro.buildings.retry_building'), + { buttonText: t('intro.ok'), buttonCallback: onClick } + ); + context.map().on('move.intro drawn.intro', function() { + revealHouse(house, t('intro.buildings.retry_building'), + { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick } + ); + }); - function startTank() { - if (context.mode().id !== 'add-area') { - return continueTo(addTank); - } + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + nextStep(); + } + } - tankId = null; - timeout(function() { - revealTank(tank, t('intro.buildings.start_tank')); + function chooseCategoryBuilding() { + if (!houseId || !context.hasEntity(houseId)) { + return addHouse(); + } + var ids = context.selectedIDs(); + if (context.mode().id !== 'select' || !ids.length || ids[0] !== houseId) { + context.enter(modeSelect(context, [houseId])); + } - context.map().on('move.intro drawn.intro', function() { - revealTank(tank, t('intro.buildings.start_tank'), { duration: 0 }); - }); + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - context.on('enter.intro', function(mode) { - if (mode.id !== 'draw-area') return chapter.restart(); - continueTo(continueTank); - }); + timeout(function() { + // reset pane, in case user somehow happened to change it.. + select('.inspector-wrap .panewrap').style('right', '-100%'); - }, 550); // after easing + var button = select('.preset-category-building .preset-list-button'); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + reveal(button.node(), + t('intro.buildings.choose_category_building', { category: buildingCatetory.name() }) + ); + button.on('click.intro', function() { + button.on('click.intro', null); + continueTo(choosePresetHouse); + }); - function continueTank() { - if (context.mode().id !== 'draw-area') { - return continueTo(addTank); - } + }, 400); // after preset list pane visible.. - tankId = null; - revealTank(tank, t('intro.buildings.continue_tank')); + context.on('enter.intro', function(mode) { + if (!houseId || !context.hasEntity(houseId)) { + return continueTo(addHouse); + } + var ids = context.selectedIDs(); + if (mode.id !== 'select' || !ids.length || ids[0] !== houseId) { + return continueTo(chooseCategoryBuilding); + } + }); - context.map().on('move.intro drawn.intro', function() { - revealTank(tank, t('intro.buildings.continue_tank'), { duration: 0 }); - }); + function continueTo(nextStep) { + select('.inspector-wrap').on('wheel.intro', null); + select('.preset-list-button').on('click.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - context.on('enter.intro', function(mode) { - if (mode.id === 'draw-area') { - return; - } else if (mode.id === 'select') { - tankId = context.selectedIDs()[0]; - return continueTo(searchPresetTank); - } else { - return continueTo(addTank); - } - }); - function continueTo(nextStep) { - context.map().on('move.intro drawn.intro', null); - context.on('enter.intro', null); - nextStep(); - } - } + function choosePresetHouse() { + if (!houseId || !context.hasEntity(houseId)) { + return addHouse(); + } + var ids = context.selectedIDs(); + if (context.mode().id !== 'select' || !ids.length || ids[0] !== houseId) { + context.enter(modeSelect(context, [houseId])); + } + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - function searchPresetTank() { - if (!tankId || !context.hasEntity(tankId)) { - return addTank(); - } - var ids = context.selectedIDs(); - if (context.mode().id !== 'select' || !ids.length || ids[0] !== tankId) { - context.enter(modeSelect(context, [tankId])); - } + timeout(function() { + // reset pane, in case user somehow happened to change it.. + select('.inspector-wrap .panewrap').style('right', '-100%'); - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + var button = select('.preset-building-house .preset-list-button'); - timeout(function() { - // reset pane, in case user somehow happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '-100%'); + reveal(button.node(), + t('intro.buildings.choose_preset_house', { preset: housePreset.name() }), + { duration: 300 } + ); - d3_select('.preset-search-input') - .on('keydown.intro', null) - .on('keyup.intro', checkPresetSearch); + button.on('click.intro', function() { + button.on('click.intro', null); + continueTo(closeEditorHouse); + }); - reveal('.preset-search-input', - t('intro.buildings.search_tank', { preset: tankPreset.name() }) - ); - }, 400); // after preset list pane visible.. - context.on('enter.intro', function(mode) { - if (!tankId || !context.hasEntity(tankId)) { - return continueTo(addTank); - } + }, 400); // after preset list pane visible.. - var ids = context.selectedIDs(); - if (mode.id !== 'select' || !ids.length || ids[0] !== tankId) { - // keep the user's area selected.. - context.enter(modeSelect(context, [tankId])); + context.on('enter.intro', function(mode) { + if (!houseId || !context.hasEntity(houseId)) { + return continueTo(addHouse); + } + var ids = context.selectedIDs(); + if (mode.id !== 'select' || !ids.length || ids[0] !== houseId) { + return continueTo(chooseCategoryBuilding); + } + }); - // reset pane, in case user somehow happened to change it.. - d3_select('.inspector-wrap .panewrap').style('right', '-100%'); - // disallow scrolling - d3_select('.inspector-wrap').on('wheel.intro', eventCancel); + function continueTo(nextStep) { + select('.inspector-wrap').on('wheel.intro', null); + select('.preset-list-button').on('click.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - d3_select('.preset-search-input') - .on('keydown.intro', null) - .on('keyup.intro', checkPresetSearch); - reveal('.preset-search-input', - t('intro.buildings.search_tank', { preset: tankPreset.name() }) - ); + function closeEditorHouse() { + if (!houseId || !context.hasEntity(houseId)) { + return addHouse(); + } + var ids = context.selectedIDs(); + if (context.mode().id !== 'select' || !ids.length || ids[0] !== houseId) { + context.enter(modeSelect(context, [houseId])); + } - context.history().on('change.intro', null); - } - }); + context.history().checkpoint('hasHouse'); - function checkPresetSearch() { - var first = d3_select('.preset-list-item:first-child'); + context.on('exit.intro', function() { + continueTo(rightClickHouse); + }); - if (first.classed('preset-man_made-storage_tank')) { - reveal(first.select('.preset-list-button').node(), - t('intro.buildings.choose_tank', { preset: tankPreset.name() }), - { duration: 300 } - ); + timeout(function() { + reveal('.entity-editor-pane', + t('intro.buildings.close', { button: icon('#icon-apply', 'pre-text') }) + ); + }, 500); - d3_select('.preset-search-input') - .on('keydown.intro', eventCancel, true) - .on('keyup.intro', null); + function continueTo(nextStep) { + context.on('exit.intro', null); + nextStep(); + } + } - context.history().on('change.intro', function() { - continueTo(closeEditorTank); - }); - } - } - function continueTo(nextStep) { - d3_select('.inspector-wrap').on('wheel.intro', null); - context.on('enter.intro', null); - context.history().on('change.intro', null); - d3_select('.preset-search-input').on('keydown.intro keyup.intro', null); - nextStep(); - } - } + function rightClickHouse() { + if (!houseId) return chapter.restart(); + context.enter(modeBrowse(context)); + context.history().reset('hasHouse'); + context.map().centerEase(house, 500); - function closeEditorTank() { - if (!tankId || !context.hasEntity(tankId)) { - return addTank(); - } - var ids = context.selectedIDs(); - if (context.mode().id !== 'select' || !ids.length || ids[0] !== tankId) { - context.enter(modeSelect(context, [tankId])); - } + timeout(function() { + if (context.map().zoom() < 20) { + context.map().zoomEase(20, 500); + } + }, 520); - context.history().checkpoint('hasTank'); + context.on('enter.intro', function(mode) { + if (mode.id !== 'select') return; + var ids = context.selectedIDs(); + if (ids.length !== 1 || ids[0] !== houseId) return; - context.on('exit.intro', function() { - continueTo(rightClickTank); - }); + timeout(function() { + var node = selectMenuItem('orthogonalize').node(); + if (!node) return; + continueTo(clickSquare); + }, 300); // after menu visible + }); - timeout(function() { - reveal('.entity-editor-pane', - t('intro.buildings.close', { button: icon('#icon-apply', 'pre-text') }) - ); - }, 500); + context.map().on('move.intro drawn.intro', function() { + revealHouse(house, t('intro.buildings.rightclick_building'), { duration: 0 }); + }); - function continueTo(nextStep) { - context.on('exit.intro', null); - nextStep(); - } - } + context.history().on('change.intro', function() { + continueTo(rightClickHouse); + }); + function continueTo(nextStep) { + context.on('enter.intro', null); + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - function rightClickTank() { - if (!tankId) return continueTo(addTank); - context.enter(modeBrowse(context)); - context.history().reset('hasTank'); - context.map().centerEase(tank, 500); + function clickSquare() { + if (!houseId) return chapter.restart(); + var entity = context.hasEntity(houseId); + if (!entity) return continueTo(rightClickHouse); - timeout(function() { - context.on('enter.intro', function(mode) { - if (mode.id !== 'select') return; - var ids = context.selectedIDs(); - if (ids.length !== 1 || ids[0] !== tankId) return; + var node = selectMenuItem('orthogonalize').node(); + if (!node) { return continueTo(rightClickHouse); } - timeout(function() { - var node = selectMenuItem('circularize').node(); - if (!node) return; - continueTo(clickCircle); - }, 300); // after menu visible - }); + var wasChanged = false; + var menuCoords = context.map().mouseCoordinates(); - revealTank(tank, t('intro.buildings.rightclick_tank')); + revealEditMenu(menuCoords, + t('intro.buildings.square_building', { button: icon('#operation-orthogonalize', 'pre-text') }) + ); - context.map().on('move.intro drawn.intro', function() { - revealTank(tank, t('intro.buildings.rightclick_tank'), { duration: 0 }); - }); + context.on('enter.intro', function(mode) { + if (mode.id === 'browse') { + continueTo(rightClickHouse); + } else if (mode.id === 'move' || mode.id === 'rotate') { + continueTo(retryClickSquare); + } + }); - context.history().on('change.intro', function() { - continueTo(rightClickTank); - }); + context.map().on('move.intro drawn.intro', function() { + var node = selectMenuItem('orthogonalize').node(); + if (!wasChanged && !node) { return continueTo(rightClickHouse); } - }, 600); + revealEditMenu(menuCoords, + t('intro.buildings.square_building', { button: icon('#operation-orthogonalize', 'pre-text') }), + { duration: 0 } + ); + }); - function continueTo(nextStep) { - context.on('enter.intro', null); - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + context.history().on('change.intro', function() { + wasChanged = true; + context.history().on('change.intro', null); + + // Something changed. Wait for transition to complete and check undo annotation. + timeout(function() { + if (context.history().undoAnnotation() === t('operations.orthogonalize.annotation.area')) { + continueTo(doneSquare); + } else { + continueTo(retryClickSquare); + } + }, 500); // after transitioned actions + }); + function continueTo(nextStep) { + context.on('enter.intro', null); + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - function clickCircle() { - if (!tankId) return chapter.restart(); - var entity = context.hasEntity(tankId); - if (!entity) return continueTo(rightClickTank); - var node = selectMenuItem('circularize').node(); - if (!node) { return continueTo(rightClickTank); } + function retryClickSquare() { + context.enter(modeBrowse(context)); - var wasChanged = false; - var menuCoords = context.map().mouseCoordinates(); + revealHouse(house, t('intro.buildings.retry_square'), { + buttonText: t('intro.ok'), + buttonCallback: function() { continueTo(rightClickHouse); } + }); - revealEditMenu(menuCoords, - t('intro.buildings.circle_tank', { button: icon('#operation-circularize', 'pre-text') }) - ); + function continueTo(nextStep) { + nextStep(); + } + } - context.on('enter.intro', function(mode) { - if (mode.id === 'browse') { - continueTo(rightClickTank); - } else if (mode.id === 'move' || mode.id === 'rotate') { - continueTo(retryClickCircle); - } - }); - context.map().on('move.intro drawn.intro', function() { - var node = selectMenuItem('circularize').node(); - if (!wasChanged && !node) { return continueTo(rightClickTank); } + function doneSquare() { + context.history().checkpoint('doneSquare'); - revealEditMenu(menuCoords, - t('intro.buildings.circle_tank', { button: icon('#operation-circularize', 'pre-text') }), - { duration: 0 } - ); - }); + revealHouse(house, t('intro.buildings.done_square'), { + buttonText: t('intro.ok'), + buttonCallback: function() { continueTo(addTank); } + }); - context.history().on('change.intro', function() { - wasChanged = true; - context.history().on('change.intro', null); - - // Something changed. Wait for transition to complete and check undo annotation. - timeout(function() { - if (context.history().undoAnnotation() === t('operations.circularize.annotation.area')) { - continueTo(play); - } else { - continueTo(retryClickCircle); - } - }, 500); // after transitioned actions - }); + function continueTo(nextStep) { + nextStep(); + } + } - function continueTo(nextStep) { - context.on('enter.intro', null); - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - nextStep(); - } - } + function addTank() { + context.enter(modeBrowse(context)); + context.history().reset('doneSquare'); + tankId = null; - function retryClickCircle() { - context.enter(modeBrowse(context)); + var msec = transitionTime(tank, context.map().center()); + if (msec) { reveal(null, null, { duration: 0 }); } + context.map().zoom(19.5).centerEase(tank, msec); - revealTank(tank, t('intro.buildings.retry_circle'), { - buttonText: t('intro.ok'), - buttonCallback: function() { continueTo(rightClickTank); } - }); + timeout(function() { + reveal('button.add-area', + t('intro.buildings.add_tank', { button: icon('#icon-area', 'pre-text') }) + ); - function continueTo(nextStep) { - nextStep(); - } - } + context.on('enter.intro', function(mode) { + if (mode.id !== 'add-area') return; + continueTo(startTank); + }); + }, msec + 100); + function continueTo(nextStep) { + context.on('enter.intro', null); + nextStep(); + } + } - function play() { - dispatch$$1.call('done'); - reveal('#id-container', - t('intro.buildings.play', { next: t('intro.startediting.title') }), { - tooltipBox: '.intro-nav-wrap .chapter-startEditing', - buttonText: t('intro.ok'), - buttonCallback: function() { reveal('#id-container'); } - } - ); - } + function startTank() { + if (context.mode().id !== 'add-area') { + return continueTo(addTank); + } - chapter.enter = function() { - addHouse(); - }; + tankId = null; + timeout(function() { + revealTank(tank, t('intro.buildings.start_tank')); - chapter.exit = function() { - timeouts.forEach(window.clearTimeout); - context.on('enter.intro exit.intro', null); - context.map().on('move.intro drawn.intro', null); - context.history().on('change.intro', null); - d3_select('.inspector-wrap').on('wheel.intro', null); - d3_select('.preset-search-input').on('keydown.intro keyup.intro', null); - d3_select('.more-fields .combobox-input').on('click.intro', null); - }; + context.map().on('move.intro drawn.intro', function() { + revealTank(tank, t('intro.buildings.start_tank'), { duration: 0 }); + }); + context.on('enter.intro', function(mode) { + if (mode.id !== 'draw-area') return chapter.restart(); + continueTo(continueTank); + }); - chapter.restart = function() { - chapter.exit(); - chapter.enter(); - }; + }, 550); // after easing + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - return utilRebind(chapter, dispatch$$1, 'on'); -} -function uiModal(selection$$1, blocking) { - var keybinding = d3keybinding('modal'); - var previous = selection$$1.select('div.modal'); - var animate = previous.empty(); + function continueTank() { + if (context.mode().id !== 'draw-area') { + return continueTo(addTank); + } - previous.transition() - .duration(200) - .style('opacity', 0) - .remove(); + tankId = null; - var shaded = selection$$1 - .append('div') - .attr('class', 'shaded') - .style('opacity', 0); - - shaded.close = function() { - shaded - .transition() - .duration(200) - .style('opacity',0) - .remove(); - - modal - .transition() - .duration(200) - .style('top','0px'); - - keybinding.off(); - }; + revealTank(tank, t('intro.buildings.continue_tank')); + context.map().on('move.intro drawn.intro', function() { + revealTank(tank, t('intro.buildings.continue_tank'), { duration: 0 }); + }); - var modal = shaded - .append('div') - .attr('class', 'modal fillL col6'); + context.on('enter.intro', function(mode) { + if (mode.id === 'draw-area') { + return; + } else if (mode.id === 'select') { + tankId = context.selectedIDs()[0]; + return continueTo(searchPresetTank); + } else { + return continueTo(addTank); + } + }); - if (!blocking) { - shaded.on('click.remove-modal', function() { - if (event.target === this) { - shaded.close(); - } - }); + function continueTo(nextStep) { + context.map().on('move.intro drawn.intro', null); + context.on('enter.intro', null); + nextStep(); + } + } - modal.append('button') - .attr('class', 'close') - .on('click', shaded.close) - .call(svgIcon('#icon-close')); - keybinding - .on('⌫', shaded.close) - .on('⎋', shaded.close); + function searchPresetTank() { + if (!tankId || !context.hasEntity(tankId)) { + return addTank(); + } + var ids = context.selectedIDs(); + if (context.mode().id !== 'select' || !ids.length || ids[0] !== tankId) { + context.enter(modeSelect(context, [tankId])); + } - d3_select(document) - .call(keybinding); - } + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - modal - .append('div') - .attr('class', 'content'); + timeout(function() { + // reset pane, in case user somehow happened to change it.. + select('.inspector-wrap .panewrap').style('right', '-100%'); - if (animate) { - shaded.transition().style('opacity', 1); - } else { - shaded.style('opacity', 1); - } + select('.preset-search-input') + .on('keydown.intro', null) + .on('keyup.intro', checkPresetSearch); + reveal('.preset-search-input', + t('intro.buildings.search_tank', { preset: tankPreset.name() }) + ); + }, 400); // after preset list pane visible.. - return shaded; -} + context.on('enter.intro', function(mode) { + if (!tankId || !context.hasEntity(tankId)) { + return continueTo(addTank); + } -function uiIntroStartEditing(context, reveal) { - var dispatch$$1 = dispatch('done', 'startEditing'), - modalSelection = d3_select(null); + var ids = context.selectedIDs(); + if (mode.id !== 'select' || !ids.length || ids[0] !== tankId) { + // keep the user's area selected.. + context.enter(modeSelect(context, [tankId])); + // reset pane, in case user somehow happened to change it.. + select('.inspector-wrap .panewrap').style('right', '-100%'); + // disallow scrolling + select('.inspector-wrap').on('wheel.intro', eventCancel); - var chapter = { - title: 'intro.startediting.title' - }; + select('.preset-search-input') + .on('keydown.intro', null) + .on('keyup.intro', checkPresetSearch); - function showHelp() { - reveal('.map-control.help-control', - t('intro.startediting.help', { button: icon('#icon-help', 'pre-text'), key: t('help.key') }), { - buttonText: t('intro.ok'), - buttonCallback: function() { shortcuts(); } - } - ); - } + reveal('.preset-search-input', + t('intro.buildings.search_tank', { preset: tankPreset.name() }) + ); - function shortcuts() { - reveal('.map-control.help-control', - t('intro.startediting.shortcuts', { key: t('shortcuts.toggle.key') }), { - buttonText: t('intro.ok'), - buttonCallback: function() { showSave(); } - } - ); - } + context.history().on('change.intro', null); + } + }); - function showSave() { - d3_selectAll('.shaded').remove(); // in case user opened keyboard shortcuts - reveal('#bar button.save', - t('intro.startediting.save'), { - buttonText: t('intro.ok'), - buttonCallback: function() { showStart(); } - } - ); - } + function checkPresetSearch() { + var first = select('.preset-list-item:first-child'); - function showStart() { - d3_selectAll('.shaded').remove(); // in case user opened keyboard shortcuts + if (first.classed('preset-man_made-storage_tank')) { + reveal(first.select('.preset-list-button').node(), + t('intro.buildings.choose_tank', { preset: tankPreset.name() }), + { duration: 300 } + ); - modalSelection = uiModal(context.container()); + select('.preset-search-input') + .on('keydown.intro', eventCancel, true) + .on('keyup.intro', null); - modalSelection.select('.modal') - .attr('class', 'modal-splash modal col6'); + context.history().on('change.intro', function() { + continueTo(closeEditorTank); + }); + } + } - modalSelection.selectAll('.close').remove(); + function continueTo(nextStep) { + select('.inspector-wrap').on('wheel.intro', null); + context.on('enter.intro', null); + context.history().on('change.intro', null); + select('.preset-search-input').on('keydown.intro keyup.intro', null); + nextStep(); + } + } - var startbutton = modalSelection.select('.content') - .attr('class', 'fillL') - .append('button') - .attr('class', 'modal-section huge-modal-button') - .on('click', function() { - modalSelection.remove(); - }); - startbutton - .append('svg') - .attr('class', 'illustration') - .append('use') - .attr('xlink:href', '#logo-walkthrough'); + function closeEditorTank() { + if (!tankId || !context.hasEntity(tankId)) { + return addTank(); + } + var ids = context.selectedIDs(); + if (context.mode().id !== 'select' || !ids.length || ids[0] !== tankId) { + context.enter(modeSelect(context, [tankId])); + } - startbutton - .append('h2') - .text(t('intro.startediting.start')); + context.history().checkpoint('hasTank'); - dispatch$$1.call('startEditing'); - } + context.on('exit.intro', function() { + continueTo(rightClickTank); + }); + timeout(function() { + reveal('.entity-editor-pane', + t('intro.buildings.close', { button: icon('#icon-apply', 'pre-text') }) + ); + }, 500); - chapter.enter = function() { - showHelp(); - }; + function continueTo(nextStep) { + context.on('exit.intro', null); + nextStep(); + } + } - chapter.exit = function() { - modalSelection.remove(); - d3_selectAll('.shaded').remove(); // in case user opened keyboard shortcuts - }; + function rightClickTank() { + if (!tankId) return continueTo(addTank); + context.enter(modeBrowse(context)); + context.history().reset('hasTank'); + context.map().centerEase(tank, 500); - return utilRebind(chapter, dispatch$$1, 'on'); -} - -var chapterUi = { - welcome: uiIntroWelcome, - navigation: uiIntroNavigation, - point: uiIntroPoint, - area: uiIntroArea, - line: uiIntroLine, - building: uiIntroBuilding, - startEditing: uiIntroStartEditing -}; - -var chapterFlow = [ - 'welcome', - 'navigation', - 'point', - 'area', - 'line', - 'building', - 'startEditing' -]; - - -function uiIntro(context) { - var introGraph = {}, - currChapter; - - - // create entities for intro graph and localize names - for (var id in dataIntroGraph) { - introGraph[id] = osmEntity$$1(localize(dataIntroGraph[id])); - } - - - function intro(selection$$1) { - context.enter(modeBrowse(context)); - - // Save current map state - var osm = context.connection(), - history = context.history().toJSON(), - hash = window.location.hash, - center = context.map().center(), - zoom = context.map().zoom(), - background = context.background().baseLayerSource(), - overlays = context.background().overlayLayerSources(), - opacity = d3_selectAll('#map .layer-background').style('opacity'), - loadedTiles = osm && osm.loadedTiles(), - baseEntities = context.history().graph().base().entities, - countryCode = services.geocoder.countryCode; - - // Block saving - context.inIntro(true); - - // Load semi-real data used in intro - if (osm) { osm.toggle(false).reset(); } - context.history().reset(); - context.history().merge(values$1(coreGraph$$1().load(introGraph).entities)); - context.history().checkpoint('initial'); - - var esri = context.background().findSource('EsriWorldImagery'); - if (esri) { - context.background().baseLayerSource(esri); - } else { - context.background().bing(); - } - overlays.forEach(function (d) { - context.background().toggleOverlayLayer(d); - }); + timeout(function() { + context.on('enter.intro', function(mode) { + if (mode.id !== 'select') return; + var ids = context.selectedIDs(); + if (ids.length !== 1 || ids[0] !== tankId) return; - // Mock geocoder - services.geocoder.countryCode = function(location, callback) { - callback(null, t('intro.graph.countrycode')); - }; + timeout(function() { + var node = selectMenuItem('circularize').node(); + if (!node) return; + continueTo(clickCircle); + }, 300); // after menu visible + }); - d3_selectAll('#map .layer-background').style('opacity', 1); + revealTank(tank, t('intro.buildings.rightclick_tank')); - var curtain = uiCurtain(); - selection$$1.call(curtain); + context.map().on('move.intro drawn.intro', function() { + revealTank(tank, t('intro.buildings.rightclick_tank'), { duration: 0 }); + }); - // store that the user started the walkthrough.. - context.storage('walkthrough_started', 'yes'); + context.history().on('change.intro', function() { + continueTo(rightClickTank); + }); - // restore previous walkthrough progress.. - var storedProgress = context.storage('walkthrough_progress') || ''; - var progress = storedProgress.split(';').filter(Boolean); + }, 600); - var chapters = chapterFlow.map(function(chapter, i) { - var s = chapterUi[chapter](context, curtain.reveal) - .on('done', function() { - context.presets().init(); // clear away "recent" presets + function continueTo(nextStep) { + context.on('enter.intro', null); + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - buttons.filter(function(d) { - return d.title === s.title; - }).classed('finished', true); - if (i < chapterFlow.length - 1) { - var next = chapterFlow[i + 1]; - d3_select('button.chapter-' + next) - .classed('next', true); - } + function clickCircle() { + if (!tankId) return chapter.restart(); + var entity = context.hasEntity(tankId); + if (!entity) return continueTo(rightClickTank); - // store walkthrough progress.. - progress.push(chapter); - context.storage('walkthrough_progress', uniq(progress).join(';')); - }); - return s; - }); + var node = selectMenuItem('circularize').node(); + if (!node) { return continueTo(rightClickTank); } - chapters[chapters.length - 1].on('startEditing', function() { - // store walkthrough progress.. - progress.push('startEditing'); - context.storage('walkthrough_progress', uniq(progress).join(';')); + var wasChanged = false; + var menuCoords = context.map().mouseCoordinates(); - // store if walkthrough is completed.. - var incomplete = difference(chapterFlow, progress); - if (!incomplete.length) { - context.storage('walkthrough_completed', 'yes'); - } + revealEditMenu(menuCoords, + t('intro.buildings.circle_tank', { button: icon('#operation-circularize', 'pre-text') }) + ); - curtain.remove(); - navwrap.remove(); - d3_selectAll('#map .layer-background').style('opacity', opacity); - if (osm) { osm.toggle(true).reset().loadedTiles(loadedTiles); } - context.history().reset().merge(values$1(baseEntities)); - context.background().baseLayerSource(background); - overlays.forEach(function (d) { context.background().toggleOverlayLayer(d); }); - if (history) { context.history().fromJSON(history, false); } - context.map().centerZoom(center, zoom); - window.location.replace(hash); - services.geocoder.countryCode = countryCode; - context.inIntro(false); - }); + context.on('enter.intro', function(mode) { + if (mode.id === 'browse') { + continueTo(rightClickTank); + } else if (mode.id === 'move' || mode.id === 'rotate') { + continueTo(retryClickCircle); + } + }); - var navwrap = selection$$1 - .append('div') - .attr('class', 'intro-nav-wrap fillD'); + context.map().on('move.intro drawn.intro', function() { + var node = selectMenuItem('circularize').node(); + if (!wasChanged && !node) { return continueTo(rightClickTank); } - navwrap - .append('svg') - .attr('class', 'intro-nav-wrap-logo') - .append('use') - .attr('xlink:href', '#logo-walkthrough'); + revealEditMenu(menuCoords, + t('intro.buildings.circle_tank', { button: icon('#operation-circularize', 'pre-text') }), + { duration: 0 } + ); + }); - var buttonwrap = navwrap - .append('div') - .attr('class', 'joined') - .selectAll('button.chapter'); + context.history().on('change.intro', function() { + wasChanged = true; + context.history().on('change.intro', null); + + // Something changed. Wait for transition to complete and check undo annotation. + timeout(function() { + if (context.history().undoAnnotation() === t('operations.circularize.annotation.area')) { + continueTo(play); + } else { + continueTo(retryClickCircle); + } + }, 500); // after transitioned actions + }); - var buttons = buttonwrap - .data(chapters) - .enter() - .append('button') - .attr('class', function(d, i) { return 'chapter chapter-' + chapterFlow[i]; }) - .on('click', enterChapter); + function continueTo(nextStep) { + context.on('enter.intro', null); + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + nextStep(); + } + } - buttons - .append('span') - .text(function(d) { return t(d.title); }); - buttons - .append('span') - .attr('class', 'status') - .call(svgIcon((textDirection === 'rtl' ? '#icon-backward' : '#icon-forward'), 'inline')); + function retryClickCircle() { + context.enter(modeBrowse(context)); - enterChapter(chapters[0]); + revealTank(tank, t('intro.buildings.retry_circle'), { + buttonText: t('intro.ok'), + buttonCallback: function() { continueTo(rightClickTank); } + }); + function continueTo(nextStep) { + nextStep(); + } + } - function enterChapter(newChapter) { - if (currChapter) { currChapter.exit(); } - context.enter(modeBrowse(context)); - currChapter = newChapter; - currChapter.enter(); + function play() { + dispatch$$1.call('done'); + reveal('#id-container', + t('intro.buildings.play', { next: t('intro.startediting.title') }), { + tooltipBox: '.intro-nav-wrap .chapter-startEditing', + buttonText: t('intro.ok'), + buttonCallback: function() { reveal('#id-container'); } + } + ); + } - buttons - .classed('next', false) - .classed('active', function(d) { - return d.title === currChapter.title; - }); - } - } + chapter.enter = function() { + addHouse(); + }; - return intro; -} -function uiTooltipHtml(text, key, heading) { - var s = ''; + chapter.exit = function() { + timeouts.forEach(window.clearTimeout); + context.on('enter.intro exit.intro', null); + context.map().on('move.intro drawn.intro', null); + context.history().on('change.intro', null); + select('.inspector-wrap').on('wheel.intro', null); + select('.preset-search-input').on('keydown.intro keyup.intro', null); + select('.more-fields .combobox-input').on('click.intro', null); + }; - if (heading) { - s += '
      ' + heading + '
      '; - } - if (text) { - s += '
      ' + text + '
      '; - } - if (key) { - s += '
      ' + t('tooltip_keyhint') + '' + - '' + key + '
      '; - } - return s; -} + chapter.restart = function() { + chapter.exit(); + chapter.enter(); + }; -function uiMapData(context) { - var key = t('map_data.key'); - var features = context.features().keys(); - var layers = context.layers(); - var fills = ['wireframe', 'partial', 'full']; - var _fillSelected = context.storage('area-fill') || 'partial'; - var _shown = false; - var _dataLayerContainer = d3_select(null); - var _fillList = d3_select(null); - var _featureList = d3_select(null); + return utilRebind(chapter, dispatch$$1, 'on'); + } + function uiModal(selection$$1, blocking) { + var keybinding = d3keybinding('modal'); + var previous = selection$$1.select('div.modal'); + var animate = previous.empty(); - function showsFeature(d) { - return context.features().enabled(d); - } + previous.transition() + .duration(200) + .style('opacity', 0) + .remove(); + var shaded = selection$$1 + .append('div') + .attr('class', 'shaded') + .style('opacity', 0); - function autoHiddenFeature(d) { - return context.features().autoHidden(d); - } + shaded.close = function() { + shaded + .transition() + .duration(200) + .style('opacity',0) + .remove(); + modal + .transition() + .duration(200) + .style('top','0px'); - function clickFeature(d) { - context.features().toggle(d); - update(); - } + keybinding.off(); + }; - function showsFill(d) { - return _fillSelected === d; - } + var modal = shaded + .append('div') + .attr('class', 'modal fillL col6'); + if (!blocking) { + shaded.on('click.remove-modal', function() { + if (event.target === this) { + shaded.close(); + } + }); - function setFill(d) { - fills.forEach(function(opt) { - context.surface().classed('fill-' + opt, Boolean(opt === d)); - }); + modal.append('button') + .attr('class', 'close') + .on('click', shaded.close) + .call(svgIcon('#icon-close')); - _fillSelected = d; - context.storage('area-fill', d); - if (d !== 'wireframe') { - context.storage('area-fill-toggle', d); - } - update(); - } + keybinding + .on('⌫', shaded.close) + .on('⎋', shaded.close); + select(document) + .call(keybinding); + } - function showsLayer(which) { - var layer = layers.layer(which); - if (layer) { - return layer.enabled(); - } - return false; - } + modal + .append('div') + .attr('class', 'content'); + if (animate) { + shaded.transition().style('opacity', 1); + } else { + shaded.style('opacity', 1); + } - function setLayer(which, enabled) { - var layer = layers.layer(which); - if (layer) { - layer.enabled(enabled); - update(); - } - } + return shaded; + } - function toggleLayer(which) { - setLayer(which, !showsLayer(which)); - } + function uiIntroStartEditing(context, reveal) { + var dispatch$$1 = dispatch('done', 'startEditing'), + modalSelection = select(null); - function drawPhotoItems(selection$$1) { - var photoKeys = ['mapillary-images', 'mapillary-signs', 'openstreetcam-images']; - var photoLayers = layers.all().filter(function(obj) { return photoKeys.indexOf(obj.id) !== -1; }); - var data = photoLayers.filter(function(obj) { return obj.layer.supported(); }); + var chapter = { + title: 'intro.startediting.title' + }; - function layerSupported(d) { - return d.layer && d.layer.supported(); - } - function layerEnabled(d) { - return layerSupported(d) && d.layer.enabled(); - } + function showHelp() { + reveal('.map-control.help-control', + t('intro.startediting.help', { button: icon('#icon-help', 'pre-text'), key: t('help.key') }), { + buttonText: t('intro.ok'), + buttonCallback: function() { shortcuts(); } + } + ); + } - var ul = selection$$1 - .selectAll('.layer-list-photos') - .data([0]); - - ul = ul.enter() - .append('ul') - .attr('class', 'layer-list layer-list-photos') - .merge(ul); - - var li = ul.selectAll('.list-item-photos') - .data(data); - - li.exit() - .remove(); - - var liEnter = li.enter() - .append('li') - .attr('class', function(d) { return 'list-item-photos list-item-' + d.id; }); - - var labelEnter = liEnter - .append('label') - .each(function(d) { - d3_select(this) - .call(tooltip() - .title(t(d.id.replace('-', '_') + '.tooltip')) - .placement('top') - ); - }); + function shortcuts() { + reveal('.map-control.help-control', + t('intro.startediting.shortcuts', { key: t('shortcuts.toggle.key') }), { + buttonText: t('intro.ok'), + buttonCallback: function() { showSave(); } + } + ); + } - labelEnter - .append('input') - .attr('type', 'checkbox') - .on('change', function(d) { toggleLayer(d.id); }); + function showSave() { + d3_selectAll('.shaded').remove(); // in case user opened keyboard shortcuts + reveal('#bar button.save', + t('intro.startediting.save'), { + buttonText: t('intro.ok'), + buttonCallback: function() { showStart(); } + } + ); + } - labelEnter - .append('span') - .text(function(d) { return t(d.id.replace('-', '_') + '.title'); }); + function showStart() { + d3_selectAll('.shaded').remove(); // in case user opened keyboard shortcuts + modalSelection = uiModal(context.container()); - // Update - li = li - .merge(liEnter); + modalSelection.select('.modal') + .attr('class', 'modal-splash modal col6'); - li - .classed('active', layerEnabled) - .selectAll('input') - .property('checked', layerEnabled); - } + modalSelection.selectAll('.close').remove(); + var startbutton = modalSelection.select('.content') + .attr('class', 'fillL') + .append('button') + .attr('class', 'modal-section huge-modal-button') + .on('click', function() { + modalSelection.remove(); + }); - function drawOsmItem(selection$$1) { - var osm = layers.layer('osm'), - showsOsm = osm.enabled(); + startbutton + .append('svg') + .attr('class', 'illustration') + .append('use') + .attr('xlink:href', '#logo-walkthrough'); - var ul = selection$$1 - .selectAll('.layer-list-osm') - .data(osm ? [0] : []); + startbutton + .append('h2') + .text(t('intro.startediting.start')); - // Exit - ul.exit() - .remove(); + dispatch$$1.call('startEditing'); + } - // Enter - var ulEnter = ul.enter() - .append('ul') - .attr('class', 'layer-list layer-list-osm'); - var liEnter = ulEnter - .append('li') - .attr('class', 'list-item-osm'); + chapter.enter = function() { + showHelp(); + }; - var labelEnter = liEnter - .append('label') - .call(tooltip() - .title(t('map_data.layers.osm.tooltip')) - .placement('top') - ); - labelEnter - .append('input') - .attr('type', 'checkbox') - .on('change', function() { toggleLayer('osm'); }); - - labelEnter - .append('span') - .text(t('map_data.layers.osm.title')); - - // Update - ul = ul - .merge(ulEnter); - - ul.selectAll('.list-item-osm') - .classed('active', showsOsm) - .selectAll('input') - .property('checked', showsOsm); - } - - - function drawGpxItem(selection$$1) { - var gpx = layers.layer('gpx'), - hasGpx = gpx && gpx.hasGpx(), - showsGpx = hasGpx && gpx.enabled(); - - var ul = selection$$1 - .selectAll('.layer-list-gpx') - .data(gpx ? [0] : []); - - // Exit - ul.exit() - .remove(); - - // Enter - var ulEnter = ul.enter() - .append('ul') - .attr('class', 'layer-list layer-list-gpx'); - - var liEnter = ulEnter - .append('li') - .attr('class', 'list-item-gpx'); - - liEnter - .append('button') - .attr('class', 'list-item-gpx-extent') - .call(tooltip() - .title(t('gpx.zoom')) - .placement((textDirection === 'rtl') ? 'right' : 'left') - ) - .on('click', function() { - event.preventDefault(); - event.stopPropagation(); - gpx.fitZoom(); - }) - .call(svgIcon('#icon-search')); - - liEnter - .append('button') - .attr('class', 'list-item-gpx-browse') - .call(tooltip() - .title(t('gpx.browse')) - .placement((textDirection === 'rtl') ? 'right' : 'left') - ) - .on('click', function() { - d3_select(document.createElement('input')) - .attr('type', 'file') - .on('change', function() { - gpx.files(event.target.files); - }) - .node().click(); - }) - .call(svgIcon('#icon-geolocate')); - - var labelEnter = liEnter - .append('label') - .call(tooltip() - .title(t('gpx.drag_drop')) - .placement('top') - ); + chapter.exit = function() { + modalSelection.remove(); + d3_selectAll('.shaded').remove(); // in case user opened keyboard shortcuts + }; - labelEnter - .append('input') - .attr('type', 'checkbox') - .on('change', function() { toggleLayer('gpx'); }); - - labelEnter - .append('span') - .text(t('gpx.local_layer')); - - // Update - ul = ul - .merge(ulEnter); - - ul.selectAll('.list-item-gpx') - .classed('active', showsGpx) - .selectAll('label') - .classed('deemphasize', !hasGpx) - .selectAll('input') - .property('disabled', !hasGpx) - .property('checked', showsGpx); - } - - - function drawListItems(selection$$1, data, type, name, change, active) { - var items = selection$$1.selectAll('li') - .data(data); - - // Exit - items.exit() - .remove(); - - // Enter - var enter = items.enter() - .append('li') - .attr('class', 'layer') - .call(tooltip() - .html(true) - .title(function(d) { - var tip = t(name + '.' + d + '.tooltip'), - key = (d === 'wireframe' ? t('area_fill.wireframe.key') : null); - - if (name === 'feature' && autoHiddenFeature(d)) { - var msg = showsLayer('osm') ? t('map_data.autohidden') : t('map_data.osmhidden'); - tip += '
      ' + msg + '
      '; - } - return uiTooltipHtml(tip, key); - }) - .placement('top') - ); - var label = enter - .append('label'); - - label - .append('input') - .attr('type', type) - .attr('name', name) - .on('change', change); - - label - .append('span') - .text(function(d) { return t(name + '.' + d + '.description'); }); - - // Update - items = items - .merge(enter); - - items - .classed('active', active) - .selectAll('input') - .property('checked', active) - .property('indeterminate', function(d) { - return (name === 'feature' && autoHiddenFeature(d)); - }); - } + return utilRebind(chapter, dispatch$$1, 'on'); + } + var chapterUi = { + welcome: uiIntroWelcome, + navigation: uiIntroNavigation, + point: uiIntroPoint, + area: uiIntroArea, + line: uiIntroLine, + building: uiIntroBuilding, + startEditing: uiIntroStartEditing + }; - function renderDataLayers(selection$$1) { - var container = selection$$1.selectAll('data-layer-container') - .data([0]); + var chapterFlow = [ + 'welcome', + 'navigation', + 'point', + 'area', + 'line', + 'building', + 'startEditing' + ]; - _dataLayerContainer = container.enter() - .append('div') - .attr('class', 'data-layer-container') - .merge(container); - } + function uiIntro(context) { + var introGraph = {}, + currChapter; - function renderFillList(selection$$1) { - var container = selection$$1.selectAll('layer-fill-list') - .data([0]); - _fillList = container.enter() - .append('ul') - .attr('class', 'layer-list layer-fill-list') - .merge(container); - } + // create entities for intro graph and localize names + for (var id in dataIntroGraph) { + introGraph[id] = osmEntity$$1(localize(dataIntroGraph[id])); + } - function renderFeatureList(selection$$1) { - var container = selection$$1.selectAll('layer-feature-list') - .data([0]); + function intro(selection$$1) { + context.enter(modeBrowse(context)); + + // Save current map state + var osm = context.connection(), + history = context.history().toJSON(), + hash = window.location.hash, + center = context.map().center(), + zoom = context.map().zoom(), + background = context.background().baseLayerSource(), + overlays = context.background().overlayLayerSources(), + opacity = d3_selectAll('#map .layer-background').style('opacity'), + loadedTiles = osm && osm.loadedTiles(), + baseEntities = context.history().graph().base().entities, + countryCode = services.geocoder.countryCode; + + // Block saving + context.inIntro(true); + + // Load semi-real data used in intro + if (osm) { osm.toggle(false).reset(); } + context.history().reset(); + context.history().merge(values$1(coreGraph$$1().load(introGraph).entities)); + context.history().checkpoint('initial'); + + var esri = context.background().findSource('EsriWorldImagery'); + if (esri) { + context.background().baseLayerSource(esri); + } else { + context.background().bing(); + } + overlays.forEach(function (d) { + context.background().toggleOverlayLayer(d); + }); - _featureList = container.enter() - .append('ul') - .attr('class', 'layer-list layer-feature-list') - .merge(container); - } + // Mock geocoder + services.geocoder.countryCode = function(location, callback) { + callback(null, t('intro.graph.countrycode')); + }; + d3_selectAll('#map .layer-background').style('opacity', 1); - function update() { - _dataLayerContainer - .call(drawOsmItem) - .call(drawPhotoItems) - .call(drawGpxItem); + var curtain = uiCurtain(); + selection$$1.call(curtain); - _fillList - .call(drawListItems, fills, 'radio', 'area_fill', setFill, showsFill); + // store that the user started the walkthrough.. + context.storage('walkthrough_started', 'yes'); - _featureList - .call(drawListItems, features, 'checkbox', 'feature', clickFeature, showsFeature); - } + // restore previous walkthrough progress.. + var storedProgress = context.storage('walkthrough_progress') || ''; + var progress = storedProgress.split(';').filter(Boolean); + var chapters = chapterFlow.map(function(chapter, i) { + var s = chapterUi[chapter](context, curtain.reveal) + .on('done', function() { + context.presets().init(); // clear away "recent" presets - function toggleWireframe() { - if (event) { - event.preventDefault(); - event.stopPropagation(); - } + buttons.filter(function(d) { + return d.title === s.title; + }).classed('finished', true); - if (_fillSelected === 'wireframe') { - _fillSelected = context.storage('area-fill-toggle') || 'partial'; - } else { - _fillSelected = 'wireframe'; - } + if (i < chapterFlow.length - 1) { + var next = chapterFlow[i + 1]; + select('button.chapter-' + next) + .classed('next', true); + } - setFill(_fillSelected); - context.map().pan([0,0]); // trigger a redraw - } + // store walkthrough progress.. + progress.push(chapter); + context.storage('walkthrough_progress', uniq(progress).join(';')); + }); + return s; + }); + chapters[chapters.length - 1].on('startEditing', function() { + // store walkthrough progress.. + progress.push('startEditing'); + context.storage('walkthrough_progress', uniq(progress).join(';')); + + // store if walkthrough is completed.. + var incomplete = difference(chapterFlow, progress); + if (!incomplete.length) { + context.storage('walkthrough_completed', 'yes'); + } + + curtain.remove(); + navwrap.remove(); + d3_selectAll('#map .layer-background').style('opacity', opacity); + if (osm) { osm.toggle(true).reset().loadedTiles(loadedTiles); } + context.history().reset().merge(values$1(baseEntities)); + context.background().baseLayerSource(background); + overlays.forEach(function (d) { context.background().toggleOverlayLayer(d); }); + if (history) { context.history().fromJSON(history, false); } + context.map().centerZoom(center, zoom); + window.location.replace(hash); + services.geocoder.countryCode = countryCode; + context.inIntro(false); + }); - function mapData(selection$$1) { + var navwrap = selection$$1 + .append('div') + .attr('class', 'intro-nav-wrap fillD'); - function hidePane() { - setVisible(false); - } + navwrap + .append('svg') + .attr('class', 'intro-nav-wrap-logo') + .append('use') + .attr('xlink:href', '#logo-walkthrough'); - function togglePane() { - if (event) event.preventDefault(); - paneTooltip.hide(button); - setVisible(!button.classed('active')); - } + var buttonwrap = navwrap + .append('div') + .attr('class', 'joined') + .selectAll('button.chapter'); - function setVisible(show) { - if (show !== _shown) { - button.classed('active', show); - _shown = show; - - if (show) { - uiBackground.hidePane(); - uiHelp.hidePane(); - update(); - - pane - .style('display', 'block') - .style('right', '-300px') - .transition() - .duration(200) - .style('right', '0px'); - - } else { - pane - .style('display', 'block') - .style('right', '0px') - .transition() - .duration(200) - .style('right', '-300px') - .on('end', function() { - d3_select(this).style('display', 'none'); - }); - } - } - } + var buttons = buttonwrap + .data(chapters) + .enter() + .append('button') + .attr('class', function(d, i) { return 'chapter chapter-' + chapterFlow[i]; }) + .on('click', enterChapter); + buttons + .append('span') + .text(function(d) { return t(d.title); }); - var pane = selection$$1 - .append('div') - .attr('class', 'fillL map-overlay col3 content hide'); + buttons + .append('span') + .attr('class', 'status') + .call(svgIcon((textDirection === 'rtl' ? '#icon-backward' : '#icon-forward'), 'inline')); - var paneTooltip = tooltip() - .placement((textDirection === 'rtl') ? 'right' : 'left') - .html(true) - .title(uiTooltipHtml(t('map_data.description'), key)); + enterChapter(chapters[0]); - var button = selection$$1 - .append('button') - .attr('tabindex', -1) - .on('click', togglePane) - .call(svgIcon('#icon-data', 'light')) - .call(paneTooltip); + function enterChapter(newChapter) { + if (currChapter) { currChapter.exit(); } + context.enter(modeBrowse(context)); - pane - .append('h2') - .text(t('map_data.title')); + currChapter = newChapter; + currChapter.enter(); + buttons + .classed('next', false) + .classed('active', function(d) { + return d.title === currChapter.title; + }); + } + } - // data layers - pane - .append('div') - .attr('class', 'map-data-data-layers') - .call(uiDisclosure(context, 'data_layers', true) - .title(t('map_data.data_layers')) - .content(renderDataLayers) - ); - // area fills - pane - .append('div') - .attr('class', 'map-data-area-fills') - .call(uiDisclosure(context, 'fill_area', false) - .title(t('map_data.fill_area')) - .content(renderFillList) - ); + return intro; + } - // feature filters - pane - .append('div') - .attr('class', 'map-data-feature-filters') - .call(uiDisclosure(context, 'map_features', false) - .title(t('map_data.map_features')) - .content(renderFeatureList) - ); + function uiTooltipHtml(text, key, heading) { + var s = ''; + if (heading) { + s += '
      ' + heading + '
      '; + } + if (text) { + s += '
      ' + text + '
      '; + } + if (key) { + s += '
      ' + t('tooltip_keyhint') + '' + + '' + key + '
      '; + } - // add listeners - context.features() - .on('change.map_data-update', update); + return s; + } - update(); - setFill(_fillSelected); + function uiMapData(context) { + var key = t('map_data.key'); + var features = context.features().keys(); + var layers = context.layers(); + var fills = ['wireframe', 'partial', 'full']; - var keybinding = d3keybinding('features') - .on(key, togglePane) - .on(t('area_fill.wireframe.key'), toggleWireframe) - .on([t('background.key'), t('help.key')], hidePane); + var _fillSelected = context.storage('area-fill') || 'partial'; + var _shown = false; + var _dataLayerContainer = select(null); + var _fillList = select(null); + var _featureList = select(null); - d3_select(document) - .call(keybinding); - uiMapData.hidePane = hidePane; - uiMapData.togglePane = togglePane; - uiMapData.setVisible = setVisible; - } + function showsFeature(d) { + return context.features().enabled(d); + } - return mapData; -} -function uiShortcuts() { - var detected = utilDetect(); - var activeTab = 0; - var modalSelection; - var savedSelection; + function autoHiddenFeature(d) { + return context.features().autoHidden(d); + } - var keybinding = d3keybinding('shortcuts') - .on(t('shortcuts.toggle.key'), function () { - if (d3_selectAll('.modal-shortcuts').size()) { // already showing - if (modalSelection) { - modalSelection.close(); - modalSelection = null; - } - } else { - modalSelection = uiModal(savedSelection); - shortcutsModal(modalSelection); - } - }); + function clickFeature(d) { + context.features().toggle(d); + update(); + } - d3_select(document) - .call(keybinding); + function showsFill(d) { + return _fillSelected === d; + } - function shortcutsModal(modalSelection) { - modalSelection.select('.modal') - .classed('modal-shortcuts', true); + function setFill(d) { + fills.forEach(function(opt) { + context.surface().classed('fill-' + opt, Boolean(opt === d)); + }); - var shortcutsModal = modalSelection.select('.content'); + _fillSelected = d; + context.storage('area-fill', d); + if (d !== 'wireframe') { + context.storage('area-fill-toggle', d); + } + update(); + } - shortcutsModal - .append('div') - .attr('class', 'modal-section') - .append('h3') - .text(t('shortcuts.title')); - shortcutsModal - .call(render); - } + function showsLayer(which) { + var layer = layers.layer(which); + if (layer) { + return layer.enabled(); + } + return false; + } - function render(selection$$1) { - var wrapper = selection$$1 - .selectAll('.wrapper') - .data([0]); + function setLayer(which, enabled) { + var layer = layers.layer(which); + if (layer) { + layer.enabled(enabled); + update(); + } + } - var wrapperEnter = wrapper - .enter() - .append('div') - .attr('class', 'wrapper modal-section'); - var tabsBar = wrapperEnter - .append('div') - .attr('class', 'tabs-bar'); + function toggleLayer(which) { + setLayer(which, !showsLayer(which)); + } - var shortcutsList = wrapperEnter - .append('div') - .attr('class', 'shortcuts-list'); - wrapper = wrapper.merge(wrapperEnter); + function drawPhotoItems(selection$$1) { + var photoKeys = ['mapillary-images', 'mapillary-signs', 'openstreetcam-images']; + var photoLayers = layers.all().filter(function(obj) { return photoKeys.indexOf(obj.id) !== -1; }); + var data = photoLayers.filter(function(obj) { return obj.layer.supported(); }); - var tabs = tabsBar - .selectAll('.tab') - .data(dataShortcuts); + function layerSupported(d) { + return d.layer && d.layer.supported(); + } + function layerEnabled(d) { + return layerSupported(d) && d.layer.enabled(); + } - var tabsEnter = tabs - .enter() - .append('div') - .attr('class', 'tab') - .on('click', function (d, i) { - activeTab = i; - render(selection$$1); - }); + var ul = selection$$1 + .selectAll('.layer-list-photos') + .data([0]); + + ul = ul.enter() + .append('ul') + .attr('class', 'layer-list layer-list-photos') + .merge(ul); + + var li = ul.selectAll('.list-item-photos') + .data(data); + + li.exit() + .remove(); + + var liEnter = li.enter() + .append('li') + .attr('class', function(d) { return 'list-item-photos list-item-' + d.id; }); + + var labelEnter = liEnter + .append('label') + .each(function(d) { + select(this) + .call(tooltip() + .title(t(d.id.replace('-', '_') + '.tooltip')) + .placement('top') + ); + }); + + labelEnter + .append('input') + .attr('type', 'checkbox') + .on('change', function(d) { toggleLayer(d.id); }); + + labelEnter + .append('span') + .text(function(d) { return t(d.id.replace('-', '_') + '.title'); }); + + + // Update + li = li + .merge(liEnter); + + li + .classed('active', layerEnabled) + .selectAll('input') + .property('checked', layerEnabled); + } - tabsEnter - .append('span') - .text(function (d) { return t(d.text); }); - tabs = tabs - .merge(tabsEnter); + function drawOsmItem(selection$$1) { + var osm = layers.layer('osm'), + showsOsm = osm.enabled(); - // Update - wrapper.selectAll('.tab') - .classed('active', function (d, i) { - return i === activeTab; - }); + var ul = selection$$1 + .selectAll('.layer-list-osm') + .data(osm ? [0] : []); + // Exit + ul.exit() + .remove(); - var shortcuts = shortcutsList - .selectAll('.shortcut-tab') - .data(dataShortcuts); - - var shortcutsEnter = shortcuts - .enter() - .append('div') - .attr('class', function(d) { return 'shortcut-tab shortcut-tab-' + d.tab; }); - - var columnsEnter = shortcutsEnter - .selectAll('.shortcut-column') - .data(function (d) { return d.columns; }) - .enter() - .append('table') - .attr('class', 'shortcut-column'); - - var rowsEnter = columnsEnter - .selectAll('.shortcut-row') - .data(function (d) { return d.rows; }) - .enter() - .append('tr') - .attr('class', 'shortcut-row'); - - - var sectionRows = rowsEnter - .filter(function (d) { return !d.shortcuts; }); - - sectionRows - .append('td'); - - sectionRows - .append('td') - .attr('class', 'shortcut-section') - .append('h3') - .text(function (d) { return t(d.text); }); - - - var shortcutRows = rowsEnter - .filter(function (d) { return d.shortcuts; }); - - var shortcutKeys = shortcutRows - .append('td') - .attr('class', 'shortcut-keys'); - - var modifierKeys = shortcutKeys - .filter(function (d) { return d.modifiers; }); - - modifierKeys - .selectAll('kbd.modifier') - .data(function (d) { - if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') { - return ['⌘']; - } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') { - return []; - } else { - return d.modifiers; - } - }) - .enter() - .each(function () { - var selection$$1 = d3_select(this); - - selection$$1 - .append('kbd') - .attr('class', 'modifier') - .text(function (d) { return uiCmd.display(d); }); - - selection$$1 - .append('span') - .text('+'); - }); + // Enter + var ulEnter = ul.enter() + .append('ul') + .attr('class', 'layer-list layer-list-osm'); + var liEnter = ulEnter + .append('li') + .attr('class', 'list-item-osm'); - shortcutKeys - .selectAll('kbd.shortcut') - .data(function (d) { - var arr = d.shortcuts; - if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') { - arr = ['Y']; - } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') { - arr = ['F11']; - } - - return arr.map(function(s) { - return { - shortcut: s, - separator: d.separator - }; - }); - }) - .enter() - .each(function (d, i, nodes) { - var selection$$1 = d3_select(this); - var click = d.shortcut.toLowerCase().match(/(.*).click/); - - if (click && click[1]) { - selection$$1 - .call(svgIcon('#walkthrough-mouse', 'mouseclick', click[1])); - } else { - selection$$1 - .append('kbd') - .attr('class', 'shortcut') - .text(function (d) { - var key = d.shortcut; - return key.indexOf('.') !== -1 ? uiCmd.display(t(key)) : uiCmd.display(key); - }); - } - - if (i < nodes.length - 1) { - selection$$1 - .append('span') - .text(d.separator || '\u00a0' + t('shortcuts.or') + '\u00a0'); - } - }); + var labelEnter = liEnter + .append('label') + .call(tooltip() + .title(t('map_data.layers.osm.tooltip')) + .placement('top') + ); + labelEnter + .append('input') + .attr('type', 'checkbox') + .on('change', function() { toggleLayer('osm'); }); - shortcutKeys - .filter(function(d) { return d.gesture; }) - .each(function () { - var selection$$1 = d3_select(this); + labelEnter + .append('span') + .text(t('map_data.layers.osm.title')); - selection$$1 - .append('span') - .text('+'); + // Update + ul = ul + .merge(ulEnter); - selection$$1 - .append('span') - .attr('class', 'gesture') - .text(function (d) { return t(d.gesture); }); - }); + ul.selectAll('.list-item-osm') + .classed('active', showsOsm) + .selectAll('input') + .property('checked', showsOsm); + } - shortcutRows - .append('td') - .attr('class', 'shortcut-desc') - .text(function (d) { return d.text ? t(d.text) : '\u00a0'; }); + function drawGpxItem(selection$$1) { + var gpx = layers.layer('gpx'), + hasGpx = gpx && gpx.hasGpx(), + showsGpx = hasGpx && gpx.enabled(); + + var ul = selection$$1 + .selectAll('.layer-list-gpx') + .data(gpx ? [0] : []); + + // Exit + ul.exit() + .remove(); + + // Enter + var ulEnter = ul.enter() + .append('ul') + .attr('class', 'layer-list layer-list-gpx'); + + var liEnter = ulEnter + .append('li') + .attr('class', 'list-item-gpx'); + + liEnter + .append('button') + .attr('class', 'list-item-gpx-extent') + .call(tooltip() + .title(t('gpx.zoom')) + .placement((textDirection === 'rtl') ? 'right' : 'left') + ) + .on('click', function() { + event.preventDefault(); + event.stopPropagation(); + gpx.fitZoom(); + }) + .call(svgIcon('#icon-search')); + + liEnter + .append('button') + .attr('class', 'list-item-gpx-browse') + .call(tooltip() + .title(t('gpx.browse')) + .placement((textDirection === 'rtl') ? 'right' : 'left') + ) + .on('click', function() { + select(document.createElement('input')) + .attr('type', 'file') + .on('change', function() { + gpx.files(event.target.files); + }) + .node().click(); + }) + .call(svgIcon('#icon-geolocate')); + + var labelEnter = liEnter + .append('label') + .call(tooltip() + .title(t('gpx.drag_drop')) + .placement('top') + ); + + labelEnter + .append('input') + .attr('type', 'checkbox') + .on('change', function() { toggleLayer('gpx'); }); + + labelEnter + .append('span') + .text(t('gpx.local_layer')); + + // Update + ul = ul + .merge(ulEnter); + + ul.selectAll('.list-item-gpx') + .classed('active', showsGpx) + .selectAll('label') + .classed('deemphasize', !hasGpx) + .selectAll('input') + .property('disabled', !hasGpx) + .property('checked', showsGpx); + } - shortcuts = shortcuts - .merge(shortcutsEnter); + function drawListItems(selection$$1, data, type, name, change, active) { + var items = selection$$1.selectAll('li') + .data(data); + + // Exit + items.exit() + .remove(); + + // Enter + var enter = items.enter() + .append('li') + .attr('class', 'layer') + .call(tooltip() + .html(true) + .title(function(d) { + var tip = t(name + '.' + d + '.tooltip'), + key = (d === 'wireframe' ? t('area_fill.wireframe.key') : null); + + if (name === 'feature' && autoHiddenFeature(d)) { + var msg = showsLayer('osm') ? t('map_data.autohidden') : t('map_data.osmhidden'); + tip += '
      ' + msg + '
      '; + } + return uiTooltipHtml(tip, key); + }) + .placement('top') + ); + + var label = enter + .append('label'); + + label + .append('input') + .attr('type', type) + .attr('name', name) + .on('change', change); + + label + .append('span') + .text(function(d) { return t(name + '.' + d + '.description'); }); + + // Update + items = items + .merge(enter); + + items + .classed('active', active) + .selectAll('input') + .property('checked', active) + .property('indeterminate', function(d) { + return (name === 'feature' && autoHiddenFeature(d)); + }); + } - // Update - wrapper.selectAll('.shortcut-tab') - .style('display', function (d, i) { - return i === activeTab ? 'flex' : 'none'; - }); - } + function renderDataLayers(selection$$1) { + var container = selection$$1.selectAll('data-layer-container') + .data([0]); - return function(selection$$1, show) { - savedSelection = selection$$1; - if (show) { - modalSelection = uiModal(selection$$1); - shortcutsModal(modalSelection); - } - }; -} - -function uiHelp(context) { - var key = t('help.key'); - - var docKeys = [ - ['help', [ - 'welcome', - 'open_data_h', - 'open_data', - 'before_start_h', - 'before_start', - 'open_source_h', - 'open_source', - 'open_source_help' - ]], - ['overview', [ - 'navigation_h', - 'navigation_drag', - 'navigation_zoom', - 'features_h', - 'features', - 'nodes_ways' - ]], - ['editing', [ - 'select_h', - 'select_left_click', - 'select_right_click', - 'multiselect_h', - 'multiselect_shift_click', - 'multiselect_lasso', - 'undo_redo_h', - 'undo_redo', - 'save_h', - 'save', - 'save_validation', - 'upload_h', - 'upload', - 'backups_h', - 'backups', - 'keyboard_h', - 'keyboard' - ]], - ['feature_editor', [ - 'intro', - 'definitions', - 'type_h', - 'type', - 'type_picker', - 'fields_h', - 'fields_all_fields', - 'fields_example', - 'fields_add_field', - 'tags_h', - 'tags_all_tags', - 'tags_resources' - ]], - ['points', [ - 'intro', - 'add_point_h', - 'add_point', - 'add_point_finish', - 'move_point_h', - 'move_point', - 'delete_point_h', - 'delete_point', - 'delete_point_command' - ]], - ['lines', [ - 'intro', - 'add_line_h', - 'add_line', - 'add_line_draw', - 'add_line_finish', - 'modify_line_h', - 'modify_line_dragnode', - 'modify_line_addnode', - 'connect_line_h', - 'connect_line', - 'connect_line_display', - 'connect_line_drag', - 'connect_line_tag', - 'disconnect_line_h', - 'disconnect_line_command', - 'move_line_h', - 'move_line_command', - 'move_line_connected', - 'delete_line_h', - 'delete_line', - 'delete_line_command' - ]], - ['areas', [ - 'intro', - 'point_or_area_h', - 'point_or_area', - 'add_area_h', - 'add_area_command', - 'add_area_draw', - 'add_area_finish', - 'square_area_h', - 'square_area_command', - 'modify_area_h', - 'modify_area_dragnode', - 'modify_area_addnode', - 'delete_area_h', - 'delete_area', - 'delete_area_command' - ]], - ['relations', [ - 'intro', - 'edit_relation_h', - 'edit_relation', - 'edit_relation_add', - 'edit_relation_delete', - 'maintain_relation_h', - 'maintain_relation', - 'relation_types_h', - 'multipolygon_h', - 'multipolygon', - 'multipolygon_create', - 'multipolygon_merge', - 'turn_restriction_h', - 'turn_restriction', - 'turn_restriction_field', - 'turn_restriction_editing', - 'route_h', - 'route', - 'route_add', - 'boundary_h', - 'boundary', - 'boundary_add' - ]], - ['imagery', [ - 'intro', - 'sources_h', - 'choosing', - 'sources', - 'offsets_h', - 'offset', - 'offset_change' - ]], - ['streetlevel', [ - 'intro', - 'using_h', - 'using', - 'photos', - 'viewer' - ]], - ['gps', [ - 'intro', - 'survey', - 'using_h', - 'using', - 'tracing', - 'upload' - ]] - ]; + _dataLayerContainer = container.enter() + .append('div') + .attr('class', 'data-layer-container') + .merge(container); + } - var headings = { - 'help.help.open_data_h': 3, - 'help.help.before_start_h': 3, - 'help.help.open_source_h': 3, - 'help.overview.navigation_h': 3, - 'help.overview.features_h': 3, - 'help.editing.select_h': 3, - 'help.editing.multiselect_h': 3, - 'help.editing.undo_redo_h': 3, - 'help.editing.save_h': 3, - 'help.editing.upload_h': 3, - 'help.editing.backups_h': 3, - 'help.editing.keyboard_h': 3, - 'help.feature_editor.type_h': 3, - 'help.feature_editor.fields_h': 3, - 'help.feature_editor.tags_h': 3, - 'help.points.add_point_h': 3, - 'help.points.move_point_h': 3, - 'help.points.delete_point_h': 3, - 'help.lines.add_line_h': 3, - 'help.lines.modify_line_h': 3, - 'help.lines.connect_line_h': 3, - 'help.lines.disconnect_line_h': 3, - 'help.lines.move_line_h': 3, - 'help.lines.delete_line_h': 3, - 'help.areas.point_or_area_h': 3, - 'help.areas.add_area_h': 3, - 'help.areas.square_area_h': 3, - 'help.areas.modify_area_h': 3, - 'help.areas.delete_area_h': 3, - 'help.relations.edit_relation_h': 3, - 'help.relations.maintain_relation_h': 3, - 'help.relations.relation_types_h': 2, - 'help.relations.multipolygon_h': 3, - 'help.relations.turn_restriction_h': 3, - 'help.relations.route_h': 3, - 'help.relations.boundary_h': 3, - 'help.imagery.sources_h': 3, - 'help.imagery.offsets_h': 3, - 'help.streetlevel.using_h': 3, - 'help.gps.using_h': 3, - }; - var replacements = { - point: icon('#icon-point', 'pre-text'), - line: icon('#icon-line', 'pre-text'), - area: icon('#icon-area', 'pre-text'), - plus: icon('#icon-plus', 'pre-text'), - minus: icon('#icon-minus', 'pre-text'), - orthogonalize: icon('#operation-orthogonalize', 'pre-text'), - disconnect: icon('#operation-disconnect', 'pre-text'), - layers: icon('#icon-layers', 'pre-text'), - data: icon('#icon-data', 'pre-text'), - inspect: icon('#icon-inspect', 'pre-text'), - move: icon('#operation-move', 'pre-text'), - merge: icon('#operation-merge', 'pre-text'), - delete: icon('#operation-delete', 'pre-text'), - close: icon('#icon-close', 'pre-text'), - undo: icon(textDirection === 'rtl' ? '#icon-redo' : '#icon-undo', 'pre-text'), - redo: icon(textDirection === 'rtl' ? '#icon-undo' : '#icon-redo', 'pre-text'), - save: icon('#icon-save', 'pre-text'), - leftclick: icon('#walkthrough-mouse', 'pre-text mouseclick', 'left'), - rightclick: icon('#walkthrough-mouse', 'pre-text mouseclick', 'right'), - shift: uiCmd.display('⇧'), - alt: uiCmd.display('⌥'), - return: uiCmd.display('↵'), - version: context.version - }; + function renderFillList(selection$$1) { + var container = selection$$1.selectAll('layer-fill-list') + .data([0]); - // For each section, squash all the texts into a single markdown document - var docs = docKeys.map(function(key) { - var helpkey = 'help.' + key[0]; - var text = key[1].reduce(function(all, part) { - var subkey = helpkey + '.' + part; - var depth = headings[subkey]; // is this subkey a heading? - var hhh = depth ? Array(depth + 1).join('#') + ' ' : ''; // if so, prepend with some ##'s - return all + hhh + t(subkey, replacements) + '\n\n'; - }, ''); + _fillList = container.enter() + .append('ul') + .attr('class', 'layer-list layer-fill-list') + .merge(container); + } - return { - title: t(helpkey + '.title'), - html: marked(text.trim()) - }; - }); + function renderFeatureList(selection$$1) { + var container = selection$$1.selectAll('layer-feature-list') + .data([0]); - function help(selection$$1) { + _featureList = container.enter() + .append('ul') + .attr('class', 'layer-list layer-feature-list') + .merge(container); + } - function hidePane() { - setVisible(false); - } + function update() { + _dataLayerContainer + .call(drawOsmItem) + .call(drawPhotoItems) + .call(drawGpxItem); - function togglePane() { - if (event) event.preventDefault(); - tooltipBehavior.hide(button); - setVisible(!button.classed('active')); - } + _fillList + .call(drawListItems, fills, 'radio', 'area_fill', setFill, showsFill); + _featureList + .call(drawListItems, features, 'checkbox', 'feature', clickFeature, showsFeature); + } - function setVisible(show) { - if (show !== shown) { - button.classed('active', show); - shown = show; - - if (show) { - uiBackground.hidePane(); - uiMapData.hidePane(); - - pane.style('display', 'block') - .style('right', '-500px') - .transition() - .duration(200) - .style('right', '0px'); - - } else { - pane.style('right', '0px') - .transition() - .duration(200) - .style('right', '-500px') - .on('end', function() { - d3_select(this).style('display', 'none'); - }); - } - } - } + function toggleWireframe() { + if (event) { + event.preventDefault(); + event.stopPropagation(); + } - function clickHelp(d, i) { - var rtl = (textDirection === 'rtl'); - pane.property('scrollTop', 0); - doctitle.html(d.title); + if (_fillSelected === 'wireframe') { + _fillSelected = context.storage('area-fill-toggle') || 'partial'; + } else { + _fillSelected = 'wireframe'; + } - body.html(d.html); - body.selectAll('a') - .attr('target', '_blank'); - menuItems.classed('selected', function(m) { - return m.title === d.title; - }); + setFill(_fillSelected); + context.map().pan([0,0]); // trigger a redraw + } - nav.html(''); - if (rtl) { - nav.call(drawNext).call(drawPrevious); - } else { - nav.call(drawPrevious).call(drawNext); - } + function mapData(selection$$1) { - function drawNext(selection$$1) { - if (i < docs.length - 1) { - var nextLink = selection$$1 - .append('a') - .attr('class', 'next') - .on('click', function() { - clickHelp(docs[i + 1], i + 1); - }); - - nextLink - .append('span') - .text(docs[i + 1].title) - .call(svgIcon((rtl ? '#icon-backward' : '#icon-forward'), 'inline')); - } - } + function hidePane() { + setVisible(false); + } + function togglePane() { + if (event) event.preventDefault(); + paneTooltip.hide(button); + setVisible(!button.classed('active')); + } - function drawPrevious(selection$$1) { - if (i > 0) { - var prevLink = selection$$1 - .append('a') - .attr('class', 'previous') - .on('click', function() { - clickHelp(docs[i - 1], i - 1); - }); - - prevLink - .call(svgIcon((rtl ? '#icon-forward' : '#icon-backward'), 'inline')) - .append('span') - .text(docs[i - 1].title); - } - } - } + function setVisible(show) { + if (show !== _shown) { + button.classed('active', show); + _shown = show; + + if (show) { + uiBackground.hidePane(); + uiHelp.hidePane(); + update(); + + pane + .style('display', 'block') + .style('right', '-300px') + .transition() + .duration(200) + .style('right', '0px'); + + } else { + pane + .style('display', 'block') + .style('right', '0px') + .transition() + .duration(200) + .style('right', '-300px') + .on('end', function() { + select(this).style('display', 'none'); + }); + } + } + } - function clickWalkthrough() { - if (context.inIntro()) return; - context.container().call(uiIntro(context)); - setVisible(false); - } + var pane = selection$$1 + .append('div') + .attr('class', 'fillL map-pane col4 hide'); + + var paneTooltip = tooltip() + .placement((textDirection === 'rtl') ? 'right' : 'left') + .html(true) + .title(uiTooltipHtml(t('map_data.description'), key)); + + var button = selection$$1 + .append('button') + .attr('tabindex', -1) + .on('click', togglePane) + .call(svgIcon('#icon-data', 'light')) + .call(paneTooltip); + + + var heading = pane + .append('div') + .attr('class', 'pane-heading'); + + heading + .append('h2') + .text(t('map_data.title')); + + heading + .append('button') + .on('click', function() { uiMapData.hidePane(); }) + .call(svgIcon('#icon-close')); + + + var content = pane + .append('div') + .attr('class', 'pane-content'); + + // data layers + content + .append('div') + .attr('class', 'map-data-data-layers') + .call(uiDisclosure(context, 'data_layers', true) + .title(t('map_data.data_layers')) + .content(renderDataLayers) + ); + + // area fills + content + .append('div') + .attr('class', 'map-data-area-fills') + .call(uiDisclosure(context, 'fill_area', false) + .title(t('map_data.fill_area')) + .content(renderFillList) + ); + + // feature filters + content + .append('div') + .attr('class', 'map-data-feature-filters') + .call(uiDisclosure(context, 'map_features', false) + .title(t('map_data.map_features')) + .content(renderFeatureList) + ); + + + // add listeners + context.features() + .on('change.map_data-update', update); + + update(); + setFill(_fillSelected); + + var keybinding = d3keybinding('features') + .on(key, togglePane) + .on(t('area_fill.wireframe.key'), toggleWireframe) + .on([t('background.key'), t('help.key')], hidePane); + + select(document) + .call(keybinding); + + uiMapData.hidePane = hidePane; + uiMapData.togglePane = togglePane; + uiMapData.setVisible = setVisible; + } + return mapData; + } - function clickShortcuts() { - context.container().call(uiShortcuts(context), true); - } + function uiShortcuts() { + var detected = utilDetect(); + var activeTab = 0; + var modalSelection; + var savedSelection; - var pane = selection$$1.append('div') - .attr('class', 'help-wrap map-overlay fillL col6 content hide'); - var tooltipBehavior = tooltip() - .placement((textDirection === 'rtl') ? 'right' : 'left') - .html(true) - .title(uiTooltipHtml(t('help.title'), key)); - var button = selection$$1.append('button') - .attr('tabindex', -1) - .on('click', togglePane) - .call(svgIcon('#icon-help', 'light')) - .call(tooltipBehavior); - var shown = false; - - - var toc = pane - .append('ul') - .attr('class', 'toc'); - - var menuItems = toc.selectAll('li') - .data(docs) - .enter() - .append('li') - .append('a') - .html(function(d) { return d.title; }) - .on('click', clickHelp); - - var shortcuts = toc - .append('li') - .attr('class', 'shortcuts') - .call(tooltip() - .html(true) - .title(uiTooltipHtml(t('shortcuts.tooltip'), '?')) - .placement('top') - ) - .append('a') - .on('click', clickShortcuts); - - shortcuts - .append('div') - .text(t('shortcuts.title')); - - var walkthrough = toc - .append('li') - .attr('class', 'walkthrough') - .append('a') - .on('click', clickWalkthrough); - - walkthrough - .append('svg') - .attr('class', 'logo logo-walkthrough') - .append('use') - .attr('xlink:href', '#logo-walkthrough'); - - walkthrough - .append('div') - .text(t('splash.walkthrough')); - - - var content = pane - .append('div') - .attr('class', 'left-content'); - - var doctitle = content - .append('h2') - .text(t('help.title')); - - var body = content - .append('div') - .attr('class', 'body'); - - var nav = content - .append('div') - .attr('class', 'nav'); - - clickHelp(docs[0], 0); - - var keybinding = d3keybinding('help') - .on(key, togglePane) - .on([t('background.key'), t('map_data.key')], hidePane); - - d3_select(document) - .call(keybinding); - - uiHelp.hidePane = hidePane; - uiHelp.togglePane = togglePane; - uiHelp.setVisible = setVisible; - } - - return help; -} - -function localeDateString(s) { - if (!s) return null; - var detected = utilDetect(); - var options = { day: 'numeric', month: 'short', year: 'numeric' }; - var d = new Date(s); - if (isNaN(d.getTime())) return null; - return d.toLocaleDateString(detected.locale, options); -} - -function vintageRange(vintage) { - var s; - if (vintage.start || vintage.end) { - s = (vintage.start || '?'); - if (vintage.start !== vintage.end) { - s += ' - ' + (vintage.end || '?'); - } - } - return s; -} + var keybinding = d3keybinding('shortcuts') + .on(t('shortcuts.toggle.key'), function () { + if (d3_selectAll('.modal-shortcuts').size()) { // already showing + if (modalSelection) { + modalSelection.close(); + modalSelection = null; + } + } else { + modalSelection = uiModal(savedSelection); + shortcutsModal(modalSelection); + } + }); + select(document) + .call(keybinding); -function rendererBackgroundSource(data) { - var source = clone(data); - var offset = [0, 0]; - var name = source.name; - var description = source.description; - var best = !!source.best; - var template = source.template; - source.scaleExtent = data.scaleExtent || [0, 22]; - source.overzoom = data.overzoom !== false; + function shortcutsModal(modalSelection) { + modalSelection.select('.modal') + .classed('modal-shortcuts', true); - source.offset = function(_) { - if (!arguments.length) return offset; - offset = _; - return source; - }; + var shortcutsModal = modalSelection.select('.content'); + shortcutsModal + .append('div') + .attr('class', 'modal-section') + .append('h3') + .text(t('shortcuts.title')); - source.nudge = function(_, zoomlevel) { - offset[0] += _[0] / Math.pow(2, zoomlevel); - offset[1] += _[1] / Math.pow(2, zoomlevel); - return source; - }; + shortcutsModal + .call(render); + } - source.name = function() { - var id_safe = source.id.replace('.', ''); - return t('imagery.' + id_safe + '.name', { default: name }); - }; + function render(selection$$1) { + var wrapper = selection$$1 + .selectAll('.wrapper') + .data([0]); + + var wrapperEnter = wrapper + .enter() + .append('div') + .attr('class', 'wrapper modal-section'); + + var tabsBar = wrapperEnter + .append('div') + .attr('class', 'tabs-bar'); + + var shortcutsList = wrapperEnter + .append('div') + .attr('class', 'shortcuts-list'); + + wrapper = wrapper.merge(wrapperEnter); + + var tabs = tabsBar + .selectAll('.tab') + .data(dataShortcuts); + + var tabsEnter = tabs + .enter() + .append('div') + .attr('class', 'tab') + .on('click', function (d, i) { + activeTab = i; + render(selection$$1); + }); + + tabsEnter + .append('span') + .text(function (d) { return t(d.text); }); + + tabs = tabs + .merge(tabsEnter); + + // Update + wrapper.selectAll('.tab') + .classed('active', function (d, i) { + return i === activeTab; + }); + + + var shortcuts = shortcutsList + .selectAll('.shortcut-tab') + .data(dataShortcuts); + + var shortcutsEnter = shortcuts + .enter() + .append('div') + .attr('class', function(d) { return 'shortcut-tab shortcut-tab-' + d.tab; }); + + var columnsEnter = shortcutsEnter + .selectAll('.shortcut-column') + .data(function (d) { return d.columns; }) + .enter() + .append('table') + .attr('class', 'shortcut-column'); + + var rowsEnter = columnsEnter + .selectAll('.shortcut-row') + .data(function (d) { return d.rows; }) + .enter() + .append('tr') + .attr('class', 'shortcut-row'); + + + var sectionRows = rowsEnter + .filter(function (d) { return !d.shortcuts; }); + + sectionRows + .append('td'); + + sectionRows + .append('td') + .attr('class', 'shortcut-section') + .append('h3') + .text(function (d) { return t(d.text); }); + + + var shortcutRows = rowsEnter + .filter(function (d) { return d.shortcuts; }); + + var shortcutKeys = shortcutRows + .append('td') + .attr('class', 'shortcut-keys'); + + var modifierKeys = shortcutKeys + .filter(function (d) { return d.modifiers; }); + + modifierKeys + .selectAll('kbd.modifier') + .data(function (d) { + if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') { + return ['⌘']; + } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') { + return []; + } else { + return d.modifiers; + } + }) + .enter() + .each(function () { + var selection$$1 = select(this); + + selection$$1 + .append('kbd') + .attr('class', 'modifier') + .text(function (d) { return uiCmd.display(d); }); + + selection$$1 + .append('span') + .text('+'); + }); + + + shortcutKeys + .selectAll('kbd.shortcut') + .data(function (d) { + var arr = d.shortcuts; + if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') { + arr = ['Y']; + } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') { + arr = ['F11']; + } + + return arr.map(function(s) { + return { + shortcut: s, + separator: d.separator + }; + }); + }) + .enter() + .each(function (d, i, nodes) { + var selection$$1 = select(this); + var click = d.shortcut.toLowerCase().match(/(.*).click/); + + if (click && click[1]) { + selection$$1 + .call(svgIcon('#walkthrough-mouse', 'mouseclick', click[1])); + } else { + selection$$1 + .append('kbd') + .attr('class', 'shortcut') + .text(function (d) { + var key = d.shortcut; + return key.indexOf('.') !== -1 ? uiCmd.display(t(key)) : uiCmd.display(key); + }); + } + + if (i < nodes.length - 1) { + selection$$1 + .append('span') + .text(d.separator || '\u00a0' + t('shortcuts.or') + '\u00a0'); + } + }); + + + shortcutKeys + .filter(function(d) { return d.gesture; }) + .each(function () { + var selection$$1 = select(this); + + selection$$1 + .append('span') + .text('+'); + + selection$$1 + .append('span') + .attr('class', 'gesture') + .text(function (d) { return t(d.gesture); }); + }); + + + shortcutRows + .append('td') + .attr('class', 'shortcut-desc') + .text(function (d) { return d.text ? t(d.text) : '\u00a0'; }); + + + shortcuts = shortcuts + .merge(shortcutsEnter); + + // Update + wrapper.selectAll('.shortcut-tab') + .style('display', function (d, i) { + return i === activeTab ? 'flex' : 'none'; + }); + } - source.description = function() { - var id_safe = source.id.replace('.', ''); - return t('imagery.' + id_safe + '.description', { default: description }); - }; + return function(selection$$1, show) { + savedSelection = selection$$1; + if (show) { + modalSelection = uiModal(selection$$1); + shortcutsModal(modalSelection); + } + }; + } + function uiHelp(context) { + var key = t('help.key'); + + var docKeys = [ + ['help', [ + 'welcome', + 'open_data_h', + 'open_data', + 'before_start_h', + 'before_start', + 'open_source_h', + 'open_source', + 'open_source_help' + ]], + ['overview', [ + 'navigation_h', + 'navigation_drag', + 'navigation_zoom', + 'features_h', + 'features', + 'nodes_ways' + ]], + ['editing', [ + 'select_h', + 'select_left_click', + 'select_right_click', + 'multiselect_h', + 'multiselect_shift_click', + 'multiselect_lasso', + 'undo_redo_h', + 'undo_redo', + 'save_h', + 'save', + 'save_validation', + 'upload_h', + 'upload', + 'backups_h', + 'backups', + 'keyboard_h', + 'keyboard' + ]], + ['feature_editor', [ + 'intro', + 'definitions', + 'type_h', + 'type', + 'type_picker', + 'fields_h', + 'fields_all_fields', + 'fields_example', + 'fields_add_field', + 'tags_h', + 'tags_all_tags', + 'tags_resources' + ]], + ['points', [ + 'intro', + 'add_point_h', + 'add_point', + 'add_point_finish', + 'move_point_h', + 'move_point', + 'delete_point_h', + 'delete_point', + 'delete_point_command' + ]], + ['lines', [ + 'intro', + 'add_line_h', + 'add_line', + 'add_line_draw', + 'add_line_finish', + 'modify_line_h', + 'modify_line_dragnode', + 'modify_line_addnode', + 'connect_line_h', + 'connect_line', + 'connect_line_display', + 'connect_line_drag', + 'connect_line_tag', + 'disconnect_line_h', + 'disconnect_line_command', + 'move_line_h', + 'move_line_command', + 'move_line_connected', + 'delete_line_h', + 'delete_line', + 'delete_line_command' + ]], + ['areas', [ + 'intro', + 'point_or_area_h', + 'point_or_area', + 'add_area_h', + 'add_area_command', + 'add_area_draw', + 'add_area_finish', + 'square_area_h', + 'square_area_command', + 'modify_area_h', + 'modify_area_dragnode', + 'modify_area_addnode', + 'delete_area_h', + 'delete_area', + 'delete_area_command' + ]], + ['relations', [ + 'intro', + 'edit_relation_h', + 'edit_relation', + 'edit_relation_add', + 'edit_relation_delete', + 'maintain_relation_h', + 'maintain_relation', + 'relation_types_h', + 'multipolygon_h', + 'multipolygon', + 'multipolygon_create', + 'multipolygon_merge', + 'turn_restriction_h', + 'turn_restriction', + 'turn_restriction_field', + 'turn_restriction_editing', + 'route_h', + 'route', + 'route_add', + 'boundary_h', + 'boundary', + 'boundary_add' + ]], + ['imagery', [ + 'intro', + 'sources_h', + 'choosing', + 'sources', + 'offsets_h', + 'offset', + 'offset_change' + ]], + ['streetlevel', [ + 'intro', + 'using_h', + 'using', + 'photos', + 'viewer' + ]], + ['gps', [ + 'intro', + 'survey', + 'using_h', + 'using', + 'tracing', + 'upload' + ]] + ]; - source.best = function() { - return best; - }; + var headings = { + 'help.help.open_data_h': 3, + 'help.help.before_start_h': 3, + 'help.help.open_source_h': 3, + 'help.overview.navigation_h': 3, + 'help.overview.features_h': 3, + 'help.editing.select_h': 3, + 'help.editing.multiselect_h': 3, + 'help.editing.undo_redo_h': 3, + 'help.editing.save_h': 3, + 'help.editing.upload_h': 3, + 'help.editing.backups_h': 3, + 'help.editing.keyboard_h': 3, + 'help.feature_editor.type_h': 3, + 'help.feature_editor.fields_h': 3, + 'help.feature_editor.tags_h': 3, + 'help.points.add_point_h': 3, + 'help.points.move_point_h': 3, + 'help.points.delete_point_h': 3, + 'help.lines.add_line_h': 3, + 'help.lines.modify_line_h': 3, + 'help.lines.connect_line_h': 3, + 'help.lines.disconnect_line_h': 3, + 'help.lines.move_line_h': 3, + 'help.lines.delete_line_h': 3, + 'help.areas.point_or_area_h': 3, + 'help.areas.add_area_h': 3, + 'help.areas.square_area_h': 3, + 'help.areas.modify_area_h': 3, + 'help.areas.delete_area_h': 3, + 'help.relations.edit_relation_h': 3, + 'help.relations.maintain_relation_h': 3, + 'help.relations.relation_types_h': 2, + 'help.relations.multipolygon_h': 3, + 'help.relations.turn_restriction_h': 3, + 'help.relations.route_h': 3, + 'help.relations.boundary_h': 3, + 'help.imagery.sources_h': 3, + 'help.imagery.offsets_h': 3, + 'help.streetlevel.using_h': 3, + 'help.gps.using_h': 3, + }; + var replacements = { + point: icon('#icon-point', 'pre-text'), + line: icon('#icon-line', 'pre-text'), + area: icon('#icon-area', 'pre-text'), + plus: icon('#icon-plus', 'pre-text'), + minus: icon('#icon-minus', 'pre-text'), + orthogonalize: icon('#operation-orthogonalize', 'pre-text'), + disconnect: icon('#operation-disconnect', 'pre-text'), + layers: icon('#icon-layers', 'pre-text'), + data: icon('#icon-data', 'pre-text'), + inspect: icon('#icon-inspect', 'pre-text'), + move: icon('#operation-move', 'pre-text'), + merge: icon('#operation-merge', 'pre-text'), + delete: icon('#operation-delete', 'pre-text'), + close: icon('#icon-close', 'pre-text'), + undo: icon(textDirection === 'rtl' ? '#icon-redo' : '#icon-undo', 'pre-text'), + redo: icon(textDirection === 'rtl' ? '#icon-undo' : '#icon-redo', 'pre-text'), + save: icon('#icon-save', 'pre-text'), + leftclick: icon('#walkthrough-mouse', 'pre-text mouseclick', 'left'), + rightclick: icon('#walkthrough-mouse', 'pre-text mouseclick', 'right'), + shift: uiCmd.display('⇧'), + alt: uiCmd.display('⌥'), + return: uiCmd.display('↵'), + version: context.version + }; - source.area = function() { - if (!data.polygon) return Number.MAX_VALUE; // worldwide - var area = d3_geoArea({ type: 'MultiPolygon', coordinates: [ data.polygon ] }); - return isNaN(area) ? 0 : area; - }; + // For each section, squash all the texts into a single markdown document + var docs = docKeys.map(function(key) { + var helpkey = 'help.' + key[0]; + var text = key[1].reduce(function(all, part) { + var subkey = helpkey + '.' + part; + var depth = headings[subkey]; // is this subkey a heading? + var hhh = depth ? Array(depth + 1).join('#') + ' ' : ''; // if so, prepend with some ##'s + return all + hhh + t(subkey, replacements) + '\n\n'; + }, ''); + + return { + title: t(helpkey + '.title'), + html: marked(text.trim()) + }; + }); - source.imageryUsed = function() { - return name || source.id; - }; + function help(selection$$1) { + function hidePane() { + setVisible(false); + } - source.template = function(_) { - if (!arguments.length) return template; - if (source.id === 'custom') template = _; - return source; - }; + function togglePane() { + if (event) event.preventDefault(); + tooltipBehavior.hide(button); + setVisible(!button.classed('active')); + } - source.url = function(coord) { - if (this.type === 'wms') { - var tileToProjectedCoords = (function(x, y, z) { - //polyfill for IE11, PhantomJS - var sinh = Math.sinh || function(x) { - var y = Math.exp(x); - return (y - 1 / y) / 2; - }; - - var zoomSize = Math.pow(2, z); - var lon = x / zoomSize * Math.PI * 2 - Math.PI; - var lat = Math.atan(sinh(Math.PI * (1 - 2 * y / zoomSize))); - - switch (this.projection) { - case 'EPSG:4326': // todo: alternative codes of WGS 84? - return { - x: lon * 180 / Math.PI, - y: lat * 180 / Math.PI - }; - default: // EPSG:3857 and synonyms - var mercCoords = mercatorRaw(lon, lat); - return { - x: 20037508.34 / Math.PI * mercCoords[0], - y: 20037508.34 / Math.PI * mercCoords[1] - }; - } - }).bind(this); - var minXmaxY = tileToProjectedCoords(coord[0], coord[1], coord[2]); - var maxXminY = tileToProjectedCoords(coord[0]+1, coord[1]+1, coord[2]); - return template - .replace('{width}', 256) - .replace('{height}', 256) - .replace('{proj}', this.projection) - .replace('{bbox}', minXmaxY.x + ',' + maxXminY.y + ',' + maxXminY.x + ',' + minXmaxY.y); - } - return template - .replace('{x}', coord[0]) - .replace('{y}', coord[1]) - // TMS-flipped y coordinate - .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1) - .replace(/\{z(oom)?\}/, coord[2]) - .replace(/\{switch:([^}]+)\}/, function(s, r) { - var subdomains = r.split(','); - return subdomains[(coord[0] + coord[1]) % subdomains.length]; - }) - .replace('{u}', function() { - var u = ''; - for (var zoom = coord[2]; zoom > 0; zoom--) { - var b = 0; - var mask = 1 << (zoom - 1); - if ((coord[0] & mask) !== 0) b++; - if ((coord[1] & mask) !== 0) b += 2; - u += b.toString(); - } - return u; - }); - }; + function setVisible(show) { + if (show !== shown) { + button.classed('active', show); + shown = show; + + if (show) { + uiBackground.hidePane(); + uiMapData.hidePane(); + + pane.style('display', 'block') + .style('right', '-500px') + .transition() + .duration(200) + .style('right', '0px'); + + } else { + pane.style('right', '0px') + .transition() + .duration(200) + .style('right', '-500px') + .on('end', function() { + select(this).style('display', 'none'); + }); + } + } + } - source.intersects = function(extent) { - extent = extent.polygon(); - return !data.polygon || data.polygon.some(function(polygon) { - return geoPolygonIntersectsPolygon(polygon, extent, true); - }); - }; + function clickHelp(d, i) { + var rtl = (textDirection === 'rtl'); + pane.property('scrollTop', 0); + doctitle.html(d.title); + + body.html(d.html); + body.selectAll('a') + .attr('target', '_blank'); + menuItems.classed('selected', function(m) { + return m.title === d.title; + }); + + nav.html(''); + if (rtl) { + nav.call(drawNext).call(drawPrevious); + } else { + nav.call(drawPrevious).call(drawNext); + } + + + function drawNext(selection$$1) { + if (i < docs.length - 1) { + var nextLink = selection$$1 + .append('a') + .attr('class', 'next') + .on('click', function() { + clickHelp(docs[i + 1], i + 1); + }); + + nextLink + .append('span') + .text(docs[i + 1].title) + .call(svgIcon((rtl ? '#icon-backward' : '#icon-forward'), 'inline')); + } + } + + + function drawPrevious(selection$$1) { + if (i > 0) { + var prevLink = selection$$1 + .append('a') + .attr('class', 'previous') + .on('click', function() { + clickHelp(docs[i - 1], i - 1); + }); + + prevLink + .call(svgIcon((rtl ? '#icon-forward' : '#icon-backward'), 'inline')) + .append('span') + .text(docs[i - 1].title); + } + } + } - source.validZoom = function(z) { - return source.scaleExtent[0] <= z && - (source.overzoom || source.scaleExtent[1] > z); - }; + function clickWalkthrough() { + if (context.inIntro()) return; + context.container().call(uiIntro(context)); + setVisible(false); + } - source.isLocatorOverlay = function() { - return source.id === 'mapbox_locator_overlay'; - }; + function clickShortcuts() { + context.container().call(uiShortcuts(context), true); + } - /* hides a source from the list, but leaves it available for use */ - source.isHidden = function() { - return source.id === 'DigitalGlobe-Premium-vintage' || - source.id === 'DigitalGlobe-Standard-vintage'; - }; + var pane = selection$$1.append('div') + .attr('class', 'help-wrap map-pane fillL col6 hide'); - source.copyrightNotices = function() {}; + var tooltipBehavior = tooltip() + .placement((textDirection === 'rtl') ? 'right' : 'left') + .html(true) + .title(uiTooltipHtml(t('help.title'), key)); + var button = selection$$1.append('button') + .attr('tabindex', -1) + .on('click', togglePane) + .call(svgIcon('#icon-help', 'light')) + .call(tooltipBehavior); - source.getMetadata = function(center, tileCoord, callback) { - var vintage = { - start: localeDateString(source.startDate), - end: localeDateString(source.endDate) - }; - vintage.range = vintageRange(vintage); + var shown = false; - var metadata = { vintage: vintage }; - callback(null, metadata); - }; + var heading = pane + .append('div') + .attr('class', 'pane-heading'); - return source; -} + var doctitle = heading + .append('h2') + .text(t('help.title')); + heading + .append('button') + .on('click', function() { uiHelp.hidePane(); }) + .call(svgIcon('#icon-close')); -rendererBackgroundSource.Bing = function(data, dispatch) { - // http://msdn.microsoft.com/en-us/library/ff701716.aspx - // http://msdn.microsoft.com/en-us/library/ff701701.aspx - data.template = 'https://ecn.t{switch:0,1,2,3}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z'; + var content = pane + .append('div') + .attr('class', 'pane-content'); - var bing = rendererBackgroundSource(data), - key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU', // Same as P2 and JOSM - url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + - key + '&jsonp={callback}', - cache = {}, - inflight = {}, - providers = []; + var toc = content + .append('ul') + .attr('class', 'toc'); - jsonpRequest(url, function(json) { - providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) { - return { - attribution: provider.attribution, - areas: provider.coverageAreas.map(function(area) { - return { - zoom: [area.zoomMin, area.zoomMax], - extent: geoExtent$$1([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]]) - }; - }) - }; - }); - dispatch.call('change'); - }); + var menuItems = toc.selectAll('li') + .data(docs) + .enter() + .append('li') + .append('a') + .html(function(d) { return d.title; }) + .on('click', clickHelp); + var shortcuts = toc + .append('li') + .attr('class', 'shortcuts') + .call(tooltip() + .html(true) + .title(uiTooltipHtml(t('shortcuts.tooltip'), '?')) + .placement('top') + ) + .append('a') + .on('click', clickShortcuts); - bing.copyrightNotices = function(zoom, extent) { - zoom = Math.min(zoom, 21); - return providers.filter(function(provider) { - return some(provider.areas, function(area) { - return extent.intersects(area.extent) && - area.zoom[0] <= zoom && - area.zoom[1] >= zoom; - }); - }).map(function(provider) { - return provider.attribution; - }).join(', '); - }; + shortcuts + .append('div') + .text(t('shortcuts.title')); + var walkthrough = toc + .append('li') + .attr('class', 'walkthrough') + .append('a') + .on('click', clickWalkthrough); - bing.getMetadata = function(center, tileCoord, callback) { - var tileId = tileCoord.slice(0, 3).join('/'), - zoom = Math.min(tileCoord[2], 21), - centerPoint = center[1] + ',' + center[0], // lat,lng - url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/' + centerPoint + - '?zl=' + zoom + '&key=' + key + '&jsonp={callback}'; + walkthrough + .append('svg') + .attr('class', 'logo logo-walkthrough') + .append('use') + .attr('xlink:href', '#logo-walkthrough'); - if (inflight[tileId]) return; + walkthrough + .append('div') + .text(t('splash.walkthrough')); - if (!cache[tileId]) { - cache[tileId] = {}; - } - if (cache[tileId] && cache[tileId].metadata) { - return callback(null, cache[tileId].metadata); - } - inflight[tileId] = true; - jsonpRequest(url, function(result) { - delete inflight[tileId]; + var helpContent = content + .append('div') + .attr('class', 'left-content'); - var err = (!result && 'Unknown Error') || result.errorDetails; - if (err) { - return callback(err); - } else { - var vintage = { - start: localeDateString(result.resourceSets[0].resources[0].vintageStart), - end: localeDateString(result.resourceSets[0].resources[0].vintageEnd) - }; - vintage.range = vintageRange(vintage); - - var metadata = { vintage: vintage }; - cache[tileId].metadata = metadata; - return callback(null, metadata); - } - }); - }; + var body = helpContent + .append('div') + .attr('class', 'body'); + var nav = helpContent + .append('div') + .attr('class', 'nav'); - bing.terms_url = 'https://blog.openstreetmap.org/2010/11/30/microsoft-imagery-details'; + clickHelp(docs[0], 0); + var keybinding = d3keybinding('help') + .on(key, togglePane) + .on([t('background.key'), t('map_data.key')], hidePane); - return bing; -}; + select(document) + .call(keybinding); + + uiHelp.hidePane = hidePane; + uiHelp.togglePane = togglePane; + uiHelp.setVisible = setVisible; + } + return help; + } + function localeDateString(s) { + if (!s) return null; + var detected = utilDetect(); + var options = { day: 'numeric', month: 'short', year: 'numeric' }; + var d = new Date(s); + if (isNaN(d.getTime())) return null; + return d.toLocaleDateString(detected.locale, options); + } -rendererBackgroundSource.Esri = function(data) { + function vintageRange(vintage) { + var s; + if (vintage.start || vintage.end) { + s = (vintage.start || '?'); + if (vintage.start !== vintage.end) { + s += ' - ' + (vintage.end || '?'); + } + } + return s; + } - // don't request blank tiles, instead overzoom real tiles - #4327 - // deprecated technique, but it works (for now) - if (data.template.match(/blankTile/) === null) { - data.template = data.template + '?blankTile=false'; - } - var esri = rendererBackgroundSource(data), - cache = {}, - inflight = {}; + function rendererBackgroundSource(data) { + var source = clone(data); + var offset = [0, 0]; + var name = source.name; + var description = source.description; + var best = !!source.best; + var template = source.template; - esri.getMetadata = function(center, tileCoord, callback) { - var tileId = tileCoord.slice(0, 3).join('/'), - zoom = Math.min(tileCoord[2], esri.scaleExtent[1]), - centerPoint = center[0] + ',' + center[1], // long, lat (as it should be) - unknown = t('info_panels.background.unknown'), - metadataLayer, - vintage = {}, - metadata = {}; + source.scaleExtent = data.scaleExtent || [0, 22]; + source.overzoom = data.overzoom !== false; - if (inflight[tileId]) return; - switch (true) { - case (zoom >= 20 && esri.id === 'EsriWorldImageryClarity'): - metadataLayer = 4; - break; - case zoom >= 19: - metadataLayer = 3; - break; - case zoom >= 17: - metadataLayer = 2; - break; - case zoom >= 13: - metadataLayer = 0; - break; - default: - metadataLayer = 99; - } + source.offset = function(_) { + if (!arguments.length) return offset; + offset = _; + return source; + }; - var url; - // build up query using the layer appropriate to the current zoom - if (esri.id === 'EsriWorldImagery') { - url = 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/'; - } else if (esri.id === 'EsriWorldImageryClarity') { - url = 'https://serviceslab.arcgisonline.com/arcgis/rest/services/Clarity_World_Imagery/MapServer/'; - } - url += metadataLayer + '/query?returnGeometry=false&geometry=' + centerPoint + '&inSR=4326&geometryType=esriGeometryPoint&outFields=*&f=json&callback={callback}'; + source.nudge = function(_, zoomlevel) { + offset[0] += _[0] / Math.pow(2, zoomlevel); + offset[1] += _[1] / Math.pow(2, zoomlevel); + return source; + }; - if (!cache[tileId]) { - cache[tileId] = {}; - } - if (cache[tileId] && cache[tileId].metadata) { - return callback(null, cache[tileId].metadata); - } - // accurate metadata is only available >= 13 - if (metadataLayer === 99) { - vintage = { - start: null, - end: null, - range: null - }; - metadata = { - vintage: null, - source: unknown, - description: unknown, - resolution: unknown, - accuracy: unknown - }; + source.name = function() { + var id_safe = source.id.replace('.', ''); + return t('imagery.' + id_safe + '.name', { default: name }); + }; - callback(null, metadata); - } else { - inflight[tileId] = true; - jsonpRequest(url, function(result) { - delete inflight[tileId]; - - var err; - if (!result) { - err = 'Unknown Error'; - } else if (result.features && result.features.length < 1) { - err = 'No Results'; - } else if (result.error && result.error.message) { - err = result.error.message; - } - - if (err) { - return callback(err); - } else { - // pass through the discrete capture date from metadata - var captureDate = localeDateString(result.features[0].attributes.SRC_DATE2); - vintage = { - start: captureDate, - end: captureDate, - range: captureDate - }; - metadata = { - vintage: vintage, - source: clean(result.features[0].attributes.NICE_NAME), - description: clean(result.features[0].attributes.NICE_DESC), - resolution: clean(result.features[0].attributes.SRC_RES), - accuracy: clean(result.features[0].attributes.SRC_ACC) - }; - - // append units - meters - if (isFinite(metadata.resolution)) { - metadata.resolution += ' m'; - } - if (isFinite(metadata.accuracy)) { - metadata.accuracy += ' m'; - } - - cache[tileId].metadata = metadata; - return callback(null, metadata); - } - }); - } + source.description = function() { + var id_safe = source.id.replace('.', ''); + return t('imagery.' + id_safe + '.description', { default: description }); + }; - function clean(val) { - return String(val).trim() || unknown; - } - }; + source.best = function() { + return best; + }; - return esri; -}; + source.area = function() { + if (!data.polygon) return Number.MAX_VALUE; // worldwide + var area = d3_geoArea({ type: 'MultiPolygon', coordinates: [ data.polygon ] }); + return isNaN(area) ? 0 : area; + }; -rendererBackgroundSource.None = function() { - var source = rendererBackgroundSource({ id: 'none', template: '' }); + source.imageryUsed = function() { + return name || source.id; + }; - source.name = function() { - return t('background.none'); - }; + source.template = function(_) { + if (!arguments.length) return template; + if (source.id === 'custom') template = _; + return source; + }; - source.imageryUsed = function() { - return 'None'; - }; + source.url = function(coord) { + if (this.type === 'wms') { + var tileToProjectedCoords = (function(x, y, z) { + //polyfill for IE11, PhantomJS + var sinh = Math.sinh || function(x) { + var y = Math.exp(x); + return (y - 1 / y) / 2; + }; + + var zoomSize = Math.pow(2, z); + var lon = x / zoomSize * Math.PI * 2 - Math.PI; + var lat = Math.atan(sinh(Math.PI * (1 - 2 * y / zoomSize))); + + switch (this.projection) { + case 'EPSG:4326': // todo: alternative codes of WGS 84? + return { + x: lon * 180 / Math.PI, + y: lat * 180 / Math.PI + }; + default: // EPSG:3857 and synonyms + var mercCoords = mercatorRaw(lon, lat); + return { + x: 20037508.34 / Math.PI * mercCoords[0], + y: 20037508.34 / Math.PI * mercCoords[1] + }; + } + }).bind(this); + var minXmaxY = tileToProjectedCoords(coord[0], coord[1], coord[2]); + var maxXminY = tileToProjectedCoords(coord[0]+1, coord[1]+1, coord[2]); + return template + .replace('{width}', 256) + .replace('{height}', 256) + .replace('{proj}', this.projection) + .replace('{bbox}', minXmaxY.x + ',' + maxXminY.y + ',' + maxXminY.x + ',' + minXmaxY.y); + } + return template + .replace('{x}', coord[0]) + .replace('{y}', coord[1]) + // TMS-flipped y coordinate + .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1) + .replace(/\{z(oom)?\}/, coord[2]) + .replace(/\{switch:([^}]+)\}/, function(s, r) { + var subdomains = r.split(','); + return subdomains[(coord[0] + coord[1]) % subdomains.length]; + }) + .replace('{u}', function() { + var u = ''; + for (var zoom = coord[2]; zoom > 0; zoom--) { + var b = 0; + var mask = 1 << (zoom - 1); + if ((coord[0] & mask) !== 0) b++; + if ((coord[1] & mask) !== 0) b += 2; + u += b.toString(); + } + return u; + }); + }; - source.area = function() { - return -1; // sources in background pane are sorted by area - }; + source.intersects = function(extent) { + extent = extent.polygon(); + return !data.polygon || data.polygon.some(function(polygon) { + return geoPolygonIntersectsPolygon(polygon, extent, true); + }); + }; - return source; -}; + source.validZoom = function(z) { + return source.scaleExtent[0] <= z && + (source.overzoom || source.scaleExtent[1] > z); + }; -rendererBackgroundSource.Custom = function(template) { - var source = rendererBackgroundSource({ id: 'custom', template: template }); + source.isLocatorOverlay = function() { + return source.id === 'mapbox_locator_overlay'; + }; - source.name = function() { - return t('background.custom'); - }; + /* hides a source from the list, but leaves it available for use */ + source.isHidden = function() { + return source.id === 'DigitalGlobe-Premium-vintage' || + source.id === 'DigitalGlobe-Standard-vintage'; + }; - source.imageryUsed = function() { - return 'Custom (' + source.template() + ')'; - }; + source.copyrightNotices = function() {}; - source.area = function() { - return -2; // sources in background pane are sorted by area - }; + source.getMetadata = function(center, tileCoord, callback) { + var vintage = { + start: localeDateString(source.startDate), + end: localeDateString(source.endDate) + }; + vintage.range = vintageRange(vintage); - return source; -}; + var metadata = { vintage: vintage }; + callback(null, metadata); + }; -function rendererTileLayer(context) { - var tileSize = 256; - var transformProp = utilPrefixCSSProperty('Transform'); - var geotile = d3geoTile(); - var _projection; - var _cache = {}; - var _tileOrigin; - var _zoom; - var _source; + return source; + } - // blacklist overlay tiles around Null Island.. - function nearNullIsland(x, y, z) { - if (z >= 7) { - var center = Math.pow(2, z - 1); - var width = Math.pow(2, z - 6); - var min = center - (width / 2); - var max = center + (width / 2) - 1; - return x >= min && x <= max && y >= min && y <= max; - } - return false; - } + rendererBackgroundSource.Bing = function(data, dispatch) { + // http://msdn.microsoft.com/en-us/library/ff701716.aspx + // http://msdn.microsoft.com/en-us/library/ff701701.aspx + data.template = 'https://ecn.t{switch:0,1,2,3}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z'; - function tileSizeAtZoom(d, z) { - var EPSILON = 0.002; - return ((tileSize * Math.pow(2, z - d[2])) / tileSize) + EPSILON; - } + var bing = rendererBackgroundSource(data), + key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU', // Same as P2 and JOSM + url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + + key + '&jsonp={callback}', + cache = {}, + inflight = {}, + providers = []; + jsonpRequest(url, function(json) { + providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) { + return { + attribution: provider.attribution, + areas: provider.coverageAreas.map(function(area) { + return { + zoom: [area.zoomMin, area.zoomMax], + extent: geoExtent$$1([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]]) + }; + }) + }; + }); + dispatch.call('change'); + }); - function atZoom(t$$1, distance) { - var power = Math.pow(2, distance); - return [ - Math.floor(t$$1[0] * power), - Math.floor(t$$1[1] * power), - t$$1[2] + distance - ]; - } + bing.copyrightNotices = function(zoom, extent) { + zoom = Math.min(zoom, 21); + return providers.filter(function(provider) { + return some(provider.areas, function(area) { + return extent.intersects(area.extent) && + area.zoom[0] <= zoom && + area.zoom[1] >= zoom; + }); + }).map(function(provider) { + return provider.attribution; + }).join(', '); + }; - function lookUp(d) { - for (var up = -1; up > -d[2]; up--) { - var tile = atZoom(d, up); - if (_cache[_source.url(tile)] !== false) { - return tile; - } - } - } + bing.getMetadata = function(center, tileCoord, callback) { + var tileId = tileCoord.slice(0, 3).join('/'), + zoom = Math.min(tileCoord[2], 21), + centerPoint = center[1] + ',' + center[0], // lat,lng + url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/' + centerPoint + + '?zl=' + zoom + '&key=' + key + '&jsonp={callback}'; - function uniqueBy(a, n) { - var o = []; - var seen = {}; - for (var i = 0; i < a.length; i++) { - if (seen[a[i][n]] === undefined) { - o.push(a[i]); - seen[a[i][n]] = true; - } - } - return o; - } + if (inflight[tileId]) return; + if (!cache[tileId]) { + cache[tileId] = {}; + } + if (cache[tileId] && cache[tileId].metadata) { + return callback(null, cache[tileId].metadata); + } - function addSource(d) { - d.push(_source.url(d)); - return d; - } + inflight[tileId] = true; + jsonpRequest(url, function(result) { + delete inflight[tileId]; + + var err = (!result && 'Unknown Error') || result.errorDetails; + if (err) { + return callback(err); + } else { + var vintage = { + start: localeDateString(result.resourceSets[0].resources[0].vintageStart), + end: localeDateString(result.resourceSets[0].resources[0].vintageEnd) + }; + vintage.range = vintageRange(vintage); + + var metadata = { vintage: vintage }; + cache[tileId].metadata = metadata; + return callback(null, metadata); + } + }); + }; - // Update tiles based on current state of `projection`. - function background(selection$$1) { - _zoom = geoScaleToZoom(_projection.scale(), tileSize); + bing.terms_url = 'https://blog.openstreetmap.org/2010/11/30/microsoft-imagery-details'; - var pixelOffset; - if (_source) { - pixelOffset = [ - _source.offset()[0] * Math.pow(2, _zoom), - _source.offset()[1] * Math.pow(2, _zoom) - ]; - } else { - pixelOffset = [0, 0]; - } - var translate = [ - _projection.translate()[0] + pixelOffset[0], - _projection.translate()[1] + pixelOffset[1] - ]; + return bing; + }; - geotile - .scale(_projection.scale() * 2 * Math.PI) - .translate(translate); - _tileOrigin = [ - _projection.scale() * Math.PI - translate[0], - _projection.scale() * Math.PI - translate[1] - ]; - render(selection$$1); - } + rendererBackgroundSource.Esri = function(data) { + // don't request blank tiles, instead overzoom real tiles - #4327 + // deprecated technique, but it works (for now) + if (data.template.match(/blankTile/) === null) { + data.template = data.template + '?blankTile=false'; + } - // Derive the tiles onscreen, remove those offscreen and position them. - // Important that this part not depend on `_projection` because it's - // rentered when tiles load/error (see #644). - function render(selection$$1) { - if (!_source) return; - var requests = []; - var showDebug = context.getDebug('tile') && !_source.overlay; + var esri = rendererBackgroundSource(data), + cache = {}, + inflight = {}; + + esri.getMetadata = function(center, tileCoord, callback) { + var tileId = tileCoord.slice(0, 3).join('/'), + zoom = Math.min(tileCoord[2], esri.scaleExtent[1]), + centerPoint = center[0] + ',' + center[1], // long, lat (as it should be) + unknown = t('info_panels.background.unknown'), + metadataLayer, + vintage = {}, + metadata = {}; + + if (inflight[tileId]) return; + + switch (true) { + case (zoom >= 20 && esri.id === 'EsriWorldImageryClarity'): + metadataLayer = 4; + break; + case zoom >= 19: + metadataLayer = 3; + break; + case zoom >= 17: + metadataLayer = 2; + break; + case zoom >= 13: + metadataLayer = 0; + break; + default: + metadataLayer = 99; + } - if (_source.validZoom(_zoom)) { - geotile().forEach(function(d) { - addSource(d); - if (d[3] === '') return; - if (typeof d[3] !== 'string') return; // Workaround for #2295 - requests.push(d); - if (_cache[d[3]] === false && lookUp(d)) { - requests.push(addSource(lookUp(d))); - } - }); + var url; + // build up query using the layer appropriate to the current zoom + if (esri.id === 'EsriWorldImagery') { + url = 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/'; + } else if (esri.id === 'EsriWorldImageryClarity') { + url = 'https://serviceslab.arcgisonline.com/arcgis/rest/services/Clarity_World_Imagery/MapServer/'; + } - requests = uniqueBy(requests, 3).filter(function(r) { - if (!!_source.overlay && nearNullIsland(r[0], r[1], r[2])) { - return false; - } - // don't re-request tiles which have failed in the past - return _cache[r[3]] !== false; - }); - } + url += metadataLayer + '/query?returnGeometry=false&geometry=' + centerPoint + '&inSR=4326&geometryType=esriGeometryPoint&outFields=*&f=json&callback={callback}'; + if (!cache[tileId]) { + cache[tileId] = {}; + } + if (cache[tileId] && cache[tileId].metadata) { + return callback(null, cache[tileId].metadata); + } - function load(d) { - _cache[d[3]] = true; - d3_select(this) - .on('error', null) - .on('load', null) - .classed('tile-loaded', true); - render(selection$$1); - } + // accurate metadata is only available >= 13 + if (metadataLayer === 99) { + vintage = { + start: null, + end: null, + range: null + }; + metadata = { + vintage: null, + source: unknown, + description: unknown, + resolution: unknown, + accuracy: unknown + }; + + callback(null, metadata); - function error(d) { - _cache[d[3]] = false; - d3_select(this) - .on('error', null) - .on('load', null) - .remove(); - render(selection$$1); - } + } else { + inflight[tileId] = true; + jsonpRequest(url, function(result) { + delete inflight[tileId]; + + var err; + if (!result) { + err = 'Unknown Error'; + } else if (result.features && result.features.length < 1) { + err = 'No Results'; + } else if (result.error && result.error.message) { + err = result.error.message; + } + + if (err) { + return callback(err); + } else { + // pass through the discrete capture date from metadata + var captureDate = localeDateString(result.features[0].attributes.SRC_DATE2); + vintage = { + start: captureDate, + end: captureDate, + range: captureDate + }; + metadata = { + vintage: vintage, + source: clean(result.features[0].attributes.NICE_NAME), + description: clean(result.features[0].attributes.NICE_DESC), + resolution: clean(result.features[0].attributes.SRC_RES), + accuracy: clean(result.features[0].attributes.SRC_ACC) + }; + + // append units - meters + if (isFinite(metadata.resolution)) { + metadata.resolution += ' m'; + } + if (isFinite(metadata.accuracy)) { + metadata.accuracy += ' m'; + } + + cache[tileId].metadata = metadata; + return callback(null, metadata); + } + }); + } - function imageTransform(d) { - var ts = tileSize * Math.pow(2, _zoom - d[2]); - var scale = tileSizeAtZoom(d, _zoom); - return 'translate(' + - ((d[0] * ts) - _tileOrigin[0]) + 'px,' + - ((d[1] * ts) - _tileOrigin[1]) + 'px) ' + - 'scale(' + scale + ',' + scale + ')'; - } - function tileCenter(d) { - var ts = tileSize * Math.pow(2, _zoom - d[2]); - return [ - ((d[0] * ts) - _tileOrigin[0] + (ts / 2)), - ((d[1] * ts) - _tileOrigin[1] + (ts / 2)) - ]; - } + function clean(val) { + return String(val).trim() || unknown; + } + }; - function debugTransform(d) { - var coord = tileCenter(d); - return 'translate(' + coord[0] + 'px,' + coord[1] + 'px)'; - } + return esri; + }; - // Pick a representative tile near the center of the viewport - // (This is useful for sampling the imagery vintage) - var dims = geotile.size(); - var mapCenter = [dims[0] / 2, dims[1] / 2]; - var minDist = Math.max(dims[0], dims[1]); - var nearCenter; + rendererBackgroundSource.None = function() { + var source = rendererBackgroundSource({ id: 'none', template: '' }); - requests.forEach(function(d) { - var c = tileCenter(d); - var dist = geoVecLength(c, mapCenter); - if (dist < minDist) { - minDist = dist; - nearCenter = d; - } - }); + source.name = function() { + return t('background.none'); + }; - var image = selection$$1.selectAll('img') - .data(requests, function(d) { return d[3]; }); - image.exit() - .style(transformProp, imageTransform) - .classed('tile-removing', true) - .classed('tile-center', false) - .each(function() { - var tile = d3_select(this); - window.setTimeout(function() { - if (tile.classed('tile-removing')) { - tile.remove(); - } - }, 300); - }); + source.imageryUsed = function() { + return 'None'; + }; - image.enter() - .append('img') - .attr('class', 'tile') - .attr('src', function(d) { return d[3]; }) - .on('error', error) - .on('load', load) - .merge(image) - .style(transformProp, imageTransform) - .classed('tile-debug', showDebug) - .classed('tile-removing', false) - .classed('tile-center', function(d) { return d === nearCenter; }); - - - - var debug = selection$$1.selectAll('.tile-label-debug') - .data(showDebug ? requests : [], function(d) { return d[3]; }); - - debug.exit() - .remove(); - - if (showDebug) { - var debugEnter = debug.enter() - .append('div') - .attr('class', 'tile-label-debug'); - - debugEnter - .append('div') - .attr('class', 'tile-label-debug-coord'); - - debugEnter - .append('div') - .attr('class', 'tile-label-debug-vintage'); - - debug = debug.merge(debugEnter); - - debug - .style(transformProp, debugTransform); - - debug - .selectAll('.tile-label-debug-coord') - .text(function(d) { return d[2] + ' / ' + d[0] + ' / ' + d[1]; }); - - debug - .selectAll('.tile-label-debug-vintage') - .each(function(d) { - var span = d3_select(this); - var center = context.projection.invert(tileCenter(d)); - _source.getMetadata(center, d, function(err, result) { - span.text((result && result.vintage && result.vintage.range) || - t('info_panels.background.vintage') + ': ' + t('info_panels.background.unknown') - ); - }); - }); - } - } + source.area = function() { + return -1; // sources in background pane are sorted by area + }; - background.projection = function(_) { - if (!arguments.length) return _projection; - _projection = _; - return background; - }; + return source; + }; - background.dimensions = function(_) { - if (!arguments.length) return geotile.size(); - geotile.size(_); - return background; - }; + rendererBackgroundSource.Custom = function(template) { + var source = rendererBackgroundSource({ id: 'custom', template: template }); - background.source = function(_) { - if (!arguments.length) return _source; - _source = _; - _cache = {}; - geotile.scaleExtent(_source.scaleExtent); - return background; - }; + source.name = function() { + return t('background.custom'); + }; - return background; -} + source.imageryUsed = function() { + return 'Custom (' + source.template() + ')'; + }; -function rendererBackground(context) { - var dispatch$$1 = dispatch('change'); - var detected = utilDetect(); - var baseLayer = rendererTileLayer(context).projection(context.projection); - var _overlayLayers = []; - var _backgroundSources = []; - var _brightness = 1; - var _contrast = 1; - var _saturation = 1; - var _sharpness = 1; + source.area = function() { + return -2; // sources in background pane are sorted by area + }; - function background(selection$$1) { - var baseFilter = ''; - if (detected.cssfilters) { - if (_brightness !== 1) { - baseFilter += 'brightness(' + _brightness + ')'; - } - if (_contrast !== 1) { - baseFilter += 'contrast(' + _contrast + ')'; - } - if (_saturation !== 1) { - baseFilter += 'saturate(' + _saturation + ')'; - } - if (_sharpness < 1) { // gaussian blur - var blur = d3_interpolateNumber(0.5, 5)(1 - _sharpness); - baseFilter += 'blur(' + blur + 'px)'; - } - } + return source; + }; - var base = selection$$1.selectAll('.layer-background') - .data([0]); + function rendererTileLayer(context) { + var tileSize = 256; + var transformProp = utilPrefixCSSProperty('Transform'); + var geotile = d3geoTile(); + + var _projection; + var _cache = {}; + var _tileOrigin; + var _zoom; + var _source; + + + // blacklist overlay tiles around Null Island.. + function nearNullIsland(x, y, z) { + if (z >= 7) { + var center = Math.pow(2, z - 1); + var width = Math.pow(2, z - 6); + var min = center - (width / 2); + var max = center + (width / 2) - 1; + return x >= min && x <= max && y >= min && y <= max; + } + return false; + } - base = base.enter() - .insert('div', '.layer-data') - .attr('class', 'layer layer-background') - .merge(base); - if (detected.cssfilters) { - base.style('filter', baseFilter || null); - } else { - base.style('opacity', _brightness); - } + function tileSizeAtZoom(d, z) { + var EPSILON = 0.002; + return ((tileSize * Math.pow(2, z - d[2])) / tileSize) + EPSILON; + } - var imagery = base.selectAll('.layer-imagery') - .data([0]); + function atZoom(t$$1, distance) { + var power = Math.pow(2, distance); + return [ + Math.floor(t$$1[0] * power), + Math.floor(t$$1[1] * power), + t$$1[2] + distance + ]; + } - imagery.enter() - .append('div') - .attr('class', 'layer layer-imagery') - .merge(imagery) - .call(baseLayer); + function lookUp(d) { + for (var up = -1; up > -d[2]; up--) { + var tile = atZoom(d, up); + if (_cache[_source.url(tile)] !== false) { + return tile; + } + } + } - var maskFilter = ''; - var mixBlendMode = ''; - if (detected.cssfilters && _sharpness > 1) { // apply unsharp mask - mixBlendMode = 'overlay'; - maskFilter = 'saturate(0) blur(3px) invert(1)'; - var contrast = _sharpness - 1; - maskFilter += ' contrast(' + contrast + ')'; + function uniqueBy(a, n) { + var o = []; + var seen = {}; + for (var i = 0; i < a.length; i++) { + if (seen[a[i][n]] === undefined) { + o.push(a[i]); + seen[a[i][n]] = true; + } + } + return o; + } - var brightness = d3_interpolateNumber(1, 0.85)(_sharpness - 1); - maskFilter += ' brightness(' + brightness + ')'; - } - var mask = base.selectAll('.layer-unsharp-mask') - .data(detected.cssfilters && _sharpness > 1 ? [0] : []); + function addSource(d) { + d.push(_source.url(d)); + return d; + } - mask.exit() - .remove(); - mask.enter() - .append('div') - .attr('class', 'layer layer-mask layer-unsharp-mask') - .merge(mask) - .call(baseLayer) - .style('filter', maskFilter || null) - .style('mix-blend-mode', mixBlendMode || null); + // Update tiles based on current state of `projection`. + function background(selection$$1) { + _zoom = geoScaleToZoom(_projection.scale(), tileSize); + var pixelOffset; + if (_source) { + pixelOffset = [ + _source.offset()[0] * Math.pow(2, _zoom), + _source.offset()[1] * Math.pow(2, _zoom) + ]; + } else { + pixelOffset = [0, 0]; + } - var overlays = selection$$1.selectAll('.layer-overlay') - .data(_overlayLayers, function(d) { return d.source().name(); }); + var translate = [ + _projection.translate()[0] + pixelOffset[0], + _projection.translate()[1] + pixelOffset[1] + ]; - overlays.exit() - .remove(); + geotile + .scale(_projection.scale() * 2 * Math.PI) + .translate(translate); - overlays.enter() - .insert('div', '.layer-data') - .attr('class', 'layer layer-overlay') - .merge(overlays) - .each(function(layer) { d3_select(this).call(layer); }); - } + _tileOrigin = [ + _projection.scale() * Math.PI - translate[0], + _projection.scale() * Math.PI - translate[1] + ]; + render(selection$$1); + } - background.updateImagery = function() { - if (context.inIntro()) return; - var b = background.baseLayerSource(), - o = _overlayLayers - .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); }) - .map(function (d) { return d.source().id; }) - .join(','), - meters = geoOffsetToMeters(b.offset()), - epsilon = 0.01, - x = +meters[0].toFixed(2), - y = +meters[1].toFixed(2), - q = utilStringQs(window.location.hash.substring(1)); + // Derive the tiles onscreen, remove those offscreen and position them. + // Important that this part not depend on `_projection` because it's + // rentered when tiles load/error (see #644). + function render(selection$$1) { + if (!_source) return; + var requests = []; + var showDebug = context.getDebug('tile') && !_source.overlay; + + if (_source.validZoom(_zoom)) { + geotile().forEach(function(d) { + addSource(d); + if (d[3] === '') return; + if (typeof d[3] !== 'string') return; // Workaround for #2295 + requests.push(d); + if (_cache[d[3]] === false && lookUp(d)) { + requests.push(addSource(lookUp(d))); + } + }); + + requests = uniqueBy(requests, 3).filter(function(r) { + if (!!_source.overlay && nearNullIsland(r[0], r[1], r[2])) { + return false; + } + // don't re-request tiles which have failed in the past + return _cache[r[3]] !== false; + }); + } - var id = b.id; - if (id === 'custom') { - id = 'custom:' + b.template(); - } - if (id) { - q.background = id; - } else { - delete q.background; - } + function load(d) { + _cache[d[3]] = true; + select(this) + .on('error', null) + .on('load', null) + .classed('tile-loaded', true); + render(selection$$1); + } - if (o) { - q.overlays = o; - } else { - delete q.overlays; - } + function error(d) { + _cache[d[3]] = false; + select(this) + .on('error', null) + .on('load', null) + .remove(); + render(selection$$1); + } - if (Math.abs(x) > epsilon || Math.abs(y) > epsilon) { - q.offset = x + ',' + y; - } else { - delete q.offset; - } + function imageTransform(d) { + var ts = tileSize * Math.pow(2, _zoom - d[2]); + var scale = tileSizeAtZoom(d, _zoom); + return 'translate(' + + ((d[0] * ts) - _tileOrigin[0]) + 'px,' + + ((d[1] * ts) - _tileOrigin[1]) + 'px) ' + + 'scale(' + scale + ',' + scale + ')'; + } - if (!window.mocha) { - window.location.replace('#' + utilQsString(q, true)); - } + function tileCenter(d) { + var ts = tileSize * Math.pow(2, _zoom - d[2]); + return [ + ((d[0] * ts) - _tileOrigin[0] + (ts / 2)), + ((d[1] * ts) - _tileOrigin[1] + (ts / 2)) + ]; + } - var imageryUsed = [b.imageryUsed()]; + function debugTransform(d) { + var coord = tileCenter(d); + return 'translate(' + coord[0] + 'px,' + coord[1] + 'px)'; + } - _overlayLayers - .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); }) - .forEach(function (d) { imageryUsed.push(d.source().imageryUsed()); }); - var gpx = context.layers().layer('gpx'); - if (gpx && gpx.enabled() && gpx.hasGpx()) { - // Include a string like '.gpx data file' or '.geojson data file' - var match = gpx.getSrc().match(/(kml|gpx|(?:geo)?json)$/i); - var extension = match ? ('.' + match[0].toLowerCase() + ' ') : ''; - imageryUsed.push(extension + 'data file'); - } + // Pick a representative tile near the center of the viewport + // (This is useful for sampling the imagery vintage) + var dims = geotile.size(); + var mapCenter = [dims[0] / 2, dims[1] / 2]; + var minDist = Math.max(dims[0], dims[1]); + var nearCenter; + + requests.forEach(function(d) { + var c = tileCenter(d); + var dist = geoVecLength(c, mapCenter); + if (dist < minDist) { + minDist = dist; + nearCenter = d; + } + }); - var mapillary_images = context.layers().layer('mapillary-images'); - if (mapillary_images && mapillary_images.enabled()) { - imageryUsed.push('Mapillary Images'); - } - var mapillary_signs = context.layers().layer('mapillary-signs'); - if (mapillary_signs && mapillary_signs.enabled()) { - imageryUsed.push('Mapillary Signs'); - } + var image = selection$$1.selectAll('img') + .data(requests, function(d) { return d[3]; }); - var openstreetcam_images = context.layers().layer('openstreetcam-images'); - if (openstreetcam_images && openstreetcam_images.enabled()) { - imageryUsed.push('OpenStreetCam Images'); - } + image.exit() + .style(transformProp, imageTransform) + .classed('tile-removing', true) + .classed('tile-center', false) + .each(function() { + var tile = select(this); + window.setTimeout(function() { + if (tile.classed('tile-removing')) { + tile.remove(); + } + }, 300); + }); - context.history().imageryUsed(imageryUsed); - }; + image.enter() + .append('img') + .attr('class', 'tile') + .attr('src', function(d) { return d[3]; }) + .on('error', error) + .on('load', load) + .merge(image) + .style(transformProp, imageTransform) + .classed('tile-debug', showDebug) + .classed('tile-removing', false) + .classed('tile-center', function(d) { return d === nearCenter; }); - background.sources = function(extent) { - return _backgroundSources.filter(function(source) { - return source.intersects(extent); - }); - }; + var debug = selection$$1.selectAll('.tile-label-debug') + .data(showDebug ? requests : [], function(d) { return d[3]; }); - background.dimensions = function(_) { - if (!_) return; - baseLayer.dimensions(_); + debug.exit() + .remove(); - _overlayLayers.forEach(function(layer) { - layer.dimensions(_); - }); - }; + if (showDebug) { + var debugEnter = debug.enter() + .append('div') + .attr('class', 'tile-label-debug'); + debugEnter + .append('div') + .attr('class', 'tile-label-debug-coord'); - background.baseLayerSource = function(d) { - if (!arguments.length) return baseLayer.source(); + debugEnter + .append('div') + .attr('class', 'tile-label-debug-vintage'); + + debug = debug.merge(debugEnter); + + debug + .style(transformProp, debugTransform); + + debug + .selectAll('.tile-label-debug-coord') + .text(function(d) { return d[2] + ' / ' + d[0] + ' / ' + d[1]; }); + + debug + .selectAll('.tile-label-debug-vintage') + .each(function(d) { + var span = select(this); + var center = context.projection.invert(tileCenter(d)); + _source.getMetadata(center, d, function(err, result) { + span.text((result && result.vintage && result.vintage.range) || + t('info_panels.background.vintage') + ': ' + t('info_panels.background.unknown') + ); + }); + }); + } - // test source against OSM imagery blacklists.. - var osm = context.connection(); - if (!osm) return background; + } - var blacklists = context.connection().imageryBlacklists(); - var template = d.template(), - fail = false, - tested = 0, - regex, i; + background.projection = function(_) { + if (!arguments.length) return _projection; + _projection = _; + return background; + }; - for (i = 0; i < blacklists.length; i++) { - try { - regex = new RegExp(blacklists[i]); - fail = regex.test(template); - tested++; - if (fail) break; - } catch (e) { - /* noop */ - } - } - // ensure at least one test was run. - if (!tested) { - regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*'); - fail = regex.test(template); - } + background.dimensions = function(_) { + if (!arguments.length) return geotile.size(); + geotile.size(_); + return background; + }; - baseLayer.source(!fail ? d : background.findSource('none')); - dispatch$$1.call('change'); - background.updateImagery(); - return background; - }; + background.source = function(_) { + if (!arguments.length) return _source; + _source = _; + _cache = {}; + geotile.scaleExtent(_source.scaleExtent); + return background; + }; - background.findSource = function(id) { - return find$1(_backgroundSources, function(d) { - return d.id && d.id === id; - }); - }; + return background; + } + + function rendererBackground(context) { + var dispatch$$1 = dispatch('change'); + var detected = utilDetect(); + var baseLayer = rendererTileLayer(context).projection(context.projection); + var _overlayLayers = []; + var _backgroundSources = []; + var _brightness = 1; + var _contrast = 1; + var _saturation = 1; + var _sharpness = 1; + + + function background(selection$$1) { + + var baseFilter = ''; + if (detected.cssfilters) { + if (_brightness !== 1) { + baseFilter += 'brightness(' + _brightness + ')'; + } + if (_contrast !== 1) { + baseFilter += 'contrast(' + _contrast + ')'; + } + if (_saturation !== 1) { + baseFilter += 'saturate(' + _saturation + ')'; + } + if (_sharpness < 1) { // gaussian blur + var blur = interpolateNumber(0.5, 5)(1 - _sharpness); + baseFilter += 'blur(' + blur + 'px)'; + } + } - background.bing = function() { - background.baseLayerSource(background.findSource('Bing')); - }; + var base = selection$$1.selectAll('.layer-background') + .data([0]); + base = base.enter() + .insert('div', '.layer-data') + .attr('class', 'layer layer-background') + .merge(base); - background.showsLayer = function(d) { - return d.id === baseLayer.source().id || - _overlayLayers.some(function(layer) { return d.id === layer.source().id; }); - }; + if (detected.cssfilters) { + base.style('filter', baseFilter || null); + } else { + base.style('opacity', _brightness); + } - background.overlayLayerSources = function() { - return _overlayLayers.map(function (l) { return l.source(); }); - }; + var imagery = base.selectAll('.layer-imagery') + .data([0]); + imagery.enter() + .append('div') + .attr('class', 'layer layer-imagery') + .merge(imagery) + .call(baseLayer); - background.toggleOverlayLayer = function(d) { - var layer; - for (var i = 0; i < _overlayLayers.length; i++) { - layer = _overlayLayers[i]; - if (layer.source() === d) { - _overlayLayers.splice(i, 1); - dispatch$$1.call('change'); - background.updateImagery(); - return; - } - } + var maskFilter = ''; + var mixBlendMode = ''; + if (detected.cssfilters && _sharpness > 1) { // apply unsharp mask + mixBlendMode = 'overlay'; + maskFilter = 'saturate(0) blur(3px) invert(1)'; - layer = rendererTileLayer(context) - .source(d) - .projection(context.projection) - .dimensions(baseLayer.dimensions() - ); + var contrast = _sharpness - 1; + maskFilter += ' contrast(' + contrast + ')'; - _overlayLayers.push(layer); - dispatch$$1.call('change'); - background.updateImagery(); - }; + var brightness = interpolateNumber(1, 0.85)(_sharpness - 1); + maskFilter += ' brightness(' + brightness + ')'; + } + var mask = base.selectAll('.layer-unsharp-mask') + .data(detected.cssfilters && _sharpness > 1 ? [0] : []); - background.nudge = function(d, zoom) { - baseLayer.source().nudge(d, zoom); - dispatch$$1.call('change'); - background.updateImagery(); - return background; - }; + mask.exit() + .remove(); + mask.enter() + .append('div') + .attr('class', 'layer layer-mask layer-unsharp-mask') + .merge(mask) + .call(baseLayer) + .style('filter', maskFilter || null) + .style('mix-blend-mode', mixBlendMode || null); - background.offset = function(d) { - if (!arguments.length) return baseLayer.source().offset(); - baseLayer.source().offset(d); - dispatch$$1.call('change'); - background.updateImagery(); - return background; - }; + var overlays = selection$$1.selectAll('.layer-overlay') + .data(_overlayLayers, function(d) { return d.source().name(); }); - background.brightness = function(d) { - if (!arguments.length) return _brightness; - _brightness = d; - if (context.mode()) dispatch$$1.call('change'); - return background; - }; + overlays.exit() + .remove(); + overlays.enter() + .insert('div', '.layer-data') + .attr('class', 'layer layer-overlay') + .merge(overlays) + .each(function(layer) { select(this).call(layer); }); + } - background.contrast = function(d) { - if (!arguments.length) return _contrast; - _contrast = d; - if (context.mode()) dispatch$$1.call('change'); - return background; - }; + background.updateImagery = function() { + if (context.inIntro()) return; - background.saturation = function(d) { - if (!arguments.length) return _saturation; - _saturation = d; - if (context.mode()) dispatch$$1.call('change'); - return background; - }; + var b = background.baseLayerSource(), + o = _overlayLayers + .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); }) + .map(function (d) { return d.source().id; }) + .join(','), + meters = geoOffsetToMeters(b.offset()), + epsilon = 0.01, + x = +meters[0].toFixed(2), + y = +meters[1].toFixed(2), + q = utilStringQs(window.location.hash.substring(1)); + var id = b.id; + if (id === 'custom') { + id = 'custom:' + b.template(); + } - background.sharpness = function(d) { - if (!arguments.length) return _sharpness; - _sharpness = d; - if (context.mode()) dispatch$$1.call('change'); - return background; - }; + if (id) { + q.background = id; + } else { + delete q.background; + } + if (o) { + q.overlays = o; + } else { + delete q.overlays; + } - background.init = function() { - function parseMap(qmap) { - if (!qmap) return false; - var args = qmap.split('/').map(Number); - if (args.length < 3 || args.some(isNaN)) return false; - return geoExtent$$1([args[2], args[1]]); - } + if (Math.abs(x) > epsilon || Math.abs(y) > epsilon) { + q.offset = x + ',' + y; + } else { + delete q.offset; + } - var dataImagery = data.imagery || [], - q = utilStringQs(window.location.hash.substring(1)), - requested = q.background || q.layer, - extent = parseMap(q.map), - first, - best; - - // Add all the available imagery sources - _backgroundSources = dataImagery.map(function(source) { - if (source.type === 'bing') { - return rendererBackgroundSource.Bing(source, dispatch$$1); - } else if (/^EsriWorldImagery/.test(source.id)) { - return rendererBackgroundSource.Esri(source); - } else { - return rendererBackgroundSource(source); - } - }); + if (!window.mocha) { + window.location.replace('#' + utilQsString(q, true)); + } - first = _backgroundSources.length && _backgroundSources[0]; + var imageryUsed = [b.imageryUsed()]; - // Add 'None' - _backgroundSources.unshift(rendererBackgroundSource.None()); + _overlayLayers + .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); }) + .forEach(function (d) { imageryUsed.push(d.source().imageryUsed()); }); - // Add 'Custom' - var template = context.storage('background-custom-template') || ''; - var custom = rendererBackgroundSource.Custom(template); - _backgroundSources.unshift(custom); + var gpx = context.layers().layer('gpx'); + if (gpx && gpx.enabled() && gpx.hasGpx()) { + // Include a string like '.gpx data file' or '.geojson data file' + var match = gpx.getSrc().match(/(kml|gpx|(?:geo)?json)$/i); + var extension = match ? ('.' + match[0].toLowerCase() + ' ') : ''; + imageryUsed.push(extension + 'data file'); + } + var mapillary_images = context.layers().layer('mapillary-images'); + if (mapillary_images && mapillary_images.enabled()) { + imageryUsed.push('Mapillary Images'); + } - // Decide which background layer to display - if (!requested && extent) { - best = find$1(this.sources(extent), function(s) { return s.best(); }); - } - if (requested && requested.indexOf('custom:') === 0) { - template = requested.replace(/^custom:/, ''); - background.baseLayerSource(custom.template(template)); - context.storage('background-custom-template', template); - } else { - background.baseLayerSource( - background.findSource(requested) || - best || - background.findSource(context.storage('background-last-used')) || - background.findSource('Bing') || - first || - background.findSource('none') - ); - } + var mapillary_signs = context.layers().layer('mapillary-signs'); + if (mapillary_signs && mapillary_signs.enabled()) { + imageryUsed.push('Mapillary Signs'); + } - var locator = find$1(_backgroundSources, function(d) { - return d.overlay && d.default; - }); + var openstreetcam_images = context.layers().layer('openstreetcam-images'); + if (openstreetcam_images && openstreetcam_images.enabled()) { + imageryUsed.push('OpenStreetCam Images'); + } - if (locator) { - background.toggleOverlayLayer(locator); - } + context.history().imageryUsed(imageryUsed); + }; - var overlays = (q.overlays || '').split(','); - overlays.forEach(function(overlay) { - overlay = background.findSource(overlay); - if (overlay) { - background.toggleOverlayLayer(overlay); - } - }); - if (q.gpx) { - var gpx = context.layers().layer('gpx'); - if (gpx) { - gpx.url(q.gpx); - } - } + background.sources = function(extent) { + return _backgroundSources.filter(function(source) { + return source.intersects(extent); + }); + }; - if (q.offset) { - var offset = q.offset.replace(/;/g, ',').split(',').map(function(n) { - return !isNaN(n) && n; - }); - if (offset.length === 2) { - background.offset(geoMetersToOffset(offset)); - } - } - }; + background.dimensions = function(_) { + if (!_) return; + baseLayer.dimensions(_); + _overlayLayers.forEach(function(layer) { + layer.dimensions(_); + }); + }; - return utilRebind(background, dispatch$$1, 'on'); -} - -function rendererFeatures(context) { - var traffic_roads = { - 'motorway': true, - 'motorway_link': true, - 'trunk': true, - 'trunk_link': true, - 'primary': true, - 'primary_link': true, - 'secondary': true, - 'secondary_link': true, - 'tertiary': true, - 'tertiary_link': true, - 'residential': true, - 'unclassified': true, - 'living_street': true - }; - var service_roads = { - 'service': true, - 'road': true, - 'track': true - }; + background.baseLayerSource = function(d) { + if (!arguments.length) return baseLayer.source(); - var paths = { - 'path': true, - 'footway': true, - 'cycleway': true, - 'bridleway': true, - 'steps': true, - 'pedestrian': true, - 'corridor': true - }; + // test source against OSM imagery blacklists.. + var osm = context.connection(); + if (!osm) return background; - var past_futures = { - 'proposed': true, - 'construction': true, - 'abandoned': true, - 'dismantled': true, - 'disused': true, - 'razed': true, - 'demolished': true, - 'obliterated': true - }; + var blacklists = context.connection().imageryBlacklists(); - var dispatch$$1 = dispatch('change', 'redraw'), - _cullFactor = 1, - _cache = {}, - _features = {}, - _stats = {}, - _keys = [], - _hidden = []; - - - function update() { - if (!window.mocha) { - var q = utilStringQs(window.location.hash.substring(1)); - var disabled = features.disabled(); - if (disabled.length) { - q.disable_features = disabled.join(','); - } else { - delete q.disable_features; - } - window.location.replace('#' + utilQsString(q, true)); - context.storage('disabled-features', disabled.join(',')); - } - _hidden = features.hidden(); - dispatch$$1.call('change'); - dispatch$$1.call('redraw'); - } - - - function defineFeature(k, filter, max) { - var isEnabled = true; - - _keys.push(k); - _features[k] = { - filter: filter, - enabled: isEnabled, // whether the user wants it enabled.. - count: 0, - currentMax: (max || Infinity), - defaultMax: (max || Infinity), - enable: function() { this.enabled = true; this.currentMax = this.defaultMax; }, - disable: function() { this.enabled = false; this.currentMax = 0; }, - hidden: function() { return !context.editable() || this.count > this.currentMax * _cullFactor; }, - autoHidden: function() { return this.hidden() && this.currentMax > 0; } - }; - } + var template = d.template(), + fail = false, + tested = 0, + regex, i; + for (i = 0; i < blacklists.length; i++) { + try { + regex = new RegExp(blacklists[i]); + fail = regex.test(template); + tested++; + if (fail) break; + } catch (e) { + /* noop */ + } + } - defineFeature('points', function isPoint(entity, resolver, geometry) { - return geometry === 'point'; - }, 200); + // ensure at least one test was run. + if (!tested) { + regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*'); + fail = regex.test(template); + } - defineFeature('traffic_roads', function isTrafficRoad(entity) { - return traffic_roads[entity.tags.highway]; - }); + baseLayer.source(!fail ? d : background.findSource('none')); + dispatch$$1.call('change'); + background.updateImagery(); + return background; + }; - defineFeature('service_roads', function isServiceRoad(entity) { - return service_roads[entity.tags.highway]; - }); - defineFeature('paths', function isPath(entity) { - return paths[entity.tags.highway]; - }); + background.findSource = function(id) { + return find$1(_backgroundSources, function(d) { + return d.id && d.id === id; + }); + }; - defineFeature('buildings', function isBuilding(entity) { - return ( - !!entity.tags['building:part'] || - (!!entity.tags.building && entity.tags.building !== 'no') || - entity.tags.amenity === 'shelter' || - entity.tags.parking === 'multi-storey' || - entity.tags.parking === 'sheds' || - entity.tags.parking === 'carports' || - entity.tags.parking === 'garage_boxes' - ); - }, 250); - defineFeature('landuse', function isLanduse(entity, resolver, geometry) { - return geometry === 'area' && - !_features.buildings.filter(entity) && - !_features.water.filter(entity); - }); + background.bing = function() { + background.baseLayerSource(background.findSource('Bing')); + }; - defineFeature('boundaries', function isBoundary(entity) { - return !!entity.tags.boundary; - }); - defineFeature('water', function isWater(entity) { - return ( - !!entity.tags.waterway || - entity.tags.natural === 'water' || - entity.tags.natural === 'coastline' || - entity.tags.natural === 'bay' || - entity.tags.landuse === 'pond' || - entity.tags.landuse === 'basin' || - entity.tags.landuse === 'reservoir' || - entity.tags.landuse === 'salt_pond' - ); - }); + background.showsLayer = function(d) { + return d.id === baseLayer.source().id || + _overlayLayers.some(function(layer) { return d.id === layer.source().id; }); + }; - defineFeature('rail', function isRail(entity) { - return ( - !!entity.tags.railway || - entity.tags.landuse === 'railway' - ) && !( - traffic_roads[entity.tags.highway] || - service_roads[entity.tags.highway] || - paths[entity.tags.highway] - ); - }); - defineFeature('power', function isPower(entity) { - return !!entity.tags.power; - }); + background.overlayLayerSources = function() { + return _overlayLayers.map(function (l) { return l.source(); }); + }; - // contains a past/future tag, but not in active use as a road/path/cycleway/etc.. - defineFeature('past_future', function isPastFuture(entity) { - if ( - traffic_roads[entity.tags.highway] || - service_roads[entity.tags.highway] || - paths[entity.tags.highway] - ) { return false; } - var strings = Object.keys(entity.tags); + background.toggleOverlayLayer = function(d) { + var layer; - for (var i = 0; i < strings.length; i++) { - var s = strings[i]; - if (past_futures[s] || past_futures[entity.tags[s]]) { return true; } - } - return false; - }); + for (var i = 0; i < _overlayLayers.length; i++) { + layer = _overlayLayers[i]; + if (layer.source() === d) { + _overlayLayers.splice(i, 1); + dispatch$$1.call('change'); + background.updateImagery(); + return; + } + } - // Lines or areas that don't match another feature filter. - // IMPORTANT: The 'others' feature must be the last one defined, - // so that code in getMatches can skip this test if `hasMatch = true` - defineFeature('others', function isOther(entity, resolver, geometry) { - return (geometry === 'line' || geometry === 'area'); - }); + layer = rendererTileLayer(context) + .source(d) + .projection(context.projection) + .dimensions(baseLayer.dimensions() + ); + _overlayLayers.push(layer); + dispatch$$1.call('change'); + background.updateImagery(); + }; - function features() {} + background.nudge = function(d, zoom) { + baseLayer.source().nudge(d, zoom); + dispatch$$1.call('change'); + background.updateImagery(); + return background; + }; - features.features = function() { - return _features; - }; + background.offset = function(d) { + if (!arguments.length) return baseLayer.source().offset(); + baseLayer.source().offset(d); + dispatch$$1.call('change'); + background.updateImagery(); + return background; + }; - features.keys = function() { - return _keys; - }; + background.brightness = function(d) { + if (!arguments.length) return _brightness; + _brightness = d; + if (context.mode()) dispatch$$1.call('change'); + return background; + }; - features.enabled = function(k) { - if (!arguments.length) { - return _keys.filter(function(k) { return _features[k].enabled; }); - } - return _features[k] && _features[k].enabled; - }; + background.contrast = function(d) { + if (!arguments.length) return _contrast; + _contrast = d; + if (context.mode()) dispatch$$1.call('change'); + return background; + }; - features.disabled = function(k) { - if (!arguments.length) { - return _keys.filter(function(k) { return !_features[k].enabled; }); - } - return _features[k] && !_features[k].enabled; - }; + background.saturation = function(d) { + if (!arguments.length) return _saturation; + _saturation = d; + if (context.mode()) dispatch$$1.call('change'); + return background; + }; - features.hidden = function(k) { - if (!arguments.length) { - return _keys.filter(function(k) { return _features[k].hidden(); }); - } - return _features[k] && _features[k].hidden(); - }; + background.sharpness = function(d) { + if (!arguments.length) return _sharpness; + _sharpness = d; + if (context.mode()) dispatch$$1.call('change'); + return background; + }; - features.autoHidden = function(k) { - if (!arguments.length) { - return _keys.filter(function(k) { return _features[k].autoHidden(); }); - } - return _features[k] && _features[k].autoHidden(); - }; + background.init = function() { + function parseMap(qmap) { + if (!qmap) return false; + var args = qmap.split('/').map(Number); + if (args.length < 3 || args.some(isNaN)) return false; + return geoExtent$$1([args[2], args[1]]); + } - features.enable = function(k) { - if (_features[k] && !_features[k].enabled) { - _features[k].enable(); - update(); - } - }; + var dataImagery = data.imagery || [], + q = utilStringQs(window.location.hash.substring(1)), + requested = q.background || q.layer, + extent = parseMap(q.map), + first, + best; + + // Add all the available imagery sources + _backgroundSources = dataImagery.map(function(source) { + if (source.type === 'bing') { + return rendererBackgroundSource.Bing(source, dispatch$$1); + } else if (/^EsriWorldImagery/.test(source.id)) { + return rendererBackgroundSource.Esri(source); + } else { + return rendererBackgroundSource(source); + } + }); + first = _backgroundSources.length && _backgroundSources[0]; - features.disable = function(k) { - if (_features[k] && _features[k].enabled) { - _features[k].disable(); - update(); - } - }; + // Add 'None' + _backgroundSources.unshift(rendererBackgroundSource.None()); + // Add 'Custom' + var template = context.storage('background-custom-template') || ''; + var custom = rendererBackgroundSource.Custom(template); + _backgroundSources.unshift(custom); - features.toggle = function(k) { - if (_features[k]) { - (function(f) { return f.enabled ? f.disable() : f.enable(); }(_features[k])); - update(); - } - }; + // Decide which background layer to display + if (!requested && extent) { + best = find$1(this.sources(extent), function(s) { return s.best(); }); + } + if (requested && requested.indexOf('custom:') === 0) { + template = requested.replace(/^custom:/, ''); + background.baseLayerSource(custom.template(template)); + context.storage('background-custom-template', template); + } else { + background.baseLayerSource( + background.findSource(requested) || + best || + background.findSource(context.storage('background-last-used')) || + background.findSource('Bing') || + first || + background.findSource('none') + ); + } - features.resetStats = function() { - for (var i = 0; i < _keys.length; i++) { - _features[_keys[i]].count = 0; - } - dispatch$$1.call('change'); - }; + var locator = find$1(_backgroundSources, function(d) { + return d.overlay && d.default; + }); + if (locator) { + background.toggleOverlayLayer(locator); + } - features.gatherStats = function(d, resolver, dimensions) { - var needsRedraw = false, - type = groupBy(d, function(ent) { return ent.type; }), - entities = [].concat(type.relation || [], type.way || [], type.node || []), - currHidden, geometry, matches, i, j; + var overlays = (q.overlays || '').split(','); + overlays.forEach(function(overlay) { + overlay = background.findSource(overlay); + if (overlay) { + background.toggleOverlayLayer(overlay); + } + }); - for (i = 0; i < _keys.length; i++) { - _features[_keys[i]].count = 0; - } + if (q.gpx) { + var gpx = context.layers().layer('gpx'); + if (gpx) { + gpx.url(q.gpx); + } + } - // adjust the threshold for point/building culling based on viewport size.. - // a _cullFactor of 1 corresponds to a 1000x1000px viewport.. - _cullFactor = dimensions[0] * dimensions[1] / 1000000; - - for (i = 0; i < entities.length; i++) { - geometry = entities[i].geometry(resolver); - if (!(geometry === 'vertex' || geometry === 'relation')) { - matches = Object.keys(features.getMatches(entities[i], resolver, geometry)); - for (j = 0; j < matches.length; j++) { - _features[matches[j]].count++; - } - } - } + if (q.offset) { + var offset = q.offset.replace(/;/g, ',').split(',').map(function(n) { + return !isNaN(n) && n; + }); - currHidden = features.hidden(); - if (currHidden !== _hidden) { - _hidden = currHidden; - needsRedraw = true; - dispatch$$1.call('change'); - } + if (offset.length === 2) { + background.offset(geoMetersToOffset(offset)); + } + } + }; - return needsRedraw; - }; + return utilRebind(background, dispatch$$1, 'on'); + } + + function rendererFeatures(context) { + var traffic_roads = { + 'motorway': true, + 'motorway_link': true, + 'trunk': true, + 'trunk_link': true, + 'primary': true, + 'primary_link': true, + 'secondary': true, + 'secondary_link': true, + 'tertiary': true, + 'tertiary_link': true, + 'residential': true, + 'unclassified': true, + 'living_street': true + }; - features.stats = function() { - for (var i = 0; i < _keys.length; i++) { - _stats[_keys[i]] = _features[_keys[i]].count; - } + var service_roads = { + 'service': true, + 'road': true, + 'track': true + }; - return _stats; - }; + var paths = { + 'path': true, + 'footway': true, + 'cycleway': true, + 'bridleway': true, + 'steps': true, + 'pedestrian': true, + 'corridor': true + }; + var past_futures = { + 'proposed': true, + 'construction': true, + 'abandoned': true, + 'dismantled': true, + 'disused': true, + 'razed': true, + 'demolished': true, + 'obliterated': true + }; - features.clear = function(d) { - for (var i = 0; i < d.length; i++) { - features.clearEntity(d[i]); - } - }; + var dispatch$$1 = dispatch('change', 'redraw'), + _cullFactor = 1, + _cache = {}, + _features = {}, + _stats = {}, + _keys = [], + _hidden = []; + + + function update() { + if (!window.mocha) { + var q = utilStringQs(window.location.hash.substring(1)); + var disabled = features.disabled(); + if (disabled.length) { + q.disable_features = disabled.join(','); + } else { + delete q.disable_features; + } + window.location.replace('#' + utilQsString(q, true)); + context.storage('disabled-features', disabled.join(',')); + } + _hidden = features.hidden(); + dispatch$$1.call('change'); + dispatch$$1.call('redraw'); + } - features.clearEntity = function(entity) { - delete _cache[osmEntity$$1.key(entity)]; - }; + function defineFeature(k, filter, max) { + var isEnabled = true; + + _keys.push(k); + _features[k] = { + filter: filter, + enabled: isEnabled, // whether the user wants it enabled.. + count: 0, + currentMax: (max || Infinity), + defaultMax: (max || Infinity), + enable: function() { this.enabled = true; this.currentMax = this.defaultMax; }, + disable: function() { this.enabled = false; this.currentMax = 0; }, + hidden: function() { return !context.editable() || this.count > this.currentMax * _cullFactor; }, + autoHidden: function() { return this.hidden() && this.currentMax > 0; } + }; + } - features.reset = function() { - _cache = {}; - }; + defineFeature('points', function isPoint(entity, resolver, geometry) { + return geometry === 'point'; + }, 200); + defineFeature('traffic_roads', function isTrafficRoad(entity) { + return traffic_roads[entity.tags.highway]; + }); - features.getMatches = function(entity, resolver, geometry) { - if (geometry === 'vertex' || geometry === 'relation') return {}; + defineFeature('service_roads', function isServiceRoad(entity) { + return service_roads[entity.tags.highway]; + }); - var ent = osmEntity$$1.key(entity); - if (!_cache[ent]) { - _cache[ent] = {}; - } + defineFeature('paths', function isPath(entity) { + return paths[entity.tags.highway]; + }); - if (!_cache[ent].matches) { - var matches = {}, - hasMatch = false; - - for (var i = 0; i < _keys.length; i++) { - if (_keys[i] === 'others') { - if (hasMatch) continue; - - // Multipolygon members: - // If an entity... - // 1. is a way that hasn't matched other 'interesting' feature rules, - // 2. and it belongs to a single parent multipolygon relation - // ...then match whatever feature rules the parent multipolygon has matched. - // see #2548, #2887 - // - // IMPORTANT: - // For this to work, getMatches must be called on relations before ways. - // - if (entity.type === 'way') { - var parents = features.getParents(entity, resolver, geometry); - if (parents.length === 1 && parents[0].isMultipolygon()) { - var pkey = osmEntity$$1.key(parents[0]); - if (_cache[pkey] && _cache[pkey].matches) { - matches = clone(_cache[pkey].matches); - continue; - } - } - } - } - - if (_features[_keys[i]].filter(entity, resolver, geometry)) { - matches[_keys[i]] = hasMatch = true; - } - } - _cache[ent].matches = matches; - } + defineFeature('buildings', function isBuilding(entity) { + return ( + !!entity.tags['building:part'] || + (!!entity.tags.building && entity.tags.building !== 'no') || + entity.tags.amenity === 'shelter' || + entity.tags.parking === 'multi-storey' || + entity.tags.parking === 'sheds' || + entity.tags.parking === 'carports' || + entity.tags.parking === 'garage_boxes' + ); + }, 250); - return _cache[ent].matches; - }; + defineFeature('landuse', function isLanduse(entity, resolver, geometry) { + return geometry === 'area' && + !_features.buildings.filter(entity) && + !_features.water.filter(entity); + }); + defineFeature('boundaries', function isBoundary(entity) { + return ( + !!entity.tags.boundary + ) && !( + traffic_roads[entity.tags.highway] || + service_roads[entity.tags.highway] || + paths[entity.tags.highway] + ); + }); - features.getParents = function(entity, resolver, geometry) { - if (geometry === 'point') return []; + defineFeature('water', function isWater(entity) { + return ( + !!entity.tags.waterway || + entity.tags.natural === 'water' || + entity.tags.natural === 'coastline' || + entity.tags.natural === 'bay' || + entity.tags.landuse === 'pond' || + entity.tags.landuse === 'basin' || + entity.tags.landuse === 'reservoir' || + entity.tags.landuse === 'salt_pond' + ); + }); - var ent = osmEntity$$1.key(entity); - if (!_cache[ent]) { - _cache[ent] = {}; - } + defineFeature('rail', function isRail(entity) { + return ( + !!entity.tags.railway || + entity.tags.landuse === 'railway' + ) && !( + traffic_roads[entity.tags.highway] || + service_roads[entity.tags.highway] || + paths[entity.tags.highway] + ); + }); - if (!_cache[ent].parents) { - var parents = []; - if (geometry === 'vertex') { - parents = resolver.parentWays(entity); - } else { // 'line', 'area', 'relation' - parents = resolver.parentRelations(entity); - } - _cache[ent].parents = parents; - } - return _cache[ent].parents; - }; + defineFeature('power', function isPower(entity) { + return !!entity.tags.power; + }); + // contains a past/future tag, but not in active use as a road/path/cycleway/etc.. + defineFeature('past_future', function isPastFuture(entity) { + if ( + traffic_roads[entity.tags.highway] || + service_roads[entity.tags.highway] || + paths[entity.tags.highway] + ) { return false; } - features.isHiddenFeature = function(entity, resolver, geometry) { - if (!_hidden.length) return false; - if (!entity.version) return false; + var strings = Object.keys(entity.tags); - var matches = features.getMatches(entity, resolver, geometry); + for (var i = 0; i < strings.length; i++) { + var s = strings[i]; + if (past_futures[s] || past_futures[entity.tags[s]]) { return true; } + } + return false; + }); - for (var i = 0; i < _hidden.length; i++) { - if (matches[_hidden[i]]) return true; - } - return false; - }; + // Lines or areas that don't match another feature filter. + // IMPORTANT: The 'others' feature must be the last one defined, + // so that code in getMatches can skip this test if `hasMatch = true` + defineFeature('others', function isOther(entity, resolver, geometry) { + return (geometry === 'line' || geometry === 'area'); + }); - features.isHiddenChild = function(entity, resolver, geometry) { - if (!_hidden.length) return false; - if (!entity.version || geometry === 'point') return false; + function features() {} - var parents = features.getParents(entity, resolver, geometry); - if (!parents.length) return false; - for (var i = 0; i < parents.length; i++) { - if (!features.isHidden(parents[i], resolver, parents[i].geometry(resolver))) { - return false; - } - } - return true; - }; + features.features = function() { + return _features; + }; - features.hasHiddenConnections = function(entity, resolver) { - if (!_hidden.length) return false; - var childNodes, connections; + features.keys = function() { + return _keys; + }; - if (entity.type === 'midpoint') { - childNodes = [resolver.entity(entity.edge[0]), resolver.entity(entity.edge[1])]; - connections = []; - } else { - childNodes = entity.nodes ? resolver.childNodes(entity) : []; - connections = features.getParents(entity, resolver, entity.geometry(resolver)); - } - // gather ways connected to child nodes.. - connections = reduce(childNodes, function(result, e) { - return resolver.isShared(e) ? union(result, resolver.parentWays(e)) : result; - }, connections); + features.enabled = function(k) { + if (!arguments.length) { + return _keys.filter(function(k) { return _features[k].enabled; }); + } + return _features[k] && _features[k].enabled; + }; - return connections.length ? some(connections, function(e) { - return features.isHidden(e, resolver, e.geometry(resolver)); - }) : false; - }; + features.disabled = function(k) { + if (!arguments.length) { + return _keys.filter(function(k) { return !_features[k].enabled; }); + } + return _features[k] && !_features[k].enabled; + }; - features.isHidden = function(entity, resolver, geometry) { - if (!_hidden.length) return false; - if (!entity.version) return false; - var fn = (geometry === 'vertex' ? features.isHiddenChild : features.isHiddenFeature); - return fn(entity, resolver, geometry); - }; + features.hidden = function(k) { + if (!arguments.length) { + return _keys.filter(function(k) { return _features[k].hidden(); }); + } + return _features[k] && _features[k].hidden(); + }; - features.filter = function(d, resolver) { - if (!_hidden.length) return d; + features.autoHidden = function(k) { + if (!arguments.length) { + return _keys.filter(function(k) { return _features[k].autoHidden(); }); + } + return _features[k] && _features[k].autoHidden(); + }; - var result = []; - for (var i = 0; i < d.length; i++) { - var entity = d[i]; - if (!features.isHidden(entity, resolver, entity.geometry(resolver))) { - result.push(entity); - } - } - return result; - }; + features.enable = function(k) { + if (_features[k] && !_features[k].enabled) { + _features[k].enable(); + update(); + } + }; - features.init = function() { - var storage = context.storage('disabled-features'); - if (storage) { - var storageDisabled = storage.replace(/;/g, ',').split(','); - storageDisabled.forEach(features.disable); - } - - var q = utilStringQs(window.location.hash.substring(1)); - if (q.disable_features) { - var hashDisabled = q.disable_features.replace(/;/g, ',').split(','); - hashDisabled.forEach(features.disable); - } - }; - return utilRebind(features, dispatch$$1, 'on'); -} + features.disable = function(k) { + if (_features[k] && _features[k].enabled) { + _features[k].disable(); + update(); + } + }; -function utilBindOnce(target, type, listener, capture) { - var typeOnce = type + '.once'; - function one() { - target.on(typeOnce, null); - listener.apply(this, arguments); - } - target.on(typeOnce, one, capture); - return this; -} - -function rendererMap(context) { - - var dimensions = [1, 1], - dispatch$$1 = dispatch('move', 'drawn'), - projection = context.projection, - curtainProjection = context.curtainProjection, - dblclickEnabled = true, - redrawEnabled = true, - transformStart = projection.transform(), - transformLast, - transformed = false, - minzoom = 0, - drawLayers = svgLayers(projection, context), - drawPoints = svgPoints$$1(projection, context), - drawVertices = svgVertices$$1(projection, context), - drawLines = svgLines$$1(projection, context), - drawAreas = svgAreas$$1(projection, context), - drawMidpoints = svgMidpoints$$1(projection, context), - drawLabels = svgLabels(projection, context), - supersurface = d3_select(null), - wrapper = d3_select(null), - surface = d3_select(null), - mouse, - mousemove; - - var zoom$$1 = d3_zoom() - .scaleExtent([ztok(2), ztok(24)]) - .interpolate(d3_interpolate) - .filter(zoomEventFilter) - .on('zoom', zoomPan); - - var _selection = d3_select(null); - - var scheduleRedraw = throttle(redraw, 750); - // var isRedrawScheduled = false; - // var pendingRedrawCall; - // function scheduleRedraw() { - // // Only schedule the redraw if one has not already been set. - // if (isRedrawScheduled) return; - // isRedrawScheduled = true; - // var that = this; - // var args = arguments; - // pendingRedrawCall = window.requestIdleCallback(function () { - // // Reset the boolean so future redraws can be set. - // isRedrawScheduled = false; - // redraw.apply(that, args); - // }, { timeout: 1400 }); - // } - - function cancelPendingRedraw() { - scheduleRedraw.cancel(); - // isRedrawScheduled = false; - // window.cancelIdleCallback(pendingRedrawCall); - } - - function map(selection$$1) { - - _selection = selection$$1; - - context - .on('change.map', immediateRedraw); - - var osm = context.connection(); - if (osm) { - osm.on('change.map', immediateRedraw); - } - context.history() - .on('change.map', immediateRedraw) - .on('undone.map redone.map', function(stack) { - var mode = context.mode().id; - if (mode !== 'browse' && mode !== 'select') return; - - var followSelected = false; - if (Array.isArray(stack.selectedIDs)) { - followSelected = (stack.selectedIDs.length === 1 && stack.selectedIDs[0][0] === 'n'); - context.enter( - modeSelect(context, stack.selectedIDs).follow(followSelected) - ); - } - if (!followSelected && stack.transform) { - map.transformEase(stack.transform); - } - }); + features.toggle = function(k) { + if (_features[k]) { + (function(f) { return f.enabled ? f.disable() : f.enable(); }(_features[k])); + update(); + } + }; - context.background() - .on('change.map', immediateRedraw); - context.features() - .on('redraw.map', immediateRedraw); + features.resetStats = function() { + for (var i = 0; i < _keys.length; i++) { + _features[_keys[i]].count = 0; + } + dispatch$$1.call('change'); + }; - drawLayers - .on('change.map', function() { - context.background().updateImagery(); - immediateRedraw(); - }); - selection$$1 - .on('dblclick.map', dblClick) - .call(zoom$$1) - .call(zoom$$1.transform, projection.transform()); - - supersurface = selection$$1.append('div') - .attr('id', 'supersurface') - .call(utilSetTransform, 0, 0); - - // Need a wrapper div because Opera can't cope with an absolutely positioned - // SVG element: http://bl.ocks.org/jfirebaugh/6fbfbd922552bf776c16 - wrapper = supersurface - .append('div') - .attr('class', 'layer layer-data'); - - map.surface = surface = wrapper - .call(drawLayers) - .selectAll('.surface') - .attr('id', 'surface'); - - surface - .call(drawLabels.observe) - .on('mousedown.zoom', function() { - if (event.button === 2) { - event.stopPropagation(); - } - }, true) - .on('mouseup.zoom', function() { - if (resetTransform()) immediateRedraw(); - }) - .on('mousemove.map', function() { - mousemove = event; - }) - .on('mouseover.vertices', function() { - if (map.editable() && !transformed) { - var hover = event.target.__data__; - surface.selectAll('.data-layer-osm') - .call(drawVertices.drawHover, context.graph(), hover, map.extent()); - dispatch$$1.call('drawn', this, { full: false }); - } - }) - .on('mouseout.vertices', function() { - if (map.editable() && !transformed) { - var hover = event.relatedTarget && event.relatedTarget.__data__; - surface.selectAll('.data-layer-osm') - .call(drawVertices.drawHover, context.graph(), hover, map.extent()); - dispatch$$1.call('drawn', this, { full: false }); - } - }); + features.gatherStats = function(d, resolver, dimensions) { + var needsRedraw = false, + type = groupBy(d, function(ent) { return ent.type; }), + entities = [].concat(type.relation || [], type.way || [], type.node || []), + currHidden, geometry, matches, i, j; - supersurface - .call(context.background()); - - context.on('enter.map', function() { - if (map.editable() && !transformed) { - - // redraw immediately any objects affected by a change in selectedIDs. - var graph = context.graph(); - var selectedAndParents = {}; - context.selectedIDs().forEach(function(id) { - var entity = graph.hasEntity(id); - if (entity) { - selectedAndParents[entity.id] = entity; - if (entity.type === 'node') { - graph.parentWays(entity).forEach(function(parent) { - selectedAndParents[parent.id] = parent; - }); - } - } - }); - var data = values$1(selectedAndParents); - var filter = function(d) { return d.id in selectedAndParents; }; - - data = context.features().filter(data, graph); - - surface.selectAll('.data-layer-osm') - .call(drawVertices.drawSelected, graph, map.extent()) - .call(drawLines, graph, data, filter) - .call(drawAreas, graph, data, filter) - .call(drawMidpoints, graph, data, filter, map.trimmedExtent()); - - dispatch$$1.call('drawn', this, { full: false }); - - - // redraw everything else later - scheduleRedraw(); - } - }); + for (i = 0; i < _keys.length; i++) { + _features[_keys[i]].count = 0; + } - map.dimensions(utilGetDimensions(selection$$1)); - } - - - function zoomEventFilter() { - // Fix for #2151, (see also d3/d3-zoom#60, d3/d3-brush#18) - // Intercept `mousedown` and check if there is an orphaned zoom gesture. - // This can happen if a previous `mousedown` occurred without a `mouseup`. - // If we detect this, dispatch `mouseup` to complete the orphaned gesture, - // so that d3-zoom won't stop propagation of new `mousedown` events. - if (event.type === 'mousedown') { - var hasOrphan = false; - var listeners = window.__on; - for (var i = 0; i < listeners.length; i++) { - var listener = listeners[i]; - if (listener.name === 'zoom' && listener.type === 'mouseup') { - hasOrphan = true; - break; - } - } - if (hasOrphan) { - var event$$1 = window.CustomEvent; - if (event$$1) { - event$$1 = new event$$1('mouseup'); - } else { - event$$1 = window.document.createEvent('Event'); - event$$1.initEvent('mouseup', false, false); - } - // Event needs to be dispatched with an event.view property. - event$$1.view = window; - window.dispatchEvent(event$$1); - } - } + // adjust the threshold for point/building culling based on viewport size.. + // a _cullFactor of 1 corresponds to a 1000x1000px viewport.. + _cullFactor = dimensions[0] * dimensions[1] / 1000000; + + for (i = 0; i < entities.length; i++) { + geometry = entities[i].geometry(resolver); + if (!(geometry === 'vertex' || geometry === 'relation')) { + matches = Object.keys(features.getMatches(entities[i], resolver, geometry)); + for (j = 0; j < matches.length; j++) { + _features[matches[j]].count++; + } + } + } - return event.button !== 2; // ignore right clicks - } + currHidden = features.hidden(); + if (currHidden !== _hidden) { + _hidden = currHidden; + needsRedraw = true; + dispatch$$1.call('change'); + } + return needsRedraw; + }; - function ztok(z) { - return 256 * Math.pow(2, z); - } - function ktoz(k) { - return Math.max(Math.log(k) / Math.LN2 - 8, 0); - } + features.stats = function() { + for (var i = 0; i < _keys.length; i++) { + _stats[_keys[i]] = _features[_keys[i]].count; + } - function pxCenter() { - return [dimensions[0] / 2, dimensions[1] / 2]; - } + return _stats; + }; - function drawVector(difference, extent) { - var mode = context.mode(); - var graph = context.graph(); - var features = context.features(); - var all = context.intersects(map.extent()); - var fullRedraw = false; - var data; - var filter; + features.clear = function(d) { + for (var i = 0; i < d.length; i++) { + features.clearEntity(d[i]); + } + }; - if (difference) { - var complete = difference.complete(map.extent()); - data = compact(values$1(complete)); - filter = function(d) { return d.id in complete; }; - features.clear(data); - } else { - // force a full redraw if gatherStats detects that a feature - // should be auto-hidden (e.g. points or buildings).. - if (features.gatherStats(all, graph, dimensions)) { - extent = undefined; - } + features.clearEntity = function(entity) { + delete _cache[osmEntity$$1.key(entity)]; + }; - if (extent) { - data = context.intersects(map.extent().intersection(extent)); - var set$$1 = set$2(map$3(data, 'id')); - filter = function(d) { return set$$1.has(d.id); }; - } else { - data = all; - fullRedraw = true; - filter = utilFunctor(true); - } - } + features.reset = function() { + _cache = {}; + }; - data = features.filter(data, graph); - if (mode && mode.id === 'select') { - // update selected vertices - the user might have just double-clicked a way, - // creating a new vertex, triggering a partial redraw without a mode change - surface.selectAll('.data-layer-osm') - .call(drawVertices.drawSelected, graph, map.extent()); - } + features.getMatches = function(entity, resolver, geometry) { + if (geometry === 'vertex' || geometry === 'relation') return {}; - surface.selectAll('.data-layer-osm') - .call(drawVertices, graph, data, filter, map.extent(), fullRedraw) - .call(drawLines, graph, data, filter) - .call(drawAreas, graph, data, filter) - .call(drawMidpoints, graph, data, filter, map.trimmedExtent()) - .call(drawLabels, graph, data, filter, dimensions, fullRedraw) - .call(drawPoints, graph, data, filter); + var ent = osmEntity$$1.key(entity); + if (!_cache[ent]) { + _cache[ent] = {}; + } - dispatch$$1.call('drawn', this, {full: true}); - } + if (!_cache[ent].matches) { + var matches = {}, + hasMatch = false; + + for (var i = 0; i < _keys.length; i++) { + if (_keys[i] === 'others') { + if (hasMatch) continue; + + // Multipolygon members: + // If an entity... + // 1. is a way that hasn't matched other 'interesting' feature rules, + // 2. and it belongs to a single parent multipolygon relation + // ...then match whatever feature rules the parent multipolygon has matched. + // see #2548, #2887 + // + // IMPORTANT: + // For this to work, getMatches must be called on relations before ways. + // + if (entity.type === 'way') { + var parents = features.getParents(entity, resolver, geometry); + if (parents.length === 1 && parents[0].isMultipolygon()) { + var pkey = osmEntity$$1.key(parents[0]); + if (_cache[pkey] && _cache[pkey].matches) { + matches = clone(_cache[pkey].matches); + continue; + } + } + } + } + + if (_features[_keys[i]].filter(entity, resolver, geometry)) { + matches[_keys[i]] = hasMatch = true; + } + } + _cache[ent].matches = matches; + } + return _cache[ent].matches; + }; - function editOff() { - context.features().resetStats(); - surface.selectAll('.layer-osm *').remove(); - var mode = context.mode(); - if (mode && mode.id !== 'save') { - context.enter(modeBrowse(context)); - } + features.getParents = function(entity, resolver, geometry) { + if (geometry === 'point') return []; - dispatch$$1.call('drawn', this, {full: true}); - } + var ent = osmEntity$$1.key(entity); + if (!_cache[ent]) { + _cache[ent] = {}; + } + if (!_cache[ent].parents) { + var parents = []; + if (geometry === 'vertex') { + parents = resolver.parentWays(entity); + } else { // 'line', 'area', 'relation' + parents = resolver.parentRelations(entity); + } + _cache[ent].parents = parents; + } + return _cache[ent].parents; + }; - function dblClick() { - if (!dblclickEnabled) { - event.preventDefault(); - event.stopImmediatePropagation(); - } - } + features.isHiddenFeature = function(entity, resolver, geometry) { + if (!_hidden.length) return false; + if (!entity.version) return false; - function zoomPan(manualEvent) { - var event$$1 = (manualEvent || event); - var source = event$$1.sourceEvent; - var eventTransform = event$$1.transform; + var matches = features.getMatches(entity, resolver, geometry); - if (transformStart.x === eventTransform.x && - transformStart.y === eventTransform.y && - transformStart.k === eventTransform.k) { - return; // no change - } + for (var i = 0; i < _hidden.length; i++) { + if (matches[_hidden[i]]) return true; + } + return false; + }; - // Normalize mousewheel - #3029 - // If wheel delta is provided in LINE units, recalculate it in PIXEL units - // We are essentially redoing the calculations that occur here: - // https://github.com/d3/d3-zoom/blob/78563a8348aa4133b07cac92e2595c2227ca7cd7/src/zoom.js#L203 - // See this for more info: - // https://github.com/basilfx/normalize-wheel/blob/master/src/normalizeWheel.js - if (source && source.type === 'wheel' && source.deltaMode === 1 /* LINE */) { - // pick sensible scroll amount if user scrolling fast or slow.. - var lines = Math.abs(source.deltaY); - var scroll = lines > 2 ? 40 : lines * 10; - - var t0 = transformed ? transformLast : transformStart; - var p0 = mouse(source); - var p1 = t0.invert(p0); - var k2 = t0.k * Math.pow(2, -source.deltaY * scroll / 500); - var x2 = p0[0] - p1[0] * k2; - var y2 = p0[1] - p1[1] * k2; - - eventTransform = identity$7.translate(x2,y2).scale(k2); - _selection.node().__zoom = eventTransform; - } - if (ktoz(eventTransform.k * 2 * Math.PI) < minzoom) { - surface.interrupt(); - uiFlash().text(t('cannot_zoom'))(); - setZoom(context.minEditableZoom(), true); - scheduleRedraw(); - dispatch$$1.call('move', this, map); - return; - } + features.isHiddenChild = function(entity, resolver, geometry) { + if (!_hidden.length) return false; + if (!entity.version || geometry === 'point') return false; - projection.transform(eventTransform); + var parents = features.getParents(entity, resolver, geometry); + if (!parents.length) return false; - var scale = eventTransform.k / transformStart.k; - var tX = (eventTransform.x / scale - transformStart.x) * scale; - var tY = (eventTransform.y / scale - transformStart.y) * scale; + for (var i = 0; i < parents.length; i++) { + if (!features.isHidden(parents[i], resolver, parents[i].geometry(resolver))) { + return false; + } + } + return true; + }; - if (context.inIntro()) { - curtainProjection.transform({ - x: eventTransform.x - tX, - y: eventTransform.y - tY, - k: eventTransform.k - }); - } - if (source) mousemove = event$$1; - transformed = true; - transformLast = eventTransform; - utilSetTransform(supersurface, tX, tY, scale); - scheduleRedraw(); + features.hasHiddenConnections = function(entity, resolver) { + if (!_hidden.length) return false; + var childNodes, connections; - dispatch$$1.call('move', this, map); - } + if (entity.type === 'midpoint') { + childNodes = [resolver.entity(entity.edge[0]), resolver.entity(entity.edge[1])]; + connections = []; + } else { + childNodes = entity.nodes ? resolver.childNodes(entity) : []; + connections = features.getParents(entity, resolver, entity.geometry(resolver)); + } + // gather ways connected to child nodes.. + connections = reduce(childNodes, function(result, e) { + return resolver.isShared(e) ? union(result, resolver.parentWays(e)) : result; + }, connections); - function resetTransform() { - if (!transformed) return false; + return connections.length ? some(connections, function(e) { + return features.isHidden(e, resolver, e.geometry(resolver)); + }) : false; + }; - // deprecation warning - Radial Menu to be removed in iD v3 - surface.selectAll('.edit-menu, .radial-menu').interrupt().remove(); - utilSetTransform(supersurface, 0, 0); - transformed = false; - if (context.inIntro()) { - curtainProjection.transform(projection.transform()); - } - return true; - } + features.isHidden = function(entity, resolver, geometry) { + if (!_hidden.length) return false; + if (!entity.version) return false; - function redraw(difference, extent) { - if (surface.empty() || !redrawEnabled) return; + var fn = (geometry === 'vertex' ? features.isHiddenChild : features.isHiddenFeature); + return fn(entity, resolver, geometry); + }; - // If we are in the middle of a zoom/pan, we can't do differenced redraws. - // It would result in artifacts where differenced entities are redrawn with - // one transform and unchanged entities with another. - if (resetTransform()) { - difference = extent = undefined; - } - var z = String(~~map.zoom()); - if (surface.attr('data-zoom') !== z) { - surface.attr('data-zoom', z) - .classed('low-zoom', z <= 16); - } + features.filter = function(d, resolver) { + if (!_hidden.length) return d; - if (!difference) { - supersurface.call(context.background()); - } + var result = []; + for (var i = 0; i < d.length; i++) { + var entity = d[i]; + if (!features.isHidden(entity, resolver, entity.geometry(resolver))) { + result.push(entity); + } + } + return result; + }; - wrapper - .call(drawLayers); - // OSM - if (map.editable()) { - context.loadTiles(projection, dimensions); - drawVector(difference, extent); - } else { - editOff(); - } + features.init = function() { + var storage = context.storage('disabled-features'); + if (storage) { + var storageDisabled = storage.replace(/;/g, ',').split(','); + storageDisabled.forEach(features.disable); + } - transformStart = projection.transform(); + var q = utilStringQs(window.location.hash.substring(1)); + if (q.disable_features) { + var hashDisabled = q.disable_features.replace(/;/g, ',').split(','); + hashDisabled.forEach(features.disable); + } + }; - return map; - } + return utilRebind(features, dispatch$$1, 'on'); + } + function utilBindOnce(target, type, listener, capture) { + var typeOnce = type + '.once'; + function one() { + target.on(typeOnce, null); + listener.apply(this, arguments); + } + target.on(typeOnce, one, capture); + return this; + } + // constants + var TAU$1 = 2 * Math.PI; + var TILESIZE = 256; + var kMin = geoZoomToScale(2, TILESIZE); + var kMax = geoZoomToScale(24, TILESIZE); + + + function rendererMap(context) { + var dispatch$$1 = dispatch('move', 'drawn'); + var projection = context.projection; + var curtainProjection = context.curtainProjection; + var drawLayers = svgLayers(projection, context); + var drawPoints = svgPoints$$1(projection, context); + var drawVertices = svgVertices$$1(projection, context); + var drawLines = svgLines$$1(projection, context); + var drawAreas = svgAreas$$1(projection, context); + var drawMidpoints = svgMidpoints$$1(projection, context); + var drawLabels = svgLabels(projection, context); + + var _selection = select(null); + var supersurface = select(null); + var wrapper = select(null); + var surface = select(null); + + var dimensions = [1, 1]; + var dblclickEnabled = true; + var redrawEnabled = true; + var transformStart = projection.transform(); + var transformLast; + var transformed = false; + var minzoom = 0; + var mouse$$1; + var mousemove; + + var zoom$$1 = d3_zoom() + .scaleExtent([kMin, kMax]) + .interpolate(interpolate) + .filter(zoomEventFilter) + .on('zoom', zoomPan); + + var scheduleRedraw = throttle(redraw, 750); + // var isRedrawScheduled = false; + // var pendingRedrawCall; + // function scheduleRedraw() { + // // Only schedule the redraw if one has not already been set. + // if (isRedrawScheduled) return; + // isRedrawScheduled = true; + // var that = this; + // var args = arguments; + // pendingRedrawCall = window.requestIdleCallback(function () { + // // Reset the boolean so future redraws can be set. + // isRedrawScheduled = false; + // redraw.apply(that, args); + // }, { timeout: 1400 }); + // } + + function cancelPendingRedraw() { + scheduleRedraw.cancel(); + // isRedrawScheduled = false; + // window.cancelIdleCallback(pendingRedrawCall); + } - var immediateRedraw = function(difference, extent) { - if (!difference && !extent) cancelPendingRedraw(); - redraw(difference, extent); - }; + function map(selection$$1) { + _selection = selection$$1; - function pointLocation(p) { - var translate = projection.translate(), - scale = projection.scale() * 2 * Math.PI; - return [(p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale]; - } + context + .on('change.map', immediateRedraw); + var osm = context.connection(); + if (osm) { + osm.on('change.map', immediateRedraw); + } - function locationPoint(l) { - var translate = projection.translate(), - scale = projection.scale() * 2 * Math.PI; - return [l[0] * scale + translate[0], l[1] * scale + translate[1]]; - } + context.history() + .on('change.map', immediateRedraw) + .on('undone.map redone.map', function(stack) { + var mode = context.mode().id; + if (mode !== 'browse' && mode !== 'select') return; + + var followSelected = false; + if (Array.isArray(stack.selectedIDs)) { + followSelected = (stack.selectedIDs.length === 1 && stack.selectedIDs[0][0] === 'n'); + context.enter( + modeSelect(context, stack.selectedIDs).follow(followSelected) + ); + } + if (!followSelected && stack.transform) { + map.transformEase(stack.transform); + } + }); + + context.background() + .on('change.map', immediateRedraw); + + context.features() + .on('redraw.map', immediateRedraw); + + drawLayers + .on('change.map', function() { + context.background().updateImagery(); + immediateRedraw(); + }); + + selection$$1 + .on('dblclick.map', dblClick) + .call(zoom$$1) + .call(zoom$$1.transform, projection.transform()); + + supersurface = selection$$1.append('div') + .attr('id', 'supersurface') + .call(utilSetTransform, 0, 0); + + // Need a wrapper div because Opera can't cope with an absolutely positioned + // SVG element: http://bl.ocks.org/jfirebaugh/6fbfbd922552bf776c16 + wrapper = supersurface + .append('div') + .attr('class', 'layer layer-data'); + + map.surface = surface = wrapper + .call(drawLayers) + .selectAll('.surface') + .attr('id', 'surface'); + + surface + .call(drawLabels.observe) + .on('mousedown.zoom', function() { + if (event.button === 2) { + event.stopPropagation(); + } + }, true) + .on('mouseup.zoom', function() { + if (resetTransform()) immediateRedraw(); + }) + .on('mousemove.map', function() { + mousemove = event; + }) + .on('mouseover.vertices', function() { + if (map.editable() && !transformed) { + var hover = event.target.__data__; + surface.selectAll('.data-layer-osm') + .call(drawVertices.drawHover, context.graph(), hover, map.extent()); + dispatch$$1.call('drawn', this, { full: false }); + } + }) + .on('mouseout.vertices', function() { + if (map.editable() && !transformed) { + var hover = event.relatedTarget && event.relatedTarget.__data__; + surface.selectAll('.data-layer-osm') + .call(drawVertices.drawHover, context.graph(), hover, map.extent()); + dispatch$$1.call('drawn', this, { full: false }); + } + }); + + supersurface + .call(context.background()); + + context.on('enter.map', function() { + if (map.editable() && !transformed) { + + // redraw immediately any objects affected by a change in selectedIDs. + var graph = context.graph(); + var selectedAndParents = {}; + context.selectedIDs().forEach(function(id) { + var entity = graph.hasEntity(id); + if (entity) { + selectedAndParents[entity.id] = entity; + if (entity.type === 'node') { + graph.parentWays(entity).forEach(function(parent) { + selectedAndParents[parent.id] = parent; + }); + } + } + }); + var data = values$1(selectedAndParents); + var filter = function(d) { return d.id in selectedAndParents; }; + + data = context.features().filter(data, graph); + + surface.selectAll('.data-layer-osm') + .call(drawVertices.drawSelected, graph, map.extent()) + .call(drawLines, graph, data, filter) + .call(drawAreas, graph, data, filter) + .call(drawMidpoints, graph, data, filter, map.trimmedExtent()); + + dispatch$$1.call('drawn', this, { full: false }); + + + // redraw everything else later + scheduleRedraw(); + } + }); + map.dimensions(utilGetDimensions(selection$$1)); + } - map.mouse = function() { - var event$$1 = mousemove || event; - if (event$$1) { - var s; - while ((s = event$$1.sourceEvent)) { event$$1 = s; } - return mouse(event$$1); - } - return null; - }; + function zoomEventFilter() { + // Fix for #2151, (see also d3/d3-zoom#60, d3/d3-brush#18) + // Intercept `mousedown` and check if there is an orphaned zoom gesture. + // This can happen if a previous `mousedown` occurred without a `mouseup`. + // If we detect this, dispatch `mouseup` to complete the orphaned gesture, + // so that d3-zoom won't stop propagation of new `mousedown` events. + if (event.type === 'mousedown') { + var hasOrphan = false; + var listeners = window.__on; + for (var i = 0; i < listeners.length; i++) { + var listener = listeners[i]; + if (listener.name === 'zoom' && listener.type === 'mouseup') { + hasOrphan = true; + break; + } + } + if (hasOrphan) { + var event$$1 = window.CustomEvent; + if (event$$1) { + event$$1 = new event$$1('mouseup'); + } else { + event$$1 = window.document.createEvent('Event'); + event$$1.initEvent('mouseup', false, false); + } + // Event needs to be dispatched with an event.view property. + event$$1.view = window; + window.dispatchEvent(event$$1); + } + } - // returns Lng/Lat - map.mouseCoordinates = function() { - var coord = map.mouse() || pxCenter(); - return projection.invert(coord); - }; + return event.button !== 2; // ignore right clicks + } - map.dblclickEnable = function(_) { - if (!arguments.length) return dblclickEnabled; - dblclickEnabled = _; - return map; - }; + function pxCenter() { + return [dimensions[0] / 2, dimensions[1] / 2]; + } - map.redrawEnable = function(_) { - if (!arguments.length) return redrawEnabled; - redrawEnabled = _; - return map; - }; + function drawVector(difference, extent) { + var mode = context.mode(); + var graph = context.graph(); + var features = context.features(); + var all = context.intersects(map.extent()); + var fullRedraw = false; + var data; + var filter; + if (difference) { + var complete = difference.complete(map.extent()); + data = compact(values$1(complete)); + filter = function(d) { return d.id in complete; }; + features.clear(data); - function setTransform(t2, duration, force) { - var t$$1 = projection.transform(); - if (!force && t2.k === t$$1.k && t2.x === t$$1.x && t2.y === t$$1.y) { - return false; - } + } else { + // force a full redraw if gatherStats detects that a feature + // should be auto-hidden (e.g. points or buildings).. + if (features.gatherStats(all, graph, dimensions)) { + extent = undefined; + } + + if (extent) { + data = context.intersects(map.extent().intersection(extent)); + var set$$1 = set$2(map$3(data, 'id')); + filter = function(d) { return set$$1.has(d.id); }; + + } else { + data = all; + fullRedraw = true; + filter = utilFunctor(true); + } + } - if (duration) { - _selection - .transition() - .duration(duration) - .on('start', function() { map.startEase(); }) - .call(zoom$$1.transform, identity$7.translate(t2.x, t2.y).scale(t2.k)); - } else { - projection.transform(t2); - transformStart = t2; - _selection.call(zoom$$1.transform, transformStart); - } - } + data = features.filter(data, graph); + if (mode && mode.id === 'select') { + // update selected vertices - the user might have just double-clicked a way, + // creating a new vertex, triggering a partial redraw without a mode change + surface.selectAll('.data-layer-osm') + .call(drawVertices.drawSelected, graph, map.extent()); + } - function setZoom(z2, force, duration) { - if (z2 === map.zoom() && !force) { - return false; - } + surface.selectAll('.data-layer-osm') + .call(drawVertices, graph, data, filter, map.extent(), fullRedraw) + .call(drawLines, graph, data, filter) + .call(drawAreas, graph, data, filter) + .call(drawMidpoints, graph, data, filter, map.trimmedExtent()) + .call(drawLabels, graph, data, filter, dimensions, fullRedraw) + .call(drawPoints, graph, data, filter); - var k = projection.scale(), - k2 = Math.max(ztok(2), Math.min(ztok(24), ztok(z2))) / (2 * Math.PI), - center = pxCenter(), - l = pointLocation(center); + dispatch$$1.call('drawn', this, {full: true}); + } - projection.scale(k2); - var t$$1 = projection.translate(); - l = locationPoint(l); + function editOff() { + context.features().resetStats(); + surface.selectAll('.layer-osm *').remove(); - t$$1[0] += center[0] - l[0]; - t$$1[1] += center[1] - l[1]; + var mode = context.mode(); + if (mode && mode.id !== 'save') { + context.enter(modeBrowse(context)); + } - if (duration) { - projection.scale(k); // reset scale - _selection - .transition() - .duration(duration) - .on('start', function() { map.startEase(); }) - .call(zoom$$1.transform, identity$7.translate(t$$1[0], t$$1[1]).scale(k2)); - } else { - projection.translate(t$$1); - transformStart = projection.transform(); - _selection.call(zoom$$1.transform, transformStart); - } + dispatch$$1.call('drawn', this, {full: true}); + } - return true; - } + function dblClick() { + if (!dblclickEnabled) { + event.preventDefault(); + event.stopImmediatePropagation(); + } + } - function setCenter(loc2, duration) { - var c = map.center(); - if (loc2[0] === c[0] && loc2[1] === c[1]) { - return false; - } - var t$$1 = projection.translate(), - k = projection.scale(), - pxC = pxCenter(), - ll = projection(loc2); + function zoomPan(manualEvent) { + var event$$1 = (manualEvent || event); + var source = event$$1.sourceEvent; + var eventTransform = event$$1.transform; - t$$1[0] = t$$1[0] - ll[0] + pxC[0]; - t$$1[1] = t$$1[1] - ll[1] + pxC[1]; + if (transformStart.x === eventTransform.x && + transformStart.y === eventTransform.y && + transformStart.k === eventTransform.k) { + return; // no change + } - if (duration) { - _selection - .transition() - .duration(duration) - .on('start', function() { map.startEase(); }) - .call(zoom$$1.transform, identity$7.translate(t$$1[0], t$$1[1]).scale(k)); - } else { - projection.translate(t$$1); - transformStart = projection.transform(); - _selection.call(zoom$$1.transform, transformStart); - } + // Normalize mousewheel - #3029 + // If wheel delta is provided in LINE units, recalculate it in PIXEL units + // We are essentially redoing the calculations that occur here: + // https://github.com/d3/d3-zoom/blob/78563a8348aa4133b07cac92e2595c2227ca7cd7/src/zoom.js#L203 + // See this for more info: + // https://github.com/basilfx/normalize-wheel/blob/master/src/normalizeWheel.js + if (source && source.type === 'wheel' && source.deltaMode === 1 /* LINE */) { + // pick sensible scroll amount if user scrolling fast or slow.. + var lines = Math.abs(source.deltaY); + var scroll = lines > 2 ? 40 : lines * 10; + + var t0 = transformed ? transformLast : transformStart; + var p0 = mouse$$1(source); + var p1 = t0.invert(p0); + var k2 = t0.k * Math.pow(2, -source.deltaY * scroll / 500); + var x2 = p0[0] - p1[0] * k2; + var y2 = p0[1] - p1[1] * k2; + + eventTransform = identity$7.translate(x2,y2).scale(k2); + _selection.node().__zoom = eventTransform; + } - return true; - } + if (geoScaleToZoom(eventTransform.k, TILESIZE) < minzoom) { + surface.interrupt(); + uiFlash().text(t('cannot_zoom'))(); + setZoom(context.minEditableZoom(), true); + scheduleRedraw(); + dispatch$$1.call('move', this, map); + return; + } + projection.transform(eventTransform); - map.pan = function(delta, duration) { - var t$$1 = projection.translate(), - k = projection.scale(); + var scale = eventTransform.k / transformStart.k; + var tX = (eventTransform.x / scale - transformStart.x) * scale; + var tY = (eventTransform.y / scale - transformStart.y) * scale; - t$$1[0] += delta[0]; - t$$1[1] += delta[1]; + if (context.inIntro()) { + curtainProjection.transform({ + x: eventTransform.x - tX, + y: eventTransform.y - tY, + k: eventTransform.k + }); + } - if (duration) { - _selection - .transition() - .duration(duration) - .on('start', function() { map.startEase(); }) - .call(zoom$$1.transform, identity$7.translate(t$$1[0], t$$1[1]).scale(k)); - } else { - projection.translate(t$$1); - transformStart = projection.transform(); - _selection.call(zoom$$1.transform, transformStart); - dispatch$$1.call('move', this, map); - immediateRedraw(); - } + if (source) mousemove = event$$1; + transformed = true; + transformLast = eventTransform; + utilSetTransform(supersurface, tX, tY, scale); + scheduleRedraw(); - return map; - }; + dispatch$$1.call('move', this, map); + } - map.dimensions = function(_) { - if (!arguments.length) return dimensions; - var center = map.center(); - dimensions = _; - drawLayers.dimensions(dimensions); - context.background().dimensions(dimensions); - projection.clipExtent([[0, 0], dimensions]); - mouse = utilFastMouse(supersurface.node()); - setCenter(center); + function resetTransform() { + if (!transformed) return false; - scheduleRedraw(); - return map; - }; + // deprecation warning - Radial Menu to be removed in iD v3 + surface.selectAll('.edit-menu, .radial-menu').interrupt().remove(); + utilSetTransform(supersurface, 0, 0); + transformed = false; + if (context.inIntro()) { + curtainProjection.transform(projection.transform()); + } + return true; + } - function zoomIn(delta) { - setZoom(~~map.zoom() + delta, true, 250); - } + function redraw(difference, extent) { + if (surface.empty() || !redrawEnabled) return; - function zoomOut(delta) { - setZoom(~~map.zoom() - delta, true, 250); - } + // If we are in the middle of a zoom/pan, we can't do differenced redraws. + // It would result in artifacts where differenced entities are redrawn with + // one transform and unchanged entities with another. + if (resetTransform()) { + difference = extent = undefined; + } - map.zoomIn = function() { zoomIn(1); }; - map.zoomInFurther = function() { zoomIn(4); }; + var z = String(~~map.zoom()); + if (surface.attr('data-zoom') !== z) { + surface.attr('data-zoom', z) + .classed('low-zoom', z <= 16); + } - map.zoomOut = function() { zoomOut(1); }; - map.zoomOutFurther = function() { zoomOut(4); }; + if (!difference) { + supersurface.call(context.background()); + } + wrapper + .call(drawLayers); - map.center = function(loc2) { - if (!arguments.length) { - return projection.invert(pxCenter()); - } + // OSM + if (map.editable()) { + context.loadTiles(projection, dimensions); + drawVector(difference, extent); + } else { + editOff(); + } - if (setCenter(loc2)) { - dispatch$$1.call('move', this, map); - } + transformStart = projection.transform(); - scheduleRedraw(); - return map; - }; + return map; + } - map.zoom = function(z2) { - if (!arguments.length) { - return Math.max(ktoz(projection.scale() * 2 * Math.PI), 0); - } - if (z2 < minzoom) { - surface.interrupt(); - uiFlash().text(t('cannot_zoom'))(); - z2 = context.minEditableZoom(); - } + var immediateRedraw = function(difference, extent) { + if (!difference && !extent) cancelPendingRedraw(); + redraw(difference, extent); + }; - if (setZoom(z2)) { - dispatch$$1.call('move', this, map); - } - scheduleRedraw(); - return map; - }; + map.mouse = function() { + var event$$1 = mousemove || event; + if (event$$1) { + var s; + while ((s = event$$1.sourceEvent)) { event$$1 = s; } + return mouse$$1(event$$1); + } + return null; + }; - map.zoomTo = function(entity, zoomLimits) { - var extent = entity.extent(context.graph()); - if (!isFinite(extent.area())) return; + // returns Lng/Lat + map.mouseCoordinates = function() { + var coord = map.mouse() || pxCenter(); + return projection.invert(coord); + }; - var z2 = map.trimmedExtentZoom(extent); - zoomLimits = zoomLimits || [context.minEditableZoom(), 20]; - map.centerZoom(extent.center(), Math.min(Math.max(z2, zoomLimits[0]), zoomLimits[1])); - }; + map.dblclickEnable = function(_) { + if (!arguments.length) return dblclickEnabled; + dblclickEnabled = _; + return map; + }; - map.centerZoom = function(loc2, z2) { - var centered = setCenter(loc2), - zoomed = setZoom(z2); - if (centered || zoomed) { - dispatch$$1.call('move', this, map); - } + map.redrawEnable = function(_) { + if (!arguments.length) return redrawEnabled; + redrawEnabled = _; + return map; + }; - scheduleRedraw(); - return map; - }; + function setTransform(t2, duration, force) { + var t$$1 = projection.transform(); + if (!force && t2.k === t$$1.k && t2.x === t$$1.x && t2.y === t$$1.y) { + return false; + } - map.centerEase = function(loc2, duration) { - duration = duration || 250; - setCenter(loc2, duration); - return map; - }; + if (duration) { + _selection + .transition() + .duration(duration) + .on('start', function() { map.startEase(); }) + .call(zoom$$1.transform, identity$7.translate(t2.x, t2.y).scale(t2.k)); + } else { + projection.transform(t2); + transformStart = t2; + _selection.call(zoom$$1.transform, transformStart); + } + } - map.zoomEase = function(z2, duration) { - duration = duration || 250; - setZoom(z2, false, duration); - return map; - }; + function setZoom(z2, force, duration) { + if (z2 === map.zoom() && !force) { + return false; + } + var k = projection.scale(); + var k2 = Math.max(kMin, Math.min(kMax, geoZoomToScale(z2, TILESIZE))); + var center = pxCenter(); + var l = pointLocation(center); - map.transformEase = function(t2, duration) { - duration = duration || 250; - setTransform(t2, duration, false); - return map; - }; + projection.scale(k2); + var t$$1 = projection.translate(); + l = locationPoint(l); - map.startEase = function() { - utilBindOnce(surface, 'mousedown.ease', function() { - map.cancelEase(); - }); - return map; - }; + t$$1[0] += center[0] - l[0]; + t$$1[1] += center[1] - l[1]; + if (duration) { + projection.scale(k); // reset scale + _selection + .transition() + .duration(duration) + .on('start', function() { map.startEase(); }) + .call(zoom$$1.transform, identity$7.translate(t$$1[0], t$$1[1]).scale(k2)); + } else { + projection.translate(t$$1); + transformStart = projection.transform(); + _selection.call(zoom$$1.transform, transformStart); + } - map.cancelEase = function() { - _selection.interrupt(); - return map; - }; + return true; - map.extent = function(_) { - if (!arguments.length) { - return new geoExtent$$1(projection.invert([0, dimensions[1]]), - projection.invert([dimensions[0], 0])); - } else { - var extent = geoExtent$$1(_); - map.centerZoom(extent.center(), map.extentZoom(extent)); - } - }; + function locationPoint(l) { + var translate = projection.translate(); + var scale = projection.scale() * TAU$1; + return [l[0] * scale + translate[0], l[1] * scale + translate[1]]; + } + function pointLocation(p) { + var translate = projection.translate(); + var scale = projection.scale() * TAU$1; + return [(p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale]; + } + } - map.trimmedExtent = function(_) { - if (!arguments.length) { - var headerY = 60, footerY = 30, pad = 10; - return new geoExtent$$1(projection.invert([pad, dimensions[1] - footerY - pad]), - projection.invert([dimensions[0] - pad, headerY + pad])); - } else { - var extent = geoExtent$$1(_); - map.centerZoom(extent.center(), map.trimmedExtentZoom(extent)); - } - }; + function setCenter(loc2, duration) { + var c = map.center(); + if (loc2[0] === c[0] && loc2[1] === c[1]) { + return false; + } - function calcZoom(extent, dim) { - var tl = projection([extent[0][0], extent[1][1]]), - br = projection([extent[1][0], extent[0][1]]); + var t$$1 = projection.translate(); + var k = projection.scale(); + var pxC = pxCenter(); + var ll = projection(loc2); - // Calculate maximum zoom that fits extent - var hFactor = (br[0] - tl[0]) / dim[0], - vFactor = (br[1] - tl[1]) / dim[1], - hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2, - vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2, - newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff); + t$$1[0] = t$$1[0] - ll[0] + pxC[0]; + t$$1[1] = t$$1[1] - ll[1] + pxC[1]; - return newZoom; - } + if (duration) { + _selection + .transition() + .duration(duration) + .on('start', function() { map.startEase(); }) + .call(zoom$$1.transform, identity$7.translate(t$$1[0], t$$1[1]).scale(k)); + } else { + projection.translate(t$$1); + transformStart = projection.transform(); + _selection.call(zoom$$1.transform, transformStart); + } + return true; + } - map.extentZoom = function(_) { - return calcZoom(geoExtent$$1(_), dimensions); - }; + map.pan = function(delta, duration) { + var t$$1 = projection.translate(); + var k = projection.scale(); - map.trimmedExtentZoom = function(_) { - var trimY = 120, trimX = 40, - trimmed = [dimensions[0] - trimX, dimensions[1] - trimY]; - return calcZoom(geoExtent$$1(_), trimmed); - }; + t$$1[0] += delta[0]; + t$$1[1] += delta[1]; + if (duration) { + _selection + .transition() + .duration(duration) + .on('start', function() { map.startEase(); }) + .call(zoom$$1.transform, identity$7.translate(t$$1[0], t$$1[1]).scale(k)); + } else { + projection.translate(t$$1); + transformStart = projection.transform(); + _selection.call(zoom$$1.transform, transformStart); + dispatch$$1.call('move', this, map); + immediateRedraw(); + } - map.editable = function() { - var osmLayer = surface.selectAll('.data-layer-osm'); - if (!osmLayer.empty() && osmLayer.classed('disabled')) return false; + return map; + }; - return map.zoom() >= context.minEditableZoom(); - }; + map.dimensions = function(_) { + if (!arguments.length) return dimensions; + var center = map.center(); + dimensions = _; + drawLayers.dimensions(dimensions); + context.background().dimensions(dimensions); + projection.clipExtent([[0, 0], dimensions]); + mouse$$1 = utilFastMouse(supersurface.node()); + setCenter(center); - map.minzoom = function(_) { - if (!arguments.length) return minzoom; - minzoom = _; - return map; - }; + scheduleRedraw(); + return map; + }; - map.layers = drawLayers; - - - return utilRebind(map, dispatch$$1, 'on'); -} - -function uiMapInMap(context) { - - function map_in_map(selection$$1) { - var backgroundLayer = rendererTileLayer(context); - var overlayLayers = {}; - var projection$$1 = geoRawMercator(); - var gpxLayer = svgGpx$$1(projection$$1, context).showLabels(false); - var debugLayer = svgDebug$$1(projection$$1, context); - var zoom$$1 = d3_zoom() - .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(24)]) - .on('start', zoomStarted) - .on('zoom', zoomed) - .on('end', zoomEnded); - var isTransformed = false; - var isHidden = true; - var skipEvents = false; - var gesture = null; - var zDiff = 6; // by default, minimap renders at (main zoom - 6) - var wrap = d3_select(null); - var tiles = d3_select(null); - var viewport = d3_select(null); - var tStart; // transform at start of gesture - var tCurr; // transform at most recent event - var timeoutId; - - - function zoomStarted() { - if (skipEvents) return; - tStart = tCurr = projection$$1.transform(); - gesture = null; - } + function zoomIn(delta) { + setZoom(~~map.zoom() + delta, true, 250); + } + function zoomOut(delta) { + setZoom(~~map.zoom() - delta, true, 250); + } - function zoomed() { - if (skipEvents) return; + map.zoomIn = function() { zoomIn(1); }; + map.zoomInFurther = function() { zoomIn(4); }; - var x = event.transform.x; - var y = event.transform.y; - var k = event.transform.k; - var isZooming = (k !== tStart.k); - var isPanning = (x !== tStart.x || y !== tStart.y); + map.zoomOut = function() { zoomOut(1); }; + map.zoomOutFurther = function() { zoomOut(4); }; - if (!isZooming && !isPanning) { - return; // no change - } - // lock in either zooming or panning, don't allow both in minimap. - if (!gesture) { - gesture = isZooming ? 'zoom' : 'pan'; - } + map.center = function(loc2) { + if (!arguments.length) { + return projection.invert(pxCenter()); + } - var tMini = projection$$1.transform(); - var tX, tY, scale; + if (setCenter(loc2)) { + dispatch$$1.call('move', this, map); + } - if (gesture === 'zoom') { - var dMini = utilGetDimensions(wrap); - var cMini = geoVecScale(dMini, 0.5); - scale = k / tMini.k; - tX = (cMini[0] / scale - cMini[0]) * scale; - tY = (cMini[1] / scale - cMini[1]) * scale; - } else { - k = tMini.k; - scale = 1; - tX = x - tMini.x; - tY = y - tMini.y; - } + scheduleRedraw(); + return map; + }; - utilSetTransform(tiles, tX, tY, scale); - utilSetTransform(viewport, 0, 0, scale); - isTransformed = true; - tCurr = identity$7.translate(x, y).scale(k); - var zMain = geoScaleToZoom(context.projection.scale()); - var zMini = geoScaleToZoom(k); + map.zoom = function(z2) { + if (!arguments.length) { + return Math.max(geoScaleToZoom(projection.scale(), TILESIZE), 0); + } - zDiff = zMain - zMini; + if (z2 < minzoom) { + surface.interrupt(); + uiFlash().text(t('cannot_zoom'))(); + z2 = context.minEditableZoom(); + } - queueRedraw(); - } + if (setZoom(z2)) { + dispatch$$1.call('move', this, map); + } + scheduleRedraw(); + return map; + }; - function zoomEnded() { - if (skipEvents) return; - if (gesture !== 'pan') return; - updateProjection(); - gesture = null; - var dMini = utilGetDimensions(wrap); - var cMini = geoVecScale(dMini, 0.5); - context.map().center(projection$$1.invert(cMini)); // recenter main map.. - } + map.zoomTo = function(entity, zoomLimits) { + var extent = entity.extent(context.graph()); + if (!isFinite(extent.area())) return; + var z2 = map.trimmedExtentZoom(extent); + zoomLimits = zoomLimits || [context.minEditableZoom(), 24]; + map.centerZoom(extent.center(), Math.min(Math.max(z2, zoomLimits[0]), zoomLimits[1])); + }; - function updateProjection() { - var loc = context.map().center(); - var dMini = utilGetDimensions(wrap); - var cMini = geoVecScale(dMini, 0.5); - var tMain = context.projection.transform(); - var zMain = geoScaleToZoom(tMain.k); - var zMini = Math.max(zMain - zDiff, 0.5); - var kMini = geoZoomToScale(zMini); - projection$$1 - .translate([tMain.x, tMain.y]) - .scale(kMini); + map.centerZoom = function(loc2, z2) { + var centered = setCenter(loc2); + var zoomed = setZoom(z2); - var point$$1 = projection$$1(loc); - var mouse = (gesture === 'pan') ? geoVecSubtract([tCurr.x, tCurr.y], [tStart.x, tStart.y]) : [0, 0]; - var xMini = cMini[0] - point$$1[0] + tMain.x + mouse[0]; - var yMini = cMini[1] - point$$1[1] + tMain.y + mouse[1]; + if (centered || zoomed) { + dispatch$$1.call('move', this, map); + } - projection$$1 - .translate([xMini, yMini]) - .clipExtent([[0, 0], dMini]); + scheduleRedraw(); + return map; + }; - tCurr = projection$$1.transform(); - if (isTransformed) { - utilSetTransform(tiles, 0, 0); - utilSetTransform(viewport, 0, 0); - isTransformed = false; - } + map.centerEase = function(loc2, duration) { + duration = duration || 250; + setCenter(loc2, duration); + return map; + }; - zoom$$1 - .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(zMain - 3)]); - skipEvents = true; - wrap.call(zoom$$1.transform, tCurr); - skipEvents = false; - } + map.zoomEase = function(z2, duration) { + duration = duration || 250; + setZoom(z2, false, duration); + return map; + }; - function redraw() { - clearTimeout(timeoutId); - if (isHidden) return; - - updateProjection(); - - var dMini = utilGetDimensions(wrap); - var zMini = geoScaleToZoom(projection$$1.scale()); - - // setup tile container - tiles = wrap - .selectAll('.map-in-map-tiles') - .data([0]); - - tiles = tiles.enter() - .append('div') - .attr('class', 'map-in-map-tiles') - .merge(tiles); - - // redraw background - backgroundLayer - .source(context.background().baseLayerSource()) - .projection(projection$$1) - .dimensions(dMini); - - var background = tiles - .selectAll('.map-in-map-background') - .data([0]); - - background.enter() - .append('div') - .attr('class', 'map-in-map-background') - .merge(background) - .call(backgroundLayer); - - - // redraw overlay - var overlaySources = context.background().overlayLayerSources(); - var activeOverlayLayers = []; - for (var i = 0; i < overlaySources.length; i++) { - if (overlaySources[i].validZoom(zMini)) { - if (!overlayLayers[i]) overlayLayers[i] = rendererTileLayer(context); - activeOverlayLayers.push(overlayLayers[i] - .source(overlaySources[i]) - .projection(projection$$1) - .dimensions(dMini)); - } - } + map.transformEase = function(t2, duration) { + duration = duration || 250; + setTransform(t2, duration, false); + return map; + }; - var overlay = tiles - .selectAll('.map-in-map-overlay') - .data([0]); - overlay = overlay.enter() - .append('div') - .attr('class', 'map-in-map-overlay') - .merge(overlay); + map.startEase = function() { + utilBindOnce(surface, 'mousedown.ease', function() { + map.cancelEase(); + }); + return map; + }; - var overlays = overlay - .selectAll('div') - .data(activeOverlayLayers, function(d) { return d.source().name(); }); + map.cancelEase = function() { + _selection.interrupt(); + return map; + }; - overlays.exit() - .remove(); - overlays = overlays.enter() - .append('div') - .merge(overlays) - .each(function(layer) { d3_select(this).call(layer); }); + map.extent = function(_) { + if (!arguments.length) { + return new geoExtent$$1( + projection.invert([0, dimensions[1]]), + projection.invert([dimensions[0], 0]) + ); + } else { + var extent = geoExtent$$1(_); + map.centerZoom(extent.center(), map.extentZoom(extent)); + } + }; - var dataLayers = tiles - .selectAll('.map-in-map-data') - .data([0]); + map.trimmedExtent = function(_) { + if (!arguments.length) { + var headerY = 60; + var footerY = 30; + var pad = 10; + return new geoExtent$$1( + projection.invert([pad, dimensions[1] - footerY - pad]), + projection.invert([dimensions[0] - pad, headerY + pad]) + ); + } else { + var extent = geoExtent$$1(_); + map.centerZoom(extent.center(), map.trimmedExtentZoom(extent)); + } + }; - dataLayers.exit() - .remove(); - dataLayers = dataLayers.enter() - .append('svg') - .attr('class', 'map-in-map-data') - .merge(dataLayers) - .call(gpxLayer) - .call(debugLayer); + function calcZoom(extent, dim) { + var tl = projection([extent[0][0], extent[1][1]]); + var br = projection([extent[1][0], extent[0][1]]); + // Calculate maximum zoom that fits extent + var hFactor = (br[0] - tl[0]) / dim[0]; + var vFactor = (br[1] - tl[1]) / dim[1]; + var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2; + var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2; + var newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff); - // redraw viewport bounding box - if (gesture !== 'pan') { - var getPath = d3_geoPath(projection$$1); - var bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] }; + return newZoom; + } - viewport = wrap.selectAll('.map-in-map-viewport') - .data([0]); - viewport = viewport.enter() - .append('svg') - .attr('class', 'map-in-map-viewport') - .merge(viewport); + map.extentZoom = function(_) { + return calcZoom(geoExtent$$1(_), dimensions); + }; - var path = viewport.selectAll('.map-in-map-bbox') - .data([bbox]); + map.trimmedExtentZoom = function(_) { + var trimY = 120; + var trimX = 40; + var trimmed = [dimensions[0] - trimX, dimensions[1] - trimY]; + return calcZoom(geoExtent$$1(_), trimmed); + }; - path.enter() - .append('path') - .attr('class', 'map-in-map-bbox') - .merge(path) - .attr('d', getPath) - .classed('thick', function(d) { return getPath.area(d) < 30; }); - } - } + map.editable = function() { + var osmLayer = surface.selectAll('.data-layer-osm'); + if (!osmLayer.empty() && osmLayer.classed('disabled')) return false; - function queueRedraw() { - clearTimeout(timeoutId); - timeoutId = setTimeout(function() { redraw(); }, 750); - } + return map.zoom() >= context.minEditableZoom(); + }; - function toggle() { - if (event) event.preventDefault(); + map.minzoom = function(_) { + if (!arguments.length) return minzoom; + minzoom = _; + return map; + }; - isHidden = !isHidden; - d3_select('.minimap-toggle-item') - .classed('active', !isHidden) - .select('input') - .property('checked', !isHidden); + map.layers = drawLayers; - if (isHidden) { - wrap - .style('display', 'block') - .style('opacity', '1') - .transition() - .duration(200) - .style('opacity', '0') - .on('end', function() { - selection$$1.selectAll('.map-in-map') - .style('display', 'none'); - }); - } else { - wrap - .style('display', 'block') - .style('opacity', '0') - .transition() - .duration(200) - .style('opacity', '1') - .on('end', function() { - redraw(); - }); - } - } + return utilRebind(map, dispatch$$1, 'on'); + } - uiMapInMap.toggle = toggle; + function uiMapInMap(context) { - wrap = selection$$1.selectAll('.map-in-map') - .data([0]); + function map_in_map(selection$$1) { + var backgroundLayer = rendererTileLayer(context); + var overlayLayers = {}; + var projection$$1 = geoRawMercator(); + var gpxLayer = svgGpx$$1(projection$$1, context).showLabels(false); + var debugLayer = svgDebug$$1(projection$$1, context); + var zoom$$1 = d3_zoom() + .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(24)]) + .on('start', zoomStarted) + .on('zoom', zoomed) + .on('end', zoomEnded); + var isTransformed = false; + var isHidden = true; + var skipEvents = false; + var gesture = null; + var zDiff = 6; // by default, minimap renders at (main zoom - 6) + var wrap = select(null); + var tiles = select(null); + var viewport = select(null); + var tStart; // transform at start of gesture + var tCurr; // transform at most recent event + var timeoutId; - wrap = wrap.enter() - .append('div') - .attr('class', 'map-in-map') - .style('display', (isHidden ? 'none' : 'block')) - .call(zoom$$1) - .on('dblclick.zoom', null) - .merge(wrap); - context.map() - .on('drawn.map-in-map', function(drawn) { - if (drawn.full === true) { - redraw(); - } - }); + function zoomStarted() { + if (skipEvents) return; + tStart = tCurr = projection$$1.transform(); + gesture = null; + } - redraw(); - var keybinding = d3keybinding('map-in-map') - .on(t('background.minimap.key'), toggle); + function zoomed() { + if (skipEvents) return; - d3_select(document) - .call(keybinding); - } + var x = event.transform.x; + var y = event.transform.y; + var k = event.transform.k; + var isZooming = (k !== tStart.k); + var isPanning = (x !== tStart.x || y !== tStart.y); - return map_in_map; -} + if (!isZooming && !isPanning) { + return; // no change + } -function uiBackground(context) { - var key = t('background.key'); + // lock in either zooming or panning, don't allow both in minimap. + if (!gesture) { + gesture = isZooming ? 'zoom' : 'pan'; + } - var _customSource = context.background().findSource('custom'); - var _previousBackground = context.background().findSource(context.storage('background-last-used-toggle')); - var _shown = false; + var tMini = projection$$1.transform(); + var tX, tY, scale; - var _backgroundList = d3_select(null); - var _overlayList = d3_select(null); - var _displayOptionsContainer = d3_select(null); - var _offsetContainer = d3_select(null); + if (gesture === 'zoom') { + var dMini = utilGetDimensions(wrap); + var cMini = geoVecScale(dMini, 0.5); + scale = k / tMini.k; + tX = (cMini[0] / scale - cMini[0]) * scale; + tY = (cMini[1] / scale - cMini[1]) * scale; + } else { + k = tMini.k; + scale = 1; + tX = x - tMini.x; + tY = y - tMini.y; + } - var backgroundDisplayOptions = uiBackgroundDisplayOptions(context); - var backgroundOffset = uiBackgroundOffset(context); + utilSetTransform(tiles, tX, tY, scale); + utilSetTransform(viewport, 0, 0, scale); + isTransformed = true; + tCurr = identity$7.translate(x, y).scale(k); + var zMain = geoScaleToZoom(context.projection.scale()); + var zMini = geoScaleToZoom(k); - function setTooltips(selection$$1) { - selection$$1.each(function(d, i, nodes) { - var item = d3_select(this).select('label'); - var span = item.select('span'); - var placement = (i < nodes.length / 2) ? 'bottom' : 'top'; - var description = d.description(); - var isOverflowing = (span.property('clientWidth') !== span.property('scrollWidth')); + zDiff = zMain - zMini; - if (d === _previousBackground) { - item.call(tooltip() - .placement(placement) - .html(true) - .title(function() { - var tip = '
      ' + t('background.switch') + '
      '; - return uiTooltipHtml(tip, uiCmd('⌘' + key)); - }) - ); - } else if (description || isOverflowing) { - item.call(tooltip() - .placement(placement) - .title(description || d.name()) - ); - } else { - item.call(tooltip().destroy); - } - }); - } + queueRedraw(); + } - function updateLayerSelections(selection$$1) { - function active(d) { - return context.background().showsLayer(d); - } + function zoomEnded() { + if (skipEvents) return; + if (gesture !== 'pan') return; - selection$$1.selectAll('.layer') - .classed('active', active) - .classed('switch', function(d) { return d === _previousBackground; }) - .call(setTooltips) - .selectAll('input') - .property('checked', active); - } + updateProjection(); + gesture = null; + var dMini = utilGetDimensions(wrap); + var cMini = geoVecScale(dMini, 0.5); + context.map().center(projection$$1.invert(cMini)); // recenter main map.. + } - function chooseBackground(d) { - if (d.id === 'custom' && !d.template()) { - return editCustom(); - } + function updateProjection() { + var loc = context.map().center(); + var dMini = utilGetDimensions(wrap); + var cMini = geoVecScale(dMini, 0.5); + var tMain = context.projection.transform(); + var zMain = geoScaleToZoom(tMain.k); + var zMini = Math.max(zMain - zDiff, 0.5); + var kMini = geoZoomToScale(zMini); - event.preventDefault(); - _previousBackground = context.background().baseLayerSource(); - context.storage('background-last-used-toggle', _previousBackground.id); - context.storage('background-last-used', d.id); - context.background().baseLayerSource(d); - _backgroundList.call(updateLayerSelections); - document.activeElement.blur(); - } + projection$$1 + .translate([tMain.x, tMain.y]) + .scale(kMini); + var point$$1 = projection$$1(loc); + var mouse$$1 = (gesture === 'pan') ? geoVecSubtract([tCurr.x, tCurr.y], [tStart.x, tStart.y]) : [0, 0]; + var xMini = cMini[0] - point$$1[0] + tMain.x + mouse$$1[0]; + var yMini = cMini[1] - point$$1[1] + tMain.y + mouse$$1[1]; - function editCustom() { - event.preventDefault(); - var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png'; - var template = window.prompt( - t('background.custom_prompt', { example: example }), - _customSource.template() || example - ); + projection$$1 + .translate([xMini, yMini]) + .clipExtent([[0, 0], dMini]); - if (template) { - context.storage('background-custom-template', template); - _customSource.template(template); - chooseBackground(_customSource); - } else { - _backgroundList.call(updateLayerSelections); - } - } + tCurr = projection$$1.transform(); + if (isTransformed) { + utilSetTransform(tiles, 0, 0); + utilSetTransform(viewport, 0, 0); + isTransformed = false; + } - function chooseOverlay(d) { - event.preventDefault(); - context.background().toggleOverlayLayer(d); - _overlayList.call(updateLayerSelections); - document.activeElement.blur(); - } + zoom$$1 + .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(zMain - 3)]); + skipEvents = true; + wrap.call(zoom$$1.transform, tCurr); + skipEvents = false; + } - function drawListItems(layerList, type, change, filter) { - var sources = context.background() - .sources(context.map().extent()) - .filter(filter); - var layerLinks = layerList.selectAll('li.layer') - .data(sources, function(d) { return d.name(); }); + function redraw() { + clearTimeout(timeoutId); + if (isHidden) return; - layerLinks.exit() - .remove(); + updateProjection(); - var enter = layerLinks.enter() - .append('li') - .attr('class', 'layer') - .classed('layer-custom', function(d) { return d.id === 'custom'; }) - .classed('best', function(d) { return d.best(); }); + var dMini = utilGetDimensions(wrap); + var zMini = geoScaleToZoom(projection$$1.scale()); - enter.filter(function(d) { return d.id === 'custom'; }) - .append('button') - .attr('class', 'layer-browse') - .call(tooltip() - .title(t('background.custom_button')) - .placement((textDirection === 'rtl') ? 'right' : 'left') - ) - .on('click', editCustom) - .call(svgIcon('#icon-search')); + // setup tile container + tiles = wrap + .selectAll('.map-in-map-tiles') + .data([0]); - enter.filter(function(d) { return d.best(); }) - .append('div') - .attr('class', 'best') - .call(tooltip() - .title(t('background.best_imagery')) - .placement((textDirection === 'rtl') ? 'right' : 'left') - ) - .append('span') - .html('★'); + tiles = tiles.enter() + .append('div') + .attr('class', 'map-in-map-tiles') + .merge(tiles); - var label = enter - .append('label'); + // redraw background + backgroundLayer + .source(context.background().baseLayerSource()) + .projection(projection$$1) + .dimensions(dMini); - label - .append('input') - .attr('type', type) - .attr('name', 'layers') - .on('change', change); + var background = tiles + .selectAll('.map-in-map-background') + .data([0]); - label - .append('span') - .text(function(d) { return d.name(); }); + background.enter() + .append('div') + .attr('class', 'map-in-map-background') + .merge(background) + .call(backgroundLayer); + + + // redraw overlay + var overlaySources = context.background().overlayLayerSources(); + var activeOverlayLayers = []; + for (var i = 0; i < overlaySources.length; i++) { + if (overlaySources[i].validZoom(zMini)) { + if (!overlayLayers[i]) overlayLayers[i] = rendererTileLayer(context); + activeOverlayLayers.push(overlayLayers[i] + .source(overlaySources[i]) + .projection(projection$$1) + .dimensions(dMini)); + } + } + + var overlay = tiles + .selectAll('.map-in-map-overlay') + .data([0]); + + overlay = overlay.enter() + .append('div') + .attr('class', 'map-in-map-overlay') + .merge(overlay); - layerList.selectAll('li.layer') - .sort(sortSources) - .style('display', layerList.selectAll('li.layer').data().length > 0 ? 'block' : 'none'); + var overlays = overlay + .selectAll('div') + .data(activeOverlayLayers, function(d) { return d.source().name(); }); - layerList - .call(updateLayerSelections); + overlays.exit() + .remove(); + overlays = overlays.enter() + .append('div') + .merge(overlays) + .each(function(layer) { select(this).call(layer); }); - function sortSources(a, b) { - return a.best() && !b.best() ? -1 - : b.best() && !a.best() ? 1 - : d3_descending(a.area(), b.area()) || d3_ascending(a.name(), b.name()) || 0; - } - } + var dataLayers = tiles + .selectAll('.map-in-map-data') + .data([0]); - function renderBackgroundList(selection$$1) { + dataLayers.exit() + .remove(); - // the background list - var container = selection$$1.selectAll('.layer-background-list') - .data([0]); + dataLayers = dataLayers.enter() + .append('svg') + .attr('class', 'map-in-map-data') + .merge(dataLayers) + .call(gpxLayer) + .call(debugLayer); - _backgroundList = container.enter() - .append('ul') - .attr('class', 'layer-list layer-background-list') - .attr('dir', 'auto') - .merge(container); + // redraw viewport bounding box + if (gesture !== 'pan') { + var getPath = d3_geoPath(projection$$1); + var bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] }; - // add minimap toggle below list - var minimapEnter = selection$$1.selectAll('.minimap-toggle-list') - .data([0]) - .enter() - .append('ul') - .attr('class', 'layer-list minimap-toggle-list') - .append('li') - .attr('class', 'layer minimap-toggle-item'); + viewport = wrap.selectAll('.map-in-map-viewport') + .data([0]); - var minimapLabelEnter = minimapEnter - .append('label') - .call(tooltip() - .html(true) - .title(uiTooltipHtml(t('background.minimap.tooltip'), t('background.minimap.key'))) - .placement('top') - ); + viewport = viewport.enter() + .append('svg') + .attr('class', 'map-in-map-viewport') + .merge(viewport); - minimapLabelEnter - .append('input') - .attr('type', 'checkbox') - .on('change', function() { - event.preventDefault(); - uiMapInMap.toggle(); - }); - minimapLabelEnter - .append('span') - .text(t('background.minimap.description')); + var path = viewport.selectAll('.map-in-map-bbox') + .data([bbox]); + path.enter() + .append('path') + .attr('class', 'map-in-map-bbox') + .merge(path) + .attr('d', getPath) + .classed('thick', function(d) { return getPath.area(d) < 30; }); + } + } - // "Info / Report a Problem" link - selection$$1.selectAll('.imagery-faq') - .data([0]) - .enter() - .append('div') - .attr('class', 'imagery-faq') - .append('a') - .attr('target', '_blank') - .attr('tabindex', -1) - .call(svgIcon('#icon-out-link', 'inline')) - .attr('href', 'https://github.com/openstreetmap/iD/blob/master/FAQ.md#how-can-i-report-an-issue-with-background-imagery') - .append('span') - .text(t('background.imagery_source_faq')); - } + function queueRedraw() { + clearTimeout(timeoutId); + timeoutId = setTimeout(function() { redraw(); }, 750); + } - function renderOverlayList(selection$$1) { - var container = selection$$1.selectAll('.layer-overlay-list') - .data([0]); - _overlayList = container.enter() - .append('ul') - .attr('class', 'layer-list layer-overlay-list') - .attr('dir', 'auto') - .merge(container); - } + function toggle() { + if (event) event.preventDefault(); + + isHidden = !isHidden; + + select('.minimap-toggle-item') + .classed('active', !isHidden) + .select('input') + .property('checked', !isHidden); + + if (isHidden) { + wrap + .style('display', 'block') + .style('opacity', '1') + .transition() + .duration(200) + .style('opacity', '0') + .on('end', function() { + selection$$1.selectAll('.map-in-map') + .style('display', 'none'); + }); + } else { + wrap + .style('display', 'block') + .style('opacity', '0') + .transition() + .duration(200) + .style('opacity', '1') + .on('end', function() { + redraw(); + }); + } + } - function update() { - _backgroundList - .call(drawListItems, 'radio', chooseBackground, function(d) { return !d.isHidden() && !d.overlay; }); + uiMapInMap.toggle = toggle; - _overlayList - .call(drawListItems, 'checkbox', chooseOverlay, function(d) { return !d.isHidden() && d.overlay; }); + wrap = selection$$1.selectAll('.map-in-map') + .data([0]); - _displayOptionsContainer - .call(backgroundDisplayOptions); + wrap = wrap.enter() + .append('div') + .attr('class', 'map-in-map') + .style('display', (isHidden ? 'none' : 'block')) + .call(zoom$$1) + .on('dblclick.zoom', null) + .merge(wrap); - _offsetContainer - .call(backgroundOffset); - } + context.map() + .on('drawn.map-in-map', function(drawn) { + if (drawn.full === true) { + redraw(); + } + }); + redraw(); - function quickSwitch() { - if (event) { - event.stopImmediatePropagation(); - event.preventDefault(); - } - if (_previousBackground) { - chooseBackground(_previousBackground); - } - } + var keybinding = d3keybinding('map-in-map') + .on(t('background.minimap.key'), toggle); + select(document) + .call(keybinding); + } - function background(selection$$1) { + return map_in_map; + } + + function uiBackground(context) { + var key = t('background.key'); + + var _customSource = context.background().findSource('custom'); + var _previousBackground = context.background().findSource(context.storage('background-last-used-toggle')); + var _shown = false; + + var _backgroundList = select(null); + var _overlayList = select(null); + var _displayOptionsContainer = select(null); + var _offsetContainer = select(null); + + var backgroundDisplayOptions = uiBackgroundDisplayOptions(context); + var backgroundOffset = uiBackgroundOffset(context); + + + function setTooltips(selection$$1) { + selection$$1.each(function(d, i, nodes) { + var item = select(this).select('label'); + var span = item.select('span'); + var placement = (i < nodes.length / 2) ? 'bottom' : 'top'; + var description = d.description(); + var isOverflowing = (span.property('clientWidth') !== span.property('scrollWidth')); + + if (d === _previousBackground) { + item.call(tooltip() + .placement(placement) + .html(true) + .title(function() { + var tip = '
      ' + t('background.switch') + '
      '; + return uiTooltipHtml(tip, uiCmd('⌘' + key)); + }) + ); + } else if (description || isOverflowing) { + item.call(tooltip() + .placement(placement) + .title(description || d.name()) + ); + } else { + item.call(tooltip().destroy); + } + }); + } - function hidePane() { - setVisible(false); - } - function togglePane() { - if (event) event.preventDefault(); - paneTooltip.hide(button); - setVisible(!button.classed('active')); - } + function updateLayerSelections(selection$$1) { + function active(d) { + return context.background().showsLayer(d); + } - function setVisible(show) { - if (show !== _shown) { - button.classed('active', show); - _shown = show; - - if (show) { - uiMapData.hidePane(); - uiHelp.hidePane(); - update(); - - pane - .style('display', 'block') - .style('right', '-300px') - .transition() - .duration(200) - .style('right', '0px'); - - } else { - pane - .style('display', 'block') - .style('right', '0px') - .transition() - .duration(200) - .style('right', '-300px') - .on('end', function() { - d3_select(this).style('display', 'none'); - }); - } - } - } + selection$$1.selectAll('.layer') + .classed('active', active) + .classed('switch', function(d) { return d === _previousBackground; }) + .call(setTooltips) + .selectAll('input') + .property('checked', active); + } - var pane = selection$$1 - .append('div') - .attr('class', 'fillL map-overlay col3 content hide'); - - var paneTooltip = tooltip() - .placement((textDirection === 'rtl') ? 'right' : 'left') - .html(true) - .title(uiTooltipHtml(t('background.description'), key)); - - var button = selection$$1 - .append('button') - .attr('tabindex', -1) - .on('click', togglePane) - .call(svgIcon('#icon-layers', 'light')) - .call(paneTooltip); - - pane - .append('h2') - .text(t('background.title')); - - // background list - pane - .append('div') - .attr('class', 'background-background-list-container') - .call(uiDisclosure(context, 'background_list', true) - .title(t('background.backgrounds')) - .content(renderBackgroundList) - ); + function chooseBackground(d) { + if (d.id === 'custom' && !d.template()) { + return editCustom(); + } - // overlay list - pane - .append('div') - .attr('class', 'background-overlay-list-container') - .call(uiDisclosure(context, 'overlay_list', true) - .title(t('background.overlays')) - .content(renderOverlayList) - ); + event.preventDefault(); + _previousBackground = context.background().baseLayerSource(); + context.storage('background-last-used-toggle', _previousBackground.id); + context.storage('background-last-used', d.id); + context.background().baseLayerSource(d); + _backgroundList.call(updateLayerSelections); + document.activeElement.blur(); + } - // display options - _displayOptionsContainer = pane - .append('div') - .attr('class', 'background-display-options'); - // offset controls - _offsetContainer = pane - .append('div') - .attr('class', 'background-offset'); + function editCustom() { + event.preventDefault(); + var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png'; + var template = window.prompt( + t('background.custom_prompt', { example: example }), + _customSource.template() || example + ); + if (template) { + context.storage('background-custom-template', template); + _customSource.template(template); + chooseBackground(_customSource); + } else { + _backgroundList.call(updateLayerSelections); + } + } - // add listeners - context.map() - .on('move.background-update', debounce(utilCallWhenIdle(update), 1000)); - context.background() - .on('change.background-update', update); + function chooseOverlay(d) { + event.preventDefault(); + context.background().toggleOverlayLayer(d); + _overlayList.call(updateLayerSelections); + document.activeElement.blur(); + } - update(); + function drawListItems(layerList, type, change, filter) { + var sources = context.background() + .sources(context.map().extent()) + .filter(filter); + + var layerLinks = layerList.selectAll('li.layer') + .data(sources, function(d) { return d.name(); }); + + layerLinks.exit() + .remove(); + + var enter = layerLinks.enter() + .append('li') + .attr('class', 'layer') + .classed('layer-custom', function(d) { return d.id === 'custom'; }) + .classed('best', function(d) { return d.best(); }); + + enter.filter(function(d) { return d.id === 'custom'; }) + .append('button') + .attr('class', 'layer-browse') + .call(tooltip() + .title(t('background.custom_button')) + .placement((textDirection === 'rtl') ? 'right' : 'left') + ) + .on('click', editCustom) + .call(svgIcon('#icon-edit')); + + enter.filter(function(d) { return d.best(); }) + .append('div') + .attr('class', 'best') + .call(tooltip() + .title(t('background.best_imagery')) + .placement((textDirection === 'rtl') ? 'right' : 'left') + ) + .append('span') + .html('★'); + + var label = enter + .append('label'); + + label + .append('input') + .attr('type', type) + .attr('name', 'layers') + .on('change', change); + + label + .append('span') + .text(function(d) { return d.name(); }); + + + layerList.selectAll('li.layer') + .sort(sortSources) + .style('display', layerList.selectAll('li.layer').data().length > 0 ? 'block' : 'none'); + + layerList + .call(updateLayerSelections); + + + function sortSources(a, b) { + return a.best() && !b.best() ? -1 + : b.best() && !a.best() ? 1 + : d3_descending(a.area(), b.area()) || ascending(a.name(), b.name()) || 0; + } + } - var keybinding = d3keybinding('background') - .on(key, togglePane) - .on(uiCmd('⌘' + key), quickSwitch) - .on([t('map_data.key'), t('help.key')], hidePane); - d3_select(document) - .call(keybinding); + function renderBackgroundList(selection$$1) { + + // the background list + var container = selection$$1.selectAll('.layer-background-list') + .data([0]); + + _backgroundList = container.enter() + .append('ul') + .attr('class', 'layer-list layer-background-list') + .attr('dir', 'auto') + .merge(container); + + + // add minimap toggle below list + var minimapEnter = selection$$1.selectAll('.minimap-toggle-list') + .data([0]) + .enter() + .append('ul') + .attr('class', 'layer-list minimap-toggle-list') + .append('li') + .attr('class', 'layer minimap-toggle-item'); + + var minimapLabelEnter = minimapEnter + .append('label') + .call(tooltip() + .html(true) + .title(uiTooltipHtml(t('background.minimap.tooltip'), t('background.minimap.key'))) + .placement('top') + ); + + minimapLabelEnter + .append('input') + .attr('type', 'checkbox') + .on('change', function() { + event.preventDefault(); + uiMapInMap.toggle(); + }); + + minimapLabelEnter + .append('span') + .text(t('background.minimap.description')); + + + // "Info / Report a Problem" link + selection$$1.selectAll('.imagery-faq') + .data([0]) + .enter() + .append('div') + .attr('class', 'imagery-faq') + .append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .call(svgIcon('#icon-out-link', 'inline')) + .attr('href', 'https://github.com/openstreetmap/iD/blob/master/FAQ.md#how-can-i-report-an-issue-with-background-imagery') + .append('span') + .text(t('background.imagery_source_faq')); + } - uiBackground.hidePane = hidePane; - uiBackground.togglePane = togglePane; - uiBackground.setVisible = setVisible; - } - return background; -} + function renderOverlayList(selection$$1) { + var container = selection$$1.selectAll('.layer-overlay-list') + .data([0]); -function uiContributors(context) { - var osm = context.connection(), - debouncedUpdate = debounce(function() { update(); }, 1000), - limit = 4, - hidden = false, - wrap = d3_select(null); + _overlayList = container.enter() + .append('ul') + .attr('class', 'layer-list layer-overlay-list') + .attr('dir', 'auto') + .merge(container); + } - function update() { - if (!osm) return; + function update() { + _backgroundList + .call(drawListItems, 'radio', chooseBackground, function(d) { return !d.isHidden() && !d.overlay; }); - var users = {}, - entities = context.intersects(context.map().extent()); + _overlayList + .call(drawListItems, 'checkbox', chooseOverlay, function(d) { return !d.isHidden() && d.overlay; }); - entities.forEach(function(entity) { - if (entity && entity.user) users[entity.user] = true; - }); + _displayOptionsContainer + .call(backgroundDisplayOptions); - var u = Object.keys(users), - subset = u.slice(0, u.length > limit ? limit - 1 : limit); + _offsetContainer + .call(backgroundOffset); + } - wrap.html('') - .call(svgIcon('#icon-nearby', 'pre-text light')); - var userList = d3_select(document.createElement('span')); + function quickSwitch() { + if (event) { + event.stopImmediatePropagation(); + event.preventDefault(); + } + if (_previousBackground) { + chooseBackground(_previousBackground); + } + } - userList.selectAll() - .data(subset) - .enter() - .append('a') - .attr('class', 'user-link') - .attr('href', function(d) { return osm.userURL(d); }) - .attr('target', '_blank') - .attr('tabindex', -1) - .text(String); - if (u.length > limit) { - var count = d3_select(document.createElement('span')); + function background(selection$$1) { - count.append('a') - .attr('target', '_blank') - .attr('tabindex', -1) - .attr('href', function() { - return osm.changesetsURL(context.map().center(), context.map().zoom()); - }) - .text(u.length - limit + 1); + function hidePane() { + setVisible(false); + } - wrap.append('span') - .html(t('contributors.truncated_list', { users: userList.html(), count: count.html() })); + function togglePane() { + if (event) event.preventDefault(); + paneTooltip.hide(button); + setVisible(!button.classed('active')); + } - } else { - wrap.append('span') - .html(t('contributors.list', { users: userList.html() })); - } + function setVisible(show) { + if (show !== _shown) { + button.classed('active', show); + _shown = show; + + if (show) { + uiMapData.hidePane(); + uiHelp.hidePane(); + update(); + + pane + .style('display', 'block') + .style('right', '-300px') + .transition() + .duration(200) + .style('right', '0px'); + + } else { + pane + .style('display', 'block') + .style('right', '0px') + .transition() + .duration(200) + .style('right', '-300px') + .on('end', function() { + select(this).style('display', 'none'); + }); + } + } + } - if (!u.length) { - hidden = true; - wrap - .transition() - .style('opacity', 0); - } else if (hidden) { - wrap - .transition() - .style('opacity', 1); - } - } + var pane = selection$$1 + .append('div') + .attr('class', 'fillL map-pane col4 hide'); + var paneTooltip = tooltip() + .placement((textDirection === 'rtl') ? 'right' : 'left') + .html(true) + .title(uiTooltipHtml(t('background.description'), key)); - return function(selection$$1) { - if (!osm) return; - wrap = selection$$1; - update(); + var button = selection$$1 + .append('button') + .attr('tabindex', -1) + .on('click', togglePane) + .call(svgIcon('#icon-layers', 'light')) + .call(paneTooltip); - osm.on('loaded.contributors', debouncedUpdate); - context.map().on('move.contributors', debouncedUpdate); - }; -} - -function uiFeatureInfo(context) { - function update(selection$$1) { - var features = context.features(), - stats = features.stats(), - count = 0, - hiddenList = compact(map$3(features.hidden(), function(k) { - if (stats[k]) { - count += stats[k]; - return String(stats[k]) + ' ' + t('feature.' + k + '.description'); - } - })); - - selection$$1.html(''); - - if (hiddenList.length) { - var tooltipBehavior = tooltip() - .placement('top') - .html(true) - .title(function() { - return uiTooltipHtml(hiddenList.join('
      ')); - }); - - var warning = selection$$1.append('a') - .attr('href', '#') - .attr('tabindex', -1) - .html(t('feature_info.hidden_warning', { count: count })) - .call(tooltipBehavior) - .on('click', function() { - tooltipBehavior.hide(warning); - // open map data panel? - event.preventDefault(); - }); - } - selection$$1 - .classed('hide', !hiddenList.length); - } + var heading = pane + .append('div') + .attr('class', 'pane-heading'); + heading + .append('h2') + .text(t('background.title')); - return function(selection$$1) { - update(selection$$1); + heading + .append('button') + .on('click', function() { uiBackground.hidePane(); }) + .call(svgIcon('#icon-close')); - context.features().on('change.feature_info', function() { - update(selection$$1); - }); - }; -} - -function uiFullScreen(context) { - var element = context.container().node(), - keybinding = d3keybinding('full-screen'); - // button; - - - function getFullScreenFn() { - if (element.requestFullscreen) { - return element.requestFullscreen; - } else if (element.msRequestFullscreen) { - return element.msRequestFullscreen; - } else if (element.mozRequestFullScreen) { - return element.mozRequestFullScreen; - } else if (element.webkitRequestFullscreen) { - return element.webkitRequestFullscreen; - } - } + var content = pane + .append('div') + .attr('class', 'pane-content'); - function getExitFullScreenFn() { - if (document.exitFullscreen) { - return document.exitFullscreen; - } else if (document.msExitFullscreen) { - return document.msExitFullscreen; - } else if (document.mozCancelFullScreen) { - return document.mozCancelFullScreen; - } else if (document.webkitExitFullscreen) { - return document.webkitExitFullscreen; - } - } + // background list + content + .append('div') + .attr('class', 'background-background-list-container') + .call(uiDisclosure(context, 'background_list', true) + .title(t('background.backgrounds')) + .content(renderBackgroundList) + ); + // overlay list + content + .append('div') + .attr('class', 'background-overlay-list-container') + .call(uiDisclosure(context, 'overlay_list', true) + .title(t('background.overlays')) + .content(renderOverlayList) + ); - function isFullScreen() { - return document.fullscreenElement || - document.mozFullScreenElement || - document.webkitFullscreenElement || - document.msFullscreenElement; - } + // display options + _displayOptionsContainer = content + .append('div') + .attr('class', 'background-display-options'); + // offset controls + _offsetContainer = content + .append('div') + .attr('class', 'background-offset'); - function isSupported() { - return !!getFullScreenFn(); - } + // add listeners + context.map() + .on('move.background-update', debounce(utilCallWhenIdle(update), 1000)); - function fullScreen() { - event.preventDefault(); - if (!isFullScreen()) { - // button.classed('active', true); - getFullScreenFn().apply(element); - } else { - // button.classed('active', false); - getExitFullScreenFn().apply(document); - } - } + context.background() + .on('change.background-update', update); - return function() { // selection) { - if (!isSupported()) - return; + update(); - // button = selection.append('button') - // .attr('title', t('full_screen')) - // .attr('tabindex', -1) - // .on('click', fullScreen) - // .call(tooltip); + var keybinding = d3keybinding('background') + .on(key, togglePane) + .on(uiCmd('⌘' + key), quickSwitch) + .on([t('map_data.key'), t('help.key')], hidePane); - // button.append('span') - // .attr('class', 'icon full-screen'); + select(document) + .call(keybinding); - var detected = utilDetect(); - var keys = detected.os === 'mac' ? [uiCmd('⌃⌘F'), 'f11'] : ['f11']; - keybinding.on(keys, fullScreen); + uiBackground.hidePane = hidePane; + uiBackground.togglePane = togglePane; + uiBackground.setVisible = setVisible; + } - d3_select(document) - .call(keybinding); - }; -} + return background; + } -function uiLoading(context) { - var _modalSelection = d3_select(null); - var _message = ''; - var _blocking = false; + function uiContributors(context) { + var osm = context.connection(), + debouncedUpdate = debounce(function() { update(); }, 1000), + limit = 4, + hidden = false, + wrap = select(null); - var loading = function(selection$$1) { - _modalSelection = uiModal(selection$$1, _blocking); + function update() { + if (!osm) return; - var loadertext = _modalSelection.select('.content') - .classed('loading-modal', true) - .append('div') - .attr('class', 'modal-section fillL'); + var users = {}, + entities = context.intersects(context.map().extent()); - loadertext - .append('img') - .attr('class', 'loader') - .attr('src', context.imagePath('loader-white.gif')); + entities.forEach(function(entity) { + if (entity && entity.user) users[entity.user] = true; + }); - loadertext - .append('h3') - .text(_message); + var u = Object.keys(users), + subset = u.slice(0, u.length > limit ? limit - 1 : limit); - _modalSelection.select('button.close') - .attr('class', 'hide'); + wrap.html('') + .call(svgIcon('#icon-nearby', 'pre-text light')); - return loading; - }; + var userList = select(document.createElement('span')); + userList.selectAll() + .data(subset) + .enter() + .append('a') + .attr('class', 'user-link') + .attr('href', function(d) { return osm.userURL(d); }) + .attr('target', '_blank') + .attr('tabindex', -1) + .text(String); - loading.message = function(_) { - if (!arguments.length) return _message; - _message = _; - return loading; - }; + if (u.length > limit) { + var count = select(document.createElement('span')); + count.append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', function() { + return osm.changesetsURL(context.map().center(), context.map().zoom()); + }) + .text(u.length - limit + 1); - loading.blocking = function(_) { - if (!arguments.length) return _blocking; - _blocking = _; - return loading; - }; + wrap.append('span') + .html(t('contributors.truncated_list', { users: userList.html(), count: count.html() })); + } else { + wrap.append('span') + .html(t('contributors.list', { users: userList.html() })); + } - loading.close = function() { - _modalSelection.remove(); - }; + if (!u.length) { + hidden = true; + wrap + .transition() + .style('opacity', 0); + } else if (hidden) { + wrap + .transition() + .style('opacity', 1); + } + } - return loading; -} -function uiGeolocate(context) { - var geoOptions = { enableHighAccuracy: false, timeout: 6000 /* 6sec */ }, - locating = uiLoading(context).message(t('geolocate.locating')).blocking(true), - timeoutId; + return function(selection$$1) { + if (!osm) return; + wrap = selection$$1; + update(); + osm.on('loaded.contributors', debouncedUpdate); + context.map().on('move.contributors', debouncedUpdate); + }; + } - function click() { - if (context.inIntro()) return; - context.enter(modeBrowse(context)); - context.container().call(locating); - navigator.geolocation.getCurrentPosition(success, error, geoOptions); + function uiFeatureInfo(context) { + function update(selection$$1) { + var features = context.features(), + stats = features.stats(), + count = 0, + hiddenList = compact(map$3(features.hidden(), function(k) { + if (stats[k]) { + count += stats[k]; + return String(stats[k]) + ' ' + t('feature.' + k + '.description'); + } + })); + + selection$$1.html(''); + + if (hiddenList.length) { + var tooltipBehavior = tooltip() + .placement('top') + .html(true) + .title(function() { + return uiTooltipHtml(hiddenList.join('
      ')); + }); + + var warning = selection$$1.append('a') + .attr('href', '#') + .attr('tabindex', -1) + .html(t('feature_info.hidden_warning', { count: count })) + .call(tooltipBehavior) + .on('click', function() { + tooltipBehavior.hide(warning); + // open map data panel? + event.preventDefault(); + }); + } - // This timeout ensures that we still call finish() even if - // the user declines to share their location in Firefox - timeoutId = setTimeout(finish, 10000 /* 10sec */ ); - } + selection$$1 + .classed('hide', !hiddenList.length); + } - function success(position) { - var map = context.map(), - extent = geoExtent$$1([position.coords.longitude, position.coords.latitude]) - .padByMeters(position.coords.accuracy); + return function(selection$$1) { + update(selection$$1); - map.centerZoom(extent.center(), Math.min(20, map.extentZoom(extent))); - finish(); - } + context.features().on('change.feature_info', function() { + update(selection$$1); + }); + }; + } + function uiFullScreen(context) { + var element = context.container().node(), + keybinding = d3keybinding('full-screen'); + // button; - function error() { - finish(); - } + function getFullScreenFn() { + if (element.requestFullscreen) { + return element.requestFullscreen; + } else if (element.msRequestFullscreen) { + return element.msRequestFullscreen; + } else if (element.mozRequestFullScreen) { + return element.mozRequestFullScreen; + } else if (element.webkitRequestFullscreen) { + return element.webkitRequestFullscreen; + } + } - function finish() { - locating.close(); // unblock ui - if (timeoutId) { clearTimeout(timeoutId); } - timeoutId = undefined; - } + function getExitFullScreenFn() { + if (document.exitFullscreen) { + return document.exitFullscreen; + } else if (document.msExitFullscreen) { + return document.msExitFullscreen; + } else if (document.mozCancelFullScreen) { + return document.mozCancelFullScreen; + } else if (document.webkitExitFullscreen) { + return document.webkitExitFullscreen; + } + } - return function(selection) { - if (!navigator.geolocation) return; - selection - .append('button') - .attr('tabindex', -1) - .attr('title', t('geolocate.title')) - .on('click', click) - .call(svgIcon('#icon-geolocate', 'light')) - .call(tooltip() - .placement((textDirection === 'rtl') ? 'right' : 'left')); - }; -} - -function uiPanelBackground(context) { - var background = context.background(); - var currSourceName = null; - var metadata = {}; - var metadataKeys = [ - 'zoom', 'vintage', 'source', 'description', 'resolution', 'accuracy' - ]; + function isFullScreen() { + return document.fullscreenElement || + document.mozFullScreenElement || + document.webkitFullscreenElement || + document.msFullscreenElement; + } - var debouncedRedraw = debounce(redraw, 250); - function redraw(selection$$1) { - var source = background.baseLayerSource(), - isDG = (source.id.match(/^DigitalGlobe/i) !== null); + function isSupported() { + return !!getFullScreenFn(); + } - if (currSourceName !== source.name()) { - currSourceName = source.name(); - metadata = {}; - } - selection$$1.html(''); + function fullScreen() { + event.preventDefault(); + if (!isFullScreen()) { + // button.classed('active', true); + getFullScreenFn().apply(element); + } else { + // button.classed('active', false); + getExitFullScreenFn().apply(document); + } + } - var list = selection$$1 - .append('ul') - .attr('class', 'background-info'); - list - .append('li') - .text(currSourceName); + return function() { // selection) { + if (!isSupported()) + return; - metadataKeys.forEach(function(k) { - // DigitalGlobe vintage is available in raster layers for now. - if (isDG && k === 'vintage') return; + // button = selection.append('button') + // .attr('title', t('full_screen')) + // .attr('tabindex', -1) + // .on('click', fullScreen) + // .call(tooltip); - list - .append('li') - .attr('class', 'background-info-list-' + k) - .classed('hide', !metadata[k]) - .text(t('info_panels.background.' + k) + ':') - .append('span') - .attr('class', 'background-info-span-' + k) - .text(metadata[k]); - }); + // button.append('span') + // .attr('class', 'icon full-screen'); - debouncedGetMetadata(selection$$1); + var detected = utilDetect(); + var keys = detected.os === 'mac' ? [uiCmd('⌃⌘F'), 'f11'] : ['f11']; + keybinding.on(keys, fullScreen); - var toggleTiles = context.getDebug('tile') ? 'hide_tiles' : 'show_tiles'; + select(document) + .call(keybinding); + }; + } - selection$$1 - .append('a') - .text(t('info_panels.background.' + toggleTiles)) - .attr('href', '#') - .attr('class', 'button button-toggle-tiles') - .on('click', function() { - event.preventDefault(); - context.setDebug('tile', !context.getDebug('tile')); - selection$$1.call(redraw); - }); + function uiLoading(context) { + var _modalSelection = select(null); + var _message = ''; + var _blocking = false; - if (isDG) { - var key = source.id + '-vintage'; - var sourceVintage = context.background().findSource(key); - var showsVintage = context.background().showsLayer(sourceVintage); - var toggleVintage = showsVintage ? 'hide_vintage' : 'show_vintage'; - selection$$1 - .append('a') - .text(t('info_panels.background.' + toggleVintage)) - .attr('href', '#') - .attr('class', 'button button-toggle-vintage') - .on('click', function() { - event.preventDefault(); - context.background().toggleOverlayLayer(sourceVintage); - selection$$1.call(redraw); - }); - } - // disable if necessary - ['DigitalGlobe-Premium', 'DigitalGlobe-Standard'].forEach(function(layerId) { - if (source.id !== layerId) { - var key = layerId + '-vintage'; - var sourceVintage = context.background().findSource(key); - if (context.background().showsLayer(sourceVintage)) { - context.background().toggleOverlayLayer(sourceVintage); - } - } - }); - } + var loading = function(selection$$1) { + _modalSelection = uiModal(selection$$1, _blocking); + var loadertext = _modalSelection.select('.content') + .classed('loading-modal', true) + .append('div') + .attr('class', 'modal-section fillL'); - var debouncedGetMetadata = debounce(getMetadata, 250); - - function getMetadata(selection$$1) { - var tile = d3_select('.layer-background img.tile-center'); // tile near viewport center - if (tile.empty()) return; - - var sourceName = currSourceName, - d = tile.datum(), - zoom = (d && d.length >= 3 && d[2]) || Math.floor(context.map().zoom()), - center = context.map().center(); - - // update zoom - metadata.zoom = String(zoom); - selection$$1.selectAll('.background-info-list-zoom') - .classed('hide', false) - .selectAll('.background-info-span-zoom') - .text(metadata.zoom); - - if (!d || !d.length >= 3) return; - - background.baseLayerSource().getMetadata(center, d, function(err, result) { - if (err || currSourceName !== sourceName) return; - - // update vintage - var vintage = result.vintage; - metadata.vintage = (vintage && vintage.range) || t('info_panels.background.unknown'); - selection$$1.selectAll('.background-info-list-vintage') - .classed('hide', false) - .selectAll('.background-info-span-vintage') - .text(metadata.vintage); - - // update other metdata - without(metadataKeys, 'zoom', 'vintage') - .forEach(function(k) { - var val = result[k]; - metadata[k] = val; - selection$$1.selectAll('.background-info-list-' + k) - .classed('hide', !val) - .selectAll('.background-info-span-' + k) - .text(val); - }); - }); - } + loadertext + .append('img') + .attr('class', 'loader') + .attr('src', context.imagePath('loader-white.gif')); + loadertext + .append('h3') + .text(_message); - var panel = function(selection$$1) { - selection$$1.call(redraw); + _modalSelection.select('button.close') + .attr('class', 'hide'); - context.map() - .on('drawn.info-background', function() { - selection$$1.call(debouncedRedraw); - }) - .on('move.info-background', function() { - selection$$1.call(debouncedGetMetadata); - }); + return loading; + }; - }; - panel.off = function() { - context.map() - .on('drawn.info-background', null) - .on('move.info-background', null); - }; + loading.message = function(_) { + if (!arguments.length) return _message; + _message = _; + return loading; + }; - panel.id = 'background'; - panel.title = t('info_panels.background.title'); - panel.key = t('info_panels.background.key'); + loading.blocking = function(_) { + if (!arguments.length) return _blocking; + _blocking = _; + return loading; + }; - return panel; -} -function uiPanelHistory(context) { - var osm; + loading.close = function() { + _modalSelection.remove(); + }; - function displayTimestamp(entity) { - if (!entity.timestamp) return t('info_panels.history.unknown'); - var detected = utilDetect(); - var options = { - day: 'numeric', month: 'short', year: 'numeric', - hour: 'numeric', minute: 'numeric', second: 'numeric' - }; - var d = new Date(entity.timestamp); - if (isNaN(d.getTime())) return t('info_panels.history.unknown'); - return d.toLocaleString(detected.locale, options); - } + return loading; + } - function displayUser(selection, entity) { - if (!entity.user) { - selection - .append('span') - .text(t('info_panels.history.unknown')); - return; - } + function uiGeolocate(context) { + var geoOptions = { enableHighAccuracy: false, timeout: 6000 /* 6sec */ }, + locating = uiLoading(context).message(t('geolocate.locating')).blocking(true), + timeoutId; - selection - .append('span') - .attr('class', 'user-name') - .text(entity.user); - - var links = selection - .append('div') - .attr('class', 'links'); - - if (osm) { - links - .append('a') - .attr('class', 'user-osm-link') - .attr('href', osm.userURL(entity.user)) - .attr('target', '_blank') - .attr('tabindex', -1) - .text('OSM'); - } - links - .append('a') - .attr('class', 'user-hdyc-link') - .attr('href', 'https://hdyc.neis-one.org/?' + entity.user) - .attr('target', '_blank') - .attr('tabindex', -1) - .text('HDYC'); - } + function click() { + if (context.inIntro()) return; + context.enter(modeBrowse(context)); + context.container().call(locating); + navigator.geolocation.getCurrentPosition(success, error, geoOptions); + // This timeout ensures that we still call finish() even if + // the user declines to share their location in Firefox + timeoutId = setTimeout(finish, 10000 /* 10sec */ ); + } - function displayChangeset(selection, entity) { - if (!entity.changeset) { - selection - .append('span') - .text(t('info_panels.history.unknown')); - return; - } - selection - .append('span') - .attr('class', 'changeset-id') - .text(entity.changeset); - - var links = selection - .append('div') - .attr('class', 'links'); - - if (osm) { - links - .append('a') - .attr('class', 'changeset-osm-link') - .attr('href', osm.changesetURL(entity.changeset)) - .attr('target', '_blank') - .attr('tabindex', -1) - .text('OSM'); - } + function success(position) { + var map = context.map(), + extent = geoExtent$$1([position.coords.longitude, position.coords.latitude]) + .padByMeters(position.coords.accuracy); - links - .append('a') - .attr('class', 'changeset-osmcha-link') - .attr('href', 'https://osmcha.mapbox.com/changesets/' + entity.changeset) - .attr('target', '_blank') - .attr('tabindex', -1) - .text('OSMCha'); - } + map.centerZoom(extent.center(), Math.min(20, map.extentZoom(extent))); + finish(); + } - function redraw(selection) { - var selected = filter(context.selectedIDs(), function(e) { return context.hasEntity(e); }), - singular = selected.length === 1 ? selected[0] : null; + function error() { + finish(); + } - osm = context.connection(); - selection.html(''); + function finish() { + locating.close(); // unblock ui + if (timeoutId) { clearTimeout(timeoutId); } + timeoutId = undefined; + } - selection - .append('h4') - .attr('class', 'history-heading') - .text(singular || t('info_panels.history.selected', { n: selected.length })); - if (!singular) return; + return function(selection) { + if (!navigator.geolocation) return; - var entity = context.entity(singular); + selection + .append('button') + .attr('tabindex', -1) + .attr('title', t('geolocate.title')) + .on('click', click) + .call(svgIcon('#icon-geolocate', 'light')) + .call(tooltip() + .placement((textDirection === 'rtl') ? 'right' : 'left')); + }; + } - var list = selection - .append('ul'); + function uiPanelBackground(context) { + var background = context.background(); + var currSourceName = null; + var metadata = {}; + var metadataKeys = [ + 'zoom', 'vintage', 'source', 'description', 'resolution', 'accuracy' + ]; - list - .append('li') - .text(t('info_panels.history.version') + ':') - .append('span') - .text(entity.version); + var debouncedRedraw = debounce(redraw, 250); - list - .append('li') - .text(t('info_panels.history.last_edit') + ':') - .append('span') - .text(displayTimestamp(entity)); + function redraw(selection$$1) { + var source = background.baseLayerSource(), + isDG = (source.id.match(/^DigitalGlobe/i) !== null); - list - .append('li') - .text(t('info_panels.history.edited_by') + ':') - .call(displayUser, entity); + if (currSourceName !== source.name()) { + currSourceName = source.name(); + metadata = {}; + } - list - .append('li') - .text(t('info_panels.history.changeset') + ':') - .call(displayChangeset, entity); + selection$$1.html(''); - if (osm) { - selection - .append('a') - .attr('class', 'view-history-on-osm') - .attr('target', '_blank') - .attr('tabindex', -1) - .attr('href', osm.historyURL(entity)) - .call(svgIcon('#icon-out-link', 'inline')) - .append('span') - .text(t('info_panels.history.link_text')); - } - } + var list = selection$$1 + .append('ul') + .attr('class', 'background-info'); + list + .append('li') + .text(currSourceName); - var panel = function(selection) { - selection.call(redraw); + metadataKeys.forEach(function(k) { + // DigitalGlobe vintage is available in raster layers for now. + if (isDG && k === 'vintage') return; - context.map() - .on('drawn.info-history', function() { - selection.call(redraw); - }); - }; + list + .append('li') + .attr('class', 'background-info-list-' + k) + .classed('hide', !metadata[k]) + .text(t('info_panels.background.' + k) + ':') + .append('span') + .attr('class', 'background-info-span-' + k) + .text(metadata[k]); + }); - panel.off = function() { - context.map() - .on('drawn.info-history', null); - }; + debouncedGetMetadata(selection$$1); + + var toggleTiles = context.getDebug('tile') ? 'hide_tiles' : 'show_tiles'; + + selection$$1 + .append('a') + .text(t('info_panels.background.' + toggleTiles)) + .attr('href', '#') + .attr('class', 'button button-toggle-tiles') + .on('click', function() { + event.preventDefault(); + context.setDebug('tile', !context.getDebug('tile')); + selection$$1.call(redraw); + }); + + if (isDG) { + var key = source.id + '-vintage'; + var sourceVintage = context.background().findSource(key); + var showsVintage = context.background().showsLayer(sourceVintage); + var toggleVintage = showsVintage ? 'hide_vintage' : 'show_vintage'; + selection$$1 + .append('a') + .text(t('info_panels.background.' + toggleVintage)) + .attr('href', '#') + .attr('class', 'button button-toggle-vintage') + .on('click', function() { + event.preventDefault(); + context.background().toggleOverlayLayer(sourceVintage); + selection$$1.call(redraw); + }); + } - panel.id = 'history'; - panel.title = t('info_panels.history.title'); - panel.key = t('info_panels.history.key'); - - - return panel; -} - -// - -var OSM_PRECISION = 7; -var locale$2 = utilDetect().locale; - -/** - * Returns a localized representation of the given length measurement. - * - * @param {Number} m area in meters - * @param {Boolean} isImperial true for U.S. customary units; false for metric - */ -function displayLength(m , isImperial ) { - var d = m * (isImperial ? 3.28084 : 1), - unit; - - if (isImperial) { - if (d >= 5280) { - d /= 5280; - unit = 'miles'; - } else { - unit = 'feet'; - } - } else { - if (d >= 1000) { - d /= 1000; - unit = 'kilometers'; - } else { - unit = 'meters'; - } - } - - return t('units.' + unit, { - quantity: d.toLocaleString(locale$2, { - maximumSignificantDigits: 4 - }) - }); -} - -/** - * Returns a localized representation of the given area measurement. - * - * @param {Number} m2 area in square meters - * @param {Boolean} isImperial true for U.S. customary units; false for metric - */ -function displayArea(m2 , isImperial ) { - var d = m2 * (isImperial ? 10.7639111056 : 1), - d1, d2, area; - var unit1 = ''; - var unit2 = ''; - - if (isImperial) { - if (d >= 6969600) { // > 0.25mi² show mi² - d1 = d / 27878400; - unit1 = 'square_miles'; - } else { - d1 = d; - unit1 = 'square_feet'; - } - - if (d > 4356 && d < 43560000) { // 0.1 - 1000 acres - d2 = d / 43560; - unit2 = 'acres'; - } - - } else { - if (d >= 250000) { // > 0.25km² show km² - d1 = d / 1000000; - unit1 = 'square_kilometers'; - } else { - d1 = d; - unit1 = 'square_meters'; - } - - if (d > 1000 && d < 10000000) { // 0.1 - 1000 hectares - d2 = d / 10000; - unit2 = 'hectares'; - } - } - - area = t('units.' + unit1, { - quantity: d1.toLocaleString(locale$2, { - maximumSignificantDigits: 4 - }) - }); - - if (d2) { - return t('units.area_pair', { - area1: area, - area2: t('units.' + unit2, { - quantity: d2.toLocaleString(locale$2, { - maximumSignificantDigits: 2 - }) - }) - }); - } else { - return area; - } -} - -function wrap(x , min , max ) { - var d = max - min; - return ((x - min) % d + d) % d + min; -} - -function clamp(x , min , max ) { - return Math.max(min, Math.min(x, max)); -} - -function displayCoordinate(deg , pos , neg ) { - var min = (Math.abs(deg) - Math.floor(Math.abs(deg))) * 60, - sec = (min - Math.floor(min)) * 60, - displayDegrees = t('units.arcdegrees', { - quantity: Math.floor(Math.abs(deg)).toLocaleString(locale$2) - }), - displayCoordinate; - - if (Math.floor(sec) > 0) { - displayCoordinate = displayDegrees + - t('units.arcminutes', { - quantity: Math.floor(min).toLocaleString(locale$2) - }) + - t('units.arcseconds', { - quantity: Math.round(sec).toLocaleString(locale$2) - }); - } else if (Math.floor(min) > 0) { - displayCoordinate = displayDegrees + - t('units.arcminutes', { - quantity: Math.round(min).toLocaleString(locale$2) - }); - } else { - displayCoordinate = t('units.arcdegrees', { - quantity: Math.round(Math.abs(deg)).toLocaleString(locale$2) - }); - } - - if (deg === 0) { - return displayCoordinate; - } else { - return t('units.coordinate', { - coordinate: displayCoordinate, - direction: t('units.' + (deg > 0 ? pos : neg)) - }); - } -} - -/** - * Returns given coordinate pair in degree-minute-second format. - * - * @param {Array} coord longitude and latitude - */ -function dmsCoordinatePair(coord ) { - return t('units.coordinate_pair', { - latitude: displayCoordinate(clamp(coord[1], -90, 90), 'north', 'south'), - longitude: displayCoordinate(wrap(coord[0], -180, 180), 'east', 'west') - }); -} - -/** - * Returns the given coordinate pair in decimal format. - * note: unlocalized to avoid comma ambiguity - see #4765 - * - * @param {Array} coord longitude and latitude - */ -function decimalCoordinatePair(coord ) { - return t('units.coordinate_pair', { - latitude: clamp(coord[1], -90, 90).toFixed(OSM_PRECISION), - longitude: wrap(coord[0], -180, 180).toFixed(OSM_PRECISION) - }); -} - -function uiPanelLocation(context) { - var currLocation = ''; - - - function redraw(selection) { - selection.html(''); - - var list = selection - .append('ul'); - - // Mouse coordinates - var coord = context.map().mouseCoordinates(); - if (coord.some(isNaN)) { - coord = context.map().center(); - } + // disable if necessary + ['DigitalGlobe-Premium', 'DigitalGlobe-Standard'].forEach(function(layerId) { + if (source.id !== layerId) { + var key = layerId + '-vintage'; + var sourceVintage = context.background().findSource(key); + if (context.background().showsLayer(sourceVintage)) { + context.background().toggleOverlayLayer(sourceVintage); + } + } + }); + } - list - .append('li') - .text(dmsCoordinatePair(coord)) - .append('li') - .text(decimalCoordinatePair(coord)); - // Location Info - selection - .append('div') - .attr('class', 'location-info') - .text(currLocation || ' '); + var debouncedGetMetadata = debounce(getMetadata, 250); + + function getMetadata(selection$$1) { + var tile = select('.layer-background img.tile-center'); // tile near viewport center + if (tile.empty()) return; + + var sourceName = currSourceName, + d = tile.datum(), + zoom = (d && d.length >= 3 && d[2]) || Math.floor(context.map().zoom()), + center = context.map().center(); + + // update zoom + metadata.zoom = String(zoom); + selection$$1.selectAll('.background-info-list-zoom') + .classed('hide', false) + .selectAll('.background-info-span-zoom') + .text(metadata.zoom); + + if (!d || !d.length >= 3) return; + + background.baseLayerSource().getMetadata(center, d, function(err, result) { + if (err || currSourceName !== sourceName) return; + + // update vintage + var vintage = result.vintage; + metadata.vintage = (vintage && vintage.range) || t('info_panels.background.unknown'); + selection$$1.selectAll('.background-info-list-vintage') + .classed('hide', false) + .selectAll('.background-info-span-vintage') + .text(metadata.vintage); + + // update other metdata + without(metadataKeys, 'zoom', 'vintage') + .forEach(function(k) { + var val = result[k]; + metadata[k] = val; + selection$$1.selectAll('.background-info-list-' + k) + .classed('hide', !val) + .selectAll('.background-info-span-' + k) + .text(val); + }); + }); + } - debouncedGetLocation(selection, coord); - } + var panel = function(selection$$1) { + selection$$1.call(redraw); - var debouncedGetLocation = debounce(getLocation, 250); - function getLocation(selection, coord) { - if (!services.geocoder) { - currLocation = t('info_panels.location.unknown_location'); - selection.selectAll('.location-info') - .text(currLocation); - } else { - services.geocoder.reverse(coord, function(err, result) { - currLocation = result ? result.display_name : t('info_panels.location.unknown_location'); - selection.selectAll('.location-info') - .text(currLocation); - }); - } - } + context.map() + .on('drawn.info-background', function() { + selection$$1.call(debouncedRedraw); + }) + .on('move.info-background', function() { + selection$$1.call(debouncedGetMetadata); + }); + }; - var panel = function(selection) { - selection.call(redraw); + panel.off = function() { + context.map() + .on('drawn.info-background', null) + .on('move.info-background', null); + }; - context.surface() - .on('mousemove.info-location', function() { - selection.call(redraw); - }); - }; + panel.id = 'background'; + panel.title = t('info_panels.background.title'); + panel.key = t('info_panels.background.key'); - panel.off = function() { - context.surface() - .on('mousemove.info-location', null); - }; - panel.id = 'location'; - panel.title = t('info_panels.location.title'); - panel.key = t('info_panels.location.key'); + return panel; + } + function uiPanelHistory(context) { + var osm; - return panel; -} + function displayTimestamp(entity) { + if (!entity.timestamp) return t('info_panels.history.unknown'); + var detected = utilDetect(); + var options = { + day: 'numeric', month: 'short', year: 'numeric', + hour: 'numeric', minute: 'numeric', second: 'numeric' + }; + var d = new Date(entity.timestamp); + if (isNaN(d.getTime())) return t('info_panels.history.unknown'); + return d.toLocaleString(detected.locale, options); + } -function uiPanelMeasurement(context) { - var locale = utilDetect().locale, - isImperial = (locale.toLowerCase() === 'en-us'); + function displayUser(selection, entity) { + if (!entity.user) { + selection + .append('span') + .text(t('info_panels.history.unknown')); + return; + } - function radiansToMeters(r) { - // using WGS84 authalic radius (6371007.1809 m) - return r * 6371007.1809; - } + selection + .append('span') + .attr('class', 'user-name') + .text(entity.user); + + var links = selection + .append('div') + .attr('class', 'links'); + + if (osm) { + links + .append('a') + .attr('class', 'user-osm-link') + .attr('href', osm.userURL(entity.user)) + .attr('target', '_blank') + .attr('tabindex', -1) + .text('OSM'); + } - function steradiansToSqmeters(r) { - // http://gis.stackexchange.com/a/124857/40446 - return r / (4 * Math.PI) * 510065621724000; - } + links + .append('a') + .attr('class', 'user-hdyc-link') + .attr('href', 'https://hdyc.neis-one.org/?' + entity.user) + .attr('target', '_blank') + .attr('tabindex', -1) + .text('HDYC'); + } - function toLineString(feature) { - if (feature.type === 'LineString') return feature; + function displayChangeset(selection, entity) { + if (!entity.changeset) { + selection + .append('span') + .text(t('info_panels.history.unknown')); + return; + } - var result = { type: 'LineString', coordinates: [] }; - if (feature.type === 'Polygon') { - result.coordinates = feature.coordinates[0]; - } else if (feature.type === 'MultiPolygon') { - result.coordinates = feature.coordinates[0][0]; - } + selection + .append('span') + .attr('class', 'changeset-id') + .text(entity.changeset); + + var links = selection + .append('div') + .attr('class', 'links'); + + if (osm) { + links + .append('a') + .attr('class', 'changeset-osm-link') + .attr('href', osm.changesetURL(entity.changeset)) + .attr('target', '_blank') + .attr('tabindex', -1) + .text('OSM'); + } - return result; - } + links + .append('a') + .attr('class', 'changeset-osmcha-link') + .attr('href', 'https://osmcha.mapbox.com/changesets/' + entity.changeset) + .attr('target', '_blank') + .attr('tabindex', -1) + .text('OSMCha'); + } - function nodeCount(feature) { - if (feature.type === 'LineString') return feature.coordinates.length; - if (feature.type === 'Polygon') { - return feature.coordinates[0].length - 1; - } - } + function redraw(selection) { + var selected = filter(context.selectedIDs(), function(e) { return context.hasEntity(e); }); + var singular = selected.length === 1 ? selected[0] : null; + osm = context.connection(); - function redraw(selection$$1) { - var resolver = context.graph(); - var selected = filter(context.selectedIDs(), function(e) { return context.hasEntity(e); }); - var singular = selected.length === 1 ? selected[0] : null; - var extent = geoExtent$$1(); - var entity; + selection.html(''); - selection$$1.html(''); + selection + .append('h4') + .attr('class', 'history-heading') + .text(singular || t('info_panels.history.selected', { n: selected.length })); - selection$$1 - .append('h4') - .attr('class', 'measurement-heading') - .text(singular || t('info_panels.measurement.selected', { n: selected.length.toLocaleString(locale) })); + if (!singular) return; - if (!selected.length) return; + var entity = context.entity(singular); - var center; - for (var i = 0; i < selected.length; i++) { - entity = context.entity(selected[i]); - extent._extend(entity.extent(resolver)); - } - center = extent.center(); - - - var list = selection$$1 - .append('ul'); - var coordItem; - - // multiple features, just display extent center.. - if (!singular) { - coordItem = list - .append('li') - .text(t('info_panels.measurement.center') + ':'); - coordItem.append('span') - .text(dmsCoordinatePair(center)); - coordItem.append('span') - .text(decimalCoordinatePair(center)); - return; - } + if (!entity.version) { + selection + .append('div') + .text(t('info_panels.history.no_history')); + return; + } - // single feature, display details.. - if (!entity) return; - var geometry = entity.geometry(resolver); - - if (geometry === 'line' || geometry === 'area') { - var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate()), - feature = entity.asGeoJSON(resolver), - length = radiansToMeters(d3_geoLength(toLineString(feature))), - lengthLabel = t('info_panels.measurement.' + (closed ? 'perimeter' : 'length')), - centroid = d3_geoCentroid(feature); - - list - .append('li') - .text(t('info_panels.measurement.geometry') + ':') - .append('span') - .text( - closed ? t('info_panels.measurement.closed_' + geometry) : t('geometry.' + geometry) - ); - - if (entity.type !== 'relation') { - list - .append('li') - .text(t('info_panels.measurement.node_count') + ':') - .append('span') - .text(nodeCount(feature).toLocaleString(locale)); - } + var list = selection + .append('ul'); + + list + .append('li') + .text(t('info_panels.history.version') + ':') + .append('span') + .text(entity.version); + + list + .append('li') + .text(t('info_panels.history.last_edit') + ':') + .append('span') + .text(displayTimestamp(entity)); + + list + .append('li') + .text(t('info_panels.history.edited_by') + ':') + .call(displayUser, entity); + + list + .append('li') + .text(t('info_panels.history.changeset') + ':') + .call(displayChangeset, entity); + + if (osm) { + selection + .append('a') + .attr('class', 'view-history-on-osm') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', osm.historyURL(entity)) + .call(svgIcon('#icon-out-link', 'inline')) + .append('span') + .text(t('info_panels.history.link_text')); + } + } - if (closed) { - var area = steradiansToSqmeters(entity.area(resolver)); - list - .append('li') - .text(t('info_panels.measurement.area') + ':') - .append('span') - .text(displayArea(area, isImperial)); - } + var panel = function(selection) { + selection.call(redraw); - list - .append('li') - .text(lengthLabel + ':') - .append('span') - .text(displayLength(length, isImperial)); - - coordItem = list - .append('li') - .text(t('info_panels.measurement.centroid') + ':'); - coordItem.append('span') - .text(dmsCoordinatePair(centroid)); - coordItem.append('span') - .text(decimalCoordinatePair(centroid)); - - var toggle = isImperial ? 'imperial' : 'metric'; - - selection$$1 - .append('a') - .text(t('info_panels.measurement.' + toggle)) - .attr('href', '#') - .attr('class', 'button button-toggle-units') - .on('click', function() { - event.preventDefault(); - isImperial = !isImperial; - selection$$1.call(redraw); - }); + context.map() + .on('drawn.info-history', function() { + selection.call(redraw); + }); + }; - } else { - var centerLabel = t('info_panels.measurement.' + (entity.type === 'node' ? 'location' : 'center')); - - list - .append('li') - .text(t('info_panels.measurement.geometry') + ':') - .append('span') - .text(t('geometry.' + geometry)); - - coordItem = list - .append('li') - .text(centerLabel + ':'); - coordItem.append('span') - .text(dmsCoordinatePair(center)); - coordItem.append('span') - .text(decimalCoordinatePair(center)); - } - } + panel.off = function() { + context.map() + .on('drawn.info-history', null); + }; + panel.id = 'history'; + panel.title = t('info_panels.history.title'); + panel.key = t('info_panels.history.key'); - var panel = function(selection$$1) { - selection$$1.call(redraw); - context.map() - .on('drawn.info-measurement', function() { - selection$$1.call(redraw); - }); - }; + return panel; + } - panel.off = function() { - context.map() - .on('drawn.info-measurement', null); - }; + var OSM_PRECISION = 7; + var locale$2 = utilDetect().locale; - panel.id = 'measurement'; - panel.title = t('info_panels.measurement.title'); - panel.key = t('info_panels.measurement.key'); + /** + * Returns a localized representation of the given length measurement. + * + * @param {Number} m area in meters + * @param {Boolean} isImperial true for U.S. customary units; false for metric + */ + function displayLength(m, isImperial) { + var d = m * (isImperial ? 3.28084 : 1); + var unit; + + if (isImperial) { + if (d >= 5280) { + d /= 5280; + unit = 'miles'; + } else { + unit = 'feet'; + } + } else { + if (d >= 1000) { + d /= 1000; + unit = 'kilometers'; + } else { + unit = 'meters'; + } + } + return t('units.' + unit, { + quantity: d.toLocaleString(locale$2, { + maximumSignificantDigits: 4 + }) + }); + } - return panel; -} + /** + * Returns a localized representation of the given area measurement. + * + * @param {Number} m2 area in square meters + * @param {Boolean} isImperial true for U.S. customary units; false for metric + */ + function displayArea(m2, isImperial) { + var d = m2 * (isImperial ? 10.7639111056 : 1); + var d1, d2, area; + var unit1 = ''; + var unit2 = ''; + + if (isImperial) { + if (d >= 6969600) { // > 0.25mi² show mi² + d1 = d / 27878400; + unit1 = 'square_miles'; + } else { + d1 = d; + unit1 = 'square_feet'; + } -var uiInfoPanels = { - background: uiPanelBackground, - history: uiPanelHistory, - location: uiPanelLocation, - measurement: uiPanelMeasurement, -}; + if (d > 4356 && d < 43560000) { // 0.1 - 1000 acres + d2 = d / 43560; + unit2 = 'acres'; + } -function uiInfo(context) { - var ids = Object.keys(uiInfoPanels), - wasActive = ['measurement'], - panels = {}, - active = {}; + } else { + if (d >= 250000) { // > 0.25km² show km² + d1 = d / 1000000; + unit1 = 'square_kilometers'; + } else { + d1 = d; + unit1 = 'square_meters'; + } - // create panels - ids.forEach(function(k) { - if (!panels[k]) { - panels[k] = uiInfoPanels[k](context); - active[k] = false; - } - }); + if (d > 1000 && d < 10000000) { // 0.1 - 1000 hectares + d2 = d / 10000; + unit2 = 'hectares'; + } + } + area = t('units.' + unit1, { + quantity: d1.toLocaleString(locale$2, { + maximumSignificantDigits: 4 + }) + }); - function info(selection$$1) { + if (d2) { + return t('units.area_pair', { + area1: area, + area2: t('units.' + unit2, { + quantity: d2.toLocaleString(locale$2, { + maximumSignificantDigits: 2 + }) + }) + }); + } else { + return area; + } + } - function redraw() { - var activeids = ids.filter(function(k) { return active[k]; }).sort(); + function wrap(x, min, max) { + var d = max - min; + return ((x - min) % d + d) % d + min; + } - var containers = infoPanels.selectAll('.panel-container') - .data(activeids, function(k) { return k; }); + function clamp(x, min, max) { + return Math.max(min, Math.min(x, max)); + } - containers.exit() - .style('opacity', 1) - .transition() - .duration(200) - .style('opacity', 0) - .on('end', function(d) { - d3_select(this) - .call(panels[d].off) - .remove(); - }); + function displayCoordinate(deg, pos, neg) { + var min = (Math.abs(deg) - Math.floor(Math.abs(deg))) * 60; + var sec = (min - Math.floor(min)) * 60; + var displayDegrees = t('units.arcdegrees', { + quantity: Math.floor(Math.abs(deg)).toLocaleString(locale$2) + }); + var displayCoordinate; + + if (Math.floor(sec) > 0) { + displayCoordinate = displayDegrees + + t('units.arcminutes', { + quantity: Math.floor(min).toLocaleString(locale$2) + }) + + t('units.arcseconds', { + quantity: Math.round(sec).toLocaleString(locale$2) + }); + } else if (Math.floor(min) > 0) { + displayCoordinate = displayDegrees + + t('units.arcminutes', { + quantity: Math.round(min).toLocaleString(locale$2) + }); + } else { + displayCoordinate = t('units.arcdegrees', { + quantity: Math.round(Math.abs(deg)).toLocaleString(locale$2) + }); + } - var enter = containers.enter() - .append('div') - .attr('class', function(d) { return 'fillD2 panel-container panel-container-' + d; }); + if (deg === 0) { + return displayCoordinate; + } else { + return t('units.coordinate', { + coordinate: displayCoordinate, + direction: t('units.' + (deg > 0 ? pos : neg)) + }); + } + } - enter - .style('opacity', 0) - .transition() - .duration(200) - .style('opacity', 1); + /** + * Returns given coordinate pair in degree-minute-second format. + * + * @param {Array} coord longitude and latitude + */ + function dmsCoordinatePair(coord) { + return t('units.coordinate_pair', { + latitude: displayCoordinate(clamp(coord[1], -90, 90), 'north', 'south'), + longitude: displayCoordinate(wrap(coord[0], -180, 180), 'east', 'west') + }); + } - var title = enter - .append('div') - .attr('class', 'panel-title fillD2'); + /** + * Returns the given coordinate pair in decimal format. + * note: unlocalized to avoid comma ambiguity - see #4765 + * + * @param {Array} coord longitude and latitude + */ + function decimalCoordinatePair(coord) { + return t('units.coordinate_pair', { + latitude: clamp(coord[1], -90, 90).toFixed(OSM_PRECISION), + longitude: wrap(coord[0], -180, 180).toFixed(OSM_PRECISION) + }); + } - title - .append('h3') - .text(function(d) { return panels[d].title; }); + function uiPanelLocation(context) { + var currLocation = ''; - title - .append('button') - .attr('class', 'close') - .on('click', function (d) { toggle(d); }) - .call(svgIcon('#icon-close')); - enter - .append('div') - .attr('class', function(d) { return 'panel-content panel-content-' + d; }); + function redraw(selection) { + selection.html(''); + var list = selection + .append('ul'); - // redraw the panels - infoPanels.selectAll('.panel-content') - .each(function(d) { - d3_select(this).call(panels[d]); - }); - } + // Mouse coordinates + var coord = context.map().mouseCoordinates(); + if (coord.some(isNaN)) { + coord = context.map().center(); + } + list + .append('li') + .text(dmsCoordinatePair(coord)) + .append('li') + .text(decimalCoordinatePair(coord)); - function toggle(which) { - if (event) { - event.stopImmediatePropagation(); - event.preventDefault(); - } + // Location Info + selection + .append('div') + .attr('class', 'location-info') + .text(currLocation || ' '); - var activeids = ids.filter(function(k) { return active[k]; }); - - if (which) { // toggle one - active[which] = !active[which]; - if (activeids.length === 1 && activeids[0] === which) { // none active anymore - wasActive = [which]; - } - } else { // toggle all - if (activeids.length) { - wasActive = activeids; - activeids.forEach(function(k) { active[k] = false; }); - } else { - wasActive.forEach(function(k) { active[k] = true; }); - } - } + debouncedGetLocation(selection, coord); + } - redraw(); - } + var debouncedGetLocation = debounce(getLocation, 250); + function getLocation(selection, coord) { + if (!services.geocoder) { + currLocation = t('info_panels.location.unknown_location'); + selection.selectAll('.location-info') + .text(currLocation); + } else { + services.geocoder.reverse(coord, function(err, result) { + currLocation = result ? result.display_name : t('info_panels.location.unknown_location'); + selection.selectAll('.location-info') + .text(currLocation); + }); + } + } - var infoPanels = selection$$1.selectAll('.info-panels') - .data([0]); - infoPanels = infoPanels.enter() - .append('div') - .attr('class', 'info-panels') - .merge(infoPanels); + var panel = function(selection) { + selection.call(redraw); - redraw(); + context.surface() + .on('mousemove.info-location', function() { + selection.call(redraw); + }); + }; - var keybinding = d3keybinding('info') - .on(uiCmd('⌘' + t('info_panels.key')), toggle); + panel.off = function() { + context.surface() + .on('mousemove.info-location', null); + }; - ids.forEach(function(k) { - var key = t('info_panels.' + k + '.key', { default: null }); - if (!key) return; - keybinding - .on(uiCmd('⌘⇧' + key), function() { toggle(k); }); - }); + panel.id = 'location'; + panel.title = t('info_panels.location.title'); + panel.key = t('info_panels.location.key'); - d3_select(document) - .call(keybinding); - } - return info; -} + return panel; + } -function uiModes(context) { - var modes = [ - modeAddPoint$$1(context), - modeAddLine$$1(context), - modeAddArea$$1(context) - ]; + function uiPanelMeasurement(context) { + var locale = utilDetect().locale, + isImperial = (locale.toLowerCase() === 'en-us'); - function editable() { - var mode = context.mode(); - return context.editable() && mode && mode.id !== 'save'; - } - - - return function(selection$$1) { - var buttons = selection$$1.selectAll('button.add-button') - .data(modes); - - buttons = buttons.enter() - .append('button') - .attr('tabindex', -1) - .attr('class', function(mode) { return mode.id + ' add-button col4'; }) - .on('click.mode-buttons', function(mode) { - // When drawing, ignore accidental clicks on mode buttons - #4042 - var currMode = context.mode().id; - if (currMode.match(/^draw/) !== null) return; - - if (mode.id === currMode) { - context.enter(modeBrowse(context)); - } else { - context.enter(mode); - } - }) - .call(tooltip() - .placement('bottom') - .html(true) - .title(function(mode) { - return uiTooltipHtml(mode.description, mode.key); - }) - ); + function radiansToMeters(r) { + // using WGS84 authalic radius (6371007.1809 m) + return r * 6371007.1809; + } - buttons - .each(function(d) { - d3_select(this) - .call(svgIcon('#icon-' + d.button, 'pre-text')); - }); + function steradiansToSqmeters(r) { + // http://gis.stackexchange.com/a/124857/40446 + return r / (4 * Math.PI) * 510065621724000; + } - buttons - .append('span') - .attr('class', 'label') - .text(function(mode) { return mode.title; }); - - context - .on('enter.editor', function(entered) { - selection$$1.selectAll('button.add-button') - .classed('active', function(mode) { return entered.button === mode.button; }); - context.container() - .classed('mode-' + entered.id, true); - }); - context - .on('exit.editor', function(exited) { - context.container() - .classed('mode-' + exited.id, false); - }); + function toLineString(feature) { + if (feature.type === 'LineString') return feature; - var keybinding = d3keybinding('mode-buttons'); - - modes.forEach(function(mode) { - keybinding.on(mode.key, function() { - if (editable()) { - if (mode.id === context.mode().id) { - context.enter(modeBrowse(context)); - } else { - context.enter(mode); - } - } - }); - }); + var result = { type: 'LineString', coordinates: [] }; + if (feature.type === 'Polygon') { + result.coordinates = feature.coordinates[0]; + } else if (feature.type === 'MultiPolygon') { + result.coordinates = feature.coordinates[0][0]; + } - d3_select(document) - .call(keybinding); + return result; + } + function nodeCount(feature) { + if (feature.type === 'LineString') return feature.coordinates.length; - var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true }); + if (feature.type === 'Polygon') { + return feature.coordinates[0].length - 1; + } + } - context.map() - .on('move.modes', debouncedUpdate) - .on('drawn.modes', debouncedUpdate); - context - .on('enter.modes', update); + function redraw(selection$$1) { + var resolver = context.graph(); + var selected = filter(context.selectedIDs(), function(e) { return context.hasEntity(e); }); + var singular = selected.length === 1 ? selected[0] : null; + var extent = geoExtent$$1(); + var entity; + selection$$1.html(''); + selection$$1 + .append('h4') + .attr('class', 'measurement-heading') + .text(singular || t('info_panels.measurement.selected', { n: selected.length.toLocaleString(locale) })); - function update() { - selection$$1.selectAll('button.add-button') - .property('disabled', !editable()); - } - }; -} - -function uiNotice(context) { - - return function(selection$$1) { - var div = selection$$1 - .append('div') - .attr('class', 'notice'); - - var button = div - .append('button') - .attr('class', 'zoom-to notice fillD') - .on('click', function() { - context.map().zoomEase(context.minEditableZoom()); - }) - .on('wheel', function() { // let wheel events pass through #4482 - var e2 = new WheelEvent(event.type, event); - context.surface().node().dispatchEvent(e2); - }); + if (!selected.length) return; - button - .call(svgIcon('#icon-plus', 'pre-text')) - .append('span') - .attr('class', 'label') - .text(t('zoom_in_edit')); + var center; + for (var i = 0; i < selected.length; i++) { + entity = context.entity(selected[i]); + extent._extend(entity.extent(resolver)); + } + center = extent.center(); + + + var list = selection$$1 + .append('ul'); + var coordItem; + + // multiple features, just display extent center.. + if (!singular) { + coordItem = list + .append('li') + .text(t('info_panels.measurement.center') + ':'); + coordItem.append('span') + .text(dmsCoordinatePair(center)); + coordItem.append('span') + .text(decimalCoordinatePair(center)); + return; + } + // single feature, display details.. + if (!entity) return; + var geometry = entity.geometry(resolver); - function disableTooHigh() { - var canEdit = context.map().zoom() >= context.minEditableZoom(); - div.style('display', canEdit ? 'none' : 'block'); - } + if (geometry === 'line' || geometry === 'area') { + var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate()), + feature = entity.asGeoJSON(resolver), + length = radiansToMeters(length$1(toLineString(feature))), + lengthLabel = t('info_panels.measurement.' + (closed ? 'perimeter' : 'length')), + centroid = d3_geoCentroid(feature); - context.map() - .on('move.notice', debounce(disableTooHigh, 500)); + list + .append('li') + .text(t('info_panels.measurement.geometry') + ':') + .append('span') + .text( + closed ? t('info_panels.measurement.closed_' + geometry) : t('geometry.' + geometry) + ); + + if (entity.type !== 'relation') { + list + .append('li') + .text(t('info_panels.measurement.node_count') + ':') + .append('span') + .text(nodeCount(feature).toLocaleString(locale)); + } + + if (closed) { + var area = steradiansToSqmeters(entity.area(resolver)); + list + .append('li') + .text(t('info_panels.measurement.area') + ':') + .append('span') + .text(displayArea(area, isImperial)); + } + + + list + .append('li') + .text(lengthLabel + ':') + .append('span') + .text(displayLength(length, isImperial)); + + coordItem = list + .append('li') + .text(t('info_panels.measurement.centroid') + ':'); + coordItem.append('span') + .text(dmsCoordinatePair(centroid)); + coordItem.append('span') + .text(decimalCoordinatePair(centroid)); + + var toggle = isImperial ? 'imperial' : 'metric'; + + selection$$1 + .append('a') + .text(t('info_panels.measurement.' + toggle)) + .attr('href', '#') + .attr('class', 'button button-toggle-units') + .on('click', function() { + event.preventDefault(); + isImperial = !isImperial; + selection$$1.call(redraw); + }); - disableTooHigh(); - }; -} + } else { + var centerLabel = t('info_panels.measurement.' + (entity.type === 'node' ? 'location' : 'center')); -function uiRestore(context) { + list + .append('li') + .text(t('info_panels.measurement.geometry') + ':') + .append('span') + .text(t('geometry.' + geometry)); + + coordItem = list + .append('li') + .text(centerLabel + ':'); + coordItem.append('span') + .text(dmsCoordinatePair(center)); + coordItem.append('span') + .text(decimalCoordinatePair(center)); + } + } - return function(selection) { - if (!context.history().lock() || !context.history().restorableChanges()) - return; - var modalSelection = uiModal(selection, true); + var panel = function(selection$$1) { + selection$$1.call(redraw); - modalSelection.select('.modal') - .attr('class', 'modal fillL col6'); + context.map() + .on('drawn.info-measurement', function() { + selection$$1.call(redraw); + }); + }; - var introModal = modalSelection.select('.content'); + panel.off = function() { + context.map() + .on('drawn.info-measurement', null); + }; - introModal - .attr('class','cf'); + panel.id = 'measurement'; + panel.title = t('info_panels.measurement.title'); + panel.key = t('info_panels.measurement.key'); - introModal - .append('div') - .attr('class', 'modal-section') - .append('h3') - .text(t('restore.heading')); - introModal - .append('div') - .attr('class','modal-section') - .append('p') - .text(t('restore.description')); + return panel; + } - var buttonWrap = introModal - .append('div') - .attr('class', 'modal-actions cf'); + var uiInfoPanels = { + background: uiPanelBackground, + history: uiPanelHistory, + location: uiPanelLocation, + measurement: uiPanelMeasurement, + }; - var restore = buttonWrap - .append('button') - .attr('class', 'restore col6') - .on('click', function() { - context.history().restore(); - modalSelection.remove(); - }); + function uiInfo(context) { + var ids = Object.keys(uiInfoPanels), + wasActive = ['measurement'], + panels = {}, + active = {}; + + // create panels + ids.forEach(function(k) { + if (!panels[k]) { + panels[k] = uiInfoPanels[k](context); + active[k] = false; + } + }); - restore - .append('svg') - .attr('class', 'logo logo-restore') - .append('use') - .attr('xlink:href', '#logo-restore'); - - restore - .append('div') - .text(t('restore.restore')); - - var reset = buttonWrap - .append('button') - .attr('class', 'reset col6') - .on('click', function() { - context.history().clearSaved(); - modalSelection.remove(); - }); - reset - .append('svg') - .attr('class', 'logo logo-reset') - .append('use') - .attr('xlink:href', '#logo-reset'); + function info(selection$$1) { - reset - .append('div') - .text(t('restore.reset')); + function redraw() { + var activeids = ids.filter(function(k) { return active[k]; }).sort(); - restore.node().focus(); - }; -} + var containers = infoPanels.selectAll('.panel-container') + .data(activeids, function(k) { return k; }); -function uiSave(context) { - var history = context.history(); - var key = uiCmd('⌘S'); + containers.exit() + .style('opacity', 1) + .transition() + .duration(200) + .style('opacity', 0) + .on('end', function(d) { + select(this) + .call(panels[d].off) + .remove(); + }); + var enter = containers.enter() + .append('div') + .attr('class', function(d) { return 'fillD2 panel-container panel-container-' + d; }); - function saving() { - var mode = context.mode(); - return mode && mode.id === 'save'; - } + enter + .style('opacity', 0) + .transition() + .duration(200) + .style('opacity', 1); + var title = enter + .append('div') + .attr('class', 'panel-title fillD2'); - function save() { - event.preventDefault(); - if (!context.inIntro() && !saving() && history.hasChanges()) { - context.enter(modeSave$$1(context)); - } - } + title + .append('h3') + .text(function(d) { return panels[d].title; }); + title + .append('button') + .attr('class', 'close') + .on('click', function (d) { toggle(d); }) + .call(svgIcon('#icon-close')); - function getBackground(numChanges) { - var step; - if (numChanges === 0) { - return null; - } else if (numChanges <= 50) { - step = numChanges / 50; - return d3_interpolateRgb('#fff', '#ff8')(step); // white -> yellow - } else { - step = Math.min((numChanges - 50) / 50, 1.0); - return d3_interpolateRgb('#ff8', '#f88')(step); // yellow -> red - } - } + enter + .append('div') + .attr('class', function(d) { return 'panel-content panel-content-' + d; }); - return function(selection$$1) { - var numChanges = 0; + // redraw the panels + infoPanels.selectAll('.panel-content') + .each(function(d) { + select(this).call(panels[d]); + }); + } - function updateCount() { - var _ = history.difference().summary().length; - if (_ === numChanges) return; - numChanges = _; - tooltipBehavior - .title(uiTooltipHtml( - t(numChanges > 0 ? 'save.help' : 'save.no_changes'), key) - ); + function toggle(which) { + if (event) { + event.stopImmediatePropagation(); + event.preventDefault(); + } + + var activeids = ids.filter(function(k) { return active[k]; }); + + if (which) { // toggle one + active[which] = !active[which]; + if (activeids.length === 1 && activeids[0] === which) { // none active anymore + wasActive = [which]; + } + } else { // toggle all + if (activeids.length) { + wasActive = activeids; + activeids.forEach(function(k) { active[k] = false; }); + } else { + wasActive.forEach(function(k) { active[k] = true; }); + } + } + + redraw(); + } - var background = getBackground(numChanges); - button - .classed('disabled', numChanges === 0) - .classed('has-count', numChanges > 0) - .style('background', background); + var infoPanels = selection$$1.selectAll('.info-panels') + .data([0]); - button.select('span.count') - .text(numChanges) - .style('background', background) - .style('border-color', background); - } + infoPanels = infoPanels.enter() + .append('div') + .attr('class', 'info-panels') + .merge(infoPanels); + redraw(); - var tooltipBehavior = tooltip() - .placement('bottom') - .html(true) - .title(uiTooltipHtml(t('save.no_changes'), key)); + var keybinding = d3keybinding('info') + .on(uiCmd('⌘' + t('info_panels.key')), toggle); - var button = selection$$1 - .append('button') - .attr('class', 'save col12 disabled') - .attr('tabindex', -1) - .on('click', save) - .call(tooltipBehavior); + ids.forEach(function(k) { + var key = t('info_panels.' + k + '.key', { default: null }); + if (!key) return; + keybinding + .on(uiCmd('⌘⇧' + key), function() { toggle(k); }); + }); - button - .call(svgIcon('#icon-save', 'pre-text')) - .append('span') - .attr('class', 'label') - .text(t('save.title')); + select(document) + .call(keybinding); + } - button - .append('span') - .attr('class', 'count') - .text('0'); + return info; + } - updateCount(); + function uiModes(context) { + var modes = [ + modeAddPoint$$1(context), + modeAddLine$$1(context), + modeAddArea$$1(context) + ]; - var keybinding = d3keybinding('uiSave') - .on(key, save, true); + function editable() { + var mode = context.mode(); + return context.editable() && mode && mode.id !== 'save'; + } - d3_select(document) - .call(keybinding); - context.history() - .on('change.save', updateCount); + return function(selection$$1) { + var buttons = selection$$1.selectAll('button.add-button') + .data(modes); + + buttons = buttons.enter() + .append('button') + .attr('tabindex', -1) + .attr('class', function(mode) { return mode.id + ' add-button col4'; }) + .on('click.mode-buttons', function(mode) { + // When drawing, ignore accidental clicks on mode buttons - #4042 + var currMode = context.mode().id; + if (currMode.match(/^draw/) !== null) return; + + if (mode.id === currMode) { + context.enter(modeBrowse(context)); + } else { + context.enter(mode); + } + }) + .call(tooltip() + .placement('bottom') + .html(true) + .title(function(mode) { + return uiTooltipHtml(mode.description, mode.key); + }) + ); + + buttons + .each(function(d) { + select(this) + .call(svgIcon('#icon-' + d.button, 'pre-text')); + }); + + buttons + .append('span') + .attr('class', 'label') + .text(function(mode) { return mode.title; }); + + context + .on('enter.editor', function(entered) { + selection$$1.selectAll('button.add-button') + .classed('active', function(mode) { return entered.button === mode.button; }); + context.container() + .classed('mode-' + entered.id, true); + }); + + context + .on('exit.editor', function(exited) { + context.container() + .classed('mode-' + exited.id, false); + }); + + var keybinding = d3keybinding('mode-buttons'); + + modes.forEach(function(mode) { + keybinding.on(mode.key, function() { + if (editable()) { + if (mode.id === context.mode().id) { + context.enter(modeBrowse(context)); + } else { + context.enter(mode); + } + } + }); + }); - context - .on('enter.save', function() { - button.property('disabled', saving()); - if (saving()) button.call(tooltipBehavior.hide); - }); - }; -} + select(document) + .call(keybinding); -function uiScale(context) { - var projection = context.projection, - isImperial = (utilDetect().locale.toLowerCase() === 'en-us'), - maxLength = 180, - tickHeight = 8; + var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true }); - function scaleDefs(loc1, loc2) { - var lat = (loc2[1] + loc1[1]) / 2, - conversion = (isImperial ? 3.28084 : 1), - dist = geoLonToMeters(loc2[0] - loc1[0], lat) * conversion, - scale = { dist: 0, px: 0, text: '' }, - buckets, i, val, dLon; + context.map() + .on('move.modes', debouncedUpdate) + .on('drawn.modes', debouncedUpdate); - if (isImperial) { - buckets = [5280000, 528000, 52800, 5280, 500, 50, 5, 1]; - } else { - buckets = [5000000, 500000, 50000, 5000, 500, 50, 5, 1]; - } + context + .on('enter.modes', update); - // determine a user-friendly endpoint for the scale - for (i = 0; i < buckets.length; i++) { - val = buckets[i]; - if (dist >= val) { - scale.dist = Math.floor(dist / val) * val; - break; - } else { - scale.dist = +dist.toFixed(2); - } - } - dLon = geoMetersToLon(scale.dist / conversion, lat); - scale.px = Math.round(projection([loc1[0] + dLon, loc1[1]])[0]); - scale.text = displayLength(scale.dist / conversion, isImperial); + function update() { + selection$$1.selectAll('button.add-button') + .property('disabled', !editable()); + } + }; + } - return scale; - } + function uiNotice(context) { + return function(selection$$1) { + var div = selection$$1 + .append('div') + .attr('class', 'notice'); - function update(selection) { - // choose loc1, loc2 along bottom of viewport (near where the scale will be drawn) - var dims = context.map().dimensions(), - loc1 = projection.invert([0, dims[1]]), - loc2 = projection.invert([maxLength, dims[1]]), - scale = scaleDefs(loc1, loc2); + var button = div + .append('button') + .attr('class', 'zoom-to notice fillD') + .on('click', function() { + context.map().zoomEase(context.minEditableZoom()); + }) + .on('wheel', function() { // let wheel events pass through #4482 + var e2 = new WheelEvent(event.type, event); + context.surface().node().dispatchEvent(e2); + }); - selection.select('#scale-path') - .attr('d', 'M0.5,0.5v' + tickHeight + 'h' + scale.px + 'v-' + tickHeight); + button + .call(svgIcon('#icon-plus', 'pre-text')) + .append('span') + .attr('class', 'label') + .text(t('zoom_in_edit')); - selection.select('#scale-textgroup') - .attr('transform', 'translate(' + (scale.px + 8) + ',' + tickHeight + ')'); - selection.select('#scale-text') - .text(scale.text); - } + function disableTooHigh() { + var canEdit = context.map().zoom() >= context.minEditableZoom(); + div.style('display', canEdit ? 'none' : 'block'); + } + context.map() + .on('move.notice', debounce(disableTooHigh, 500)); - return function(selection) { - function switchUnits() { - isImperial = !isImperial; - selection.call(update); - } + disableTooHigh(); + }; + } - var scalegroup = selection.append('svg') - .attr('id', 'scale') - .on('click', switchUnits) - .append('g') - .attr('transform', 'translate(10,11)'); + function uiRestore(context) { - scalegroup - .append('path') - .attr('id', 'scale-path'); + return function(selection) { + if (!context.history().lock() || !context.history().restorableChanges()) + return; - scalegroup - .append('g') - .attr('id', 'scale-textgroup') - .append('text') - .attr('id', 'scale-text'); + var modalSelection = uiModal(selection, true); - selection.call(update); + modalSelection.select('.modal') + .attr('class', 'modal fillL col6'); - context.map().on('move.scale', function() { - update(selection); - }); - }; -} + var introModal = modalSelection.select('.content'); -var pair_1 = pair$1; + introModal + .attr('class','cf'); -function search(x, dims, r) { - if (!dims) dims = 'NSEW'; - if (typeof x !== 'string') return { val: null, regex: r }; + introModal + .append('div') + .attr('class', 'modal-section') + .append('h3') + .text(t('restore.heading')); - r = r || /[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)°?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/gi; + introModal + .append('div') + .attr('class','modal-section') + .append('p') + .text(t('restore.description')); - var m = r.exec(x); - if (!m) return { val: null, regex: r }; + var buttonWrap = introModal + .append('div') + .attr('class', 'modal-actions cf'); - var dim = m[1] || m[5]; - if (dim && dims.indexOf(dim) === -1) return { val: null, regex: r }; + var restore = buttonWrap + .append('button') + .attr('class', 'restore col6') + .on('click', function() { + context.history().restore(); + modalSelection.remove(); + }); - return { - val: (((m[2]) ? parseFloat(m[2]) : 0) + - ((m[3] ? parseFloat(m[3]) / 60 : 0)) + - ((m[4] ? parseFloat(m[4]) / 3600 : 0))) * - ((dim === 'S' || dim === 'W') ? -1 : 1), - regex: r, - raw: m[0], - dim: dim - }; -} - -function pair$1(x, dims) { - x = x.trim(); - var one = search(x, dims); - if (one.val === null) return null; - var two = search(x, dims, one.regex); - if (two.val === null) return null; - // null if one/two are not contiguous. - if (one.raw + two.raw !== x) return null; - if (one.dim) { - return swapdim(one.val, two.val, one.dim); - } else { - return [one.val, two.val]; - } -} - -function swapdim(a, b, dim) { - if (dim === 'N' || dim === 'S') return [a, b]; - if (dim === 'W' || dim === 'E') return [b, a]; -} - -function uiFeatureList(context) { - var keybinding = d3keybinding('uiFeatureList'); - var _geocodeResults; - - - function featureList(selection$$1) { - var header = selection$$1 - .append('div') - .attr('class', 'header fillL cf'); - - header - .append('h3') - .text(t('inspector.feature_list')); - - var searchWrap = selection$$1 - .append('div') - .attr('class', 'search-header'); - - var search = searchWrap - .append('input') - .attr('placeholder', t('inspector.search')) - .attr('type', 'search') - .call(utilNoAuto) - .on('keypress', keypress) - .on('keydown', keydown) - .on('input', inputevent); - - searchWrap - .call(svgIcon('#icon-search', 'pre-text')); - - var listWrap = selection$$1 - .append('div') - .attr('class', 'inspector-body'); - - var list = listWrap - .append('div') - .attr('class', 'feature-list cf'); - - context - .on('exit.feature-list', clearSearch); - context.map() - .on('drawn.feature-list', mapDrawn); - - keybinding - .on(uiCmd('⌘F'), focusSearch); - - d3_select(document) - .call(keybinding); - - - function focusSearch() { - var mode = context.mode() && context.mode().id; - if (mode !== 'browse') return; - - event.preventDefault(); - search.node().focus(); - } + restore + .append('svg') + .attr('class', 'logo logo-restore') + .append('use') + .attr('xlink:href', '#logo-restore'); + restore + .append('div') + .text(t('restore.restore')); - function keydown() { - if (event.keyCode === 27) { // escape - search.node().blur(); - } - } + var reset = buttonWrap + .append('button') + .attr('class', 'reset col6') + .on('click', function() { + context.history().clearSaved(); + modalSelection.remove(); + }); + reset + .append('svg') + .attr('class', 'logo logo-reset') + .append('use') + .attr('xlink:href', '#logo-reset'); - function keypress() { - var q = search.property('value'), - items = list.selectAll('.feature-list-item'); - if (event.keyCode === 13 && q.length && items.size()) { // return - click(items.datum()); - } - } + reset + .append('div') + .text(t('restore.reset')); + restore.node().focus(); + }; + } - function inputevent() { - _geocodeResults = undefined; - drawList(); - } + function uiSave(context) { + var history = context.history(); + var key = uiCmd('⌘S'); - function clearSearch() { - search.property('value', ''); - drawList(); - } + function saving() { + var mode = context.mode(); + return mode && mode.id === 'save'; + } - function mapDrawn(e) { - if (e.full) { - drawList(); - } - } + function save() { + event.preventDefault(); + if (!context.inIntro() && !saving() && history.hasChanges()) { + context.enter(modeSave$$1(context)); + } + } - function features() { - var entities = {}; - var result = []; - var graph = context.graph(); - var q = search.property('value').toLowerCase(); + function getBackground(numChanges) { + var step; + if (numChanges === 0) { + return null; + } else if (numChanges <= 50) { + step = numChanges / 50; + return interpolateRgb('#fff', '#ff8')(step); // white -> yellow + } else { + step = Math.min((numChanges - 50) / 50, 1.0); + return interpolateRgb('#ff8', '#f88')(step); // yellow -> red + } + } - if (!q) return result; - var idMatch = q.match(/^([nwr])([0-9]+)$/); + return function(selection$$1) { + var numChanges = 0; - if (idMatch) { - result.push({ - id: idMatch[0], - geometry: idMatch[1] === 'n' ? 'point' : idMatch[1] === 'w' ? 'line' : 'relation', - type: idMatch[1] === 'n' ? t('inspector.node') : idMatch[1] === 'w' ? t('inspector.way') : t('inspector.relation'), - name: idMatch[2] - }); - } + function updateCount() { + var _ = history.difference().summary().length; + if (_ === numChanges) return; + numChanges = _; - var locationMatch = pair_1(q.toUpperCase()) || q.match(/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)$/); - - if (locationMatch) { - var loc = [parseFloat(locationMatch[0]), parseFloat(locationMatch[1])]; - result.push({ - id: -1, - geometry: 'point', - type: t('inspector.location'), - name: dmsCoordinatePair([loc[1], loc[0]]), - location: loc - }); - } + tooltipBehavior + .title(uiTooltipHtml( + t(numChanges > 0 ? 'save.help' : 'save.no_changes'), key) + ); - function addEntity(entity) { - if (entity.id in entities || result.length > 200) - return; - - entities[entity.id] = true; - - var name = utilDisplayName(entity) || ''; - if (name.toLowerCase().indexOf(q) >= 0) { - var matched = context.presets().match(entity, graph); - var type = (matched && matched.name()) || utilDisplayType(entity.id); - - result.push({ - id: entity.id, - entity: entity, - geometry: context.geometry(entity.id), - type: type, - name: name - }); - } - - graph.parentRelations(entity).forEach(function(parent) { - addEntity(parent); - }); - } + var background = getBackground(numChanges); - var visible = context.surface().selectAll('.point, .line, .area').nodes(); - for (var i = 0; i < visible.length && result.length <= 200; i++) { - var datum = visible[i].__data__; - var entity = datum && datum.properties && datum.properties.entity; - if (entity) { addEntity(entity); } - } + button + .classed('disabled', numChanges === 0) + .classed('has-count', numChanges > 0) + .style('background', background); - (_geocodeResults || []).forEach(function(d) { - if (d.osm_type && d.osm_id) { // some results may be missing these - #1890 - - // Make a temporary osmEntity so we can preset match - // and better localize the search result - #4725 - var id = osmEntity$$1.id.fromOSM(d.osm_type, d.osm_id); - var tags = {}; - tags[d.class] = d.type; - - var attrs = { id: id, type: d.osm_type, tags: tags }; - if (d.osm_type === 'way') { // for ways, add some fake closed nodes - attrs.nodes = ['a','a']; // so that geometry area is possible - } - - var tempEntity = osmEntity$$1(attrs); - var tempGraph = coreGraph$$1([tempEntity]); - var matched = context.presets().match(tempEntity, tempGraph); - var type = (matched && matched.name()) || utilDisplayType(id); - - result.push({ - id: tempEntity.id, - geometry: tempEntity.geometry(tempGraph), - type: type, - name: d.display_name, - extent: new geoExtent$$1( - [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])], - [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])]) - }); - } - }); + button.select('span.count') + .text(numChanges) + .style('background', background) + .style('border-color', background); + } - return result; - } + var tooltipBehavior = tooltip() + .placement('bottom') + .html(true) + .title(uiTooltipHtml(t('save.no_changes'), key)); - function drawList() { - var value = search.property('value'); - var results = features(); + var button = selection$$1 + .append('button') + .attr('class', 'save col12 disabled') + .attr('tabindex', -1) + .on('click', save) + .call(tooltipBehavior); - list.classed('filtered', value.length); + button + .call(svgIcon('#icon-save', 'pre-text')) + .append('span') + .attr('class', 'label') + .text(t('save.title')); - var noResultsWorldwide = _geocodeResults && _geocodeResults.length === 0; + button + .append('span') + .attr('class', 'count') + .text('0'); - var resultsIndicator = list.selectAll('.no-results-item') - .data([0]) - .enter() - .append('button') - .property('disabled', true) - .attr('class', 'no-results-item') - .call(svgIcon('#icon-alert', 'pre-text')); + updateCount(); - resultsIndicator.append('span') - .attr('class', 'entity-name'); - list.selectAll('.no-results-item .entity-name') - .text(noResultsWorldwide ? t('geocoder.no_results_worldwide') : t('geocoder.no_results_visible')); + var keybinding = d3keybinding('uiSave') + .on(key, save, true); - if (services.geocoder) { - list.selectAll('.geocode-item') - .data([0]) - .enter() - .append('button') - .attr('class', 'geocode-item') - .on('click', geocoderSearch) - .append('div') - .attr('class', 'label') - .append('span') - .attr('class', 'entity-name') - .text(t('geocoder.search')); - } + select(document) + .call(keybinding); - list.selectAll('.no-results-item') - .style('display', (value.length && !results.length) ? 'block' : 'none'); + context.history() + .on('change.save', updateCount); - list.selectAll('.geocode-item') - .style('display', (value && _geocodeResults === undefined) ? 'block' : 'none'); + context + .on('enter.save', function() { + button.property('disabled', saving()); + if (saving()) button.call(tooltipBehavior.hide); + }); + }; + } - list.selectAll('.feature-list-item') - .data([-1]) - .remove(); + function uiScale(context) { + var projection = context.projection, + isImperial = (utilDetect().locale.toLowerCase() === 'en-us'), + maxLength = 180, + tickHeight = 8; - var items = list.selectAll('.feature-list-item') - .data(results, function(d) { return d.id; }); - var enter = items.enter() - .insert('button', '.geocode-item') - .attr('class', 'feature-list-item') - .on('mouseover', mouseover) - .on('mouseout', mouseout) - .on('click', click); + function scaleDefs(loc1, loc2) { + var lat = (loc2[1] + loc1[1]) / 2, + conversion = (isImperial ? 3.28084 : 1), + dist = geoLonToMeters(loc2[0] - loc1[0], lat) * conversion, + scale = { dist: 0, px: 0, text: '' }, + buckets, i, val, dLon; - var label = enter - .append('div') - .attr('class', 'label'); + if (isImperial) { + buckets = [5280000, 528000, 52800, 5280, 500, 50, 5, 1]; + } else { + buckets = [5000000, 500000, 50000, 5000, 500, 50, 5, 1]; + } - label - .each(function(d) { - d3_select(this) - .call(svgIcon('#icon-' + d.geometry, 'pre-text')); - }); + // determine a user-friendly endpoint for the scale + for (i = 0; i < buckets.length; i++) { + val = buckets[i]; + if (dist >= val) { + scale.dist = Math.floor(dist / val) * val; + break; + } else { + scale.dist = +dist.toFixed(2); + } + } - label - .append('span') - .attr('class', 'entity-type') - .text(function(d) { return d.type; }); + dLon = geoMetersToLon(scale.dist / conversion, lat); + scale.px = Math.round(projection([loc1[0] + dLon, loc1[1]])[0]); - label - .append('span') - .attr('class', 'entity-name') - .text(function(d) { return d.name; }); + scale.text = displayLength(scale.dist / conversion, isImperial); - enter - .style('opacity', 0) - .transition() - .style('opacity', 1); + return scale; + } - items.order(); - items.exit() - .remove(); - } + function update(selection) { + // choose loc1, loc2 along bottom of viewport (near where the scale will be drawn) + var dims = context.map().dimensions(), + loc1 = projection.invert([0, dims[1]]), + loc2 = projection.invert([maxLength, dims[1]]), + scale = scaleDefs(loc1, loc2); + selection.select('#scale-path') + .attr('d', 'M0.5,0.5v' + tickHeight + 'h' + scale.px + 'v-' + tickHeight); - function mouseover(d) { - if (d.id === -1) return; + selection.select('#scale-textgroup') + .attr('transform', 'translate(' + (scale.px + 8) + ',' + tickHeight + ')'); - context.surface().selectAll(utilEntityOrMemberSelector([d.id], context.graph())) - .classed('hover', true); - } + selection.select('#scale-text') + .text(scale.text); + } - function mouseout() { - context.surface().selectAll('.hover') - .classed('hover', false); - } + return function(selection) { + function switchUnits() { + isImperial = !isImperial; + selection.call(update); + } + var scalegroup = selection.append('svg') + .attr('id', 'scale') + .on('click', switchUnits) + .append('g') + .attr('transform', 'translate(10,11)'); - function click(d) { - event.preventDefault(); - if (d.location) { - context.map().centerZoom([d.location[1], d.location[0]], 20); - } - else if (d.entity) { - if (d.entity.type === 'node') { - context.map().center(d.entity.loc); - } else if (d.entity.type === 'way') { - var center = context.projection(context.map().center()); - var edge = geoChooseEdge(context.childNodes(d.entity), center, context.projection); - context.map().center(edge.loc); - } - context.enter(modeSelect(context, [d.entity.id])); - } else { - context.zoomToEntity(d.id); - } - } + scalegroup + .append('path') + .attr('id', 'scale-path'); + scalegroup + .append('g') + .attr('id', 'scale-textgroup') + .append('text') + .attr('id', 'scale-text'); - function geocoderSearch() { - services.geocoder.search(search.property('value'), function (err, resp) { - _geocodeResults = resp || []; - drawList(); - }); - } - } + selection.call(update); + context.map().on('move.scale', function() { + update(selection); + }); + }; + } - return featureList; -} + var pair_1 = pair$1; -function uiPresetIcon() { - var preset, geometry; + function search(x, dims, r) { + if (!dims) dims = 'NSEW'; + if (typeof x !== 'string') return { val: null, regex: r }; + r = r || /[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)°?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/gi; - function presetIcon(selection$$1) { - selection$$1.each(render); - } + var m = r.exec(x); + if (!m) return { val: null, regex: r }; + var dim = m[1] || m[5]; + if (dim && dims.indexOf(dim) === -1) return { val: null, regex: r }; - function getIcon(p, geom) { - if (p.icon) - return p.icon; - else if (geom === 'line') - return 'other-line'; - else if (geom === 'vertex') - return p.isFallback() ? '' : 'poi-vertex'; - else - return 'marker-stroked'; + return { + val: (((m[2]) ? parseFloat(m[2]) : 0) + + ((m[3] ? parseFloat(m[3]) / 60 : 0)) + + ((m[4] ? parseFloat(m[4]) / 3600 : 0))) * + ((dim === 'S' || dim === 'W') ? -1 : 1), + regex: r, + raw: m[0], + dim: dim + }; + } + + function pair$1(x, dims) { + x = x.trim(); + var one = search(x, dims); + if (one.val === null) return null; + var two = search(x, dims, one.regex); + if (two.val === null) return null; + // null if one/two are not contiguous. + if (one.raw + two.raw !== x) return null; + if (one.dim) { + return swapdim(one.val, two.val, one.dim); + } else { + return [one.val, two.val]; } + } + function swapdim(a, b, dim) { + if (dim === 'N' || dim === 'S') return [a, b]; + if (dim === 'W' || dim === 'E') return [b, a]; + } - function render() { - var selection$$1 = d3_select(this), - p = preset.apply(this, arguments), - geom = geometry.apply(this, arguments), - picon = getIcon(p, geom), - isPoi = picon.match(/^poi-/) !== null, - isMaki = dataFeatureIcons.indexOf(picon) !== -1, - isFramed = (geom === 'area' || geom === 'verex'); - + function uiFeatureList(context) { + var keybinding = d3keybinding('uiFeatureList'); + var _geocodeResults; - function tag_classes(p) { - var s = ''; - for (var i in p.tags) { - s += ' tag-' + i; - if (p.tags[i] !== '*') { - s += ' tag-' + i + '-' + p.tags[i]; - } - } - return s; - } + function featureList(selection$$1) { + var header = selection$$1 + .append('div') + .attr('class', 'header fillL cf'); - var fill = selection$$1.selectAll('.preset-icon-fill') - .data([0]); + header + .append('h3') + .text(t('inspector.feature_list')); - fill = fill.enter() - .append('div') - .merge(fill); + var searchWrap = selection$$1 + .append('div') + .attr('class', 'search-header'); - fill - .attr('class', function() { - return 'preset-icon-fill preset-icon-fill-' + geom + tag_classes(p); - }); + var search = searchWrap + .append('input') + .attr('placeholder', t('inspector.search')) + .attr('type', 'search') + .call(utilNoAuto) + .on('keypress', keypress) + .on('keydown', keydown) + .on('input', inputevent); + searchWrap + .call(svgIcon('#icon-search', 'pre-text')); - var areaFrame = selection$$1.selectAll('.preset-icon-frame') - .data((geom === 'area') ? [0] : []); + var listWrap = selection$$1 + .append('div') + .attr('class', 'inspector-body'); - areaFrame.exit() - .remove(); + var list = listWrap + .append('div') + .attr('class', 'feature-list cf'); - areaFrame = areaFrame.enter() - .append('div') - .attr('class', 'preset-icon-frame') - .call(svgIcon('#preset-icon-frame')); + context + .on('exit.feature-list', clearSearch); + context.map() + .on('drawn.feature-list', mapDrawn); + keybinding + .on(uiCmd('⌘F'), focusSearch); - var icon = selection$$1.selectAll('.preset-icon') - .data([0]); + select(document) + .call(keybinding); - icon = icon.enter() - .append('div') - .attr('class', 'preset-icon') - .call(svgIcon('')) - .merge(icon); - icon - .attr('class', 'preset-icon preset-icon-' + - ((isMaki || isPoi) ? (isFramed ? '24' : '28') : (isFramed ? '44' : '60')) - ); + function focusSearch() { + var mode = context.mode() && context.mode().id; + if (mode !== 'browse') return; - icon.selectAll('svg') - .attr('class', function() { - return 'icon ' + picon + (isMaki || isPoi ? '' : tag_classes(p)); - }); + event.preventDefault(); + search.node().focus(); + } - icon.selectAll('use') - .attr('href', '#' + picon + (isMaki ? '-15' : '')); - } + function keydown() { + if (event.keyCode === 27) { // escape + search.node().blur(); + } + } - presetIcon.preset = function(_) { - if (!arguments.length) return preset; - preset = utilFunctor(_); - return presetIcon; - }; + function keypress() { + var q = search.property('value'), + items = list.selectAll('.feature-list-item'); + if (event.keyCode === 13 && q.length && items.size()) { // return + click(items.datum()); + } + } - presetIcon.geometry = function(_) { - if (!arguments.length) return geometry; - geometry = utilFunctor(_); - return presetIcon; - }; - return presetIcon; -} - -function d3combobox() { - var dispatch$$1 = dispatch('accept'); - var _container = d3_select(document.body); - var _data = []; - var _suggestions = []; - var _minItems = 2; - var _caseSensitive = false; - - var _fetcher = function(val, cb) { - cb(_data.filter(function(d) { - return d.value - .toString() - .toLowerCase() - .indexOf(val.toLowerCase()) !== -1; - })); - }; + function inputevent() { + _geocodeResults = undefined; + drawList(); + } - var combobox = function(input, attachTo) { - var idx = -1; - var wrapper = _container - .selectAll('div.combobox') - .filter(function(d) { return d === input.node(); }); - var shown = !wrapper.empty(); - var tagName = input.node() ? input.node().tagName.toLowerCase() : ''; - - input - .classed('combobox-input', true) - .on('focus.typeahead', focus) - .on('blur.typeahead', blur) - .on('keydown.typeahead', keydown) - .on('keyup.typeahead', keyup) - .on('input.typeahead', change) - .each(function() { - var parent = this.parentNode; - var sibling = this.nextSibling; - - var caret = d3_select(parent).selectAll('.combobox-caret') - .filter(function(d) { return d === input.node(); }) - .data([input.node()]); - - caret = caret.enter() - .insert('div', function() { return sibling; }) - .attr('class', 'combobox-caret') - .merge(caret); - - caret - .on('mousedown', function () { - // prevent the form element from blurring. it blurs - // on mousedown - event.stopPropagation(); - event.preventDefault(); - if (!shown) { - input.node().focus(); - fetch('', render); - } else { - hide(); - } - }); - }); - function focus() { - fetch(value(), render); - } + function clearSearch() { + search.property('value', ''); + drawList(); + } - function blur() { - window.setTimeout(hide, 150); - } - function show() { - if (!shown) { - wrapper = _container - .insert('div', ':first-child') - .datum(input.node()) - .attr('class', 'combobox') - .style('position', 'absolute') - .style('display', 'block') - .style('left', '0px') - .on('mousedown', function () { - // prevent moving focus out of the text field - event.preventDefault(); - }); - - d3_select('body') - .on('scroll.combobox', render, true); - - shown = true; - } - } + function mapDrawn(e) { + if (e.full) { + drawList(); + } + } - function hide() { - if (shown) { - idx = -1; - wrapper.remove(); - d3_select('body') - .on('scroll.combobox', null); + function features() { + var entities = {}; + var result = []; + var graph = context.graph(); + var q = search.property('value').toLowerCase(); + + if (!q) return result; + + var idMatch = q.match(/^([nwr])([0-9]+)$/); + + if (idMatch) { + result.push({ + id: idMatch[0], + geometry: idMatch[1] === 'n' ? 'point' : idMatch[1] === 'w' ? 'line' : 'relation', + type: idMatch[1] === 'n' ? t('inspector.node') : idMatch[1] === 'w' ? t('inspector.way') : t('inspector.relation'), + name: idMatch[2] + }); + } + + var locationMatch = pair_1(q.toUpperCase()) || q.match(/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)$/); + + if (locationMatch) { + var loc = [parseFloat(locationMatch[0]), parseFloat(locationMatch[1])]; + result.push({ + id: -1, + geometry: 'point', + type: t('inspector.location'), + name: dmsCoordinatePair([loc[1], loc[0]]), + location: loc + }); + } + + function addEntity(entity) { + if (entity.id in entities || result.length > 200) + return; + + entities[entity.id] = true; + + var name = utilDisplayName(entity) || ''; + if (name.toLowerCase().indexOf(q) >= 0) { + var matched = context.presets().match(entity, graph); + var type = (matched && matched.name()) || utilDisplayType(entity.id); + + result.push({ + id: entity.id, + entity: entity, + geometry: context.geometry(entity.id), + type: type, + name: name + }); + } + + graph.parentRelations(entity).forEach(function(parent) { + addEntity(parent); + }); + } + + var visible = context.surface().selectAll('.point, .line, .area').nodes(); + for (var i = 0; i < visible.length && result.length <= 200; i++) { + var datum = visible[i].__data__; + var entity = datum && datum.properties && datum.properties.entity; + if (entity) { addEntity(entity); } + } + + (_geocodeResults || []).forEach(function(d) { + if (d.osm_type && d.osm_id) { // some results may be missing these - #1890 + + // Make a temporary osmEntity so we can preset match + // and better localize the search result - #4725 + var id = osmEntity$$1.id.fromOSM(d.osm_type, d.osm_id); + var tags = {}; + tags[d.class] = d.type; + + var attrs = { id: id, type: d.osm_type, tags: tags }; + if (d.osm_type === 'way') { // for ways, add some fake closed nodes + attrs.nodes = ['a','a']; // so that geometry area is possible + } + + var tempEntity = osmEntity$$1(attrs); + var tempGraph = coreGraph$$1([tempEntity]); + var matched = context.presets().match(tempEntity, tempGraph); + var type = (matched && matched.name()) || utilDisplayType(id); + + result.push({ + id: tempEntity.id, + geometry: tempEntity.geometry(tempGraph), + type: type, + name: d.display_name, + extent: new geoExtent$$1( + [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])], + [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])]) + }); + } + }); + + return result; + } - shown = false; - } - } - function keydown() { - switch (event.keyCode) { - // backspace, delete - case 8: - case 46: - input.on('input.typeahead', function() { - idx = -1; - render(); - var start = input.property('selectionStart'); - input.node().setSelectionRange(start, start); - input.on('input.typeahead', change); - }); - break; - // tab - case 9: - wrapper.selectAll('a.selected').each(function (d) { - dispatch$$1.call('accept', this, d); - }); - hide(); - break; - // return - case 13: - event.preventDefault(); - break; - // up arrow - case 38: - if (tagName === 'textarea' && !shown) return; - nav(-1); - event.preventDefault(); - break; - // down arrow - case 40: - if (tagName === 'textarea' && !shown) return; - nav(+1); - event.preventDefault(); - break; - } - event.stopPropagation(); - } + function drawList() { + var value = search.property('value'); + var results = features(); - function keyup() { - switch (event.keyCode) { - // escape - case 27: - hide(); - break; - // return - case 13: - wrapper.selectAll('a.selected').each(function (d) { - dispatch$$1.call('accept', this, d); - }); - hide(); - break; - } - } + list.classed('filtered', value.length); - function change() { - fetch(value(), function() { - if (input.property('selectionEnd') === input.property('value').length) { - autocomplete(); - } - render(); - }); - } + var noResultsWorldwide = _geocodeResults && _geocodeResults.length === 0; - function nav(dir) { - if (!_suggestions.length) return; - idx = Math.max(Math.min(idx + dir, _suggestions.length - 1), 0); - input.property('value', _suggestions[idx].value); - render(); - ensureVisible(); - } + var resultsIndicator = list.selectAll('.no-results-item') + .data([0]) + .enter() + .append('button') + .property('disabled', true) + .attr('class', 'no-results-item') + .call(svgIcon('#icon-alert', 'pre-text')); - function value() { - var value = input.property('value'); - var start = input.property('selectionStart'); - var end = input.property('selectionEnd'); + resultsIndicator.append('span') + .attr('class', 'entity-name'); - if (start && end) { - value = value.substring(0, start); - } + list.selectAll('.no-results-item .entity-name') + .text(noResultsWorldwide ? t('geocoder.no_results_worldwide') : t('geocoder.no_results_visible')); - return value; - } + if (services.geocoder) { + list.selectAll('.geocode-item') + .data([0]) + .enter() + .append('button') + .attr('class', 'geocode-item') + .on('click', geocoderSearch) + .append('div') + .attr('class', 'label') + .append('span') + .attr('class', 'entity-name') + .text(t('geocoder.search')); + } - function fetch(v, cb) { - _fetcher.call(input, v, function(_) { - _suggestions = _; - cb(); - }); - } + list.selectAll('.no-results-item') + .style('display', (value.length && !results.length) ? 'block' : 'none'); - function autocomplete() { - var v = _caseSensitive ? value() : value().toLowerCase(); - idx = -1; - if (!v) return; + list.selectAll('.geocode-item') + .style('display', (value && _geocodeResults === undefined) ? 'block' : 'none'); - var best = -1; - var suggestion, compare; + list.selectAll('.feature-list-item') + .data([-1]) + .remove(); - for (var i = 0; i < _suggestions.length; i++) { - suggestion = _suggestions[i].value; - compare = _caseSensitive ? suggestion : suggestion.toLowerCase(); + var items = list.selectAll('.feature-list-item') + .data(results, function(d) { return d.id; }); - // if search string matches suggestion exactly, pick it.. - if (compare === v) { - best = i; - break; + var enter = items.enter() + .insert('button', '.geocode-item') + .attr('class', 'feature-list-item') + .on('mouseover', mouseover) + .on('mouseout', mouseout) + .on('click', click); - // otherwise lock in the first result that starts with the search string.. - } else if (best === -1 && compare.indexOf(v) === 0) { - best = i; - } - } + var label = enter + .append('div') + .attr('class', 'label'); - if (best !== -1) { - idx = best; - suggestion = _suggestions[best].value; - input.property('value', suggestion); - input.node().setSelectionRange(v.length, suggestion.length); - } - } + label + .each(function(d) { + select(this) + .call(svgIcon('#icon-' + d.geometry, 'pre-text')); + }); - function render() { - if (_suggestions.length >= _minItems && document.activeElement === input.node()) { - show(); - } else { - hide(); - return; - } + label + .append('span') + .attr('class', 'entity-type') + .text(function(d) { return d.type; }); - var options = wrapper - .selectAll('a.combobox-option') - .data(_suggestions, function(d) { return d.value; }); + label + .append('span') + .attr('class', 'entity-name') + .text(function(d) { return d.name; }); - options.exit() - .remove(); + enter + .style('opacity', 0) + .transition() + .style('opacity', 1); - options.enter() - .append('a') - .attr('class', 'combobox-option') - .text(function(d) { return d.value; }) - .merge(options) - .attr('title', function(d) { return d.title; }) - .classed('selected', function(d, i) { return i === idx; }) - .on('mouseover', select$$1) - .on('click', accept) - .order(); + items.order(); + items.exit() + .remove(); + } - var node = attachTo ? attachTo.node() : input.node(); - var rect = node.getBoundingClientRect(); - wrapper - .style('left', (rect.left + 5) + 'px') - .style('width', (rect.width - 10) + 'px') - .style('top', rect.height + rect.top + 'px'); - } + function mouseover(d) { + if (d.id === -1) return; - function select$$1(d, i) { - idx = i; - render(); - } + context.surface().selectAll(utilEntityOrMemberSelector([d.id], context.graph())) + .classed('hover', true); + } - function ensureVisible() { - var node = wrapper.selectAll('a.selected').node(); - if (node) node.scrollIntoView(); - } - function accept(d) { - if (!shown) return; - input.property('value', d.value); - utilTriggerEvent(input, 'change'); - dispatch$$1.call('accept', this, d); - hide(); - } - }; + function mouseout() { + context.surface().selectAll('.hover') + .classed('hover', false); + } - combobox.fetcher = function(_) { - if (!arguments.length) return _fetcher; - _fetcher = _; - return combobox; - }; - combobox.data = function(_) { - if (!arguments.length) return _data; - _data = _; - return combobox; - }; + function click(d) { + event.preventDefault(); + if (d.location) { + context.map().centerZoom([d.location[1], d.location[0]], 20); + } + else if (d.entity) { + if (d.entity.type === 'node') { + context.map().center(d.entity.loc); + } else if (d.entity.type === 'way') { + var center = context.projection(context.map().center()); + var edge = geoChooseEdge(context.childNodes(d.entity), center, context.projection); + context.map().center(edge.loc); + } + context.enter(modeSelect(context, [d.entity.id])); + } else { + context.zoomToEntity(d.id); + } + } - combobox.minItems = function(_) { - if (!arguments.length) return _minItems; - _minItems = _; - return combobox; - }; - combobox.caseSensitive = function(_) { - if (!arguments.length) return _caseSensitive; - _caseSensitive = _; - return combobox; - }; + function geocoderSearch() { + services.geocoder.search(search.property('value'), function (err, resp) { + _geocodeResults = resp || []; + drawList(); + }); + } + } - combobox.container = function(_) { - if (!arguments.length) return _container; - _container = _; - return combobox; - }; - return utilRebind(combobox, dispatch$$1, 'on'); -} - - -d3combobox.off = function(input) { - input - .on('focus.typeahead', null) - .on('blur.typeahead', null) - .on('keydown.typeahead', null) - .on('keyup.typeahead', null) - .on('input.typeahead', null) - .each(function() { - d3_select(this.parentNode).selectAll('.combobox-caret') - .filter(function(d) { return d === input.node(); }) - .on('mousedown', null); - }); + return featureList; + } - d3_select('body') - .on('scroll.combobox', null); -}; + function uiPresetIcon() { + var preset, geometry; -function uiRawMemberEditor(context) { - var taginfo = services.taginfo, - _entityID; + function presetIcon(selection$$1) { + selection$$1.each(render); + } - function selectMember(d) { - event.preventDefault(); - context.enter(modeSelect(context, [d.id])); - } + function getIcon(p, geom) { + if (p.icon) + return p.icon; + else if (geom === 'line') + return 'other-line'; + else if (geom === 'vertex') + return p.isFallback() ? '' : 'poi-vertex'; + else + return 'marker-stroked'; + } - function changeRole(d) { - var role = d3_select(this).property('value'); - var member = { id: d.id, type: d.type, role: role }; - context.perform( - actionChangeMember(d.relation.id, member, d.index), - t('operations.change_role.annotation') - ); - } + function render() { + var selection$$1 = select(this), + p = preset.apply(this, arguments), + geom = geometry.apply(this, arguments), + picon = getIcon(p, geom), + isPoi = picon.match(/^poi-/) !== null, + isMaki = dataFeatureIcons.indexOf(picon) !== -1, + isFramed = (geom === 'area' || geom === 'verex'); + + + function tag_classes(p) { + var s = ''; + for (var i in p.tags) { + s += ' tag-' + i; + if (p.tags[i] !== '*') { + s += ' tag-' + i + '-' + p.tags[i]; + } + } + return s; + } - function deleteMember(d) { - context.perform( - actionDeleteMember(d.relation.id, d.index), - t('operations.delete_member.annotation') - ); - if (!context.hasEntity(d.relation.id)) { - context.enter(modeBrowse(context)); - } - } + var fill = selection$$1.selectAll('.preset-icon-fill') + .data([0]); + fill = fill.enter() + .append('div') + .merge(fill); - function rawMemberEditor(selection$$1) { - var entity = context.entity(_entityID), - memberships = []; + fill + .attr('class', function() { + return 'preset-icon-fill preset-icon-fill-' + geom + tag_classes(p); + }); - entity.members.slice(0, 1000).forEach(function(member, index) { - memberships.push({ - index: index, - id: member.id, - type: member.type, - role: member.role, - relation: entity, - member: context.hasEntity(member.id) - }); - }); - var gt = entity.members.length > 1000 ? '>' : ''; - selection$$1.call(uiDisclosure(context, 'raw_member_editor', true) - .title(t('inspector.all_members') + ' (' + gt + memberships.length + ')') - .expanded(true) - .updatePreference(false) - .on('toggled', function(expanded) { - if (expanded) { selection$$1.node().parentNode.scrollTop += 200; } - }) - .content(content) - ); + var areaFrame = selection$$1.selectAll('.preset-icon-frame') + .data((geom === 'area') ? [0] : []); + areaFrame.exit() + .remove(); - function content(wrap) { - var list = wrap.selectAll('.member-list') - .data([0]); - - list = list.enter() - .append('ul') - .attr('class', 'member-list') - .merge(list); - - - var items = list.selectAll('li') - .data(memberships, function(d) { - return osmEntity$$1.key(d.relation) + ',' + d.index + ',' + - (d.member ? osmEntity$$1.key(d.member) : 'incomplete'); - }); - - items.exit() - .each(unbind) - .remove(); - - var enter = items.enter() - .append('li') - .attr('class', 'member-row form-field') - .classed('member-incomplete', function(d) { return !d.member; }); - - enter - .each(function(d) { - if (d.member) { - var label = d3_select(this).append('label') - .attr('class', 'form-label') - .append('a') - .attr('href', '#') - .on('click', selectMember); - - label.append('span') - .attr('class', 'member-entity-type') - .text(function(d) { - var matched = context.presets().match(d.member, context.graph()); - return (matched && matched.name()) || utilDisplayType(d.member.id); - }); - - label.append('span') - .attr('class', 'member-entity-name') - .text(function(d) { return utilDisplayName(d.member); }); - - } else { - d3_select(this).append('label') - .attr('class', 'form-label') - .text(t('inspector.incomplete', { id: d.id })); - } - }); - - enter - .append('input') - .attr('class', 'member-role') - .property('type', 'text') - .attr('maxlength', 255) - .attr('placeholder', t('inspector.role')) - .call(utilNoAuto) - .property('value', function(d) { return d.role; }) - .on('change', changeRole); - - enter - .append('button') - .attr('tabindex', -1) - .attr('class', 'remove button-input-action member-delete minor') - .on('click', deleteMember) - .call(svgIcon('#operation-delete')); - - if (taginfo) { - enter.each(bindTypeahead); - } + areaFrame = areaFrame.enter() + .append('div') + .attr('class', 'preset-icon-frame') + .call(svgIcon('#preset-icon-frame')); - function bindTypeahead(d) { - var row = d3_select(this), - role = row.selectAll('input.member-role'); - - function sort(value, data) { - var sameletter = [], - other = []; - for (var i = 0; i < data.length; i++) { - if (data[i].value.substring(0, value.length) === value) { - sameletter.push(data[i]); - } else { - other.push(data[i]); - } - } - return sameletter.concat(other); - } - - role.call(d3combobox() - .container(context.container()) - .fetcher(function(role, callback) { - var rtype = entity.tags.type; - taginfo.roles({ - debounce: true, - rtype: rtype || '', - geometry: context.geometry(d.member.id), - query: role - }, function(err, data) { - if (!err) callback(sort(role, data)); - }); - })); - } + var icon = selection$$1.selectAll('.preset-icon') + .data([0]); + icon = icon.enter() + .append('div') + .attr('class', 'preset-icon') + .call(svgIcon('')) + .merge(icon); - function unbind() { - var row = d3_select(this); + icon + .attr('class', 'preset-icon preset-icon-' + + ((isMaki || isPoi) ? (isFramed ? '24' : '28') : (isFramed ? '44' : '60')) + ); - row.selectAll('input.member-role') - .call(d3combobox.off); - } - } - } + icon.selectAll('svg') + .attr('class', function() { + return 'icon ' + picon + (isMaki || isPoi ? '' : tag_classes(p)); + }); + icon.selectAll('use') + .attr('href', '#' + picon + (isMaki ? '-15' : '')); + } - rawMemberEditor.entityID = function(_) { - if (!arguments.length) return _entityID; - _entityID = _; - return rawMemberEditor; - }; + presetIcon.preset = function(_) { + if (!arguments.length) return preset; + preset = utilFunctor(_); + return presetIcon; + }; - return rawMemberEditor; -} -function uiRawMembershipEditor(context) { - var taginfo = services.taginfo, - _entityID, - _showBlank; + presetIcon.geometry = function(_) { + if (!arguments.length) return geometry; + geometry = utilFunctor(_); + return presetIcon; + }; + return presetIcon; + } - function selectRelation(d) { - event.preventDefault(); - context.enter(modeSelect(context, [d.relation.id])); - } + function d3combobox() { + var dispatch$$1 = dispatch('accept'); + var _container = select(document.body); + var _data = []; + var _suggestions = []; + var _minItems = 2; + var _caseSensitive = false; + var _fetcher = function(val, cb) { + cb(_data.filter(function(d) { + return d.value + .toString() + .toLowerCase() + .indexOf(val.toLowerCase()) !== -1; + })); + }; - function changeRole(d) { - var role = d3_select(this).property('value'); - context.perform( - actionChangeMember(d.relation.id, assignIn({}, d.member, { role: role }), d.index), - t('operations.change_role.annotation') - ); - } + var combobox = function(input, attachTo) { + var idx = -1; + var wrapper = _container + .selectAll('div.combobox') + .filter(function(d) { return d === input.node(); }); + var shown = !wrapper.empty(); + var tagName = input.node() ? input.node().tagName.toLowerCase() : ''; + + input + .classed('combobox-input', true) + .on('focus.typeahead', focus) + .on('blur.typeahead', blur) + .on('keydown.typeahead', keydown) + .on('keyup.typeahead', keyup) + .on('input.typeahead', change) + .each(function() { + var parent = this.parentNode; + var sibling = this.nextSibling; + + var caret = select(parent).selectAll('.combobox-caret') + .filter(function(d) { return d === input.node(); }) + .data([input.node()]); + + caret = caret.enter() + .insert('div', function() { return sibling; }) + .attr('class', 'combobox-caret') + .merge(caret); + + caret + .on('mousedown', function () { + // prevent the form element from blurring. it blurs + // on mousedown + event.stopPropagation(); + event.preventDefault(); + if (!shown) { + input.node().focus(); + fetch('', render); + } else { + hide(); + } + }); + }); + + function focus() { + fetch(value(), render); + } + function blur() { + window.setTimeout(hide, 150); + } - function addMembership(d, role) { - _showBlank = false; + function show() { + if (!shown) { + wrapper = _container + .insert('div', ':first-child') + .datum(input.node()) + .attr('class', 'combobox') + .style('position', 'absolute') + .style('display', 'block') + .style('left', '0px') + .on('mousedown', function () { + // prevent moving focus out of the text field + event.preventDefault(); + }); + + select('body') + .on('scroll.combobox', render, true); + + shown = true; + } + } - var member = { id: _entityID, type: context.entity(_entityID).type, role: role }; + function hide() { + if (shown) { + idx = -1; + wrapper.remove(); - if (d.relation) { - context.perform( - actionAddMember(d.relation.id, member), - t('operations.add_member.annotation') - ); + select('body') + .on('scroll.combobox', null); - } else { - var relation = osmRelation(); - context.perform( - actionAddEntity(relation), - actionAddMember(relation.id, member), - t('operations.add.annotation.relation') - ); + shown = false; + } + } - context.enter(modeSelect(context, [relation.id])); - } - } + function keydown() { + switch (event.keyCode) { + // backspace, delete + case 8: + case 46: + input.on('input.typeahead', function() { + idx = -1; + render(); + var start = input.property('selectionStart'); + input.node().setSelectionRange(start, start); + input.on('input.typeahead', change); + }); + break; + // tab + case 9: + wrapper.selectAll('a.selected').each(function (d) { + dispatch$$1.call('accept', this, d); + }); + hide(); + break; + // return + case 13: + event.preventDefault(); + break; + // up arrow + case 38: + if (tagName === 'textarea' && !shown) return; + nav(-1); + event.preventDefault(); + break; + // down arrow + case 40: + if (tagName === 'textarea' && !shown) return; + nav(+1); + event.preventDefault(); + break; + } + event.stopPropagation(); + } + function keyup() { + switch (event.keyCode) { + // escape + case 27: + hide(); + break; + // return + case 13: + wrapper.selectAll('a.selected').each(function (d) { + dispatch$$1.call('accept', this, d); + }); + hide(); + break; + } + } - function deleteMembership(d) { - context.perform( - actionDeleteMember(d.relation.id, d.index), - t('operations.delete_member.annotation') - ); - } + function change() { + fetch(value(), function() { + if (input.property('selectionEnd') === input.property('value').length) { + autocomplete(); + } + render(); + }); + } + function nav(dir) { + if (!_suggestions.length) return; + idx = Math.max(Math.min(idx + dir, _suggestions.length - 1), 0); + input.property('value', _suggestions[idx].value); + render(); + ensureVisible(); + } - function relations(q) { - var newRelation = { relation: null, value: t('inspector.new_relation') }; - var result = []; - var graph = context.graph(); + function value() { + var value = input.property('value'); + var start = input.property('selectionStart'); + var end = input.property('selectionEnd'); - context.intersects(context.extent()).forEach(function(entity) { - if (entity.type !== 'relation' || entity.id === _entityID) - return; + if (start && end) { + value = value.substring(0, start); + } - var matched = context.presets().match(entity, graph), - presetName = (matched && matched.name()) || t('inspector.relation'), - entityName = utilDisplayName(entity) || ''; + return value; + } - var value = presetName + ' ' + entityName; - if (q && value.toLowerCase().indexOf(q.toLowerCase()) === -1) - return; + function fetch(v, cb) { + _fetcher.call(input, v, function(_) { + _suggestions = _; + cb(); + }); + } - result.push({ relation: entity, value: value }); - }); + function autocomplete() { + var v = _caseSensitive ? value() : value().toLowerCase(); + idx = -1; + if (!v) return; + + // Don't autocomplete if user is typing a number - #4935 + if (!isNaN(parseFloat(v)) && isFinite(v)) return; + + var best = -1; + var suggestion, compare; + + for (var i = 0; i < _suggestions.length; i++) { + suggestion = _suggestions[i].value; + compare = _caseSensitive ? suggestion : suggestion.toLowerCase(); + + // if search string matches suggestion exactly, pick it.. + if (compare === v) { + best = i; + break; + + // otherwise lock in the first result that starts with the search string.. + } else if (best === -1 && compare.indexOf(v) === 0) { + best = i; + } + } + + if (best !== -1) { + idx = best; + suggestion = _suggestions[best].value; + input.property('value', suggestion); + input.node().setSelectionRange(v.length, suggestion.length); + } + } - result.sort(function(a, b) { - return osmRelation.creationOrder(a.relation, b.relation); - }); + function render() { + if (_suggestions.length >= _minItems && document.activeElement === input.node()) { + show(); + } else { + hide(); + return; + } + + var options = wrapper + .selectAll('a.combobox-option') + .data(_suggestions, function(d) { return d.value; }); + + options.exit() + .remove(); + + options.enter() + .append('a') + .attr('class', 'combobox-option') + .text(function(d) { return d.value; }) + .merge(options) + .attr('title', function(d) { return d.title; }) + .classed('selected', function(d, i) { return i === idx; }) + .on('mouseover', select$$1) + .on('click', accept) + .order(); + + + var node = attachTo ? attachTo.node() : input.node(); + var rect = node.getBoundingClientRect(); + + wrapper + .style('left', (rect.left + 5) + 'px') + .style('width', (rect.width - 10) + 'px') + .style('top', rect.height + rect.top + 'px'); + } - // Dedupe identical names by appending relation id - see #2891 - var dupeGroups = filter( - groupBy(result, 'value'), - function(v) { return v.length > 1; } - ); + function select$$1(d, i) { + idx = i; + render(); + } - dupeGroups.forEach(function(group) { - group.forEach(function(obj) { - obj.value += ' ' + obj.relation.id; - }); - }); + function ensureVisible() { + var node = wrapper.selectAll('a.selected').node(); + if (node) node.scrollIntoView(); + } - forEach(result, function(obj) { - obj.title = obj.value; - }); + function accept(d) { + if (!shown) return; + input.property('value', d.value); + utilTriggerEvent(input, 'change'); + dispatch$$1.call('accept', this, d); + hide(); + } + }; - result.unshift(newRelation); - return result; - } + combobox.fetcher = function(_) { + if (!arguments.length) return _fetcher; + _fetcher = _; + return combobox; + }; + combobox.data = function(_) { + if (!arguments.length) return _data; + _data = _; + return combobox; + }; - function rawMembershipEditor(selection$$1) { - var entity = context.entity(_entityID), - parents = context.graph().parentRelations(entity), - memberships = []; + combobox.minItems = function(_) { + if (!arguments.length) return _minItems; + _minItems = _; + return combobox; + }; - parents.slice(0, 1000).forEach(function(relation) { - relation.members.forEach(function(member, index) { - if (member.id === entity.id) { - memberships.push({ relation: relation, member: member, index: index }); - } - }); - }); + combobox.caseSensitive = function(_) { + if (!arguments.length) return _caseSensitive; + _caseSensitive = _; + return combobox; + }; - var gt = parents.length > 1000 ? '>' : ''; - selection$$1.call(uiDisclosure(context, 'raw_membership_editor', true) - .title(t('inspector.all_relations') + ' (' + gt + memberships.length + ')') - .expanded(true) - .updatePreference(false) - .on('toggled', function(expanded) { - if (expanded) { selection$$1.node().parentNode.scrollTop += 200; } - }) - .content(content) - ); + combobox.container = function(_) { + if (!arguments.length) return _container; + _container = _; + return combobox; + }; + return utilRebind(combobox, dispatch$$1, 'on'); + } - function content(wrap) { - var list = wrap.selectAll('.member-list') - .data([0]); - - list = list.enter() - .append('ul') - .attr('class', 'member-list') - .merge(list); - - - var items = list.selectAll('li.member-row-normal') - .data(memberships, function(d) { - return osmEntity$$1.key(d.relation) + ',' + d.index; - }); - - items.exit() - .each(unbind) - .remove(); - - var enter = items.enter() - .append('li') - .attr('class', 'member-row member-row-normal form-field'); - - var label = enter - .append('label') - .attr('class', 'form-label') - .append('a') - .attr('href', '#') - .on('click', selectRelation); - - label - .append('span') - .attr('class', 'member-entity-type') - .text(function(d) { - var matched = context.presets().match(d.relation, context.graph()); - return (matched && matched.name()) || t('inspector.relation'); - }); - - label - .append('span') - .attr('class', 'member-entity-name') - .text(function(d) { return utilDisplayName(d.relation); }); - - enter - .append('input') - .attr('class', 'member-role') - .property('type', 'text') - .attr('maxlength', 255) - .attr('placeholder', t('inspector.role')) - .call(utilNoAuto) - .property('value', function(d) { return d.member.role; }) - .on('change', changeRole); - - enter - .append('button') - .attr('tabindex', -1) - .attr('class', 'remove button-input-action member-delete minor') - .on('click', deleteMembership) - .call(svgIcon('#operation-delete')); - - if (taginfo) { - enter.each(bindTypeahead); - } + d3combobox.off = function(input) { + input + .on('focus.typeahead', null) + .on('blur.typeahead', null) + .on('keydown.typeahead', null) + .on('keyup.typeahead', null) + .on('input.typeahead', null) + .each(function() { + select(this.parentNode).selectAll('.combobox-caret') + .filter(function(d) { return d === input.node(); }) + .on('mousedown', null); + }); - var newrow = list.selectAll('.member-row-new') - .data(_showBlank ? [0] : []); - - newrow.exit() - .remove(); - - enter = newrow.enter() - .append('li') - .attr('class', 'member-row member-row-new form-field'); - - enter - .append('input') - .attr('type', 'text') - .attr('class', 'member-entity-input') - .call(utilNoAuto); - - enter - .append('input') - .attr('class', 'member-role') - .property('type', 'text') - .attr('maxlength', 255) - .attr('placeholder', t('inspector.role')) - .call(utilNoAuto) - .on('change', changeRole); - - enter - .append('button') - .attr('tabindex', -1) - .attr('class', 'remove button-input-action member-delete minor') - .on('click', deleteMembership) - .call(svgIcon('#operation-delete')); - - newrow = newrow - .merge(enter); - - newrow.selectAll('.member-entity-input') - .call(d3combobox() - .container(context.container()) - .minItems(1) - .fetcher(function(value, callback) { callback(relations(value)); }) - .on('accept', onAccept) - ); - - - var addrel = wrap.selectAll('.add-relation') - .data([0]); - - addrel = addrel.enter() - .append('button') - .attr('class', 'add-relation') - .merge(addrel); - - addrel - .call(svgIcon('#icon-plus', 'light')) - .on('click', function() { - _showBlank = true; - content(wrap); - list.selectAll('.member-entity-input').node().focus(); - }); - - - function onAccept(d) { - var role = list.selectAll('.member-row-new .member-role').property('value'); - addMembership(d, role); - } + select('body') + .on('scroll.combobox', null); + }; + function uiRawMemberEditor(context) { + var taginfo = services.taginfo, + _entityID; - function bindTypeahead(d) { - var row = d3_select(this), - role = row.selectAll('input.member-role'); - - function sort(value, data) { - var sameletter = [], - other = []; - for (var i = 0; i < data.length; i++) { - if (data[i].value.substring(0, value.length) === value) { - sameletter.push(data[i]); - } else { - other.push(data[i]); - } - } - return sameletter.concat(other); - } - - role.call(d3combobox() - .container(context.container()) - .fetcher(function(role, callback) { - var rtype = d.relation.tags.type; - taginfo.roles({ - debounce: true, - rtype: rtype || '', - geometry: context.geometry(_entityID), - query: role - }, function(err, data) { - if (!err) callback(sort(role, data)); - }); - })); - } + function selectMember(d) { + event.preventDefault(); + context.enter(modeSelect(context, [d.id])); + } - function unbind() { - var row = d3_select(this); - row.selectAll('input.member-role') - .call(d3combobox.off); - } - } - } + function changeRole(d) { + var role = select(this).property('value'); + var member = { id: d.id, type: d.type, role: role }; + context.perform( + actionChangeMember(d.relation.id, member, d.index), + t('operations.change_role.annotation') + ); + } - rawMembershipEditor.entityID = function(_) { - if (!arguments.length) return _entityID; - _entityID = _; - return rawMembershipEditor; - }; + function deleteMember(d) { + context.perform( + actionDeleteMember(d.relation.id, d.index), + t('operations.delete_member.annotation') + ); + if (!context.hasEntity(d.relation.id)) { + context.enter(modeBrowse(context)); + } + } - return rawMembershipEditor; -} -function uiTagReference(tag) { - var taginfo = services.taginfo; - var tagReference = {}; + function rawMemberEditor(selection$$1) { + var entity = context.entity(_entityID), + memberships = []; - var _button = d3_select(null); - var _body = d3_select(null); - var _loaded; - var _showing; + entity.members.slice(0, 1000).forEach(function(member, index) { + memberships.push({ + index: index, + id: member.id, + type: member.type, + role: member.role, + relation: entity, + member: context.hasEntity(member.id) + }); + }); + var gt = entity.members.length > 1000 ? '>' : ''; + selection$$1.call(uiDisclosure(context, 'raw_member_editor', true) + .title(t('inspector.all_members') + ' (' + gt + memberships.length + ')') + .expanded(true) + .updatePreference(false) + .on('toggled', function(expanded) { + if (expanded) { selection$$1.node().parentNode.scrollTop += 200; } + }) + .content(content) + ); - function findLocal(data) { - var locale = utilDetect().locale.toLowerCase(); - var localized; - if (locale !== 'pt-br') { // see #3776, prefer 'pt' over 'pt-br' - localized = find$1(data, function(d) { - return d.lang.toLowerCase() === locale; - }); - if (localized) return localized; - } + function content(wrap) { + var list = wrap.selectAll('.member-list') + .data([0]); + + list = list.enter() + .append('ul') + .attr('class', 'member-list') + .merge(list); + + + var items = list.selectAll('li') + .data(memberships, function(d) { + return osmEntity$$1.key(d.relation) + ',' + d.index + ',' + + (d.member ? osmEntity$$1.key(d.member) : 'incomplete'); + }); + + items.exit() + .each(unbind) + .remove(); + + var enter = items.enter() + .append('li') + .attr('class', 'member-row form-field') + .classed('member-incomplete', function(d) { return !d.member; }); + + enter + .each(function(d) { + if (d.member) { + var label = select(this).append('label') + .attr('class', 'form-label') + .append('a') + .attr('href', '#') + .on('click', selectMember); + + label.append('span') + .attr('class', 'member-entity-type') + .text(function(d) { + var matched = context.presets().match(d.member, context.graph()); + return (matched && matched.name()) || utilDisplayType(d.member.id); + }); + + label.append('span') + .attr('class', 'member-entity-name') + .text(function(d) { return utilDisplayName(d.member); }); + + } else { + select(this).append('label') + .attr('class', 'form-label') + .text(t('inspector.incomplete', { id: d.id })); + } + }); + + enter + .append('input') + .attr('class', 'member-role') + .property('type', 'text') + .attr('maxlength', 255) + .attr('placeholder', t('inspector.role')) + .call(utilNoAuto) + .property('value', function(d) { return d.role; }) + .on('change', changeRole); + + enter + .append('button') + .attr('tabindex', -1) + .attr('class', 'remove button-input-action member-delete minor') + .on('click', deleteMember) + .call(svgIcon('#operation-delete')); + + if (taginfo) { + enter.each(bindTypeahead); + } + + + function bindTypeahead(d) { + var row = select(this), + role = row.selectAll('input.member-role'); + + function sort(value, data) { + var sameletter = [], + other = []; + for (var i = 0; i < data.length; i++) { + if (data[i].value.substring(0, value.length) === value) { + sameletter.push(data[i]); + } else { + other.push(data[i]); + } + } + return sameletter.concat(other); + } + + role.call(d3combobox() + .container(context.container()) + .fetcher(function(role, callback) { + var rtype = entity.tags.type; + taginfo.roles({ + debounce: true, + rtype: rtype || '', + geometry: context.geometry(d.member.id), + query: role + }, function(err, data) { + if (!err) callback(sort(role, data)); + }); + })); + } + + + function unbind() { + var row = select(this); + + row.selectAll('input.member-role') + .call(d3combobox.off); + } + } + } - // try the non-regional version of a language, like - // 'en' if the language is 'en-US' - if (locale.indexOf('-') !== -1) { - var first = locale.split('-')[0]; - localized = find$1(data, function(d) { - return d.lang.toLowerCase() === first; - }); - if (localized) return localized; - } - // finally fall back to english - return find$1(data, function(d) { - return d.lang.toLowerCase() === 'en'; - }); - } + rawMemberEditor.entityID = function(_) { + if (!arguments.length) return _entityID; + _entityID = _; + return rawMemberEditor; + }; - function load(param) { - if (!taginfo) return; + return rawMemberEditor; + } - _button - .classed('tag-reference-loading', true); + function uiRawMembershipEditor(context) { + var taginfo = services.taginfo, + _entityID, + _showBlank; - taginfo.docs(param, function show(err, data) { - var docs; - if (!err && data) { - docs = findLocal(data); - } - _body.html(''); - - if (!docs || !docs.title) { - if (param.hasOwnProperty('value')) { - load(omit(param, 'value')); // retry with key only - } else { - _body - .append('p') - .attr('class', 'tag-reference-description') - .text(t('inspector.no_documentation_key')); - done(); - } - return; - } + function selectRelation(d) { + event.preventDefault(); + context.enter(modeSelect(context, [d.relation.id])); + } - if (docs.image && docs.image.thumb_url_prefix) { - _body - .append('img') - .attr('class', 'tag-reference-wiki-image') - .attr('src', docs.image.thumb_url_prefix + '100' + docs.image.thumb_url_suffix) - .on('load', function() { done(); }) - .on('error', function() { d3_select(this).remove(); done(); }); - } else { - done(); - } - _body - .append('p') - .attr('class', 'tag-reference-description') - .text(docs.description || t('inspector.documentation_redirect')); - - _body - .append('a') - .attr('class', 'tag-reference-link') - .attr('target', '_blank') - .attr('tabindex', -1) - .attr('href', 'https://wiki.openstreetmap.org/wiki/' + docs.title) - .call(svgIcon('#icon-out-link', 'inline')) - .append('span') - .text(t('inspector.reference')); - - // Add link to info about "good changeset comments" - #2923 - if (param.key === 'comment') { - _body - .append('a') - .attr('class', 'tag-reference-comment-link') - .attr('target', '_blank') - .attr('tabindex', -1) - .call(svgIcon('#icon-out-link', 'inline')) - .attr('href', t('commit.about_changeset_comments_link')) - .append('span') - .text(t('commit.about_changeset_comments')); - } - }); - } + function changeRole(d) { + var role = select(this).property('value'); + context.perform( + actionChangeMember(d.relation.id, assignIn({}, d.member, { role: role }), d.index), + t('operations.change_role.annotation') + ); + } - function done() { - _loaded = true; + function addMembership(d, role) { + _showBlank = false; - _button - .classed('tag-reference-loading', false); + var member = { id: _entityID, type: context.entity(_entityID).type, role: role }; - _body - .classed('expanded', true) - .transition() - .duration(200) - .style('max-height', '200px') - .style('opacity', '1'); + if (d.relation) { + context.perform( + actionAddMember(d.relation.id, member), + t('operations.add_member.annotation') + ); - _showing = true; - } + } else { + var relation = osmRelation(); + context.perform( + actionAddEntity(relation), + actionAddMember(relation.id, member), + t('operations.add.annotation.relation') + ); + + context.enter(modeSelect(context, [relation.id])); + } + } - function hide() { - _body - .transition() - .duration(200) - .style('max-height', '0px') - .style('opacity', '0') - .on('end', function () { - _body.classed('expanded', false); - }); + function deleteMembership(d) { + context.perform( + actionDeleteMember(d.relation.id, d.index), + t('operations.delete_member.annotation') + ); + } - _showing = false; - } + function relations(q) { + var newRelation = { relation: null, value: t('inspector.new_relation') }; + var result = []; + var graph = context.graph(); - tagReference.button = function(selection$$1) { - _button = selection$$1.selectAll('.tag-reference-button') - .data([0]); + context.intersects(context.extent()).forEach(function(entity) { + if (entity.type !== 'relation' || entity.id === _entityID) + return; - _button = _button.enter() - .append('button') - .attr('class', 'tag-reference-button') - .attr('tabindex', -1) - .call(svgIcon('#icon-inspect')) - .merge(_button); + var matched = context.presets().match(entity, graph), + presetName = (matched && matched.name()) || t('inspector.relation'), + entityName = utilDisplayName(entity) || ''; - _button - .on('click', function () { - event.stopPropagation(); - event.preventDefault(); - if (_showing) { - hide(); - } else if (_loaded) { - done(); - } else { - load(tag); - } - }); - }; + var value = presetName + ' ' + entityName; + if (q && value.toLowerCase().indexOf(q.toLowerCase()) === -1) + return; + result.push({ relation: entity, value: value }); + }); - tagReference.body = function(selection$$1) { - var tagid = tag.rtype || (tag.key + '-' + tag.value); - _body = selection$$1.selectAll('.tag-reference-body') - .data([tagid], function(d) { return d; }); + result.sort(function(a, b) { + return osmRelation.creationOrder(a.relation, b.relation); + }); - _body.exit() - .remove(); + // Dedupe identical names by appending relation id - see #2891 + var dupeGroups = filter( + groupBy(result, 'value'), + function(v) { return v.length > 1; } + ); - _body = _body.enter() - .append('div') - .attr('class', 'tag-reference-body cf') - .style('max-height', '0') - .style('opacity', '0') - .merge(_body); + dupeGroups.forEach(function(group) { + group.forEach(function(obj) { + obj.value += ' ' + obj.relation.id; + }); + }); - if (_showing === false) { - hide(); - } - }; + forEach(result, function(obj) { + obj.title = obj.value; + }); + result.unshift(newRelation); + return result; + } - tagReference.showing = function(_) { - if (!arguments.length) return _showing; - _showing = _; - return tagReference; - }; + function rawMembershipEditor(selection$$1) { + var entity = context.entity(_entityID), + parents = context.graph().parentRelations(entity), + memberships = []; - return tagReference; -} - -function uiRawTagEditor(context) { - var taginfo = services.taginfo, - dispatch$$1 = dispatch('change'), - _readOnlyTags = [], - _showBlank = false, - _updatePreference = true, - _expanded = false, - _newRow, - _state, - _preset, - _tags, - _entityID; - - - function rawTagEditor(selection$$1) { - var count = Object.keys(_tags).filter(function(d) { return d; }).length; - - var disclosure = uiDisclosure(context, 'raw_tag_editor', false) - .title(t('inspector.all_tags') + ' (' + count + ')') - .on('toggled', toggled) - .updatePreference(_updatePreference) - .content(content); - - // Sometimes we want to force the raw_tag_editor to be opened/closed.. - // When undefined, uiDisclosure will use the user's stored preference. - if (_expanded !== undefined) { - disclosure.expanded(_expanded); - } + parents.slice(0, 1000).forEach(function(relation) { + relation.members.forEach(function(member, index) { + if (member.id === entity.id) { + memberships.push({ relation: relation, member: member, index: index }); + } + }); + }); - selection$$1.call(disclosure); + var gt = parents.length > 1000 ? '>' : ''; + selection$$1.call(uiDisclosure(context, 'raw_membership_editor', true) + .title(t('inspector.all_relations') + ' (' + gt + memberships.length + ')') + .expanded(true) + .updatePreference(false) + .on('toggled', function(expanded) { + if (expanded) { selection$$1.node().parentNode.scrollTop += 200; } + }) + .content(content) + ); - function toggled(expanded) { - _expanded = expanded; - if (expanded) { - selection$$1.node().parentNode.scrollTop += 200; - } - } - } + function content(wrap) { + var list = wrap.selectAll('.member-list') + .data([0]); - function content(wrap) { - var entries = map$3(_tags, function(v, k) { - return { key: k, value: v }; - }); + list = list.enter() + .append('ul') + .attr('class', 'member-list') + .merge(list); - if (!entries.length || _showBlank) { - _showBlank = false; - entries.push({key: '', value: ''}); - _newRow = ''; - } - var list = wrap.selectAll('.tag-list') - .data([0]); - - list = list.enter() - .append('ul') - .attr('class', 'tag-list') - .merge(list); - - var newTag = wrap.selectAll('.add-tag') - .data([0]); - - newTag.enter() - .append('button') - .attr('class', 'add-tag') - .on('click', addTag) - .call(svgIcon('#icon-plus', 'light')); - - - var items = list.selectAll('.tag-row') - .data(entries, function(d) { return d.key; }); - - items.exit() - .each(unbind) - .remove(); - - // Enter - - var enter = items.enter() - .append('li') - .attr('class', 'tag-row cf') - .classed('readonly', isReadOnly); - - enter - .append('div') - .attr('class', 'key-wrap') - .append('input') - .property('type', 'text') - .attr('class', 'key') - .attr('maxlength', 255) - .call(utilNoAuto) - .on('blur', keyChange) - .on('change', keyChange); - - enter - .append('div') - .attr('class', 'input-wrap-position') - .append('input') - .property('type', 'text') - .attr('class', 'value') - .attr('maxlength', 255) - .call(utilNoAuto) - .on('blur', valueChange) - .on('change', valueChange) - .on('keydown.push-more', pushMore); - - enter - .append('button') - .attr('tabindex', -1) - .attr('class', 'remove minor') - .call(svgIcon('#operation-delete')); - - - // Update - - items = items - .merge(enter) - .sort(function(a, b) { - return (a.key === _newRow && b.key !== _newRow) ? 1 - : (a.key !== _newRow && b.key === _newRow) ? -1 - : d3_ascending(a.key, b.key); - }); + var items = list.selectAll('li.member-row-normal') + .data(memberships, function(d) { + return osmEntity$$1.key(d.relation) + ',' + d.index; + }); - items - .each(function(tag) { - var row = d3_select(this), - key = row.select('input.key'), // propagate bound data to child - value = row.select('input.value'); // propagate bound data to child + items.exit() + .each(unbind) + .remove(); - if (_entityID && taginfo) { - bindTypeahead(key, value); - } + var enter = items.enter() + .append('li') + .attr('class', 'member-row member-row-normal form-field'); - var isRelation = (_entityID && context.entity(_entityID).type === 'relation'), - reference; + var label = enter + .append('label') + .attr('class', 'form-label') + .append('a') + .attr('href', '#') + .on('click', selectRelation); - if (isRelation && tag.key === 'type') { - reference = uiTagReference({ rtype: tag.value }, context); - } else { - reference = uiTagReference({ key: tag.key, value: tag.value }, context); - } + label + .append('span') + .attr('class', 'member-entity-type') + .text(function(d) { + var matched = context.presets().match(d.relation, context.graph()); + return (matched && matched.name()) || t('inspector.relation'); + }); - if (_state === 'hover') { - reference.showing(false); - } + label + .append('span') + .attr('class', 'member-entity-name') + .text(function(d) { return utilDisplayName(d.relation); }); + + enter + .append('input') + .attr('class', 'member-role') + .property('type', 'text') + .attr('maxlength', 255) + .attr('placeholder', t('inspector.role')) + .call(utilNoAuto) + .property('value', function(d) { return d.member.role; }) + .on('change', changeRole); + + enter + .append('button') + .attr('tabindex', -1) + .attr('class', 'remove button-input-action member-delete minor') + .on('click', deleteMembership) + .call(svgIcon('#operation-delete')); + + if (taginfo) { + enter.each(bindTypeahead); + } + + + var newrow = list.selectAll('.member-row-new') + .data(_showBlank ? [0] : []); + + newrow.exit() + .remove(); + + enter = newrow.enter() + .append('li') + .attr('class', 'member-row member-row-new form-field'); + + enter + .append('input') + .attr('type', 'text') + .attr('class', 'member-entity-input') + .call(utilNoAuto); + + enter + .append('input') + .attr('class', 'member-role') + .property('type', 'text') + .attr('maxlength', 255) + .attr('placeholder', t('inspector.role')) + .call(utilNoAuto) + .on('change', changeRole); + + enter + .append('button') + .attr('tabindex', -1) + .attr('class', 'remove button-input-action member-delete minor') + .on('click', deleteMembership) + .call(svgIcon('#operation-delete')); - row - .call(reference.button) - .call(reference.body); - }); + newrow = newrow + .merge(enter); - items.selectAll('input.key') - .attr('title', function(d) { return d.key; }) - .call(utilGetSetValue, function(d) { return d.key; }) - .property('disabled', isReadOnly); + newrow.selectAll('.member-entity-input') + .call(d3combobox() + .container(context.container()) + .minItems(1) + .fetcher(function(value, callback) { callback(relations(value)); }) + .on('accept', onAccept) + ); - items.selectAll('input.value') - .attr('title', function(d) { return d.value; }) - .call(utilGetSetValue, function(d) { return d.value; }) - .property('disabled', isReadOnly); - items.selectAll('button.remove') - .on('click', removeTag); + var addrel = wrap.selectAll('.add-relation') + .data([0]); + addrel = addrel.enter() + .append('button') + .attr('class', 'add-relation') + .merge(addrel); + + addrel + .call(svgIcon('#icon-plus', 'light')) + .on('click', function() { + _showBlank = true; + content(wrap); + list.selectAll('.member-entity-input').node().focus(); + }); + + + function onAccept(d) { + var role = list.selectAll('.member-row-new .member-role').property('value'); + addMembership(d, role); + } + + + function bindTypeahead(d) { + var row = select(this), + role = row.selectAll('input.member-role'); + + function sort(value, data) { + var sameletter = [], + other = []; + for (var i = 0; i < data.length; i++) { + if (data[i].value.substring(0, value.length) === value) { + sameletter.push(data[i]); + } else { + other.push(data[i]); + } + } + return sameletter.concat(other); + } + + role.call(d3combobox() + .container(context.container()) + .fetcher(function(role, callback) { + var rtype = d.relation.tags.type; + taginfo.roles({ + debounce: true, + rtype: rtype || '', + geometry: context.geometry(_entityID), + query: role + }, function(err, data) { + if (!err) callback(sort(role, data)); + }); + })); + } + + + function unbind() { + var row = select(this); + + row.selectAll('input.member-role') + .call(d3combobox.off); + } + } + } - function isReadOnly(d) { - for (var i = 0; i < _readOnlyTags.length; i++) { - if (d.key.match(_readOnlyTags[i]) !== null) { - return true; - } - } - return false; - } + rawMembershipEditor.entityID = function(_) { + if (!arguments.length) return _entityID; + _entityID = _; + return rawMembershipEditor; + }; - function pushMore() { - if (event.keyCode === 9 && !event.shiftKey && - list.selectAll('li:last-child input.value').node() === this) { - addTag(); - } - } + return rawMembershipEditor; + } + function uiTagReference(tag) { + var taginfo = services.taginfo; + var tagReference = {}; - function bindTypeahead(key, value) { - if (isReadOnly({ key: key })) return; - var geometry = context.geometry(_entityID); - - key.call(d3combobox() - .container(context.container()) - .fetcher(function(value, callback) { - taginfo.keys({ - debounce: true, - geometry: geometry, - query: value - }, function(err, data) { - if (!err) callback(sort(value, data)); - }); - })); - - value.call(d3combobox() - .container(context.container()) - .fetcher(function(value, callback) { - taginfo.values({ - debounce: true, - key: utilGetSetValue(key), - geometry: geometry, - query: value - }, function(err, data) { - if (!err) callback(sort(value, data)); - }); - })); - - - function sort(value, data) { - var sameletter = [], - other = []; - for (var i = 0; i < data.length; i++) { - if (data[i].value.substring(0, value.length) === value) { - sameletter.push(data[i]); - } else { - other.push(data[i]); - } - } - return sameletter.concat(other); - } - } + var _button = select(null); + var _body = select(null); + var _loaded; + var _showing; - function unbind() { - var row = d3_select(this); + function findLocal(data) { + var locale = utilDetect().locale.toLowerCase(); + var localized; - row.selectAll('input.key') - .call(d3combobox.off); + if (locale !== 'pt-br') { // see #3776, prefer 'pt' over 'pt-br' + localized = find$1(data, function(d) { + return d.lang.toLowerCase() === locale; + }); + if (localized) return localized; + } - row.selectAll('input.value') - .call(d3combobox.off); - } + // try the non-regional version of a language, like + // 'en' if the language is 'en-US' + if (locale.indexOf('-') !== -1) { + var first = locale.split('-')[0]; + localized = find$1(data, function(d) { + return d.lang.toLowerCase() === first; + }); + if (localized) return localized; + } + // finally fall back to english + return find$1(data, function(d) { + return d.lang.toLowerCase() === 'en'; + }); + } - function keyChange(d) { - var kOld = d.key, - kNew = this.value.trim(), - tag = {}; + function load(param) { + if (!taginfo) return; + + _button + .classed('tag-reference-loading', true); + + taginfo.docs(param, function show(err, data) { + var docs; + if (!err && data) { + docs = findLocal(data); + } + + _body.html(''); + + if (!docs || !docs.title) { + if (param.hasOwnProperty('value')) { + load(omit(param, 'value')); // retry with key only + } else { + _body + .append('p') + .attr('class', 'tag-reference-description') + .text(t('inspector.no_documentation_key')); + done(); + } + return; + } + + if (docs.image && docs.image.thumb_url_prefix) { + _body + .append('img') + .attr('class', 'tag-reference-wiki-image') + .attr('src', docs.image.thumb_url_prefix + '100' + docs.image.thumb_url_suffix) + .on('load', function() { done(); }) + .on('error', function() { select(this).remove(); done(); }); + } else { + done(); + } + + _body + .append('p') + .attr('class', 'tag-reference-description') + .text(docs.description || t('inspector.documentation_redirect')); + + _body + .append('a') + .attr('class', 'tag-reference-link') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', 'https://wiki.openstreetmap.org/wiki/' + docs.title) + .call(svgIcon('#icon-out-link', 'inline')) + .append('span') + .text(t('inspector.reference')); + + // Add link to info about "good changeset comments" - #2923 + if (param.key === 'comment') { + _body + .append('a') + .attr('class', 'tag-reference-comment-link') + .attr('target', '_blank') + .attr('tabindex', -1) + .call(svgIcon('#icon-out-link', 'inline')) + .attr('href', t('commit.about_changeset_comments_link')) + .append('span') + .text(t('commit.about_changeset_comments')); + } + }); + } - if (isReadOnly({ key: kNew })) { - this.value = kOld; - return; - } - if (kNew && kNew !== kOld) { - var match = kNew.match(/^(.*?)(?:_(\d+))?$/), - base = match[1], - suffix = +(match[2] || 1); - while (_tags[kNew]) { // rename key if already in use - kNew = base + '_' + suffix++; - } - } - tag[kOld] = undefined; - tag[kNew] = d.value; + function done() { + _loaded = true; - d.key = kNew; // Maintain DOM identity through the subsequent update. + _button + .classed('tag-reference-loading', false); - if (_newRow === kOld) { // see if this row is still a new row - _newRow = ((d.value === '' || kNew === '') ? kNew : undefined); - } + _body + .classed('expanded', true) + .transition() + .duration(200) + .style('max-height', '200px') + .style('opacity', '1'); - this.value = kNew; - dispatch$$1.call('change', this, tag); - } + _showing = true; + } - function valueChange(d) { - if (isReadOnly(d)) return; - var tag = {}; - tag[d.key] = this.value; + function hide() { + _body + .transition() + .duration(200) + .style('max-height', '0px') + .style('opacity', '0') + .on('end', function () { + _body.classed('expanded', false); + }); - if (_newRow === d.key && d.key !== '' && d.value !== '') { // not a new row anymore - _newRow = undefined; - } + _showing = false; + } - dispatch$$1.call('change', this, tag); - } + tagReference.button = function(selection$$1) { + _button = selection$$1.selectAll('.tag-reference-button') + .data([0]); + + _button = _button.enter() + .append('button') + .attr('class', 'tag-reference-button') + .attr('title', t('icons.information')) + .attr('tabindex', -1) + .call(svgIcon('#icon-inspect')) + .merge(_button); + + _button + .on('click', function () { + event.stopPropagation(); + event.preventDefault(); + if (_showing) { + hide(); + } else if (_loaded) { + done(); + } else { + load(tag); + } + }); + }; - function removeTag(d) { - if (isReadOnly(d)) return; - var tag = {}; - tag[d.key] = undefined; - dispatch$$1.call('change', this, tag); - d3_select(this.parentNode).remove(); - } + tagReference.body = function(selection$$1) { + var tagid = tag.rtype || (tag.key + '-' + tag.value); + _body = selection$$1.selectAll('.tag-reference-body') + .data([tagid], function(d) { return d; }); - function addTag() { - // Wrapped in a setTimeout in case it's being called from a blur - // handler. Without the setTimeout, the call to `content` would - // wipe out the pending value change. - setTimeout(function() { - _showBlank = true; - content(wrap); - list.selectAll('li:last-child input.key').node().focus(); - }, 0); - } - } + _body.exit() + .remove(); + _body = _body.enter() + .append('div') + .attr('class', 'tag-reference-body cf') + .style('max-height', '0') + .style('opacity', '0') + .merge(_body); - rawTagEditor.state = function(_) { - if (!arguments.length) return _state; - _state = _; - return rawTagEditor; - }; + if (_showing === false) { + hide(); + } + }; - rawTagEditor.preset = function(_) { - if (!arguments.length) return _preset; - _preset = _; - if (_preset.isFallback()) { - _expanded = true; - _updatePreference = false; - } else { - _expanded = undefined; - _updatePreference = true; - } - return rawTagEditor; - }; + tagReference.showing = function(_) { + if (!arguments.length) return _showing; + _showing = _; + return tagReference; + }; - rawTagEditor.tags = function(_) { - if (!arguments.length) return _tags; - _tags = _; - return rawTagEditor; - }; + return tagReference; + } + function uiRawTagEditor(context) { + var taginfo = services.taginfo, + dispatch$$1 = dispatch('change'), + _readOnlyTags = [], + _showBlank = false, + _updatePreference = true, + _expanded = false, + _newRow, + _state, + _preset, + _tags, + _entityID; - rawTagEditor.entityID = function(_) { - if (!arguments.length) return _entityID; - _entityID = _; - return rawTagEditor; - }; + function rawTagEditor(selection$$1) { + var count = Object.keys(_tags).filter(function(d) { return d; }).length; - rawTagEditor.expanded = function(_) { - if (!arguments.length) return _expanded; - _expanded = _; - _updatePreference = false; - return rawTagEditor; - }; + var disclosure = uiDisclosure(context, 'raw_tag_editor', false) + .title(t('inspector.all_tags') + ' (' + count + ')') + .on('toggled', toggled) + .updatePreference(_updatePreference) + .content(content); + // Sometimes we want to force the raw_tag_editor to be opened/closed.. + // When undefined, uiDisclosure will use the user's stored preference. + if (_expanded !== undefined) { + disclosure.expanded(_expanded); + } - rawTagEditor.readOnlyTags = function(_) { - if (!arguments.length) return _readOnlyTags; - _readOnlyTags = _; - return rawTagEditor; - }; + selection$$1.call(disclosure); + function toggled(expanded) { + _expanded = expanded; + if (expanded) { + selection$$1.node().parentNode.scrollTop += 200; + } + } + } - return utilRebind(rawTagEditor, dispatch$$1, 'on'); -} - -// This currently only works with the 'restrictions' field -// It borrows some code from uiHelp - -function uiFieldHelp(context, fieldName) { - var fieldHelp = {}; - var _inspector = d3_select(null); - var _wrap = d3_select(null); - var _body = d3_select(null); - - var fieldHelpKeys = { - restrictions: [ - ['about',[ - 'about', - 'from_via_to', - 'maxdist', - 'maxvia' - ]], - ['inspecting',[ - 'about', - 'from_shadow', - 'allow_shadow', - 'restrict_shadow', - 'only_shadow', - 'restricted', - 'only' - ]], - ['modifying',[ - 'about', - 'indicators', - 'allow_turn', - 'restrict_turn', - 'only_turn' - ]], - ['tips',[ - 'simple', - 'simple_example', - 'indirect', - 'indirect_example', - 'indirect_noedit' - ]] - ] - }; - var fieldHelpHeadings = {}; - - var replacements = { - distField: t('restriction.controls.distance'), - viaField: t('restriction.controls.via'), - fromShadow: icon('#turn-shadow', 'pre-text shadow from'), - allowShadow: icon('#turn-shadow', 'pre-text shadow allow'), - restrictShadow: icon('#turn-shadow', 'pre-text shadow restrict'), - onlyShadow: icon('#turn-shadow', 'pre-text shadow only'), - allowTurn: icon('#turn-yes', 'pre-text turn'), - restrictTurn: icon('#turn-no', 'pre-text turn'), - onlyTurn: icon('#turn-only', 'pre-text turn') - }; + function content(wrap) { + var entries = map$3(_tags, function(v, k) { + return { key: k, value: v }; + }); + if (!entries.length || _showBlank) { + _showBlank = false; + entries.push({key: '', value: ''}); + _newRow = ''; + } - // For each section, squash all the texts into a single markdown document - var docs = fieldHelpKeys[fieldName].map(function(key) { - var helpkey = 'help.field.' + fieldName + '.' + key[0]; - var text = key[1].reduce(function(all, part) { - var subkey = helpkey + '.' + part; - var depth = fieldHelpHeadings[subkey]; // is this subkey a heading? - var hhh = depth ? Array(depth + 1).join('#') + ' ' : ''; // if so, prepend with some ##'s - return all + hhh + t(subkey, replacements) + '\n\n'; - }, ''); + var list = wrap.selectAll('.tag-list') + .data([0]); + + list = list.enter() + .append('ul') + .attr('class', 'tag-list') + .merge(list); + + var newTag = wrap.selectAll('.add-tag') + .data([0]); + + newTag.enter() + .append('button') + .attr('class', 'add-tag') + .on('click', addTag) + .call(svgIcon('#icon-plus', 'light')); + + + var items = list.selectAll('.tag-row') + .data(entries, function(d) { return d.key; }); + + items.exit() + .each(unbind) + .remove(); + + // Enter + + var enter = items.enter() + .append('li') + .attr('class', 'tag-row cf') + .classed('readonly', isReadOnly); + + enter + .append('div') + .attr('class', 'key-wrap') + .append('input') + .property('type', 'text') + .attr('class', 'key') + .attr('maxlength', 255) + .call(utilNoAuto) + .on('blur', keyChange) + .on('change', keyChange); + + enter + .append('div') + .attr('class', 'input-wrap-position') + .append('input') + .property('type', 'text') + .attr('class', 'value') + .attr('maxlength', 255) + .call(utilNoAuto) + .on('blur', valueChange) + .on('change', valueChange) + .on('keydown.push-more', pushMore); + + enter + .append('button') + .attr('tabindex', -1) + .attr('class', 'remove minor') + .call(svgIcon('#operation-delete')); + + + // Update + + items = items + .merge(enter) + .sort(function(a, b) { + return (a.key === _newRow && b.key !== _newRow) ? 1 + : (a.key !== _newRow && b.key === _newRow) ? -1 + : ascending(a.key, b.key); + }); + + items + .each(function(tag) { + var row = select(this), + key = row.select('input.key'), // propagate bound data to child + value = row.select('input.value'); // propagate bound data to child + + if (_entityID && taginfo) { + bindTypeahead(key, value); + } + + var isRelation = (_entityID && context.entity(_entityID).type === 'relation'), + reference; + + if (isRelation && tag.key === 'type') { + reference = uiTagReference({ rtype: tag.value }, context); + } else { + reference = uiTagReference({ key: tag.key, value: tag.value }, context); + } + + if (_state === 'hover') { + reference.showing(false); + } + + row + .call(reference.button) + .call(reference.body); + }); + + items.selectAll('input.key') + .attr('title', function(d) { return d.key; }) + .call(utilGetSetValue, function(d) { return d.key; }) + .property('disabled', isReadOnly); + + items.selectAll('input.value') + .attr('title', function(d) { return d.value; }) + .call(utilGetSetValue, function(d) { return d.value; }) + .property('disabled', isReadOnly); + + items.selectAll('button.remove') + .on('click', removeTag); + + + + function isReadOnly(d) { + for (var i = 0; i < _readOnlyTags.length; i++) { + if (d.key.match(_readOnlyTags[i]) !== null) { + return true; + } + } + return false; + } - return { - key: helpkey, - title: t(helpkey + '.title'), - html: marked(text.trim()) - }; - }); + function pushMore() { + if (event.keyCode === 9 && !event.shiftKey && + list.selectAll('li:last-child input.value').node() === this) { + addTag(); + } + } - function show() { - updatePosition(); - _body - .classed('hide', false) - .style('opacity', '0') - .transition() - .duration(200) - .style('opacity', '1'); - } + function bindTypeahead(key, value) { + if (isReadOnly({ key: key })) return; + var geometry = context.geometry(_entityID); + + key.call(d3combobox() + .container(context.container()) + .fetcher(function(value, callback) { + taginfo.keys({ + debounce: true, + geometry: geometry, + query: value + }, function(err, data) { + if (!err) callback(sort(value, data)); + }); + })); + + value.call(d3combobox() + .container(context.container()) + .fetcher(function(value, callback) { + taginfo.values({ + debounce: true, + key: utilGetSetValue(key), + geometry: geometry, + query: value + }, function(err, data) { + if (!err) callback(sort(value, data)); + }); + })); + + + function sort(value, data) { + var sameletter = [], + other = []; + for (var i = 0; i < data.length; i++) { + if (data[i].value.substring(0, value.length) === value) { + sameletter.push(data[i]); + } else { + other.push(data[i]); + } + } + return sameletter.concat(other); + } + } - function hide() { - _body - .classed('hide', true) - .transition() - .duration(200) - .style('opacity', '0') - .on('end', function () { - _body.classed('hide', true); - }); - } + function unbind() { + var row = select(this); + row.selectAll('input.key') + .call(d3combobox.off); - function clickHelp(index) { - var d = docs[index]; - var tkeys = fieldHelpKeys[fieldName][index][1]; + row.selectAll('input.value') + .call(d3combobox.off); + } - _body.selectAll('.field-help-nav-item') - .classed('active', function(d, i) { return i === index; }); - var content = _body.selectAll('.field-help-content') - .html(d.html); + function keyChange(d) { + var kOld = d.key, + kNew = this.value.trim(), + tag = {}; - // class the paragraphs so we can find and style them - content.selectAll('p') - .attr('class', function(d, i) { return tkeys[i]; }); - // insert special content for certain help sections - if (d.key === 'help.field.restrictions.inspecting') { - content - .insert('img', 'p.from_shadow') - .attr('class', 'field-help-image cf') - .attr('src', context.imagePath('tr_inspect.gif')); + if (isReadOnly({ key: kNew })) { + this.value = kOld; + return; + } - } else if (d.key === 'help.field.restrictions.modifying') { - content - .insert('img', 'p.allow_turn') - .attr('class', 'field-help-image cf') - .attr('src', context.imagePath('tr_modify.gif')); - } - } + if (kNew && kNew !== kOld) { + var match = kNew.match(/^(.*?)(?:_(\d+))?$/), + base = match[1], + suffix = +(match[2] || 1); + while (_tags[kNew]) { // rename key if already in use + kNew = base + '_' + suffix++; + } + } + tag[kOld] = undefined; + tag[kNew] = d.value; + d.key = kNew; // Maintain DOM identity through the subsequent update. - fieldHelp.button = function(selection$$1) { - if (_body.empty()) return; - - var button = selection$$1.selectAll('.field-help-button') - .data([0]); - - // enter/update - button.enter() - .append('button') - .attr('class', 'field-help-button') - .attr('tabindex', -1) - .call(svgIcon('#icon-help')) - .merge(button) - .on('click', function () { - event.stopPropagation(); - event.preventDefault(); - if (_body.classed('hide')) { - show(); - } else { - hide(); - } - }); - }; + if (_newRow === kOld) { // see if this row is still a new row + _newRow = ((d.value === '' || kNew === '') ? kNew : undefined); + } + this.value = kNew; + dispatch$$1.call('change', this, tag); + } - function updatePosition() { - var wrap = _wrap.node(); - var inspector = _inspector.node(); - var wRect = wrap.getBoundingClientRect(); - var iRect = inspector.getBoundingClientRect(); - - _body - .style('top', wRect.top + inspector.scrollTop - iRect.top + 'px'); - } - - - fieldHelp.body = function(selection$$1) { - // This control expects the field to have a preset-input-wrap div - _wrap = selection$$1.selectAll('.preset-input-wrap'); - if (_wrap.empty()) return; - - // absolute position relative to the inspector, so it "floats" above the fields - _inspector = d3_select('#sidebar .entity-editor-pane .inspector-body'); - if (_inspector.empty()) return; - - _body = _inspector.selectAll('.field-help-body') - .data([0]); - - var enter = _body.enter() - .append('div') - .attr('class', 'field-help-body hide'); // initially hidden - - var titleEnter = enter - .append('div') - .attr('class', 'field-help-title cf'); - - titleEnter - .append('h2') - .attr('class', 'fl') - .text(t('help.field.' + fieldName + '.title')); - - titleEnter - .append('button') - .attr('class', 'fr close') - .on('click', function() { - event.stopPropagation(); - event.preventDefault(); - hide(); - }) - .call(svgIcon('#icon-close')); - - var navEnter = enter - .append('div') - .attr('class', 'field-help-nav cf'); - - var titles = docs.map(function(d) { return d.title; }); - navEnter.selectAll('.field-help-nav-item') - .data(titles) - .enter() - .append('div') - .attr('class', 'field-help-nav-item') - .text(function(d) { return d; }) - .on('click', function(d, i) { - event.stopPropagation(); - event.preventDefault(); - clickHelp(i); - }); - enter - .append('div') - .attr('class', 'field-help-content'); + function valueChange(d) { + if (isReadOnly(d)) return; + var tag = {}; + tag[d.key] = this.value; - _body = _body - .merge(enter); + if (_newRow === d.key && d.key !== '' && d.value !== '') { // not a new row anymore + _newRow = undefined; + } - clickHelp(0); - }; + dispatch$$1.call('change', this, tag); + } - return fieldHelp; -} + function removeTag(d) { + if (isReadOnly(d)) return; + var tag = {}; + tag[d.key] = undefined; + dispatch$$1.call('change', this, tag); + select(this.parentNode).remove(); + } -function uiFieldCheck(field, context) { - var dispatch$$1 = dispatch('change'); - var options = field.strings && field.strings.options; - var values = []; - var texts = []; - var input = d3_select(null); - var text = d3_select(null); - var label = d3_select(null); - var reverser = d3_select(null); + function addTag() { + // Wrapped in a setTimeout in case it's being called from a blur + // handler. Without the setTimeout, the call to `content` would + // wipe out the pending value change. + window.setTimeout(function() { + _showBlank = true; + content(wrap); + list.selectAll('li:last-child input.key').node().focus(); + }, 1); + } + } - var _impliedYes; - var _entityID; - var _value; + rawTagEditor.state = function(_) { + if (!arguments.length) return _state; + _state = _; + return rawTagEditor; + }; - if (options) { - for (var k in options) { - values.push(k === 'undefined' ? undefined : k); - texts.push(field.t('options.' + k, { 'default': options[k] })); - } - } else { - values = [undefined, 'yes']; - texts = [t('inspector.unknown'), t('inspector.check.yes')]; - if (field.type !== 'defaultCheck') { - values.push('no'); - texts.push(t('inspector.check.no')); - } - } + rawTagEditor.preset = function(_) { + if (!arguments.length) return _preset; + _preset = _; + if (_preset.isFallback()) { + _expanded = true; + _updatePreference = false; + } else { + _expanded = undefined; + _updatePreference = true; + } + return rawTagEditor; + }; - // Checks tags to see whether an undefined value is "Assumed to be Yes" - function checkImpliedYes() { - _impliedYes = (field.id === 'oneway_yes'); - // hack: pretend `oneway` field is a `oneway_yes` field - // where implied oneway tag exists (e.g. `junction=roundabout`) #2220, #1841 - if (field.id === 'oneway') { - var entity = context.entity(_entityID); - for (var key in entity.tags) { - if (key in osmOneWayTags && (entity.tags[key] in osmOneWayTags[key])) { - _impliedYes = true; - texts[0] = t('presets.fields.oneway_yes.options.undefined'); - break; - } - } - } - } + rawTagEditor.tags = function(_) { + if (!arguments.length) return _tags; + _tags = _; + return rawTagEditor; + }; - function reverserHidden() { - if (!d3_select('div.inspector-hover').empty()) return true; - return !(_value === 'yes' || (_impliedYes && !_value)); - } + rawTagEditor.entityID = function(_) { + if (!arguments.length) return _entityID; + _entityID = _; + return rawTagEditor; + }; - function reverserSetText(selection$$1) { - var entity = context.hasEntity(_entityID); - if (reverserHidden() || !entity) return selection$$1; + rawTagEditor.expanded = function(_) { + if (!arguments.length) return _expanded; + _expanded = _; + _updatePreference = false; + return rawTagEditor; + }; - var first = entity.first(); - var last = entity.isClosed() ? entity.nodes[entity.nodes.length - 2] : entity.last(); - var pseudoDirection = first < last; - var icon = pseudoDirection ? '#icon-forward' : '#icon-backward'; - selection$$1.selectAll('.reverser-span') - .text(t('inspector.check.reverser')) - .call(svgIcon(icon, 'inline')); + rawTagEditor.readOnlyTags = function(_) { + if (!arguments.length) return _readOnlyTags; + _readOnlyTags = _; + return rawTagEditor; + }; - return selection$$1; - } + return utilRebind(rawTagEditor, dispatch$$1, 'on'); + } + + // This currently only works with the 'restrictions' field + // It borrows some code from uiHelp + + function uiFieldHelp(context, fieldName) { + var fieldHelp = {}; + var _inspector = select(null); + var _wrap = select(null); + var _body = select(null); + + var fieldHelpKeys = { + restrictions: [ + ['about',[ + 'about', + 'from_via_to', + 'maxdist', + 'maxvia' + ]], + ['inspecting',[ + 'about', + 'from_shadow', + 'allow_shadow', + 'restrict_shadow', + 'only_shadow', + 'restricted', + 'only' + ]], + ['modifying',[ + 'about', + 'indicators', + 'allow_turn', + 'restrict_turn', + 'only_turn' + ]], + ['tips',[ + 'simple', + 'simple_example', + 'indirect', + 'indirect_example', + 'indirect_noedit' + ]] + ] + }; - var check = function(selection$$1) { - checkImpliedYes(); - selection$$1.classed('checkselect', 'true'); + var fieldHelpHeadings = {}; + + var replacements = { + distField: t('restriction.controls.distance'), + viaField: t('restriction.controls.via'), + fromShadow: icon('#turn-shadow', 'pre-text shadow from'), + allowShadow: icon('#turn-shadow', 'pre-text shadow allow'), + restrictShadow: icon('#turn-shadow', 'pre-text shadow restrict'), + onlyShadow: icon('#turn-shadow', 'pre-text shadow only'), + allowTurn: icon('#turn-yes', 'pre-text turn'), + restrictTurn: icon('#turn-no', 'pre-text turn'), + onlyTurn: icon('#turn-only', 'pre-text turn') + }; - label = selection$$1.selectAll('.preset-input-wrap') - .data([0]); - var enter = label.enter() - .append('label') - .attr('class', 'preset-input-wrap'); + // For each section, squash all the texts into a single markdown document + var docs = fieldHelpKeys[fieldName].map(function(key) { + var helpkey = 'help.field.' + fieldName + '.' + key[0]; + var text = key[1].reduce(function(all, part) { + var subkey = helpkey + '.' + part; + var depth = fieldHelpHeadings[subkey]; // is this subkey a heading? + var hhh = depth ? Array(depth + 1).join('#') + ' ' : ''; // if so, prepend with some ##'s + return all + hhh + t(subkey, replacements) + '\n\n'; + }, ''); + + return { + key: helpkey, + title: t(helpkey + '.title'), + html: marked(text.trim()) + }; + }); - enter - .append('input') - .property('indeterminate', field.type !== 'defaultCheck') - .attr('type', 'checkbox') - .attr('id', 'preset-input-' + field.id); - enter - .append('span') - .text(texts[0]) - .attr('class', 'value'); + function show() { + updatePosition(); - if (field.type === 'onewayCheck') { - enter - .append('a') - .attr('id', 'preset-input-' + field.id + '-reverser') - .attr('class', 'reverser button' + (reverserHidden() ? ' hide' : '')) - .attr('href', '#') - .append('span') - .attr('class', 'reverser-span'); - } + _body + .classed('hide', false) + .style('opacity', '0') + .transition() + .duration(200) + .style('opacity', '1'); + } - label = label.merge(enter); - input = label.selectAll('input'); - text = label.selectAll('span.value'); - input - .on('click', function() { - var t$$1 = {}; - t$$1[field.key] = values[(values.indexOf(_value) + 1) % values.length]; - dispatch$$1.call('change', this, t$$1); - event.stopPropagation(); - }); + function hide() { + _body + .classed('hide', true) + .transition() + .duration(200) + .style('opacity', '0') + .on('end', function () { + _body.classed('hide', true); + }); + } - if (field.type === 'onewayCheck') { - reverser = label.selectAll('.reverser'); - - reverser - .call(reverserSetText) - .on('click', function() { - event.preventDefault(); - event.stopPropagation(); - context.perform( - actionReverse(_entityID), - t('operations.reverse.annotation') - ); - d3_select(this) - .call(reverserSetText); - }); - } - }; + function clickHelp(index) { + var d = docs[index]; + var tkeys = fieldHelpKeys[fieldName][index][1]; - check.entity = function(_) { - if (!arguments.length) return context.hasEntity(_entityID); - _entityID = _.id; - return check; - }; + _body.selectAll('.field-help-nav-item') + .classed('active', function(d, i) { return i === index; }); + var content = _body.selectAll('.field-help-content') + .html(d.html); - check.tags = function(tags) { + // class the paragraphs so we can find and style them + content.selectAll('p') + .attr('class', function(d, i) { return tkeys[i]; }); - function isChecked(val) { - return val !== 'no' && val !== '' && val !== undefined && val !== null; - } + // insert special content for certain help sections + if (d.key === 'help.field.restrictions.inspecting') { + content + .insert('img', 'p.from_shadow') + .attr('class', 'field-help-image cf') + .attr('src', context.imagePath('tr_inspect.gif')); - function textFor(val) { - if (val === '') val = undefined; - var index = values.indexOf(val); - return (index !== -1 ? texts[index] : ('"' + val + '"')); - } + } else if (d.key === 'help.field.restrictions.modifying') { + content + .insert('img', 'p.allow_turn') + .attr('class', 'field-help-image cf') + .attr('src', context.imagePath('tr_modify.gif')); + } + } - checkImpliedYes(); - _value = tags[field.key] && tags[field.key].toLowerCase(); - if (field.type === 'onewayCheck' && (_value === '1' || _value === '-1')) { - _value = 'yes'; - } + fieldHelp.button = function(selection$$1) { + if (_body.empty()) return; + + var button = selection$$1.selectAll('.field-help-button') + .data([0]); + + // enter/update + button.enter() + .append('button') + .attr('class', 'field-help-button') + .attr('tabindex', -1) + .call(svgIcon('#icon-help')) + .merge(button) + .on('click', function () { + event.stopPropagation(); + event.preventDefault(); + if (_body.classed('hide')) { + show(); + } else { + hide(); + } + }); + }; - input - .property('indeterminate', field.type !== 'defaultCheck' && !_value) - .property('checked', isChecked(_value)); - text - .text(textFor(_value)); + function updatePosition() { + var wrap = _wrap.node(); + var inspector = _inspector.node(); + var wRect = wrap.getBoundingClientRect(); + var iRect = inspector.getBoundingClientRect(); - label - .classed('set', !!_value); + _body + .style('top', wRect.top + inspector.scrollTop - iRect.top + 'px'); + } - if (field.type === 'onewayCheck') { - reverser - .classed('hide', reverserHidden()) - .call(reverserSetText); - } - }; + fieldHelp.body = function(selection$$1) { + // This control expects the field to have a preset-input-wrap div + _wrap = selection$$1.selectAll('.preset-input-wrap'); + if (_wrap.empty()) return; + + // absolute position relative to the inspector, so it "floats" above the fields + _inspector = select('#sidebar .entity-editor-pane .inspector-body'); + if (_inspector.empty()) return; + + _body = _inspector.selectAll('.field-help-body') + .data([0]); + + var enter = _body.enter() + .append('div') + .attr('class', 'field-help-body hide'); // initially hidden + + var titleEnter = enter + .append('div') + .attr('class', 'field-help-title cf'); + + titleEnter + .append('h2') + .attr('class', 'fl') + .text(t('help.field.' + fieldName + '.title')); + + titleEnter + .append('button') + .attr('class', 'fr close') + .on('click', function() { + event.stopPropagation(); + event.preventDefault(); + hide(); + }) + .call(svgIcon('#icon-close')); + + var navEnter = enter + .append('div') + .attr('class', 'field-help-nav cf'); + + var titles = docs.map(function(d) { return d.title; }); + navEnter.selectAll('.field-help-nav-item') + .data(titles) + .enter() + .append('div') + .attr('class', 'field-help-nav-item') + .text(function(d) { return d; }) + .on('click', function(d, i) { + event.stopPropagation(); + event.preventDefault(); + clickHelp(i); + }); + + enter + .append('div') + .attr('class', 'field-help-content'); + + _body = _body + .merge(enter); + + clickHelp(0); + }; - check.focus = function() { - input.node().focus(); - }; - return utilRebind(check, dispatch$$1, 'on'); -} - -/** Used for built-in method references. */ -var arrayProto$1 = Array.prototype; - -/** Built-in value references. */ -var splice$1 = arrayProto$1.splice; - -/** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ -function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice$1.call(array, index, 1); - } else { - baseUnset(array, index); - } - } - } - return array; -} - -/** - * Removes all elements from `array` that `predicate` returns truthy for - * and returns an array of the removed elements. The predicate is invoked - * with three arguments: (value, index, array). - * - * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` - * to pull elements from an array by value. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4]; - * var evens = _.remove(array, function(n) { - * return n % 2 == 0; - * }); - * - * console.log(array); - * // => [1, 3] - * - * console.log(evens); - * // => [2, 4] - */ -function remove$8(array, predicate) { - var result = []; - if (!(array && array.length)) { - return result; + return fieldHelp; } - var index = -1, - indexes = [], - length = array.length; - predicate = baseIteratee(predicate, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; -} + function uiFieldCheck(field, context) { + var dispatch$$1 = dispatch('change'); + var options = field.strings && field.strings.options; + var values = []; + var texts = []; -function uiFieldCombo(field, context) { - var dispatch$$1 = dispatch('change'), - nominatim = services.geocoder, - taginfo = services.taginfo, - isMulti = (field.type === 'multiCombo'), - isNetwork = (field.type === 'networkCombo'), - isSemi = (field.type === 'semiCombo'), - optstrings = field.strings && field.strings.options, - optarray = field.options, - snake_case = (field.snake_case || (field.snake_case === undefined)), - caseSensitive = field.caseSensitive, - combobox = d3combobox() - .container(context.container()) - .caseSensitive(caseSensitive) - .minItems(isMulti || isSemi ? 1 : 2), - comboData = [], - multiData = [], - container, - input, - entity, - country; + var input = select(null); + var text = select(null); + var label = select(null); + var reverser = select(null); - // ensure multiCombo field.key ends with a ':' - if (isMulti && field.key.match(/:$/) === null) { - field.key += ':'; - } + var _impliedYes; + var _entityID; + var _value; - function snake(s) { - return s.replace(/\s+/g, '_'); - } + if (options) { + for (var k in options) { + values.push(k === 'undefined' ? undefined : k); + texts.push(field.t('options.' + k, { 'default': options[k] })); + } + } else { + values = [undefined, 'yes']; + texts = [t('inspector.unknown'), t('inspector.check.yes')]; + if (field.type !== 'defaultCheck') { + values.push('no'); + texts.push(t('inspector.check.no')); + } + } - function unsnake(s) { - return s.replace(/_+/g, ' '); - } - function clean(s) { - return s.split(';') - .map(function(s) { return s.trim(); }) - .join(';'); - } + // Checks tags to see whether an undefined value is "Assumed to be Yes" + function checkImpliedYes() { + _impliedYes = (field.id === 'oneway_yes'); + + // hack: pretend `oneway` field is a `oneway_yes` field + // where implied oneway tag exists (e.g. `junction=roundabout`) #2220, #1841 + if (field.id === 'oneway') { + var entity = context.entity(_entityID); + for (var key in entity.tags) { + if (key in osmOneWayTags && (entity.tags[key] in osmOneWayTags[key])) { + _impliedYes = true; + texts[0] = t('presets.fields.oneway_yes.options.undefined'); + break; + } + } + } + } - // returns the tag value for a display value - // (for multiCombo, dval should be the key suffix, not the entire key) - function tagValue(dval) { - dval = clean(dval || ''); + function reverserHidden() { + if (!select('div.inspector-hover').empty()) return true; + return !(_value === 'yes' || (_impliedYes && !_value)); + } - if (optstrings) { - var match = find$1(comboData, function(o) { - return o.key && clean(o.value) === dval; - }); - if (match) { - return match.key; - } - } - if (field.type === 'typeCombo' && !dval) { - return 'yes'; - } + function reverserSetText(selection$$1) { + var entity = context.hasEntity(_entityID); + if (reverserHidden() || !entity) return selection$$1; - return (snake_case ? snake(dval) : dval) || undefined; - } + var first = entity.first(); + var last = entity.isClosed() ? entity.nodes[entity.nodes.length - 2] : entity.last(); + var pseudoDirection = first < last; + var icon = pseudoDirection ? '#icon-forward' : '#icon-backward'; + selection$$1.selectAll('.reverser-span') + .text(t('inspector.check.reverser')) + .call(svgIcon(icon, 'inline')); - // returns the display value for a tag value - // (for multiCombo, tval should be the key suffix, not the entire key) - function displayValue(tval) { - tval = tval || ''; + return selection$$1; + } - if (optstrings) { - var match = find$1(comboData, function(o) { return o.key === tval && o.value; }); - if (match) { - return match.value; - } - } - if (field.type === 'typeCombo' && tval.toLowerCase() === 'yes') { - return ''; - } + var check = function(selection$$1) { + checkImpliedYes(); + selection$$1.classed('checkselect', 'true'); - return snake_case ? unsnake(tval) : tval; - } + label = selection$$1.selectAll('.preset-input-wrap') + .data([0]); + var enter = label.enter() + .append('label') + .attr('class', 'preset-input-wrap'); - function objectDifference(a, b) { - return reject(a, function(d1) { - return some(b, function(d2) { return d1.value === d2.value; }); - }); - } + enter + .append('input') + .property('indeterminate', field.type !== 'defaultCheck') + .attr('type', 'checkbox') + .attr('id', 'preset-input-' + field.safeid); + enter + .append('span') + .text(texts[0]) + .attr('class', 'value'); - function initCombo(selection$$1, attachTo) { - if (optstrings) { - selection$$1.attr('readonly', 'readonly'); - selection$$1.call(combobox, attachTo); - setStaticValues(setPlaceholder); + if (field.type === 'onewayCheck') { + enter + .append('a') + .attr('id', 'preset-input-' + field.safeid + '-reverser') + .attr('class', 'reverser button' + (reverserHidden() ? ' hide' : '')) + .attr('href', '#') + .append('span') + .attr('class', 'reverser-span'); + } - } else if (optarray) { - selection$$1.call(combobox, attachTo); - setStaticValues(setPlaceholder); + label = label.merge(enter); + input = label.selectAll('input'); + text = label.selectAll('span.value'); + + input + .on('click', function() { + event.stopPropagation(); + var t$$1 = {}; + t$$1[field.key] = values[(values.indexOf(_value) + 1) % values.length]; + + // Don't cycle through `alternating` or `reversible` states - #4970 + // (They are supported as translated strings, but should not toggle with clicks) + if (t$$1[field.key] === 'reversible' || t$$1[field.key] === 'alternating') { + t$$1[field.key] = values[0]; + } + + dispatch$$1.call('change', this, t$$1); + }); + + if (field.type === 'onewayCheck') { + reverser = label.selectAll('.reverser'); + + reverser + .call(reverserSetText) + .on('click', function() { + event.preventDefault(); + event.stopPropagation(); + context.perform( + actionReverse(_entityID), + t('operations.reverse.annotation') + ); + select(this) + .call(reverserSetText); + }); + } + }; - } else if (taginfo) { - selection$$1.call(combobox.fetcher(setTaginfoValues), attachTo); - setTaginfoValues('', setPlaceholder); - } - } + check.entity = function(_) { + if (!arguments.length) return context.hasEntity(_entityID); + _entityID = _.id; + return check; + }; - function setStaticValues(callback) { - if (!(optstrings || optarray)) return; - if (optstrings) { - comboData = Object.keys(optstrings).map(function(k) { - var v = field.t('options.' + k, { 'default': optstrings[k] }); - return { - key: k, - value: v, - title: v - }; - }); + check.tags = function(tags) { - } else if (optarray) { - comboData = optarray.map(function(k) { - var v = snake_case ? unsnake(k) : k; - return { - key: k, - value: v, - title: v - }; - }); - } + function isChecked(val) { + return val !== 'no' && val !== '' && val !== undefined && val !== null; + } + + function textFor(val) { + if (val === '') val = undefined; + var index = values.indexOf(val); + return (index !== -1 ? texts[index] : ('"' + val + '"')); + } + + checkImpliedYes(); + _value = tags[field.key] && tags[field.key].toLowerCase(); - combobox.data(objectDifference(comboData, multiData)); - if (callback) callback(comboData); - } + if (field.type === 'onewayCheck' && (_value === '1' || _value === '-1')) { + _value = 'yes'; + } + input + .property('indeterminate', field.type !== 'defaultCheck' && !_value) + .property('checked', isChecked(_value)); - function setTaginfoValues(q, callback) { - var fn = isMulti ? 'multikeys' : 'values'; - var query = (isMulti ? field.key : '') + q; - var hasCountryPrefix = isNetwork && country && country.indexOf(q.toLowerCase()) === 0; - if (hasCountryPrefix) { - query = country + ':'; - } + text + .text(textFor(_value)); - var params = { - debounce: (q !== ''), - key: field.key, - query: query - }; + label + .classed('set', !!_value); - if (entity) { - params.geometry = context.geometry(entity.id); - } + if (field.type === 'onewayCheck') { + reverser + .classed('hide', reverserHidden()) + .call(reverserSetText); + } + }; - taginfo[fn](params, function(err, data) { - if (err) return; - if (hasCountryPrefix) { - data = filter(data, function(d) { - return d.value.toLowerCase().indexOf(country + ':') === 0; - }); - } - comboData = map$3(data, function(d) { - var k = d.value; - if (isMulti) k = k.replace(field.key, ''); - var v = snake_case ? unsnake(k) : k; - return { - key: k, - value: v, - title: isMulti ? v : d.title - }; - }); + check.focus = function() { + input.node().focus(); + }; - comboData = objectDifference(comboData, multiData); - if (callback) callback(comboData); - }); - } + return utilRebind(check, dispatch$$1, 'on'); + } + /** Used for built-in method references. */ + var arrayProto$1 = Array.prototype; - function setPlaceholder(d) { - var ph; + /** Built-in value references. */ + var splice$1 = arrayProto$1.splice; - if (isMulti || isSemi) { - ph = field.placeholder() || t('inspector.add'); - } else { - var vals = map$3(d, 'value').filter(function(s) { return s.length < 20; }), - placeholders = vals.length > 1 ? vals : map$3(d, 'key'); - ph = field.placeholder() || placeholders.slice(0, 3).join(', '); - } + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; - if (ph.match(/(…|\.\.\.)$/) === null) { - ph += '…'; + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice$1.call(array, index, 1); + } else { + baseUnset(array, index); } - - container.selectAll('input') - .attr('placeholder', ph); + } } + return array; + } + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove$8(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; - function change() { - var val = tagValue(utilGetSetValue(input)), - t$$1 = {}; + predicate = baseIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } - if (isMulti || isSemi) { - if (!val) return; - container.classed('active', false); - utilGetSetValue(input, ''); - if (isMulti) { - field.keys.push(field.key + val); - t$$1[field.key + val] = 'yes'; - } else if (isSemi) { - var arr = multiData.map(function(d) { return d.key; }); - arr.push(val); - t$$1[field.key] = compact(uniq(arr)).join(';'); - } - window.setTimeout(function() { input.node().focus(); }, 10); + function uiFieldCombo(field, context) { + var dispatch$$1 = dispatch('change'), + nominatim = services.geocoder, + taginfo = services.taginfo, + isMulti = (field.type === 'multiCombo'), + isNetwork = (field.type === 'networkCombo'), + isSemi = (field.type === 'semiCombo'), + optstrings = field.strings && field.strings.options, + optarray = field.options, + snake_case = (field.snake_case || (field.snake_case === undefined)), + caseSensitive = field.caseSensitive, + combobox = d3combobox() + .container(context.container()) + .caseSensitive(caseSensitive) + .minItems(isMulti || isSemi ? 1 : 2), + comboData = [], + multiData = [], + container, + input, + entity, + country; + + // ensure multiCombo field.key ends with a ':' + if (isMulti && field.key.match(/:$/) === null) { + field.key += ':'; + } - } else { - t$$1[field.key] = val; - } - dispatch$$1.call('change', this, t$$1); - } + function snake(s) { + return s.replace(/\s+/g, '_'); + } + function unsnake(s) { + return s.replace(/_+/g, ' '); + } - function removeMultikey(d) { - event.stopPropagation(); - var t$$1 = {}; - if (isMulti) { - t$$1[d.key] = undefined; - } else if (isSemi) { - remove$8(multiData, function(md) { return md.key === d.key; }); - var arr = multiData.map(function(md) { return md.key; }); - arr = compact(uniq(arr)); - t$$1[field.key] = arr.length ? arr.join(';') : undefined; - } - dispatch$$1.call('change', this, t$$1); - } + function clean(s) { + return s.split(';') + .map(function(s) { return s.trim(); }) + .join(';'); + } - function combo(selection$$1) { - if (isMulti || isSemi) { - container = selection$$1.selectAll('ul').data([0]); + // returns the tag value for a display value + // (for multiCombo, dval should be the key suffix, not the entire key) + function tagValue(dval) { + dval = clean(dval || ''); - container = container.enter() - .append('ul') - .attr('class', 'form-field-multicombo') - .on('click', function() { - window.setTimeout(function() { input.node().focus(); }, 10); - }) - .merge(container); + if (optstrings) { + var match = find$1(comboData, function(o) { + return o.key && clean(o.value) === dval; + }); + if (match) { + return match.key; + } + } - } else { - container = selection$$1; - } + if (field.type === 'typeCombo' && !dval) { + return 'yes'; + } - input = container.selectAll('input') - .data([0]); - - input = input.enter() - .append('input') - .attr('type', 'text') - .attr('id', 'preset-input-' + field.id) - .call(utilNoAuto) - .call(initCombo, selection$$1) - .merge(input); - - if (isNetwork && nominatim && entity) { - var center = entity.extent(context.graph()).center(); - nominatim.countryCode(center, function (err, code) { - country = code; - }); - } + return (snake_case ? snake(dval) : dval) || undefined; + } - input - .on('change', change) - .on('blur', change); - if (isMulti || isSemi) { - combobox - .on('accept', function() { - input.node().blur(); - input.node().focus(); - }); + // returns the display value for a tag value + // (for multiCombo, tval should be the key suffix, not the entire key) + function displayValue(tval) { + tval = tval || ''; - input - .on('focus', function() { container.classed('active', true); }); - } - } + if (optstrings) { + var match = find$1(comboData, function(o) { return o.key === tval && o.value; }); + if (match) { + return match.value; + } + } + if (field.type === 'typeCombo' && tval.toLowerCase() === 'yes') { + return ''; + } - combo.tags = function(tags) { - if (isMulti || isSemi) { - multiData = []; + return snake_case ? unsnake(tval) : tval; + } - if (isMulti) { - // Build multiData array containing keys already set.. - Object.keys(tags).forEach(function(key) { - if (key.indexOf(field.key) !== 0 || tags[key].toLowerCase() !== 'yes') return; - var suffix = key.substring(field.key.length); - multiData.push({ - key: key, - value: displayValue(suffix) - }); - }); + function objectDifference(a, b) { + return reject(a, function(d1) { + return some(b, function(d2) { return d1.value === d2.value; }); + }); + } - // Set keys for form-field modified (needed for undo and reset buttons).. - field.keys = map$3(multiData, 'key'); - } else if (isSemi) { - var arr = compact(uniq((tags[field.key] || '').split(';'))); - multiData = arr.map(function(key) { - return { - key: key, - value: displayValue(key) - }; - }); - } + function initCombo(selection$$1, attachTo) { + if (optstrings) { + selection$$1.attr('readonly', 'readonly'); + selection$$1.call(combobox, attachTo); + setStaticValues(setPlaceholder); - // Exclude existing multikeys from combo options.. - var available = objectDifference(comboData, multiData); - combobox.data(available); + } else if (optarray) { + selection$$1.call(combobox, attachTo); + setStaticValues(setPlaceholder); - // Hide 'Add' button if this field uses fixed set of - // translateable optstrings and they're all currently used.. - container.selectAll('.combobox-input, .combobox-caret') - .classed('hide', optstrings && !available.length); + } else if (taginfo) { + selection$$1.call(combobox.fetcher(setTaginfoValues), attachTo); + setTaginfoValues('', setPlaceholder); + } + } - // Render chips - var chips = container.selectAll('.chips') - .data(multiData); + function setStaticValues(callback) { + if (!(optstrings || optarray)) return; + + if (optstrings) { + comboData = Object.keys(optstrings).map(function(k) { + var v = field.t('options.' + k, { 'default': optstrings[k] }); + return { + key: k, + value: v, + title: v + }; + }); + + } else if (optarray) { + comboData = optarray.map(function(k) { + var v = snake_case ? unsnake(k) : k; + return { + key: k, + value: v, + title: v + }; + }); + } - chips.exit() - .remove(); + combobox.data(objectDifference(comboData, multiData)); + if (callback) callback(comboData); + } - var enter = chips.enter() - .insert('li', 'input') - .attr('class', 'chips'); - enter.append('span'); - enter.append('a'); + function setTaginfoValues(q, callback) { + var fn = isMulti ? 'multikeys' : 'values'; + var query = (isMulti ? field.key : '') + q; + var hasCountryPrefix = isNetwork && country && country.indexOf(q.toLowerCase()) === 0; + if (hasCountryPrefix) { + query = country + ':'; + } - chips = chips.merge(enter); + var params = { + debounce: (q !== ''), + key: field.key, + query: query + }; - chips.select('span') - .text(function(d) { return d.value; }); + if (entity) { + params.geometry = context.geometry(entity.id); + } - chips.select('a') - .on('click', removeMultikey) - .attr('class', 'remove') - .text('×'); + taginfo[fn](params, function(err, data) { + if (err) return; + if (hasCountryPrefix) { + data = filter(data, function(d) { + return d.value.toLowerCase().indexOf(country + ':') === 0; + }); + } + + comboData = map$3(data, function(d) { + var k = d.value; + if (isMulti) k = k.replace(field.key, ''); + var v = snake_case ? unsnake(k) : k; + return { + key: k, + value: v, + title: isMulti ? v : d.title + }; + }); + + comboData = objectDifference(comboData, multiData); + if (callback) callback(comboData); + }); + } - } else { - utilGetSetValue(input, displayValue(tags[field.key])); - } - }; + function setPlaceholder(d) { + var ph; - combo.focus = function() { - input.node().focus(); - }; + if (isMulti || isSemi) { + ph = field.placeholder() || t('inspector.add'); + } else { + var vals = map$3(d, 'value').filter(function(s) { return s.length < 20; }), + placeholders = vals.length > 1 ? vals : map$3(d, 'key'); + ph = field.placeholder() || placeholders.slice(0, 3).join(', '); + } + if (ph.match(/(…|\.\.\.)$/) === null) { + ph += '…'; + } - combo.entity = function(_) { - if (!arguments.length) return entity; - entity = _; - return combo; - }; + container.selectAll('input') + .attr('placeholder', ph); + } - return utilRebind(combo, dispatch$$1, 'on'); -} + function change() { + var val = tagValue(utilGetSetValue(input)), + t$$1 = {}; + + if (isMulti || isSemi) { + if (!val) return; + container.classed('active', false); + utilGetSetValue(input, ''); + if (isMulti) { + field.keys.push(field.key + val); + t$$1[field.key + val] = 'yes'; + } else if (isSemi) { + var arr = multiData.map(function(d) { return d.key; }); + arr.push(val); + t$$1[field.key] = compact(uniq(arr)).join(';'); + } + window.setTimeout(function() { input.node().focus(); }, 10); -function uiFieldText(field, context) { - var dispatch$$1 = dispatch('change'), - nominatim = services.geocoder, - input, - entity; + } else { + t$$1[field.key] = val; + } + dispatch$$1.call('change', this, t$$1); + } - function i(selection$$1) { - var fieldId = 'preset-input-' + field.id; - input = selection$$1.selectAll('input') - .data([0]); + function removeMultikey(d) { + event.stopPropagation(); + var t$$1 = {}; + if (isMulti) { + t$$1[d.key] = undefined; + } else if (isSemi) { + remove$8(multiData, function(md) { return md.key === d.key; }); + var arr = multiData.map(function(md) { return md.key; }); + arr = compact(uniq(arr)); + t$$1[field.key] = arr.length ? arr.join(';') : undefined; + } + dispatch$$1.call('change', this, t$$1); + } - input = input.enter() - .append('input') - .attr('type', field.type) - .attr('id', fieldId) - .attr('placeholder', field.placeholder() || t('inspector.unknown')) - .call(utilNoAuto) - .merge(input); - input - .on('input', change(true)) - .on('blur', change()) - .on('change', change()); + function combo(selection$$1) { + if (isMulti || isSemi) { + container = selection$$1.selectAll('ul').data([0]); - if (field.type === 'tel' && nominatim && entity) { - var center = entity.extent(context.graph()).center(); - nominatim.countryCode(center, function (err, countryCode) { - if (err || !dataPhoneFormats[countryCode]) return; - selection$$1.selectAll('#' + fieldId) - .attr('placeholder', dataPhoneFormats[countryCode]); - }); + container = container.enter() + .append('ul') + .attr('class', 'form-field-multicombo') + .on('click', function() { + window.setTimeout(function() { input.node().focus(); }, 10); + }) + .merge(container); - } else if (field.type === 'number') { - var rtl = (textDirection === 'rtl'); + } else { + container = selection$$1; + } - input.attr('type', 'text'); + input = container.selectAll('input') + .data([0]); + + input = input.enter() + .append('input') + .attr('type', 'text') + .attr('id', 'preset-input-' + field.safeid) + .call(utilNoAuto) + .call(initCombo, selection$$1) + .merge(input); + + if (isNetwork && nominatim && entity) { + var center = entity.extent(context.graph()).center(); + nominatim.countryCode(center, function (err, code) { + country = code; + }); + } - var spinControl = selection$$1.selectAll('.spin-control') - .data([0]); + input + .on('change', change) + .on('blur', change); - var enter = spinControl.enter() - .append('div') - .attr('class', 'spin-control'); + if (isMulti || isSemi) { + combobox + .on('accept', function() { + input.node().blur(); + input.node().focus(); + }); - enter - .append('button') - .datum(rtl ? 1 : -1) - .attr('class', rtl ? 'increment' : 'decrement') - .attr('tabindex', -1); + input + .on('focus', function() { container.classed('active', true); }); + } + } - enter - .append('button') - .datum(rtl ? -1 : 1) - .attr('class', rtl ? 'decrement' : 'increment') - .attr('tabindex', -1); - spinControl = spinControl - .merge(enter); + combo.tags = function(tags) { + if (isMulti || isSemi) { + multiData = []; - spinControl.selectAll('button') - .on('click', function(d) { - event.preventDefault(); - var num = parseInt(input.node().value || 0, 10); - if (!isNaN(num)) input.node().value = num + d; - change()(); - }); - } - } + if (isMulti) { + // Build multiData array containing keys already set.. + Object.keys(tags).forEach(function(key) { + if (key.indexOf(field.key) !== 0 || tags[key].toLowerCase() !== 'yes') return; + var suffix = key.substring(field.key.length); + multiData.push({ + key: key, + value: displayValue(suffix) + }); + }); - function change(onInput) { - return function() { - var t$$1 = {}; - t$$1[field.key] = utilGetSetValue(input) || undefined; - dispatch$$1.call('change', this, t$$1, onInput); - }; - } + // Set keys for form-field modified (needed for undo and reset buttons).. + field.keys = map$3(multiData, 'key'); + } else if (isSemi) { + var arr = compact(uniq((tags[field.key] || '').split(';'))); + multiData = arr.map(function(key) { + return { + key: key, + value: displayValue(key) + }; + }); + } - i.entity = function(_) { - if (!arguments.length) return entity; - entity = _; - return i; - }; + // Exclude existing multikeys from combo options.. + var available = objectDifference(comboData, multiData); + combobox.data(available); + // Hide 'Add' button if this field uses fixed set of + // translateable optstrings and they're all currently used.. + container.selectAll('.combobox-input, .combobox-caret') + .classed('hide', optstrings && !available.length); - i.tags = function(tags) { - utilGetSetValue(input, tags[field.key] || ''); - }; + // Render chips + var chips = container.selectAll('.chips') + .data(multiData); - i.focus = function() { - var node = input.node(); - if (node) node.focus(); - }; + chips.exit() + .remove(); - return utilRebind(i, dispatch$$1, 'on'); -} - -function uiFieldAccess(field, context) { - var dispatch$$1 = dispatch('change'), - items; - - function access(selection$$1) { - var wrap = selection$$1.selectAll('.preset-input-wrap') - .data([0]); - - wrap = wrap.enter() - .append('div') - .attr('class', 'cf preset-input-wrap') - .append('ul') - .merge(wrap); - - var list = wrap.selectAll('ul') - .data([0]); - - list = list.enter() - .append('ul') - .merge(list); - - - items = list.selectAll('li') - .data(field.keys); - - // Enter - var enter = items.enter() - .append('li') - .attr('class', function(d) { return 'cf preset-access-' + d; }); - - enter - .append('span') - .attr('class', 'col6 label preset-label-access') - .attr('for', function(d) { return 'preset-input-access-' + d; }) - .text(function(d) { return field.t('types.' + d); }); - - enter - .append('div') - .attr('class', 'col6 preset-input-access-wrap') - .append('input') - .attr('type', 'text') - .attr('class', 'preset-input-access') - .attr('id', function(d) { return 'preset-input-access-' + d; }) - .call(utilNoAuto) - .each(function(d) { - d3_select(this) - .call(d3combobox() - .container(context.container()) - .data(access.options(d)) - ); - }); + var enter = chips.enter() + .insert('li', 'input') + .attr('class', 'chips'); + enter.append('span'); + enter.append('a'); - // Update - items = items.merge(enter); + chips = chips.merge(enter); - wrap.selectAll('.preset-input-access') - .on('change', change) - .on('blur', change); - } + chips.select('span') + .text(function(d) { return d.value; }); + chips.select('a') + .on('click', removeMultikey) + .attr('class', 'remove') + .text('×'); - function change(d) { - var tag = {}; - tag[d] = utilGetSetValue(d3_select(this)) || undefined; - dispatch$$1.call('change', this, tag); - } + } else { + utilGetSetValue(input, displayValue(tags[field.key])); + } + }; - access.options = function(type) { - var options = ['no', 'permissive', 'private', 'destination']; + combo.focus = function() { + input.node().focus(); + }; - if (type !== 'access') { - options.unshift('yes'); - options.push('designated'); - if (type === 'bicycle') { - options.push('dismount'); - } - } + combo.entity = function(_) { + if (!arguments.length) return entity; + entity = _; + return combo; + }; - return options.map(function(option) { - return { - title: field.t('options.' + option + '.description'), - value: option - }; - }); - }; + return utilRebind(combo, dispatch$$1, 'on'); + } - var placeholders = { - footway: { - foot: 'designated', - motor_vehicle: 'no' - }, - steps: { - foot: 'yes', - motor_vehicle: 'no', - bicycle: 'no', - horse: 'no' - }, - pedestrian: { - foot: 'yes', - motor_vehicle: 'no' - }, - cycleway: { - motor_vehicle: 'no', - bicycle: 'designated' - }, - bridleway: { - motor_vehicle: 'no', - horse: 'designated' - }, - path: { - foot: 'yes', - motor_vehicle: 'no', - bicycle: 'yes', - horse: 'yes' - }, - motorway: { - foot: 'no', - motor_vehicle: 'yes', - bicycle: 'no', - horse: 'no' - }, - trunk: { - motor_vehicle: 'yes' - }, - primary: { - foot: 'yes', - motor_vehicle: 'yes', - bicycle: 'yes', - horse: 'yes' - }, - secondary: { - foot: 'yes', - motor_vehicle: 'yes', - bicycle: 'yes', - horse: 'yes' - }, - tertiary: { - foot: 'yes', - motor_vehicle: 'yes', - bicycle: 'yes', - horse: 'yes' - }, - residential: { - foot: 'yes', - motor_vehicle: 'yes', - bicycle: 'yes', - horse: 'yes' - }, - unclassified: { - foot: 'yes', - motor_vehicle: 'yes', - bicycle: 'yes', - horse: 'yes' - }, - service: { - foot: 'yes', - motor_vehicle: 'yes', - bicycle: 'yes', - horse: 'yes' - }, - motorway_link: { - foot: 'no', - motor_vehicle: 'yes', - bicycle: 'no', - horse: 'no' - }, - trunk_link: { - motor_vehicle: 'yes' - }, - primary_link: { - foot: 'yes', - motor_vehicle: 'yes', - bicycle: 'yes', - horse: 'yes' - }, - secondary_link: { - foot: 'yes', - motor_vehicle: 'yes', - bicycle: 'yes', - horse: 'yes' - }, - tertiary_link: { - foot: 'yes', - motor_vehicle: 'yes', - bicycle: 'yes', - horse: 'yes' - } - }; + function uiFieldText(field, context) { + var dispatch$$1 = dispatch('change'), + nominatim = services.geocoder, + input, + entity; - access.tags = function(tags) { - utilGetSetValue(items.selectAll('.preset-input-access'), - function(d) { return tags[d] || ''; }) - .attr('placeholder', function() { - return tags.access ? tags.access : field.placeholder(); - }); + function i(selection$$1) { + var fieldId = 'preset-input-' + field.safeid; - items.selectAll('#preset-input-access-access') - .attr('placeholder', 'yes'); + input = selection$$1.selectAll('input') + .data([0]); - forEach(placeholders[tags.highway], function(v, k) { - items.selectAll('#preset-input-access-' + k) - .attr('placeholder', function() { return (tags.access || v); }); - }); - }; + input = input.enter() + .append('input') + .attr('type', field.type) + .attr('id', fieldId) + .attr('placeholder', field.placeholder() || t('inspector.unknown')) + .call(utilNoAuto) + .merge(input); + input + .on('input', change(true)) + .on('blur', change()) + .on('change', change()); - access.focus = function() { - items.selectAll('.preset-input-access') - .node().focus(); - }; + if (field.type === 'tel' && nominatim && entity) { + var center = entity.extent(context.graph()).center(); + nominatim.countryCode(center, function (err, countryCode) { + if (err || !dataPhoneFormats[countryCode]) return; + selection$$1.selectAll('#' + fieldId) + .attr('placeholder', dataPhoneFormats[countryCode]); + }); + } else if (field.type === 'number') { + var rtl = (textDirection === 'rtl'); - return utilRebind(access, dispatch$$1, 'on'); -} - -function uiFieldAddress(field, context) { - var dispatch$$1 = dispatch('init', 'change'), - nominatim = services.geocoder, - wrap = d3_select(null), - isInitialized = false, - entity; - - function getNearStreets() { - var extent = entity.extent(context.graph()), - l = extent.center(), - box = geoExtent$$1(l).padByMeters(200); - - var streets = context.intersects(box) - .filter(isAddressable) - .map(function(d) { - var loc = context.projection([ - (extent[0][0] + extent[1][0]) / 2, - (extent[0][1] + extent[1][1]) / 2]), - choice = geoChooseEdge(context.childNodes(d), loc, context.projection); - return { - title: d.tags.name, - value: d.tags.name, - dist: choice.distance - }; - }) - .sort(function(a, b) { - return a.dist - b.dist; - }); + input.attr('type', 'text'); - return uniqBy(streets, 'value'); + var spinControl = selection$$1.selectAll('.spin-control') + .data([0]); - function isAddressable(d) { - return d.tags.highway && d.tags.name && d.type === 'way'; - } - } + var enter = spinControl.enter() + .append('div') + .attr('class', 'spin-control'); + enter + .append('button') + .datum(rtl ? 1 : -1) + .attr('class', rtl ? 'increment' : 'decrement') + .attr('tabindex', -1); - function getNearCities() { - var extent = entity.extent(context.graph()), - l = extent.center(), - box = geoExtent$$1(l).padByMeters(200); + enter + .append('button') + .datum(rtl ? -1 : 1) + .attr('class', rtl ? 'decrement' : 'increment') + .attr('tabindex', -1); + + spinControl = spinControl + .merge(enter); + + spinControl.selectAll('button') + .on('click', function(d) { + event.preventDefault(); + var num = parseInt(input.node().value || 0, 10); + if (!isNaN(num)) input.node().value = num + d; + change()(); + }); + } + } - var cities = context.intersects(box) - .filter(isAddressable) - .map(function(d) { - return { - title: d.tags['addr:city'] || d.tags.name, - value: d.tags['addr:city'] || d.tags.name, - dist: geoSphericalDistance(d.extent(context.graph()).center(), l) - }; - }) - .sort(function(a, b) { - return a.dist - b.dist; - }); - return uniqBy(cities, 'value'); + function change(onInput) { + return function() { + var t$$1 = {}; + t$$1[field.key] = utilGetSetValue(input) || undefined; + dispatch$$1.call('change', this, t$$1, onInput); + }; + } - function isAddressable(d) { - if (d.tags.name && - (d.tags.admin_level === '8' || d.tags.border_type === 'city')) - return true; + i.entity = function(_) { + if (!arguments.length) return entity; + entity = _; + return i; + }; - if (d.tags.place && d.tags.name && ( - d.tags.place === 'city' || - d.tags.place === 'town' || - d.tags.place === 'village')) - return true; - if (d.tags['addr:city']) return true; + i.tags = function(tags) { + utilGetSetValue(input, tags[field.key] || ''); + }; - return false; - } - } - function getNearValues(key) { - var extent = entity.extent(context.graph()), - l = extent.center(), - box = geoExtent$$1(l).padByMeters(200); - - var results = context.intersects(box) - .filter(function hasTag(d) { - return d.tags[key]; - }) - .map(function(d) { - return { - title: d.tags[key], - value: d.tags[key], - dist: geoSphericalDistance(d.extent(context.graph()).center(), l) - }; - }) - .sort(function(a, b) { - return a.dist - b.dist; - }); + i.focus = function() { + var node = input.node(); + if (node) node.focus(); + }; - return uniqBy(results, 'value'); - } + return utilRebind(i, dispatch$$1, 'on'); + } + function uiFieldAccess(field, context) { + var dispatch$$1 = dispatch('change'), + items; - function initCallback(err, countryCode) { - if (err) return; + function access(selection$$1) { + var wrap = selection$$1.selectAll('.preset-input-wrap') + .data([0]); - var addressFormat = find$1(dataAddressFormats, function (a) { - return a && a.countryCodes && includes(a.countryCodes, countryCode.toLowerCase()); - }) || dataAddressFormats[0]; + wrap = wrap.enter() + .append('div') + .attr('class', 'cf preset-input-wrap') + .append('ul') + .merge(wrap); - var widths = addressFormat.widths || { - housenumber: 1/3, street: 2/3, - city: 2/3, state: 1/4, postcode: 1/3 - }; + var list = wrap.selectAll('ul') + .data([0]); - function row(r) { - // Normalize widths. - var total = reduce(r, function(sum, field) { - return sum + (widths[field] || 0.5); - }, 0); - - return r.map(function (field) { - return { - id: field, - width: (widths[field] || 0.5) / total - }; - }); - } + list = list.enter() + .append('ul') + .merge(list); - wrap.selectAll('div.addr-row') - .data(addressFormat.format) - .enter() - .append('div') - .attr('class', 'addr-row') - .selectAll('input') - .data(row) - .enter() - .append('input') - .property('type', 'text') - .attr('placeholder', function (d) { - var localkey = d.id + '!' + countryCode.toLowerCase(), - tkey = field.strings.placeholders[localkey] ? localkey : d.id; - return field.t('placeholders.' + tkey); - }) - .attr('class', function (d) { return 'addr-' + d.id; }) - .call(utilNoAuto) - .style('width', function (d) { return d.width * 100 + '%'; }); - - // Update - - // setup dropdowns for common address tags - var dropdowns = addressFormat.dropdowns || [ - 'city', 'county', 'country', 'district', 'hamlet', - 'neighbourhood', 'place', 'postcode', 'province', - 'quarter', 'state', 'street', 'subdistrict', 'suburb' - ]; - // If fields exist for any of these tags, create dropdowns to pick nearby values.. - dropdowns.forEach(function(tag) { - var nearValues = (tag === 'street') ? getNearStreets - : (tag === 'city') ? getNearCities - : getNearValues; - - wrap.selectAll('input.addr-' + tag) - .call(d3combobox() - .container(context.container()) - .minItems(1) - .fetcher(function(value, callback) { - callback(nearValues('addr:' + tag)); - }) - ); - }); + items = list.selectAll('li') + .data(field.keys); - wrap.selectAll('input') - .on('blur', change()) - .on('change', change()); + // Enter + var enter = items.enter() + .append('li') + .attr('class', function(d) { return 'cf preset-access-' + d; }); - wrap.selectAll('input:not(.combobox-input)') - .on('input', change(true)); + enter + .append('span') + .attr('class', 'col6 label preset-label-access') + .attr('for', function(d) { return 'preset-input-access-' + d; }) + .text(function(d) { return field.t('types.' + d); }); - dispatch$$1.call('init'); - isInitialized = true; - } + enter + .append('div') + .attr('class', 'col6 preset-input-access-wrap') + .append('input') + .attr('type', 'text') + .attr('class', 'preset-input-access') + .attr('id', function(d) { return 'preset-input-access-' + d; }) + .call(utilNoAuto) + .each(function(d) { + select(this) + .call(d3combobox() + .container(context.container()) + .data(access.options(d)) + ); + }); - function address(selection$$1) { - isInitialized = false; + // Update + items = items.merge(enter); - wrap = selection$$1.selectAll('.preset-input-wrap') - .data([0]); + wrap.selectAll('.preset-input-access') + .on('change', change) + .on('blur', change); + } - wrap = wrap.enter() - .append('div') - .attr('class', 'preset-input-wrap') - .merge(wrap); - if (nominatim && entity) { - var center = entity.extent(context.graph()).center(); - nominatim.countryCode(center, initCallback); - } - } + function change(d) { + var tag = {}; + tag[d] = utilGetSetValue(select(this)) || undefined; + dispatch$$1.call('change', this, tag); + } - function change(onInput) { - return function() { - var tags = {}; + access.options = function(type) { + var options = ['no', 'permissive', 'private', 'destination']; - wrap.selectAll('input') - .each(function (field) { - tags['addr:' + field.id] = this.value || undefined; - }); + if (type !== 'access') { + options.unshift('yes'); + options.push('designated'); - dispatch$$1.call('change', this, tags, onInput); - }; - } + if (type === 'bicycle') { + options.push('dismount'); + } + } + return options.map(function(option) { + return { + title: field.t('options.' + option + '.description'), + value: option + }; + }); + }; - function updateTags(tags) { - utilGetSetValue(wrap.selectAll('input'), function (field) { - return tags['addr:' + field.id] || ''; - }); - } + var placeholders = { + footway: { + foot: 'designated', + motor_vehicle: 'no' + }, + steps: { + foot: 'yes', + motor_vehicle: 'no', + bicycle: 'no', + horse: 'no' + }, + pedestrian: { + foot: 'yes', + motor_vehicle: 'no' + }, + cycleway: { + motor_vehicle: 'no', + bicycle: 'designated' + }, + bridleway: { + motor_vehicle: 'no', + horse: 'designated' + }, + path: { + foot: 'yes', + motor_vehicle: 'no', + bicycle: 'yes', + horse: 'yes' + }, + motorway: { + foot: 'no', + motor_vehicle: 'yes', + bicycle: 'no', + horse: 'no' + }, + trunk: { + motor_vehicle: 'yes' + }, + primary: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + secondary: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + tertiary: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + residential: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + unclassified: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + service: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + motorway_link: { + foot: 'no', + motor_vehicle: 'yes', + bicycle: 'no', + horse: 'no' + }, + trunk_link: { + motor_vehicle: 'yes' + }, + primary_link: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + secondary_link: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + tertiary_link: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + } + }; - address.entity = function(_) { - if (!arguments.length) return entity; - entity = _; - return address; - }; + access.tags = function(tags) { + utilGetSetValue(items.selectAll('.preset-input-access'), + function(d) { return tags[d] || ''; }) + .attr('placeholder', function() { + return tags.access ? tags.access : field.placeholder(); + }); - address.tags = function(tags) { - if (isInitialized) { - updateTags(tags); - } else { - dispatch$$1.on('init', function () { - dispatch$$1.on('init', null); - updateTags(tags); - }); - } - }; + items.selectAll('#preset-input-access-access') + .attr('placeholder', 'yes'); + forEach(placeholders[tags.highway], function(v, k) { + items.selectAll('#preset-input-access-' + k) + .attr('placeholder', function() { return (tags.access || v); }); + }); + }; - address.focus = function() { - var node = wrap.selectAll('input').node(); - if (node) node.focus(); - }; + access.focus = function() { + items.selectAll('.preset-input-access') + .node().focus(); + }; - return utilRebind(address, dispatch$$1, 'on'); -} -function uiFieldCycleway(field, context) { - var dispatch$$1 = dispatch('change'), - items = d3_select(null); + return utilRebind(access, dispatch$$1, 'on'); + } + + function uiFieldAddress(field, context) { + var dispatch$$1 = dispatch('init', 'change'), + nominatim = services.geocoder, + wrap = select(null), + isInitialized = false, + entity; + + function getNearStreets() { + var extent = entity.extent(context.graph()), + l = extent.center(), + box = geoExtent$$1(l).padByMeters(200); + + var streets = context.intersects(box) + .filter(isAddressable) + .map(function(d) { + var loc = context.projection([ + (extent[0][0] + extent[1][0]) / 2, + (extent[0][1] + extent[1][1]) / 2]), + choice = geoChooseEdge(context.childNodes(d), loc, context.projection); + return { + title: d.tags.name, + value: d.tags.name, + dist: choice.distance + }; + }) + .sort(function(a, b) { + return a.dist - b.dist; + }); + + return uniqBy(streets, 'value'); + + function isAddressable(d) { + return d.tags.highway && d.tags.name && d.type === 'way'; + } + } - function cycleway(selection$$1) { + function getNearCities() { + var extent = entity.extent(context.graph()), + l = extent.center(), + box = geoExtent$$1(l).padByMeters(200); - function stripcolon(s) { - return s.replace(':', ''); - } + var cities = context.intersects(box) + .filter(isAddressable) + .map(function(d) { + return { + title: d.tags['addr:city'] || d.tags.name, + value: d.tags['addr:city'] || d.tags.name, + dist: geoSphericalDistance(d.extent(context.graph()).center(), l) + }; + }) + .sort(function(a, b) { + return a.dist - b.dist; + }); + return uniqBy(cities, 'value'); - var wrap = selection$$1.selectAll('.preset-input-wrap') - .data([0]); - wrap = wrap.enter() - .append('div') - .attr('class', 'cf preset-input-wrap') - .merge(wrap); + function isAddressable(d) { + if (d.tags.name && + (d.tags.admin_level === '8' || d.tags.border_type === 'city')) + return true; + if (d.tags.place && d.tags.name && ( + d.tags.place === 'city' || + d.tags.place === 'town' || + d.tags.place === 'village')) + return true; - var div = wrap.selectAll('ul') - .data([0]); + if (d.tags['addr:city']) return true; - div = div.enter() - .append('ul') - .merge(div); + return false; + } + } + function getNearValues(key) { + var extent = entity.extent(context.graph()), + l = extent.center(), + box = geoExtent$$1(l).padByMeters(200); + + var results = context.intersects(box) + .filter(function hasTag(d) { + return d.tags[key]; + }) + .map(function(d) { + return { + title: d.tags[key], + value: d.tags[key], + dist: geoSphericalDistance(d.extent(context.graph()).center(), l) + }; + }) + .sort(function(a, b) { + return a.dist - b.dist; + }); + + return uniqBy(results, 'value'); + } - items = div.selectAll('li') - .data(field.keys); - var enter = items.enter() - .append('li') - .attr('class', function(d) { return 'cf preset-cycleway-' + stripcolon(d); }); + function initCallback(err, countryCode) { + if (err) return; - enter - .append('span') - .attr('class', 'col6 label preset-label-cycleway') - .attr('for', function(d) { return 'preset-input-cycleway-' + stripcolon(d); }) - .text(function(d) { return field.t('types.' + d); }); + var addressFormat = find$1(dataAddressFormats, function (a) { + return a && a.countryCodes && includes(a.countryCodes, countryCode.toLowerCase()); + }) || dataAddressFormats[0]; - enter - .append('div') - .attr('class', 'col6 preset-input-cycleway-wrap') - .append('input') - .attr('type', 'text') - .attr('class', function(d) { return 'preset-input-cycleway preset-input-' + stripcolon(d); }) - .call(utilNoAuto) - .each(function(d) { - d3_select(this) - .call(d3combobox() - .container(context.container()) - .data(cycleway.options(d)) - ); - }); + var widths = addressFormat.widths || { + housenumber: 1/3, street: 2/3, + city: 2/3, state: 1/4, postcode: 1/3 + }; + function row(r) { + // Normalize widths. + var total = reduce(r, function(sum, field) { + return sum + (widths[field] || 0.5); + }, 0); + + return r.map(function (field) { + return { + id: field, + width: (widths[field] || 0.5) / total + }; + }); + } - // Update - wrap.selectAll('.preset-input-cycleway') - .on('change', change) - .on('blur', change); - } + wrap.selectAll('div.addr-row') + .data(addressFormat.format) + .enter() + .append('div') + .attr('class', 'addr-row') + .selectAll('input') + .data(row) + .enter() + .append('input') + .property('type', 'text') + .attr('placeholder', function (d) { + var localkey = d.id + '!' + countryCode.toLowerCase(), + tkey = field.strings.placeholders[localkey] ? localkey : d.id; + return field.t('placeholders.' + tkey); + }) + .attr('class', function (d) { return 'addr-' + d.id; }) + .call(utilNoAuto) + .style('width', function (d) { return d.width * 100 + '%'; }); + + // Update + + // setup dropdowns for common address tags + var dropdowns = addressFormat.dropdowns || [ + 'city', 'county', 'country', 'district', 'hamlet', + 'neighbourhood', 'place', 'postcode', 'province', + 'quarter', 'state', 'street', 'subdistrict', 'suburb' + ]; + // If fields exist for any of these tags, create dropdowns to pick nearby values.. + dropdowns.forEach(function(tag) { + var nearValues = (tag === 'street') ? getNearStreets + : (tag === 'city') ? getNearCities + : getNearValues; + + wrap.selectAll('input.addr-' + tag) + .call(d3combobox() + .container(context.container()) + .minItems(1) + .fetcher(function(value, callback) { + callback(nearValues('addr:' + tag)); + }) + ); + }); - function change() { - var left = utilGetSetValue(d3_select('.preset-input-cyclewayleft')), - right = utilGetSetValue(d3_select('.preset-input-cyclewayright')), - tag = {}; + wrap.selectAll('input') + .on('blur', change()) + .on('change', change()); - if (left === 'none' || left === '') { left = undefined; } - if (right === 'none' || right === '') { right = undefined; } + wrap.selectAll('input:not(.combobox-input)') + .on('input', change(true)); - // Always set both left and right as changing one can affect the other - tag = { - cycleway: undefined, - 'cycleway:left': left, - 'cycleway:right': right - }; + dispatch$$1.call('init'); + isInitialized = true; + } - // If the left and right tags match, use the cycleway tag to tag both - // sides the same way - if (left === right) { - tag = { - cycleway: left, - 'cycleway:left': undefined, - 'cycleway:right': undefined - }; - } - dispatch$$1.call('change', this, tag); - } + function address(selection$$1) { + isInitialized = false; + wrap = selection$$1.selectAll('.preset-input-wrap') + .data([0]); - cycleway.options = function() { - return keys$1(field.strings.options).map(function(option) { - return { - title: field.t('options.' + option + '.description'), - value: option - }; - }); - }; + wrap = wrap.enter() + .append('div') + .attr('class', 'preset-input-wrap') + .merge(wrap); + if (nominatim && entity) { + var center = entity.extent(context.graph()).center(); + nominatim.countryCode(center, initCallback); + } + } - cycleway.tags = function(tags) { - utilGetSetValue(items.selectAll('.preset-input-cycleway'), function(d) { - // If cycleway is set, always return that - if (tags.cycleway) { - return tags.cycleway; - } - return tags[d] || ''; - }) - .attr('placeholder', field.placeholder()); - }; + function change(onInput) { + return function() { + var tags = {}; - cycleway.focus = function() { - items.selectAll('.preset-input-cycleway') - .node().focus(); - }; + wrap.selectAll('input') + .each(function (field) { + tags['addr:' + field.id] = this.value || undefined; + }); + dispatch$$1.call('change', this, tags, onInput); + }; + } - return utilRebind(cycleway, dispatch$$1, 'on'); -} -function uiFieldLanes(field, context) { - var dispatch$$1 = dispatch('change'), - LANE_WIDTH = 40, - LANE_HEIGHT = 200, - wayID, - lanesData; + function updateTags(tags) { + utilGetSetValue(wrap.selectAll('input'), function (field) { + return tags['addr:' + field.id] || ''; + }); + } - function lanes(selection$$1) { - lanesData = context.entity(wayID).lanes(); - if (!d3_select('.inspector-wrap.inspector-hidden').empty() || !selection$$1.node().parentNode) { - selection$$1.call(lanes.off); - return; - } + address.entity = function(_) { + if (!arguments.length) return entity; + entity = _; + return address; + }; - var wrap = selection$$1.selectAll('.preset-input-wrap') - .data([0]); - wrap = wrap.enter() - .append('div') - .attr('class', 'preset-input-wrap') - .merge(wrap); + address.tags = function(tags) { + if (isInitialized) { + updateTags(tags); + } else { + dispatch$$1.on('init', function () { + dispatch$$1.on('init', null); + updateTags(tags); + }); + } + }; - var surface = wrap.selectAll('.surface') - .data([0]); - var d = utilGetDimensions(wrap); - var freeSpace = d[0] - lanesData.lanes.length * LANE_WIDTH * 1.5 + LANE_WIDTH * 0.5; + address.focus = function() { + var node = wrap.selectAll('input').node(); + if (node) node.focus(); + }; - surface = surface.enter() - .append('svg') - .attr('width', d[0]) - .attr('height', 300) - .attr('class', 'surface') - .merge(surface); + return utilRebind(address, dispatch$$1, 'on'); + } - var lanesSelection = surface.selectAll('.lanes') - .data([0]); + function uiFieldCycleway(field, context) { + var dispatch$$1 = dispatch('change'), + items = select(null); - lanesSelection = lanesSelection.enter() - .append('g') - .attr('class', 'lanes') - .merge(lanesSelection); - lanesSelection - .attr('transform', function () { - return 'translate(' + (freeSpace / 2) + ', 0)'; - }); + function cycleway(selection$$1) { + function stripcolon(s) { + return s.replace(':', ''); + } - var lane = lanesSelection.selectAll('.lane') - .data(lanesData.lanes); - - lane.exit() - .remove(); - - var enter = lane.enter() - .append('g') - .attr('class', 'lane'); - - enter - .append('g') - .append('rect') - .attr('y', 50) - .attr('width', LANE_WIDTH) - .attr('height', LANE_HEIGHT); - - enter - .append('g') - .attr('class', 'forward') - .append('text') - .attr('y', 40) - .attr('x', 14) - .text('▲'); - - enter - .append('g') - .attr('class', 'bothways') - .append('text') - .attr('y', 40) - .attr('x', 14) - .text('▲▼'); - - enter - .append('g') - .attr('class', 'backward') - .append('text') - .attr('y', 40) - .attr('x', 14) - .text('▼'); - - - lane = lane - .merge(enter); - - lane - .attr('transform', function(d) { - return 'translate(' + (LANE_WIDTH * d.index * 1.5) + ', 0)'; - }); - lane.select('.forward') - .style('visibility', function(d) { - return d.direction === 'forward' ? 'visible' : 'hidden'; - }); + var wrap = selection$$1.selectAll('.preset-input-wrap') + .data([0]); - lane.select('.bothways') - .style('visibility', function(d) { - return d.direction === 'bothways' ? 'visible' : 'hidden'; - }); + wrap = wrap.enter() + .append('div') + .attr('class', 'cf preset-input-wrap') + .merge(wrap); - lane.select('.backward') - .style('visibility', function(d) { - return d.direction === 'backward' ? 'visible' : 'hidden'; - }); - } + var div = wrap.selectAll('ul') + .data([0]); - lanes.entity = function(_) { - if (!wayID || wayID !== _.id) { - wayID = _.id; - } - }; + div = div.enter() + .append('ul') + .merge(div); - lanes.tags = function() {}; - lanes.focus = function() {}; - lanes.off = function() {}; - - return utilRebind(lanes, dispatch$$1, 'on'); -} - -function uiFieldLocalized(field, context) { - var dispatch$$1 = dispatch('change', 'input'), - wikipedia = services.wikipedia, - input = d3_select(null), - localizedInputs = d3_select(null), - wikiTitles, - entity; - - - function localized(selection$$1) { - input = selection$$1.selectAll('.localized-main') - .data([0]); - - input = input.enter() - .append('input') - .attr('type', 'text') - .attr('id', 'preset-input-' + field.id) - .attr('class', 'localized-main') - .attr('placeholder', field.placeholder()) - .call(utilNoAuto) - .merge(input); - - if (field.id === 'name') { - var preset = context.presets().match(entity, context.graph()); - input - .call(d3combobox() - .container(context.container()) - .fetcher(utilSuggestNames(preset, dataSuggestions)) - ); - } - input - .on('input', change(true)) - .on('blur', change()) - .on('change', change()); + items = div.selectAll('li') + .data(field.keys); + var enter = items.enter() + .append('li') + .attr('class', function(d) { return 'cf preset-cycleway-' + stripcolon(d); }); - var translateButton = selection$$1.selectAll('.localized-add') - .data([0]); + enter + .append('span') + .attr('class', 'col6 label preset-label-cycleway') + .attr('for', function(d) { return 'preset-input-cycleway-' + stripcolon(d); }) + .text(function(d) { return field.t('types.' + d); }); - translateButton = translateButton.enter() - .append('button') - .attr('class', 'button-input-action localized-add minor') - .attr('tabindex', -1) - .call(svgIcon('#icon-plus')) - .call(tooltip() - .title(t('translate.translate')) - .placement('left')) - .merge(translateButton); + enter + .append('div') + .attr('class', 'col6 preset-input-cycleway-wrap') + .append('input') + .attr('type', 'text') + .attr('class', function(d) { return 'preset-input-cycleway preset-input-' + stripcolon(d); }) + .call(utilNoAuto) + .each(function(d) { + select(this) + .call(d3combobox() + .container(context.container()) + .data(cycleway.options(d)) + ); + }); - translateButton - .on('click', addNew); + // Update + wrap.selectAll('.preset-input-cycleway') + .on('change', change) + .on('blur', change); + } - localizedInputs = selection$$1.selectAll('.localized-wrap') - .data([0]); - localizedInputs = localizedInputs.enter().append('div') - .attr('class', 'localized-wrap') - .merge(localizedInputs); - } + function change() { + var left = utilGetSetValue(select('.preset-input-cyclewayleft')), + right = utilGetSetValue(select('.preset-input-cyclewayright')), + tag = {}; + if (left === 'none' || left === '') { left = undefined; } + if (right === 'none' || right === '') { right = undefined; } - function addNew() { - event.preventDefault(); - var data$$1 = localizedInputs.selectAll('div.entry').data(); - var defaultLang = utilDetect().locale.toLowerCase().split('-')[0]; - var langExists = find$1(data$$1, function(datum) { return datum.lang === defaultLang;}); - var isLangEn = defaultLang.indexOf('en') > -1; - if (isLangEn || langExists) { - defaultLang = ''; - } - data$$1.push({ lang: defaultLang, value: '' }); - localizedInputs.call(render, data$$1); - } + // Always set both left and right as changing one can affect the other + tag = { + cycleway: undefined, + 'cycleway:left': left, + 'cycleway:right': right + }; + // If the left and right tags match, use the cycleway tag to tag both + // sides the same way + if (left === right) { + tag = { + cycleway: left, + 'cycleway:left': undefined, + 'cycleway:right': undefined + }; + } - function change(onInput) { - return function() { - var t$$1 = {}; - t$$1[field.key] = utilGetSetValue(d3_select(this)) || undefined; - dispatch$$1.call('change', this, t$$1, onInput); - }; - } + dispatch$$1.call('change', this, tag); + } - function key(lang) { - return field.key + ':' + lang; - } + cycleway.options = function() { + return keys$1(field.strings.options).map(function(option) { + return { + title: field.t('options.' + option + '.description'), + value: option + }; + }); + }; - function changeLang(d) { - var lang = utilGetSetValue(d3_select(this)), - t$$1 = {}, - language = find$1(wikipedia$2, function(d) { - return d[0].toLowerCase() === lang.toLowerCase() || - d[1].toLowerCase() === lang.toLowerCase(); - }); + cycleway.tags = function(tags) { + utilGetSetValue(items.selectAll('.preset-input-cycleway'), function(d) { + // If cycleway is set, always return that + if (tags.cycleway) { + return tags.cycleway; + } + return tags[d] || ''; + }) + .attr('placeholder', field.placeholder()); + }; - if (language) lang = language[2]; - if (d.lang && d.lang !== lang) { - t$$1[key(d.lang)] = undefined; - } + cycleway.focus = function() { + items.selectAll('.preset-input-cycleway') + .node().focus(); + }; - var value = utilGetSetValue(d3_select(this.parentNode) - .selectAll('.localized-value')); - if (lang && value) { - t$$1[key(lang)] = value; - } else if (lang && wikiTitles && wikiTitles[d.lang]) { - t$$1[key(lang)] = wikiTitles[d.lang]; - } + return utilRebind(cycleway, dispatch$$1, 'on'); + } - d.lang = lang; - dispatch$$1.call('change', this, t$$1); - } + function uiFieldLanes(field, context) { + var dispatch$$1 = dispatch('change'), + LANE_WIDTH = 40, + LANE_HEIGHT = 200, + wayID, + lanesData; + function lanes(selection$$1) { + lanesData = context.entity(wayID).lanes(); - function changeValue(d) { - if (!d.lang) return; - var t$$1 = {}; - t$$1[key(d.lang)] = utilGetSetValue(d3_select(this)) || undefined; - dispatch$$1.call('change', this, t$$1); - } + if (!select('.inspector-wrap.inspector-hidden').empty() || !selection$$1.node().parentNode) { + selection$$1.call(lanes.off); + return; + } + var wrap = selection$$1.selectAll('.preset-input-wrap') + .data([0]); + + wrap = wrap.enter() + .append('div') + .attr('class', 'preset-input-wrap') + .merge(wrap); + + var surface = wrap.selectAll('.surface') + .data([0]); + + var d = utilGetDimensions(wrap); + var freeSpace = d[0] - lanesData.lanes.length * LANE_WIDTH * 1.5 + LANE_WIDTH * 0.5; + + surface = surface.enter() + .append('svg') + .attr('width', d[0]) + .attr('height', 300) + .attr('class', 'surface') + .merge(surface); + + + var lanesSelection = surface.selectAll('.lanes') + .data([0]); + + lanesSelection = lanesSelection.enter() + .append('g') + .attr('class', 'lanes') + .merge(lanesSelection); + + lanesSelection + .attr('transform', function () { + return 'translate(' + (freeSpace / 2) + ', 0)'; + }); + + + var lane = lanesSelection.selectAll('.lane') + .data(lanesData.lanes); + + lane.exit() + .remove(); + + var enter = lane.enter() + .append('g') + .attr('class', 'lane'); + + enter + .append('g') + .append('rect') + .attr('y', 50) + .attr('width', LANE_WIDTH) + .attr('height', LANE_HEIGHT); + + enter + .append('g') + .attr('class', 'forward') + .append('text') + .attr('y', 40) + .attr('x', 14) + .text('▲'); + + enter + .append('g') + .attr('class', 'bothways') + .append('text') + .attr('y', 40) + .attr('x', 14) + .text('▲▼'); + + enter + .append('g') + .attr('class', 'backward') + .append('text') + .attr('y', 40) + .attr('x', 14) + .text('▼'); + + + lane = lane + .merge(enter); + + lane + .attr('transform', function(d) { + return 'translate(' + (LANE_WIDTH * d.index * 1.5) + ', 0)'; + }); + + lane.select('.forward') + .style('visibility', function(d) { + return d.direction === 'forward' ? 'visible' : 'hidden'; + }); + + lane.select('.bothways') + .style('visibility', function(d) { + return d.direction === 'bothways' ? 'visible' : 'hidden'; + }); + + lane.select('.backward') + .style('visibility', function(d) { + return d.direction === 'backward' ? 'visible' : 'hidden'; + }); + } - function fetcher(value, cb) { - var v = value.toLowerCase(); - cb(wikipedia$2.filter(function(d) { - return d[0].toLowerCase().indexOf(v) >= 0 || - d[1].toLowerCase().indexOf(v) >= 0 || - d[2].toLowerCase().indexOf(v) >= 0; - }).map(function(d) { - return { value: d[1] }; - })); - } + lanes.entity = function(_) { + if (!wayID || wayID !== _.id) { + wayID = _.id; + } + }; + lanes.tags = function() {}; + lanes.focus = function() {}; + lanes.off = function() {}; + + return utilRebind(lanes, dispatch$$1, 'on'); + } + + function uiFieldLocalized(field, context) { + var dispatch$$1 = dispatch('change', 'input'), + wikipedia = services.wikipedia, + input = select(null), + localizedInputs = select(null), + wikiTitles, + entity; + + + function localized(selection$$1) { + input = selection$$1.selectAll('.localized-main') + .data([0]); + + input = input.enter() + .append('input') + .attr('type', 'text') + .attr('id', 'preset-input-' + field.safeid) + .attr('class', 'localized-main') + .attr('placeholder', field.placeholder()) + .call(utilNoAuto) + .merge(input); + + if (field.id === 'name') { + var preset = context.presets().match(entity, context.graph()); + input + .call(d3combobox() + .container(context.container()) + .fetcher(utilSuggestNames(preset, dataSuggestions)) + ); + } - function render(selection$$1, data$$1) { - var wraps = selection$$1.selectAll('div.entry'). - data(data$$1, function(d) { return d.lang; }); + input + .on('input', change(true)) + .on('blur', change()) + .on('change', change()); - wraps.exit() - .transition() - .duration(200) - .style('max-height','0px') - .style('opacity', '0') - .style('top','-10px') - .remove(); - var innerWrap = wraps.enter() - .insert('div', ':first-child'); + var translateButton = selection$$1.selectAll('.localized-add') + .data([0]); - innerWrap.attr('class', 'entry') - .each(function() { - var wrap = d3_select(this); - var langcombo = d3combobox() - .container(context.container()) - .fetcher(fetcher) - .minItems(0); - - var label = wrap - .append('label') - .attr('class','form-label') - .text(t('translate.localized_translation_label')) - .attr('for','localized-lang'); - - label - .append('button') - .attr('class', 'minor remove') - .on('click', function(d){ - event.preventDefault(); - var t$$1 = {}; - t$$1[key(d.lang)] = undefined; - dispatch$$1.call('change', this, t$$1); - d3_select(this.parentNode.parentNode) - .style('top','0') - .style('max-height','240px') - .transition() - .style('opacity', '0') - .style('max-height','0px') - .remove(); - }) - .call(svgIcon('#operation-delete')); - - wrap - .append('input') - .attr('class', 'localized-lang') - .attr('type', 'text') - .attr('placeholder',t('translate.localized_translation_language')) - .on('blur', changeLang) - .on('change', changeLang) - .call(langcombo); - - wrap - .append('input') - .on('blur', changeValue) - .on('change', changeValue) - .attr('type', 'text') - .attr('placeholder', t('translate.localized_translation_name')) - .attr('class', 'localized-value'); - }); + translateButton = translateButton.enter() + .append('button') + .attr('class', 'button-input-action localized-add minor') + .attr('tabindex', -1) + .call(svgIcon('#icon-plus')) + .call(tooltip() + .title(t('translate.translate')) + .placement('left')) + .merge(translateButton); - innerWrap - .style('margin-top', '0px') - .style('max-height', '0px') - .style('opacity', '0') - .transition() - .duration(200) - .style('margin-top', '10px') - .style('max-height', '240px') - .style('opacity', '1') - .on('end', function() { - d3_select(this) - .style('max-height', '') - .style('overflow', 'visible'); - }); + translateButton + .on('click', addNew); - var entry = selection$$1.selectAll('.entry'); + localizedInputs = selection$$1.selectAll('.localized-wrap') + .data([0]); - utilGetSetValue(entry.select('.localized-lang'), function(d) { - var lang = find$1(wikipedia$2, function(lang) { return lang[2] === d.lang; }); - return lang ? lang[1] : d.lang; - }); + localizedInputs = localizedInputs.enter().append('div') + .attr('class', 'localized-wrap') + .merge(localizedInputs); + } - utilGetSetValue(entry.select('.localized-value'), - function(d) { return d.value; }); - } + function addNew() { + event.preventDefault(); + var data$$1 = localizedInputs.selectAll('div.entry').data(); + var defaultLang = utilDetect().locale.toLowerCase().split('-')[0]; + var langExists = find$1(data$$1, function(datum) { return datum.lang === defaultLang;}); + var isLangEn = defaultLang.indexOf('en') > -1; + if (isLangEn || langExists) { + defaultLang = ''; + } + data$$1.push({ lang: defaultLang, value: '' }); + localizedInputs.call(render, data$$1); + } - localized.tags = function(tags) { - // Fetch translations from wikipedia - if (tags.wikipedia && !wikiTitles) { - wikiTitles = {}; - var wm = tags.wikipedia.match(/([^:]+):(.+)/); - if (wm && wm[0] && wm[1]) { - wikipedia.translations(wm[1], wm[2], function(d) { - wikiTitles = d; - }); - } - } - utilGetSetValue(input, tags[field.key] || ''); + function change(onInput) { + return function() { + var t$$1 = {}; + t$$1[field.key] = utilGetSetValue(select(this)) || undefined; + dispatch$$1.call('change', this, t$$1, onInput); + }; + } - var postfixed = [], k, m; - for (k in tags) { - m = k.match(/^(.*):([a-zA-Z_-]+)$/); - if (m && m[1] === field.key && m[2]) { - postfixed.push({ lang: m[2], value: tags[k] }); - } - } - localizedInputs.call(render, postfixed.reverse()); - }; + function key(lang) { + return field.key + ':' + lang; + } - localized.focus = function() { - input.node().focus(); - }; + function changeLang(d) { + var lang = utilGetSetValue(select(this)), + t$$1 = {}, + language = find$1(wikipedia$2, function(d) { + return d[0].toLowerCase() === lang.toLowerCase() || + d[1].toLowerCase() === lang.toLowerCase(); + }); + if (language) lang = language[2]; - localized.entity = function(_) { - if (!arguments.length) return entity; - entity = _; - return localized; - }; + if (d.lang && d.lang !== lang) { + t$$1[key(d.lang)] = undefined; + } - return utilRebind(localized, dispatch$$1, 'on'); -} + var value = utilGetSetValue(select(this.parentNode) + .selectAll('.localized-value')); -function uiFieldMaxspeed(field, context) { - var dispatch$$1 = dispatch('change'), - entity, - isImperial, - unitInput = d3_select(null), - input = d3_select(null), - combobox; + if (lang && value) { + t$$1[key(lang)] = value; + } else if (lang && wikiTitles && wikiTitles[d.lang]) { + t$$1[key(lang)] = wikiTitles[d.lang]; + } - var metricValues = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], - imperialValues = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80]; + d.lang = lang; + dispatch$$1.call('change', this, t$$1); + } - function maxspeed(selection$$1) { - combobox = d3combobox() - .container(context.container()); + function changeValue(d) { + if (!d.lang) return; + var t$$1 = {}; + t$$1[key(d.lang)] = utilGetSetValue(select(this)) || undefined; + dispatch$$1.call('change', this, t$$1); + } - var unitCombobox = d3combobox() - .container(context.container()) - .data(['km/h', 'mph'].map(comboValues)); - input = selection$$1.selectAll('#preset-input-' + field.id) - .data([0]); + function fetcher(value, cb) { + var v = value.toLowerCase(); - input = input.enter() - .append('input') - .attr('type', 'text') - .attr('id', 'preset-input-' + field.id) - .attr('placeholder', field.placeholder()) - .call(utilNoAuto) - .call(combobox) - .merge(input); + cb(wikipedia$2.filter(function(d) { + return d[0].toLowerCase().indexOf(v) >= 0 || + d[1].toLowerCase().indexOf(v) >= 0 || + d[2].toLowerCase().indexOf(v) >= 0; + }).map(function(d) { + return { value: d[1] }; + })); + } - input - .on('change', change) - .on('blur', change); - var childNodes = context.graph().childNodes(context.entity(entity.id)), - loc = childNodes[~~(childNodes.length/2)].loc; + function render(selection$$1, data$$1) { + var wraps = selection$$1.selectAll('div.entry'). + data(data$$1, function(d) { return d.lang; }); + + wraps.exit() + .transition() + .duration(200) + .style('max-height','0px') + .style('opacity', '0') + .style('top','-10px') + .remove(); + + var innerWrap = wraps.enter() + .insert('div', ':first-child'); + + innerWrap.attr('class', 'entry') + .each(function() { + var wrap = select(this); + var langcombo = d3combobox() + .container(context.container()) + .fetcher(fetcher) + .minItems(0); + + var label = wrap + .append('label') + .attr('class','form-label') + .text(t('translate.localized_translation_label')) + .attr('for','localized-lang'); + + label + .append('button') + .attr('class', 'minor remove') + .on('click', function(d){ + event.preventDefault(); + var t$$1 = {}; + t$$1[key(d.lang)] = undefined; + dispatch$$1.call('change', this, t$$1); + select(this.parentNode.parentNode) + .style('top','0') + .style('max-height','240px') + .transition() + .style('opacity', '0') + .style('max-height','0px') + .remove(); + }) + .call(svgIcon('#operation-delete')); + + wrap + .append('input') + .attr('class', 'localized-lang') + .attr('type', 'text') + .attr('placeholder',t('translate.localized_translation_language')) + .on('blur', changeLang) + .on('change', changeLang) + .call(langcombo); + + wrap + .append('input') + .on('blur', changeValue) + .on('change', changeValue) + .attr('type', 'text') + .attr('placeholder', t('translate.localized_translation_name')) + .attr('class', 'localized-value'); + }); + + innerWrap + .style('margin-top', '0px') + .style('max-height', '0px') + .style('opacity', '0') + .transition() + .duration(200) + .style('margin-top', '10px') + .style('max-height', '240px') + .style('opacity', '1') + .on('end', function() { + select(this) + .style('max-height', '') + .style('overflow', 'visible'); + }); + + + var entry = selection$$1.selectAll('.entry'); + + utilGetSetValue(entry.select('.localized-lang'), function(d) { + var lang = find$1(wikipedia$2, function(lang) { return lang[2] === d.lang; }); + return lang ? lang[1] : d.lang; + }); + + utilGetSetValue(entry.select('.localized-value'), + function(d) { return d.value; }); + } - isImperial = some(dataImperial.features, function(f) { - return some(f.geometry.coordinates, function(d) { - return geoPointInPolygon(loc, d); - }); - }); - unitInput = selection$$1.selectAll('input.maxspeed-unit') - .data([0]); + localized.tags = function(tags) { + // Fetch translations from wikipedia + if (tags.wikipedia && !wikiTitles) { + wikiTitles = {}; + var wm = tags.wikipedia.match(/([^:]+):(.+)/); + if (wm && wm[0] && wm[1]) { + wikipedia.translations(wm[1], wm[2], function(d) { + wikiTitles = d; + }); + } + } - unitInput = unitInput.enter() - .append('input') - .attr('type', 'text') - .attr('class', 'maxspeed-unit') - .call(unitCombobox) - .merge(unitInput); + utilGetSetValue(input, tags[field.key] || ''); - unitInput - .on('blur', changeUnits) - .on('change', changeUnits); + var postfixed = [], k, m; + for (k in tags) { + m = k.match(/^(.*):([a-zA-Z_-]+)$/); + if (m && m[1] === field.key && m[2]) { + postfixed.push({ lang: m[2], value: tags[k] }); + } + } + localizedInputs.call(render, postfixed.reverse()); + }; - function changeUnits() { - isImperial = utilGetSetValue(unitInput) === 'mph'; - utilGetSetValue(unitInput, isImperial ? 'mph' : 'km/h'); - setSuggestions(); - change(); - } - } + + localized.focus = function() { + input.node().focus(); + }; - function setSuggestions() { - combobox.data((isImperial ? imperialValues : metricValues).map(comboValues)); - utilGetSetValue(unitInput, isImperial ? 'mph' : 'km/h'); - } + localized.entity = function(_) { + if (!arguments.length) return entity; + entity = _; + return localized; + }; + return utilRebind(localized, dispatch$$1, 'on'); + } - function comboValues(d) { - return { - value: d.toString(), - title: d.toString() - }; - } + function uiFieldMaxspeed(field, context) { + var dispatch$$1 = dispatch('change'), + entity, + isImperial, + unitInput = select(null), + input = select(null), + combobox; + var metricValues = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], + imperialValues = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80]; - function change() { - var tag = {}, - value = utilGetSetValue(input); - if (!value) { - tag[field.key] = undefined; - } else if (isNaN(value) || !isImperial) { - tag[field.key] = value; - } else { - tag[field.key] = value + ' mph'; - } + function maxspeed(selection$$1) { + combobox = d3combobox() + .container(context.container()); - dispatch$$1.call('change', this, tag); - } + var unitCombobox = d3combobox() + .container(context.container()) + .data(['km/h', 'mph'].map(comboValues)); + input = selection$$1.selectAll('#preset-input-' + field.safeid) + .data([0]); - maxspeed.tags = function(tags) { - var value = tags[field.key]; + input = input.enter() + .append('input') + .attr('type', 'text') + .attr('id', 'preset-input-' + field.safeid) + .attr('placeholder', field.placeholder()) + .call(utilNoAuto) + .call(combobox) + .merge(input); - if (value && value.indexOf('mph') >= 0) { - value = parseInt(value, 10); - isImperial = true; - } else if (value) { - isImperial = false; - } + input + .on('change', change) + .on('blur', change); - setSuggestions(); - utilGetSetValue(input, value || ''); - }; + var childNodes = context.graph().childNodes(context.entity(entity.id)), + loc = childNodes[~~(childNodes.length/2)].loc; + isImperial = some(dataImperial.features, function(f) { + return some(f.geometry.coordinates, function(d) { + return geoPointInPolygon(loc, d); + }); + }); - maxspeed.focus = function() { - input.node().focus(); - }; + unitInput = selection$$1.selectAll('input.maxspeed-unit') + .data([0]); + unitInput = unitInput.enter() + .append('input') + .attr('type', 'text') + .attr('class', 'maxspeed-unit') + .call(unitCombobox) + .merge(unitInput); - maxspeed.entity = function(_) { - entity = _; - }; + unitInput + .on('blur', changeUnits) + .on('change', changeUnits); - return utilRebind(maxspeed, dispatch$$1, 'on'); -} - -/** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; -} - -/** Used for built-in method references. */ -var arrayProto$2 = Array.prototype; - -/** Built-in value references. */ -var splice$2 = arrayProto$2.splice; - -/** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ -function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; - - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice$2.call(seen, fromIndex, 1); - } - splice$2.call(array, fromIndex, 1); - } - } - return array; -} - -/** - * This method is like `_.pull` except that it accepts an array of values to remove. - * - * **Note:** Unlike `_.difference`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pullAll(array, ['a', 'c']); - * console.log(array); - * // => ['b', 'b'] - */ -function pullAll(array, values) { - return (array && array.length && values && values.length) - ? basePullAll(array, values) - : array; -} - -/** - * Removes all given values from `array` using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` - * to remove elements from an array by predicate. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...*} [values] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pull(array, 'a', 'c'); - * console.log(array); - * // => ['b', 'b'] - */ -var pull = baseRest(pullAll); - -function uiFieldRadio(field, context) { - var dispatch$$1 = dispatch('change'), - placeholder = d3_select(null), - wrap = d3_select(null), - labels = d3_select(null), - radios = d3_select(null), - radioData = clone(field.options || field.keys), - typeField, - layerField, - oldType = {}, - entity; - - - function selectedKey() { - var node = wrap.selectAll('.toggle-list label.active input'); - return !node.empty() && node.datum(); - } - - - function radio(selection$$1) { - selection$$1.classed('preset-radio', true); - - wrap = selection$$1.selectAll('.preset-input-wrap') - .data([0]); - - var enter = wrap.enter() - .append('div') - .attr('class', 'preset-input-wrap toggle-list'); - - enter - .append('span') - .attr('class', 'placeholder'); - - wrap = wrap - .merge(enter); - - - placeholder = wrap.selectAll('.placeholder'); - - labels = wrap.selectAll('label') - .data(radioData); - - enter = labels.enter() - .append('label'); - - enter - .append('input') - .attr('type', 'radio') - .attr('name', field.id) - .attr('value', function(d) { return field.t('options.' + d, { 'default': d }); }) - .attr('checked', false); - - enter - .append('span') - .text(function(d) { return field.t('options.' + d, { 'default': d }); }); - - labels = labels - .merge(enter); - - radios = labels.selectAll('input') - .on('change', changeRadio); - - } - - - function structureExtras(selection$$1, tags) { - var selected = selectedKey(), - type = context.presets().field(selected), - layer = context.presets().field('layer'), - showLayer = (selected === 'bridge' || selected === 'tunnel'); + function changeUnits() { + isImperial = utilGetSetValue(unitInput) === 'mph'; + utilGetSetValue(unitInput, isImperial ? 'mph' : 'km/h'); + setSuggestions(); + change(); + } + } - var extrasWrap = selection$$1.selectAll('.structure-extras-wrap') - .data(selected ? [0] : []); + function setSuggestions() { + combobox.data((isImperial ? imperialValues : metricValues).map(comboValues)); + utilGetSetValue(unitInput, isImperial ? 'mph' : 'km/h'); + } - extrasWrap.exit() - .remove(); - extrasWrap = extrasWrap.enter() - .append('div') - .attr('class', 'structure-extras-wrap') - .merge(extrasWrap); + function comboValues(d) { + return { + value: d.toString(), + title: d.toString() + }; + } - var list = extrasWrap.selectAll('ul') - .data([0]); - list = list.enter() - .append('ul') - .merge(list); + function change() { + var tag = {}, + value = utilGetSetValue(input); + if (!value) { + tag[field.key] = undefined; + } else if (isNaN(value) || !isImperial) { + tag[field.key] = value; + } else { + tag[field.key] = value + ' mph'; + } - // Type - if (type) { - if (!typeField || typeField.id !== selected) { - typeField = uiField(context, type, entity, { wrap: false }) - .on('change', changeType); - } - typeField.tags(tags); - } else { - typeField = null; - } + dispatch$$1.call('change', this, tag); + } - var typeItem = list.selectAll('.structure-type-item') - .data(typeField ? [typeField] : [], function(d) { return d.id; }); - // Exit - typeItem.exit() - .remove(); + maxspeed.tags = function(tags) { + var value = tags[field.key]; - // Enter - var typeEnter = typeItem.enter() - .insert('li', ':first-child') - .attr('class', 'cf structure-type-item'); + if (value && value.indexOf('mph') >= 0) { + value = parseInt(value, 10); + isImperial = true; + } else if (value) { + isImperial = false; + } - typeEnter - .append('span') - .attr('class', 'col6 label structure-label-type') - .attr('for', 'preset-input-' + selected) - .text(t('inspector.radio.structure.type')); + setSuggestions(); + utilGetSetValue(input, value || ''); + }; - typeEnter - .append('div') - .attr('class', 'col6 structure-input-type-wrap'); - // Update - typeItem = typeItem - .merge(typeEnter); + maxspeed.focus = function() { + input.node().focus(); + }; - if (typeField) { - typeItem.selectAll('.structure-input-type-wrap') - .call(typeField.render); - } + maxspeed.entity = function(_) { + entity = _; + }; - // Layer - if (layer && showLayer) { - if (!layerField) { - layerField = uiField(context, layer, entity, { wrap: false }) - .on('change', changeLayer); - } - layerField.tags(tags); - field.keys = union(field.keys, ['layer']); - } else { - layerField = null; - pull(field.keys, 'layer'); - } - var layerItem = list.selectAll('.structure-layer-item') - .data(layerField ? [layerField] : []); + return utilRebind(maxspeed, dispatch$$1, 'on'); + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; - // Exit - layerItem.exit() - .remove(); + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } - // Enter - var layerEnter = layerItem.enter() - .append('li') - .attr('class', 'cf structure-layer-item'); + /** Used for built-in method references. */ + var arrayProto$2 = Array.prototype; - layerEnter - .append('span') - .attr('class', 'col6 label structure-label-layer') - .attr('for', 'preset-input-layer') - .text(t('inspector.radio.structure.layer')); + /** Built-in value references. */ + var splice$2 = arrayProto$2.splice; - layerEnter - .append('div') - .attr('class', 'col6 structure-input-layer-wrap'); + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; - // Update - layerItem = layerItem - .merge(layerEnter); + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; - if (layerField) { - layerItem.selectAll('.structure-input-layer-wrap') - .call(layerField.render); + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice$2.call(seen, fromIndex, 1); } + splice$2.call(array, fromIndex, 1); + } } + return array; + } + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } - function changeType(t$$1, onInput) { - var key = selectedKey(); - if (!key) return; + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + function uiFieldRadio(field, context) { + var dispatch$$1 = dispatch('change'), + placeholder = select(null), + wrap = select(null), + labels = select(null), + radios = select(null), + radioData = clone(field.options || field.keys), + typeField, + layerField, + oldType = {}, + entity; + + + function selectedKey() { + var node = wrap.selectAll('.toggle-list label.active input'); + return !node.empty() && node.datum(); + } - var val = t$$1[key]; - if (val !== 'no') { - oldType[key] = val; - } - if (field.type === 'structureRadio') { - // remove layer if it should not be set - if (val === 'no' || - (key !== 'bridge' && key !== 'tunnel') || - (key === 'tunnel' && val === 'building_passage')) { - t$$1.layer = undefined; - } - // add layer if it should be set - if (t$$1.layer === undefined) { - if (key === 'bridge' && val !== 'no') { - t$$1.layer = '1'; - } - if (key === 'tunnel' && val !== 'no' && val !== 'building_passage') { - t$$1.layer = '-1'; - } - } - } + function radio(selection$$1) { + selection$$1.classed('preset-radio', true); - dispatch$$1.call('change', this, t$$1, onInput); - } + wrap = selection$$1.selectAll('.preset-input-wrap') + .data([0]); + var enter = wrap.enter() + .append('div') + .attr('class', 'preset-input-wrap toggle-list'); - function changeLayer(t$$1, onInput) { - if (t$$1.layer === '0') { - t$$1.layer = undefined; - } - dispatch$$1.call('change', this, t$$1, onInput); - } + enter + .append('span') + .attr('class', 'placeholder'); + wrap = wrap + .merge(enter); - function changeRadio() { - var t$$1 = {}, - activeKey; - if (field.key) { - t$$1[field.key] = undefined; - } + placeholder = wrap.selectAll('.placeholder'); - radios.each(function(d) { - var active = d3_select(this).property('checked'); - if (active) activeKey = d; + labels = wrap.selectAll('label') + .data(radioData); - if (field.key) { - if (active) t$$1[field.key] = d; - } else { - var val = oldType[activeKey] || 'yes'; - t$$1[d] = active ? val : undefined; - } - }); + enter = labels.enter() + .append('label'); - if (field.type === 'structureRadio') { - if (activeKey === 'bridge') { - t$$1.layer = '1'; - } else if (activeKey === 'tunnel' && t$$1.tunnel !== 'building_passage') { - t$$1.layer = '-1'; - } else { - t$$1.layer = undefined; - } - } + enter + .append('input') + .attr('type', 'radio') + .attr('name', field.id) + .attr('value', function(d) { return field.t('options.' + d, { 'default': d }); }) + .attr('checked', false); - dispatch$$1.call('change', this, t$$1); - } + enter + .append('span') + .text(function(d) { return field.t('options.' + d, { 'default': d }); }); + labels = labels + .merge(enter); - radio.tags = function(tags) { - function checked(d) { - if (field.key) { - return tags[field.key] === d; - } else { - return !!(tags[d] && tags[d].toLowerCase() !== 'no'); - } - } + radios = labels.selectAll('input') + .on('change', changeRadio); - labels.classed('active', checked); - radios.property('checked', checked); + } - var selection$$1 = radios.filter(function() { return this.checked; }); - if (selection$$1.empty()) { - placeholder.text(t('inspector.none')); - } else { - placeholder.text(selection$$1.attr('value')); - oldType[selection$$1.datum()] = tags[selection$$1.datum()]; - } + function structureExtras(selection$$1, tags) { + var selected = selectedKey(), + type = context.presets().field(selected), + layer = context.presets().field('layer'), + showLayer = (selected === 'bridge' || selected === 'tunnel'); - if (field.type === 'structureRadio') { - // For waterways without a tunnel tag, set 'culvert' as - // the oldType to default to if the user picks 'tunnel' - if (!!tags.waterway && !oldType.tunnel) { - oldType.tunnel = 'culvert'; - } - wrap.call(structureExtras, tags); - } - }; + var extrasWrap = selection$$1.selectAll('.structure-extras-wrap') + .data(selected ? [0] : []); + extrasWrap.exit() + .remove(); - radio.focus = function() { - radios.node().focus(); - }; + extrasWrap = extrasWrap.enter() + .append('div') + .attr('class', 'structure-extras-wrap') + .merge(extrasWrap); + var list = extrasWrap.selectAll('ul') + .data([0]); - radio.entity = function(_) { - if (!arguments.length) return entity; - entity = _; - oldType = {}; - return radio; - }; + list = list.enter() + .append('ul') + .merge(list); - return utilRebind(radio, dispatch$$1, 'on'); -} + // Type + if (type) { + if (!typeField || typeField.id !== selected) { + typeField = uiField(context, type, entity, { wrap: false }) + .on('change', changeType); + } + typeField.tags(tags); + } else { + typeField = null; + } -function uiFieldRestrictions(field, context) { - var dispatch$$1 = dispatch('change'); - var breathe = behaviorBreathe(context); - var storedViaWay = context.storage('turn-restriction-via-way'); - var storedDistance = context.storage('turn-restriction-distance'); + var typeItem = list.selectAll('.structure-type-item') + .data(typeField ? [typeField] : [], function(d) { return d.id; }); - var _maxViaWay = storedViaWay !== null ? (+storedViaWay) : 1; - var _maxDistance = storedDistance ? (+storedDistance) : 30; - var _initialized = false; - var _parent = d3_select(null); // the entire field - var _container = d3_select(null); // just the map - var _oldTurns; - var _graph; - var _vertexID; - var _intersection; - var _fromWayID; + // Exit + typeItem.exit() + .remove(); + // Enter + var typeEnter = typeItem.enter() + .insert('li', ':first-child') + .attr('class', 'cf structure-type-item'); - function restrictions(selection$$1) { - _parent = selection$$1; + typeEnter + .append('span') + .attr('class', 'col6 label structure-label-type') + .attr('for', 'preset-input-' + selected) + .text(t('inspector.radio.structure.type')); - // try to reuse the intersection, but always rebuild it if the graph has changed - if (_vertexID && (context.graph() !== _graph || !_intersection)) { - _graph = context.graph(); - _intersection = osmIntersection(_graph, _vertexID, _maxDistance); - } + typeEnter + .append('div') + .attr('class', 'col6 structure-input-type-wrap'); - // It's possible for there to be no actual intersection here. - // for example, a vertex of two `highway=path` - // In this case, hide the field. - var isOK = (_intersection && _intersection.vertices.length && _intersection.ways.length); - d3_select(selection$$1.node().parentNode).classed('hide', !isOK); - - // if form field is hidden or has detached from dom, clean up. - if (!isOK || - !d3_select('.inspector-wrap.inspector-hidden').empty() || - !selection$$1.node().parentNode || - !selection$$1.node().parentNode.parentNode) { - selection$$1.call(restrictions.off); - return; - } + // Update + typeItem = typeItem + .merge(typeEnter); + if (typeField) { + typeItem.selectAll('.structure-input-type-wrap') + .call(typeField.render); + } - var wrap = selection$$1.selectAll('.preset-input-wrap') - .data([0]); - - wrap = wrap.enter() - .append('div') - .attr('class', 'preset-input-wrap') - .merge(wrap); - - var container = wrap.selectAll('.restriction-container') - .data([0]); - - // enter - var containerEnter = container.enter() - .append('div') - .attr('class', 'restriction-container'); - - containerEnter - .append('div') - .attr('class', 'restriction-help'); - - // update - _container = containerEnter - .merge(container) - .call(renderViewer); - - var controls = wrap.selectAll('.restriction-controls') - .data([0]); - - // enter/update - controls.enter() - .append('div') - .attr('class', 'restriction-controls-container') - .append('div') - .attr('class', 'restriction-controls') - .merge(controls) - .call(renderControls); - } - - - function renderControls(selection$$1) { - var distControl = selection$$1.selectAll('.restriction-distance') - .data([0]); - - distControl.exit() - .remove(); - - var distControlEnter = distControl.enter() - .append('div') - .attr('class', 'restriction-control restriction-distance'); - - distControlEnter - .append('span') - .attr('class', 'restriction-control-label restriction-distance-label') - .text(t('restriction.controls.distance') + ':'); - - distControlEnter - .append('input') - .attr('class', 'restriction-distance-input') - .attr('type', 'range') - .attr('min', '20') - .attr('max', '50') - .attr('step', '5'); - - distControlEnter - .append('span') - .attr('class', 'restriction-distance-text'); - - // update - selection$$1.selectAll('.restriction-distance-input') - .property('value', _maxDistance) - .on('input', function() { - var val = d3_select(this).property('value'); - _maxDistance = +val; - _intersection = null; - _container.selectAll('.layer-osm .layer-turns *').remove(); - context.storage('turn-restriction-distance', _maxDistance); - _parent.call(restrictions); - }); - selection$$1.selectAll('.restriction-distance-text') - .text(displayMaxDistance(_maxDistance)); - - - var viaControl = selection$$1.selectAll('.restriction-via-way') - .data([0]); - - viaControl.exit() - .remove(); - - var viaControlEnter = viaControl.enter() - .append('div') - .attr('class', 'restriction-control restriction-via-way'); - - viaControlEnter - .append('span') - .attr('class', 'restriction-control-label restriction-via-way-label') - .text(t('restriction.controls.via') + ':'); - - viaControlEnter - .append('input') - .attr('class', 'restriction-via-way-input') - .attr('type', 'range') - .attr('min', '0') - .attr('max', '2') - .attr('step', '1'); - - viaControlEnter - .append('span') - .attr('class', 'restriction-via-way-text'); - - // update - selection$$1.selectAll('.restriction-via-way-input') - .property('value', _maxViaWay) - .on('input', function() { - var val = d3_select(this).property('value'); - _maxViaWay = +val; - _container.selectAll('.layer-osm .layer-turns *').remove(); - context.storage('turn-restriction-via-way', _maxViaWay); - _parent.call(restrictions); - }); + // Layer + if (layer && showLayer) { + if (!layerField) { + layerField = uiField(context, layer, entity, { wrap: false }) + .on('change', changeLayer); + } + layerField.tags(tags); + field.keys = union(field.keys, ['layer']); + } else { + layerField = null; + pull(field.keys, 'layer'); + } - selection$$1.selectAll('.restriction-via-way-text') - .text(displayMaxVia(_maxViaWay)); - } + var layerItem = list.selectAll('.structure-layer-item') + .data(layerField ? [layerField] : []); + // Exit + layerItem.exit() + .remove(); - function renderViewer(selection$$1) { - if (!_intersection) return; + // Enter + var layerEnter = layerItem.enter() + .append('li') + .attr('class', 'cf structure-layer-item'); - var vgraph = _intersection.graph; - var filter = utilFunctor(true); - var projection = geoRawMercator(); + layerEnter + .append('span') + .attr('class', 'col6 label structure-label-layer') + .attr('for', 'preset-input-layer') + .text(t('inspector.radio.structure.layer')); - var d = utilGetDimensions(selection$$1); - var c = geoVecScale(d, 0.5); - var z = 22; + layerEnter + .append('div') + .attr('class', 'col6 structure-input-layer-wrap'); - projection.scale(geoZoomToScale(z)); + // Update + layerItem = layerItem + .merge(layerEnter); - // Calculate extent of all key vertices - var extent = geoExtent$$1(); - for (var i = 0; i < _intersection.vertices.length; i++) { - extent._extend(_intersection.vertices[i].extent()); - } + if (layerField) { + layerItem.selectAll('.structure-input-layer-wrap') + .call(layerField.render); + } + } - // If this is a large intersection, adjust zoom to fit extent - if (_intersection.vertices.length > 1) { - var padding = 180; // in z22 pixels - var tl = projection([extent[0][0], extent[1][1]]); - var br = projection([extent[1][0], extent[0][1]]); - var hFactor = (br[0] - tl[0]) / (d[0] - padding); - var vFactor = (br[1] - tl[1]) / (d[1] - padding); - var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2; - var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2; - z = z - Math.max(hZoomDiff, vZoomDiff); - projection.scale(geoZoomToScale(z)); - } - var padTop = 35; // reserve top space for hint text - var extentCenter = projection(extent.center()); - extentCenter[1] = extentCenter[1] - padTop; + function changeType(t$$1, onInput) { + var key = selectedKey(); + if (!key) return; - projection - .translate(geoVecSubtract(c, extentCenter)) - .clipExtent([[0, 0], d]); + var val = t$$1[key]; + if (val !== 'no') { + oldType[key] = val; + } - var drawLayers = svgLayers(projection, context).only('osm').dimensions(d); - var drawVertices = svgVertices$$1(projection, context); - var drawLines = svgLines$$1(projection, context); - var drawTurns = svgTurns(projection, context); + if (field.type === 'structureRadio') { + // remove layer if it should not be set + if (val === 'no' || + (key !== 'bridge' && key !== 'tunnel') || + (key === 'tunnel' && val === 'building_passage')) { + t$$1.layer = undefined; + } + // add layer if it should be set + if (t$$1.layer === undefined) { + if (key === 'bridge' && val !== 'no') { + t$$1.layer = '1'; + } + if (key === 'tunnel' && val !== 'no' && val !== 'building_passage') { + t$$1.layer = '-1'; + } + } + } - var firstTime = selection$$1.selectAll('.surface').empty(); + dispatch$$1.call('change', this, t$$1, onInput); + } - selection$$1 - .call(drawLayers); - var surface = selection$$1.selectAll('.surface') - .classed('tr', true); + function changeLayer(t$$1, onInput) { + if (t$$1.layer === '0') { + t$$1.layer = undefined; + } + dispatch$$1.call('change', this, t$$1, onInput); + } - if (firstTime) { - _initialized = true; - surface - .call(breathe); + function changeRadio() { + var t$$1 = {}, + activeKey; - d3_select(window) - .on('resize.restrictions', function() { - utilSetDimensions(_container, null); - redraw(); - }); - } + if (field.key) { + t$$1[field.key] = undefined; + } + radios.each(function(d) { + var active = select(this).property('checked'); + if (active) activeKey = d; - // This can happen if we've lowered the detail while a FROM way - // is selected, and that way is no longer part of the intersection. - if (_fromWayID && !vgraph.hasEntity(_fromWayID)) { - _fromWayID = null; - _oldTurns = null; - } + if (field.key) { + if (active) t$$1[field.key] = d; + } else { + var val = oldType[activeKey] || 'yes'; + t$$1[d] = active ? val : undefined; + } + }); - surface - .call(utilSetDimensions, d) - .call(drawVertices, vgraph, _intersection.vertices, filter, extent, z) - .call(drawLines, vgraph, _intersection.ways, filter) - .call(drawTurns, vgraph, _intersection.turns(_fromWayID, _maxViaWay)); - - surface - .on('click.restrictions', click) - .on('mouseover.restrictions', mouseover); - - surface - .selectAll('.selected') - .classed('selected', false); - - surface - .selectAll('.related') - .classed('related', false); - - if (_fromWayID) { - var way = vgraph.entity(_fromWayID); - surface - .selectAll('.' + _fromWayID) - .classed('selected', true) - .classed('related', true); - } + if (field.type === 'structureRadio') { + if (activeKey === 'bridge') { + t$$1.layer = '1'; + } else if (activeKey === 'tunnel' && t$$1.tunnel !== 'building_passage') { + t$$1.layer = '-1'; + } else { + t$$1.layer = undefined; + } + } - updateHints(null); + dispatch$$1.call('change', this, t$$1); + } - function click() { - surface - .call(breathe.off) - .call(breathe); + radio.tags = function(tags) { + function checked(d) { + if (field.key) { + return tags[field.key] === d; + } else { + return !!(tags[d] && tags[d].toLowerCase() !== 'no'); + } + } - var datum = event.target.__data__; - var entity = datum && datum.properties && datum.properties.entity; - if (entity) { - datum = entity; - } + labels.classed('active', checked); + radios.property('checked', checked); - if (datum instanceof osmWay && (datum.__from || datum.__via)) { - _fromWayID = datum.id; - _oldTurns = null; - redraw(); - - } else if (datum instanceof osmTurn) { - var actions, extraActions, turns, i; - var restrictionType = osmInferRestriction(vgraph, datum, projection); - - if (datum.restrictionID && !datum.direct) { - return; - - } else if (datum.restrictionID && !datum.only) { // NO -> ONLY - var datumOnly = cloneDeep(datum); - datumOnly.only = true; - restrictionType = restrictionType.replace(/^no/, 'only'); - - // Adding an ONLY restriction should destroy all other direct restrictions from the FROM. - // We will remember them in _oldTurns, and restore them if the user clicks again. - turns = _intersection.turns(_fromWayID, 2); - extraActions = []; - _oldTurns = []; - for (i = 0; i < turns.length; i++) { - if (turns[i].direct) { - turns[i].restrictionType = osmInferRestriction(vgraph, turns[i], projection); - _oldTurns.push(turns[i]); - extraActions.push(actionUnrestrictTurn(turns[i])); - } - } - - actions = _intersection.actions.concat(extraActions, [ - actionRestrictTurn(datumOnly, restrictionType), - t('operations.restriction.annotation.create') - ]); - - } else if (datum.restrictionID) { // ONLY -> Allowed - // Restore whatever restrictions we might have destroyed by cycling thru the ONLY state. - // This relies on the assumption that the intersection was already split up when we - // performed the previous action (NO -> ONLY), so the IDs in _oldTurns shouldn't have changed. - turns = _oldTurns || []; - extraActions = []; - for (i = 0; i < turns.length; i++) { - if (turns[i].key !== datum.key) { - extraActions.push(actionRestrictTurn(turns[i], turns[i].restrictionType)); - } - } - _oldTurns = null; - - actions = _intersection.actions.concat(extraActions, [ - actionUnrestrictTurn(datum), - t('operations.restriction.annotation.delete') - ]); - - } else { // Allowed -> NO - actions = _intersection.actions.concat([ - actionRestrictTurn(datum, restrictionType), - t('operations.restriction.annotation.create') - ]); - } - - context.perform.apply(context, actions); - - // At this point the datum will be changed, but will have same key.. - // Refresh it and update the help.. - var s = surface.selectAll('.' + datum.key); - datum = s.empty() ? null : s.datum(); - updateHints(datum); + var selection$$1 = radios.filter(function() { return this.checked; }); - } else { - _fromWayID = null; - _oldTurns = null; - redraw(); - } - } + if (selection$$1.empty()) { + placeholder.text(t('inspector.none')); + } else { + placeholder.text(selection$$1.attr('value')); + oldType[selection$$1.datum()] = tags[selection$$1.datum()]; + } + if (field.type === 'structureRadio') { + // For waterways without a tunnel tag, set 'culvert' as + // the oldType to default to if the user picks 'tunnel' + if (!!tags.waterway && !oldType.tunnel) { + oldType.tunnel = 'culvert'; + } - function mouseover() { - var datum = event.target.__data__; - updateHints(datum); - } + wrap.call(structureExtras, tags); + } + }; - function redraw() { - if (context.hasEntity(_vertexID)) { - _container.call(renderViewer); - } - } + radio.focus = function() { + radios.node().focus(); + }; - function highlightPathsFrom(wayID) { - surface.selectAll('.related') - .classed('related', false) - .classed('allow', false) - .classed('restrict', false) - .classed('only', false); - - surface.selectAll('.' + wayID) - .classed('related', true); - - if (wayID) { - var turns = _intersection.turns(wayID, _maxViaWay); - for (var i = 0; i < turns.length; i++) { - var turn = turns[i]; - var ids = [turn.to.way]; - var klass = (turn.no ? 'restrict' : (turn.only ? 'only' : 'allow')); - - if (turn.only || turns.length === 1) { - if (turn.via.ways) { - ids = ids.concat(turn.via.ways); - } - } else if (turn.to.way === wayID) { - continue; - } - - surface.selectAll(utilEntitySelector(ids)) - .classed('related', true) - .classed('allow', (klass === 'allow')) - .classed('restrict', (klass === 'restrict')) - .classed('only', (klass === 'only')); - } - } - } + radio.entity = function(_) { + if (!arguments.length) return entity; + entity = _; + oldType = {}; + return radio; + }; - function updateHints(datum) { - var help = _container.selectAll('.restriction-help').html(''); + return utilRebind(radio, dispatch$$1, 'on'); + } - var placeholders = {}; - ['from', 'via', 'to'].forEach(function(k) { - placeholders[k] = '' + t('restriction.help.' + k) + ''; - }); + function uiFieldRestrictions(field, context) { + var dispatch$$1 = dispatch('change'); + var breathe = behaviorBreathe(context); + var storedViaWay = context.storage('turn-restriction-via-way'); + var storedDistance = context.storage('turn-restriction-distance'); - var entity = datum && datum.properties && datum.properties.entity; - if (entity) { - datum = entity; - } + var _maxViaWay = storedViaWay !== null ? (+storedViaWay) : 1; + var _maxDistance = storedDistance ? (+storedDistance) : 30; + var _initialized = false; + var _parent = select(null); // the entire field + var _container = select(null); // just the map + var _oldTurns; + var _graph; + var _vertexID; + var _intersection; + var _fromWayID; - if (_fromWayID) { - way = vgraph.entity(_fromWayID); - surface - .selectAll('.' + _fromWayID) - .classed('selected', true) - .classed('related', true); - } - // Hovering a way - if (datum instanceof osmWay && datum.__from) { - way = datum; - - highlightPathsFrom(_fromWayID ? null : way.id); - surface.selectAll('.' + way.id) - .classed('related', true); - - var clickSelect = (!_fromWayID || _fromWayID !== way.id); - help - .append('div') // "Click to select FROM {fromName}." / "FROM {fromName}" - .html(t('restriction.help.' + (clickSelect ? 'select_from_name' : 'from_name'), { - from: placeholders.from, - fromName: displayName(way.id, vgraph) - })); - - - // Hovering a turn arrow - } else if (datum instanceof osmTurn) { - var restrictionType = osmInferRestriction(vgraph, datum, projection); - var turnType = restrictionType.replace(/^(only|no)\_/, ''); - var indirect = (datum.direct === false ? t('restriction.help.indirect') : ''); - var klass, turnText, nextText; - - if (datum.no) { - klass = 'restrict'; - turnText = t('restriction.help.turn.no_' + turnType, { indirect: indirect }); - nextText = t('restriction.help.turn.only_' + turnType, { indirect: '' }); - } else if (datum.only) { - klass = 'only'; - turnText = t('restriction.help.turn.only_' + turnType, { indirect: indirect }); - nextText = t('restriction.help.turn.allowed_' + turnType, { indirect: '' }); - } else { - klass = 'allow'; - turnText = t('restriction.help.turn.allowed_' + turnType, { indirect: indirect }); - nextText = t('restriction.help.turn.no_' + turnType, { indirect: '' }); - } - - help - .append('div') // "NO Right Turn (indirect)" - .attr('class', 'qualifier ' + klass) - .text(turnText); - - help - .append('div') // "FROM {fromName} TO {toName}" - .html(t('restriction.help.from_name_to_name', { - from: placeholders.from, - fromName: displayName(datum.from.way, vgraph), - to: placeholders.to, - toName: displayName(datum.to.way, vgraph) - })); - - if (datum.via.ways && datum.via.ways.length) { - var names = []; - for (var i = 0; i < datum.via.ways.length; i++) { - var prev = names[names.length - 1]; - var curr = displayName(datum.via.ways[i], vgraph); - if (!prev || curr !== prev) // collapse identical names - names.push(curr); - } - - help - .append('div') // "VIA {viaNames}" - .html(t('restriction.help.via_names', { - via: placeholders.via, - viaNames: names.join(', ') - })); - } - - if (!indirect) { - help - .append('div') // Click for "No Right Turn" - .text(t('restriction.help.toggle', { turn: nextText.trim() })); - } - - highlightPathsFrom(null); - var alongIDs = datum.path.slice(); - surface.selectAll(utilEntitySelector(alongIDs)) - .classed('related', true) - .classed('allow', (klass === 'allow')) - .classed('restrict', (klass === 'restrict')) - .classed('only', (klass === 'only')); - - - // Hovering empty surface - } else { - highlightPathsFrom(null); - if (_fromWayID) { - help - .append('div') // "FROM {fromName}" - .html(t('restriction.help.from_name', { - from: placeholders.from, - fromName: displayName(_fromWayID, vgraph) - })); - - } else { - help - .append('div') // "Click to select a FROM segment." - .html(t('restriction.help.select_from', { - from: placeholders.from - })); - } - } - } - } + function restrictions(selection$$1) { + _parent = selection$$1; + // try to reuse the intersection, but always rebuild it if the graph has changed + if (_vertexID && (context.graph() !== _graph || !_intersection)) { + _graph = context.graph(); + _intersection = osmIntersection(_graph, _vertexID, _maxDistance); + } - function displayMaxDistance(maxDist) { - var isImperial = (utilDetect().locale.toLowerCase() === 'en-us'); - var opts; + // It's possible for there to be no actual intersection here. + // for example, a vertex of two `highway=path` + // In this case, hide the field. + var isOK = ( + _intersection && + _intersection.vertices.length && // has vertices + _intersection.vertices // has the vertex that the user selected + .filter(function(vertex) { return vertex.id === _vertexID; }).length && + _intersection.ways.length > 2 && // has more than 2 ways + _intersection.ways // has more than 1 TO way + .filter(function(way) { return way.__to; }).length > 1 + ); - if (isImperial) { - var distToFeet = { // imprecise conversion for prettier display - 20: 70, 25: 85, 30: 100, 35: 115, 40: 130, 45: 145, 50: 160 - }[maxDist]; - opts = { distance: t('units.feet', { quantity: distToFeet }) }; - } else { - opts = { distance: t('units.meters', { quantity: maxDist }) }; - } + // Also hide in the case where + select(selection$$1.node().parentNode).classed('hide', !isOK); - return t('restriction.controls.distance_up_to', opts); - } + // if form field is hidden or has detached from dom, clean up. + if (!isOK || + !select('.inspector-wrap.inspector-hidden').empty() || + !selection$$1.node().parentNode || + !selection$$1.node().parentNode.parentNode) { + selection$$1.call(restrictions.off); + return; + } - function displayMaxVia(maxVia) { - return maxVia === 0 ? t('restriction.controls.via_node_only') - : maxVia === 1 ? t('restriction.controls.via_up_to_one') - : t('restriction.controls.via_up_to_two'); - } + var wrap = selection$$1.selectAll('.preset-input-wrap') + .data([0]); + wrap = wrap.enter() + .append('div') + .attr('class', 'preset-input-wrap') + .merge(wrap); - function displayName(entityID, graph) { - var entity = graph.entity(entityID); - var name = utilDisplayName(entity) || ''; - var matched = context.presets().match(entity, graph); - var type = (matched && matched.name()) || utilDisplayType(entity.id); - return name || type; - } + var container = wrap.selectAll('.restriction-container') + .data([0]); + // enter + var containerEnter = container.enter() + .append('div') + .attr('class', 'restriction-container'); - restrictions.entity = function(_) { - _intersection = null; - _fromWayID = null; - _oldTurns = null; - _vertexID = _.id; - }; + containerEnter + .append('div') + .attr('class', 'restriction-help'); + // update + _container = containerEnter + .merge(container) + .call(renderViewer); - restrictions.tags = function() {}; - restrictions.focus = function() {}; + var controls = wrap.selectAll('.restriction-controls') + .data([0]); + // enter/update + controls.enter() + .append('div') + .attr('class', 'restriction-controls-container') + .append('div') + .attr('class', 'restriction-controls') + .merge(controls) + .call(renderControls); + } - restrictions.off = function(selection$$1) { - if (!_initialized) return; - selection$$1.selectAll('.surface') - .call(breathe.off) - .on('click.restrictions', null) - .on('mouseover.restrictions', null); + function renderControls(selection$$1) { + var distControl = selection$$1.selectAll('.restriction-distance') + .data([0]); + + distControl.exit() + .remove(); + + var distControlEnter = distControl.enter() + .append('div') + .attr('class', 'restriction-control restriction-distance'); + + distControlEnter + .append('span') + .attr('class', 'restriction-control-label restriction-distance-label') + .text(t('restriction.controls.distance') + ':'); + + distControlEnter + .append('input') + .attr('class', 'restriction-distance-input') + .attr('type', 'range') + .attr('min', '20') + .attr('max', '50') + .attr('step', '5'); + + distControlEnter + .append('span') + .attr('class', 'restriction-distance-text'); + + // update + selection$$1.selectAll('.restriction-distance-input') + .property('value', _maxDistance) + .on('input', function() { + var val = select(this).property('value'); + _maxDistance = +val; + _intersection = null; + _container.selectAll('.layer-osm .layer-turns *').remove(); + context.storage('turn-restriction-distance', _maxDistance); + _parent.call(restrictions); + }); + + selection$$1.selectAll('.restriction-distance-text') + .text(displayMaxDistance(_maxDistance)); + + + var viaControl = selection$$1.selectAll('.restriction-via-way') + .data([0]); + + viaControl.exit() + .remove(); + + var viaControlEnter = viaControl.enter() + .append('div') + .attr('class', 'restriction-control restriction-via-way'); + + viaControlEnter + .append('span') + .attr('class', 'restriction-control-label restriction-via-way-label') + .text(t('restriction.controls.via') + ':'); + + viaControlEnter + .append('input') + .attr('class', 'restriction-via-way-input') + .attr('type', 'range') + .attr('min', '0') + .attr('max', '2') + .attr('step', '1'); + + viaControlEnter + .append('span') + .attr('class', 'restriction-via-way-text'); + + // update + selection$$1.selectAll('.restriction-via-way-input') + .property('value', _maxViaWay) + .on('input', function() { + var val = select(this).property('value'); + _maxViaWay = +val; + _container.selectAll('.layer-osm .layer-turns *').remove(); + context.storage('turn-restriction-via-way', _maxViaWay); + _parent.call(restrictions); + }); + + selection$$1.selectAll('.restriction-via-way-text') + .text(displayMaxVia(_maxViaWay)); + } - d3_select(window) - .on('resize.restrictions', null); - }; + function renderViewer(selection$$1) { + if (!_intersection) return; - return utilRebind(restrictions, dispatch$$1, 'on'); -} + var vgraph = _intersection.graph; + var filter = utilFunctor(true); + var projection = geoRawMercator(); -function uiFieldTextarea(field) { - var dispatch$$1 = dispatch('change'), - input = d3_select(null); + var d = utilGetDimensions(selection$$1); + var c = geoVecScale(d, 0.5); + var z = 22; + projection.scale(geoZoomToScale(z)); - function textarea(selection$$1) { - input = selection$$1.selectAll('textarea') - .data([0]); + // Calculate extent of all key vertices + var extent = geoExtent$$1(); + for (var i = 0; i < _intersection.vertices.length; i++) { + extent._extend(_intersection.vertices[i].extent()); + } - input = input.enter() - .append('textarea') - .attr('id', 'preset-input-' + field.id) - .attr('placeholder', field.placeholder() || t('inspector.unknown')) - .attr('maxlength', 255) - .call(utilNoAuto) - .on('input', change(true)) - .on('blur', change()) - .on('change', change()) - .merge(input); - } + // If this is a large intersection, adjust zoom to fit extent + if (_intersection.vertices.length > 1) { + var padding = 180; // in z22 pixels + var tl = projection([extent[0][0], extent[1][1]]); + var br = projection([extent[1][0], extent[0][1]]); + var hFactor = (br[0] - tl[0]) / (d[0] - padding); + var vFactor = (br[1] - tl[1]) / (d[1] - padding); + var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2; + var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2; + z = z - Math.max(hZoomDiff, vZoomDiff); + projection.scale(geoZoomToScale(z)); + } + var padTop = 35; // reserve top space for hint text + var extentCenter = projection(extent.center()); + extentCenter[1] = extentCenter[1] - padTop; - function change(onInput) { - return function() { - var t$$1 = {}; - t$$1[field.key] = utilGetSetValue(input) || undefined; - dispatch$$1.call('change', this, t$$1, onInput); - }; - } + projection + .translate(geoVecSubtract(c, extentCenter)) + .clipExtent([[0, 0], d]); + var drawLayers = svgLayers(projection, context).only('osm').dimensions(d); + var drawVertices = svgVertices$$1(projection, context); + var drawLines = svgLines$$1(projection, context); + var drawTurns = svgTurns(projection, context); - textarea.tags = function(tags) { - utilGetSetValue(input, tags[field.key] || ''); - }; + var firstTime = selection$$1.selectAll('.surface').empty(); + selection$$1 + .call(drawLayers); - textarea.focus = function() { - input.node().focus(); - }; + var surface = selection$$1.selectAll('.surface') + .classed('tr', true); + if (firstTime) { + _initialized = true; - return utilRebind(textarea, dispatch$$1, 'on'); -} - -function uiFieldWikipedia(field, context) { - var dispatch$$1 = dispatch('change'), - wikipedia = services.wikipedia, - wikidata = services.wikidata, - link = d3_select(null), - lang = d3_select(null), - title = d3_select(null), - wikiURL = '', - entity; - - - function wiki(selection$$1) { - var langcombo = d3combobox() - .container(context.container()) - .fetcher(function(value, cb) { - var v = value.toLowerCase(); - - cb(wikipedia$2.filter(function(d) { - return d[0].toLowerCase().indexOf(v) >= 0 || - d[1].toLowerCase().indexOf(v) >= 0 || - d[2].toLowerCase().indexOf(v) >= 0; - }).map(function(d) { - return { value: d[1] }; - })); - }); + surface + .call(breathe); + + select(window) + .on('resize.restrictions', function() { + utilSetDimensions(_container, null); + redraw(); + }); + } - var titlecombo = d3combobox() - .container(context.container()) - .fetcher(function(value, cb) { - if (!value) { - value = context.entity(entity.id).tags.name || ''; - } - - var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions; - searchfn(language()[2], value, function(query, data$$1) { - cb(data$$1.map(function(d) { - return { value: d }; - })); - }); - }); + // This can happen if we've lowered the detail while a FROM way + // is selected, and that way is no longer part of the intersection. + if (_fromWayID && !vgraph.hasEntity(_fromWayID)) { + _fromWayID = null; + _oldTurns = null; + } - lang = selection$$1.selectAll('input.wiki-lang') - .data([0]); + surface + .call(utilSetDimensions, d) + .call(drawVertices, vgraph, _intersection.vertices, filter, extent, z) + .call(drawLines, vgraph, _intersection.ways, filter) + .call(drawTurns, vgraph, _intersection.turns(_fromWayID, _maxViaWay)); + + surface + .on('click.restrictions', click) + .on('mouseover.restrictions', mouseover); + + surface + .selectAll('.selected') + .classed('selected', false); + + surface + .selectAll('.related') + .classed('related', false); + + if (_fromWayID) { + var way = vgraph.entity(_fromWayID); + surface + .selectAll('.' + _fromWayID) + .classed('selected', true) + .classed('related', true); + } - lang = lang.enter() - .append('input') - .attr('type', 'text') - .attr('class', 'wiki-lang') - .attr('placeholder', t('translate.localized_translation_language')) - .call(utilNoAuto) - .merge(lang); + updateHints(null); + + + function click() { + surface + .call(breathe.off) + .call(breathe); + + var datum = event.target.__data__; + var entity = datum && datum.properties && datum.properties.entity; + if (entity) { + datum = entity; + } + + if (datum instanceof osmWay && (datum.__from || datum.__via)) { + _fromWayID = datum.id; + _oldTurns = null; + redraw(); + + } else if (datum instanceof osmTurn) { + var actions, extraActions, turns, i; + var restrictionType = osmInferRestriction(vgraph, datum, projection); + + if (datum.restrictionID && !datum.direct) { + return; + + } else if (datum.restrictionID && !datum.only) { // NO -> ONLY + var seen = {}; + var datumOnly = cloneDeep(datum); + datumOnly.only = true; + restrictionType = restrictionType.replace(/^no/, 'only'); + + // Adding an ONLY restriction should destroy all other direct restrictions from the FROM towards the VIA. + // We will remember them in _oldTurns, and restore them if the user clicks again. + turns = _intersection.turns(_fromWayID, 2); + extraActions = []; + _oldTurns = []; + for (i = 0; i < turns.length; i++) { + var turn = turns[i]; + if (seen[turn.restrictionID]) continue; // avoid deleting the turn twice (#4968, #4928) + + if (turn.direct && turn.path[1] === datum.path[1]) { + seen[turns[i].restrictionID] = true; + turn.restrictionType = osmInferRestriction(vgraph, turn, projection); + _oldTurns.push(turn); + extraActions.push(actionUnrestrictTurn(turn)); + } + } + + actions = _intersection.actions.concat(extraActions, [ + actionRestrictTurn(datumOnly, restrictionType), + t('operations.restriction.annotation.create') + ]); + + } else if (datum.restrictionID) { // ONLY -> Allowed + // Restore whatever restrictions we might have destroyed by cycling thru the ONLY state. + // This relies on the assumption that the intersection was already split up when we + // performed the previous action (NO -> ONLY), so the IDs in _oldTurns shouldn't have changed. + turns = _oldTurns || []; + extraActions = []; + for (i = 0; i < turns.length; i++) { + if (turns[i].key !== datum.key) { + extraActions.push(actionRestrictTurn(turns[i], turns[i].restrictionType)); + } + } + _oldTurns = null; + + actions = _intersection.actions.concat(extraActions, [ + actionUnrestrictTurn(datum), + t('operations.restriction.annotation.delete') + ]); + + } else { // Allowed -> NO + actions = _intersection.actions.concat([ + actionRestrictTurn(datum, restrictionType), + t('operations.restriction.annotation.create') + ]); + } + + context.perform.apply(context, actions); + + // At this point the datum will be changed, but will have same key.. + // Refresh it and update the help.. + var s = surface.selectAll('.' + datum.key); + datum = s.empty() ? null : s.datum(); + updateHints(datum); + + } else { + _fromWayID = null; + _oldTurns = null; + redraw(); + } + } - utilGetSetValue(lang, language()[1]); - lang - .call(langcombo) - .on('blur', changeLang) - .on('change', changeLang); + function mouseover() { + var datum = event.target.__data__; + updateHints(datum); + } - title = selection$$1.selectAll('input.wiki-title') - .data([0]); + function redraw() { + if (context.hasEntity(_vertexID)) { + _container.call(renderViewer); + } + } - title = title.enter() - .append('input') - .attr('type', 'text') - .attr('class', 'wiki-title') - .attr('id', 'preset-input-' + field.id) - .call(utilNoAuto) - .merge(title); - title - .call(titlecombo) - .on('blur', blur) - .on('change', change); + function highlightPathsFrom(wayID) { + surface.selectAll('.related') + .classed('related', false) + .classed('allow', false) + .classed('restrict', false) + .classed('only', false); + + surface.selectAll('.' + wayID) + .classed('related', true); + + if (wayID) { + var turns = _intersection.turns(wayID, _maxViaWay); + for (var i = 0; i < turns.length; i++) { + var turn = turns[i]; + var ids = [turn.to.way]; + var klass = (turn.no ? 'restrict' : (turn.only ? 'only' : 'allow')); + + if (turn.only || turns.length === 1) { + if (turn.via.ways) { + ids = ids.concat(turn.via.ways); + } + } else if (turn.to.way === wayID) { + continue; + } + + surface.selectAll(utilEntitySelector(ids)) + .classed('related', true) + .classed('allow', (klass === 'allow')) + .classed('restrict', (klass === 'restrict')) + .classed('only', (klass === 'only')); + } + } + } - link = selection$$1.selectAll('.wiki-link') - .data([0]); + function updateHints(datum) { + var help = _container.selectAll('.restriction-help').html(''); + + var placeholders = {}; + ['from', 'via', 'to'].forEach(function(k) { + placeholders[k] = '' + t('restriction.help.' + k) + ''; + }); + + var entity = datum && datum.properties && datum.properties.entity; + if (entity) { + datum = entity; + } + + if (_fromWayID) { + way = vgraph.entity(_fromWayID); + surface + .selectAll('.' + _fromWayID) + .classed('selected', true) + .classed('related', true); + } + + // Hovering a way + if (datum instanceof osmWay && datum.__from) { + way = datum; + + highlightPathsFrom(_fromWayID ? null : way.id); + surface.selectAll('.' + way.id) + .classed('related', true); + + var clickSelect = (!_fromWayID || _fromWayID !== way.id); + help + .append('div') // "Click to select FROM {fromName}." / "FROM {fromName}" + .html(t('restriction.help.' + (clickSelect ? 'select_from_name' : 'from_name'), { + from: placeholders.from, + fromName: displayName(way.id, vgraph) + })); + + + // Hovering a turn arrow + } else if (datum instanceof osmTurn) { + var restrictionType = osmInferRestriction(vgraph, datum, projection); + var turnType = restrictionType.replace(/^(only|no)\_/, ''); + var indirect = (datum.direct === false ? t('restriction.help.indirect') : ''); + var klass, turnText, nextText; + + if (datum.no) { + klass = 'restrict'; + turnText = t('restriction.help.turn.no_' + turnType, { indirect: indirect }); + nextText = t('restriction.help.turn.only_' + turnType, { indirect: '' }); + } else if (datum.only) { + klass = 'only'; + turnText = t('restriction.help.turn.only_' + turnType, { indirect: indirect }); + nextText = t('restriction.help.turn.allowed_' + turnType, { indirect: '' }); + } else { + klass = 'allow'; + turnText = t('restriction.help.turn.allowed_' + turnType, { indirect: indirect }); + nextText = t('restriction.help.turn.no_' + turnType, { indirect: '' }); + } + + help + .append('div') // "NO Right Turn (indirect)" + .attr('class', 'qualifier ' + klass) + .text(turnText); + + help + .append('div') // "FROM {fromName} TO {toName}" + .html(t('restriction.help.from_name_to_name', { + from: placeholders.from, + fromName: displayName(datum.from.way, vgraph), + to: placeholders.to, + toName: displayName(datum.to.way, vgraph) + })); + + if (datum.via.ways && datum.via.ways.length) { + var names = []; + for (var i = 0; i < datum.via.ways.length; i++) { + var prev = names[names.length - 1]; + var curr = displayName(datum.via.ways[i], vgraph); + if (!prev || curr !== prev) // collapse identical names + names.push(curr); + } + + help + .append('div') // "VIA {viaNames}" + .html(t('restriction.help.via_names', { + via: placeholders.via, + viaNames: names.join(', ') + })); + } + + if (!indirect) { + help + .append('div') // Click for "No Right Turn" + .text(t('restriction.help.toggle', { turn: nextText.trim() })); + } + + highlightPathsFrom(null); + var alongIDs = datum.path.slice(); + surface.selectAll(utilEntitySelector(alongIDs)) + .classed('related', true) + .classed('allow', (klass === 'allow')) + .classed('restrict', (klass === 'restrict')) + .classed('only', (klass === 'only')); + + + // Hovering empty surface + } else { + highlightPathsFrom(null); + if (_fromWayID) { + help + .append('div') // "FROM {fromName}" + .html(t('restriction.help.from_name', { + from: placeholders.from, + fromName: displayName(_fromWayID, vgraph) + })); + + } else { + help + .append('div') // "Click to select a FROM segment." + .html(t('restriction.help.select_from', { + from: placeholders.from + })); + } + } + } + } - link = link.enter() - .append('button') - .attr('class', 'button-input-action wiki-link minor') - .attr('tabindex', -1) - .call(svgIcon('#icon-out-link')) - .merge(link); - link - .on('click', function() { - event.preventDefault(); - if (wikiURL) window.open(wikiURL, '_blank'); - }); - } + function displayMaxDistance(maxDist) { + var isImperial = (utilDetect().locale.toLowerCase() === 'en-us'); + var opts; + if (isImperial) { + var distToFeet = { // imprecise conversion for prettier display + 20: 70, 25: 85, 30: 100, 35: 115, 40: 130, 45: 145, 50: 160 + }[maxDist]; + opts = { distance: t('units.feet', { quantity: distToFeet }) }; + } else { + opts = { distance: t('units.meters', { quantity: maxDist }) }; + } - function language() { - var value = utilGetSetValue(lang).toLowerCase(); - var locale = utilDetect().locale.toLowerCase(); - var localeLanguage; - return find$1(wikipedia$2, function(d) { - if (d[2] === locale) localeLanguage = d; - return d[0].toLowerCase() === value || - d[1].toLowerCase() === value || - d[2] === value; - }) || localeLanguage || ['English', 'English', 'en']; - } + return t('restriction.controls.distance_up_to', opts); + } - function changeLang() { - utilGetSetValue(lang, language()[1]); - change(true); - } + function displayMaxVia(maxVia) { + return maxVia === 0 ? t('restriction.controls.via_node_only') + : maxVia === 1 ? t('restriction.controls.via_up_to_one') + : t('restriction.controls.via_up_to_two'); + } - function blur() { - change(true); - } + function displayName(entityID, graph) { + var entity = graph.entity(entityID); + var name = utilDisplayName(entity) || ''; + var matched = context.presets().match(entity, graph); + var type = (matched && matched.name()) || utilDisplayType(entity.id); + return name || type; + } - function change(skipWikidata) { - var value = utilGetSetValue(title), - m = value.match(/https?:\/\/([-a-z]+)\.wikipedia\.org\/(?:wiki|\1-[-a-z]+)\/([^#]+)(?:#(.+))?/), - l = m && find$1(wikipedia$2, function(d) { return m[1] === d[2]; }), - syncTags = {}; + restrictions.entity = function(_) { + _intersection = null; + _fromWayID = null; + _oldTurns = null; + _vertexID = _.id; + }; - if (l) { - // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization - value = decodeURIComponent(m[2]).replace(/_/g, ' '); - if (m[3]) { - var anchor; - try { - // Best-effort `anchordecode:` implementation - anchor = decodeURIComponent(m[3].replace(/\.([0-9A-F]{2})/g, '%$1')); - } catch (e) { - anchor = decodeURIComponent(m[3]); - } - value += '#' + anchor.replace(/_/g, ' '); - } - value = value.slice(0, 1).toUpperCase() + value.slice(1); - utilGetSetValue(lang, l[1]); - utilGetSetValue(title, value); - } - if (value) { - syncTags.wikipedia = language()[2] + ':' + value; - } else { - syncTags.wikipedia = undefined; - syncTags.wikidata = undefined; - } + restrictions.tags = function() {}; + restrictions.focus = function() {}; - dispatch$$1.call('change', this, syncTags); + restrictions.off = function(selection$$1) { + if (!_initialized) return; - if (skipWikidata || !value || !language()[2]) return; + selection$$1.selectAll('.surface') + .call(breathe.off) + .on('click.restrictions', null) + .on('mouseover.restrictions', null); - // attempt asynchronous update of wikidata tag.. - var initGraph = context.graph(), - initEntityId = entity.id; + select(window) + .on('resize.restrictions', null); + }; - wikidata.itemsByTitle(language()[2], value, function(title, data$$1) { - // If graph has changed, we can't apply this update. - if (context.graph() !== initGraph) return; - if (!data$$1 || !Object.keys(data$$1).length) return; + return utilRebind(restrictions, dispatch$$1, 'on'); + } - var qids = Object.keys(data$$1); - var value = qids && find$1(qids, function(id) { return id.match(/^Q\d+$/); }); - var currTags = clone(context.entity(initEntityId).tags); + function uiFieldTextarea(field) { + var dispatch$$1 = dispatch('change'), + input = select(null); - currTags.wikidata = value; - // Coalesce the update of wikidata tag into the previous tag change - context.overwrite( - actionChangeTags(initEntityId, currTags), - context.history().undoAnnotation() - ); + function textarea(selection$$1) { + input = selection$$1.selectAll('textarea') + .data([0]); - // do not dispatch.call('change') here, because entity_editor - // changeTags() is not intended to be called asynchronously - }); - } + input = input.enter() + .append('textarea') + .attr('id', 'preset-input-' + field.safeid) + .attr('placeholder', field.placeholder() || t('inspector.unknown')) + .attr('maxlength', 255) + .call(utilNoAuto) + .on('input', change(true)) + .on('blur', change()) + .on('change', change()) + .merge(input); + } - wiki.tags = function(tags) { - var value = tags[field.key] || '', - m = value.match(/([^:]+):([^#]+)(?:#(.+))?/), - l = m && find$1(wikipedia$2, function(d) { return m[1] === d[2]; }), - anchor = m && m[3]; - - // value in correct format - if (l) { - utilGetSetValue(lang, l[1]); - utilGetSetValue(title, m[2] + (anchor ? ('#' + anchor) : '')); - if (anchor) { - try { - // Best-effort `anchorencode:` implementation - anchor = encodeURIComponent(anchor.replace(/ /g, '_')).replace(/%/g, '.'); - } catch (e) { - anchor = anchor.replace(/ /g, '_'); - } - } - wikiURL = 'https://' + m[1] + '.wikipedia.org/wiki/' + - m[2].replace(/ /g, '_') + (anchor ? ('#' + anchor) : ''); + function change(onInput) { + return function() { + var t$$1 = {}; + t$$1[field.key] = utilGetSetValue(input) || undefined; + dispatch$$1.call('change', this, t$$1, onInput); + }; + } - // unrecognized value format - } else { - utilGetSetValue(title, value); - if (value && value !== '') { - utilGetSetValue(lang, ''); - wikiURL = 'https://en.wikipedia.org/wiki/Special:Search?search=' + value; - } else { - wikiURL = ''; - } - } - }; + textarea.tags = function(tags) { + utilGetSetValue(input, tags[field.key] || ''); + }; - wiki.entity = function(_) { - if (!arguments.length) return entity; - entity = _; - return wiki; - }; + textarea.focus = function() { + input.node().focus(); + }; - wiki.focus = function() { - title.node().focus(); - }; + return utilRebind(textarea, dispatch$$1, 'on'); + } + + function uiFieldWikipedia(field, context) { + var dispatch$$1 = dispatch('change'), + wikipedia = services.wikipedia, + wikidata = services.wikidata, + link = select(null), + lang = select(null), + title = select(null), + wikiURL = '', + entity; + + + function wiki(selection$$1) { + var langcombo = d3combobox() + .container(context.container()) + .fetcher(function(value, cb) { + var v = value.toLowerCase(); + + cb(wikipedia$2.filter(function(d) { + return d[0].toLowerCase().indexOf(v) >= 0 || + d[1].toLowerCase().indexOf(v) >= 0 || + d[2].toLowerCase().indexOf(v) >= 0; + }).map(function(d) { + return { value: d[1] }; + })); + }); + + var titlecombo = d3combobox() + .container(context.container()) + .fetcher(function(value, cb) { + if (!value) { + value = context.entity(entity.id).tags.name || ''; + } + + var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions; + searchfn(language()[2], value, function(query, data$$1) { + cb(data$$1.map(function(d) { + return { value: d }; + })); + }); + }); + + + lang = selection$$1.selectAll('input.wiki-lang') + .data([0]); + + lang = lang.enter() + .append('input') + .attr('type', 'text') + .attr('class', 'wiki-lang') + .attr('placeholder', t('translate.localized_translation_language')) + .call(utilNoAuto) + .merge(lang); + + utilGetSetValue(lang, language()[1]); + + lang + .call(langcombo) + .on('blur', changeLang) + .on('change', changeLang); + + + title = selection$$1.selectAll('input.wiki-title') + .data([0]); + + title = title.enter() + .append('input') + .attr('type', 'text') + .attr('class', 'wiki-title') + .attr('id', 'preset-input-' + field.safeid) + .call(utilNoAuto) + .merge(title); + + title + .call(titlecombo) + .on('blur', blur) + .on('change', change); + + + link = selection$$1.selectAll('.wiki-link') + .data([0]); + + link = link.enter() + .append('button') + .attr('class', 'button-input-action wiki-link minor') + .attr('tabindex', -1) + .call(svgIcon('#icon-out-link')) + .merge(link); + + link + .on('click', function() { + event.preventDefault(); + if (wikiURL) window.open(wikiURL, '_blank'); + }); + } - return utilRebind(wiki, dispatch$$1, 'on'); -} - -var uiFields = { - access: uiFieldAccess, - address: uiFieldAddress, - check: uiFieldCheck, - combo: uiFieldCombo, - cycleway: uiFieldCycleway, - defaultCheck: uiFieldCheck, - email: uiFieldText, - lanes: uiFieldLanes, - localized: uiFieldLocalized, - maxspeed: uiFieldMaxspeed, - multiCombo: uiFieldCombo, - networkCombo: uiFieldCombo, - number: uiFieldText, - onewayCheck: uiFieldCheck, - radio: uiFieldRadio, - restrictions: uiFieldRestrictions, - semiCombo: uiFieldCombo, - structureRadio: uiFieldRadio, - tel: uiFieldText, - text: uiFieldText, - textarea: uiFieldTextarea, - typeCombo: uiFieldCombo, - url: uiFieldText, - wikipedia: uiFieldWikipedia -}; - -function uiField(context, presetField, entity, options) { - options = assignIn({ - show: true, - wrap: true, - remove: true, - revert: true, - info: true - }, options); - - var dispatch$$1 = dispatch('change'); - var field = clone(presetField); - var _show = options.show; - var _state = ''; - var _tags = {}; - - - field.impl = uiFields[field.type](field, context) - .on('change', function(t$$1, onInput) { - dispatch$$1.call('change', field, t$$1, onInput); - }); - if (entity && field.impl.entity) { - field.impl.entity(entity); - } + function language() { + var value = utilGetSetValue(lang).toLowerCase(); + var locale = utilDetect().locale.toLowerCase(); + var localeLanguage; + return find$1(wikipedia$2, function(d) { + if (d[2] === locale) localeLanguage = d; + return d[0].toLowerCase() === value || + d[1].toLowerCase() === value || + d[2] === value; + }) || localeLanguage || ['English', 'English', 'en']; + } - field.keys = field.keys || [field.key]; + function changeLang() { + utilGetSetValue(lang, language()[1]); + change(true); + } - function isModified() { - if (!entity) return false; - var original = context.graph().base().entities[entity.id]; - return some(field.keys, function(key) { - return original ? _tags[key] !== original.tags[key] : _tags[key]; - }); - } + function blur() { + change(true); + } - function isPresent() { - return some(field.keys, function(key) { - return _tags[key]; - }); - } + function change(skipWikidata) { + var value = utilGetSetValue(title), + m = value.match(/https?:\/\/([-a-z]+)\.wikipedia\.org\/(?:wiki|\1-[-a-z]+)\/([^#]+)(?:#(.+))?/), + l = m && find$1(wikipedia$2, function(d) { return m[1] === d[2]; }), + syncTags = {}; + + if (l) { + // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization + value = decodeURIComponent(m[2]).replace(/_/g, ' '); + if (m[3]) { + var anchor; + try { + // Best-effort `anchordecode:` implementation + anchor = decodeURIComponent(m[3].replace(/\.([0-9A-F]{2})/g, '%$1')); + } catch (e) { + anchor = decodeURIComponent(m[3]); + } + value += '#' + anchor.replace(/_/g, ' '); + } + value = value.slice(0, 1).toUpperCase() + value.slice(1); + utilGetSetValue(lang, l[1]); + utilGetSetValue(title, value); + } - function revert(d) { - event.stopPropagation(); - event.preventDefault(); - if (!entity) return false; + if (value) { + syncTags.wikipedia = language()[2] + ':' + value; + } else { + syncTags.wikipedia = undefined; + syncTags.wikidata = undefined; + } - var original = context.graph().base().entities[entity.id]; - var t$$1 = {}; - d.keys.forEach(function(key) { - t$$1[key] = original ? original.tags[key] : undefined; - }); + dispatch$$1.call('change', this, syncTags); - dispatch$$1.call('change', d, t$$1); - } + if (skipWikidata || !value || !language()[2]) return; - function remove(d) { - event.stopPropagation(); - event.preventDefault(); + // attempt asynchronous update of wikidata tag.. + var initGraph = context.graph(), + initEntityId = entity.id; - var t$$1 = {}; - d.keys.forEach(function(key) { - t$$1[key] = undefined; - }); + wikidata.itemsByTitle(language()[2], value, function(title, data$$1) { + // If graph has changed, we can't apply this update. + if (context.graph() !== initGraph) return; - dispatch$$1.call('change', d, t$$1); - } + if (!data$$1 || !Object.keys(data$$1).length) return; + var qids = Object.keys(data$$1); + var value = qids && find$1(qids, function(id) { return id.match(/^Q\d+$/); }); + var currTags = clone(context.entity(initEntityId).tags); - field.render = function(selection$$1) { - var container = selection$$1.selectAll('.form-field') - .data([field]); + currTags.wikidata = value; - // Enter - var enter = container.enter() - .append('div') - .attr('class', function(d) { return 'form-field form-field-' + d.id; }) - .classed('nowrap', !options.wrap); + // Coalesce the update of wikidata tag into the previous tag change + context.overwrite( + actionChangeTags(initEntityId, currTags), + context.history().undoAnnotation() + ); - if (options.wrap) { - var label = enter - .append('label') - .attr('class', 'form-label') - .attr('for', function(d) { return 'preset-input-' + d.id; }) - .text(function(d) { return d.label(); }); + // do not dispatch.call('change') here, because entity_editor + // changeTags() is not intended to be called asynchronously + }); + } - var wrap = label - .append('div') - .attr('class', 'form-label-button-wrap'); - if (options.remove) { - wrap - .append('button') - .attr('class', 'remove-icon') - .attr('tabindex', -1) - .call(svgIcon('#operation-delete')); - } + wiki.tags = function(tags) { + var value = tags[field.key] || '', + m = value.match(/([^:]+):([^#]+)(?:#(.+))?/), + l = m && find$1(wikipedia$2, function(d) { return m[1] === d[2]; }), + anchor = m && m[3]; + + // value in correct format + if (l) { + utilGetSetValue(lang, l[1]); + utilGetSetValue(title, m[2] + (anchor ? ('#' + anchor) : '')); + if (anchor) { + try { + // Best-effort `anchorencode:` implementation + anchor = encodeURIComponent(anchor.replace(/ /g, '_')).replace(/%/g, '.'); + } catch (e) { + anchor = anchor.replace(/ /g, '_'); + } + } + wikiURL = 'https://' + m[1] + '.wikipedia.org/wiki/' + + m[2].replace(/ /g, '_') + (anchor ? ('#' + anchor) : ''); + + // unrecognized value format + } else { + utilGetSetValue(title, value); + if (value && value !== '') { + utilGetSetValue(lang, ''); + wikiURL = 'https://en.wikipedia.org/wiki/Special:Search?search=' + value; + } else { + wikiURL = ''; + } + } + }; - if (options.revert) { - wrap - .append('button') - .attr('class', 'modified-icon') - .attr('tabindex', -1) - .call( - (textDirection === 'rtl') ? svgIcon('#icon-redo') : svgIcon('#icon-undo') - ); - } - } + wiki.entity = function(_) { + if (!arguments.length) return entity; + entity = _; + return wiki; + }; - // Update - container = container - .merge(enter); - - container.selectAll('.form-label-button-wrap .remove-icon') - .on('click', remove); - - container.selectAll('.form-label-button-wrap .modified-icon') - .on('click', revert); - - container - .classed('modified', isModified()) - .classed('present', isPresent()) - .each(function(d) { - var reference, help; - - // instantiate field help - if (options.wrap && field.type === 'restrictions') { - help = uiFieldHelp(context, 'restrictions'); - } - - // instantiate tag reference - if (options.wrap && options.info) { - var referenceKey = d.key; - if (d.type === 'multiCombo') { // lookup key without the trailing ':' - referenceKey = referenceKey.replace(/:$/, ''); - } - - reference = uiTagReference(d.reference || { key: referenceKey }, context); - if (_state === 'hover') { - reference.showing(false); - } - } - - d3_select(this) - .call(d.impl); - - // add field help components - if (help) { - d3_select(this) - .call(help.body) - .select('.form-label-button-wrap') - .call(help.button); - } - - // add tag reference components - if (reference) { - d3_select(this) - .call(reference.body) - .select('.form-label-button-wrap') - .call(reference.button); - } - - d.impl.tags(_tags); - }); - }; + wiki.focus = function() { + title.node().focus(); + }; - field.state = function(_) { - if (!arguments.length) return _state; - _state = _; - return field; - }; + return utilRebind(wiki, dispatch$$1, 'on'); + } + + var uiFields = { + access: uiFieldAccess, + address: uiFieldAddress, + check: uiFieldCheck, + combo: uiFieldCombo, + cycleway: uiFieldCycleway, + defaultCheck: uiFieldCheck, + email: uiFieldText, + lanes: uiFieldLanes, + localized: uiFieldLocalized, + maxspeed: uiFieldMaxspeed, + multiCombo: uiFieldCombo, + networkCombo: uiFieldCombo, + number: uiFieldText, + onewayCheck: uiFieldCheck, + radio: uiFieldRadio, + restrictions: uiFieldRestrictions, + semiCombo: uiFieldCombo, + structureRadio: uiFieldRadio, + tel: uiFieldText, + text: uiFieldText, + textarea: uiFieldTextarea, + typeCombo: uiFieldCombo, + url: uiFieldText, + wikipedia: uiFieldWikipedia + }; - field.tags = function(_) { - if (!arguments.length) return _tags; - _tags = _; - return field; - }; + function uiField(context, presetField, entity, options) { + options = assignIn({ + show: true, + wrap: true, + remove: true, + revert: true, + info: true + }, options); + + var dispatch$$1 = dispatch('change'); + var field = clone(presetField); + var _show = options.show; + var _state = ''; + var _tags = {}; + + + field.impl = uiFields[field.type](field, context) + .on('change', function(t$$1, onInput) { + dispatch$$1.call('change', field, t$$1, onInput); + }); + if (entity && field.impl.entity) { + field.impl.entity(entity); + } - field.show = function() { - _show = true; - if (field.default && field.key && _tags[field.key] !== field.default) { - var t$$1 = {}; - t$$1[field.key] = field.default; - dispatch$$1.call('change', this, t$$1); - } - }; + field.keys = field.keys || [field.key]; - field.isShown = function() { - return _show || some(field.keys, function(key) { return !!_tags[key]; }); - }; + function isModified() { + if (!entity) return false; + var original = context.graph().base().entities[entity.id]; + return some(field.keys, function(key) { + return original ? _tags[key] !== original.tags[key] : _tags[key]; + }); + } - field.focus = function() { - field.impl.focus(); - }; + function isPresent() { + return some(field.keys, function(key) { + return _tags[key]; + }); + } - return utilRebind(field, dispatch$$1, 'on'); -} + function revert(d) { + event.stopPropagation(); + event.preventDefault(); + if (!entity) return false; -function uiFormFields(context) { - var fieldsArr; + var original = context.graph().base().entities[entity.id]; + var t$$1 = {}; + d.keys.forEach(function(key) { + t$$1[key] = original ? original.tags[key] : undefined; + }); + dispatch$$1.call('change', d, t$$1); + } - function formFields(selection$$1, klass) { - render(selection$$1, klass); - } + function remove(d) { + event.stopPropagation(); + event.preventDefault(); - function render(selection$$1, klass) { + var t$$1 = {}; + d.keys.forEach(function(key) { + t$$1[key] = undefined; + }); - var shown = fieldsArr.filter(function(field) { return field.isShown(); }), - notShown = fieldsArr.filter(function(field) { return !field.isShown(); }); + dispatch$$1.call('change', d, t$$1); + } - var container = selection$$1.selectAll('.form-fields-container') - .data([0]); - container = container.enter() - .append('div') - .attr('class', 'form-fields-container ' + (klass || '')) - .merge(container); + field.render = function(selection$$1) { + var container = selection$$1.selectAll('.form-field') + .data([field]); + // Enter + var enter = container.enter() + .append('div') + .attr('class', function(d) { return 'form-field form-field-' + d.safeid; }) + .classed('nowrap', !options.wrap); - var fields = container.selectAll('.wrap-form-field') - .data(shown, function(d) { return d.id; }); + if (options.wrap) { + var label = enter + .append('label') + .attr('class', 'form-label') + .attr('for', function(d) { return 'preset-input-' + d.safeid; }) + .text(function(d) { return d.label(); }); - fields.exit() - .remove(); + var wrap = label + .append('div') + .attr('class', 'form-label-button-wrap'); + + if (options.remove) { + wrap + .append('button') + .attr('class', 'remove-icon') + .attr('title', t('icons.remove')) + .attr('tabindex', -1) + .call(svgIcon('#operation-delete')); + } + + if (options.revert) { + wrap + .append('button') + .attr('class', 'modified-icon') + .attr('title', t('icons.undo')) + .attr('tabindex', -1) + .call( + (textDirection === 'rtl') ? svgIcon('#icon-redo') : svgIcon('#icon-undo') + ); + } + } - // Enter - var enter = fields.enter() - .append('div') - .attr('class', function(d) { return 'wrap-form-field wrap-form-field-' + d.id; }); - // Update - fields = fields - .merge(enter); + // Update + container = container + .merge(enter); + + container.selectAll('.form-label-button-wrap .remove-icon') + .on('click', remove); + + container.selectAll('.form-label-button-wrap .modified-icon') + .on('click', revert); + + container + .classed('modified', isModified()) + .classed('present', isPresent()) + .each(function(d) { + var reference, help; + + // instantiate field help + if (options.wrap && field.type === 'restrictions') { + help = uiFieldHelp(context, 'restrictions'); + } + + // instantiate tag reference + if (options.wrap && options.info) { + var referenceKey = d.key; + if (d.type === 'multiCombo') { // lookup key without the trailing ':' + referenceKey = referenceKey.replace(/:$/, ''); + } + + reference = uiTagReference(d.reference || { key: referenceKey }, context); + if (_state === 'hover') { + reference.showing(false); + } + } + + select(this) + .call(d.impl); + + // add field help components + if (help) { + select(this) + .call(help.body) + .select('.form-label-button-wrap') + .call(help.button); + } + + // add tag reference components + if (reference) { + select(this) + .call(reference.body) + .select('.form-label-button-wrap') + .call(reference.button); + } + + d.impl.tags(_tags); + }); + }; - fields - .order() - .each(function(d) { - d3_select(this) - .call(d.render); - }); + field.state = function(_) { + if (!arguments.length) return _state; + _state = _; + return field; + }; - notShown = notShown.map(function(field) { - return { - title: field.label(), - value: field.label(), - field: field - }; - }); + field.tags = function(_) { + if (!arguments.length) return _tags; + _tags = _; + return field; + }; - var more = selection$$1.selectAll('.more-fields') - .data((notShown.length > 0) ? [0] : []); - - more.exit() - .remove(); - - more = more.enter() - .append('div') - .attr('class', 'more-fields') - .append('label') - .text(t('inspector.add_fields')) - .merge(more); - - - var input = more.selectAll('.value') - .data([0]); - - input.exit() - .remove(); - - input = input.enter() - .append('input') - .attr('class', 'value') - .attr('type', 'text') - .call(utilNoAuto) - .merge(input); - - input - .call(utilGetSetValue, '') - .attr('placeholder', function() { - var placeholder = []; - for (var field in notShown) { - placeholder.push(notShown[field].title); - } - return placeholder.slice(0,3).join(', ') + ((placeholder.length > 3) ? '…' : ''); - }) - .call(d3combobox() - .container(context.container()) - .data(notShown) - .minItems(1) - .on('accept', function (d) { - var field = d.field; - field.show(); - render(selection$$1); - if (field.type !== 'semiCombo' && field.type !== 'multiCombo') { - field.focus(); - } - }) - ); - } + field.show = function() { + _show = true; + if (field.default && field.key && _tags[field.key] !== field.default) { + var t$$1 = {}; + t$$1[field.key] = field.default; + dispatch$$1.call('change', this, t$$1); + } + }; - formFields.fieldsArr = function(_) { - if (!arguments.length) return fieldsArr; - fieldsArr = _; - return formFields; - }; + field.isShown = function() { + return _show || some(field.keys, function(key) { return !!_tags[key]; }); + }; - return formFields; -} -function uiPresetEditor(context) { - var dispatch$$1 = dispatch('change'), - formFields = uiFormFields(context), - state, - fieldsArr, - preset, - tags, - entityId; + field.focus = function() { + field.impl.focus(); + }; - function presetEditor(selection$$1) { - selection$$1.call(uiDisclosure(context, 'preset_fields', true) - .title(t('inspector.all_fields')) - .content(render) - ); - } + return utilRebind(field, dispatch$$1, 'on'); + } + function uiFormFields(context) { + var fieldsArr; - function render(selection$$1) { - if (!fieldsArr) { - var entity = context.entity(entityId), - geometry = context.geometry(entityId), - presets = context.presets(); - fieldsArr = []; + function formFields(selection$$1, klass) { + render(selection$$1, klass); + } - preset.fields.forEach(function(field) { - if (field.matchGeometry(geometry)) { - fieldsArr.push( - uiField(context, field, entity) - ); - } - }); - if (entity.isHighwayIntersection(context.graph()) && presets.field('restrictions')) { - fieldsArr.push( - uiField(context, presets.field('restrictions'), entity) - ); - } + function render(selection$$1, klass) { - presets.universal().forEach(function(field) { - if (preset.fields.indexOf(field) === -1) { - fieldsArr.push( - uiField(context, field, entity, { show: false }) - ); - } - }); + var shown = fieldsArr.filter(function(field) { return field.isShown(); }), + notShown = fieldsArr.filter(function(field) { return !field.isShown(); }); - fieldsArr.forEach(function(field) { - field - .on('change', function(t$$1, onInput) { - dispatch$$1.call('change', field, t$$1, onInput); - }); - }); - } + var container = selection$$1.selectAll('.form-fields-container') + .data([0]); - fieldsArr.forEach(function(field) { - field - .state(state) - .tags(tags); - }); + container = container.enter() + .append('div') + .attr('class', 'form-fields-container ' + (klass || '')) + .merge(container); - selection$$1 - .call(formFields.fieldsArr(fieldsArr), 'inspector-inner fillL3'); + var fields = container.selectAll('.wrap-form-field') + .data(shown, function(d) { return d.id; }); + fields.exit() + .remove(); - selection$$1.selectAll('.wrap-form-field input') - .on('keydown', function() { - // if user presses enter, and combobox is not active, accept edits.. - if (event.keyCode === 13 && d3_select('.combobox').empty()) { - context.enter(modeBrowse(context)); - } - }); - } + // Enter + var enter = fields.enter() + .append('div') + .attr('class', function(d) { return 'wrap-form-field wrap-form-field-' + d.safeid; }); + // Update + fields = fields + .merge(enter); - presetEditor.preset = function(_) { - if (!arguments.length) return preset; - if (preset && preset.id === _.id) return presetEditor; - preset = _; - fieldsArr = null; - return presetEditor; - }; + fields + .order() + .each(function(d) { + select(this) + .call(d.render); + }); - presetEditor.state = function(_) { - if (!arguments.length) return state; - state = _; - return presetEditor; - }; + notShown = notShown.map(function(field) { + return { + title: field.label(), + value: field.label(), + field: field + }; + }); - presetEditor.tags = function(_) { - if (!arguments.length) return tags; - tags = _; - // Don't reset fieldsArr here. - return presetEditor; - }; + var more = selection$$1.selectAll('.more-fields') + .data((notShown.length > 0) ? [0] : []); + + more.exit() + .remove(); + + more = more.enter() + .append('div') + .attr('class', 'more-fields') + .append('label') + .text(t('inspector.add_fields')) + .merge(more); + + + var input = more.selectAll('.value') + .data([0]); + + input.exit() + .remove(); + + input = input.enter() + .append('input') + .attr('class', 'value') + .attr('type', 'text') + .call(utilNoAuto) + .merge(input); + + input + .call(utilGetSetValue, '') + .attr('placeholder', function() { + var placeholder = []; + for (var field in notShown) { + placeholder.push(notShown[field].title); + } + return placeholder.slice(0,3).join(', ') + ((placeholder.length > 3) ? '…' : ''); + }) + .call(d3combobox() + .container(context.container()) + .data(notShown) + .minItems(1) + .on('accept', function (d) { + var field = d.field; + field.show(); + render(selection$$1); + if (field.type !== 'semiCombo' && field.type !== 'multiCombo') { + field.focus(); + } + }) + ); + } - presetEditor.entityID = function(_) { - if (!arguments.length) return entityId; - if (entityId === _) return presetEditor; - entityId = _; - fieldsArr = null; - return presetEditor; - }; + formFields.fieldsArr = function(_) { + if (!arguments.length) return fieldsArr; + fieldsArr = _; + return formFields; + }; - return utilRebind(presetEditor, dispatch$$1, 'on'); -} - -function uiEntityEditor(context) { - var dispatch$$1 = dispatch('choose'), - state = 'select', - coalesceChanges = false, - modified = false, - base, - entityId, - activePreset, - reference; - - var presetEditor = uiPresetEditor(context) - .on('change', changeTags); - var rawTagEditor = uiRawTagEditor(context) - .on('change', changeTags); - - - function entityEditor(selection$$1) { - var entity = context.entity(entityId), - tags = clone(entity.tags); - - // Header - var header = selection$$1.selectAll('.header') - .data([0]); - - // Enter - var enter = header.enter() - .append('div') - .attr('class', 'header fillL cf'); - - enter - .append('button') - .attr('class', 'fl preset-reset preset-choose') - .call(svgIcon((textDirection === 'rtl') ? '#icon-forward' : '#icon-backward')); - - enter - .append('button') - .attr('class', 'fr preset-close') - .on('click', function() { context.enter(modeBrowse(context)); }) - .call(svgIcon(modified ? '#icon-apply' : '#icon-close')); - - enter - .append('h3') - .text(t('inspector.edit')); - - // Update - header = header - .merge(enter); - - header.selectAll('.preset-reset') - .on('click', function() { - dispatch$$1.call('choose', this, activePreset); - }); + return formFields; + } + function uiPresetEditor(context) { + var dispatch$$1 = dispatch('change'), + formFields = uiFormFields(context), + state, + fieldsArr, + preset, + tags, + entityId; - // Body - var body = selection$$1.selectAll('.inspector-body') - .data([0]); - // Enter - enter = body.enter() - .append('div') - .attr('class', 'inspector-body'); + function presetEditor(selection$$1) { + selection$$1.call(uiDisclosure(context, 'preset_fields', true) + .title(t('inspector.all_fields')) + .content(render) + ); + } - enter - .append('div') - .attr('class', 'preset-list-item inspector-inner') - .append('div') - .attr('class', 'preset-list-button-wrap') - .append('button') - .attr('class', 'preset-list-button preset-reset') - .call(tooltip().title(t('inspector.back_tooltip')).placement('bottom')) - .append('div') - .attr('class', 'label'); - enter - .append('div') - .attr('class', 'inspector-border preset-editor'); + function render(selection$$1) { + if (!fieldsArr) { + var entity = context.entity(entityId), + geometry = context.geometry(entityId), + presets = context.presets(); + + fieldsArr = []; + + preset.fields.forEach(function(field) { + if (field.matchGeometry(geometry)) { + fieldsArr.push( + uiField(context, field, entity) + ); + } + }); + + if (entity.isHighwayIntersection(context.graph()) && presets.field('restrictions')) { + fieldsArr.push( + uiField(context, presets.field('restrictions'), entity) + ); + } + + presets.universal().forEach(function(field) { + if (preset.fields.indexOf(field) === -1) { + fieldsArr.push( + uiField(context, field, entity, { show: false }) + ); + } + }); + + fieldsArr.forEach(function(field) { + field + .on('change', function(t$$1, onInput) { + dispatch$$1.call('change', field, t$$1, onInput); + }); + }); + } - enter - .append('div') - .attr('class', 'inspector-border raw-tag-editor inspector-inner'); + fieldsArr.forEach(function(field) { + field + .state(state) + .tags(tags); + }); - enter - .append('div') - .attr('class', 'inspector-border raw-member-editor inspector-inner'); - enter - .append('div') - .attr('class', 'raw-membership-editor inspector-inner'); + selection$$1 + .call(formFields.fieldsArr(fieldsArr), 'inspector-inner fillL3'); - enter - .append('input') - .attr('type', 'text') - .attr('class', 'key-trap'); + selection$$1.selectAll('.wrap-form-field input') + .on('keydown', function() { + // if user presses enter, and combobox is not active, accept edits.. + if (event.keyCode === 13 && select('.combobox').empty()) { + context.enter(modeBrowse(context)); + } + }); + } - // Update - body = body - .merge(enter); - body.selectAll('.preset-list-button-wrap') - .call(reference.button); + presetEditor.preset = function(_) { + if (!arguments.length) return preset; + if (preset && preset.id === _.id) return presetEditor; + preset = _; + fieldsArr = null; + return presetEditor; + }; - body.selectAll('.preset-list-item') - .call(reference.body); - body.selectAll('.preset-reset') - .on('click', function() { - dispatch$$1.call('choose', this, activePreset); - }); + presetEditor.state = function(_) { + if (!arguments.length) return state; + state = _; + return presetEditor; + }; - body.select('.preset-list-item button') - .call(uiPresetIcon() - .geometry(context.geometry(entityId)) - .preset(activePreset) - ); - body.select('.preset-list-item .label') - .text(activePreset.name()); + presetEditor.tags = function(_) { + if (!arguments.length) return tags; + tags = _; + // Don't reset fieldsArr here. + return presetEditor; + }; - body.select('.preset-editor') - .call(presetEditor - .preset(activePreset) - .entityID(entityId) - .tags(tags) - .state(state) - ); - body.select('.raw-tag-editor') - .call(rawTagEditor - .preset(activePreset) - .entityID(entityId) - .tags(tags) - .state(state) - ); + presetEditor.entityID = function(_) { + if (!arguments.length) return entityId; + if (entityId === _) return presetEditor; + entityId = _; + fieldsArr = null; + return presetEditor; + }; - if (entity.type === 'relation') { - body.select('.raw-member-editor') - .style('display', 'block') - .call(uiRawMemberEditor(context) - .entityID(entityId) - ); - } else { - body.select('.raw-member-editor') - .style('display', 'none'); - } - body.select('.raw-membership-editor') - .call(uiRawMembershipEditor(context) - .entityID(entityId) - ); + return utilRebind(presetEditor, dispatch$$1, 'on'); + } - body.select('.key-trap') - .on('keydown.key-trap', function() { - // On tabbing, send focus back to the first field on the inspector-body - // (probably the `name` field) #4159 - if (event.keyCode === 9 && !event.shiftKey) { - event.preventDefault(); - body.select('input').node().focus(); - } - }); + function uiEntityEditor(context) { + var dispatch$$1 = dispatch('choose'); + var _state = 'select'; + var _coalesceChanges = false; + var _modified = false; + var _base; + var _entityID; + var _activePreset; + var _tagReference; - context.history() - .on('change.entity-editor', historyChanged); + var presetEditor = uiPresetEditor(context) + .on('change', changeTags); + var rawTagEditor = uiRawTagEditor(context) + .on('change', changeTags); - function historyChanged() { - if (state === 'hide') return; + function entityEditor(selection$$1) { + var entity = context.entity(_entityID); + var tags = clone(entity.tags); - var entity = context.hasEntity(entityId); - var graph = context.graph(); - if (!entity) return; + // Header + var header = selection$$1.selectAll('.header') + .data([0]); - var match = context.presets().match(entity, graph); - var activePreset = entityEditor.preset(); - var weakPreset = activePreset && isEmpty(activePreset.addTags); + // Enter + var enter = header.enter() + .append('div') + .attr('class', 'header fillL cf'); - // A "weak" preset doesn't set any tags. (e.g. "Address") - // Don't replace a weak preset with a fallback preset (e.g. "Point") - if (!(weakPreset && match.isFallback())) { - entityEditor.preset(match); - } - entityEditor.modified(base !== graph); - entityEditor(selection$$1); - } - } + enter + .append('button') + .attr('class', 'fl preset-reset preset-choose') + .call(svgIcon((textDirection === 'rtl') ? '#icon-forward' : '#icon-backward')); + enter + .append('button') + .attr('class', 'fr preset-close') + .on('click', function() { context.enter(modeBrowse(context)); }) + .call(svgIcon(_modified ? '#icon-apply' : '#icon-close')); - function clean(o) { + enter + .append('h3') + .text(t('inspector.edit')); - function cleanVal(k, v) { - function keepSpaces(k) { - return k.match(/_hours|_times/) !== null; - } + // Update + header = header + .merge(enter); - var blacklist = ['description', 'note', 'fixme']; - if (some(blacklist, function(s) { return k.indexOf(s) !== -1; })) return v; + header.selectAll('.preset-reset') + .on('click', function() { + dispatch$$1.call('choose', this, _activePreset); + }); - var cleaned = v.split(';') - .map(function(s) { return s.trim(); }) - .join(keepSpaces(k) ? '; ' : ';'); - // The code below is not intended to validate websites and emails. - // It is only intended to prevent obvious copy-paste errors. (#2323) - // clean website- and email-like tags - if (k.indexOf('website') !== -1 || - k.indexOf('email') !== -1 || - cleaned.indexOf('http') === 0) { - cleaned = cleaned - .replace(/[\u200B-\u200F\uFEFF]/g, ''); // strip LRM and other zero width chars + // Body + var body = selection$$1.selectAll('.inspector-body') + .data([0]); - } + // Enter + enter = body.enter() + .append('div') + .attr('class', 'inspector-body'); - return cleaned; - } + enter + .append('div') + .attr('class', 'preset-list-item inspector-inner') + .append('div') + .attr('class', 'preset-list-button-wrap') + .append('button') + .attr('class', 'preset-list-button preset-reset') + .call(tooltip().title(t('inspector.back_tooltip')).placement('bottom')) + .append('div') + .attr('class', 'label'); - var out = {}, k, v; - for (k in o) { - if (k && (v = o[k]) !== undefined) { - out[k] = cleanVal(k, v); - } - } - return out; - } + enter + .append('div') + .attr('class', 'inspector-border preset-editor'); + enter + .append('div') + .attr('class', 'inspector-border raw-tag-editor inspector-inner'); - // Tag changes that fire on input can all get coalesced into a single - // history operation when the user leaves the field. #2342 - function changeTags(changed, onInput) { - var entity = context.entity(entityId), - annotation = t('operations.change_tags.annotation'), - tags = clone(entity.tags); + enter + .append('div') + .attr('class', 'inspector-border raw-member-editor inspector-inner'); - forEach(changed, function(v, k) { - if (v !== undefined || tags.hasOwnProperty(k)) { - tags[k] = v; - } - }); + enter + .append('div') + .attr('class', 'raw-membership-editor inspector-inner'); - if (!onInput) { - tags = clean(tags); - } + enter + .append('input') + .attr('type', 'text') + .attr('class', 'key-trap'); - if (!isEqual(entity.tags, tags)) { - if (coalesceChanges) { - context.overwrite(actionChangeTags(entityId, tags), annotation); - } else { - context.perform(actionChangeTags(entityId, tags), annotation); - coalesceChanges = !!onInput; - } - } - } + // Update + body = body + .merge(enter); + + if (_tagReference) { + body.selectAll('.preset-list-button-wrap') + .call(_tagReference.button); + + body.selectAll('.preset-list-item') + .call(_tagReference.body); + } - entityEditor.modified = function(_) { - if (!arguments.length) return modified; - modified = _; - d3_selectAll('button.preset-close use') - .attr('xlink:href', (modified ? '#icon-apply' : '#icon-close')); - }; + body.selectAll('.preset-reset') + .on('click', function() { + dispatch$$1.call('choose', this, _activePreset); + }); + + body.select('.preset-list-item button') + .call(uiPresetIcon() + .geometry(context.geometry(_entityID)) + .preset(_activePreset) + ); + + body.select('.preset-list-item .label') + .text(_activePreset.name()); + + body.select('.preset-editor') + .call(presetEditor + .preset(_activePreset) + .entityID(_entityID) + .tags(tags) + .state(_state) + ); + + body.select('.raw-tag-editor') + .call(rawTagEditor + .preset(_activePreset) + .entityID(_entityID) + .tags(tags) + .state(_state) + ); + + if (entity.type === 'relation') { + body.select('.raw-member-editor') + .style('display', 'block') + .call(uiRawMemberEditor(context) + .entityID(_entityID) + ); + } else { + body.select('.raw-member-editor') + .style('display', 'none'); + } + body.select('.raw-membership-editor') + .call(uiRawMembershipEditor(context) + .entityID(_entityID) + ); + + body.select('.key-trap') + .on('keydown.key-trap', function() { + // On tabbing, send focus back to the first field on the inspector-body + // (probably the `name` field) #4159 + if (event.keyCode === 9 && !event.shiftKey) { + event.preventDefault(); + body.select('input').node().focus(); + } + }); + + context.history() + .on('change.entity-editor', historyChanged); + + + function historyChanged() { + if (_state === 'hide') return; + + var entity = context.hasEntity(_entityID); + var graph = context.graph(); + if (!entity) return; + + var match = context.presets().match(entity, graph); + var activePreset = entityEditor.preset(); + var weakPreset = activePreset && isEmpty(activePreset.addTags); + + // A "weak" preset doesn't set any tags. (e.g. "Address") + // Don't replace a weak preset with a fallback preset (e.g. "Point") + if (!(weakPreset && match.isFallback())) { + entityEditor.preset(match); + } + entityEditor.modified(_base !== graph); + entityEditor(selection$$1); + } + } - entityEditor.state = function(_) { - if (!arguments.length) return state; - state = _; - return entityEditor; - }; + // Tag changes that fire on input can all get coalesced into a single + // history operation when the user leaves the field. #2342 + function changeTags(changed, onInput) { + var entity = context.entity(_entityID); + var annotation = t('operations.change_tags.annotation'); + var tags = clone(entity.tags); - entityEditor.entityID = function(_) { - if (!arguments.length) return entityId; - entityId = _; - base = context.graph(); - entityEditor.preset(context.presets().match(context.entity(entityId), base)); - entityEditor.modified(false); - coalesceChanges = false; - return entityEditor; - }; + for (var k in changed) { + if (!k) continue; + var v = changed[k]; + if (v !== undefined || tags.hasOwnProperty(k)) { + tags[k] = v; + } + } + if (!onInput) { + tags = utilCleanTags(tags); + } - entityEditor.preset = function(_) { - if (!arguments.length) return activePreset; - if (_ !== activePreset) { - activePreset = _; - reference = uiTagReference(activePreset.reference(context.geometry(entityId)), context) - .showing(false); - } - return entityEditor; - }; + if (!isEqual(entity.tags, tags)) { + if (_coalesceChanges) { + context.overwrite(actionChangeTags(_entityID, tags), annotation); + } else { + context.perform(actionChangeTags(_entityID, tags), annotation); + _coalesceChanges = !!onInput; + } + } + } - return utilRebind(entityEditor, dispatch$$1, 'on'); -} + entityEditor.modified = function(_) { + if (!arguments.length) return _modified; + _modified = _; + d3_selectAll('button.preset-close use') + .attr('xlink:href', (_modified ? '#icon-apply' : '#icon-close')); + return entityEditor; + }; -function uiPresetList(context) { - var dispatch$$1 = dispatch('choose'), - id, - currentPreset, - autofocus = false; + entityEditor.state = function(_) { + if (!arguments.length) return _state; + _state = _; + return entityEditor; + }; - function presetList(selection$$1) { - var entity = context.entity(id), - geometry = context.geometry(id); - // Treat entities on addr:interpolation lines as points, not vertices (#3241) - if (geometry === 'vertex' && entity.isOnAddressLine(context.graph())) { - geometry = 'point'; - } + entityEditor.entityID = function(_) { + if (!arguments.length) return _entityID; + _entityID = _; + _base = context.graph(); + _coalesceChanges = false; - var presets = context.presets().matchGeometry(geometry); + var presetMatch = context.presets().match(context.entity(_entityID), _base); - selection$$1.html(''); + return entityEditor + .preset(presetMatch) + .modified(false); + }; - var messagewrap = selection$$1 - .append('div') - .attr('class', 'header fillL cf'); - var message = messagewrap - .append('h3') - .text(t('inspector.choose')); + entityEditor.preset = function(_) { + if (!arguments.length) return _activePreset; + if (_ !== _activePreset) { + _activePreset = _; + _tagReference = uiTagReference(_activePreset.reference(context.geometry(_entityID)), context) + .showing(false); + } + return entityEditor; + }; - if (context.entity(id).isUsed(context.graph())) { - messagewrap - .append('button') - .attr('class', 'preset-choose') - .on('click', function() { dispatch$$1.call('choose', this, currentPreset); }) - .call(svgIcon((textDirection === 'rtl') ? '#icon-backward' : '#icon-forward')); - } else { - messagewrap - .append('button') - .attr('class', 'close') - .on('click', function() { - context.enter(modeBrowse(context)); - }) - .call(svgIcon('#icon-close')); - } - function keydown() { - // hack to let delete shortcut work when search is autofocused - if (search.property('value').length === 0 && - (event.keyCode === d3keybinding.keyCodes['⌫'] || - event.keyCode === d3keybinding.keyCodes['⌦'])) { - event.preventDefault(); - event.stopPropagation(); - operationDelete([id], context)(); - } else if (search.property('value').length === 0 && - (event.ctrlKey || event.metaKey) && - event.keyCode === d3keybinding.keyCodes.z) { - event.preventDefault(); - event.stopPropagation(); - context.undo(); - } else if (!event.ctrlKey && !event.metaKey) { - d3_select(this).on('keydown', null); - } - } + return utilRebind(entityEditor, dispatch$$1, 'on'); + } - function keypress() { - // enter - var value = search.property('value'); - if (event.keyCode === 13 && value.length) { - list.selectAll('.preset-list-item:first-child').datum().choose(); - } - } + function uiPresetList(context) { + var dispatch$$1 = dispatch('choose'), + id, + currentPreset, + autofocus = false; - function inputevent() { - var value = search.property('value'); - list.classed('filtered', value.length); - if (value.length) { - var results = presets.search(value, geometry); - message.text(t('inspector.results', { - n: results.collection.length, - search: value - })); - list.call(drawList, results); - } else { - list.call(drawList, context.presets().defaults(geometry, 36)); - message.text(t('inspector.choose')); - } - } - var searchWrap = selection$$1 - .append('div') - .attr('class', 'search-header'); - - var search = searchWrap - .append('input') - .attr('class', 'preset-search-input') - .attr('placeholder', t('inspector.search')) - .attr('type', 'search') - .call(utilNoAuto) - .on('keydown', keydown) - .on('keypress', keypress) - .on('input', inputevent); - - searchWrap - .call(svgIcon('#icon-search', 'pre-text')); - - if (autofocus) { - search.node().focus(); - } + function presetList(selection$$1) { + var entity = context.entity(id), + geometry = context.geometry(id); - var listWrap = selection$$1 - .append('div') - .attr('class', 'inspector-body'); + // Treat entities on addr:interpolation lines as points, not vertices (#3241) + if (geometry === 'vertex' && entity.isOnAddressLine(context.graph())) { + geometry = 'point'; + } - var list = listWrap - .append('div') - .attr('class', 'preset-list fillL cf') - .call(drawList, context.presets().defaults(geometry, 36)); - } + var presets = context.presets().matchGeometry(geometry); + selection$$1.html(''); - function drawList(list, presets) { - var collection = presets.collection.map(function(preset) { - return preset.members ? CategoryItem(preset) : PresetItem(preset); - }); + var messagewrap = selection$$1 + .append('div') + .attr('class', 'header fillL cf'); - var items = list.selectAll('.preset-list-item') - .data(collection, function(d) { return d.preset.id; }); - - items.order(); - - items.exit() - .remove(); - - items.enter() - .append('div') - .attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); }) - .classed('current', function(item) { return item.preset === currentPreset; }) - .each(function(item) { d3_select(this).call(item); }) - .style('opacity', 0) - .transition() - .style('opacity', 1); - } - - - function CategoryItem(preset) { - var box, sublist, shown = false; - - function item(selection$$1) { - var wrap = selection$$1.append('div') - .attr('class', 'preset-list-button-wrap category col12'); - - var button = wrap - .append('button') - .attr('class', 'preset-list-button') - .classed('expanded', false) - .call(uiPresetIcon() - .geometry(context.geometry(id)) - .preset(preset)) - .on('click', function() { - var isExpanded = d3_select(this).classed('expanded'); - var iconName = isExpanded ? - (textDirection === 'rtl' ? '#icon-backward' : '#icon-forward') : '#icon-down'; - d3_select(this) - .classed('expanded', !isExpanded); - d3_select(this).selectAll('div.label svg.icon use') - .attr('href', iconName); - item.choose(); - }); - - var label = button - .append('div') - .attr('class', 'label'); - - label - .call(svgIcon((textDirection === 'rtl' ? '#icon-backward' : '#icon-forward'), 'inline')) - .append('span') - .html(function() { return preset.name() + '…'; }); - - box = selection$$1.append('div') - .attr('class', 'subgrid col12') - .style('max-height', '0px') - .style('opacity', 0); - - box.append('div') - .attr('class', 'arrow'); - - sublist = box.append('div') - .attr('class', 'preset-list fillL3 cf fl'); - } + var message = messagewrap + .append('h3') + .text(t('inspector.choose')); + if (context.entity(id).isUsed(context.graph())) { + messagewrap + .append('button') + .attr('class', 'preset-choose') + .on('click', function() { dispatch$$1.call('choose', this, currentPreset); }) + .call(svgIcon((textDirection === 'rtl') ? '#icon-backward' : '#icon-forward')); + } else { + messagewrap + .append('button') + .attr('class', 'close') + .on('click', function() { + context.enter(modeBrowse(context)); + }) + .call(svgIcon('#icon-close')); + } - item.choose = function() { - if (!box || !sublist) return; + function keydown() { + // hack to let delete shortcut work when search is autofocused + if (search.property('value').length === 0 && + (event.keyCode === d3keybinding.keyCodes['⌫'] || + event.keyCode === d3keybinding.keyCodes['⌦'])) { + event.preventDefault(); + event.stopPropagation(); + operationDelete([id], context)(); + } else if (search.property('value').length === 0 && + (event.ctrlKey || event.metaKey) && + event.keyCode === d3keybinding.keyCodes.z) { + event.preventDefault(); + event.stopPropagation(); + context.undo(); + } else if (!event.ctrlKey && !event.metaKey) { + select(this).on('keydown', null); + } + } - if (shown) { - shown = false; - box.transition() - .duration(200) - .style('opacity', '0') - .style('max-height', '0px') - .style('padding-bottom', '0px'); - } else { - shown = true; - sublist.call(drawList, preset.members); - box.transition() - .duration(200) - .style('opacity', '1') - .style('max-height', 200 + preset.members.collection.length * 190 + 'px') - .style('padding-bottom', '20px'); - } - }; + function keypress() { + // enter + var value = search.property('value'); + if (event.keyCode === 13 && value.length) { + list.selectAll('.preset-list-item:first-child').datum().choose(); + } + } - item.preset = preset; + function inputevent() { + var value = search.property('value'); + list.classed('filtered', value.length); + if (value.length) { + var results = presets.search(value, geometry); + message.text(t('inspector.results', { + n: results.collection.length, + search: value + })); + list.call(drawList, results); + } else { + list.call(drawList, context.presets().defaults(geometry, 36)); + message.text(t('inspector.choose')); + } + } - return item; - } + var searchWrap = selection$$1 + .append('div') + .attr('class', 'search-header'); + + var search = searchWrap + .append('input') + .attr('class', 'preset-search-input') + .attr('placeholder', t('inspector.search')) + .attr('type', 'search') + .call(utilNoAuto) + .on('keydown', keydown) + .on('keypress', keypress) + .on('input', inputevent); + + searchWrap + .call(svgIcon('#icon-search', 'pre-text')); + + if (autofocus) { + search.node().focus(); + } + var listWrap = selection$$1 + .append('div') + .attr('class', 'inspector-body'); - function PresetItem(preset) { - function item(selection$$1) { - var wrap = selection$$1.append('div') - .attr('class', 'preset-list-button-wrap col12'); + var list = listWrap + .append('div') + .attr('class', 'preset-list fillL cf') + .call(drawList, context.presets().defaults(geometry, 36)); + } - wrap.append('button') - .attr('class', 'preset-list-button') - .call(uiPresetIcon() - .geometry(context.geometry(id)) - .preset(preset)) - .on('click', item.choose) - .append('div') - .attr('class', 'label') - .text(preset.name()); - wrap.call(item.reference.button); - selection$$1.call(item.reference.body); - } + function drawList(list, presets) { + var collection = presets.collection.map(function(preset) { + return preset.members ? CategoryItem(preset) : PresetItem(preset); + }); - item.choose = function() { - context.presets().choose(preset); + var items = list.selectAll('.preset-list-item') + .data(collection, function(d) { return d.preset.id; }); - context.perform( - actionChangePreset(id, currentPreset, preset), - t('operations.change_tags.annotation') - ); + items.order(); - dispatch$$1.call('choose', this, preset); - }; + items.exit() + .remove(); - item.help = function() { - event.stopPropagation(); - item.reference.toggle(); - }; + items.enter() + .append('div') + .attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); }) + .classed('current', function(item) { return item.preset === currentPreset; }) + .each(function(item) { select(this).call(item); }) + .style('opacity', 0) + .transition() + .style('opacity', 1); + } - item.preset = preset; - item.reference = uiTagReference(preset.reference(context.geometry(id)), context); - return item; - } + function CategoryItem(preset) { + var box, sublist, shown = false; + function item(selection$$1) { + var wrap = selection$$1.append('div') + .attr('class', 'preset-list-button-wrap category col12'); - presetList.autofocus = function(_) { - if (!arguments.length) return autofocus; - autofocus = _; - return presetList; - }; + var button = wrap + .append('button') + .attr('class', 'preset-list-button') + .classed('expanded', false) + .call(uiPresetIcon() + .geometry(context.geometry(id)) + .preset(preset)) + .on('click', function() { + var isExpanded = select(this).classed('expanded'); + var iconName = isExpanded ? + (textDirection === 'rtl' ? '#icon-backward' : '#icon-forward') : '#icon-down'; + select(this) + .classed('expanded', !isExpanded); + select(this).selectAll('div.label svg.icon use') + .attr('href', iconName); + item.choose(); + }); + + var label = button + .append('div') + .attr('class', 'label'); + label + .call(svgIcon((textDirection === 'rtl' ? '#icon-backward' : '#icon-forward'), 'inline')) + .append('span') + .html(function() { return preset.name() + '…'; }); - presetList.entityID = function(_) { - if (!arguments.length) return id; - id = _; - presetList.preset(context.presets().match(context.entity(id), context.graph())); - return presetList; - }; + box = selection$$1.append('div') + .attr('class', 'subgrid col12') + .style('max-height', '0px') + .style('opacity', 0); + box.append('div') + .attr('class', 'arrow'); - presetList.preset = function(_) { - if (!arguments.length) return currentPreset; - currentPreset = _; - return presetList; - }; + sublist = box.append('div') + .attr('class', 'preset-list fillL3 cf fl'); + } - return utilRebind(presetList, dispatch$$1, 'on'); -} + item.choose = function() { + if (!box || !sublist) return; + + if (shown) { + shown = false; + box.transition() + .duration(200) + .style('opacity', '0') + .style('max-height', '0px') + .style('padding-bottom', '0px'); + } else { + shown = true; + sublist.call(drawList, preset.members); + box.transition() + .duration(200) + .style('opacity', '1') + .style('max-height', 200 + preset.members.collection.length * 190 + 'px') + .style('padding-bottom', '20px'); + } + }; -function uiViewOnOSM(context) { - var id; + item.preset = preset; - function viewOnOSM(selection) { - var entity = context.entity(id); + return item; + } - selection.style('display', entity.isNew() ? 'none' : null); - var link = selection.selectAll('.view-on-osm') - .data([0]); + function PresetItem(preset) { + function item(selection$$1) { + var wrap = selection$$1.append('div') + .attr('class', 'preset-list-button-wrap col12'); - var enter = link.enter() - .append('a') - .attr('class', 'view-on-osm') - .attr('target', '_blank') - .call(svgIcon('#icon-out-link', 'inline')); + wrap.append('button') + .attr('class', 'preset-list-button') + .call(uiPresetIcon() + .geometry(context.geometry(id)) + .preset(preset)) + .on('click', item.choose) + .append('div') + .attr('class', 'label') + .text(preset.name()); - enter - .append('span') - .text(t('inspector.view_on_osm')); + wrap.call(item.reference.button); + selection$$1.call(item.reference.body); + } - link - .merge(enter) - .attr('href', context.connection().entityURL(entity)); - } + item.choose = function() { + context.presets().choose(preset); + context.perform( + actionChangePreset(id, currentPreset, preset), + t('operations.change_tags.annotation') + ); - viewOnOSM.entityID = function(_) { - if (!arguments.length) return id; - id = _; - return viewOnOSM; - }; + dispatch$$1.call('choose', this, preset); + }; - return viewOnOSM; -} + item.help = function() { + event.stopPropagation(); + item.reference.toggle(); + }; -function uiInspector(context) { - var presetList = uiPresetList(context); - var entityEditor = uiEntityEditor(context); - var _state = 'select'; - var _entityID; - var _newFeature = false; + item.preset = preset; + item.reference = uiTagReference(preset.reference(context.geometry(id)), context); + return item; + } - function inspector(selection$$1) { - presetList - .entityID(_entityID) - .autofocus(_newFeature) - .on('choose', setPreset); - entityEditor - .state(_state) - .entityID(_entityID) - .on('choose', showList); + presetList.autofocus = function(_) { + if (!arguments.length) return autofocus; + autofocus = _; + return presetList; + }; - var wrap = selection$$1.selectAll('.panewrap') - .data([0]); - var enter = wrap.enter() - .append('div') - .attr('class', 'panewrap'); + presetList.entityID = function(_) { + if (!arguments.length) return id; + id = _; + presetList.preset(context.presets().match(context.entity(id), context.graph())); + return presetList; + }; - enter - .append('div') - .attr('class', 'preset-list-pane pane'); - enter - .append('div') - .attr('class', 'entity-editor-pane pane'); + presetList.preset = function(_) { + if (!arguments.length) return currentPreset; + currentPreset = _; + return presetList; + }; - wrap = wrap.merge(enter); - var presetPane = wrap.selectAll('.preset-list-pane'); - var editorPane = wrap.selectAll('.entity-editor-pane'); - var graph = context.graph(), - entity = context.entity(_entityID), - showEditor = _state === 'hover' || - entity.isUsed(graph) || - entity.isHighwayIntersection(graph); + return utilRebind(presetList, dispatch$$1, 'on'); + } - if (showEditor) { - wrap.style('right', '0%'); - editorPane.call(entityEditor); - } else { - wrap.style('right', '-100%'); - presetPane.call(presetList); - } + function uiViewOnOSM(context) { + var id; - var footer = selection$$1.selectAll('.footer') - .data([0]); + function viewOnOSM(selection) { + var entity = context.entity(id); - footer = footer.enter() - .append('div') - .attr('class', 'footer') - .merge(footer); + selection.style('display', entity.isNew() ? 'none' : null); - footer - .call(uiViewOnOSM(context).entityID(_entityID)); + var link = selection.selectAll('.view-on-osm') + .data([0]); + var enter = link.enter() + .append('a') + .attr('class', 'view-on-osm') + .attr('target', '_blank') + .call(svgIcon('#icon-out-link', 'inline')); - function showList(preset) { - wrap.transition() - .styleTween('right', function() { return d3_interpolate('0%', '-100%'); }); + enter + .append('span') + .text(t('inspector.view_on_osm')); - presetPane - .call(presetList.preset(preset).autofocus(true)); - } + link + .merge(enter) + .attr('href', context.connection().entityURL(entity)); + } - function setPreset(preset) { - wrap.transition() - .styleTween('right', function() { return d3_interpolate('-100%', '0%'); }); + viewOnOSM.entityID = function(_) { + if (!arguments.length) return id; + id = _; + return viewOnOSM; + }; - editorPane - .call(entityEditor.preset(preset)); - } - } + return viewOnOSM; + } + function uiInspector(context) { + var presetList = uiPresetList(context); + var entityEditor = uiEntityEditor(context); + var _state = 'select'; + var _entityID; + var _newFeature = false; - inspector.state = function(_) { - if (!arguments.length) return _state; - _state = _; - entityEditor.state(_state); - // remove any old field help overlay that might have gotten attached to the inspector - d3_selectAll('.field-help-body').remove(); + function inspector(selection$$1) { + presetList + .entityID(_entityID) + .autofocus(_newFeature) + .on('choose', setPreset); - return inspector; - }; + entityEditor + .state(_state) + .entityID(_entityID) + .on('choose', showList); + var wrap = selection$$1.selectAll('.panewrap') + .data([0]); - inspector.entityID = function(_) { - if (!arguments.length) return _entityID; - _entityID = _; - return inspector; - }; + var enter = wrap.enter() + .append('div') + .attr('class', 'panewrap'); + enter + .append('div') + .attr('class', 'preset-list-pane pane'); - inspector.newFeature = function(_) { - if (!arguments.length) return _newFeature; - _newFeature = _; - return inspector; - }; + enter + .append('div') + .attr('class', 'entity-editor-pane pane'); + wrap = wrap.merge(enter); + var presetPane = wrap.selectAll('.preset-list-pane'); + var editorPane = wrap.selectAll('.entity-editor-pane'); - return inspector; -} + var graph = context.graph(), + entity = context.entity(_entityID), + showEditor = _state === 'hover' || + entity.isUsed(graph) || + entity.isHighwayIntersection(graph); -function uiSidebar(context) { - var inspector = uiInspector(context), - current; + if (showEditor) { + wrap.style('right', '0%'); + editorPane.call(entityEditor); + } else { + wrap.style('right', '-100%'); + presetPane.call(presetList); + } + var footer = selection$$1.selectAll('.footer') + .data([0]); - function sidebar(selection) { - var featureListWrap = selection - .append('div') - .attr('class', 'feature-list-pane') - .call(uiFeatureList(context)); + footer = footer.enter() + .append('div') + .attr('class', 'footer') + .merge(footer); + footer + .call(uiViewOnOSM(context).entityID(_entityID)); - var inspectorWrap = selection - .append('div') - .attr('class', 'inspector-hidden inspector-wrap fr'); + function showList(preset) { + wrap.transition() + .styleTween('right', function() { return interpolate('0%', '-100%'); }); - function hover(id) { - if (!current && context.hasEntity(id)) { - featureListWrap - .classed('inspector-hidden', true); + presetPane + .call(presetList.preset(preset).autofocus(true)); + } - inspectorWrap - .classed('inspector-hidden', false) - .classed('inspector-hover', true); - if (inspector.entityID() !== id || inspector.state() !== 'hover') { - inspector - .state('hover') - .entityID(id); + function setPreset(preset) { + wrap.transition() + .styleTween('right', function() { return interpolate('-100%', '0%'); }); - inspectorWrap - .call(inspector); - } + editorPane + .call(entityEditor.preset(preset)); + } + } - } else if (!current) { - featureListWrap - .classed('inspector-hidden', false); - inspectorWrap - .classed('inspector-hidden', true); - inspector - .state('hide'); - } - } + inspector.state = function(_) { + if (!arguments.length) return _state; + _state = _; + entityEditor.state(_state); - sidebar.hover = throttle(hover, 200); + // remove any old field help overlay that might have gotten attached to the inspector + d3_selectAll('.field-help-body').remove(); + return inspector; + }; - sidebar.select = function(id, newFeature) { - if (!current && id) { - featureListWrap - .classed('inspector-hidden', true); - inspectorWrap - .classed('inspector-hidden', false) - .classed('inspector-hover', false); + inspector.entityID = function(_) { + if (!arguments.length) return _entityID; + _entityID = _; + return inspector; + }; - if (inspector.entityID() !== id || inspector.state() !== 'select') { - inspector - .state('select') - .entityID(id) - .newFeature(newFeature); - inspectorWrap - .call(inspector); - } + inspector.newFeature = function(_) { + if (!arguments.length) return _newFeature; + _newFeature = _; + return inspector; + }; - } else if (!current) { - featureListWrap - .classed('inspector-hidden', false); - inspectorWrap - .classed('inspector-hidden', true); - inspector - .state('hide'); - } - }; + return inspector; + } - sidebar.show = function(component) { - featureListWrap - .classed('inspector-hidden', true); - inspectorWrap - .classed('inspector-hidden', true); + function uiSidebar(context) { + var inspector = uiInspector(context), + current; - if (current) current.remove(); - current = selection - .append('div') - .attr('class', 'sidebar-component') - .call(component); - }; + function sidebar(selection) { + var featureListWrap = selection + .append('div') + .attr('class', 'feature-list-pane') + .call(uiFeatureList(context)); - sidebar.hide = function() { - featureListWrap - .classed('inspector-hidden', false); - inspectorWrap - .classed('inspector-hidden', true); - if (current) current.remove(); - current = null; - }; - } + var inspectorWrap = selection + .append('div') + .attr('class', 'inspector-hidden inspector-wrap fr'); - sidebar.hover = function() {}; - sidebar.hover.cancel = function() {}; - sidebar.select = function() {}; - sidebar.show = function() {}; - sidebar.hide = function() {}; + function hover(id) { + if (!current && context.hasEntity(id)) { + featureListWrap + .classed('inspector-hidden', true); - return sidebar; -} + inspectorWrap + .classed('inspector-hidden', false) + .classed('inspector-hover', true); -function uiSpinner(context) { - var osm = context.connection(); + if (inspector.entityID() !== id || inspector.state() !== 'hover') { + inspector + .state('hover') + .entityID(id); + inspectorWrap + .call(inspector); + } - return function(selection) { - var img = selection - .append('img') - .attr('src', context.imagePath('loader-black.gif')) - .style('opacity', 0); - - if (osm) { - osm - .on('loading.spinner', function() { - img.transition() - .style('opacity', 1); - }) - .on('loaded.spinner', function() { - img.transition() - .style('opacity', 0); - }); - } - }; -} - -function uiSplash(context) { - - return function(selection) { - if (context.storage('sawSplash')) - return; - - context.storage('sawSplash', true); - - var modalSelection = uiModal(selection); - - modalSelection.select('.modal') - .attr('class', 'modal-splash modal col6'); - - var introModal = modalSelection.select('.content') - .append('div') - .attr('class', 'fillL'); - - introModal - .append('div') - .attr('class','modal-section cf') - .append('h3').text(t('splash.welcome')); - - introModal - .append('div') - .attr('class','modal-section') - .append('p') - .html(t('splash.text', { - version: context.version, - website: '
      ideditor.com', - github: 'github.com' - })); - - var buttonWrap = introModal - .append('div') - .attr('class', 'modal-actions cf'); - - var walkthrough = buttonWrap - .append('button') - .attr('class', 'walkthrough col6') - .on('click', function() { - context.container().call(uiIntro(context)); - modalSelection.close(); - }); + } else if (!current) { + featureListWrap + .classed('inspector-hidden', false); + inspectorWrap + .classed('inspector-hidden', true); + inspector + .state('hide'); + } + } - walkthrough - .append('svg') - .attr('class', 'logo logo-walkthrough') - .append('use') - .attr('xlink:href', '#logo-walkthrough'); - walkthrough - .append('div') - .text(t('splash.walkthrough')); + sidebar.hover = throttle(hover, 200); - var startEditing = buttonWrap - .append('button') - .attr('class', 'start-editing col6') - .on('click', modalSelection.close); - startEditing - .append('svg') - .attr('class', 'logo logo-features') - .append('use') - .attr('xlink:href', '#logo-features'); + sidebar.select = function(id, newFeature) { + if (!current && id) { + featureListWrap + .classed('inspector-hidden', true); - startEditing - .append('div') - .text(t('splash.start')); + inspectorWrap + .classed('inspector-hidden', false) + .classed('inspector-hover', false); + if (inspector.entityID() !== id || inspector.state() !== 'select') { + inspector + .state('select') + .entityID(id) + .newFeature(newFeature); - modalSelection.select('button.close') - .attr('class','hide'); + inspectorWrap + .call(inspector); + } - }; -} - -function uiStatus(context) { - var osm = context.connection(); - - - return function(selection$$1) { - if (!osm) return; - - function update() { - osm.status(function(err, apiStatus) { - selection$$1.html(''); - - if (err) { - if (apiStatus === 'connectionSwitched') { - // if the connection was just switched, we can't rely on - // the status (we're getting the status of the previous api) - return; - - } else if (apiStatus === 'rateLimited') { - selection$$1 - .text(t('status.rateLimit')) - .append('a') - .attr('class', 'api-status-login') - .attr('target', '_blank') - .call(svgIcon('#icon-out-link', 'inline')) - .append('span') - .text(t('login')) - .on('click.login', function() { - event.preventDefault(); - osm.authenticate(); - }); - } else { - // eslint-disable-next-line no-warning-comments - // TODO: nice messages for different error types - selection$$1.text(t('status.error')); - } - - } else if (apiStatus === 'readonly') { - selection$$1.text(t('status.readonly')); - } else if (apiStatus === 'offline') { - selection$$1.text(t('status.offline')); - } - - selection$$1.attr('class', 'api-status ' + (err ? 'error' : apiStatus)); - }); - } + } else if (!current) { + featureListWrap + .classed('inspector-hidden', false); + inspectorWrap + .classed('inspector-hidden', true); + inspector + .state('hide'); + } + }; - osm.on('change', function() { update(selection$$1); }); - window.setInterval(update, 90000); - update(selection$$1); - }; -} - -function uiUndoRedo(context) { - var commands = [{ - id: 'undo', - cmd: uiCmd('⌘Z'), - action: function() { if (editable()) context.undo(); }, - annotation: function() { return context.history().undoAnnotation(); } - }, { - id: 'redo', - cmd: uiCmd('⌘⇧Z'), - action: function() { if (editable()) context.redo(); }, - annotation: function() { return context.history().redoAnnotation(); } - }]; + sidebar.show = function(component) { + featureListWrap + .classed('inspector-hidden', true); + inspectorWrap + .classed('inspector-hidden', true); + if (current) current.remove(); + current = selection + .append('div') + .attr('class', 'sidebar-component') + .call(component); + }; - function editable() { - var mode = context.mode(); - return context.editable() && mode && mode.id !== 'save'; - } + sidebar.hide = function() { + featureListWrap + .classed('inspector-hidden', false); + inspectorWrap + .classed('inspector-hidden', true); - return function(selection$$1) { - var tooltipBehavior = tooltip() - .placement('bottom') - .html(true) - .title(function (d) { - return uiTooltipHtml(d.annotation() ? - t(d.id + '.tooltip', {action: d.annotation()}) : - t(d.id + '.nothing'), d.cmd); - }); + if (current) current.remove(); + current = null; + }; + } - var buttons = selection$$1.selectAll('button') - .data(commands) - .enter() - .append('button') - .attr('class', function(d) { return 'col6 disabled ' + d.id + '-button'; }) - .on('click', function(d) { return d.action(); }) - .call(tooltipBehavior); - - buttons.each(function(d) { - var iconName = d.id; - if (textDirection === 'rtl') { - if (iconName === 'undo') { - iconName = 'redo'; - } else if (iconName === 'redo') { - iconName = 'undo'; - } - } - d3_select(this) - .call(svgIcon('#icon-' + iconName)); - }); - var keybinding = d3keybinding('undo') - .on(commands[0].cmd, function() { event.preventDefault(); commands[0].action(); }) - .on(commands[1].cmd, function() { event.preventDefault(); commands[1].action(); }); + sidebar.hover = function() {}; + sidebar.hover.cancel = function() {}; + sidebar.select = function() {}; + sidebar.show = function() {}; + sidebar.hide = function() {}; - d3_select(document) - .call(keybinding); + return sidebar; + } + function uiSpinner(context) { + var osm = context.connection(); - var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true }); - context.map() - .on('move.undo_redo', debouncedUpdate) - .on('drawn.undo_redo', debouncedUpdate); + return function(selection) { + var img = selection + .append('img') + .attr('src', context.imagePath('loader-black.gif')) + .style('opacity', 0); - context.history() - .on('change.undo_redo', update); + if (osm) { + osm + .on('loading.spinner', function() { + img.transition() + .style('opacity', 1); + }) + .on('loaded.spinner', function() { + img.transition() + .style('opacity', 0); + }); + } + }; + } - context - .on('enter.undo_redo', update); + function uiSplash(context) { + return function(selection) { + if (context.storage('sawSplash')) + return; - function update() { - buttons - .property('disabled', !editable()) - .classed('disabled', function(d) { return !d.annotation(); }) - .each(function() { - var selection$$1 = d3_select(this); - if (selection$$1.property('tooltipVisible')) { - selection$$1.call(tooltipBehavior.show); - } - }); - } - }; -} - -// these are module variables so they are preserved through a ui.restart() -var sawVersion = null, - isNewVersion = false, - isNewUser = false; - - -function uiVersion(context) { - - var currVersion = context.version, - matchedVersion = currVersion.match(/\d\.\d\.\d.*/); - - if (sawVersion === null && matchedVersion !== null) { - isNewVersion = (context.storage('sawVersion') !== currVersion); - isNewUser = !context.storage('sawSplash'); - context.storage('sawVersion', currVersion); - sawVersion = currVersion; - } - - return function(selection) { - selection - .append('a') - .attr('target', '_blank') - .attr('tabindex', -1) - .attr('href', 'https://github.com/openstreetmap/iD') - .text(currVersion); - - // only show new version indicator to users that have used iD before - if (isNewVersion && !isNewUser) { - selection - .append('div') - .attr('class', 'badge') - .append('a') - .attr('target', '_blank') - .attr('tabindex', -1) - .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CHANGELOG.md#whats-new') - .call(svgIcon('#gift-11')) - .call(tooltip() - .title(t('version.whats_new', { version: currVersion })) - .placement('top') - ); - } - }; -} - -function uiZoom(context) { - var zooms = [{ - id: 'zoom-in', - icon: 'plus', - title: t('zoom.in'), - action: context.zoomIn, - key: '+' - }, { - id: 'zoom-out', - icon: 'minus', - title: t('zoom.out'), - action: context.zoomOut, - key: '-' - }]; + context.storage('sawSplash', true); + var modalSelection = uiModal(selection); - function zoomIn() { - event.preventDefault(); - context.zoomIn(); - } + modalSelection.select('.modal') + .attr('class', 'modal-splash modal col6'); + var introModal = modalSelection.select('.content') + .append('div') + .attr('class', 'fillL'); - function zoomOut() { - event.preventDefault(); - context.zoomOut(); - } + introModal + .append('div') + .attr('class','modal-section cf') + .append('h3').text(t('splash.welcome')); + introModal + .append('div') + .attr('class','modal-section') + .append('p') + .html(t('splash.text', { + version: context.version, + website: 'ideditor.com', + github: 'github.com' + })); - function zoomInFurther() { - event.preventDefault(); - context.zoomInFurther(); - } + var buttonWrap = introModal + .append('div') + .attr('class', 'modal-actions cf'); + var walkthrough = buttonWrap + .append('button') + .attr('class', 'walkthrough col6') + .on('click', function() { + context.container().call(uiIntro(context)); + modalSelection.close(); + }); - function zoomOutFurther() { - event.preventDefault(); - context.zoomOutFurther(); - } + walkthrough + .append('svg') + .attr('class', 'logo logo-walkthrough') + .append('use') + .attr('xlink:href', '#logo-walkthrough'); + walkthrough + .append('div') + .text(t('splash.walkthrough')); - return function(selection$$1) { - var button = selection$$1.selectAll('button') - .data(zooms) - .enter() - .append('button') - .attr('tabindex', -1) - .attr('class', function(d) { return d.id; }) - .on('click.editor', function(d) { d.action(); }) - .call(tooltip() - .placement((textDirection === 'rtl') ? 'right' : 'left') - .html(true) - .title(function(d) { - return uiTooltipHtml(d.title, d.key); - }) - ); + var startEditing = buttonWrap + .append('button') + .attr('class', 'start-editing col6') + .on('click', modalSelection.close); - button.each(function(d) { - d3_select(this) - .call(svgIcon('#icon-' + d.icon, 'light')); - }); + startEditing + .append('svg') + .attr('class', 'logo logo-features') + .append('use') + .attr('xlink:href', '#logo-features'); - var keybinding = d3keybinding('zoom'); + startEditing + .append('div') + .text(t('splash.start')); - ['plus', 'ffplus', '=', 'ffequals'].forEach(function(key) { - keybinding.on([key], zoomIn); - keybinding.on([uiCmd('⌘' + key)], zoomInFurther); - }); - ['_', '-', 'ffminus', 'dash'].forEach(function(key) { - keybinding.on([key], zoomOut); - keybinding.on([uiCmd('⌘' + key)], zoomOutFurther); - }); + modalSelection.select('button.close') + .attr('class','hide'); - d3_select(document) - .call(keybinding); - }; -} + }; + } -function uiInit(context) { - var uiInitCounter = 0; + function uiStatus(context) { + var osm = context.connection(); + + + return function(selection$$1) { + if (!osm) return; + + function update() { + osm.status(function(err, apiStatus) { + selection$$1.html(''); + + if (err) { + if (apiStatus === 'connectionSwitched') { + // if the connection was just switched, we can't rely on + // the status (we're getting the status of the previous api) + return; + + } else if (apiStatus === 'rateLimited') { + selection$$1 + .text(t('status.rateLimit')) + .append('a') + .attr('class', 'api-status-login') + .attr('target', '_blank') + .call(svgIcon('#icon-out-link', 'inline')) + .append('span') + .text(t('login')) + .on('click.login', function() { + event.preventDefault(); + osm.authenticate(); + }); + } else { + // eslint-disable-next-line no-warning-comments + // TODO: nice messages for different error types + selection$$1.text(t('status.error')); + } + + } else if (apiStatus === 'readonly') { + selection$$1.text(t('status.readonly')); + } else if (apiStatus === 'offline') { + selection$$1.text(t('status.offline')); + } + + selection$$1.attr('class', 'api-status ' + (err ? 'error' : apiStatus)); + }); + } + osm.on('change', function() { update(selection$$1); }); - function render(container) { - container - .attr('dir', textDirection); + window.setInterval(update, 90000); + update(selection$$1); + }; + } - var map = context.map(); + function uiUndoRedo(context) { + var commands = [{ + id: 'undo', + cmd: uiCmd('⌘Z'), + action: function() { if (editable()) context.undo(); }, + annotation: function() { return context.history().undoAnnotation(); } + }, { + id: 'redo', + cmd: uiCmd('⌘⇧Z'), + action: function() { if (editable()) context.redo(); }, + annotation: function() { return context.history().redoAnnotation(); } + }]; - var hash = behaviorHash(context); - hash(); - if (!hash.hadHash) { - map.centerZoom([0, 0], 2); - } + function editable() { + var mode = context.mode(); + return context.editable() && mode && mode.id !== 'save'; + } - container - .append('svg') - .attr('id', 'defs') - .call(svgDefs(context)); - - container - .append('div') - .attr('id', 'sidebar') - .attr('class', 'col4') - .call(ui.sidebar); - - var content = container - .append('div') - .attr('id', 'content') - .attr('class', 'active'); - - var bar = content - .append('div') - .attr('id', 'bar') - .attr('class', 'fillD'); - - content - .append('div') - .attr('id', 'map') - .attr('dir', 'ltr') - .call(map); - - content - .call(uiMapInMap(context)) - .call(uiInfo(context)) - .call(uiNotice(context)); - - bar - .append('div') - .attr('class', 'spacer col4'); - - var limiter = bar.append('div') - .attr('class', 'limiter'); - - limiter - .append('div') - .attr('class', 'button-wrap joined col3') - .call(uiModes(context), limiter); - - limiter - .append('div') - .attr('class', 'button-wrap joined col1') - .call(uiUndoRedo(context)); - - limiter - .append('div') - .attr('class', 'button-wrap col1') - .call(uiSave(context)); - - bar - .append('div') - .attr('class', 'full-screen') - .call(uiFullScreen(context)); - - bar - .append('div') - .attr('class', 'spinner') - .call(uiSpinner(context)); - - - var controls = bar - .append('div') - .attr('class', 'map-controls'); - - controls - .append('div') - .attr('class', 'map-control zoombuttons') - .call(uiZoom(context)); - - controls - .append('div') - .attr('class', 'map-control geolocate-control') - .call(uiGeolocate(context)); - - controls - .append('div') - .attr('class', 'map-control background-control') - .call(uiBackground(context)); - - controls - .append('div') - .attr('class', 'map-control map-data-control') - .call(uiMapData(context)); - - controls - .append('div') - .attr('class', 'map-control help-control') - .call(uiHelp(context)); - - - var about = content - .append('div') - .attr('id', 'about'); - - about - .append('div') - .attr('id', 'attrib') - .attr('dir', 'ltr') - .call(uiAttribution(context)); - - about - .append('div') - .attr('class', 'api-status') - .call(uiStatus(context)); - - - var footer = about - .append('div') - .attr('id', 'footer') - .attr('class', 'fillD'); - - footer - .append('div') - .attr('id', 'flash-wrap') - .attr('class', 'footer-hide'); - - var footerWrap = footer - .append('div') - .attr('id', 'footer-wrap') - .attr('class', 'footer-show'); - - footerWrap - .append('div') - .attr('id', 'scale-block') - .call(uiScale(context)); - - var aboutList = footerWrap - .append('div') - .attr('id', 'info-block') - .append('ul') - .attr('id', 'about-list'); - - if (!context.embed()) { - aboutList - .call(uiAccount(context)); - } - aboutList - .append('li') - .attr('class', 'version') - .call(uiVersion(context)); - - var issueLinks = aboutList - .append('li'); - - issueLinks - .append('a') - .attr('target', '_blank') - .attr('tabindex', -1) - .attr('href', 'https://github.com/openstreetmap/iD/issues') - .call(svgIcon('#icon-bug', 'light')) - .call(tooltip().title(t('report_a_bug')).placement('top')); - - issueLinks - .append('a') - .attr('target', '_blank') - .attr('tabindex', -1) - .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating') - .call(svgIcon('#icon-translate', 'light')) - .call(tooltip().title(t('help_translate')).placement('top')); - - aboutList - .append('li') - .attr('class', 'feature-warning') - .attr('tabindex', -1) - .call(uiFeatureInfo(context)); - - aboutList - .append('li') - .attr('class', 'user-list') - .attr('tabindex', -1) - .call(uiContributors(context)); - - - var photoviewer = content - .append('div') - .attr('id', 'photoviewer') - .classed('al', true) // 'al'=left, 'ar'=right - .classed('hide', true); - - photoviewer - .append('button') - .attr('class', 'thumb-hide') - .on('click', function () { - if (services.mapillary) { services.mapillary.hideViewer(); } - if (services.openstreetcam) { services.openstreetcam.hideViewer(); } - }) - .append('div') - .call(svgIcon('#icon-close')); - - - window.onbeforeunload = function() { - return context.save(); - }; + return function(selection$$1) { + var tooltipBehavior = tooltip() + .placement('bottom') + .html(true) + .title(function (d) { + return uiTooltipHtml(d.annotation() ? + t(d.id + '.tooltip', {action: d.annotation()}) : + t(d.id + '.nothing'), d.cmd); + }); + + var buttons = selection$$1.selectAll('button') + .data(commands) + .enter() + .append('button') + .attr('class', function(d) { return 'col6 disabled ' + d.id + '-button'; }) + .on('click', function(d) { return d.action(); }) + .call(tooltipBehavior); + + buttons.each(function(d) { + var iconName = d.id; + if (textDirection === 'rtl') { + if (iconName === 'undo') { + iconName = 'redo'; + } else if (iconName === 'redo') { + iconName = 'undo'; + } + } + select(this) + .call(svgIcon('#icon-' + iconName)); + }); - window.onunload = function() { - context.history().unlock(); - }; + var keybinding = d3keybinding('undo') + .on(commands[0].cmd, function() { event.preventDefault(); commands[0].action(); }) + .on(commands[1].cmd, function() { event.preventDefault(); commands[1].action(); }); - var mapDimensions = map.dimensions(); + select(document) + .call(keybinding); - function onResize() { - mapDimensions = utilGetDimensions(content, true); - map.dimensions(mapDimensions); - } + var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true }); - d3_select(window) - .on('resize.editor', onResize); + context.map() + .on('move.undo_redo', debouncedUpdate) + .on('drawn.undo_redo', debouncedUpdate); - onResize(); + context.history() + .on('change.undo_redo', update); - function pan(d) { - return function() { - event.preventDefault(); - context.pan(d, 100); - }; - } + context + .on('enter.undo_redo', update); - // pan amount - var pa = 80; + function update() { + buttons + .property('disabled', !editable()) + .classed('disabled', function(d) { return !d.annotation(); }) + .each(function() { + var selection$$1 = select(this); + if (selection$$1.property('tooltipVisible')) { + selection$$1.call(tooltipBehavior.show); + } + }); + } + }; + } - var keybinding = d3keybinding('main') - .on('⌫', function() { event.preventDefault(); }) - .on('←', pan([pa, 0])) - .on('↑', pan([0, pa])) - .on('→', pan([-pa, 0])) - .on('↓', pan([0, -pa])) - .on(['⇧←', uiCmd('⌘←')], pan([mapDimensions[0], 0])) - .on(['⇧↑', uiCmd('⌘↑')], pan([0, mapDimensions[1]])) - .on(['⇧→', uiCmd('⌘→')], pan([-mapDimensions[0], 0])) - .on(['⇧↓', uiCmd('⌘↓')], pan([0, -mapDimensions[1]])); + // these are module variables so they are preserved through a ui.restart() + var sawVersion = null, + isNewVersion = false, + isNewUser = false; - d3_select(document) - .call(keybinding); - context.enter(modeBrowse(context)); + function uiVersion(context) { - if (!uiInitCounter++) { - if (!hash.startWalkthrough) { - context.container() - .call(uiSplash(context)) - .call(uiRestore(context)); - } + var currVersion = context.version, + matchedVersion = currVersion.match(/\d\.\d\.\d.*/); - context.container() - .call(uiShortcuts(context)); - } + if (sawVersion === null && matchedVersion !== null) { + isNewVersion = (context.storage('sawVersion') !== currVersion); + isNewUser = !context.storage('sawSplash'); + context.storage('sawVersion', currVersion); + sawVersion = currVersion; + } - var osm = context.connection(), - auth = uiLoading(context).message(t('loading_auth')).blocking(true); - - if (osm && auth) { - osm - .on('authLoading.ui', function() { - context.container() - .call(auth); - }) - .on('authDone.ui', function() { - auth.close(); - }); - } + return function(selection) { + selection + .append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', 'https://github.com/openstreetmap/iD') + .text(currVersion); + + // only show new version indicator to users that have used iD before + if (isNewVersion && !isNewUser) { + selection + .append('div') + .attr('class', 'badge') + .append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CHANGELOG.md#whats-new') + .call(svgIcon('#gift-11')) + .call(tooltip() + .title(t('version.whats_new', { version: currVersion })) + .placement('top') + ); + } + }; + } - uiInitCounter++; + function uiZoom(context) { + var zooms = [{ + id: 'zoom-in', + icon: 'plus', + title: t('zoom.in'), + action: context.zoomIn, + key: '+' + }, { + id: 'zoom-out', + icon: 'minus', + title: t('zoom.out'), + action: context.zoomOut, + key: '-' + }]; + + + function zoomIn() { + event.preventDefault(); + context.zoomIn(); + } - if (hash.startWalkthrough) { - hash.startWalkthrough = false; - context.container().call(uiIntro(context)); - } - } + function zoomOut() { + event.preventDefault(); + context.zoomOut(); + } - var renderCallback; - function ui(node, callback) { - renderCallback = callback; - var container = d3_select(node); - context.container(container); - context.loadLocale(function(err) { - if (!err) { - render(container); - } - if (callback) { - callback(err); - } - }); - } + function zoomInFurther() { + event.preventDefault(); + context.zoomInFurther(); + } - ui.restart = function(arg) { - context.locale(arg); - context.loadLocale(function(err) { - if (!err) { - context.container().selectAll('*').remove(); - render(context.container()); - if (renderCallback) renderCallback(); - } - }); - }; + function zoomOutFurther() { + event.preventDefault(); + context.zoomOutFurther(); + } - ui.sidebar = uiSidebar(context); + return function(selection$$1) { + var button = selection$$1.selectAll('button') + .data(zooms) + .enter() + .append('button') + .attr('tabindex', -1) + .attr('class', function(d) { return d.id; }) + .on('click.editor', function(d) { d.action(); }) + .call(tooltip() + .placement((textDirection === 'rtl') ? 'right' : 'left') + .html(true) + .title(function(d) { + return uiTooltipHtml(d.title, d.key); + }) + ); + + button.each(function(d) { + select(this) + .call(svgIcon('#icon-' + d.icon, 'light')); + }); - return ui; -} + var keybinding = d3keybinding('zoom'); -function uiChangesetEditor(context) { - var dispatch$$1 = dispatch('change'), - formFields = uiFormFields(context), - fieldsArr, - tags, - changesetId; + ['plus', 'ffplus', '=', 'ffequals'].forEach(function(key) { + keybinding.on([key], zoomIn); + keybinding.on([uiCmd('⌘' + key)], zoomInFurther); + }); + ['_', '-', 'ffminus', 'dash'].forEach(function(key) { + keybinding.on([key], zoomOut); + keybinding.on([uiCmd('⌘' + key)], zoomOutFurther); + }); + select(document) + .call(keybinding); + }; + } - function changesetEditor(selection) { - render(selection); - } + function uiInit(context) { + var uiInitCounter = 0; - function render(selection) { - var initial = false; + function render(container) { + container + .attr('dir', textDirection); - if (!fieldsArr) { - initial = true; - var presets = context.presets(); + var map = context.map(); - fieldsArr = [ - uiField(context, presets.field('comment'), null, { show: true, revert: false }), - uiField(context, presets.field('source'), null, { show: false, revert: false }), - uiField(context, presets.field('hashtags'), null, { show: false, revert: false }), - ]; + var hash = behaviorHash(context); + hash(); - fieldsArr.forEach(function(field) { - field - .on('change', function(t$$1, onInput) { - dispatch$$1.call('change', field, t$$1, onInput); - }); - }); - } + if (!hash.hadHash) { + map.centerZoom([0, 0], 2); + } - fieldsArr.forEach(function(field) { - field - .tags(tags); - }); + container + .append('svg') + .attr('id', 'defs') + .call(svgDefs(context)); + + container + .append('div') + .attr('id', 'sidebar') + .attr('class', 'col4') + .call(ui.sidebar); + + var content = container + .append('div') + .attr('id', 'content') + .attr('class', 'active'); + + var bar = content + .append('div') + .attr('id', 'bar') + .attr('class', 'fillD'); + + content + .append('div') + .attr('id', 'map') + .attr('dir', 'ltr') + .call(map); + + content + .call(uiMapInMap(context)) + .call(uiInfo(context)) + .call(uiNotice(context)); + + bar + .append('div') + .attr('class', 'spacer col4'); + + var limiter = bar.append('div') + .attr('class', 'limiter'); + + limiter + .append('div') + .attr('class', 'button-wrap joined col3') + .call(uiModes(context), limiter); + + limiter + .append('div') + .attr('class', 'button-wrap joined col1') + .call(uiUndoRedo(context)); + + limiter + .append('div') + .attr('class', 'button-wrap col1') + .call(uiSave(context)); + + bar + .append('div') + .attr('class', 'full-screen') + .call(uiFullScreen(context)); + + bar + .append('div') + .attr('class', 'spinner') + .call(uiSpinner(context)); + + + var controls = bar + .append('div') + .attr('class', 'map-controls'); + + controls + .append('div') + .attr('class', 'map-control zoombuttons') + .call(uiZoom(context)); + + controls + .append('div') + .attr('class', 'map-control geolocate-control') + .call(uiGeolocate(context)); + + controls + .append('div') + .attr('class', 'map-control background-control') + .call(uiBackground(context)); + + controls + .append('div') + .attr('class', 'map-control map-data-control') + .call(uiMapData(context)); + + controls + .append('div') + .attr('class', 'map-control help-control') + .call(uiHelp(context)); + + + var about = content + .append('div') + .attr('id', 'about'); + + about + .append('div') + .attr('id', 'attrib') + .attr('dir', 'ltr') + .call(uiAttribution(context)); + + about + .append('div') + .attr('class', 'api-status') + .call(uiStatus(context)); + + + var footer = about + .append('div') + .attr('id', 'footer') + .attr('class', 'fillD'); + + footer + .append('div') + .attr('id', 'flash-wrap') + .attr('class', 'footer-hide'); + + var footerWrap = footer + .append('div') + .attr('id', 'footer-wrap') + .attr('class', 'footer-show'); + + footerWrap + .append('div') + .attr('id', 'scale-block') + .call(uiScale(context)); + + var aboutList = footerWrap + .append('div') + .attr('id', 'info-block') + .append('ul') + .attr('id', 'about-list'); + + if (!context.embed()) { + aboutList + .call(uiAccount(context)); + } + aboutList + .append('li') + .attr('class', 'version') + .call(uiVersion(context)); + + var issueLinks = aboutList + .append('li'); + + issueLinks + .append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', 'https://github.com/openstreetmap/iD/issues') + .call(svgIcon('#icon-bug', 'light')) + .call(tooltip().title(t('report_a_bug')).placement('top')); + + issueLinks + .append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating') + .call(svgIcon('#icon-translate', 'light')) + .call(tooltip().title(t('help_translate')).placement('top')); + + aboutList + .append('li') + .attr('class', 'feature-warning') + .attr('tabindex', -1) + .call(uiFeatureInfo(context)); + + aboutList + .append('li') + .attr('class', 'user-list') + .attr('tabindex', -1) + .call(uiContributors(context)); + + + var photoviewer = content + .append('div') + .attr('id', 'photoviewer') + .classed('al', true) // 'al'=left, 'ar'=right + .classed('hide', true); + + photoviewer + .append('button') + .attr('class', 'thumb-hide') + .on('click', function () { + if (services.mapillary) { services.mapillary.hideViewer(); } + if (services.openstreetcam) { services.openstreetcam.hideViewer(); } + }) + .append('div') + .call(svgIcon('#icon-close')); + + + window.onbeforeunload = function() { + return context.save(); + }; - selection - .call(formFields.fieldsArr(fieldsArr)); + window.onunload = function() { + context.history().unlock(); + }; + var mapDimensions = map.dimensions(); - if (initial) { - var commentField = selection.select('#preset-input-comment'), - commentNode = commentField.node(); - if (commentNode) { - commentNode.focus(); - commentNode.select(); - } + function onResize() { + mapDimensions = utilGetDimensions(content, true); + map.dimensions(mapDimensions); + } - // trigger a 'blur' event so that comment field can be cleaned - // and checked for hashtags, even if retrieved from localstorage - utilTriggerEvent(commentField, 'blur'); - - var osm = context.connection(); - if (osm) { - osm.userChangesets(function (err, changesets) { - if (err) return; - - var comments = changesets.map(function(changeset) { - return { - title: changeset.tags.comment, - value: changeset.tags.comment - }; - }); - - commentField - .call(d3combobox() - .container(context.container()) - .caseSensitive(true) - .data(uniqBy(comments, 'title')) - ); - }); - } - } + select(window) + .on('resize.editor', onResize); - // Add warning if comment mentions Google - var hasGoogle = tags.comment.match(/google/i); - var commentWarning = selection.select('.form-field-comment').selectAll('.comment-warning') - .data(hasGoogle ? [0] : []); - - commentWarning.exit() - .transition() - .duration(200) - .style('opacity', 0) - .remove(); - - var commentEnter = commentWarning.enter() - .insert('div', '.tag-reference-body') - .attr('class', 'field-warning comment-warning') - .style('opacity', 0); - - commentEnter - .append('a') - .attr('target', '_blank') - .attr('tabindex', -1) - .call(svgIcon('#icon-alert', 'inline')) - .attr('href', t('commit.google_warning_link')) - .append('span') - .text(t('commit.google_warning')); - - commentEnter - .transition() - .duration(200) - .style('opacity', 1); - } - - - changesetEditor.tags = function(_) { - if (!arguments.length) return tags; - tags = _; - // Don't reset fieldsArr here. - return changesetEditor; - }; + onResize(); + function pan(d) { + return function() { + event.preventDefault(); + context.pan(d, 100); + }; + } - changesetEditor.changesetID = function(_) { - if (!arguments.length) return changesetId; - if (changesetId === _) return changesetEditor; - changesetId = _; - fieldsArr = null; - return changesetEditor; - }; + // pan amount + var pa = 80; - return utilRebind(changesetEditor, dispatch$$1, 'on'); -} - -/** - * This method is like `_.union` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which uniqueness is computed. Result values are chosen from the first - * array in which the value occurs. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.unionBy([2.1], [1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ -var unionBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)); -}); - -function uiCommitChanges(context) { - var detected = utilDetect(); - var _entityID; - - - function commitChanges(selection$$1) { - var history = context.history(); - var summary = history.difference().summary(); - - var container = selection$$1.selectAll('.modal-section.commit-section') - .data([0]); - - var containerEnter = container.enter() - .append('div') - .attr('class', 'commit-section modal-section fillL2'); - - containerEnter - .append('h3') - .text(t('commit.changes', { count: summary.length })); - - containerEnter - .append('ul') - .attr('class', 'changeset-list'); - - container = containerEnter - .merge(container); - - - var items = container.select('ul').selectAll('li') - .data(summary); - - var itemsEnter = items.enter() - .append('li') - .attr('class', 'change-item'); - - itemsEnter - .each(function(d) { - d3_select(this) - .call(svgIcon('#icon-' + d.entity.geometry(d.graph), 'pre-text ' + d.changeType)); - }); + var keybinding = d3keybinding('main') + .on('⌫', function() { event.preventDefault(); }) + .on('←', pan([pa, 0])) + .on('↑', pan([0, pa])) + .on('→', pan([-pa, 0])) + .on('↓', pan([0, -pa])) + .on(['⇧←', uiCmd('⌘←')], pan([mapDimensions[0], 0])) + .on(['⇧↑', uiCmd('⌘↑')], pan([0, mapDimensions[1]])) + .on(['⇧→', uiCmd('⌘→')], pan([-mapDimensions[0], 0])) + .on(['⇧↓', uiCmd('⌘↓')], pan([0, -mapDimensions[1]])); - itemsEnter - .append('span') - .attr('class', 'change-type') - .text(function(d) { return t('commit.' + d.changeType) + ' '; }); - - itemsEnter - .append('strong') - .attr('class', 'entity-type') - .text(function(d) { - var matched = context.presets().match(d.entity, d.graph); - return (matched && matched.name()) || utilDisplayType(d.entity.id); - }); + select(document) + .call(keybinding); - itemsEnter - .append('span') - .attr('class', 'entity-name') - .text(function(d) { - var name = utilDisplayName(d.entity) || '', - string = ''; - if (name !== '') { - string += ':'; - } - return string += ' ' + name; - }); + context.enter(modeBrowse(context)); - itemsEnter - .style('opacity', 0) - .transition() - .style('opacity', 1); + if (!uiInitCounter++) { + if (!hash.startWalkthrough) { + context.container() + .call(uiSplash(context)) + .call(uiRestore(context)); + } - items = itemsEnter - .merge(items); + context.container() + .call(uiShortcuts(context)); + } - items - .on('mouseover', mouseover) - .on('mouseout', mouseout) - .on('click', click); + var osm = context.connection(), + auth = uiLoading(context).message(t('loading_auth')).blocking(true); + + if (osm && auth) { + osm + .on('authLoading.ui', function() { + context.container() + .call(auth); + }) + .on('authDone.ui', function() { + auth.close(); + }); + } + uiInitCounter++; - // Download changeset link - var changeset = new osmChangeset().update({ id: undefined }); - var changes = history.changes(actionDiscardTags(history.difference())); + if (hash.startWalkthrough) { + hash.startWalkthrough = false; + context.container().call(uiIntro(context)); + } + } - delete changeset.id; // Export without chnageset_id - var data = JXON.stringify(changeset.osmChangeJXON(changes)); - var blob = new Blob([data], {type: 'text/xml;charset=utf-8;'}); - var fileName = 'changes.osc'; + var renderCallback; - var linkEnter = container.selectAll('.download-changes') - .data([0]) - .enter() - .append('a') - .attr('class', 'download-changes'); + function ui(node, callback) { + renderCallback = callback; + var container = select(node); + context.container(container); + context.loadLocale(function(err) { + if (!err) { + render(container); + } + if (callback) { + callback(err); + } + }); + } - if (detected.download) { // All except IE11 and Edge - linkEnter // download the data as a file - .attr('href', window.URL.createObjectURL(blob)) - .attr('download', fileName); - } else { // IE11 and Edge - linkEnter // open data uri in a new tab - .attr('target', '_blank') - .on('click.download', function() { - navigator.msSaveBlob(blob, fileName); - }); - } + ui.restart = function(arg) { + context.locale(arg); + context.loadLocale(function(err) { + if (!err) { + context.container().selectAll('*').remove(); + render(context.container()); + if (renderCallback) renderCallback(); + } + }); + }; - linkEnter - .call(svgIcon('#icon-load', 'inline')) - .append('span') - .text(t('commit.download_changes')); + ui.sidebar = uiSidebar(context); - function mouseover(d) { - if (d.entity) { - context.surface().selectAll( - utilEntityOrMemberSelector([d.entity.id], context.graph()) - ).classed('hover', true); - } - } + return ui; + } + function uiChangesetEditor(context) { + var dispatch$$1 = dispatch('change'); + var formFields = uiFormFields(context); + var _fieldsArr; + var _tags; + var _changesetID; - function mouseout() { - context.surface().selectAll('.hover') - .classed('hover', false); - } + function changesetEditor(selection) { + render(selection); + } - function click(change) { - if (change.changeType === 'deleted') { - _entityID = null; - } else { - var entity = change.entity; - _entityID = change.entity.id; - context.map().zoomTo(entity); - context.surface().selectAll(utilEntityOrMemberSelector([_entityID], context.graph())) - .classed('hover', true); - } - } - } + function render(selection) { + var initial = false; - commitChanges.entityID = function(_) { - if (!arguments.length) return _entityID; - _entityID = _; - return commitChanges; - }; + if (!_fieldsArr) { + initial = true; + var presets = context.presets(); + _fieldsArr = [ + uiField(context, presets.field('comment'), null, { show: true, revert: false }), + uiField(context, presets.field('source'), null, { show: false, revert: false }), + uiField(context, presets.field('hashtags'), null, { show: false, revert: false }), + ]; - return commitChanges; -} + _fieldsArr.forEach(function(field) { + field + .on('change', function(t$$1, onInput) { + dispatch$$1.call('change', field, t$$1, onInput); + }); + }); + } -function uiCommitWarnings(context) { + _fieldsArr.forEach(function(field) { + field + .tags(_tags); + }); - function commitWarnings(selection) { - var changes = context.history().changes(); - var warnings = context.history().validate(changes); + selection + .call(formFields.fieldsArr(_fieldsArr)); - var container = selection.selectAll('.warning-section') - .data(warnings.length ? [0] : []); - container.exit() - .remove(); + if (initial) { + var commentField = selection.select('#preset-input-comment'); + var commentNode = commentField.node(); - var containerEnter = container.enter() - .append('div') - .attr('class', 'modal-section warning-section fillL2'); + if (commentNode) { + commentNode.focus(); + commentNode.select(); + } - containerEnter - .append('h3') - .text(t('commit.warnings')); + // trigger a 'blur' event so that comment field can be cleaned + // and checked for hashtags, even if retrieved from localstorage + utilTriggerEvent(commentField, 'blur'); - containerEnter - .append('ul') - .attr('class', 'changeset-list'); + var osm = context.connection(); + if (osm) { + osm.userChangesets(function (err, changesets) { + if (err) return; - container = containerEnter - .merge(container); + var comments = changesets.map(function(changeset) { + return { + title: changeset.tags.comment, + value: changeset.tags.comment + }; + }); + commentField + .call(d3combobox() + .container(context.container()) + .caseSensitive(true) + .data(uniqBy(comments, 'title')) + ); + }); + } + } - var items = container.select('ul').selectAll('li') - .data(warnings); + // Add warning if comment mentions Google + var hasGoogle = _tags.comment.match(/google/i); + var commentWarning = selection.select('.form-field-comment').selectAll('.comment-warning') + .data(hasGoogle ? [0] : []); + + commentWarning.exit() + .transition() + .duration(200) + .style('opacity', 0) + .remove(); + + var commentEnter = commentWarning.enter() + .insert('div', '.tag-reference-body') + .attr('class', 'field-warning comment-warning') + .style('opacity', 0); + + commentEnter + .append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .call(svgIcon('#icon-alert', 'inline')) + .attr('href', t('commit.google_warning_link')) + .append('span') + .text(t('commit.google_warning')); + + commentEnter + .transition() + .duration(200) + .style('opacity', 1); + } - items.exit() - .remove(); - var itemsEnter = items.enter() - .append('li') - .attr('class', 'warning-item'); + changesetEditor.tags = function(_) { + if (!arguments.length) return _tags; + _tags = _; + // Don't reset _fieldsArr here. + return changesetEditor; + }; - itemsEnter - .call(svgIcon('#icon-alert', 'pre-text')); - itemsEnter - .append('strong') - .text(function(d) { return d.message; }); + changesetEditor.changesetID = function(_) { + if (!arguments.length) return _changesetID; + if (_changesetID === _) return changesetEditor; + _changesetID = _; + _fieldsArr = null; + return changesetEditor; + }; - itemsEnter.filter(function(d) { return d.tooltip; }) - .call(tooltip() - .title(function(d) { return d.tooltip; }) - .placement('top') - ); - items = itemsEnter - .merge(items); + return utilRebind(changesetEditor, dispatch$$1, 'on'); + } - items - .on('mouseover', mouseover) - .on('mouseout', mouseout) - .on('click', warningClick); + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)); + }); + function uiCommitChanges(context) { + var detected = utilDetect(); + var _entityID; + + + function commitChanges(selection$$1) { + var history = context.history(); + var summary = history.difference().summary(); + + var container = selection$$1.selectAll('.modal-section.commit-section') + .data([0]); + + var containerEnter = container.enter() + .append('div') + .attr('class', 'commit-section modal-section fillL2'); + + containerEnter + .append('h3') + .text(t('commit.changes', { count: summary.length })); + + containerEnter + .append('ul') + .attr('class', 'changeset-list'); + + container = containerEnter + .merge(container); + + + var items = container.select('ul').selectAll('li') + .data(summary); + + var itemsEnter = items.enter() + .append('li') + .attr('class', 'change-item'); + + itemsEnter + .each(function(d) { + select(this) + .call(svgIcon('#icon-' + d.entity.geometry(d.graph), 'pre-text ' + d.changeType)); + }); + + itemsEnter + .append('span') + .attr('class', 'change-type') + .text(function(d) { return t('commit.' + d.changeType) + ' '; }); + + itemsEnter + .append('strong') + .attr('class', 'entity-type') + .text(function(d) { + var matched = context.presets().match(d.entity, d.graph); + return (matched && matched.name()) || utilDisplayType(d.entity.id); + }); + + itemsEnter + .append('span') + .attr('class', 'entity-name') + .text(function(d) { + var name = utilDisplayName(d.entity) || '', + string = ''; + if (name !== '') { + string += ':'; + } + return string += ' ' + name; + }); + + itemsEnter + .style('opacity', 0) + .transition() + .style('opacity', 1); + + items = itemsEnter + .merge(items); + + items + .on('mouseover', mouseover) + .on('mouseout', mouseout) + .on('click', click); + + + // Download changeset link + var changeset = new osmChangeset().update({ id: undefined }); + var changes = history.changes(actionDiscardTags(history.difference())); + + delete changeset.id; // Export without chnageset_id + + var data = JXON.stringify(changeset.osmChangeJXON(changes)); + var blob = new Blob([data], {type: 'text/xml;charset=utf-8;'}); + var fileName = 'changes.osc'; + + var linkEnter = container.selectAll('.download-changes') + .data([0]) + .enter() + .append('a') + .attr('class', 'download-changes'); + + if (detected.download) { // All except IE11 and Edge + linkEnter // download the data as a file + .attr('href', window.URL.createObjectURL(blob)) + .attr('download', fileName); + + } else { // IE11 and Edge + linkEnter // open data uri in a new tab + .attr('target', '_blank') + .on('click.download', function() { + navigator.msSaveBlob(blob, fileName); + }); + } - function mouseover(d) { - if (d.entity) { - context.surface().selectAll( - utilEntityOrMemberSelector([d.entity.id], context.graph()) - ).classed('hover', true); - } - } + linkEnter + .call(svgIcon('#icon-load', 'inline')) + .append('span') + .text(t('commit.download_changes')); - function mouseout() { - context.surface().selectAll('.hover') - .classed('hover', false); - } + function mouseover(d) { + if (d.entity) { + context.surface().selectAll( + utilEntityOrMemberSelector([d.entity.id], context.graph()) + ).classed('hover', true); + } + } - function warningClick(d) { - if (d.entity) { - context.map().zoomTo(d.entity); - context.enter(modeSelect(context, [d.entity.id])); - } - } + function mouseout() { + context.surface().selectAll('.hover') + .classed('hover', false); + } - } + function click(change) { + if (change.changeType === 'deleted') { + _entityID = null; + } else { + var entity = change.entity; + _entityID = change.entity.id; + context.map().zoomTo(entity); + context.surface().selectAll(utilEntityOrMemberSelector([_entityID], context.graph())) + .classed('hover', true); + } + } + } - return commitWarnings; -} -var _changeset$1; -var readOnlyTags = [ - /^_changesets_count$/, - /^created_by$/, - /^ideditor:/, - /^imagery_used$/, - /^host$/, - /^locale$/ -]; + commitChanges.entityID = function(_) { + if (!arguments.length) return _entityID; + _entityID = _; + return commitChanges; + }; -// treat most punctuation (except -, _, +, &) as hashtag delimiters - #4398 -// from https://stackoverflow.com/a/25575009 -var hashtagRegex = /(#[^\u2000-\u206F\u2E00-\u2E7F\s\\'!"#$%()*,.\/:;<=>?@\[\]^`{|}~]+)/g; + return commitChanges; + } -function uiCommit(context) { - var dispatch$$1 = dispatch('cancel', 'save'); - var _userDetails; - var _selection; + function uiCommitWarnings(context) { - var changesetEditor = uiChangesetEditor(context) - .on('change', changeTags); - var rawTagEditor = uiRawTagEditor(context) - .on('change', changeTags); - var commitChanges = uiCommitChanges(context); - var commitWarnings = uiCommitWarnings(context); + function commitWarnings(selection) { + var changes = context.history().changes(); + var warnings = context.history().validate(changes); - function commit(selection$$1) { - _selection = selection$$1; + var container = selection.selectAll('.warning-section') + .data(warnings.length ? [0] : []); - var osm = context.connection(); - if (!osm) return; + container.exit() + .remove(); - // expire stored comment and hashtags after cutoff datetime - #3947 - var commentDate = +context.storage('commentDate') || 0; - var currDate = Date.now(); - var cutoff = 2 * 86400 * 1000; // 2 days - if (commentDate > currDate || currDate - commentDate > cutoff) { - context.storage('comment', null); - context.storage('hashtags', null); - } + var containerEnter = container.enter() + .append('div') + .attr('class', 'modal-section warning-section fillL2'); - var tags; - if (!_changeset$1) { - var detected = utilDetect(); - tags = { - comment: context.storage('comment') || '', - created_by: ('iD ' + context.version).substr(0, 255), - host: detected.host.substr(0, 255), - locale: detected.locale.substr(0, 255) - }; + containerEnter + .append('h3') + .text(t('commit.warnings')); - // call findHashtags initially - this will remove stored - // hashtags if any hashtags are found in the comment - #4304 - findHashtags(tags, true); + containerEnter + .append('ul') + .attr('class', 'changeset-list'); - var hashtags = context.storage('hashtags'); - if (hashtags) { - tags.hashtags = hashtags; - } + container = containerEnter + .merge(container); - _changeset$1 = new osmChangeset({ tags: tags }); - } - tags = clone(_changeset$1.tags); - tags.imagery_used = context.history().imageryUsed().join(';').substr(0, 255); - _changeset$1 = _changeset$1.update({ tags: tags }); + var items = container.select('ul').selectAll('li') + .data(warnings); - var header = selection$$1.selectAll('.header') - .data([0]); + items.exit() + .remove(); - header.enter() - .append('div') - .attr('class', 'header fillL') - .append('h3') - .text(t('commit.title')); + var itemsEnter = items.enter() + .append('li') + .attr('class', 'warning-item'); - var body = selection$$1.selectAll('.body') - .data([0]); + itemsEnter + .call(svgIcon('#icon-alert', 'pre-text')); - body = body.enter() - .append('div') - .attr('class', 'body') - .merge(body); + itemsEnter + .append('strong') + .text(function(d) { return d.message; }); + itemsEnter.filter(function(d) { return d.tooltip; }) + .call(tooltip() + .title(function(d) { return d.tooltip; }) + .placement('top') + ); - // Changeset Section - var changesetSection = body.selectAll('.changeset-editor') - .data([0]); + items = itemsEnter + .merge(items); - changesetSection = changesetSection.enter() - .append('div') - .attr('class', 'modal-section changeset-editor') - .merge(changesetSection); + items + .on('mouseover', mouseover) + .on('mouseout', mouseout) + .on('click', warningClick); - changesetSection - .call(changesetEditor - .changesetID(_changeset$1.id) - .tags(tags) - ); + function mouseover(d) { + if (d.entity) { + context.surface().selectAll( + utilEntityOrMemberSelector([d.entity.id], context.graph()) + ).classed('hover', true); + } + } - // Warnings - body.call(commitWarnings); + function mouseout() { + context.surface().selectAll('.hover') + .classed('hover', false); + } - // Upload Explanation - var saveSection = body.selectAll('.save-section') - .data([0]); - saveSection = saveSection.enter() - .append('div') - .attr('class','modal-section save-section fillL cf') - .merge(saveSection); + function warningClick(d) { + if (d.entity) { + context.map().zoomTo(d.entity); + context.enter(modeSelect(context, [d.entity.id])); + } + } - var prose = saveSection.selectAll('.commit-info') - .data([0]); + } - prose = prose.enter() - .append('p') - .attr('class', 'commit-info') - .text(t('commit.upload_explanation')) - .merge(prose); - osm.userDetails(function(err, user) { - if (err) return; + return commitWarnings; + } - var userLink = d3_select(document.createElement('div')); + var _changeset$1; + var readOnlyTags = [ + /^changesets_count$/, + /^created_by$/, + /^ideditor:/, + /^imagery_used$/, + /^host$/, + /^locale$/ + ]; - _userDetails = user; + // treat most punctuation (except -, _, +, &) as hashtag delimiters - #4398 + // from https://stackoverflow.com/a/25575009 + var hashtagRegex = /(#[^\u2000-\u206F\u2E00-\u2E7F\s\\'!"#$%()*,.\/:;<=>?@\[\]^`{|}~]+)/g; - if (user.image_url) { - userLink - .append('img') - .attr('src', user.image_url) - .attr('class', 'icon pre-text user-icon'); - } - userLink - .append('a') - .attr('class','user-info') - .text(user.display_name) - .attr('href', osm.userURL(user.display_name)) - .attr('tabindex', -1) - .attr('target', '_blank'); + function uiCommit(context) { + var dispatch$$1 = dispatch('cancel', 'save'); + var _userDetails; + var _selection; - prose - .html(t('commit.upload_explanation_with_user', { user: userLink.html() })); - }); + var changesetEditor = uiChangesetEditor(context) + .on('change', changeTags); + var rawTagEditor = uiRawTagEditor(context) + .on('change', changeTags); + var commitChanges = uiCommitChanges(context); + var commitWarnings = uiCommitWarnings(context); - // Request Review - var requestReview = saveSection.selectAll('.request-review') - .data([0]); - - // Enter - var requestReviewEnter = requestReview.enter() - .append('div') - .attr('class', 'request-review'); - - var labelEnter = requestReviewEnter - .append('label') - .attr('for', 'commit-input-request-review'); - - labelEnter - .append('input') - .attr('type', 'checkbox') - .attr('id', 'commit-input-request-review'); - - labelEnter - .append('span') - .text(t('commit.request_review')); - - // Update - requestReview = requestReview - .merge(requestReviewEnter); - - var requestReviewInput = requestReview.selectAll('input') - .property('checked', isReviewRequested(_changeset$1.tags)) - .on('change', toggleRequestReview); - - - // Buttons - var buttonSection = saveSection.selectAll('.buttons') - .data([0]); - - // enter - var buttonEnter = buttonSection.enter() - .append('div') - .attr('class', 'buttons fillL cf'); - - buttonEnter - .append('button') - .attr('class', 'secondary-action col5 button cancel-button') - .append('span') - .attr('class', 'label') - .text(t('commit.cancel')); - - buttonEnter - .append('button') - .attr('class', 'action col5 button save-button') - .append('span') - .attr('class', 'label') - .text(t('commit.save')); - - // update - buttonSection = buttonSection - .merge(buttonEnter); - - buttonSection.selectAll('.cancel-button') - .on('click.cancel', function() { - var selectedID = commitChanges.entityID(); - dispatch$$1.call('cancel', this, selectedID); - }); + function commit(selection$$1) { + _selection = selection$$1; - buttonSection.selectAll('.save-button') - .attr('disabled', function() { - var n = d3_select('#preset-input-comment').node(); - return (n && n.value.length) ? null : true; - }) - .on('click.save', function() { - this.blur(); // avoid keeping focus on the button - #4641 - dispatch$$1.call('save', this, _changeset$1); - }); + var osm = context.connection(); + if (!osm) return; + // expire stored comment, hashtags, source after cutoff datetime - #3947 #4899 + var commentDate = +context.storage('commentDate') || 0; + var currDate = Date.now(); + var cutoff = 2 * 86400 * 1000; // 2 days + if (commentDate > currDate || currDate - commentDate > cutoff) { + context.storage('comment', null); + context.storage('hashtags', null); + context.storage('source', null); + } - // Raw Tag Editor - var tagSection = body.selectAll('.tag-section.raw-tag-editor') - .data([0]); + var tags; + if (!_changeset$1) { + var detected = utilDetect(); + tags = { + comment: context.storage('comment') || '', + created_by: ('iD ' + context.version).substr(0, 255), + host: detected.host.substr(0, 255), + locale: detected.locale.substr(0, 255) + }; + + // call findHashtags initially - this will remove stored + // hashtags if any hashtags are found in the comment - #4304 + findHashtags(tags, true); + + var hashtags = context.storage('hashtags'); + if (hashtags) { + tags.hashtags = hashtags; + } + + var source = context.storage('source'); + if (source) { + tags.source = source; + } + + _changeset$1 = new osmChangeset({ tags: tags }); + } - tagSection = tagSection.enter() - .append('div') - .attr('class', 'modal-section tag-section raw-tag-editor') - .merge(tagSection); + tags = clone(_changeset$1.tags); + tags.imagery_used = context.history().imageryUsed().join(';').substr(0, 255); + _changeset$1 = _changeset$1.update({ tags: tags }); - var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty(); - tagSection - .call(rawTagEditor - .expanded(expanded) - .readOnlyTags(readOnlyTags) - .tags(clone(_changeset$1.tags)) - ); + var header = selection$$1.selectAll('.header') + .data([0]); + header.enter() + .append('div') + .attr('class', 'header fillL') + .append('h3') + .text(t('commit.title')); - // Change summary - body.call(commitChanges); + var body = selection$$1.selectAll('.body') + .data([0]); + body = body.enter() + .append('div') + .attr('class', 'body') + .merge(body); - function toggleRequestReview() { - var rr = requestReviewInput.property('checked'); - updateChangeset({ review_requested: (rr ? 'yes' : undefined) }); - var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty(); - tagSection - .call(rawTagEditor - .expanded(expanded) - .readOnlyTags(readOnlyTags) - .tags(clone(_changeset$1.tags)) - ); - } - } + // Changeset Section + var changesetSection = body.selectAll('.changeset-editor') + .data([0]); + changesetSection = changesetSection.enter() + .append('div') + .attr('class', 'modal-section changeset-editor') + .merge(changesetSection); - function changeTags(changed, onInput) { - if (changed.hasOwnProperty('comment')) { - if (changed.comment === undefined) { - changed.comment = ''; - } - if (!onInput) { - context.storage('comment', changed.comment); - context.storage('commentDate', Date.now()); - } - } + changesetSection + .call(changesetEditor + .changesetID(_changeset$1.id) + .tags(tags) + ); - updateChangeset(changed, onInput); - if (_selection) { - _selection.call(commit); - } - } + // Warnings + body.call(commitWarnings); - function findHashtags(tags, commentOnly) { - var inComment = commentTags(); - var inHashTags = hashTags(); + // Upload Explanation + var saveSection = body.selectAll('.save-section') + .data([0]); - if (inComment !== null) { // when hashtags are detected in comment... - context.storage('hashtags', null); // always remove stored hashtags - #4304 - if (commentOnly) { inHashTags = null; } // optionally override hashtags field - } - return unionBy(inComment, inHashTags, function (s) { - return s.toLowerCase(); - }); + saveSection = saveSection.enter() + .append('div') + .attr('class','modal-section save-section fillL cf') + .merge(saveSection); - // Extract hashtags from `comment` - function commentTags() { - return tags.comment - .replace(/http\S*/g, '') // drop anything that looks like a URL - #4289 - .match(hashtagRegex); - } + var prose = saveSection.selectAll('.commit-info') + .data([0]); - // Extract and clean hashtags from `hashtags` - function hashTags() { - var t$$1 = tags.hashtags || ''; - return t$$1 - .split(/[,;\s]+/) - .map(function (s) { - if (s[0] !== '#') { s = '#' + s; } // prepend '#' - var matched = s.match(hashtagRegex); - return matched && matched[0]; - }).filter(Boolean); // exclude falsey - } - } + prose = prose.enter() + .append('p') + .attr('class', 'commit-info') + .text(t('commit.upload_explanation')) + .merge(prose); + osm.userDetails(function(err, user) { + if (err) return; - function isReviewRequested(tags) { - var rr = tags.review_requested; - if (rr === undefined) return false; - rr = rr.trim().toLowerCase(); - return !(rr === '' || rr === 'no'); - } + var userLink = select(document.createElement('div')); + _userDetails = user; - function updateChangeset(changed, onInput) { - var tags = clone(_changeset$1.tags); + if (user.image_url) { + userLink + .append('img') + .attr('src', user.image_url) + .attr('class', 'icon pre-text user-icon'); + } - forEach(changed, function(v, k) { - k = k.trim().substr(0, 255); - if (readOnlyTags.indexOf(k) !== -1) return; + userLink + .append('a') + .attr('class','user-info') + .text(user.display_name) + .attr('href', osm.userURL(user.display_name)) + .attr('tabindex', -1) + .attr('target', '_blank'); - if (k !== '' && v !== undefined) { - if (onInput) { - tags[k] = v; - } else { - tags[k] = v.trim().substr(0, 255); - } - } else { - delete tags[k]; - } - }); + prose + .html(t('commit.upload_explanation_with_user', { user: userLink.html() })); + }); - if (!onInput) { - // when changing the comment, override hashtags with any found in comment. - var commentOnly = changed.hasOwnProperty('comment') && (changed.comment !== ''); - var arr = findHashtags(tags, commentOnly); - if (arr.length) { - tags.hashtags = arr.join(';').substr(0, 255); - context.storage('hashtags', tags.hashtags); - } else { - delete tags.hashtags; - context.storage('hashtags', null); - } - } - // always update userdetails, just in case user reauthenticates as someone else - if (_userDetails && _userDetails.changesets_count !== undefined) { - var changesetsCount = parseInt(_userDetails.changesets_count, 10) + 1; // #4283 - tags.changesets_count = String(changesetsCount); - - // first 100 edits - new user - if (changesetsCount <= 100) { - var s; - s = context.storage('walkthrough_completed'); - if (s) { - tags['ideditor:walkthrough_completed'] = s; - } - - s = context.storage('walkthrough_progress'); - if (s) { - tags['ideditor:walkthrough_progress'] = s; - } - - s = context.storage('walkthrough_started'); - if (s) { - tags['ideditor:walkthrough_started'] = s; - } - } - } else { - delete tags.changesets_count; - } + // Request Review + var requestReview = saveSection.selectAll('.request-review') + .data([0]); + + // Enter + var requestReviewEnter = requestReview.enter() + .append('div') + .attr('class', 'request-review'); + + var labelEnter = requestReviewEnter + .append('label') + .attr('for', 'commit-input-request-review'); + + labelEnter + .append('input') + .attr('type', 'checkbox') + .attr('id', 'commit-input-request-review'); + + labelEnter + .append('span') + .text(t('commit.request_review')); + + // Update + requestReview = requestReview + .merge(requestReviewEnter); + + var requestReviewInput = requestReview.selectAll('input') + .property('checked', isReviewRequested(_changeset$1.tags)) + .on('change', toggleRequestReview); + + + // Buttons + var buttonSection = saveSection.selectAll('.buttons') + .data([0]); + + // enter + var buttonEnter = buttonSection.enter() + .append('div') + .attr('class', 'buttons fillL cf'); + + buttonEnter + .append('button') + .attr('class', 'secondary-action col5 button cancel-button') + .append('span') + .attr('class', 'label') + .text(t('commit.cancel')); + + buttonEnter + .append('button') + .attr('class', 'action col5 button save-button') + .append('span') + .attr('class', 'label') + .text(t('commit.save')); + + // update + buttonSection = buttonSection + .merge(buttonEnter); + + buttonSection.selectAll('.cancel-button') + .on('click.cancel', function() { + var selectedID = commitChanges.entityID(); + dispatch$$1.call('cancel', this, selectedID); + }); + + buttonSection.selectAll('.save-button') + .attr('disabled', function() { + var n = select('#preset-input-comment').node(); + return (n && n.value.length) ? null : true; + }) + .on('click.save', function() { + this.blur(); // avoid keeping focus on the button - #4641 + dispatch$$1.call('save', this, _changeset$1); + }); + + + // Raw Tag Editor + var tagSection = body.selectAll('.tag-section.raw-tag-editor') + .data([0]); + + tagSection = tagSection.enter() + .append('div') + .attr('class', 'modal-section tag-section raw-tag-editor') + .merge(tagSection); + + var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty(); + tagSection + .call(rawTagEditor + .expanded(expanded) + .readOnlyTags(readOnlyTags) + .tags(clone(_changeset$1.tags)) + ); + + + // Change summary + body.call(commitChanges); + + + function toggleRequestReview() { + var rr = requestReviewInput.property('checked'); + updateChangeset({ review_requested: (rr ? 'yes' : undefined) }); + + var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty(); + tagSection + .call(rawTagEditor + .expanded(expanded) + .readOnlyTags(readOnlyTags) + .tags(clone(_changeset$1.tags)) + ); + } + } - if (!isEqual(_changeset$1.tags, tags)) { - _changeset$1 = _changeset$1.update({ tags: tags }); - } - } + function changeTags(changed, onInput) { + if (changed.hasOwnProperty('comment')) { + if (changed.comment === undefined) { + changed.comment = ''; + } + if (!onInput) { + context.storage('comment', changed.comment); + context.storage('commentDate', Date.now()); + } + } + if (changed.hasOwnProperty('source')) { + if (!onInput) { + context.storage('source', changed.source); + context.storage('commentDate', Date.now()); + } + } - commit.reset = function() { - _changeset$1 = null; - }; + updateChangeset(changed, onInput); + if (_selection) { + _selection.call(commit); + } + } - return utilRebind(commit, dispatch$$1, 'on'); -} -function uiConfirm(selection) { - var modalSelection = uiModal(selection); + function findHashtags(tags, commentOnly) { + var inComment = commentTags(); + var inHashTags = hashTags(); - modalSelection.select('.modal') - .classed('modal-alert', true); + if (inComment !== null) { // when hashtags are detected in comment... + context.storage('hashtags', null); // always remove stored hashtags - #4304 + if (commentOnly) { inHashTags = null; } // optionally override hashtags field + } + return unionBy(inComment, inHashTags, function (s) { + return s.toLowerCase(); + }); - var section = modalSelection.select('.content'); + // Extract hashtags from `comment` + function commentTags() { + return tags.comment + .replace(/http\S*/g, '') // drop anything that looks like a URL - #4289 + .match(hashtagRegex); + } - section.append('div') - .attr('class', 'modal-section header'); + // Extract and clean hashtags from `hashtags` + function hashTags() { + var t$$1 = tags.hashtags || ''; + return t$$1 + .split(/[,;\s]+/) + .map(function (s) { + if (s[0] !== '#') { s = '#' + s; } // prepend '#' + var matched = s.match(hashtagRegex); + return matched && matched[0]; + }).filter(Boolean); // exclude falsey + } + } - section.append('div') - .attr('class', 'modal-section message-text'); - var buttons = section.append('div') - .attr('class', 'modal-section buttons cf'); + function isReviewRequested(tags) { + var rr = tags.review_requested; + if (rr === undefined) return false; + rr = rr.trim().toLowerCase(); + return !(rr === '' || rr === 'no'); + } - modalSelection.okButton = function() { - buttons - .append('button') - .attr('class', 'action col4') - .on('click.confirm', function() { - modalSelection.remove(); - }) - .text(t('confirm.okay')) - .node() - .focus(); + function updateChangeset(changed, onInput) { + var tags = clone(_changeset$1.tags); - return modalSelection; - }; + forEach(changed, function(v, k) { + k = k.trim().substr(0, 255); + if (readOnlyTags.indexOf(k) !== -1) return; + if (k !== '' && v !== undefined) { + if (onInput) { + tags[k] = v; + } else { + tags[k] = v.trim().substr(0, 255); + } + } else { + delete tags[k]; + } + }); - return modalSelection; -} + if (!onInput) { + // when changing the comment, override hashtags with any found in comment. + var commentOnly = changed.hasOwnProperty('comment') && (changed.comment !== ''); + var arr = findHashtags(tags, commentOnly); + if (arr.length) { + tags.hashtags = arr.join(';').substr(0, 255); + context.storage('hashtags', tags.hashtags); + } else { + delete tags.hashtags; + context.storage('hashtags', null); + } + } -function uiConflicts(context) { - var dispatch$$1 = dispatch('cancel', 'save'); - var keybinding = d3keybinding('conflicts'); - var _origChanges; - var _conflictList; + // always update userdetails, just in case user reauthenticates as someone else + if (_userDetails && _userDetails.changesets_count !== undefined) { + var changesetsCount = parseInt(_userDetails.changesets_count, 10) + 1; // #4283 + tags.changesets_count = String(changesetsCount); + + // first 100 edits - new user + if (changesetsCount <= 100) { + var s; + s = context.storage('walkthrough_completed'); + if (s) { + tags['ideditor:walkthrough_completed'] = s; + } + + s = context.storage('walkthrough_progress'); + if (s) { + tags['ideditor:walkthrough_progress'] = s; + } + + s = context.storage('walkthrough_started'); + if (s) { + tags['ideditor:walkthrough_started'] = s; + } + } + } else { + delete tags.changesets_count; + } + if (!isEqual(_changeset$1.tags, tags)) { + _changeset$1 = _changeset$1.update({ tags: tags }); + } + } - function keybindingOn() { - d3_select(document) - .call(keybinding.on('⎋', cancel, true)); - } - function keybindingOff() { - d3_select(document) - .call(keybinding.off); - } + commit.reset = function() { + _changeset$1 = null; + }; - function tryAgain() { - keybindingOff(); - dispatch$$1.call('save'); - } - function cancel() { - keybindingOff(); - dispatch$$1.call('cancel'); - } + return utilRebind(commit, dispatch$$1, 'on'); + } + function uiConfirm(selection) { + var modalSelection = uiModal(selection); - function conflicts(selection$$1) { - keybindingOn(); + modalSelection.select('.modal') + .classed('modal-alert', true); - var headerEnter = selection$$1.selectAll('.header') - .data([0]) - .enter() - .append('div') - .attr('class', 'header fillL'); + var section = modalSelection.select('.content'); - headerEnter - .append('button') - .attr('class', 'fr') - .on('click', cancel) - .call(svgIcon('#icon-close')); + section.append('div') + .attr('class', 'modal-section header'); - headerEnter - .append('h3') - .text(t('save.conflict.header')); + section.append('div') + .attr('class', 'modal-section message-text'); - var bodyEnter = selection$$1.selectAll('.body') - .data([0]) - .enter() - .append('div') - .attr('class', 'body fillL'); + var buttons = section.append('div') + .attr('class', 'modal-section buttons cf'); - var conflictsHelpEnter = bodyEnter - .append('div') - .attr('class', 'conflicts-help') - .text(t('save.conflict.help')); + modalSelection.okButton = function() { + buttons + .append('button') + .attr('class', 'action col4') + .on('click.confirm', function() { + modalSelection.remove(); + }) + .text(t('confirm.okay')) + .node() + .focus(); - // Download changes link - var detected = utilDetect(); - var changeset = new osmChangeset(); + return modalSelection; + }; - delete changeset.id; // Export without changeset_id - var data = JXON.stringify(changeset.osmChangeJXON(_origChanges)); - var blob = new Blob([data], { type: 'text/xml;charset=utf-8;' }); - var fileName = 'changes.osc'; + return modalSelection; + } - var linkEnter = conflictsHelpEnter.selectAll('.download-changes') - .append('a') - .attr('class', 'download-changes'); + function uiConflicts(context) { + var dispatch$$1 = dispatch('cancel', 'save'); + var keybinding = d3keybinding('conflicts'); + var _origChanges; + var _conflictList; - if (detected.download) { // All except IE11 and Edge - linkEnter // download the data as a file - .attr('href', window.URL.createObjectURL(blob)) - .attr('download', fileName); - } else { // IE11 and Edge - linkEnter // open data uri in a new tab - .attr('target', '_blank') - .on('click.download', function() { - navigator.msSaveBlob(blob, fileName); - }); - } + function keybindingOn() { + select(document) + .call(keybinding.on('⎋', cancel, true)); + } - linkEnter - .call(svgIcon('#icon-load', 'inline')) - .append('span') - .text(t('save.conflict.download_changes')); + function keybindingOff() { + select(document) + .call(keybinding.off); + } + function tryAgain() { + keybindingOff(); + dispatch$$1.call('save'); + } - bodyEnter - .append('div') - .attr('class', 'conflict-container fillL3') - .call(showConflict, 0); + function cancel() { + keybindingOff(); + dispatch$$1.call('cancel'); + } - bodyEnter - .append('div') - .attr('class', 'conflicts-done') - .attr('opacity', 0) - .style('display', 'none') - .text(t('save.conflict.done')); - var buttonsEnter = bodyEnter - .append('div') - .attr('class','buttons col12 joined conflicts-buttons'); + function conflicts(selection$$1) { + keybindingOn(); - buttonsEnter - .append('button') - .attr('disabled', _conflictList.length > 1) - .attr('class', 'action conflicts-button col6') - .text(t('save.title')) - .on('click.try_again', tryAgain); + var headerEnter = selection$$1.selectAll('.header') + .data([0]) + .enter() + .append('div') + .attr('class', 'header fillL'); - buttonsEnter - .append('button') - .attr('class', 'secondary-action conflicts-button col6') - .text(t('confirm.cancel')) - .on('click.cancel', cancel); - } + headerEnter + .append('button') + .attr('class', 'fr') + .on('click', cancel) + .call(svgIcon('#icon-close')); + headerEnter + .append('h3') + .text(t('save.conflict.header')); - function showConflict(selection$$1, index) { - index = utilWrap(index, _conflictList.length); + var bodyEnter = selection$$1.selectAll('.body') + .data([0]) + .enter() + .append('div') + .attr('class', 'body fillL'); - var parent = d3_select(selection$$1.node().parentNode); + var conflictsHelpEnter = bodyEnter + .append('div') + .attr('class', 'conflicts-help') + .text(t('save.conflict.help')); - // enable save button if this is the last conflict being reviewed.. - if (index === _conflictList.length - 1) { - window.setTimeout(function() { - parent.select('.conflicts-button') - .attr('disabled', null); - parent.select('.conflicts-done') - .transition() - .attr('opacity', 1) - .style('display', 'block'); - }, 250); - } + // Download changes link + var detected = utilDetect(); + var changeset = new osmChangeset(); - var conflict = selection$$1 - .selectAll('.conflict') - .data([_conflictList[index]]); - - conflict.exit() - .remove(); - - var conflictEnter = conflict.enter() - .append('div') - .attr('class', 'conflict'); - - conflictEnter - .append('h4') - .attr('class', 'conflict-count') - .text(t('save.conflict.count', { num: index + 1, total: _conflictList.length })); - - conflictEnter - .append('a') - .attr('class', 'conflict-description') - .attr('href', '#') - .text(function(d) { return d.name; }) - .on('click', function(d) { - event.preventDefault(); - zoomToEntity(d.id); - }); + delete changeset.id; // Export without changeset_id - var details = conflictEnter - .append('div') - .attr('class', 'conflict-detail-container'); - - details - .append('ul') - .attr('class', 'conflict-detail-list') - .selectAll('li') - .data(function(d) { return d.details || []; }) - .enter() - .append('li') - .attr('class', 'conflict-detail-item') - .html(function(d) { return d; }); - - details - .append('div') - .attr('class', 'conflict-choices') - .call(addChoices); - - details - .append('div') - .attr('class', 'conflict-nav-buttons joined cf') - .selectAll('button') - .data(['previous', 'next']) - .enter() - .append('button') - .text(function(d) { return t('save.conflict.' + d); }) - .attr('class', 'conflict-nav-button action col6') - .attr('disabled', function(d, i) { - return (i === 0 && index === 0) || - (i === 1 && index === _conflictList.length - 1) || null; - }) - .on('click', function(d, i) { - event.preventDefault(); - - var container = parent.selectAll('.conflict-container'); - var sign = (i === 0 ? -1 : 1); - - container - .selectAll('.conflict') - .remove(); - - container - .call(showConflict, index + sign); - }); + var data = JXON.stringify(changeset.osmChangeJXON(_origChanges)); + var blob = new Blob([data], { type: 'text/xml;charset=utf-8;' }); + var fileName = 'changes.osc'; - } + var linkEnter = conflictsHelpEnter.selectAll('.download-changes') + .append('a') + .attr('class', 'download-changes'); + if (detected.download) { // All except IE11 and Edge + linkEnter // download the data as a file + .attr('href', window.URL.createObjectURL(blob)) + .attr('download', fileName); - function addChoices(selection$$1) { - var choices = selection$$1 - .append('ul') - .attr('class', 'layer-list') - .selectAll('li') - .data(function(d) { return d.choices || []; }); + } else { // IE11 and Edge + linkEnter // open data uri in a new tab + .attr('target', '_blank') + .on('click.download', function() { + navigator.msSaveBlob(blob, fileName); + }); + } - // enter - var choicesEnter = choices.enter() - .append('li') - .attr('class', 'layer'); + linkEnter + .call(svgIcon('#icon-load', 'inline')) + .append('span') + .text(t('save.conflict.download_changes')); + + + bodyEnter + .append('div') + .attr('class', 'conflict-container fillL3') + .call(showConflict, 0); + + bodyEnter + .append('div') + .attr('class', 'conflicts-done') + .attr('opacity', 0) + .style('display', 'none') + .text(t('save.conflict.done')); + + var buttonsEnter = bodyEnter + .append('div') + .attr('class','buttons col12 joined conflicts-buttons'); + + buttonsEnter + .append('button') + .attr('disabled', _conflictList.length > 1) + .attr('class', 'action conflicts-button col6') + .text(t('save.title')) + .on('click.try_again', tryAgain); + + buttonsEnter + .append('button') + .attr('class', 'secondary-action conflicts-button col6') + .text(t('confirm.cancel')) + .on('click.cancel', cancel); + } - var labelEnter = choicesEnter - .append('label'); - labelEnter - .append('input') - .attr('type', 'radio') - .attr('name', function(d) { return d.id; }) - .on('change', function(d, i) { - var ul = this.parentNode.parentNode.parentNode; - ul.__data__.chosen = i; - choose(ul, d); - }); + function showConflict(selection$$1, index) { + index = utilWrap(index, _conflictList.length); - labelEnter - .append('span') - .text(function(d) { return d.text; }); - - // update - choicesEnter - .merge(choices) - .each(function(d, i) { - var ul = this.parentNode; - if (ul.__data__.chosen === i) { - choose(ul, d); - } - }); - } + var parent = select(selection$$1.node().parentNode); + // enable save button if this is the last conflict being reviewed.. + if (index === _conflictList.length - 1) { + window.setTimeout(function() { + parent.select('.conflicts-button') + .attr('disabled', null); - function choose(ul, datum) { - if (event) event.preventDefault(); + parent.select('.conflicts-done') + .transition() + .attr('opacity', 1) + .style('display', 'block'); + }, 250); + } - d3_select(ul) - .selectAll('li') - .classed('active', function(d) { return d === datum; }) - .selectAll('input') - .property('checked', function(d) { return d === datum; }); + var conflict = selection$$1 + .selectAll('.conflict') + .data([_conflictList[index]]); + + conflict.exit() + .remove(); + + var conflictEnter = conflict.enter() + .append('div') + .attr('class', 'conflict'); + + conflictEnter + .append('h4') + .attr('class', 'conflict-count') + .text(t('save.conflict.count', { num: index + 1, total: _conflictList.length })); + + conflictEnter + .append('a') + .attr('class', 'conflict-description') + .attr('href', '#') + .text(function(d) { return d.name; }) + .on('click', function(d) { + event.preventDefault(); + zoomToEntity(d.id); + }); + + var details = conflictEnter + .append('div') + .attr('class', 'conflict-detail-container'); + + details + .append('ul') + .attr('class', 'conflict-detail-list') + .selectAll('li') + .data(function(d) { return d.details || []; }) + .enter() + .append('li') + .attr('class', 'conflict-detail-item') + .html(function(d) { return d; }); + + details + .append('div') + .attr('class', 'conflict-choices') + .call(addChoices); + + details + .append('div') + .attr('class', 'conflict-nav-buttons joined cf') + .selectAll('button') + .data(['previous', 'next']) + .enter() + .append('button') + .text(function(d) { return t('save.conflict.' + d); }) + .attr('class', 'conflict-nav-button action col6') + .attr('disabled', function(d, i) { + return (i === 0 && index === 0) || + (i === 1 && index === _conflictList.length - 1) || null; + }) + .on('click', function(d, i) { + event.preventDefault(); + + var container = parent.selectAll('.conflict-container'); + var sign = (i === 0 ? -1 : 1); + + container + .selectAll('.conflict') + .remove(); + + container + .call(showConflict, index + sign); + }); - var extent = geoExtent$$1(); - var entity; + } - entity = context.graph().hasEntity(datum.id); - if (entity) extent._extend(entity.extent(context.graph())); - datum.action(); + function addChoices(selection$$1) { + var choices = selection$$1 + .append('ul') + .attr('class', 'layer-list') + .selectAll('li') + .data(function(d) { return d.choices || []; }); + + // enter + var choicesEnter = choices.enter() + .append('li') + .attr('class', 'layer'); + + var labelEnter = choicesEnter + .append('label'); + + labelEnter + .append('input') + .attr('type', 'radio') + .attr('name', function(d) { return d.id; }) + .on('change', function(d, i) { + var ul = this.parentNode.parentNode.parentNode; + ul.__data__.chosen = i; + choose(ul, d); + }); + + labelEnter + .append('span') + .text(function(d) { return d.text; }); + + // update + choicesEnter + .merge(choices) + .each(function(d, i) { + var ul = this.parentNode; + if (ul.__data__.chosen === i) { + choose(ul, d); + } + }); + } - entity = context.graph().hasEntity(datum.id); - if (entity) extent._extend(entity.extent(context.graph())); - zoomToEntity(datum.id, extent); - } + function choose(ul, datum) { + if (event) event.preventDefault(); + select(ul) + .selectAll('li') + .classed('active', function(d) { return d === datum; }) + .selectAll('input') + .property('checked', function(d) { return d === datum; }); - function zoomToEntity(id, extent) { - context.surface().selectAll('.hover') - .classed('hover', false); + var extent = geoExtent$$1(); + var entity; - var entity = context.graph().hasEntity(id); - if (entity) { - if (extent) { - context.map().trimmedExtent(extent); - } else { - context.map().zoomTo(entity); - } - context.surface().selectAll(utilEntityOrMemberSelector([entity.id], context.graph())) - .classed('hover', true); - } - } + entity = context.graph().hasEntity(datum.id); + if (entity) extent._extend(entity.extent(context.graph())); + datum.action(); - // The conflict list should be an array of objects like: - // { - // id: id, - // name: entityName(local), - // details: merge.conflicts(), - // chosen: 1, - // choices: [ - // choice(id, keepMine, forceLocal), - // choice(id, keepTheirs, forceRemote) - // ] - // } - conflicts.conflictList = function(_) { - if (!arguments.length) return _conflictList; - _conflictList = _; - return conflicts; - }; + entity = context.graph().hasEntity(datum.id); + if (entity) extent._extend(entity.extent(context.graph())); + zoomToEntity(datum.id, extent); + } - conflicts.origChanges = function(_) { - if (!arguments.length) return _origChanges; - _origChanges = _; - return conflicts; - }; + function zoomToEntity(id, extent) { + context.surface().selectAll('.hover') + .classed('hover', false); - return utilRebind(conflicts, dispatch$$1, 'on'); -} + var entity = context.graph().hasEntity(id); + if (entity) { + if (extent) { + context.map().trimmedExtent(extent); + } else { + context.map().zoomTo(entity); + } + context.surface().selectAll(utilEntityOrMemberSelector([entity.id], context.graph())) + .classed('hover', true); + } + } -function uiEditMenu(context, operations) { - var menu, - center = [0, 0], - offset = [0, 0], - tooltip; - var p = 8, // top padding - m = 4, // top margin - h = 15, // height of icon - vpBottomMargin = 45, // viewport bottom margin - vpSideMargin = 35, // viewport side margin - buttonWidth = 44, - buttonHeight = (2 * p + h), - menuWidth = buttonWidth, - menuHeight = (2 * m) + operations.length * buttonHeight, - menuSideMargin = 10, - tooltipWidth = 200, - tooltipHeight = 200; // a reasonable guess, real height depends on tooltip contents + // The conflict list should be an array of objects like: + // { + // id: id, + // name: entityName(local), + // details: merge.conflicts(), + // chosen: 1, + // choices: [ + // choice(id, keepMine, forceLocal), + // choice(id, keepTheirs, forceRemote) + // ] + // } + conflicts.conflictList = function(_) { + if (!arguments.length) return _conflictList; + _conflictList = _; + return conflicts; + }; - var editMenu = function (selection$$1) { - if (!operations.length) return; + conflicts.origChanges = function(_) { + if (!arguments.length) return _origChanges; + _origChanges = _; + return conflicts; + }; - selection$$1.node().parentNode.focus(); - var isRTL = textDirection === 'rtl', - viewport = context.surfaceRect(); + return utilRebind(conflicts, dispatch$$1, 'on'); + } - if (!isRTL && (center[0] + menuSideMargin + menuWidth) > (viewport.width - vpSideMargin)) { - // menu is going left-to-right and near right viewport edge, go left instead - isRTL = true; - } else if (isRTL && (center[0] - menuSideMargin - menuWidth) < vpSideMargin) { - // menu is going right-to-left and near left viewport edge, go right instead - isRTL = false; - } + function uiEditMenu(context, operations) { + var menu, + center = [0, 0], + offset = [0, 0], + tooltip; - offset[0] = (isRTL ? -1 * (menuSideMargin + menuWidth) : menuSideMargin); + var p = 8, // top padding + m = 4, // top margin + h = 15, // height of icon + vpBottomMargin = 45, // viewport bottom margin + vpSideMargin = 35, // viewport side margin + buttonWidth = 44, + buttonHeight = (2 * p + h), + menuWidth = buttonWidth, + menuHeight = (2 * m) + operations.length * buttonHeight, + menuSideMargin = 10, + tooltipWidth = 200, + tooltipHeight = 200; // a reasonable guess, real height depends on tooltip contents - if (center[1] + menuHeight > (viewport.height - vpBottomMargin)) { - // menu is near bottom viewport edge, shift upwards - offset[1] = -1 * (center[1] + menuHeight - viewport.height + vpBottomMargin); - } - var origin = [ center[0] + offset[0], center[1] + offset[1] ]; - - menu = selection$$1 - .append('g') - .attr('class', 'edit-menu') - .attr('transform', 'translate(' + origin + ')') - .attr('opacity', 0); - - menu - .transition() - .attr('opacity', 1); - - menu - .append('rect') - .attr('class', 'edit-menu-background') - .attr('x', 4) - .attr('rx', 4) - .attr('ry', 4) - .attr('width', menuWidth) - .attr('height', menuHeight) - .attr('stroke-linecap', 'round'); - - - var button = menu.selectAll('.edit-menu-item') - .data(operations) - .enter() - .append('g') - .attr('class', function (d) { return 'edit-menu-item edit-menu-item-' + d.id; }) - .classed('disabled', function (d) { return d.disabled(); }) - .attr('transform', function (d, i) { - return 'translate(' + geoVecFloor([ - 0, - m + i * buttonHeight - ]).join(',') + ')'; - }); + var editMenu = function (selection$$1) { + if (!operations.length) return; - button - .append('rect') - .attr('x', 4) - .attr('width', buttonWidth) - .attr('height', buttonHeight) - .on('click', click) - .on('mousedown', mousedown) - .on('mouseover', mouseover) - .on('mouseout', mouseout); - - button - .append('use') - .attr('width', '20') - .attr('height', '20') - .attr('transform', function () { - return 'translate(' + [2 * p, 5] + ')'; - }) - .attr('xlink:href', function (d) { return '#operation-' + d.id; }); - - tooltip = d3_select(document.body) - .append('div') - .attr('class', 'tooltip-inner edit-menu-tooltip'); - - - function click(operation) { - event.stopPropagation(); - if (operation.disabled()) return; - operation(); - editMenu.close(); - } + selection$$1.node().parentNode.focus(); - function mousedown() { - event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869 - } + var isRTL = textDirection === 'rtl', + viewport = context.surfaceRect(); - function mouseover(d, i) { - var tipX, tipY; + if (!isRTL && (center[0] + menuSideMargin + menuWidth) > (viewport.width - vpSideMargin)) { + // menu is going left-to-right and near right viewport edge, go left instead + isRTL = true; + } else if (isRTL && (center[0] - menuSideMargin - menuWidth) < vpSideMargin) { + // menu is going right-to-left and near left viewport edge, go right instead + isRTL = false; + } - if (!isRTL) { - tipX = viewport.left + origin[0] + menuSideMargin + menuWidth; - } else { - tipX = viewport.left + origin[0] - 4 - tooltipWidth; - } + offset[0] = (isRTL ? -1 * (menuSideMargin + menuWidth) : menuSideMargin); - if (tipX + tooltipWidth > viewport.right) { - // tip is going left-to-right and near right viewport edge, go left instead - tipX = viewport.left + origin[0] - 4 - tooltipWidth; - } else if (tipX < viewport.left) { - // tip is going right-to-left and near left viewport edge, go right instead - tipX = viewport.left + origin[0] + menuSideMargin + menuWidth; - } + if (center[1] + menuHeight > (viewport.height - vpBottomMargin)) { + // menu is near bottom viewport edge, shift upwards + offset[1] = -1 * (center[1] + menuHeight - viewport.height + vpBottomMargin); + } - tipY = viewport.top + origin[1] + (i * buttonHeight); - if (tipY + tooltipHeight > viewport.bottom) { - // tip is near bottom viewport edge, shift upwards - tipY -= tipY + tooltipHeight - viewport.bottom; - } + var origin = [ center[0] + offset[0], center[1] + offset[1] ]; + + menu = selection$$1 + .append('g') + .attr('class', 'edit-menu') + .attr('transform', 'translate(' + origin + ')') + .attr('opacity', 0); + + menu + .transition() + .attr('opacity', 1); + + menu + .append('rect') + .attr('class', 'edit-menu-background') + .attr('x', 4) + .attr('rx', 4) + .attr('ry', 4) + .attr('width', menuWidth) + .attr('height', menuHeight) + .attr('stroke-linecap', 'round'); + + + var button = menu.selectAll('.edit-menu-item') + .data(operations) + .enter() + .append('g') + .attr('class', function (d) { return 'edit-menu-item edit-menu-item-' + d.id; }) + .classed('disabled', function (d) { return d.disabled(); }) + .attr('transform', function (d, i) { + return 'translate(' + geoVecFloor([ + 0, + m + i * buttonHeight + ]).join(',') + ')'; + }); + + button + .append('rect') + .attr('x', 4) + .attr('width', buttonWidth) + .attr('height', buttonHeight) + .on('click', click) + .on('mousedown', mousedown) + .on('mouseover', mouseover) + .on('mouseout', mouseout); + + button + .append('use') + .attr('width', '20') + .attr('height', '20') + .attr('transform', function () { + return 'translate(' + [2 * p, 5] + ')'; + }) + .attr('xlink:href', function (d) { return '#operation-' + d.id; }); + + tooltip = select(document.body) + .append('div') + .attr('class', 'tooltip-inner edit-menu-tooltip'); + + + function click(operation) { + event.stopPropagation(); + if (operation.disabled()) return; + operation(); + editMenu.close(); + } - tooltip - .style('left', tipX + 'px') - .style('top', tipY + 'px') - .style('display', 'block') - .html(uiTooltipHtml(d.tooltip(), d.keys[0], d.title)); - } + function mousedown() { + event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869 + } - function mouseout() { - tooltip.style('display', 'none'); - } - }; + function mouseover(d, i) { + var tipX, tipY; + + if (!isRTL) { + tipX = viewport.left + origin[0] + menuSideMargin + menuWidth; + } else { + tipX = viewport.left + origin[0] - 4 - tooltipWidth; + } + + if (tipX + tooltipWidth > viewport.right) { + // tip is going left-to-right and near right viewport edge, go left instead + tipX = viewport.left + origin[0] - 4 - tooltipWidth; + } else if (tipX < viewport.left) { + // tip is going right-to-left and near left viewport edge, go right instead + tipX = viewport.left + origin[0] + menuSideMargin + menuWidth; + } + + tipY = viewport.top + origin[1] + (i * buttonHeight); + if (tipY + tooltipHeight > viewport.bottom) { + // tip is near bottom viewport edge, shift upwards + tipY -= tipY + tooltipHeight - viewport.bottom; + } + + tooltip + .style('left', tipX + 'px') + .style('top', tipY + 'px') + .style('display', 'block') + .html(uiTooltipHtml(d.tooltip(), d.keys[0], d.title)); + } + function mouseout() { + tooltip.style('display', 'none'); + } + }; - editMenu.close = function () { - if (menu) { - menu - .style('pointer-events', 'none') - .transition() - .attr('opacity', 0) - .remove(); - } - if (tooltip) { - tooltip.remove(); - } - }; + editMenu.close = function () { + if (menu) { + menu + .style('pointer-events', 'none') + .transition() + .attr('opacity', 0) + .remove(); + } + if (tooltip) { + tooltip.remove(); + } + }; - editMenu.center = function (_) { - if (!arguments.length) return center; - center = _; - return editMenu; - }; + editMenu.center = function (_) { + if (!arguments.length) return center; + center = _; + return editMenu; + }; - return editMenu; -} -var _flashTimer; + return editMenu; + } + var _flashTimer; -function uiFlash() { - var _duration = 2000; - var _iconName = '#icon-no'; - var _iconClass = 'disabled'; - var _text = ''; - var _textClass; + function uiFlash() { + var _duration = 2000; + var _iconName = '#icon-no'; + var _iconClass = 'disabled'; + var _text = ''; + var _textClass; - function flash() { - if (_flashTimer) { - _flashTimer.stop(); - } - d3_select('#footer-wrap') - .attr('class', 'footer-hide'); - d3_select('#flash-wrap') - .attr('class', 'footer-show'); + function flash() { + if (_flashTimer) { + _flashTimer.stop(); + } - var content = d3_select('#flash-wrap').selectAll('.flash-content') - .data([0]); + select('#footer-wrap') + .attr('class', 'footer-hide'); + select('#flash-wrap') + .attr('class', 'footer-show'); - // Enter - var contentEnter = content.enter() - .append('div') - .attr('class', 'flash-content'); + var content = select('#flash-wrap').selectAll('.flash-content') + .data([0]); - var iconEnter = contentEnter - .append('svg') - .attr('class', 'flash-icon') - .append('g') - .attr('transform', 'translate(10,10)'); + // Enter + var contentEnter = content.enter() + .append('div') + .attr('class', 'flash-content'); - iconEnter - .append('circle') - .attr('r', 9); + var iconEnter = contentEnter + .append('svg') + .attr('class', 'flash-icon') + .append('g') + .attr('transform', 'translate(10,10)'); - iconEnter - .append('use') - .attr('transform', 'translate(-7,-7)') - .attr('width', '14') - .attr('height', '14'); + iconEnter + .append('circle') + .attr('r', 9); - contentEnter - .append('div') - .attr('class', 'flash-text'); + iconEnter + .append('use') + .attr('transform', 'translate(-7,-7)') + .attr('width', '14') + .attr('height', '14'); + contentEnter + .append('div') + .attr('class', 'flash-text'); - // Update - content = content - .merge(contentEnter); - content - .selectAll('.flash-icon') - .attr('class', 'flash-icon ' + (_iconClass || '')); + // Update + content = content + .merge(contentEnter); - content - .selectAll('.flash-icon use') - .attr('xlink:href', _iconName); + content + .selectAll('.flash-icon') + .attr('class', 'flash-icon ' + (_iconClass || '')); - content - .selectAll('.flash-text') - .attr('class', 'flash-text ' + (_textClass || '')) - .text(_text); + content + .selectAll('.flash-icon use') + .attr('xlink:href', _iconName); + content + .selectAll('.flash-text') + .attr('class', 'flash-text ' + (_textClass || '')) + .text(_text); - _flashTimer = d3_timeout(function() { - _flashTimer = null; - d3_select('#footer-wrap') - .attr('class', 'footer-show'); - d3_select('#flash-wrap') - .attr('class', 'footer-hide'); - }, _duration); - return content; - } + _flashTimer = timeout$1(function() { + _flashTimer = null; + select('#footer-wrap') + .attr('class', 'footer-show'); + select('#flash-wrap') + .attr('class', 'footer-hide'); + }, _duration); + return content; + } - flash.duration = function(_) { - if (!arguments.length) return _duration; - _duration = _; - return flash; - }; - flash.text = function(_) { - if (!arguments.length) return _text; - _text = _; - return flash; - }; + flash.duration = function(_) { + if (!arguments.length) return _duration; + _duration = _; + return flash; + }; - flash.textClass = function(_) { - if (!arguments.length) return _textClass; - _textClass = _; - return flash; - }; + flash.text = function(_) { + if (!arguments.length) return _text; + _text = _; + return flash; + }; - flash.iconName = function(_) { - if (!arguments.length) return _iconName; - _iconName = _; - return flash; - }; + flash.textClass = function(_) { + if (!arguments.length) return _textClass; + _textClass = _; + return flash; + }; - flash.iconClass = function(_) { - if (!arguments.length) return _iconClass; - _iconClass = _; - return flash; - }; + flash.iconName = function(_) { + if (!arguments.length) return _iconName; + _iconName = _; + return flash; + }; - return flash; -} + flash.iconClass = function(_) { + if (!arguments.length) return _iconClass; + _iconClass = _; + return flash; + }; -function uiLasso(context) { - var group, polygon; + return flash; + } - lasso.coordinates = []; + function uiLasso(context) { + var group, polygon; - function lasso(selection$$1) { - context.container() - .classed('lasso', true); + lasso.coordinates = []; - group = selection$$1 - .append('g') - .attr('class', 'lasso hide'); + function lasso(selection$$1) { + context.container() + .classed('lasso', true); - polygon = group - .append('path') - .attr('class', 'lasso-path'); + group = selection$$1 + .append('g') + .attr('class', 'lasso hide'); - group - .call(uiToggle(true)); - } + polygon = group + .append('path') + .attr('class', 'lasso-path'); + group + .call(uiToggle(true)); + } - function draw() { - if (polygon) { - polygon.data([lasso.coordinates]) - .attr('d', function(d) { return 'M' + d.join(' L') + ' Z'; }); - } - } + function draw() { + if (polygon) { + polygon.data([lasso.coordinates]) + .attr('d', function(d) { return 'M' + d.join(' L') + ' Z'; }); + } + } - lasso.extent = function () { - return lasso.coordinates.reduce(function(extent, point$$1) { - return extent.extend(geoExtent$$1(point$$1)); - }, geoExtent$$1()); - }; + lasso.extent = function () { + return lasso.coordinates.reduce(function(extent, point$$1) { + return extent.extend(geoExtent$$1(point$$1)); + }, geoExtent$$1()); + }; - lasso.p = function(_) { - if (!arguments.length) return lasso; - lasso.coordinates.push(_); - draw(); - return lasso; - }; + lasso.p = function(_) { + if (!arguments.length) return lasso; + lasso.coordinates.push(_); + draw(); + return lasso; + }; - lasso.close = function() { - if (group) { - group.call(uiToggle(false, function() { - d3_select(this).remove(); - })); - } - context.container().classed('lasso', false); - }; + lasso.close = function() { + if (group) { + group.call(uiToggle(false, function() { + select(this).remove(); + })); + } + context.container().classed('lasso', false); + }; - return lasso; -} -function uiRadialMenu(context, operations) { - var menu, - center = [0, 0], - tooltip; + return lasso; + } + function uiRadialMenu(context, operations) { + var menu, + center = [0, 0], + tooltip; - var radialMenu = function(selection$$1) { - if (!operations.length) return; - selection$$1.node().parentNode.focus(); + var radialMenu = function(selection$$1) { + if (!operations.length) return; - function click(operation) { - event.stopPropagation(); - if (operation.disabled()) return; - operation(); - radialMenu.close(); - } + selection$$1.node().parentNode.focus(); - menu = selection$$1 - .append('g') - .attr('class', 'radial-menu') - .attr('transform', 'translate(' + center + ')') - .attr('opacity', 0); - - menu - .transition() - .attr('opacity', 1); - - var r = 50, - a = Math.PI / 4, - a0 = -Math.PI / 4, - a1 = a0 + (operations.length - 1) * a; - - menu - .append('path') - .attr('class', 'radial-menu-background') - .attr('d', 'M' + r * Math.sin(a0) + ',' + - r * Math.cos(a0) + - ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' + - (r * Math.sin(a1) + 1e-3) + ',' + - (r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305) - .attr('stroke-width', 50) - .attr('stroke-linecap', 'round'); - - var button = menu.selectAll() - .data(operations) - .enter() - .append('g') - .attr('class', function(d) { return 'radial-menu-item radial-menu-item-' + d.id; }) - .classed('disabled', function(d) { return d.disabled(); }) - .attr('transform', function(d, i) { - return 'translate(' + geoVecFloor([ - r * Math.sin(a0 + i * a), - r * Math.cos(a0 + i * a)]).join(',') + ')'; - }); + function click(operation) { + event.stopPropagation(); + if (operation.disabled()) return; + operation(); + radialMenu.close(); + } - button - .append('circle') - .attr('r', 15) - .on('click', click) - .on('mousedown', mousedown) - .on('mouseover', mouseover) - .on('mouseout', mouseout); - - button - .append('use') - .attr('transform', 'translate(-10,-10)') - .attr('width', '20') - .attr('height', '20') - .attr('xlink:href', function(d) { return '#operation-' + d.id; }); - - tooltip = d3_select(document.body) - .append('div') - .attr('class', 'tooltip-inner radial-menu-tooltip'); - - function mousedown() { - event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869 - } + menu = selection$$1 + .append('g') + .attr('class', 'radial-menu') + .attr('transform', 'translate(' + center + ')') + .attr('opacity', 0); + + menu + .transition() + .attr('opacity', 1); + + var r = 50, + a = Math.PI / 4, + a0 = -Math.PI / 4, + a1 = a0 + (operations.length - 1) * a; + + menu + .append('path') + .attr('class', 'radial-menu-background') + .attr('d', 'M' + r * Math.sin(a0) + ',' + + r * Math.cos(a0) + + ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' + + (r * Math.sin(a1) + 1e-3) + ',' + + (r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305) + .attr('stroke-width', 50) + .attr('stroke-linecap', 'round'); + + var button = menu.selectAll() + .data(operations) + .enter() + .append('g') + .attr('class', function(d) { return 'radial-menu-item radial-menu-item-' + d.id; }) + .classed('disabled', function(d) { return d.disabled(); }) + .attr('transform', function(d, i) { + return 'translate(' + geoVecFloor([ + r * Math.sin(a0 + i * a), + r * Math.cos(a0 + i * a)]).join(',') + ')'; + }); + + button + .append('circle') + .attr('r', 15) + .on('click', click) + .on('mousedown', mousedown) + .on('mouseover', mouseover) + .on('mouseout', mouseout); + + button + .append('use') + .attr('transform', 'translate(-10,-10)') + .attr('width', '20') + .attr('height', '20') + .attr('xlink:href', function(d) { return '#operation-' + d.id; }); + + tooltip = select(document.body) + .append('div') + .attr('class', 'tooltip-inner radial-menu-tooltip'); + + function mousedown() { + event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869 + } - function mouseover(d, i) { - var rect = context.surfaceRect(), - angle = a0 + i * a, - top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px', - left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px', - bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px', - right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px'; - - tooltip - .style('top', null) - .style('left', null) - .style('bottom', null) - .style('right', null) - .style('display', 'block') - .html(uiTooltipHtml(d.tooltip(), d.keys[0])); - - if (i === 0) { - tooltip - .style('right', right) - .style('top', top); - } else if (i >= 4) { - tooltip - .style('left', left) - .style('bottom', bottom); - } else { - tooltip - .style('left', left) - .style('top', top); - } - } + function mouseover(d, i) { + var rect = context.surfaceRect(), + angle = a0 + i * a, + top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px', + left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px', + bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px', + right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px'; + + tooltip + .style('top', null) + .style('left', null) + .style('bottom', null) + .style('right', null) + .style('display', 'block') + .html(uiTooltipHtml(d.tooltip(), d.keys[0])); + + if (i === 0) { + tooltip + .style('right', right) + .style('top', top); + } else if (i >= 4) { + tooltip + .style('left', left) + .style('bottom', bottom); + } else { + tooltip + .style('left', left) + .style('top', top); + } + } - function mouseout() { - tooltip.style('display', 'none'); - } - }; + function mouseout() { + tooltip.style('display', 'none'); + } + }; - radialMenu.close = function() { - if (menu) { - menu - .style('pointer-events', 'none') - .transition() - .attr('opacity', 0) - .remove(); - } + radialMenu.close = function() { + if (menu) { + menu + .style('pointer-events', 'none') + .transition() + .attr('opacity', 0) + .remove(); + } - if (tooltip) { - tooltip.remove(); - } - }; + if (tooltip) { + tooltip.remove(); + } + }; - radialMenu.center = function(_) { - if (!arguments.length) return center; - center = _; - return radialMenu; - }; + radialMenu.center = function(_) { + if (!arguments.length) return center; + center = _; + return radialMenu; + }; - return radialMenu; -} + return radialMenu; + } -function uiSelectionList(context, selectedIDs) { + function uiSelectionList(context, selectedIDs) { - function selectEntity(entity) { - context.enter(modeSelect(context, [entity.id])); - } + function selectEntity(entity) { + context.enter(modeSelect(context, [entity.id])); + } - function deselectEntity(entity) { - event.stopPropagation(); - var index = selectedIDs.indexOf(entity.id); - if (index > -1) { - selectedIDs.splice(index, 1); - } - context.enter(modeSelect(context, selectedIDs)); - } + function deselectEntity(entity) { + event.stopPropagation(); + var index = selectedIDs.indexOf(entity.id); + if (index > -1) { + selectedIDs.splice(index, 1); + } + context.enter(modeSelect(context, selectedIDs)); + } - function selectionList(selection$$1) { - selection$$1.classed('selection-list-pane', true); + function selectionList(selection$$1) { + selection$$1.classed('selection-list-pane', true); - var header = selection$$1 - .append('div') - .attr('class', 'header fillL cf'); + var header = selection$$1 + .append('div') + .attr('class', 'header fillL cf'); - header - .append('h3') - .text(t('inspector.multiselect')); + header + .append('h3') + .text(t('inspector.multiselect')); - var listWrap = selection$$1 - .append('div') - .attr('class', 'inspector-body'); + var listWrap = selection$$1 + .append('div') + .attr('class', 'inspector-body'); - var list = listWrap - .append('div') - .attr('class', 'feature-list cf'); + var list = listWrap + .append('div') + .attr('class', 'feature-list cf'); - context.history().on('change.selection-list', drawList); - drawList(); + context.history().on('change.selection-list', drawList); + drawList(); - function drawList() { - var entities = selectedIDs - .map(function(id) { return context.hasEntity(id); }) - .filter(function(entity) { return entity; }); + function drawList() { + var entities = selectedIDs + .map(function(id) { return context.hasEntity(id); }) + .filter(function(entity) { return entity; }); - var items = list.selectAll('.feature-list-item') - .data(entities, osmEntity$$1.key); + var items = list.selectAll('.feature-list-item') + .data(entities, osmEntity$$1.key); - items.exit() - .remove(); + items.exit() + .remove(); - // Enter - var enter = items.enter() - .append('div') - .attr('class', 'feature-list-item') - .on('click', selectEntity); + // Enter + var enter = items.enter() + .append('div') + .attr('class', 'feature-list-item') + .on('click', selectEntity); - var label = enter - .append('button') - .attr('class', 'label'); + var label = enter + .append('button') + .attr('class', 'label'); - enter - .append('button') - .attr('class', 'close') - .on('click', deselectEntity) - .call(svgIcon('#icon-close')); + enter + .append('button') + .attr('class', 'close') + .on('click', deselectEntity) + .call(svgIcon('#icon-close')); - label - .append('span') - .attr('class', 'entity-geom-icon') - .call(svgIcon('', 'pre-text')); + label + .append('span') + .attr('class', 'entity-geom-icon') + .call(svgIcon('', 'pre-text')); - label - .append('span') - .attr('class', 'entity-type'); + label + .append('span') + .attr('class', 'entity-type'); - label - .append('span') - .attr('class', 'entity-name'); + label + .append('span') + .attr('class', 'entity-name'); - // Update - items = items.merge(enter); + // Update + items = items.merge(enter); - items.selectAll('.entity-geom-icon use') - .attr('href', function() { - var entity = this.parentNode.parentNode.__data__; - return '#icon-' + context.geometry(entity.id); - }); + items.selectAll('.entity-geom-icon use') + .attr('href', function() { + var entity = this.parentNode.parentNode.__data__; + return '#icon-' + context.geometry(entity.id); + }); - items.selectAll('.entity-type') - .text(function(entity) { return context.presets().match(entity, context.graph()).name(); }); + items.selectAll('.entity-type') + .text(function(entity) { return context.presets().match(entity, context.graph()).name(); }); - items.selectAll('.entity-name') - .text(function(entity) { return utilDisplayName(entity); }); - } - } + items.selectAll('.entity-name') + .text(function(entity) { return utilDisplayName(entity); }); + } + } - return selectionList; -} + return selectionList; + } -function uiSourceSwitch(context) { - var keys; + function uiSourceSwitch(context) { + var keys; - function click() { - event.preventDefault(); + function click() { + event.preventDefault(); - var osm = context.connection(); - if (!osm) return; + var osm = context.connection(); + if (!osm) return; - if (context.inIntro()) return; + if (context.inIntro()) return; - if (context.history().hasChanges() && - !window.confirm(t('source_switch.lose_changes'))) return; + if (context.history().hasChanges() && + !window.confirm(t('source_switch.lose_changes'))) return; - var isLive = d3_select(this) - .classed('live'); + var isLive = select(this) + .classed('live'); - isLive = !isLive; - context.enter(modeBrowse(context)); - context.history().clearSaved(); // remove saved history - context.flush(); // remove stored data + isLive = !isLive; + context.enter(modeBrowse(context)); + context.history().clearSaved(); // remove saved history + context.flush(); // remove stored data - d3_select(this) - .text(isLive ? t('source_switch.live') : t('source_switch.dev')) - .classed('live', isLive); + select(this) + .text(isLive ? t('source_switch.live') : t('source_switch.dev')) + .classed('live', isLive); - osm.switch(isLive ? keys[0] : keys[1]); // switch connection (warning: dispatches 'change' event) - } + osm.switch(isLive ? keys[0] : keys[1]); // switch connection (warning: dispatches 'change' event) + } - var sourceSwitch = function(selection$$1) { - selection$$1 - .append('a') - .attr('href', '#') - .text(t('source_switch.live')) - .classed('live', true) - .attr('tabindex', -1) - .on('click', click); - }; + var sourceSwitch = function(selection$$1) { + selection$$1 + .append('a') + .attr('href', '#') + .text(t('source_switch.live')) + .classed('live', true) + .attr('tabindex', -1) + .on('click', click); + }; - sourceSwitch.keys = function(_) { - if (!arguments.length) return keys; - keys = _; - return sourceSwitch; - }; + sourceSwitch.keys = function(_) { + if (!arguments.length) return keys; + keys = _; + return sourceSwitch; + }; - return sourceSwitch; -} + return sourceSwitch; + } -function uiSuccess(context) { - var dispatch$$1 = dispatch('cancel'), - changeset; + function uiSuccess$$1(context) { + var MAXEVENTS = 2; + // All else being equal, rank more "social" communities higher + // (anything not in this list receives no adjustment) + var COMMUNITYRANK = { + 'meetup': +5, + 'slack': +4, + 'facebook': +3, + 'reddit': +2, + 'forum': -2, + 'mailinglist': -3, + 'irc': -4 + }; - function success(selection$$1) { - var header = selection$$1 - .append('div') - .attr('class', 'header fillL'); + var detected = utilDetect(); + var dispatch$$1 = dispatch('cancel'); + var _changeset; + var _location; + + + function success(selection$$1) { + var header = selection$$1 + .append('div') + .attr('class', 'header fillL'); + + header + .append('button') + .attr('class', 'fr') + .on('click', function() { dispatch$$1.call('cancel'); }) + .call(svgIcon('#icon-close')); + + header + .append('h3') + .text(t('success.just_edited')); + + var body = selection$$1 + .append('div') + .attr('class', 'body save-success fillL'); + + var summary = body + .append('div') + .attr('class', 'save-summary'); + + summary + .append('h3') + .text(t('success.thank_you' + (_location ? '_location' : ''), { where: _location })); + + summary + .append('p') + .text(t('success.help_html')) + .append('a') + .attr('class', 'link-out') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', t('success.help_link_url')) + .call(svgIcon('#icon-out-link', 'inline')) + .append('span') + .text(t('success.help_link_text')); + + var osm = context.connection(); + if (!osm) return; + + var changesetURL = osm.changesetURL(_changeset.id); + + var table = summary + .append('table') + .attr('class', 'summary-table'); + + var row = table + .append('tr') + .attr('class', 'summary-row'); + + row + .append('td') + .attr('class', 'cell-icon summary-icon') + .append('a') + .attr('target', '_blank') + .attr('href', changesetURL) + .append('svg') + .attr('class', 'logo-small') + .append('use') + .attr('xlink:href', '#logo-osm'); + + var summaryDetail = row + .append('td') + .attr('class', 'cell-detail summary-detail'); + + summaryDetail + .append('a') + .attr('class', 'cell-detail summary-view-on-osm') + .attr('target', '_blank') + .attr('href', changesetURL) + .text(t('success.view_on_osm')); + + summaryDetail + .append('div') + .text(t('success.changeset_id', { changeset_id: _changeset.id })); + + + // Gather community polygon IDs intersecting the map.. + var matchFeatures = data.community.query(context.map().center(), true) || []; + var matchIDs = matchFeatures.map(function(feature) { return feature.id; }); + + // Gather community resources that are either global or match a polygon. + var matchResources = filter(data.community.resources, function(v) { + return !v.featureId || matchIDs.indexOf(v.featureId) !== -1; + }); - header - .append('button') - .attr('class', 'fr') - .on('click', function() { dispatch$$1.call('cancel'); }) - .call(svgIcon('#icon-close')); + if (matchResources.length) { + // sort by size ascending, then by community rank + matchResources.sort(function(a, b) { + var aSize = Infinity; + var bSize = Infinity; + var aRank = COMMUNITYRANK[a.type] || 0; + var bRank = COMMUNITYRANK[b.type] || 0; + + if (a.featureId) { + aSize = data.community.features[a.featureId].properties.area; + } + if (b.featureId) { + bSize = data.community.features[b.featureId].properties.area; + } + + return aSize < bSize ? -1 : aSize > bSize ? 1 : bRank - aRank; + }); + + body + .call(showCommunityLinks, matchResources); + } + } - header - .append('h3') - .text(t('success.just_edited')); - var body = selection$$1 - .append('div') - .attr('class', 'body save-success fillL'); + function showCommunityLinks(selection$$1, matchResources) { + var communityLinks = selection$$1 + .append('div') + .attr('class', 'save-communityLinks'); + + communityLinks + .append('h3') + .text(t('success.like_osm')); + + var table = communityLinks + .append('table') + .attr('class', 'community-table'); + + var row = table.selectAll('.community-row') + .data(matchResources); + + var rowEnter = row.enter() + .append('tr') + .attr('class', 'community-row'); + + rowEnter + .append('td') + .attr('class', 'cell-icon community-icon') + .append('a') + .attr('target', '_blank') + .attr('href', function(d) { return d.url; }) + .append('svg') + .attr('class', 'logo-small') + .append('use') + .attr('xlink:href', function(d) { return '#community-' + d.type; }); + + var communityDetail = rowEnter + .append('td') + .attr('class', 'cell-detail community-detail'); + + communityDetail + .each(showCommunityDetails); + + communityLinks + .append('div') + .attr('class', 'community-missing') + .text(t('success.missing')) + .append('a') + .attr('class', 'link-out') + .attr('target', '_blank') + .attr('tabindex', -1) + .call(svgIcon('#icon-out-link', 'inline')) + .attr('href', 'https://github.com/osmlab/osm-community-index/issues') + .append('span') + .text(t('success.tell_us')); + } - body - .append('p') - .html(t('success.help_html')); - body - .append('a') - .attr('class', 'details') - .attr('target', '_blank') - .attr('tabindex', -1) - .call(svgIcon('#icon-out-link', 'inline')) - .attr('href', t('success.help_link_url')) - .append('span') - .text(t('success.help_link_text')); + function showCommunityDetails(d) { + var selection$$1 = select(this); + var communityID = d.id; + var replacements = { + url: linkify(d.url), + signupUrl: linkify(d.signupUrl || d.url) + }; - var osm = context.connection(); - if (!osm) return; + selection$$1 + .append('div') + .attr('class', 'community-name') + .append('a') + .attr('target', '_blank') + .attr('href', d.url) + .text(t('community.' + d.id + '.name')); - var changesetURL = osm.changesetURL(changeset.id); + var descriptionHTML = t('community.' + d.id + '.description', replacements); - var viewOnOsm = body - .append('a') - .attr('class', 'button col12 osm') - .attr('target', '_blank') - .attr('href', changesetURL); + if (d.type === 'reddit') { // linkify subreddits #4997 + descriptionHTML = descriptionHTML + .replace(/(\/r\/\w*\/*)/i, function(match) { return linkify(d.url, match); }); + } - viewOnOsm - .append('svg') - .attr('class', 'logo logo-osm') - .append('use') - .attr('xlink:href', '#logo-osm'); + selection$$1 + .append('div') + .attr('class', 'community-description') + .html(descriptionHTML); - viewOnOsm - .append('div') - .text(t('success.view_on_osm')); + if (d.extendedDescription || (d.languageCodes && d.languageCodes.length)) { + selection$$1 + .append('div') + .call(uiDisclosure(context, 'community-more-' + d.id, false) + .expanded(false) + .updatePreference(false) + .title(t('success.more')) + .content(showMore) + ); + } - var message = (changeset.tags.comment || t('success.edited_osm')).substring(0, 130) + - ' ' + changesetURL; + var nextEvents = (d.events || []) + .map(function(event$$1) { // add parsed date + event$$1.date = new Date(event$$1.when); + return event$$1; + }) + .filter(function(event$$1) { // date is valid and future (or today) + var t$$1 = event$$1.date.getTime(); + var now = (new Date()).setHours(0,0,0,0); + return !isNaN(t$$1) && t$$1 >= now; + }) + .sort(function(a, b) { // sort by date ascending + return a.date < b.date ? -1 : a.date > b.date ? 1 : 0; + }) + .slice(0, MAXEVENTS); // limit number of events shown + + if (nextEvents.length) { + selection$$1 + .append('div') + .call(uiDisclosure(context, 'community-events-' + d.id, false) + .expanded(false) + .updatePreference(false) + .title(t('success.events')) + .content(showNextEvents) + ) + .select('.hide-toggle') + .append('span') + .attr('class', 'badge-text') + .text(nextEvents.length); + } - var sharing = [ - { key: 'facebook', value: 'https://facebook.com/sharer/sharer.php?u=' + encodeURIComponent(changesetURL) }, - { key: 'twitter', value: 'https://twitter.com/intent/tweet?source=webclient&text=' + encodeURIComponent(message) }, - { key: 'google', value: 'https://plus.google.com/share?url=' + encodeURIComponent(changesetURL) } - ]; - body.selectAll('.button.social') - .data(sharing) - .enter() - .append('a') - .attr('class', 'button social col4') - .attr('target', '_blank') - .attr('href', function(d) { return d.value; }) - .call(tooltip() - .title(function(d) { return t('success.' + d.key); }) - .placement('bottom')) - .each(function(d) { d3_select(this).call(svgIcon('#logo-' + d.key, 'social')); }); - } + function showMore(selection$$1) { + var more = selection$$1 + .append('div') + .attr('class', 'community-more'); + + if (d.extendedDescription) { + more + .append('div') + .attr('class', 'community-extended-description') + .html(t('community.' + d.id + '.extendedDescription', replacements)); + } + + if (d.languageCodes && d.languageCodes.length) { + more + .append('div') + .attr('class', 'community-languages') + .text(t('success.languages', { languages: d.languageCodes.join(', ') })); + } + } - success.changeset = function(_) { - if (!arguments.length) return changeset; - changeset = _; - return success; - }; + function showNextEvents(selection$$1) { + var events = selection$$1 + .append('div') + .attr('class', 'community-events'); + var item = events.selectAll('.community-event') + .data(nextEvents); - return utilRebind(success, dispatch$$1, 'on'); -} + var itemEnter = item.enter() + .append('div') + .attr('class', 'community-event'); -function coreHistory(context) { - var imageryUsed = ['Bing']; - var dispatch$$1 = dispatch('change', 'undone', 'redone'); - var lock = utilSessionMutex('lock'); - var duration = 150; - var _checkpoints = {}; - var _stack; - var _index; - var _tree; + itemEnter + .append('div') + .attr('class', 'community-event-name') + .append('a') + .attr('target', '_blank') + .attr('href', function(d) { return d.url; }) + .text(function(d) { + var name = d.name; + if (d.i18n && d.id) { + name = t('community.' + communityID + '.events.' + d.id + '.name', { default: name }); + } + return name; + }); + + itemEnter + .append('div') + .attr('class', 'community-event-when') + .text(function(d) { + var options = { + weekday: 'short', day: 'numeric', month: 'short', year: 'numeric' + }; + if (d.date.getHours() || d.date.getMinutes()) { // include time if it has one + options.hour = 'numeric'; + options.minute = 'numeric'; + } + return d.date.toLocaleString(detected.locale, options); + }); + + itemEnter + .append('div') + .attr('class', 'community-event-where') + .text(function(d) { + var where = d.where; + if (d.i18n && d.id) { + where = t('community.' + communityID + '.events.' + d.id + '.where', { default: where }); + } + return where; + }); + + itemEnter + .append('div') + .attr('class', 'community-event-description') + .text(function(d) { + var description = d.description; + if (d.i18n && d.id) { + description = t('community.' + communityID + '.events.' + d.id + '.description', { default: description }); + } + return description; + }); + } - // internal _act, accepts list of actions and eased time - function _act(actions, t) { - actions = Array.prototype.slice.call(actions); + function linkify(url, text) { + text = text || url; + return '' + text + ''; + } + } - var annotation; - if (!isFunction(actions[actions.length - 1])) { - annotation = actions.pop(); - } - _stack[_index].transform = context.projection.transform(); - _stack[_index].selectedIDs = context.selectedIDs(); + success.changeset = function(_) { + if (!arguments.length) return _changeset; + _changeset = _; + return success; + }; - var graph = _stack[_index].graph; - for (var i = 0; i < actions.length; i++) { - graph = actions[i](graph, t); - } - return { - graph: graph, - annotation: annotation, - imageryUsed: imageryUsed - }; - } + success.location = function(_) { + if (!arguments.length) return _location; + _location = _; + return success; + }; - // internal _perform with eased time - function _perform(args, t) { - var previous = _stack[_index].graph; - _stack = _stack.slice(0, _index + 1); - _stack.push(_act(args, t)); - _index++; - return change(previous); - } + return utilRebind(success, dispatch$$1, 'on'); + } + function coreHistory(context) { + var imageryUsed = ['Bing']; + var dispatch$$1 = dispatch('change', 'undone', 'redone'); + var lock = utilSessionMutex('lock'); + var duration = 150; + var _checkpoints = {}; + var _stack; + var _index; + var _tree; - // internal _replace with eased time - function _replace(args, t) { - var previous = _stack[_index].graph; - // assert(_index == _stack.length - 1) - _stack[_index] = _act(args, t); - return change(previous); - } + // internal _act, accepts list of actions and eased time + function _act(actions, t) { + actions = Array.prototype.slice.call(actions); - // internal _overwrite with eased time - function _overwrite(args, t) { - var previous = _stack[_index].graph; - if (_index > 0) { - _index--; - _stack.pop(); - } - _stack = _stack.slice(0, _index + 1); - _stack.push(_act(args, t)); - _index++; - return change(previous); - } + var annotation; + if (!isFunction(actions[actions.length - 1])) { + annotation = actions.pop(); + } + _stack[_index].transform = context.projection.transform(); + _stack[_index].selectedIDs = context.selectedIDs(); - // determine diffrence and dispatch a change event - function change(previous) { - var difference$$1 = coreDifference(previous, history.graph()); - dispatch$$1.call('change', this, difference$$1); - return difference$$1; - } + var graph = _stack[_index].graph; + for (var i = 0; i < actions.length; i++) { + graph = actions[i](graph, t); + } + return { + graph: graph, + annotation: annotation, + imageryUsed: imageryUsed + }; + } - // iD uses namespaced keys so multiple installations do not conflict - function getKey(n) { - return 'iD_' + window.location.origin + '_' + n; - } + // internal _perform with eased time + function _perform(args, t) { + var previous = _stack[_index].graph; + _stack = _stack.slice(0, _index + 1); + _stack.push(_act(args, t)); + _index++; + return change(previous); + } - var history = { - graph: function() { - return _stack[_index].graph; - }, + // internal _replace with eased time + function _replace(args, t) { + var previous = _stack[_index].graph; + // assert(_index == _stack.length - 1) + _stack[_index] = _act(args, t); + return change(previous); + } - base: function() { - return _stack[0].graph; - }, + // internal _overwrite with eased time + function _overwrite(args, t) { + var previous = _stack[_index].graph; + if (_index > 0) { + _index--; + _stack.pop(); + } + _stack = _stack.slice(0, _index + 1); + _stack.push(_act(args, t)); + _index++; + return change(previous); + } - merge: function(entities, extent) { - _stack[0].graph.rebase(entities, map$3(_stack, 'graph'), false); - _tree.rebase(entities, false); + // determine diffrence and dispatch a change event + function change(previous) { + var difference$$1 = coreDifference(previous, history.graph()); + dispatch$$1.call('change', this, difference$$1); + return difference$$1; + } - dispatch$$1.call('change', this, undefined, extent); - }, + // iD uses namespaced keys so multiple installations do not conflict + function getKey(n) { + return 'iD_' + window.location.origin + '_' + n; + } - perform: function() { - // complete any transition already in progress - d3_select(document).interrupt('history.perform'); - var transitionable = false; - var action0 = arguments[0]; + var history = { - if (arguments.length === 1 || - arguments.length === 2 && !isFunction(arguments[1])) { - transitionable = !!action0.transitionable; - } + graph: function() { + return _stack[_index].graph; + }, - if (transitionable) { - var origArguments = arguments; - d3_select(document) - .transition('history.perform') - .duration(duration) - .ease(linear$1) - .tween('history.tween', function() { - return function(t) { - if (t < 1) _overwrite([action0], t); - }; - }) - .on('start', function() { - _perform([action0], 0); - }) - .on('end interrupt', function() { - _overwrite(origArguments, 1); - }); - } else { - return _perform(arguments); - } - }, + base: function() { + return _stack[0].graph; + }, - replace: function() { - d3_select(document).interrupt('history.perform'); - return _replace(arguments, 1); - }, + merge: function(entities, extent) { + _stack[0].graph.rebase(entities, map$3(_stack, 'graph'), false); + _tree.rebase(entities, false); + dispatch$$1.call('change', this, undefined, extent); + }, - // Same as calling pop and then perform - overwrite: function() { - d3_select(document).interrupt('history.perform'); - return _overwrite(arguments, 1); - }, + perform: function() { + // complete any transition already in progress + select(document).interrupt('history.perform'); - pop: function(n) { - d3_select(document).interrupt('history.perform'); + var transitionable = false; + var action0 = arguments[0]; - var previous = _stack[_index].graph; - if (isNaN(+n) || +n < 0) { - n = 1; - } - while (n-- > 0 && _index > 0) { - _index--; - _stack.pop(); - } - return change(previous); - }, + if (arguments.length === 1 || + arguments.length === 2 && !isFunction(arguments[1])) { + transitionable = !!action0.transitionable; + } + if (transitionable) { + var origArguments = arguments; + select(document) + .transition('history.perform') + .duration(duration) + .ease(linear$1) + .tween('history.tween', function() { + return function(t) { + if (t < 1) _overwrite([action0], t); + }; + }) + .on('start', function() { + _perform([action0], 0); + }) + .on('end interrupt', function() { + _overwrite(origArguments, 1); + }); - // Back to the previous annotated state or _index = 0. - undo: function() { - d3_select(document).interrupt('history.perform'); + } else { + return _perform(arguments); + } + }, - var previous = _stack[_index].graph; - while (_index > 0) { - _index--; - if (_stack[_index].annotation) break; - } - dispatch$$1.call('undone', this, _stack[_index]); - return change(previous); - }, + replace: function() { + select(document).interrupt('history.perform'); + return _replace(arguments, 1); + }, - // Forward to the next annotated state. - redo: function() { - d3_select(document).interrupt('history.perform'); + // Same as calling pop and then perform + overwrite: function() { + select(document).interrupt('history.perform'); + return _overwrite(arguments, 1); + }, - var previous = _stack[_index].graph; - var tryIndex = _index; - while (tryIndex < _stack.length - 1) { - tryIndex++; - if (_stack[tryIndex].annotation) { - _index = tryIndex; - dispatch$$1.call('redone', this, _stack[_index]); - break; - } - } - return change(previous); - }, + pop: function(n) { + select(document).interrupt('history.perform'); + var previous = _stack[_index].graph; + if (isNaN(+n) || +n < 0) { + n = 1; + } + while (n-- > 0 && _index > 0) { + _index--; + _stack.pop(); + } + return change(previous); + }, - undoAnnotation: function() { - var i = _index; - while (i >= 0) { - if (_stack[i].annotation) return _stack[i].annotation; - i--; - } - }, + // Back to the previous annotated state or _index = 0. + undo: function() { + select(document).interrupt('history.perform'); - redoAnnotation: function() { - var i = _index + 1; - while (i <= _stack.length - 1) { - if (_stack[i].annotation) return _stack[i].annotation; - i++; - } - }, + var previous = _stack[_index].graph; + while (_index > 0) { + _index--; + if (_stack[_index].annotation) break; + } + dispatch$$1.call('undone', this, _stack[_index]); + return change(previous); + }, - intersects: function(extent) { - return _tree.intersects(extent, _stack[_index].graph); - }, + // Forward to the next annotated state. + redo: function() { + select(document).interrupt('history.perform'); + + var previous = _stack[_index].graph; + var tryIndex = _index; + while (tryIndex < _stack.length - 1) { + tryIndex++; + if (_stack[tryIndex].annotation) { + _index = tryIndex; + dispatch$$1.call('redone', this, _stack[_index]); + break; + } + } + + return change(previous); + }, + + + undoAnnotation: function() { + var i = _index; + while (i >= 0) { + if (_stack[i].annotation) return _stack[i].annotation; + i--; + } + }, + + + redoAnnotation: function() { + var i = _index + 1; + while (i <= _stack.length - 1) { + if (_stack[i].annotation) return _stack[i].annotation; + i++; + } + }, + + + intersects: function(extent) { + return _tree.intersects(extent, _stack[_index].graph); + }, + + + difference: function() { + var base = _stack[0].graph; + var head = _stack[_index].graph; + return coreDifference(base, head); + }, + + + changes: function(action) { + var base = _stack[0].graph; + var head = _stack[_index].graph; + + if (action) { + head = action(head); + } + + var difference$$1 = coreDifference(base, head); + + return { + modified: difference$$1.modified(), + created: difference$$1.created(), + deleted: difference$$1.deleted() + }; + }, + + + validate: function(changes) { + return flatten( + map$3(Validations, function(fn) { return fn()(changes, _stack[_index].graph); }) + ); + }, + + + hasChanges: function() { + return this.difference().length() > 0; + }, + + + imageryUsed: function(sources) { + if (sources) { + imageryUsed = sources; + return history; + } else { + var arr = map$3(_stack.slice(1, _index + 1), 'imageryUsed'); + return without(uniq(flatten(arr)), 'Custom'); + } + }, + + + // save the current history state + checkpoint: function(key) { + _checkpoints[key] = { + stack: cloneDeep(_stack), + index: _index + }; + return history; + }, + + + // restore history state to a given checkpoint or reset completely + reset: function(key) { + if (key !== undefined && _checkpoints.hasOwnProperty(key)) { + _stack = cloneDeep(_checkpoints[key].stack); + _index = _checkpoints[key].index; + } else { + _stack = [{graph: coreGraph$$1()}]; + _index = 0; + _tree = coreTree(_stack[0].graph); + _checkpoints = {}; + } + dispatch$$1.call('change'); + return history; + }, + + + toIntroGraph: function() { + var nextId = { n: 0, r: 0, w: 0 }; + var permIds = {}; + var graph = this.graph(); + var baseEntities = {}; + + // clone base entities.. + forEach(graph.base().entities, function(entity) { + var copy = cloneDeepWith(entity, customizer); + baseEntities[copy.id] = copy; + }); + + // replace base entities with head entities.. + forEach(graph.entities, function(entity, id) { + if (entity) { + var copy = cloneDeepWith(entity, customizer); + baseEntities[copy.id] = copy; + } else { + delete baseEntities[id]; + } + }); + + // swap temporary for permanent ids.. + forEach(baseEntities, function(entity) { + if (Array.isArray(entity.nodes)) { + entity.nodes = entity.nodes.map(function(node) { + return permIds[node] || node; + }); + } + if (Array.isArray(entity.members)) { + entity.members = entity.members.map(function(member) { + member.id = permIds[member.id] || member.id; + return member; + }); + } + }); + + return JSON.stringify({ dataIntroGraph: baseEntities }); + + + function customizer(src) { + var copy = omit(cloneDeep(src), ['type', 'user', 'v', 'version', 'visible']); + if (isEmpty(copy.tags)) { + delete copy.tags; + } + + if (Array.isArray(copy.loc)) { + copy.loc[0] = +copy.loc[0].toFixed(6); + copy.loc[1] = +copy.loc[1].toFixed(6); + } + + var match = src.id.match(/([nrw])-\d*/); // temporary id + if (match !== null) { + var nrw = match[1], permId; + do { permId = nrw + (++nextId[nrw]); } + while (baseEntities.hasOwnProperty(permId)); + + copy.id = permIds[src.id] = permId; + } + return copy; + } + }, + + + toJSON: function() { + if (!this.hasChanges()) return; + + var allEntities = {}; + var baseEntities = {}; + var base = _stack[0]; + + var s = _stack.map(function(i) { + var modified = [], deleted = []; + + forEach(i.graph.entities, function(entity, id) { + if (entity) { + var key = osmEntity$$1.key(entity); + allEntities[key] = entity; + modified.push(key); + } else { + deleted.push(id); + } + + // make sure that the originals of changed or deleted entities get merged + // into the base of the _stack after restoring the data from JSON. + if (id in base.graph.entities) { + baseEntities[id] = base.graph.entities[id]; + } + // get originals of parent entities too + forEach(base.graph._parentWays[id], function(parentId) { + if (parentId in base.graph.entities) { + baseEntities[parentId] = base.graph.entities[parentId]; + } + }); + }); + + var x = {}; + + if (modified.length) x.modified = modified; + if (deleted.length) x.deleted = deleted; + if (i.imageryUsed) x.imageryUsed = i.imageryUsed; + if (i.annotation) x.annotation = i.annotation; + + return x; + }); + + return JSON.stringify({ + version: 3, + entities: values$1(allEntities), + baseEntities: values$1(baseEntities), + stack: s, + nextIDs: osmEntity$$1.id.next, + index: _index + }); + }, + + + fromJSON: function(json, loadChildNodes) { + var h = JSON.parse(json); + var loadComplete = true; + + osmEntity$$1.id.next = h.nextIDs; + _index = h.index; + + if (h.version === 2 || h.version === 3) { + var allEntities = {}; + + h.entities.forEach(function(entity) { + allEntities[osmEntity$$1.key(entity)] = osmEntity$$1(entity); + }); + + if (h.version === 3) { + // This merges originals for changed entities into the base of + // the _stack even if the current _stack doesn't have them (for + // example when iD has been restarted in a different region) + var baseEntities = h.baseEntities.map(function(d) { return osmEntity$$1(d); }); + _stack[0].graph.rebase(baseEntities, map$3(_stack, 'graph'), true); + _tree.rebase(baseEntities, true); + + // When we restore a modified way, we also need to fetch any missing + // childnodes that would normally have been downloaded with it.. #2142 + if (loadChildNodes) { + var osm = context.connection(); + var nodes = flatten(uniq(map$3(filter(baseEntities, { type: 'way' }), 'nodes'))); + var missing = reject(nodes, function(n) { return _stack[0].graph.hasEntity(n); }); + + if (!isEmpty(missing) && osm) { + loadComplete = false; + context.redrawEnable(false); + + var loading = uiLoading(context).blocking(true); + context.container().call(loading); + + var childNodesLoaded = function(err, result) { + if (!err) { + var visible = groupBy(result.data, 'visible'); + if (!isEmpty(visible.true)) { + missing = difference(missing, map$3(visible.true, 'id')); + _stack[0].graph.rebase(visible.true, map$3(_stack, 'graph'), true); + _tree.rebase(visible.true, true); + } + + // fetch older versions of nodes that were deleted.. + forEach(visible.false, function(entity) { + osm.loadEntityVersion(entity.id, +entity.version - 1, childNodesLoaded); + }); + } + + if (err || isEmpty(missing)) { + loading.close(); + context.redrawEnable(true); + dispatch$$1.call('change'); + } + }; + + osm.loadMultiple(missing, childNodesLoaded); + } + } + } + + _stack = h.stack.map(function(d) { + var entities = {}, entity; + + if (d.modified) { + d.modified.forEach(function(key) { + entity = allEntities[key]; + entities[entity.id] = entity; + }); + } + + if (d.deleted) { + d.deleted.forEach(function(id) { + entities[id] = undefined; + }); + } - difference: function() { - var base = _stack[0].graph; - var head = _stack[_index].graph; - return coreDifference(base, head); - }, + return { + graph: coreGraph$$1(_stack[0].graph).load(entities), + annotation: d.annotation, + imageryUsed: d.imageryUsed + }; + }); + + } else { // original version + _stack = h.stack.map(function(d) { + var entities = {}; + + for (var i in d.entities) { + var entity = d.entities[i]; + entities[i] = entity === 'undefined' ? undefined : osmEntity$$1(entity); + } + d.graph = coreGraph$$1(_stack[0].graph).load(entities); + return d; + }); + } - changes: function(action) { - var base = _stack[0].graph; - var head = _stack[_index].graph; + if (loadComplete) { + dispatch$$1.call('change'); + } - if (action) { - head = action(head); - } + return history; + }, - var difference$$1 = coreDifference(base, head); - return { - modified: difference$$1.modified(), - created: difference$$1.created(), - deleted: difference$$1.deleted() - }; - }, + save: function() { + if (lock.locked()) context.storage(getKey('saved_history'), history.toJSON() || null); + return history; + }, + + + clearSaved: function() { + context.debouncedSave.cancel(); + if (lock.locked()) context.storage(getKey('saved_history'), null); + return history; + }, + + lock: function() { + return lock.lock(); + }, - validate: function(changes) { - return flatten( - map$3(Validations, function(fn) { return fn()(changes, _stack[_index].graph); }) - ); - }, + unlock: function() { + lock.unlock(); + }, - hasChanges: function() { - return this.difference().length() > 0; - }, + // is iD not open in another window and it detects that + // there's a history stored in localStorage that's recoverable? + restorableChanges: function() { + return lock.locked() && !!context.storage(getKey('saved_history')); + }, - imageryUsed: function(sources) { - if (sources) { - imageryUsed = sources; - return history; - } else { - var arr = map$3(_stack.slice(1, _index + 1), 'imageryUsed'); - return without(uniq(flatten(arr)), 'Custom'); - } - }, + // load history from a version stored in localStorage + restore: function() { + if (!lock.locked()) return; - // save the current history state - checkpoint: function(key) { - _checkpoints[key] = { - stack: cloneDeep(_stack), - index: _index - }; - return history; - }, + var json = context.storage(getKey('saved_history')); + if (json) history.fromJSON(json, true); + }, - // restore history state to a given checkpoint or reset completely - reset: function(key) { - if (key !== undefined && _checkpoints.hasOwnProperty(key)) { - _stack = cloneDeep(_checkpoints[key].stack); - _index = _checkpoints[key].index; - } else { - _stack = [{graph: coreGraph$$1()}]; - _index = 0; - _tree = coreTree(_stack[0].graph); - _checkpoints = {}; - } - dispatch$$1.call('change'); - return history; - }, + _getKey: getKey + + }; - toIntroGraph: function() { - var nextId = { n: 0, r: 0, w: 0 }; - var permIds = {}; - var graph = this.graph(); - var baseEntities = {}; + history.reset(); - // clone base entities.. - forEach(graph.base().entities, function(entity) { - var copy = cloneDeepWith(entity, customizer); - baseEntities[copy.id] = copy; - }); + return utilRebind(history, dispatch$$1, 'on'); + } - // replace base entities with head entities.. - forEach(graph.entities, function(entity, id) { - if (entity) { - var copy = cloneDeepWith(entity, customizer); - baseEntities[copy.id] = copy; - } else { - delete baseEntities[id]; - } - }); + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; - // swap temporary for permanent ids.. - forEach(baseEntities, function(entity) { - if (Array.isArray(entity.nodes)) { - entity.nodes = entity.nodes.map(function(node) { - return permIds[node] || node; - }); - } - if (Array.isArray(entity.members)) { - entity.members = entity.members.map(function(member) { - member.id = permIds[member.id] || member.id; - return member; - }); - } - }); + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity$8 : function(func, data) { + metaMap.set(func, data); + return func; + }; - return JSON.stringify({ dataIntroGraph: baseEntities }); + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } - function customizer(src) { - var copy = omit(cloneDeep(src), ['type', 'user', 'v', 'version', 'visible']); - if (isEmpty(copy.tags)) { - delete copy.tags; - } + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1; - if (Array.isArray(copy.loc)) { - copy.loc[0] = +copy.loc[0].toFixed(6); - copy.loc[1] = +copy.loc[1].toFixed(6); - } + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); - var match = src.id.match(/([nrw])-\d*/); // temporary id - if (match !== null) { - var nrw = match[1], permId; - do { permId = nrw + (++nextId[nrw]); } - while (baseEntities.hasOwnProperty(permId)); + function wrapper() { + var fn = (this && this !== root$2 && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } - copy.id = permIds[src.id] = permId; - } - return copy; - } - }, + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax$5 = Math.max; + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax$5(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; - toJSON: function() { - if (!this.hasChanges()) return; - - var allEntities = {}; - var baseEntities = {}; - var base = _stack[0]; - - var s = _stack.map(function(i) { - var modified = [], deleted = []; - - forEach(i.graph.entities, function(entity, id) { - if (entity) { - var key = osmEntity$$1.key(entity); - allEntities[key] = entity; - modified.push(key); - } else { - deleted.push(id); - } - - // make sure that the originals of changed or deleted entities get merged - // into the base of the _stack after restoring the data from JSON. - if (id in base.graph.entities) { - baseEntities[id] = base.graph.entities[id]; - } - // get originals of parent entities too - forEach(base.graph._parentWays[id], function(parentId) { - if (parentId in base.graph.entities) { - baseEntities[parentId] = base.graph.entities[parentId]; - } - }); - }); - - var x = {}; - - if (modified.length) x.modified = modified; - if (deleted.length) x.deleted = deleted; - if (i.imageryUsed) x.imageryUsed = i.imageryUsed; - if (i.annotation) x.annotation = i.annotation; - - return x; - }); + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } - return JSON.stringify({ - version: 3, - entities: values$1(allEntities), - baseEntities: values$1(baseEntities), - stack: s, - nextIDs: osmEntity$$1.id.next, - index: _index - }); - }, + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax$6 = Math.max; + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax$6(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } - fromJSON: function(json, loadChildNodes) { - var h = JSON.parse(json); - var loadComplete = true; - - osmEntity$$1.id.next = h.nextIDs; - _index = h.index; - - if (h.version === 2 || h.version === 3) { - var allEntities = {}; - - h.entities.forEach(function(entity) { - allEntities[osmEntity$$1.key(entity)] = osmEntity$$1(entity); - }); - - if (h.version === 3) { - // This merges originals for changed entities into the base of - // the _stack even if the current _stack doesn't have them (for - // example when iD has been restarted in a different region) - var baseEntities = h.baseEntities.map(function(d) { return osmEntity$$1(d); }); - _stack[0].graph.rebase(baseEntities, map$3(_stack, 'graph'), true); - _tree.rebase(baseEntities, true); - - // When we restore a modified way, we also need to fetch any missing - // childnodes that would normally have been downloaded with it.. #2142 - if (loadChildNodes) { - var osm = context.connection(); - var nodes = flatten(uniq(map$3(filter(baseEntities, { type: 'way' }), 'nodes'))); - var missing = reject(nodes, function(n) { return _stack[0].graph.hasEntity(n); }); - - if (!isEmpty(missing) && osm) { - loadComplete = false; - context.redrawEnable(false); - - var loading = uiLoading(context).blocking(true); - context.container().call(loading); - - var childNodesLoaded = function(err, result) { - if (!err) { - var visible = groupBy(result.data, 'visible'); - if (!isEmpty(visible.true)) { - missing = difference(missing, map$3(visible.true, 'id')); - _stack[0].graph.rebase(visible.true, map$3(_stack, 'graph'), true); - _tree.rebase(visible.true, true); - } - - // fetch older versions of nodes that were deleted.. - forEach(visible.false, function(entity) { - osm.loadEntityVersion(entity.id, +entity.version - 1, childNodesLoaded); - }); - } - - if (err || isEmpty(missing)) { - loading.close(); - context.redrawEnable(true); - dispatch$$1.call('change'); - } - }; - - osm.loadMultiple(missing, childNodesLoaded); - } - } - } - - _stack = h.stack.map(function(d) { - var entities = {}, entity; - - if (d.modified) { - d.modified.forEach(function(key) { - entity = allEntities[key]; - entities[entity.id] = entity; - }); - } - - if (d.deleted) { - d.deleted.forEach(function(id) { - entities[id] = undefined; - }); - } - - return { - graph: coreGraph$$1(_stack[0].graph).load(entities), - annotation: d.annotation, - imageryUsed: d.imageryUsed - }; - }); - - } else { // original version - _stack = h.stack.map(function(d) { - var entities = {}; - - for (var i in d.entities) { - var entity = d.entities[i]; - entities[i] = entity === 'undefined' ? undefined : osmEntity$$1(entity); - } - - d.graph = coreGraph$$1(_stack[0].graph).load(entities); - return d; - }); - } + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; - if (loadComplete) { - dispatch$$1.call('change'); - } + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; + } - return history; - }, + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295; - save: function() { - if (lock.locked()) context.storage(getKey('saved_history'), history.toJSON() || null); - return history; - }, + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; - clearSaved: function() { - context.debouncedSave.cancel(); - if (lock.locked()) context.storage(getKey('saved_history'), null); - return history; - }, + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop$3 : function(func) { + return metaMap.get(func); + }; + /** Used to lookup unminified function names. */ + var realNames = {}; - lock: function() { - return lock.lock(); - }, + /** Used for built-in method references. */ + var objectProto$20 = Object.prototype; + /** Used to check objects for own properties. */ + var hasOwnProperty$17 = objectProto$20.hasOwnProperty; - unlock: function() { - lock.unlock(); - }, + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty$17.call(realNames, result) ? array.length : 0; + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } - // is iD not open in another window and it detects that - // there's a history stored in localStorage that's recoverable? - restorableChanges: function() { - return lock.locked() && !!context.storage(getKey('saved_history')); - }, + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; - // load history from a version stored in localStorage - restore: function() { - if (!lock.locked()) return; + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } - var json = context.storage(getKey('saved_history')); - if (json) history.fromJSON(json, true); - }, + /** Used for built-in method references. */ + var objectProto$21 = Object.prototype; + /** Used to check objects for own properties. */ + var hasOwnProperty$18 = objectProto$21.hasOwnProperty; - _getKey: getKey + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty$18.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } - }; + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; - history.reset(); - - return utilRebind(history, dispatch$$1, 'on'); -} - -/** Used to store function metadata. */ -var metaMap = WeakMap && new WeakMap; - -/** - * The base implementation of `setData` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ -var baseSetData = !metaMap ? identity$8 : function(func, data) { - metaMap.set(func, data); - return func; -}; - -/** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ -function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; -} - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1; - -/** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var fn = (this && this !== root$2 && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax$5 = Math.max; - -/** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ -function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax$5(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax$6 = Math.max; - -/** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ -function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax$6(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; -} - -/** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ -function countHolders(array, placeholder) { - var length = array.length, - result = 0; - - while (length--) { - if (array[length] === placeholder) { - ++result; - } - } - return result; -} - -/** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ -function baseLodash() { - // No operation performed. -} - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295; - -/** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ -function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; -} - -// Ensure `LazyWrapper` is an instance of `baseLodash`. -LazyWrapper.prototype = baseCreate(baseLodash.prototype); -LazyWrapper.prototype.constructor = LazyWrapper; - -/** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ -var getData = !metaMap ? noop$3 : function(func) { - return metaMap.get(func); -}; - -/** Used to lookup unminified function names. */ -var realNames = {}; - -/** Used for built-in method references. */ -var objectProto$20 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$17 = objectProto$20.hasOwnProperty; - -/** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ -function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty$17.call(realNames, result) ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; -} - -/** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ -function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; -} - -LodashWrapper.prototype = baseCreate(baseLodash.prototype); -LodashWrapper.prototype.constructor = LodashWrapper; - -/** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ -function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; -} - -/** Used for built-in method references. */ -var objectProto$21 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$18 = objectProto$21.hasOwnProperty; - -/** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array and iteratees accept only - * one argument. The heuristic for whether a section qualifies for shortcut - * fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ -function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; } - if (hasOwnProperty$18.call(value, '__wrapped__')) { - return wrapperClone(value); + if (func === other) { + return true; } + var data = getData(other); + return !!data && func === data[0]; } - return new LodashWrapper(value); -} -// Ensure wrappers are instances of `baseLodash`. -lodash.prototype = baseLodash.prototype; -lodash.prototype.constructor = lodash; + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); -/** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ -function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; + /** Used to match wrap detail comments. */ + var reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; } - var data = getData(other); - return !!data && func === data[0]; -} - -/** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ -var setData = shortOut(baseSetData); - -/** Used to match wrap detail comments. */ -var reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & /; - -/** - * Extracts wrapper details from the `source` body comment. - * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. - */ -function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; -} - -/** Used to match wrap detail comments. */ -var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/; - -/** - * Inserts wrapper `details` in a comment at the top of the `source` body. - * - * @private - * @param {string} source The source to modify. - * @returns {Array} details The details to insert. - * @returns {string} Returns the modified source. - */ -function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; - details = details.join(length > 2 ? ', ' : ' '); - return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); -} - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG$1 = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256, - WRAP_FLIP_FLAG = 512; - -/** Used to associate wrap methods with their bit flags. */ -var wrapFlags = [ - ['ary', WRAP_ARY_FLAG], - ['bind', WRAP_BIND_FLAG$1], - ['bindKey', WRAP_BIND_KEY_FLAG], - ['curry', WRAP_CURRY_FLAG], - ['curryRight', WRAP_CURRY_RIGHT_FLAG], - ['flip', WRAP_FLIP_FLAG], - ['partial', WRAP_PARTIAL_FLAG], - ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], - ['rearg', WRAP_REARG_FLAG] -]; - -/** - * Updates wrapper `details` based on `bitmask` flags. - * - * @private - * @returns {Array} details The details to modify. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Array} Returns `details`. - */ -function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = '_.' + pair[0]; - if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); -} - -/** - * Sets the `toString` method of `wrapper` to mimic the source of `reference` - * with wrapper details in a comment at the top of the source body. - * - * @private - * @param {Function} wrapper The function to modify. - * @param {Function} reference The reference function. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Function} Returns `wrapper`. - */ -function setWrapToString(wrapper, reference, bitmask) { - var source = (reference + ''); - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); -} - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG$2 = 1, - WRAP_BIND_KEY_FLAG$1 = 2, - WRAP_CURRY_BOUND_FLAG = 4, - WRAP_CURRY_FLAG$1 = 8, - WRAP_PARTIAL_FLAG$1 = 32, - WRAP_PARTIAL_RIGHT_FLAG$1 = 64; - -/** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & WRAP_CURRY_FLAG$1, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? WRAP_PARTIAL_FLAG$1 : WRAP_PARTIAL_RIGHT_FLAG$1); - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG$1 : WRAP_PARTIAL_FLAG$1); - - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG$2 | WRAP_BIND_KEY_FLAG$1); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); -} - -/** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ -function getHolder(func) { - var object = func; - return object.placeholder; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin$2 = Math.min; - -/** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ -function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin$2(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; -} - -/** Used as the internal argument placeholder. */ -var PLACEHOLDER = '__lodash_placeholder__'; - -/** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ -function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; -} - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG$3 = 1, - WRAP_BIND_KEY_FLAG$2 = 2, - WRAP_CURRY_FLAG$2 = 8, - WRAP_CURRY_RIGHT_FLAG$1 = 16, - WRAP_ARY_FLAG$1 = 128, - WRAP_FLIP_FLAG$1 = 512; - -/** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & WRAP_ARY_FLAG$1, - isBind = bitmask & WRAP_BIND_FLAG$3, - isBindKey = bitmask & WRAP_BIND_KEY_FLAG$2, - isCurried = bitmask & (WRAP_CURRY_FLAG$2 | WRAP_CURRY_RIGHT_FLAG$1), - isFlip = bitmask & WRAP_FLIP_FLAG$1, - Ctor = isBindKey ? undefined : createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/; - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, thisArg, - args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG$1 = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG$1], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root$2 && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); } - return wrapper; -} -/** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG$2 = 1, + WRAP_BIND_KEY_FLAG$1 = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG$1 = 8, + WRAP_PARTIAL_FLAG$1 = 32, + WRAP_PARTIAL_RIGHT_FLAG$1 = 64; - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG$1, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG$1 : WRAP_PARTIAL_RIGHT_FLAG$1); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG$1 : WRAP_PARTIAL_FLAG$1); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG$2 | WRAP_BIND_KEY_FLAG$1); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - if (length < arity) { - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root$2 && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; -} - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG$4 = 1; - -/** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ -function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG$4, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root$2 && this instanceof wrapper) ? Ctor : func; + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; -} - -/** Used as the internal argument placeholder. */ -var PLACEHOLDER$1 = '__lodash_placeholder__'; - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG$5 = 1, - WRAP_BIND_KEY_FLAG$3 = 2, - WRAP_CURRY_BOUND_FLAG$1 = 4, - WRAP_CURRY_FLAG$3 = 8, - WRAP_ARY_FLAG$2 = 128, - WRAP_REARG_FLAG$1 = 256; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin$3 = Math.min; - -/** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ -function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (WRAP_BIND_FLAG$5 | WRAP_BIND_KEY_FLAG$3 | WRAP_ARY_FLAG$2); - - var isCombo = - ((srcBitmask == WRAP_ARY_FLAG$2) && (bitmask == WRAP_CURRY_FLAG$3)) || - ((srcBitmask == WRAP_ARY_FLAG$2) && (bitmask == WRAP_REARG_FLAG$1) && (data[7].length <= source[8])) || - ((srcBitmask == (WRAP_ARY_FLAG$2 | WRAP_REARG_FLAG$1)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG$3)); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = func; + return object.placeholder; } - // Use source `thisArg` if available. - if (srcBitmask & WRAP_BIND_FLAG$5) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= bitmask & WRAP_BIND_FLAG$5 ? 0 : WRAP_CURRY_BOUND_FLAG$1; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER$1) : source[4]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER$1) : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & WRAP_ARY_FLAG$2) { - data[8] = data[8] == null ? source[8] : nativeMin$3(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; -} - -/** Error message constants. */ -var FUNC_ERROR_TEXT$4 = 'Expected a function'; - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG$6 = 1, - WRAP_BIND_KEY_FLAG$4 = 2, - WRAP_CURRY_FLAG$4 = 8, - WRAP_CURRY_RIGHT_FLAG$2 = 16, - WRAP_PARTIAL_FLAG$2 = 32, - WRAP_PARTIAL_RIGHT_FLAG$2 = 64; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax$7 = Math.max; - -/** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG$4; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT$4); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG$2 | WRAP_PARTIAL_RIGHT_FLAG$2); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax$7(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG$2) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] === undefined - ? (isBindKey ? 0 : func.length) - : nativeMax$7(newData[9] - length, 0); - - if (!arity && bitmask & (WRAP_CURRY_FLAG$4 | WRAP_CURRY_RIGHT_FLAG$2)) { - bitmask &= ~(WRAP_CURRY_FLAG$4 | WRAP_CURRY_RIGHT_FLAG$2); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG$6) { - var result = createBind(func, bitmask, thisArg); - } else if (bitmask == WRAP_CURRY_FLAG$4 || bitmask == WRAP_CURRY_RIGHT_FLAG$2) { - result = createCurry(func, bitmask, arity); - } else if ((bitmask == WRAP_PARTIAL_FLAG$2 || bitmask == (WRAP_BIND_FLAG$6 | WRAP_PARTIAL_FLAG$2)) && !holders.length) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); -} - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG$7 = 1, - WRAP_PARTIAL_FLAG$3 = 32; - -/** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ -var bind$2 = baseRest(function(func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG$7; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind$2)); - bitmask |= WRAP_PARTIAL_FLAG$3; - } - return createWrap(func, bitmask, thisArg, partials, holders); -}); - -// Assign default placeholders. -bind$2.placeholder = {}; - -function presetCollection(collection) { - var maxSearchResults = 50, - maxSuggestionResults = 10; - - var presets = { - - collection: collection, - - - item: function(id) { - return find$1(this.collection, function(d) { - return d.id === id; - }); - }, + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMin$2 = Math.min; + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin$2(indexes.length, arrLength), + oldArray = copyArray(array); - matchGeometry: function(geometry) { - return presetCollection(this.collection.filter(function(d) { - return d.matchGeometry(geometry); - })); - }, + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; - search: function(value, geometry) { - if (!value) return this; + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; - function leading(a) { - var index = a.indexOf(value); - return index === 0 || a[index - 1] === ' '; - } + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } - function suggestionName(name) { - var nameArray = name.split(' - '); - if (nameArray.length > 1) { - name = nameArray.slice(0, nameArray.length - 1).join(' - '); - } - return name.toLowerCase(); - } + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG$3 = 1, + WRAP_BIND_KEY_FLAG$2 = 2, + WRAP_CURRY_FLAG$2 = 8, + WRAP_CURRY_RIGHT_FLAG$1 = 16, + WRAP_ARY_FLAG$1 = 128, + WRAP_FLIP_FLAG$1 = 512; + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG$1, + isBind = bitmask & WRAP_BIND_FLAG$3, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG$2, + isCurried = bitmask & (WRAP_CURRY_FLAG$2 | WRAP_CURRY_RIGHT_FLAG$1), + isFlip = bitmask & WRAP_FLIP_FLAG$1, + Ctor = isBindKey ? undefined : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root$2 && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } - value = value.toLowerCase(); - - var searchable = filter(this.collection, function(a) { - return a.searchable !== false && a.suggestion !== true; - }), - suggestions = filter(this.collection, function(a) { - return a.suggestion === true; - }); - - - // matches value to preset.name - var leading_name = filter(searchable, function(a) { - return leading(a.name().toLowerCase()); - }).sort(function(a, b) { - var aCompare = a.name().toLowerCase(), - bCompare = b.name().toLowerCase(), - i; - - // priority if search string matches preset name exactly - #4325 - if (value === aCompare) return -1; - if (value === bCompare) return 1; - - // priority for higher matchScore - i = b.originalScore - a.originalScore; - if (i !== 0) return i; - - // priority if search string appears earlier in preset name - i = aCompare.indexOf(value) - bCompare.indexOf(value); - if (i !== 0) return i; - - // priority for shorter preset names - return a.name().length - b.name().length; - }); - - // matches value to preset.terms values - var leading_terms = filter(searchable, function(a) { - return some(a.terms() || [], leading); - }); - - // matches value to preset.tags values - var leading_tag_values = filter(searchable, function(a) { - return some(without(values$1(a.tags || {}), '*'), leading); - }); - - - // finds close matches to value in preset.name - var similar_name = searchable.map(function(a) { - return { - preset: a, - dist: utilEditDistance(value, a.name()) - }; - }).filter(function(a) { - return a.dist + Math.min(value.length - a.preset.name().length, 0) < 3; - }).sort(function(a, b) { - return a.dist - b.dist; - }).map(function(a) { - return a.preset; - }); - - // finds close matches to value in preset.terms - var similar_terms = filter(searchable, function(a) { - return some(a.terms() || [], function(b) { - return utilEditDistance(value, b) + Math.min(value.length - b.length, 0) < 3; - }); - }); - - var leading_suggestions = filter(suggestions, function(a) { - return leading(suggestionName(a.name())); - }).sort(function(a, b) { - a = suggestionName(a.name()); - b = suggestionName(b.name()); - var i = a.indexOf(value) - b.indexOf(value); - if (i === 0) return a.length - b.length; - else return i; - }); - - var similar_suggestions = suggestions.map(function(a) { - return { - preset: a, - dist: utilEditDistance(value, suggestionName(a.name())) - }; - }).filter(function(a) { - return a.dist + Math.min(value.length - suggestionName(a.preset.name()).length, 0) < 1; - }).sort(function(a, b) { - return a.dist - b.dist; - }).map(function(a) { - return a.preset; - }); - - var other = presets.item(geometry); - - var results = leading_name.concat( - leading_terms, - leading_tag_values, - leading_suggestions.slice(0, maxSuggestionResults + 5), - similar_name, - similar_terms, - similar_suggestions.slice(0, maxSuggestionResults) - ).slice(0, maxSearchResults - 1); - - return presetCollection(uniq(results.concat(other))); - } - }; + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); - return presets; -} + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root$2 && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } -function presetCategory(id, category, all) { - category = clone(category); + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG$4 = 1; - category.id = id; + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG$4, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root$2 && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + /** Used as the internal argument placeholder. */ + var PLACEHOLDER$1 = '__lodash_placeholder__'; - category.members = presetCollection(category.members.map(function(id) { - return all.item(id); - })); + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG$5 = 1, + WRAP_BIND_KEY_FLAG$3 = 2, + WRAP_CURRY_BOUND_FLAG$1 = 4, + WRAP_CURRY_FLAG$3 = 8, + WRAP_ARY_FLAG$2 = 128, + WRAP_REARG_FLAG$1 = 256; + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMin$3 = Math.min; - category.matchGeometry = function(geometry) { - return category.geometry.indexOf(geometry) >= 0; - }; + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG$5 | WRAP_BIND_KEY_FLAG$3 | WRAP_ARY_FLAG$2); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG$2) && (bitmask == WRAP_CURRY_FLAG$3)) || + ((srcBitmask == WRAP_ARY_FLAG$2) && (bitmask == WRAP_REARG_FLAG$1) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG$2 | WRAP_REARG_FLAG$1)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG$3)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG$5) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG$5 ? 0 : WRAP_CURRY_BOUND_FLAG$1; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER$1) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER$1) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG$2) { + data[8] = data[8] == null ? source[8] : nativeMin$3(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + return data; + } - category.matchScore = function() { - return -1; - }; + /** Error message constants. */ + var FUNC_ERROR_TEXT$4 = 'Expected a function'; + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG$6 = 1, + WRAP_BIND_KEY_FLAG$4 = 2, + WRAP_CURRY_FLAG$4 = 8, + WRAP_CURRY_RIGHT_FLAG$2 = 16, + WRAP_PARTIAL_FLAG$2 = 32, + WRAP_PARTIAL_RIGHT_FLAG$2 = 64; - category.name = function() { - return t('presets.categories.' + id + '.name', {'default': id}); - }; + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax$7 = Math.max; + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG$4; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT$4); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG$2 | WRAP_PARTIAL_RIGHT_FLAG$2); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax$7(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; - category.terms = function() { - return []; - }; + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG$2) { + var partialsRight = partials, + holdersRight = holders; + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); - return category; -} + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; -function presetField(id, field) { - field = clone(field); + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined + ? (isBindKey ? 0 : func.length) + : nativeMax$7(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG$4 | WRAP_CURRY_RIGHT_FLAG$2)) { + bitmask &= ~(WRAP_CURRY_FLAG$4 | WRAP_CURRY_RIGHT_FLAG$2); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG$6) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG$4 || bitmask == WRAP_CURRY_RIGHT_FLAG$2) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG$2 || bitmask == (WRAP_BIND_FLAG$6 | WRAP_PARTIAL_FLAG$2)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } - field.id = id; + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG$7 = 1, + WRAP_PARTIAL_FLAG$3 = 32; + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind$2 = baseRest(function(func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG$7; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind$2)); + bitmask |= WRAP_PARTIAL_FLAG$3; + } + return createWrap(func, bitmask, thisArg, partials, holders); + }); - field.matchGeometry = function(geometry) { - return !field.geometry || field.geometry === geometry; - }; + // Assign default placeholders. + bind$2.placeholder = {}; + function presetCollection(collection) { + var maxSearchResults = 50, + maxSuggestionResults = 10; + + var presets = { - field.t = function(scope, options) { - return t('presets.fields.' + id + '.' + scope, options); - }; + collection: collection, + + + item: function(id) { + return find$1(this.collection, function(d) { + return d.id === id; + }); + }, + + + matchGeometry: function(geometry) { + return presetCollection(this.collection.filter(function(d) { + return d.matchGeometry(geometry); + })); + }, + + + search: function(value, geometry) { + if (!value) return this; + + function leading(a) { + var index = a.indexOf(value); + return index === 0 || a[index - 1] === ' '; + } + + function suggestionName(name) { + var nameArray = name.split(' - '); + if (nameArray.length > 1) { + name = nameArray.slice(0, nameArray.length - 1).join(' - '); + } + return name.toLowerCase(); + } + + + value = value.toLowerCase(); + + var searchable = filter(this.collection, function(a) { + return a.searchable !== false && a.suggestion !== true; + }), + suggestions = filter(this.collection, function(a) { + return a.suggestion === true; + }); + + + // matches value to preset.name + var leading_name = filter(searchable, function(a) { + return leading(a.name().toLowerCase()); + }).sort(function(a, b) { + var aCompare = a.name().toLowerCase(), + bCompare = b.name().toLowerCase(), + i; + + // priority if search string matches preset name exactly - #4325 + if (value === aCompare) return -1; + if (value === bCompare) return 1; + + // priority for higher matchScore + i = b.originalScore - a.originalScore; + if (i !== 0) return i; + + // priority if search string appears earlier in preset name + i = aCompare.indexOf(value) - bCompare.indexOf(value); + if (i !== 0) return i; + + // priority for shorter preset names + return a.name().length - b.name().length; + }); + + // matches value to preset.terms values + var leading_terms = filter(searchable, function(a) { + return some(a.terms() || [], leading); + }); + + // matches value to preset.tags values + var leading_tag_values = filter(searchable, function(a) { + return some(without(values$1(a.tags || {}), '*'), leading); + }); + + + // finds close matches to value in preset.name + var similar_name = searchable.map(function(a) { + return { + preset: a, + dist: utilEditDistance(value, a.name()) + }; + }).filter(function(a) { + return a.dist + Math.min(value.length - a.preset.name().length, 0) < 3; + }).sort(function(a, b) { + return a.dist - b.dist; + }).map(function(a) { + return a.preset; + }); + + // finds close matches to value in preset.terms + var similar_terms = filter(searchable, function(a) { + return some(a.terms() || [], function(b) { + return utilEditDistance(value, b) + Math.min(value.length - b.length, 0) < 3; + }); + }); + + var leading_suggestions = filter(suggestions, function(a) { + return leading(suggestionName(a.name())); + }).sort(function(a, b) { + a = suggestionName(a.name()); + b = suggestionName(b.name()); + var i = a.indexOf(value) - b.indexOf(value); + if (i === 0) return a.length - b.length; + else return i; + }); + + var similar_suggestions = suggestions.map(function(a) { + return { + preset: a, + dist: utilEditDistance(value, suggestionName(a.name())) + }; + }).filter(function(a) { + return a.dist + Math.min(value.length - suggestionName(a.preset.name()).length, 0) < 1; + }).sort(function(a, b) { + return a.dist - b.dist; + }).map(function(a) { + return a.preset; + }); + + var other = presets.item(geometry); + + var results = leading_name.concat( + leading_terms, + leading_tag_values, + leading_suggestions.slice(0, maxSuggestionResults + 5), + similar_name, + similar_terms, + similar_suggestions.slice(0, maxSuggestionResults) + ).slice(0, maxSearchResults - 1); + + return presetCollection(uniq(results.concat(other))); + } + }; - field.label = function() { - return field.t('label', {'default': id}); - }; + return presets; + } + function presetCategory(id, category, all) { + category = clone(category); - var placeholder = field.placeholder; - field.placeholder = function() { - return field.t('placeholder', {'default': placeholder}); - }; + category.id = id; - return field; -} + category.members = presetCollection(category.members.map(function(id) { + return all.item(id); + })); -function presetPreset(id, preset, fields) { - preset = clone(preset); - preset.id = id; - preset.fields = (preset.fields || []).map(getFields); - preset.geometry = (preset.geometry || []); + category.matchGeometry = function(geometry) { + return category.geometry.indexOf(geometry) >= 0; + }; - function getFields(f) { - return fields[f]; - } + category.matchScore = function() { + return -1; + }; - preset.matchGeometry = function(geometry) { - return preset.geometry.indexOf(geometry) >= 0; - }; + category.name = function() { + return t('presets.categories.' + id + '.name', {'default': id}); + }; - preset.originalScore = preset.matchScore || 1; + category.terms = function() { + return []; + }; - preset.matchScore = function(entity) { - var tags = preset.tags, - score = 0; + return category; + } - for (var t$$1 in tags) { - if (entity.tags[t$$1] === tags[t$$1]) { - score += preset.originalScore; - } else if (tags[t$$1] === '*' && t$$1 in entity.tags) { - score += preset.originalScore / 2; - } else { - return -1; - } - } + function presetField(id, field) { + field = clone(field); - return score; - }; + field.id = id; + // for use in classes, element ids, css selectors + field.safeid = id.replace(/[^_a-zA-Z0-9\-]/g, '_'); - preset.t = function(scope, options) { - return t('presets.presets.' + id + '.' + scope, options); - }; + field.matchGeometry = function(geometry) { + return !field.geometry || field.geometry === geometry; + }; - var origName = preset.name || ''; - preset.name = function() { - if (preset.suggestion) { - id = id.split('/'); - id = id[0] + '/' + id[1]; - return origName + ' - ' + t('presets.presets.' + id + '.name'); - } - return preset.t('name', { 'default': origName }); - }; + field.t = function(scope, options) { + return t('presets.fields.' + id + '.' + scope, options); + }; - var origTerms = (preset.terms || []).join(); - preset.terms = function() { - return preset.t('terms', { 'default': origTerms }).toLowerCase().trim().split(/\s*,+\s*/); - }; + field.label = function() { + return field.t('label', {'default': id}); + }; - preset.isFallback = function() { - var tagCount = Object.keys(preset.tags).length; - return tagCount === 0 || (tagCount === 1 && preset.tags.hasOwnProperty('area')); - }; + var placeholder = field.placeholder; + field.placeholder = function() { + return field.t('placeholder', {'default': placeholder}); + }; - var reference = preset.reference || {}; - preset.reference = function(geometry) { - var key = reference.key || Object.keys(omit(preset.tags, 'name'))[0], - value = reference.value || preset.tags[key]; - if (geometry === 'relation' && key === 'type') { - if (value in preset.tags) { - key = value; - value = preset.tags[key]; - } else { - return { rtype: value }; - } - } + return field; + } - if (value === '*') { - return { key: key }; - } else { - return { key: key, value: value }; - } - }; + function presetPreset(id, preset, fields) { + preset = clone(preset); + preset.id = id; + preset.fields = (preset.fields || []).map(getFields); + preset.geometry = (preset.geometry || []); - var removeTags = preset.removeTags || preset.tags || {}; - preset.removeTags = function(tags, geometry) { - tags = omit(tags, keys$1(removeTags)); - for (var f in preset.fields) { - var field = preset.fields[f]; - if (field.matchGeometry(geometry) && field.default === tags[field.key]) { - delete tags[field.key]; - } - } + function getFields(f) { + return fields[f]; + } - delete tags.area; - return tags; - }; + preset.matchGeometry = function(geometry) { + return preset.geometry.indexOf(geometry) >= 0; + }; - var applyTags = preset.addTags || preset.tags || {}; - preset.applyTags = function(tags, geometry) { - var k; - tags = clone(tags); + preset.originalScore = preset.matchScore || 1; - for (k in applyTags) { - if (applyTags[k] === '*') { - tags[k] = 'yes'; - } else { - tags[k] = applyTags[k]; - } - } - // Add area=yes if necessary. - // This is necessary if the geometry is already an area (e.g. user drew an area) AND any of: - // 1. chosen preset could be either an area or a line (`barrier=city_wall`) - // 2. chosen preset doesn't have a key in areaKeys (`railway=station`) - if (!applyTags.hasOwnProperty('area')) { - delete tags.area; - if (geometry === 'area') { - var needsAreaTag = true; - if (preset.geometry.indexOf('line') === -1) { - for (k in applyTags) { - if (k in areaKeys) { - needsAreaTag = false; - break; - } - } - } - if (needsAreaTag) { - tags.area = 'yes'; - } - } - } + preset.matchScore = function(entity) { + var tags = preset.tags, + score = 0; - for (var f in preset.fields) { - var field = preset.fields[f]; - if (field.matchGeometry(geometry) && field.key && !tags[field.key] && field.default) { - tags[field.key] = field.default; - } - } + for (var t$$1 in tags) { + if (entity.tags[t$$1] === tags[t$$1]) { + score += preset.originalScore; + } else if (tags[t$$1] === '*' && t$$1 in entity.tags) { + score += preset.originalScore / 2; + } else { + return -1; + } + } - return tags; - }; + return score; + }; - return preset; -} + preset.t = function(scope, options) { + return t('presets.presets.' + id + '.' + scope, options); + }; -function presetIndex() { - // a presetCollection with methods for - // loading new data and returning defaults - var all = presetCollection([]); - var _defaults = { area: all, line: all, point: all, vertex: all, relation: all }; - var _fields = {}; - var _universal = []; - var _recent = presetCollection([]); + var origName = preset.name || ''; + preset.name = function() { + if (preset.suggestion) { + id = id.split('/'); + id = id[0] + '/' + id[1]; + return origName + ' - ' + t('presets.presets.' + id + '.name'); + } + return preset.t('name', { 'default': origName }); + }; - // Index of presets by (geometry, tag key). - var _index = { - point: {}, - vertex: {}, - line: {}, - area: {}, - relation: {} - }; + var origTerms = (preset.terms || []).join(); + preset.terms = function() { + return preset.t('terms', { 'default': origTerms }).toLowerCase().trim().split(/\s*,+\s*/); + }; - all.match = function(entity, resolver) { - var geometry = entity.geometry(resolver); - var address; - // Treat entities on addr:interpolation lines as points, not vertices - #3241 - if (geometry === 'vertex' && entity.isOnAddressLine(resolver)) { - geometry = 'point'; - } + preset.isFallback = function() { + var tagCount = Object.keys(preset.tags).length; + return tagCount === 0 || (tagCount === 1 && preset.tags.hasOwnProperty('area')); + }; - var geometryMatches = _index[geometry]; - var best = -1; - var match; - for (var k in entity.tags) { - // If any part of an address is present, - // allow fallback to "Address" preset - #4353 - if (k.match(/^addr:/) !== null && geometryMatches['addr:*']) { - address = geometryMatches['addr:*'][0]; - } + var reference = preset.reference || {}; + preset.reference = function(geometry) { + var key = reference.key || Object.keys(omit(preset.tags, 'name'))[0], + value = reference.value || preset.tags[key]; - var keyMatches = geometryMatches[k]; - if (!keyMatches) continue; + if (geometry === 'relation' && key === 'type') { + if (value in preset.tags) { + key = value; + value = preset.tags[key]; + } else { + return { rtype: value }; + } + } - for (var i = 0; i < keyMatches.length; i++) { - var score = keyMatches[i].matchScore(entity); - if (score > best) { - best = score; - match = keyMatches[i]; - } - } - } + if (value === '*') { + return { key: key }; + } else { + return { key: key, value: value }; + } + }; - if (address && (!match || match.isFallback())) { - match = address; - } - return match || all.item(geometry); - }; + var removeTags = preset.removeTags || preset.tags || {}; + preset.removeTags = function(tags, geometry) { + tags = omit(tags, keys$1(removeTags)); + for (var f in preset.fields) { + var field = preset.fields[f]; + if (field.matchGeometry(geometry) && field.default === tags[field.key]) { + delete tags[field.key]; + } + } - // Because of the open nature of tagging, iD will never have a complete - // list of tags used in OSM, so we want it to have logic like "assume - // that a closed way with an amenity tag is an area, unless the amenity - // is one of these specific types". This function computes a structure - // that allows testing of such conditions, based on the presets designated - // as as supporting (or not supporting) the area geometry. - // - // The returned object L is a whitelist/blacklist of tags. A closed way - // with a tag (k, v) is considered to be an area if `k in L && !(v in L[k])` - // (see `Way#isArea()`). In other words, the keys of L form the whitelist, - // and the subkeys form the blacklist. - all.areaKeys = function() { - var areaKeys = {}; - var ignore = ['barrier', 'highway', 'footway', 'railway', 'type']; // probably a line.. - var presets = reject(all.collection, 'suggestion'); - - // whitelist - presets.forEach(function(d) { - for (var key in d.tags) break; - if (!key) return; - if (ignore.indexOf(key) !== -1) return; - - if (d.geometry.indexOf('area') !== -1) { // probably an area.. - areaKeys[key] = areaKeys[key] || {}; - } - }); + delete tags.area; + return tags; + }; - // blacklist - presets.forEach(function(d) { - for (var key in d.tags) break; - if (!key) return; - if (ignore.indexOf(key) !== -1) return; - - var value = d.tags[key]; - if (key in areaKeys && // probably an area... - d.geometry.indexOf('line') !== -1 && // but sometimes a line - value !== '*') { - areaKeys[key][value] = true; - } - }); - return areaKeys; - }; + var applyTags = preset.addTags || preset.tags || {}; + preset.applyTags = function(tags, geometry) { + var k; + tags = clone(tags); - all.init = function() { - var d = data.presets; + for (k in applyTags) { + if (applyTags[k] === '*') { + tags[k] = 'yes'; + } else { + tags[k] = applyTags[k]; + } + } - all.collection = []; - _recent.collection = []; - _fields = {}; - _universal = []; - _index = { point: {}, vertex: {}, line: {}, area: {}, relation: {} }; + // Add area=yes if necessary. + // This is necessary if the geometry is already an area (e.g. user drew an area) AND any of: + // 1. chosen preset could be either an area or a line (`barrier=city_wall`) + // 2. chosen preset doesn't have a key in areaKeys (`railway=station`) + if (!applyTags.hasOwnProperty('area')) { + delete tags.area; + if (geometry === 'area') { + var needsAreaTag = true; + if (preset.geometry.indexOf('line') === -1) { + for (k in applyTags) { + if (k in areaKeys) { + needsAreaTag = false; + break; + } + } + } + if (needsAreaTag) { + tags.area = 'yes'; + } + } + } - if (d.fields) { - forEach(d.fields, function(d, id) { - _fields[id] = presetField(id, d); - if (d.universal) { - _universal.push(_fields[id]); - } - }); - } + for (var f in preset.fields) { + var field = preset.fields[f]; + if (field.matchGeometry(geometry) && field.key && !tags[field.key] && field.default) { + tags[field.key] = field.default; + } + } - if (d.presets) { - forEach(d.presets, function(d, id) { - all.collection.push(presetPreset(id, d, _fields)); - }); - } + return tags; + }; - if (d.categories) { - forEach(d.categories, function(d, id) { - all.collection.push(presetCategory(id, d, all)); - }); - } - if (d.defaults) { - var getItem = bind$2(all.item, all); - _defaults = { - area: presetCollection(d.defaults.area.map(getItem)), - line: presetCollection(d.defaults.line.map(getItem)), - point: presetCollection(d.defaults.point.map(getItem)), - vertex: presetCollection(d.defaults.vertex.map(getItem)), - relation: presetCollection(d.defaults.relation.map(getItem)) - }; - } + return preset; + } - for (var i = 0; i < all.collection.length; i++) { - var preset = all.collection[i]; - var geometry = preset.geometry; + function presetIndex() { + // a presetCollection with methods for + // loading new data and returning defaults - for (var j = 0; j < geometry.length; j++) { - var g = _index[geometry[j]]; - for (var k in preset.tags) { - (g[k] = g[k] || []).push(preset); - } - } - } + var all = presetCollection([]); + var _defaults = { area: all, line: all, point: all, vertex: all, relation: all }; + var _fields = {}; + var _universal = []; + var _recent = presetCollection([]); - return all; - }; + // Index of presets by (geometry, tag key). + var _index = { + point: {}, + vertex: {}, + line: {}, + area: {}, + relation: {} + }; - all.field = function(id) { - return _fields[id]; - }; + all.match = function(entity, resolver) { + var geometry = entity.geometry(resolver); + var address; - all.universal = function() { - return _universal; - }; + // Treat entities on addr:interpolation lines as points, not vertices - #3241 + if (geometry === 'vertex' && entity.isOnAddressLine(resolver)) { + geometry = 'point'; + } - all.defaults = function(geometry, n) { - var rec = _recent.matchGeometry(geometry).collection.slice(0, 4); - var def = uniq(rec.concat(_defaults[geometry].collection)).slice(0, n - 1); - return presetCollection(uniq(rec.concat(def).concat(all.item(geometry)))); - }; + var geometryMatches = _index[geometry]; + var best = -1; + var match; + + for (var k in entity.tags) { + // If any part of an address is present, + // allow fallback to "Address" preset - #4353 + if (k.match(/^addr:/) !== null && geometryMatches['addr:*']) { + address = geometryMatches['addr:*'][0]; + } + + var keyMatches = geometryMatches[k]; + if (!keyMatches) continue; + + for (var i = 0; i < keyMatches.length; i++) { + var score = keyMatches[i].matchScore(entity); + if (score > best) { + best = score; + match = keyMatches[i]; + } + } + } - all.choose = function(preset) { - _recent = presetCollection(uniq([preset].concat(_recent.collection))); - return all; - }; + if (address && (!match || match.isFallback())) { + match = address; + } - return all; -} + return match || all.item(geometry); + }; -var areaKeys = {}; -function setAreaKeys(value) { - areaKeys = value; -} + // Because of the open nature of tagging, iD will never have a complete + // list of tags used in OSM, so we want it to have logic like "assume + // that a closed way with an amenity tag is an area, unless the amenity + // is one of these specific types". This function computes a structure + // that allows testing of such conditions, based on the presets designated + // as as supporting (or not supporting) the area geometry. + // + // The returned object L is a whitelist/blacklist of tags. A closed way + // with a tag (k, v) is considered to be an area if `k in L && !(v in L[k])` + // (see `Way#isArea()`). In other words, the keys of L form the whitelist, + // and the subkeys form the blacklist. + all.areaKeys = function() { + var areaKeys = {}; + var ignore = ['barrier', 'highway', 'footway', 'railway', 'type']; // probably a line.. + var presets = reject(all.collection, 'suggestion'); + + // whitelist + presets.forEach(function(d) { + for (var key in d.tags) break; + if (!key) return; + if (ignore.indexOf(key) !== -1) return; + + if (d.geometry.indexOf('area') !== -1) { // probably an area.. + areaKeys[key] = areaKeys[key] || {}; + } + }); + // blacklist + presets.forEach(function(d) { + for (var key in d.tags) break; + if (!key) return; + if (ignore.indexOf(key) !== -1) return; + + var value = d.tags[key]; + if (key in areaKeys && // probably an area... + d.geometry.indexOf('line') !== -1 && // but sometimes a line + value !== '*') { + areaKeys[key][value] = true; + } + }); -function coreContext() { - var context = {}; - context.version = '2.7.1'; + return areaKeys; + }; - // create a special translation that contains the keys in place of the strings - var tkeys = cloneDeep(en); - var parents = []; - function traverser(v, k, obj) { - parents.push(k); - if (isObject(v)) { - forOwn(v, traverser); - } else if (isString(v)) { - obj[k] = parents.join('.'); - } - parents.pop(); - } + all.init = function() { + var d = data.presets; - forOwn(tkeys, traverser); - addTranslation('_tkeys_', tkeys); + all.collection = []; + _recent.collection = []; + _fields = {}; + _universal = []; + _index = { point: {}, vertex: {}, line: {}, area: {}, relation: {} }; - addTranslation('en', en); - setLocale('en'); + if (d.fields) { + forEach(d.fields, function(d, id) { + _fields[id] = presetField(id, d); + if (d.universal) { + _universal.push(_fields[id]); + } + }); + } - var dispatch$$1 = dispatch('enter', 'exit', 'change'); + if (d.presets) { + forEach(d.presets, function(d, id) { + all.collection.push(presetPreset(id, d, _fields)); + }); + } - // https://github.com/openstreetmap/iD/issues/772 - // http://mathiasbynens.be/notes/localstorage-pattern#comment-9 - var storage; - try { storage = localStorage; } catch (e) {} // eslint-disable-line no-empty - storage = storage || (function() { - var s = {}; - return { - getItem: function(k) { return s[k]; }, - setItem: function(k, v) { s[k] = v; }, - removeItem: function(k) { delete s[k]; } - }; - })(); + if (d.categories) { + forEach(d.categories, function(d, id) { + all.collection.push(presetCategory(id, d, all)); + }); + } - context.storage = function(k, v) { - try { - if (arguments.length === 1) return storage.getItem(k); - else if (v === null) storage.removeItem(k); - else storage.setItem(k, v); - } catch (e) { - // localstorage quota exceeded - /* eslint-disable no-console */ - if (typeof console !== 'undefined') console.error('localStorage quota exceeded'); - /* eslint-enable no-console */ - } - }; + if (d.defaults) { + var getItem = bind$2(all.item, all); + _defaults = { + area: presetCollection(d.defaults.area.map(getItem)), + line: presetCollection(d.defaults.line.map(getItem)), + point: presetCollection(d.defaults.point.map(getItem)), + vertex: presetCollection(d.defaults.vertex.map(getItem)), + relation: presetCollection(d.defaults.relation.map(getItem)) + }; + } + for (var i = 0; i < all.collection.length; i++) { + var preset = all.collection[i]; + var geometry = preset.geometry; - /* Straight accessors. Avoid using these if you can. */ - var ui, connection, history; - context.ui = function() { return ui; }; - context.connection = function() { return connection; }; - context.history = function() { return history; }; + for (var j = 0; j < geometry.length; j++) { + var g = _index[geometry[j]]; + for (var k in preset.tags) { + (g[k] = g[k] || []).push(preset); + } + } + } + return all; + }; - /* Connection */ - context.preauth = function(options) { - if (connection) { - connection.switch(options); - } - return context; - }; + all.field = function(id) { + return _fields[id]; + }; - context.loadTiles = utilCallWhenIdle(function(projection, dimensions, callback) { - var cid; - function done(err, result) { - if (connection.getConnectionId() !== cid) { - if (callback) callback({ message: 'Connection Switched', status: -1 }); - return; - } - if (!err) history.merge(result.data, result.extent); - if (callback) callback(err, result); - } - if (connection && context.editable()) { - cid = connection.getConnectionId(); - connection.loadTiles(projection, dimensions, done); - } - }); + all.universal = function() { + return _universal; + }; - context.loadEntity = function(entityId, callback) { - var cid; - function done(err, result) { - if (connection.getConnectionId() !== cid) { - if (callback) callback({ message: 'Connection Switched', status: -1 }); - return; - } - if (!err) history.merge(result.data, result.extent); - if (callback) callback(err, result); - } - if (connection) { - cid = connection.getConnectionId(); - connection.loadEntity(entityId, done); - } - }; + all.defaults = function(geometry, n) { + var rec = _recent.matchGeometry(geometry).collection.slice(0, 4); + var def = uniq(rec.concat(_defaults[geometry].collection)).slice(0, n - 1); + return presetCollection(uniq(rec.concat(def).concat(all.item(geometry)))); + }; - context.zoomToEntity = function(entityId, zoomTo) { - if (zoomTo !== false) { - this.loadEntity(entityId, function(err, result) { - if (err) return; - var entity = find$1(result.data, function(e) { return e.id === entityId; }); - if (entity) { map.zoomTo(entity); } - }); - } + all.choose = function(preset) { + _recent = presetCollection(uniq([preset].concat(_recent.collection))); + return all; + }; - map.on('drawn.zoomToEntity', function() { - if (!context.hasEntity(entityId)) return; - map.on('drawn.zoomToEntity', null); - context.on('enter.zoomToEntity', null); - context.enter(modeSelect(context, [entityId])); - }); + return all; + } - context.on('enter.zoomToEntity', function() { - if (mode.id !== 'browse') { - map.on('drawn.zoomToEntity', null); - context.on('enter.zoomToEntity', null); - } - }); - }; + var areaKeys = {}; - var minEditableZoom = 16; - context.minEditableZoom = function(_) { - if (!arguments.length) return minEditableZoom; - minEditableZoom = _; - if (connection) { - connection.tileZoom(_); - } - return context; - }; + function setAreaKeys(value) { + areaKeys = value; + } - /* History */ - var inIntro = false; - context.inIntro = function(_) { - if (!arguments.length) return inIntro; - inIntro = _; - return context; - }; + function coreContext() { + var context = {}; + context.version = '2.8.1'; - context.save = function() { - // no history save, no message onbeforeunload - if (inIntro || d3_select('.modal').size()) return; + // create a special translation that contains the keys in place of the strings + var tkeys = cloneDeep(en); + var parents = []; - var canSave; - if (mode && mode.id === 'save') { - canSave = false; - } else { - canSave = context.selectedIDs().every(function(id) { - var entity = context.hasEntity(id); - return entity && !entity.isDegenerate(); - }); - } + function traverser(v, k, obj) { + parents.push(k); + if (isObject(v)) { + forOwn(v, traverser); + } else if (isString(v)) { + obj[k] = parents.join('.'); + } + parents.pop(); + } - if (canSave) { - history.save(); - } - if (history.hasChanges()) { - return t('save.unsaved_changes'); - } - }; + forOwn(tkeys, traverser); + addTranslation('_tkeys_', tkeys); + addTranslation('en', en); + setLocale('en'); - /* Graph */ - context.hasEntity = function(id) { - return history.graph().hasEntity(id); - }; - context.entity = function(id) { - return history.graph().entity(id); - }; - context.childNodes = function(way) { - return history.graph().childNodes(way); - }; - context.geometry = function(id) { - return context.entity(id).geometry(history.graph()); - }; + var dispatch$$1 = dispatch('enter', 'exit', 'change'); + // https://github.com/openstreetmap/iD/issues/772 + // http://mathiasbynens.be/notes/localstorage-pattern#comment-9 + var storage; + try { storage = localStorage; } catch (e) {} // eslint-disable-line no-empty + storage = storage || (function() { + var s = {}; + return { + getItem: function(k) { return s[k]; }, + setItem: function(k, v) { s[k] = v; }, + removeItem: function(k) { delete s[k]; } + }; + })(); + + context.storage = function(k, v) { + try { + if (arguments.length === 1) return storage.getItem(k); + else if (v === null) storage.removeItem(k); + else storage.setItem(k, v); + } catch (e) { + // localstorage quota exceeded + /* eslint-disable no-console */ + if (typeof console !== 'undefined') console.error('localStorage quota exceeded'); + /* eslint-enable no-console */ + } + }; - /* Modes */ - var mode; - context.mode = function() { - return mode; - }; - context.enter = function(newMode) { - if (mode) { - mode.exit(); - dispatch$$1.call('exit', this, mode); - } - mode = newMode; - mode.enter(); - dispatch$$1.call('enter', this, mode); - }; + /* Straight accessors. Avoid using these if you can. */ + var ui, connection, history; + context.ui = function() { return ui; }; + context.connection = function() { return connection; }; + context.history = function() { return history; }; - context.selectedIDs = function() { - if (mode && mode.selectedIDs) { - return mode.selectedIDs(); - } else { - return []; - } - }; - context.activeID = function() { - return mode && mode.activeID && mode.activeID(); - }; + /* Connection */ + context.preauth = function(options) { + if (connection) { + connection.switch(options); + } + return context; + }; - /* Behaviors */ - context.install = function(behavior) { - context.surface().call(behavior); - }; - context.uninstall = function(behavior) { - context.surface().call(behavior.off); - }; + context.loadTiles = utilCallWhenIdle(function(projection, dimensions, callback) { + var cid; + function done(err, result) { + if (connection.getConnectionId() !== cid) { + if (callback) callback({ message: 'Connection Switched', status: -1 }); + return; + } + if (!err) history.merge(result.data, result.extent); + if (callback) callback(err, result); + } + if (connection && context.editable()) { + cid = connection.getConnectionId(); + connection.loadTiles(projection, dimensions, done); + } + }); + + context.loadEntity = function(entityId, callback) { + var cid; + function done(err, result) { + if (connection.getConnectionId() !== cid) { + if (callback) callback({ message: 'Connection Switched', status: -1 }); + return; + } + if (!err) history.merge(result.data, result.extent); + if (callback) callback(err, result); + } + if (connection) { + cid = connection.getConnectionId(); + connection.loadEntity(entityId, done); + } + }; + context.zoomToEntity = function(entityId, zoomTo) { + if (zoomTo !== false) { + this.loadEntity(entityId, function(err, result) { + if (err) return; + var entity = find$1(result.data, function(e) { return e.id === entityId; }); + if (entity) { map.zoomTo(entity); } + }); + } - /* Copy/Paste */ - var copyIDs = [], copyGraph; - context.copyGraph = function() { return copyGraph; }; - context.copyIDs = function(_) { - if (!arguments.length) return copyIDs; - copyIDs = _; - copyGraph = history.graph(); - return context; - }; + map.on('drawn.zoomToEntity', function() { + if (!context.hasEntity(entityId)) return; + map.on('drawn.zoomToEntity', null); + context.on('enter.zoomToEntity', null); + context.enter(modeSelect(context, [entityId])); + }); + context.on('enter.zoomToEntity', function() { + if (mode.id !== 'browse') { + map.on('drawn.zoomToEntity', null); + context.on('enter.zoomToEntity', null); + } + }); + }; - /* Background */ - var background; - context.background = function() { return background; }; + var minEditableZoom = 16; + context.minEditableZoom = function(_) { + if (!arguments.length) return minEditableZoom; + minEditableZoom = _; + if (connection) { + connection.tileZoom(_); + } + return context; + }; - /* Features */ - var features; - context.features = function() { return features; }; - context.hasHiddenConnections = function(id) { - var graph = history.graph(), - entity = graph.entity(id); - return features.hasHiddenConnections(entity, graph); - }; + /* History */ + var inIntro = false; + context.inIntro = function(_) { + if (!arguments.length) return inIntro; + inIntro = _; + return context; + }; + context.save = function() { + // no history save, no message onbeforeunload + if (inIntro || select('.modal').size()) return; - /* Presets */ - var presets; - context.presets = function() { return presets; }; + var canSave; + if (mode && mode.id === 'save') { + canSave = false; + } else { + canSave = context.selectedIDs().every(function(id) { + var entity = context.hasEntity(id); + return entity && !entity.isDegenerate(); + }); + } + if (canSave) { + history.save(); + } + if (history.hasChanges()) { + return t('save.unsaved_changes'); + } + }; - /* Map */ - var map; - context.map = function() { return map; }; - context.layers = function() { return map.layers; }; - context.surface = function() { return map.surface; }; - context.editable = function() { return map.editable(); }; - context.surfaceRect = function() { - return map.surface.node().getBoundingClientRect(); - }; + /* Graph */ + context.hasEntity = function(id) { + return history.graph().hasEntity(id); + }; + context.entity = function(id) { + return history.graph().entity(id); + }; + context.childNodes = function(way) { + return history.graph().childNodes(way); + }; + context.geometry = function(id) { + return context.entity(id).geometry(history.graph()); + }; - /* Debug */ - var debugFlags = { - tile: false, // tile boundaries - collision: false, // label collision bounding boxes - imagery: false, // imagery bounding polygons - imperial: false, // imperial (not metric) bounding polygons - driveLeft: false, // driveLeft bounding polygons - target: false // touch targets - }; - context.debugFlags = function() { - return debugFlags; - }; - context.setDebug = function(flag, val) { - if (arguments.length === 1) val = true; - debugFlags[flag] = val; - dispatch$$1.call('change'); - return context; - }; - context.getDebug = function(flag) { - return flag && debugFlags[flag]; - }; + /* Modes */ + var mode; + context.mode = function() { + return mode; + }; + context.enter = function(newMode) { + if (mode) { + mode.exit(); + dispatch$$1.call('exit', this, mode); + } - /* Container */ - var container = d3_select(document.body); - context.container = function(_) { - if (!arguments.length) return container; - container = _; - container.classed('id-container', true); - return context; - }; - var embed; - context.embed = function(_) { - if (!arguments.length) return embed; - embed = _; - return context; - }; + mode = newMode; + mode.enter(); + dispatch$$1.call('enter', this, mode); + }; + context.selectedIDs = function() { + if (mode && mode.selectedIDs) { + return mode.selectedIDs(); + } else { + return []; + } + }; + context.activeID = function() { + return mode && mode.activeID && mode.activeID(); + }; - /* Assets */ - var assetPath = ''; - context.assetPath = function(_) { - if (!arguments.length) return assetPath; - assetPath = _; - return context; - }; - var assetMap = {}; - context.assetMap = function(_) { - if (!arguments.length) return assetMap; - assetMap = _; - return context; - }; + /* Behaviors */ + context.install = function(behavior) { + context.surface().call(behavior); + }; + context.uninstall = function(behavior) { + context.surface().call(behavior.off); + }; - context.asset = function(_) { - var filename = assetPath + _; - return assetMap[filename] || filename; - }; - context.imagePath = function(_) { - return context.asset('img/' + _); - }; + /* Copy/Paste */ + var copyIDs = [], copyGraph; + context.copyGraph = function() { return copyGraph; }; + context.copyIDs = function(_) { + if (!arguments.length) return copyIDs; + copyIDs = _; + copyGraph = history.graph(); + return context; + }; - /* locales */ - // `locale` variable contains a "requested locale". - // It won't become the `currentLocale` until after loadLocale() is called. - var locale, localePath; + /* Background */ + var background; + context.background = function() { return background; }; - context.locale = function(loc, path) { - if (!arguments.length) return currentLocale; - locale = loc; - localePath = path; - return context; - }; - context.loadLocale = function(callback) { - if (locale && locale !== 'en' && dataLocales.hasOwnProperty(locale)) { - localePath = localePath || context.asset('locales/' + locale + '.json'); - d3_json(localePath, function(err, result) { - if (!err) { - addTranslation(locale, result[locale]); - setLocale(locale); - utilDetect(true); - } - if (callback) { - callback(err); - } - }); - } else { - if (locale) { - setLocale(locale); - utilDetect(true); - } - if (callback) { - callback(); - } - } - }; + /* Features */ + var features; + context.features = function() { return features; }; + context.hasHiddenConnections = function(id) { + var graph = history.graph(), + entity = graph.entity(id); + return features.hasHiddenConnections(entity, graph); + }; - /* reset (aka flush) */ - context.reset = context.flush = function() { - context.debouncedSave.cancel(); - forEach(services, function(service) { - if (service && typeof service.reset === 'function') { - service.reset(context); - } - }); - features.reset(); - history.reset(); - return context; - }; + /* Presets */ + var presets; + context.presets = function() { return presets; }; - /* Init */ + /* Map */ + var map; + context.map = function() { return map; }; + context.layers = function() { return map.layers; }; + context.surface = function() { return map.surface; }; + context.editable = function() { return map.editable(); }; + context.surfaceRect = function() { + return map.surface.node().getBoundingClientRect(); + }; - context.projection = geoRawMercator(); - context.curtainProjection = geoRawMercator(); - locale = utilDetect().locale; - if (locale && !dataLocales.hasOwnProperty(locale)) { - locale = locale.split('-')[0]; - } + /* Debug */ + var debugFlags = { + tile: false, // tile boundaries + collision: false, // label collision bounding boxes + imagery: false, // imagery bounding polygons + community: false, // community bounding polygons + imperial: false, // imperial (not metric) bounding polygons + driveLeft: false, // driveLeft bounding polygons + target: false // touch targets + }; + context.debugFlags = function() { + return debugFlags; + }; + context.setDebug = function(flag, val) { + if (arguments.length === 1) val = true; + debugFlags[flag] = val; + dispatch$$1.call('change'); + return context; + }; + context.getDebug = function(flag) { + return flag && debugFlags[flag]; + }; - history = coreHistory(context); - context.graph = history.graph; - context.changes = history.changes; - context.intersects = history.intersects; - // Debounce save, since it's a synchronous localStorage write, - // and history changes can happen frequently (e.g. when dragging). - context.debouncedSave = debounce(context.save, 350); - function withDebouncedSave(fn) { - return function() { - var result = fn.apply(history, arguments); - context.debouncedSave(); - return result; - }; - } + /* Container */ + var container = select(document.body); + context.container = function(_) { + if (!arguments.length) return container; + container = _; + container.classed('id-container', true); + return context; + }; + var embed; + context.embed = function(_) { + if (!arguments.length) return embed; + embed = _; + return context; + }; - context.perform = withDebouncedSave(history.perform); - context.replace = withDebouncedSave(history.replace); - context.pop = withDebouncedSave(history.pop); - context.overwrite = withDebouncedSave(history.overwrite); - context.undo = withDebouncedSave(history.undo); - context.redo = withDebouncedSave(history.redo); - - ui = uiInit(context); - - connection = services.osm; - background = rendererBackground(context); - features = rendererFeatures(context); - presets = presetIndex(); - - map = rendererMap(context); - context.mouse = map.mouse; - context.extent = map.extent; - context.pan = map.pan; - context.zoomIn = map.zoomIn; - context.zoomOut = map.zoomOut; - context.zoomInFurther = map.zoomInFurther; - context.zoomOutFurther = map.zoomOutFurther; - context.redrawEnable = map.redrawEnable; - - forEach(services, function(service) { - if (service && typeof service.init === 'function') { - service.init(context); - } - }); - background.init(); - features.init(); - presets.init(); - areaKeys = presets.areaKeys(); + /* Assets */ + var assetPath = ''; + context.assetPath = function(_) { + if (!arguments.length) return assetPath; + assetPath = _; + return context; + }; + var assetMap = {}; + context.assetMap = function(_) { + if (!arguments.length) return assetMap; + assetMap = _; + return context; + }; - return utilRebind(context, dispatch$$1, 'on'); -} + context.asset = function(_) { + var filename = assetPath + _; + return assetMap[filename] || filename; + }; -function osmWay() { - if (!(this instanceof osmWay)) { - return (new osmWay()).initialize(arguments); - } else if (arguments.length) { - this.initialize(arguments); - } -} + context.imagePath = function(_) { + return context.asset('img/' + _); + }; -osmEntity$$1.way = osmWay; + /* locales */ + // `locale` variable contains a "requested locale". + // It won't become the `currentLocale` until after loadLocale() is called. + var locale, localePath; -osmWay.prototype = Object.create(osmEntity$$1.prototype); + context.locale = function(loc, path) { + if (!arguments.length) return currentLocale; + locale = loc; + localePath = path; + return context; + }; + context.loadLocale = function(callback) { + if (locale && locale !== 'en' && dataLocales.hasOwnProperty(locale)) { + localePath = localePath || context.asset('locales/' + locale + '.json'); + d3_json(localePath, function(err, result) { + if (!err) { + addTranslation(locale, result[locale]); + setLocale(locale); + utilDetect(true); + } + if (callback) { + callback(err); + } + }); + } else { + if (locale) { + setLocale(locale); + utilDetect(true); + } + if (callback) { + callback(); + } + } + }; -assignIn(osmWay.prototype, { - type: 'way', - nodes: [], + /* reset (aka flush) */ + context.reset = context.flush = function() { + context.debouncedSave.cancel(); + forEach(services, function(service) { + if (service && typeof service.reset === 'function') { + service.reset(context); + } + }); + features.reset(); + history.reset(); + return context; + }; - copy: function(resolver, copies) { - if (copies[this.id]) - return copies[this.id]; - var copy = osmEntity$$1.prototype.copy.call(this, resolver, copies); + /* Init */ - var nodes = this.nodes.map(function(id) { - return resolver.entity(id).copy(resolver, copies).id; - }); + context.projection = geoRawMercator(); + context.curtainProjection = geoRawMercator(); - copy = copy.update({ nodes: nodes }); - copies[this.id] = copy; + locale = utilDetect().locale; + if (locale && !dataLocales.hasOwnProperty(locale)) { + locale = locale.split('-')[0]; + } - return copy; - }, + history = coreHistory(context); + context.graph = history.graph; + context.changes = history.changes; + context.intersects = history.intersects; + + // Debounce save, since it's a synchronous localStorage write, + // and history changes can happen frequently (e.g. when dragging). + context.debouncedSave = debounce(context.save, 350); + function withDebouncedSave(fn) { + return function() { + var result = fn.apply(history, arguments); + context.debouncedSave(); + return result; + }; + } + context.perform = withDebouncedSave(history.perform); + context.replace = withDebouncedSave(history.replace); + context.pop = withDebouncedSave(history.pop); + context.overwrite = withDebouncedSave(history.overwrite); + context.undo = withDebouncedSave(history.undo); + context.redo = withDebouncedSave(history.redo); + + ui = uiInit(context); + + connection = services.osm; + background = rendererBackground(context); + features = rendererFeatures(context); + presets = presetIndex(); + + map = rendererMap(context); + context.mouse = map.mouse; + context.extent = map.extent; + context.pan = map.pan; + context.zoomIn = map.zoomIn; + context.zoomOut = map.zoomOut; + context.zoomInFurther = map.zoomInFurther; + context.zoomOutFurther = map.zoomOutFurther; + context.redrawEnable = map.redrawEnable; + + forEach(services, function(service) { + if (service && typeof service.init === 'function') { + service.init(context); + } + }); - extent: function(resolver) { - return resolver.transient(this, 'extent', function() { - var extent = geoExtent$$1(); - for (var i = 0; i < this.nodes.length; i++) { - var node = resolver.hasEntity(this.nodes[i]); - if (node) { - extent._extend(node.extent()); - } - } - return extent; - }); - }, + background.init(); + features.init(); + presets.init(); + areaKeys = presets.areaKeys(); - first: function() { - return this.nodes[0]; - }, + return utilRebind(context, dispatch$$1, 'on'); + } + function osmWay() { + if (!(this instanceof osmWay)) { + return (new osmWay()).initialize(arguments); + } else if (arguments.length) { + this.initialize(arguments); + } + } - last: function() { - return this.nodes[this.nodes.length - 1]; - }, + osmEntity$$1.way = osmWay; - contains: function(node) { - return this.nodes.indexOf(node) >= 0; - }, + osmWay.prototype = Object.create(osmEntity$$1.prototype); - affix: function(node) { - if (this.nodes[0] === node) return 'prefix'; - if (this.nodes[this.nodes.length - 1] === node) return 'suffix'; - }, + assignIn(osmWay.prototype, { + type: 'way', + nodes: [], - layer: function() { - // explicit layer tag, clamp between -10, 10.. - if (isFinite(this.tags.layer)) { - return Math.max(-10, Math.min(+(this.tags.layer), 10)); - } + copy: function(resolver, copies) { + if (copies[this.id]) + return copies[this.id]; - // implied layer tag.. - if (this.tags.covered === 'yes') return -1; - if (this.tags.location === 'overground') return 1; - if (this.tags.location === 'underground') return -1; - if (this.tags.location === 'underwater') return -10; - - if (this.tags.power === 'line') return 10; - if (this.tags.power === 'minor_line') return 10; - if (this.tags.aerialway) return 10; - if (this.tags.bridge) return 1; - if (this.tags.cutting) return -1; - if (this.tags.tunnel) return -1; - if (this.tags.waterway) return -1; - if (this.tags.man_made === 'pipeline') return -10; - if (this.tags.boundary) return -10; - return 0; - }, + var copy = osmEntity$$1.prototype.copy.call(this, resolver, copies); + var nodes = this.nodes.map(function(id) { + return resolver.entity(id).copy(resolver, copies).id; + }); - isOneWay: function() { - // explicit oneway tag.. - var values = { - 'yes': true, - '1': true, - '-1': true, - 'reversible': true, - 'alternating': true, - 'no': false, - '0': false - }; - if (values[this.tags.oneway] !== undefined) { - return values[this.tags.oneway]; - } + copy = copy.update({ nodes: nodes }); + copies[this.id] = copy; - // implied oneway tag.. - for (var key in this.tags) { - if (key in osmOneWayTags && (this.tags[key] in osmOneWayTags[key])) - return true; - } - return false; - }, + return copy; + }, - lanes: function() { - return osmLanes(this); - }, + extent: function(resolver) { + return resolver.transient(this, 'extent', function() { + var extent = geoExtent$$1(); + for (var i = 0; i < this.nodes.length; i++) { + var node = resolver.hasEntity(this.nodes[i]); + if (node) { + extent._extend(node.extent()); + } + } + return extent; + }); + }, - isClosed: function() { - return this.nodes.length > 1 && this.first() === this.last(); - }, + first: function() { + return this.nodes[0]; + }, - isConvex: function(resolver) { - if (!this.isClosed() || this.isDegenerate()) return null; + last: function() { + return this.nodes[this.nodes.length - 1]; + }, - var nodes = uniq(resolver.childNodes(this)); - var coords = map$3(nodes, 'loc'); - var curr = 0; - var prev = 0; - for (var i = 0; i < coords.length; i++) { - var o = coords[(i+1) % coords.length]; - var a = coords[i]; - var b = coords[(i+2) % coords.length]; - var res = geoVecCross(a, b, o); + contains: function(node) { + return this.nodes.indexOf(node) >= 0; + }, - curr = (res > 0) ? 1 : (res < 0) ? -1 : 0; - if (curr === 0) { - continue; - } else if (prev && curr !== prev) { - return false; - } - prev = curr; - } - return true; - }, + affix: function(node) { + if (this.nodes[0] === node) return 'prefix'; + if (this.nodes[this.nodes.length - 1] === node) return 'suffix'; + }, - isArea: function() { - // `highway` and `railway` are typically linear features, but there - // are a few exceptions that should be treated as areas, even in the - // absence of a proper `area=yes` or `areaKeys` tag.. see #4194 - var lineKeys = { - highway: { - rest_area: true, - services: true - }, - railway: { - roundhouse: true, - station: true, - traverser: true, - turntable: true, - wash: true - } - }; - if (this.tags.area === 'yes') - return true; - if (!this.isClosed() || this.tags.area === 'no') - return false; - for (var key in this.tags) { - if (key in areaKeys && !(this.tags[key] in areaKeys[key])) { - return true; - } - if (key in lineKeys && this.tags[key] in lineKeys[key]) { - return true; - } - } - return false; - }, + layer: function() { + // explicit layer tag, clamp between -10, 10.. + if (isFinite(this.tags.layer)) { + return Math.max(-10, Math.min(+(this.tags.layer), 10)); + } + // implied layer tag.. + if (this.tags.covered === 'yes') return -1; + if (this.tags.location === 'overground') return 1; + if (this.tags.location === 'underground') return -1; + if (this.tags.location === 'underwater') return -10; + + if (this.tags.power === 'line') return 10; + if (this.tags.power === 'minor_line') return 10; + if (this.tags.aerialway) return 10; + if (this.tags.bridge) return 1; + if (this.tags.cutting) return -1; + if (this.tags.tunnel) return -1; + if (this.tags.waterway) return -1; + if (this.tags.man_made === 'pipeline') return -10; + if (this.tags.boundary) return -10; + return 0; + }, - isDegenerate: function() { - return uniq(this.nodes).length < (this.isArea() ? 3 : 2); - }, + isOneWay: function() { + // explicit oneway tag.. + var values = { + 'yes': true, + '1': true, + '-1': true, + 'reversible': true, + 'alternating': true, + 'no': false, + '0': false + }; + if (values[this.tags.oneway] !== undefined) { + return values[this.tags.oneway]; + } - areAdjacent: function(n1, n2) { - for (var i = 0; i < this.nodes.length; i++) { - if (this.nodes[i] === n1) { - if (this.nodes[i - 1] === n2) return true; - if (this.nodes[i + 1] === n2) return true; - } - } - return false; - }, + // implied oneway tag.. + for (var key in this.tags) { + if (key in osmOneWayTags && (this.tags[key] in osmOneWayTags[key])) + return true; + } + return false; + }, - geometry: function(graph) { - return graph.transient(this, 'geometry', function() { - return this.isArea() ? 'area' : 'line'; - }); - }, + lanes: function() { + return osmLanes(this); + }, - // If this way is not closed, append the beginning node to the end of the nodelist to close it. - close: function() { - if (this.isClosed() || !this.nodes.length) return this; + isClosed: function() { + return this.nodes.length > 1 && this.first() === this.last(); + }, - var nodes = this.nodes.slice(); - nodes = nodes.filter(noRepeatNodes); - nodes.push(nodes[0]); - return this.update({ nodes: nodes }); - }, + isConvex: function(resolver) { + if (!this.isClosed() || this.isDegenerate()) return null; - // If this way is closed, remove any connector nodes from the end of the nodelist to unclose it. - unclose: function() { - if (!this.isClosed()) return this; + var nodes = uniq(resolver.childNodes(this)); + var coords = map$3(nodes, 'loc'); + var curr = 0; + var prev = 0; - var nodes = this.nodes.slice(), - connector = this.first(), - i = nodes.length - 1; + for (var i = 0; i < coords.length; i++) { + var o = coords[(i+1) % coords.length]; + var a = coords[i]; + var b = coords[(i+2) % coords.length]; + var res = geoVecCross(a, b, o); - // remove trailing connectors.. - while (i > 0 && nodes.length > 1 && nodes[i] === connector) { - nodes.splice(i, 1); - i = nodes.length - 1; - } + curr = (res > 0) ? 1 : (res < 0) ? -1 : 0; + if (curr === 0) { + continue; + } else if (prev && curr !== prev) { + return false; + } + prev = curr; + } + return true; + }, - nodes = nodes.filter(noRepeatNodes); - return this.update({ nodes: nodes }); - }, + isArea: function() { + // `highway` and `railway` are typically linear features, but there + // are a few exceptions that should be treated as areas, even in the + // absence of a proper `area=yes` or `areaKeys` tag.. see #4194 + var lineKeys = { + highway: { + rest_area: true, + services: true + }, + railway: { + roundhouse: true, + station: true, + traverser: true, + turntable: true, + wash: true + } + }; - // Adds a node (id) in front of the node which is currently at position index. - // If index is undefined, the node will be added to the end of the way for linear ways, - // or just before the final connecting node for circular ways. - // Consecutive duplicates are eliminated including existing ones. - // Circularity is always preserved when adding a node. - addNode: function(id, index) { - var nodes = this.nodes.slice(), - isClosed = this.isClosed(), - max = isClosed ? nodes.length - 1 : nodes.length; + if (this.tags.area === 'yes') + return true; + if (!this.isClosed() || this.tags.area === 'no') + return false; + for (var key in this.tags) { + if (key in areaKeys && !(this.tags[key] in areaKeys[key])) { + return true; + } + if (key in lineKeys && this.tags[key] in lineKeys[key]) { + return true; + } + } + return false; + }, - if (index === undefined) { - index = max; - } - if (index < 0 || index > max) { - throw new RangeError('index ' + index + ' out of range 0..' + max); - } + isDegenerate: function() { + return uniq(this.nodes).length < (this.isArea() ? 3 : 2); + }, - // If this is a closed way, remove all connector nodes except the first one - // (there may be duplicates) and adjust index if necessary.. - if (isClosed) { - var connector = this.first(); - // leading connectors.. - var i = 1; - while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) { - nodes.splice(i, 1); - if (index > i) index--; - } + areAdjacent: function(n1, n2) { + for (var i = 0; i < this.nodes.length; i++) { + if (this.nodes[i] === n1) { + if (this.nodes[i - 1] === n2) return true; + if (this.nodes[i + 1] === n2) return true; + } + } + return false; + }, - // trailing connectors.. - i = nodes.length - 1; - while (i > 0 && nodes.length > 1 && nodes[i] === connector) { - nodes.splice(i, 1); - if (index > i) index--; - i = nodes.length - 1; - } - } - nodes.splice(index, 0, id); - nodes = nodes.filter(noRepeatNodes); + geometry: function(graph) { + return graph.transient(this, 'geometry', function() { + return this.isArea() ? 'area' : 'line'; + }); + }, - // If the way was closed before, append a connector node to keep it closed.. - if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) { - nodes.push(nodes[0]); - } - return this.update({ nodes: nodes }); - }, + // If this way is not closed, append the beginning node to the end of the nodelist to close it. + close: function() { + if (this.isClosed() || !this.nodes.length) return this; + var nodes = this.nodes.slice(); + nodes = nodes.filter(noRepeatNodes); + nodes.push(nodes[0]); + return this.update({ nodes: nodes }); + }, - // Replaces the node which is currently at position index with the given node (id). - // Consecutive duplicates are eliminated including existing ones. - // Circularity is preserved when updating a node. - updateNode: function(id, index) { - var nodes = this.nodes.slice(), - isClosed = this.isClosed(), - max = nodes.length - 1; - if (index === undefined || index < 0 || index > max) { - throw new RangeError('index ' + index + ' out of range 0..' + max); - } + // If this way is closed, remove any connector nodes from the end of the nodelist to unclose it. + unclose: function() { + if (!this.isClosed()) return this; - // If this is a closed way, remove all connector nodes except the first one - // (there may be duplicates) and adjust index if necessary.. - if (isClosed) { - var connector = this.first(); + var nodes = this.nodes.slice(), + connector = this.first(), + i = nodes.length - 1; - // leading connectors.. - var i = 1; - while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) { - nodes.splice(i, 1); - if (index > i) index--; - } + // remove trailing connectors.. + while (i > 0 && nodes.length > 1 && nodes[i] === connector) { + nodes.splice(i, 1); + i = nodes.length - 1; + } - // trailing connectors.. - i = nodes.length - 1; - while (i > 0 && nodes.length > 1 && nodes[i] === connector) { - nodes.splice(i, 1); - if (index === i) index = 0; // update leading connector instead - i = nodes.length - 1; - } - } + nodes = nodes.filter(noRepeatNodes); + return this.update({ nodes: nodes }); + }, - nodes.splice(index, 1, id); - nodes = nodes.filter(noRepeatNodes); - // If the way was closed before, append a connector node to keep it closed.. - if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) { - nodes.push(nodes[0]); - } + // Adds a node (id) in front of the node which is currently at position index. + // If index is undefined, the node will be added to the end of the way for linear ways, + // or just before the final connecting node for circular ways. + // Consecutive duplicates are eliminated including existing ones. + // Circularity is always preserved when adding a node. + addNode: function(id, index) { + var nodes = this.nodes.slice(), + isClosed = this.isClosed(), + max = isClosed ? nodes.length - 1 : nodes.length; - return this.update({nodes: nodes}); - }, + if (index === undefined) { + index = max; + } + if (index < 0 || index > max) { + throw new RangeError('index ' + index + ' out of range 0..' + max); + } - // Replaces each occurrence of node id needle with replacement. - // Consecutive duplicates are eliminated including existing ones. - // Circularity is preserved. - replaceNode: function(needle, replacement) { - var nodes = this.nodes.slice(), - isClosed = this.isClosed(); + // If this is a closed way, remove all connector nodes except the first one + // (there may be duplicates) and adjust index if necessary.. + if (isClosed) { + var connector = this.first(); + + // leading connectors.. + var i = 1; + while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) { + nodes.splice(i, 1); + if (index > i) index--; + } + + // trailing connectors.. + i = nodes.length - 1; + while (i > 0 && nodes.length > 1 && nodes[i] === connector) { + nodes.splice(i, 1); + if (index > i) index--; + i = nodes.length - 1; + } + } - for (var i = 0; i < nodes.length; i++) { - if (nodes[i] === needle) { - nodes[i] = replacement; - } - } + nodes.splice(index, 0, id); + nodes = nodes.filter(noRepeatNodes); - nodes = nodes.filter(noRepeatNodes); + // If the way was closed before, append a connector node to keep it closed.. + if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) { + nodes.push(nodes[0]); + } - // If the way was closed before, append a connector node to keep it closed.. - if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) { - nodes.push(nodes[0]); - } + return this.update({ nodes: nodes }); + }, - return this.update({nodes: nodes}); - }, + // Replaces the node which is currently at position index with the given node (id). + // Consecutive duplicates are eliminated including existing ones. + // Circularity is preserved when updating a node. + updateNode: function(id, index) { + var nodes = this.nodes.slice(), + isClosed = this.isClosed(), + max = nodes.length - 1; - // Removes each occurrence of node id needle with replacement. - // Consecutive duplicates are eliminated including existing ones. - // Circularity is preserved. - removeNode: function(id) { - var nodes = this.nodes.slice(), - isClosed = this.isClosed(); + if (index === undefined || index < 0 || index > max) { + throw new RangeError('index ' + index + ' out of range 0..' + max); + } - nodes = nodes - .filter(function(node) { return node !== id; }) - .filter(noRepeatNodes); + // If this is a closed way, remove all connector nodes except the first one + // (there may be duplicates) and adjust index if necessary.. + if (isClosed) { + var connector = this.first(); + + // leading connectors.. + var i = 1; + while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) { + nodes.splice(i, 1); + if (index > i) index--; + } + + // trailing connectors.. + i = nodes.length - 1; + while (i > 0 && nodes.length > 1 && nodes[i] === connector) { + nodes.splice(i, 1); + if (index === i) index = 0; // update leading connector instead + i = nodes.length - 1; + } + } - // If the way was closed before, append a connector node to keep it closed.. - if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) { - nodes.push(nodes[0]); - } + nodes.splice(index, 1, id); + nodes = nodes.filter(noRepeatNodes); - return this.update({nodes: nodes}); - }, + // If the way was closed before, append a connector node to keep it closed.. + if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) { + nodes.push(nodes[0]); + } + return this.update({nodes: nodes}); + }, - asJXON: function(changeset_id) { - var r = { - way: { - '@id': this.osmId(), - '@version': this.version || 0, - nd: map$3(this.nodes, function(id) { - return { keyAttributes: { ref: osmEntity$$1.id.toOSM(id) } }; - }), - tag: map$3(this.tags, function(v, k) { - return { keyAttributes: { k: k, v: v } }; - }) - } - }; - if (changeset_id) { - r.way['@changeset'] = changeset_id; - } - return r; - }, + // Replaces each occurrence of node id needle with replacement. + // Consecutive duplicates are eliminated including existing ones. + // Circularity is preserved. + replaceNode: function(needle, replacement) { + var nodes = this.nodes.slice(), + isClosed = this.isClosed(); - asGeoJSON: function(resolver) { - return resolver.transient(this, 'GeoJSON', function() { - var coordinates = map$3(resolver.childNodes(this), 'loc'); - if (this.isArea() && this.isClosed()) { - return { - type: 'Polygon', - coordinates: [coordinates] - }; - } else { - return { - type: 'LineString', - coordinates: coordinates - }; - } - }); - }, + for (var i = 0; i < nodes.length; i++) { + if (nodes[i] === needle) { + nodes[i] = replacement; + } + } + nodes = nodes.filter(noRepeatNodes); - area: function(resolver) { - return resolver.transient(this, 'area', function() { - var nodes = resolver.childNodes(this); + // If the way was closed before, append a connector node to keep it closed.. + if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) { + nodes.push(nodes[0]); + } - var json = { - type: 'Polygon', - coordinates: [map$3(nodes, 'loc')] - }; + return this.update({nodes: nodes}); + }, - if (!this.isClosed() && nodes.length) { - json.coordinates[0].push(nodes[0].loc); - } - var area = d3_geoArea(json); + // Removes each occurrence of node id needle with replacement. + // Consecutive duplicates are eliminated including existing ones. + // Circularity is preserved. + removeNode: function(id) { + var nodes = this.nodes.slice(), + isClosed = this.isClosed(); - // Heuristic for detecting counterclockwise winding order. Assumes - // that OpenStreetMap polygons are not hemisphere-spanning. - if (area > 2 * Math.PI) { - json.coordinates[0] = json.coordinates[0].reverse(); - area = d3_geoArea(json); - } + nodes = nodes + .filter(function(node) { return node !== id; }) + .filter(noRepeatNodes); - return isNaN(area) ? 0 : area; - }); - } -}); + // If the way was closed before, append a connector node to keep it closed.. + if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) { + nodes.push(nodes[0]); + } + return this.update({nodes: nodes}); + }, -// Filter function to eliminate consecutive duplicates. -function noRepeatNodes(node, i, arr) { - return i === 0 || node !== arr[i - 1]; -} -// For fixing up rendering of multipolygons with tags on the outer member. -// https://github.com/openstreetmap/iD/issues/613 -function osmIsSimpleMultipolygonOuterMember(entity, graph) { - if (entity.type !== 'way' || Object.keys(entity.tags).filter(osmIsInterestingTag).length === 0) - return false; + asJXON: function(changeset_id) { + var r = { + way: { + '@id': this.osmId(), + '@version': this.version || 0, + nd: map$3(this.nodes, function(id) { + return { keyAttributes: { ref: osmEntity$$1.id.toOSM(id) } }; + }), + tag: map$3(this.tags, function(v, k) { + return { keyAttributes: { k: k, v: v } }; + }) + } + }; + if (changeset_id) { + r.way['@changeset'] = changeset_id; + } + return r; + }, - var parents = graph.parentRelations(entity); - if (parents.length !== 1) - return false; - var parent = parents[0]; - if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1) - return false; + asGeoJSON: function(resolver) { + return resolver.transient(this, 'GeoJSON', function() { + var coordinates = map$3(resolver.childNodes(this), 'loc'); + if (this.isArea() && this.isClosed()) { + return { + type: 'Polygon', + coordinates: [coordinates] + }; + } else { + return { + type: 'LineString', + coordinates: coordinates + }; + } + }); + }, - var members = parent.members, member; - for (var i = 0; i < members.length; i++) { - member = members[i]; - if (member.id === entity.id && member.role && member.role !== 'outer') - return false; // Not outer member - if (member.id !== entity.id && (!member.role || member.role === 'outer')) - return false; // Not a simple multipolygon - } - return parent; -} + area: function(resolver) { + return resolver.transient(this, 'area', function() { + var nodes = resolver.childNodes(this); + var json = { + type: 'Polygon', + coordinates: [map$3(nodes, 'loc')] + }; -function osmSimpleMultipolygonOuterMember(entity, graph) { - if (entity.type !== 'way') - return false; + if (!this.isClosed() && nodes.length) { + json.coordinates[0].push(nodes[0].loc); + } - var parents = graph.parentRelations(entity); - if (parents.length !== 1) - return false; + var area = d3_geoArea(json); - var parent = parents[0]; - if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1) - return false; + // Heuristic for detecting counterclockwise winding order. Assumes + // that OpenStreetMap polygons are not hemisphere-spanning. + if (area > 2 * Math.PI) { + json.coordinates[0] = json.coordinates[0].reverse(); + area = d3_geoArea(json); + } - var members = parent.members, member, outerMember; - for (var i = 0; i < members.length; i++) { - member = members[i]; - if (!member.role || member.role === 'outer') { - if (outerMember) - return false; // Not a simple multipolygon - outerMember = member; - } - } + return isNaN(area) ? 0 : area; + }); + } + }); - if (!outerMember) - return false; - var outerEntity = graph.hasEntity(outerMember.id); - if (!outerEntity || !Object.keys(outerEntity.tags).filter(osmIsInterestingTag).length) - return false; + // Filter function to eliminate consecutive duplicates. + function noRepeatNodes(node, i, arr) { + return i === 0 || node !== arr[i - 1]; + } - return outerEntity; -} - - -// Join `toJoin` array into sequences of connecting ways. - -// Segments which share identical start/end nodes will, as much as possible, -// be connected with each other. -// -// The return value is a nested array. Each constituent array contains elements -// of `toJoin` which have been determined to connect. -// -// Each consitituent array also has a `nodes` property whose value is an -// ordered array of member nodes, with appropriate order reversal and -// start/end coordinate de-duplication. -// -// Members of `toJoin` must have, at minimum, `type` and `id` properties. -// Thus either an array of `osmWay`s or a relation member array may be used. -// -// If an member is an `osmWay`, its tags and childnodes may be reversed via -// `actionReverse` in the output. -// -// The returned sequences array also has an `actions` array property, containing -// any reversal actions that should be applied to the graph, should the calling -// code attempt to actually join the given ways. -// -// Incomplete members (those for which `graph.hasEntity(element.id)` returns -// false) and non-way members are ignored. -// -function osmJoinWays(toJoin, graph) { - function resolve(member) { - return graph.childNodes(graph.entity(member.id)); - } - - function reverse(item) { - var action = actionReverse(item.id, { reverseOneway: true }); - sequences.actions.push(action); - return (item instanceof osmWay) ? action(graph).entity(item.id) : item; - } - - // make a copy containing only the items to join - toJoin = toJoin.filter(function(member) { - return member.type === 'way' && graph.hasEntity(member.id); - }); + // For fixing up rendering of multipolygons with tags on the outer member. + // https://github.com/openstreetmap/iD/issues/613 + function osmIsSimpleMultipolygonOuterMember(entity, graph) { + if (entity.type !== 'way' || Object.keys(entity.tags).filter(osmIsInterestingTag).length === 0) + return false; + var parents = graph.parentRelations(entity); + if (parents.length !== 1) + return false; - var sequences = []; - sequences.actions = []; - - while (toJoin.length) { - // start a new sequence - var item = toJoin.shift(); - var currWays = [item]; - var currNodes = resolve(item).slice(); - var doneSequence = false; - - // add to it - while (toJoin.length && !doneSequence) { - var start = currNodes[0]; - var end = currNodes[currNodes.length - 1]; - var fn = null; - var nodes = null; - var i; - - // Find the next way/member to join. - for (i = 0; i < toJoin.length; i++) { - item = toJoin[i]; - nodes = resolve(item); - - // Strongly prefer to generate a forward path that preserves the order - // of the members array. For multipolygons and most relations, member - // order does not matter - but for routes, it does. If we started this - // sequence backwards (i.e. next member way attaches to the start node - // and not the end node), reverse the initial way before continuing. - if (currWays.length === 1 && nodes[0] !== end && nodes[nodes.length - 1] !== end && - (nodes[nodes.length - 1] === start || nodes[0] === start) - ) { - currWays[0] = reverse(currWays[0]); - currNodes.reverse(); - start = currNodes[0]; - end = currNodes[currNodes.length - 1]; - } - - if (nodes[0] === end) { - fn = currNodes.push; // join to end - nodes = nodes.slice(1); - break; - } else if (nodes[nodes.length - 1] === end) { - fn = currNodes.push; // join to end - nodes = nodes.slice(0, -1).reverse(); - item = reverse(item); - break; - } else if (nodes[nodes.length - 1] === start) { - fn = currNodes.unshift; // join to beginning - nodes = nodes.slice(0, -1); - break; - } else if (nodes[0] === start) { - fn = currNodes.unshift; // join to beginning - nodes = nodes.slice(1).reverse(); - item = reverse(item); - break; - } else { - fn = nodes = null; - } - } + var parent = parents[0]; + if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1) + return false; - if (!nodes) { // couldn't find a joinable way/member - doneSequence = true; - break; - } + var members = parent.members, member; + for (var i = 0; i < members.length; i++) { + member = members[i]; + if (member.id === entity.id && member.role && member.role !== 'outer') + return false; // Not outer member + if (member.id !== entity.id && (!member.role || member.role === 'outer')) + return false; // Not a simple multipolygon + } - fn.apply(currWays, [item]); - fn.apply(currNodes, nodes); + return parent; + } - toJoin.splice(i, 1); - } - currWays.nodes = currNodes; - sequences.push(currWays); - } + function osmSimpleMultipolygonOuterMember(entity, graph) { + if (entity.type !== 'way') + return false; - return sequences; -} + var parents = graph.parentRelations(entity); + if (parents.length !== 1) + return false; -function osmRelation() { - if (!(this instanceof osmRelation)) { - return (new osmRelation()).initialize(arguments); - } else if (arguments.length) { - this.initialize(arguments); - } -} + var parent = parents[0]; + if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1) + return false; + var members = parent.members, member, outerMember; + for (var i = 0; i < members.length; i++) { + member = members[i]; + if (!member.role || member.role === 'outer') { + if (outerMember) + return false; // Not a simple multipolygon + outerMember = member; + } + } -osmEntity$$1.relation = osmRelation; + if (!outerMember) + return false; -osmRelation.prototype = Object.create(osmEntity$$1.prototype); + var outerEntity = graph.hasEntity(outerMember.id); + if (!outerEntity || !Object.keys(outerEntity.tags).filter(osmIsInterestingTag).length) + return false; + return outerEntity; + } -osmRelation.creationOrder = function(a, b) { - var aId = parseInt(osmEntity$$1.id.toOSM(a.id), 10); - var bId = parseInt(osmEntity$$1.id.toOSM(b.id), 10); - if (aId < 0 || bId < 0) return aId - bId; - return bId - aId; -}; + // Join `toJoin` array into sequences of connecting ways. + // Segments which share identical start/end nodes will, as much as possible, + // be connected with each other. + // + // The return value is a nested array. Each constituent array contains elements + // of `toJoin` which have been determined to connect. + // + // Each consitituent array also has a `nodes` property whose value is an + // ordered array of member nodes, with appropriate order reversal and + // start/end coordinate de-duplication. + // + // Members of `toJoin` must have, at minimum, `type` and `id` properties. + // Thus either an array of `osmWay`s or a relation member array may be used. + // + // If an member is an `osmWay`, its tags and childnodes may be reversed via + // `actionReverse` in the output. + // + // The returned sequences array also has an `actions` array property, containing + // any reversal actions that should be applied to the graph, should the calling + // code attempt to actually join the given ways. + // + // Incomplete members (those for which `graph.hasEntity(element.id)` returns + // false) and non-way members are ignored. + // + function osmJoinWays(toJoin, graph) { + function resolve(member) { + return graph.childNodes(graph.entity(member.id)); + } -assignIn(osmRelation.prototype, { - type: 'relation', - members: [], + function reverse(item) { + var action = actionReverse(item.id, { reverseOneway: true }); + sequences.actions.push(action); + return (item instanceof osmWay) ? action(graph).entity(item.id) : item; + } + // make a copy containing only the items to join + toJoin = toJoin.filter(function(member) { + return member.type === 'way' && graph.hasEntity(member.id); + }); - copy: function(resolver, copies) { - if (copies[this.id]) - return copies[this.id]; + // Are the things we are joining relation members or `osmWays`? + // If `osmWays`, skip the "prefer a forward path" code below (see #4872) + var i; + var joinAsMembers = true; + for (i = 0; i < toJoin.length; i++) { + if (toJoin[i] instanceof osmWay) { + joinAsMembers = false; + break; + } + } - var copy = osmEntity$$1.prototype.copy.call(this, resolver, copies); + var sequences = []; + sequences.actions = []; + + while (toJoin.length) { + // start a new sequence + var item = toJoin.shift(); + var currWays = [item]; + var currNodes = resolve(item).slice(); + var doneSequence = false; + + // add to it + while (toJoin.length && !doneSequence) { + var start = currNodes[0]; + var end = currNodes[currNodes.length - 1]; + var fn = null; + var nodes = null; + + // Find the next way/member to join. + for (i = 0; i < toJoin.length; i++) { + item = toJoin[i]; + nodes = resolve(item); + + // (for member ordering only, not way ordering - see #4872) + // Strongly prefer to generate a forward path that preserves the order + // of the members array. For multipolygons and most relations, member + // order does not matter - but for routes, it does. (see #4589) + // If we started this sequence backwards (i.e. next member way attaches to + // the start node and not the end node), reverse the initial way before continuing. + if (joinAsMembers && currWays.length === 1 && nodes[0] !== end && nodes[nodes.length - 1] !== end && + (nodes[nodes.length - 1] === start || nodes[0] === start) + ) { + currWays[0] = reverse(currWays[0]); + currNodes.reverse(); + start = currNodes[0]; + end = currNodes[currNodes.length - 1]; + } + + if (nodes[0] === end) { + fn = currNodes.push; // join to end + nodes = nodes.slice(1); + break; + } else if (nodes[nodes.length - 1] === end) { + fn = currNodes.push; // join to end + nodes = nodes.slice(0, -1).reverse(); + item = reverse(item); + break; + } else if (nodes[nodes.length - 1] === start) { + fn = currNodes.unshift; // join to beginning + nodes = nodes.slice(0, -1); + break; + } else if (nodes[0] === start) { + fn = currNodes.unshift; // join to beginning + nodes = nodes.slice(1).reverse(); + item = reverse(item); + break; + } else { + fn = nodes = null; + } + } + + if (!nodes) { // couldn't find a joinable way/member + doneSequence = true; + break; + } + + fn.apply(currWays, [item]); + fn.apply(currNodes, nodes); + + toJoin.splice(i, 1); + } - var members = this.members.map(function(member) { - return assignIn({}, member, { id: resolver.entity(member.id).copy(resolver, copies).id }); - }); + currWays.nodes = currNodes; + sequences.push(currWays); + } - copy = copy.update({members: members}); - copies[this.id] = copy; + return sequences; + } - return copy; - }, + function osmRelation() { + if (!(this instanceof osmRelation)) { + return (new osmRelation()).initialize(arguments); + } else if (arguments.length) { + this.initialize(arguments); + } + } - extent: function(resolver, memo) { - return resolver.transient(this, 'extent', function() { - if (memo && memo[this.id]) return geoExtent$$1(); - memo = memo || {}; - memo[this.id] = true; + osmEntity$$1.relation = osmRelation; - var extent = geoExtent$$1(); - for (var i = 0; i < this.members.length; i++) { - var member = resolver.hasEntity(this.members[i].id); - if (member) { - extent._extend(member.extent(resolver, memo)); - } - } - return extent; - }); - }, + osmRelation.prototype = Object.create(osmEntity$$1.prototype); - geometry: function(graph) { - return graph.transient(this, 'geometry', function() { - return this.isMultipolygon() ? 'area' : 'relation'; - }); - }, + osmRelation.creationOrder = function(a, b) { + var aId = parseInt(osmEntity$$1.id.toOSM(a.id), 10); + var bId = parseInt(osmEntity$$1.id.toOSM(b.id), 10); + if (aId < 0 || bId < 0) return aId - bId; + return bId - aId; + }; - isDegenerate: function() { - return this.members.length === 0; - }, + assignIn(osmRelation.prototype, { + type: 'relation', + members: [], - // Return an array of members, each extended with an 'index' property whose value - // is the member index. - indexedMembers: function() { - var result = new Array(this.members.length); - for (var i = 0; i < this.members.length; i++) { - result[i] = assignIn({}, this.members[i], {index: i}); - } - return result; - }, + copy: function(resolver, copies) { + if (copies[this.id]) + return copies[this.id]; - // Return the first member with the given role. A copy of the member object - // is returned, extended with an 'index' property whose value is the member index. - memberByRole: function(role) { - for (var i = 0; i < this.members.length; i++) { - if (this.members[i].role === role) { - return assignIn({}, this.members[i], {index: i}); - } - } - }, + var copy = osmEntity$$1.prototype.copy.call(this, resolver, copies); - // Same as memberByRole, but returns all members with the given role - membersByRole: function(role) { - var result = []; - for (var i = 0; i < this.members.length; i++) { - if (this.members[i].role === role) { - result.push(assignIn({}, this.members[i], {index: i})); - } - } - return result; - }, + var members = this.members.map(function(member) { + return assignIn({}, member, { id: resolver.entity(member.id).copy(resolver, copies).id }); + }); - // Return the first member with the given id. A copy of the member object - // is returned, extended with an 'index' property whose value is the member index. - memberById: function(id) { - for (var i = 0; i < this.members.length; i++) { - if (this.members[i].id === id) { - return assignIn({}, this.members[i], {index: i}); - } - } - }, + copy = copy.update({members: members}); + copies[this.id] = copy; + return copy; + }, - // Return the first member with the given id and role. A copy of the member object - // is returned, extended with an 'index' property whose value is the member index. - memberByIdAndRole: function(id, role) { - for (var i = 0; i < this.members.length; i++) { - if (this.members[i].id === id && this.members[i].role === role) { - return assignIn({}, this.members[i], {index: i}); - } - } - }, + extent: function(resolver, memo) { + return resolver.transient(this, 'extent', function() { + if (memo && memo[this.id]) return geoExtent$$1(); + memo = memo || {}; + memo[this.id] = true; + + var extent = geoExtent$$1(); + for (var i = 0; i < this.members.length; i++) { + var member = resolver.hasEntity(this.members[i].id); + if (member) { + extent._extend(member.extent(resolver, memo)); + } + } + return extent; + }); + }, - addMember: function(member, index) { - var members = this.members.slice(); - members.splice(index === undefined ? members.length : index, 0, member); - return this.update({members: members}); - }, + geometry: function(graph) { + return graph.transient(this, 'geometry', function() { + return this.isMultipolygon() ? 'area' : 'relation'; + }); + }, - updateMember: function(member, index) { - var members = this.members.slice(); - members.splice(index, 1, assignIn({}, members[index], member)); - return this.update({members: members}); - }, + isDegenerate: function() { + return this.members.length === 0; + }, - removeMember: function(index) { - var members = this.members.slice(); - members.splice(index, 1); - return this.update({members: members}); - }, + // Return an array of members, each extended with an 'index' property whose value + // is the member index. + indexedMembers: function() { + var result = new Array(this.members.length); + for (var i = 0; i < this.members.length; i++) { + result[i] = assignIn({}, this.members[i], {index: i}); + } + return result; + }, - removeMembersWithID: function(id) { - var members = reject(this.members, function(m) { return m.id === id; }); - return this.update({members: members}); - }, + // Return the first member with the given role. A copy of the member object + // is returned, extended with an 'index' property whose value is the member index. + memberByRole: function(role) { + for (var i = 0; i < this.members.length; i++) { + if (this.members[i].role === role) { + return assignIn({}, this.members[i], {index: i}); + } + } + }, - // Wherever a member appears with id `needle.id`, replace it with a member - // with id `replacement.id`, type `replacement.type`, and the original role, - // By default, adding a duplicate member (by id and role) is prevented. - // Return an updated relation. - replaceMember: function(needle, replacement, keepDuplicates) { - if (!this.memberById(needle.id)) - return this; + // Same as memberByRole, but returns all members with the given role + membersByRole: function(role) { + var result = []; + for (var i = 0; i < this.members.length; i++) { + if (this.members[i].role === role) { + result.push(assignIn({}, this.members[i], {index: i})); + } + } + return result; + }, - var members = []; + // Return the first member with the given id. A copy of the member object + // is returned, extended with an 'index' property whose value is the member index. + memberById: function(id) { + for (var i = 0; i < this.members.length; i++) { + if (this.members[i].id === id) { + return assignIn({}, this.members[i], {index: i}); + } + } + }, - for (var i = 0; i < this.members.length; i++) { - var member = this.members[i]; - if (member.id !== needle.id) { - members.push(member); - } else if (keepDuplicates || !this.memberByIdAndRole(replacement.id, member.role)) { - members.push({id: replacement.id, type: replacement.type, role: member.role}); - } - } - return this.update({members: members}); - }, + // Return the first member with the given id and role. A copy of the member object + // is returned, extended with an 'index' property whose value is the member index. + memberByIdAndRole: function(id, role) { + for (var i = 0; i < this.members.length; i++) { + if (this.members[i].id === id && this.members[i].role === role) { + return assignIn({}, this.members[i], {index: i}); + } + } + }, - asJXON: function(changeset_id) { - var r = { - relation: { - '@id': this.osmId(), - '@version': this.version || 0, - member: map$3(this.members, function(member) { - return { - keyAttributes: { - type: member.type, - role: member.role, - ref: osmEntity$$1.id.toOSM(member.id) - } - }; - }), - tag: map$3(this.tags, function(v, k) { - return { keyAttributes: { k: k, v: v } }; - }) - } - }; - if (changeset_id) r.relation['@changeset'] = changeset_id; - return r; - }, + addMember: function(member, index) { + var members = this.members.slice(); + members.splice(index === undefined ? members.length : index, 0, member); + return this.update({members: members}); + }, - asGeoJSON: function(resolver) { - return resolver.transient(this, 'GeoJSON', function () { - if (this.isMultipolygon()) { - return { - type: 'MultiPolygon', - coordinates: this.multipolygon(resolver) - }; - } else { - return { - type: 'FeatureCollection', - properties: this.tags, - features: this.members.map(function (member) { - return assignIn({role: member.role}, resolver.entity(member.id).asGeoJSON(resolver)); - }) - }; - } - }); - }, + updateMember: function(member, index) { + var members = this.members.slice(); + members.splice(index, 1, assignIn({}, members[index], member)); + return this.update({members: members}); + }, - area: function(resolver) { - return resolver.transient(this, 'area', function() { - return d3_geoArea(this.asGeoJSON(resolver)); - }); - }, + removeMember: function(index) { + var members = this.members.slice(); + members.splice(index, 1); + return this.update({members: members}); + }, - isMultipolygon: function() { - return this.tags.type === 'multipolygon'; - }, + removeMembersWithID: function(id) { + var members = reject(this.members, function(m) { return m.id === id; }); + return this.update({members: members}); + }, - isComplete: function(resolver) { - for (var i = 0; i < this.members.length; i++) { - if (!resolver.hasEntity(this.members[i].id)) { - return false; - } - } - return true; - }, + // Wherever a member appears with id `needle.id`, replace it with a member + // with id `replacement.id`, type `replacement.type`, and the original role, + // By default, adding a duplicate member (by id and role) is prevented. + // Return an updated relation. + replaceMember: function(needle, replacement, keepDuplicates) { + if (!this.memberById(needle.id)) + return this; + var members = []; - isRestriction: function() { - return !!(this.tags.type && this.tags.type.match(/^restriction:?/)); - }, + for (var i = 0; i < this.members.length; i++) { + var member = this.members[i]; + if (member.id !== needle.id) { + members.push(member); + } else if (keepDuplicates || !this.memberByIdAndRole(replacement.id, member.role)) { + members.push({id: replacement.id, type: replacement.type, role: member.role}); + } + } + return this.update({members: members}); + }, - isValidRestriction: function() { - if (!this.isRestriction()) return false; - var froms = this.members.filter(function(m) { return m.role === 'from'; }); - var vias = this.members.filter(function(m) { return m.role === 'via'; }); - var tos = this.members.filter(function(m) { return m.role === 'to'; }); + asJXON: function(changeset_id) { + var r = { + relation: { + '@id': this.osmId(), + '@version': this.version || 0, + member: map$3(this.members, function(member) { + return { + keyAttributes: { + type: member.type, + role: member.role, + ref: osmEntity$$1.id.toOSM(member.id) + } + }; + }), + tag: map$3(this.tags, function(v, k) { + return { keyAttributes: { k: k, v: v } }; + }) + } + }; + if (changeset_id) r.relation['@changeset'] = changeset_id; + return r; + }, - if (froms.length !== 1 && this.tags.restriction !== 'no_entry') return false; - if (froms.some(function(m) { return m.type !== 'way'; })) return false; - if (tos.length !== 1 && this.tags.restriction !== 'no_exit') return false; - if (tos.some(function(m) { return m.type !== 'way'; })) return false; + asGeoJSON: function(resolver) { + return resolver.transient(this, 'GeoJSON', function () { + if (this.isMultipolygon()) { + return { + type: 'MultiPolygon', + coordinates: this.multipolygon(resolver) + }; + } else { + return { + type: 'FeatureCollection', + properties: this.tags, + features: this.members.map(function (member) { + return assignIn({role: member.role}, resolver.entity(member.id).asGeoJSON(resolver)); + }) + }; + } + }); + }, - if (vias.length === 0) return false; - if (vias.length > 1 && vias.some(function(m) { return m.type !== 'way'; })) return false; - return true; - }, + area: function(resolver) { + return resolver.transient(this, 'area', function() { + return d3_geoArea(this.asGeoJSON(resolver)); + }); + }, - // Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm], - // where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings. - // - // This corresponds to the structure needed for rendering a multipolygon path using a - // `evenodd` fill rule, as well as the structure of a GeoJSON MultiPolygon geometry. - // - // In the case of invalid geometries, this function will still return a result which - // includes the nodes of all way members, but some Nds may be unclosed and some inner - // rings not matched with the intended outer ring. - // - multipolygon: function(resolver) { - var outers = this.members.filter(function(m) { return 'outer' === (m.role || 'outer'); }); - var inners = this.members.filter(function(m) { return 'inner' === m.role; }); + isMultipolygon: function() { + return this.tags.type === 'multipolygon'; + }, - outers = osmJoinWays(outers, resolver); - inners = osmJoinWays(inners, resolver); - outers = outers.map(function(outer) { return map$3(outer.nodes, 'loc'); }); - inners = inners.map(function(inner) { return map$3(inner.nodes, 'loc'); }); + isComplete: function(resolver) { + for (var i = 0; i < this.members.length; i++) { + if (!resolver.hasEntity(this.members[i].id)) { + return false; + } + } + return true; + }, - var result = outers.map(function(o) { - // Heuristic for detecting counterclockwise winding order. Assumes - // that OpenStreetMap polygons are not hemisphere-spanning. - return [d3_geoArea({ type: 'Polygon', coordinates: [o] }) > 2 * Math.PI ? o.reverse() : o]; - }); - function findOuter(inner) { - var o, outer; + isRestriction: function() { + return !!(this.tags.type && this.tags.type.match(/^restriction:?/)); + }, - for (o = 0; o < outers.length; o++) { - outer = outers[o]; - if (geoPolygonContainsPolygon(outer, inner)) - return o; - } - for (o = 0; o < outers.length; o++) { - outer = outers[o]; - if (geoPolygonIntersectsPolygon(outer, inner, false)) - return o; - } - } + isValidRestriction: function() { + if (!this.isRestriction()) return false; - for (var i = 0; i < inners.length; i++) { - var inner = inners[i]; + var froms = this.members.filter(function(m) { return m.role === 'from'; }); + var vias = this.members.filter(function(m) { return m.role === 'via'; }); + var tos = this.members.filter(function(m) { return m.role === 'to'; }); - if (d3_geoArea({ type: 'Polygon', coordinates: [inner] }) < 2 * Math.PI) { - inner = inner.reverse(); - } + if (froms.length !== 1 && this.tags.restriction !== 'no_entry') return false; + if (froms.some(function(m) { return m.type !== 'way'; })) return false; - var o = findOuter(inners[i]); - if (o !== undefined) - result[o].push(inners[i]); - else - result.push([inners[i]]); // Invalid geometry - } + if (tos.length !== 1 && this.tags.restriction !== 'no_exit') return false; + if (tos.some(function(m) { return m.type !== 'way'; })) return false; - return result; - } -}); - -function osmTurn(turn) { - if (!(this instanceof osmTurn)) { - return new osmTurn(turn); - } - assignIn(this, turn); -} - - -function osmIntersection(graph, startVertexId, maxDistance) { - maxDistance = maxDistance || 30; // in meters - var vgraph = coreGraph$$1(); // virtual graph - var i, j, k; - - - function memberOfRestriction(entity) { - return graph.parentRelations(entity) - .some(function(r) { return r.isRestriction(); }); - } - - function isRoad(way) { - if (way.isArea() || way.isDegenerate()) return false; - var roads = { - 'motorway': true, - 'motorway_link': true, - 'trunk': true, - 'trunk_link': true, - 'primary': true, - 'primary_link': true, - 'secondary': true, - 'secondary_link': true, - 'tertiary': true, - 'tertiary_link': true, - 'residential': true, - 'unclassified': true, - 'living_street': true, - 'service': true, - 'road': true, - 'track': true - }; - return roads[way.tags.highway]; - } + if (vias.length === 0) return false; + if (vias.length > 1 && vias.some(function(m) { return m.type !== 'way'; })) return false; + return true; + }, - var startNode = graph.entity(startVertexId); - var checkVertices = [startNode]; - var checkWays; - var vertices = []; - var vertexIds = []; - var vertex; - var ways = []; - var wayIds = []; - var way; - var nodes = []; - var node; - var parents = []; - var parent; - - // `actions` will store whatever actions must be performed to satisfy - // preconditions for adding a turn restriction to this intersection. - // - Remove any existing degenerate turn restrictions (missing from/to, etc) - // - Reverse oneways so that they are drawn in the forward direction - // - Split ways on key vertices - var actions = []; - - - // STEP 1: walk the graph outwards from starting vertex to search - // for more key vertices and ways to include in the intersection.. - - while (checkVertices.length) { - vertex = checkVertices.pop(); - - // check this vertex for parent ways that are roads - checkWays = graph.parentWays(vertex); - var hasWays = false; - for (i = 0; i < checkWays.length; i++) { - way = checkWays[i]; - if (!isRoad(way) && !memberOfRestriction(way)) continue; - - ways.push(way); // it's a road, or it's already in a turn restriction - hasWays = true; - - // check the way's children for more key vertices - nodes = uniq(graph.childNodes(way)); - for (j = 0; j < nodes.length; j++) { - node = nodes[j]; - if (node === vertex) continue; // same thing - if (vertices.indexOf(node) !== -1) continue; // seen it already - if (node.loc && startNode.loc && - geoSphericalDistance(node.loc, startNode.loc) > maxDistance) continue; // too far from start - - // a key vertex will have parents that are also roads - var hasParents = false; - parents = graph.parentWays(node); - for (k = 0; k < parents.length; k++) { - parent = parents[k]; - if (parent === way) continue; // same thing - if (ways.indexOf(parent) !== -1) continue; // seen it already - if (!isRoad(parent)) continue; // not a road - hasParents = true; - break; - } - - if (hasParents) { - checkVertices.push(node); - } - } - } - if (hasWays) { - vertices.push(vertex); - } - } + // Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm], + // where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings. + // + // This corresponds to the structure needed for rendering a multipolygon path using a + // `evenodd` fill rule, as well as the structure of a GeoJSON MultiPolygon geometry. + // + // In the case of invalid geometries, this function will still return a result which + // includes the nodes of all way members, but some Nds may be unclosed and some inner + // rings not matched with the intended outer ring. + // + multipolygon: function(resolver) { + var outers = this.members.filter(function(m) { return 'outer' === (m.role || 'outer'); }); + var inners = this.members.filter(function(m) { return 'inner' === m.role; }); + + outers = osmJoinWays(outers, resolver); + inners = osmJoinWays(inners, resolver); + + outers = outers.map(function(outer) { return map$3(outer.nodes, 'loc'); }); + inners = inners.map(function(inner) { return map$3(inner.nodes, 'loc'); }); + + var result = outers.map(function(o) { + // Heuristic for detecting counterclockwise winding order. Assumes + // that OpenStreetMap polygons are not hemisphere-spanning. + return [d3_geoArea({ type: 'Polygon', coordinates: [o] }) > 2 * Math.PI ? o.reverse() : o]; + }); - vertices = uniq(vertices); - ways = uniq(ways); + function findOuter(inner) { + var o, outer; + for (o = 0; o < outers.length; o++) { + outer = outers[o]; + if (geoPolygonContainsPolygon(outer, inner)) + return o; + } - // STEP 2: Build a virtual graph containing only the entities in the intersection.. - // Everything done after this step should act on the virtual graph - // Any actions that must be performed later to the main graph go in `actions` array - ways.forEach(function(way) { - graph.childNodes(way).forEach(function(node) { - vgraph = vgraph.replace(node); - }); + for (o = 0; o < outers.length; o++) { + outer = outers[o]; + if (geoPolygonIntersectsPolygon(outer, inner, false)) + return o; + } + } - vgraph = vgraph.replace(way); + for (var i = 0; i < inners.length; i++) { + var inner = inners[i]; - graph.parentRelations(way).forEach(function(relation) { - if (relation.isRestriction()) { - if (relation.isValidRestriction(graph)) { - vgraph = vgraph.replace(relation); - } else if (relation.isComplete(graph)) { - actions.push(actionDeleteRelation(relation.id)); - } - } - }); - }); + if (d3_geoArea({ type: 'Polygon', coordinates: [inner] }) < 2 * Math.PI) { + inner = inner.reverse(); + } + var o = findOuter(inners[i]); + if (o !== undefined) + result[o].push(inners[i]); + else + result.push([inners[i]]); // Invalid geometry + } - // STEP 3: Force all oneways to be drawn in the forward direction - ways.forEach(function(w) { - var way = vgraph.entity(w.id); - if (way.tags.oneway === '-1') { - var action = actionReverse(way.id, { reverseOneway: true }); - actions.push(action); - vgraph = action(vgraph); - } - }); + return result; + } + }); + function osmTurn(turn) { + if (!(this instanceof osmTurn)) { + return new osmTurn(turn); + } + assignIn(this, turn); + } - // STEP 4: Split ways on key vertices - var origCount = osmEntity$$1.id.next.way; - vertices.forEach(function(v) { - // This is an odd way to do it, but we need to find all the ways that - // will be split here, then split them one at a time to ensure that these - // actions can be replayed on the main graph exactly in the same order. - // (It is unintuitive, but the order of ways returned from graph.parentWays() - // is arbitrary, depending on how the main graph and vgraph were built) - var splitAll = actionSplit(v.id); - if (!splitAll.disabled(vgraph)) { - splitAll.ways(vgraph).forEach(function(way) { - var splitOne = actionSplit(v.id).limitWays([way.id]); - actions.push(splitOne); - vgraph = splitOne(vgraph); - }); - } - }); - // In here is where we should also split the intersection at nearby junction. - // for https://github.com/mapbox/iD-internal/issues/31 - // nearbyVertices.forEach(function(v) { - // }); - - // Reasons why we reset the way id count here: - // 1. Continuity with way ids created by the splits so that we can replay - // these actions later if the user decides to create a turn restriction - // 2. Avoids churning way ids just by hovering over a vertex - // and displaying the turn restriction editor - osmEntity$$1.id.next.way = origCount; - - - // STEP 5: Update arrays to point to vgraph entities - vertexIds = vertices.map(function(v) { return v.id; }); - vertices = []; - ways = []; - - vertexIds.forEach(function(id) { - var vertex = vgraph.entity(id); - var parents = vgraph.parentWays(vertex); - vertices.push(vertex); - ways = ways.concat(parents); - }); + function osmIntersection(graph, startVertexId, maxDistance) { + maxDistance = maxDistance || 30; // in meters + var vgraph = coreGraph$$1(); // virtual graph + var i, j, k; - vertices = uniq(vertices); - ways = uniq(ways); - vertexIds = vertices.map(function(v) { return v.id; }); - wayIds = ways.map(function(w) { return w.id; }); + function memberOfRestriction(entity) { + return graph.parentRelations(entity) + .some(function(r) { return r.isRestriction(); }); + } + function isRoad(way) { + if (way.isArea() || way.isDegenerate()) return false; + var roads = { + 'motorway': true, + 'motorway_link': true, + 'trunk': true, + 'trunk_link': true, + 'primary': true, + 'primary_link': true, + 'secondary': true, + 'secondary_link': true, + 'tertiary': true, + 'tertiary_link': true, + 'residential': true, + 'unclassified': true, + 'living_street': true, + 'service': true, + 'road': true, + 'track': true + }; + return roads[way.tags.highway]; + } - // STEP 6: Update the ways with some metadata that will be useful for - // walking the intersection graph later and rendering turn arrows. - function withMetadata(way, vertexIds) { - var __oneWay = way.isOneWay(); + var startNode = graph.entity(startVertexId); + var checkVertices = [startNode]; + var checkWays; + var vertices = []; + var vertexIds = []; + var vertex; + var ways = []; + var wayIds = []; + var way; + var nodes = []; + var node; + var parents = []; + var parent; + + // `actions` will store whatever actions must be performed to satisfy + // preconditions for adding a turn restriction to this intersection. + // - Remove any existing degenerate turn restrictions (missing from/to, etc) + // - Reverse oneways so that they are drawn in the forward direction + // - Split ways on key vertices + var actions = []; + + + // STEP 1: walk the graph outwards from starting vertex to search + // for more key vertices and ways to include in the intersection.. + + while (checkVertices.length) { + vertex = checkVertices.pop(); + + // check this vertex for parent ways that are roads + checkWays = graph.parentWays(vertex); + var hasWays = false; + for (i = 0; i < checkWays.length; i++) { + way = checkWays[i]; + if (!isRoad(way) && !memberOfRestriction(way)) continue; + + ways.push(way); // it's a road, or it's already in a turn restriction + hasWays = true; + + // check the way's children for more key vertices + nodes = uniq(graph.childNodes(way)); + for (j = 0; j < nodes.length; j++) { + node = nodes[j]; + if (node === vertex) continue; // same thing + if (vertices.indexOf(node) !== -1) continue; // seen it already + if (node.loc && startNode.loc && + geoSphericalDistance(node.loc, startNode.loc) > maxDistance) continue; // too far from start + + // a key vertex will have parents that are also roads + var hasParents = false; + parents = graph.parentWays(node); + for (k = 0; k < parents.length; k++) { + parent = parents[k]; + if (parent === way) continue; // same thing + if (ways.indexOf(parent) !== -1) continue; // seen it already + if (!isRoad(parent)) continue; // not a road + hasParents = true; + break; + } + + if (hasParents) { + checkVertices.push(node); + } + } + } - // which affixes are key vertices? - var __first = (vertexIds.indexOf(way.first()) !== -1); - var __last = (vertexIds.indexOf(way.last()) !== -1); + if (hasWays) { + vertices.push(vertex); + } + } - // what roles is this way eligible for? - var __via = (__first && __last); - var __from = ((__first && !__oneWay) || __last); - var __to = (__first || (__last && !__oneWay)); + vertices = uniq(vertices); + ways = uniq(ways); - return way.update({ - __first: __first, - __last: __last, - __from: __from, - __via: __via, - __to: __to, - __oneWay: __oneWay - }); - } - ways = []; - wayIds.forEach(function(id) { - var way = withMetadata(vgraph.entity(id), vertexIds); - vgraph = vgraph.replace(way); - ways.push(way); - }); + // STEP 2: Build a virtual graph containing only the entities in the intersection.. + // Everything done after this step should act on the virtual graph + // Any actions that must be performed later to the main graph go in `actions` array + ways.forEach(function(way) { + graph.childNodes(way).forEach(function(node) { + vgraph = vgraph.replace(node); + }); + vgraph = vgraph.replace(way); - // STEP 7: Simplify - This is an iterative process where we: - // 1. Find trivial vertices with only 2 parents - // 2. trim off the leaf way from those vertices and remove from vgraph + graph.parentRelations(way).forEach(function(relation) { + if (relation.isRestriction()) { + if (relation.isValidRestriction(graph)) { + vgraph = vgraph.replace(relation); + } else if (relation.isComplete(graph)) { + actions.push(actionDeleteRelation(relation.id)); + } + } + }); + }); - var keepGoing; - var removeWayIds = []; - var removeVertexIds = []; - do { - keepGoing = false; - checkVertices = vertexIds.slice(); - - for (i = 0; i < checkVertices.length; i++) { - var vertexId = checkVertices[i]; - vertex = vgraph.hasEntity(vertexId); - - if (!vertex) { - if (vertexIds.indexOf(vertexId) !== -1) { - vertexIds.splice(vertexIds.indexOf(vertexId), 1); // stop checking this one - } - removeVertexIds.push(vertexId); - continue; - } + // STEP 3: Force all oneways to be drawn in the forward direction + ways.forEach(function(w) { + var way = vgraph.entity(w.id); + if (way.tags.oneway === '-1') { + var action = actionReverse(way.id, { reverseOneway: true }); + actions.push(action); + vgraph = action(vgraph); + } + }); - parents = vgraph.parentWays(vertex); - if (parents.length < 3) { - if (vertexIds.indexOf(vertexId) !== -1) { - vertexIds.splice(vertexIds.indexOf(vertexId), 1); // stop checking this one - } - } - if (parents.length === 2) { // vertex with 2 parents is trivial - var a = parents[0]; - var b = parents[1]; - var aIsLeaf = a && !a.__via; - var bIsLeaf = b && !b.__via; - var leaf, survivor; - - if (aIsLeaf && !bIsLeaf) { - leaf = a; - survivor = b; - } else if (!aIsLeaf && bIsLeaf) { - leaf = b; - survivor = a; - } - - if (leaf && survivor) { - survivor = withMetadata(survivor, vertexIds); // update survivor way - vgraph = vgraph.replace(survivor).remove(leaf); // update graph - removeWayIds.push(leaf.id); - keepGoing = true; - } - } + // STEP 4: Split ways on key vertices + var origCount = osmEntity$$1.id.next.way; + vertices.forEach(function(v) { + // This is an odd way to do it, but we need to find all the ways that + // will be split here, then split them one at a time to ensure that these + // actions can be replayed on the main graph exactly in the same order. + // (It is unintuitive, but the order of ways returned from graph.parentWays() + // is arbitrary, depending on how the main graph and vgraph were built) + var splitAll = actionSplit(v.id); + if (!splitAll.disabled(vgraph)) { + splitAll.ways(vgraph).forEach(function(way) { + var splitOne = actionSplit(v.id).limitWays([way.id]); + actions.push(splitOne); + vgraph = splitOne(vgraph); + }); + } + }); - parents = vgraph.parentWays(vertex); + // In here is where we should also split the intersection at nearby junction. + // for https://github.com/mapbox/iD-internal/issues/31 + // nearbyVertices.forEach(function(v) { + // }); + + // Reasons why we reset the way id count here: + // 1. Continuity with way ids created by the splits so that we can replay + // these actions later if the user decides to create a turn restriction + // 2. Avoids churning way ids just by hovering over a vertex + // and displaying the turn restriction editor + osmEntity$$1.id.next.way = origCount; + + + // STEP 5: Update arrays to point to vgraph entities + vertexIds = vertices.map(function(v) { return v.id; }); + vertices = []; + ways = []; + + vertexIds.forEach(function(id) { + var vertex = vgraph.entity(id); + var parents = vgraph.parentWays(vertex); + vertices.push(vertex); + ways = ways.concat(parents); + }); - if (parents.length < 2) { // vertex is no longer a key vertex - if (vertexIds.indexOf(vertexId) !== -1) { - vertexIds.splice(vertexIds.indexOf(vertexId), 1); // stop checking this one - } - removeVertexIds.push(vertexId); - keepGoing = true; - } + vertices = uniq(vertices); + ways = uniq(ways); - if (parents.length < 1) { // vertex is no longer attached to anything - vgraph = vgraph.remove(vertex); - } + vertexIds = vertices.map(function(v) { return v.id; }); + wayIds = ways.map(function(w) { return w.id; }); - } - } while (keepGoing); + // STEP 6: Update the ways with some metadata that will be useful for + // walking the intersection graph later and rendering turn arrows. - vertices = vertices - .filter(function(vertex) { return removeVertexIds.indexOf(vertex.id) === -1; }) - .map(function(vertex) { return vgraph.entity(vertex.id); }); - ways = ways - .filter(function(way) { return removeWayIds.indexOf(way.id) === -1; }) - .map(function(way) { return vgraph.entity(way.id); }); + function withMetadata(way, vertexIds) { + var __oneWay = way.isOneWay(); + // which affixes are key vertices? + var __first = (vertexIds.indexOf(way.first()) !== -1); + var __last = (vertexIds.indexOf(way.last()) !== -1); - // OK! Here is our intersection.. - var intersection = { - graph: vgraph, - actions: actions, - vertices: vertices, - ways: ways, - }; + // what roles is this way eligible for? + var __via = (__first && __last); + var __from = ((__first && !__oneWay) || __last); + var __to = (__first || (__last && !__oneWay)); + return way.update({ + __first: __first, + __last: __last, + __from: __from, + __via: __via, + __to: __to, + __oneWay: __oneWay + }); + } + ways = []; + wayIds.forEach(function(id) { + var way = withMetadata(vgraph.entity(id), vertexIds); + vgraph = vgraph.replace(way); + ways.push(way); + }); - // Get all the valid turns through this intersection given a starting way id. - // This operates on the virtual graph for everything. - // - // Basically, walk through all possible paths from starting way, - // honoring the existing turn restrictions as we go (watch out for loops!) - // - // For each path found, generate and return a `osmTurn` datastructure. - // - intersection.turns = function(fromWayId, maxViaWay) { - if (!fromWayId) return []; - if (!maxViaWay) maxViaWay = 0; - - var vgraph = intersection.graph; - var keyVertexIds = intersection.vertices.map(function(v) { return v.id; }); - - var start = vgraph.entity(fromWayId); - if (!start || !(start.__from || start.__via)) return []; - - // maxViaWay=0 from-*-to (0 vias) - // maxViaWay=1 from-*-via-*-to (1 via max) - // maxViaWay=2 from-*-via-*-via-*-to (2 vias max) - var maxPathLength = (maxViaWay * 2) + 3; - var turns = []; - - step(start); - return turns; - - - // traverse the intersection graph and find all the valid paths - function step(entity, currPath, currRestrictions, matchedRestriction) { - currPath = clone(currPath || []); - if (currPath.length >= maxPathLength) return; - currPath.push(entity.id); - currRestrictions = clone(currRestrictions || []); - var i, j; - - if (entity.type === 'node') { - var parents = vgraph.parentWays(entity); - var nextWays = []; - - // which ways can we step into? - for (i = 0; i < parents.length; i++) { - var way = parents[i]; - - // if next way is a oneway incoming to this vertex, skip - if (way.__oneWay && way.nodes[0] !== entity.id) continue; - - // if we have seen it before (allowing for an initial u-turn), skip - if (currPath.indexOf(way.id) !== -1 && currPath.length >= 3) continue; - - // Check all "current" restrictions (where we've already walked the `FROM`) - var restrict = undefined; - for (j = 0; j < currRestrictions.length; j++) { - var restriction = currRestrictions[j]; - var f = restriction.memberByRole('from'); - var v = restriction.membersByRole('via'); - var t = restriction.memberByRole('to'); - var isOnly = /^only_/.test(restriction.tags.restriction); - - // Does the current path match this turn restriction? - var matchesFrom = (f.id === fromWayId); - var matchesViaTo = false; - var isAlongOnlyPath = false; - - if (t.id === way.id) { // match VIA, TO - if (v.length === 1 && v[0].type === 'node' && v[0].id === entity.id) { - matchesViaTo = true; // match VIA node - } else if (every(v, function(via) { return currPath.indexOf(via.id) !== -1; })) { - matchesViaTo = true; // match all VIA ways - } - - } else if (isOnly) { - for (k = 0; k < v.length; k++) { - // way doesn't match TO, but is one of the via ways along the path of an "only" - if (v[k].type === 'way' && v[k].id === way.id) { - isAlongOnlyPath = true; - break; - } - } - } - - if (matchesViaTo) { - if (isOnly) { - restrict = { id: restriction.id, direct: matchesFrom, from: f.id, only: true, end: true }; - } else { - restrict = { id: restriction.id, direct: matchesFrom, from: f.id, no: true, end: true }; - } - } else { // indirect - caused by a different nearby restriction - if (isAlongOnlyPath) { - restrict = { id: restriction.id, direct: false, from: f.id, only: true, end: false }; - } else if (isOnly) { - restrict = { id: restriction.id, direct: false, from: f.id, no: true, end: true }; - } - } - - // stop looking if we find a "direct" restriction (matching FROM, VIA, TO) - if (restrict && restrict.direct) - break; - } - - nextWays.push({ way: way, restrict: restrict }); - } - - nextWays.forEach(function(nextWay) { - step(nextWay.way, currPath, currRestrictions, nextWay.restrict); - }); - - - } else { // entity.type === 'way' - if (currPath.length >= 3) { // this is a "complete" path.. - var turnPath = clone(currPath); - - // an indirect restriction - only include the partial path (starting at FROM) - if (matchedRestriction && matchedRestriction.direct === false) { - for (i = 0; i < turnPath.length; i++) { - if (turnPath[i] === matchedRestriction.from) { - turnPath = turnPath.slice(i); - break; - } - } - } - - var turn = pathToTurn(turnPath); - if (turn) { - if (matchedRestriction) { - turn.restrictionID = matchedRestriction.id; - turn.no = matchedRestriction.no; - turn.only = matchedRestriction.only; - turn.direct = matchedRestriction.direct; - } - turns.push(osmTurn(turn)); - } - - if (currPath[0] === currPath[2]) return; // if we made a u-turn - stop here - } - - if (matchedRestriction && matchedRestriction.end) return; // don't advance any further - - // which nodes can we step into? - var n1 = vgraph.entity(entity.first()); - var n2 = vgraph.entity(entity.last()); - var dist = n1.loc && n2.loc && geoSphericalDistance(n1.loc, n2.loc); - var nextNodes = []; - - if (currPath.length > 1) { - if (dist > maxDistance) return; // the next node is too far - if (!entity.__via) return; // this way is a leaf / can't be a via - } - - if (!entity.__oneWay && // bidirectional.. - keyVertexIds.indexOf(n1.id) !== -1 && // key vertex.. - currPath.indexOf(n1.id) === -1) { // haven't seen it yet.. - nextNodes.push(n1); // can advance to first node - } - if (keyVertexIds.indexOf(n2.id) !== -1 && // key vertex.. - currPath.indexOf(n2.id) === -1) { // haven't seen it yet.. - nextNodes.push(n2); // can advance to last node - } - - nextNodes.forEach(function(nextNode) { - // gather restrictions FROM this way - var fromRestrictions = vgraph.parentRelations(entity).filter(function(r) { - if (!r.isRestriction()) return false; - - var f = r.memberByRole('from'); - if (!f || f.id !== entity.id) return false; - - var isOnly = /^only_/.test(r.tags.restriction); - if (!isOnly) return true; - - // `only_` restrictions only matter along the direction of the VIA - #4849 - var isOnlyVia = false; - var v = r.membersByRole('via'); - if (v.length === 1 && v[0].type === 'node') { // via node - isOnlyVia = (v[0].id === nextNode.id); - } else { // via way(s) - for (k = 0; k < v.length; k++) { - if (v[k].type === 'way' && vgraph.entity(v[k].id).first() === nextNode.id) { - isOnlyVia = true; - break; - } - } - } - return isOnlyVia; - }); - - step(nextNode, currPath, currRestrictions.concat(fromRestrictions), false); - }); - } - } + // STEP 7: Simplify - This is an iterative process where we: + // 1. Find trivial vertices with only 2 parents + // 2. trim off the leaf way from those vertices and remove from vgraph + + var keepGoing; + var removeWayIds = []; + var removeVertexIds = []; + + do { + keepGoing = false; + checkVertices = vertexIds.slice(); + + for (i = 0; i < checkVertices.length; i++) { + var vertexId = checkVertices[i]; + vertex = vgraph.hasEntity(vertexId); + + if (!vertex) { + if (vertexIds.indexOf(vertexId) !== -1) { + vertexIds.splice(vertexIds.indexOf(vertexId), 1); // stop checking this one + } + removeVertexIds.push(vertexId); + continue; + } + + parents = vgraph.parentWays(vertex); + if (parents.length < 3) { + if (vertexIds.indexOf(vertexId) !== -1) { + vertexIds.splice(vertexIds.indexOf(vertexId), 1); // stop checking this one + } + } + + if (parents.length === 2) { // vertex with 2 parents is trivial + var a = parents[0]; + var b = parents[1]; + var aIsLeaf = a && !a.__via; + var bIsLeaf = b && !b.__via; + var leaf, survivor; + + if (aIsLeaf && !bIsLeaf) { + leaf = a; + survivor = b; + } else if (!aIsLeaf && bIsLeaf) { + leaf = b; + survivor = a; + } + + if (leaf && survivor) { + survivor = withMetadata(survivor, vertexIds); // update survivor way + vgraph = vgraph.replace(survivor).remove(leaf); // update graph + removeWayIds.push(leaf.id); + keepGoing = true; + } + } + + parents = vgraph.parentWays(vertex); + + if (parents.length < 2) { // vertex is no longer a key vertex + if (vertexIds.indexOf(vertexId) !== -1) { + vertexIds.splice(vertexIds.indexOf(vertexId), 1); // stop checking this one + } + removeVertexIds.push(vertexId); + keepGoing = true; + } + + if (parents.length < 1) { // vertex is no longer attached to anything + vgraph = vgraph.remove(vertex); + } - // assumes path is alternating way-node-way of odd length - function pathToTurn(path) { - if (path.length < 3) return; - var fromWayId, fromNodeId, fromVertexId; - var toWayId, toNodeId, toVertexId; - var viaWayIds, viaNodeId, isUturn; + } + } while (keepGoing); - fromWayId = path[0]; - toWayId = path[path.length - 1]; - if (path.length === 3 && fromWayId === toWayId) { // u turn - var way = vgraph.entity(fromWayId); - if (way.__oneWay) return null; + vertices = vertices + .filter(function(vertex) { return removeVertexIds.indexOf(vertex.id) === -1; }) + .map(function(vertex) { return vgraph.entity(vertex.id); }); + ways = ways + .filter(function(way) { return removeWayIds.indexOf(way.id) === -1; }) + .map(function(way) { return vgraph.entity(way.id); }); - isUturn = true; - viaNodeId = fromVertexId = toVertexId = path[1]; - fromNodeId = toNodeId = adjacentNode(fromWayId, viaNodeId); - } else { - isUturn = false; - fromVertexId = path[1]; - fromNodeId = adjacentNode(fromWayId, fromVertexId); - toVertexId = path[path.length - 2]; - toNodeId = adjacentNode(toWayId, toVertexId); - - if (path.length === 3) { - viaNodeId = path[1]; - } else { - viaWayIds = path.filter(function(entityId) { return entityId[0] === 'w'; }); - viaWayIds = viaWayIds.slice(1, viaWayIds.length - 1); // remove first, last - } - } + // OK! Here is our intersection.. + var intersection = { + graph: vgraph, + actions: actions, + vertices: vertices, + ways: ways, + }; - return { - key: path.join('_'), - path: path, - from: { node: fromNodeId, way: fromWayId, vertex: fromVertexId }, - via: { node: viaNodeId, ways: viaWayIds }, - to: { node: toNodeId, way: toWayId, vertex: toVertexId }, - u: isUturn - }; - function adjacentNode(wayId, affixId) { - var nodes = vgraph.entity(wayId).nodes; - return affixId === nodes[0] ? nodes[1] : nodes[nodes.length - 2]; - } - } + // Get all the valid turns through this intersection given a starting way id. + // This operates on the virtual graph for everything. + // + // Basically, walk through all possible paths from starting way, + // honoring the existing turn restrictions as we go (watch out for loops!) + // + // For each path found, generate and return a `osmTurn` datastructure. + // + intersection.turns = function(fromWayId, maxViaWay) { + if (!fromWayId) return []; + if (!maxViaWay) maxViaWay = 0; + + var vgraph = intersection.graph; + var keyVertexIds = intersection.vertices.map(function(v) { return v.id; }); + + var start = vgraph.entity(fromWayId); + if (!start || !(start.__from || start.__via)) return []; + + // maxViaWay=0 from-*-to (0 vias) + // maxViaWay=1 from-*-via-*-to (1 via max) + // maxViaWay=2 from-*-via-*-via-*-to (2 vias max) + var maxPathLength = (maxViaWay * 2) + 3; + var turns = []; + + step(start); + return turns; + + + // traverse the intersection graph and find all the valid paths + function step(entity, currPath, currRestrictions, matchedRestriction) { + currPath = clone(currPath || []); + if (currPath.length >= maxPathLength) return; + currPath.push(entity.id); + currRestrictions = clone(currRestrictions || []); + var i, j; + + if (entity.type === 'node') { + var parents = vgraph.parentWays(entity); + var nextWays = []; + + // which ways can we step into? + for (i = 0; i < parents.length; i++) { + var way = parents[i]; + + // if next way is a oneway incoming to this vertex, skip + if (way.__oneWay && way.nodes[0] !== entity.id) continue; + + // if we have seen it before (allowing for an initial u-turn), skip + if (currPath.indexOf(way.id) !== -1 && currPath.length >= 3) continue; + + // Check all "current" restrictions (where we've already walked the `FROM`) + var restrict = undefined; + for (j = 0; j < currRestrictions.length; j++) { + var restriction = currRestrictions[j]; + var f = restriction.memberByRole('from'); + var v = restriction.membersByRole('via'); + var t = restriction.memberByRole('to'); + var isOnly = /^only_/.test(restriction.tags.restriction); + + // Does the current path match this turn restriction? + var matchesFrom = (f.id === fromWayId); + var matchesViaTo = false; + var isAlongOnlyPath = false; + + if (t.id === way.id) { // match TO + + if (v.length === 1 && v[0].type === 'node') { // match VIA node + matchesViaTo = (v[0].id === entity.id && ( + (matchesFrom && currPath.length === 2) || + (!matchesFrom && currPath.length > 2) + )); + + } else { // match all VIA ways + var pathVias = []; + for (k = 2; k < currPath.length; k +=2 ) { // k = 2 skips FROM + pathVias.push(currPath[k]); // (path goes way-node-way...) + } + var restrictionVias = []; + for (k = 0; k < v.length; k++) { + if (v[k].type === 'way') { + restrictionVias.push(v[k].id); + } + } + var diff = difference(pathVias, restrictionVias); + matchesViaTo = !diff.length; + } + + } else if (isOnly) { + for (k = 0; k < v.length; k++) { + // way doesn't match TO, but is one of the via ways along the path of an "only" + if (v[k].type === 'way' && v[k].id === way.id) { + isAlongOnlyPath = true; + break; + } + } + } + + if (matchesViaTo) { + if (isOnly) { + restrict = { id: restriction.id, direct: matchesFrom, from: f.id, only: true, end: true }; + } else { + restrict = { id: restriction.id, direct: matchesFrom, from: f.id, no: true, end: true }; + } + } else { // indirect - caused by a different nearby restriction + if (isAlongOnlyPath) { + restrict = { id: restriction.id, direct: false, from: f.id, only: true, end: false }; + } else if (isOnly) { + restrict = { id: restriction.id, direct: false, from: f.id, no: true, end: true }; + } + } + + // stop looking if we find a "direct" restriction (matching FROM, VIA, TO) + if (restrict && restrict.direct) + break; + } + + nextWays.push({ way: way, restrict: restrict }); + } + + nextWays.forEach(function(nextWay) { + step(nextWay.way, currPath, currRestrictions, nextWay.restrict); + }); + + + } else { // entity.type === 'way' + if (currPath.length >= 3) { // this is a "complete" path.. + var turnPath = clone(currPath); + + // an indirect restriction - only include the partial path (starting at FROM) + if (matchedRestriction && matchedRestriction.direct === false) { + for (i = 0; i < turnPath.length; i++) { + if (turnPath[i] === matchedRestriction.from) { + turnPath = turnPath.slice(i); + break; + } + } + } + + var turn = pathToTurn(turnPath); + if (turn) { + if (matchedRestriction) { + turn.restrictionID = matchedRestriction.id; + turn.no = matchedRestriction.no; + turn.only = matchedRestriction.only; + turn.direct = matchedRestriction.direct; + } + turns.push(osmTurn(turn)); + } + + if (currPath[0] === currPath[2]) return; // if we made a u-turn - stop here + } + + if (matchedRestriction && matchedRestriction.end) return; // don't advance any further + + // which nodes can we step into? + var n1 = vgraph.entity(entity.first()); + var n2 = vgraph.entity(entity.last()); + var dist = n1.loc && n2.loc && geoSphericalDistance(n1.loc, n2.loc); + var nextNodes = []; + + if (currPath.length > 1) { + if (dist > maxDistance) return; // the next node is too far + if (!entity.__via) return; // this way is a leaf / can't be a via + } + + if (!entity.__oneWay && // bidirectional.. + keyVertexIds.indexOf(n1.id) !== -1 && // key vertex.. + currPath.indexOf(n1.id) === -1) { // haven't seen it yet.. + nextNodes.push(n1); // can advance to first node + } + if (keyVertexIds.indexOf(n2.id) !== -1 && // key vertex.. + currPath.indexOf(n2.id) === -1) { // haven't seen it yet.. + nextNodes.push(n2); // can advance to last node + } + + nextNodes.forEach(function(nextNode) { + // gather restrictions FROM this way + var fromRestrictions = vgraph.parentRelations(entity).filter(function(r) { + if (!r.isRestriction()) return false; + + var f = r.memberByRole('from'); + if (!f || f.id !== entity.id) return false; + + var isOnly = /^only_/.test(r.tags.restriction); + if (!isOnly) return true; + + // `only_` restrictions only matter along the direction of the VIA - #4849 + var isOnlyVia = false; + var v = r.membersByRole('via'); + if (v.length === 1 && v[0].type === 'node') { // via node + isOnlyVia = (v[0].id === nextNode.id); + } else { // via way(s) + for (var i = 0; i < v.length; i++) { + if (v[i].type !== 'way') continue; + var viaWay = vgraph.entity(v[i].id); + if (viaWay.first() === nextNode.id || viaWay.last() === nextNode.id) { + isOnlyVia = true; + break; + } + } + } + return isOnlyVia; + }); + + step(nextNode, currPath, currRestrictions.concat(fromRestrictions), false); + }); + } + } - }; - return intersection; -} + // assumes path is alternating way-node-way of odd length + function pathToTurn(path) { + if (path.length < 3) return; + var fromWayId, fromNodeId, fromVertexId; + var toWayId, toNodeId, toVertexId; + var viaWayIds, viaNodeId, isUturn; + + fromWayId = path[0]; + toWayId = path[path.length - 1]; + + if (path.length === 3 && fromWayId === toWayId) { // u turn + var way = vgraph.entity(fromWayId); + if (way.__oneWay) return null; + + isUturn = true; + viaNodeId = fromVertexId = toVertexId = path[1]; + fromNodeId = toNodeId = adjacentNode(fromWayId, viaNodeId); + + } else { + isUturn = false; + fromVertexId = path[1]; + fromNodeId = adjacentNode(fromWayId, fromVertexId); + toVertexId = path[path.length - 2]; + toNodeId = adjacentNode(toWayId, toVertexId); + + if (path.length === 3) { + viaNodeId = path[1]; + } else { + viaWayIds = path.filter(function(entityId) { return entityId[0] === 'w'; }); + viaWayIds = viaWayIds.slice(1, viaWayIds.length - 1); // remove first, last + } + } + + return { + key: path.join('_'), + path: path, + from: { node: fromNodeId, way: fromWayId, vertex: fromVertexId }, + via: { node: viaNodeId, ways: viaWayIds }, + to: { node: toNodeId, way: toWayId, vertex: toVertexId }, + u: isUturn + }; + + + function adjacentNode(wayId, affixId) { + var nodes = vgraph.entity(wayId).nodes; + return affixId === nodes[0] ? nodes[1] : nodes[nodes.length - 2]; + } + } + }; -function osmInferRestriction(graph, turn, projection) { - var fromWay = graph.entity(turn.from.way); - var fromNode = graph.entity(turn.from.node); - var fromVertex = graph.entity(turn.from.vertex); - var toWay = graph.entity(turn.to.way); - var toNode = graph.entity(turn.to.node); - var toVertex = graph.entity(turn.to.vertex); + return intersection; + } - var fromOneWay = (fromWay.tags.oneway === 'yes'); - var toOneWay = (toWay.tags.oneway === 'yes'); - var angle = (geoAngle(fromVertex, fromNode, projection) - - geoAngle(toVertex, toNode, projection)) * 180 / Math.PI; - while (angle < 0) - angle += 360; + function osmInferRestriction(graph, turn, projection) { + var fromWay = graph.entity(turn.from.way); + var fromNode = graph.entity(turn.from.node); + var fromVertex = graph.entity(turn.from.vertex); + var toWay = graph.entity(turn.to.way); + var toNode = graph.entity(turn.to.node); + var toVertex = graph.entity(turn.to.vertex); - if (fromNode === toNode) - return 'no_u_turn'; - if ((angle < 23 || angle > 336) && fromOneWay && toOneWay) - return 'no_u_turn'; // wider tolerance for u-turn if both ways are oneway - if ((angle < 40 || angle > 319) && fromOneWay && toOneWay && turn.from.vertex !== turn.to.vertex) - return 'no_u_turn'; // even wider tolerance for u-turn if there is a via way (from !== to) - if (angle < 158) - return 'no_right_turn'; - if (angle > 202) - return 'no_left_turn'; + var fromOneWay = (fromWay.tags.oneway === 'yes'); + var toOneWay = (toWay.tags.oneway === 'yes'); + var angle = (geoAngle(fromVertex, fromNode, projection) - + geoAngle(toVertex, toNode, projection)) * 180 / Math.PI; - return 'no_straight_on'; -} + while (angle < 0) + angle += 360; -function actionAddMember(relationId, member, memberIndex, insertPair) { + if (fromNode === toNode) + return 'no_u_turn'; + if ((angle < 23 || angle > 336) && fromOneWay && toOneWay) + return 'no_u_turn'; // wider tolerance for u-turn if both ways are oneway + if ((angle < 40 || angle > 319) && fromOneWay && toOneWay && turn.from.vertex !== turn.to.vertex) + return 'no_u_turn'; // even wider tolerance for u-turn if there is a via way (from !== to) + if (angle < 158) + return 'no_right_turn'; + if (angle > 202) + return 'no_left_turn'; - return function action(graph) { - var relation = graph.entity(relationId); + return 'no_straight_on'; + } - // There are some special rules for Public Transport v2 routes. - var isPTv2 = (member.role === 'stop' || member.role === 'platform'); + function actionAddMember(relationId, member, memberIndex, insertPair) { - if ((isNaN(memberIndex) || insertPair) && member.type === 'way' && !isPTv2) { - // Try to perform sensible inserts based on how the ways join together - graph = addWayMember(relation, graph); - } else { - // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes - // Stops and Platforms for PTv2 should be ordered first. - // hack: We do not currently have the ability to place them in the exactly correct order. - if (isPTv2 && isNaN(memberIndex)) { - memberIndex = 0; - } + return function action(graph) { + var relation = graph.entity(relationId); - graph = graph.replace(relation.addMember(member, memberIndex)); - } + // There are some special rules for Public Transport v2 routes. + var isPTv2 = /stop|platform/.test(member.role); - return graph; - }; + if ((isNaN(memberIndex) || insertPair) && member.type === 'way' && !isPTv2) { + // Try to perform sensible inserts based on how the ways join together + graph = addWayMember(relation, graph); + } else { + // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes + // Stops and Platforms for PTv2 should be ordered first. + // hack: We do not currently have the ability to place them in the exactly correct order. + if (isPTv2 && isNaN(memberIndex)) { + memberIndex = 0; + } + + graph = graph.replace(relation.addMember(member, memberIndex)); + } + return graph; + }; - // Add a way member into the relation "wherever it makes sense". - // In this situation we were not supplied a memberIndex. - function addWayMember(relation, graph) { - var groups, tempWay, item, i, j, k; - // remove PTv2 stops and platforms before doing anything. - var PTv2members = []; - var members = []; - for (i = 0; i < relation.members.length; i++) { - var m = relation.members[i]; - if (m.role === 'stop' || m.role === 'platform') { - PTv2members.push(m); - } else { - members.push(m); - } - } - relation = relation.update({ members: members }); - - - if (insertPair) { - // We're adding a member that must stay paired with an existing member. - // (This feature is used by `actionSplit`) - // - // This is tricky because the members may exist multiple times in the - // member list, and with different A-B/B-A ordering and different roles. - // (e.g. a bus route that loops out and back - #4589). - // - // Replace the existing member with a temporary way, - // so that `osmJoinWays` can treat the pair like a single way. - tempWay = osmWay({ id: 'wTemp', nodes: insertPair.nodes }); - graph = graph.replace(tempWay); - var tempMember = { id: tempWay.id, type: 'way', role: member.role }; - var tempRelation = relation.replaceMember({id: insertPair.originalID}, tempMember, true); - groups = groupBy(tempRelation.members, function(m) { return m.type; }); - groups.way = groups.way || []; + // Add a way member into the relation "wherever it makes sense". + // In this situation we were not supplied a memberIndex. + function addWayMember(relation, graph) { + var groups, tempWay, item, i, j, k; + + // remove PTv2 stops and platforms before doing anything. + var PTv2members = []; + var members = []; + for (i = 0; i < relation.members.length; i++) { + var m = relation.members[i]; + if (/stop|platform/.test(m.role)) { + PTv2members.push(m); + } else { + members.push(m); + } + } + relation = relation.update({ members: members }); + + + if (insertPair) { + // We're adding a member that must stay paired with an existing member. + // (This feature is used by `actionSplit`) + // + // This is tricky because the members may exist multiple times in the + // member list, and with different A-B/B-A ordering and different roles. + // (e.g. a bus route that loops out and back - #4589). + // + // Replace the existing member with a temporary way, + // so that `osmJoinWays` can treat the pair like a single way. + tempWay = osmWay({ id: 'wTemp', nodes: insertPair.nodes }); + graph = graph.replace(tempWay); + var tempMember = { id: tempWay.id, type: 'way', role: member.role }; + var tempRelation = relation.replaceMember({id: insertPair.originalID}, tempMember, true); + groups = groupBy(tempRelation.members, function(m) { return m.type; }); + groups.way = groups.way || []; - } else { - // Add the member anywhere, one time. Just push and let `osmJoinWays` decide where to put it. - groups = groupBy(relation.members, function(m) { return m.type; }); - groups.way = groups.way || []; - groups.way.push(member); - } + } else { + // Add the member anywhere, one time. Just push and let `osmJoinWays` decide where to put it. + groups = groupBy(relation.members, function(m) { return m.type; }); + groups.way = groups.way || []; + groups.way.push(member); + } - members = withIndex(groups.way); - var joined = osmJoinWays(members, graph); - - // `joined` might not contain all of the way members, - // But will contain only the completed (downloaded) members - for (i = 0; i < joined.length; i++) { - var segment = joined[i]; - var nodes = segment.nodes.slice(); - var startIndex = segment[0].index; - - // j = array index in `members` where this segment starts - for (j = 0; j < members.length; j++) { - if (members[j].index === startIndex) { - break; - } - } + members = withIndex(groups.way); + var joined = osmJoinWays(members, graph); + + // `joined` might not contain all of the way members, + // But will contain only the completed (downloaded) members + for (i = 0; i < joined.length; i++) { + var segment = joined[i]; + var nodes = segment.nodes.slice(); + var startIndex = segment[0].index; + + // j = array index in `members` where this segment starts + for (j = 0; j < members.length; j++) { + if (members[j].index === startIndex) { + break; + } + } + + // k = each member in segment + for (k = 0; k < segment.length; k++) { + item = segment[k]; + var way = graph.entity(item.id); + + // If this is a paired item, generate members in correct order and role + if (tempWay && item.id === tempWay.id) { + if (nodes[0].id === insertPair.nodes[0]) { + item.pair = [ + { id: insertPair.originalID, type: 'way', role: item.role }, + { id: insertPair.insertedID, type: 'way', role: item.role } + ]; + } else { + item.pair = [ + { id: insertPair.insertedID, type: 'way', role: item.role }, + { id: insertPair.originalID, type: 'way', role: item.role } + ]; + } + } + + // reorder `members` if necessary + if (k > 0) { + if (j+k >= members.length || item.index !== members[j+k].index) { + moveMember(members, item.index, j+k); + } + } + + nodes.splice(0, way.nodes.length - 1); + } + } - // k = each member in segment - for (k = 0; k < segment.length; k++) { - item = segment[k]; - var way = graph.entity(item.id); - - // If this is a paired item, generate members in correct order and role - if (tempWay && item.id === tempWay.id) { - if (nodes[0].id === insertPair.nodes[0]) { - item.pair = [ - { id: insertPair.originalID, type: 'way', role: item.role }, - { id: insertPair.insertedID, type: 'way', role: item.role } - ]; - } else { - item.pair = [ - { id: insertPair.insertedID, type: 'way', role: item.role }, - { id: insertPair.originalID, type: 'way', role: item.role } - ]; - } - } - - // reorder `members` if necessary - if (k > 0) { - if (j+k >= members.length || item.index !== members[j+k].index) { - moveMember(members, item.index, j+k); - } - } - - nodes.splice(0, way.nodes.length - 1); - } - } + if (tempWay) { + graph = graph.remove(tempWay); + } - if (tempWay) { - graph = graph.remove(tempWay); - } + // Final pass: skip dead items, split pairs, remove index properties + var wayMembers = []; + for (i = 0; i < members.length; i++) { + item = members[i]; + if (item.index === -1) continue; + + if (item.pair) { + wayMembers.push(item.pair[0]); + wayMembers.push(item.pair[1]); + } else { + wayMembers.push(omit(item, 'index')); + } + } - // Final pass: skip dead items, split pairs, remove index properties - var wayMembers = []; - for (i = 0; i < members.length; i++) { - item = members[i]; - if (item.index === -1) continue; + // Put stops and platforms first, then nodes, ways, relations + // This is recommended for Public Transport v2 routes: + // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes + var newMembers = PTv2members.concat( (groups.node || []), wayMembers, (groups.relation || []) ); + + return graph.replace(relation.update({members: newMembers})); + + + // `moveMember()` changes the `members` array in place by splicing + // the item with `.index = findIndex` to where it belongs, + // and marking the old position as "dead" with `.index = -1` + // + // j=5, k=0 jk + // segment 5 4 7 6 + // members 0 1 2 3 4 5 6 7 8 9 keep 5 in j+k + // + // j=5, k=1 j k + // segment 5 4 7 6 + // members 0 1 2 3 4 5 6 7 8 9 move 4 to j+k + // members 0 1 2 3 x 5 4 6 7 8 9 moved + // + // j=5, k=2 j k + // segment 5 4 7 6 + // members 0 1 2 3 x 5 4 6 7 8 9 move 7 to j+k + // members 0 1 2 3 x 5 4 7 6 x 8 9 moved + // + // j=5, k=3 j k + // segment 5 4 7 6 + // members 0 1 2 3 x 5 4 7 6 x 8 9 keep 6 in j+k + // + function moveMember(arr, findIndex, toIndex) { + for (var i = 0; i < arr.length; i++) { + if (arr[i].index === findIndex) { + break; + } + } + + var item = clone(arr[i]); + arr[i].index = -1; // mark as dead + item.index = toIndex; + arr.splice(toIndex, 0, item); + } - if (item.pair) { - wayMembers.push(item.pair[0]); - wayMembers.push(item.pair[1]); - } else { - wayMembers.push(omit(item, 'index')); - } - } - // Put stops and platforms first, then nodes, ways, relations - // This is recommended for Public Transport v2 routes: - // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes - var newMembers = PTv2members.concat( (groups.node || []), wayMembers, (groups.relation || []) ); - - return graph.replace(relation.update({members: newMembers})); - - - // `moveMember()` changes the `members` array in place by splicing - // the item with `.index = findIndex` to where it belongs, - // and marking the old position as "dead" with `.index = -1` - // - // j=5, k=0 jk - // segment 5 4 7 6 - // members 0 1 2 3 4 5 6 7 8 9 keep 5 in j+k - // - // j=5, k=1 j k - // segment 5 4 7 6 - // members 0 1 2 3 4 5 6 7 8 9 move 4 to j+k - // members 0 1 2 3 x 5 4 6 7 8 9 moved - // - // j=5, k=2 j k - // segment 5 4 7 6 - // members 0 1 2 3 x 5 4 6 7 8 9 move 7 to j+k - // members 0 1 2 3 x 5 4 7 6 x 8 9 moved - // - // j=5, k=3 j k - // segment 5 4 7 6 - // members 0 1 2 3 x 5 4 7 6 x 8 9 keep 6 in j+k - // - function moveMember(arr, findIndex, toIndex) { - for (var i = 0; i < arr.length; i++) { - if (arr[i].index === findIndex) { - break; - } - } + // This is the same as `Relation.indexedMembers`, + // Except we don't want to index all the members, only the ways + function withIndex(arr) { + var result = new Array(arr.length); + for (var i = 0; i < arr.length; i++) { + result[i] = arr[i]; + result[i].index = i; + } + return result; + } + } - var item = clone(arr[i]); - arr[i].index = -1; // mark as dead - item.index = toIndex; - arr.splice(toIndex, 0, item); - } + } + function actionAddMidpoint(midpoint, node) { + return function(graph) { + graph = graph.replace(node.move(midpoint.loc)); - // This is the same as `Relation.indexedMembers`, - // Except we don't want to index all the members, only the ways - function withIndex(arr) { - var result = new Array(arr.length); - for (var i = 0; i < arr.length; i++) { - result[i] = arr[i]; - result[i].index = i; - } - return result; - } - } + var parents = intersection( + graph.parentWays(graph.entity(midpoint.edge[0])), + graph.parentWays(graph.entity(midpoint.edge[1]))); -} + parents.forEach(function(way) { + for (var i = 0; i < way.nodes.length - 1; i++) { + if (geoEdgeEqual([way.nodes[i], way.nodes[i + 1]], midpoint.edge)) { + graph = graph.replace(graph.entity(way.id).addNode(node.id, i + 1)); -function actionAddMidpoint(midpoint, node) { - return function(graph) { - graph = graph.replace(node.move(midpoint.loc)); + // Add only one midpoint on doubled-back segments, + // turning them into self-intersections. + return; + } + } + }); - var parents = intersection( - graph.parentWays(graph.entity(midpoint.edge[0])), - graph.parentWays(graph.entity(midpoint.edge[1]))); + return graph; + }; + } - parents.forEach(function(way) { - for (var i = 0; i < way.nodes.length - 1; i++) { - if (geoEdgeEqual([way.nodes[i], way.nodes[i + 1]], midpoint.edge)) { - graph = graph.replace(graph.entity(way.id).addNode(node.id, i + 1)); + // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as + function actionAddVertex(wayId, nodeId, index) { + return function(graph) { + return graph.replace(graph.entity(wayId).addNode(nodeId, index)); + }; + } - // Add only one midpoint on doubled-back segments, - // turning them into self-intersections. - return; - } - } - }); + function actionChangeMember(relationId, member, memberIndex) { + return function(graph) { + return graph.replace(graph.entity(relationId).updateMember(member, memberIndex)); + }; + } - return graph; - }; -} + function actionChangePreset(entityId, oldPreset, newPreset) { + return function(graph) { + var entity = graph.entity(entityId), + geometry = entity.geometry(graph), + tags = entity.tags; -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as -function actionAddVertex(wayId, nodeId, index) { - return function(graph) { - return graph.replace(graph.entity(wayId).addNode(nodeId, index)); - }; -} + if (oldPreset) tags = oldPreset.removeTags(tags, geometry); + if (newPreset) tags = newPreset.applyTags(tags, geometry); -function actionChangeMember(relationId, member, memberIndex) { - return function(graph) { - return graph.replace(graph.entity(relationId).updateMember(member, memberIndex)); - }; -} + return graph.replace(entity.update({tags: tags})); + }; + } -function actionChangePreset(entityId, oldPreset, newPreset) { - return function(graph) { - var entity = graph.entity(entityId), - geometry = entity.geometry(graph), - tags = entity.tags; + function actionChangeTags(entityId, tags) { + return function(graph) { + var entity = graph.entity(entityId); + return graph.replace(entity.update({tags: tags})); + }; + } - if (oldPreset) tags = oldPreset.removeTags(tags, geometry); - if (newPreset) tags = newPreset.applyTags(tags, geometry); + function actionCircularize(wayId, projection, maxAngle) { + maxAngle = (maxAngle || 20) * Math.PI / 180; - return graph.replace(entity.update({tags: tags})); - }; -} -function actionChangeTags(entityId, tags) { - return function(graph) { - var entity = graph.entity(entityId); - return graph.replace(entity.update({tags: tags})); - }; -} + var action = function(graph, t) { + if (t === null || !isFinite(t)) t = 1; + t = Math.min(Math.max(+t, 0), 1); -function actionCircularize(wayId, projection, maxAngle) { - maxAngle = (maxAngle || 20) * Math.PI / 180; + var way = graph.entity(wayId), + origNodes = {}; + graph.childNodes(way).forEach(function(node) { + if (!origNodes[node.id]) origNodes[node.id] = node; + }); - var action = function(graph, t) { - if (t === null || !isFinite(t)) t = 1; - t = Math.min(Math.max(+t, 0), 1); + if (!way.isConvex(graph)) { + graph = action.makeConvex(graph); + } - var way = graph.entity(wayId), - origNodes = {}; + var nodes = uniq(graph.childNodes(way)), + keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length !== 1; }), + points = nodes.map(function(n) { return projection(n.loc); }), + keyPoints = keyNodes.map(function(n) { return projection(n.loc); }), + centroid = (points.length === 2) ? geoVecInterp(points[0], points[1], 0.5) : d3_polygonCentroid(points), + radius = d3_median(points, function(p) { return geoVecLength(centroid, p); }), + sign = d3_polygonArea(points) > 0 ? 1 : -1, + ids; + + // we need atleast two key nodes for the algorithm to work + if (!keyNodes.length) { + keyNodes = [nodes[0]]; + keyPoints = [points[0]]; + } - graph.childNodes(way).forEach(function(node) { - if (!origNodes[node.id]) origNodes[node.id] = node; - }); + if (keyNodes.length === 1) { + var index = nodes.indexOf(keyNodes[0]), + oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length); - if (!way.isConvex(graph)) { - graph = action.makeConvex(graph); - } + keyNodes.push(nodes[oppositeIndex]); + keyPoints.push(points[oppositeIndex]); + } - var nodes = uniq(graph.childNodes(way)), - keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length !== 1; }), - points = nodes.map(function(n) { return projection(n.loc); }), - keyPoints = keyNodes.map(function(n) { return projection(n.loc); }), - centroid = (points.length === 2) ? geoVecInterp(points[0], points[1], 0.5) : d3_polygonCentroid(points), - radius = d3_median(points, function(p) { return geoVecLength(centroid, p); }), - sign = d3_polygonArea(points) > 0 ? 1 : -1, - ids; - - // we need atleast two key nodes for the algorithm to work - if (!keyNodes.length) { - keyNodes = [nodes[0]]; - keyPoints = [points[0]]; - } + // key points and nodes are those connected to the ways, + // they are projected onto the circle, inbetween nodes are moved + // to constant intervals between key nodes, extra inbetween nodes are + // added if necessary. + for (var i = 0; i < keyPoints.length; i++) { + var nextKeyNodeIndex = (i + 1) % keyNodes.length, + startNode = keyNodes[i], + endNode = keyNodes[nextKeyNodeIndex], + startNodeIndex = nodes.indexOf(startNode), + endNodeIndex = nodes.indexOf(endNode), + numberNewPoints = -1, + indexRange = endNodeIndex - startNodeIndex, + nearNodes = {}, + inBetweenNodes = [], + startAngle, endAngle, totalAngle, eachAngle, + angle, loc, node, origNode, j; + + if (indexRange < 0) { + indexRange += nodes.length; + } + + // position this key node + var distance = geoVecLength(centroid, keyPoints[i]); + if (distance === 0) { distance = 1e-4; } + keyPoints[i] = [ + centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius, + centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius + ]; + loc = projection.invert(keyPoints[i]); + node = keyNodes[i]; + origNode = origNodes[node.id]; + node = node.move(geoVecInterp(origNode.loc, loc, t)); + graph = graph.replace(node); + + // figure out the between delta angle we want to match to + startAngle = Math.atan2(keyPoints[i][1] - centroid[1], keyPoints[i][0] - centroid[0]); + endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]); + totalAngle = endAngle - startAngle; + + // detects looping around -pi/pi + if (totalAngle * sign > 0) { + totalAngle = -sign * (2 * Math.PI - Math.abs(totalAngle)); + } + + do { + numberNewPoints++; + eachAngle = totalAngle / (indexRange + numberNewPoints); + } while (Math.abs(eachAngle) > maxAngle); + + + // move existing nodes + for (j = 1; j < indexRange; j++) { + angle = startAngle + j * eachAngle; + loc = projection.invert([ + centroid[0] + Math.cos(angle) * radius, + centroid[1] + Math.sin(angle) * radius + ]); + + node = nodes[(j + startNodeIndex) % nodes.length]; + origNode = origNodes[node.id]; + nearNodes[node.id] = angle; + + node = node.move(geoVecInterp(origNode.loc, loc, t)); + graph = graph.replace(node); + } + + // add new inbetween nodes if necessary + for (j = 0; j < numberNewPoints; j++) { + angle = startAngle + (indexRange + j) * eachAngle; + loc = projection.invert([ + centroid[0] + Math.cos(angle) * radius, + centroid[1] + Math.sin(angle) * radius + ]); + + // choose a nearnode to use as the original + var min$$1 = Infinity; + for (var nodeId in nearNodes) { + var nearAngle = nearNodes[nodeId], + dist = Math.abs(nearAngle - angle); + if (dist < min$$1) { + dist = min$$1; + origNode = origNodes[nodeId]; + } + } + + node = osmNode({ loc: geoVecInterp(origNode.loc, loc, t) }); + graph = graph.replace(node); + + nodes.splice(endNodeIndex + j, 0, node); + inBetweenNodes.push(node.id); + } + + // Check for other ways that share these keyNodes.. + // If keyNodes are adjacent in both ways, + // we can add inBetween nodes to that shared way too.. + if (indexRange === 1 && inBetweenNodes.length) { + var startIndex1 = way.nodes.lastIndexOf(startNode.id), + endIndex1 = way.nodes.lastIndexOf(endNode.id), + wayDirection1 = (endIndex1 - startIndex1); + if (wayDirection1 < -1) { wayDirection1 = 1; } + + /* eslint-disable no-loop-func */ + forEach(without(graph.parentWays(keyNodes[i]), way), function(sharedWay) { + if (sharedWay.areAdjacent(startNode.id, endNode.id)) { + var startIndex2 = sharedWay.nodes.lastIndexOf(startNode.id), + endIndex2 = sharedWay.nodes.lastIndexOf(endNode.id), + wayDirection2 = (endIndex2 - startIndex2), + insertAt = endIndex2; + if (wayDirection2 < -1) { wayDirection2 = 1; } + + if (wayDirection1 !== wayDirection2) { + inBetweenNodes.reverse(); + insertAt = startIndex2; + } + for (j = 0; j < inBetweenNodes.length; j++) { + sharedWay = sharedWay.addNode(inBetweenNodes[j], insertAt + j); + } + graph = graph.replace(sharedWay); + } + }); + /* eslint-enable no-loop-func */ + } - if (keyNodes.length === 1) { - var index = nodes.indexOf(keyNodes[0]), - oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length); + } - keyNodes.push(nodes[oppositeIndex]); - keyPoints.push(points[oppositeIndex]); - } + // update the way to have all the new nodes + ids = nodes.map(function(n) { return n.id; }); + ids.push(ids[0]); - // key points and nodes are those connected to the ways, - // they are projected onto the circle, inbetween nodes are moved - // to constant intervals between key nodes, extra inbetween nodes are - // added if necessary. - for (var i = 0; i < keyPoints.length; i++) { - var nextKeyNodeIndex = (i + 1) % keyNodes.length, - startNode = keyNodes[i], - endNode = keyNodes[nextKeyNodeIndex], - startNodeIndex = nodes.indexOf(startNode), - endNodeIndex = nodes.indexOf(endNode), - numberNewPoints = -1, - indexRange = endNodeIndex - startNodeIndex, - nearNodes = {}, - inBetweenNodes = [], - startAngle, endAngle, totalAngle, eachAngle, - angle, loc, node, origNode, j; - - if (indexRange < 0) { - indexRange += nodes.length; - } + way = way.update({nodes: ids}); + graph = graph.replace(way); - // position this key node - var distance = geoVecLength(centroid, keyPoints[i]); - if (distance === 0) { distance = 1e-4; } - keyPoints[i] = [ - centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius, - centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius - ]; - loc = projection.invert(keyPoints[i]); - node = keyNodes[i]; - origNode = origNodes[node.id]; - node = node.move(geoVecInterp(origNode.loc, loc, t)); - graph = graph.replace(node); - - // figure out the between delta angle we want to match to - startAngle = Math.atan2(keyPoints[i][1] - centroid[1], keyPoints[i][0] - centroid[0]); - endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]); - totalAngle = endAngle - startAngle; - - // detects looping around -pi/pi - if (totalAngle * sign > 0) { - totalAngle = -sign * (2 * Math.PI - Math.abs(totalAngle)); - } + return graph; + }; - do { - numberNewPoints++; - eachAngle = totalAngle / (indexRange + numberNewPoints); - } while (Math.abs(eachAngle) > maxAngle); + action.makeConvex = function(graph) { + var way = graph.entity(wayId), + nodes = uniq(graph.childNodes(way)), + points = nodes.map(function(n) { return projection(n.loc); }), + sign = d3_polygonArea(points) > 0 ? 1 : -1, + hull = d3_polygonHull(points); - // move existing nodes - for (j = 1; j < indexRange; j++) { - angle = startAngle + j * eachAngle; - loc = projection.invert([ - centroid[0] + Math.cos(angle) * radius, - centroid[1] + Math.sin(angle) * radius - ]); + // D3 convex hulls go counterclockwise.. + if (sign === -1) { + nodes.reverse(); + points.reverse(); + } - node = nodes[(j + startNodeIndex) % nodes.length]; - origNode = origNodes[node.id]; - nearNodes[node.id] = angle; + for (var i = 0; i < hull.length - 1; i++) { + var startIndex = points.indexOf(hull[i]), + endIndex = points.indexOf(hull[i+1]), + indexRange = (endIndex - startIndex); + + if (indexRange < 0) { + indexRange += nodes.length; + } + + // move interior nodes to the surface of the convex hull.. + for (var j = 1; j < indexRange; j++) { + var point = geoVecInterp(hull[i], hull[i+1], j / indexRange), + node = nodes[(j + startIndex) % nodes.length].move(projection.invert(point)); + graph = graph.replace(node); + } + } + return graph; + }; - node = node.move(geoVecInterp(origNode.loc, loc, t)); - graph = graph.replace(node); - } - // add new inbetween nodes if necessary - for (j = 0; j < numberNewPoints; j++) { - angle = startAngle + (indexRange + j) * eachAngle; - loc = projection.invert([ - centroid[0] + Math.cos(angle) * radius, - centroid[1] + Math.sin(angle) * radius - ]); - - // choose a nearnode to use as the original - var min$$1 = Infinity; - for (var nodeId in nearNodes) { - var nearAngle = nearNodes[nodeId], - dist = Math.abs(nearAngle - angle); - if (dist < min$$1) { - dist = min$$1; - origNode = origNodes[nodeId]; - } - } - - node = osmNode({ loc: geoVecInterp(origNode.loc, loc, t) }); - graph = graph.replace(node); - - nodes.splice(endNodeIndex + j, 0, node); - inBetweenNodes.push(node.id); - } + action.disabled = function(graph) { + if (!graph.entity(wayId).isClosed()) + return 'not_closed'; + }; - // Check for other ways that share these keyNodes.. - // If keyNodes are adjacent in both ways, - // we can add inBetween nodes to that shared way too.. - if (indexRange === 1 && inBetweenNodes.length) { - var startIndex1 = way.nodes.lastIndexOf(startNode.id), - endIndex1 = way.nodes.lastIndexOf(endNode.id), - wayDirection1 = (endIndex1 - startIndex1); - if (wayDirection1 < -1) { wayDirection1 = 1; } - - /* eslint-disable no-loop-func */ - forEach(without(graph.parentWays(keyNodes[i]), way), function(sharedWay) { - if (sharedWay.areAdjacent(startNode.id, endNode.id)) { - var startIndex2 = sharedWay.nodes.lastIndexOf(startNode.id), - endIndex2 = sharedWay.nodes.lastIndexOf(endNode.id), - wayDirection2 = (endIndex2 - startIndex2), - insertAt = endIndex2; - if (wayDirection2 < -1) { wayDirection2 = 1; } - - if (wayDirection1 !== wayDirection2) { - inBetweenNodes.reverse(); - insertAt = startIndex2; - } - for (j = 0; j < inBetweenNodes.length; j++) { - sharedWay = sharedWay.addNode(inBetweenNodes[j], insertAt + j); - } - graph = graph.replace(sharedWay); - } - }); - /* eslint-enable no-loop-func */ - } - } + action.transitionable = true; - // update the way to have all the new nodes - ids = nodes.map(function(n) { return n.id; }); - ids.push(ids[0]); - way = way.update({nodes: ids}); - graph = graph.replace(way); + return action; + } - return graph; - }; + // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteWayAction.as + function actionDeleteWay(wayId) { - action.makeConvex = function(graph) { - var way = graph.entity(wayId), - nodes = uniq(graph.childNodes(way)), - points = nodes.map(function(n) { return projection(n.loc); }), - sign = d3_polygonArea(points) > 0 ? 1 : -1, - hull = d3_polygonHull(points); + function canDeleteNode(node, graph) { + return !graph.parentWays(node).length && + !graph.parentRelations(node).length && + !node.hasInterestingTags(); + } - // D3 convex hulls go counterclockwise.. - if (sign === -1) { - nodes.reverse(); - points.reverse(); - } - for (var i = 0; i < hull.length - 1; i++) { - var startIndex = points.indexOf(hull[i]), - endIndex = points.indexOf(hull[i+1]), - indexRange = (endIndex - startIndex); + var action = function(graph) { + var way = graph.entity(wayId); - if (indexRange < 0) { - indexRange += nodes.length; - } + graph.parentRelations(way) + .forEach(function(parent) { + parent = parent.removeMembersWithID(wayId); + graph = graph.replace(parent); - // move interior nodes to the surface of the convex hull.. - for (var j = 1; j < indexRange; j++) { - var point = geoVecInterp(hull[i], hull[i+1], j / indexRange), - node = nodes[(j + startIndex) % nodes.length].move(projection.invert(point)); - graph = graph.replace(node); - } - } - return graph; - }; + if (parent.isDegenerate()) { + graph = actionDeleteRelation(parent.id)(graph); + } + }); + uniq(way.nodes).forEach(function(nodeId) { + graph = graph.replace(way.removeNode(nodeId)); - action.disabled = function(graph) { - if (!graph.entity(wayId).isClosed()) - return 'not_closed'; - }; + var node = graph.entity(nodeId); + if (canDeleteNode(node, graph)) { + graph = graph.remove(node); + } + }); + return graph.remove(way); + }; - action.transitionable = true; + return action; + } - return action; -} + function actionDeleteMultiple(ids) { + var actions = { + way: actionDeleteWay, + node: actionDeleteNode, + relation: actionDeleteRelation + }; -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteWayAction.as -function actionDeleteWay(wayId) { + var action = function(graph) { + ids.forEach(function(id) { + if (graph.hasEntity(id)) { // It may have been deleted aready. + graph = actions[graph.entity(id).type](id)(graph); + } + }); - function canDeleteNode(node, graph) { - return !graph.parentWays(node).length && - !graph.parentRelations(node).length && - !node.hasInterestingTags(); - } + return graph; + }; - var action = function(graph) { - var way = graph.entity(wayId); + return action; + } - graph.parentRelations(way) - .forEach(function(parent) { - parent = parent.removeMembersWithID(wayId); - graph = graph.replace(parent); + // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as + function actionDeleteRelation(relationId) { - if (parent.isDegenerate()) { - graph = actionDeleteRelation(parent.id)(graph); - } - }); - uniq(way.nodes).forEach(function(nodeId) { - graph = graph.replace(way.removeNode(nodeId)); + function canDeleteEntity(entity, graph) { + return !graph.parentWays(entity).length && + !graph.parentRelations(entity).length && + !entity.hasInterestingTags(); + } - var node = graph.entity(nodeId); - if (canDeleteNode(node, graph)) { - graph = graph.remove(node); - } - }); - return graph.remove(way); - }; + var action = function(graph) { + var relation = graph.entity(relationId); + graph.parentRelations(relation) + .forEach(function(parent) { + parent = parent.removeMembersWithID(relationId); + graph = graph.replace(parent); - return action; -} + if (parent.isDegenerate()) { + graph = actionDeleteRelation(parent.id)(graph); + } + }); -function actionDeleteMultiple(ids) { - var actions = { - way: actionDeleteWay, - node: actionDeleteNode, - relation: actionDeleteRelation - }; + uniq(map$3(relation.members, 'id')).forEach(function(memberId) { + graph = graph.replace(relation.removeMembersWithID(memberId)); + var entity = graph.entity(memberId); + if (canDeleteEntity(entity, graph)) { + graph = actionDeleteMultiple([memberId])(graph); + } + }); - var action = function(graph) { - ids.forEach(function(id) { - if (graph.hasEntity(id)) { // It may have been deleted aready. - graph = actions[graph.entity(id).type](id)(graph); - } - }); + return graph.remove(relation); + }; - return graph; - }; + return action; + } + + // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteNodeAction.as + function actionDeleteNode(nodeId) { + var action = function(graph) { + var node = graph.entity(nodeId); - return action; -} + graph.parentWays(node) + .forEach(function(parent) { + parent = parent.removeNode(nodeId); + graph = graph.replace(parent); -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as -function actionDeleteRelation(relationId) { + if (parent.isDegenerate()) { + graph = actionDeleteWay(parent.id)(graph); + } + }); + graph.parentRelations(node) + .forEach(function(parent) { + parent = parent.removeMembersWithID(nodeId); + graph = graph.replace(parent); - function canDeleteEntity(entity, graph) { - return !graph.parentWays(entity).length && - !graph.parentRelations(entity).length && - !entity.hasInterestingTags(); - } + if (parent.isDegenerate()) { + graph = actionDeleteRelation(parent.id)(graph); + } + }); + return graph.remove(node); + }; - var action = function(graph) { - var relation = graph.entity(relationId); - graph.parentRelations(relation) - .forEach(function(parent) { - parent = parent.removeMembersWithID(relationId); - graph = graph.replace(parent); + return action; + } - if (parent.isDegenerate()) { - graph = actionDeleteRelation(parent.id)(graph); - } - }); + // Connect the ways at the given nodes. + // + // First choose a node to be the survivor, with preference given + // to an existing (not new) node. + // + // Tags and relation memberships of of non-surviving nodes are merged + // to the survivor. + // + // This is the inverse of `iD.actionDisconnect`. + // + // Reference: + // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeNodesAction.as + // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/MergeNodesAction.java + // + function actionConnect(nodeIDs) { + var action = function(graph) { + var survivor; + var node; + var parents; + var i, j; + + // Choose a survivor node, prefer an existing (not new) node - #4974 + for (i = 0; i < nodeIDs.length; i++) { + survivor = graph.entity(nodeIDs[i]); + if (survivor.version) break; // found one + } - uniq(map$3(relation.members, 'id')).forEach(function(memberId) { - graph = graph.replace(relation.removeMembersWithID(memberId)); + // Replace all non-surviving nodes with the survivor and merge tags. + for (i = 0; i < nodeIDs.length; i++) { + node = graph.entity(nodeIDs[i]); + if (node.id === survivor.id) continue; + + parents = graph.parentWays(node); + for (j = 0; j < parents.length; j++) { + if (!parents[j].areAdjacent(node.id, survivor.id)) { + graph = graph.replace(parents[j].replaceNode(node.id, survivor.id)); + } + } + + parents = graph.parentRelations(node); + for (j = 0; j < parents.length; j++) { + graph = graph.replace(parents[j].replaceMember(node, survivor)); + } + + survivor = survivor.mergeTags(node.tags); + graph = actionDeleteNode(node.id)(graph); + } - var entity = graph.entity(memberId); - if (canDeleteEntity(entity, graph)) { - graph = actionDeleteMultiple([memberId])(graph); - } - }); + graph = graph.replace(survivor); - return graph.remove(relation); - }; + return graph; + }; - return action; -} + action.disabled = function(graph) { + var seen = {}; + var restrictionIDs = []; + var survivor; + var node, way; + var relations, relation, role; + var i, j, k; -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteNodeAction.as -function actionDeleteNode(nodeId) { - var action = function(graph) { - var node = graph.entity(nodeId); + // Choose a survivor node, prefer an existing (not new) node - #4974 + for (i = 0; i < nodeIDs.length; i++) { + survivor = graph.entity(nodeIDs[i]); + if (survivor.version) break; // found one + } - graph.parentWays(node) - .forEach(function(parent) { - parent = parent.removeNode(nodeId); - graph = graph.replace(parent); + // 1. disable if the nodes being connected have conflicting relation roles + for (i = 0; i < nodeIDs.length; i++) { + node = graph.entity(nodeIDs[i]); + relations = graph.parentRelations(node); + + for (j = 0; j < relations.length; j++) { + relation = relations[j]; + role = relation.memberById(node.id).role || ''; + + // if this node is a via node in a restriction, remember for later + if (relation.isValidRestriction()) { + restrictionIDs.push(relation.id); + } + + if (seen[relation.id] !== undefined && seen[relation.id] !== role) { + return 'relation'; + } else { + seen[relation.id] = role; + } + } + } - if (parent.isDegenerate()) { - graph = actionDeleteWay(parent.id)(graph); - } - }); + // gather restrictions for parent ways + for (i = 0; i < nodeIDs.length; i++) { + node = graph.entity(nodeIDs[i]); + + var parents = graph.parentWays(node); + for (j = 0; j < parents.length; j++) { + var parent = parents[j]; + relations = graph.parentRelations(parent); + + for (k = 0; k < relations.length; k++) { + relation = relations[k]; + if (relation.isValidRestriction()) { + restrictionIDs.push(relation.id); + } + } + } + } - graph.parentRelations(node) - .forEach(function(parent) { - parent = parent.removeMembersWithID(nodeId); - graph = graph.replace(parent); - if (parent.isDegenerate()) { - graph = actionDeleteRelation(parent.id)(graph); - } - }); + // test restrictions + restrictionIDs = uniq(restrictionIDs); + for (i = 0; i < restrictionIDs.length; i++) { + relation = graph.entity(restrictionIDs[i]); + if (!relation.isComplete(graph)) continue; + + var memberWays = relation.members + .filter(function(m) { return m.type === 'way'; }) + .map(function(m) { return graph.entity(m.id); }); + + memberWays = uniq(memberWays); + var f = relation.memberByRole('from'); + var t = relation.memberByRole('to'); + var isUturn = (f.id === t.id); + + // 2a. disable if connection would damage a restriction + // (a key node is a node at the junction of ways) + var nodes = { from: [], via: [], to: [], keyfrom: [], keyto: [] }; + for (j = 0; j < relation.members.length; j++) { + collectNodes(relation.members[j], nodes); + } + + nodes.keyfrom = uniq(nodes.keyfrom.filter(hasDuplicates)); + nodes.keyto = uniq(nodes.keyto.filter(hasDuplicates)); + + var filter = keyNodeFilter(nodes.keyfrom, nodes.keyto); + nodes.from = nodes.from.filter(filter); + nodes.via = nodes.via.filter(filter); + nodes.to = nodes.to.filter(filter); + + var connectFrom = false; + var connectVia = false; + var connectTo = false; + var connectKeyFrom = false; + var connectKeyTo = false; + + for (j = 0; j < nodeIDs.length; j++) { + var n = nodeIDs[j]; + if (nodes.from.indexOf(n) !== -1) { connectFrom = true; } + if (nodes.via.indexOf(n) !== -1) { connectVia = true; } + if (nodes.to.indexOf(n) !== -1) { connectTo = true; } + if (nodes.keyfrom.indexOf(n) !== -1) { connectKeyFrom = true; } + if (nodes.keyto.indexOf(n) !== -1) { connectKeyTo = true; } + } + if (connectFrom && connectTo && !isUturn) { return 'restriction'; } + if (connectFrom && connectVia) { return 'restriction'; } + if (connectTo && connectVia) { return 'restriction'; } + + // connecting to a key node - + // if both nodes are on a member way (i.e. part of the turn restriction), + // the connecting node must be adjacent to the key node. + if (connectKeyFrom || connectKeyTo) { + if (nodeIDs.length !== 2) { return 'restriction'; } + + var n0 = null; + var n1 = null; + for (j = 0; j < memberWays.length; j++) { + way = memberWays[j]; + if (way.contains(nodeIDs[0])) { n0 = nodeIDs[0]; } + if (way.contains(nodeIDs[1])) { n1 = nodeIDs[1]; } + } + + if (n0 && n1) { // both nodes are part of the restriction + var ok = false; + for (j = 0; j < memberWays.length; j++) { + way = memberWays[j]; + if (way.areAdjacent(n0, n1)) { + ok = true; + break; + } + } + if (!ok) { + return 'restriction'; + } + } + } + + // 2b. disable if nodes being connected will destroy a member way in a restriction + // (to test, make a copy and try actually connecting the nodes) + for (j = 0; j < memberWays.length; j++) { + way = memberWays[j].update({}); // make copy + for (k = 0; k < nodeIDs.length; k++) { + if (nodeIDs[k] === survivor.id) continue; + + if (way.areAdjacent(nodeIDs[k], survivor.id)) { + way = way.removeNode(nodeIDs[k]); + } else { + way = way.replaceNode(nodeIDs[k], survivor.id); + } + } + if (way.isDegenerate()) { + return 'restriction'; + } + } + } - return graph.remove(node); - }; + return false; - return action; -} - -// Connect the ways at the given nodes. -// -// The last node will survive. All other nodes will be replaced with -// the surviving node in parent ways, and then removed. -// -// Tags and relation memberships of of non-surviving nodes are merged -// to the survivor. -// -// This is the inverse of `iD.actionDisconnect`. -// -// Reference: -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeNodesAction.as -// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/MergeNodesAction.java -// -function actionConnect(nodeIds) { - return function(graph) { - var last = nodeIds[nodeIds.length - 1]; - var survivor = graph.entity(last); - - for (var i = 0; i < nodeIds.length - 1; i++) { - var node = graph.entity(nodeIds[i]); - - /* eslint-disable no-loop-func */ - graph.parentWays(node).forEach(function(parent) { - if (!parent.areAdjacent(node.id, survivor.id)) { - graph = graph.replace(parent.replaceNode(node.id, survivor.id)); - } - }); + // if a key node appears multiple times (indexOf !== lastIndexOf) it's a FROM-VIA or TO-VIA junction + function hasDuplicates(n, i, arr) { + return arr.indexOf(n) !== arr.lastIndexOf(n); + } - graph.parentRelations(node).forEach(function(parent) { - graph = graph.replace(parent.replaceMember(node, survivor)); - }); - /* eslint-enable no-loop-func */ + function keyNodeFilter(froms, tos) { + return function(n) { + return froms.indexOf(n) === -1 && tos.indexOf(n) === -1; + }; + } - survivor = survivor.mergeTags(node.tags); - graph = actionDeleteNode(node.id)(graph); - } + function collectNodes(member, collection) { + var entity = graph.hasEntity(member.id); + if (!entity) return; + + var role = member.role || ''; + if (!collection[role]) { + collection[role] = []; + } + + if (member.type === 'node') { + collection[role].push(member.id); + if (role === 'via') { + collection.keyfrom.push(member.id); + collection.keyto.push(member.id); + } + + } else if (member.type === 'way') { + collection[role].push.apply(collection[role], entity.nodes); + if (role === 'from' || role === 'via') { + collection.keyfrom.push(entity.first()); + collection.keyfrom.push(entity.last()); + } + if (role === 'to' || role === 'via') { + collection.keyto.push(entity.first()); + collection.keyto.push(entity.last()); + } + } + } + }; - graph = graph.replace(survivor); - return graph; - }; -} + return action; + } -function actionCopyEntities(ids, fromGraph) { - var copies = {}; + function actionCopyEntities(ids, fromGraph) { + var copies = {}; - var action = function(graph) { - ids.forEach(function(id) { - fromGraph.entity(id).copy(fromGraph, copies); - }); + var action = function(graph) { + ids.forEach(function(id) { + fromGraph.entity(id).copy(fromGraph, copies); + }); - for (var id in copies) { - graph = graph.replace(copies[id]); - } + for (var id in copies) { + graph = graph.replace(copies[id]); + } - return graph; - }; + return graph; + }; - action.copies = function() { - return copies; - }; + action.copies = function() { + return copies; + }; - return action; -} + return action; + } -function actionDeleteMember(relationId, memberIndex) { - return function(graph) { - var relation = graph.entity(relationId) - .removeMember(memberIndex); + function actionDeleteMember(relationId, memberIndex) { + return function(graph) { + var relation = graph.entity(relationId) + .removeMember(memberIndex); - graph = graph.replace(relation); + graph = graph.replace(relation); - if (relation.isDegenerate()) - graph = actionDeleteRelation(relation.id)(graph); + if (relation.isDegenerate()) + graph = actionDeleteRelation(relation.id)(graph); - return graph; - }; -} + return graph; + }; + } -function actionDeprecateTags(entityId) { + function actionDeprecateTags(entityId) { - return function(graph) { - var entity = graph.entity(entityId), - newtags = clone(entity.tags), - change = false, - rule; + return function(graph) { + var entity = graph.entity(entityId), + newtags = clone(entity.tags), + change = false, + rule; - // This handles dataDeprecated tags with a single condition - for (var i = 0; i < dataDeprecated.length; i++) { + // This handles dataDeprecated tags with a single condition + for (var i = 0; i < dataDeprecated.length; i++) { - rule = dataDeprecated[i]; - var match = toPairs(rule.old)[0], - replacements = rule.replace ? toPairs(rule.replace) : null; + rule = dataDeprecated[i]; + var match = toPairs(rule.old)[0], + replacements = rule.replace ? toPairs(rule.replace) : null; - if (entity.tags[match[0]] && match[1] === '*') { + if (entity.tags[match[0]] && match[1] === '*') { - var value = entity.tags[match[0]]; - if (replacements && !newtags[replacements[0][0]]) { - newtags[replacements[0][0]] = value; - } - delete newtags[match[0]]; - change = true; + var value = entity.tags[match[0]]; + if (replacements && !newtags[replacements[0][0]]) { + newtags[replacements[0][0]] = value; + } + delete newtags[match[0]]; + change = true; - } else if (entity.tags[match[0]] === match[1]) { - newtags = assign({}, rule.replace || {}, omit(newtags, match[0])); - change = true; - } - } + } else if (entity.tags[match[0]] === match[1]) { + newtags = assign({}, rule.replace || {}, omit(newtags, match[0])); + change = true; + } + } - if (change) { - return graph.replace(entity.update({tags: newtags})); - } else { - return graph; - } - }; -} - -function actionDiscardTags(difference) { - - return function(graph) { - function discardTags(entity) { - var tags = {}; - var keys = Object.keys(entity.tags); - var discarded = false; - - for (var i = 0; i < keys.length; i++) { - var k = keys[i]; - if (dataDiscarded[k] || !entity.tags[k]) { - discarded = true; - } else { - tags[k] = entity.tags[k]; - } - } + if (change) { + return graph.replace(entity.update({tags: newtags})); + } else { + return graph; + } + }; + } - if (discarded) { - graph = graph.replace(entity.update({ tags: tags })); - } - } + function actionDiscardTags(difference) { - difference.modified().forEach(discardTags); - difference.created().forEach(discardTags); + return function(graph) { + function discardTags(entity) { + var tags = {}; + var keys = Object.keys(entity.tags); + var discarded = false; - return graph; - }; -} - -// Disconect the ways at the given node. -// -// Optionally, disconnect only the given ways. -// -// For testing convenience, accepts an ID to assign to the (first) new node. -// Normally, this will be undefined and the way will automatically -// be assigned a new ID. -// -// This is the inverse of `iD.actionConnect`. -// -// Reference: -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/UnjoinNodeAction.as -// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/UnGlueAction.java -// -function actionDisconnect(nodeId, newNodeId) { - var wayIds; - - - var action = function(graph) { - var node = graph.entity(nodeId), - connections = action.connections(graph); - - connections.forEach(function(connection) { - var way = graph.entity(connection.wayID), - newNode = osmNode({id: newNodeId, loc: node.loc, tags: node.tags}); - - graph = graph.replace(newNode); - if (connection.index === 0 && way.isArea()) { - // replace shared node with shared node.. - graph = graph.replace(way.replaceNode(way.nodes[0], newNode.id)); - } else if (way.isClosed() && connection.index === way.nodes.length - 1) { - // replace closing node with new new node.. - graph = graph.replace(way.unclose().addNode(newNode.id)); - } else { - // replace shared node with multiple new nodes.. - graph = graph.replace(way.updateNode(newNode.id, connection.index)); - } - }); + for (var i = 0; i < keys.length; i++) { + var k = keys[i]; + if (dataDiscarded[k] || !entity.tags[k]) { + discarded = true; + } else { + tags[k] = entity.tags[k]; + } + } - return graph; - }; + if (discarded) { + graph = graph.replace(entity.update({ tags: tags })); + } + } + difference.modified().forEach(discardTags); + difference.created().forEach(discardTags); - action.connections = function(graph) { - var candidates = [], - keeping = false, - parentWays = graph.parentWays(graph.entity(nodeId)); + return graph; + }; + } - parentWays.forEach(function(way) { - if (wayIds && wayIds.indexOf(way.id) === -1) { - keeping = true; - return; - } - if (way.isArea() && (way.nodes[0] === nodeId)) { - candidates.push({ wayID: way.id, index: 0 }); - } else { - way.nodes.forEach(function(waynode, index) { - if (waynode === nodeId) { - candidates.push({ wayID: way.id, index: index }); - } - }); - } - }); + // Disconect the ways at the given node. + // + // Optionally, disconnect only the given ways. + // + // For testing convenience, accepts an ID to assign to the (first) new node. + // Normally, this will be undefined and the way will automatically + // be assigned a new ID. + // + // This is the inverse of `iD.actionConnect`. + // + // Reference: + // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/UnjoinNodeAction.as + // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/UnGlueAction.java + // + function actionDisconnect(nodeId, newNodeId) { + var wayIds; + + + var action = function(graph) { + var node = graph.entity(nodeId); + var connections = action.connections(graph); + + connections.forEach(function(connection) { + var way = graph.entity(connection.wayID); + var newNode = osmNode({id: newNodeId, loc: node.loc, tags: node.tags}); + + graph = graph.replace(newNode); + if (connection.index === 0 && way.isArea()) { + // replace shared node with shared node.. + graph = graph.replace(way.replaceNode(way.nodes[0], newNode.id)); + } else if (way.isClosed() && connection.index === way.nodes.length - 1) { + // replace closing node with new new node.. + graph = graph.replace(way.unclose().addNode(newNode.id)); + } else { + // replace shared node with multiple new nodes.. + graph = graph.replace(way.updateNode(newNode.id, connection.index)); + } + }); - return keeping ? candidates : candidates.slice(1); - }; + return graph; + }; - action.disabled = function(graph) { - var connections = action.connections(graph); - if (connections.length === 0 || (wayIds && wayIds.length !== connections.length)) - return 'not_connected'; + action.connections = function(graph) { + var candidates = []; + var keeping = false; + var parentWays = graph.parentWays(graph.entity(nodeId)); + + parentWays.forEach(function(way) { + if (wayIds && wayIds.indexOf(way.id) === -1) { + keeping = true; + return; + } + if (way.isArea() && (way.nodes[0] === nodeId)) { + candidates.push({ wayID: way.id, index: 0 }); + } else { + way.nodes.forEach(function(waynode, index) { + if (waynode === nodeId) { + candidates.push({ wayID: way.id, index: index }); + } + }); + } + }); - var parentWays = graph.parentWays(graph.entity(nodeId)), - seenRelationIds = {}, - sharedRelation; + return keeping ? candidates : candidates.slice(1); + }; - parentWays.forEach(function(way) { - if (wayIds && wayIds.indexOf(way.id) === -1) - return; - var relations = graph.parentRelations(way); - relations.forEach(function(relation) { - if (relation.id in seenRelationIds) { - sharedRelation = relation; - } else { - seenRelationIds[relation.id] = true; - } - }); - }); + action.disabled = function(graph) { + var connections = action.connections(graph); + if (connections.length === 0 || (wayIds && wayIds.length !== connections.length)) + return 'not_connected'; - if (sharedRelation) - return 'relation'; - }; + var parentWays = graph.parentWays(graph.entity(nodeId)); + var seenRelationIds = {}; + var sharedRelation; + parentWays.forEach(function(way) { + if (wayIds && wayIds.indexOf(way.id) === -1) + return; - action.limitWays = function(_) { - if (!arguments.length) return wayIds; - wayIds = _; - return action; - }; + var relations = graph.parentRelations(way); + relations.forEach(function(relation) { + if (relation.id in seenRelationIds) { + sharedRelation = relation; + } else { + seenRelationIds[relation.id] = true; + } + }); + }); + if (sharedRelation) + return 'relation'; + }; - return action; -} -// Join ways at the end node they share. -// -// This is the inverse of `iD.actionSplit`. -// -// Reference: -// https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeWaysAction.as -// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/CombineWayAction.java -// -function actionJoin(ids) { + action.limitWays = function(_) { + if (!arguments.length) return wayIds; + wayIds = _; + return action; + }; - function groupEntitiesByGeometry(graph) { - var entities = ids.map(function(id) { return graph.entity(id); }); - return assignIn({line: []}, groupBy(entities, function(entity) { return entity.geometry(graph); })); - } + return action; + } - var action = function(graph) { - var ways = ids.map(graph.entity, graph); - var survivorID = ways[0].id; + // Join ways at the end node they share. + // + // This is the inverse of `iD.actionSplit`. + // + // Reference: + // https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeWaysAction.as + // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/CombineWayAction.java + // + function actionJoin(ids) { - // Prefer to keep an existing way. - for (var i = 0; i < ways.length; i++) { - if (!ways[i].isNew()) { - survivorID = ways[i].id; - break; - } - } + function groupEntitiesByGeometry(graph) { + var entities = ids.map(function(id) { return graph.entity(id); }); + return assignIn({line: []}, groupBy(entities, function(entity) { return entity.geometry(graph); })); + } - var sequences = osmJoinWays(ways, graph); - var joined = sequences[0]; - // We might need to reverse some of these ways before joining them. #4688 - // `joined.actions` property will contain any actions we need to apply. - graph = sequences.actions.reduce(function(g, action) { return action(g); }, graph); + var action = function(graph) { + var ways = ids.map(graph.entity, graph); + var survivorID = ways[0].id; - var survivor = graph.entity(survivorID); - survivor = survivor.update({ nodes: joined.nodes.map(function(n) { return n.id; }) }); - graph = graph.replace(survivor); + // Prefer to keep an existing way. + for (var i = 0; i < ways.length; i++) { + if (!ways[i].isNew()) { + survivorID = ways[i].id; + break; + } + } - joined.forEach(function(way) { - if (way.id === survivorID) return; + var sequences = osmJoinWays(ways, graph); + var joined = sequences[0]; - graph.parentRelations(way).forEach(function(parent) { - graph = graph.replace(parent.replaceMember(way, survivor)); - }); + // We might need to reverse some of these ways before joining them. #4688 + // `joined.actions` property will contain any actions we need to apply. + graph = sequences.actions.reduce(function(g, action) { return action(g); }, graph); - survivor = survivor.mergeTags(way.tags); + var survivor = graph.entity(survivorID); + survivor = survivor.update({ nodes: joined.nodes.map(function(n) { return n.id; }) }); + graph = graph.replace(survivor); - graph = graph.replace(survivor); - graph = actionDeleteWay(way.id)(graph); - }); + joined.forEach(function(way) { + if (way.id === survivorID) return; - return graph; - }; + graph.parentRelations(way).forEach(function(parent) { + graph = graph.replace(parent.replaceMember(way, survivor)); + }); + survivor = survivor.mergeTags(way.tags); - action.disabled = function(graph) { - var geometries = groupEntitiesByGeometry(graph); - if (ids.length < 2 || ids.length !== geometries.line.length) - return 'not_eligible'; + graph = graph.replace(survivor); + graph = actionDeleteWay(way.id)(graph); + }); - var joined = osmJoinWays(ids.map(graph.entity, graph), graph); - if (joined.length > 1) - return 'not_adjacent'; + return graph; + }; - var nodeIds = joined[0].nodes.map(function(n) { return n.id; }).slice(1, -1); - var relation; - var tags = {}; - var conflicting = false; - joined[0].forEach(function(way) { - var parents = graph.parentRelations(way); - parents.forEach(function(parent) { - if (parent.isRestriction() && parent.members.some(function(m) { return nodeIds.indexOf(m.id) >= 0; })) - relation = parent; - }); + action.disabled = function(graph) { + var geometries = groupEntitiesByGeometry(graph); + if (ids.length < 2 || ids.length !== geometries.line.length) + return 'not_eligible'; + + var joined = osmJoinWays(ids.map(graph.entity, graph), graph); + if (joined.length > 1) + return 'not_adjacent'; + + var nodeIds = joined[0].nodes.map(function(n) { return n.id; }).slice(1, -1); + var relation; + var tags = {}; + var conflicting = false; + + joined[0].forEach(function(way) { + var parents = graph.parentRelations(way); + parents.forEach(function(parent) { + if (parent.isRestriction() && parent.members.some(function(m) { return nodeIds.indexOf(m.id) >= 0; })) + relation = parent; + }); + + for (var k in way.tags) { + if (!(k in tags)) { + tags[k] = way.tags[k]; + } else if (tags[k] && osmIsInterestingTag(k) && tags[k] !== way.tags[k]) { + conflicting = true; + } + } + }); - for (var k in way.tags) { - if (!(k in tags)) { - tags[k] = way.tags[k]; - } else if (tags[k] && osmIsInterestingTag(k) && tags[k] !== way.tags[k]) { - conflicting = true; - } - } - }); + if (relation) + return 'restriction'; - if (relation) - return 'restriction'; + if (conflicting) + return 'conflicting_tags'; + }; - if (conflicting) - return 'conflicting_tags'; - }; + return action; + } - return action; -} + function actionMerge(ids) { -function actionMerge(ids) { + function groupEntitiesByGeometry(graph) { + var entities = ids.map(function(id) { return graph.entity(id); }); + return assignIn({point: [], area: [], line: [], relation: []}, + groupBy(entities, function(entity) { return entity.geometry(graph); })); + } - function groupEntitiesByGeometry(graph) { - var entities = ids.map(function(id) { return graph.entity(id); }); - return assignIn({point: [], area: [], line: [], relation: []}, - groupBy(entities, function(entity) { return entity.geometry(graph); })); - } + var action = function(graph) { + var geometries = groupEntitiesByGeometry(graph), + target = geometries.area[0] || geometries.line[0], + points = geometries.point; + + points.forEach(function(point) { + target = target.mergeTags(point.tags); + graph = graph.replace(target); + + graph.parentRelations(point).forEach(function(parent) { + graph = graph.replace(parent.replaceMember(point, target)); + }); + + var nodes = uniq(graph.childNodes(target)), + removeNode = point; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + if (graph.parentWays(node).length > 1 || + graph.parentRelations(node).length || + node.hasInterestingTags()) { + continue; + } + + // Found an uninteresting child node on the target way. + // Move orig point into its place to preserve point's history. #3683 + graph = graph.replace(point.update({ tags: {}, loc: node.loc })); + target = target.replaceNode(node.id, point.id); + graph = graph.replace(target); + removeNode = node; + break; + } + + graph = graph.remove(removeNode); + }); - var action = function(graph) { - var geometries = groupEntitiesByGeometry(graph), - target = geometries.area[0] || geometries.line[0], - points = geometries.point; + return graph; + }; - points.forEach(function(point) { - target = target.mergeTags(point.tags); - graph = graph.replace(target); - graph.parentRelations(point).forEach(function(parent) { - graph = graph.replace(parent.replaceMember(point, target)); - }); + action.disabled = function(graph) { + var geometries = groupEntitiesByGeometry(graph); + if (geometries.point.length === 0 || + (geometries.area.length + geometries.line.length) !== 1 || + geometries.relation.length !== 0) + return 'not_eligible'; + }; - var nodes = uniq(graph.childNodes(target)), - removeNode = point; - - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - if (graph.parentWays(node).length > 1 || - graph.parentRelations(node).length || - node.hasInterestingTags()) { - continue; - } - - // Found an uninteresting child node on the target way. - // Move orig point into its place to preserve point's history. #3683 - graph = graph.replace(point.update({ tags: {}, loc: node.loc })); - target = target.replaceNode(node.id, point.id); - graph = graph.replace(target); - removeNode = node; - break; - } - graph = graph.remove(removeNode); - }); + return action; + } - return graph; - }; + function actionMergePolygon(ids, newRelationId) { + function groupEntities(graph) { + var entities = ids.map(function (id) { return graph.entity(id); }); + return assignIn({ + closedWay: [], + multipolygon: [], + other: [] + }, groupBy(entities, function(entity) { + if (entity.type === 'way' && entity.isClosed()) { + return 'closedWay'; + } else if (entity.type === 'relation' && entity.isMultipolygon()) { + return 'multipolygon'; + } else { + return 'other'; + } + })); + } - action.disabled = function(graph) { - var geometries = groupEntitiesByGeometry(graph); - if (geometries.point.length === 0 || - (geometries.area.length + geometries.line.length) !== 1 || - geometries.relation.length !== 0) - return 'not_eligible'; - }; + var action = function(graph) { + var entities = groupEntities(graph); + + // An array representing all the polygons that are part of the multipolygon. + // + // Each element is itself an array of objects with an id property, and has a + // locs property which is an array of the locations forming the polygon. + var polygons = entities.multipolygon.reduce(function(polygons, m) { + return polygons.concat(osmJoinWays(m.members, graph)); + }, []).concat(entities.closedWay.map(function(d) { + var member = [{id: d.id}]; + member.nodes = graph.childNodes(d); + return member; + })); + + // contained is an array of arrays of boolean values, + // where contained[j][k] is true iff the jth way is + // contained by the kth way. + var contained = polygons.map(function(w, i) { + return polygons.map(function(d, n) { + if (i === n) return null; + return geoPolygonContainsPolygon( + map$3(d.nodes, 'loc'), + map$3(w.nodes, 'loc')); + }); + }); - return action; -} - -function actionMergePolygon(ids, newRelationId) { - - function groupEntities(graph) { - var entities = ids.map(function (id) { return graph.entity(id); }); - return assignIn({ - closedWay: [], - multipolygon: [], - other: [] - }, groupBy(entities, function(entity) { - if (entity.type === 'way' && entity.isClosed()) { - return 'closedWay'; - } else if (entity.type === 'relation' && entity.isMultipolygon()) { - return 'multipolygon'; - } else { - return 'other'; - } - })); - } - - - var action = function(graph) { - var entities = groupEntities(graph); - - // An array representing all the polygons that are part of the multipolygon. - // - // Each element is itself an array of objects with an id property, and has a - // locs property which is an array of the locations forming the polygon. - var polygons = entities.multipolygon.reduce(function(polygons, m) { - return polygons.concat(osmJoinWays(m.members, graph)); - }, []).concat(entities.closedWay.map(function(d) { - var member = [{id: d.id}]; - member.nodes = graph.childNodes(d); - return member; - })); - - // contained is an array of arrays of boolean values, - // where contained[j][k] is true iff the jth way is - // contained by the kth way. - var contained = polygons.map(function(w, i) { - return polygons.map(function(d, n) { - if (i === n) return null; - return geoPolygonContainsPolygon( - map$3(d.nodes, 'loc'), - map$3(w.nodes, 'loc')); - }); - }); + // Sort all polygons as either outer or inner ways + var members = [], + outer = true; - // Sort all polygons as either outer or inner ways - var members = [], - outer = true; + while (polygons.length) { + extractUncontained(polygons); + polygons = polygons.filter(isContained); + contained = contained.filter(isContained).map(filterContained); + } - while (polygons.length) { - extractUncontained(polygons); - polygons = polygons.filter(isContained); - contained = contained.filter(isContained).map(filterContained); - } + function isContained(d, i) { + return some(contained[i]); + } - function isContained(d, i) { - return some(contained[i]); - } + function filterContained(d) { + return d.filter(isContained); + } - function filterContained(d) { - return d.filter(isContained); - } + function extractUncontained(polygons) { + polygons.forEach(function(d, i) { + if (!isContained(d, i)) { + d.forEach(function(member) { + members.push({ + type: 'way', + id: member.id, + role: outer ? 'outer' : 'inner' + }); + }); + } + }); + outer = !outer; + } - function extractUncontained(polygons) { - polygons.forEach(function(d, i) { - if (!isContained(d, i)) { - d.forEach(function(member) { - members.push({ - type: 'way', - id: member.id, - role: outer ? 'outer' : 'inner' - }); - }); - } - }); - outer = !outer; - } + // Move all tags to one relation + var relation = entities.multipolygon[0] || + osmRelation({ id: newRelationId, tags: { type: 'multipolygon' }}); - // Move all tags to one relation - var relation = entities.multipolygon[0] || - osmRelation({ id: newRelationId, tags: { type: 'multipolygon' }}); + entities.multipolygon.slice(1).forEach(function(m) { + relation = relation.mergeTags(m.tags); + graph = graph.remove(m); + }); - entities.multipolygon.slice(1).forEach(function(m) { - relation = relation.mergeTags(m.tags); - graph = graph.remove(m); - }); + entities.closedWay.forEach(function(way) { + function isThisOuter(m) { + return m.id === way.id && m.role !== 'inner'; + } + if (members.some(isThisOuter)) { + relation = relation.mergeTags(way.tags); + graph = graph.replace(way.update({ tags: {} })); + } + }); - entities.closedWay.forEach(function(way) { - function isThisOuter(m) { - return m.id === way.id && m.role !== 'inner'; - } - if (members.some(isThisOuter)) { - relation = relation.mergeTags(way.tags); - graph = graph.replace(way.update({ tags: {} })); - } - }); + return graph.replace(relation.update({ + members: members, + tags: omit(relation.tags, 'area') + })); + }; - return graph.replace(relation.update({ - members: members, - tags: omit(relation.tags, 'area') - })); - }; + action.disabled = function(graph) { + var entities = groupEntities(graph); + if (entities.other.length > 0 || + entities.closedWay.length + entities.multipolygon.length < 2) + return 'not_eligible'; + if (!entities.multipolygon.every(function(r) { return r.isComplete(graph); })) + return 'incomplete_relation'; + }; - action.disabled = function(graph) { - var entities = groupEntities(graph); - if (entities.other.length > 0 || - entities.closedWay.length + entities.multipolygon.length < 2) - return 'not_eligible'; - if (!entities.multipolygon.every(function(r) { return r.isComplete(graph); })) - return 'incomplete_relation'; - }; + return action; + } - return action; -} - -// Text diff algorithm following Hunt and McIlroy 1976. -// J. W. Hunt and M. D. McIlroy, An algorithm for differential file -// comparison, Bell Telephone Laboratories CSTR #41 (1976) -// http://www.cs.dartmouth.edu/~doug/ -// -// Expects two arrays of strings. -function LCS(file1, file2) { - var equivalenceClasses; - var file2indices; - var newCandidate; - var candidates; - var line; - var c, i, j, jX, r, s; - - equivalenceClasses = {}; - for (j = 0; j < file2.length; j++) { - line = file2[j]; - if (equivalenceClasses[line]) { - equivalenceClasses[line].push(j); - } else { - equivalenceClasses[line] = [j]; + // Text diff algorithm following Hunt and McIlroy 1976. + // J. W. Hunt and M. D. McIlroy, An algorithm for differential file + // comparison, Bell Telephone Laboratories CSTR #41 (1976) + // http://www.cs.dartmouth.edu/~doug/ + // + // Expects two arrays of strings. + function LCS(file1, file2) { + var equivalenceClasses; + var file2indices; + var newCandidate; + var candidates; + var line; + var c, i, j, jX, r, s; + + equivalenceClasses = {}; + for (j = 0; j < file2.length; j++) { + line = file2[j]; + if (equivalenceClasses[line]) { + equivalenceClasses[line].push(j); + } else { + equivalenceClasses[line] = [j]; + } } - } - candidates = [ - { file1index: -1, file2index: -1, chain: null } - ]; + candidates = [ + { file1index: -1, file2index: -1, chain: null } + ]; - for (i = 0; i < file1.length; i++) { - line = file1[i]; - file2indices = equivalenceClasses[line] || []; + for (i = 0; i < file1.length; i++) { + line = file1[i]; + file2indices = equivalenceClasses[line] || []; - r = 0; - c = candidates[0]; + r = 0; + c = candidates[0]; - for (jX = 0; jX < file2indices.length; jX++) { - j = file2indices[jX]; + for (jX = 0; jX < file2indices.length; jX++) { + j = file2indices[jX]; - for (s = r; s < candidates.length; s++) { - if ((candidates[s].file2index < j) && ((s === candidates.length - 1) || (candidates[s + 1].file2index > j))) { - break; + for (s = r; s < candidates.length; s++) { + if ((candidates[s].file2index < j) && ((s === candidates.length - 1) || (candidates[s + 1].file2index > j))) { + break; + } } - } - if (s < candidates.length) { - newCandidate = { file1index: i, file2index: j, chain: candidates[s] }; - if (r === candidates.length) { - candidates.push(c); - } else { - candidates[r] = c; - } - r = s + 1; - c = newCandidate; - if (r === candidates.length) { - break; // no point in examining further (j)s + if (s < candidates.length) { + newCandidate = { file1index: i, file2index: j, chain: candidates[s] }; + if (r === candidates.length) { + candidates.push(c); + } else { + candidates[r] = c; + } + r = s + 1; + c = newCandidate; + if (r === candidates.length) { + break; // no point in examining further (j)s + } } } + + candidates[r] = c; } - candidates[r] = c; - } + // At this point, we know the LCS: it's in the reverse of the + // linked-list through .chain of candidates[candidates.length - 1]. - // At this point, we know the LCS: it's in the reverse of the - // linked-list through .chain of candidates[candidates.length - 1]. + return candidates[candidates.length - 1]; + } - return candidates[candidates.length - 1]; -} + // We apply the LCS to give a simple representation of the + // offsets and lengths of mismatched chunks in the input + // files. This is used by diff3MergeIndices below. + function diffIndices(file1, file2) { + var result = []; + var tail1 = file1.length; + var tail2 = file2.length; -// We apply the LCS to give a simple representation of the -// offsets and lengths of mismatched chunks in the input -// files. This is used by diff3MergeIndices below. -function diffIndices(file1, file2) { - var result = []; - var tail1 = file1.length; - var tail2 = file2.length; + for (var candidate = LCS(file1, file2); + candidate !== null; + candidate = candidate.chain) + { + var mismatchLength1 = tail1 - candidate.file1index - 1; + var mismatchLength2 = tail2 - candidate.file2index - 1; + tail1 = candidate.file1index; + tail2 = candidate.file2index; - for (var candidate = LCS(file1, file2); - candidate !== null; - candidate = candidate.chain) - { - var mismatchLength1 = tail1 - candidate.file1index - 1; - var mismatchLength2 = tail2 - candidate.file2index - 1; - tail1 = candidate.file1index; - tail2 = candidate.file2index; - - if (mismatchLength1 || mismatchLength2) { - result.push({ - file1: [tail1 + 1, mismatchLength1], - file2: [tail2 + 1, mismatchLength2] - }); + if (mismatchLength1 || mismatchLength2) { + result.push({ + file1: [tail1 + 1, mismatchLength1], + file2: [tail2 + 1, mismatchLength2] + }); + } } + + result.reverse(); + return result; } - result.reverse(); - return result; -} - - -// Given three files, A, O, and B, where both A and B are -// independently derived from O, returns a fairly complicated -// internal representation of merge decisions it's taken. The -// interested reader may wish to consult -// -// Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce. -// 'A Formal Investigation of ' In Arvind and Prasad, -// editors, Foundations of Software Technology and Theoretical -// Computer Science (FSTTCS), December 2007. -// -// (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf) -function diff3MergeIndices(a, o, b) { - var i; - var m1 = diffIndices(o, a); - var m2 = diffIndices(o, b); - - var hunks = []; - function addHunk(h, side) { - hunks.push([h.file1[0], side, h.file1[1], h.file2[0], h.file2[1]]); - } - for (i = 0; i < m1.length; i++) { addHunk(m1[i], 0); } - for (i = 0; i < m2.length; i++) { addHunk(m2[i], 2); } - hunks.sort(function (x, y) { return x[0] - y[0]; }); - - var result = []; - var commonOffset = 0; - function copyCommon(targetOffset) { - if (targetOffset > commonOffset) { - result.push([1, commonOffset, targetOffset - commonOffset]); - commonOffset = targetOffset; - } - } - - for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) { - var firstHunkIndex = hunkIndex; - var hunk = hunks[hunkIndex]; - var regionLhs = hunk[0]; - var regionRhs = regionLhs + hunk[2]; - while (hunkIndex < hunks.length - 1) { - var maybeOverlapping = hunks[hunkIndex + 1]; - var maybeLhs = maybeOverlapping[0]; - if (maybeLhs > regionRhs) { - break; + + // Given three files, A, O, and B, where both A and B are + // independently derived from O, returns a fairly complicated + // internal representation of merge decisions it's taken. The + // interested reader may wish to consult + // + // Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce. + // 'A Formal Investigation of ' In Arvind and Prasad, + // editors, Foundations of Software Technology and Theoretical + // Computer Science (FSTTCS), December 2007. + // + // (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf) + function diff3MergeIndices(a, o, b) { + var i; + var m1 = diffIndices(o, a); + var m2 = diffIndices(o, b); + + var hunks = []; + function addHunk(h, side) { + hunks.push([h.file1[0], side, h.file1[1], h.file2[0], h.file2[1]]); + } + for (i = 0; i < m1.length; i++) { addHunk(m1[i], 0); } + for (i = 0; i < m2.length; i++) { addHunk(m2[i], 2); } + hunks.sort(function (x, y) { return x[0] - y[0]; }); + + var result = []; + var commonOffset = 0; + function copyCommon(targetOffset) { + if (targetOffset > commonOffset) { + result.push([1, commonOffset, targetOffset - commonOffset]); + commonOffset = targetOffset; } - regionRhs = Math.max(regionRhs, maybeLhs + maybeOverlapping[2]); - hunkIndex++; } - copyCommon(regionLhs); - if (firstHunkIndex === hunkIndex) { - // The 'overlap' was only one hunk long, meaning that - // there's no conflict here. Either a and o were the - // same, or b and o were the same. - if (hunk[4] > 0) { - result.push([hunk[1], hunk[3], hunk[4]]); - } - } else { - // A proper conflict. Determine the extents of the - // regions involved from a, o and b. Effectively merge - // all the hunks on the left into one giant hunk, and - // do the same for the right; then, correct for skew - // in the regions of o that each side changed, and - // report appropriate spans for the three sides. - var regions = { - 0: [a.length, -1, o.length, -1], - 2: [b.length, -1, o.length, -1] - }; - for (i = firstHunkIndex; i <= hunkIndex; i++) { - hunk = hunks[i]; - var side = hunk[1]; - var r = regions[side]; - var oLhs = hunk[0]; - var oRhs = oLhs + hunk[2]; - var abLhs = hunk[3]; - var abRhs = abLhs + hunk[4]; - r[0] = Math.min(abLhs, r[0]); - r[1] = Math.max(abRhs, r[1]); - r[2] = Math.min(oLhs, r[2]); - r[3] = Math.max(oRhs, r[3]); - } - var aLhs = regions[0][0] + (regionLhs - regions[0][2]); - var aRhs = regions[0][1] + (regionRhs - regions[0][3]); - var bLhs = regions[2][0] + (regionLhs - regions[2][2]); - var bRhs = regions[2][1] + (regionRhs - regions[2][3]); - result.push([-1, - aLhs, aRhs - aLhs, - regionLhs, regionRhs - regionLhs, - bLhs, bRhs - bLhs]); - } - commonOffset = regionRhs; - } - - copyCommon(o.length); - return result; -} - - -// Applies the output of diff3MergeIndices to actually -// construct the merged file; the returned result alternates -// between 'ok' and 'conflict' blocks. -function diff3Merge(a, o, b, excludeFalseConflicts) { - var result = []; - var files = [a, o, b]; - var indices = diff3MergeIndices(a, o, b); - - var okLines = []; - function flushOk() { - if (okLines.length) { - result.push({ok: okLines}); - } - okLines = []; - } - function pushOk(xs) { - for (var j = 0; j < xs.length; j++) { - okLines.push(xs[j]); - } - } - - function isTrueConflict(rec) { - if (rec[2] !== rec[6]) return true; - var aoff = rec[1]; - var boff = rec[5]; - for (var j = 0; j < rec[2]; j++) { - if (a[j + aoff] !== b[j + boff]) { - return true; + for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) { + var firstHunkIndex = hunkIndex; + var hunk = hunks[hunkIndex]; + var regionLhs = hunk[0]; + var regionRhs = regionLhs + hunk[2]; + while (hunkIndex < hunks.length - 1) { + var maybeOverlapping = hunks[hunkIndex + 1]; + var maybeLhs = maybeOverlapping[0]; + if (maybeLhs > regionRhs) { + break; + } + regionRhs = Math.max(regionRhs, maybeLhs + maybeOverlapping[2]); + hunkIndex++; } - } - return false; - } - for (var i = 0; i < indices.length; i++) { - var x = indices[i]; - var side = x[0]; - if (side === -1) { - if (excludeFalseConflicts && !isTrueConflict(x)) { - pushOk(files[0].slice(x[1], x[1] + x[2])); + copyCommon(regionLhs); + if (firstHunkIndex === hunkIndex) { + // The 'overlap' was only one hunk long, meaning that + // there's no conflict here. Either a and o were the + // same, or b and o were the same. + if (hunk[4] > 0) { + result.push([hunk[1], hunk[3], hunk[4]]); + } } else { - flushOk(); - result.push({ - conflict: { - a: a.slice(x[1], x[1] + x[2]), - aIndex: x[1], - o: o.slice(x[3], x[3] + x[4]), - oIndex: x[3], - b: b.slice(x[5], x[5] + x[6]), - bIndex: x[5] - } - }); + // A proper conflict. Determine the extents of the + // regions involved from a, o and b. Effectively merge + // all the hunks on the left into one giant hunk, and + // do the same for the right; then, correct for skew + // in the regions of o that each side changed, and + // report appropriate spans for the three sides. + var regions = { + 0: [a.length, -1, o.length, -1], + 2: [b.length, -1, o.length, -1] + }; + for (i = firstHunkIndex; i <= hunkIndex; i++) { + hunk = hunks[i]; + var side = hunk[1]; + var r = regions[side]; + var oLhs = hunk[0]; + var oRhs = oLhs + hunk[2]; + var abLhs = hunk[3]; + var abRhs = abLhs + hunk[4]; + r[0] = Math.min(abLhs, r[0]); + r[1] = Math.max(abRhs, r[1]); + r[2] = Math.min(oLhs, r[2]); + r[3] = Math.max(oRhs, r[3]); + } + var aLhs = regions[0][0] + (regionLhs - regions[0][2]); + var aRhs = regions[0][1] + (regionRhs - regions[0][3]); + var bLhs = regions[2][0] + (regionLhs - regions[2][2]); + var bRhs = regions[2][1] + (regionRhs - regions[2][3]); + result.push([-1, + aLhs, aRhs - aLhs, + regionLhs, regionRhs - regionLhs, + bLhs, bRhs - bLhs]); } - } else { - pushOk(files[side].slice(x[1], x[1] + x[2])); + commonOffset = regionRhs; } - } - flushOk(); - return result; -} + copyCommon(o.length); + return result; + } -function actionMergeRemoteChanges(id, localGraph, remoteGraph, formatUser) { - var _option = 'safe'; // 'safe', 'force_local', 'force_remote' - var _conflicts = []; + // Applies the output of diff3MergeIndices to actually + // construct the merged file; the returned result alternates + // between 'ok' and 'conflict' blocks. + function diff3Merge(a, o, b, excludeFalseConflicts) { + var result = []; + var files = [a, o, b]; + var indices = diff3MergeIndices(a, o, b); - function user(d) { - return isFunction(formatUser) ? formatUser(d) : d; + var okLines = []; + function flushOk() { + if (okLines.length) { + result.push({ok: okLines}); + } + okLines = []; + } + function pushOk(xs) { + for (var j = 0; j < xs.length; j++) { + okLines.push(xs[j]); + } } - - function mergeLocation(remote, target) { - function pointEqual(a, b) { - var epsilon = 1e-6; - return (Math.abs(a[0] - b[0]) < epsilon) && (Math.abs(a[1] - b[1]) < epsilon); + function isTrueConflict(rec) { + if (rec[2] !== rec[6]) return true; + var aoff = rec[1]; + var boff = rec[5]; + for (var j = 0; j < rec[2]; j++) { + if (a[j + aoff] !== b[j + boff]) { + return true; } + } + return false; + } - if (_option === 'force_local' || pointEqual(target.loc, remote.loc)) { - return target; - } - if (_option === 'force_remote') { - return target.update({loc: remote.loc}); + for (var i = 0; i < indices.length; i++) { + var x = indices[i]; + var side = x[0]; + if (side === -1) { + if (excludeFalseConflicts && !isTrueConflict(x)) { + pushOk(files[0].slice(x[1], x[1] + x[2])); + } else { + flushOk(); + result.push({ + conflict: { + a: a.slice(x[1], x[1] + x[2]), + aIndex: x[1], + o: o.slice(x[3], x[3] + x[4]), + oIndex: x[3], + b: b.slice(x[5], x[5] + x[6]), + bIndex: x[5] + } + }); } - - _conflicts.push(t('merge_remote_changes.conflict.location', { user: user(remote.user) })); - return target; + } else { + pushOk(files[side].slice(x[1], x[1] + x[2])); + } } + flushOk(); + return result; + } - function mergeNodes(base, remote, target) { - if (_option === 'force_local' || isEqual(target.nodes, remote.nodes)) { - return target; - } - if (_option === 'force_remote') { - return target.update({nodes: remote.nodes}); - } + function actionMergeRemoteChanges(id, localGraph, remoteGraph, formatUser) { + var _option = 'safe'; // 'safe', 'force_local', 'force_remote' + var _conflicts = []; - var ccount = _conflicts.length; - var o = base.nodes || []; - var a = target.nodes || []; - var b = remote.nodes || []; - var nodes = []; - var hunks = diff3Merge(a, o, b, true); - - for (var i = 0; i < hunks.length; i++) { - var hunk = hunks[i]; - if (hunk.ok) { - nodes.push.apply(nodes, hunk.ok); - } else { - // for all conflicts, we can assume c.a !== c.b - // because `diff3Merge` called with `true` option to exclude false conflicts.. - var c = hunk.conflict; - if (isEqual(c.o, c.a)) { // only changed remotely - nodes.push.apply(nodes, c.b); - } else if (isEqual(c.o, c.b)) { // only changed locally - nodes.push.apply(nodes, c.a); - } else { // changed both locally and remotely - _conflicts.push(t('merge_remote_changes.conflict.nodelist', { user: user(remote.user) })); - break; - } - } - } - return (_conflicts.length === ccount) ? target.update({nodes: nodes}) : target; - } + function user(d) { + return isFunction(formatUser) ? formatUser(d) : d; + } - function mergeChildren(targetWay, children, updates, graph) { - function isUsed(node, targetWay) { - var parentWays = map$3(graph.parentWays(node), 'id'); - return node.hasInterestingTags() || - without(parentWays, targetWay.id).length > 0 || - graph.parentRelations(node).length > 0; - } + function mergeLocation(remote, target) { + function pointEqual(a, b) { + var epsilon = 1e-6; + return (Math.abs(a[0] - b[0]) < epsilon) && (Math.abs(a[1] - b[1]) < epsilon); + } - var ccount = _conflicts.length; + if (_option === 'force_local' || pointEqual(target.loc, remote.loc)) { + return target; + } + if (_option === 'force_remote') { + return target.update({loc: remote.loc}); + } - for (var i = 0; i < children.length; i++) { - var id = children[i]; - var node = graph.hasEntity(id); + _conflicts.push(t('merge_remote_changes.conflict.location', { user: user(remote.user) })); + return target; + } - // remove unused childNodes.. - if (targetWay.nodes.indexOf(id) === -1) { - if (node && !isUsed(node, targetWay)) { - updates.removeIds.push(id); - } - continue; - } - // restore used childNodes.. - var local = localGraph.hasEntity(id); - var remote = remoteGraph.hasEntity(id); - var target; - - if (_option === 'force_remote' && remote && remote.visible) { - updates.replacements.push(remote); - - } else if (_option === 'force_local' && local) { - target = osmEntity$$1(local); - if (remote) { - target = target.update({ version: remote.version }); - } - updates.replacements.push(target); - - } else if (_option === 'safe' && local && remote && local.version !== remote.version) { - target = osmEntity$$1(local, { version: remote.version }); - if (remote.visible) { - target = mergeLocation(remote, target); - } else { - _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) })); - } - - if (_conflicts.length !== ccount) break; - updates.replacements.push(target); - } - } + function mergeNodes(base, remote, target) { + if (_option === 'force_local' || isEqual(target.nodes, remote.nodes)) { + return target; + } + if (_option === 'force_remote') { + return target.update({nodes: remote.nodes}); + } - return targetWay; - } + var ccount = _conflicts.length; + var o = base.nodes || []; + var a = target.nodes || []; + var b = remote.nodes || []; + var nodes = []; + var hunks = diff3Merge(a, o, b, true); + + for (var i = 0; i < hunks.length; i++) { + var hunk = hunks[i]; + if (hunk.ok) { + nodes.push.apply(nodes, hunk.ok); + } else { + // for all conflicts, we can assume c.a !== c.b + // because `diff3Merge` called with `true` option to exclude false conflicts.. + var c = hunk.conflict; + if (isEqual(c.o, c.a)) { // only changed remotely + nodes.push.apply(nodes, c.b); + } else if (isEqual(c.o, c.b)) { // only changed locally + nodes.push.apply(nodes, c.a); + } else { // changed both locally and remotely + _conflicts.push(t('merge_remote_changes.conflict.nodelist', { user: user(remote.user) })); + break; + } + } + } + return (_conflicts.length === ccount) ? target.update({nodes: nodes}) : target; + } - function updateChildren(updates, graph) { - for (var i = 0; i < updates.replacements.length; i++) { - graph = graph.replace(updates.replacements[i]); - } - if (updates.removeIds.length) { - graph = actionDeleteMultiple(updates.removeIds)(graph); - } - return graph; - } + function mergeChildren(targetWay, children, updates, graph) { + function isUsed(node, targetWay) { + var parentWays = map$3(graph.parentWays(node), 'id'); + return node.hasInterestingTags() || + without(parentWays, targetWay.id).length > 0 || + graph.parentRelations(node).length > 0; + } - function mergeMembers(remote, target) { - if (_option === 'force_local' || isEqual(target.members, remote.members)) { - return target; - } - if (_option === 'force_remote') { - return target.update({members: remote.members}); - } + var ccount = _conflicts.length; + + for (var i = 0; i < children.length; i++) { + var id = children[i]; + var node = graph.hasEntity(id); + + // remove unused childNodes.. + if (targetWay.nodes.indexOf(id) === -1) { + if (node && !isUsed(node, targetWay)) { + updates.removeIds.push(id); + } + continue; + } + + // restore used childNodes.. + var local = localGraph.hasEntity(id); + var remote = remoteGraph.hasEntity(id); + var target; + + if (_option === 'force_remote' && remote && remote.visible) { + updates.replacements.push(remote); + + } else if (_option === 'force_local' && local) { + target = osmEntity$$1(local); + if (remote) { + target = target.update({ version: remote.version }); + } + updates.replacements.push(target); + + } else if (_option === 'safe' && local && remote && local.version !== remote.version) { + target = osmEntity$$1(local, { version: remote.version }); + if (remote.visible) { + target = mergeLocation(remote, target); + } else { + _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) })); + } + + if (_conflicts.length !== ccount) break; + updates.replacements.push(target); + } + } - _conflicts.push(t('merge_remote_changes.conflict.memberlist', { user: user(remote.user) })); - return target; - } + return targetWay; + } - function mergeTags(base, remote, target) { - function ignoreKey(k) { - return dataDiscarded[k]; - } + function updateChildren(updates, graph) { + for (var i = 0; i < updates.replacements.length; i++) { + graph = graph.replace(updates.replacements[i]); + } + if (updates.removeIds.length) { + graph = actionDeleteMultiple(updates.removeIds)(graph); + } + return graph; + } - if (_option === 'force_local' || isEqual(target.tags, remote.tags)) { - return target; - } - if (_option === 'force_remote') { - return target.update({tags: remote.tags}); - } - var ccount = _conflicts.length; - var o = base.tags || {}; - var a = target.tags || {}; - var b = remote.tags || {}; - var keys = reject(union(keys$1(o), keys$1(a), keys$1(b)), ignoreKey); - var tags = clone(a); - var changed = false; - - for (var i = 0; i < keys.length; i++) { - var k = keys[i]; - - if (o[k] !== b[k] && a[k] !== b[k]) { // changed remotely.. - if (o[k] !== a[k]) { // changed locally.. - _conflicts.push(t('merge_remote_changes.conflict.tags', - { tag: k, local: a[k], remote: b[k], user: user(remote.user) })); - - } else { // unchanged locally, accept remote change.. - if (b.hasOwnProperty(k)) { - tags[k] = b[k]; - } else { - delete tags[k]; - } - changed = true; - } - } - } + function mergeMembers(remote, target) { + if (_option === 'force_local' || isEqual(target.members, remote.members)) { + return target; + } + if (_option === 'force_remote') { + return target.update({members: remote.members}); + } - return (changed && _conflicts.length === ccount) ? target.update({tags: tags}) : target; - } + _conflicts.push(t('merge_remote_changes.conflict.memberlist', { user: user(remote.user) })); + return target; + } - // `graph.base()` is the common ancestor of the two graphs. - // `localGraph` contains user's edits up to saving - // `remoteGraph` contains remote edits to modified nodes - // `graph` must be a descendent of `localGraph` and may include - // some conflict resolution actions performed on it. - // - // --- ... --- `localGraph` -- ... -- `graph` - // / - // `graph.base()` --- ... --- `remoteGraph` - // - var action = function(graph) { - var updates = { replacements: [], removeIds: [] }; - var base = graph.base().entities[id]; - var local = localGraph.entity(id); - var remote = remoteGraph.entity(id); - var target = osmEntity$$1(local, { version: remote.version }); - - // delete/undelete - if (!remote.visible) { - if (_option === 'force_remote') { - return actionDeleteMultiple([id])(graph); - - } else if (_option === 'force_local') { - if (target.type === 'way') { - target = mergeChildren(target, uniq(local.nodes), updates, graph); - graph = updateChildren(updates, graph); - } - return graph.replace(target); + function mergeTags(base, remote, target) { + function ignoreKey(k) { + return dataDiscarded[k]; + } - } else { - _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) })); - return graph; // do nothing - } - } + if (_option === 'force_local' || isEqual(target.tags, remote.tags)) { + return target; + } + if (_option === 'force_remote') { + return target.update({tags: remote.tags}); + } + + var ccount = _conflicts.length; + var o = base.tags || {}; + var a = target.tags || {}; + var b = remote.tags || {}; + var keys = reject(union(keys$1(o), keys$1(a), keys$1(b)), ignoreKey); + var tags = clone(a); + var changed = false; + + for (var i = 0; i < keys.length; i++) { + var k = keys[i]; + + if (o[k] !== b[k] && a[k] !== b[k]) { // changed remotely.. + if (o[k] !== a[k]) { // changed locally.. + _conflicts.push(t('merge_remote_changes.conflict.tags', + { tag: k, local: a[k], remote: b[k], user: user(remote.user) })); + + } else { // unchanged locally, accept remote change.. + if (b.hasOwnProperty(k)) { + tags[k] = b[k]; + } else { + delete tags[k]; + } + changed = true; + } + } + } - // merge - if (target.type === 'node') { - target = mergeLocation(remote, target); + return (changed && _conflicts.length === ccount) ? target.update({tags: tags}) : target; + } - } else if (target.type === 'way') { - // pull in any child nodes that may not be present locally.. - graph.rebase(remoteGraph.childNodes(remote), [graph], false); - target = mergeNodes(base, remote, target); - target = mergeChildren(target, union(local.nodes, remote.nodes), updates, graph); - } else if (target.type === 'relation') { - target = mergeMembers(remote, target); - } + // `graph.base()` is the common ancestor of the two graphs. + // `localGraph` contains user's edits up to saving + // `remoteGraph` contains remote edits to modified nodes + // `graph` must be a descendent of `localGraph` and may include + // some conflict resolution actions performed on it. + // + // --- ... --- `localGraph` -- ... -- `graph` + // / + // `graph.base()` --- ... --- `remoteGraph` + // + var action = function(graph) { + var updates = { replacements: [], removeIds: [] }; + var base = graph.base().entities[id]; + var local = localGraph.entity(id); + var remote = remoteGraph.entity(id); + var target = osmEntity$$1(local, { version: remote.version }); + + // delete/undelete + if (!remote.visible) { + if (_option === 'force_remote') { + return actionDeleteMultiple([id])(graph); + + } else if (_option === 'force_local') { + if (target.type === 'way') { + target = mergeChildren(target, uniq(local.nodes), updates, graph); + graph = updateChildren(updates, graph); + } + return graph.replace(target); + + } else { + _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) })); + return graph; // do nothing + } + } - target = mergeTags(base, remote, target); + // merge + if (target.type === 'node') { + target = mergeLocation(remote, target); - if (!_conflicts.length) { - graph = updateChildren(updates, graph).replace(target); - } + } else if (target.type === 'way') { + // pull in any child nodes that may not be present locally.. + graph.rebase(remoteGraph.childNodes(remote), [graph], false); + target = mergeNodes(base, remote, target); + target = mergeChildren(target, union(local.nodes, remote.nodes), updates, graph); - return graph; - }; + } else if (target.type === 'relation') { + target = mergeMembers(remote, target); + } + target = mergeTags(base, remote, target); - action.withOption = function(opt) { - _option = opt; - return action; - }; + if (!_conflicts.length) { + graph = updateChildren(updates, graph).replace(target); + } + return graph; + }; - action.conflicts = function() { - return _conflicts; - }; + action.withOption = function(opt) { + _option = opt; + return action; + }; - return action; -} -// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as -function actionMove(moveIds, tryDelta, projection, cache) { - var _delta = tryDelta; + action.conflicts = function() { + return _conflicts; + }; - function setupCache(graph) { - function canMove(nodeId) { - // Allow movement of any node that is in the selectedIDs list.. - if (moveIds.indexOf(nodeId) !== -1) return true; - // Allow movement of a vertex where 2 ways meet.. - var parents = map$3(graph.parentWays(graph.entity(nodeId)), 'id'); - if (parents.length < 3) return true; + return action; + } - // Restrict movement of a vertex where >2 ways meet, unless all parentWays are moving too.. - var parentsMoving = every(parents, function(id) { return cache.moving[id]; }); - if (!parentsMoving) delete cache.moving[nodeId]; + // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java + // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as + function actionMove(moveIds, tryDelta, projection, cache) { + var _delta = tryDelta; - return parentsMoving; - } + function setupCache(graph) { + function canMove(nodeId) { + // Allow movement of any node that is in the selectedIDs list.. + if (moveIds.indexOf(nodeId) !== -1) return true; - function cacheEntities(ids) { - for (var i = 0; i < ids.length; i++) { - var id = ids[i]; - if (cache.moving[id]) continue; - cache.moving[id] = true; - - var entity = graph.hasEntity(id); - if (!entity) continue; - - if (entity.type === 'node') { - cache.nodes.push(id); - cache.startLoc[id] = entity.loc; - } else if (entity.type === 'way') { - cache.ways.push(id); - cacheEntities(entity.nodes); - } else { - cacheEntities(entity.members.map(function(member) { - return member.id; - })); - } - } - } + // Allow movement of a vertex where 2 ways meet.. + var parents = map$3(graph.parentWays(graph.entity(nodeId)), 'id'); + if (parents.length < 3) return true; - function cacheIntersections(ids) { - function isEndpoint(way, id) { - return !way.isClosed() && !!way.affix(id); - } + // Restrict movement of a vertex where >2 ways meet, unless all parentWays are moving too.. + var parentsMoving = every(parents, function(id) { return cache.moving[id]; }); + if (!parentsMoving) delete cache.moving[nodeId]; - for (var i = 0; i < ids.length; i++) { - var id = ids[i]; - - // consider only intersections with 1 moved and 1 unmoved way. - var childNodes = graph.childNodes(graph.entity(id)); - for (var j = 0; j < childNodes.length; j++) { - var node = childNodes[j]; - var parents = graph.parentWays(node); - if (parents.length !== 2) continue; - - var moved = graph.entity(id); - var unmoved = null; - for (var k = 0; k < parents.length; k++) { - var way = parents[k]; - if (!cache.moving[way.id]) { - unmoved = way; - break; - } - } - if (!unmoved) continue; - - // exclude ways that are overly connected.. - if (intersection(moved.nodes, unmoved.nodes).length > 2) continue; - if (moved.isArea() || unmoved.isArea()) continue; - - cache.intersections.push({ - nodeId: node.id, - movedId: moved.id, - unmovedId: unmoved.id, - movedIsEP: isEndpoint(moved, node.id), - unmovedIsEP: isEndpoint(unmoved, node.id) - }); - } - } - } + return parentsMoving; + } + function cacheEntities(ids) { + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + if (cache.moving[id]) continue; + cache.moving[id] = true; + + var entity = graph.hasEntity(id); + if (!entity) continue; + + if (entity.type === 'node') { + cache.nodes.push(id); + cache.startLoc[id] = entity.loc; + } else if (entity.type === 'way') { + cache.ways.push(id); + cacheEntities(entity.nodes); + } else { + cacheEntities(entity.members.map(function(member) { + return member.id; + })); + } + } + } - if (!cache) { - cache = {}; - } - if (!cache.ok) { - cache.moving = {}; - cache.intersections = []; - cache.replacedVertex = {}; - cache.startLoc = {}; - cache.nodes = []; - cache.ways = []; - - cacheEntities(moveIds); - cacheIntersections(cache.ways); - cache.nodes = filter(cache.nodes, canMove); - - cache.ok = true; - } - } + function cacheIntersections(ids) { + function isEndpoint(way, id) { + return !way.isClosed() && !!way.affix(id); + } + + for (var i = 0; i < ids.length; i++) { + var id = ids[i]; + + // consider only intersections with 1 moved and 1 unmoved way. + var childNodes = graph.childNodes(graph.entity(id)); + for (var j = 0; j < childNodes.length; j++) { + var node = childNodes[j]; + var parents = graph.parentWays(node); + if (parents.length !== 2) continue; + + var moved = graph.entity(id); + var unmoved = null; + for (var k = 0; k < parents.length; k++) { + var way = parents[k]; + if (!cache.moving[way.id]) { + unmoved = way; + break; + } + } + if (!unmoved) continue; + + // exclude ways that are overly connected.. + if (intersection(moved.nodes, unmoved.nodes).length > 2) continue; + if (moved.isArea() || unmoved.isArea()) continue; + + cache.intersections.push({ + nodeId: node.id, + movedId: moved.id, + unmovedId: unmoved.id, + movedIsEP: isEndpoint(moved, node.id), + unmovedIsEP: isEndpoint(unmoved, node.id) + }); + } + } + } - // Place a vertex where the moved vertex used to be, to preserve way shape.. - // - // Start: - // b ---- e - // / \ - // / \ - // / \ - // a c - // - // * node '*' added to preserve shape - // / \ - // / b ---- e way `b,e` moved here: - // / \ - // a c - // - // - function replaceMovedVertex(nodeId, wayId, graph, delta) { - var way = graph.entity(wayId); - var moved = graph.entity(nodeId); - var movedIndex = way.nodes.indexOf(nodeId); - var len, prevIndex, nextIndex; - - if (way.isClosed()) { - len = way.nodes.length - 1; - prevIndex = (movedIndex + len - 1) % len; - nextIndex = (movedIndex + len + 1) % len; - } else { - len = way.nodes.length; - prevIndex = movedIndex - 1; - nextIndex = movedIndex + 1; - } + if (!cache) { + cache = {}; + } + if (!cache.ok) { + cache.moving = {}; + cache.intersections = []; + cache.replacedVertex = {}; + cache.startLoc = {}; + cache.nodes = []; + cache.ways = []; + + cacheEntities(moveIds); + cacheIntersections(cache.ways); + cache.nodes = filter(cache.nodes, canMove); + + cache.ok = true; + } + } - var prev = graph.hasEntity(way.nodes[prevIndex]); - var next = graph.hasEntity(way.nodes[nextIndex]); - // Don't add orig vertex at endpoint.. - if (!prev || !next) return graph; + // Place a vertex where the moved vertex used to be, to preserve way shape.. + // + // Start: + // b ---- e + // / \ + // / \ + // / \ + // a c + // + // * node '*' added to preserve shape + // / \ + // / b ---- e way `b,e` moved here: + // / \ + // a c + // + // + function replaceMovedVertex(nodeId, wayId, graph, delta) { + var way = graph.entity(wayId); + var moved = graph.entity(nodeId); + var movedIndex = way.nodes.indexOf(nodeId); + var len, prevIndex, nextIndex; + + if (way.isClosed()) { + len = way.nodes.length - 1; + prevIndex = (movedIndex + len - 1) % len; + nextIndex = (movedIndex + len + 1) % len; + } else { + len = way.nodes.length; + prevIndex = movedIndex - 1; + nextIndex = movedIndex + 1; + } - var key = wayId + '_' + nodeId; - var orig = cache.replacedVertex[key]; - if (!orig) { - orig = osmNode(); - cache.replacedVertex[key] = orig; - cache.startLoc[orig.id] = cache.startLoc[nodeId]; - } + var prev = graph.hasEntity(way.nodes[prevIndex]); + var next = graph.hasEntity(way.nodes[nextIndex]); - var start, end; - if (delta) { - start = projection(cache.startLoc[nodeId]); - end = projection.invert(geoVecAdd(start, delta)); - } else { - end = cache.startLoc[nodeId]; - } - orig = orig.move(end); + // Don't add orig vertex at endpoint.. + if (!prev || !next) return graph; - var angle = Math.abs(geoAngle(orig, prev, projection) - - geoAngle(orig, next, projection)) * 180 / Math.PI; + var key = wayId + '_' + nodeId; + var orig = cache.replacedVertex[key]; + if (!orig) { + orig = osmNode(); + cache.replacedVertex[key] = orig; + cache.startLoc[orig.id] = cache.startLoc[nodeId]; + } - // Don't add orig vertex if it would just make a straight line.. - if (angle > 175 && angle < 185) return graph; + var start, end; + if (delta) { + start = projection(cache.startLoc[nodeId]); + end = projection.invert(geoVecAdd(start, delta)); + } else { + end = cache.startLoc[nodeId]; + } + orig = orig.move(end); - // moving forward or backward along way? - var p1 = [prev.loc, orig.loc, moved.loc, next.loc].map(projection); - var p2 = [prev.loc, moved.loc, orig.loc, next.loc].map(projection); - var d1 = geoPathLength(p1); - var d2 = geoPathLength(p2); - var insertAt = (d1 <= d2) ? movedIndex : nextIndex; + var angle = Math.abs(geoAngle(orig, prev, projection) - + geoAngle(orig, next, projection)) * 180 / Math.PI; - // moving around closed loop? - if (way.isClosed() && insertAt === 0) insertAt = len; + // Don't add orig vertex if it would just make a straight line.. + if (angle > 175 && angle < 185) return graph; - way = way.addNode(orig.id, insertAt); - return graph.replace(orig).replace(way); - } + // moving forward or backward along way? + var p1 = [prev.loc, orig.loc, moved.loc, next.loc].map(projection); + var p2 = [prev.loc, moved.loc, orig.loc, next.loc].map(projection); + var d1 = geoPathLength(p1); + var d2 = geoPathLength(p2); + var insertAt = (d1 <= d2) ? movedIndex : nextIndex; + // moving around closed loop? + if (way.isClosed() && insertAt === 0) insertAt = len; - // Remove duplicate vertex that might have been added by - // replaceMovedVertex. This is done after the unzorro checks. - function removeDuplicateVertices(wayId, graph) { - var way = graph.entity(wayId); - var epsilon = 1e-6; - var prev, curr; + way = way.addNode(orig.id, insertAt); + return graph.replace(orig).replace(way); + } - function isInteresting(node, graph) { - return graph.parentWays(node).length > 1 || - graph.parentRelations(node).length || - node.hasInterestingTags(); - } - for (var i = 0; i < way.nodes.length; i++) { - curr = graph.entity(way.nodes[i]); - - if (prev && curr && geoVecEqual(prev.loc, curr.loc, epsilon)) { - if (!isInteresting(prev, graph)) { - way = way.removeNode(prev.id); - graph = graph.replace(way).remove(prev); - } else if (!isInteresting(curr, graph)) { - way = way.removeNode(curr.id); - graph = graph.replace(way).remove(curr); - } - } + // Remove duplicate vertex that might have been added by + // replaceMovedVertex. This is done after the unzorro checks. + function removeDuplicateVertices(wayId, graph) { + var way = graph.entity(wayId); + var epsilon = 1e-6; + var prev, curr; - prev = curr; - } + function isInteresting(node, graph) { + return graph.parentWays(node).length > 1 || + graph.parentRelations(node).length || + node.hasInterestingTags(); + } - return graph; - } + for (var i = 0; i < way.nodes.length; i++) { + curr = graph.entity(way.nodes[i]); + if (prev && curr && geoVecEqual(prev.loc, curr.loc, epsilon)) { + if (!isInteresting(prev, graph)) { + way = way.removeNode(prev.id); + graph = graph.replace(way).remove(prev); + } else if (!isInteresting(curr, graph)) { + way = way.removeNode(curr.id); + graph = graph.replace(way).remove(curr); + } + } - // Reorder nodes around intersections that have moved.. - // - // Start: way1.nodes: b,e (moving) - // a - b - c ----- d way2.nodes: a,b,c,d (static) - // | vertex: b - // e isEP1: true, isEP2, false - // - // way1 `b,e` moved here: - // a ----- c = b - d - // | - // e - // - // reorder nodes way1.nodes: b,e - // a ----- c - b - d way2.nodes: a,c,b,d - // | - // e - // - function unZorroIntersection(intersection$$1, graph) { - var vertex = graph.entity(intersection$$1.nodeId); - var way1 = graph.entity(intersection$$1.movedId); - var way2 = graph.entity(intersection$$1.unmovedId); - var isEP1 = intersection$$1.movedIsEP; - var isEP2 = intersection$$1.unmovedIsEP; - - // don't move the vertex if it is the endpoint of both ways. - if (isEP1 && isEP2) return graph; - - var nodes1 = without(graph.childNodes(way1), vertex); - var nodes2 = without(graph.childNodes(way2), vertex); - - if (way1.isClosed() && way1.first() === vertex.id) nodes1.push(nodes1[0]); - if (way2.isClosed() && way2.first() === vertex.id) nodes2.push(nodes2[0]); - - var edge1 = !isEP1 && geoChooseEdge(nodes1, projection(vertex.loc), projection); - var edge2 = !isEP2 && geoChooseEdge(nodes2, projection(vertex.loc), projection); - var loc; - - // snap vertex to nearest edge (or some point between them).. - if (!isEP1 && !isEP2) { - var epsilon = 1e-6, maxIter = 10; - for (var i = 0; i < maxIter; i++) { - loc = geoVecInterp(edge1.loc, edge2.loc, 0.5); - edge1 = geoChooseEdge(nodes1, projection(loc), projection); - edge2 = geoChooseEdge(nodes2, projection(loc), projection); - if (Math.abs(edge1.distance - edge2.distance) < epsilon) break; - } - } else if (!isEP1) { - loc = edge1.loc; - } else { - loc = edge2.loc; - } + prev = curr; + } - graph = graph.replace(vertex.move(loc)); + return graph; + } - // if zorro happened, reorder nodes.. - if (!isEP1 && edge1.index !== way1.nodes.indexOf(vertex.id)) { - way1 = way1.removeNode(vertex.id).addNode(vertex.id, edge1.index); - graph = graph.replace(way1); - } - if (!isEP2 && edge2.index !== way2.nodes.indexOf(vertex.id)) { - way2 = way2.removeNode(vertex.id).addNode(vertex.id, edge2.index); - graph = graph.replace(way2); - } - return graph; - } + // Reorder nodes around intersections that have moved.. + // + // Start: way1.nodes: b,e (moving) + // a - b - c ----- d way2.nodes: a,b,c,d (static) + // | vertex: b + // e isEP1: true, isEP2, false + // + // way1 `b,e` moved here: + // a ----- c = b - d + // | + // e + // + // reorder nodes way1.nodes: b,e + // a ----- c - b - d way2.nodes: a,c,b,d + // | + // e + // + function unZorroIntersection(intersection$$1, graph) { + var vertex = graph.entity(intersection$$1.nodeId); + var way1 = graph.entity(intersection$$1.movedId); + var way2 = graph.entity(intersection$$1.unmovedId); + var isEP1 = intersection$$1.movedIsEP; + var isEP2 = intersection$$1.unmovedIsEP; + + // don't move the vertex if it is the endpoint of both ways. + if (isEP1 && isEP2) return graph; + + var nodes1 = without(graph.childNodes(way1), vertex); + var nodes2 = without(graph.childNodes(way2), vertex); + + if (way1.isClosed() && way1.first() === vertex.id) nodes1.push(nodes1[0]); + if (way2.isClosed() && way2.first() === vertex.id) nodes2.push(nodes2[0]); + + var edge1 = !isEP1 && geoChooseEdge(nodes1, projection(vertex.loc), projection); + var edge2 = !isEP2 && geoChooseEdge(nodes2, projection(vertex.loc), projection); + var loc; + + // snap vertex to nearest edge (or some point between them).. + if (!isEP1 && !isEP2) { + var epsilon = 1e-6, maxIter = 10; + for (var i = 0; i < maxIter; i++) { + loc = geoVecInterp(edge1.loc, edge2.loc, 0.5); + edge1 = geoChooseEdge(nodes1, projection(loc), projection); + edge2 = geoChooseEdge(nodes2, projection(loc), projection); + if (Math.abs(edge1.distance - edge2.distance) < epsilon) break; + } + } else if (!isEP1) { + loc = edge1.loc; + } else { + loc = edge2.loc; + } + graph = graph.replace(vertex.move(loc)); - function cleanupIntersections(graph) { - for (var i = 0; i < cache.intersections.length; i++) { - var obj = cache.intersections[i]; - graph = replaceMovedVertex(obj.nodeId, obj.movedId, graph, _delta); - graph = replaceMovedVertex(obj.nodeId, obj.unmovedId, graph, null); - graph = unZorroIntersection(obj, graph); - graph = removeDuplicateVertices(obj.movedId, graph); - graph = removeDuplicateVertices(obj.unmovedId, graph); - } + // if zorro happened, reorder nodes.. + if (!isEP1 && edge1.index !== way1.nodes.indexOf(vertex.id)) { + way1 = way1.removeNode(vertex.id).addNode(vertex.id, edge1.index); + graph = graph.replace(way1); + } + if (!isEP2 && edge2.index !== way2.nodes.indexOf(vertex.id)) { + way2 = way2.removeNode(vertex.id).addNode(vertex.id, edge2.index); + graph = graph.replace(way2); + } - return graph; - } + return graph; + } - // check if moving way endpoint can cross an unmoved way, if so limit delta.. - function limitDelta(graph) { - function moveNode(loc) { - return geoVecAdd(projection(loc), _delta); - } + function cleanupIntersections(graph) { + for (var i = 0; i < cache.intersections.length; i++) { + var obj = cache.intersections[i]; + graph = replaceMovedVertex(obj.nodeId, obj.movedId, graph, _delta); + graph = replaceMovedVertex(obj.nodeId, obj.unmovedId, graph, null); + graph = unZorroIntersection(obj, graph); + graph = removeDuplicateVertices(obj.movedId, graph); + graph = removeDuplicateVertices(obj.unmovedId, graph); + } - for (var i = 0; i < cache.intersections.length; i++) { - var obj = cache.intersections[i]; - - // Don't limit movement if this is vertex joins 2 endpoints.. - if (obj.movedIsEP && obj.unmovedIsEP) continue; - // Don't limit movement if this vertex is not an endpoint anyway.. - if (!obj.movedIsEP) continue; - - var node = graph.entity(obj.nodeId); - var start = projection(node.loc); - var end = geoVecAdd(start, _delta); - var movedNodes = graph.childNodes(graph.entity(obj.movedId)); - var movedPath = map$3(map$3(movedNodes, 'loc'), moveNode); - var unmovedNodes = graph.childNodes(graph.entity(obj.unmovedId)); - var unmovedPath = map$3(map$3(unmovedNodes, 'loc'), projection); - var hits = geoPathIntersections(movedPath, unmovedPath); - - for (var j = 0; i < hits.length; i++) { - if (isEqual(hits[j], end)) continue; - var edge = geoChooseEdge(unmovedNodes, end, projection); - _delta = geoVecSubtract(projection(edge.loc), start); - } - } - } + return graph; + } - var action = function(graph) { - if (_delta[0] === 0 && _delta[1] === 0) return graph; + // check if moving way endpoint can cross an unmoved way, if so limit delta.. + function limitDelta(graph) { + function moveNode(loc) { + return geoVecAdd(projection(loc), _delta); + } - setupCache(graph); + for (var i = 0; i < cache.intersections.length; i++) { + var obj = cache.intersections[i]; + + // Don't limit movement if this is vertex joins 2 endpoints.. + if (obj.movedIsEP && obj.unmovedIsEP) continue; + // Don't limit movement if this vertex is not an endpoint anyway.. + if (!obj.movedIsEP) continue; + + var node = graph.entity(obj.nodeId); + var start = projection(node.loc); + var end = geoVecAdd(start, _delta); + var movedNodes = graph.childNodes(graph.entity(obj.movedId)); + var movedPath = map$3(map$3(movedNodes, 'loc'), moveNode); + var unmovedNodes = graph.childNodes(graph.entity(obj.unmovedId)); + var unmovedPath = map$3(map$3(unmovedNodes, 'loc'), projection); + var hits = geoPathIntersections(movedPath, unmovedPath); + + for (var j = 0; i < hits.length; i++) { + if (isEqual(hits[j], end)) continue; + var edge = geoChooseEdge(unmovedNodes, end, projection); + _delta = geoVecSubtract(projection(edge.loc), start); + } + } + } - if (cache.intersections.length) { - limitDelta(graph); - } - for (var i = 0; i < cache.nodes.length; i++) { - var node = graph.entity(cache.nodes[i]); - var start = projection(node.loc); - var end = geoVecAdd(start, _delta); - graph = graph.replace(node.move(projection.invert(end))); - } + var action = function(graph) { + if (_delta[0] === 0 && _delta[1] === 0) return graph; - if (cache.intersections.length) { - graph = cleanupIntersections(graph); - } + setupCache(graph); - return graph; - }; + if (cache.intersections.length) { + limitDelta(graph); + } + for (var i = 0; i < cache.nodes.length; i++) { + var node = graph.entity(cache.nodes[i]); + var start = projection(node.loc); + var end = geoVecAdd(start, _delta); + graph = graph.replace(node.move(projection.invert(end))); + } - action.delta = function() { - return _delta; - }; + if (cache.intersections.length) { + graph = cleanupIntersections(graph); + } + return graph; + }; - return action; -} -function actionMoveNode(nodeID, toLoc) { + action.delta = function() { + return _delta; + }; - var action = function(graph, t) { - if (t === null || !isFinite(t)) t = 1; - t = Math.min(Math.max(+t, 0), 1); - var node = graph.entity(nodeID); - return graph.replace( - node.move(geoVecInterp(node.loc, toLoc, t)) - ); - }; + return action; + } - action.transitionable = true; + function actionMoveNode(nodeID, toLoc) { - return action; -} + var action = function(graph, t) { + if (t === null || !isFinite(t)) t = 1; + t = Math.min(Math.max(+t, 0), 1); -function actionNoop() { - return function(graph) { - return graph; - }; -} - -/* - * Based on https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/potlatch2/tools/Quadrilateralise.as - */ -function actionOrthogonalize(wayId, projection) { - var threshold = 12, // degrees within right or straight to alter - lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180), - upperThreshold = Math.cos(threshold * Math.PI / 180); - - - var action = function(graph, t) { - if (t === null || !isFinite(t)) t = 1; - t = Math.min(Math.max(+t, 0), 1); - - var way = graph.entity(wayId), - nodes = graph.childNodes(way), - points = uniq(nodes).map(function(n) { return projection(n.loc); }), - corner = {i: 0, dotp: 1}, - epsilon = 1e-4, - node, loc, score, motions, i, j; - - if (points.length === 3) { // move only one vertex for right triangle - for (i = 0; i < 1000; i++) { - motions = points.map(calcMotion); - points[corner.i] = addPoints(points[corner.i], motions[corner.i]); - score = corner.dotp; - if (score < epsilon) { - break; - } - } + var node = graph.entity(nodeID); + return graph.replace( + node.move(geoVecInterp(node.loc, toLoc, t)) + ); + }; - node = graph.entity(nodes[corner.i].id); - loc = projection.invert(points[corner.i]); - graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t))); + action.transitionable = true; - } else { - var best, - originalPoints = clone(points); - score = Infinity; - - for (i = 0; i < 1000; i++) { - motions = points.map(calcMotion); - for (j = 0; j < motions.length; j++) { - points[j] = addPoints(points[j],motions[j]); - } - var newScore = squareness(points); - if (newScore < score) { - best = clone(points); - score = newScore; - } - if (score < epsilon) { - break; - } - } + return action; + } - points = best; + function actionNoop() { + return function(graph) { + return graph; + }; + } - for (i = 0; i < points.length; i++) { - // only move the points that actually moved - if (originalPoints[i][0] !== points[i][0] || originalPoints[i][1] !== points[i][1]) { - loc = projection.invert(points[i]); - node = graph.entity(nodes[i].id); - graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t))); - } - } + /* + * Based on https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/potlatch2/tools/Quadrilateralise.as + */ + function actionOrthogonalize(wayId, projection) { + var threshold = 12, // degrees within right or straight to alter + lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180), + upperThreshold = Math.cos(threshold * Math.PI / 180); + + + var action = function(graph, t) { + if (t === null || !isFinite(t)) t = 1; + t = Math.min(Math.max(+t, 0), 1); + + var way = graph.entity(wayId), + nodes = graph.childNodes(way), + points = uniq(nodes).map(function(n) { return projection(n.loc); }), + corner = {i: 0, dotp: 1}, + epsilon = 1e-4, + node, loc, score, motions, i, j; + + if (points.length === 3) { // move only one vertex for right triangle + for (i = 0; i < 1000; i++) { + motions = points.map(calcMotion); + points[corner.i] = addPoints(points[corner.i], motions[corner.i]); + score = corner.dotp; + if (score < epsilon) { + break; + } + } + + node = graph.entity(nodes[corner.i].id); + loc = projection.invert(points[corner.i]); + graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t))); - // remove empty nodes on straight sections - for (i = 0; t === 1 && i < points.length; i++) { - node = graph.entity(nodes[i].id); + } else { + var best, + originalPoints = clone(points); + score = Infinity; + + for (i = 0; i < 1000; i++) { + motions = points.map(calcMotion); + for (j = 0; j < motions.length; j++) { + points[j] = addPoints(points[j],motions[j]); + } + var newScore = squareness(points); + if (newScore < score) { + best = clone(points); + score = newScore; + } + if (score < epsilon) { + break; + } + } + + points = best; + + for (i = 0; i < points.length; i++) { + // only move the points that actually moved + if (originalPoints[i][0] !== points[i][0] || originalPoints[i][1] !== points[i][1]) { + loc = projection.invert(points[i]); + node = graph.entity(nodes[i].id); + graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t))); + } + } + + // remove empty nodes on straight sections + for (i = 0; t === 1 && i < points.length; i++) { + node = graph.entity(nodes[i].id); + + if (graph.parentWays(node).length > 1 || + graph.parentRelations(node).length || + node.hasInterestingTags()) { + continue; + } + + var dotp = normalizedDotProduct(i, points); + if (dotp < -1 + epsilon) { + graph = actionDeleteNode(node.id)(graph); + } + } + } - if (graph.parentWays(node).length > 1 || - graph.parentRelations(node).length || - node.hasInterestingTags()) { - continue; - } + return graph; - var dotp = normalizedDotProduct(i, points); - if (dotp < -1 + epsilon) { - graph = actionDeleteNode(node.id)(graph); - } - } - } - return graph; + function calcMotion(b, i, array) { + var a = array[(i - 1 + array.length) % array.length], + c = array[(i + 1) % array.length], + p = subtractPoints(a, b), + q = subtractPoints(c, b), + scale, dotp; + scale = 2 * Math.min(geoVecLength(p, [0, 0]), geoVecLength(q, [0, 0])); + p = normalizePoint(p, 1.0); + q = normalizePoint(q, 1.0); - function calcMotion(b, i, array) { - var a = array[(i - 1 + array.length) % array.length], - c = array[(i + 1) % array.length], - p = subtractPoints(a, b), - q = subtractPoints(c, b), - scale, dotp; + dotp = filterDotProduct(p[0] * q[0] + p[1] * q[1]); - scale = 2 * Math.min(geoVecLength(p, [0, 0]), geoVecLength(q, [0, 0])); - p = normalizePoint(p, 1.0); - q = normalizePoint(q, 1.0); + // nasty hack to deal with almost-straight segments (angle is closer to 180 than to 90/270). + if (array.length > 3) { + if (dotp < -0.707106781186547) { + dotp += 1.0; + } + } else if (dotp && Math.abs(dotp) < corner.dotp) { + corner.i = i; + corner.dotp = Math.abs(dotp); + } - dotp = filterDotProduct(p[0] * q[0] + p[1] * q[1]); + return normalizePoint(addPoints(p, q), 0.1 * dotp * scale); + } + }; - // nasty hack to deal with almost-straight segments (angle is closer to 180 than to 90/270). - if (array.length > 3) { - if (dotp < -0.707106781186547) { - dotp += 1.0; - } - } else if (dotp && Math.abs(dotp) < corner.dotp) { - corner.i = i; - corner.dotp = Math.abs(dotp); - } - return normalizePoint(addPoints(p, q), 0.1 * dotp * scale); - } - }; + function squareness(points) { + return points.reduce(function(sum, val, i, array) { + var dotp = normalizedDotProduct(i, array); + dotp = filterDotProduct(dotp); + return sum + 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1))); + }, 0); + } - function squareness(points) { - return points.reduce(function(sum, val, i, array) { - var dotp = normalizedDotProduct(i, array); - dotp = filterDotProduct(dotp); - return sum + 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1))); - }, 0); - } + function normalizedDotProduct(i, points) { + var a = points[(i - 1 + points.length) % points.length], + b = points[i], + c = points[(i + 1) % points.length], + p = subtractPoints(a, b), + q = subtractPoints(c, b); + p = normalizePoint(p, 1.0); + q = normalizePoint(q, 1.0); - function normalizedDotProduct(i, points) { - var a = points[(i - 1 + points.length) % points.length], - b = points[i], - c = points[(i + 1) % points.length], - p = subtractPoints(a, b), - q = subtractPoints(c, b); + return p[0] * q[0] + p[1] * q[1]; + } - p = normalizePoint(p, 1.0); - q = normalizePoint(q, 1.0); - return p[0] * q[0] + p[1] * q[1]; - } + function subtractPoints(a, b) { + return [a[0] - b[0], a[1] - b[1]]; + } - function subtractPoints(a, b) { - return [a[0] - b[0], a[1] - b[1]]; - } + function addPoints(a, b) { + return [a[0] + b[0], a[1] + b[1]]; + } - function addPoints(a, b) { - return [a[0] + b[0], a[1] + b[1]]; - } + function normalizePoint(point, scale) { + var vector = [0, 0]; + var length = Math.sqrt(point[0] * point[0] + point[1] * point[1]); + if (length !== 0) { + vector[0] = point[0] / length; + vector[1] = point[1] / length; + } + vector[0] *= scale; + vector[1] *= scale; - function normalizePoint(point, scale) { - var vector = [0, 0]; - var length = Math.sqrt(point[0] * point[0] + point[1] * point[1]); - if (length !== 0) { - vector[0] = point[0] / length; - vector[1] = point[1] / length; - } + return vector; + } - vector[0] *= scale; - vector[1] *= scale; - return vector; - } + function filterDotProduct(dotp) { + if (lowerThreshold > Math.abs(dotp) || Math.abs(dotp) > upperThreshold) { + return dotp; + } + return 0; + } - function filterDotProduct(dotp) { - if (lowerThreshold > Math.abs(dotp) || Math.abs(dotp) > upperThreshold) { - return dotp; - } - return 0; - } + action.disabled = function(graph) { + var way = graph.entity(wayId), + nodes = graph.childNodes(way), + points = uniq(nodes).map(function(n) { return projection(n.loc); }); + if (squareness(points)) { + return false; + } - action.disabled = function(graph) { - var way = graph.entity(wayId), - nodes = graph.childNodes(way), - points = uniq(nodes).map(function(n) { return projection(n.loc); }); + return 'not_squarish'; + }; - if (squareness(points)) { - return false; - } - return 'not_squarish'; - }; + action.transitionable = true; - action.transitionable = true; - - - return action; -} - -// `actionRestrictTurn` creates a turn restriction relation. -// -// `turn` must be an `osmTurn` object -// see osm/intersection.js, pathToTurn() -// -// This specifies a restriction of type `restriction` when traveling from -// `turn.from.way` toward `turn.to.way` via `turn.via.node` OR `turn.via.ways`. -// (The action does not check that these entities form a valid intersection.) -// -// From, to, and via ways should be split before calling this action. -// (old versions of the code would split the ways here, but we no longer do it) -// -// For testing convenience, accepts a restrictionID to assign to the new -// relation. Normally, this will be undefined and the relation will -// automatically be assigned a new ID. -// -function actionRestrictTurn(turn, restrictionType, restrictionID) { - - return function(graph) { - var fromWay = graph.entity(turn.from.way); - var toWay = graph.entity(turn.to.way); - var viaNode = turn.via.node && graph.entity(turn.via.node); - var viaWays = turn.via.ways && turn.via.ways.map(function(id) { return graph.entity(id); }); - var members = []; - - members.push({ id: fromWay.id, type: 'way', role: 'from' }); - - if (viaNode) { - members.push({ id: viaNode.id, type: 'node', role: 'via' }); - } else if (viaWays) { - viaWays.forEach(function(viaWay) { - members.push({ id: viaWay.id, type: 'way', role: 'via' }); - }); - } + return action; + } - members.push({ id: toWay.id, type: 'way', role: 'to' }); + // `actionRestrictTurn` creates a turn restriction relation. + // + // `turn` must be an `osmTurn` object + // see osm/intersection.js, pathToTurn() + // + // This specifies a restriction of type `restriction` when traveling from + // `turn.from.way` toward `turn.to.way` via `turn.via.node` OR `turn.via.ways`. + // (The action does not check that these entities form a valid intersection.) + // + // From, to, and via ways should be split before calling this action. + // (old versions of the code would split the ways here, but we no longer do it) + // + // For testing convenience, accepts a restrictionID to assign to the new + // relation. Normally, this will be undefined and the relation will + // automatically be assigned a new ID. + // + function actionRestrictTurn(turn, restrictionType, restrictionID) { + + return function(graph) { + var fromWay = graph.entity(turn.from.way); + var toWay = graph.entity(turn.to.way); + var viaNode = turn.via.node && graph.entity(turn.via.node); + var viaWays = turn.via.ways && turn.via.ways.map(function(id) { return graph.entity(id); }); + var members = []; + + members.push({ id: fromWay.id, type: 'way', role: 'from' }); + + if (viaNode) { + members.push({ id: viaNode.id, type: 'node', role: 'via' }); + } else if (viaWays) { + viaWays.forEach(function(viaWay) { + members.push({ id: viaWay.id, type: 'way', role: 'via' }); + }); + } - return graph.replace(osmRelation({ - id: restrictionID, - tags: { - type: 'restriction', - restriction: restrictionType - }, - members: members - })); - }; -} - -function actionRevert(id) { - var action = function(graph) { - var entity = graph.hasEntity(id), - base = graph.base().entities[id]; - - if (entity && !base) { // entity will be removed.. - if (entity.type === 'node') { - graph.parentWays(entity) - .forEach(function(parent) { - parent = parent.removeNode(id); - graph = graph.replace(parent); - - if (parent.isDegenerate()) { - graph = actionDeleteWay(parent.id)(graph); - } - }); - } + members.push({ id: toWay.id, type: 'way', role: 'to' }); - graph.parentRelations(entity) - .forEach(function(parent) { - parent = parent.removeMembersWithID(id); - graph = graph.replace(parent); + return graph.replace(osmRelation({ + id: restrictionID, + tags: { + type: 'restriction', + restriction: restrictionType + }, + members: members + })); + }; + } - if (parent.isDegenerate()) { - graph = actionDeleteRelation(parent.id)(graph); - } - }); - } + function actionRevert(id) { + var action = function(graph) { + var entity = graph.hasEntity(id), + base = graph.base().entities[id]; + + if (entity && !base) { // entity will be removed.. + if (entity.type === 'node') { + graph.parentWays(entity) + .forEach(function(parent) { + parent = parent.removeNode(id); + graph = graph.replace(parent); + + if (parent.isDegenerate()) { + graph = actionDeleteWay(parent.id)(graph); + } + }); + } + + graph.parentRelations(entity) + .forEach(function(parent) { + parent = parent.removeMembersWithID(id); + graph = graph.replace(parent); + + if (parent.isDegenerate()) { + graph = actionDeleteRelation(parent.id)(graph); + } + }); + } - return graph.revert(id); - }; + return graph.revert(id); + }; - return action; -} + return action; + } -function actionRotate(rotateIds, pivot, angle, projection) { + function actionRotate(rotateIds, pivot, angle, projection) { - var action = function(graph) { - return graph.update(function(graph) { - utilGetAllNodes(rotateIds, graph).forEach(function(node) { - var point = geoRotate([projection(node.loc)], angle, pivot)[0]; - graph = graph.replace(node.move(projection.invert(point))); - }); - }); - }; + var action = function(graph) { + return graph.update(function(graph) { + utilGetAllNodes(rotateIds, graph).forEach(function(node) { + var point = geoRotate([projection(node.loc)], angle, pivot)[0]; + graph = graph.replace(node.move(projection.invert(point))); + }); + }); + }; - return action; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax$8 = Math.max; - -/** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ -function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; + return action; } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax$8(length + index, 0); - } - return baseIndexOf(array, value, index); -} - -// Split a way at the given node. -// -// Optionally, split only the given ways, if multiple ways share -// the given node. -// -// This is the inverse of `iD.actionJoin`. -// -// For testing convenience, accepts an ID to assign to the new way. -// Normally, this will be undefined and the way will automatically -// be assigned a new ID. -// -// Reference: -// https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/SplitWayAction.as -// -function actionSplit(nodeId, newWayIds) { - var _wayIDs; - - // If the way is closed, we need to search for a partner node - // to split the way at. - // - // The following looks for a node that is both far away from - // the initial node in terms of way segment length and nearby - // in terms of beeline-distance. This assures that areas get - // split on the most "natural" points (independent of the number - // of nodes). - // For example: bone-shaped areas get split across their waist - // line, circles across the diameter. - function splitArea(nodes, idxA, graph) { - var lengths = new Array(nodes.length); - var length; - var i; - var best = 0; - var idxB; - - function wrap(index) { - return utilWrap(index, nodes.length); - } - function dist(nA, nB) { - var locA = graph.entity(nA).loc; - var locB = graph.entity(nB).loc; - var epsilon = 1e-6; - return (locA && locB) ? geoSphericalDistance(locA, locB) : epsilon; - } + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax$8 = Math.max; - // calculate lengths - length = 0; - for (i = wrap(idxA+1); i !== idxA; i = wrap(i+1)) { - length += dist(nodes[i], nodes[wrap(i-1)]); - lengths[i] = length; - } + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax$8(length + index, 0); + } + return baseIndexOf(array, value, index); + } - length = 0; - for (i = wrap(idxA-1); i !== idxA; i = wrap(i-1)) { - length += dist(nodes[i], nodes[wrap(i+1)]); - if (length < lengths[i]) - lengths[i] = length; - } + // Split a way at the given node. + // + // Optionally, split only the given ways, if multiple ways share + // the given node. + // + // This is the inverse of `iD.actionJoin`. + // + // For testing convenience, accepts an ID to assign to the new way. + // Normally, this will be undefined and the way will automatically + // be assigned a new ID. + // + // Reference: + // https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/SplitWayAction.as + // + function actionSplit(nodeId, newWayIds) { + var _wayIDs; + + // If the way is closed, we need to search for a partner node + // to split the way at. + // + // The following looks for a node that is both far away from + // the initial node in terms of way segment length and nearby + // in terms of beeline-distance. This assures that areas get + // split on the most "natural" points (independent of the number + // of nodes). + // For example: bone-shaped areas get split across their waist + // line, circles across the diameter. + function splitArea(nodes, idxA, graph) { + var lengths = new Array(nodes.length); + var length; + var i; + var best = 0; + var idxB; + + function wrap(index) { + return utilWrap(index, nodes.length); + } - // determine best opposite node to split - for (i = 0; i < nodes.length; i++) { - var cost = lengths[i] / dist(nodes[idxA], nodes[i]); - if (cost > best) { - idxB = i; - best = cost; - } - } + function dist(nA, nB) { + var locA = graph.entity(nA).loc; + var locB = graph.entity(nB).loc; + var epsilon = 1e-6; + return (locA && locB) ? geoSphericalDistance(locA, locB) : epsilon; + } - return idxB; - } + // calculate lengths + length = 0; + for (i = wrap(idxA+1); i !== idxA; i = wrap(i+1)) { + length += dist(nodes[i], nodes[wrap(i-1)]); + lengths[i] = length; + } + length = 0; + for (i = wrap(idxA-1); i !== idxA; i = wrap(i-1)) { + length += dist(nodes[i], nodes[wrap(i+1)]); + if (length < lengths[i]) + lengths[i] = length; + } - function split(graph, wayA, newWayId) { - var wayB = osmWay({id: newWayId, tags: wayA.tags}); // `wayB` is the NEW way - var origNodes = wayA.nodes.slice(); - var nodesA; - var nodesB; - var isArea = wayA.isArea(); - var isOuter = osmIsSimpleMultipolygonOuterMember(wayA, graph); + // determine best opposite node to split + for (i = 0; i < nodes.length; i++) { + var cost = lengths[i] / dist(nodes[idxA], nodes[i]); + if (cost > best) { + idxB = i; + best = cost; + } + } - if (wayA.isClosed()) { - var nodes = wayA.nodes.slice(0, -1); - var idxA = indexOf(nodes, nodeId); - var idxB = splitArea(nodes, idxA, graph); + return idxB; + } - if (idxB < idxA) { - nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1)); - nodesB = nodes.slice(idxB, idxA + 1); - } else { - nodesA = nodes.slice(idxA, idxB + 1); - nodesB = nodes.slice(idxB).concat(nodes.slice(0, idxA + 1)); - } - } else { - var idx = indexOf(wayA.nodes, nodeId, 1); - nodesA = wayA.nodes.slice(0, idx + 1); - nodesB = wayA.nodes.slice(idx); - } - wayA = wayA.update({nodes: nodesA}); - wayB = wayB.update({nodes: nodesB}); - - graph = graph.replace(wayA); - graph = graph.replace(wayB); - - graph.parentRelations(wayA).forEach(function(relation) { - var member; - - // Turn restrictions - make sure: - // 1. Splitting a FROM/TO way - only `wayA` OR `wayB` remains in relation - // (whichever one is connected to the VIA node/ways) - // 2. Splitting a VIA way - `wayB` remains in relation as a VIA way - if (relation.isRestriction()) { - var f = relation.memberByRole('from'); - var v = relation.membersByRole('via'); - var t = relation.memberByRole('to'); - var i; - - // 1. split a FROM/TO - if (f.id === wayA.id || t.id === wayA.id) { - var keepB = false; - if (v.length === 1 && v[0].type === 'node') { // check via node - keepB = wayB.contains(v[0].id); - } else { // check via way(s) - for (i = 0; i < v.length; i++) { - if (v[i].type === 'way') { - var wayVia = graph.hasEntity(v[i].id); - if (wayVia && intersection(wayB.nodes, wayVia.nodes).length) { - keepB = true; - break; - } - } - } - } - - if (keepB) { - relation = relation.replaceMember(wayA, wayB); - graph = graph.replace(relation); - } - - // 2. split a VIA - } else { - for (i = 0; i < v.length; i++) { - if (v[i].type === 'way' && v[i].id === wayA.id) { - member = { - id: wayB.id, - type: 'way', - role: 'via' - }; - graph = actionAddMember(relation.id, member, v[i].index + 1)(graph); - break; - } - } - } - - // All other relations (Routes, Multipolygons, etc): - // 1. Both `wayA` and `wayB` remain in the relation - // 2. But must be inserted as a pair (see `actionAddMember` for details) - } else { - if (relation === isOuter) { - graph = graph.replace(relation.mergeTags(wayA.tags)); - graph = graph.replace(wayA.update({tags: {}})); - graph = graph.replace(wayB.update({tags: {}})); - } - - member = { - id: wayB.id, - type: 'way', - role: relation.memberById(wayA.id).role - }; - - var insertPair = { - originalID: wayA.id, - insertedID: wayB.id, - nodes: origNodes - }; - - graph = actionAddMember(relation.id, member, undefined, insertPair)(graph); - } - }); + function split(graph, wayA, newWayId) { + var wayB = osmWay({id: newWayId, tags: wayA.tags}); // `wayB` is the NEW way + var origNodes = wayA.nodes.slice(); + var nodesA; + var nodesB; + var isArea = wayA.isArea(); + var isOuter = osmIsSimpleMultipolygonOuterMember(wayA, graph); + + if (wayA.isClosed()) { + var nodes = wayA.nodes.slice(0, -1); + var idxA = indexOf(nodes, nodeId); + var idxB = splitArea(nodes, idxA, graph); + + if (idxB < idxA) { + nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1)); + nodesB = nodes.slice(idxB, idxA + 1); + } else { + nodesA = nodes.slice(idxA, idxB + 1); + nodesB = nodes.slice(idxB).concat(nodes.slice(0, idxA + 1)); + } + } else { + var idx = indexOf(wayA.nodes, nodeId, 1); + nodesA = wayA.nodes.slice(0, idx + 1); + nodesB = wayA.nodes.slice(idx); + } - if (!isOuter && isArea) { - var multipolygon = osmRelation({ - tags: assignIn({}, wayA.tags, {type: 'multipolygon'}), - members: [ - {id: wayA.id, role: 'outer', type: 'way'}, - {id: wayB.id, role: 'outer', type: 'way'} - ] - }); + wayA = wayA.update({nodes: nodesA}); + wayB = wayB.update({nodes: nodesB}); + + graph = graph.replace(wayA); + graph = graph.replace(wayB); + + graph.parentRelations(wayA).forEach(function(relation) { + var member; + + // Turn restrictions - make sure: + // 1. Splitting a FROM/TO way - only `wayA` OR `wayB` remains in relation + // (whichever one is connected to the VIA node/ways) + // 2. Splitting a VIA way - `wayB` remains in relation as a VIA way + if (relation.isRestriction()) { + var f = relation.memberByRole('from'); + var v = relation.membersByRole('via'); + var t = relation.memberByRole('to'); + var i; + + // 1. split a FROM/TO + if (f.id === wayA.id || t.id === wayA.id) { + var keepB = false; + if (v.length === 1 && v[0].type === 'node') { // check via node + keepB = wayB.contains(v[0].id); + } else { // check via way(s) + for (i = 0; i < v.length; i++) { + if (v[i].type === 'way') { + var wayVia = graph.hasEntity(v[i].id); + if (wayVia && intersection(wayB.nodes, wayVia.nodes).length) { + keepB = true; + break; + } + } + } + } + + if (keepB) { + relation = relation.replaceMember(wayA, wayB); + graph = graph.replace(relation); + } + + // 2. split a VIA + } else { + for (i = 0; i < v.length; i++) { + if (v[i].type === 'way' && v[i].id === wayA.id) { + member = { + id: wayB.id, + type: 'way', + role: 'via' + }; + graph = actionAddMember(relation.id, member, v[i].index + 1)(graph); + break; + } + } + } + + // All other relations (Routes, Multipolygons, etc): + // 1. Both `wayA` and `wayB` remain in the relation + // 2. But must be inserted as a pair (see `actionAddMember` for details) + } else { + if (relation === isOuter) { + graph = graph.replace(relation.mergeTags(wayA.tags)); + graph = graph.replace(wayA.update({tags: {}})); + graph = graph.replace(wayB.update({tags: {}})); + } + + member = { + id: wayB.id, + type: 'way', + role: relation.memberById(wayA.id).role + }; + + var insertPair = { + originalID: wayA.id, + insertedID: wayB.id, + nodes: origNodes + }; + + graph = actionAddMember(relation.id, member, undefined, insertPair)(graph); + } + }); - graph = graph.replace(multipolygon); - graph = graph.replace(wayA.update({tags: {}})); - graph = graph.replace(wayB.update({tags: {}})); - } + if (!isOuter && isArea) { + var multipolygon = osmRelation({ + tags: assignIn({}, wayA.tags, {type: 'multipolygon'}), + members: [ + {id: wayA.id, role: 'outer', type: 'way'}, + {id: wayB.id, role: 'outer', type: 'way'} + ] + }); + + graph = graph.replace(multipolygon); + graph = graph.replace(wayA.update({tags: {}})); + graph = graph.replace(wayB.update({tags: {}})); + } - return graph; - } + return graph; + } - var action = function(graph) { - var candidates = action.ways(graph); - for (var i = 0; i < candidates.length; i++) { - graph = split(graph, candidates[i], newWayIds && newWayIds[i]); - } - return graph; - }; + var action = function(graph) { + var candidates = action.ways(graph); + for (var i = 0; i < candidates.length; i++) { + graph = split(graph, candidates[i], newWayIds && newWayIds[i]); + } + return graph; + }; - action.ways = function(graph) { - var node = graph.entity(nodeId); - var parents = graph.parentWays(node); - var hasLines = some(parents, function(parent) { return parent.geometry(graph) === 'line'; }); + action.ways = function(graph) { + var node = graph.entity(nodeId); + var parents = graph.parentWays(node); + var hasLines = some(parents, function(parent) { return parent.geometry(graph) === 'line'; }); - return parents.filter(function(parent) { - if (_wayIDs && _wayIDs.indexOf(parent.id) === -1) - return false; + return parents.filter(function(parent) { + if (_wayIDs && _wayIDs.indexOf(parent.id) === -1) + return false; - if (!_wayIDs && hasLines && parent.geometry(graph) !== 'line') - return false; + if (!_wayIDs && hasLines && parent.geometry(graph) !== 'line') + return false; - if (parent.isClosed()) { - return true; - } + if (parent.isClosed()) { + return true; + } - for (var i = 1; i < parent.nodes.length - 1; i++) { - if (parent.nodes[i] === nodeId) { - return true; - } - } + for (var i = 1; i < parent.nodes.length - 1; i++) { + if (parent.nodes[i] === nodeId) { + return true; + } + } - return false; - }); - }; + return false; + }); + }; - action.disabled = function(graph) { - var candidates = action.ways(graph); - if (candidates.length === 0 || (_wayIDs && _wayIDs.length !== candidates.length)) - return 'not_eligible'; - }; + action.disabled = function(graph) { + var candidates = action.ways(graph); + if (candidates.length === 0 || (_wayIDs && _wayIDs.length !== candidates.length)) + return 'not_eligible'; + }; - action.limitWays = function(_) { - if (!arguments.length) return _wayIDs; - _wayIDs = _; - return action; - }; + action.limitWays = function(_) { + if (!arguments.length) return _wayIDs; + _wayIDs = _; + return action; + }; - return action; -} + return action; + } -/* - * Based on https://github.com/openstreetmap/potlatch2/net/systemeD/potlatch2/tools/Straighten.as - */ -function actionStraighten(wayId, projection) { + /* + * Based on https://github.com/openstreetmap/potlatch2/net/systemeD/potlatch2/tools/Straighten.as + */ + function actionStraighten(wayId, projection) { - function positionAlongWay(n, s, e) { - return ((n[0] - s[0]) * (e[0] - s[0]) + (n[1] - s[1]) * (e[1] - s[1])) / - (Math.pow(e[0] - s[0], 2) + Math.pow(e[1] - s[1], 2)); - } + function positionAlongWay(n, s, e) { + return ((n[0] - s[0]) * (e[0] - s[0]) + (n[1] - s[1]) * (e[1] - s[1])) / + (Math.pow(e[0] - s[0], 2) + Math.pow(e[1] - s[1], 2)); + } - var action = function(graph, t) { - if (t === null || !isFinite(t)) t = 1; - t = Math.min(Math.max(+t, 0), 1); + var action = function(graph, t) { + if (t === null || !isFinite(t)) t = 1; + t = Math.min(Math.max(+t, 0), 1); + + var way = graph.entity(wayId), + nodes = graph.childNodes(way), + points = nodes.map(function(n) { return projection(n.loc); }), + startPoint = points[0], + endPoint = points[points.length-1], + toDelete = [], + i; + + for (i = 1; i < points.length-1; i++) { + var node = nodes[i], + point = points[i]; + + if (t < 1 || graph.parentWays(node).length > 1 || + graph.parentRelations(node).length || + node.hasInterestingTags()) { + + var u = positionAlongWay(point, startPoint, endPoint), + p = [ + startPoint[0] + u * (endPoint[0] - startPoint[0]), + startPoint[1] + u * (endPoint[1] - startPoint[1]) + ], + loc2 = projection.invert(p); + + graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t))); + + } else { + // safe to delete + if (toDelete.indexOf(node) === -1) { + toDelete.push(node); + } + } + } + + for (i = 0; i < toDelete.length; i++) { + graph = actionDeleteNode(toDelete[i].id)(graph); + } - var way = graph.entity(wayId), - nodes = graph.childNodes(way), - points = nodes.map(function(n) { return projection(n.loc); }), - startPoint = points[0], - endPoint = points[points.length-1], - toDelete = [], - i; + return graph; + }; - for (i = 1; i < points.length-1; i++) { - var node = nodes[i], - point = points[i]; - if (t < 1 || graph.parentWays(node).length > 1 || - graph.parentRelations(node).length || - node.hasInterestingTags()) { + action.disabled = function(graph) { + // check way isn't too bendy + var way = graph.entity(wayId), + nodes = graph.childNodes(way), + points = nodes.map(function(n) { return projection(n.loc); }), + startPoint = points[0], + endPoint = points[points.length-1], + threshold = 0.2 * geoVecLength(startPoint, endPoint), + i; - var u = positionAlongWay(point, startPoint, endPoint), - p = [ - startPoint[0] + u * (endPoint[0] - startPoint[0]), - startPoint[1] + u * (endPoint[1] - startPoint[1]) - ], - loc2 = projection.invert(p); + if (threshold === 0) { + return 'too_bendy'; + } - graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t))); + for (i = 1; i < points.length-1; i++) { + var point = points[i], + u = positionAlongWay(point, startPoint, endPoint), + p0 = startPoint[0] + u * (endPoint[0] - startPoint[0]), + p1 = startPoint[1] + u * (endPoint[1] - startPoint[1]), + dist = Math.sqrt(Math.pow(p0 - point[0], 2) + Math.pow(p1 - point[1], 2)); + + // to bendy if point is off by 20% of total start/end distance in projected space + if (isNaN(dist) || dist > threshold) { + return 'too_bendy'; + } + } + }; - } else { - // safe to delete - if (toDelete.indexOf(node) === -1) { - toDelete.push(node); - } - } - } - for (i = 0; i < toDelete.length; i++) { - graph = actionDeleteNode(toDelete[i].id)(graph); - } + action.transitionable = true; - return graph; - }; + return action; + } - action.disabled = function(graph) { - // check way isn't too bendy - var way = graph.entity(wayId), - nodes = graph.childNodes(way), - points = nodes.map(function(n) { return projection(n.loc); }), - startPoint = points[0], - endPoint = points[points.length-1], - threshold = 0.2 * geoVecLength(startPoint, endPoint), - i; + // `actionUnrestrictTurn` deletes a turn restriction relation. + // + // `turn` must be an `osmTurn` object with a `restrictionID` property. + // see osm/intersection.js, pathToTurn() + // + function actionUnrestrictTurn(turn) { + return function(graph) { + return actionDeleteRelation(turn.restrictionID)(graph); + }; + } - if (threshold === 0) { - return 'too_bendy'; - } + /* Reflect the given area around its axis of symmetry */ + function actionReflect(reflectIds, projection) { + var useLongAxis = true; + + + // http://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points + // http://gis.stackexchange.com/questions/3739/generalisation-strategies-for-building-outlines/3756#3756 + function getSmallestSurroundingRectangle(graph, nodes) { + var points = nodes.map(function(n) { return projection(n.loc); }), + hull = d3_polygonHull(points), + centroid = d3_polygonCentroid(hull), + minArea = Infinity, + ssrExtent = [], + ssrAngle = 0, + c1 = hull[0]; + + for (var i = 0; i <= hull.length - 1; i++) { + var c2 = (i === hull.length - 1) ? hull[0] : hull[i + 1], + angle = Math.atan2(c2[1] - c1[1], c2[0] - c1[0]), + poly = geoRotate(hull, -angle, centroid), + extent = poly.reduce(function(extent, point) { + return extent.extend(geoExtent$$1(point)); + }, geoExtent$$1()), + area = extent.area(); + + if (area < minArea) { + minArea = area; + ssrExtent = extent; + ssrAngle = angle; + } + c1 = c2; + } - for (i = 1; i < points.length-1; i++) { - var point = points[i], - u = positionAlongWay(point, startPoint, endPoint), - p0 = startPoint[0] + u * (endPoint[0] - startPoint[0]), - p1 = startPoint[1] + u * (endPoint[1] - startPoint[1]), - dist = Math.sqrt(Math.pow(p0 - point[0], 2) + Math.pow(p1 - point[1], 2)); + return { + poly: geoRotate(ssrExtent.polygon(), ssrAngle, centroid), + angle: ssrAngle + }; + } - // to bendy if point is off by 20% of total start/end distance in projected space - if (isNaN(dist) || dist > threshold) { - return 'too_bendy'; - } - } - }; + var action = function(graph, t) { + if (t === null || !isFinite(t)) t = 1; + t = Math.min(Math.max(+t, 0), 1); - action.transitionable = true; + var nodes = utilGetAllNodes(reflectIds, graph), + ssr = getSmallestSurroundingRectangle(graph, nodes); + // Choose line pq = axis of symmetry. + // The shape's surrounding rectangle has 2 axes of symmetry. + // Reflect across the longer axis by default. + var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ], + q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ], + p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ], + q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ], + p, q; - return action; -} + var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2)); + if ((useLongAxis && isLong) || (!useLongAxis && !isLong)) { + p = p1; + q = q1; + } else { + p = p2; + q = q2; + } -// `actionUnrestrictTurn` deletes a turn restriction relation. -// -// `turn` must be an `osmTurn` object with a `restrictionID` property. -// see osm/intersection.js, pathToTurn() -// -function actionUnrestrictTurn(turn) { - return function(graph) { - return actionDeleteRelation(turn.restrictionID)(graph); - }; -} - -/* Reflect the given area around its axis of symmetry */ -function actionReflect(reflectIds, projection) { - var useLongAxis = true; - - - // http://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points - // http://gis.stackexchange.com/questions/3739/generalisation-strategies-for-building-outlines/3756#3756 - function getSmallestSurroundingRectangle(graph, nodes) { - var points = nodes.map(function(n) { return projection(n.loc); }), - hull = d3_polygonHull(points), - centroid = d3_polygonCentroid(hull), - minArea = Infinity, - ssrExtent = [], - ssrAngle = 0, - c1 = hull[0]; - - for (var i = 0; i <= hull.length - 1; i++) { - var c2 = (i === hull.length - 1) ? hull[0] : hull[i + 1], - angle = Math.atan2(c2[1] - c1[1], c2[0] - c1[0]), - poly = geoRotate(hull, -angle, centroid), - extent = poly.reduce(function(extent, point) { - return extent.extend(geoExtent$$1(point)); - }, geoExtent$$1()), - area = extent.area(); - - if (area < minArea) { - minArea = area; - ssrExtent = extent; - ssrAngle = angle; - } - c1 = c2; - } + // reflect c across pq + // http://math.stackexchange.com/questions/65503/point-reflection-over-a-line + var dx = q[0] - p[0]; + var dy = q[1] - p[1]; + var a = (dx * dx - dy * dy) / (dx * dx + dy * dy); + var b = 2 * dx * dy / (dx * dx + dy * dy); + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var c = projection(node.loc); + var c2 = [ + a * (c[0] - p[0]) + b * (c[1] - p[1]) + p[0], + b * (c[0] - p[0]) - a * (c[1] - p[1]) + p[1] + ]; + var loc2 = projection.invert(c2); + node = node.move(geoVecInterp(node.loc, loc2, t)); + graph = graph.replace(node); + } - return { - poly: geoRotate(ssrExtent.polygon(), ssrAngle, centroid), - angle: ssrAngle - }; - } + return graph; + }; - var action = function(graph, t) { - if (t === null || !isFinite(t)) t = 1; - t = Math.min(Math.max(+t, 0), 1); + action.useLongAxis = function(_) { + if (!arguments.length) return useLongAxis; + useLongAxis = _; + return action; + }; - var nodes = utilGetAllNodes(reflectIds, graph), - ssr = getSmallestSurroundingRectangle(graph, nodes); - // Choose line pq = axis of symmetry. - // The shape's surrounding rectangle has 2 axes of symmetry. - // Reflect across the longer axis by default. - var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ], - q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ], - p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ], - q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ], - p, q; + action.transitionable = true; - var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2)); - if ((useLongAxis && isLong) || (!useLongAxis && !isLong)) { - p = p1; - q = q1; - } else { - p = p2; - q = q2; - } - // reflect c across pq - // http://math.stackexchange.com/questions/65503/point-reflection-over-a-line - var dx = q[0] - p[0]; - var dy = q[1] - p[1]; - var a = (dx * dx - dy * dy) / (dx * dx + dy * dy); - var b = 2 * dx * dy / (dx * dx + dy * dy); - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - var c = projection(node.loc); - var c2 = [ - a * (c[0] - p[0]) + b * (c[1] - p[1]) + p[0], - b * (c[0] - p[0]) - a * (c[1] - p[1]) + p[1] - ]; - var loc2 = projection.invert(c2); - node = node.move(geoVecInterp(node.loc, loc2, t)); - graph = graph.replace(node); - } + return action; + } - return graph; - }; - action.useLongAxis = function(_) { - if (!arguments.length) return useLongAxis; - useLongAxis = _; - return action; - }; + var index$4 = /*#__PURE__*/Object.freeze({ + d3combobox: d3combobox, + d3geoTile: d3geoTile, + d3keybinding: d3keybinding + }); + var Connection = services.osm; + + var debug = false; + + var iD = /*#__PURE__*/Object.freeze({ + Connection: Connection, + debug: debug, + lib: index$4, + d3: index$3, + Context: coreContext, + setAreaKeys: setAreaKeys, + Difference: coreDifference, + Graph: coreGraph$$1, + History: coreHistory, + Tree: coreTree, + geoCross: geoVecCross, + geoInterp: geoVecInterp, + geoRoundCoordinates: geoVecFloor, + geoEuclideanDistance: geoVecLength, + Entity: osmEntity$$1, + Node: osmNode, + Relation: osmRelation, + Way: osmWay, + BackgroundSource: rendererBackgroundSource, + Background: rendererBackground, + Features: rendererFeatures, + Map: rendererMap, + TileLayer: rendererTileLayer, + Detect: utilDetect, + uiPreset: uiPresetEditor, + actionAddEntity: actionAddEntity, + actionAddMember: actionAddMember, + actionAddMidpoint: actionAddMidpoint, + actionAddVertex: actionAddVertex, + actionChangeMember: actionChangeMember, + actionChangePreset: actionChangePreset, + actionChangeTags: actionChangeTags, + actionCircularize: actionCircularize, + actionConnect: actionConnect, + actionCopyEntities: actionCopyEntities, + actionDeleteMember: actionDeleteMember, + actionDeleteMultiple: actionDeleteMultiple, + actionDeleteNode: actionDeleteNode, + actionDeleteRelation: actionDeleteRelation, + actionDeleteWay: actionDeleteWay, + actionDeprecateTags: actionDeprecateTags, + actionDiscardTags: actionDiscardTags, + actionDisconnect: actionDisconnect, + actionJoin: actionJoin, + actionMerge: actionMerge, + actionMergePolygon: actionMergePolygon, + actionMergeRemoteChanges: actionMergeRemoteChanges, + actionMove: actionMove, + actionMoveNode: actionMoveNode, + actionNoop: actionNoop, + actionOrthogonalize: actionOrthogonalize, + actionRestrictTurn: actionRestrictTurn, + actionReverse: actionReverse, + actionRevert: actionRevert, + actionRotate: actionRotate, + actionSplit: actionSplit, + actionStraighten: actionStraighten, + actionUnrestrictTurn: actionUnrestrictTurn, + actionReflect: actionReflect, + behaviorAddWay: behaviorAddWay, + behaviorBreathe: behaviorBreathe, + behaviorCopy: behaviorCopy, + behaviorDrag: behaviorDrag, + behaviorDrawWay: behaviorDrawWay, + behaviorDraw: behaviorDraw, + behaviorEdit: behaviorEdit, + behaviorHash: behaviorHash, + behaviorHover: behaviorHover, + behaviorLasso: behaviorLasso, + behaviorOperation: behaviorOperation, + behaviorPaste: behaviorPaste, + behaviorSelect: behaviorSelect, + behaviorTail: behaviorTail, + coreContext: coreContext, + coreDifference: coreDifference, + coreGraph: coreGraph$$1, + coreHistory: coreHistory, + coreTree: coreTree, + dataFeatureIcons: dataFeatureIcons, + data: data, + dataWikipedia: wikipedia$2, + dataSuggestions: dataSuggestions, + dataAddressFormats: dataAddressFormats, + dataDeprecated: dataDeprecated, + dataDiscarded: dataDiscarded, + dataLocales: dataLocales, + dataPhoneFormats: dataPhoneFormats, + dataShortcuts: dataShortcuts, + dataImperial: dataImperial, + dataDriveLeft: dataDriveLeft, + dataEn: en, + geoExtent: geoExtent$$1, + geoLatToMeters: geoLatToMeters, + geoLonToMeters: geoLonToMeters, + geoMetersToLat: geoMetersToLat, + geoMetersToLon: geoMetersToLon, + geoMetersToOffset: geoMetersToOffset, + geoOffsetToMeters: geoOffsetToMeters, + geoScaleToZoom: geoScaleToZoom, + geoSphericalDistance: geoSphericalDistance, + geoZoomToScale: geoZoomToScale, + geoAngle: geoAngle, + geoChooseEdge: geoChooseEdge, + geoEdgeEqual: geoEdgeEqual, + geoHasLineIntersections: geoHasLineIntersections, + geoHasSelfIntersections: geoHasSelfIntersections, + geoRotate: geoRotate, + geoLineIntersection: geoLineIntersection, + geoPathHasIntersections: geoPathHasIntersections, + geoPathIntersections: geoPathIntersections, + geoPathLength: geoPathLength, + geoPointInPolygon: geoPointInPolygon, + geoPolygonContainsPolygon: geoPolygonContainsPolygon, + geoPolygonIntersectsPolygon: geoPolygonIntersectsPolygon, + geoViewportEdge: geoViewportEdge, + geoRawMercator: geoRawMercator, + geoVecAdd: geoVecAdd, + geoVecAngle: geoVecAngle, + geoVecCross: geoVecCross, + geoVecDot: geoVecDot, + geoVecEqual: geoVecEqual, + geoVecFloor: geoVecFloor, + geoVecInterp: geoVecInterp, + geoVecLength: geoVecLength, + geoVecSubtract: geoVecSubtract, + geoVecScale: geoVecScale, + modeAddArea: modeAddArea$$1, + modeAddLine: modeAddLine$$1, + modeAddPoint: modeAddPoint$$1, + modeBrowse: modeBrowse, + modeDragNode: modeDragNode$$1, + modeDrawArea: modeDrawArea, + modeDrawLine: modeDrawLine, + modeMove: modeMove$$1, + modeRotate: modeRotate$$1, + modeSave: modeSave$$1, + modeSelect: modeSelect, + operationCircularize: operationCircularize, + operationContinue: operationContinue, + operationDelete: operationDelete, + operationDisconnect: operationDisconnect, + operationMerge: operationMerge, + operationMove: operationMove, + operationOrthogonalize: operationOrthogonalize, + operationReflectShort: operationReflectShort, + operationReflectLong: operationReflectLong, + operationReverse: operationReverse, + operationRotate: operationRotate, + operationSplit: operationSplit, + operationStraighten: operationStraighten, + osmChangeset: osmChangeset, + osmEntity: osmEntity$$1, + osmNode: osmNode, + osmRelation: osmRelation, + osmWay: osmWay, + osmIntersection: osmIntersection, + osmTurn: osmTurn, + osmInferRestriction: osmInferRestriction, + osmLanes: osmLanes, + osmIsSimpleMultipolygonOuterMember: osmIsSimpleMultipolygonOuterMember, + osmSimpleMultipolygonOuterMember: osmSimpleMultipolygonOuterMember, + osmJoinWays: osmJoinWays, + osmOneWayTags: osmOneWayTags, + osmPavedTags: osmPavedTags, + osmIsInterestingTag: osmIsInterestingTag, + presetCategory: presetCategory, + presetCollection: presetCollection, + presetField: presetField, + presetPreset: presetPreset, + presetIndex: presetIndex, + rendererBackgroundSource: rendererBackgroundSource, + rendererBackground: rendererBackground, + rendererFeatures: rendererFeatures, + rendererMap: rendererMap, + rendererTileLayer: rendererTileLayer, + services: services, + serviceMapillary: serviceMapillary, + serviceNominatim: serviceNominatim, + serviceOpenstreetcam: serviceOpenstreetcam, + serviceOsm: serviceOsm, + serviceTaginfo: serviceTaginfo, + serviceWikidata: serviceWikidata, + serviceWikipedia: serviceWikipedia, + svgAreas: svgAreas$$1, + svgDebug: svgDebug$$1, + svgDefs: svgDefs, + svgGpx: svgGpx$$1, + svgIcon: svgIcon, + svgLabels: svgLabels, + svgLayers: svgLayers, + svgLines: svgLines$$1, + svgMapillaryImages: svgMapillaryImages$$1, + svgMapillarySigns: svgMapillarySigns, + svgMidpoints: svgMidpoints$$1, + svgOneWaySegments: svgOneWaySegments, + svgOpenstreetcamImages: svgOpenstreetcamImages$$1, + svgOsm: svgOsm, + svgPassiveVertex: svgPassiveVertex, + svgPath: svgPath, + svgPointTransform: svgPointTransform, + svgPoints: svgPoints$$1, + svgRelationMemberTags: svgRelationMemberTags, + svgSegmentWay: svgSegmentWay, + svgTagClasses: svgTagClasses, + svgTurns: svgTurns, + svgVertices: svgVertices$$1, + uiFields: uiFields, + uiFieldDefaultCheck: uiFieldCheck, + uiFieldOnewayCheck: uiFieldCheck, + uiFieldCheck: uiFieldCheck, + uiFieldMultiCombo: uiFieldCombo, + uiFieldNetworkCombo: uiFieldCombo, + uiFieldSemiCombo: uiFieldCombo, + uiFieldTypeCombo: uiFieldCombo, + uiFieldCombo: uiFieldCombo, + uiFieldUrl: uiFieldText, + uiFieldNumber: uiFieldText, + uiFieldTel: uiFieldText, + uiFieldEmail: uiFieldText, + uiFieldText: uiFieldText, + uiFieldAccess: uiFieldAccess, + uiFieldAddress: uiFieldAddress, + uiFieldCycleway: uiFieldCycleway, + uiFieldLanes: uiFieldLanes, + uiFieldLocalized: uiFieldLocalized, + uiFieldMaxspeed: uiFieldMaxspeed, + uiFieldStructureRadio: uiFieldRadio, + uiFieldRadio: uiFieldRadio, + uiFieldRestrictions: uiFieldRestrictions, + uiFieldTextarea: uiFieldTextarea, + uiFieldWikipedia: uiFieldWikipedia, + uiIntro: uiIntro, + uiInfoPanels: uiInfoPanels, + uiPanelBackground: uiPanelBackground, + uiPanelHistory: uiPanelHistory, + uiPanelLocation: uiPanelLocation, + uiPanelMeasurement: uiPanelMeasurement, + uiInit: uiInit, + uiAccount: uiAccount, + uiAttribution: uiAttribution, + uiBackground: uiBackground, + uiBackgroundDisplayOptions: uiBackgroundDisplayOptions, + uiBackgroundOffset: uiBackgroundOffset, + uiChangesetEditor: uiChangesetEditor, + uiCmd: uiCmd, + uiCommit: uiCommit, + uiCommitChanges: uiCommitChanges, + uiCommitWarnings: uiCommitWarnings, + uiConfirm: uiConfirm, + uiConflicts: uiConflicts, + uiContributors: uiContributors, + uiCurtain: uiCurtain, + uiDisclosure: uiDisclosure, + uiEditMenu: uiEditMenu, + uiEntityEditor: uiEntityEditor, + uiFeatureInfo: uiFeatureInfo, + uiFeatureList: uiFeatureList, + uiField: uiField, + uiFieldHelp: uiFieldHelp, + uiFlash: uiFlash, + uiFormFields: uiFormFields, + uiFullScreen: uiFullScreen, + uiGeolocate: uiGeolocate, + uiHelp: uiHelp, + uiInfo: uiInfo, + uiInspector: uiInspector, + uiLasso: uiLasso, + uiLoading: uiLoading, + uiMapData: uiMapData, + uiMapInMap: uiMapInMap, + uiModal: uiModal, + uiModes: uiModes, + uiNotice: uiNotice, + uiPresetEditor: uiPresetEditor, + uiPresetIcon: uiPresetIcon, + uiPresetList: uiPresetList, + uiRadialMenu: uiRadialMenu, + uiRawMemberEditor: uiRawMemberEditor, + uiRawMembershipEditor: uiRawMembershipEditor, + uiRawTagEditor: uiRawTagEditor, + uiRestore: uiRestore, + uiSave: uiSave, + uiScale: uiScale, + uiSelectionList: uiSelectionList, + uiSidebar: uiSidebar, + uiSourceSwitch: uiSourceSwitch, + uiSpinner: uiSpinner, + uiSplash: uiSplash, + uiStatus: uiStatus, + uiSuccess: uiSuccess$$1, + uiTagReference: uiTagReference, + uiToggle: uiToggle, + uiTooltipHtml: uiTooltipHtml, + uiUndoRedo: uiUndoRedo, + uiVersion: uiVersion, + uiViewOnOSM: uiViewOnOSM, + uiZoom: uiZoom, + utilAsyncMap: utilAsyncMap, + utilCallWhenIdle: utilCallWhenIdle, + utilCleanTags: utilCleanTags, + utilDisplayName: utilDisplayName, + utilDisplayNameForPath: utilDisplayNameForPath, + utilDisplayType: utilDisplayType, + utilEditDistance: utilEditDistance, + utilEntitySelector: utilEntitySelector, + utilEntityOrMemberSelector: utilEntityOrMemberSelector, + utilFastMouse: utilFastMouse, + utilFunctor: utilFunctor, + utilGetAllNodes: utilGetAllNodes, + utilGetPrototypeOf: utilGetPrototypeOf, + utilGetSetValue: utilGetSetValue, + utilIdleWorker: utilIdleWorker, + utilNoAuto: utilNoAuto, + utilPrefixCSSProperty: utilPrefixCSSProperty, + utilPrefixDOMProperty: utilPrefixDOMProperty, + utilQsString: utilQsString, + utilRebind: utilRebind, + utilSetTransform: utilSetTransform, + utilSessionMutex: utilSessionMutex, + utilStringQs: utilStringQs, + utilSuggestNames: utilSuggestNames, + utilTagText: utilTagText, + utilTriggerEvent: utilTriggerEvent, + utilWrap: utilWrap, + d3combobox: d3combobox, + d3geoTile: d3geoTile, + d3keybinding: d3keybinding, + validationDeprecatedTag: validationDeprecatedTag, + validationDisconnectedHighway: validationDisconnectedHighway, + validationManyDeletions: validationManyDeletions, + validationMissingTag: validationMissingTag, + validationOldMultipolygon: validationOldMultipolygon, + validationTagSuggestsArea: validationTagSuggestsArea + }); - action.transitionable = true; - - - return action; -} - - - -var index$4 = Object.freeze({ - d3combobox: d3combobox, - d3geoTile: d3geoTile, - d3keybinding: d3keybinding -}); - -var Connection = services.osm; - -var debug = false; - - -var iD = Object.freeze({ - Connection: Connection, - debug: debug, - lib: index$4, - d3: index$3, - Context: coreContext, - setAreaKeys: setAreaKeys, - Difference: coreDifference, - Graph: coreGraph$$1, - History: coreHistory, - Tree: coreTree, - geoCross: geoVecCross, - geoInterp: geoVecInterp, - geoRoundCoordinates: geoVecFloor, - geoEuclideanDistance: geoVecLength, - Entity: osmEntity$$1, - Node: osmNode, - Relation: osmRelation, - Way: osmWay, - BackgroundSource: rendererBackgroundSource, - Background: rendererBackground, - Features: rendererFeatures, - Map: rendererMap, - TileLayer: rendererTileLayer, - Detect: utilDetect, - uiPreset: uiPresetEditor, - actionAddEntity: actionAddEntity, - actionAddMember: actionAddMember, - actionAddMidpoint: actionAddMidpoint, - actionAddVertex: actionAddVertex, - actionChangeMember: actionChangeMember, - actionChangePreset: actionChangePreset, - actionChangeTags: actionChangeTags, - actionCircularize: actionCircularize, - actionConnect: actionConnect, - actionCopyEntities: actionCopyEntities, - actionDeleteMember: actionDeleteMember, - actionDeleteMultiple: actionDeleteMultiple, - actionDeleteNode: actionDeleteNode, - actionDeleteRelation: actionDeleteRelation, - actionDeleteWay: actionDeleteWay, - actionDeprecateTags: actionDeprecateTags, - actionDiscardTags: actionDiscardTags, - actionDisconnect: actionDisconnect, - actionJoin: actionJoin, - actionMerge: actionMerge, - actionMergePolygon: actionMergePolygon, - actionMergeRemoteChanges: actionMergeRemoteChanges, - actionMove: actionMove, - actionMoveNode: actionMoveNode, - actionNoop: actionNoop, - actionOrthogonalize: actionOrthogonalize, - actionRestrictTurn: actionRestrictTurn, - actionReverse: actionReverse, - actionRevert: actionRevert, - actionRotate: actionRotate, - actionSplit: actionSplit, - actionStraighten: actionStraighten, - actionUnrestrictTurn: actionUnrestrictTurn, - actionReflect: actionReflect, - behaviorAddWay: behaviorAddWay, - behaviorBreathe: behaviorBreathe, - behaviorCopy: behaviorCopy, - behaviorDrag: behaviorDrag, - behaviorDrawWay: behaviorDrawWay, - behaviorDraw: behaviorDraw, - behaviorEdit: behaviorEdit, - behaviorHash: behaviorHash, - behaviorHover: behaviorHover, - behaviorLasso: behaviorLasso, - behaviorOperation: behaviorOperation, - behaviorPaste: behaviorPaste, - behaviorSelect: behaviorSelect, - behaviorTail: behaviorTail, - coreContext: coreContext, - coreDifference: coreDifference, - coreGraph: coreGraph$$1, - coreHistory: coreHistory, - coreTree: coreTree, - dataFeatureIcons: dataFeatureIcons, - data: data, - dataWikipedia: wikipedia$2, - dataSuggestions: dataSuggestions, - dataAddressFormats: dataAddressFormats, - dataDeprecated: dataDeprecated, - dataDiscarded: dataDiscarded, - dataLocales: dataLocales, - dataPhoneFormats: dataPhoneFormats, - dataShortcuts: dataShortcuts, - dataImperial: dataImperial, - dataDriveLeft: dataDriveLeft, - dataEn: en, - geoExtent: geoExtent$$1, - geoLatToMeters: geoLatToMeters, - geoLonToMeters: geoLonToMeters, - geoMetersToLat: geoMetersToLat, - geoMetersToLon: geoMetersToLon, - geoMetersToOffset: geoMetersToOffset, - geoOffsetToMeters: geoOffsetToMeters, - geoScaleToZoom: geoScaleToZoom, - geoSphericalDistance: geoSphericalDistance, - geoZoomToScale: geoZoomToScale, - geoAngle: geoAngle, - geoChooseEdge: geoChooseEdge, - geoEdgeEqual: geoEdgeEqual, - geoHasLineIntersections: geoHasLineIntersections, - geoHasSelfIntersections: geoHasSelfIntersections, - geoRotate: geoRotate, - geoLineIntersection: geoLineIntersection, - geoPathHasIntersections: geoPathHasIntersections, - geoPathIntersections: geoPathIntersections, - geoPathLength: geoPathLength, - geoPointInPolygon: geoPointInPolygon, - geoPolygonContainsPolygon: geoPolygonContainsPolygon, - geoPolygonIntersectsPolygon: geoPolygonIntersectsPolygon, - geoViewportEdge: geoViewportEdge, - geoRawMercator: geoRawMercator, - geoVecAdd: geoVecAdd, - geoVecAngle: geoVecAngle, - geoVecCross: geoVecCross, - geoVecDot: geoVecDot, - geoVecEqual: geoVecEqual, - geoVecFloor: geoVecFloor, - geoVecInterp: geoVecInterp, - geoVecLength: geoVecLength, - geoVecSubtract: geoVecSubtract, - geoVecScale: geoVecScale, - modeAddArea: modeAddArea$$1, - modeAddLine: modeAddLine$$1, - modeAddPoint: modeAddPoint$$1, - modeBrowse: modeBrowse, - modeDragNode: modeDragNode$$1, - modeDrawArea: modeDrawArea, - modeDrawLine: modeDrawLine, - modeMove: modeMove$$1, - modeRotate: modeRotate$$1, - modeSave: modeSave$$1, - modeSelect: modeSelect, - operationCircularize: operationCircularize, - operationContinue: operationContinue, - operationDelete: operationDelete, - operationDisconnect: operationDisconnect, - operationMerge: operationMerge, - operationMove: operationMove, - operationOrthogonalize: operationOrthogonalize, - operationReflectShort: operationReflectShort, - operationReflectLong: operationReflectLong, - operationReverse: operationReverse, - operationRotate: operationRotate, - operationSplit: operationSplit, - operationStraighten: operationStraighten, - osmChangeset: osmChangeset, - osmEntity: osmEntity$$1, - osmNode: osmNode, - osmRelation: osmRelation, - osmWay: osmWay, - osmIntersection: osmIntersection, - osmTurn: osmTurn, - osmInferRestriction: osmInferRestriction, - osmLanes: osmLanes, - osmIsSimpleMultipolygonOuterMember: osmIsSimpleMultipolygonOuterMember, - osmSimpleMultipolygonOuterMember: osmSimpleMultipolygonOuterMember, - osmJoinWays: osmJoinWays, - osmOneWayTags: osmOneWayTags, - osmPavedTags: osmPavedTags, - osmIsInterestingTag: osmIsInterestingTag, - presetCategory: presetCategory, - presetCollection: presetCollection, - presetField: presetField, - presetPreset: presetPreset, - presetIndex: presetIndex, - rendererBackgroundSource: rendererBackgroundSource, - rendererBackground: rendererBackground, - rendererFeatures: rendererFeatures, - rendererMap: rendererMap, - rendererTileLayer: rendererTileLayer, - services: services, - serviceMapillary: serviceMapillary, - serviceNominatim: serviceNominatim, - serviceOpenstreetcam: serviceOpenstreetcam, - serviceOsm: serviceOsm, - serviceTaginfo: serviceTaginfo, - serviceWikidata: serviceWikidata, - serviceWikipedia: serviceWikipedia, - svgAreas: svgAreas$$1, - svgDebug: svgDebug$$1, - svgDefs: svgDefs, - svgGpx: svgGpx$$1, - svgIcon: svgIcon, - svgLabels: svgLabels, - svgLayers: svgLayers, - svgLines: svgLines$$1, - svgMapillaryImages: svgMapillaryImages$$1, - svgMapillarySigns: svgMapillarySigns, - svgMidpoints: svgMidpoints$$1, - svgOneWaySegments: svgOneWaySegments, - svgOpenstreetcamImages: svgOpenstreetcamImages$$1, - svgOsm: svgOsm, - svgPassiveVertex: svgPassiveVertex, - svgPath: svgPath, - svgPointTransform: svgPointTransform, - svgPoints: svgPoints$$1, - svgRelationMemberTags: svgRelationMemberTags, - svgSegmentWay: svgSegmentWay, - svgTagClasses: svgTagClasses, - svgTurns: svgTurns, - svgVertices: svgVertices$$1, - uiFields: uiFields, - uiFieldDefaultCheck: uiFieldCheck, - uiFieldOnewayCheck: uiFieldCheck, - uiFieldCheck: uiFieldCheck, - uiFieldMultiCombo: uiFieldCombo, - uiFieldNetworkCombo: uiFieldCombo, - uiFieldSemiCombo: uiFieldCombo, - uiFieldTypeCombo: uiFieldCombo, - uiFieldCombo: uiFieldCombo, - uiFieldUrl: uiFieldText, - uiFieldNumber: uiFieldText, - uiFieldTel: uiFieldText, - uiFieldEmail: uiFieldText, - uiFieldText: uiFieldText, - uiFieldAccess: uiFieldAccess, - uiFieldAddress: uiFieldAddress, - uiFieldCycleway: uiFieldCycleway, - uiFieldLanes: uiFieldLanes, - uiFieldLocalized: uiFieldLocalized, - uiFieldMaxspeed: uiFieldMaxspeed, - uiFieldStructureRadio: uiFieldRadio, - uiFieldRadio: uiFieldRadio, - uiFieldRestrictions: uiFieldRestrictions, - uiFieldTextarea: uiFieldTextarea, - uiFieldWikipedia: uiFieldWikipedia, - uiIntro: uiIntro, - uiInfoPanels: uiInfoPanels, - uiPanelBackground: uiPanelBackground, - uiPanelHistory: uiPanelHistory, - uiPanelLocation: uiPanelLocation, - uiPanelMeasurement: uiPanelMeasurement, - uiInit: uiInit, - uiAccount: uiAccount, - uiAttribution: uiAttribution, - uiBackground: uiBackground, - uiBackgroundDisplayOptions: uiBackgroundDisplayOptions, - uiBackgroundOffset: uiBackgroundOffset, - uiChangesetEditor: uiChangesetEditor, - uiCmd: uiCmd, - uiCommit: uiCommit, - uiCommitChanges: uiCommitChanges, - uiCommitWarnings: uiCommitWarnings, - uiConfirm: uiConfirm, - uiConflicts: uiConflicts, - uiContributors: uiContributors, - uiCurtain: uiCurtain, - uiDisclosure: uiDisclosure, - uiEditMenu: uiEditMenu, - uiEntityEditor: uiEntityEditor, - uiFeatureInfo: uiFeatureInfo, - uiFeatureList: uiFeatureList, - uiField: uiField, - uiFieldHelp: uiFieldHelp, - uiFlash: uiFlash, - uiFormFields: uiFormFields, - uiFullScreen: uiFullScreen, - uiGeolocate: uiGeolocate, - uiHelp: uiHelp, - uiInfo: uiInfo, - uiInspector: uiInspector, - uiLasso: uiLasso, - uiLoading: uiLoading, - uiMapData: uiMapData, - uiMapInMap: uiMapInMap, - uiModal: uiModal, - uiModes: uiModes, - uiNotice: uiNotice, - uiPresetEditor: uiPresetEditor, - uiPresetIcon: uiPresetIcon, - uiPresetList: uiPresetList, - uiRadialMenu: uiRadialMenu, - uiRawMemberEditor: uiRawMemberEditor, - uiRawMembershipEditor: uiRawMembershipEditor, - uiRawTagEditor: uiRawTagEditor, - uiRestore: uiRestore, - uiSave: uiSave, - uiScale: uiScale, - uiSelectionList: uiSelectionList, - uiSidebar: uiSidebar, - uiSourceSwitch: uiSourceSwitch, - uiSpinner: uiSpinner, - uiSplash: uiSplash, - uiStatus: uiStatus, - uiSuccess: uiSuccess, - uiTagReference: uiTagReference, - uiToggle: uiToggle, - uiTooltipHtml: uiTooltipHtml, - uiUndoRedo: uiUndoRedo, - uiVersion: uiVersion, - uiViewOnOSM: uiViewOnOSM, - uiZoom: uiZoom, - utilAsyncMap: utilAsyncMap, - utilCallWhenIdle: utilCallWhenIdle, - utilDisplayName: utilDisplayName, - utilDisplayNameForPath: utilDisplayNameForPath, - utilDisplayType: utilDisplayType, - utilEditDistance: utilEditDistance, - utilEntitySelector: utilEntitySelector, - utilEntityOrMemberSelector: utilEntityOrMemberSelector, - utilFastMouse: utilFastMouse, - utilFunctor: utilFunctor, - utilGetAllNodes: utilGetAllNodes, - utilGetPrototypeOf: utilGetPrototypeOf, - utilGetSetValue: utilGetSetValue, - utilIdleWorker: utilIdleWorker, - utilNoAuto: utilNoAuto, - utilPrefixCSSProperty: utilPrefixCSSProperty, - utilPrefixDOMProperty: utilPrefixDOMProperty, - utilQsString: utilQsString, - utilRebind: utilRebind, - utilSetTransform: utilSetTransform, - utilSessionMutex: utilSessionMutex, - utilStringQs: utilStringQs, - utilSuggestNames: utilSuggestNames, - utilTagText: utilTagText, - utilTriggerEvent: utilTriggerEvent, - utilWrap: utilWrap, - d3combobox: d3combobox, - d3geoTile: d3geoTile, - d3keybinding: d3keybinding, - validationDeprecatedTag: validationDeprecatedTag, - validationDisconnectedHighway: validationDisconnectedHighway, - validationManyDeletions: validationManyDeletions, - validationMissingTag: validationMissingTag, - validationOldMultipolygon: validationOldMultipolygon, - validationTagSuggestsArea: validationTagSuggestsArea -}); - -window.iD = iD; + window.iD = iD; }()); //# sourceMappingURL=iD.js.map diff --git a/vendor/assets/iD/iD/img/community-sprite.svg b/vendor/assets/iD/iD/img/community-sprite.svg new file mode 100644 index 000000000..5c19a9bf9 --- /dev/null +++ b/vendor/assets/iD/iD/img/community-sprite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vendor/assets/iD/iD/img/iD-sprite.svg b/vendor/assets/iD/iD/img/iD-sprite.svg index 3a1fb094d..1dad62812 100644 --- a/vendor/assets/iD/iD/img/iD-sprite.svg +++ b/vendor/assets/iD/iD/img/iD-sprite.svg @@ -194,10 +194,10 @@ - - - - + + + + @@ -479,6 +479,9 @@ + + + @@ -1386,6 +1389,9 @@ + + + diff --git a/vendor/assets/iD/iD/img/maki-sprite.svg b/vendor/assets/iD/iD/img/maki-sprite.svg index 4aa525957..927b93357 100644 --- a/vendor/assets/iD/iD/img/maki-sprite.svg +++ b/vendor/assets/iD/iD/img/maki-sprite.svg @@ -1 +1 @@ -barrier-11barrier-15bbq-11grill-15blood-bank-11blood-bank-15buddhismbuddhismbuildingsbuildingscity-11city-15defibrillator-11defibrillator-15drinking-water-11drinking-water-15emergency-phone-11emergency-phone-15entrance-alt1-11entrance-alt1-15farm-11farm-15fence-11fence-15florist-11florist-15gaminggaminggarden-center-11home-11home-15horse-riding-11horse-riding-15karaokelandmarklandmarklanduse-11landuse-15logging-11logging-15marker-stroked-11marker-stroked-15mobile-phone-11mobile-phone-15natural-11natural-15park-alt1-11park-alt1-15recycling-11recycling-15buildingsbuildingsscooter-11scooter-15slaughterhouse-11-01slaughterhouse-15-01snowmobile-11snowmobile-15teahousetelephone-11telephone-15town-11-01town-15village-11village-15 \ No newline at end of file + \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/af.json b/vendor/assets/iD/iD/locales/af.json index ec364e86c..bcead08a7 100644 --- a/vendor/assets/iD/iD/locales/af.json +++ b/vendor/assets/iD/iD/locales/af.json @@ -183,8 +183,7 @@ "unsaved_changes": "Jy het ongestoorde veranderinge" }, "success": { - "just_edited": "Jy het nou net 'n OpenStreetMapKaart bydra gemaak!", - "view_on_osm": "Besigtig op OSM" + "just_edited": "Jy het nou net 'n OpenStreetMapKaart bydra gemaak!" }, "splash": { "welcome": "Welkom by die iD OpenStreetMap program", diff --git a/vendor/assets/iD/iD/locales/ar.json b/vendor/assets/iD/iD/locales/ar.json index 387e914a9..0a207b63c 100644 --- a/vendor/assets/iD/iD/locales/ar.json +++ b/vendor/assets/iD/iD/locales/ar.json @@ -1,5 +1,10 @@ { "ar": { + "icons": { + "information": "معلومات", + "remove": "إزالة", + "undo": "تراجع" + }, "modes": { "add_area": { "title": "مساحة", @@ -604,11 +609,6 @@ }, "success": { "just_edited": "لقد قمت للتو بتحرير OpenStreetMap!", - "view_on_osm": "عرض على OSM", - "facebook": "شارك على فيس بوك", - "twitter": "شارك على تويتر", - "google": "شارك على جوجل بلس", - "help_html": "ينبغي أن تظهر التغييرات التي قمت بها في الطبقة \"القياسية\" خلال بضع دقائق. قد تأخذ الطبقات الأخرى وقتا أطول.", "help_link_text": "تفاصيل", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -708,15 +708,24 @@ "select_left_click": "{leftclick} انقر نقرة بالزر الأيسر على عنصر ما لاختياره. سيقوم ذلك بتمييز العنصر بحد متوهج ينبض باستمرار، وسيظهر شريط جانبي يعرض لك تفاصيل عن العنصر المُختار، كاسمه وعنوانه ونحو ذلك.", "select_right_click": "{rightclick} انقر نقرة بالزر الأيمن على عنصر ما لإظهار قائمة التعديل، والتي تعرض لك الأوامر المتاحة لتعديل العنصر، كتحريكه أو تدويره أو حذفه.", "multiselect_h": "الاختيار المتعدد", + "multiselect_shift_click": "`{shift}`+{leftclick} لاختيار أكثر من عنصر في نفس الوقت. يجعل ذلك من السهل تحريك أو حذف أكثر من عنصر في نفس الوقت.", + "multiselect_lasso": "هناك طريقة أخرى لاخيار عدة عناصر في نفس الوقت وهي بالضغط مع الاستمرار على مفتاح `{shift}`، ثم الضغط مع الاستمرار على زر الفأرة الأيسر {leftclick} وسحب الفأرة لرسم مساحة حُرة للتحديد. وبذلك سيتم تحديد جميع النقاط بداخل مساحة الرسم المرسومة.", "undo_redo_h": "التراجع والإعادة", + "undo_redo": "يتم حفظ تعديلاتك وتخزينها في المتصفح حتى تقوم باختيار حفظها على خادوم OpenStreetMap.\nيمكنك التراجع عن التعديلات عن طريق الضغط على زر **التراجع** {undo}، أو العودة عن التراجع عن طريق الضغط على زر **الإعادة** {redo}.", "save_h": "الحفظ", + "save": "انقر زر **حفظ** {save} لإنهاء تعديلاتك وإرسالها إلى OpenStreetMap. ينبغي عليك أن تتذكر حفظ تعديلاتك بشكل متكرر حتى لا يضيع مجهودك!", + "save_validation": "في شاشة الحفظ، سيكون لديك الفرصة لكتابة تعليق أو ملاحظات على ما قمت به من تعديلات. كما سيقوم المحرر iD تلقائيا بعمل بعض الفحوصات الأساسية عن البيانات التي قد تكون ناقصة وقد يقدم بعض الاقتراحات والتحذيرات المفيدة إن كان هناك شيء ما لا يبدو صحيحا. ", "upload_h": "الرفع", "upload": "قبل رفع تغييراتك ينبغي عليك إدخال [تعليق على التغييرات](https://wiki.openstreetmap.org/wiki/Good_changeset_comments). ثم اضغط على **رفع** لإرسال تغييراتك إلى خرائط OpenStreetMap, حيث ستدمج هذه التغييرات مع الخرائط وتكون مرئية للجميع.", "backups_h": "النسخ الاحتياطي التلقائي", - "keyboard_h": "اختصارات لوحة المفاتيح" + "backups": "إن لم تستطع إنهاء وحفظ تعديلاتك في نفس الجلسة، على سبيل المثال إنطفاء جهاز حاسوبك فجأة أو حدوث عطل في متصفحك أدى إلى غلقه بشكل مفاجيء أو نحو ذلك، فلا تقلق فإن تعديلاتك لا تزال محفوظة في متصفحك. حيث يمكنك العودة لاحقا (على نفس جهازك ونفس المتصفح)، وسيعرض عليك محرر iD استعادة أعمالك من حيث تركتها.", + "keyboard_h": "اختصارات لوحة المفاتيح", + "keyboard": "يمكنك عرض قائمة باختصارات لوحة المفاتيح عن طريق الضغط على مفتاح `?`." }, "feature_editor": { "title": "محرر العناصر", + "intro": "يظهر *محرر العناصر* على جانب الخريطة، ويتيح لك عرض وتحرير جميع المعلومات المتعلقة بالعنصر المُختار.", + "definitions": "يعرض لك القسم العلوي نوع العنصر.\nكما يحتوي القسم الأوسط على *حقول* تعرض خصائص وسمات العنصر، كالاسم والعنوان.", "type_h": "نوع العنصر", "fields_h": "الحقول", "tags_h": "الوسوم" @@ -937,15 +946,17 @@ }, "key": { "alt": "Alt", + "backspace": "Backspace", + "cmd": "Cmd", "ctrl": "Ctrl", "delete": "Delete", "del": "Del", "end": "End", "enter": "Enter", "esc": "Esc", - "home": "الرئيسية", + "home": "Home", "option": "خيارات", - "pause": "إلباث", + "pause": "Pause", "pgdn": "PgDn", "pgup": "PgUp", "return": "رجوع", @@ -991,25 +1002,38 @@ "edit_menu": "فتح قائمة التحرير" }, "vertex_selected": { - "title": "مع القعدة المختارة", + "title": "مع العقدة المختارة", "previous": "قفز إلى العقدة السابقة", "next": "قفز إلى القعدة التالية", "first": "قفز إلى العقدة الأولى", - "last": "فز إلى العقدة الأخيرة" + "last": "قفز إلى العقدة الأخيرة" } }, "editing": { "title": "تحرير", "drawing": { "title": "رسم", - "place_point": "أضف نقطة" + "add_point": "نمط \"إضافة نقطة\"", + "add_line": "نمط \"إضافة خط\"", + "add_area": "نمط \"إضافة مساحة\"", + "place_point": "إضافة نقطة", + "disable_snap": "اضغط مع الاستمرار لتعطيل ميزة الانجذاب للنقاط", + "stop_line": "إنهاء رسم خط أو مساحة" }, "operations": { "title": "عمليات", + "continue_line": "استكمال خط من العُقدة المُختارة", + "merge": "دمج العناصر المُختارة", + "disconnect": "فصل العناصر عند العُقدة المُختارة", "split": "افصل الخط إلى خطين عند نقطة التلاقي المُختارة", "reverse": "عكس الخط", + "move": "نقل العناصر المُختارة", + "rotate": "تدوير العناصر المُختارة", "orthogonalize": "جعله خط مستقيما / جعلها مساحة مربعة", - "delete": "حذف الميزات المحددة" + "circularize": "جعل الخطوط المغلقة أو المنطقة دائرية", + "reflect_long": "انعكاس العناصر خلال المحور الأطول", + "reflect_short": "انعكاس العناصر خلال المحور الأقصر", + "delete": "حذف العناصر المُختارة" }, "commands": { "title": "الأوامر", @@ -1197,6 +1221,7 @@ "placeholder": "...8 ,4 ,2" }, "aerialway/summer/access": { + "label": "دخول (في الصيف)", "options": { "both": "كلاهما", "entry": "مدخل", @@ -1323,7 +1348,8 @@ "label": "وقت الاستلام" }, "comment": { - "label": "التعليق على التغييرات" + "label": "التعليق على التغييرات", + "placeholder": "وصف موجز لمساهماتك وتعديلاتك (مطلوب)" }, "communication_multi": { "label": "أنواع الاتصال" @@ -1630,6 +1656,9 @@ "information": { "label": "النوع" }, + "intermittent": { + "label": "متقطع" + }, "internet_access": { "label": "خدمة إنترنت", "options": { @@ -1662,26 +1691,37 @@ "leaf_cycle": { "label": "دورة أوراق الشجر", "options": { - "evergreen": "دائم الخضرة" + "deciduous": "نفضية", + "evergreen": "دائمة الخضرة", + "mixed": "مختلط", + "semi_deciduous": "شبه نفضية", + "semi_evergreen": "شبه دائمة الخضرة" } }, "leaf_cycle_singular": { + "label": "دورة أوراق الشجر", "options": { - "evergreen": "دائم الخضرة" + "deciduous": "نفضية", + "evergreen": "دائمة الخضرة", + "semi_deciduous": "شبه نفضية", + "semi_evergreen": "شبه دائمة الخضرة" } }, "leaf_type": { "label": "نوع ورق الشجر", "options": { "broadleaved": "عريضة الأوراق", - "leafless": "بدون أوراق" + "leafless": "بدون أوراق", + "mixed": "مختلط", + "needleleaved": "إبرية" } }, "leaf_type_singular": { "label": "نوع ورق الشجر", "options": { "broadleaved": "عريضة الأوراق", - "leafless": "بدون أوراق" + "leafless": "بدون أوراق", + "needleleaved": "إبرية" } }, "leisure": { @@ -1729,6 +1769,9 @@ "memorial": { "label": "النوع" }, + "monitoring_multi": { + "label": "رصد" + }, "mtb/scale": { "placeholder": "0, 1, 2, 3..." }, @@ -1793,6 +1836,7 @@ "oneway": { "label": "مسار واحد", "options": { + "alternating": "بالتناوب", "no": "لا", "undefined": "يفترض أنها لا", "yes": "نعم" @@ -1801,6 +1845,7 @@ "oneway_yes": { "label": "مسار واحد", "options": { + "alternating": "بالتناوب", "no": "لا", "undefined": "يفترض أنها نعم", "yes": "نعم" @@ -1858,6 +1903,7 @@ "options": { "downhill": "انحدار", "ice_skate": "تزلج على الجليد", + "nordic": "شمال أوروبا", "playground": "ساحة لعب" } }, @@ -1874,6 +1920,12 @@ "playground/baby": { "label": "مقعد طفل" }, + "playground/max_age": { + "label": "الحد الأقصى للعمر" + }, + "playground/min_age": { + "label": "الحد الأدنى للعمر" + }, "population": { "label": "السكان" }, @@ -1889,6 +1941,9 @@ "railway": { "label": "النوع" }, + "recycling_accepts": { + "label": "يقبل" + }, "ref": { "label": "الرمز المرجعي" }, @@ -1905,6 +1960,9 @@ "ref_road_number": { "label": "رقم الطريق" }, + "ref_route": { + "label": "رقم المسار" + }, "ref_runway": { "label": "رقم المدرج" }, @@ -2076,6 +2134,9 @@ "toilets/disposal": { "label": "مردم نفايات" }, + "toll": { + "label": "رسوم" + }, "tomb": { "label": "النوع" }, @@ -2125,6 +2186,17 @@ "label": "النوع", "placeholder": "الافتراضي" }, + "usage_rail": { + "label": "إستعمال", + "options": { + "branch": "ثانوي", + "industrial": "صناعي", + "main": "رئيسي", + "military": "عسكري", + "test": "تجريبي", + "tourism": "سياحي" + } + }, "vending": { "label": "أنواع البضائع" }, @@ -2139,11 +2211,20 @@ "volcano/status": { "label": "حالة البركان", "options": { - "active": "نشط" + "active": "نشط", + "extinct": "خامد" } }, "volcano/type": { - "label": "نوع البركان" + "label": "نوع البركان", + "options": { + "scoria": "سكوريا", + "shield": "درعي", + "stratovolcano": "طبقي" + } + }, + "voltage": { + "label": "جهد كهربائي" }, "wall": { "label": "النوع" @@ -2177,7 +2258,7 @@ "terms": "عنوان" }, "aerialway": { - "name": "محطة النقل بالكابلات " + "name": "النقل بالكابلات " }, "aerialway/cable_car": { "name": "تلفريك", @@ -2191,8 +2272,12 @@ "name": "نقل البضائع بالكابلات ", "terms": "نقل البضائع بالكابلات " }, + "aerialway/pylon": { + "name": "برج التلفريك / المصعد التزلج", + "terms": "برج التلفريك ; المصعد التزلج" + }, "aerialway/station": { - "name": "محطة النقل بالكابلات " + "name": "محطة النقل بالكابلات" }, "aeroway": { "name": "جوي" @@ -2205,6 +2290,10 @@ "name": "ساحة المطار", "terms": "ساحة المطار" }, + "aeroway/gate": { + "name": "بوابة المطار", + "terms": "بوابة المطار" + }, "aeroway/hangar": { "name": "حظيرة الطائرات", "terms": "حظائر الطائرات" @@ -2221,9 +2310,17 @@ "name": "طريق للمدرج", "terms": "طريق للمدرج,طريق تدريج الطائرات" }, + "aeroway/terminal": { + "name": "محطة المطار", + "terms": "محطة المطار" + }, "amenity": { "name": "مرفق" }, + "amenity/animal_shelter": { + "name": "مأوى حيوانات", + "terms": "مأوى حيوانات; ملجأ" + }, "amenity/arts_centre": { "name": "مركز فنون", "terms": "مركز الفنون، معرض الفن، ساحة عرض، ملتقى فني" @@ -2240,6 +2337,10 @@ "name": "حانة", "terms": "بار , حانة , خمَّارَة ,مَشْرَب" }, + "amenity/bbq": { + "name": "مكان مخصص للشواء", + "terms": "شواء، باربيكيو" + }, "amenity/bench": { "name": "مقعد", "terms": "مقعد, مقعد طويل" @@ -2264,6 +2365,9 @@ "name": "تحويل أموال", "terms": "" }, + "amenity/bus_station": { + "name": "محطة حافلات" + }, "amenity/cafe": { "name": "مقهى", "terms": "مقهى, مطعم, ناد ليلي" @@ -2289,7 +2393,8 @@ "terms": "محطة شحن" }, "amenity/childcare": { - "name": "رعاية الأطفال" + "name": "رعاية الأطفال", + "terms": "رعاية الأطفال; حضانة" }, "amenity/cinema": { "name": "سينما", @@ -2299,25 +2404,48 @@ "name": "عيادة", "terms": "عيادة; مستوصف" }, + "amenity/clinic/abortion": { + "name": "عيادة الإجهاض", + "terms": "عيادة الإجهاض" + }, + "amenity/clinic/fertility": { + "name": "عيادة الخصوبة", + "terms": "عيادة الخصوبة" + }, "amenity/clock": { "name": "ساعة", "terms": "ساعة" }, "amenity/college": { - "name": "أرض كلية" + "name": "أرض كلية", + "terms": "أرض كلية" + }, + "amenity/community_centre": { + "name": "مركز اجتماعي", + "terms": "مركز اجتماعي" }, "amenity/compressed_air": { - "name": "هواء مضغوط" + "name": "هواء مضغوط", + "terms": "هواء مضغوط" }, "amenity/courthouse": { "name": "دار العدل", "terms": "مجمع المحاكم, دار العدل, دار القضاء" }, + "amenity/coworking_space": { + "name": "مساحة عمل مشتركة" + }, "amenity/dentist": { - "name": "طبيب أسنان" + "name": "طبيب أسنان", + "terms": "طبيب أسنان" }, "amenity/doctors": { - "name": "طبيب" + "name": "طبيب", + "terms": "طبيب" + }, + "amenity/dojo": { + "name": "دوجو / أكاديمية الفنون القتالية", + "terms": "دوجو; أكاديمية الفنون القتالية" }, "amenity/drinking_water": { "name": "مياه شرب", @@ -2334,6 +2462,9 @@ "name": "وجبات سريعة", "terms": "مأكولات السريعة" }, + "amenity/ferry_terminal": { + "name": "المحطة البحرية" + }, "amenity/fire_station": { "name": "محطة إطفاء حريق", "terms": "محطة إطفاء" @@ -2357,11 +2488,17 @@ "name": "أرض مستشفى", "terms": "أرض مستشفى; مستشفى" }, + "amenity/ice_cream": { + "name": "محل بيع المثلجات", + "terms": "مثلجات" + }, "amenity/internet_cafe": { - "name": "مقهى إنترنت" + "name": "مقهى إنترنت", + "terms": "مقهى إنترنت" }, "amenity/kindergarten": { - "name": "روضة أطفال" + "name": "روضة أطفال", + "terms": "روضة أطفال" }, "amenity/library": { "name": "مكتبة", @@ -2375,9 +2512,16 @@ "name": "موقف دراجات نارية", "terms": "دراجة نارية, دراجة بخارية; موقف; مواقف; ركن" }, + "amenity/music_school": { + "name": "مدرسة موسيقى", + "terms": "مدرسة موسيقى" + }, "amenity/nightclub": { "name": "ملهى ليلي" }, + "amenity/nursing_home": { + "name": "دار التمريض" + }, "amenity/parking": { "name": "موقف سيارات", "terms": "مواقف سيارات عامة ، مصف للسيارات، مواقف مركبات عمومية, مركن سيارات, جراج" @@ -2410,6 +2554,10 @@ "name": "مسجد", "terms": "مسجد, جامع" }, + "amenity/planetarium": { + "name": "قبة فلكية", + "terms": "قبة فلكية، قبة سماوية، بلانتاريوم" + }, "amenity/police": { "name": "شرطة", "terms": "مركز الشرطة, الشرطة " @@ -2422,6 +2570,10 @@ "name": "مكتب البريد", "terms": "دائرة البريد, مكتب البريد, مكتب بريد" }, + "amenity/prison": { + "name": "سجن", + "terms": "سجن" + }, "amenity/pub": { "name": "حانة", "terms": "مشرب, حانة, خمارة" @@ -2430,11 +2582,16 @@ "name": "محطة الحراسة", "terms": "محطة الحراسة" }, + "amenity/recycling": { + "name": "حاوية إعادة تدوير", + "terms": "حاوية إعادة تدوير" + }, "amenity/recycling_centre": { - "name": "مركز إعادة تدوير" + "name": "مركز إعادة تدوير", + "terms": "مركز إعادة تدوير" }, "amenity/register_office": { - "name": "مكتب تسجيل" + "name": "مكتب السجل المدني" }, "amenity/restaurant": { "name": "مطعم", @@ -2450,8 +2607,25 @@ "name": "مأوى", "terms": "مأوى, ملجأ, ملاذ, سقيفة, وقاء" }, + "amenity/social_facility": { + "name": "مؤسسة اجتماعية", + "terms": "مؤسسة اجتماعية" + }, "amenity/social_facility/food_bank": { - "name": "بنك غذاء" + "name": "بنك الطعام", + "terms": "بنك الطعام" + }, + "amenity/social_facility/group_home": { + "name": "دار المسنين", + "terms": "دار المسنين" + }, + "amenity/social_facility/homeless_shelter": { + "name": "ملجأ مشردين", + "terms": "ملجأ مشردين، مأوى" + }, + "amenity/social_facility/nursing_home": { + "name": "دار التمريض", + "terms": "دار التمريض" }, "amenity/studio": { "name": "أستوديو" @@ -2483,15 +2657,32 @@ "name": "أرض جامعة", "terms": "أرض جامعة, حرم جامعي" }, + "amenity/vending_machine": { + "name": "آلة بيع", + "terms": "آلة بيع" + }, "amenity/vending_machine/cigarettes": { - "name": "آلة بيع السجائر" + "name": "آلة بيع السجائر", + "terms": "سجائر" + }, + "amenity/vending_machine/drinks": { + "name": "آلة بيع المشروبات", + "terms": "مشروبات" + }, + "amenity/vending_machine/news_papers": { + "name": "آلة بيع الجرائد" + }, + "amenity/vending_machine/newspapers": { + "name": "آلة بيع الجرائد", + "terms": "جرائد" }, "amenity/vending_machine/parking_tickets": { "name": "ماكينة بيع تذاكر وقوف", "terms": "ماكينة تذاكر" }, "amenity/veterinary": { - "name": "طبيب حيوانات" + "name": "بيطري", + "terms": "بيطري، طبيب حيوانات" }, "amenity/waste_basket": { "name": "سلة مهملات", @@ -2505,6 +2696,30 @@ "name": "سطح الطريق", "terms": "" }, + "attraction/animal": { + "name": "حيوان", + "terms": "حيوان" + }, + "attraction/big_wheel": { + "name": "دولاب هواء", + "terms": "دولاب هواء; العجلة الكبيرة" + }, + "attraction/carousel": { + "name": "دوامة خيل", + "terms": "دوامة خيل" + }, + "attraction/maze": { + "name": "متاهة", + "terms": "متاهة" + }, + "attraction/pirate_ship": { + "name": "سفينة قراصنة", + "terms": "سفينة قراصنة" + }, + "attraction/roller_coaster": { + "name": "السفينة الدوارة", + "terms": "سفينة دوارة" + }, "barrier": { "name": "حاجز", "terms": "حاجز, عائق, تخم, قلعة محصنة, مدينة محصنة, مزلقان" @@ -2635,7 +2850,8 @@ "terms": "جراج; جراج سيارات; موقف; موقف سيارات; ركن; ركنة" }, "building/greenhouse": { - "name": "دفيئة زراعية" + "name": "دفيئة زراعية", + "terms": "دفيئة زراعية; بيت بلاستيكي; بيت زجاجي" }, "building/hospital": { "name": "مبنى مستشفى", @@ -2661,6 +2877,10 @@ "name": "مبنى روضة أطفال", "terms": "روضة; أطفال" }, + "building/mosque": { + "name": "مبنى المسجد", + "terms": "مبنى المسجد" + }, "building/public": { "name": "مبنى عمومي", "terms": "عام; عمومي" @@ -2685,12 +2905,40 @@ "name": "مبنى شبه منفصل", "terms": "" }, + "building/stadium": { + "name": "مبنى الملعب", + "terms": "مبنى الملعب" + }, + "building/temple": { + "name": "مبنى المعبد", + "terms": "مبنى المعبد" + }, "building/train_station": { "name": "محطة قطار" }, + "building/transportation": { + "name": "مبنى للنقل العام", + "terms": "مبنى للنقل العام" + }, "building/university": { "name": "مبنى جامعي" }, + "building/warehouse": { + "name": "مستودع", + "terms": "مستودع; مخزن" + }, + "club": { + "name": "نادي", + "terms": "نادي" + }, + "craft": { + "name": "حرفة", + "terms": "حرفة" + }, + "craft/basket_maker": { + "name": "صانع السلال", + "terms": "صانع السلال" + }, "craft/beekeeper": { "name": "مربي النحل", "terms": "مربي النحل, نحال" @@ -2712,7 +2960,8 @@ "terms": "بيرة; جعة" }, "craft/carpenter": { - "name": "نجار" + "name": "نجار", + "terms": "نجار" }, "craft/caterer": { "name": "منظم حفلات", @@ -2730,41 +2979,99 @@ "name": "كهربائي", "terms": "كهربائي" }, + "craft/electronics_repair": { + "name": "خدمة تصليح الأجهزة الإلكترونية", + "terms": "خدمة تصليح الأجهزة الإلكترونية" + }, "craft/gardener": { - "name": "بستاني" + "name": "بستاني", + "terms": "بستاني" + }, + "craft/handicraft": { + "name": "حرفي", + "terms": "حرفي" }, "craft/jeweler": { "name": "بائع مجوهرات" }, + "craft/locksmith": { + "name": "قفال - صانع أقفال" + }, + "craft/metal_construction": { + "name": "البناء المعدني", + "terms": "البناء المعدني" + }, "craft/painter": { - "name": "دهّان" + "name": "دهّان", + "terms": "دهّان" }, "craft/photographer": { - "name": "مصور" + "name": "مصور", + "terms": "مصور" + }, + "craft/photographic_laboratory": { + "name": "مختبر التصوير", + "terms": "مختبر التصوير" }, "craft/plumber": { - "name": "سمكري" + "name": "سباك", + "terms": "سباك; سمكري" }, "craft/pottery": { "name": "مصنع فخار وخزف", "terms": "فخار; خزف; بورسلين" }, + "craft/roofer": { + "name": "بنّاء السقف", + "terms": "بنّاء السقف" + }, "craft/saddler": { - "name": "صانع سراج" + "name": "صانع سراج", + "terms": "صانع سراج" + }, + "craft/sailmaker": { + "name": "صانع أشرعة", + "terms": "صانع أشرعة" + }, + "craft/sawmill": { + "name": "منشرة", + "terms": "منشرة" + }, + "craft/scaffolder": { + "name": "مركب السقالة", + "terms": "مركب السقالة" + }, + "craft/sculptor": { + "name": "نحّات", + "terms": "نحّات" }, "craft/shoemaker": { - "name": "إسكافي" + "name": "إسكافي", + "terms": "إسكافي" }, "craft/tailor": { "name": "خياط" }, "craft/tiler": { - "name": "خياط" + "name": "مركِّب البلاط", + "terms": "مركِّب البلاط" + }, + "craft/upholsterer": { + "name": "منجد", + "terms": "منجد; تنجيد; أثاث" + }, + "craft/watchmaker": { + "name": "ساعاتي (ساعات يدوية)", + "terms": "ساعاتي" }, "emergency/ambulance_station": { "name": "محطة إسعاف", "terms": "محطة إسعاف, محطة اسعاف" }, + "emergency/defibrillator": { + "name": "مزيل الرجفان", + "terms": "مزيل الرجفان" + }, "emergency/fire_hydrant": { "name": "خرطوم إطفاء", "terms": "خرطوم; مطافئ; إطفاء; اطفاء" @@ -2793,6 +3100,54 @@ "name": "ممر مائي", "terms": "ممر مائي; ممر; مائي; ماء" }, + "healthcare": { + "name": "مرفق الرعاية الصحية", + "terms": "مرفق الرعاية الصحية" + }, + "healthcare/alternative": { + "name": "متخصص في الطب البديل", + "terms": "متخصص في الطب البديل" + }, + "healthcare/audiologist": { + "name": "أخصائي السمع", + "terms": "أخصائي السمع" + }, + "healthcare/blood_donation": { + "name": "مركز التبرع بالدم", + "terms": "تبرع بالدم" + }, + "healthcare/laboratory": { + "name": "مختبر طبي", + "terms": "مختبر طبي; مخبر التحاليل الطبية" + }, + "healthcare/occupational_therapist": { + "name": "أخصائي العلاج الوظيفي", + "terms": "أخصائي العلاج الوظيفي" + }, + "healthcare/optometrist": { + "name": "أخصائي البصريات", + "terms": "أخصائي البصريات" + }, + "healthcare/physiotherapist": { + "name": "أخصائي العلاج الطبيعي", + "terms": "أخصائي العلاج الطبيعي" + }, + "healthcare/podiatrist": { + "name": "طبيب الأقدام", + "terms": "طبيب الأقدام; الأرجل" + }, + "healthcare/psychotherapist": { + "name": "معالج نفسي", + "terms": "معالج نفسي" + }, + "healthcare/rehabilitation": { + "name": "مركز إعادة التأهيل", + "terms": "مركز إعادة التأهيل" + }, + "healthcare/speech_therapist": { + "name": "معالج النطق", + "terms": "معالج النطق، نطق" + }, "highway": { "name": "طريق سريع" }, @@ -2800,6 +3155,13 @@ "name": "طريق الخيول", "terms": "طريق الخيول, ممر للخيول" }, + "highway/bus_stop": { + "name": "موقف حافلات" + }, + "highway/corridor": { + "name": "ممر داخلي", + "terms": "ممر داخلي; رواق" + }, "highway/crossing": { "name": "معبر طريق", "terms": "معبر; عبور; عبور طريق; عبور شارع; معبر شارع; معبر طريق" @@ -2812,6 +3174,10 @@ "name": "مسار دراجات", "terms": "طريق دراجات; مسار دراجات" }, + "highway/elevator": { + "name": "مصعد", + "terms": "مصعد" + }, "highway/footway": { "name": "طريق مشي بالأقدام", "terms": "ممشى بالأقدام" @@ -2839,6 +3205,14 @@ "name": "طريق", "terms": "طريق , ممر , مسلك , درب" }, + "highway/pedestrian_area": { + "name": "منطقة للمشاة", + "terms": "منطقة للمشاة" + }, + "highway/pedestrian_line": { + "name": "شارع للمشاة", + "terms": "شارع للمشاة" + }, "highway/primary": { "name": "طريق رئيسي", "terms": "شارع رئيسي" @@ -2847,6 +3221,10 @@ "name": "رابط لطريق رئيسي", "terms": "رابط لطريق رئيسي" }, + "highway/raceway": { + "name": "مضمار سباق السيارات والدراجات النارية", + "terms": "مضمار سباق، سيارات، دراجات نارية" + }, "highway/residential": { "name": "طريق سكني", "terms": "شارع سكني" @@ -2896,7 +3274,8 @@ "terms": "خدمة سيارات; منطقة خدمة سيارات; منطقة خدمية" }, "highway/speed_camera": { - "name": "كاميرا مراقبة" + "name": "كاميرا مراقبة السرعة", + "terms": "كاميرا مراقبة السرعة" }, "highway/steps": { "name": "درج", @@ -2907,7 +3286,8 @@ "terms": "إشارة توقف، ممنوع الوقوف، قف" }, "highway/street_lamp": { - "name": "مصباح الشارع" + "name": "مصباح الشارع", + "terms": "مصباح الشارع" }, "highway/tertiary": { "name": "طريق ثالثي", @@ -2941,6 +3321,10 @@ "name": "دائرة رجوع", "terms": "دائرة رجوع" }, + "highway/unclassified": { + "name": "طريق غير مصنف", + "terms": "طريق غير مصنف" + }, "historic": { "name": "موقع تاريخي", "terms": "موقع تأريخي" @@ -2954,8 +3338,8 @@ "terms": "صخرة حدودية" }, "historic/castle": { - "name": "حصن", - "terms": "حصن" + "name": "حصن / قلعة", + "terms": "حصن; قلعة; قصر" }, "historic/memorial": { "name": "نصب تذكاري", @@ -2969,16 +3353,25 @@ "name": "آثار", "terms": "أطلال" }, + "historic/tomb": { + "name": "قبر / ضريح", + "terms": "قبر، ضريح" + }, "historic/wayside_shrine": { "name": "مقام نصراني على الطريق", "terms": "مقام نصراني على الطريق" }, + "junction": { + "name": "مفترق طرق", + "terms": "مفترق طرق" + }, "landuse": { "name": "أرض", "terms": "<ترجم بالمصطلحات أو المرادفات لـ \"الأراضي\"، فاصلا المدخلات بالفاصلة \",\">" }, "landuse/aquaculture": { - "name": "مزرعة سمكية" + "name": "مزرعة سمكية", + "terms": "مزرعة سمكية" }, "landuse/basin": { "name": "حوض", @@ -3000,7 +3393,8 @@ "name": "أرض زراعية" }, "landuse/farmland": { - "name": "أرض زراعية" + "name": "أرض زراعية", + "terms": "أرض زراعية، فلاحة" }, "landuse/farmyard": { "name": "فناء المزرعة", @@ -3014,10 +3408,30 @@ "name": "عشب", "terms": "عشب, غطاء أخضر" }, + "landuse/greenhouse_horticulture": { + "name": "الدفيئات الزراعية", + "terms": "الدفيئات الزراعية" + }, + "landuse/harbour": { + "name": "مرفأ", + "terms": "مرفأ، ميناء" + }, "landuse/industrial": { "name": "منطقة صناعية", "terms": "صناعية; صناعي; صناعات; منطقة صناعات; منطقة صناعة; صناعة; صنع" }, + "landuse/industrial/scrap_yard": { + "name": "مقبرة السيارات", + "terms": "مقبرة السيارات" + }, + "landuse/industrial/slaughterhouse": { + "name": "مسلخ", + "terms": "مسلخ" + }, + "landuse/landfill": { + "name": "مكب نفايات", + "terms": "مكب نفايات" + }, "landuse/meadow": { "name": "مرج", "terms": " مرج, روضة, مخضرة" @@ -3026,6 +3440,22 @@ "name": "منطقة عسكرية", "terms": "جيش, قوات مسلحة, عسكرية" }, + "landuse/military/airfield": { + "name": "قاعدة جوية", + "terms": "قاعدة جوية، مطار عسكري" + }, + "landuse/military/barracks": { + "name": "ثكنة عسكرية", + "terms": "ثكنة عسكرية" + }, + "landuse/military/bunker": { + "name": "ملجأ عسكري", + "terms": "ملجأ عسكري" + }, + "landuse/military/checkpoint": { + "name": "نقطة تفتيش عسكرية", + "terms": "نقطة تفتيش عسكرية" + }, "landuse/military/danger_area": { "name": "منطقة خطرة", "terms": "منطقة خطر; خطر" @@ -3034,11 +3464,16 @@ "name": "قاعدة بحرية", "terms": "بحرية; بحري; بحر; قاعدة" }, + "landuse/military/nuclear_explosion_site": { + "name": "موقع الانفجار النووي", + "terms": "موقع الانفجار النووي" + }, "landuse/military/office": { "name": "مكتب عسكري" }, "landuse/military/range": { - "name": "نطاق عسكري" + "name": "ميدان الرماية العسكرية", + "terms": "ميدان الرماية العسكرية" }, "landuse/military/training_area": { "name": "منطقة تدريب", @@ -3056,6 +3491,10 @@ "name": "محجر", "terms": "محجر" }, + "landuse/recreation_ground": { + "name": "ميدان الألعاب", + "terms": "ميدان الألعاب" + }, "landuse/residential": { "name": "منطقة سكنية", "terms": "منطقة سكانية; سكان; سكنية; سكن; منطقة سكن" @@ -3072,6 +3511,10 @@ "name": "الترفيه", "terms": "الترفيه" }, + "leisure/beach_resort": { + "name": "منتجع الشاطئ", + "terms": "منتجع الشاطئ" + }, "leisure/bowling_alley": { "name": "بولينغ", "terms": "بولينغ، بولينج" @@ -3084,6 +3527,10 @@ "name": "قاعة الرقص", "terms": "قاعة الرقص" }, + "leisure/dancing_school": { + "name": "مدرسة الرقص", + "terms": "مدرسة الرقص" + }, "leisure/dog_park": { "name": "حديقة كلاب", "terms": "حديقة كلاب" @@ -3102,7 +3549,7 @@ }, "leisure/golf_course": { "name": "معلب جولف", - "terms": "معلب جولف" + "terms": "معلب جولف، غولف" }, "leisure/horse_riding": { "name": "منشأة ركوب خيل", @@ -3116,12 +3563,17 @@ "name": "مرسى السفن", "terms": "حوض سفن, رصيف سفن, مرسى سفن" }, + "leisure/miniature_golf": { + "name": "ملعب الجولف المصغرة", + "terms": "ملعب الجولف المصغرة، غولف" + }, "leisure/nature_reserve": { - "name": "محمية طبيعية" + "name": "محمية طبيعية", + "terms": "محمية طبيعية" }, "leisure/park": { - "name": "حديقة", - "terms": "منتزه" + "name": "منتزه", + "terms": "منتزه، حديقة" }, "leisure/pitch": { "name": "ملعب رياضي", @@ -3139,10 +3591,26 @@ "name": "ملعب كرة السلة", "terms": "ملعب كرة السلة" }, + "leisure/pitch/beachvolleyball": { + "name": "ملعب كرة الطائرة الشاطئية", + "terms": "ملعب" + }, + "leisure/pitch/cricket": { + "name": "ملعب كريكت", + "terms": "ملعب كريكت" + }, "leisure/pitch/equestrian": { "name": "حلبة ركوب خيل", "terms": "حلبة; ساحة; حلبة ركوب; ساحة ركوب; خيل; ركوب خيل" }, + "leisure/pitch/rugby_league": { + "name": "ملعب اتحاد الرغبي", + "terms": "ملعب اتحاد الرغبي، رجبي" + }, + "leisure/pitch/rugby_union": { + "name": "ملعب دوري الرغبي", + "terms": "ملعب دوري الرغبي، رجبي" + }, "leisure/pitch/skateboard": { "name": "حديقة تزلج", "terms": "حديقة تزلج، ساحة تزلج" @@ -3151,6 +3619,10 @@ "name": "ملعب كرة القدم", "terms": "ملعب كرة القدم" }, + "leisure/pitch/table_tennis": { + "name": "طاولة كرة المضرب", + "terms": "طاولة كرة المضرب" + }, "leisure/pitch/tennis": { "name": "ملعب تنس", "terms": "معلب كرة التنس" @@ -3167,13 +3639,21 @@ "name": "منتجع", "terms": "منتجع" }, + "leisure/running_track": { + "name": "مضمار ركض", + "terms": "مضمار ركض" + }, + "leisure/sauna": { + "name": "سونا", + "terms": "سونا" + }, "leisure/slipway": { "name": "مزلقة سفن", "terms": "مزلقة سفن" }, "leisure/sports_centre": { "name": "مركز رياضي", - "terms": " مركز رياضي، نادي رياضي " + "terms": " مركز رياضي; نادي رياضي; مجمع رياضي" }, "leisure/sports_centre/swimming": { "name": "مبنى حوض سباحة", @@ -3216,22 +3696,40 @@ "terms": "جسر" }, "man_made/chimney": { - "name": "مدخنة" + "name": "مدخنة", + "terms": "مدخنة" + }, + "man_made/crane": { + "name": "رافعة", + "terms": "رافعة" }, "man_made/cutline": { "name": "خط الفصل", "terms": "خط الفصل" }, + "man_made/flagpole": { + "name": "سارية العلم", + "terms": "سارية العلم" + }, "man_made/lighthouse": { "name": "منارة", "terms": "منارة , فنارة" }, + "man_made/monitoring_station": { + "name": "محطة الرصد", + "terms": "محطة الرصد" + }, "man_made/observation": { "name": "برج مراقبة", "terms": "برمج المراقبة، أبراج المراقبة، أبراج المشاهدة، " }, + "man_made/observatory": { + "name": "مرصد", + "terms": "مرصد" + }, "man_made/petroleum_well": { - "name": "بئر نفط" + "name": "بئر نفط", + "terms": "بئر نفط، بترول" }, "man_made/pier": { "name": "رصيف بحري", @@ -3242,20 +3740,24 @@ "terms": "خط أنابيب" }, "man_made/pumping_station": { - "name": "محطة ضخ" + "name": "محطة ضخ", + "terms": "محطة ضخ" }, "man_made/silo": { "name": "صومعة", "terms": "صومعة; صومعة غلال" }, "man_made/storage_tank": { - "name": "خزان" + "name": "خزان", + "terms": "خزان" }, "man_made/surveillance": { - "name": "مراقبة" + "name": "مراقبة", + "terms": "مراقبة" }, "man_made/surveillance_camera": { - "name": "كاميرا مراقبة" + "name": "كاميرا مراقبة", + "terms": "كاميرا مراقبة" }, "man_made/survey_point": { "name": "نقطة مسح", @@ -3274,7 +3776,8 @@ "terms": "خزان مائي" }, "man_made/water_well": { - "name": "بئر ماء" + "name": "بئر ماء", + "terms": "بئر ماء" }, "man_made/water_works": { "name": "محطة مياه", @@ -3284,6 +3787,10 @@ "name": "طاحونة مائية", "terms": "طاحونة مائية" }, + "man_made/windmill": { + "name": "طاحونة هوائية", + "terms": "طاحونة هوائية" + }, "man_made/works": { "name": "مصنع", "terms": "مصنع" @@ -3332,20 +3839,29 @@ "name": "مرج", "terms": "مرج" }, + "natural/mud": { + "name": "وحل", + "terms": "وحل، طين" + }, "natural/peak": { "name": "قمة", "terms": "قمة, ذروة" }, + "natural/ridge": { + "name": "نتوء جبلي", + "terms": "نتوء جبلي، قمة" + }, "natural/sand": { - "name": "رمل" + "name": "رمل", + "terms": "رمل" }, "natural/scree": { "name": "ركام حجارة", "terms": "ركام حجارة، تلة، مجموعة صخور، تلة حصاة" }, "natural/scrub": { - "name": "أدغال", - "terms": "دغل; أدغال" + "name": "أراضي الأشجار القمئية", + "terms": "دغل; أدغال; أراضي الأشجار القمئية" }, "natural/spring": { "name": "نبع", @@ -3359,7 +3875,8 @@ "name": "خط أشجار" }, "natural/volcano": { - "name": "بركان" + "name": "بركان", + "terms": "بركان" }, "natural/water": { "name": "مياه", @@ -3410,14 +3927,19 @@ }, "office/association": { "name": "جمعية ", - "terms": "جمعية، منظمة غير ربحية " + "terms": "جمعية، منظمة غير ربحية" }, "office/charity": { "name": "منظمة خيرية", "terms": "منظمة خيرية" }, "office/company": { - "name": "مكتب شركة" + "name": "مكتب شركة", + "terms": "إدارة شركة، إدارة مؤسسة، إدارة عامة" + }, + "office/coworking": { + "name": "مساحة عمل مشتركة", + "terms": "مساحة عمل مشتركة" }, "office/educational_institution": { "name": "مؤسسة تعليمية ", @@ -3427,6 +3949,10 @@ "name": "مكتب التوظيف ", "terms": "إدارة شؤون الموظفين، مكتب العمل" }, + "office/energy_supplier": { + "name": "شركة مرافق الكهرباء", + "terms": "شركة مرافق الكهرباء" + }, "office/estate_agent": { "name": "مكتب عقاري", "terms": "الطابو، دائرة السجل العقاري، إدارة تسجيل الممتلكات" @@ -3448,17 +3974,25 @@ "terms": "رئاسة الوزراء، إدارة الدولة، المكتب العام، " }, "office/government/register_office": { - "name": "مكتب تسجيل", - "terms": "مكتب تسجيل" + "name": "مكتب السجل المدني", + "terms": "مكتب السجل المدني" }, "office/government/tax": { "name": "مكتب الضرائب", "terms": "مكتب الضرائب" }, + "office/guide": { + "name": "مكتب الدليل السياحي", + "terms": "مكتب الدليل السياحي; مكتب المرشد السياحي" + }, "office/insurance": { "name": "مكتب تأمينات", "terms": "مديرية المعاشات، دائرة التأمينات الاجتماعية، إدارة التأمين" }, + "office/it": { + "name": "متخصص في تكنولوجيا المعلومات", + "terms": "متخصص في تكنولوجيا المعلومات; معلوماتية" + }, "office/lawyer": { "name": "مكتب قانوني ", "terms": "مكتب محاماة، اﻹدارة القانونية، المحكمة،" @@ -3520,6 +4054,10 @@ "name": "شركة المياه", "terms": "شركة المياه" }, + "piste": { + "name": "منحدر تزلج", + "terms": "منحدر تزلج" + }, "place": { "name": "قصر" }, @@ -3538,6 +4076,10 @@ "name": "جزيرة", "terms": "جزيرة" }, + "place/islet": { + "name": "جزيرة صغيرة", + "terms": "جزيرة صغيرة" + }, "place/isolated_dwelling": { "name": "مساكن متفرقة", "terms": "مساكن متفرقة" @@ -3547,7 +4089,12 @@ "terms": "موقع" }, "place/neighbourhood": { - "name": "حي سكني" + "name": "حي سكني", + "terms": "حي سكني" + }, + "place/plot": { + "name": "قطعة الأرض", + "terms": "قطعة الأرض" }, "place/square": { "name": "ساحة", @@ -3615,6 +4162,34 @@ "name": "محول كهربائي", "terms": "محول الكهربائي" }, + "public_transport/linear_platform_bus": { + "name": "موقف حافلات", + "terms": "موقف حافلات" + }, + "public_transport/linear_platform_train": { + "name": "رصيف سكة حديد", + "terms": "رصيف سكة حديد" + }, + "public_transport/platform_train": { + "name": "رصيف سكة حديد", + "terms": "رصيف سكة حديد" + }, + "public_transport/station_aerialway": { + "name": "محطة النقل بالكابلات", + "terms": "محطة النقل بالكابلات; محطة تلفريك" + }, + "public_transport/station_bus": { + "name": "محطة الحافلات", + "terms": "محطة الحافلات" + }, + "public_transport/station_subway": { + "name": "محطة مترو", + "terms": "محطة مترو" + }, + "public_transport/station_train": { + "name": "محطة القطار", + "terms": "محطة القطار" + }, "railway": { "name": "سكة حديد" }, @@ -3638,18 +4213,31 @@ "name": "قطار جبلي مائل", "terms": "قطار جبلي مائل" }, + "railway/halt": { + "name": "موقف القطار" + }, "railway/level_crossing": { "name": "معبر سكة حديد (طريق)", "terms": "معبر سكة حديد; معبر" }, + "railway/light_rail": { + "name": "قطار خفيف", + "terms": "قطار خفيف" + }, "railway/monorail": { "name": "سكة حديدة مفردة", "terms": "سكة حديدة مفردة" }, + "railway/platform": { + "name": "رصيف سكة حديد" + }, "railway/rail": { "name": "قطار", "terms": "قطار" }, + "railway/station": { + "name": "محطة سكة حديد" + }, "railway/subway": { "name": "مترو الأنفاق", "terms": "مترو الأنفاق" @@ -3662,10 +4250,16 @@ "name": "ترام", "terms": "ترام" }, + "railway/tram_stop": { + "name": "موقف ترام" + }, "relation": { "name": "علاقة", "terms": "علاقة" }, + "roundabout": { + "name": "دوار مروري" + }, "route/ferry": { "name": "مسار عبّارة", "terms": "مسار عبّارة, مسار سفن" @@ -3678,6 +4272,14 @@ "name": "محل خمور", "terms": "محل خمور" }, + "shop/appliance": { + "name": "متجر الأجهزة المنزلية", + "terms": "متجر الأجهزة المنزلية" + }, + "shop/art": { + "name": "متجر الفنون", + "terms": "متجر فنون" + }, "shop/baby_goods": { "name": "متجر سلع أطفال" }, @@ -3689,6 +4291,9 @@ "name": "مخبز", "terms": "مخبز" }, + "shop/bathroom_furnishing": { + "name": "متجر أثاث الحمام" + }, "shop/beauty": { "name": "محل تجميل", "terms": "محل تجميل" @@ -3702,7 +4307,8 @@ "terms": "محل دراجات هوائية; متجر دراجات; محل دراجات; بائع دراجات" }, "shop/books": { - "name": "متجر كتب" + "name": "متجر كتب", + "terms": "مكتبة، كتب" }, "shop/boutique": { "name": "بوتيك", @@ -3712,6 +4318,10 @@ "name": "جزار", "terms": "جزار, محل بيع لحوم. محل جزارة, لحوم" }, + "shop/candles": { + "name": "متجر الشموع", + "terms": "متجر الشموع" + }, "shop/car": { "name": "وكالة سيارات", "terms": "وكالة سيارات" @@ -3725,10 +4335,12 @@ "terms": "محل تصليح سيارات; ورشة تصليح; ورشة; ميكانيكي" }, "shop/carpet": { - "name": "متجر سجاد" + "name": "متجر سجاد", + "terms": "متجر سجاد; زرابي" }, "shop/cheese": { - "name": "متجر أجبان" + "name": "متجر أجبان", + "terms": "متجر أجبان" }, "shop/chocolate": { "name": "متجر شوكولاتة" @@ -3737,6 +4349,10 @@ "name": "محل ملابس", "terms": "محل بيع ملابس" }, + "shop/coffee": { + "name": "متجر القهوة", + "terms": "متجر القهوة" + }, "shop/computer": { "name": "محل حاسوب", "terms": "محل حاسوب" @@ -3752,6 +4368,22 @@ "shop/copyshop": { "name": "متجر نسخ وتصوير" }, + "shop/cosmetics": { + "name": "متجر مستحضرات التجميل", + "terms": "متجر مستحضرات التجميل" + }, + "shop/craft": { + "name": "متجر الفنون والحرف", + "terms": "متجر الفنون والحرف" + }, + "shop/curtain": { + "name": "محل بيع الستائر", + "terms": "ستائر" + }, + "shop/dairy": { + "name": "متجر الألبان", + "terms": "متجر الألبان، الألبان" + }, "shop/deli": { "name": "محل أطعمة لذيذة", "terms": "محل أطعمة لذيذة, ديلي" @@ -3768,6 +4400,10 @@ "name": "محل إلكترونيات", "terms": "محل إلكترونيات" }, + "shop/fabric": { + "name": "محل بيع الأقمشة", + "terms": "الأقمشة" + }, "shop/farm": { "name": "المنتج", "terms": "المنتج" @@ -3803,18 +4439,42 @@ "name": "محل أجهزة", "terms": "محل بيع عتاد" }, + "shop/hearing_aids": { + "name": "متجر السماعات الأذن الطبية", + "terms": "سماعات الأذن الطبية; معينات سمعية; أجهزة تقوية السمع; مساعدات السمع" + }, + "shop/herbalist": { + "name": "محل بيع الأعشاب الطبية", + "terms": "محل بيع الأعشاب الطبية" + }, "shop/hifi": { "name": "محل بيع أجهزة عالية الدقة", "terms": "محل بيع أجهزة عالية الدقة" }, + "shop/houseware": { + "name": "متجر الأدوات المنزلية", + "terms": "متجر الأدوات المنزلية" + }, + "shop/interior_decoration": { + "name": "متجر الديكور الداخلي", + "terms": "متجر الديكور الداخلي" + }, "shop/jewelry": { "name": "محل بيع مجوهرات", "terms": "محل بيع المجوهرات, محل بيع الذهب" }, + "shop/kiosk": { + "name": "كشك", + "terms": "كشك" + }, "shop/laundry": { "name": "محل غسيل ملابس", "terms": "غسيل ملابس" }, + "shop/leather": { + "name": "متجر المنتجات الجلدية", + "terms": "متجر المنتجات الجلدية" + }, "shop/locksmith": { "name": "محل أقفال", "terms": "صانع اﻷقفال، أقفال، حداد، " @@ -3823,6 +4483,14 @@ "name": "مركز تسوق مول", "terms": "مركز تسوق, مول" }, + "shop/massage": { + "name": "صالون التدليك", + "terms": "صالون التدليك" + }, + "shop/medical_supply": { + "name": "متجر مستلزمات طبية", + "terms": "متجر مستلزمات طبية" + }, "shop/mobile_phone": { "name": "محل بيع هواتف", "terms": "محل بيع هواتف" @@ -3835,10 +4503,38 @@ "name": "محل بيع موسيقى", "terms": "محل بيع الموسيقى" }, + "shop/musical_instrument": { + "name": "محل بيع الآلات الموسيقية", + "terms": "محل بيع الآلات الموسيقية" + }, + "shop/newsagent": { + "name": "محل بيع الجرائد", + "terms": "جرائد" + }, + "shop/nutrition_supplements": { + "name": "متجر المكملات الغذائية", + "terms": "متجر المكملات الغذائية، مكملات غذائية" + }, "shop/optician": { "name": "محل بيع نظارات", "terms": "محل بيع نظارات" }, + "shop/organic": { + "name": "محل بيع المنتجات العضوية", + "terms": "منتجات عضوية" + }, + "shop/paint": { + "name": "متجر الطلاء", + "terms": "طلاء" + }, + "shop/pastry": { + "name": "متجر الحلويات", + "terms": "متجر الحلويات" + }, + "shop/perfumery": { + "name": "متجر العطور", + "terms": "عطور" + }, "shop/pet": { "name": "محل حيوانات أليفة", "terms": "محل حيوانات أليفة" @@ -3851,6 +4547,18 @@ "name": "متجر ألعاب نارية", "terms": "ألعاب نارية" }, + "shop/radiotechnics": { + "name": "متجر المكونات الإلكترونية", + "terms": "متجر المكونات الإلكترونية" + }, + "shop/seafood": { + "name": "مسمكة / متجر المأكولات البحرية", + "terms": "مأكولات بحرية، مسمكة ، سمك" + }, + "shop/second_hand": { + "name": "محل لبيع البضائع المستعملة", + "terms": "محل لبيع البضائع المستعملة" + }, "shop/shoes": { "name": "محل بيع أحذية", "terms": "محل بيع أحذية" @@ -3867,6 +4575,22 @@ "name": "سوبر ماركت", "terms": "سوبرماركت, متجر كبير" }, + "shop/tailor": { + "name": "خياط", + "terms": "خياط" + }, + "shop/tea": { + "name": "محل بيع الشاي", + "terms": "محل بيع الشاي، شاي" + }, + "shop/tiles": { + "name": "محل بيع البلاط", + "terms": "محل بيع البلاط، بلاط، خزف" + }, + "shop/tobacco": { + "name": "محل بيع التبغ", + "terms": "تبغ، سيجارة" + }, "shop/toys": { "name": "محل ألعاب", "terms": "محل ألعاب" @@ -3894,9 +4618,17 @@ "name": "متجر العاب الفيديو", "terms": "متجر العاب الفيديو" }, + "shop/watches": { + "name": "متجر الساعات اليدوية", + "terms": "متجر الساعات اليدوية" + }, "shop/weapons": { "name": "متجر أسلحة" }, + "shop/wholesale": { + "name": "محل بيع بالجملة", + "terms": "محل بيع بالجملة" + }, "shop/wine": { "name": "متجر نبيذ" }, @@ -3905,11 +4637,16 @@ "terms": "سياحة" }, "tourism/alpine_hut": { - "name": "داراستراحة", + "name": "كوخ جبلي", "terms": "دار استراحة" }, + "tourism/apartment": { + "name": "شقة سياحية", + "terms": "شقة سياحية" + }, "tourism/aquarium": { - "name": "حوض سمك" + "name": "حوض سمك", + "terms": "حوض سمك" }, "tourism/artwork": { "name": "عمل فني", @@ -3919,16 +4656,25 @@ "name": "معلم سياحي", "terms": "معلم سياحي, مكان سياحي" }, + "tourism/camp_site": { + "name": "مكان التخييم", + "terms": "مكان التخييم" + }, "tourism/caravan_site": { "name": "موقف عربات كبيرة", "terms": "موقف عربات كبيرة" }, + "tourism/chalet": { + "name": "كوخ لقضاء العطلة", + "terms": "كوخ لقضاء العطلة" + }, "tourism/gallery": { - "name": "رواق فنون" + "name": "رواق الفنون", + "terms": "رواق الفنون، متحف الفنون" }, "tourism/guest_house": { - "name": "استراحة", - "terms": "استراحة" + "name": "دار الضيافة", + "terms": "دار الضيافة" }, "tourism/hostel": { "name": "نزل", @@ -3939,14 +4685,20 @@ "terms": "فندق" }, "tourism/information": { - "name": "معلومات", - "terms": "معلومات" + "name": "معلومات سياحية", + "terms": "معلومات سياحية" + }, + "tourism/information/board": { + "name": "لوحة المعلومات", + "terms": "لوحة المعلومات" }, "tourism/information/map": { - "name": "خريطة" + "name": "خريطة", + "terms": "خريطة" }, "tourism/information/office": { - "name": "مكتب معلومات السياحة" + "name": "مكتب المعلومات السياحية", + "terms": "مكتب المعلومات السياحية" }, "tourism/motel": { "name": "فندق رخيص", @@ -3976,6 +4728,10 @@ "name": "مخفف سرعة", "terms": "مطب; مخفف; مهديء; مهدئ; ممهل; تخفيف; تمهيل; مطب صناعي" }, + "traffic_calming/bump": { + "name": "مطب", + "terms": "مطب" + }, "type/boundary": { "name": "حدود", "terms": "حدود" @@ -3991,6 +4747,14 @@ "name": "قيود", "terms": "قيود" }, + "type/restriction/no_left_turn": { + "name": "ممنوع الإنعطاف لليسار", + "terms": "ممنوع الإنعطاف لليسار" + }, + "type/restriction/no_right_turn": { + "name": "ممنوع الإنعطاف لليمين", + "terms": "ممنوع الإنعطاف لليمين" + }, "type/restriction/no_u_turn": { "name": "لا يوجد دوران", "terms": "لا يوجد دوران" @@ -4017,7 +4781,7 @@ }, "type/route/bus": { "name": "مسار الباصات", - "terms": "مسار باصات" + "terms": "مسار باصات، حافلات" }, "type/route/detour": { "name": "مسار طريق جانبي", @@ -4039,10 +4803,18 @@ "name": "مسار ركوب", "terms": "مسار ركوب" }, + "type/route/light_rail": { + "name": "مسار القطار الخفيف", + "terms": "قطار خفيف، ترام" + }, "type/route/pipeline": { "name": "مسار خط أنابيب", "terms": "مسار خط أنابيب" }, + "type/route/piste": { + "name": "مسار التزلج", + "terms": "تزلج" + }, "type/route/power": { "name": "مسار خط كهربائي", "terms": "مسار الطاقة, مسار الكهرباء" @@ -4051,6 +4823,10 @@ "name": "مسار طريق", "terms": "مسار الطريق" }, + "type/route/subway": { + "name": "مسار مترو", + "terms": "مسار مترو" + }, "type/route/train": { "name": "مسار قطار", "terms": "مسار القطار" @@ -4067,6 +4843,10 @@ "name": "موقع", "terms": "موقع" }, + "type/waterway": { + "name": "مجرى مائي", + "terms": "مجرى مائي، ممر مائي" + }, "vertex": { "name": "أخرى", "terms": "أخرى" @@ -4116,7 +4896,11 @@ }, "waterway/stream": { "name": "مجرى", - "terms": "مجرى" + "terms": "مجرى، جدول مائي" + }, + "waterway/stream_intermittent": { + "name": "مجرى متقطع", + "terms": "مجرى متقطع" }, "waterway/water_point": { "name": "مياه الشرب البحرية", @@ -4127,8 +4911,8 @@ "terms": "شلال" }, "waterway/weir": { - "name": "سد", - "terms": "سد" + "name": "هدار - سد صغير", + "terms": "هدار، سد صغير" } } }, diff --git a/vendor/assets/iD/iD/locales/ast.json b/vendor/assets/iD/iD/locales/ast.json index 87e66f121..9ef6850ec 100644 --- a/vendor/assets/iD/iD/locales/ast.json +++ b/vendor/assets/iD/iD/locales/ast.json @@ -577,12 +577,7 @@ } }, "success": { - "edited_osm": "¡Editáu OSM!", "just_edited": "¡Acaba d'editar OpenStreetMap!", - "view_on_osm": "Ver en OSM", - "facebook": "Compartir en Facebook", - "twitter": "Compartir en Twitter", - "google": "Compartir en Google+", "help_link_text": "Detalles" }, "confirm": { @@ -2018,9 +2013,6 @@ "label": "Tipu", "placeholder": "Predetermináu" }, - "vending": { - "label": "Tipu de mercancía" - }, "visibility": { "label": "Visibilidá", "options": { @@ -4461,15 +4453,6 @@ "type/restriction/no_u_turn": { "name": "Sin cambiu de sentíu" }, - "type/restriction/only_left_turn": { - "name": "Xirar sólo a la izquierda" - }, - "type/restriction/only_right_turn": { - "name": "Xirar sólo a la drecha" - }, - "type/restriction/only_straight_on": { - "name": "Xiru torgáu" - }, "type/route": { "name": "Ruta" }, @@ -4612,7 +4595,6 @@ "attribution": { "text": "Términos y comentarios " }, - "description": "Llendes de les imáxenes y dates de la toma. Les etiquetes apaecen col nivel d'ampliación 14 y mayor.", "name": "Imáxenes antigües de DigitalGlobe Premium" }, "DigitalGlobe-Standard": { @@ -4626,7 +4608,6 @@ "attribution": { "text": "Términos y comentarios " }, - "description": "Llendes de les imáxenes y dates de la toma. Les etiquetes apaecen col nivel d'ampliación 14 y mayor.", "name": "Imáxenes antigües de DigitalGlobe Standard" }, "EsriWorldImagery": { @@ -4722,7 +4703,6 @@ "attribution": { "text": "basemap.at" }, - "description": "Mapa base d'Austria, basáu en datos del gobiernu.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -4783,9 +4763,6 @@ "name": "skobbler" }, "stamen-terrain-background": { - "attribution": { - "text": "Mosaicu del mapa por Stamen Design, baxo CC BY 3.0" - }, "name": "Terrén Stamen" }, "tf-cycle": { diff --git a/vendor/assets/iD/iD/locales/bg-BG.json b/vendor/assets/iD/iD/locales/bg-BG.json deleted file mode 100644 index 935d0b745..000000000 --- a/vendor/assets/iD/iD/locales/bg-BG.json +++ /dev/null @@ -1,1642 +0,0 @@ -{ - "bg-BG": { - "modes": { - "add_area": { - "title": "Площ", - "description": "Добавяне на паркове, сгради, езера или други площи към картата.", - "tail": "Щракнете върху картата, за да започнете чертането на площен обект като парк, езеро или сграда." - }, - "add_line": { - "title": "Линия", - "description": "Добавяне на пътища, улици, пешеходни алеи, канали или други линейни обекти към картата.", - "tail": "Щракнете върху картата, за да започнете да чертаете път, пътека или маршрут." - }, - "add_point": { - "title": "Точка", - "description": "Добавяне на ресторанти, паметници, пощенски кутии или други точки към картата.", - "tail": "Щракнете върху картата за да добавите точка." - }, - "browse": { - "title": "Разглеждане", - "description": "Движете и увеличете картата." - }, - "draw_area": { - "tail": "Щракнете, за да добавите възли към вашия площен обект. Щракнете върху първия възел, за да завършите площния обект." - }, - "draw_line": { - "tail": "Щракнете, за да добавите още възли към линията. Щракнете върху други линии, за да ги свържете и двойно щракване, за да завършите линията." - } - }, - "operations": { - "add": { - "annotation": { - "point": "Добавена е точка.", - "vertex": "Добавен е възел към път.", - "relation": "Добавена е връзка" - } - }, - "start": { - "annotation": { - "line": "Започната е линия.", - "area": "Започнат е площен обект." - } - }, - "continue": { - "key": "A", - "title": "Продължи", - "description": "Продължи тази линия.", - "not_eligible": "Линията не може да бъде продължена.", - "multiple": "Няколко линии могат да бъдат продължени тук. За да изберете линия натиснете бутон Shift и кликнете върху линията, за да я изберете.", - "annotation": { - "line": "Продължена е линия.", - "area": "Продължен е площен обект." - } - }, - "cancel_draw": { - "annotation": "Чертането е отказано." - }, - "change_role": { - "annotation": "Сменена е ролята на член на релация." - }, - "change_tags": { - "annotation": "Променени са тагове." - }, - "circularize": { - "title": "Направете окръжност", - "description": { - "line": "Направете тази линия кръг.", - "area": "Превърнете този площен обект в окръжност." - }, - "key": "O", - "annotation": { - "line": "Линията е превърната в окръжност.", - "area": "Площният обект е превърнат в окръжност." - }, - "not_closed": "Този обект не може да стане кръг, защото не е затворен.", - "too_large": "Това не може да бъде направено кръгло, защото не достатъчна част от него е видима към момента.", - "connected_to_hidden": "Това не може да бъде кръгло, защото е свързано със скрит обект." - }, - "orthogonalize": { - "title": "Квадрат", - "description": { - "line": "Изправете ъглите на линията.", - "area": "Изправете ъглите на полигона." - }, - "key": "S", - "annotation": { - "line": "Изправихте ъглите на линия.", - "area": "Изправихте ъглите на площен обект." - }, - "not_squarish": "Това не може да бъде квадрат, защото не е квадратно.", - "too_large": "Това не може да бъде направено квадратно, защото не достатъчна част от него е видима в момента.", - "connected_to_hidden": "Това не може да бъде кръгло, защото е свързано със скрит обект." - }, - "straighten": { - "title": "Изправям", - "description": "Изправи тази линията.", - "key": "S", - "annotation": "Изправи линия.", - "too_bendy": "Това не може да се изправи защото се огъва твърде много.", - "connected_to_hidden": "Тази линия не може да се изправи, защото е свързана със скрит обект." - }, - "delete": { - "title": "Изтриване", - "annotation": { - "point": "Изтрита е точка.", - "vertex": "Изтрит е възел от път.", - "line": "Изтрита е линия.", - "area": "Изтрит е площен обект.", - "relation": "Изтрита е релация." - } - }, - "add_member": { - "annotation": "Добавен член към релация." - }, - "delete_member": { - "annotation": "Премахнат член на релация." - }, - "connect": { - "annotation": { - "point": "Свързан е път с точка.", - "vertex": "Свързан е път с друг път.", - "line": "Свързан е път с линия.", - "area": "Свързан е път с площен обект." - } - }, - "disconnect": { - "title": "Прекъсване", - "description": "Разделете тези линии/площни обекти едни от други.", - "key": "D", - "annotation": "Разделени са линии/площни обекти.", - "not_connected": "Няма достатъчно линии/площни обекти за разделяне тук.", - "connected_to_hidden": "Това не може да бъде", - "relation": "Това не може да се разпадне, защото свързва части от релацията." - }, - "merge": { - "title": "Обединяване", - "description": "Обедини обектите.", - "key": "C", - "annotation": "Обедини {n} обекти.", - "not_eligible": "Тези обекти не могат да бъдат обединени.", - "restriction": "Тези обекти не могат да се обединят, защото поне единият е част от \"{relation}\" връзка.", - "incomplete_relation": "Тези обекти не могат да се обединят, защото поне единият не е бил напълно изтеглен.", - "conflicting_tags": "Тези обекти не могат да се обединят, защото някои от тях имат противоречиви стойности." - }, - "move": { - "title": "Преместване", - "key": "M", - "annotation": { - "point": "Преместена е точка.", - "vertex": "Преместен е възел от път.", - "line": "Преместена е линия.", - "area": "Преместен е площен обект" - } - }, - "rotate": { - "title": "Въртене", - "key": "R", - "annotation": { - "line": "Завъртяна е линия.", - "area": "Завъртян е площен обект." - } - }, - "reverse": { - "title": "Объръщане", - "description": "Сменете посоката на линията с противоположната.", - "key": "V", - "annotation": "Обърната е посоката на линия." - }, - "split": { - "title": "Разделяне", - "description": { - "line": "Разделете линията на две при този възел.", - "area": "Разделете границата на площния обект на две.", - "multiple": "Разделете на две линиите/границите на площния обект при този възел." - }, - "key": "X", - "annotation": { - "line": "Разделете линия.", - "area": "Разделете границата на площния обект.", - "multiple": "Разделете {n} линии/граници на площни обекти. " - }, - "not_eligible": "Линиите не могат да бъдат разделяни в началото или края им.", - "multiple_ways": "Има твърде много линии за разделяне тук.", - "connected_to_hidden": "Това не може да се разцепи, защото е свързано със скрит обект." - }, - "restriction": { - "help": { - "select": "Клик за селекция на пътен сегмент", - "toggle": "Натиснете за обръщане на ограниченията за завиване", - "toggle_on": "Натиснете за добавяне на \"{restriction}\" ограничение.", - "toggle_off": "Натиснете за премахване на \"{restriction}\" ограничение." - }, - "annotation": { - "create": "Добавено ограничение в завойте", - "delete": "Изтрийте ограничение за завиване." - } - } - }, - "undo": { - "tooltip": "Назад: {action}", - "nothing": "Нищо за отменяне." - }, - "redo": { - "tooltip": "Отново: {action}", - "nothing": "Нищо за повторение." - }, - "tooltip_keyhint": "Бързи клавиши:", - "browser_notice": "Този редактор се поддържа във Firefox, Chrome, Safari, Opera и Internet Explorer 11 и следващи. Моля обновете своя браузър или използвайте Potlatch 2, за да редактирате картата.", - "translate": { - "translate": "Превод", - "localized_translation_label": "Многоезично име", - "localized_translation_language": "Изберете език", - "localized_translation_name": "Име" - }, - "logout": "изход", - "loading_auth": "Свързване с OpenStreetMap...", - "report_a_bug": "Докладвай грешка", - "help_translate": "Помощ за превода", - "feature_info": { - "hidden_warning": "{count} скрити обекти", - "hidden_details": "Следните обекти са скрити: {details}" - }, - "status": { - "error": "Не може да се свърже с API-то.", - "offline": "API-то е офлайн. Моля опитайте да редактирате по-късно.", - "readonly": "API-то е в режим само за четене. Ще трябва да почакате, за да запазите вашите промени." - }, - "commit": { - "upload_explanation": "Промените, които качвате ще са видими на всички карти използващи данни от OpenStreetMap.", - "upload_explanation_with_user": "Промените, които качвате като {user} ще са видими на всички карти използващи данни от OpenStreetMap.", - "cancel": "Отказ", - "changes": "{count} промени", - "warnings": "Предупреждения", - "modified": "Променени", - "deleted": "Изтрити", - "created": "Създадени" - }, - "contributors": { - "list": "Редакции от {users}", - "truncated_list": "Редакции от {users} и още {count} други" - }, - "geometry": { - "point": "точка", - "vertex": "чупка", - "line": "линия", - "area": "площ", - "relation": "връзка" - }, - "geocoder": { - "search": "Търси навсякъде...", - "no_results_visible": "Няма резултати във видимата част на картата", - "no_results_worldwide": "Няма намерени резултати" - }, - "geolocate": { - "title": "Показване на моето местоположение", - "locating": "Зареждане, моля изчакайте..." - }, - "inspector": { - "no_documentation_combination": "Няма налична документация за тази комбинация от тагове", - "no_documentation_key": "Няма налична документация за този ключ", - "show_more": "Покажи още", - "view_on_osm": "Вижте на openstreetmap.org", - "all_fields": "Всички полета", - "all_tags": "Всички тагове", - "all_members": "Всички членове", - "all_relations": "Всички релации", - "new_relation": "Нова връзка...", - "role": "Роля", - "choose": "Изберете вид обект", - "results": "{n} резултата за {search}", - "reference": "Вижте в OpenStreetMap Wiki", - "back_tooltip": "Смяна на обект", - "remove": "Премахнете", - "search": "Търсене", - "unknown": "Неизвестно", - "incomplete": "<не е свалено>", - "feature_list": "Търсене на обекти", - "edit": "Редактиране на обект", - "check": { - "yes": "Да", - "no": "Не" - }, - "none": "Никакъв", - "node": "Възел", - "way": "Начин", - "relation": "Релация", - "location": "Местоположение", - "add_fields": "Добави поле:" - }, - "background": { - "title": "Изображения", - "description": "Изображения настройки", - "none": "Никакъв", - "best_imagery": "Най-известен източник на изображения за това местоположение", - "custom": "Обичаен", - "reset": "презареждане" - }, - "map_data": { - "title": "Картни Данни", - "description": "Картни Данни", - "data_layers": "Слоеве с данни", - "map_features": "Обекти от картата", - "autohidden": "Тези обекти бяха скрити автоматично, защото щяха да са пказани твърде много на екрана. Можете да увеличите, за да ги редактирате." - }, - "feature": { - "points": { - "description": "Точки" - }, - "traffic_roads": { - "tooltip": "Шосета, Улици, и др." - }, - "service_roads": { - "description": "Обслужващи Улици" - }, - "paths": { - "description": "Пътеки", - "tooltip": "Тротоари, Пешеходни Зони, Велосипедни Алеи, и т.н." - }, - "buildings": { - "description": "Сгради", - "tooltip": "Сгради, Заслони, Гаражи, и т.н." - }, - "landuse": { - "description": "Обекти за земеползване", - "tooltip": "Гори, Земеделски Земи, Жилищни зони, Търговски зони, и т.н." - }, - "boundaries": { - "description": "Граници", - "tooltip": "Административни Граници" - }, - "water": { - "description": "Водни Обекти" - }, - "rail": { - "description": "Железопътни Обекти", - "tooltip": "Железопътни линии" - }, - "power": { - "description": "Енергийни обекти", - "tooltip": "Електропроводи , Електроцентрали, Подстанции, и т.н." - }, - "past_future": { - "description": "Минал/Бъдещ" - }, - "others": { - "description": "Други", - "tooltip": "Всичко Друго" - } - }, - "area_fill": { - "partial": { - "description": "Частично Попълнен" - } - }, - "restore": { - "heading": "Имате незапазени промени", - "description": "Искате ли да възстановите незаписаните промени от предишна сесия?" - }, - "save": { - "title": "Запис", - "no_changes": "Няма промени за запис.", - "error": "Грешки настъпили докато се опитваме да запазим", - "status_code": "Сървърът върна статус с код {code}", - "unknown_error_details": "Моля уверете се че сте свързани с интернет.", - "unsaved_changes": "Имате незаписани промени", - "conflict": { - "header": "Решение на несъвместими редакции.", - "count": "Несъвместими {num} от {total}", - "previous": "< Предишен", - "next": "Следващ >", - "keep_remote": "Използвай техните", - "restore": "Възстанови", - "delete": "Остави Изтрито", - "done": "Всички несъответствия са решени!" - } - }, - "merge_remote_changes": { - "conflict": { - "nodelist": "Възлите са били променени и от вас и от {user}. ", - "memberlist": "Части от връзката бяха променени и от вас и от {user}.", - "tags": "Вие променихте {tag} таг на \"{local}\" и {user} се промени на \"{remote}\"." - } - }, - "success": { - "edited_osm": "Редактирахте OSM!", - "just_edited": "Вие редактирахте OpenStreetMap!", - "view_on_osm": "Вижте в OSM", - "facebook": "Споделете във Facebook", - "twitter": "Сподели в Twitter", - "google": "Сподели в Google+", - "help_link_text": "Детайли" - }, - "confirm": { - "cancel": "Отказ" - }, - "splash": { - "welcome": "Добре дошли в iD редактора за OpenStreetMap", - "text": "iD e лесен, но мощен инструмент за попълване на най-добрата свободна карта на света. Това е версия {version}. За повече информация вижте {website} и докладвайте за бъгове в {github}.", - "walkthrough": "Започнете опознавателната обиколка" - }, - "source_switch": { - "live": "live", - "lose_changes": "Имате незапазени промени. Смяната на картния сървър ще ги отхвърли. Сигурни ли сте, че искате да смените сървърите?", - "dev": "dev" - }, - "tag_reference": { - "description": "Описание", - "on_wiki": "{tag} в wiki.osm.org", - "used_with": "използва се с {type}" - }, - "validations": { - "untagged_point": "Точка без тагове.", - "untagged_point_tooltip": "Изберете типът обект който описва каква е тази точка.", - "untagged_line": "Линия без таг", - "untagged_line_tooltip": "Изберете типът обект който описва каква е тази линия.", - "untagged_area": "Площен обект без таг", - "untagged_area_tooltip": "Изберете типът обект който описва каква е тази площ.", - "tag_suggests_area": "Тагът {tag} предполага линията да е площен обект, но тя не е", - "deprecated_tags": "Отхвърлени тагове: {tags}" - }, - "cannot_zoom": "Не можете да намалявате повече в текущия режим.", - "full_screen": "Превключи на Цял Екран", - "mapillary_images": { - "tooltip": "Снимки за ниво на улицата от Mapillary" - }, - "mapillary": { - "view_on_mapillary": "Вижте тази снимка на Mapillary" - }, - "help": { - "title": "Помощ" - }, - "intro": { - "graph": { - "block_number": "", - "county": "", - "district": "", - "hamlet": "", - "neighbourhood": "", - "province": "", - "quarter": "", - "state": "", - "subdistrict": "", - "suburb": "", - "countrycode": "bg" - }, - "navigation": { - "title": "Навигация" - }, - "points": { - "title": "Точки" - }, - "areas": { - "title": "Площи" - }, - "lines": { - "title": "Линии" - }, - "startediting": { - "title": "Започване на редакция", - "save": "Не забравяйте да записвате редовно промените, които правите!", - "start": "Започнете да картографирате!" - } - }, - "presets": { - "categories": { - "category-rail": { - "name": "Железопътни Обекти" - }, - "category-water-area": { - "name": "Водни Обекти" - }, - "category-water-line": { - "name": "Водни Обекти" - } - }, - "fields": { - "access": { - "options": { - "designated": { - "description": "Достъпът позволен според указателни табели или специфични местни разпоредби", - "title": "По предназначение" - }, - "destination": { - "description": "Достъпът разрешен само за достигане до дестинация", - "title": "До дестинация" - }, - "no": { - "description": "Забранен публичният достъп", - "title": "Забранен" - }, - "permissive": { - "description": "Достъпът позволен докато собственика позволява", - "title": "Частичен" - }, - "private": { - "description": "Достъпът разрешен само с позволение на собственика", - "title": "Частен" - }, - "yes": { - "description": "Достъпът позволен с нормативен акт; право на преминаване", - "title": "Разрешен" - } - }, - "types": { - "bicycle": "Велосипеди", - "foot": "Пешеходен", - "horse": "Коне", - "motor_vehicle": "МПС" - } - }, - "address": { - "label": "Адрес", - "placeholders": { - "city": "Град", - "country": "Държава", - "district": "Община", - "housename": "Къща", - "housenumber": "123", - "place": "Място", - "province": "Област", - "state": "Икономически район NUT2", - "street": "Улица", - "subdistrict": "Землище", - "suburb": "Квартал" - } - }, - "admin_level": { - "label": "Административно деление" - }, - "aeroway": { - "label": "Вид" - }, - "amenity": { - "label": "Вид" - }, - "atm": { - "label": "Банкомат" - }, - "barrier": { - "label": "Вид" - }, - "bicycle_parking": { - "label": "Вид" - }, - "boundary": { - "label": "Вид" - }, - "building": { - "label": "Сграда" - }, - "building_area": { - "label": "Сграда" - }, - "capacity": { - "label": "Капацитет", - "placeholder": "50, 100, 200..." - }, - "collection_times": { - "label": "График на събиране" - }, - "construction": { - "label": "Вид" - }, - "country": { - "label": "Държава" - }, - "crossing": { - "label": "Вид" - }, - "cycleway": { - "options": { - "none": { - "title": "Никакъв" - } - } - }, - "denomination": { - "label": "Вероизповедание" - }, - "denotation": { - "label": "Название" - }, - "description": { - "label": "Описание" - }, - "electrified": { - "options": { - "no": "Не" - } - }, - "elevation": { - "label": "Надморска височина" - }, - "emergency": { - "label": "Спешни случаи" - }, - "entrance": { - "label": "Вид" - }, - "fax": { - "label": "Факс", - "placeholder": "+31 42 123 4567" - }, - "fee": { - "label": "Такса" - }, - "fixme": { - "label": "Поправи ме" - }, - "highway": { - "label": "Вид" - }, - "historic": { - "label": "Вид" - }, - "iata": { - "label": "IATA" - }, - "icao": { - "label": "ICAO" - }, - "incline": { - "label": "Наклон" - }, - "internet_access": { - "label": "Интернет достъп", - "options": { - "no": "Не", - "terminal": "Терминал", - "wired": "Кабелен", - "wlan": "Wifi", - "yes": "Да" - } - }, - "lamp_type": { - "label": "Тип" - }, - "landuse": { - "label": "Вид" - }, - "lanes": { - "label": "Платна", - "placeholder": "1, 2, 3..." - }, - "layer": { - "label": "Слой" - }, - "leisure": { - "label": "Вид" - }, - "levels": { - "label": "Нива", - "placeholder": "2, 4, 6..." - }, - "location": { - "label": "Местоположение" - }, - "man_made": { - "label": "Вид" - }, - "maxspeed": { - "label": "Ограничение на скоростта", - "placeholder": "40, 50, 60..." - }, - "name": { - "label": "Име", - "placeholder": "Популярно наименование (ако има такова)" - }, - "natural": { - "label": "Природа" - }, - "network": { - "label": "Мрежа" - }, - "note": { - "label": "Бележка" - }, - "office": { - "label": "Вид" - }, - "oneway": { - "label": "Еднопосочнoст", - "options": { - "no": "Не", - "yes": "Да" - } - }, - "oneway_yes": { - "label": "Еднопосочен", - "options": { - "no": "Не", - "yes": "Да" - } - }, - "opening_hours": { - "label": "Работно време" - }, - "operator": { - "label": "Оператор" - }, - "park_ride": { - "label": "Буферен паркинг" - }, - "parking": { - "label": "Вид" - }, - "phone": { - "label": "Телефон", - "placeholder": "+31 42 123 4567" - }, - "place": { - "label": "Вид" - }, - "power": { - "label": "Вид" - }, - "railway": { - "label": "Вид" - }, - "relation": { - "label": "Вид" - }, - "religion": { - "label": "Религия" - }, - "restriction": { - "label": "Вид" - }, - "route": { - "label": "Вид" - }, - "route_master": { - "label": "Вид" - }, - "service": { - "label": "Вид" - }, - "shelter": { - "label": "Навес" - }, - "shop": { - "label": "Вид" - }, - "structure": { - "label": "Структура", - "options": { - "bridge": "Мост", - "cutting": "Изкоп", - "embankment": "Насип", - "tunnel": "Тунел" - }, - "placeholder": "Неизвестен" - }, - "supervised": { - "label": "Под наблюдение" - }, - "surface": { - "label": "Повърхност" - }, - "takeaway": { - "options": { - "no": "Не", - "yes": "Да" - } - }, - "tourism": { - "label": "Вид" - }, - "trail_visibility": { - "label": "Видимост на туристическата пътека" - }, - "water": { - "label": "Вид" - }, - "waterway": { - "label": "Вид" - }, - "website": { - "label": "Уебсайт", - "placeholder": "http://example.com/" - }, - "wetland": { - "label": "Вид" - }, - "wheelchair": { - "label": "Достъп за инвалиди" - }, - "wikipedia": { - "label": "Wikipedia" - } - }, - "presets": { - "address": { - "name": "Адрес" - }, - "aeroway": { - "name": "Въздухоплаване" - }, - "aeroway/aerodrome": { - "name": "Летище" - }, - "aeroway/apron": { - "name": "Стоянка за самолети" - }, - "aeroway/hangar": { - "name": "Хангар" - }, - "aeroway/helipad": { - "name": "Хеликоптерна площадка" - }, - "aeroway/runway": { - "name": "Летателна писта" - }, - "aeroway/taxiway": { - "name": "Рольожка" - }, - "amenity": { - "name": "Услуги" - }, - "amenity/atm": { - "name": "Банкомат" - }, - "amenity/bank": { - "name": "Банка" - }, - "amenity/bar": { - "name": "Бар" - }, - "amenity/bench": { - "name": "Пейка" - }, - "amenity/bicycle_parking": { - "name": "Паркинг за велосипеди" - }, - "amenity/bicycle_rental": { - "name": "Наем на велосипеди" - }, - "amenity/cafe": { - "name": "Кафене" - }, - "amenity/car_rental": { - "name": "Коли под наем" - }, - "amenity/car_sharing": { - "name": "Споделяне на коли" - }, - "amenity/car_wash": { - "name": "Автомивка" - }, - "amenity/cinema": { - "name": "Кино" - }, - "amenity/courthouse": { - "name": "Съд" - }, - "amenity/drinking_water": { - "name": "Чешма" - }, - "amenity/embassy": { - "name": "Посолство" - }, - "amenity/fast_food": { - "name": "Бърза закуска" - }, - "amenity/fire_station": { - "name": "Пожарна" - }, - "amenity/fountain": { - "name": "Фонтан" - }, - "amenity/fuel": { - "name": "Бензиностанция" - }, - "amenity/grave_yard": { - "name": "Гробище" - }, - "amenity/library": { - "name": "Библиотека" - }, - "amenity/marketplace": { - "name": "Пазар" - }, - "amenity/pharmacy": { - "name": "Аптека" - }, - "amenity/place_of_worship": { - "name": "Религиозен храм" - }, - "amenity/place_of_worship/buddhist": { - "name": "Будистки храм" - }, - "amenity/place_of_worship/christian": { - "name": "Църква" - }, - "amenity/place_of_worship/jewish": { - "name": "Синагога" - }, - "amenity/place_of_worship/muslim": { - "name": "Джамия" - }, - "amenity/police": { - "name": "Полиция" - }, - "amenity/post_box": { - "name": "Пощенска кутия" - }, - "amenity/post_office": { - "name": "Поща" - }, - "amenity/pub": { - "name": "Пъб" - }, - "amenity/restaurant": { - "name": "Ресторант" - }, - "amenity/swimming_pool": { - "name": "Плувен басейн" - }, - "amenity/taxi": { - "name": "Такси стоянка" - }, - "amenity/telephone": { - "name": "Телефон" - }, - "amenity/theatre": { - "name": "Театър" - }, - "amenity/toilets": { - "name": "Тоалетна" - }, - "amenity/townhall": { - "name": "Кметство" - }, - "amenity/waste_basket": { - "name": "Кош за боклук" - }, - "area": { - "name": "Площ" - }, - "barrier": { - "name": "Преграда" - }, - "barrier/block": { - "name": "Бетонен блок" - }, - "barrier/bollard": { - "name": "Колче" - }, - "barrier/cattle_grid": { - "name": "Тексаска мрежа" - }, - "barrier/city_wall": { - "name": "Градска стена" - }, - "barrier/cycle_barrier": { - "name": "Велосипедна преграда" - }, - "barrier/entrance": { - "name": "Вход" - }, - "barrier/fence": { - "name": "Ограда" - }, - "barrier/gate": { - "name": "Портал" - }, - "barrier/hedge": { - "name": "Жив плет" - }, - "barrier/kissing_gate": { - "name": "Препятствие за животни" - }, - "barrier/lift_gate": { - "name": "Бариера" - }, - "barrier/retaining_wall": { - "name": "Подпорна стена" - }, - "barrier/stile": { - "name": "Стълби за преминаване през ограда" - }, - "barrier/toll_booth": { - "name": "Будка за тол такса" - }, - "barrier/wall": { - "name": "Стена" - }, - "boundary/administrative": { - "name": "Административна граница" - }, - "building": { - "name": "Сграда" - }, - "building/apartments": { - "name": "Жилищен блок" - }, - "building/house": { - "name": "Къща" - }, - "emergency/phone": { - "name": "Телефон за спешна помощ" - }, - "highway": { - "name": "Път" - }, - "highway/bridleway": { - "name": "Конска пътека" - }, - "highway/cycleway": { - "name": "Велоалея" - }, - "highway/footway": { - "name": "Пешеходна алея" - }, - "highway/living_street": { - "name": "Жилищна улица" - }, - "highway/mini_roundabout": { - "name": "Малко кръгово кръстовище" - }, - "highway/motorway": { - "name": "Автомагистрала" - }, - "highway/motorway_link": { - "name": "Автомагистрална връзка" - }, - "highway/path": { - "name": "Пътека" - }, - "highway/primary": { - "name": "Първокласен път" - }, - "highway/primary_link": { - "name": "Връзка с първокласен път" - }, - "highway/residential": { - "name": "Улица" - }, - "highway/road": { - "name": "Непроучен път" - }, - "highway/secondary": { - "name": "Второкласен път" - }, - "highway/secondary_link": { - "name": "Връзка с второкласен път" - }, - "highway/service": { - "name": "Сервизна улица" - }, - "highway/service/alley": { - "name": "Тясна уличка между имоти" - }, - "highway/service/drive-through": { - "name": "Обслужване без напускане на автомобила" - }, - "highway/service/driveway": { - "name": "Алея за коли към жилище" - }, - "highway/service/emergency_access": { - "name": "За достъп при спешни случаи" - }, - "highway/service/parking_aisle": { - "name": "Път в паркинг" - }, - "highway/steps": { - "name": "Стъпала" - }, - "highway/street_lamp": { - "name": "Улична лампа" - }, - "highway/tertiary": { - "name": "Третокласен път" - }, - "highway/tertiary_link": { - "name": "Връзка с третокласен път" - }, - "highway/traffic_signals": { - "name": "Светофари" - }, - "highway/trunk": { - "name": "Скоростен път" - }, - "highway/trunk_link": { - "name": "Връзка със скоростен път" - }, - "highway/turning_circle": { - "name": "Място за обръщане" - }, - "historic": { - "name": "Място с историческо значение" - }, - "historic/archaeological_site": { - "name": "Археологически обект" - }, - "historic/boundary_stone": { - "name": "Граничен камък" - }, - "historic/castle": { - "name": "Замък" - }, - "historic/memorial": { - "name": "Мемориална плоча" - }, - "historic/monument": { - "name": "Паметник" - }, - "historic/ruins": { - "name": "Руини" - }, - "historic/wayside_cross": { - "name": "Крайпътен кръст" - }, - "historic/wayside_shrine": { - "name": "Крайпътен параклис" - }, - "landuse/basin": { - "name": "Басейн" - }, - "landuse/cemetery": { - "name": "Гробищен парк" - }, - "landuse/construction": { - "name": "Строеж" - }, - "landuse/farmyard": { - "name": "Селскостопански двор" - }, - "landuse/forest": { - "name": "Гора" - }, - "landuse/grass": { - "name": "Трева" - }, - "landuse/meadow": { - "name": "Пасище" - }, - "landuse/orchard": { - "name": "Овощна градина " - }, - "landuse/quarry": { - "name": "Кариера" - }, - "landuse/vineyard": { - "name": "Лозе" - }, - "leisure": { - "name": "Отдих" - }, - "leisure/garden": { - "name": "Градина" - }, - "leisure/golf_course": { - "name": "Голф игрище" - }, - "leisure/marina": { - "name": "Яхт клуб" - }, - "leisure/park": { - "name": "Парк" - }, - "leisure/pitch": { - "name": "Спортно игрище" - }, - "leisure/pitch/american_football": { - "name": "Игрище за американски футбол" - }, - "leisure/pitch/baseball": { - "name": "Игрище за бейзбол" - }, - "leisure/pitch/basketball": { - "name": "Баскетболно игрище" - }, - "leisure/pitch/soccer": { - "name": "Футболно игрище" - }, - "leisure/pitch/tennis": { - "name": "Тенис корт" - }, - "leisure/pitch/volleyball": { - "name": "Волейболно игрище" - }, - "leisure/playground": { - "name": "Детска площадка" - }, - "leisure/slipway": { - "name": "Хелинг" - }, - "leisure/stadium": { - "name": "Стадион" - }, - "leisure/swimming_pool": { - "name": "Плувен басейн" - }, - "line": { - "name": "Линия" - }, - "man_made": { - "name": "Съоръжения" - }, - "man_made/breakwater": { - "name": "Вълнолом" - }, - "man_made/cutline": { - "name": "Просека" - }, - "man_made/lighthouse": { - "name": "Морски фар" - }, - "man_made/pier": { - "name": "Кей" - }, - "man_made/pipeline": { - "name": "Тръбопровод" - }, - "man_made/survey_point": { - "name": "Геодезическа точка" - }, - "man_made/tower": { - "name": "Кула" - }, - "man_made/wastewater_plant": { - "name": "Пречиствателна станция" - }, - "man_made/water_tower": { - "name": "Водна кула" - }, - "man_made/water_works": { - "name": "Помпена станция" - }, - "natural": { - "name": "Природа" - }, - "natural/bay": { - "name": "Залив" - }, - "natural/beach": { - "name": "Плаж" - }, - "natural/cliff": { - "name": "Скала" - }, - "natural/coastline": { - "name": "Брегова линия" - }, - "natural/glacier": { - "name": "Ледник" - }, - "natural/grassland": { - "name": "Степ" - }, - "natural/heath": { - "name": "Малки храсти" - }, - "natural/peak": { - "name": "Връх" - }, - "natural/scrub": { - "name": "Шубрак" - }, - "natural/spring": { - "name": "Извор" - }, - "natural/tree": { - "name": "Дърво" - }, - "natural/water": { - "name": "Водна площ" - }, - "natural/water/lake": { - "name": "Езеро" - }, - "natural/water/pond": { - "name": "Малко езеро" - }, - "natural/water/reservoir": { - "name": "Язовир" - }, - "natural/wetland": { - "name": "Блатиста зона" - }, - "natural/wood": { - "name": "Гора" - }, - "office": { - "name": "Офис" - }, - "place": { - "name": "Населени места" - }, - "place/city": { - "name": "Град над 100 000" - }, - "place/hamlet": { - "name": "Махала" - }, - "place/island": { - "name": "Остров" - }, - "place/isolated_dwelling": { - "name": "Изолирано жилище" - }, - "place/locality": { - "name": "Местност" - }, - "place/town": { - "name": "Град под 100 000" - }, - "place/village": { - "name": "Село" - }, - "point": { - "name": "Точка" - }, - "power": { - "name": "Енергетика" - }, - "power/line": { - "name": "Електропровод" - }, - "power/pole": { - "name": "Електрически стълб" - }, - "power/sub_station": { - "name": "Подстанция" - }, - "power/tower": { - "name": "Жере" - }, - "power/transformer": { - "name": "Трансформатор" - }, - "railway": { - "name": "ЖП транспорт" - }, - "railway/abandoned": { - "name": "Изоставена железопътна линия" - }, - "railway/disused": { - "name": "Закрита железопътна линия" - }, - "railway/monorail": { - "name": "Монорелсов път" - }, - "railway/rail": { - "name": "ЖП линия" - }, - "railway/subway": { - "name": "Метро" - }, - "railway/subway_entrance": { - "name": "Вход на метростанция" - }, - "railway/tram": { - "name": "Трамвайни релси" - }, - "relation": { - "name": "Релация" - }, - "route/ferry": { - "name": "Фериботна връзка" - }, - "shop": { - "name": "Магазин" - }, - "shop/alcohol": { - "name": "Магазин за алкохол" - }, - "shop/bakery": { - "name": "Пекарна" - }, - "shop/beauty": { - "name": "Козметик" - }, - "shop/beverages": { - "name": "Магазин за алкохол и цигари" - }, - "shop/bicycle": { - "name": "Магазин за велосипеди" - }, - "shop/boutique": { - "name": "Бутик" - }, - "shop/butcher": { - "name": "Колбаси" - }, - "shop/car": { - "name": "Автомобили" - }, - "shop/car_parts": { - "name": "Авточасти" - }, - "shop/car_repair": { - "name": "Сервиз автомобили" - }, - "shop/clothes": { - "name": "Магазин за дрехи" - }, - "shop/computer": { - "name": "Компютърен магазин" - }, - "shop/convenience": { - "name": "Магазин за хранителни стоки" - }, - "shop/deli": { - "name": "Магазин за деликатеси" - }, - "shop/department_store": { - "name": "Универсален магазин" - }, - "shop/doityourself": { - "name": "Магазин \"Направи си сам\"" - }, - "shop/electronics": { - "name": "Магазин за електроника" - }, - "shop/farm": { - "name": "Щанд за плодове и зеленчуци" - }, - "shop/fishmonger": { - "name": "Магазин за риба" - }, - "shop/florist": { - "name": "Магазин за цветя" - }, - "shop/furniture": { - "name": "Мебелен магазин" - }, - "shop/garden_centre": { - "name": "Градински център" - }, - "shop/gift": { - "name": "Магазин за подаръци" - }, - "shop/greengrocer": { - "name": "Плод-зеленчук" - }, - "shop/hairdresser": { - "name": "Фризьорски салон" - }, - "shop/hardware": { - "name": "Железария" - }, - "shop/hifi": { - "name": "Магазин за аудиотехника" - }, - "shop/jewelry": { - "name": "Бижутер" - }, - "shop/laundry": { - "name": "Пералня" - }, - "shop/mall": { - "name": "Мол" - }, - "shop/mobile_phone": { - "name": "Магазин за мобилни телефони" - }, - "shop/motorcycle": { - "name": "Магазин за мотоциклети" - }, - "shop/music": { - "name": "Музикален магазин" - }, - "shop/optician": { - "name": "Оптика" - }, - "shop/pet": { - "name": "Зоо магазин" - }, - "shop/shoes": { - "name": "Магазин за обувки" - }, - "shop/sports": { - "name": "Спортен магазин" - }, - "shop/stationery": { - "name": "Магазин за канцеларски стоки" - }, - "shop/supermarket": { - "name": "Супермаркет" - }, - "shop/toys": { - "name": "Магазин за играчки" - }, - "shop/travel_agency": { - "name": "Туристическа агенция" - }, - "shop/tyres": { - "name": "Магазин за автомобилни гуми" - }, - "shop/vacant": { - "name": "Свободна търговска площ" - }, - "shop/variety_store": { - "name": "Смесен магазин" - }, - "shop/video": { - "name": "Видеотека" - }, - "tourism": { - "name": "Туризъм" - }, - "tourism/alpine_hut": { - "name": "Хижа" - }, - "tourism/artwork": { - "name": "Произведение на изкуството" - }, - "tourism/attraction": { - "name": "Туристическа атракция" - }, - "tourism/caravan_site": { - "name": "Паркинг за каравани" - }, - "tourism/guest_house": { - "name": "Къща за гости" - }, - "tourism/hostel": { - "name": "Хостел" - }, - "tourism/hotel": { - "name": "Хотел" - }, - "tourism/information": { - "name": "Информация" - }, - "tourism/motel": { - "name": "Мотел" - }, - "tourism/museum": { - "name": "Музей" - }, - "tourism/picnic_site": { - "name": "Място за пикник" - }, - "tourism/theme_park": { - "name": "Увеселителен парк" - }, - "tourism/viewpoint": { - "name": "Точка с хубава гледка" - }, - "tourism/zoo": { - "name": "Зоологическа градина" - }, - "type/boundary": { - "name": "Граница" - }, - "type/boundary/administrative": { - "name": "Административна граница" - }, - "type/multipolygon": { - "name": "Мултиполигон" - }, - "type/restriction": { - "name": "Ограничение" - }, - "type/restriction/no_right_turn": { - "name": "Без десен завой" - }, - "type/restriction/no_u_turn": { - "name": "Без обратен завой" - }, - "type/restriction/only_left_turn": { - "name": "Завой само на ляво" - }, - "type/restriction/only_right_turn": { - "name": "Завой само на дясно" - }, - "type/restriction/only_straight_on": { - "name": "Без завиване" - }, - "type/route": { - "name": "Маршрут" - }, - "type/route/bicycle": { - "name": "Велосипеден маршрут" - }, - "type/route/bus": { - "name": "Автобусен маршрут" - }, - "type/route/detour": { - "name": "Обходен маршрут" - }, - "type/route/ferry": { - "name": "Фериботна връзка" - }, - "type/route/foot": { - "name": "Пешеходен маршрут" - }, - "type/route/pipeline": { - "name": "Трасе на тръбопровод" - }, - "type/route/power": { - "name": "Трасе на електропровод" - }, - "type/route/road": { - "name": "Път" - }, - "type/route/train": { - "name": "Железопътен маршрут" - }, - "type/route/tram": { - "name": "Трамваен маршрут" - }, - "type/route_master": { - "name": "Маршрутна схема" - }, - "vertex": { - "name": "Друг" - }, - "waterway": { - "name": "Води" - }, - "waterway/canal": { - "name": "Канал" - }, - "waterway/dam": { - "name": "Язовирна стена" - }, - "waterway/ditch": { - "name": "Канавка" - }, - "waterway/drain": { - "name": "Отводнителен канал" - }, - "waterway/river": { - "name": "Река" - }, - "waterway/riverbank": { - "name": "Речен бряг" - }, - "waterway/stream": { - "name": "Поток" - }, - "waterway/weir": { - "name": "Преливник" - } - } - } - } -} \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/bg.json b/vendor/assets/iD/iD/locales/bg.json index c55fe0f1e..d2b2a2909 100644 --- a/vendor/assets/iD/iD/locales/bg.json +++ b/vendor/assets/iD/iD/locales/bg.json @@ -1,5 +1,10 @@ { "bg": { + "icons": { + "information": "Информация", + "remove": "премахване", + "undo": "отмени" + }, "modes": { "add_area": { "title": "Площ", @@ -145,7 +150,9 @@ "vertex": "Свързан е път с друг път.", "line": "Свързан е път с линия.", "area": "Свързан е път с площен обект." - } + }, + "relation": "Тези обекти не могат да бъдат свързани, защото имат различни роли в релация.", + "restriction": "Тези обекти не могат да бъдат свързани, защото това ще повреди релацията \"{relation}\". " }, "disconnect": { "title": "Прекъсване", @@ -291,6 +298,42 @@ } } }, + "restriction": { + "controls": { + "distance": "Разстояние", + "distance_up_to": "До {distance}", + "via": "През", + "via_node_only": "Само възел", + "via_up_to_one": "До 1 път", + "via_up_to_two": "До 2 пътя" + }, + "help": { + "indirect": "(indirect)", + "turn": { + "no_left_turn": "ЗАБРАНЕНО завиването наляво {indirect}", + "no_right_turn": "ЗАБРАНЕНО завиването надясно {indirect}", + "no_u_turn": "ЗАБРАНЕНО завиването в обратна посока {indirect}", + "no_straight_on": "ЗАБРАНЕНО движението направо {indirect}", + "only_left_turn": "САМО ляв завой {indirect}", + "only_right_turn": "САМО десен завой {indirect}", + "only_u_turn": "САМО обратен завой {indirect}", + "only_straight_on": "САМО направо {indirect}", + "allowed_left_turn": "Ляв завой позволен {indirect}", + "allowed_right_turn": "Десен завой позволен {indirect}", + "allowed_u_turn": "Обратен завой позволен {indirect}", + "allowed_straight_on": "Движение направо позволено {indirect}" + }, + "from": "ОТ", + "via": "ПРЕЗ", + "to": "ДО", + "from_name": "{from} {fromName}", + "from_name_to_name": "{from} {fromName} {to} {toName}", + "via_names": "{via} {viaNames}", + "select_from": "Кликнете за да изберете сегмент {from}", + "select_from_name": "Кликнете за да изберете {from} {fromName}", + "toggle": "Кликнете за \"{turn}\"" + } + }, "undo": { "tooltip": "Назад: {action}", "nothing": "Нищо за отменяне." @@ -364,7 +407,37 @@ }, "history": { "key": "H", - "title": "История" + "title": "История", + "selected": "{n} избрани", + "no_history": "Без история (Нова функция)", + "version": "Версия", + "last_edit": "Последна редакция", + "edited_by": "Редактирано от", + "changeset": "Промяна", + "unknown": "Неизвестно", + "link_text": "История на openstreetmap.org" + }, + "location": { + "key": "L", + "title": "Местоположение", + "unknown_location": "Неизвестно местоположение" + }, + "measurement": { + "key": "M", + "title": "Измерване", + "selected": "{n} избрани", + "geometry": "Геометрия", + "closed_line": "затворена линия", + "closed_area": "затворена площ", + "center": "Център", + "perimeter": "Обиколка", + "length": "Дължина", + "area": "Площ", + "centroid": "Центроид", + "location": "Местоположение", + "metric": "Метрична", + "imperial": "Имперска", + "node_count": "Брой възли" } }, "geometry": { @@ -386,6 +459,7 @@ "inspector": { "no_documentation_combination": "Няма налична документация за тази комбинация от тагове", "no_documentation_key": "Няма налична документация за този ключ", + "documentation_redirect": "Тази документация беше пренасочена към нова страница", "show_more": "Покажи още", "view_on_osm": "Вижте на openstreetmap.org", "all_fields": "Всички полета", @@ -400,14 +474,24 @@ "back_tooltip": "Смяна на обект", "remove": "Премахнете", "search": "Търсене", + "multiselect": "Избрани обекти", "unknown": "Неизвестно", "incomplete": "<не е свалено>", "feature_list": "Търсене на обекти", "edit": "Редактиране на обект", "check": { "yes": "Да", - "no": "Не" + "no": "Не", + "reverser": "Смяна на посока" }, + "radio": { + "structure": { + "type": "Вид", + "default": "По подразбиране", + "layer": "Слой" + } + }, + "add": "Добавяне", "none": "Никакъв", "node": "Възел", "way": "Начин", @@ -418,27 +502,58 @@ "background": { "title": "Изображения", "description": "Изображения настройки", + "key": "B", + "backgrounds": "Базови карти", "none": "Никакъв", "best_imagery": "Най-известен източник на изображения за това местоположение", + "switch": "Превключете обратно на тази базова карта", "custom": "Обичаен", - "reset": "презареждане" + "custom_button": "Редактирайте персонализираната базова карта", + "custom_prompt": "Въведете URL шаблон за тайлове. Валидни токени са:\n - {zoom} или {z}, {x}, {y} за Z/X/Y тайл схема\n - {-y} или {ty} за обърнати TMS Y координати\n - {u} за куадтайл схема\n - {switch:a,b,c} за DNS сървърно мултиплексиране\n\nПример:\n{example}", + "overlays": "Подложки", + "imagery_source_faq": "Информация за изображение / Докладвайте проблем", + "reset": "презареждане", + "display_options": "Опции за показване", + "brightness": "Яркост", + "contrast": "Контраст", + "saturation": "Наситеност", + "sharpness": "Острота", + "minimap": { + "description": "Покажи мини карта", + "tooltip": "Покажи мащабирана карта за помощ при локализирането на текущата показана площ.", + "key": "/" + }, + "fix_misalignment": "Коригиране отместването на изображението", + "offset": "Провлачете където и да е в сивата зона отдолу, за да коригирате отместването на изображението или въведете стойността на отместването в метри." }, "map_data": { "title": "Картни Данни", "description": "Картни Данни", + "key": "F", "data_layers": "Слоеве с данни", + "layers": { + "osm": { + "tooltip": "Картографски данни от OpenStreetMap", + "title": "OpenStreetMap данни" + } + }, + "fill_area": "Запълване на площи", "map_features": "Обекти от картата", - "autohidden": "Тези обекти бяха скрити автоматично, защото щяха да са пказани твърде много на екрана. Можете да увеличите, за да ги редактирате." + "autohidden": "Тези обекти бяха скрити автоматично, защото щяха да са пказани твърде много на екрана. Можете да увеличите, за да ги редактирате.", + "osmhidden": "Тези обекти бяха скрити автоматично, защото слоят в OpenStreetMap е скрит." }, "feature": { "points": { - "description": "Точки" + "description": "Точки", + "tooltip": "Точки на интерес" }, "traffic_roads": { + "description": "Пътища с трафик", "tooltip": "Шосета, Улици, и др." }, "service_roads": { - "description": "Обслужващи Улици" + "description": "Обслужващи Улици", + "tooltip": "Обслужващи пътища, пътища в паркинг, полски пътища, и др." }, "paths": { "description": "Пътеки", @@ -457,7 +572,8 @@ "tooltip": "Административни Граници" }, "water": { - "description": "Водни Обекти" + "description": "Водни Обекти", + "tooltip": "Реки, езера, малки езера, язовири, и др." }, "rail": { "description": "Железопътни Обекти", @@ -468,7 +584,8 @@ "tooltip": "Електропроводи , Електроцентрали, Подстанции, и т.н." }, "past_future": { - "description": "Минал/Бъдещ" + "description": "Минал/Бъдещ", + "tooltip": "Проектни, В строеж, Изоставени, Разрушени, и др." }, "others": { "description": "Други", @@ -476,86 +593,181 @@ } }, "area_fill": { + "wireframe": { + "description": "Без запълване (тънки линии)", + "tooltip": "Пускането на режим тънки линии помага да се вижда по-лесно фоновото изображение.", + "key": "W" + }, "partial": { - "description": "Частично Попълнен" + "description": "Частично Попълнен", + "tooltip": "Площите са изобразени със запълване само около вътрешните им ръбове. (Препоръчително за начинаещи картографи)" + }, + "full": { + "description": "Плътно запълване", + "tooltip": "Площите са изобразени плътно запълнени." } }, "restore": { "heading": "Имате незапазени промени", - "description": "Искате ли да възстановите незаписаните промени от предишна сесия?" + "description": "Искате ли да възстановите незаписаните промени от предишна сесия?", + "restore": "Възстанови моите промени", + "reset": "Отмени моите промени" }, "save": { "title": "Запис", + "help": "Прегледайте вашите промени и ги качете в OpenStreetMap, правейки ги видими за другите потребители.", "no_changes": "Няма промени за запис.", "error": "Грешки настъпили докато се опитваме да запазим", "status_code": "Сървърът върна статус с код {code}", "unknown_error_details": "Моля уверете се че сте свързани с интернет.", + "uploading": "Качване на промените в OpenStreetMap...", + "conflict_progress": "Проверка за конфликти: {num} от {total}", "unsaved_changes": "Имате незаписани промени", "conflict": { "header": "Решение на несъвместими редакции.", "count": "Несъвместими {num} от {total}", "previous": "< Предишен", "next": "Следващ >", + "keep_local": "Запази моите", "keep_remote": "Използвай техните", "restore": "Възстанови", "delete": "Остави Изтрито", - "done": "Всички несъответствия са решени!" + "download_changes": "Или свали osmChange файл", + "done": "Всички несъответствия са решени!", + "help": "Друг потребител е променил част от същите обекти, които променихте.\nКликнете на всеки от обектите по-долу за повече информация относно конфликта и изберете дали да запазите\nвашите промени или тези на другия потребител.\n" } }, "merge_remote_changes": { "conflict": { + "deleted": "Този обект беше изтрит от {user}.", + "location": "Този обект беше преместен от вас и {user}.", "nodelist": "Възлите са били променени и от вас и от {user}. ", "memberlist": "Части от връзката бяха променени и от вас и от {user}.", "tags": "Вие променихте {tag} таг на \"{local}\" и {user} се промени на \"{remote}\"." } }, "success": { - "edited_osm": "Редактирахте OSM!", "just_edited": "Вие редактирахте OpenStreetMap!", - "view_on_osm": "Вижте в OSM", - "facebook": "Споделете във Facebook", - "twitter": "Сподели в Twitter", - "google": "Сподели в Google+", - "help_link_text": "Детайли" + "thank_you": "Благодарим ви за подобряването на картата.", + "thank_you_location": "Благодарим ви за подобряването на картата около {where}.", + "help_html": "Вашите промени би трябвало да се появят в OpenStreetMap до няколко минути. При други карти, обновяването може да отнеме по-дълго време.", + "help_link_text": "Детайли", + "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F", + "view_on_osm": "Вижте промените в OSM", + "changeset_id": "Вашата промяна #: {changeset_id}", + "like_osm": "Харесвате OpenStreetMap? Свържете се с другите:", + "more": "Още", + "events": "Събития", + "languages": "Езици: {languages}", + "missing": "Липсва ли нещо в този списък?", + "tell_us": "Споделете с нас!" }, "confirm": { + "okay": "OK", "cancel": "Отказ" }, "splash": { "welcome": "Добре дошли в iD редактора за OpenStreetMap", "text": "iD e лесен, но мощен инструмент за попълване на най-добрата свободна карта на света. Това е версия {version}. За повече информация вижте {website} и докладвайте за бъгове в {github}.", - "walkthrough": "Започнете опознавателната обиколка" + "walkthrough": "Започнете опознавателната обиколка", + "start": "Редактиране сега" }, "source_switch": { "live": "live", "lose_changes": "Имате незапазени промени. Смяната на картния сървър ще ги отхвърли. Сигурни ли сте, че искате да смените сървърите?", "dev": "dev" }, + "version": { + "whats_new": "Какво ново в iD {version}" + }, "tag_reference": { "description": "Описание", "on_wiki": "{tag} в wiki.osm.org", "used_with": "използва се с {type}" }, "validations": { + "disconnected_highway": "Прекъснат път", + "disconnected_highway_tooltip": "Пътищата трябва да бъдат свързани с други пътища или входове на сгради.", + "old_multipolygon": "Тагове за мултиполигон на външен път", + "old_multipolygon_tooltip": "Този вид мултиполигон е отхвърлен. Моля, сложете таговете на самия мултиполигон вместо на външния му път. ", "untagged_point": "Точка без тагове.", "untagged_point_tooltip": "Изберете типът обект който описва каква е тази точка.", "untagged_line": "Линия без таг", "untagged_line_tooltip": "Изберете типът обект който описва каква е тази линия.", "untagged_area": "Площен обект без таг", "untagged_area_tooltip": "Изберете типът обект който описва каква е тази площ.", + "untagged_relation": "Релация без тагове", + "untagged_relation_tooltip": "Изберете типът обект, който описва каква е тази релация.", + "many_deletions": "Изтривате {n} обекта: {p} възела, {l} линии, {a} площи, {r} релации. Сигурни ли сте, че искате да направите това? Това ще ги изтрие от картата, която всеки вижда на openstreetmap.org.", "tag_suggests_area": "Тагът {tag} предполага линията да е площен обект, но тя не е", "deprecated_tags": "Отхвърлени тагове: {tags}" }, + "zoom": { + "in": "Навътре", + "out": "Навън" + }, "cannot_zoom": "Не можете да намалявате повече в текущия режим.", "full_screen": "Превключи на Цял Екран", + "gpx": { + "local_layer": "Локален файл", + "drag_drop": "Влачете и пуснете .gpx, .geojson или .kml файл в тази страница или кликнете на бутона в дясно, за да разгледате", + "zoom": "Приближете към слоя", + "browse": "Потърсете файл" + }, "mapillary_images": { - "tooltip": "Снимки за ниво на улицата от Mapillary" + "tooltip": "Снимки за ниво на улицата от Mapillary", + "title": "Фото слой (Mapillary)" + }, + "mapillary_signs": { + "tooltip": "Пътни знаци от Mapillary (трябва да е пуснат Фото слой)", + "title": "Слой пътни знаци (Mapillary)" }, "mapillary": { "view_on_mapillary": "Вижте тази снимка на Mapillary" }, + "openstreetcam_images": { + "tooltip": "Снимки на ниво улица от OpenStreetCam", + "title": "Фото слой (OpenStreetCam)" + }, + "openstreetcam": { + "view_on_openstreetcam": "Вижте това изображение на OpenStreetCam" + }, "help": { - "title": "Помощ" + "title": "Помощ", + "key": "H", + "help": { + "title": "Помощ", + "welcome": "Добре дошли в iD редактора на [OpenStreetMap] (https://www.openstreetmap.org/). С този редактор може да попълвате картата на OpenStreetMap директно от вашия уеб браузър.", + "open_data_h": "Отворени данни", + "open_data": "Промените, които правите в тази карта ще бъдат видим за всеки, който използва OpenStreetMap. Промените ви могат да бъдат базирани на лични сведения, измервания на място, въздушни или на ниво улица изображения. Копирането от комерсиални източници като Google Maps, [е строго забранено] (https://www.openstreetmap.org/copyright).", + "before_start_h": "Преди да започнете", + "before_start": "Трябва да сте запознати с OpenStreetMap и този редактор преди да започнете да редактирате. iD съдържа въвеждащ урок за основните неща при редактирането на OpenStreetMap. Кликнете на \"Стартирай въведението\" на този екран, за да започнете урока - отнема само около 15 минути.", + "open_source_h": "Отворен код", + "open_source": "iD редакторът е съвместен проект с отворен код и в момента използвате версия {version}. Кодът е наличен [в GitHub](https://github.com/openstreetmap/iD).", + "open_source_help": "Може да помогнете на iD с [превод] (https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating) или [докладване на бъгове](https://github.com/openstreetmap/iD/issues)." + }, + "overview": { + "title": "Преглед", + "navigation_h": "Навигация", + "navigation_drag": "Може да влачите картата като задържите {leftclick} левия бутон на мишката и движите мишката. Може също да използвате бутоните със стрелки `↓`, `↑`, `←`, `→` на вашата клавиатура.", + "navigation_zoom": "Може да приближавате и отдалечавате като скролвате с колелото на мишката или чрез кликове върху бутоните {plus} / {minus} отстрани на картата. Може също да използвате бутоните `+`, `-` на вашата клавиатура.", + "features_h": "Обекти от картата", + "features": "Използваме думата \"обекти\", за да опишем неща, които се изобразяват на картата като пътища, сгради и точки на интерес. Всичко в реалния свят може да бъде картографирано като обект в OpenStreetMap. Обектите на картата се представят чрез използването на \"точки\", \"линии\" и \"площи\".", + "nodes_ways": "В OpenStreetmap точките понякога се наричат \"възли\", а линиите понякога се наричат \"пътища\"." + }, + "editing": { + "title": "Редактиране & Запис", + "select_h": "Селектиране", + "select_left_click": "{leftclick} Кликнете с левия бутон върху обект, за да го селектирате. Това ще го открои с пулсиращо сияние, а страничния панел ще покаже подробности за този обект, като име и адрес.", + "select_right_click": "{rightclick} Кликнете с десния бутон върху обект, за да изведете менюто за редакция, което показва действията, които са възможни, като завъртане, преместване и изтриване.", + "multiselect_h": "Селектиране на множество обекти", + "multiselect_shift_click": "`{shift}`+{leftclick} клик с ляв бутон, за да изберете няколко обекта. Това улеснява местенето и изтриването на множество елементи.", + "multiselect_lasso": "Друг начин за селектиране на множество обекти е да задържите клавиша `{shift}` и след това натиснете и задържите левия бутон на мишката, като влачите мишката рисувайки ласо селекция. Всички точки намиращи се вътре в ласото ще бъдат селектирани.", + "undo_redo_h": "Отмени & Повтори", + "undo_redo": "Вашите редакции се съхраняват локално във вашия браузър докато не решите да ги запишете в сървъра на OpenStreetMap. Можете да отменяте редакции като кликнете бутона {undo} **Отмени**, или да ги повторите като кликнете бутона {redo} **Повтори**.", + "save_h": "Запис", + "save": "Кликнете {save} **Запис**, за да завършите редакциите си и да ги изпратите в OpenStreetMap. Не забравяйте да записвате работата си често!" + } }, "intro": { "graph": { @@ -2436,15 +2648,6 @@ "type/restriction/no_u_turn": { "name": "Без обратен завой" }, - "type/restriction/only_left_turn": { - "name": "Завой само на ляво" - }, - "type/restriction/only_right_turn": { - "name": "Завой само на дясно" - }, - "type/restriction/only_straight_on": { - "name": "Без завиване" - }, "type/route": { "name": "Маршрут" }, @@ -2529,7 +2732,7 @@ "attribution": { "text": "Условия & oбратна връзка" }, - "description": "Граници на изображения и дата на заснемане. Надписите се появяват при ниво на увеличение 14 или по-високо.", + "description": "Граници на изображения и дата на заснемане. Надписите се появяват при ниво на увеличение 13 или по-високо.", "name": "Стари DigitalGlobe Премиум изображения" }, "DigitalGlobe-Standard": { @@ -2543,7 +2746,7 @@ "attribution": { "text": "Условия & oбратна връзка" }, - "description": "Граници на изображения и дата на заснемане. Надписите се появяват при ниво на увеличение 14 или по-високо.", + "description": "Граници на изображения и дата на заснемане. Надписите се появяват при ниво на увеличение 13 или по-високо.", "name": "Стари стандартни DigitalGlobe сателитни изображения." }, "EsriWorldImagery": { @@ -2627,6 +2830,9 @@ "description": "Жълто = Публично достъпни картографски данни от US Census. Червено = Данни, които не са нанесени в OpenStreetMap", "name": "TIGER Пътища 2017" }, + "US_Forest_Service_roads_overlay": { + "name": "Слой Горски пътища в САЩ" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0" @@ -2723,7 +2929,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Картни тайлове от Stamen Design, под CC BY 3.0" + "text": "Картни тайлове от Stamen Design, под CC BY 3.0. Данни от OpenStreetMap, лиценз ODbL" }, "name": "Stamen Топография" }, @@ -2739,6 +2945,26 @@ }, "name": "Thunderforest Ландшафт" } + }, + "community": { + "Central-Pennsylvania-OSM": { + "name": "Централна Пенсилвания OSM" + }, + "OSM-Chattanooga": { + "name": "OSM Чатануга", + "description": "OpenStreetMap потребителската група за Чатануга" + }, + "OSM-NYC": { + "name": "OpenStreetMap Ню Йорк", + "description": "Картографи и OpenStreetMap потребители, разработчици и ентусиасти в района на Ню Йорк Метрополитън" + }, + "OSM-Portland": { + "name": "OpenStreetMap Портланд", + "description": "Картографи и OpenStreetMap потребители в района на Портланд" + }, + "OSM-US-Slack": { + "name": "OpenStreetMap US Slack" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/bn.json b/vendor/assets/iD/iD/locales/bn.json index 57042c608..d4d101a0c 100644 --- a/vendor/assets/iD/iD/locales/bn.json +++ b/vendor/assets/iD/iD/locales/bn.json @@ -1,5 +1,9 @@ { "bn": { + "icons": { + "information": "তথ্য", + "remove": "অপসারণ" + }, "modes": { "add_area": { "title": "এলাকা", @@ -25,6 +29,9 @@ }, "draw_line": { "tail": "রেখাটিতে অারো নোড সংযোজন-এর জন্য ক্লিক করুন। অন্যান্য রেখাগুলির সাথে সংযোজন-এর জন্য তাদের উপর ক্লিক করুন। রেখাটি শেষ করার জন্য দুইবার ক্লিক করুন।" + }, + "drag_node": { + "connected_to_hidden": "এটি সম্পাদনা করা যাবে না কারণ এটি একটি গোপন বৈশিষ্টের সাথে যুক্ত।" } }, "operations": { @@ -94,7 +101,8 @@ "vertex": "একটি গমনপথ থেকে একটি নোড মুছে ফেলা হয়েছে।", "line": "একটি রেখা মুছে ফেলা হয়েছে।", "area": "একটি এলাকা মুছে ফেলা হয়েছে।", - "relation": "একটি সম্পর্ক মুছে ফেলা হয়েছে।" + "relation": "একটি সম্পর্ক মুছে ফেলা হয়েছে।", + "multiple": "{n}টি অপসারিত বৈশিষ্ট।" } }, "add_member": { @@ -302,12 +310,7 @@ "unsaved_changes": "অাপনার কিছু পরিবর্তন সংরক্ষণ করা বাকি অাছে" }, "success": { - "edited_osm": "ওপেনস্ট্রীটম্যাপ সম্পাদিত হয়েছে!", - "just_edited": "অাপনি এইমাত্র ওপেনস্ট্রীটম্যাপ সম্পাদন করলেন!", - "view_on_osm": "ওপেনস্ট্রীটম্যাপে দেখুন", - "facebook": "ফেসবুক-এ জানান", - "twitter": "টুইটার-এ জানান", - "google": "গুগল+ এ জানান" + "just_edited": "অাপনি এইমাত্র ওপেনস্ট্রীটম্যাপ সম্পাদন করলেন!" }, "splash": { "welcome": "iD ওপেনস্ট্রীটম্যাপ সম্পাদকে অাপনাকে স্বাগতম", diff --git a/vendor/assets/iD/iD/locales/bs.json b/vendor/assets/iD/iD/locales/bs.json index 5b925cc05..e24affef3 100644 --- a/vendor/assets/iD/iD/locales/bs.json +++ b/vendor/assets/iD/iD/locales/bs.json @@ -253,12 +253,7 @@ "unsaved_changes": "Imate promjene koje nisu spašene" }, "success": { - "edited_osm": "OSM uređen!", - "just_edited": "Upravo ste uredili OpenStreetMap kartu!", - "view_on_osm": "Pogledajte na OSM-u", - "facebook": "Podijeliti na Facebooku", - "twitter": "Podijeliti na Twitteru", - "google": "Podijeliti na Google+" + "just_edited": "Upravo ste uredili OpenStreetMap kartu!" }, "splash": { "welcome": "Dobrodošli u ID - OpenStreetMap uređivač", @@ -655,9 +650,6 @@ "trail_visibility": { "label": "Vidljivost traga" }, - "vending": { - "label": "Vrsta dobara" - }, "water": { "label": "Vrsta" }, diff --git a/vendor/assets/iD/iD/locales/ca.json b/vendor/assets/iD/iD/locales/ca.json index 336fc2cc7..81cbffc7d 100644 --- a/vendor/assets/iD/iD/locales/ca.json +++ b/vendor/assets/iD/iD/locales/ca.json @@ -1,5 +1,10 @@ { "ca": { + "icons": { + "information": "Informació", + "remove": "Eliminar", + "undo": "Desfer" + }, "modes": { "add_area": { "title": "Àrea", @@ -306,8 +311,19 @@ "no_left_turn": "Prohibició del gir a l'esquerra {indirecte}", "no_right_turn": "Prohibició del gir a la dreta {indirecte}", "no_u_turn": "Prohibició del gir total {indirecte}", - "no_straight_on": "Prohibició de seguir recte {indirecte}" - } + "no_straight_on": "Prohibició de seguir recte {indirecte}", + "only_left_turn": "NOMÉS gir a l'esquerra {indirecte}", + "only_right_turn": "NOMÉS gir a la dreta {indirecte}", + "only_u_turn": "NOMÉS gir total {indirecte}", + "only_straight_on": "NOMÉS seguir recte {indirecte}", + "allowed_left_turn": "Gir a l'esquerra permès {indirecte}", + "allowed_right_turn": "Gir a la dreta permès {indirecte}", + "allowed_u_turn": "Gir total permès {indirecte}", + "allowed_straight_on": "Segui recte permès {indirecte}" + }, + "from": "DES DE", + "via": "VIA", + "to": "A" } }, "undo": { @@ -478,6 +494,7 @@ "title": "Fons", "description": "Paràmetres de configuració del fons", "key": "B", + "backgrounds": "Fons", "none": "Cap", "best_imagery": "Font d'imatgeria millor coneguda per a aquesta ubicació", "switch": "Senyals de trànsit ", @@ -620,13 +637,7 @@ } }, "success": { - "edited_osm": "Heu editat l'OSM!", "just_edited": "Acabeu d'editar l'OpenStreetMap!", - "view_on_osm": "Mostra-ho a OSM", - "facebook": "Compartiu-ho a Facebook", - "twitter": "Compartiu-ho al Twitter", - "google": "Compartiu-ho a Google+", - "help_html": "Els vostres canvis s'haurien de veure a la capa \"Estàndard\" en pocs minuts. Altres capes i determinats objectes poden tardar més.", "help_link_text": "Detalls", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -727,7 +738,8 @@ "save_h": "Desar", "upload_h": "Puja", "backups_h": "Copia de seguretat automàtica", - "keyboard_h": "Dreceres de teclat" + "keyboard_h": "Dreceres de teclat", + "keyboard": "Pots veure una llista de dreceres del teclat prement la tecla `?`." }, "feature_editor": { "title": "Editor de característiques", @@ -2366,9 +2378,6 @@ "label": "Tipus", "placeholder": "Predeterminat" }, - "vending": { - "label": "Tipus de mercaderies" - }, "visibility": { "label": "Visibilitat", "options": { @@ -4721,18 +4730,6 @@ "name": "Prohibició del gir total", "terms": "Prohibit canviar de sentit" }, - "type/restriction/only_left_turn": { - "name": "Només gir a l'esquerra", - "terms": "Gir a l'esquerra obligatori" - }, - "type/restriction/only_right_turn": { - "name": "Només gir a la dreta", - "terms": "Gir a la dreta obligatori" - }, - "type/restriction/only_straight_on": { - "name": "Prohibició de tots els girs", - "terms": "Prohibit girar, no girs, cap gir, no girar, seguir recte" - }, "type/route": { "name": "Ruta", "terms": "Ruta" @@ -4855,7 +4852,6 @@ "attribution": { "text": "Termes i comentaris" }, - "description": "Limitacions d'imatges i dates de captura. Les etiquetes apareixen al nivell de zoom 14 i superior.", "name": "Imatges de DigitalGlobe Premium Vintage" }, "DigitalGlobe-Standard": { @@ -4869,7 +4865,6 @@ "attribution": { "text": "Termes i comentaris" }, - "description": "Limitacions d'imatges i dates de captura. Les etiquetes apareixen al nivell de zoom 14 i superior.", "name": "Imatges de DigitalGlobe estàndard Vintage" }, "EsriWorldImagery": { @@ -4987,7 +4982,7 @@ "attribution": { "text": "basemap.at" }, - "description": "Mapa Base d'Austria, basat en dades governamentals.", + "description": "Mapa base d'Àustria, basat en dades governamentals.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -5048,9 +5043,6 @@ "name": "skobbler" }, "stamen-terrain-background": { - "attribution": { - "text": "Quadricula de mapes de Stamen Design, sota CC BY 3.0" - }, "name": "Stamen Terrain" }, "tf-cycle": { @@ -5065,6 +5057,39 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "OSM-India-facebook": { + "description": "Millora OpenStreetMap a l'Índia" + }, + "OSM-japan-facebook": { + "name": "Comunitat de Japó d'OpenStreetMap", + "description": "Mapador i usuari d'OpenStreetMap a Japó" + }, + "OSM-japan-twitter": { + "name": "Twitter de Japó d'OpenStreetMap", + "description": "Etiqueta a Twitter: {url}" + }, + "OSM-TW-facebook": { + "name": "Comunitat de Taiwan d'OpenStreetMap", + "description": "Grup de Facebook per mapadors i usuaris d'OpenStreetMap per discutir assumptes sobre Taiwan." + }, + "OSM-SoCal": { + "name": "OpenStreetMap Califòrnia del Sud", + "extendedDescription": "OpenStreetMap (OSM) Califòrnia del Sud és per a tothom interessat en el mapatge que s'uneixi a treballar amb OpenStreetMap. OpenStreetMap, la Viquipèdia dels mapes, és un mapa de codi obert gratuït del món sent creat per més de 1000000 de voluntaris al voltant del món. Tothom és benvingut. Si no coneixes OpenStreetMap, t'ensenyarem. Si tens una idea d'un projecte de mapatge o fins i tot una excursió de camp que el grup pot fer, genial!" + }, + "OSM-AR-telegram": { + "name": "Telegram d'OpenStreetMap Argentina", + "description": "Uneix-te a la comunitat argentina d'OpenStreetMap a Telegram" + }, + "OSM-AR-twitter": { + "name": "Twitter d'Argentina d'OpenStreetMap", + "description": "Segueix-nos a Twitter a {url}" + }, + "OSM-Reddit": { + "name": "OpenStreetMap a Reddit", + "description": "/r/openstreetmap/ és un bon lloc per aprendre més sobre OpenStreetMap. Pregunta'ns qualsevol cosa!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/ckb.json b/vendor/assets/iD/iD/locales/ckb.json index c4e0968d5..312d5611d 100644 --- a/vendor/assets/iD/iD/locales/ckb.json +++ b/vendor/assets/iD/iD/locales/ckb.json @@ -2,7 +2,8 @@ "ckb": { "modes": { "add_area": { - "title": "ناوچە" + "title": "ناوچە", + "description": "زیادکردنی باخچە و بینا و گۆم و شوێنی تر بۆ سەر نەخشەکە." }, "add_line": { "title": "هێڵ" @@ -11,13 +12,18 @@ "title": "خاڵ" } }, + "operations": { + "continue": { + "title": "بەردەوامبوون" + } + }, "tooltip_keyhint": "کورتبڕ:", "translate": { "translate": "وەرگێڕان", "localized_translation_language": "هەڵبژاردنی زمان", "localized_translation_name": "ناو" }, - "logout": "دەرچوون", + "logout": "چوونە دەرەوە", "report_a_bug": "ناردنی هەڵە", "help_translate": "یارمەتیدان بۆ وەرگێڕان", "commit": { diff --git a/vendor/assets/iD/iD/locales/cs.json b/vendor/assets/iD/iD/locales/cs.json index ae3552878..ba3fcf23a 100644 --- a/vendor/assets/iD/iD/locales/cs.json +++ b/vendor/assets/iD/iD/locales/cs.json @@ -1,5 +1,10 @@ { "cs": { + "icons": { + "information": "Zobrazit popis z wiki.osm.org", + "remove": "Odstranit", + "undo": "Zpět" + }, "modes": { "add_area": { "title": "Plocha", @@ -7,8 +12,8 @@ "tail": "Klikněte na mapu a začněte tak kreslit plochu, jako třeba park, jezero nebo budovu." }, "add_line": { - "title": "Čára", - "description": "Přidat do mapy silnice, ulice, stezky, potoky či jiné čáry.", + "title": "Linie", + "description": "Přidat do mapy silnice, ulice, stezky, potoky či jiné linie.", "tail": "Klikněte na mapu a začněte tak kreslit silnice, stezky nebo trasy." }, "add_point": { @@ -25,6 +30,9 @@ }, "draw_line": { "tail": "Body k linii přidáte kliknutím. Když kliknete na jinou linii, připojíte linie k sobě. Editaci ukončíte dvojklikem." + }, + "drag_node": { + "connected_to_hidden": "Tento objekt nelze upravit, protože je spojen se skrytým objektem." } }, "operations": { @@ -44,9 +52,9 @@ "continue": { "key": "A", "title": "Pokračovat", - "description": "Navázat na čáru.", - "not_eligible": "Nelze navázat na žádnou čáru.", - "multiple": "Zde je možné navázat na několik čar. Stiskněte klávesu Shift a kliknutím zvolte jednu z čar.", + "description": "Navázat na linii.", + "not_eligible": "Nelze navázat na žádnou linii.", + "multiple": "Zde je možné navázat na několik linií. Stiskněte klávesu Shift a kliknutím zvolte jednu z nich.", "annotation": { "line": "Prodloužena linie.", "area": "Plocha pokračuje." @@ -93,11 +101,11 @@ }, "straighten": { "title": "Narovnat", - "description": "Narovnat tuto čáru.", + "description": "Narovnat tuto linii.", "key": "S", "annotation": "Narovnána linie.", "too_bendy": "Objekt nelze narovnat, protože je příliš zakroucený.", - "connected_to_hidden": "Čáru nelze narovnat, protože je napojená na skrytý objekt." + "connected_to_hidden": "Linii nelze narovnat, protože je napojená na skrytý objekt." }, "delete": { "title": "Smazat", @@ -288,6 +296,25 @@ } } }, + "restriction": { + "controls": { + "distance": "Vzdálenost", + "distance_up_to": "Do max: {distance}", + "via": "Přes", + "via_node_only": "Pouze bod", + "via_up_to_one": "Max 1 cesta", + "via_up_to_two": "Max 2 cesty" + }, + "help": { + "indirect": "(nepřímé)", + "from": "Z", + "via": "PŘES", + "to": "DO", + "from_name": "{from} {fromName}", + "from_name_to_name": "{from} {fromName} {to} {toName}", + "via_names": "{via} {viaNames}" + } + }, "undo": { "tooltip": "Zpět: {action}", "nothing": "Není co vracet." @@ -363,6 +390,7 @@ "key": "H", "title": "Historie", "selected": "{n} vybráno", + "no_history": "Žádná historie (nový prvek)", "version": "Verze", "last_edit": "Poslední úprava", "edited_by": "Upravil(a)", @@ -600,15 +628,17 @@ } }, "success": { - "edited_osm": "OSM upraveno!", "just_edited": "Právě jste upravil/a OpenStreetMap!", - "view_on_osm": "Zobrazit na OSM", - "facebook": "Sdílet na Facebooku", - "twitter": "Sdílet na Twitteru", - "google": "Sdílet na Google+", - "help_html": "Vaše úpravy by se obvykle měly objevit na „Standardní“ vrstvě během několika minut. U rozsáhlejších objektů a ostatních vrstev to může trvat déle.", + "thank_you": "Děkujeme za zlepšení mapy.", + "thank_you_location": "Děkujeme za zlepšení mapy okolo {where}.", + "help_html": "Vaše změny by se měly objevit na \"standardní\" mapě OpenStreetMap během pár minut. Na ostatních mapách to může trvat déle.", "help_link_text": "Více", - "help_link_url": "https://wiki.openstreetmap.org/wiki/Cs:FAQ#Zrovna_jsem_ud.C4.9Blal_n.C4.9Bjak.C3.A9_zm.C4.9Bny_v_map.C4.9B._Jak_uvid.C3.ADm_sv.C3.A9_zm.C4.9Bny.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/Cs:FAQ#Zrovna_jsem_ud.C4.9Blal_n.C4.9Bjak.C3.A9_zm.C4.9Bny_v_map.C4.9B._Jak_uvid.C3.ADm_sv.C3.A9_zm.C4.9Bny.3F", + "view_on_osm": "Zobrazit změny na OSM", + "changeset_id": "Vaše sada změn #: {changeset_id}", + "like_osm": "Líbí se Vám OpenStreetMap? Spojte se s ostatními:", + "languages": "Jazyky: {languages}", + "tell_us": "Řekněte nám o tom!" }, "confirm": { "okay": "OK", @@ -687,8 +717,12 @@ "title": "Nápověda", "welcome": "Vítejte v editoru iD pro [OpenStreetMap](https://www.openstreetmap.org/). Tímto editorem můžete upravovat OpenStreetMap přímo v browseru.", "open_data_h": "Otevřená data", + "open_data": "Editace, které zde uložíte, budou ihned zapsány do ostré databáze!! Ukládajte pouze reálné objekty a to z osobní znalosti, GPS záznamů či volně dostupných leteckých map. Kopírování z komerčních zdrojů je [striktně zakázáno](https://www.openstreetmap.org/copyright).", "before_start_h": "Než začnete", - "open_source_h": "Otevřený kód" + "before_start": "Měli byste být obeznámeni s OpenStreetMap a tímto editorem, než začnete editovat. iD nabítí průvodce, který Vás naučí základy editace OpenStreetMap. Klikněte na \"Začít s procházkou\" na této obrazovce pro spuštení průvodce - zabere jen okolo 15 minut.", + "open_source_h": "Otevřený kód", + "open_source": "Editor iD je společně vytvářený open source projekt a Vy právě používáte verzi {version}. Zdrojový kód je dostupný [na webu GitHub](https://github.com/openstreetmap/iD).", + "open_source_help": "Můžete iD editoru pomoci [překladem](https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating) nebo [hlášením chyb](https://github.com/openstreetmap/iD/issues)." }, "overview": { "title": "Přehled", @@ -910,7 +944,9 @@ }, "areas": { "title": "Plochy", + "add_playground": "*Plochy* používáme pro hranice budov, lesů, jezer apod.{br}Ovšem také jimi můžeme detailně zakreslit prvky, které by normálně byly body.**Přidejte plochu tlačítkem {button} Plocha**", "start_playground": "Pojďme přidat toto dětské hřiště. Plochu vytvoříte naklikáním bodů okolo.\n**Začněte kliknutím do rohu**", + "continue_playground": "Pokračujte přidáváním bodů do rohů hřiště. {br}\nPlochu můžete spojit s existující pěšinou. (Pokud tomu naopak chcete zabránit držte klávesu Alt)\n**Přidejte další body do hřiště**", "finish_playground": "Dokončete plochu kliknutím na první či poslední bod (též lze klávesou Enter).\n**Dokončete obrys hřšitě.**", "search_playground": "**Vyhledejte '{preset}'.**", "choose_playground": "**Zvolte {preset}.**", @@ -952,7 +988,7 @@ }, "buildings": { "title": "Budovy", - "add_building": "OSM je mimojiné také největší databází budov.{br}\nPokud někde budova chybí, můžete přidat její obrys.\n**Přidejte novou plochu tlačítkem {button} Plocha**", + "add_building": "OSM je mimojiné také největší databází budov.{br}\nPokud někde budova chybí, můžete přidat její obrys.{br}\nPozor: letecké snímky v ČR často nesedí - neopravujte, prosím, existující budovy, pokud si nejste jisti.\n**Přidejte novou plochu tlačítkem {button} Plocha**", "start_building": "Pojďme přidat třeba tenhle barák.{br}\nZkuste budovu oklikat co nejpřesněji.\n**Začněte kreslit kliknutím do rohu**", "continue_building": "Přidejte postupně další body do rohů, můžete i přizoomovat.{br}\nZadávání ukončíte kliknutím na první či poslední bod.\n**Dokončete obrys budovy**", "retry_building": "Nějak se vám to asi nezdařilo. Zkuste to prosím znovu.", @@ -975,6 +1011,8 @@ }, "startediting": { "title": "Začít s editací", + "help": "Nyní jste připraveni editovat OpenStreetMap!{br}\nTuto prohlídku si můžete kdykoliv znovu přehrát nebo se podívejte na další dokumentaci stisknutím {button} tlačítka Nápověda.", + "shortcuts": "Seznam příkazů a jejich klávesové zkratky můžete zobrazit stisknutím klávesy `{key}`.", "save": "Nezapomeňte pravidelně ukládat své úpravy!", "start": "Začít mapovat!" } @@ -1012,19 +1050,27 @@ "title": "Procházení", "navigation": { "title": "Navigace", - "zoom": "Přiblížit / /oddálit" + "pan": "Posun mapy", + "pan_more": "Posun mapy o jednu obrazovku", + "zoom": "Přiblížit / /oddálit", + "zoom_more": "Více přiblížit / oddálit" }, "help": { - "title": "Nápověda" + "title": "Nápověda", + "help": "Zobrazit nápovědu", + "keyboard": "Zobrazit klávesové zkratky" }, "display_options": { "title": "Vlastnosti zobrazení", "background": "Zobrazit volby pozadí", + "background_switch": "Zapnout předchozí použité pozadí", "map_data": "Zobrazit volby mapových dat", "fullscreen": "Vstoupit do režimu celé obrazovky", + "wireframe": "Přepnout výplň budov", "minimap": "Přepnout minimapu" }, "selecting": { + "title": "Vybrání prvků", "select_one": "Zvolit jednu vlastnost", "select_multi": "Zvolit více vlastností" } @@ -1059,6 +1105,20 @@ } }, "units": { + "feet": "{quantity} stop", + "miles": "{quantity} mil", + "square_feet": "{quantity} stop²", + "square_miles": "{quantity} mil²", + "acres": "{quantity} arů", + "meters": "{quantity} m", + "kilometers": "{quantity} km", + "square_meters": "{quantity} m²", + "square_kilometers": "{quantity} km²", + "hectares": "{quantity} ha", + "area_pair": "{area1} ({area2})", + "arcdegrees": "{quantity}°", + "arcminutes": "{quantity}′", + "arcseconds": "{quantity}″", "north": "S", "south": "J", "east": "V", @@ -2382,9 +2442,6 @@ "label": "Typ", "placeholder": "Výchozí" }, - "vending": { - "label": "Druh zboží" - }, "visibility": { "label": "Viditelnost", "options": { @@ -3652,6 +3709,9 @@ "name": "Jezdecká stezka", "terms": "jezdecká stezka,jezdecká trasa,stezka pro jezdce,stezka pro koně,koňská stezka" }, + "highway/bus_stop": { + "name": "Zastávka autobusu" + }, "highway/corridor": { "name": "Chodba", "terms": "chodba,koridor" @@ -3681,7 +3741,7 @@ }, "highway/give_way": { "name": "Značka Dej přednost", - "terms": "dej přednost v jízdě,dej přednost,značka přednosti v jízdě,vedlejší silnice,vedlejší ulice" + "terms": "dej přednost v jízdě,dej přednost,značka přednosti v jízdě,vedlejší silnice,vedlejší ulice" }, "highway/living_street": { "name": "Obytná zóna", @@ -3783,7 +3843,7 @@ }, "highway/stop": { "name": "Stopka", - "terms": "stopka,stop,dej přednost v jízdě,přednost,značka,dopravní značka" + "terms": "stopka,stop,stůj,dej přednost v jízdě,přednost,značka,dopravní značka" }, "highway/street_lamp": { "name": "Pouliční lampa", @@ -4723,6 +4783,9 @@ "public_transport/stop_area": { "name": "Oblast zastávky" }, + "public_transport/stop_position": { + "name": "Místo zastavení veřejné dopravy" + }, "public_transport/stop_position_aerialway": { "name": "Místo zastavení lanovky" }, @@ -4796,6 +4859,9 @@ "name": "Úzkorozchodná dráha", "terms": "úzkorozchodná dráha,úzkokolejná dráha,úzkokolejka" }, + "railway/platform": { + "name": "Železniční nástupiště" + }, "railway/rail": { "name": "Kolej", "terms": "koleje,železnice,vlak,trať" @@ -4825,6 +4891,9 @@ "name": "Tramvaj", "terms": "tramvaj,tranvaj,šalina,šmirgl,tramvajka,elektrika,električka,tram" }, + "railway/tram_stop": { + "name": "Zastávka tramvaje" + }, "relation": { "name": "Relace", "terms": "relace,vztah,seznam,objekt" @@ -5475,18 +5544,6 @@ "name": "Zákaz otáčení", "terms": "otáčení,otočit,u-turn" }, - "type/restriction/only_left_turn": { - "name": "Přikázaný směr jízdy vlevo", - "terms": "přikázáno jet vlevo,jen vlevo,pouze vlevo,odbočit vlevo" - }, - "type/restriction/only_right_turn": { - "name": "Přikázaný směr jízdy vpravo", - "terms": "přikázáno jet vpravo,jen vpravo,pouze vpravo,odbočit vpravo" - }, - "type/restriction/only_straight_on": { - "name": "Přikázaný směr jízdy přímo", - "terms": "přikázaný směr jízdy rovně,zákaz odbočit,zákaz zatočit,pouze rovně,pouze přímo,jen rovně,jen přímo" - }, "type/route": { "name": "Trasa", "terms": "trasa,cesta,linka,stopa,značka,spojení" @@ -5825,6 +5882,50 @@ "text": "Mapy © Thunderforest, data © přispěvatelé OpenStreetMap" } } + }, + "community": { + "talk-cz-mailinglist": { + "description": "Talk-cz je hlavní komunikační kanál české komunity" + }, + "Bay-Area-OpenStreetMappers": { + "name": "Bay Area OpenStreetMappers", + "description": "Vylepšete OpenStreetMap v Bay Area" + }, + "Central-Pennsylvania-OSM": { + "name": "OSM Střední Pensylvánie" + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM" + }, + "GeoPhilly": { + "name": "GeoPhilly" + }, + "Mapping-DC-meetup": { + "name": "Mapování DC", + "description": "Vylepšete OpenStreetMap na území DC" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "Uživatelská skupina OpenStreetMap pro Chatanoogu" + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland" + }, + "OSM-US-Slack": { + "name": "OpenStreetMap US Slack", + "description": "Všichni jsou vítaní! Přihlaste se na {signupUrl}" + }, + "Maptime-Australia-Slack": { + "name": "Maptime Australia Slack", + "description": "Přihlaste se na {signupUrl}" + }, + "OSM-Reddit": { + "name": "OpenStreetMap na Redditu", + "description": "/r/openstreetmap/ je vynikající místo, kde lze zjistit více o OpenStreetMap. Zeptejte se nás na cokoliv!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/da.json b/vendor/assets/iD/iD/locales/da.json index bec733df3..5a0e014f3 100644 --- a/vendor/assets/iD/iD/locales/da.json +++ b/vendor/assets/iD/iD/locales/da.json @@ -1,5 +1,10 @@ { "da": { + "icons": { + "information": "info", + "remove": "fjern", + "undo": "fortryd" + }, "modes": { "add_area": { "title": "Område", @@ -145,7 +150,8 @@ "vertex": "Forbandt en vej til en anden.", "line": "Forbandt en vej til en linje.", "area": "Forbandt en vej til et område." - } + }, + "restriction": "Disse kortobjekter kan ikke forbindes, da det ville skade en \"{relation}\"-relation." }, "disconnect": { "title": "Frakobl", @@ -196,17 +202,17 @@ }, "reflect": { "title": { - "long": "Reflektere langt", - "short": "Reflektere kort" + "long": "Spejlvend om lang akse", + "short": "Spejlvend om kort akse" }, "description": { "long": { - "single": "Reflekter dette objekt på tværs af dets lange akse.", - "multiple": "Reflekter disse objekter på tværs af deres lange akse." + "single": "Spejlvend dette objekt omkring dets lange akse.", + "multiple": "Spejlvend disse objekter omkring deres lange akse." }, "short": { - "single": "Reflekter dette objekt på tværs af dets kort akse.", - "multiple": "Reflekter disse objekter på tværs af deres korte akse." + "single": "Spejlvend dette objekt omkring dets korte akse.", + "multiple": "Spejlvend disse objekter omkring deres korte akse." } }, "key": { @@ -215,25 +221,25 @@ }, "annotation": { "long": { - "single": "Reflekterede et objekt på tværs af dets lange akse.", - "multiple": "Reflekterede flere objekter på tværs af deres lange akse." + "single": "Spejlvendte et objekt omkring dets lange akse.", + "multiple": "Spejlvendte flere objekter omkring af deres lange akse." }, "short": { - "single": "Reflekterede et objekt på tværs af dets korte akse.", - "multiple": "Reflekterede flere objekter på tværs af deres korte akse." + "single": "Spejlvendte et objekt omkring dets korte akse.", + "multiple": "Spejlvendte flere objekter omkring deres korte akse." } }, "incomplete_relation": { - "single": "Dette objekt kan ikke reflekteres da det ikke er blevet downloadet helt.", - "multiple": "Disse objekter kan ikke reflekteres da de ikke er blevet downloadet helt." + "single": "Dette objekt kan ikke spejlvendes, da det ikke er blevet downloadet helt.", + "multiple": "Disse objekter kan ikke spejlvendes, da de ikke er blevet downloadet helt." }, "too_large": { - "single": "Dette objekt kan ikke reflekteres da der ikke er nok af det synligt i den nuværende visning.", - "multiple": "Disse objekter kan ikke reflekteres da der ikke er nok af dem synligt i den nuværende visning." + "single": "Dette objekt kan ikke spejlvendes, da der ikke er nok af det synligt i den nuværende visning.", + "multiple": "Disse objekter kan ikke spejlvendes, da der ikke er nok af dem synligt i den nuværende visning." }, "connected_to_hidden": { - "single": "Dette objekt kan ikke reflekteres da det er forbundet med et skjult objekt.", - "multiple": "Disse objekter kan ikke reflekteres da nogle af dem er forbundet med skjulte objekter." + "single": "Dette objekt kan ikke spejlvendes, da det er forbundet med et skjult objekt.", + "multiple": "Disse objekter kan ikke spejlvendes, da nogle af dem er forbundet med skjulte objekter." } }, "rotate": { @@ -291,6 +297,42 @@ } } }, + "restriction": { + "controls": { + "distance": "Afstand", + "distance_up_to": "Op til {distance}", + "via": "Via", + "via_node_only": "Kun node", + "via_up_to_one": "Op til 1 vej", + "via_up_to_two": "Op til 2 veje" + }, + "help": { + "indirect": "(indirekte)", + "turn": { + "no_left_turn": "INGEN venstresving {indirect}", + "no_right_turn": "INGEN højresving {indirect}", + "no_u_turn": "INGEN u-vending {indirect}", + "no_straight_on": "INGEN ligeudkørsel {indirect}", + "only_left_turn": "KUN venstresving {indirect}", + "only_right_turn": "KUN højresving {indirect}", + "only_u_turn": "KUN u-vending {indirect}", + "only_straight_on": "KUN ligeudkørsel {indirect}", + "allowed_left_turn": "Venstresving tilladt {indirect}", + "allowed_right_turn": "Højresving tilladt {indirect}", + "allowed_u_turn": "U-vending tilladt {indirect}", + "allowed_straight_on": "Ligeudkørsel tilladt {indirect}" + }, + "from": "FRA", + "via": "VIA", + "to": "TIL", + "from_name": "{from} {fromName}", + "from_name_to_name": "{from} {fromName} {to} {toName}", + "via_names": "{via} {viaNames}", + "select_from": "Klik for at markere et {from}-vejsegment", + "select_from_name": "Klik for at vælge {fromName} som {from}", + "toggle": "Klik for at skifte til \"{turn}\"" + } + }, "undo": { "tooltip": "Fortryd: {action}", "nothing": "Intet at fortryde." @@ -336,7 +378,7 @@ "modified": "Ændret", "deleted": "Slettet", "created": "Oprettet", - "about_changeset_comments": "Vedr. ændringssætkommentarer", + "about_changeset_comments": "Om kommentarer til ændringssæt", "about_changeset_comments_link": "http://wiki.openstreetmap.org/wiki/Good_changeset_comments", "google_warning": "Du nævnte Google i denne kommentar: husk at kopiering fra Google Maps er strengt forbudt.", "google_warning_link": "https://www.openstreetmap.org/copyright" @@ -366,6 +408,7 @@ "key": "H", "title": "Historik", "selected": "{n} markerede", + "no_history": "Ingen historik (ny funktionalitet)", "version": "Version", "last_edit": "Sidst ændret", "edited_by": "Ændret af", @@ -603,15 +646,19 @@ } }, "success": { - "edited_osm": "Redigerede OSM!", "just_edited": "Du har lige redigeret OpenStreetMap!", - "view_on_osm": "Vis på OSM", - "facebook": "Del på Facebook", - "twitter": "Del på Twitter", - "google": "Del på Google+", - "help_html": "Dine ændringer vil komme frem i \"Standard\"-kortlaget om få minutter. Andre kortlag, og specielle objekter, kan tage længere tid.", + "thank_you": "Tak fordi du forbedrede kortet.", + "thank_you_location": "Tak fordi du forbedrede kortet omkring {where}.", + "help_html": "Dine ændringer bør dukke op på OpenStreetMap inden for få minutter. Det kan tage længere tid for andre kort at modtage opdateringer.", "help_link_text": "Detaljer", - "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F", + "view_on_osm": "Vis ændringer på OSM", + "changeset_id": "Dit ændringssætnummer: {changeset_id}", + "like_osm": "Kan du lide OpenStreetMap? Få kontakt med andre:", + "more": "Mere", + "languages": "Sprog: {languages}", + "missing": "Mangler der noget på listen?", + "tell_us": "Fortæl os det!" }, "confirm": { "okay": "OK", @@ -712,7 +759,9 @@ "select_left_click": "{leftclick} Venstre-klik på et kortobjekt for at markere det. Dette vil fremhæve det med en pulserende glød, og i kanten af kortet vises detaljer om objektet, såsom navn og adresse.", "select_right_click": "{rightclick} Højreklik på et kortobjekt for at vise redigeringsmenuen, som viser de mulige værktøjer der kan anvendes, såsom rotation, flytning og sletning.", "multiselect_h": "Multi-markering", - "save_h": "Gem" + "multiselect_shift_click": "`{shift}`+{leftclick} venstreklik for at markere flere kortobjekter ad gangen. Dette gør det nemmere at flytte eller slette flere objekter i en operation.", + "save_h": "Gem", + "upload": "Før du uploader dine ændringer, skal du skrive en [kommentar til ændringssættet](https://wiki.openstreetmap.org/wiki/Good_changeset_comments). Dernæst skal du klikke på **Upload** for at sende dine ændringer til OpenStreetMap, hvor de vil blive føjet til kortet og blive offentligt synlige for alle." }, "feature_editor": { "title": "Redigeringsværktøj til kortobjekter", @@ -741,6 +790,44 @@ "offsets_h": "Justering af luftfoto-offset", "offset": "Den registrerede position for et luftfoto er nogle gange ikke helt korrekt i forhold til kortet. Hvis du ser at bygninger og veje generelt er forskudt mellem kort og luftfoto, kan det være luftfotoet der er unøjagtigt, så i stedet for at flytte alle kortobjekter kan du justere baggrunden så den er samstemmende med kortets data ved at åbne \"Juster luftfoto-offset\" i bunden af Baggrundsindstillinger-fanen.", "offset_change": "Klik på de små trekanter for at justere offset i små intervaller, eller hold venstre musetast nede og træk indenfor den grå firkant for at trække luftfotoet på plads." + }, + "field": { + "restrictions": { + "title": "Hjælp til svingbegrænsninger", + "about": { + "title": "Om", + "about": "Dette felt gør det muligt at inspicere og redigere svingbegrænsninger. Det viser en model af det valgte vejkryds inklusiv forbundne veje i nærheden.", + "from_via_to": "En svingbegrænsning indeholder altid: en **FRA-vej**, en **TIL-vej** og enten en **VIA-node** eller en eller flere **VIA-veje**.", + "maxdist": "Med \"{distField}\"-kontrolelementet indstilles hvor langt omkring der søges efter forbundne veje,", + "maxvia": "Med \"{viaField}\"-kontrolelementet justeres hvor mange VIA-veje der kan inkluderes. (tip: så få som muligt bør foretrækkes)" + }, + "inspecting": { + "title": "Inspektion", + "about": "Før musen over ethvert **FRA**-segment for at se om det har eksisterende svingbegrænsninger. Ethvert muligt **TIL**-segment vil tegnes med en farvet skygge der viser om en begrænsning eksisterer.", + "from_shadow": "{fromShadow} **FRA-segment**", + "allow_shadow": "{allowShadow} **TIL tilladt**", + "restrict_shadow": "{restrictShadow} **TIL begrænset**", + "only_shadow": "{onlyShadow} **TIL kun (påbudt)**", + "restricted": "\"Begrænset\" indikerer at der er en specifik svingbegrænsning, for eksempel \"ingen venstresving\".", + "only": "\"Kun (påbudt)\" indikerer at et køretøj der følger denne rute kun kan vælge denne vej, for eksempel \"kun ligeudkørsel\"." + }, + "modifying": { + "title": "Redigering", + "about": "For at redigere svingbegrænsninger skal du først klikke på det startende **FRA**-segment for at vælge dette. Det valgte segment vil pulsere og alle mulige **TIL**-segmenter vil blive vist med et sving-symbol.", + "indicators": "Klik nu på et dreje-symbol for at skifte det mellem \"tilladt\", \"begrænset\" og \"kun (påbudt)\".", + "allow_turn": "{allowTurn} **TIL tilladt**", + "restrict_turn": "{restrictTurn} **TIL begrænset**", + "only_turn": "{onlyTurn} **TIL kun (påbudt)**" + }, + "tips": { + "title": "Tips", + "simple": "**Foretræk simple begrænsninger i stedet for komplekse.**", + "simple_example": "Undgå for eksempel en begrænsning med en VIA-vej hvis en simplere med en VIA-node ville være tilstrækkeligt.", + "indirect": "**Nogle begrænsninger vises med teksten \"(indirekte)\" og tegnes med en lysere farve.**", + "indirect_example": "Disse begrænsninger eksisterer på grund af andre begrænsninger i nærheden. For eksempel vil en begrænsning med \"kun ligeudkørsel\" i et kryds skabe indirekte \"ingen sving\"-begrænsninger for alle øvrige veje gennem krydset.", + "indirect_noedit": "Du kan ikke redigere indirekte svingbegrænsninger. I stedet skal du redigere den nærtliggende direkte svingbegrænsning." + } + } } }, "intro": { @@ -2448,9 +2535,6 @@ "label": "Type", "placeholder": "Standard" }, - "vending": { - "label": "Varetype" - }, "visibility": { "label": "Synlighed", "options": { @@ -2504,6 +2588,9 @@ "wheelchair": { "label": "Kørestolsadgang" }, + "wholesale": { + "label": "Engros" + }, "width": { "label": "Bredde (meter)" }, @@ -2612,6 +2699,10 @@ "name": "Lufthavnsterminal", "terms": "Lufthavnsterminal" }, + "allotments/plot": { + "name": "Fælleshave", + "terms": "fælleshave,have,fællesskab" + }, "amenity": { "name": "Facilitet" }, @@ -2675,10 +2766,17 @@ "name": "Valutaveksling", "terms": "Valutaveksling" }, + "amenity/bus_station": { + "name": "Busstation/rutebilstation" + }, "amenity/cafe": { "name": "Cafe", "terms": "Cafe, Café" }, + "amenity/car_pooling": { + "name": "Samkørselsplads", + "terms": "samkørsel,bildeling,deling,deleøkonomi" + }, "amenity/car_rental": { "name": "Biludlejning", "terms": "Biludlejning" @@ -2711,6 +2809,14 @@ "name": "Klinik", "terms": "Klinik" }, + "amenity/clinic/abortion": { + "name": "Abortklinik", + "terms": "abort,fosteruddrivelse,provokeret abort,foster," + }, + "amenity/clinic/fertility": { + "name": "Fertilitetsklinik", + "terms": "Fertilitet, børn, graviditet, reagensglas" + }, "amenity/clock": { "name": "Ur", "terms": "Ur" @@ -2766,6 +2872,9 @@ "name": "Fast food", "terms": "Fastfood, Grillbar, Pølsevogn" }, + "amenity/ferry_terminal": { + "name": "Færgeterminal" + }, "amenity/fire_station": { "name": "Brandstation", "terms": "" @@ -2814,16 +2923,25 @@ "name": "Bibliotek", "terms": "" }, + "amenity/love_hotel": { + "name": "Kærlighedshotel", + "terms": "kærlighed, romantik, samvær" + }, "amenity/marketplace": { "name": "Markedsplads", "terms": "Markedsplads" }, + "amenity/monastery": { + "name": "Kloster-område", + "terms": "kloster, nonne, katedral, kapel, kirke, gud, bøn" + }, "amenity/motorcycle_parking": { "name": "Motorcykelparkering", "terms": "Motorcykelparkering" }, "amenity/music_school": { - "name": "Musikskole" + "name": "Musikskole", + "terms": "musik,skole,undervisning" }, "amenity/nightclub": { "name": "Natklub", @@ -2925,7 +3043,8 @@ "terms": "Rangerstation" }, "amenity/recycling": { - "name": "Genbrugscontainer" + "name": "Genbrugscontainer", + "terms": "genbrug, miljø, ressourcer" }, "amenity/recycling_centre": { "name": "Genbrugsplads", @@ -2957,6 +3076,10 @@ "name": "Brusebad", "terms": "bruser,styrtebad" }, + "amenity/smoking_area": { + "name": "Rygeområde", + "terms": "rygning, tobak, røg" + }, "amenity/social_facility": { "name": "Sociale faciliteter", "terms": "Sociale faciliteter" @@ -3402,6 +3525,10 @@ "name": "Urmager", "terms": "Urmager" }, + "craft/confectionery": { + "name": "Slikproducent", + "terms": "slik, sukker, bolcher, chokolade, søde sager" + }, "craft/distillery": { "name": "Distelleri", "terms": "distellering,alkohol,sprit" @@ -3650,6 +3777,14 @@ "name": "Golfvandbunker", "terms": "Golfvandbunker" }, + "healthcare": { + "name": "Sundhedsfacilitet", + "terms": "sundhed, klinik, sygdom, kirurgi" + }, + "healthcare/alternative": { + "name": "Alternativ medicin", + "terms": "alternativ, akupunktur, aromaterapi, urteterapi, urter,hypnose" + }, "healthcare/alternative/chiropractic": { "name": "Kiropraktor" }, @@ -3666,10 +3801,12 @@ "terms": "Blodbank, Donorblodbank" }, "healthcare/hospice": { + "name": "Hospice", "terms": "terminal,død,sygdom" }, "healthcare/midwife": { - "name": "Jordemoder" + "name": "Jordemoder", + "terms": "baby, fødsel, graviditet" }, "healthcare/optometrist": { "name": "Optiker", @@ -3694,6 +3831,9 @@ "name": "Ridesti", "terms": "Ridesti, Hestesti" }, + "highway/bus_stop": { + "name": "Busstop / trinbrædt" + }, "highway/corridor": { "name": "Indendørskorridor", "terms": "Indendørskorridor, Indendørspassage" @@ -4076,6 +4216,10 @@ "name": "Voksen spillecenter", "terms": "Voksen spillecenter, Spillehal" }, + "leisure/amusement_arcade": { + "name": "Spillehal", + "terms": "spil, game, gaming, pinball, flipper, videospil" + }, "leisure/bird_hide": { "name": "Fugletårn", "terms": "Fugletårn" @@ -4092,6 +4236,9 @@ "name": "Dansehal", "terms": "Dansehal, Dansested" }, + "leisure/dancing_school": { + "name": "Danseskole" + }, "leisure/dog_park": { "name": "Hundepark", "terms": "Hundepark" @@ -4140,6 +4287,10 @@ "name": "Naturreservat", "terms": "Naturreservat" }, + "leisure/outdoor_seating": { + "name": "Udendørs siddepladser", + "terms": "siddeplads, udendørs, spise, drikke, cafe, restaurant" + }, "leisure/park": { "name": "Park", "terms": "Park, Parkområde" @@ -4168,6 +4319,10 @@ "name": "Beachvolleybane", "terms": "beachvolley,beach,volley,beach volley" }, + "leisure/pitch/boules": { + "name": "Boules/petanque-bane", + "terms": "petanque, boules" + }, "leisure/pitch/bowls": { "name": "Bowling græsplæne", "terms": "Bowling græsplæne, Keglebane" @@ -4220,6 +4375,10 @@ "name": "Løbebane (Løb)", "terms": "Løbebane (Løb)" }, + "leisure/sauna": { + "name": "Sauna", + "terms": "sauna, varme" + }, "leisure/slipway": { "name": "Bådrampe", "terms": "Bådrampe, Skibsrampe" @@ -4260,6 +4419,10 @@ "name": "Mineindgang", "terms": "Mineindgang" }, + "man_made/antenna": { + "name": "Antenne", + "terms": "antenne, radio, frekvens, kommunikation, tv, fjernsyn" + }, "man_made/breakwater": { "name": "Bølgebryder", "terms": "Bølgebryder" @@ -4272,6 +4435,10 @@ "name": "Skorsten", "terms": "Skorsten" }, + "man_made/crane": { + "name": "Kran", + "terms": "kran, løft, grej" + }, "man_made/cutline": { "name": "Skærelinje", "terms": "Skærelinje" @@ -4303,6 +4470,10 @@ "name": "Observationstårn", "terms": "observationstårn, udkigstårn" }, + "man_made/observatory": { + "name": "Observatorie", + "terms": "astronomi, astrofysik, meteorologi" + }, "man_made/petroleum_well": { "name": "Oliebrønd", "terms": "Oliebrønd" @@ -4423,6 +4594,9 @@ "name": "Hede", "terms": "Hede" }, + "natural/mud": { + "name": "Mudder" + }, "natural/peak": { "name": "Højdedrag", "terms": "Højdedrag, Bakketop, Bjergtop" @@ -4495,9 +4669,25 @@ "name": "Kontor", "terms": "Kontor" }, + "office/accountant": { + "name": "Revisor-kontor", + "terms": "revisor, regnskab, tal, matematik" + }, "office/administrative": { "name": "Administrativt kontor" }, + "office/adoption_agency": { + "name": "Adoptionsbureau", + "terms": "adoption, børn, barnløshed" + }, + "office/advertising_agency": { + "name": "Reklamebureau", + "terms": "reklame, tv, marketing, radio" + }, + "office/architect": { + "name": "Arkitekt-kontor", + "terms": "arkitekt, tegning, bygning" + }, "office/coworking": { "name": "Kontorfællesskab", "terms": "Kontorfællesskab, Fællesskabsarbejdsplads" @@ -5378,18 +5568,6 @@ "name": "Ingen U-vending", "terms": "Ingen U-vending" }, - "type/restriction/only_left_turn": { - "name": "Kun venstresving tilladt", - "terms": "Kun venstresving tilladt" - }, - "type/restriction/only_right_turn": { - "name": "Kun højresving tilladt", - "terms": "Kun højresving tilladt" - }, - "type/restriction/only_straight_on": { - "name": "Ingen sving tilladt", - "terms": "Ingen sving tilladt" - }, "type/route": { "name": "Rute", "terms": "Rute" @@ -5469,7 +5647,7 @@ "terms": "Kanal" }, "waterway/dam": { - "name": "Dam", + "name": "Dæmning", "terms": "Dam" }, "waterway/ditch": { @@ -5525,39 +5703,44 @@ }, "DigitalGlobe-Premium": { "attribution": { - "text": "Betingelser & tilbagemelding" + "text": "Vilkår & tilbagemelding" }, "description": "Premium DigitalGlobe satellitfoto.", "name": "DigitalGlobe Premium fotos" }, "DigitalGlobe-Premium-vintage": { "attribution": { - "text": "Vilkår & Tilbagemelding" + "text": "Vilkår & tilbagemelding" }, - "description": "Luftfoto grænser og optagelsesdatoer. Tekstmærkater optræder ved zoom-niveau 14 og højere.", "name": "DigitalGlobe Premium ældre fotos" }, "DigitalGlobe-Standard": { "attribution": { - "text": "Betingelser & tilbagemelding" + "text": "Vilkår & tilbagemelding" }, "description": "Standard DigitalGlobe satellitfotos.", "name": "DigitalGlobe Standard fotos" }, "DigitalGlobe-Standard-vintage": { "attribution": { - "text": "Vilkår & Tilbagemelding" + "text": "Vilkår & tilbagemelding" }, - "description": "Luftfoto grænser og optagelsesdatoer. Tekstmærkater optræder ved zoom-niveau 14 og højere.", "name": "DigitalGlobe Standard ældre fotos" }, "EsriWorldImagery": { "attribution": { - "text": "Betingelser & tilbegemelding" + "text": "Vilkår & tilbagemelding" }, "description": "Esri World fotos.", "name": "Esri World fotos" }, + "EsriWorldImageryClarity": { + "attribution": { + "text": "Vilkår & tilbagemelding" + }, + "description": "Esri arkivfotos som kan være af bedre kvalitet og mere præcise end standard-laget.", + "name": "Esri World fotos (Clarity) Beta" + }, "MAPNIK": { "attribution": { "text": "© OpenStreetMap bidragsydere, CC BY-SA" @@ -5567,7 +5750,7 @@ }, "Mapbox": { "attribution": { - "text": "Betingelser & tilbegemelding" + "text": "Vilkår & tilbagemelding" }, "description": "Satellit og luft-foto.", "name": "Mapbox Satellite" @@ -5626,25 +5809,40 @@ "name": "TIGER Roads 2017" }, "Waymarked_Trails-Cycling": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap-bidragsydere, CC by-SA 3.0" + }, "name": "Afmærkede spor: Cykling" }, "Waymarked_Trails-Hiking": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap-bidragsydere, CC by-SA 3.0" + }, "name": "Afmærkede spor: Vandring" }, "Waymarked_Trails-MTB": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap-bidragsydere, CC by-SA 3.0" + }, "name": "Afmærkede spor: MTB" }, "Waymarked_Trails-Skating": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap-bidragsydere, CC by-SA 3.0" + }, "name": "Afmærkede spor: Skøjtning" }, "Waymarked_Trails-Winter_Sports": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap-bidragsydere, CC by-SA 3.0" + }, "name": "Afmærkede spor: Vintersport" }, "basemap.at": { "attribution": { "text": "basemap.at" }, - "description": "Basiskort for Østrig, baseret på offentlige data.", + "description": "© waymarkedtrails.org, OpenStreetMap-bidragsydere, CC by-SA 3.0", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -5662,7 +5860,7 @@ }, "mapbox_locator_overlay": { "attribution": { - "text": "Betingelser & tilbagemelding" + "text": "Vilkår & tilbagemelding" }, "description": "Viser større objekter for at hjælpe dig med at finde vej.", "name": "Lokaliserings-overlag" @@ -5705,9 +5903,6 @@ "name": "skobbler" }, "stamen-terrain-background": { - "attribution": { - "text": "Kort-fliser af Stamen Design, under CC BY 3.0" - }, "name": "Stamen Terræn" }, "tf-cycle": { diff --git a/vendor/assets/iD/iD/locales/de.json b/vendor/assets/iD/iD/locales/de.json index 32b760c42..ca36b0862 100644 --- a/vendor/assets/iD/iD/locales/de.json +++ b/vendor/assets/iD/iD/locales/de.json @@ -1,5 +1,10 @@ { "de": { + "icons": { + "information": "Info", + "remove": "entfernen", + "undo": "rückgängig" + }, "modes": { "add_area": { "title": "Fläche", @@ -145,7 +150,9 @@ "vertex": "Weg mit einem anderem Weg verbunden.", "line": "Weg mit einer Linie / einer Fläche verbunden.", "area": "Weg mit einer Fläche verbunden." - } + }, + "relation": "Diese Objekte können nicht verbunden werden, weil sich Ihre Relations-Rollen widersprechen.", + "restriction": "Diese Objekte können nicht verbunden werden, weil damit eine \"{relation}\" Relation beschädigt werden würde.." }, "disconnect": { "title": "Trennen", @@ -402,6 +409,7 @@ "key": "C", "title": "Chronik", "selected": "{n} ausgewählt", + "no_history": "Keine Chronik (Neues Objekt)", "version": "Version", "last_edit": "Letzte Bearbeitung", "edited_by": "Bearbeitet von", @@ -639,15 +647,20 @@ } }, "success": { - "edited_osm": "OSM bearbeitet!", "just_edited": "Du hast gerade OpenStreetMap bearbeitet!", - "view_on_osm": "Auf OpenStreetMap ansehen", - "facebook": "Auf Facebook teilen", - "twitter": "Auf Twitter teilen", - "google": "Auf Google+ teilen", - "help_html": "Deine Änderungen sollten in der \"Standard\"-Ebene in wenigen Minuten erscheinen. Andere Ebenen und bestimmte Objekte können länger dauern.", + "thank_you": "Danke für die Verbesserung der Karte.", + "thank_you_location": "Danke für die Verbesserung der Karte in {where}.", + "help_html": "Deine Änderungen sollten auf OpenStreetMap innerhalb weniger Minuten auftauchen.. Auf anderen Karten könne die Aktualisierung länger dauern.", "help_link_text": "Details", - "help_link_url": "https://wiki.openstreetmap.org/wiki/DE:FAQ#Wann_werden_meine_.C3.84nderungen_auf_den_Karten_gezeigt.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/DE:FAQ#Wann_werden_meine_.C3.84nderungen_auf_den_Karten_gezeigt.3F", + "view_on_osm": "Zeige Änderungen auf OSM", + "changeset_id": "Dein Änderungssatz #: {changeset_id}", + "like_osm": "Gefällt dir OpenStreetMap? Nimm Kontakt auf:", + "more": "Mehr", + "events": "Veranstaltungen", + "languages": "Sprachen: {languages}", + "missing": "Fehlt etwas auf dieser Liste?", + "tell_us": "Erzähl es uns!" }, "confirm": { "okay": "OK", @@ -861,7 +874,7 @@ "intro": "Das Hintergrund-Bildmaterial welches unter den Kartendaten erscheint ist eine wichtige Quelle zum Bearbeiten. Dieses Bildmaterial kann aus Luftbildern bestehen, die von Satelliten, Flugzeugen oder Drohnen gesammelt wurde, oder es können eingescannte historische Karten oder andere frei erhältliche Quelldaten sein.", "sources_h": "Bildmaterial-Quellen", "choosing": "Um zu sehen, welche Bildmaterial-Quellen zum Bearbeiten verfügbar sind klicke den {layers} **Hintergrundeinstellungen** Knopf auf der rechten Seite der Karte. ", - "sources": "Als Standard sind die [Bing](https://www.bing.com/maps/) Satellitenbilder als Hintergrundbild ausgewählt. Abhängig von der Gegend sind auch andere Bildmaterial-Quellen verfügbar. Sie können neuer sein oder eine höhere Auflösung haben, daher ist es immer sinnvoll zu prüfen, welches Bildmaterial die beste Referenz zum Bearbeiten ist.", + "sources": "Als Standard sind die [Bing](https://www.bing.com/maps/) Satellitenbilder als Hintergrundbild ausgewählt. Abhängig von der Gegend sind auch andere Bildmaterial-Quellen verfügbar. Sie können neuer sein oder eine höhere Auflösung haben, daher ist es immer sinnvoll zu prüfen, welches Bildmaterial die beste Referenz zum Bearbeiten ist.", "offsets_h": "Bildmaterial-Versatz anpassen", "offset": "Bildmaterial ist manchmal geringfügig zu genauen Kartendaten versetzt. Wenn du feststellst, dass viele Wege oder Gebäude gegenüber dem Hintergrund-Bildmaterial versetzt sind, dann kann es sein, dass das Bildmaterial versetzt ist, also verschiebe nicht alle Objekte damit sie zum Hintergrund passen. Stattdessen kannst du den Hintergrund anpassen, damit es zu den bestehenden Daten passt indem du den Bereich „Bildmaterial-Versatz anpassen“ unten in den Hintergrundeinstellungen aufklappst.", "offset_change": "Klicke auf die kleinen Dreiecke um den Bildmaterial-Versatz in kleinen Schritten anzupassen oder halte den linken Mausknopf gedrückt und ziehe innerhalb des grauen Rechtecks um das Bildmaterial zurechtzurücken." @@ -1336,7 +1349,7 @@ "name": "Natürliche Punkte" }, "category-path": { - "name": "Wege" + "name": "Weg, Mehrzweckweg" }, "category-rail": { "name": "Eisenbahnanlagen" @@ -1363,7 +1376,7 @@ "options": { "designated": { "description": "Zugang durch Schilder oder bestimmte lokale Gesetze erlaubt", - "title": "Vorgesehen/Gewidmet" + "title": "
      rechtsverbindlich vorgesehen / gewidmet
      " }, "destination": { "description": "Zugang nur für Anlieger/Anrainer", @@ -1694,7 +1707,7 @@ }, "track": { "description": "Radweg durch physische Barriere vom restlichen Verkehr getrennt", - "title": "Separierter Radweg" + "title": "baulich getrennter Radweg" } }, "placeholder": "nichts", @@ -1774,6 +1787,9 @@ "display": { "label": "Anzeige" }, + "distance": { + "label": "Geamte Distanz" + }, "dock": { "label": "Typ" }, @@ -1814,6 +1830,9 @@ "except": { "label": "Ausnahmen" }, + "faces": { + "label": "Gesichter" + }, "fax": { "label": "Fax", "placeholder": "+31 42 123 4567" @@ -1925,6 +1944,39 @@ "label": "Basketball", "placeholder": "1, 2, 4 ..." }, + "horse_dressage": { + "label": "Dressurreiten", + "options": { + "equestrian": "Ja", + "undefined": "Nein" + } + }, + "horse_riding": { + "label": "Pferdereiten", + "options": { + "horse_riding": "Ja", + "undefined": "Nein" + } + }, + "horse_scale": { + "label": "Schwierigkeit beim Pferdereiten", + "options": { + "common": "Einfach: Keine Probleme oder Schwierigkeiten (Standard)", + "critical": "Grenzfall: Nur für erfahrene Reiter und Pferde passierbar. Größere Hindernissen. Brücken müssen sorgfältig untersucht werden.", + "dangerous": "Gefährlich: Nur für erfahrenen Reiter und Pferde und nur bei gutem Wetter passierbar. Absteigen.", + "demanding": "Mit Vorsicht benutzen: Unebener Weg, teilweise schwierige Passagen.", + "difficult": "Schwierig: Weg schmal und ausgesetzt. Kann Hindernisse zum Übersteigen und schmale Passagen beeinhalten.", + "impossible": "Unpassierbar: Weg oder Brücke für Pferde nicht benützbar. Zu schmal, unzureichende Unterstützung, Hindernisse wie Leitern. Lebensgefahr." + }, + "placeholder": "schwierig, gefährlich ..." + }, + "horse_stables": { + "label": "Reitstall", + "options": { + "stables": "Ja", + "undefined": "Nein" + } + }, "iata": { "label": "IATA" }, @@ -1944,6 +1996,9 @@ "indoor": { "label": "Im Gebäude" }, + "industrial": { + "label": "Typ" + }, "information": { "label": "Typ" }, @@ -2064,6 +2119,10 @@ "label": "Höchstgeschwindigkeit", "placeholder": "40, 50, 60 …" }, + "maxspeed/advisory": { + "label": "Richtgeschwindigkeit", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Maximale Parkzeit" }, @@ -2652,8 +2711,19 @@ "label": "Typ", "placeholder": "Standard" }, + "usage_rail": { + "label": "Nutzungsart", + "options": { + "branch": "Zweigstrecke", + "industrial": "Güterverkehrsstrecke", + "main": "Hauptstrecke", + "military": "Militärische Nutzung", + "test": "Teststrecke", + "tourism": "Touristische Nutzung" + } + }, "vending": { - "label": "Dienstleistung" + "label": "Warentyp" }, "visibility": { "label": "Sichtbarkeit", @@ -2748,6 +2818,10 @@ "name": "Plakatwand", "terms": "Werbetafel,Anschlagtafel,Reklametafel,Anschlagbrett" }, + "advertising/column": { + "name": "Litfaßsäule", + "terms": "Litfaßsäule,Anschlagsäule,Plakatsäule,Anzeigeständer,Plakatträger" + }, "aerialway": { "name": "Seilbahn" }, @@ -2833,6 +2907,10 @@ "name": "Flughafenterminal", "terms": "Flughafenterminal, Flughafen-Abfertigungs-Gebäude, Flughafen-Empfangs-Gebäude" }, + "allotments/plot": { + "name": "Gemeinschaftsgartenparzelle", + "terms": "Gemeinschaftsgartenparzelle, Gartenparzelle, Kleingartenparzelle" + }, "amenity": { "name": "Einrichtung" }, @@ -3014,8 +3092,8 @@ "terms": "Food Court, gemeinsamer Gastronomiebereich, Selbstbedienung- und Sitzbereich für mehrere Lokale" }, "amenity/fountain": { - "name": "Springbrunnen", - "terms": "Springbrunnen, Wasserspiel" + "name": "Springbrunnen, Zierbrunnen", + "terms": "Dorfbrunnen, Marktbrunnen, Wasserspiel, Designerbrunnen" }, "amenity/fuel": { "name": "Tankstelle", @@ -3061,6 +3139,10 @@ "name": "Wochenmarkt", "terms": "Wochenmarkt, Marktverkauf, Markt" }, + "amenity/monastery": { + "name": "Klostergelände", + "terms": "Klostergelände" + }, "amenity/motorcycle_parking": { "name": "Motorradparkplatz", "terms": "Motorrad-Parkplatz" @@ -3265,6 +3347,10 @@ "name": "Zigarettenautomat", "terms": "Zigarettenautomat" }, + "amenity/vending_machine/coffee": { + "name": "Kaffeeautomat", + "terms": "Kaffeeautomat" + }, "amenity/vending_machine/condoms": { "name": "Kondomautomat", "terms": "Kondomautomat" @@ -3273,6 +3359,14 @@ "name": "Getränkeautomat", "terms": "Getränkeautomat, Getränkespender" }, + "amenity/vending_machine/electronics": { + "name": "Elektro-Zubehör-Automat", + "terms": "Elektro-Zubehör-Automat" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Münz-Sourvenir-Präge-Automat", + "terms": "Münz-Sourvenir-Präge-Automat" + }, "amenity/vending_machine/excrement_bags": { "name": "Hundekottütenspender", "terms": "Hundekot-Tütenspender, Kottütenspender, Kottütenautomat, " @@ -3281,6 +3375,18 @@ "name": "Frauenhygiene-Automat", "terms": "Frauenhygiene-Automat" }, + "amenity/vending_machine/food": { + "name": "Lebensmittel-Verkaufs-Automat ", + "terms": "Lebensmittel-Verkaufs-Automat " + }, + "amenity/vending_machine/fuel": { + "name": "Tankautomat", + "terms": "Tankautomat" + }, + "amenity/vending_machine/ice_cream": { + "name": "Speiseeis-Automat", + "terms": "Speiseeis-Automat" + }, "amenity/vending_machine/news_papers": { "name": "Zeitungsautomat" }, @@ -3300,6 +3406,10 @@ "name": "Fahrkartenautomat", "terms": "Fahrkartenautomat" }, + "amenity/vending_machine/stamps": { + "name": "Briefmarkenautomat", + "terms": "Briefmarkenautomat" + }, "amenity/vending_machine/sweets": { "name": "Süßigkeitenautomat", "terms": "Süßigkeitenautomat" @@ -3372,6 +3482,10 @@ "name": "Fallturm", "terms": "Fallturm" }, + "attraction/maze": { + "name": "Labyrinth", + "terms": "Labyrinth, Irrgarten" + }, "attraction/pirate_ship": { "name": "Piratenschiff", "terms": "Piratenschiff" @@ -3591,7 +3705,7 @@ }, "building/residential": { "name": "Allgemeines Wohngebäude", - "terms": "Wohnhaus,Einfamilienhaus,Mehrfamilienhaus" + "terms": "Wohnhaus, Einfamilienhaus, Mehrfamilienhaus" }, "building/retail": { "name": "Geschäftsgebäude", @@ -3872,7 +3986,7 @@ "terms": "Defibrillator, Defi, Schockgeber" }, "emergency/designated": { - "name": "Notzugang vorgesehen" + "name": "Rettungsweg" }, "emergency/destination": { "name": "Notzufahrt ohne Notdurchfahrt" @@ -4001,6 +4115,10 @@ "name": "Hospiz", "terms": "Sterbeklinik, Hospiz" }, + "healthcare/laboratory": { + "name": "Medizinisches Labor", + "terms": "Medizinisches Labor, Medizinlabor" + }, "healthcare/midwife": { "name": "Hebamme", "terms": "Hebamme, Entbindungspfleger, Geburtshelfer, Geburtshelferin" @@ -4096,16 +4214,20 @@ "terms": "Autobahn, Expressweg" }, "highway/motorway_junction": { - "name": "Autobahnkreuz/-abfahrt", - "terms": "Autobahnkreuz, Autobahnanschluss, Autobahndreieck, Autobahnknoten, Autobahnzubringer, Autobahnabfahrt, Autobahnexit" + "name": "Autobahnkreuzungspunkt", + "terms": "Autobahnkreuz, Autobahnanschluss, Autobahnzubringer, Autobahnabfahrt (Kreuzungspunkt)" }, "highway/motorway_link": { - "name": "Autobahnanschluss", - "terms": "Autobahnanschluss, Autobahnauffahrt, Autobahnabfahrt, Auffahrt, Abfahrt" + "name": "Autobahnauffahrt, Autobahnabfahrt", + "terms": "Autobahnanschluss, Auffahrt, Abfahrt" + }, + "highway/passing_place": { + "name": "Ausweichstelle", + "terms": "Haltebucht" }, "highway/path": { - "name": "Weg", - "terms": "Mehrzweck-Weg, Wanderweg, Reitweg, Radweg, Fußweg, Pfad" + "name": "Weg, Mehrzweck-Weg", + "terms": "Mehrzweck-Weg, Rad- und Fußweg, Rad-/Fußweg, Wanderweg, Reitweg, Radweg, Fußweg, Pfad" }, "highway/pedestrian_area": { "name": "Fußgängerzone", @@ -4128,8 +4250,8 @@ "terms": "Motorsportrennstrecke, Rennstrecke (Motorsport)" }, "highway/residential": { - "name": "Anliegerstraße", - "terms": "Anliegerstraße,Wohngebietsstraße,Siedlungsstraße,Ortsstraße" + "name": "Ortsstraße", + "terms": "Anliegerstraße, Wohngebietsstraße, Siedlungsstraße, innerörtliche Straße" }, "highway/rest_area": { "name": "Rastplatz ohne Tankstelle/Restaurant", @@ -4168,8 +4290,8 @@ "terms": "Rettungsweg, Zufahrtsstraße für Rettungskräfte, Rettungszufahrt, Feuerwehrzufahrt" }, "highway/service/parking_aisle": { - "name": "Parkplatz-Nebenfahrweg", - "terms": "Parkplatzweg, Fahrweg auf Parkplatzflächen" + "name": "Parkplatzweg", + "terms": "Parkplatzfahrgasse, Fahrweg auf Parkplatzflächen" }, "highway/services": { "name": "Raststätte mit Tankstelle/Restaurant", @@ -4439,8 +4561,8 @@ "terms": "Gelände mit religiöser Nutzung" }, "landuse/residential": { - "name": "Wohngebiet", - "terms": "Wohngebiet,Wohnanlage,Wohngegend,Wohnregion,Wohnhäuser,Siedlungsfläche" + "name": "Siedlungsraum", + "terms": "Wohngebiet, Wohngegend, Wohnregion, Siedlungsfläche, Ortslage" }, "landuse/retail": { "name": "Einzelhandel", @@ -4462,6 +4584,10 @@ "name": "Spielhalle", "terms": "Spielhalle" }, + "leisure/beach_resort": { + "name": "Strandresort", + "terms": "Strandresort, Strandhotelanalge, Badestrandresort, Badestrandhotelanlage" + }, "leisure/bird_hide": { "name": "Vogelbeobachtungsturm", "terms": "Vogelbeobachtungsturm, Vogelbeobachtungshütte" @@ -4578,6 +4704,10 @@ "name": "Naturschutzgebiet", "terms": "Naturschutzgebiet, Landschaftsschutzgebiet, Naturreservat, Naturschutzpark" }, + "leisure/outdoor_seating": { + "name": "Außengastronomie", + "terms": "Außengastronomie, Gastgarten, Schanigarten" + }, "leisure/park": { "name": "Park", "terms": "Park, Parkanlage, Esplanade, Lustgarten" @@ -4706,6 +4836,10 @@ "name": "Bergwerk - Stolleneingang", "terms": "Stollen (horizontaler Tunnel im Bergbau), Stollenmundloch" }, + "man_made/antenna": { + "name": "Antennenmast", + "terms": "Antennenanlage, Sendemast " + }, "man_made/breakwater": { "name": "Wellenbrecher", "terms": "Wellenbrecher, Buhnen, Mole" @@ -4757,6 +4891,10 @@ "name": "Aussichtsturm", "terms": "Ausguck, Ausblick, Beobachtungsstand" }, + "man_made/observatory": { + "name": "Observatorium", + "terms": "Sternenwarte" + }, "man_made/petroleum_well": { "name": "Erdölpumpe", "terms": "Tiefpumpe, Pferdekopfpumpe" @@ -4807,7 +4945,7 @@ }, "man_made/water_well": { "name": "Brunnen zur Wasserförderung", - "terms": "Brunnen,Tiefbrunnen,Trinkwasserbrunnen,Brauchwasserbrunnen" + "terms": "Bohrbrunnen, Schachtbrunnen, Tiefbrunnen, Trinkwasserbrunnen, Brauchwasserbrunnen, " }, "man_made/water_works": { "name": "Wasserwerk", @@ -4881,6 +5019,10 @@ "name": "Heidelandschaft", "terms": "Heidelandschaft, Strauchheiden" }, + "natural/mud": { + "name": "Schlamm", + "terms": "Schlamm, Schlick, Morast" + }, "natural/peak": { "name": "Berggipfel", "terms": "Gipfel,Felsnadel,Hügel,Berg,Bergspitze,Bergkuppe,Zipfel" @@ -5549,7 +5691,7 @@ }, "shop": { "name": "Laden", - "terms": "Geschäft, Ladenlokal" + "terms": "Laden, Geschäft, Ladenlokal, Shop" }, "shop/agrarian": { "name": "Agrarmarkt", @@ -5592,7 +5734,7 @@ "terms": "Badezimmereinrichtungsgeschäft,Badeinrichtungsgeschäft" }, "shop/beauty": { - "name": "Kosmetikladen", + "name": "Schönheitssalon", "terms": "Schönheits-Salon, Nagelstudio" }, "shop/beauty/nails": { @@ -5684,15 +5826,15 @@ "terms": "Süßigkeitenladen,Süßigkeitengeschäft" }, "shop/convenience": { - "name": "Gemischtwarenhandel", - "terms": "Gemischtwarenladen, Kaufgeschäft" + "name": "Gemischtwarenhandel/ Tante-Emma-Laden", + "terms": "Gemischtwarenladen, Dorfladen, Greißler, Nachbarschaftsladen, Kaufgeschäft" }, "shop/copyshop": { "name": "Kopierladen", "terms": "Kopieranstalt,Copy-Shop" }, "shop/cosmetics": { - "name": "Drogerie", + "name": "Kosmetikladen", "terms": "Drogerie,Kosmetikladen" }, "shop/craft": { @@ -5917,6 +6059,10 @@ "name": "Tierhandlung", "terms": "Tierhandlung, Zoohandlung" }, + "shop/pet_grooming": { + "name": "Tierfriseur", + "terms": "Hundefriseur, Tierfriseur" + }, "shop/photo": { "name": "Fotofachgeschäft", "terms": "Fotoladen, Fotograf, Fotogeschäft" @@ -6013,8 +6159,8 @@ "terms": "Staubsaugergeschäft,Staubsaugerladen" }, "shop/variety_store": { - "name": "Gemischtwarenhandel", - "terms": "Gemischtwarenladen, Kaufgeschäft" + "name": "Billigladen", + "terms": "Ein-Euro-Geschäft, Ein-Euro-Laden, Schnäppchenmarkt, Ramschladen, Sonderpostenmarkt, Restpostenmarkt" }, "shop/video": { "name": "Videothek", @@ -6058,7 +6204,7 @@ }, "tourism/apartment": { "name": "Ferienwohnung", - "terms": "Ferienwohnung, Gästewohnung, Gästeapartment" + "terms": "Ferienwohnung, Gästewohnung, Gästeapartment, Ferienappartement, Gästeappartement" }, "tourism/aquarium": { "name": "Aquarium", @@ -6136,6 +6282,10 @@ "name": "Themenpark", "terms": "Themenpark, Freizeitpark" }, + "tourism/trail_riding_station": { + "name": "Wanderreitstation", + "terms": "Wanderreitstation, Gastpferdeübernachtungsmöglichkeit" + }, "tourism/viewpoint": { "name": "Aussichtspunkt", "terms": "Aussichtspunkt" @@ -6204,11 +6354,11 @@ "terms": "Abbiegebeschränkung, Beschränkung, Einschränkung" }, "type/restriction/no_left_turn": { - "name": "Linksabbiegeverbot", + "name": "Kein Linksabbiegen", "terms": "Linksabbiegeverbot, Linksabbiegen verboten, kein Linksabbiegen, kein Abbiegen nach links" }, "type/restriction/no_right_turn": { - "name": "Rechtsabbiegeverbot", + "name": "Kein Rechtsabbiegen", "terms": "Rechtsabbiegeverbot, Rechtsabbiegen verboten, kein Rechtsabbiegen, kein Abbiegen nach rechts" }, "type/restriction/no_straight_on": { @@ -6216,20 +6366,24 @@ "terms": "Geradeausfahrverbot, Geradeausfahren verboten, geradeaus fahren nicht erlaubt" }, "type/restriction/no_u_turn": { - "name": "Kehrtwendeverbot", - "terms": "Kehrtwendeverbot, Kehrtwende verboten, Umkehren verboten, Umdrehen verboten" + "name": "Keine Kehrtwende", + "terms": "Kehrtwendeverbot, Kehrtwende verboten, Umkehren verboten, Umdrehen verboten, Keine Kehrtwende, Kein Umdrehen, Keine Umkehren" }, "type/restriction/only_left_turn": { - "name": "Linksabbiegegebot", - "terms": "Linksabbiegegebot, Links abbiegen geboten, nur links abbiegen erlaubt" + "name": "Nur Linksabbiegen", + "terms": "Nur Linksabbiegen, Linksabbiegegebot, nur Abbiegen nach Links" }, "type/restriction/only_right_turn": { - "name": "Rechtsabbiegegebot", - "terms": "Rechtsabbiegegebot, Rechts abbiegen geboten, nur rechts abbiegen erlaubt" + "name": "Nur Rechtsabbiegen", + "terms": "Nur Rechtsabbiegen, Rechtsabbiegegebot, Nur Abbiegen nach Rechts" }, "type/restriction/only_straight_on": { - "name": "Kein Abbiegen", - "terms": "Abbiegeverbot, nur geradeaus, Abbiegen verboten" + "name": "Nur geradeaus", + "terms": "Nur geradeaus" + }, + "type/restriction/only_u_turn": { + "name": "Nur Kehrtwende", + "terms": "Nur Kehrtwende, Kehrtwendegebot, Nur Umkehren, Umkehrgebpt" }, "type/route": { "name": "Route", @@ -6392,7 +6546,7 @@ "attribution": { "text": "Bedingungen & Feedback" }, - "description": "Lufbildgrenzen und Aufnahmedaten. Die Beschriftung erscheint auf Zoom Level 14 und höher.", + "description": "Kachelgrenzen und Aufnahmedatum werden bei Zoom-Level 13 und höher angezeigt.", "name": "DigitalGlobe Premium Bildmaterial Klassisch" }, "DigitalGlobe-Standard": { @@ -6406,7 +6560,7 @@ "attribution": { "text": "Bedingungen & Feedback" }, - "description": "Lufbildgrenzen und Aufnahmedaten. Die Beschriftung erscheint auf Zoom Level 14 und höher.", + "description": "Kachelgrenzen und Aufnahmedatum werden bei Zoom-Level 13 und höher angezeigt.", "name": "DigitalGlobe Standard Bildmaterial Klassisch" }, "EsriWorldImagery": { @@ -6490,6 +6644,10 @@ "description": "Gelb = Freie Daten vom US Census. Rot = In OpenStreetMap fehlende Daten", "name": "TIGER Straßen 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "Straße: Grüner Rand = Nebenstraße. Brauner Rand = Feldweg/Waldweg. Oberfläche: Schotter = hellbraune Füllung, Asphalt = schwarz, befestigt = grau, ground = weiß, Beton = blau, Gras = grün. Saisonal = weißes Gitter", + "name": "U.S.A. Forststraßen Overlay" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, OpenStreetMap-Mitwirkende, CC BY-SA 3.0" @@ -6524,7 +6682,7 @@ "attribution": { "text": "basemap.at" }, - "description": "Amtliche Verwaltungsgrundkarte von Österreich", + "description": "basemap von Österreich, basiert auf Regierungsdaten", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6586,7 +6744,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Kacheln © Stamen Design, CC-BY 3.0" + "text": "Kacheln © Stamen Design, CC BY 3.0, Kartendaten © OpenStreetMap-Mitwirkende, ODbL 1.0" }, "name": "Stamen Terrain" }, @@ -6602,6 +6760,649 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "cape-coast-youthmappers": { + "name": "Universität von Cape Coast YouthMappers", + "description": "Folge uns auf Twitter {url}", + "extendedDescription": "Das ist der offizielle handle für die Gruppe der Jungen Mapper der Universität von Cape Coast, Ghana. Wir lieben Karten, Offene Daten und Unterstützung für die Schutzlosen" + }, + "osm-gh-facebook": { + "name": "OpenStreetMap Ghana auf Facebook", + "description": "Facebook Grupep für Menschen mit Interesse an OpenStreetMap.", + "extendedDescription": "Gemeischaft der Mapper in Ghana Förderung von OpenStreetMap und den Humanitarian OpenStreetMap Team (HOT) Projecten in Ghana. Beteilige dich!" + }, + "osm-gh-twitter": { + "name": "OpenStreetMap Ghana auf Twitter", + "description": "Folge uns auf Twitter {url}" + }, + "talk-gh": { + "name": "Talk-gh Mailing Liste", + "description": "Talk-gh ist die offizielle Mailing Liste für die OSM Gemeinschaft in Ghana." + }, + "osm-mg-facebook": { + "name": "OpenStreetMap Madagaskar Facebook Group", + "description": "Madagaskar Facebook Gruppe für Menschen mit Interessen in OpenStreetMap." + }, + "talk-mg": { + "name": "Talk-mg Mailing Liste", + "description": "Platz für OpenStreetMap Mitwirkende, Gemeinschaften und Benutzer in Madagaskar um zu diskutieren und Ideen zu teilen." + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap Bangladesh", + "description": "Verbessere OpenStreetMap in Bangladesh", + "extendedDescription": "Mappen in Bangladesch? Hast du Fragen, willst du dich mit der bangladesischen OSM Gemeinschaft verbinden? Kontaktiere uns unter {Url}. Alle sind willkommen!" + }, + "OSM-India-facebook": { + "name": "OpenStreetMap Indien - Nachbarschaftsmapping", + "description": "Verbessere OpenStreetMap in Indien", + "extendedDescription": "Mappen in Indien? Hast du Fragen, willst du dich mit der Gemeinschaft hier verbinden? Kontaktiere uns unter {Url}. Alle sind willkommen!", + "events": { + "sotmasia2018": { + "name": "State of the Map Asien 2018", + "description": "Beteiligte dich an dem 2018 OpenStreetMap Eventu \"State of the Map Asia\" in Indien", + "where": "Indisches Institut für Management, Bangalore, Indien" + } + } + }, + "OSM-india-mailinglist": { + "name": "OpenStreetMap India Mailing Liste", + "description": "Talk-in ist die offizielle Mailing Liste für die Indische Community" + }, + "OSM-india-twitter": { + "name": "OpenStreetMap Indien Twitter", + "description": "Wir sind nur einen Tweet weit weg: {url}" + }, + "OSM-India-Puducherry-Facebook": { + "name": "Freie Software Hardware Bewegung - Facebook", + "description": "FSHM Facebook Seite für Veranstaltungen und Aktivitäten der Gemeinschaft", + "extendedDescription": "FSHM organisiert Veranstaltungen für freie Software/Hard, Technologie, Aktivismus für OpenStreetMap. Seine Facebook Seite ist der beste Weg um in Kontakt mit sweinen Veranstaltungen zu bleiben." + }, + "OSM-India-Puducherry-Matrix": { + "name": "Freie Software Hardware Bewegung - Matrix", + "description": "FSHM Riot Gruppe zum diskutieren, plaudern und mehr über Mapping Aktivitäten zu erfahren, Veranstaltungen in und um Puducherry", + "extendedDescription": "Mitglieder der FSHM Gemeinschaft reden über ihre OSM Mapping Updates und Erfahrungen in der Riot.im Gruppe, in dieser Gruppe wird auch über freie Software / Hardware, Technologie und Aktivismus diskutiert." + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap Indonesien", + "description": "Verbessere OpenStreetMap in Indonesien", + "extendedDescription": "Mappen in Indonesien? Hast du Fragen, willst du dich mit der indonesischen OSM Gemeinschaft verbinden? Kontaktiere uns unter {Url}. Alle sind willkommen!" + }, + "OSM-japan-facebook": { + "name": "OpenStreetMap Gemeinschaft Japan", + "description": "Mapper und OpenStreetMap Benutzer in Japan" + }, + "OSM-japan-mailinglist": { + "name": "OpenStreetMap Japan Mailingliste", + "description": "Talk-ja ist die offizielle Mailingliste für die Japanische OSM-Gemeinschaft" + }, + "OSM-japan-twitter": { + "name": "OpenStreetMap Japan Twitter", + "description": "Hashtag auf Twitter: {url}" + }, + "OSM-MY-forum": { + "name": "OpenStreetMap Malaysien Forum", + "description": "Officielles OpenStreetMap Malaysien Forum" + }, + "OSM-MY-matrix": { + "name": "OpenStreetMap Malaysien Riot channel", + "description": "Alle Mapper sind willkommen, melde dich an: {signupUrl}" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap Mongolien", + "description": "Verbessere in der Mongolei", + "extendedDescription": "Mappen in Mongolien? Hast du Fragen, willst du dich mit der mongolischen OSM Gemeinschaft verbinden? Kontaktiere uns unter {Url}. Alle sind willkommen!" + }, + "OSM-MMR-facebook": { + "name": "OpenStreetMap Myanmar", + "description": "Verbessere OpenStreetMap in Myanmar", + "extendedDescription": "Mappst du in Myanmar? Hast du Fragen, willst du mit der OSM-Gemeinschaft Kontakt aufnehmen? Besuche uns auf {Url}. Alle sind willkommen!" + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap Nepal", + "description": "Verbessere in Nepal", + "extendedDescription": "Mappen in Nepal? Hast du Fragen, willst du dich mit der nepalesischen OSM Gemeinschaft verbinden? Kontaktiere uns unter {Url}. Alle sind willkommen!" + }, + "OSM-PH-facebook": { + "name": "OpenStreetMap PH Facebook", + "description": "Willkommen zu OpenStreetMap auf den Philippinen, wo wir alle Filipinos ermutigen zu dem OpenStreetMap Projekt beizutragen." + }, + "OSM-PH-mailinglist": { + "name": "Talk-ph Mailingliste", + "description": "Eine Mailingliste umd OpenStreetMap auf den Philippinen zu diskutieren" + }, + "OSM-PH-slack": { + "name": "OpenStreetMap Philippinen Slack", + "description": "Alle sind willkommen, melde dich an: {signupUrl}" + }, + "OSM-PH-telegram": { + "name": "OpenStreetMap Philippinen Telegram", + "description": "Inoffizielle lokale Telegram Gemeinschaft von OpenStreetMap Mitwirkenden und Freunden auf den Philippinen" + }, + "OSM-RU-forum": { + "name": "OpenStreetMap Russland forum", + "description": "OpenStreetMap Russland web forum" + }, + "OSM-RU-telegram": { + "name": "OpenStreetMap Russland telegram", + "description": "OpenStreetMap Russland telegram chat" + }, + "OSM-LKA-facebook": { + "name": "OpenStreetMap Sri Lanka", + "description": "Verbessere in Sri Lanka", + "extendedDescription": "Mappen in Sri Lanka? Hast du Fragen, willst du dich mit der sri-lankischen OSM Gemeinschaft verbinden? Kontaktiere uns unter {Url}. Alle sind willkommen!" + }, + "OSM-TW-facebook": { + "name": "OpenStreetMap Taiwan Gemeinschaft", + "description": "Facebook Gruppe für Mapper und OpenStreetMap Benutzer um über Angelegenheiten für Taiwan zu diskutieren." + }, + "OSM-TW-mailinglist": { + "name": "OpenStreetMap Taiwan Mailingliste", + "description": "Talk-tw is eine offizielle Mailingliste for the Gemeinschaft um über Taiwan-Angelegenheite zu diskutieren" + }, + "at-forum": { + "name": "OpenStreetmap Österreich Forum", + "description": "Das offizielle Forum für Fragen zu OpenStreetmap in und um Österreich" + }, + "at-mailinglist": { + "name": "Talk-at Mailing Liste", + "description": "Talk-at ist die offizielle Mailing Liste der österreichischen OSM Gemeinschaft" + }, + "at-twitter": { + "name": "OpenStreetMap Österreich Twitter", + "description": "OpenStreetMap Österreich auf Twitter: {url}" + }, + "osmgraz-meetup": { + "name": "OSM Gemeinschaft Treffen Graz", + "description": "Monatliches Treffen der OSM Gemeinschaft in Graz" + }, + "osmgraz-twitter": { + "name": "OSM Gemeinschaft Graz auf Twitter", + "description": "OpenStreetMap Gemeinschaft Graz auf Twitter" + }, + "osm-at": { + "name": "OpenStreetMap Österreich", + "description": "Die Plattform für Information über OpenStreetMap in Österreich" + }, + "be-facebook": { + "name": "OpenStreetMap Belgien Gemeinschaft", + "description": "Mapper und OpenStreetMap Benutzer in Belgien" + }, + "be-forum": { + "name": "OpenStreetMap Belgien Forum", + "description": "OpenStreetMap Belgien Web Forum" + }, + "be-mailinglist": { + "name": "Talk-be Mailing Liste", + "description": "Talk-be ist die offizielle Mailing Liste für die Belgische OSM Gemeinschaft" + }, + "be-matrix": { + "name": "OpenStreetMap Belgien Riot Channel", + "description": "Alle Mapper sind willkommen, melde dich an: {signupUrl}", + "extendedDescription": "Es gibt mehrer Kanäle, beispielsweise für Anfänger, Flächennutzung, Entwicklung und auch thematische Kanäle" + }, + "be-meetup": { + "name": "OpenStreetMap Belgien Treffen", + "description": "Persönliches Treffen von alle die an OpenStreetMap interessiert sind", + "extendedDescription": "Du kannst andere Mapper bei persönliche Treffen kennenlernen, mit Ihnen diskutieren und von Ihnen lernen. Neulige sind ausdrücklich willkommen." + }, + "be-twitter": { + "name": "OpenStreetMap Belgien Twitter", + "description": "OSM Belgien auf Twitter: {url}" + }, + "byosm": { + "name": "OpenStreetMap Weißrussland", + "description": "OpenStreetMap Weißrussland telegram chat" + }, + "talk-cz-mailinglist": { + "name": "Talk-cz Mailingliste", + "description": "Talk-cz is die offizielle Mailingliste for the tschechische OSM-Gemeinschaft" + }, + "de-berlin-mailinglist": { + "name": "Berlin Mailing Liste", + "description": "Das ist die Mailing Liste für die Berliner OSM Gemeinschaft" + }, + "de-berlin-meetup": { + "name": "OpenStreetMap Berlin-Brandenburg Treffen", + "description": "Mapper und OpenStreetMap Benutzer in der Berliner Gegend" + }, + "de-berlin-telegram": { + "name": "@osmberlin auf Telegram", + "description": "OpenStreetMap Berlin Telegram chat" + }, + "de-berlin-twitter": { + "name": "OpenStreetMap Berlin Twitter", + "description": "Folge uns auf Twitter: {url}" + }, + "de-forum": { + "name": "OpenStreetMap Deutschland Forum", + "description": "OpenStreetMap Deutschland Web Forum" + }, + "de-irc": { + "name": "OpenStreetMap Deutschland IRC", + "description": "Folge #osm-de auf irc.oftc.net (Port 6667)" + }, + "de-mailinglist": { + "name": "Talk-de Mailing Liste", + "description": "Talk-de ist die offizielle Mailing Liste der bundesdeutschen OSM Gemeinschaft" + }, + "osm-de": { + "name": "OpenStreetMap Deutschland", + "description": "Die Plattform für Informationen über OpenStreetMap in Deutschland" + }, + "OSM-ES-mailinglist": { + "name": "Talk-es Mailing Liste", + "description": "Eine Mailing Liste um OpenStreetMap in Spanien zu diskutieren" + }, + "OSM-ES-telegram": { + "name": "@OSMes on Telegram", + "description": "OpenStreetMap Spanien Telegram chat" + }, + "fr-facebook": { + "name": "OpenStreetMap Frankreich auf Facebook", + "description": "OpenStreetMap Frankreich auf Facebook" + }, + "fr-forum": { + "name": "OpenStreetMap Frankreich Web Forum", + "description": "OpenStreetMap Frankreich Web Forum" + }, + "fr-irc": { + "name": "OpenStreetMap Frankreich auf IRC", + "description": "Folge #osm-fr auf irc.oftc.net (Port 6667)" + }, + "fr-mailinglist": { + "name": "Talk-fr Mailing Liste", + "description": "Talk-fr Mailing Liste" + }, + "fr-twitter": { + "name": "OpenStreetMap Frankreich auf Twitter", + "description": "OpenStreetMap Frankreich auf Twitter: {url}" + }, + "Nottingham-OSM-pub-meetup": { + "name": "East Midlands (Nottingham) monatliches Treffen im Pub", + "description": "Soziales Zusammentreffen für East Midlands Mapper und Benutzer", + "extendedDescription": "Eine Gruppe trifft sich regelmäßig, zuesrt in Notringham, und neustens in Derby, machmal auch an ienme anderen Ort in den East Midlands. es sind Gemeinschaftstreffen, aber ein ausgezeichneter Ort um spezielle Fragen über OSM zu stellen. Im Sommer machen wir einfaches Mappen in der Nähe unseres Treffpunkt. Die Gruppe als Ganzes hat ein hohes Interesse öffentliche Fußwege (right of way) zu mappen u d es gibt immer wieder Mapper-Treffen genau zu diesem Zweck." + }, + "gb-mailinglist": { + "name": "Talk-gb Mailing Liste", + "description": "Talk-gb ist das Hauptkommunikationsforum für die Britische (inklusive Nordirland) OSM Gemeinschaft" + }, + "mappa-mercia-group": { + "name": "Mappa Mercia lokale Gruppe", + "description": "Ein Platz für OpenStreetMap Enthusiasten in den Midlands", + "extendedDescription": "Mappa Mercia ist ein Projekt umOpenStreetMap in tden West Midlands, UK zu Erbessern. Wir veranstalten Gemeinschaftstreffen, Trainings, und unterstützen lokale Organisationen die ihre Daten öffnen wollen." + }, + "gb-irc": { + "name": "OpenStreetMap Vereinigstes Königreich IRC", + "description": "Abboniere #osm-gb auf irc.oftc.net (Port 6667)", + "extendedDescription": "Abboniere #osm-gb auf irc.oftc.net (Port 6667), bitte sei geduldig und warte ein paar Minuten nachdem du eine Frage stellst." + }, + "it-facebook": { + "name": "OpenStreetMap Italien Facebook", + "description": "Beteilige dich an der OpenStreetMap Italien Gemeinschaft auf Facebook" + }, + "it-irc": { + "name": "OpenStreetMap Italien IRC", + "description": "Abboniere #osm-it auf irc.oftc.net (Port6667)" + }, + "it-mailinglist": { + "name": "Talk-it Mailing Liste", + "description": "Talk-it ist die offizielle Mailing Liste für die Italienische OSM Gemeinschaft" + }, + "it-twitter": { + "name": "OpenStreetMap Italien Twitter", + "description": "Folge uns auf Twitter auf {url}" + }, + "OSM-Rome-meetup": { + "name": "Einführung für Mapper in Rom", + "description": "Verbessere in Rom und Umgebung", + "extendedDescription": "Wir zielen darauf ab es Menschen zu ermöglichen über geographischen Daten und insbesondere OpenStreetMap zu diskutieren und Wissen zu teilen, ebenso Offene Geospatial Software zum managen, editieren und anzeigen von geographischen Daten sowie Engagement zur Nutzung in Lazio, Italien" + }, + "South-Tyrol-Mailing-List": { + "name": "OpenStreetMap Mailing Liste für Südtirol", + "description": "OpenStreetMap Italien regionales Diskussionsforum für Südtirol" + }, + "talk-it-lazio": { + "name": "OpenStreetMap Lazio (Italien)", + "description": "Alle sind willkommen, melde dich an: {signupUrl}", + "extendedDescription": "Mailing Liste für Rom und das Gebiet von Lazio" + }, + "Trentino-Mailing-List": { + "name": "OpenStreetMap Mailing Liste für das Trentino", + "description": "OpenStreetMap Italien regionales Diskussionsforum für das Trentino" + }, + "no-forum": { + "name": "OpenStreetMap Frankreich Web Forum", + "description": "OpenStreetMap Frankreich Web Forum" + }, + "no-irc": { + "name": "OpenStreetMap Norwegen auf IRC", + "description": "Chat room für Mapper und OpenStreetMap Benutzer, Entwicklung und Enthusiasten in Norwegen" + }, + "no-mailinglist": { + "name": "OpenStreetMap Norwegen Mailing Liste", + "description": "Mailing Liste für Mappen und OpenStreetMap Benutzer, Entwicklung und Enthusiasten in Norwegen" + }, + "OSM-PL-facebook-group": { + "name": "OpenStreetMap Polen auf Facebook", + "description": "Gruppe für Mappers und Benutzer von OpenStreetMap in Polen" + }, + "OSM-PL-forum": { + "name": "OpenStreetMap Polen Web Forum", + "description": "Forum der Polnischen OpenStreetMap Gemeinschaft" + }, + "osm-se": { + "name": "OpenStreetMap.se", + "description": "Bereitstellen von OSM Dienstleistungen und Information für die lokale Gemeimschaft in Schweden" + }, + "se-facebook": { + "name": "OpenStreetMap Frankreich auf Facebook", + "description": "OpenStreetMap Frankreich auf Facebook" + }, + "se-forum": { + "name": "OpenStreetMap Schweden Web Forum", + "description": "OpenStreetMap Schweden Web Forum" + }, + "se-irc": { + "name": "OpenStreetMap Schweden auf IRC", + "description": "Folge #osm.se auf irc.oftc.net (Port 6667)" + }, + "se-mailinglist": { + "name": "Talk-se Mailing Liste", + "description": "Eine Mailing Liste um OpenStreetMap in Schweden zu diskutieren" + }, + "se-twitter": { + "name": "OpenStreetMap Schweden auf Twitter", + "description": "Folge uns auf Twitter {url}" + }, + "OSM-CA-Slack": { + "name": "OSM Kalifornien USA Slack", + "description": "Alle sind willkommen, melde dich an: {signupUrl}" + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap Vancouver", + "description": "Mapper und OpenStreetMap Benutzer in Vancouver, Kanada" + }, + "Bay-Area-OpenStreetMappers": { + "name": "Bay Area (San Francisco) OpenStreetMapper", + "description": "Verbessere OpenStreetMap in der Bay Area (San Francisco)", + "extendedDescription": "Diese Gruppe beschäftigt sich mit der Vergrößerung der OpenStreetMap Gemeinschaft hier in der Bay Area (San Francisco). Unsere Veranstaltungen sind für alle offen, sowohl für Open Source Liebhaber, Radfahrenden, GIS Fachleute, Geocachers und alle anderen. Alle die an Karten, Kartenerstellung und freien Karte interessiert sind, sind in unserer Gruppe und bei unseren Veranstaltungen willkommen." + }, + "Central-Pennsylvania-OSM": { + "name": "Zentral-Pennsylvania OSM", + "description": "Online Mapping Gemeinschaft des State College, Pennsylvania" + }, + "Code-for-San-Jose-Slack": { + "name": "Conding für San Jose Slack", + "description": "Alle sind willkommen! Melde dich bei {signupUrl}, dann nutze den #osm Kanal." + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM", + "description": "Die OpenStreetMap Benutzergruppe für Dallas-Fort Worth", + "extendedDescription": "Dallas, Fort Worth und alle Städte dazwischen are strotzen vor kreativen und computererfahrenen Menschen. Die Vision für diese Benutzergruppe ist das finden von neuen Möglichkeiten die erstaunlichen Ressourcen von OSM zu nutzen." + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "Treffen für Kartenliebhaber in und um Philadelphia", + "extendedDescription": "GeoPhilly vereinigt Entwickler, Geographen, Data geeks, Open Source Liebhaber, civic hacker und Kartensüchtige in unserer gemeinsamen Leidenschaft für Karten und die Geschichten die sie erzählen. Wenn du Karten in deiner Arbeit benutzte oder einfach nur lernen willst, das ist der Treffpunkt für dich! Unsere Veranstaltungen beabsichtigen offen, freundlichen, lehrreich und sozial zu sein und range from reichen von \"happy hours\" bis \"lightning talks\" oder sogar Workshops. Bilde mit uns eine diverse und inspirierende OSM-Gemeinschaft community in Philadelphia!" + }, + "MapMinnesota": { + "name": "MapMinnesota", + "description": "Mapper und OpenStreetMap Enthusiasten bei den \"Twin Cities\" (Minesota, USA)", + "extendedDescription": "Verbindet OpenStreetMap Liebhaber in Minesota USA und den \"Twin Cities\"" + }, + "Mapping-DC-meetup": { + "name": "Washington DC Mappen", + "description": "Verbessere OpenStreetMap im Gebiet Washington DC", + "extendedDescription": "Wir sind eine Gruppe von ehrenamtlichen Mappern die OpenStreetMap in Washington DC verbessern wollen. Wir wollen unser Wissen über das OSM-Ökosystem, Datanalayse, Kartegraphie und GIS an andere weitergeben. Wir treffen uns jeden Monat bei Veranstaltungen um uns jedes Mal auf einen Teil unsere Stadt zu konzentrieren." + }, + "Maptime-ME-meetup": { + "name": "MaptimeME", + "description": "Mapper und OpenStreetMap Benutzer in und um Portland, USA", + "extendedDescription": "Maptime ist - ziemlich wörtlich - Zeit zum Mappen. Unsere Ziel ist die Türen für kartografische Möglichkeiten für alle Interessierten zu öffenen, wir stellen Zeit und Raum zum gemeinschaftlichen Lernen, Erkunden und zur Kartenerzeugung bereit und benutzen gemeinsam Mapping Tools und Technologien." + }, + "OpenCleveland-meetup": { + "name": "Open Cleveland", + "description": "Verbessere OpenStreetMap in Cleveland, USA", + "extendedDescription": "Open Geo Cleveland zielt darauf ab es Menschen zu ermöglichen über geographischen Daten und insbesondere OpenStreetMap zu diskutieren und Wissen zu teilen, ebenso Offene Geospatial Software zum managen, editieren und anzeigen von geographischen Daten sowie Engagement zur Nutzung in Nordost Ohio, USA. Wir sind eine Untergruppe von maptime =)" + }, + "OSM-Boston": { + "name": "OpenStreetMap Boston", + "description": "Mapper und OpenStreetMap Benutzer in Boston, USA", + "extendedDescription": "OpenStreetMap ist die freie und wiki-artige Karte der Welt mit hundertausenden täglich Mitwirkenden wie du. Das verbessern der Karte ist einfach und macht Spaß! Triff uns sowohl bei Veranstaltungen als auch vor Ort bei unseren Bemühungen die beste Karte von Boston und dem Rest der Welt zu machen!" + }, + "OSM-Central-Salish-Sea": { + "name": "OpenStreetMap Central Salish Sea", + "description": "Mapper und OpenStreetMap Benutzer und um Mount Vernon, USA", + "extendedDescription": "OpenStreetMap (OSM) ist die weltweite Karte gemacht von Menschen wie dir. Es ist die Karte zu der du beitragt und die frei zugänglich ist wie Wikipedia. Besuche osm.org für mehr Information. Wir treffen uns immer wieder um über Karten zu reden, zu Mappen und Spaß zu haben!" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "Die OpenStreetMap Benutzergruppe für Chattanooga" + }, + "OSM-Colorado": { + "name": "OpenStreetMap Colorado", + "description": "Mapper und OpenStreetMap Benutzer in Colorado, USA", + "extendedDescription": "OpenStreetMap (OSM) Colorado ist die lokale Zusammenarbeiten von Menschen die zu einer freien Karte beitragen wollen. Wir ermutigen unsere Mapper Treffen in ganz Colorado zu organisieren oder vozuschlagen. Treffen können einfach zum Kennenlernen, OSM-Lernen bis zum Fortgeschritenenen Training oder Mapathons (Mapping Parties) sein." + }, + "OSM-NYC": { + "name": "OpenStreetMap New York City", + "description": "Mapper und OpenStreetMap Benutzer, Entwickler und Liebhaber in der Metroplregion New York" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland, USA", + "description": "Mapper und OpenStreetMap Benutzer in Portland", + "extendedDescription": "OpenStreetMap (OSM) ist die weltweite Karte gemacht von Menschen wie dir. Es ist die Karte zu der du beitragt und die frei zugänglich ist wie Wikipedia. Besuche osm.org für mehr Information und komm zu einer unserer Treffen um über Karten zu reden, OSM zu verbessern und Spaß zu haben!" + }, + "OSM-Seattle": { + "name": "OpenStreetMap Seattle", + "description": "Mapper und OpenStreetMap Benutzer in Seattlem USA" + }, + "OSM-SoCal": { + "name": "OpenStreetMap Süd-Kalifornien, USA", + "description": "Lass uns Spaß haben, etwas zu OSM Los Angeles beitragen und mehr über Mappen lernen!", + "extendedDescription": "OpenStreetMap (OSM) Süd-Kalifornien ist für alle am Mappen interessierte um zusammen zu kommen und mit OpenStreetMap zu arbeiten. OpenStreetMap, das Wikipedia der Karten, ist eine freie weltweite open-source Karte, die von über eine Million von Freiwilligen rund um die Globus erzeugt wird. Wenn du OpenStreetMap nicht kennst, unterstützen wird dich. Wenn du eine Idee für ein Kartenprojekt oder einen Erkundungsrundgang hast, den die Gruppe durchführen kann wäre das großartig!" + }, + "OSM-South-Bay": { + "name": "OSM South Bay", + "description": "Mapping-Nächste veranstalted von \"Code for San Jose\"", + "extendedDescription": "\"Code for San Jose\", die lokale \"Code for America\" Brigade, veransalted monatlichen Mapping-Nächte jeweils Donnerstag abend in Zentrum von San José. Triff andere South Bay Mapper, unterstütze lokale Mapping-Projekte und erfahre von anderen zivilen Technik-Projekten. Du brauchst keine Erfahrung im Programmieren oder mit GIS." + }, + "OSM-Tampa-Bay": { + "name": "OpenStreetMap Tampa Bay", + "description": "Mapper und OpenStreetMap Benutzer in Tampa Bay, USA", + "extendedDescription": "OSM Tampa Bay ist eine Gruppe von Bewohner die sich treffen und die definitiv beste OSM-Karte von Tampa Bay machen, die freie und editierbare Karte der Welt. Wenn du dich für Karten, Open Source, GPS, Wandern, Radfahren oder ähnliches interessierst wirst du OpenStreetMap lieben! Stoße zu uns, wir treffen uns zum Reden und Mappen etwa einmal monatlich." + }, + "OSM-US-Slack": { + "name": "OpenStreetMap US Slack", + "description": "Alle sind willkommen! Melde dich unter {signupUrl}" + }, + "OSM-US": { + "name": "OpenStreetMap US", + "description": "Wir helfen dabei OpenStreetMap in den USA zu verbessern.", + "extendedDescription": "Wir unterstützen OpenStreetMap durch eine jährliche Konferenz, Unterstützung von lokalen OSM-Gruppen, Aufbau von Partnerschaft und durch Verbreitung des Vorteilen von OSM. Beteiligte sich an OpenStreetMap US hier: {signupUrl}" + }, + "OSM-Utah": { + "name": "OpenStreetMap Utah", + "description": "Mapper und OpenStreetMap Benutzer in Salt Lake City, USA", + "extendedDescription": "Activitäten beinhalten Workshop zum Erlernen des Mappens, Mapathong (Mapping Parties und Datensammlung vor Ort. Die Veranstaltungen finden in der SLC area statt, zumindest anfänglichen. Wir suchen erfahrene Mapper und Menschen die OSM kennenlernenn wollen. Beteilige dich und lass und mappen!" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap Wyoming", + "description": "Mapper und OpenStreetMap Benutzer in Wyoming, USA", + "extendedDescription": "OpenStreetMap (OSM) Wyoming ist eine lokale Gemeinschaftsinitiative von menschen die gerne freie Karten tatkräftig unterstützen wollen. Wir ermuten alle unsere Mappler Veranstaltungen zum Mappen in Wyoming vozuschlagen oder zu veranstalten. Treffen können einfach zum Kennenlerne, zur Erlernenn von OSM-Grundlagen oder Fortgeschrittenem Training oder einfach Mappatons (Mapping Parties) sein." + }, + "PHXGeo-meetup": { + "name": "PHXGeo Treffen", + "description": "Mapper und OpenStreetMap Benutzer in Phoenix, Arizona, USA", + "extendedDescription": "Das ist ein Treffpunkt für alle in Phoenix die Karten, GIS, OpenStreetMap, Kartographie und alle dazwischen mögen." + }, + "PHXGeo-twitter": { + "name": "PHXGeo Twitter", + "description": "Folge uns auf Twitter {url}" + }, + "Western-Slope-facebook": { + "name": "Western Slope OSM Facebook", + "description": "Mapper und OpenStreetMap Benutzer in und um Grand Junction, Colorado, USA" + }, + "Western-Slope-meetup": { + "name": "Western Slope OSM Treffen", + "description": "Mapper und OpenStreetMap Benutzer in und um Grand Junction, Colorado, USA", + "extendedDescription": "Das Ziel dieser Gruppe ist OpenStreetMap in der Region einzuführen, eine Gemeinschaft von Mappern zu entwickeln, die erstaunlichsten Geodaten mit allen zur Verfügung stehenden Mitteln zu erzeugen und diese Daten in der ganzen Gegend bekannt zu machen. Stell dir einen ganz genaue Wanderkarte oder auch genaue Karte der Fahrradwege vor; oder alles andere was du willst, das ist die Freude von OpenStreetMap!" + }, + "Maptime-Australia-Slack": { + "name": "Maptime Australia Slack", + "description": "Beteilige dich unter {signupUrl}" + }, + "talk-au": { + "name": "Talk-au Mailing Liste", + "description": "Mappers in Australien chatten hier" + }, + "OSM-AR-facebook": { + "name": "OpenStreetMap Argentinen Facebook", + "description": "Beteiligte dich bei der argentinischen OpenStreetMap Gemeinschaft auf Facebook", + "extendedDescription": "Nachrichten von der lokalen Gemeinschaft" + }, + "OSM-AR-forum": { + "name": "OpenStreetMap Argentinen web forum", + "description": "Beteilige dich am argentinischen OpenStreetMap web forum", + "extendedDescription": "Ideal für lange oder wichtige Diskussionen. Lansame Reaktionszeit." + }, + "OSM-AR-irc": { + "name": "OpenStreetMap Argentinen IRC", + "description": "Betielige dich an #osm-ar auf irc.oftc.net (Port 6667)", + "extendedDescription": "Du könntest den sümmsten Benuzter in der Gemeinschaft finden." + }, + "OSM-AR-mailinglist": { + "name": "Talk-ar Mailingiste", + "description": "Historische Mailing Liste, heute fast nicht mehr benutzt." + }, + "OSM-AR-telegram": { + "name": "OpenStreetMap Argentinen Telegram", + "description": "Beteilige dich an der argentinischen OpenStreetMap Gemeinschaft auf Telegram", + "extendedDescription": "Der aktivsten Kanal in der Gemeinschaft, ideals zum Tratschen und um schnell Antworten auf Fragen zu bekommen. Alle sind willkommen!" + }, + "OSM-AR-twitter": { + "name": "OpenStreetMap Argentinen Twitter", + "description": "Folge uns auf Twitter {url}", + "extendedDescription": "Nachrichten von der lokalen Gemeinschaft und OpenStreetMap in Allgemeinen." + }, + "OSM-BO-mailinglist": { + "name": "Talk-bo Mailing Liste", + "description": "Talk-bo ist die offizielle Mailing Liste für die Bolivianische OpenStreetMap Gemeinschaft", + "extendedDescription": "Mappen in Bolivien? Hast du Frage, willlst du dich an der OSM gemeinschaft beteiligen? Kontaktiere uns bei {url}. Alle sind willkommen!" + }, + "Bahia-telegram": { + "name": "OpenStreetMap Bahia (Brasilien) Telegram Gruppe", + "description": "Beteiligte dich an der OpenStreetMap Bahia (Brasislien) Gemeinschaft auf Telegram", + "extendedDescription": "Beteilige dich an der Gemeinschaft um mehr über OpenStreetMap zu lernen, zu fragen oder an unseren Treffen teilzunehmen. Alle sind willkommen!" + }, + "OSM-br-mailinglist": { + "name": "Talk-br Mailing List", + "description": "Eine Mailing Liste um OpenStreetMap in Brasilien zu diskutieren" + }, + "OSM-br-telegram": { + "name": "OpenStreetMap Brasilen Telegram", + "description": "Beteiligte dich an der OpenStreetMap Brasilien Gemeinschaft auf Facebook", + "extendedDescription": "Beteilige dich an der Gemeinschaft um mehr über OpenStreetMap zu lernen, zu fragen oder an unseren Treffen teilzunehmen. Alle sind willkommen!" + }, + "OSM-br-twitter": { + "name": "OpenStreetMap Brasilien Twitter", + "description": "Folge uns auf Twitter {url}" + }, + "OSM-CL-facebook": { + "name": "OpenStreetMap Chile Facebook", + "description": "Beteiligte dich an der OpenStreetMap Chile Gemeinschaft auf Facebook", + "extendedDescription": "Beteilige dich an der Gemeinschaft um mehr über OpenStreetMap zu lernen, zu fragen oder an unseren Treffen teilzunehmen. Alle sind willkommen!" + }, + "OSM-CL-mailinglist": { + "name": "Talk-cl Mailing List", + "description": "Eine Mailing Liste um OpenStreetMap in Chile zu diskutieren" + }, + "OSM-CL-telegram": { + "name": "OpenStreetMap Chile Telegram", + "description": "Beteiligte dich an der OpenStreetMap Chile Gemeinschaft auf Telegram", + "extendedDescription": "Beteilige dich an der Gemeinschaft um mehr über OpenStreetMap zu lernen, zu fragen oder an unseren Treffen teilzunehmen. Alle sind willkommen!" + }, + "OSM-CL-twitter": { + "name": "OpenStreetMap Chile Twitter", + "description": "Folge uns auf Twitter {url}" + }, + "Maptime-Bogota": { + "name": "Maptime Bogotá", + "description": "Wir sind eine Gruppe von Mappper die sich für Mappen in OpenStreetMap rund um Bogotá interessiert.", + "extendedDescription": "Lerne Daten vor Ort zu erheben und auf OpenStreetMap zu digitalisieren. Du brauchst kein Vorwissen, du musst nur am Miwirken, Lernen und Spaß haben interessiert sein." + }, + "OSM-CO-facebook": { + "name": "OpenStreetMap Kolumbien Facebook", + "description": "Beteiligte dich bei der kolumbianische OpenStreetMap Gemeinschaft auf Facebook", + "extendedDescription": "Beteiligte dich bei der kolumbianische OpenStreetMap Gemeinschaft um zu lernen. Alle sind willkommen!" + }, + "OSM-CO-mailinglist": { + "name": "Talk-co Mailing Liste", + "description": "Eine Mailing Liste zur Diskussion über OpenStreetMap in Kolumbien" + }, + "OSM-CO-twitter": { + "name": "OpenStreetMap Kolumbien Twitter", + "description": "Folge uns auf Twitter {url}" + }, + "OSM-CO": { + "name": "OpenStreetMap Kolumbien", + "description": "Nachrichten von der OpenStreetMap Gemeinschaft in Kolumbien und der OSMCo Sitftung" + }, + "OSM-PE-facebook": { + "name": "OpenStreetMap Peru Facebook", + "description": "Werde Teil der OpenStreetMap Peru Gemeinschaft auf Facebook" + }, + "OSM-PE-mailinglist": { + "name": "Talk-pe Mailing List", + "description": "Die offizielle Mailing List der OpenStreetMap Peru Gemeinschaft" + }, + "OSM-PE-matrix": { + "name": "OpenStreetMap Peru Matrix Chat", + "description": "Unterhalte dich mit anderen Mitgliedern der OpenStreetmap Peru Gemeinschaft in Matrix." + }, + "OSM-PE-telegram": { + "name": "OpenStreetMap Peru Telegram", + "description": "Werde Teil der OpenStreetMap Peru Gemeinschaft in Telegram" + }, + "OSM-PE-twitter": { + "name": "OpenStreetMap Peru Twitter", + "description": "Folge uns auf Twitter unter {url}" + }, + "OSM-PE": { + "name": "OpenStreetMap Peru", + "description": "Neuigkeiten und Quellen für die OpenStreetMap Peru Gemeinschaft" + }, + "OSM-Facebook": { + "name": "OpenStreetMap auf Facebook", + "description": "Like uns auf Facebook für Nachrichten und Updates über OpenStreetMap." + }, + "OSM-help": { + "name": "OpenStreetMap Hilfe", + "description": "Stelle Fragen und erhalte Antworten auf der FAQ-Seite der OSM-Gemeinschaft", + "extendedDescription": "{url} ist für alle die Hilfe mit OpenStreetMap brauchen. Egal ob du zu Mappen beginnst oder eine technische Frage hast, wir sind hier um die zu helfen!" + }, + "OSM-Reddit": { + "name": "OpenStreetMap in Reddit", + "description": "/r/openstreetmap/ ist ein großartiger Ort umd mehr über OpenStreetMap zu lernen. Du kannst jede Frage stellen!" + }, + "OSM-Twitter": { + "name": "OpenStreetMap Twitter", + "description": "Folge uns auf Twitter unter {url}" + }, + "OSMF": { + "name": "OpenStreetMap Foundation (OSM Stiftung)", + "description": "OSMF is eine gemeinnützige Organisation imit Sitz im Vereinigten Königreich die das OpenStreetMap Projekt unterstützt", + "extendedDescription": "OSMF unterstützt OpenStreetMap durch Fundraising, betreibt die OSM-Server, organisiert die jährliche Konferenz \"State of the Map\" und koordiniert die Freiwilligen die OSM am Laufen halten. Du kannst deine Unterstützung zeigen und eine Stimme für die Richtung der Weiterentwicklung von OpenStreetMap bekommen, indem du der OSMF als Mitglied beitrittst: {signupUrl}:", + "events": { + "sotm2018": { + "name": "State of the Map 2018", + "description": "Besuche uns für 3 Tage in Mailand, Italien zur weltweiten jährlivhen OpenStreetMap Konferenz, an der sich alle Beteilgen, die sich kennenlernen, voneinander lernen und ihre Erfahrung teilen wollen.", + "where": "Mailand, Italien" + } + } + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/el.json b/vendor/assets/iD/iD/locales/el.json index c5ffd6800..b0017acd6 100644 --- a/vendor/assets/iD/iD/locales/el.json +++ b/vendor/assets/iD/iD/locales/el.json @@ -495,13 +495,7 @@ } }, "success": { - "edited_osm": "Επεξεργαστήκατε τον OSM", "just_edited": "Μόλις επεξεργαστήκατε το OpenStreetMap!", - "view_on_osm": "Εμφάνιση στο OSM", - "facebook": "Διαμοιρασμός στο Facebook", - "twitter": "Διαμοιρασμός στο Twitter", - "google": "Διαμοιρασμός στο Google+", - "help_html": "Οι αλλαγές σας θα εμφανιστούν στο \"Κανονικό\" στρώμα σε λίγα λεπτά. Στα άλλα στρώματα, και ορισμένα χαρακτηριστικά, ίσως χρειαστούν περισσότερο χρόνο.", "help_link_text": "Λεπτομέρειες" }, "confirm": { @@ -1547,9 +1541,6 @@ "trees": { "label": "Δέντρα" }, - "vending": { - "label": "Είδος αγαθών" - }, "visibility": { "label": "Ορατότητα", "options": { @@ -3466,15 +3457,6 @@ "type/restriction/no_u_turn": { "name": "Όχι Αναστροφή" }, - "type/restriction/only_left_turn": { - "name": "Μόνο Αριστερή Στροφή" - }, - "type/restriction/only_right_turn": { - "name": "Μόνο Δεξιά Στροφή" - }, - "type/restriction/only_straight_on": { - "name": "Όχι Στροφές" - }, "type/route": { "name": "Δρομολόγιο", "terms": "Δρομολόγιο, Διαδρομή" @@ -3681,11 +3663,6 @@ }, "name": "skobbler" }, - "stamen-terrain-background": { - "attribution": { - "text": "Πλακίδια χάρτη από Stamen Design, υπό CC BY 3.0" - } - }, "tf-cycle": { "attribution": { "text": "Χάρτες © Thunderforest, Δεδομένα © OpenStreetMap contributors" diff --git a/vendor/assets/iD/iD/locales/en-GB.json b/vendor/assets/iD/iD/locales/en-GB.json index b84f61a17..551428de6 100644 --- a/vendor/assets/iD/iD/locales/en-GB.json +++ b/vendor/assets/iD/iD/locales/en-GB.json @@ -1,5 +1,10 @@ { "en-GB": { + "icons": { + "information": "info", + "remove": "remove", + "undo": "undo" + }, "modes": { "add_area": { "title": "Area", @@ -25,6 +30,9 @@ }, "draw_line": { "tail": "Click to add more nodes to the line. Click on other lines to connect to them, and double-click to end the line." + }, + "drag_node": { + "connected_to_hidden": "This can't be edited because it is connected to a hidden feature." } }, "operations": { @@ -142,7 +150,9 @@ "vertex": "Connected a way to another.", "line": "Connected a way to a line.", "area": "Connected a way to an area." - } + }, + "relation": "These features can't be connected because they have conflicting relation roles.", + "restriction": "These features can't be connected because it would damage a \"{relation}\" relation." }, "disconnect": { "title": "Disconnect", @@ -288,6 +298,42 @@ } } }, + "restriction": { + "controls": { + "distance": "Distance", + "distance_up_to": "Up to {distance}", + "via": "Via", + "via_node_only": "Node only", + "via_up_to_one": "Up to 1 way", + "via_up_to_two": "Up to 2 ways" + }, + "help": { + "indirect": "(indirect)", + "turn": { + "no_left_turn": "NO Left Turn {indirect}", + "no_right_turn": "NO Right Turn {indirect}", + "no_u_turn": "NO U-Turn {indirect}", + "no_straight_on": "NO Straight On {indirect}", + "only_left_turn": "ONLY Left Turn {indirect}", + "only_right_turn": "ONLY Right Turn {indirect}", + "only_u_turn": "ONLY U-Turn {indirect}", + "only_straight_on": "ONLY Straight On {indirect}", + "allowed_left_turn": "Left Turn Allowed {indirect}", + "allowed_right_turn": "Right Turn Allowed {indirect}", + "allowed_u_turn": "U-Turn Allowed {indirect}", + "allowed_straight_on": "Straight On Allowed {indirect}" + }, + "from": "FROM", + "via": "VIA", + "to": "TO", + "from_name": "{from} {fromName}", + "from_name_to_name": "{from} {fromName} {to} {toName}", + "via_names": "{via} {viaNames}", + "select_from": "Click to select a {from} segment", + "select_from_name": "Click to select {from} {fromName}", + "toggle": "Click for \"{turn}\"" + } + }, "undo": { "tooltip": "Undo: {action}", "nothing": "Nothing to undo." @@ -363,6 +409,7 @@ "key": "H", "title": "History", "selected": "{n} selected", + "no_history": "No History (New Feature)", "version": "Version", "last_edit": "Last Edit", "edited_by": "Edited By", @@ -380,6 +427,8 @@ "title": "Measurement", "selected": "{n} selected", "geometry": "Geometry", + "closed_line": "closed line", + "closed_area": "closed area", "center": "Centre", "perimeter": "Perimeter", "length": "Length", @@ -387,7 +436,8 @@ "centroid": "Centroid", "location": "Location", "metric": "Metric", - "imperial": "Imperial" + "imperial": "Imperial", + "node_count": "Number of nodes" } }, "geometry": { @@ -453,13 +503,23 @@ "title": "Background", "description": "Background settings", "key": "B", + "backgrounds": "Backgrounds", "none": "None", "best_imagery": "Best known imagery source for this location", "switch": "Switch back to this background", "custom": "Custom", "custom_button": "Edit custom background", + "custom_prompt": "Enter a tile URL template. Valid tokens are:\n - {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme\n - {-y} or {ty} for flipped TMS-style Y coordinates\n - {u} for quadtile scheme\n - {switch:a,b,c} for DNS server multiplexing\n\nExample:\n{example}", + "overlays": "Overlays", + "imagery_source_faq": "Imagery Info / Report a Problem", "reset": "reset", + "display_options": "Display Options", + "brightness": "Brightness", + "contrast": "Contrast", + "saturation": "Saturation", + "sharpness": "Sharpness", "minimap": { + "description": "Show Minimap", "tooltip": "Show a zoomed out map to help locate the area currently displayed.", "key": "/" }, @@ -561,6 +621,7 @@ "status_code": "Server returned status code {code}", "unknown_error_details": "Please ensure you are connected to the Internet.", "uploading": "Uploading changes to OpenStreetMap...", + "conflict_progress": "Checking for conflicts: {num} of {total}", "unsaved_changes": "You have unsaved changes", "conflict": { "header": "Resolve conflicting edits", @@ -586,15 +647,20 @@ } }, "success": { - "edited_osm": "Edited OSM!", "just_edited": "You just edited OpenStreetMap!", - "view_on_osm": "View on OSM", - "facebook": "Share on Facebook", - "twitter": "Share on Twitter", - "google": "Share on Google+", - "help_html": "Your changes should appear in the \"Standard\" layer in a few minutes. Other layers, and certain features, may take longer.", + "thank_you": "Thank you for improving the map.", + "thank_you_location": "Thank you for improving the map around {where}.", + "help_html": "Your changes should appear on OpenStreetMap within a few minutes. It may take longer for maps elsewhere to receive updates.", "help_link_text": "Details", - "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F", + "view_on_osm": "View Changes on OSM", + "changeset_id": "Your changeset #: {changeset_id}", + "like_osm": "Like OpenStreetMap? Connect with others:", + "more": "More", + "events": "Events", + "languages": "Languages: {languages}", + "missing": "Is something missing from this list?", + "tell_us": "Tell us!" }, "confirm": { "okay": "OK", @@ -632,6 +698,7 @@ "untagged_area_tooltip": "Select a feature type that describes what this area is.", "untagged_relation": "Untagged relation", "untagged_relation_tooltip": "Select a feature type that describes what this relation is.", + "many_deletions": "You're deleting {n} features: {p} nodes, {l} lines, {a} areas, {r} relations. Are you sure you want to do this? This will delete them from the map that everyone else sees on openstreetmap.org.", "tag_suggests_area": "The tag {tag} suggests line should be area, but it is not an area", "deprecated_tags": "Deprecated tags: {tags}" }, @@ -828,6 +895,44 @@ "using": "To use a GPS trace for mapping, drag and drop the data file onto the map editor. If it's recognized, it will be drawn on the map as a bright purple line. Click the {data} **Map data** panel on the side of the map to enable, disable, or zoom to your GPS data.", "tracing": "The GPS track isn't sent to OpenStreetMap - the best way to use it is to draw on the map, using it as a guide for the new features that you add.", "upload": "You can also [upload your GPS data to OpenStreetMap](https://www.openstreetmap.org/trace/create) for other users to use." + }, + "field": { + "restrictions": { + "title": "Turn Restrictions Help", + "about": { + "title": "About", + "about": "This field allows you to inspect and modify turn restrictions. It displays a model of the selected intersection including other nearby connected roads.", + "from_via_to": "A turn restriction always contains: one **FROM way**, one **TO way**, and either one **VIA node** or one or more **VIA ways**.", + "maxdist": "The \"{distField}\" slider controls how far to search for additional connected roads.", + "maxvia": "The \"{viaField}\" slider adjusts how many via ways may be included in the search. (Tip: simple is better)" + }, + "inspecting": { + "title": "Inspecting", + "about": "Hover over any **FROM** segment to see whether it has any turn restrictions. Each possible **TO** destination will be drawn with a colored shadow showing whether a restriction exists.", + "from_shadow": "{fromShadow} **FROM segment**", + "allow_shadow": "{allowShadow} **TO Allowed**", + "restrict_shadow": "{restrictShadow} **TO Restricted**", + "only_shadow": "{onlyShadow} **TO Only**", + "restricted": "\"Restricted\" means that there is a turn restriction, for example \"No Left Turn\".", + "only": "\"Only\" means that a vehicle taking that path may only make that choice, for example \"Only Straight On\"." + }, + "modifying": { + "title": "Modifying", + "about": "To modify turn restrictions, first click on any starting **FROM** segment to select it. The selected segment will pulse, and all possible **TO** destinations will appear as turn symbols.", + "indicators": "Then, click on a turn symbol to toggle it between \"Allowed\", \"Restricted\", and \"Only\".", + "allow_turn": "{allowTurn} **TO Allowed**", + "restrict_turn": "{restrictTurn} **TO Restricted**", + "only_turn": "{onlyTurn} **TO Only**" + }, + "tips": { + "title": "Tips", + "simple": "**Prefer simple restrictions over complex ones.**", + "simple_example": "For example, avoid creating a via-way restriction if a simpler via-node turn restriction will do.", + "indirect": "**Some restrictions display the text \"(indirect)\" and are drawn lighter.**", + "indirect_example": "These restrictions exist because of another nearby restriction. For example, an \"Only Straight On\" restriction will indirectly create \"No Turn\" restrictions for all other paths through the intersection.", + "indirect_noedit": "You may not edit indirect restrictions. Instead, edit the nearby direct restriction." + } + } } }, "intro": { @@ -1135,7 +1240,8 @@ "title": "Selecting features", "select_one": "Select a single feature", "select_multi": "Select multiple features", - "lasso": "Draw a selection lasso around features" + "lasso": "Draw a selection lasso around features", + "search": "Find features matching search text" }, "with_selected": { "title": "With feature selected", @@ -1197,6 +1303,28 @@ } } }, + "units": { + "feet": "{quantity} ft", + "miles": "{quantity} mi", + "square_feet": "{quantity} sq ft", + "square_miles": "{quantity} sq mi", + "acres": "{quantity} ac", + "meters": "{quantity} m", + "kilometers": "{quantity} km", + "square_meters": "{quantity} m²", + "square_kilometers": "{quantity} km²", + "hectares": "{quantity} ha", + "area_pair": "{area1} ({area2})", + "arcdegrees": "{quantity}°", + "arcminutes": "{quantity}′", + "arcseconds": "{quantity}″", + "north": "N", + "south": "S", + "east": "E", + "west": "W", + "coordinate": "{coordinate}{direction}", + "coordinate_pair": "{latitude}, {longitude}" + }, "presets": { "categories": { "category-barrier": { @@ -2461,9 +2589,6 @@ "label": "Type", "placeholder": "Default" }, - "vending": { - "label": "Type of Goods" - }, "visibility": { "label": "Visibility", "options": { @@ -4956,15 +5081,6 @@ "type/restriction/no_u_turn": { "name": "No U-turn" }, - "type/restriction/only_left_turn": { - "name": "Left Turn Only" - }, - "type/restriction/only_right_turn": { - "name": "Right Turn Only" - }, - "type/restriction/only_straight_on": { - "name": "No Turns" - }, "type/route": { "name": "Route" }, @@ -5082,7 +5198,7 @@ "attribution": { "text": "Terms & Feedback" }, - "description": "Imagery boundaries and capture dates. Labels appear at zoom level 14 and higher.", + "description": "Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.", "name": "DigitalGlobe Premium Imagery Vintage" }, "DigitalGlobe-Standard": { @@ -5096,7 +5212,7 @@ "attribution": { "text": "Terms & Feedback" }, - "description": "Imagery boundaries and capture dates. Labels appear at zoom level 14 and higher.", + "description": "Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.", "name": "DigitalGlobe Standard Imagery Vintage" }, "EsriWorldImagery": { @@ -5106,6 +5222,13 @@ "description": "Esri world imagery.", "name": "Esri World Imagery" }, + "EsriWorldImageryClarity": { + "attribution": { + "text": "Terms & Feedback" + }, + "description": "Esri archive imagery that may be clearer and more accurate than the default layer.", + "name": "Esri World Imagery (Clarity) Beta" + }, "MAPNIK": { "attribution": { "text": "© OpenStreetMap contributors, CC-BY-SA" @@ -5173,26 +5296,44 @@ "description": "Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap", "name": "TIGER Roads 2017" }, + "US_Forest_Service_roads_overlay": { + "name": "U.S. Forest Roads Overlay" + }, "Waymarked_Trails-Cycling": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0" + }, "name": "Waymarked Trails: Cycling" }, "Waymarked_Trails-Hiking": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0" + }, "name": "Waymarked Trails: Hiking" }, "Waymarked_Trails-MTB": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0" + }, "name": "Waymarked Trails: MTB" }, "Waymarked_Trails-Skating": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0" + }, "name": "Waymarked Trails: Skating" }, "Waymarked_Trails-Winter_Sports": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0" + }, "name": "Waymarked Trails: Winter Sports" }, "basemap.at": { "attribution": { "text": "basemap.at" }, - "description": "Basemap of Austria, based on goverment data.", + "description": "Basemap of Austria, based on government data.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -5254,7 +5395,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Map tiles by Stamen Design, under CC BY 3.0" + "text": "Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL" }, "name": "Stamen Terrain" }, @@ -5270,6 +5411,57 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "Bay-Area-OpenStreetMappers": { + "name": "Bay Area OpenStreetMappers", + "description": "Improve OpenStreetMap in the Bay Area", + "extendedDescription": "This group is about growing the OpenStreetMap community here in the Bay Area. Our events are open to everyone, from open source enthusiasts, cyclists, GIS professionals, geocachers, and beyond. Anyone and everyone who is interested in maps, map making and free map data is welcome to join our group as well as attend our events." + }, + "Central-Pennsylvania-OSM": { + "name": "Central Pennsylvania OSM", + "description": "Online mapping community based out of State College, PA" + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM", + "description": "The OpenStreetMap user group for Dallas-Fort Worth", + "extendedDescription": "Dallas, Fort Worth, and all the cities in between are abounding with creative and tech-savvy people. The vision for this usergroup is to find new ways to use the amazing resource of OSM." + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "Meetup for map enthusiasts in the Philadelphia area", + "extendedDescription": "GeoPhilly unites developers, geographers, data geeks, open source enthusiasts, civic hackers and map addicts in our shared love of maps and the stories they tell. If you use maps as part of your work or just want to learn more, this is the meetup for you! Our events aim to be open, friendly, educational and social and range from happy hours to lightning talks or even workshops. Come create a diverse, inspiring geospatial community in the Philadelphia with us!" + }, + "Mapping-DC-meetup": { + "name": "Mapping DC", + "description": "Improve OpenStreetMap in the DC area", + "extendedDescription": "We are a group of volunteer mappers who aim to improve the OpenStreetMap in the DC area. We also aim to teach others about the OSM ecosystem, data analytics, cartography, and GIS. We gather every other month at meetups to focus on one area of our city." + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "The OpenStreetMap user group for Chattanooga" + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC", + "description": "Mappers and OpenStreetMap users, developers and enthusiasts in the New York Metropolitan area" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland", + "description": "Mappers and OpenStreetMap users in the Portland area", + "extendedDescription": "OpenStreetMap (OSM) is a map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more, and come join us at a meetup to talk maps, contribute to OSM, and have fun!" + }, + "OSM-US-Slack": { + "name": "OpenStreetMap US Slack", + "description": "All are welcome! Sign up at {signupUrl}" + }, + "Maptime-Australia-Slack": { + "name": "Maptime Australia Slack", + "description": "Sign up at {signupUrl}" + }, + "OSM-Reddit": { + "name": "OpenStreetMap on Reddit", + "description": "/r/openstreetmap/ is a great place to learn more about OpenStreetMap. Ask us anything!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/en.json b/vendor/assets/iD/iD/locales/en.json index ca16b9f29..25e07dd45 100644 --- a/vendor/assets/iD/iD/locales/en.json +++ b/vendor/assets/iD/iD/locales/en.json @@ -1,5 +1,10 @@ { "en": { + "icons": { + "information": "info", + "remove": "remove", + "undo": "undo" + }, "modes": { "add_area": { "title": "Area", @@ -145,7 +150,9 @@ "vertex": "Connected a way to another.", "line": "Connected a way to a line.", "area": "Connected a way to an area." - } + }, + "relation": "These features can't be connected because they have conflicting relation roles.", + "restriction": "These features can't be connected because it would damage a \"{relation}\" relation." }, "disconnect": { "title": "Disconnect", @@ -402,6 +409,7 @@ "key": "H", "title": "History", "selected": "{n} selected", + "no_history": "No History (New Feature)", "version": "Version", "last_edit": "Last Edit", "edited_by": "Edited By", @@ -639,15 +647,20 @@ } }, "success": { - "edited_osm": "Edited OSM!", "just_edited": "You just edited OpenStreetMap!", - "view_on_osm": "View on OSM", - "facebook": "Share on Facebook", - "twitter": "Share on Twitter", - "google": "Share on Google+", - "help_html": "Your changes should appear in the \"Standard\" layer in a few minutes. Other layers, and certain features, may take longer.", + "thank_you": "Thank you for improving the map.", + "thank_you_location": "Thank you for improving the map around {where}.", + "help_html": "Your changes should appear on OpenStreetMap within a few minutes. It may take longer for maps elsewhere to receive updates.", "help_link_text": "Details", - "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F", + "view_on_osm": "View Changes on OSM", + "changeset_id": "Your changeset #: {changeset_id}", + "like_osm": "Like OpenStreetMap? Connect with others:", + "more": "More", + "events": "Events", + "languages": "Languages: {languages}", + "missing": "Is something missing from this list?", + "tell_us": "Tell us!" }, "confirm": { "okay": "OK", @@ -1774,6 +1787,9 @@ "display": { "label": "Display" }, + "distance": { + "label": "Total Distance" + }, "dock": { "label": "Type" }, @@ -1814,6 +1830,9 @@ "except": { "label": "Exceptions" }, + "faces": { + "label": "Faces" + }, "fax": { "label": "Fax", "placeholder": "+31 42 123 4567" @@ -1925,6 +1944,39 @@ "label": "Hoops", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "label": "Dressage Riding", + "options": { + "undefined": "No", + "equestrian": "Yes" + } + }, + "horse_riding": { + "label": "Horseback Riding", + "options": { + "undefined": "No", + "horse_riding": "Yes" + } + }, + "horse_scale": { + "label": "Horseback Riding Difficulty", + "placeholder": "Difficult, Dangerous...", + "options": { + "common": "Easy: No problems or difficulties. (default)", + "demanding": "Use with caution: Uneven way, occasional difficult passages.", + "difficult": "Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.", + "critical": "Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.", + "dangerous": "Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.", + "impossible": "Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life." + } + }, + "horse_stables": { + "label": "Riding Stable", + "options": { + "undefined": "No", + "stables": "Yes" + } + }, "iata": { "label": "IATA" }, @@ -1944,6 +1996,9 @@ "indoor": { "label": "Indoor" }, + "industrial": { + "label": "Type" + }, "information": { "label": "Type" }, @@ -2064,6 +2119,10 @@ "label": "Speed Limit", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "label": "Advisory Speed Limit", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Max Stay" }, @@ -2652,8 +2711,19 @@ "label": "Type", "placeholder": "Default" }, + "usage_rail": { + "label": "Usage Type", + "options": { + "main": "Main", + "branch": "Branch", + "industrial": "Industrial", + "military": "Military", + "test": "Test", + "tourism": "Tourism" + } + }, "vending": { - "label": "Type of Goods" + "label": "Types of Goods" }, "visibility": { "label": "Visibility", @@ -2788,6 +2858,10 @@ "name": "Billboard", "terms": "" }, + "advertising/column": { + "name": "Advertising Column", + "terms": "" + }, "aerialway/station": { "name": "Aerialway Station", "terms": "" @@ -2868,6 +2942,10 @@ "name": "Airport Terminal", "terms": "airport,aerodrome" }, + "allotments/plot": { + "name": "Community Garden Plot", + "terms": "" + }, "amenity/bus_station": { "name": "Bus Station / Terminal", "terms": "" @@ -3112,6 +3190,10 @@ "name": "Marketplace", "terms": "" }, + "amenity/monastery": { + "name": "Monastery Grounds", + "terms": "abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,monastery,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple" + }, "amenity/motorcycle_parking": { "name": "Motorcycle Parking", "terms": "" @@ -3308,6 +3390,10 @@ "name": "Cigarette Vending Machine", "terms": "cigarette" }, + "amenity/vending_machine/coffee": { + "name": "Coffee Vending Machine", + "terms": "coffee" + }, "amenity/vending_machine/condoms": { "name": "Condom Vending Machine", "terms": "condom" @@ -3316,6 +3402,14 @@ "name": "Drink Vending Machine", "terms": "drink,soda,beverage,juice,pop" }, + "amenity/vending_machine/electronics": { + "name": "Electronics Vending Machine", + "terms": "cable,charger,earbud,headphone,phone,tablet" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Flat Coin Vending Machine", + "terms": "coin,crush,elongated,flatten,penny,souvenir" + }, "amenity/vending_machine/excrement_bags": { "name": "Excrement Bag Vending Machine", "terms": "excrement bags,poop,dog,animal" @@ -3324,6 +3418,18 @@ "name": "Feminine Hygiene Vending Machine", "terms": "condom,tampon,pad,woman,women,menstrual hygiene products,personal care" }, + "amenity/vending_machine/food": { + "name": "Food Vending Machine", + "terms": "food" + }, + "amenity/vending_machine/fuel": { + "name": "Gas Pump", + "terms": "petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel" + }, + "amenity/vending_machine/ice_cream": { + "name": "Ice Cream Vending Machine", + "terms": "chocolate,ice cream,frozen,popsicle,vanilla" + }, "amenity/vending_machine/newspapers": { "name": "Newspaper Vending Machine", "terms": "newspaper" @@ -3340,6 +3446,10 @@ "name": "Transit Ticket Vending Machine", "terms": "bus,train,ferry,rail,ticket,transportation" }, + "amenity/vending_machine/stamps": { + "name": "Postage Vending Machine", + "terms": "mail,postage,stamp" + }, "amenity/vending_machine/sweets": { "name": "Snack Vending Machine", "terms": "candy,gum,chip,pretzel,cookie,cracker" @@ -3412,6 +3522,10 @@ "name": "Drop Tower", "terms": "theme park,amusement ride,gondola,tower,big drop" }, + "attraction/maze": { + "name": "Maze", + "terms": "theme park,amusement ride,labyrinth" + }, "attraction/pirate_ship": { "name": "Pirate Ship", "terms": "theme park,carnival ride,amusement ride" @@ -4052,6 +4166,10 @@ "name": "Hospice", "terms": "terminal,illness" }, + "healthcare/laboratory": { + "name": "Medical Laboratory", + "terms": "medical_laboratory,medical_lab,blood_check" + }, "healthcare/midwife": { "name": "Midwife", "terms": "baby,childbirth,delivery,labour,labor,pregnancy" @@ -4152,6 +4270,10 @@ "name": "Motorway", "terms": "autobahn,expressway,freeway,highway,interstate,parkway,thruway,turnpike" }, + "highway/passing_place": { + "name": "Passing Place", + "terms": "turnout, pullout" + }, "highway/path": { "name": "Path", "terms": "hike,hiking,trackway,trail,walk" @@ -4298,7 +4420,7 @@ }, "historic/memorial": { "name": "Memorial", - "terms": "" + "terms": "dedicatory,epitaph,remember,remembrance,memory,monument,stolperstein" }, "historic/monument": { "name": "Monument", @@ -4512,6 +4634,10 @@ "name": "Amusement Arcade", "terms": "pay-to-play games,video games,driving simulators,pinball machines" }, + "leisure/beach_resort": { + "name": "Beach Resort", + "terms": "" + }, "leisure/bird_hide": { "name": "Bird Hide", "terms": "machan,ornithology" @@ -4628,6 +4754,10 @@ "name": "Nature Reserve", "terms": "protected,wildlife" }, + "leisure/outdoor_seating": { + "name": "Outdoor Seating Area", + "terms": "al fresco,beer garden,dining,cafe,restaurant,pub,bar,patio" + }, "leisure/park": { "name": "Park", "terms": "esplanade,estate,forest,garden,grass,green,grounds,lawn,lot,meadow,parkland,place,playground,plaza,pleasure garden,recreation area,square,tract,village green,woodland" @@ -4760,6 +4890,10 @@ "name": "Adit", "terms": "entrance,underground,mine,cave" }, + "man_made/antenna": { + "name": "Antenna", + "terms": "broadcast,cell phone,cell,communication,mobile phone,radio,television,transmission,tv" + }, "man_made/breakwater": { "name": "Breakwater", "terms": "" @@ -4808,6 +4942,10 @@ "name": "Observation Tower", "terms": "lookout tower,fire tower" }, + "man_made/observatory": { + "name": "Observatory", + "terms": "astronomical,meteorological" + }, "man_made/petroleum_well": { "name": "Oil Well", "terms": "drilling rig,oil derrick,oil drill,oil horse,oil rig,oil pump,petroleum well,pumpjack" @@ -4932,6 +5070,10 @@ "name": "Heath", "terms": "" }, + "natural/mud": { + "name": "Mud", + "terms": "wetland" + }, "natural/peak": { "name": "Peak", "terms": "acme,aiguille,alp,climax,crest,crown,hill,mount,mountain,pinnacle,summit,tip,top" @@ -5968,6 +6110,10 @@ "name": "Perfume Store", "terms": "" }, + "shop/pet_grooming": { + "name": "Pet Grooming Store", + "terms": "dog" + }, "shop/pet": { "name": "Pet Store", "terms": "animal,cat,dog,fish,kitten,puppy,reptile" @@ -6188,6 +6334,10 @@ "name": "Theme Park", "terms": "" }, + "tourism/trail_riding_station": { + "name": "Trail Riding Station", + "terms": "" + }, "tourism/viewpoint": { "name": "Viewpoint", "terms": "" @@ -6273,15 +6423,19 @@ "terms": "" }, "type/restriction/only_left_turn": { - "name": "Left Turn Only", + "name": "Only Left Turn", "terms": "" }, "type/restriction/only_right_turn": { - "name": "Right Turn Only", + "name": "Only Right Turn", "terms": "" }, "type/restriction/only_straight_on": { - "name": "No Turns", + "name": "Only Straight On", + "terms": "" + }, + "type/restriction/only_u_turn": { + "name": "Only U-turn", "terms": "" }, "type/route_master": { @@ -6442,7 +6596,7 @@ "attribution": { "text": "Terms & Feedback" }, - "description": "Imagery boundaries and capture dates. Labels appear at zoom level 14 and higher.", + "description": "Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.", "name": "DigitalGlobe Premium Imagery Vintage" }, "DigitalGlobe-Standard": { @@ -6456,7 +6610,7 @@ "attribution": { "text": "Terms & Feedback" }, - "description": "Imagery boundaries and capture dates. Labels appear at zoom level 14 and higher.", + "description": "Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.", "name": "DigitalGlobe Standard Imagery Vintage" }, "EsriWorldImagery": { @@ -6540,6 +6694,10 @@ "description": "Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap", "name": "TIGER Roads 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "Highway: Green casing = unclassified. Brown casing = track. Surface: gravel = light brown fill, Asphalt = black, paved = gray, ground =white, concrete = blue, grass = green. Seasonal = white bars", + "name": "U.S. Forest Roads Overlay" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0" @@ -6574,7 +6732,7 @@ "attribution": { "text": "basemap.at" }, - "description": "Basemap of Austria, based on goverment data.", + "description": "Basemap of Austria, based on government data.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6636,7 +6794,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Map tiles by Stamen Design, under CC BY 3.0" + "text": "Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL" }, "name": "Stamen Terrain" }, @@ -6652,6 +6810,663 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "cape-coast-youthmappers": { + "name": "University of Cape Coast YouthMappers", + "description": "Follow us on Twitter: {url}", + "extendedDescription": "This is the official handle for the Youth Mappers chapter of the University of Cape Coast, Ghana. we love maps, open data and helping the vulnerable." + }, + "osm-gh-facebook": { + "name": "OpenStreetMap Ghana on Facebook", + "description": "Facebook group for people interested in OpenStreetMap.", + "extendedDescription": "Mappers in Ghana community, promoting OpenStreetMap and Humanitarian OpenStreetMap Team (HOT) projects in Ghana. Join us." + }, + "osm-gh-twitter": { + "name": "OpenStreetMap Ghana on Twitter", + "description": "Follow us on Twitter: {url}" + }, + "talk-gh": { + "name": "Talk-gh Mailing List", + "description": "Talk-gh is the official mailing list for Ghana OSM community." + }, + "osm-mg-facebook": { + "name": "OpenStreetMap Madagascar Facebook Group", + "description": "Malagasy Facebook group for people interested in OpenStreetMap." + }, + "talk-mg": { + "name": "Talk-mg Mailing List", + "description": "Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss." + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap Bangladesh", + "description": "Improve OpenStreetMap in Bangladesh", + "extendedDescription": "Mapping in Bangladesh? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!" + }, + "OSM-India-facebook": { + "name": "OpenStreetMap India - Participatory neighborhood mapping", + "description": "Improve OpenStreetMap in India", + "extendedDescription": "Mapping in India? Have questions, want to connect with the community here? Join us at {url}. All are welcome!", + "events": { + "sotmasia2018": { + "name": "State of the Map Asia 2018", + "description": "Join the 2018 OpenStreetMap region-wide event at State of the Map Asia in India", + "where": "Indian Institute of Management, Bangalore, India" + } + } + }, + "OSM-india-mailinglist": { + "name": "OpenStreetMap India Mailinglist", + "description": "Talk-in is the official Mailinglist for Indian Community" + }, + "OSM-india-twitter": { + "name": "OpenStreetMap India Twitter", + "description": "We are just a tweet away: {url}" + }, + "OSM-India-Puducherry-Facebook": { + "name": "Free Software Hardware Movement - Facebook", + "description": "FSHM Facebook page to know about community events, activities", + "extendedDescription": "FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap. Its FB page is the best way to keep in contact with its events." + }, + "OSM-India-Puducherry-Matrix": { + "name": "Free Software Hardware Movement - Matrix", + "description": "FSHM Riot group to discuss, share and update mapping activities, events in and around Puducherry", + "extendedDescription": "FSHM community members share their OSM mapping updates / experiences through the Riot.im group, this group is also used to discuss things related to free software / hardware, technology and activism." + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap Indonesia", + "description": "Improve OpenStreetMap in Indonesia", + "extendedDescription": "Mapping in Indonesia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!" + }, + "OSM-japan-facebook": { + "name": "OpenStreetMap Japan Community", + "description": "Mappers and OpenStreetMap users in Japan" + }, + "OSM-japan-mailinglist": { + "name": "OpenStreetMap Japan Mailinglist", + "description": "Talk-ja is an Official Mailinglist for Japanese Community" + }, + "OSM-japan-twitter": { + "name": "OpenStreetMap Japan Twitter", + "description": "Hashtag on Twitter: {url}" + }, + "OSM-korea-telegram": { + "name": "OSM Korea Telegram Channel", + "description": "Unofficial Channnel for OpenStreetMap contributors, communities and users in Korea to share and discuss." + }, + "OSM-MY-forum": { + "name": "OpenStreetMap Malaysia Forum", + "description": "Official OpenStreetMap Malaysia Forum" + }, + "OSM-MY-matrix": { + "name": "OpenStreetMap Malaysia Riot channel", + "description": "All mappers are welcome! Sign up at {signupUrl}" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap Mongolia", + "description": "Improve OpenStreetMap in Mongolia", + "extendedDescription": "Mapping in Mongolia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!" + }, + "OSM-MMR-facebook": { + "name": "OpenStreetMap Myanmar", + "description": "Improve OpenStreetMap in Myanmar", + "extendedDescription": "Mapping in Myanmar? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!" + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap Nepal", + "description": "Improve OpenStreetMap in Nepal", + "extendedDescription": "Mapping in Nepal? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!" + }, + "OSM-PH-facebook": { + "name": "OpenStreetMap PH Facebook", + "description": "Welcome to OpenStreetMap Philippines, where we encourage all fellow Filipinos to contribute to the OpenStreetMap project." + }, + "OSM-PH-mailinglist": { + "name": "Talk-ph Mailing List", + "description": "A mailing list to discuss OpenStreetMap in the Philippines" + }, + "OSM-PH-slack": { + "name": "OpenStreetMap PH Slack", + "description": "All are welcome! Sign up at {signupUrl}" + }, + "OSM-PH-telegram": { + "name": "OpenStreetMap PH Telegram", + "description": "Un-official, Telegram local community of OpenStreetMap contributors and friends in the Philippines" + }, + "OSM-RU-forum": { + "name": "OpenStreetMap RU forum", + "description": "OpenStreetMap Russia web forum" + }, + "OSM-RU-telegram": { + "name": "OpenStreetMap RU telegram", + "description": "OpenStreetMap Russia telegram chat" + }, + "OSM-LKA-facebook": { + "name": "OpenStreetMap Sri Lanka", + "description": "Improve OpenStreetMap in Sri Lanka", + "extendedDescription": "Mapping in Sri Lanka? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!" + }, + "OSM-TW-facebook": { + "name": "OpenStreetMap Taiwan Community", + "description": "Facebook Group for Mappers and OpenStreetMap users to discuss matters about Taiwan." + }, + "OSM-TW-mailinglist": { + "name": "OpenStreetMap Taiwan Mailinglist", + "description": "Talk-tw is an Official Mailinglist for the Communities to dicuss matters about Taiwan" + }, + "at-forum": { + "name": "OpenStreetMap Austria Forum", + "description": "The official forum for OpenStreetMap questions in and around Austria" + }, + "at-mailinglist": { + "name": "Talk-at Mailing List", + "description": "Talk-at is the official mailing list for the Austrian OSM community" + }, + "at-twitter": { + "name": "OpenStreetMap Austria Twitter", + "description": "OpenStreetMap Austria On Twitter: {url}" + }, + "osmgraz-meetup": { + "name": "OSM community meetup Graz", + "description": "Monthly meetup of the OpenStreetMap community in Graz" + }, + "osmgraz-twitter": { + "name": "OSM community Graz on twitter", + "description": "OpenStreetMap community in Graz on twitter" + }, + "osm-at": { + "name": "OpenStreetMap Austria", + "description": "The platform for information on OpenStreetMap in Austria" + }, + "be-facebook": { + "name": "OpenStreetMap BE Community", + "description": "Mappers and OpenStreetMap facebook in Belgium" + }, + "be-forum": { + "name": "OpenStreetMap BE forum", + "description": "OpenStreetMap Belgium web forum" + }, + "be-irc": { + "name": "OpenStreetMap Belgium IRC", + "description": "Join #osmbe on irc.oftc.net (port 6667)", + "extendedDescription": "Join #osmbe on irc.oftc.net (port 6667), it is bridged with the matrix chat channel" + }, + "be-mailinglist": { + "name": "Talk-be Mailing List", + "description": "Talk-be is the official mailing list for Belgian OSM community" + }, + "be-matrix": { + "name": "OpenStreetMap BE Riot channel", + "description": "All mappers are welcome! Sign up at {signupUrl}", + "extendedDescription": "Multiple channels exists, for beginners to thematic channels, landuse and dev talk" + }, + "be-meetup": { + "name": "OpenStreetMap Belgium Meetup", + "description": "IRL meetups of everyone who is interested in OpenStreetMap.", + "extendedDescription": "Physical meetups are great to meet other mappers, ask them questions and to learn a lot. Especially new contributors are very welcome!" + }, + "be-twitter": { + "name": "OpenStreetMap Belgium Twitter", + "description": "OSM Belgium On Twitter: {url}" + }, + "byosm": { + "name": "OpenStreetMap Belarus", + "description": "OpenStreetMap Belarus telegram chat" + }, + "talk-cz-mailinglist": { + "name": "Talk-cz Mailing List", + "description": "Talk-cz is the official mailing list for Czech community" + }, + "de-berlin-mailinglist": { + "name": "Berlin Mailing List", + "description": "This is the mailing list for the Berlin OSM community" + }, + "de-berlin-meetup": { + "name": "OpenStreetMap Berlin-Brandenburg Meetup", + "description": "Mappers and OpenStreetMap users in the Berlin area" + }, + "de-berlin-telegram": { + "name": "@osmberlin on Telegram", + "description": "OpenStreetMap Berlin Telegram chat" + }, + "de-berlin-twitter": { + "name": "OpenStreetMap Berlin Twitter", + "description": "Follow us on Twitter: {url}" + }, + "de-forum": { + "name": "OpenStreetMap DE forum", + "description": "OpenStreetMap Germany web forum" + }, + "de-irc": { + "name": "OpenStreetMap Germany IRC", + "description": "Join #osm-de on irc.oftc.net (port 6667)" + }, + "de-mailinglist": { + "name": "Talk-de Mailing List", + "description": "Talk-de is the official mailing list for the German OSM community" + }, + "osm-de": { + "name": "OpenStreetMap Germany", + "description": "The platform for information on OpenStreetMap in Germany" + }, + "OSM-ES-mailinglist": { + "name": "Talk-es mailing list", + "description": "A mailing list to discuss OpenStreetMap in Spain" + }, + "OSM-ES-telegram": { + "name": "@OSMes on Telegram", + "description": "OpenStreetMap Spain Telegram chat" + }, + "fr-facebook": { + "name": "OpenStreetMap France Facebook page", + "description": "OpenStreetMap France Facebook page" + }, + "fr-forum": { + "name": "OpenStreetMap France web forum", + "description": "OpenStreetMap France web forum" + }, + "fr-irc": { + "name": "OpenStreetMap France on IRC", + "description": "Join #osm-fr on irc.oftc.net (port 6667)" + }, + "fr-mailinglist": { + "name": "Talk-fr Mailing List", + "description": "Talk-fr mailing list" + }, + "fr-twitter": { + "name": "OpenStreetMap France on Twitter", + "description": "OpenStreetMap France on Twitter: {url}" + }, + "Nottingham-OSM-pub-meetup": { + "name": "East Midlands (Nottingham) Monthly pub meet-up", + "description": "Social gathering for East Midlands mappers and users", + "extendedDescription": "A group have been meeting since March 2011, initially in Nottingham, and, more recently in Derby, and from time to time elsewhere in the East Midlands. These are social gatherings, but are an excellent place to come and ask specific questions about OSM either in the area or in general. In the summer months we usually do some light mapping for an hour in the vicinity of our meeting place. The group as a whole has a special interest in mapping public rights of way and from time to time has mapping meetings for this purpose." + }, + "gb-mailinglist": { + "name": "Talk-gb Mailing List", + "description": "Talk-gb is the main communication forum list for the British (including Northern Ireland) OSM community" + }, + "mappa-mercia-group": { + "name": "Mappa Mercia local group", + "description": "A home for OpenStreetMap enthusiasts in the Midlands", + "extendedDescription": "Mappa Mercia is a project to grow OpenStreetMap in the West Midlands, UK. We run community events, provide training and support local organisations wishing to open up their data." + }, + "gb-irc": { + "name": "OpenStreetMap United Kingdom IRC", + "description": "Join #osm-gb on irc.oftc.net (port 6667)", + "extendedDescription": "Join #osm-gb on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question" + }, + "it-facebook": { + "name": "OpenStreetMap Italy Facebook", + "description": "Join the OpenStreetMap Italy community on Facebook" + }, + "it-irc": { + "name": "OpenStreetMap Italy IRC", + "description": "Join #osm-it on irc.oftc.net (port 6667)" + }, + "it-mailinglist": { + "name": "Talk-it Mailing List", + "description": "Talk-it is the official mailing list for the Italian OSM community" + }, + "it-twitter": { + "name": "OpenStreetMap Italy Twitter", + "description": "Follow us on Twitter at {url}" + }, + "OSM-Rome-meetup": { + "name": "Incontro Mappatori Romani", + "description": "Improve OpenStreetMap in the Rome area", + "extendedDescription": "We aim to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Lazio." + }, + "South-Tyrol-Mailing-List": { + "name": "OpenStreetMap mailing list for South Tyrol", + "description": "OpenStreetMap Italy regional talk list for South Tyrol" + }, + "talk-it-lazio": { + "name": "OpenStreetMap IT Lazio", + "description": "All are welcome! Sign up at {signupUrl}", + "extendedDescription": "Mailinglist for Rome and Lazio area." + }, + "Trentino-Mailing-List": { + "name": "OpenStreetMap mailing list for Trentino", + "description": "OpenStreetMap Italy regional talk list for Trentino" + }, + "no-forum": { + "name": "OpenStreetMap Norway Web Forum", + "description": "OpenStreetMap Norway web forum" + }, + "no-irc": { + "name": "OpenStreetMap Norway on IRC", + "description": "Chat room for mappers and OpenStreetMap users, developers and enthusiasts in Norway" + }, + "no-mailinglist": { + "name": "OpenStreetMap Norway mailing list", + "description": "Mailing list for mappers and OpenStreetMap users, developers and enthusiasts in Norway" + }, + "OSM-PL-facebook-group": { + "name": "OpenStreetMap Poland Facebook group", + "description": "Group for mappers and users of OpenStreetMap in Poland" + }, + "OSM-PL-forum": { + "name": "OpenStreetMap Poland Forum", + "description": "Forum of Polish OpenStreetMap community" + }, + "osm-se": { + "name": "OpenStreetMap.se", + "description": "Provide OSM services and information for the local community in Sweden" + }, + "se-facebook": { + "name": "OpenStreetMap Sweden Facebook", + "description": "OpenStreetMap Sweden on Facebook" + }, + "se-forum": { + "name": "OpenStreetMap Sweden Web Forum", + "description": "OpenStreetMap Sweden web forum" + }, + "se-irc": { + "name": "OpenStreetMap Sweden IRC", + "description": "Join #osm.se on irc.oftc.net (port 6667)" + }, + "se-mailinglist": { + "name": "Talk-se Mailing List", + "description": "A mailing list to discuss OpenStreetMap in Sweden" + }, + "se-twitter": { + "name": "OpenStreetMap Sweden on Twitter", + "description": "Follow us on Twitter: {url}" + }, + "OSM-CA-Slack": { + "name": "OSM-CA Slack", + "description": "All are welcome! Sign up at {signupUrl}." + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap Vancouver", + "description": "Mappers and OpenStreetMap users in the Vancouver, BC area" + }, + "Bay-Area-OpenStreetMappers": { + "name": "Bay Area OpenStreetMappers", + "description": "Improve OpenStreetMap in the Bay Area", + "extendedDescription": "This group is about growing the OpenStreetMap community here in the Bay Area. Our events are open to everyone, from open source enthusiasts, cyclists, GIS professionals, geocachers, and beyond. Anyone and everyone who is interested in maps, map making and free map data is welcome to join our group as well as attend our events." + }, + "Central-Pennsylvania-OSM": { + "name": "Central Pennsylvania OSM", + "description": "Online mapping community based out of State College, PA" + }, + "Code-for-San-Jose-Slack": { + "name": "Code for San Jose Slack", + "description": "All are welcome! Sign up at {signupUrl}, then join the #osm channel." + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM", + "description": "The OpenStreetMap user group for Dallas-Fort Worth", + "extendedDescription": "Dallas, Fort Worth, and all the cities in between are abounding with creative and tech-savvy people. The vision for this usergroup is to find new ways to use the amazing resource of OSM." + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "Meetup for map enthusiasts in the Philadelphia area", + "extendedDescription": "GeoPhilly unites developers, geographers, data geeks, open source enthusiasts, civic hackers and map addicts in our shared love of maps and the stories they tell. If you use maps as part of your work or just want to learn more, this is the meetup for you! Our events aim to be open, friendly, educational and social and range from happy hours to lightning talks or even workshops. Come create a diverse, inspiring geospatial community in the Philadelphia with us!" + }, + "MapMinnesota": { + "name": "MapMinnesota", + "description": "Mappers and OpenStreetMap enthusiasts in the Twin Cities area", + "extendedDescription": "Connecting OpenStreetMap enthusiasts in Minnesota and the Twin Cities!" + }, + "Mapping-DC-meetup": { + "name": "Mapping DC", + "description": "Improve OpenStreetMap in the DC area", + "extendedDescription": "We are a group of volunteer mappers who aim to improve the OpenStreetMap in the DC area. We also aim to teach others about the OSM ecosystem, data analytics, cartography, and GIS. We gather every other month at meetups to focus on one area of our city." + }, + "Maptime-ME-meetup": { + "name": "MaptimeME", + "description": "Mappers and OpenStreetMap users, around Portland, ME", + "extendedDescription": "Maptime is, rather literally, time for mapmaking. Our mission is to open the doors of cartographic possibility to anyone interested by creating a time and space for collaborative learning, exploration, and map creation using mapping tools and technologies." + }, + "OpenCleveland-meetup": { + "name": "Open Cleveland", + "description": "Improve OpenStreetMap in the Cleveland area", + "extendedDescription": "Open Geo Cleveland aims to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Northeast Ohio. We're also a maptime chapter =)" + }, + "OSM-Boston": { + "name": "OpenStreetMap Boston", + "description": "Mappers and OpenStreetMap users in the Boston area", + "extendedDescription": "OpenStreetMap is the free and open, wiki-style map of the world, with hundreds of thousands of contributions every day from people like you. Editing the map is simple, and fun! Join us both indoors and outdoors in our effort to create the best map of the Boston area and the rest of the world!" + }, + "OSM-Central-Salish-Sea": { + "name": "OpenStreetMap Central Salish Sea", + "description": "Mappers and OpenStreetMap users around Mount Vernon, WA", + "extendedDescription": "OpenStreetMap is an map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more. We meet all the time to talk maps, make maps and have fun!" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "The OpenStreetMap user group for Chattanooga" + }, + "OSM-Colorado": { + "name": "OpenStreetMap Colorado", + "description": "Mappers and OpenStreetMap users in the state of Colorado, USA", + "extendedDescription": "OpenStreetMap (OSM) Colorado is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties." + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC", + "description": "Mappers and OpenStreetMap users, developers and enthusiasts in the New York Metropolitan area" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland", + "description": "Mappers and OpenStreetMap users in the Portland area", + "extendedDescription": "OpenStreetMap (OSM) is a map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more, and come join us at a meetup to talk maps, contribute to OSM, and have fun!" + }, + "OSM-Seattle": { + "name": "OpenStreetMap Seattle", + "description": "Mappers and OpenStreetMap users in the Seattle area" + }, + "OSM-SoCal": { + "name": "OpenStreetMap Southern California", + "description": "Let's have some fun, contribute something to Los Angeles, and learn about mapping!", + "extendedDescription": "OpenStreetMap (OSM) Southern California is for anyone interested in mapping to get together to work with OpenStreetMap. OpenStreetMap, the Wikipedia of maps, is a free open-source map of the world being created by more than 1,000,000 volunteers around the globe. Everyone is welcome. If you don't know OpenStreetMap, we'll teach you. If you have an idea for a mapping project or even a field trip that the group can do, great!" + }, + "OSM-South-Bay": { + "name": "OSM South Bay", + "description": "Map Nights hosted by Code for San Jose", + "extendedDescription": "Code for San Jose, the local Code for America brigade, hosts monthly Map Nights on Thursday nights in downtown San José. Meet fellow South Bay mappers, help out with local mapping projects, and hear about other civic tech projects. Programming and GIS skills are not required." + }, + "OSM-Tampa-Bay": { + "name": "OpenStreetMap Tampa Bay", + "description": "Mappers and OpenStreetMap users in the Tampa Bay area", + "extendedDescription": "OSM Tampa Bay group for local residents to get together and build out the definitive map of Tampa Bay with OpenStreetMap, the free and editable map of the world. If you're into maps, data, open source, GPS, hiking, cycling, et cetera, you'll love working with OpenStreetMap -- so join in! We'll get together and map and talk about new topics once-a-month or so." + }, + "OSM-US-Slack": { + "name": "OpenStreetMap US Slack", + "description": "All are welcome! Sign up at {signupUrl}" + }, + "OSM-US": { + "name": "OpenStreetMap US", + "description": "We help grow and improve OpenStreetMap in the United States.", + "extendedDescription": "We support OpenStreetMap by holding annual conferences, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap US here: {signupUrl}" + }, + "OSM-Utah": { + "name": "OpenStreetMap Utah", + "description": "Mappers and OpenStreetMap users in the Salt Lake City area", + "extendedDescription": "Activities may include things like Learn To Map workshops, mapping parties and outdoor data collection. The events will take place in the SLC area, at least initially. We are looking for seasoned mappers as well as people new to OSM. Join and let's do some mapping!" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap Wyoming", + "description": "Mappers and OpenStreetMap users in the state of Wyoming", + "extendedDescription": "OpenStreetMap (OSM) Wyoming is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties." + }, + "PHXGeo-meetup": { + "name": "PHXGeo Meetup", + "description": "Mappers and OpenStreetMap users in the Phoenix, AZ area", + "extendedDescription": "This is a meetup group for those in the Phoenix area who like maps, GIS, OpenStreetMap, cartography and anything in between." + }, + "PHXGeo-twitter": { + "name": "PHXGeo Twitter", + "description": "Follow us on Twitter at {url}" + }, + "Western-Slope-facebook": { + "name": "Western Slope OSM Facebook", + "description": "Mappers and OpenStreetMap users around Grand Junction, CO" + }, + "Western-Slope-meetup": { + "name": "Western Slope OSM Meetup", + "description": "Mappers and OpenStreetMap users around Grand Junction, CO", + "extendedDescription": "The goal of this group is to introduce OpenStreetMap to the community, develop a community of mappers, create the most amazing geodata possible using whatever method we can and finally strategize in order to get this data out into our community. Imagine accurate trail signage! Imagine further development of bike paths! Imagine anything you want, that's the joy of OpenStreetMap!" + }, + "Maptime-Australia-Slack": { + "name": "Maptime Australia Slack", + "description": "Sign up at {signupUrl}" + }, + "talk-au": { + "name": "Talk-au Mailing List", + "description": "Place for Aussie mappers to chat" + }, + "OSM-AR-facebook": { + "name": "OpenStreetMap Argentina Facebook", + "description": "Join the OpenStreetMap Argentina community on Facebook", + "extendedDescription": "News from the local community" + }, + "OSM-AR-forum": { + "name": "OpenStreetMap Argentina web forum", + "description": "Join the OpenStreetMap Argentina web forum", + "extendedDescription": "Ideal for long or important discussions. Slow response time." + }, + "OSM-AR-irc": { + "name": "OpenStreetMap Argentina IRC", + "description": "Join #osm-ar on irc.oftc.net (port 6667)", + "extendedDescription": "You may find the most geeky user in the community." + }, + "OSM-AR-mailinglist": { + "name": "Talk-ar Mailing List", + "description": "Historic mailing list. Almost unused today." + }, + "OSM-AR-telegram": { + "name": "OpenStreetMap Argentina Telegram", + "description": "Join the OpenStreetMap Argentina community on Telegram", + "extendedDescription": "The most active channel in the community, ideal for chatting and getting answers to your questions instantly. Everyone is welcome!" + }, + "OSM-AR-twitter": { + "name": "OpenStreetMap Argentina Twitter", + "description": "Follow us on Twitter at {url}", + "extendedDescription": "News from the local community and OpenStreetMap in general." + }, + "OSM-BO-mailinglist": { + "name": "Talk-bo Mailing List", + "description": "Talk-bo is the official mailing list for the Bolivian OpenStreetMap community", + "extendedDescription": "Mapping in Bolivia? Have questions, want to connect with the community here? Join us at {url}. All are welcome!" + }, + "Bahia-telegram": { + "name": "OpenStreetMap Bahia Telegram Group", + "description": "Join the OpenStreetMap Bahia community on Telegram", + "extendedDescription": "Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!" + }, + "DF-telegram": { + "name": "OpenStreetMap Brasília Telegram Group", + "description": "Join the OpenStreetMap Brasília community on Telegram", + "extendedDescription": "Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!" + }, + "OSM-br-mailinglist": { + "name": "Talk-br Mailing List", + "description": "A mailing list to discuss OpenStreetMap in Brazil" + }, + "OSM-br-telegram": { + "name": "OpenStreetMap Brasil Telegram", + "description": "Join the OpenStreetMap Brasil community on Telegram", + "extendedDescription": "Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!" + }, + "OSM-br-twitter": { + "name": "OpenStreetMap Brasil Twitter", + "description": "Follow us on Twitter at {url}" + }, + "OSM-CL-facebook": { + "name": "OpenStreetMap Chile Facebook", + "description": "Join the OpenStreetMap Chile community on Facebook", + "extendedDescription": "Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!" + }, + "OSM-CL-mailinglist": { + "name": "Talk-cl Mailing List", + "description": "A mailing list to discuss OpenStreetMap in Chile" + }, + "OSM-CL-telegram": { + "name": "OpenStreetMap Chile Telegram", + "description": "Join the OpenStreetMap Chile community on Telegram", + "extendedDescription": "Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!" + }, + "OSM-CL-twitter": { + "name": "OpenStreetMap Chile Twitter", + "description": "Follow us on Twitter at {url}" + }, + "Maptime-Bogota": { + "name": "Maptime Bogotá", + "description": "We're a group of mappers interested in mapping in OpenStreetMap around Bogotá.", + "extendedDescription": "Learn to collect data in the field and digitize onto OpenStreetMap. It is not necessary to have previous knowledge! You just need the desire to participate, learn, and have fun." + }, + "OSM-CO-facebook": { + "name": "OpenStreetMap Colombia Facebook", + "description": "Join the OpenStreetMap Colombia community on Facebook", + "extendedDescription": "Join the community to learn more about OpenStreetMap. Everyone is welcome!" + }, + "OSM-CO-mailinglist": { + "name": "Talk-co Mailing List", + "description": "A mailing list to discuss OpenStreetMap in Colombia" + }, + "OSM-CO-twitter": { + "name": "OpenStreetMap Colombia Twitter", + "description": "Follow us on Twitter at {url}" + }, + "OSM-CO": { + "name": "OpenStreetMap Colombia", + "description": "News of the OpenStreetMap Colombia community and the OSMCo Foundation" + }, + "OSM-PE-facebook": { + "name": "OpenStreetMap Peru Facebook", + "description": "Join the OpenStreetMap Peru community on Facebook" + }, + "OSM-PE-mailinglist": { + "name": "Talk-pe Mailing List", + "description": "The official mailing list for the OpenStreetMap Peru community" + }, + "OSM-PE-matrix": { + "name": "OpenStreetMap Peru Matrix Chat", + "description": "Chat with other members of the OpenStreetMap Peru community in Matrix." + }, + "OSM-PE-telegram": { + "name": "OpenStreetMap Peru Telegram", + "description": "Join the OpenStreetMap Peru community on Telegram" + }, + "OSM-PE-twitter": { + "name": "OpenStreetMap Peru Twitter", + "description": "Follow us on Twitter at {url}" + }, + "OSM-PE": { + "name": "OpenStreetMap Peru", + "description": "News and resources for the OpenStreetMap Peru community" + }, + "OSM-Facebook": { + "name": "OpenStreetMap on Facebook", + "description": "Like us on Facebook for news and updates about OpenStreetMap." + }, + "OSM-help": { + "name": "OpenStreetMap Help", + "description": "Ask a question and get answers on OSM's community-driven question and answer site.", + "extendedDescription": "{url} is for everyone who needs help with OpenStreetMap. Whether you are a beginner mapper or have a technical question, we're here to help!" + }, + "OSM-Reddit": { + "name": "OpenStreetMap on Reddit", + "description": "/r/openstreetmap/ is a great place to learn more about OpenStreetMap. Ask us anything!" + }, + "OSM-Twitter": { + "name": "OpenStreetMap Twitter", + "description": "Follow us on Twitter at {url}" + }, + "OSMF": { + "name": "OpenStreetMap Foundation", + "description": "OSMF is a UK-based not-for-profit that supports the OpenStreetMap Project", + "extendedDescription": "OSMF supports the OpenStreetMap by fundraising, maintaining the servers which power OSM, organizing the annual State of the Map conference, and coordinating the volunters who keep OSM running. You can show your support and have a voice in the direction of OpenStreetMap by joining as an OSMF member here: {signupUrl}", + "events": { + "sotm2018": { + "name": "State of the Map 2018", + "description": "Join us for 3 days in Milan, Italy for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.", + "where": "Milan, Italy" + } + } + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/eo.json b/vendor/assets/iD/iD/locales/eo.json index d7420c034..6347c4435 100644 --- a/vendor/assets/iD/iD/locales/eo.json +++ b/vendor/assets/iD/iD/locales/eo.json @@ -1,5 +1,10 @@ { "eo": { + "icons": { + "information": "informoj", + "remove": "forigi", + "undo": "malfari" + }, "modes": { "add_area": { "title": "Areo", @@ -145,7 +150,9 @@ "vertex": "Kunigis linion/areon al alia linio.", "line": "Kunigis linion/areon al linio.", "area": "Kunigis linion/areon al areo." - } + }, + "relation": "Ĉi tiuj elementoj ne povas esti konektitaj, ĉar ili havas konfliktajn rolojn de rilatoj.", + "restriction": "Ĉi tiuj elementoj ne povas esti konektitaj, ĉar tio ĉi detruus la rilaton “{relation}”." }, "disconnect": { "title": "Malkunigi", @@ -401,6 +408,7 @@ "key": "H", "title": "Historio", "selected": "{n} elektitaj", + "no_history": "Neniu historio (nova elemento)", "version": "Versio", "last_edit": "Lasta redakto", "edited_by": "Redaktita de", @@ -638,14 +646,19 @@ } }, "success": { - "edited_osm": "Redaktis OSM!", "just_edited": "Vi ĵus redaktis OpenStreetMap!", - "view_on_osm": "Montri en OSM", - "facebook": "Kunhavigi per Fejsbuko", - "twitter": "Kunhavigi per Twitter", - "google": "Kunhavigi per Google+", - "help_html": "Viaj ŝanĝoj povos aperi en la “Norma” tavolo post kelkaj minutoj. Aktualigo de aliaj tavoloj kaj aliaj elementoj povos okupi pli da tempo.", - "help_link_text": "Detaloj" + "thank_you": "Dankon por plibonigi la mapon.", + "thank_you_location": "Dankon por plibonigi la mapon ĉirkaÅ­ {where}.", + "help_html": "Viaj ŝanĝoj aperos en OpenStreetMap post kelkaj minutoj. Aktualigo de aliaj mapoj povas okupi pli da tempo.", + "help_link_text": "Detaloj", + "view_on_osm": "Montri ŝanĝoj ĉe OSM", + "changeset_id": "Via ŝanĝaro #: {changeset_id}", + "like_osm": "Ĉu OpenStreetMap plaĉas al vi? Komunikiĝu kun aliaj:", + "more": "Pli", + "events": "Okazaĵoj", + "languages": "Lingvoj: {languages}", + "missing": "Ĉu io mankas en la listo?", + "tell_us": "Sciigu nin!" }, "confirm": { "okay": "Bone", @@ -1772,6 +1785,9 @@ "display": { "label": "Vidigilo" }, + "distance": { + "label": "Tuta distanco" + }, "dock": { "label": "Speco" }, @@ -1812,6 +1828,9 @@ "except": { "label": "Esceptoj" }, + "faces": { + "label": "Flankoj" + }, "fax": { "label": "Telekopiilo", "placeholder": "+31 42 123 45 67" @@ -1923,6 +1942,39 @@ "label": "Korboj", "placeholder": "1, 2, 4…" }, + "horse_dressage": { + "label": "Dresrajdado", + "options": { + "equestrian": "Jes", + "undefined": "Ne" + } + }, + "horse_riding": { + "label": "Ĉeval-rajdado", + "options": { + "horse_riding": "Jes", + "undefined": "Ne" + } + }, + "horse_scale": { + "label": "Ĉeval-rajdada malfacileco", + "options": { + "common": "Facila: neniuj problemoj kaj malfacilaĵoj (implicite).", + "critical": "Malfacilega: transrajdebla nur por spertaj rajdistoj kaj ĉevaloj, grandaj obstakloj, pontoj povas ne subteni vian pezon.", + "dangerous": "Tre malfacilega: transrajdebla nur por tre spertaj rajdistoj kaj ĉevaloj dum bona vetero, deĉevaliĝu.", + "demanding": "Ete malfacila: malebena vojo, kelkaj malfacilaj pasejoj.", + "difficult": "Malfacila: mallarĝa kaj malebena vojo, povas enhavi transsaltendajn baraĵojn kaj mallarĝajn pasejojn.", + "impossible": "Netransrajdebla: vojo aÅ­ ponto netrairebla por ĉevaloj.; tre mallarĝa, malhelpaĵoj kiel ŝtupetaroj; danĝera por vivo." + }, + "placeholder": "Malfacila, danĝera…" + }, + "horse_stables": { + "label": "Ĉeval-domo", + "options": { + "stables": "Jes", + "undefined": "Ne" + } + }, "iata": { "label": "IATA" }, @@ -1942,6 +1994,9 @@ "indoor": { "label": "Interno" }, + "industrial": { + "label": "Speco" + }, "information": { "label": "Speco" }, @@ -2062,6 +2117,10 @@ "label": "Rapidlimo", "placeholder": "40, 50, 60…" }, + "maxspeed/advisory": { + "label": "Konsilinda rapidlimo", + "placeholder": "40, 50, 60…" + }, "maxstay": { "label": "Maksimuma restad-tempo" }, @@ -2408,7 +2467,7 @@ "label": "Speco de servo", "options": { "crossover": "Trakforko", - "siding": "Preterpasejo", + "siding": "Kromtrako", "spur": "Branĉtrako", "yard": "Ranĝadstaciaj trakoj" } @@ -2650,6 +2709,17 @@ "label": "Speco", "placeholder": "Norma" }, + "usage_rail": { + "label": "Uzo", + "options": { + "branch": "branĉa", + "industrial": "industria", + "main": "ĉefa", + "military": "armea", + "test": "testa", + "tourism": "turisma" + } + }, "vending": { "label": "Specoj de varoj" }, @@ -2746,6 +2816,10 @@ "name": "Anonctabulego", "terms": "anonctabulo,reklamo,spamo,afiŝo,afisho,afisxo" }, + "advertising/column": { + "name": "Reklam-kolono", + "terms": "reklamkolono,kolumno,afiŝkolono" + }, "aerialway": { "name": "Kablotransporto" }, @@ -2831,6 +2905,10 @@ "name": "Flugstacio", "terms": "flughaveno,terminalo" }, + "allotments/plot": { + "name": "Parcelo de familia ĝardeno", + "terms": "terpeco;parcelo;ĝardeno" + }, "amenity": { "name": "Servejo" }, @@ -3059,6 +3137,10 @@ "name": "Bazaro", "terms": "foirejo,foiro,komercejo" }, + "amenity/monastery": { + "name": "MonaÄ¥eja tereno", + "terms": "monahhejo,monahxejo,abatejo,klostro,klaÅ­stro" + }, "amenity/motorcycle_parking": { "name": "Motorcikla parkumejo", "terms": "motorciklejo,motociklejo" @@ -3263,6 +3345,10 @@ "name": "Vendilo de cigaredoj", "terms": "cigaredo,vendmaŝino" }, + "amenity/vending_machine/coffee": { + "name": "Vendilo de kafo", + "terms": "kafmaŝino,teo" + }, "amenity/vending_machine/condoms": { "name": "Vendilo de kondomoj", "terms": "kondomo,vendmaŝimo,penisingo" @@ -3271,6 +3357,14 @@ "name": "Vendilo de trinkaĵoj", "terms": "vendilo de trinkajxoj,vendilo de trinkajsoj,trinkaĵoj" }, + "amenity/vending_machine/electronics": { + "name": "Vendilo de elektronikaĵoj", + "terms": "ŝargiloj,piloj,kabloj,memoriloj,memorbastonetoj,SD-kartoj,memorkartoj" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Vendilo de etenditaj moneroj", + "terms": "moneretendilo,etendilo,memoraĵoj" + }, "amenity/vending_machine/excrement_bags": { "name": "Vendilo de saketoj por fekaĵoj", "terms": "fekajhoj,fekajxoj,merdo,hundo" @@ -3279,6 +3373,18 @@ "name": "Vendilo de virinaj higienaĵoj", "terms": "menstrusorbiloj,tambonoj,persona higieno" }, + "amenity/vending_machine/food": { + "name": "Vendilo de manĝaĵo", + "terms": "manghajho,mangxajxo" + }, + "amenity/vending_machine/fuel": { + "name": "Vendilo de benzino", + "terms": "benzinstacio,diseloleo,benzino,brulaĵo,LPG,biodisel" + }, + "amenity/vending_machine/ice_cream": { + "name": "Vendilo de glaciaĵoj", + "terms": "glaciaĵo" + }, "amenity/vending_machine/news_papers": { "name": "Vendilo de gazetoj" }, @@ -3298,6 +3404,10 @@ "name": "Vendilo de vojimpostoj", "terms": "vojimposto,vojimpostejo,vojimpostilo" }, + "amenity/vending_machine/stamps": { + "name": "Vendilo de poŝtmarkoj", + "terms": "poŝtmarkoj" + }, "amenity/vending_machine/sweets": { "name": "Vendilo de dolĉaĵoj", "terms": "dolĉaĵoj,dolchajhoj,dolcxajxoj,sukeraĵoj,sukerajhoj,sukerajxoj," @@ -3370,6 +3480,10 @@ "name": "Defala turo (allogaĵo)", "terms": "turo,drop tower" }, + "attraction/maze": { + "name": "Labirinto", + "terms": "vojenigmo,enigmo" + }, "attraction/pirate_ship": { "name": "Pirata ŝipo (allogaĵo)", "terms": "ŝipo,shipo,sxipo,piratŝipo" @@ -3999,6 +4113,10 @@ "name": "Hospico", "terms": "hospico,flegejo" }, + "healthcare/laboratory": { + "name": "Medicina laboratorio", + "terms": "medicina labo,labo,sanĝkontrolejo" + }, "healthcare/midwife": { "name": "Akuŝisto", "terms": "akuŝistino,naskiĝcentro,naskiĝdomo,gravedeco" @@ -4101,6 +4219,10 @@ "name": "AÅ­tovoja ligilo", "terms": "enveturejo,elveturejo,aÅ­toŝoseo,nodo" }, + "highway/passing_place": { + "name": "Preterpasejo", + "terms": "pasejo,preterveturejo" + }, "highway/path": { "name": "Vojeto (piedpremita)", "terms": "vojo,pado,irejo,piedvojeto" @@ -4460,6 +4582,10 @@ "name": "Salono de ludoj", "terms": "ludejo,amuzaparatoj,videoludoj,paĉinko,flipero,bilardo" }, + "leisure/beach_resort": { + "name": "Sablobordo administrata (kun oportunaĵoj)", + "terms": "plaĝo,strando,ripozcentro,sunbanejo" + }, "leisure/bird_hide": { "name": "Bird-observejo", "terms": "birdobservejo" @@ -4576,6 +4702,10 @@ "name": "Natur-rezervejo", "terms": "naturrezervejo,naturprotektejo,rezervejo,naturparko,nacia parko,konservejo" }, + "leisure/outdoor_seating": { + "name": "Seĝoj eksterdome", + "terms": "seghoj,segxoj,benko,altano,teraso" + }, "leisure/park": { "name": "Parko", "terms": "herbejo,ripozejo,verdejo,ĝardenego" @@ -4704,6 +4834,10 @@ "name": "Mineja koridoro", "terms": "minejkoridoro,minejo horizontala,minejgalerio,galerio" }, + "man_made/antenna": { + "name": "Anteno", + "terms": "masto" + }, "man_made/breakwater": { "name": "Ond-rompilo", "terms": "ondorompilo,ondrompilo,digo,ĝeto" @@ -4755,6 +4889,10 @@ "name": "Vidturo", "terms": "observturo,turo" }, + "man_made/observatory": { + "name": "Observejo", + "terms": "astronomia,vetera,teleskopo" + }, "man_made/petroleum_well": { "name": "Puto nafta", "terms": "naftoputo,naftoŝakto,drilplatformo" @@ -4879,6 +5017,10 @@ "name": "Erikejo", "terms": "arbustaro,herbejo" }, + "natural/mud": { + "name": "Kota tereno", + "terms": "koto;malsekejo;ŝlimejo" + }, "natural/peak": { "name": "Montpinto", "terms": "montopinto,monto,supro,kulmino,supraĵo" @@ -5360,7 +5502,7 @@ "terms": "stacidomo" }, "public_transport/station_aerialway": { - "name": "Stacio koblovoja", + "name": "Stacio kablovoja", "terms": "telferstacio,telfera stacio" }, "public_transport/station_bus": { @@ -5463,8 +5605,8 @@ "terms": "relŝuo,relfino,finrelo" }, "railway/disused": { - "name": "Forlasita relvojo", - "terms": "eksa fervojlinio,trako,relvojo" + "name": "Neuzata relvojo", + "terms": "eksa fervojlinio,trako,relvojo,forlasita fervojlinio" }, "railway/funicular": { "name": "Funikularo", @@ -5915,6 +6057,10 @@ "name": "Dombesta vendejo", "terms": "dombestoj,hejmbestoj,bestoj,kobajo,kuniklo,papago" }, + "shop/pet_grooming": { + "name": "Dombesta beligejo", + "terms": "frizejo,hartondisto,hundoj,katoj,hejmbestoj" + }, "shop/photo": { "name": "Fotografia vendejo", "terms": "fotografio,fotografarto" @@ -6134,6 +6280,10 @@ "name": "Amuzparko", "terms": "amuzejo,temparko,distroparko" }, + "tourism/trail_riding_station": { + "name": "Pensiono por ĉevalistoj", + "terms": "ĉevalejo,ĉevalhotelo" + }, "tourism/viewpoint": { "name": "Belvidejo", "terms": "videjo,vidindaĵo,rigardejo" @@ -6218,16 +6368,20 @@ "terms": "malpermeso,malantaÅ­en,U-forma,,Uforma,prohibo" }, "type/restriction/only_left_turn": { - "name": "Turno maldekstren devigita", - "terms": "ordono,devigo,maldekstren" + "name": "Nur turno maldekstren", + "terms": "maldekstren,liven" }, "type/restriction/only_right_turn": { - "name": "Turno dekstren devigita", - "terms": "ordono,devigo,maldekstren" + "name": "Nur turno dekstren", + "terms": "dekstren" }, "type/restriction/only_straight_on": { - "name": "Veturo rekten devigita", - "terms": "ordono,devigo,rekten,antaÅ­en" + "name": "Nur veturo rekten", + "terms": "rekten,antaÅ­en" + }, + "type/restriction/only_u_turn": { + "name": "Nur turno malantaÅ­en", + "terms": "malantaÅ­en,reveturen,U-turno" }, "type/route": { "name": "Kurso", @@ -6390,7 +6544,7 @@ "attribution": { "text": "Kondiĉoj kaj rimarkoj" }, - "description": "Limoj kaj datoj de fotoj. Etikedoj montriĝas de skal-nivelo 14.", + "description": "Limoj kaj datoj de fotoj. Etikedoj montriĝas de skal-nivelo 13.", "name": "Detala fotaro de DigitalGlobe - fot-dato" }, "DigitalGlobe-Standard": { @@ -6404,7 +6558,7 @@ "attribution": { "text": "Kondiĉoj kaj rimarkoj" }, - "description": "Limoj kaj datoj de fotoj. Etikedoj montriĝas de skal-nivelo 14.", + "description": "Limoj kaj datoj de fotoj. Etikedoj montriĝas de skal-nivelo 13.", "name": "Norma fotaro de DigitalGlobe - fot-dato" }, "EsriWorldImagery": { @@ -6488,6 +6642,10 @@ "description": "Flave = publikaj map-datumoj de Usona popolnombrado. Ruĝe = datumoj ne trovitaj en OpenStreetMap", "name": "TIGER Roads 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "Vojo: verda rando = neklasifikita, bruna rando = kampa vojo. Pavimo: helbruna plenigo = sablego, nigra = asfalto, griza = pavimita, blanka = tera, blua = betono, verda = herbo. Blankaj strioj = sezona vojo.", + "name": "Surtavolo de arbar-kultivaj vojoj" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, kontribuintoj de OpenStreetMap, CC by-SA 3.0" @@ -6584,7 +6742,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Map-kaheloj de Stamen Design, laÅ­ CC BY 3.0" + "text": "Map-kaheloj de Stamen Design, laÅ­ CC BY 3.0. Datumoj de OpenStreetMap, laÅ­ ODbL" }, "name": "Stamen Terrain" }, @@ -6600,6 +6758,37 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "OSM-Facebook": { + "name": "OpenStreetMap ĉe Facebook", + "description": "Ŝatu nin ĉe Facebook por akiri novaĵojn pri OpenStreetMap." + }, + "OSM-help": { + "name": "Helpo pri OpenStreetMap", + "description": "Demandu kaj akiru respondojn ĉe kreata de komunumo retejo.", + "extendedDescription": "{url} taÅ­gas por ĉiu, kiu bezonas helpon pri OpenStreetMap. Ne gravas ĉu vi estas komencanta mapisto aÅ­ havas teÄ¥nikan demandon, ni estas tie ĉi por vin helpi!" + }, + "OSM-Reddit": { + "name": "OpenStreetMap ĉe Reddit", + "description": "/r/openstreetmap/ estas bonega loko por sciiĝi pli pri OpenStreetMap. Demandu pri io ajn!" + }, + "OSM-Twitter": { + "name": "OpenStreetMap ĉe Twitter", + "description": "Sekvi nin ĉe Twitter ĉe {url}" + }, + "OSMF": { + "name": "Fondaĵo OpenStreetMap", + "description": "OSMF estas ne-profit-cela organizaĵo en Britujo, kiu subtenas la projekton OpenStreetMap", + "extendedDescription": "OSMF subtenas OpenStreetMap per regali, prizorgi servilojn gastigatajn OSM, organizi la ĉiujaran konferencon “State of the Map” kaj kunordigi volontulojn, kiuj evoluigas la mapon. Vi povas oferi vian helpon kaj havi opinion pri direkto de la projekto OpenStreetMap per aniĝi OSMF tie ĉi: {signupUrl}", + "events": { + "sotm2018": { + "name": "State of the Map 2018", + "description": "Kunigu nin por 3 tagoj en Milano, Italujo por la ĉiujaran internacian konferencon pri OpenStreetMap por kunigi ĉiujn en la komunumo por sociumi, diskonigi kaj lerni.", + "where": "Milano, Italujo" + } + } + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/es.json b/vendor/assets/iD/iD/locales/es.json index 8bd3bb4ff..a4aa5818a 100644 --- a/vendor/assets/iD/iD/locales/es.json +++ b/vendor/assets/iD/iD/locales/es.json @@ -1,5 +1,10 @@ { "es": { + "icons": { + "information": "información", + "remove": "quitar", + "undo": "deshacer" + }, "modes": { "add_area": { "title": "Área", @@ -145,7 +150,9 @@ "vertex": "Vía conectada a otra.", "line": "Vía conectada a una línea.", "area": "Vía conectada a un área." - } + }, + "relation": "Estos elementos no se pueden conectar porque tienen roles de relación con conflictos.", + "restriction": "Estos elementos no se pueden conectar porque dañarían la relación \"{relation}\"." }, "disconnect": { "title": "Desconectar", @@ -291,6 +298,42 @@ } } }, + "restriction": { + "controls": { + "distance": "Distancia", + "distance_up_to": "Hasta {distance}", + "via": "Vía", + "via_node_only": "Solo nodo", + "via_up_to_one": "Hasta 1 vía", + "via_up_to_two": "Hasta 2 vías" + }, + "help": { + "indirect": "(indirecto)", + "turn": { + "no_left_turn": "NO giro a la izquierda {indirect}", + "no_right_turn": "NO giro a la derecha {indirect}", + "no_u_turn": "NO giro en U {indirect}", + "no_straight_on": "NO seguir derecho {indirect}", + "only_left_turn": "SOLO giro a la izquierda {indirect}", + "only_right_turn": "SOLO giro a la derecha {indirect}", + "only_u_turn": "SOLO giro en U {indirect}", + "only_straight_on": "SOLO seguir derecho {indirect}", + "allowed_left_turn": "Giro a la izquierda permitido {indirect}", + "allowed_right_turn": "Giro a la derecha permitido {indirect}", + "allowed_u_turn": "Giro en U permitido {indirect}", + "allowed_straight_on": "Seguir derecho permitido {indirect}" + }, + "from": "DESDE", + "via": "VÍA", + "to": "HASTA", + "from_name": "{from} {fromName}", + "from_name_to_name": "{from} {fromName} {to} {toName}", + "via_names": "{via} {viaNames}", + "select_from": "Haga clic para seleccionar un segmento {from}", + "select_from_name": "Haga clic para seleccionar {from} {fromName}", + "toggle": "Haga clic para \"{turn}\"" + } + }, "undo": { "tooltip": "Deshacer: {action}", "nothing": "Nada que deshacer" @@ -366,6 +409,7 @@ "key": "H", "title": "Historial", "selected": "{n} seleccionado", + "no_history": "Sin historial (Nuevo elemento)", "version": "Versión", "last_edit": "Última edición", "edited_by": "Editado por", @@ -603,15 +647,20 @@ } }, "success": { - "edited_osm": "¡OSM editado!", - "just_edited": "¡Acaba de editar OpenStreetMap!", - "view_on_osm": "Ver en OSM", - "facebook": "Compartir en Facebook", - "twitter": "Compartir en Twitter", - "google": "Compartir en Google+", - "help_html": "Sus cambios deberían aparecer en la capa «estándar» en unos pocos minutos. Otras capas, y ciertos elementos, pueden llevar más tiempo.", + "just_edited": "¡Acabas de editar OpenStreetMap!", + "thank_you": "Gracias por mejorar el mapa.", + "thank_you_location": "Gracias por mejorar el mapa alrededor de {where}.", + "help_html": "Los cambios deberían aparecer en OpenStreetMap en unos minutos. Puede llevar más tiempo para que otros mapas reciban las actualizaciones.", "help_link_text": "Detalles", - "help_link_url": "https://wiki.openstreetmap.org/wiki/ES:FAQ#Acabo_de_hacer_algunos_cambios_en_el_mapa._.C2.BFC.C3.B3mo_puedo_ver_mis_modificaciones.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/ES:FAQ#Acabo_de_hacer_algunos_cambios_en_el_mapa._.C2.BFC.C3.B3mo_puedo_ver_mis_modificaciones.3F", + "view_on_osm": "Ver cambios en OSM", + "changeset_id": "Conjunto de cambios #: {changeset_id}", + "like_osm": "¿Te gusta OpenStreetMap? Conéctate con otros:", + "more": "Más", + "events": "Eventos", + "languages": "Idiomas: {languages}", + "missing": "¿Falta algo en esta lista?", + "tell_us": "¡Cuéntanos!" }, "confirm": { "okay": "Aceptar", @@ -846,6 +895,44 @@ "using": "Para usar una traza de GPS para el mapeo, arrastre y suelte el archivo de datos en el editor de mapas. Si lo reconoce, lo dibujará en el mapa como una línea violeta brillante. Haga clic en el panel {data} **Datos del mapa** en el lateral del mapa para habilitar, deshabilitar o ampliar sus datos de GPS.", "tracing": "La traza de GPS no se envía a OpenStreetMap; la mejor manera de usarla es dibujar en el mapa usándola como una guía para los nuevos elementos que agregue.", "upload": "También puede [cargar los datos del GPS a OpenStreetMap](https://www.openstreetmap.org/trace/create) para que los usen otros usuarios." + }, + "field": { + "restrictions": { + "title": "Ayuda sobre restricciones de giro", + "about": { + "title": "Acerca de", + "about": "Este campo permite inspeccionar y modificar restricciones de giro. Muestra un modelo de la intersección seleccionada incluyendo otras vías cercanas conectadas.", + "from_via_to": "Una restricción de giro siempre contiene: una **vía DESDE**, una **vía HASTA**, y un **nodo VÍA** o una o más **vías VÍA**.", + "maxdist": "El control deslizante \"{distField}\" controla qué tan lejos buscar vías adicionales conectadas.", + "maxvia": "El control deslizante \"{viaField}\" ajusta cuántas vías se pueden incluir en la búsqueda. (Consejo: simple es mejor)" + }, + "inspecting": { + "title": "Inspeccionando", + "about": "Desplácese sobre cualquier segmento **DESDE** para ver si tiene restricciones de giro. Cada destino **HASTA** posible se dibujará con una sombra de color que muestra si existe una restricción.", + "from_shadow": "{fromShadow} **segmento DESDE**", + "allow_shadow": "{allowShadow} **HASTA Permitido**", + "restrict_shadow": "{restrictShadow} **HASTA Restringido**", + "only_shadow": "{onlyShadow} **HASTA Solo**", + "restricted": "\"Restringido\" significa que hay una restricción de giro, por ejemplo \"No girar a la izquierda\".", + "only": "\"Solo\" significa que un vehículo que toma ese camino solo puede hacer esa elección, por ejemplo, \"Solo seguir derecho\"." + }, + "modifying": { + "title": "Modificando", + "about": "Para modificar las restricciones de giro, primero haga clic en cualquier segmento de partida **DESDE** para seleccionarlo. El segmento seleccionado emitirá un pulso, y todos los posibles destinos **HASTA** aparecerán como símbolos de giro.", + "indicators": "Luego, haga clic en un símbolo de giro para alternar entre \"Permitido\", \"Restringido\" y \"Solo\".", + "allow_turn": "{allowTurn} **HASTA Permitido**", + "restrict_turn": "{restrictTurn} **HASTA Restringido**", + "only_turn": "{onlyTurn} **HASTA Solo**" + }, + "tips": { + "title": "Consejos", + "simple": "**Prefiera restricciones simples sobre las complejas.**", + "simple_example": "Por ejemplo, evite crear una restricción de vía-vía si una restricción de giro de nodo-vía simple funciona.", + "indirect": "**Algunas restricciones muestran el texto \"(indirecto)\" y se dibujan más claras.**", + "indirect_example": "Estas restricciones existen debido a otra restricción cercana. Por ejemplo, una restricción \"Solo seguir derecho\" creará indirectamente restricciones de \"No giro\" para todos los demás caminos a través de la intersección.", + "indirect_noedit": "No se puede editar restricciones indirectas. En cambio, edite la restricción directa cercana." + } + } } }, "intro": { @@ -1700,6 +1787,9 @@ "display": { "label": "Monitor" }, + "distance": { + "label": "Distancia total" + }, "dock": { "label": "Tipo" }, @@ -1740,6 +1830,9 @@ "except": { "label": "Excepciones" }, + "faces": { + "label": "Caras" + }, "fax": { "label": "Fax", "placeholder": "+31 42 123 4567" @@ -1851,6 +1944,39 @@ "label": "Aros", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "label": "Doma clásica", + "options": { + "equestrian": "Sí", + "undefined": "No" + } + }, + "horse_riding": { + "label": "Cabalgatas", + "options": { + "horse_riding": "Sí", + "undefined": "No" + } + }, + "horse_scale": { + "label": "Dificultad para montar a caballo", + "options": { + "common": "Fácil: sin problemas ni dificultades. (Predeterminado)", + "critical": "Límite: solo transitable para jinetes y caballos experimentados. Obstáculos importantes. Los puentes deben examinarse cuidadosamente.", + "dangerous": "Peligroso: solo apto para jinetes y caballos muy experimentados y solo cuando hace buen tiempo. Desmontar.", + "demanding": "Usar con precaución: Vía irregular, pasajes ocasionalmente difíciles.", + "difficult": "Difícil: Camino angosto y expuesto. Puede tener obstáculos para pasar y pasadizos estrechos.", + "impossible": "Imposible: camino o puente no transitable para caballos. Demasiado estrecho, soporte insuficiente, obstáculos como escaleras. Peligro de muerte." + }, + "placeholder": "Difícil, Peligroso..." + }, + "horse_stables": { + "label": "Establo para montar a caballo", + "options": { + "stables": "Sí", + "undefined": "No" + } + }, "iata": { "label": "IATA" }, @@ -1870,6 +1996,9 @@ "indoor": { "label": "Interior" }, + "industrial": { + "label": "Tipo" + }, "information": { "label": "Tipo" }, @@ -1990,6 +2119,10 @@ "label": "Límite de velocidad", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "label": "Límite de velocidad recomendada", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Estadía máxima" }, @@ -2020,7 +2153,7 @@ "options": { "0": "Más fácil (círculo blanco)", "1": "Fácil (círculo verde)", - "2": "Media (círculo azul)", + "2": "Media (cuadrado azul)", "3": "Difícil (diamante negro)", "4": "Extremadamente difícil (doble diamante negro)" }, @@ -2578,8 +2711,19 @@ "label": "Tipo", "placeholder": "Predeterminado" }, + "usage_rail": { + "label": "Tipo de uso", + "options": { + "branch": "Ramal", + "industrial": "Industrial", + "main": "Principal", + "military": "Militar", + "test": "Prueba", + "tourism": "Turismo" + } + }, "vending": { - "label": "Tipo de producto" + "label": "Tipos de bienes" }, "visibility": { "label": "Visibilidad", @@ -2674,6 +2818,10 @@ "name": "Panel publicitario", "terms": "panel, cartel, cartelera, valla, publicitario, publicidad" }, + "advertising/column": { + "name": "Columna publicitaria", + "terms": "Columna publicitaria, publicidad, cartel, propaganda" + }, "aerialway": { "name": "Transporte por cable" }, @@ -2759,6 +2907,10 @@ "name": "Terminal de aeropuerto", "terms": "terminal, pasajeros, aeropuerto" }, + "allotments/plot": { + "name": "Parcela comunitaria", + "terms": "jardín, huerto, huerta, comunitario, comunal, vecindad, huerto urbano, área, terreno, zona" + }, "amenity": { "name": "Servicio" }, @@ -2850,7 +3002,7 @@ "terms": "casino, azar, casa de juego, ruleta, black jack, póquer, tragamoneda" }, "amenity/charging_station": { - "name": "Estación de carga eléctrica", + "name": "Estación de carga para vehículos eléctricos", "terms": "recarga, electricidad, eléctrico, estación de carga para vehículo eléctrico, punto de recarga, electrolinera" }, "amenity/childcare": { @@ -2863,23 +3015,23 @@ }, "amenity/clinic": { "name": "Clínica", - "terms": "clínica, centro médico, hospital, consultorio" + "terms": "clínica, centro médico, consultorio médico, centro de salud" }, "amenity/clinic/abortion": { "name": "Clínica de aborto", - "terms": "aborto, abotar, interrupción, embarazo, interrupción embarazo, clínica de aborto, clinica aborto" + "terms": "aborto, abotar, interrupción, embarazo, interrupción del embarazo, clínica de aborto, clínica de aborto" }, "amenity/clinic/fertility": { "name": "Clínica de fertilidad", - "terms": "clínica de fertilidad, clinica de fertilidad, fertilidad, reproducción, reproduccion, esperma, ovulación, ovulacion" + "terms": "clínica de fertilidad, clínica de fertilidad, fertilidad, reproducción, esperma, ovulación, ovulación, clínica de reproducción" }, "amenity/clock": { "name": "Reloj", "terms": "cronómetro" }, "amenity/college": { - "name": "Instituto / Escuela profesional", - "terms": "instituto, universidad, escuela profesional, educación terceria" + "name": "Terreno de centro educativo superior no universitario", + "terms": "formación profesional, escuela profesional, educación terciaria, post-bachillerato, ciclo formativo de grado superior, FP, conservatorio, Terciario, superior, no universitario, terreno, área, area, suelo, instituto" }, "amenity/community_centre": { "name": "Centro Comunitario", @@ -2906,7 +3058,7 @@ }, "amenity/doctors": { "name": "Doctor", - "terms": "médico, galeno, consultorio" + "terms": "médico, galeno, consultorio médico, ambulatorio médico, consulta médica" }, "amenity/dojo": { "name": "Academia de artes marciales", @@ -2987,6 +3139,10 @@ "name": "Mercado", "terms": "mercado, mercadillo, mercado público, plaza de mercado, feria" }, + "amenity/monastery": { + "name": "Área de Monasterio", + "terms": "área de monasterio, terreno de monasterio, monasterio, terreno sagrado, área religiosa" + }, "amenity/motorcycle_parking": { "name": "Aparcamiento de motocicletas", "terms": "motocicleta, moto, aparcamiento, parking, estacionamiento, parqueadero, parqueo, parqueadero de motocicletas, estacionamiento de motocicletas, parqueo de motocicletas" @@ -3191,6 +3347,10 @@ "name": "Máquina expendedora de cigarrillos", "terms": "tabaco, cigarro, cigarrillo, pucho, expendedor" }, + "amenity/vending_machine/coffee": { + "name": "Máquina expendedora de café", + "terms": "Máquina expendedora de café, café, cafe" + }, "amenity/vending_machine/condoms": { "name": "Máquina expendedora de condones", "terms": "condones, condón, profiláctico, preservativo, expendedor" @@ -3199,6 +3359,14 @@ "name": "Máquina expendedora de bebidas", "terms": "bebida, gaseosa, refresco, expendedor" }, + "amenity/vending_machine/electronics": { + "name": "Máquina expendedora de electrónica", + "terms": "Máquina expendedora de electrónica, cable, cargador, auricular, auriculares, teléfono, telefono, celular, tableta" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Máquina expendedora de monedas planas", + "terms": "Máquina expendedora de monedas planas, moneda, aplastar, alargar, aplanar, penique, recuerdo" + }, "amenity/vending_machine/excrement_bags": { "name": "Máquina expendedora de bolsa para excrementos", "terms": "excremento, caca, bolsa, expendedor" @@ -3207,6 +3375,18 @@ "name": "Máquina expendedora de higiene femenina", "terms": "Máquina expendedora de higiene femenina, maquina expendedora, condón, tampón, tampon, almohadilla, toallita, toalla, mujer, mujeres, productos de higiene menstrual, cuidado personal" }, + "amenity/vending_machine/food": { + "name": "Máquina expendedora de alimentos", + "terms": "Máquina expendedora de alimentos, comida, alimento, comestible, expendedora" + }, + "amenity/vending_machine/fuel": { + "name": "Surtidor de combustible", + "terms": "Surtidor de combustible, gasolina, combustible, biodiesel, gnc" + }, + "amenity/vending_machine/ice_cream": { + "name": "Máquina expendedora de helados", + "terms": "Máquina expendedora de helados, chocolate, helado, helado, paleta, vainilla" + }, "amenity/vending_machine/news_papers": { "name": "Máquina expendedora de periódico" }, @@ -3226,6 +3406,10 @@ "name": "Máquina expendedora del boleto de transporte", "terms": "ticket, boleto, recibo, transporte público, autobús, bus, colectivo, micro, guagua, expendedor" }, + "amenity/vending_machine/stamps": { + "name": "Máquina expendedora del franqueo", + "terms": "Máquina expendedora del franqueo, correo, franqueo, sello, estampillas" + }, "amenity/vending_machine/sweets": { "name": "Máquina expendedora de snacks", "terms": "snack, bocadillo, refrigerio, botanas, expendedor" @@ -3298,6 +3482,10 @@ "name": "Torre de caída", "terms": "torre de caída, pilar de caída, juego mecánico, juego de feria" }, + "attraction/maze": { + "name": "Laberinto", + "terms": "Laberinto, parque temático, parque de diversiones" + }, "attraction/pirate_ship": { "name": "Barco pirata", "terms": "barco pirata, pirata, juego mecánico, juego de feria" @@ -3441,8 +3629,8 @@ "terms": "Edificio cívico, edificio civico, cívico, civico, centro cívico, centro civico, ayuntamiento, biblioteca, piscina" }, "building/college": { - "name": "Edificio instituto", - "terms": "edificio del instituto, edificio instituto, facultad" + "name": "Edificio educativo superior no universitario", + "terms": "edificio del instituto, edificio instituto, centro educativo, centro formativo" }, "building/commercial": { "name": "Edificio comercial", @@ -3464,10 +3652,12 @@ "name": "Entrada/Salida" }, "building/farm": { - "name": "Casa de Campo" + "name": "Casa de campo", + "terms": "Casa de campo, casa, campo, edificio agrícola, edificio agricola, agrícola, agricola, granja" }, "building/farm_auxiliary": { - "name": "Edificio agrícola" + "name": "Edificio agrícola", + "terms": "edificio agrícola, edificio agricola, agrícola, agricola, granja" }, "building/garage": { "name": "Garaje privado", @@ -3925,6 +4115,10 @@ "name": "Hospicio", "terms": "Hospicio, enfermedad, terminal" }, + "healthcare/laboratory": { + "name": "Laboratorio médico", + "terms": "Laboratorio médico, laboratorio, análisis clínicos, analisis clinicos, análisis de sangre, analisis de sangre" + }, "healthcare/midwife": { "name": "Partera", "terms": "Partera, bebé, parto, trabajo de parto, embarazo, nacimiento" @@ -4027,6 +4221,10 @@ "name": "Enlace de autopista", "terms": "enlace, acceso, autopista, autovía, salida" }, + "highway/passing_place": { + "name": "Lugar de paso", + "terms": "lugar de paso, parada, zona de descanso" + }, "highway/path": { "name": "Sendero", "terms": "vereda, sendero, senda, camino, vía, ramal, trocha, atajo, travesía, huella, rastro" @@ -4386,6 +4584,10 @@ "name": "Sala de juegos recreativos", "terms": "juegos, videojuegos, simuladores, máquinas, maquinas, pinball, fichines" }, + "leisure/beach_resort": { + "name": "Balneario", + "terms": "resort, complejo, playa, complejo de playa, balneario" + }, "leisure/bird_hide": { "name": "Observatorio de aves", "terms": "observatorio, refugio, ave, pájaro, vida silvestre, naturaleza" @@ -4403,7 +4605,8 @@ "terms": "sala de baile, pista de baile, baile de salón, bolero, conga, cha-cha-chá, fox-trot, mambo, son cubano, meregue, milonga, pasodoble, polka, rock and roll, rumba, swing, tango, vals, jive" }, "leisure/dancing_school": { - "name": "Escuela de baile" + "name": "Escuela de baile", + "terms": "escuela de baile, escuela de danza, academia de danza, baile, danza, escuela, taller, academia" }, "leisure/dog_park": { "name": "Parque canino", @@ -4501,9 +4704,13 @@ "name": "Reserva natural", "terms": "reserva natural, reserva ecológica, área protegida, conservación, preservación, natural" }, + "leisure/outdoor_seating": { + "name": "Área de asientos al exterior", + "terms": "al aire libre, jardín de cerveza, comedor, cafetería, restaurante, pub, bar, patio" + }, "leisure/park": { - "name": "Parque", - "terms": "parque, plaza, plazuela, parque ecoturístico, área de recreación" + "name": "Parque / Plaza verde", + "terms": "parque, plaza, plazuela, parque ecoturístico, área de recreación, bosque, jardín, jardin, hierba, pasto, verde, césped, cesped, prado, zonas verdes, juegos infantiles, jardín de recreo, arbolado" }, "leisure/picnic_table": { "name": "Mesa de picnic", @@ -4629,6 +4836,10 @@ "name": "Socavón", "terms": "socavón, entrada, mina" }, + "man_made/antenna": { + "name": "Antena", + "terms": "antena, cable, alambre, parabólica, satelital" + }, "man_made/breakwater": { "name": "Rompeolas", "terms": "cortaolas, rompeolas, malecón" @@ -4680,6 +4891,10 @@ "name": "Torre de Observación", "terms": "Torre de observación, torre de vigilancia" }, + "man_made/observatory": { + "name": "Observatorio", + "terms": "observatorio, mirador, observador, astronomía, telescopio" + }, "man_made/petroleum_well": { "name": "Pozo de petróleo", "terms": "pozo, petróleo, plataforma de perforación, torre de perforación, perforación de petróleo, plataforma petrolera" @@ -4804,6 +5019,10 @@ "name": "Brezal / Landa", "terms": "brezal, landa, jaral, matorral, llanura, páramo, meseta, arenal, estepa, planicie, descampado, escajo, tojo" }, + "natural/mud": { + "name": "Lodo", + "terms": "lodo, barro, charco, pantano" + }, "natural/peak": { "name": "Pico", "terms": "pico, montaña, cresta, cima, cúspide, cumbre, picacho, aguja, alpes, corona, colina, monte" @@ -5075,7 +5294,7 @@ "terms": "submunicipio, subdistrito, sector, cuadrante, delegación, localidad, barrio, vecindario, quarter" }, "place/square": { - "name": "Plaza", + "name": "Plaza cívica", "terms": "plaza" }, "place/suburb": { @@ -5840,6 +6059,10 @@ "name": "Tienda de mascotas", "terms": "mascota, animal, tienda de animales" }, + "shop/pet_grooming": { + "name": "Tienda de aseo para mascotas", + "terms": "Tienda de aseo para mascotas, perro" + }, "shop/photo": { "name": "Tienda de fotografía", "terms": "fotografía, fotógrafo, cámara, retratista, revelado, film, rollo, impresión, fotos" @@ -6004,8 +6227,8 @@ "terms": "caravana, remolque, autocaravana, roulotte" }, "tourism/chalet": { - "name": "Cabaña de vacaciones", - "terms": "chalet, bungalow, bungaló, bungalo, turismo, cabaña, complejo de cabañas, vacacional, turístico, turistico, turismo" + "name": "Alojamiento rural vacacional", + "terms": "casa rural, bungalow, bungaló, bungalo, turismo, cabaña, complejo de cabañas, vacacional, turístico, turistico, turismo, cabaña de vacaciones, posada, casa de labranza, casa de campo" }, "tourism/gallery": { "name": "Galería de arte", @@ -6059,6 +6282,10 @@ "name": "Parque de atracciones", "terms": "parque temático, parque de atracciones, atracciones" }, + "tourism/trail_riding_station": { + "name": "Estación en sendero de cabalgata", + "terms": "estación, sendero, cabalgata, equitación, equitacion" + }, "tourism/viewpoint": { "name": "Vista panorámica / Mirador", "terms": "oteadero, punto de vista, mirador, vistas, vista panorámica, perspectiva" @@ -6143,16 +6370,20 @@ "terms": "giro en U, cambio de sentido, vuelta en U, no girar en U, prohibido girar en U" }, "type/restriction/only_left_turn": { - "name": "Sólo girar a la izquierda", - "terms": "giro, izquierda" + "name": "Solo giro a la izquierda", + "terms": "Solo giro a la izquierda, giro, izquierda" }, "type/restriction/only_right_turn": { - "name": "Sólo girar a la derecha", - "terms": "giro, derecha" + "name": "Solo giro a la derecha", + "terms": "Solo giro a la derecha, giro, derecha" }, "type/restriction/only_straight_on": { - "name": "No girar", - "terms": "prohibición, giro, no girar, prohibido girar" + "name": "Solo seguir derecho", + "terms": "Solo seguir derecho, derecho, recto" + }, + "type/restriction/only_u_turn": { + "name": "Solo giro en U", + "terms": "Solo giro en U, giro, U, vuelta en U, cambio de sentido" }, "type/route": { "name": "Ruta", @@ -6315,7 +6546,7 @@ "attribution": { "text": "Términos y comentarios" }, - "description": "Límites de imágenes y fechas de captura. Las etiquetas aparecen en el nivel de acercamiento 14 y superior.", + "description": "Límites de imágenes y fechas de captura. Las etiquetas aparecen en el nivel de zoom 13 y superior.", "name": "Imágenes antiguas DigitalGlobe Premium" }, "DigitalGlobe-Standard": { @@ -6329,7 +6560,7 @@ "attribution": { "text": "Términos y comentarios" }, - "description": "Límites de imágenes y fechas de captura. Las etiquetas aparecen en el nivel de acercamiento 14 y superior.", + "description": "Límites de imágenes y fechas de captura. Las etiquetas aparecen en el nivel de zoom 13 y superior.", "name": "Imágenes antiguas DigitalGlobe Standard" }, "EsriWorldImagery": { @@ -6413,6 +6644,10 @@ "description": "Amarillo = Datos del mapa de dominio público desde el US Census. Rojo = Datos no encontrados en OpenStreetMap", "name": "Carreteras TIGER 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "Carretera: marco verde = sin clasificar. marco marrón = pista. Superficie: grava = relleno marrón claro, asfalto = negro, pavimentado = gris, tierra = blanco, hormigón = azul, hierba/pasto = verde. Estacional = barras blancas", + "name": "Superposición de carreteras forestales de los EE.UU." + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, colaboradores de OpenStreetMap, CC by-SA 3.0" @@ -6447,7 +6682,7 @@ "attribution": { "text": "basemap.at" }, - "description": "Mapa base de Austria, basado en datos del gobierno.", + "description": "Mapa base de Austria, basado en datos gubernamentales.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6509,7 +6744,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Teselas del mapa por Stamen Design, bajo CC BY 3.0" + "text": "Teselas del mapa de Stamen Design, bajo CC BY 3.0. Datos de OpenStreetMap, bajo ODbL" }, "name": "Stamen Terrain" }, @@ -6525,6 +6760,519 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "cape-coast-youthmappers": { + "name": "Universidad de Cape Coast YouthMappers", + "description": "Síguenos en Twitter en {url}", + "extendedDescription": "Este es el identificador oficial del capítulo de Jóvenes Cartografistas de la Universidad de Cape Coast, Ghana. Nos encantan los mapas, los datos abiertos y ayudar a los vulnerables." + }, + "osm-gh-facebook": { + "name": "OpenStreetMap Ghana en Facebook", + "description": "Grupo de Facebook para personas interesadas en OpenStreetMap.", + "extendedDescription": "Mapeadores en la comunidad de Ghana, promocionando los proyectos OpenStreetMap y Humanitarian OpenStreetMap Team (HOT) en Ghana. Únete a nosotros." + }, + "osm-gh-twitter": { + "name": "OpenStreetMap Ghana en Twitter", + "description": "Síguenos en Twitter en {url}" + }, + "talk-gh": { + "name": "Lista de correo Talk-gh", + "description": "Talk-gh es la lista de correo oficial de la comunidad OSM de Ghana." + }, + "osm-mg-facebook": { + "name": "Grupo de Facebook OpenStreetMap Madagascar", + "description": "Grupo de Facebook Malgache para gente interesada en OpenStreetMap" + }, + "talk-mg": { + "name": "Lista de correo Talk-mg", + "description": "Lugar para los colaboradores, comunidades y usuarios de OpenStreetMap en Madagascar para compartir y debatir." + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap Bangladesh", + "description": "Mejore OpenStreetMap en Bangladesh", + "extendedDescription": "¿Mapeando en Bangladesh? ¿Tiene alguna pregunta, desea conectarse con la comunidad aquí? Únete a nosotros en {Url}. ¡Todos son bienvenidos!" + }, + "OSM-India-facebook": { + "name": "OpenStreetMap India - Mapeo participativo del barrio", + "description": "Mejore OpenStreetMap en India", + "extendedDescription": "¿Mapeando en India? ¿Tienes alguna pregunta, deseas conectarte con la comunidad aquí? Únete a nosotros en {url}. ¡Todos son bienvenidos!", + "events": { + "sotmasia2018": { + "name": "State of the Map Asia 2018", + "description": "Únase al evento regional OpenStreetMap 2018 en el State of the Map Asia en India", + "where": "Instituto Indio de Administración, Bangalore, India" + } + } + }, + "OSM-india-mailinglist": { + "name": "Lista de correo de OpenStreetMap India", + "description": "Talk-in es la lista de correo oficial para la comunidad India" + }, + "OSM-india-twitter": { + "name": "Twitter de OpenStreetMap India", + "description": "Estamos a solo un tweet: {url}" + }, + "OSM-India-Puducherry-Facebook": { + "name": "Free Software Hardware Movement - Facebook", + "description": "Página de Facebook de FSHM para conocer eventos y actividades de la comunidad", + "extendedDescription": "FSHM organiza eventos relacionados con software/hardware, tecnología, activismo y OpenStreetMap. Su página FB es la mejor manera de mantenerse en contacto con sus eventos." + }, + "OSM-India-Puducherry-Matrix": { + "name": "Free Software Hardware Movement - Matrix", + "description": "FSHM Riot group para discutir, compartir y actualizar actividades de mapeo, eventos en Puducherry y sus alrededores", + "extendedDescription": "Los miembros de la comunidad FSHM comparten sus actualizaciones / experiencias de mapeo de OSM a través del grupo Riot.im, este grupo también se usa para discutir cosas relacionadas con software / hardware, tecnología y activismo gratuitos." + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap Indonesia", + "description": "Mejore OpenStreetMap en Indonesia", + "extendedDescription": "¿Mapeando en Indonesia? ¿Tiene alguna pregunta, desea conectarse con la comunidad aquí? Únete a nosotros en {Url}. ¡Todos son bienvenidos!" + }, + "OSM-japan-facebook": { + "name": "Comunidad OpenStreetMap Japón", + "description": "Mapeadores y usuarios de OpenStreetMap en Japón" + }, + "OSM-japan-mailinglist": { + "name": "Lista de correo de OpenStreetMap Japón", + "description": "Talk-ja es una lista de correo oficial para la Comunidad Japonesa" + }, + "OSM-japan-twitter": { + "name": "Twitter de OpenStreetMap Japón", + "description": "Hashtag en Twitter: {url}" + }, + "OSM-MY-forum": { + "name": "Foro de OpenStreetMap Malasia", + "description": "Foro oficial de OpenStreetMap Malaysia" + }, + "OSM-MY-matrix": { + "name": "Canal Riot de OpenStreetMap Malaysia", + "description": "¡Todos los mapeadores son bienvenidos! Regístrese en {signupUrl}" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap Mongolia", + "description": "Mejore OpenStreetMap en Mongolia", + "extendedDescription": "¿Mapeando en Mongolia? ¿Tiene alguna pregunta, desea conectarse con la comunidad aquí? Únete a nosotros en {Url}. ¡Todos son bienvenidos!" + }, + "OSM-MMR-facebook": { + "name": "OpenStreetMap Birmania", + "description": "Mejora OpenStreetMap en Birmania", + "extendedDescription": "¿Mapeando en Birmania? ¿Tienes preguntas, quieres contactar con la comunidad local? Únete a nosotros en {Url}. ¡Todos son bienvenidos!" + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap Nepal", + "description": "Mejore OpenStreetMap en Nepal", + "extendedDescription": "¿Mapeando en Nepal? ¿Tiene alguna pregunta, desea conectarse con la comunidad aquí? Únete a nosotros en {Url}. ¡Todos son bienvenidos!" + }, + "OSM-PH-facebook": { + "name": "Grupo de Facebook OpenStreetMap PH", + "description": "Bienvenido a OpenStreetMap Filipinas, donde animamos a los Filipinos a contribuir al proyecto OpenStreetMap" + }, + "OSM-PH-mailinglist": { + "name": "Lista de correo Talk-ph", + "description": "Una lista de correo para discutir OpenStreetMap en Filipinas" + }, + "OSM-PH-slack": { + "name": "Slack de OpenStreetMap PH", + "description": "¡Todos son bienvenidos! Regístrate en {signupUrl}" + }, + "OSM-PH-telegram": { + "name": "Telegram de OpenStreetMap PH", + "description": "Comunidad local no oficial de contribuidores y amigos de OpenStreetMap en Filipinas" + }, + "OSM-RU-forum": { + "name": "Foro OpenStreetMap RU", + "description": "Foro web de OpenStreetMap Rusia" + }, + "OSM-RU-telegram": { + "name": "Telegram de OpenStreetMap RU", + "description": "Chat de telegram de OpenStreetMap Rusia" + }, + "OSM-LKA-facebook": { + "name": "OpenStreetMap Sri Lanka", + "description": "Mejore OpenStreetMap en Sri Lanka", + "extendedDescription": "¿Mapeando en Sri Lanka? ¿Tiene alguna pregunta, desea conectarse con la comunidad? Únase a nosotros en {Url}. ¡Todos son bienvenidos!" + }, + "OSM-TW-facebook": { + "name": "Comunidad de OpenStreetMap Taiwan", + "description": "Grupo de Facebook para usuarios y mapeadores de OpenStreetMap para discutir asuntos sobre Taiwán." + }, + "OSM-TW-mailinglist": { + "name": "Lista de correo de OpenStreetMap Taiwán", + "description": "Talk-tw es la lista de correo oficial para que las Comunidades discutan asuntos sobre Taiwán" + }, + "at-mailinglist": { + "name": "Lista de correo Talk-at", + "description": "Talk-at es la lista de correo oficial de la comunidad austríaca de OSM" + }, + "at-twitter": { + "name": "Twitter OpenStreetMap Austria", + "description": "OpenStreetMap Austria en Twitter: {url}" + }, + "osm-at": { + "name": "OpenStreetMap Austria", + "description": "La plataforma de información sobre OpenStreetMap en Austria" + }, + "be-facebook": { + "name": "Comunidad OpenStreetMap BE", + "description": "Facebook de Mapeadores y OpenStreetMap en Bélgica" + }, + "be-forum": { + "name": "Foro de OpenStreetMap BE", + "description": "Foro web de OpenStreetMap Bélgica" + }, + "be-mailinglist": { + "name": "Lista de correo de Talk-be", + "description": "Talk-be es la lista de correo oficial de la comunidad belga de OSM" + }, + "be-matrix": { + "name": "Canal de Riot de OpenStreetMap BE", + "description": "¡Todos los mapeadores son bienvenidos! Regístrese en {signupUrl}", + "extendedDescription": "Existen múltiples canales, de principiantes a canales temáticos, landuse y dev talk" + }, + "be-meetup": { + "name": "Grupo de encuentro OpenStreetMap Bélgica", + "description": "Encuentros de IRL para cualquiera que esté interesado en OpenStreetMap.", + "extendedDescription": "Las reuniones presenciales son geniales para conocer a otros mapeadores, hacerles preguntas y aprender mucho. ¡Son especialmente bienvenidos los nuevos contribuidores!" + }, + "be-twitter": { + "name": "Twitter OpenStreetMap Bélgica", + "description": "OpenStreetMap Bélgica en Twitter {url}" + }, + "byosm": { + "name": "OpenStreetMap Belarús", + "description": "Grupo de telegram de OpenStreetMap Belarús" + }, + "talk-cz-mailinglist": { + "name": "Lista de correo Talk-cz", + "description": "Talk-cz es la lista de correo oficial para la comunidad checa" + }, + "de-forum": { + "name": "Foro de OpenStreetMap DE", + "description": "Foro web de OpenStreetMap Alemania" + }, + "de-irc": { + "name": "IRC de OpenStreetMap Alemania", + "description": "Únase a #osm-de en irc.oftc.net (puerto 6667)" + }, + "de-mailinglist": { + "name": "Lista de correo Talk-de", + "description": "Talk-de es la lista de correo oficial para la comunidad OSM alemana" + }, + "osm-de": { + "name": "OpenStreetMap Alemania", + "description": "La plataforma de información sobre OpenStreetMap en Alemania" + }, + "OSM-ES-mailinglist": { + "name": "Lista de correo Talk-es", + "description": "Una lista de correo para discutir OpenStreetMap en España" + }, + "OSM-ES-telegram": { + "name": "@OSMes en Telegram", + "description": "Grupo de Telegram de OpenStreetMap España" + }, + "fr-facebook": { + "name": "Página de Facebook de OpenStreetMap Francia", + "description": "Página de Facebook de OpenStreetMap Francia" + }, + "fr-forum": { + "name": "Foro web de OpenStreetMap Francia", + "description": "Foro web de OpenStreetMap Francia" + }, + "fr-irc": { + "name": "OpenStreetMap Francia en IRC", + "description": "Únase a #osm-fr en irc.oftc.net (puerto 6667)" + }, + "fr-mailinglist": { + "name": "Lista de correo Talk-fr", + "description": "Lista de correo Talk-fr" + }, + "fr-twitter": { + "name": "OpenStreetMap Francia en Twitter", + "description": "OpenStreetMap Francia en Twitter: {url}" + }, + "OSM-Rome-meetup": { + "name": "Encuentro de mapeadores de Roma", + "description": "Mejore OpenStreetMap en el área de Roma", + "extendedDescription": "Nuestro objetivo es ser un recurso para que las personas discutan y compartan conocimientos sobre la utilización de conjuntos de datos geográficos libres, especialmente OpenStreetMap, y software geoespacial abierto que gestiona, edita y muestra datos geográficos, y aboga por su uso en Lazio." + }, + "talk-it-lazio": { + "name": "OpenStreetMap IT Lazio", + "description": "¡Todos son bienvenidos! Regístrese en {signupUrl}", + "extendedDescription": "Lista de correo para el área de Roma y Lazio." + }, + "no-forum": { + "name": "Foro web de OpenStreetMap Noruega", + "description": "Foro web de OpenStreetMap Noruega" + }, + "no-irc": { + "name": "OpenStreetMap Norway en IRC", + "description": "Sala de chat para mapeadores y usuarios de OpenStreetMap, desarrolladores y entusiastas en Noruega" + }, + "no-mailinglist": { + "name": "Lista de correo de OpenStreetMap Noruega", + "description": "Lista de correo para mapeadores y usuarios de OpenStreetMap, desarrolladores y entusiastas en Noruega" + }, + "OSM-PL-facebook-group": { + "name": "Grupo de Facebook de OpenStreetMap Polonia", + "description": "Grupo para mapeadores y usuarios de OpenStreetMap en Polonia" + }, + "OSM-PL-forum": { + "name": "Foro de OpenStreetMap Polonia", + "description": "Foro de la comunidad polaca OpenStreetMap" + }, + "osm-se": { + "name": "OpenStreetMap.se" + }, + "se-facebook": { + "name": "Facebook de OpenStreetMap Suecia", + "description": "OpenStreetMap Suecia en Facebook" + }, + "se-irc": { + "name": "IRC de OpenStreetMap Suecia", + "description": "Únase a #osm.se en irc.oftc.net (puerto 6667)" + }, + "se-mailinglist": { + "name": "Lista de correo Talk-se", + "description": "Una lista de correo para discutir OpenStreetMap en Suecia" + }, + "se-twitter": { + "name": "OpenStreetMap Suecia en Twitter", + "description": "Síguenos en Twitter en {url}" + }, + "OSM-CA-Slack": { + "name": "Slack de OSM-CA", + "description": "¡Todos son bienvenidos! Regístrese en {signupUrl}." + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap Vancouver", + "description": "Mapeadores y usuarios de OpenStreetMap en el área de Vancouver, BC" + }, + "Bay-Area-OpenStreetMappers": { + "name": "OpenStreetMappers del área de la bahía", + "description": "Mejore OpenStreetMap en el área de la bahía", + "extendedDescription": "En este grupo se trata de hacer crecer la comunidad OpenStreetMap aquí en el Área de la Bahía. Nuestros eventos están abiertos a todos, desde entusiastas del código abierto, ciclistas, profesionales SIG, geocachers y más. Cualquier persona y todos los que estén interesados en mapas, creación de mapas y datos de mapa gratuitos pueden unirse a nuestro grupo y asistir a nuestros eventos." + }, + "Central-Pennsylvania-OSM": { + "name": "OSM Pensilvania Central", + "description": "Comunidad de mapeo en línea con sede en State College, PA" + }, + "Code-for-San-Jose-Slack": { + "name": "Slack de Code for San Jose", + "description": "¡Todos son bienvenidos! Regístrese en {signupUrl}, luego únase al canal #osm channel." + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM", + "description": "El grupo de usuarios de OpenStreetMap para Dallas-Fort Worth", + "extendedDescription": "Dallas, Fort Worth y todas las ciudades en el medio están repletas de gente creativa y conocedora de la tecnología. La visión de este grupo de usuarios es encontrar nuevas formas de utilizar el increíble recurso de OSM." + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "Encuentro para entusiastas del mapa en el área de Filadelfia", + "extendedDescription": "GeoPhilly une desarrolladores, geógrafos, geeks de datos, entusiastas del código abierto, hackers cívicos y adictos al mapa en nuestro amor compartido por los mapas y las historias que cuentan. Si usa mapas como parte de su trabajo o simplemente quiere aprender más, este es lugar de encuentro para usted. Nuestros eventos apuntan a ser abiertos, amigables, educativos y sociales, y abarcan desde happy hours hasta lightning talk -charla relámpago- o incluso talleres. ¡Ven a crear una comunidad geoespacial diversa e inspiradora en Filadelfia con nosotros!" + }, + "MapMinnesota": { + "name": "MapMinnesota", + "description": "Mapeadores y entusiastas de OpenStreetMap en el área de Twin Cities", + "extendedDescription": "¡Conecta a los entusiastas de OpenStreetMap en Minnesota y Twin Cities!" + }, + "Mapping-DC-meetup": { + "name": "Mapeando DC", + "description": "Mejore OpenStreetMap en el área de DC", + "extendedDescription": "Somos un grupo de cartógrafos voluntarios que buscan mejorar OpenStreetMap en el área de DC. También pretendemos enseñar a otros sobre el ecosistema OSM, análisis de datos, cartografía y SIG. Nos reunimos cada dos meses para enfocarnos en un área de nuestra ciudad." + }, + "Maptime-ME-meetup": { + "name": "MaptimeME", + "description": "Mapeadores y usuarios de OpenStreetMap, en Portland, ME", + "extendedDescription": "Maptime es, literalmente, el momento de hacer mapas. Nuestra misión es abrir las puertas de la posibilidad cartográfica a cualquier persona interesada creando un tiempo y espacio para el aprendizaje colaborativo, la exploración y la creación de mapas utilizando herramientas y tecnologías de mapeo." + }, + "OpenCleveland-meetup": { + "name": "Open Cleveland", + "description": "Mejore OpenStreetMap en el área de Cleveland", + "extendedDescription": "Open Geo Cleveland pretende ser un recurso para que las personas discutan y compartan conocimientos sobre el uso de conjuntos de datos geográficos libres, especialmente OpenStreetMap, y software geoespacial abierto que gestiona, edita y muestra datos geográficos, y aboga por su uso en el noreste de Ohio. También somos un capítulo maptime =)" + }, + "OSM-Boston": { + "name": "OpenStreetMap Boston", + "description": "Editores y usuarios de OpenStreetMap en el área de Boston", + "extendedDescription": "OpenStreetMap es el mapa del mundo gratuito y abierto al estilo wiki, con cientos de miles de contribuciones diarias de personas como usted. ¡Editar el mapa es simple y divertido! ¡Únete a nosotros tanto en el interior como en el exterior en nuestro esfuerzo por crear el mejor mapa del área de Boston y el resto del mundo!" + }, + "OSM-Central-Salish-Sea": { + "name": "OpenStreetMap Central Salish Sea", + "description": "Mapeadores y usuarios de OpenStreetMap alrededor de Mount Vernon, WA", + "extendedDescription": "OpenStreetMap es un mapa del mundo hecho por personas como usted. Es un mapa que creas, que se regala gratis como wikipedia. Visite osm.org para obtener más información. ¡Nos reunimos todo el tiempo para hablar de mapas, hacer mapas y divertirnos!" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "El grupo de usuarios de OpenStreetMap para Chattanooga" + }, + "OSM-Colorado": { + "name": "OpenStreetMap Colorado", + "description": "Editores y usuarios de OpenStreetMap en el Estado de Colorado, EE.UU.", + "extendedDescription": "OpenStreetMap (OSM) Colorado es una colaboración local de personas interesadas en contribuir con sus esfuerzos para crear mapas gratuitos. Alentamos a todos nuestros cartógrafos a organizar o sugerir eventos de mapeo en todo el estado. Los encuentros pueden ser simples reuniones sociales, entrenamiento básico a avanzado de OSM o actividades de mapeo comunitario." + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC", + "description": "Mapeadores y usuarios de OpenStreetMap, desarrolladores y entusiastas en el área Metropolitana de Nueva York" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland", + "description": "Mapeadores y usuarios de OpenStreetMap en el área de Portland", + "extendedDescription": "OpenStreetMap (OSM) es un mapa del mundo creado por personas como tú. Es un mapa que tú creas, que se regala gratis como wikipedia. Visita osm.org para obtener más información, ¡y únete a nosotros en un encuentro para hablar de mapas, contribuir con OSM y divertirse!" + }, + "OSM-Seattle": { + "name": "OpenStreetMap Seattle", + "description": "Editores y usuarios de OpenStreetMap en el área de Seattle" + }, + "OSM-SoCal": { + "name": "OpenStreetMap Southern California", + "description": "¡Divirtámonos, contribuyamos con algo a Los Ángeles y aprendamos a mapear!", + "extendedDescription": "OpenStreetMap (OSM) Southern California es para todos aquellos interesados ​​en mapear para trabajar juntos con OpenStreetMap. OpenStreetMap, la Wikipedia de mapas, es un mapa de código abierto y gratuito creado por más de 1,000,000 de voluntarios en todo el mundo. Todos son bienvenidos. Si no conoce OpenStreetMap, le enseñaremos. Si tiene una idea para un proyecto de mapeo o incluso una excursión que el grupo pueda hacer, ¡genial!" + }, + "OSM-South-Bay": { + "name": "OSM South Bay", + "description": "Noches de mapeo organizadas por Code for San Jose", + "extendedDescription": "Code for San Jose, la brigada local del Code for America, organiza noches de mapeo mensuales los jueves por la noche en el centro de San José. Conozca a otros mapeadores de South Bay, ayude con proyectos de mapeo locales y escuche sobre otros proyectos de tecnología cívica. No se requieren habilidades de programación ni GIS." + }, + "OSM-Tampa-Bay": { + "name": "OpenStreetMap Tampa Bay", + "description": "Editores y usuarios de OpenStreetMap en el área de Tampa Bay", + "extendedDescription": "El grupo OSM de residentes locales de Tampa Bay para reunirnos y construir el mapa definitivo de Tampa Bay con OpenStreetMap, el mapa libre y editable del mundo. Si te van los mapas, el código abierto, GPS, senderismo, ciclismo, etcetera, te encantará trabajar con OpenStreetMap -- ¡así que únete! Nos juntaremos y haremos mapas y hablaremos de nuevos temas una vez al mes o así." + }, + "OSM-US-Slack": { + "name": "Slack de OpenStreetMap EE.UU.", + "description": "¡Todos son bienvenidos! Regístrate en {signupUrl}" + }, + "OSM-US": { + "name": "OpenStreetMap EE.UU.", + "description": "Ayudamos a crecer y mejorar OpenStreetMap en los Estados Unidos.", + "extendedDescription": "Apoyamos OpenStreetMap celebrando conferencias anuales, proporcionando recursos comunitarios, creando alianzas y dando a conocer. Únase a OpenStreetMap EE.UU. aquí: {signupUrl}" + }, + "OSM-Utah": { + "name": "OpenStreetMap Utah", + "description": "Editores y usuarios de OpenStreetMap en el área de Salt Lake City", + "extendedDescription": "Las actividades pueden incluir cosas como talleres para Aprender a Hacer Mapas, actividades de mapeo y recolección de datos al aire libre. Los eventos tendrán lugar en el área de SLC, al menos inicialmente. Estamos buscando mapeadores experimentados, así como personas nuevas en OSM. ¡Únase y mapeemos juntos!" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap Wyoming", + "description": "Editores y usuarios de OpenStreetMap en el área de Wyoming", + "extendedDescription": "OpenStreetMap (OSM) Wyoming es una colaboración local de personas interesadas en contribuir con sus esfuerzos para crear mapas gratuitos. Alentamos a todos nuestros cartógrafos a organizar o sugerir eventos de mapeo en todo el estado. Las actividades de reunión pueden ser simples reuniones sociales, entrenamiento básico a avanzado de OSM o fiestas de mapeo de la comunidad." + }, + "PHXGeo-meetup": { + "name": "Meetup de PHXGeo", + "description": "Editores y usuarios de OpenStreetMap en el área de Phoenix, AZ", + "extendedDescription": "Este es un grupo de encuentro para aquellos en el área de Phoenix que les gustan los mapas, GIS, OpenStreetMap, cartografía y cualquier cosa similar." + }, + "PHXGeo-twitter": { + "name": "Twitter de PHXGeo", + "description": "Síguenos en Twitter en {url}" + }, + "Western-Slope-facebook": { + "name": "Facebook de Western Slope OSM", + "description": "Editores y usuarios de OpenStreetMap en Grand Junction, CO" + }, + "Western-Slope-meetup": { + "name": "Meetup de Western Slope OSM", + "description": "Editores y usuarios de OpenStreetMap en Grand Junction, CO", + "extendedDescription": "El objetivo de este grupo es presentar OpenStreetMap a la comunidad, desarrollar una comunidad de mapeadores, crear datos geográficos lo más increíble posible utilizando cualquier método que podamos y, finalmente, crear una estrategia con el fin de obtener esta información de nuestra comunidad. ¡Imagine la señalización precisa del sendero! ¡Imagine un mayor desarrollo de las ciclovías! ¡Imagina lo que quieras, esa es la gracia de OpenStreetMap!" + }, + "Maptime-Australia-Slack": { + "name": "Slack de Maptime Australia", + "description": "Regístrate en {signupUrl}" + }, + "talk-au": { + "name": "Lista de correo Talk-au", + "description": "Lugar para que los mapeadores australianos chateen" + }, + "OSM-AR-facebook": { + "name": "Facebook de OpenStreetMap Argentina", + "description": "Unite a la comunidad de OpenStreetMap Argentina en Facebook", + "extendedDescription": "Novedades de la comunidad local" + }, + "OSM-AR-forum": { + "name": "Foro web de OpenStreetMap Argentina", + "description": "Unite al foro web de OpenStreetMap Argentina", + "extendedDescription": "Ideal para discusiones largas o importantes. Tiempo de respuesta lento. " + }, + "OSM-AR-irc": { + "name": "IRC de OpenStreetMap Argentina", + "description": "Unite a #osm-ar en irc.oftc.net (puerto 6667)", + "extendedDescription": "Puede que encuentres al usuario más geek de la comunidad." + }, + "OSM-AR-mailinglist": { + "name": "Lista de correo Talk-ar", + "description": "Lista de correo electrónico histórica. Casi sin uso hoy en día." + }, + "OSM-AR-telegram": { + "name": "Telegram de OpenStreetMap Argentina", + "description": "Unite a la comunidad de OpenStreetMap Argentina en Telegram", + "extendedDescription": "El canal más activo de la comunidad, ideal para charlar y obtener respuestas a tus preguntas al instante. ¡Todos son bienvenidos!" + }, + "OSM-AR-twitter": { + "name": "Twitter de OpenStreetMap Argentina", + "description": "Seguinos en Twitter en {url}", + "extendedDescription": "Novedades de la comunidad local y OpenStreetMap en general. " + }, + "Bahia-telegram": { + "name": "Grupo de Telegram de OpenStreetMap Bahia", + "description": "Únete a la comunidad de OpenStreetMap Bahia en Telegram", + "extendedDescription": "Únase a la comunidad para obtener más información sobre OpenStreetMap, hacer preguntas o participar en nuestras reuniones. ¡Todos son bienvenidos!" + }, + "OSM-br-mailinglist": { + "name": "Lista de correo Talk-br", + "description": "Una lista de correo para discutir OpenStreetMap en Brasil" + }, + "OSM-br-telegram": { + "name": "Telegram de OpenStreetMap Brasil", + "description": "Únase a la comunidad de OpenStreetMap Brasil en Telegram", + "extendedDescription": "Únase a la comunidad para obtener más información sobre OpenStreetMap, hacer preguntas o participar en nuestras reuniones. ¡Todos son bienvenidos!" + }, + "OSM-br-twitter": { + "name": "Twitter de OpenStreetMap Brasil", + "description": "Síguenos en Twitter en {url}" + }, + "OSM-CL-facebook": { + "name": "Facebook de OpenStreetMap Chile", + "description": "Únase a la comunidad de OpenStreetMap Chile en Facebook", + "extendedDescription": "Únase a la comunidad para obtener más información sobre OpenStreetMap, hacer preguntas o participar en nuestras reuniones. ¡Todos son bienvenidos!" + }, + "OSM-CL-mailinglist": { + "name": "Lista de correo Talk-br", + "description": "Una lista de correo para discutir OpenStreetMap en Chile" + }, + "OSM-CL-telegram": { + "name": "Telegram de OpenStreetMap Chile", + "description": "Únase a la comunidad de OpenStreetMap Chile en Telegram", + "extendedDescription": "Únase a la comunidad para obtener más información sobre OpenStreetMap, hacer preguntas o participar en nuestras reuniones. ¡Todos son bienvenidos!" + }, + "OSM-CL-twitter": { + "name": "Twitter de OpenStreetMap Chile", + "description": "Síguenos en Twitter en {url}" + }, + "Maptime-Bogota": { + "name": "Maptime Bogotá", + "description": "Somos un grupo de mapeadores interesados ​​en mapear en OpenStreetMap alrededor de Bogotá.", + "extendedDescription": "Aprenda a recopilar datos en el campo y digitalice en OpenStreetMap. ¡No es necesario tener conocimiento previo! Solo necesitas el deseo de participar, aprender y divertirte." + }, + "OSM-CO-facebook": { + "name": "Facebook de OpenStreetMap Colombia", + "description": "Únase a la comunidad de OpenStreetMap Colombia en Facebook", + "extendedDescription": "Únase a la comunidad para obtener más información sobre OpenStreetMap. ¡Todos son bienvenidos!" + }, + "OSM-CO-mailinglist": { + "name": "Lista de correo Talk-co", + "description": "Una lista de correo para discutir OpenStreetMap en Colombia" + }, + "OSM-CO-twitter": { + "name": "Twitter de OpenStreetMap Colombia", + "description": "Síguenos en Twitter en {url}" + }, + "OSM-CO": { + "name": "OpenStreetMap Colombia", + "description": "Noticias de la comunidad OpenStreetMap Colombia y la Fundación OSMCo" + }, + "OSM-Reddit": { + "name": "OpenStreetMap en Reddit", + "description": "/r/openstreetmap/ es un gran lugar para aprender más sobre OpenStreetMap. ¡Pregúntenos cualquier cosa!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/et.json b/vendor/assets/iD/iD/locales/et.json index a737a8c0b..a1c778704 100644 --- a/vendor/assets/iD/iD/locales/et.json +++ b/vendor/assets/iD/iD/locales/et.json @@ -530,13 +530,7 @@ } }, "success": { - "edited_osm": "Sa täiendasid OSM-i!", "just_edited": "Täiendasid just OpenStreetMapi!", - "view_on_osm": "Vaata OSM-is", - "facebook": "Jaga Facebookis", - "twitter": "Jaga Twitteris", - "google": "Jaga Google+-is", - "help_html": "Sinu muudatused peaksid ilmuma kihil \"Standard\" mõne minuti jooksul. Teiste kihtide ja teatud objektidega võib kauem minna.", "help_link_text": "Üksikasjad" }, "confirm": { @@ -894,6 +888,9 @@ "cycleway:right": "Paremas servas" } }, + "dance/style": { + "label": "Tantsustiilid" + }, "date": { "label": "Kuupäev" }, @@ -903,6 +900,46 @@ "denomination": { "label": "Usulahk" }, + "direction": { + "label": "Suund (kraade päripäeva)", + "placeholder": "45, 90, 180, 270" + }, + "direction_cardinal": { + "label": "Suund", + "options": { + "E": "Ida", + "ENE": "Idakirre", + "ESE": "Idakagu", + "N": "Põhi", + "NE": "Kirre", + "NNE": "Põhjakirre", + "NNW": "Põhjaloe", + "NW": "Loe", + "S": "Lõuna", + "SE": "Kagu", + "SSE": "Lõunakagu", + "SSW": "Lõunaedel", + "SW": "Edel", + "W": "Lääs", + "WNW": "Lääneloe", + "WSW": "Lääneedel" + } + }, + "direction_clock": { + "label": "Suund", + "options": { + "anticlockwise": "Vastupäeva", + "clockwise": "Päripäeva" + } + }, + "direction_vertex": { + "label": "Suund", + "options": { + "backward": "Tagasi", + "both": "Mõlemad / Kõik", + "forward": "Edasi" + } + }, "dock": { "label": "Tüüp" }, @@ -963,6 +1000,9 @@ "healthcare/speciality": { "label": "Erialad" }, + "horse_riding": { + "label": "Ratsutamine" + }, "iata": { "label": "IATA" }, @@ -1009,6 +1049,10 @@ "maxspeed": { "label": "Kiiruspiirang" }, + "maxspeed/advisory": { + "label": "Soovitatav suurim kiirus", + "placeholder": "30, 50, 70..." + }, "name": { "label": "Nimi", "placeholder": "Üldlevinud nimi (kui on)" @@ -1061,7 +1105,9 @@ "oneway": { "label": "Ühesuunaline", "options": { + "alternating": "Vahelduv", "no": "Ei", + "reversible": "Ümberpööratav", "undefined": "Eeldatavasti mitte", "yes": "Jah" } @@ -1069,7 +1115,9 @@ "oneway_yes": { "label": "Ühesuunaline", "options": { + "alternating": "Vahelduv", "no": "Ei", + "reversible": "Ümberpööratav", "undefined": "Eeldatavasti Jah", "yes": "Jah" } @@ -1111,9 +1159,20 @@ "railway": { "label": "Tüüp" }, + "railway/signal/direction": { + "label": "Suund", + "options": { + "backward": "Tagasi", + "both": "Mõlemad / Kõik", + "forward": "Edasi" + } + }, "recycling_accepts": { "label": "Võtab vastu" }, + "ref/isil": { + "label": "ISIL-kood" + }, "relation": { "label": "Tüüp" }, @@ -1260,9 +1319,20 @@ "traffic_signals": { "label": "Tüüp" }, + "traffic_signals/direction": { + "label": "Suund", + "options": { + "backward": "Tagasi", + "both": "Mõlemad / Kõik", + "forward": "Edasi" + } + }, "trees": { "label": "Puud" }, + "usage_rail": { + "label": "Kasutusostarve" + }, "visibility": { "label": "Nähtavus" }, @@ -1288,6 +1358,9 @@ "wheelchair": { "label": "Pääs ratastooliga" }, + "wholesale": { + "label": "Hulgikaubandus" + }, "width": { "label": "Laius (meetrites)" }, @@ -1322,6 +1395,9 @@ "name": "Lennuterminal", "terms": "terminal,lennujaam" }, + "allotments/plot": { + "name": "Ühisaia krunt" + }, "amenity": { "name": "Hüve" }, @@ -1499,6 +1575,9 @@ "name": "Turg", "terms": "Turuplats" }, + "amenity/monastery": { + "name": "Kloostriala" + }, "amenity/motorcycle_parking": { "name": "Mootorratta parkla" }, @@ -1520,7 +1599,8 @@ "terms": "parkla" }, "amenity/pharmacy": { - "name": "Apteek" + "name": "Apteek", + "terms": "ravimid" }, "amenity/place_of_worship": { "name": "Pühakoda", @@ -1590,6 +1670,9 @@ "name": "Varjualune", "terms": "ulualune,räästaalune,peavari" }, + "amenity/smoking_area": { + "name": "Suitsetamise koht" + }, "amenity/social_facility": { "name": "Sotsiaalkeskus", "terms": "Sotsiaalamet" @@ -1706,6 +1789,10 @@ "barrier/hedge": { "name": "Hekk" }, + "barrier/kerb": { + "name": "Kiviääris", + "terms": "ääris" + }, "barrier/kissing_gate": { "name": "Karjavärav" }, @@ -1741,6 +1828,10 @@ "name": "Küün", "terms": "Tall, laut" }, + "building/bungalow": { + "name": "Bangalo", + "terms": "bungalo" + }, "building/bunker": { "name": "Punker" }, @@ -1757,6 +1848,10 @@ "building/church": { "name": "Kirikuhoone" }, + "building/civic": { + "name": "Kultuurihoone", + "terms": "linna,keskus,seltsimaja,rahvamaja" + }, "building/college": { "name": "Kolledžihoone" }, @@ -1775,6 +1870,14 @@ "building/entrance": { "name": "Sissepääs" }, + "building/farm": { + "name": "Maamaja", + "terms": "talumaja,elumaja,elamu,maja,rehi*" + }, + "building/farm_auxiliary": { + "name": "Taluhoone", + "terms": "hoone,ait,abihoone,laut,küün" + }, "building/garage": { "name": "Garaaž", "terms": "Garaaz" @@ -1819,6 +1922,10 @@ "building/roof": { "name": "Katus" }, + "building/ruins": { + "name": "Hoone varemed", + "terms": "varemed,purunenud,maha jäätud" + }, "building/school": { "name": "Koolihoone", "terms": "õppehoone,algkool,keskkool" @@ -1834,16 +1941,26 @@ "name": "Tall", "terms": "Hobusetall" }, + "building/stadium": { + "name": "Staadionihoone" + }, "building/static_caravan": { "name": "Paikne haagismaja", "terms": "Haagiselamu,haagismaja,teisaldatav maja" }, + "building/temple": { + "name": "Templihoone", + "terms": "tempel" + }, "building/terrace": { "name": "Terrassmaja" }, "building/train_station": { "name": "Raudteejaam" }, + "building/transportation": { + "name": "Transpordihoone" + }, "building/university": { "name": "Ülikoolihoone" }, @@ -1854,6 +1971,9 @@ "name": "Kämpingukoht", "terms": "karavaniplats,kämpinguplats,telgiplats,telgikoht" }, + "circular": { + "name": "Liiklusring" + }, "club": { "name": "Klubi" }, @@ -2012,6 +2132,10 @@ "emergency/phone": { "name": "Hädaabi telefon" }, + "emergency/water_tank": { + "name": "Tuletõrjevee mahuti", + "terms": "veevõtukoht,tuletõrjemahuti" + }, "entrance": { "name": "Sisse- ja Väljapääs" }, @@ -2059,6 +2183,10 @@ "name": "Hooldekodu", "terms": "hospiits" }, + "healthcare/laboratory": { + "name": "Meditsiiniline labor", + "terms": "labor*,verelabor*" + }, "healthcare/midwife": { "name": "Ämmaemand" }, @@ -2112,6 +2240,9 @@ "highway/motorway_link": { "name": "Kiirtee ühenduslõik" }, + "highway/passing_place": { + "name": "Möödasõidukoht" + }, "highway/path": { "name": "Rada" }, @@ -2297,6 +2428,10 @@ "landuse/forest": { "name": "Metsamaa" }, + "landuse/garages": { + "name": "Maakasutus garaažidele", + "terms": "garaažid" + }, "landuse/grass": { "name": "Muru" }, @@ -2376,6 +2511,13 @@ "leisure": { "name": "Vaba aeg" }, + "leisure/amusement_arcade": { + "name": "Videomängumasin", + "terms": "telekamäng,mängukonsool" + }, + "leisure/beach_resort": { + "name": "Rannakuurort" + }, "leisure/bowling_alley": { "name": "Boolingusaal", "terms": "bowling,keegel,keeglisaal,hobikeegel" @@ -2384,6 +2526,9 @@ "name": "Tantsusaal", "terms": "tantsuhall" }, + "leisure/dancing_school": { + "name": "Tantsukool" + }, "leisure/dog_park": { "name": "Koerapark" }, @@ -2508,6 +2653,10 @@ "name": "Stoll", "terms": "suue,kaevandus,sissepääs,horisontaalne,kaeveõõne,rõhtkaeve,koobas" }, + "man_made/antenna": { + "name": "Antenn", + "terms": "raadio,saatja,mast,side,televisiooni,edastus,levi,signaal" + }, "man_made/breakwater": { "name": "Lainemurdja", "terms": "sadamatamm,kaitsetamm,tamm" @@ -2541,6 +2690,9 @@ "man_made/observation": { "name": "Vaatlustorn" }, + "man_made/observatory": { + "name": "Observatoorium" + }, "man_made/petroleum_well": { "name": "Nafta puurkaev" }, @@ -2620,6 +2772,10 @@ "natural/heath": { "name": "Nõmm" }, + "natural/mud": { + "name": "Muda", + "terms": "märgala,soo" + }, "natural/peak": { "name": "Mäetipp", "terms": "tipp" @@ -2682,6 +2838,10 @@ "office": { "name": "Kontor" }, + "office/company": { + "name": "Ettevõtte kontor", + "terms": "kontor,firma,korporatiiv" + }, "office/government": { "name": "Valitsuse kontor" }, @@ -2815,6 +2975,10 @@ "name": "Pood", "terms": "kauplus" }, + "shop/agrarian": { + "name": "Põllumajandustarvete kauplus", + "terms": "aiatarbed,talupidamistarbed,põllumasinad,seemned,masinad" + }, "shop/alcohol": { "name": "Alkoholipood" }, @@ -2902,8 +3066,8 @@ "name": "Juustupood" }, "shop/chemist": { - "name": "Apteek", - "terms": "Ravimid" + "name": "Kodukeemia kauplus", + "terms": "puhastus*,ravimid,kemikaal*,pesuvahend*,üldpuhastus*,hügieeni*,tarbed,keemia" }, "shop/chocolate": { "name": "Å okolaadikauplus", @@ -3026,6 +3190,10 @@ "name": "Rauakauplus", "terms": "tööriistad,kinnitusvahendid" }, + "shop/health_food": { + "name": "Tervisliku toidu kauplus", + "terms": "vitamiinid,tervis,terviklikud,mahe,vegan,täistera,toidulisandid" + }, "shop/hearing_aids": { "name": "Kuulmisabipood" }, @@ -3238,6 +3406,10 @@ "shop/weapons": { "name": "Relvapood" }, + "shop/wholesale": { + "name": "Hulgikauplus", + "terms": "hulgikaup" + }, "shop/window_blind": { "name": "Aknakatete kauplus", "terms": "rulood,ribikardinad,lamellkardinad" @@ -3387,16 +3559,16 @@ "name": "Tagasipöörd keelatud" }, "type/restriction/only_left_turn": { - "name": "Ainult vasakpöörd", - "terms": "ainult vasakule,kohustuslik sõidusuund vasakule" + "name": "Ainult vasakpööre" }, "type/restriction/only_right_turn": { - "name": "Ainult parempöörd", - "terms": "ainult paremale,kohustuslik sõidusuund paremale" + "name": "Ainult parempööre" }, "type/restriction/only_straight_on": { - "name": "Pööramine keelatud", - "terms": "Kohustuslik sõidusuund otse,ainult otse" + "name": "Ainult otse" + }, + "type/restriction/only_u_turn": { + "name": "Ainult ümberpöörd" }, "type/route": { "name": "Marsruut" diff --git a/vendor/assets/iD/iD/locales/fa.json b/vendor/assets/iD/iD/locales/fa.json index 10d41c636..3b068651a 100644 --- a/vendor/assets/iD/iD/locales/fa.json +++ b/vendor/assets/iD/iD/locales/fa.json @@ -1,5 +1,10 @@ { "fa": { + "icons": { + "information": "اطلاعات", + "remove": "پاک کردن", + "undo": "بازگردانی" + }, "modes": { "add_area": { "title": "محدوده", @@ -291,7 +296,8 @@ }, "restriction": { "controls": { - "distance": "مسافت" + "distance": "مسافت", + "via": "از طريق" } }, "undo": { @@ -340,7 +346,8 @@ "created": "ساخته شد", "about_changeset_comments": "درباره توضیحات تغییرات", "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments", - "google_warning": "شما در توضیحات خود از گوگل نام بردید. لطفا توجه داشته باشید که کپی کردن از نقشه‌های گوگل، ممنوع است." + "google_warning": "شما در توضیحات خود از گوگل نام بردید. لطفا توجه داشته باشید که کپی کردن از نقشه‌های گوگل، ممنوع است.", + "google_warning_link": "https://www.openstreetmap.org/copyright" }, "contributors": { "list": "ویرایش توسط {users}", @@ -580,13 +587,7 @@ } }, "success": { - "edited_osm": "OSMویرایش شد!", "just_edited": "شما OpenStreetMap را ویرایش کردید!", - "view_on_osm": "نمایش در OSM", - "facebook": "اشتراک گذاری در فیسبوک", - "twitter": "اشتراک گذاری در تویتر", - "google": "اشتراک گذاری در Google+", - "help_html": "تغییرات شما در لایه‌ی \"استاندارد\" به زودی قابل رؤیت است. تغیرات در سایر لایه‌ها و عناصر خاص، ممکن است بیشتر طول کشد تا نمایان شوند.", "help_link_text": "جزئیات", "help_link_url": "https://wiki.openstreetmap.org/wiki/Fa:FAQ#.D9.85.D9.86_.D8.AA.D8.BA.DB.8C.DB.8C.D8.B1.D8.A7.D8.AA.DB.8C_.D8.AF.D8.B1_.D9.86.D9.82.D8.B4.D9.87_.D8.A7.DB.8C.D8.AC.D8.A7.D8.AF_.DA.A9.D8.B1.D8.AF.D9.85.D8.8C_.DA.86.D8.B7.D9.88.D8.B1_.D9.85.DB.8C_.D8.AA.D9.88.D8.A7.D9.86.D9.85_.D9.88.DB.8C.D8.B1.D8.A7.DB.8C.D8.B4_.D9.87.D8.A7.DB.8C_.D8.AE.D9.88.D8.AF_.D8.B1.D8.A7_.D8.A8.D8.A8.DB.8C.D9.86.D9.85.D8.9F" }, @@ -792,6 +793,24 @@ } } }, + "units": { + "feet": "{quantity} فوت", + "miles": "{quantity} مایل", + "square_feet": "{quantity} فوت مربع", + "square_miles": "{quantity} مایل مربع", + "meters": "{quantity} متر", + "kilometers": "{quantity} کیلومتر", + "area_pair": "{area1} ({area2})", + "arcdegrees": "{quantity}°", + "arcminutes": "{quantity}′", + "arcseconds": "{quantity}″", + "north": "N", + "south": "S", + "east": "E", + "west": "W", + "coordinate": "{coordinate}{direction}", + "coordinate_pair": "{latitude}, {longitude}" + }, "presets": { "categories": { "category-barrier": { @@ -1269,7 +1288,7 @@ "placeholder": "خط ارتباطی، راه‌آهن برقی..." }, "elevation": { - "label": "ارتفاع" + "label": "ارتفاع از سطح دریا" }, "email": { "label": "ایمیل", @@ -1509,7 +1528,7 @@ "label": "سطح" }, "levels": { - "label": "سطح", + "label": "طبقه", "placeholder": "2, 4, 6..." }, "lit": { @@ -1538,6 +1557,10 @@ "label": "محدودیت سرعت", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "label": "سرعت مجاز توصیه شده", + "placeholder": "۴۰، ۵۰، Û¶Û°..." + }, "maxstay": { "label": "حداکثر توقف" }, @@ -2126,9 +2149,6 @@ "label": "نوع", "placeholder": "پیش فرض" }, - "vending": { - "label": "نوع محموله" - }, "visibility": { "label": "دید", "options": { @@ -2284,7 +2304,8 @@ "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'صحن'، با کاما جدا می‌شوند>" }, "aeroway/gate": { - "name": " دروازه فرودگاه " + "name": " دروازه فرودگاه ", + "terms": "" }, "aeroway/hangar": { "name": "آشیانه هواپیما", @@ -2302,9 +2323,27 @@ "name": "راه فرود به پارکینگ", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'فرود به پارک'، با کاما جدا می‌شوند>" }, + "aeroway/terminal": { + "name": "پایانه فرودگاه", + "terms": "" + }, + "allotments/plot": { + "terms": "" + }, "amenity": { "name": "کاربری" }, + "amenity/animal_boarding": { + "terms": "" + }, + "amenity/animal_breeding": { + "name": "امکانات پرورش حیوانات", + "terms": "" + }, + "amenity/animal_shelter": { + "name": "پناهگاه حیوانات", + "terms": "" + }, "amenity/arts_centre": { "name": "مرکز هنری", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مرکز هنری'، با کاما جدا می‌شوند>" @@ -2353,10 +2392,16 @@ "name": "تبدیل ارز / صرافی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'تبدیل ارز / صرافی'، با کاما جدا می‌شوند>" }, + "amenity/bus_station": { + "name": "ایستگاه اتوبوس / ترمینال" + }, "amenity/cafe": { "name": "کافه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'کافه'، با کاما جدا می‌شوند>" }, + "amenity/car_pooling": { + "terms": "" + }, "amenity/car_rental": { "name": "کرایه ماشین", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'کرایه خودرو'، با کاما جدا می‌شوند>" @@ -2389,6 +2434,12 @@ "name": "کلینیک", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'درمانگاه'، با کاما جدا می‌شوند>" }, + "amenity/clinic/abortion": { + "terms": "" + }, + "amenity/clinic/fertility": { + "terms": "" + }, "amenity/clock": { "name": "ساعت", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'ساعت'، با کاما جدا می‌شوند>" @@ -2432,6 +2483,10 @@ "name": "آب آشامیدنی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'آب آشامیدنی'، با کاما جدا می‌شوند>" }, + "amenity/driving_school": { + "name": "آموزشگاه رانندگی", + "terms": "" + }, "amenity/embassy": { "name": "سفارت خانه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'سفارت'، با کاما جدا می‌شوند>" @@ -2488,18 +2543,32 @@ "name": "کتابخانه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'کتابخانه'، با کاما جدا می‌شوند>" }, + "amenity/love_hotel": { + "name": "هتل عشق", + "terms": "" + }, "amenity/marketplace": { "name": "بازار", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'بازار'، با کاما جدا می‌شوند>" }, + "amenity/monastery": { + "terms": "" + }, "amenity/motorcycle_parking": { "name": "پارکینگ موتور سیکلت", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پارکینگ موتور سیکلت'، با کاما جدا می‌شوند>" }, + "amenity/music_school": { + "name": "آموزشگاه موسیقی", + "terms": "" + }, "amenity/nightclub": { "name": "کلوپ شبانه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'کلوپ شبانه'، با کاما جدا می‌شوند>" }, + "amenity/nursing_home": { + "name": "خانه سالمندان" + }, "amenity/parking": { "name": "پارکینگ خودرو", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پارکینگ خودرو'، با کاما جدا می‌شوند>" @@ -2512,6 +2581,9 @@ "name": "جای پارک", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای'جای پارک'، با کاما جدا می‌شوند>" }, + "amenity/pavilion": { + "terms": "" + }, "amenity/pharmacy": { "name": "داروخانه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'داروخانه'، با کاما جدا می‌شوند>" @@ -2528,6 +2600,10 @@ "name": "کلیسا", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'کلیسا'، با کاما جدا می‌شوند>" }, + "amenity/place_of_worship/hindu": { + "name": "معبد هندو", + "terms": "" + }, "amenity/place_of_worship/jewish": { "name": "کنیسه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'کنیسه'، با کاما جدا می‌شوند>" @@ -2536,6 +2612,17 @@ "name": "مسجد", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مسجد'، با کاما جدا می‌شوند>" }, + "amenity/place_of_worship/shinto": { + "name": "معبد شینتویی", + "terms": "" + }, + "amenity/place_of_worship/sikh": { + "terms": "" + }, + "amenity/place_of_worship/taoist": { + "name": "معبد تائو", + "terms": "" + }, "amenity/planetarium": { "name": "آسمان نما", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'آسمان نما'، با کاما جدا میشوند>" @@ -2572,6 +2659,9 @@ "name": "ایستگاه جنگلبانی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'ایستگاه جنگلبانی'، با کاما جدا می‌شوند>" }, + "amenity/recycling": { + "terms": "" + }, "amenity/recycling_centre": { "name": "مرکز بازیافت", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مرکز بازیافت'، با کاما جدا می‌شوند>" @@ -2595,12 +2685,20 @@ "name": "پناه گاه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پناهگاه'، با کاما جدا می‌شوند>" }, + "amenity/shower": { + "name": "دوش", + "terms": "" + }, + "amenity/smoking_area": { + "name": "منطقه سیگار کشیدن", + "terms": "" + }, "amenity/social_facility": { "name": "امکانات اجتماعی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'امکانات اجتماعی'، با کاما جدا می‌شوند>" }, "amenity/social_facility/food_bank": { - "name": "فروشگاه مواد غذایی", + "name": "خیریه بانک غذا", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'بانک غذا'، با کاما جدا می‌شوند>" }, "amenity/social_facility/group_home": { @@ -2611,6 +2709,10 @@ "name": "پناهگاه بی خانمان‌ها", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پناهگاه بی‌خانمان‌ها'، با کاما جدا می‌شوند>" }, + "amenity/social_facility/nursing_home": { + "name": "خانه سالمندان", + "terms": "" + }, "amenity/studio": { "name": "استدیو", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'استودیو'، با کاما جدا می‌شوند>" @@ -2642,6 +2744,10 @@ "name": "محیط دانشگاهی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'محیط دانشگاه'، با کاما جدا می‌شوند>" }, + "amenity/vending_machine": { + "name": "دستگاه فروش خودکار", + "terms": "" + }, "amenity/vending_machine/cigarettes": { "name": "دستگاه فروش سیگار", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'دستگاه فروش سیگار'، با کاما جدا می‌شوند>" @@ -2658,9 +2764,16 @@ "name": "دستگاه خود توزیع کیسه پسماند", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'دستگاه خود توزیع کیسه پسماند'، با کاما جدا می‌شوند>" }, + "amenity/vending_machine/feminine_hygiene": { + "terms": "" + }, "amenity/vending_machine/news_papers": { "name": "دستگاه خود فروش روزنامه" }, + "amenity/vending_machine/newspapers": { + "name": "دستگاه فروش خودکار روزنامه", + "terms": "" + }, "amenity/vending_machine/parcel_pickup_dropoff": { "name": "سرویس دریافت مرسولات پستی، دستگاه دریافت مرسولات پستی", "terms": "سرویس دریافت امانات پستی، دستگاه دریافت کننده مرسولات پستی " @@ -2681,6 +2794,10 @@ "name": "دامپزشکی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'دامپزشکی'، با کاما جدا می‌شوند>" }, + "amenity/waste/dog_excrement": { + "name": "سطل زباله سگ", + "terms": "" + }, "amenity/waste_basket": { "name": "سطل زباله", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'سطل زباله'، با کاما جدا می‌شوند>" @@ -2697,6 +2814,9 @@ "name": "آب قابل شرب RV", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای'آب قابل شرب RV'، با کاما جدا می‌شوند>" }, + "amenity/watering_place": { + "terms": "" + }, "area": { "name": "فضا", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'فضا'، با کاما جدا می‌شوند>" @@ -2705,6 +2825,49 @@ "name": "سطح جاده", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'سطح جاده'، با کاما جدا می‌شوند>" }, + "attraction/amusement_ride": { + "terms": "" + }, + "attraction/animal": { + "terms": "" + }, + "attraction/big_wheel": { + "terms": "" + }, + "attraction/bumper_car": { + "terms": "" + }, + "attraction/bungee_jumping": { + "name": "بانجی جامپینگ", + "terms": "" + }, + "attraction/carousel": { + "name": "چرخ فلک", + "terms": "" + }, + "attraction/dark_ride": { + "terms": "" + }, + "attraction/drop_tower": { + "terms": "" + }, + "attraction/pirate_ship": { + "name": "کشتی دزدان دریایی", + "terms": "" + }, + "attraction/river_rafting": { + "terms": "" + }, + "attraction/roller_coaster": { + "name": "ترن هوایی", + "terms": "" + }, + "attraction/train": { + "terms": "" + }, + "attraction/water_slide": { + "terms": "" + }, "barrier": { "name": "مانع", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مانع'، با کاما جدا می‌شوند>" @@ -2718,7 +2881,8 @@ "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'بولارد'، با کاما جدا می‌شوند>" }, "barrier/border_control": { - "name": "مرزبانی" + "name": "مرزبانی", + "terms": "" }, "barrier/cattle_grid": { "name": "شبکه آهنی", @@ -2751,6 +2915,9 @@ "name": "پرچین", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'Hedge'، با کاما جدا می‌شوند>" }, + "barrier/kerb": { + "terms": "" + }, "barrier/kissing_gate": { "name": "دروازه مخصوص انسان", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'Kissing Gate'، با کاما جدا می‌شوند>" @@ -2791,6 +2958,13 @@ "name": "انبار غله", "terms": "انبار کاه" }, + "building/boathouse": { + "terms": "" + }, + "building/bungalow": { + "name": "بانگالو", + "terms": "" + }, "building/bunker": { "name": "انباربزرگ" }, @@ -2810,6 +2984,9 @@ "name": "ساختمان کلیسا", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'ساختمان کلیسا'، با کاما جدا می‌شوند>" }, + "building/civic": { + "terms": "" + }, "building/college": { "name": "ساختمان دانشکده", "terms": "ساختمان کالج" @@ -2833,6 +3010,12 @@ "building/entrance": { "name": "ورود/خروج" }, + "building/farm": { + "terms": "" + }, + "building/farm_auxiliary": { + "terms": "" + }, "building/garage": { "name": "گاراژ", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'گاراژ'، با کاما جدا می‌شوند>" @@ -2869,6 +3052,9 @@ "name": "پیش دبستانی /ساختمان کودکستان", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پیش دبستانی / ساختمان کودکستان'، با کاما جدا می‌شوند>" }, + "building/mosque": { + "terms": "" + }, "building/public": { "name": "ساختمان عمومی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'ساختمان عمومی'، با کاما جدا می‌شوند>" @@ -2885,6 +3071,9 @@ "name": "سقف", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'سقف'، با کاما جدا می‌شوند>" }, + "building/ruins": { + "terms": "" + }, "building/school": { "name": "ساختمان مدرسه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'ساختمان مدرسه'، با کاما جدا می‌شوند>" @@ -2893,6 +3082,9 @@ "name": "خانه شبه ویلایی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'خانه شبه ویلایی'، با کاما جدا می‌شوند>" }, + "building/service": { + "terms": "" + }, "building/shed": { "name": "سایبان", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'کپر'، با کاما جدا می‌شوند>" @@ -2901,10 +3093,16 @@ "name": "اصطبل", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'اصطبل'، با کاما جدا می‌شوند>" }, + "building/stadium": { + "terms": "" + }, "building/static_caravan": { "name": "خانه از پیش ساخته متحرک", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'خانه از پیش ساخته متحرک'، با کاما جدا می‌شوند>" }, + "building/temple": { + "terms": "" + }, "building/terrace": { "name": "خانه های ردیفی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'خانه های ردیفی'، با کاما جدا می‌شوند>" @@ -2912,6 +3110,9 @@ "building/train_station": { "name": "ایستگاه قطار" }, + "building/transportation": { + "terms": "" + }, "building/university": { "name": "ساختمان دانشگاه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'ساختمان دانشگاه'، با کاما جدا می‌شوند>" @@ -2924,6 +3125,9 @@ "name": "مکان برقراری چادر", "terms": "مکان برقراری چادر، مکان قرار دادن خودرو کاروان" }, + "club": { + "terms": "" + }, "craft": { "name": "پیشه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پیشه'، با کاما جدا می‌شوند>" @@ -2964,10 +3168,19 @@ "name": "آذوقه رسان", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'آذوقه رسان'، با کاما جدا می‌شوند>" }, + "craft/chimney_sweeper": { + "terms": "" + }, "craft/clockmaker": { "name": "ساعت سازی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'ساعت‌ساز'، با کاما جدا می‌شوند>" }, + "craft/confectionery": { + "terms": "" + }, + "craft/distillery": { + "terms": "" + }, "craft/dressmaker": { "name": "خیاطی زنانه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'خیاط زنانه'، با کاما جدا می‌شوند>" @@ -2976,6 +3189,10 @@ "name": "متخصص برق", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'برقکار'، با کاما جدا می‌شوند>" }, + "craft/electronics_repair": { + "name": "فروشگاه تعمیرات الکترونیک", + "terms": "" + }, "craft/gardener": { "name": "باغبان", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'باغبان'، با کاما جدا می‌شوند>" @@ -3061,6 +3278,9 @@ "name": "داربستی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'داربست'، با کاما جدا می‌شوند>" }, + "craft/sculptor": { + "terms": "" + }, "craft/shoemaker": { "name": "کفاش", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'کفاش'، با کاما جدا می‌شوند>" @@ -3118,6 +3338,9 @@ "name": "آتش نشانی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'شیر آتش‌نشانی'، با کاما جدا می‌شوند>" }, + "emergency/life_ring": { + "terms": "" + }, "emergency/no": { "name": "دسترسی اظطراری خیر" }, @@ -3131,6 +3354,10 @@ "emergency/private": { "name": "دسترسی اضطراری شخصی" }, + "emergency/water_tank": { + "name": "مخزن آب اضطراری", + "terms": "" + }, "emergency/yes": { "name": "دسترسی اظطراری بله" }, @@ -3142,10 +3369,16 @@ "name": "تقاطع خیابانی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'تقاطع خیابان'، با کاما جدا می‌شوند>" }, + "footway/crossing-raised": { + "terms": "" + }, "footway/crosswalk": { "name": "محل عبور عابر پیاده", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'محل عبور عابر پیاده'، با کاما جدا می‌شوند>" }, + "footway/crosswalk-raised": { + "terms": "" + }, "footway/sidewalk": { "name": "پیاده رو", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پیاده‌رو'، با کاما جدا می‌شوند>" @@ -3194,10 +3427,53 @@ "name": "خطر آب", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'خطر آب'، با کاما جدا می‌شوند>" }, + "healthcare": { + "terms": "" + }, + "healthcare/alternative": { + "terms": "" + }, + "healthcare/alternative/chiropractic": { + "terms": "" + }, + "healthcare/audiologist": { + "terms": "" + }, + "healthcare/birthing_center": { + "terms": "" + }, "healthcare/blood_donation": { "name": "مرکز اهدای خون", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مرکز اهدای خون'، با کاما جدا می‌شوند>" }, + "healthcare/hospice": { + "terms": "" + }, + "healthcare/midwife": { + "name": "ماما", + "terms": "" + }, + "healthcare/occupational_therapist": { + "terms": "" + }, + "healthcare/optometrist": { + "terms": "" + }, + "healthcare/physiotherapist": { + "terms": "" + }, + "healthcare/podiatrist": { + "terms": "" + }, + "healthcare/psychotherapist": { + "terms": "" + }, + "healthcare/rehabilitation": { + "terms": "" + }, + "healthcare/speech_therapist": { + "terms": "" + }, "highway": { "name": "بزرگراه" }, @@ -3205,6 +3481,9 @@ "name": "مسیر حیوانات اهلی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'Bridle Path'، با کاما جدا می‌شوند>" }, + "highway/bus_guideway": { + "terms": "" + }, "highway/corridor": { "name": "راهروی داخلی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'راهرو داخلی'، با کاما جدا می‌شوند>" @@ -3213,14 +3492,24 @@ "name": "تقاطع خیابانی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'تقاطع خیابان'، با کاما جدا می‌شوند>" }, + "highway/crossing-raised": { + "terms": "" + }, "highway/crosswalk": { "name": "محل عبور عابر پیاده", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'محل عبور عابر پیاده'، با کاما جدا می‌شوند>" }, + "highway/crosswalk-raised": { + "terms": "" + }, "highway/cycleway": { "name": "مسیر دوچرخه سواری", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مسیر دوچرخه'، با کاما جدا می‌شوند>" }, + "highway/elevator": { + "name": "آسانسور", + "terms": "" + }, "highway/footway": { "name": "مسیر پیاده روی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مسیر پیاده'، با کاما جدا می‌شوند>" @@ -3249,10 +3538,19 @@ "name": "اتصال بزرگراه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پیوستن بزرگراه'، با کاما جدا می‌شوند>" }, + "highway/passing_place": { + "terms": "" + }, "highway/path": { "name": "مسیر", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مسیر'، با کاما جدا می‌شوند>" }, + "highway/pedestrian_area": { + "terms": "" + }, + "highway/pedestrian_line": { + "terms": "" + }, "highway/primary": { "name": "جاده اصلی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'راه اصلی'، با کاما جدا می‌شوند>" @@ -3261,6 +3559,9 @@ "name": "اتصال اصلی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پیوستن راه اصلی'، با کاما جدا می‌شوند>" }, + "highway/raceway": { + "terms": "" + }, "highway/residential": { "name": "جاده ی مسکونی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'جاده مسکونی'، با کاما جدا می‌شوند>" @@ -3309,6 +3610,9 @@ "name": "فضای خدماتی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'جایگاه خدماتی'، با کاما جدا می‌شوند>" }, + "highway/speed_camera": { + "terms": "" + }, "highway/steps": { "name": "پله", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پله'، با کاما جدا می‌شوند>" @@ -3389,6 +3693,10 @@ "name": "ویرانه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'ویرانه'، با کاما جدا می‌شوند>" }, + "historic/tomb": { + "name": "آرامگاه", + "terms": "" + }, "historic/wayside_cross": { "name": "صلیب کنار جاده", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'صلیب کنار جاده'، با کاما جدا می‌شوند>" @@ -3409,10 +3717,17 @@ "name": "باغچه عمومی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'باغچه عمومی'، با کاما جدا می‌شوند>" }, + "landuse/aquaculture": { + "name": "آبزی‌پروری", + "terms": "" + }, "landuse/basin": { "name": "حوزه رودخانه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'حوضه'، با کاما جدا می‌شوند>" }, + "landuse/brownfield": { + "terms": "" + }, "landuse/cemetery": { "name": "قبرستان", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'قبرستان - آرامگاه'، با کاما جدا می‌شوند>" @@ -3444,14 +3759,34 @@ "name": "جنگل", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'جنگل'، با کاما جدا می‌شوند>" }, + "landuse/garages": { + "terms": "" + }, "landuse/grass": { "name": "علف زار", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'چمن'، با کاما جدا می‌شوند>" }, + "landuse/greenfield": { + "terms": "" + }, + "landuse/greenhouse_horticulture": { + "terms": "" + }, + "landuse/harbour": { + "name": "بندرگاه", + "terms": "" + }, "landuse/industrial": { "name": "محیط صنعتی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'منطقه صنعتی'، با کاما جدا می‌شوند>" }, + "landuse/industrial/scrap_yard": { + "terms": "" + }, + "landuse/industrial/slaughterhouse": { + "name": "کشتارگاه", + "terms": "" + }, "landuse/landfill": { "name": "محل دفن مواد (زباله)", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'محل دفن زباله'، با کاما جدا می‌شوند>" @@ -3465,37 +3800,48 @@ "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'منطقه نظامی'، با کاما جدا می‌شوند>" }, "landuse/military/airfield": { - "name": "پایگاه هوایی نظامی" + "name": "پایگاه هوایی نظامی", + "terms": "" }, "landuse/military/barracks": { - "name": "پادگان" + "name": "پادگان", + "terms": "" }, "landuse/military/bunker": { - "name": "محدوده نظامی" + "name": "محدوده نظامی", + "terms": "" }, "landuse/military/checkpoint": { - "name": "ایست بازرسی" + "name": "ایست بازرسی", + "terms": "" }, "landuse/military/danger_area": { - "name": "محدوده خطرناک" + "name": "محدوده خطرناک", + "terms": "" }, "landuse/military/naval_base": { - "name": "پایگاه نیروی دریایی" + "name": "پایگاه نیروی دریایی", + "terms": "" }, "landuse/military/nuclear_explosion_site": { - "name": "محدوده انفجار اتمی" + "name": "محدوده انفجار اتمی", + "terms": "" }, "landuse/military/obstacle_course": { - "name": "ميدان موانع" + "name": "ميدان موانع", + "terms": "" }, "landuse/military/office": { - "name": "دفتر نظامی" + "name": "دفتر نظامی", + "terms": "" }, "landuse/military/range": { - "name": "محدوده نظامی" + "name": "محدوده نظامی", + "terms": "" }, "landuse/military/training_area": { - "name": "منطقه آموزشی" + "name": "منطقه آموزشی", + "terms": "" }, "landuse/orchard": { "name": "باغ میوه", @@ -3509,10 +3855,16 @@ "name": "معدن سنگ", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'معدن'، با کاما جدا می‌شوند>" }, + "landuse/railway": { + "terms": "" + }, "landuse/recreation_ground": { "name": "محوطه تفریحی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'محوطه تفریحی'، با کاما جدا می‌شوند>" }, + "landuse/religious": { + "terms": "" + }, "landuse/residential": { "name": "منطقه مسکونی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'منطقه مسکونی'، با کاما جدا می‌شوند>" @@ -3533,6 +3885,9 @@ "name": "مرکز بازی بزرگسالان", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مرکز بازی بزرگسالان'، با کاما جدا می‌شوند>" }, + "leisure/amusement_arcade": { + "terms": "" + }, "leisure/bird_hide": { "name": "مکان تماشای پرندگان", "terms": "مخفیگاه تماشای پرندگان" @@ -3549,6 +3904,10 @@ "name": "سالن رقص", "terms": "تالار رقص" }, + "leisure/dancing_school": { + "name": "مدرسه رقص", + "terms": "" + }, "leisure/dog_park": { "name": "پارک سگ", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پارک سگ‌ها'، با کاما جدا می‌شوند>" @@ -3569,6 +3928,39 @@ "name": "ایستگاه ورزشی در فضای باز", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'ایستگاه ورزشی در فضای باز'، با کاما جدا می‌شوند>" }, + "leisure/fitness_station/balance_beam": { + "terms": "" + }, + "leisure/fitness_station/box": { + "terms": "" + }, + "leisure/fitness_station/horizontal_bar": { + "terms": "" + }, + "leisure/fitness_station/horizontal_ladder": { + "terms": "" + }, + "leisure/fitness_station/hyperextension": { + "terms": "" + }, + "leisure/fitness_station/parallel_bars": { + "terms": "" + }, + "leisure/fitness_station/push-up": { + "terms": "" + }, + "leisure/fitness_station/rings": { + "terms": "" + }, + "leisure/fitness_station/sign": { + "terms": "" + }, + "leisure/fitness_station/sit-up": { + "terms": "" + }, + "leisure/fitness_station/stairs": { + "terms": "" + }, "leisure/garden": { "name": "باغ", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'باغ'، با کاما جدا می‌شوند>" @@ -3577,8 +3969,13 @@ "name": "زمین گلف", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'زمین گلف'، با کاما جدا می‌شوند>" }, + "leisure/hackerspace": { + "name": "هکراسپیس", + "terms": "" + }, "leisure/horse_riding": { - "name": "باشگاه اسب سواری" + "name": "باشگاه اسب سواری", + "terms": "" }, "leisure/ice_rink": { "name": "یخ بازی", @@ -3596,6 +3993,9 @@ "name": "ذخیره‌گاه طبیعی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'ذخیره‌گاه طبیعی'، با کاما جدا می‌شوند>" }, + "leisure/outdoor_seating": { + "terms": "" + }, "leisure/park": { "name": "پارک", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پارک'، با کاما جدا می‌شوند>" @@ -3620,10 +4020,22 @@ "name": "محوطه بسکتبال", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'زمین بسکتبال'، با کاما جدا می‌شوند>" }, + "leisure/pitch/beachvolleyball": { + "terms": "" + }, + "leisure/pitch/boules": { + "terms": "" + }, "leisure/pitch/bowls": { "name": "چمن مخصوص بولینگ", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'چمن مخصوص بولینگ'، با کاما جدا می‌شوند>" }, + "leisure/pitch/cricket": { + "terms": "" + }, + "leisure/pitch/equestrian": { + "terms": "" + }, "leisure/pitch/rugby_league": { "name": "زمین راگبی Û±Û³ نفره", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'زمین راگبی Û±Û³ نفره'، با کاما جدا می‌شوند>" @@ -3640,6 +4052,9 @@ "name": "میدان فوتبال", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'زمین فوتبال'، با کاما جدا می‌شوند>" }, + "leisure/pitch/table_tennis": { + "terms": "" + }, "leisure/pitch/tennis": { "name": "محوطه تنیس", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'زمین تنیس'، با کاما جدا می‌شوند>" @@ -3656,6 +4071,13 @@ "name": "پر رفت‌آمد", "terms": "مکان پررفت‌آمد, اماکن پر رفت آمد,مکان‌های مطرح" }, + "leisure/running_track": { + "terms": "" + }, + "leisure/sauna": { + "name": "سونا", + "terms": "" + }, "leisure/slipway": { "name": "قایق ساکن", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مسیر لغزشی کشتی'، با کاما جدا می‌شوند>" @@ -3676,6 +4098,9 @@ "name": "استخر شنا", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'استخر شنا'، با کاما جدا می‌شوند>" }, + "leisure/track": { + "terms": "" + }, "leisure/water_park": { "name": "پارک آبی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پارک آبی'، با کاما جدا می‌شوند>" @@ -3692,6 +4117,10 @@ "name": "گذرگاه افقی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'گذرگاه افقی'، با کاما جدا می‌شوند>" }, + "man_made/antenna": { + "name": "آنتن", + "terms": "" + }, "man_made/breakwater": { "name": "موج شکن", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'موج شکن'، با کاما جدا می‌شوند>" @@ -3704,6 +4133,10 @@ "name": "دودکش", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'دودکش'، با کاما جدا می‌شوند>" }, + "man_made/crane": { + "name": "جرثقیل", + "terms": "" + }, "man_made/cutline": { "name": "خط برش", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مسیر جنگلی'، با کاما جدا می‌شوند>" @@ -3727,10 +4160,19 @@ "name": "فانوس دریایی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'فانوس دریایی'، با کاما جدا می‌شوند>" }, + "man_made/mast": { + "terms": "" + }, + "man_made/monitoring_station": { + "terms": "" + }, "man_made/observation": { "name": "برج رصد", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'دکل دیده‌بانی'، با کاما جدا می‌شوند>" }, + "man_made/observatory": { + "terms": "" + }, "man_made/petroleum_well": { "name": "چاه نفت", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'چاه نفت'، با کاما جدا می‌شوند>" @@ -3787,15 +4229,34 @@ "name": "امور آب", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'تأسیسات آبرسانی'، با کاما جدا می‌شوند>" }, + "man_made/watermill": { + "name": "آسیاب آبی", + "terms": "" + }, + "man_made/windmill": { + "name": "آسیاب بادی", + "terms": "" + }, "man_made/works": { - "name": "کارخانه" + "name": "کارخانه", + "terms": "" + }, + "manhole": { + "terms": "" + }, + "manhole/drain": { + "terms": "" + }, + "manhole/telecom": { + "terms": "" }, "natural": { "name": "طبیعی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'طبیعت'، با کاما جدا می‌شوند>" }, "natural/bare_rock": { - "name": "صخره" + "name": "صخره", + "terms": "" }, "natural/bay": { "name": "خلیج کوچک", @@ -3833,19 +4294,24 @@ "name": "بوته زار", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'بوته زار'، با کاما جدا می‌شوند>" }, + "natural/mud": { + "terms": "" + }, "natural/peak": { "name": "قله", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'قله'، با کاما جدا می‌شوند>" }, "natural/ridge": { - "name": "پرتگاه" + "name": "پرتگاه", + "terms": "" }, "natural/saddle": { "name": "گردنه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'گردنه'، با کاما جدا می‌شوند>" }, "natural/sand": { - "name": "شن" + "name": "شن", + "terms": "" }, "natural/scree": { "name": "سنگ ریزه", @@ -3895,15 +4361,44 @@ "name": "چوب", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'چوب'، با کاما جدا می‌شوند>" }, + "noexit/yes": { + "terms": "" + }, "office": { "name": "اداره", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'اداره'، با کاما جدا می‌شوند>" }, + "office/accountant": { + "terms": "" + }, "office/administrative": { "name": "دفتر اداری" }, + "office/adoption_agency": { + "terms": "" + }, + "office/advertising_agency": { + "name": "آژانس تبلیغاتی", + "terms": "" + }, + "office/architect": { + "name": "دفتر معماری", + "terms": "" + }, + "office/association": { + "name": "دفتر سازمان غیر انتفاعی", + "terms": "" + }, + "office/charity": { + "name": "دفتر خیریه", + "terms": "" + }, + "office/company": { + "terms": "" + }, "office/coworking": { - "name": "فضای کاری مشارکتی" + "name": "فضای کاری مشارکتی", + "terms": "" }, "office/educational_institution": { "name": "مؤسسه آموزشی", @@ -3913,6 +4408,9 @@ "name": "آژانس کاریابی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'آژانس کاریابی'، با کاما جدا می‌شوند>" }, + "office/energy_supplier": { + "terms": "" + }, "office/estate_agent": { "name": "دفتر املاک", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'دفتر املاک و مستغلات'، با کاما جدا می‌شوند>" @@ -3921,6 +4419,12 @@ "name": "اداره مالی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'دفتر مالی'، با کاما جدا می‌شوند>" }, + "office/forestry": { + "terms": "" + }, + "office/foundation": { + "terms": "" + }, "office/government": { "name": "اداره دولتی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'اداره دولتی'، با کاما جدا می‌شوند>" @@ -3929,18 +4433,44 @@ "name": "اداره ثبت", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'اداره ثبت'، با کاما جدا می‌شوند>" }, + "office/government/tax": { + "name": "اداره مالیات و درآمد", + "terms": "" + }, + "office/guide": { + "name": "دفتر راهنمای تور", + "terms": "" + }, "office/insurance": { "name": "دفتر بیمه", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'اداره بیمه'، با کاما جدا می‌شوند>" }, + "office/it": { + "name": "دفتر فناوری اطلاعات", + "terms": "" + }, "office/lawyer": { "name": "دفتر حقوقی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'دفتر حقوقی'، با کاما جدا می‌شوند>" }, + "office/lawyer/notary": { + "name": "دفتر اسناد رسمی" + }, + "office/moving_company": { + "terms": "" + }, + "office/newspaper": { + "name": "دفتر روزنامه", + "terms": "" + }, "office/ngo": { "name": "سازمان غیر دولتی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'دفتر سازمان غیر دولتی NGO'، با کاما جدا می‌شوند>" }, + "office/notary": { + "name": "دفتر اسناد رسمی", + "terms": "" + }, "office/physician": { "name": "پزشک" }, @@ -3948,10 +4478,24 @@ "name": "حزب سیاسی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'حزب سیاسی'، با کاما جدا می‌شوند>" }, + "office/private_investigator": { + "name": "دفتر تحقیقات خصوصی", + "terms": "" + }, + "office/quango": { + "terms": "" + }, "office/research": { "name": "سازمان تحقیقاتی و پژوهشی", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'دفتر تحقیقاتی'، با کاما جدا می‌شوند>" }, + "office/surveyor": { + "terms": "" + }, + "office/tax_advisor": { + "name": "دفتر مشاور مالیاتی", + "terms": "" + }, "office/telecommunication": { "name": "اداره مخابرات", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'دفتر مخابراتی '، با کاما جدا می‌شوند>" @@ -4232,7 +4776,7 @@ "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'آبنبات فروشی'، با کاما جدا می‌شوند>" }, "shop/convenience": { - "name": "فروشگاه زنجیره ای", + "name": "فروشگاه کوچک", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'Convenience Store'، با کاما جدا می‌شوند>" }, "shop/copyshop": { @@ -4723,18 +5267,6 @@ "name": "دور زدن ممنوع", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'دور زدن ممنوع'، با کاما جدا می‌شوند>" }, - "type/restriction/only_left_turn": { - "name": "تنها امکان گردش به چپ", - "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'تنها امکان گردش به چپ'، با کاما جدا می‌شوند>" - }, - "type/restriction/only_right_turn": { - "name": "تنها امکان گردش به راست", - "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'تنها امکان گردش به راست'، با کاما جدا می‌شوند>" - }, - "type/restriction/only_straight_on": { - "name": "گردش ممنوع", - "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'گردش ممنوع'، با کاما جدا می‌شوند>" - }, "type/route": { "name": "مسیر", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مسیر'، با کاما جدا می‌شوند>" @@ -4779,6 +5311,9 @@ "name": "مسیر جاده", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مسیر جاده'، با کاما جدا می‌شوند>" }, + "type/route/subway": { + "name": "خط مترو" + }, "type/route/train": { "name": "مسیر راه آهن", "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'مسیر راه آهن'، با کاما جدا می‌شوند>" @@ -4795,6 +5330,9 @@ "name": "سایت", "terms": "سایت، منطقه" }, + "type/waterway": { + "name": "راه آبی" + }, "vertex": { "name": "سایر", "terms": "دیگر, بقیه, باقی" @@ -4876,7 +5414,6 @@ "attribution": { "text": "ارسال نظرات" }, - "description": "مرزها و تاریخ نقشه ها از زوم 14 به بالا قابل مشاهده هستند", "name": "فهرست DigitalGlobe Premium" }, "DigitalGlobe-Standard": { @@ -4890,7 +5427,6 @@ "attribution": { "text": "ارسال نظرات" }, - "description": "مرزها و تاریخ نقشه ها از زوم 14 به بالا قابل مشاهده هستند", "name": "فهرست DigitalGlobe Premium" }, "EsriWorldImagery": { @@ -5008,7 +5544,7 @@ "attribution": { "text": "basemap.at" }, - "description": "نقشه اصلی استرالیا، نقشه ثبت شده دولتی", + "description": "نقشه اصلی اتریش، بر اساس اطلاعات دولت می‌باشد.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -5065,12 +5601,10 @@ "skobbler": { "attribution": { "text": "© Tiles: skobbler Map data: OpenStreetMap contributors" - } + }, + "name": "skobbler" }, "stamen-terrain-background": { - "attribution": { - "text": "Map tiles by Stamen Design, under CC BY 3.0" - }, "name": "لجن زار" }, "tf-cycle": { @@ -5085,6 +5619,40 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "Central-Pennsylvania-OSM": { + "name": "پنسیلوانیا مرکزی OSM", + "description": "جامعه نقشه برداری آنلاین بر اساس کالج ایالتی، پنسیلوانیا" + }, + "Dallas-Fort-Worth-OSM": { + "name": "دالاس‌فورت وورث OSM", + "description": "گروه کاربران OpenStreetMap برای دالاس‌فورت وورث" + }, + "GeoPhilly": { + "name": "ژئوفیلی", + "description": "Meetup برای علاقمندان به نقشه در منطقه فیلادلفیا" + }, + "OSM-Chattanooga": { + "name": "OSM چاتانوگا", + "description": "گروه کاربران OpenStreetMap برای چاتانوگا" + }, + "OSM-NYC": { + "name": "OpenStreetMap نیویورک" + }, + "OSM-Portland": { + "name": "پورتلند OpenStreetMap" + }, + "OSM-US-Slack": { + "description": "همگی خوش آمدید! ثبت نام کنید در {signupUrl}" + }, + "Maptime-Australia-Slack": { + "description": "ثبت نام کنید در {signupUrl}" + }, + "OSM-Reddit": { + "name": "OpenStreetMap در ردیت", + "description": "/r/openstreetmap/ یک مکان عالی برای کسب اطلاعات بیشتر در مورد OpenStreetMap است. از ما چیزی بپرسید!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/fi.json b/vendor/assets/iD/iD/locales/fi.json index a8bef8e0a..acb80c745 100644 --- a/vendor/assets/iD/iD/locales/fi.json +++ b/vendor/assets/iD/iD/locales/fi.json @@ -1,5 +1,10 @@ { "fi": { + "icons": { + "information": "Tietoa", + "remove": "Poista", + "undo": "Peru" + }, "modes": { "add_area": { "title": "Alue", @@ -291,6 +296,42 @@ } } }, + "restriction": { + "controls": { + "distance": "Etäisyys", + "distance_up_to": "Enintään {distance}", + "via": "Kautta", + "via_node_only": "Vain yksi viivapiste", + "via_up_to_one": "Enintään yksi viiva", + "via_up_to_two": "Enintään kaksi viivaa" + }, + "help": { + "indirect": "(epäsuora)", + "turn": { + "no_left_turn": "EI vasemmalle (epäsuora)", + "no_right_turn": "EI oikealle (epäsuora)", + "no_u_turn": "EI U-käännöstä (epäsuora)", + "no_straight_on": "EI suoraan (epäsuora)", + "only_left_turn": "VAIN vasemmalle (epäsuora)", + "only_right_turn": "VAIN oikealle (epäsuora)", + "only_u_turn": "VAIN U-käännös (epäsuora)", + "only_straight_on": "VAIN suoraan (epäsuora)", + "allowed_left_turn": "SALLITTU vasemmalle (epäsuora)", + "allowed_right_turn": "SALLITTU oikealle (epäsuora)", + "allowed_u_turn": "SALLITTU U-käännös (epäsuora)", + "allowed_straight_on": "SALLITTU suoraan (epäsuora)" + }, + "from": "MISTÄ", + "via": "KAUTTA", + "to": "MIHIN", + "from_name": "{from} {fromName}", + "from_name_to_name": "{from} {fromName} {to} {toName}", + "via_names": "{via} {viaNames}", + "select_from": "Valitse {from}-väylä napsauttamalla sitä", + "select_from_name": "Valitse {from}-väyläksi {fromName} napsauttamalla", + "toggle": "Aseta \"{turn}\" napsauttamalla" + } + }, "undo": { "tooltip": "Kumoa: {action}", "nothing": "Ei muokkaushistoriaa." @@ -574,7 +615,7 @@ "status_code": "Palvelimen virhekoodi {code}", "unknown_error_details": "Varmista, että Internet-yhteys on käytössä.", "uploading": "Tallennetaan muutoksia OpenStreetMapiin...", - "conflict_progress": "Tarkista ristiriita: {num}/{total}", + "conflict_progress": "Tarkistetaan ristiriita {num}/{total}", "unsaved_changes": "Kaikkia muutoksia ei ole tallennettu", "conflict": { "header": "Ratkaise muokkausristiriidat", @@ -600,15 +641,20 @@ } }, "success": { - "edited_osm": "OSM:ia muokattu!", "just_edited": "Muokkasit juuri OpenStreetMapia!", - "view_on_osm": "Näytä OSM-kartalla", - "facebook": "Jaa Facebookissa", - "twitter": "Jaa Twitterissä", - "google": "Jaa Google+-palvelussa", + "thank_you": "Kiitos avustasi!", + "thank_you_location": "Kiitos, että paransit karttaa paikassa {where}.", "help_html": "Karttaan tehdyt muutokset ilmestyvät perinteiseen karttanäkymään muutaman minuutin kuluessa. Joidenkin ominaisuuksien ilmestyminen kartalle ja muutokset joihinkin karttanäkymiin voivat viedä kauemmin.", "help_link_text": "Tiedot", - "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F", + "view_on_osm": "Näytä muutokset OSM-kartalla", + "changeset_id": "Muutoskokoelman seurantatunnus: {changeset_id}", + "like_osm": "Tykkäätkö meistä? Kerro se muille:", + "more": "Lisää", + "events": "Tapahtumat", + "languages": "Kielet: {languages}", + "missing": "Puuttuuko listalta jotain?", + "tell_us": "Kerro meille!" }, "confirm": { "okay": "OK", @@ -726,11 +772,115 @@ "feature_editor": { "title": "Kohdemuokkain", "intro": "*Kohdemuokkain* näkyy muokkausnäkymän vasemmassa laidassa. Sitä käytetään karttakohteen ominaisuuksien tarkasteluun ja muokkaamiseen.", - "type_h": "Ominisuustyyppi", + "definitions": "Yläosassa näkyy karttakohteen tyyppi. Keskiosa sisältää *kenttiä*, jotka kuvaavat kohteen ominaisuuksia, kuten nimen ja osoitteen. ", + "type_h": "Ominaisuustyyppi", + "type": "Voit klikata karttakohteen tyyppiä vaihtaaksesi kohteen eri tyyppiseksi. Kaikki, mikä on olemassa, voidaan lisätä OpenStreetMapiin, joten on olemassa tuhansia kohdetyyppejä joista valita.", + "type_picker": "Kohdemuokkain näyttää kaikkein tavallisimmat kohdetyypit kuten puistot, sairaalat, ravintolat, tiet ja rakennukset. Voit hakea mitä tyyppiä tahansa kirjoittamalla hakulaatikkoon, mitä olet etsimässä. Voit myös klikata {inspect} **Tietoa** -ikonia kohteen tyypin vieressä saadaksesi kohdetyypistä lisätietoa.", + "fields_h": "Kentät", + "fields_all_fields": "\"Kaikki kentät\" -osa sisältää kaikki karttakohteen tiedot, joita voit muokata. OpenStreetMapissa kaikkien kenttien täyttäminen on vapaavalintaista, ja voit jättää kentän tyhjäksi jos olet epävarma.", + "fields_example": "Eri tyyppisille karttakohteille näkyy erilaiset kentät. Esimerkiksi tien kohdalla näkyy kentät tien päällysteelle ja nopeusrajoitukselle, kun taas ravintolan kohdalla näkyy kentät aukioloajoille ja sille, millaista ruokaa ravintola tarjoaa.", + "fields_add_field": "Voit klikata myös \"Lisää kenttä\" -pudotusvalikkoa lisätäksesi uusia kenttiä, kuten kuvauksen, Wikipedia-linkin, esteettömyyden pyörätuolin käyttäjille ja niin edelleen. ", + "tags_h": "Tägit eli ominaisuustiedot", + "tags_all_tags": "Voit laajentaa kenttien alapuolella olevan \"Kaikki ominaisuustiedot\" -osan lisätäksesi karttakohteelle mitä tahansa OpenStreetMapin *tägejä* ja muokataksesi niitä. Jokainen tägi sisältää *avaimen* ja *arvon*, tietotyypit jotka määrittävät kaikki OpenStreetMapiin tallennetut karttakohteet.", "tags_resources": "Karttakohteiden muokkaaminen edellyttää perustason osaamista OpenStreetMapin ominaisuuksista. Lisätietoa erilaisista ominaisuuksista ja karttakohteista on saatavilla esimerkiksi [OpenStreetMapin Wikistä](https://wiki.openstreetmap.org/wiki/Fi:Main_Page) tai [Taginfo-sivustolla](https://taginfo.openstreetmap.org/)." }, + "points": { + "title": "Paikkapisteet", + "intro": "*Paikkapisteillä* voidaan merkitä kauppojen, ravintoloiden ja patsaiden kaltaisia karttakohteita. Niillä on yksittäinen sijainti ja ne kertovat, mitä siellä on.", + "add_point_h": "Paikkapisteiden lisääminen", + "add_point": "Lisätäksesi paikkapisteen, klikkaa {point} **Paikkapiste** -painiketta työkalupalkissa kartan yläpuolella, tai paina pikanäppäintä `1`. Tämä muuttaa hiiren osoittimen ristimäiseksi.", + "add_point_finish": "Sijoittaaksesi uuden paikkapisteen kartalle, vie hiiri sinne, mihin haluat paikkapisteen, ja paina {leftclick} hiiren vasenta painiketta tai `Välilyönti` -näppäintä.", + "move_point_h": "Paikkapisteiden liikuttaminen", + "move_point": "Liikuttaaksesi paikkapistettä, aseta hiiren osoitin pisteen päälle ja paina {leftclick} hiiren vasenta painiketta. Pidä painike pohjassa ja raahaa paikkapiste uuteen sijaintiin.", + "delete_point_h": "Paikkapisteiden poistaminen", + "delete_point": "Voit poistaa kohteita, joita ei ole oikeasti olemassa. Kohteen poistaminen poistaa sen muidenkin kartalta, joten varmista ennen poistamista, että kohdetta ei todella ole.", + "delete_point_command": "Poistaaksesi pisteen, klikkaa pistettä {rightclick} hiiren oikealla näppäimellä ja valitse avautuvasta pikavalikosta {delete} **Poista**." + }, + "lines": { + "title": "Viivat", + "intro": "*Viivoilla* merkitään esimerkiksi katuja, rautateitä ja jokia. Viivat pitäisi piirtää niiden esittämän kohteen keskilinjaa pitkin.", + "add_line_h": "Viivojen lisääminen", + "add_line": "Lisätäksesi viivan, klikkaa {line} **Viiva** -painiketta työkalupalkissa kartan yläpuolella, tai paina pikanäppäintä `2`. Tämä muuttaa hiiren osoittimen ristimäiseksi.", + "add_line_draw": "Seuraavaksi siirrä hiiren osoitin sinne, mistä haluat viivan alkavan, ja paina {leftclick} hiiren vasenta painiketta tai `Välilyönti` -näppäintä. Lisää viivan loput pisteet klikkaamalla tai `Välilyönti` -näppäimellä. Voit lähentää, loitontaa tai raahata karttaa piirtäessäsi.", + "add_line_finish": "Lopettaaksesi viivan piirtämisen, paina `{Enter}` tai klikkaa viivan viimeistä pistettä uudestaan.", + "modify_line_h": "Viivojen muokkaaminen", + "modify_line_dragnode": "Viivat eivät usein ole oikean muotoisia, esimerkiksi tie ei vastaa ilmakuvaa. Muokataksesi viivan muotoa, ensin valitse viiva {leftclick} hiiren vasemmalla painikkeella. Tämä saa viivan pisteet näkymään pieninä ympyröinä. Sitten voit raahata pisteet parempiin sijainteihin.", + "modify_line_addnode": "Voit myös luoda viivaan uusia pisteitä joko {leftclick}**x2** kaksoisklikkaamalla viivaa tai raahamalla viivan pisteiden välissä olevaa pikkukolmiota.", + "connect_line_h": "Viivojen yhdistäminen", + "connect_line": "Teiden yhdistyminen oikein on tärkeää kartalla ja välttämätöntä ajo-ohjeiden tarjoamisessa.", + "connect_line_display": "Teiden risteykset näkyvät harmaina ympyröinä. Jos viivojen päätepisteet eivät yhdisty mihinkään, ne näkyvät suurempina valkoisina ympyröinä.", + "connect_line_drag": "Yhdistääksesi viivan toiseen kohteeseen, raahaa yksi viivan pisteistä toisen kohteen päälle, kunnes kohteet tarttuvat yhteen. Vinkki: Voit estää karttakohteen yhdistymisen muihin kohteisiin pitämällä `{alt}`-painiketta pohjassa.", + "connect_line_tag": "Jos tiedät, että risteyksessä on liikennevalot tai suojatie, voit lisätä ne valitsemalla tiet yhdistävän pisteen ja käyttämällä kohdemuokkainta.", + "disconnect_line_h": "Viivojen erottaminen", + "disconnect_line_command": "Erottaaksesi tien toisesta kohteesta, klikkaa kohteet yhdistävää pistettä {rightclick} hiiren oikealla näppäimellä ja valitse avautuvasta pikavalikosta {disconnect} **Erota**.", + "move_line_h": "Viivojen liikuttaminen", + "move_line_command": "Liikuttaaksesi kokonaista viivaa, klikkaa viivaa {rightclick} hiiren oikealla näppäimellä ja valitse avautuvasta pikavalikosta {move} **Siirrä**. Sitten liikuta hiirtä ja paina {leftclick} hiiren vasenta painiketta asettaaksesi viivan uuteen paikkaan.", + "move_line_connected": "Viivat, jotka ovat yhdistyneinä toisiin kohteisiin, pysyvät yhdistyneinä, kun liikutat viivan uuteen paikkaan. iD estää sinua siirtämästä viivaa toisen yhdistetyn viivan yli.", + "delete_line_h": "Viivojen poistaminen", + "delete_line": "Voit poistaa viivan jos se on täysin virheellinen, esimerkiksi tien jota ei ole oikeasti olemassa. Ole varovainen poistaessasi kohteita: ilmakuva saattaa olla vanhentunut ja virheelliseltä näyttävä tie taas uusi.", + "delete_line_command": "Poistaaksesi viivan, klikkaa viivaa {rightclick} hiiren oikealla näppäimellä ja valitse avautuvasta pikavalikosta {delete} **Poista**." + }, + "areas": { + "title": "Alueet", + "intro": "*Alueilla* kuvataan sellaisten kohteiden kuin järvien, rakennusten ja asuinalueiden rajoja. Alueet pitäisi piirtää kulkemaan niiden esittämän kohteen rajaa pitkin, esimerkiksi rakennuksen pohjan ympäri.", + "point_or_area_h": "Paikkapiste vai alue?", + "point_or_area": "Monet kohteet voi esittää niin paikkapisteinä kuin alueinakin. Sinun pitäisi kartoittaa esimerkiksi rakennukset ja maankäytölliset rajat alueiksi aina kun mahdollista. Voit sijoittaa paikkapisteitä rakennuksen alueen sisäpuolelle esittämään yrityksiä, palveluita ja muita rakennuksen sisällä olevia kohteita.", + "add_area_h": "Alueiden lisääminen", + "add_area_command": "Lisätäksesi alueen, klikkaa {area} **Alue** -painiketta työkalupalkissa kartan yläpuolella, tai paina pikanäppäintä `3`. Tämä muuttaa hiiren kursorin ristimäiseksi.", + "add_area_draw": "Seuraavaksi siirrä hiiren kursori yhteen alueen kulmista, ja paina {leftclick} hiiren vasenta painiketta tai `Välilyönti` -näppäintä. Lisää alueen rajan loput pisteet klikkaamalla tai `Välilyönti` -näppäimellä. Voit lähentää, loitontaa tai raahata karttaa piirtäessäsi.", + "add_area_finish": "Lopettaaksesi alueen piirtämisen, paina `{Enter}` tai klikkaa alueen rajan ensimmäistä tai viimeistä pistettä uudestaan.", + "square_area_h": "Muuttaminen suorakulmaiseksi", + "square_area_command": "Monilla aluemaisilla kohteilla kuten rakennuksilla on suorat kulmat. Muuttaaksesi alueen kulmat suoriksi, klikkaa alueen reunaa {rightclick} hiiren oikealla näppäimellä ja valitse avautuvasta pikavalikosta {orthogonalize} **Muuta suorakulmaiseksi**.", + "modify_area_h": "Alueiden muokkaaminen", + "modify_area_dragnode": "Alueet eivät usein ole oikean muotoisia, esimerkiksi rakennus ei vastaa ilmakuvaa. Muokataksesi alueen muotoa, ensin valitse alue {leftclick} hiiren vasemmalla painikkeella. Tämä saa alueen pisteet näkymään pieninä ympyröinä. Sitten voit raahata pisteet parempiin sijainteihin.", + "modify_area_addnode": "Voit myös luoda alueeseen uusia pisteitä joko {leftclick}**x2** kaksoisklikkaamalla alueen reunaa tai raahamalla alueen reunan pisteiden välissä olevia pikkukolmioita.", + "delete_area_h": "Alueiden poistaminen", + "delete_area": "Voit poistaa alueen jos se on täysin virheellinen, esimerkiksi rakennuksen jota ei ole oikeasti olemassa. Ole varovainen poistaessasi kohteita: ilmakuva saattaa olla vanhentunut ja virheelliseltä näyttävä rakennus taas uusi.", + "delete_area_command": "Poistaaksesi alueen, klikkaa aluetta {rightclick} hiiren oikealla näppäimellä ja valitse avautuvasta pikavalikosta {delete} **Poista**." + }, "relations": { - "relation_types_h": "Relaatiot" + "relation_types_h": "Relaatiotyypit" + }, + "gps": { + "title": "GPS-jäljet" + }, + "field": { + "restrictions": { + "title": "Kääntymisrajoitusten ohje", + "about": { + "title": "Yleistä", + "about": "Toiminnon avulla voit muokata kääntymisrajoituksia. Se näyttää mallin valitusta risteyksestä ja siihen yhdistetyistä teistä.", + "from_via_to": "Kääntymisrajoitus koostuu yhdestä \"MISTÄ-tiestä\", \"MIHIN-tiestä\" ja joko yhdestä \"KAUTTA-viivapisteestä\" tai yhdestä tai useammasta \"KAUTTA-tiestä\".", + "maxdist": "\"{distField}\"-liukusäätimellä voit valita, kuinka kaukaa haluat hakea yhdistyviä teitä.", + "maxvia": "\"{viaField}\"-liukusäätimellä voit valita, kuinka monta KAUTTA-väylää kääntymisrajoitukseen voi sisältyä (lähtökohtaisesti mahdollisimman vähän)." + }, + "inspecting": { + "title": "Tutkiminen", + "about": "Tarkista jonkin **MISTÄ**-väylän kääntymisrajoitukset viemällä hiiri sen päälle. Kaikki mahdolliset **MIHIN**-väylät korostetaan eri väreillä kääntymisrajoitusten tyypistä riippuen.", + "from_shadow": "{fromShadow} **MISTÄ-väylä**", + "allow_shadow": "{allowShadow} **MIHIN Sallittu**", + "restrict_shadow": "{restrictShadow} **MIHIN Rajoitettu**", + "only_shadow": "{onlyShadow} **MIHIN Vain**", + "restricted": "\"Rajoitettu\" tarkoittaa kääntymisrajoitusta, esimerkiksi \"Ei vasemmalle\".", + "only": "\"Vain\" tarkoittaa ainoaa sallittua ajosuuntaa, esimerkiksi \"Vain suoraan\"." + }, + "modifying": { + "title": "Muokkaaminen", + "about": "Aloita kääntymisrajoitusten muokkaaminen valitsemalla \"MISTÄ\"-väylä napsauttamalla sitä. Valittu väylä hehkuu sykkivästi ja mahdolliset **MIHIN**-kääntymissuunnat korostetaan nuolikuvakkeilla.", + "indicators": "Valitse sitten vaihtoehtojen sallittu, rajoitettu ja vain välillä napsauttamalla nuolikuvaketta.", + "allow_turn": "{allowTurn} **MIHIN Sallittu**", + "restrict_turn": "{restrictTurn} **MIHIN Rajoitettu**", + "only_turn": "{onlyTurn} **MIHIN Vain**" + }, + "tips": { + "title": "Vinkkejä", + "simple": "**Suosi yksinkertaisia rajoituksia**", + "simple_example": "Pyri välttämään monen väylän kautta kulkevia rajoituksia, jos sama rajoitus voidaan osoittaa pelkällä yhteen pisteeseen sidotulla rajoituksella.", + "indirect": "**Osa rajoituksista näkyy haaleampina ja epäsuora-merkinnällä**", + "indirect_example": "Rajoitukset johtuvat epäsuorasti toisesta rajoituksesta. Esimerkiksi \"Vain suoraan\" asettaa \"Ei käännöstä\" kaikkiin muihin suuntiin.", + "indirect_noedit": "Epäsuoria rajoituksia ei voi muokata. Muokkaa sen sijaan sen aiheuttavaa rajoitusta." + } + } } }, "intro": { @@ -785,6 +935,7 @@ "choose_cafe": "**Valitse {preset} listalta.**", "feature_editor": "Piste on nyt merkitty kahvilaksi. Kohdemuokkaimella voi täydentää sen tietoja.", "add_name": "OpenStreetMapissa minkään kentän täyttäminen ei ole pakollista, ja voit jättää kenttiä tyhjäksi.{br}Kuvitellaan, että tunnet tämän kahvilan paikallistuntemukselta ja muistat sen nimen. **Kirjoita kahvilalle nimi.**", + "add_close": "Kohdemuokkain tallentaa muutokset automaattisesti. **Kun olet kirjoittanut nimen, sulje kohdemuokkain painamalla Esc- tai Enter-näppäintä tai napsauttamalla {button}-painiketta.**", "reselect": "Usein paikkapisteet on jo lisätty kartalle, mutta niiden tiedot voivat olla vanhentuneita tai puutteellisia. Näitä tietoja voi korjata tai täydentää. **Valitse äsken luomasi kahvila napsauttamalla sitä.**", "update": "Lisätään kahvilalle tietoja. Voit vaihtaa nimen, lisätä keittiökulttuurin tai osoitteen. **Muuta kahvilan tietoja.**", "rightclick": "Napsauttamalla karttakohdetta hiiren oikealla painikkeella näkyviin tulee pikavalikko, jossa näytetään käytettävissä olevat muokkaustoiminnot. **Avaa pikavalikko napsauttamalla paikkapistettä hiiren oikealla painikkeella.**", @@ -955,6 +1106,12 @@ } } }, + "units": { + "meters": "{quantity} m", + "kilometers": "{quantity} km", + "square_meters": "{quantity} m²", + "square_kilometers": "{quantity} km²" + }, "presets": { "categories": { "category-barrier": { @@ -1340,6 +1497,9 @@ "cycleway:right": "Oikealla puolella" } }, + "dance/style": { + "label": "Tanssityylit" + }, "date": { "label": "Päivämäärä" }, @@ -1520,6 +1680,9 @@ "government": { "label": "Tyyppi" }, + "grape_variety": { + "label": "Rypälelajikkeet" + }, "handicap": { "label": "Tasoitussuositus (HCP)", "placeholder": "1-18" @@ -1533,6 +1696,9 @@ "healthcare": { "label": "Tyyppi" }, + "healthcare/speciality": { + "label": "Erikoisalat" + }, "height": { "label": "Korkeus (metreinä)" }, @@ -1571,6 +1737,12 @@ "information": { "label": "Tyyppi" }, + "inscription": { + "label": "Sisältyvä kaiverrus/kirjoitus" + }, + "intermittent": { + "label": "Kuivuminen ajoittain" + }, "internet_access": { "label": "Internet-yhteys", "options": { @@ -1587,6 +1759,9 @@ "internet_access/ssid": { "label": "SSID-verkkonimi" }, + "kerb": { + "label": "Reunakiveyksen muoto" + }, "lamp_type": { "label": "Tyyppi" }, @@ -1773,6 +1948,7 @@ "label": "Yksisuuntaisuus", "options": { "no": "Ei", + "reversible": "Epäsäännöllisesti vaihtuva", "undefined": "Oletettavasti ei", "yes": "Kyllä" } @@ -1780,7 +1956,9 @@ "oneway_yes": { "label": "Yksisuuntaisuus", "options": { + "alternating": "Säännöllisesti vaihtuva", "no": "Ei", + "reversible": "Epäsäännöllisesti vaihtuva", "undefined": "Oletettavasti kyllä", "yes": "Kyllä" } @@ -1864,6 +2042,10 @@ "plant": { "label": "Kasvi" }, + "plant/output/electricity": { + "label": "Voiman ulostulo", + "placeholder": "500 MW, 1000 MW, 2000 MW..." + }, "playground/max_age": { "label": "Yläikäraja" }, @@ -1902,6 +2084,9 @@ "recycling_accepts": { "label": "Keräys" }, + "ref/isil": { + "label": "ISIL-tunnus" + }, "ref_aeroway_gate": { "label": "Porttinumero" }, @@ -2047,6 +2232,18 @@ "source": { "label": "Lähteet" }, + "sport": { + "label": "Urheilulajit" + }, + "sport_ice": { + "label": "Urheilulajit" + }, + "sport_racing_motor": { + "label": "Urheilulajit" + }, + "sport_racing_nonmotor": { + "label": "Urheilulajit" + }, "stars": { "label": "Tähdet" }, @@ -2084,12 +2281,18 @@ "studio": { "label": "Tyyppi" }, + "substance": { + "label": "Sisältö" + }, "substation": { "label": "Tyyppi" }, "supervised": { "label": "Valvonta" }, + "support": { + "label": "Pidike" + }, "surface": { "label": "Päällyste" }, @@ -2108,7 +2311,13 @@ "label": "Valvontavyöhyke" }, "switch": { - "label": "Tyyppi" + "label": "Tyyppi", + "options": { + "circuit_breaker": "Sulake", + "disconnector": "Erotin", + "earthing": "Maadoitus", + "mechanical": "Mekaaninen kytkin" + } }, "tactile_paving": { "label": "Huomioreuna näkövammaisille" @@ -2125,6 +2334,7 @@ "toilets/disposal": { "label": "Tyhjennystekniikka", "options": { + "bucket": "Ämpäri", "chemical": "Kemikaalinen", "flush": "Huuhtelu", "pitlatrine": "Peittoaines" @@ -2139,11 +2349,26 @@ "tourism": { "label": "Tyyppi" }, + "tourism_attraction": { + "label": "Tyyppi" + }, + "tower/construction": { + "label": "Rakenne", + "placeholder": "Harusvaijerit, Ristikko..." + }, "tower/type": { "label": "Tyyppi" }, "tracktype": { - "label": "Raidetyyppi" + "label": "Raidetyyppi", + "options": { + "grade1": "Kiinteä: päällystetty tai voimakkaasti pakkaantunut, kova pinta", + "grade2": "Enimmäkseen kiinteä: soraa/kiveä johon sekoittunut hieman pehmeää maa-ainesta", + "grade3": "Sekoitus kovaa ja pehmeää maa-ainesta", + "grade4": "Enimmäkseen pehmeä: multaa/hiekkaa/ruohoa johon sekoittunut hieman kovaa maa-ainesta", + "grade5": "Pehmeä: multaa/hiekkaa/ruohoa" + }, + "placeholder": "Kiinteä, Enimmäkseen kiinteä, Pehmeä..." }, "trade": { "label": "Tyyppi" @@ -2183,9 +2408,6 @@ "tunnel": { "label": "Tyyppi" }, - "vending": { - "label": "Tavaroiden tyyppi" - }, "visibility": { "label": "Näkyvyys", "options": { @@ -2205,6 +2427,7 @@ "volcano/type": { "label": "Tulivuorilaji", "options": { + "scoria": "Tuhkakartio", "shield": "Kilpitulivuori", "stratovolcano": "Kerrostulivuori" } @@ -2364,7 +2587,8 @@ "name": "Eläinkatos" }, "amenity/arts_centre": { - "name": "Taidekeskus" + "name": "Taidekeskus", + "terms": "taidekeskus, taidetalo, taidekoulu, kulttuurikeskus, kulttuuritalo, esityspaikka, esiintymispaikka, näytöspaikka, poikkitaiteellinen, teatteri, live, stand-up, konsertti, galleria, näyttely, nykytaide" }, "amenity/atm": { "name": "Pankkiautomaatti", @@ -2461,7 +2685,8 @@ "name": "Korkeakoulualue (college)" }, "amenity/community_centre": { - "name": "Yhteisökeskus" + "name": "Yhteisökeskus", + "terms": "yhteisökeskus, yhdistys, järjestö, kylätalo, kyläkeskus, seurantalo, seurojentalo, työväentalo, kerhotalo, kerhohuoneisto, kerhokeskus, klubi, monitoimitalo, nuorisotila, nuorisotalo, kokoontumispaikka, kokouspaikka, kokoustila, konferenssi, palaveri, neuvottelu, tapahtumapaikka, juhlatila, hääpaikka, sosiaalitila, avoin, julkinen" }, "amenity/compressed_air": { "name": "Ilmanpainepiste", @@ -2490,7 +2715,8 @@ "terms": "taistelulaji, taistelu, itsepuolustus, laji, lajit, urheilu, kamppailu, kamppailulaji, itsepuolustuslaji, taekwondo, taekwon-do, judo, karate, taiji, jujutsu, aikido, kravmaga, krav maga, hapkido" }, "amenity/drinking_water": { - "name": "Juomavesipiste" + "name": "Juomavesipiste", + "terms": "juomavesi, juoma-automaatti, juomapaikka, vesipiste, vesiautomaatti, vedenjakelu, hana, kaivo" }, "amenity/driving_school": { "name": "Autokoulu", @@ -2540,7 +2766,8 @@ "terms": "jäätelö, pehmis, jäätelön, pehmiksen, jäätelökioski, jätskikioski, jäätelöbaari, kioski, puoti, kauppa, liike, myymälä, putiikki, baari" }, "amenity/internet_cafe": { - "name": "Internetkahvila" + "name": "Internetkahvila", + "terms": "nettikahvila, wlan, wifi" }, "amenity/kindergarten": { "name": "Esikoulu", @@ -2561,7 +2788,8 @@ "name": "Moottoripyöräpysäköinti" }, "amenity/music_school": { - "name": "Musiikkikoulu" + "name": "Musiikkikoulu", + "terms": "musiikkikoulu, musiikkileikkikoulu, musiikkiopetus, musiikkiopettaja, musiikkioppilaitos, musiikkiopisto, muskari, soitonopetus, laulunopetus, konservatorio, taideakatemia, kuoro, yhtye, bändi, orkesteri, kitara, piano" }, "amenity/nightclub": { "name": "Yökerho" @@ -2578,7 +2806,8 @@ "terms": "pysäköinti, parkkipaikka, pysäköintipaikka, parkki, pysäköintitalo, parkkitalo, ulosajo, sisäänajo, ajo, ulos, sisään, ramppi" }, "amenity/parking_space": { - "name": "Pysäköintitila" + "name": "Pysäköintitila", + "terms": "pysäköinti, pysäköintipaikka, pysäköintiruutu, parkkipaikka, parkkeeraus, autopysäköinti, autopaikka" }, "amenity/pavilion": { "name": "Paviljonki" @@ -2589,29 +2818,39 @@ }, "amenity/place_of_worship": { "name": "Rukoilupaikka", - "terms": "Uskonnollinen rakennus, Kirkkorakennus" + "terms": "Uskonnollinen rakennus, Kirkkorakennus, seurakuntatalo, temppeli, luostari, munkki, nunna, katedraali, kappeli, uhrauspaikka, uhripaikka, kulttipaikka, pyhäkkö, pyhättö, pyhä, jumalanpalvelus, rukoushuone, valtakunnansali, loosi, seita, keskus" }, "amenity/place_of_worship/buddhist": { - "name": "Buddhalaistemppeli" + "name": "Buddhalaistemppeli", + "terms": "buddhalainen, stupa, pagoda, luostari, zendo, dojo, meditaatio" }, "amenity/place_of_worship/christian": { "name": "Kirkko", - "terms": "Kirkko, Pyhäkkö, pyhättö, Rukoushuone, Stupa, Tsasouna, Moskeija, Temppeli" + "terms": "Kirkko, kirkkosali, tuomiokirkko, kappeli, kotikirkko, leirikirkko, katedraali, Pyhäkkö, pyhättö, Rukoushuone, Tsasouna, Temppeli, seurakunta" }, "amenity/place_of_worship/hindu": { "name": "Hindutemppeli", - "terms": "hindulaisuus, hindut, hindu, temppeli, uskonto, uskonnollinen, rukoilu, intia" + "terms": "hindulaisuus, hindut, hindu, temppeli, uskonto, uskonnollinen, rukoilu, intia, jooga" }, "amenity/place_of_worship/jewish": { "name": "Synagoga", - "terms": "synagooga" + "terms": "synagooga, juutalainen" }, "amenity/place_of_worship/muslim": { "name": "Moskeija", - "terms": "Moskeija" + "terms": "minareetti, islam, islamilainen, muslimi" }, "amenity/place_of_worship/shinto": { - "name": "Å intolainen pyhäkkö" + "name": "Å intolainen pyhäkkö", + "terms": "Å intopyhäkkö, pyhättö, shintolainen, japanilainen, kami, asuinpaikka, jumala, henki, torii, honden, shinden, haiden, heiden, seremonia, uhrihalli" + }, + "amenity/place_of_worship/sikh": { + "name": "Sikhitemppeli", + "terms": "sikhiläinen, gurdwara, gurudwara" + }, + "amenity/place_of_worship/taoist": { + "name": "Taolainen temppeli", + "terms": "taolaistemppeli, kungfutselainen, kiinalainen, luostari" }, "amenity/planetarium": { "name": "Planetaario" @@ -2632,7 +2871,8 @@ "name": "Vankila-alue" }, "amenity/pub": { - "name": "Pubi" + "name": "Pubi", + "terms": "pubi, pub, kapakka, saluuna, kievari, taverna, krouvi, yöravintola, olutravintola, oluttupa, kaljaravintola, alkoholi, baari" }, "amenity/public_bath": { "name": "Kylpylaitos" @@ -2655,7 +2895,7 @@ }, "amenity/restaurant": { "name": "Ravintola", - "terms": "Ravintola, Ruokaravintola, Bistro, Krouvi, Pizzeria, Ruokala" + "terms": "Ravintola, Ruokaravintola, Bistro, Krouvi, Pizzeria, Pitseria, Ruokala" }, "amenity/sanitary_dump_station": { "name": "Asuntoautojen jäteveden tyhjennyspiste" @@ -2668,19 +2908,22 @@ "name": "Autonromuttamo" }, "amenity/shelter": { - "name": "Katos" + "name": "Katos", + "terms": "katos, katettu, kota, kotus, korsu, laavu, maja, koppi, suoja, tauko, taukopaikka, taukokatos, piknik, picnic, retki, lepo, lepääminen, pukukoppi, pukeutuminen, bussi, linja-auto, kalliolippa" }, "amenity/shower": { "name": "Suihku" }, "amenity/smoking_area": { - "name": "Tupakointialue" + "name": "Tupakointialue", + "terms": "tupakkapaikka" }, "amenity/social_facility": { "name": "Sosiaalipalvelu" }, "amenity/social_facility/food_bank": { - "name": "Ruokapankki" + "name": "Ruokapankki", + "terms": "ruokajako, ruokajakelu, leipäjono" }, "amenity/social_facility/group_home": { "name": "Vanhainkoti", @@ -2723,7 +2966,8 @@ "name": "Yliopistoalue" }, "amenity/vending_machine": { - "name": "Myyntiautomaatti" + "name": "Myyntiautomaatti", + "terms": "automaatti, myyntiautomaatti, jakeluautomaatti, palautusautomaatti, pullonpalautus" }, "amenity/vending_machine/cigarettes": { "name": "Tupakka-automaatti", @@ -2795,14 +3039,16 @@ "name": "Alue" }, "area/highway": { - "name": "Tien päällyste" + "name": "Tien päällyste", + "terms": "pinnoite, pinta" }, "attraction/amusement_ride": { "name": "Huvipuistolaite", "terms": "huvipuisto, elämyspuisto, laite, härveli, vuoristorata, karuselli, vimpain, vitkutin, huvilaite" }, "attraction/animal": { - "name": "Eläin" + "name": "Eläin", + "terms": "eläintarha, eläinpuisto, teemapuisto, leijona, tiikeri, karhu" }, "attraction/big_wheel": { "name": "Maailmanpyörä", @@ -2851,7 +3097,8 @@ "name": "Muuri" }, "barrier/block": { - "name": "Este" + "name": "Este", + "terms": "betoniporsas" }, "barrier/bollard": { "name": "Sulkutolppa", @@ -2913,7 +3160,8 @@ "name": "Hallinnollinen raja" }, "building": { - "name": "Rakennus" + "name": "Rakennus", + "terms": "talo" }, "building/apartments": { "name": "Kerrostalo" @@ -2936,6 +3184,9 @@ "building/church": { "name": "Kirkkorakennus" }, + "building/civic": { + "name": "Kunnallinen rakennus" + }, "building/college": { "name": "Korkeakoulurakennus (college)" }, @@ -2955,6 +3206,12 @@ "building/entrance": { "name": "Sisään- tai uloskäynti" }, + "building/farm": { + "name": "Maatilan asuinrakennus" + }, + "building/farm_auxiliary": { + "name": "Maatilarakennus" + }, "building/garage": { "name": "Autotalli", "terms": "autotalli, autonsäilytys, autohalli, autovarasto, auto" @@ -2988,13 +3245,15 @@ "name": "Esikoulurakennus" }, "building/mosque": { - "name": "Moskeijarakennus" + "name": "Moskeijarakennus", + "terms": "islamilainen, muslimi" }, "building/public": { "name": "Julkinen rakennus" }, "building/residential": { - "name": "Asuinrakennus" + "name": "Asuinrakennus", + "terms": "asuintalo" }, "building/retail": { "name": "Liikerakennus" @@ -3012,6 +3271,9 @@ "building/semidetached_house": { "name": "Paritalo" }, + "building/service": { + "name": "Palvelurakennus" + }, "building/shed": { "name": "Vaja", "terms": "vaja, mökki, liiteri" @@ -3085,20 +3347,23 @@ "name": "Kelloseppä" }, "craft/confectionery": { - "name": "Makeiskonditoria" + "name": "Makeiskonditoria", + "terms": "karkkitehdas, karkki, karamelli" }, "craft/distillery": { - "name": "Tislaam", + "name": "Tislaamo", "terms": "viina, viini, alkoholi, polttaa, poltto, polttamo, tynnyri, juoma" }, "craft/dressmaker": { - "name": "ompelija" + "name": "ompelija", + "terms": "ompelimo" }, "craft/electrician": { "name": "Sähköasentaja" }, "craft/gardener": { - "name": "Puutarhuri" + "name": "Puutarhuri", + "terms": "puutarhan hoitaja, puutarha, hoitaja" }, "craft/glaziery": { "name": "Lasinpuhallus" @@ -3132,7 +3397,8 @@ "name": "optikko" }, "craft/painter": { - "name": "Maalari" + "name": "Maalari", + "terms": "maalaaja" }, "craft/photographer": { "name": "Valokuvaaja" @@ -3309,7 +3575,8 @@ "name": "Terveyspalvelu" }, "healthcare/alternative": { - "name": "Vaihtoehtolääketiede" + "name": "Vaihtoehtolääketiede", + "terms": "näennäishoito, vaihtoehto, vaihtoehtoinen, lääketiede, hoito" }, "healthcare/alternative/chiropractic": { "name": "Kiropraktikko" @@ -3339,7 +3606,8 @@ "name": "Optometri" }, "healthcare/physiotherapist": { - "name": "Fysioterapeutti" + "name": "Fysioterapeutti", + "terms": "fysioterapia" }, "healthcare/podiatrist": { "name": "Jalkaterapeutti" @@ -3488,7 +3756,8 @@ "name": "Yhdystien ramppi" }, "highway/track": { - "name": "Huoltamaton pikkutie" + "name": "Huoltamaton pikkutie", + "terms": "pikkutie, hiekkatie, metsätie, metsäkonetie, metsä, metsäkone, ura, ajoväylä" }, "highway/traffic_mirror": { "name": "Tiepeili", @@ -3514,7 +3783,8 @@ "name": "Syrjätie/luokittelematon tie" }, "historic": { - "name": "Historiallinen paikka" + "name": "Historiallinen paikka", + "terms": "historia, historiallinen, muinainen, arkeologinen, vanha, raunio, rauniot, raunioitunut, hauta, hautapaikka, muinaishauta, asuinpaikka, löytöpaikka, rajakivi, kartano, tienvarsiristi, hylky, maanmittaus, monumentti, muistomerkki, kivikautinen, pronssikautinen, rautakautinen, keskiaikainen" }, "historic/archaeological_site": { "name": "Arkeologinen paikka" @@ -3532,17 +3802,19 @@ "name": "Iso muistomerkki" }, "historic/ruins": { - "name": "Rauniot" + "name": "Rauniot", + "terms": "raunio, raunioitunut, käyttämätön, historiallinen" }, "historic/tomb": { "name": "Hautakammio" }, "historic/wayside_cross": { - "name": "Tienvarren risti" + "name": "Tienvarsiristi", + "terms": "tienvarren risti, tienvarren, risti, tienvarsi, piennar, kristillinen" }, "historic/wayside_shrine": { "name": "Tienvarsialttari", - "terms": "tienvarsi, kadunvarsi, varsi, tie, katu, rukoilupaikka, pyhättö, uskonnot, uskonto, kirkko, pyhä, uhripaikka, uhrauspaikka, uhrilahja" + "terms": "tienvarsi, kadunvarsi, varsi, tie, katu, rukoilupaikka, pyhättö, uskonnot, uskonto, kirkko, pyhä, uhripaikka, uhrauspaikka, uhrilahja, alttari" }, "junction": { "name": "Risteys" @@ -3551,10 +3823,12 @@ "name": "Maankäyttö" }, "landuse/allotments": { - "name": "Yhteisöpuutarha" + "name": "Yhteisöpuutarha", + "terms": "siirtolapuutarha" }, "landuse/aquaculture": { - "name": "Vesiviljely" + "name": "Vesiviljely", + "terms": "akvakulttuuri" }, "landuse/basin": { "name": "Vesiallas" @@ -3607,7 +3881,7 @@ }, "landuse/meadow": { "name": "Niitty", - "terms": "heinämaa, aukio" + "terms": "heinämaa, aukio, keto, aho, kesanto, kukka, luonto, luonnon, luonnollinen" }, "landuse/military": { "name": "Sotilasalue" @@ -3699,6 +3973,10 @@ "name": "Tanssipaikka", "terms": "tanssilava, tanssilavat, lavatanssi, lavatanssiminen, tanssi, tanssit, tanssiminen" }, + "leisure/dancing_school": { + "name": "Tanssikoulu", + "terms": "tanssiopisto" + }, "leisure/dog_park": { "name": "Koirapuisto", "terms": "koira, koirat, koira-alue, koiranulkoilutusalue, koirahäkki, koirapuisto" @@ -3726,7 +4004,8 @@ "name": "Golfkenttä" }, "leisure/hackerspace": { - "name": "Koodausnurkkaus" + "name": "Koodausnurkkaus", + "terms": "hackerspace, hackspace, makerspace, hacklab, häckläb, ohjelmointi, ohjelmoija, koodaus, koodaaja, teknologia, rakentelu, värkkäys, värkkäily, paja, työpaja, tila, julkinen, labra, verstas, kaupunkiverstas" }, "leisure/horse_riding": { "name": "Ratsastusalue", @@ -3755,7 +4034,8 @@ "terms": "piknik, eväsretki, ulkoilu, ulkopöytä, pöytä, puupöytä, penkki, ruokailu, ulkoruokailu, ulkoruokailupöytä, ulkoruokapöytä" }, "leisure/pitch": { - "name": "Urheilukenttä" + "name": "Urheilukenttä", + "terms": "pallokenttä, palloilukenttä, hiekkakenttä, nurmikenttä" }, "leisure/pitch/american_football": { "name": "Amerikkalainen jalkapallo -kenttä" @@ -3821,6 +4101,10 @@ "name": "Veneramppi", "terms": "veneramppi, vesillelaskupaikka, veneenlaskupaikka, vene, järveenlaskupaikka, järviramppi" }, + "leisure/sports_centre": { + "name": "Liikuntakeskus", + "terms": "kuntokeskus, urheilukeskus, urheiluhalli, halli, kompleksi, kokonaisuus, monilajinen" + }, "leisure/sports_centre/swimming": { "name": "Uimahalli", "terms": "uimahalli, kylpylä, uima-allas, uintikeskus, uinti, uiminen, vesi, vesiurheilu, urheilu, vesiurheilukeskus, vesiurheiluhalli" @@ -3836,13 +4120,15 @@ "name": "Kilparata (ei moottoriurheilu)" }, "leisure/water_park": { - "name": "Vesipuisto" + "name": "Vesipuisto", + "terms": "uinti, kylpylä" }, "line": { "name": "Viiva" }, "man_made": { - "name": "Ihmisen tekemä" + "name": "Ihmisen tekemä", + "terms": "keinotekoinen" }, "man_made/adit": { "name": "Vaakasuoran tunnelin suuaukko" @@ -3860,7 +4146,8 @@ "name": "Nosturi" }, "man_made/cutline": { - "name": "Metsänraja" + "name": "Metsänraja", + "terms": "hakkuuraja" }, "man_made/embankment": { "name": "Penkere" @@ -3882,6 +4169,9 @@ "man_made/mast": { "name": "Masto" }, + "man_made/monitoring_station": { + "name": "Havaintoasema" + }, "man_made/observation": { "name": "Näkötorni", "terms": "observatorio, näköalatasanne, näköala, maisema, maisematorni" @@ -3961,7 +4251,8 @@ "name": "Luolan suuaukko" }, "natural/cliff": { - "name": "Kallionjyrkänne" + "name": "Kallionjyrkänne", + "terms": "kallio, jyrkänne, kallioseinämä, seinämä, pystyseinämä, jyrkkä rinne, rinne, pudotus, mäki, penger, törmä, töyräs" }, "natural/coastline": { "name": "Rannikko", @@ -3984,7 +4275,8 @@ "terms": "Huippu, Vuorenhuippu, Korkein kohta, Vuoren huippu" }, "natural/ridge": { - "name": "Harju" + "name": "Harju", + "terms": "harju, reunamuodostuma, salpausselkä, harjanne, selänne, mäki" }, "natural/saddle": { "name": "Sola", @@ -4036,7 +4328,8 @@ "name": "Ei uloskäyntiä" }, "office": { - "name": "Toimisto" + "name": "Toimisto", + "terms": "konttori, toimipaikka, liikehuoneisto, virasto" }, "office/accountant": { "name": "Tilintarkastustoimisto", @@ -4064,7 +4357,8 @@ "name": "Hyväntekeväisyysjärjestö" }, "office/company": { - "name": "Yritystoimisto" + "name": "Yritystoimisto", + "terms": "yritys, yrittäjä, yhtiö, firma, oy, osakeyhtiö, kommandiittiyhtiö, tmi, toiminimi, analyytikko, edustusliike, finanssipalvelu, holdingyhtiö, henkilöstöyhtiö, isännöinti, isännöijä, jätehuoltoyhtiö, kahvipaahtamo, konsultti, konsultointi, koulutusyritys, kultaseppä, käännöstoimisto, liikenneyhtiö, taksiyritys, markkinatutkimus, meklari, muotoilu, musiikkistudio, pörssi, pörssiyhtiö, rakennusliike, rakentaja, treidaaja, yritysrahoitus, sijoitusyhtiö, sijoittaja, teollisuusyritys, uutistoimisto, vartiointiliike, viestintä, yritysviestintä, välittäjä" }, "office/coworking": { "name": "Yhteistyöskentelytila" @@ -4129,7 +4423,10 @@ }, "office/ngo": { "name": "Kansalaisjärjestö", - "terms": "kansalaisjärjestö, järjestö, kansanliike, kansanjärjestö, kansalaisjärjestötoimisto, toimisto" + "terms": "kansalaisjärjestö, järjestö, kansanliike, kansanjärjestö, kansalaisjärjestötoimisto, toimisto, kolmas sektori, kolmannen sektorin, vapaaehtois" + }, + "office/notary": { + "name": "Notaari" }, "office/physician": { "name": "Lääkäri" @@ -4159,6 +4456,10 @@ "office/travel_agent": { "name": "Matkatoimisto" }, + "office/water_utility": { + "name": "Vesilaitos", + "terms": "vesipalvelu, vesihuoltolaitos, vesihuolto, vedenjakelu, vesiosuuskunta, vesikunta, viemäröintilaitos, vesi, toimisto" + }, "piste": { "name": "Laskettelurinne/hiihtolatu", "terms": "laskettelu, alamäki, mäki, laskettelumäki, rinne, latu, hiihtolatu, urheilu, kuntoilu, liikunta, talvi, talviliikunta, talviurheilu, talvikuntoilu" @@ -4174,7 +4475,8 @@ "name": "Maatila" }, "place/hamlet": { - "name": "Pikkukylä" + "name": "Pikkukylä", + "terms": "kulmakunta, pieni kylä, sivukylä, kylä, paikkakunta, paikannimi, takamaa, seutu, naapurusto, taloryhmä, taajama, haja-asutus" }, "place/island": { "name": "Saari", @@ -4209,12 +4511,33 @@ "place/village": { "name": "Kylä" }, + "playground/balance_beam": { + "name": "Nuorallakävely" + }, + "playground/basket_swing": { + "name": "Korikeinu" + }, + "playground/rocker": { + "name": "Keinuhevonen" + }, + "playground/roundabout": { + "name": "Karuselli" + }, "playground/sandpit": { "name": "Hiekkalaatikko" }, + "playground/seesaw": { + "name": "Keinulauta" + }, "playground/slide": { "name": "Liukumäki" }, + "playground/structure": { + "name": "Kiipeilyteline" + }, + "playground/swing": { + "name": "Keinu" + }, "point": { "name": "Paikkapiste" }, @@ -4260,7 +4583,8 @@ "terms": "ilmarata, köysirata, gondoli, hissi, laituri, pysäkki, alue" }, "public_transport/linear_platform_bus": { - "name": "Linja-autopysäkki/-laituri" + "name": "Linja-autopysäkki/-laituri", + "terms": "linja-autopysäkki, bussipysäkki, pysäkki, pysähdyspaikka, odotuspaikka, linja-auto, bussi, dösis, dösäri, levennys, pysäkkimerkki, katos, pikavuoro, linja-autolaituri, bussilaituri, laituri, joukkoliikenne" }, "public_transport/linear_platform_ferry": { "name": "Laivapaikka/-matkustajalaituri" @@ -4289,7 +4613,8 @@ "terms": "ilmarata, gondoli, hissi, laituri, pysäkki, alue" }, "public_transport/platform_bus": { - "name": "Linja-autopysäkki/-laituri" + "name": "Linja-autopysäkki/-laituri", + "terms": "linja-autopysäkki, bussipysäkki, pysäkki, pysähdyspaikka, odotuspaikka, linja-auto, bussi, dösis, dösäri, levennys, pysäkkimerkki, katos, pikavuoro, linja-autolaituri, bussilaituri, laituri, joukkoliikenne" }, "public_transport/platform_ferry": { "name": "Laivapaikka/-matkustajalaituri" @@ -4456,10 +4781,12 @@ "name": "Lauttareitti" }, "shop": { - "name": "Kauppa" + "name": "Kauppa", + "terms": "myymälä, liike, market, marketti, puoti, putiikki, tavaratalo" }, "shop/alcohol": { - "name": "Alkoholimyymälä" + "name": "Alkoholimyymälä", + "terms": "viina, olut, viini, viinikellari, juoma" }, "shop/anime": { "name": "Anime-myymälä", @@ -4519,7 +4846,8 @@ "name": "Kirjakauppa" }, "shop/boutique": { - "name": "Muotiliike" + "name": "Muotiliike", + "terms": "vaate, asuste" }, "shop/butcher": { "name": "Lihakauppias" @@ -4548,7 +4876,8 @@ "name": "Juustopuoti" }, "shop/chemist": { - "name": "Apteekki-luontaistuotemyymälä" + "name": "Apteekki-luontaistuotemyymälä", + "terms": "lääke, luontaislääkintä, terveys" }, "shop/chocolate": { "name": "Suklaapuoti" @@ -4675,7 +5004,8 @@ "name": "Hifi-myymälä" }, "shop/interior_decoration": { - "name": "Sisustusmyymälä" + "name": "Sisustusmyymälä", + "terms": "huonekalu, kalustus, kaluste, koriste, esine, kauppa, liike" }, "shop/jewelry": { "name": "Jalokiviliike" @@ -4738,7 +5068,7 @@ }, "shop/organic": { "name": "Luomumyymälä", - "terms": "luomu, luomuruoka, ympäristö, ympäristöystävällisyys, ruoka, ruokakauppa" + "terms": "luomu, luomuruoka, ympäristö, ympäristöystävällisyys, ruoka, ruokakauppa, luonnonmukainen" }, "shop/outdoor": { "name": "Ulkoilmamyymälä" @@ -4772,7 +5102,8 @@ "terms": "radio, elektroniikka, komponentti, tekninen, tekniikka, osa, osat, varaosa" }, "shop/religion": { - "name": "Uskonnollinen myymälä" + "name": "Uskonnollinen myymälä", + "terms": "kristillinen, kauppa, hengellinen, henkinen" }, "shop/scuba_diving": { "name": "Sukellusliike", @@ -4783,7 +5114,7 @@ }, "shop/second_hand": { "name": "Käytetyn tavaran kauppa", - "terms": "kirpputori, myymälä, liike, kauppa, second hand, käytetty, käytettyä, käytetyn, tavara, jälleenmyynti, vertaiskauppa" + "terms": "kirpputori, myymälä, liike, kauppa, second hand, käytetty, käytettyä, käytetyn, tavara, jälleenmyynti, vertaiskauppa, osto- ja myyntiliike" }, "shop/shoes": { "name": "Kenkäkauppa" @@ -4877,13 +5208,14 @@ }, "tourism/artwork": { "name": "Taideteos", - "terms": "taideteos, patsas, veistos, taide, taiteellinen, teos" + "terms": "taideteos, patsas, veistos, taide, taiteellinen, teos, installaatio" }, "tourism/attraction": { "name": "Turistikohde" }, "tourism/camp_site": { - "name": "Leirintäalue" + "name": "Leirintäalue", + "terms": "leiripaikka, karavaanialue, caravan park, matkailuvaunualue, telttailualue, camping " }, "tourism/caravan_site": { "name": "Asuntoautopysäköinti" @@ -4893,7 +5225,8 @@ "terms": "kesämökki, lomamökki, mökki, asunto, talo, kesä, vapaa-ajan, vapaa-aika" }, "tourism/gallery": { - "name": "Taidegalleria" + "name": "Taidegalleria", + "terms": "taidenäyttely, taide, näyttely, näyttelytila, galleria, galleriatila, kokoelma, maalaus, valokuva" }, "tourism/guest_house": { "name": "Majatalo" @@ -4908,13 +5241,15 @@ "name": "Infopiste" }, "tourism/information/board": { - "name": "Opastaulu" + "name": "Opastaulu", + "terms": "opastaulu, opaskartta, opaste, kartta, ilmoitustaulu, kiinteistötaulu, nimikilpi, aikataulu, bussi, juna, historia, luonto, kuulutukset" }, "tourism/information/guidepost": { "name": "Tienviitta" }, "tourism/information/map": { - "name": "Kartta" + "name": "Kartta", + "terms": "opaskartta, maastokartta, topografia, katukartta, karttataulu, pohjapiirros, opastaulu, reittiohje, havainnekuva, kuva, grafiikka, taulu" }, "tourism/information/office": { "name": "Matkailuneuvonta", @@ -4936,8 +5271,13 @@ "tourism/viewpoint": { "name": "Näköalapaikka" }, + "tourism/wilderness_hut": { + "name": "Autiotupa", + "terms": "tupa, kota, mökki, maja, kämppä, kammi, pirtti, autiotupa, vuokra, vuokraus, varaus, kota, erä, erämaa, eräkämppä, yö, yöpaikka, yöpymispaikka, leiripaikka, retki, vaellus, luonto, metsä" + }, "tourism/zoo": { - "name": "Eläintarha" + "name": "Eläintarha", + "terms": "eläinpuisto, kotieläinpiha" }, "traffic_calming": { "name": "Hidaste", @@ -4994,17 +5334,9 @@ "type/restriction/no_u_turn": { "name": "Ei saa tehdä U-käännöstä" }, - "type/restriction/only_left_turn": { - "name": "Saa kääntyä vain vasemmalle" - }, - "type/restriction/only_right_turn": { - "name": "Saa kääntyä vain oikealle" - }, - "type/restriction/only_straight_on": { - "name": "Ei saa kääntyä lainkaan" - }, "type/route": { - "name": "Reitti" + "name": "Reitti", + "terms": "matkareitti, rengasreitti, lenkki, kulkuohjeet, ohjaus, reititys, navigointi, kurssi, traili" }, "type/route/bicycle": { "name": "Pyöräilyreitti" @@ -5023,7 +5355,8 @@ "name": "Kävelyreitti" }, "type/route/hiking": { - "name": "Vaellusreitti" + "name": "Vaellusreitti", + "terms": "vaellus, patikointi, patikka, maasto, retkeily, samoilu, reitti" }, "type/route/horse": { "name": "Ratsastusreitti" @@ -5035,7 +5368,8 @@ "name": "Putkilinja" }, "type/route/piste": { - "name": "Hiihtoreitti" + "name": "Hiihtoreitti", + "terms": "latu, latureitti, talviurheilu, reitistö, hiihtolenkki, hiihtäminen" }, "type/route/power": { "name": "Voimalinja" @@ -5130,8 +5464,7 @@ "DigitalGlobe-Premium-vintage": { "attribution": { "text": "Käyttöehdot ja palaute" - }, - "description": "Kuva-alueet ja kuvauspäivämäärät. Aineisto on käytettävissä suurennostasolla 14 ja lähempänä." + } }, "DigitalGlobe-Standard": { "attribution": { @@ -5143,8 +5476,7 @@ "DigitalGlobe-Standard-vintage": { "attribution": { "text": "Käyttöehdot ja palaute" - }, - "description": "Kuvien rajat ja kuvauspäivät. Merkit näkyvät zoomaus tasolla 14 tai isommalla. " + } }, "EsriWorldImagery": { "attribution": { @@ -5260,7 +5592,6 @@ "attribution": { "text": "basemap.at" }, - "description": "Taustakartta perustuu Itävallan hallinnon julkaisemaan aineistoon.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -5318,6 +5649,9 @@ } }, "tf-cycle": { + "attribution": { + "text": "Kartat © Thunderforest, Aineisto © OpenStreetMapin tekijät" + }, "name": "Thunderforest OpenCycleMap" }, "tf-landscape": { diff --git a/vendor/assets/iD/iD/locales/fr.json b/vendor/assets/iD/iD/locales/fr.json index a212982ac..866728eb5 100644 --- a/vendor/assets/iD/iD/locales/fr.json +++ b/vendor/assets/iD/iD/locales/fr.json @@ -1,5 +1,10 @@ { "fr": { + "icons": { + "information": "info", + "remove": "supprimer", + "undo": "annuler" + }, "modes": { "add_area": { "title": "Polygone", @@ -145,7 +150,9 @@ "vertex": "connexion d'un chemin à un autre chemin.", "line": "connexion d'un chemin à une ligne.", "area": "connexion d'un chemin à un polygone." - } + }, + "relation": "Ces éléments ne peuvent être connectés car ils ont des rôles de relations conflictuels.", + "restriction": "Ces éléments ne peuvent être connectés car cela endommagerait une relation \"{relation}\"." }, "disconnect": { "title": "Séparer", @@ -402,6 +409,7 @@ "key": "H", "title": "Historique", "selected": "{n} dans la sélection", + "no_history": "Pas d'historique (Nouvel élément)", "version": "Version", "last_edit": "Dernière édition", "edited_by": "Edité par", @@ -639,15 +647,20 @@ } }, "success": { - "edited_osm": "OSM modifié !", "just_edited": "Vous avez participé à OpenStreetMap !", - "view_on_osm": "Visualiser sur OSM", - "facebook": "Partager sur Facebook", - "twitter": "Partager sur Twitter", - "google": "Partager sur Google+", - "help_html": "Vos changements devraient apparaître dans le calque \"Standard\" d'ici quelques minutes. Pour d'autres calques et certains éléments, cela peut prendre plus de temps.", + "thank_you": "Merci d'avoir amélioré la carte.", + "thank_you_location": "Merci d'avoir amélioré la carte autour de {where}.", + "help_html": "Vos changements devraient apparaître sur OpenStreetMap dans quelques instants. La mise à jour des cartes sur d'autres supports devrait prendre davantage de temps.", "help_link_text": "Détails", - "help_link_url": "https://wiki.openstreetmap.org/wiki/FR:FAQ#Je_viens_juste_de_faire_quelques_changements_sur_la_carte._Comment_puis-je_les_voir_.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/FR:FAQ#Je_viens_juste_de_faire_quelques_changements_sur_la_carte._Comment_puis-je_les_voir_.3F", + "view_on_osm": "Voir les changements sur OSM", + "changeset_id": "Votre numéro d'ensemble de modification : {changeset_id}", + "like_osm": "Vous aimez OpenStreetMap ? Retrouvez d'autres contributeurs :", + "more": "Plus", + "events": "Événements", + "languages": "Langues: {languages}", + "missing": "Quelque chose manque-t-il dans cette liste?", + "tell_us": "Dîtes-nous en plus !" }, "confirm": { "okay": "OK", @@ -760,7 +773,7 @@ "backups_h": "Sauvegarde automatique", "backups": "Si vous ne pouvez pas terminer vos modifications tout de suite, par exemple si votre ordinateur s’éteint ou si vous fermez votre navigateur, votre travail est enregistré. Vous pouvez revenir plus tard (avec le même navigateur, sur la même ordinateur) et iD vous proposera de reprendre là où vous vous étiez arrêté.", "keyboard_h": "Raccourcis clavier", - "keyboard": "Vous pouvez voir une liste de raccourcis clavier en pressant la touche `?`." + "keyboard": "Vous pouvez voir une liste de raccourcis clavier en appuyant sur la touche `?`." }, "feature_editor": { "title": "Éditeur d'élément", @@ -779,27 +792,61 @@ }, "points": { "title": "Points", + "intro": "Les *points* peuvent être utilisés pour représenter des éléments comme des magasins, restaurants ou monuments. Ils indiquent une position précise et décrivent ce qu'il y a à cet endroit. ", "add_point_h": "Ajouter des Points", + "add_point": "Pour ajouter un point, cliquez sur le bouton **Point** {point} de la barre d'outils au-dessus de la carte, ou pressez la touche `1`. Cela transformera le curseur de la souris en une croix.", + "add_point_finish": "Pour placer un nouveau point sur la carte, placer le curseur de la souris où le point doit aller, puis effectuer un {leftclick} clic gauche ou un appui sur la barre d'Espace.", "move_point_h": "Déplacer des Points", - "delete_point_h": "Supprimer des Points " + "move_point": "Pour déplacer un point, placez le curseur sur ce point, puis pressez et maintenez enfoncé le bouton gauche de la souris {leftclick} jusqu'au nouveau lieu du point.", + "delete_point_h": "Supprimer des Points ", + "delete_point": "Vous pouvez supprimer des éléments qui n'existent pas dans le monde réel. Supprimer un élément d'OpenStreetMap l'efface de la carte que tout le monde utilise, aussi vous devez être absolument sûr que cet élément n'existe pas sur le terrain avant de le supprimer.", + "delete_point_command": "Pour supprimer un point, faites un clic droit {rightclick} sur ce point pour le sélectionner et voir le menu d'édition, puis utilisez la commande **Supprimer** {delete}." }, "lines": { "title": "Lignes", "add_line_h": "Ajouter des Lignes", + "add_line": "Pour ajouter une ligne, cliquez sur le bouton **Ligne** {line} de la barre d'outils au-dessus de la carte, ou pressez la touche `2`. Cela transformera le curseur de la souris en une croix.", + "add_line_draw": "Puis, positionnez le curseur à l'endroit où doit commencer la ligne et faites un clic gauche {leftclick} ou pressez la barre d'espace `Space` pour placer des nœuds le long de la ligne. Continuez à placer des nœuds en cliquant ou en pressant la barre d'espace `Space`. Lorsque vous tracez la ligne, vous pouvez zoomer ou déplacer la carte afin d'ajouter davantage de détails.", + "add_line_finish": "Pour terminer une ligne, pressez la touche `{return}` ou cliquez une seconde fois sur le dernier nœud.", "modify_line_h": "Modifier des Lignes", + "modify_line_dragnode": "Souvent, vous verrez que les lignes ne sont pas formées correctement, par exemple une route qui ne correspond pas à l'imagerie utilisée en fond. Pour ajuster la forme d'une ligne, faites d'abord un clic gauche {leftclick} pour la sélectionner. Tous les nœuds de la ligne apparaîtront comme des petits cercles. Vous pourrez alors les déplacer.", + "modify_line_addnode": "Vous pouvez aussi créer de nouveaux nœuds le long d'une ligne en faisant un double-clic {leftclick}**x2** sur cette ligne ou en déplaçant les petits triangles situés sur la ligne entre deux nœuds existants.", + "connect_line_h": "Connecter des lignes", + "connect_line": "Il est important que les routes soient connectées correctement pour la carte, et essentiel pour la navigation.", + "connect_line_display": "Les connexions entre plusieurs routes sont matérialisées avec des cercles gris. Les points d'une ligne qui ne sont connectés à rien apparaissent comme des cercles blancs, plus grands.", + "disconnect_line_h": "Séparer des lignes", + "disconnect_line_command": "Pour déconnecter une route d'un autre élément, faites un clic droit {rightclick} sur le nœud de connexion et sélectionnez la commande **Déconnecter** {disconnect} dans le menu d'édition.", "move_line_h": "Déplacer des Lignes", - "delete_line_h": "Supprimer des lignes" + "move_line_command": "Pour déplacer une ligne entière, faites un clic droit {rightclick} sur cette ligne et sélectionnez la commande **Déplacer** {move} dans le menu d'édition. Puis déplacez la souris, et faites un clic gauche {leftclick} à l'endroit où vous souhaitez laisser la ligne..", + "delete_line_h": "Supprimer des lignes", + "delete_line_command": "Pour supprimer une ligne, faites un clic droit {rightclick} sur cette ligne pour la sélectionner et voir le menu d'édition, puis utilisez la commande **Supprimer** {delete}." }, "areas": { + "title": "Polygones", + "intro": "Les *polygones* sont utilisés pour montrer les délimitations d'éléments comme des lacs, des bâtiments et des zones résidentielles. Les polygones doivent être dessinés le long du bord des éléments qu'ils représentent, par exemple autour du pied d'un bâtiment.", + "point_or_area_h": "Des points ou un polygone ?", + "point_or_area": "De nombreux éléments peuvent être représentés par des points ou des polygones. Vous devriez cartographier les bâtiments et les contours de propriétés avec des polygones lorsque c'est possible. Placez des points à l'intérieur d'un bâtiment pour représenter des entreprises, des équipements et d'autres éléments se trouvant à l'intérieur.", "add_area_h": "Ajouter des polygones", - "square_area_h": "Donner une forme orthogonale.", - "modify_area_h": "Modifier des polyognes", - "delete_area_h": "Supprimer des polygones" + "add_area_command": "Pour ajouter un polygone, cliquez sur le bouton **Polygone** {area} de la barre d'outils au-dessus de la carte, ou pressez la touche `3`. Cela transformera le curseur de la souris en une croix.", + "add_area_draw": "Puis, positionnez le curseur à l'endroit de l'un des coins de l'élément à tracer et faites un clic gauche {leftclick} ou pressez la barre d'espace `Space` pour placer des nœuds sur les bords extérieurs du polygone. Continuez à placer des nœuds en cliquant ou en pressant la barre d'espace `Space`. Lorsque vous tracez le polygone, vous pouvez zoomer ou déplacer la carte afin d'ajouter davantage de détails.", + "add_area_finish": "Pour terminer un polygone, pressez la touche `{return}` ou cliquez une seconde fois sur le premier ou le dernier nœud.", + "square_area_h": "Donner une forme orthogonale", + "square_area_command": "De nombreux éléments comme les bâtiments ont les coins carrés. Pour rendre carrés les coins d'un polygone, faites un clic droit {rightclick} sur un bord du polygone et sélectionnez la commande **Carré** {orthogonalize} du menu d'édition.", + "modify_area_h": "Modifier des polygones", + "delete_area_h": "Supprimer des polygones", + "delete_area_command": "Pour supprimer un polygone, faites un clic droit {rightclick} sur ce polygone pour le sélectionner et voir le menu d'édition, puis utilisez la commande **Supprimer** {delete}." }, "relations": { "title": "Relations", + "intro": "Une *relation* est un élément spécial dans OpenStreetMap qui regroupe ensemble d'autres éléments. Les éléments qui appartiennent à une relation sont appelés *membres*, et chacun de ces membres peut avoir un *rôle* dans la relation.", "edit_relation_h": "Éditer des Relations", + "edit_relation": "Au bas de l'éditeur d'éléments, vous pouvez développer la section \"Toutes les relations\" pour voir si l'élément sélectionné est membre d'une ou plusieurs relations. Vous pouvez alors cliquer sur la relation pour la sélectionner et l'éditer.", + "edit_relation_add": "Pour ajouter un élément à une relation, sélectionnez cet élément, puis cliquez sur le bouton d'ajout {plus} dans la section \"Toutes les relations\" de l'éditeur d'éléments. Vous pouvez choisir la relation dans une liste contenant les relations présentes aux environs, ou bien en créer une nouvelle avec l'option \"Nouvelle relation...\".", + "edit_relation_delete": "Vous pouvez également cliquer sur le bouton **Supprimer** {delete} pour supprimer un élément d'une relation. Si vous supprimez tous les éléments d'une relation, celle-ci sera automatiquement supprimée.", + "maintain_relation_h": "Maintenir des Relations", + "maintain_relation": "La plupart du temps, iD maintient automatiquement les relations lorsque vous éditez.\nVous devez toutefois faire attention quand vous remplacez des éléments qui sont membres de relations. Par exemple, si vous supprimez la section d'une route et que vous en créez une nouvelle pour la remplacer, vous devez impérativement ajouter la nouvelle section aux mêmes relations que l'ancienne (chemins, interdictions de tourner, etc...).", "relation_types_h": "Types de Relation", + "multipolygon_h": "Multipolygones", "turn_restriction_h": "Interdictions de tourner", "route_h": "Chemins", "boundary_h": "Frontières" @@ -815,10 +862,41 @@ }, "gps": { "title": "Traces GPS", + "intro": "Les traces GPS collectées sont une source précieuse de données pour OpenStreetMap. Cet éditeur accepte les fichiers de formats *.gpx*, *.geojson*, et *.kml*. Vous pouvez collecter des traces GPS à partir d'un smartphone, d'une montre connectée, ou de tout appareil muni d'une puce GPS.", "using_h": "Utilisation des traces GPS", "using": "Pour utiliser une trace GPS, faites la glisser dans l'éditeur. Si elle est reconnue, elle apparaîtra en violet sur la carte. Cliquez sur {data} **Données Carte** pour montrer, cacher ou zoomer sur la trace GPS.", "tracing": "La trace GPS n'est pas envoyée à OpenStreetMap. Le meilleur moyen de l'utiliser est de dessiner sur la carte en s'en servant de modèle.", "upload": "Vous pouvez aussi [uploader vos données GPS sur OpenStreetMap](https://www.openstreetmap.org/trace/create) pour que d'autres utilisateurs puissent les utiliser." + }, + "field": { + "restrictions": { + "title": "Aide sur les restrictions de tourner", + "about": { + "title": "À propos" + }, + "inspecting": { + "title": "Inspecter", + "about": "Survolez avec le curseur un segment **DEPUIS** pour voir s'il est soumis à des restrictions de tourner. Toutes les destinations possibles **VERS** seront ombrées et montreront si une restriction existe.", + "from_shadow": "{fromShadow} **DEPUIS le segment**", + "allow_shadow": "{allowShadow} **VERS autorisé**", + "restrict_shadow": "{restrictShadow} **VERS interdit**", + "only_shadow": "{onlyShadow} **VERS uniquement**", + "restricted": "\"Interdit\" signifie qu'il y a une restriction de direction, par exemple \"Interdit de tourner à gauche\".", + "only": "\"Uniquement\" signifie qu'un véhicule empruntant ce chemin n'a pas d'autre choix de direction, par exemple \"Direction obligatoire\"." + }, + "modifying": { + "title": "Modifier", + "about": "Pour modifier les restrictions de tourner, commencez par cliquer sur l'un des segments **DEPUIS** pour le sélectionner. Celui-ci va clignoter, et toutes les directions possibles **VERS** vont apparaître avec un symbole.", + "indicators": "Puis cliquez sur un symbole de direction pour le basculer entre \"autorisé\", \"interdit\", et \"uniquement\".", + "allow_turn": "{allowTurn} **VERS autorisé**", + "restrict_turn": "{restrictTurn} **VERS interdit**", + "only_turn": "{onlyTurn} **Vers uniquement**" + }, + "tips": { + "title": "Astuces", + "simple": "**Privilégiez les restrictions simples plutôt que les complexes.**" + } + } } }, "intro": { @@ -1063,8 +1141,8 @@ }, "startediting": { "title": "Sortir du tutoriel et contribuer", - "help": "Vous êtes maintenant prêt pour contribuer à OpenStreetMap !{br}Vous pouvez recommencer ce tutorial à tout moment ou lire plus de documentation en cliquant sur le {button} bouton Aide ou en pressant la touche '{key}'.", - "shortcuts": "Vous pouvez voir une liste des commandes avec leur raccourci clavier en pressant la touche '{key}'.", + "help": "Vous êtes maintenant prêt pour contribuer à OpenStreetMap !{br}Vous pouvez recommencer ce tutorial à tout moment ou lire plus de documentation en cliquant sur le bouton Aide {button} ou en appuyant sur la touche '{key}'.", + "shortcuts": "Vous pouvez voir une liste des commandes avec leurs raccourcis claviers en appuyant sur la touche '{key}'.", "save": "N'oubliez pas de sauver régulièrement vos modifications !", "start": "Commencer à cartographier !" } @@ -1672,6 +1750,9 @@ "display": { "label": "Affichage" }, + "distance": { + "label": "Distance totale" + }, "dock": { "label": "Type" }, @@ -1712,6 +1793,9 @@ "except": { "label": "Exceptions" }, + "faces": { + "label": "Faces" + }, "fax": { "label": "Fax", "placeholder": "+33 1 23 45 67 89" @@ -1823,6 +1907,39 @@ "label": "Nombre d'arceaux", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "label": "Dressage", + "options": { + "equestrian": "Oui", + "undefined": "Non" + } + }, + "horse_riding": { + "label": "Équitation", + "options": { + "horse_riding": "Oui", + "undefined": "Non" + } + }, + "horse_scale": { + "label": "Difficulté à cheval", + "options": { + "common": "Facile : pas de problème ou de difficulté. (par défaut)", + "critical": "Limite : passable uniquement pour des cavaliers et des chevaux expérimentés. Obstacles majeurs. Les ponts devraient être examinés avec attention.", + "dangerous": "Dangereux : passable uniquement pour des cavaliers et des chevaux très expérimentés et seulement par beau temps. Descendre du cheval.", + "demanding": "Utiliser avec prudence : voie inégale, passages difficiles occasionnels.", + "difficult": "Difficile : voie étroite et exposée. Peut contenir des obstacles par dessus lesquels passer et des passages étroits.", + "impossible": "Impossible : Vois ou pont impossible à franchir pour les chevaux. Trop étroit, support insuffisant, obstacles comme des échelles. Danger de mort." + }, + "placeholder": "Difficile, Dangereux..." + }, + "horse_stables": { + "label": "Étable pour cavaliers", + "options": { + "stables": "Oui", + "undefined": "Non" + } + }, "iata": { "label": "Code AITA (*IATA*)" }, @@ -1842,6 +1959,9 @@ "indoor": { "label": "Intérieur" }, + "industrial": { + "label": "Type" + }, "information": { "label": "Type" }, @@ -1962,6 +2082,10 @@ "label": "Vitesse maximale autorisée", "placeholder": "30, 50, 70, 90, etc." }, + "maxspeed/advisory": { + "label": "Vitesse conseillée", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Durée maximale" }, @@ -2550,6 +2674,17 @@ "label": "Type", "placeholder": "Défaut" }, + "usage_rail": { + "label": "Utilisation", + "options": { + "branch": "Secondaire", + "industrial": "Industrielle", + "main": "Principale", + "military": "Militaire", + "test": " Voie de test pour les nouveaux trains", + "tourism": "Touristique" + } + }, "vending": { "label": "Marchandise proposée" }, @@ -2646,6 +2781,10 @@ "name": "Panneau publicitaire", "terms": "publicité, 4x3, affiche, panneau d'affichage, billboard, advertising, advertisement" }, + "advertising/column": { + "name": "Colonne Morris", + "terms": "Colonne Morris, Publicité" + }, "aerialway": { "name": "Transport par câble aérien" }, @@ -2731,6 +2870,10 @@ "name": "Terminal d'aéroport", "terms": "Terminal" }, + "allotments/plot": { + "name": "Parcelle dans un jardin familial", + "terms": "" + }, "amenity": { "name": "Équipement" }, @@ -2959,6 +3102,10 @@ "name": "Marché", "terms": "Marché, Place de marché" }, + "amenity/monastery": { + "name": "Terrain de monastère", + "terms": "" + }, "amenity/motorcycle_parking": { "name": "Parking pour motocyclettes", "terms": "Parc à motos,Stationnement motos" @@ -3163,6 +3310,10 @@ "name": "Distributeur de cigarettes", "terms": "distributeur de cigarettes, distributeur à cigarettes, cigarettes, distributeur automatique de cigarettes, machine à cigarettes, vente automatique de cigarettes, vente de cigarettes, vente cigarettes, vending machine cigarettes" }, + "amenity/vending_machine/coffee": { + "name": "Distributeur de café", + "terms": "Distributeur de café" + }, "amenity/vending_machine/condoms": { "name": "Distributeur de préservatifs", "terms": "distributeur de préservatifs, distributeur à préservatifs, préservatifs, distributeur automatique de préservatifs, machine à préservatifs, vente automatique de préservatifs, vente de préservatifs, vente préservatifs, vending machine condoms, capotes, condoms" @@ -3171,6 +3322,14 @@ "name": "Distributeur de boissons", "terms": "distributeur de boissons, distributeur à boissons, boissons, distributeur automatique de boissons, machine à boissons, machine à café, vente automatique de boissons, vente de boissons, vente boissons, eau, café, thé, soda, jus de fruit, vending machine drinks, drinks" }, + "amenity/vending_machine/electronics": { + "name": "Distributeur de matériel éléctronique", + "terms": "" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Distributeur de pièces", + "terms": "" + }, "amenity/vending_machine/excrement_bags": { "name": "Distributeur de sacs pour excréments d'animaux", "terms": "distributeur de sacs pour excréments d'animaux, distributeur à sacs pour excréments d'animaux, sacs pour excréments d'animaux, sacs à excréments d'animaux, sacs à crottes, distributeur automatique de sacs pour excréments d'animaux, distributeur automatique de sacs à crottes, machine à sacs pour excréments d'animaux, machine à sacs à crottes, vente de sacs pour excréments d'animaux, vente de sacs à crottes, vente sacs pour excréments d'animaux, vente sacs à crottes, vending machine excrement bags, excrement bags" @@ -3179,6 +3338,18 @@ "name": "Distributeur de produits d'hygiène féminine", "terms": "machine distributrice de produits d'hygiène féminine, distributeur de serviettes hygiéniques, distributeur de tampons, distributeur de tampon, serviette, tampon, cup, distributeur de cup, menstruations" }, + "amenity/vending_machine/food": { + "name": "Distributeur d'aliments", + "terms": "Distributeur d'aliments" + }, + "amenity/vending_machine/fuel": { + "name": "Pompe à essence", + "terms": "Distributeur de carburant" + }, + "amenity/vending_machine/ice_cream": { + "name": "Distributeur de glace", + "terms": "Distributeur de glace" + }, "amenity/vending_machine/news_papers": { "name": "Distributeur de journaux" }, @@ -3198,6 +3369,10 @@ "name": "Distributeur de titres de transport", "terms": "distributeur de titres de transport, distributeur à titres de transport, titres de transport, tickets de transport, distributeur automatique de titres de transport, guichet automatique, machine à titres de transport, vente automatique de titres de transport, vente de titres de transport, vente titres de transport, tickets de train, tickets de bus, tickets de métro, tickets de RER, tickets train, tickets bus, tickets métro, tickets RER, billets de train, billets de bus, billets de métro, billets de RER, billets train, billets bus, billets métro, billets RER, titres de train, titres de bus, titres de métro, titres de RER, vending machine public transport tickets, public transport tickets, tickets, billets, train, bus, métro, RER" }, + "amenity/vending_machine/stamps": { + "name": "Distributeur de timbres", + "terms": "" + }, "amenity/vending_machine/sweets": { "name": "Distributeur de snacks", "terms": "distributeur de snacks, distributeur à snacks, distributeur automatique de snacks, machine à snacks, vente automatique de snacks, vente de snacks, vente snacks, snacks, sucreries, bonbons, chips, cookie, chocolat, cracker, chewing-gum, vending machine sweets, sweets" @@ -3270,6 +3445,10 @@ "name": "Tour de chute", "terms": "" }, + "attraction/maze": { + "name": "Labyrinthe", + "terms": "Labyrinthe" + }, "attraction/pirate_ship": { "name": "Bateau pirate", "terms": "" @@ -3525,7 +3704,7 @@ }, "building/stadium": { "name": "Bâtiment du stade", - "terms": "" + "terms": "Stade, Tribune." }, "building/static_caravan": { "name": "Mobil home fixe", @@ -3899,6 +4078,10 @@ "name": "Hospice", "terms": "Hôpital, clinique, établissement de santé, chr, chu, chic, ch" }, + "healthcare/laboratory": { + "name": "Laboratoire d'analyses médicale", + "terms": "Laboratoire de biologie médicale, Laboratoire d'analyses médicale" + }, "healthcare/midwife": { "name": "Sage-femme", "terms": "Sage-femme, maïeuticienne" @@ -4001,6 +4184,10 @@ "name": "Bretelle d'autoroute", "terms": "Bretelle d'autoroute" }, + "highway/passing_place": { + "name": "Aire de croisement", + "terms": "Aire de croisement" + }, "highway/path": { "name": "Chemin non carrossable", "terms": "Chemin" @@ -4360,6 +4547,10 @@ "name": "Salle de jeux", "terms": "" }, + "leisure/beach_resort": { + "name": "Station balnéaire", + "terms": "Station balnéaire, plage." + }, "leisure/bird_hide": { "name": "Observatoire ornithologique", "terms": "Observatoire d'oiseaux" @@ -4476,6 +4667,10 @@ "name": "Réserve naturelle", "terms": "Zone protégée" }, + "leisure/outdoor_seating": { + "name": "Aire des places en terrasse", + "terms": "" + }, "leisure/park": { "name": "Parc", "terms": "Parc" @@ -4554,7 +4749,7 @@ }, "leisure/resort": { "name": "Complexe touristique , Village de vacances", - "terms": "Complexe hôtelier, Complexe touristique, Village de vacances, Spa, détente, Relaxation, Station thermale." + "terms": "Complexe hôtelier, Complexe touristique, Village de vacances, Spa, détente, Relaxation, Station thermale, Lieu de séjour, Hôtel." }, "leisure/running_track": { "name": "Piste de course (à pieds)", @@ -4604,6 +4799,10 @@ "name": "Entrée de mine", "terms": "Entrée de galerie de mine,Entrée de galerie" }, + "man_made/antenna": { + "name": "Antenne radioélectrique", + "terms": "Antenne radioélectrique" + }, "man_made/breakwater": { "name": "Brise-lames", "terms": "Brise-lames" @@ -4655,13 +4854,17 @@ "name": "Tour d'observation", "terms": "Tour d'observation, Mirador" }, + "man_made/observatory": { + "name": "Observatoire", + "terms": "Observatoire" + }, "man_made/petroleum_well": { "name": "Puits de pétrole", "terms": "Puits de forage, derrick, chevalet de pompage, ..." }, "man_made/pier": { "name": "Jetée", - "terms": "Quai" + "terms": "Quai,arrêt" }, "man_made/pipeline": { "name": "Pipeline", @@ -4779,6 +4982,10 @@ "name": "Lande", "terms": "Bruyère" }, + "natural/mud": { + "name": "Boue", + "terms": "Boue" + }, "natural/peak": { "name": "Sommet", "terms": "Pic, Mont" @@ -4880,7 +5087,7 @@ }, "office/company": { "name": "Bureau d'entreprise", - "terms": "" + "terms": "Bureau d'entreprise, Entreprise" }, "office/coworking": { "name": "Espace de coworking", @@ -4903,7 +5110,7 @@ "terms": "Agence immobilière" }, "office/financial": { - "name": "Bureau d'entreprise financière  ", + "name": "Bureau d'entreprise financière", "terms": "Bureau financier,Établissement financier" }, "office/forestry": { @@ -5018,8 +5225,8 @@ "name": "Ferme isolée" }, "place/hamlet": { - "name": "Hameau (moins de 100 habitants)", - "terms": "Hameau" + "name": "Lieu-dit ou hameau", + "terms": "Hameau,lieu dit,lieu-dit" }, "place/island": { "name": "Île", @@ -5035,7 +5242,7 @@ }, "place/locality": { "name": "Lieu-dit sans habitation", - "terms": "Localité" + "terms": "lieu-dit" }, "place/neighbourhood": { "name": "Voisinage", @@ -5176,7 +5383,7 @@ "terms": "Transformateur" }, "public_transport/linear_platform": { - "name": "Quai", + "name": "Quai de transport en commun", "terms": "" }, "public_transport/linear_platform_aerialway": { @@ -5192,7 +5399,7 @@ "terms": "" }, "public_transport/linear_platform_light_rail": { - "name": "Station de tramway", + "name": "Station de métro léger", "terms": "" }, "public_transport/linear_platform_monorail": { @@ -5204,11 +5411,11 @@ "terms": "" }, "public_transport/linear_platform_train": { - "name": "Gare ferroviaire", + "name": "Quai de gare ferroviaire", "terms": "" }, "public_transport/linear_platform_tram": { - "name": "Station de tramway", + "name": "Quai pour tramway", "terms": "" }, "public_transport/linear_platform_trolleybus": { @@ -5216,7 +5423,7 @@ "terms": "" }, "public_transport/platform": { - "name": "Quai", + "name": "Quai de transport en commun", "terms": "" }, "public_transport/platform_aerialway": { @@ -5224,7 +5431,7 @@ "terms": "" }, "public_transport/platform_bus": { - "name": "Arrêt de bus", + "name": "Quai d'arrêt de bus", "terms": "" }, "public_transport/platform_ferry": { @@ -5232,7 +5439,7 @@ "terms": "" }, "public_transport/platform_light_rail": { - "name": "Station de tramway", + "name": "Station de métro léger", "terms": "" }, "public_transport/platform_monorail": { @@ -5244,11 +5451,11 @@ "terms": "" }, "public_transport/platform_train": { - "name": "Gare ferroviaire", + "name": "Quai de gare ferroviaire", "terms": "" }, "public_transport/platform_tram": { - "name": "Station de tramway", + "name": "Quai pour tramway", "terms": "" }, "public_transport/platform_trolleybus": { @@ -5398,7 +5605,7 @@ "terms": "Voie ferrée étroite" }, "railway/platform": { - "name": "Gare ferroviaire" + "name": "Quai de gare ferroviaire" }, "railway/rail": { "name": "Voie ferrée", @@ -5815,6 +6022,10 @@ "name": "Animalerie", "terms": "Animalerie" }, + "shop/pet_grooming": { + "name": "Salon de toilettage", + "terms": "Salon de toilettage" + }, "shop/photo": { "name": "Tirage de photos", "terms": "Photographe, Tirage de photos" @@ -6034,6 +6245,10 @@ "name": "Parc d'attraction", "terms": "Parc à thème, parc d'attractions" }, + "tourism/trail_riding_station": { + "name": "Station équestre", + "terms": "" + }, "tourism/viewpoint": { "name": "Point de vue", "terms": "Point de vue, observatoire, mirador" @@ -6129,6 +6344,10 @@ "name": "Interdiction de bifurquer", "terms": "Interdiction de bifurquer" }, + "type/restriction/only_u_turn": { + "name": "Demi-tour obligatoire", + "terms": "Demi-tour obligatoire" + }, "type/route": { "name": "Itinéraire", "terms": "Route, rue, chemin, sentier" @@ -6290,7 +6509,7 @@ "attribution": { "text": "Termes & commentaires" }, - "description": "Limites et dates des images. Les textes sont visibles à partir du niveau de zoom 14", + "description": "Limites et dates des images. Les textes sont visibles à partir du niveau de zoom 13.", "name": "Images DigitalGlobe Premium Vintage" }, "DigitalGlobe-Standard": { @@ -6304,7 +6523,7 @@ "attribution": { "text": "Termes & commentaires" }, - "description": "Limites et dates des images. Les textes sont visibles à partir du niveau de zoom 14", + "description": "Limites et dates des images. Les textes sont visibles à partir du niveau de zoom 13.", "name": "Images DigitalGlobe Standard Vintage" }, "EsriWorldImagery": { @@ -6388,6 +6607,10 @@ "description": "Le jaune correspond aux données des cartes du domaine public issues du recensement américain, le rouge à des données non trouvées dans OpenStreetMap", "name": "Données géographiques et topologiques intégrées et encodées 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "Voies : en vert route non classifiée, en marron piste. Surface : les graviers sont représentés par un remplissage marron, l'asphalte par du noir, les pavés par du gris, la terre par du blanc, le béton par du bleu, l'herbe par du vert. Les voies saisonnières ont des barres blanches.", + "name": "Surcouche des routes forestières états-uniennes" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, contributeurs OpenStreetMap, CC by-SA 3.0" @@ -6484,7 +6707,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Map tiles par Stamen Design, sous CC BY 3.0" + "text": "Tuiles par Stamen Design, sous CC-BY 3.0. Données par OpenStreetMap, sous ODbL" }, "name": "Stamen Terrain" }, @@ -6500,6 +6723,643 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "cape-coast-youthmappers": { + "name": "YouthMappers de l'université de Cape Coast", + "description": "Suivez-nous sur Twitter: {url}", + "extendedDescription": "C'est le compte officiel du cahpitre Youth Mappers de l'université de Cape Coast, au Ghana. Nous aimons les cartes, la donnée libre et aider les communautés vulnérables." + }, + "osm-gh-facebook": { + "name": "OpenStreetMap Ghana sur Facebook", + "description": "Groupe Facebook pour les gens intéressés par OpenStreetMap.", + "extendedDescription": "Cartographes de la communauté du Ghana qui promeuvent les projets OpenStreetMap et Humanitarian OpenStreetMap Team (HOT) au Ghana. Rejoignez-nous." + }, + "osm-gh-twitter": { + "name": "OpenStreetMap Ghana sur Twitter", + "description": "Suivez-nous sur Twitter: {url}" + }, + "talk-gh": { + "name": "Liste de diffusion Talk-gh", + "description": "Talk-gh est la liste de diffusion officielle de la communauté d'OSM au Ghana." + }, + "osm-mg-facebook": { + "name": "Groupe Facebook OpenStreetMap Madagascar", + "description": "Groupe Facebook malgache pour les gens intéressé par OpenStreetMap." + }, + "talk-mg": { + "name": "Liste de diffusion talk-mg", + "description": "Le lieu de rencontre des contributeurs OpenStreetMap, des communautés et des utilisateurs à Madagascar où partager et discuter." + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap Bangladesh", + "description": "Améliorez OpenStreetMap au Bangladesh", + "extendedDescription": "Vous cartographiez au Bangladesh ? Vous avez des questions, vous souhaitez rencontrer la communauté ? Rejoignez-nous sur {Url}. Vous êtes tous les bienvenus !" + }, + "OSM-India-facebook": { + "name": "OpenStreetMap Inde - cartographie participative du voisinage", + "description": "Améliorez OpenStreetMap en Inde", + "extendedDescription": "Vous cartographiez en Inde ? Vous avez des questions, vous souhaitez rencontrer la communauté ? Rejoignez-nous sur {url}. Vous êtes tous les bienvenus !", + "events": { + "sotmasia2018": { + "name": "State of the Map Asia 2018", + "description": "Rejoignez l'événement régional OpenStreetMap 2018 au State of the Map Asion en Inde", + "where": "Indian Institute of Management, Bangalore, India" + } + } + }, + "OSM-india-mailinglist": { + "name": "Liste de diffusion OpenStreetMap Inde", + "description": "Talk-in est la liste de diffusion officielle pour la communauté OSM d'Inde" + }, + "OSM-india-twitter": { + "name": "Fil Twitter d'OpenStreetMap Inde", + "description": "Nous ne sommes qu'à un tweet : {url}" + }, + "OSM-India-Puducherry-Facebook": { + "name": "Mouvement logiciel libre et matériel (Free Software Hardware Movement, FSHM) - Facebook", + "description": "Page Facebook de FSHM pour en connaître plus sur les événements communautaires et les activités", + "extendedDescription": "FSHM organise des événements liés au logiciel et au matériel libre, les technologies, l'activisme et OpenStreetMap. Sa page FB est le meilleur moyen de rester en contact avec ses événements" + }, + "OSM-India-Puducherry-Matrix": { + "name": "Mouvement logiciel libre et matériel (Free Software Hardware Movement, FSHM) - Matrix", + "description": "Group riot FSHM pour discutter, partager et mettre à jour les activités de cartographie, les événements à et autour de Puducherry", + "extendedDescription": "Les membres de la communauté FSHM partagent leur mises à jour et expériences sur OSM à travers le groupe riot.im. Ce groupe est aussi utilisé pour discutter de choses liées au logiciel et matériel libre, les technologies et l'activisme." + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap Indonésie", + "description": "Améliorez OpenStreetMap en Indonésie", + "extendedDescription": "Vous cartographiez en Indonésie ? Vous avez des questions, vous souhaitez rencontrer la communauté ? Rejoignez-nous sur {Url}. Vous êtes tous les bienvenus !" + }, + "OSM-japan-facebook": { + "name": "Communauté OpenStreetMap japonaise", + "description": "Cartographes et utilisateurs d'OpenStreetMap au Japon" + }, + "OSM-japan-mailinglist": { + "name": "Liste de diffusion OpenStreetMap Japon", + "description": "Talk-ja est la liste de diffusion officielle pour la communauté OSM du Japon" + }, + "OSM-japan-twitter": { + "name": "Fil Twitter d'OpenStreetMap Japon", + "description": "Hashtag sur Twitter: {url}" + }, + "OSM-MY-forum": { + "name": "Forum d'OpenStreetMap Malaisie", + "description": "Forum officiel d'OpenStreetMap Malaisie" + }, + "OSM-MY-matrix": { + "name": "Canal riot d'OpenStreetMap Malaisie", + "description": "Tous les cartographes sont les bienvenus ! Enregistrez-vous sur {signupUrl}" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap Mongolie", + "description": "Améliorez OpenStreetMap en Mongolie", + "extendedDescription": "Vous cartographiez en Mongolie ? Vous avez des questions, vous souhaitez rencontrer la communauté ? Rejoignez-nous sur {Url}. Vous êtes tous les bienvenus !" + }, + "OSM-MMR-facebook": { + "name": "OpenStreetMap Birmanie", + "description": "Améliorez OpenStreetMap en Birmanie", + "extendedDescription": "Vous cartographiez en Birmanie ? Vous avez des questions, vous souhaitez rencontrer la communauté ? Rejoignez-nous sur {Url}. Vous êtes tous les bienvenus !" + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap Népal", + "description": "Améliorez OpenStreetMap au Népal", + "extendedDescription": "Vous cartographiez au Népal ? Vous avez des questions, vous souhaitez rencontrer la communauté ? Rejoignez-nous sur {Url}. Vous êtes tous les bienvenus !" + }, + "OSM-PH-facebook": { + "name": "Page Facebook d'OpenStreetMap PH", + "description": "Bienvenue sur OpenStreetMap Philippines, où nous encourageons tous les philippins à contribuer au projet OpenStreetMap." + }, + "OSM-PH-mailinglist": { + "name": "Liste de diffusion talk-ph", + "description": "Une liste de diffusion pour discuter d'OpenStreetMap aux Philippines" + }, + "OSM-PH-slack": { + "name": "Slack OpenStreetMap PH", + "description": "Vous êtes tous les bienvenus ! Enregistrez-vous sur {signupUrl}" + }, + "OSM-PH-telegram": { + "name": "Groupe telegram OpenStreetMap PH", + "description": "Communauté telegram locale non officielle des contributeurs d'OpenStreetMap et amis aux Philippines" + }, + "OSM-RU-forum": { + "name": "Forum OpenStreetMap RU", + "description": "Forum web OpenStreetMap Russie" + }, + "OSM-RU-telegram": { + "name": "Groupe telegram OpenStreetMap RU", + "description": "Chat telegram d'OpenStreetMap Russie" + }, + "OSM-LKA-facebook": { + "name": "OpenStreetMap Sri Lanka", + "description": "Améliorez OpenStreetMap au Sri Lanka", + "extendedDescription": "Vous cartographiez au Sri Lanka ? Vous avez des questions, vous souhaitez rencontrer la communauté ? Rejoignez-nous sur {Url}. Vous êtes tous les bienvenus !" + }, + "OSM-TW-facebook": { + "name": "OpenStreetMap Taïwan", + "description": "Groupe Facebook pour que les cartographes et les utilisateurs d'OpenStreetMap discuttent de Taïwan." + }, + "OSM-TW-mailinglist": { + "name": "Liste de diffusion OpenStreetMap Taïwan", + "description": "Talk-tw est la liste de diffusion officielle pour la communauté OSM de Taïwan" + }, + "at-forum": { + "name": "Forum d'OpenStreetMap Autriche", + "description": "Le forum officiel pour les questions sur OpenStreetMap en Autriche et autour" + }, + "at-mailinglist": { + "name": "Liste de diffusion talk-at", + "description": "Talk-at est la liste de diffusion officielle pour la communauté OSM d'Autriche" + }, + "at-twitter": { + "name": "Fil Twitter d'OpenStreetMap Autriche", + "description": "OpenStreetMap Autriche sur Twitter: {url}" + }, + "osmgraz-meetup": { + "name": "Rencontres OSM communautaires de Graz", + "description": "Rencontres mensuelles de la communauté OpenStreetMap à Graz" + }, + "osmgraz-twitter": { + "name": "Communauté OSM de Graz sur twitter", + "description": "Communauté OpenStreetMap de Graz sur twitter" + }, + "osm-at": { + "name": "OpenStreetMap Autriche", + "description": "La plateforme pour obtenir des informations sur OpenStreetMap en Autriche" + }, + "be-facebook": { + "name": "OpenStreetMap Belgique", + "description": "Facebook des cartographes et d'OpenStreetMap en Belgique" + }, + "be-forum": { + "name": "forum OpenStreetMap BE", + "description": "forum web d'OpenStreetMap Belgique" + }, + "be-irc": { + "name": "IRC d'OpenStreetMap Belgique", + "description": "Rejoignez #osmbe sur irc.oftc.net (port 6667)" + }, + "be-mailinglist": { + "name": "Liste de diffusion talk-be", + "description": "Talk-be est la liste de diffusion officielle pour la communauté OSM de Belgique" + }, + "be-matrix": { + "name": "Canal Riot d'OpenStreetMap BE", + "description": "Tous les cartographes sont les bienvenus ! Enregistrez-vous sur {signupUrl}", + "extendedDescription": "Divers canaux existent pour les débutants, des thématiques particulières, les utilisations du terrain et les discussions de développeurs" + }, + "be-meetup": { + "name": "Réunion d'OpenStreetMap Belgique", + "description": "Rencontres pour tous ceux qui sont intéressés par OpenStreetMap", + "extendedDescription": "Les rencontres physiques sont un bon moyen de rencontrer d'autres cartographes, leur poser des questions et apprendre plein de choses. Les nouveaux contributeurs sont particulièrement les bienvenus !" + }, + "be-twitter": { + "name": "Fil Twitter d'OpenStreetMap Belgique", + "description": "OSM Belgique sur Twitter: {url}" + }, + "byosm": { + "name": "OpenStreetMap Biélorussie", + "description": "Chat telegram OpenStreetMap Biélorussie" + }, + "talk-cz-mailinglist": { + "name": "Liste de diffusion talk-cz", + "description": "Talk-cz est la liste de diffusion officielle pour la communauté tchèque" + }, + "de-berlin-mailinglist": { + "name": "Liste de diffusion pour Berlin", + "description": "Il s'agit de la liste de diffusion pour la communauté berlinoise d'OSM" + }, + "de-berlin-meetup": { + "name": "Recontres OpenStreetMap de Berlin-Brandenburg", + "description": "Cartographes et utilisateurs OpenStreetMap dans la région de Berlin" + }, + "de-berlin-telegram": { + "name": "@osmberlin sur Telegram", + "description": "Chat Telegram d'OpenStreetMap Berlin" + }, + "de-berlin-twitter": { + "name": "Fil Twitter d'OpenStreetMap Berlin", + "description": "Suivez-nous sur Twitter: {url}" + }, + "de-forum": { + "name": "Forum d'OpenStreetMap DE", + "description": "Forum web d'OpenStreetMap Allemagne" + }, + "de-irc": { + "name": "IRC d'OpenStreetMap Allemagne", + "description": "Rejoignez #osm-de sur irc.oftc.net (port 6667)" + }, + "de-mailinglist": { + "name": "Liste de diffusion Talk-de", + "description": "Talk-de est la liste de diffusion officielle pour la communauté allemande d'OSM" + }, + "osm-de": { + "name": "OpenStreetMap Allemagne", + "description": "La plate-forme pour l'information sur OpenStreetMap en Allemagne" + }, + "OSM-ES-mailinglist": { + "name": "Liste de diffusion Talk-es", + "description": "Une liste de diffusion pour discuter d'OpenStreetMap en Espagne" + }, + "OSM-ES-telegram": { + "name": "@OSMes sur Telegram", + "description": "Chat Telegram d'OpenStreetMap Espagne" + }, + "fr-facebook": { + "name": "Page Facebook d'OpenStreetMap France", + "description": "Page Facebook d'OpenStreetMap France" + }, + "fr-forum": { + "name": "Forum web d'OpenStreetMap France", + "description": "Forum web d'OpenStreetMap France" + }, + "fr-irc": { + "name": "IRC d'OpenStreetMap France", + "description": "Rejoignez #osm-fr sur irc.oftc.net (port 6667)" + }, + "fr-mailinglist": { + "name": "Liste de diffusion Talk-fr", + "description": "Liste de diffusion Talk-fr" + }, + "fr-twitter": { + "name": "OpenStreetMap France sur Twitter", + "description": "OpenStreetMap France sur Twitter: {url}" + }, + "Nottingham-OSM-pub-meetup": { + "name": "Rencontres mensuelles dans un pub de East Midlands (Nottingham)", + "description": "Rassemblement social pour les cartographes et les utilisateur d'East Midlands" + }, + "gb-mailinglist": { + "name": "Liste de diffusion Talk-gb" + }, + "mappa-mercia-group": { + "name": "Groupe local Mappa Mercia", + "description": "Un endroit pour les amateurs d'OpenStreetMap dans les Midlands" + }, + "gb-irc": { + "name": "IRC d'OpenStreetMap Royaume-Uni", + "description": "Rejoignez #osm-gb sur irc.oftc.net (port 6667)", + "extendedDescription": "Rejoignez #osm-gb sur irc.oftc.net (port 6667), soyez patient SVP et attendez quelques minutes si vous posez une question" + }, + "it-facebook": { + "name": "Facebook d'OpenStreetMap Italie", + "description": "Rejoignez la communauté italienne d'OpenStreetMap sur Facebook" + }, + "it-irc": { + "name": "IRC d'OpenStreetMap Italie", + "description": "Rejoignez #osm-it sur irc.oftc.net (port 6667)" + }, + "it-mailinglist": { + "name": "Liste de diffusion Talk-it", + "description": "Talk-it est la liste de diffusion officielle pour la communauté italienne d'OSM" + }, + "it-twitter": { + "name": "Fil Twitter d'OpenStreetMap Italie", + "description": "Suivez-nous sur Twitter à l'adresse {url}" + }, + "OSM-Rome-meetup": { + "name": "Incontro Mappatori Romani", + "description": "Améliorez OpenStreetMap dans la région de Rome", + "extendedDescription": "Nous souhaitons être une ressource pour les gens où discuter et partager notre connaissance sur l'utilisation des données géographiques libres, en particulier OpenStreetMap, et des logiciels géospatiaux qui gèrent, modifient et affichent des données géographiques et militons pour leur utilisation à Lazio." + }, + "South-Tyrol-Mailing-List": { + "name": "Liste de diffusion OpenStreetMap pour le Tyrol du Sud" + }, + "talk-it-lazio": { + "name": "OpenStreetMap Italie Lazio", + "description": "Vous êtes tous les bienvenus ! Enregistrez-vous sur {signupUrl}", + "extendedDescription": "Liste de diffusion pour Rome et la région du Lazio" + }, + "Trentino-Mailing-List": { + "name": "Liste de diffusion OpenStreetMap pour le Trentin" + }, + "no-forum": { + "name": "Forum web d'OpenStreetMap Norvège", + "description": "Forum web d'OpenStreetMap Norvège" + }, + "no-irc": { + "name": "IRC d'OpenStreetMap Norvège", + "description": "Salon de discussion pour les cartographes et les utilisateurs, les développeurs et les amateurs d'OpenStreetMap en Norvège" + }, + "no-mailinglist": { + "name": "Liste de diffusion d'OpenStreetMap Norvège", + "description": "Liste de diffusion pour les cartographes et les utilisateurs, développeurs et amateurs d'OpenStreetmap en Norvège" + }, + "OSM-PL-facebook-group": { + "name": "Groupe Facebook d'OpenStreetMap Pologne", + "description": "Groupe pour les cartographes et les utilisateurs d'OpenStreetMap en Pologne" + }, + "OSM-PL-forum": { + "name": "Forum d'OpenStreetMap Pologne", + "description": "Forum de la communauté polonaise d'OpenStreetMap" + }, + "osm-se": { + "name": "OpenStreetMap.se", + "description": "Des nouvelles de la communauté OpenStreetMap suédoise" + }, + "se-facebook": { + "name": "Facebook d'OpenStreetMap Suède", + "description": "OpenStreetMap Suède sur Facebook" + }, + "se-forum": { + "name": "Forum web d'OpenStreetMap Suède", + "description": "Forum web d'OpenStreetMap Suède" + }, + "se-irc": { + "name": "IRC d'OpenStreetMap Suède", + "description": "Rejoignez #osm.se sur irc.oftc.net (port 6667)" + }, + "se-mailinglist": { + "name": "Liste de diffusion Talk-se", + "description": "Une liste de diffusion pour discuter d'OpenStreetMap en Suède" + }, + "se-twitter": { + "name": "OpenStreetMap Suède sur Twitter", + "description": "Suivez-nous sur Twitter: {url}" + }, + "OSM-CA-Slack": { + "name": "Slack OSM-CA", + "description": "Vous êtes tous les bienvenus ! Enregistrez-vous sur {signupUrl}." + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap Vancouver", + "description": "Cartographes et utilisateurs d'OpenStreetMap à Vancouver" + }, + "Bay-Area-OpenStreetMappers": { + "name": "Bay Area OpenStreetMappers", + "description": "Améliorez OpenStreetMap dans la Bay Area", + "extendedDescription": "Ce groupe a pour objectif de développer la communauté OpenStreetMap dans le secteur de la Région de la baie de San Francisco. Nos événements sont ouverts à tout le monde, passionné.e.s de l'Open Source, cyclistes, professionnel.le.s de la géomatique, geocachers, ou d'autres encore. Quiconque est intéressé.e par les cartes, la cartographie et les données cartographiques libres est invité.e à rejoindre le groupe et à participer aux événements." + }, + "Central-Pennsylvania-OSM": { + "name": "Central Pennsylvania OSM", + "description": "Communauté de cartographie en ligne de State College, Pennsylvanie" + }, + "Code-for-San-Jose-Slack": { + "name": "Slack de Code for San Jose", + "description": "Tout le monde est le bienvenu! Inscrivez-vous sur {signupUrl} et rejoignez le canal #osm." + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM", + "description": "Groupe d'utilisateurs OpenStreetMap de Dallas-Fort Worth", + "extendedDescription": "Dallas, Fort Worth et les villes au milieu abondent de personnes créatives et douées en informatique. La volonté de ce groupe est de trouver de nouvelles manières d'utiliser les supers ressources d'OSM." + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "Réunion pour les passionnés de cartographie dans la région de Philadelphie", + "extendedDescription": "GeoPhilly unit les développeurs, les géographes, les passionnés de données et d'open source, les hackers civiques et les drogués de la carte dans l'amour partagé pour les cartes et les histoires qu'elles racontent. Que vous utilisiez des cartes dans votre travail ou que vous souhaitiez en savoir plus, c'est la bonne réunion ! Nos événements essayent d'être ouverts, amicaux, éducatifs et sociaux et vont des happy hours aux présentations rapides voire aux ateliers. Venez créer une communauté géospatiale diversifiée et inspirante à Philadelphie avec nous !" + }, + "MapMinnesota": { + "name": "MapMinnesota", + "description": "Cartographes et amateurs d'OpenStreetMap dans la région des villes jumelles", + "extendedDescription": "Nous connectons les amateurs d'OpenStreetMap au Minnesota et dans les villes jumelles !" + }, + "Mapping-DC-meetup": { + "name": "Mapping DC", + "description": "Améliorez OpenStreetMap dans la région de DC", + "extendedDescription": "Nous sommes un groupe de cartographes volontaires qui cherchons à améliorer OpenStreetMap dans la région de DC. Nous essayons aussi de montrer aux autres ce qu'est l'écosystème OSM, l'analyse de données, la cartographie et les SIG. Nous nous réunissons tous les mois à des réunions pour nous concentrer sur une partie de notre ville." + }, + "Maptime-ME-meetup": { + "name": "MaptimeME", + "description": "Cartographes et utilisateurs d'OpenStreetMap autour de Portland, ME", + "extendedDescription": "Maptime est, plutôt littéralement, l'heure de cartographier. Notre mission est d'ouvrir les portes des possibilités cartographiques à tous ceux qui sont intéressés par la création d'un temps et d'un espace collaboratif d'apprentissage, d'exploration et de création de cartes avec des outils et des technologies de cartographie." + }, + "OpenCleveland-meetup": { + "name": "Open Cleveland", + "description": "Améliorez OpenStreetMap dans la région de Cleveland", + "extendedDescription": "Open Geo Cleveland souhaite être une ressource pour les gens où discuter et partager notre connaissance sur l'utilisation des données géographiques libres, en particulier OpenStreetMap, et des logiciels géospatiaux qui gèrent, modifient et affichent des données géographiques et militons pour leur utilisation au nord-est de l'Ohio. Nous sommes aussi un chapitre maptime =)" + }, + "OSM-Boston": { + "name": "OpenStreetMap Boston", + "description": "Cartographes et utilisateurs d'OpenStreetMap dans la région de Boston", + "extendedDescription": "OpenStreetMap est la carte du monde libre et ouverte comme un wiki avec des centaines de milliers de contributions chaque jour par des personnes comme vous. Modifier la carte est simple et amusant ! Rejoignez-nous aussi bien en intérieur qu'en extérieur dans notre effort pour créer la meilleure carte de la région de Boston et du reste du monde !" + }, + "OSM-Central-Salish-Sea": { + "name": "OpenStreetMap Mer de Salish", + "description": "Cartographes et utilisateurs d'OpenStreetMap autour de Mount Vernon, WA", + "extendedDescription": "OpenStreetMap est une carte du monde faite par des gens comme vous. C'est une carte que vous construisez et qui est libre comme wikipédia. Voyez osm.org pour plus d'informations. Nous nous rencontrons pour parler de cartes, contribuer à OSM et s'amuser !" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "Le groupe d'utilisateurs d'OSM de Chattanooga" + }, + "OSM-Colorado": { + "name": "OpenStreetMap Colorado", + "description": "Cartographes et utilisateurs d'OpenStreetMap dans l'état du Colorado aux USA", + "extendedDescription": "OpenStreetMap (OSM) Colorado est une collaboration locale de personnes intéressées par la contribution de leurs efforts pour créer des cartes libres. Nous encourageons tous les cartographes à organiser ou suggérer des événements cartographiques dans tout l'état. Des rencontres peuvent simplement tisser des liens sociaux, consister en des cours de base ou avancés sur OSM ou des cartoparties communautaires." + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC", + "description": "Cartographes et utilisateurs d'OpenStreetMap, développeurs et passionnés dans la région métropolitaine de New York" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland", + "description": "Cartographes et utilisateurs d'OpenStreetMap dans la région de Portland", + "extendedDescription": "OpenStreetMap (OSM) est une carte du monde faite par des gens comme vous. C'est une carte que vous construisez et qui est libre comme wikipédia. Voyez osm.org pour plus d'informations et rejoignez-nous à une rencontre pour parler de cartes, contribuer à OSM et s'amuser !" + }, + "OSM-Seattle": { + "name": "OpenStreetMap Seattle", + "description": "Cartographes et utilisateurs d'OpenStreetMap dans la région de Seattle" + }, + "OSM-SoCal": { + "name": "OpenStreetMap Californie du sud", + "description": "Amusons-nous, contribuons quelque chose pour Los Angeles et apprenons à cartographier !", + "extendedDescription": "OpenStreetMap (OSM) Californie du sud réuni tous les gens intéressés par la cartographie pour travailler sur OpenStreetMap. OpenStreetMap, le Wikipédia des cartes, est une carte libre du monde créée par plus de 1 000 000 de volontaires autour du monde. Tout le monde est le bienvenu. Si vous ne connaissez pas OpenStreetMap, nous vous apprendrons. Si vous avez une idée de projet de cartographie ou même d'une excursion à laquelle le groupe pourrait participer, super !" + }, + "OSM-South-Bay": { + "name": "OSM South Bay", + "description": "Nuits de la cartographie hébergées par Code for San Jose", + "extendedDescription": "Code for San Jose, la brigade Code for America locale, héberge des nuits de la cartographie mensuelles les jeudi soirs à San José. Rencontrez d'autres cartographes de South Bay, aidez les projets de cartographie locaux et apprenez-en plus sur les autres projets civiques techniques. Vous n'avez pas besoin de connaître la programmation ou les SIG." + }, + "OSM-Tampa-Bay": { + "name": "OpenStreetMap baie de Tampa", + "description": "Cartographes et utilisateurs d'OpenStreetMap dans la région de la baie de Tampa", + "extendedDescription": "Le groupe OpenStreetMap baie de Tampa pour que les locaux se rencontrent et construisent la carte complète de la baie de Tampa avec OpenStreetMap, la carte du monde libre et modifiable. Si vous aimez les cartes, les données, l'open source, le GPS, la randonnée, le vélo et cætera, vous allez aimer travailler avec OpenStreetMap – alors rejoinez-nous ! Nous nous rencontrerons pour cartographier et parler de nouveaux sujets environ une fois par mois." + }, + "OSM-US-Slack": { + "name": "Slack d'OpenStreetMap US", + "description": "Vous êtes tous les bienvenus ! Enregistrez-vous sur {signupUrl}" + }, + "OSM-US": { + "name": "OpenStreetMap États-Unis", + "description": "Nous aidons OpenStreetMap à grandir et à s'améliorer aux États-Unis.", + "extendedDescription": "Nous soutenons OpenStreetMap en organisant des conférences annuelles, en fournissant des moyens à la communauté, en établissant des partenariats, et en relayant les informations. Rejoignez OpenStreetMap États-Unis ici: {signupUrl}" + }, + "OSM-Utah": { + "name": "OpenStreetMap Utah", + "description": "Cartographes et utilisateurs d'OpenStreetMap dans la région de Salt Lake City", + "extendedDescription": "Les activités peuvent être des ateliers pour apprendre à cartographier, des cartoparties et des collectes de données en extérieur. Les événement se déroulent dans la zone de SLC au moins au départ. Nous cherchons des cartographes chevronnés ainsi que des nouveaux sur OSM. Rejoignez-nous et cartographions !" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap Wyoming", + "description": "Cartographes et utilisateurs d'OpenStreetMap dans la région de Wyoming", + "extendedDescription": "OpenStreetMap (OSM) Wyoming est une collaboration locale de gens intéressés par la contribution de leurs efforts pour créer des cartes libres. Nous encourageons tous nos cartographes à organiser ou suggérer des événement cartographiques dans tout l'état. Les rencontres peuvent consister en de simples événements sociaux, des sessions d'apprentissage des bases ou avancées, ou des cartoparties communautaires." + }, + "PHXGeo-meetup": { + "name": "Rencontres PHXGeo", + "description": "Cartographes et utilisateurs d'OpenStreetMap dans la région de Phoenix, AZ", + "extendedDescription": "C'est un groupe de rencontre pour les gens de la zone de Phoenix qui aiment les cartes, les SIG, OpenStreetMap et tout le reste." + }, + "PHXGeo-twitter": { + "name": "Fil Twitter de PHXGeo", + "description": "Suivez-nous sur Twitter à l'adresse {url}" + }, + "Western-Slope-facebook": { + "name": "Facebook de Western Slope", + "description": "Cartographes et utilisateurs d'OpenStreetMap autour de Grand Junction, CO" + }, + "Western-Slope-meetup": { + "name": "Recontres de Wester Slope OSM", + "description": "Cartographes et utilisateurs d'OpenStreetMap autour de Grand Junction, CO", + "extendedDescription": "Le but de ce groupe est de présenter OpenStreetMap aux communautés, développer une communauté de cartographes, créer la meilleure donnée géographique possible par n'importe quel moyen et finalement d'élaborer une stratégie pour communiquer cette donnée aux communautés. Imaginez des panneaux indicatifs sur les chemins de randonnées ! Imaginez un meilleur développement des voies cyclables ! Imaginez tout ce que vous voulez, c'est le plaisir d'OpenStreetMap !" + }, + "Maptime-Australia-Slack": { + "name": "Slack de Maptime Australia", + "description": "Enregistrez-vous sur {signupUrl}" + }, + "talk-au": { + "name": "Liste de diffusion talk-au", + "description": "Lieu de discussion pour les cartographes australiens" + }, + "OSM-AR-facebook": { + "name": "Page Facebook d'OpenStreetMap Argentine", + "description": "Rejoignez la communauté d'OpenStreetMap Argentine sur Facebook", + "extendedDescription": "Des nouvelles de la communauté locale" + }, + "OSM-AR-forum": { + "name": "Forum web d'OpenStreetMap Argentine", + "description": "Rejoignez le forum web d'OpenStreetMap Argentine", + "extendedDescription": "Idéal pour des discussions longues et importantes. Temps de réponse élevé." + }, + "OSM-AR-irc": { + "name": "IRC d'OpenStreetMap Argentine", + "description": "Rejoignez #osm-ar sur irc.oftc.net (port 6667)", + "extendedDescription": "Vous pouvez trouver les utilisateurs les plus geek de la communauté." + }, + "OSM-AR-mailinglist": { + "name": "Liste de diffusion talk-ar", + "description": "Liste de diffusion historique. Presque inutilisée aujourd'hui." + }, + "OSM-AR-telegram": { + "name": "Telegram d'OpenStreetMap Argentine", + "description": "Rejoignez la communauté d'OpenStreetMap Argentine sur Telegram", + "extendedDescription": "Le canal le plus actif dans la communauté, idéal pour papoter et obtenir des réponses à vos questions instantanément. Tout le monde est le bienvenu !" + }, + "OSM-AR-twitter": { + "name": "Fil Twitter d'OpenStreetMap Argentine", + "description": "Suivez-nous sur Twitter à l'adresse {url}", + "extendedDescription": "Des nouvelles de la communauté locale et d'OpenStreetMap en général." + }, + "OSM-BO-mailinglist": { + "name": "Liste de diffusion Talk-bo", + "description": "Talk-bo est la liste de diffusion officielle pour la communauté bolivienne d'OpenStreetMap", + "extendedDescription": "Vous cartographiez en Bolivie ? Vous avez des questions, vous souhaitez rencontrer la communauté ? Rejoignez-nous sur {url}. Vous êtes tous les bienvenus !" + }, + "Bahia-telegram": { + "name": "Groupe Telegram d'OpenStreetMap Bahia", + "description": "Rejoignez la communauté d'OpenStreetMap Bahia sur Telegram", + "extendedDescription": "Rejoignez la communauté pour en apprendre plus sur OpenStreetMap, pour poser des questions ou participer à nos rencontres. Tout le monde est le bienvenu!" + }, + "OSM-br-mailinglist": { + "name": "Liste de diffusion talk-br", + "description": "Une liste de diffusion pour discuter d'OpenStreetMap au Brézil" + }, + "OSM-br-telegram": { + "name": "Telegram d'OpenStreetMap Brésil", + "description": "Rejoignez la communauté d'OpenStreetMap Brésil sur Telegram", + "extendedDescription": "Rejoignez la communauté pour en apprendre plus sur OpenStreetMap, pour poser des questions ou participer à nos rencontres. Tout le monde est le bienvenu!" + }, + "OSM-br-twitter": { + "name": "Fil Twitter d'OpenStreetMap Brésil", + "description": "Suivez-nous sur Twitter à l'adresse {url}" + }, + "OSM-CL-facebook": { + "name": "Page Facebook d'OpenStreetMap Chili", + "description": "Rejoignez la communauté d'OpenStreetMap Chili sur Facebook", + "extendedDescription": "Rejoignez la communauté pour en apprendre plus sur OpenStreetMap, pour poser des questions ou participer à nos rencontres. Tout le monde est le bienvenu!" + }, + "OSM-CL-mailinglist": { + "name": "Liste de diffusion talk-cl", + "description": "Une liste de diffusion pour discuter d'OpenStreetMap au Chili" + }, + "OSM-CL-telegram": { + "name": "Telegram d'OpenStreetMap Chili ", + "description": "Rejoignez la communauté d'OpenStreetMap Chili sur Telegram", + "extendedDescription": "Rejoignez la communauté pour en apprendre plus sur OpenStreetMap, pour poser des questions ou participer à nos rencontres. Tout le monde est le bienvenu!" + }, + "OSM-CL-twitter": { + "name": "Fil Twitter d'OpenStreetMap Chili", + "description": "Suivez-nous sur Twitter à l'adresse {url}" + }, + "Maptime-Bogota": { + "name": "Maptime Bogotá", + "description": "Nous sommes un groupe de cartographes intéressés par la cartographie et OpenStreetMap autour de Bogotá.", + "extendedDescription": "Apprenez à collecter des données sur le terrain et les numériser sur OpenStreetMap. Aucune connaissance préalable n'est requise ! Vous avez seulement besoin de vouloir participer, apprendre et vous amuser." + }, + "OSM-CO-facebook": { + "name": "Facbebook OpenStreetMap Colombie", + "description": "Rejoignez la communauté OpenStreetMap Colombie sur Facebook", + "extendedDescription": "Rejoignez la communauté pour en apprendre plus sur OpenStreetMap. Tout le monde est le bienvenu!" + }, + "OSM-CO-mailinglist": { + "name": "Liste de diffusion Talk-co", + "description": "Une liste de diffusion pour discuter d'OpenStreetMap en Colombie" + }, + "OSM-CO-twitter": { + "name": "Fil Twitter d'OpenStreetMap Colombie", + "description": "Suivez-nous sur Twitter à l'adresse {url}" + }, + "OSM-CO": { + "name": "OpenStreetMap Colombie", + "description": "Des nouvelles de la communauté d'OpenStreetMap Colombie et de la fondation OSMCo" + }, + "OSM-PE-facebook": { + "name": "Facebook d'OpenStreetMap Pérou", + "description": "Rejoignez la communauté d'OpenStreetMap Pérou sur Facebook" + }, + "OSM-PE-mailinglist": { + "name": "Liste de diffusion Talk-pe", + "description": "La liste de diffusion officielle pour la communauté d'OpenStreetMap au Pérou" + }, + "OSM-PE-matrix": { + "name": "Le salon de discussion d'OpenStreetMap Pérou sur Matrix", + "description": "Discutez avec d'autres membres de la communauté d'OpenStreetMap au Pérou sur Matrix." + }, + "OSM-PE-telegram": { + "name": "Telegram d'OpenStreetMap Pérou", + "description": "Rejoignez la communauté d'OpenStreetMap Pérou sur Telegram" + }, + "OSM-PE-twitter": { + "name": "Fil Twitter d'OpenStreetMap Pérou", + "description": "Suivez-nous sur Twitter à l'adresse {url}" + }, + "OSM-PE": { + "name": "OpenStreetMap Pérou", + "description": "Nouvelles et ressources pour la communauté d'OpenStreetMap au Pérou" + }, + "OSM-Facebook": { + "name": "OpenStreetMap sur Facebook" + }, + "OSM-help": { + "name": "Aide d'OpenStreetMap" + }, + "OSM-Reddit": { + "name": "OpenStreetMap sur Reddit", + "description": "/r/openstreetmap/ est un super endroit pour en apprendre plus sur OpenStreetMap. Demandez-nous tout ce que vous voulez !" + }, + "OSM-Twitter": { + "name": "Fil Twitter d'OpenStreetMap", + "description": "Suivez-nous sur Twitter à l'adresse {url}" + }, + "OSMF": { + "name": "Fondation OpenStreetMap", + "description": "OSMF est une organisation à but non lucratif de droit britannique qui soutient le projet OpenStreetMap", + "events": { + "sotm2018": { + "name": "State of the Map 2018", + "where": "Milan, Italie" + } + } + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/gl.json b/vendor/assets/iD/iD/locales/gl.json index ce3d70b3a..88d193b18 100644 --- a/vendor/assets/iD/iD/locales/gl.json +++ b/vendor/assets/iD/iD/locales/gl.json @@ -1,5 +1,10 @@ { "gl": { + "icons": { + "information": "información", + "remove": "quitar", + "undo": "desfacer" + }, "modes": { "add_area": { "title": "Área", @@ -145,7 +150,9 @@ "vertex": "Conectada unha vía a outra.", "line": "Conectada unha vía a unha liña.", "area": "Conectada unha vía a unha área." - } + }, + "relation": "Estes elementos non se poden conectar porque teñen roles de relación contraditorios.", + "restriction": "Estes elementos non se poden conectar porque se danaría a relación \"{relation}\"." }, "disconnect": { "title": "Desconectar", @@ -291,6 +298,42 @@ } } }, + "restriction": { + "controls": { + "distance": "Distancia", + "distance_up_to": "Ata {distance}", + "via": "A través de", + "via_node_only": "Só nodo", + "via_up_to_one": "Ata 1 vía", + "via_up_to_two": "Ata 2 vías" + }, + "help": { + "indirect": "(indirecta)", + "turn": { + "no_left_turn": "Prohibido xirar á esquerda {indirect}", + "no_right_turn": "Prohibido xirar á dereita {indirect}", + "no_u_turn": "Prohibido cambiar de sentido {indirect}", + "no_straight_on": "Prohibido seguir recto {indirect}", + "only_left_turn": "Obrigatorio xirar á esquerda {indirect}", + "only_right_turn": "Obrigatorio xirar á dereita {indirect}", + "only_u_turn": "Obrigatorio cambiar de sentido {indirect}", + "only_straight_on": "Obrigatorio seguir recto {indirect}", + "allowed_left_turn": "Permitido xirar á esquerda {indirect}", + "allowed_right_turn": "Permitido xirar á dereita {indirect}", + "allowed_u_turn": "Permitido cambiar de sentido {indirect}", + "allowed_straight_on": "Permitido seguir recto {indirect}" + }, + "from": "DESDE", + "via": "A TRAVÉS DE", + "to": "CARA A", + "from_name": "{from} {fromName}", + "from_name_to_name": "{from} {fromName} {to} {toName}", + "via_names": "{via} {viaNames}", + "select_from": "Fai clic para seleccionar un segmento {from}", + "select_from_name": "Fai clic para seleccionar {from} {fromName}", + "toggle": "Fai clic para \"{turn}\"" + } + }, "undo": { "tooltip": "Desfacer: {action}", "nothing": "Nada para desfacer." @@ -366,6 +409,7 @@ "key": "H", "title": "Historial", "selected": "{n} seleccionados", + "no_history": "Sen historial (elemento novo)", "version": "Versión", "last_edit": "Última edición", "edited_by": "Editado por", @@ -603,15 +647,20 @@ } }, "success": { - "edited_osm": "OSM editado!", "just_edited": "Acabas de editar OpenStreetMap!", - "view_on_osm": "Ver en OSM", - "facebook": "Compartir no Facebook", - "twitter": "Compartir no Twitter", - "google": "Compartir no Google+", - "help_html": "Os teus cambios deberían aparecer na capa \"Estándar\" nuns minutos. Outras capas, e determinados elementos, poden tardar máis tempo.", + "thank_you": "Grazas por mellorar o mapa", + "thank_you_location": "Grazas por mellorar o mapa por {where}", + "help_html": "Os teus cambios deberían aparecer na capa estándar de OpenStreetMap nuns minutos. Pódelle levar máis tempo actualizarse a outras capas e mapas de outros sitios.", "help_link_text": "Detalles", - "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F", + "view_on_osm": "Ver cambios en OSM", + "changeset_id": "O teu conxunto de cambios é o {changeset_id}", + "like_osm": "Gústache OpenStreetMap? Comunícate con outras persoas:", + "more": "Máis", + "events": "Eventos", + "languages": "Idiomas: {languages}", + "missing": "Falta algo nesta lista?", + "tell_us": "Cóntanos!" }, "confirm": { "okay": "OK", @@ -689,6 +738,44 @@ "help": { "title": "Axuda", "welcome": "Benvido ao editor iD para [OpenStreetMap] (https://www.openstreetmap.org/). Con este editor podes actualizar OpenStreetMap directamente desde o teu navegador." + }, + "field": { + "restrictions": { + "title": "Axuda das restricións de xiro", + "about": { + "title": "Acerca de", + "about": "Este campo permíteche inspecionar e modificar restricións de xiro. Mostra un modelo da intersección seleccionada, incluíndo outras estradas conectadas próximas.", + "from_via_to": "Unha restrición de xiro sempre contén: unha **vía DESDE**, unha **vía CARA A** e un **nodo A TRAVÉS DE** ou unha ou varias **vías A TRAVÉS DE**.", + "maxdist": "A barra de desprazamento \"{distField}\" controla ata onde se vai buscar por máis estradas conectadas.", + "maxvia": "A barra de desprazamento \"{viaField}\" axusta cántas vías intermedias poden ser incluídas na busca. (Consello: canto máis simple, mellor)" + }, + "inspecting": { + "title": "Inspecionar", + "about": "Sitúate sobre calquera segmento **DESDE** para ver se ten restricións de xiro. Cada destino **CARA A** posible debuxarase cunha sombra coloreada indicando se existe algunha restrición de xiro.", + "from_shadow": "{fromShadow} **segmento DESDE**", + "allow_shadow": "{allowShadow} **CARA A permitido**", + "restrict_shadow": "{restrictShadow} **CARA A prohibido**", + "only_shadow": "{onlyShadow} **CARA A obrigatorio**", + "restricted": "\"Prohibido\" significa que hai unha restrición de xiro, por exemplo \"Prohibido xirar á esquerda\".", + "only": "\"Obrigatorio\" significa que un vehículo que entre na intersección só poderá ir por esa ruta, por exemplo \"Obrigatorio seguir recto\"." + }, + "modifying": { + "title": "Modificar", + "about": "Para modificar restricións de xiro, primeiro fai clic en calquera segmento **DESDE** para selecionalo. O segmento selecionado parpadeará, e todos os destinos **CARA A** posibles mostraranse como símbolos de xiro.", + "indicators": "Logo, fai clic nun símbolo de xiro para alternalo entre \"Permitido, \"Prohibido\" e \"Obrigatorio\".", + "allow_turn": "{allowTurn} **CARA A permitido**", + "restrict_turn": "{restrictTurn} **CARA A prohibido**", + "only_turn": "{onlyTurn} **CARA A obrigatorio**" + }, + "tips": { + "title": "Consellos", + "simple": "**Intenta usar restricións simples en lugar de restricións máis complexas.**", + "simple_example": "Por exemplo, se podes establecer o elemento intermedio simplemente cun nodo, evita facelo cunha vía.", + "indirect": "**Algunhas restricións mostran o texto \"(indirecta)\" e aparecen cunha cor máis tenue.**", + "indirect_example": "Estas restricións existen debido a outra restrición cercana. Por exemplo, unha restrición de \"Obrigatorio seguir recto\" creará indirectamente restricións de \"Prohibido xirar\" para tódalas demáis rutas da intersección.", + "indirect_noedit": "Non podes modificar restricións indirectas. En lugar diso, modifica a restrición directa cercana." + } + } } }, "intro": { @@ -1250,6 +1337,9 @@ "aeroway": { "label": "Tipo" }, + "agrarian": { + "label": "Produtos" + }, "amenity": { "label": "Tipo" }, @@ -1340,6 +1430,10 @@ "bunker_type": { "label": "Tipo" }, + "cables": { + "label": "Cables", + "placeholder": "1, 2, 3..." + }, "camera/direction": { "label": "Dirección (Grados en sentido horario)", "placeholder": "45, 90, 180, 270" @@ -1457,6 +1551,9 @@ "cycleway:right": "Lado dereito" } }, + "dance/style": { + "label": "Estilos de baile" + }, "date": { "label": "Data" }, @@ -1473,14 +1570,58 @@ "label": "Descrición completa" }, "devices": { + "label": "Dispositivos", "placeholder": "1, 2, 3..." }, "diaper": { "label": "Con área de cambia-cueiros " }, + "direction": { + "label": "Dirección (Graos en sentido horario)", + "placeholder": "45, 90, 180, 270" + }, + "direction_cardinal": { + "label": "Dirección", + "options": { + "E": "Leste", + "ENE": "Les-nordeste", + "ESE": "Les-sueste", + "N": "Norte", + "NE": "Nordeste", + "NNE": "Nor-nordeste", + "NNW": "Nor-noroeste", + "NW": "Noroeste", + "S": "Sur", + "SE": "Sueste", + "SSE": "Sur-sueste", + "SSW": "Sur-suroeste", + "SW": "Suroeste", + "W": "Oeste", + "WNW": "Oés-noroeste", + "WSW": "Oés-suroeste" + } + }, + "direction_clock": { + "label": "Sentido", + "options": { + "anticlockwise": "Sentido antihorario", + "clockwise": "Sentido horario" + } + }, + "direction_vertex": { + "label": "Sentido", + "options": { + "backward": "Atrás", + "both": "Ambos/todos", + "forward": "Adiante" + } + }, "display": { "label": "Presentación" }, + "distance": { + "label": "Distancia total" + }, "dock": { "label": "Tipo" }, @@ -1521,6 +1662,9 @@ "except": { "label": "Excepcións" }, + "faces": { + "label": "Caras" + }, "fax": { "label": "Fax", "placeholder": "+34 989 12 34 56" @@ -1549,6 +1693,9 @@ "wall": "Parede" } }, + "fitness_station": { + "label": "Tipo de equipamento" + }, "fixme": { "label": "Amáñame" }, @@ -1590,6 +1737,9 @@ "generator/type": { "label": "Tipo" }, + "government": { + "label": "Tipo" + }, "grape_variety": { "label": "Variedades de Uvas" }, @@ -1626,6 +1776,28 @@ "label": "Canastras", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "options": { + "equestrian": "Si", + "undefined": "Non" + } + }, + "horse_riding": { + "label": "Centro de equitación", + "options": { + "horse_riding": "Si", + "undefined": "Non" + } + }, + "horse_scale": { + "placeholder": "Difícil, perigoso..." + }, + "horse_stables": { + "options": { + "stables": "Si", + "undefined": "Non" + } + }, "iata": { "label": "IATA" }, @@ -1645,6 +1817,9 @@ "indoor": { "label": "Dentro" }, + "industrial": { + "label": "Tipo" + }, "information": { "label": "Tipo" }, @@ -1765,6 +1940,10 @@ "label": "Límite de velocidade", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "label": "Límite de velocidade recomendado", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Estancia Máxima" }, @@ -1862,7 +2041,9 @@ "oneway": { "label": "Sentido único", "options": { + "alternating": "Alterno", "no": "Non", + "reversible": "Reversible", "undefined": "Suponse «Non»", "yes": "Si" } @@ -1870,7 +2051,9 @@ "oneway_yes": { "label": "Sentido único", "options": { + "alternating": "Alterno", "no": "Non", + "reversible": "Reversible", "undefined": "Suponse «Si»", "yes": "Si" } @@ -1907,6 +2090,7 @@ "label": "Tipos de pagamento" }, "phases": { + "label": "Fases", "placeholder": "1, 2, 3..." }, "phone": { @@ -2218,6 +2402,9 @@ "surveillance/zone": { "label": "Zona de Vixilancia" }, + "switch": { + "label": "Tipo" + }, "tactile_paving": { "label": "Pavimento táctil" }, @@ -2278,6 +2465,14 @@ "traffic_signals": { "label": "Tipo" }, + "traffic_signals/direction": { + "label": "Sentido", + "options": { + "backward": "Atrás", + "both": "Ambos/todos", + "forward": "Adiante" + } + }, "trail_visibility": { "label": "Visibilidade do sendeiro", "options": { @@ -2291,6 +2486,7 @@ "placeholder": "Excelente, bo, malo..." }, "transformer": { + "label": "Tipo", "options": { "auto": "Autotransformador", "converter": "Conversor", @@ -2308,8 +2504,8 @@ "label": "Tipo", "placeholder": "Por defecto" }, - "vending": { - "label": "Tipo de Bens" + "usage_rail": { + "label": "Tipo de uso" }, "visibility": { "label": "Visibilidade", @@ -2328,6 +2524,18 @@ "volcano/type": { "label": "Tipo de volcán" }, + "voltage": { + "label": "Tensión" + }, + "voltage/primary": { + "label": "Tensión do primario" + }, + "voltage/secondary": { + "label": "Tensión do secundario" + }, + "voltage/tertiary": { + "label": "Tensión do terciario" + }, "wall": { "label": "Tipo" }, @@ -2357,6 +2565,7 @@ "label": "Wikipedia" }, "windings": { + "label": "Devanados", "placeholder": "1, 2, 3..." }, "windings/configuration": { @@ -2381,6 +2590,10 @@ "name": "Carteleira", "terms": "anuncio, publicidade, carteleira" }, + "advertising/column": { + "name": "Columna de publicidade", + "terms": "columna, publicidade, anuncios, cilindro" + }, "aerialway": { "name": "Vía aérea" }, @@ -2450,6 +2663,10 @@ "aeroway/terminal": { "name": "Terminal de aeroporto" }, + "allotments/plot": { + "name": "Parcela de horto urbano", + "terms": "horto urbano, horta urbana, horto, horta, parcela, cultivo, horta comunitaria, horto comunitario, terreo" + }, "amenity": { "name": "Instalacións" }, @@ -2479,7 +2696,7 @@ }, "amenity/bar": { "name": "Bar de copas", - "terms": "pub, bar, bar de copas, bebidas, alcohol" + "terms": "pub, bar, bar de copas, bebidas, alcohol, cantina, taberna, cervexa" }, "amenity/bbq": { "name": "Barbacoa/Grella", @@ -2502,15 +2719,20 @@ "terms": "bici, bicicleta, reparación, inchar" }, "amenity/biergarten": { - "name": "Xardín da cervexa" + "name": "Xardín da cervexa", + "terms": "cervexa, alcohol, biergarten" }, "amenity/boat_rental": { - "name": "Aluguer de botes" + "name": "Aluguer de botes", + "terms": "aluguer, bote, barca, lancha" }, "amenity/bureau_de_change": { "name": "Troco de divisas", "terms": "troco, cambio, divisa, moeda" }, + "amenity/bus_station": { + "name": "Estación de autobuses" + }, "amenity/cafe": { "name": "Cafetería", "terms": "cafetería, café, bar, tetería" @@ -2583,7 +2805,7 @@ "terms": "doutor, médico, clínica, saúde" }, "amenity/dojo": { - "name": "Dojo/academia de artes aarciais" + "name": "Dojo/academia de artes marciais" }, "amenity/drinking_water": { "name": "Fonte", @@ -2599,6 +2821,9 @@ "amenity/fast_food": { "name": "Comida rápida" }, + "amenity/ferry_terminal": { + "name": "Estación de ferry" + }, "amenity/fire_station": { "name": "Parque de bombeiros" }, @@ -2611,16 +2836,18 @@ }, "amenity/fuel": { "name": "Gasolineira", - "terms": "gasolineira, gasolina, gasoil, diésel, combustible, estación de servicio" + "terms": "gasolineira, gasolina, gasoil, diésel, combustible, estación de servicio, área de servicio" }, "amenity/grave_yard": { - "name": "Cemiterio" + "name": "Cemiterio", + "terms": "cemitero, cementerio, tumbas, panteón" }, "amenity/grit_bin": { "name": "Contenedor de sal" }, "amenity/hospital": { - "name": "Hospital" + "name": "Hospital", + "terms": "hospital, clínica, urxencias, sanidade, saúde, médico" }, "amenity/hunting_stand": { "name": "Stand de Caza" @@ -2642,15 +2869,24 @@ "terms": "biblioteca, libros, lectura" }, "amenity/marketplace": { - "name": "Mercado" + "name": "Mercado", + "terms": "mercado, mercadillo, plaza" + }, + "amenity/monastery": { + "name": "Zona de monasterio", + "terms": "monasterio, área de monasterio, igrexa, capela" }, "amenity/motorcycle_parking": { "name": "Aparcamento de motos", "terms": "aparcamento, aparcadoiro, parking, motos, motocicletas, ciclomotores" }, + "amenity/music_school": { + "name": "Escola de música", + "terms": "escola de música, conservatorio, academia, música, instrumentos" + }, "amenity/nightclub": { "name": "Pub", - "terms": "Pub, Discoteca, After, Sala de baile" + "terms": "Pub, Discoteca, After, Sala de baile, bailar, bebidas, alcohol, música" }, "amenity/nursing_home": { "name": "Residencia de anciáns" @@ -2663,7 +2899,7 @@ "name": "Entrada/Saída a garaxe de aparcamento" }, "amenity/parking_space": { - "name": "Espazo de Aparcamento" + "name": "Praza de aparcamento" }, "amenity/pavilion": { "name": "Pavillón" @@ -2722,7 +2958,7 @@ }, "amenity/pub": { "name": "Bar", - "terms": "Pub, bar, café, cafetería" + "terms": "Pub, bar, café, cafetería, bebidas, alcohol, cervexa, bar de tapas, pinchos" }, "amenity/public_bath": { "name": "Baño público", @@ -2735,12 +2971,16 @@ "amenity/ranger_station": { "name": "Estación de gardabosques" }, + "amenity/recycling": { + "name": "Contenedor de reciclaxe", + "terms": "reciclaxe, contenedor, lixo, basura, orgánico, plásticos, vidrio, punto limpo" + }, "amenity/recycling_centre": { "name": "Centro de Reciclaxe", "terms": "centro de reciclaxe, punto limpo" }, "amenity/register_office": { - "name": "Oficina de Rexistro" + "name": "Oficina do rexistro" }, "amenity/restaurant": { "name": "Restaurante", @@ -2757,10 +2997,12 @@ "name": "Depósito de chatarra" }, "amenity/shelter": { - "name": "Abrigo" + "name": "Abrigo", + "terms": "abrigo, refuxio, cuberto, gazebo" }, "amenity/shower": { - "name": "Ducha" + "name": "Ducha", + "terms": "duchas, baño, auga" }, "amenity/social_facility": { "name": "Axuda Social" @@ -2812,6 +3054,10 @@ "amenity/vending_machine/cigarettes": { "name": "Expendedora de tabaco" }, + "amenity/vending_machine/coffee": { + "name": "Máquina do café", + "terms": "café, máquina, expendedora, cafetera" + }, "amenity/vending_machine/condoms": { "name": "Expendedora de condóns" }, @@ -2821,17 +3067,25 @@ "amenity/vending_machine/excrement_bags": { "name": "Caca Can" }, + "amenity/vending_machine/food": { + "name": "Expendedora de comida" + }, + "amenity/vending_machine/ice_cream": { + "name": "Expendedora de xeados" + }, "amenity/vending_machine/news_papers": { "name": "Expendedora de xornais" }, "amenity/vending_machine/newspapers": { - "name": "Expendedora de xornais" + "name": "Expendedora de xornais", + "terms": "expendedora, xornais, revistas, periódicos" }, "amenity/vending_machine/parcel_pickup_dropoff": { "name": "Máquina expendedora de recollida/entrega de paquetes" }, "amenity/vending_machine/parking_tickets": { - "name": "Parquímetro" + "name": "Parquímetro", + "terms": "parquímetro, aparcamento, parking" }, "amenity/vending_machine/public_transport_tickets": { "name": "Expendedora de billetes de transporte público" @@ -2895,6 +3149,9 @@ "name": "Torre de caída", "terms": "caída, torre, atracción" }, + "attraction/maze": { + "name": "Laberinto" + }, "attraction/pirate_ship": { "name": "Barco pirata", "terms": "barco pirata, atracción" @@ -2951,7 +3208,7 @@ }, "barrier/fence": { "name": "Valado", - "terms": "Valado, reixa, valo, cercado" + "terms": "Valado, reixa, valo, cercado, alambrada, cerca" }, "barrier/gate": { "name": "Porta", @@ -2961,6 +3218,9 @@ "name": "Cobertura", "terms": "cobertura, seto, liña de arbustos" }, + "barrier/kerb": { + "name": "Bordillo" + }, "barrier/kissing_gate": { "name": "Porta Kissing" }, @@ -2975,25 +3235,31 @@ "terms": "escada, escaleira, valado, cerca, reixa" }, "barrier/toll_booth": { - "name": "Peaxe" + "name": "Peaxe", + "terms": "peaxe, cabina de peaxe, cabina de cobro" }, "barrier/wall": { "name": "Muro" }, "boundary/administrative": { - "name": "Límite administrativo" + "name": "Límite administrativo", + "terms": "límite administrativo, fronteira, término municipal" }, "building": { "name": "Edificio", "terms": "edificio, casa, inmoble, vivenda" }, "building/apartments": { - "name": "Apartamentos" + "name": "Apartamentos", + "terms": "apartamento, piso, vivenda, aloxamento" }, "building/barn": { "name": "Celeiro/Hórreo", "terms": "celeiro, hórreo, cabazo, cabaceiro, cabaceira, piorno" }, + "building/bungalow": { + "name": "Bungaló" + }, "building/bunker": { "name": "Bunker" }, @@ -3010,6 +3276,9 @@ "building/church": { "name": "Edificio de igrexa" }, + "building/civic": { + "name": "Edificio cívico" + }, "building/college": { "name": "Instituto de educación superior", "terms": "universidade, educación superior, facultade, colexio, escola, instituto, FP, formación profesional" @@ -3370,6 +3639,9 @@ "healthcare/blood_donation": { "name": "Doación de sangue" }, + "healthcare/laboratory": { + "name": "Laboratorio médico" + }, "highway": { "name": "Estrada" }, @@ -4754,15 +5026,6 @@ "type/restriction/no_u_turn": { "name": "Prohibido o cambio de sentido" }, - "type/restriction/only_left_turn": { - "name": "Obrigatorio xirar á esquerda" - }, - "type/restriction/only_right_turn": { - "name": "Obrigatorio xirar á dereita" - }, - "type/restriction/only_straight_on": { - "name": "Obrigatorio continuar recto" - }, "type/route": { "name": "Ruta" }, @@ -4867,25 +5130,46 @@ }, "DigitalGlobe-Premium": { "attribution": { - "text": "Termos & Autoachegas" + "text": "Termos e comentarios" }, "description": "Imaxes de satélite Premium DigitalGlobe.", "name": "Imaxes DigitalGlobe Premium" }, + "DigitalGlobe-Premium-vintage": { + "attribution": { + "text": "Termos e comentarios" + }, + "description": "Límites das imaxes e datas de captura. As etiquetas aparecen a un nivel de zoom de 13 e superior.", + "name": "Antigüidade das imaxes DigitalGlobe Premium" + }, "DigitalGlobe-Standard": { "attribution": { - "text": "Termos & Autoachegas" + "text": "Termos e comentarios" }, - "description": "Imaxes de satélite Standard DigitalGlobe.", + "description": "Imaxes de satélite DigitalGlobe estándar.", "name": "Imaxes DigitalGlobe Standard" }, + "DigitalGlobe-Standard-vintage": { + "attribution": { + "text": "Termos e comentarios" + }, + "description": "Límites das imaxes e datas de captura. As etiquetas aparecen a un nivel de zoom de 13 e superior.", + "name": "Antigüidade das imaxes DigitalGlobe Standard" + }, "EsriWorldImagery": { "attribution": { - "text": "Termos & Autoachegas" + "text": "Termos e comentarios" }, - "description": "Imaxes mundiais Esri", + "description": "Imaxes mundiais Esri.", "name": "Imaxes mundiais Esri" }, + "EsriWorldImageryClarity": { + "attribution": { + "text": "Termos e comentarios" + }, + "description": "Arquivo de imaxes de Esri que pode que sexan máis claras e máis precisas que a súa capa por defecto.", + "name": "Imaxes mundiais Esri (Clarity) Beta" + }, "MAPNIK": { "attribution": { "text": "© contribuidores do OpenStreetMap, CC-BY-SA" @@ -4895,7 +5179,7 @@ }, "Mapbox": { "attribution": { - "text": "Termos & Autoachegas" + "text": "Termos e comentarios" }, "description": "Imaxes satélite e aéreas.", "name": "Mapbox Satélite" @@ -4916,7 +5200,7 @@ "attribution": { "text": "© Geofabrik GmbH, contribuidores do OpenStreetMap, CC-BY-SA" }, - "name": "OSM Inspector: Autoestradas" + "name": "OSM Inspector: Estradas" }, "OSM_Inspector-Multipolygon": { "attribution": { @@ -4940,7 +5224,7 @@ "attribution": { "text": "© Geofabrik GmbH, contribuidores do OpenStreetMap, CC-BY-SA" }, - "name": "OSM Inspector: Lapelas" + "name": "OSM Inspector: Etiquetado" }, "Waymarked_Trails-Cycling": { "name": "Marcador de Pistas: Ciclismo" @@ -4961,7 +5245,6 @@ "attribution": { "text": "basemap.at" }, - "description": "Mapa base para Austria, baseado en datos do goberno.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -4979,7 +5262,7 @@ }, "mapbox_locator_overlay": { "attribution": { - "text": "Termos & Autoachegas" + "text": "Termos e comentarios" }, "description": "Amosa os elementos importantes para axudarche a orientarte.", "name": "Superposición de Localizador" @@ -5011,33 +5294,56 @@ }, "qa_no_address": { "attribution": { - "text": "Simon Poole, Achegas ©contribuidores do OpenStreetMap" + "text": "Simon Poole, Datos ©contribuidores do OpenStreetMap" }, "name": "QA Sen Enderezos" }, "skobbler": { "attribution": { - "text": "© Tiles: skobbler información Mapa: contribuidores do OpenStreetMap" + "text": "© Teselas: skobbler Datos do mapa: contribuidores do OpenStreetMap" }, "name": "skobbler" }, "stamen-terrain-background": { "attribution": { - "text": "Tiles do mapa por Stamen Design, baixo CC BY 3.0" + "text": "Teselas do mapa por Stamen Design, baixo CC BY 3.0. Datos por OpenStreetMap, baixo ODbL" }, "name": "Terreo Stamen" }, "tf-cycle": { "attribution": { - "text": "Mapas © Thunderforest, Información © contribuidores do OpenStreetMap" + "text": "Mapas © Thunderforest, Datos © contribuidores do OpenStreetMap" }, - "name": "Thunderforest OpenCycleMap" + "name": "OpenCycleMap de Thunderforest" }, "tf-landscape": { "attribution": { - "text": "Mapas © Thunderforest, Información © contribuidores do OpenStreetMap" + "text": "Mapas © Thunderforest, Datos © contribuidores do OpenStreetMap" }, - "name": "Paisaxe Thunderforest" + "name": "Landscape de Thunderforest" + } + }, + "community": { + "osm-mg-facebook": { + "name": "Grupo de Facebook do OpenStreetMap na illa de Madagascar" + }, + "OSM-ES-mailinglist": { + "name": "Lista de correo talk-es", + "description": "Unha lista de correo para debatir sobre o OpenStreetMap en España" + }, + "OSM-ES-telegram": { + "name": "@OSMes no Telegram", + "description": "Chat de Telegram do OpenStreetMap España" + }, + "OSM-AR-twitter": { + "description": "Seguenos no Twitter na seguinte ligazón {url}" + }, + "OSM-br-twitter": { + "description": "Seguenos no Twitter na seguinte ligazón {url}" + }, + "OSM-Reddit": { + "name": "OpenStreetMap no Reddit", + "description": "/r/openstreetmap/ é un bo sitio para aprender máis sobre OpenStreetMap. Pregúntanos calquera cousa!" } } } diff --git a/vendor/assets/iD/iD/locales/he.json b/vendor/assets/iD/iD/locales/he.json index bb895bab1..18bf3c158 100644 --- a/vendor/assets/iD/iD/locales/he.json +++ b/vendor/assets/iD/iD/locales/he.json @@ -1,5 +1,10 @@ { "he": { + "icons": { + "information": "מידע", + "remove": "הסר", + "undo": "בטל" + }, "modes": { "add_area": { "title": "שטח", @@ -70,7 +75,7 @@ "line": "להפוך קו זה למעגלי.", "area": "להפוך איזור זה למעגלי." }, - "key": "×¢", + "key": "O", "annotation": { "line": "הקו עוגל", "area": "האיזור עוגל." @@ -85,7 +90,7 @@ "line": "ריבוע פינות בקו זה", "area": "ריבוע פינות באיזור זה" }, - "key": "ר", + "key": "S", "annotation": { "line": "הפיכת הקצוות של קו לריבוע.", "area": "הפיכת הקצוות של שטח לריבוע." @@ -97,7 +102,7 @@ "straighten": { "title": "יישור", "description": "יישור הקו הזה.", - "key": "ש", + "key": "S", "annotation": "יישור קו.", "too_bendy": "אי אפשר ליישר את הקו הזה כיוון שהוא יותר מדי מכופף.", "connected_to_hidden": "אי אפשר ליישר את הקו הזה כי הוא מחובר לתכונה נסתרת." @@ -145,12 +150,14 @@ "vertex": "חיבור של דרך לדרך אחרת.", "line": "חיבור של דרך לקו.", "area": "חיבור של דרך לשטח." - } + }, + "relation": "לא ניתן לחבר תכונות אלה כיוון שיש להן תפקידים סותרים ביחס.", + "restriction": "לא ניתן לחבר תכונות אלה כיוון שזה עשוי להרוס יחס מסוג „{relation}”." }, "disconnect": { "title": "ניתוק", "description": "ניתוק הקווים/השטחים האלה זה מזה.", - "key": "× ", + "key": "D", "annotation": "קווים/שטחים מנותקים.", "not_connected": "אין כאן מספיק קווים/שטחים לניתוק.", "connected_to_hidden": "אי אפשר לנתק את זה עקב החיבור לתכונה נסתרת.", @@ -159,7 +166,7 @@ "merge": { "title": "מיזוג", "description": "מיזוג התכונות האלה.", - "key": "ז", + "key": "C", "annotation": "{n} תכונות מוזגו.", "not_eligible": "אי אפשר למזג תכונות אלו.", "not_adjacent": "אי אפשר למזג את התכונות האלו כיוון שנקודות הקצה שלהן אינן מחוברות.", @@ -173,7 +180,7 @@ "single": "העברת התכונה הזאת למיקום שונה.", "multiple": "העברת התכונות האלו למיקום שונה." }, - "key": "×¢", + "key": "M", "annotation": { "point": "העברת נקודה.", "vertex": "העברת מפרק בדרך.", @@ -196,8 +203,8 @@ }, "reflect": { "title": { - "long": "שקף לאורך", - "short": "שקף לרוחב" + "long": "שקף את הארוך", + "short": "שקף את הקצר" }, "description": { "long": { @@ -212,6 +219,28 @@ "key": { "long": "T", "short": "Y" + }, + "annotation": { + "long": { + "single": "תכונה התהפכה לאורך הציר הארוך שלה.", + "multiple": "מספר תכונות התהפכו סביב הציר הארוך שלהן." + }, + "short": { + "single": "תכונה התהפכה לאורך הציר הארוך שלה.", + "multiple": "מספר תכונות התהפכו לאורך הציר הקצר שלהן." + } + }, + "incomplete_relation": { + "single": "לא ניתן להפוך תכונה זו כיוון שטרם התקבלה לחלוטין.", + "multiple": "לא ניתן להפוך תכונות אלו כיוון שטרם התקבלו לחלוטין." + }, + "too_large": { + "single": "לא ניתן להפוך תכונה זו כיוון שאין די שטח גלוי ממנה.", + "multiple": "לא ניתן להפוך תכונות אלו כיוון שאין די שטח גלוי מהן." + }, + "connected_to_hidden": { + "single": "לא ניתן להפוך תכונה זו כיוון שהיא מקושרת לתכונה נסתרת.", + "multiple": "לא ניתן להפוך תכונות אלו כיוון שחלקן מקושרות לתכונות נסתרות." } }, "rotate": { @@ -220,7 +249,7 @@ "single": "הטיית התכונה הזאת מסביב לנקודת המרכז שלה.", "multiple": "הטיית התכונות האלו סביב נקודות המרכז שלהן." }, - "key": "ט", + "key": "R", "annotation": { "line": "הטיית קו.", "area": "הטיית שטח.", @@ -242,7 +271,7 @@ "reverse": { "title": "היפוך", "description": "הפיכת הכיוון של הקו הזה.", - "key": "פ", + "key": "V", "annotation": "קו התהפך." }, "split": { @@ -252,7 +281,7 @@ "area": "פיצול הגבול של השטח הזה לשניים.", "multiple": "פיצול הקווים/שטח של המפרק הזה לשניים." }, - "key": "צ", + "key": "X", "annotation": { "line": "פיצול קו.", "area": "פיצול גבול שטח.", @@ -275,7 +304,7 @@ "distance_up_to": "עד {distance}", "via": "דרך", "via_node_only": "מפרק בלבד", - "via_up_to_one": "עד דרך אחת", + "via_up_to_one": "עד דרך 1", "via_up_to_two": "עד 2 דרכים" }, "help": { @@ -357,9 +386,9 @@ "truncated_list": "עריכות מאת {users} ו־{count} נוספים" }, "info_panels": { - "key": "ח", + "key": "I", "background": { - "key": "ר", + "key": "B", "title": "רקע", "zoom": "תקריב", "vintage": "סגנון מיושן", @@ -374,9 +403,10 @@ "hide_vintage": "הסתרת סגנון מיושן" }, "history": { - "key": "ה", + "key": "H", "title": "היסטוריה", "selected": "{n} נבחרו", + "no_history": "ללא היסטוריה (תכונה חדשה)", "version": "גרסה", "last_edit": "עריכה אחרונה", "edited_by": "נערך על ידי", @@ -385,12 +415,12 @@ "link_text": "היסטוריה ב־openstreetmap.org" }, "location": { - "key": "ק", + "key": "L", "title": "מיקום", "unknown_location": "מיקום לא ידוע" }, "measurement": { - "key": "ד", + "key": "M", "title": "מדידה", "selected": "{n} נבחרו", "geometry": "צורה", @@ -469,13 +499,14 @@ "background": { "title": "רקע", "description": "הגדרות רקע", - "key": "ר", + "key": "B", "backgrounds": "רקעים", "none": "אין", "best_imagery": "מקור התמונה המוכר והטוב ביותר למיקום זה", "switch": "חזרה לרקע זה", "custom": "התאמה אישית", "custom_button": "עריכת רקע בהתאמה אישית", + "custom_prompt": "נא להקליד כתובת תבנית. האסימונים התקניים הם:\n - {zoom} או {z}, {x}, {y} לסכימת אריחים מסוג Z/X/Y\n - {‎-y} או {ty} לנקודות ציון הפוכות בציר Y בסגנון TMS\n - {u} לסכימת אריחים מרובעת (QuadTile)\n - {switch:a,b,c} למעבר בין DNS של שרתים\n\nדוגמה:\n{example}", "overlays": "שכבות על", "imagery_source_faq": "פרטי צילום / דיווח על תקלה", "reset": "איפוס", @@ -495,7 +526,7 @@ "map_data": { "title": "נתוני מפה", "description": "נתוני מפה", - "key": "× ", + "key": "F", "data_layers": "שכבות נתונים", "layers": { "osm": { @@ -562,7 +593,7 @@ "wireframe": { "description": "ללא מילוי (מסגרת דקיקה)", "tooltip": "הפעלת מצב מסגרת דקיקה מאפשר לך לראות בקלות את התמונה ברקע.", - "key": "ד" + "key": "W" }, "partial": { "description": "מילוי חלקי", @@ -613,14 +644,20 @@ } }, "success": { - "edited_osm": "בוצעה עריכה ב־OSM!", "just_edited": "הרגע ערכת את OpenStreetMap!", - "view_on_osm": "צפייה ב־OSM", - "facebook": "שיתוף בפייסבוק", - "twitter": "שיתוף בטוויטר", - "google": "שיתוף ב־Google+‎", - "help_html": "השינויים שלך אמורים להופיע בשכבה ה„תקנית” בעוד מספר דקות. שכבות אחרות ותכונות מסוימות עשויות לארוך זמן רב יותר.", - "help_link_text": "פרטים" + "thank_you": "תודה לך על שיפור המפה.", + "thank_you_location": "תודה לך על שיפור המפה באזור {where}.", + "help_html": "השינויים שלך אמורים להופיע ב־OpenStreetMap בעוד מספר דקות. במפות אחרות השינויים עשויים להופיע בעיכוב קל.", + "help_link_text": "פרטים", + "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F", + "view_on_osm": "הצגת השינויים ב־OSM", + "changeset_id": "ערכת השינויים שלך מס׳: {changeset_id}", + "like_osm": "OpenStreetMap אתה אוהבך? ניתן להתחבר לחברים נוספים:", + "more": "עוד", + "events": "אירועים", + "languages": "שפות: {languages}", + "missing": "משהו חסר ברשימה הזו?", + "tell_us": "נשמח לשמוע!" }, "confirm": { "okay": "אישור", @@ -687,14 +724,14 @@ }, "openstreetcam_images": { "tooltip": "תמונות בהתמקדות על רחובות מ־OpenStreetCam", - "title": "שכבת תמרורים (OpenStreetCam)" + "title": "שכבת תמונות קרקע (OpenStreetCam)" }, "openstreetcam": { "view_on_openstreetcam": "צפייה בתמונה הזאת ב־OpenStreetCam" }, "help": { "title": "עזרה", - "key": "×¢", + "key": "H", "help": { "title": "עזרה", "welcome": "ברוך בואך לעורך iD עבור [OpenStreetMap](https://www.openstreetmap.org/). עם העורך הזה ניתן לעדכן את OpenStreetMap ישירות מהדפדפן שלך.", @@ -722,11 +759,16 @@ "select_right_click": "יש ללחוץ {rightclick} לחיצה ימנית על תכונה כדי להציג את תפריט העריכה, שמציג את הפקודות הזמינות, כגון הטיה, הזזה ומחיקה.", "multiselect_h": "בחירה במגוון", "multiselect_shift_click": "`{shift}`+{leftclick} לחיצה שמאלית כדי לבחור כמה תכונות יחדיו. אפשרות זו מקלה על העברה או מחיקה של מגוון פריטים.", + "multiselect_lasso": "דרך נוספת לבחור מספר תכונות היא להחזיק את המקש `{shift}` ואז ללחוץ להחזיק את כפתור העכבר השמאלי ולגרור את העכבר כדי לצייר בחירה בצורת פלצור. כל הנקודות בתוך אזור הפלצור תיבחרנה.", "undo_redo_h": "ביטול ושחזור ביטול", + "undo_redo": "העריכות שלך נשמרות מקומית בדפדפן שלך עד לבחירתך בשמירתן לשרת של OpenStreetMap. ניתן לבטל עריכות על ידי לחיצה על הכפתור {undo} **ביטול** וניתן ", "save_h": "שמירה", "save": "יש ללחוץ על {save} **שמירה** כדי לסיים את העריכות שלך ולשלוח אותן ל־OpenStreetMap. מומלץ לזכור לשמור את עבודתך לעתים תכופות!", + "save_validation": "במסך השמירה תהיה לך אפשרות לסקור את מה שעשית. iD יבצע בדיקות בסיסיות לאיתור מידע וחסר ועשוי גם להציג הצעות ואזהרות מועילות אם משהו לא נראה כשורה.", "upload_h": "העלאה", + "upload": "בטרם העלאת השינויים שלך עליך לכתוב [הערה לערכת השינויים](https://wiki.openstreetmap.org/wiki/Good_changeset_comments). לאחר מכן יש ללחוץ על **העלאה** כדי לשלוח את השינויים שלך ל־OpenStreetMap, שם הם ימוזגו למפה ויהיו גלויים לעיני כל.", "backups_h": "גיבויים אוטומטיים", + "backups": "אם אין לך אפשרות לסיים את העריכות שלך בבת אחת, למשל: המחשב קרס או שלשונית הדפדפן שלך נסגרה, העריכות שלך עדיין נשמרות באזור האחסון שבדפדפן שלך. ניתן לחזור בהמשך (באותו הדפדפן והמחשב) ו־iD יציע לך לשחזר את עבודתך.", "keyboard_h": "קיצורי מקלדת", "keyboard": "ניתן לצפות ברשימה של קיצורי המקלדת על ידי לחיצה על המקש ‚?’." }, @@ -765,16 +807,25 @@ "add_line_draw": "עכשיו, עליך להציב את סמן העכבר על מיקום תחילת הקו המיועד {leftclick} וללחוץ עם המקש השמאלי או ללחוץ על המקש ‚רווח’ כדי להתחיל להציב מפרקים לאורך הקו. ניתן להמשיך ולהוסיף עוד מפרקים על ידי לחיצה עם העכבר או על מקש ה‚רווח’. בעת הציור, ניתן להתקרב או לגרור את המפה כדי להוסיף עוד פרטים.", "add_line_finish": "כדי לסיים ציור קו, יש ללחוץ על `{return}` או ללחוץ שוב על המפרק האחרון.", "modify_line_h": "עריכת קווים", + "modify_line_dragnode": "לעתים מופיעים קווים בעלי צורה שגויה, למשל, דרך שאינה תואמת לצילום הרקע. כדי לערוך את צורת הקו, ראשית יש ללחוץ {leftclick} לחיצה שמאלית כדי לבחור אותו. כל מפרקי הקו יופיעו בתור עיגולים קטנים. כעת ניתן לגרור את המפרקים האלה למיקומים נכונים יותר.", + "modify_line_addnode": "ניתן גם ליצור מפרקים חדשים לאורכו של קו בין אם על ידי {leftclick}**x2** לחיצה כפולה על הקו כולו או על ידי גרירת המשולשים הקטנים בנקודות האמצע שבין המפרקים.", "connect_line_h": "חיבור קווים", "connect_line": "חיבור כבישים כראוי חשוב לתפעול המפה וגם כדי לספק הנחיות לנהיגה בעזרת המפה.", "connect_line_display": "החיבורים בין כבישים מסומנים בעיגול אפור. נקודות הקצה של הקווים מסומנים בעיגולים לבנים גדולים יותר אם הם לא מחוברים לשום דבר.", + "connect_line_drag": "כדי לחבר קו לתכונה אחרת, יש לגרור את אחד ממפרקי הקו לתכונה האחרת עד שהתכונות נצמדות זו לזו. עצה: ניתן להחזיק את המקש `{alt}` כדי למנוע מהמפרקים להתחבר לתכונות אחרות.", "connect_line_tag": "אם ידוע לך שבנקודת החיבור יש רמזורים או מעברי חציה, ניתן להוסיף אותם על ידי בחירת הצומת המחבר ובחירת סוג התכונה המתאים באמצעות עורך התכונות.", "disconnect_line_h": "ניתוק קווים", + "disconnect_line_command": "כדי לנתק דרך מתכונה אחרת, יש ללחוץ עם {rightclick} מקש ימני על המפגש ביניהם ולבחור בפקודה {disconnect} **ניתוק** מתפריט העריכה.", "move_line_h": "הזזת קווים", - "delete_line_h": "מחיקת קווים" + "move_line_command": "כדי להעביר קו שלם, יש ללחוץ עם {rightclick} כפתור ימני על הקו ולבחור בפקודה **העברה** מתפריט העריכה. לאחר מכן יש להעביר את העכבר וללחוץ {leftclick} לחיצה שמאלית כדי להציב את הקו במיקום חדש.", + "move_line_connected": "קווים שמחוברים לתכונות אחרות יוסיפו להיות מחוברים גם עם העברת הקו למיקום החדש. יתכן ש־iD ימנע ממך להעביר קו דרך קו מחובר אחר.", + "delete_line_h": "מחיקת קווים", + "delete_line": "אם קיים קו שגוי לחלוטין, למשל דרך שאינה קיימת במציאות, אין שום מניעה למחוק אותה. כדאי לנקוט משנה זהירות בעת מחיקת תכונות: צילומי הרקע המופיעים עשויים להיות בלתי עדכניים וכביש שנראה שגוי יכול להיות פשוט חדש.", + "delete_line_command": "כדי למחוק קו, יש ללחוץ עם {rightclick} מקש ימני על הקו כדי לבחור אותו ולהציג את תפריט העריכה, לאחר מכן יש להשתמש בפקודה {delete} **מחיקה**." }, "areas": { "title": "שטחים", + "intro": "*שטחים* משמשים להצגת גבולות של תכונות כגון אגמים, בניינים ואזורי מגורים. יש לסמן שטחים לאורך גבולות התכונה המיוצגת, למשל, מסביב לבסיס הבניין.", "point_or_area_h": "נקודות או שטחים?", "point_or_area": "תכונות רבות ניתנות לייצוג כנקודות או שטחים. עליך למפות מבנים וקווי מתאר של נכסים כשטחים ככל הניתן. יש להציב נקודות בתוך שטח בניין כדי לייצג עסקים, שירותים ותכונות נוספות שנמצאות בתוך הבניין.", "add_area_h": "הוספת שטחים", @@ -782,51 +833,101 @@ "add_area_draw": "עכשיו, עליך להציב את סמן העכבר על אחת מהפינות של התכונה {leftclick} וללחוץ עם המקש השמאלי או ללחוץ על המקש ‚רווח’ כדי להתחיל להציב מפרקים מסביב למסגרת החיצונית של האזור. ניתן להמשיך ולהוסיף עוד מפרקים על ידי לחיצה עם העכבר או על מקש ה‚רווח’. בעת הציור, ניתן להתקרב או לגרור את המפה כדי להוסיף עוד פרטים.", "add_area_finish": "כדי לסיים ציור שטח, יש ללחוץ על `{return}` או ללחוץ שוב על המפרק הראשון או האחרון.", "square_area_h": "ריבוע פינות", + "square_area_command": "לתכונות שטח רבות כגון בניינים יש פינות מרובעות. כדי לשנות פינות של שטח, יש ללחוץ עם {rightclick} כפתור ימני על קצה השטח ולבחור בפקודה {orthogonalize} **ריבוע** מתפריט העריכה.", "modify_area_h": "שינוי שטחים", - "delete_area_h": "מחיקת שטחים" + "modify_area_dragnode": "לעתים מופיעים שטחים בעלי צורה שגויה, למשל, בניין שאינו תואם לצילום הרקע. כדי לערוך את צורת השטח, ראשית יש ללחוץ {leftclick} לחיצה שמאלית כדי לבחור אותו. כל מפרקי השטח יופיעו בתור עיגולים קטנים. כעת ניתן לגרור את המפרקים האלה למיקומים נכונים יותר.", + "modify_area_addnode": "ניתן ליצור מפרקים חדשים לאורך שטח מסוים או עם {leftclick}**×2** לחיצה כפולה על מסגרת השטח או על ידי גרירת המשולשים הקטנים בנקודות המרכז בין המפרקים.", + "delete_area_h": "מחיקת שטחים", + "delete_area": "אם קיים שטח שלם שגוי, למשל בניין שלא קיים במציאות, אפשר למחוק אותו. יש לנקוט במשנה זהירות בעת מחיקת תכונות - תמונות הרקע בהן נעשה שימוש עשויות להיות מיושנות ובניינים שנראים בעייתיים עשויים להיות חדשים.", + "delete_area_command": "כדי למחוק שטח, יש ללחוץ עם {rightclick} כפתור ימני על השטח כדי לבחור אותו ולהציג את תפריט העריכה, לאחר מכן יש להשתמש בפקודה {delete} **מחיקה**." }, "relations": { "title": "יחסים", "intro": "*יחס* הוא סוג מיוחד של תכונה ב־OpenStreetMap המקבצת תחתיה תכונות אחרות. התכונות ששייכות ליחס נקראות *חברות* ולכל חברה יכול להיות *תפקיד* ביחס.", "edit_relation_h": "עריכת יחסים", + "edit_relation": "בתחתית עורך התכונות, ניתן להרחיב את האגף „כל היחסים” כדי לראות אם התכונה הנבחרת חברה בקשרים כלשהם. לאחר מגן ניתן ללחוץ על היחס כדי לבחור ולערוך אותו.", + "edit_relation_add": "כדי להוסיף תכונה ליחס, יש לבחור את התכונה ואז ללחוץ על הכפתור {add} הוספה באגף „כל היחסים” של עורך התכונות. ניתן לבחור מרשימה של יחסים קרובים או לבחור באפשרות „יחס חדש…”.", + "edit_relation_delete": "ניתן ללחוץ על הכפתור {delete} **מחיקה** כדי להסיר את התכונה הנבחרת מהיחס, היחס יימחק אוטומטית.", "maintain_relation_h": "שימור יחסים", + "maintain_relation": "על פי רוב, iD ישמור על הקשרים אוטומטית בזמן העריכה. עליך לטפל במצבים בהם ישנן תכונות שהוחלפו שהן חלק מיחסים. למשל, מחיקת קטע מדרך וציור קטע דרך חדש שיחליף אותו, עליך להוסיף את הקטע החדש לאותם היחסים (נתיבים, הגבלות פניה וכו׳) כמו המקור.", "relation_types_h": "סוגי יחסים", "multipolygon_h": "רבי־מצולעים", "multipolygon": "יחס *רב־מצולע* הוא קבוצה של תכונה *חיצונית* אחת או יותר ותכונה פנימית אחת או יותר. התכונות החיצוניות מגדירות את הגבולות החיצוניים של הרב־מצולע ואילו התכונות הפנימיות מגדירות תת־שטחים או חורים שנחתכו מחוץ לרב־מצולע.", "multipolygon_create": "כדי ליצור רב־מצולע, למשל: בניין עם חור, יש לצייר את הגבולות החיצוניים של השטח ואת הגבול הפנימי כקו או סוג אחר של שטח. לאחר מכן `{shift}`+{leftclick} עם לחיצה שמאלית כדי לבחור את שתי התכונות, {rightclick} לחיצה ימנית כדי להציג את תפריט העריכה ואז לבחור את הפקודה {merge} **מיזוג**.", "multipolygon_merge": "מיזוג מגוון קווים או שטחים יגרום ליצירת קשר רב־מצולע חדש שמכיל בתוכו את כל השטחים הנבחרים כחברים בו. iD יבחר את התפקידים הפנימיים והחיצוניים אוטומטית בהתחשב באילו תכונות כלולות בתוך תכונות אחרות.", "turn_restriction_h": "הגבלות פנייה", + "turn_restriction": "יחס *הגבלת פנייה* הוא קבוצה של מגוון מקטעי דרך שנפגשים. הגבלות פנייה מורכבות מדרך ה*מוצא*, מפרק או דרכי *מעבר* ודרך *יעד*.", + "turn_restriction_field": "כדי לערוך הגבלות פנייה, יש לבחור את הצומת בה דרך אחת או יותר נפגשות. עורך התכונות יציג שדה „הגבלות פנייה” שמכיל את דגם הצומת.", + "turn_restriction_editing": "בשדה „הגבלות פנייה” יש ללחוץ על דרך ה„מוצא” ולראות האם פניות מותרות או מוגבלות לכל אחת מדרכי ה„יעד”. ניתן ללחוץ על סמלי הפנייה כדי להחליף בין מורשה למוגבל. iD ייצור קשרים אוטומטית ויגדיר מוצא, מעבר ויעד לכללים בהתאם לבחירותיך.", "route_h": "נתיבים", - "boundary_h": "גבולות" + "route": "יחס *מסלול* הוא קבוצה של תכונה אחת או יותר מסוג קו שמייצרות רשת של מסלולים, כגון מסלולי אוטובוס, מסלול רכבת או כביש מהיר.", + "route_add": "כדי להוסיף תכונה ליחס מסלול, יש לבחור את התכונה ולגלול למטה לאגף „כל היחסים” בעורך התכונות ואז ללחוץ על הכפתור {plus} הוספה כדי להוסיף את התכונה הזאת ליחס קיים בסביבה או ליחס חדש.", + "boundary_h": "גבולות", + "boundary": "יחס *גבול* הוא קבוצה של תכונה אחת או יותר מסוג קו שמייצרות גבול מנהלי יחד.", + "boundary_add": "כדי להוסיף תכונה ליחס גבול, יש לבחור את התכונה ולגלול לאגף „כל היחסים” בעורך התכונות ואז ללחוץ על {plus} כפתור ההוספה כדי להוסיף את התכונה הזאת ליחס קרוב נוכחי או ליחס חדש." }, "imagery": { "title": "תמונות רקע", + "intro": "צילום הרקע שמופיע מתחת לנתוני המפה הוא מקור חשוב למיפוי. התמונה הזאת יכולה להיות צילומי אוויר שנאספו דרך לוויינים, מטוסים ורחפנים או סריקת מפות היסטוריות או נתוני מקור חופשיים שזמינים לציבור הרחב.", "sources_h": "מקורות תמונה", "choosing": "כדי לראות אילו מקורות מפות זמינים לעריכה, יש ללחוץ על הכפתור {layers} **הגדרות רקע** לצד המפה.", + "sources": "כבררת מחדל נבחרת שכבת לוויין של [מפות Bing](https://www.bing.com/maps/) כתמונת הרקע. בהתאם למיקום העריכה ישנם מקורות צילומי אוויר אחרות. חלקן עשויות להיות חדשות יותר או באיכות גבוהה יותר כך שתמיד כדאי לבדוק ולראות איזו שכבה מעניקה את נוחות המיפוי המרבית.", "offsets_h": "שינוי היסט תמונה", + "offset": "צילומי הרקע לעתים חוטאים לדיוק נתוני המפה. אם דרכים ובניינים רבים סוטים מעט הצידה, כנראה שהצילום שגוי, לכן, לא כדאי להעביר את כולם כדי להתאים לרקע. במקום, ניתן להתאים את הרקע כדי שיתאים לנתונים הקיימים על ידי הרחבת האגף „שינוי היסט תמונה” בתחתית חלונית הגדרות הרקע.", "offset_change": "יש ללחוץ על המשולשים הקטנים כדי להתאים את היסט תמונת הרקע בצעדים קטנים, לחלופין להחזיק את סמן העכבר השמאלי ולגרור עם הריבוע האפור כדי לגלול להתאמת תמונת הרקע." }, "streetlevel": { "title": "תמונות ברמת רחוב", + "intro": "תמונות ברמת רחוב שימושיות למיפוי תמרורים, בתי עסק ופרטים נוספים שלא ניתן לראות מהלוויין ובצילום אווירי. עורך iD תומך בתמונות ברמת רחוב בעזרת [Mapillary](https://www.mapillary.com) ו־[OpenStreetCam](https://www.openstreetcam.org).", "using_h": "שימוש בתמונות ברמת רחוב", - "using": "כדי להשתמש בתמונות ברמת רחוב לטובת מיפוי, יש ללחוץ על הלוח {data} **נתוני מפה**  לצד המפה כדי להפעיל או להשבית את שכבות התמונות הזמינות." + "using": "כדי להשתמש בתמונות ברמת רחוב לטובת מיפוי, יש ללחוץ על הלוח {data} **נתוני מפה**  לצד המפה כדי להפעיל או להשבית את שכבות התמונות הזמינות.", + "photos": "כשאפשרות זו פעילה, שכבת התמונה מציגה קו לאורך סדרה של תמונות. ברמות תקריב גבוהות יותר, עיגול מסמן כל מיקום של תמונה, וברמות תקריב יותר גדולות, חרוט מציין את המיקום אליו פנתה המצלמה כאשר התמונה צולמה.", + "viewer": "בעת לחיצה על מיקומי תמונות, מציג תמונות יופיע בפינה תחתונה במסך. מציג התמונות מכיל פקדים לצורך צעידה קדימה ואחורה ברצף התמונות. במציג יופיע גם שם המשתמש של מי שצילם את התמונה, התאריך בו היא צולמה וקישור לצפות בתמונה באתר המקורי." }, "gps": { "title": "עקבות GPS", + "intro": "עקבות ה־GPS הן מקור נתונים רב ערך עבור OpenStreetMap. עורך זה תומך בקובצי *‎.gpx*,‏ *‎.geojson*,‏ ו־*‎.kml* שבמחשב המקומי שלך. ניתן לאסוף עקבות GPS בעזרת טלפון חכם, צמידי כושר או התקני GPS אחרים.", "survey": "למידע על כיצד לבצע סקר GPS, יש לקרוא את [מיפוי עם טלפון חכם, GPS או דף](http://learnosm.org/en/mobile-mapping/).", "using_h": "שימוש בעקבות GPS", + "using": "כדי להשתמש בעקבות GPS לטובת מיפוי, יש לגרור ולשחרר את קובץ הנתונים לעורך המפות. אם הקובץ יזוהה, הוא יצויר על המפה בקו סגול בהיר. יש ללחוץ על חלונית {data} **נתוני המפה** לצד המפה כדי להפעיל, להשבית או לקרב את התצוגה אל נתוני ה־GPS שלך.", "tracing": "מסלול ה־GPS לא נשלח אל OpenStreetMap - הדרך הטובה ביותר להשתמש בו היא לצייר על המפה, תוך שימוש במסלול כהנחיה להוספת תכונות חדשות.", "upload": "באפשרותך [להעלות את נתוני ה־GPS שלך ל־OpenStreetMap](https://www.openstreetmap.org/trace/create) לטובת משתמשים אחרים." }, "field": { "restrictions": { + "title": "עזרה בהגבלת פניות", "about": { "title": "על אודות", - "about": "שדה זה מאפשר לך לחקור ולשנות את מגבלות הפנייה. השדה מציג את דגם הצומת הנבחר לרבות דרכים קרובות שמחוברות אליו." + "about": "שדה זה מאפשר לך לחקור ולשנות את מגבלות הפנייה. השדה מציג את דגם הצומת הנבחר לרבות דרכים קרובות שמחוברות אליו.", + "from_via_to": "הגבלת פנייה תמיד מכילה את אחד מהבאים: **דרך מוצא** אחת, **דרך יעד** אחת וגם **מפרק מעבר** אחד או מספר **דרכי מעבר**.", + "maxdist": "הסרגל „{distField}” שולט עד לאיזה מרחק לחפש דרכים נוספות מחוברות.", + "maxvia": "הסרגל „{viaField}” שולט כמה דרכי ביניים יכללו בחיפוש. (עצה: כמה שיותר פשוט יותר טוב)" }, "inspecting": { + "title": "חקירה", + "about": "יש לעבור מעל כל מקטע **מוצא** כדי לצפות האם קיימות מגבלות פנייה. כל **יעד** יצויר בהצללה צבעונית שתסמן האם קיימת מגבלה.", + "from_shadow": "{fromShadow} **מקטע מוצא**", + "allow_shadow": "{allowShadow} **יעד מורשה**", + "restrict_shadow": "{restrictShadow} **יעד מוגבל**", + "only_shadow": "{onlyShadow} **יעד בלעדי**", "restricted": "משמעות הביטוי „מוגבלת” היא שיש מגבלת פנייה, למשל: „אסור לפנות שמאלה”.", "only": "משמעות הביטוי „בלבד” היא שרכב שנוסע בנתיב הזה יכול לבצע בחירה אחת בלבד, למשל „להמשיך ישר בלבד”." + }, + "modifying": { + "title": "עריכה", + "about": "כדי לערוך הגבלות פנייה, ראשית עליך ללחוץ על מקטע **מוצא** כדי לבחור אותו. המקטע הנבחר יהבהב וכל דרכי ה**יעד** האפשריות תופענה עם סמלי פנייה.", + "indicators": "לאחר מכן, יש ללחוץ על סמל פנייה כדי לעבור בין „מורשה”, „מוגבל” ו„בלעדי”.", + "allow_turn": "{allowTurn} **יעד מורשה**", + "restrict_turn": "{restrictTurn} **יעד מוגבל**", + "only_turn": "{onlyTurn} **יעד בלעדי**" + }, + "tips": { + "title": "עצות", + "simple": "**להעדיף הגבלות פשוטות על פני הגבלות מורכבות.**", + "simple_example": "למשל, יש להימנע מהגבלת פנייה בדרך ביניים במקרה שהגבלת פנייה בצומת מספיקה.", + "indirect": "**חלק מההגבלות מציגות את הטקסט „(עקיף)” והן מוצגות בצבע יותר בהיר.**", + "indirect_example": "הגבלות אלו קיימות עקב הגבלה אחרת בקרבת מקום. למשל, הגבלת „ישר בלבד” תיצור הגבלות „אין פנייה” לכל שאר הנתיבים שעוברים בצומת.", + "indirect_noedit": "לא ניתן לערוך הגבלות עקיפות. במקום, יש לערוך את המגבלה הישירה הקרובה." } } } @@ -835,7 +936,7 @@ "done": "סיום", "ok": "אישור", "graph": { - "block_number": "", + "block_number": "אישור", "city": "קריית שלושה", "county": "", "district": "", @@ -850,7 +951,7 @@ "countrycode": "il", "name": { "1st-avenue": "אחד העם", - "2nd-avenue": "שדרת הדודאים", + "2nd-avenue": "שדרת בן גוריון", "4th-avenue": "שדרות הארבעה", "5th-avenue": "שדרת החמישה", "6th-avenue": "שד׳ שש", @@ -863,14 +964,14 @@ "12th-avenue": "שד׳ תרי עשר", "access-point-employment": "מעוף משאבי אנוש", "adams-street": "רח׳ המלך ג׳ורג׳", - "andrews-elementary-school": "בית ספר יסודי קינג ג׳ורג׳", - "andrews-street": "רח׳ יהודה המכבי", + "andrews-elementary-school": "בית ספר יסודי נהלל", + "andrews-street": "רח׳ נהלל", "armitage-street": "רחוב הארמונות", "barrows-school": "בית ספר ברוש", "battle-street": "רח׳ הקרב", "bennett-street": "רב בנטל", "bowman-park": "פארק באום", - "collins-drive": "דרך קוליץ", + "collins-drive": "דרך קולין", "conrail-railroad": "מסילת רכבת", "conservation-park": "פארק שימור", "constantine-street": "רחוב קונדר", @@ -966,6 +1067,7 @@ "words": "המדריך הזה יציג מספר מילים ורעיונות חדשים. בעת הצגת מילה חדשה נשתמש בכתב *נטוי*.", "mouse": "ניתן להשתמש בכל התקן קלט כדי לערוך את המפה אך מדריך זה יוצא מנקודת הנחה שיש לך עכבר עם שני כפתורים. **אם ברצונך לחבר עכבר כדאי לעשות זאת ואז ללחוץ על אישור.**", "leftclick": "כשהמדריך הזה מבקש ממך ללחוץ לחיצה כפולה, כוונתנו היא לכפתור השמאלי. במשטח מגע יכול להיות שמדובר בלחיצה בודדת או בהקשה באצבע אחת. **יש ללחוץ לחיצה שמאלית {num} פעמים.**", + "rightclick": "לעתים נבקש ממך ללחוץ עם כפתור ימני. יכול להיות שמדובר בפעולה זהה ל־Ctrl עם לחיצה או לחיצה בשתי אצבעות על משטח מעקב. יכול להיות שבמקלדת שלך יש אפילו כפתור ‚תפריט’ שעובד כמו מקש ימני. **יש ללחוץ עם הכפתור הימני {num} פעמים.**", "chapters": "צלחנו את זה! ניתן להשתמש בכפתורים שלהלן כדי לדלג על פרקים בכל עת או כדי להתחיל פרק מחדש אם נתקעת. בואו נתחיל! **יש ללחוץ על ‚{next}’ כדי להמשיך.**" }, "navigation": { @@ -984,11 +1086,13 @@ "search_street": "ניתן גם לחפש תכונות בתצוגה הנוכחית או בכל רחבי העולם. **חיפוש אחר ‚{name}’.**", "choose_street": "**יש לבחור {name} מהרשימה כדי לבחור אותו.**", "selected_street": "מצוין! בחרת את {name}.", - "editor_street": "השדות שמופיעים לייצוג רחוב הם שונים מאלו שמופיעים על בניין העירייה.{br}לרחוב הנבחר הזה, עורך התכונות מציג שדות כמו ‏‚{field1}’ ו־‏‚{field2}’. **ניתן לסגור את עורך התכונות בלחיצה על escape או על הכפתור {button}.**" + "editor_street": "השדות שמופיעים לייצוג רחוב הם שונים מאלו שמופיעים על בניין העירייה.{br}לרחוב הנבחר הזה, עורך התכונות מציג שדות כמו ‏‚{field1}’ ו־‏‚{field2}’. **ניתן לסגור את עורך התכונות בלחיצה על escape או על הכפתור {button}.**", + "play": "כדי לנסות להזיז את המפה וללחוץ על כמה תכונות אחרות כדי לראות מה ניתן להוסיף ל־OpenStreetMap. **כשסיימת להתאמן וניתן להמשיך לפרק הבא יש ללחוץ על ‚{next}’.**" }, "points": { "title": "נקודות", "add_point": "*נקודות* יכולות לציין תכונות כגון חנויות, מסעדות ואנדרטות.{br}הן מסמנות מיקום מסוים ומציינות מה יש באותו המיקום. **יש ללחוץ על הכפתור {button} נקודה כדי להוסיף נקודה חדשה.**", + "place_point": "כדי להציב את הנקודה החדשה על המפה, עליך להציב את סמן העכבר שלך במיקום הייעודי של הנקודה ולאחר מכן עליך ללחוץ עם הכפתור השמאלי או ללחוץ על רווח. **יש להעביר את סמן העכבר מעבר לבניין הזה וללחוץ עם הכפתור השמאלי או הרווח.**", "search_cafe": "ישנן מגוון תכונות שניתן לייצג בנקודות. הנקודה שהרגע הוספת היא בית קפה. **חיפוש אחר ‚{preset}’.**", "choose_cafe": "**יש לבחור {preset} מהרשימה.**", "feature_editor": "הנקודה מסומנת כעת כבית קפה. באמצעות עורך התכונות, ניתן להוסיף מידע נוסף על בית הקפה.", @@ -1005,6 +1109,8 @@ "areas": { "title": "אזורים", "add_playground": "*שטחים* משמשים להצגת הגבולות של מאפיינים כגון אגמים, בניינים ושטחי מגורים.{br}ניתן גם להשתמש בהם לטובת מיפוי מפורט יותר של תכונות רבות שבדרך כלל ימופו כנקודות. **יש ללחוץ על הכפתור {button} שטח כדי להוסיף שטח חדש.**", + "start_playground": "בואו נוסיף את מגרש המשחקים הזה לאזור ציור המפה. ציור השטחים נעשה על ידי הצבת *מפרקים* לאורך הגבול החיצוני של התכונה. **יש להקיש על רווח כדי להציב מפרק התחלתי בכל אחת מפינות מגרש המשחקים.**", + "continue_playground": "ניתן להמשיך לצייר את השטח על ידי הצבת מפרקים נוספים לאורך קצוות מגרש המשחקים. זה בסדר לחבר את השטח לנתיבי הליכה קיימים.{br}עצה: ניתן להחזיק את המקש ‚{alt}’ כדי למנוע מהמפרקים להתחבר לתכונות. **נא להמשיך לצייר את השטח של מגרש המשחקים.**", "finish_playground": "יש לסיים את ציור השטח על ידי לחיצה על enter, או על ידי לחיצה על המפרק הראשון או האחרון. **יש לסיים ציור שטח למגרש המשחקים.**", "search_playground": "**חיפוש אחר ‚{preset}’.**", "choose_playground": "**יש לבחור {preset} מהרשימה.**", @@ -1135,9 +1241,11 @@ "search": "חיפוש תכונות שתואמות את טקסט החיפוש" }, "with_selected": { + "title": "לאחר בחירת התכונה", "edit_menu": "החלפת תצוגה של תפריט עריכה" }, "vertex_selected": { + "title": "עם מפרק שנבחר", "previous": "קפיצה למפרק הקודם", "next": "קפיצה למפרק הבא", "first": "קפיצה למפרק הראשון", @@ -1151,7 +1259,7 @@ "title": "ציור", "add_point": "מצב ‚הוספת נקודה’", "add_line": "מצב ‚הוספת קו’", - "add_area": "מצב ‚הוספת שטח’", + "add_area": "מצב ’הוספת שטח’", "place_point": "הצבת נקודה", "disable_snap": "יש להחזיק כדי להשבית הצמדת נקודות", "stop_line": "סיום ציור קו או שטח" @@ -1162,11 +1270,13 @@ "merge": "שילוב (מיזוג) התכונות הנבחרות", "disconnect": "ניתוק תכונות במפרק הנבחר", "split": "פיצול קו לשניים במפרק הנבחר", - "reverse": "ביפוך כיוון קו", + "reverse": "היפוך כיוון קו", "move": "העברת התכונות הנבחרות", "rotate": "הטיית התכונות הנבחרות", "orthogonalize": "יישור קו / פינות של איזור ריבועי", "circularize": "עיגול פינות של קו סגור או שטח", + "reflect_long": "היפוך תכונות לאורך הציר הארוך", + "reflect_short": "היפוך תכונות לאורך הציר הקצר", "delete": "מחיקת התכונות הנבחרות" }, "commands": { @@ -1192,12 +1302,19 @@ }, "units": { "feet": "{quantity} רגל", - "miles": "{quantity} מיל", + "miles": "{quantity} מייל", + "square_feet": "{quantity} רגל רבוע", + "square_miles": "{quantity} מייל רבוע", + "acres": "{quantity} אקר", "meters": "{quantity} מ׳", "kilometers": "{quantity} ק״מ", "square_meters": "{quantity} מ׳²", "square_kilometers": "{quantity} ק״מ²", + "hectares": "{quantity} הקטאר", + "area_pair": "{area1} ({area2})", "arcdegrees": "{quantity}°", + "arcminutes": "{quantity}′", + "arcseconds": "{quantity}″", "north": "צפ׳", "south": "דר׳", "east": "מז׳", @@ -1532,7 +1649,12 @@ "label": "סוג" }, "crane/type": { - "label": "סוג עגורן" + "label": "סוג עגורן", + "options": { + "floor-mounted_crane": "עגורן מקובע", + "portal_crane": "עגורן נייד", + "travel_lift": "עגורן מכולות" + } }, "crop": { "label": "יבול" @@ -1656,9 +1778,15 @@ "forward": "קדימה" } }, + "dispensing": { + "label": "מחלק מרשמים" + }, "display": { "label": "הצגה" }, + "distance": { + "label": "סך כל המרחק" + }, "dock": { "label": "סוג" }, @@ -1676,7 +1804,8 @@ "no": "אין", "rail": "מסילה מחושמלת", "yes": "יש (לא צוין)" - } + }, + "placeholder": "מסילה מחושמלת" }, "elevation": { "label": "גובה" @@ -1720,6 +1849,7 @@ "fire_hydrant/type": { "label": "סוג", "options": { + "pillar": "עמוד\\מעל האדמה", "pond": "בריכת דגים\\נוי", "underground": "תת־קרקעי", "wall": "קיר" @@ -1744,6 +1874,9 @@ "fuel_multi": { "label": "סוגי דלק" }, + "gauge": { + "label": "מדד" + }, "gender": { "label": "מגדר", "options": { @@ -1780,6 +1913,7 @@ "label": "מעקה" }, "hashtags": { + "label": "Hashtag מומלץ", "placeholder": "#דוגמא" }, "healthcare": { @@ -1804,6 +1938,33 @@ "label": "סלים", "placeholder": "1, 2, 4" }, + "horse_dressage": { + "label": "רכיבה אומנותית", + "options": { + "equestrian": "כן", + "undefined": "לא" + } + }, + "horse_riding": { + "label": "רכיבה על סוסים", + "options": { + "horse_riding": "כן", + "undefined": "לא" + } + }, + "horse_scale": { + "label": "קושי הרכיבה על סוסים", + "options": { + "common": "קל: אין בעיות או קשיים. (בררת מחדל)" + } + }, + "horse_stables": { + "label": "אורוות רכיבה", + "options": { + "stables": "יש", + "undefined": "אין" + } + }, "iata": { "label": "IATA" }, @@ -1823,9 +1984,18 @@ "indoor": { "label": "בפנים" }, + "industrial": { + "label": "סוג" + }, "information": { "label": "סוג" }, + "inscription": { + "label": "הקדשה" + }, + "intermittent": { + "label": "תקופתי" + }, "internet_access": { "label": "גישה לאינטרנט", "options": { @@ -1862,22 +2032,40 @@ "label": "שכבה", "placeholder": "0" }, + "leaf_cycle": { + "label": "מחזו עלים", + "options": { + "deciduous": "נשירים", + "evergreen": "ירוק-עד", + "mixed": "מעורב", + "semi_deciduous": "חצי נשירים", + "semi_evergreen": "חצי ירוק-עד" + } + }, "leaf_cycle_singular": { + "label": "מחזו עלים", "options": { + "deciduous": "נשירים", "evergreen": "ירוק-עד", + "semi_deciduous": "חצי נשירים", "semi_evergreen": "חצי ירוק-עד" } }, "leaf_type": { + "label": "סוג עלה", "options": { + "broadleaved": "עלים רחבים", "leafless": "ללא עלים", - "mixed": "מעורב" + "mixed": "מעורב", + "needleleaved": "עלים מחטניים" } }, "leaf_type_singular": { "label": "סוג עלה", "options": { - "leafless": "ללא עלה" + "broadleaved": "עלים רחבים", + "leafless": "ללא עלה", + "needleleaved": "עלים מחטניים" } }, "leisure": { @@ -2040,7 +2228,11 @@ "label": "חנה וסע" }, "parking": { - "label": "סוג" + "label": "סוג", + "options": { + "surface": "משטח", + "underground": "תת־קרקעי" + } }, "payment_multi": { "label": "צורות תשלום" @@ -2055,6 +2247,7 @@ "piste/difficulty": { "label": "דרגת קושי", "options": { + "advanced": "מתקדם (יהלום שחור)", "easy": "קל (עיגול ירוק)", "expert": "קשה מאוד (שני יהלומים שחורים)", "extreme": "קיצוני (דורש ציוד טיפוס)", @@ -2076,7 +2269,13 @@ "label": "סוג", "options": { "downhill": "מורד", + "hike": "טיול רגל", "ice_skate": "החלקרח", + "nordic": "נורדי", + "playground": "גן שעשועים", + "skitour": "סיור סקי", + "sled": "מזחלת", + "sleigh": "מזחלת", "snow_park": "פארק שלג" } }, @@ -2117,11 +2316,30 @@ "railway": { "label": "סוג" }, + "railway/position": { + "label": "אבן דרך", + "placeholder": "מרחק עד עשרון (123.4)" + }, "railway/signal/direction": { + "label": "כיוון", "options": { + "backward": "אחורה", + "both": "שניהם \\ כולם", "forward": "קדימה" } }, + "rating": { + "label": "דירוג חשמל" + }, + "recycling_accepts": { + "label": "מסכים" + }, + "ref": { + "label": "מספר הפניה" + }, + "ref/isil": { + "label": "קוד ISIL" + }, "ref_aeroway_gate": { "label": "מספר שער" }, @@ -2173,10 +2391,26 @@ "route_master": { "label": "סוג" }, + "sac_scale": { + "label": "דרגת קושי", + "options": { + "alpine_hiking": "T4: טיול אלפי", + "demanding_alpine_hiking": "T5: טיול אלפי קשה", + "demanding_mountain_hiking": "T3: טיול הרים קשה", + "difficult_alpine_hiking": "T6: טיול אלפי קשה מאוד", + "hiking": "T1: טיול רגל", + "mountain_hiking": "T2: טיול הרים" + }, + "placeholder": "טיול הרים, טיול אלפים" + }, + "sanitary_dump_station": { + "label": "תחנת סילוק" + }, "seasonal": { "label": "עונתי" }, "second_hand": { + "label": "מכירת משומשים", "options": { "no": "אין", "only": "בלבד", @@ -2194,7 +2428,11 @@ "label": "שירותים" }, "service_rail": { - "label": "סוג שירות" + "label": "סוג שירות", + "options": { + "spur": "דורבן", + "yard": "גינה" + } }, "service_times": { "label": "שעות השירות" @@ -2225,6 +2463,9 @@ "social_facility": { "label": "סוג" }, + "social_facility_for": { + "label": "כמות אנשים שניתן לשרת" + }, "source": { "label": "מקורות" }, @@ -2296,7 +2537,7 @@ "surveillance/type": { "label": "סוג המעקב", "options": { - "ALPR": "קריאת לוחית רעשוי אוטומטית", + "ALPR": "קריאת לוחית רישוי אוטומטית", "camera": "מצלמה", "guard": "שמירה" } @@ -2320,6 +2561,7 @@ "placeholder": "יש, אין, איסוף עצמי בלבד…" }, "toilets/disposal": { + "label": "סילוק", "options": { "bucket": "דלי", "chemical": "כימיים", @@ -2356,7 +2598,8 @@ "traffic_signals/direction": { "label": "כיוון", "options": { - "backward": "אחורה" + "backward": "אחורה", + "forward": "קדימה" } }, "trail_visibility": { @@ -2376,9 +2619,6 @@ "label": "סוג", "placeholder": "בררת מחדל" }, - "vending": { - "label": "סוגי הטובין" - }, "visibility": { "label": "ראות", "options": { @@ -2452,6 +2692,7 @@ "windings/configuration": { "options": { "delta": "דלטא", + "leblanc": "Leblanc", "open": "פתוח", "open-delta": "דלטא פתוח", "zigzag": "זיגזג" @@ -3138,6 +3379,14 @@ "building/entrance": { "name": "כניסה\\יציאה" }, + "building/farm": { + "name": "בית חווה", + "terms": "בית חווה" + }, + "building/farm_auxiliary": { + "name": "חווה", + "terms": "חווה" + }, "building/garage": { "name": "מוסך", "terms": "מוסך" @@ -3182,14 +3431,34 @@ "name": "מבנה ציבור", "terms": "בניין ציבורי" }, + "building/residential": { + "name": "בניין מגורים", + "terms": "בניין מגורים" + }, + "building/retail": { + "name": "בניין קמעוני", + "terms": "בניין קמעוני" + }, "building/roof": { "name": "גג", "terms": "גג" }, + "building/ruins": { + "name": "בניין הרוס", + "terms": "בניין הרוס" + }, "building/school": { "name": "בניין בית ספר", "terms": "מבנה בית ספר, בניין ביצפר, מבנה ביצפר" }, + "building/service": { + "name": "בניין שירות", + "terms": "בניין שירות" + }, + "building/shed": { + "name": "צריף", + "terms": "צריף" + }, "building/stable": { "name": "אורווה", "terms": "אורווה" @@ -3198,6 +3467,14 @@ "name": "אצטדיון", "terms": "אצטדיון" }, + "building/static_caravan": { + "name": "RV סטטי", + "terms": "RV סטטי" + }, + "building/temple": { + "name": "מקדש", + "terms": "מקדש" + }, "building/train_station": { "name": "תחנת רכבת" }, @@ -3232,10 +3509,22 @@ "name": "בונה סירות", "terms": "בונה סירות" }, + "craft/bookbinder": { + "name": "כורך ספרים", + "terms": "כורך ספרים" + }, "craft/brewery": { "name": "מבשלת בירה", "terms": "מבשלת בירה" }, + "craft/carpenter": { + "name": "נגר", + "terms": "נגר" + }, + "craft/carpet_layer": { + "name": "מתקין שטיחים", + "terms": "מתקין שטיחים" + }, "craft/caterer": { "name": "הסעדה", "terms": "הסעדה" @@ -3256,10 +3545,18 @@ "name": "מזקקה", "terms": "מזקקה" }, + "craft/dressmaker": { + "name": "תופרת", + "terms": "תופרת" + }, "craft/electrician": { "name": "חשמלאי", "terms": "חשמלאי" }, + "craft/electronics_repair": { + "name": "חנות תיקון אלקטרוניקה", + "terms": "חנות תיקון אלקטרוניקה" + }, "craft/gardener": { "name": "גנן", "terms": "גנן" @@ -3268,10 +3565,20 @@ "name": "שירות מיזוג מרכזי", "terms": "שירות מיזוג מרכזי" }, + "craft/jeweler": { + "name": "תכשיטן" + }, "craft/key_cutter": { "name": "שכפול מפתחות", "terms": "שכפול מפתחות" }, + "craft/locksmith": { + "name": "מנעולן" + }, + "craft/metal_construction": { + "name": "נפח", + "terms": "נפח" + }, "craft/optician": { "name": "אופטיקאי" }, @@ -3291,10 +3598,45 @@ "name": "שרברב", "terms": "שרברב" }, + "craft/pottery": { + "name": "כלי חרס", + "terms": "כלי חרס" + }, + "craft/roofer": { + "name": "מתקין גגות", + "terms": "מתקין גגות" + }, + "craft/sawmill": { + "name": "מנסרה", + "terms": "מנסרה" + }, "craft/sculptor": { "name": "פסל", "terms": "פסל" }, + "craft/shoemaker": { + "name": "סנדלר", + "terms": "סנדלר" + }, + "craft/tailor": { + "name": "חיט" + }, + "craft/tiler": { + "name": "מתקין אריחים", + "terms": "מתקין אריחים" + }, + "craft/tinsmith": { + "name": "פחח", + "terms": "פחח" + }, + "craft/upholsterer": { + "name": "רפד", + "terms": "רפד" + }, + "craft/watchmaker": { + "name": "שען", + "terms": "שען" + }, "craft/winery": { "name": "יקב", "terms": "יקב" @@ -3303,10 +3645,117 @@ "name": "תחנת אמבולנס", "terms": "תחנת אמבולנס" }, + "emergency/defibrillator": { + "name": "דפיברילטור", + "terms": "דפיברילטור" + }, "emergency/fire_hydrant": { "name": "ברז כיבוי אש", "terms": "ברז כיבוי אש" }, + "emergency/phone": { + "name": "טלפון חרום", + "terms": "טלפון חרום" + }, + "emergency/water_tank": { + "name": "מיכל מים חרום", + "terms": "מיכל מים חרום" + }, + "emergency/yes": { + "name": "כניסת חירום" + }, + "entrance": { + "name": "כניסה\\יציאה", + "terms": "כניסה\\יציאה" + }, + "footway/crossing": { + "name": "מעבר חציה מוגבה", + "terms": "מעבר חציה מוגבה" + }, + "footway/crossing-raised": { + "name": "מעבר חציה מוגבה", + "terms": "מעבר חציה מוגבה" + }, + "footway/crosswalk": { + "name": "מעבר חציה", + "terms": "מעבר חציה" + }, + "footway/crosswalk-raised": { + "name": "מעבר חציה מוגבה", + "terms": "מעבר חציה מוגבה" + }, + "footway/sidewalk": { + "name": "מדרכה", + "terms": "מדרכה" + }, + "ford": { + "name": "מקום צליחה", + "terms": "מקום צליחה" + }, + "golf/bunker": { + "name": "מכשול חול", + "terms": "מכשול חול" + }, + "golf/fairway": { + "name": "אזור פתוח בגולף", + "terms": "אזור פתוח בגולף" + }, + "golf/green": { + "name": "דשא סביב חור גולף", + "terms": "דשא סביב חור גולף" + }, + "golf/hole": { + "name": "חור גוף", + "terms": "חור גוף" + }, + "golf/lateral_water_hazard_area": { + "name": "מכשול מים", + "terms": "מכשול מים" + }, + "golf/lateral_water_hazard_line": { + "name": "מכשול מים", + "terms": "מכשול מים" + }, + "golf/rough": { + "name": "שטח קשה בגולף", + "terms": "שטח קשה בגולף" + }, + "golf/tee": { + "name": "עמדת חביטה בגולף", + "terms": "עמדת חביטה בגולף" + }, + "golf/water_hazard_area": { + "name": "מכשול מים", + "terms": "מכשול מים" + }, + "golf/water_hazard_line": { + "name": "מכשול מים", + "terms": "מכשול מים" + }, + "healthcare": { + "name": "מוסד טיפול בריאותי", + "terms": "מוסד טיפול בריאותי" + }, + "healthcare/alternative": { + "name": "בריאות אלטרנטיבי", + "terms": "בריאות אלטרנטיבי" + }, + "healthcare/alternative/chiropractic": { + "name": "כירופרקט", + "terms": "כירופרקט" + }, + "healthcare/audiologist": { + "name": "אודיולוג", + "terms": "אודיולוג" + }, + "healthcare/birthing_center": { + "name": "מתקן לידה", + "terms": "מתקן לידה" + }, + "healthcare/blood_donation": { + "name": "מרכז תרומת דם", + "terms": "מרכז תרומת דם" + }, "healthcare/hospice": { "name": "הוספיס", "terms": "הוספיס" @@ -3315,10 +3764,22 @@ "name": "מיילדת", "terms": "מיילדת" }, + "healthcare/occupational_therapist": { + "name": "מרפא בעיסוק", + "terms": "מרפא בעיסוק" + }, + "healthcare/optometrist": { + "name": "אופטומטריסט", + "terms": "אופטומטריסט" + }, "healthcare/physiotherapist": { "name": "פזיווטרפיה", "terms": "פזיווטרפיה" }, + "healthcare/podiatrist": { + "name": "פודיאטר", + "terms": "פודיאטר" + }, "healthcare/psychotherapist": { "name": "פסיכוטרפיסט", "terms": "פסיכוטרפיסט" @@ -3327,21 +3788,141 @@ "name": "מוסד שיקומי", "terms": "מוסד שיקומי" }, + "healthcare/speech_therapist": { + "name": "קלינאית תקשורת", + "terms": "קלינאית תקשורת" + }, "highway": { "name": "כביש בין-עירוני" }, + "highway/crossing": { + "name": "מעבר חציה", + "terms": "מעבר חציה" + }, + "highway/crossing-raised": { + "name": "מעבר חציה מוגבה", + "terms": "מעבר חציה מוגבה" + }, + "highway/crosswalk": { + "name": "מעבר חציה", + "terms": "מעבר חציה" + }, + "highway/crosswalk-raised": { + "name": "מעבר חציה מוגבה", + "terms": "מעבר חציה מוגבה" + }, + "highway/cycleway": { + "name": "מסלול אופניים", + "terms": "מסלול אופניים" + }, + "highway/elevator": { + "name": "מעלית", + "terms": "מעלית" + }, "highway/footway": { "name": "דרך רגל", "terms": "דרך רגל" }, + "highway/give_way": { + "name": "תן זכות קדימה", + "terms": "תן זכות קדימה" + }, + "highway/mini_roundabout": { + "name": "מעגל תנועה קטן", + "terms": "מעגל תנועה קטן" + }, "highway/path": { "name": "שביל", "terms": "שביל" }, + "highway/pedestrian_area": { + "name": "אזור רק עם תנועה רגלית", + "terms": "אזור רק עם תנועה רגלית" + }, + "highway/pedestrian_line": { + "name": "רחוב רק עם תנועה רגלית", + "terms": "רחוב רק עם תנועה רגלית" + }, + "highway/primary": { + "name": "כביש ראשי", + "terms": "כביש ראשי" + }, + "highway/primary_link": { + "name": "חיבור ראשי", + "terms": "חיבור ראשי" + }, + "highway/raceway": { + "name": "מסלול מרוצים (מונע)", + "terms": "מסלול מרוצים (מונע)" + }, + "highway/residential": { + "name": "כביש באזור מגורים", + "terms": "כביש באזור מגורים" + }, + "highway/rest_area": { + "name": "אזור מנוחה", + "terms": "אזור מנוחה" + }, + "highway/road": { + "name": "כביש לא ידוע", + "terms": "כביש לא ידוע" + }, + "highway/secondary": { + "name": "כביש משני", + "terms": "כביש משני" + }, + "highway/secondary_link": { + "name": "חיבור משני", + "terms": "חיבור משני" + }, + "highway/service": { + "name": "כבישי שירות", + "terms": "כבישי שירות" + }, + "highway/service/alley": { + "name": "סמטה", + "terms": "סמטה" + }, + "highway/speed_camera": { + "name": "מצלמת מהירות", + "terms": "מצלמת מהירות" + }, + "highway/stop": { + "name": "תמרור עצור", + "terms": "תמרור עצור" + }, + "historic": { + "name": "אתר היסטורי", + "terms": "אתר היסטורי" + }, + "historic/archaeological_site": { + "name": "אתר ארכיאולוגי", + "terms": "אתר ארכיאולוגי" + }, + "historic/boundary_stone": { + "name": "אבן גבול", + "terms": "אבן גבול" + }, "historic/castle": { "name": "טירה", "terms": "טירה" }, + "historic/memorial": { + "name": "אתר הנצחה", + "terms": "אתר הנצחה" + }, + "historic/monument": { + "name": "מונומנט", + "terms": "מונומנט" + }, + "historic/ruins": { + "name": "אתר חורבן", + "terms": "אתר חורבן" + }, + "historic/tomb": { + "name": "קבר", + "terms": "קבר" + }, "landuse/allotments": { "name": "גינה קהילתית" }, @@ -3349,6 +3930,82 @@ "name": "בית קברות", "terms": "בית קברות" }, + "landuse/forest": { + "name": "יער", + "terms": "יער" + }, + "landuse/grass": { + "name": "דשא", + "terms": "דשא" + }, + "landuse/harbour": { + "name": "מזח", + "terms": "מזח" + }, + "landuse/industrial": { + "name": "אזור תעשיה", + "terms": "אזור תעשיה" + }, + "landuse/industrial/slaughterhouse": { + "name": "משחטה", + "terms": "משחטה" + }, + "landuse/landfill": { + "name": "מטמנה", + "terms": "מטמנה" + }, + "landuse/meadow": { + "name": "אחו", + "terms": "אחו" + }, + "landuse/military": { + "name": "אזור צבאי", + "terms": "אזור צבאי" + }, + "landuse/military/airfield": { + "name": "שדה תעופה צבאי", + "terms": "שדה תעופה צבאי" + }, + "landuse/military/barracks": { + "name": "בסיס צבאי", + "terms": "בסיס צבאי" + }, + "landuse/military/bunker": { + "name": "בונקר צבאי", + "terms": "בונקר צבאי" + }, + "landuse/military/checkpoint": { + "name": "נקודת ביקורת", + "terms": "נקודת ביקורת" + }, + "landuse/military/danger_area": { + "name": "אזור מסוכן", + "terms": "אזור מסוכן" + }, + "landuse/military/naval_base": { + "name": "בסיס חיל ים", + "terms": "בסיס חיל ים" + }, + "landuse/military/nuclear_explosion_site": { + "name": "אתר פיצוץ גרעיני", + "terms": "אתר פיצוץ גרעיני" + }, + "landuse/military/obstacle_course": { + "name": "מסלול מכשולים", + "terms": "מסלול מכשולים" + }, + "landuse/military/office": { + "name": "משרד צבאי", + "terms": "משרד צבאי" + }, + "landuse/military/range": { + "name": "אזור ירי צבאי", + "terms": "אזור ירי צבאי" + }, + "landuse/military/training_area": { + "name": "אזור אימונים", + "terms": "אזור אימונים" + }, "landuse/orchard": { "name": "פרדס", "terms": "פרדס" @@ -3357,6 +4014,22 @@ "name": "מחצבה", "terms": "מחצבה" }, + "landuse/religious": { + "name": "אזור דתי", + "terms": "אזור דתי" + }, + "landuse/residential": { + "name": " אזור מגורים", + "terms": " אזור מגורים" + }, + "landuse/retail": { + "name": "אזור מסחרי", + "terms": "אזור מסחרי" + }, + "landuse/vineyard": { + "name": "כרם", + "terms": "כרם" + }, "leisure/bowling_alley": { "name": "אולם כדורת", "terms": "אולם כדורת" @@ -3377,6 +4050,9 @@ "name": "מכון יוגה", "terms": "מכון יוגה" }, + "leisure/fitness_station/stairs": { + "name": "מדרגות התעמלות" + }, "leisure/garden": { "name": "גן", "terms": "גן" @@ -3409,6 +4085,9 @@ "name": "שמורת טבע", "terms": "שמורת טבע" }, + "leisure/outdoor_seating": { + "name": "אזור ישיבה בחוץ" + }, "leisure/park": { "name": "פארק", "terms": "פארק" @@ -3457,6 +4136,12 @@ "name": "שולחן פינג פונג", "terms": "שולחן פינג פונג" }, + "leisure/pitch/tennis": { + "name": "מגרש טניס" + }, + "leisure/pitch/volleyball": { + "name": "מגרש כדורעף" + }, "leisure/playground": { "name": "גן שעשועים", "terms": "גן שעשועים" @@ -3493,6 +4178,15 @@ "name": "קו", "terms": "קו" }, + "man_made": { + "name": "מעשה ידי אדם" + }, + "man_made/antenna": { + "name": "אנטנה" + }, + "man_made/breakwater": { + "name": "שובר גלים" + }, "man_made/bridge": { "name": "גשר", "terms": "גשר" @@ -3505,10 +4199,22 @@ "name": "מנוף", "terms": "מנוף" }, + "man_made/embankment": { + "name": "סוללה" + }, + "man_made/flagpole": { + "name": "עמוד דגל" + }, "man_made/lighthouse": { "name": "מגדלור", "terms": "מגדלור" }, + "man_made/monitoring_station": { + "name": "תחנת ניטור" + }, + "man_made/observation": { + "name": "מגדל תצפית" + }, "man_made/petroleum_well": { "name": "באר נפט", "terms": "באר נפט" @@ -3521,6 +4227,12 @@ "name": "סילו", "terms": "סילו" }, + "man_made/surveillance": { + "name": "מעקב" + }, + "man_made/surveillance_camera": { + "name": "מצלמת מעקב" + }, "man_made/tower": { "name": "מגדל", "terms": "מגדל" @@ -3605,10 +4317,16 @@ "name": "שדה בור", "terms": "שדה בור" }, + "natural/mud": { + "name": "בוץ" + }, "natural/peak": { "name": "פסגה", "terms": "פסגה" }, + "natural/saddle": { + "name": "אוכף" + }, "natural/sand": { "name": "חול", "terms": "חול" @@ -3903,6 +4621,12 @@ "name": "אומגה", "terms": "אומגה" }, + "point": { + "name": "נקודה" + }, + "power": { + "name": "חשמל" + }, "power/generator": { "name": "גנרטור", "terms": "גנרטור" @@ -3915,10 +4639,31 @@ "name": "טורבינת רוח", "terms": "טורבינת רוח" }, + "power/line": { + "name": "קו מתח" + }, + "power/minor_line": { + "name": "קו מתח משני" + }, + "power/plant": { + "name": "תחנת כוח" + }, + "power/pole": { + "name": "עמוד חשמל" + }, + "power/sub_station": { + "name": "תחנה תת קרקעית" + }, + "power/substation": { + "name": "תחנה תת קרקעית" + }, "power/switch": { "name": "מתג חשמל", "terms": "מתג חשמל" }, + "power/tower": { + "name": "מגדל מתח גבוה" + }, "public_transport/linear_platform": { "name": "תחנת רכבת \\ רציף", "terms": "תחנת רכבת \\ רציף" @@ -4041,6 +4786,9 @@ "railway/abandoned": { "name": "מסילת רכבת לא בשימוש" }, + "railway/buffer_stop": { + "name": "אוטם מסילה" + }, "railway/disused": { "name": "מסילת רכבת לא בשימוש", "terms": "מסילת רכבת לא בשימוש" @@ -4086,6 +4834,9 @@ "railway/tram_stop": { "name": "תחנת חשמלית" }, + "relation": { + "name": "יחס" + }, "roundabout": { "name": "מעגל תנועה" }, @@ -4161,10 +4912,16 @@ "name": "חנות אופניים", "terms": "חנות אופניים" }, + "shop/bookmaker": { + "name": "סוכנות הימורים" + }, "shop/books": { "name": "חנות ספרים", "terms": "חנות ספרים" }, + "shop/boutique": { + "name": "בוטיק" + }, "shop/butcher": { "name": "קצב", "terms": "קצב" @@ -4443,6 +5200,9 @@ "name": "חנות לחיות מחמד", "terms": "חנות לחיות מחמד" }, + "shop/pet_grooming": { + "name": "חנות לטיפוח חיות מחמד" + }, "shop/photo": { "name": "חנות צילום", "terms": "חנות צילום" @@ -4746,16 +5506,16 @@ "terms": "אין פניית פרסה" }, "type/restriction/only_left_turn": { - "name": "פנייה שמאלה בלבד", - "terms": "פנייה שמאלה בלבד" + "name": "פנייה שמאלה בלבד" }, "type/restriction/only_right_turn": { - "name": "פנייה ימינה בלבד", - "terms": "פנייה ימינה בלבד" + "name": "פנייה ימינה בלבד" }, "type/restriction/only_straight_on": { - "name": "אין פניות", - "terms": "אין פניות" + "name": "ישר בלבד" + }, + "type/restriction/only_u_turn": { + "name": "פרסה בלבד" }, "type/route": { "name": "נתיב", @@ -4918,7 +5678,7 @@ "attribution": { "text": "תנאים ומשוב" }, - "description": "גבולות ומועדי צילום. תוויות מופיעות ברמות תקריב של 14 ומעלה.", + "description": " גבולות ומועדי צילום. תוויות מופיעות ברמות תקריב של 13 ומעלה. ", "name": "דיגיטל גלוב' תצלומי אוויר פרמיום" }, "DigitalGlobe-Standard": { @@ -4932,7 +5692,7 @@ "attribution": { "text": "תנאים ומשוב" }, - "description": "גבולות ומועדי צילום. תוויות מופיעות ברמות תקריב של 14 ומעלה.", + "description": "גבולות תמונות רקע ותאריכי צילום. תוויות מופיעות בתקריב ברמה 13 ומעלה.", "name": "דיגיטל גלוב' תצלומי אוויר" }, "EsriWorldImagery": { @@ -5016,6 +5776,10 @@ "description": "צהוב = מידע ציבורי מממשלת ארה\"ב\nאדום = מידע שלא נמצא בOSM", "name": "מידע טופולוגי ארה\"ב 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "כביש מהיר: תחימה ירוקה = ללא סיווג. תחימה חומה = מסלול. פני שטח: חצץ = מילוי חום בהיר, אספלט = שחור, מרוצף = אפור, אדמה =לבן, בטון = כחול, דשא = ירוק. עונתי = פסים לבנים", + "name": "שכבת דרכי יערות בארה״ב" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0" @@ -5050,7 +5814,7 @@ "attribution": { "text": "basemap.at" }, - "description": "מפת אוסטריה מבוסס על מידע ממשלתי", + "description": " מפת אוסטריה מבוסס על מידע ממשלתי", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -5112,7 +5876,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "אריחי מפה מאת Stamen Design, תחת הרשיון CC BY 3.0" + "text": "אריחי מפה מאת Stamen Design, ברישיון CC BY 3.0. הנתונים מאת OpenStreetMap, תחת ODbL" }, "name": "תווי שטח מסטודיו Stamen" }, @@ -5128,6 +5892,393 @@ }, "name": "תווי שטח מThunderforest" } + }, + "community": { + "cape-coast-youthmappers": { + "description": "ניתן לעקוב אחרינו בטוויטר: {url}" + }, + "osm-gh-facebook": { + "name": "הפייסבוק של OpenStreetMap גאנה", + "description": "קבוצת פייסבוק לאנשים שמתעניינים ב־OpenStreetMap." + }, + "osm-gh-twitter": { + "name": "הטוויטר של OpenStreetMap גאנה", + "description": "ניתן לעקוב אחרינו בטוויטר: {url}" + }, + "talk-gh": { + "name": "קבוצת הדיוור Talk-gh", + "description": "Talk-gh היא קבוצת הדיוור הרשמית של קהילת OSM בגאנה" + }, + "osm-mg-facebook": { + "name": "קבוצת הפייסבוק של OpenStreetMap במדגסקר ", + "description": "קבוצת פייסבוק במלגשי לאנשים שמתעניינים ב־OpenStreetMap." + }, + "talk-mg": { + "name": "קבוצת הדיוור Talk-mg", + "description": "מקום לתורמים, קהילות ומשתמשי OpenStreetMap במדגסקר לשתף ולדון זה עם זה." + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap בנגלדש", + "description": "שיפור OpenStreetMap בבנגלדש", + "extendedDescription": "מעניין אותך מיפוי בבנגלדש? יש לך שאלות? אולי ליצור קשר עם הקהילה המקומית? ניתן להצטרף אלינו ב־{Url}. כולם מוזמנים!" + }, + "OSM-India-facebook": { + "name": "OpenStreetMap הודו - מיפוי שכונות התנדבותי", + "description": "שיפור OpenStreetMap בהודו", + "extendedDescription": "מעניין אותך מיפוי בהודו? יש לך שאלות? אולי ליצור קשר עם הקהילה המקומית? ניתן להצטרף אלינו ב־{url}. כולם מוזמנים!" + }, + "OSM-india-mailinglist": { + "name": "קבוצת הדיוור של OpenStreetMap הודו", + "description": "Talk-in היא קבוצת הדיוור הרשמית של הקהילה ההודית" + }, + "OSM-india-twitter": { + "name": "הטוויטר של OpenStreetMap הודו", + "description": "אנחנו במרחק ציוץ: {url}" + }, + "OSM-India-Puducherry-Facebook": { + "name": "תנועת החומרה והתכנה החופשית - פייסבוק" + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap אינדונזיה", + "description": "שיפור OpenStreetMap באינדונזיה", + "extendedDescription": "מעניין אותך מיפוי באינדונזיה? יש לך שאלות? אולי ליצור קשר עם הקהילה המקומית? ניתן להצטרף אלינו ב־{Url}. כולם מוזמנים!" + }, + "OSM-japan-facebook": { + "name": "קהילת OpenStreetMap יפן", + "description": "ממפים ומשתמשים OpenStreetMap ביפן" + }, + "OSM-japan-mailinglist": { + "name": "קבוצת הדיוור של OpenStreetMap יפן", + "description": "Talk-ja היא קבוצת הדיוור הרשמית של הקהילה היפנית" + }, + "OSM-japan-twitter": { + "name": "הטוויטר של OpenStreetMap יפן", + "description": "תגית הקבץ בטוויטר: {url}" + }, + "OSM-korea-telegram": { + "name": "ערוץ הטלגרם של OSM קוריאה" + }, + "OSM-MY-forum": { + "name": "הפורום של OpenStreetMap מלזיה", + "description": "הפורום הרשמי של OpenStreetMap מלזיה" + }, + "OSM-MY-matrix": { + "name": "ערוץ ה־Riot של OpenStreetMap מלזיה", + "description": "כל הממפים מוזמנים! ניתן להירשם בכתובת {signupUrl}" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap מונגוליה", + "description": "שיפור OpenStreetMap במונגוליה", + "extendedDescription": "מעניין אותך מיפוי במונגוליה? יש לך שאלות? אולי ליצור קשר עם הקהילה המקומית? ניתן להצטרף אלינו ב־{Url}. כולם מוזמנים!" + }, + "OSM-MMR-facebook": { + "name": "OpenStreetMap מיאנמר", + "description": "שיפור OpenStreetMap במיאנמר", + "extendedDescription": "מעניין אותך מיפוי במיאנמר? יש לך שאלות? אולי ליצור קשר עם הקהילה המקומית? ניתן להצטרף אלינו ב־{Url}. כולם מוזמנים!" + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap נפאל", + "description": "שיפור OpenStreetMap בנפאל", + "extendedDescription": "מעניין אותך מיפוי בנפאל? יש לך שאלות? אולי ליצור קשר עם הקהילה המקומית? ניתן להצטרף אלינו ב־{Url}. כולם מוזמנים!" + }, + "OSM-PH-facebook": { + "name": "הפייסבוק של OpenStreetMap PH (הפיליפינים)", + "description": "ברוך בואך ל־OpenStreetMap הפיליפינים, פה אנו מעודדים את כל הפיליפינים באשר הם לתרום למיזם OpenStreetMap." + }, + "OSM-PH-mailinglist": { + "name": "קבוצת הדיוור Talk-ph", + "description": "קבוצת דיוור לדיונים על OpenStreetMap בפיליפינים" + }, + "OSM-PH-slack": { + "name": "ה־Slack של OpenStreetMap PH (הפיליפינים)", + "description": "כולם מוזמנים! ניתן להירשם בכתובת {signupUrl}" + }, + "OSM-PH-telegram": { + "name": "הטלגרם של OpenStreetMap PH (הפיליפינים)", + "description": "קהילת טלגרם בלתי רשמית ומקומית של תורמים וחברים של OpenStreetMap בפיליפינים" + }, + "OSM-RU-forum": { + "name": "הפורום של OpenStreetMap רוסיה", + "description": "הפורום המקוון של OpenStreetMap רוסיה" + }, + "OSM-RU-telegram": { + "name": "הטלגרם של OpenStreetMap רוסיה", + "description": "קבוצת הטלגרם של OpenStreetMap רוסיה" + }, + "OSM-LKA-facebook": { + "name": "OpenStreetMap סרי לנקה", + "description": "שיפור OpenStreetMap בסרי לנקה", + "extendedDescription": "מעניין אותך מיפוי בסרי לנקה? יש לך שאלות? אולי ליצור קשר עם הקהילה המקומית? ניתן להצטרף אלינו ב־{Url}. כולם מוזמנים!" + }, + "OSM-TW-facebook": { + "name": "קהילת OpenStreetMap טאיוואן", + "description": "קבוצת פייסבוק לממפים ומשתמשים ב־OpenStreetMap לטובת דיונים בנוגע לטאיוואן." + }, + "OSM-TW-mailinglist": { + "name": "קבוצת הדיוור של OpenStreetMap טאיוואן", + "description": "Talk-tw היא קבוצת הדיוור הרשמית לקהילות לטובת דיונים בנושא טאיוואן" + }, + "at-forum": { + "name": "הפורום של OpenStreetMap אוסטריה", + "description": "הפורום הרשמי לשאלות על OpenStreetMap בתוך וסביב אוסטריה" + }, + "at-mailinglist": { + "name": "קבוצת הדיוור Talk-at", + "description": "Talk-at היא קבוצת הדיוור הרשמית של קהילת OSM האוסטרית" + }, + "at-twitter": { + "name": "הטוויטר של OpenStreetMap אוסטריה", + "description": "הטוויטר של OpenStreetMap אוסטריה: {url}" + }, + "osm-at": { + "name": "OpenStreetMap אוסטריה", + "description": "מאגר למידע על OpenStreetMap באוסטריה" + }, + "be-facebook": { + "name": "קהילת OpenStreetMap בלגיה" + }, + "be-forum": { + "description": "הפורום המקוון של OpenStreetMap בלגיה" + }, + "be-irc": { + "name": "ה־IRC של OpenStreetMap בלגיה" + }, + "be-matrix": { + "description": "כל הממפים מוזמנים! ניתן להירשם בכתובת {signupUrl}" + }, + "be-twitter": { + "name": "הטוויטר של OpenStreetMap בלגיה", + "description": "OSM בלגיה בטוויטר: {url}" + }, + "byosm": { + "name": "OpenStreetMap בלרוס", + "description": "קבוצת הטלגרם של OpenStreetMap בלארוס" + }, + "talk-cz-mailinglist": { + "name": "קבוצת הדיוור Talk-cz", + "description": "Talk-cz היא קבוצת הדיוור הרשמית של הקהילה הצ׳כית" + }, + "de-berlin-mailinglist": { + "name": "קבוצת הדיוור של ברלין", + "description": "זאת רשימת הדיוור לקהילת OSM בברלין" + }, + "de-berlin-telegram": { + "name": "‎@osmberlin בטלגרם", + "description": "הטלגרם של OpenStreetMap ברלין" + }, + "de-berlin-twitter": { + "name": "הטוויטר של OpenStreetMap ברלין", + "description": "ניתן לעקוב אחרינו בטוויטר: {url}" + }, + "OSM-ES-mailinglist": { + "name": "קבוצת הדיוור Talk-es", + "description": "קבוצת דיוור לדיונים על OpenStreetMap בספרד" + }, + "OSM-ES-telegram": { + "name": "@OSMes ב־Telegram", + "description": "הטלגרם של OpenStreetMap ספרד" + }, + "fr-facebook": { + "name": "הפייסבוק של OpenStreetMap צרפת", + "description": "הפייסבוק של OpenStreetMap צרפת" + }, + "fr-forum": { + "name": "הפורום המקוון של OpenStreetMap צרפת", + "description": "הפורום המקוון של OpenStreetMap צרפת" + }, + "fr-irc": { + "name": "OpenStreetMap צרפת ב־IRC" + }, + "fr-mailinglist": { + "name": "קבוצת הדיוור Talk-fr", + "description": "קבוצת הדיוור Talk-fr" + }, + "fr-twitter": { + "name": "הטוויטר של OpenStreetMap צרפת", + "description": "הטוויטר של OpenStreetMap צרפת: {url}" + }, + "gb-mailinglist": { + "name": "קבוצת הדיוור Talk-gb" + }, + "it-mailinglist": { + "name": "קבוצת הדיוור Talk-it", + "description": "Talk-at היא קבוצת הדיוור הרשמית של קהילת OSM האיטלקית" + }, + "it-twitter": { + "name": "הטוויטר של OpenStreetMap איטליה" + }, + "talk-it-lazio": { + "description": "כולם מוזמנים! ניתן להירשם בכתובת {signupUrl}" + }, + "se-mailinglist": { + "name": "קבוצת הדיוור Talk-se", + "description": "קבוצת דיוור לדיונים על OpenStreetMap בשוודיה" + }, + "se-twitter": { + "name": "הטוויטר של OpenStreetMap שוודיה", + "description": "ניתן לעקוב אחרינו בטוויטר: {url}" + }, + "OSM-CA-Slack": { + "description": "כולם מוזמנים! ניתן להירשם בכתובת {signupUrl}." + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap ונקובר" + }, + "OpenCleveland-meetup": { + "description": "שיפור OpenStreetMap באזור קליבלנד" + }, + "OSM-Boston": { + "name": "OpenStreetMap בוסטון", + "description": "ממפים ומשתמשים ב־OpenStreetMap באזור בוסטון" + }, + "OSM-Chattanooga": { + "name": "OSM צ׳טנוגה", + "description": "קבוצת משתמשי OpenStreetMap בצ׳טנוגה" + }, + "OSM-Colorado": { + "name": "OpenStreetMap קולורדו", + "description": "ממפים ומשתמשים ב־OpenStreetMap במדינת קולורדו, ארה״ב" + }, + "OSM-NYC": { + "name": "OpenStreetMap העיר ניו יורק" + }, + "OSM-Portland": { + "name": "OpenStreetMap פורטלנד", + "description": "ממפים ומשתמשים ב־OpenStreetMap באזור פורטלנד" + }, + "OSM-Seattle": { + "name": "OpenStreetMap סיאטל", + "description": "ממפים ומשתמשים ב־OpenStreetMap באזור סיאטל" + }, + "OSM-SoCal": { + "name": "OpenStreetMap דרום קליפורניה" + }, + "OSM-Tampa-Bay": { + "name": "OpenStreetMap מפרץ טמפה", + "description": "ממפים ומשתמשים ב־OpenStreetMap באזור מפרץ טמפה" + }, + "OSM-US-Slack": { + "name": "ה־Slack של OpenStreetMap ארה״ב", + "description": "כולם מוזמנים! ניתן להירשם בכתובת {signupUrl}" + }, + "OSM-US": { + "name": "OpenStreetMap ארה״ב", + "description": "אנו מסייעים להצמיח ולשפר את OpenStreetMap בארצות הברית." + }, + "OSM-Utah": { + "name": "OpenStreetMap יוטה", + "description": "ממפים ומשתמשים ב־OpenStreetMap באזור סולט לייק סיטי" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap ויומינג", + "description": "ממפים ומשתמשים ב־OpenStreetMap במדינת ויומינג" + }, + "PHXGeo-twitter": { + "description": "ניתן לעקוב אחרינו בטוויטר בכתובת {url}" + }, + "Maptime-Australia-Slack": { + "description": "ניתן להירשם בכתובת {signupUrl}" + }, + "talk-au": { + "name": "קבוצת הדיוור Talk-au", + "description": "מקום לשיחות בין ממפים אוסטרליים" + }, + "OSM-AR-facebook": { + "name": "הפייסבוק של OpenStreetMap ארגנטינה", + "description": "ניתן להצטרף לקהילה של OpenStreetMap ארגנטינה בפייסבוק" + }, + "OSM-AR-mailinglist": { + "name": "קבוצת הדיוור Talk-ar", + "description": "קבוצת דיוור היסטורית. כמעט לא בשימוש כיום." + }, + "OSM-AR-telegram": { + "name": "הטלגרם של OpenStreetMap ארגנטינה" + }, + "OSM-AR-twitter": { + "name": "הטוויטר של OpenStreetMap ארגנטינה", + "description": "ניתן לעקוב אחרינו בטוויטר בכתובת {url}" + }, + "Bahia-telegram": { + "extendedDescription": "ניתן להצטרף לקהילה שלנו כדי ללמוד עוד על OpenStreetMap, לשאול שאלות או להשתתף במפגשים שלנו. כולם מוזמנים!" + }, + "OSM-br-mailinglist": { + "name": "קבוצת הדיוור Talk-br", + "description": "קבוצת דיוור לדיונים על OpenStreetMap בברזיל" + }, + "OSM-br-telegram": { + "name": "הטלגרם של OpenStreetMap ברזיל", + "description": "ניתן להצטרף לקהילת OpenStreetMap ברזיל בטלגרם", + "extendedDescription": "ניתן להצטרף לקהילה שלנו כדי ללמוד עוד על OpenStreetMap, לשאול שאלות או להשתתף במפגשים שלנו. כולם מוזמנים!" + }, + "OSM-br-twitter": { + "name": "הטוויטר של OpenStreetMap ברזיל", + "description": "ניתן לעקוב אחרינו בטוויטר בכתובת {url}" + }, + "OSM-CL-facebook": { + "name": "הפייסבוק של OpenStreetMap ׳ילה", + "description": "ניתן להצטרף לקהילה של OpenStreetMap צ׳ילה בפייסבוק" + }, + "OSM-CL-mailinglist": { + "name": "קבוצת הדיוור Talk-cl", + "description": "קבוצת דיוור לדיונים על OpenStreetMap בצ׳ילה" + }, + "OSM-CL-telegram": { + "name": "הטלגרם של OpenStreetMap צ׳ילה", + "description": "ניתן להצטרף לקהילת OpenStreetMap צ׳ילה בטלגרם" + }, + "OSM-CL-twitter": { + "name": "הטוויטר של OpenStreetMap צ׳ילה", + "description": "ניתן לעקוב אחרינו בטוויטר בכתובת {url}" + }, + "OSM-CO-facebook": { + "name": "הפייסבוק של OpenStreetMap קולומביה" + }, + "OSM-CO-mailinglist": { + "name": "קבוצת הדיוור Talk-co", + "description": "קבוצת דיוור לדיונים על OpenStreetMap בקולומביה" + }, + "OSM-CO-twitter": { + "name": "הטוויטר של OpenStreetMap קולומביה", + "description": "ניתן לעקוב אחרינו בטוויטר בכתובת {url}" + }, + "OSM-CO": { + "name": "OpenStreetMap קולומביה" + }, + "OSM-PE-facebook": { + "name": "הפייסבוק של OpenStreetMap פרו", + "description": "ניתן להצטרף לקהילה של OpenStreetMap פרו בפייסבוק" + }, + "OSM-PE-mailinglist": { + "name": "קבוצת הדיוור Talk-pe", + "description": "קבוצת הדיוור הרשמית ל־OpenStreetMap פרו" + }, + "OSM-PE-twitter": { + "description": "ניתן לעקוב אחרינו בטוויטר בכתובת {url}" + }, + "OSM-PE": { + "name": "OpenStreetMap פרו" + }, + "OSM-Facebook": { + "name": "OpenStreetMap בפייסבוק" + }, + "OSM-help": { + "name": "העזרה של OpenStreetMap" + }, + "OSM-Reddit": { + "name": "OpenStreetMap ב־Reddit" + }, + "OSM-Twitter": { + "name": "הטוויטר של OpenStreetMap", + "description": "ניתן לעקוב אחרינו בטוויטר בכתובת {url}" + }, + "OSMF": { + "name": "קרן OpenStreetMap", + "events": { + "sotm2018": { + "where": "מילאנו, איטליה" + } + } + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/hr.json b/vendor/assets/iD/iD/locales/hr.json index 5142b1822..6b18e1e9c 100644 --- a/vendor/assets/iD/iD/locales/hr.json +++ b/vendor/assets/iD/iD/locales/hr.json @@ -520,13 +520,7 @@ } }, "success": { - "edited_osm": "Uređen OSM!", "just_edited": "Upravo si uredio/la OpenStreetMap!", - "view_on_osm": "Pogledaj na OSM", - "facebook": "Podijeli na mreži Facebook", - "twitter": "Podijeli na mreži Twitter", - "google": "Podijeli na mreži Google+", - "help_html": "Tvoje promjene bi se trebale pojaviti u sloju \"Standard\" kroz par minuta. Za druge slojeve i određene elemente trebati će viÅ¡e vremena.", "help_link_text": "Detalji", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -1134,6 +1128,9 @@ "bicycle_parking": { "label": "Vrsta" }, + "bin": { + "label": "Kanta za smeće" + }, "boundary": { "label": "Vrsta" }, @@ -1731,9 +1728,6 @@ "trees": { "label": "Drveće" }, - "vending": { - "label": "Vrsta robe" - }, "water": { "label": "Vrsta" }, @@ -2343,9 +2337,15 @@ "craft/caterer": { "name": "Dostavljač" }, + "craft/chimney_sweeper": { + "name": "Dimnjačar" + }, "craft/clockmaker": { "name": "Urar (ručni satovi)" }, + "craft/distillery": { + "name": "Destilerija" + }, "craft/dressmaker": { "name": "Krojač" }, @@ -3165,6 +3165,9 @@ "name": "Kozmetički salon", "terms": "kozmetički salon,solarij,salon ljepote,pediker,beauty centar" }, + "shop/beauty/nails": { + "name": "Studio za nokte" + }, "shop/bed": { "name": "Trgovina opreme za krevete", "terms": "madrac, madraci, podnica, podnice, posteljina, jastuk, jastuci" @@ -3177,6 +3180,9 @@ "name": "prodavaonica bicikala", "terms": "trgovina biciklima" }, + "shop/bookmaker": { + "name": "Kladioničar" + }, "shop/books": { "name": "Knjižara" }, @@ -3209,6 +3215,9 @@ "shop/cheese": { "name": "Prodavaonica sira" }, + "shop/chemist": { + "name": "Drogerija" + }, "shop/chocolate": { "name": "Prodavaonica čokolade" }, @@ -3328,6 +3337,9 @@ "name": "Zlatarnica", "terms": "zlatarna,zlatara,zlatar" }, + "shop/kiosk": { + "name": "Kiosk" + }, "shop/kitchen": { "name": "Trgovina kuhinjskog namjeÅ¡taja", "terms": "kuhinje, pećnice, hladnjak" @@ -3397,6 +3409,9 @@ "shop/pawnbroker": { "name": "Zalagaonica" }, + "shop/perfumery": { + "name": "Parfimerija" + }, "shop/pet": { "name": "Prodavaonica kućnim ljubimcima", "terms": "dućan za kućne ljubimce,dućan s kućnim ljubimcima,pet store,pet shop,trgovina kućnim ljubimcima,trgovina za kućne ljubimce,prodavaonica kućnih ljubimaca,prodavaonica ljubimaca,prodavaonica za kućne ljubimce" @@ -3483,6 +3498,9 @@ "name": "Prodavaonica video igara", "terms": "računalne igre, igrice" }, + "shop/watches": { + "name": "Trgovina Satovima" + }, "shop/water_sports": { "name": "Trgovina za vodene sportove", "terms": "plivanje, ronjenje" @@ -3594,15 +3612,6 @@ "type/restriction/no_u_turn": { "name": "Zabranjeno polukružno okretanje" }, - "type/restriction/only_left_turn": { - "name": "Obavezno lijevo skretanje" - }, - "type/restriction/only_right_turn": { - "name": "Obavezno desno skretanje" - }, - "type/restriction/only_straight_on": { - "name": "Zabranjena sva skretanja" - }, "type/route": { "name": "Ruta", "terms": "ruta,linija,pravac" @@ -3795,7 +3804,6 @@ "attribution": { "text": "basemap.at" }, - "description": "Osnovna karta Austrije, bazirano na vladinim podacima.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -3856,9 +3864,6 @@ "name": "skobbler" }, "stamen-terrain-background": { - "attribution": { - "text": "Sličice karte od Stamen Design, pod CC BY 3.0" - }, "name": "Stamen Terrain" }, "tf-cycle": { diff --git a/vendor/assets/iD/iD/locales/hu.json b/vendor/assets/iD/iD/locales/hu.json index b21bc7e14..a70bfeb97 100644 --- a/vendor/assets/iD/iD/locales/hu.json +++ b/vendor/assets/iD/iD/locales/hu.json @@ -1,5 +1,10 @@ { "hu": { + "icons": { + "information": "infó", + "remove": "eltávolítás", + "undo": "visszavonás" + }, "modes": { "add_area": { "title": "Terület", @@ -291,6 +296,21 @@ } } }, + "restriction": { + "controls": { + "distance": "Távolság", + "via_node_only": "Csak csomópont" + }, + "help": { + "indirect": "(indirekt)", + "from": "INNEN", + "via": "EZEN ÁT", + "to": "IDE", + "from_name": "{from} {fromName}", + "from_name_to_name": "{from} {fromName} {to} {toName}", + "via_names": "{via} {viaNames}" + } + }, "undo": { "tooltip": "Visszavonás: {action}", "nothing": "Nincs mit visszavonni." @@ -602,13 +622,7 @@ } }, "success": { - "edited_osm": "OSM szerkesztve!", "just_edited": "Szerkesztetted az OpenStreetMapet!", - "view_on_osm": "Megtekintés OSM-en", - "facebook": "Megosztás Facebookon", - "twitter": "Megosztás Twitteren", - "google": "Megosztás Google+-on", - "help_html": "A változtatásaid néhány percen belül megjelennek az alapértelmezett rétegen. Ez a többi rétegnél és bizonyos funkcióknál több ideig is tarthat.", "help_link_text": "Részletek", "help_link_url": "https://wiki.openstreetmap.org/wiki/Hu:FAQ#V.C3.A1ltoztat.C3.A1sokat_eszk.C3.B6z.C3.B6ltem_a_t.C3.A9rk.C3.A9pen.2C_hogyan_l.C3.A1thatom_ezeket.3F" }, @@ -759,6 +773,16 @@ "gps": { "title": "GPS nyomvonalok", "using_h": "GPS nyomvonal használata" + }, + "field": { + "restrictions": { + "about": { + "title": "Névjegy" + }, + "modifying": { + "title": "Módosítás" + } + } } }, "intro": { @@ -1129,6 +1153,11 @@ } }, "units": { + "feet": "{quantity} láb", + "miles": "{quantity} mérföld", + "square_feet": "{quantity} négyzetláb", + "square_miles": "{quantity} négyzet mérföld", + "acres": "{quantity} hektár", "meters": "{quantity} m", "kilometers": "{quantity} km", "square_meters": "{quantity} m²", @@ -1996,7 +2025,7 @@ } }, "opening_hours": { - "label": "Nyitva tartás" + "label": "Nyitvatartás" }, "operator": { "label": "Üzemeltető" @@ -2460,9 +2489,6 @@ "label": "Típus", "placeholder": "Alapértelmezett" }, - "vending": { - "label": "Termékek típusa" - }, "visibility": { "label": "Láthatóság", "options": { @@ -5830,18 +5856,6 @@ "name": "Megfordulni tilos", "terms": "Tilos megfordulni" }, - "type/restriction/only_left_turn": { - "name": "Kötelező haladási irány: balra", - "terms": "Csak balra szabad fordulni" - }, - "type/restriction/only_right_turn": { - "name": "Kötelező haladási irány: jobbra", - "terms": "Csak jobbra kanyarodás" - }, - "type/restriction/only_straight_on": { - "name": "Kötelező haladási irány: egyenesen tovább", - "terms": "Tilos kanyarodni" - }, "type/route": { "name": "Útvonal", "terms": "útvonal, nyomvonal" @@ -6126,7 +6140,6 @@ "attribution": { "text": "basemap.at" }, - "description": "Osztrák Basemap, kormányzati adatok alapján.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6187,9 +6200,6 @@ "name": "skobbler" }, "stamen-terrain-background": { - "attribution": { - "text": "Térképcsempék: Stamen Design, CC BY 3.0 szerint" - }, "name": "Stamen Terrain (terep)" }, "tf-cycle": { @@ -6204,6 +6214,26 @@ }, "name": "Thunderforest Landscape (táj)" } + }, + "community": { + "Bay-Area-OpenStreetMappers": { + "name": "A San Francisco-öböl környéki (Bay Area) OpenStreetMap-szerkesztők", + "description": "Az OpenStreetMap tökéletesítése a San Francisco-öböl környékén", + "extendedDescription": "Ez a csoport az itteni, öbölkörnyéki OpenStreetMap-közösség gyarapításával foglalkozik. Rendezvényeink mindenki számára nyitottak a nyílt forráskódú szoftverek híveitől kezdve a kerékpárosokon, térinformatikusokon és geocaching-játékosokon át bárki másig. Örömmel látunk mindenkit, akit érdekelnek a térképek, a térképészet és a nyílt térképadatok, hogy csatlakozzék csoportunkhoz és részt vegyen a rendezvényeinken." + }, + "Central-Pennsylvania-OSM": { + "name": "Közép-Pennsylvania OSM", + "description": "A Pennsylvania State College főiskolából kinövő online térképészközösség" + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM", + "description": "A Dallas-Fort Worth-ban működő OpenStreetMap felhasználói csoport", + "extendedDescription": "Dallas, Fort Worth és a köztük lévő városok bővelkednek kreatív, műszakilag jártas emberekben. A felhasználói csoport jövőképe, hogy új utakat találjon az OSM lenyűgöző erőforrásainak kihasználásra." + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "Térképrajongók találkozója Philadelphia térségében" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/hy.json b/vendor/assets/iD/iD/locales/hy.json index 7c4f39174..194bad719 100644 --- a/vendor/assets/iD/iD/locales/hy.json +++ b/vendor/assets/iD/iD/locales/hy.json @@ -386,12 +386,7 @@ } }, "success": { - "edited_osm": "ՕՍՄ֊ը խմբագրո՛ւած է։", - "just_edited": "Դու նոր խմբագրեցի՛ր ՕփենՍթրիթՄէփը։", - "view_on_osm": "Ô´Õ«Õ¿Õ¥Õ¬ ՕՍՄ֊ում։", - "facebook": "Տարածել Ֆեյսբուքում", - "twitter": "Տարածել Թուիթերում", - "google": "Տարածել Գուգլ+֊ում" + "just_edited": "Դու նոր խմբագրեցի՛ր ՕփենՍթրիթՄէփը։" }, "confirm": { "cancel": "Չեղարկել" @@ -844,9 +839,6 @@ "traffic_signals": { "label": "Տեսակ" }, - "vending": { - "label": "Գոյքի Տեսակ" - }, "water": { "label": "Տեսակ" }, diff --git a/vendor/assets/iD/iD/locales/id.json b/vendor/assets/iD/iD/locales/id.json index d7f38b418..72b2fdc29 100644 --- a/vendor/assets/iD/iD/locales/id.json +++ b/vendor/assets/iD/iD/locales/id.json @@ -397,12 +397,7 @@ } }, "success": { - "edited_osm": "OSM tersunting!", "just_edited": "Anda baru saja menyunting OpenStreetMap!", - "view_on_osm": "Lihat di OSM", - "facebook": "Bagikan di Facebook", - "twitter": "Bagikan di Twitter", - "google": "Bagikan di Google+", "help_link_text": "detail" }, "confirm": { @@ -2556,15 +2551,6 @@ "type/restriction/no_u_turn": { "name": "Dilarang Putar Balik" }, - "type/restriction/only_left_turn": { - "name": "Belok Kiri Saja" - }, - "type/restriction/only_right_turn": { - "name": "Belok Kanan Saja" - }, - "type/restriction/only_straight_on": { - "name": "Dilarang Berbelok" - }, "type/route": { "name": "Rute" }, diff --git a/vendor/assets/iD/iD/locales/is.json b/vendor/assets/iD/iD/locales/is.json index b67cfcda1..2328b9a97 100644 --- a/vendor/assets/iD/iD/locales/is.json +++ b/vendor/assets/iD/iD/locales/is.json @@ -1,5 +1,10 @@ { "is": { + "icons": { + "information": "upplýsingar", + "remove": "fjarlægja", + "undo": "afturkalla" + }, "modes": { "add_area": { "title": "Svæði", @@ -291,6 +296,42 @@ } } }, + "restriction": { + "controls": { + "distance": "Fjarlægð", + "distance_up_to": "Allt að {distance}", + "via": "Í gegnum", + "via_node_only": "Einungis hnútur", + "via_up_to_one": "Allt að 1 leið", + "via_up_to_two": "Allt að 2 leiðum" + }, + "help": { + "indirect": "(óbeint)", + "turn": { + "no_left_turn": "EKKI vinstri beygja {indirect}", + "no_right_turn": "EKKI hægri beygja {indirect}", + "no_u_turn": "EKKI U-beygja {indirect}", + "no_straight_on": "EKKI beint áfram {indirect}", + "only_left_turn": "EINUNGIS vinstri beygja {indirect}", + "only_right_turn": "EINUNGIS hægri beygja {indirect}", + "only_u_turn": "EINUNGIS U-beygja {indirect}", + "only_straight_on": "EINUNGIS beint áfram {indirect}", + "allowed_left_turn": "Vinstri beygja leyfð {indirect}", + "allowed_right_turn": "Hægri beygja leyfð {indirect}", + "allowed_u_turn": "U-beygja leyfð {indirect}", + "allowed_straight_on": "Beint áfram leyft {indirect}" + }, + "from": "FRÁ", + "via": "Í GEGNUM", + "to": "TIL", + "from_name": "{from} {fromName}", + "from_name_to_name": "{from} {fromName} {to} {toName}", + "via_names": "{via} {viaNames}", + "select_from": "Smelltu til að velja {from} bút", + "select_from_name": "Smelltu til að velja {from} {fromName}", + "toggle": "Smelltu til að \"{turn}\"" + } + }, "undo": { "tooltip": "Afturkalla: {action}", "nothing": "Ekkert til að afturkalla." @@ -603,13 +644,7 @@ } }, "success": { - "edited_osm": "Þú breyttir OSM!", "just_edited": "Þú hefur breytt OpenStreetMap!", - "view_on_osm": "Skoða á OSM", - "facebook": "Deila á Facebook", - "twitter": "Deila á Twitter", - "google": "Deila á Google+", - "help_html": "Breytingarnar þínar ættu að birtast á \"staðlaða\" laginu innan skamms. Breytingar á öðrum lögum og ákveðnum eigindum gætu tekið lengri tíma.", "help_link_text": "Nánar", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -846,6 +881,44 @@ "using": "Til að nota GPS-feril til kortagerðar, dragðu og slepptu gagnaskrána yfir í kortaritilinn. Ef hún er metin gild, verður ferillinn teiknaður á kortið með ljósfjólublárri línu. Smelltu á {data} **Kortagögn** spjaldið við hlið kortsins til að virkja, gera óvirkt eða renna inn að GPS-gögnunum þínum.", "tracing": "GPS-ferillinn er ekki sendur til OpenStreetMap - besta leiðin til að nota hann er við teikningu á kortið, nota hann til stuðnungs við fitjur eða eigindi sem þú setur inn.", "upload": "Þú getur líka [sent GPS-gögnin þín inn á OpenStreetMap](https://www.openstreetmap.org/trace/create) svo að aðrir notendur geti stuðst við þau." + }, + "field": { + "restrictions": { + "title": "Hjálp fyrir takmarkanir á beygjum", + "about": { + "title": "Um", + "about": "Þessi reitur gerir þér kleift að yfirfara og breyta takmörkunum á beygjum. Hann birtir líkan af völdum gatnamótum ásamt nálægum tengdum vegum.", + "from_via_to": "Takmörkun á beygju inniheldur alltaf: eina **FRÁ leið**, eina **TIL leið**, og annað hvort einn **Í GEGNUM hnút** eða eina eða fleiri **Í GEGNUM leiðir**.", + "maxdist": "Sleðinn \"{distField}\" stýrir hve langt eigi að leita að tengdum vegum í viðbót.", + "maxvia": "Sleðinn \"{viaField}\" stýrir hve margar gegnumstreymisleiðir eigi að hafa með í leitinni. (Ábending: einfalt er betra)" + }, + "inspecting": { + "title": "Yfirferð", + "about": "Láttu bendilinn svífa yfir einhverjum **FRÁ** bút til að skoða hvort hann sé með nokkrar takmarkanir á beygjum. Allir mögulegir **TIL** úttakspunktar verða teiknaðir með litaðri skyggingu til að sýna hvort takmörkun sé fyrir hendi.", + "from_shadow": "{fromShadow} **FRÁ bútur**", + "allow_shadow": "{allowShadow} **TIL leyft**", + "restrict_shadow": "{restrictShadow} **TIL takmarkað**", + "only_shadow": "{onlyShadow} **TIL einungis**", + "restricted": "\"Takmarkað\" þýðir að þar er takmörkun á beygjum, til dæmis \"Ekki vinstri beygja\".", + "only": "\"Einungis\" þýðir að farartæki á þessari leið getur einungis valið þessa leið, til dæmis \"Einungis beint áfram\"." + }, + "modifying": { + "title": "Breytingar", + "about": "Til að breyta takmörkunum á beygjum, smelltu þá fyrst á einhvern upphafs-**FRÁ** bút til að velja hann. Valdi búturinn mun sýnast slá í púls, og allir mögulegir **TIL** úttakspunktar munu birtast sem beygjutákn.", + "indicators": "Síðan geturðu smellt á beygjutákn til að víxla því á milli \"Leyft\", \"Takmarkað\" og \"Einungis\".", + "allow_turn": "{allowTurn} **TIL leyft**", + "restrict_turn": "{restrictTurn} **TIL takmarkað**", + "only_turn": "{onlyTurn} **TIL einungis**" + }, + "tips": { + "title": "Ábendingar", + "simple": "**Kjóstu einfaldar takmarkanir fram yfir flóknar.**", + "simple_example": "Sem dæmi, forðastu að útbúa gegnumstreymisleið ef hægt er að komast af með einfaldari takmörkun á beygju með 'í gegnum'-hnúti.", + "indirect": "**Sumar takmarkanir eru birtar með textanum \"(óbeint)\" og eru teiknaðar ljósari.**", + "indirect_example": "Slíkar takmarkanir eru til staðar vegna annarra takmarkana í grenndinni. Til dæmis mun \"Einungis beint áfram\" takmörkun útbúa óbeint aðrar \"Ekki beygja\" takmarkanir fyrir allar aðrar leiðir í gegnum gatnamótin.", + "indirect_noedit": "Þú getur ekki breytt óbeinum takmörkunum. Í staðinn þarftu að breyta öðrum nálægum takmörkunum." + } + } } }, "intro": { @@ -1629,6 +1702,9 @@ "cycleway:right": "Hægra megin" } }, + "dance/style": { + "label": "Dansstílar" + }, "date": { "label": "Dagsetning" }, @@ -1867,6 +1943,9 @@ "indoor": { "label": "Innanhúss" }, + "industrial": { + "label": "Tegund" + }, "information": { "label": "Tegund" }, @@ -1987,6 +2066,10 @@ "label": "Hraðatakmörkun", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "label": "Ráðlögð hraðatakmörkun", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Hámarksdvöl" }, @@ -2573,8 +2656,19 @@ "label": "Tegund", "placeholder": "Sjálfgefið" }, + "usage_rail": { + "label": "Tegund notkunar", + "options": { + "branch": "Grein", + "industrial": "Iðnaður", + "main": "Aðal", + "military": "Hernaður", + "test": "Prófanir", + "tourism": "Ferðaþjónusta" + } + }, "vending": { - "label": "Sýnileiki vöru" + "label": "Vörutegundir" }, "visibility": { "label": "Sýnileiki", @@ -2606,6 +2700,12 @@ "voltage/primary": { "label": "Aðalspenna" }, + "voltage/secondary": { + "label": "Eftirspenna" + }, + "voltage/tertiary": { + "label": "Aukaspenna" + }, "wall": { "label": "Tegund" }, @@ -2731,6 +2831,9 @@ "aeroway/terminal": { "name": "Flugstöð" }, + "allotments/plot": { + "name": "Samfélagsgarðskikar" + }, "amenity": { "name": "Þjónusta" }, @@ -2908,6 +3011,9 @@ "amenity/marketplace": { "name": "Markaður" }, + "amenity/monastery": { + "name": "Klausturlóð" + }, "amenity/motorcycle_parking": { "name": "Mótorhjólastæði" }, @@ -3067,18 +3173,36 @@ "amenity/vending_machine/cigarettes": { "name": "Sígarettusjálfsali" }, + "amenity/vending_machine/coffee": { + "name": "Kaffisjálfsali" + }, "amenity/vending_machine/condoms": { "name": "Smokkasjálfsali" }, "amenity/vending_machine/drinks": { "name": "Drykkjasjálfsali" }, + "amenity/vending_machine/electronics": { + "name": "Rafeindatækjasjálfsali" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Sjálfsali fyrir flatta/stimplaða mynt" + }, "amenity/vending_machine/excrement_bags": { "name": "Sjálfsali með úrgangspokum" }, "amenity/vending_machine/feminine_hygiene": { "name": "Sjálfsali með dömusnyrtivörum" }, + "amenity/vending_machine/food": { + "name": "Matarsjálfsali" + }, + "amenity/vending_machine/fuel": { + "name": "Eldsneytisdæla" + }, + "amenity/vending_machine/ice_cream": { + "name": "Íssjálfsali" + }, "amenity/vending_machine/news_papers": { "name": "Dagblaðasjálfsali" }, @@ -3094,6 +3218,9 @@ "amenity/vending_machine/public_transport_tickets": { "name": "Miðasjálfsali í almenningssamgöngur" }, + "amenity/vending_machine/stamps": { + "name": "Póstsjálfsali" + }, "amenity/vending_machine/sweets": { "name": "Snakksjálfsali" }, @@ -3275,6 +3402,12 @@ "building/entrance": { "name": "Inngangur/Útgangur" }, + "building/farm": { + "name": "Íbúðarhús á býli" + }, + "building/farm_auxiliary": { + "name": "Landbúnaðarbygging" + }, "building/garage": { "name": "Bílskúr" }, @@ -3705,6 +3838,9 @@ "highway/motorway_link": { "name": "Hraðbrautarrein" }, + "highway/passing_place": { + "name": "Framúrakstur" + }, "highway/path": { "name": "Stígur" }, @@ -3724,7 +3860,7 @@ "name": "Keppnisbraut (mótorsport)" }, "highway/residential": { - "name": "Íbúagata" + "name": "Íbúðagata" }, "highway/rest_area": { "name": "Hvíldarsvæði" @@ -3976,6 +4112,9 @@ "leisure/amusement_arcade": { "name": "Spilasalur" }, + "leisure/beach_resort": { + "name": "Strandbær" + }, "leisure/bird_hide": { "name": "Fuglaskoðunarskýli" }, @@ -3988,6 +4127,9 @@ "leisure/dance": { "name": "Danssalur" }, + "leisure/dancing_school": { + "name": "Dansskóli" + }, "leisure/dog_park": { "name": "Hundagarður" }, @@ -4060,6 +4202,9 @@ "leisure/nature_reserve": { "name": "Friðland" }, + "leisure/outdoor_seating": { + "name": "Svæði fyrir sæti utandyra" + }, "leisure/park": { "name": "Garður" }, @@ -4156,6 +4301,9 @@ "man_made/adit": { "name": "Námuinngangur" }, + "man_made/antenna": { + "name": "Loftnet" + }, "man_made/breakwater": { "name": "Sjóvarnargarður" }, @@ -4195,6 +4343,9 @@ "man_made/observation": { "name": "Varðturn" }, + "man_made/observatory": { + "name": "Skoðunarstöð" + }, "man_made/petroleum_well": { "name": "Olíulind" }, @@ -4289,6 +4440,9 @@ "natural/heath": { "name": "Mói" }, + "natural/mud": { + "name": "Leðja" + }, "natural/peak": { "name": "Tindur" }, @@ -4415,6 +4569,9 @@ "office/lawyer/notary": { "name": "Skrifstofa lögbókanda" }, + "office/moving_company": { + "name": "Skrifstofa flutningafyrirtækis" + }, "office/newspaper": { "name": "Skrifstofur fréttablaðs" }, @@ -5079,6 +5236,9 @@ "shop/pet": { "name": "Dýrabúð" }, + "shop/pet_grooming": { + "name": "Dýrasnyrtiverslun" + }, "shop/photo": { "name": "Ljósmyndavöruverslun" }, @@ -5309,13 +5469,16 @@ "name": "Engin U-beygja" }, "type/restriction/only_left_turn": { - "name": "Einungis vinstri beygja" + "name": "Aðeins vinstri beygja" }, "type/restriction/only_right_turn": { - "name": "Einungis hægri beygja" + "name": "Aðeins hægri beygja" }, "type/restriction/only_straight_on": { - "name": "Engar beygjur" + "name": "Aðeins beint áfram" + }, + "type/restriction/only_u_turn": { + "name": "Aðeins U-beygja" }, "type/route": { "name": "Leið" @@ -5368,6 +5531,9 @@ "type/route_master": { "name": "Leiðastjóri" }, + "type/site": { + "name": "Stæði" + }, "type/waterway": { "name": "Siglingaleið" }, @@ -5440,7 +5606,6 @@ "attribution": { "text": "Skilmálar og umsagnir" }, - "description": "Útjaðar myndefnis og tökudagsetningar. Merkingar birtast við aðdráttarstig 14 og hærra.", "name": "Eldri myndir frá DigitalGlobe (Premium Vintage)" }, "DigitalGlobe-Standard": { @@ -5454,7 +5619,6 @@ "attribution": { "text": "Skilmálar og umsagnir" }, - "description": "Útjaðar myndefnis og tökudagsetningar. Merkingar birtast við aðdráttarstig 14 og hærra.", "name": "Eldri myndir frá DigitalGlobe (Standard Vintage)" }, "EsriWorldImagery": { @@ -5634,7 +5798,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Kortaflísar frá Stamen Design, með CC BY 3.0 notkunarleyfi" + "text": "Kortaflísar frá Stamen Design, með CC BY 3.0 notkunarleyfi. Gögn frá OpenStreetMap, með ODbL notkunarleyfi" }, "name": "Stamen landsyfirborð" }, @@ -5650,6 +5814,200 @@ }, "name": "Thunderforest landslag" } + }, + "community": { + "OSM-India-facebook": { + "name": "OpenStreetMap India - Kortagerð með þáttöku nágranna", + "description": "Bætum OpenStreetMap-gögn á Indlandi" + }, + "OSM-japan-facebook": { + "name": "OpenStreetMap Japan samfélagið", + "description": "Kortagerðarfólk og notendur OpenStreetMap í Japan" + }, + "OSM-japan-mailinglist": { + "name": "Póstlisti OpenStreetMap Japan", + "description": "Talk-ja er opinber póstlisti japanska OSM-hópsins" + }, + "OSM-japan-twitter": { + "name": "Twitter-hópur OpenStreetMap Japan", + "description": "Myllumerki á Twitter á {url}" + }, + "OSM-PH-facebook": { + "name": "Facebook-hópur OpenStreetMap PH", + "description": "Velkomin í filipeyska OpenStreetMap hópinn, þar sem við hvetjum alla aðra filipseyinga til að taka þátt í OpenStreetMap-verkefninu." + }, + "OSM-PH-mailinglist": { + "name": "Talk-ph póstlistinn", + "description": "Póstlisti til að ræða OpenStreetMap á Filipseyjum" + }, + "OSM-PH-slack": { + "name": "OpenStreetMap PH Slack", + "description": "Allir velkomnir! Skráðu þig á {signupUrl}" + }, + "OSM-PH-telegram": { + "name": "Telegram-hópur OpenStreetMap PH", + "description": "Óopinber staðvær Telegram-hópur OpenStreetMap þátttakenda og vina á Filipseyjum" + }, + "OSM-RU-forum": { + "name": "OpenStreetMap RU vefspjall", + "description": "Vefspjall (forum) OpenStreetMap Rússland" + }, + "OSM-RU-telegram": { + "name": "Telegram-hópur OpenStreetMap RU", + "description": "Telegram-hópur OpenStreetMap Rússland" + }, + "OSM-TW-facebook": { + "name": "OpenStreetMap Tævan samfélagið", + "description": "Facebook-hópur fyrir kortagerðarfólk og notendur OpenStreetMap í Tævan" + }, + "OSM-TW-mailinglist": { + "name": "Póstlisti OpenStreetMap Tævan", + "description": "Talk-ja er opinber póstlisti tævanska OSM-hópsins" + }, + "byosm": { + "name": "OpenStreetMap Hvítarússland", + "description": "Telegram-hópur OpenStreetMap Hvítarússlands" + }, + "talk-cz-mailinglist": { + "name": "Talk-cz póstlistinn", + "description": "Talk-ja er opinber póstlisti tékkneska OSM-hópsins" + }, + "OSM-ES-telegram": { + "name": "@OSMes á Telegram", + "description": "Telegram-hópur OpenStreetMap Spánn" + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap Vancouver", + "description": "Kortagerðarfólk og notendur OpenStreetMap í Vancouver, BC-svæðinu" + }, + "Bay-Area-OpenStreetMappers": { + "name": "Bay Area OpenStreetMappers", + "description": "Bætum OpenStreetMap-gögn á Bay Area" + }, + "Central-Pennsylvania-OSM": { + "name": "Central Pennsylvania OSM" + }, + "Code-for-San-Jose-Slack": { + "description": "Allir eru velkomnir! Skráðu þig á {signupUrl}, taktu síðan þátt á #osm IRC-rásinni" + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM", + "description": "Notendahópur OpenStreetMap í Dallas-Fort Worth" + }, + "GeoPhilly": { + "name": "GeoPhilly" + }, + "Mapping-DC-meetup": { + "name": "Mapping DC", + "description": "Bætum OpenStreetMap-gögn á DC-svæðinu" + }, + "Maptime-ME-meetup": { + "name": "MaptimeME", + "description": "Kortagerðarfólk og notendur OpenStreetMap í kringum Portland, ME" + }, + "OpenCleveland-meetup": { + "name": "Open Cleveland", + "description": "Bætum OpenStreetMap-gögn á Cleveland-svæðinu" + }, + "OSM-Boston": { + "name": "OpenStreetMap Boston", + "description": "Kortagerðarfólk og notendur OpenStreetMap á Boston-svæðinu" + }, + "OSM-Central-Salish-Sea": { + "name": "OpenStreetMap Central Salish Sea", + "description": "Kortagerðarfólk og notendur OpenStreetMap í kringum Mount Vernon, WA", + "extendedDescription": "OpenStreetMap er landakort af heiminum gert af fólki eins og þér. Kort sem þú byggir upp, sem er öllum frjálst, rétt eins og Wikipedia. Skoðaðu osm.org til að sjá nánari upplýsingar. Við hittumst mjög oft til að tala um kort, gera kort, og skemmta okkur!" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "Notendur OpenStreetMap í Chattanooga" + }, + "OSM-Colorado": { + "name": "OpenStreetMap Colorado", + "description": "Kortagerðarfólk og notendur OpenStreetMap í Colorado-fylki, BNA" + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC", + "description": "Kortagerðarfólk og notendur OpenStreetMap, forritarar og áhugafólk á New York Metropolitan-svæðinu" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland", + "description": "Kortagerðarfólk og notendur OpenStreetMap á Portland-svæðinu", + "extendedDescription": "OpenStreetMap (OSM) er landakort af heiminum gert af fólki eins og þér. Kort sem þú byggir upp, sem er öllum frjálst, rétt eins og Wikipedia. Skoðaðu osm.org til að sjá nánari upplýsingar, og kíktu við á fundum til að tala um kort, gera OSM-kort, og skemmta þér!" + }, + "OSM-Seattle": { + "name": "OpenStreetMap Seattle", + "description": "Kortagerðarfólk og notendur OpenStreetMap á Seattle-svæðinu" + }, + "OSM-SoCal": { + "name": "OpenStreetMap Southern California", + "description": "Skemmtum okkur, gerum eitthvað fyrir Los Angeles, og lærum í leiðinni um kortagerð!" + }, + "OSM-South-Bay": { + "name": "OSM South Bay" + }, + "OSM-Tampa-Bay": { + "name": "OpenStreetMap Tampa Bay", + "description": "Kortagerðarfólk og notendur OpenStreetMap á Tampa Bay-svæðinu" + }, + "OSM-US-Slack": { + "name": "OpenStreetMap US Slack", + "description": "Allir velkomnir! Skráðu þig á {signupUrl}" + }, + "OSM-US": { + "name": "OpenStreetMap US", + "description": "Við hjálpum til við að auka og bæta OpenStreetMap-gögn í Bandaríkjunum" + }, + "OSM-Utah": { + "name": "OpenStreetMap Utah", + "description": "Kortagerðarfólk og notendur OpenStreetMap á Salt Lake City-svæðinu" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap Wyoming", + "description": "Kortagerðarfólk og notendur OpenStreetMap í Wyoming-fylki, BNA" + }, + "PHXGeo-meetup": { + "description": "Kortagerðarfólk og notendur OpenStreetMap á Phoenix, AZ-svæðinu" + }, + "PHXGeo-twitter": { + "description": "Fylgstu með okkur á Twitter á {url}" + }, + "Western-Slope-facebook": { + "description": "Kortagerðarfólk og notendur OpenStreetMap í kringum Grand Junction, CO" + }, + "Western-Slope-meetup": { + "description": "Kortagerðarfólk og notendur OpenStreetMap í kringum Grand Junction, CO" + }, + "Maptime-Australia-Slack": { + "description": "Skráðu þig á {signupUrl}" + }, + "OSM-AR-facebook": { + "name": "Facebook-hópur OpenStreetMap Argentína", + "description": "Gakktu til liðs við OpenStreetMap Argentína hópinn á Facebook" + }, + "OSM-AR-forum": { + "name": "Vefspjall (forum) OpenStreetMap Argentína", + "description": "Gakktu til liðs við OpenStreetMap Argentína vefspjallið" + }, + "OSM-AR-irc": { + "name": "IRC-rás OpenStreetMap Argentína", + "description": "Taktu þátt á #osm-ar á irc.oftc.net (gátt 6667)" + }, + "OSM-AR-mailinglist": { + "name": "Talk-ar póstlistinn" + }, + "OSM-AR-telegram": { + "name": "Telegram-hópur OpenStreetMap Argentína", + "description": "Gakktu til liðs við OpenStreetMap Argentína hópinn á Telegram" + }, + "OSM-AR-twitter": { + "name": "Twitter-hópur OpenStreetMap Argentína", + "description": "Fylgstu með okkur á Twitter á {url}" + }, + "OSM-Reddit": { + "name": "OpenStreetMap á Reddit", + "description": "/r/openstreetmap/ er góður staður til að læra meira um OpenStreetMap. Spurðu okkur um allt milli himins og jarðar!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/it.json b/vendor/assets/iD/iD/locales/it.json index b82c93dc5..b50aa6f7a 100644 --- a/vendor/assets/iD/iD/locales/it.json +++ b/vendor/assets/iD/iD/locales/it.json @@ -1,5 +1,10 @@ { "it": { + "icons": { + "information": "info", + "remove": "rimuovi", + "undo": "annulla" + }, "modes": { "add_area": { "title": "Area", @@ -145,7 +150,9 @@ "vertex": "Connessa una linea ad un'altra.", "line": "Connessa una strada ad una linea.", "area": "Connessa una linea ad un'area." - } + }, + "relation": "Questi elementi non possono essere collegati tra loro perché ci sono conflitti nei ruoli della relazione.", + "restriction": "Questi elementi non possono essere connessi tra loro perché ciò danneggerebbe la relazione “{relation}”" }, "disconnect": { "title": "Disconnetti", @@ -402,6 +409,7 @@ "key": "H", "title": "Storico", "selected": "{n} selezionato/i", + "no_history": "Nessuna cronologia (nuovo elemento)", "version": "Versione", "last_edit": "Ultima modifica", "edited_by": "Modificato da", @@ -639,15 +647,20 @@ } }, "success": { - "edited_osm": "OSMI Modificato", "just_edited": "Hai appena modificato OpenStreetMap!", - "view_on_osm": "Vedi su OSM", - "facebook": "Condividi su Facebook", - "twitter": "Condividi su Twitter", - "google": "Condividi su Google+", - "help_html": "Le tue modifiche appariranno nel livello \"Standard\" tra qualche minuto. Per gli altri livelli e per certi elementi potrebbe essere necessario più tempo.", + "thank_you": "Ti ringraziamo per aver migliorato la mappa.", + "thank_you_location": "Grazie per aver migliorato la mappa attorno a {where}.", + "help_html": "Le tue modifiche dovrebbero apparire su OpenStreetMap entro pochi minuti. Per le altre mappe che usano OpenStreetMap occorrerà attendere po’ di più.", "help_link_text": "Dettagli", - "help_link_url": "https://wiki.openstreetmap.org/wiki/IT:FAQ#Ho_editato_i_dati_tutto_il_giorno.2C_ma_le_mie_modifiche_non_appaiono_nel_viewer.21" + "help_link_url": "https://wiki.openstreetmap.org/wiki/IT:FAQ#Ho_editato_i_dati_tutto_il_giorno.2C_ma_le_mie_modifiche_non_appaiono_nel_viewer.21", + "view_on_osm": "Vedi le modifiche su OSM", + "changeset_id": "Il tuo gruppo di modifiche #: {changeset_id}", + "like_osm": "Ti piace OpenStreetMap? Unisciti agli altri:", + "more": "Altro", + "events": "Eventi", + "languages": "Lingue: {languages}", + "missing": "Manca qualcosa da questa lista?", + "tell_us": "Segnalacelo!" }, "confirm": { "okay": "OK", @@ -730,7 +743,7 @@ "before_start_h": "Prima di iniziare", "before_start": "Prima di iniziare ad effettuare modifiche dovresti essere a conoscenza delle funzioni principali di questo editor e di come funziona OpenstreetMap. In iD è stata integrata una guida interattiva, con lo scopo di insegnare le funzioni indispensabili per la mappatura. Clicca \"Avvia il tutorial\" su questa schermata per iniziare - richiede circa 15 minuti.", "open_source_h": "Open Source", - "open_source": "L'editor iD è un progetto collaborativo open source, tu ora stai usando la versione {versione}. Il codice sorgente è disponibile [su GitHub](https://github.com/openstreetmap/iD).", + "open_source": "L'editor iD è un progetto collaborativo open source, ora stai usando la versione {version}. Il codice sorgente è disponibile [su GitHub](https://github.com/openstreetmap/iD).", "open_source_help": "Puoi contribuire nella [traduzione](https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating) di iD oppure [segnalare problemi](https://github.com/openstreetmap/iD/issues)." }, "overview": { @@ -915,7 +928,7 @@ "title": "Suggerimenti", "simple": "**Preferisci obblighi di svolta semplici invece di altri più complessi.**", "simple_example": "Ad esempio, evita di creare un obbligo di svolta che utilizza un percorso di topo VIA se basta usare un nodo per lo stesso ruolo.", - "indirect": "**Alcuni obblighi di svolta sono segnati con il testo \"{indirect}\" e sono colorati più chiari.**", + "indirect": "**Alcuni obblighi di svolta sono segnati con il testo \"(indiretto)\" e sono colorati più chiari.**", "indirect_example": "Questi obblighi di svolta esistono come conseguenza di un altro obbligo nei dintorni. Ad esempio, un \"obbligo di direzione obbligatoria\" genererà automaticamente un \"divieto di inversione di marcia\" per tutti gli altri percorsi che attraversano l'intersezione.", "indirect_noedit": "Non puoi modificare gli obblighi di svolta indiretti. Al loro posto, modifica i normali obblighi di svolta vicini." } @@ -1396,7 +1409,7 @@ "bicycle": "Biciclette", "foot": "A piedi", "horse": "Cavalli", - "motor_vehicle": "Veicoli a Motore" + "motor_vehicle": "Veicoli a motore" } }, "access_simple": { @@ -1579,7 +1592,7 @@ }, "cables": { "label": "Cavi", - "placeholder": "1, 2, 3,..." + "placeholder": "1, 2, 3..." }, "camera/direction": { "label": "Direzione (gradi in senso orario)", @@ -1666,7 +1679,7 @@ "label": "Rete" }, "cycleway": { - "label": "Corsie Ciclabili", + "label": "Corsie ciclabili", "options": { "lane": { "description": "Una corsia ciclabile separata dal traffico motorizzato da una linea disegnata", @@ -1723,7 +1736,7 @@ }, "devices": { "label": "Dispositivi", - "placeholder": "1, 2, 3,..." + "placeholder": "1, 2, 3..." }, "diaper": { "label": "Fasciatoio" @@ -1774,6 +1787,9 @@ "display": { "label": "Display" }, + "distance": { + "label": "Distanza totale" + }, "dock": { "label": "Tipologia" }, @@ -1789,10 +1805,10 @@ "options": { "contact_line": "Linea Aerea di Contatto", "no": "No", - "rail": "Rotaia Elettrificata", + "rail": "Rotaia elettrificata", "yes": "Sì (non specificato)" }, - "placeholder": "Linea Aerea, Rotaia Elettrificata..." + "placeholder": "Linea aerea, rotaia elettrificata..." }, "elevation": { "label": "Altitudine" @@ -1814,6 +1830,9 @@ "except": { "label": "Eccezioni" }, + "faces": { + "label": "Facciate" + }, "fax": { "label": "Fax", "placeholder": "+39 01 123 456" @@ -1925,6 +1944,39 @@ "label": "Canestri", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "label": "Dressage", + "options": { + "equestrian": "Sì", + "undefined": "No" + } + }, + "horse_riding": { + "label": "Cavalcata", + "options": { + "horse_riding": "Sì", + "undefined": "No" + } + }, + "horse_scale": { + "label": "Livello di difficoltà della cavalcata", + "options": { + "common": "Facile: nessun ostacolo o difficoltà. (predefinito)", + "critical": "Intermedio: effettuabile solo da cavalieri esperti e cavalli in forma. Ostacoli importanti. I ponti vanno esaminati accuratamente.", + "dangerous": "Pericoloso: solo per cavalieri molto esperti e cavalli in forma se le condizioni meteo lo permettono. È necessario scendere da cavallo.", + "demanding": "Da praticare con cautela: strada disconnessa con passaggi occasionalmente difficili.", + "difficult": "Difficile: percorso stretto ed esposto. Possono esserci ostacoli da saltare e passaggi stretti.", + "impossible": "Impraticabile: il percorso/ponte non è adatto ai cavalli. Troppo stretto, non può tenere il peso dell’animale oppure ci sono ostacoli come scale. Pericolo di vita." + }, + "placeholder": "Difficile, pericoloso..." + }, + "horse_stables": { + "label": "Scuderia ippica", + "options": { + "stables": "Sì", + "undefined": "No" + } + }, "iata": { "label": "IATA" }, @@ -1944,6 +1996,9 @@ "indoor": { "label": "Al chiuso" }, + "industrial": { + "label": "Tipo" + }, "information": { "label": "Tipo" }, @@ -2058,12 +2113,16 @@ }, "maxheight": { "label": "Altezza massima", - "placeholder": "4, 4.5, 5, 14'0\", 14'6\", 15'0\", ..." + "placeholder": "4, 4.5, 5, 14'0\", 14'6\", 15'0\"" }, "maxspeed": { "label": "Limite di velocità", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "label": "Limite di velocità consigliata", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Limite orario" }, @@ -2077,7 +2136,7 @@ "label": "Controllo" }, "mtb/scale": { - "label": "Difficoltà Mountain Bike", + "label": "Difficoltà mountain bike", "options": { "0": "0: Ghiaia solida/terra battuta, nessun ostacolo, curve ampie", "1": "1: Un po' di terriccio, piccoli ostacoli, curve ampie", @@ -2105,10 +2164,10 @@ "options": { "0": "0: Pendenza media <10%, ghiaia/terra battuta, nessun ostacolo", "1": "1: Pendenza media <15%, ghiaia/terra battuta, ostacoli rari e piccoli", - "2": "2: Pendenza media <20%, superficie stabile, radici/roccie grandi come un pugno", - "3": "3: Pendenza media <25%, superficie varia, rami/roccie grandi come un pugno", - "4": "4: Pendenza media <30%, in cattive condizioni, rami/roccie grandi", - "5": "5: Pendenza estrema, in genere è necessario spigere o sollevare la bici" + "2": "2: Pendenza media <20%, superficie stabile, radici/rocce grandi come un pugno", + "3": "3: Pendenza media <25%, superficie varia, rami/rocce grandi come un pugno", + "4": "4: Pendenza media <30%, in cattive condizioni, rami/rocce grandi", + "5": "5: Pendenza estrema, in genere è necessario spingere o sollevare la bici" }, "placeholder": "0, 1, 2, 3..." }, @@ -2296,6 +2355,7 @@ "label": "Tipo" }, "railway/position": { + "label": "Posizione della pietra miliare", "placeholder": "Distanza ad una cifra decimale (123.4)" }, "railway/signal/direction": { @@ -2545,6 +2605,9 @@ "switch": { "label": "Tipo", "options": { + "circuit_breaker": "Interruttore automatico", + "disconnector": "Sezionatore", + "earthing": "Sezionatore di terra", "mechanical": "Meccanico" } }, @@ -2648,8 +2711,19 @@ "label": "Tipo", "placeholder": "Default" }, + "usage_rail": { + "label": "Tipo di utilizzo", + "options": { + "branch": "Secondario", + "industrial": "Industriale", + "main": "Principale", + "military": "Militare", + "test": "Per collaudi", + "tourism": "Turismo" + } + }, "vending": { - "label": "Beni venduti" + "label": "Tipi di prodotti" }, "visibility": { "label": "Visibilità", @@ -2709,6 +2783,9 @@ "wheelchair": { "label": "Accesso in carrozzina" }, + "wholesale": { + "label": "Vendita all’ingrosso" + }, "width": { "label": "Larghezza (Metri)" }, @@ -2717,7 +2794,7 @@ }, "windings": { "label": "Avvolgimenti", - "placeholder": "1, 2, 3,..." + "placeholder": "1, 2, 3..." }, "windings/configuration": { "label": "Configurazione degli avvolgimenti", @@ -2741,6 +2818,10 @@ "name": "Cartellone pubblicitario", "terms": "pubblicità,cartellone,promozione,propaganda,réclame,manifesto" }, + "advertising/column": { + "name": "Espositore pubblicitario cilindrico", + "terms": "espositore pubblicitario,espositori,cilindro,cilindrico,pubblicità,cartellone,totem" + }, "aerialway": { "name": "Trasporto a fune" }, @@ -2826,20 +2907,24 @@ "name": "Terminal aeroportuale", "terms": "aeroporto,aerodromo,terminale" }, + "allotments/plot": { + "name": "Orto pubblico", + "terms": "orto pubblico,anziano,anziani,orti urbani,orto,orti,orto per anziani" + }, "amenity": { "name": "Servizi" }, "amenity/animal_boarding": { "name": "Pensione per animali", - "terms": "pet,resort,hotel,rifugio,can*,gatt*,cavall*,cucciol*,rettil*" + "terms": "pet,resort,hotel,rifugio,pensione,cane,cani,gatto,gatti,cavallo,cavalli,cucciolo,cuccioli,rettile,rettili" }, "amenity/animal_breeding": { "name": "Allevamento", - "terms": "tor*,gatt*,vivaio,can*,mucc*,cavall*,cucciol*,rettil*,allevatore" + "terms": "toro,tori,gatto,gatti,vivaio,cane,cani,mucca,mucche,cavallo,cavalli,cavalle,cucciolo,cuccioli,rettile,rettili,allevatore" }, "amenity/animal_shelter": { "name": "Rifugio per animali", - "terms": "adozion*,gatt*,can*,cucciol*,rettil*,ricovero,riparo" + "terms": "adozione,adozioni,gatto,gatti,micio,cane,cani,cucciolo,cuccioli,rettile,rettili,ricovero,riparo" }, "amenity/arts_centre": { "name": "Centro Culturale", @@ -2871,7 +2956,7 @@ }, "amenity/bicycle_rental": { "name": "Stazione del Bike Sharing", - "terms": "" + "terms": "noleggio bici,noleggio biciclette,nolo bici,nolo biciclette,noleggio velocipedi,prestito biciclette,bike sharing" }, "amenity/bicycle_repair_station": { "name": "Stazione di riparazione biciclette", @@ -2890,7 +2975,7 @@ "terms": "cambi,ufficio cambi,cambio,valuta,cambiovaluta" }, "amenity/bus_station": { - "name": "Stazione autobus" + "name": "Stazione /Terminal degli autobus" }, "amenity/cafe": { "name": "Caffè", @@ -2898,7 +2983,7 @@ }, "amenity/car_pooling": { "name": "Condivisione automobile", - "terms": "" + "terms": "car pooling,auto di gruppo,concarreggio,condivisione auto" }, "amenity/car_rental": { "name": "Noleggio auto", @@ -2934,11 +3019,11 @@ }, "amenity/clinic/abortion": { "name": "Clinica per aborti", - "terms": "" + "terms": "clinica abortiva,clinica per l’aborto,ospedale per l’aborto,centro per l’aborto,centro abortivo" }, "amenity/clinic/fertility": { "name": "Centro fecondazione assistita", - "terms": "" + "terms": "clinica fertilità,clinica della fertilità,centro fertilità,centro fecondazione assistita,centro della fecondazione assistita,clinica della fecondazione assistita,clinica fecondazione assistita,centro di procreazione assistita,clinica di procreazione assistita" }, "amenity/clock": { "name": "Orologio", @@ -2985,7 +3070,7 @@ }, "amenity/driving_school": { "name": "Scuola guida", - "terms": "autoscuola,auto*,macchina,guida,scuola" + "terms": "autoscuola,auto,macchina,guida,scuola,scuolaguida,autobus,ambulanze,camion" }, "amenity/embassy": { "name": "Ambasciata", @@ -2996,7 +3081,7 @@ "terms": "Fast Food" }, "amenity/ferry_terminal": { - "name": "Stazione battelli" + "name": "Stazione / Terminal dei battelli" }, "amenity/fire_station": { "name": "Caserma dei pompieri", @@ -3004,7 +3089,7 @@ }, "amenity/food_court": { "name": "Zona ristorazione", - "terms": "" + "terms": "food court,zona ristorazione,area cibo,ristoranti,cibo" }, "amenity/fountain": { "name": "Fontana", @@ -3023,7 +3108,7 @@ "terms": "spandisale,sale,ghiaccio,inverno,salare" }, "amenity/hospital": { - "name": "Area Ospedaliera", + "name": "Area ospedaliera", "terms": "ospedale,clinica,pronto soccorso,servizio sanitario,salute,hospice,ospizio,infermeria,istituzione,casa di cura,casa di riposo,sanatorio,ambulatorio,chirurgia,reparto" }, "amenity/hunting_stand": { @@ -3032,7 +3117,7 @@ }, "amenity/ice_cream": { "name": "Gelateria", - "terms": "gelat*,semifredd*,yogurt,sorbett*,ghiacciol*" + "terms": "gelato,gelati,gelataio,semifreddo,semifreddi,yogurt,sorbetto,sorbetti,ghiacciolo,ghiaccoli,grattachecca,sorbetteria,gelateria" }, "amenity/internet_cafe": { "name": "Internet Cafe", @@ -3048,19 +3133,23 @@ }, "amenity/love_hotel": { "name": "Love Hotel", - "terms": "" + "terms": "hotel per coppie,motel per coppie,hotel a ore,sexy motel" }, "amenity/marketplace": { "name": "Mercato", "terms": "Mercato" }, + "amenity/monastery": { + "name": "Montastero", + "terms": "monastero,abbazia,badia" + }, "amenity/motorcycle_parking": { "name": "Parcheggio moto", "terms": "parcheggio scooter,moto,scooter" }, "amenity/music_school": { "name": "Scuola di musica", - "terms": "" + "terms": "scuola di musica,lezioni di musica,scuola di piano,scuola di violino,scuola di batteria,educazione musicale,lezioni di musica" }, "amenity/nightclub": { "name": "Discoteca", @@ -3083,7 +3172,7 @@ }, "amenity/pavilion": { "name": "Tendone", - "terms": "padiglione,tend*" + "terms": "padiglione,tenda,tende" }, "amenity/pharmacy": { "name": "Farmacia", @@ -3103,7 +3192,7 @@ }, "amenity/place_of_worship/hindu": { "name": "Tempio Hindu", - "terms": "" + "terms": "tempio indiano,tempio indù,tempio induista,mandir" }, "amenity/place_of_worship/jewish": { "name": "Sinagoga", @@ -3115,15 +3204,15 @@ }, "amenity/place_of_worship/shinto": { "name": "Tempio Shintoista", - "terms": "" + "terms": "jinja,tempio giapponese,tempio shintoista,santuario shintoista" }, "amenity/place_of_worship/sikh": { "name": "Tempio Sikh", - "terms": "" + "terms": "tempio indiano,tempio sikh" }, "amenity/place_of_worship/taoist": { "name": "Tempio Taoista", - "terms": "" + "terms": "tempio taoista,tempio daoista,tempio cinese,dàoguàn" }, "amenity/planetarium": { "name": "Planetario", @@ -3151,7 +3240,7 @@ }, "amenity/public_bath": { "name": "Bagni Pubblici", - "terms": "" + "terms": "bagni,bagno,bagno turco,sorgenti calde,terme,bagni termali,onsen,hammam,vasca delle abluzioni,lavacro" }, "amenity/public_bookcase": { "name": "Libreria pubblica", @@ -3163,7 +3252,7 @@ }, "amenity/recycling": { "name": "Cassonetto per raccolta differenziata", - "terms": "" + "terms": "contenitore del riciclaggio,riciclaggio,vetro,plastica,bottiglie,alluminio" }, "amenity/recycling_centre": { "name": "Centro di riciclaggio", @@ -3193,11 +3282,11 @@ }, "amenity/shower": { "name": "Doccia", - "terms": "" + "terms": "docce,doccia,doccia calda,doccia fredda, doccia pubblica" }, "amenity/smoking_area": { "name": "Area fumatori", - "terms": "" + "terms": "area per fumatori,fumare,fumatori,fumatore,sigarette" }, "amenity/social_facility": { "name": "Centro socio-assistenziale", @@ -3258,6 +3347,10 @@ "name": "Distributore automatico di sigarette", "terms": "distributore automatico,macchinetta,sigarette,tabacco,cartine,accendini" }, + "amenity/vending_machine/coffee": { + "name": "Macchinetta del caffè", + "terms": "caffè,cafe,coffee,moka,cappuccino,latte,espresso,tazzina,macchiato" + }, "amenity/vending_machine/condoms": { "name": "Distributore automatico di preservativi", "terms": "distributore automatico,macchinetta,preservativi" @@ -3266,13 +3359,33 @@ "name": "Distributore automatico di bevande", "terms": "distributore automatico,macchinetta,bevande,bottiglie,bottigliette" }, + "amenity/vending_machine/electronics": { + "name": "Macchinetta accessori elettrici", + "terms": "cavi,caricabatterie,cuffie,cuffiette,telefono,smartphone,tablet,usb" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Macchinetta di monete da souvenir", + "terms": "moneta,monete,appiatita,appiattite,schiacciata,schiacciate,allungata,allungate,penny,souvenir,turismo,ricordo,commemorativa,commemorative" + }, "amenity/vending_machine/excrement_bags": { "name": "Distributore automatico di sacchetti per escrementi", "terms": "distributore automatico,macchinetta,cacca,cane" }, "amenity/vending_machine/feminine_hygiene": { "name": "Distributore automatico di prodotti per l'igiene femminile", - "terms": "" + "terms": "preservativo,preservativi,pillola,coppetta,spirale,profilattico,profilattici,tampone,tamponi,assorbente,assorbenti,assorbente interno,assorbenti interni,donna,donne,femmina,femmine,femminilità,sviluppo,mestruazioni,ciclo,mestruale,prodotti di igiene,prodotti per la persona,cura della persona" + }, + "amenity/vending_machine/food": { + "name": "Macchinetta del cibo", + "terms": "cibo,barrette,sandwich,panini,cioccolata,tramezzini" + }, + "amenity/vending_machine/fuel": { + "name": "Pompa della benzina", + "terms": "benzina,petrolio,propano,diesel,benzene,ottani,verde,senza piombo,gpl,metano,bioetanolo,biodiesel," + }, + "amenity/vending_machine/ice_cream": { + "name": "Macchinetta del gelato", + "terms": "gelato,cioccolata,ghiaccoli,ghiacciato,vaniglia,grattachecca,gelati,panna,fragola,pistacchio" }, "amenity/vending_machine/news_papers": { "name": "Distributore automatico di giornali" @@ -3293,6 +3406,10 @@ "name": "Distributore automatico di biglietti per trasporto pubblico", "terms": "distributore automatico,macchinetta,biglietti,bus,metro,tram" }, + "amenity/vending_machine/stamps": { + "name": "Macchinetta dei francobolli", + "terms": "posta,spedizione,invio,francobollo,francobolli,marca da bollo" + }, "amenity/vending_machine/sweets": { "name": "Distributore automatico di snack", "terms": "distributore automatico,macchinetta,snack,cibo" @@ -3303,7 +3420,7 @@ }, "amenity/waste/dog_excrement": { "name": "Cestino per escrementi animali", - "terms": "" + "terms": "cestino deiezioni canine,cacca,popò,cane,cani,deiezioni,sacchetti" }, "amenity/waste_basket": { "name": "Cestino della spazzatura", @@ -3323,7 +3440,7 @@ }, "amenity/watering_place": { "name": "Abbeveratoio", - "terms": "acqua,fontan*,abbever*,animal*" + "terms": "acqua,fontana,fontanella,abbeveratoio,animale,animali" }, "area": { "name": "Area", @@ -3335,11 +3452,11 @@ }, "attraction/amusement_ride": { "name": "Parco divertimenti", - "terms": "" + "terms": "parco a tema,parco tematico,parco di divertimento,parco divertimenti,parco dei divertimenti,giostra,giostre,attrazione,ruota panoramica" }, "attraction/animal": { "name": "Animale", - "terms": "" + "terms": "zoo,zoo safari,safari,parco animali,gabbia,gabbie,leone,leoni,tigre,tigri,orso,orsi,giraffa,giraffe,elefante,elefanti,zebra,zebre" }, "attraction/big_wheel": { "name": "Ruota panoramica", @@ -3362,8 +3479,13 @@ "terms": "" }, "attraction/drop_tower": { + "name": "Torre a caduta libera", "terms": "" }, + "attraction/maze": { + "name": "Labirinto", + "terms": "parco a tema,parco tematico,parco di divertimento,parco divertimenti,parco dei divertimenti,giostra,giostre,attrazione,divertimento,labirinto,dedalo" + }, "attraction/pirate_ship": { "name": "Nave dei pirati", "terms": "" @@ -3481,7 +3603,7 @@ }, "building/bungalow": { "name": "Bungalow", - "terms": "" + "terms": "bungalow,campeggio,alloggio,residence" }, "building/bunker": { "name": "Bunker" @@ -3504,7 +3626,7 @@ }, "building/civic": { "name": "Edificio comunale", - "terms": "" + "terms": "civico,municipale,pubblico,cittadino" }, "building/college": { "name": "Edificio di un College", @@ -3529,9 +3651,17 @@ "building/entrance": { "name": "Entrata/Uscita" }, + "building/farm": { + "name": "Residenza della fattoria", + "terms": "fattoria,casa del fattore,casa del contadino,residenza del contadino,residenza del fattore,dimora del contadino,dimora del fattore,casa colonica" + }, + "building/farm_auxiliary": { + "name": "Edificio della fattoria non abitato", + "terms": "fattoria,casa di campagna,rudere,cascinale,casale,casolare,rustico,casa rurale,capanno,magazzino" + }, "building/garage": { "name": "Garage", - "terms": "Garage" + "terms": "garage,posto auto,auto,box" }, "building/garages": { "name": "Garage", @@ -3567,7 +3697,7 @@ }, "building/mosque": { "name": "Moschea (edificio)", - "terms": "" + "terms": "moschea,moschee,islam,sala della preghiera,preghiera,minareto" }, "building/public": { "name": "Edificio pubblico", @@ -3587,7 +3717,7 @@ }, "building/ruins": { "name": "Edificio in rovina", - "terms": "" + "terms": "rovina,rovine,distrutto,pericolante,pericolo,crollo,crolli,crollato,collassato,collasso" }, "building/school": { "name": "Edificio scolastico", @@ -3599,7 +3729,7 @@ }, "building/service": { "name": "Edificio di servizio", - "terms": "" + "terms": "servizio,stazione di servizio,sottostazione,sala,sala trasformatori,sala pompe,pompa" }, "building/shed": { "name": "Capanno", @@ -3611,7 +3741,7 @@ }, "building/stadium": { "name": "Stadio", - "terms": "" + "terms": "stadio,stadio olimpico,olimpico,stadio di calcio,stadio del ghiaccio,stadio sportivo,sport,sportivo,arena,palazzetto" }, "building/static_caravan": { "name": "Roulotte stazionaria", @@ -3619,7 +3749,7 @@ }, "building/temple": { "name": "Tempio", - "terms": "" + "terms": "tempio,templi,luogo di preghiera" }, "building/terrace": { "name": "Villette a schiera", @@ -3644,9 +3774,12 @@ "name": "Piazzola", "terms": "Piazzola,lotto" }, + "circular": { + "name": "Strada rotonda senza precedenza" + }, "club": { "name": "Club", - "terms": "social*,centr*" + "terms": "sociale,centro,centro sociale,centro aggregazione,centro culturale" }, "craft": { "name": "Mestiere", @@ -3956,7 +4089,7 @@ }, "healthcare": { "name": "Clinica", - "terms": "" + "terms": "clinica,ospedale,clinica ospedaliera,dottori,studio dottori,medicina,aiuto medico,guardia medica,centro igiene mentale,pediatra,medico,oftalmologo,dentista,ginecologo,andrologo,geriatra,medico dello sport" }, "healthcare/alternative": { "name": "Medicina alternativa", @@ -3982,11 +4115,16 @@ "name": "Ospizio", "terms": "" }, + "healthcare/laboratory": { + "name": "Laboratorio medico", + "terms": "laboratorio,clinica,medico,medica,medicina,esame del sangue,esami del sangue,laboratorio medico,controllo medico,controlli medici" + }, "healthcare/midwife": { "name": "Clinica prenatale", "terms": "" }, "healthcare/occupational_therapist": { + "name": "Medico del lavoro", "terms": "" }, "healthcare/optometrist": { @@ -4083,6 +4221,10 @@ "name": "Svincolo autostradale", "terms": "Svincolo autostradale" }, + "highway/passing_place": { + "name": "Slargo per passaggio", + "terms": "slargo,sorpasso,zona,incrocio,area di sorpasso,area di incrocio,slargo di sorpasso,slargo di incrocio" + }, "highway/path": { "name": "Sentiero", "terms": "Sentiero" @@ -4105,7 +4247,7 @@ }, "highway/raceway": { "name": "Circuito (Motoristico)", - "terms": "pista,autodromo,pista automobilistica,pista motoristica,auto*,moto*" + "terms": "pista,autodromo,pista automobilistica,pista motoristica,auto,moto,motori,nascar,corsa,formula uno" }, "highway/residential": { "name": "Residenziale", @@ -4265,7 +4407,7 @@ }, "landuse/aquaculture": { "name": "Acquacoltura", - "terms": "pesci,crostacei,alghe,gamber*,maricoltura,algacoltura" + "terms": "pesci,crostacei,alghe,gambero,gamberi,gamberetti,aragoste,maricoltura,algacoltura,allevamento,molluschi,cozze,ostriche,orate" }, "landuse/basin": { "name": "Bacino", @@ -4336,7 +4478,7 @@ }, "landuse/industrial/slaughterhouse": { "name": "Macello", - "terms": "macello,mattatoio,abbattimento,macelleria,macellaio,gallin*,mucc*,carne,suin*,maial*,animali" + "terms": "macello,mattatoio,abbattimento,macelleria,macellaio,galline,gallina,mucca,mucche,carne,suino,suini,maiale,maiali,tacchino,tacchini,animali" }, "landuse/landfill": { "name": "Discarica", @@ -4376,7 +4518,7 @@ }, "landuse/military/nuclear_explosion_site": { "name": "Sito per esplosioni nucleari", - "terms": "bomba,atomica,poligono,tiro,lancio,missil*,test,nucleare" + "terms": "bomba,atomica,poligono,tiro,lancio,missile,missili,nucleare,test,nucleare" }, "landuse/military/obstacle_course": { "name": "Percorso ad ostacoli", @@ -4388,7 +4530,7 @@ }, "landuse/military/range": { "name": "Poligono di tiro militare", - "terms": "poligono,militare,tiro,lancio,bombe,missil*" + "terms": "poligono,militare,militari,tiro,lancio,bombe,missile,missili,forze militari,forza aerea,forza,guardia,armi,fuoco,marina,fucile,cecchino,cecchini,truppe,truppa,addestramento,guerra,battaglia,battaglione" }, "landuse/military/training_area": { "name": "Area di addestramento", @@ -4442,6 +4584,10 @@ "name": "Sala giochi", "terms": "Videogiochi" }, + "leisure/beach_resort": { + "name": "Stabilimento balnerare", + "terms": "spiaggia,spiaggia attrezzata,bagni,bagno,stabilimento balneare" + }, "leisure/bird_hide": { "name": "osservazione uccelli", "terms": "Capanno di osservazione" @@ -4459,7 +4605,8 @@ "terms": "ballo,danza,jive,swing,tango,valzer,balera" }, "leisure/dancing_school": { - "name": "Scuola di danza" + "name": "Scuola di danza", + "terms": "scuola di danza,danza,lezioni di danza,imparare a danzare,danzare,maestro di danza" }, "leisure/dog_park": { "name": "Area per cani", @@ -4494,6 +4641,7 @@ "terms": "" }, "leisure/fitness_station/horizontal_ladder": { + "name": "Scala orizzontale", "terms": "" }, "leisure/fitness_station/hyperextension": { @@ -4502,7 +4650,7 @@ }, "leisure/fitness_station/parallel_bars": { "name": "Barre Parallele", - "terms": "barr*,esercizi,fitness,palestra,percorso" + "terms": "barra,trazioni,barre,esercizi,fitness,palestra,percorso" }, "leisure/fitness_station/push-up": { "name": "Stazione per piegamenti sulle braccia", @@ -4533,11 +4681,12 @@ "terms": "Campo da golf" }, "leisure/hackerspace": { + "name": "Spazio hacker", "terms": "" }, "leisure/horse_riding": { "name": "Centro equestre", - "terms": "cavall*,equestre,circolo,ippica,club" + "terms": "cavallo,cavalli,equestre,circolo,ippica,club,destrieri,stalla,stalle" }, "leisure/ice_rink": { "name": "Pista di Ghiaccio", @@ -4555,6 +4704,10 @@ "name": "Riserva naturale", "terms": "riserva,natura,parco,naturale" }, + "leisure/outdoor_seating": { + "name": "Posti a sedere all’esterno", + "terms": "giardino,patio,esterno,aperto,all’aperto,cena,caffè,merenda,pub,ristorante,bar,veranda,dehors" + }, "leisure/park": { "name": "Parco", "terms": "lungomare,tenuta,foresta,giardino,prato,verde,terreni,lotto,pascolo,parco,parco giochi,area ricreativa,piazza,giardino pubblico,bosco" @@ -4597,7 +4750,7 @@ }, "leisure/pitch/equestrian": { "name": "Maneggio", - "terms": "dressage,equestre,cavall*,cavalcat*" + "terms": "dressage,equestre,cavallo,cavalli,cavalcata,cavalcate" }, "leisure/pitch/rugby_league": { "name": "Campo di rugby a 13", @@ -4683,6 +4836,10 @@ "name": "Cunicolo", "terms": "adito,miniera,ingresso" }, + "man_made/antenna": { + "name": "Antenna", + "terms": "cella,stazione,trasmissione,trasmissioni,comunicazione,comunicazioni,telecomunicazione,cellulare,cellulari,smartphone,gsm,telefono,telefoni,telefonia,telefonica,radio,televisione,tv,etere" + }, "man_made/breakwater": { "name": "Frangiflutti", "terms": "Frangifrutti" @@ -4734,6 +4891,10 @@ "name": "Torre di osservazione", "terms": "torre,osservazione,osservatorio,piattaforma,osservativa,antincendio,panorama" }, + "man_made/observatory": { + "name": "Osservatorio", + "terms": "osservatorio,astronomico,meteorologico,vulcanologico,osservatorio meteorologico,osservatorio astronomico,radiotelescopio" + }, "man_made/petroleum_well": { "name": "Pozzo petrolifero", "terms": "petrolio,bitume,pozzo" @@ -4858,6 +5019,10 @@ "name": "Brughiera", "terms": "Brughiera" }, + "natural/mud": { + "name": "Fango", + "terms": "fango,fangoso,umido,bagnato,terra bagnata,melmoso,paludoso,palude" + }, "natural/peak": { "name": "Picco", "terms": "culmine,guglia,alpe,apice,cresta,sommità,cima,cocuzzolo,collina,monte,montagna,pinnacolo,estremità,vertice,vetta,piz" @@ -4924,7 +5089,7 @@ }, "noexit/yes": { "name": "Senza uscita", - "terms": "strada,senza,uscita,fine,punto,mort*" + "terms": "strada,senza,uscita,fine,punto,morto,strada senza uscita" }, "office": { "name": "Uffici", @@ -4986,6 +5151,7 @@ "terms": "finanza,finanziaria,fiduciaria,mag" }, "office/forestry": { + "name": "Ufficio forestale", "terms": "" }, "office/foundation": { @@ -5051,6 +5217,7 @@ "terms": "" }, "office/quango": { + "name": "Ufficio di una simil ONG", "terms": "" }, "office/research": { @@ -5119,6 +5286,7 @@ "terms": "Quartiere,Zona" }, "place/plot": { + "name": "Particella catastale", "terms": "" }, "place/quarter": { @@ -5127,7 +5295,7 @@ }, "place/square": { "name": "Piazza", - "terms": "piazz*,spiazzo,slargo" + "terms": "piazza,piazze,piazzale,spiazzo,slargo,largo" }, "place/suburb": { "name": "Sobborgo", @@ -5162,6 +5330,7 @@ "terms": "" }, "playground/horizontal_bar": { + "name": "Barra per trazioni", "terms": "" }, "playground/rocker": { @@ -5225,7 +5394,7 @@ }, "power/plant": { "name": "Area della Centrale elettrica", - "terms": "carbone,gas,generatore,idroelettrico,nucleare,energia,elettric*,centrale" + "terms": "carbone,gas,generatore,idroelettrico,nucleare,energia,elettrica,elittricità,elettrico,centrale,produzione" }, "power/pole": { "name": "Palo della luce", @@ -5251,6 +5420,7 @@ "terms": "Trasformatore" }, "public_transport/linear_platform": { + "name": "Fermata / Banchina del trasporto pubblico", "terms": "" }, "public_transport/linear_platform_aerialway": { @@ -5286,9 +5456,11 @@ "terms": "" }, "public_transport/linear_platform_trolleybus": { + "name": "Fermata / Banchina del filobus", "terms": "" }, "public_transport/platform": { + "name": "Fermata / Banchina del trasporto pubblico", "terms": "" }, "public_transport/platform_aerialway": { @@ -5324,9 +5496,11 @@ "terms": "" }, "public_transport/platform_trolleybus": { + "name": "Fermata / Banchina del filobus", "terms": "" }, "public_transport/station": { + "name": "Stazione del trasporto pubblico", "terms": "" }, "public_transport/station_aerialway": { @@ -5342,7 +5516,7 @@ "terms": "" }, "public_transport/station_light_rail": { - "name": "Stazione del tram", + "name": "Stazione della metropolitana di superficie", "terms": "" }, "public_transport/station_monorail": { @@ -5366,15 +5540,19 @@ "terms": "" }, "public_transport/station_trolleybus": { + "name": "Stazione / Terminal dei filobus", "terms": "" }, "public_transport/stop_area": { + "name": "Area della fermata del trasporto pubblico", "terms": "" }, "public_transport/stop_position": { + "name": "Punto di stop del trasporto pubblico", "terms": "" }, "public_transport/stop_position_aerialway": { + "name": "Punto di stop del trasporto a fune", "terms": "" }, "public_transport/stop_position_bus": { @@ -5386,12 +5564,15 @@ "terms": "" }, "public_transport/stop_position_light_rail": { + "name": "Punto di stop della metropolitana di superficie", "terms": "" }, "public_transport/stop_position_monorail": { + "name": "Punto di stop della monorotaia", "terms": "" }, "public_transport/stop_position_subway": { + "name": "Punto di stop della metropolitana", "terms": "" }, "public_transport/stop_position_train": { @@ -5399,9 +5580,11 @@ "terms": "" }, "public_transport/stop_position_tram": { + "name": "Punto di stop del tram", "terms": "" }, "public_transport/stop_position_trolleybus": { + "name": "Punto di stop del filobus", "terms": "" }, "railway": { @@ -5412,7 +5595,8 @@ "terms": "Ferrovia abbandonata" }, "railway/buffer_stop": { - "terms": "" + "name": "Respingente", + "terms": "respingente,stop,ammortizzatore,fine linea" }, "railway/crossing": { "name": "Passaggio a livello (sentiero)", @@ -5438,8 +5622,8 @@ "terms": "passaggio a livello,incrocio ferroviario,attraversamento" }, "railway/light_rail": { - "name": "Tram", - "terms": "" + "name": "Metropolitana di superficie", + "terms": "tranvia,metrotranvia,metropolitana,metropolitana di superficie" }, "railway/milestone": { "name": "Pietra miliare ferroviaria", @@ -5447,7 +5631,7 @@ }, "railway/miniature": { "name": "Ferrovia in miniatura", - "terms": "" + "terms": "trenino,treno in miniatura,scartamento ridotto,scartamento minimo,ferrovia,binario" }, "railway/monorail": { "name": "Monorotaia", @@ -5485,7 +5669,7 @@ }, "railway/train_wash": { "name": "Lavaggio treni", - "terms": "" + "terms": "lavaggio,pulizia,treni,treno" }, "railway/tram": { "name": "Tram", @@ -5519,7 +5703,7 @@ }, "shop/anime": { "name": "Negozio di manga", - "terms": "Negozio di anime" + "terms": "negozio di anime,anime,manga,Giappone,cosplay,figurine,fumetti,costumi" }, "shop/antiques": { "name": "Antiquario", @@ -5531,7 +5715,7 @@ }, "shop/art": { "name": "Negozio di opere d'arte", - "terms": "opere d'arte,quadri,sculture,galleria,art*" + "terms": "opere d'arte,quadri,sculture,galleria,arte,esibizione,mostra" }, "shop/baby_goods": { "name": "Negozio di prodotti per l'infanzia", @@ -5733,7 +5917,7 @@ }, "shop/gas": { "name": "Bombolaio", - "terms": "gas,bombol*,gpl,metano,lpg,cng,gas naturale,propano" + "terms": "gas,bombole,bombola,gpl,metano,lpg,cng,gas naturale,propano,ricarica bombole,ricarica" }, "shop/gift": { "name": "Negozio souvenir", @@ -5751,6 +5935,10 @@ "name": "Ferramenta", "terms": "Negozio di Ferramenta" }, + "shop/health_food": { + "name": "Prodotti per il benessere", + "terms": "prodotti genuini,benessere,negozio di prodotti biologici,negozio di prodotti per la salute,prodotti per la salute" + }, "shop/hearing_aids": { "name": "Negozio di apparecchi acustici", "terms": "Apparecchi acustici,Negozio di apparecchi acustici" @@ -5777,7 +5965,7 @@ }, "shop/kiosk": { "name": "Chiosco", - "terms": "" + "terms": "chiosco,edicola,tabacchi,dolciumi,snack" }, "shop/kitchen": { "name": "Negozio di cucine", @@ -5793,7 +5981,7 @@ }, "shop/locksmith": { "name": "Fabbro", - "terms": "" + "terms": "fabbro,ferraio,serrature,chiavi,ferro battuto" }, "shop/lottery": { "name": "Ricevitoria", @@ -5865,12 +6053,16 @@ }, "shop/perfumery": { "name": "Profumeria", - "terms": "profum*" + "terms": "profumi,profumo,profumeria" }, "shop/pet": { "name": "Negozio di animali", "terms": "Negozio di animali" }, + "shop/pet_grooming": { + "name": "Toelettatura per animali", + "terms": "cane,gatto,cani,gatti,toilette,toletta,tolettatura,toelettatura,parrucchiere,unghie,shampoo," + }, "shop/photo": { "name": "Fotografo", "terms": "fotografia,fotografico,fotografo,foto,diapositive,rullini,macchine fotografiche" @@ -5912,7 +6104,7 @@ "terms": "Cartoleria" }, "shop/storage_rental": { - "name": "Noleggio", + "name": "Box a noleggio", "terms": "noleggio" }, "shop/supermarket": { @@ -5937,7 +6129,7 @@ }, "shop/tiles": { "name": "Negozio di piastrelle", - "terms": "" + "terms": "piastrelle,mattonelle,pavimento,pavimenti,ceramica,pietra" }, "shop/tobacco": { "name": "Tabacchino", @@ -5948,7 +6140,8 @@ "terms": "Negozio giocattoli" }, "shop/trade": { - "terms": "" + "name": "Materiali da edilizia", + "terms": "materiali edilizi,edilizia,mattoni,cemento,stucco,gesso" }, "shop/travel_agency": { "name": "Agenzia di viaggi", @@ -5979,7 +6172,7 @@ }, "shop/watches": { "name": "Negozio di orologi", - "terms": "orolog*" + "terms": "orologio,orologi,negozio orologi,sveglia,sveglie,orologio a cipolla,cronografo,cronometro" }, "shop/water_sports": { "name": "Negozio per sport acquatici", @@ -6039,10 +6232,10 @@ }, "tourism/gallery": { "name": "Galleria d'arte", - "terms": "opere d'arte,quadri,sculture,galleria,fotografie,dipinti,art*" + "terms": "opere d'arte,quadri,sculture,galleria,foto,fotografia,fotografie,dipinti,arte,artistica,esibizione,mostra" }, "tourism/guest_house": { - "name": "Affittacamere/Bed & Breakfast", + "name": "Bed & Breakfast", "terms": "B&B,Bed & Breakfast,Bed and Breakfast" }, "tourism/hostel": { @@ -6089,13 +6282,17 @@ "name": "Parco a tema", "terms": "Parco a tema" }, + "tourism/trail_riding_station": { + "name": "Stazione di sosta per cavalli", + "terms": "stazione,stop,sosta,cavallo,cavalli,cavalcatura,rifornimento,abbeveratoio,pausa,riposo" + }, "tourism/viewpoint": { "name": "Punto panoramico", "terms": " Punto panoramico " }, "tourism/wilderness_hut": { "name": "Bivacco", - "terms": "" + "terms": "bivacco,baito,struttura incustodita,casetta,piccolo rifugio" }, "tourism/zoo": { "name": "Zoo", @@ -6139,7 +6336,7 @@ }, "traffic_calming/table": { "name": "Dosso", - "terms": "" + "terms": "veloce,lento,piano,velocità,dosso,dossi,rallentatore,tabellone,tabella,cuscino sonoro,banda sonora,cuscini sonori,bande sonore" }, "type/boundary": { "name": "Confine", @@ -6174,15 +6371,19 @@ }, "type/restriction/only_left_turn": { "name": "Obbligo di svolta a sinistra", - "terms": "obbligo,curva,sinistra" + "terms": "svolta a sinistra,divieto di svolta a destra,divieto di andare diritto,obbligo" }, "type/restriction/only_right_turn": { "name": "Obbligo di svolta a destra", - "terms": "obbligo,curva,destra" + "terms": "svolta a destra,divieto di svolta sinistra,divieto di andare diritto,obbligo" }, "type/restriction/only_straight_on": { - "name": "Direzione obbligatoria dritto", - "terms": "obbligo,dritto,diritto,divieto di svolta" + "name": "Obbligo di andare diritto", + "terms": "diritto,dritto,proseguire diritto,obbligo,divieto di svolta" + }, + "type/restriction/only_u_turn": { + "name": "Obbligo di inversione di marcia", + "terms": "Svolta a U,inversione,inversione di marcia,tornare indietro,torna indietro,curva a U" }, "type/route": { "name": "Percorso", @@ -6217,8 +6418,8 @@ "terms": "cavallo,strada,ippica,sentiero,equitazione" }, "type/route/light_rail": { - "name": "Linea tramviaria", - "terms": "" + "name": "Linea della metropolitana di superficie", + "terms": "tranvia,metrotranvia,leggera,metro leggera,metropolitana leggera,linea tranvia,linea del tranvia" }, "type/route/pipeline": { "name": "Condotta", @@ -6226,7 +6427,7 @@ }, "type/route/piste": { "name": "Pista da sci", - "terms": "" + "terms": "pista,piste,pista da sci,piste da sci,rossa,blu,nera,pista blu,pista rossa,pista nera,discesa" }, "type/route/power": { "name": "Linea elettrica", @@ -6238,7 +6439,7 @@ }, "type/route/subway": { "name": "Linea metropolitana", - "terms": "" + "terms": "metro,metropolitana,subway,linea,linea della metro" }, "type/route/train": { "name": "Linea ferroviaria", @@ -6345,7 +6546,7 @@ "attribution": { "text": "Termini & Feedback" }, - "description": "Immagini dei confini e data di riferimento. Le etichette vengono mostrate a livelli di zoom maggiori o uguali a 14.", + "description": "Confini delle immagini e data di acquisizione. Le etichette appaiono a livelli di ingrandimento 13 e successivi.", "name": "DigitalGlobe Premium Imagery Vintage" }, "DigitalGlobe-Standard": { @@ -6359,7 +6560,7 @@ "attribution": { "text": "Termini & Feedback" }, - "description": "Immagini dei confini e data di riferimento. Le etichette vengono mostrate a livelli di zoom maggiori o uguali a 14.", + "description": "Confini delle immagini e data di acquisizione. Le etichette appaiono a livelli di ingrandimento 13 e successivi.", "name": "DigitalGlobe Standard Imagery Vintage" }, "EsriWorldImagery": { @@ -6443,6 +6644,10 @@ "description": "Giallo = Dati pubblici forniti da enti statali Statunitensi.", "name": "TIGER Roads 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "Strada: bordo verde = non classificata. Bordo marrone = carrareccia. Manto in ghiaia = colore diriempimento marrone chiaro, asfaltato = nero, pavimentato = grigio, terra = bianco, cemento = blu, erboso = verde. Stagionale = con barre bianche", + "name": "Strade forestali U.S. (sovrapposta)" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, collaboratori OpenStreetMap, CC by-SA 3.0" @@ -6477,7 +6682,7 @@ "attribution": { "text": "basemap.at" }, - "description": "Basemap of Austria, basati su dati governativi.", + "description": "mappa di base, ottenuta da dati del governo.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6539,7 +6744,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Map tiles by Stamen Design, under CC BY 3.0" + "text": "Tasselli della mappa di Stamen Design con licenza CC-BY 3.0. Dati di OpenStreetMap com licenza ODbL" }, "name": "Stamen Terrain" }, @@ -6555,6 +6760,663 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "cape-coast-youthmappers": { + "name": "Giovani mappatori dell’università di Cape Coast", + "description": "Seguici su Twitter: {url}", + "extendedDescription": "Questo è il punto d’incontro del capitolo dei Giovani Mappatori dell’università di Cape Coast in Ghana. Amiamo le mappe, i dati aperti e aiutare i più vulnerabili." + }, + "osm-gh-facebook": { + "name": "OpenStreetMap del Ghana su Facebook", + "description": "Gruppo Facebook per persone interessate a OpenStreetMap.", + "extendedDescription": "Mappatori nella comunità del Ghana, promuoviamo OpenStreetMap e i progetti della squadra umanitaria di OpenStreetMap (HOT) in Ghana. Unisciti a noi." + }, + "osm-gh-twitter": { + "name": "OpenStreetMap del Ghana su Twitter", + "description": "Seguici su Twitter: {url}" + }, + "talk-gh": { + "name": "Mailinglist talk-gh", + "description": "Talk-gh è la mailinglist ufficiale della comunità OSM del Ghana." + }, + "osm-mg-facebook": { + "name": "Gruppo Facebook di OpenStreetMap del Madagascar", + "description": "Gruppo Facebook malgascio per persone interessate a OpenStreetMap." + }, + "talk-mg": { + "name": "Mailinglist talk-mg", + "description": "Un posto dove i collaboratori, le comunità e gli utenti di OpenStreetMap del Madagascar possono condividere e discutere." + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap del Bangladesh", + "description": "Migliora OpenStreetMap nel Bangladesh", + "extendedDescription": "Stai mappando nel Bangladesh? Hai domande o vuoi unirti alla comunità locale? Unisciti a noi su {Url}. Tutti sono i benvenuti!" + }, + "OSM-India-facebook": { + "name": "OpenStreetMap India - mappatura di quartiere partecipativa", + "description": "Miglioriamo OpenStreetMap in India", + "extendedDescription": "Mappi in India? Hai domande o vuoi connetterti alla comunità locale? Unisciti a noi su {url}. Tutti sono i benvenuti!", + "events": { + "sotmasia2018": { + "name": "State of the Map Asia 2018", + "description": "Unisciti a State of the Map Asia di OpenStreetMap, un evento che si terrà in India nel 2018", + "where": "Indian Institute of Management, Bangalore, India" + } + } + }, + "OSM-india-mailinglist": { + "name": "Mailinglist di OpenStreetMap dell’India", + "description": "Talk-in è la mailinglist ufficiale della comunità indiana" + }, + "OSM-india-twitter": { + "name": "Twitter di OpenStreetMap dell’India", + "description": "Siamo solo ad un cinguettio di distanza: {url}" + }, + "OSM-India-Puducherry-Facebook": { + "name": "Movimento del software e hardware liberi su Facebook", + "description": "Pagina Facebook di FSHM per conoscere gli eventi e le attività della comunità", + "extendedDescription": "FSHM organizza eventi che riguardano il software e l’hardware liberi, la tecnologia, l’attivismo e OpenStreetMap. La sua pagina Facebook è il posto migliore per rimanere in contatto con i suoi eventi." + }, + "OSM-India-Puducherry-Matrix": { + "name": "Movimento del software e hardware liberi su Matrix", + "description": "Gruppo FSHM di Riot per discutere, condividere e aggiornare le attività di mappatura, gli eventi si terranno nei dintorni di Pondicherry", + "extendedDescription": "I membri della comunità FSHM condividono le loro esperienze / novità sulla mappatura in OSM attraverso il gruppo Riot.im, questo gruppo è anche usato per discutere di argomenti relativi al software e all’hardware liberi, la tecnologia e l’attivismo." + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap dell’Indonesia", + "description": "Migliora OpenStreetMap in Indonesia", + "extendedDescription": "Stai mappando in Indonesia? Hai domande o vuoi connetterti alla comunità locale? Unisci a a noi su {Url}. Tutti sono i benvenuti!" + }, + "OSM-japan-facebook": { + "name": "Comunità OpenStreetMap del Giappone", + "description": "Mappatori e utenti OpenStreetMap del Giappone" + }, + "OSM-japan-mailinglist": { + "name": "Mailinglist di OpenStreetMap Giappone", + "description": "Talk-ja è la mailinglist ufficiale della comunità giapponese" + }, + "OSM-japan-twitter": { + "name": "Twitter OpenStreetMap Giappone", + "description": "Hashtag su Twitter: {url}" + }, + "OSM-korea-telegram": { + "name": "Canale Telegram di OSM della Corea", + "description": "Canale non ufficiale per discutere e condividere per i contribuenti, le comunità e gli utenti di OpenStreetMap in Corea." + }, + "OSM-MY-forum": { + "name": "Forum web di OpenStreetMap della Malaysia", + "description": "Forum web ufficiale di OpenStreetMap della Malaysia" + }, + "OSM-MY-matrix": { + "name": "Canale Riot di OpenStreetMap della Malaysia", + "description": "Tutti i mappatori sono i benvenuti! Iscriviti su {signupUrl}" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap della Mongolia", + "description": "Migliora OpenStreetMap in Mongolia", + "extendedDescription": "Stai mappando in Mongolia? Hai domande o vuoi connetterti alla comunità locale? Unisci a noi su {Url}. Tutti sono i benvenuti!" + }, + "OSM-MMR-facebook": { + "name": "OpenStreetMap Myanmar", + "description": "Contribuisci a migliorare OpenStreetMap in Myanmar", + "extendedDescription": "Mappi in Myanmar? Hai domande oppure vuoi connetterti alla comunità di quaggiù? Unisciti a noi all’indirizzo {Url}. Tutti sono i benvenuti!" + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap del Nepal", + "description": "Migliora OpenStreetMap in Nepal", + "extendedDescription": "Stai mappando in Nepal? Hai domande o vuoi connetterti alla comunità locale? Unisciti a noi su {Url}. Tutti sono i benvenuti!" + }, + "OSM-PH-facebook": { + "name": "Facebook di OpenStreetMap delle Filippine", + "description": "Benvenuta/o in OpenStreetMap delle Filippine, un posto dove i nostri amici filippini vengono incoraggiati a contribuire al progetto OpenStreetMap." + }, + "OSM-PH-mailinglist": { + "name": "Mailing list Talk-ph", + "description": "Una mailinglist per discutere OpenStreetMap nelle Filippine" + }, + "OSM-PH-slack": { + "name": "Slack di OpenStreetMap delle Filippine", + "description": "Tutti sono i benvenuti! Registrati su {signupUrl}" + }, + "OSM-PH-telegram": { + "name": "Telegram di OpenStreetMap delle Filippine", + "description": "Non ufficiale, comunità locale su Telegram di utenti OpenStreetMap e amici nelle Filippine." + }, + "OSM-RU-forum": { + "name": "Forum di OpenStreetMap della Russia", + "description": "Forum web di OpenStreetMap della Russia" + }, + "OSM-RU-telegram": { + "name": "Telegram di OpenStreetMap della Russia", + "description": "Chat Telegram di OpenStreetMap della Russia" + }, + "OSM-LKA-facebook": { + "name": "OpenStreetMap dello Sri Lanka", + "description": "Migliora OpenStreetMap nello Sri Lanka", + "extendedDescription": "Stai mappando lo Sri Lanka? Hai domande o vuoi connetterti alla comunità locale? Unisciti a noi su {Url}. Tutti sono i benvenuti!" + }, + "OSM-TW-facebook": { + "name": "Comunità di OpenStreetMap di Taiwan", + "description": "Gruppo di Facebook per mappatori e utenti OpenStreetMap che vogliono discutere su argomenti inerenti Taiwan." + }, + "OSM-TW-mailinglist": { + "name": "Mailinglist di OpenStreetMap di Taiwan", + "description": "Talk-tw è la mailinglist ufficiale delle comunità per discutere su argomenti inerenti Taiwan." + }, + "at-forum": { + "name": "Forum web di OpenStreetMap dell’Austria", + "description": "Il forum ufficiale di OpenStreetMap per fare domande sull’Austria e nei suoi dintorni." + }, + "at-mailinglist": { + "name": "Mailinglist talk-at", + "description": "Talk-at è la mailinglist ufficiale della comunità austriaca di OpenStreetMap" + }, + "at-twitter": { + "name": "Twitter di OpenStreetMap dell’Austria", + "description": "OpenStreetMap dell’Austria su Twitter: {url}" + }, + "osmgraz-meetup": { + "name": "Comunità OSM di Graz Meetup", + "description": "Meetup mensile della comunità OpenStreetMap in Graz" + }, + "osmgraz-twitter": { + "name": "Comunità OSM di Graz su Twitter", + "description": "Comunità OpenStreetMap in Graz su Twitter" + }, + "osm-at": { + "name": "OpenStreetMap dell’Austria", + "description": "La piattaforma per informazioni su OpenStreetMap in Austria" + }, + "be-facebook": { + "name": "Comunità belga di OpenStreetMap", + "description": "Facebook di mappatori e OpenStreetMap del Belgio" + }, + "be-forum": { + "name": "Forum belga di OpenStreetMap", + "description": "Forum web belga di OpenStreetMap" + }, + "be-irc": { + "name": "Canale IRC di OpenStreetMap del Belgio", + "description": "Entra in #osmbe su irc.oftc.net (porta 6667)", + "extendedDescription": "Entra in #osmbe su irc.oftc.net (porta 6667), è unito al canale di chat Matrix" + }, + "be-mailinglist": { + "name": "Mailinglist talk-be", + "description": "Talk-be è la mailinglist ufficiale della comunità OSM belga" + }, + "be-matrix": { + "name": "Canale Riot di OpenStreetMap belga", + "description": "Tutti i mappatori sono i benvenuti! Iscriviti su {signupUrl}", + "extendedDescription": "Esistono diversi canali, per principianti, canali a tema, per discutere di landuse e di problemi degli sviluppatori." + }, + "be-meetup": { + "name": "Meetup di OpenStreetMap del Belgio", + "description": "Incontri di persona per chiunque sia interessato a OpenStreetMap.", + "extendedDescription": "Incontrarsi di persona è una grande occasione per conoscere altri mappatori, fare domande e imparare un sacco di cose. I nuovi utenti sono in special modo i benvenuti!" + }, + "be-twitter": { + "name": "Twitter di OpenStreetMap del Belgio", + "description": "OSM belga su Twitter: {url}" + }, + "byosm": { + "name": "OpenStreetMap della Bielorussia", + "description": "Chat telegram di OpenStreetMap della Bielorussia" + }, + "talk-cz-mailinglist": { + "name": "Mailinglist Talk-cz", + "description": "Talk-cz è la mailinglist ufficiale della comunità ceca" + }, + "de-berlin-mailinglist": { + "name": "Mailinglist di Berlino", + "description": "Questa è la mailinglist per la comunità OSM di Berlino" + }, + "de-berlin-meetup": { + "name": "Meetup di OpenStreetMap di Berlino-Brandeburgo", + "description": "Mappatori e utenti di OpenStreetMap dell’area berlinese" + }, + "de-berlin-telegram": { + "name": "@osmberlin su Telegram", + "description": "Chat Telegram di OpenStreetMap di Berlino" + }, + "de-berlin-twitter": { + "name": "Twitter di OpenStreetMap di Berlino", + "description": "seguici su Twitter: {url}" + }, + "de-forum": { + "name": "Forum OpenStreetMap della Germania", + "description": "Forum web di OpenStreetMap della Germania" + }, + "de-irc": { + "name": "Canale IRC di OpenStreetMap della Germania", + "description": "Entra in #osm-de su irc.oftc.net (porta 6667)" + }, + "de-mailinglist": { + "name": "Mailinglist talk-de", + "description": "Talk-de è la mailinglist ufficiale della comunità OSM della Germania" + }, + "osm-de": { + "name": "OpenStreetMap della Germania", + "description": "La piattaforma d’informazione per OpenStreetMap in Germania" + }, + "OSM-ES-mailinglist": { + "name": "Mailinglist talk-es", + "description": "Una mailinglist per discutere su OpenStreetMap della Spagna" + }, + "OSM-ES-telegram": { + "name": "@OSMes su Telegram", + "description": "Chat Telegram di OpenStreetMap della Spagna" + }, + "fr-facebook": { + "name": "Pagina Facebook di OpenStreetMap della Francia", + "description": "Pagina Facebook di OpenStreetMap della Francia" + }, + "fr-forum": { + "name": "Forum web di OpenStreetMap della Francia", + "description": "Forum web di OpenStreetMap della Francia" + }, + "fr-irc": { + "name": "Canale IRC di OpenStreetMap della Francia", + "description": "Entra in #osm-fr su irc.oftc.net (porta 6667)" + }, + "fr-mailinglist": { + "name": "Mailinglist talk-fr", + "description": "Mailinglist talk-fr" + }, + "fr-twitter": { + "name": "OpenStreetMap della Francia su Twitter", + "description": "OpenStreetMap della Francia su Twitter: {url}" + }, + "Nottingham-OSM-pub-meetup": { + "name": "Meetup mensili pubblici di Nottingham e East Midlands", + "description": "Incontri sociali per i mappatori e utenti delle East Midlands", + "extendedDescription": "Un gruppo che da marzo 2011 si riunisce, inizialmente a Nottingham, più recentemente a Derby e di tanto in tanto da qualche altra parte nelle East Midlands. Si tratta di incontri sociali, ma sono anche dei momenti eccellenti per venire a fare delle domande specifiche su OSM nella nostra zona o in generale. Nei mesi estivi facciamo solitamente delle sessioni leggere di mappatura nei dintorni del punto d’incontro. Il gruppo ha come interesse speciale quello di mappare le precedenze nelle strade pubbliche e di tanto in tanto ci incontriamo proprio per questo scopo." + }, + "gb-mailinglist": { + "name": "Mailinglist talk-gb", + "description": "Talk-gb è la principale piattaforma di comunicazione della comunità OSM britannica (Irlanda del Nord inclusa)" + }, + "mappa-mercia-group": { + "name": "Gruppo locale Mappa Mercia", + "description": "Un posto per gli appassionati di OpenStreetMap nelle Midlands", + "extendedDescription": "Mappa Mercia è un progetto per sviluppare OpenStreetMap nelle West Midlands nel Regno Unito. Organizziamo eventi per la comunità, lezioni e supportiamo gli enti locali che vogliano rendere aperti i dati in loro possesso." + }, + "gb-irc": { + "name": "Canale IRC di OpenStreetMap del Regno Unito", + "description": "Entra in #osm-gb su irc.oftc.net (porta 6667)", + "extendedDescription": "Entra in #osm-gb su irc.oftc.net (porta 6667), cerca di essere paziente e aspetta almeno qualche minuto se chiedi qualcosa" + }, + "it-facebook": { + "name": "Facebook di OpenStreetMap dell’Italia", + "description": "Unisciti alla comunità italiana di OpenStreetMap su Facebook" + }, + "it-irc": { + "name": "Canale IRC di OpenStreetMap dell’Italia", + "description": "Entra in #osm-it su irc.oftc.net (porta 6667)" + }, + "it-mailinglist": { + "name": "Mailinglist talk-it", + "description": "Talk-it è la mailinglist ufficiale della comunità OSM italiana" + }, + "it-twitter": { + "name": "Twiter di OpenStreetMap dell’Italia", + "description": "Seguici su Twitter all’indirizzo {url}" + }, + "OSM-Rome-meetup": { + "name": "Incontro Mappatori Romani", + "description": "Miglioriamo OpenStreetMap nell’area attorno a Roma", + "extendedDescription": "Puntiamo ad aiutare le persone a discutere e a condividere le loro conoscenze nell’utilizzo dei dati geografici, in particolar modo quelli di OpenStreetMap, in quello di software geo-spaziale che gestisce, modifica e visualizza dati geografici e promuoviamo il suo uso nel Lazio." + }, + "South-Tyrol-Mailing-List": { + "name": "Mailinglist di OpenStreetMap del Sud Tirolo", + "description": "Mailinglist di OpenStreetMap Italia dell’area del Sud Tirolo," + }, + "talk-it-lazio": { + "name": "OpenStreetMap Italy del Lazio", + "description": "Tutti sono i benvenuti! Iscriviti su {signupUrl}", + "extendedDescription": "Mailinglist di Roma e del Lazio." + }, + "Trentino-Mailing-List": { + "name": "Mailinglist di OpenStreetMap per il Trentino", + "description": "Mailinglist di OpenStreetMap Italia del Trentino" + }, + "no-forum": { + "name": "Forum web di OpenStreetMap della Norvegia", + "description": "Forum web di OpenStreetMap della Norvegia" + }, + "no-irc": { + "name": "OpenStreetMap della Norvegia su IRC", + "description": "Stanza della chat per mappatori e utenti di OpenStreetMap, sviluppatori ed appassionati in Norvegia" + }, + "no-mailinglist": { + "name": "Mailinglist di OpenStreetMap della Norvegia", + "description": "Mailinglist per mappatori e utenti di OpenStreetMap, sviluppatori ed appassionati in Norvegia" + }, + "OSM-PL-facebook-group": { + "name": "Gruppo Facebook di OpenStreetMap della Polonia", + "description": "Gruppo per mappatori e utenti di OpenStreetMap in Polonia" + }, + "OSM-PL-forum": { + "name": "Forum web di OpenStreetMap della Polonia", + "description": "Forum web della comunità polacca di OpenStreetMap" + }, + "osm-se": { + "name": "OpenStreetMap.se", + "description": "Offriamo servizi OSM e informazioni per la comunità locale in Svezia" + }, + "se-facebook": { + "name": "Facebook di OpenStreetMap della Svezia", + "description": "OpenStreetMap della Svezia su Facebook" + }, + "se-forum": { + "name": "Forum web di OpenStreetMap della Svezia", + "description": "Forum web di OpenStreetMap della Svezia" + }, + "se-irc": { + "name": "Canale IRC di OpenStreetMap della Svezia", + "description": "Entra in #osm.se su irc.oftc.net (porta 6667)" + }, + "se-mailinglist": { + "name": "Mailinglist talk-se", + "description": "Una mailinglist per discutere di OpenStreetMap in Svezia" + }, + "se-twitter": { + "name": "OpenStreetMap della Svezia su Twitter", + "description": "Seguici su Twitter: {url}" + }, + "OSM-CA-Slack": { + "name": "Slack di OSM-CA", + "description": "Tutti sono i benvenuti! Iscriviti su {signupUrl}." + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap di Vancouver", + "description": "Mappatori e utenti OpenStreetMap di Vancouver, area Colombia Britannica" + }, + "Bay-Area-OpenStreetMappers": { + "name": "OpenStreetMappers a Bay Area", + "description": "Migliora OpenStreetMap a Bay Area", + "extendedDescription": "Il nostro gruppo vuole far crescere la community OpenStreetMap qui nella zona di Bay Area. I nostri eventi sono aperti a chiunque, dall'appassionato di open source, al ciclista, al professionista GIS, al geocacher e oltre. Qualunque persona appassionata di mappe, cartografia o analisi geografica è la benvenuta a unirsi al nostro gruppo e partecipare ai nostri eventi. " + }, + "Central-Pennsylvania-OSM": { + "name": "OSM Pennsylvania Centrale", + "description": "Community online di mapping con base presso State College, PA" + }, + "Code-for-San-Jose-Slack": { + "name": "Slack di Programmare per San Jose", + "description": "Tutti sono benvenuti! Iscriviti su {signupUrl}, e dopo collegati al canale \"osm su IRC." + }, + "Dallas-Fort-Worth-OSM": { + "name": "OSM Dallas-Fort Worth", + "description": "Gruppo OpenStreetMap di Dallas-Fort Worth", + "extendedDescription": "Dallas, Fort Work, e tutte le città limitrofe abbondano di persone creative ed esperte di tecnologia. La nostra vision è quella di cercare in questo gruppo nuove vie di utilizzare le fantastiche risorse offerte da OSM." + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "Meetup per appassionati di mappe nella zona di Philadelphia", + "extendedDescription": "Geophilly unisce sviluppatori, geografi, data geek, appassionati open source, civic hacker e drogati di mappe nella comune passione passione per le mappe e delle storie che possono raccontare. Se usate delle mappe nel vostro lavoro o se voltete soltanto saperne di più, questo è il meetup adatto per voi! I nostri eventi mirano a essere aperti, amichevoli, educativi e sociali, e spaziano dalle piacevoli chiacchierate agli incontri lampo e perfino agli workshop. Venite a creare una community geospaziale variegata e ispirativa con noi a Philadelphia!" + }, + "MapMinnesota": { + "name": "MapMinnesota", + "description": "Mappatori e appassionati di OpenStreetMap nell’area delle Twin Cities.", + "extendedDescription": "Un punto di contatto per gli appassionati di OpenStreetMap del Minnesota e delle Twin Cities!" + }, + "Mapping-DC-meetup": { + "name": "Mappando DC", + "description": "Migliora OpenStreetMap nell'area di DC", + "extendedDescription": "Siamo un gruppo di mappatori volontari con l'obiettivo di migliorare OpenStreetMap nell'area di DC. Puntiamo anche a insegnare agli altri l'ecosistema OSM, l'analisi dei dati, la cartografia e GIS. Ci raduniamo ogni altro mese ai meetup per concentrarci su una zona della nostra città." + }, + "Maptime-ME-meetup": { + "name": "MaptimeME", + "description": "Mappatori e utenti OpenStreetMap nei dintorni di Portland, Maine", + "extendedDescription": "Maptime è letteralmente tempo per la mappatura. La nostra missione è quella di aprire le porte della cartografia a chiunque sia interessato, creando un posto e dei momenti per l’apprendimento collaborativo, l’esplorazione, la creazione di mappe usando strumenti e tecnologie per la mappatura." + }, + "OpenCleveland-meetup": { + "name": "Open Cleveland", + "description": "Miglioriamo OpenStreetMap nell’area di Cleveland", + "extendedDescription": "Open Geo Cleveland mira a diventare una risorsa per le persone che vogliano discutere e condividere le proprie conoscenze su come utilizzare i dati geografici liberi, nella fattispecie OpenStreetMap, e di software geo-spaziale aperto che gestisce, modifica e mostra su schermo dati geografici, e spingiamo per il suo uso nell’Ohio del nord-est. Siamo anche un chapter di maptime =)" + }, + "OSM-Boston": { + "name": "OpenStreetMap di Boston", + "description": "Mappatori e utenti di OpenStreetMap che risiedono nell’area di Boston", + "extendedDescription": "OpenStreetMap è una mappa libera e aperta, simile ad una mappa del mondo in stile Wikipedia, con centinaia di migliaia di contributi ogni giorno da persone come te. Modificare la mappa è semplice e divertente! Unisciti a noi sia da casa che all’aperto, nel nostro obiettivo di creare la miglior mappa dell’area di Boston e del resto del mondo!" + }, + "OSM-Central-Salish-Sea": { + "name": "OpenStreetMap, mar dei Salish centrale", + "description": "Mappatori e utenti di OpenStreetMap nei dintorni di Mount Vernon, nello stato di Washington", + "extendedDescription": "OpenStreetMap è la mappa del mondo creata da persone come te. È una mappa che tu puoi costruire e che è gratis come Wikipedia. Vai su osm.org per altre informazioni. Noi ci riuniamo sempre per parlare di mappe, mappare e divertirci!" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "Gruppo utenti OpenStreetMap di Chattanooga" + }, + "OSM-Colorado": { + "name": "OpenStreetMap del Colorado", + "description": "Mappatori e utenti OpenStreetMap dello stato del Colorado, USA", + "extendedDescription": "OpenStreetMap (OSM) del Colorado è una collaborazione locale di persone interessate a usare le proprie forze per creare mappe libere. Noi incoraggiamo i nostri mappatori ad organizzare e suggerire eventi di mappatura ovunque nel nostro stato. Attività di incontro come per esempio semplici riunioni, lezioni di OSM dal principiante all’intermedio oppure feste di mappatura in compagnia." + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC", + "description": "Mappatori e utenti OpenStreetMap, sviluppatori e appassionati nell'area Metropolitana di New York" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland", + "description": "Mappatori e utenti OpenStreetMap nell'area di Portland", + "extendedDescription": "OpenStreetMap (OSM) è una cartina del pianeta costruita da persone come te. È una mappa che puoi modificare, distribuita gratuitamente come Wikipedia. Vai su osm.org per saperne di più e vieni ai nostri meetup per discutere di mappe, contribuire a OSM e divertirti!" + }, + "OSM-Seattle": { + "name": "OpenStreetMap di Seattle", + "description": "Mappatori e utenti OpenStreetMap nell’area di Seattle" + }, + "OSM-SoCal": { + "name": "OpenStreetMap della California del sud", + "description": "Divertiamoci, contribuiamo con qualunque cosa a Los Angeles e impariamo a mappare!", + "extendedDescription": "OpenStreetMap (OSM) della California del sud è per chiunque sia interessato a mappare insieme agli altri lavorando con OpenStreetMap. OpenStreetMap, la Wikipedia delle mappe, è la mappa del mondo open-source libera creata da più di un milione di volontari per tutto il globo. Chiunque è ben accetto. Se non conosci OpenStreetMap, te la insegneremo noi. Se hai un’idea per un progetto di mappatura oppure una gita sul campo che il nostro gruppo può effettuare, perfetto!" + }, + "OSM-South-Bay": { + "name": "OSM di South Bay", + "description": "Serate della mappa ospitate da \"Programmare per San Jose\"", + "extendedDescription": "Programmare per San Jose, la filiale locale della brigata di Programmare per l’America, ospita ogni mese di giovedì una serata per la mappa nei sobborghi di San José. Incontra altri mappatori della South Bay, aiutaci con i progetti di mappatura locale e vieni a conoscenza di altri progetti di tecnologia civica. Non è richiesto né saper programmare né sapere cosa sia un GIS." + }, + "OSM-Tampa-Bay": { + "name": "OpenStreetMap di Tampa Bay", + "description": "Mappatori e utenti OpenStreetMap dell’area di Tampa Bay", + "extendedDescription": "Gruppo OSM di Tampa Bay per riunire residenti locali e riuscire a costruire la mappa definitiva di Tampa Bay con OpenStreetMap, la mappa del mondo libera e modificabile. Se ti interessano le mappe, i dati, l’open source, il GPS, le passeggiate, pedalare, etc., ti piacerà da impazzire lavorare con OpenStreetMap - perciò unisciti a noi! Ci incontreremo e mapperemo e discuteremo di nuovi argomenti più o meno una volta al mese." + }, + "OSM-US-Slack": { + "name": "Slack Americano di OpenStreetMap", + "description": "Sono tutti i benvenuti! Registrati all'indirizzo {signupUrl}" + }, + "OSM-US": { + "name": "OpenStreetMap degli Stati Uniti", + "description": "Aiutiamo a crescere e migliorare OpenStreetMap negli Stati Uniti.", + "extendedDescription": "Supportiamo OpenStreetMap organizzando conferenze annuali, producendo risorse per la comunità, costruendo relazioni e diffondendo la voce. Unisciti a OpenStreetMap degli Stati Uniti qui: {signupUrl}" + }, + "OSM-Utah": { + "name": "OpenStreetMap dello Utah", + "description": "Mappaori e utenti OpenStreetMap dell’area di Salt Lake City", + "extendedDescription": "Le attività comprendono cose come lezioni per imparare a mappare, feste di mappatura e uscite all’aperto per la raccolta di dati. Gli eventi avverranno nell’area SLC, almemmo all’inizio. Stiamo cercando sia mappatori esperti che alle prime armi. Unisciti e andiamo a mappare!" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap del Wyoming", + "description": "Mappatori e utenti OpenStreetMap dello stato del Wyoming", + "extendedDescription": "OpenStreetMap (OSM) del Wyoming è una collaborazione local formata da perrsone interessate a unire i loro sforzi per creare mappe libere. Incoraggiamo tutti i nostri mappatori a organizzare o suggerire eventi di mappatura ovunque nello stato. Attività di gruppo sono per esempio incontri, lezioni di OSM dal principiante all’intrmedio, oppure feste di mappatura in compagnia." + }, + "PHXGeo-meetup": { + "name": "Meetup PHXGeo", + "description": "Mappatori e utenti OpenStreetMap di Phoenix (area Arizona)", + "extendedDescription": "Questo è un gruppo meetup per i residenti nell’area di Phoenix a cui piacciono le mappe, GIS, OpenStreetMap e cartografia in tutte le loro combinazioni." + }, + "PHXGeo-twitter": { + "name": "Twitter PHXGeo", + "description": "Seguici su Twitter all’indirizzo {url}" + }, + "Western-Slope-facebook": { + "name": "Facebook di OSM Western Slope", + "description": "Mappatori e utenti OpenStreetMap attorno a Grand Junction (Colorado)" + }, + "Western-Slope-meetup": { + "name": "Meetup di OSM di Western Slope", + "description": "Mappatori e utenti OpenStreetMap intorno a Grand Junction (Colorado)", + "extendedDescription": "L’obiettivo di questo gruppo è quello di introdurre la comunità a OpenStreetMap, sviluppare una gruppo di mappatori, creare i più strabilianti dati georiferiti utilizzando qualsiasi metodo possibile e infine studiare dei metodi che permettano a questi dati di ritornare nella nostra comunità. Immagina un segnale dei percorsi accurato! Immagine un’ulteriore sviluppo delle piste ciclabili! Immagina qualsiasi cosa, quello è il bello di OpenStreetMap!" + }, + "Maptime-Australia-Slack": { + "name": "Slack di Australia Maptime", + "description": "Registrati all'indirizzo {signupUrl}" + }, + "talk-au": { + "name": "Mailinglist talk-au", + "description": "Un posto dove i mappatori australiani possono conversare liberamente" + }, + "OSM-AR-facebook": { + "name": "Facebook di OpenStreetMap dell’Argentina", + "description": "Unisciti alla comunità su Facebook di OpenStreetMap dell’Argentina", + "extendedDescription": "Novità della comunità locale" + }, + "OSM-AR-forum": { + "name": "Forum web di OpenStreetMap dell’Argentina", + "description": "Unisciti al forum web di OpenStreetMap dell’Argentina", + "extendedDescription": "Ideale per discussioni lunghe e profonde. Tempi di risposta lenti." + }, + "OSM-AR-irc": { + "name": "IRC di OpenStreetMap dell’Argentina", + "description": "Entra su #osm-ar nel server irc.oftc.net (porta 6667)", + "extendedDescription": "Potresti trovarvi gli utenti più nerd della comunità." + }, + "OSM-AR-mailinglist": { + "name": "Mailinglist talk-ar", + "description": "Vecchia mailinglist. Praticamente inutilizzata al giorno d’oggi." + }, + "OSM-AR-telegram": { + "name": "Telegram di OpenStreetMap dell’Argentina", + "description": "Unisciti alla comunità su Telegram di OpenStreetMap dell’Argentina", + "extendedDescription": "Il canale più attivo della comunità, ideale per chiacchierare e ricevere risposte alle proprie domande praticamente in tempo reale. Tutti sono i benvenuti!" + }, + "OSM-AR-twitter": { + "name": "Twitter di OpenStreetMap dell’Argentina", + "description": "Seguici su Twitter all’indirizzo {url}", + "extendedDescription": "Novità dalla comunità locale e OpenStreetMap in generale." + }, + "OSM-BO-mailinglist": { + "name": "Mailinglist talk-bo", + "description": "Talk-bo è la mailinglist ufficiale della comunità OpenStreetMap boliviana", + "extendedDescription": "Mappi in Bolivia? Hai domande o vuoi connetterti con la comunità di quaggiù? Unisciti a noi all’indirizzo {url}. Tutti sono i benvenuti!" + }, + "Bahia-telegram": { + "name": "Gruppo Telegram di OpenStreetMap di Bahia", + "description": "Unisciti alla comunità OpenStreetMap di Bahia su Telegram", + "extendedDescription": "Unisciti alla comunità per saperne di più su OpenStreetMap, fare domande e partecipare alle nostre riunioni. Chiunque è il benvenuto!" + }, + "DF-telegram": { + "name": "Gruppo Telegram di OpenStreetMap di Brasilia", + "description": "Unisciti alla comunità di OpenStreetMap di Brasilia su Telegram", + "extendedDescription": "Unisciti alla comunità per saperne di più su OpenStreetMap, fare domande e partecipare alle nostre riunioni. Tutti sono i benvenuti!" + }, + "OSM-br-mailinglist": { + "name": "Mailinglist talk-br", + "description": "Una mailinglist per discutere di OpenStreetMap in Brasile" + }, + "OSM-br-telegram": { + "name": "Telegram di OpenStreetMap del Brasile", + "description": "Unisciti alla comunità brasiliana di OpenStreetMap su Telegram", + "extendedDescription": "Unisciti alla comunità per saperne di più su OpenStreetMap, fare domande e partecipare alle nostre riunioni. Chiunque è il benvenuto!" + }, + "OSM-br-twitter": { + "name": "Twitter di OpenStreetMap del Brasile", + "description": "Seguici su Twitter all’indirizzo {url}" + }, + "OSM-CL-facebook": { + "name": "Facebook di OpenStreetMap del Cile", + "description": "Unisciti alla comunità OpenStreetMap del Cile su Facebook", + "extendedDescription": "Unisciti alla comunità per saperne di più su OpenStreetMap, fare domande e partecipare alle nostre riunioni. Tutti sono i benvenuti!" + }, + "OSM-CL-mailinglist": { + "name": "Mailinglist talk-cl", + "description": "Una mailinglist per discutere su OpenStreetMap del Cile" + }, + "OSM-CL-telegram": { + "name": "Telegram di OpenStreetMap del Cile", + "description": "Unisciti alla comunità di OpenStreetMap del Cile su Telegram", + "extendedDescription": "Unisciti alla comunità per saperne di più su OpenStreetMap, fare domande e partecipare alle nostre riunioni. Tutti sono i benvenuti!" + }, + "OSM-CL-twitter": { + "name": "Twitter di OpenStreetMap del Cile", + "description": "Seguici su Twitter all’indirizzo {url}" + }, + "Maptime-Bogota": { + "name": "Maptime Bogotà", + "description": "Siamo un gruppo di mappatori interessati a mappare su OpenStreetMap nei dintorni di Bogotà", + "extendedDescription": "Impara a raccogliere dati sul campo e a inserirli in OpenStreetMap. Non importa avere delle conoscenze pregresse! È solo necessario voler partecipare, imparare e divertirsi." + }, + "OSM-CO-facebook": { + "name": "Facebook di OpenStreetMap della Colombia", + "description": "Unisciti alla comunità di OpenStreetMap della Colombia su Facebook", + "extendedDescription": "Unisciti alla comunità per saperne di più su OpenStreetMap. Tutti sono i benvenuti!" + }, + "OSM-CO-mailinglist": { + "name": "Mailinglist talk-co", + "description": "Una mailinglist per discutere di OpenStreetMap in Colombia" + }, + "OSM-CO-twitter": { + "name": "Twitter di OpenStreetMap della Colombia", + "description": "Seguici su Twitter all’indirizzo {url}" + }, + "OSM-CO": { + "name": "OpenStreetMap della Colombia", + "description": "Novità della comunità di OpenStreetMap della Colombia e della fondazione OSMCo" + }, + "OSM-PE-facebook": { + "name": "Facebook di OpenStreetMap del Perù", + "description": "Unisciti alla comunità di OpenStreetMap del Perù su Facebook" + }, + "OSM-PE-mailinglist": { + "name": "Mailinglist talk-pe", + "description": "La mailinglist ufficiale della comunità di OpenStreetMap del Perù" + }, + "OSM-PE-matrix": { + "name": "Chat Matrix di OpenStreetMap del Perù", + "description": "Parla su Matrix con gli altri membri della comunità di OpenStreetMap del Perù" + }, + "OSM-PE-telegram": { + "name": "Telegram di OpenStreetMap del Perù", + "description": "Unisciti alla comunità di OpenStreetMap del Perù su Telegram" + }, + "OSM-PE-twitter": { + "name": "Twitter di OpenStreetMap del Perù", + "description": "Seguici su Twitter all’indirizzo {url}" + }, + "OSM-PE": { + "name": "OpenStreetMap del Perù", + "description": "Novità e risorse per la comunità di OpenStreetMap del Perù" + }, + "OSM-Facebook": { + "name": "OpenStreetMap su Facebook", + "description": "Metti “Mi piace” su Facebook per notizie e aggiornamenti su OpenStreetMap" + }, + "OSM-help": { + "name": "Assistenza OpenStreetMap", + "description": "Fai domande e ricevi risposte nel sito di domande e risposte gestito dalla comunità OSM.", + "extendedDescription": "{url} è per tutti quelli che hanno bisogno di aiuto con OpenStreetMap. Sia che tu sia un principiante o che tu abbia una domanda tecnica, siamo qui per aiutarti!" + }, + "OSM-Reddit": { + "name": "OpenStreetMap su Reddit", + "description": "/r/openstreetmap/ è il posto perfetto per imparare di più su OpenStreetMap. Chiedici di tutto!" + }, + "OSM-Twitter": { + "name": "Twitter di OpenStreetMap", + "description": "Seguici su Twitter all’indirizzo {url}" + }, + "OSMF": { + "name": "OpenStreetMap Foundation", + "description": "OSMF è una organizzazione non a scopo di lucro che ha sede nel Regno Unito e che supporta il progetto OpenStreetMap", + "extendedDescription": "La OSMF supporta OpenStreetMap raccogliendo fondi, gestendo i server che alimentano OSM, organizzando l’annuale conferenza di State of the Map e coordinando i volontari che fanno funzionare OSM. Puoi dimostrare il tuo supporto e avere una voce in capitolo nella guida di OpenStreetMap unendoti come membro alla OSMF a questo indirizzo: {signupUrl}", + "events": { + "sotm2018": { + "name": "State of the Map 2018", + "description": "Unisciti a noi per 3 giorni a Milano (Italia), alla conferenza mondiale annuale di OpenStreetMap, in cui tutti i membri della comunità potranno incontrarsi per socializzare, condividere ed imparare.", + "where": "Milano, Italia" + } + } + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/ja.json b/vendor/assets/iD/iD/locales/ja.json index c453c1a77..36e9185e6 100644 --- a/vendor/assets/iD/iD/locales/ja.json +++ b/vendor/assets/iD/iD/locales/ja.json @@ -1,5 +1,10 @@ { "ja": { + "icons": { + "information": "情報", + "remove": "削除", + "undo": "もとに戻す" + }, "modes": { "add_area": { "title": "エリア", @@ -145,7 +150,9 @@ "vertex": "ウェイを他のウェイと接続", "line": "ウェイとラインを接続", "area": "ウェイとエリアを接続" - } + }, + "relation": "リレーションのロールが競合しているため、地物を接続できません", + "restriction": "\"{relation}\" リレーションを壊してしまうため、これらの地物は接続できません。" }, "disconnect": { "title": "接続解除", @@ -402,6 +409,7 @@ "key": "H", "title": "編集履歴", "selected": "{n} 個を選択中", + "no_history": "履歴なし(新しい地物)", "version": "バージョン", "last_edit": "最新の編集", "edited_by": "編集者", @@ -639,15 +647,20 @@ } }, "success": { - "edited_osm": "OSM編集完了!", "just_edited": "OpenStreetMap編集完了!", - "view_on_osm": "詳細情報確認", - "facebook": "Facebookでシェア", - "twitter": "Twitterでシェア", - "google": "Google+でシェア", - "help_html": "あなたが投稿した内容は数分で\"標準\"レイヤーに反映されます。その他のレイヤーへの適用や、記述した地物によっては反映にさらに時間がかかる場合があります。", + "thank_you": "マップの改善ありがとうございます。", + "thank_you_location": "{where}付近でのマップ改善への協力ありがとうございます。", + "help_html": "あなたが投稿した内容は(サーバーの状況にもよりますが)数分で標準レイヤーに反映されます。その他のレイヤーなどでは反映にさらに時間がかかる場合があります。", "help_link_text": "詳細", - "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F", + "view_on_osm": "OSM上で変更内容を閲覧", + "changeset_id": "あなたの変更セット #: {changeset_id}", + "like_osm": "OpenStreetMapが気に入ったら仲間とつながってみませんか?", + "more": "詳細", + "events": "イベント", + "languages": "言語: {languages}", + "missing": "リストに漏れがありますか?", + "tell_us": "教えてください!" }, "confirm": { "okay": "OK", @@ -1774,6 +1787,9 @@ "display": { "label": "表示盤の種類" }, + "distance": { + "label": "総距離" + }, "dock": { "label": "種類" }, @@ -1802,7 +1818,7 @@ "placeholder": "example@example.com" }, "embankment": { - "label": "種別", + "label": "種類", "placeholder": "デフォルト" }, "emergency": { @@ -1814,6 +1830,9 @@ "except": { "label": "例外" }, + "faces": { + "label": "面数" + }, "fax": { "label": "FAX", "placeholder": "+31 42 123 4567" @@ -1925,6 +1944,23 @@ "label": "輪の数", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "label": "馬場馬術乗馬", + "options": { + "equestrian": "あり", + "undefined": "なし" + } + }, + "horse_riding": { + "label": "乗馬", + "options": { + "horse_riding": "あり", + "undefined": "なし" + } + }, + "horse_scale": { + "label": "乗馬の難易度" + }, "iata": { "label": "IATA" }, @@ -1944,6 +1980,9 @@ "indoor": { "label": "室内" }, + "industrial": { + "label": "種類" + }, "information": { "label": "種類" }, @@ -2064,6 +2103,10 @@ "label": "最高速度", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "label": "安全速度", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "最大利用時間" }, @@ -2505,7 +2548,7 @@ "placeholder": "不明" }, "structure_waterway": { - "label": "トンネルの種別", + "label": "トンネルの種類", "options": { "tunnel": "トンネル" }, @@ -2652,8 +2695,19 @@ "label": "種類", "placeholder": "デフォルト" }, + "usage_rail": { + "label": "用途の種類", + "options": { + "branch": "支線", + "industrial": "産業貨物用", + "main": "幹線", + "military": "軍事用", + "test": "試験用", + "tourism": "観光用" + } + }, "vending": { - "label": "販売商品の種類" + "label": "商品の種類" }, "visibility": { "label": "見える範囲", @@ -2748,6 +2802,10 @@ "name": "広告用看板", "terms": "掲示板, 看板, 広告, 宣伝, 屋外広告" }, + "advertising/column": { + "name": "リトファスゾイレ", + "terms": "リトファスゾイレ, ポスター掲示柱, 広告" + }, "aerialway": { "name": "索道" }, @@ -2833,6 +2891,10 @@ "name": "空港ターミナル", "terms": "空港ターミナル" }, + "allotments/plot": { + "name": "市民農園の区画", + "terms": "区画, 市民農園, 市民農園の区画, 一画, 農園, 菜園, 市民菜園, 農業, 畑, 農園, コミュニティガーデン" + }, "amenity": { "name": "施設" }, @@ -3061,6 +3123,10 @@ "name": "市場", "terms": "市場, マーケット, 朝市, マルシェ, 食品, 雑貨, 買い物, ショッピング, 食べ物" }, + "amenity/monastery": { + "name": "修道院", + "terms": "修道院, 宗教, 僧院, ä¿¡ä»°" + }, "amenity/motorcycle_parking": { "name": "オートバイの駐車場", "terms": "バイクの駐車場, 二輪駐車場, 二輪駐輪場, 駐車場, 駐輪場" @@ -3265,6 +3331,10 @@ "name": "たばこ自動販売機", "terms": "たばこ, 自動販売機, 自販機, 嗜好品, タバコ" }, + "amenity/vending_machine/coffee": { + "name": "コーヒー自販機", + "terms": "コーヒー, 珈琲, 自販機, 自動販売機" + }, "amenity/vending_machine/condoms": { "name": "コンドーム自動販売機", "terms": "コンドーム, 自動販売機, 自販機" @@ -3273,6 +3343,14 @@ "name": "飲料自動販売機", "terms": "飲料, ジュース, 酒, 飲み物, 自動販売機, 自販機" }, + "amenity/vending_machine/electronics": { + "name": "電子機器自販機", + "terms": "電子機器, チャージャー, ケーブル, ヘッドフォン, 自販機, 自動販売機" + }, + "amenity/vending_machine/elongated_coin": { + "name": "記念コイン自販機", + "terms": "記念コイン, 自販機, 自動販売機" + }, "amenity/vending_machine/excrement_bags": { "name": "犬の糞入れ自動販売機", "terms": "犬の糞入れ, 自動販売機, 自販機" @@ -3281,6 +3359,18 @@ "name": "生理用品自動販売機", "terms": "生理用品自動販売機, 自販機, 自動販売機" }, + "amenity/vending_machine/food": { + "name": "食品自販機", + "terms": "食品, 食べ物, 自販機, 自動販売機" + }, + "amenity/vending_machine/fuel": { + "name": "自動車用燃料自販機", + "terms": "自動車用燃料, 燃料, 自販機, 自動販売機, ガソリン, プロパン, 液化ガス, 軽油" + }, + "amenity/vending_machine/ice_cream": { + "name": "アイスクリーム自販機", + "terms": "アイスクリーム, 自販機, 自動販売機" + }, "amenity/vending_machine/news_papers": { "name": "新聞自動販売機" }, @@ -3300,6 +3390,10 @@ "name": "切符販売機", "terms": "券売機, 自動券売機, 自動販売機, 自販機, 自動発券機, 発券機" }, + "amenity/vending_machine/stamps": { + "name": "切手自販機", + "terms": "切手, 自販機, 自動販売機, 郵便" + }, "amenity/vending_machine/sweets": { "name": "菓子販売機", "terms": "菓子,お菓子, スナック, 自動販売機, 自販機" @@ -3372,6 +3466,10 @@ "name": "落下塔", "terms": "落下塔, アトラクション" }, + "attraction/maze": { + "name": "è¿·è·¯", + "terms": "è¿·è·¯, テーマパーク, アトラクション" + }, "attraction/pirate_ship": { "name": "海賊船", "terms": "海賊船, アトラクション" @@ -4001,6 +4099,10 @@ "name": "ホスピス", "terms": "ホスピス, 医療, 福祉" }, + "healthcare/laboratory": { + "name": "医学研究室", + "terms": "医学研究室, 医療研究室, 研究室, 健康, 医療" + }, "healthcare/midwife": { "name": "助産婦", "terms": "助産婦, 産婆, 医療" @@ -4103,6 +4205,10 @@ "name": "自動車専用道路の接続路", "terms": "自動車専用道路, 接続路, 車道, 幹線, 公道" }, + "highway/passing_place": { + "name": "待避所", + "terms": "待避所, 退避エリア" + }, "highway/path": { "name": "小道(自動車通行不可)", "terms": "小道, 歩道, 自転車道, バイク" @@ -4462,6 +4568,10 @@ "name": "ゲームセンター", "terms": "ゲームセンター, ゲーセン, 娯楽, レジャー, 遊技, ゲーム, 遊戯" }, + "leisure/beach_resort": { + "name": "ビーチリゾート", + "terms": "ビーチリゾート, 行楽地, 観光, 保養, レジャー, 娯楽, リゾート, 海辺, 砂浜" + }, "leisure/bird_hide": { "name": "野鳥観察舎", "terms": "ハイド, 野鳥観察小屋, アウトドア" @@ -4578,6 +4688,10 @@ "name": "自然保護区", "terms": "自然保護区" }, + "leisure/outdoor_seating": { + "name": "屋外食事席エリア", + "terms": "屋外席エリア, 屋外席, テラス, 食事, 屋外食事席エリア" + }, "leisure/park": { "name": "公園", "terms": "公園, アウトドア, 広場, 運動公園" @@ -4604,7 +4718,7 @@ }, "leisure/pitch/beachvolleyball": { "name": "ビーチバレーコート", - "terms": "ビーチバレーコート, スポーツ, 運動, 競技" + "terms": "ビーチバレーコート, スポーツ, 運動, 競技, 砂浜" }, "leisure/pitch/boules": { "name": "ブールスポーツ", @@ -4706,6 +4820,10 @@ "name": "坑口", "terms": "坑口, 坑道" }, + "man_made/antenna": { + "name": "アンテナ", + "terms": "アンテナ, 通信, テレビ" + }, "man_made/breakwater": { "name": "防波堤", "terms": "防波堤" @@ -4757,6 +4875,10 @@ "name": "監視塔", "terms": "監視塔" }, + "man_made/observatory": { + "name": "観測ドーム", + "terms": "観測ドーム, 観測所" + }, "man_made/petroleum_well": { "name": "油田", "terms": "油田" @@ -4881,6 +5003,10 @@ "name": "荒地", "terms": "荒地, 植物" }, + "natural/mud": { + "name": "泥地", + "terms": "泥地, æ³¥" + }, "natural/peak": { "name": "山頂", "terms": "山頂, 頂" @@ -5917,6 +6043,10 @@ "name": "ペットショップ", "terms": "ペット売り場, ペット, 家禽, ペットショップ, 動物" }, + "shop/pet_grooming": { + "name": "ペット美容室", + "terms": "ペット美容室, 動物美容, ペット, 美容, 犬の美容室, 愛犬美容, 犬, 猫" + }, "shop/photo": { "name": "写真店", "terms": "写真屋, 写真店, 現像, ビデオ, デジカメ" @@ -6228,8 +6358,12 @@ "terms": "右折専用, 右折のみ" }, "type/restriction/only_straight_on": { - "name": "直進のみ可", - "terms": "直進のみ可" + "name": "直進専用", + "terms": "直進専用, 直進のみ" + }, + "type/restriction/only_u_turn": { + "name": "Uターン専用", + "terms": "Uターン専用, Uターンのみ" }, "type/route": { "name": "ルート", @@ -6392,7 +6526,7 @@ "attribution": { "text": "規約&フィードバック" }, - "description": "画像の境界と取得日付。ラベルはズームレベル14以上で表示。", + "description": "画像の境界と取得日付。ラベルはズームレベル13以上で表示。", "name": "DigitalGlobeプレミアム画像撮影日" }, "DigitalGlobe-Standard": { @@ -6406,7 +6540,7 @@ "attribution": { "text": "規約&フィードバック" }, - "description": "画像の境界と取得日付。ラベルはズームレベル14以上で表示。", + "description": "画像の境界と取得日付。ラベルはズームレベル13以上で表示。", "name": "DigitalGlobe標準画像撮影日" }, "EsriWorldImagery": { @@ -6421,7 +6555,7 @@ "text": "規約 & フィードバック" }, "description": "おそらくEsriデフォルトのレイヤより明瞭で正確、しかしやや古いEsriアーカイブ画像。(日本での違いは不明)", - "name": "Esri World Imagery(鮮明版)ベータ" + "name": "Esri World Imagery(精細版)ベータ" }, "MAPNIK": { "attribution": { @@ -6490,6 +6624,10 @@ "description": "黄 = US Censusからのパブリックドメインの地図データ。赤 = penStreetMapに無いデータ。", "name": "TIGER Roads 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "Highway: 緑枠 = unclassified.ブラウン枠 = track. Surface: gravel = ライトブラウン, Asphalt = 黒, paved = グレイ, ground =白, concrete = 青, grass = 緑. Seasonal = 白棒", + "name": "U.S. Forest Roads Overlay" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0" @@ -6524,7 +6662,7 @@ "attribution": { "text": "basemap.at" }, - "description": "Basemap of Austria, based on goverment data.", + "description": "オーストリアのベースマップ、政府データに基づく。", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6586,7 +6724,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Map tiles by Stamen Design, under CC BY 3.0" + "text": "Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL" }, "name": "Stamen 地形図" }, @@ -6602,6 +6740,418 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "osm-mg-facebook": { + "name": "OpenStreetMap Madagascar Facebook Group", + "description": "Malagasy Facebook group for people interested in OpenStreetMap." + }, + "talk-mg": { + "name": "Talk-mg Mailing List", + "description": "Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss." + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap Bangladesh", + "description": "Improve OpenStreetMap in Bangladesh", + "extendedDescription": "Mapping in Bangladesh? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!" + }, + "OSM-India-facebook": { + "name": "OpenStreetMap India - Participatory neighborhood mapping", + "description": "Improve OpenStreetMap in India" + }, + "OSM-india-mailinglist": { + "name": "OpenStreetMap India Mailinglist", + "description": "Talk-in is the official Mailinglist for Indian Community" + }, + "OSM-india-twitter": { + "name": "OpenStreetMap India Twitter", + "description": "We are just a tweet away: {url}" + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap Indonesia", + "description": "Improve OpenStreetMap in Indonesia", + "extendedDescription": "Mapping in Indonesia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!" + }, + "OSM-japan-facebook": { + "name": "OpenStreetMap 日本コミュニティ", + "description": "日本のマッパーとOpenStreetMap ユーザー" + }, + "OSM-japan-mailinglist": { + "name": "OpenStreetMap 日本メーリングリスト", + "description": "Talk-ja は日本コミュニティ向けの公式メーリングリストです" + }, + "OSM-japan-twitter": { + "name": "OpenStreetMap 日本のTwitter", + "description": "Twitterでのハッシュタグ: {url}" + }, + "OSM-MY-forum": { + "name": "OpenStreetMap Malaysia Forum", + "description": "Official OpenStreetMap Malaysia Forum" + }, + "OSM-MY-matrix": { + "name": "OpenStreetMap Malaysia Riot channel", + "description": "All mappers are welcome! Sign up at {signupUrl}" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap Mongolia", + "description": "Improve OpenStreetMap in Mongolia", + "extendedDescription": "Mapping in Mongolia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!" + }, + "OSM-MMR-facebook": { + "name": "OpenStreetMap Myanmar", + "description": "Improve OpenStreetMap in Myanmar", + "extendedDescription": "Mapping in Myanmar? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!" + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap Nepal", + "description": "Improve OpenStreetMap in Nepal", + "extendedDescription": "Mapping in Nepal? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!" + }, + "OSM-PH-facebook": { + "name": "OpenStreetMap PH Facebook", + "description": "Welcome to OpenStreetMap Philippines, where we encourage all fellow Filipinos to contribute to the OpenStreetMap project." + }, + "OSM-PH-mailinglist": { + "name": "Talk-ph Mailing List", + "description": "A mailing list to discuss OpenStreetMap in the Philippines" + }, + "OSM-PH-slack": { + "name": "OpenStreetMap PH Slack", + "description": "All are welcome! Sign up at {signupUrl}" + }, + "OSM-PH-telegram": { + "name": "OpenStreetMap PH Telegram", + "description": "Un-official, Telegram local community of OpenStreetMap contributors and friends in the Philippines" + }, + "OSM-RU-forum": { + "name": "OpenStreetMap RU forum", + "description": "OpenStreetMap Russia web forum" + }, + "OSM-RU-telegram": { + "name": "OpenStreetMap RU telegram", + "description": "OpenStreetMap Russia telegram chat" + }, + "OSM-LKA-facebook": { + "name": "OpenStreetMap Sri Lanka", + "description": "Improve OpenStreetMap in Sri Lanka", + "extendedDescription": "Mapping in Sri Lanka? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!" + }, + "OSM-TW-facebook": { + "name": "OpenStreetMap Taiwan Community", + "description": "Facebook Group for Mappers and OpenStreetMap users to discuss matters about Taiwan." + }, + "OSM-TW-mailinglist": { + "name": "OpenStreetMap Taiwan Mailinglist", + "description": "Talk-tw is an Official Mailinglist for the Communities to dicuss matters about Taiwan" + }, + "at-mailinglist": { + "name": "Talk-at Mailing List", + "description": "Talk-at is the official mailing list for the Austrian OSM community" + }, + "at-twitter": { + "name": "OpenStreetMap Austria Twitter", + "description": "OpenStreetMap Austria On Twitter: {url}" + }, + "osm-at": { + "name": "OpenStreetMap Austria", + "description": "The platform for information on OpenStreetMap in Austria" + }, + "be-facebook": { + "name": "OpenStreetMap BE Community", + "description": "Mappers and OpenStreetMap facebook in Belgium" + }, + "be-forum": { + "name": "OpenStreetMap BE forum", + "description": "OpenStreetMap Belgium web forum" + }, + "be-mailinglist": { + "name": "Talk-be Mailing List", + "description": "Talk-be is the official mailing list for Belgian OSM community" + }, + "be-matrix": { + "name": "OpenStreetMap BE Riot channel", + "description": "All mappers are welcome! Sign up at {signupUrl}", + "extendedDescription": "Multiple channels exists, for beginners to thematic channels, landuse and dev talk" + }, + "be-meetup": { + "name": "OpenStreetMap Belgium Meetup", + "description": "IRL meetups of everyone who is interested in OpenStreetMap.", + "extendedDescription": "Physical meetups are great to meet other mappers, ask them questions and to learn a lot. Especially new contributors are very welcome!" + }, + "be-twitter": { + "name": "OpenStreetMap Belgium Twitter", + "description": "OSM Belgium On Twitter: {url}" + }, + "byosm": { + "name": "OpenStreetMap Belarus", + "description": "OpenStreetMap Belarus telegram chat" + }, + "talk-cz-mailinglist": { + "name": "Talk-cz Mailing List", + "description": "Talk-cz is the official mailing list for Czech community" + }, + "de-forum": { + "name": "OpenStreetMap DE forum", + "description": "OpenStreetMap Germany web forum" + }, + "de-irc": { + "name": "OpenStreetMap Germany IRC", + "description": "Join #osm-de on irc.oftc.net (port 6667)" + }, + "de-mailinglist": { + "name": "Talk-de Mailing List", + "description": "Talk-de is the official mailing list for the German OSM community" + }, + "osm-de": { + "name": "OpenStreetMap Germany", + "description": "The platform for information on OpenStreetMap in Germany" + }, + "OSM-ES-mailinglist": { + "name": "Talk-es mailing list", + "description": "A mailing list to discuss OpenStreetMap in Spain" + }, + "OSM-ES-telegram": { + "name": "@OSMes on Telegram", + "description": "OpenStreetMap Spain Telegram chat" + }, + "OSM-Rome-meetup": { + "name": "Incontro Mappatori Romani", + "description": "Improve OpenStreetMap in the Rome area", + "extendedDescription": "We aim to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Lazio." + }, + "talk-it-lazio": { + "name": "OpenStreetMap IT Lazio", + "description": "All are welcome! Sign up at {signupUrl}", + "extendedDescription": "Mailinglist for Rome and Lazio area." + }, + "OSM-CA-Slack": { + "name": "OSM-CA Slack", + "description": "All are welcome! Sign up at {signupUrl}." + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap Vancouver", + "description": "Mappers and OpenStreetMap users in the Vancouver, BC area" + }, + "Bay-Area-OpenStreetMappers": { + "name": "Bay Area OpenStreetMappers", + "description": "Improve OpenStreetMap in the Bay Area", + "extendedDescription": "This group is about growing the OpenStreetMap community here in the Bay Area. Our events are open to everyone, from open source enthusiasts, cyclists, GIS professionals, geocachers, and beyond. Anyone and everyone who is interested in maps, map making and free map data is welcome to join our group as well as attend our events." + }, + "Central-Pennsylvania-OSM": { + "name": "Central Pennsylvania OSM", + "description": "Online mapping community based out of State College, PA" + }, + "Code-for-San-Jose-Slack": { + "name": "Code for San Jose Slack", + "description": "All are welcome! Sign up at {signupUrl}, then join the #osm channel." + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM", + "description": "The OpenStreetMap user group for Dallas-Fort Worth", + "extendedDescription": "Dallas, Fort Worth, and all the cities in between are abounding with creative and tech-savvy people. The vision for this usergroup is to find new ways to use the amazing resource of OSM." + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "Meetup for map enthusiasts in the Philadelphia area", + "extendedDescription": "GeoPhilly unites developers, geographers, data geeks, open source enthusiasts, civic hackers and map addicts in our shared love of maps and the stories they tell. If you use maps as part of your work or just want to learn more, this is the meetup for you! Our events aim to be open, friendly, educational and social and range from happy hours to lightning talks or even workshops. Come create a diverse, inspiring geospatial community in the Philadelphia with us!" + }, + "MapMinnesota": { + "name": "MapMinnesota", + "description": "Mappers and OpenStreetMap enthusiasts in the Twin Cities area", + "extendedDescription": "Connecting OpenStreetMap enthusiasts in Minnesota and the Twin Cities!" + }, + "Mapping-DC-meetup": { + "name": "Mapping DC", + "description": "Improve OpenStreetMap in the DC area", + "extendedDescription": "We are a group of volunteer mappers who aim to improve the OpenStreetMap in the DC area. We also aim to teach others about the OSM ecosystem, data analytics, cartography, and GIS. We gather every other month at meetups to focus on one area of our city." + }, + "Maptime-ME-meetup": { + "name": "MaptimeME", + "description": "Mappers and OpenStreetMap users, around Portland, ME", + "extendedDescription": "Maptime is, rather literally, time for mapmaking. Our mission is to open the doors of cartographic possibility to anyone interested by creating a time and space for collaborative learning, exploration, and map creation using mapping tools and technologies." + }, + "OpenCleveland-meetup": { + "name": "Open Cleveland", + "description": "Improve OpenStreetMap in the Cleveland area", + "extendedDescription": "Open Geo Cleveland aims to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Northeast Ohio. We're also a maptime chapter =)" + }, + "OSM-Boston": { + "name": "OpenStreetMap Boston", + "description": "Mappers and OpenStreetMap users in the Boston area", + "extendedDescription": "OpenStreetMap is the free and open, wiki-style map of the world, with hundreds of thousands of contributions every day from people like you. Editing the map is simple, and fun! Join us both indoors and outdoors in our effort to create the best map of the Boston area and the rest of the world!" + }, + "OSM-Central-Salish-Sea": { + "name": "OpenStreetMap Central Salish Sea", + "description": "Mappers and OpenStreetMap users around Mount Vernon, WA", + "extendedDescription": "OpenStreetMap is an map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more. We meet all the time to talk maps, make maps and have fun!" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "The OpenStreetMap user group for Chattanooga" + }, + "OSM-Colorado": { + "name": "OpenStreetMap Colorado", + "description": "Mappers and OpenStreetMap users in the state of Colorado, USA", + "extendedDescription": "OpenStreetMap (OSM) Colorado is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties." + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC", + "description": "Mappers and OpenStreetMap users, developers and enthusiasts in the New York Metropolitan area" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland", + "description": "Mappers and OpenStreetMap users in the Portland area", + "extendedDescription": "OpenStreetMap (OSM) is a map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more, and come join us at a meetup to talk maps, contribute to OSM, and have fun!" + }, + "OSM-Seattle": { + "name": "OpenStreetMap Seattle", + "description": "Mappers and OpenStreetMap users in the Seattle area" + }, + "OSM-SoCal": { + "name": "OpenStreetMap Southern California", + "description": "Let's have some fun, contribute something to Los Angeles, and learn about mapping!", + "extendedDescription": "OpenStreetMap (OSM) Southern California is for anyone interested in mapping to get together to work with OpenStreetMap. OpenStreetMap, the Wikipedia of maps, is a free open-source map of the world being created by more than 1,000,000 volunteers around the globe. Everyone is welcome. If you don't know OpenStreetMap, we'll teach you. If you have an idea for a mapping project or even a field trip that the group can do, great!" + }, + "OSM-South-Bay": { + "name": "OSM South Bay", + "description": "Map Nights hosted by Code for San Jose", + "extendedDescription": "Code for San Jose, the local Code for America brigade, hosts monthly Map Nights on Thursday nights in downtown San José. Meet fellow South Bay mappers, help out with local mapping projects, and hear about other civic tech projects. Programming and GIS skills are not required." + }, + "OSM-Tampa-Bay": { + "name": "OpenStreetMap Tampa Bay", + "description": "Mappers and OpenStreetMap users in the Tampa Bay area", + "extendedDescription": "OSM Tampa Bay group for local residents to get together and build out the definitive map of Tampa Bay with OpenStreetMap, the free and editable map of the world. If you're into maps, data, open source, GPS, hiking, cycling, et cetera, you'll love working with OpenStreetMap -- so join in! We'll get together and map and talk about new topics once-a-month or so." + }, + "OSM-US-Slack": { + "name": "OpenStreetMap US Slack", + "description": "All are welcome! Sign up at {signupUrl}" + }, + "OSM-US": { + "name": "OpenStreetMap US", + "description": "We help grow and improve OpenStreetMap in the United States.", + "extendedDescription": "We support OpenStreetMap by holding annual conferences, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap US here: {signupUrl}" + }, + "OSM-Utah": { + "name": "OpenStreetMap Utah", + "description": "Mappers and OpenStreetMap users in the Salt Lake City area", + "extendedDescription": "Activities may include things like Learn To Map workshops, mapping parties and outdoor data collection. The events will take place in the SLC area, at least initially. We are looking for seasoned mappers as well as people new to OSM. Join and let's do some mapping!" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap Wyoming", + "description": "Mappers and OpenStreetMap users in the state of Wyoming", + "extendedDescription": "OpenStreetMap (OSM) Wyoming is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties." + }, + "PHXGeo-meetup": { + "name": "PHXGeo Meetup", + "description": "Mappers and OpenStreetMap users in the Phoenix, AZ area", + "extendedDescription": "This is a meetup group for those in the Phoenix area who like maps, GIS, OpenStreetMap, cartography and anything in between." + }, + "PHXGeo-twitter": { + "name": "PHXGeo Twitter", + "description": "Follow us on Twitter at {url}" + }, + "Western-Slope-facebook": { + "name": "Western Slope OSM Facebook", + "description": "Mappers and OpenStreetMap users around Grand Junction, CO" + }, + "Western-Slope-meetup": { + "name": "Western Slope OSM Meetup", + "description": "Mappers and OpenStreetMap users around Grand Junction, CO", + "extendedDescription": "The goal of this group is to introduce OpenStreetMap to the community, develop a community of mappers, create the most amazing geodata possible using whatever method we can and finally strategize in order to get this data out into our community. Imagine accurate trail signage! Imagine further development of bike paths! Imagine anything you want, that's the joy of OpenStreetMap!" + }, + "Maptime-Australia-Slack": { + "name": "Maptime Australia Slack", + "description": "Sign up at {signupUrl}" + }, + "talk-au": { + "name": "Talk-au Mailing List", + "description": "Place for Aussie mappers to chat" + }, + "OSM-AR-facebook": { + "name": "OpenStreetMap Argentina Facebook", + "description": "Join the OpenStreetMap Argentina community on Facebook" + }, + "OSM-AR-forum": { + "name": "OpenStreetMap Argentina web forum", + "description": "Join the OpenStreetMap Argentina web forum" + }, + "OSM-AR-irc": { + "name": "OpenStreetMap Argentina IRC", + "description": "Join #osm-ar on irc.oftc.net (port 6667)" + }, + "OSM-AR-mailinglist": { + "name": "Talk-ar Mailing List" + }, + "OSM-AR-telegram": { + "name": "OpenStreetMap Argentina Telegram", + "description": "Join the OpenStreetMap Argentina community on Telegram" + }, + "OSM-AR-twitter": { + "name": "OpenStreetMap Argentina Twitter", + "description": "Follow us on Twitter at {url}" + }, + "Bahia-telegram": { + "name": "OpenStreetMap Bahia Telegram Group", + "description": "Join the OpenStreetMap Bahia community on Telegram", + "extendedDescription": "Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!" + }, + "OSM-br-mailinglist": { + "name": "Talk-br Mailing List", + "description": "A mailing list to discuss OpenStreetMap in Brazil" + }, + "OSM-br-telegram": { + "name": "OpenStreetMap Brasil Telegram", + "description": "Join the OpenStreetMap Brasil community on Telegram", + "extendedDescription": "Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!" + }, + "OSM-br-twitter": { + "name": "OpenStreetMap Brasil Twitter", + "description": "Follow us on Twitter at {url}" + }, + "OSM-CL-facebook": { + "name": "OpenStreetMap Chile Facebook", + "description": "Join the OpenStreetMap Chile community on Facebook", + "extendedDescription": "Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!" + }, + "OSM-CL-mailinglist": { + "name": "Talk-cl Mailing List", + "description": "A mailing list to discuss OpenStreetMap in Chile" + }, + "OSM-CL-telegram": { + "name": "OpenStreetMap Chile Telegram", + "description": "Join the OpenStreetMap Chile community on Telegram", + "extendedDescription": "Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!" + }, + "OSM-CL-twitter": { + "name": "OpenStreetMap Chile Twitter", + "description": "Follow us on Twitter at {url}" + }, + "Maptime-Bogota": { + "name": "Maptime Bogotá", + "description": "We're a group of mappers interested in mapping in OpenStreetMap around Bogotá.", + "extendedDescription": "Learn to collect data in the field and digitize onto OpenStreetMap. It is not necessary to have previous knowledge! You just need the desire to participate, learn, and have fun." + }, + "OSM-CO-facebook": { + "name": "OpenStreetMap Colombia Facebook", + "description": "Join the OpenStreetMap Colombia community on Facebook", + "extendedDescription": "Join the community to learn more about OpenStreetMap. Everyone is welcome!" + }, + "OSM-CO-mailinglist": { + "name": "Talk-co Mailing List", + "description": "A mailing list to discuss OpenStreetMap in Colombia" + }, + "OSM-CO-twitter": { + "name": "OpenStreetMap Colombia Twitter", + "description": "Follow us on Twitter at {url}" + }, + "OSM-CO": { + "name": "OpenStreetMap Colombia", + "description": "News of the OpenStreetMap Colombia community and the OSMCo Foundation" + }, + "OSM-Reddit": { + "name": "OpenStreetMap on Reddit", + "description": "/r/openstreetmap/ is a great place to learn more about OpenStreetMap. Ask us anything!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/kn.json b/vendor/assets/iD/iD/locales/kn.json index c300009f2..77ab3244c 100644 --- a/vendor/assets/iD/iD/locales/kn.json +++ b/vendor/assets/iD/iD/locales/kn.json @@ -535,12 +535,7 @@ } }, "success": { - "edited_osm": "‍ಓಎಸ್‌ಎಂ ಸಂಪಾದಿಸಲಾಗಿದೆ!", "just_edited": "ನೀವು ಈಗ ಓಪನ್‍ ಸ್ಟ್ರೀಟ್ ಮ್ಯಾಪ್ ಸಂಪಾದಿಸಿದಿರಿ.", - "view_on_osm": "ಓ ಎಸ್ ಎಂ ನಲ್ಲಿ ನೋಡಿ. ", - "facebook": "ಫೇಸ್ ಬುಕ್ ನಲ್ಲಿ ಹಂಚಿಕೊಳ್ಳಿರಿ", - "twitter": "ಟ್ವಿಟರ ನಲ್ಲಿ ಹಂಚಿಕೊಳ್ಳಿರಿ", - "google": "ಗೂಗಲ್+ ನಲ್ಲಿ ಹಂಚಿಕೊಳ್ಳಿರಿ", "help_link_text": "ವಿವರಗಳು" }, "confirm": { diff --git a/vendor/assets/iD/iD/locales/ko.json b/vendor/assets/iD/iD/locales/ko.json index a44710b61..c4a9693f8 100644 --- a/vendor/assets/iD/iD/locales/ko.json +++ b/vendor/assets/iD/iD/locales/ko.json @@ -1,5 +1,10 @@ { "ko": { + "icons": { + "information": "정보", + "remove": "제거", + "undo": "실행 취소" + }, "modes": { "add_area": { "title": "공간", @@ -25,6 +30,9 @@ }, "draw_line": { "tail": "선에 더 많은 노드를 추가하려면 클릭하세요. 다른 선을 노드로 연결하려면 다른 선을 클릭하고 선을 끝내려면 더블 클릭하세요." + }, + "drag_node": { + "connected_to_hidden": "이것은 숨겨진 지뭃에 연결되어 있기 때문에 편집할 수 없습니다." } }, "operations": { @@ -288,6 +296,16 @@ } } }, + "restriction": { + "controls": { + "distance": "거리", + "via_node_only": "노드 전용" + }, + "help": { + "select_from": "{from} 분절을 선택하려면 클릭하세요.", + "select_from_name": "{from}{fromName}을(를) 선택하려면 클릭하십시요" + } + }, "undo": { "tooltip": "실행 취소: {action}", "nothing": "실행 취소할 것이 없습니다." @@ -599,13 +617,7 @@ } }, "success": { - "edited_osm": "OSM을 편집했습니다!", "just_edited": "오픈스트리트맵을 편집했습니다!", - "view_on_osm": "OSM에서 보기", - "facebook": "페이스북에 공유", - "twitter": "트위터에 공유", - "google": "Google+에 공유", - "help_html": "변경사항은 몇 분 후에 \"표준\" 레이어에서 보여집니다. 다른 레이어와 특정 지물은 더 오래 걸릴 수 있습니다.", "help_link_text": "자세한 정보", "help_link_url": "https://wiki.openstreetmap.org/wiki/Ko:FAQ#.EB.82.98.EB.8A.94_.EC.A7.80.EB.8F.84.EC.97.90_.EC.95.BD.EA.B0.84.EC.9D.98_.EB.B3.80.EA.B2.BD.EC.9D.84_.EA.B0.80.ED.96.88.EB.8B.A4._.EB.82.B4.EA.B0.80_.EC.96.B4.EB.96.BB.EA.B2.8C_.EB.82.98.EC.9D.98_.EB.B3.80.EA.B2.BD.EC.82.AC.ED.95.AD.EC.9D.84_.EB.B3.BC_.EC.88.98_.EC.9E.88.EB.82.98.EC.9A.94.3F" }, @@ -673,7 +685,8 @@ "view_on_mapillary": "Mapillary에서 이 그림 보기" }, "openstreetcam_images": { - "tooltip": "OpenStreetCam의 거리수준 사진" + "tooltip": "OpenStreetCam의 거리수준 사진", + "title": "사진 겹치기 (OpenStreetCam)" }, "openstreetcam": { "view_on_openstreetcam": "OpenStreetCam에서 이 사진 보기" @@ -704,7 +717,11 @@ "editing": { "title": "편집 & 저장하기", "select_h": "선택", + "select_left_click": "{leftclick}마우스 왼쪽키는 지물을 선택할 때 사용합니다. 선택됬을경우, 지물이 강조처리되고, 이름이나 주소와 같은 지물에 대한 정보가 사이드바에 표시됩니다. ", + "select_right_click": "{rightclick} 마우스 오른쪽 키는 회전, 이동, 삭제와 같은 지물에 대한 편집 메뉴를 표시합니다. ", "multiselect_h": "여러 선택", + "multiselect_shift_click": "`{shift}`+{leftclick} 여러 지물들을 같이 선택합니다. 여러 물체들을 쉽게 삭제하거나 옮길 수 있습니다.", + "multiselect_lasso": "여러 지물들을 선택할 수 있는 다른 방법은 `{shift}`키를 누른 상태로 {leftclick} 마우스 왼쪽 버튼으로 선택할 지물들을 묶는 것입니다. 이 경우, 올가미 내의 모든 점들이 선택됩니다.", "undo_redo_h": "되돌리기 & 복구하기", "save_h": "저장", "upload_h": "업로드", @@ -1492,6 +1509,9 @@ "display": { "label": "표시" }, + "distance": { + "label": "총 거리" + }, "dock": { "label": "유형" }, @@ -1643,6 +1663,24 @@ "label": "후프", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "options": { + "equestrian": "예", + "undefined": "아니오" + } + }, + "horse_riding": { + "options": { + "horse_riding": "예", + "undefined": "아니오" + } + }, + "horse_stables": { + "options": { + "stables": "예", + "undefined": "아니오" + } + }, "iata": { "label": "IATA" }, @@ -1782,6 +1820,9 @@ "label": "제한 속도", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "최대 투숙일수" }, @@ -2328,6 +2369,7 @@ "label": "유형" }, "traffic_signals/direction": { + "label": "방향", "options": { "backward": "역방향", "both": "둘 다 / 모두", @@ -2366,6 +2408,9 @@ "label": "유형", "placeholder": "기본값" }, + "usage_rail": { + "label": "용도" + }, "vending": { "label": "상품 종류" }, @@ -2767,6 +2812,9 @@ "name": "시장", "terms": "시장" }, + "amenity/monastery": { + "name": "수도원 부지" + }, "amenity/motorcycle_parking": { "name": "오토바이 주차장", "terms": "모터사이클 주차장" @@ -2967,6 +3015,9 @@ "name": "담배 자판기", "terms": "담배 자판기, 담배 자동 판매기" }, + "amenity/vending_machine/coffee": { + "name": "커피 자판기" + }, "amenity/vending_machine/condoms": { "name": "콘돔 자판기", "terms": "콘돔 자판기, 콘돔 자동 판매기" @@ -2975,10 +3026,19 @@ "name": "음료 자판기", "terms": "음료 자판기, 음료 자동 판매기" }, + "amenity/vending_machine/electronics": { + "name": "전자 제품 자판기" + }, "amenity/vending_machine/excrement_bags": { "name": "쓰레기 봉투 자판기", "terms": "쓰레기 봉투 자판기, 쓰레기 봉투 자동 판매기" }, + "amenity/vending_machine/food": { + "name": "식품 자판기" + }, + "amenity/vending_machine/ice_cream": { + "name": "아이스크림 자판기" + }, "amenity/vending_machine/news_papers": { "name": "신문 자동판매기" }, @@ -2998,6 +3058,9 @@ "name": "1회용 교통카드·승차권 판매기", "terms": "1회용 교통카드·승차권 판매기, 대중교통 티켓 발권기" }, + "amenity/vending_machine/stamps": { + "name": "우표 자판기" + }, "amenity/vending_machine/sweets": { "name": "간식 자판기", "terms": "간식 자판기, 과자 자판기" @@ -3066,6 +3129,9 @@ "name": "자이로드롭", "terms": "자이로드롭" }, + "attraction/maze": { + "name": "미로" + }, "attraction/pirate_ship": { "name": "바이킹", "terms": "바이킹" @@ -3217,6 +3283,12 @@ "building/entrance": { "name": "입구/출구" }, + "building/farm": { + "name": "농가" + }, + "building/farm_auxiliary": { + "name": "농장 건물" + }, "building/garage": { "name": "차고", "terms": "차고" @@ -3373,6 +3445,9 @@ "name": "요리 조달자", "terms": "요리 조달자" }, + "craft/chimney_sweeper": { + "name": "굴뚝 청소부" + }, "craft/clockmaker": { "name": "시계공", "terms": "시계 제작자" @@ -3649,6 +3724,9 @@ "healthcare/hospice": { "name": "호스피스" }, + "healthcare/laboratory": { + "name": "의학 연구소" + }, "healthcare/midwife": { "name": "조산사", "terms": "산파" @@ -4085,6 +4163,12 @@ "name": "성인용 게임방", "terms": "도박,노름,슬롯머신" }, + "leisure/amusement_arcade": { + "name": "오락실" + }, + "leisure/beach_resort": { + "name": "해변 리조트" + }, "leisure/bird_hide": { "name": "탐조대", "terms": "감시대,전망대,조망대,새,조류" @@ -4156,6 +4240,9 @@ "name": "자연 보호 구역", "terms": "자연 보호 구역, 개발 제한 구역" }, + "leisure/outdoor_seating": { + "name": "야외 좌석 구역" + }, "leisure/park": { "name": "공원", "terms": "공원" @@ -4283,6 +4370,9 @@ "name": "수평갱", "terms": "횡갱" }, + "man_made/antenna": { + "name": "안테나" + }, "man_made/breakwater": { "name": "방파제", "terms": "방파제" @@ -4334,6 +4424,10 @@ "name": "전망대", "terms": "관찰탑, 감시탑" }, + "man_made/observatory": { + "name": "관측소", + "terms": "천문대,기상대" + }, "man_made/petroleum_well": { "name": "유정", "terms": "유정" @@ -4458,6 +4552,9 @@ "name": "황무지", "terms": "황무지" }, + "natural/mud": { + "name": "진흙" + }, "natural/peak": { "name": "정상", "terms": "봉우리,산꼭대기,정점,첨봉,언덕,산" @@ -5032,6 +5129,10 @@ "name": "상점", "terms": "가게" }, + "shop/agrarian": { + "name": "농업 용품 가게", + "terms": "농기계,씨앗,종자,농약,살충제,비료,농기구" + }, "shop/alcohol": { "name": "주류 상점", "terms": "알코올,술,맥주,와인,포도주" @@ -5625,18 +5726,6 @@ "name": "유턴 금지", "terms": "유턴 금지" }, - "type/restriction/only_left_turn": { - "name": "좌회전 전용", - "terms": "좌회전 전용" - }, - "type/restriction/only_right_turn": { - "name": "우회전 전용", - "terms": "우회전 전용" - }, - "type/restriction/only_straight_on": { - "name": "회전 금지", - "terms": "회전 금지" - }, "type/route": { "name": "노선", "terms": "경로, 노선" @@ -5663,10 +5752,16 @@ "type/route/horse": { "name": "승마 노선" }, + "type/route/light_rail": { + "name": "경전철 노선" + }, "type/route/pipeline": { "name": "파이프라인 노선", "terms": "관로 노선,도관 노선" }, + "type/route/piste": { + "name": "피스트/스키 노선" + }, "type/route/power": { "name": "전력 노선" }, @@ -5957,9 +6052,6 @@ } }, "stamen-terrain-background": { - "attribution": { - "text": "맵 타일 by Stamen Design, CC BY 3.0 이하" - }, "name": "Stamen 지형" }, "tf-cycle": { diff --git a/vendor/assets/iD/iD/locales/ku.json b/vendor/assets/iD/iD/locales/ku.json index cb12885d0..cfb02583f 100644 --- a/vendor/assets/iD/iD/locales/ku.json +++ b/vendor/assets/iD/iD/locales/ku.json @@ -2,7 +2,7 @@ "ku": { "modes": { "add_area": { - "title": "Herêm" + "title": "Qad" }, "add_line": { "title": "Xêz" @@ -23,31 +23,86 @@ "title": "Çarçik", "key": "S" }, + "straighten": { + "key": "S" + }, "delete": { "title": "Jê bibe" + }, + "disconnect": { + "key": "D" + }, + "merge": { + "key": "C" + }, + "move": { + "key": "M" + }, + "reflect": { + "key": { + "long": "T", + "short": "Y" + } } }, "translate": { "localized_translation_name": "Nav" }, + "zoom_in_edit": "Ji bo guherandinê nêzîk bike", "login": "têkeve", "logout": "derkeve", "commit": { - "save": "Bar bike", - "cancel": "Betal bike" + "save": "Bişîne", + "cancel": "Betal bike", + "deleted": "Hate jêbirin", + "created": "Hate afirandin" + }, + "contributors": { + "list": "Guherînên {users}", + "truncated_list": "Guherînên {users} û {count} yên din" }, "info_panels": { + "key": "I", + "background": { + "key": "B", + "source": "Çavkanî", + "description": "Danasîn" + }, "history": { - "title": "Dîrok" + "key": "H", + "title": "Dîrok", + "version": "Guherto", + "edited_by": "Hat guherîn ji alî" + }, + "measurement": { + "area": "Qad" } }, + "geometry": { + "area": "qad" + }, + "geolocate": { + "title": "Cihê min nîşan bide" + }, "inspector": { "search": "Lêbigere", + "feature_list": "Li bireseran bigere", "check": { "yes": "Erê", "no": "Na" } }, + "map_data": { + "title": "Daneyên nexşeyê", + "description": "Daneyên nexşeyê" + }, + "save": { + "title": "Qeyd bike" + }, + "zoom": { + "in": "Nêzîk bike", + "out": "Dûr bike" + }, "help": { "title": "Alîkarî", "help": { @@ -60,6 +115,232 @@ "points": { "title": "Nuqte" } + }, + "shortcuts": { + "key": { + "delete": "Jê bibe" + }, + "editing": { + "commands": { + "save": "Guherandinan qeyd bike" + } + } + }, + "presets": { + "fields": { + "access": { + "types": { + "access": "Hemû" + } + }, + "address": { + "label": "Adrês", + "placeholders": { + "city": "Bajar", + "city!vn": "Bajar/Bajarok", + "conscriptionnumber": "123", + "country": "Welat", + "county!jp": "Navçe", + "district": "Navçe", + "hamlet": "Mezra", + "housenumber": "123", + "province": "Parêzgeh", + "state": "Dewlet", + "street": "Kolan" + } + }, + "aerialway": { + "label": "Cûre" + }, + "aerialway/summer/access": { + "options": { + "exit": "Derkeve" + } + }, + "aeroway": { + "label": "Cûre" + }, + "amenity": { + "label": "Cûre" + }, + "area/highway": { + "label": "Cûre" + }, + "artwork_type": { + "label": "Cûre" + }, + "barrier": { + "label": "Cûre" + }, + "bicycle_parking": { + "label": "Cûre" + }, + "board_type": { + "label": "Cûre" + }, + "boules": { + "label": "Cûre" + }, + "boundary": { + "label": "Cûre" + }, + "bridge": { + "label": "Cûre" + }, + "bunker_type": { + "label": "Cûre" + }, + "castle_type": { + "label": "Cûre" + }, + "club": { + "label": "Cûre" + }, + "construction": { + "label": "Cûre" + }, + "country": { + "label": "Welat" + }, + "craft": { + "label": "Cûre" + }, + "crossing": { + "label": "Cûre" + }, + "cutting": { + "label": "Cûre" + }, + "direction_cardinal": { + "options": { + "E": "Rojhilat", + "ENE": "Rojhilat-bakurê rojhilat", + "ESE": "Rojhilat-başûrê rojhilat", + "N": "Bakur", + "NE": "Bakurê rojava", + "NNE": "Bakur-bakurê rojhilat", + "NNW": "Bakur-bakurê rojava", + "NW": "Bakurê rojava", + "S": "Başûr", + "SE": "Başûrê rojhilat", + "SSE": "Başûr-başûrê rojhilat", + "SSW": "Başûr-başûrê rojava", + "SW": "Başûrê rojava", + "W": "Rojava", + "WNW": "Rojava-bakurê rojava", + "WSW": "Rojava-başûrê rojava" + } + }, + "electrified": { + "options": { + "no": "Na" + } + }, + "embankment": { + "label": "Cûre" + }, + "entrance": { + "label": "Cûre" + }, + "fax": { + "label": "Faks" + }, + "fire_hydrant/type": { + "label": "Cûre", + "options": { + "wall": "Dîwar" + } + }, + "ford": { + "label": "Cûre" + }, + "generator/source": { + "label": "Çavkanî" + }, + "generator/type": { + "label": "Cûre" + }, + "government": { + "label": "Cûre" + }, + "highway": { + "label": "Cûre" + }, + "historic": { + "label": "Cûre" + }, + "information": { + "label": "Cûre" + }, + "internet_access": { + "options": { + "no": "Na", + "yes": "Erê" + } + }, + "lamp_type": { + "label": "Cûre" + }, + "landuse": { + "label": "Cûre" + }, + "leisure": { + "label": "Cûre" + }, + "man_made": { + "label": "Cûre" + }, + "manhole": { + "label": "Cûre" + }, + "map_type": { + "label": "Cûre" + }, + "memorial": { + "label": "Cûre" + }, + "name": { + "label": "Nav" + }, + "oneway_yes": { + "options": { + "no": "Na", + "yes": "Erê" + } + }, + "parking": { + "label": "Cûre" + }, + "place": { + "label": "Cûre" + }, + "power": { + "label": "Cûre" + }, + "second_hand": { + "options": { + "no": "Na", + "yes": "Erê" + } + }, + "takeaway": { + "options": { + "no": "Na", + "yes": "Erê" + } + }, + "trees": { + "label": "Dar" + }, + "wikipedia": { + "label": "Wîkîpediya" + } + }, + "presets": { + "landuse/forest": { + "name": "Daristan" + } + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/lt.json b/vendor/assets/iD/iD/locales/lt.json index 954d40e7c..1a5c1e4a4 100644 --- a/vendor/assets/iD/iD/locales/lt.json +++ b/vendor/assets/iD/iD/locales/lt.json @@ -520,13 +520,7 @@ } }, "success": { - "edited_osm": "Pakeitėte OSM!", "just_edited": "JÅ«s ką tik pakeitėte OpenStreetMap!", - "view_on_osm": "ŽiÅ«rėti OSM žemėlapyje", - "facebook": "Pasidalinti Facebook'e", - "twitter": "Pasidalinti Twitter'yje", - "google": "Pasidalinti Google+", - "help_html": "JÅ«sų pakeitimai turėtų bÅ«ti matomi „Standartiniame“ sluoksnyje po kelių minučių. Kituose sluoksniuose ir kai kurios savybės gali pasirodyti vėliau.", "help_link_text": "Detalės", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -1538,9 +1532,6 @@ "trees": { "label": "Medžiai" }, - "vending": { - "label": "Prekių tipas" - }, "visibility": { "label": "Matomumas" }, @@ -3165,18 +3156,6 @@ "name": "Jokio apsisukimo", "terms": "Negalima apsisukti" }, - "type/restriction/only_left_turn": { - "name": "Sukimas tik į kairę", - "terms": "Tik į kairę" - }, - "type/restriction/only_right_turn": { - "name": "Sukimas tik į deÅ¡inę", - "terms": "Tik į deÅ¡inę" - }, - "type/restriction/only_straight_on": { - "name": "Jokių posÅ«kių", - "terms": "Nėra posÅ«kių" - }, "type/route": { "name": "MarÅ¡rutas", "terms": "MarÅ¡rutas" diff --git a/vendor/assets/iD/iD/locales/lv.json b/vendor/assets/iD/iD/locales/lv.json index 8cb5b56f6..1ddca6e9f 100644 --- a/vendor/assets/iD/iD/locales/lv.json +++ b/vendor/assets/iD/iD/locales/lv.json @@ -217,12 +217,7 @@ } }, "success": { - "edited_osm": "JÅ«s izmainÄ«jāt OSM!", - "just_edited": "JÅ«s nupat rediģējāt OpenStreetMap", - "view_on_osm": "ApskatÄ«t OSM", - "facebook": "DalÄ«ties Facebook", - "twitter": "DalÄ«ties uz Facebook", - "google": "DalÄ«ties uz Google+" + "just_edited": "JÅ«s nupat rediģējāt OpenStreetMap" }, "confirm": { "cancel": "Atcelt" diff --git a/vendor/assets/iD/iD/locales/mg.json b/vendor/assets/iD/iD/locales/mg.json index 106a82ffd..920ca0ce3 100644 --- a/vendor/assets/iD/iD/locales/mg.json +++ b/vendor/assets/iD/iD/locales/mg.json @@ -17,7 +17,7 @@ }, "browse": { "title": "Hisava.", - "description": "Akisaho ary hangezao ny sarintany." + "description": "Akisaho ary hakaikezo ny sarintany." }, "draw_area": { "tail": "Tsindrio raha hampiditra vona eo faritra misy anao. Tsindrio ilay teboka voalohany raha hamarana ny fanoritana faritra." @@ -204,6 +204,20 @@ } } }, + "zoom_in_edit": "Hakaikezo raha hanova", + "info_panels": { + "background": { + "zoom": "Hakaiky" + } + }, + "zoom": { + "in": "Hanakaiky", + "out": "Hanalavitra" + }, + "cannot_zoom": "Tsy afaka manalavitra noho izao intsony amin'ity maody ity.", + "gpx": { + "zoom": "Hanangeza araky ny sosona" + }, "intro": { "graph": { "block_number": "", @@ -218,6 +232,13 @@ "suburb": "", "countrycode": "mg" } + }, + "shortcuts": { + "browsing": { + "navigation": { + "zoom": "Hanakaiky / Hanalavitra" + } + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/mk.json b/vendor/assets/iD/iD/locales/mk.json index cd42f8143..289e1c99b 100644 --- a/vendor/assets/iD/iD/locales/mk.json +++ b/vendor/assets/iD/iD/locales/mk.json @@ -412,13 +412,7 @@ } }, "success": { - "edited_osm": "Уреден OSM!", "just_edited": "Штотуку го уредивте OpenStreetMap!", - "view_on_osm": "Погл. на OSM", - "facebook": "Сподели на Фејсбук", - "twitter": "Сподели на Твитер", - "google": "Сподели на Гугл+", - "help_html": "Вашите промени треба да се појават во слојот „Стандарден“ за некоја минута. На другите слоеви и извесни елементи може да им треба повеќе време.", "help_link_text": "Подробно", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -1457,9 +1451,6 @@ "trees": { "label": "Дрва" }, - "vending": { - "label": "Вид стока" - }, "visibility": { "label": "Видливост", "options": { @@ -3993,18 +3984,6 @@ "name": "Забранет пресврт", "terms": "<преведете со истозначници или сродни поими на „Забранет пресврт“, одделени со запирки>" }, - "type/restriction/only_left_turn": { - "name": "Дозволено вртење само лево", - "terms": "<преведете со истозначници или сродни поими на „Дозволено вртење само лево“, одделени со запирки>" - }, - "type/restriction/only_right_turn": { - "name": "Дозволено вртење само десно", - "terms": "<преведете со истозначници или сродни поими на „Дозволено вртење само десно“, одделени со запирки>" - }, - "type/restriction/only_straight_on": { - "name": "Забрането вртење", - "terms": "<преведете со истозначници или сродни поими на „Забрането вртење“, одделени со запирки>" - }, "type/route": { "name": "Правец", "terms": "<преведете со истозначници или сродни поими на „Правец“, одделени со запирки>" diff --git a/vendor/assets/iD/iD/locales/ms.json b/vendor/assets/iD/iD/locales/ms.json index 179c3192c..e509b5cf2 100644 --- a/vendor/assets/iD/iD/locales/ms.json +++ b/vendor/assets/iD/iD/locales/ms.json @@ -577,13 +577,7 @@ } }, "success": { - "edited_osm": "OSM telah Disunting!", "just_edited": "Anda baru sahaja telah menyunting OpenStreetMap!", - "view_on_osm": "Lihat dalam OSM", - "facebook": "Kongsi melalui Facebook", - "twitter": "Kongsi melalui Twitter", - "google": "Kongsi melalui Google+", - "help_html": "Perubahan anda akan muncul pada lapisan \"Standard\" dalam beberapa minit. Lapisan lain, dan ciri-ciri tertentu, mungkin mengambil masa yang lebih lama.", "help_link_text": "Butiran", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -2773,7 +2767,6 @@ "attribution": { "text": "Terma & Maklum Balas" }, - "description": "Had-had imejan dan tarikh rakaman dibuat. Label hanya kelihatan pada paras zum 14 dan lebih tinggi.", "name": "Vintaj Imejan Satelit Premium DigitalGlobe" }, "DigitalGlobe-Standard": { @@ -2787,7 +2780,6 @@ "attribution": { "text": "Terma & Maklum Balas" }, - "description": "Had-had imejan dan tarikh rakaman dibuat. Label hanya kelihatan pada paras zum 14 dan lebih tinggi.", "name": "Vintaj Imejan Satelit Standard DigitalGlobe" }, "EsriWorldImagery": { @@ -2883,7 +2875,6 @@ "attribution": { "text": "basemap.at" }, - "description": "Petaasas Austria, berdasarkan data kerajaan.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -2944,9 +2935,6 @@ "name": "skobbler" }, "stamen-terrain-background": { - "attribution": { - "text": "Jubin peta oleh Stamen Design, di bawah CC BY 3.0" - }, "name": "Rupa Bumi Stamen" }, "tf-cycle": { @@ -2961,6 +2949,57 @@ }, "name": "Landskap Thunderforest" } + }, + "community": { + "Bay-Area-OpenStreetMappers": { + "name": "OpenStreetMappers Kawasan Teluk", + "description": "Perbaiki OpenStreetMap di Kawasan Teluk", + "extendedDescription": "Kumpulan ini ialah mengenai memperkembangkan komuniti OpenStreetMap di Kawasan Teluk ini. Acara-acara kami adalah terbuka kepada sesiapa sahaja, dari peminat sumber terbuka, penunggang basikal, profesional GIS, pengcache geo, dan sebagainya. Sesiapa sahaja dan semua orang yang berminat dalam peta, membuat peta, dan data peta percuma adalah dialu-alukan untuk menyertai kumpulan kami serta menghadiri acara-acara kami." + }, + "Central-Pennsylvania-OSM": { + "name": "OSM Pennsylvania Pusat", + "description": "Komuniti pemetaan atas talian yang berpusat di luar State College, PA" + }, + "Dallas-Fort-Worth-OSM": { + "name": "OSM Dallas-Fort Worth", + "description": "Kumpulan pengguna OpenStreetMap bagi Dallas-Fort Worth", + "extendedDescription": "Dallas, Fort Worth, dan kesemua bandar di antaranya adalah berlimpah dengan orang-orang yang kreatif dan celik teknologi. Visi kumpulan pengguna ini ialah untuk mencari cara-cara yang baru untuk menggunakan sumber OSM yang hebat." + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "Pertemuan untuk peminat-peminat peta di kawasan Philadelphia", + "extendedDescription": "GeoPhilly menyatukan pemaju, ahli geografi, gek data, peminat sumber terbuka, penggodam awam dan kaki peta dalam perkongsian minat kita tentang peta dan cerita-cerita yang dikongsi sama. Jika anda menggunakan peta sebagai sebahagian dari kerja anda atau hanya untuk mempelajari dengan lebih lanjut, ini ialah pertemuan untuk anda! Acara kami bertujuan untuk menjadi terbuka, mesra, berpendidikan dan bersosial dan berjulat dari jam gembira kepada ceramah kilat atau malah bengkel. Datanglah untuk mencipta komuniti yang berpelbagai, berinspirasi di Philadelphia dengan kami!" + }, + "Mapping-DC-meetup": { + "name": "Memeta DC", + "description": "Perbaiki OpenStreetMap di kawasan DC", + "extendedDescription": "Kami ialah sebuah kumpulan pemeta sukarela yang bertujuan untuk memperbaiki OpenStreetMap di kawasan DC. Kami juga berhasrat untuk mengajar yang lain tentang ekosistem OSM, penganalisaan data, kartografi, dan GIS. Kami berkumpul setiap bulan yang lain dalam pertemuan untuk memfokuskan pada satu kawasan bandar kami." + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "Kumpulan pengguna OpenStreetMap bagi Chattanooga" + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC", + "description": "Pemeta dan pengguna OpenStreetMap, pemaju dan peminat di kawasan Metropolitan New York" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland", + "description": "Pemeta dan pengguna OpenStreetMap di kawasan Portland", + "extendedDescription": "OpenStreetMap (OSM) ialah sebuah peta dunia yang dibuat oleh orang-orang seperti anda. Ianya sebuah peta yang anda buat, diberi secara percuma seperti wikipedia. Lihat osm.org bagi yang lanjut, dan datang sertai kami pada pertemuan untuk berbincang tentang peta, menyumbang ke OSM, dan berseronok!" + }, + "OSM-US-Slack": { + "name": "OpenStreetMap US Slack", + "description": "Semua dialu-alukan hadir! Daftar di {signupUrl}" + }, + "Maptime-Australia-Slack": { + "name": "Maptime Australia Slack", + "description": "Daftar di {signupUrl}" + }, + "OSM-Reddit": { + "name": "OpenStreetMap di Reddit", + "description": "/r/openstreetmap/ ialah sebuah tempat yang hebat untuk mempelajari lebih lanjut tentang OpenStreetMap. Tanya apa sahaja kepada kami!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/nl.json b/vendor/assets/iD/iD/locales/nl.json index b356713d1..da141ff15 100644 --- a/vendor/assets/iD/iD/locales/nl.json +++ b/vendor/assets/iD/iD/locales/nl.json @@ -1,5 +1,9 @@ { "nl": { + "icons": { + "information": "info", + "remove": "verwijder" + }, "modes": { "add_area": { "title": "Vlak", @@ -291,6 +295,36 @@ } } }, + "restriction": { + "controls": { + "distance_up_to": "Tot en met {distance}", + "via_up_to_one": "Tot en met 1 weg", + "via_up_to_two": "Tot en met 2 wegen" + }, + "help": { + "indirect": "(indirect)", + "turn": { + "no_left_turn": "NIET links afslaan {indirect}", + "no_right_turn": "NIET rechts afslaan {indirect}", + "no_u_turn": "NIET U-bochten gebruiken {indirect}", + "no_straight_on": "NIET rechtdoor gaan {indirect}", + "only_left_turn": "ALLEEN links afslaan {indirect}", + "only_right_turn": "ALLEEN rechts afslaan {indirect}", + "only_u_turn": "ALLEEN U-bochten gebruiken {indirect}", + "only_straight_on": "ALLEEN rechtdoor gaan {indirect}", + "allowed_left_turn": "Links afslaan toegestaan {indirect}", + "allowed_right_turn": "Rechts afslaan toegestaan {indirect}", + "allowed_u_turn": "U-bochten gebruiken toegestaan {indirect}", + "allowed_straight_on": "Rechtdoor gaan toegestaan {indirect}" + }, + "from": "VAN", + "via": "VIA", + "to": "NAAR", + "from_name": "{from} {fromName}", + "from_name_to_name": "{from} {fromName} {to} {toName}", + "via_names": "{via} {viaNames}" + } + }, "undo": { "tooltip": "Ongedaan maken: {action}", "nothing": "Niets om ongedaan te maken." @@ -603,15 +637,15 @@ } }, "success": { - "edited_osm": "OSM aangepast!", "just_edited": "Je hebt OpenStreetMap bewerkt!", - "view_on_osm": "Bekijk op OSM", - "facebook": "Deel op Facebook", - "twitter": "Deel op Twitter", - "google": "Deel op Google+", - "help_html": "Je wijzigingen zouden binnen enkele minuten zichtbaar moeten zijn in de \"Standaard\"-laag. Het updaten van sommige soorten objecten kan langer duren. Andere lagen dan de \"Standaard\"-laag worden minder vaak bijgewerkt.", "help_link_text": "Meer hierover, in het Engels", - "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F", + "view_on_osm": "Bekijk wijzigingen op OSM", + "more": "Meer", + "events": "Evenementen", + "languages": "Talen: {languages}", + "missing": "Mist er iets in deze lijst?", + "tell_us": "Meld het ons!" }, "confirm": { "okay": "Oké", @@ -846,6 +880,24 @@ "using": "Om een GPS-track te gebruiken voor het bewerken, sleep je een bestand naar dit kaartbewerkingsprogramma. Als het herkend wordt, zal het getekend worden als een heldere paarse lijn. Open het \"{data} **Kaartgegevens**\"-paneel naast de kaart om je GPS-data aan of uit te zetten of er op in te zoomen.", "tracing": "De GPS-track wordt niet automatisch verzonden naar OpenStreetMap. De beste manier om het te gebruiken is als referentie voor nieuwe objecten die je toevoegt.", "upload": "Je kan ook [je GPS-data uploaden naar OpenStreetMap](https://www.openstreetmap.org/trace/create) zodat andere gebruikers hen ook kunnen gebruiken." + }, + "field": { + "restrictions": { + "about": { + "title": "Over" + }, + "inspecting": { + "from_shadow": "{fromShadow} **VAN segment**", + "allow_shadow": "{allowShadow} **NAAR toegestaan**", + "restrict_shadow": "{restrictShadow} **NAAR beperkt**", + "only_shadow": "{onlyShadow} **NAAR alleen**" + }, + "modifying": { + "allow_turn": "{allowTurn} **NAAR toegestaan**", + "restrict_turn": "{restrictTurn} **NAAR beperkt**", + "only_turn": "{onlyTurn} **NAAR alleen**" + } + } } }, "intro": { @@ -1222,8 +1274,15 @@ "square_feet": "{quantity} sq ft", "square_miles": "{quantity} sq mi", "acres": "{quantity} ac", + "meters": "{quantity} m", "kilometers": "{quantity} km", "square_meters": "{quantity} m²", + "square_kilometers": "{quantity} km²", + "hectares": "{quantity} ha", + "area_pair": "{area1} ({area2})", + "arcdegrees": "{quantity}°", + "arcminutes": "{quantity}′", + "arcseconds": "{quantity}″", "north": "N", "south": "Z", "east": "O", @@ -1622,6 +1681,9 @@ "cycleway:right": "Rechterkant" } }, + "dance/style": { + "label": "Dansstijlen" + }, "date": { "label": "Datum" }, @@ -1687,6 +1749,9 @@ "display": { "label": "Weergave" }, + "distance": { + "label": "Totale afstand" + }, "dock": { "label": "Type" }, @@ -1727,6 +1792,9 @@ "except": { "label": "Uitzonderingen" }, + "faces": { + "label": "Gezichten" + }, "fax": { "label": "Fax", "placeholder": "+31 42 123 4567" @@ -1838,6 +1906,34 @@ "label": "Lussen", "placeholder": "1, 2, 4 …" }, + "horse_dressage": { + "label": "Dressuur", + "options": { + "equestrian": "Ja", + "undefined": "Nee" + } + }, + "horse_riding": { + "label": "Paardrijden", + "options": { + "horse_riding": "Ja", + "undefined": "Nee" + } + }, + "horse_scale": { + "label": "Moeilijkheidsgraad paardrijden", + "options": { + "common": "Makkelijk: Geen problemen of moeilijkheden. (standaard)" + }, + "placeholder": "Moeilijk, gevaarlijk..." + }, + "horse_stables": { + "label": "Rijstal", + "options": { + "stables": "Ja", + "undefined": "Nee" + } + }, "iata": { "label": "IATA" }, @@ -1857,6 +1953,9 @@ "indoor": { "label": "Binnen" }, + "industrial": { + "label": "Type" + }, "information": { "label": "Type" }, @@ -1977,6 +2076,10 @@ "label": "Snelheidsbeperking", "placeholder": "40, 50, 60 …" }, + "maxspeed/advisory": { + "label": "Adviessnelheid", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Maximale verblijftijd" }, @@ -2565,8 +2668,18 @@ "label": "Type", "placeholder": "Standaard" }, + "usage_rail": { + "label": "Gebruikstype", + "options": { + "industrial": "Industrieel", + "main": "Hoofd", + "military": "Militair", + "test": "Test", + "tourism": "Toerisme" + } + }, "vending": { - "label": "Soort waren" + "label": "Typen goederen" }, "visibility": { "label": "Zichtbaarheid", @@ -2661,6 +2774,9 @@ "name": "Reclamebord", "terms": "billboard" }, + "advertising/column": { + "name": "Reclamezuil" + }, "aerialway": { "name": "Kabelbaan" }, @@ -3176,6 +3292,9 @@ "name": "Sigarettenautomaat", "terms": "sigarettenautomaat,tabakautomaat" }, + "amenity/vending_machine/coffee": { + "name": "Koffieautomaat" + }, "amenity/vending_machine/condoms": { "name": "Condoomautomaat", "terms": "automaat" @@ -3283,6 +3402,9 @@ "name": "Valtoren", "terms": "valattractie,grote val" }, + "attraction/maze": { + "name": "Doolhof" + }, "attraction/pirate_ship": { "name": "Piratenschip", "terms": "piratenboot" @@ -3890,6 +4012,9 @@ "name": "Palliatievezorgcentrum", "terms": "hospice,hospitium,terminale zorg,terminaal,ongeneeslijk ziek,terminaal ziek,hospicezorg,palliatieve zorg,palliatievezorgeenheid" }, + "healthcare/laboratory": { + "name": "Medisch laboratorium" + }, "healthcare/midwife": { "name": "Verloskundige", "terms": "vroedkundige,vroedvrouw" @@ -4346,6 +4471,9 @@ "leisure/amusement_arcade": { "name": "Speelhal" }, + "leisure/beach_resort": { + "name": "Strandoord" + }, "leisure/bird_hide": { "name": "Vogelkijkscherm of -hut", "terms": "vogelkijkhut,vogelkijkscherm" @@ -4362,6 +4490,9 @@ "name": "Danszaal", "terms": "ballroom,jive,swing,tango,wals" }, + "leisure/dancing_school": { + "name": "Dansschool" + }, "leisure/dog_park": { "name": "Hondenpark", "terms": "losloopgebied voor honden" @@ -4577,6 +4708,9 @@ "name": "Horizontale mijn- of grotingang", "terms": "ingang,ondergronds,grot,mijn,adit" }, + "man_made/antenna": { + "name": "Antenne" + }, "man_made/breakwater": { "name": "Golfbreker", "terms": "golven,havenbescherming,kustbescherming,stortsteengolfbreker,caissongolfbreker,drijvende golfbreker,palengolfbreker,havengolfbreker,strekdammen" @@ -4627,6 +4761,9 @@ "man_made/observation": { "name": "Uitkijktoren" }, + "man_made/observatory": { + "name": "Observatorium" + }, "man_made/petroleum_well": { "name": "Oliebron", "terms": "olieput,gasbron" @@ -4742,6 +4879,9 @@ "natural/heath": { "name": "Heideveld" }, + "natural/mud": { + "name": "Modder" + }, "natural/peak": { "name": "Top", "terms": "bergtop,heuveltop" @@ -5728,6 +5868,9 @@ "name": "Dierenwinkel", "terms": "dierenzaak,dierenwinkel,huisdieren" }, + "shop/pet_grooming": { + "name": "Huisdierenverzorgingswinkel" + }, "shop/photo": { "name": "Fotowinkel" }, @@ -6011,16 +6154,16 @@ "terms": "geen U-bocht,U-bocht verboden,omkeren verboden,omdraaien verboden,verboden om te draaien,verboden om te keren,niet omdraaien,niet keren,verboden te keren,keren verboden" }, "type/restriction/only_left_turn": { - "name": "Enkel links afslaan", - "terms": "verplicht links afslaan,links afslaan verplicht,enkel links inslaan,verplicht links inslaan,links inslaan verplicht" + "name": "Alleen links afslaan" }, "type/restriction/only_right_turn": { - "name": "Enkel rechts afslaan", - "terms": "verplicht rechts afslaan,rechts afslaan verplicht,enkel rechts inslaan,verplicht rechts inslaan,rechts inslaan verplicht" + "name": "Alleen rechts afslaan" }, "type/restriction/only_straight_on": { - "name": "Enkel rechtdoor", - "terms": "rechtdoor,niet draaien,niet afslaan,niet inslaan,draaien verboden,afslaan verboden,draaien verboden" + "name": "Alleen rechtdoor" + }, + "type/restriction/only_u_turn": { + "name": "Alleen U-bocht" }, "type/route": { "name": "Route" @@ -6181,7 +6324,7 @@ "attribution": { "text": "Gebruiksvoorwaarden & feedback" }, - "description": "Luchtfoto grenzen en opnamedatum. Labels verschijnen bij zoomniveau 14 en hoger.", + "description": "Beeldgrenzen en opnamedata. Labels verschijnen vanaf zoomniveau 13 en hoger.", "name": "DigitalGlobe-premiumbeelden Vintage" }, "DigitalGlobe-Standard": { @@ -6195,14 +6338,14 @@ "attribution": { "text": "Gebruiksvoorwaarden & feedback" }, - "description": "Luchtfoto grenzen en opnamedatum. Labels verschijnen bij zoomniveau 14 en hoger.", + "description": "Beeldgrenzen en opnamedata. Labels verschijnen vanaf zoomniveau 13 en hoger.", "name": "DigitalGlobe-premiumbeelden Vintage" }, "EsriWorldImagery": { "attribution": { "text": "Voorwaarden & Terugkoppeling" }, - "description": "Esri world imagery", + "description": "Esri world imagery.", "name": "Esri World Imagery" }, "EsriWorldImageryClarity": { @@ -6279,6 +6422,10 @@ "description": "Geel = Publiek domein kaartgegevens van de US Census. Rood = data niet gevonden in OpenStreetMap", "name": "TIGER Roads 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "Snelwegy: Groene omlijning = ongeclassificeerd. Bruine omlijning = route. Oppervlak: gravel = lichtbruin gevuld, asfalt = zwart, bestraat = grijs, grond = wit, beton = blauw, gras = groen. Seizoensgebonden = witte balken", + "name": "U.S. Forest Roads-laag" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, OpenStreetMap bijdragers, CC by-SA 3.0" @@ -6313,14 +6460,14 @@ "attribution": { "text": "basemap.at" }, - "description": "Basiskaart van Oostenrijk, gebaseerd op overheidsgegevens.", + "description": "Basiskaart Oostenrijk, gebaseerd op overheidsgegevens.", "name": "basemap.at" }, "basemap.at-orthofoto": { "attribution": { "text": "basemap.at" }, - "description": "Orthofotolaag voorzien door basemap.at. 'Opvolger' van beelden van geoimage.at.", + "description": "Orthofoto-laag voorzien door basemap.at. 'Opvolger' van geoimage.at.", "name": "basemap.at Orthofoto" }, "hike_n_bike": { @@ -6375,7 +6522,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Kaarttegels door Stamen Design, onder CC BY 3.0" + "text": "Kaarttegels van Stamen Design, onder CC BY 3.0. Gegevens van OpenStreetMap, onder ODbL" }, "name": "Stamen Terrein" }, @@ -6391,6 +6538,355 @@ }, "name": "Thunderforest Landschap" } + }, + "community": { + "cape-coast-youthmappers": { + "description": "Volg ons op Twitter: {url}" + }, + "osm-gh-facebook": { + "name": "OpenStreetMap Ghana op Facebook", + "description": "Facebook-groep voor mensen met interesse in OpenStreetMap." + }, + "osm-gh-twitter": { + "name": "OpenStreetMap Ghana op Twitter", + "description": "Volg ons op Twitter: {url}" + }, + "talk-gh": { + "name": "Talk-gh mailinglijst" + }, + "osm-mg-facebook": { + "name": "Facebook", + "description": "Neem deel aan de OpenStreetMap Madagascar community op Facebook" + }, + "talk-mg": { + "name": "Talk-mg Mailinglijst", + "description": "Plek voor OpenStreetMap bijdragers, gemeenschappen en gebruikers in Madagascar om te delen en te discussiëren." + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap Bangladesh", + "description": "Verbeter OpenStreetMap in Bangladesh" + }, + "OSM-India-facebook": { + "description": "Verbeter OpenStreetMap in India", + "events": { + "sotmasia2018": { + "name": "State of the Map Asia 2018", + "where": "Indian Institute of Management, Bangalore, India" + } + } + }, + "OSM-india-mailinglist": { + "name": "OpenStreetMap India Mailinglijst", + "description": "Talk-in is de officiële Mailinglijst voor de India" + }, + "OSM-india-twitter": { + "name": "OpenStreetMap India Twitter", + "description": "Volg ons op Twitter: {url}" + }, + "OSM-India-Puducherry-Facebook": { + "name": "Free Software Hardware Movement – Facebook", + "description": "FSHM Facebook-pagina om op de hoogte te blijven van community-evenementen, -activiteiten" + }, + "OSM-India-Puducherry-Matrix": { + "name": "Free Software Hardware Movement – Matrix" + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap Indonesië", + "description": "Verbeter OpenStreetMap in Indonesië" + }, + "OSM-japan-facebook": { + "name": "OpenStreetMap Japan" + }, + "OSM-japan-mailinglist": { + "name": "OpenStreetMap Japan Mailinglijst", + "description": "Talk-ja is de officiële Mailinglijst voor Japan" + }, + "OSM-japan-twitter": { + "name": "OpenStreetMap Japan Twitter", + "description": "Volg ons op Twitter: {url}" + }, + "OSM-MY-forum": { + "name": "OpenStreetMap Maleisië Forum", + "description": "Officiële OpenStreetMap Maleisië Forum" + }, + "OSM-MY-matrix": { + "name": "OpenStreetMap Maleisië Riot-kanaal" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap Mongolië", + "description": "Verbeter OpenStreetMap in Mongolia" + }, + "OSM-MMR-facebook": { + "name": "OpenStreetMap Myanmar", + "description": "Verbeter OpenStreetMap in Myanmar" + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap Nepal", + "description": "Verbeter OpenStreetMap in Nepal" + }, + "OSM-PH-facebook": { + "name": "Facebook" + }, + "OSM-PH-mailinglist": { + "name": "Talk-ph Mailinglijst", + "description": "Talk-ph is de officiële Mailinglijst voor de Filipijnen" + }, + "OSM-PH-slack": { + "name": "Slack" + }, + "OSM-PH-telegram": { + "name": "Telegram", + "description": "OpenStreetMap Filipijnen op Telegram" + }, + "OSM-RU-forum": { + "name": "OpenStreetMap RU forum", + "description": "OpenStreetMap Rusland webforum" + }, + "OSM-RU-telegram": { + "name": "Telegram", + "description": "OpenStreetMap Rusland op Telegram" + }, + "OSM-LKA-facebook": { + "name": "OpenStreetMap Sri Lanka", + "description": "Verbeter OpenStreetMap in Sri Lanka" + }, + "OSM-TW-facebook": { + "name": "OpenStreetMap Taiwan", + "description": "Neem deel aan de OpenStreetMap Taiwan community op Facebook" + }, + "OSM-TW-mailinglist": { + "name": "OpenStreetMap Taiwan Mailinglijst", + "description": "Talk-tw is de officiële Mailinglijst voor Taiwan" + }, + "at-mailinglist": { + "name": "Talk-at Mailinglijst", + "description": "Talk-at is de officiële Mailinglijst voor Oostenrijk" + }, + "at-twitter": { + "name": "OpenStreetMap Oostenrijk Twitter", + "description": "Volg ons op Twitter: {url}" + }, + "osm-at": { + "name": "OpenStreetMap Oostenrijk" + }, + "be-facebook": { + "description": "Neem deel aan de OpenStreetMap België community op Facebook" + }, + "be-mailinglist": { + "name": "Talk-be Mailinglijst", + "description": "Talk-be is de officiële Mailinglijst voor België" + }, + "be-twitter": { + "name": "OpenStreetMap België Twitter", + "description": "Volg ons op Twitter: {url}" + }, + "byosm": { + "name": "OpenStreetMap Wit-Rusland", + "description": "OpenStreetMap Wit-Rusland op Telegram" + }, + "talk-cz-mailinglist": { + "name": "Talk-cz Mailinglijst", + "description": "Talk-cz is de officiële Mailinglijst voor Tsjechië" + }, + "de-irc": { + "name": "OpenStreetMap Duitsland IRC" + }, + "de-mailinglist": { + "name": "Talk-de Mailinglijst", + "description": "Talk-de is de officiële Mailinglijst voor Duitsland" + }, + "osm-de": { + "name": "OpenStreetMap Duitsland", + "description": "Het platform voor informatie over OpenStreetMap in Duitsland" + }, + "OSM-ES-telegram": { + "name": "Telegram", + "description": "OpenStreetMap Spanje op Telegram" + }, + "fr-facebook": { + "name": "OpenStreetMap Frankrijk Facebook-pagina", + "description": "OpenStreetMap Frankrijk Facebook-pagina" + }, + "fr-twitter": { + "name": "OpenStreetMap Frankrijk op Twitter", + "description": "OpenStreetMap Frankrijk op Twitter: {url}" + }, + "OSM-Rome-meetup": { + "name": "Incontro Mappatori Romani", + "description": "Verbeter OpenStreetMap in Rome" + }, + "talk-it-lazio": { + "name": "OpenStreetMap IT Lazio", + "extendedDescription": "Mailinglijst voor Rome en Lazio." + }, + "OSM-PL-facebook-group": { + "name": "OpenStreetMap Polen Facebook-groep" + }, + "se-facebook": { + "name": "OpenStreetMap Zweden Facebook-pagina", + "description": "OpenStreetMap Zweden op Facebook" + }, + "se-twitter": { + "name": "OpenStreetMap Zweden op Twitter", + "description": "Volg ons op Twitter: {url}" + }, + "OSM-CA-Slack": { + "name": "Slack" + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap Vancouver" + }, + "Bay-Area-OpenStreetMappers": { + "name": "Bay Area OpenStreetMappers", + "description": "Verbeter OpenStreetMap in de Bay Area" + }, + "Central-Pennsylvania-OSM": { + "name": "OpenStreetMap Central Pennsylvania" + }, + "Code-for-San-Jose-Slack": { + "name": "Slack" + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM" + }, + "GeoPhilly": { + "name": "GeoPhilly" + }, + "MapMinnesota": { + "name": "MapMinnesota" + }, + "Mapping-DC-meetup": { + "name": "Mapping DC", + "description": "Verbeter OpenStreetMap in District Columbia" + }, + "OpenCleveland-meetup": { + "name": "Open Cleveland", + "description": "Verbeter OpenStreetMap in de regio Cleveland" + }, + "OSM-Boston": { + "name": "OpenStreetMap Boston" + }, + "OSM-Central-Salish-Sea": { + "name": "OpenStreetMap Central Salish Sea" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "De OpenStreetMap-gebruikersgroep voor Chattanooga" + }, + "OSM-Colorado": { + "name": "OpenStreetMap Colorado" + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland" + }, + "OSM-Seattle": { + "name": "OpenStreetMap Seattle" + }, + "OSM-SoCal": { + "name": "OpenStreetMap Zuid Californië" + }, + "OSM-South-Bay": { + "name": "OSM South Bay" + }, + "OSM-Tampa-Bay": { + "name": "OpenStreetMap Tampa Bay" + }, + "OSM-US-Slack": { + "name": "Slack" + }, + "OSM-US": { + "name": "OpenStreetMap Verenigde Staten" + }, + "OSM-Utah": { + "name": "OpenStreetMap Utah" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap Wyoming" + }, + "PHXGeo-meetup": { + "name": "PHXGeo Meetup" + }, + "PHXGeo-twitter": { + "name": "PHXGeo Twitter", + "description": "Volg ons op Twitter: {url}" + }, + "Western-Slope-facebook": { + "name": "Facebook" + }, + "Maptime-Australia-Slack": { + "name": "Slack" + }, + "talk-au": { + "name": "Talk-au Mailinglijst" + }, + "OSM-AR-facebook": { + "name": "Facebook", + "description": "Neem deel aan de OpenStreetMap Argentinië community op Facebook" + }, + "OSM-AR-mailinglist": { + "name": "Talk-ar Mailinglijst" + }, + "OSM-AR-telegram": { + "name": "Telegram", + "description": "OpenStreetMap Argentinië op Telegram" + }, + "OSM-AR-twitter": { + "name": "OpenStreetMap Argentinië Twitter", + "description": "Volg ons op Twitter: {url}" + }, + "Bahia-telegram": { + "name": "Telegram", + "description": "OpenStreetMap Bahia op Telegram" + }, + "OSM-br-mailinglist": { + "name": "Talk-br Mailinglijst", + "description": "Talk-br is de officiële Mailinglijst voor Brazilië" + }, + "OSM-br-telegram": { + "name": "Telegram", + "description": "OpenStreetMap Brazilië op Telegram" + }, + "OSM-br-twitter": { + "name": "OpenStreetMap Brazilië Twitter", + "description": "Volg ons op Twitter: {url}" + }, + "OSM-CL-facebook": { + "name": "Facebook", + "description": "Neem deel aan de OpenStreetMap Chili community op Facebook" + }, + "OSM-CL-mailinglist": { + "name": "Talk-cl Mailinglijst", + "description": "Talk-cl is de officiële Mailinglijst voor Chili" + }, + "OSM-CL-telegram": { + "name": "Telegram", + "description": "OpenStreetMap Chili op Telegram" + }, + "OSM-CL-twitter": { + "name": "OpenStreetMap Chili Twitter", + "description": "Volg ons op Twitter: {url}" + }, + "Maptime-Bogota": { + "name": "Maptime Bogota" + }, + "OSM-CO-facebook": { + "name": "OpenStreetMap Colombia Facebook", + "description": "Wordt lid van de OpenStreetMap Colombia community op Facebook" + }, + "OSM-CO-twitter": { + "name": "OpenStreetMap Colombia Twitter", + "description": "Volg ons op Twitter at {url}" + }, + "OSM-CO": { + "name": "OpenStreetMap Colombia" + }, + "OSM-Reddit": { + "name": "OpenStreetMap op Reddit", + "description": "Op /r/openstreetmap/ vind een levendige dialoog plaats over OpenStreetMap. Hier kun je alles vragen!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/no.json b/vendor/assets/iD/iD/locales/no.json index 180409044..e17a2b8f7 100644 --- a/vendor/assets/iD/iD/locales/no.json +++ b/vendor/assets/iD/iD/locales/no.json @@ -575,13 +575,7 @@ } }, "success": { - "edited_osm": "Redigert OSM!", "just_edited": "Du har akkurat endret OpenStreetMap!", - "view_on_osm": "Vis pÃ¥ OSM", - "facebook": "Del pÃ¥ Facebook", - "twitter": "Del pÃ¥ Twitter", - "google": "Del pÃ¥ Google+", - "help_html": "Endringene dine burde vises i \"standard\"-laget om et par minutter. Andre lag, og visse kartegenskaper, kan ta litt lengre tid.", "help_link_text": "Detaljer" }, "confirm": { @@ -2917,15 +2911,6 @@ "type/restriction/no_u_turn": { "name": "Ingen U-sving" }, - "type/restriction/only_left_turn": { - "name": "PÃ¥budt venstresving" - }, - "type/restriction/only_right_turn": { - "name": "PÃ¥budt høyresving" - }, - "type/restriction/only_straight_on": { - "name": "Ikke tillatt Ã¥ snu" - }, "type/route": { "name": "Rute" }, diff --git a/vendor/assets/iD/iD/locales/pl.json b/vendor/assets/iD/iD/locales/pl.json index 1a315e533..15df5bca1 100644 --- a/vendor/assets/iD/iD/locales/pl.json +++ b/vendor/assets/iD/iD/locales/pl.json @@ -1,5 +1,8 @@ { "pl": { + "icons": { + "undo": "Cofnij" + }, "modes": { "add_area": { "title": "Obszar", @@ -25,6 +28,9 @@ }, "draw_line": { "tail": "Kliknij, aby dodać więcej punktów do linii. Kliknij inne linie, aby je połączyć lub użyj dwukliku, aby zakończyć rysowanie." + }, + "drag_node": { + "connected_to_hidden": "Tego obiektu nie można edytować, ponieważ jest połączony z innym niewidocznym obiektem." } }, "operations": { @@ -288,6 +294,17 @@ } } }, + "restriction": { + "controls": { + "distance": "Odległość", + "via": "Przez" + }, + "help": { + "from": "Z", + "via": "PRZEZ", + "to": "DO" + } + }, "undo": { "tooltip": "Cofnij: {action}", "nothing": "Nie ma nic do cofnięcia." @@ -363,6 +380,7 @@ "key": "H", "title": "Historia", "selected": "{n} wybrano", + "no_history": "Brak Historii (nowy obiekt)", "version": "Wersja", "last_edit": "Ostatnia edycja", "edited_by": "Edytowane przez", @@ -495,7 +513,7 @@ }, "feature": { "points": { - "description": "Punkty", + "description": "Punkty (POI)", "tooltip": "Użyteczne miejsca" }, "traffic_roads": { @@ -508,15 +526,15 @@ }, "paths": { "description": "Ścieżki", - "tooltip": "Chodniki, ścieżki dla pieszych, ścieżki rowerowe, etc." + "tooltip": "Chodniki, ścieżki dla pieszych, ścieżki rowerowe etc." }, "buildings": { "description": "Budynki", - "tooltip": "Budynki, wiaty, garaże, etc." + "tooltip": "Budynki, wiaty, garaże etc." }, "landuse": { "description": "Obiekty użytkowania terenów", - "tooltip": "Lasy, pola, parki, osiedla mieszkaniowe, obszary komercyjne, etc." + "tooltip": "Lasy, pola, parki, osiedla mieszkaniowe, obszary handlowe, biurowe etc." }, "boundaries": { "description": "Granice", @@ -524,19 +542,19 @@ }, "water": { "description": "Obiekty wodne", - "tooltip": "Rzeki, jeziora, stawy, dorzecza, etc." + "tooltip": "Rzeki, jeziora, stawy, dorzecza etc." }, "rail": { "description": "Obiekty kolejowe", "tooltip": "Tory kolejowe" }, "power": { - "description": "Obiekty związane z dystrybucją prądu elektrycznego.", - "tooltip": "Linie energetyczne, elektrownie, podstacje, etc." + "description": "Obiekty dystrybucji prądu elektrycznego", + "tooltip": "Linie energetyczne, elektrownie, podstacje etc." }, "past_future": { "description": "Przeszłość/przyszłość", - "tooltip": "Projektowane, w czasie budowy, opuszczone, wyburzone, etc." + "tooltip": "Obiekty projektowane, w czasie budowy, opuszczone, wyburzone etc." }, "others": { "description": "Inne", @@ -598,15 +616,19 @@ } }, "success": { - "edited_osm": "Zmiany zostały wprowadzone do OSM!", - "just_edited": "Właśnie wprowadziłeś zmiany w OpenStreetMap!", - "view_on_osm": "Wyświetl na OSM", - "facebook": "Podziel się na Facebooku", - "twitter": "Podziel się na Twitterze", - "google": "Podziel się na Google+", - "help_html": "Zmiany powinny pojawić się na warstwie podstawowej mapy w ciągu kilku minut. Inne warstwy mogą odświeżać się dłużej.", + "just_edited": "Właśnie zmieniłeś OpenStreetMap!", + "thank_you": "Dziękujemy za ulepszanie mapy.", + "thank_you_location": "Dziękujemy za ulepszanie mapy w: {where}.", + "help_html": "Zmiany powinny pojawić się na warstwie standardowej mapy w ciągu kilku minut. Inne warstwy mogą odświeżać się dłużej.", "help_link_text": "Więcej informacji", - "help_link_url": "http://wiki.openstreetmap.org/wiki/Pl:FAQ#Kiedy_wprowadzone_przeze_mnie_zmiany_poka.C5.BCa_si.C4.99_na_mapie.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/Pl:FAQ#Kiedy_wprowadzone_przeze_mnie_zmiany_poka.C5.BCa_si.C4.99_na_mapie.3F", + "view_on_osm": "Zobacz zmiany na OSM", + "changeset_id": "Twój zestaw zmian: #{changeset_id}", + "like_osm": "Podoba Ci się OpenStreetMap? Skontaktuj się z innymi mapującymi:", + "more": "Więcej", + "languages": "Języki: {languages}", + "missing": "Brakuje czegoś na tej liście?", + "tell_us": "Daj nam znać!" }, "confirm": { "okay": "OK", @@ -708,7 +730,8 @@ "save_h": "Zapisz", "upload_h": "Wyślij", "backups_h": "Automatyczne kopie zapasowe", - "keyboard_h": "Skróty klawiszowe" + "keyboard_h": "Skróty klawiszowe", + "keyboard": "Możesz zobaczyć listę skrótów klawiaturowych po naciśnięciu klawisza `?`." }, "feature_editor": { "title": "Edytor Obiektu", @@ -765,6 +788,13 @@ "using": "By użyć śladu GPS do mapowania, przeciągnij i upuść plik GPX na mapę edytora. Jeśli zostanie on rozpoznany, pojawi się na niej jako jasno-purpurowa linia. Kliknij na {data} **Dane mapy** po prawej stronie by włączyć, wyłączyć lub przybliżyć widok twojego śladu GPS.", "tracing": "Ślad GPS nie jest bezpośrednio zapisywany na serwerach OpenStreetMap - najlepszym sposobem na wykorzystanie go jest rysowanie mapy na jego podstawie.", "upload": "Możesz także wysłać [swój ślad GPS na serwery OpenStreetMap](https://www.openstreetmap.org/trace/create), pozwalając tym samym innym użytkownikom na korzystanie z niego." + }, + "field": { + "restrictions": { + "tips": { + "title": "Wskazówki" + } + } } }, "intro": { @@ -1251,7 +1281,7 @@ "placeholders": { "block_number": "Kwartał", "block_number!jp": "Kwartał", - "city": "Miejsc. (adres bez ulicy)", + "city": "Miejsc. (adres z ulicą)", "city!jp": "Miasto/Wieś/Okręg specjalny Tokio", "city!vn": "Miasto", "conscriptionnumber": "123", @@ -1267,7 +1297,7 @@ "housenumber!jp": "Nr budynku/działki", "neighbourhood": "Okręg", "neighbourhood!jp": "Chōme/Aza/Koaza", - "place": "Miejsc. (adres z ulicą)", + "place": "Miejsc. (adres bez ulicy)", "postcode": "Kod pocztowy", "province": "Prowincja/województwo", "province!jp": "Prefektura", @@ -1547,6 +1577,9 @@ "cycleway:right": "Prawa strona" } }, + "dance/style": { + "label": "Style taneczne" + }, "date": { "label": "Data" }, @@ -1615,6 +1648,9 @@ "display": { "label": "Typ wyświetlacza" }, + "distance": { + "label": "Całkowita Odległość" + }, "dock": { "label": "Typ" }, @@ -1655,6 +1691,9 @@ "except": { "label": "Wyjątki" }, + "faces": { + "label": "Liczba powierzchni" + }, "fax": { "label": "Faks", "placeholder": "+48 42 123 45 67" @@ -1760,12 +1799,37 @@ "label": "Rodzaj" }, "historic/civilization": { - "label": "Historyczna cywilizacja" + "label": "Cywilizacja historyczna" }, "hoops": { "label": "Kosz", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "label": "Dresaż", + "options": { + "equestrian": "Tak", + "undefined": "Nie" + } + }, + "horse_riding": { + "label": "Jeździectwo", + "options": { + "horse_riding": "Tak", + "undefined": "Nie" + } + }, + "horse_scale": { + "options": { + "common": "Łatwe: Brak przeszkód, problemów. (domyślnie)" + } + }, + "horse_stables": { + "options": { + "stables": "Tak", + "undefined": "Nie" + } + }, "iata": { "label": "IATA" }, @@ -1785,6 +1849,9 @@ "indoor": { "label": "Wnętrze" }, + "industrial": { + "label": "Typ" + }, "information": { "label": "Typ" }, @@ -1905,6 +1972,9 @@ "label": "Ograniczenie prędkości", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Maksymalny czas postoju" }, @@ -2493,8 +2563,8 @@ "label": "Rodzaj", "placeholder": "Domyślny" }, - "vending": { - "label": "Rodzaje towarów" + "usage_rail": { + "label": "Sposób użytkowania" }, "visibility": { "label": "Widoczność", @@ -2589,6 +2659,10 @@ "name": "Billboard", "terms": "Reklama" }, + "advertising/column": { + "name": "Słup z ogłoszeniami/reklamami", + "terms": "reklamy,ogłoszenia" + }, "aerialway": { "name": "Wyciąg narciarski" }, @@ -2902,6 +2976,10 @@ "name": "Targowisko", "terms": "targowisko,targ,rynek,giełda" }, + "amenity/monastery": { + "name": "Teren klasztoru", + "terms": "klasztor" + }, "amenity/motorcycle_parking": { "name": "Parking dla motocyklów", "terms": "miejsce postojowe dla motocyklów" @@ -3106,6 +3184,10 @@ "name": "Automat z papierosami", "terms": "Automat z papierosami" }, + "amenity/vending_machine/coffee": { + "name": "Automat do sprzedaży kawy", + "terms": "automat do sprzedaży kawy, kawiarka" + }, "amenity/vending_machine/condoms": { "name": "Automat z prezerwatywami", "terms": "Automat z prezerwatywami" @@ -3114,6 +3196,14 @@ "name": "Automat z napojami", "terms": "Automat z napojami" }, + "amenity/vending_machine/electronics": { + "name": "Automat do sprzedaży urządzeń elektronicznych", + "terms": "automat do sprzedaży urządzeń elektronicznych, małe agd" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Automat do sprzedaży monet pamiątkowych", + "terms": "automat do sprzedaży monet pamiątkowych,moneta pamiątkowa" + }, "amenity/vending_machine/excrement_bags": { "name": "Dozownik z workami na psie odchody", "terms": "woreczki na psie odchody" @@ -3122,6 +3212,14 @@ "name": "Automat z produktami higieny kobiecej", "terms": "podpaski,tampony" }, + "amenity/vending_machine/food": { + "name": "Automat do sprzedaży jedzenia", + "terms": "automat do sprzedaży jedzenia,jedzenie,pożywienie" + }, + "amenity/vending_machine/ice_cream": { + "name": "Automat do sprzedaży lodów", + "terms": "automat do sprzedaży lodów,lody" + }, "amenity/vending_machine/news_papers": { "name": "Automat z gazetami" }, @@ -3141,6 +3239,10 @@ "name": "Automat z biletami komunikacji publicznej", "terms": "bilety komunikacji publicznej" }, + "amenity/vending_machine/stamps": { + "name": "Automat do sprzedaży znaczków pocztowych", + "terms": "automat do sprzedaży znaczków pocztowych, znaczki pocztowe" + }, "amenity/vending_machine/sweets": { "name": "Automat z przekąskami", "terms": "Automat z przekąskami" @@ -3213,6 +3315,10 @@ "name": "Wieża Swobodnego Spadania", "terms": "wieża spadania" }, + "attraction/maze": { + "name": "Labirynt", + "terms": "labirynt" + }, "attraction/pirate_ship": { "name": "Statek piracki", "terms": "statek piracki" @@ -3378,6 +3484,14 @@ "building/entrance": { "name": "Wejście/wyjście" }, + "building/farm": { + "name": "Gospodarstwo (mieszkalny)", + "terms": "Farma" + }, + "building/farm_auxiliary": { + "name": "Budynek gospodarczy", + "terms": "Gospodarstwo (niemieszkalny), Farma" + }, "building/garage": { "name": "Garaż", "terms": "garaż" @@ -3936,6 +4050,10 @@ "name": "Autostrada - wjazd/zjazd", "terms": "rampa,wjazd,wyjazd,zjazd" }, + "highway/passing_place": { + "name": "Mijanka", + "terms": "mijanka" + }, "highway/path": { "name": "Ścieżka/droga ", "terms": "ścieżka,dróżka" @@ -4157,14 +4275,14 @@ }, "landuse/forest": { "name": "Las", - "terms": "las,drzewa" + "terms": "las,puszcza" }, "landuse/garages": { "name": "Teren z garażami", "terms": "garaże,garażowisko,obszar garaży,wiaty" }, "landuse/grass": { - "name": "Trawa", + "name": "Trawa/trawnik", "terms": "trawa, trawnik, skwer,klomb" }, "landuse/greenfield": { @@ -4195,7 +4313,7 @@ "terms": "składowisko odpadów,śmieci" }, "landuse/meadow": { - "name": "Łąka", + "name": "Łąka/pastwisko", "terms": "łąka,pastwisko" }, "landuse/military": { @@ -4263,7 +4381,7 @@ "terms": "torowisko" }, "landuse/recreation_ground": { - "name": "Tereny rekreacyjne", + "name": "Park rekreacyjno-sportowy", "terms": "rekreacja,odpoczynek,sporty,zabawy" }, "landuse/religious": { @@ -4306,9 +4424,13 @@ "name": "Sala Taneczna", "terms": "dyskoteka" }, + "leisure/dancing_school": { + "name": "Szkoła tańca", + "terms": "szkoła tańca,tańce,tańczenie,taniec" + }, "leisure/dog_park": { - "name": "Park dla psów", - "terms": "psi park, wybieg dla psów" + "name": "Wybieg dla psów", + "terms": "psi park, wybieg dla psów, park dla psów" }, "leisure/firepit": { "name": "Miejsce na ognisko", @@ -4399,8 +4521,8 @@ "terms": "rezerwat" }, "leisure/park": { - "name": "Park", - "terms": "las,plac,teren rekreacyjny" + "name": "Park rekreacyjno-wypoczynkowy", + "terms": "park,wypoczynek,rekreacja,teren rekreacyjny" }, "leisure/picnic_table": { "name": "Stół piknikowy", @@ -4512,7 +4634,7 @@ }, "leisure/water_park": { "name": "Park wodny", - "terms": "aquapark, cieplice" + "terms": "aquapark, cieplice,akwapark" }, "line": { "name": "Linia", @@ -4577,6 +4699,10 @@ "name": "Wieża obserwacyjna", "terms": "wieża obserwacyjna" }, + "man_made/observatory": { + "name": "Obserwatorium", + "terms": "obserwatorium astronomiczne" + }, "man_made/petroleum_well": { "name": "Szyb naftowy", "terms": "kopalnia ropy" @@ -4694,13 +4820,17 @@ "terms": "lodowiec, lądolód, jęzor lodowcowy" }, "natural/grassland": { - "name": "Łąka", - "terms": "Teren trawiasty" + "name": "Łąka/sawanna/step/preria", + "terms": "teren trawiasty,sawanna,step,preria" }, "natural/heath": { "name": "Wrzosowisko", "terms": "Zdrowie, medycyna, szpital," }, + "natural/mud": { + "name": "Błoto", + "terms": "błotne" + }, "natural/peak": { "name": "Szczyt", "terms": "szczyt,wierzchołek" @@ -4762,8 +4892,8 @@ "terms": "bagna, bagno, mokradło, mokradła" }, "natural/wood": { - "name": "Las/puszcza", - "terms": "las,puszcza,zalesienie" + "name": "Drzewa", + "terms": "zadrzewienie,las,zalesienie" }, "noexit/yes": { "name": "Brak przejścia/przejazdu", @@ -5180,7 +5310,7 @@ "name": "Peron kolejowy" }, "railway/rail": { - "name": "Tor", + "name": "Tor kolejowy", "terms": "tory, torowisko" }, "railway/signal": { @@ -5893,16 +6023,20 @@ "terms": "zakaz,zawracanie" }, "type/restriction/only_left_turn": { - "name": "Nakaz skrętu w lewo", - "terms": "nakaz,lewoskręt" + "name": "Tylko skręt w lewo", + "terms": "tylko w lewo,nakaz skrętu w lewo" }, "type/restriction/only_right_turn": { - "name": "Nakaz skrętu w prawo", - "terms": "nakaz,prawoskręt" + "name": "Tylko skręt w prawo", + "terms": "tylko w prawo, nakaz skrętu w prawo" }, "type/restriction/only_straight_on": { - "name": "Nakaz jazdy prosto", - "terms": "zakaz,nakręcanie,wykręcanie,skręt" + "name": "Tylko jazda prosto", + "terms": "tylko prosto, nakaz jazdy na wprost" + }, + "type/restriction/only_u_turn": { + "name": "Tylko zawracanie", + "terms": "tylko zawracanie, nakaz zawracania" }, "type/route": { "name": "Trasa/linia", @@ -6057,7 +6191,7 @@ "attribution": { "text": "Warunki użytkowania i opinia" }, - "description": "Granice zdjęć i data ich wykonania. Opisy są widoczne na poziomie powiększenia 14 i wyższym.", + "description": "Granice zdjęć i data ich wykonania. Opisy są widoczne na poziomie powiększenia 13 i wyższym.", "name": "Datowanie zdjęć DigitalGlobe Premium " }, "DigitalGlobe-Standard": { @@ -6071,7 +6205,7 @@ "attribution": { "text": "Warunki użytkowania i opinia" }, - "description": "Granice zdjęć i data ich wykonania. Opisy są widoczne na poziomie powiększenia 14 i wyższym.", + "description": "Granice zdjęć i data ich wykonania. Opisy są widoczne na poziomie powiększenia 13 i wyższym.", "name": "Datowanie zdjęć DigitalGlobe Standard" }, "EsriWorldImagery": { @@ -6155,6 +6289,10 @@ "description": "Żółty = Dane public domain od US Census. Czerwony = Brak danych w OpenStreetMap", "name": "TIGER Roads 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "Drogi: Zielone obramowanie = czwartorzędna. Brązowe obramowanie = polna/leśna. Nawierzchnia: żwir = jasno-brązowe wypełnienie, asfalt = czarny, twarda = szary, grunt = biały, beton = niebieski, trawa = zielony. Dostępna sezonowo = białe paski", + "name": "Nakładka z drogami z U.S. Forest" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, autorzy OpenStreetMap, CC by-SA 3.0" @@ -6189,7 +6327,7 @@ "attribution": { "text": "basemap.at" }, - "description": "Mapa bazowa Austrii, oparta o dane rządowe.", + "description": "Mapa bazowa Austrii, na podstawie danych rządowych", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6251,7 +6389,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Kafelki mapowe Stamen Design, licencja CC BY 3.0" + "text": "Kafle mapy od Stamen Design, licencja CC BY 3.0. Dane z OpenStreetMap, licencja ODbL" }, "name": "Stamen - Teren" }, @@ -6267,6 +6405,207 @@ }, "name": "Thunderforest Krajobraz" } + }, + "community": { + "cape-coast-youthmappers": { + "description": "Obserwuj nas na Twitterze: {url}" + }, + "osm-gh-facebook": { + "name": "OpenStreetMap Ghana na Facebook'u" + }, + "osm-gh-twitter": { + "name": "OpenStreetMap Ghana na Twitter'rze", + "description": "Obserwuj nas na Twitterze: {url}" + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap Bangladesz" + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap Indonezja" + }, + "OSM-japan-twitter": { + "description": "Hashtag na Twitterze: {url}" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap Mongolia" + }, + "OSM-MMR-facebook": { + "name": "OpenStreetMap Mjanma" + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap Nepal" + }, + "OSM-RU-forum": { + "name": "OpenStreetMap RU forum", + "description": "OpenStreetMap Rosja forum www" + }, + "OSM-RU-telegram": { + "name": "OpenStreetMap RU telegram" + }, + "OSM-LKA-facebook": { + "name": "OpenStreetMap Sri Lanka" + }, + "osm-at": { + "name": "OpenStreetMap Austria" + }, + "be-forum": { + "description": "Forum OpenStreetMap Belgium " + }, + "byosm": { + "name": "OpenStreetMap Białoruś", + "description": "OpenStreetMap Białoruś - czat na Telegramie" + }, + "de-berlin-twitter": { + "description": "Obserwuj nas na Twitterze: {url}" + }, + "de-forum": { + "name": "OpenStreetMap DE forum", + "description": "OpenStreetMap Niemcy - forum www" + }, + "de-irc": { + "name": "OpenStreetMap Niemcy - IRC", + "description": "Dołącza do #osm-de na irc.oftc.net (port 6667)" + }, + "de-mailinglist": { + "name": "Talk-de mailingowa lista dyskusyjna", + "description": "Talk-de to oficjalna lista dyskusyjna dla społeczności OSM w Niemczech" + }, + "osm-de": { + "name": "OpenStreetMap Niemcy" + }, + "it-twitter": { + "description": "Obserwuj nas na Twitterze: {url}" + }, + "OSM-PL-facebook-group": { + "name": "OpenStreetMap Polska na Facebooku", + "description": "Mapujący i użytkownicy OpenStreetMap w Polsce" + }, + "OSM-PL-forum": { + "name": "Forum OpenStreetMap Polska", + "description": "Forum dyskusyjne polskiej społeczności OpenStreetMap" + }, + "osm-se": { + "name": "OpenStreetMap.se" + }, + "se-twitter": { + "description": "Obserwuj nas na Twitterze: {url}" + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap Vancouver" + }, + "Central-Pennsylvania-OSM": { + "name": "OSM Centralna Pensylwania" + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM" + }, + "GeoPhilly": { + "name": "GeoPhilly" + }, + "MapMinnesota": { + "name": "MapMinnesota" + }, + "Maptime-ME-meetup": { + "name": "MaptimeME" + }, + "OpenCleveland-meetup": { + "name": "Open Cleveland" + }, + "OSM-Boston": { + "name": "OpenStreetMap Boston" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga" + }, + "OSM-Colorado": { + "name": "OpenStreetMap Colorado" + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland" + }, + "OSM-Seattle": { + "name": "OpenStreetMap Seattle" + }, + "OSM-SoCal": { + "name": "OpenStreetMap Southern California" + }, + "OSM-South-Bay": { + "name": "OSM South Bay" + }, + "OSM-Tampa-Bay": { + "name": "OpenStreetMap Tampa Bay" + }, + "OSM-US-Slack": { + "name": "OpenStreetMap US Slack" + }, + "OSM-US": { + "name": "OpenStreetMap US" + }, + "OSM-Utah": { + "name": "OpenStreetMap Utah" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap Wyoming" + }, + "PHXGeo-meetup": { + "name": "PHXGeo Meetup" + }, + "PHXGeo-twitter": { + "name": "PHXGeo Twitter", + "description": "Obserwuj nas na Twitterze: {url}" + }, + "OSM-AR-twitter": { + "description": "Obserwuj nas na Twitterze: {url}" + }, + "OSM-br-twitter": { + "description": "Obserwuj nas na Twitterze: {url}" + }, + "OSM-CL-twitter": { + "description": "Obserwuj nas na Twitterze: {url}" + }, + "OSM-CO-twitter": { + "name": "OpenStreetMap KolumbiaTwitter", + "description": "Obserwuj nas na Twitterze: {url}" + }, + "OSM-CO": { + "name": "OpenStreetMap Kolumbia" + }, + "OSM-PE-facebook": { + "name": "OpenStreetMap Peru Facebook" + }, + "OSM-PE-telegram": { + "name": "OpenStreetMap Peru Telegram", + "description": "Dołącz do społeczności OpenStreetMap Peru na Telegramie" + }, + "OSM-PE-twitter": { + "name": "OpenStreetMap Peru Twitter", + "description": "Obserwuj nas na Twitterze: {url}" + }, + "OSM-PE": { + "name": "OpenStreetMap Peru" + }, + "OSM-Facebook": { + "name": "OpenStreetMap na Facebook'u" + }, + "OSM-Reddit": { + "name": "OpenStreetMap na Reddit", + "description": "/r/openstreetmap/ jest wspaniałym miejscem by dowiedzieć się więcej o OpenStreetMap." + }, + "OSM-Twitter": { + "name": "OpenStreetMap Twitter", + "description": "Obserwuj nas na Twitterze: {url}" + }, + "OSMF": { + "name": "Fundacja OpenStreetMap ", + "events": { + "sotm2018": { + "name": "State of the Map 2018" + } + } + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/pt-BR.json b/vendor/assets/iD/iD/locales/pt-BR.json index e650f5094..45c9dea12 100644 --- a/vendor/assets/iD/iD/locales/pt-BR.json +++ b/vendor/assets/iD/iD/locales/pt-BR.json @@ -1,5 +1,10 @@ { "pt-BR": { + "icons": { + "information": "informações", + "remove": "remover", + "undo": "desfazer" + }, "modes": { "add_area": { "title": "Área", @@ -145,7 +150,8 @@ "vertex": "Conectou uma linha a outra.", "line": "Conectou uma via a uma linha.", "area": "Conectou uma linha a uma área." - } + }, + "restriction": "Estes elementos não podem ser conectados porque isto danificaria uma relação \"{relation}\"." }, "disconnect": { "title": "Desconectar", @@ -291,6 +297,42 @@ } } }, + "restriction": { + "controls": { + "distance": "Distância", + "distance_up_to": "Até {distance}", + "via": "Via", + "via_node_only": "Apenas nó", + "via_up_to_one": "Até 1 caminho", + "via_up_to_two": "Até 2 caminhos" + }, + "help": { + "indirect": "(indireto)", + "turn": { + "no_left_turn": "PROIBIDA conversão à esquerda {indirect}", + "no_right_turn": "PROIBIDA conversão à direita {indirect}", + "no_u_turn": "PROIBIDO retorno {indirect}", + "no_straight_on": "PROIBIDO seguir em frente {indirect}", + "only_left_turn": "SOMENTE conversão à esquerda {indirect}", + "only_right_turn": "SOMENTE conversão à direita {indirect}", + "only_u_turn": "SOMENTE retorno {indirect}", + "only_straight_on": "SOMENTE seguir em frente {indirect}", + "allowed_left_turn": "Permitida conversão à esquerda {indirect}", + "allowed_right_turn": "Permitida conversão à direita {indirect}", + "allowed_u_turn": "Permitido retorno {indirect}", + "allowed_straight_on": "Permitido seguir em frente {indirect}" + }, + "from": "A PARTIR DE", + "via": "VIA", + "to": "PARA", + "from_name": "{from} {fromName}", + "from_name_to_name": "{from} {fromName} {to} {toName}", + "via_names": "{via} {viaNames}", + "select_from": "Clique para escolher {from} que segmento", + "select_from_name": "Clique para selecionar {from} {fromName}", + "toggle": "Clique para \"{turn}\"" + } + }, "undo": { "tooltip": "Desfazer: {action}", "nothing": "Nada para desfazer." @@ -366,6 +408,7 @@ "key": "H", "title": "Histórico", "selected": "{n} selecionado", + "no_history": "Sem histórico (elemento novo)", "version": "Versão", "last_edit": "Última Edição", "edited_by": "Editado por", @@ -465,6 +508,7 @@ "switch": "Voltar para este fundo de tela", "custom": "Customizado", "custom_button": "Editar fundo de tela personalizado", + "custom_prompt": "Insira um modelo de URL de quadros. Tokens válidos são:\n - {zoom} ou {z}, {x}, {y} para o esquema Z/X/Y dos quadros\n - {-y} ou {ty} para coordenadas invertidas, estilo TMS\n - {u} para esquema quadtile\n - {switch:a,b,c} para multiplexação de servidor DNS\n\nExemplo:\n{example}", "overlays": "Sobreposições", "imagery_source_faq": "Informações sobre imagens / Relatar um problema", "reset": "redefinir", @@ -602,15 +646,20 @@ } }, "success": { - "edited_osm": "OSM editado!", "just_edited": "Você acaba de editar o OpenStreetMap!", - "view_on_osm": "Ver no OSM", - "facebook": "Compartilhar no Facebook", - "twitter": "Compartilhar no Twitter", - "google": "Compartilhar Google+", - "help_html": "Suas modificações devem aparecer na camada \"Padrão\" dentro de alguns minutos. Alguns elementos e outras camadas podem demorar mais para serem atualizadas.", + "thank_you": "Obrigado por aprimorar o mapa.", + "thank_you_location": "Obrigado por aprimorar o mapa ao redor de {where}.", + "help_html": "Suas alterações devem aparecer no OpenStreetMap dentro de alguns minutos. Os mapas em outros lugares podem demorar mais para serem atualizados.", "help_link_text": "Detalhes", - "help_link_url": "https://wiki.openstreetmap.org/wiki/Pt:Perguntas_frequentes#Eu_acabei_de_alterar_o_mapa._Como_eu_fa.C3.A7o_para_visualizar_minhas_altera.C3.A7.C3.B5es.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/Pt:Perguntas_frequentes#Eu_acabei_de_alterar_o_mapa._Como_eu_fa.C3.A7o_para_visualizar_minhas_altera.C3.A7.C3.B5es.3F", + "view_on_osm": "Ver alterações no OSM", + "changeset_id": "Seu conjunto de alterações #: {changeset_id}", + "like_osm": "Gosta do OpenStreetMap? Conecte-se com outros:", + "more": "Mais", + "events": "Eventos", + "languages": "Idiomas: {languages}", + "missing": "Há algo faltando nesta lista?", + "tell_us": "Conte-nos!" }, "confirm": { "okay": "OK", @@ -648,6 +697,7 @@ "untagged_area_tooltip": "Selecionar um tipo de elemento que descreva o que esta área é.", "untagged_relation": "Relação sem etiquetas", "untagged_relation_tooltip": "Selecionar um tipo de elemento que descreva o que esta relação é.", + "many_deletions": "Você está apagando {n} feições: {p} nós, {l} linhas, {a} áreas, {r} relações. Você ter certeza que quer executar esta ação? Ela irá apagar estes elementos para todas as pessoas que acessam o openstreetmap.org.", "tag_suggests_area": "A etiqueta {tag} sugere que seja utilizada numa área, mas essa linha não é uma área", "deprecated_tags": "Etiquetas obsoletas: {tags}" }, @@ -767,6 +817,7 @@ "connect_line_drag": "Para conectar uma linha a algum outro elemento, arraste um dos nós das linhas a outro elemento até que ambos os elementos estejam unidos. Dica: você pode segurar a tecla `{alt}` caso não deseje que um nó se conecte a outros elementos enquanto o arrasta.", "connect_line_tag": "Se você sabe que um cruzamento tem semáforos ou faixas de pedestre, você pode adicioná-los selecionando o nó do cruzamento e utilizando o editor de elementos para selecionar o tipo correto de elemento.", "disconnect_line_h": "Desconectando Linhas", + "disconnect_line_command": "Para desconectar uma rua de outro elemento, clique com o {rightclick} botão direito no nó conectado, e selecione o comando {disconnect} **Desconectar** no menu de edição.", "move_line_h": "Movendo Linhas", "delete_line_h": "Removendo Linhas" }, @@ -806,6 +857,29 @@ "using_h": "Usando Traçados de GPS", "tracing": "A trilha GPX não está sendo enviada ao OpenStreetMap - a melhor maneira de usá-la é desenhar no mapa, usando-a como um guia para os novos elementos que você adicionar.", "upload": "Você também pode [enviá-la ao OpenStreetMap](https://www.openstreetmap.org/trace/create) para que outros usuários possam utilizá-la." + }, + "field": { + "restrictions": { + "title": "Ajuda das Restrições de curva", + "about": { + "title": "Sobre", + "about": "Este campo permite que você inspecione e modifique restrições de curva. Ele mostra um modelo da interseção selecionada, incluindo outras ruas próximas conectadas.", + "from_via_to": "Uma restrição de curva sempre contém: um **A PARTIR DE caminho**, um **PARA caminho**, e um **VIA nó** ou um ou mais **VIA nós**.", + "maxdist": "O controle deslizante \"{distField}\" define a distância que se deve procurar por ruas conectadas adicionais.", + "maxvia": "O controle deslizante \"{viaField}\" ajusta quantos caminhos serão incluídos na busca. (Dica: quanto mais simples, melhor)" + }, + "inspecting": { + "title": "Inspecionar" + }, + "modifying": { + "title": "Modificar" + }, + "tips": { + "title": "Dicas", + "simple": "**Prefira restrições simples ao invés de complexas**", + "indirect_noedit": "Você não pode editar restrições indiretas. Ao invés disso, tente editar uma relação direta próxima." + } + } } }, "intro": { @@ -1588,6 +1662,9 @@ "cycleway:right": "Lado direito" } }, + "dance/style": { + "label": "Estilos de Dança" + }, "date": { "label": "Data" }, @@ -1656,6 +1733,9 @@ "display": { "label": "Mostrador" }, + "distance": { + "label": "Distância total" + }, "dock": { "label": "Tipo" }, @@ -1696,6 +1776,9 @@ "except": { "label": "Exceções" }, + "faces": { + "label": "Faces" + }, "fax": { "label": "Fax", "placeholder": "+55 11 0982 1098" @@ -1807,6 +1890,24 @@ "label": "Aros de Tabela", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "options": { + "equestrian": "Sim", + "undefined": "Não" + } + }, + "horse_riding": { + "options": { + "horse_riding": "Sim", + "undefined": "Não" + } + }, + "horse_stables": { + "options": { + "stables": "Sim", + "undefined": "Não" + } + }, "iata": { "label": "Código IATA" }, @@ -1826,6 +1927,9 @@ "indoor": { "label": "Interior" }, + "industrial": { + "label": "Tipo" + }, "information": { "label": "Tipo" }, @@ -1946,6 +2050,9 @@ "label": "Limite de Velocidade", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Permanência máxima" }, @@ -2534,8 +2641,17 @@ "label": "Tipo", "placeholder": "Padrão" }, + "usage_rail": { + "label": "Tipo de Utilização", + "options": { + "industrial": "Industrial", + "military": "Militar", + "test": "Teste", + "tourism": "Turismo" + } + }, "vending": { - "label": "Tipo de Produtos" + "label": "Tipos de Produtos" }, "visibility": { "label": "Visibilidade", @@ -2613,6 +2729,8 @@ "options": { "delta": "Delta", "open": "Aberta", + "open-delta": "Delta Aberto", + "star": "Estrela / Y", "zigzag": "Zig Zag" } } @@ -2939,6 +3057,9 @@ "name": "Mercado ou feira", "terms": "Feira, mercado, mercado municipal, feirinha" }, + "amenity/monastery": { + "name": "Jardins do mosteiro" + }, "amenity/motorcycle_parking": { "name": "Estacionamento de motos", "terms": "Estacionamento de motocicletas, estacionamento de motos, estacionamento" @@ -3142,6 +3263,9 @@ "name": "Máquina de Venda de Cigarros", "terms": "cigarro, venda de cigarro" }, + "amenity/vending_machine/coffee": { + "name": "Máquina de Venda de Café" + }, "amenity/vending_machine/condoms": { "name": "Máquina de Venda de Preservativos", "terms": "máquina de venda de camisinhas, preservativos, camisinha" @@ -3150,6 +3274,12 @@ "name": "Máquina de Venda de Bebidas", "terms": "Máquina de Venda de Bebidas, máquina de refrigerante, refrigerante, lata, latinha" }, + "amenity/vending_machine/electronics": { + "name": "Máquina de Venda de Eletrônicos" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Máquina de Venda de Moedas Achatadas" + }, "amenity/vending_machine/excrement_bags": { "name": "Máquina de Vendas de Sacola de Excrementos", "terms": "sacos de excremento, cocô, fezes, dejetos, animal, cachorro, animal de estimação, pet, sacola" @@ -3158,6 +3288,15 @@ "name": "Máquina de Vendas - Higiene Feminina", "terms": "produtos de higiene feminina, camisinha, preservativo, absorvente, tampão, cuidados pessoais, higiene, mulher" }, + "amenity/vending_machine/food": { + "name": "Máquina de Venda de Comida" + }, + "amenity/vending_machine/fuel": { + "name": "Bomba de Gasolina" + }, + "amenity/vending_machine/ice_cream": { + "name": "Máquina de Venda de Sorvete" + }, "amenity/vending_machine/news_papers": { "name": "Máquina de Venda de Jornais" }, @@ -3177,6 +3316,9 @@ "name": "Máquina de Vendas de Bilhete de Transporte", "terms": "Transporte público, ônibus, Trem, Metrô, Ticket, Bilhete" }, + "amenity/vending_machine/stamps": { + "name": "Máquina de Venda de Selos" + }, "amenity/vending_machine/sweets": { "name": "Máquina de Venda de Lanches", "terms": "salgados, doces, petiscos, salgadinhos, snacks, chicletes, biscoitos, balas" @@ -3755,6 +3897,9 @@ "emergency/private": { "name": "Acesso de Emergência Privado" }, + "emergency/water_tank": { + "name": "Tanque de água de emergência" + }, "emergency/yes": { "name": "Acesso de Emergência" }, @@ -3763,11 +3908,11 @@ "terms": "Entrada/Saída, Porta, " }, "footway/crossing": { - "name": "Travessia em Rua", + "name": "Faixa para travessia de pedestres", "terms": "Faixa de cruzamento" }, "footway/crossing-raised": { - "name": "Travessia em via elevada", + "name": "Faixa elevada para travessia de pedestres", "terms": "quebra mola, quebra-molas, redutor de velocidade, faixa de pedestres" }, "footway/crosswalk": { @@ -4025,7 +4170,7 @@ "terms": "Área de Serviço, Posto de combustíveis, posto de gasolina, combustíveis, borracharia, lava jato, serviços, loja de conveniências" }, "highway/speed_camera": { - "name": "Sensor de Velocidade", + "name": "Câmera de Controle de Velocidade", "terms": "câmera de velocidade, radar, pardal, foto-sensor, foto sensor, fotossensor, sinal de trânsito, fiscalização eletrônica de velocidade" }, "highway/steps": { @@ -4141,6 +4286,7 @@ "terms": "Bacia" }, "landuse/brownfield": { + "name": "Área contaminada", "terms": "Terreno industrial abandonado, área em revitalização, área abandonada, terreno em revitalização, zona industrial abandonada, desenvolvimento" }, "landuse/cemetery": { @@ -4315,6 +4461,9 @@ "name": "Danceteria", "terms": "salão de dança, balada, boate, clube de dança, salsa, tango" }, + "leisure/dancing_school": { + "name": "Escola de Dança" + }, "leisure/dog_park": { "name": "Cachorródromo", "terms": "Canódromo, Cachorródromo, Parque Canino, Parque de Cachorros, cães, cão, cachorros" @@ -4328,7 +4477,7 @@ "terms": "Academia de Musculação, Academia de Ginástica" }, "leisure/fitness_centre/yoga": { - "name": "Estúdio de Ioga", + "name": "Estúdio de Yôga", "terms": "Estúdio de Yoga, Academia de Ioga, Academia de Yoga, Yôga, Ioga, Yoga" }, "leisure/fitness_station": { @@ -4338,12 +4487,18 @@ "leisure/fitness_station/balance_beam": { "name": "Trave de Equilíbrio" }, + "leisure/fitness_station/horizontal_bar": { + "name": "Barra Fixa Horizontal" + }, "leisure/fitness_station/hyperextension": { "name": "Estação de Hiperextensão" }, "leisure/fitness_station/parallel_bars": { "name": "Barras Paralelas" }, + "leisure/fitness_station/sit-up": { + "name": "Prancha para Abdominais" + }, "leisure/fitness_station/stairs": { "name": "Escadas de Exercício" }, @@ -4507,6 +4662,9 @@ "name": "Ádito de Mineração", "terms": "Entrada, Passagem, Mina, Acesso" }, + "man_made/antenna": { + "name": "Antena" + }, "man_made/breakwater": { "name": "Molhe/Quebra-Mar", "terms": "Molhe, Quebra-Mar" @@ -4557,6 +4715,9 @@ "name": "Torre de Observação", "terms": "torre de observação, observação, ponto de observação, torre de incêndio, incêndio florestal" }, + "man_made/observatory": { + "name": "Observatório" + }, "man_made/petroleum_well": { "name": "Poço de Petróleo", "terms": "Cavalo mecânico, Poço de extração de petróleo, petróleo, Óleo" @@ -4681,6 +4842,9 @@ "name": "Urzal", "terms": "Urzal" }, + "natural/mud": { + "name": "Lama" + }, "natural/peak": { "name": "Cume", "terms": "Pico, Topo de Montanha, Serra, Montanha, Monte" @@ -5485,6 +5649,10 @@ "name": "Loja de Material de Construção", "terms": "Loja de Ferragens, Material de Construção, Loja de Tintas, Loja de Parafusos, Madeireira" }, + "shop/health_food": { + "name": "Loja de Alimentos Saudáveis", + "terms": "loja de produtos naturais, comida saudável, alimentação saudável, natureba" + }, "shop/hearing_aids": { "name": "Loja de Aparelhos Auditivos", "terms": "farmácia" @@ -5724,6 +5892,10 @@ "name": "Loja de Armas", "terms": "Loja de Tiro, Loja de Equipamentos de Tiro" }, + "shop/wholesale": { + "name": "Atacadista", + "terms": "atacadão, loja de atacados, " + }, "shop/window_blind": { "name": "Loja de Persianas", "terms": "Loja de Vidros Blindados, Cortinas" @@ -5901,16 +6073,20 @@ "terms": "Proibido Retornar" }, "type/restriction/only_left_turn": { - "name": "Obrigatório Virar à Esquerda", - "terms": "Obrigatório Virar à Esquerda" + "name": "Apenas curva à esquerda", + "terms": "curva à esquerda obrigatória, conversão à esquerda" }, "type/restriction/only_right_turn": { - "name": "Obrigatório Virar à Direita", - "terms": "Obrigatório Virar à Direita" + "name": "Apenas curva à direita", + "terms": "curva à direita obrigatória, conversão à direita" }, "type/restriction/only_straight_on": { - "name": "Obrigatório Seguir em Frente", - "terms": "Obrigatório Seguir em Frente" + "name": "Apenas seguir em frente", + "terms": "somente seguir em frente" + }, + "type/restriction/only_u_turn": { + "name": "Apenas retorno", + "terms": "somente retornar, retorno obrigatório" }, "type/route": { "name": "Rota", @@ -6073,7 +6249,6 @@ "attribution": { "text": "Termos e Comentários" }, - "description": "Limites de imagens de satélite e datas de captura. Etiquetas aparecerão no nível de zoom 14 ou acima.", "name": "Bordas das Imagens de Satélite DigitalGlobe Premium" }, "DigitalGlobe-Standard": { @@ -6087,7 +6262,6 @@ "attribution": { "text": "Termos e Comentários" }, - "description": "Limites de imagens de satélite e datas de captura. Etiquetas aparecerão no nível de zoom 14 ou acima.", "name": "Boradas das Imagens de Satélite DigitalGlobe Standard" }, "EsriWorldImagery": { @@ -6205,7 +6379,7 @@ "attribution": { "text": "basemap.at" }, - "description": "Mapa base da Áustria, baseado em dados governamentais.", + "description": "Dados de mapas da Áustria, com base em dados do governo.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6267,7 +6441,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Quadros do mapa de Stamen Design, sob CC BY 3.0" + "text": "Quadros do mapa de Stamen Design, sob CC BY 3.0. Dados por OpenStreetMap, sob ODbL" }, "name": "Stamen, Terreno" }, @@ -6283,6 +6457,138 @@ }, "name": "Paisagens Thunderforest" } + }, + "community": { + "cape-coast-youthmappers": { + "description": "Siga-nos no Twitter: {url}" + }, + "osm-gh-twitter": { + "description": "Siga-nos no Twitter: {url}" + }, + "OSM-India-facebook": { + "name": "OpenStreetMap Índia - Mapeamento de vizinhança participativa", + "description": "Melhorar o OpenStreetMap na Índia" + }, + "OSM-japan-twitter": { + "description": "Hashtag no Twitter: {url}" + }, + "de-berlin-twitter": { + "description": "Siga-nos no Twitter: {url}" + }, + "se-twitter": { + "description": "Siga-nos no Twitter: {url}" + }, + "Bay-Area-OpenStreetMappers": { + "name": "OpenStreetMappers da Bay Area", + "description": "Melhorar o OpenStreetMap na área da baía", + "extendedDescription": "Este grupo é sobre crescer a comunidade do OpenStreetMap aqui na Área da Baía de São Francisco. Nossos eventos são abertos para todos, desde entusiastas open-source, ciclistas, profissionais GIS, geocachers, e além. Todos e quaisquer pessoas interessadas em mapas, cartografia e dados de mapa livres são bem-vindas a se juntar ao nosso grupo e participar dos nossos eventos." + }, + "Central-Pennsylvania-OSM": { + "name": "Pensilvânia central OSM", + "description": "Comunidade de mapeamento on-line baseada no State College, PA" + }, + "Code-for-San-Jose-Slack": { + "name": "Código para San Jose Slack", + "description": "São todos bem-vindos! Inscreva-se em {signupUrl}, então junte-se ao canal #osm." + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM", + "description": "O grupo de usuários do OpenStreetMap para Dallas-Fort Worth", + "extendedDescription": "Dallas, Fort Worth e todas as cidades estão repletas de pessoas criativas e conhecedoras de tecnologia. A visão deste grupo de usuários é encontrar novas maneiras de usar o incrível recurso do OSM." + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "Meetup para entusiastas do mapa na área de Filadélfia", + "extendedDescription": "A GeoPhilly une desenvolvedores, geógrafos, geeks de dados, entusiastas do código aberto, hackers cívicos e viciados em mapas em nosso amor compartilhado pelos mapas e pelas histórias que contam. Se você usa mapas como parte do seu trabalho ou apenas quer aprender mais, este é o encontro para você! Nossos eventos visam ser abertos, amigáveis, educacionais e sociais e vão desde happy hours até palestras relâmpago ou até workshops. Venha criar uma comunidade geoespacial diversificada e inspiradora na Filadélfia conosco!" + }, + "Mapping-DC-meetup": { + "name": "Mapeamneto de DC", + "description": "Melhore o OpenStreetMap na área de DC", + "extendedDescription": "Somos um grupo de mapeadores voluntários que visam melhorar o OpenStreetMap na área de DC. Também pretendemos ensinar aos outros sobre o ecossistema OSM, análise de dados, cartografia e GIS. Nós nos reunimos a cada dois meses nos encontros para nos concentrar em uma área da nossa cidade." + }, + "OSM-Boston": { + "name": "OpenStreetMap Boston", + "description": "Mapeadores e usuários do OpenStreetMap na área de Boston", + "extendedDescription": "OpenStreetMap é o mapa gratuito e aberto do mundo, com centenas de milhares de contribuições diárias de pessoas como você. Editar o mapa é simples e divertido! Junte-se a nós em ambientes internos e externos em nosso esforço para criar o melhor mapa da área de Boston e do resto do mundo!" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "O grupo de usuários do OpenStreetMap para o Chattanooga" + }, + "OSM-Colorado": { + "name": "OpenStreetMap Colorado", + "extendedDescription": "OpenStreetMap (OSM) Colorado é uma colaboração local de pessoas interessadas em contribuir com seus esforços para criar mapas gratuitos. Encorajamos todos os nossos mapeadores a organizar ou sugerir o mapeamento de eventos em todo o estado. As atividades do Meetup podem ser simples mixers sociais, treinamento básico e avançado do OSM ou partes de mapeamento da comunidade." + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC", + "description": "Usuários e Mapeadores do OpenStreetMap, desenvolvedores e entusiastas da área metropolitana de Nova York" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland", + "description": "Mapeadores e usuários do OpenStreetMap na área de Portland", + "extendedDescription": "OpenStreetMap (OSM) é um mapa do mundo feito por pessoas como você. É um mapa que você constrói, que é dado de graça, como na Wikipédia. Confira osm.org para mais, e junte-se a nós em um meetup para conversar sobre mapas, contribuir para o OSM e se divertir!" + }, + "OSM-Seattle": { + "name": "OpenStreetMap Seattle", + "description": "Mapeadores e usuários do OpenStreetMap na área de Seattle" + }, + "OSM-South-Bay": { + "name": "OSM South Bay", + "description": "Noites do Mapa hospedado por Code for San Jose" + }, + "OSM-US-Slack": { + "description": "Todos são bem-vindos! Se inscreva em {signupUrl}" + }, + "PHXGeo-twitter": { + "description": "Siga-nos no Twitter em {url}" + }, + "Maptime-Australia-Slack": { + "description": "Se inscreva em {signupUrl}" + }, + "OSM-AR-twitter": { + "description": "Siga-nos no Twitter em {url}" + }, + "Bahia-telegram": { + "name": "Grupo Telegram OpenStreetMap Bahia", + "description": "Participe da comunidade OpenStreetMap Bahia no Telegram" + }, + "OSM-br-mailinglist": { + "name": "Talk-br Mailing List", + "description": "Uma lista de e-mail de discussão sobre o OpenStreetMap no Brasil" + }, + "OSM-br-telegram": { + "name": "Telegram OpenStreetMap Brasil", + "description": "Participe da comunidade OpenStreetMap Brasil no Telegram", + "extendedDescription": "Entre na comunidade para aprender mais sobre o OpenStreetMap, fazer perguntas ou participar das nossas reuniões. Todos são bem-vindos!" + }, + "OSM-br-twitter": { + "name": "Twitter OpenStreetMap Brasil", + "description": "Nos siga no Twitter em {url}" + }, + "OSM-CL-twitter": { + "description": "Siga-nos no Twitter: {url}" + }, + "OSM-CO-twitter": { + "description": "Siga-nos no Twitter: {url}" + }, + "OSM-PE-twitter": { + "description": "Siga-nos no Twitter: {url}" + }, + "OSM-Reddit": { + "name": "OpenStreetMap no Reddit", + "description": "/r/openstreetmap/ é um ótimo lugar para aprender mais sobre o OpenStreetMap. Pergunte-nos qualquer coisa!" + }, + "OSM-Twitter": { + "name": "Twitter OpenStreetMap", + "description": "Siga-nos no Twitter: {url}" + }, + "OSMF": { + "events": { + "sotm2018": { + "description": "Participe da conferência global do OpenStreetMap em Milão (Itália), evento que irá reunir por três dias toda a comunidade OSM para socializar, compartilhar e aprender juntos." + } + } + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/pt.json b/vendor/assets/iD/iD/locales/pt.json index 0ef0e047e..37e296d8a 100644 --- a/vendor/assets/iD/iD/locales/pt.json +++ b/vendor/assets/iD/iD/locales/pt.json @@ -1,5 +1,10 @@ { "pt": { + "icons": { + "information": "info", + "remove": "remover", + "undo": "desfazer" + }, "modes": { "add_area": { "title": "Área", @@ -639,13 +644,7 @@ } }, "success": { - "edited_osm": "Acabou de editar o OpenStreetMap!", "just_edited": "Acaba de editar o OpenStreetMap!", - "view_on_osm": "Ver no OpenStreetMap", - "facebook": "Partilhar no Facebook", - "twitter": "Partilhar no Twitter", - "google": "Partilhar no Google+", - "help_html": "As suas alterações devem aparecer na \"Camada Padrão\" em poucos minutos. Outras camadas e determinados elementos podem demorar mais tempo.", "help_link_text": "Detalhes", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -897,7 +896,8 @@ "title": "Modificando" }, "tips": { - "title": "Dicas" + "title": "Dicas", + "indirect_noedit": "Não deverá editar restrições indiretas. Opte por editar a restrição direta mais próxima." } } } @@ -1683,6 +1683,9 @@ "cycleway:right": "Lado direito" } }, + "dance/style": { + "label": "Estilos de Dança" + }, "date": { "label": "Data" }, @@ -1802,7 +1805,7 @@ "label": "Posição", "options": { "green": "Relvado", - "lane": "Via de trânsito", + "lane": "Faixa de rodagem", "parking_lot": "Estacionamento", "sidewalk": "Passeio" } @@ -1810,10 +1813,10 @@ "fire_hydrant/type": { "label": "Tipo", "options": { - "pillar": "Superfície ", + "pillar": "Marco de incêndio no solo", "pond": "Poça de água", - "underground": "Subterrâneo ", - "wall": "Muro" + "underground": "Boca de incêndio tradicional com portinholas", + "wall": "Marco de incêndio na parede" } }, "fitness_station": { @@ -1918,6 +1921,9 @@ "indoor": { "label": "Interior" }, + "industrial": { + "label": "Tipo" + }, "information": { "label": "Tipo" }, @@ -1956,7 +1962,7 @@ "label": "Tipo" }, "lanes": { - "label": "Número de vias de trânsito", + "label": "Número de faixas de rodagem", "placeholder": "1, 2, 3..." }, "layer": { @@ -2038,6 +2044,9 @@ "label": "Limite de velocidade", "placeholder": "50, 90, 100, 120..." }, + "maxspeed/advisory": { + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Tempo máximo" }, @@ -2290,6 +2299,9 @@ "ref": { "label": "Código de Referência" }, + "ref/isil": { + "label": "Código ISIL" + }, "ref_aeroway_gate": { "label": "Número da Porta" }, @@ -2623,8 +2635,17 @@ "label": "Tipo", "placeholder": "Padrão" }, + "usage_rail": { + "label": "Tipo de Utilização", + "options": { + "industrial": "Industrial", + "military": "Militar", + "test": "Testes", + "tourism": "Turismo" + } + }, "vending": { - "label": "Tipo de produtos" + "label": "Tipos de Produtos" }, "visibility": { "label": "Visibilidade", @@ -2684,6 +2705,9 @@ "wheelchair": { "label": "Acesso cadeira rodas" }, + "wholesale": { + "label": "Grossista" + }, "width": { "label": "Largura (metros)" }, @@ -3162,6 +3186,10 @@ "name": "Chuveiro", "terms": "Shower, chuveiro público, shuveiro, xuveiro, chubeiro, xubeiro, shubeiro, banho" }, + "amenity/smoking_area": { + "name": "Área para Fumadores", + "terms": "fumadores, fumar" + }, "amenity/social_facility": { "name": "Centro social", "terms": "Social Facility, Casa do Povo" @@ -3788,7 +3816,7 @@ }, "emergency/fire_hydrant": { "name": "Boca de incêndio", - "terms": "Fire Hydrant, Hidrante, Marco de Água, Marco de Incêndio" + "terms": "Hidrate, Marco de Água, Marco de Incêndio, boca de incêndio" }, "emergency/life_ring": { "name": "Boia de Salvamento", @@ -4336,7 +4364,7 @@ "terms": "" }, "landuse/residential": { - "name": "Zona residencial", + "name": "Área residencial", "terms": "Residencial, Urbano, Antrópico, Residential" }, "landuse/retail": { @@ -4371,6 +4399,10 @@ "name": "Salão de dança", "terms": "Dance Hall" }, + "leisure/dancing_school": { + "name": "Escola de Dança", + "terms": "dança, dançar, bailado, bailarina, bailarino" + }, "leisure/dog_park": { "name": "Parque para cães", "terms": "Parque para Cães, Dog Park" @@ -4646,6 +4678,10 @@ "name": "Torre de observação", "terms": "Observatório Tower, Miradouro" }, + "man_made/observatory": { + "name": "Observatório", + "terms": "Observatório Astronómico, Observação, Observações, Astronomia" + }, "man_made/petroleum_well": { "name": "Poço de petróleo", "terms": "Oil Well" @@ -5166,6 +5202,42 @@ "name": "Paragem de autocarro / plataforma", "terms": "Paragem, terminal, autocarro, bus stop, bus, abrigo paragem" }, + "public_transport/linear_platform_ferry": { + "name": "Paragem de Ferry / Plataforma", + "terms": "Ferry, Plataforma de Ferry" + }, + "public_transport/linear_platform_train": { + "name": "Paragem de Comboio / Plataforma", + "terms": "Paragem de Comboio, Plataforma de Comboio" + }, + "public_transport/platform_ferry": { + "name": "Paragem de Ferry / Plataforma", + "terms": "Ferry, Plataforma de Ferry" + }, + "public_transport/platform_train": { + "name": "Paragem de Comboio / Plataforma", + "terms": "Paragem de Comboio, Plataforma de Comboio" + }, + "public_transport/station_ferry": { + "name": "Estação de Ferry / Terminal", + "terms": "Ferry, Terminal de Ferry" + }, + "public_transport/station_train": { + "name": "Estação de Comboios", + "terms": "Estação Ferroviária, Estação dos Caminhos de Ferro" + }, + "public_transport/station_train_halt": { + "name": "Apeadeiro Ferroviário", + "terms": "Apeadeiro, Paragem de Comboio" + }, + "public_transport/stop_position_ferry": { + "name": "Localização de Paragem do Ferry", + "terms": "Ferry, Paragem do Ferry" + }, + "public_transport/stop_position_train": { + "name": "Localização de Paragem do Comboio", + "terms": "Comboio, Paragem do Comboio" + }, "railway": { "name": "Ferrovia" }, @@ -5740,6 +5812,10 @@ "name": "Loja de armas", "terms": "espingardaria, Loja de Armas, Caça" }, + "shop/wholesale": { + "name": "Loja Grossista", + "terms": "grossista, atacado, revendedor, revenda" + }, "shop/window_blind": { "name": "Loja de estores", "terms": "Estores, Estor" @@ -5790,7 +5866,7 @@ }, "tourism/guest_house": { "name": "Hospedagem Domiciliar/Casa de Hóspedes", - "terms": "casa se hóspedes, Cama e Pequeno Almoço, Cama e Peq. Almoço, Cama e Almoço" + "terms": "casa de hóspedes, Cama e Pequeno Almoço, Cama e Peq. Almoço, Cama e Almoço, albergaria, hospedaria, pensão" }, "tourism/hostel": { "name": "Pousada / Hostel", @@ -5822,7 +5898,7 @@ }, "tourism/motel": { "name": "Motel", - "terms": "Albergaria " + "terms": "quartos de motel, albergue, parador, paradores" }, "tourism/museum": { "name": "Museu", @@ -5919,18 +5995,6 @@ "name": "Proibição de inversão de marcha", "terms": "Não Inverter o Sentido, inversão de marcha proibida, proibida a inversão de marcha, não fazer inversão de marcha" }, - "type/restriction/only_left_turn": { - "name": "Sentido obrigatório para a esquerda", - "terms": "obrigatoriedade de virar à esquerda, virar para a esquerda," - }, - "type/restriction/only_right_turn": { - "name": "Sentido obrigatório para a direita", - "terms": "obrigatoriedade de virar à direita, virar para a direita," - }, - "type/restriction/only_straight_on": { - "name": "Sentido obrigatório para a frente", - "terms": "Proibido Virar, seguir em frente" - }, "type/route": { "name": "Rota", "terms": "Rota, Linha, circuito, percursos, percurso, circuitos" @@ -6092,7 +6156,6 @@ "attribution": { "text": "Termos e Opinião" }, - "description": "Limites das imagens e datas de captura. As etiquetas aparecem no nível de aproximação 14 ou superior.", "name": "Imagens DigitalGlobe Premium antigas" }, "DigitalGlobe-Standard": { @@ -6106,7 +6169,6 @@ "attribution": { "text": "Termos e Opinião" }, - "description": "Limites das imagens e datas de captura. As etiquetas aparecem no nível de aproximação 14 ou superior.", "name": "Imagens DigitalGlobe Standard antigaas" }, "EsriWorldImagery": { @@ -6224,7 +6286,7 @@ "attribution": { "text": "basemap.at" }, - "description": "Mapa base Áustria, baseado em informação govenamental ", + "description": "Mapa Base da Áustria, baseado em dados do governo", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6280,13 +6342,13 @@ }, "skobbler": { "attribution": { - "text": "© Telas: skobbler, dados do mapa © contribuidores OpenStreetMap" + "text": "© Mosaico: skobbler, dados do mapa © contribuidores OpenStreetMap" }, "name": "skobbler" }, "stamen-terrain-background": { "attribution": { - "text": "Telas do mapa por Stamen Design, sob licença CC BY 3.0" + "text": "Mosaico do mapa por Stamen Design, sob CC BY 3.0. Dados por OpenStreetMap, sob ODbL" }, "name": "Terreno Stamen" }, @@ -6302,6 +6364,14 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "GeoPhilly": { + "name": "GeoPhilly" + }, + "Mapping-DC-meetup": { + "name": "Mapping DC" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/ro.json b/vendor/assets/iD/iD/locales/ro.json index 12a296248..5956a33e4 100644 --- a/vendor/assets/iD/iD/locales/ro.json +++ b/vendor/assets/iD/iD/locales/ro.json @@ -1,5 +1,9 @@ { "ro": { + "icons": { + "information": "informaÅ£ii", + "remove": "Şterge" + }, "modes": { "add_area": { "title": "Suprafață", @@ -197,6 +201,17 @@ } } }, + "restriction": { + "controls": { + "distance": "Distanţă", + "via": "Prin" + }, + "help": { + "from": "DIN", + "via": "PRIN", + "to": "LA" + } + }, "undo": { "tooltip": "Înapoi: {action}", "nothing": "Nu există nimic de refăcut." @@ -443,12 +458,7 @@ } }, "success": { - "edited_osm": "Ai editat OSM!", "just_edited": "Tocmai ai editat OpenStreetMap!", - "view_on_osm": "Vezi pe OSM", - "facebook": "Distribuie pe Facebook", - "twitter": "Distribuie pe Twitter", - "google": "Distribuie pe Google+", "help_link_text": "Detalii" }, "confirm": { @@ -601,7 +611,14 @@ } }, "welcome": { - "title": "Bun Venit" + "title": "Bun Venit", + "welcome": "Bine ați venit! Acest ghid vă va învăța elementele de bază ale editării pe OpenStreetMap.", + "practice": "Toate datele din acest ghid sunt doar pentru practicare, și orice modificări pe care le faceți în ghid nu vor fi salvate.", + "words": "Acest ghid va introduce câteva cuvinte și concepte noi. Când introducem un cuvânt nou, vom folosi *italics*.", + "mouse": "Puteți utiliza orice dispozitiv de intrare pentru a edita harta, însă acest ghid presupune că aveți un mouse cu butoane stânga și dreapta. ** Dacă doriți să atașați un mouse, faceți acest lucru acum, apoi apăsați pe OK. **", + "leftclick": "Când acest tutorial vă solicită să apăsați odată sau să apăsați de două ori, înseamnă cu butonul din stânga. Pe un trackpad este posibil să fie o atingere cu o singură apăsare sau cu un singur deget. ** Apăsați pe stânga de {num} ori. **", + "rightclick": "Uneori vă vom cere să apăsați dreapta. Acest lucru ar putea fi același lucru cu clic-control sau atingeți cu două degete pe un trackpad. Tastatura poate avea chiar și o tastă de \"meniu\" care funcționează ca și apăsat dreapta. ** Apăsați dreapta de {num} ori. **", + "chapters": "Până acum, este bine! Puteți utiliza butoanele de mai jos pentru a trece peste capitole în orice moment sau pentru a reporni un capitol dacă rămâneți blocat. Să începem! ** Apăsați pe '{next}' pentru a continua. **" }, "navigation": { "title": "Navigare" @@ -1530,9 +1547,6 @@ "trees": { "label": "Copaci" }, - "vending": { - "label": "Tip de Bunuri" - }, "visibility": { "label": "Vizibilitate" }, @@ -4057,18 +4071,6 @@ "name": "Fără Întoarcere", "terms": "" }, - "type/restriction/only_left_turn": { - "name": "Întoarcere doar la Stânga", - "terms": "" - }, - "type/restriction/only_right_turn": { - "name": "Întoarcere doar la Dreapta", - "terms": "" - }, - "type/restriction/only_straight_on": { - "name": "Fără Întoarcere", - "terms": "" - }, "type/route": { "name": "Rută", "terms": "" @@ -4203,6 +4205,11 @@ "description": "Imagini de satelit DigitalGlobe standard.", "name": "Imagini DigitalGlobe Standard" }, + "DigitalGlobe-Standard-vintage": { + "attribution": { + "text": "Termeni & Feedback" + } + }, "MAPNIK": { "attribution": { "text": "© Contribuitori OpenStreetMap, CC-BY-SA" @@ -4278,7 +4285,6 @@ "attribution": { "text": "basemap.at" }, - "description": "Basemap de Austria, bazat pe date ale guvernamentului.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -4339,9 +4345,6 @@ "name": "skobbler" }, "stamen-terrain-background": { - "attribution": { - "text": "Plăci de hartă de Stamen Design, sub CC BY 3.0" - }, "name": "Teren Stamen" }, "tf-cycle": { @@ -4356,6 +4359,11 @@ }, "name": "Peisaj Thunderforest " } + }, + "community": { + "Bay-Area-OpenStreetMappers": { + "description": "Îmbunătățește OpenStreetMap în Bay Area" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/ru.json b/vendor/assets/iD/iD/locales/ru.json index 2630a4b89..8315014a8 100644 --- a/vendor/assets/iD/iD/locales/ru.json +++ b/vendor/assets/iD/iD/locales/ru.json @@ -1,5 +1,10 @@ { "ru": { + "icons": { + "information": "инфо", + "remove": "удалить", + "undo": "отмена" + }, "modes": { "add_area": { "title": "Полигон", @@ -145,7 +150,9 @@ "vertex": "Одна линия присоединена к другой.", "line": "Линия соединена с другой линией.", "area": "Линия присоединена к полигону." - } + }, + "relation": "Эти объекты нельзя соединить, потому что у них конфликтуют роли в отношении.", + "restriction": "Эти объекты нельзя соединить, потому что это повредит отношение \"{relation}\"." }, "disconnect": { "title": "Разъединить", @@ -402,6 +409,7 @@ "key": "H", "title": "История", "selected": "выбрано {n}", + "no_history": "История отсутствует (новый объект)", "version": "Версия", "last_edit": "Последняя правка", "edited_by": "Отредактировано", @@ -639,15 +647,20 @@ } }, "success": { - "edited_osm": " OSM отредактирован!", "just_edited": "Вы только что отредактировали карту OpenStreetMap!", - "view_on_osm": "Посмотреть в OSM", - "facebook": "Поделиться на Facebook", - "twitter": "Поделиться через Twitter", - "google": "Поделиться через Google+", - "help_html": "Ваши изменения должны появиться на «Стандартном» слое в течение нескольких минут. Остальные слои и отдельные объекты могут занять больше времени.", + "thank_you": "Спасибо вам за то, что улучшаете карту.", + "thank_you_location": "Спасибо вам за то, что улучшаете карту в окрестностях {where}.", + "help_html": "Сделанные вами правки отобразятся в OpenStreetMap в течение нескольких минут. На другие карты они могут попасть не так быстро.", "help_link_text": "Подробности", - "help_link_url": "https://wiki.openstreetmap.org/wiki/RU:FAQ#.D0.AF_.D0.BD.D0.B0.D0.BD.D1.91.D1.81_.D0.BD.D0.B5.D1.81.D0.BA.D0.BE.D0.BB.D1.8C.D0.BA.D0.BE_.D0.BE.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D0.BE.D0.B2_.D0.BD.D0.B0_.D0.BA.D0.B0.D1.80.D1.82.D1.83.2C_.D0.BD.D0.BE_.D0.BE.D0.BD.D0.B8_.D0.BD.D0.B5_.D0.BE.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B0.D1.8E.D1.82.D1.81.D1.8F._.D0.9F.D0.BE.D1.87.D0.B5.D0.BC.D1.83.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/RU:FAQ#.D0.AF_.D0.BD.D0.B0.D0.BD.D1.91.D1.81_.D0.BD.D0.B5.D1.81.D0.BA.D0.BE.D0.BB.D1.8C.D0.BA.D0.BE_.D0.BE.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D0.BE.D0.B2_.D0.BD.D0.B0_.D0.BA.D0.B0.D1.80.D1.82.D1.83.2C_.D0.BD.D0.BE_.D0.BE.D0.BD.D0.B8_.D0.BD.D0.B5_.D0.BE.D1.82.D0.BE.D0.B1.D1.80.D0.B0.D0.B6.D0.B0.D1.8E.D1.82.D1.81.D1.8F._.D0.9F.D0.BE.D1.87.D0.B5.D0.BC.D1.83.3F", + "view_on_osm": "Посмотреть изменения на OSM", + "changeset_id": "Ваш пакет правок #: {changeset_id}", + "like_osm": "Нравится OpenStreetMap? Объединяйтесь с другими:", + "more": "Показать больше", + "events": "События", + "languages": "Яызки: {languages}", + "missing": "Чего-нибудь не хватает в списке?", + "tell_us": "Сообщите нам!" }, "confirm": { "okay": "OK", @@ -1318,7 +1331,7 @@ "name": "Здания" }, "category-golf": { - "name": "Гольф объекты" + "name": "Гольф-объекты" }, "category-landuse": { "name": "Объекты землепользования" @@ -1397,7 +1410,7 @@ } }, "access_simple": { - "label": "Общий доступ" + "label": "Доступ для всех" }, "address": { "label": "Адресная информация", @@ -1629,7 +1642,7 @@ "label": "Страна" }, "covered": { - "label": "Крытое" + "label": "Крытое(-ая)" }, "craft": { "label": "Тип мастерской" @@ -1769,6 +1782,9 @@ "display": { "label": "Циферблат" }, + "distance": { + "label": "Расстояние" + }, "dock": { "label": "Тип" }, @@ -1809,12 +1825,15 @@ "except": { "label": "Не действует для" }, + "faces": { + "label": "Количество сторон" + }, "fax": { "label": "Факс", "placeholder": "+7 495 1234567" }, "fee": { - "label": "Есть оплата" + "label": "Платная (-ый)" }, "fence_type": { "label": "Тип" @@ -1920,6 +1939,39 @@ "label": "Число колец", "placeholder": "1, 2, 4…" }, + "horse_dressage": { + "label": "Выездка (дрессура)", + "options": { + "equestrian": "Да", + "undefined": "Нет" + } + }, + "horse_riding": { + "label": "Верховая езда", + "options": { + "horse_riding": "Да", + "undefined": "Нет" + } + }, + "horse_scale": { + "label": "Сложность для верховой езды", + "options": { + "common": "Легая. Отсутствуют проблемы или сложности.", + "critical": "На грани: Проходимо только для опытных наездников и лошадей. Серьёзные препятствия. Мосты следуют хорошенько изучить.", + "dangerous": "Опасно: Проходимо только очень опытными наездниками и лошадьми и только в хорошую погоду. Необходимость спешиваться.", + "demanding": "Будьте внимательны: неровная дорога, иногда сложные участки", + "difficult": "Сложно: узкий путь. Встречаются препятствия, которые необходимо перепрыгнуть.", + "impossible": "Непроходимо: Путь или мость не проходим для лошадей. Слишком узок, недостаточно прочен, встречаются лестницы. Опасно для жизни." + }, + "placeholder": "Сложность, опасность..." + }, + "horse_stables": { + "label": "Конюшня", + "options": { + "stables": "Да", + "undefined": "Нет" + } + }, "iata": { "label": "IATA" }, @@ -1939,6 +1991,9 @@ "indoor": { "label": "План помещения" }, + "industrial": { + "label": "Тип" + }, "information": { "label": "Тип" }, @@ -2059,6 +2114,10 @@ "label": "Ограничение скорости", "placeholder": "40, 50, 60…" }, + "maxspeed/advisory": { + "label": "Рекомендуемая скорость", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Максимальное время остановки" }, @@ -2195,11 +2254,11 @@ "parking": { "label": "Тип", "options": { - "carports": "Автомобильный навес", + "carports": "Навес", "garage_boxes": "Одноярусные гаражи", - "lane": "Полоса вдоль дороги", + "lane": "Уличная парковка", "multi-storey": "Многоярусная", - "sheds": "Сараи рядом с домом", + "sheds": "Козырёк", "surface": "Наземная", "underground": "Подземная" } @@ -2516,13 +2575,13 @@ "label": "Тип" }, "supervised": { - "label": "Наблюдение" + "label": "Охраняемая(-ый)" }, "support": { "label": "Находится на" }, "surface": { - "label": "Покрытие" + "label": "Дорожное покрытие" }, "surveillance": { "label": "Тип наблюдения" @@ -2647,8 +2706,19 @@ "label": "Тип тоннеля", "placeholder": "По умолчанию" }, + "usage_rail": { + "label": "Тип использования", + "options": { + "branch": "Ветка", + "industrial": "Промышленное", + "main": "Основное", + "military": "Военное", + "test": "Тестовое", + "tourism": "Туризм" + } + }, "vending": { - "label": "Тип товаров" + "label": "Тип автомата" }, "visibility": { "label": "Видимость", @@ -2741,6 +2811,10 @@ "name": "Рекламный щит", "terms": "реклама,объявление,щит,билборд,информация,транспорант,постер,растяжка" }, + "advertising/column": { + "name": "Афишная тумба Морриса", + "terms": "тумба моририса, колонна, рекламная, реклама, афиша" + }, "aerialway": { "name": "Подъёмник" }, @@ -2825,6 +2899,10 @@ "name": "Терминал аэропорта", "terms": "Терминал аэропорта" }, + "allotments/plot": { + "name": "Садовый участок", + "terms": "огород, садовый участок" + }, "amenity": { "name": "Инфраструктура" }, @@ -2966,12 +3044,12 @@ "terms": "крематорий,захоронение,услуги,церемония,мертвец,покойник,кладбище,обряд,служба,прах,колумбарий" }, "amenity/dentist": { - "name": "Дантист", - "terms": "стоматолог, дантист, зубной врач" + "name": "Стоматология", + "terms": "стоматолог, стоматология, дантист, зубной врач" }, "amenity/doctors": { "name": "Кабинет врача", - "terms": "врач, доктор,фельдшер,медик, небольшая клиника, клиника" + "terms": "врач, доктор,фельдшер,медик, небольшая клиника, клиника, медпункт, медицинский кабинет, здравпункт" }, "amenity/dojo": { "name": "Додзё / Школа боевых искусств", @@ -2991,7 +3069,7 @@ }, "amenity/fast_food": { "name": "Фаст-фуд", - "terms": "фастфуд, фаст-фуд, быстрое питание, ресторан быстрого питания, столовая, бистро" + "terms": "фастфуд, фаст-фуд, быстрое питание, ресторан быстрого питания, столовая, бистро, кафетерий" }, "amenity/ferry_terminal": { "name": "Пристань/терминал для парома" @@ -3002,7 +3080,7 @@ }, "amenity/food_court": { "name": "Ресторанный дворик", - "terms": "фудкорт,забегаловка,кафе,быстро,еда,центр,торговый,развлекательный,кино, отдых,досуг,ресторан,суши,пицца,кофе,напитки,пирожные" + "terms": "фудкорт, ресторанный дворик" }, "amenity/fountain": { "name": "Фонтан", @@ -3051,6 +3129,9 @@ "name": "Рынок", "terms": "Рынок" }, + "amenity/monastery": { + "name": "Монастырь" + }, "amenity/motorcycle_parking": { "name": "Парковка для мотоциклов", "terms": "мотопарковка, мотопаркинг, парковка для мотоциклов, паркинг для мотоциклов, мотостоянка" @@ -3099,7 +3180,8 @@ "terms": "храм, часовня, молельня, дом божий, капелла, церковь, кафедрарий, место поклонения, культовое сооружение, святое место, мечеть, собор, синагога" }, "amenity/place_of_worship/hindu": { - "name": "Индуистский храм" + "name": "Индуистский храм", + "terms": "индуистский храм, мандир" }, "amenity/place_of_worship/jewish": { "name": "Синагога", @@ -3113,7 +3195,8 @@ "name": "Дзиндзя" }, "amenity/place_of_worship/sikh": { - "name": "Гурдвара" + "name": "Гурдвара", + "terms": "сикхский храм, гурдвара" }, "amenity/place_of_worship/taoist": { "name": "Даосский храм", @@ -3252,6 +3335,9 @@ "name": "Автомат по продаже сигарет", "terms": "Автомат по продаже сигарет" }, + "amenity/vending_machine/coffee": { + "name": "Кофе" + }, "amenity/vending_machine/condoms": { "name": "Автомат по продаже презервативов", "terms": "Автомат по продаже презервативов" @@ -3260,6 +3346,12 @@ "name": "Автомат по продаже напитков", "terms": "газировка, напитки, вода" }, + "amenity/vending_machine/electronics": { + "name": "Электронные устройства" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Удлинённая монета" + }, "amenity/vending_machine/excrement_bags": { "name": "Автомат по продаже мешков для экскрементов", "terms": "экскременты, животные" @@ -3267,6 +3359,17 @@ "amenity/vending_machine/feminine_hygiene": { "name": "Автомат для продажи средств женской гигиены" }, + "amenity/vending_machine/food": { + "name": "Продукты питания", + "terms": "Продуктовый автомат, автомат с закусками" + }, + "amenity/vending_machine/fuel": { + "name": "Заправка", + "terms": "азс, бензин, дизель, автозаправка, газ, пропан, бутан" + }, + "amenity/vending_machine/ice_cream": { + "name": "Мороженое" + }, "amenity/vending_machine/news_papers": { "name": "Автомат по продаже газет (ошибочный тег)" }, @@ -3285,9 +3388,13 @@ "amenity/vending_machine/public_transport_tickets": { "name": "Автомат по продаже проездных билетов" }, + "amenity/vending_machine/stamps": { + "name": "Почтовый автомат", + "terms": "письма, почта, марки" + }, "amenity/vending_machine/sweets": { "name": "Автомат по продаже батончиков", - "terms": "Автомат по прожае снеков, торговый автомат" + "terms": "Автомат продажи, торговый автомат" }, "amenity/veterinary": { "name": "Ветеринар", @@ -3352,6 +3459,10 @@ "attraction/drop_tower": { "name": "Аттракцион \"Свободное падение\"" }, + "attraction/maze": { + "name": "Лабиринт", + "terms": "аттракцион, головоломка, загадка, лабиринт" + }, "attraction/pirate_ship": { "name": "Пиратский корабль" }, @@ -3630,6 +3741,9 @@ "name": "Поляна для кемпинга", "terms": "тент, палатка, кемпинг" }, + "circular": { + "name": "Круговое движение со въездами разного приоритета" + }, "club": { "name": "Клуб", "terms": "Клуб по интересам, фан-клуб, кружок" @@ -3952,6 +4066,10 @@ "healthcare/hospice": { "name": "Хоспис" }, + "healthcare/laboratory": { + "name": "Медицинская лаборатория", + "terms": "лаборатория, анализы, медицина, кровь, моча" + }, "healthcare/midwife": { "name": "Акушерство" }, @@ -4035,13 +4153,17 @@ "terms": "Автомагистраль, Скоростная автострада, Скоростное шоссе, Автобан, Скоростная автодорога, Хайвэй, Скоростна автотрасса" }, "highway/motorway_junction": { - "name": "Развязка / съезд", - "terms": "развязка, съезд" + "name": "Магистральная развязка / съезд", + "terms": "магистральная развязка, съезд" }, "highway/motorway_link": { "name": "Съезд с автомагистрали", "terms": "Съезд с автомагистрали, Съезд со скоростной автострады, Съезд со скоростного шоссе, Съезд с автобана, Съезд со скоростной автодороги, Съезд с хайвэя, Съезд со скоростной автотрассы" }, + "highway/passing_place": { + "name": "Место разъезда", + "terms": "разъезд, разъехаться, карман, узкая дорога, уширение" + }, "highway/path": { "name": "Тропа", "terms": "Тропа, Тропинка, Тропка, пешеходная дорога для немоторизованного траспорта" @@ -4084,11 +4206,11 @@ "terms": "съезд, съезд с важной дороги" }, "highway/service": { - "name": "Проезд", + "name": "Служебная дорога", "terms": "Проезд, Автопроезд" }, "highway/service/alley": { - "name": "Служебный проезд", + "name": "Дорога на задворках", "terms": "Служебный проезд, Сервисный проезд, Второстепенный проезд" }, "highway/service/drive-through": { @@ -4096,7 +4218,7 @@ "terms": "Сервис не выходя из машины, Обслуживание не выходя из машины" }, "highway/service/driveway": { - "name": "Подъездная дорожка", + "name": "Подъездная дорога", "terms": "Подъездная дорога, Подъезд к чему-либо" }, "highway/service/emergency_access": { @@ -4104,7 +4226,7 @@ "terms": "Эвакуационный выход, Аварийный выход" }, "highway/service/parking_aisle": { - "name": "Парковочный проезд", + "name": "Между рядами парковки", "terms": "парковочный проезд, проезд на парковке" }, "highway/services": { @@ -4140,7 +4262,8 @@ "terms": "полевая, грунтовка, сельскохозяйственная" }, "highway/traffic_mirror": { - "name": "Дорожное зеркало" + "name": "Дорожное зеркало", + "terms": "зеркало, дорожный экран" }, "highway/traffic_signals": { "name": "Светофор", @@ -4213,7 +4336,7 @@ }, "landuse/allotments": { "name": "Садовые участки", - "terms": "Участки садов и огородов, Сады и огороды, СОТ, СНТ, Дачи" + "terms": "Участки садов и огородов, Сады и огороды, СОТ, СНТ, Дачи, огороды" }, "landuse/aquaculture": { "name": "Аквакультура", @@ -4380,6 +4503,10 @@ "leisure/amusement_arcade": { "name": "Игровые автоматы" }, + "leisure/beach_resort": { + "name": "Пляжный курорт", + "terms": "пляж, курорт" + }, "leisure/bird_hide": { "name": "Пункт наблюдения за птицами" }, @@ -4474,6 +4601,10 @@ "name": "Заповедник", "terms": "заказник" }, + "leisure/outdoor_seating": { + "name": "Столики на улице (площадка)", + "terms": "на улице, кафе на улице, стол, столики, уличное" + }, "leisure/park": { "name": "Парк отдыха", "terms": "парк, рекреация, место для отдыха" @@ -4599,6 +4730,9 @@ "name": "Штольня", "terms": "штольня" }, + "man_made/antenna": { + "name": "Антенна" + }, "man_made/breakwater": { "name": "Волнорез", "terms": "Мол, Оградительное гидросооружение" @@ -4649,6 +4783,10 @@ "name": "Смотровая башня", "terms": "Смотровая башня, Обзорная башня" }, + "man_made/observatory": { + "name": "Обсерватория", + "terms": "астрономия, небо, звезды, наблюдение, телескоп" + }, "man_made/petroleum_well": { "name": "Нефтяная скважина", "terms": "скважина, нефть" @@ -4767,6 +4905,10 @@ "name": "Вересковая пустошь", "terms": "Вереск, пустошь" }, + "natural/mud": { + "name": "Грязь", + "terms": "вода с землей, земля" + }, "natural/peak": { "name": "Вершина", "terms": "пик, гора" @@ -5526,7 +5668,7 @@ }, "shop/department_store": { "name": "Универсальный магазин (с отделами)", - "terms": "торговый центр, дом быта, тц, универсальный магазин" + "terms": "дом быта, универсальный магазин, универсам" }, "shop/doityourself": { "name": "Строительный гипермаркет", @@ -5728,6 +5870,10 @@ "name": "Зоомагазин", "terms": "зоомагазин, для животных" }, + "shop/pet_grooming": { + "name": "Парикмахерская для животных", + "terms": "зоосалон, салон красоты для животных, собак, кошек, стрижка, уход, мытьё" + }, "shop/photo": { "name": "Фототовары", "terms": "Фототовары, Фототехника, фото на паспорт, паспорт, фото" @@ -5750,7 +5896,7 @@ }, "shop/seafood": { "name": "Магазин морепродуктов", - "terms": "Морепродукты, Суши, Рыба, Рыбный" + "terms": "Морепродукты, Рыба, Рыбный" }, "shop/second_hand": { "name": "Магазин секонд хенда", @@ -5773,7 +5919,7 @@ }, "shop/supermarket": { "name": "Супермаркет", - "terms": "гипермаркет" + "terms": "гипермаркет, сумермаркет" }, "shop/tailor": { "name": "Портной", @@ -5940,6 +6086,10 @@ "name": "Парк развлечений", "terms": "парк, отдых, развлечения, тематический парк, парк аттракционов, аттракционы" }, + "tourism/trail_riding_station": { + "name": "Временное жильё для лошадей и наездников", + "terms": "верховая езда, проживание, жилье, лошадиный, лошадь, кони, конный" + }, "tourism/viewpoint": { "name": "Обзорная точка", "terms": "площадка, обозрение, точка обзора, смотровая площадка, хороший вид" @@ -6004,7 +6154,7 @@ }, "type/restriction": { "name": "Ограничение манёвра", - "terms": "Ограничение, Ограничение направлений движения, Ограничение манёвра, Запрет на поворот, Запрет поворота, манёвра" + "terms": "ограничение, ограничение направлений движения, ограничение манёвра, запрет на поворот, запрет поворота, манёвра" }, "type/restriction/no_left_turn": { "name": "Поворот налево запрещён (3.18.2)", @@ -6016,23 +6166,23 @@ }, "type/restriction/no_straight_on": { "name": "Движение направо или налево (4.1.4)", - "terms": "Движение прямо запрещено, Движение налево или направо, 4.1.4" + "terms": "движение прямо запрещено, движение налево или направо, 4.1.4" }, "type/restriction/no_u_turn": { "name": "Разворот запрещён (3.19)", "terms": "Разворот запрещён, Без разворотов, Запрещён разворот" }, "type/restriction/only_left_turn": { - "name": "Движение налево (4.1.3)", - "terms": "Только поворот налево, Движение налево, 4.1.3" + "name": "Только поворот налево" }, "type/restriction/only_right_turn": { - "name": "Движение направо (4.1.2)", - "terms": "Только поворот направо, Движение направо, 4.1.2" + "name": "Только поворот направо" }, "type/restriction/only_straight_on": { - "name": "Движение прямо (4.1.1)", - "terms": "Движение прямо, повороты запрещены, только прямо, запрет поворотов, 4.1.1" + "name": "Только прямо" + }, + "type/restriction/only_u_turn": { + "name": "Только разворот" }, "type/route": { "name": "Маршрут", @@ -6188,7 +6338,7 @@ "attribution": { "text": "Условия и обратная связь" }, - "description": "Границы подложек и даты съемки. Надписи появляются на 14 зуме и выше.", + "description": "Границы подложек и даты съемки. Надписи появляются на 13 зуме и выше.", "name": "Премиум снимки DigitalGlobe (Vintage)." }, "DigitalGlobe-Standard": { @@ -6202,7 +6352,7 @@ "attribution": { "text": "Условия и обратная связь" }, - "description": "Границы подложек и даты съемки. Надписи появляются на 14 зуме и выше.", + "description": "Границы подложек и даты съемки. Надписи появляются на 13 зуме и выше.", "name": "Стандартные снимки DigitalGlobe (Vintage)" }, "EsriWorldImagery": { @@ -6382,7 +6532,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Тайлы: Stamen Design, под CC BY 3.0" + "text": "Тайлы: Stamen Design, под CC BY 3.0. Данные: OpenStreetMap, под ODbL" }, "name": "Stamen Ландшафт" }, @@ -6398,6 +6548,39 @@ }, "name": "Thunderforest Ландшафт" } + }, + "community": { + "OSM-RU-forum": { + "name": "Форум русскоязычного сообщества OSM", + "description": "Дискуссии, вопросы, голосования, проблемы и их решения — вам сюда." + }, + "OSM-RU-telegram": { + "name": "Telegram-чат русскоязычного сообщества OSM", + "description": "Участники рады ответить на любой вопрос, связанный с использованием или рисованием карт, и готовы обсудить любую релевантную новость. Да, мы любим аниме и умеем устанавливать KDE на FreeBSD." + }, + "Bay-Area-OpenStreetMappers": { + "description": "Улучшить перевод OpenStreetMap в Bay Area" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "Группа пользователей OpenStreetMap в Chattanooga" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland", + "description": "Мапперы и пользователи OpenStreetMap в Portland area" + }, + "OSM-US-Slack": { + "name": "Slack OpenStreetMap US", + "description": "Приглашаются все! Регистрация на {signupUrl}" + }, + "Maptime-Australia-Slack": { + "name": "Slack \"Maptime Australia\"", + "description": "Регистрация на {signupUrl}" + }, + "OSM-Reddit": { + "name": "OpenStreetMap на Reddit", + "description": "/r/openstreetmap/ — прекрасное место, чтобы узнать что-нибудь про OpenStreetMap. Задавайте любые вопросы!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/si.json b/vendor/assets/iD/iD/locales/si.json index 2c6fa87bc..92f64f921 100644 --- a/vendor/assets/iD/iD/locales/si.json +++ b/vendor/assets/iD/iD/locales/si.json @@ -352,12 +352,7 @@ } }, "success": { - "edited_osm": "OSM සංස්කරණය කරන ලදී!", - "just_edited": "ඔබ මේ මොහොතේ OpenStreetMap සංස්කරණය කරන ලදී", - "view_on_osm": "OSM මත දක්වන්න", - "facebook": "Facebook හි බෙදාහරින්න", - "twitter": "Twitter හි බෙදා හරින්න", - "google": "Google+ හි බෙදා හරින්න" + "just_edited": "ඔබ මේ මොහොතේ OpenStreetMap සංස්කරණය කරන ලදී" }, "confirm": { "cancel": "අහෝසි කරන්න" @@ -525,9 +520,6 @@ "tracktype": { "label": "වර්ගය" }, - "vending": { - "label": "වර්ගය" - }, "water": { "label": "වර්ගය" }, diff --git a/vendor/assets/iD/iD/locales/sk.json b/vendor/assets/iD/iD/locales/sk.json index 92c8e3860..22e888a85 100644 --- a/vendor/assets/iD/iD/locales/sk.json +++ b/vendor/assets/iD/iD/locales/sk.json @@ -582,13 +582,7 @@ } }, "success": { - "edited_osm": "OSM bol upravený!", "just_edited": "Práve ste upravili OpenStreetMap!", - "view_on_osm": "ZobraziÅ¥ na OSM", - "facebook": "Zdieľaj na Facebooku", - "twitter": "Zdieľaj na Twitteri", - "google": "Zdieľaj na Google+", - "help_html": "VaÅ¡e zmeny by sa mali objaviÅ¥ na \"Základnej\" vrstve v priebehu niekoľkých minút. Ostatným vrstvám a niektorým objektom to môže trvaÅ¥ dlhÅ¡ie.", "help_link_text": "Podrobnosti", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -2182,9 +2176,6 @@ "label": "Typ", "placeholder": "Prednastavené" }, - "vending": { - "label": "Typ tovaru" - }, "visibility": { "label": "ViditeľnosÅ¥", "options": { @@ -4612,18 +4603,6 @@ "name": "Zákaz otáčania", "terms": "zakaz otacania" }, - "type/restriction/only_left_turn": { - "name": "Prikázaný smer jazdy vľavo", - "terms": "Prikazany smer jazdy vlavo" - }, - "type/restriction/only_right_turn": { - "name": "Prikázaný smer jazdy vpravo", - "terms": "prikazany smer jazdy vpravo" - }, - "type/restriction/only_straight_on": { - "name": "Prikázaný smer jazdy priamo", - "terms": "prikazany smer jazdy priamo" - }, "type/route": { "name": "Trasa", "terms": "trasa,linka,trat,traÅ¥" @@ -4838,7 +4817,6 @@ "attribution": { "text": "basemap.at" }, - "description": "Základná mapa Rakúska, odvodená z vládnych dát.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -4899,9 +4877,6 @@ "name": "skobbler" }, "stamen-terrain-background": { - "attribution": { - "text": "Mapové dlaždice od Stamen Design, pod CC BY 3.0" - }, "name": "Stamen terén" }, "tf-cycle": { diff --git a/vendor/assets/iD/iD/locales/sl.json b/vendor/assets/iD/iD/locales/sl.json index 6290f19ed..d68930dfb 100644 --- a/vendor/assets/iD/iD/locales/sl.json +++ b/vendor/assets/iD/iD/locales/sl.json @@ -592,13 +592,7 @@ } }, "success": { - "edited_osm": "OSM je posodobljen!", "just_edited": "Zemljevid OSM je posodobljen!", - "view_on_osm": "Pokaži spremembe na OSM", - "facebook": "Objavi na Facebook", - "twitter": "Objavi na Twitter", - "google": "Objavi na Google+", - "help_html": "Spremembe na »osnovni plasti« se bodo na zemljevidu pojavile čez nekaj minut. Dodatne plasti in nekatere značilnosti se lahko posodabljajo dlje.", "help_link_text": "Podrobnosti", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -2163,9 +2157,6 @@ "trees": { "label": "Drevesa" }, - "vending": { - "label": "Vrsta dobrin" - }, "visibility": { "label": "Vidnost", "options": { @@ -4703,18 +4694,6 @@ "name": "Ni mogoče polkrožno obrniti", "terms": "Polkrožno obračanje ni dovoljeno" }, - "type/restriction/only_left_turn": { - "name": "Možno je zaviti samo levo", - "terms": "Dovoljeno je zaviti samo levo." - }, - "type/restriction/only_right_turn": { - "name": "Možno je zaviti samo desno", - "terms": "Dovoljeno je zaviti samo desn" - }, - "type/restriction/only_straight_on": { - "name": "Možno je samo nadaljevati naravnost", - "terms": "Zavijanje ni dovoljeno." - }, "type/route": { "name": "Proga", "terms": "cesta,letalska linija,kolesarska pot,pohodniÅ¡ka pot,linija,pot" @@ -4846,8 +4825,7 @@ "DigitalGlobe-Premium-vintage": { "attribution": { "text": "Pogoji uporabe in odziv" - }, - "description": "Meje posnetkov in datumi zajema. Oznake se pojavijo na ravni povečave 14 in viÅ¡jih." + } }, "DigitalGlobe-Standard": { "attribution": { @@ -4859,8 +4837,7 @@ "DigitalGlobe-Standard-vintage": { "attribution": { "text": "Pogoji uporabe in odziv" - }, - "description": "Meje posnetkov in datumi zajema. Oznake se pojavijo na ravni povečave 14 in viÅ¡jih." + } }, "EsriWorldImagery": { "attribution": { @@ -4944,7 +4921,6 @@ "attribution": { "text": "basemap.at" }, - "description": "Osnovni zemljevid Avstrije, ki temelji na uradnih podatkih", "name": "basemap.at" }, "basemap.at-orthofoto": { diff --git a/vendor/assets/iD/iD/locales/so.json b/vendor/assets/iD/iD/locales/so.json index 52c4ba85a..0460f239a 100644 --- a/vendor/assets/iD/iD/locales/so.json +++ b/vendor/assets/iD/iD/locales/so.json @@ -20,6 +20,12 @@ "point": "Ku daray bar." } }, + "start": { + "annotation": { + "line": "Bilaabay xariiq.", + "area": "Bilaabay goob." + } + }, "continue": { "title": "Sii wad", "description": "Sii wad khadkanan.", @@ -36,7 +42,14 @@ "title": "Goobo geli", "description": { "line": "Ka dhig khadkan wareeg." - } + }, + "not_closed": "Tani lagama dhigi karo wareeg maxaa yeelay ma aha duub" + }, + "orthogonalize": { + "description": { + "area": "Afar geesood ka dhig qararka goobtan." + }, + "not_squarish": "Tani lagama dhigi karo afar gees, sababtoo ah ma aha mid afar gees ah" }, "delete": { "title": "Tirtir", @@ -46,7 +59,8 @@ }, "disconnect": { "title": "Jar Xiriirka", - "description": "Ka jar xiriirka khadadkan/goobahan midba midka kale." + "description": "Ka jar xiriirka khadadkan/goobahan midba midka kale.", + "not_connected": "Ma jiraan khadad/goobo ku filan halkan ku yaalo si loo joojiyo" }, "move": { "title": "Dhaqaaji", @@ -96,16 +110,20 @@ }, "tooltip_keyhint": "Af-goys:", "translate": { + "translate": "Turjum", "localized_translation_label": "Magaca luqadaha badan", "localized_translation_language": "Dooro luuqada", "localized_translation_name": "Magaca" }, + "zoom_in_edit": "Soo dhawee si aad u tifaftirto khariidada", + "help_translate": "Turjum", "commit": { "created": "Lagu suurtogeliyay" }, "info_panels": { "background": { "title": "Hagaajinta", + "zoom": "Soo dhawee", "description": "Sharaxaad" }, "history": { @@ -126,14 +144,18 @@ "title": "Muuji Goobtayda" }, "inspector": { + "view_on_osm": "Ka eeg openstreetmap.org", "all_fields": "Dhammaan goobaha", "all_tags": "Dhammaan taxanbayaasha", "all_relations": "Dhammaan xiriirada", "choose": "Dooro nooca tilmaamaha", + "reference": "Ka eeg Wiki OpenStreetMap", "search": "Raadi", "feature_list": "Tilmaamaha Waydiimaha", + "edit": "Tifaftir tilmaamaha", "radio": { "structure": { + "type": "Nooca", "layer": "Lakabka" } }, @@ -168,14 +190,16 @@ "next": "Xiga >" } }, - "success": { - "facebook": "Faafi Facebook", - "twitter": "Faafi Twitter", - "google": "Faafi Google+" + "splash": { + "welcome": "Ku soo dhowow id OpenStreetMap editor" }, "tag_reference": { "description": "Sharaxaad" }, + "zoom": { + "in": "Soo dhawee", + "out": "Fogee" + }, "help": { "title": "Caawin", "help": { @@ -202,12 +226,23 @@ } } }, + "intro": { + "welcome": { + "title": "Ku soo dhowow" + }, + "startediting": { + "start": "Bilow Jihaynta!" + } + }, "shortcuts": { "title": "Af-goys", "key": { "delete": "Tirtir" }, "browsing": { + "navigation": { + "zoom": "Soo dhawee / Fogee" + }, "help": { "title": "Caawin" } @@ -251,6 +286,12 @@ }, "category-road": { "name": "Tilmaamaha Wadooyinka" + }, + "category-water-area": { + "name": "Tilmaamaha Biyaha" + }, + "category-water-line": { + "name": "Tilmaamaha Biyaha" } }, "fields": { @@ -263,23 +304,80 @@ } }, "address": { + "label": "Cinwaanka", "placeholders": { "city": "Magaalo", - "place": "Goob" + "city!vn": "Magaalo", + "place": "Goob", + "street": "Wadada" } }, + "aerialway": { + "label": "Nooca" + }, + "aeroway": { + "label": "Nooca" + }, + "amenity": { + "label": "Nooca" + }, + "area/highway": { + "label": "Nooca" + }, + "artwork_type": { + "label": "Nooca" + }, + "barrier": { + "label": "Nooca" + }, + "bicycle_parking": { + "label": "Nooca" + }, + "board_type": { + "label": "Nooca" + }, + "boules": { + "label": "Nooca" + }, + "boundary": { + "label": "Nooca" + }, + "bridge": { + "label": "Nooca" + }, "building": { "label": "Dhismo" }, "building_area": { "label": "Dhismo" }, + "bunker_type": { + "label": "Nooca" + }, "capacity": { "label": "Mug" }, + "castle_type": { + "label": "Nooca" + }, + "club": { + "label": "Nooca" + }, + "construction": { + "label": "Nooca" + }, + "craft": { + "label": "Nooca" + }, + "crossing": { + "label": "Nooca" + }, "cuisine": { "label": "Cunnada" }, + "cutting": { + "label": "Nooca" + }, "cycleway": { "label": "Dhabbaha Baaskiilada", "types": { @@ -296,32 +394,97 @@ "description": { "label": "Sharaxaad" }, + "dock": { + "label": "Nooca" + }, + "electrified": { + "options": { + "no": "Maya", + "yes": "Haa (unspecified)" + } + }, + "embankment": { + "label": "Nooca" + }, + "entrance": { + "label": "Nooca" + }, + "fence_type": { + "label": "Nooca" + }, "fire_hydrant/type": { + "label": "Nooca", "options": { "pond": "Balli" } }, + "ford": { + "label": "Nooca" + }, "generator/source": { "label": "Bilowga xogta" }, + "generator/type": { + "label": "Nooca" + }, + "government": { + "label": "Nooca" + }, + "healthcare": { + "label": "Nooca" + }, + "highway": { + "label": "Nooca" + }, + "historic": { + "label": "Nooca" + }, + "information": { + "label": "Nooca" + }, "internet_access": { - "label": "Helitaanka Internet-ka" + "label": "Helitaanka Internet-ka", + "options": { + "no": "Maya", + "yes": "Haa" + } }, "internet_access/ssid": { "label": "SSID (Magaca Network)" }, + "lamp_type": { + "label": "Nooca" + }, + "landuse": { + "label": "Nooca" + }, "lanes": { "label": "Tirada Dhabbooyinka" }, + "leisure": { + "label": "Nooca" + }, "levels": { "label": "Heerarka" }, + "man_made": { + "label": "Nooca" + }, + "manhole": { + "label": "Nooca" + }, + "map_type": { + "label": "Nooca" + }, "maxheight": { "label": "Dhererka ugu Sareeya" }, "maxspeed": { "label": "Xadka Xawaaraha" }, + "memorial": { + "label": "Nooca" + }, "name": { "label": "Magaca", "placeholder": "Magaca guud (haddii uu jiro)" @@ -329,11 +492,25 @@ "natural": { "label": "Dabiiciga" }, + "note": { + "label": "Qoraal" + }, + "office": { + "label": "Nooca" + }, "oneway": { - "label": "Hal Wado" + "label": "Hal Wado", + "options": { + "no": "Maya", + "yes": "Haa" + } }, "oneway_yes": { - "label": "Hal Wado" + "label": "Hal Wado", + "options": { + "no": "Maya", + "yes": "Haa" + } }, "opening_hours": { "label": "Saacado" @@ -344,23 +521,157 @@ "outdoor_seating": { "label": "Fadhiga Banaanka" }, + "parking": { + "label": "Nooca", + "options": { + "surface": "Sagxada" + } + }, + "piste/type": { + "label": "Nooca" + }, + "place": { + "label": "Nooca" + }, + "power": { + "label": "Nooca" + }, + "railway": { + "label": "Nooca" + }, + "relation": { + "label": "Nooca" + }, + "religion": { + "label": "Diinta" + }, + "restriction": { + "label": "Nooca" + }, + "route": { + "label": "Nooca" + }, + "route_master": { + "label": "Nooca" + }, + "second_hand": { + "options": { + "no": "Maya", + "yes": "Haa" + } + }, + "service": { + "label": "Nooca" + }, + "shelter_type": { + "label": "Nooca" + }, + "shop": { + "label": "Nooca" + }, + "site": { + "label": "Nooca" + }, "smoking": { "label": "Sigaar-cabbista waa la oggolyahay" }, + "social_facility": { + "label": "Nooca" + }, "source": { "label": "Bilowga xogta" }, "sport": { "label": "Cayaaraha" }, + "sport_ice": { + "label": "Cayaaraha" + }, + "sport_racing_motor": { + "label": "Cayaaraha" + }, + "sport_racing_nonmotor": { + "label": "Cayaaraha" + }, "structure": { + "label": "Dhismo", "options": { "bridge": "Buundo", - "ford": "Tog" + "ford": "Tog", + "tunnel": "Jid Dalool" + } + }, + "structure_waterway": { + "label": "Dhismo", + "options": { + "tunnel": "Jid Dalool" + } + }, + "studio": { + "label": "Nooca" + }, + "substation": { + "label": "Nooca" + }, + "surface": { + "label": "Sagxada" + }, + "switch": { + "label": "Nooca" + }, + "takeaway": { + "label": "Qaadasho", + "options": { + "no": "Maya", + "yes": "Haa" + } + }, + "toilets/disposal": { + "options": { + "pitlatrine": "Musqulo" } + }, + "tomb": { + "label": "Nooca" + }, + "tourism": { + "label": "Nooca" + }, + "tower/type": { + "label": "Nooca" + }, + "trade": { + "label": "Nooca" + }, + "traffic_calming": { + "label": "Nooca" + }, + "traffic_signals": { + "label": "Nooca" + }, + "transformer": { + "label": "Nooca" + }, + "tunnel": { + "label": "Nooca" + }, + "wall": { + "label": "Nooca" + }, + "water": { + "label": "Nooca" + }, + "waterway": { + "label": "Nooca" + }, + "wetland": { + "label": "Nooca" } }, "presets": { + "address": { + "name": "Cinwaanka" + }, "aeroway/runway": { "name": "Gegada diyaaradaha" }, @@ -403,6 +714,12 @@ "amenity/school": { "name": "Goobaha Dugsiyada" }, + "amenity/toilets": { + "name": "Musqulo" + }, + "area/highway": { + "name": "Sagxada" + }, "barrier": { "name": "Xannibaadaha" }, @@ -433,6 +750,9 @@ "building/school": { "name": "Dhismo Dugsiyada" }, + "building/stadium": { + "name": "Dhismo Garoon" + }, "footway/crosswalk": { "name": "Isgoyska Socotada" }, @@ -460,6 +780,12 @@ "highway/service": { "name": "Jidka Shaqaalaha" }, + "highway/tertiary": { + "name": "Waddada Sarre" + }, + "highway/track": { + "name": "Jidka Jayga aan la Dayactirin" + }, "highway/unclassified": { "name": "Waddo Yar/La cayimin" }, @@ -514,6 +840,12 @@ "leisure/pitch/cricket": { "name": "Garoon Kiriket" }, + "leisure/sports_centre": { + "name": "Xarunta Cayaaraha" + }, + "leisure/stadium": { + "name": "Garoon" + }, "line": { "name": "Khad" }, @@ -535,15 +867,27 @@ "natural/coastline": { "name": "Xeeb" }, + "natural/water": { + "name": "Biyaha" + }, "natural/water/lake": { "name": "Haro" }, "natural/water/pond": { "name": "Balli" }, + "natural/wetland": { + "name": "Dhul biyo-fadhiyaan" + }, + "natural/wood": { + "name": "Duur" + }, "office/government": { "name": "Xafiis Dowladeed" }, + "office/travel_agent": { + "name": "Wakaalad Socdaal" + }, "place": { "name": "Goob" }, @@ -556,6 +900,9 @@ "place/locality": { "name": "Deegaanka" }, + "place/town": { + "name": "Magaalo" + }, "power/line": { "name": "Khadka Korantada" }, @@ -580,14 +927,29 @@ "shop/mobile_phone": { "name": "Dukaanka Taleefoonka Gacanta" }, + "shop/supermarket": { + "name": "Suuq-weyne" + }, + "shop/travel_agency": { + "name": "Wakaalad Socdaal" + }, "tourism/hotel": { "name": "Huteel" }, "type/route/ferry": { "name": "Wadada Doonta" }, + "type/waterway": { + "name": "Biyo Mareen" + }, + "waterway": { + "name": "Biyo Mareen" + }, "waterway/canal": { "name": "Kanaal" + }, + "waterway/dock": { + "name": "Kaabi qoyan / Kaabi qallalan" } } } diff --git a/vendor/assets/iD/iD/locales/sr.json b/vendor/assets/iD/iD/locales/sr.json index 63b076d67..12a849293 100644 --- a/vendor/assets/iD/iD/locales/sr.json +++ b/vendor/assets/iD/iD/locales/sr.json @@ -580,13 +580,7 @@ } }, "success": { - "edited_osm": "Уреди ОСМ!", "just_edited": "Управо сте уређивали OpenStreetMap!", - "view_on_osm": "Преглед на OSM", - "facebook": "Подели на Фејсбуку", - "twitter": "Подели на Твитеру", - "google": "Подели на Гугл+", - "help_html": "Ваше измене требало би да се појаве у „Стандардном“ слоју за неколико минута. За остале слојеве и одређене функције то може трајати дуже.", "help_link_text": "Детаљи" }, "confirm": { @@ -1849,9 +1843,6 @@ "label": "Врста", "placeholder": "Подразумевано" }, - "vending": { - "label": "Врста добара" - }, "visibility": { "label": "Видљивост", "options": { @@ -3662,15 +3653,6 @@ "type/restriction/no_u_turn": { "name": "Забрана полукружног окретања" }, - "type/restriction/only_left_turn": { - "name": "Обавезан смер - лево" - }, - "type/restriction/only_right_turn": { - "name": "Обавезан смер - десно" - }, - "type/restriction/only_straight_on": { - "name": "Обавезан смер - право" - }, "type/route": { "name": "Путања" }, diff --git a/vendor/assets/iD/iD/locales/sv.json b/vendor/assets/iD/iD/locales/sv.json index 50ac65fa7..5fb0378aa 100644 --- a/vendor/assets/iD/iD/locales/sv.json +++ b/vendor/assets/iD/iD/locales/sv.json @@ -1,5 +1,10 @@ { "sv": { + "icons": { + "information": "info", + "remove": "radera", + "undo": "Ã¥ngra" + }, "modes": { "add_area": { "title": "OmrÃ¥de", @@ -145,7 +150,9 @@ "vertex": "Kopplade en väg till en annan väg.", "line": "Kopplade en väg till en linje.", "area": "Kopplade en väg till ett omrÃ¥de." - } + }, + "relation": "Dessa objekt kan inte kopplas ihop dÃ¥ de har motstridiga relationsroller.", + "restriction": "Dessa objekt kan inte kopplas ihop dÃ¥ det skulle skada en relation av typen \"{relation}\"." }, "disconnect": { "title": "Koppla isär", @@ -287,10 +294,46 @@ "restriction": { "annotation": { "create": "Lade till en svängrestriktion", - "delete": "Tog bort en svängrestriktion" + "delete": "Raderade en svängrestriktion" } } }, + "restriction": { + "controls": { + "distance": "Distans", + "distance_up_to": "Upp till (distans)", + "via": "Via", + "via_node_only": "Enbart nod", + "via_up_to_one": "Upp till 1 väg", + "via_up_to_two": "Upp till 2 vägar" + }, + "help": { + "indirect": "(indirekt)", + "turn": { + "no_left_turn": "INGEN vänstersväng (indirekt)", + "no_right_turn": "INGEN högersväng (indirekt)", + "no_u_turn": "INGEN U-sväng (indirekt)", + "no_straight_on": "INTE rakt fram (indirekt) ", + "only_left_turn": "ENBART vänstersväng (indirekt)", + "only_right_turn": "ENBART högersväng (indirekt)", + "only_u_turn": "ENBART U-sväng (indirekt)", + "only_straight_on": "ENBART rakt fram (indirekt)", + "allowed_left_turn": "Vänstersväng tillÃ¥ten (indirekt)", + "allowed_right_turn": "Högersväng tillÃ¥ten (indirekt)", + "allowed_u_turn": "U-sväng tillÃ¥ten (indirekt)", + "allowed_straight_on": "Rakt fram tillÃ¥tet (indirekt)" + }, + "from": "FRÅN", + "via": "VIA", + "to": "TILL", + "from_name": "{from} {fromName}", + "from_name_to_name": "{from} {fromName} {to} {toName}", + "via_names": "{via} {viaNames}", + "select_from": "Klicka för att välja ett {from}-segment", + "select_from_name": "Klicka för att välja {from} {fromName}", + "toggle": "Klicka för \"{turn}\"" + } + }, "undo": { "tooltip": "Ångra: {action}", "nothing": "Inget att Ã¥ngra." @@ -366,6 +409,7 @@ "key": "H", "title": "Historik", "selected": "{n} markerad(e)", + "no_history": "Ingen historik (nytt objekt)", "version": "Version", "last_edit": "Senast redigerad", "edited_by": "Redigerad av", @@ -383,6 +427,8 @@ "title": "Mätning", "selected": "{n} markerad(e)", "geometry": "Geometri", + "closed_line": "Stängd linje", + "closed_area": "Stängt omrÃ¥de", "center": "Centrum", "perimeter": "Omkrets", "length": "Längd", @@ -451,7 +497,7 @@ "way": "Väg", "relation": "Relation", "location": "Plats", - "add_fields": "Lägg till fält:" + "add_fields": "Lägg till egenskap:" }, "background": { "title": "Bakgrund", @@ -463,6 +509,7 @@ "switch": "Växla tillbaka till denna bakgrund", "custom": "Anpassa", "custom_button": "Ändra anpassad bakgrund", + "custom_prompt": "Ange en URL-mall för plattor. Giltiga nycklar är:\n  - {zoom} eller {z}, {x}, {y} enligt Z/X/Y-schema\n  - {-y} eller {ty} för Y-koordinat enligt omvänd TMS-stil\n  - {u} för QuadTile-scheman\n  - {switch:a,b,c} för multiplex mot DNS-server\n\nExempel:\n{example}", "overlays": "Bildlager", "imagery_source_faq": "Info om flygfotot / Rapportera ett problem", "reset": "ta bort", @@ -574,6 +621,7 @@ "status_code": "Servern returnerade statuskoden {code}", "unknown_error_details": "Kontrollera att du är ansluten till Internet.", "uploading": "Laddar upp ändringar till OpenStreetMap...", + "conflict_progress": "Söker efter konflikter: {num} av {total}", "unsaved_changes": "Du har osparade ändringar.", "conflict": { "header": "Lös motstridiga ändringar", @@ -599,15 +647,20 @@ } }, "success": { - "edited_osm": "Redigerade OSM!", "just_edited": "Du har nu redigerat OpenStreetMap!", - "view_on_osm": "Visa pÃ¥ OSM", - "facebook": "Dela pÃ¥ Facebook", - "twitter": "Dela pÃ¥ Twitter", - "google": "Dela pÃ¥ Google+", - "help_html": "Dina ändringar borde synas i standardvyn om nÃ¥gra minuter. Andra vyer och vissa objekttyper kan ta lite längre tid.", + "thank_you": "Tack för att du förbättrade kartan.", + "thank_you_location": "Tack för att du förbättrade kartan kring {where}.", + "help_html": "Dina ändringar borde synas pÃ¥ OpenStreetMap om nÃ¥gra minuter. Det kan ta längre tid för andra kartor att fÃ¥ uppdateringar.", "help_link_text": "Detaljer", - "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/Sv:FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F", + "view_on_osm": "Visa ändringar pÃ¥ OSM", + "changeset_id": "Ditt ändringsset #: {changeset_id}", + "like_osm": "Gillar OpenStreetMap? Kom i kontakt med andra:", + "more": "Mer", + "events": "Händelser", + "languages": "SprÃ¥k: {languages}", + "missing": "Är det nÃ¥got som saknas i den här listan?", + "tell_us": "Berätta för oss!" }, "confirm": { "okay": "OK", @@ -645,6 +698,7 @@ "untagged_area_tooltip": "Välj en typ som beskriver vad detta omrÃ¥de är.", "untagged_relation": "Otaggad relation", "untagged_relation_tooltip": "Välj en typ som beskriver vad denna relation är.", + "many_deletions": "Du hÃ¥ller pÃ¥ att radera {n} objekt: {p} noder, {l} linjer, {a} omrÃ¥den, {r} relationer Är du helt säker pÃ¥ att du vill göra detta? Detta raderar dem frÃ¥n kartan som alla andra ser pÃ¥ openstreetmap.org.", "tag_suggests_area": "Taggen {tag} indikerar att detta borde vara ett omrÃ¥de istället för en linje", "deprecated_tags": "FörÃ¥ldrade taggar: {tags}" }, @@ -705,11 +759,180 @@ "title": "Redigera & spara", "select_h": "Markera", "select_left_click": "{leftclick} Vänsterklicka pÃ¥ ett objekt för att markera det. Markeringen kommer att synas med ett pulserande glöd, och sidopanelen kommer att visa detaljer om objektet, sÃ¥ som namn och adress.", - "select_right_click": "{rightclick} Högerklicka pÃ¥ ett objekt för att visa redigerarmenyn vilken innehÃ¥ller kommandon som är tillgängliga, sÃ¥ som rotera, flytta och ta bort. ", + "select_right_click": "{rightclick} Högerklicka pÃ¥ ett objekt för att visa redigerarmenyn vilken innehÃ¥ller kommandon som är tillgängliga, sÃ¥ som rotera, flytta och radera. ", "multiselect_h": "Markera flera", - "multiselect_shift_click": "`{shift}`+{leftclick} Vänsterklicka för att markera flera objekt tillsammans. Detta gör det enkelt att flytta och ta bort flera objekt samtidigt.", + "multiselect_shift_click": "`{shift}`+{leftclick} Vänsterklicka för att markera flera objekt tillsammans. Detta gör det enkelt att flytta och radera flera objekt samtidigt.", "multiselect_lasso": "Ett annat sätt att markera flera objekt är att hÃ¥lla ned `{shift}`-tangenten, trycka och hÃ¥lla ned {leftclick} vänster musknapp och sedan dra med musen för att rita ett markeringslasso. Alla punkter inuti lassot kommer att markeras.", - "undo_redo_h": "Ångra & gör om" + "undo_redo_h": "Ångra & gör om", + "undo_redo": "Dina ändringar lagras lokalt i din webbläsare tills dess att du väljer att spara dem pÃ¥ OpenStreetMaps server. Du kan Ã¥ngra ändringar genom att klicka pÃ¥ {undo} **Ångra**-knappen, och göra om dem genom att klicka pÃ¥ {redo} **Gör om**-knappen.", + "save_h": "Spara", + "save": "Klicka pÃ¥ {save} **Spara** för att slutföra dina redigeringar och skicka dem till OpenStreetMap. Du bör komma ihÃ¥g att spara ditt arbete regelbundet!", + "save_validation": "I sparapanelen har du möjlighet att granska vad du har gjort. iD kommer även att utföra nÃ¥gra enkla kontroller av saknad data och kommer att ge hjälpsamma förslag och varningar om nÃ¥got inte verka rätt.", + "upload_h": "Ladda upp", + "upload": "Innan du kan ladda upp dina ändringar mÃ¥ste du ange en [ändringskommentar](https://wiki.openstreetmap.org/wiki/Good_changeset_comments). Klicka sedan pÃ¥ **Ladda upp** för att skicka dina ändringar till OpenStreetMap, där de kommer att införas i kartan och bli publikt synliga för alla.", + "backups_h": "Automatisk backup", + "backups": "Om du inte kan slutföra din redigering pÃ¥ en gÃ¥ng, t.ex. om din dator kraschar eller om du stänger fliken i webbläsaren, är dina ändringar ändÃ¥ sparade i din webbläsare. Du kan komma tillbaka senare (med samma webbläsare och dator) och iD kommer dÃ¥ att erbjuda dig att Ã¥terskapa ditt arbete. ", + "keyboard_h": "Kortokmmandon", + "keyboard": "Du kan visa en lista med kortokmmandon genom att trycka pÃ¥ tangenten `?`." + }, + "feature_editor": { + "title": "Objektredigeraren", + "intro": "*Objektredigeraren* visas bredvid kartan, och lÃ¥ter dig se och ändra all information för valt objekt.", + "definitions": "Den översta sektionen visar objektets typ. Mittsektionen innehÃ¥ller *egenskaper* som visar objektets attribut, sÃ¥ som namn och adress.", + "type_h": "Objekttyp", + "type": "Du kan klicka pÃ¥ objekttyp för att ändra objektet till en annan typ. Allt som finns i den verkliga världen kan läggas till i OpenStreetMap, sÃ¥ det finns tusentals objekttyper att välja bland.", + "type_picker": "Typväljaren visar de vanligaste objekttyperna, sÃ¥ som parker, sjukhus, restauranger, vägar och byggnader. Du kan söka efter vad som helst genom att skriva vad du söker efter i sökrutan. Du kan ocksÃ¥ klicka pÃ¥ {inspect} **Info**-ikonen bredvid en objekttyp för att lära dig mer om den.", + "fields_h": "Egenskaper", + "fields_all_fields": "Sektionen \"Alla egenskaper\" innehÃ¥ller alla objektets detaljer som du kan redigera. I OpenStreetMap är alla egenskaper valfria, och det är ok att lämna en egenskap blank om du är osäker.", + "fields_example": "Varje objekttyp kommer att visa olika egenskaper. En väg t.ex. kan ha egenskaper om dess ytbeläggning och hastighetsbegränsning, medan en restaurang kan har egenskaper om vilken typ av mat de serverar och öppettider. ", + "fields_add_field": "Du kan även klicka pÃ¥ \"Lägg till egenskap\" för att lägga till fler egenskaper, sÃ¥ som beskrivning, Wikipedia-länk, handikappanpassning m.m.", + "tags_h": "Taggar", + "tags_all_tags": "Under sektionen egenskaper kan du trycka pÃ¥ \"Alla taggar\" för att redigera nÃ¥gon av OpenStreetMaps *taggar* för valt objekt. Varje tagg bestÃ¥r av *nyckel* och *värde*, och är dataelement som definierar egenskaper för objektet lagrat pÃ¥ OpenStreetMap.", + "tags_resources": "Att redigera ett objekts taggar kräver viss kunskap om OpenStreetMap. Du bör ta en titt pÃ¥ sidor sÃ¥ som [OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Main_Page) eller [Taginfo](https://taginfo.openstreetmap.org/) för att lära dig mer om accepterade taggnings-principer pÃ¥ OpenStreetMap." + }, + "points": { + "title": "Punkter", + "intro": "*Punkter* kan användas för att representera objekt sÃ¥ som affärer, restauranger och monument. De markerar en specifik plats och beskriver vad det är.", + "add_point_h": "Lägg till punkter", + "add_point": "För att lägga till en punkt, klicka pÃ¥ knappen {point} **Punkt** i verktygsraden ovanför kartan, eller tryck pÃ¥ kortkommandot `1`. Detta kommer att ändra muspekaren till ett kryss.", + "add_point_finish": "För att placera en ny punkt pÃ¥ kartan, placera muspekaren där den nya punkten ska vara och tryck pÃ¥ {leftclick} vänster musknapp eller `mellanslag`.", + "move_point_h": "Flytta punkter", + "move_point": "För att flytta en punkt, placera muspekaren över punkten och hÃ¥ll ned {leftclick} vänster musknapp medan du drar punkten till dess nya position.", + "delete_point_h": "Radera punkter", + "delete_point": "Det är ok att radera objekt som inte existerar i den verkliga världen. Genom att radera ett objekt frÃ¥n OpenStreetMap raderas det frÃ¥n kartan som alla användare ser, sÃ¥ du bör försäkra dig om att objektet verkligen inte finns i verkligheten innan du raderar det.", + "delete_point_command": "För att radera en punkt, {rightclick} högerklicka pÃ¥ punkten för att markera det och visa redigeramenyn. Använd sedan kommandot {delete} **Radera**." + }, + "lines": { + "title": "Linjer", + "intro": "*Linjer* används för att representera objekt sÃ¥ som vägar, järnvägar och floder. Linjer bör ritas längst mitten av objektet de representerar.", + "add_line_h": "Lägg till linjer", + "add_line": "För att lägga till en linje, klicka pÃ¥ knappen {line} **Linje** i verktygsraden ovanför kartan, eller tryck pÃ¥ kortkommandot `2`. Detta kommer att ändra muspekaren till ett kryss.", + "add_line_draw": "Positionera sedan muspekaren där linjen ska starta och {leftclick} vänsterklicka eller tryck `mellanslag` för att börja placera noder längst linjen. Fortsätt placera noder genom att klicka eller trycka `mellanslag`. Medan du rita kan du zooma in eller flytta kartan för att lägg till fler detaljer. ", + "add_line_finish": "För att slutföra linjen, tryck `{return}` eller klicka igen pÃ¥ senaste noden.", + "modify_line_h": "Modifiera linjer", + "modify_line_dragnode": "Ofta ser du linjer som inte har korrekt form, t.ex. vägar som inte helt matchar med bakgrundsbilden. För att justera formen pÃ¥ en linje, {leftclick} vänsterklicka först pÃ¥ den för att markera den. Alla noder längst linjen kommer att visas som smÃ¥ cirklar. Du kan dra och flytta noderna till bättre platser.", + "modify_line_addnode": "Du kan även skapa nya noder längst en linje genom att {leftclick}**x2** dubbelklicka pÃ¥ linjen eller genom att dra i den lilla triangeln mellan noder.", + "connect_line_h": "Koppla ihop linjer", + "connect_line": "Att ha vägar sammankopplade korrekt är viktigt för kartan, och en förutsättning för att kunna ge navigeringsanvisningar.", + "connect_line_display": "Sammankopplade vägar visas med grÃ¥a cirklar. Ändpunkten av en linje ritas med en stor vit cirkel om den inte är ansluten till nÃ¥got.", + "connect_line_drag": "För att sammankoppla en linje till ett annat objekt, dra en av linjens noder över det andra objektet tills bÃ¥da objekten kopplas ihop. Tips: Du kan hÃ¥lla ned tangenten `{alt}` för att förhindra att noder kopplas ihop med andra objekt. ", + "connect_line_tag": "Om du vet att anslutningen har trafikljus eller övergÃ¥ngsställe kan du lägga till det genom att markera den anslutna noden och använda objektredigeraren för att välja objekttyp.", + "disconnect_line_h": "Koppla isär linjer", + "disconnect_line_command": "För att koppla isär vägar frÃ¥n andra objekt, {rightclick} högerklicka pÃ¥ den anslutna noden och välj kommandot {disconnect} **Koppla isär** i redigeringsmeny. ", + "move_line_h": "Flytta linjer", + "move_line_command": "För att flytta en hel linje, {rightclick} högerklicka pÃ¥ linjen och välj kommandot {move} **Flytta** i redigeringsmeny. Flytta sedan musen och {leftclick} vänsterklicka för att placera linjen pÃ¥ dess nya placering. ", + "move_line_connected": "Linjer som är sammankopplade med andra objekt kommer att förbli sammankopplad när du flyttar linjen till dess nya placering. iD kan förhindra dig att flytta en linje förbi en annan sammankopplad linje.", + "delete_line_h": "Radera linjer", + "delete_line": "Om en linje är helt fel, t.ex. om en väg inte existerar i verkligheten, är det ok att radera den. Var försiktig när du radera objekt: bakgrundsbilden du använder kan vara förÃ¥ldrad, och en väg som ser fel ut kan helt enkelt vara nybyggd.", + "delete_line_command": "För att radera en linje, {rightclick} högerklicka pÃ¥ linjen för att markera den och visa redigeramenyn. Använd sedan kommandot {delete} **Radera**." + }, + "areas": { + "title": "OmrÃ¥den", + "intro": "*OmrÃ¥den* används för att visa utbredningen för objekt sÃ¥ som sjöar, byggnader och bostadsomrÃ¥den. OmrÃ¥den bör ritas längst kanten av objektet de representerar, t.ex. runt en byggnads bottenvÃ¥ning.", + "point_or_area_h": "Punkter eller omrÃ¥den?", + "point_or_area": "MÃ¥nga objekt kan representeras bÃ¥de som punkter och som omrÃ¥den. Du bör rita konturen av byggnader och fastigheter som omrÃ¥den när det är möjligt. Placera punkter inuti en byggnads omrÃ¥de för att representera företag, faciliteter och andra objekt lokaliserade inuti byggnaden.", + "add_area_h": "Lägg till omrÃ¥den", + "add_area_command": "För att lägga till ett omrÃ¥de, klicka pÃ¥ knappen {area} **OmrÃ¥de** i verktygsraden ovanför kartan, eller tryck pÃ¥ kortkommandot `3`. Detta kommer att ändra muspekaren till ett kryss.", + "add_area_draw": "Positionera sedan muspekaren i ett av hörnen för objektet och {leftclick} vänsterklicka eller tryck `mellanslag` för att börja placera noder runt den yttre kanten för omrÃ¥det. Fortsätt placera noder genom att klicka eller trycka `mellanslag`. Medan du rita kan du zooma in eller flytta kartan för att lägg till fler detaljer. ", + "add_area_finish": "För att slutföra ett omrÃ¥de, tryck `{return}` eller klicka igen pÃ¥ antingen första eller senaste noden.", + "square_area_h": "Räta upp hörn", + "square_area_command": "MÃ¥nga omrÃ¥desobjekt sÃ¥ som byggnader har vinkelräta hörn. För att räta upp hörnen för ett omrÃ¥de, {rightclick} högerklicka pÃ¥ kanten för omrÃ¥det och välj kommandot {orthogonalize} **Räta upp** i redigeringsmenyn.", + "modify_area_h": "Modifiera omrÃ¥den", + "modify_area_dragnode": "Ofta ser du omrÃ¥den som inte har korrekt form, t.ex. en byggnad som inte helt matchar med bakgrundsbilden. För att justera formen pÃ¥ ett omrÃ¥de, {leftclick} vänsterklicka först pÃ¥ den för att markera den. Alla noder längst omrÃ¥det kommer att visas som smÃ¥ cirklar. Du kan dra och flytta noderna till bättre platser.", + "modify_area_addnode": "Du kan även skapa nya noder längst ett omrÃ¥de genom att {leftclick}**x2** dubbelklicka pÃ¥ kanten till omrÃ¥det eller genom att dra i den lilla triangeln mellan noder.", + "delete_area_h": "Radera omrÃ¥den", + "delete_area": "Om ett omrÃ¥de är helt fel, t.ex. om en byggnad inte existerar i verkligheten, är det ok att radera den. Var försiktig när du radera objekt - bakgrundsbilden du använder kan vara förÃ¥ldrad, och en byggnad som ser fel ut kan helt enkelt vara nybyggd.", + "delete_area_command": "För att radera ett omrÃ¥de, {rightclick} högerklicka pÃ¥ omrÃ¥det för att markera det och visa redigeramenyn. Använd sedan kommandot {delete} **Radera**." + }, + "relations": { + "title": "Relationer", + "intro": "En *relation* är en speciell typ av objekt i OpenStreetMap som grupperar ihop andra objekt. Objekten som ingÃ¥r i en relation kallas *medlemmar*, och varje medlem har en *roll* i relationen.", + "edit_relation_h": "Redigera relationer", + "edit_relation": "Längst ned i objektredigeraren kan du expandera sektionen \"Alla relationer\" för att se om valt objekt är medlem i nÃ¥gon relation. Du kan sedan klicka pÃ¥ en relation för att redigera den.", + "edit_relation_add": "För att lägga till ett objekt till en relation, markera objektet och klicka pÃ¥ knappen {plus} **Lägg till** längst ned i sektionen \"Alla relationer\" i objektredigeraren. Du kan välja frÃ¥n en lista över närliggande relationer, eller välja \"Ny relation...\".", + "edit_relation_delete": "Du kan även klicka pÃ¥ knappen {delete} **Radera** för att radera valt objekt frÃ¥n relationen. Om du raderar alla medlemmar frÃ¥n en relation kommer relationen automatiskt att raderas. ", + "maintain_relation_h": "Hantera relationer", + "maintain_relation": "För det mesta hanterar iD relationerna automatiskt när du redigerar. Du bör vara försiktig när du ersätter objekt som kan vara medlemmar i relationer. Om du t.ex. raderar en sektion av en väg och ritar en ny sektion för att ersätta den, bör du lägga till den nya sektionen till samma relationer (rutter, svängrestriktioner, etc.) som den ursprungliga vägen.", + "relation_types_h": "Typer av relationer", + "multipolygon_h": "Multipolygoner", + "multipolygon": "En *multipolygon*-relation är en grupp av en eller flera *yttre* objekt och en eller flera *inre* objekt. De yttre objekten definierar den yttre kanten av av multipolygonen, och de inre objekten definierar delomrÃ¥den eller hÃ¥l utklippta inuti multipolygonen.", + "multipolygon_create": "För att skapa en multipolygon, t.ex. en byggnad med hÃ¥l i sig, rita den yttre gränsen som ett omrÃ¥de och den inre gränsen som en linje eller annan typ av omrÃ¥de. `{shift}`+{leftclick} vänsterklicka sedan för att markera bÃ¥da objekten, {rightclick} högerklicka för att visa redigeringsmeny och välj kommandot {merge} **Sammanfoga**.", + "multipolygon_merge": "Sammanfogning av flera linjer eller omrÃ¥den skapar en ny multipolygon-relation med alla markerade omrÃ¥den som medlemmar. iD kommer automatiskt välja rollerna inre och yttre baserat pÃ¥ vilka objekt som finns inuti andra objekt.", + "turn_restriction_h": "Svängrestriktioner ", + "turn_restriction": "En *svängrestriktion*-relation är en grupp av flera vägsegment i en korsning. Svängrestriktioner bestÃ¥r av en *frÃ¥n*-väg, en *via*-nod eller -vägar, och en *till*-väg.", + "turn_restriction_field": "För att redigera svängrestriktioner, markera en korsningsnod där tvÃ¥ eller fler vägar möts. Objektredigeraren kommer att visa en speciell egenskap för svängrestriktioner med en visualisering av korsningen.", + "turn_restriction_editing": "I egenskapen \"Svängrestriktioner\", klicka pÃ¥ en \"frÃ¥n\"-väg för att se om det är tillÃ¥tet eller förbjudet att svänga in pÃ¥ nÃ¥gon av \"till\"-vägarna. Du kan klicka pÃ¥ sväng-ikonerna för att växla dem mellan tillÃ¥tet och förbjudet. iD kommer automatiskt skapa relationer och sätta rollerna \"frÃ¥n\", \"via\" och \"till\" baserat pÃ¥ dina val.", + "route_h": "Rutter", + "route": "En *rutt*-relation är en grupp av en eller flera linjer som tillsammans formar ett ruttnätverk, sÃ¥ som buss-rutter, tÃ¥g-rutter eller väg-rutt.", + "route_add": "För att lägga till ett objekt till en rutt-relation, välj objektet och bläddra ned till sektionen \"Alla relationer\" i objektredigeraren. Klicka sedan pÃ¥ knappen {plus} **Lägg till** för att lägga till detta objekt till en närliggande existerande relation eller en ny relation.", + "boundary_h": "Gränser", + "boundary": "En *gräns*-relation är en grupp av en eller flera linjer som tillsammans formar en administrativ gräns.", + "boundary_add": "För att lägga till ett objekt till en gräns-relation, välj objektet och bläddra ned till sektionen \"Alla relationer\" i objektredigeraren. Klicka sedan pÃ¥ knappen {plus} **Lägg till** för att lägga till detta objekt till en närliggande existerande relation eller en ny relation." + }, + "imagery": { + "title": "Bakgrundsbilder", + "intro": "Bakgrundsbilderna som visas under kartdata är en viktig källa vid kartläggning. Dessa bilder kan vara flygfoton insamlade med satellit, flygplan eller drönare, eller sÃ¥ kan det vara inskannade historiska kartor eller andra fritt tillgängliga källor.", + "sources_h": "Bildkällor", + "choosing": "För att se vilka bildkällor som finns tillgängliga vid redigering, klicka pÃ¥ knappen {layers} **Bakgrundsinställningar** vid sidan av kartan.", + "sources": "Som standard är satellitelagret [Bing Maps](https://www.bing.com/maps/) valt som bakgrundsbild. Beroende pÃ¥ var du redigerar, finns andra bildkällor tillgängliga. Vissa kan vara nyare eller har bättre upplösning, sÃ¥ det är alltid klokt att kontrollera vilket lager som är bäst som referens vid kartering.", + "offsets_h": "Justera bildplacering", + "offset": "Bilder är ibland förskjutna lite i förhÃ¥llande till korrekt kartdata. Om du ser att mÃ¥nga vägar eller byggnader är förskjutna i förhÃ¥llande till bakgrundsbilden kan det vara bakgrundsbilden som är felaktig, sÃ¥ flytta dem inte bara för att matcha bakgrunden. Justera istället bakgrunden sÃ¥ att den matchar med existerande data genom att expandera sektionen \"Justera bildplacering\" längst ned i panelen Bakgrundsinställningar.", + "offset_change": "Klicka pÃ¥ de smÃ¥ trianglarna för att justera bildplaceringen i smÃ¥ steg, eller hÃ¥ll ned vänster musknapp och dra i den grÃ¥ rutan för att dra bilden till korrekt placering." + }, + "streetlevel": { + "title": "Gatubilder", + "intro": "Gatubilder är användbart vid kartläggning av trafikmärken, företag och andra detaljer som du inte kan se frÃ¥n satellit- eller flygbilder. iD stöder gatubilder frÃ¥n [Mapillary](https://www.mapillary.com) och [OpenStreetCam](https://www.openstreetcam.org).", + "using_h": "Använda gatubilder", + "using": "För att använda gatubilder för kartläggning, klicka pÃ¥ panelen {data} **Kartdata** vid sidan av kartan för att aktivera eller avaktivera tillgängliga bildlager.", + "photos": "När aktiverad visar bildlagret en linje längst sekvensen av bilder. Vid högre inzoomning visas en cirkel för varje bild, och vid ännu högre zoom-nivÃ¥ visar en kon riktningen kameran hade när bilden togs.", + "viewer": "När du klickar pÃ¥ en av bildernas placering visas en bildvisare i det nedre vänstra hörnet av kartan. Bildvisaren innehÃ¥ller kontroller för att stega framÃ¥t eller bakÃ¥t i bildsekvensen. Den visar även användarnamn pÃ¥ personen som tog bilden, datum dÃ¥ den togs och en länk för att visa bilden pÃ¥ originalsidan." + }, + "gps": { + "title": "GPS-spÃ¥r", + "intro": "Insamlade GPS-spÃ¥r är en värdefull datakälla för OpenStreetMap. Denna redigerare stöder filtyperna *.gpx*, *.geojson* och *.kml* pÃ¥ din lokala dator. Du kan samla in GPS-spÃ¥r med en smartmobil, sportklocka eller andra GPS-enheter.", + "survey": "För information om hur du utför en GPS-uppmätning, läs [Kartlägg med en smartmobil, GPS eller papper](http://learnosm.org/en/mobile-mapping/).", + "using_h": "Använda GPS-spÃ¥r", + "using": "För att använda ett GPS-spÃ¥r vid kartläggning, dra och släpp datafilen pÃ¥ kartredigeraren. Om den har ett känt format kommer den att ritas pÃ¥ kartan med en ljus lila linje. Klicka pÃ¥ panelen {data} **Kartdata** vid sidan av kartan för att aktivera, avaktivera eller zooma din GPS-data.", + "tracing": "GPS-spÃ¥ret skickas inte till OpenStreetMap - bästa sättet att använda den är att rita pÃ¥ kartan användandes den som guide för nya objekt du lägger till.", + "upload": "Du kan även [ladda upp dina GPS-data till OpenStreetMap](https://www.openstreetmap.org/trace/create) sÃ¥ att andra kan använda det." + }, + "field": { + "restrictions": { + "title": "Hjälp för svängrestriktioner ", + "about": { + "title": "Om", + "about": "Denna egenskap lÃ¥ter dig inspektera och ändra svängrestriktioner. Den visar en modell över vald korsning inklusive närliggande anslutande vägar.", + "from_via_to": "En svängrestriktion innehÃ¥ller alltid: en **FRÅN-väg**, en **TILL-väg** och antingen en **VIA-nod** eller en eller flera **VIA-vägar**.", + "maxdist": "\"{distField}\"-reglaget kontrollerar hur lÃ¥ngt den ska söka för ytterligare anslutande vägar.", + "maxvia": "\"{viaField}\"-reglaget justerar hur mÃ¥nga vägar som kan ingÃ¥ i sökningen. (Tips: enkelhet är bättre)" + }, + "inspecting": { + "title": "Inspektera", + "about": "HÃ¥ll musen över ett **FRÅN**-segment för att se om den har nÃ¥gra svängrestriktioner. Varje möjlig **TILL**-destination kommer att visas med en färglagd skugga om restriktioner finns.", + "from_shadow": "{fromShadow} **FRÅN-segment**", + "allow_shadow": "{allowShadow} **TILL tillÃ¥ten**", + "restrict_shadow": "{restrictShadow} **TILL förbjuden**", + "only_shadow": "{onlyShadow} **TILL enbart**", + "restricted": "\"Förbjuden\" betyder att det finns en svängrestriktion, t.ex. \"Ingen vänstersväng\".", + "only": "\"Enbart\" betyder att ett fordon som tar den vägen enbart kan göra det valet, t.ex. \"Enbart rakt fram\"." + }, + "modifying": { + "title": "Ändra", + "about": "För att ändra svängrestriktioner, klicka först pÃ¥ ett **FRÅN**-segment att starta frÃ¥n. Det valda segmentet kommer att pulsera, och alla möjliga **TILL**-destinationer kommer att visas med svängsymboler.", + "indicators": "Klicka sedan pÃ¥ en svängsymbol för att växla den mellan \"TillÃ¥ten\", \"Förbjuden\" och \"Enbart\"", + "allow_turn": "{allowTurn} **TILL tillÃ¥ten**", + "restrict_turn": "{restrictTurn} **TILL förbjuden**", + "only_turn": "{onlyTurn} **TILL enbart**" + }, + "tips": { + "title": "Tips", + "simple": "**Föredra enkla restriktioner över komplexa.**", + "simple_example": "Undvik t.ex. att skapa en \"via väg\"-restriktion om en simpel \"via nod\"-restriktion räcker.", + "indirect": "**Vissa restriktioner visar texten \"(indirekt)\" och ritas lätt transparenta.**", + "indirect_example": "Dessa restriktioner existerar tack vare en annan närliggande restriktion. T.ex. en \"Enbart rakt fram\"-restriktion kommer indirekt skapa \"Ingen sväng\"-restriktioner för alla andra vägar genom korsningen.", + "indirect_noedit": "Du bör inte redigera indirekta restriktioner. Ändra istället den närliggande direkta restriktionen." + } + } } }, "intro": { @@ -861,12 +1084,12 @@ "selected_townhall": "Vad bra! Punkten är nu markerad. Markerade objekt visas med en pulserande glödande ram.", "editor_townhall": "När ett objekt är markerat visas *objektredigeraren* bredvid kartan.", "preset_townhall": "Högst upp i objektredigeraren visas objekttyp. Denna punkt representerar ett {preset}.", - "fields_townhall": "Mittdelen av objektredigeraren innehÃ¥ller *fält* som visar objektets attribut, sÃ¥som namn och adress. ", + "fields_townhall": "Mittdelen av objektredigeraren innehÃ¥ller *egenskaper* som visar objektets attribut, sÃ¥som namn och adress. ", "close_townhall": "**Stäng objektredigeraren genom att trycka pÃ¥ Escape pÃ¥ tangentbordet eller genom att trycka pÃ¥ knappen {button} i övre högra hörnet. ", "search_street": "Du kan ocksÃ¥ söka efter objekt i aktuell vy eller globalt. **Sök efter '{name}'.**", "choose_street": "**Välj {name} i listan för att markera den.**", "selected_street": "Vad bra! {name} är nu markerad.", - "editor_street": "Fälten som visas för en väg är annorlunda mot fälten som visades för kommunhuset.{br}För markerad gata visar objektredigeraren fält som '{field1}' och '{field2}'. **Stäng objektredigeraren genom att trycka Escape eller trycka pÃ¥ knappen {button}.", + "editor_street": "Egenskaperna som visas för en väg är annorlunda mot egenskaperna som visades för kommunhuset.{br}För markerad gata visar objektredigeraren egenskaper som '{field1}' och '{field2}'. **Stäng objektredigeraren genom att trycka Escape eller trycka pÃ¥ knappen {button}.", "play": "Prova att flytta runt pÃ¥ kartan och klicka pÃ¥ nÃ¥gra andra objekt för att se vad för typ av saker som kan läggas till i OpenStreetMap. **När du är redo att fortsätta till nästa kapitel, tryck '{next}'.**" }, "points": { @@ -876,7 +1099,7 @@ "search_cafe": "Det finns mÃ¥nga olika typer av objekt som kan representeras med punkter. Punkten du just lade till är ett café. **Sök efter '{preset}'.**", "choose_cafe": "**Välj {preset} i listan.**", "feature_editor": "Punkten är nu markerad som ett café. Med hjälp av objektredigeraren kan vi lägga till mer information om caféet. ", - "add_name": "PÃ¥ OpenStreetMap är alla fält valfria, och det är ok att lämna ett fält tomt om du är osäker.{br}LÃ¥t oss lÃ¥tsas att du har lokalkännedom om caféet och vet dess namn. **Lägg till ett namn pÃ¥ caféet.**", + "add_name": "PÃ¥ OpenStreetMap är alla egenskaper valfria, och det är ok att lämna en egenskap tomt om du är osäker.{br}LÃ¥t oss lÃ¥tsas att du har lokalkännedom om caféet och vet dess namn. **Lägg till ett namn pÃ¥ caféet.**", "add_close": "Objektredigeraren kommer ihÃ¥g alla dina ändringar automatiskt. **När du är klar med att lägga till ett namn, tryck Escape, Enter eller klicka pÃ¥ knappen {button} för att stänga objektredigeraren.**", "reselect": "Ofta existerar redan punkter men är felaktiga eller ofullständiga. Vi kan ändra redan existerande punkter. **Klicka för att markera caféet du just skapade.**", "update": "LÃ¥t oss fylla i lite mer information om caféet. Du kan ändra dess namn, ange vad för typ av mat som serveras eller lägga till en adress. **Ändra information om caféet.**", @@ -888,14 +1111,15 @@ }, "areas": { "title": "OmrÃ¥den", + "add_playground": "*OmrÃ¥den* används för att visa avgränsningar för objekt sÃ¥ som sjöar, byggnader och bostadsomrÃ¥den.{br}De kan ocksÃ¥ användas för mer detaljerad kartläggning av mÃ¥nga objekt som du kanske normalt skulle kartlägga som punkter. **Klicka pÃ¥ knappen {button} OmrÃ¥de för att skapa ett nytt omrÃ¥de.**", "start_playground": "LÃ¥t oss lägga till denna lekplats pÃ¥ kartan genom att rita ett omrÃ¥de. OmrÃ¥den ritas genom att placera *noder* längs yttre kanten av objektet. **Klicka eller tryck mellanslag för att placera en startnod pÃ¥ ett av hörnen av lekplatsen.**", "continue_playground": "Fortsätt rita omrÃ¥det genom att placera noder längs kanten pÃ¥ lekplatsen. Det är ok att ansluta omrÃ¥det till existerande gÃ¥ngvägar.{br}Tips: Du kan hÃ¥lla ned '{alt}'-tangenten för att förhindra att noder kopplas ihop med andra objekt. **Fortsätt att rita ett omrÃ¥de runt lekplatsen.**", "finish_playground": "Slutför omrÃ¥det genom att trycka Enter eller genom att trycka igen pÃ¥ antingen första eller sista noden. **Rita färdigt omrÃ¥det för lekplatsen.**", "search_playground": "**Sök efter '{preset}'.**", "choose_playground": "**Välj {preset} i listan.**", - "add_field": "Denna lekplats har inget officiellt namn, sÃ¥ vi anger inget i namnfältet.{br}LÃ¥t oss lägga till lite andra detaljer om lekplatsen i fältet Beskrivning. **Öppna listan för Lägg till fält.**", + "add_field": "Denna lekplats har inget officiellt namn, sÃ¥ vi anger inget för egenskapen namn.{br}LÃ¥t oss lägga till lite andra detaljer om lekplatsen i egenskapen Beskrivning. **Öppna listan för Lägg till egenskap.**", "choose_field": "**Välj {field} i listan.**", - "retry_add_field": "Du valde inte fältet {field}. LÃ¥t oss försöka igen.", + "retry_add_field": "Du valde inte egenskapen {field}. LÃ¥t oss försöka igen.", "describe_playground": "**Ange en beskrivning och klicka sedan pÃ¥ knappen {button} för att stänga objektredigeraren.**", "play": "Bra jobbat! Prova att rita lite fler omrÃ¥den för att se vad för typ av omrÃ¥den du kan lägga till pÃ¥ OpenStreetMap. **När du är redo att fortsätta till nästa kapitel, klicka pÃ¥ '{next}'.**" }, @@ -1016,7 +1240,8 @@ "title": "Markera objekt", "select_one": "Markera ett enskilt objekt", "select_multi": "Markera flera objekt", - "lasso": "Rita en markeringslasso runt objekt" + "lasso": "Rita en markeringslasso runt objekt", + "search": "Hitta objekt som matchar söktext" }, "with_selected": { "title": "Med objekt markerat", @@ -1562,6 +1787,9 @@ "display": { "label": "Visning" }, + "distance": { + "label": "Distans totalt" + }, "dock": { "label": "Typ" }, @@ -1602,6 +1830,9 @@ "except": { "label": "Undantag" }, + "faces": { + "label": "Sidor" + }, "fax": { "label": "Fax", "placeholder": "+46 31 123 4567" @@ -1713,6 +1944,39 @@ "label": "Basketkorgar", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "label": "Dressyrriding", + "options": { + "equestrian": "Ja", + "undefined": "Nej" + } + }, + "horse_riding": { + "label": "Ridning", + "options": { + "horse_riding": "Ja", + "undefined": "Nej" + } + }, + "horse_scale": { + "label": "SvÃ¥righetsgrad - Ridning", + "options": { + "common": "Lätt: Inga problem eller svÃ¥righeter (standard).", + "critical": "Gränsfall: Passar endast för erfarna ryttare och hästar. Större hinder. Broar bör undersökas noggrant.", + "dangerous": "Farligt: Passar endast för mycket erfarna ryttare och hästar och endast i gott väder. Sitt av.", + "demanding": "Används med försiktighet: Ojämnt underlag, ibland svÃ¥ra passager.", + "difficult": "SvÃ¥rt: Smal och utsatt väg. Kan ha hinder att gÃ¥ över och smala passager.", + "impossible": "Oframkomlig: Väg eller bro som inte är lämplig för hästar. För smal, har otillräckligt stöd, hinder (t.ex. stegar). Livsfara." + }, + "placeholder": "SvÃ¥rt, farligt..." + }, + "horse_stables": { + "label": "Ridstall", + "options": { + "stables": "Ja", + "undefined": "Nej" + } + }, "iata": { "label": "IATA" }, @@ -1725,13 +1989,16 @@ "incline_steps": { "label": "Lutning", "options": { - "down": "Ner", + "down": "Ned", "up": "Upp" } }, "indoor": { "label": "Inomhus" }, + "industrial": { + "label": "Typ" + }, "information": { "label": "Typ" }, @@ -1852,6 +2119,10 @@ "label": "Hastighetsbegränsning", "placeholder": "50, 70, 90..." }, + "maxspeed/advisory": { + "label": "Rekommenderad lägre hastighet", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "Maxtid" }, @@ -1865,7 +2136,7 @@ "label": "Mäter" }, "mtb/scale": { - "label": "Mountainbike-svÃ¥righet", + "label": "SvÃ¥righetsgrad - Mountainbike", "options": { "0": "0: Fast grus/packad jord, inga hinder, breda kurvor", "1": "1: Delvis löst underlag, smÃ¥ hinder, breda kurvor", @@ -1889,7 +2160,7 @@ "placeholder": "Enkel, medel, svÃ¥r..." }, "mtb/scale/uphill": { - "label": "Mountainbike svÃ¥righetsgrad uppför", + "label": "SvÃ¥righetsgrad - Mountainbike uppför", "options": { "0": "0: Genomsnittlig lutning <10%, grus/packad jord, inga hinder", "1": "1: Genomsnittlig lutning <15%, grus/packad jord, fÃ¥ smÃ¥ hinder", @@ -2159,7 +2430,7 @@ "label": "Typ" }, "sac_scale": { - "label": "SvÃ¥righetsgrad", + "label": "SvÃ¥righetsgrad - Vandring", "options": { "alpine_hiking": "T4: Alpin vandring", "demanding_alpine_hiking": "T5: Krävande alpin vandring", @@ -2440,8 +2711,19 @@ "label": "Typ", "placeholder": "Standard" }, + "usage_rail": { + "label": "AnvändningsomrÃ¥de", + "options": { + "branch": "SidospÃ¥r", + "industrial": "IndustrispÃ¥r", + "main": "HuvudspÃ¥r", + "military": "Militärt spÃ¥r", + "test": "TestspÃ¥r", + "tourism": "Museijärnväg" + } + }, "vending": { - "label": "Typ av varor" + "label": "Typ av gods" }, "visibility": { "label": "Synlighet", @@ -2536,6 +2818,10 @@ "name": "Annonstavla", "terms": "Annonstavla, reklamtavla, reklam, reklamskylt, affisch, affischtavla" }, + "advertising/column": { + "name": "Reklampelare", + "terms": "reklampelare, affischpelare, billboard, annonspelare, annonstavla, annonsering, marknadsföring, reklam, annons, affisch, annons, reklamplats" + }, "aerialway": { "name": "Linbana" }, @@ -2621,6 +2907,10 @@ "name": "Flygterminal", "terms": "Flygplatsterminal, terminal, avgÃ¥ngshall, ankomsthall, flygterminal, flygplats" }, + "allotments/plot": { + "name": "Kolonilott", + "terms": "Kolonilott, lott, täppa, koloniträdgÃ¥rd, odlingslott, koloniomrÃ¥de, koloni" + }, "amenity": { "name": "Facilitet" }, @@ -2849,6 +3139,10 @@ "name": "Marknadsplats", "terms": "Saluhall, torg, marknad, salutorg" }, + "amenity/monastery": { + "name": "KlosteromrÃ¥de", + "terms": "allah, andaktslokal, andaktsrum, andaktssal, andligt omrÃ¥de, annexkyrka, basilika, begravningskapell, betel, bönehus, böneplats, bönhus, dom, dopkapell, dyrkan, fristad, församling, gravkapell, gud, guds hus, gudshus, gudstjänst, gudstjänstlokal, gudstjänstslokal, helgedom, kapell, katedral, kloster, kor, korkapell, kranskapell, kristen, kristendom, kyrka, kyrkbyggnad, kyrkobyggnad, kyrkogÃ¥rd, kyrkorum, kyrksal, mission, missionshus, moske, moské, mässkapell, predikan, religion, religiös, religiös anläggning, religiöst omrÃ¥de, sanktuarium, sidokapell, synagoga, tabernakel, tempel, tempelomrÃ¥de, tillbedjan, tro, vallfärdsort, vallfärgsplats" + }, "amenity/motorcycle_parking": { "name": "Motorcykelparkering", "terms": "Motorcykelparkering, parkering motorcykel, ställplats, motorcykelställ, parkering, motorcykel, parkeringsplats, parkeringsplats motorcykel" @@ -2886,7 +3180,7 @@ }, "amenity/place_of_worship": { "name": "Plats för tillbedjan", - "terms": "allah,basilika,betel,bönehus,böneplats,dom,dyrkan,fristad,församling,gud,guds hus,gudshus,gudstjänstlokal,helgedom,kapell,katedral,kloster,kor,kyrka,kyrkobyggnad,mission,missionshus,moske,moské,mässkapell,pastorat,predikan,religion,sanktuarium,socken,synagoga,tabernakel,tempel,tillbedjan,tro,vallfärgsplats,vallfärdsort" + "terms": "allah, andaktslokal, andaktsrum, andaktssal, andligt omrÃ¥de, annexkyrka, basilika, begravningskapell, betel, bönehus, böneplats, bönhus, dom, dopkapell, dyrkan, fristad, församling, gravkapell, gud, guds hus, gudshus, gudstjänst, gudstjänstlokal, gudstjänstslokal, helgedom, kapell, katedral, kloster, kor, korkapell, kranskapell, kristen, kristendom, kyrka, kyrkbyggnad, kyrkobyggnad, kyrkogÃ¥rd, kyrkorum, kyrksal, mission, missionshus, moske, moské, mässkapell, pastorat, predikan, religion, religiös, religiös anläggning, religiöst omrÃ¥de, sanktuarium, sidokapell, slottskapell, socken, synagoga, tabernakel, tempel, tempelomrÃ¥de, tillbedjan, tro, vallfärdsort, vallfärgsplats" }, "amenity/place_of_worship/buddhist": { "name": "Buddhisttempel", @@ -2894,7 +3188,7 @@ }, "amenity/place_of_worship/christian": { "name": "Kyrka", - "terms": "Kyrka, tempel, gudshus, kyrkobyggnad, kapell, bönehus, böneplats, missionshus, dom, katedral, helgedom, gudstjänstlokal,tro, religion, helgedom, kristen, kristendom, församling, tillbedjan, predikan, katedral, kor, kapell, guds hus, gud, bönehus, socken, helgedom, tempel" + "terms": "andaktslokal, andaktsrum, andaktssal, andligt omrÃ¥de, annexkyrka, basilika, begravningskapell, betel, bönehus, böneplats, bönhus, dom, dopkapell, dyrkan, fristad, församling, gravkapell, gud, guds hus, gudshus, gudstjänst, gudstjänstlokal, gudstjänstslokal, helgedom, kapell, katedral, kloster, kor, korkapell, kranskapell, kristen, kristendom, kyrka, kyrkbyggnad, kyrkobyggnad, kyrkogÃ¥rd, kyrkorum, kyrksal, mission, missionshus, mässkapell, pastorat, predikan, religion, religiös, religiös anläggning, religiöst omrÃ¥de, sanktuarium, sidokapell, slottskapell, socken, tabernakel, tempel, tempelomrÃ¥de, tillbedjan, tro, vallfärdsort, vallfärgsplats" }, "amenity/place_of_worship/hindu": { "name": "Hindutempel", @@ -3053,6 +3347,10 @@ "name": "Cigarettautomat", "terms": "Cigarettautomat, cigaretter, snusautomat, tobaksautomat" }, + "amenity/vending_machine/coffee": { + "name": "Kaffeautomat", + "terms": "Kaffeautomat, kaffe, Espresso, expresso, te, the, Varuautomat, varumaskin" + }, "amenity/vending_machine/condoms": { "name": "Kondomautomat", "terms": "Kondomautomat, kondomomat, kondomer" @@ -3061,6 +3359,14 @@ "name": "Dryckesautomat ", "terms": "dryckesautomat, dryckautomat, drickautomat, läskautomat, kaffemaskin, kaffeautomat, läsk, kaffe, dryck, juice" }, + "amenity/vending_machine/electronics": { + "name": "Varumaskin för elektronik", + "terms": "Varumaskin för elektronik, varumaskin, varuautomat, elektronik, kablar, laddkablar, laddkabel, kabel, laddare, öronsnäckor, hörlurar, telefon, mobiltelefon, pekplatta, surfplatta" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Elongated coin-maskin (myntpressmaskin)", + "terms": "elongated coin, souvenirmynt, minnesmynt, souvenir, minne, mynt, elongated coin-maskin, myntpressmaskin, minnesmyntmaskin, ECM, Penny Press, elongated penny, coin maskin" + }, "amenity/vending_machine/excrement_bags": { "name": "BajspÃ¥sar", "terms": "BajspÃ¥sar, hundbajspÃ¥sar, hundpÃ¥sar, hundbajs, hundskit, skitpÃ¥se, avföringspÃ¥se, bajs, hund, djur" @@ -3069,6 +3375,9 @@ "name": "Varumaskin för mensskydd", "terms": "Varumaskin för mensskydd, mensskydd, kondom, tampong, bindor, binda, kvinna, kvinnor, mens, menstruation" }, + "amenity/vending_machine/fuel": { + "name": "Bränslepump" + }, "amenity/vending_machine/news_papers": { "name": "Tidningsautomat" }, @@ -3288,15 +3597,15 @@ }, "building/cathedral": { "name": "Katedral", - "terms": "Katedral, domkyrka, biskop, dom, biskopskyrka, kyrka, Huvudkyrka, stiftskyrka" + "terms": "Katedral, domkyrka, biskop, dom, biskopskyrka, kyrka, Huvudkyrka, stiftskyrka, andligt omrÃ¥de, basilika, dyrkan, fristad, gud, guds hus, gudshus, gudstjänst, helgedom, kloster, kristen, kristendom, kyrkbyggnad, kyrkobyggnad, kyrkogÃ¥rd, kyrkorum, kyrksal, predikan, religion, religiös, religiös anläggning, religiöst omrÃ¥de, tillbedjan, tro, vallfärdsort, vallfärgsplats" }, "building/chapel": { "name": "Kapell", - "terms": "Kapell, kyrkobyggnad, sidokapell, Kranskapell, gudstjänstlokal, korkapell, slottskapell, begravningskapell, gravkapell, dopkapell, andaktsrum, annexkyrka, bönhus, bönehus, kyrkorum" + "terms": "Kapell, kyrkobyggnad, sidokapell, Kranskapell, gudstjänstlokal, korkapell, slottskapell, begravningskapell, gravkapell, dopkapell, andaktsrum, annexkyrka, bönhus, bönehus, kyrkorum, andaktslokal, andaktssal, böneplats, dyrkan, fristad, gud, guds hus, gudshus, gudstjänst, gudstjänstlokal, helgedom, kor, kristen, kristendom, kyrka, kyrkbyggnad, kyrkogÃ¥rd, kyrksal, mission, missionshus, mässkapell, predikan, religion, religiös, religiös anläggning, religiöst omrÃ¥de, sanktuarium, socken, tempel, tempelomrÃ¥de, tillbedjan, tro" }, "building/church": { "name": "Kyrkobyggnad", - "terms": "Kyrka, kyrkobyggnad, kyrkbyggnad, kyrksal, andaktssal, missionshus, gudstjänst, gudstjänstslokal, andaktslokal, gudshus" + "terms": "Kyrka, kyrkobyggnad, kyrkbyggnad, kyrksal, andaktssal, missionshus, gudstjänst, gudstjänstslokal, andaktslokal, gudshus, andaktsrum, andligt omrÃ¥de, annexkyrka, basilika, begravningskapell, betel, bönehus, böneplats, bönhus, dom, dopkapell, dyrkan, fristad, församling, gravkapell, gud, guds hus, gudstjänstslokal, helgedom, kapell, katedral, kloster, kor, korkapell, kranskapell, kristen, kristendom, kyrkogÃ¥rd, kyrkorum, mission, mässkapell, pastorat, predikan, religion, religiös, religiös anläggning, religiöst omrÃ¥de, sanktuarium, sidokapell, slottskapell, socken, tabernakel, tempel, tempelomrÃ¥de, tillbedjan, tro, vallfärdsort, vallfärgsplats" }, "building/civic": { "name": "Kommunal byggnad", @@ -3307,11 +3616,11 @@ "terms": "Gymnasie, gymnasium, gymnasiebyggnad, universitet" }, "building/commercial": { - "name": "Kommersiell byggnad", + "name": "Kontorsbyggnad", "terms": "Kommersiell byggnad, kommersiellt, affärsbyggnad, handelsbyggnad" }, "building/construction": { - "name": "Byggnad under konstruktion", + "name": "Byggnad under uppförande", "terms": "Byggnad under konstruktion, Byggnad under uppförande, byggarbete, bygge, byggarbetsplats, byggnation, byggnadsplats" }, "building/detached": { @@ -3409,10 +3718,17 @@ "name": "Stall", "terms": "Stall, hästar, häst, stallbyggnad, ridhus, ridhusanläggning" }, + "building/stadium": { + "name": "Stadionbyggnad", + "terms": "stadium, Stadion, arena, Stadionbyggnad, arenabyggnad, byggnad, stadion, friidrottsstadion" + }, "building/static_caravan": { "name": "Villavagn", "terms": "Villavagn, husvagn, campingvagn" }, + "building/temple": { + "name": "Tempelbyggnad" + }, "building/terrace": { "name": "Terrasshus", "terms": "Terrasshus" @@ -3432,6 +3748,9 @@ "name": "Tältplats/husvagnsplats", "terms": "Tältplats, husvagnsplats, camping, Campingplats, camping, husvagn, tält" }, + "circular": { + "name": "Trafikcirkel" + }, "club": { "name": "Klubb", "terms": "klubb, socialt, förening, klubblokal, föreningslokal, sällskap, sammanslutning" @@ -3805,6 +4124,10 @@ "name": "Ridväg", "terms": "Ridväg, ridstig, häst, rida, ridning, ryttare, " }, + "highway/bus_guideway": { + "name": "SpÃ¥rbuss", + "terms": "SpÃ¥rbuss, buss, guidad buss" + }, "highway/bus_stop": { "name": "BusshÃ¥llplats / Bussplattform" }, @@ -3864,6 +4187,10 @@ "name": "Anslutning, motorväg", "terms": "Anslutning, motorvägsanslutning, pÃ¥fart, avfart, trafikplats" }, + "highway/passing_place": { + "name": "Mötesplats", + "terms": "Mötesplats, passage, passeringsplats, möte" + }, "highway/path": { "name": "Stig", "terms": "Stig, gÃ¥ng, led, spÃ¥r, gÃ¥ngväg, vandringsled, vandra, vandring, promenad, löparbana, motionsspÃ¥r" @@ -4062,7 +4389,7 @@ }, "landuse/churchyard": { "name": "KyrkogÃ¥rd (utan gravar)", - "terms": "KyrkogÃ¥rd, kyrka, kyrkomrÃ¥de" + "terms": "KyrkogÃ¥rd, kyrka, kyrkomrÃ¥de, andligt omrÃ¥de, begravningskapell, gravkapell, kristen, kristendom, religion, religiös, religiöst omrÃ¥de" }, "landuse/commercial": { "name": "Kommersiell omrÃ¥de", @@ -4087,6 +4414,10 @@ "name": "Skog (brukad)", "terms": "Skog, skogsvÃ¥rd, skogsomrÃ¥de, skogstrakt, träd, skogsdunge, dunge, lund, skogsplantering" }, + "landuse/garages": { + "name": "GarageomrÃ¥de", + "terms": "GarageomrÃ¥de, garage, bilstall, bilskjul, carport, varmgarage, kallgarage, bilplatser, parking" + }, "landuse/grass": { "name": "Gräs", "terms": "Gräs, klippt gräs, refug, rondell, mittremsa" @@ -4193,7 +4524,7 @@ }, "landuse/religious": { "name": "Religiöst omrÃ¥de", - "terms": "Religiöst omrÃ¥de, religiös, religion, tillbedjan, kyrka, moské, synagoga, kyrkogÃ¥rd, religiös anläggning, tempelomrÃ¥de, tempel, böneplats, andligt omrÃ¥de" + "terms": "Religiöst omrÃ¥de, religiös, religion, tillbedjan, kyrka, moske, moské, synagoga, kyrkogÃ¥rd, religiös anläggning, tempelomrÃ¥de, tempel, böneplats, andligt omrÃ¥de, dyrkan, gud, helgedom, kristen, kristendom, tro, vallfärdsort, vallfärgsplats" }, "landuse/residential": { "name": "BostadsomrÃ¥de", @@ -4215,6 +4546,14 @@ "name": "Center för vuxenspel", "terms": "Center för vuxenspel, vuxenspel, spelmaskiner, spel, spelmaskin, flipperspel, flipper" }, + "leisure/amusement_arcade": { + "name": "Arkadhall", + "terms": "arkadhall, spelhall, spelhus, arkad, arkadspel, arkadmaskin,spel, pay-to-play-spel, videospel, Spelkonsol, körsimulatorer, flipperspel, flipper" + }, + "leisure/beach_resort": { + "name": "Strandresort", + "terms": "Strandresort, strand, Resort, turistanläggning, hotellanläggning, semesterresort, semesteranläggning, rekreationsort, kurort, badort, turist, turism, hotell" + }, "leisure/bird_hide": { "name": "Torn/gömsle för fÃ¥gelskÃ¥dning", "terms": "FÃ¥gelskÃ¥dning, fÃ¥gelskÃ¥dare, fÃ¥gelskÃ¥dartorn, vilttorn, fÃ¥geltorn, fÃ¥gelskÃ¥dargömsel, utsiktstorn, fÃ¥gelskÃ¥dningstorn" @@ -4331,6 +4670,10 @@ "name": "Naturreservat", "terms": "naturreservat, nationalpark, naturpark, naturomrÃ¥de, reservat, naturskyddsomrÃ¥de" }, + "leisure/outdoor_seating": { + "name": "Uteservering", + "terms": "Uteservering, servering, al fresco, beer garden, ölträdgÃ¥rd, café, restaurang, pub, bar, utomhusmatsal, terrass, utomhus, glassbar" + }, "leisure/park": { "name": "Park", "terms": "rekreationsomrÃ¥de, friluftsomrÃ¥de, trädgÃ¥rd, plantering, grönomrÃ¥de, lund, stadsoas, oas, esplanad, skog, park, gräs, gräsmatta, äng, lekplats, nöjesträdgÃ¥rd, plaza, skogsmark" @@ -4405,7 +4748,7 @@ }, "leisure/playground": { "name": "Lekplats", - "terms": "Lekplats, lekomrÃ¥de, lekpark, klätterställning, gunga" + "terms": "Lekplats, lekomrÃ¥de, lekpark, lek, klätterställning, gunga" }, "leisure/resort": { "name": "Resort", @@ -4459,6 +4802,10 @@ "name": "Horisontell gruvgÃ¥ng (Stoll)", "terms": "stoll, gruva, gruvgÃ¥ng, horisontell gruvgÃ¥ng, gruvgÃ¥ng, gruvingÃ¥ng, gruvhÃ¥l, dagort, sidoort, Stollen, lichtloch" }, + "man_made/antenna": { + "name": "Antenn", + "terms": "Antenn, mast, sändning, mobil, mobilmast, kommunikation, radio, tv, radiomast, tv-mast, överföring" + }, "man_made/breakwater": { "name": "VÃ¥gbrytare", "terms": "VÃ¥gbrytare, pir, hamnarm, vÃ¥gskydd, fördämning, hamnpir" @@ -4510,6 +4857,10 @@ "name": "Utkikstorn", "terms": "Utkikstorn, utsiktstorn, observationstorn, utsiktspost, observationspost, brandtorn" }, + "man_made/observatory": { + "name": "Observatorium", + "terms": "Observatorium, astronomisk, meteorologisk, teleskop, astronom, rymd" + }, "man_made/petroleum_well": { "name": "Oljeborr", "terms": "Oljeborr, olja, petroleum, Oljeborrning, oljetorn, oljepump" @@ -4634,6 +4985,10 @@ "name": "Hed", "terms": "hed, äng, gräs, slättmark, slätt, tundra, stäpp, alvar, kalmark" }, + "natural/mud": { + "name": "Lera", + "terms": "Lera, vÃ¥tmark, sankmark och sumpmark, lerigt, gyttja, dy, sörja, gegga" + }, "natural/peak": { "name": "Bergstopp", "terms": "Bergstopp, berg, alp, hjässa, kalott, klack, klint, klätt, kulle, höjdpunkt, höjd, topp" @@ -4714,19 +5069,28 @@ "name": "Lokal myndighet" }, "office/adoption_agency": { - "name": "AdoptionsbyrÃ¥" + "name": "AdoptionsbyrÃ¥", + "terms": "AdoptionsbyrÃ¥, Adoption, barnupptagande, adoptering, adoptera" }, "office/advertising_agency": { - "name": "ReklambyrÃ¥" + "name": "ReklambyrÃ¥", + "terms": "ReklambyrÃ¥, reklam, annons, annonsbyrÃ¥, annonsering, marknadsföring" }, "office/architect": { - "name": "ArkitektbyrÃ¥" + "name": "ArkitektbyrÃ¥", + "terms": "ArkitektbyrÃ¥, arkitektkontor, Arkitekt, byggnadskonstnär, byggnadskonst, ritningar" }, "office/association": { - "name": "Frivilligorganisation" + "name": "Frivilligorganisation", + "terms": "Frivilligorganisation, Frivillig, volontär, frivilligarbetare, bistÃ¥ndsarbetare, förening, ideell, icke vinstdrivande, organisation, samhälle" }, "office/charity": { - "name": "Välgörenhetsorganisation" + "name": "Välgörenhetsorganisation", + "terms": "Välgörenhetsorganisation, Välgörenhet, hjälpverksamhet, bistÃ¥nd, bistÃ¥ndsorganisation" + }, + "office/company": { + "name": "Företagskontor", + "terms": "Företagskontor, kontor, företag, expedition, kundmottagning" }, "office/coworking": { "name": "Dagkontor", @@ -4753,10 +5117,12 @@ "terms": "Bankkontor, finanskontor, ekonomi, finans, bank, ekonomisk" }, "office/forestry": { - "name": "Skogsbolag" + "name": "Skogsbolag", + "terms": "Skogsbolag, skog, skogsvaktare" }, "office/foundation": { - "name": "Stiftelse" + "name": "Stiftelse", + "terms": "Stiftelse, fond, donation" }, "office/government": { "name": "Myndighet", @@ -4767,7 +5133,8 @@ "terms": "RegistreringsbyrÃ¥, borgerlig vigsel, stadshus, registrerade enhet, inskrivningskontor, registreringskontor, Folkbokföring, Skattemyndigheten, mantalslängder" }, "office/government/tax": { - "name": "Skattekontor" + "name": "Skattekontor", + "terms": "Skattekontor, skatt, skattemyndigheten, myndighet" }, "office/guide": { "name": "Guidekontor", @@ -4869,7 +5236,8 @@ "terms": "ö, holme, skär, kobbe, klippa, rev, atoll, skärgÃ¥rd, rev" }, "place/islet": { - "name": "Holme" + "name": "Holme", + "terms": "holme, skärgÃ¥rd, atoll, ö, rev, kobbe, liten ö, skär, grynna, havsklippa, grund" }, "place/isolated_dwelling": { "name": "Isolerad boplats", @@ -4909,49 +5277,59 @@ }, "playground/balance_beam": { "name": "Balansbom (lekplats)", - "terms": "balansbom, balans, bom" + "terms": "balansbom, balans, bom, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/basket_spinner": { - "name": "Korgkarusell" + "name": "Korgkarusell", + "terms": "Korgkarusell, karusell, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/basket_swing": { - "name": "Korggunga" + "name": "Korggunga", + "terms": "Korggunga, korg, gunga, gungställning, kompisgunga, fÃ¥gelbogunga, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/climbing_frame": { - "name": "Klätterställning" + "name": "Klätterställning", + "terms": "Klätterställning, klättra, klättring, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/cushion": { - "name": "Hoppkudde" + "name": "Hoppkudde", + "terms": "hoppkudde, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/horizontal_bar": { "name": "Räck (lekplats)", - "terms": "bar, räck, lekplats" + "terms": "bar, räck, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/rocker": { "name": "Fjädergunga", - "terms": "Gungdjur,Fjädergunga" + "terms": "Gungdjur,Fjädergunga, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/roundabout": { - "name": "Karusell" + "name": "Karusell (lekplats)", + "terms": "karusell, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/sandpit": { - "name": "SandlÃ¥da" + "name": "SandlÃ¥da", + "terms": "sandlÃ¥da, sand, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/seesaw": { - "name": "Gungbräda" + "name": "Gungbräda", + "terms": "gungbräda, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/slide": { - "name": "Rutschkana" + "name": "Rutschkana", + "terms": "Rutschkana, rutschbana, rutchelbana, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/structure": { - "name": "Lekslott" + "name": "Lekhus", + "terms": "Lekslott, lekhus, lekstuga, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/swing": { "name": "Gungställning", - "terms": "Gunga,Gungställning" + "terms": "Gunga,Gungställning, lekplats, lekomrÃ¥de, lekpark, lek" }, "playground/zipwire": { - "name": "Linbana" + "name": "Linbana (lekplats)", + "terms": "linbana, lekplats, lekomrÃ¥de, lekpark, lek" }, "point": { "name": "Punkt", @@ -5012,20 +5390,129 @@ "terms": "HÃ¥llplats, Plattform, kollektivtrafik, linjetrafik, transport" }, "public_transport/linear_platform_aerialway": { - "name": "HÃ¥llplats / Plattform för linbana" + "name": "HÃ¥llplats / Plattform för linbana", + "terms": "linbana, aerialway, LinbanehÃ¥llplats, linbaneplattform, linbaneterminal, linbanestopp, hÃ¥llplats, plattform, terminal, stopp, kollektivtrafik, linjetrafik, transit, transport" + }, + "public_transport/linear_platform_bus": { + "name": "Bussplattform", + "terms": "buss, plattform, kollektivtrafik, transport, transit, hÃ¥llplats, busshÃ¥llplats, bussplattform, linjetrafik" + }, + "public_transport/linear_platform_ferry": { + "name": "Stop / plattform för färja", + "terms": "färjeplattform, plattform, stopp, bÃ¥tstopp, färjestopp, bÃ¥thÃ¥llplats, Färjeterminal, terminal, färja, bÃ¥tterminal, bÃ¥thÃ¥llplats, FärjehÃ¥llplats, Färjestation, bÃ¥t, brygga, pir, kollektivtrafik, linjetrafik, station, transit, transport" + }, + "public_transport/linear_platform_light_rail": { + "name": "HÃ¥llplats för snabbspÃ¥rväg / stadsbana", + "terms": "SpÃ¥rvägshÃ¥llplats, hÃ¥llplats, spÃ¥rvagnsplattform, plattform, spÃ¥rvagn, spÃ¥rväg, spÃ¥rvagnsterminal, terminal, järnväg, kollektivtrafik, kollektivtrafik, vagn, transit, transport, snabbspÃ¥rväg, stadsbana, light rail, spÃ¥r, järnväg" + }, + "public_transport/linear_platform_monorail": { + "name": "Stopp / plattform för monorail", + "terms": "monorailstopp, monorailplattform, stopp, plattform, monorail, plattform, kollektivtrafik, linjetrafik, enskensbana, balkbana, räls, spÃ¥r, transport" }, "public_transport/linear_platform_subway": { "name": "Tunnelbanestopp / -plattform", "terms": "Tunnelbanestopp, Tunnelbaneplattform, tunnelbana, metro, plattform, kollektivtrafik, järnväg, spÃ¥r, transport, tunnelbana, underjordisk" }, + "public_transport/linear_platform_train": { + "name": "Järnvägsstopp / -perrong", + "terms": "TÃ¥gstopp, Perrong, järnvägsperrong, plattform, järnvägsplattform, järnväg, tÃ¥g, stopp, kollektivtrafik, linjetrafik, spÃ¥r, transit, transport" + }, + "public_transport/linear_platform_tram": { + "name": "SpÃ¥rvagnshÃ¥llplats / -plattform", + "terms": "SpÃ¥rvägshÃ¥llplats, spÃ¥rvagnshÃ¥llplats, hÃ¥llplats, spÃ¥rvagnsplattform, plattform, spÃ¥rvagn, spÃ¥rväg, spÃ¥rvagnsterminal, terminal, järnväg, kollektivtrafik, kollektivtrafik, vagn, transit, transport" + }, + "public_transport/linear_platform_trolleybus": { + "name": "BusshÃ¥llplats / plattform för trÃ¥dbuss", + "terms": "BusshÃ¥llplats, bussplattform, plattform, trÃ¥dbuss, hÃ¥llplats, buss, kollektivtrafik, spÃ¥rlös, spÃ¥rvagn, vagn, transit, transport" + }, + "public_transport/platform": { + "name": "Stopp / Plattform för kollektivtrafik", + "terms": "Plattform, väntplats, pÃ¥stigningsplats, avsats, perrong" + }, + "public_transport/platform_aerialway": { + "name": "HÃ¥llplats / Plattform för linbana", + "terms": "linbana, aerialway, LinbanehÃ¥llplats, linbaneplattform, linbaneterminal, linbanestopp, hÃ¥llplats, plattform, terminal, stopp, kollektivtrafik, linjetrafik, transit, transport" + }, + "public_transport/platform_bus": { + "name": "BusshÃ¥llplats / Bussplattform", + "terms": "buss, plattform, kollektivtrafik, transport, transit, hÃ¥llplats, busshÃ¥llplats, bussplattform, linjetrafik" + }, + "public_transport/platform_ferry": { + "name": "Stop / plattform för färja", + "terms": "färjeplattform, plattform, stopp, bÃ¥tstopp, färjestopp, bÃ¥thÃ¥llplats, Färjeterminal, terminal, färja, bÃ¥tterminal, bÃ¥thÃ¥llplats, FärjehÃ¥llplats, Färjestation, bÃ¥t, brygga, pir, kollektivtrafik, linjetrafik, station, transit, transport" + }, + "public_transport/platform_light_rail": { + "name": "HÃ¥llplats för snabbspÃ¥rväg / stadsbana", + "terms": "SpÃ¥rvägshÃ¥llplats, hÃ¥llplats, spÃ¥rvagnsplattform, plattform, spÃ¥rvagn, spÃ¥rväg, spÃ¥rvagnsterminal, terminal, järnväg, kollektivtrafik, kollektivtrafik, vagn, transit, transport, snabbspÃ¥rväg, stadsbana, light rail, spÃ¥r, järnväg" + }, + "public_transport/platform_monorail": { + "name": "Stopp / plattform för monorail", + "terms": "monorailstopp, monorailplattform, stopp, plattform, monorail, plattform, kollektivtrafik, linjetrafik, enskensbana, balkbana, räls, spÃ¥r, transport" + }, "public_transport/platform_subway": { "name": "Tunnelbanestopp / -plattform", "terms": "Tunnelbanestopp, Tunnelbaneplattform, tunnelbana, metro, plattform, kollektivtrafik, järnväg, spÃ¥r, transport, tunnelbana, underjordisk" }, + "public_transport/platform_train": { + "name": "Järnvägsstopp / -perrong", + "terms": "TÃ¥gstopp, Perrong, järnvägsperrong, plattform, järnvägsplattform, järnväg, tÃ¥g, stopp, kollektivtrafik, linjetrafik, spÃ¥r, transit, transport" + }, + "public_transport/platform_tram": { + "name": "SpÃ¥rvagnshÃ¥llplats / -plattform", + "terms": "SpÃ¥rvägshÃ¥llplats, spÃ¥rvagnshÃ¥llplats, hÃ¥llplats, spÃ¥rvagnsplattform, plattform, spÃ¥rvagn, spÃ¥rväg, spÃ¥rvagnsterminal, terminal, järnväg, kollektivtrafik, kollektivtrafik, vagn, transit, transport" + }, + "public_transport/platform_trolleybus": { + "name": "BusshÃ¥llplats / plattform för trÃ¥dbuss", + "terms": "BusshÃ¥llplats, bussplattform, plattform, trÃ¥dbuss, hÃ¥llplats, buss, kollektivtrafik, spÃ¥rlös, spÃ¥rvagn, vagn, transit, transport" + }, + "public_transport/station": { + "name": "Station för kollektivtrafik", + "terms": "Station för kollektivtrafik, station, kollektivtrafik, terminal, resecenter, bytespunkt, transport" + }, + "public_transport/station_aerialway": { + "name": "Linbanestation", + "terms": "Linbanestation, station, linbana, aerialway, kollektivtrafik, terminal, transit, transport" + }, + "public_transport/station_bus": { + "name": "Busstation / Bussterminal", + "terms": "Busstation, Bussterminal, buss, kollektivtrafik, station, terminal, transit, transport, terminal, BusshÃ¥llplats, resecenter, reseterminal" + }, + "public_transport/station_ferry": { + "name": "Färjeterminal / FärjehÃ¥llplats / Färjestation", + "terms": "Färjeterminal, terminal, färja, bÃ¥tterminal, bÃ¥thÃ¥llplats, FärjehÃ¥llplats, Färjestation, bÃ¥t, brygga, pir, kollektivtrafik, station, transit, transport" + }, + "public_transport/station_light_rail": { + "name": "Station för snabbspÃ¥rväg / stadsbana", + "terms": "Station för snabbspÃ¥rväg, Station för light rail, snabbspÃ¥rväg, light rail, lättbana, spÃ¥rväg, kollektivtrafik, järnväg, spÃ¥r, spÃ¥rvagn, transport, spÃ¥rvagn, linjetrafik, hÃ¥llplats, spÃ¥rvagnshÃ¥llplats, spÃ¥rvagnstopp, spÃ¥rvagnsterminal, station, terminal, spÃ¥rväg, transport, stadsbana" + }, + "public_transport/station_monorail": { + "name": "Monorailstation", + "terms": "monorailstation, station, terminal, monorail, plattform, räls, spÃ¥r, kollektivtrafik, linjetrafik, enskensbana, balkbana, transport" + }, "public_transport/station_subway": { "name": "Tunnelbanestation", "terms": "Tunnelbanestation, tunnelbana, metro, , kollektivtrafik, järnväg, spÃ¥r, transport, tunnelbana, underjordisk, station, terminal" }, + "public_transport/station_train": { + "name": "Järnvägsstation", + "terms": "Järnvägsstation, centralstation, central, huvudbangÃ¥rd, tÃ¥gstation, järnvägshÃ¥llplats, tÃ¥ghÃ¥llplats, trafikplats, hÃ¥llställe, linjeplats, hÃ¥llplats, " + }, + "public_transport/station_train_halt": { + "name": "Mindre järnvägshÃ¥llplats", + "terms": "Mindre järnvägshÃ¥llplats, järnvägshÃ¥llplats, hÃ¥llplats, järnvägsstation, station, plattform, avstigning, pÃ¥stigning, kollektivtrafik, järnväg, spÃ¥r, tÃ¥g, transit, transport, hÃ¥llställe" + }, + "public_transport/station_tram": { + "name": "SpÃ¥rvagnsstation", + "terms": "SpÃ¥rvagnsstation, spÃ¥rvagn, station, spÃ¥rväg, spÃ¥rvägshÃ¥llplats, spÃ¥rvagnsterminal" + }, + "public_transport/station_trolleybus": { + "name": "Station / Terminal för trÃ¥dbuss", + "terms": "Station / Terminal för trÃ¥dbuss, station, terminal, trÃ¥dbuss, buss, kollektivtrafik, linjetrafik, transport, hÃ¥llplats, trÃ¥dbusshÃ¥llplats, trÃ¥dbusstopp, trÃ¥dbussterminal, busshÃ¥llplats, busstopp, bussterminal" + }, + "public_transport/stop_area": { + "name": "Bytespunkt / knutpunkt", + "terms": "bytespunkt, transit, resecenter, station, terminal, byte, kollektivtrafik, linjetrafik, transport, hÃ¥llplats, knutpunkt" + }, "public_transport/stop_position": { "name": "Stopposition för kollektivtrafik", "terms": "Stopposition för kollektivtrafik, stopposition, kollektivtrafik, linjetrafik, transport, hÃ¥llplats" @@ -5043,12 +5530,12 @@ "terms": "Stopposition för färja, stopposition, färja, bÃ¥t, linjetrafik, kollektivtrafik, transport, hÃ¥llplats, busshÃ¥llplats, busstopp, bussterminal" }, "public_transport/stop_position_light_rail": { - "name": "Stopposition för snabbspÃ¥rväg / light rail", - "terms": "Stopposition för snabbspÃ¥rväg, snabbspÃ¥rväg, light rail, lättbana, spÃ¥rväg, kollektivtrafik, järnväg, spÃ¥r, spÃ¥rvagn, transport, stopposition, spÃ¥rvagn, linjetrafik, hÃ¥llplats, spÃ¥rvagnshÃ¥llplats, spÃ¥rvagnstopp, spÃ¥rvagnsterminal" + "name": "Stopposition för snabbspÃ¥rväg / stadsbana", + "terms": "Stopposition för snabbspÃ¥rväg, snabbspÃ¥rväg, light rail, lättbana, spÃ¥rväg, kollektivtrafik, järnväg, spÃ¥r, spÃ¥rvagn, transport, stopposition, spÃ¥rvagn, linjetrafik, hÃ¥llplats, spÃ¥rvagnshÃ¥llplats, spÃ¥rvagnstopp, spÃ¥rvagnsterminal, stadsbana" }, "public_transport/stop_position_monorail": { "name": "Stopposition för monorail", - "terms": "Stopposition för monorail, stopposition, monorail, enskensbana, balkbana, kollektivtrafik, linjetrafik, transport, hÃ¥llplats" + "terms": "Stopposition för monorail, stopposition, monorail, enskensbana, balkbana, räls, spÃ¥r, kollektivtrafik, linjetrafik, transport, hÃ¥llplats" }, "public_transport/stop_position_subway": { "name": "Stopposition för tunnelbana", @@ -5093,22 +5580,36 @@ "name": "Bergbana ", "terms": "Bergbana, linbana" }, + "railway/halt": { + "name": "Mindre järnvägshÃ¥llplats" + }, "railway/level_crossing": { "name": "Järnvägskorsning (väg)", "terms": "korsning, järnvägskorsning, järnvägsövergÃ¥ng, järnvägspassage, plankorsning, spÃ¥rpassage, tÃ¥gövergÃ¥ng, tÃ¥gkorsning, tÃ¥gpassage" }, + "railway/light_rail": { + "name": "SnabbspÃ¥rväg / stadsbana", + "terms": "smalspÃ¥rig järnväg, smalspÃ¥r, järnväg, snabbspÃ¥rväg, stadsbana" + }, "railway/milestone": { "name": "Kilometerstolpe vid järnväg", "terms": "Kilometerstolpe, kilometertavla, avstÃ¥ndsmärke, milsten, referenstavla, kilometerpÃ¥le" }, + "railway/miniature": { + "name": "Miniatyrjärnväg", + "terms": "Miniatyrjärnväg, Åkbar miniatyrjärnväg, smalspÃ¥rig järnväg, smalspÃ¥r, trädgÃ¥rdsjärnväg" + }, "railway/monorail": { "name": "Monorail", - "terms": "Monorail, enskensbana, balkbana" + "terms": "Monorail, enskensbana, balkbana, räls, spÃ¥r, kollektivtrafik, linjetrafik, transport" }, "railway/narrow_gauge": { "name": "SmalspÃ¥rbana", "terms": "SmalspÃ¥rbana, smalspÃ¥r" }, + "railway/platform": { + "name": "Järnvägsstopp / -perrong" + }, "railway/rail": { "name": "Räls", "terms": "Räls, järnvägsspÃ¥r, spÃ¥r, bana" @@ -5117,6 +5618,9 @@ "name": "Järnvägssignal", "terms": "järnvägssignal, signal, ljus, järnvägsljus, semafor, försignal, huvudsignal, dvärgsignal" }, + "railway/station": { + "name": "Järnvägsstation" + }, "railway/subway": { "name": "Tunnelbana", "terms": "Tunnelbana, T-bana, metro" @@ -5137,6 +5641,9 @@ "name": "SpÃ¥rvagn", "terms": "SpÃ¥rvagn, spÃ¥rväg, motorvagn" }, + "railway/tram_stop": { + "name": "Stopposition för spÃ¥rvagn" + }, "relation": { "name": "Relation", "terms": "Relation, relaterat, förbindelse, förhÃ¥llande, samband, anknytning, koppling, kontext" @@ -5152,6 +5659,10 @@ "name": "Affär", "terms": "Affär, shop, butik" }, + "shop/agrarian": { + "name": "Jordbruksaffär", + "terms": "Jordbruksaffär, Jordbruk, jordbruksmaskiner, frön, utsäde, bekämpningsmedel, gödningsmedel, gödsel, jordbruksverktyg, utsäde, djurmat, jordbruksutrustning, lantmannaföreningen" + }, "shop/alcohol": { "name": "Vin-och-spritaffär", "terms": "Vinaffär, spritaffär, vin- och sprit, vin- och spritaffär, systemet, systembolaget, bolaget, alkohol, öl, vin, sprit" @@ -5390,6 +5901,10 @@ "name": "Järnaffär", "terms": "Järnaffär, järnhandlare, skruv, skruvar, bult, bultar, spik, krokar, järnbeslag, järntillbehör, metallverktyg, verktyg, bygg, el, vvs, trädgÃ¥rdsredskap, redskap, handverktyg, elverktyg, köksutrustning, badrum, kök, hushÃ¥llsprodukter, lÃ¥s, nycklar, nyckeltillverkning" }, + "shop/health_food": { + "name": "Hälsokostbutik", + "terms": "Hälsokostbutik, hälsokost, hälsomat, organisk, organist, vitaminer, vegetarian, vegan, naturligt, kosttillskott, köttersättning, mjölkersättning" + }, "shop/hearing_aids": { "name": "Hörapparater", "terms": "Hörapparater, hörselskada, hörselskadade, hörhjälpmedel, hörsel" @@ -5414,6 +5929,10 @@ "name": "Juvelerare", "terms": "Juvelerare, smycken, halsband, ring, ringar, örhänge, örhängen, klocka, klockor, guld, silver, diamant, pärla, pärlor" }, + "shop/kiosk": { + "name": "Kiosk", + "terms": "Kiosk, gatukök, tidningar, godis, cigaretter, tobak, snus, dryck, läsk, butik, snabbmat, glass, korv" + }, "shop/kitchen": { "name": "Köksinredning", "terms": "Köksinredning, kök, bänkskivor, köksskÃ¥p, skÃ¥pluckor" @@ -5506,6 +6025,10 @@ "name": "Djurbutik", "terms": "Djuraffär, djur, husdjur, hund, hundar, katt, katter, djurmat, djurtillbehör, djurburar, akvarium, hund, fisk" }, + "shop/pet_grooming": { + "name": "PälsvÃ¥rd för husdjur", + "terms": "PälsvÃ¥rd för husdjur, pälsvÃ¥rd, husdjur, hund, Trimning, hundvÃ¥rd" + }, "shop/photo": { "name": "Fotoaffär ", "terms": "fotoaffär, bild, foto, video, fotografi, fotoredigering, framkallning, ram, kameratillbehör, kamera, kameror, filmkamera, fotokamera, konvertering, film" @@ -5583,7 +6106,8 @@ "terms": "Leksaksaffär, leksaker, barnsaker" }, "shop/trade": { - "name": "Proffshandel" + "name": "Proffshandel", + "terms": "Proffshandel, proffsmarknad, proffs, byggnadsmaterial, byggmaterial, brädgÃ¥rd, brädor, Trähandel, trävaror, VVS-specialist, VVS, jordbruksprodukter, jordbruk, lantmannaföreningen, granngÃ¥rden, kakel, fönster" }, "shop/travel_agency": { "name": "ResebyrÃ¥", @@ -5624,6 +6148,10 @@ "name": "Vapenaffär", "terms": "Vapenaffär, vapen, ammunition, jakt, skjutvapen, kniv, knivar, pistol" }, + "shop/wholesale": { + "name": "Grosistaffär", + "terms": "grosist, Grosistaffär, Partihandel, grosshandel, grossistverksamhet, grosshandel, engros, mängdhandel, grossistlager, lagerklubb, grossistklubb" + }, "shop/window_blind": { "name": "Persienner", "terms": "Persienner, spjälgardin, jalusi, markis, rullgardin, spjäljalusi" @@ -5665,7 +6193,8 @@ "terms": "Ställplats, campingplats, camping, husvagnscamping, husbilscamping, fricamping" }, "tourism/chalet": { - "name": "Stuga" + "name": "Stuga", + "terms": "Campingstuga, stuga, sommarstuga, ledighet, helg, helgboende, semester, semesterboende, semesterstuga, camping" }, "tourism/gallery": { "name": "Konstgalleri", @@ -5724,7 +6253,8 @@ "terms": "Utsiktsplats, utsikt, vy" }, "tourism/wilderness_hut": { - "name": "Stuga (för vandrare o.d.)" + "name": "Stuga (för vandrare o.d.)", + "terms": "Stuga (för vandrare o.d.), stuga, fjällstuga, fjällstation, koja, skydd, hydda, kyffe, barack, vildmarksstuga, vandring, hajk, övernattning, Ödestuga" }, "tourism/zoo": { "name": "Zoo", @@ -5767,7 +6297,8 @@ "terms": "Bullerräfflor, Pennsylvaniaräfflor" }, "traffic_calming/table": { - "name": "Fartgupp (lÃ¥ngt)" + "name": "Fartgupp (lÃ¥ngt)", + "terms": "PlatÃ¥gupp, gupp, farthinder, fartgupp, Fartgupp (lÃ¥ngt), lÃ¥ngt fartgupp" }, "type/boundary": { "name": "Gräns", @@ -5802,15 +6333,19 @@ }, "type/restriction/only_left_turn": { "name": "Enbart vänstersväng", - "terms": "Enbart vänstersväng, bara vänstersväng, endast vänstersväng" + "terms": "Enbart vänstersväng, vänstersväng, vänster" }, "type/restriction/only_right_turn": { "name": "Enbart högersväng", - "terms": "enbart högersväng, endast högersväng, bara högersväng" + "terms": "Enbart högersväng, högersväng, höger" }, "type/restriction/only_straight_on": { - "name": "Inga svängar", - "terms": "Inga svängar, rakt fram, ingen sväng" + "name": "Enbart rakt fram", + "terms": "Enbart rakt fram, fortsätt framÃ¥t, fÃ¥r ej svänga" + }, + "type/restriction/only_u_turn": { + "name": "Enbart U-sväng", + "terms": "Enbart U-sväng, mÃ¥ste vända, U-sväng" }, "type/route": { "name": "Rutt", @@ -5844,10 +6379,18 @@ "name": "HästspÃ¥r", "terms": "Ridrutt, ridning, rida, häst, hästrutt, hästspÃ¥r, ridspÃ¥r" }, + "type/route/light_rail": { + "name": "Rutt pÃ¥ snabbspÃ¥rväg / stadsbana", + "terms": "Rutt pÃ¥ smalspÃ¥rig järnväg, smalspÃ¥rig järnväg, smalspÃ¥r, järnväg, järnvägsrutt, tÃ¥grutt, tÃ¥gnät, järnvägsförbindelse, snabbspÃ¥rväg, stadsbana, rutt för snabbspÃ¥rväg, rutt för stadsbana" + }, "type/route/pipeline": { "name": "Rörledningsrutt", "terms": "Rörledningsrutt, rörledning, pipeline, oljeledning, vattenledning, avloppsledning" }, + "type/route/piste": { + "name": "Pist/skidspÃ¥r", + "terms": "Pist, pistspÃ¥r, skidor, skidspÃ¥r, skidrutt, skidor, skidbacke, slalombacke, skidbana, utförsÃ¥kning, längdskidÃ¥kning, längdskidspÃ¥r, skidtur, slädspÃ¥r, skridskospÃ¥r, skridskobana, skridskorutt, snöpark, slädspÃ¥r" + }, "type/route/power": { "name": "Kraftledningsrutt", "terms": "Kraftledningsrutt, kraftledning, elförsörjning, elnät" @@ -5877,7 +6420,8 @@ "terms": "Plats, ställe, läge, anläggning" }, "type/waterway": { - "name": "Vattendrag" + "name": "Vattendrag", + "terms": "Vattenväg, vattenflöde, vattendrag" }, "vertex": { "name": "Annat", @@ -5931,7 +6475,8 @@ "terms": "vattendrag, bäck, dike, biflöde, flöde, ström, flod, flöde, rännil, biflod" }, "waterway/stream_intermittent": { - "name": "Tillfälligt vattendrag" + "name": "Periodiskt vattendrag", + "terms": "Periodiskt vattendrag, tillfälligt vattendrag, periodiskt, tillfälligt, Arroyo, bäck, avrinning, dränering, översvämning, rännil, biflöde, vattendrag, dike, dagvatten, dränering, avrinning" }, "waterway/water_point": { "name": "Dricksvatten för bÃ¥t", @@ -5963,7 +6508,7 @@ "attribution": { "text": "Villkor & Ã¥terkoppling" }, - "description": "Gränser för flygfoto och fotograferingsdatum. Etiketter visas vid zoomnivÃ¥ 14 och upp.", + "description": "Gränser för flygfoto och fotograferingsdatum. Etiketter visas vid zoomnivÃ¥ 13 och upp.", "name": "DigitalGlobe Premium flygfotoÃ¥lder" }, "DigitalGlobe-Standard": { @@ -5977,7 +6522,7 @@ "attribution": { "text": "Villkor & Ã¥terkoppling" }, - "description": "Gränser för flygfoto och fotograferingsdatum. Etiketter visas vid zoomnivÃ¥ 14 och upp.", + "description": "Gränser för flygfoto och fotograferingsdatum. Etiketter visas vid zoomnivÃ¥ 13 och upp.", "name": "DigitalGlobe Standard flygfotoÃ¥lder" }, "EsriWorldImagery": { @@ -5987,6 +6532,13 @@ "description": "Esri världsflygfoto.", "name": "Esri världsflygfoto" }, + "EsriWorldImageryClarity": { + "attribution": { + "text": "Villkor & Ã¥terkoppling" + }, + "description": "Arkivbilder frÃ¥n Esri som kan vara tydligare och mer korrekta än det normala lagret.", + "name": "Esri världsflygfoto (Clarity) Beta" + }, "MAPNIK": { "attribution": { "text": "© OpenStreetMaps bidragsgivare, CC-BY-SA" @@ -6054,19 +6606,38 @@ "description": "Gul = Fritt tillgänglig kartdata (public domain) frÃ¥n US Census. Röd = Data ej hittad i OpenStreetMap", "name": "TIGER Roads 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "Väg: Grön ram = oklassificerad. Brun ram = bruksväg. Underlag: grus = ljusbrun fyllning, asfalt = svart, belagd = grÃ¥, mark = vit, betong = blÃ¥, gräs = grön. Säsongsöppen = vita streck", + "name": "Bildlager för Skogsvägar i USA" + }, "Waymarked_Trails-Cycling": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMaps bidragsgivare, CC by-SA 3.0" + }, "name": "Waymarked Trails: Cykel" }, "Waymarked_Trails-Hiking": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMaps bidragsgivare, CC by-SA 3.0" + }, "name": "Waymarked Trails: Vandring" }, "Waymarked_Trails-MTB": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMaps bidragsgivare, CC by-SA 3.0" + }, "name": "Waymarked Trails: Mountainbike" }, "Waymarked_Trails-Skating": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMaps bidragsgivare, CC by-SA 3.0" + }, "name": "Waymarked Trails: Inline skating" }, "Waymarked_Trails-Winter_Sports": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMaps bidragsgivare, CC by-SA 3.0" + }, "name": "Waymarked Trails: Vintersport" }, "basemap.at": { @@ -6100,7 +6671,7 @@ "attribution": { "text": "© OpenStreetMaps bidragsgivare, CC-BY-SA" }, - "name": "OpenP-karta (bildlager)" + "name": "OpenPT-karta (bildlager)" }, "osm-gps": { "attribution": { @@ -6135,7 +6706,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Kartplattor av Stamen Design, under CC BY 3.0" + "text": "Kartplattor av Stamen Design, under CC BY 3.0. Data frÃ¥n OpenStreetMap, under ODbL " }, "name": "Stamen terräng" }, @@ -6151,6 +6722,621 @@ }, "name": "Thunderforest landskap" } + }, + "community": { + "cape-coast-youthmappers": { + "name": "University of Cape Coast YouthMappers", + "description": "Följ oss pÃ¥ Twitter: {url}", + "extendedDescription": "Detta är den officiella hÃ¥llpunkten för Youth Mappers chapter pÃ¥ University of Cape Coast, Ghana. Vi älskar kartor, öppen data och att hjälpa de fattiga." + }, + "osm-gh-facebook": { + "name": "OpenStreetMap Ghana pÃ¥ Facebook", + "description": "Facebook-grupp för folk intresserade av OpenStreetMap", + "extendedDescription": "Kartläggare i Ghana-gemenskapen, marknadsför OpenStreetMap projektet Humanitarian OpenStreetMap Team (HOT) i Ghana. GÃ¥ med oss." + }, + "osm-gh-twitter": { + "name": "OpenStreetMap Ghana pÃ¥ Twitter", + "description": "Följ oss pÃ¥ Twitter: {url}" + }, + "talk-gh": { + "name": "E-postlistan Talk-gh", + "description": "Talk-gh är den officiella e-postlistan för OSM-gemenskapen i Ghana" + }, + "osm-mg-facebook": { + "name": "Facebook-grupp för OpenStreetMap Madagaskar", + "description": "Malagasy Facebook-grupp för personer intresserade av OpenStreetMap." + }, + "talk-mg": { + "name": "E-postlistan Talk-mg", + "description": "Plats för bidragsgivare till OpenStreetMap, sammanslutningar och användare i Madagaskar för att dela och diskutera." + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap Bangladesh", + "description": "Förbättra OpenStreetMap i Bangladesh", + "extendedDescription": "Kartlägger i Bangladesh? Har du frÃ¥gor, vill du ansluta till gemenskapen här? Anslut dig pÃ¥ {Url}. Alla är välkomna!" + }, + "OSM-India-facebook": { + "name": "OpenStreetMap Indien - Användarstödd kartläggning av grannskapet", + "description": "Förbättra OpenStreetMap i Indien", + "extendedDescription": "Kartlägger i Indien? Har du frÃ¥gor, vill komma i kontakt med gemenskapen här? GÃ¥ med pÃ¥ {url}. Alla är välkomna!", + "events": { + "sotmasia2018": { + "name": "State of the Map Asia 2018", + "description": "Kom till 2018 Ã¥rs upplaga av OpenStreetMaps regiontäckande evenemang State of the Map Asia i Indien", + "where": "Indiska institutet för förvaltning, Bangalore, Indien" + } + } + }, + "OSM-india-mailinglist": { + "name": "Epostlistan OpenStreetMap Indien", + "description": "Talk-in är den officiella e-postlistan för den indiska gemenskapen" + }, + "OSM-india-twitter": { + "name": "OpenStreetMap Indien Twitter", + "description": "Vi är bara ett tweet iväg: {url}" + }, + "OSM-India-Puducherry-Facebook": { + "name": "Rörelsen för fri mjukvara och hÃ¥rdvara - Facebook", + "description": "Facebook-sidan FSHM för att fÃ¥ veta om evenemang och aktiviteter", + "extendedDescription": "FSHM organiserar evenemang relaterade till gratis mjukvara/hÃ¥rdvara, teknologi, aktivism och OpenStreetMap. Dess Facebook-sida är det bästa vägen att hÃ¥lla kontakten med dess evenemang." + }, + "OSM-India-Puducherry-Matrix": { + "name": "Rörelsen för fri mjukvara och hÃ¥rdvara - Matrix", + "description": "FSHM:s Riot-grupp för att diskutera, dela och uppdatera om kartläggningsaktiviteter och evenemang i och omkring Puducherry", + "extendedDescription": "FSHM:s medlemmar delar sina kartläggningsuppdateringar / -erfarenheter i OSM genom Riot.im-gruppen, denna grupp används även för att diskutera saker relaterade till fri mjukvara / hÃ¥rdvara, teknologi och aktivism." + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap Indonesien", + "description": "Förbättra OpenStreetMap i Indonesien", + "extendedDescription": "Kartlägger i Indonesien? Har du frÃ¥gor, vill du ansluta till gemenskapen här? Anslut dig pÃ¥ {Url}. Alla är välkomna!" + }, + "OSM-japan-facebook": { + "name": "OpenStreetMap Japan Community", + "description": "Kartläggare och OpenStreetMap-användare i Japan" + }, + "OSM-japan-mailinglist": { + "name": "Epostlista för OpenStreetMap Japan", + "description": "Talk-ja är en officiell e-postlista för den japanska gemenskapen" + }, + "OSM-japan-twitter": { + "name": "OpenStreetMap Japan Twitter", + "description": "Hashtag pÃ¥ Twitter: {url}" + }, + "OSM-MY-forum": { + "name": "OpenStreetMap Malaysia Forum", + "description": "Officiellt OpenStreetMap Malaysia-forum" + }, + "OSM-MY-matrix": { + "name": "OpenStreetMap Malaysia Riot-kanal", + "description": "Alla kartläggare är välkomna! Registrera dig pÃ¥ {signupUrl}" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap Mongoliet", + "description": "Förbättra OpenStreetMap i Mongoliet", + "extendedDescription": "Kartlägger i Mongoliet? Har du frÃ¥gor, vill du ansluta till gemenskapen här? Anslut dig pÃ¥ {Url}. Alla är välkomna!" + }, + "OSM-MMR-facebook": { + "name": "OpenStreetMap Burma", + "description": "Förbättra OpenStreetMap i Burma", + "extendedDescription": "Kartlägger i Burma? Har du frÃ¥gor, vill du ansluta till gemenskapen här? Anslut dig pÃ¥ {Url}. Alla är välkomna!" + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap Nepal", + "description": "Förbättra OpenStreetMap i Nepal", + "extendedDescription": "Kartlägger i Nepal? Har du frÃ¥gor, vill du ansluta till gemenskapen här? Anslut dig pÃ¥ {Url}. Alla är välkomna!" + }, + "OSM-PH-facebook": { + "name": "OpenStreetMap PH Facebook", + "description": "Välkommen till OpenStreetMap Filippinerna, där vi uppmuntrar alla filippiner att bidra till OpenStreetMap-projektet." + }, + "OSM-PH-mailinglist": { + "name": "E-postlistan Talk-ph", + "description": "En epostlista för att diskutera OpenStreetMap pÃ¥ Filippinerna" + }, + "OSM-PH-slack": { + "name": "OpenStreetMap PH Slack", + "description": "Alla är välkomna! Registrera dig pÃ¥ {signupUrl}" + }, + "OSM-PH-telegram": { + "name": "OpenStreetMap PH Telegram", + "description": "Inofficiell, lokal gemenskap pÃ¥ Telegram för OpenStreetMaps bidragsgivare och vänner pÃ¥ Filippinerna" + }, + "OSM-RU-forum": { + "name": "OpenStreetMap RU forum", + "description": "OpenStreetMap ryska webbforum" + }, + "OSM-RU-telegram": { + "name": "OpenStreetMap RU telegram", + "description": "OpenStreetMap ryska telegram-chat" + }, + "OSM-LKA-facebook": { + "name": "OpenStreetMap Sri Lanka", + "description": "Förbättra OpenStreetMap i Sri Lanka", + "extendedDescription": "Kartlägger i Sir Lanka? Har du frÃ¥gor, vill du ansluta till gemenskapen här? Anslut dig pÃ¥ {Url}. Alla är välkomna!" + }, + "OSM-TW-facebook": { + "name": "OpenStreetMap Taiwan-gemenskap", + "description": "Facebook-grupp för kartläggare och OpenStreetMap-användare för att diskutera frÃ¥gor rörande Taiwan." + }, + "OSM-TW-mailinglist": { + "name": "OpenStreetMap Taiwan-epostlista", + "description": "Talk-tw är en officiell e-postlista för att diskutera frÃ¥gor som rör Taiwan" + }, + "at-forum": { + "name": "OpenStreetMap Österrike Forum", + "description": "Det officiella forumet för OpenStreetMap-frÃ¥gor i och runt Österrike" + }, + "at-mailinglist": { + "name": "E-postlistan Talk-at", + "description": "Talk-at är den officiella e-postlistan för den österrikiska OSM-gemenskapen" + }, + "at-twitter": { + "name": "OpenStreetMap Österrike Twitter", + "description": "OpenStreetMap Österrike pÃ¥ Twitter: {url}" + }, + "osmgraz-meetup": { + "name": "OSM-gemenskapsträffar i Graz", + "description": "Träffar en gÃ¥ng i mÃ¥naden för OpenStreetMap-gemenskapen i Graz" + }, + "osmgraz-twitter": { + "name": "OSM-gemenskapen i Graz pÃ¥ Twitter", + "description": "OpenStreetMap-gemenskapen i Graz pÃ¥ Twitter" + }, + "osm-at": { + "name": "OpenStreetMap Österrike", + "description": "Plattformen för information om OpenStreetMap i Österrike" + }, + "be-facebook": { + "name": "OpenStreetMap BE-gemenskap", + "description": "Kartläggar- och OpenStreetMap-facebook i Belgien" + }, + "be-forum": { + "name": "OpenStreetMap BE forum", + "description": "OpenStreetMap belgiska webbforum" + }, + "be-mailinglist": { + "name": "E-postlistan Talk-be", + "description": "Talk-be är den officiella e-postlistan för den belgiska OSM-gemenskapen" + }, + "be-matrix": { + "name": "OpenStreetMap BE Riot-kanal", + "description": "Alla kartläggare är välkomna! Registrera dig pÃ¥ {signupUrl}", + "extendedDescription": "Flera kanaler existerar, för nybörjare till heta kanaler, landanvändning och utvecklingsdiskussioner" + }, + "be-meetup": { + "name": "OpenStreetMap Belgien Meetup", + "description": "IRL-träffar för alla som är intresserade av OpenStreetMap.", + "extendedDescription": "Fysiska träffar är ett bra sätt att träffa andra kartläggare, ställa frÃ¥gor till dem och lära dig jättemycket. Speciellt nya bidragsgivare är varmt välkomna!" + }, + "be-twitter": { + "name": "OpenStreetMap Belgium Twitter", + "description": "OSM Belgien pÃ¥ Twitter: {url}" + }, + "byosm": { + "name": "OpenStreetMap Vitryssland", + "description": "OpenStreetMap Vitrysslands telegram-chatt" + }, + "talk-cz-mailinglist": { + "name": "E-postlistan Talk-cz", + "description": "Talk-cz är den officiella e-postlistan för den tjeckiska gemenskapen" + }, + "de-berlin-mailinglist": { + "name": "Berlins e-postlista", + "description": "Detta är e-postlistan för Berlins OSM-gemenskap" + }, + "de-berlin-meetup": { + "description": "Kartläggare och OpenStreetMap-användare runt Berlin" + }, + "de-berlin-telegram": { + "name": "@osmberlin pÃ¥ Telegram", + "description": "OpenStreetMap Berlin Telegram-chat" + }, + "de-berlin-twitter": { + "name": "OpenStreetMap Berlin Twitter", + "description": "Följ oss pÃ¥ Twitter: {url}" + }, + "de-forum": { + "name": "OpenStreetMap DE forum", + "description": "OpenStreetMap tyska webbforum" + }, + "de-irc": { + "name": "OpenStreetMap Tyskland IRC", + "description": "Anslut #osm-de pÃ¥ irc.oftc.net (port 6667)" + }, + "de-mailinglist": { + "name": "E-postlistan Talk-de", + "description": "Talk-de är den officiella e-postlistan för den tyska OSM-gemenskapen" + }, + "osm-de": { + "name": "OpenStreetMap Tyskland", + "description": "Plattformen för information om OpenStreetMap i Tyskland" + }, + "OSM-ES-mailinglist": { + "name": "E-postlistan Talk-es", + "description": "En e-postlista för att diskutera OpenStreetMap i Spanien" + }, + "OSM-ES-telegram": { + "name": "@OSMes pÃ¥ Telegram", + "description": "OpenStreetMap spanska Telegram-chat" + }, + "fr-facebook": { + "name": "OpenStreetMap Frankrikes Facebook-sida", + "description": "OpenStreetMap Frankrikes Facebook-sida" + }, + "fr-forum": { + "name": "OpenStreetMap Frankrike webbforum", + "description": "OpenStreetMap Frankrike webbforum" + }, + "fr-irc": { + "name": "OpenStreetMap Frankrike pÃ¥ IRC", + "description": "Anslut #osm-fr pÃ¥ irc.oftc.net (port 6667)" + }, + "fr-mailinglist": { + "name": "E-postlistan Talk-fr", + "description": "E-postlistan Talk-fr" + }, + "fr-twitter": { + "name": "OpenStreetMap Frankrike pÃ¥ Twitter", + "description": "OpenStreetMap Frankrike pÃ¥ Twitter: {url}" + }, + "gb-mailinglist": { + "name": "E-postlistan Talk-gb" + }, + "gb-irc": { + "name": "OpenStreetMap Storbritannien IRC", + "description": "Anslut #osm-gb pÃ¥ irc.oftc.net (port 6667)" + }, + "it-facebook": { + "name": "OpenStreetMap Italien Facebook" + }, + "it-irc": { + "name": "OpenStreetMap Italien IRC", + "description": "Anslut #osm-it pÃ¥ irc.oftc.net (port 6667)" + }, + "it-mailinglist": { + "name": "E-postlistan Talk-it" + }, + "it-twitter": { + "name": "OpenStreetMap Italien Twitter", + "description": "Följ oss pÃ¥ Twitter pÃ¥ {url}" + }, + "OSM-Rome-meetup": { + "name": "Incontro Mappatori Romani", + "description": "Förbättra OpenStreetMap kring Rom", + "extendedDescription": "Vi siktar pÃ¥ att vara en resurs för människor att diskutera och dela kunskaper om hur man använder fri geografiska datasamlingar, speciellt OpenStreetMap, och öppen geo-mjukvara som hanterar, redigerar och visar geografiska data och föresprÃ¥kar för dess användning i Lazio." + }, + "talk-it-lazio": { + "name": "OpenStreetMap IT Lazio", + "description": "Alla är välkomna! Registrera dig pÃ¥ {signupUrl}", + "extendedDescription": "E-postlista för omrÃ¥det kring Rom och Lazio." + }, + "no-forum": { + "name": "OpenStreetMap Norge webbforum", + "description": "OpenStreetMap Norge webbforum" + }, + "no-irc": { + "name": "OpenStreetMap Norge pÃ¥ IRC", + "description": "Chattrum för kartläggare och OpenStreetMap-användare, utvecklare och entusiaster i Norge" + }, + "no-mailinglist": { + "name": "E-postlista OpenStreetMap Norge", + "description": "E-postlista för kartläggare och OpenStreetMap-användare, utvecklare och entusiaster i Norge" + }, + "OSM-PL-facebook-group": { + "name": "OpenStreetMap Polens Facebook-grupp", + "description": "Grupp för kartläggare och användare av OpenStreetMap i Polen" + }, + "OSM-PL-forum": { + "name": "OpenStreetMap Polen Forum", + "description": "Forum för den polska OpenStreetMap-gemenskapen" + }, + "osm-se": { + "name": "OpenStreetMap.se", + "description": "TillhandahÃ¥ller OSM-tjänster och information för den svenska gemenskapen" + }, + "se-facebook": { + "name": "OpenStreetMap Sverige Facebook", + "description": "OpenStreetMap Sverige pÃ¥ Facebook" + }, + "se-forum": { + "name": "OpenStreetMap Sverige webbforum", + "description": "OpenStreetMap Sverige webbforum" + }, + "se-irc": { + "name": "OpenStreetMap Sverige IRC", + "description": "Anslut #osm.se pÃ¥ irc.oftc.net (port 6667)" + }, + "se-mailinglist": { + "name": "E-postlistan Talk-se", + "description": "En e-postlista för att diskutera OpenStreetMap i Sverige" + }, + "se-twitter": { + "name": "OpenStreetMap Sverige pÃ¥ Twitter", + "description": "Följ oss pÃ¥ Twitter: {url}" + }, + "OSM-CA-Slack": { + "name": "OSM-CA Slack", + "description": "Alla är välkomna! Registrera dig pÃ¥ {signupUrl}." + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap Vancouver", + "description": "Kartläggare och OpenStreetMap-användare i Vancouver, BC-omrÃ¥det" + }, + "Bay-Area-OpenStreetMappers": { + "name": "Bay Area OpenStreetMappers", + "description": "Förbättra OpenStreetMap i San Francisco Bay Area", + "extendedDescription": "Den här gruppen handlar om att odla OpenStreetMap-gemenskapen här i San Francisco Bay Area. VÃ¥ra evenemang är öppna för alla, frÃ¥n open source-entusiaster, cyklister, GIS-proffs, geocachare m.m. Precis alla som är intresserade av kartor, kartläggning och gratis kartdata är välkomna att delta i vÃ¥r grupp samt delta i vÃ¥ra evenemang." + }, + "Central-Pennsylvania-OSM": { + "name": "Central Pennsylvania OSM", + "description": "Online-kartläggningsgemenskap baserat pÃ¥ State College, PA" + }, + "Code-for-San-Jose-Slack": { + "name": "Kod för San Jose Slack", + "description": "Alla är välkomna! Registrera dig pÃ¥ {signupUrl} och anslut sedan till #osm-kanalen." + }, + "Dallas-Fort-Worth-OSM": { + "name": "Dallas-Fort Worth OSM", + "description": "OpenStreetMap-användargruppen för Dallas-Fort Worth", + "extendedDescription": "Dallas, Fort Worth och alla städer däremellan är överfulla med kreativa och tekniskt kunniga människor. Visionen för den här användargruppen är att hitta nya sätt att använda OSM:s fantastiska resurser." + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "Meetup för kart-entusiaster kring Philadelphia", + "extendedDescription": "GeoPhilly förenar utvecklare, geografer, data-nördar, open source-entusiaster, civila hackare och kartmissbrukare i vÃ¥r gemensamma kärlek för kartor och vad de berättar för oss. Om du använder kartor som en del av ditt arbete eller bara vill lära dig mer, är det här samlingspunkten för dig! VÃ¥ra aktiviteter syftar till att vara öppna, vänliga, pedagogiska och sociala och spänna allt frÃ¥n roliga stunder till korta föreläsningar eller till och med workshops. Kom och skapa en varierad, inspirerande geo-gemenskap i Philadelphia med oss!" + }, + "MapMinnesota": { + "name": "MapMinnesota", + "description": "Kartläggare och OpenStreetMap-användare kring Minneapolis–Saint Paul", + "extendedDescription": "Kartläggare och OpenStreetMap-användare kring Minneapolis–Saint Paul" + }, + "Mapping-DC-meetup": { + "name": "Kartlägg Washington, D.C.", + "description": "Förbättra OpenStreetMap kring Washington, D.C.", + "extendedDescription": "Vi är en grupp volontär-kartläggare med syfte att förbättra OpenStreetMap kring Washington, D.C. Vi strävar även efter att lära andra om ekosystemet i OSM, dataanalys, kartografi och GIS. Vi samlas varannan mÃ¥nad för att fokusera pÃ¥ ett omrÃ¥de i vÃ¥r stad." + }, + "Maptime-ME-meetup": { + "name": "MaptimeME", + "description": "Kartläggare och OpenStreetMap-användare runt Portland, Maine", + "extendedDescription": "Maptime ger, ganska bokstavligen, tid för kartläggning. VÃ¥rt uppdrag är att öppna dörrarna för kartografiska möjligheter för alla som är intresserade av att skapa tid och utrymme för samarbete, utforskning och kartskapande med hjälp av kartläggningsverktyg och -teknik." + }, + "OpenCleveland-meetup": { + "name": "Open Cleveland", + "description": "Förbättra OpenStreetMap kring Cleveland", + "extendedDescription": "Open Geo Cleveland syftar till att vara en resurs för människor att diskutera och dela kunskaper om hur man använder fri geografiska datasamlingar, speciellt OpenStreetMap, och öppen geo-mjukvara som hanterar, redigerar och visar geografiska data och föresprÃ¥kar för dess användning i nordöstra Ohio. Vi är ocksÃ¥ en maptime-filial =)" + }, + "OSM-Boston": { + "name": "OpenStreetMap Boston", + "description": "Kartläggare och OpenStreetMap-användare runt Boston", + "extendedDescription": "OpenStreetMap är en fria och öppna, wiki-liknande världskarta med hundratusentals bidrag varje dag frÃ¥n människor precis som du. Redigering av kartan är enkelt och roligt! Följ med oss bÃ¥de inomhus och utomhus i vÃ¥rt försök att skapa den bästa kartan över Boston-omrÃ¥det och resten av världen!" + }, + "OSM-Central-Salish-Sea": { + "name": "OpenStreetMap Central Salish Sea", + "description": "Kartläggare och OpenStreetMap-användare runt Mount Vernon, Washington", + "extendedDescription": "OpenStreetMap är en världskarta skapad av människor precis som du. Det är en karta du bygger och ger bort gratis, precis som Wikipedia. Ta en titt pÃ¥ osm.org för mer information. Vi träffas hela tiden för att prata om kartor, skapar kartor och har kul!" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "OpenStreetMap-användargruppen för Chattanooga, Tennessee" + }, + "OSM-Colorado": { + "name": "OpenStreetMap Colorado", + "description": "Kartläggare och OpenStreetMap-användare i staten Colorado, USA", + "extendedDescription": "OpenStreetMap (OSM) Colorado är en lokal gemenskap med personer som är intresserade av att bidra till att skapa gratiskartor. Vi uppmuntrar alla vÃ¥ra kartläggare att organisera eller föreslÃ¥ kartläggningsevenemang i hela staten. Meetup-aktiviteter kan vara enkla sociala träffar, enkla eller avancerade utbildningar kring OSM eller gemensamma kartläggningsatsningar." + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC", + "description": "Kartläggare och OpenStreetMap-användare, utvecklare och entusiaster runt storstadsregionen New Yorks." + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland", + "description": "Kartläggare och OpenStreetMap-användare runt Portland", + "extendedDescription": "OpenStreetMap (OSM) är en världskarta skapad av människor precis som du. Det är en karta du bygger och ger bort gratis, precis som Wikipedia. Ta en titt pÃ¥ osm.org för mer information, och kom med pÃ¥ ett meetup för att prata om kartor, bidra till OSM och ha kul!" + }, + "OSM-Seattle": { + "name": "OpenStreetMap Seattle", + "description": "Kartläggare och OpenStreetMap-användare runt Seattle" + }, + "OSM-SoCal": { + "name": "OpenStreetMap södra Kalifornien", + "description": "LÃ¥t oss ha lite kul, bidra med nÃ¥got till Los Angeles och lär dig om kartläggning!", + "extendedDescription": "OpenStreetMap (SOM) Södra Kalifornien är för alla intresserade av kartläggning för att komma tillsammans för att arbeta med OpenStreetMap. OpenStreetMap, Wikipedia för kartor, är en gratis open source-karta över hela världen som skapats av mer än 1 000 000 volontärer runt hela världen. Alla är välkomna. Om du inte känner till OpenStreetMap lär vi dig. Om du har en idé kring ett kartläggningsprojekt, eller en t.o.m. en studieresa som en grupp människor kan göra, har du fullt stöd frÃ¥n oss!" + }, + "OSM-South-Bay": { + "name": "OSM South Bay", + "description": "Kartkvällar arrangerade av Code for San Jose", + "extendedDescription": "Code for San Jose, den lokala Code for America-brigaden, arrangerar en gÃ¥ng i mÃ¥naden kart-kvällar pÃ¥ en torsdag kväll i centrala San José. Träffa andra kartläggare frÃ¥n South Bay, hjälp till i kartläggningsprojekt och hör om andra medborgarorienterade teknikprojekt. Programmerings- och GIS-kunskap är inget krav." + }, + "OSM-Tampa-Bay": { + "name": "OpenStreetMap Tampa Bay", + "description": "Kartläggare och OpenStreetMap-användare runt Tampa Bay", + "extendedDescription": "Gruppen OSM Tampa Bay är till för att lokalinvÃ¥nare ska förenas och bygga upp den optimala kartan över Tampa Bay med OpenStreetMap, den fria och redigerbara kartan över världen. Om du gillar kartor, data, open source, GPS, vandring, cykling, etc., kommer du att älska att arbeta med OpenStreetMap\n-- sÃ¥ gÃ¥ med! Vi kommer samman, kartlägger och pratar om nya ämnen ungefär en gÃ¥ng i mÃ¥naden." + }, + "OSM-US-Slack": { + "name": "OpenStreetMap US Slack", + "description": "Alla är välkomna! Registrera dig pÃ¥ {signupUrl}" + }, + "OSM-US": { + "name": "OpenStreetMap US", + "description": "Vi hjälper till att utöka och förbättra OpenStreetMap i USA.", + "extendedDescription": "Vi stöder OpenStreetMap genom att ha Ã¥rliga konferencier, tillhandahÃ¥ller resurser för gemenskapen, bygger nätverk och genom att sprida ordet. GÃ¥ med i OpenStreetMap USA här: {signupUrl}" + }, + "OSM-Utah": { + "name": "OpenStreetMap Utah", + "description": "Kartläggare och OpenStreetMap-användare runt Salt Lake City", + "extendedDescription": "Aktiviteter kan vara saker sÃ¥ som workshops där man lär sig att kartlägga, kartläggningsfester och datainsamling utomhus. Aktiviteterna kommer äga rum kring Salt Lake City, Ã¥tminstone initialt. Vi söker bÃ¥de efter erfarna kartläggare och nybörjare. GÃ¥ med och lÃ¥t oss göra lite kartläggning!" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap Wyoming", + "description": "Kartläggare och OpenStreetMap-användare i staten Wyoming", + "extendedDescription": "OpenStreetMap (OSM) Wyoming är en lokal gemenskap med personer som är intresserade av att bidra till att skapa gratiskartor. Vi uppmuntrar alla vÃ¥ra kartläggare att organisera eller föreslÃ¥ kartläggningsevenemang i hela staten. Meetup-aktiviteter kan vara enkla sociala träffar, enkla eller avancerade utbildningar kring OSM eller gemensamma kartläggningsatsningar." + }, + "PHXGeo-meetup": { + "name": "PHXGeo Meetup", + "description": "Kartläggare och OpenStreetMap-användare kring Phoenix, Arizona", + "extendedDescription": "Detta är en meetup-grupp för de kring Phoenix som gillar kartläggning, GIS, OpenStreetMap, kartografi och allt däremellan. " + }, + "PHXGeo-twitter": { + "name": "PHXGeo Twitter", + "description": "Följ oss pÃ¥ Twitter pÃ¥ {url}" + }, + "Western-Slope-facebook": { + "name": "OSM-Facebook för Western Slope ", + "description": "Kartläggare och OpenStreetMap-användare runt Grand Junction, Colorado" + }, + "Western-Slope-meetup": { + "name": "Western Slope (Colorado) OSM-Meetup", + "description": "Kartläggare och OpenStreetMap-användare kring Grand Junction, Colorado", + "extendedDescription": "MÃ¥let med denna grupp är att introducera OpenStreetMap för allmänheten, utveckla en gemenskap av kartläggare, skapa den bästa möjliga geodatan med alla till buds stÃ¥ende medel och därefter fÃ¥ ut denna data i samhället. Föreställ dig korrekta vägskyltar! Föreställ dig ytterligare förbättring av cykelvägar! Föreställ dig precis vad som helst, det är det som är glädjen med OpenStreetMap!" + }, + "Maptime-Australia-Slack": { + "name": "Maptime Australien Slack", + "description": "Registrera dig pÃ¥ {signupUrl}" + }, + "talk-au": { + "name": "E-postlistan Talk-au", + "description": "Plats där australienska användare kan chatta" + }, + "OSM-AR-facebook": { + "name": "OpenStreetMap Argentina Facebook", + "description": "Anslut till gemenskapen pÃ¥ OpenStreetMap Argentina via Facebook", + "extendedDescription": "Nyheter frÃ¥n den lokala gemenskapen" + }, + "OSM-AR-forum": { + "name": "OpenStreetMap Argentinska webbforum", + "description": "Anslut till OpenStreetMap argentinska webbforum", + "extendedDescription": "Ideal för lÃ¥nga eller viktiga diskussioner. LÃ¥ng svarstid." + }, + "OSM-AR-irc": { + "name": "OpenStreetMap Argentina IRC", + "description": "Anslut #osm-ar pÃ¥ irc.oftc.net (port 6667)", + "extendedDescription": "Du kan stöta pÃ¥ den mest nördiga användaren i gemenskapen." + }, + "OSM-AR-mailinglist": { + "name": "E-postlistan Talk-ar", + "description": "Historisk e-postlista. Knappt använd idag." + }, + "OSM-AR-telegram": { + "name": "OpenStreetMap Argentina Telegram", + "description": "Anslut till gemenskapen pÃ¥ OpenStreetMap Argentina via Telegram", + "extendedDescription": "Den mest aktiva kanalen i gemenskapen, ideal för att chatta och fÃ¥ svar pÃ¥ dina frÃ¥gor snabbt. Alla är välkomna!" + }, + "OSM-AR-twitter": { + "name": "OpenStreetMap Argentina Twitter", + "description": "Följ oss pÃ¥ Twitter pÃ¥ {url}", + "extendedDescription": "Nyheter frÃ¥n den lokala gemenskapen och OpenStreetMap i allmänhet." + }, + "OSM-BO-mailinglist": { + "name": "E-postlistan Talk-bo" + }, + "Bahia-telegram": { + "name": "OpenStreetMap Bahia Telegram-grupp", + "description": "Anslut till gemenskapen pÃ¥ OpenStreetMap Bahia via Telegram", + "extendedDescription": "Anslut till gemenskapen för att lära dig mer om OpenStreetMap, ställa frÃ¥gor eller delta pÃ¥ vÃ¥ra möten. Alla är välkomna!" + }, + "OSM-br-mailinglist": { + "name": "E-postlistan Talk-br", + "description": "En e-postlista för att diskutera OpenStreetMap i Brasilien" + }, + "OSM-br-telegram": { + "name": "OpenStreetMap Brasilien Telegram", + "description": "Anslut till gemenskapen pÃ¥ OpenStreetMap Brasilien via Telegram", + "extendedDescription": "Anslut till gemenskapen för att lära dig mer om OpenStreetMap, ställa frÃ¥gor eller delta pÃ¥ vÃ¥ra möten. Alla är välkomna!" + }, + "OSM-br-twitter": { + "name": "OpenStreetMap Brasilien Twitter", + "description": "Följ oss pÃ¥ Twitter pÃ¥ {url}" + }, + "OSM-CL-facebook": { + "name": "OpenStreetMap Chile Facebook", + "description": "Anslut till gemenskapen i OpenStreetMap Child via Facebook", + "extendedDescription": "Anslut till gemenskapen för att lära dig mer om OpenStreetMap, ställa frÃ¥gor eller delta pÃ¥ vÃ¥ra möten. Alla är välkomna!" + }, + "OSM-CL-mailinglist": { + "name": "E-postlista Talk-cl", + "description": "En e-postlista för att diskutera OpenStreetMap i Chile" + }, + "OSM-CL-telegram": { + "name": "OpenStreetMap Chile Telegram", + "description": "Anslut till gemenskapen i OpenStreetMap Child via Telegram", + "extendedDescription": "Anslut till gemenskapen för att lära dig mer om OpenStreetMap, ställa frÃ¥gor eller delta pÃ¥ vÃ¥ra möten. Alla är välkomna!" + }, + "OSM-CL-twitter": { + "name": "OpenStreetMap Chile Twitter", + "description": "Följ oss pÃ¥ Twitter pÃ¥ {url}" + }, + "Maptime-Bogota": { + "name": "Maptime Bogotá", + "description": "Vi är en grupp av kartläggare intresserade av OpenStreetMap kring Bogotá.", + "extendedDescription": "Lär dig att samla in data pÃ¥ fältet och digitalisera det i OpenStreetMap. Det finns inga krav pÃ¥ förkunskaper! Du behöver bara lusten att delta, lära dig och ha kul." + }, + "OSM-CO-facebook": { + "name": "OpenStreetMap Colombia Facebook", + "description": "Anslut till gemenskapen i OpenStreetMap Columbia via Facebook", + "extendedDescription": "Anslut till gemenskapen för att lära dig mer om OpenStreetMap. Alla är välkomna!" + }, + "OSM-CO-mailinglist": { + "name": "E-postlistan Talk-co", + "description": "En e-postlista för att diskutera OpenStreetMap i Colombia" + }, + "OSM-CO-twitter": { + "name": "OpenStreetMap Colombia Twitter", + "description": "Följ oss pÃ¥ Twitter pÃ¥ {url}" + }, + "OSM-CO": { + "name": "OpenStreetMap Colombia", + "description": "Nyheter om OpenStreetMap Colombia-gemenskapen och OSMCo Foundation" + }, + "OSM-PE-facebook": { + "name": "OpenStreetMap Peru Facebook", + "description": "Anslut till gemenskapen i OpenStreetMap Peru via Facebook" + }, + "OSM-PE-mailinglist": { + "name": "E-postlistan Talk-pe", + "description": "Den officiella e-postlistan för OpenStreetMap Peru-gemenskapen" + }, + "OSM-PE-matrix": { + "name": "OpenStreetMap Peru Matrix-chat", + "description": "Chatta med andra medlemmar i OpenStreetMap Peru-gemenskapen via Matrix." + }, + "OSM-PE-telegram": { + "name": "OpenStreetMap Peru Telegram", + "description": "Anslut till gemenskapen i OpenStreetMap Peru via Telegram" + }, + "OSM-PE-twitter": { + "name": "OpenStreetMap Peru Twitter", + "description": "Följ oss pÃ¥ Twitter pÃ¥ {url}" + }, + "OSM-PE": { + "name": "OpenStreetMap Peru", + "description": "Nyheter och resurser för OpenStreetMap Peru-gemenskapen" + }, + "OSM-Facebook": { + "name": "OpenStreetMap pÃ¥ Facebook", + "description": "Gilla oss pÃ¥ Facebook för nyheter och uppdateringar om OpenStreetMap" + }, + "OSM-help": { + "name": "OpenStreetMap-hjälp", + "description": "Ställ en frÃ¥ga och fÃ¥ svar pÃ¥ OSM:s användardrivna frÃ¥gor och svar-sida.", + "extendedDescription": "{url} är för alla som behöver hjälp med OpenStreetMap. Oavsett om du är en nybörjarkartläggare eller har tekniska frÃ¥gor, är vi här för att hjälpa dig!" + }, + "OSM-Reddit": { + "name": "OpenStreetMap pÃ¥ Reddit", + "description": "/r/openstreetmap/ är ett bra ställe att lära sig mer om OpenStreetMap. FrÃ¥ga om vad som helst!" + }, + "OSM-Twitter": { + "name": "OpenStreetMap Twitter", + "description": "Följ oss pÃ¥ Twitter pÃ¥ {url}" + }, + "OSMF": { + "name": "OpenStreetMap Foundation", + "events": { + "sotm2018": { + "name": "State of the Map 2018", + "where": "Milan, Italien" + } + } + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/ta.json b/vendor/assets/iD/iD/locales/ta.json index fd21159b4..5926c3a45 100644 --- a/vendor/assets/iD/iD/locales/ta.json +++ b/vendor/assets/iD/iD/locales/ta.json @@ -209,10 +209,6 @@ } }, "success": { - "view_on_osm": "OSM இல் பார்", - "facebook": "Facebook இல் பகிர்ந்து கொள்ள", - "twitter": "Twitter இல் பகிர்ந்து கொள்ள", - "google": "Google+ இல் பகிர்ந்து கொள்ள", "help_link_text": "விவரங்கள்" }, "confirm": { diff --git a/vendor/assets/iD/iD/locales/te.json b/vendor/assets/iD/iD/locales/te.json index 39729472c..0c095efc8 100644 --- a/vendor/assets/iD/iD/locales/te.json +++ b/vendor/assets/iD/iD/locales/te.json @@ -326,10 +326,6 @@ }, "success": { "just_edited": "మీరు ఇప్పుడే OpenStreetMapను మార్చారు", - "view_on_osm": "OSM/ఓఎస్ఎం లో వీక్షించు", - "facebook": "ఫేస్‌బుక్‌లో పంచుకోండి", - "twitter": "ట్విట్టర్లో పంచుకోండి", - "google": "గూగుల్+లో పంచుకోండి", "help_link_text": "వివరాలు" }, "confirm": { diff --git a/vendor/assets/iD/iD/locales/tl.json b/vendor/assets/iD/iD/locales/tl.json index 3210ccac7..490f45d59 100644 --- a/vendor/assets/iD/iD/locales/tl.json +++ b/vendor/assets/iD/iD/locales/tl.json @@ -1,5 +1,8 @@ { "tl": { + "icons": { + "remove": "tanggalin" + }, "modes": { "add_area": { "title": "Poligon", @@ -38,11 +41,11 @@ "start": { "annotation": { "line": "Nagsimula ng isang linya.", - "area": "Nagsimula sa isang area o polygon." + "area": "Nagsimula ng isang area o polygon." } }, "continue": { - "key": "a", + "key": "A", "title": "Ipagpatuloy", "description": "Ipagpatuloy ang linyang ito.", "not_eligible": "Walang linyang maaring ipagpatuloy dito.", @@ -264,6 +267,14 @@ } } }, + "restriction": { + "controls": { + "distance": "Distansya" + }, + "help": { + "from": "GALING" + } + }, "undo": { "tooltip": "I-undo:{action}", "nothing": "Walang ma-undo" @@ -313,6 +324,24 @@ "list": "Edits nina {users}", "truncated_list": "Edits nina {users} at {count} iba pa" }, + "info_panels": { + "key": "I", + "background": { + "key": "B", + "source": "Pinagmulan", + "description": "Paglalarawan" + }, + "history": { + "key": "H", + "title": "Bersyon" + }, + "location": { + "title": "Lokasyon" + }, + "measurement": { + "location": "Lokasyon" + } + }, "geometry": { "point": "tuldok", "vertex": "tuluktok", @@ -451,12 +480,7 @@ } }, "success": { - "edited_osm": "Nag-edit sa OSM!", "just_edited": "Nag-edit ka sa OpenStreetMap!", - "view_on_osm": "Tingnan sa OSM", - "facebook": "I-share sa Facebook", - "twitter": "I-share sa Twitter", - "google": "I-share sa Google+", "help_link_text": "Mga detalye", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -698,6 +722,15 @@ "amenity": { "label": "Uri" }, + "animal_boarding": { + "label": "Para sa hayop" + }, + "animal_breeding": { + "label": "Para sa hayop" + }, + "animal_shelter": { + "label": "Para sa hayop" + }, "area/highway": { "label": "Uri" }, @@ -754,12 +787,18 @@ "board_type": { "label": "uri" }, + "boules": { + "label": "Uri" + }, "boundary": { "label": "Uri" }, "brand": { "label": "tatak" }, + "bridge": { + "label": "Uri" + }, "building": { "label": "Gusali" }, @@ -769,6 +808,10 @@ "bunker_type": { "label": "uri" }, + "cables": { + "label": "Mga kable", + "placeholder": "1, 2, 3..." + }, "camera/direction": { "label": "Direksyon (Paikot sa kanan)", "placeholder": "45, 90, 180, 270" @@ -791,9 +834,18 @@ "castle_type": { "label": "uri" }, + "clothes": { + "label": "Mga damit" + }, + "club": { + "label": "Uri" + }, "collection_times": { "label": "Mga oras ng koleksyon" }, + "communication_multi": { + "label": "Mga uri ng komunikasyon" + }, "construction": { "label": "Uri" }, @@ -801,6 +853,9 @@ "label": "URL ng webcam", "placeholder": "http://example.com/" }, + "content": { + "label": "Nilalaman" + }, "country": { "label": "bansa" }, @@ -816,6 +871,9 @@ "currency_multi": { "label": "Uri ng pera" }, + "cutting": { + "label": "Uri" + }, "cycle_network": { "label": "Network" }, @@ -861,12 +919,56 @@ "denotation": { "label": "denotasyon" }, + "description": { + "label": "Paglalarawan" + }, + "devices": { + "label": "Mga aparato", + "placeholder": "1, 2, 3..." + }, + "direction": { + "label": "Direksyon (Degrees Clockwise)", + "placeholder": "45, 90, 180, 270" + }, + "direction_cardinal": { + "label": "Direksyon", + "options": { + "E": "Silangan", + "ENE": "Silangan-Hilagang-silangan", + "ESE": "Silangan-Timog-silangan", + "N": "Hilaga", + "NE": "Hilagang-silangan", + "NNE": "Hilaga-Hiligang-silangan", + "NNW": "Hilaga-Hilagang-kanluran", + "NW": "Hilagang-kanluran", + "S": "Timog", + "SE": "Timog-silangan", + "SSE": "Timog-Timog-silangan", + "SSW": "Timog-Timog-kanluran", + "SW": "Timog-kanluran", + "W": "Kanluran", + "WNW": "Kanluran-Hilagang-kanluran", + "WSW": "Kanluran-Timog-kanluran" + } + }, + "direction_clock": { + "label": "Direksyon" + }, + "direction_vertex": { + "label": "Direksyon", + "options": { + "both": "Pareho / Lahat" + } + }, "display": { "label": "Ipakita" }, "dock": { "label": "uri" }, + "duration": { + "placeholder": "00:00" + }, "electrified": { "options": { "no": "Hindi", @@ -876,6 +978,9 @@ "email": { "placeholder": "example@example.com" }, + "emergency": { + "label": "Kagipitan" + }, "entrance": { "label": "Uri" }, @@ -896,28 +1001,86 @@ } }, "fire_hydrant/type": { + "label": "Uri", + "options": { + "wall": "Pader" + } + }, + "fixme": { + "label": "Ayusin Mo Ako" + }, + "ford": { "label": "Uri" }, + "gender": { + "label": "Kasarian", + "options": { + "female": "Babae", + "male": "Lalaki" + }, + "placeholder": "Hindi alam" + }, + "generator/method": { + "label": "Paraan" + }, + "generator/source": { + "label": "Pinagmulan" + }, "generator/type": { "label": "Uri" }, + "government": { + "label": "Uri" + }, + "hashtags": { + "placeholder": "#halimbawa" + }, + "healthcare": { + "label": "Uri" + }, "highway": { "label": "Uri" }, "historic": { "label": "Uri" }, + "hoops": { + "placeholder": "1, 2, 4..." + }, + "iata": { + "label": "IATA" + }, + "icao": { + "label": "ICAO" + }, + "incline_steps": { + "options": { + "down": "Baba", + "up": "Taas" + } + }, + "industrial": { + "label": "Uri" + }, "information": { "label": "Uri" }, "internet_access": { "options": { - "wlan": "Wifi" + "no": "Hindi", + "wlan": "Wifi", + "yes": "Oo" } }, "landuse": { "label": "Uri" }, + "lanes": { + "placeholder": "1, 2, 3..." + }, + "layer": { + "placeholder": "0" + }, "leisure": { "label": "Uri" }, diff --git a/vendor/assets/iD/iD/locales/tr.json b/vendor/assets/iD/iD/locales/tr.json index 4dbdb85c9..0fb052621 100644 --- a/vendor/assets/iD/iD/locales/tr.json +++ b/vendor/assets/iD/iD/locales/tr.json @@ -601,13 +601,7 @@ } }, "success": { - "edited_osm": "OSM güncellendi!", "just_edited": "OpenStreetMap'te bir değişiklik yaptın!", - "view_on_osm": "OSM'de gör", - "facebook": "Facebook'ta Paylaş", - "twitter": "Twitter'da Paylaş", - "google": "Google+'ta Paylaş", - "help_html": "Yaptığın değişiklikleri \"Standard\" harita katmanında birkaç dakika içerinde görebilirsin. Diğer katmanlar ve nesnelerin güncellenmesi biraz zaman alabilir.", "help_link_text": "Detaylar", "help_link_url": "Yaptığın değişiklikleri nasıl görebileceğine dair detaylı bilgiyi şu adreste bulabilirsin - Ä°ngilizce: https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -2413,9 +2407,6 @@ "label": "Tür", "placeholder": "Varsayılan" }, - "vending": { - "label": "Ürün Çeşidi" - }, "visibility": { "label": "Görüş", "options": { @@ -5705,18 +5696,6 @@ "name": "U-dönüşü Yasak", "terms": "U-dönüşü Yasak" }, - "type/restriction/only_left_turn": { - "name": "Sola Dönüş Zorunlu", - "terms": "Sola Dönüş Zorunlu" - }, - "type/restriction/only_right_turn": { - "name": "Sağa Dönüş Zorunlu", - "terms": "Sağa Dönüş Zorunlu" - }, - "type/restriction/only_straight_on": { - "name": "Dönüş Yasak", - "terms": "Dönüş Yasak" - }, "type/route": { "name": "Güzergah", "terms": "Güzergah, Rota" @@ -5866,7 +5845,6 @@ "attribution": { "text": "Şartlar ve Geri Bildirim" }, - "description": "Görüntü sınırları ve çekilme tarihleri. Etiketler yakınlaştırma düzeyi 14 veya daha üstünde gösterilir.", "name": "DigitalGlobe Özel Görüntü Dönemi Ürünü" }, "DigitalGlobe-Standard": { @@ -5880,7 +5858,6 @@ "attribution": { "text": "Şartlar ve Geri Bildirim" }, - "description": "Görüntü sınırları ve çekilme tarihleri. Etiketler yakınlaştırma düzeyi 14 veya daha üstünde gösterilir.", "name": "DigitalGlobe Standard Görüntü Dönemi Ürünü" }, "EsriWorldImagery": { @@ -5996,7 +5973,6 @@ "attribution": { "text": "basemap.at" }, - "description": "Hükümet verilerinden oluşturulmuş Avusturya haritası", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6057,9 +6033,6 @@ "name": "skobbler" }, "stamen-terrain-background": { - "attribution": { - "text": "Harita Stamen Design, CC BY 3.0" - }, "name": "Stamen Arazi" }, "tf-cycle": { diff --git a/vendor/assets/iD/iD/locales/uk.json b/vendor/assets/iD/iD/locales/uk.json index 2e33f1a75..746d5f024 100644 --- a/vendor/assets/iD/iD/locales/uk.json +++ b/vendor/assets/iD/iD/locales/uk.json @@ -1,5 +1,10 @@ { "uk": { + "icons": { + "information": "інформація", + "remove": "вилучити", + "undo": "відмінити" + }, "modes": { "add_area": { "title": "Полігон", @@ -145,7 +150,9 @@ "vertex": "Лінію приєднано до іншої лінії.", "line": "Лінія з’єднана з іншою лінією.", "area": "Лінія з’єднана з полігоном." - } + }, + "relation": "Ці обʼєкти не можуть бути зʼєднані, бо вони мають ролі, значення яких конфліктують між собою.", + "restriction": "Ці об’єкти не можуть бути з’єднані, це може зруйнувати звʼязок \"{relation}\"." }, "disconnect": { "title": "Від’єднати", @@ -402,6 +409,7 @@ "key": "H", "title": "Історія", "selected": "{n} виділено", + "no_history": "Історія відсутня (Новий об'єкт)", "version": "Версія", "last_edit": "Останні зміни", "edited_by": "Змінено: ", @@ -639,15 +647,20 @@ } }, "success": { - "edited_osm": "OSM змінено!", "just_edited": "Ви щойно внесли зміни на мапу OpenStreetMap!", - "view_on_osm": "Подивитись в OSM", - "facebook": "Поділитись у Facebook", - "twitter": "Поділитись у Twitter", - "google": "Поділитись у Google+", - "help_html": "Ваші зміни зʼявляться на \"Стандартному\" шарі через кілька хвилин. На інших шарах зміни зʼявляться згодом.", + "thank_you": "Дякуємо за вдосконалення мапи.", + "thank_you_location": "Дякуємо вам з вдосконалення мапи навколо {where}.", + "help_html": "Ваші зміни зʼявляться на OpenStreetMap через кілька хвилин. На інших шарах зміни зʼявляться згодом.", "help_link_text": "Деталі", - "help_link_url": "https://wiki.openstreetmap.org/wiki/Uk:ЧаПи#.D0.AF_.D1.89.D0.BE.D0.B9.D0.BD.D0.BE_.D0.B7.D1.80.D0.BE.D0.B1.D0.B8.D0.B2_.D0.B4.D0.B5.D1.8F.D0.BA.D1.96_.D0.B7.D0.BC.D1.96.D0.BD.D0.B8_.D0.BD.D0.B0_.D0.BC.D0.B0.D0.BF.D1.96._.D0.AF.D0.BA_.D0.BC.D0.B5.D0.BD.D1.96_.D1.97.D1.85_.D0.BF.D0.BE.D0.B1.D0.B0.D1.87.D0.B8.D1.82.D0.B8.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/Uk:ЧаПи#.D0.AF_.D1.89.D0.BE.D0.B9.D0.BD.D0.BE_.D0.B7.D1.80.D0.BE.D0.B1.D0.B8.D0.B2_.D0.B4.D0.B5.D1.8F.D0.BA.D1.96_.D0.B7.D0.BC.D1.96.D0.BD.D0.B8_.D0.BD.D0.B0_.D0.BC.D0.B0.D0.BF.D1.96._.D0.AF.D0.BA_.D0.BC.D0.B5.D0.BD.D1.96_.D1.97.D1.85_.D0.BF.D0.BE.D0.B1.D0.B0.D1.87.D0.B8.D1.82.D0.B8.3F", + "view_on_osm": "Подивтись зміни в ОСМ", + "changeset_id": "Номер вашого набору змін: {changeset_id}", + "like_osm": "Подобається OpenStreetMap? Приєднайтесь до:", + "more": "Ще", + "events": "Події", + "languages": "Мови: {languages}", + "missing": "Щось з цього переліку відсутнє?", + "tell_us": "Розкажіть нам!" }, "confirm": { "okay": "Так", @@ -1703,6 +1716,9 @@ "cycleway:right": "Праворуч" } }, + "dance/style": { + "label": "Види танців" + }, "date": { "label": "Дата" }, @@ -1771,6 +1787,9 @@ "display": { "label": "Циферблат" }, + "distance": { + "label": "Відстань" + }, "dock": { "label": "Тип" }, @@ -1811,6 +1830,9 @@ "except": { "label": "Винятки" }, + "faces": { + "label": "Сторони" + }, "fax": { "label": "Факс", "placeholder": "+31 42 123 4567" @@ -1922,6 +1944,39 @@ "label": "Кільця", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "label": "Виїздка", + "options": { + "equestrian": "Так", + "undefined": "Ні" + } + }, + "horse_riding": { + "label": "Верхова їзда", + "options": { + "horse_riding": "Так", + "undefined": "Ні" + } + }, + "horse_scale": { + "label": "Складність маршруту", + "options": { + "common": "Легкий: жодних складностпей. (типовий)", + "critical": "Дуже складний: тільки для досвідчених вершників та їх коней. Багато перешкод. Мости вимагають попереднього огляду на придатність рухатись по ним коням.", + "dangerous": "Небезпечний: тільки для дуже досвідчених вершників та їх коней і тільки за сприятливих погодних умов. Пересування тільки спішившись.", + "demanding": "Будьте обережні: нерівний шлях, іноді складні переходи.", + "difficult": "Складний: Шлях вузький і незахищений. Може містити перешкоди, які треба долати, та вузькі проходи.", + "impossible": "Неможливий: Шлях чи міст не придатні для коней. Завузький, недостатня підтримка, перешкоди, такі як драбини. Небезпека життю." + }, + "placeholder": "Складно, Небезпечно…" + }, + "horse_stables": { + "label": "Стайня", + "options": { + "stables": "Так", + "undefined": "Ні" + } + }, "iata": { "label": "IATA" }, @@ -1941,6 +1996,9 @@ "indoor": { "label": "План приміщення" }, + "industrial": { + "label": "Тип" + }, "information": { "label": "Тип" }, @@ -2061,6 +2119,10 @@ "label": "Обмеження швидкості", "placeholder": "40, 50, 60…" }, + "maxspeed/advisory": { + "label": "Рекомендована швидкість", + "placeholder": "40, 50, 60…" + }, "maxstay": { "label": "Максимальний час" }, @@ -2649,8 +2711,19 @@ "label": "Тип", "placeholder": "Типово" }, + "usage_rail": { + "label": "Тіп колії", + "options": { + "branch": "Гілка", + "industrial": "Промислова", + "main": "Основний путь", + "military": "Військова", + "test": "Випробувальна", + "tourism": "Туристична" + } + }, "vending": { - "label": "Тип товарів" + "label": "Товари" }, "visibility": { "label": "Видно з", @@ -2745,6 +2818,10 @@ "name": "Рекламний щит", "terms": "реклама,оголошення,щит,бігборд,борд,інформація" }, + "advertising/column": { + "name": "Тумба для оголошень", + "terms": "реклама,сітілайт,лайтбокс,оголошення,конструкція,колона,тумба" + }, "aerialway": { "name": "Канатна дорога" }, @@ -2830,6 +2907,10 @@ "name": "Термінал", "terms": "аеропорт,термінал,літак,очікування,duty-free,дьюті-фрі,зала" }, + "allotments/plot": { + "name": "Дачна ділянка", + "terms": "дача,город,сад,ділянка,участок" + }, "amenity": { "name": "Зручності" }, @@ -3058,6 +3139,10 @@ "name": "Ринок", "terms": "Marketplace, hbyjr, базар, базарна площа" }, + "amenity/monastery": { + "name": "Територія монастиря", + "terms": "абатство,базиліка,моелельня,собор,вівтар,каплиця,церква,дім божий,молитовний дім,обрядовий дім,міссія,монастир,мечеть,приход,святилище,рака,святиня,синагога,храм" + }, "amenity/motorcycle_parking": { "name": "Стоянка для мотоциклів", "terms": "стоянка,мотоцикл" @@ -3262,6 +3347,10 @@ "name": "Автомат продажу цигарок", "terms": "циграки,торгівля,тютюн,палити,автомат,кіоск" }, + "amenity/vending_machine/coffee": { + "name": "Каво-машина", + "terms": "кава,лате,капучіно,амерікано,напій,гарячий" + }, "amenity/vending_machine/condoms": { "name": "Автомат продажу нацюцюрників", "terms": "перезерватив,кондом,гандон,секс,захист,атомат,торгівля" @@ -3270,6 +3359,14 @@ "name": "Автомат продажу напоїв", "terms": "напої,газована вода,вода,сік,автомат,продаж,кіоск" }, + "amenity/vending_machine/electronics": { + "name": "Автомат продажу електроприладів", + "terms": "кабель,зарядний пристрій,навушники,хендс-фрі,телефон,смартфон,планшет" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Автомат продажу сувенірних монет", + "terms": "монета,сувенір,витягнута,сплюснута,копійка" + }, "amenity/vending_machine/excrement_bags": { "name": "Автомат пакетів для екскрементів", "terms": "лайно,собака,тварина,кішка,пакет" @@ -3278,6 +3375,18 @@ "name": "Автомат з продажу засобів жіночої гігієни", "terms": "презерватив,тампон,прокладка,жінка,жінки,засоби,гігієна,менструація,циклу,догляд,особистий" }, + "amenity/vending_machine/food": { + "name": "Автомат продажу їжі", + "terms": "їжа,сир,молоко,картопля,макарони,ковбаса,сосиски" + }, + "amenity/vending_machine/fuel": { + "name": "Автомат продажу палива", + "terms": "паливо,бензин,газ,пропан,бутан,дизель,скраплений газ,керосин,біодизель" + }, + "amenity/vending_machine/ice_cream": { + "name": "Автомат морозива", + "terms": "морозиво,шоколадне,ванільне,фруктове" + }, "amenity/vending_machine/news_papers": { "name": "Автомат продажу газет" }, @@ -3297,6 +3406,10 @@ "name": "Автомат продажу проїзних квитків", "terms": "автобус,трамвай,тролейбус,паром,електричка,квиток,транспорт,громадський,проїзд" }, + "amenity/vending_machine/stamps": { + "name": "Автомат продажу поштових марок", + "terms": "лист,марка,пошта,відправлення" + }, "amenity/vending_machine/sweets": { "name": "Автомат продажу солодощів", "terms": "цукерки,жувальна гумка,чіпси,печиво,крекери" @@ -3369,6 +3482,10 @@ "name": "Падіння з вежі", "terms": "парк,атракціони,вежа,вільне,падіння,кидок" }, + "attraction/maze": { + "name": "Лабіринт", + "terms": "лабіринт,парк,розваги" + }, "attraction/pirate_ship": { "name": "Піратській корабель", "terms": "парк,розваги,корабель,човен,пірати,велика,гойдалка" @@ -3998,6 +4115,10 @@ "name": "Хоспіс", "terms": "хвороба,хоспіс,невіліковна,допомога" }, + "healthcare/laboratory": { + "name": "Медична лабораторія", + "terms": "лабораторія,аналізи,кров,інсулін,цукор,сеча,кал,тиск,гормони" + }, "healthcare/midwife": { "name": "Акушерка", "terms": "повитуха,пологи,дитина,вагітність" @@ -4100,6 +4221,10 @@ "name": "З’їзд з/на автомагістраль", "terms": "Motorway Link, ppl fdnjvfuscnhfkm, естакада, виїзд з, виїзд на, з’їзд з, з’їзд на" }, + "highway/passing_place": { + "name": "Місце для роз'їзду", + "terms": "дорога,дати шлях,роз'їзд,переваги,рух,зустрічний рух" + }, "highway/path": { "name": "Стежка", "terms": "Path, cntrf, тропа" @@ -4459,6 +4584,10 @@ "name": "Ігрові автомати", "terms": "один-на-один,ігра,автомат,відео,симулятор,пінбол" }, + "leisure/beach_resort": { + "name": "Пляжний курорт", + "terms": "курорт,відпочинок,пляж,вода,дозвілля,розваги,готель,житло" + }, "leisure/bird_hide": { "name": "Пункт спостереження", "terms": "птахи,звіри,природа,тварини" @@ -4475,6 +4604,10 @@ "name": "Зала для танців", "terms": "танці,зала,бальні танці,розваги,дозвілля,клуб,інтереси,тренування" }, + "leisure/dancing_school": { + "name": "Школа танців", + "terms": "школа,клуб,танці,танцювальна,танго,модерн,вальс,ча-ча-ча,латино,сучасні,хіп-хоп" + }, "leisure/dog_park": { "name": "Парк для собак", "terms": "Dog Park, gfhr lkz cjfr, парк для собак" @@ -4571,6 +4704,10 @@ "name": "Заповідник", "terms": "заповідник, заказник, охорона, природа, територія, акваторія, природний парк" }, + "leisure/outdoor_seating": { + "name": "Місця на свіжому повітрі", + "terms": "кафе,шинок,сніданок,обід,вечера,їжа,страви,напої,пиво,вино,горілка,віски,коньяк,алкоголь,ресторан,бар,паб,веренда,майданчик" + }, "leisure/park": { "name": "Парк", "terms": "Park, gfhr, парк" @@ -4699,6 +4836,10 @@ "name": "Штольня", "terms": "entrance,underground,mine, cave,печера,шахта,вхід,вихід,підземелля" }, + "man_made/antenna": { + "name": "Антена", + "terms": "антена,сигнал,зв'язок,мобільний,телефон,телесигнал,передача" + }, "man_made/breakwater": { "name": "Хвилеріз", "terms": "Breakwater, dbkthsp, хвилеріз" @@ -4750,6 +4891,10 @@ "name": "Оглядова вежа", "terms": "Observation tower, jukzljdf dtf, пожежна вежа, вежа спостереження" }, + "man_made/observatory": { + "name": "Обсерваторія", + "terms": "астрономія,метеорологія,спостереження,зірки,погода" + }, "man_made/petroleum_well": { "name": "Нафтова свердловина", "terms": "drilling rig,oil derrick,oil drill,oil horse,oil rig,oil pump,petroleum well,pumpjack,нафта,насос,свердловина,викачування нафти" @@ -4874,6 +5019,10 @@ "name": "Пустир/вереск", "terms": "Heath, gecnbh, степ, верес, пустище" }, + "natural/mud": { + "name": "Багно", + "terms": "багно,багнюка,грязь" + }, "natural/peak": { "name": "Пік", "terms": "Peak, gsr, пагорб, круча, вершина, гора, найвища точка, гребінь, узгір’я" @@ -5469,7 +5618,7 @@ "name": "Полустанок (на вимогу)" }, "railway/level_crossing": { - "name": "Залізничний переїзд (автомобілний)", + "name": "Залізничний переїзд (автомобільний)", "terms": "залізниця,потяг,рейки,автомобіль,перехід,шлагбаум,світлофор,поїзд,(автомобільний),дорога,шлях" }, "railway/light_rail": { @@ -5910,6 +6059,10 @@ "name": "Товари для тварин", "terms": "Pet Store,njdfhb lkz ndfhby, зоомагазин" }, + "shop/pet_grooming": { + "name": "Салон догляду за тваринами", + "terms": "собака,кіт,стрижка,підрізка кігтів,купання,мийка" + }, "shop/photo": { "name": "Фототовари", "terms": "Photography Store, ajnjnjdfhb, фотограф" @@ -6129,6 +6282,10 @@ "name": "Тематичний парк", "terms": "Theme Park, ntvfnbxybq gfhr, тематичний парк" }, + "tourism/trail_riding_station": { + "name": "Місце відпочинку для коней та вершників", + "terms": "станція,відпочинок,коні,кінь,вершник,туризм" + }, "tourism/viewpoint": { "name": "Оглядовий майданчик", "terms": "Viewpoint, jukzljddbq vfqlfyxbr, оглядовий майданчик" @@ -6213,16 +6370,20 @@ "terms": "знак, обмеження, розворот, немає, заборона" }, "type/restriction/only_left_turn": { - "name": "Поворот тільки праворуч", - "terms": "знак, обмеження, поворот, праворуч, тільки" + "name": "Тільки ліворуч", + "terms": "поворот,рух,ліворуч,заборона" }, "type/restriction/only_right_turn": { - "name": "Поворот тільки ліворуч", - "terms": "знак, обмеження, ліворуч, поворот, тільки" + "name": "Тільки праворуч", + "terms": "поворот,рух,праворуч,заборона" }, "type/restriction/only_straight_on": { - "name": "Тільки прямо", - "terms": "знак, обмеження, тільки прямо, поворота немає" + "name": "ТІльки прямо", + "terms": "рух,прямо,заборона" + }, + "type/restriction/only_u_turn": { + "name": "Тільки розворот", + "terms": "рух,розворот,заборона" }, "type/route": { "name": "Маршрут", @@ -6385,7 +6546,7 @@ "attribution": { "text": "Умови використання та Відгуки" }, - "description": "Межі та дати знімків. Підписи з'являються з 14 рівня масштабування. ", + "description": "Межі та дати знімків. Підписи з'являються з 13 рівня масштабування. ", "name": "Період знімків DigitalGlobe Premium" }, "DigitalGlobe-Standard": { @@ -6399,7 +6560,7 @@ "attribution": { "text": "Умови використання та Відгуки" }, - "description": "Межі та дати знімків. Підписи з'являються з 14 рівня масштабування. ", + "description": "Межі та дати знімків. Підписи з'являються з 13 рівня масштабування. ", "name": "Період знімків DigitalGlobe Standard" }, "EsriWorldImagery": { @@ -6483,6 +6644,10 @@ "description": "Жовтий = Дані, що розповсюджуються US Census на умовах суспільного надбання. Червоний = Дані, відсутні в OpenStreetMap", "name": "TIGER Roads 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "Дороги: Зелений контур = unclassified. Коричневий контур = track. Покриття: gravel = світло-коричневе заповнення, asphalt = чорне, paved = сіре, ground = біле, concrete = синє, grass = зелене. Seasonal = білі смуги", + "name": "U.S. Forest Roads, додатковий шар" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, Учасники OpenStreetMap, CC by-SA 3.0" @@ -6517,7 +6682,7 @@ "attribution": { "text": "basemap.at" }, - "description": "Базова мапа Австрії, на основі урядових даних.", + "description": "Мапа Австрії, на основі урядових даних.", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6579,7 +6744,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Тайли мапи від Stamen Design, CC BY 3.0" + "text": "Тайли мапи від Stamen Design, CC BY 3.0. Дані OpenStreetMap, ODbL." }, "name": "Stamen Terrain" }, @@ -6595,6 +6760,181 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "cape-coast-youthmappers": { + "name": "Університет Кейп-Кост - YouthMappers", + "description": "Приєднуйтесь до нас у Twitter: {url}", + "extendedDescription": "Це офіційний провід відділення Youth Mappers Університету Кейп-Кост, Гана. Ми любимо карти, відкриваємо дані та допомагаємо вразливим." + }, + "osm-gh-facebook": { + "name": "OpenStreetMap Гана у Facebook", + "description": "Група у Facebook для тих, хто цікавиться OpenStreetMap.", + "extendedDescription": "Місцева спільнота маперів Гани, розповсюджуємо інформацію про проекти OpenStreetMap та Humanitarian OpenStreetMap Team (HOT) в Гані. Приєднуйтесь до нас." + }, + "osm-gh-twitter": { + "name": "OpenStreetMap Гана у Twitter", + "description": "Приєднуйтесь до нас у Twitter: {url}" + }, + "talk-gh": { + "name": "Talk-gh Список розсилки", + "description": "Talk-gh – офіційний список розсилки OSM спільноти Гани." + }, + "osm-mg-facebook": { + "name": "OpenStreetMap Madagascar група у Facebook", + "description": "Малагасійська група у Facebook для тих, хто цікавиться OpenStreetMap." + }, + "talk-mg": { + "name": "Talk-mg Список розсилки", + "description": "Місце, де учасники OpenStreetMap, спільнота та користувачі з Мадагаскару поширюють інформацію та обмінюються думками" + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap Бангладеш", + "description": "Покращити OpenStreetMap в Бангладеш", + "extendedDescription": "Мапите в Бангладеш? Маєте питання, бажаєте зв'язатись зі спільнотою? Приєднуйтесь до нас за адресою {Url}. Ласкаво просимо!" + }, + "OSM-India-facebook": { + "name": "OpenStreetMap Індія - участь в мапінгу поселень", + "description": "Покращити OpenStreetMap в Індії", + "extendedDescription": "Мапите в Індії? Маєте питання чи бажаєте поспілкуватись зі спільнотою тут? Приєднуйтесь до нас - {url}. Ласкаво просимо!", + "events": { + "sotmasia2018": { + "name": "State of the Map Азія 2018", + "description": "Відвідайте регіональну конференцію State of the Map 2018 в Індії", + "where": "Індійський інститут управління, Бангалор, Індія" + } + } + }, + "OSM-india-mailinglist": { + "name": "OpenStreetMap Індія, список розсилки", + "description": "Talk-in – офіційний список розсилки Індійської спільноти" + }, + "OSM-india-twitter": { + "name": "OpenStreetMap Індія Twitter", + "description": "Ми просто в твітемо: {url}" + }, + "OSM-India-Puducherry-Facebook": { + "name": "Free Software Hardware Movement - Facebook", + "description": "Відвідайте сторінку FSHM у Facebook, щоб дізнатись про події та заходи", + "extendedDescription": "FSHM організовує події пов'язані з вільним програмним та апаратним забезпечення, технологіями, розповсюдженням інформації про них та OpenStreetMap. На цій сторінці у FB ви завжди знайдете свіжу інформацію про події." + }, + "OSM-India-Puducherry-Matrix": { + "name": "Free Software Hardware Movement - Matrix" + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap Індонезія", + "description": "Покращити OpenStreetMap в Індонезії", + "extendedDescription": "Мапите в Індонезії? Маєте питання, бажаєте зв'язатись зі спільнотою? Приєднуйтесь до нас за адресою {Url}. Ласкаво просимо!" + }, + "OSM-japan-facebook": { + "name": "Японська спільнота OpenStreetMap", + "description": "Учасники та користувачі OpenStreetMap в Японії" + }, + "OSM-japan-mailinglist": { + "name": "OpenStreetMap Японія, список розсилки", + "description": "Talk-ja – офіційний список розсилки Японської спільноти" + }, + "OSM-japan-twitter": { + "name": "OpenStreetMap Японія Twitter", + "description": "Хеш-теґ у Twitter: {url}" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap Монголія", + "description": "Покращити OpenStreetMap в Монголії", + "extendedDescription": "Мапите в Монголії? Маєте питання, бажаєте зв'язатись зі спільнотою? Приєднуйтесь до нас за адресою {Url}. Ласкаво просимо!" + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap Непал", + "description": "Покращити OpenStreetMap в Непалі", + "extendedDescription": "Мапите в Непалі? Маєте питання, бажаєте зв'язатись зі спільнотою? Приєднуйтесь до нас за адресою {Url}. Ласкаво просимо!" + }, + "OSM-PH-facebook": { + "name": "OpenStreetMap Філіппіни у Facebook" + }, + "OSM-PH-mailinglist": { + "name": "Talk-ph Список розсилки" + }, + "OSM-LKA-facebook": { + "description": "Покращити OpenStreetMap у Шрі-Ланці", + "extendedDescription": "Мапите у Шрі-Ланці? Маєте питання, бажаєте зв'язатись зі спільнотою? Приєднуйтесь до нас за адресою {Url}. Ласкаво просимо!" + }, + "OSM-TW-mailinglist": { + "name": "OpenStreetMap Тайвань, список розсилки", + "description": "Talk-tw – офіційний список розсилки спільноти для обговорення питань пов'язаних з Тайванем" + }, + "at-mailinglist": { + "name": "Talk-at Список розсилки", + "description": "Talk-at – офіційний список розсилки OSM спільноти Австрії." + }, + "be-mailinglist": { + "name": "Talk-be Список розсилки", + "description": "Talk-be – офіційний список розсилки OSM спільноти Бельгії." + }, + "talk-cz-mailinglist": { + "name": "Talk-cz Список розсилки", + "description": "Talk-cz – офіційний список розсилки OSM спільноти Чехії." + }, + "de-mailinglist": { + "name": "Talk-de Список розсилки", + "description": "Talk-de – офіційний список розсилки OSM спільноти Німеччини." + }, + "OSM-ES-mailinglist": { + "name": "Talk-es Список розсилки" + }, + "fr-mailinglist": { + "name": "Talk-fr Список розсилки", + "description": "Talk-fr Список розсилки" + }, + "OSM-Rome-meetup": { + "description": "Покращити OpenStreetMap навкруги Риму" + }, + "talk-it-lazio": { + "extendedDescription": "Список розсилки спільноти Риму та Лаціо" + }, + "se-mailinglist": { + "name": "Talk-se Список розсилки" + }, + "se-twitter": { + "description": "Приєднуйтесь до нас у Twitter: {url}" + }, + "Bay-Area-OpenStreetMappers": { + "description": "Покращити OpenStreetMap в районі Затоки Сан-Франциско" + }, + "Mapping-DC-meetup": { + "description": "Покращити OpenStreetMap навколо Вашингтона, округ Колумбія", + "extendedDescription": "Ми є групою маперів-волонтерів, які прагнуть вдосконалити OpenStreetMap в окрузі Колумбія. Ми також намагаємось поширити інформацію про екосистему OSM, аналізі даних, картографію та ГІС серед зацікавлених осіб. Ми збираємося щомісяця на зустрічах, щоб покращити якусь частину нашого міста." + }, + "OpenCleveland-meetup": { + "description": "Покращити OpenStreetMap навколо Клівленда" + }, + "OSM-US": { + "description": "Ми допомагаємо розвивати та вдосконалювати OpenStreetMap у Сполучених Штатах." + }, + "talk-au": { + "name": "Talk-au Список розсилки" + }, + "OSM-AR-mailinglist": { + "name": "Talk-ar Список розсилки" + }, + "OSM-br-mailinglist": { + "name": "Talk-br Список розсилки" + }, + "OSM-CL-mailinglist": { + "name": "Talk-cl Список розсилки" + }, + "OSM-CO-mailinglist": { + "name": "Talk-co Список розсилки" + }, + "OSM-CO-twitter": { + "description": "Приєднуйтесь до нас у Twitter: {url}" + }, + "OSM-PE-mailinglist": { + "name": "Talk-pe Список розсилки" + }, + "OSM-Reddit": { + "name": "OpenStreetMap на Reddit", + "description": "/r/openstreetmap/ чудове місце, щоб дізнатись більше про OpenStreetMap. Можете питати про будь-що!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/vi.json b/vendor/assets/iD/iD/locales/vi.json index 80f81b39e..81a90cd3f 100644 --- a/vendor/assets/iD/iD/locales/vi.json +++ b/vendor/assets/iD/iD/locales/vi.json @@ -1,5 +1,10 @@ { "vi": { + "icons": { + "information": "thông tin", + "remove": "xóa", + "undo": "hoàn tác" + }, "modes": { "add_area": { "title": "Vùng", @@ -145,7 +150,9 @@ "vertex": "nối liền đường kẻ với đường khác", "line": "nối liền lối với đường kẻ", "area": "nối liền đường kẻ với vùng" - } + }, + "relation": "Không thể nối liền các đối tượng này vì có vai trò quan hệ xung đột.", + "restriction": "Không thể nối liền các đối tượng này vì sẽ làm hÆ° một quan hệ “{relation}”." }, "disconnect": { "title": "Tháo gỡ", @@ -402,6 +409,7 @@ "key": "L", "title": "Lịch sá»­", "selected": "{n} được chọn", + "no_history": "Không có Lịch sá»­ (Đối tượng Mới Tạo)", "version": "Phiên bản", "last_edit": "Sá»­a đổi Cuối cùng", "edited_by": "Người Sá»­a đổi", @@ -639,15 +647,20 @@ } }, "success": { - "edited_osm": "Bạn đã sá»­a đổi OSM!", "just_edited": "Bạn vừa sá»­a đổi OpenStreetMap!", - "view_on_osm": "Xem tại OSM", - "facebook": "Chia sẻ trên Facebook", - "twitter": "Chia sẻ trên Twitter", - "google": "Chia sẻ trên Google+", - "help_html": "Các thay đổi của bạn sẽ xuất hiện trên lớp “Chuẩn” trong vòng vài phút. Một số lớp và tính năng khác có thể được cập nhật chậm hÆ¡n.", + "thank_you": "Cảm Æ¡n bạn đã cải thiện bản đồ!", + "thank_you_location": "Cảm Æ¡n bạn đã cải thiện bản đồ {where}.", + "help_html": "Các thay đổi của bạn sẽ xuất hiện tại OpenStreetMap trong vòng vài phút. Các bản đồ tại trang khác có thể được cập nhật chậm hÆ¡n.", "help_link_text": "Chi tiết", - "help_link_url": "https://wiki.openstreetmap.org/wiki/Vi:FAQ?setlang=vi#T.C3.B4i_v.E1.BB.ABa_thay_.C4.91.E1.BB.95i_b.E1.BA.A3n_.C4.91.E1.BB.93._L.C3.A0m_sao_xem_.C4.91.C6.B0.E1.BB.A3c_c.C3.A1c_thay_.C4.91.E1.BB.95i_c.E1.BB.A7a_t.C3.B4i.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/Vi:FAQ?setlang=vi#T.C3.B4i_v.E1.BB.ABa_thay_.C4.91.E1.BB.95i_b.E1.BA.A3n_.C4.91.E1.BB.93._L.C3.A0m_sao_xem_.C4.91.C6.B0.E1.BB.A3c_c.C3.A1c_thay_.C4.91.E1.BB.95i_c.E1.BB.A7a_t.C3.B4i.3F", + "view_on_osm": "Xem các Thay đổi tại OSM", + "changeset_id": "Số bộ thay đổi của bạn: {changeset_id}", + "like_osm": "Bạn có ham mê OpenStreetMap chÆ°a? Hãy liên hệ với cộng đồng:", + "more": "Thêm nữa", + "events": "Sá»± kiện", + "languages": "Ngôn ngữ: {languages}", + "missing": "Danh sách này thiếu gì không?", + "tell_us": "Báo cho chúng tôi biết!" }, "confirm": { "okay": "OK", @@ -1774,6 +1787,9 @@ "display": { "label": "Kiểu Hiển thị" }, + "distance": { + "label": "Tầm xa Tổng cộng" + }, "dock": { "label": "Loại" }, @@ -1814,6 +1830,9 @@ "except": { "label": "Ngoại lệ" }, + "faces": { + "label": "Số Mặt" + }, "fax": { "label": "Số Fax", "placeholder": "+84 1 234 5678" @@ -1925,6 +1944,39 @@ "label": "Số Vòng", "placeholder": "1, 2, 4…" }, + "horse_dressage": { + "label": "Cưỡi ngá»±a Biểu diễn", + "options": { + "equestrian": "Có", + "undefined": "Không" + } + }, + "horse_riding": { + "label": "Cưỡi ngá»±a", + "options": { + "horse_riding": "Có", + "undefined": "Không" + } + }, + "horse_scale": { + "label": "Trình độ Cưỡi ngá»±a", + "options": { + "common": "Dễ: Không có trở ngại. (mặc định)", + "critical": "Rất Khó: Chỉ có những ngá»±a và người cưỡi ngá»±a có nhiều khả năng có thể qua lại. Có trở ngại lớn. Cần phải xem xét kỹ càng các cầu.", + "dangerous": "Nguy hiểm: Chỉ có những ngá»±a và người cưỡi ngá»±a có rất nhiều khả năng có thể qua lại được khi trời đẹp. Nên xuống ngá»±a.", + "demanding": "Xấu: Lối gồ ghề, đôi khi có quãng khó đi qua.", + "difficult": "Khó: Lối hẹp có thể có trở ngại làm dễ bị té.", + "impossible": "Hiểm nghèo: Ngá»±a không qua được lối hoặc cầu quá hẹp, thiếu cột chống, có trở ngại nhÆ° thang." + }, + "placeholder": "Khó, Nguy hiểm…" + }, + "horse_stables": { + "label": "Chuồng Ngá»±a", + "options": { + "stables": "Có", + "undefined": "Không" + } + }, "iata": { "label": "IATA" }, @@ -1944,6 +1996,9 @@ "indoor": { "label": "Trong Nhà" }, + "industrial": { + "label": "Kiểu" + }, "information": { "label": "Kiểu" }, @@ -2064,6 +2119,10 @@ "label": "Tốc độ Tối đa", "placeholder": "40, 50, 60…" }, + "maxspeed/advisory": { + "label": "Tốc độ Tối đa Khuyến cáo", + "placeholder": "40, 50, 60…" + }, "maxstay": { "label": "Thời gian Ở Tối đa" }, @@ -2188,7 +2247,7 @@ "label": "CÆ¡ quan Chủ quản" }, "outdoor_seating": { - "label": "Ngồi ở Ngoài" + "label": "Ngồi Ngoài trời" }, "par": { "label": "Điểm chuẩn", @@ -2652,6 +2711,17 @@ "label": "Kiểu", "placeholder": "Bình thường" }, + "usage_rail": { + "label": "Kiểu Sá»­ dụng", + "options": { + "branch": "Nhánh", + "industrial": "Công nghiệp", + "main": "Chính", + "military": "Quân sá»±", + "test": "Thá»­ nghiệm", + "tourism": "Du lịch" + } + }, "vending": { "label": "Loại Hàng hóa" }, @@ -2748,6 +2818,10 @@ "name": "Bảng Quảng cáo", "terms": "bảng quảng cáo, biển quảng cáo, panô quảng cáo, pano quảng cáo, pa-nô quảng cáo, pa nô quảng cáo, bang quang cao, bien quang cao, pano quang cao, pa-no quang cao, pa no quang cao" }, + "advertising/column": { + "name": "Cột Quảng cáo", + "terms": "cột quảng cáo, cột morris, cột áp phích, cot quang cao, cot morris, cot ap phich" + }, "aerialway": { "name": "Cáp treo" }, @@ -2833,6 +2907,10 @@ "name": "Ga Sân bay", "terms": "ga sân bay, ga phi trường, nhà ga sân bay, nhà ga phi trường, ga san bay, ga phi truong, nha ga san bay, nha ga phi truong" }, + "allotments/plot": { + "name": "Mảnh Vườn Gia đình", + "terms": "mảnh vườn gia đình, miếng vườn gia đình, mảnh đất trong khu vườn gia đình, miếng đất trong khu vườn gia đình, manh vuon dia dinh, mieng vuon gia dinh, manh dat trong khu vuon gia dinh, mieng dat trong khu vuon gia dinh" + }, "amenity": { "name": "Tiện nghi" }, @@ -3061,6 +3139,10 @@ "name": "Chợ phiên", "terms": "chợ phiên, chợ trời, chợ xổm, chợ, cho phien, cho troi, cho xom, cho" }, + "amenity/monastery": { + "name": "Sân Tu viện", + "terms": "sân tu viện, san tu vien" + }, "amenity/motorcycle_parking": { "name": "Chỗ Đậu Xe máy", "terms": "chỗ đậu xe máy, đậu xe máy, chỗ đậu mô-tô, chỗ đậu mô tô, đậu mô-tô, chỗ đậu mô tô, chỗ đậu xe hai bánh, đậu xe hai bánh, chỗ đậu xe ba bánh, đậu xe ba bánh, cho dau xe may, dau xe may, cho dau mo-to, cho dau mo to, dau mo-to, dau mo to, cho dau xe hai banh, dau xe hai banh, cho dau xe ba banh, dau xe ba banh" @@ -3265,6 +3347,10 @@ "name": "Máy Bán Thuốc lá", "terms": "máy bán thuốc lá, may ban thuoc la" }, + "amenity/vending_machine/coffee": { + "name": "Máy Bán Cà phê", + "terms": "máy bán cà phê, máy bán cà-phê, may ban ca phe, may ban ca-phe" + }, "amenity/vending_machine/condoms": { "name": "Máy Bán Bao Cao su", "terms": "máy bán bao cao su, máy phát bao cao su, máy bán bao dÆ°Æ¡ng vật, máy phát bao dÆ°Æ¡ng vật, máy bán túi cao su, máy phát túi cao su, máy bán ca pốt, máy phát ca pốt, máy bán ca-pốt, máy phát ca-pốt, may ban bao cao su, may phat bao cao su, may ban bao duong vat, may phat bao duong vat, may ban tui cao su, may phat tui cao su, may ban ca pot, may phat ca pot, may ban ca-pot, may phat ca-pot" @@ -3273,6 +3359,14 @@ "name": "Máy Bán Nước uống", "terms": "máy bán nước uống, may ban nuoc uong" }, + "amenity/vending_machine/electronics": { + "name": "Máy Bán Thiết bị Điện tá»­", + "terms": "máy bán thiết bị điện tá»­, máy bán điện tá»­, điện thoại, điện thoại di động, cáp, bộ sạc điện, bộ nạp điện, máy sạc điện, máy nạp điện, tai nghe, máy tính bảng, may ban thiet bi dien tu, may ban dien tu, dien thoai, dien thoai di dong, cap, bo sac dien, bo nap dien, may sac dien, may nap dien, tai nghe, may tinh bang" + }, + "amenity/vending_machine/elongated_coin": { + "name": "Máy In dấu vào Tiền", + "terms": "máy in dấu vào tiền, máy đóng dấu vào tiền, máy in tiền, xu, đồng xu, tiền ká»· niệm, tiền kỉ niệm, may in dau vao tien, may dong dau vao tien, may in tien, xu, dong xu, tien ky niem, tien ki niem" + }, "amenity/vending_machine/excrement_bags": { "name": "Máy Phát Bao Cứt Chó", "terms": "máy phát bao cứt chó, may phat bao cut cho" @@ -3281,6 +3375,18 @@ "name": "Máy Bán Sản phẩm Vệ sinh Nữ giới", "terms": "máy bán sản phẩm vệ sinh nữ giới, máy bán sản phẩm vệ sinh phụ nữ, máy bán băng vệ sinh, máy bán băng vệ sinh dạng ống, may ban san pham ve sinh nu gioi, may ban san pham ve sinh phu nu, may ban bang ve sinh, may ban ban ve sinh dang ong" }, + "amenity/vending_machine/food": { + "name": "Máy Bán Đồ ăn", + "terms": "máy bán đồ ăn, máy bán thức ăn, máy bán đồ ăn nhanh, máy bán đồ ăn tá»± động, khoai tây chiên, bánh quy, bánh ngọt, kẹo, nước ngọt, nước giải khát, nước ngọt có ga, cô ca cô la, cô-ca cô-la, cô-ca-cô-la, côcacôla, kẹo nhai, kẹo cao su, gum, kẹo gum, kẹo sinh-gum, kẹo sinh gum, sinh-gum, sinh gum, may ban do an, may ban thuc an, may ban do an nhanh, may ban do an tu dong, khoai tay chian, banh quy, banh ngot, keo, nuoc ngot, nuoc giai khat, nuoc ngot co ga, co ca co la, co-ca co-la, co-ca-co-la, cocacola, keo nhai, keo cao su, keo gum, keo sinh-gum, keo sinh gum" + }, + "amenity/vending_machine/fuel": { + "name": "Trụ BÆ¡m Xăng", + "terms": "trụ bÆ¡m xăng, trụ bÆ¡m xăng dầu, cây xăng, cột xăng, xăng ét xăng, ét-xăng, nhiên liệu, diesel, gazole, khí hóa lỏng, khí hoá lỏng, khí thiên nhiên lỏng, khí ga lỏng, khí gas lỏng, tru bom xang, tru bom xang dau, cay xang, cot xang, xang et xang, et-xang, nhien lieu, khi hoa long, khi thien nhien long, khi ga long, khi gas long" + }, + "amenity/vending_machine/ice_cream": { + "name": "Máy Bán Kem", + "terms": "máy bán kem, máy bán kem tá»± động, máy bán cà rem, máy bán cà-rem, kem que, may ban kem, may ban kem tu dong, may ban ca rem, may ban ca-rem" + }, "amenity/vending_machine/news_papers": { "name": "Máy Bán Báo" }, @@ -3300,6 +3406,10 @@ "name": "Máy Bán Vé PhÆ°Æ¡ng tiện Công cộng", "terms": "máy bán vé, máy bán vé phÆ°Æ¡ng tiện công cộng, máy bán vé xe buýt, máy bán vé xe điện, máy bán vé xe lá»­a, may ban ve, may ban ve phuong tien cong cong, may ban ve xe buyt, may ban ve xe dien, may ban ve xe lua" }, + "amenity/vending_machine/stamps": { + "name": "Máy Bán Tem", + "terms": "máy bán tem, máy ban tem tá»± động, tem thÆ°, tem bÆ°u chính, may ban tem, may ban tem tu dong, tem thu, tem buu chinh" + }, "amenity/vending_machine/sweets": { "name": "Máy Bán Kẹo", "terms": "máy bán kẹo, may ban keo" @@ -3372,6 +3482,10 @@ "name": "Tháp RÆ¡i Tá»± do", "terms": "tháp rÆ¡i tá»± do, thap roi tu do" }, + "attraction/maze": { + "name": "Mê cung", + "terms": "mê cung, cung mê, mê lộ, mê đạo, me cung, cung me, me lo, me dao" + }, "attraction/pirate_ship": { "name": "Thuyền Cướp biển", "terms": "thuyền cướp biển, thuyen cuop bien" @@ -4001,6 +4115,10 @@ "name": "Nhà An dưỡng Cuối đời", "terms": "nhà an dưỡng cuối đời, nha an duong cuoi doi" }, + "healthcare/laboratory": { + "name": "Phòng Thí nghiệm Y tế", + "terms": "phòng thí nghiệm y tế, phòng thá»­ nghiệm y tế, phòng xét nghiệm y tế, phòng thí nghiệm lâm sàng, phòng thá»­ nghiệm lâm sàng, phòng xét nghiệm lâm sàng, phòng thá»­ máu, phong thi nghiem y te, phong thu nghiem y te, phong xet nghiem y te, phong thi nghiem lam sang, phong thu nghiem lam sang, phong xet nghiem lam sang, phong thu mau" + }, "healthcare/midwife": { "name": "Bà đỡ", "terms": "bà đỡ, bà đỡ đẻ, ba do, ba do de" @@ -4103,6 +4221,10 @@ "name": "Nhánh Ra vào Đường Cao tốc", "terms": "đường nhánh cao tốc, đoạn nhánh cao tốc, đường nhánh rẽ cao tốc, đoạn nhánh rẽ cao tốc, đường nhánh chuyển đường cao tốc, nhánh chuyển đường cao tốc, lối ra vào đường cao tốc, lối ra đường cao tốc, lối vào đường cao tốc, nhánh ra đường cao tốc, nhánh vào đường cao tốc, đường nối đường cao tốc, duong nhanh cao toc, doan nhanh cao toc, duong nhanh re cao toc, doan nhanh re cao toc, duong nhanh chuyen duong cao toc, nhanh chuyen duong cao toc, loi ra vao duong cao toc, loi ra duong cao toc, loi vao duong cao toc, nhanh ra duong cao toc, nhanh vao duong cao toc, duong noi duong cao toc" }, + "highway/passing_place": { + "name": "Chỗ Tránh Xe", + "terms": "chỗ tránh xe, vị trí tránh xe, nÆ¡i tránh xe, cho tranh xe, vi tri tranh xe, noi tranh xe" + }, "highway/path": { "name": "Lối", "terms": "đường mòn, duong mon" @@ -4132,8 +4254,8 @@ "terms": "ngõ dân cÆ°, ngõ dân sinh, ngõ, đường dân cÆ°, dân cÆ°, đường dân sinh, dân sinh, kiệt, ngo dan cu, ngo dan sinh, ngo, duong dan cu, dan cu, duong dan sinh, dan sinh, kiet" }, "highway/rest_area": { - "name": "Khu Vệ sinh và NÆ¡i Nghỉ ngÆ¡i", - "terms": "khu vệ sinh, phòng vệ sinh, nÆ¡i nghỉ ngÆ¡i, chỗ nghỉ ngÆ¡i, trạm thông tin, khu ve sinh, phong ve sinh, noi nghi ngoi, cho nghi ngoi, tram thong tin" + "name": "Trạm Dừng Nghỉ", + "terms": "trạm dừng nghỉ, khu vệ sinh, phòng vệ sinh, nÆ¡i nghỉ ngÆ¡i, chỗ nghỉ ngÆ¡i, trạm thông tin, tram dung nghi, khu ve sinh, phong ve sinh, noi nghi ngoi, cho nghi ngoi, tram thong tin" }, "highway/road": { "name": "Đường Nói chung", @@ -4462,6 +4584,10 @@ "name": "Khu Trò chÆ¡i Điện tá»­", "terms": "khu trò chÆ¡i điện tá»­, trung tâm trò chÆ¡i điện tá»­, trò chÆ¡i cảm giác mạnh, trò chÆ¡i video, trò chÆ¡i bắn bóng, pinball, trò chÆ¡i lái xe ảo, khu tro choi dien tu, trung tam tro choi dien tu, tro choi cam giac manh, tro choi video, tro choi ban bong, tro choi lai xe ao" }, + "leisure/beach_resort": { + "name": "Bãi biển Nghỉ dưỡng", + "terms": "bãi biển nghỉ dưỡng, bãi biển nghỉ ngÆ¡i, bãi biển nghỉ hè, bai bien nghi duong, bai bien nghi ngoi, bai bien nghi he" + }, "leisure/bird_hide": { "name": "Căn nhà Quan sát Chim", "terms": "căn nhà quan sát chim, căn nhà quan sát động vật, can nha quan sat chim, can nha quan sat dong vat" @@ -4578,6 +4704,10 @@ "name": "Khu Bảo tồn Thiên nhiên", "terms": "khu bảo tồn thiên nhiên, khu vá»±c bảo tồn thiên nhiên, khu cấm săn bắn, khu vá»±c cấm săn bắn, khu cấm câu cá, khu vá»±c cấm câu cá, khu bao ton thien nhien, khu vuc bao ton thien nhien, khu cam san ban, khu vuc cam san ban, khu cam cau ca, khu vuc cam cau ca" }, + "leisure/outdoor_seating": { + "name": "Khu Ăn uống Ngoài trời", + "terms": "khu ăn uống ngoài trời, điểm ăn uống ngoài trời, không gian ngoài trời, không gian giữa trời, bàn ăn ngoài trời, quán rượu ngoài trời, quán bia ngoài trời" + }, "leisure/park": { "name": "Công viên", "terms": "công viên, vườn, vườn hoa, vườn cây, bãi cỏ, bãi cỏ xanh, thảm cỏ xanh, vành đai xanh, khu vui chÆ¡i, khu vui chÆ¡i trẻ em, khu chÆ¡i trẻ em, sân chÆ¡i, quảng trường, rừng, cong vien, vuon, vuon hoa, vuon cay, bai co, bai co xanh, tham co xanh, vanh dai xanh, khu vui choi, khu vui choi tre em, khu choi tre em, san choi, quang truong, rung" @@ -4706,6 +4836,10 @@ "name": "Lối vào Mỏ", "terms": "lối vào mỏ, đường vào mỏ, loi vao mo, duong vao mo" }, + "man_made/antenna": { + "name": "Ăngten", + "terms": "ăngten, ăng-ten, ăng ten, anten, an-ten, radio, rađiô, ra-đi-ô, vô tuyến, anten radio, anten rađiô, an-ten ra-đi-ô, tv, tivi, anten tv, anten tivi, angten, ang-ten, ang ten, anten, an-ten, ra-di-o, vo tuyen, anten ra-di-o" + }, "man_made/breakwater": { "name": "Đê Chắn Sóng", "terms": "đê chắn sóng, de chan song" @@ -4747,7 +4881,7 @@ }, "man_made/mast": { "name": "Cột Ăngten", - "terms": "cột ăngten, cột ăng-ten, cột ăng ten, cột anten, cột an-ten, cột radio, cột rađiô, cột ra-đi-ô, cột vô tuyến, tháp radio, tháp rađiô, tháp ra-đi-ô, tháp vô tuyến, anten radio, anten rađiô, an-ten ra-đi-ô, cột tv, cột tivi, tháp tv, tháp tivi, anten tv, anten tivi, cot angten, cot ang-ten, cot ang ten, cot anten, cot an-ten, cot radio, cot ra-di-o, cot vo tuyen, thap radio, thap ra-di-o, thap vo tuyen, anten radio, anten ra-di-o, cot tv, cot vivi, thap tv, thap tivi, anten tv, anten tivi" + "terms": "cột ăngten, cột ăng-ten, cột ăng ten, cột anten, cột an-ten, cột radio, cột rađiô, cột ra-đi-ô, cột vô tuyến, tháp radio, tháp rađiô, tháp ra-đi-ô, tháp vô tuyến, anten radio, anten rađiô, an-ten ra-đi-ô, cột tv, cột tivi, tháp tv, tháp tivi, anten tv, anten tivi, cot angten, cot ang-ten, cot ang ten, cot anten, cot an-ten, cot radio, cot ra-di-o, cot vo tuyen, thap radio, thap ra-di-o, thap vo tuyen, anten radio, anten ra-di-o, cot tv, cot tivi, thap tv, thap tivi, anten tv, anten tivi" }, "man_made/monitoring_station": { "name": "Trạm Giám sát", @@ -4757,6 +4891,10 @@ "name": "Tháp Quan sát", "terms": "tháp quan sát, trạm quan sát, tầng quan sát, thap quan sat, tram quan sat, tang quan sat" }, + "man_made/observatory": { + "name": "Đài Quan sát", + "terms": "đài quan sát, đài thiên văn, đài quan sát thiên văn, kính thiên văn, kiếng thiên văn, đài quan sát khí tượng, đài quan sát núi lá»­a, dai quan sat, dai thien van, dai quan sat thien van, kinh thien van, kieng thien van, dai quan sat khi tuong, dai quan sat nui lua" + }, "man_made/petroleum_well": { "name": "Giếng Dầu", "terms": "giếng dầu, gieng dau" @@ -4881,6 +5019,10 @@ "name": "Bãi hoang", "terms": "bãi hoang, bai hoang" }, + "natural/mud": { + "name": "Bùn", + "terms": "bùn, bùn lầy, bun, bun lay" + }, "natural/peak": { "name": "Đỉnh núi", "terms": "đồi, núi, đỉnh núi, đỉnh, chỏm núi, chỏm, chóp núi, chóp, chỏm chóp, doi, nui, dinh nui, dinh, chom nui, chom, chop nui, chop, chom chop" @@ -5917,6 +6059,10 @@ "name": "Tiệm Vật nuôi", "terms": "tiệm bán vật nuôi, tiệm bán đồ nuôi thú vật, cá»­a hàng vật nuôi, cá»­a hiệu thú vật, đồ ăn thú vật, chó, mèo, tiem ban vat nuoi, tiem ban do nuoi thu vat, cua hang vat nuoi, cua hieu thu vat, do an thu vat, cho, meo" }, + "shop/pet_grooming": { + "name": "Dịch vụ Tỉa lông", + "terms": "dịch vụ tỉa lông, tỉa lông thú cÆ°ng, tỉa lông chó, tỉa lông mèo, tỉa lông ngá»±a, dich vu tia long, tia long thu cung, tia long cho, tia long meo, tia long ngua" + }, "shop/photo": { "name": "Tiệm Chụp Hình", "terms": "tiệm chụp hình, tiệm lấy hình, tiệm lấy ảnh, tiệm nhiếp ảnh, cá»­a hàng chụp hình, cá»­a hàng lấy hình, cá»­a hàng lấy ảnh, cá»­a hàng nhiếp ảnh, tiem chup hinh, tiem lay hinh, tiem lay anh, tiem nhiep anh, cua hang chup hinh, cua hang lay hinh, cua hang lay anh, cua hang nhiep anh" @@ -6136,6 +6282,10 @@ "name": "Công viên Chủ đề", "terms": "công viên chủ đề, công viên vui chÆ¡i giả trí, tàu lượn siêu tốc, vòi nước, cong vien chu de, cong vien vui choi gia tri, tau luon sieu toc, voi nuoc" }, + "tourism/trail_riding_station": { + "name": "Chuồng Ngá»±a Tạm thời", + "terms": "chuồng ngá»±a tạm thời, chuong ngua tam thoi" + }, "tourism/viewpoint": { "name": "Điểm Ngắm cảnh", "terms": "điểm ngắm cảnh, nÆ¡i ngắm cảnh, kính viễn vọng, kiếng viễn vọng, kính nhìn từ xa, kiếng nhìn từ xa, thắng cảnh, diem ngam canh, noi ngam canh, kinh vien vong, kieng vien vong, kinh nhin tu xa, kieng nhin tu xa, thang canh" @@ -6220,16 +6370,20 @@ "terms": "cấm quay ngược trở lại, không quay ngược trở lại, đừng quay ngược trở lại, cam quay nguoc tro lai, khong quay nguoc tro lai, dung quay nguoc tro lai, cam quay nguoc tro lai" }, "type/restriction/only_left_turn": { - "name": "Chỉ Rẽ Trái", - "terms": "chỉ rẽ trái, chỉ cho phép rẽ trái, chỉ quẹo trái, chỉ cho phép quẹo trái, chỉ ngoặt trái, chỉ cho phép ngoặt trái, chỉ ngoắt trái, chỉ cho phép ngoắt trái, chỉ quặt trái, chỉ cho phép quặt trái, chi re trai, chi cho phep re trai, chi queo trai, chi cho phep queo trai, chi ngoat trai, chi cho phep ngoat trai, chi ngoat trai, chi cho phep ngoat trai, chi quat trai, chi cho phep quat trai" + "name": "Chỉ Rẽ trái", + "terms": "chỉ quẹo trái, chỉ cho phép quẹo trái, chỉ rẽ trái, chỉ cho phép rẽ trái, chi queo trai, chi cho phep queo trai, chi re trai, chi cho phep re trai" }, "type/restriction/only_right_turn": { "name": "Chỉ Rẽ Phải", - "terms": "chỉ rẽ phải, chỉ cho phép rẽ phải, chỉ quẹo phải, chỉ cho phép quẹo phải, chỉ ngoặt phải, chỉ cho phép ngoặt phải, chỉ ngoắt phải, chỉ cho phép ngoắt phải, chỉ quặt phải, chỉ cho phép quặt phải, chi re phai, chi cho phep re phai, chi queo phai, chi cho phep queo phai, chi ngoat phai, chi cho phep ngoat phai, chi ngoat phai, chi cho phep ngoat phai, chi quat phai, chi cho phep quat phai" + "terms": "chỉ quẹo phải, chỉ cho phép quẹo phải, chỉ rẽ phải, chỉ cho phép rẽ phải, chi queo phai, chi cho phep queo phai, chi re phai, chi cho phep re phai" }, "type/restriction/only_straight_on": { - "name": "Cấm Rẽ Trái/Phải", - "terms": "cấm rẽ trái phải, không rẽ trái phải, đừng rẽ trái phải, cấm quẹo trái phải, không quẹo trái phải, đừng quẹo trái phải, chỉ chạy thẳng, chỉ cho phép chạy thẳng, cam re trai phai, khong re trai phai, dung re trai phai, cam queo trai phai, khong queo trai phai, dung queo trai phai, chi chay thang, chi cho phep chay thang" + "name": "Chỉ Chạy Thẳng", + "terms": "chỉ chạy thẳng, chỉ đi thẳng, chỉ cho phép chạy thẳng, chỉ cho phép đi thẳng, cấm quẹo, cấm rẽ, không quẹo, không rẽ, đừng quẹo, đừng rẽ, chi chay thang, chi di thang, chi cho phep chay thang, chi cho phep di thang, cam queo, cam re, khong queo, khong re, dung queo, dung re" + }, + "type/restriction/only_u_turn": { + "name": "Chỉ Quay Ngược", + "terms": "chỉ quay ngược, chỉ quay vòng lại, chỉ vòng ngược lại, chỉ cho phép quay ngược, chỉ cho phép quay vòng lại, chỉ cho phép vòng ngược lại, chi quay nguoc, chi quay vong lai, chi vong nguoc lai, chi cho phep quay nguoc, chi cho phep quay vong lai, chi cho phep vong nguoc lai" }, "type/route": { "name": "Tuyến đường", @@ -6392,7 +6546,7 @@ "attribution": { "text": "Điều khoản & Phản hồi" }, - "description": "Biên giới và ngày tháng chụp. Các nhãn xuất hiện tại mức thu phóng 14 trở lên.", + "description": "Biên giới và ngày tháng chụp. Các nhãn xuất hiện tại mức thu phóng 13 trở lên.", "name": "Lúc chụp DigitalGlobe Thượng hạng" }, "DigitalGlobe-Standard": { @@ -6406,7 +6560,7 @@ "attribution": { "text": "Điều khoản & Phản hồi" }, - "description": "Biên giới và ngày tháng chụp. Các nhãn xuất hiện tại mức thu phóng 14 trở lên.", + "description": "Biên giới và ngày tháng chụp. Các nhãn xuất hiện tại mức thu phóng 13 trở lên.", "name": "Lúc chụp DigitalGlobe Tiêu chuẩn" }, "EsriWorldImagery": { @@ -6490,6 +6644,9 @@ "description": "Màu vàng là dữ liệu bản đồ thuộc phạm vi công cộng do Điều tra dân số Hoa Kỳ cung cấp. Màu đỏ là dữ liệu chÆ°a xuất hiện trong OpenStreetMap.", "name": "Đường sá TIGER 2017" }, + "US_Forest_Service_roads_overlay": { + "name": "Lớp phủ Đường Lâm nghiệp Hoa Kỳ" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, những người đóng góp vào OpenStreetMap, CC BY-SA 3.0" @@ -6586,7 +6743,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Hình bản đồ do Stamen Design cung cấp dưới CC BY 3.0" + "text": "Hình bản đồ do Stamen Design cung cấp dưới CC BY 3.0. Dữ liệu do OpenStreetMap cung cấp dưới ODbL." }, "name": "Địa thế Stamen" }, @@ -6602,6 +6759,371 @@ }, "name": "Phong cảnh Thunderforest" } + }, + "community": { + "osm-mg-facebook": { + "name": "Nhóm Facebook OpenStreetMap Madagascar", + "description": "Nhóm Facebook dành cho những người Madagascar quan tâm đến OpenStreetMap." + }, + "talk-mg": { + "name": "Danh sách thÆ° talk-mg", + "description": "NÆ¡i để những người đóng góp, cộng đồng, và người dùng OpenStreetMap chia sẻ và thảo luận." + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap Bangladesh", + "description": "Cải thiện OpenStreetMap tại Bangladesh", + "extendedDescription": "Bạn có lập bản đồ tại Bangladesh? Bạn có thắc mắc, muốn liên hệ với cộng đồng tại đây? Mời bạn tham gia tại {Url}." + }, + "OSM-India-facebook": { + "name": "OpenStreetMap Ấn Độ – tham gia lập bản đồ hàng xóm", + "description": "Cải thiện OpenStreetMap tại Ấn Độ" + }, + "OSM-india-mailinglist": { + "name": "Danh sách thÆ° OpenStreetMap Ấn Độ", + "description": "talk-in là danh sách thÆ° chính thức của cộng đồng Ấn Độ" + }, + "OSM-india-twitter": { + "name": "Twitter OpenStreetMap Ấn Độ", + "description": "Chúng tôi chỉ cách bạn một tweet: {url}" + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap Indonesia", + "description": "Cải thiện OpenStreetMap tại Indonesia", + "extendedDescription": "Bạn có lập bản đồ tại Indonesia? Bạn có thắc mắc, muốn liên hệ với cộng đồng tại đây? Mời bạn tham gia tại {Url}." + }, + "OSM-japan-facebook": { + "name": "Cộng đồng OpenStreetMap Nhật Bản", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở Nhật Bản" + }, + "OSM-japan-mailinglist": { + "name": "Danh sách thÆ° OpenStreetMap Nhật Bản", + "description": "talk-ja là danh sách thÆ° chính thức của cộng đồng Nhật Bản" + }, + "OSM-japan-twitter": { + "name": "Twitter OpenStreetMap Nhật Bản", + "description": "Thẻ băm tại Twitter: {url}" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap Mông Cổ", + "description": "Cải thiện OpenStreetMap tại Mông Cổ", + "extendedDescription": "Bạn có lập bản đồ tại Mông Cổ? Bạn có thắc mắc, muốn liên hệ với cộng đồng tại đây? Mời bạn tham gia tại {Url}." + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap Nepal", + "description": "Cải thiện OpenStreetMap tại Nepal", + "extendedDescription": "Bạn có lập bản đồ tại Nepal? Bạn có thắc mắc, muốn liên hệ với cộng đồng tại đây? Mời bạn tham gia tại {Url}." + }, + "OSM-PH-facebook": { + "name": "Facebook OpenStreetMap Philippines", + "description": "OpenStreetMap Philippines khuyến khích mọi người Philippines đóng góp vào dá»± án OpenStreetMap." + }, + "OSM-PH-mailinglist": { + "name": "Danh sách thÆ° talk-ph", + "description": "Danh sách thÆ° để thảo luận về OpenStreetMap tại Philippines" + }, + "OSM-PH-slack": { + "name": "Slack OpenStreetMap Philippines", + "description": "Mời bạn tham gia tại {signupUrl}" + }, + "OSM-PH-telegram": { + "name": "Telegram OpenStreetMap Philippines", + "description": "Cộng đồng địa phÆ°Æ¡ng Telegram không chính thức dành cho những người đóng góp vào OpenStreetMap và bạn bè ở Philippines" + }, + "OSM-RU-forum": { + "name": "Diễn đàn OpenStreetMap Nga", + "description": "Diễn đàn Web của OpenStreetMap Nga" + }, + "OSM-RU-telegram": { + "name": "Telegram OpenStreetMap Nga", + "description": "Trò chuyện Telegram của OpenStreetMap Nga" + }, + "OSM-LKA-facebook": { + "name": "OpenStreetMap Sri Lanka", + "description": "Cải thiện OpenStreetMap tại Sri Lanka", + "extendedDescription": "Bạn có lập bản đồ tại Sri Lanka? Bạn có thắc mắc, muốn liên hệ với cộng đồng tại đây? Mời bạn tham gia tại {Url}." + }, + "OSM-TW-facebook": { + "name": "Cộng đồng OpenStreetMap Đài Loan", + "description": "Nhóm Facebook cho phép những người lập bản đồ và người dùng OpenStreetMap để thảo luận về Đài Loan." + }, + "OSM-TW-mailinglist": { + "name": "Danh sách thÆ° OpenStreetMap Đài Loan", + "description": "talk-tw là danh sách thÆ° chính thức của cộng đồng Đài Loan" + }, + "at-mailinglist": { + "name": "Danh sách thÆ° talk-at", + "description": "talk-at là danh sách thÆ° chính thức của cộng đồng Áo" + }, + "at-twitter": { + "name": "Twitter OpenStreetMap Áo", + "description": "OpenStreetMap Áo tại Twitter: {url}" + }, + "osm-at": { + "name": "OpenStreetMap Áo", + "description": "Trang thông tin về OpenStreetMap tại Áo" + }, + "be-facebook": { + "name": "Cộng đồng OpenStreetMap Bỉ", + "description": "Nhóm Facebook của những người lập bản đồ và người dùng OpenStreetMap ở Bỉ" + }, + "be-forum": { + "name": "Diễn đàn OpenStreetMap Bỉ", + "description": "Diễn đàn Web của OpenStreetMap Bỉ" + }, + "be-mailinglist": { + "name": "Danh sách thÆ° talk-be", + "description": "talk-be là danh sách thÆ° chính thức của cộng đồng Bỉ" + }, + "be-matrix": { + "name": "Kênh Riot OpenStreetMap Bỉ", + "description": "Mời bạn tham gia tại {signupUrl}", + "extendedDescription": "Có nhiều kênh dành cho người mới đến, chủ đề riêng, kiểu sá»­ dụng đất riêng, và nhà phát triển" + }, + "be-twitter": { + "name": "Twitter OpenStreetMap Bỉ", + "description": "OSM Bỉ tại Twitter: {url}" + }, + "byosm": { + "name": "OpenStreetMap Belarus", + "description": "Trò chuyện Telegram OpenStreetMap Belarus" + }, + "talk-cz-mailinglist": { + "name": "Danh sách thÆ° talk-cz", + "description": "talk-cz là danh sách thÆ° chính thức của cộng đồng Séc" + }, + "de-forum": { + "name": "Diễn đàn OpenStreetMap Đức", + "description": "Diễn đàn Web của OpenStreetMap Đức" + }, + "de-irc": { + "name": "IRC OpenStreetMap Đức", + "description": "Hãy tham gia #osm-de tại irc.oftc.net (cổng 6667)" + }, + "de-mailinglist": { + "name": "Danh sách thÆ° talk-de", + "description": "talk-de là danh sách thÆ° chính thức của cộng đồng Đức" + }, + "osm-de": { + "name": "OpenStreetMap Đức", + "description": "Trang thông tin về OpenStreetMap tại Đức" + }, + "OSM-ES-telegram": { + "name": "@OSMes tại Telegram", + "description": "Trò chuyện Telegram của OpenStreetMap Tây Ban Nha" + }, + "OSM-Rome-meetup": { + "name": "Incontro Mappatori Romani", + "description": "Cải thiện OpenStreetMap tại khu vá»±c Rôma", + "extendedDescription": "Chúng ta nhằm mục đích cho phép thảo luận và chia sẻ kiến thức về cách sá»­ dụng kho dữ liệu địa lý mở, nhất là OpenStreetMap, cÅ©ng nhÆ° cách sá»­ dụng phần mềm không gian địa lý mở để quản lý, sá»­a đổi, và hiển thị dữ liệu địa lý. Chúng ta ủng hộ sá»­ dụng dữ liệu mở và phần mềm không gian địa lý mở tại miền Đông Bắc Lazio." + }, + "talk-it-lazio": { + "name": "OpenStreetMap Ý-Lazio", + "description": "Mời bạn tham gia tại {signupUrl}", + "extendedDescription": "Danh sách thÆ° cho khu vá»±c Rôma và Lazio." + }, + "OSM-CA-Slack": { + "name": "Slack OSM Canada", + "description": "Mời bạn tham gia tại {signupUrl}" + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap Vancouver", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở vùng Vancouver, British Columbia" + }, + "Bay-Area-OpenStreetMappers": { + "name": "Cộng đồng OpenStreetMap tại Khu vá»±c vịnh", + "description": "Cải thiện OpenStreetMap tại Khu vá»±c Vịnh San Francisco", + "extendedDescription": "Nhóm này ủng hộ cộng đồng OpenStreetMap của chúng ta ở Khu vá»±c Vịnh San Francisco. Ai cÅ©ng tham gia được các sá»± kiện của chúng ta, kể cả người hâm mộ phần mềm nguồn mở, người đi xe đạp, chuyên gia GIS, người hâm mộ geocaching, và hÆ¡n nữa. Mời mọi người quan tâm về sá»­ dụng bản đồ, xây dá»±ng bản đồ, và dữ liệu bản đồ tham gia nhóm và các sá»± kiện của chúng ta." + }, + "Central-Pennsylvania-OSM": { + "name": "OSM Miền trung Pennsylvania", + "description": "Cộng đồng xây dá»±ng bản đồ trá»±c tuyến ở State College, Pennsylvania" + }, + "Code-for-San-Jose-Slack": { + "name": "Slack Code for San Jose", + "description": "Mời bạn tham gia tại {signupUrl}, rồi tham gia kênh #osm." + }, + "Dallas-Fort-Worth-OSM": { + "name": "OSM Dallas–Fort Worth", + "description": "Nhóm người dùng OpenStreetMap ở vùng Dallas–Fort Worth", + "extendedDescription": "Dallas, Fort Worth, và các thành phố ở giữa có rất nhiều người sáng tạo và khéo léo về công nghệ thông tin. Nhóm người dùng này nhằm mục đích tìm ra những cách mới để sá»­ dụng tài nguyên OSM khá tốt." + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "Cuộc họp mặt cho những người hâm mộ bản đồ ở khu vá»±c Philadelphia", + "extendedDescription": "GeoPhilly liên hiệp các nhà phát triển, nhà địa lý học, người hâm mộ về dữ liệu và dữ liệu mở, “civic hacker”, và người nghiện bản đồ để bày tỏ say mê bản đồ và chia sẻ các câu chuyện trong bản đồ. Nếu bạn sá»­ dụng bản đồ trong việc làm hoặc chỉ muốn tìm hiểu thêm, bạn nên tham gia cuộc họp mặt này! Chúng ta cố gắng tổ chức các sá»± kiện mở rộng, thân thiện, cùng giáo dục cùng giải trí, bao gồm họp mặt tại quán rượu, bài thuyết trình nhanh chóng, và workshop. Mời bạn cùng xây dá»±ng một cộng đồng không gian địa lý đa dạng văn hóa và gây cảm hứng tại Philadelphia!" + }, + "MapMinnesota": { + "name": "MapMinnesota", + "description": "Những người lập bản đồ và người hâm mộ OpenStreetMap ở vùng Thành phố Đôi", + "extendedDescription": "NÆ¡i liên hệ của những người hâm mộ OpenStreetMap ở Minnesota và vùng Thành phố Đôi!" + }, + "Mapping-DC-meetup": { + "name": "Mapping DC", + "description": "Cải thiện OpenStreetMap tại khu vá»±c Washington, D.C.", + "extendedDescription": "Chúng ta tình nguyện xây dá»±ng bản đồ OpenStreetMap tại khu vá»±c Washington, D.C. Nhóm này cÅ©ng nhằm mục đích dạy người khác về hệ sinh thái OSM, môn phân tích dữ liệu, bản đồ học, và GIS. Chúng ta họp mặt hai tháng một lần để tập trung chú ý vào một phần của thành phố này." + }, + "Maptime-ME-meetup": { + "name": "MaptimeME", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở vùng Portland, Maine", + "extendedDescription": "Maptime đúng là thì giờ để lập bản đồ. Chúng ta nhằm mục đích mở cá»­a bản đồ học để cho mọi người có quan tâm có thể lập bản đồ, bằng cách để dành thì giờ và không gian để cộng tác tìm hiểu, khám phá, và lập bản đồ dùng công cụ và công nghệ bản đồ." + }, + "OpenCleveland-meetup": { + "name": "Open Cleveland", + "description": "Cải thiện OpenStreetMap tại khu vá»±c Cleveland", + "extendedDescription": "Open Geo Cleveland nhằm mục đích cho phép thảo luận và chia sẻ kiến thức về cách sá»­ dụng kho dữ liệu địa lý mở, nhất là OpenStreetMap, cÅ©ng nhÆ° cách sá»­ dụng phần mềm không gian địa lý mở để quản lý, sá»­a đổi, và hiển thị dữ liệu địa lý. Chúng ta ủng hộ sá»­ dụng dữ liệu mở và phần mềm không gian địa lý mở tại miền Đông Bắc Ohio. Chúng ta cÅ©ng là một nhánh Maptime. =)" + }, + "OSM-Boston": { + "name": "OpenStreetMap Boston", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở vùng Boston", + "extendedDescription": "OpenStreetMap là bản đồ thế giới mở kiểu wiki nhờ những người nhÆ° bạn đóng góp mỗi ngày hàng trăm ngàn lần. Sá»­a đổi bản đồ là điều đơn giản và thú vị! Hãy tham gia chúng tôi trong nhà và ngoài đường để cùng xây dá»±ng bản đồ đầy đủ nhất của vùng Boston và cả thế giới!" + }, + "OSM-Central-Salish-Sea": { + "name": "OpenStreetMap Biển Salish Trung", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở vùng Mount Vernon, Washington", + "extendedDescription": "OpenStreetMap (OSM) là bản đồ thế giới do những người nhÆ° bạn xây dá»±ng và cho phép mọi người sá»­ dụng miễn phí và vô hạn chế giống nhÆ° Wikipedia. Chúng tôi gặp mặt thường xuyên để nói chuyện vui vẻ về bản đồ và lập bản đồ!" + }, + "OSM-Chattanooga": { + "name": "OSM Chattanooga", + "description": "Nhóm người dùng OpenStreetMap ở Chattanooga" + }, + "OSM-Colorado": { + "name": "OpenStreetMap Colorado", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở tiểu bang Colorado, Hoa Kỳ", + "extendedDescription": "OpenStreetMap Colorado là nhóm địa phÆ°Æ¡ng cố gắng xây dá»±ng bản đồ mở. Chúng tôi khuyên khích mọi thành viên tổ chức hoặc gợi ý các sá»± kiện lập bản đồ ở khắp tiểu bang. Các hoạt động gặp mặt có thể là buổi liên hoan khiêu vÅ© đơn giản, chÆ°Æ¡ng trình huấn luyện về OSM từ căn bản đến nâng cao, hoặc tiệc vẽ bản đồ của cộng đồng." + }, + "OSM-NYC": { + "name": "OpenStreetMap Thành phố New York", + "description": "Những người lập bản đồ và những người sá»­ dụng, nhà phát triển, và người hâm mộ OpenStreetMap ở khu vá»±c đô thị New York" + }, + "OSM-Portland": { + "name": "OpenStreetMap Portland", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở vùng Portland", + "extendedDescription": "OpenStreetMap (OSM) là bản đồ thế giới do những người nhÆ° bạn xây dá»±ng và cho phép mọi người sá»­ dụng miễn phí và vô hạn chế giống nhÆ° Wikipedia. Hãy ghé vào osm.org và gặp mặt chúng ta để nói chuyện vui vẻ về bản đồ và đóng góp vào OSM cùng nhau!" + }, + "OSM-Seattle": { + "name": "OpenStreetMap Seattle", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở vùng Seattle" + }, + "OSM-SoCal": { + "name": "OpenStreetMap Nam Ca Li", + "description": "Hãy vui vẻ đóng góp vào Los Angeles và tìm hiểu cách xây dá»±ng bản đồ!", + "extendedDescription": "OpenStreetMap Nam Ca Li liên hiệp những người nào quan tâm về bản đồ để ủng hộ OpenStreetMap. OSM là Wikipedia của bản đồ, tức bản đồ thế giới mở do hÆ¡n một triệu người tình nguyện xây dá»±ng ở khắp thế giới. Mời mọi người tham gia. Nếu bạn chÆ°a biết đến OpenStreetMap, chúng tôi sẽ giới thiệu cho bạn. Nếu bạn có ý niệm bắt đầu dá»± án bản đồ hoặc dẫn nhóm đi nÆ¡i nào, tuyệt vời!" + }, + "OSM-South-Bay": { + "name": "OSM Miền Nam Vùng Vịnh", + "description": "Buổi tối Bản đồ do Code for San Jose tổ chức", + "extendedDescription": "Code for San Jose là nhánh Code for America địa phÆ°Æ¡ng tổ chức các Buổi tối Bản đồ hàng tháng vào tối thứ 5 dưới phố San José. Gặp mặt những người cùng lập bản đồ ở miền Nam Vùng Vịnh, giúp đỡ các dá»± án xây dá»±ng bản đồ địa phÆ°Æ¡ng, và tìm hiểu về các dá»± án công nghệ công dân (civic tech) khác. Không nhất thiết phải có kinh nghiệm lập trình hoặc GIS." + }, + "OSM-Tampa-Bay": { + "name": "OpenStreetMap Vịnh Tampa", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở vùng vịnh Tampa" + }, + "OSM-US-Slack": { + "name": "Slack OpenStreetMap Hoa Kỳ", + "description": "Mời bạn tham gia tại {signupUrl}" + }, + "OSM-US": { + "name": "OpenStreetMap Hoa Kỳ", + "description": "Chúng ta giúp phát triển và cải thiện OpenStreetMap tại Hoa Kỳ.", + "extendedDescription": "Chúng ta giúp OpenStreetMap bằng cách tổ chức các hội nghị hàng năm, cung cấp tài nguyên cộng đồng, tạo quan hệ đối tác, và truyền bá dá»± án. Mời tham gia OpenStreetMap Hoa Kỳ tại đây: {signupUrl}" + }, + "OSM-Utah": { + "name": "OpenStreetMap Utah", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở vùng Thành phố Salt Lake" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap Wyoming", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở tiểu bang Wyoming, Hoa Kỳ", + "extendedDescription": "OpenStreetMap Wyoming là nhóm địa phÆ°Æ¡ng cố gắng xây dá»±ng bản đồ mở. Chúng tôi khuyên khích mọi thành viên tổ chức hoặc gợi ý các sá»± kiện lập bản đồ ở khắp tiểu bang. Các hoạt động gặp mặt có thể là buổi liên hoan khiêu vÅ© đơn giản, chÆ°Æ¡ng trình huấn luyện về OSM từ căn bản đến nâng cao, hoặc tiệc vẽ bản đồ của cộng đồng." + }, + "PHXGeo-meetup": { + "name": "Họp mặt PHXGeo", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở vùng Phoenix, Arizona", + "extendedDescription": "Nhóm họp mặt dành cho những người ở vùng Phoenix thích bản đồ, GIS, OpenStreetMap, bản đồ học, và đủ mọi thứ." + }, + "PHXGeo-twitter": { + "name": "Twitter PHXGeo", + "description": "Theo dõi chúng tôi trên Twitter: {url}" + }, + "Western-Slope-facebook": { + "name": "Facebook OSM Sườn Tây", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở vùng Grand Junction, Colorado" + }, + "Western-Slope-meetup": { + "name": "Họp mặt OSM Sườn Tây", + "description": "Những người lập bản đồ và người dùng OpenStreetMap ở vùng Grand Junction, Colorado" + }, + "Maptime-Australia-Slack": { + "name": "Slack Maptime Úc", + "description": "Mời bạn tham gia tại {signupUrl}" + }, + "talk-au": { + "name": "Danh sách thÆ° talk-au", + "description": "NÆ¡i trò chuyện của những người Úc lập bản đồ" + }, + "OSM-AR-facebook": { + "name": "Facebook OpenStreetMap Argentina", + "description": "Hãy tham gia cộng đồng OpenStreetMap Argentina tại Facebook" + }, + "OSM-AR-forum": { + "name": "Diễn đàn Web của OpenStreetMap Argentina", + "description": "Hãy tham gia diễn đàn Web của OpenStreetMap Argentina" + }, + "OSM-AR-irc": { + "name": "IRC OpenStreetMap Argentina", + "description": "Hãy tham gia #osm-ar tại irc.oftc.net (cổng 6667)" + }, + "OSM-AR-mailinglist": { + "name": "Danh sách thÆ° talk-ar" + }, + "OSM-AR-telegram": { + "name": "Telegram OpenStreetMap Argentina", + "description": "Hãy tham gia cộng đồng OpenStreetMap Argentina tại Telegram" + }, + "OSM-AR-twitter": { + "name": "Twitter OpenStreetMap Argentina", + "description": "Theo dõi chúng tôi trên Twitter: {url}" + }, + "Bahia-telegram": { + "name": "Nhóm Telegram OpenStreetMap Bahia", + "description": "Hãy tham gia cộng đồng OpenStreetMap Bahia tại Telegram", + "extendedDescription": "Mời mọi người tham gia cộng đồng để tìm hiểu thêm về OpenStreetMap, hỏi đáp, và tham dá»± các cuộc họp mặt của chúng ta." + }, + "OSM-br-mailinglist": { + "name": "Danh sách thÆ° talk-br", + "description": "Danh sách thÆ° để thảo luận về OpenStreetMap tại Brasil" + }, + "OSM-br-telegram": { + "name": "Telegram OpenStreetMap Brasil", + "description": "Hãy tham gia cộng đồng OpenStreetMap Brasil tại Telegram", + "extendedDescription": "Mời mọi người tham gia cộng đồng để tìm hiểu thêm về OpenStreetMap, hỏi đáp, và tham dá»± các cuộc họp mặt của chúng ta." + }, + "OSM-br-twitter": { + "name": "Twitter OpenStreetMap Brasil", + "description": "Theo dõi chúng tôi trên Twitter: {url}" + }, + "OSM-CL-facebook": { + "name": "Facebook OpenStreetMap Chile", + "description": "Hãy tham gia cộng đồng OpenStreetMap Chile tại Facebook", + "extendedDescription": "Mời mọi người tham gia cộng đồng để tìm hiểu thêm về OpenStreetMap, hỏi đáp, và tham dá»± các cuộc họp mặt của chúng ta." + }, + "OSM-CL-mailinglist": { + "name": "Danh sách thÆ° talk-cl", + "description": "Danh sách thÆ° để thảo luận về OpenStreetMap tại Chile" + }, + "OSM-CL-telegram": { + "name": "Telegram OpenStreetMap Chile", + "description": "Hãy tham gia cộng đồng OpenStreetMap Chile tại Telegram", + "extendedDescription": "Mời mọi người tham gia cộng đồng để tìm hiểu thêm về OpenStreetMap, hỏi đáp, và tham dá»± các cuộc họp mặt của chúng ta." + }, + "OSM-CL-twitter": { + "name": "Twitter OpenStreetMap Chile", + "description": "Theo dõi chúng tôi trên Twitter: {url}" + }, + "OSM-Reddit": { + "name": "OpenStreetMap tại Reddit", + "description": "/r/openstreetmap/ là nÆ¡i để tìm hiểu thêm về OpenStreetMap. Có thắc mắc thì hỏi ở đây!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/yue.json b/vendor/assets/iD/iD/locales/yue.json index 2874ca4d8..8d8d854fb 100644 --- a/vendor/assets/iD/iD/locales/yue.json +++ b/vendor/assets/iD/iD/locales/yue.json @@ -441,13 +441,7 @@ } }, "success": { - "edited_osm": "改掂公家街圖!", "just_edited": "你啱啱改咗公家街圖!", - "view_on_osm": "入公家街圖睇", - "facebook": "放上Facebook", - "twitter": "放上Twitter", - "google": "放上Google+", - "help_html": "你改過嘅,幾分鐘就會見到喺「普通」層。其他層,咁啲地貌,就會耐啲。", "help_link_text": "明細", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -1444,9 +1438,6 @@ "trees": { "label": "樹" }, - "vending": { - "label": "貨類" - }, "visibility": { "label": "顯隱", "options": { diff --git a/vendor/assets/iD/iD/locales/zh-CN.json b/vendor/assets/iD/iD/locales/zh-CN.json index e9155a366..8aa7ad646 100644 --- a/vendor/assets/iD/iD/locales/zh-CN.json +++ b/vendor/assets/iD/iD/locales/zh-CN.json @@ -1,5 +1,10 @@ { "zh-CN": { + "icons": { + "information": "信息", + "remove": "删除", + "undo": "复原" + }, "modes": { "add_area": { "title": "区域", @@ -41,7 +46,7 @@ "start": { "annotation": { "line": "开始绘制线。", - "area": "开始绘制面状要素。" + "area": "开始绘制区域。" } }, "continue": { @@ -145,14 +150,16 @@ "vertex": "已连接路径到另一路径。", "line": "已连接路径到一线段。", "area": "已连接路径到一区域。" - } + }, + "relation": "这些要素不能被连接,因为其有冲突的关系成员。", + "restriction": "这些要素不能被连接,因为这样会破坏 “{relation}” 关系。" }, "disconnect": { "title": "分离", "description": "将这些线/区域相互分离。", "key": "D", "annotation": "将线或区域分离。", - "not_connected": "没有足够的线/面来分离。", + "not_connected": "没有足够的线/区域来分离。", "connected_to_hidden": "无法分离,因为其与一隐藏要素相连。", "relation": "无法分离,因为它与一个关系的成员间相连。" }, @@ -271,14 +278,14 @@ "title": "分割", "description": { "line": "在此节点上将这条线分割成两条线。", - "area": "将这个面的边界一分为二。", - "multiple": "在这一节点将线/面的边界一分为二。" + "area": "将这个区域的边界一分为二。", + "multiple": "在这一节点将线/区域的边界一分为二。" }, "key": "X", "annotation": { "line": "切割一条线。", - "area": "分割面要素的边界。", - "multiple": "分割{n}项线段/面的边界。" + "area": "分割区域的边界。", + "multiple": "分割{n}个线/区域的边界。" }, "not_eligible": "不能在线段的首尾进行分割。", "multiple_ways": "太多线段,未能进行分割。", @@ -361,12 +368,12 @@ }, "commit": { "title": "上传至 OpenStreetMap", - "upload_explanation": "您上传的修改将会在所有使用 OpenStreetMap 数据的地图上可见。", - "upload_explanation_with_user": "{user},您上传的修改将会在所有使用 OpenStreetMap 数据的地图上可见。", + "upload_explanation": "您上传的更改将会在所有使用 OpenStreetMap 数据的地图上可见。", + "upload_explanation_with_user": "{user},您上传的更改将会在所有使用 OpenStreetMap 数据的地图上可见。", "request_review": "我想要让其他人复核我的编辑。", "save": "上传", "cancel": "取消", - "changes": "{count}个变更", + "changes": "{count} 个更改", "download_changes": "下载 osmChange 文件", "warnings": "警告", "modified": "已更改", @@ -402,6 +409,7 @@ "key": "H", "title": "历史", "selected": "已选择 {n} 个", + "no_history": "无历史记录(新要素)", "version": "版本", "last_edit": "最近编辑", "edited_by": "编辑者", @@ -592,11 +600,11 @@ }, "partial": { "description": "部分填充", - "tooltip": "仅在面的内部边界附近填充区域。(推荐初学者使用)" + "tooltip": "仅在区域内的边界附近填充。(推荐初学者使用)" }, "full": { "description": "全部填充", - "tooltip": "区域全部填充绘制。" + "tooltip": "在区域内全部填充。" } }, "restore": { @@ -614,7 +622,7 @@ "unknown_error_details": "请确保您已连接到互联网。", "uploading": "正在向 OpenStreetMap 上传更改……", "conflict_progress": "正在检查冲突:第 {num} / {total} 处", - "unsaved_changes": "您有未保存的修改", + "unsaved_changes": "您有未保存的更改", "conflict": { "header": "调解编辑冲突", "count": "第{num}处冲突,共{total}处", @@ -639,15 +647,20 @@ } }, "success": { - "edited_osm": "编辑了 OSM!", "just_edited": "您刚刚编辑了 OpenStreetMap!", - "view_on_osm": "在 OSM 上查看", - "facebook": "分享到Facebook", - "twitter": "分享到 Twitter", - "google": "分享到 Google+", - "help_html": "您的修改将会在几分钟内出现在“标准”图层上,其他图层和某些要素可能需要更长的处理时间。", + "thank_you": "感谢您改进地图。", + "thank_you_location": "感谢您改进 {where} 周边的地图。", + "help_html": "您的更改将会在几分钟内于 OpenStreetMap 上显示。其他地图可能需要更长的时间接收更新。 ", "help_link_text": "详情", - "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F", + "view_on_osm": "在 OSM 上查看更改", + "changeset_id": "您的变更集合 #: {changeset_id}", + "like_osm": "喜欢 OpenStreetMap 吗?不妨与更多人联系:", + "more": "更多", + "events": "事件", + "languages": "语言:{languages}", + "missing": "该列表里有遗漏的信息吗?", + "tell_us": "告诉我们!" }, "confirm": { "okay": "确定", @@ -756,7 +769,7 @@ "save": "点击 {save} **保存** 以完成您的编辑并发送至 OpenStreetMap。请您牢记:要经常保存您的编辑!", "save_validation": "在保存界面,您有机会再次检查您所做的编辑。iD 也会做相应的基本检查确保无数据缺失,并且会在不适当的地方提供有用的建议或警告。", "upload_h": "上传", - "upload": "在上传您所做的修改之前,您必须输入一段 [修改集合注释](https://wiki.openstreetmap.org/wiki/Good_changeset_comments) 。接着点击 **上传** 将您的编辑发送至 OpenStreetMap,之后它们将会被合并到地图并且对所有人公开可见。", + "upload": "在上传您所做的更改之前,您必须输入一段 [变更集合注释](https://wiki.openstreetmap.org/wiki/Good_changeset_comments)。接着点击 **上传** 将您的编辑发送至 OpenStreetMap,之后它们将会被合并到地图并且对所有人公开可见。", "backups_h": "自动备份", "backups": "如果您一时无法结束您的编辑,例如您的计算机宕机或者关闭了浏览器标签页,您所做的编辑仍会被保存在浏览器存储中。您可以稍后回来(在相同的计算机和浏览器上),然后由 iD 恢复您之前的编辑。", "keyboard_h": "键盘快捷键", @@ -981,7 +994,7 @@ }, "areas": { "title": "区域", - "add_playground": "*区域* 用来显示诸如湖泊、建筑物或居民区等要素的边界。{br}他们亦可作为一种更细致的绘制方式,以替代普通地用点来标记的方式。 **点击 {button} 区域按钮来添加一个新的区域。**", + "add_playground": "*区域* 用来显示诸如湖泊、建筑物或居民区等要素的边界。{br}他们亦可作为相较于用点来标记要素而言更为细致的绘制方式。 **点击 {button} 区域按钮来添加一个新的区域。**", "start_playground": "让我们用描绘一个区域的方式来添加这个游乐场吧。区域是通过在要素的外部轮廓上放置若干 *节点* 来描绘。 **点击或按空格键,在游乐场的其中一角放置一个起始节点。**", "continue_playground": "继续在游乐场的轮廓上放置更多的节点来绘制该区域。如果遇到既有的人行道,你也可以将区域连接到人行道上。{br}提示:您可以按下{alt}键以防止节点连接到其他要素上。 **继续绘制游乐场区域。**", "finish_playground": "按回车键、或再次点击起始/结束节点来结束绘制该区域。 **完成勾画该游乐场的轮廓。**", @@ -1025,7 +1038,7 @@ }, "buildings": { "title": "建筑物", - "add_building": "OpenStreetMap 是世界上最大的建筑物数据库。{br}您可以通过勾画未被标记的建筑物来帮助改进该数据库。 **点击 {button} 面按钮来添加一个新的区域。**", + "add_building": "OpenStreetMap 是世界上最大的建筑物数据库。{br}您可以通过勾画未被标记的建筑物来帮助改进该数据库。 **点击 {button} 区域按钮来添加一个新的区域。**", "start_building": "让我们通过勾画这个房屋的轮廓来添加它。{br}建筑物应该尽可能准确地勾画在他们的底部周围。 **点击或按空格键,在建筑物的一处角落放置一个起始节点。**", "continue_building": "继续在建筑物的轮廓上添加一些更多的节点。别忘您还可以放大地图来添加更多细节。{br}按回车键、或再次点击起始/结束节点来结束绘制建筑物。 **完成勾画建筑物的轮廓。**", "retry_building": "看起来您在建筑物角落上放置节点时遇到了困难。请重试!", @@ -1036,7 +1049,7 @@ "square_building": "如果能使您刚才创建的房屋拥有完美的直角那就更好了。 **点击 {button} 按钮使建筑物轮廓直角化。**", "retry_square": "您并未点击直角化按钮。请重试。", "done_square": "看见了建筑物的边角是如何规整的吗?让我们学习另一个有用的小技巧。", - "add_tank": "接下来我们将勾画这个圆形储罐的轮廓。 **点击 {button} 面按钮来添加一个新的区域。**", + "add_tank": "接下来我们将勾画这个圆形储罐的轮廓。 **点击 {button} 区域按钮来添加一个新的区域。**", "start_tank": "不用担心,您不需要画出一个完美的圆。只需要在储罐上画一个区域,使其节点接触到储罐的边缘。 **点击或按空格键,在储罐的边缘处放置一个起始节点。**", "continue_tank": "在其边缘处添加一些更多的节点。之后圆将会创建在您勾画的节点外部。{br}按回车键、或再次点击起始/结束节点来结束绘制该区域。 **完成勾画该储罐的轮廓。**", "search_tank": "**搜索 '{preset}' 。**", @@ -1496,7 +1509,7 @@ "label": "收取时间" }, "comment": { - "label": "修改集合注释", + "label": "变更集合注释", "placeholder": "请简要说明您的贡献 (必填)" }, "communication_multi": { @@ -1586,6 +1599,9 @@ "cycleway:right": "右侧" } }, + "dance/style": { + "label": "舞蹈类型" + }, "date": { "label": "日期" }, @@ -1648,9 +1664,15 @@ "forward": "向前" } }, + "dispensing": { + "label": "开处方药" + }, "display": { "label": "表盘显示类型" }, + "distance": { + "label": "总距离" + }, "dock": { "label": "类型" }, @@ -1691,6 +1713,9 @@ "except": { "label": "异常" }, + "faces": { + "label": "面数" + }, "fax": { "label": "传真", "placeholder": "+31 42 123 4567" @@ -1802,6 +1827,39 @@ "label": "篮圈数", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "label": "花式骑术", + "options": { + "equestrian": "是", + "undefined": "否" + } + }, + "horse_riding": { + "label": "马背骑行", + "options": { + "horse_riding": "是", + "undefined": "否" + } + }, + "horse_scale": { + "label": "马背骑行难度", + "options": { + "common": "简单:没有难度或障碍。(默认)", + "critical": "临界:仅适用于有经验的骑手和马匹。有主要的障碍。需要仔细检查桥梁。", + "dangerous": "危险:仅适用于在天气好的时候,非常有经验的骑手和马匹。需要下马。", + "demanding": "谨慎:不平缓的路面,偶尔有困难的路径。", + "difficult": "困难:狭窄并裸露的路径。可能有需要跨越的障碍物和狭窄的通道。", + "impossible": "无法通行:不适合马匹的路径或桥梁。路径太过狭窄,有不足的支撑物,和如梯子般的障碍。会有生命危险。" + }, + "placeholder": "简单, 困难, 危险..." + }, + "horse_stables": { + "label": "骑马练习", + "options": { + "stables": "是", + "undefined": "否" + } + }, "iata": { "label": "IATA(国际航空运输协会)" }, @@ -1821,6 +1879,9 @@ "indoor": { "label": "室内" }, + "industrial": { + "label": "类型" + }, "information": { "label": "类型" }, @@ -1941,6 +2002,10 @@ "label": "限制速度", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "label": "建议限速", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "可停留时间" }, @@ -1972,16 +2037,16 @@ "3": "困难(黑色钻石型)", "4": "极端困难(双重黑色钻石型)" }, - "placeholder": "简单,中等,困难..." + "placeholder": "简单, 中等, 困难..." }, "mtb/scale/uphill": { "label": "山地自行车上坡难度", "options": { - "0": "0:平均坡度小于10%时,有碎石/夯实的地面,没有障碍物", + "0": "0:平均坡度小于10%,有碎石/夯实的地面,没有障碍物", "1": "1:平均坡度小于15%,有碎石/夯实的地面,有些许障碍物", - "2": "2:平均坡度小于20,坚实的地面,拳头大的石头/树根", - "3": "3:平均坡度25%,多变的平面,拳头大的石头/树墙", - "4": "4:平均坡度小于30%时,很糟的路面状况,大石头/树墙", + "2": "2:平均坡度小于20%,坚实的地面,拳头大的石头/树根", + "3": "3:平均坡度小于25%,多变的平面,拳头大的石头/树墙", + "4": "4:平均坡度小于30%,很糟的路面状况,大石头/树墙", "5": "5:很陡,单车得牵行或扛车" }, "placeholder": "0, 1, 2, 3..." @@ -2321,7 +2386,7 @@ "very_bad": "轻量化:低负重越野车辆", "very_horrible": "越野专用:拖拉机,全地形越野车" }, - "placeholder": "轴承,轮胎,越野" + "placeholder": "轴承, 轮胎, 越野..." }, "social_facility": { "label": "类型" @@ -2462,7 +2527,7 @@ "grade4": "近柔性铺面:土壤,砂土与草地混合其他刚性材质", "grade5": "柔性铺面:只有土壤,砂土与草地" }, - "placeholder": "坚硬地面,硬物铺面,软铺面" + "placeholder": "坚硬地面, 硬物铺面, 软铺面..." }, "trade": { "label": "类型" @@ -2513,8 +2578,16 @@ "label": "类型", "placeholder": "默认" }, - "vending": { - "label": "商品类型" + "usage_rail": { + "label": "使用类型", + "options": { + "branch": "支线", + "industrial": "工业", + "main": "主线", + "military": "军用", + "test": "测试线", + "tourism": "观光线" + } }, "visibility": { "label": "能见度", @@ -2609,6 +2682,10 @@ "name": "广告牌", "terms": "广告牌,广告,牌" }, + "advertising/column": { + "name": "广告柱", + "terms": "广告,广告柱,广告亭,广告牌,柱" + }, "aerialway": { "name": "缆车线路" }, @@ -2755,14 +2832,14 @@ }, "amenity/bureau_de_change": { "name": "货币兑换", - "terms": "货币兑换" + "terms": "货币兑换,货币,兑换,外币,人民币,银行,钱,汇率,牌价" }, "amenity/bus_station": { "name": "公交车站 / 枢纽站" }, "amenity/cafe": { "name": "咖啡馆", - "terms": "咖啡厅,茶座,小餐馆,咖啡,小餐厅" + "terms": "咖啡,茶,咖啡厅,咖啡馆,茶座,摩卡,拿铁,馥芮白,玛奇朵,卡布奇诺,红茶,黄茶,清茶,青茶,绿茶,花茶,黑茶,白茶,乌龙,咖啡豆,餐馆,餐厅" }, "amenity/car_rental": { "name": "汽车租赁", @@ -2910,6 +2987,10 @@ "name": "图书馆", "terms": "图书馆" }, + "amenity/love_hotel": { + "name": "爱情宾馆", + "terms": "爱情,情趣,性爱,寻欢,爱情宾馆" + }, "amenity/marketplace": { "name": "市场", "terms": "市场,菜市场" @@ -2920,7 +3001,7 @@ }, "amenity/music_school": { "name": "音乐学校", - "terms": "音乐学校,艺术学校" + "terms": "音乐,乐曲,歌唱,唱歌,合唱,学校,学院,培训,艺术,学习" }, "amenity/nightclub": { "name": "夜总会", @@ -3112,46 +3193,70 @@ }, "amenity/vending_machine/cigarettes": { "name": "香烟售货机", - "terms": "香烟售货机,香烟贩卖机" + "terms": "香烟,烟草,售货,售卖,自助,付货,零售,贩卖,售货机,贩卖机" + }, + "amenity/vending_machine/coffee": { + "name": "咖啡售货机", + "terms": "咖啡,摩卡,拿铁,馥芮白,玛奇朵,卡布奇诺,咖啡豆,售货,售卖,自助,自动,付货,零售,贩卖,售货机,贩卖机,饮品,饮料,æ°´" }, "amenity/vending_machine/condoms": { "name": "避孕套售货机", - "terms": "避孕套售货机,避孕套贩卖机" + "terms": "避孕套,安全套,避孕,售货,售卖,自助,自动,付货,零售,贩卖,售货机,贩卖机" }, "amenity/vending_machine/drinks": { "name": "饮料售货机", - "terms": "饮料售货机,饮品售货机,饮品贩卖机" + "terms": "饮料,饮品,售货,售卖,自助,自动,付货,零售,贩卖,售货机,贩卖机,æ°´,果汁,汽水,咖啡,奶茶,茶" + }, + "amenity/vending_machine/electronics": { + "name": "电器售货机", + "terms": "电器,电子,元件,器件,充电器,电线,充电线,插头,耳机,手机,平板,插头,插座,接口,售货,售卖,自助,自动,付货,零售,贩卖,售货机,贩卖机" + }, + "amenity/vending_machine/elongated_coin": { + "name": "纪念币压制机", + "terms": "纪念币,硬币,压制,纪念品,零钱,售货,售卖,自助,自动,付货,零售,贩卖,售货机,贩卖机" }, "amenity/vending_machine/excrement_bags": { "name": "粪便袋售货机", - "terms": "粪便袋售货机" + "terms": "粪便袋,粪便,屎,狗屎,售货,售卖,自助,自动,付货,零售,贩卖,售货机,贩卖机" }, "amenity/vending_machine/feminine_hygiene": { "name": "女性卫生用品售货机", - "terms": "女,女性,避孕套,安全套,月经,棉条,卫生巾,卫生,私人,售货,售卖,贩卖,自助,自动,付货,零售" + "terms": "女,女性,避孕套,安全套,月经,棉条,卫生巾,卫生,私人,售货,售卖,自助,自动,付货,零售,贩卖,售货机,贩卖机" + }, + "amenity/vending_machine/food": { + "name": "食物售货机", + "terms": "食物,售货,售卖,自助,自动,付货,零售,贩卖,售货机,贩卖机,吃,食" + }, + "amenity/vending_machine/ice_cream": { + "name": "冰淇淋售货机", + "terms": "冰淇淋,冰激淋,冰激凌,冰淇凌,冷饮,雪糕,冰沙,冰砖,冰棒,棒冰,售货,售卖,贩卖,售货机,自助,自动,付货,零售" }, "amenity/vending_machine/news_papers": { "name": "报纸售货机" }, "amenity/vending_machine/newspapers": { - "name": "自动售报机", - "terms": "报,报纸,售货,售卖,自助,自动,付货,零售" + "name": "报纸售货机", + "terms": "报,报纸,售货,售卖,自助,自动,付货,零售,贩卖,售货机,贩卖机" }, "amenity/vending_machine/parcel_pickup_dropoff": { "name": "行李提取/装卸机", - "terms": "行李提取机,行李装卸机" + "terms": "行李,包裹,背包,提取,装卸,提取机,装卸机" }, "amenity/vending_machine/parking_tickets": { "name": "停车缴费机", - "terms": "停车缴费机,停车售票机" + "terms": "停车,停车场,ç¼´è´¹,售票,缴费机,售票机" }, "amenity/vending_machine/public_transport_tickets": { "name": "公共交通售票机", - "terms": "公共交通售票机" + "terms": "售票,车票,售票处,贩卖,售票机,售货机,自助,自动,票,票务,公共交通,公交,巴士,地铁,火车,电车,轮船,渡轮" + }, + "amenity/vending_machine/stamps": { + "name": "邮票售货机", + "terms": "邮票,邮局,邮费,售货,售卖,贩卖,售货机,自助,自动,付货,零售" }, "amenity/vending_machine/sweets": { "name": "零食售货机", - "terms": "零食贩卖机" + "terms": "零食,点心,小食,售货,售卖,贩卖,售货机,自助,自动,付货,零售,食物" }, "amenity/veterinary": { "name": "动物医院", @@ -3221,6 +3326,10 @@ "name": "跳楼机", "terms": "跳楼机,跳楼,自由落体,蹦极,太空梭,垂直极限,天地双雄,穿越云霄,大怒神,下落,下坠,坠落,跌落,高塔,飞天,游乐设施,游乐,游艺,娱乐,乐园,游乐园,主题乐园,儿童乐园,景点" }, + "attraction/maze": { + "name": "迷宫", + "terms": "迷宫,景点,旅游,游乐设施,游乐" + }, "attraction/pirate_ship": { "name": "海盗船", "terms": "海盗船,海盗,鬼魂,摆动,谷底,游乐设施,游乐,游艺,娱乐,乐园,游乐园,主题乐园,儿童乐园,景点" @@ -3288,6 +3397,10 @@ "name": "树篱", "terms": "树篱" }, + "barrier/kerb": { + "name": "路缘", + "terms": "路缘,路缘带,路肩,边缘,行车带,人行道,无障碍,公路,马路" + }, "barrier/kissing_gate": { "name": "单人转门", "terms": "单人转门" @@ -3328,6 +3441,10 @@ "name": "谷仓", "terms": "粮仓,畜棚,库房" }, + "building/boathouse": { + "name": "船库", + "terms": "船,船库,船坞,船屋,停船,仓库,码头,避风塘" + }, "building/bunker": { "name": "煤仓" }, @@ -3453,6 +3570,10 @@ "building/train_station": { "name": "列车站" }, + "building/transportation": { + "name": "公共交通建筑", + "terms": "公交,公共交通,终点站,总站,火车站,车站,交通,运输,大楼,建筑,建筑物" + }, "building/university": { "name": "大学建筑", "terms": "大学,建筑,教学楼,实验室,校舍,宿舍,学院,院校,大专,校园,学校,学习" @@ -3465,6 +3586,9 @@ "name": "宿营位", "terms": "宿营位,露营位,野营位,露营地,野营地,露营场,野营场,露营,野营,野营场地,露营场地,宿营地,宿营,扎营,帐篷,野外,荒野,郊野,郊外,度假" }, + "circular": { + "name": "信号控制环岛" + }, "club": { "name": "俱乐部", "terms": "俱乐部,社团,夜总会,会所,可乐部,社交,组织,娱乐,社区,会议,驿站,平台,会,汇,社会,文化,团体,会员" @@ -3618,6 +3742,10 @@ "name": "脚手架搭建工", "terms": "脚手架搭建工,搭脚手架的人" }, + "craft/sculptor": { + "name": "雕塑工作室", + "terms": "雕塑,雕塑家,工作室,手艺,工艺,艺术,艺术品,雕刻,石膏,树脂,粘土,黏土" + }, "craft/shoemaker": { "name": "鞋匠", "terms": "鞋匠,制鞋店" @@ -3791,6 +3919,10 @@ "name": "临终安养院", "terms": "临终,善终,安宁,宁养,安养,关怀,保守,疾病,病房,垂死,致命,癌症,晚期,末期,死亡,诊所,医院,医学,医疗,疗法,卫生" }, + "healthcare/laboratory": { + "name": "医学实验室", + "terms": "医学,医学院,实验室,实验,研究所,研究院,医疗,血" + }, "healthcare/midwife": { "name": "助产士", "terms": "接产,看产,助产,生育,妊娠,分娩,孕,产妇,稳婆,产婆,收生,执妈,婴儿,妇科,妇产科,诊所,医院,医学,医疗,疗法,卫生,护士" @@ -3902,7 +4034,8 @@ "terms": "公交,公交站,公交车,巴士,大巴,客车,车站,站台" }, "highway/pedestrian_line": { - "name": "步行街" + "name": "步行街", + "terms": "步行街,广场,人行道,步道,购物中心" }, "highway/primary": { "name": "主要道路", @@ -4136,7 +4269,8 @@ "terms": "废料场" }, "landuse/industrial/slaughterhouse": { - "name": "屠宰场" + "name": "屠宰场", + "terms": "å± å®°,屠宰场,宰杀,牲畜,牛,猪,鸡,羊,肉,禽" }, "landuse/landfill": { "name": "垃圾填埋区", @@ -4167,7 +4301,7 @@ "terms": "检查点,检查站,检查,边检" }, "landuse/military/danger_area": { - "name": "危险区域", + "name": "军事危险区域", "terms": "危险区" }, "landuse/military/naval_base": { @@ -4215,7 +4349,8 @@ "terms": "绿地" }, "landuse/religious": { - "name": "宗教场所" + "name": "宗教场所", + "terms": "宗教,国教,ä¿¡ä»°,崇拜,基督教,天主教,东正教,佛教,伊斯兰教,印度教,儒教,道教,神道教,本教,锡克教,场所" }, "landuse/residential": { "name": "居民区", @@ -4237,6 +4372,10 @@ "name": "成人街机厅", "terms": "成人街机厅,成人街机店" }, + "leisure/beach_resort": { + "name": "海滩度假区", + "terms": "海滩,沙滩,海岸,河滩,湖滨,沙子,沙,度假,度假区,游泳,冲浪" + }, "leisure/bird_hide": { "name": "观鸟点", "terms": "观鸟点,观鸟屋,鸟屋" @@ -4253,6 +4392,10 @@ "name": "舞厅", "terms": "舞厅,舞蹈,舞蹈房,舞池,跳舞" }, + "leisure/dancing_school": { + "name": "舞蹈学校", + "terms": "舞蹈,跳舞,舞,芭蕾,探戈,爵士,学校,学院,培训,拉丁舞,艺术,学习" + }, "leisure/dog_park": { "name": "狗公园", "terms": "狗公园,狗狗公园" @@ -4386,7 +4529,8 @@ "terms": "跑步,跑道,操场,跑" }, "leisure/sauna": { - "name": "桑拿" + "name": "桑拿", + "terms": "桑拿,桑拿房,桑拿浴,浴室,蒸汽,按摩" }, "leisure/slipway": { "name": "船台", @@ -4428,6 +4572,10 @@ "name": "坑道入口", "terms": "坑道入口,矿道入口" }, + "man_made/antenna": { + "name": "天线杆塔", + "terms": "天线,天线杆,天线塔,电话,通讯,手机,无线电,电视,广播,频道,电台,信号塔" + }, "man_made/breakwater": { "name": "防波堤", "terms": "避风塘,避风港" @@ -4475,6 +4623,10 @@ "name": "瞭望塔", "terms": "瞭望塔" }, + "man_made/observatory": { + "name": "天文台", + "terms": "天文台,天文,天象,天体,观测,气象台,瞭望台,望远镜,观星,星星,光学,射电" + }, "man_made/petroleum_well": { "name": "油井", "terms": "油井" @@ -4599,6 +4751,10 @@ "name": "荒野", "terms": "荒野" }, + "natural/mud": { + "name": "淤泥", + "terms": "æ³¥,淤泥,泥土,湿地,泥巴,淤渣,烂泥,土" + }, "natural/peak": { "name": "山峰", "terms": "山峰" @@ -4672,16 +4828,19 @@ "terms": "办公室,写字楼" }, "office/accountant": { - "name": "会计师事务所" + "name": "会计师事务所", + "terms": "会计,事务所,会计师,审计,会计,咨询,税务,è´¦" }, "office/administrative": { "name": "行政楼" }, "office/adoption_agency": { - "name": "领养中介" + "name": "领养中介", + "terms": "领养,收养,孤儿,孤儿院,留守" }, "office/advertising_agency": { - "name": "广告中介" + "name": "广告中介", + "terms": "广告,营销,中介,机构,市场营销,盈利,营利,传媒" }, "office/architect": { "name": "建筑事务所", @@ -4692,7 +4851,12 @@ "terms": "非盈利机构办公室" }, "office/charity": { - "name": "慈善机构" + "name": "慈善机构", + "terms": "慈善,公益,基金,基金会,捐款,机构,组织,非营利,非盈利,非公募" + }, + "office/company": { + "name": "企业公司", + "terms": "公司,企业,办公室" }, "office/coworking": { "name": "共享办公空间", @@ -4707,7 +4871,8 @@ "terms": "就业机构" }, "office/energy_supplier": { - "name": "电力公司" + "name": "电力公司", + "terms": "电力,电源,电,能源,煤气,天然气,电网,公司" }, "office/estate_agent": { "name": "地产代理", @@ -4718,7 +4883,8 @@ "terms": "金融机构" }, "office/forestry": { - "name": "林务管理" + "name": "林务管理", + "terms": "护林,林务,保护,林业,树林,森林,巡逻,林" }, "office/foundation": { "name": "基金办公室", @@ -4737,14 +4903,16 @@ "terms": "税局" }, "office/guide": { - "name": "导游机构" + "name": "导游机构", + "terms": "导游,旅行,旅行社,旅游,游览,潜水,登山,爬山" }, "office/insurance": { "name": "保险公司", "terms": "保险公司" }, "office/it": { - "name": "IT公司" + "name": "IT公司", + "terms": "电脑,信息,科技,信息科技,软件,工程,编程,计算机,公司,it" }, "office/lawyer": { "name": "律师事务所", @@ -4754,7 +4922,8 @@ "name": "公证处" }, "office/moving_company": { - "name": "搬家公司" + "name": "搬家公司", + "terms": "搬家,搬床,搬场,动迁,装修" }, "office/newspaper": { "name": "报社", @@ -4765,7 +4934,8 @@ "terms": "非政府组织" }, "office/notary": { - "name": "公证处" + "name": "公证处", + "terms": "公证,公证处,契约,保证,签名,学历,学位,成绩,刑事,婚姻,出生,委托,遗嘱,遗产,继承,声明,机构,抽奖,拍卖,证据" }, "office/physician": { "name": "医生" @@ -4775,17 +4945,20 @@ "terms": "政党" }, "office/private_investigator": { - "name": "私家侦探事务所" + "name": "私家侦探事务所", + "terms": "侦探,私家,私家侦探,私人,侦查,侦察,民商,调查,推理,行踪,诈骗,取证,警察,警官" }, "office/quango": { - "name": "准非政府组织" + "name": "准非政府组织", + "terms": "非政府,民意,民间,政府,组织,自治,自主,非盈利,非营利" }, "office/research": { "name": "研究所", "terms": "研究所" }, "office/tax_advisor": { - "name": "税务顾问机构" + "name": "税务顾问机构", + "terms": "税,税务,税收,经济,顾问,机构" }, "office/telecommunication": { "name": "电信办公室", @@ -4799,7 +4972,8 @@ "name": "旅行社" }, "office/water_utility": { - "name": "水务设施机构" + "name": "水务设施机构", + "terms": "水务,水源,设施,机构,æ°´,自来水,废水,污水" }, "piste": { "name": "滑雪道", @@ -5357,7 +5531,7 @@ }, "shop/coffee": { "name": "咖啡豆/粉店", - "terms": "咖啡豆店,咖啡粉店" + "terms": "咖啡,咖啡豆,咖啡粉,商店,摩卡,拿铁,馥芮白,玛奇朵,卡布奇诺" }, "shop/computer": { "name": "电脑店", @@ -5655,7 +5829,7 @@ }, "shop/tea": { "name": "茶叶商店", - "terms": "茶叶商店,茶店" + "terms": "茶,茶叶,茶店,茶品,红茶,黄茶,清茶,青茶,绿茶,花茶,黑茶,白茶,乌龙,商店" }, "shop/ticket": { "name": "售票处", @@ -5717,7 +5891,8 @@ "terms": "武器店" }, "shop/wholesale": { - "name": "批发市场" + "name": "批发市场", + "terms": "批发,市场,超市,商业,零售,商场,卖场,商城,商品,百货,服装,农贸,菜场,农场" }, "shop/window_blind": { "name": "百叶窗店", @@ -5820,7 +5995,8 @@ "terms": "景点" }, "tourism/wilderness_hut": { - "name": "野外住宿小屋" + "name": "野外住宿小屋", + "terms": "野外,郊野,荒郊,野营,宿营,营地,探险,旅游,小屋,木屋,草屋,屋,住宿" }, "tourism/zoo": { "name": "动物园", @@ -5883,31 +6059,35 @@ }, "type/restriction/no_left_turn": { "name": "禁止左转", - "terms": "禁止左转弯" + "terms": "左转,禁止左转,不许左转,允许右转,允许直行,允许掉头" }, "type/restriction/no_right_turn": { "name": "禁止右转", - "terms": "禁止右转弯" + "terms": "右转,禁止右转,不许右转,允许左转,允许直行,允许掉头" }, "type/restriction/no_straight_on": { "name": "禁止直行", - "terms": "禁止直行" + "terms": "直行,禁止直行,不许直行,允许左转,允许掉头,允许右转" }, "type/restriction/no_u_turn": { "name": "禁止掉头", - "terms": "禁止掉头" + "terms": "掉头,禁止掉头,不许掉头,允许左转,允许直行,允许右转" }, "type/restriction/only_left_turn": { - "name": "仅左转", - "terms": "仅左转" + "name": "仅限左转", + "terms": "左转,仅左转,大转,禁止右转,禁止直行,禁止掉头" }, "type/restriction/only_right_turn": { - "name": "仅右转", - "terms": "仅右转" + "name": "仅限右转", + "terms": "右转,仅右转,小转,禁止左转,禁止直行,禁止掉头" }, "type/restriction/only_straight_on": { - "name": "禁止转向", - "terms": "禁止转向" + "name": "仅限直行", + "terms": "直行,仅直行,禁止左转,禁止右转,禁止掉头" + }, + "type/restriction/only_u_turn": { + "name": "仅限掉头", + "terms": "掉头,仅掉头,禁止左转,禁止直行,禁止右转" }, "type/route": { "name": "线路", @@ -6070,7 +6250,7 @@ "attribution": { "text": "使用条款与意见反馈" }, - "description": "影像边界和拍摄日期。标签会在缩放到14层级或更高时显示。", + "description": "影像边界和拍摄日期。标签会在缩放到13层级或更高时显示。", "name": "DigitalGlobe 优质影像年份" }, "DigitalGlobe-Standard": { @@ -6084,7 +6264,7 @@ "attribution": { "text": "使用条款与意见反馈" }, - "description": "影像边界和拍摄日期。标签会在缩放到14层级或更高时显示。", + "description": "影像边界和拍摄日期。标签会在缩放到13层级或更高时显示。", "name": "DigitalGlobe 标准影像年份" }, "EsriWorldImagery": { @@ -6168,6 +6348,10 @@ "description": "黄色 = 来自美国人口调查局的公共领域地图数据。红色 = 在 OpenStreetMap 中找不到数据。", "name": "TIGER 道路 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "公路:绿色线框 = 未分级。棕色线框 = 未铺设路面。表面:沙砾 = 浅棕色填充,沥青 = 黑色,已铺设 = 灰色,土地 = 白色,混凝土 = 蓝色,草地 = 绿色。季节性 = 白色条状", + "name": "美国森林道路叠加层" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org, OpenStreetMap 贡献者, 署名-相同方式共享 3.0" @@ -6202,7 +6386,7 @@ "attribution": { "text": "basemap.at" }, - "description": "基于政府数据的奥地利底图", + "description": "基于政府数据的奥地利底图。", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6264,7 +6448,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "地图瓦片由 Stamen 设计,并以 署名 3.0 协议授权" + "text": "地图瓦片由 Stamen 设计,并以 署名 3.0 协议授权。数据由 OpenStreetMap 提供并采用开放数据共享开放数据库许可协议 (ODbL) 授权。" }, "name": "Stamen 地形" }, @@ -6280,6 +6464,507 @@ }, "name": "Thunderforest 地貌" } + }, + "community": { + "cape-coast-youthmappers": { + "name": "海岸角大学 YouthMappers", + "description": "在 Twitter 上关注我们:{url}", + "extendedDescription": "此为加纳海岸角大学在 Youth Mappers 上的官方章节。我们热爱地图、开放数据以及帮助弱势群体。" + }, + "osm-gh-facebook": { + "name": "OpenStreetMap 加纳 Facebook 主页", + "description": "为对 OpenStreetMap 感兴趣的用户准备的 Facebook 小组。", + "extendedDescription": "位于加纳的绘图者社区,在加纳宣传 OpenStreetMap 以及人道主义 OpenStreetMap 团队 (HOT) 项目。加入我们。" + }, + "osm-gh-twitter": { + "name": "OpenStreetMap 加纳 Twitter 主页", + "description": "在 Twitter 上关注我们:{url}" + }, + "talk-gh": { + "name": "Talk-gh 邮件列表", + "description": "Talk-gh 是为加纳 OSM 社区准备的官方邮件列表" + }, + "osm-mg-facebook": { + "name": "OpenStreetMap 马达加斯加 Facebook 小组", + "description": "为对 OpenStreetMap 感兴趣的用户准备的马达加斯加 Facebook 小组。" + }, + "talk-mg": { + "name": "Talk-mg 邮件列表", + "description": "位于马达加斯加的 OpenStreetMap 贡献者、社区和用户分享和讨论的地方。" + }, + "OSM-BGD-facebook": { + "name": "OpenStreetMap 孟加拉国", + "description": "改进位于孟加拉国的 OpenStreetMap", + "extendedDescription": "在孟加拉国绘图?有任何疑问,想要与当地的社区交流?在 {Url} 加入我们。欢迎所有人!" + }, + "OSM-India-facebook": { + "name": "OpenStreetMap 印度 - 共同参与的街区绘图", + "description": "改进位于印度的 OpenStreetMap", + "extendedDescription": "在印度绘图?有任何疑问,想要与当地的社区交流?在 {Url} 加入我们。欢迎所有人!", + "events": { + "sotmasia2018": { + "name": "State of the Map 亚洲 2018", + "description": "加入位于印度的 State of the Map 亚洲的2018å¹´ OpenStreetMap 地区活动。", + "where": "印度管理学院,印度班加罗尔" + } + } + }, + "OSM-india-mailinglist": { + "name": "OpenStreetMap 印度邮件列表", + "description": "Talk-in 是为印度社区准备的官方邮件列表" + }, + "OSM-india-twitter": { + "name": "OpenStreetMap 印度 Twitter", + "description": "我们之间仅差一条推文:{url}" + }, + "OSM-India-Puducherry-Facebook": { + "name": "自由软硬件运动 (FSHM) - Facebook", + "description": "在 FSHM Facebook 主页上了解更多社区事件和活动" + }, + "OSM-India-Puducherry-Matrix": { + "name": "自由软硬件运动 (FSHM) - Matrix" + }, + "OSM-IDN-facebook": { + "name": "OpenStreetMap 印度尼西亚", + "description": "改进位于印度尼西亚的 OpenStreetMap", + "extendedDescription": "在印度尼西亚绘图?有任何疑问,想要与当地的社区交流?在 {Url} 加入我们。欢迎所有人!" + }, + "OSM-japan-facebook": { + "name": "OpenStreetMap 日本社区", + "description": "在日本的绘图者和 OpenStreetMap 用户" + }, + "OSM-japan-mailinglist": { + "name": "OpenStreetMap 日本邮件列表", + "description": "Talk-ja 是为日本社区准备的官方邮件列表" + }, + "OSM-japan-twitter": { + "name": "OpenStreetMap 日本 Twitter", + "description": "Twitter 上的#标签:{url}" + }, + "OSM-MY-forum": { + "name": "OpenStreetMap 马来西亚论坛", + "description": "官方 OpenStreetMap 马来西亚论坛" + }, + "OSM-MY-matrix": { + "name": "OpenStreetMap 马来西亚 Riot 频道", + "description": "欢迎所有的绘图者!在 {signupUrl} 上注册。" + }, + "OSM-MNG-facebook": { + "name": "OpenStreetMap 蒙古", + "description": "改进位于蒙古的 OpenStreetMap", + "extendedDescription": "在蒙古绘图?有任何疑问,想要与当地的社区交流?在 {Url} 加入我们。欢迎所有人!" + }, + "OSM-MMR-facebook": { + "name": "OpenStreetMap 缅甸", + "description": "改进位于缅甸的 OpenStreetMap", + "extendedDescription": "在缅甸绘图?有任何疑问,想要与当地的社区交流?在 {Url} 加入我们。欢迎所有人!" + }, + "OSM-Nepal-facebook": { + "name": "OpenStreetMap 尼泊尔", + "description": "改进位于尼泊尔的 OpenStreetMap", + "extendedDescription": "在尼泊尔绘图?有任何疑问,想要与当地的社区交流?在 {Url} 加入我们。欢迎所有人!" + }, + "OSM-PH-facebook": { + "name": "OpenStreetMap 菲律宾 Facebook" + }, + "OSM-PH-mailinglist": { + "name": "Talk-ph 邮件列表", + "description": "讨论在菲律宾 OpenStreetMap 的邮件列表" + }, + "OSM-PH-slack": { + "name": "OpenStreetMap 菲律宾 Slack", + "description": "欢迎所有人加入!在 {signupUrl} 上注册。" + }, + "OSM-PH-telegram": { + "name": "OpenStreetMap 菲律宾 Telegram", + "description": "为在菲律宾的 OpenStreetMap 贡献者和伙伴们准备的非官方 Telegram 本地社区" + }, + "OSM-RU-forum": { + "name": "OpenStreetMap 俄罗斯论坛", + "description": "OpenStreetMap 俄罗斯网络论坛" + }, + "OSM-RU-telegram": { + "name": "OpenStreetMap 俄罗斯 Telegram", + "description": "OpenStreetMap 俄罗斯 Telegram 交流" + }, + "OSM-LKA-facebook": { + "name": "OpenStreetMap 斯里兰卡", + "description": "改进位于斯里兰卡的 OpenStreetMap", + "extendedDescription": "在斯里兰卡绘图?有任何疑问,想要与当地的社区交流?在 {Url} 加入我们。欢迎所有人!" + }, + "OSM-TW-facebook": { + "name": "OpenStreetMap 台湾社区", + "description": "绘图者和 OpenStreetMap 用户用以讨论中国台湾省事务的 Facebook 小组。" + }, + "OSM-TW-mailinglist": { + "name": "OpenStreetMap 台湾邮件列表", + "description": "Talk-tw 是社区讨论关于中国台湾省事务的官方邮件列表" + }, + "at-forum": { + "name": "OpenStreetMap 奥地利论坛" + }, + "at-mailinglist": { + "name": "Talk-at 邮件列表", + "description": "Talk-at 是奥地利 OpenStreetMap 社区的官方邮件列表" + }, + "at-twitter": { + "name": "OpenStreetMap 奥地利 Twitter", + "description": "OpenStreetMap 奥地利 Twitter 主页:{url}" + }, + "osmgraz-twitter": { + "name": "OSM 格拉茨社区 Twitter 主页", + "description": "OpenStreetMap 格拉茨社区 Twitter 主页" + }, + "osm-at": { + "name": "OpenStreetMap 奥地利", + "description": "位于奥地利的 OpenStreetMap 信息平台" + }, + "be-facebook": { + "name": "OpenStreetMap 比利时社区", + "description": "在比利时的绘图者和 OpenStreetMap Facebook" + }, + "be-forum": { + "name": "OpenStreetMap 比利时论坛", + "description": "OpenStreetMap 比利时网络论坛" + }, + "be-mailinglist": { + "name": "Talk-be 邮件列表", + "description": "Talk-be 是比利时 OpenStreetMap 社区的官方邮件列表" + }, + "be-matrix": { + "name": "OpenStreetMap 比利时 Riot 频道", + "description": "欢迎所有的绘图者!在 {signupUrl} 上注册。" + }, + "be-twitter": { + "name": "OpenStreetMap 比利时 Twitter", + "description": "OSM 比利时 Twitter 主页:{url}" + }, + "byosm": { + "name": "OpenStreetMap 白俄罗斯", + "description": "OpenStreetMap 白俄罗斯 Telegram 交流" + }, + "talk-cz-mailinglist": { + "name": "Talk-cz 邮件列表", + "description": "Talk-cz 是捷克 OpenStreetMap 社区的官方邮件列表" + }, + "de-berlin-mailinglist": { + "name": "柏林邮件列表", + "description": "此为柏林 OSM 社区的邮件列表" + }, + "de-berlin-meetup": { + "name": "OpenStreetMap 柏林-勃兰登堡见面会", + "description": "位于柏林区域的绘图者和 OpenStreetMap 用户" + }, + "de-berlin-telegram": { + "name": "@osmberlin Telegram 主页", + "description": "OpenStreetMap 柏林 Telegram 交流" + }, + "de-berlin-twitter": { + "name": "OpenStreetMap 柏林 Twitter", + "description": "在 Twitter 上关注我们:{url}" + }, + "de-forum": { + "name": "OpenStreetMap 德国论坛", + "description": "OpenStreetMap 德国网络论坛" + }, + "de-irc": { + "name": "OpenStreetMap 德国 IRC", + "description": "在 irc.oftc.net (端口 6667) 加入 #osm-de" + }, + "de-mailinglist": { + "name": "Talk-de 邮件列表", + "description": "Talk-de 是德国 OpenStreetMap 社区的官方邮件列表" + }, + "osm-de": { + "name": "OpenStreetMap 德国", + "description": "位于德国的 OpenStreetMap 信息平台" + }, + "OSM-ES-mailinglist": { + "name": "Talk-es 邮件列表", + "description": "讨论在西班牙 OpenStreetMap 的邮件列表" + }, + "OSM-ES-telegram": { + "name": "@OSMes Telegram 主页", + "description": "OpenStreetMap 西班牙 Telegram 交流" + }, + "fr-facebook": { + "name": "OpenStreetMap 法国 Facebook 主页", + "description": "OpenStreetMap 法国 Facebook 主页" + }, + "fr-forum": { + "name": "OpenStreetMap 法国网络论坛", + "description": "OpenStreetMap 法国网络论坛" + }, + "fr-irc": { + "name": "OpenStreetMap 法国 IRC", + "description": "在 irc.oftc.net (端口 6667) 加入 #osm-fr" + }, + "fr-mailinglist": { + "name": "Talk-fr 邮件列表", + "description": "Talk-fr 邮件列表" + }, + "fr-twitter": { + "name": "OpenStreetMap 法国 Twitter 主页", + "description": "OpenStreetMap 法国 Twitter 主页:{url}" + }, + "Nottingham-OSM-pub-meetup": { + "name": "东米德兰(诺丁汉)月度酒吧见面会", + "description": "东米德兰绘图者和用户的社交聚会", + "extendedDescription": "该小组自2011å¹´3月开始举行会议,地点最初在诺丁汉,近几年在德比,或不时在东米德兰的其他地方举行。这些虽是社交聚会,但却是来询问涉及地区或只是普通的 OSM 特定问题的好地方。在夏季,我们通常会在会场附近进行一小时的小型测绘。整个团队都对关于公共优先权的测绘有着特殊的兴趣,并且不时为此而召开绘图会议。" + }, + "gb-mailinglist": { + "name": "Talk-gb 邮件列表", + "description": "Talk-gb 是英国(包括北爱尔兰) OSM 社区的主要交流论坛" + }, + "gb-irc": { + "name": "OpenStreetMap 英国 IRC", + "description": "在 irc.oftc.net (端口 6667) 加入 #osm-gb" + }, + "it-facebook": { + "name": "OpenStreetMap 意大利 Facebook", + "description": "在 Facebook 上加入 OpenStreetMap 意大利社区" + }, + "it-irc": { + "name": "OpenStreetMap 意大利 IRC", + "description": "在 irc.oftc.net (端口 6667) 加入 #osm-it" + }, + "it-mailinglist": { + "name": "Talk-it 邮件列表", + "description": "Talk-it 是意大利 OpenStreetMap 社区的官方邮件列表" + }, + "it-twitter": { + "name": "OpenStreetMap 意大利 Twitter", + "description": "在 Twitter 上关注我们:{url}" + }, + "OSM-Rome-meetup": { + "description": "在罗马地区改进 OpenStreetMap" + }, + "South-Tyrol-Mailing-List": { + "name": "南蒂罗尔 OpenStreetMap 邮件列表" + }, + "talk-it-lazio": { + "name": "OpenStreetMap 意大利拉齐奥", + "description": "欢迎所有人加入!在 {signupUrl} 上注册。", + "extendedDescription": "罗马和拉齐奥大区的邮件列表" + }, + "Trentino-Mailing-List": { + "name": "特伦蒂诺 OpenStreetMap 邮件列表" + }, + "no-forum": { + "name": "OpenStreetMap 挪威网络论坛", + "description": "OpenStreetMap 挪威网络论坛" + }, + "no-irc": { + "name": "OpenStreetMap 挪威 IRC" + }, + "no-mailinglist": { + "name": "OpenStreetMap 挪威邮件列表", + "description": "为位于挪威的绘图者和 OpenStreetMap 用户、开发者与爱好者准备的邮件列表" + }, + "OSM-PL-facebook-group": { + "name": "OpenStreetMap 波兰 Facebook 小组" + }, + "osm-se": { + "name": "OpenStreetMap.se" + }, + "se-facebook": { + "name": "OpenStreetMap 瑞典 Facebook", + "description": "OpenStreetMap 瑞典 Facebook 主页" + }, + "se-forum": { + "name": "OpenStreetMap 瑞典网络论坛", + "description": "OpenStreetMap 瑞典网络论坛" + }, + "se-irc": { + "name": "OpenStreetMap 瑞典 IRC", + "description": "在 irc.oftc.net (端口 6667) 加入 #osm.se" + }, + "se-mailinglist": { + "name": "Talk-se 邮件列表", + "description": "讨论在瑞典 OpenStreetMap 的邮件列表" + }, + "se-twitter": { + "name": "OpenStreetMap 瑞典 Twitter 页面", + "description": "在 Twitter 上关注我们:{url}" + }, + "OSM-CA-Slack": { + "name": "OSM-CA Slack", + "description": "欢迎所有人加入!在 {signupUrl} 上注册。" + }, + "OSM-Vancouver-meetup": { + "name": "OpenStreetMap 温哥华", + "description": "位于不列颠哥伦比亚省温哥华的绘图者和 OpenStreetMap 用户" + }, + "OSM-US-Slack": { + "name": "OpenStreetMap 美国 Slack", + "description": "欢迎所有人加入!在 {signupUrl} 上注册。" + }, + "OSM-US": { + "name": "OpenStreetMap 美国", + "description": "我们助长并改善位于美国的 OpenStreetMap。", + "extendedDescription": "我们通过召开年度会议、提供社区资源、建立合伙关系以及推广来支持 OpenStreetMap。在此处加入 OpenStreetMap 美国:{signupUrl}" + }, + "OSM-Utah": { + "name": "OpenStreetMap 犹他州", + "description": "位于盐湖城区域的绘图者和 OpenStreetMap 用户" + }, + "OSM-Wyoming": { + "name": "OpenStreetMap 怀俄明州", + "description": "位于怀俄明州的绘图者和 OpenStreetMap 用户" + }, + "PHXGeo-twitter": { + "name": "PHXGeo Twitter", + "description": "在 Twitter 上关注我们:{url}" + }, + "Western-Slope-facebook": { + "name": "西坡 OSM Facebook" + }, + "Maptime-Australia-Slack": { + "name": "Maptime 澳大利亚 Slack", + "description": "在 {signupUrl} 上注册" + }, + "talk-au": { + "name": "Talk-au 邮件列表", + "description": "澳大利亚绘图者交流的地方" + }, + "OSM-AR-facebook": { + "name": "OpenStreetMap 阿根廷 Facebook", + "description": "在 Facebook 上加入 OpenStreetMap 阿根廷社区", + "extendedDescription": "当地社区的新闻" + }, + "OSM-AR-forum": { + "name": "OpenStreetMap 阿根廷网络论坛", + "description": "加入 OpenStreetMap 阿根廷网络论坛", + "extendedDescription": "长篇或重要讨论的理想地。回应时间较慢。" + }, + "OSM-AR-irc": { + "name": "OpenStreetMap 阿根廷 IRC", + "description": "在 irc.oftc.net (端口 6667) 加入 #osm-ar", + "extendedDescription": "您可以在社区中找到最为极客的用户。" + }, + "OSM-AR-mailinglist": { + "name": "Talk-ar 邮件列表", + "description": "历史邮件列表。如今几乎不再使用。" + }, + "OSM-AR-telegram": { + "name": "OpenStreetMap 阿根廷 Telegram", + "description": "在 Telegram 上加入 OpenStreetMap 阿根廷社区", + "extendedDescription": "全社区最活跃的频道,专为聊天和问题速答而准备。欢迎每个人加入!" + }, + "OSM-AR-twitter": { + "name": "OpenStreetMap 阿根廷 Twitter", + "description": "在 Twitter 上关注我们:{url}", + "extendedDescription": "当地社区和 OpenStreetMap 大体的新闻" + }, + "OSM-BO-mailinglist": { + "name": "Talk-bo 邮件列表", + "description": "Talk-bo 是玻利维亚 OpenStreetMap 社区的官方邮件列表", + "extendedDescription": "在玻利维亚绘图?有任何疑问,想要与当地的社区交流?在 {Url} 加入我们。欢迎所有人!" + }, + "Bahia-telegram": { + "name": "OpenStreetMap 巴伊亚 Telegram 小组", + "description": "在 Telegram 上加入 OpenStreetMap 巴伊亚社区", + "extendedDescription": "加入社区来了解更多 OpenStreetMap,在会议中提问或者参与。欢迎每个人的到来!" + }, + "OSM-br-mailinglist": { + "name": "Talk-br 邮件列表", + "description": "讨论在巴西 OpenStreetMap 的邮件列表" + }, + "OSM-br-telegram": { + "name": "OpenStreetMap 巴西 Telegram", + "description": "在 Telegram 上加入 OpenStreetMap 巴西社区", + "extendedDescription": "加入社区来了解更多 OpenStreetMap,在会议中提问或者参与。欢迎每个人的到来!" + }, + "OSM-br-twitter": { + "name": "OpenStreetMap 巴西 Twitter", + "description": "在 Twitter 上关注我们:{url}" + }, + "OSM-CL-facebook": { + "name": "OpenStreetMap 智利 Facebook", + "description": "在 Facebook 上加入 OpenStreetMap 智利社区", + "extendedDescription": "加入社区来了解更多 OpenStreetMap,在会议中提问或者参与。欢迎每个人的到来!" + }, + "OSM-CL-mailinglist": { + "name": "Talk-cl 邮件列表", + "description": "讨论在智利 OpenStreetMap 的邮件列表" + }, + "OSM-CL-telegram": { + "name": "OpenStreetMap 智利 Telegram", + "description": "在 Telegram 上加入 OpenStreetMap 智利社区", + "extendedDescription": "加入社区来了解更多 OpenStreetMap,在会议中提问或者参与。欢迎每个人的到来!" + }, + "OSM-CL-twitter": { + "name": "OpenStreetMap 智利 Twitter", + "description": "在 Twitter 上关注我们:{url}" + }, + "OSM-CO-facebook": { + "name": "OpenStreetMap 哥伦比亚 Facebook", + "description": "在 Facebook 上加入 OpenStreetMap 哥伦比亚社区", + "extendedDescription": "加入社区来了解更多 OpenStreetMap。欢迎每个人的到来!" + }, + "OSM-CO-mailinglist": { + "name": "Talk-co 邮件列表", + "description": "讨论在哥伦比亚 OpenStreetMap 的邮件列表" + }, + "OSM-CO-twitter": { + "name": "OpenStreetMap 哥伦比亚 Twitter", + "description": "在 Twitter 上关注我们:{url}" + }, + "OSM-CO": { + "name": "OpenStreetMap 哥伦比亚", + "description": "关于 OpenStreetMap 哥伦比亚社区和 OSMCo 基金会的新闻" + }, + "OSM-PE-facebook": { + "name": "OpenStreetMap 秘鲁 Facebook", + "description": "在 Facebook 上加入 OpenStreetMap 秘鲁社区" + }, + "OSM-PE-mailinglist": { + "name": "Talk-pe 邮件列表", + "description": "OpenStreetMap 秘鲁社区官方邮件列表" + }, + "OSM-PE-matrix": { + "name": "OpenStreetMap 秘鲁 Matrix 交流", + "description": "在 Matrix 上与 OpenStreetMap 秘鲁社区的其他成员交流。" + }, + "OSM-PE-telegram": { + "name": "OpenStreetMap 秘鲁 Telegram", + "description": "在 Telegram 上加入 OpenStreetMap 秘鲁社区" + }, + "OSM-PE-twitter": { + "name": "OpenStreetMap 秘鲁 Twitter", + "description": "在 Twitter 上关注我们:{url}" + }, + "OSM-PE": { + "name": "OpenStreetMap 秘鲁", + "description": "关于 OpenStreetMap 秘鲁社区的新闻和资源" + }, + "OSM-Facebook": { + "name": "OpenStreetMap Facebook 主页", + "description": "在 Facebook 上喜欢我们并接收关于 OpenStreetMap 新闻和更新。" + }, + "OSM-help": { + "name": "OpenStreetMap 帮助", + "description": "在 OSM 社区驱动的问答网站上提问并得到解答。", + "extendedDescription": "{url} 为所有人提供关于 OpenStreetMap 的帮助。无论您是新手绘图者或者有任何技术问题,都来找我们帮助吧!" + }, + "OSM-Reddit": { + "name": "OpenStreetMap Reddit 社区", + "description": "/r/openstreetmap/ 是了解更多关于 OpenStreetMap 的好地方。来尽管问我们吧!" + }, + "OSM-Twitter": { + "name": "OpenStreetMap Twitter 主页", + "description": "在 Twitter 上关注我们:{url}" + }, + "OSMF": { + "name": "OpenStreetMap 基金会 (OSMF)", + "description": "OSMF 是总部位于英国的非盈利组织,用于支持 OpenStreetMap 项目。", + "events": { + "sotm2018": { + "name": "State of the Map 2018", + "where": "意大利米兰" + } + } + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/zh-HK.json b/vendor/assets/iD/iD/locales/zh-HK.json index b5ce2e54c..c3cdd1fc6 100644 --- a/vendor/assets/iD/iD/locales/zh-HK.json +++ b/vendor/assets/iD/iD/locales/zh-HK.json @@ -1,5 +1,8 @@ { "zh-HK": { + "icons": { + "information": "資訊" + }, "modes": { "add_area": { "title": "範圍", @@ -288,6 +291,21 @@ } } }, + "restriction": { + "help": { + "indirect": "(間接)", + "turn": { + "no_left_turn": "不准左轉 {indirect}", + "no_right_turn": "不准右轉 {indirect}", + "no_u_turn": "不准掉頭 {indirect}", + "no_straight_on": "不准直行 {indirect}", + "only_left_turn": "只准左轉 {indirect}", + "only_right_turn": "只准右轉 {indirect}", + "only_u_turn": "只准掉頭 {indirect}", + "only_straight_on": "只准直行 {indirect}" + } + } + }, "undo": { "tooltip": "還原:{action}", "nothing": "沒有可還原的動作。" @@ -456,8 +474,15 @@ "switch": "切換回這個背景", "custom": "自訂", "custom_button": "編輯自訂背景", + "overlays": "覆蓋層", "reset": "重設", + "display_options": "顯示選項", + "brightness": "亮度", + "contrast": "對比", + "saturation": "飽和度", + "sharpness": "銳利度", "minimap": { + "description": "顯示小地圖", "tooltip": "顯示縮小地圖以確定現在被顯示範圍的位置", "key": "/" }, @@ -582,13 +607,7 @@ } }, "success": { - "edited_osm": "已編輯了OSM!", "just_edited": "你剛剛編輯了OpenStreetMap!", - "view_on_osm": "於OSM上顯示", - "facebook": "分享至 Facebook", - "twitter": "分享至 Twitter", - "google": "分享至 Google+", - "help_html": "你的變更會在幾分鐘後出現在標準圖層。其他圖層或某些特徵可能需要多些時間。", "help_link_text": "詳細資料", "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" }, @@ -654,6 +673,9 @@ "mapillary": { "view_on_mapillary": "在Mapillary上觀看這影像" }, + "openstreetcam_images": { + "title": "相片重疊 (OpenStreetCam)" + }, "openstreetcam": { "view_on_openstreetcam": "在 OpenStreetCam 上觀看這影像" }, @@ -1311,6 +1333,9 @@ "brand": { "label": "品牌" }, + "brewery": { + "label": "生啤" + }, "bridge": { "label": "種類", "placeholder": "預設" @@ -1450,6 +1475,9 @@ "cycleway:right": "右側" } }, + "dance/style": { + "label": "舞蹈風格" + }, "date": { "label": "日期" }, @@ -1472,6 +1500,41 @@ "diaper": { "label": "設有換片設備" }, + "direction": { + "label": "方向 (順時針度數)", + "placeholder": "45, 90, 180, 270" + }, + "direction_cardinal": { + "label": "方向", + "options": { + "E": "東", + "ENE": "東北偏東", + "ESE": "東南偏東", + "N": "北", + "NE": "東北", + "NNE": "東北偏北", + "NNW": "西北偏北", + "NW": "西北", + "S": "南", + "SE": "東南", + "SSE": "東南偏南", + "SSW": "西南偏南", + "SW": "西南", + "W": "西", + "WNW": "西北偏西", + "WSW": "西南偏西" + } + }, + "direction_clock": { + "label": "方向", + "options": { + "anticlockwise": "逆時針", + "clockwise": "順時針" + } + }, + "direction_vertex": { + "label": "方向" + }, "display": { "label": "顯示" }, @@ -1765,6 +1828,9 @@ "label": "速度限制", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "可停留時間" }, @@ -2309,9 +2375,6 @@ "label": "種類", "placeholder": "預設" }, - "vending": { - "label": "貨品種類" - }, "visibility": { "label": "可見度", "options": { @@ -2519,6 +2582,10 @@ "name": "茶座", "terms": "Cafe,㗎啡室,㗎啡廳,咖啡,咖啡室,咖啡廳,茶座" }, + "amenity/car_pooling": { + "name": "汽車共乘", + "terms": "Car Pooling, 汽車共乘" + }, "amenity/car_rental": { "name": "汽車租賃", "terms": "Car Rental,汽車租賃處,租車,租車店,租車舖" @@ -2665,6 +2732,10 @@ "name": "圖書館", "terms": "Library,圖書館" }, + "amenity/love_hotel": { + "name": "愛情酒店", + "terms": "Love Hotel, 時鐘酒店" + }, "amenity/marketplace": { "name": "街市", "terms": "Marketplace,市場,菜市場,街市" @@ -2673,6 +2744,10 @@ "name": "電單車停車位", "terms": "摩托車停車場,電單車停車場" }, + "amenity/music_school": { + "name": "音樂學校", + "terms": "Music School, 音樂學校" + }, "amenity/nightclub": { "name": "夜總會", "terms": "夜店" @@ -2772,6 +2847,10 @@ "name": "郊野公園遊客中心", "terms": "Ranger Station,郊野公園管理站,郊野公園訪客中心" }, + "amenity/recycling": { + "name": "回收桶", + "terms": "Recycling Container, 回收箱" + }, "amenity/recycling_centre": { "name": "回收中心", "terms": "Recycling Center, 廢物回收中心, 資源回收中心" @@ -2802,6 +2881,10 @@ "name": "淋浴處", "terms": "Shower,淋浴間,沖浴間" }, + "amenity/smoking_area": { + "name": "吸煙區", + "terms": "Smoking Area, 食煙區" + }, "amenity/social_facility": { "name": "社會服務設施", "terms": "社福設施" @@ -3035,6 +3118,10 @@ "name": "樹籬", "terms": "Hedge,樹籬" }, + "barrier/kerb": { + "name": "路緣", + "terms": "Kerb, 路邊石, 路緣石, 路邊" + }, "barrier/kissing_gate": { "name": "單人轉門 ", "terms": "Kissing Gate,單人轉門" @@ -3075,6 +3162,14 @@ "name": "穀倉", "terms": "穀倉,糧倉" }, + "building/boathouse": { + "name": "船屋", + "terms": "Boathouse, 船屋" + }, + "building/bungalow": { + "name": "平房", + "terms": "Bungalow, 平房, 別墅" + }, "building/bunker": { "name": "地堡" }, @@ -3094,6 +3189,10 @@ "name": "教堂建築物", "terms": "教堂,聖堂" }, + "building/civic": { + "name": "公民建築物", + "terms": "Civic Building, 市民建築物" + }, "building/college": { "name": "學院校舍", "terms": "學院建築,學院建築物,技術學院建築" @@ -3117,6 +3216,14 @@ "building/entrance": { "name": "入口/出口" }, + "building/farm": { + "name": "農舍", + "terms": "Farm House, 農莊" + }, + "building/farm_auxiliary": { + "name": "農場建築物", + "terms": "Farm Building, 農場建築物" + }, "building/garage": { "name": "車庫", "terms": "Garage,車房" @@ -3153,6 +3260,10 @@ "name": "學前照顧/幼稚園建築物", "terms": "幼兒園校舍,幼稚園校舍" }, + "building/mosque": { + "name": "清真寺建築物", + "terms": "Mosque Building, 清真寺建築物" + }, "building/public": { "name": "公共建築物", "terms": "公用建築物" @@ -3169,6 +3280,10 @@ "name": "上蓋", "terms": "屋頂" }, + "building/ruins": { + "name": "建築物遺蹟", + "terms": "Building Ruins, 建築物遺址" + }, "building/school": { "name": "校舍", "terms": "學校建築物,小學建築物,中學建築物" @@ -4582,6 +4697,38 @@ "name": "變壓器", "terms": "Transformer,火牛房,變電所" }, + "public_transport/station_tram": { + "name": "電車站", + "terms": "Tram Station, 電車大站" + }, + "public_transport/stop_area": { + "name": "交通工具停站範圍", + "terms": "Transit Stop Area, 交通工具停站範圍" + }, + "public_transport/stop_position": { + "name": "交通工具停止位置", + "terms": "Transit Stopping Location, 交通工具停止位置" + }, + "public_transport/stop_position_aerialway": { + "name": "纜車停止位置", + "terms": "Aerialway Stopping Location, 纜車停止位置" + }, + "public_transport/stop_position_bus": { + "name": "巴士停止位置", + "terms": "Bus Stopping Location, 巴士停止位置" + }, + "public_transport/stop_position_ferry": { + "name": "渡輪停止位置", + "terms": "Ferry Stopping Location, 小輪停止位置" + }, + "public_transport/stop_position_light_rail": { + "name": "輕鐵停止位置", + "terms": "Light Rail Stopping Location, 輕鐵停止位置" + }, + "public_transport/stop_position_monorail": { + "name": "單軌電車停止位置", + "terms": "Monorail Stopping Location, 單軌電車停止位置" + }, "railway": { "name": "鐵路" }, @@ -5300,18 +5447,6 @@ "name": "不准掉頭", "terms": "禁止掉頭" }, - "type/restriction/only_left_turn": { - "name": "只准左轉", - "terms": "只能左轉" - }, - "type/restriction/only_right_turn": { - "name": "只准右轉", - "terms": "只准右轉" - }, - "type/restriction/only_straight_on": { - "name": "只准直駛", - "terms": "禁止轉彎" - }, "type/route": { "name": "路綫", "terms": "Route,路綫,路線" @@ -5344,6 +5479,10 @@ "name": "策騎路線", "terms": "騎馬路線" }, + "type/route/light_rail": { + "name": "輕鐵路綫", + "terms": "Light Rail Route, 輕鐵路線" + }, "type/route/pipeline": { "name": "管道路綫", "terms": "Pipeline Route,供水路綫,供水路線,水管路綫,管道路線" @@ -5453,7 +5592,6 @@ "attribution": { "text": "條款和意見" }, - "description": "航攝邊界及拍攝日期。標籤會在縮放第14級或更高時顯示。", "name": "DigitalGlobe Premium 舊航攝圖" }, "DigitalGlobe-Standard": { @@ -5467,7 +5605,6 @@ "attribution": { "text": "條款和意見" }, - "description": "航攝邊界及拍攝日期。標籤會在縮放水平14或以上時顯示。", "name": "DigitalGlobe Standard 舊航攝圖" }, "EsriWorldImagery": { @@ -5477,6 +5614,13 @@ "description": "Esri world 世界航攝圖", "name": "Esri world 世界航攝圖" }, + "EsriWorldImageryClarity": { + "attribution": { + "text": "條款和意見" + }, + "description": "Esri 之前的航攝圖可能比預設圖層會更清楚和更準確。", + "name": "Esri World (Clarity) Beta 航攝圖" + }, "MAPNIK": { "attribution": { "text": "© OpenStreetMap 貢獻者,CC-BY-SA" @@ -5545,25 +5689,39 @@ "name": "TIGER Roads 2017" }, "Waymarked_Trails-Cycling": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap 貢獻者,CC by-SA 3.0" + }, "name": "Waymarked Trails: 單車" }, "Waymarked_Trails-Hiking": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap 貢獻者,CC by-SA 3.0" + }, "name": "Waymarked Trails: 遠足" }, "Waymarked_Trails-MTB": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap 貢獻者,CC by-SA 3.0" + }, "name": "Waymarked Trails: 越野單車" }, "Waymarked_Trails-Skating": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap 貢獻者,CC by-SA 3.0" + }, "name": "Waymarked Trails: 溜冰" }, "Waymarked_Trails-Winter_Sports": { + "attribution": { + "text": "© waymarkedtrails.org, OpenStreetMap 貢獻者,CC by-SA 3.0" + }, "name": "Waymarked Trails: 冬季運動" }, "basemap.at": { "attribution": { "text": "basemap.at" }, - "description": "基於政府資料的奧地利底圖。", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -5624,9 +5782,6 @@ "name": "skobbler" }, "stamen-terrain-background": { - "attribution": { - "text": "Stamen 設計的區塊,以 CC-BY 3.0 授權" - }, "name": "Stamen 地形" }, "tf-cycle": { diff --git a/vendor/assets/iD/iD/locales/zh-TW.json b/vendor/assets/iD/iD/locales/zh-TW.json index 80860cde6..51a1f69c7 100644 --- a/vendor/assets/iD/iD/locales/zh-TW.json +++ b/vendor/assets/iD/iD/locales/zh-TW.json @@ -1,5 +1,10 @@ { "zh-TW": { + "icons": { + "information": "資訊", + "remove": "移除", + "undo": "復原" + }, "modes": { "add_area": { "title": "區域", @@ -145,7 +150,9 @@ "vertex": "已連接路徑到另一路徑。", "line": "已連接路徑到一線段。", "area": "已連接路徑到一區域。" - } + }, + "relation": "這些特徵並不能連結,因為它們的關聯角色有衝突。", + "restriction": "這些特徵並不能連結,因為會破壞 \"{relation}\" 關聯。" }, "disconnect": { "title": "斷開", @@ -402,6 +409,7 @@ "key": "H", "title": "歷史", "selected": "{n} 被選擇", + "no_history": "無歷史 (新功能)", "version": "版本", "last_edit": "最近編輯", "edited_by": "編輯由", @@ -639,15 +647,20 @@ } }, "success": { - "edited_osm": "已編輯了OSM!", "just_edited": "您剛剛編輯了OpenStreetMap!", - "view_on_osm": "於OSM上顯示", - "facebook": "分享至 Facebook", - "twitter": "分享至 Twitter", - "google": "分享至 Google+", - "help_html": "你編輯的變動應該過幾分會出現在\"標準圖層\"。其他圖層和特定圖徵,則需要久一點。", + "thank_you": "感謝你改進地圖。", + "thank_you_location": "感謝你改進 {where} 週遭的地圖。", + "help_html": "你編輯的變動應該過幾分會出現在開放街圖裡。其他的地圖更新需要花久一點時間。", "help_link_text": "詳細資料", - "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F" + "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F", + "view_on_osm": "在OSM上顯示變動", + "changeset_id": "你的變更集 #:{changeset_id}", + "like_osm": "喜歡開放街圖嗎?與其他人聯繫:", + "more": "更多", + "events": "活動", + "languages": "語言:{languages}", + "missing": "清單上仍有遺漏資訊?", + "tell_us": "告訴我們!" }, "confirm": { "okay": "OK", @@ -889,16 +902,35 @@ "about": { "title": "關於", "about": "這個欄位允許你偵測和變動轉彎限制,顯示選取的交叉路口的模型,以及鄰近連結的道路。", - "from_via_to": "轉彎限制總是有:一個**從路徑**,一個**到路徑**,以及一個**經由節點*,或一個或多個**經由路徑**。" + "from_via_to": "轉彎限制總是有:一個**從路徑**,一個**到路徑**,以及一個**經由節點*,或一個或多個**經由路徑**。", + "maxdist": "\"{distField}\" 滑塊控制怎麼搜尋額外連結的道路。", + "maxvia": "\"{viaField}\" 滑塊調整搜尋時包括有多少經由路徑 (技巧:越簡單越好)" }, "inspecting": { - "title": "偵測" + "title": "偵測", + "about": "飄浮過任何 **FROM** 片段來看轉彎限制,每個可能的 **TO** 目標會用上色的陰影包住,顯示關聯是否存在。", + "from_shadow": "{fromShadow} **從片段**", + "allow_shadow": "{allowShadow} **允許到**", + "restrict_shadow": "{restrictShadow} **禁止到**", + "only_shadow": "{onlyShadow} **只有到**", + "restricted": "\"限制\"意著有轉彎限制,例如說\"禁止左轉\"。", + "only": "\"只有\"意味著汽車從這條路來的時候,只能做這項選擇,例如說,\"只淮直行\"。" }, "modifying": { - "title": "變動" + "title": "變動", + "about": "要變動轉彎限制,請先檢查先選取起始的 **FROM** 片段,選取的片段會放大,然後任何可能的 **TO** 目的地會以轉彎符號顯示。", + "indicators": "接著,點選轉彎符號切換為\"允許\",\"限制\",和\"只有\"。", + "allow_turn": "{allowTurn} **到允許**", + "restrict_turn": "{restrictTurn} **到限制**", + "only_turn": "{onlyTurn} **只有到**" }, "tips": { - "title": "技巧" + "title": "技巧", + "simple": "**偏好簡單限制而不是複雜的限制。**", + "simple_example": "舉例來說,如果有簡單的經由點轉彎限制的話,避免創建經由道路限制。", + "indirect": "**一些限制會顯示 \"(indirect)\" 文字,並且畫得比較淡。**", + "indirect_example": "這此限制存在,因為其他鄰近的限制。舉例來說,一個**只允許直行**的限制會間接為其他經過的道路創建\"不允許轉彎\"限制。", + "indirect_noedit": "你並不允許編輯間接限制,做為替代,你可以編輯鄰近的方向限制。" } } } @@ -1755,6 +1787,9 @@ "display": { "label": "顯示" }, + "distance": { + "label": "全部距離" + }, "dock": { "label": "碼頭種類" }, @@ -1795,6 +1830,9 @@ "except": { "label": "例外" }, + "faces": { + "label": "面" + }, "fax": { "label": "傳真", "placeholder": "+31 42 123 4567" @@ -1906,6 +1944,39 @@ "label": "藍框數量", "placeholder": "1, 2, 4..." }, + "horse_dressage": { + "label": "馬場馬術", + "options": { + "equestrian": "是", + "undefined": "否" + } + }, + "horse_riding": { + "label": "馬背騎乘", + "options": { + "horse_riding": "是", + "undefined": "否" + } + }, + "horse_scale": { + "label": "騎馬難度", + "options": { + "common": "容易:沒有問題或困難度。(預設)", + "critical": "邊緣:有經驗騎士和馬匹可通行,主要障礙,橋樑要小心檢驗。", + "dangerous": "危險:只適合非常有經驗的騎士和馬匹通行,而且只在天氣好的狀況,下馬狀況。", + "demanding": "小心使用:不平的道路,時常有難以通行的通道。", + "difficult": "困難:狹窄和裸露的道路,也許需要踩過障礙物和通過狹窄通道。", + "impossible": "不可能:道路或橋樑馬匹不可能通行,太狹窄,沒有足夠的支援,有障礙物像是梯子,有生命危險。" + }, + "placeholder": "危險,困難..." + }, + "horse_stables": { + "label": "騎馬馬房", + "options": { + "stables": "是", + "undefined": "否" + } + }, "iata": { "label": "IATA" }, @@ -1925,6 +1996,9 @@ "indoor": { "label": "室內" }, + "industrial": { + "label": "類型" + }, "information": { "label": "種類" }, @@ -2045,6 +2119,10 @@ "label": "速度限制", "placeholder": "40, 50, 60..." }, + "maxspeed/advisory": { + "label": "建議速限", + "placeholder": "40, 50, 60..." + }, "maxstay": { "label": "可停留時間" }, @@ -2633,8 +2711,19 @@ "label": "類型", "placeholder": "預設" }, + "usage_rail": { + "label": "用途類型", + "options": { + "branch": "支線", + "industrial": "工業用", + "main": "主線", + "military": "軍事用", + "test": "測試", + "tourism": "觀光" + } + }, "vending": { - "label": "貨品種類" + "label": "貨物類型" }, "visibility": { "label": "可見度", @@ -2729,6 +2818,10 @@ "name": "廣告牌", "terms": "廣告看板" }, + "advertising/column": { + "name": "廣告看板", + "terms": "廣告看板,廣告欄" + }, "aerialway": { "name": "纜車路線" }, @@ -2814,6 +2907,10 @@ "name": "機場航廈", "terms": "航廈,機場大堂" }, + "allotments/plot": { + "name": "社區園圃", + "terms": "社區園圃,社區農圃,社區花園" + }, "amenity": { "name": "便利設施" }, @@ -3042,6 +3139,10 @@ "name": "市場", "terms": "市集,傳統市場,marketplace" }, + "amenity/monastery": { + "name": "修道院", + "terms": "修道院" + }, "amenity/motorcycle_parking": { "name": "機車停車場", "terms": "機車停車場,速克達停車場,摩托車停車場" @@ -3246,6 +3347,10 @@ "name": "香菸販賣機", "terms": "香菸自動販賣機,販賣機" }, + "amenity/vending_machine/coffee": { + "name": "咖啡販賣機", + "terms": "咖啡販賣機,咖啡自動販賣機" + }, "amenity/vending_machine/condoms": { "name": "保險套販賣機", "terms": "保險套自動販賣機,販賣機" @@ -3254,6 +3359,14 @@ "name": "飲料販賣機", "terms": "飲料自動販賣機,販賣機" }, + "amenity/vending_machine/electronics": { + "name": "電子設備販賣機", + "terms": "電子設備販賣機,電子設備自動販賣機" + }, + "amenity/vending_machine/elongated_coin": { + "name": "扁平紀念幣販賣機", + "terms": "扁平紀念幣販賣機,扁平紀念幣自動販賣機" + }, "amenity/vending_machine/excrement_bags": { "name": "糞便袋販賣機", "terms": "糞便袋自動販賣機,販賣機" @@ -3262,6 +3375,18 @@ "name": "女性衛生用品自動販賣機", "terms": "女性衛生用品自動販賣機,衛生棉自動販賣機,棉條自動販賣機" }, + "amenity/vending_machine/food": { + "name": "食物販賣機", + "terms": "食物販賣機,食物自動販賣機" + }, + "amenity/vending_machine/fuel": { + "name": "自助加油機", + "terms": "自助加油機" + }, + "amenity/vending_machine/ice_cream": { + "name": "冰淇淋販賣機", + "terms": "冰淇淋販賣機,冰淇淋自動販賣機" + }, "amenity/vending_machine/news_papers": { "name": "報紙販賣機" }, @@ -3281,6 +3406,10 @@ "name": "車票販賣機", "terms": "車票自動販賣機,交通票券販賣機" }, + "amenity/vending_machine/stamps": { + "name": "郵票販賣機", + "terms": "郵票販賣機,郵票自動販賣機" + }, "amenity/vending_machine/sweets": { "name": "零食販賣機", "terms": "點心販賣機,販 賣機" @@ -3353,6 +3482,10 @@ "name": "自由落體", "terms": "大怒神" }, + "attraction/maze": { + "name": "迷宮", + "terms": "迷宮" + }, "attraction/pirate_ship": { "name": "海盜船", "terms": "海盜船" @@ -3982,6 +4115,10 @@ "name": "安養院", "terms": "安養院" }, + "healthcare/laboratory": { + "name": "醫事檢驗所", + "terms": "醫檢" + }, "healthcare/midwife": { "name": "助產士", "terms": "助產士" @@ -4084,6 +4221,10 @@ "name": "高速公路引道", "terms": "高速公路引道" }, + "highway/passing_place": { + "name": "避車彎", + "terms": "避車彎" + }, "highway/path": { "name": "路徑", "terms": "路徑" @@ -4443,6 +4584,10 @@ "name": "遊樂場", "terms": "遊樂場" }, + "leisure/beach_resort": { + "name": "海灘渡假村", + "terms": "海灘渡假村,海濱渡假村" + }, "leisure/bird_hide": { "name": "鳥類棲息處", "terms": "鳥類棲息處,鳥類棲地,鳥類藏身處" @@ -4559,6 +4704,10 @@ "name": "自然保留區", "terms": "自然保護區" }, + "leisure/outdoor_seating": { + "name": "戶外座位區", + "terms": "戶外座位區,戶外座位" + }, "leisure/park": { "name": "公園", "terms": "綠地,遊樂場" @@ -4687,6 +4836,10 @@ "name": "坑口", "terms": "坑道口,礦坑口" }, + "man_made/antenna": { + "name": "天線", + "terms": "天線" + }, "man_made/breakwater": { "name": "防波堤", "terms": "防波堤" @@ -4738,6 +4891,10 @@ "name": "瞭望塔", "terms": "瞭望塔" }, + "man_made/observatory": { + "name": "天文台", + "terms": "天文館" + }, "man_made/petroleum_well": { "name": "油井", "terms": "油井" @@ -4862,6 +5019,10 @@ "name": "荒地", "terms": "荒地" }, + "natural/mud": { + "name": "泥地", + "terms": "泥地" + }, "natural/peak": { "name": "山頂", "terms": "山峰,山巔" @@ -5898,6 +6059,10 @@ "name": "寵物店", "terms": "寵物用品店" }, + "shop/pet_grooming": { + "name": "寵物美容店", + "terms": "寵物美容店" + }, "shop/photo": { "name": "攝影用品店", "terms": "照相店" @@ -6117,6 +6282,10 @@ "name": "主題公園", "terms": "主題樂園" }, + "tourism/trail_riding_station": { + "name": "騎馬車站", + "terms": "騎馬車站" + }, "tourism/viewpoint": { "name": "觀景點", "terms": "風景點" @@ -6201,16 +6370,20 @@ "terms": "禁止迴轉" }, "type/restriction/only_left_turn": { - "name": "只准左轉", + "name": "只能左轉", "terms": "只能左轉" }, "type/restriction/only_right_turn": { - "name": "只准右轉", + "name": "只能右轉", "terms": "只能右轉" }, "type/restriction/only_straight_on": { - "name": "只准直駛", - "terms": "禁止轉彎" + "name": "只能直行", + "terms": "只能直行" + }, + "type/restriction/only_u_turn": { + "name": "只能迴轉", + "terms": "只能迴轉" }, "type/route": { "name": "路線", @@ -6373,7 +6546,7 @@ "attribution": { "text": "使用條款與意見回饋" }, - "description": "影像邊界與取得時間。標籤會在縮放14層級或更高時顯示。", + "description": "影像邊界與拍攝日期。標籤將會在縮放等級大於等於 13 時出現。", "name": "DigitalGlobe Premium 空照圖年份" }, "DigitalGlobe-Standard": { @@ -6387,7 +6560,7 @@ "attribution": { "text": "使用條款與意見回饋" }, - "description": "影像邊界與取得時間。標籤會在縮放14層級或更高時顯示。", + "description": "影像邊界與拍攝日期。標籤將會在縮放等級大於等於 13 時出現。", "name": "DigitalGlobe Standard 空照圖年份" }, "EsriWorldImagery": { @@ -6471,6 +6644,10 @@ "description": "黃 = 自美國人口普查局的公共領域地圖資料取得。紅 = 在開放街圖上找不到資料", "name": "TIGER 道路 2017" }, + "US_Forest_Service_roads_overlay": { + "description": "道路:綠色外框 = 非分類道路。棕色外框 = 土路。路面:碎石路 = 亮棕色實心填滿,柏油 = 黑色,有舖面 = 灰色,地面 = 白色,水泥 = 藍色,草地 = 綠色。季節性 = 白色條紋", + "name": "美國森林道路覆蓋層" + }, "Waymarked_Trails-Cycling": { "attribution": { "text": "© waymarkedtrails.org,OpenStreetMap 貢獻者,,CC by-SA 3.0" @@ -6505,7 +6682,7 @@ "attribution": { "text": "basemap.at" }, - "description": "基於政府資料的奧地利底圖。", + "description": "奧地利的底圖,基於政府資料。", "name": "basemap.at" }, "basemap.at-orthofoto": { @@ -6567,7 +6744,7 @@ }, "stamen-terrain-background": { "attribution": { - "text": "Stamen 設計的圖磚,以 CC-BY 3.0 授權" + "text": "Stamen Design 的圖磚,以 CC BY 3.0 授權。資料自 OpenStreetMap 處取得,以 ODbL 授權" }, "name": "Stamen Terrain" }, @@ -6583,6 +6760,253 @@ }, "name": "Thunderforest Landscape" } + }, + "community": { + "osm-mg-facebook": { + "name": "開放街圖馬達加斯加 Facebook 社團", + "description": "馬達加斯加對開放街圖有興趣的人參與的 Facebook 社團。" + }, + "talk-mg": { + "name": "Talk-m 郵件論壇", + "description": "馬達加斯加開放街圖貢獻者、社群和使用者分享和討論的園地" + }, + "OSM-BGD-facebook": { + "name": "開放街圖孟加拉", + "description": "改進孟加拉的開放街圖", + "extendedDescription": "在孟加拉畫地圖嗎?想要問問題,想要與社群連結?請加入 {Url},所有人都歡迎噢!" + }, + "OSM-India-facebook": { + "name": "開放街圖印度 - 參與社區畫圖", + "description": "改善印度的 OpenStreetMap", + "extendedDescription": "在印度畫地圖嗎?想要問問題,想要與社群連結?請加入 {Url},所有人都歡迎噢!", + "events": { + "sotmasia2018": { + "name": "State of the Map Asia 2018", + "description": "加入 2018 開放街圖在印度的亞洲地區性的大會活動", + "where": "印度班加羅爾,印度管理學院" + } + } + }, + "OSM-india-mailinglist": { + "name": "開放街圖印度郵件論壇", + "description": "Talk-in 是印度社群的官方郵件論壇" + }, + "OSM-india-twitter": { + "name": "開放街圖印度 Twitter", + "description": "我們只是喜歡 tweet:{url}" + }, + "OSM-India-Puducherry-Facebook": { + "name": "Free Software Hardware Movement - Facebook", + "description": "FSHM Facebook 粉絲頁讓你知道社群活動", + "extendedDescription": "FSHM 組織跟自由軟體/硬體、科技、倡議和開放街圖的活動。FSHM Facebook 粉絲頁是最好跟他們活動保持聯繫的方式。" + }, + "OSM-IDN-facebook": { + "name": "開放街圖印尼", + "description": "改進印尼的開放街圖", + "extendedDescription": "在印尼畫地圖嗎?有問題,想要與社群互動?來 {Url} 加入我們,歡迎所有人。" + }, + "OSM-japan-facebook": { + "name": "開放街圖日本社群", + "description": "日本圖客和開放街圖使用者" + }, + "OSM-japan-mailinglist": { + "name": "開放街圖日本郵件論壇", + "description": "Talk-ja 是日本社群官方的郵件論壇" + }, + "OSM-japan-twitter": { + "name": "開放街圖日本 Twitter", + "description": "Twitter 的標籤:{url}" + }, + "OSM-MNG-facebook": { + "name": "開放街圖蒙古", + "description": "改進蒙古的開放街圖", + "extendedDescription": "在蒙古畫地圖嗎?有問題,想要與社群互動?來 {Url} 加入我們,歡迎所有人。" + }, + "OSM-Nepal-facebook": { + "name": "開放街圖尼泊爾", + "description": "改進尼泊爾的開放街圖", + "extendedDescription": "在尼泊爾畫地圖嗎?有問題,想要與社群互動?來 {Url} 加入我們,歡迎所有人。" + }, + "OSM-PH-facebook": { + "name": "開放街圖菲律賓 Facebook" + }, + "OSM-TW-facebook": { + "name": "開放街圖台灣社群", + "description": "台灣社群專門討論有關台灣圖資的臉書社團" + }, + "OSM-TW-mailinglist": { + "name": "開放街圖台灣郵件論壇", + "description": "Talk-tw 是台灣社群專門討論有關台灣圖資的官方郵件論壇" + }, + "at-twitter": { + "name": "開放街圖奧地利 Twitter", + "description": "開放街圖奧地利 Twitter:{url}" + }, + "osm-at": { + "name": "開放街圖奧地利", + "description": "開放街圖在奧地利交流資訊的平台" + }, + "be-facebook": { + "name": "開放街圖比利時社群", + "description": "圖客和比利時開放街圖 Facebook" + }, + "be-forum": { + "name": "開放街圖比利時論壇", + "description": "開放街圖比利時網頁論壇" + }, + "be-mailinglist": { + "name": "Talk-be 郵件論壇", + "description": "Talk-be 是比利時社群的官方郵件論壇 " + }, + "be-matrix": { + "name": "OpenStreetMap BE Riot channel", + "description": "歡迎所有圖客!在 {signupUrl} 註冊", + "extendedDescription": "多個頻道存在,從初學者到主題頻道,土地利用和開發主題" + }, + "be-meetup": { + "name": "開放街圖比利時聚會", + "description": "IRL 聚會由對開放街圖有興趣的人組成。", + "extendedDescription": "實體的聚會是與其他圖客碰面的好機會,能夠論論問題,學到很多事情,特別是歡迎新的貢獻者。" + }, + "be-twitter": { + "name": "開放街圖奧地利 Twitter", + "description": "開放街圖比利時 Twitter:{url} " + }, + "byosm": { + "name": "開放街圖白羅斯", + "description": "開放街圖白羅斯 Telegram 聊天室" + }, + "Bay-Area-OpenStreetMappers": { + "name": "灣區的 OpenStreetMap 圖客", + "description": "改善在灣區的 OpenStreetMap", + "extendedDescription": "這個群組是為了讓灣區的 OpenStreetMap 社群成長茁壯而設立。我們的活動開放給所有人參與,開放原始碼支持者、自行車騎士、地理資訊系統 (GIS) 專家、地理藏寶者都可以。只要對地圖、地圖製作與自由地圖資料有興趣的人都歡迎加入我們的群組,以及參與我們的活動。" + }, + "Central-Pennsylvania-OSM": { + "name": "賓州中部 OSM", + "description": "位於賓州州立大學的線上製圖社群" + }, + "Code-for-San-Jose-Slack": { + "name": "Code for San Jose Slack", + "description": "歡迎所有人加入!在 {signupUrl} 註冊,並加入 #osm 頻道。" + }, + "Dallas-Fort-Worth-OSM": { + "name": "達拉斯—沃斯堡 OSM", + "description": "達拉斯—沃斯堡的 OpenStreetMap 使用者群組", + "extendedDescription": "達拉斯、沃斯堡與其間的所有城市都充滿了極具創造力且技術精湛的人才。這個使用者群組的願景是找出新的方法來使用 OSM 上的驚人資源。" + }, + "GeoPhilly": { + "name": "GeoPhilly", + "description": "費城地區的地圖愛好者聚會", + "extendedDescription": "GeoPhilly 將開發者、地理學家、資料極客、開放原始碼愛好者、公民駭客與地圖愛好者聯合起來,並將我們對地圖的熱愛與他們的故事連結起來。如果你在工作中會用到地圖,或僅僅只是想要了解更多,這就是為你而辦的聚會!我們的活動旨在開放、友好、教育與社交,從歡樂時光到閃電講,甚至是工作坊都有。跟我們一起在費城建立一個多元化且激勵人心的地理空間社群!" + }, + "Mapping-DC-meetup": { + "name": "Mapping DC", + "description": "改善華府區域的 OpenStreetMap", + "extendedDescription": "我們是一群致力於改善華府區域的 OpenStreetMap 的群組。我們也努力教導其他人關於 OSM 的生態系、資料分析、製圖與 GIS。我們每隔一個月聚會一次,每次僅聚焦在我們的城市中的一個地區。" + }, + "OSM-Boston": { + "name": "開放街圖波士頓", + "description": "波士頓的圖客與開放街圖使用者", + "extendedDescription": "開放街圖是一份自由開放的維基風格世界地圖,每天都有數十萬像您這樣的人們做出貢獻。編輯地圖很簡單,而且很有趣!不管是在戶內或是戶外都可以加入我們,來建立波士頓地區與世界其他地方最好的地圖吧!" + }, + "OSM-Chattanooga": { + "name": "OSM 查塔努加", + "description": "查塔努加的 OpenStreetMap 使用者群組" + }, + "OSM-Colorado": { + "name": "開放街圖科羅拉多", + "description": "在美國科羅拉多州的圖客與開放街圖使用者", + "extendedDescription": "開放街圖 (OpenStreetMap, OSM) 科羅拉多是一個喜歡貢獻他們的心力建立自由地圖的一群地區協作夥伴。我們鼓勵我們所有的圖客組織或建議橫跨整個州的製圖活動。會面活動可以是簡單的社交活動、OSM 基礎到進階訓練,或是社群製圖派對。" + }, + "OSM-NYC": { + "name": "OpenStreetMap NYC", + "description": "在紐約都會區的圖客與 OpenStreetMap 使用者、開發者與愛好者" + }, + "OSM-Portland": { + "name": "OpenStreetMap 波特蘭", + "description": "波特蘭區域的圖客與 OpenStreetMap 使用者", + "extendedDescription": "OpenStreetMap (OSM) 是一幅由像你這樣的人所製作的世界地圖。它是由你所建構,並如同維基百科那樣自由提供給所有人的地圖。看看 osm.org 以取得更多資訊,然後在聚會上加入我們來說說地圖的故事、對 OSM 貢獻然後玩得開心!" + }, + "OSM-Seattle": { + "name": "開放街圖西雅圖", + "description": "在西雅圖的圖客與開放街圖使用者" + }, + "OSM-South-Bay": { + "name": "OSM South Bay", + "description": "由為聖荷西寫程式主辦的地圖之夜", + "extendedDescription": "為聖荷西寫程式是為美國寫程式的地區分支,週四晚上在聖荷西市中心舉辦每月地圖之夜。結識南灣區的圖客,與當地的製圖專案交流,聽聽其他的公民科技專案。寫程式或 GIS 相關技能都並非必要。" + }, + "OSM-Tampa-Bay": { + "name": "開放街圖坦帕灣", + "description": "坦帕灣的圖客與開放街圖使用者", + "extendedDescription": "OSM 坦帕灣群組讓當地居民聚在一起,用開放街圖建立坦帕灣的準確地圖。如果您使用地圖、資料、開放原始碼、GPS、徒步旅行或是騎腳踏車等等,您將會很喜歡與 OSM 合作,所以請加入吧!我們會聚在一起,製圖並討論每月的新主題。" + }, + "OSM-US-Slack": { + "name": "OpenStreetMap US Slack", + "description": "歡迎所有人加入!在 {signupUrl} 註冊" + }, + "OSM-US": { + "name": "開放街圖美國", + "description": "我們協助美國的開放街圖成長茁壯並改善它。", + "extendedDescription": "我們透過舉辦年度研討會、提供社群資源、建立合作關係以及推廣來支援開放街圖。在此加入開放街圖美國:{signupUrl}" + }, + "OSM-Utah": { + "name": "開放街圖猶他", + "description": "在鹽湖城區域的圖客與開放街圖使用者", + "extendedDescription": "我們可能會舉辦的活動有:學習製圖工作坊、製圖派對與戶外資料蒐集。活動將會在鹽湖城區舉辦,至少一開始是這樣。我們正在尋找經驗豐富的圖客與 OSM 新手。加入我們,一起來製圖吧!" + }, + "OSM-Wyoming": { + "name": "開放街圖懷俄明", + "description": "在懷俄明州的圖客與開放街圖使用者", + "extendedDescription": "開放街圖 (OpenStreetMap, OSM) 懷俄明是一個喜歡貢獻他們的心力建立自由地圖的一群地區協作夥伴。我們鼓勵我們所有的圖客組織或建議橫跨整個州的製圖活動。會面活動可以是簡單的社交活動、OSM 基礎到進階訓練,或是社群製圖派對。" + }, + "PHXGeo-meetup": { + "name": "PHXGeo Meetup", + "description": "在亞利桑那州鳳凰城的圖客與開放街圖使用者", + "extendedDescription": "這是一個給住在鳳凰城,喜歡地圖、GIS、開放街圖、製圖與其他東西的群組。" + }, + "PHXGeo-twitter": { + "name": "PHXGeo Twitter", + "description": "在 {url} 上追隨我們的 Twitter" + }, + "Western-Slope-facebook": { + "name": "Western Slope OSM Facebook", + "description": "在科羅拉多州大章克申的圖客與開放街圖使用者" + }, + "Western-Slope-meetup": { + "name": "Western Slope OSM Meetup", + "description": "在科羅拉多州大章克申的圖客與開放街圖使用者", + "extendedDescription": "此群組的目標是介紹開放街圖給社群知道,並發展圖客社群、利用任何方法建立盡可能多的地理資料並把這些資料提供給社群。想像準確的線索標示!想像自行車道的進一步發展!想像您想要什麼,這就是開放街圖的有趣之處!" + }, + "Maptime-Australia-Slack": { + "name": "Maptime Australia Slack", + "description": "在 {signupUrl} 註冊" + }, + "Maptime-Bogota": { + "name": "Maptime Bogotá", + "description": "我們是一群關心波哥大一帶開放街圖狀況的圖客。", + "extendedDescription": "學習在現場收集資料,然後在開放街圖上面數位位。你不需要有先備知識!你只要有心參與、學習以及好好玩。" + }, + "OSM-CO-facebook": { + "name": "開放街圖哥倫比亞 Facebook", + "description": "加入開放街圖哥倫比亞社群 Facebook" + }, + "OSM-PE-telegram": { + "name": "開放街圖祕魯 Telegram", + "description": "加入開放街圖祕魯 Telegram 聊天室" + }, + "OSM-PE-twitter": { + "name": "開放街圖祕魯 Twitter", + "description": "在 {url} 上追隨我們的 Twitter " + }, + "OSM-PE": { + "name": "開放街圖祕魯", + "description": "開放街圖社群的新聞和資源頁面" + }, + "OSM-Reddit": { + "name": "在 Reddit 上的 OpenStreetMap", + "description": "/r/openstreetmap/ 是一個取得更多關於 OpenStreetMap 資訊的好地方。什麼事都能問!" + } } } } \ No newline at end of file diff --git a/vendor/assets/iD/iD/locales/zh.json b/vendor/assets/iD/iD/locales/zh.json index 5dc792319..77c806293 100644 --- a/vendor/assets/iD/iD/locales/zh.json +++ b/vendor/assets/iD/iD/locales/zh.json @@ -221,10 +221,7 @@ "unsaved_changes": "您有未保存的更改" }, "success": { - "edited_osm": "编辑OSM!", - "just_edited": "你正在编辑的OpenStreetMap!", - "view_on_osm": "在OSM上查看", - "facebook": "在Facebook上分享" + "just_edited": "你正在编辑的OpenStreetMap!" }, "splash": { "welcome": "欢迎使用OpenStreetMap编辑器iD",